[
  {
    "path": ".gitattributes",
    "content": "* text eol=lf\n*.png binary\n"
  },
  {
    "path": ".github/workflows/generate-release-yml.rs",
    "content": "#!/usr/bin/env rust-script\n//! Copyright (c) Meta Platforms, Inc. and affiliates.\n//!\n//! This source code is licensed under the MIT license found in the\n//! LICENSE file in the root directory of this source tree.\n//!\n//! ```cargo\n//! [dependencies]\n//! anyhow = \"1.0.72\"\n//! atomicwrites = \"0.4.1\"\n//! yaml-rust = \"0.4.5\"\n//! ```\n\nuse std::io::Write;\nuse std::path::Path;\n\nuse anyhow::anyhow;\nuse anyhow::bail;\nuse atomicwrites::AllowOverwrite;\nuse atomicwrites::AtomicFile;\nuse yaml_rust::Yaml;\nuse yaml_rust::YamlEmitter;\nuse yaml_rust::YamlLoader;\nuse yaml_rust::yaml::Hash;\n\ntype Pattern = Box<dyn Fn(&str, &str) -> String + 'static>;\n\nfn parse_pattern(pattern: &String) -> Option<(Pattern, Vec<&'static str>)> {\n    // TODO: generalize this with an external table or something\n    if pattern.contains(\"%UBUNTU_LTS_VERSION%\") {\n        Some((\n            Box::new(move |p: &str, s: &str| p.replace(\"%UBUNTU_LTS_VERSION%\", s)),\n            vec![\"22\", \"24\"],\n        ))\n    } else if pattern.contains(\"%FEDORA_STABLE_VERSION%\") {\n        Some((\n            Box::new(move |p: &str, s: &str| p.replace(\"%FEDORA_STABLE_VERSION%\", s)),\n            vec![\"40\", \"41\", \"42\"],\n        ))\n    } else {\n        None\n    }\n}\n\nfn substitute_value(pattern: &Pattern, value: &Yaml, substitution: &str) -> Yaml {\n    match value {\n        Yaml::String(str) => Yaml::String(pattern(&str, substitution)),\n        Yaml::Array(arr) => Yaml::Array(\n            arr.iter()\n                .map(|v| substitute_value(pattern, v, substitution))\n                .collect(),\n        ),\n        Yaml::Hash(hm) => {\n            let mut new = Hash::new();\n            for (key, value) in hm.iter() {\n                new.insert(\n                    substitute_value(pattern, &key, substitution),\n                    substitute_value(pattern, &value, substitution),\n                );\n            }\n            Yaml::Hash(new)\n        }\n        otherwise => otherwise.clone(),\n    }\n}\n\nfn expand_value(value: &Yaml) -> Yaml {\n    match value {\n        Yaml::Array(arr) => Yaml::Array(arr.iter().map(expand_value).collect()),\n        Yaml::Hash(hm) => {\n            let mut new = Hash::new();\n            for (key, value) in hm.iter() {\n                //println!(\"key = {:?}\", key);\n                if let Yaml::String(key_str) = key {\n                    if let Some((pat, substitutions)) = parse_pattern(&key_str) {\n                        for substitution in substitutions {\n                            new.insert(\n                                Yaml::String(pat(&key_str, substitution)),\n                                substitute_value(&pat, &value, substitution),\n                            );\n                        }\n                    } else {\n                        new.insert(key.clone(), expand_value(value));\n                    }\n                } else {\n                    // What does a non-string key mean anyways?\n                    new.insert(key.clone(), expand_value(value));\n                }\n            }\n            Yaml::Hash(new)\n        }\n        otherwise => otherwise.clone(),\n    }\n}\n\nfn main() -> anyhow::Result<()> {\n    let Some(base_path) = std::env::var_os(\"RUST_SCRIPT_BASE_PATH\") else {\n        bail!(\"RUST_SCRIPT_BASE_PATH must be set\");\n    };\n    let base_path = Path::new(&base_path);\n    let input_path = base_path.join(\"release.yml.in\");\n    let output_path = base_path.join(\"release.yml\");\n\n    let contents = match std::fs::read_to_string(&input_path) {\n        Ok(contents) => contents,\n        Err(e) => {\n            bail!(\"Unable to read {}: {}\", input_path.display(), e);\n        }\n    };\n    let doc = match YamlLoader::load_from_str(&contents) {\n        Ok(doc) => doc,\n        Err(e) => {\n            bail!(\"Unable to parse {}: {}\", input_path.display(), e);\n        }\n    };\n\n    let new_doc: Vec<Yaml> = doc.iter().map(expand_value).collect();\n\n    let mut out_str = String::new();\n    out_str.extend(\"# \\x40generated by generate-release-yml.rs\\n\".chars());\n\n    let mut emitter = YamlEmitter::new(&mut out_str);\n    for doc in new_doc {\n        match emitter.dump(&doc) {\n            Ok(()) => (),\n            Err(e) => {\n                bail!(\"Unable to generate {}: {}\", output_path.display(), e);\n            }\n        }\n    }\n\n    let af = AtomicFile::new(&output_path, AllowOverwrite);\n    af.write(|f| f.write_all(&out_str.as_bytes()))\n        .map_err(|e| anyhow!(\"Unable to write {}: {}\", output_path.display(), e))\n}\n"
  },
  {
    "path": ".github/workflows/getdeps_linux.yml",
    "content": "# This file was @generated by getdeps.py\n\nname: linux\n\non:\n  push:\n    branches:\n    - main\n  pull_request:\n    branches:\n    - main\n\npermissions:\n  contents: read  #  to fetch code (actions/checkout)\n\njobs:\n  build:\n    runs-on: ubuntu-22.04\n    steps:\n    - uses: actions/checkout@v6\n    - name: Show disk space at start\n      run: df -h\n    - name: Free up disk space\n      run: sudo rm -rf /usr/local/lib/android\n    - name: Show disk space after freeing up\n      run: df -h\n    - name: Update system package info\n      run: sudo --preserve-env=http_proxy apt-get update\n    - name: Install system deps\n      run: sudo --preserve-env=http_proxy python3 build/fbcode_builder/getdeps.py --allow-system-packages install-system-deps --recursive watchman && sudo --preserve-env=http_proxy python3 build/fbcode_builder/getdeps.py --allow-system-packages install-system-deps --recursive patchelf\n    - id: paths\n      name: Query paths\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages query-paths --recursive --src-dir=. watchman  >> \"$GITHUB_OUTPUT\"\n    - name: Install Rust Stable\n      uses: dtolnay/rust-toolchain@stable\n    - name: Fetch boost\n      if: ${{ steps.paths.outputs.boost_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests boost\n    - name: Fetch ninja\n      if: ${{ steps.paths.outputs.ninja_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests ninja\n    - name: Fetch cmake\n      if: ${{ steps.paths.outputs.cmake_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests cmake\n    - name: Fetch cpptoml\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests cpptoml\n    - name: Fetch fmt\n      if: ${{ steps.paths.outputs.fmt_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fmt\n    - name: Fetch gflags\n      if: ${{ steps.paths.outputs.gflags_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests gflags\n    - name: Fetch glog\n      if: ${{ steps.paths.outputs.glog_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests glog\n    - name: Fetch googletest\n      if: ${{ steps.paths.outputs.googletest_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests googletest\n    - name: Fetch xxhash\n      if: ${{ steps.paths.outputs.xxhash_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests xxhash\n    - name: Fetch zstd\n      if: ${{ steps.paths.outputs.zstd_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests zstd\n    - name: Fetch double-conversion\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests double-conversion\n    - name: Fetch fast_float\n      if: ${{ steps.paths.outputs.fast_float_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fast_float\n    - name: Fetch libaio\n      if: ${{ steps.paths.outputs.libaio_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libaio\n    - name: Fetch libdwarf\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libdwarf\n    - name: Fetch libevent\n      if: ${{ steps.paths.outputs.libevent_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libevent\n    - name: Fetch lz4\n      if: ${{ steps.paths.outputs.lz4_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests lz4\n    - name: Fetch snappy\n      if: ${{ steps.paths.outputs.snappy_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests snappy\n    - name: Fetch pcre2\n      if: ${{ steps.paths.outputs.pcre2_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests pcre2\n    - name: Fetch python-setuptools-69\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests python-setuptools-69\n    - name: Fetch zlib\n      if: ${{ steps.paths.outputs.zlib_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests zlib\n    - name: Fetch openssl\n      if: ${{ steps.paths.outputs.openssl_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests openssl\n    - name: Fetch liboqs\n      if: ${{ steps.paths.outputs.liboqs_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests liboqs\n    - name: Fetch autoconf\n      if: ${{ steps.paths.outputs.autoconf_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests autoconf\n    - name: Fetch automake\n      if: ${{ steps.paths.outputs.automake_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests automake\n    - name: Fetch libtool\n      if: ${{ steps.paths.outputs.libtool_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libtool\n    - name: Fetch libsodium\n      if: ${{ steps.paths.outputs.libsodium_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libsodium\n    - name: Fetch libiberty\n      if: ${{ steps.paths.outputs.libiberty_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libiberty\n    - name: Fetch libunwind\n      if: ${{ steps.paths.outputs.libunwind_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libunwind\n    - name: Fetch xz\n      if: ${{ steps.paths.outputs.xz_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests xz\n    - name: Fetch folly\n      if: ${{ steps.paths.outputs.folly_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests folly\n    - name: Fetch fizz\n      if: ${{ steps.paths.outputs.fizz_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fizz\n    - name: Fetch mvfst\n      if: ${{ steps.paths.outputs.mvfst_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests mvfst\n    - name: Fetch wangle\n      if: ${{ steps.paths.outputs.wangle_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests wangle\n    - name: Fetch fbthrift\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fbthrift\n    - name: Fetch fb303\n      if: ${{ steps.paths.outputs.fb303_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fb303\n    - name: Fetch edencommon\n      if: ${{ steps.paths.outputs.edencommon_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests edencommon\n    - name: Restore boost from cache\n      id: restore_boost\n      if: ${{ steps.paths.outputs.boost_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.boost_INSTALL }}\n       key: ${{ steps.paths.outputs.boost_CACHE_KEY }}-install\n    - name: Build boost\n      if: ${{ steps.paths.outputs.boost_SOURCE && ! steps.restore_boost.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests boost\n    - name: Save boost to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.boost_SOURCE && ! steps.restore_boost.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.boost_INSTALL }}\n       key: ${{ steps.paths.outputs.boost_CACHE_KEY }}-install\n    - name: Restore ninja from cache\n      id: restore_ninja\n      if: ${{ steps.paths.outputs.ninja_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.ninja_INSTALL }}\n       key: ${{ steps.paths.outputs.ninja_CACHE_KEY }}-install\n    - name: Build ninja\n      if: ${{ steps.paths.outputs.ninja_SOURCE && ! steps.restore_ninja.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests ninja\n    - name: Save ninja to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.ninja_SOURCE && ! steps.restore_ninja.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.ninja_INSTALL }}\n       key: ${{ steps.paths.outputs.ninja_CACHE_KEY }}-install\n    - name: Restore cmake from cache\n      id: restore_cmake\n      if: ${{ steps.paths.outputs.cmake_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.cmake_INSTALL }}\n       key: ${{ steps.paths.outputs.cmake_CACHE_KEY }}-install\n    - name: Build cmake\n      if: ${{ steps.paths.outputs.cmake_SOURCE && ! steps.restore_cmake.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests cmake\n    - name: Save cmake to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.cmake_SOURCE && ! steps.restore_cmake.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.cmake_INSTALL }}\n       key: ${{ steps.paths.outputs.cmake_CACHE_KEY }}-install\n    - name: Restore cpptoml from cache\n      id: restore_cpptoml\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.cpptoml_INSTALL }}\n       key: ${{ steps.paths.outputs.cpptoml_CACHE_KEY }}-install\n    - name: Build cpptoml\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE && ! steps.restore_cpptoml.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests cpptoml\n    - name: Save cpptoml to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE && ! steps.restore_cpptoml.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.cpptoml_INSTALL }}\n       key: ${{ steps.paths.outputs.cpptoml_CACHE_KEY }}-install\n    - name: Restore fmt from cache\n      id: restore_fmt\n      if: ${{ steps.paths.outputs.fmt_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fmt_INSTALL }}\n       key: ${{ steps.paths.outputs.fmt_CACHE_KEY }}-install\n    - name: Build fmt\n      if: ${{ steps.paths.outputs.fmt_SOURCE && ! steps.restore_fmt.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fmt\n    - name: Save fmt to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fmt_SOURCE && ! steps.restore_fmt.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fmt_INSTALL }}\n       key: ${{ steps.paths.outputs.fmt_CACHE_KEY }}-install\n    - name: Restore gflags from cache\n      id: restore_gflags\n      if: ${{ steps.paths.outputs.gflags_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.gflags_INSTALL }}\n       key: ${{ steps.paths.outputs.gflags_CACHE_KEY }}-install\n    - name: Build gflags\n      if: ${{ steps.paths.outputs.gflags_SOURCE && ! steps.restore_gflags.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests gflags\n    - name: Save gflags to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.gflags_SOURCE && ! steps.restore_gflags.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.gflags_INSTALL }}\n       key: ${{ steps.paths.outputs.gflags_CACHE_KEY }}-install\n    - name: Restore glog from cache\n      id: restore_glog\n      if: ${{ steps.paths.outputs.glog_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.glog_INSTALL }}\n       key: ${{ steps.paths.outputs.glog_CACHE_KEY }}-install\n    - name: Build glog\n      if: ${{ steps.paths.outputs.glog_SOURCE && ! steps.restore_glog.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests glog\n    - name: Save glog to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.glog_SOURCE && ! steps.restore_glog.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.glog_INSTALL }}\n       key: ${{ steps.paths.outputs.glog_CACHE_KEY }}-install\n    - name: Restore googletest from cache\n      id: restore_googletest\n      if: ${{ steps.paths.outputs.googletest_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.googletest_INSTALL }}\n       key: ${{ steps.paths.outputs.googletest_CACHE_KEY }}-install\n    - name: Build googletest\n      if: ${{ steps.paths.outputs.googletest_SOURCE && ! steps.restore_googletest.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests googletest\n    - name: Save googletest to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.googletest_SOURCE && ! steps.restore_googletest.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.googletest_INSTALL }}\n       key: ${{ steps.paths.outputs.googletest_CACHE_KEY }}-install\n    - name: Restore xxhash from cache\n      id: restore_xxhash\n      if: ${{ steps.paths.outputs.xxhash_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.xxhash_INSTALL }}\n       key: ${{ steps.paths.outputs.xxhash_CACHE_KEY }}-install\n    - name: Build xxhash\n      if: ${{ steps.paths.outputs.xxhash_SOURCE && ! steps.restore_xxhash.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests xxhash\n    - name: Save xxhash to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.xxhash_SOURCE && ! steps.restore_xxhash.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.xxhash_INSTALL }}\n       key: ${{ steps.paths.outputs.xxhash_CACHE_KEY }}-install\n    - name: Restore zstd from cache\n      id: restore_zstd\n      if: ${{ steps.paths.outputs.zstd_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.zstd_INSTALL }}\n       key: ${{ steps.paths.outputs.zstd_CACHE_KEY }}-install\n    - name: Build zstd\n      if: ${{ steps.paths.outputs.zstd_SOURCE && ! steps.restore_zstd.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests zstd\n    - name: Save zstd to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.zstd_SOURCE && ! steps.restore_zstd.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.zstd_INSTALL }}\n       key: ${{ steps.paths.outputs.zstd_CACHE_KEY }}-install\n    - name: Restore double-conversion from cache\n      id: restore_double-conversion\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.double-conversion_INSTALL }}\n       key: ${{ steps.paths.outputs.double-conversion_CACHE_KEY }}-install\n    - name: Build double-conversion\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE && ! steps.restore_double-conversion.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests double-conversion\n    - name: Save double-conversion to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE && ! steps.restore_double-conversion.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.double-conversion_INSTALL }}\n       key: ${{ steps.paths.outputs.double-conversion_CACHE_KEY }}-install\n    - name: Restore fast_float from cache\n      id: restore_fast_float\n      if: ${{ steps.paths.outputs.fast_float_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fast_float_INSTALL }}\n       key: ${{ steps.paths.outputs.fast_float_CACHE_KEY }}-install\n    - name: Build fast_float\n      if: ${{ steps.paths.outputs.fast_float_SOURCE && ! steps.restore_fast_float.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fast_float\n    - name: Save fast_float to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fast_float_SOURCE && ! steps.restore_fast_float.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fast_float_INSTALL }}\n       key: ${{ steps.paths.outputs.fast_float_CACHE_KEY }}-install\n    - name: Restore libaio from cache\n      id: restore_libaio\n      if: ${{ steps.paths.outputs.libaio_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libaio_INSTALL }}\n       key: ${{ steps.paths.outputs.libaio_CACHE_KEY }}-install\n    - name: Build libaio\n      if: ${{ steps.paths.outputs.libaio_SOURCE && ! steps.restore_libaio.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libaio\n    - name: Save libaio to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libaio_SOURCE && ! steps.restore_libaio.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libaio_INSTALL }}\n       key: ${{ steps.paths.outputs.libaio_CACHE_KEY }}-install\n    - name: Restore libdwarf from cache\n      id: restore_libdwarf\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libdwarf_INSTALL }}\n       key: ${{ steps.paths.outputs.libdwarf_CACHE_KEY }}-install\n    - name: Build libdwarf\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE && ! steps.restore_libdwarf.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libdwarf\n    - name: Save libdwarf to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE && ! steps.restore_libdwarf.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libdwarf_INSTALL }}\n       key: ${{ steps.paths.outputs.libdwarf_CACHE_KEY }}-install\n    - name: Restore libevent from cache\n      id: restore_libevent\n      if: ${{ steps.paths.outputs.libevent_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libevent_INSTALL }}\n       key: ${{ steps.paths.outputs.libevent_CACHE_KEY }}-install\n    - name: Build libevent\n      if: ${{ steps.paths.outputs.libevent_SOURCE && ! steps.restore_libevent.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libevent\n    - name: Save libevent to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libevent_SOURCE && ! steps.restore_libevent.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libevent_INSTALL }}\n       key: ${{ steps.paths.outputs.libevent_CACHE_KEY }}-install\n    - name: Restore lz4 from cache\n      id: restore_lz4\n      if: ${{ steps.paths.outputs.lz4_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.lz4_INSTALL }}\n       key: ${{ steps.paths.outputs.lz4_CACHE_KEY }}-install\n    - name: Build lz4\n      if: ${{ steps.paths.outputs.lz4_SOURCE && ! steps.restore_lz4.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests lz4\n    - name: Save lz4 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.lz4_SOURCE && ! steps.restore_lz4.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.lz4_INSTALL }}\n       key: ${{ steps.paths.outputs.lz4_CACHE_KEY }}-install\n    - name: Restore snappy from cache\n      id: restore_snappy\n      if: ${{ steps.paths.outputs.snappy_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.snappy_INSTALL }}\n       key: ${{ steps.paths.outputs.snappy_CACHE_KEY }}-install\n    - name: Build snappy\n      if: ${{ steps.paths.outputs.snappy_SOURCE && ! steps.restore_snappy.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests snappy\n    - name: Save snappy to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.snappy_SOURCE && ! steps.restore_snappy.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.snappy_INSTALL }}\n       key: ${{ steps.paths.outputs.snappy_CACHE_KEY }}-install\n    - name: Restore pcre2 from cache\n      id: restore_pcre2\n      if: ${{ steps.paths.outputs.pcre2_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.pcre2_INSTALL }}\n       key: ${{ steps.paths.outputs.pcre2_CACHE_KEY }}-install\n    - name: Build pcre2\n      if: ${{ steps.paths.outputs.pcre2_SOURCE && ! steps.restore_pcre2.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests pcre2\n    - name: Save pcre2 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.pcre2_SOURCE && ! steps.restore_pcre2.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.pcre2_INSTALL }}\n       key: ${{ steps.paths.outputs.pcre2_CACHE_KEY }}-install\n    - name: Restore python-setuptools-69 from cache\n      id: restore_python-setuptools-69\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.python-setuptools-69_INSTALL }}\n       key: ${{ steps.paths.outputs.python-setuptools-69_CACHE_KEY }}-install\n    - name: Build python-setuptools-69\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE && ! steps.restore_python-setuptools-69.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests python-setuptools-69\n    - name: Save python-setuptools-69 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE && ! steps.restore_python-setuptools-69.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.python-setuptools-69_INSTALL }}\n       key: ${{ steps.paths.outputs.python-setuptools-69_CACHE_KEY }}-install\n    - name: Restore zlib from cache\n      id: restore_zlib\n      if: ${{ steps.paths.outputs.zlib_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.zlib_INSTALL }}\n       key: ${{ steps.paths.outputs.zlib_CACHE_KEY }}-install\n    - name: Build zlib\n      if: ${{ steps.paths.outputs.zlib_SOURCE && ! steps.restore_zlib.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests zlib\n    - name: Save zlib to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.zlib_SOURCE && ! steps.restore_zlib.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.zlib_INSTALL }}\n       key: ${{ steps.paths.outputs.zlib_CACHE_KEY }}-install\n    - name: Restore openssl from cache\n      id: restore_openssl\n      if: ${{ steps.paths.outputs.openssl_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.openssl_INSTALL }}\n       key: ${{ steps.paths.outputs.openssl_CACHE_KEY }}-install\n    - name: Build openssl\n      if: ${{ steps.paths.outputs.openssl_SOURCE && ! steps.restore_openssl.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests openssl\n    - name: Save openssl to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.openssl_SOURCE && ! steps.restore_openssl.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.openssl_INSTALL }}\n       key: ${{ steps.paths.outputs.openssl_CACHE_KEY }}-install\n    - name: Restore liboqs from cache\n      id: restore_liboqs\n      if: ${{ steps.paths.outputs.liboqs_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.liboqs_INSTALL }}\n       key: ${{ steps.paths.outputs.liboqs_CACHE_KEY }}-install\n    - name: Build liboqs\n      if: ${{ steps.paths.outputs.liboqs_SOURCE && ! steps.restore_liboqs.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests liboqs\n    - name: Save liboqs to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.liboqs_SOURCE && ! steps.restore_liboqs.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.liboqs_INSTALL }}\n       key: ${{ steps.paths.outputs.liboqs_CACHE_KEY }}-install\n    - name: Restore autoconf from cache\n      id: restore_autoconf\n      if: ${{ steps.paths.outputs.autoconf_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.autoconf_INSTALL }}\n       key: ${{ steps.paths.outputs.autoconf_CACHE_KEY }}-install\n    - name: Build autoconf\n      if: ${{ steps.paths.outputs.autoconf_SOURCE && ! steps.restore_autoconf.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests autoconf\n    - name: Save autoconf to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.autoconf_SOURCE && ! steps.restore_autoconf.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.autoconf_INSTALL }}\n       key: ${{ steps.paths.outputs.autoconf_CACHE_KEY }}-install\n    - name: Restore automake from cache\n      id: restore_automake\n      if: ${{ steps.paths.outputs.automake_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.automake_INSTALL }}\n       key: ${{ steps.paths.outputs.automake_CACHE_KEY }}-install\n    - name: Build automake\n      if: ${{ steps.paths.outputs.automake_SOURCE && ! steps.restore_automake.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests automake\n    - name: Save automake to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.automake_SOURCE && ! steps.restore_automake.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.automake_INSTALL }}\n       key: ${{ steps.paths.outputs.automake_CACHE_KEY }}-install\n    - name: Restore libtool from cache\n      id: restore_libtool\n      if: ${{ steps.paths.outputs.libtool_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libtool_INSTALL }}\n       key: ${{ steps.paths.outputs.libtool_CACHE_KEY }}-install\n    - name: Build libtool\n      if: ${{ steps.paths.outputs.libtool_SOURCE && ! steps.restore_libtool.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libtool\n    - name: Save libtool to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libtool_SOURCE && ! steps.restore_libtool.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libtool_INSTALL }}\n       key: ${{ steps.paths.outputs.libtool_CACHE_KEY }}-install\n    - name: Restore libsodium from cache\n      id: restore_libsodium\n      if: ${{ steps.paths.outputs.libsodium_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libsodium_INSTALL }}\n       key: ${{ steps.paths.outputs.libsodium_CACHE_KEY }}-install\n    - name: Build libsodium\n      if: ${{ steps.paths.outputs.libsodium_SOURCE && ! steps.restore_libsodium.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libsodium\n    - name: Save libsodium to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libsodium_SOURCE && ! steps.restore_libsodium.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libsodium_INSTALL }}\n       key: ${{ steps.paths.outputs.libsodium_CACHE_KEY }}-install\n    - name: Restore libiberty from cache\n      id: restore_libiberty\n      if: ${{ steps.paths.outputs.libiberty_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libiberty_INSTALL }}\n       key: ${{ steps.paths.outputs.libiberty_CACHE_KEY }}-install\n    - name: Build libiberty\n      if: ${{ steps.paths.outputs.libiberty_SOURCE && ! steps.restore_libiberty.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libiberty\n    - name: Save libiberty to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libiberty_SOURCE && ! steps.restore_libiberty.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libiberty_INSTALL }}\n       key: ${{ steps.paths.outputs.libiberty_CACHE_KEY }}-install\n    - name: Restore libunwind from cache\n      id: restore_libunwind\n      if: ${{ steps.paths.outputs.libunwind_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libunwind_INSTALL }}\n       key: ${{ steps.paths.outputs.libunwind_CACHE_KEY }}-install\n    - name: Build libunwind\n      if: ${{ steps.paths.outputs.libunwind_SOURCE && ! steps.restore_libunwind.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libunwind\n    - name: Save libunwind to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libunwind_SOURCE && ! steps.restore_libunwind.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libunwind_INSTALL }}\n       key: ${{ steps.paths.outputs.libunwind_CACHE_KEY }}-install\n    - name: Restore xz from cache\n      id: restore_xz\n      if: ${{ steps.paths.outputs.xz_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.xz_INSTALL }}\n       key: ${{ steps.paths.outputs.xz_CACHE_KEY }}-install\n    - name: Build xz\n      if: ${{ steps.paths.outputs.xz_SOURCE && ! steps.restore_xz.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests xz\n    - name: Save xz to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.xz_SOURCE && ! steps.restore_xz.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.xz_INSTALL }}\n       key: ${{ steps.paths.outputs.xz_CACHE_KEY }}-install\n    - name: Restore folly from cache\n      id: restore_folly\n      if: ${{ steps.paths.outputs.folly_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.folly_INSTALL }}\n       key: ${{ steps.paths.outputs.folly_CACHE_KEY }}-install\n    - name: Build folly\n      if: ${{ steps.paths.outputs.folly_SOURCE && ! steps.restore_folly.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests folly\n    - name: Save folly to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.folly_SOURCE && ! steps.restore_folly.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.folly_INSTALL }}\n       key: ${{ steps.paths.outputs.folly_CACHE_KEY }}-install\n    - name: Restore fizz from cache\n      id: restore_fizz\n      if: ${{ steps.paths.outputs.fizz_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fizz_INSTALL }}\n       key: ${{ steps.paths.outputs.fizz_CACHE_KEY }}-install\n    - name: Build fizz\n      if: ${{ steps.paths.outputs.fizz_SOURCE && ! steps.restore_fizz.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fizz\n    - name: Save fizz to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fizz_SOURCE && ! steps.restore_fizz.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fizz_INSTALL }}\n       key: ${{ steps.paths.outputs.fizz_CACHE_KEY }}-install\n    - name: Restore mvfst from cache\n      id: restore_mvfst\n      if: ${{ steps.paths.outputs.mvfst_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.mvfst_INSTALL }}\n       key: ${{ steps.paths.outputs.mvfst_CACHE_KEY }}-install\n    - name: Build mvfst\n      if: ${{ steps.paths.outputs.mvfst_SOURCE && ! steps.restore_mvfst.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests mvfst\n    - name: Save mvfst to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.mvfst_SOURCE && ! steps.restore_mvfst.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.mvfst_INSTALL }}\n       key: ${{ steps.paths.outputs.mvfst_CACHE_KEY }}-install\n    - name: Restore wangle from cache\n      id: restore_wangle\n      if: ${{ steps.paths.outputs.wangle_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.wangle_INSTALL }}\n       key: ${{ steps.paths.outputs.wangle_CACHE_KEY }}-install\n    - name: Build wangle\n      if: ${{ steps.paths.outputs.wangle_SOURCE && ! steps.restore_wangle.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests wangle\n    - name: Save wangle to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.wangle_SOURCE && ! steps.restore_wangle.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.wangle_INSTALL }}\n       key: ${{ steps.paths.outputs.wangle_CACHE_KEY }}-install\n    - name: Restore fbthrift from cache\n      id: restore_fbthrift\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fbthrift_INSTALL }}\n       key: ${{ steps.paths.outputs.fbthrift_CACHE_KEY }}-install\n    - name: Build fbthrift\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE && ! steps.restore_fbthrift.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fbthrift\n    - name: Save fbthrift to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE && ! steps.restore_fbthrift.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fbthrift_INSTALL }}\n       key: ${{ steps.paths.outputs.fbthrift_CACHE_KEY }}-install\n    - name: Restore fb303 from cache\n      id: restore_fb303\n      if: ${{ steps.paths.outputs.fb303_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fb303_INSTALL }}\n       key: ${{ steps.paths.outputs.fb303_CACHE_KEY }}-install\n    - name: Build fb303\n      if: ${{ steps.paths.outputs.fb303_SOURCE && ! steps.restore_fb303.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fb303\n    - name: Save fb303 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fb303_SOURCE && ! steps.restore_fb303.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fb303_INSTALL }}\n       key: ${{ steps.paths.outputs.fb303_CACHE_KEY }}-install\n    - name: Restore edencommon from cache\n      id: restore_edencommon\n      if: ${{ steps.paths.outputs.edencommon_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.edencommon_INSTALL }}\n       key: ${{ steps.paths.outputs.edencommon_CACHE_KEY }}-install\n    - name: Build edencommon\n      if: ${{ steps.paths.outputs.edencommon_SOURCE && ! steps.restore_edencommon.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests edencommon\n    - name: Save edencommon to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.edencommon_SOURCE && ! steps.restore_edencommon.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.edencommon_INSTALL }}\n       key: ${{ steps.paths.outputs.edencommon_CACHE_KEY }}-install\n    - name: Build watchman\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --src-dir=. watchman --project-install-prefix watchman:/usr/local\n    - name: Copy artifacts\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fixup-dyn-deps --strip --src-dir=. watchman _artifacts/linux --project-install-prefix watchman:/usr/local --final-install-prefix /usr/local\n    - uses: actions/upload-artifact@v6\n      with:\n        name: watchman\n        path: _artifacts\n    - name: Test watchman\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages test --src-dir=. watchman --project-install-prefix watchman:/usr/local\n    - name: Show disk space at end\n      if: always()\n      run: df -h\n"
  },
  {
    "path": ".github/workflows/getdeps_mac.yml",
    "content": "# This file was @generated by getdeps.py\n\nname: mac\n\non:\n  push:\n    branches:\n    - main\n  pull_request:\n    branches:\n    - main\n\npermissions:\n  contents: read  #  to fetch code (actions/checkout)\n\njobs:\n  build:\n    runs-on: macOS-latest\n    steps:\n    - uses: actions/checkout@v6\n    - name: Show disk space at start\n      run: df -h\n    - name: Free up disk space\n      run: sudo rm -rf /usr/local/lib/android\n    - name: Show disk space after freeing up\n      run: df -h\n    - name: Install system deps\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages install-system-deps --recursive watchman\n    - id: paths\n      name: Query paths\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages query-paths --recursive --src-dir=. watchman  >> \"$GITHUB_OUTPUT\"\n    - name: Install Rust Stable\n      uses: dtolnay/rust-toolchain@stable\n    - name: Fetch boost\n      if: ${{ steps.paths.outputs.boost_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests boost\n    - name: Fetch ninja\n      if: ${{ steps.paths.outputs.ninja_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests ninja\n    - name: Fetch cmake\n      if: ${{ steps.paths.outputs.cmake_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests cmake\n    - name: Fetch cpptoml\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests cpptoml\n    - name: Fetch fmt\n      if: ${{ steps.paths.outputs.fmt_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fmt\n    - name: Fetch gflags\n      if: ${{ steps.paths.outputs.gflags_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests gflags\n    - name: Fetch glog\n      if: ${{ steps.paths.outputs.glog_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests glog\n    - name: Fetch googletest\n      if: ${{ steps.paths.outputs.googletest_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests googletest\n    - name: Fetch xxhash\n      if: ${{ steps.paths.outputs.xxhash_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests xxhash\n    - name: Fetch zstd\n      if: ${{ steps.paths.outputs.zstd_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests zstd\n    - name: Fetch double-conversion\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests double-conversion\n    - name: Fetch fast_float\n      if: ${{ steps.paths.outputs.fast_float_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fast_float\n    - name: Fetch libdwarf\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libdwarf\n    - name: Fetch lz4\n      if: ${{ steps.paths.outputs.lz4_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests lz4\n    - name: Fetch openssl\n      if: ${{ steps.paths.outputs.openssl_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests openssl\n    - name: Fetch snappy\n      if: ${{ steps.paths.outputs.snappy_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests snappy\n    - name: Fetch pcre2\n      if: ${{ steps.paths.outputs.pcre2_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests pcre2\n    - name: Fetch python-setuptools-69\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests python-setuptools-69\n    - name: Fetch libevent\n      if: ${{ steps.paths.outputs.libevent_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libevent\n    - name: Fetch liboqs\n      if: ${{ steps.paths.outputs.liboqs_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests liboqs\n    - name: Fetch zlib\n      if: ${{ steps.paths.outputs.zlib_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests zlib\n    - name: Fetch autoconf\n      if: ${{ steps.paths.outputs.autoconf_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests autoconf\n    - name: Fetch automake\n      if: ${{ steps.paths.outputs.automake_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests automake\n    - name: Fetch libtool\n      if: ${{ steps.paths.outputs.libtool_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libtool\n    - name: Fetch libsodium\n      if: ${{ steps.paths.outputs.libsodium_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests libsodium\n    - name: Fetch xz\n      if: ${{ steps.paths.outputs.xz_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests xz\n    - name: Fetch folly\n      if: ${{ steps.paths.outputs.folly_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests folly\n    - name: Fetch fizz\n      if: ${{ steps.paths.outputs.fizz_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fizz\n    - name: Fetch mvfst\n      if: ${{ steps.paths.outputs.mvfst_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests mvfst\n    - name: Fetch wangle\n      if: ${{ steps.paths.outputs.wangle_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests wangle\n    - name: Fetch fbthrift\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fbthrift\n    - name: Fetch fb303\n      if: ${{ steps.paths.outputs.fb303_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests fb303\n    - name: Fetch edencommon\n      if: ${{ steps.paths.outputs.edencommon_SOURCE }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fetch --no-tests edencommon\n    - name: Restore boost from cache\n      id: restore_boost\n      if: ${{ steps.paths.outputs.boost_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.boost_INSTALL }}\n       key: ${{ steps.paths.outputs.boost_CACHE_KEY }}-install\n    - name: Build boost\n      if: ${{ steps.paths.outputs.boost_SOURCE && ! steps.restore_boost.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests boost\n    - name: Save boost to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.boost_SOURCE && ! steps.restore_boost.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.boost_INSTALL }}\n       key: ${{ steps.paths.outputs.boost_CACHE_KEY }}-install\n    - name: Restore ninja from cache\n      id: restore_ninja\n      if: ${{ steps.paths.outputs.ninja_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.ninja_INSTALL }}\n       key: ${{ steps.paths.outputs.ninja_CACHE_KEY }}-install\n    - name: Build ninja\n      if: ${{ steps.paths.outputs.ninja_SOURCE && ! steps.restore_ninja.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests ninja\n    - name: Save ninja to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.ninja_SOURCE && ! steps.restore_ninja.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.ninja_INSTALL }}\n       key: ${{ steps.paths.outputs.ninja_CACHE_KEY }}-install\n    - name: Restore cmake from cache\n      id: restore_cmake\n      if: ${{ steps.paths.outputs.cmake_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.cmake_INSTALL }}\n       key: ${{ steps.paths.outputs.cmake_CACHE_KEY }}-install\n    - name: Build cmake\n      if: ${{ steps.paths.outputs.cmake_SOURCE && ! steps.restore_cmake.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests cmake\n    - name: Save cmake to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.cmake_SOURCE && ! steps.restore_cmake.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.cmake_INSTALL }}\n       key: ${{ steps.paths.outputs.cmake_CACHE_KEY }}-install\n    - name: Restore cpptoml from cache\n      id: restore_cpptoml\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.cpptoml_INSTALL }}\n       key: ${{ steps.paths.outputs.cpptoml_CACHE_KEY }}-install\n    - name: Build cpptoml\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE && ! steps.restore_cpptoml.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests cpptoml\n    - name: Save cpptoml to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE && ! steps.restore_cpptoml.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.cpptoml_INSTALL }}\n       key: ${{ steps.paths.outputs.cpptoml_CACHE_KEY }}-install\n    - name: Restore fmt from cache\n      id: restore_fmt\n      if: ${{ steps.paths.outputs.fmt_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fmt_INSTALL }}\n       key: ${{ steps.paths.outputs.fmt_CACHE_KEY }}-install\n    - name: Build fmt\n      if: ${{ steps.paths.outputs.fmt_SOURCE && ! steps.restore_fmt.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fmt\n    - name: Save fmt to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fmt_SOURCE && ! steps.restore_fmt.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fmt_INSTALL }}\n       key: ${{ steps.paths.outputs.fmt_CACHE_KEY }}-install\n    - name: Restore gflags from cache\n      id: restore_gflags\n      if: ${{ steps.paths.outputs.gflags_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.gflags_INSTALL }}\n       key: ${{ steps.paths.outputs.gflags_CACHE_KEY }}-install\n    - name: Build gflags\n      if: ${{ steps.paths.outputs.gflags_SOURCE && ! steps.restore_gflags.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests gflags\n    - name: Save gflags to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.gflags_SOURCE && ! steps.restore_gflags.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.gflags_INSTALL }}\n       key: ${{ steps.paths.outputs.gflags_CACHE_KEY }}-install\n    - name: Restore glog from cache\n      id: restore_glog\n      if: ${{ steps.paths.outputs.glog_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.glog_INSTALL }}\n       key: ${{ steps.paths.outputs.glog_CACHE_KEY }}-install\n    - name: Build glog\n      if: ${{ steps.paths.outputs.glog_SOURCE && ! steps.restore_glog.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests glog\n    - name: Save glog to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.glog_SOURCE && ! steps.restore_glog.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.glog_INSTALL }}\n       key: ${{ steps.paths.outputs.glog_CACHE_KEY }}-install\n    - name: Restore googletest from cache\n      id: restore_googletest\n      if: ${{ steps.paths.outputs.googletest_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.googletest_INSTALL }}\n       key: ${{ steps.paths.outputs.googletest_CACHE_KEY }}-install\n    - name: Build googletest\n      if: ${{ steps.paths.outputs.googletest_SOURCE && ! steps.restore_googletest.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests googletest\n    - name: Save googletest to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.googletest_SOURCE && ! steps.restore_googletest.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.googletest_INSTALL }}\n       key: ${{ steps.paths.outputs.googletest_CACHE_KEY }}-install\n    - name: Restore xxhash from cache\n      id: restore_xxhash\n      if: ${{ steps.paths.outputs.xxhash_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.xxhash_INSTALL }}\n       key: ${{ steps.paths.outputs.xxhash_CACHE_KEY }}-install\n    - name: Build xxhash\n      if: ${{ steps.paths.outputs.xxhash_SOURCE && ! steps.restore_xxhash.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests xxhash\n    - name: Save xxhash to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.xxhash_SOURCE && ! steps.restore_xxhash.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.xxhash_INSTALL }}\n       key: ${{ steps.paths.outputs.xxhash_CACHE_KEY }}-install\n    - name: Restore zstd from cache\n      id: restore_zstd\n      if: ${{ steps.paths.outputs.zstd_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.zstd_INSTALL }}\n       key: ${{ steps.paths.outputs.zstd_CACHE_KEY }}-install\n    - name: Build zstd\n      if: ${{ steps.paths.outputs.zstd_SOURCE && ! steps.restore_zstd.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests zstd\n    - name: Save zstd to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.zstd_SOURCE && ! steps.restore_zstd.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.zstd_INSTALL }}\n       key: ${{ steps.paths.outputs.zstd_CACHE_KEY }}-install\n    - name: Restore double-conversion from cache\n      id: restore_double-conversion\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.double-conversion_INSTALL }}\n       key: ${{ steps.paths.outputs.double-conversion_CACHE_KEY }}-install\n    - name: Build double-conversion\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE && ! steps.restore_double-conversion.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests double-conversion\n    - name: Save double-conversion to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE && ! steps.restore_double-conversion.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.double-conversion_INSTALL }}\n       key: ${{ steps.paths.outputs.double-conversion_CACHE_KEY }}-install\n    - name: Restore fast_float from cache\n      id: restore_fast_float\n      if: ${{ steps.paths.outputs.fast_float_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fast_float_INSTALL }}\n       key: ${{ steps.paths.outputs.fast_float_CACHE_KEY }}-install\n    - name: Build fast_float\n      if: ${{ steps.paths.outputs.fast_float_SOURCE && ! steps.restore_fast_float.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fast_float\n    - name: Save fast_float to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fast_float_SOURCE && ! steps.restore_fast_float.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fast_float_INSTALL }}\n       key: ${{ steps.paths.outputs.fast_float_CACHE_KEY }}-install\n    - name: Restore libdwarf from cache\n      id: restore_libdwarf\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libdwarf_INSTALL }}\n       key: ${{ steps.paths.outputs.libdwarf_CACHE_KEY }}-install\n    - name: Build libdwarf\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE && ! steps.restore_libdwarf.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libdwarf\n    - name: Save libdwarf to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE && ! steps.restore_libdwarf.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libdwarf_INSTALL }}\n       key: ${{ steps.paths.outputs.libdwarf_CACHE_KEY }}-install\n    - name: Restore lz4 from cache\n      id: restore_lz4\n      if: ${{ steps.paths.outputs.lz4_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.lz4_INSTALL }}\n       key: ${{ steps.paths.outputs.lz4_CACHE_KEY }}-install\n    - name: Build lz4\n      if: ${{ steps.paths.outputs.lz4_SOURCE && ! steps.restore_lz4.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests lz4\n    - name: Save lz4 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.lz4_SOURCE && ! steps.restore_lz4.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.lz4_INSTALL }}\n       key: ${{ steps.paths.outputs.lz4_CACHE_KEY }}-install\n    - name: Restore openssl from cache\n      id: restore_openssl\n      if: ${{ steps.paths.outputs.openssl_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.openssl_INSTALL }}\n       key: ${{ steps.paths.outputs.openssl_CACHE_KEY }}-install\n    - name: Build openssl\n      if: ${{ steps.paths.outputs.openssl_SOURCE && ! steps.restore_openssl.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests openssl\n    - name: Save openssl to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.openssl_SOURCE && ! steps.restore_openssl.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.openssl_INSTALL }}\n       key: ${{ steps.paths.outputs.openssl_CACHE_KEY }}-install\n    - name: Restore snappy from cache\n      id: restore_snappy\n      if: ${{ steps.paths.outputs.snappy_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.snappy_INSTALL }}\n       key: ${{ steps.paths.outputs.snappy_CACHE_KEY }}-install\n    - name: Build snappy\n      if: ${{ steps.paths.outputs.snappy_SOURCE && ! steps.restore_snappy.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests snappy\n    - name: Save snappy to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.snappy_SOURCE && ! steps.restore_snappy.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.snappy_INSTALL }}\n       key: ${{ steps.paths.outputs.snappy_CACHE_KEY }}-install\n    - name: Restore pcre2 from cache\n      id: restore_pcre2\n      if: ${{ steps.paths.outputs.pcre2_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.pcre2_INSTALL }}\n       key: ${{ steps.paths.outputs.pcre2_CACHE_KEY }}-install\n    - name: Build pcre2\n      if: ${{ steps.paths.outputs.pcre2_SOURCE && ! steps.restore_pcre2.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests pcre2\n    - name: Save pcre2 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.pcre2_SOURCE && ! steps.restore_pcre2.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.pcre2_INSTALL }}\n       key: ${{ steps.paths.outputs.pcre2_CACHE_KEY }}-install\n    - name: Restore python-setuptools-69 from cache\n      id: restore_python-setuptools-69\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.python-setuptools-69_INSTALL }}\n       key: ${{ steps.paths.outputs.python-setuptools-69_CACHE_KEY }}-install\n    - name: Build python-setuptools-69\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE && ! steps.restore_python-setuptools-69.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests python-setuptools-69\n    - name: Save python-setuptools-69 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE && ! steps.restore_python-setuptools-69.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.python-setuptools-69_INSTALL }}\n       key: ${{ steps.paths.outputs.python-setuptools-69_CACHE_KEY }}-install\n    - name: Restore libevent from cache\n      id: restore_libevent\n      if: ${{ steps.paths.outputs.libevent_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libevent_INSTALL }}\n       key: ${{ steps.paths.outputs.libevent_CACHE_KEY }}-install\n    - name: Build libevent\n      if: ${{ steps.paths.outputs.libevent_SOURCE && ! steps.restore_libevent.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libevent\n    - name: Save libevent to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libevent_SOURCE && ! steps.restore_libevent.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libevent_INSTALL }}\n       key: ${{ steps.paths.outputs.libevent_CACHE_KEY }}-install\n    - name: Restore liboqs from cache\n      id: restore_liboqs\n      if: ${{ steps.paths.outputs.liboqs_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.liboqs_INSTALL }}\n       key: ${{ steps.paths.outputs.liboqs_CACHE_KEY }}-install\n    - name: Build liboqs\n      if: ${{ steps.paths.outputs.liboqs_SOURCE && ! steps.restore_liboqs.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests liboqs\n    - name: Save liboqs to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.liboqs_SOURCE && ! steps.restore_liboqs.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.liboqs_INSTALL }}\n       key: ${{ steps.paths.outputs.liboqs_CACHE_KEY }}-install\n    - name: Restore zlib from cache\n      id: restore_zlib\n      if: ${{ steps.paths.outputs.zlib_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.zlib_INSTALL }}\n       key: ${{ steps.paths.outputs.zlib_CACHE_KEY }}-install\n    - name: Build zlib\n      if: ${{ steps.paths.outputs.zlib_SOURCE && ! steps.restore_zlib.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests zlib\n    - name: Save zlib to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.zlib_SOURCE && ! steps.restore_zlib.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.zlib_INSTALL }}\n       key: ${{ steps.paths.outputs.zlib_CACHE_KEY }}-install\n    - name: Restore autoconf from cache\n      id: restore_autoconf\n      if: ${{ steps.paths.outputs.autoconf_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.autoconf_INSTALL }}\n       key: ${{ steps.paths.outputs.autoconf_CACHE_KEY }}-install\n    - name: Build autoconf\n      if: ${{ steps.paths.outputs.autoconf_SOURCE && ! steps.restore_autoconf.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests autoconf\n    - name: Save autoconf to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.autoconf_SOURCE && ! steps.restore_autoconf.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.autoconf_INSTALL }}\n       key: ${{ steps.paths.outputs.autoconf_CACHE_KEY }}-install\n    - name: Restore automake from cache\n      id: restore_automake\n      if: ${{ steps.paths.outputs.automake_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.automake_INSTALL }}\n       key: ${{ steps.paths.outputs.automake_CACHE_KEY }}-install\n    - name: Build automake\n      if: ${{ steps.paths.outputs.automake_SOURCE && ! steps.restore_automake.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests automake\n    - name: Save automake to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.automake_SOURCE && ! steps.restore_automake.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.automake_INSTALL }}\n       key: ${{ steps.paths.outputs.automake_CACHE_KEY }}-install\n    - name: Restore libtool from cache\n      id: restore_libtool\n      if: ${{ steps.paths.outputs.libtool_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libtool_INSTALL }}\n       key: ${{ steps.paths.outputs.libtool_CACHE_KEY }}-install\n    - name: Build libtool\n      if: ${{ steps.paths.outputs.libtool_SOURCE && ! steps.restore_libtool.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libtool\n    - name: Save libtool to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libtool_SOURCE && ! steps.restore_libtool.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libtool_INSTALL }}\n       key: ${{ steps.paths.outputs.libtool_CACHE_KEY }}-install\n    - name: Restore libsodium from cache\n      id: restore_libsodium\n      if: ${{ steps.paths.outputs.libsodium_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libsodium_INSTALL }}\n       key: ${{ steps.paths.outputs.libsodium_CACHE_KEY }}-install\n    - name: Build libsodium\n      if: ${{ steps.paths.outputs.libsodium_SOURCE && ! steps.restore_libsodium.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests libsodium\n    - name: Save libsodium to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libsodium_SOURCE && ! steps.restore_libsodium.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libsodium_INSTALL }}\n       key: ${{ steps.paths.outputs.libsodium_CACHE_KEY }}-install\n    - name: Restore xz from cache\n      id: restore_xz\n      if: ${{ steps.paths.outputs.xz_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.xz_INSTALL }}\n       key: ${{ steps.paths.outputs.xz_CACHE_KEY }}-install\n    - name: Build xz\n      if: ${{ steps.paths.outputs.xz_SOURCE && ! steps.restore_xz.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests xz\n    - name: Save xz to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.xz_SOURCE && ! steps.restore_xz.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.xz_INSTALL }}\n       key: ${{ steps.paths.outputs.xz_CACHE_KEY }}-install\n    - name: Restore folly from cache\n      id: restore_folly\n      if: ${{ steps.paths.outputs.folly_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.folly_INSTALL }}\n       key: ${{ steps.paths.outputs.folly_CACHE_KEY }}-install\n    - name: Build folly\n      if: ${{ steps.paths.outputs.folly_SOURCE && ! steps.restore_folly.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests folly\n    - name: Save folly to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.folly_SOURCE && ! steps.restore_folly.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.folly_INSTALL }}\n       key: ${{ steps.paths.outputs.folly_CACHE_KEY }}-install\n    - name: Restore fizz from cache\n      id: restore_fizz\n      if: ${{ steps.paths.outputs.fizz_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fizz_INSTALL }}\n       key: ${{ steps.paths.outputs.fizz_CACHE_KEY }}-install\n    - name: Build fizz\n      if: ${{ steps.paths.outputs.fizz_SOURCE && ! steps.restore_fizz.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fizz\n    - name: Save fizz to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fizz_SOURCE && ! steps.restore_fizz.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fizz_INSTALL }}\n       key: ${{ steps.paths.outputs.fizz_CACHE_KEY }}-install\n    - name: Restore mvfst from cache\n      id: restore_mvfst\n      if: ${{ steps.paths.outputs.mvfst_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.mvfst_INSTALL }}\n       key: ${{ steps.paths.outputs.mvfst_CACHE_KEY }}-install\n    - name: Build mvfst\n      if: ${{ steps.paths.outputs.mvfst_SOURCE && ! steps.restore_mvfst.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests mvfst\n    - name: Save mvfst to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.mvfst_SOURCE && ! steps.restore_mvfst.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.mvfst_INSTALL }}\n       key: ${{ steps.paths.outputs.mvfst_CACHE_KEY }}-install\n    - name: Restore wangle from cache\n      id: restore_wangle\n      if: ${{ steps.paths.outputs.wangle_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.wangle_INSTALL }}\n       key: ${{ steps.paths.outputs.wangle_CACHE_KEY }}-install\n    - name: Build wangle\n      if: ${{ steps.paths.outputs.wangle_SOURCE && ! steps.restore_wangle.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests wangle\n    - name: Save wangle to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.wangle_SOURCE && ! steps.restore_wangle.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.wangle_INSTALL }}\n       key: ${{ steps.paths.outputs.wangle_CACHE_KEY }}-install\n    - name: Restore fbthrift from cache\n      id: restore_fbthrift\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fbthrift_INSTALL }}\n       key: ${{ steps.paths.outputs.fbthrift_CACHE_KEY }}-install\n    - name: Build fbthrift\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE && ! steps.restore_fbthrift.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fbthrift\n    - name: Save fbthrift to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE && ! steps.restore_fbthrift.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fbthrift_INSTALL }}\n       key: ${{ steps.paths.outputs.fbthrift_CACHE_KEY }}-install\n    - name: Restore fb303 from cache\n      id: restore_fb303\n      if: ${{ steps.paths.outputs.fb303_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fb303_INSTALL }}\n       key: ${{ steps.paths.outputs.fb303_CACHE_KEY }}-install\n    - name: Build fb303\n      if: ${{ steps.paths.outputs.fb303_SOURCE && ! steps.restore_fb303.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests fb303\n    - name: Save fb303 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fb303_SOURCE && ! steps.restore_fb303.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fb303_INSTALL }}\n       key: ${{ steps.paths.outputs.fb303_CACHE_KEY }}-install\n    - name: Restore edencommon from cache\n      id: restore_edencommon\n      if: ${{ steps.paths.outputs.edencommon_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.edencommon_INSTALL }}\n       key: ${{ steps.paths.outputs.edencommon_CACHE_KEY }}-install\n    - name: Build edencommon\n      if: ${{ steps.paths.outputs.edencommon_SOURCE && ! steps.restore_edencommon.outputs.cache-hit }}\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --free-up-disk --no-tests edencommon\n    - name: Save edencommon to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.edencommon_SOURCE && ! steps.restore_edencommon.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.edencommon_INSTALL }}\n       key: ${{ steps.paths.outputs.edencommon_CACHE_KEY }}-install\n    - name: Build watchman\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages build --src-dir=. watchman --project-install-prefix watchman:/usr/local\n    - name: Copy artifacts\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fixup-dyn-deps --src-dir=. watchman _artifacts/mac --project-install-prefix watchman:/usr/local --final-install-prefix /usr/local\n    - uses: actions/upload-artifact@v6\n      with:\n        name: watchman\n        path: _artifacts\n    - name: Test watchman\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages test --src-dir=. watchman --project-install-prefix watchman:/usr/local\n    - name: Show disk space at end\n      if: always()\n      run: df -h\n"
  },
  {
    "path": ".github/workflows/getdeps_windows.yml",
    "content": "# This file was @generated by getdeps.py\n\nname: windows\n\non:\n  push:\n    branches:\n    - main\n  pull_request:\n    branches:\n    - main\n\npermissions:\n  contents: read  #  to fetch code (actions/checkout)\n\njobs:\n  build:\n    runs-on: windows-2022\n    steps:\n    - name: Export boost environment\n      run: \"echo BOOST_ROOT=%BOOST_ROOT_1_83_0% >> %GITHUB_ENV%\"\n      shell: cmd\n    - name: Fix Git config\n      run: >\n        git config --system core.longpaths true &&\n        git config --system core.autocrlf false &&\n        git config --system core.symlinks true\n      shell: cmd\n    - uses: actions/checkout@v6\n    - id: paths\n      name: Query paths\n      run: python build/fbcode_builder/getdeps.py query-paths --recursive --src-dir=. watchman  >> $env:GITHUB_OUTPUT\n      shell: pwsh\n    - name: Install Rust Stable\n      uses: dtolnay/rust-toolchain@stable\n    - name: Fetch boost\n      if: ${{ steps.paths.outputs.boost_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests boost\n    - name: Fetch ninja\n      if: ${{ steps.paths.outputs.ninja_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests ninja\n    - name: Fetch cmake\n      if: ${{ steps.paths.outputs.cmake_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests cmake\n    - name: Fetch cpptoml\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests cpptoml\n    - name: Fetch fmt\n      if: ${{ steps.paths.outputs.fmt_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests fmt\n    - name: Fetch gflags\n      if: ${{ steps.paths.outputs.gflags_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests gflags\n    - name: Fetch glog\n      if: ${{ steps.paths.outputs.glog_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests glog\n    - name: Fetch googletest\n      if: ${{ steps.paths.outputs.googletest_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests googletest\n    - name: Fetch libsodium\n      if: ${{ steps.paths.outputs.libsodium_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests libsodium\n    - name: Fetch xxhash\n      if: ${{ steps.paths.outputs.xxhash_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests xxhash\n    - name: Fetch zstd\n      if: ${{ steps.paths.outputs.zstd_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests zstd\n    - name: Fetch double-conversion\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests double-conversion\n    - name: Fetch fast_float\n      if: ${{ steps.paths.outputs.fast_float_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests fast_float\n    - name: Fetch libdwarf\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests libdwarf\n    - name: Fetch lz4\n      if: ${{ steps.paths.outputs.lz4_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests lz4\n    - name: Fetch snappy\n      if: ${{ steps.paths.outputs.snappy_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests snappy\n    - name: Fetch zlib\n      if: ${{ steps.paths.outputs.zlib_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests zlib\n    - name: Fetch pcre2\n      if: ${{ steps.paths.outputs.pcre2_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests pcre2\n    - name: Fetch python-setuptools-69\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests python-setuptools-69\n    - name: Fetch jom\n      if: ${{ steps.paths.outputs.jom_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests jom\n    - name: Fetch perl\n      if: ${{ steps.paths.outputs.perl_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests perl\n    - name: Fetch openssl\n      if: ${{ steps.paths.outputs.openssl_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests openssl\n    - name: Fetch libevent\n      if: ${{ steps.paths.outputs.libevent_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests libevent\n    - name: Fetch folly\n      if: ${{ steps.paths.outputs.folly_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests folly\n    - name: Fetch liboqs\n      if: ${{ steps.paths.outputs.liboqs_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests liboqs\n    - name: Fetch fizz\n      if: ${{ steps.paths.outputs.fizz_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests fizz\n    - name: Fetch mvfst\n      if: ${{ steps.paths.outputs.mvfst_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests mvfst\n    - name: Fetch wangle\n      if: ${{ steps.paths.outputs.wangle_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests wangle\n    - name: Fetch fbthrift\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests fbthrift\n    - name: Fetch fb303\n      if: ${{ steps.paths.outputs.fb303_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests fb303\n    - name: Fetch edencommon\n      if: ${{ steps.paths.outputs.edencommon_SOURCE }}\n      run: python build/fbcode_builder/getdeps.py fetch --no-tests edencommon\n    - name: Restore boost from cache\n      id: restore_boost\n      if: ${{ steps.paths.outputs.boost_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.boost_INSTALL }}\n       key: ${{ steps.paths.outputs.boost_CACHE_KEY }}-install\n    - name: Build boost\n      if: ${{ steps.paths.outputs.boost_SOURCE && ! steps.restore_boost.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests boost\n    - name: Save boost to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.boost_SOURCE && ! steps.restore_boost.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.boost_INSTALL }}\n       key: ${{ steps.paths.outputs.boost_CACHE_KEY }}-install\n    - name: Restore ninja from cache\n      id: restore_ninja\n      if: ${{ steps.paths.outputs.ninja_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.ninja_INSTALL }}\n       key: ${{ steps.paths.outputs.ninja_CACHE_KEY }}-install\n    - name: Build ninja\n      if: ${{ steps.paths.outputs.ninja_SOURCE && ! steps.restore_ninja.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests ninja\n    - name: Save ninja to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.ninja_SOURCE && ! steps.restore_ninja.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.ninja_INSTALL }}\n       key: ${{ steps.paths.outputs.ninja_CACHE_KEY }}-install\n    - name: Restore cmake from cache\n      id: restore_cmake\n      if: ${{ steps.paths.outputs.cmake_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.cmake_INSTALL }}\n       key: ${{ steps.paths.outputs.cmake_CACHE_KEY }}-install\n    - name: Build cmake\n      if: ${{ steps.paths.outputs.cmake_SOURCE && ! steps.restore_cmake.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests cmake\n    - name: Save cmake to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.cmake_SOURCE && ! steps.restore_cmake.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.cmake_INSTALL }}\n       key: ${{ steps.paths.outputs.cmake_CACHE_KEY }}-install\n    - name: Restore cpptoml from cache\n      id: restore_cpptoml\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.cpptoml_INSTALL }}\n       key: ${{ steps.paths.outputs.cpptoml_CACHE_KEY }}-install\n    - name: Build cpptoml\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE && ! steps.restore_cpptoml.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests cpptoml\n    - name: Save cpptoml to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.cpptoml_SOURCE && ! steps.restore_cpptoml.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.cpptoml_INSTALL }}\n       key: ${{ steps.paths.outputs.cpptoml_CACHE_KEY }}-install\n    - name: Restore fmt from cache\n      id: restore_fmt\n      if: ${{ steps.paths.outputs.fmt_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fmt_INSTALL }}\n       key: ${{ steps.paths.outputs.fmt_CACHE_KEY }}-install\n    - name: Build fmt\n      if: ${{ steps.paths.outputs.fmt_SOURCE && ! steps.restore_fmt.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests fmt\n    - name: Save fmt to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fmt_SOURCE && ! steps.restore_fmt.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fmt_INSTALL }}\n       key: ${{ steps.paths.outputs.fmt_CACHE_KEY }}-install\n    - name: Restore gflags from cache\n      id: restore_gflags\n      if: ${{ steps.paths.outputs.gflags_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.gflags_INSTALL }}\n       key: ${{ steps.paths.outputs.gflags_CACHE_KEY }}-install\n    - name: Build gflags\n      if: ${{ steps.paths.outputs.gflags_SOURCE && ! steps.restore_gflags.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests gflags\n    - name: Save gflags to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.gflags_SOURCE && ! steps.restore_gflags.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.gflags_INSTALL }}\n       key: ${{ steps.paths.outputs.gflags_CACHE_KEY }}-install\n    - name: Restore glog from cache\n      id: restore_glog\n      if: ${{ steps.paths.outputs.glog_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.glog_INSTALL }}\n       key: ${{ steps.paths.outputs.glog_CACHE_KEY }}-install\n    - name: Build glog\n      if: ${{ steps.paths.outputs.glog_SOURCE && ! steps.restore_glog.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests glog\n    - name: Save glog to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.glog_SOURCE && ! steps.restore_glog.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.glog_INSTALL }}\n       key: ${{ steps.paths.outputs.glog_CACHE_KEY }}-install\n    - name: Restore googletest from cache\n      id: restore_googletest\n      if: ${{ steps.paths.outputs.googletest_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.googletest_INSTALL }}\n       key: ${{ steps.paths.outputs.googletest_CACHE_KEY }}-install\n    - name: Build googletest\n      if: ${{ steps.paths.outputs.googletest_SOURCE && ! steps.restore_googletest.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests googletest\n    - name: Save googletest to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.googletest_SOURCE && ! steps.restore_googletest.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.googletest_INSTALL }}\n       key: ${{ steps.paths.outputs.googletest_CACHE_KEY }}-install\n    - name: Restore libsodium from cache\n      id: restore_libsodium\n      if: ${{ steps.paths.outputs.libsodium_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libsodium_INSTALL }}\n       key: ${{ steps.paths.outputs.libsodium_CACHE_KEY }}-install\n    - name: Build libsodium\n      if: ${{ steps.paths.outputs.libsodium_SOURCE && ! steps.restore_libsodium.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests libsodium\n    - name: Save libsodium to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libsodium_SOURCE && ! steps.restore_libsodium.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libsodium_INSTALL }}\n       key: ${{ steps.paths.outputs.libsodium_CACHE_KEY }}-install\n    - name: Restore xxhash from cache\n      id: restore_xxhash\n      if: ${{ steps.paths.outputs.xxhash_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.xxhash_INSTALL }}\n       key: ${{ steps.paths.outputs.xxhash_CACHE_KEY }}-install\n    - name: Build xxhash\n      if: ${{ steps.paths.outputs.xxhash_SOURCE && ! steps.restore_xxhash.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests xxhash\n    - name: Save xxhash to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.xxhash_SOURCE && ! steps.restore_xxhash.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.xxhash_INSTALL }}\n       key: ${{ steps.paths.outputs.xxhash_CACHE_KEY }}-install\n    - name: Restore zstd from cache\n      id: restore_zstd\n      if: ${{ steps.paths.outputs.zstd_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.zstd_INSTALL }}\n       key: ${{ steps.paths.outputs.zstd_CACHE_KEY }}-install\n    - name: Build zstd\n      if: ${{ steps.paths.outputs.zstd_SOURCE && ! steps.restore_zstd.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests zstd\n    - name: Save zstd to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.zstd_SOURCE && ! steps.restore_zstd.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.zstd_INSTALL }}\n       key: ${{ steps.paths.outputs.zstd_CACHE_KEY }}-install\n    - name: Restore double-conversion from cache\n      id: restore_double-conversion\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.double-conversion_INSTALL }}\n       key: ${{ steps.paths.outputs.double-conversion_CACHE_KEY }}-install\n    - name: Build double-conversion\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE && ! steps.restore_double-conversion.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests double-conversion\n    - name: Save double-conversion to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.double-conversion_SOURCE && ! steps.restore_double-conversion.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.double-conversion_INSTALL }}\n       key: ${{ steps.paths.outputs.double-conversion_CACHE_KEY }}-install\n    - name: Restore fast_float from cache\n      id: restore_fast_float\n      if: ${{ steps.paths.outputs.fast_float_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fast_float_INSTALL }}\n       key: ${{ steps.paths.outputs.fast_float_CACHE_KEY }}-install\n    - name: Build fast_float\n      if: ${{ steps.paths.outputs.fast_float_SOURCE && ! steps.restore_fast_float.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests fast_float\n    - name: Save fast_float to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fast_float_SOURCE && ! steps.restore_fast_float.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fast_float_INSTALL }}\n       key: ${{ steps.paths.outputs.fast_float_CACHE_KEY }}-install\n    - name: Restore libdwarf from cache\n      id: restore_libdwarf\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libdwarf_INSTALL }}\n       key: ${{ steps.paths.outputs.libdwarf_CACHE_KEY }}-install\n    - name: Build libdwarf\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE && ! steps.restore_libdwarf.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests libdwarf\n    - name: Save libdwarf to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libdwarf_SOURCE && ! steps.restore_libdwarf.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libdwarf_INSTALL }}\n       key: ${{ steps.paths.outputs.libdwarf_CACHE_KEY }}-install\n    - name: Restore lz4 from cache\n      id: restore_lz4\n      if: ${{ steps.paths.outputs.lz4_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.lz4_INSTALL }}\n       key: ${{ steps.paths.outputs.lz4_CACHE_KEY }}-install\n    - name: Build lz4\n      if: ${{ steps.paths.outputs.lz4_SOURCE && ! steps.restore_lz4.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests lz4\n    - name: Save lz4 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.lz4_SOURCE && ! steps.restore_lz4.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.lz4_INSTALL }}\n       key: ${{ steps.paths.outputs.lz4_CACHE_KEY }}-install\n    - name: Restore snappy from cache\n      id: restore_snappy\n      if: ${{ steps.paths.outputs.snappy_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.snappy_INSTALL }}\n       key: ${{ steps.paths.outputs.snappy_CACHE_KEY }}-install\n    - name: Build snappy\n      if: ${{ steps.paths.outputs.snappy_SOURCE && ! steps.restore_snappy.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests snappy\n    - name: Save snappy to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.snappy_SOURCE && ! steps.restore_snappy.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.snappy_INSTALL }}\n       key: ${{ steps.paths.outputs.snappy_CACHE_KEY }}-install\n    - name: Restore zlib from cache\n      id: restore_zlib\n      if: ${{ steps.paths.outputs.zlib_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.zlib_INSTALL }}\n       key: ${{ steps.paths.outputs.zlib_CACHE_KEY }}-install\n    - name: Build zlib\n      if: ${{ steps.paths.outputs.zlib_SOURCE && ! steps.restore_zlib.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests zlib\n    - name: Save zlib to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.zlib_SOURCE && ! steps.restore_zlib.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.zlib_INSTALL }}\n       key: ${{ steps.paths.outputs.zlib_CACHE_KEY }}-install\n    - name: Restore pcre2 from cache\n      id: restore_pcre2\n      if: ${{ steps.paths.outputs.pcre2_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.pcre2_INSTALL }}\n       key: ${{ steps.paths.outputs.pcre2_CACHE_KEY }}-install\n    - name: Build pcre2\n      if: ${{ steps.paths.outputs.pcre2_SOURCE && ! steps.restore_pcre2.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests pcre2\n    - name: Save pcre2 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.pcre2_SOURCE && ! steps.restore_pcre2.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.pcre2_INSTALL }}\n       key: ${{ steps.paths.outputs.pcre2_CACHE_KEY }}-install\n    - name: Restore python-setuptools-69 from cache\n      id: restore_python-setuptools-69\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.python-setuptools-69_INSTALL }}\n       key: ${{ steps.paths.outputs.python-setuptools-69_CACHE_KEY }}-install\n    - name: Build python-setuptools-69\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE && ! steps.restore_python-setuptools-69.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests python-setuptools-69\n    - name: Save python-setuptools-69 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.python-setuptools-69_SOURCE && ! steps.restore_python-setuptools-69.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.python-setuptools-69_INSTALL }}\n       key: ${{ steps.paths.outputs.python-setuptools-69_CACHE_KEY }}-install\n    - name: Restore jom from cache\n      id: restore_jom\n      if: ${{ steps.paths.outputs.jom_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.jom_INSTALL }}\n       key: ${{ steps.paths.outputs.jom_CACHE_KEY }}-install\n    - name: Build jom\n      if: ${{ steps.paths.outputs.jom_SOURCE && ! steps.restore_jom.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests jom\n    - name: Save jom to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.jom_SOURCE && ! steps.restore_jom.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.jom_INSTALL }}\n       key: ${{ steps.paths.outputs.jom_CACHE_KEY }}-install\n    - name: Restore perl from cache\n      id: restore_perl\n      if: ${{ steps.paths.outputs.perl_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.perl_INSTALL }}\n       key: ${{ steps.paths.outputs.perl_CACHE_KEY }}-install\n    - name: Build perl\n      if: ${{ steps.paths.outputs.perl_SOURCE && ! steps.restore_perl.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests perl\n    - name: Save perl to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.perl_SOURCE && ! steps.restore_perl.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.perl_INSTALL }}\n       key: ${{ steps.paths.outputs.perl_CACHE_KEY }}-install\n    - name: Restore openssl from cache\n      id: restore_openssl\n      if: ${{ steps.paths.outputs.openssl_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.openssl_INSTALL }}\n       key: ${{ steps.paths.outputs.openssl_CACHE_KEY }}-install\n    - name: Build openssl\n      if: ${{ steps.paths.outputs.openssl_SOURCE && ! steps.restore_openssl.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests openssl\n    - name: Save openssl to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.openssl_SOURCE && ! steps.restore_openssl.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.openssl_INSTALL }}\n       key: ${{ steps.paths.outputs.openssl_CACHE_KEY }}-install\n    - name: Restore libevent from cache\n      id: restore_libevent\n      if: ${{ steps.paths.outputs.libevent_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.libevent_INSTALL }}\n       key: ${{ steps.paths.outputs.libevent_CACHE_KEY }}-install\n    - name: Build libevent\n      if: ${{ steps.paths.outputs.libevent_SOURCE && ! steps.restore_libevent.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests libevent\n    - name: Save libevent to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.libevent_SOURCE && ! steps.restore_libevent.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.libevent_INSTALL }}\n       key: ${{ steps.paths.outputs.libevent_CACHE_KEY }}-install\n    - name: Restore folly from cache\n      id: restore_folly\n      if: ${{ steps.paths.outputs.folly_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.folly_INSTALL }}\n       key: ${{ steps.paths.outputs.folly_CACHE_KEY }}-install\n    - name: Build folly\n      if: ${{ steps.paths.outputs.folly_SOURCE && ! steps.restore_folly.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests folly\n    - name: Save folly to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.folly_SOURCE && ! steps.restore_folly.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.folly_INSTALL }}\n       key: ${{ steps.paths.outputs.folly_CACHE_KEY }}-install\n    - name: Restore liboqs from cache\n      id: restore_liboqs\n      if: ${{ steps.paths.outputs.liboqs_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.liboqs_INSTALL }}\n       key: ${{ steps.paths.outputs.liboqs_CACHE_KEY }}-install\n    - name: Build liboqs\n      if: ${{ steps.paths.outputs.liboqs_SOURCE && ! steps.restore_liboqs.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests liboqs\n    - name: Save liboqs to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.liboqs_SOURCE && ! steps.restore_liboqs.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.liboqs_INSTALL }}\n       key: ${{ steps.paths.outputs.liboqs_CACHE_KEY }}-install\n    - name: Restore fizz from cache\n      id: restore_fizz\n      if: ${{ steps.paths.outputs.fizz_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fizz_INSTALL }}\n       key: ${{ steps.paths.outputs.fizz_CACHE_KEY }}-install\n    - name: Build fizz\n      if: ${{ steps.paths.outputs.fizz_SOURCE && ! steps.restore_fizz.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests fizz\n    - name: Save fizz to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fizz_SOURCE && ! steps.restore_fizz.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fizz_INSTALL }}\n       key: ${{ steps.paths.outputs.fizz_CACHE_KEY }}-install\n    - name: Restore mvfst from cache\n      id: restore_mvfst\n      if: ${{ steps.paths.outputs.mvfst_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.mvfst_INSTALL }}\n       key: ${{ steps.paths.outputs.mvfst_CACHE_KEY }}-install\n    - name: Build mvfst\n      if: ${{ steps.paths.outputs.mvfst_SOURCE && ! steps.restore_mvfst.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests mvfst\n    - name: Save mvfst to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.mvfst_SOURCE && ! steps.restore_mvfst.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.mvfst_INSTALL }}\n       key: ${{ steps.paths.outputs.mvfst_CACHE_KEY }}-install\n    - name: Restore wangle from cache\n      id: restore_wangle\n      if: ${{ steps.paths.outputs.wangle_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.wangle_INSTALL }}\n       key: ${{ steps.paths.outputs.wangle_CACHE_KEY }}-install\n    - name: Build wangle\n      if: ${{ steps.paths.outputs.wangle_SOURCE && ! steps.restore_wangle.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests wangle\n    - name: Save wangle to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.wangle_SOURCE && ! steps.restore_wangle.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.wangle_INSTALL }}\n       key: ${{ steps.paths.outputs.wangle_CACHE_KEY }}-install\n    - name: Restore fbthrift from cache\n      id: restore_fbthrift\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fbthrift_INSTALL }}\n       key: ${{ steps.paths.outputs.fbthrift_CACHE_KEY }}-install\n    - name: Build fbthrift\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE && ! steps.restore_fbthrift.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests fbthrift\n    - name: Save fbthrift to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fbthrift_SOURCE && ! steps.restore_fbthrift.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fbthrift_INSTALL }}\n       key: ${{ steps.paths.outputs.fbthrift_CACHE_KEY }}-install\n    - name: Restore fb303 from cache\n      id: restore_fb303\n      if: ${{ steps.paths.outputs.fb303_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.fb303_INSTALL }}\n       key: ${{ steps.paths.outputs.fb303_CACHE_KEY }}-install\n    - name: Build fb303\n      if: ${{ steps.paths.outputs.fb303_SOURCE && ! steps.restore_fb303.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests fb303\n    - name: Save fb303 to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.fb303_SOURCE && ! steps.restore_fb303.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.fb303_INSTALL }}\n       key: ${{ steps.paths.outputs.fb303_CACHE_KEY }}-install\n    - name: Restore edencommon from cache\n      id: restore_edencommon\n      if: ${{ steps.paths.outputs.edencommon_SOURCE }}\n      uses: actions/cache/restore@v4\n      with:\n       path: ${{ steps.paths.outputs.edencommon_INSTALL }}\n       key: ${{ steps.paths.outputs.edencommon_CACHE_KEY }}-install\n    - name: Build edencommon\n      if: ${{ steps.paths.outputs.edencommon_SOURCE && ! steps.restore_edencommon.outputs.cache-hit }}\n      run: python build/fbcode_builder/getdeps.py build --free-up-disk --no-tests edencommon\n    - name: Save edencommon to cache\n      uses: actions/cache/save@v4\n      if: ${{ steps.paths.outputs.edencommon_SOURCE && ! steps.restore_edencommon.outputs.cache-hit }}\n      with:\n       path: ${{ steps.paths.outputs.edencommon_INSTALL }}\n       key: ${{ steps.paths.outputs.edencommon_CACHE_KEY }}-install\n    - name: Build watchman\n      run: python build/fbcode_builder/getdeps.py build --src-dir=. watchman\n    - name: Copy artifacts\n      run: python build/fbcode_builder/getdeps.py fixup-dyn-deps --src-dir=. watchman _artifacts/windows --final-install-prefix /usr/local\n    - uses: actions/upload-artifact@v6\n      with:\n        name: watchman\n        path: _artifacts\n    - name: Test watchman\n      run: python build/fbcode_builder/getdeps.py test --src-dir=. watchman\n"
  },
  {
    "path": ".github/workflows/package.yml",
    "content": "name: package\n\non: push\n\njobs:\n  docker-ubuntu:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ghcr.io\n          username: ${{ github.repository_owner }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v6\n        with:\n          context: .\n          build-args: \"UBUNTU_VERSION=24.04\"\n          file: watchman/build/package/ubuntu-env/Dockerfile\n          push: true\n          tags: ${{ format('ghcr.io/{0}/watchman-build-env:latest', github.repository) }}\n\n  clone-and-build-and-package-ubuntu:\n    needs: docker-ubuntu\n    runs-on: ubuntu-latest\n    container:\n      image: ${{ format('ghcr.io/{0}/watchman-build-env:latest', github.repository) }}\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: rustup default stable\n        run: rustup default stable\n\n      - name: Install system dependencies\n        run: ./install-system-packages.sh\n\n      - name: Test cargo\n        run: cargo --help\n\n      - name: Fix dubious ownership\n        run: git config --global --add safe.directory /__w/watchman/watchman\n\n      - name: Build Watchman binaries\n        run: ./autogen.sh\n\n      - name: Make .deb\n        run: ./watchman/build/package/make-deb.sh\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "# @generated by generate-release-yml.rs\n---\nname: release\n\"on\":\n  push:\n    tags:\n      - v*\npermissions:\n  contents: write\n  packages: write\njobs:\n  prepare:\n    runs-on: ubuntu-latest\n    outputs:\n      release: \"${{ steps.info.outputs.name }}\"\n      upload_url: \"${{ steps.create_release.outputs.upload_url }}\"\n    steps:\n      - name: Prepare release info\n        id: info\n        env:\n          TAG: \"${{ github.ref }}\"\n        run: \"python -c \\\"print('::set-output name=name::' + '$TAG'.lstrip('refs/tags/'))\\\"\"\n      - name: Create release\n        id: create_release\n        uses: actions/create-release@v1\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n        with:\n          tag_name: \"${{ github.ref }}\"\n          release_name: \"${{ github.ref }}\"\n  docker-ubuntu-22:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ghcr.io\n          username: \"${{ github.repository_owner }}\"\n          password: \"${{ secrets.GITHUB_TOKEN }}\"\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v6\n        with:\n          context: \".\"\n          build-args: UBUNTU_VERSION=22.04\n          file: watchman/build/package/ubuntu-env/Dockerfile\n          push: true\n          tags: \"${{ format('ghcr.io/{0}/watchman-build-env:ubuntu-22-latest', github.repository) }}\"\n  docker-ubuntu-24:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ghcr.io\n          username: \"${{ github.repository_owner }}\"\n          password: \"${{ secrets.GITHUB_TOKEN }}\"\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v6\n        with:\n          context: \".\"\n          build-args: UBUNTU_VERSION=24.04\n          file: watchman/build/package/ubuntu-env/Dockerfile\n          push: true\n          tags: \"${{ format('ghcr.io/{0}/watchman-build-env:ubuntu-24-latest', github.repository) }}\"\n  docker-fedora-40:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ghcr.io\n          username: \"${{ github.repository_owner }}\"\n          password: \"${{ secrets.GITHUB_TOKEN }}\"\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v6\n        with:\n          context: \".\"\n          build-args: FEDORA_VERSION=40\n          file: watchman/build/package/fedora-env/Dockerfile\n          push: true\n          tags: \"${{ format('ghcr.io/{0}/watchman-build-env:fedora-40-latest', github.repository) }}\"\n  docker-fedora-41:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ghcr.io\n          username: \"${{ github.repository_owner }}\"\n          password: \"${{ secrets.GITHUB_TOKEN }}\"\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v6\n        with:\n          context: \".\"\n          build-args: FEDORA_VERSION=41\n          file: watchman/build/package/fedora-env/Dockerfile\n          push: true\n          tags: \"${{ format('ghcr.io/{0}/watchman-build-env:fedora-41-latest', github.repository) }}\"\n  docker-fedora-42:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ghcr.io\n          username: \"${{ github.repository_owner }}\"\n          password: \"${{ secrets.GITHUB_TOKEN }}\"\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v6\n        with:\n          context: \".\"\n          build-args: FEDORA_VERSION=42\n          file: watchman/build/package/fedora-env/Dockerfile\n          push: true\n          tags: \"${{ format('ghcr.io/{0}/watchman-build-env:fedora-42-latest', github.repository) }}\"\n  clone-build-package-ubuntu-22:\n    needs:\n      - prepare\n      - docker-ubuntu-22\n    runs-on: ubuntu-latest\n    container:\n      image: \"${{ format('ghcr.io/{0}/watchman-build-env:ubuntu-22-latest', github.repository) }}\"\n    steps:\n      - name: Fix HOME\n        run: echo HOME=/root >> $GITHUB_ENV\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Install system dependencies\n        run: \"./install-system-packages.sh\"\n      - name: Fix dubious ownership\n        run: git config --global --add safe.directory /__w/watchman/watchman\n      - name: Build Watchman binaries\n        run: \"./autogen.sh\"\n      - name: Make .deb\n        env:\n          UBUNTU_VERSION: \"22.04\"\n        run: \"./watchman/build/package/make-deb.sh\"\n      - name: Upload .deb\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: \"${{ needs.prepare.outputs.upload_url }}\"\n          asset_path: /_debs/watchman.deb\n          asset_name: \"watchman_ubuntu22.04_${{ needs.prepare.outputs.release }}.deb\"\n          asset_content_type: application/x-deb\n  clone-build-package-ubuntu-24:\n    needs:\n      - prepare\n      - docker-ubuntu-24\n    runs-on: ubuntu-latest\n    container:\n      image: \"${{ format('ghcr.io/{0}/watchman-build-env:ubuntu-24-latest', github.repository) }}\"\n    steps:\n      - name: Fix HOME\n        run: echo HOME=/root >> $GITHUB_ENV\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Install system dependencies\n        run: \"./install-system-packages.sh\"\n      - name: Fix dubious ownership\n        run: git config --global --add safe.directory /__w/watchman/watchman\n      - name: Build Watchman binaries\n        run: \"./autogen.sh\"\n      - name: Make .deb\n        env:\n          UBUNTU_VERSION: \"24.04\"\n        run: \"./watchman/build/package/make-deb.sh\"\n      - name: Upload .deb\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: \"${{ needs.prepare.outputs.upload_url }}\"\n          asset_path: /_debs/watchman.deb\n          asset_name: \"watchman_ubuntu24.04_${{ needs.prepare.outputs.release }}.deb\"\n          asset_content_type: application/x-deb\n  clone-build-package-fedora-40:\n    needs:\n      - prepare\n      - docker-fedora-40\n    runs-on: ubuntu-latest\n    container:\n      image: \"${{ format('ghcr.io/{0}/watchman-build-env:fedora-40-latest', github.repository) }}\"\n    steps:\n      - name: Fix HOME\n        run: echo HOME=/root >> $GITHUB_ENV\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Install system dependencies\n        run: \"./install-system-packages.sh\"\n      - name: Fix dubious ownership\n        run: git config --global --add safe.directory /__w/watchman/watchman\n      - name: Build Watchman binaries\n        run: \"./autogen.sh\"\n      - name: Make .rpm\n        id: make_rpm\n        env:\n          FEDORA_VERSION: \"40\"\n        run: \"./watchman/build/package/make-rpm.sh\"\n      - name: Upload .rpm\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: \"${{ needs.prepare.outputs.upload_url }}\"\n          asset_path: \"${{ steps.make_rpm.outputs.rpm_path }}\"\n          asset_name: \"${{ steps.make_rpm.outputs.rpm_name }}\"\n          asset_content_type: application/x-rpm\n  clone-build-package-fedora-41:\n    needs:\n      - prepare\n      - docker-fedora-41\n    runs-on: ubuntu-latest\n    container:\n      image: \"${{ format('ghcr.io/{0}/watchman-build-env:fedora-41-latest', github.repository) }}\"\n    steps:\n      - name: Fix HOME\n        run: echo HOME=/root >> $GITHUB_ENV\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Install system dependencies\n        run: \"./install-system-packages.sh\"\n      - name: Fix dubious ownership\n        run: git config --global --add safe.directory /__w/watchman/watchman\n      - name: Build Watchman binaries\n        run: \"./autogen.sh\"\n      - name: Make .rpm\n        id: make_rpm\n        env:\n          FEDORA_VERSION: \"41\"\n        run: \"./watchman/build/package/make-rpm.sh\"\n      - name: Upload .rpm\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: \"${{ needs.prepare.outputs.upload_url }}\"\n          asset_path: \"${{ steps.make_rpm.outputs.rpm_path }}\"\n          asset_name: \"${{ steps.make_rpm.outputs.rpm_name }}\"\n          asset_content_type: application/x-rpm\n  clone-build-package-fedora-42:\n    needs:\n      - prepare\n      - docker-fedora-42\n    runs-on: ubuntu-latest\n    container:\n      image: \"${{ format('ghcr.io/{0}/watchman-build-env:fedora-42-latest', github.repository) }}\"\n    steps:\n      - name: Fix HOME\n        run: echo HOME=/root >> $GITHUB_ENV\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: Install system dependencies\n        run: \"./install-system-packages.sh\"\n      - name: Fix dubious ownership\n        run: git config --global --add safe.directory /__w/watchman/watchman\n      - name: Build Watchman binaries\n        run: \"./autogen.sh\"\n      - name: Make .rpm\n        id: make_rpm\n        env:\n          FEDORA_VERSION: \"42\"\n        run: \"./watchman/build/package/make-rpm.sh\"\n      - name: Upload .rpm\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: \"${{ needs.prepare.outputs.upload_url }}\"\n          asset_path: \"${{ steps.make_rpm.outputs.rpm_path }}\"\n          asset_name: \"${{ steps.make_rpm.outputs.rpm_name }}\"\n          asset_content_type: application/x-rpm\n  linux-build:\n    continue-on-error: true\n    needs: prepare\n    runs-on: ubuntu-24.04\n    steps:\n      - uses: actions/checkout@v4\n      - name: Build watchman\n        run: \"python3 build/fbcode_builder/getdeps.py build --src-dir=. watchman  --project-install-prefix watchman:/usr/local\"\n      - name: Copy artifacts\n        run: \"python3 build/fbcode_builder/getdeps.py fixup-dyn-deps --strip --src-dir=. watchman _artifacts/linux  --project-install-prefix watchman:/usr/local --final-install-prefix /usr/local\"\n      - name: Test watchman\n        run: \"python3 build/fbcode_builder/getdeps.py test --src-dir=. watchman  --project-install-prefix watchman:/usr/local\"\n      - name: Package watchman\n        run: \"mv _artifacts/linux \\\"watchman-${{ needs.prepare.outputs.release }}-linux\\\" && zip -r watchman-${{ needs.prepare.outputs.release }}-linux.zip \\\"watchman-${{ needs.prepare.outputs.release }}-linux/\\\"\"\n      - name: Upload Linux release\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: \"${{ needs.prepare.outputs.upload_url }}\"\n          asset_path: \"./watchman-${{ needs.prepare.outputs.release }}-linux.zip\"\n          asset_name: \"watchman-${{ needs.prepare.outputs.release }}-linux.zip\"\n          asset_content_type: application/zip\n  mac-build:\n    continue-on-error: true\n    needs: prepare\n    runs-on: macOS-10.15\n    steps:\n      - uses: actions/checkout@v4\n      - name: Build watchman\n        run: \"SDKROOT=$(xcrun --show-sdk-path --sdk macosx11.1) python3 build/fbcode_builder/getdeps.py --allow-system-packages build --src-dir=. watchman  --project-install-prefix watchman:/usr/local\"\n      - name: Copy artifacts\n        run: \"python3 build/fbcode_builder/getdeps.py --allow-system-packages fixup-dyn-deps --src-dir=. watchman _artifacts/mac  --project-install-prefix watchman:/usr/local --final-install-prefix /usr/local\"\n      - name: Test watchman\n        run: \"python3 build/fbcode_builder/getdeps.py --allow-system-packages test --src-dir=. watchman  --project-install-prefix watchman:/usr/local\"\n      - name: Package watchman\n        run: \"mv _artifacts/mac \\\"watchman-${{ needs.prepare.outputs.release }}-macos\\\" && zip -r watchman-${{ needs.prepare.outputs.release }}-macos.zip \\\"watchman-${{ needs.prepare.outputs.release }}-macos/\\\"\"\n      - name: Upload macOS release\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: \"${{ needs.prepare.outputs.upload_url }}\"\n          asset_path: \"./watchman-${{ needs.prepare.outputs.release }}-macos.zip\"\n          asset_name: \"watchman-${{ needs.prepare.outputs.release }}-macos.zip\"\n          asset_content_type: application/zip\n  windows-build:\n    continue-on-error: true\n    needs: prepare\n    runs-on: windows-2019\n    steps:\n      - uses: actions/checkout@v4\n      - name: Export boost environment\n        run: echo BOOST_ROOT=%BOOST_ROOT_1_69_0% >> %GITHUB_ENV%\n        shell: cmd\n      - name: Fix Git config\n        run: git config --system core.longpaths true\n      - name: Build watchman\n        run: python build/fbcode_builder/getdeps.py --allow-system-packages build --src-dir=. watchman\n      - name: Copy artifacts\n        run: python build/fbcode_builder/getdeps.py --allow-system-packages fixup-dyn-deps --src-dir=. watchman _artifacts/windows  --final-install-prefix /usr/local\n      - name: Test watchman\n        run: python build/fbcode_builder/getdeps.py --allow-system-packages test --src-dir=. watchman\n      - name: Package watchman\n        run: \"mv _artifacts/windows \\\"watchman-${{ needs.prepare.outputs.release }}-windows\\\" && Compress-Archive -DestinationPath \\\"watchman-${{ needs.prepare.outputs.release }}-windows.zip\\\" -Path \\\"watchman-${{ needs.prepare.outputs.release }}-windows/\\\"\"\n      - name: Upload Windows release\n        env:\n          GITHUB_TOKEN: \"${{ secrets.GITHUB_TOKEN }}\"\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: \"${{ needs.prepare.outputs.upload_url }}\"\n          asset_path: \"./watchman-${{ needs.prepare.outputs.release }}-windows.zip\"\n          asset_name: \"watchman-${{ needs.prepare.outputs.release }}-windows.zip\"\n          asset_content_type: application/zip"
  },
  {
    "path": ".github/workflows/release.yml.in",
    "content": "name: release\n\non:\n  push:\n    tags:\n      - v*\n\npermissions:\n  contents: write  #  to create a release\n  packages: write  #  to upload a package\n\njobs:\n  prepare:\n    runs-on: ubuntu-latest\n    outputs:\n      release: ${{ steps.info.outputs.name }}\n      upload_url: ${{ steps.create_release.outputs.upload_url }}\n    steps:\n      - name: Prepare release info\n        id: info\n        env:\n          TAG: ${{ github.ref }}\n        run: python -c \"print('::set-output name=name::' + '$TAG'.lstrip('refs/tags/'))\"\n      - name: Create release\n        id: create_release\n        uses: actions/create-release@v1\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        with:\n          tag_name: ${{ github.ref }}\n          release_name: ${{ github.ref }}\n\n  docker-ubuntu-%UBUNTU_LTS_VERSION%:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ghcr.io\n          username: ${{ github.repository_owner }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v6\n        with:\n          context: .\n          build-args: \"UBUNTU_VERSION=%UBUNTU_LTS_VERSION%.04\"\n          file: watchman/build/package/ubuntu-env/Dockerfile\n          push: true\n          tags: ${{ format('ghcr.io/{0}/watchman-build-env:ubuntu-%UBUNTU_LTS_VERSION%-latest', github.repository) }}\n\n  docker-fedora-%FEDORA_STABLE_VERSION%:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v3\n\n      - name: Login to GitHub Container Registry\n        uses: docker/login-action@v3\n        with:\n          registry: ghcr.io\n          username: ${{ github.repository_owner }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Build and push Docker image\n        uses: docker/build-push-action@v6\n        with:\n          context: .\n          build-args: \"FEDORA_VERSION=%FEDORA_STABLE_VERSION%\"\n          file: watchman/build/package/fedora-env/Dockerfile\n          push: true\n          tags: ${{ format('ghcr.io/{0}/watchman-build-env:fedora-%FEDORA_STABLE_VERSION%-latest', github.repository) }}\n\n  clone-build-package-ubuntu-%UBUNTU_LTS_VERSION%:\n    needs:\n      - prepare\n      - docker-ubuntu-%UBUNTU_LTS_VERSION%\n    runs-on: ubuntu-latest\n    container:\n      image: ${{ format('ghcr.io/{0}/watchman-build-env:ubuntu-%UBUNTU_LTS_VERSION%-latest', github.repository) }}\n    steps:\n      # This allows rustup toolchains to survive between container construction and use.\n      # https://github.com/actions/runner/issues/863\n      - name: Fix HOME\n        run: echo HOME=/root >> $GITHUB_ENV\n\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Install system dependencies\n        run: ./install-system-packages.sh\n\n      - name: Fix dubious ownership\n        run: git config --global --add safe.directory /__w/watchman/watchman\n\n      - name: Build Watchman binaries\n        run: ./autogen.sh\n\n      - name: Make .deb\n        env:\n          UBUNTU_VERSION: \"%UBUNTU_LTS_VERSION%.04\"\n        run: ./watchman/build/package/make-deb.sh\n\n      - name: Upload .deb\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: ${{ needs.prepare.outputs.upload_url }}\n          asset_path: /_debs/watchman.deb\n          asset_name: watchman_ubuntu%UBUNTU_LTS_VERSION%.04_${{ needs.prepare.outputs.release }}.deb\n          asset_content_type: application/x-deb\n  \n  clone-build-package-fedora-%FEDORA_STABLE_VERSION%:\n    needs:\n      - prepare\n      - docker-fedora-%FEDORA_STABLE_VERSION%\n    runs-on: ubuntu-latest\n    container:\n      image: ${{ format('ghcr.io/{0}/watchman-build-env:fedora-%FEDORA_STABLE_VERSION%-latest', github.repository) }}\n    steps:\n      # This allows rustup toolchains to survive between container construction and use.\n      # https://github.com/actions/runner/issues/863\n      - name: Fix HOME\n        run: echo HOME=/root >> $GITHUB_ENV\n\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Install system dependencies\n        run: ./install-system-packages.sh\n\n      - name: Fix dubious ownership\n        run: git config --global --add safe.directory /__w/watchman/watchman\n\n      - name: Build Watchman binaries\n        run: ./autogen.sh\n\n      - name: Make .rpm\n        id: make_rpm\n        env:\n          FEDORA_VERSION: \"%FEDORA_STABLE_VERSION%\"\n        run: ./watchman/build/package/make-rpm.sh\n\n      - name: Upload .rpm\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        uses: actions/upload-release-asset@v1\n        with:\n          upload_url: ${{ needs.prepare.outputs.upload_url }}\n          asset_path: ${{ steps.make_rpm.outputs.rpm_path }}\n          asset_name: ${{ steps.make_rpm.outputs.rpm_name }}\n          asset_content_type: application/x-rpm\n\n  linux-build:\n    continue-on-error: true\n    needs: prepare\n    runs-on: ubuntu-24.04\n    steps:\n    - uses: actions/checkout@v4\n    - name: Build watchman\n      run: python3 build/fbcode_builder/getdeps.py build --src-dir=. watchman  --project-install-prefix watchman:/usr/local\n    - name: Copy artifacts\n      run: python3 build/fbcode_builder/getdeps.py fixup-dyn-deps --strip --src-dir=. watchman _artifacts/linux  --project-install-prefix watchman:/usr/local --final-install-prefix /usr/local\n    - name: Test watchman\n      run: python3 build/fbcode_builder/getdeps.py test --src-dir=. watchman  --project-install-prefix watchman:/usr/local\n    - name: Package watchman\n      run: mv _artifacts/linux \"watchman-${{ needs.prepare.outputs.release }}-linux\" && zip -r watchman-${{ needs.prepare.outputs.release }}-linux.zip \"watchman-${{ needs.prepare.outputs.release }}-linux/\"\n    - name: Upload Linux release\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      uses: actions/upload-release-asset@v1\n      with:\n        upload_url: ${{ needs.prepare.outputs.upload_url }}\n        asset_path: ./watchman-${{ needs.prepare.outputs.release }}-linux.zip\n        asset_name: watchman-${{ needs.prepare.outputs.release }}-linux.zip\n        asset_content_type: application/zip\n\n  mac-build:\n    continue-on-error: true\n    needs: prepare\n    # This release targets macOS 11.1 (Big Sur), which is available in\n    # Xcode 12.4 on the macOS-10.15 image.\n    runs-on: macOS-10.15\n    steps:\n    - uses: actions/checkout@v4\n    - name: Build watchman\n      run: SDKROOT=$(xcrun --show-sdk-path --sdk macosx11.1) python3 build/fbcode_builder/getdeps.py --allow-system-packages build --src-dir=. watchman  --project-install-prefix watchman:/usr/local\n    - name: Copy artifacts\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages fixup-dyn-deps --src-dir=. watchman _artifacts/mac  --project-install-prefix watchman:/usr/local --final-install-prefix /usr/local\n    - name: Test watchman\n      run: python3 build/fbcode_builder/getdeps.py --allow-system-packages test --src-dir=. watchman  --project-install-prefix watchman:/usr/local\n    - name: Package watchman\n      run: mv _artifacts/mac \"watchman-${{ needs.prepare.outputs.release }}-macos\" && zip -r watchman-${{ needs.prepare.outputs.release }}-macos.zip \"watchman-${{ needs.prepare.outputs.release }}-macos/\"\n    - name: Upload macOS release\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      uses: actions/upload-release-asset@v1\n      with:\n        upload_url: ${{ needs.prepare.outputs.upload_url }}\n        asset_path: ./watchman-${{ needs.prepare.outputs.release }}-macos.zip\n        asset_name: watchman-${{ needs.prepare.outputs.release }}-macos.zip\n        asset_content_type: application/zip\n\n  windows-build:\n    continue-on-error: true\n    needs: prepare\n    runs-on: windows-2019\n    steps:\n    - uses: actions/checkout@v4\n    - name: Export boost environment\n      run: \"echo BOOST_ROOT=%BOOST_ROOT_1_69_0% >> %GITHUB_ENV%\"\n      shell: cmd\n    - name: Fix Git config\n      run: git config --system core.longpaths true\n    - name: Build watchman\n      run: python build/fbcode_builder/getdeps.py --allow-system-packages build --src-dir=. watchman\n    - name: Copy artifacts\n      run: python build/fbcode_builder/getdeps.py --allow-system-packages fixup-dyn-deps --src-dir=. watchman _artifacts/windows  --final-install-prefix /usr/local\n    - name: Test watchman\n      run: python build/fbcode_builder/getdeps.py --allow-system-packages test --src-dir=. watchman\n    - name: Package watchman\n      run: mv _artifacts/windows \"watchman-${{ needs.prepare.outputs.release }}-windows\" && Compress-Archive -DestinationPath \"watchman-${{ needs.prepare.outputs.release }}-windows.zip\" -Path \"watchman-${{ needs.prepare.outputs.release }}-windows/\"\n    - name: Upload Windows release\n      env:\n        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      uses: actions/upload-release-asset@v1\n      with:\n        upload_url: ${{ needs.prepare.outputs.upload_url }}\n        asset_path: ./watchman-${{ needs.prepare.outputs.release }}-windows.zip\n        asset_name: watchman-${{ needs.prepare.outputs.release }}-windows.zip\n        asset_content_type: application/zip\n"
  },
  {
    "path": ".gitignore",
    "content": "/built/\n/external\nbuck-out\nbuck-cache\n.buckd\n.idea\n*.iml\n/Makefile.in\n/test-driver\n/aclocal.m4\n/autom4te.cache/\n/configure\n/depcomp\n/install-sh\n/missing\n/config.log\n.deps/\n.windeps\n/*.in\n/Makefile\n*.o\n/config.status\n*.swp\n/compile\n/stamp-h1\n/config.h*\n/thirdparty/jansson/jansson_config.h\n/compile\n/tests/*.t\n/*.t\n.dirstamp\n*.a\n/tests/integration/.watchman.*\n*.rpm\n/config.sub\n/config.guess\n/configure.lineno\n/python/build\n/python/dist/\n/watchman/python/pywatchman.egg-info/\n*.pyc\n*.pyd\n*.so\n*.obj\n*.exe\n*.dll\n*.pdb\n/test-suite.log\n/tests/*.log\n/tests/*.trs\n/a\n/arc\n/node/package-lock.json\n/node/node_modules\n/node/bser/node_modules\n/website/node_modules\n/website/build\n/website/src/watchman/docs\n/website/src/watchman/*.js\n/website/core/metadata.js\n/website/.sass-cache\n/website/_site\n/npm-debug.log\n/Debug\n.deps\n*.dep\n*.nativecodeanalysis.xml\n/watchman-test.log\nWatchman.vcxproj.*\nWatchman.vcxproj\n*.opensdf\n*.sdf\n*.sln\n*.suo\nm4/\n.libs/\n*.lo\n*.la\n/tests/integration/cppclient.t\nlibtool\nltmain.sh\ncppclient/watchmanclient.pc\n/website/.jekyll-metadata\n/CMakeCache.txt\n/CMakeFiles\n/*.cmake\n/Testing\n/install_manifest.txt\n*.vcxproj\n*.dir\n/x64\n/Release\n/Debug\n*.filters\n/.vs\n/external\n/common\n/eden\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncmake_minimum_required(VERSION 3.8 FATAL_ERROR)\n\nset(CMAKE_MODULE_PATH\n  # For in-fbsource builds on mac\n  \"${CMAKE_CURRENT_SOURCE_DIR}/../opensource/fbcode_builder/CMake\"\n  # For shipit-transformed builds\n  \"${CMAKE_CURRENT_SOURCE_DIR}/build/fbcode_builder/CMake\"\n  ${CMAKE_MODULE_PATH})\n\nif(NOT CMAKE_CXX_STANDARD)\n  set(CMAKE_CXX_STANDARD 20)\n  set(CMAKE_CXX_STANDARD_REQUIRED ON)\n  message(STATUS \"setting C++ standard to C++${CMAKE_CXX_STANDARD}\")\nendif()\n\n# Explicitly enable coroutine support, since GCC does not enable it\n# by default when targeting C++17/20.\nif (CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\")\n  add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fcoroutines>)\nendif()\n\nif (WIN32)\n  set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -DWIN32_LEAN_AND_MEAN -DNOMINMAX -DSTRICT\")\nendif()\n\n# Tell CMake to also look in the directories where getdeps.py installs\n# our third-party dependencies.\nlist(APPEND CMAKE_PREFIX_PATH \"${CMAKE_CURRENT_SOURCE_DIR}/external/install\")\n\noption(BUILD_SHARED_LIBS\n  \"If enabled, build libraries as a shared library.  \\\n  This is generally discouraged, since we do not commit to having \\\n  a stable ABI.\"\n  OFF\n)\n# Mark BUILD_SHARED_LIBS as an \"advanced\" option, since enabling it\n# is generally discouraged.\nmark_as_advanced(BUILD_SHARED_LIBS)\n\noption(USE_SYS_PYTHON\n  \"If enabled, prefers to use the system installed python vs the user \\\n  installed python. Flipping this switch will change which python is used \\\n  during packaging and should be set to maximize portability.\"\n  ON\n)\n\nenable_testing()\ninclude_directories(${CMAKE_CURRENT_SOURCE_DIR})\ninclude_directories(${CMAKE_CURRENT_BINARY_DIR})\ninclude_directories(\"${CMAKE_CURRENT_SOURCE_DIR}/external/install/include\")\n\noption(ENABLE_EDEN_SUPPORT \"If enabled, add support for the Eden \\\n  virtual filesystem.  That requires fbthrift.\"\n  ON)\n\n# Determine whether we are the git repo produced by shipit, a staging\n# area produced by shipit in the FB internal CI, or whether\n# we are building in the source monorepo.\n# For the FB internal CI flavor running shipit, CMAKE_CURRENT_SOURCE_DIR\n# will have a value like \"..../shipit_projects/watchman\".\nif (IS_DIRECTORY \"${CMAKE_CURRENT_SOURCE_DIR}/.git\" OR\n    \"${CMAKE_CURRENT_SOURCE_DIR}\" MATCHES \"shipit_projects\")\n  set(IS_SHIPPED_IT TRUE)\nelse()\n  set(IS_SHIPPED_IT FALSE)\nendif()\n\n# If we're building from inside the monorepo, make the local directory\n# look like the shipit-transformed source in the git repo.\n# On windows we do a dumb recursive copy of the files because we cannot\n# guarantee that we'll be successful in setting up a symlink.\n# On everything else we set up a simple symlink.\n# In theory we can tell cmake to add a non-child subdir and avoid the\n# copy/symlink thing, but we'd need to teach various targets how to resolve\n# the path and that is rather a lot of work (I spent a couple of hours on this\n# before throwing in the towel).\nfunction(maybe_shipit_dir MONOREPO_RELATIVE_PATH)\n  get_filename_component(base \"${MONOREPO_RELATIVE_PATH}\" NAME)\n  if (NOT IS_SHIPPED_IT AND\n      NOT IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${base})\n    if (WIN32)\n      file(COPY\n        \"${CMAKE_CURRENT_SOURCE_DIR}/${MONOREPO_RELATIVE_PATH}\"\n        DESTINATION ${CMAKE_CURRENT_SOURCE_DIR})\n    else()\n      execute_process(COMMAND\n        ln -s ${MONOREPO_RELATIVE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/${base})\n    endif()\n  endif()\nendfunction()\n\nif (ENABLE_EDEN_SUPPORT)\n  # We use shipit to mirror in these locations from the monorepo\n  maybe_shipit_dir(\"../eden\")\nendif()\n\n# A nonsensical version that doesn't correspond to any manually\n# released version.\nset(PACKAGE_VERSION \"0.0.0\")\nset(WATCHMAN_VERSION_OVERRIDE \"\" CACHE STRING \"Use this version code for \\\n    Watchman version instead of the default computed from the repo\")\nset(WATCHMAN_BUILDINFO_OVERRIDE \"\" CACHE STRING \"Use this version code for \\\n    Watchman build info instead of the default (nothing)\")\n\nif (WATCHMAN_VERSION_OVERRIDE)\n  set(PACKAGE_VERSION \"${WATCHMAN_VERSION_OVERRIDE}\")\nelseif(DEFINED ENV{WATCHMAN_VERSION_OVERRIDE})\n  set(PACKAGE_VERSION \"$ENV{WATCHMAN_VERSION_OVERRIDE}\")\nelseif(DEFINED ENV{FBSOURCE_DATE})\n  # If set, we expect FBSOURCE_DATE to have the form \"20200324.113140\"\n  set(PACKAGE_VERSION \"$ENV{FBSOURCE_DATE}.0\")\n  set(BUILD_INFO \"$ENV{FBSOURCE_HASH}\")\nelse()\n  find_program(GIT git)\n  if(GIT)\n    execute_process(\n      COMMAND \"${GIT}\" \"show\" \"-s\" \"--format=%H;%cd\" \"--date=format:%Y%m%d.%H%M%S.0\"\n      WORKING_DIRECTORY \"${CMAKE_CURRENT_SOURCE_DIR}\"\n      RESULT_VARIABLE git_result\n      OUTPUT_VARIABLE git_data\n      ERROR_VARIABLE git_err\n      OUTPUT_STRIP_TRAILING_WHITESPACE\n    )\n    if(git_result EQUAL 0)\n      list(GET git_data 0 BUILD_INFO)\n      list(GET git_data 1 PACKAGE_VERSION)\n    endif()\n  endif()\nendif()\nmessage(STATUS \"PACKAGE_VERSION=${PACKAGE_VERSION}, BUILD_INFO=${BUILD_INFO}\")\n\nset(PACKAGE_NAME      \"watchman\")\nset(PACKAGE_STRING    \"${PACKAGE_NAME} ${PACKAGE_VERSION}\")\nset(PACKAGE_TARNAME   \"${PACKAGE_NAME}-${PACKAGE_VERSION}\")\nset(PACKAGE_BUGREPORT \"https://github.com/facebook/watchman/issues\")\nproject(${PACKAGE_NAME} CXX C)\n\nfind_package(GMock MODULE REQUIRED)\ninclude_directories(${GMOCK_INCLUDEDIR} ${LIBGMOCK_INCLUDE_DIR})\ninclude(GoogleTest)\nenable_testing()\n\ninclude(FBThriftCppLibrary)\ninclude(CheckFunctionExists)\ninclude(CheckIncludeFiles)\ninclude(CheckStructHasMember)\ninclude(CheckSymbolExists)\ninclude(RustStaticLibrary)\n\n# configure_file wants us to define a separate file.  I'd rather not\n# have boilerplate for the same thing in two difference files, so we\n# roll the checks in together with writing out the features to config.h\n# ourselves here.\nfunction(config_h LINE)\n  file(APPEND \"${CMAKE_CURRENT_BINARY_DIR}/watchman/config.h.new\" \"${LINE}\\n\")\nendfunction()\n\nfile(WRITE \"${CMAKE_CURRENT_BINARY_DIR}/watchman/config.h.new\" \"#pragma once\\n\")\n\nif(NOT WIN32)\n  set(WATCHMAN_STATE_DIR \"${CMAKE_INSTALL_PREFIX}/var/run/watchman\" CACHE STRING\n    \"Run-time path of the persistent state directory\")\n  set(INSTALL_WATCHMAN_STATE_DIR OFF CACHE BOOL\n    \"Whether WATCHMAN_STATE_DIR should be created by the cmake install\n    target.  Disabling this is useful in the case where the CMAKE_INSTALL_PREFIX\n    is owned by a non-privileged user but where the WATCHMAN_STATE_DIR requires\n    administrative rights to create and set its permissions.\")\n  option(WATCHMAN_USE_XDG_STATE_HOME\n    \"If enabled, use $XDG_STATE_HOME/watchman as the Watchman state directory. \\\n    XDG_STATE_HOME defaults to $HOME/.local/state.\"\n    OFF\n  )\nelse()\n  set(WATCHMAN_STATE_DIR)\n  set(INSTALL_WATCHMAN_STATE_DIR)\nendif()\n\nif(WATCHMAN_STATE_DIR AND INSTALL_WATCHMAN_STATE_DIR)\n  install(DIRECTORY DESTINATION ${WATCHMAN_STATE_DIR}\n    DIRECTORY_PERMISSIONS\n    OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE\n    GROUP_EXECUTE WORLD_READ WORLD_WRITE WORLD_EXECUTE SETGID)\nendif()\n\nconfig_h(\"// Generated by cmake\")\nif(WIN32)\n  config_h(\"#define WATCHMAN_CONFIG_FILE \\\n\\\"C:/ProgramData/facebook/watchman.json\\\"\")\nelse()\n  config_h(\"#define WATCHMAN_CONFIG_FILE \\\"/etc/watchman.json\\\"\")\nendif()\n\nif(WATCHMAN_STATE_DIR)\n  config_h(\"#define WATCHMAN_STATE_DIR \\\"${WATCHMAN_STATE_DIR}\\\"\")\nendif()\nconfig_h(\"#define PACKAGE_VERSION \\\"${PACKAGE_VERSION}\\\"\")\n\nif(BUILD_INFO)\n  config_h(\"#define WATCHMAN_BUILD_INFO \\\"${BUILD_INFO}\\\"\")\nendif ()\n\nif(WATCHMAN_USE_XDG_STATE_HOME)\n  config_h(\"#define WATCHMAN_USE_XDG_STATE_HOME 1\")\nendif()\n\n# While most of these tests are not strictly needed on windows, it is vital\n# that we probe for and find strtoll in order for the jansson build to use\n# a 64-bit integer type, otherwise the mtime_us field renders as garbage\n# in the integration tests.\nforeach(wat_func\n    accept4\n    backtrace\n    backtrace_symbols\n    backtrace_symbols_fd\n    close_range\n    fdopendir\n    getattrlistbulk\n    inotify_init\n    inotify_init1\n    kqueue\n    localeconv\n    memmem\n    mkostemp\n    openat\n    pipe2\n    port_create\n    statfs\n    strtoll\n    sys_siglist\n)\n  CHECK_FUNCTION_EXISTS(${wat_func} have_${wat_func})\n  if (have_${wat_func})\n    string(TOUPPER have_${wat_func} sym)\n    config_h(\"#define ${sym} 1\")\n  endif()\nendforeach(wat_func)\n\nforeach(wat_header\n    CoreServices/CoreServices.h\n    execinfo.h\n    fcntl.h\n    inttypes.h\n    locale.h\n    port.h\n    sys/event.h\n    sys/inotify.h\n    sys/mount.h\n    sys/param.h\n    sys/resource.h\n    sys/socket.h\n    sys/statfs.h\n    sys/statvfs.h\n    sys/types.h\n    sys/ucred.h\n    sys/vfs.h\n    valgrind/valgrind.h\n)\n  string(TOUPPER have_${wat_header} sym)\n  string(REGEX REPLACE [./] _ sym ${sym})\n  CHECK_INCLUDE_FILES(${wat_header} ${sym})\n  if (${sym})\n    config_h(\"#define ${sym} 1\")\n  endif()\nendforeach(wat_header)\n\nCHECK_STRUCT_HAS_MEMBER(statvfs f_fstypename sys/statvfs.h\n  HAVE_STRUCT_STATVFS_F_FSTYPENAME)\nif (HAVE_STRUCT_STATVFS_F_BASETYPE)\n  config_h(\"define HAVE_STRUCT_STATVFS_F_FSTYPENAME 1\")\nendif()\n\nCHECK_STRUCT_HAS_MEMBER(statvfs f_basetype sys/statvfs.h\n  HAVE_STRUCT_STATVFS_F_BASETYPE)\nif (HAVE_STRUCT_STATVFS_F_BASETYPE)\n  config_h(\"define HAVE_STRUCT_STATVFS_F_BASETYPE 1\")\nendif()\n\nif(have_fcntl.h)\n  CHECK_SYMBOL_EXISTS(O_SYMLINK fcntl.h HAVE_DECL_O_SYMLINK)\n  if(HAVE_DECL_O_SYMLINK)\n    config_h(\"#define HAVE_DECL_O_SYMLINK 1\")\n  endif()\nendif()\nfind_package(PCRE2)\nif(PCRE2_FOUND)\n  config_h(\"#define HAVE_PCRE_H 1\")\nendif()\n\n# Now close out config.h.  We only want to touch the file if the contents are\n# different, so do a little dance to figure that out.\nif(EXISTS \"${CMAKE_CURRENT_BINARY_DIR}/watchman/config.h\")\n  file(MD5 \"${CMAKE_CURRENT_BINARY_DIR}/watchman/config.h\" orig_hash)\n  file(MD5 \"${CMAKE_CURRENT_BINARY_DIR}/watchman/config.h.new\" this_hash)\n  if(NOT orig_hash STREQUAL this_hash)\n    file(RENAME \"${CMAKE_CURRENT_BINARY_DIR}/watchman/config.h.new\"\n      \"${CMAKE_CURRENT_BINARY_DIR}/watchman/config.h\")\n  endif()\nelse()\n  file(RENAME \"${CMAKE_CURRENT_BINARY_DIR}/watchman/config.h.new\"\n    \"${CMAKE_CURRENT_BINARY_DIR}/watchman/config.h\")\nendif()\n\nset(THREADS_PREFER_PTHREAD_FLAG ON)\nfind_package(Threads REQUIRED)\n\n# This block is for cmake 3.0 which doesn't define the Threads::Threads\n# interface section.  Test for that and define it for ourselves.\nif(THREADS_FOUND AND NOT TARGET Threads::Threads)\n  add_library(Threads::Threads INTERFACE IMPORTED)\n\n  if(THREADS_HAVE_PTHREAD_ARG)\n    set_property(TARGET Threads::Threads PROPERTY\n      INTERFACE_COMPILE_OPTIONS \"-pthread\")\n  endif()\n\n  if(CMAKE_THREAD_LIBS_INIT)\n    set_property(TARGET Threads::Threads PROPERTY\n      INTERFACE_LINK_LIBRARIES \"${CMAKE_THREAD_LIBS_INIT}\")\n  endif()\nendif()\n\nfind_package(OpenSSL)\n\n# This block is for cmake 3.0 which doesn't define the OpenSSL::Crypto\n# interface section.  Test for that and define it for ourselves.\nif(OPENSSL_FOUND AND NOT TARGET OpenSSL::Crypto)\n  add_library(OpenSSL::Crypto UNKNOWN IMPORTED)\n    set_target_properties(OpenSSL::Crypto PROPERTIES\n      INTERFACE_INCLUDE_DIRECTORIES \"${OPENSSL_INCLUDE_DIR}\")\n    if(EXISTS \"${OPENSSL_CRYPTO_LIBRARY}\")\n      set_target_properties(OpenSSL::Crypto PROPERTIES\n        IMPORTED_LINK_INTERFACE_LANGUAGES \"C\"\n        IMPORTED_LOCATION \"${OPENSSL_CRYPTO_LIBRARY}\")\n    endif()\nendif()\n\nfind_package(Gflags REQUIRED)\ninclude_directories(SYSTEM ${GFLAGS_INCLUDE_DIR})\n\nfind_package(Glog REQUIRED)\nadd_compile_definitions(GLOG_NO_ABBREVIATED_SEVERITIES)\n\n# We indirectly depend on boost.  This logic needs to match\n# the same criteria used in thrift, which wants static libs\n# on windows.\nif(MSVC)\n  set(Boost_USE_STATIC_LIBS ON) #Force static lib in msvc\nendif(MSVC)\nfind_package(\n  Boost 1.54.0 REQUIRED #1.54.0 or greater\n  COMPONENTS\n    context\n    thread\n)\n\n# We indirectly depend on libevent.  Folly pulls in linkage to\n# event.lib, but on my system it does so as simply \"event.lib\"\n# and that fails linking.  Let's probe for the library and force\n# in the library directory for the linker. :-/\nfind_package(LibEvent REQUIRED)\nget_filename_component(LIBEVENT_LIBDIR \"${LIBEVENT_LIB}\" DIRECTORY)\nlink_directories(${LIBEVENT_LIBDIR})\nfind_package(edencommon CONFIG REQUIRED)\nfind_package(fmt CONFIG REQUIRED)\nfind_package(folly CONFIG REQUIRED)\n\nif (ENABLE_EDEN_SUPPORT)\n  find_package(fizz CONFIG REQUIRED)\n  find_package(wangle CONFIG REQUIRED)\n  find_package(FBThrift CONFIG REQUIRED)\n  find_package(fb303 CONFIG REQUIRED)\n  find_package(cpptoml CONFIG REQUIRED)\n  include_directories(${FB303_INCLUDE_DIR})\nendif()\nif(DEFINED ENV{NODE_BIN})\n  set(NODE $ENV{NODE_BIN})\nelse()\n  find_program(NODE node)\nendif()\nif(DEFINED ENV{YARN_PATH})\n  set(YARN $ENV{YARN_PATH})\nelse()\n  find_program(YARN yarn)\nendif()\n\n\nif(NOT WIN32)\n  # Sometimes the environment has a Python installation earlier in the\n  # PATH that is not suitable for building extensions. Prefer the\n  # primary system installation.\n  set(Python3_FIND_STRATEGY LOCATION)\n  if(USE_SYS_PYTHON)\n    message(STATUS \"Using sys python\")\n    set(Python3_ROOT_DIR /usr/bin)\n  else()\n    message(STATUS \"Using local python\")\n    set(Python3_ROOT_DIR /usr/local/bin)\n  endif()\nendif()\n\nfind_package(Python3 COMPONENTS Interpreter Development)\n\nif(NOT Python3_Interpreter_FOUND)\n  message(STATUS \"python not found, using default python\")\n  unset(Python3_ROOT_DIR)\n  unset(Python3_FIND_STRATEGY)\n  find_package(Python3 COMPONENTS Interpreter Development)\nendif()\n\n\nif(Python3_Development_FOUND)\n  set(PYOUT \"${CMAKE_CURRENT_BINARY_DIR}/pywatchman\")\n  set(SETUP_PY \"${CMAKE_CURRENT_SOURCE_DIR}/watchman/python/setup.py\")\n  set(PYWATCHMAN_BASE ${CMAKE_CURRENT_SOURCE_DIR}/watchman/python)\n  file(GLOB PYWATCHMAN_PY_SRCS \"watchman/python/pywatchman/*.py\")\n  file(MAKE_DIRECTORY ${PYOUT})\n  add_custom_command(\n    COMMENT \"Building pywatchman\"\n    OUTPUT ${PYOUT}\n    DEPENDS ${PYWATCHMAN_PY_SRCS} \"watchman/python/pywatchman/bser.c\"\n    WORKING_DIRECTORY ${PYWATCHMAN_BASE}\n    COMMAND ${CMAKE_COMMAND} -E env\n      CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}\n      CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}\n      ${Python3_EXECUTABLE} ${SETUP_PY} build --build-base ${PYOUT}\n    COMMAND ${CMAKE_COMMAND} -E touch ${PYOUT}\n  )\n  add_custom_target(pybuild ALL DEPENDS ${PYOUT})\n  install(CODE \"\n    execute_process(COMMAND\n      ${CMAKE_COMMAND} -E env\n        CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}\n        ${Python3_EXECUTABLE} ${SETUP_PY} install\n        --root $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}\n      WORKING_DIRECTORY ${PYWATCHMAN_BASE}\n      RESULT_VARIABLE STATUS)\n    if (NOT STATUS STREQUAL 0)\n      message(FATAL_ERROR \\\"pywatchman install failed\\\")\n    endif()\n  \")\n  include(FBPythonBinary)\n  add_subdirectory(watchman/python)\n  add_subdirectory(watchman/integration)\nendif()\n\nif(Python3_Interpreter_FOUND AND NODE AND YARN)\n  add_subdirectory(watchman/node/bser)\nendif()\n\nif(CMAKE_SYSTEM_NAME STREQUAL \"Windows\")\n  # Check target architecture\n  if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8)\n    message(FATAL_ERROR \"watchman requires a 64bit target architecture.\")\n  endif()\n  add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)\n  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/watchman/winbuild)\n  set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} /Zi /Zo /MP /Oi /EHsc /GL- /wd4250\")\n  set(CMAKE_SHARED_LINKER_FLAGS\n    \"${CMAKE_SHARED_LINKER_FLAGS} /DEBUG /OPT:NOREF\")\n  set(CMAKE_EXE_LINKER_FLAGS\n    \"${CMAKE_EXE_LINKER_FLAGS} /DEBUG /OPT:NOREF\")\n  set(CMAKE_MODULE_LINKER_FLAGS\n    \"${CMAKE_MODULE_LINKER_FLAGS} /DEBUG /OPT:NOREF\")\n  set(CMAKE_STATIC_LIBRARY_FLAGS\n    \"${CMAKE_STATIC_LIBRARY_FLAGS} /DEBUG /OPT:NOREF\")\nelse()\n  set(CMAKE_CXX_FLAGS_COMMON \"-g -Wall -Wextra -std=gnu++17\")\n  set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_COMMON}\")  # for cmake 3.0\n  set(CMAKE_CXX_FLAGS_DEBUG \"${CMAKE_CXX_FLAGS_COMMON}\")\n  set(CMAKE_CXX_FLAGS_RELEASE \"${CMAKE_CXX_FLAGS_COMMON} -O3\")\nendif()\n\nadd_library(third_party_deps INTERFACE)\ntarget_link_libraries(third_party_deps INTERFACE\n  Folly::folly\n  glog::glog\n  gflags\n  ${Boost_LIBRARIES}\n  fb303::fb303\n  fmt::fmt\n  edencommon::edencommon_utils\n  edencommon::edencommon_telemetry\n)\ntarget_include_directories(third_party_deps INTERFACE\n  ${FOLLY_INCLUDE_DIR}\n  ${GLOG_INCLUDE_DIR}\n  ${GFLAGS_INCLUDE_DIR}\n  ${Boost_INCLUDE_DIRS}\n)\nif (ENABLE_EDEN_SUPPORT)\n  target_link_libraries(\n    third_party_deps\n    INTERFACE\n    ${YARPL_LIBRARIES}\n    FBThrift::thriftcpp2\n    cpptoml\n  )\nendif()\nif(PCRE2_FOUND)\n  target_link_libraries(third_party_deps INTERFACE ${PCRE2_LIBRARY})\n  target_include_directories(third_party_deps INTERFACE ${PCRE2_INCLUDE_DIR})\n  target_compile_definitions(third_party_deps INTERFACE ${PCRE2_DEFINES})\n  if (WIN32)\n    # The pcre headers assume that the library is a dll by default\n    # but our preferred build environment only builds them as\n    # static, so be sure to ask for static pcre linkage\n    target_compile_definitions(third_party_deps INTERFACE PCRE2_STATIC)\n  endif()\nendif()\ntarget_link_libraries(third_party_deps INTERFACE Threads::Threads)\nif(TARGET OpenSSL::Crypto)\n  target_link_libraries(third_party_deps INTERFACE OpenSSL::Crypto)\nendif()\nif(CMAKE_SYSTEM_NAME STREQUAL \"Darwin\")\n  target_link_libraries(third_party_deps INTERFACE \"-framework CoreServices\")\nelseif(CMAKE_SYSTEM_NAME STREQUAL \"Windows\")\n  target_link_libraries(third_party_deps INTERFACE\n    advapi32.lib\n    dbghelp.lib\n    shlwapi.lib\n  )\nendif()\n\nadd_library(wildmatch STATIC\n  watchman/thirdparty/wildmatch/wildmatch.c\n  watchman/thirdparty/wildmatch/wildmatch.h\n)\nadd_library(log STATIC\n  watchman/PubSub.cpp\n  watchman/LogConfig.cpp\n  watchman/Logging.cpp\n  watchman/portability/Backtrace.cpp\n)\ntarget_link_libraries(log third_party_deps)\nadd_library(err STATIC watchman/Poison.cpp watchman/root/warnerr.cpp)\ntarget_link_libraries(err third_party_deps)\nadd_library(jansson_utf STATIC watchman/thirdparty/jansson/utf.cpp)\n\nadd_library(string STATIC watchman/string.cpp)\ntarget_link_libraries(string jansson_utf third_party_deps)\n\nadd_library(jansson STATIC\nwatchman/thirdparty/jansson/dump.cpp\nwatchman/thirdparty/jansson/error.cpp\nwatchman/thirdparty/jansson/load.cpp\nwatchman/thirdparty/jansson/strconv.cpp\nwatchman/thirdparty/jansson/value.cpp\n)\ntarget_link_libraries(jansson string third_party_deps)\n\nlist(APPEND testsupport_sources\nwatchman/ChildProcess.cpp\nwatchman/fs/FileDescriptor.cpp\nwatchman/fs/FileInformation.cpp\nwatchman/fs/FSDetect.cpp\nwatchman/FlagMap.cpp\nwatchman/IgnoreSet.cpp\nwatchman/PendingCollection.cpp\nwatchman/fs/Pipe.cpp\nwatchman/fs/WindowsTime.cpp\nwatchman/ThreadPool.cpp\nwatchman/WatchmanConfig.cpp\nwatchman/bser.cpp\nwatchman/fs/UnixDirHandle.cpp\nwatchman/fs/WinDirHandle.cpp\nwatchman/stream.cpp\nwatchman/stream_unix.cpp\nwatchman/stream_win.cpp\nwatchman/portability/PosixSpawn.cpp\nwatchman/portability/WinError.cpp\nwatchman/root/dir.cpp\nwatchman/root/file.cpp\n)\n\nadd_library(testsupport STATIC ${testsupport_sources})\ntarget_link_libraries(testsupport log string jansson third_party_deps)\n\nif (ENABLE_EDEN_SUPPORT)\n  add_fbthrift_cpp_library(\n    eden_config_thrift\n    eden/fs/config/eden_config.thrift\n  )\n  add_fbthrift_cpp_library(\n    eden_service_thrift\n    eden/fs/service/eden.thrift\n    SERVICES\n      EdenService\n    DEPENDS\n      eden_config_thrift\n      fb303::fb303_thrift_cpp\n  )\n  add_fbthrift_cpp_library(\n    streamingeden_thrift\n    eden/fs/service/streamingeden.thrift\n    SERVICES\n      StreamingEdenService\n    DEPENDS\n      eden_service_thrift\n      fb303::fb303_thrift_cpp\n  )\nendif()\n\nlist(APPEND watchman_sources\nwatchman/ChildProcess.cpp\nwatchman/Client.cpp\nwatchman/Clock.cpp\nwatchman/Command.cpp\nwatchman/CommandRegistry.cpp\nwatchman/Connect.cpp\nwatchman/ContentHash.cpp\nwatchman/CookieSync.cpp\nwatchman/Errors.cpp\nwatchman/fs/FileDescriptor.cpp\nwatchman/fs/FileInformation.cpp\nwatchman/fs/FileSystem.cpp\nwatchman/FlagMap.cpp\nwatchman/fs/FSDetect.cpp\nwatchman/GroupLookup.cpp\nwatchman/IgnoreSet.cpp\nwatchman/InMemoryView.cpp\nwatchman/Options.cpp\nwatchman/PathUtils.cpp\nwatchman/PDU.cpp\nwatchman/PendingCollection.cpp\nwatchman/PerfSample.cpp\nwatchman/fs/ParallelWalk.cpp\nwatchman/fs/Pipe.cpp\nwatchman/ProcessLock.cpp\nwatchman/ProcessUtil.cpp\n# PubSub.cpp  (in liblog)\nwatchman/QueryableView.cpp\nwatchman/SanityCheck.cpp\nwatchman/Shutdown.cpp\nwatchman/SignalHandler.cpp\nwatchman/SymlinkTargets.cpp\nwatchman/ThreadPool.cpp\nwatchman/TriggerCommand.cpp\nwatchman/fs/UnixDirHandle.cpp\nwatchman/fs/WindowsTime.cpp\nwatchman/UserDir.cpp\nwatchman/WatchmanConfig.cpp\nwatchman/XattrUtils.cpp\nwatchman/fs/WinDirHandle.cpp\nwatchman/bser.cpp\nwatchman/listener-user.cpp\nwatchman/listener.cpp\nwatchman/main.cpp\nwatchman/sockname.cpp\nwatchman/state.cpp\nwatchman/stream.cpp\nwatchman/stream_unix.cpp\nwatchman/stream_stdout.cpp\nwatchman/stream_win.cpp\n# string.cpp (in libstring)\nwatchman/portability/PosixSpawn.cpp\nwatchman/portability/WinError.cpp\nwatchman/query/FileResult.cpp\nwatchman/query/LocalFileResult.cpp\nwatchman/query/GlobEscaping.cpp\nwatchman/query/GlobTree.cpp\nwatchman/query/QueryContext.cpp\nwatchman/query/Query.cpp\nwatchman/query/QueryResult.cpp\nwatchman/query/TermRegistry.cpp\nwatchman/query/base.cpp\nwatchman/query/dirname.cpp\nwatchman/query/empty.cpp\nwatchman/query/eval.cpp\nwatchman/query/fieldlist.cpp\nwatchman/query/glob.cpp\nwatchman/query/intcompare.cpp\nwatchman/query/match.cpp\nwatchman/query/name.cpp\nwatchman/query/parse.cpp\nwatchman/query/pcre.cpp\nwatchman/query/since.cpp\nwatchman/query/suffix.cpp\nwatchman/query/type.cpp\nwatchman/cmds/debug.cpp\nwatchman/cmds/find.cpp\n# cmds/heapprof.cpp\nwatchman/cmds/info.cpp\nwatchman/cmds/log.cpp\nwatchman/cmds/query.cpp\nwatchman/cmds/since.cpp\nwatchman/cmds/state.cpp\nwatchman/cmds/subscribe.cpp\nwatchman/cmds/trigger.cpp\nwatchman/cmds/watch.cpp\nwatchman/root/ageout.cpp\nwatchman/root/dir.cpp\nwatchman/root/file.cpp\nwatchman/root/init.cpp\nwatchman/root/iothread.cpp\nwatchman/root/notifythread.cpp\nwatchman/# root/poison.cpp (in liberr)\nwatchman/root/reap.cpp\nwatchman/root/resolve.cpp\nwatchman/root/sync.cpp\nwatchman/root/threading.cpp\n# root/warnerr.cpp (in liberr)\nwatchman/root/watchlist.cpp\nwatchman/saved_state/LocalSavedStateInterface.cpp\nwatchman/saved_state/SavedStateFactory.cpp\nwatchman/saved_state/SavedStateInterface.cpp\nwatchman/scm/Git.cpp\nwatchman/scm/Mercurial.cpp\nwatchman/scm/SCM.cpp\nwatchman/telemetry/LogEvent.cpp\nwatchman/telemetry/WatchmanStats.cpp\nwatchman/telemetry/WatchmanStructuredLogger.cpp\nwatchman/thirdparty/getopt/GetOpt.cpp\nwatchman/watcher/Watcher.cpp\nwatchman/watcher/WatcherRegistry.cpp\nwatchman/watcher/fsevents.cpp\nwatchman/watcher/inotify.cpp\nwatchman/watcher/kqueue.cpp\nwatchman/watcher/portfs.cpp\nwatchman/watcher/kqueue_and_fsevents.cpp\nwatchman/watcher/win32.cpp\n)\n\nif (ENABLE_EDEN_SUPPORT)\n  # We currently only support talking to eden on posix systems\n  list(APPEND watchman_sources watchman/watcher/eden.cpp)\nendif()\n\nadd_executable(watchman ${watchman_sources})\nset_target_properties(watchman PROPERTIES\n  RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin\n)\ntarget_link_libraries(\n  watchman\n  log\n  string\n  err\n  jansson\n  wildmatch\n  third_party_deps\n)\n\nif (WIN32)\n  add_subdirectory(watchman/thirdparty/deelevate_binding)\n  target_link_libraries(\n    watchman\n    libdeelevate\n  )\n  install_rust_executable(deelevate)\nendif()\n\nif (ENABLE_EDEN_SUPPORT)\n  target_link_libraries(\n    watchman\n    streamingeden_thrift\n  )\nendif()\n\ninstall(TARGETS watchman RUNTIME DESTINATION bin)\n\nadd_subdirectory(watchman/cli)\n\nset(tests)\n# Helper function to define a unit test executable\nfunction(t_test NAME)\n  add_executable(${NAME}.t ${ARGN})\n  target_link_libraries(\n    ${NAME}.t\n    testsupport wildmatch third_party_deps\n    ${LIBGMOCK_LIBRARIES}\n  )\n  target_compile_definitions(${NAME}.t\n    PUBLIC WATCHMAN_TEST_SRC_DIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}\\\")\n  gtest_discover_tests(${NAME}.t DISCOVERY_TIMEOUT 60)\n  list(APPEND tests ${NAME}.t)\nendfunction()\n\n# The `check` target runs the unit tests\nadd_custom_target(check\n  DEPENDS ${tests}\n  COMMAND ${CMAKE_CTEST_COMMAND})\n\nif(Python3_Interpreter_FOUND)\n  if (WIN32)\n    add_executable(susres watchman/winbuild/susres.cpp)\n    target_link_libraries(susres third_party_deps)\n    add_custom_target(make_susres ALL DEPENDS susres)\n  endif()\n\n  # The `integration` target runs the unit tests and integration tests\n  add_custom_target(integration\n    DEPENDS pybuild check\n    COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/runtests.py\n      --watchman-path ${CMAKE_CURRENT_BINARY_DIR}/watchman\n      --pybuild-dir ${CMAKE_CURRENT_BINARY_DIR}/watchman/python\n      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})\nendif()\n\nt_test(art watchman/test/ArtTest.cpp)\nt_test(bser watchman/test/BserTest.cpp)\nt_test(cache watchman/test/CacheTest.cpp)\nt_test(childproc watchman/test/ChildProcTest.cpp)\nt_test(fsdetect watchman/test/FSDetectTest.cpp)\nt_test(ignore watchman/test/BserTest.cpp)\n# Linking this test needs the targets graph to be cleaned up.\n#t_test(inmemoryview watchman/test/InMemoryViewTest.cpp)\nt_test(log watchman/test/LogTest.cpp)\nt_test(maputil watchman/test/MapUtilTest.cpp)\nt_test(pendingcollection watchman/test/PendingCollectionTest.cpp)\n# Linking this test needs the targets graph to be cleaned up.\n#t_test(perfsample watchman/test/PerfSampleTest.cpp)\nt_test(result watchman/test/ResultTest.cpp)\nt_test(ringbuffer watchman/test/RingBufferTest.cpp)\nt_test(string watchman/test/StringTest.cpp)\nt_test(wildmatch watchman/test/WildmatchTest.cpp)\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to make participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n  advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n  address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies within all project spaces, and it also applies when\nan individual is representing the project or its community in public spaces.\nExamples of representing a project or community include using an official\nproject e-mail address, posting via an official social media account, or acting\nas an appointed representative at an online or offline event. Representation of\na project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at <opensource-conduct@fb.com>. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to watchman\nWe want to make contributing to this project as easy and transparent as\npossible.\n\n## Our Development Process\nWatchman is currently developed in Meta's internal repositories and then exported out to GitHub by a Meta team member; however, we invite you to submit pull requests as described below.\n\n## Pull Requests\nWe actively welcome your pull requests.\n\n1. Fork the repo and create your branch from `main`.\n2. If you've added code that should be tested, add tests.\n3. If you've changed APIs, update the documentation.\n4. Ensure the test suite passes.\n5. Make sure your code lints.\n6. If you haven't already, complete the Contributor License Agreement (\"CLA\").\n\n## Getting Started\nFor more information on how to get started please see [contributing guide](https://facebook.github.io/watchman/docs/contributing).\n\n## Contributor License Agreement (\"CLA\")\nIn order to accept your pull request, we need you to submit a CLA. You only need\nto do this once to work on any of Meta's open source projects.\n\nComplete your CLA here: <https://code.facebook.com/cla>\n\n## Issues\nWe use GitHub issues to track public bugs. Please ensure your description is\nclear and has sufficient instructions to be able to reproduce the issue.\n\nMeta has a [bounty program](https://www.facebook.com/whitehat/) for the safe\ndisclosure of security bugs. In those cases, please go through the process\noutlined on that page and do not file a public issue.\n\n## Coding Style\n* 2 spaces for indentation rather than tabs\n* 80 character line length\n\n## License\nBy contributing to watchman, you agree that your contributions will be licensed\nunder the LICENSE file in the root directory of this source tree (MIT License).\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) Meta Platforms, Inc. and its affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.markdown",
    "content": "<div align=\"center\">\n <img src=\"website/static/img/logo.png\" width=\"20%\" height=\"20%\" alt=\"watchman-logo\">\n <h1>Watchman</h1>\n <h3>A file watching service.</h3>\n</div>\n\n## Purpose\n\nWatchman exists to watch files and record when they actually change. It can\nalso trigger actions (such as rebuilding assets) when matching files change.\n\n## Documentation\n\nHead on over to https://facebook.github.io/watchman/\n\n## License\n\nWatchman is made available under the terms of the MIT License. See the\nLICENSE file that accompanies this distribution for the full text of the\nlicense.\n\n## Support\n\nWatchman is primarily maintained by the source control team at Meta Platforms, Inc. We support:\n\n* Windows and macOS builds\n* Linux builds on recent Ubuntu and Fedora releases\n* Watchman's [compatibility commitment](https://facebook.github.io/watchman/docs/compatibility.html)\n* Python, Rust, and JavaScript clients\n\nSupport for additional operating systems, release packaging, and language bindings is community-maintained:\n\n* Homebrew\n* FreeBSD\n* Solaris\n\nPlease submit a [GitHub issue](https://github.com/facebook/watchman/issues/) to report any troubles.\n\n## Contributing\n\nPlease see the [contributing document](CONTRIBUTING.md).\n"
  },
  {
    "path": "autogen.cmd",
    "content": "@ECHO OFF\n\npython3 build/fbcode_builder/getdeps.py build --src-dir=. watchman \"--project-install-prefix=watchman:%userprofile%\" --scratch-path \"C:\\open\\scratch\"\n\npython3 build/fbcode_builder/getdeps.py fixup-dyn-deps --src-dir=. watchman  built \"--project-install-prefix=watchman:%userprofile%\" --final-install-prefix \"%userprofile%\" --scratch-path \"C:\\open\\scratch\""
  },
  {
    "path": "autogen.sh",
    "content": "#!/bin/bash -e\n# vim:ts=2:sw=2:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncd \"$(dirname \"$0\")\"\n\nset -x\nPREFIX=${PREFIX:-/usr/local}\npython3 build/fbcode_builder/getdeps.py build \\\n        --allow-system-packages \\\n        --src-dir=. \\\n        \"--project-install-prefix=watchman:$PREFIX\" \\\n        watchman\npython3 build/fbcode_builder/getdeps.py fixup-dyn-deps \\\n        --allow-system-packages \\\n        --src-dir=. \\\n        \"--project-install-prefix=watchman:$PREFIX\" \\\n        --final-install-prefix \"$PREFIX\" \\\n        watchman built\n\nfind built -ls\n"
  },
  {
    "path": "build/deps/github_hashes/facebook/fb303-rev.txt",
    "content": "Subproject commit 9d35ae460081808d28949a581898c3fd1b468648\n"
  },
  {
    "path": "build/deps/github_hashes/facebook/fbthrift-rev.txt",
    "content": "Subproject commit 4e81edbcf9740e628a26159d1779b27b1c457e98\n"
  },
  {
    "path": "build/deps/github_hashes/facebook/folly-rev.txt",
    "content": "Subproject commit 4321dae73b18961089fc62532ee6dc011cbf1915\n"
  },
  {
    "path": "build/deps/github_hashes/facebook/mvfst-rev.txt",
    "content": "Subproject commit b229e95977aa5d4c271da60775f2b4bdbc40262a\n"
  },
  {
    "path": "build/deps/github_hashes/facebook/wangle-rev.txt",
    "content": "Subproject commit dbe97d189ad17a732477ecf4defdcf8cdac2c013\n"
  },
  {
    "path": "build/deps/github_hashes/facebookexperimental/edencommon-rev.txt",
    "content": "Subproject commit 9d4731a59818eca38557fbf1a9c2c4abdb17b650\n"
  },
  {
    "path": "build/deps/github_hashes/facebookincubator/fizz-rev.txt",
    "content": "Subproject commit 8d74917ae1e80269c6e8e9da44f9713269d9c2ec\n"
  },
  {
    "path": "build/fbcode_builder/.gitignore",
    "content": "# Facebook-internal CI builds don't have write permission outside of the\n# source tree, so we install all projects into this directory.\n/facebook_ci\n__pycache__/\n*.pyc\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBBuildOptions.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n\nfunction (fb_activate_static_library_option)\n  option(USE_STATIC_DEPS_ON_UNIX\n    \"If enabled, use static dependencies on unix systems. This is generally discouraged.\"\n    OFF\n  )\n  # Mark USE_STATIC_DEPS_ON_UNIX as an \"advanced\" option, since enabling it\n  # is generally discouraged.\n  mark_as_advanced(USE_STATIC_DEPS_ON_UNIX)\n\n  if(UNIX AND USE_STATIC_DEPS_ON_UNIX)\n    SET(CMAKE_FIND_LIBRARY_SUFFIXES \".a\" PARENT_SCOPE)\n  endif()\n\n  option(PREFER_STATIC_DEPS_ON_UNIX\n    \"If enabled, use static dependencies on unix systems as possible as we can. This is generally discouraged.\"\n    OFF\n  )\n  # Mark PREFER_STATIC_DEPS_ON_UNIX as an \"advanced\" option, since enabling it\n  # is generally discouraged.\n  mark_as_advanced(PREFER_STATIC_DEPS_ON_UNIX)\n\n  if(UNIX AND PREFER_STATIC_DEPS_ON_UNIX)\n    SET(CMAKE_FIND_LIBRARY_SUFFIXES \".a\" \".so\" PARENT_SCOPE)\n  endif()\nendfunction()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBCMakeParseArgs.cmake",
    "content": "#\n# Copyright (c) Facebook, Inc. and its affiliates.\n#\n# Helper function for parsing arguments to a CMake function.\n#\n# This function is very similar to CMake's built-in cmake_parse_arguments()\n# function, with some improvements:\n# - This function correctly handles empty arguments.  (cmake_parse_arguments()\n#   ignores empty arguments.)\n# - If a multi-value argument is specified more than once, the subsequent\n#   arguments are appended to the original list rather than replacing it.  e.g.\n#   if \"SOURCES\" is a multi-value argument, and the argument list contains\n#   \"SOURCES a b c SOURCES x y z\" then the resulting value for SOURCES will be\n#   \"a;b;c;x;y;z\" rather than \"x;y;z\"\n# - This function errors out by default on unrecognized arguments.  You can\n#   pass in an extra \"ALLOW_UNPARSED_ARGS\" argument to make it behave like\n#   cmake_parse_arguments(), and return the unparsed arguments in a\n#   <prefix>_UNPARSED_ARGUMENTS variable instead.\n#\n# It does look like cmake_parse_arguments() handled empty arguments correctly\n# from CMake 3.0 through 3.3, but it seems like this was probably broken when\n# it was turned into a built-in function in CMake 3.4.  Here is discussion and\n# patches that fixed this behavior prior to CMake 3.0:\n# https://cmake.org/pipermail/cmake-developers/2013-November/020607.html\n#\n# The one downside to this function over the built-in cmake_parse_arguments()\n# is that I don't think we can achieve the PARSE_ARGV behavior in a non-builtin\n# function, so we can't properly handle arguments that contain \";\".  CMake will\n# treat the \";\" characters as list element separators, and treat it as multiple\n# separate arguments.\n#\nfunction(fb_cmake_parse_args PREFIX OPTIONS ONE_VALUE_ARGS MULTI_VALUE_ARGS ARGS)\n  foreach(option IN LISTS ARGN)\n    if (\"${option}\" STREQUAL \"ALLOW_UNPARSED_ARGS\")\n      set(ALLOW_UNPARSED_ARGS TRUE)\n    else()\n      message(\n        FATAL_ERROR\n        \"unknown optional argument for fb_cmake_parse_args(): ${option}\"\n      )\n    endif()\n  endforeach()\n\n  # Define all options as FALSE in the parent scope to start with\n  foreach(var_name IN LISTS OPTIONS)\n    set(\"${PREFIX}_${var_name}\" \"FALSE\" PARENT_SCOPE)\n  endforeach()\n\n  # TODO: We aren't extremely strict about error checking for one-value\n  # arguments here.  e.g., we don't complain if a one-value argument is\n  # followed by another option/one-value/multi-value name rather than an\n  # argument.  We also don't complain if a one-value argument is the last\n  # argument and isn't followed by a value.\n\n  list(APPEND all_args ${ONE_VALUE_ARGS})\n  list(APPEND all_args ${MULTI_VALUE_ARGS})\n  set(current_variable)\n  set(unparsed_args)\n  foreach(arg IN LISTS ARGS)\n    list(FIND OPTIONS \"${arg}\" opt_index)\n    if(\"${opt_index}\" EQUAL -1)\n      list(FIND all_args \"${arg}\" arg_index)\n      if(\"${arg_index}\" EQUAL -1)\n        # This argument does not match an argument name,\n        # must be an argument value\n        if(\"${current_variable}\" STREQUAL \"\")\n          list(APPEND unparsed_args \"${arg}\")\n        else()\n          # Ugh, CMake lists have a pretty fundamental flaw: they cannot\n          # distinguish between an empty list and a list with a single empty\n          # element.  We track our own SEEN_VALUES_arg setting to help\n          # distinguish this and behave properly here.\n          if (\"${SEEN_${current_variable}}\" AND \"${${current_variable}}\" STREQUAL \"\")\n            set(\"${current_variable}\" \";${arg}\")\n          else()\n            list(APPEND \"${current_variable}\" \"${arg}\")\n          endif()\n          set(\"SEEN_${current_variable}\" TRUE)\n        endif()\n      else()\n        # We found a single- or multi-value argument name\n        set(current_variable \"VALUES_${arg}\")\n        set(\"SEEN_${arg}\" TRUE)\n      endif()\n    else()\n      # We found an option variable\n      set(\"${PREFIX}_${arg}\" \"TRUE\" PARENT_SCOPE)\n      set(current_variable)\n    endif()\n  endforeach()\n\n  foreach(arg_name IN LISTS ONE_VALUE_ARGS)\n    if(NOT \"${SEEN_${arg_name}}\")\n      unset(\"${PREFIX}_${arg_name}\" PARENT_SCOPE)\n    elseif(NOT \"${SEEN_VALUES_${arg_name}}\")\n      # If the argument was seen but a value wasn't specified, error out.\n      # We require exactly one value to be specified.\n      message(\n        FATAL_ERROR \"argument ${arg_name} was specified without a value\"\n      )\n    else()\n      list(LENGTH \"VALUES_${arg_name}\" num_args)\n      if(\"${num_args}\" EQUAL 0)\n        # We know an argument was specified and that we called list(APPEND).\n        # If CMake thinks the list is empty that means there is really a single\n        # empty element in the list.\n        set(\"${PREFIX}_${arg_name}\" \"\" PARENT_SCOPE)\n      elseif(\"${num_args}\" EQUAL 1)\n        list(GET \"VALUES_${arg_name}\" 0 arg_value)\n        set(\"${PREFIX}_${arg_name}\" \"${arg_value}\" PARENT_SCOPE)\n      else()\n        message(\n          FATAL_ERROR \"too many arguments specified for ${arg_name}: \"\n          \"${VALUES_${arg_name}}\"\n        )\n      endif()\n    endif()\n  endforeach()\n\n  foreach(arg_name IN LISTS MULTI_VALUE_ARGS)\n    # If this argument name was never seen, then unset the parent scope\n    if (NOT \"${SEEN_${arg_name}}\")\n      unset(\"${PREFIX}_${arg_name}\" PARENT_SCOPE)\n    else()\n      # TODO: Our caller still won't be able to distinguish between an empty\n      # list and a list with a single empty element.  We can tell which is\n      # which, but CMake lists don't make it easy to show this to our caller.\n      set(\"${PREFIX}_${arg_name}\" \"${VALUES_${arg_name}}\" PARENT_SCOPE)\n    endif()\n  endforeach()\n\n  # By default we fatal out on unparsed arguments, but return them to the\n  # caller if ALLOW_UNPARSED_ARGS was specified.\n  if (DEFINED unparsed_args)\n    if (\"${ALLOW_UNPARSED_ARGS}\")\n      set(\"${PREFIX}_UNPARSED_ARGUMENTS\" \"${unparsed_args}\" PARENT_SCOPE)\n    else()\n      message(FATAL_ERROR \"unrecognized arguments: ${unparsed_args}\")\n    endif()\n  endif()\nendfunction()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBCompilerSettings.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n\n# This file applies common compiler settings that are shared across\n# a number of Facebook opensource projects.\n# Please use caution and your best judgement before making changes\n# to these shared compiler settings in order to avoid accidentally\n# breaking a build in another project!\n\nif (WIN32)\n  include(FBCompilerSettingsMSVC)\nelse()\n  include(FBCompilerSettingsUnix)\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBCompilerSettingsMSVC.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n\n# This file applies common compiler settings that are shared across\n# a number of Facebook opensource projects.\n# Please use caution and your best judgement before making changes\n# to these shared compiler settings in order to avoid accidentally\n# breaking a build in another project!\n\nadd_compile_options(\n  /wd4250 # 'class1' : inherits 'class2::member' via dominance\n  /Zc:preprocessor # Enable conforming preprocessor for __VA_OPT__ support\n)\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBCompilerSettingsUnix.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n\n# This file applies common compiler settings that are shared across\n# a number of Facebook opensource projects.\n# Please use caution and your best judgement before making changes\n# to these shared compiler settings in order to avoid accidentally\n# breaking a build in another project!\n\nset(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -g -Wall -Wextra -Wno-deprecated -Wno-deprecated-declarations\")\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBPythonBinary.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n\ninclude(FBCMakeParseArgs)\n\n#\n# This file contains helper functions for building self-executing Python\n# binaries.\n#\n# This is somewhat different than typical python installation with\n# distutils/pip/virtualenv/etc.  We primarily want to build a standalone\n# executable, isolated from other Python packages on the system.  We don't want\n# to install files into the standard library python paths.  This is more\n# similar to PEX (https://github.com/pantsbuild/pex) and XAR\n# (https://github.com/facebookincubator/xar).  (In the future it would be nice\n# to update this code to also support directly generating XAR files if XAR is\n# available.)\n#\n# We also want to be able to easily define \"libraries\" of python files that can\n# be shared and re-used between these standalone python executables, and can be\n# shared across projects in different repositories.  This means that we do need\n# a way to \"install\" libraries so that they are visible to CMake builds in\n# other repositories, without actually installing them in the standard python\n# library paths.\n#\n\n# If the caller has not already found Python, do so now.\n# If we fail to find python now we won't fail immediately, but\n# add_fb_python_executable() or add_fb_python_library() will fatal out if they\n# are used.\nif(NOT TARGET Python3::Interpreter)\n  # CMake 3.12+ ships with a FindPython3.cmake module.  Try using it first.\n  # We find with QUIET here, since otherwise this generates some noisy warnings\n  # on versions of CMake before 3.12\n  if (WIN32)\n    # On Windows we need both the Interpreter as well as the Development\n    # libraries.\n    find_package(Python3 COMPONENTS Interpreter Development QUIET)\n  else()\n    find_package(Python3 COMPONENTS Interpreter QUIET)\n  endif()\n  if(Python3_Interpreter_FOUND)\n    message(STATUS \"Found Python 3: ${Python3_EXECUTABLE}\")\n  else()\n    # Try with the FindPythonInterp.cmake module available in older CMake\n    # versions.  Check to see if the caller has already searched for this\n    # themselves first.\n    if(NOT PYTHONINTERP_FOUND)\n      set(Python_ADDITIONAL_VERSIONS 3 3.6 3.5 3.4 3.3 3.2 3.1)\n      find_package(PythonInterp)\n      # TODO: On Windows we require the Python libraries as well.\n      # We currently do not search for them on this code path.\n      # For now we require building with CMake 3.12+ on Windows, so that the\n      # FindPython3 code path above is available.\n    endif()\n    if(PYTHONINTERP_FOUND)\n      if(\"${PYTHON_VERSION_MAJOR}\" GREATER_EQUAL 3)\n        set(Python3_EXECUTABLE \"${PYTHON_EXECUTABLE}\")\n        add_custom_target(Python3::Interpreter)\n      else()\n        string(\n          CONCAT FBPY_FIND_PYTHON_ERR\n          \"found Python ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}, \"\n          \"but need Python 3\"\n        )\n      endif()\n    endif()\n  endif()\nendif()\n\n# Find our helper program.\n# We typically install this in the same directory as this .cmake file.\nfind_program(\n  FB_MAKE_PYTHON_ARCHIVE \"make_fbpy_archive.py\"\n  PATHS ${CMAKE_MODULE_PATH}\n)\nset(FB_PY_TEST_MAIN \"${CMAKE_CURRENT_LIST_DIR}/fb_py_test_main.py\")\nset(\n  FB_PY_TEST_DISCOVER_SCRIPT\n  \"${CMAKE_CURRENT_LIST_DIR}/FBPythonTestAddTests.cmake\"\n)\nset(\n  FB_PY_WIN_MAIN_C\n  \"${CMAKE_CURRENT_LIST_DIR}/fb_py_win_main.c\"\n)\n\n# An option to control the default installation location for\n# install_fb_python_library().  This is relative to ${CMAKE_INSTALL_PREFIX}\nset(\n  FBPY_LIB_INSTALL_DIR \"lib/fb-py-libs\" CACHE STRING\n  \"The subdirectory where FB python libraries should be installed\"\n)\n\n#\n# Build a self-executing python binary.\n#\n# This accepts the same arguments as add_fb_python_library().\n#\n# In addition, a MAIN_MODULE argument is accepted.  This argument specifies\n# which module should be started as the __main__ module when the executable is\n# run.  If left unspecified, a __main__.py script must be present in the\n# manifest.\n#\nfunction(add_fb_python_executable TARGET)\n  fb_py_check_available()\n\n  # Parse the arguments\n  set(one_value_args BASE_DIR NAMESPACE MAIN_MODULE TYPE)\n  set(multi_value_args SOURCES DEPENDS)\n  fb_cmake_parse_args(\n    ARG \"\" \"${one_value_args}\" \"${multi_value_args}\" \"${ARGN}\"\n  )\n  fb_py_process_default_args(ARG_NAMESPACE ARG_BASE_DIR)\n\n  # Use add_fb_python_library() to perform most of our source handling\n  add_fb_python_library(\n    \"${TARGET}.main_lib\"\n    BASE_DIR \"${ARG_BASE_DIR}\"\n    NAMESPACE \"${ARG_NAMESPACE}\"\n    SOURCES ${ARG_SOURCES}\n    DEPENDS ${ARG_DEPENDS}\n  )\n\n  set(\n    manifest_files\n    \"$<TARGET_PROPERTY:${TARGET}.main_lib.py_lib,INTERFACE_INCLUDE_DIRECTORIES>\"\n  )\n  set(\n    source_files\n    \"$<TARGET_PROPERTY:${TARGET}.main_lib.py_lib,INTERFACE_SOURCES>\"\n  )\n\n  # The command to build the executable archive.\n  #\n  # If we are using CMake 3.8+ we can use COMMAND_EXPAND_LISTS.\n  # CMP0067 isn't really the policy we care about, but seems like the best way\n  # to check if we are running 3.8+.\n  if (POLICY CMP0067)\n    set(extra_cmd_params COMMAND_EXPAND_LISTS)\n    set(make_py_args \"${manifest_files}\")\n  else()\n    set(extra_cmd_params)\n    set(make_py_args --manifest-separator \"::\" \"$<JOIN:${manifest_files},::>\")\n  endif()\n\n  set(output_file \"${TARGET}${CMAKE_EXECUTABLE_SUFFIX}\")\n  if(WIN32)\n    set(zipapp_output \"${TARGET}.py_zipapp\")\n  else()\n    set(zipapp_output \"${output_file}\")\n  endif()\n  set(zipapp_output_file \"${zipapp_output}\")\n\n  set(is_dir_output FALSE)\n  if(DEFINED ARG_TYPE)\n    list(APPEND make_py_args \"--type\" \"${ARG_TYPE}\")\n    if (\"${ARG_TYPE}\" STREQUAL \"dir\")\n      set(is_dir_output TRUE)\n      # CMake doesn't really seem to like having a directory specified as an\n      # output; specify the __main__.py file as the output instead.\n      set(zipapp_output_file \"${zipapp_output}/__main__.py\")\n      # Update output_file to match zipapp_output_file for dir type\n      set(output_file \"${zipapp_output_file}\")\n      list(APPEND\n        extra_cmd_params\n        COMMAND \"${CMAKE_COMMAND}\" -E remove_directory \"${zipapp_output}\"\n      )\n    endif()\n  endif()\n\n  if(DEFINED ARG_MAIN_MODULE)\n    list(APPEND make_py_args \"--main\" \"${ARG_MAIN_MODULE}\")\n  endif()\n\n  add_custom_command(\n    OUTPUT \"${zipapp_output_file}\"\n    ${extra_cmd_params}\n    COMMAND\n      \"${Python3_EXECUTABLE}\" \"${FB_MAKE_PYTHON_ARCHIVE}\"\n      -o \"${zipapp_output}\"\n      ${make_py_args}\n    DEPENDS\n      ${source_files}\n      \"${TARGET}.main_lib.py_sources_built\"\n      \"${FB_MAKE_PYTHON_ARCHIVE}\"\n  )\n\n  if(WIN32)\n    if(is_dir_output)\n      # TODO: generate a main executable that will invoke Python3\n      # with the correct main module inside the output directory\n    else()\n      add_executable(\"${TARGET}.winmain\" \"${FB_PY_WIN_MAIN_C}\")\n      target_link_libraries(\"${TARGET}.winmain\" Python3::Python)\n      # The Python3::Python target doesn't seem to be set up completely\n      # correctly on Windows for some reason, and we have to explicitly add\n      # ${Python3_LIBRARY_DIRS} to the target link directories.\n      target_link_directories(\n        \"${TARGET}.winmain\"\n        PUBLIC ${Python3_LIBRARY_DIRS}\n      )\n      add_custom_command(\n        OUTPUT \"${output_file}\"\n        DEPENDS \"${TARGET}.winmain\" \"${zipapp_output_file}\"\n        COMMAND\n          \"cmd.exe\" \"/c\" \"copy\" \"/b\"\n          \"${TARGET}.winmain${CMAKE_EXECUTABLE_SUFFIX}+${zipapp_output}\"\n          \"${output_file}\"\n      )\n    endif()\n  endif()\n\n  # Add an \"ALL\" target that depends on force ${TARGET},\n  # so that ${TARGET} will be included in the default list of build targets.\n  add_custom_target(\"${TARGET}.GEN_PY_EXE\" ALL DEPENDS \"${output_file}\")\n\n  # Allow resolving the executable path for the target that we generate\n  # via a generator expression like:\n  # \"WATCHMAN_WAIT_PATH=$<TARGET_PROPERTY:watchman-wait.GEN_PY_EXE,EXECUTABLE>\"\n  set_property(TARGET \"${TARGET}.GEN_PY_EXE\"\n      PROPERTY EXECUTABLE \"${CMAKE_CURRENT_BINARY_DIR}/${output_file}\")\nendfunction()\n\n# Define a python unittest executable.\n# The executable is built using add_fb_python_executable and has the\n# following differences:\n#\n# Each of the source files specified in SOURCES will be imported\n# and have unittest discovery performed upon them.\n# Those sources will be imported in the top level namespace.\n#\n# The ENV argument allows specifying a list of \"KEY=VALUE\"\n# pairs that will be used by the test runner to set up the environment\n# in the child process prior to running the test.  This is useful for\n# passing additional configuration to the test.\nfunction(add_fb_python_unittest TARGET)\n  # Parse the arguments\n  set(multi_value_args SOURCES DEPENDS ENV PROPERTIES)\n  set(\n    one_value_args\n    WORKING_DIRECTORY BASE_DIR NAMESPACE TEST_LIST DISCOVERY_TIMEOUT TYPE\n  )\n  fb_cmake_parse_args(\n    ARG \"\" \"${one_value_args}\" \"${multi_value_args}\" \"${ARGN}\"\n  )\n  fb_py_process_default_args(ARG_NAMESPACE ARG_BASE_DIR)\n  if(NOT ARG_WORKING_DIRECTORY)\n    # Default the working directory to the current binary directory.\n    # This matches the default behavior of add_test() and other standard\n    # test functions like gtest_discover_tests()\n    set(ARG_WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")\n  endif()\n  if(NOT ARG_TEST_LIST)\n    set(ARG_TEST_LIST \"${TARGET}_TESTS\")\n  endif()\n  if(NOT ARG_DISCOVERY_TIMEOUT)\n    set(ARG_DISCOVERY_TIMEOUT 5)\n  endif()\n\n  # Tell our test program the list of modules to scan for tests.\n  # We scan all modules directly listed in our SOURCES argument, and skip\n  # modules that came from dependencies in the DEPENDS list.\n  #\n  # This is written into a __test_modules__.py module that the test runner\n  # will look at.\n  set(\n    test_modules_path\n    \"${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_test_modules.py\"\n  )\n  file(WRITE \"${test_modules_path}\" \"TEST_MODULES = [\\n\")\n  string(REPLACE \".\" \"/\" namespace_dir \"${ARG_NAMESPACE}\")\n  if (NOT \"${namespace_dir}\" STREQUAL \"\")\n    set(namespace_dir \"${namespace_dir}/\")\n  endif()\n  set(test_modules)\n  foreach(src_path IN LISTS ARG_SOURCES)\n    fb_py_compute_dest_path(\n      abs_source dest_path\n      \"${src_path}\" \"${namespace_dir}\" \"${ARG_BASE_DIR}\"\n    )\n    string(REPLACE \"/\" \".\" module_name \"${dest_path}\")\n    string(REGEX REPLACE \"\\\\.py$\" \"\" module_name \"${module_name}\")\n    list(APPEND test_modules \"${module_name}\")\n    file(APPEND \"${test_modules_path}\" \"  '${module_name}',\\n\")\n  endforeach()\n  file(APPEND \"${test_modules_path}\" \"]\\n\")\n\n  # The __main__ is provided by our runner wrapper/bootstrap\n  list(APPEND ARG_SOURCES \"${FB_PY_TEST_MAIN}=__main__.py\")\n  list(APPEND ARG_SOURCES \"${test_modules_path}=__test_modules__.py\")\n\n  if(NOT DEFINED ARG_TYPE)\n    set(ARG_TYPE \"zipapp\")\n  endif()\n\n  add_fb_python_executable(\n    \"${TARGET}\"\n    TYPE \"${ARG_TYPE}\"\n    NAMESPACE \"${ARG_NAMESPACE}\"\n    BASE_DIR \"${ARG_BASE_DIR}\"\n    SOURCES ${ARG_SOURCES}\n    DEPENDS ${ARG_DEPENDS}\n  )\n\n  # Run test discovery after the test executable is built.\n  # This logic is based on the code for gtest_discover_tests()\n  set(ctest_file_base \"${CMAKE_CURRENT_BINARY_DIR}/${TARGET}\")\n  set(ctest_include_file \"${ctest_file_base}_include.cmake\")\n  set(ctest_tests_file \"${ctest_file_base}_tests.cmake\")\n  add_custom_command(\n    TARGET \"${TARGET}.GEN_PY_EXE\" POST_BUILD\n    BYPRODUCTS \"${ctest_tests_file}\"\n    COMMAND\n      \"${CMAKE_COMMAND}\"\n      -D \"TEST_TARGET=${TARGET}\"\n      -D \"TEST_INTERPRETER=${Python3_EXECUTABLE}\"\n      -D \"TEST_ENV=${ARG_ENV}\"\n      -D \"TEST_EXECUTABLE=$<TARGET_PROPERTY:${TARGET}.GEN_PY_EXE,EXECUTABLE>\"\n      -D \"TEST_WORKING_DIR=${ARG_WORKING_DIRECTORY}\"\n      -D \"TEST_LIST=${ARG_TEST_LIST}\"\n      -D \"TEST_PREFIX=${TARGET}::\"\n      -D \"TEST_PROPERTIES=${ARG_PROPERTIES}\"\n      -D \"CTEST_FILE=${ctest_tests_file}\"\n      -P \"${FB_PY_TEST_DISCOVER_SCRIPT}\"\n    VERBATIM\n  )\n\n  file(\n    WRITE \"${ctest_include_file}\"\n    \"if(EXISTS \\\"${ctest_tests_file}\\\")\\n\"\n    \"  include(\\\"${ctest_tests_file}\\\")\\n\"\n    \"else()\\n\"\n    \"  add_test(\\\"${TARGET}_NOT_BUILT\\\" \\\"${TARGET}_NOT_BUILT\\\")\\n\"\n    \"endif()\\n\"\n  )\n  set_property(\n    DIRECTORY APPEND PROPERTY TEST_INCLUDE_FILES\n    \"${ctest_include_file}\"\n  )\nendfunction()\n\n#\n# Define a python library.\n#\n# If you want to install a python library generated from this rule note that\n# you need to use install_fb_python_library() rather than CMake's built-in\n# install() function.  This will make it available for other downstream\n# projects to use in their add_fb_python_executable() and\n# add_fb_python_library() calls.  (You do still need to use `install(EXPORT)`\n# later to install the CMake exports.)\n#\n# Parameters:\n# - BASE_DIR <dir>:\n#   The base directory path to strip off from each source path.  All source\n#   files must be inside this directory.  If not specified it defaults to\n#   ${CMAKE_CURRENT_SOURCE_DIR}.\n# - NAMESPACE <namespace>:\n#   The destination namespace where these files should be installed in python\n#   binaries.  If not specified, this defaults to the current relative path of\n#   ${CMAKE_CURRENT_SOURCE_DIR} inside ${CMAKE_SOURCE_DIR}.  e.g., a python\n#   library defined in the directory repo_root/foo/bar will use a default\n#   namespace of \"foo.bar\"\n# - SOURCES <src1> <...>:\n#   The python source files.\n#   You may optionally specify as source using the form: PATH=ALIAS where\n#   PATH is a relative path in the source tree and ALIAS is the relative\n#   path into which PATH should be rewritten.  This is useful for mapping\n#   an executable script to the main module in a python executable.\n#   e.g.: `python/bin/watchman-wait=__main__.py`\n# - DEPENDS <target1> <...>:\n#   Other python libraries that this one depends on.\n# - INSTALL_DIR <dir>:\n#   The directory where this library should be installed.\n#   install_fb_python_library() must still be called later to perform the\n#   installation.  If a relative path is given it will be treated relative to\n#   ${CMAKE_INSTALL_PREFIX}\n#\n# CMake is unfortunately pretty crappy at being able to define custom build\n# rules & behaviors.  It doesn't support transitive property propagation\n# between custom targets; only the built-in add_executable() and add_library()\n# targets support transitive properties.\n#\n# We hack around this janky CMake behavior by (ab)using interface libraries to\n# propagate some of the data we want between targets, without actually\n# generating a C library.\n#\n# add_fb_python_library(SOMELIB) generates the following things:\n# - An INTERFACE library rule named SOMELIB.py_lib which tracks some\n#   information about transitive dependencies:\n#   - the transitive set of source files in the INTERFACE_SOURCES property\n#   - the transitive set of manifest files that this library depends on in\n#     the INTERFACE_INCLUDE_DIRECTORIES property.\n# - A custom command that generates a SOMELIB.manifest file.\n#   This file contains the mapping of source files to desired destination\n#   locations in executables that depend on this library.  This manifest file\n#   will then be read at build-time in order to build executables.\n#\nfunction(add_fb_python_library LIB_NAME)\n  fb_py_check_available()\n\n  # Parse the arguments\n  # We use fb_cmake_parse_args() rather than cmake_parse_arguments() since\n  # cmake_parse_arguments() does not handle empty arguments, and it is common\n  # for callers to want to specify an empty NAMESPACE parameter.\n  set(one_value_args BASE_DIR NAMESPACE INSTALL_DIR)\n  set(multi_value_args SOURCES DEPENDS)\n  fb_cmake_parse_args(\n    ARG \"\" \"${one_value_args}\" \"${multi_value_args}\" \"${ARGN}\"\n  )\n  fb_py_process_default_args(ARG_NAMESPACE ARG_BASE_DIR)\n\n  string(REPLACE \".\" \"/\" namespace_dir \"${ARG_NAMESPACE}\")\n  if (NOT \"${namespace_dir}\" STREQUAL \"\")\n    set(namespace_dir \"${namespace_dir}/\")\n  endif()\n\n  if(NOT DEFINED ARG_INSTALL_DIR)\n    set(install_dir \"${FBPY_LIB_INSTALL_DIR}/\")\n  elseif(\"${ARG_INSTALL_DIR}\" STREQUAL \"\")\n    set(install_dir \"\")\n  else()\n    set(install_dir \"${ARG_INSTALL_DIR}/\")\n  endif()\n\n  # message(STATUS \"fb py library ${LIB_NAME}: \"\n  #         \"NS=${namespace_dir} BASE=${ARG_BASE_DIR}\")\n\n  # TODO: In the future it would be nice to support pre-compiling the source\n  # files.  We could emit a rule to compile each source file and emit a\n  # .pyc/.pyo file here, and then have the manifest reference the pyc/pyo\n  # files.\n\n  # Define a library target to help pass around information about the library,\n  # and propagate dependency information.\n  #\n  # CMake make a lot of assumptions that libraries are C++ libraries.  To help\n  # avoid confusion we name our target \"${LIB_NAME}.py_lib\" rather than just\n  # \"${LIB_NAME}\".  This helps avoid confusion if callers try to use\n  # \"${LIB_NAME}\" on their own as a target name.  (e.g., attempting to install\n  # it directly with install(TARGETS) won't work.  Callers must use\n  # install_fb_python_library() instead.)\n  add_library(\"${LIB_NAME}.py_lib\" INTERFACE)\n\n  # Emit the manifest file.\n  #\n  # We write the manifest file to a temporary path first, then copy it with\n  # configure_file(COPYONLY).  This is necessary to get CMake to understand\n  # that \"${manifest_path}\" is generated by the CMake configure phase,\n  # and allow using it as a dependency for add_custom_command().\n  # (https://gitlab.kitware.com/cmake/cmake/issues/16367)\n  set(manifest_path \"${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}.manifest\") \n  set(tmp_manifest \"${manifest_path}.tmp\")\n  file(WRITE \"${tmp_manifest}\" \"FBPY_MANIFEST 1\\n\")\n  set(abs_sources)\n  foreach(src_path IN LISTS ARG_SOURCES)\n    fb_py_compute_dest_path(\n      abs_source dest_path\n      \"${src_path}\" \"${namespace_dir}\" \"${ARG_BASE_DIR}\"\n    )\n    list(APPEND abs_sources \"${abs_source}\")\n    target_sources(\n      \"${LIB_NAME}.py_lib\" INTERFACE\n      \"$<BUILD_INTERFACE:${abs_source}>\"\n      \"$<INSTALL_INTERFACE:${install_dir}${LIB_NAME}/${dest_path}>\"\n    )\n    file(\n      APPEND \"${tmp_manifest}\"\n      \"${abs_source} :: ${dest_path}\\n\"\n    )\n  endforeach()\n  configure_file(\"${tmp_manifest}\" \"${manifest_path}\" COPYONLY)\n\n  target_include_directories(\n    \"${LIB_NAME}.py_lib\" INTERFACE\n    \"$<BUILD_INTERFACE:${manifest_path}>\"\n    \"$<INSTALL_INTERFACE:${install_dir}${LIB_NAME}.manifest>\"\n  )\n\n  # Add a target that depends on all of the source files.\n  # This is needed in case some of the source files are generated.  This will\n  # ensure that these source files are brought up-to-date before we build\n  # any python binaries that depend on this library.\n  add_custom_target(\"${LIB_NAME}.py_sources_built\" DEPENDS ${abs_sources})\n  add_dependencies(\"${LIB_NAME}.py_lib\" \"${LIB_NAME}.py_sources_built\")\n\n  # Hook up library dependencies, and also make the *.py_sources_built target\n  # depend on the sources for all of our dependencies also being up-to-date.\n  foreach(dep IN LISTS ARG_DEPENDS)\n    target_link_libraries(\"${LIB_NAME}.py_lib\" INTERFACE \"${dep}.py_lib\")\n\n    # Mark that our .py_sources_built target depends on each our our dependent\n    # libraries.  This serves two functions:\n    # - This causes CMake to generate an error message if one of the\n    #   dependencies is never defined.  The target_link_libraries() call above\n    #   won't complain if one of the dependencies doesn't exist (since it is\n    #   intended to allow passing in file names for plain library files rather\n    #   than just targets).\n    # - It ensures that sources for our dependencies are built before any\n    #   executable that depends on us.  Note that we depend on \"${dep}.py_lib\"\n    #   rather than \"${dep}.py_sources_built\" for this purpose because the\n    #   \".py_sources_built\" target won't be available for imported targets.\n    add_dependencies(\"${LIB_NAME}.py_sources_built\" \"${dep}.py_lib\")\n  endforeach()\n\n  # Add a custom command to help with library installation, in case\n  # install_fb_python_library() is called later for this library.\n  # add_custom_command() only works with file dependencies defined in the same\n  # CMakeLists.txt file, so we want to make sure this is defined here, rather\n  # then where install_fb_python_library() is called.\n  # This command won't be run by default, but will only be run if it is needed\n  # by a subsequent install_fb_python_library() call.\n  #\n  # This command copies the library contents into the build directory.\n  # It would be nicer if we could skip this intermediate copy, and just run\n  # make_fbpy_archive.py at install time to copy them directly to the desired\n  # installation directory.  Unfortunately this is difficult to do, and seems\n  # to interfere with some of the CMake code that wants to generate a manifest\n  # of installed files.\n  set(build_install_dir \"${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}.lib_install\")\n  add_custom_command(\n    OUTPUT\n      \"${build_install_dir}/${LIB_NAME}.manifest\"\n    COMMAND \"${CMAKE_COMMAND}\" -E remove_directory \"${build_install_dir}\"\n    COMMAND\n      \"${Python3_EXECUTABLE}\" \"${FB_MAKE_PYTHON_ARCHIVE}\" --type lib-install\n      --install-dir \"${LIB_NAME}\"\n      -o \"${build_install_dir}/${LIB_NAME}\" \"${manifest_path}\"\n    DEPENDS\n      \"${abs_sources}\"\n      \"${manifest_path}\"\n      \"${FB_MAKE_PYTHON_ARCHIVE}\"\n  )\n  add_custom_target(\n    \"${LIB_NAME}.py_lib_install\"\n    DEPENDS \"${build_install_dir}/${LIB_NAME}.manifest\"\n  )\n\n  # Set some properties to pass through the install paths to\n  # install_fb_python_library()\n  #\n  # Passing through ${build_install_dir} allows install_fb_python_library()\n  # to work even if used from a different CMakeLists.txt file than where\n  # add_fb_python_library() was called (i.e. such that\n  # ${CMAKE_CURRENT_BINARY_DIR} is different between the two calls).\n  set(abs_install_dir \"${install_dir}\")\n  if(NOT IS_ABSOLUTE \"${abs_install_dir}\")\n    set(abs_install_dir \"${CMAKE_INSTALL_PREFIX}/${abs_install_dir}\")\n  endif()\n  string(REGEX REPLACE \"/$\" \"\" abs_install_dir \"${abs_install_dir}\")\n  set_target_properties(\n    \"${LIB_NAME}.py_lib_install\"\n    PROPERTIES\n    INSTALL_DIR \"${abs_install_dir}\"\n    BUILD_INSTALL_DIR \"${build_install_dir}\"\n  )\nendfunction()\n\n#\n# Install an FB-style packaged python binary.\n#\n# - DESTINATION <export-name>:\n#   Associate the installed target files with the given export-name.\n#\nfunction(install_fb_python_executable TARGET)\n  # Parse the arguments\n  set(one_value_args DESTINATION)\n  set(multi_value_args)\n  fb_cmake_parse_args(\n    ARG \"\" \"${one_value_args}\" \"${multi_value_args}\" \"${ARGN}\"\n  )\n\n  if(NOT DEFINED ARG_DESTINATION)\n    set(ARG_DESTINATION bin)\n  endif()\n\n  install(\n    PROGRAMS \"$<TARGET_PROPERTY:${TARGET}.GEN_PY_EXE,EXECUTABLE>\"\n    DESTINATION \"${ARG_DESTINATION}\"\n  )\nendfunction()\n\n#\n# Install a python library.\n#\n# - EXPORT <export-name>:\n#   Associate the installed target files with the given export-name.\n#\n# Note that unlike the built-in CMake install() function we do not accept a\n# DESTINATION parameter.  Instead, use the INSTALL_DIR parameter to\n# add_fb_python_library() to set the installation location.\n#\nfunction(install_fb_python_library LIB_NAME)\n  set(one_value_args EXPORT)\n  fb_cmake_parse_args(ARG \"\" \"${one_value_args}\" \"\" \"${ARGN}\")\n\n  # Export our \"${LIB_NAME}.py_lib\" target so that it will be available to\n  # downstream projects in our installed CMake config files.\n  if(DEFINED ARG_EXPORT)\n    install(TARGETS \"${LIB_NAME}.py_lib\" EXPORT \"${ARG_EXPORT}\")\n  endif()\n\n  # add_fb_python_library() emits a .py_lib_install target that will prepare\n  # the installation directory.  However, it isn't part of the \"ALL\" target and\n  # therefore isn't built by default.\n  #\n  # Make sure the ALL target depends on it now.  We have to do this by\n  # introducing yet another custom target.\n  # Add it as a dependency to the ALL target now.\n  add_custom_target(\"${LIB_NAME}.py_lib_install_all\" ALL)\n  add_dependencies(\n    \"${LIB_NAME}.py_lib_install_all\" \"${LIB_NAME}.py_lib_install\"\n  )\n\n  # Copy the intermediate install directory generated at build time into\n  # the desired install location.\n  get_target_property(dest_dir \"${LIB_NAME}.py_lib_install\" \"INSTALL_DIR\")\n  get_target_property(\n    build_install_dir \"${LIB_NAME}.py_lib_install\" \"BUILD_INSTALL_DIR\"\n  )\n  install(\n    DIRECTORY \"${build_install_dir}/${LIB_NAME}\"\n    DESTINATION \"${dest_dir}\"\n  )\n  install(\n    FILES \"${build_install_dir}/${LIB_NAME}.manifest\"\n    DESTINATION \"${dest_dir}\"\n  )\nendfunction()\n\n# Helper macro to process the BASE_DIR and NAMESPACE arguments for\n# add_fb_python_executable() and add_fb_python_executable()\nmacro(fb_py_process_default_args NAMESPACE_VAR BASE_DIR_VAR)\n  # If the namespace was not specified, default to the relative path to the\n  # current directory (starting from the repository root).\n  if(NOT DEFINED \"${NAMESPACE_VAR}\")\n    file(\n      RELATIVE_PATH \"${NAMESPACE_VAR}\"\n      \"${CMAKE_SOURCE_DIR}\"\n      \"${CMAKE_CURRENT_SOURCE_DIR}\"\n    )\n  endif()\n\n  if(NOT DEFINED \"${BASE_DIR_VAR}\")\n    # If the base directory was not specified, default to the current directory\n    set(\"${BASE_DIR_VAR}\" \"${CMAKE_CURRENT_SOURCE_DIR}\")\n  else()\n    # If the base directory was specified, always convert it to an\n    # absolute path.\n    get_filename_component(\"${BASE_DIR_VAR}\" \"${${BASE_DIR_VAR}}\" ABSOLUTE)\n  endif()\nendmacro()\n\nfunction(fb_py_check_available)\n  # Make sure that Python 3 and our make_fbpy_archive.py helper script are\n  # available.\n  if(NOT Python3_EXECUTABLE)\n    if(FBPY_FIND_PYTHON_ERR)\n      message(FATAL_ERROR \"Unable to find Python 3: ${FBPY_FIND_PYTHON_ERR}\")\n    else()\n      message(FATAL_ERROR \"Unable to find Python 3\")\n    endif()\n  endif()\n\n  if (NOT FB_MAKE_PYTHON_ARCHIVE)\n    message(\n      FATAL_ERROR \"unable to find make_fbpy_archive.py helper program (it \"\n      \"should be located in the same directory as FBPythonBinary.cmake)\"\n    )\n  endif()\nendfunction()\n\nfunction(\n    fb_py_compute_dest_path\n    src_path_output dest_path_output src_path namespace_dir base_dir\n)\n  if(\"${src_path}\" MATCHES \"=\")\n    # We want to split the string on the `=` sign, but cmake doesn't\n    # provide much in the way of helpers for this, so we rewrite the\n    # `=` sign to `;` so that we can treat it as a cmake list and\n    # then index into the components\n    string(REPLACE \"=\" \";\" src_path_list \"${src_path}\")\n    list(GET src_path_list 0 src_path)\n    # Note that we ignore the `namespace_dir` in the alias case\n    # in order to allow aliasing a source to the top level `__main__.py`\n    # filename.\n    list(GET src_path_list 1 dest_path)\n  else()\n    unset(dest_path)\n  endif()\n\n  get_filename_component(abs_source \"${src_path}\" ABSOLUTE)\n  if(NOT DEFINED dest_path)\n    file(RELATIVE_PATH rel_src \"${ARG_BASE_DIR}\" \"${abs_source}\")\n    if(\"${rel_src}\" MATCHES \"^../\")\n      message(\n        FATAL_ERROR \"${LIB_NAME}: source file \\\"${abs_source}\\\" is not inside \"\n        \"the base directory ${ARG_BASE_DIR}\"\n      )\n    endif()\n    set(dest_path \"${namespace_dir}${rel_src}\")\n  endif()\n\n  set(\"${src_path_output}\" \"${abs_source}\" PARENT_SCOPE)\n  set(\"${dest_path_output}\" \"${dest_path}\" PARENT_SCOPE)\nendfunction()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBPythonTestAddTests.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n\n# Add a command to be emitted to the CTest file\nset(ctest_script)\nfunction(add_command CMD)\n  set(escaped_args \"\")\n  foreach(arg ${ARGN})\n    # Escape all arguments using \"Bracket Argument\" syntax\n    # We could skip this for argument that don't contain any special\n    # characters if we wanted to make the output slightly more human-friendly.\n    set(escaped_args \"${escaped_args} [==[${arg}]==]\")\n  endforeach()\n  set(ctest_script \"${ctest_script}${CMD}(${escaped_args})\\n\" PARENT_SCOPE)\nendfunction()\n\nif(NOT EXISTS \"${TEST_EXECUTABLE}\")\n  message(FATAL_ERROR \"Test executable does not exist: ${TEST_EXECUTABLE}\")\nendif()\nexecute_process(\n  COMMAND ${CMAKE_COMMAND} -E env ${TEST_ENV} \"${TEST_INTERPRETER}\" \"${TEST_EXECUTABLE}\" --list-tests\n  WORKING_DIRECTORY \"${TEST_WORKING_DIR}\"\n  OUTPUT_VARIABLE output\n  RESULT_VARIABLE result\n)\nif(NOT \"${result}\" EQUAL 0)\n  string(REPLACE \"\\n\" \"\\n  \" output \"${output}\")\n  message(\n    FATAL_ERROR\n    \"Error running test executable: ${TEST_EXECUTABLE}\\n\"\n    \"Output:\\n\"\n    \"  ${output}\\n\"\n  )\nendif()\n\n# Parse output\nstring(REPLACE \"\\n\" \";\" tests_list \"${output}\")\nforeach(test_name ${tests_list})\n  add_command(\n    add_test\n    \"${TEST_PREFIX}${test_name}\"\n    ${CMAKE_COMMAND} -E env ${TEST_ENV}\n    \"${TEST_INTERPRETER}\" \"${TEST_EXECUTABLE}\" \"${test_name}\"\n  )\n  add_command(\n    set_tests_properties\n    \"${TEST_PREFIX}${test_name}\"\n    PROPERTIES\n    WORKING_DIRECTORY \"${TEST_WORKING_DIR}\"\n    ${TEST_PROPERTIES}\n  )\nendforeach()\n\n# Set a list of discovered tests in the parent scope, in case users\n# want access to this list as a CMake variable\nif(TEST_LIST)\n  add_command(set ${TEST_LIST} ${tests_list})\nendif()\n\nfile(WRITE \"${CTEST_FILE}\" \"${ctest_script}\")\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBThriftCppLibrary.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n\ninclude(FBCMakeParseArgs)\n\n# Generate a C++ library from a thrift file\n#\n# Parameters:\n# - SERVICES <svc1> [<svc2> ...]\n#   The names of the services defined in the thrift file.\n# - DEPENDS <dep1> [<dep2> ...]\n#   A list of other thrift C++ libraries that this library depends on.\n# - OPTIONS <opt1> [<opt2> ...]\n#   A list of options to pass to the thrift compiler.\n# - INCLUDE_DIR <path>\n#   The sub-directory where generated headers will be installed.\n#   Defaults to \"include\" if not specified.  The caller must still call\n#   install() to install the thrift library if desired.\n# - THRIFT_INCLUDE_DIR <path>\n#   The sub-directory where generated headers will be installed.\n#   Defaults to \"${INCLUDE_DIR}/thrift-files\" if not specified.\n#   The caller must still call install() to install the thrift library if\n#   desired.\nfunction(add_fbthrift_cpp_library LIB_NAME THRIFT_FILE)\n  # Parse the arguments\n  set(one_value_args INCLUDE_DIR THRIFT_INCLUDE_DIR)\n  set(multi_value_args SERVICES DEPENDS OPTIONS)\n  fb_cmake_parse_args(\n    ARG \"\" \"${one_value_args}\" \"${multi_value_args}\" \"${ARGN}\"\n  )\n  if(NOT DEFINED ARG_INCLUDE_DIR)\n    set(ARG_INCLUDE_DIR \"include\")\n  endif()\n  if(NOT DEFINED ARG_THRIFT_INCLUDE_DIR)\n    set(ARG_THRIFT_INCLUDE_DIR \"${ARG_INCLUDE_DIR}/thrift-files\")\n  endif()\n\n  get_filename_component(base ${THRIFT_FILE} NAME_WE)\n  get_filename_component(\n    output_dir\n    ${CMAKE_CURRENT_BINARY_DIR}/${THRIFT_FILE}\n    DIRECTORY\n  )\n\n  # Generate relative paths in #includes\n  file(\n    RELATIVE_PATH include_prefix\n    \"${CMAKE_SOURCE_DIR}\"\n    \"${CMAKE_CURRENT_SOURCE_DIR}/${THRIFT_FILE}\"\n  )\n  get_filename_component(include_prefix ${include_prefix} DIRECTORY)\n\n  if (NOT \"${include_prefix}\" STREQUAL \"\")\n    list(APPEND ARG_OPTIONS \"include_prefix=${include_prefix}\")\n  endif()\n  # CMake 3.12 is finally getting a list(JOIN) function, but until then\n  # treating the list as a string and replacing the semicolons is good enough.\n  string(REPLACE \";\" \",\" GEN_ARG_STR \"${ARG_OPTIONS}\")\n\n  # Compute the list of generated files\n  list(APPEND generated_headers\n    \"${output_dir}/gen-cpp2/${base}_constants.h\"\n    \"${output_dir}/gen-cpp2/${base}_types.h\"\n    \"${output_dir}/gen-cpp2/${base}_types.tcc\"\n    \"${output_dir}/gen-cpp2/${base}_types_custom_protocol.h\"\n    \"${output_dir}/gen-cpp2/${base}_metadata.h\"\n  )\n  list(APPEND generated_sources\n    \"${output_dir}/gen-cpp2/${base}_constants.cpp\"\n    \"${output_dir}/gen-cpp2/${base}_data.h\"\n    \"${output_dir}/gen-cpp2/${base}_data.cpp\"\n    \"${output_dir}/gen-cpp2/${base}_types.cpp\"\n    \"${output_dir}/gen-cpp2/${base}_types_binary.cpp\"\n    \"${output_dir}/gen-cpp2/${base}_types_compact.cpp\"\n    \"${output_dir}/gen-cpp2/${base}_types_serialization.cpp\"\n    \"${output_dir}/gen-cpp2/${base}_metadata.cpp\"\n  )\n  foreach(service IN LISTS ARG_SERVICES)\n    list(APPEND generated_headers\n      \"${output_dir}/gen-cpp2/${service}.h\"\n      \"${output_dir}/gen-cpp2/${service}.tcc\"\n      \"${output_dir}/gen-cpp2/${service}AsyncClient.h\"\n      \"${output_dir}/gen-cpp2/${service}_custom_protocol.h\"\n    )\n    list(APPEND generated_sources\n      \"${output_dir}/gen-cpp2/${service}.cpp\"\n      \"${output_dir}/gen-cpp2/${service}AsyncClient.cpp\"\n      \"${output_dir}/gen-cpp2/${service}_processmap_binary.cpp\"\n      \"${output_dir}/gen-cpp2/${service}_processmap_compact.cpp\"\n    )\n  endforeach()\n\n  # This generator expression gets the list of include directories required\n  # for all of our dependencies.\n  # It requires using COMMAND_EXPAND_LISTS in the add_custom_command() call\n  # below.  COMMAND_EXPAND_LISTS is only available in CMake 3.8+\n  # If we really had to support older versions of CMake we would probably need\n  # to use a wrapper script around the thrift compiler that could take the\n  # include list as a single argument and split it up before invoking the\n  # thrift compiler.\n  if (NOT POLICY CMP0067)\n    message(FATAL_ERROR \"add_fbthrift_cpp_library() requires CMake 3.8+\")\n  endif()\n  set(\n    thrift_include_options\n    \"-I;$<JOIN:$<TARGET_PROPERTY:${LIB_NAME}.thrift_includes,INTERFACE_INCLUDE_DIRECTORIES>,;-I;>\"\n  )\n\n  # Emit the rule to run the thrift compiler\n  add_custom_command(\n    OUTPUT\n      ${generated_headers}\n      ${generated_sources}\n    COMMAND_EXPAND_LISTS\n    COMMAND\n      \"${CMAKE_COMMAND}\" -E make_directory \"${output_dir}\"\n    COMMAND\n      \"${FBTHRIFT_COMPILER}\"\n      --legacy-strict\n      --gen \"mstch_cpp2:${GEN_ARG_STR}\"\n      \"${thrift_include_options}\"\n      -I \"${FBTHRIFT_INCLUDE_DIR}\"\n      -o \"${output_dir}\"\n      \"${CMAKE_CURRENT_SOURCE_DIR}/${THRIFT_FILE}\"\n    WORKING_DIRECTORY\n      \"${CMAKE_BINARY_DIR}\"\n    MAIN_DEPENDENCY\n      \"${THRIFT_FILE}\"\n    DEPENDS\n      ${ARG_DEPENDS}\n      \"${FBTHRIFT_COMPILER}\"\n  )\n\n  # Now emit the library rule to compile the sources\n  if (BUILD_SHARED_LIBS)\n    set(LIB_TYPE SHARED)\n  else ()\n    set(LIB_TYPE STATIC)\n  endif ()\n\n  add_library(\n    \"${LIB_NAME}\" ${LIB_TYPE}\n    ${generated_sources}\n  )\n\n  target_include_directories(\n    \"${LIB_NAME}\"\n    PUBLIC\n      \"$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}>\"\n      \"$<INSTALL_INTERFACE:${ARG_INCLUDE_DIR}>\"\n      ${Xxhash_INCLUDE_DIR}\n  )\n  target_link_libraries(\n    \"${LIB_NAME}\"\n    PUBLIC\n      ${ARG_DEPENDS}\n      FBThrift::thriftcpp2\n      Folly::folly\n      mvfst::mvfst_server_async_tran\n      mvfst::mvfst_server\n      ${Xxhash_LIBRARY}\n  )\n\n  # Add ${generated_headers} to the PUBLIC_HEADER property for ${LIB_NAME}\n  #\n  # This allows callers to install it using\n  # \"install(TARGETS ${LIB_NAME} PUBLIC_HEADER)\"\n  # However, note that CMake's PUBLIC_HEADER behavior is rather inflexible,\n  # and does have any way to preserve header directory structure.  Callers\n  # must be careful to use the correct PUBLIC_HEADER DESTINATION parameter\n  # when doing this, to put the files the correct directory themselves.\n  # We define a HEADER_INSTALL_DIR property with the include directory prefix,\n  # so typically callers should specify the PUBLIC_HEADER DESTINATION as\n  # \"$<TARGET_PROPERTY:${LIB_NAME},HEADER_INSTALL_DIR>\"\n  set_property(\n    TARGET \"${LIB_NAME}\"\n    PROPERTY PUBLIC_HEADER ${generated_headers}\n  )\n\n  # Define a dummy interface library to help propagate the thrift include\n  # directories between dependencies.\n  add_library(\"${LIB_NAME}.thrift_includes\" INTERFACE)\n  target_include_directories(\n    \"${LIB_NAME}.thrift_includes\"\n    INTERFACE\n      \"$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>\"\n      \"$<INSTALL_INTERFACE:${ARG_THRIFT_INCLUDE_DIR}>\"\n  )\n  foreach(dep IN LISTS ARG_DEPENDS)\n    target_link_libraries(\n      \"${LIB_NAME}.thrift_includes\"\n      INTERFACE \"${dep}.thrift_includes\"\n    )\n  endforeach()\n\n  set_target_properties(\n    \"${LIB_NAME}\"\n    PROPERTIES\n      EXPORT_PROPERTIES \"THRIFT_INSTALL_DIR\"\n      THRIFT_INSTALL_DIR \"${ARG_THRIFT_INCLUDE_DIR}/${include_prefix}\"\n      HEADER_INSTALL_DIR \"${ARG_INCLUDE_DIR}/${include_prefix}/gen-cpp2\"\n  )\nendfunction()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBThriftLibrary.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n\ninclude(FBCMakeParseArgs)\ninclude(FBThriftPyLibrary)\ninclude(FBThriftCppLibrary)\n\n#\n# add_fbthrift_library()\n#\n# This is a convenience function that generates thrift libraries for multiple\n# languages.\n#\n# For example:\n#   add_fbthrift_library(\n#     foo foo.thrift\n#     LANGUAGES cpp py\n#     SERVICES Foo\n#     DEPENDS bar)\n#\n# will be expanded into two separate calls:\n#\n# add_fbthrift_cpp_library(foo_cpp foo.thrift SERVICES Foo DEPENDS bar_cpp)\n# add_fbthrift_py_library(foo_py foo.thrift SERVICES Foo DEPENDS bar_py)\n#\nfunction(add_fbthrift_library LIB_NAME THRIFT_FILE)\n  # Parse the arguments\n  set(one_value_args PY_NAMESPACE INCLUDE_DIR THRIFT_INCLUDE_DIR)\n  set(multi_value_args SERVICES DEPENDS LANGUAGES CPP_OPTIONS PY_OPTIONS)\n  fb_cmake_parse_args(\n    ARG \"\" \"${one_value_args}\" \"${multi_value_args}\" \"${ARGN}\"\n  )\n\n  if(NOT DEFINED ARG_INCLUDE_DIR)\n    set(ARG_INCLUDE_DIR \"include\")\n  endif()\n  if(NOT DEFINED ARG_THRIFT_INCLUDE_DIR)\n    set(ARG_THRIFT_INCLUDE_DIR \"${ARG_INCLUDE_DIR}/thrift-files\")\n  endif()\n\n  # CMake 3.12+ adds list(TRANSFORM) which would be nice to use here, but for\n  # now we still want to support older versions of CMake.\n  set(CPP_DEPENDS)\n  set(PY_DEPENDS)\n  foreach(dep IN LISTS ARG_DEPENDS)\n    list(APPEND CPP_DEPENDS \"${dep}_cpp\")\n    list(APPEND PY_DEPENDS \"${dep}_py\")\n  endforeach()\n\n  foreach(lang IN LISTS ARG_LANGUAGES)\n    if (\"${lang}\" STREQUAL \"cpp\")\n      add_fbthrift_cpp_library(\n        \"${LIB_NAME}_cpp\" \"${THRIFT_FILE}\"\n        SERVICES ${ARG_SERVICES}\n        DEPENDS ${CPP_DEPENDS}\n        OPTIONS ${ARG_CPP_OPTIONS}\n        INCLUDE_DIR \"${ARG_INCLUDE_DIR}\"\n        THRIFT_INCLUDE_DIR \"${ARG_THRIFT_INCLUDE_DIR}\"\n      )\n    elseif (\"${lang}\" STREQUAL \"py\" OR \"${lang}\" STREQUAL \"python\")\n      if (DEFINED ARG_PY_NAMESPACE)\n        set(namespace_args NAMESPACE \"${ARG_PY_NAMESPACE}\")\n      endif()\n      add_fbthrift_py_library(\n        \"${LIB_NAME}_py\" \"${THRIFT_FILE}\"\n        SERVICES ${ARG_SERVICES}\n        ${namespace_args}\n        DEPENDS ${PY_DEPENDS}\n        OPTIONS ${ARG_PY_OPTIONS}\n        THRIFT_INCLUDE_DIR \"${ARG_THRIFT_INCLUDE_DIR}\"\n      )\n    else()\n      message(\n        FATAL_ERROR \"unknown language for thrift library ${LIB_NAME}: ${lang}\"\n      )\n    endif()\n  endforeach()\nendfunction()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FBThriftPyLibrary.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n\ninclude(FBCMakeParseArgs)\ninclude(FBPythonBinary)\n\n# Generate a Python library from a thrift file\nfunction(add_fbthrift_py_library LIB_NAME THRIFT_FILE)\n  # Parse the arguments\n  set(one_value_args NAMESPACE THRIFT_INCLUDE_DIR)\n  set(multi_value_args SERVICES DEPENDS OPTIONS)\n  fb_cmake_parse_args(\n    ARG \"\" \"${one_value_args}\" \"${multi_value_args}\" \"${ARGN}\"\n  )\n\n  if(NOT DEFINED ARG_THRIFT_INCLUDE_DIR)\n    set(ARG_THRIFT_INCLUDE_DIR \"include/thrift-files\")\n  endif()\n\n  get_filename_component(base ${THRIFT_FILE} NAME_WE)\n  set(output_dir \"${CMAKE_CURRENT_BINARY_DIR}/${THRIFT_FILE}-py\")\n\n  # Parse the namespace value\n  if (NOT DEFINED ARG_NAMESPACE)\n    set(ARG_NAMESPACE \"${base}\")\n  endif()\n\n  string(REPLACE \".\" \"/\" namespace_dir \"${ARG_NAMESPACE}\")\n  set(py_output_dir \"${output_dir}/gen-py/${namespace_dir}\")\n  list(APPEND generated_sources\n    \"${py_output_dir}/__init__.py\"\n    \"${py_output_dir}/ttypes.py\"\n    \"${py_output_dir}/constants.py\"\n  )\n  foreach(service IN LISTS ARG_SERVICES)\n    list(APPEND generated_sources\n      ${py_output_dir}/${service}.py\n    )\n  endforeach()\n\n  # Define a dummy interface library to help propagate the thrift include\n  # directories between dependencies.\n  add_library(\"${LIB_NAME}.thrift_includes\" INTERFACE)\n  target_include_directories(\n    \"${LIB_NAME}.thrift_includes\"\n    INTERFACE\n      \"$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>\"\n      \"$<INSTALL_INTERFACE:${ARG_THRIFT_INCLUDE_DIR}>\"\n  )\n  foreach(dep IN LISTS ARG_DEPENDS)\n    target_link_libraries(\n      \"${LIB_NAME}.thrift_includes\"\n      INTERFACE \"${dep}.thrift_includes\"\n    )\n  endforeach()\n\n  # This generator expression gets the list of include directories required\n  # for all of our dependencies.\n  # It requires using COMMAND_EXPAND_LISTS in the add_custom_command() call\n  # below.  COMMAND_EXPAND_LISTS is only available in CMake 3.8+\n  # If we really had to support older versions of CMake we would probably need\n  # to use a wrapper script around the thrift compiler that could take the\n  # include list as a single argument and split it up before invoking the\n  # thrift compiler.\n  if (NOT POLICY CMP0067)\n    message(FATAL_ERROR \"add_fbthrift_py_library() requires CMake 3.8+\")\n  endif()\n  set(\n    thrift_include_options\n    \"-I;$<JOIN:$<TARGET_PROPERTY:${LIB_NAME}.thrift_includes,INTERFACE_INCLUDE_DIRECTORIES>,;-I;>\"\n  )\n\n  # Always force generation of \"new-style\" python classes for Python 2\n  list(APPEND ARG_OPTIONS \"new_style\")\n  # CMake 3.12 is finally getting a list(JOIN) function, but until then\n  # treating the list as a string and replacing the semicolons is good enough.\n  string(REPLACE \";\" \",\" GEN_ARG_STR \"${ARG_OPTIONS}\")\n\n  # Emit the rule to run the thrift compiler\n  add_custom_command(\n    OUTPUT\n      ${generated_sources}\n    COMMAND_EXPAND_LISTS\n    COMMAND\n      \"${CMAKE_COMMAND}\" -E make_directory \"${output_dir}\"\n    COMMAND\n      \"${FBTHRIFT_COMPILER}\"\n      --legacy-strict\n      --gen \"py:${GEN_ARG_STR}\"\n      \"${thrift_include_options}\"\n      -o \"${output_dir}\"\n      \"${CMAKE_CURRENT_SOURCE_DIR}/${THRIFT_FILE}\"\n    WORKING_DIRECTORY\n      \"${CMAKE_BINARY_DIR}\"\n    MAIN_DEPENDENCY\n      \"${THRIFT_FILE}\"\n    DEPENDS\n      \"${FBTHRIFT_COMPILER}\"\n  )\n\n  # We always want to pass the namespace as \"\" to this call:\n  # thrift will already emit the files with the desired namespace prefix under\n  # gen-py.  We don't want add_fb_python_library() to prepend the namespace a\n  # second time.\n  add_fb_python_library(\n    \"${LIB_NAME}\"\n    BASE_DIR \"${output_dir}/gen-py\"\n    NAMESPACE \"\"\n    SOURCES ${generated_sources}\n    DEPENDS ${ARG_DEPENDS} FBThrift::thrift_py\n  )\nendfunction()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindCares.cmake",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the BSD-style license found in the\n# LICENSE file in the root directory of this source tree.\n\nfind_path(CARES_INCLUDE_DIR NAMES ares.h)\nfind_library(CARES_LIBRARIES NAMES cares)\n\ninclude(FindPackageHandleStandardArgs)\nfind_package_handle_standard_args(Cares DEFAULT_MSG CARES_LIBRARIES CARES_INCLUDE_DIR)\n\nmark_as_advanced(\n  CARES_LIBRARIES\n  CARES_INCLUDE_DIR\n)\n\nif(NOT TARGET cares)\n    if(\"${CARES_LIBRARIES}\" MATCHES \".*.a$\")\n    add_library(cares STATIC IMPORTED)\n    else()\n    add_library(cares SHARED IMPORTED)\n    endif()\n    set_target_properties(\n        cares\n        PROPERTIES\n            IMPORTED_LOCATION ${CARES_LIBRARIES}\n            INTERFACE_INCLUDE_DIRECTORIES ${CARES_INCLUDE_DIR}\n    )\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindDoubleConversion.cmake",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n\n# Finds libdouble-conversion.\n#\n# This module defines:\n# DOUBLE_CONVERSION_INCLUDE_DIR\n# DOUBLE_CONVERSION_LIBRARY\n#\n\nfind_path(DOUBLE_CONVERSION_INCLUDE_DIR double-conversion/double-conversion.h)\nfind_library(DOUBLE_CONVERSION_LIBRARY NAMES double-conversion)\n\ninclude(FindPackageHandleStandardArgs)\nfind_package_handle_standard_args(\n  DoubleConversion\n  DEFAULT_MSG\n  DOUBLE_CONVERSION_LIBRARY DOUBLE_CONVERSION_INCLUDE_DIR)\n\nmark_as_advanced(DOUBLE_CONVERSION_INCLUDE_DIR DOUBLE_CONVERSION_LIBRARY)\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindGMock.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n# Find libgmock\n#\n#  LIBGMOCK_DEFINES     - List of defines when using libgmock.\n#  LIBGMOCK_INCLUDE_DIR - where to find gmock/gmock.h, etc.\n#  LIBGMOCK_LIBRARIES   - List of libraries when using libgmock.\n#  LIBGMOCK_FOUND       - True if libgmock found.\n\nIF (LIBGMOCK_INCLUDE_DIR)\n  # Already in cache, be silent\n  SET(LIBGMOCK_FIND_QUIETLY TRUE)\nENDIF ()\n\nfind_package(GTest CONFIG QUIET)\nif (TARGET GTest::gmock)\n  get_target_property(LIBGMOCK_DEFINES GTest::gtest INTERFACE_COMPILE_DEFINITIONS)\n  if (NOT ${LIBGMOCK_DEFINES})\n    # Explicitly set to empty string if not found to avoid it being\n    # set to NOTFOUND and breaking compilation\n    set(LIBGMOCK_DEFINES \"\")\n  endif()\n  get_target_property(LIBGMOCK_INCLUDE_DIR GTest::gtest INTERFACE_INCLUDE_DIRECTORIES)\n  set(LIBGMOCK_LIBRARIES GTest::gmock_main GTest::gmock GTest::gtest)\n  set(LIBGMOCK_FOUND ON)\n  message(STATUS \"Found gmock via config, defines=${LIBGMOCK_DEFINES}, include=${LIBGMOCK_INCLUDE_DIR}, libs=${LIBGMOCK_LIBRARIES}\")\nelse()\n\n  FIND_PATH(LIBGMOCK_INCLUDE_DIR gmock/gmock.h)\n\n  FIND_LIBRARY(LIBGMOCK_MAIN_LIBRARY_DEBUG NAMES gmock_maind)\n  FIND_LIBRARY(LIBGMOCK_MAIN_LIBRARY_RELEASE NAMES gmock_main)\n  FIND_LIBRARY(LIBGMOCK_LIBRARY_DEBUG NAMES gmockd)\n  FIND_LIBRARY(LIBGMOCK_LIBRARY_RELEASE NAMES gmock)\n  FIND_LIBRARY(LIBGTEST_LIBRARY_DEBUG NAMES gtestd)\n  FIND_LIBRARY(LIBGTEST_LIBRARY_RELEASE NAMES gtest)\n\n  find_package(Threads REQUIRED)\n  INCLUDE(SelectLibraryConfigurations)\n  SELECT_LIBRARY_CONFIGURATIONS(LIBGMOCK_MAIN)\n  SELECT_LIBRARY_CONFIGURATIONS(LIBGMOCK)\n  SELECT_LIBRARY_CONFIGURATIONS(LIBGTEST)\n\n  set(LIBGMOCK_LIBRARIES\n    ${LIBGMOCK_MAIN_LIBRARY}\n    ${LIBGMOCK_LIBRARY}\n    ${LIBGTEST_LIBRARY}\n    Threads::Threads\n  )\n\n  if(CMAKE_SYSTEM_NAME STREQUAL \"Windows\")\n    # The GTEST_LINKED_AS_SHARED_LIBRARY macro must be set properly on Windows.\n    #\n    # There isn't currently an easy way to determine if a library was compiled as\n    # a shared library on Windows, so just assume we've been built against a\n    # shared build of gmock for now.\n    SET(LIBGMOCK_DEFINES \"GTEST_LINKED_AS_SHARED_LIBRARY=1\" CACHE STRING \"\")\n  endif()\n\n  # handle the QUIETLY and REQUIRED arguments and set LIBGMOCK_FOUND to TRUE if\n  # all listed variables are TRUE\n  INCLUDE(FindPackageHandleStandardArgs)\n  FIND_PACKAGE_HANDLE_STANDARD_ARGS(\n    GMock\n    DEFAULT_MSG\n    LIBGMOCK_MAIN_LIBRARY\n    LIBGMOCK_LIBRARY\n    LIBGTEST_LIBRARY\n    LIBGMOCK_LIBRARIES\n    LIBGMOCK_INCLUDE_DIR\n  )\n\n  MARK_AS_ADVANCED(\n    LIBGMOCK_DEFINES\n    LIBGMOCK_MAIN_LIBRARY\n    LIBGMOCK_LIBRARY\n    LIBGTEST_LIBRARY\n    LIBGMOCK_LIBRARIES\n    LIBGMOCK_INCLUDE_DIR\n  )\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindGflags.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n# Find libgflags.\n# There's a lot of compatibility cruft going on in here, both\n# to deal with changes across the FB consumers of this and also\n# to deal with variances in behavior of cmake itself.\n#\n# Since this file is named FindGflags.cmake the cmake convention\n# is for the module to export both GFLAGS_FOUND and Gflags_FOUND.\n# The convention expected by consumers is that we export the\n# following variables, even though these do not match the cmake\n# conventions:\n#\n#  LIBGFLAGS_INCLUDE_DIR - where to find gflags/gflags.h, etc.\n#  LIBGFLAGS_LIBRARY     - List of libraries when using libgflags.\n#  LIBGFLAGS_FOUND       - True if libgflags found.\n#\n# We need to be able to locate gflags both from an installed\n# cmake config file and just from the raw headers and libs, so\n# test for the former and then the latter, and then stick\n# the results together and export them into the variables\n# listed above.\n#\n# For forwards compatibility, we export the following variables:\n#\n#  gflags_INCLUDE_DIR - where to find gflags/gflags.h, etc.\n#  gflags_TARGET / GFLAGS_TARGET / gflags_LIBRARIES\n#                     - List of libraries when using libgflags.\n#  gflags_FOUND       - True if libgflags found.\n#\n\nIF (LIBGFLAGS_INCLUDE_DIR)\n  # Already in cache, be silent\n  SET(Gflags_FIND_QUIETLY TRUE)\nENDIF ()\n\nfind_package(gflags CONFIG QUIET)\nif (gflags_FOUND)\n  if (NOT Gflags_FIND_QUIETLY)\n    message(STATUS \"Found gflags from package config ${gflags_CONFIG}\")\n  endif()\n  # Re-export the config-specified libs with our local names\n  set(LIBGFLAGS_LIBRARY ${gflags_LIBRARIES})\n  set(LIBGFLAGS_INCLUDE_DIR ${gflags_INCLUDE_DIR})\n  if(NOT EXISTS \"${gflags_INCLUDE_DIR}\")\n    # The gflags-devel RPM on recent RedHat-based systems is somewhat broken.\n    # RedHat symlinks /lib64 to /usr/lib64, and this breaks some of the\n    # relative path computation performed in gflags-config.cmake.  The package\n    # config file ends up being found via /lib64, but the relative path\n    # computation it does only works if it was found in /usr/lib64.\n    # If gflags_INCLUDE_DIR does not actually exist, simply default it to\n    # /usr/include on these systems.\n    set(LIBGFLAGS_INCLUDE_DIR \"/usr/include\")\n    set(GFLAGS_INCLUDE_DIR \"/usr/include\")\n  endif()\n  set(LIBGFLAGS_FOUND ${gflags_FOUND})\n  # cmake module compat\n  set(GFLAGS_FOUND ${gflags_FOUND})\n  set(Gflags_FOUND ${gflags_FOUND})\nelse()\n  FIND_PATH(LIBGFLAGS_INCLUDE_DIR gflags/gflags.h)\n\n  FIND_LIBRARY(LIBGFLAGS_LIBRARY_DEBUG NAMES gflagsd gflags_staticd)\n  FIND_LIBRARY(LIBGFLAGS_LIBRARY_RELEASE NAMES gflags gflags_static)\n\n  INCLUDE(SelectLibraryConfigurations)\n  SELECT_LIBRARY_CONFIGURATIONS(LIBGFLAGS)\n\n  # handle the QUIETLY and REQUIRED arguments and set LIBGFLAGS_FOUND to TRUE if\n  # all listed variables are TRUE\n  INCLUDE(FindPackageHandleStandardArgs)\n  FIND_PACKAGE_HANDLE_STANDARD_ARGS(gflags DEFAULT_MSG LIBGFLAGS_LIBRARY LIBGFLAGS_INCLUDE_DIR)\n  # cmake module compat\n  set(Gflags_FOUND ${GFLAGS_FOUND})\n  # compat with some existing FindGflags consumers\n  set(LIBGFLAGS_FOUND ${GFLAGS_FOUND})\n\n  # Compat with the gflags CONFIG based detection\n  set(gflags_FOUND ${GFLAGS_FOUND})\n  set(gflags_INCLUDE_DIR ${LIBGFLAGS_INCLUDE_DIR})\n  set(gflags_LIBRARIES ${LIBGFLAGS_LIBRARY})\n  set(GFLAGS_TARGET ${LIBGFLAGS_LIBRARY})\n  set(gflags_TARGET ${LIBGFLAGS_LIBRARY})\n\n  MARK_AS_ADVANCED(LIBGFLAGS_LIBRARY LIBGFLAGS_INCLUDE_DIR)\nendif()\n\n# Compat with the gflags CONFIG based detection\nif (LIBGFLAGS_FOUND AND NOT TARGET gflags)\n  add_library(gflags UNKNOWN IMPORTED)\n  if(TARGET gflags-shared)\n    # If the installed gflags CMake package config defines a gflags-shared\n    # target but not gflags, just make the gflags target that we define\n    # depend on the gflags-shared target.\n    target_link_libraries(gflags INTERFACE gflags-shared)\n    # Export LIBGFLAGS_LIBRARY as the gflags-shared target in this case.\n    set(LIBGFLAGS_LIBRARY gflags-shared)\n  else()\n    set_target_properties(\n      gflags\n      PROPERTIES\n        IMPORTED_LINK_INTERFACE_LANGUAGES \"C\"\n        IMPORTED_LOCATION \"${LIBGFLAGS_LIBRARY}\"\n        INTERFACE_INCLUDE_DIRECTORIES \"${LIBGFLAGS_INCLUDE_DIR}\"\n    )\n  endif()\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindGlog.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n# - Try to find Glog\n# Once done, this will define\n#\n# GLOG_FOUND - system has Glog\n# GLOG_INCLUDE_DIRS - the Glog include directories\n# GLOG_LIBRARIES - link these to use Glog\n\ninclude(FindPackageHandleStandardArgs)\ninclude(SelectLibraryConfigurations)\n\nfind_library(GLOG_LIBRARY_RELEASE glog\n  PATHS ${GLOG_LIBRARYDIR})\nfind_library(GLOG_LIBRARY_DEBUG glogd\n  PATHS ${GLOG_LIBRARYDIR})\n\nfind_path(GLOG_INCLUDE_DIR glog/logging.h\n  PATHS ${GLOG_INCLUDEDIR})\n\nselect_library_configurations(GLOG)\n\nfind_package_handle_standard_args(Glog DEFAULT_MSG\n  GLOG_LIBRARY\n  GLOG_INCLUDE_DIR)\n\nmark_as_advanced(\n  GLOG_LIBRARY\n  GLOG_INCLUDE_DIR)\n\nset(GLOG_LIBRARIES ${GLOG_LIBRARY})\nset(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})\n\nif (NOT TARGET glog::glog)\n  add_library(glog::glog UNKNOWN IMPORTED)\n  set_target_properties(glog::glog PROPERTIES INTERFACE_INCLUDE_DIRECTORIES \"${GLOG_INCLUDE_DIRS}\")\n  set_target_properties(glog::glog PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES \"C\" IMPORTED_LOCATION \"${GLOG_LIBRARIES}\")\n  set_target_properties(glog::glog PROPERTIES\n    INTERFACE_COMPILE_DEFINITIONS \"GLOG_USE_GLOG_EXPORT\")\n\n  find_package(Gflags)\n  if(GFLAGS_FOUND)\n    message(STATUS \"Found gflags as a dependency of glog::glog, include=${LIBGFLAGS_INCLUDE_DIR}, libs=${LIBGFLAGS_LIBRARY}\")\n    set_property(TARGET glog::glog APPEND PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES ${LIBGFLAGS_LIBRARY})\n  endif()\n\n  find_package(LibUnwind)\n  if(LIBUNWIND_FOUND)\n    message(STATUS \"Found LibUnwind as a dependency of glog::glog, include=${LIBUNWIND_INCLUDE_DIR}, libs=${LIBUNWIND_LIBRARY}\")\n    set_property(TARGET glog::glog APPEND PROPERTY IMPORTED_LINK_INTERFACE_LIBRARIES ${LIBUNWIND_LIBRARY})\n  endif()\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindLMDB.cmake",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This software may be used and distributed according to the terms of the\n# GNU General Public License version 2.\n\nfind_library(LMDB_LIBRARIES NAMES lmdb liblmdb)\nmark_as_advanced(LMDB_LIBRARIES)\n\nfind_path(LMDB_INCLUDE_DIR NAMES  lmdb.h)\nmark_as_advanced(LMDB_INCLUDE_DIR)\n\nfind_package_handle_standard_args(\n     LMDB\n     REQUIRED_VARS LMDB_LIBRARIES LMDB_INCLUDE_DIR)\n\nif(LMDB_FOUND)\n  set(LMDB_LIBRARIES ${LMDB_LIBRARIES})\n  set(LMDB_INCLUDE_DIR, ${LMDB_INCLUDE_DIR})\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindLibEvent.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n# - Find LibEvent (a cross event library)\n# This module defines\n# LIBEVENT_INCLUDE_DIR, where to find LibEvent headers\n# LIBEVENT_LIB, LibEvent libraries\n# LibEvent_FOUND, If false, do not try to use libevent\n\nset(LibEvent_EXTRA_PREFIXES /usr/local /opt/local \"$ENV{HOME}\")\nforeach(prefix ${LibEvent_EXTRA_PREFIXES})\n  list(APPEND LibEvent_INCLUDE_PATHS \"${prefix}/include\")\n  list(APPEND LibEvent_LIB_PATHS \"${prefix}/lib\")\nendforeach()\n\nfind_package(Libevent CONFIG QUIET)\nif (TARGET event)\n  # Re-export the config under our own names\n\n  # Somewhat gross, but some vcpkg installed libevents have a relative\n  # `include` path exported into LIBEVENT_INCLUDE_DIRS, which triggers\n  # a cmake error because it resolves to the `include` dir within the\n  # folly repo, which is not something cmake allows to be in the\n  # INTERFACE_INCLUDE_DIRECTORIES.  Thankfully on such a system the\n  # actual include directory is already part of the global include\n  # directories, so we can just skip it.\n  if (NOT \"${LIBEVENT_INCLUDE_DIRS}\" STREQUAL \"include\")\n    set(LIBEVENT_INCLUDE_DIR ${LIBEVENT_INCLUDE_DIRS})\n  else()\n    set(LIBEVENT_INCLUDE_DIR)\n  endif()\n\n  # Unfortunately, with a bare target name `event`, downstream consumers\n  # of the package that depends on `Libevent` located via CONFIG end\n  # up exporting just a bare `event` in their libraries.  This is problematic\n  # because this in interpreted as just `-levent` with no library path.\n  # When libevent is not installed in the default installation prefix\n  # this results in linker errors.\n  # To resolve this, we ask cmake to lookup the full path to the library\n  # and use that instead.\n  cmake_policy(PUSH)\n  if(POLICY CMP0026)\n    # Allow reading the LOCATION property\n    cmake_policy(SET CMP0026 OLD)\n  endif()\n  get_target_property(LIBEVENT_LIB event LOCATION)\n  cmake_policy(POP)\n\n  set(LibEvent_FOUND ${Libevent_FOUND})\n  if (NOT LibEvent_FIND_QUIETLY)\n    message(STATUS \"Found libevent from package config include=${LIBEVENT_INCLUDE_DIRS} lib=${LIBEVENT_LIB}\")\n  endif()\nelse()\n  find_path(LIBEVENT_INCLUDE_DIR event.h PATHS ${LibEvent_INCLUDE_PATHS})\n  find_library(LIBEVENT_LIB NAMES event PATHS ${LibEvent_LIB_PATHS})\n\n  if (LIBEVENT_LIB AND LIBEVENT_INCLUDE_DIR)\n    set(LibEvent_FOUND TRUE)\n    set(LIBEVENT_LIB ${LIBEVENT_LIB})\n  else ()\n    set(LibEvent_FOUND FALSE)\n  endif ()\n\n  if (LibEvent_FOUND)\n    if (NOT LibEvent_FIND_QUIETLY)\n      message(STATUS \"Found libevent: ${LIBEVENT_LIB}\")\n    endif ()\n  else ()\n    if (LibEvent_FIND_REQUIRED)\n      message(FATAL_ERROR \"Could NOT find libevent.\")\n    endif ()\n    message(STATUS \"libevent NOT found.\")\n  endif ()\n\n  mark_as_advanced(\n    LIBEVENT_LIB\n    LIBEVENT_INCLUDE_DIR\n  )\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindLibUnwind.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\ninclude(FindPackageHandleStandardArgs)\n\n# Prefer pkg-config: picks up transitive deps (e.g. lzma, zlib) that\n# static libunwind needs but a bare find_library would miss.\nfind_package(PkgConfig QUIET)\nif(PKG_CONFIG_FOUND)\n  pkg_check_modules(PC_LIBUNWIND QUIET libunwind)\nendif()\n\nif(PC_LIBUNWIND_FOUND)\n  find_path(LIBUNWIND_INCLUDE_DIR NAMES libunwind.h\n    HINTS ${PC_LIBUNWIND_INCLUDE_DIRS}\n    PATH_SUFFIXES libunwind)\n  mark_as_advanced(LIBUNWIND_INCLUDE_DIR)\n\n  # Resolve each library from the static set (Libs + Libs.private) to a\n  # full path.  This gives the linker everything it needs for a fully-static\n  # link without leaking imported targets through cmake exports.\n  set(LIBUNWIND_LIBRARIES \"\")\n  foreach(_lib IN LISTS PC_LIBUNWIND_STATIC_LIBRARIES)\n    find_library(_libunwind_dep_${_lib} NAMES ${_lib}\n      HINTS ${PC_LIBUNWIND_STATIC_LIBRARY_DIRS})\n    if(_libunwind_dep_${_lib})\n      list(APPEND LIBUNWIND_LIBRARIES ${_libunwind_dep_${_lib}})\n    else()\n      # Fall back to bare name; the linker will resolve -l<name>.\n      list(APPEND LIBUNWIND_LIBRARIES ${_lib})\n    endif()\n    unset(_libunwind_dep_${_lib} CACHE)\n  endforeach()\n  set(LIBUNWIND_LIBRARY \"${LIBUNWIND_LIBRARIES}\")\n\n  FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibUnwind\n    REQUIRED_VARS LIBUNWIND_LIBRARIES LIBUNWIND_INCLUDE_DIR)\nelse()\n  # Fallback for systems without pkg-config.\n  # When using prepackaged LLVM libunwind on Ubuntu, its includes are\n  # installed in a subdirectory.\n  find_path(LIBUNWIND_INCLUDE_DIR NAMES libunwind.h PATH_SUFFIXES libunwind)\n  mark_as_advanced(LIBUNWIND_INCLUDE_DIR)\n\n  find_library(LIBUNWIND_LIBRARY NAMES unwind)\n  mark_as_advanced(LIBUNWIND_LIBRARY)\n\n  FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibUnwind\n    REQUIRED_VARS LIBUNWIND_LIBRARY LIBUNWIND_INCLUDE_DIR)\nendif()\n\nif(LibUnwind_FOUND)\n  if(NOT LIBUNWIND_LIBRARIES)\n    set(LIBUNWIND_LIBRARIES ${LIBUNWIND_LIBRARY})\n  endif()\n  set(LIBUNWIND_INCLUDE_DIRS ${LIBUNWIND_INCLUDE_DIR})\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindLibiberty.cmake",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfind_path(LIBIBERTY_INCLUDE_DIR NAMES libiberty.h PATH_SUFFIXES libiberty)\nmark_as_advanced(LIBIBERTY_INCLUDE_DIR)\n\nfind_library(LIBIBERTY_LIBRARY NAMES iberty)\nmark_as_advanced(LIBIBERTY_LIBRARY)\n\ninclude(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(\n  LIBIBERTY\n  REQUIRED_VARS LIBIBERTY_LIBRARY LIBIBERTY_INCLUDE_DIR)\n\nif(LIBIBERTY_FOUND)\n  set(LIBIBERTY_LIBRARIES ${LIBIBERTY_LIBRARY})\n  set(LIBIBERTY_INCLUDE_DIRS ${LIBIBERTY_INCLUDE_DIR})\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindPCRE.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\ninclude(FindPackageHandleStandardArgs)\nfind_path(PCRE_INCLUDE_DIR NAMES pcre.h)\nfind_library(PCRE_LIBRARY NAMES pcre)\nfind_package_handle_standard_args(\n  PCRE\n  DEFAULT_MSG\n  PCRE_LIBRARY\n  PCRE_INCLUDE_DIR\n)\nmark_as_advanced(PCRE_INCLUDE_DIR PCRE_LIBRARY)\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindPCRE2.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\ninclude(FindPackageHandleStandardArgs)\nfind_path(PCRE2_INCLUDE_DIR NAMES pcre2.h)\nfind_library(PCRE2_LIBRARY NAMES pcre2-8)\nfind_package_handle_standard_args(\n  PCRE2\n  DEFAULT_MSG\n  PCRE2_LIBRARY\n  PCRE2_INCLUDE_DIR\n)\nset(PCRE2_DEFINES \"PCRE2_CODE_UNIT_WIDTH=8\")\nmark_as_advanced(PCRE2_INCLUDE_DIR PCRE2_LIBRARY PCRE2_DEFINES)\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindRe2.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n#\n# This software may be used and distributed according to the terms of the\n# GNU General Public License version 2.\n\nfind_library(RE2_LIBRARY re2)\nmark_as_advanced(RE2_LIBRARY)\n\nfind_path(RE2_INCLUDE_DIR NAMES re2/re2.h)\nmark_as_advanced(RE2_INCLUDE_DIR)\n\ninclude(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(\n     RE2\n     REQUIRED_VARS RE2_LIBRARY RE2_INCLUDE_DIR)\n\nif(RE2_FOUND)\n  set(RE2_LIBRARY ${RE2_LIBRARY})\n  set(RE2_INCLUDE_DIR, ${RE2_INCLUDE_DIR})\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindSodium.cmake",
    "content": "# Written in 2016 by Henrik Steffen Gaßmann <henrik@gassmann.onl>\n#\n# To the extent possible under law, the author(s) have dedicated all\n# copyright and related and neighboring rights to this software to the\n# public domain worldwide. This software is distributed without any warranty.\n#\n# You should have received a copy of the CC0 Public Domain Dedication\n# along with this software. If not, see\n#\n#     http://creativecommons.org/publicdomain/zero/1.0/\n#\n########################################################################\n# Tries to find the local libsodium installation.\n#\n# On Windows the sodium_DIR environment variable is used as a default\n# hint which can be overridden by setting the corresponding cmake variable.\n#\n# Once done the following variables will be defined:\n#\n#   sodium_FOUND\n#   sodium_INCLUDE_DIR\n#   sodium_LIBRARY_DEBUG\n#   sodium_LIBRARY_RELEASE\n#\n#\n# Furthermore an imported \"sodium\" target is created.\n#\n\nif (CMAKE_C_COMPILER_ID STREQUAL \"GNU\"\n    OR CMAKE_C_COMPILER_ID STREQUAL \"Clang\")\n    set(_GCC_COMPATIBLE 1)\nendif()\n\n# static library option\nif (NOT DEFINED sodium_USE_STATIC_LIBS)\n    option(sodium_USE_STATIC_LIBS \"enable to statically link against sodium\" OFF)\nendif()\nif(NOT (sodium_USE_STATIC_LIBS EQUAL sodium_USE_STATIC_LIBS_LAST))\n    unset(sodium_LIBRARY CACHE)\n    unset(sodium_LIBRARY_DEBUG CACHE)\n    unset(sodium_LIBRARY_RELEASE CACHE)\n    unset(sodium_DLL_DEBUG CACHE)\n    unset(sodium_DLL_RELEASE CACHE)\n    set(sodium_USE_STATIC_LIBS_LAST ${sodium_USE_STATIC_LIBS} CACHE INTERNAL \"internal change tracking variable\")\nendif()\n\n\n########################################################################\n# UNIX\nif (UNIX)\n    # import pkg-config\n    find_package(PkgConfig QUIET)\n    if (PKG_CONFIG_FOUND)\n        pkg_check_modules(sodium_PKG QUIET libsodium)\n    endif()\n\n    if(sodium_USE_STATIC_LIBS)\n        foreach(_libname ${sodium_PKG_STATIC_LIBRARIES})\n            if (NOT _libname MATCHES \"^lib.*\\\\.a$\") # ignore strings already ending with .a\n                list(INSERT sodium_PKG_STATIC_LIBRARIES 0 \"lib${_libname}.a\")\n            endif()\n        endforeach()\n        list(REMOVE_DUPLICATES sodium_PKG_STATIC_LIBRARIES)\n\n        # if pkgconfig for libsodium doesn't provide\n        # static lib info, then override PKG_STATIC here..\n        if (NOT sodium_PKG_STATIC_FOUND)\n            set(sodium_PKG_STATIC_LIBRARIES libsodium.a)\n        endif()\n\n        set(XPREFIX sodium_PKG_STATIC)\n    else()\n        if (NOT sodium_PKG_FOUND)\n            set(sodium_PKG_LIBRARIES sodium)\n        endif()\n\n        set(XPREFIX sodium_PKG)\n    endif()\n\n    find_path(sodium_INCLUDE_DIR sodium.h\n        HINTS ${${XPREFIX}_INCLUDE_DIRS}\n    )\n    find_library(sodium_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES}\n        HINTS ${${XPREFIX}_LIBRARY_DIRS}\n    )\n    find_library(sodium_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES}\n        HINTS ${${XPREFIX}_LIBRARY_DIRS}\n    )\n\n\n########################################################################\n# Windows\nelseif (WIN32)\n    set(sodium_DIR \"$ENV{sodium_DIR}\" CACHE FILEPATH \"sodium install directory\")\n    mark_as_advanced(sodium_DIR)\n\n    find_path(sodium_INCLUDE_DIR sodium.h\n        HINTS ${sodium_DIR}\n        PATH_SUFFIXES include\n    )\n\n    if (MSVC)\n        # detect target architecture\n        file(WRITE \"${CMAKE_CURRENT_BINARY_DIR}/arch.cpp\" [=[\n            #if defined _M_IX86\n            #error ARCH_VALUE x86_32\n            #elif defined _M_X64\n            #error ARCH_VALUE x86_64\n            #endif\n            #error ARCH_VALUE unknown\n        ]=])\n        try_compile(_UNUSED_VAR \"${CMAKE_CURRENT_BINARY_DIR}\" \"${CMAKE_CURRENT_BINARY_DIR}/arch.cpp\"\n            OUTPUT_VARIABLE _COMPILATION_LOG\n        )\n        string(REGEX REPLACE \".*ARCH_VALUE ([a-zA-Z0-9_]+).*\" \"\\\\1\" _TARGET_ARCH \"${_COMPILATION_LOG}\")\n\n        # construct library path\n        if (_TARGET_ARCH STREQUAL \"x86_32\")\n            string(APPEND _PLATFORM_PATH \"Win32\")\n        elseif(_TARGET_ARCH STREQUAL \"x86_64\")\n            string(APPEND _PLATFORM_PATH \"x64\")\n        else()\n            message(FATAL_ERROR \"the ${_TARGET_ARCH} architecture is not supported by Findsodium.cmake.\")\n        endif()\n        string(APPEND _PLATFORM_PATH \"/$$CONFIG$$\")\n\n        if (MSVC_VERSION LESS 1900)\n            math(EXPR _VS_VERSION \"${MSVC_VERSION} / 10 - 60\")\n        else()\n            math(EXPR _VS_VERSION \"${MSVC_VERSION} / 10 - 50\")\n        endif()\n        string(APPEND _PLATFORM_PATH \"/v${_VS_VERSION}\")\n\n        if (sodium_USE_STATIC_LIBS)\n            string(APPEND _PLATFORM_PATH \"/static\")\n        else()\n            string(APPEND _PLATFORM_PATH \"/dynamic\")\n        endif()\n\n        string(REPLACE \"$$CONFIG$$\" \"Debug\" _DEBUG_PATH_SUFFIX \"${_PLATFORM_PATH}\")\n        string(REPLACE \"$$CONFIG$$\" \"Release\" _RELEASE_PATH_SUFFIX \"${_PLATFORM_PATH}\")\n\n        find_library(sodium_LIBRARY_DEBUG libsodium.lib\n            HINTS ${sodium_DIR}\n            PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}\n        )\n        find_library(sodium_LIBRARY_RELEASE libsodium.lib\n            HINTS ${sodium_DIR}\n            PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}\n        )\n        if (NOT sodium_USE_STATIC_LIBS)\n            set(CMAKE_FIND_LIBRARY_SUFFIXES_BCK ${CMAKE_FIND_LIBRARY_SUFFIXES})\n            set(CMAKE_FIND_LIBRARY_SUFFIXES \".dll\")\n            find_library(sodium_DLL_DEBUG libsodium\n                HINTS ${sodium_DIR}\n                PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}\n            )\n            find_library(sodium_DLL_RELEASE libsodium\n                HINTS ${sodium_DIR}\n                PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}\n            )\n            set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_BCK})\n        endif()\n\n    elseif(_GCC_COMPATIBLE)\n        if (sodium_USE_STATIC_LIBS)\n            find_library(sodium_LIBRARY_DEBUG libsodium.a\n                HINTS ${sodium_DIR}\n                PATH_SUFFIXES lib\n            )\n            find_library(sodium_LIBRARY_RELEASE libsodium.a\n                HINTS ${sodium_DIR}\n                PATH_SUFFIXES lib\n            )\n        else()\n            find_library(sodium_LIBRARY_DEBUG libsodium.dll.a\n                HINTS ${sodium_DIR}\n                PATH_SUFFIXES lib\n            )\n            find_library(sodium_LIBRARY_RELEASE libsodium.dll.a\n                HINTS ${sodium_DIR}\n                PATH_SUFFIXES lib\n            )\n\n            file(GLOB _DLL\n                LIST_DIRECTORIES false\n                RELATIVE \"${sodium_DIR}/bin\"\n                \"${sodium_DIR}/bin/libsodium*.dll\"\n            )\n            find_library(sodium_DLL_DEBUG ${_DLL} libsodium\n                HINTS ${sodium_DIR}\n                PATH_SUFFIXES bin\n            )\n            find_library(sodium_DLL_RELEASE ${_DLL} libsodium\n                HINTS ${sodium_DIR}\n                PATH_SUFFIXES bin\n            )\n        endif()\n    else()\n        message(FATAL_ERROR \"this platform is not supported by FindSodium.cmake\")\n    endif()\n\n\n########################################################################\n# unsupported\nelse()\n    message(FATAL_ERROR \"this platform is not supported by FindSodium.cmake\")\nendif()\n\n\n########################################################################\n# common stuff\n\n# extract sodium version\nif (sodium_INCLUDE_DIR)\n    set(_VERSION_HEADER \"${_INCLUDE_DIR}/sodium/version.h\")\n    if (EXISTS _VERSION_HEADER)\n        file(READ \"${_VERSION_HEADER}\" _VERSION_HEADER_CONTENT)\n        string(REGEX REPLACE \".*#[ \\t]*define[ \\t]*SODIUM_VERSION_STRING[ \\t]*\\\"([^\\n]*)\\\".*\" \"\\\\1\"\n            sodium_VERSION \"${_VERSION_HEADER_CONTENT}\")\n        set(sodium_VERSION \"${sodium_VERSION}\" PARENT_SCOPE)\n    endif()\nendif()\n\n# communicate results\ninclude(FindPackageHandleStandardArgs)\nfind_package_handle_standard_args(\n    Sodium # The name must be either uppercase or match the filename case.\n    REQUIRED_VARS\n        sodium_LIBRARY_RELEASE\n        sodium_LIBRARY_DEBUG\n        sodium_INCLUDE_DIR\n    VERSION_VAR\n        sodium_VERSION\n)\n\nif(Sodium_FOUND)\n    set(sodium_LIBRARIES\n        optimized ${sodium_LIBRARY_RELEASE} debug ${sodium_LIBRARY_DEBUG})\nendif()\n\n# mark file paths as advanced\nmark_as_advanced(sodium_INCLUDE_DIR)\nmark_as_advanced(sodium_LIBRARY_DEBUG)\nmark_as_advanced(sodium_LIBRARY_RELEASE)\nif (WIN32)\n    mark_as_advanced(sodium_DLL_DEBUG)\n    mark_as_advanced(sodium_DLL_RELEASE)\nendif()\n\n# create imported target\nif(sodium_USE_STATIC_LIBS)\n    set(_LIB_TYPE STATIC)\nelse()\n    set(_LIB_TYPE SHARED)\nendif()\n\nif(NOT TARGET sodium)\n    add_library(sodium ${_LIB_TYPE} IMPORTED)\nendif()\n\nset_target_properties(sodium PROPERTIES\n    INTERFACE_INCLUDE_DIRECTORIES \"${sodium_INCLUDE_DIR}\"\n    IMPORTED_LINK_INTERFACE_LANGUAGES \"C\"\n)\n\nif (sodium_USE_STATIC_LIBS)\n    set_target_properties(sodium PROPERTIES\n        INTERFACE_COMPILE_DEFINITIONS \"SODIUM_STATIC\"\n        IMPORTED_LOCATION \"${sodium_LIBRARY_RELEASE}\"\n        IMPORTED_LOCATION_DEBUG \"${sodium_LIBRARY_DEBUG}\"\n    )\nelse()\n    if (UNIX)\n        set_target_properties(sodium PROPERTIES\n            IMPORTED_LOCATION \"${sodium_LIBRARY_RELEASE}\"\n            IMPORTED_LOCATION_DEBUG \"${sodium_LIBRARY_DEBUG}\"\n        )\n    elseif (WIN32)\n        set_target_properties(sodium PROPERTIES\n            IMPORTED_IMPLIB \"${sodium_LIBRARY_RELEASE}\"\n            IMPORTED_IMPLIB_DEBUG \"${sodium_LIBRARY_DEBUG}\"\n        )\n        if (NOT (sodium_DLL_DEBUG MATCHES \".*-NOTFOUND\"))\n            set_target_properties(sodium PROPERTIES\n                IMPORTED_LOCATION_DEBUG \"${sodium_DLL_DEBUG}\"\n            )\n        endif()\n        if (NOT (sodium_DLL_RELEASE MATCHES \".*-NOTFOUND\"))\n            set_target_properties(sodium PROPERTIES\n                IMPORTED_LOCATION_RELWITHDEBINFO \"${sodium_DLL_RELEASE}\"\n                IMPORTED_LOCATION_MINSIZEREL \"${sodium_DLL_RELEASE}\"\n                IMPORTED_LOCATION_RELEASE \"${sodium_DLL_RELEASE}\"\n            )\n        endif()\n    endif()\nendif()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindXxhash.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#\n# - Try to find Facebook xxhash library\n# This will define\n# Xxhash_FOUND\n# Xxhash_INCLUDE_DIR\n# Xxhash_LIBRARY\n#\n\nfind_path(Xxhash_INCLUDE_DIR NAMES xxhash.h)\n\nfind_library(Xxhash_LIBRARY_RELEASE NAMES xxhash)\n\ninclude(SelectLibraryConfigurations)\nSELECT_LIBRARY_CONFIGURATIONS(Xxhash)\n\ninclude(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(\n    Xxhash DEFAULT_MSG\n    Xxhash_LIBRARY Xxhash_INCLUDE_DIR\n)\n\nif (Xxhash_FOUND)\n  message(STATUS \"Found xxhash: ${Xxhash_LIBRARY}\")\nendif()\n\nmark_as_advanced(Xxhash_INCLUDE_DIR Xxhash_LIBRARY)\n"
  },
  {
    "path": "build/fbcode_builder/CMake/FindZstd.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n#\n# - Try to find Facebook zstd library\n# This will define\n# ZSTD_FOUND\n# ZSTD_INCLUDE_DIR\n# ZSTD_LIBRARY\n#\n\nfind_path(ZSTD_INCLUDE_DIR NAMES zstd.h)\n\nfind_library(ZSTD_LIBRARY_DEBUG NAMES zstdd zstd_staticd)\nfind_library(ZSTD_LIBRARY_RELEASE NAMES zstd zstd_static)\n\ninclude(SelectLibraryConfigurations)\nSELECT_LIBRARY_CONFIGURATIONS(ZSTD)\n\ninclude(FindPackageHandleStandardArgs)\nFIND_PACKAGE_HANDLE_STANDARD_ARGS(\n    Zstd DEFAULT_MSG\n    ZSTD_LIBRARY ZSTD_INCLUDE_DIR\n)\n\nif (ZSTD_FOUND)\n    message(STATUS \"Found Zstd: ${ZSTD_LIBRARY}\")\nendif()\n\nmark_as_advanced(ZSTD_INCLUDE_DIR ZSTD_LIBRARY)\n"
  },
  {
    "path": "build/fbcode_builder/CMake/Findibverbs.cmake",
    "content": "# Copyright (c) Facebook, Inc. and its affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Find the ibverbs libraries\n#\n# The following variables are optionally searched for defaults\n#  IBVERBS_ROOT_DIR: Base directory where all ibverbs components are found\n#  IBVERBS_INCLUDE_DIR: Directory where ibverbs headers are found\n#  IBVERBS_LIB_DIR: Directory where ibverbs libraries are found\n\n# The following are set after configuration is done:\n#  IBVERBS_FOUND\n#  IBVERBS_INCLUDE_DIRS\n#  IBVERBS_LIBRARIES\n#  IBVERBS_VERSION\n\nfind_path(IBVERBS_INCLUDE_DIRS\n  NAMES infiniband/verbs.h\n  HINTS\n  ${IBVERBS_INCLUDE_DIR}\n  ${IBVERBS_ROOT_DIR}\n  ${IBVERBS_ROOT_DIR}/include)\n\nfind_library(IBVERBS_LIBRARIES\n  NAMES ibverbs\n  HINTS\n  ${IBVERBS_LIB_DIR}\n  ${IBVERBS_ROOT_DIR}\n  ${IBVERBS_ROOT_DIR}/lib)\n\n# Try to determine the rdma-core version\nif(IBVERBS_INCLUDE_DIRS AND IBVERBS_LIBRARIES)\n  # First try using pkg-config if available\n  find_package(PkgConfig QUIET)\n  if(PKG_CONFIG_FOUND)\n    pkg_check_modules(PC_RDMA_CORE QUIET rdma-core)\n    if(PC_RDMA_CORE_VERSION)\n      set(IBVERBS_VERSION ${PC_RDMA_CORE_VERSION})\n    endif()\n  endif()\n\n  # If pkg-config didn't work, try to extract version from library filename\n  # According to rdma-core Documentation/versioning.md:\n  # Library filename format:\n  #   libibverbs.so.SONAME.ABI.PACKAGE_VERSION_MAIN[.PACKAGE_VERSION_BRANCH]\n  # Where:\n  #   - SONAME: Major version (1st field)\n  #   - ABI: ABI version number (2nd field)\n  #   - PACKAGE_VERSION_MAIN: Main package version (3rd field)\n  #   - PACKAGE_VERSION_BRANCH: Optional counter for branched stable\n  #     releases (4th field, part of PACKAGE_VERSION)\n  # Example: libibverbs.so.1.14.57.0 → SONAME=1, ABI=14,\n  #   PACKAGE_VERSION=57.0\n  if(NOT IBVERBS_VERSION)\n    # Get the real path of the library (follows symlinks)\n    get_filename_component(IBVERBS_REAL_PATH \"${IBVERBS_LIBRARIES}\" REALPATH)\n    get_filename_component(IBVERBS_LIB_NAME \"${IBVERBS_REAL_PATH}\" NAME)\n\n    # Extract version from filename\n    if(IBVERBS_LIB_NAME MATCHES\n       \"libibverbs\\\\.so\\\\.([0-9]+)\\\\.([0-9]+)\\\\.([0-9]+)\\\\.([0-9]+)\")\n      # Four-component version: PACKAGE_VERSION_MAIN.PACKAGE_VERSION_BRANCH\n      set(IBVERBS_VERSION_MAJOR ${CMAKE_MATCH_3})\n      set(IBVERBS_VERSION_MINOR ${CMAKE_MATCH_4})\n      set(IBVERBS_VERSION \"${IBVERBS_VERSION_MAJOR}.${IBVERBS_VERSION_MINOR}\")\n    elseif(IBVERBS_LIB_NAME MATCHES\n           \"libibverbs\\\\.so\\\\.([0-9]+)\\\\.([0-9]+)\\\\.([0-9]+)\")\n      # Three-component version: PACKAGE_VERSION_MAIN only\n      set(IBVERBS_VERSION_MAJOR ${CMAKE_MATCH_3})\n      set(IBVERBS_VERSION \"${IBVERBS_VERSION_MAJOR}.0\")\n    else()\n      # If we can't parse the filename, set to empty string\n      # Feature detection will be done in CMakeLists.txt\n      set(IBVERBS_VERSION \"\")\n    endif()\n  endif()\nendif()\n\ninclude(FindPackageHandleStandardArgs)\nfind_package_handle_standard_args(ibverbs\n  REQUIRED_VARS IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES\n  VERSION_VAR IBVERBS_VERSION)\nmark_as_advanced(IBVERBS_INCLUDE_DIRS IBVERBS_LIBRARIES IBVERBS_VERSION)\n"
  },
  {
    "path": "build/fbcode_builder/CMake/RustStaticLibrary.cmake",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n\ninclude(FBCMakeParseArgs)\n\nset(\n  USE_CARGO_VENDOR AUTO CACHE STRING\n  \"Download Rust Crates from an internally vendored location\"\n)\nset_property(CACHE USE_CARGO_VENDOR PROPERTY STRINGS AUTO ON OFF)\n\nset(\n  GENERATE_CARGO_VENDOR_CONFIG AUTO CACHE STRING\n  \"Whether to generate Rust cargo vendor config or use existing\"\n)\nset_property(CACHE GENERATE_CARGO_VENDOR_CONFIG PROPERTY STRINGS AUTO ON OFF)\n\nset(RUST_VENDORED_CRATES_DIR \"$ENV{RUST_VENDORED_CRATES_DIR}\")\n\nif(\"${USE_CARGO_VENDOR}\" STREQUAL \"AUTO\")\n  if(EXISTS \"${RUST_VENDORED_CRATES_DIR}\")\n    set(USE_CARGO_VENDOR ON)\n  else()\n    set(USE_CARGO_VENDOR OFF)\n  endif()\nendif()\n\nif(\"${GENERATE_CARGO_VENDOR_CONFIG}\" STREQUAL \"AUTO\")\n  set(GENERATE_CARGO_VENDOR_CONFIG \"${USE_CARGO_VENDOR}\")\nendif()\n\nif(GENERATE_CARGO_VENDOR_CONFIG)\n  if(NOT EXISTS \"${RUST_VENDORED_CRATES_DIR}\")\n    message(\n      FATAL \"vendored rust crates not present: \"\n      \"${RUST_VENDORED_CRATES_DIR}\"\n    )\n  endif()\n\n  set(RUST_CARGO_HOME \"${CMAKE_BINARY_DIR}/_cargo_home\")\n  file(MAKE_DIRECTORY \"${RUST_CARGO_HOME}\")\n\n  file(\n    TO_NATIVE_PATH \"${RUST_VENDORED_CRATES_DIR}\"\n    ESCAPED_RUST_VENDORED_CRATES_DIR\n  )\n  string(\n    REPLACE \"\\\\\" \"\\\\\\\\\"\n    ESCAPED_RUST_VENDORED_CRATES_DIR\n    \"${ESCAPED_RUST_VENDORED_CRATES_DIR}\"\n  )\n  file(\n    WRITE \"${RUST_CARGO_HOME}/config\"\n    \"[source.crates-io]\\n\"\n    \"replace-with = \\\"vendored-sources\\\"\\n\"\n    \"\\n\"\n    \"[source.vendored-sources]\\n\"\n    \"directory = \\\"${ESCAPED_RUST_VENDORED_CRATES_DIR}\\\"\\n\"\n  )\nendif()\n\nfind_program(CARGO_COMMAND cargo REQUIRED)\n\n# Cargo is a build system in itself, and thus will try to take advantage of all\n# the cores on the system. Unfortunately, this conflicts with Ninja, since it\n# also tries to utilize all the cores. This can lead to a system that is\n# completely overloaded with compile jobs to the point where nothing else can\n# be achieved on the system.\n#\n# Let's inform Ninja of this fact so it won't try to spawn other jobs while\n# Rust being compiled.\nset_property(GLOBAL APPEND PROPERTY JOB_POOLS rust_job_pool=1)\n\n# This function creates an interface library target based on the static library\n# built by Cargo. It will call Cargo to build a staticlib and generate a CMake\n# interface library with it.\n#\n# This function requires `find_package(Python COMPONENTS Interpreter)`.\n#\n# You need to set `lib:crate-type = [\"staticlib\"]` in your Cargo.toml to make\n# Cargo build static library.\n#\n# ```cmake\n# rust_static_library(<TARGET> [CRATE <CRATE_NAME>] [FEATURES <FEATURE_NAME>] [USE_CXX_INCLUDE])\n# ```\n#\n# Parameters:\n# - TARGET:\n#   Name of the target name. This function will create an interface library\n#   target with this name.\n# - CRATE_NAME:\n#   Name of the crate. This parameter is optional. If unspecified, it will\n#   fallback to `${TARGET}`.\n# - FEATURE_NAME:\n#   Name of the Rust feature to enable.\n# - USE_CXX_INCLUDE:\n#   Include cxx.rs include path in `${TARGET}` INTERFACE.\n#\n# This function creates two targets:\n# - \"${TARGET}\": an interface library target contains the static library built\n#   from Cargo.\n# - \"${TARGET}.cargo\": an internal custom target that invokes Cargo.\n#\n# If you are going to use this static library from C/C++, you will need to\n# write header files for the library (or generate with cbindgen) and bind these\n# headers with the interface library.\n#\nfunction(rust_static_library TARGET)\n  fb_cmake_parse_args(ARG \"USE_CXX_INCLUDE\" \"CRATE;FEATURES\" \"\" \"${ARGN}\")\n\n  if(DEFINED ARG_CRATE)\n    set(crate_name \"${ARG_CRATE}\")\n  else()\n    set(crate_name \"${TARGET}\")\n  endif()\n  if(DEFINED ARG_FEATURES)\n    set(features --features ${ARG_FEATURES})\n  else()\n    set(features )\n  endif()\n\n  set(cargo_target \"${TARGET}.cargo\")\n  set(target_dir $<IF:$<CONFIG:Debug>,debug,release>)\n  set(staticlib_name \"${CMAKE_STATIC_LIBRARY_PREFIX}${crate_name}${CMAKE_STATIC_LIBRARY_SUFFIX}\")\n  set(rust_staticlib \"${CMAKE_CURRENT_BINARY_DIR}/${target_dir}/${staticlib_name}\")\n\n  if(DEFINED ARG_FEATURES)\n    set(cargo_flags build $<IF:$<CONFIG:Debug>,,--release> -p ${crate_name} --features ${ARG_FEATURES} --config fbcode_build=false)\n  else()\n    set(cargo_flags build $<IF:$<CONFIG:Debug>,,--release> -p ${crate_name} --config fbcode_build=false)\n  endif()\n  if(USE_CARGO_VENDOR)\n    set(extra_cargo_env \"CARGO_HOME=${RUST_CARGO_HOME}\")\n    set(cargo_flags ${cargo_flags})\n  endif()\n\n  add_custom_target(\n    ${cargo_target}\n    COMMAND\n      \"${CMAKE_COMMAND}\" -E remove -f \"${CMAKE_CURRENT_SOURCE_DIR}/Cargo.lock\"\n    COMMAND\n      \"${CMAKE_COMMAND}\" -E env\n      \"CARGO_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR}\"\n      ${extra_cargo_env}\n      ${CARGO_COMMAND}\n      ${cargo_flags}\n    COMMENT \"Building Rust crate '${crate_name}'...\"\n    JOB_POOL rust_job_pool\n    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}\n    BYPRODUCTS\n      \"${CMAKE_CURRENT_BINARY_DIR}/debug/${staticlib_name}\"\n      \"${CMAKE_CURRENT_BINARY_DIR}/release/${staticlib_name}\"\n  )\n\n  add_library(${TARGET} INTERFACE)\n  add_dependencies(${TARGET} ${cargo_target})\n  set_target_properties(\n    ${TARGET}\n    PROPERTIES\n      INTERFACE_STATICLIB_OUTPUT_PATH \"${rust_staticlib}\"\n      INTERFACE_INSTALL_LIBNAME\n        \"${CMAKE_STATIC_LIBRARY_PREFIX}${crate_name}_rs${CMAKE_STATIC_LIBRARY_SUFFIX}\"\n  )\n\n  if(DEFINED ARG_USE_CXX_INCLUDE)\n    target_include_directories(\n      ${TARGET}\n      INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/cxxbridge/\n    )\n  endif()\n\n  target_link_libraries(\n    ${TARGET}\n    INTERFACE \"$<BUILD_INTERFACE:${rust_staticlib}>\"\n  )\nendfunction()\n\n# This function instructs CMake to define a target that will use `cargo build`\n# to build a bin crate referenced by the Cargo.toml file in the current source\n# directory.\n# It accepts a single `TARGET` parameter which will be passed as the package\n# name to `cargo build -p TARGET`. If binary has different name as package,\n# use optional flag BINARY_NAME to override it.\n# It also accepts a `FEATURES` parameter if you want to enable certain features\n# in your Rust binary.\n# The CMake target will be registered to build by default as part of the\n# ALL target.\nfunction(rust_executable TARGET)\n  fb_cmake_parse_args(ARG \"\" \"BINARY_NAME;FEATURES\" \"\" \"${ARGN}\")\n\n  set(crate_name \"${TARGET}\")\n  set(cargo_target \"${TARGET}.cargo\")\n  set(target_dir $<IF:$<CONFIG:Debug>,debug,release>)\n\n  if(DEFINED ARG_BINARY_NAME)\n    set(executable_name \"${ARG_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX}\")\n  else()\n    set(executable_name \"${crate_name}${CMAKE_EXECUTABLE_SUFFIX}\")\n  endif()\n  if(DEFINED ARG_FEATURES)\n    set(features --features ${ARG_FEATURES})\n  else()\n    set(features )\n  endif()\n\n  if(DEFINED ARG_FEATURES)\n    set(cargo_flags build $<IF:$<CONFIG:Debug>,,--release> -p ${crate_name} --features ${ARG_FEATURES})\n  else()\n    set(cargo_flags build $<IF:$<CONFIG:Debug>,,--release> -p ${crate_name})\n  endif()\n  if(USE_CARGO_VENDOR)\n    set(extra_cargo_env \"CARGO_HOME=${RUST_CARGO_HOME}\")\n    set(cargo_flags ${cargo_flags})\n  endif()\n\n  add_custom_target(\n    ${cargo_target}\n    ALL\n    COMMAND\n      \"${CMAKE_COMMAND}\" -E remove -f \"${CMAKE_CURRENT_SOURCE_DIR}/Cargo.lock\"\n    COMMAND\n      \"${CMAKE_COMMAND}\" -E env\n      \"CARGO_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR}\"\n      ${extra_cargo_env}\n      ${CARGO_COMMAND}\n      ${cargo_flags}\n    COMMENT \"Building Rust executable '${crate_name}'...\"\n    JOB_POOL rust_job_pool\n    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}\n    BYPRODUCTS\n      \"${CMAKE_CURRENT_BINARY_DIR}/debug/${executable_name}\"\n      \"${CMAKE_CURRENT_BINARY_DIR}/release/${executable_name}\"\n  )\n\n  set_property(TARGET \"${cargo_target}\"\n      PROPERTY EXECUTABLE \"${CMAKE_CURRENT_BINARY_DIR}/${target_dir}/${executable_name}\")\nendfunction()\n\n# This function can be used to install the executable generated by a prior\n# call to the `rust_executable` function.\n# It requires a `TARGET` parameter to identify the target to be installed,\n# and an optional `DESTINATION` parameter to specify the installation\n# directory.  If DESTINATION is not specified then the `bin` directory\n# will be assumed.\nfunction(install_rust_executable TARGET)\n  # Parse the arguments\n  set(one_value_args DESTINATION)\n  set(multi_value_args)\n  fb_cmake_parse_args(\n    ARG \"\" \"${one_value_args}\" \"${multi_value_args}\" \"${ARGN}\"\n  )\n\n  if(NOT DEFINED ARG_DESTINATION)\n    set(ARG_DESTINATION bin)\n  endif()\n\n  get_target_property(foo \"${TARGET}.cargo\" EXECUTABLE)\n\n  install(\n    PROGRAMS \"${foo}\"\n    DESTINATION \"${ARG_DESTINATION}\"\n  )\nendfunction()\n\n# This function installs the interface target generated from the function\n# `rust_static_library`. Use this function if you want to export your Rust\n# target to external CMake targets.\n#\n# ```cmake\n# install_rust_static_library(\n#   <TARGET>\n#   INSTALL_DIR <INSTALL_DIR>\n#   [EXPORT <EXPORT_NAME>]\n# )\n# ```\n#\n# Parameters:\n# - TARGET: Name of the Rust static library target.\n# - EXPORT_NAME: Name of the exported target.\n# - INSTALL_DIR: Path to the directory where this library will be installed.\n#\nfunction(install_rust_static_library TARGET)\n  fb_cmake_parse_args(ARG \"\" \"EXPORT;INSTALL_DIR\" \"\" \"${ARGN}\")\n\n  get_property(\n    staticlib_output_path\n    TARGET \"${TARGET}\"\n    PROPERTY INTERFACE_STATICLIB_OUTPUT_PATH\n  )\n  get_property(\n    staticlib_output_name\n    TARGET \"${TARGET}\"\n    PROPERTY INTERFACE_INSTALL_LIBNAME\n  )\n\n  if(NOT DEFINED staticlib_output_path)\n    message(FATAL_ERROR \"Not a rust_static_library target.\")\n  endif()\n\n  if(NOT DEFINED ARG_INSTALL_DIR)\n    message(FATAL_ERROR \"Missing required argument.\")\n  endif()\n\n  if(DEFINED ARG_EXPORT)\n    set(install_export_args EXPORT \"${ARG_EXPORT}\")\n  endif()\n\n  set(install_interface_dir \"${ARG_INSTALL_DIR}\")\n  if(NOT IS_ABSOLUTE \"${install_interface_dir}\")\n    set(install_interface_dir \"\\${_IMPORT_PREFIX}/${install_interface_dir}\")\n  endif()\n\n  target_link_libraries(\n    ${TARGET} INTERFACE\n    \"$<INSTALL_INTERFACE:${install_interface_dir}/${staticlib_output_name}>\"\n  )\n  install(\n    TARGETS ${TARGET}\n    ${install_export_args}\n    LIBRARY DESTINATION ${ARG_INSTALL_DIR}\n  )\n  install(\n    FILES ${staticlib_output_path}\n    RENAME ${staticlib_output_name}\n    DESTINATION ${ARG_INSTALL_DIR}\n  )\nendfunction()\n\n# This function creates C++ bindings using the [cxx] crate.\n#\n# Original function found here: https://github.com/corrosion-rs/corrosion/blob/master/cmake/Corrosion.cmake#L1390\n# Simplified for use as part of RustStaticLibrary module. License below.\n#\n# MIT License\n#\n# Copyright (c) 2018 Andrew Gaspar\n#\n# Permission is hereby granted, free of charge, to any person obtaining a copy\n# of this software and associated documentation files (the \"Software\"), to deal\n# in the Software without restriction, including without limitation the rights\n# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n# copies of the Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice shall be included in all\n# copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n# SOFTWARE.\n#\n# The rules approximately do the following:\n# - Check which version of `cxx` the Rust crate depends on.\n# - Check if the exact same version of `cxxbridge-cmd` is installed\n# - If not, create a rule to build the exact same version of `cxxbridge-cmd`.\n# - Create rules to run `cxxbridge` and generate\n#   - The `rust/cxx.h` header\n#   - A header and source file for the specified CXX_BRIDGE_FILE.\n# - The generated sources (and header include directories) are added to the\n#   `${TARGET}` CMake library target.\n#\n# ```cmake\n# rust_cxx_bridge(<TARGET> <CXX_BRIDGE_FILE> [CRATE <CRATE_NAME>] [LIBS <LIBNAMES>])\n# ```\n#\n# Parameters:\n# - TARGET:\n#   Name of the target name. The target that the bridge will be included with.\n# - CXX_BRIDGE_FILE:\n#   Name of the file that include the cxxbridge (e.g., \"src/ffi.rs\").\n# - CRATE_NAME:\n#   Name of the crate. This parameter is optional. If unspecified, it will\n#   fallback to `${TARGET}`.\n# - LIBS <lib1> [<lib2> ...]:\n#   A list of libraries that this library depends on.\n#\nfunction(rust_cxx_bridge TARGET CXX_BRIDGE_FILE)\n  fb_cmake_parse_args(ARG \"\" \"CRATE\" \"LIBS\" \"${ARGN}\")\n\n  if(DEFINED ARG_CRATE)\n    set(crate_name \"${ARG_CRATE}\")\n  else()\n    set(crate_name \"${TARGET}\")\n  endif()\n\n  if(USE_CARGO_VENDOR)\n    set(extra_cargo_env \"CARGO_HOME=${RUST_CARGO_HOME}\")\n  endif()\n\n  execute_process(\n    COMMAND\n      \"${CMAKE_COMMAND}\" -E env\n      ${extra_cargo_env}\n      \"${CARGO_COMMAND}\" tree -i cxx --depth=0\n    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}\n    RESULT_VARIABLE cxx_version_result\n    OUTPUT_VARIABLE cxx_version_output\n  )\n\n  if(NOT \"${cxx_version_result}\" EQUAL \"0\")\n    message(FATAL_ERROR \"Crate ${crate_name} does not depend on cxx.\")\n  endif()\n  if(cxx_version_output MATCHES \"cxx v([0-9]+.[0-9]+.[0-9]+)\")\n    set(cxx_required_version \"${CMAKE_MATCH_1}\")\n  else()\n    message(\n      FATAL_ERROR\n      \"Failed to parse cxx version from cargo tree output: `cxx_version_output`\")\n  endif()\n\n  # First check if a suitable version of cxxbridge is installed\n  find_program(INSTALLED_CXXBRIDGE cxxbridge PATHS \"$ENV{HOME}/.cargo/bin/\")\n  mark_as_advanced(INSTALLED_CXXBRIDGE)\n  if(INSTALLED_CXXBRIDGE)\n    execute_process(\n      COMMAND \"${INSTALLED_CXXBRIDGE}\" --version\n      OUTPUT_VARIABLE cxxbridge_version_output\n    )\n    if(cxxbridge_version_output MATCHES \"cxxbridge ([0-9]+.[0-9]+.[0-9]+)\")\n      set(cxxbridge_version \"${CMAKE_MATCH_1}\")\n    else()\n      set(cxxbridge_version \"\")\n    endif()\n  endif()\n\n  set(cxxbridge \"\")\n  if(cxxbridge_version)\n    if(cxxbridge_version VERSION_EQUAL cxx_required_version)\n      set(cxxbridge \"${INSTALLED_CXXBRIDGE}\")\n      if(NOT TARGET \"cxxbridge_v${cxx_required_version}\")\n        # Add an empty target.\n        add_custom_target(\"cxxbridge_v${cxx_required_version}\")\n      endif()\n    endif()\n  endif()\n\n  # No suitable version of cxxbridge was installed,\n  # so use custom target to install correct version.\n  if(NOT cxxbridge)\n    if(NOT TARGET \"cxxbridge_v${cxx_required_version}\")\n      add_custom_command(\n        OUTPUT\n          \"${CMAKE_BINARY_DIR}/cxxbridge_v${cxx_required_version}/bin/cxxbridge\"\n        COMMAND\n          \"${CMAKE_COMMAND}\" -E make_directory\n          \"${CMAKE_BINARY_DIR}/cxxbridge_v${cxx_required_version}\"\n        COMMAND\n          \"${CMAKE_COMMAND}\" -E remove -f \"${CMAKE_CURRENT_SOURCE_DIR}/Cargo.lock\"\n        COMMAND\n          \"${CMAKE_COMMAND}\" -E env\n          ${extra_cargo_env}\n          \"${CARGO_COMMAND}\" install cxxbridge-cmd\n          --version \"${cxx_required_version}\"\n          --root \"${CMAKE_BINARY_DIR}/cxxbridge_v${cxx_required_version}\"\n          --quiet\n        COMMAND\n          \"${CMAKE_COMMAND}\" -E remove -f \"${CMAKE_CURRENT_SOURCE_DIR}/Cargo.lock\"\n        COMMENT \"Installing cxxbridge (version ${cxx_required_version})\"\n      )\n      add_custom_target(\n        \"cxxbridge_v${cxx_required_version}\"\n        DEPENDS \"${CMAKE_BINARY_DIR}/cxxbridge_v${cxx_required_version}/bin/cxxbridge\"\n      )\n    endif()\n    set(\n      cxxbridge\n      \"${CMAKE_BINARY_DIR}/cxxbridge_v${cxx_required_version}/bin/cxxbridge\"\n    )\n  endif()\n\n  add_library(${crate_name} STATIC)\n  target_include_directories(\n    ${crate_name}\n    PUBLIC\n    $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>\n    $<INSTALL_INTERFACE:include>\n  )\n  target_link_libraries(\n    ${crate_name}\n    PUBLIC\n    ${ARG_LIBS}\n  )\n\n  file(MAKE_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}/rust\")\n  add_custom_command(\n    OUTPUT \"${CMAKE_CURRENT_BINARY_DIR}/rust/cxx.h\"\n    COMMAND\n      \"${cxxbridge}\" --header --output \"${CMAKE_CURRENT_BINARY_DIR}/rust/cxx.h\"\n    DEPENDS \"cxxbridge_v${cxx_required_version}\"\n    COMMENT \"Generating rust/cxx.h header\"\n  )\n\n  get_filename_component(filename_component ${CXX_BRIDGE_FILE} NAME)\n  get_filename_component(directory_component ${CXX_BRIDGE_FILE} DIRECTORY)\n  set(directory \"\")\n  if(directory_component)\n    set(directory \"${directory_component}\")\n  endif()\n\n  set(cxx_header ${directory}/${filename_component}.h)\n  set(cxx_source ${directory}/${filename_component}.cc)\n  set(rust_source_path \"${CMAKE_CURRENT_SOURCE_DIR}/${CXX_BRIDGE_FILE}\")\n\n  file(\n    MAKE_DIRECTORY\n    \"${CMAKE_CURRENT_BINARY_DIR}/${directory_component}\"\n  )\n\n  add_custom_command(\n    OUTPUT\n      \"${CMAKE_CURRENT_BINARY_DIR}/${cxx_header}\"\n      \"${CMAKE_CURRENT_BINARY_DIR}/${cxx_source}\"\n    COMMAND\n      ${cxxbridge} ${rust_source_path}\n        --cfg fbcode_build=false\n        --header\n        --output \"${CMAKE_CURRENT_BINARY_DIR}/${cxx_header}\"\n    COMMAND\n      ${cxxbridge} ${rust_source_path}\n        --cfg fbcode_build=false\n        --output \"${CMAKE_CURRENT_BINARY_DIR}/${cxx_source}\"\n        --include \"${cxx_header}\"\n    DEPENDS \"cxxbridge_v${cxx_required_version}\" \"${rust_source_path}\"\n    COMMENT \"Generating cxx bindings for crate ${crate_name}\"\n  )\n\n  target_sources(\n    ${crate_name}\n    PRIVATE\n    \"${CMAKE_CURRENT_BINARY_DIR}/${cxx_header}\"\n    \"${CMAKE_CURRENT_BINARY_DIR}/rust/cxx.h\"\n    \"${CMAKE_CURRENT_BINARY_DIR}/${cxx_source}\"\n  )\nendfunction()\n"
  },
  {
    "path": "build/fbcode_builder/CMake/fb_py_test_main.py",
    "content": "#!/usr/bin/env python\n#\n# Copyright (c) Facebook, Inc. and its affiliates.\n#\n\"\"\"\nThis file contains the main module code for Python test programs.\n\"\"\"\n\n\nimport contextlib\nimport ctypes\nimport fnmatch\nimport json\nimport logging\nimport optparse\nimport os\nimport platform\nimport re\nimport sys\nimport tempfile\nimport time\nimport traceback\nimport unittest\nimport warnings\nfrom importlib.machinery import PathFinder\n\n\ntry:\n    from StringIO import StringIO\nexcept ImportError:\n    from io import StringIO\ntry:\n    import coverage\nexcept ImportError:\n    coverage = None  # type: ignore\ntry:\n    from importlib.machinery import SourceFileLoader\nexcept ImportError:\n    SourceFileLoader = None  # type: ignore\n\n\nclass get_cpu_instr_counter:\n    def read(self):\n        # TODO\n        return 0\n\n\nEXIT_CODE_SUCCESS = 0\nEXIT_CODE_TEST_FAILURE = 70\n\n\nclass TestStatus:\n\n    ABORTED = \"FAILURE\"\n    PASSED = \"SUCCESS\"\n    FAILED = \"FAILURE\"\n    EXPECTED_FAILURE = \"SUCCESS\"\n    UNEXPECTED_SUCCESS = \"FAILURE\"\n    SKIPPED = \"ASSUMPTION_VIOLATION\"\n\n\nclass PathMatcher:\n    def __init__(self, include_patterns, omit_patterns):\n        self.include_patterns = include_patterns\n        self.omit_patterns = omit_patterns\n\n    def omit(self, path):\n        \"\"\"\n        Omit iff matches any of the omit_patterns or the include patterns are\n        not empty and none is matched\n        \"\"\"\n        path = os.path.realpath(path)\n        return any(fnmatch.fnmatch(path, p) for p in self.omit_patterns) or (\n            self.include_patterns\n            and not any(fnmatch.fnmatch(path, p) for p in self.include_patterns)\n        )\n\n    def include(self, path):\n        return not self.omit(path)\n\n\nclass DebugWipeFinder(PathFinder):\n    \"\"\"\n    PEP 302 finder that uses a DebugWipeLoader for all files which do not need\n    coverage\n    \"\"\"\n\n    def __init__(self, matcher):\n        self.matcher = matcher\n\n    def find_spec(self, fullname, path=None, target=None):\n        spec = super().find_spec(fullname, path=path, target=target)\n        if spec is None or spec.origin is None:\n            return None\n        if not spec.origin.endswith(\".py\"):\n            return None\n        if self.matcher.include(spec.origin):\n            return None\n\n        class PyVarObject(ctypes.Structure):\n            _fields_ = [\n                (\"ob_refcnt\", ctypes.c_long),\n                (\"ob_type\", ctypes.c_void_p),\n                (\"ob_size\", ctypes.c_ulong),\n            ]\n\n        class DebugWipeLoader(SourceFileLoader):\n            \"\"\"\n            PEP302 loader that zeros out debug information before execution\n            \"\"\"\n\n            def get_code(self, fullname):\n                code = super().get_code(fullname)\n                if code:\n                    # Ideally we'd do\n                    # code.co_lnotab = b''\n                    # But code objects are READONLY. Not to worry though; we'll\n                    # directly modify CPython's object\n                    code_impl = PyVarObject.from_address(id(code.co_lnotab))\n                    code_impl.ob_size = 0\n                return code\n\n        if isinstance(spec.loader, SourceFileLoader):\n            spec.loader = DebugWipeLoader(fullname, spec.origin)\n        return spec\n\n\ndef optimize_for_coverage(cov, include_patterns, omit_patterns):\n    \"\"\"\n    We get better performance if we zero out debug information for files which\n    we're not interested in. Only available in CPython 3.3+\n    \"\"\"\n    matcher = PathMatcher(include_patterns, omit_patterns)\n    if SourceFileLoader and platform.python_implementation() == \"CPython\":\n        sys.meta_path.insert(0, DebugWipeFinder(matcher))\n\n\nclass TeeStream:\n    def __init__(self, *streams):\n        self._streams = streams\n\n    def write(self, data):\n        for stream in self._streams:\n            stream.write(data)\n\n    def flush(self):\n        for stream in self._streams:\n            stream.flush()\n\n    def isatty(self):\n        return False\n\n\nclass CallbackStream:\n    def __init__(self, callback, bytes_callback=None, orig=None):\n        self._callback = callback\n        self._fileno = orig.fileno() if orig else None\n\n        # Python 3 APIs:\n        # - `encoding` is a string holding the encoding name\n        # - `errors` is a string holding the error-handling mode for encoding\n        # - `buffer` should look like an io.BufferedIOBase object\n\n        self.errors = orig.errors if orig else None\n        if bytes_callback:\n            # those members are only on the io.TextIOWrapper\n            self.encoding = orig.encoding if orig else \"UTF-8\"\n            self.buffer = CallbackStream(bytes_callback, orig=orig)\n\n    def write(self, data):\n        self._callback(data)\n\n    def flush(self):\n        pass\n\n    def isatty(self):\n        return False\n\n    def fileno(self):\n        return self._fileno\n\n\nclass BuckTestResult(unittest.TextTestResult):\n    \"\"\"\n    Our own TestResult class that outputs data in a format that can be easily\n    parsed by buck's test runner.\n    \"\"\"\n\n    _instr_counter = get_cpu_instr_counter()\n\n    def __init__(\n        self, stream, descriptions, verbosity, show_output, main_program, suite\n    ):\n        super(BuckTestResult, self).__init__(stream, descriptions, verbosity)\n        self._main_program = main_program\n        self._suite = suite\n        self._results = []\n        self._current_test = None\n        self._saved_stdout = sys.stdout\n        self._saved_stderr = sys.stderr\n        self._show_output = show_output\n\n    def getResults(self):\n        return self._results\n\n    def startTest(self, test):\n        super(BuckTestResult, self).startTest(test)\n\n        # Pass in the real stdout and stderr filenos.  We can't really do much\n        # here to intercept callers who directly operate on these fileno\n        # objects.\n        sys.stdout = CallbackStream(\n            self.addStdout, self.addStdoutBytes, orig=sys.stdout\n        )\n        sys.stderr = CallbackStream(\n            self.addStderr, self.addStderrBytes, orig=sys.stderr\n        )\n        self._current_test = test\n        self._test_start_time = time.time()\n        self._current_status = TestStatus.ABORTED\n        self._messages = []\n        self._stacktrace = None\n        self._stdout = \"\"\n        self._stderr = \"\"\n        self._start_instr_count = self._instr_counter.read()\n\n    def _find_next_test(self, suite):\n        \"\"\"\n        Find the next test that has not been run.\n        \"\"\"\n\n        for test in suite:\n\n            # We identify test suites by test that are iterable (as is done in\n            # the builtin python test harness).  If we see one, recurse on it.\n            if hasattr(test, \"__iter__\"):\n                test = self._find_next_test(test)\n\n            # The builtin python test harness sets test references to `None`\n            # after they have run, so we know we've found the next test up\n            # if it's not `None`.\n            if test is not None:\n                return test\n\n    def stopTest(self, test):\n        sys.stdout = self._saved_stdout\n        sys.stderr = self._saved_stderr\n\n        super(BuckTestResult, self).stopTest(test)\n\n        # If a failure occurred during module/class setup, then this \"test\" may\n        # actually be a `_ErrorHolder`, which doesn't contain explicit info\n        # about the upcoming test.  Since we really only care about the test\n        # name field (i.e. `_testMethodName`), we use that to detect an actual\n        # test cases, and fall back to looking the test up from the suite\n        # otherwise.\n        if not hasattr(test, \"_testMethodName\"):\n            test = self._find_next_test(self._suite)\n\n        result = {\n            \"testCaseName\": \"{0}.{1}\".format(\n                test.__class__.__module__, test.__class__.__name__\n            ),\n            \"testCase\": test._testMethodName,\n            \"type\": self._current_status,\n            \"time\": int((time.time() - self._test_start_time) * 1000),\n            \"message\": os.linesep.join(self._messages),\n            \"stacktrace\": self._stacktrace,\n            \"stdOut\": self._stdout,\n            \"stdErr\": self._stderr,\n        }\n\n        # TestPilot supports an instruction count field.\n        if \"TEST_PILOT\" in os.environ:\n            result[\"instrCount\"] = (\n                int(self._instr_counter.read() - self._start_instr_count),\n            )\n\n        self._results.append(result)\n        self._current_test = None\n\n    def stopTestRun(self):\n        cov = self._main_program.get_coverage()\n        if cov is not None:\n            self._results.append({\"coverage\": cov})\n\n    @contextlib.contextmanager\n    def _withTest(self, test):\n        self.startTest(test)\n        yield\n        self.stopTest(test)\n\n    def _setStatus(self, test, status, message=None, stacktrace=None):\n        assert test == self._current_test\n        self._current_status = status\n        self._stacktrace = stacktrace\n        if message is not None:\n            if message.endswith(os.linesep):\n                message = message[:-1]\n            self._messages.append(message)\n\n    def setStatus(self, test, status, message=None, stacktrace=None):\n        # addError() may be called outside of a test if one of the shared\n        # fixtures (setUpClass/tearDownClass/setUpModule/tearDownModule)\n        # throws an error.\n        #\n        # In this case, create a fake test result to record the error.\n        if self._current_test is None:\n            with self._withTest(test):\n                self._setStatus(test, status, message, stacktrace)\n        else:\n            self._setStatus(test, status, message, stacktrace)\n\n    def setException(self, test, status, excinfo):\n        exctype, value, tb = excinfo\n        self.setStatus(\n            test,\n            status,\n            \"{0}: {1}\".format(exctype.__name__, value),\n            \"\".join(traceback.format_tb(tb)),\n        )\n\n    def addSuccess(self, test):\n        super(BuckTestResult, self).addSuccess(test)\n        self.setStatus(test, TestStatus.PASSED)\n\n    def addError(self, test, err):\n        super(BuckTestResult, self).addError(test, err)\n        self.setException(test, TestStatus.ABORTED, err)\n\n    def addFailure(self, test, err):\n        super(BuckTestResult, self).addFailure(test, err)\n        self.setException(test, TestStatus.FAILED, err)\n\n    def addSkip(self, test, reason):\n        super(BuckTestResult, self).addSkip(test, reason)\n        self.setStatus(test, TestStatus.SKIPPED, \"Skipped: %s\" % (reason,))\n\n    def addExpectedFailure(self, test, err):\n        super(BuckTestResult, self).addExpectedFailure(test, err)\n        self.setException(test, TestStatus.EXPECTED_FAILURE, err)\n\n    def addUnexpectedSuccess(self, test):\n        super(BuckTestResult, self).addUnexpectedSuccess(test)\n        self.setStatus(test, TestStatus.UNEXPECTED_SUCCESS, \"Unexpected success\")\n\n    def addStdout(self, val):\n        self._stdout += val\n        if self._show_output:\n            self._saved_stdout.write(val)\n            self._saved_stdout.flush()\n\n    def addStdoutBytes(self, val):\n        string = val.decode(\"utf-8\", errors=\"backslashreplace\")\n        self.addStdout(string)\n\n    def addStderr(self, val):\n        self._stderr += val\n        if self._show_output:\n            self._saved_stderr.write(val)\n            self._saved_stderr.flush()\n\n    def addStderrBytes(self, val):\n        string = val.decode(\"utf-8\", errors=\"backslashreplace\")\n        self.addStderr(string)\n\n\nclass BuckTestRunner(unittest.TextTestRunner):\n    def __init__(self, main_program, suite, show_output=True, **kwargs):\n        super(BuckTestRunner, self).__init__(**kwargs)\n        self.show_output = show_output\n        self._main_program = main_program\n        self._suite = suite\n\n    def _makeResult(self):\n        return BuckTestResult(\n            self.stream,\n            self.descriptions,\n            self.verbosity,\n            self.show_output,\n            self._main_program,\n            self._suite,\n        )\n\n\ndef _format_test_name(test_class, attrname):\n    return \"{0}.{1}.{2}\".format(test_class.__module__, test_class.__name__, attrname)\n\n\nclass StderrLogHandler(logging.StreamHandler):\n    \"\"\"\n    This class is very similar to logging.StreamHandler, except that it\n    always uses the current sys.stderr object.\n\n    StreamHandler caches the current sys.stderr object when it is constructed.\n    This makes it behave poorly in unit tests, which may replace sys.stderr\n    with a StringIO buffer during tests.  The StreamHandler will continue using\n    the old sys.stderr object instead of the desired StringIO buffer.\n    \"\"\"\n\n    def __init__(self):\n        logging.Handler.__init__(self)\n\n    @property\n    def stream(self):\n        return sys.stderr\n\n\nclass RegexTestLoader(unittest.TestLoader):\n    def __init__(self, regex=None):\n        self.regex = regex\n        super(RegexTestLoader, self).__init__()\n\n    def getTestCaseNames(self, testCaseClass):\n        \"\"\"\n        Return a sorted sequence of method names found within testCaseClass\n        \"\"\"\n\n        testFnNames = super(RegexTestLoader, self).getTestCaseNames(testCaseClass)\n        if self.regex is None:\n            return testFnNames\n        robj = re.compile(self.regex)\n        matched = []\n        for attrname in testFnNames:\n            fullname = _format_test_name(testCaseClass, attrname)\n            if robj.search(fullname):\n                matched.append(attrname)\n        return matched\n\n\nclass Loader:\n\n    suiteClass = unittest.TestSuite\n\n    def __init__(self, modules, regex=None):\n        self.modules = modules\n        self.regex = regex\n\n    def load_all(self):\n        loader = RegexTestLoader(self.regex)\n        test_suite = self.suiteClass()\n        for module_name in self.modules:\n            __import__(module_name, level=0)\n            module = sys.modules[module_name]\n            module_suite = loader.loadTestsFromModule(module)\n            test_suite.addTest(module_suite)\n        return test_suite\n\n    def load_args(self, args):\n        loader = RegexTestLoader(self.regex)\n\n        suites = []\n        for arg in args:\n            suite = loader.loadTestsFromName(arg)\n            # loadTestsFromName() can only process names that refer to\n            # individual test functions or modules.  It can't process package\n            # names.  If there were no module/function matches, check to see if\n            # this looks like a package name.\n            if suite.countTestCases() != 0:\n                suites.append(suite)\n                continue\n\n            # Load all modules whose name is <arg>.<something>\n            prefix = arg + \".\"\n            for module in self.modules:\n                if module.startswith(prefix):\n                    suite = loader.loadTestsFromName(module)\n                    suites.append(suite)\n\n        return loader.suiteClass(suites)\n\n\n_COVERAGE_INI = \"\"\"\\\n[report]\nexclude_lines =\n    pragma: no cover\n    pragma: nocover\n    pragma:.*no${PLATFORM}\n    pragma:.*no${PY_IMPL}${PY_MAJOR}${PY_MINOR}\n    pragma:.*no${PY_IMPL}${PY_MAJOR}\n    pragma:.*nopy${PY_MAJOR}\n    pragma:.*nopy${PY_MAJOR}${PY_MINOR}\n\"\"\"\n\n\nclass MainProgram:\n    \"\"\"\n    This class implements the main program.  It can be subclassed by\n    users who wish to customize some parts of the main program.\n    (Adding additional command line options, customizing test loading, etc.)\n    \"\"\"\n\n    DEFAULT_VERBOSITY = 2\n\n    def __init__(self, argv):\n        self.init_option_parser()\n        self.parse_options(argv)\n        self.setup_logging()\n\n    def init_option_parser(self):\n        usage = \"%prog [options] [TEST] ...\"\n        op = optparse.OptionParser(usage=usage, add_help_option=False)\n        self.option_parser = op\n\n        op.add_option(\n            \"--hide-output\",\n            dest=\"show_output\",\n            action=\"store_false\",\n            default=True,\n            help=\"Suppress data that tests print to stdout/stderr, and only \"\n            \"show it if the test fails.\",\n        )\n        op.add_option(\n            \"-o\",\n            \"--output\",\n            help=\"Write results to a file in a JSON format to be read by Buck\",\n        )\n        op.add_option(\n            \"-f\",\n            \"--failfast\",\n            action=\"store_true\",\n            default=False,\n            help=\"Stop after the first failure\",\n        )\n        op.add_option(\n            \"-l\",\n            \"--list-tests\",\n            action=\"store_true\",\n            dest=\"list\",\n            default=False,\n            help=\"List tests and exit\",\n        )\n        op.add_option(\n            \"-r\",\n            \"--regex\",\n            default=None,\n            help=\"Regex to apply to tests, to only run those tests\",\n        )\n        op.add_option(\n            \"--collect-coverage\",\n            action=\"store_true\",\n            default=False,\n            help=\"Collect test coverage information\",\n        )\n        op.add_option(\n            \"--coverage-include\",\n            default=\"*\",\n            help='File globs to include in converage (split by \",\")',\n        )\n        op.add_option(\n            \"--coverage-omit\",\n            default=\"\",\n            help='File globs to omit from converage (split by \",\")',\n        )\n        op.add_option(\n            \"--logger\",\n            action=\"append\",\n            metavar=\"<category>=<level>\",\n            default=[],\n            help=\"Configure log levels for specific logger categories\",\n        )\n        op.add_option(\n            \"-q\",\n            \"--quiet\",\n            action=\"count\",\n            default=0,\n            help=\"Decrease the verbosity (may be specified multiple times)\",\n        )\n        op.add_option(\n            \"-v\",\n            \"--verbosity\",\n            action=\"count\",\n            default=self.DEFAULT_VERBOSITY,\n            help=\"Increase the verbosity (may be specified multiple times)\",\n        )\n        op.add_option(\n            \"-?\", \"--help\", action=\"help\", help=\"Show this help message and exit\"\n        )\n\n    def parse_options(self, argv):\n        self.options, self.test_args = self.option_parser.parse_args(argv[1:])\n        self.options.verbosity -= self.options.quiet\n\n        if self.options.collect_coverage and coverage is None:\n            self.option_parser.error(\"coverage module is not available\")\n        self.options.coverage_include = self.options.coverage_include.split(\",\")\n        if self.options.coverage_omit == \"\":\n            self.options.coverage_omit = []\n        else:\n            self.options.coverage_omit = self.options.coverage_omit.split(\",\")\n\n    def setup_logging(self):\n        # Configure the root logger to log at INFO level.\n        # This is similar to logging.basicConfig(), but uses our\n        # StderrLogHandler instead of a StreamHandler.\n        fmt = logging.Formatter(\"%(pathname)s:%(lineno)s: %(message)s\")\n        log_handler = StderrLogHandler()\n        log_handler.setFormatter(fmt)\n        root_logger = logging.getLogger()\n        root_logger.addHandler(log_handler)\n        root_logger.setLevel(logging.INFO)\n\n        level_names = {\n            \"debug\": logging.DEBUG,\n            \"info\": logging.INFO,\n            \"warn\": logging.WARNING,\n            \"warning\": logging.WARNING,\n            \"error\": logging.ERROR,\n            \"critical\": logging.CRITICAL,\n            \"fatal\": logging.FATAL,\n        }\n\n        for value in self.options.logger:\n            parts = value.rsplit(\"=\", 1)\n            if len(parts) != 2:\n                self.option_parser.error(\n                    \"--logger argument must be of the \"\n                    \"form <name>=<level>: %s\" % value\n                )\n            name = parts[0]\n            level_name = parts[1].lower()\n            level = level_names.get(level_name)\n            if level is None:\n                self.option_parser.error(\n                    \"invalid log level %r for log \" \"category %s\" % (parts[1], name)\n                )\n            logging.getLogger(name).setLevel(level)\n\n    def create_loader(self):\n        import __test_modules__\n\n        return Loader(__test_modules__.TEST_MODULES, self.options.regex)\n\n    def load_tests(self):\n        loader = self.create_loader()\n        if self.options.collect_coverage:\n            self.start_coverage()\n            include = self.options.coverage_include\n            omit = self.options.coverage_omit\n            if include and \"*\" not in include:\n                optimize_for_coverage(self.cov, include, omit)\n\n        if self.test_args:\n            suite = loader.load_args(self.test_args)\n        else:\n            suite = loader.load_all()\n        if self.options.collect_coverage:\n            self.cov.start()\n        return suite\n\n    def get_tests(self, test_suite):\n        tests = []\n\n        for test in test_suite:\n            if isinstance(test, unittest.TestSuite):\n                tests.extend(self.get_tests(test))\n            else:\n                tests.append(test)\n\n        return tests\n\n    def run(self):\n        test_suite = self.load_tests()\n\n        if self.options.list:\n            for test in self.get_tests(test_suite):\n                method_name = getattr(test, \"_testMethodName\", \"\")\n                name = _format_test_name(test.__class__, method_name)\n                print(name)\n            return EXIT_CODE_SUCCESS\n        else:\n            result = self.run_tests(test_suite)\n            if self.options.output is not None:\n                with open(self.options.output, \"w\") as f:\n                    json.dump(result.getResults(), f, indent=4, sort_keys=True)\n            if not result.wasSuccessful():\n                return EXIT_CODE_TEST_FAILURE\n            return EXIT_CODE_SUCCESS\n\n    def run_tests(self, test_suite):\n        # Install a signal handler to catch Ctrl-C and display the results\n        # (but only if running >2.6).\n        if sys.version_info[0] > 2 or sys.version_info[1] > 6:\n            unittest.installHandler()\n\n        # Run the tests\n        runner = BuckTestRunner(\n            self,\n            test_suite,\n            verbosity=self.options.verbosity,\n            show_output=self.options.show_output,\n        )\n        result = runner.run(test_suite)\n\n        if self.options.collect_coverage and self.options.show_output:\n            self.cov.stop()\n            try:\n                self.cov.report(file=sys.stdout)\n            except coverage.misc.CoverageException:\n                print(\"No lines were covered, potentially restricted by file filters\")\n\n        return result\n\n    def get_abbr_impl(self):\n        \"\"\"Return abbreviated implementation name.\"\"\"\n        impl = platform.python_implementation()\n        if impl == \"PyPy\":\n            return \"pp\"\n        elif impl == \"Jython\":\n            return \"jy\"\n        elif impl == \"IronPython\":\n            return \"ip\"\n        elif impl == \"CPython\":\n            return \"cp\"\n        else:\n            raise RuntimeError(\"unknown python runtime\")\n\n    def start_coverage(self):\n        if not self.options.collect_coverage:\n            return\n\n        with tempfile.NamedTemporaryFile(\"w\", delete=False) as coverage_ini:\n            coverage_ini.write(_COVERAGE_INI)\n            self._coverage_ini_path = coverage_ini.name\n\n        # Keep the original working dir in case tests use os.chdir\n        self._original_working_dir = os.getcwd()\n\n        # for coverage config ignores by platform/python version\n        os.environ[\"PLATFORM\"] = sys.platform\n        os.environ[\"PY_IMPL\"] = self.get_abbr_impl()\n        os.environ[\"PY_MAJOR\"] = str(sys.version_info.major)\n        os.environ[\"PY_MINOR\"] = str(sys.version_info.minor)\n\n        self.cov = coverage.Coverage(\n            include=self.options.coverage_include,\n            omit=self.options.coverage_omit,\n            config_file=coverage_ini.name,\n        )\n        self.cov.erase()\n        self.cov.start()\n\n    def get_coverage(self):\n        if not self.options.collect_coverage:\n            return None\n\n        try:\n            os.remove(self._coverage_ini_path)\n        except OSError:\n            pass  # Better to litter than to fail the test\n\n        # Switch back to the original working directory.\n        os.chdir(self._original_working_dir)\n\n        result = {}\n\n        self.cov.stop()\n\n        try:\n            f = StringIO()\n            self.cov.report(file=f)\n            lines = f.getvalue().split(\"\\n\")\n        except coverage.misc.CoverageException:\n            # Nothing was covered. That's fine by us\n            return result\n\n        # N.B.: the format of the coverage library's output differs\n        # depending on whether one or more files are in the results\n        for line in lines[2:]:\n            if line.strip(\"-\") == \"\":\n                break\n            r = line.split()[0]\n            analysis = self.cov.analysis2(r)\n            covString = self.convert_to_diff_cov_str(analysis)\n            if covString:\n                result[r] = covString\n\n        return result\n\n    def convert_to_diff_cov_str(self, analysis):\n        # Info on the format of analysis:\n        # http://nedbatchelder.com/code/coverage/api.html\n        if not analysis:\n            return None\n        numLines = max(\n            analysis[1][-1] if len(analysis[1]) else 0,\n            analysis[2][-1] if len(analysis[2]) else 0,\n            analysis[3][-1] if len(analysis[3]) else 0,\n        )\n        lines = [\"N\"] * numLines\n        for l in analysis[1]:\n            lines[l - 1] = \"C\"\n        for l in analysis[2]:\n            lines[l - 1] = \"X\"\n        for l in analysis[3]:\n            lines[l - 1] = \"U\"\n        return \"\".join(lines)\n\n\ndef main(argv):\n    return MainProgram(sys.argv).run()\n\n\nif __name__ == \"__main__\":\n    sys.exit(main(sys.argv))\n"
  },
  {
    "path": "build/fbcode_builder/CMake/fb_py_win_main.c",
    "content": "// Copyright (c) Facebook, Inc. and its affiliates.\n\n#define WIN32_LEAN_AND_MEAN\n\n#include <Windows.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#define PATH_SIZE 32768\n\ntypedef int (*Py_Main)(int, wchar_t**);\n\nint locate_py_main(int argc, wchar_t** argv) {\n  /*\n   * We have to dynamically locate Python3.dll because we may be loading a\n   * Python native module while running. If that module is built with a\n   * different Python version, we will end up a DLL import error. To resolve\n   * this, we can either ship an embedded version of Python with us or\n   * dynamically look up existing Python distribution installed on user's\n   * machine. This way, we should be able to get a consistent version of\n   * Python3.dll and .pyd modules.\n   */\n  HINSTANCE python_dll;\n  Py_Main pymain;\n\n  python_dll =\n      LoadLibraryExW(L\"python3.dll\", NULL, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);\n\n  int returncode = 0;\n  if (python_dll != NULL) {\n    pymain = (Py_Main)GetProcAddress(python_dll, \"Py_Main\");\n\n    if (pymain != NULL) {\n      returncode = (pymain)(argc, argv);\n    } else {\n      fprintf(stderr, \"error: %d unable to load Py_Main\\n\", GetLastError());\n    }\n\n    FreeLibrary(python_dll);\n  } else {\n    fprintf(stderr, \"error: %d unable to locate python3.dll\\n\", GetLastError());\n    return 1;\n  }\n  return returncode;\n}\n\nint wmain() {\n  /*\n   * This executable will be prepended to the start of a Python ZIP archive.\n   * Python will be able to directly execute the ZIP archive, so we simply\n   * need to tell Py_Main() to run our own file.  Duplicate the argument list\n   * and add our file name to the beginning to tell Python what file to invoke.\n   */\n  wchar_t** pyargv = malloc(sizeof(wchar_t*) * (__argc + 1));\n  if (!pyargv) {\n    fprintf(stderr, \"error: failed to allocate argument vector\\n\");\n    return 1;\n  }\n\n  /* Py_Main wants the wide character version of the argv so we pull those\n   * values from the global __wargv array that has been prepared by MSVCRT.\n   *\n   * In order for the zipapp to run we need to insert an extra argument in\n   * the front of the argument vector that points to ourselves.\n   *\n   * An additional complication is that, depending on who prepared the argument\n   * string used to start our process, the computed __wargv[0] can be a simple\n   * shell word like `watchman-wait` which is normally resolved together with\n   * the PATH by the shell.\n   * That unresolved path isn't sufficient to start the zipapp on windows;\n   * we need the fully qualified path.\n   *\n   * Given:\n   * __wargv == {\"watchman-wait\", \"-h\"}\n   *\n   * we want to pass the following to Py_Main:\n   *\n   * {\n   *   \"z:\\build\\watchman\\python\\watchman-wait.exe\",\n   *   \"z:\\build\\watchman\\python\\watchman-wait.exe\",\n   *   \"-h\"\n   * }\n   */\n  wchar_t full_path_to_argv0[PATH_SIZE];\n  DWORD len = GetModuleFileNameW(NULL, full_path_to_argv0, PATH_SIZE);\n  if (len == 0 ||\n      len == PATH_SIZE && GetLastError() == ERROR_INSUFFICIENT_BUFFER) {\n    fprintf(\n        stderr,\n        \"error: %d while retrieving full path to this executable\\n\",\n        GetLastError());\n    return 1;\n  }\n\n  for (int n = 1; n < __argc; ++n) {\n    pyargv[n + 1] = __wargv[n];\n  }\n  pyargv[0] = full_path_to_argv0;\n  pyargv[1] = full_path_to_argv0;\n\n  return locate_py_main(__argc + 1, pyargv);\n}\n"
  },
  {
    "path": "build/fbcode_builder/CMake/make_fbpy_archive.py",
    "content": "#!/usr/bin/env python3\n#\n# Copyright (c) Facebook, Inc. and its affiliates.\n#\nimport argparse\nimport collections\nimport errno\nimport os\nimport shutil\nimport subprocess\nimport sys\nimport tempfile\nimport zipapp\n\nMANIFEST_SEPARATOR = \" :: \"\nMANIFEST_HEADER_V1 = \"FBPY_MANIFEST 1\\n\"\n\n\nclass UsageError(Exception):\n    def __init__(self, message):\n        self.message = message\n\n    def __str__(self):\n        return self.message\n\n\nclass BadManifestError(UsageError):\n    def __init__(self, path, line_num, message):\n        full_msg = \"%s:%s: %s\" % (path, line_num, message)\n        super().__init__(full_msg)\n        self.path = path\n        self.line_num = line_num\n        self.raw_message = message\n\n\nPathInfo = collections.namedtuple(\n    \"PathInfo\", (\"src\", \"dest\", \"manifest_path\", \"manifest_line\")\n)\n\n\ndef parse_manifest(manifest, path_map):\n    bad_prefix = \"..\" + os.path.sep\n    manifest_dir = os.path.dirname(manifest)\n    with open(manifest, \"r\") as f:\n        line_num = 1\n        line = f.readline()\n        if line != MANIFEST_HEADER_V1:\n            raise BadManifestError(\n                manifest, line_num, \"Unexpected manifest file header\"\n            )\n\n        for line in f:\n            line_num += 1\n            if line.startswith(\"#\"):\n                continue\n            line = line.rstrip(\"\\n\")\n            parts = line.split(MANIFEST_SEPARATOR)\n            if len(parts) != 2:\n                msg = \"line must be of the form SRC %s DEST\" % MANIFEST_SEPARATOR\n                raise BadManifestError(manifest, line_num, msg)\n            src, dest = parts\n            dest = os.path.normpath(dest)\n            if dest.startswith(bad_prefix):\n                msg = \"destination path starts with %s: %s\" % (bad_prefix, dest)\n                raise BadManifestError(manifest, line_num, msg)\n\n            if not os.path.isabs(src):\n                src = os.path.normpath(os.path.join(manifest_dir, src))\n\n            if dest in path_map:\n                prev_info = path_map[dest]\n                msg = (\n                    \"multiple source paths specified for destination \"\n                    \"path %s.  Previous source was %s from %s:%s\"\n                    % (\n                        dest,\n                        prev_info.src,\n                        prev_info.manifest_path,\n                        prev_info.manifest_line,\n                    )\n                )\n                raise BadManifestError(manifest, line_num, msg)\n\n            info = PathInfo(\n                src=src,\n                dest=dest,\n                manifest_path=manifest,\n                manifest_line=line_num,\n            )\n            path_map[dest] = info\n\n\ndef populate_install_tree(inst_dir, path_map):\n    os.mkdir(inst_dir)\n    dest_dirs = {\"\": False}\n\n    def make_dest_dir(path):\n        if path in dest_dirs:\n            return\n        parent = os.path.dirname(path)\n        make_dest_dir(parent)\n        abs_path = os.path.join(inst_dir, path)\n        os.mkdir(abs_path)\n        dest_dirs[path] = False\n\n    def install_file(info):\n        dir_name, base_name = os.path.split(info.dest)\n        make_dest_dir(dir_name)\n        if base_name == \"__init__.py\":\n            dest_dirs[dir_name] = True\n        abs_dest = os.path.join(inst_dir, info.dest)\n        shutil.copy2(info.src, abs_dest)\n\n    # Copy all of the destination files\n    for info in path_map.values():\n        install_file(info)\n\n    # Create __init__ files in any directories that don't have them.\n    for dir_path, has_init in dest_dirs.items():\n        if has_init:\n            continue\n        init_path = os.path.join(inst_dir, dir_path, \"__init__.py\")\n        with open(init_path, \"w\"):\n            pass\n\n\ndef build_pex(args, path_map):\n    \"\"\"Create a self executing python binary using the PEX tool\n\n    This type of Python binary is more complex as it requires a third-party tool,\n    but it does support native language extensions (.so/.dll files).\n    \"\"\"\n    dest_dir = os.path.dirname(args.output)\n    with tempfile.TemporaryDirectory(prefix=\"make_fbpy.\", dir=dest_dir) as tmpdir:\n        inst_dir = os.path.join(tmpdir, \"tree\")\n        populate_install_tree(inst_dir, path_map)\n\n        if os.path.exists(os.path.join(inst_dir, \"__main__.py\")):\n            os.rename(\n                os.path.join(inst_dir, \"__main__.py\"),\n                os.path.join(inst_dir, \"main.py\"),\n            )\n            args.main = \"main\"\n\n        tmp_output = os.path.abspath(os.path.join(tmpdir, \"output.exe\"))\n        subprocess.check_call(\n            [\"pex\"]\n            + [\"--output-file\", tmp_output]\n            + [\"--python\", args.python]\n            + [\"--sources-directory\", inst_dir]\n            + [\"-e\", args.main]\n        )\n\n        os.replace(tmp_output, args.output)\n\n\ndef build_zipapp(args, path_map):\n    \"\"\"Create a self executing python binary using Python 3's built-in\n    zipapp module.\n\n    This type of Python binary is relatively simple, as zipapp is part of the\n    standard library, but it does not support native language extensions\n    (.so/.dll files).\n    \"\"\"\n    dest_dir = os.path.dirname(args.output)\n    with tempfile.TemporaryDirectory(prefix=\"make_fbpy.\", dir=dest_dir) as tmpdir:\n        inst_dir = os.path.join(tmpdir, \"tree\")\n        populate_install_tree(inst_dir, path_map)\n\n        tmp_output = os.path.join(tmpdir, \"output.exe\")\n        zipapp.create_archive(\n            inst_dir, target=tmp_output, interpreter=args.python, main=args.main\n        )\n        os.replace(tmp_output, args.output)\n\n\ndef create_main_module(args, inst_dir, path_map):\n    if not args.main:\n        assert \"__main__.py\" in path_map\n        return\n\n    dest_path = os.path.join(inst_dir, \"__main__.py\")\n    main_module, main_fn = args.main.split(\":\")\n    main_contents = \"\"\"\\\n#!{python}\n\nif __name__ == \"__main__\":\n    import {main_module}\n    {main_module}.{main_fn}()\n\"\"\".format(\n        python=args.python, main_module=main_module, main_fn=main_fn\n    )\n    with open(dest_path, \"w\") as f:\n        f.write(main_contents)\n    os.chmod(dest_path, 0o755)\n\n\ndef build_install_dir(args, path_map):\n    \"\"\"Create a directory that contains all of the sources, with a __main__\n    module to run the program.\n    \"\"\"\n    # Populate a temporary directory first, then rename to the destination\n    # location.  This ensures that we don't ever leave a halfway-built\n    # directory behind at the output path if something goes wrong.\n    dest_dir = os.path.dirname(args.output)\n    with tempfile.TemporaryDirectory(prefix=\"make_fbpy.\", dir=dest_dir) as tmpdir:\n        inst_dir = os.path.join(tmpdir, \"tree\")\n        populate_install_tree(inst_dir, path_map)\n        create_main_module(args, inst_dir, path_map)\n        os.rename(inst_dir, args.output)\n\n\ndef ensure_directory(path):\n    try:\n        os.makedirs(path)\n    except OSError as ex:\n        if ex.errno != errno.EEXIST:\n            raise\n\n\ndef install_library(args, path_map):\n    \"\"\"Create an installation directory a python library.\"\"\"\n    out_dir = args.output\n    out_manifest = args.output + \".manifest\"\n\n    install_dir = args.install_dir\n    if not install_dir:\n        install_dir = out_dir\n\n    os.makedirs(out_dir)\n    with open(out_manifest, \"w\") as manifest:\n        manifest.write(MANIFEST_HEADER_V1)\n        for info in path_map.values():\n            abs_dest = os.path.join(out_dir, info.dest)\n            ensure_directory(os.path.dirname(abs_dest))\n            print(\"copy %r --> %r\" % (info.src, abs_dest))\n            shutil.copy2(info.src, abs_dest)\n            installed_dest = os.path.join(install_dir, info.dest)\n            manifest.write(\"%s%s%s\\n\" % (installed_dest, MANIFEST_SEPARATOR, info.dest))\n\n\ndef parse_manifests(args):\n    # Process args.manifest_separator to help support older versions of CMake\n    if args.manifest_separator:\n        manifests = []\n        for manifest_arg in args.manifests:\n            split_arg = manifest_arg.split(args.manifest_separator)\n            manifests.extend(split_arg)\n        args.manifests = manifests\n\n    path_map = {}\n    for manifest in args.manifests:\n        parse_manifest(manifest, path_map)\n\n    return path_map\n\n\ndef check_main_module(args, path_map):\n    # Translate an empty string in the --main argument to None,\n    # just to allow the CMake logic to be slightly simpler and pass in an\n    # empty string when it really wants the default __main__.py module to be\n    # used.\n    if args.main == \"\":\n        args.main = None\n\n    if args.type == \"lib-install\":\n        if args.main is not None:\n            raise UsageError(\"cannot specify a --main argument with --type=lib-install\")\n        return\n\n    main_info = path_map.get(\"__main__.py\")\n    if args.main:\n        if main_info is not None:\n            msg = (\n                \"specified an explicit main module with --main, \"\n                \"but the file listing already includes __main__.py\"\n            )\n            raise BadManifestError(\n                main_info.manifest_path, main_info.manifest_line, msg\n            )\n        parts = args.main.split(\":\")\n        if len(parts) != 2:\n            raise UsageError(\n                \"argument to --main must be of the form MODULE:CALLABLE \"\n                \"(received %s)\" % (args.main,)\n            )\n    else:\n        if main_info is None:\n            raise UsageError(\n                \"no main module specified with --main, \"\n                \"and no __main__.py module present\"\n            )\n\n\nBUILD_TYPES = {\n    \"pex\": build_pex,\n    \"zipapp\": build_zipapp,\n    \"dir\": build_install_dir,\n    \"lib-install\": install_library,\n}\n\n\ndef main():\n    ap = argparse.ArgumentParser()\n    ap.add_argument(\"-o\", \"--output\", required=True, help=\"The output file path\")\n    ap.add_argument(\n        \"--install-dir\",\n        help=\"When used with --type=lib-install, this parameter specifies the \"\n        \"final location where the library where be installed.  This can be \"\n        \"used to generate the library in one directory first, when you plan \"\n        \"to move or copy it to another final location later.\",\n    )\n    ap.add_argument(\n        \"--manifest-separator\",\n        help=\"Split manifest arguments around this separator.  This is used \"\n        \"to support older versions of CMake that cannot supply the manifests \"\n        \"as separate arguments.\",\n    )\n    ap.add_argument(\n        \"--main\",\n        help=\"The main module to run, specified as <module>:<callable>.  \"\n        \"This must be specified if and only if the archive does not contain \"\n        \"a __main__.py file.\",\n    )\n    ap.add_argument(\n        \"--python\",\n        help=\"Explicitly specify the python interpreter to use for the \" \"executable.\",\n    )\n    ap.add_argument(\n        \"--type\", choices=BUILD_TYPES.keys(), help=\"The type of output to build.\"\n    )\n    ap.add_argument(\n        \"manifests\",\n        nargs=\"+\",\n        help=\"The manifest files specifying how to construct the archive\",\n    )\n    args = ap.parse_args()\n\n    if args.python is None:\n        args.python = sys.executable\n\n    if args.type is None:\n        # In the future we might want different default output types\n        # for different platforms.\n        args.type = \"zipapp\"\n    build_fn = BUILD_TYPES[args.type]\n\n    try:\n        path_map = parse_manifests(args)\n        check_main_module(args, path_map)\n    except UsageError as ex:\n        print(\"error: %s\" % (ex,), file=sys.stderr)\n        sys.exit(1)\n\n    build_fn(args, path_map)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "build/fbcode_builder/LICENSE",
    "content": "MIT License\n\nCopyright (c) Facebook, Inc. and its affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "build/fbcode_builder/README.md",
    "content": "# Easy builds for Facebook projects\n\nThis directory contains tools designed to simplify continuous-integration\n(and other builds) of Facebook open source projects.  In particular, this helps\nmanage builds for cross-project dependencies.\n\nThe main entry point is the `getdeps.py` script.  This script has several\nsubcommands, but the most notable is the `build` command.  This will download\nand build all dependencies for a project, and then build the project itself.\n\n## Deployment\n\nThis directory is copied literally into a number of different Facebook open\nsource repositories.  Any change made to code in this directory will be\nautomatically be replicated by our open source tooling into all GitHub hosted\nrepositories that use `fbcode_builder`.  Typically this directory is copied\ninto the open source repositories as `build/fbcode_builder/`.\n\n\n# Project Configuration Files\n\nThe `manifests` subdirectory contains configuration files for many different\nprojects, describing how to build each project.  These files also list\ndependencies between projects, enabling `getdeps.py` to build all dependencies\nfor a project before building the project itself.\n\n\n# Shared CMake utilities\n\nSince this directory is copied into many Facebook open source repositories,\nit is also used to help share some CMake utility files across projects.  The\n`CMake/` subdirectory contains a number of `.cmake` files that are shared by\nthe CMake-based build systems across several different projects.\n\n\n# Older Build Scripts\n\nThis directory also still contains a handful of older build scripts that\npre-date the current `getdeps.py` build system.  Most of the other `.py` files\nin this top directory, apart from `getdeps.py` itself, are from this older\nbuild system.  This older system is only used by a few remaining projects, and\nnew projects should generally use the newer `getdeps.py` script, by adding a\nnew configuration file in the `manifests/` subdirectory.\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/__init__.py",
    "content": "# pyre-strict\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/builder.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\nfrom __future__ import annotations\n\nimport glob\nimport json\nimport os\nimport os.path\nimport pathlib\nimport re\nimport shutil\nimport stat\nimport subprocess\nimport sys\nimport typing\nfrom collections.abc import Callable, Sequence\nfrom shlex import quote as shellquote\n\nfrom .copytree import rmtree_more, simple_copytree\nfrom .dyndeps import create_dyn_dep_munger\nfrom .envfuncs import add_path_entry, Env, path_search\nfrom .fetcher import copy_if_different, is_public_commit\nfrom .runcmd import make_memory_limit_preexec_fn, run_cmd\n\nif typing.TYPE_CHECKING:\n    from .buildopts import BuildOptions\n    from .dyndeps import DepBase\n    from .load import ManifestLoader\n    from .manifest import ManifestContext, ManifestParser\n\n\nclass BuilderBase:\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        build_dir: str | None,\n        inst_dir: str,\n        env: Env | None = None,\n        final_install_prefix: str | None = None,\n    ) -> None:\n        self.env: Env = Env()\n        if env:\n            # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got\n            #  `Env`.\n            self.env.update(env)\n\n        subdir: str | None = manifest.get(\"build\", \"subdir\", ctx=ctx)\n        if subdir:\n            src_dir = os.path.join(src_dir, subdir)\n\n        self.patchfile: str | None = manifest.get(\"build\", \"patchfile\", ctx=ctx)\n        self.patchfile_opts: str = (\n            manifest.get(\"build\", \"patchfile_opts\", ctx=ctx) or \"\"\n        )\n        self.ctx: ManifestContext = ctx\n        self.src_dir: str = src_dir\n        self.build_dir: str = build_dir or src_dir\n        self.inst_dir: str = inst_dir\n        self.build_opts: BuildOptions = build_opts\n        self.manifest: ManifestParser = manifest\n        self.final_install_prefix: str | None = final_install_prefix\n        self.loader: ManifestLoader = loader\n        self.dep_manifests: list[ManifestParser] = dep_manifests\n        self.install_dirs: list[str] = [\n            loader.get_project_install_dir(m) for m in dep_manifests\n        ]\n\n    def _get_cmd_prefix(self) -> list[str]:\n        if self.build_opts.is_windows():\n            vcvarsall = self.build_opts.get_vcvars_path()\n            if vcvarsall is not None:\n                # Since it sets rather a large number of variables we mildly abuse\n                # the cmd quoting rules to assemble a command that calls the script\n                # to prep the environment and then triggers the actual command that\n                # we wanted to run.\n\n                # Due to changes in vscrsall.bat, it now reports an ERRORLEVEL of 1\n                # even when succeeding. This occurs when an extension is not present.\n                # To continue, we must ignore the ERRORLEVEL returned. We do this by\n                # wrapping the call in a batch file that always succeeds.\n                wrapper = os.path.join(self.build_dir, \"succeed.bat\")\n                with open(wrapper, \"w\") as f:\n                    f.write(\"@echo off\\n\")\n                    f.write(f'call \"{vcvarsall}\" amd64\\n')\n                    f.write(\"set ERRORLEVEL=0\\n\")\n                    f.write(\"exit /b 0\\n\")\n                return [wrapper, \"&&\"]\n        return []\n\n    def _check_cmd(self, cmd: list[str], **kwargs: object) -> None:\n        \"\"\"Run the command and abort on failure\"\"\"\n        # pyre-fixme[6]: For 2nd argument expected `Optional[Env]` but got `object`.\n        # pyre-fixme[6]: For 2nd argument expected `Optional[str]` but got `object`.\n        # pyre-fixme[6]: For 2nd argument expected `bool` but got `object`.\n        rc = self._run_cmd(cmd, **kwargs)\n        if rc != 0:\n            raise RuntimeError(f\"Failure exit code {rc} for command {cmd}\")\n\n    def _run_cmd(\n        self,\n        cmd: list[str],\n        cwd: str | None = None,\n        env: Env | None = None,\n        use_cmd_prefix: bool = True,\n        allow_fail: bool = False,\n        preexec_fn: Callable[[], None] | None = None,\n    ) -> int:\n        if env:\n            e = self.env.copy()\n            # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got\n            #  `Env`.\n            e.update(env)\n            env = e\n        else:\n            env = self.env\n\n        if use_cmd_prefix:\n            cmd_prefix = self._get_cmd_prefix()\n            if cmd_prefix:\n                cmd = cmd_prefix + cmd\n\n        log_file = os.path.join(self.build_dir, \"getdeps_build.log\")\n        return run_cmd(\n            cmd=cmd,\n            env=env,\n            cwd=cwd or self.build_dir,\n            log_file=log_file,\n            allow_fail=allow_fail,\n            preexec_fn=preexec_fn,\n        )\n\n    def _reconfigure(self, reconfigure: bool) -> bool:\n        if self.build_dir is not None:\n            if not os.path.isdir(self.build_dir):\n                os.makedirs(self.build_dir)\n                reconfigure = True\n        return reconfigure\n\n    def _apply_patchfile(self) -> None:\n        if self.patchfile is None:\n            return\n        patched_sentinel_file = pathlib.Path(self.src_dir + \"/.getdeps_patched\")\n        if patched_sentinel_file.exists():\n            return\n        old_wd = os.getcwd()\n        os.chdir(self.src_dir)\n        # Apply patches from the git repo root so paths resolve correctly\n        # even when src_dir is a subdirectory of the repo.\n        try:\n            git_root = subprocess.check_output(\n                [\"git\", \"rev-parse\", \"--show-toplevel\"], text=True\n            ).strip()\n            os.chdir(git_root)\n        except subprocess.CalledProcessError:\n            pass  # not a git repo, stay in src_dir\n        print(f\"Patching {self.manifest.name} with {self.patchfile} in {os.getcwd()}\")\n        patchfile = os.path.join(\n            self.build_opts.fbcode_builder_dir,\n            \"patches\",\n            # pyre-fixme[6]: For 3rd argument expected `Union[PathLike[str], str]`\n            #  but got `Optional[str]`.\n            self.patchfile,\n        )\n        patchcmd = [\"git\", \"apply\", \"--ignore-space-change\"]\n        if self.patchfile_opts:\n            patchcmd.append(self.patchfile_opts)\n        try:\n            subprocess.check_call(patchcmd + [patchfile])\n        except subprocess.CalledProcessError:\n            raise ValueError(f\"Failed to apply patch to {self.manifest.name}\")\n        os.chdir(old_wd)\n        patched_sentinel_file.touch()\n\n    def prepare(self, reconfigure: bool) -> None:\n        print(\"Preparing %s...\" % self.manifest.name)\n        reconfigure = self._reconfigure(reconfigure)\n        self._apply_patchfile()\n        self._prepare(reconfigure=reconfigure)\n\n    def debug(self, reconfigure: bool) -> None:\n        reconfigure = self._reconfigure(reconfigure)\n        self._apply_patchfile()\n        self._prepare(reconfigure=reconfigure)\n        env = self._compute_env()\n        print(\"Starting a shell in %s, ^D to exit...\" % self.build_dir)\n        # TODO: print the command to run the build\n        shell = [\"powershell.exe\"] if sys.platform == \"win32\" else [\"/bin/sh\", \"-i\"]\n        self._run_cmd(shell, cwd=self.build_dir, env=env)\n\n    def printenv(self, reconfigure: bool) -> None:\n        \"\"\"print the environment in a shell sourcable format\"\"\"\n        reconfigure = self._reconfigure(reconfigure)\n        self._apply_patchfile()\n        self._prepare(reconfigure=reconfigure)\n        env = self._compute_env(env=Env(src={}))\n        prefix = \"export \"\n        sep = \":\"\n        expand = \"$\"\n        expandpost = \"\"\n        if self.build_opts.is_windows():\n            prefix = \"SET \"\n            sep = \";\"\n            expand = \"%\"\n            expandpost = \"%\"\n        for k, v in sorted(env.items()):\n            existing = os.environ.get(k, None)\n            if k.endswith(\"PATH\") and existing:\n                v = shellquote(v) + sep + f\"{expand}{k}{expandpost}\"\n            else:\n                v = shellquote(v)\n            print(\"%s%s=%s\" % (prefix, k, v))\n\n    def build(self, reconfigure: bool) -> None:\n        print(\"Building %s...\" % self.manifest.name)\n        reconfigure = self._reconfigure(reconfigure)\n        self._apply_patchfile()\n        self._prepare(reconfigure=reconfigure)\n        self._build(reconfigure=reconfigure)\n\n        if self.build_opts.free_up_disk:\n            # don't clean --src-dir=. case as user may want to build again or run tests on the build\n            if self.src_dir.startswith(self.build_opts.scratch_dir) and os.path.isdir(\n                self.build_dir\n            ):\n                if os.path.islink(self.build_dir):\n                    os.remove(self.build_dir)\n                else:\n                    rmtree_more(self.build_dir)\n        elif self.build_opts.is_windows():\n            # On Windows, emit a wrapper script that can be used to run build artifacts\n            # directly from the build directory, without installing them.  On Windows $PATH\n            # needs to be updated to include all of the directories containing the runtime\n            # library dependencies in order to run the binaries.\n            script_path = self.get_dev_run_script_path()\n            dep_munger = create_dyn_dep_munger(\n                self.build_opts, self._compute_env(), self.install_dirs\n            )\n            dep_dirs = self.get_dev_run_extra_path_dirs(dep_munger)\n            # pyre-fixme[16]: Optional type has no attribute `emit_dev_run_script`.\n            dep_munger.emit_dev_run_script(script_path, dep_dirs)\n\n    @property\n    def _job_weight_mib(self) -> int:\n        # This is a hack, but we don't have a \"defaults manifest\" that we can\n        # customize per platform.\n        # TODO: Introduce some sort of defaults config that can select by\n        # platform, just like manifest contexts.\n        if sys.platform.startswith(\"freebsd\"):\n            # clang on FreeBSD is quite memory-efficient.\n            default_job_weight = 512\n        else:\n            # 1.5 GiB is a lot to assume, but it's typical of Facebook-style C++.\n            # Some manifests are even heavier and should override.\n            default_job_weight = 1536\n        return int(\n            self.manifest.get(\n                \"build\", \"job_weight_mib\", str(default_job_weight), ctx=self.ctx\n            )\n        )\n\n    @property\n    def num_jobs(self) -> int:\n        return self.build_opts.get_num_jobs(self._job_weight_mib)\n\n    @property\n    def memory_limit_preexec_fn(self) -> Callable[[], None] | None:\n        \"\"\"Return a preexec_fn that caps per-process virtual memory.\n\n        Uses the same job_weight_mib that controls parallelism, so the memory\n        limit is consistent with the parallelism budget.\n        \"\"\"\n        return make_memory_limit_preexec_fn(self._job_weight_mib)\n\n    def run_tests(\n        self,\n        schedule_type: str,\n        owner: str | None,\n        test_filter: str | None,\n        test_exclude: str | None,\n        retry: int,\n        no_testpilot: bool,\n        timeout: int | None = None,\n    ) -> None:\n        \"\"\"Execute any tests that we know how to run.  If they fail,\n        raise an exception.\"\"\"\n        pass\n\n    def _prepare(self, reconfigure: bool) -> None:\n        \"\"\"Prepare the build. Useful when need to generate config,\n        but builder is not the primary build system.\n        e.g. cargo when called from cmake\"\"\"\n        pass\n\n    def _build(self, reconfigure: bool) -> None:\n        \"\"\"Perform the build.\n        reconfigure will be set to true if the fetcher determined\n        that the sources have changed in such a way that the build\n        system needs to regenerate its rules.\"\"\"\n        pass\n\n    def _compute_env(self, env: Env | None = None) -> Env:\n        if env is None:\n            env = self.env\n        # CMAKE_PREFIX_PATH is only respected when passed through the\n        # environment, so we construct an appropriate path to pass down\n        return self.build_opts.compute_env_for_install_dirs(\n            self.loader,\n            self.dep_manifests,\n            self.ctx,\n            env=env,\n            manifest=self.manifest,\n        )\n\n    def get_dev_run_script_path(self) -> str:\n        assert self.build_opts.is_windows()\n        return os.path.join(self.build_dir, \"run.ps1\")\n\n    def get_dev_run_extra_path_dirs(\n        self, dep_munger: DepBase | None = None\n    ) -> list[str]:\n        assert self.build_opts.is_windows()\n        if dep_munger is None:\n            dep_munger = create_dyn_dep_munger(\n                self.build_opts, self._compute_env(), self.install_dirs\n            )\n        # pyre-fixme[16]: Optional type has no attribute `compute_dependency_paths`.\n        return dep_munger.compute_dependency_paths(self.build_dir)\n\n\nclass MakeBuilder(BuilderBase):\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n        build_args: list[str] | None,\n        install_args: list[str] | None,\n        test_args: list[str] | None,\n    ) -> None:\n        super(MakeBuilder, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n        )\n        self.build_args: list[str] = build_args or []\n        self.install_args: list[str] = install_args or []\n        self.test_args: list[str] | None = test_args\n\n    @property\n    def _make_binary(self) -> str | None:\n        return self.manifest.get(\"build\", \"make_binary\", \"make\", ctx=self.ctx)\n\n    def _get_prefix(self) -> list[str]:\n        return [\"PREFIX=\" + self.inst_dir, \"prefix=\" + self.inst_dir]\n\n    def _build(self, reconfigure: bool) -> None:\n\n        env = self._compute_env()\n\n        # Need to ensure that PREFIX is set prior to install because\n        # libbpf uses it when generating its pkg-config file.\n        # The lowercase prefix is used by some projects.\n        cmd = (\n            [self._make_binary, \"-j%s\" % self.num_jobs]\n            + self.build_args\n            + self._get_prefix()\n        )\n        # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n        #  `List[Optional[str]]`.\n        self._check_cmd(cmd, env=env)\n\n        install_cmd = [self._make_binary] + self.install_args + self._get_prefix()\n        # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n        #  `List[Optional[str]]`.\n        self._check_cmd(install_cmd, env=env)\n\n        # bz2's Makefile doesn't install its .so properly\n        if self.manifest and self.manifest.name == \"bz2\":\n            libdir = os.path.join(self.inst_dir, \"lib\")\n            srcpattern = os.path.join(self.src_dir, \"lib*.so.*\")\n            print(f\"copying to {libdir} from {srcpattern}\")\n            for file in glob.glob(srcpattern):\n                shutil.copy(file, libdir)\n\n    def run_tests(\n        self,\n        schedule_type: str,\n        owner: str | None,\n        test_filter: str | None,\n        test_exclude: str | None,\n        retry: int,\n        no_testpilot: bool,\n        timeout: int | None = None,\n    ) -> None:\n        if not self.test_args:\n            return\n\n        env = self._compute_env()\n        if test_filter:\n            env[\"GETDEPS_TEST_FILTER\"] = test_filter\n        else:\n            env[\"GETDEPS_TEST_FILTER\"] = \"\"\n\n        if retry:\n            # pyre-fixme[6]: Expected `str` but got `int`.\n            env[\"GETDEPS_TEST_RETRY\"] = retry\n        else:\n            # pyre-fixme[6]: Expected `str` but got `int`.\n            env[\"GETDEPS_TEST_RETRY\"] = 0\n\n        if timeout is not None:\n            env[\"GETDEPS_TEST_TIMEOUT\"] = str(timeout)\n\n        cmd = (\n            [self._make_binary, \"-j%s\" % self.num_jobs]\n            # pyre-fixme[58]: `+` is not supported for operand types\n            #  `list[Optional[str]]` and `Optional[list[str]]`.\n            + self.test_args\n            + self._get_prefix()\n        )\n        # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n        #  `List[Optional[str]]`.\n        self._check_cmd(cmd, allow_fail=False, env=env)\n\n\nclass CMakeBootStrapBuilder(MakeBuilder):\n    def _build(self, reconfigure: bool) -> None:\n        self._check_cmd(\n            [\n                \"./bootstrap\",\n                \"--prefix=\" + self.inst_dir,\n                f\"--parallel={self.num_jobs}\",\n            ]\n        )\n        super(CMakeBootStrapBuilder, self)._build(reconfigure)\n\n\nclass AutoconfBuilder(BuilderBase):\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n        args: list[str] | None,\n        conf_env_args: dict[str, list[str]] | None,\n    ) -> None:\n        super(AutoconfBuilder, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n        )\n        self.args: list[str] = args or []\n        if (\n            not build_opts.shared_libs\n            and \"--disable-shared\" not in self.args\n            and \"--enable-shared\" not in self.args\n        ):\n            self.args.append(\"--disable-shared\")\n        self.conf_env_args: dict[str, list[str]] = conf_env_args or {}\n\n    @property\n    def _make_binary(self) -> str | None:\n        return self.manifest.get(\"build\", \"make_binary\", \"make\", ctx=self.ctx)\n\n    def _build(self, reconfigure: bool) -> None:\n        configure_path = os.path.join(self.src_dir, \"configure\")\n        autogen_path = os.path.join(self.src_dir, \"autogen.sh\")\n\n        env = self._compute_env()\n\n        # Some configure scripts need additional env values passed derived from cmds\n        for k, cmd_args in self.conf_env_args.items():\n            out = (\n                subprocess.check_output(cmd_args, env=dict(env.items()))\n                .decode(\"utf-8\")\n                .strip()\n            )\n            if out:\n                env.set(k, out)\n\n        if not os.path.exists(configure_path):\n            print(\"%s doesn't exist, so reconfiguring\" % configure_path)\n            # This libtoolize call is a bit gross; the issue is that\n            # `autoreconf` as invoked by libsodium's `autogen.sh` doesn't\n            # seem to realize that it should invoke libtoolize and then\n            # error out when the configure script references a libtool\n            # related symbol.\n            self._check_cmd([\"libtoolize\"], cwd=self.src_dir, env=env)\n\n            # We generally prefer to call the `autogen.sh` script provided\n            # by the project on the basis that it may know more than plain\n            # autoreconf does.\n            if os.path.exists(autogen_path):\n                self._check_cmd([\"bash\", autogen_path], cwd=self.src_dir, env=env)\n            else:\n                self._check_cmd([\"autoreconf\", \"-ivf\"], cwd=self.src_dir, env=env)\n        configure_cmd = [configure_path, \"--prefix=\" + self.inst_dir] + self.args\n        self._check_cmd(configure_cmd, env=env)\n        only_install = self.manifest.get(\"build\", \"only_install\", ctx=self.ctx)\n        if not only_install or only_install.lower() == \"false\":\n            # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n            #  `List[Optional[str]]`.\n            self._check_cmd([self._make_binary, \"-j%s\" % self.num_jobs], env=env)\n        # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n        #  `List[Union[str, None, str]]`.\n        self._check_cmd([self._make_binary, \"install\"], env=env)\n\n\nclass Iproute2Builder(BuilderBase):\n    # ./configure --prefix does not work for iproute2.\n    # Thus, explicitly copy sources from src_dir to build_dir, build,\n    # and then install to inst_dir using DESTDIR\n    # lastly, also copy include from build_dir to inst_dir\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n    ) -> None:\n        super(Iproute2Builder, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n        )\n\n    def _build(self, reconfigure: bool) -> None:\n        configure_path = os.path.join(self.src_dir, \"configure\")\n        env = self.env.copy()\n        self._check_cmd([configure_path], env=env)\n        shutil.rmtree(self.build_dir)\n        shutil.copytree(self.src_dir, self.build_dir)\n        self._check_cmd([\"make\", \"-j%s\" % self.num_jobs], env=env)\n        install_cmd = [\"make\", \"install\", \"DESTDIR=\" + self.inst_dir]\n\n        for d in [\"include\", \"lib\"]:\n            if not os.path.isdir(os.path.join(self.inst_dir, d)):\n                shutil.copytree(\n                    os.path.join(self.build_dir, d), os.path.join(self.inst_dir, d)\n                )\n\n        self._check_cmd(install_cmd, env=env)\n\n\nclass MesonBuilder(BuilderBase):\n    # MesonBuilder assumes that meson build tool has already been installed on\n    # the machine.\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n    ) -> None:\n        super(MesonBuilder, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n        )\n\n    def _build(self, reconfigure: bool) -> None:\n        env = self._compute_env()\n        # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got `Env`.\n        meson: str | None = path_search(env, \"meson\")\n        if meson is None:\n            raise Exception(\"Failed to find Meson\")\n\n        setup_args = self.manifest.get_section_as_args(\"meson.setup_args\", self.ctx)\n\n        # Meson builds typically require setup, compile, and install steps.\n        # During this setup step we ensure that the static library is built and\n        # the prefix is empty.\n        self._check_cmd(\n            [\n                meson,\n                \"setup\",\n            ]\n            + setup_args\n            + [\n                self.build_dir,\n                self.src_dir,\n            ]\n        )\n\n        # Compile step needs to satisfy the build directory that was previously\n        # prepared during setup.\n        self._check_cmd([meson, \"compile\", \"-C\", self.build_dir])\n\n        # Install step\n        self._check_cmd(\n            [meson, \"install\", \"-C\", self.build_dir, \"--destdir\", self.inst_dir]\n        )\n\n\nclass CMakeBuilder(BuilderBase):\n    MANUAL_BUILD_SCRIPT = \"\"\"\\\n#!{sys.executable}\n\n\nimport argparse\nimport subprocess\nimport sys\n\nCMAKE = {cmake!r}\nCTEST = {ctest!r}\nSRC_DIR = {src_dir!r}\nBUILD_DIR = {build_dir!r}\nINSTALL_DIR = {install_dir!r}\nCMD_PREFIX = {cmd_prefix!r}\nCMAKE_ENV = {env_str}\nCMAKE_DEFINE_ARGS = {define_args_str}\n\n\ndef get_jobs_argument(num_jobs_arg: int) -> str:\n    if num_jobs_arg > 0:\n        return \"-j\" + str(num_jobs_arg)\n\n    import multiprocessing\n    num_jobs = multiprocessing.cpu_count() // 2\n    return \"-j\" + str(num_jobs)\n\n\ndef main():\n    ap = argparse.ArgumentParser()\n    ap.add_argument(\n      \"cmake_args\",\n      nargs=argparse.REMAINDER,\n      help='Any extra arguments after an \"--\" argument will be passed '\n      \"directly to CMake.\"\n    )\n    ap.add_argument(\n      \"--mode\",\n      choices=[\"configure\", \"build\", \"install\", \"test\"],\n      default=\"configure\",\n      help=\"The mode to run: configure, build, or install.  \"\n      \"Defaults to configure\",\n    )\n    ap.add_argument(\n      \"--build\",\n      action=\"store_const\",\n      const=\"build\",\n      dest=\"mode\",\n      help=\"An alias for --mode=build\",\n    )\n    ap.add_argument(\n      \"-j\",\n      \"--num-jobs\",\n      action=\"store\",\n      type=int,\n      default=0,\n      help=\"Run the build or tests with the specified number of parallel jobs\",\n    )\n    ap.add_argument(\n      \"--install\",\n      action=\"store_const\",\n      const=\"install\",\n      dest=\"mode\",\n      help=\"An alias for --mode=install\",\n    )\n    ap.add_argument(\n      \"--test\",\n      action=\"store_const\",\n      const=\"test\",\n      dest=\"mode\",\n      help=\"An alias for --mode=test\",\n    )\n    args = ap.parse_args()\n\n    # Strip off a leading \"--\" from the additional CMake arguments\n    if args.cmake_args and args.cmake_args[0] == \"--\":\n        args.cmake_args = args.cmake_args[1:]\n\n    env = CMAKE_ENV\n\n    if args.mode == \"configure\":\n        full_cmd = CMD_PREFIX + [CMAKE, SRC_DIR] + CMAKE_DEFINE_ARGS + args.cmake_args\n    elif args.mode in (\"build\", \"install\"):\n        target = \"all\" if args.mode == \"build\" else \"install\"\n        full_cmd = CMD_PREFIX + [\n                CMAKE,\n                \"--build\",\n                BUILD_DIR,\n                \"--target\",\n                target,\n                \"--config\",\n                \"{build_type}\",\n                get_jobs_argument(args.num_jobs),\n        ] + args.cmake_args\n    elif args.mode == \"test\":\n        full_cmd = CMD_PREFIX + [\n            {dev_run_script}CTEST,\n            \"--output-on-failure\",\n            get_jobs_argument(args.num_jobs),\n        ] + args.cmake_args\n    else:\n        ap.error(\"unknown invocation mode: %s\" % (args.mode,))\n\n    cmd_str = \" \".join(full_cmd)\n    print(\"Running: %r\" % (cmd_str,))\n    proc = subprocess.run(full_cmd, env=env, cwd=BUILD_DIR)\n    sys.exit(proc.returncode)\n\n\nif __name__ == \"__main__\":\n    main()\n\"\"\"\n\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n        defines: dict[str, str] | None,\n        final_install_prefix: str | None = None,\n        extra_cmake_defines: dict[str, str] | None = None,\n        cmake_targets: list[str] | None = None,\n    ) -> None:\n        super(CMakeBuilder, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n            final_install_prefix=final_install_prefix,\n        )\n        self.defines: dict[str, str] = defines or {}\n        if extra_cmake_defines:\n            self.defines.update(extra_cmake_defines)\n        self.cmake_targets: list[str] = cmake_targets or [\"install\"]\n\n        if build_opts.is_windows():\n            try:\n                from .facebook.vcvarsall import extra_vc_cmake_defines\n            except ImportError:\n                pass\n            else:\n                self.defines.update(extra_vc_cmake_defines)\n\n        self.loader = loader\n        if build_opts.shared_libs:\n            self.defines[\"BUILD_SHARED_LIBS\"] = \"ON\"\n            self.defines[\"BOOST_LINK_STATIC\"] = \"OFF\"\n\n    def _invalidate_cache(self) -> None:\n        for name in [\n            \"CMakeCache.txt\",\n            \"CMakeFiles/CMakeError.log\",\n            \"CMakeFiles/CMakeOutput.log\",\n        ]:\n            name = os.path.join(self.build_dir, name)\n            if os.path.isdir(name):\n                shutil.rmtree(name)\n            elif os.path.exists(name):\n                os.unlink(name)\n\n    def _needs_reconfigure(self) -> bool:\n        for name in [\"CMakeCache.txt\", \"build.ninja\"]:\n            name = os.path.join(self.build_dir, name)\n            if not os.path.exists(name):\n                return True\n        return False\n\n    def _write_build_script(self, **kwargs: object) -> None:\n        # pyre-fixme[16]: `object` has no attribute `items`.\n        env_lines = [\"    {!r}: {!r},\".format(k, v) for k, v in kwargs[\"env\"].items()]\n        kwargs[\"env_str\"] = \"\\n\".join([\"{\"] + env_lines + [\"}\"])\n\n        if self.build_opts.is_windows():\n            kwargs[\"dev_run_script\"] = '\"powershell.exe\", {!r}, '.format(\n                self.get_dev_run_script_path()\n            )\n        else:\n            kwargs[\"dev_run_script\"] = \"\"\n\n        define_arg_lines = [\"[\"]\n        # pyre-fixme[16]: `object` has no attribute `__iter__`.\n        for arg in kwargs[\"define_args\"]:\n            # Replace the CMAKE_INSTALL_PREFIX argument to use the INSTALL_DIR\n            # variable that we define in the MANUAL_BUILD_SCRIPT code.\n            if arg.startswith(\"-DCMAKE_INSTALL_PREFIX=\"):\n                value = \"    {!r}.format(INSTALL_DIR),\".format(\n                    \"-DCMAKE_INSTALL_PREFIX={}\"\n                )\n            else:\n                value = \"    {!r},\".format(arg)\n            define_arg_lines.append(value)\n        define_arg_lines.append(\"]\")\n        kwargs[\"define_args_str\"] = \"\\n\".join(define_arg_lines)\n\n        # In order to make it easier for developers to manually run builds for\n        # CMake-based projects, write out some build scripts that can be used to invoke\n        # CMake manually.\n        build_script_path = os.path.join(self.build_dir, \"run_cmake.py\")\n        script_contents = self.MANUAL_BUILD_SCRIPT.format(**kwargs)\n        with open(build_script_path, \"wb\") as f:\n            f.write(script_contents.encode())\n        os.chmod(build_script_path, 0o755)\n\n    def _compute_cmake_define_args(self, env: Env) -> list[str]:\n        defines = {\n            \"CMAKE_INSTALL_PREFIX\": self.final_install_prefix or self.inst_dir,\n            \"BUILD_SHARED_LIBS\": \"OFF\",\n            # Some of the deps (rsocket) default to UBSAN enabled if left\n            # unspecified.  Some of the deps fail to compile in release mode\n            # due to warning->error promotion.  RelWithDebInfo is the happy\n            # medium.\n            \"CMAKE_BUILD_TYPE\": self.build_opts.build_type,\n        }\n\n        if \"SANDCASTLE\" not in os.environ:\n            # We sometimes see intermittent ccache related breakages on some\n            # of the FB internal CI hosts, so we prefer to disable ccache\n            # when running in that environment.\n            # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got\n            #  `Env`.\n            ccache = path_search(env, \"ccache\")\n            if ccache:\n                defines[\"CMAKE_CXX_COMPILER_LAUNCHER\"] = ccache\n        else:\n            # rocksdb does its own probing for ccache.\n            # Ensure that it is disabled on sandcastle\n            env[\"CCACHE_DISABLE\"] = \"1\"\n            # Some sandcastle hosts have broken ccache related dirs, and\n            # even though we've asked for it to be disabled ccache is\n            # still invoked by rocksdb's cmake.\n            # Redirect its config directory to somewhere that is guaranteed\n            # fresh to us, and that won't have any ccache data inside.\n            env[\"CCACHE_DIR\"] = f\"{self.build_opts.scratch_dir}/ccache\"\n\n        if \"GITHUB_ACTIONS\" in os.environ and self.build_opts.is_windows():\n            # GitHub actions: the host has both gcc and msvc installed, and\n            # the default behavior of cmake is to prefer gcc.\n            # Instruct cmake that we want it to use cl.exe; this is important\n            # because Boost prefers cl.exe and the mismatch results in cmake\n            # with gcc not being able to find boost built with cl.exe.\n            defines[\"CMAKE_C_COMPILER\"] = \"cl.exe\"\n            defines[\"CMAKE_CXX_COMPILER\"] = \"cl.exe\"\n\n        if self.build_opts.is_darwin():\n            # Try to persuade cmake to set the rpath to match the lib\n            # dirs of the dependencies.  This isn't automatic, and to\n            # make things more interesting, cmake uses `;` as the path\n            # separator, so translate the runtime path to something\n            # that cmake will parse\n            defines[\"CMAKE_INSTALL_RPATH\"] = \";\".join(\n                # pyre-fixme[16]: Optional type has no attribute `split`.\n                env.get(\"DYLD_LIBRARY_PATH\", \"\").split(\":\")\n            )\n            # Tell cmake that we want to set the rpath in the tree\n            # at build time.  Without this the rpath is only set\n            # at the moment that the binaries are installed.  That\n            # default is problematic for example when using the\n            # gtest integration in cmake which runs the built test\n            # executables during the build to discover the set of\n            # tests.\n            defines[\"CMAKE_BUILD_WITH_INSTALL_RPATH\"] = \"ON\"\n\n        defines.update(self.defines)\n        define_args = [\"-D%s=%s\" % (k, v) for (k, v) in defines.items()]\n\n        # if self.build_opts.is_windows():\n        #    define_args += [\"-G\", \"Visual Studio 15 2017 Win64\"]\n        define_args += [\"-G\", \"Ninja\"]\n\n        return define_args\n\n    def _run_include_rewriter(self) -> None:\n        \"\"\"Run include path rewriting on source files before building.\"\"\"\n        from .include_rewriter import rewrite_includes_from_manifest\n\n        print(f\"Rewriting include paths for {self.manifest.name}...\")\n        try:\n            modified_count = rewrite_includes_from_manifest(\n                self.manifest, self.ctx, self.src_dir, verbose=True\n            )\n            if modified_count > 0:\n                print(f\"Successfully modified {modified_count} files\")\n            else:\n                print(\"No files needed modification\")\n        except Exception as e:\n            print(f\"Warning: Include path rewriting failed: {e}\")\n            # Don't fail the build for include rewriting issues\n\n    def _build(self, reconfigure: bool) -> None:\n        # Check if include rewriting is enabled\n        rewrite_includes: str | None = self.manifest.get(\n            \"build\", \"rewrite_includes\", \"false\", ctx=self.ctx\n        )\n        # pyre-fixme[16]: Optional type has no attribute `lower`.\n        if rewrite_includes.lower() == \"true\":\n            self._run_include_rewriter()\n\n        reconfigure = reconfigure or self._needs_reconfigure()\n\n        env = self._compute_env()\n        if not self.build_opts.is_windows() and self.final_install_prefix:\n            env[\"DESTDIR\"] = self.inst_dir\n\n        # Resolve the cmake that we installed\n        # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got `Env`.\n        cmake = path_search(env, \"cmake\")\n        if cmake is None:\n            raise Exception(\"Failed to find CMake\")\n\n        if self.build_opts.is_windows():\n            checkdir = self.src_dir\n            if os.path.exists(checkdir):\n                children = os.listdir(checkdir)\n                print(f\"Building from source {checkdir} contents: {children}\")\n            else:\n                print(f\"Source {checkdir} not found\")\n\n        if reconfigure:\n            define_args = self._compute_cmake_define_args(env)\n            self._write_build_script(\n                cmd_prefix=self._get_cmd_prefix(),\n                cmake=cmake,\n                # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but\n                #  got `Env`.\n                ctest=path_search(env, \"ctest\"),\n                env=env,\n                define_args=define_args,\n                src_dir=self.src_dir,\n                build_dir=self.build_dir,\n                install_dir=self.inst_dir,\n                sys=sys,\n                build_type=self.build_opts.build_type,\n            )\n\n            self._invalidate_cache()\n            self._check_cmd([cmake, self.src_dir] + define_args, env=env)\n\n        self._check_cmd(\n            # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n            #  `List[Optional[str]]`.\n            [cmake, \"--build\", self.build_dir, \"--target\"]\n            + self.cmake_targets\n            + [\n                \"--config\",\n                self.build_opts.build_type,\n                \"-j\",\n                str(self.num_jobs),\n            ],\n            env=env,\n            preexec_fn=self.memory_limit_preexec_fn,\n        )\n\n    def _build_targets(self, targets: Sequence[str]) -> None:\n        \"\"\"Build one or more cmake targets in parallel.\n\n        Args:\n            targets: Sequence of target names (strings) to build\n        \"\"\"\n        if not targets:\n            return\n\n        env = self._compute_env()\n        # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got `Env`.\n        cmake = path_search(env, \"cmake\")\n        if cmake is None:\n            raise RuntimeError(\"unable to find cmake\")\n\n        # Build all targets in a single cmake invocation for better parallelism\n        cmd = [\n            cmake,\n            \"--build\",\n            self.build_dir,\n        ]\n\n        # Add all targets\n        for target in targets:\n            cmd.extend([\"--target\", target])\n\n        cmd.extend(\n            # pyre-fixme[6]: For 1st argument expected `Iterable[str]` but got\n            #  `Iterable[Union[str, str, None, str]]`.\n            [\n                \"--config\",\n                self.build_opts.build_type,\n                \"-j\",\n                str(self.num_jobs),\n            ]\n        )\n\n        self._check_cmd(cmd, env=env, preexec_fn=self.memory_limit_preexec_fn)\n\n    def _get_missing_test_executables(\n        self, test_filter: str | None, env: Env, ctest: str | None\n    ) -> set[str]:\n        \"\"\"Discover which test executables are missing for the given filter.\n        Returns a set of missing executable basenames (without path).\"\"\"\n        if ctest is None:\n            return set()\n\n        # Run ctest -N (show tests without running) with the filter to see which tests match\n        cmd = [ctest, \"-N\"]\n        if test_filter:\n            cmd += [\"-R\", test_filter]\n\n        try:\n            output = subprocess.check_output(\n                cmd,\n                env=dict(env.items()),\n                cwd=self.build_dir,\n                stderr=subprocess.STDOUT,\n                text=True,\n            )\n        except subprocess.CalledProcessError as e:\n            # If ctest fails, it might be because executables don't exist yet\n            # Parse the error output to find the missing executables\n            output = e.output\n\n        # Parse output to find missing executable paths\n        # Look for lines like \"Could not find executable /path/to/test_binary\"\n        missing_executables = set()\n        for line in output.split(\"\\n\"):\n            match = re.search(r\"Could not find executable (.+)\", line)\n            if match:\n                exe_path = match.group(1)\n                exe_name = os.path.basename(exe_path)\n                missing_executables.add(exe_name)\n\n        return missing_executables\n\n    def run_tests(\n        self,\n        schedule_type: str,\n        owner: str | None,\n        test_filter: str | None,\n        test_exclude: str | None,\n        retry: int,\n        no_testpilot: bool,\n        timeout: int | None = None,\n    ) -> None:\n        env = self._compute_env()\n        # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got `Env`.\n        ctest: str | None = path_search(env, \"ctest\")\n        # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got `Env`.\n        cmake = path_search(env, \"cmake\")\n\n        # Build only the missing test executables needed for the given filter.\n        # This is especially important for LocalDirFetcher projects (like fboss)\n        # where the build marker gets removed when building specific cmake targets.\n        missing_test_executables = self._get_missing_test_executables(\n            test_filter, env, ctest\n        )\n        if missing_test_executables:\n            sorted_executables = sorted(missing_test_executables)\n            print(f\"Building missing test executables: {', '.join(sorted_executables)}\")\n            # Build all missing executables in one cmake invocation for better parallelism\n            self._build_targets(sorted_executables)\n\n        def require_command(path: str | None, name: str) -> str:\n            if path is None:\n                raise RuntimeError(\"unable to find command `{}`\".format(name))\n            return path\n\n        # On Windows, we also need to update $PATH to include the directories that\n        # contain runtime library dependencies.  This is not needed on other platforms\n        # since CMake will emit RPATH properly in the binary so they can find these\n        # dependencies.\n        if self.build_opts.is_windows():\n            path_entries = self.get_dev_run_extra_path_dirs()\n            path = env.get(\"PATH\")\n            if path:\n                path_entries.insert(0, path)\n            env[\"PATH\"] = \";\".join(path_entries)\n\n        # Don't use the cmd_prefix when running tests.  This is vcvarsall.bat on\n        # Windows.  vcvarsall.bat is only needed for the build, not tests.  It\n        # unfortunately fails if invoked with a long PATH environment variable when\n        # running the tests.\n        use_cmd_prefix = False\n\n        def get_property(\n            test: dict[str, object], propname: str, defval: object = None\n        ) -> object:\n            \"\"\"extracts a named property from a cmake test info json blob.\n            The properties look like:\n            [{\"name\": \"WORKING_DIRECTORY\"},\n             {\"value\": \"something\"}]\n            We assume that it is invalid for the same named property to be\n            listed more than once.\n            \"\"\"\n            props = test.get(\"properties\", [])\n            # pyre-fixme[16]: `object` has no attribute `__iter__`.\n            for p in props:\n                if p.get(\"name\", None) == propname:\n                    return p.get(\"value\", defval)\n            return defval\n\n        # pyre-fixme[53]: Captured variable `cmake` is not annotated.\n        # pyre-fixme[53]: Captured variable `env` is not annotated.\n        def list_tests() -> list[dict[str, object]]:\n            output = subprocess.check_output(\n                [require_command(ctest, \"ctest\"), \"--show-only=json-v1\"],\n                env=env,\n                cwd=self.build_dir,\n            )\n            try:\n                data = json.loads(output.decode(\"utf-8\"))\n            except ValueError as exc:\n                raise Exception(\n                    \"Failed to decode cmake test info using %s: %s.  Output was: %r\"\n                    % (ctest, str(exc), output)\n                )\n\n            tests = []\n            machine_suffix = self.build_opts.host_type.as_tuple_string()\n            for test in data[\"tests\"]:\n                working_dir = get_property(test, \"WORKING_DIRECTORY\")\n                labels = []\n                machine_suffix = self.build_opts.host_type.as_tuple_string()\n                labels.append(\"tpx-fb-test-type=3\")\n                labels.append(\"tpx_test_config::buildsystem=getdeps\")\n                labels.append(\"tpx_test_config::platform={}\".format(machine_suffix))\n\n                if get_property(test, \"DISABLED\"):\n                    labels.append(\"disabled\")\n                command = test[\"command\"]\n                if working_dir:\n                    command = [\n                        require_command(cmake, \"cmake\"),\n                        \"-E\",\n                        \"chdir\",\n                        working_dir,\n                    ] + command\n\n                tests.append(\n                    {\n                        \"type\": \"custom\",\n                        \"target\": \"%s-%s-getdeps-%s\"\n                        % (self.manifest.name, test[\"name\"], machine_suffix),\n                        \"command\": command,\n                        \"labels\": labels,\n                        \"env\": {},\n                        \"required_paths\": [],\n                        \"contacts\": [],\n                        \"cwd\": os.getcwd(),\n                    }\n                )\n            return tests\n\n        discover_like_continuous = False\n        if schedule_type == \"continuous\" or (\n            schedule_type == \"base_retry\" and is_public_commit(self.build_opts)\n        ):\n            discover_like_continuous = True\n\n        if discover_like_continuous or schedule_type == \"testwarden\":\n            # for continuous and testwarden runs, disabling retry can give up\n            # better signals for flaky tests.\n            retry = 0\n\n        tpx = None\n        try:\n            from .facebook.testinfra import start_run\n\n            # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got\n            #  `Env`.\n            tpx = path_search(env, \"tpx\")\n        except ImportError:\n            # internal testinfra not available\n            pass\n\n        if tpx and not no_testpilot:\n            import os\n\n            buck_test_info = list_tests()\n\n            buck_test_info_name = os.path.join(self.build_dir, \".buck-test-info.json\")\n            with open(buck_test_info_name, \"w\") as f:\n                json.dump(buck_test_info, f)\n\n            env.set(\"http_proxy\", \"\")\n            env.set(\"https_proxy\", \"\")\n            runs = []\n\n            with start_run(env[\"FBSOURCE_HASH\"]) as run_id:\n                testpilot_args = [\n                    tpx,\n                    \"--force-local-execution\",\n                    \"--buck-test-info\",\n                    buck_test_info_name,\n                    \"--retry=%d\" % retry,\n                    \"-j=%s\" % str(self.num_jobs),\n                    \"--print-long-results\",\n                ]\n\n                if owner:\n                    testpilot_args += [\"--contacts\", owner]\n\n                if env:\n                    testpilot_args.append(\"--env\")\n                    testpilot_args.extend(f\"{key}={val}\" for key, val in env.items())\n\n                if run_id is not None:\n                    testpilot_args += [\"--run-id\", run_id]\n\n                if timeout is not None:\n                    testpilot_args += [\"--timeout\", str(timeout)]\n\n                if test_filter:\n                    testpilot_args += [\"--\", test_filter]\n\n                if schedule_type == \"diff\":\n                    runs.append([\"--collection\", \"oss-diff\", \"--purpose\", \"diff\"])\n                elif discover_like_continuous:\n                    runs.append(\n                        [\n                            \"--tag-new-tests\",\n                            \"--collection\",\n                            \"oss-continuous\",\n                            \"--purpose\",\n                            \"continuous\",\n                        ]\n                    )\n                elif schedule_type == \"testwarden\":\n                    # One run to assess new tests\n                    runs.append(\n                        [\n                            \"--tag-new-tests\",\n                            \"--collection\",\n                            \"oss-new-test-stress\",\n                            \"--stress-runs\",\n                            \"10\",\n                            \"--purpose\",\n                            \"stress-run-new-test\",\n                        ]\n                    )\n                    # And another for existing tests\n                    runs.append(\n                        [\n                            \"--tag-new-tests\",\n                            \"--collection\",\n                            \"oss-existing-test-stress\",\n                            \"--stress-runs\",\n                            \"10\",\n                            \"--purpose\",\n                            \"stress-run\",\n                        ]\n                    )\n                else:\n                    runs.append([])\n\n                for run in runs:\n                    # FIXME: What is this trying to accomplish? Should it fail on first or >=1 errors?\n                    self._run_cmd(\n                        testpilot_args + run,\n                        cwd=self.build_opts.fbcode_builder_dir,\n                        env=env,\n                        use_cmd_prefix=use_cmd_prefix,\n                    )\n        else:\n            args = [\n                require_command(ctest, \"ctest\"),\n                \"--output-on-failure\",\n                \"-j\",\n                str(self.num_jobs),\n            ]\n            if test_filter:\n                args += [\"-R\", test_filter]\n            if test_exclude:\n                args += [\"--exclude-regex\", test_exclude]\n            if timeout is not None:\n                args += [\"--timeout\", str(timeout)]\n\n            count: int = 0\n            retcode: int | None = -1\n            while count <= retry:\n                # FIXME: What is this trying to accomplish? Should it fail on first or >=1 errors?\n                retcode = self._check_cmd(\n                    args, env=env, use_cmd_prefix=use_cmd_prefix, allow_fail=True\n                )\n\n                if retcode == 0:\n                    break\n                if count == 0:\n                    # Only add this option in the second run.\n                    args += [\"--rerun-failed\"]\n                count += 1\n            if retcode is not None and retcode != 0:\n                # Allow except clause in getdeps.main to catch and exit gracefully\n                # This allows non-testpilot runs to fail through the same logic as failed testpilot runs, which may become handy in case if post test processing is needed in the future\n                raise subprocess.CalledProcessError(retcode, args)\n\n\nclass NinjaBootstrap(BuilderBase):\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        build_dir: str,\n        src_dir: str,\n        inst_dir: str,\n    ) -> None:\n        super(NinjaBootstrap, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n        )\n\n    def _build(self, reconfigure: bool) -> None:\n        self._check_cmd(\n            [sys.executable, \"configure.py\", \"--bootstrap\"], cwd=self.src_dir\n        )\n        src_ninja = os.path.join(self.src_dir, \"ninja\")\n        dest_ninja = os.path.join(self.inst_dir, \"bin/ninja\")\n        bin_dir = os.path.dirname(dest_ninja)\n        if not os.path.exists(bin_dir):\n            os.makedirs(bin_dir)\n        shutil.copyfile(src_ninja, dest_ninja)\n        shutil.copymode(src_ninja, dest_ninja)\n\n\nclass OpenSSLBuilder(BuilderBase):\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        build_dir: str,\n        src_dir: str,\n        inst_dir: str,\n    ) -> None:\n        super(OpenSSLBuilder, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n        )\n\n    def _build(self, reconfigure: bool) -> None:\n        configure = os.path.join(self.src_dir, \"Configure\")\n\n        # prefer to resolve the perl that we installed from\n        # our manifest on windows, but fall back to the system\n        # path on eg: darwin\n        env = self.env.copy()\n        for m in self.dep_manifests:\n            bindir = os.path.join(self.loader.get_project_install_dir(m), \"bin\")\n            add_path_entry(env, \"PATH\", bindir, append=False)\n\n        # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got `Env`.\n        perl = typing.cast(str, path_search(env, \"perl\", \"perl\"))\n\n        make_j_args = []\n        extra_args = []\n        if self.build_opts.is_windows():\n            # jom is compatible with nmake, adds the /j argument for parallel build\n            make = \"jom.exe\"\n            make_j_args = [\"/j%s\" % self.num_jobs]\n            args = [\"VC-WIN64A-masm\", \"-utf-8\"]\n            # fixes \"if multiple CL.EXE write to the same .PDB file, please use /FS\"\n            extra_args = [\"/FS\"]\n        elif self.build_opts.is_darwin():\n            make = \"make\"\n            make_j_args = [\"-j%s\" % self.num_jobs]\n            args = (\n                [\"darwin64-x86_64-cc\"]\n                if not self.build_opts.is_arm()\n                else [\"darwin64-arm64-cc\"]\n            )\n        elif self.build_opts.is_linux():\n            make = \"make\"\n            make_j_args = [\"-j%s\" % self.num_jobs]\n            args = (\n                [\"linux-x86_64\"] if not self.build_opts.is_arm() else [\"linux-aarch64\"]\n            )\n        else:\n            raise Exception(\"don't know how to build openssl for %r\" % self.ctx)\n\n        self._check_cmd(\n            [\n                perl,\n                configure,\n                \"--prefix=%s\" % self.inst_dir,\n                \"--openssldir=%s\" % self.inst_dir,\n            ]\n            + args\n            + [\n                \"enable-static-engine\",\n                \"enable-capieng\",\n                \"no-makedepend\",\n                \"no-unit-test\",\n                \"no-tests\",\n            ]\n            + extra_args\n        )\n        # show the config produced\n        self._check_cmd([perl, \"configdata.pm\", \"--dump\"], env=env)\n        make_build = [make] + make_j_args\n        self._check_cmd(make_build, env=env)\n        make_install = [make, \"install_sw\", \"install_ssldirs\"]\n        self._check_cmd(make_install, env=env)\n\n\nclass Boost(BuilderBase):\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n        b2_args: list[str],\n    ) -> None:\n        children = os.listdir(src_dir)\n        assert len(children) == 1, \"expected a single directory entry: %r\" % (children,)\n        boost_src = children[0]\n        assert boost_src.startswith(\"boost\")\n        src_dir = os.path.join(src_dir, children[0])\n        super(Boost, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n        )\n        self.b2_args: list[str] = b2_args\n\n    def _build(self, reconfigure: bool) -> None:\n        env = self._compute_env()\n        linkage: list[str] = [\"static\"]\n        if self.build_opts.is_windows() or self.build_opts.shared_libs:\n            linkage.append(\"shared\")\n\n        args = []\n        if self.build_opts.is_darwin():\n            clang = subprocess.check_output([\"xcrun\", \"--find\", \"clang\"])\n            user_config = os.path.join(self.build_dir, \"project-config.jam\")\n            with open(user_config, \"w\") as jamfile:\n                jamfile.write(\"using clang : : %s ;\\n\" % clang.decode().strip())\n            args.append(\"--user-config=%s\" % user_config)\n\n        for link in linkage:\n            bootstrap_args = self.manifest.get_section_as_args(\n                \"bootstrap.args\", self.ctx\n            )\n            if self.build_opts.is_windows():\n                bootstrap = os.path.join(self.src_dir, \"bootstrap.bat\")\n                self._check_cmd([bootstrap] + bootstrap_args, cwd=self.src_dir, env=env)\n                args += [\"address-model=64\"]\n            else:\n                bootstrap = os.path.join(self.src_dir, \"bootstrap.sh\")\n                self._check_cmd(\n                    [bootstrap, \"--prefix=%s\" % self.inst_dir] + bootstrap_args,\n                    cwd=self.src_dir,\n                    env=env,\n                )\n\n            b2 = os.path.join(self.src_dir, \"b2\")\n            self._check_cmd(\n                [\n                    b2,\n                    \"-j%s\" % self.num_jobs,\n                    \"--prefix=%s\" % self.inst_dir,\n                    \"--builddir=%s\" % self.build_dir,\n                ]\n                + args\n                + self.b2_args\n                + [\n                    \"link=%s\" % link,\n                    \"runtime-link=shared\",\n                    \"variant=release\",\n                    \"threading=multi\",\n                    \"debug-symbols=on\",\n                    \"visibility=global\",\n                    \"-d2\",\n                    \"install\",\n                ],\n                cwd=self.src_dir,\n                env=env,\n            )\n\n\nclass NopBuilder(BuilderBase):\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        inst_dir: str,\n    ) -> None:\n        super(NopBuilder, self).__init__(\n            loader, dep_manifests, build_opts, ctx, manifest, src_dir, None, inst_dir\n        )\n\n    def build(self, reconfigure: bool) -> None:\n        print(\"Installing %s -> %s\" % (self.src_dir, self.inst_dir))\n        parent = os.path.dirname(self.inst_dir)\n        if not os.path.exists(parent):\n            os.makedirs(parent)\n\n        install_files = self.manifest.get_section_as_ordered_pairs(\n            \"install.files\", self.ctx\n        )\n        if install_files:\n            for src_name, dest_name in self.manifest.get_section_as_ordered_pairs(\n                \"install.files\", self.ctx\n            ):\n                # pyre-fixme[6]: For 2nd argument expected `Union[PathLike[str],\n                #  str]` but got `Optional[str]`.\n                full_dest = os.path.join(self.inst_dir, dest_name)\n                full_src = os.path.join(self.src_dir, src_name)\n\n                dest_parent = os.path.dirname(full_dest)\n                if not os.path.exists(dest_parent):\n                    os.makedirs(dest_parent)\n                if os.path.isdir(full_src):\n                    if not os.path.exists(full_dest):\n                        simple_copytree(full_src, full_dest)\n                else:\n                    shutil.copyfile(full_src, full_dest)\n                    shutil.copymode(full_src, full_dest)\n                    # This is a bit gross, but the mac ninja.zip doesn't\n                    # give ninja execute permissions, so force them on\n                    # for things that look like they live in a bin dir\n                    # pyre-fixme[6]: For 1st argument expected `PathLike[AnyStr]`\n                    #  but got `Optional[str]`.\n                    if os.path.dirname(dest_name) == \"bin\":\n                        st = os.lstat(full_dest)\n                        os.chmod(full_dest, st.st_mode | stat.S_IXUSR)\n        else:\n            if not os.path.exists(self.inst_dir):\n                simple_copytree(self.src_dir, self.inst_dir)\n\n\nclass SetupPyBuilder(BuilderBase):\n    def _build(self, reconfigure: bool) -> None:\n        env = self._compute_env()\n\n        setup_env = self.manifest.get_section_as_dict(\"setup-py.env\", self.ctx)\n        for key, value in setup_env.items():\n            # pyre-fixme[6]: For 2nd argument expected `str` but got `Optional[str]`.\n            env[key] = value\n\n        setup_py_path = os.path.join(self.src_dir, \"setup.py\")\n\n        if not os.path.exists(setup_py_path):\n            raise RuntimeError(f\"setup.py script not found at {setup_py_path}\")\n\n        self._check_cmd(\n            # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n            #  `List[Union[str, None, str]]`.\n            # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got\n            #  `Env`.\n            [path_search(env, \"python3\"), setup_py_path, \"install\"],\n            cwd=self.src_dir,\n            env=env,\n        )\n\n        # Create the installation directory if it doesn't exist\n        os.makedirs(self.inst_dir, exist_ok=True)\n\n        # Mark the project as built\n        with open(os.path.join(self.inst_dir, \".built-by-getdeps\"), \"w\") as f:\n            f.write(\"built\")\n\n    def run_tests(\n        self,\n        schedule_type: str,\n        owner: str | None,\n        test_filter: str | None,\n        test_exclude: str | None,\n        retry: int,\n        no_testpilot: bool,\n        timeout: int | None = None,\n    ) -> None:\n        # setup.py actually no longer has a standard command for running tests.\n        # Instead we let manifest files specify an arbitrary Python file to run\n        # as a test.\n\n        # Get the test command from the manifest\n        python_script = self.manifest.get(\n            \"setup-py.test\", \"python_script\", ctx=self.ctx\n        )\n        if not python_script:\n            print(f\"No test script specified for {self.manifest.name}\")\n            return\n\n        # Run the command\n        env = self._compute_env()\n        self._check_cmd([\"python3\", python_script], cwd=self.src_dir, env=env)\n\n\nclass SqliteBuilder(BuilderBase):\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n    ) -> None:\n        super(SqliteBuilder, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n        )\n\n    def _build(self, reconfigure: bool) -> None:\n        for f in [\"sqlite3.c\", \"sqlite3.h\", \"sqlite3ext.h\"]:\n            src = os.path.join(self.src_dir, f)\n            dest = os.path.join(self.build_dir, f)\n            copy_if_different(src, dest)\n\n        cmake_lists = \"\"\"\ncmake_minimum_required(VERSION 3.5 FATAL_ERROR)\nproject(sqlite3 C)\nadd_library(sqlite3 STATIC sqlite3.c)\n# These options are taken from the defaults in Makefile.msc in\n# the sqlite distribution\ntarget_compile_definitions(sqlite3 PRIVATE\n    -DSQLITE_ENABLE_COLUMN_METADATA=1\n    -DSQLITE_ENABLE_FTS3=1\n    -DSQLITE_ENABLE_RTREE=1\n    -DSQLITE_ENABLE_GEOPOLY=1\n    -DSQLITE_ENABLE_JSON1=1\n    -DSQLITE_ENABLE_STMTVTAB=1\n    -DSQLITE_ENABLE_DBPAGE_VTAB=1\n    -DSQLITE_ENABLE_DBSTAT_VTAB=1\n    -DSQLITE_INTROSPECTION_PRAGMAS=1\n    -DSQLITE_ENABLE_DESERIALIZE=1\n)\ninstall(TARGETS sqlite3)\ninstall(FILES sqlite3.h sqlite3ext.h DESTINATION include)\n            \"\"\"\n\n        with open(os.path.join(self.build_dir, \"CMakeLists.txt\"), \"w\") as f:\n            f.write(cmake_lists)\n\n        defines = {\n            \"CMAKE_INSTALL_PREFIX\": self.inst_dir,\n            \"BUILD_SHARED_LIBS\": \"ON\" if self.build_opts.shared_libs else \"OFF\",\n            \"CMAKE_BUILD_TYPE\": \"RelWithDebInfo\",\n        }\n        define_args = [\"-D%s=%s\" % (k, v) for (k, v) in defines.items()]\n        define_args += [\"-G\", \"Ninja\"]\n\n        env = self._compute_env()\n\n        # Resolve the cmake that we installed\n        # pyre-fixme[6]: For 1st argument expected `Mapping[str, str]` but got `Env`.\n        cmake = path_search(env, \"cmake\")\n\n        # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n        #  `List[Optional[str]]`.\n        self._check_cmd([cmake, self.build_dir] + define_args, env=env)\n        self._check_cmd(\n            # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n            #  `List[Union[str, str, str, str, str, None, str]]`.\n            [\n                cmake,\n                \"--build\",\n                self.build_dir,\n                \"--target\",\n                \"install\",\n                \"--config\",\n                self.build_opts.build_type,\n                \"-j\",\n                str(self.num_jobs),\n            ],\n            env=env,\n        )\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/buildopts.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\nfrom __future__ import annotations\n\nimport argparse\nimport errno\nimport glob\nimport ntpath\nimport os\nimport subprocess\nimport sys\nimport tempfile\nimport typing\nfrom collections.abc import Mapping\n\nfrom .copytree import containing_repo_type\nfrom .envfuncs import add_flag, add_path_entry, Env\nfrom .fetcher import get_fbsource_repo_data, homebrew_package_prefix\nfrom .manifest import ContextGenerator\nfrom .platform import get_available_ram, HostType, is_windows\n\nif typing.TYPE_CHECKING:\n    from .load import ManifestLoader\n    from .manifest import ManifestContext, ManifestParser\n\n\nGITBASH_TMP: str = \"c:\\\\tools\\\\fb.gitbash\\\\tmp\"\n\n\ndef detect_project(path: str) -> tuple[str | None, str | None]:\n    repo_type, repo_root = containing_repo_type(path)\n    if repo_type is None:\n        return None, None\n\n    # Look for a .projectid file.  If it exists, read the project name from it.\n    # pyre-fixme[6]: For 1st argument expected `LiteralString` but got `Optional[str]`.\n    project_id_path = os.path.join(repo_root, \".projectid\")\n    try:\n        with open(project_id_path, \"r\") as f:\n            project_name = f.read().strip()\n            return repo_root, project_name\n    except EnvironmentError as ex:\n        if ex.errno != errno.ENOENT:\n            raise\n\n    return repo_root, None\n\n\nclass BuildOptions:\n    def __init__(\n        self,\n        fbcode_builder_dir: str,\n        scratch_dir: str,\n        host_type: HostType,\n        install_dir: str | None = None,\n        num_jobs: int = 0,\n        use_shipit: bool = False,\n        vcvars_path: str | None = None,\n        allow_system_packages: bool = False,\n        lfs_path: str | None = None,\n        shared_libs: bool = False,\n        facebook_internal: bool | None = None,\n        free_up_disk: bool = False,\n        build_type: str | None = None,\n    ) -> None:\n        \"\"\"fbcode_builder_dir - the path to either the in-fbsource fbcode_builder dir,\n                             or for shipit-transformed repos, the build dir that\n                             has been mapped into that dir.\n        scratch_dir - a place where we can store repos and build bits.\n                      This path should be stable across runs and ideally\n                      should not be in the repo of the project being built,\n                      but that is ultimately where we generally fall back\n                      for builds outside of FB\n        install_dir - where the project will ultimately be installed\n        num_jobs - the level of concurrency to use while building\n        use_shipit - use real shipit instead of the simple shipit transformer\n        vcvars_path - Path to external VS toolchain's vsvarsall.bat\n        shared_libs - whether to build shared libraries\n        free_up_disk - take extra actions to save runner disk space\n        build_type - CMAKE_BUILD_TYPE, used by cmake and cargo builders\n        \"\"\"\n\n        if not install_dir:\n            install_dir = os.path.join(scratch_dir, \"installed\")\n\n        self.project_hashes: str | None = None\n        for p in [\"../deps/github_hashes\", \"../project_hashes\"]:\n            hashes = os.path.join(fbcode_builder_dir, p)\n            if os.path.exists(hashes):\n                self.project_hashes = hashes\n                break\n\n        # Detect what repository and project we are being run from.\n        # pyre-fixme[4]: Attribute must be annotated.\n        self.repo_root, self.repo_project = detect_project(os.getcwd())\n\n        # If we are running from an fbsource repository, set self.fbsource_dir\n        # to allow the ShipIt-based fetchers to use it.\n        if self.repo_project == \"fbsource\":\n            self.fbsource_dir: str | None = self.repo_root\n        else:\n            self.fbsource_dir = None\n\n        if facebook_internal is None:\n            if self.fbsource_dir:\n                facebook_internal = True\n            else:\n                facebook_internal = False\n\n        self.facebook_internal: bool = facebook_internal\n        self.specified_num_jobs: int = num_jobs\n        self.scratch_dir: str = scratch_dir\n        self.install_dir: str = install_dir\n        self.fbcode_builder_dir: str = fbcode_builder_dir\n        self.host_type: HostType = host_type\n        self.use_shipit: bool = use_shipit\n        self.allow_system_packages: bool = allow_system_packages\n        self.lfs_path: str | None = lfs_path\n        self.shared_libs: bool = shared_libs\n        self.free_up_disk: bool = free_up_disk\n        self.build_type: str | None = build_type\n\n        lib_path: str | None = None\n        if self.is_darwin():\n            lib_path = \"DYLD_LIBRARY_PATH\"\n        elif self.is_linux():\n            lib_path = \"LD_LIBRARY_PATH\"\n        elif self.is_windows():\n            lib_path = \"PATH\"\n        else:\n            lib_path = None\n        self.lib_path: str | None = lib_path\n\n        if vcvars_path is None and is_windows():\n\n            try:\n                # Allow a site-specific vcvarsall path.\n                from .facebook.vcvarsall import build_default_vcvarsall\n            except ImportError:\n                vcvarsall: list[str] = []\n            else:\n                vcvarsall = (\n                    build_default_vcvarsall(self.fbsource_dir)\n                    if self.fbsource_dir is not None\n                    else []\n                )\n\n            # On Windows, the compiler is not available in the PATH by\n            # default so we need to run the vcvarsall script to populate the\n            # environment. We use a glob to find some version of this script\n            # as deployed with Visual Studio.\n            if len(vcvarsall) == 0:\n                # check the 64 bit installs\n                for year in [\"2022\"]:\n                    vcvarsall += glob.glob(\n                        os.path.join(\n                            os.environ.get(\"ProgramFiles\", \"C:\\\\Program Files\"),\n                            \"Microsoft Visual Studio\",\n                            year,\n                            \"*\",\n                            \"VC\",\n                            \"Auxiliary\",\n                            \"Build\",\n                            \"vcvarsall.bat\",\n                        )\n                    )\n\n                # then the 32 bit ones\n                for year in [\"2022\", \"2019\", \"2017\"]:\n                    vcvarsall += glob.glob(\n                        os.path.join(\n                            os.environ[\"ProgramFiles(x86)\"],\n                            \"Microsoft Visual Studio\",\n                            year,\n                            \"*\",\n                            \"VC\",\n                            \"Auxiliary\",\n                            \"Build\",\n                            \"vcvarsall.bat\",\n                        )\n                    )\n            if len(vcvarsall) == 0:\n                raise Exception(\n                    \"Could not find vcvarsall.bat. Please install Visual Studio.\"\n                )\n            vcvars_path = vcvarsall[0]\n            print(f\"Using vcvarsall.bat from {vcvars_path}\", file=sys.stderr)\n\n        self.vcvars_path: str | None = vcvars_path\n\n    @property\n    def manifests_dir(self) -> str:\n        return os.path.join(self.fbcode_builder_dir, \"manifests\")\n\n    def is_darwin(self) -> bool:\n        return self.host_type.is_darwin()\n\n    def is_windows(self) -> bool:\n        return self.host_type.is_windows()\n\n    def is_arm(self) -> bool:\n        return self.host_type.is_arm()\n\n    def get_vcvars_path(self) -> str | None:\n        return self.vcvars_path\n\n    def is_linux(self) -> bool:\n        return self.host_type.is_linux()\n\n    def is_freebsd(self) -> bool:\n        return self.host_type.is_freebsd()\n\n    def get_num_jobs(self, job_weight: int) -> int:\n        \"\"\"Given an estimated job_weight in MiB, compute a reasonable concurrency limit.\"\"\"\n        if self.specified_num_jobs:\n            return self.specified_num_jobs\n\n        available_ram = get_available_ram()\n\n        import multiprocessing\n\n        return max(1, min(multiprocessing.cpu_count(), available_ram // job_weight))\n\n    def get_context_generator(\n        self, host_tuple: str | HostType | None = None\n    ) -> ContextGenerator:\n        \"\"\"Create a manifest ContextGenerator for the specified target platform.\"\"\"\n        if host_tuple is None:\n            host_type = self.host_type\n        elif isinstance(host_tuple, HostType):\n            host_type = host_tuple\n        else:\n            host_type = HostType.from_tuple_string(host_tuple)\n\n        return ContextGenerator(\n            {\n                \"os\": host_type.ostype,\n                \"distro\": host_type.distro,\n                \"distro_vers\": host_type.distrovers,\n                \"fb\": \"on\" if self.facebook_internal else \"off\",\n                \"fbsource\": \"on\" if self.fbsource_dir else \"off\",\n                \"test\": \"off\",\n                \"shared_libs\": \"on\" if self.shared_libs else \"off\",\n            }\n        )\n\n    def compute_env_for_install_dirs(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        ctx: ManifestContext,\n        env: Env | None = None,\n        manifest: ManifestParser | None = None,\n    ) -> Env:  # noqa: C901\n        if env is not None:\n            env = env.copy()\n        else:\n            env = Env()\n\n        env[\"GETDEPS_BUILD_DIR\"] = os.path.join(self.scratch_dir, \"build\")\n        env[\"GETDEPS_INSTALL_DIR\"] = self.install_dir\n\n        # Python setuptools attempts to discover a local MSVC for\n        # building Python extensions. On Windows, getdeps already\n        # supports invoking a vcvarsall prior to compilation.\n        #\n        # Tell setuptools to bypass its own search. This fixes a bug\n        # where setuptools would fail when run from CMake on GitHub\n        # Actions with the inscrutable message 'error: Microsoft\n        # Visual C++ 14.0 is required. Get it with \"Build Tools for\n        # Visual Studio\"'. I suspect the actual error is that the\n        # environment or PATH is overflowing.\n        #\n        # For extra credit, someone could patch setuptools to\n        # propagate the actual error message from vcvarsall, because\n        # often it does not mean Visual C++ is not available.\n        #\n        # Related discussions:\n        # - https://github.com/pypa/setuptools/issues/2028\n        # - https://github.com/pypa/setuptools/issues/2307\n        # - https://developercommunity.visualstudio.com/t/error-microsoft-visual-c-140-is-required/409173\n        # - https://github.com/OpenMS/OpenMS/pull/4779\n        # - https://github.com/actions/virtual-environments/issues/1484\n\n        if self.is_windows() and self.get_vcvars_path():\n            env[\"DISTUTILS_USE_SDK\"] = \"1\"\n\n        # On macOS we need to set `SDKROOT` when we use clang for system\n        # header files.\n        if self.is_darwin() and \"SDKROOT\" not in env:\n            sdkroot = subprocess.check_output([\"xcrun\", \"--show-sdk-path\"])\n            env[\"SDKROOT\"] = sdkroot.decode().strip()\n\n        if (\n            self.is_darwin()\n            and self.allow_system_packages\n            and self.host_type.get_package_manager() == \"homebrew\"\n            and manifest\n            and manifest.resolved_system_packages\n        ):\n            # Homebrew packages may not be on the default PATHs\n            brew_packages = manifest.resolved_system_packages.get(\"homebrew\", [])\n            for p in brew_packages:\n                found = self.add_homebrew_package_to_env(p, env)\n                # Try extra hard to find openssl, needed with homebrew on macOS\n                if found and p.startswith(\"openssl\"):\n                    candidate = homebrew_package_prefix(\"openssl@1.1\")\n                    # pyre-fixme[6]: For 1st argument expected\n                    #  `Union[PathLike[bytes], PathLike[str], bytes, int, str]` but got\n                    #  `Optional[str]`.\n                    if os.path.exists(candidate):\n                        # pyre-fixme[6]: For 2nd argument expected `str` but got\n                        #  `Optional[str]`.\n                        os.environ[\"OPENSSL_ROOT_DIR\"] = candidate\n                        env[\"OPENSSL_ROOT_DIR\"] = os.environ[\"OPENSSL_ROOT_DIR\"]\n\n        if self.fbsource_dir:\n            env[\"YARN_YARN_OFFLINE_MIRROR\"] = os.path.join(\n                self.fbsource_dir, \"xplat/third-party/yarn/offline-mirror\"\n            )\n            yarn_exe = \"yarn.bat\" if self.is_windows() else \"yarn\"\n            env[\"YARN_PATH\"] = os.path.join(\n                # pyre-fixme[6]: For 1st argument expected `LiteralString` but got\n                #  `Optional[str]`.\n                self.fbsource_dir,\n                \"xplat/third-party/yarn/\",\n                yarn_exe,\n            )\n            node_exe = \"node-win-x64.exe\" if self.is_windows() else \"node\"\n            env[\"NODE_BIN\"] = os.path.join(\n                # pyre-fixme[6]: For 1st argument expected `LiteralString` but got\n                #  `Optional[str]`.\n                self.fbsource_dir,\n                \"xplat/third-party/node/bin/\",\n                node_exe,\n            )\n            env[\"RUST_VENDORED_CRATES_DIR\"] = os.path.join(\n                # pyre-fixme[6]: For 1st argument expected `LiteralString` but got\n                #  `Optional[str]`.\n                self.fbsource_dir,\n                \"third-party/rust/vendor\",\n            )\n            hash_data = get_fbsource_repo_data(self)\n            env[\"FBSOURCE_HASH\"] = hash_data.hash\n            env[\"FBSOURCE_DATE\"] = hash_data.date\n\n        # reverse as we are prepending to the PATHs\n        for m in reversed(dep_manifests):\n            is_direct_dep = (\n                manifest is not None and m.name in manifest.get_dependencies(ctx)\n            )\n            d = loader.get_project_install_dir(m)\n            if os.path.exists(d):\n                self.add_prefix_to_env(\n                    d,\n                    env,\n                    append=False,\n                    is_direct_dep=is_direct_dep,\n                )\n\n        # Linux is always system openssl\n        system_openssl: bool = self.is_linux()\n\n        # For other systems lets see if package is requested\n        if not system_openssl and manifest and manifest.resolved_system_packages:\n            for _pkg_type, pkgs in manifest.resolved_system_packages.items():\n                for p in pkgs:\n                    if p.startswith(\"openssl\") or p.startswith(\"libssl\"):\n                        system_openssl = True\n                        break\n\n        # Let openssl know to pick up the system certs if present\n        if system_openssl or \"OPENSSL_DIR\" in env:\n            for system_ssl_cfg in [\"/etc/pki/tls\", \"/etc/ssl\"]:\n                if os.path.isdir(system_ssl_cfg):\n                    cert_dir = system_ssl_cfg + \"/certs\"\n                    if os.path.isdir(cert_dir):\n                        env[\"SSL_CERT_DIR\"] = cert_dir\n                    cert_file = system_ssl_cfg + \"/cert.pem\"\n                    if os.path.isfile(cert_file):\n                        env[\"SSL_CERT_FILE\"] = cert_file\n\n        return env\n\n    def add_homebrew_package_to_env(self, package: str, env: Env) -> bool:\n        prefix = homebrew_package_prefix(package)\n        if prefix and os.path.exists(prefix):\n            return self.add_prefix_to_env(\n                prefix, env, append=False, add_library_path=True\n            )\n        return False\n\n    def add_prefix_to_env(\n        self,\n        d: str,\n        env: Env,\n        append: bool = True,\n        add_library_path: bool = False,\n        is_direct_dep: bool = False,\n    ) -> bool:  # noqa: C901\n        bindir: str = os.path.join(d, \"bin\")\n        found: bool = False\n        has_pkgconfig: bool = False\n        pkgconfig: str = os.path.join(d, \"lib\", \"pkgconfig\")\n        if os.path.exists(pkgconfig):\n            found = True\n            has_pkgconfig = True\n            add_path_entry(env, \"PKG_CONFIG_PATH\", pkgconfig, append=append)\n\n        pkgconfig = os.path.join(d, \"lib64\", \"pkgconfig\")\n        if os.path.exists(pkgconfig):\n            found = True\n            has_pkgconfig = True\n            add_path_entry(env, \"PKG_CONFIG_PATH\", pkgconfig, append=append)\n\n        add_path_entry(env, \"CMAKE_PREFIX_PATH\", d, append=append)\n\n        # Tell the thrift compiler about includes it needs to consider\n        thriftdir: str = os.path.join(d, \"include\", \"thrift-files\")\n        if os.path.exists(thriftdir):\n            found = True\n            add_path_entry(env, \"THRIFT_INCLUDE_PATH\", thriftdir, append=append)\n\n        # module detection for python is old fashioned and needs flags\n        includedir: str = os.path.join(d, \"include\")\n        if os.path.exists(includedir):\n            found = True\n            ncursesincludedir: str = os.path.join(d, \"include\", \"ncurses\")\n            if os.path.exists(ncursesincludedir):\n                add_path_entry(env, \"C_INCLUDE_PATH\", ncursesincludedir, append=append)\n                add_flag(env, \"CPPFLAGS\", f\"-I{includedir}\", append=append)\n                add_flag(env, \"CPPFLAGS\", f\"-I{ncursesincludedir}\", append=append)\n            elif \"/bz2-\" in d:\n                add_flag(env, \"CPPFLAGS\", f\"-I{includedir}\", append=append)\n            # For non-pkgconfig projects Cabal has no way to find the includes or\n            # libraries, so we provide a set of extra Cabal flags in the env\n            if not has_pkgconfig and is_direct_dep:\n                add_flag(\n                    env,\n                    \"GETDEPS_CABAL_FLAGS\",\n                    f\"--extra-include-dirs={includedir}\",\n                    append=append,\n                )\n\n            # The thrift compiler's built-in includes are installed directly to the include dir\n            includethriftdir: str = os.path.join(d, \"include\", \"thrift\")\n            if os.path.exists(includethriftdir):\n                add_path_entry(env, \"THRIFT_INCLUDE_PATH\", includedir, append=append)\n\n        # Map from FB python manifests to PYTHONPATH\n        pydir: str = os.path.join(d, \"lib\", \"fb-py-libs\")\n        if os.path.exists(pydir):\n            found = True\n            manifest_ext: str = \".manifest\"\n            pymanifestfiles: list[str] = [\n                f\n                for f in os.listdir(pydir)\n                if f.endswith(manifest_ext) and os.path.isfile(os.path.join(pydir, f))\n            ]\n            for f in pymanifestfiles:\n                subdir = f[: -len(manifest_ext)]\n                add_path_entry(\n                    env, \"PYTHONPATH\", os.path.join(pydir, subdir), append=append\n                )\n\n        # Allow resolving shared objects built earlier (eg: zstd\n        # doesn't include the full path to the dylib in its linkage\n        # so we need to give it an assist)\n        if self.lib_path:\n            for lib in [\"lib\", \"lib64\"]:\n                libdir: str = os.path.join(d, lib)\n                if os.path.exists(libdir):\n                    found = True\n                    # pyre-fixme[6]: For 2nd argument expected `str` but got\n                    #  `Optional[str]`.\n                    add_path_entry(env, self.lib_path, libdir, append=append)\n                    # module detection for python is old fashioned and needs flags\n                    if \"/ncurses-\" in d:\n                        add_flag(env, \"LDFLAGS\", f\"-L{libdir}\", append=append)\n                    elif \"/bz2-\" in d:\n                        add_flag(env, \"LDFLAGS\", f\"-L{libdir}\", append=append)\n                    if add_library_path:\n                        add_path_entry(env, \"LIBRARY_PATH\", libdir, append=append)\n                    if not has_pkgconfig and is_direct_dep:\n                        add_flag(\n                            env,\n                            \"GETDEPS_CABAL_FLAGS\",\n                            f\"--extra-lib-dirs={libdir}\",\n                            append=append,\n                        )\n\n        # Allow resolving binaries (eg: cmake, ninja) and dlls\n        # built by earlier steps\n        if os.path.exists(bindir):\n            found = True\n            add_path_entry(env, \"PATH\", bindir, append=append)\n\n        # If rustc is present in the `bin` directory, set RUSTC to prevent\n        # cargo uses the rustc installed in the system.\n        if self.is_windows():\n            cargo_path: str = os.path.join(bindir, \"cargo.exe\")\n            rustc_path: str = os.path.join(bindir, \"rustc.exe\")\n            rustdoc_path: str = os.path.join(bindir, \"rustdoc.exe\")\n        else:\n            cargo_path = os.path.join(bindir, \"cargo\")\n            rustc_path = os.path.join(bindir, \"rustc\")\n            rustdoc_path = os.path.join(bindir, \"rustdoc\")\n\n        if os.path.isfile(rustc_path):\n            env[\"CARGO_BIN\"] = cargo_path\n            env[\"RUSTC\"] = rustc_path\n            env[\"RUSTDOC\"] = rustdoc_path\n\n        openssl_include: str = os.path.join(d, \"include\", \"openssl\")\n        if os.path.isdir(openssl_include) and any(\n            os.path.isfile(os.path.join(d, \"lib\", libcrypto))\n            for libcrypto in (\"libcrypto.lib\", \"libcrypto.so\", \"libcrypto.a\")\n        ):\n            # This must be the openssl library, let Rust know about it\n            env[\"OPENSSL_DIR\"] = d\n\n        return found\n\n\ndef list_win32_subst_letters() -> dict[str, str]:\n    output = subprocess.check_output([\"subst\"]).decode(\"utf-8\")\n    # The output is a set of lines like: `F:\\: => C:\\open\\some\\where`\n    lines = output.strip().split(\"\\r\\n\")\n    mapping: dict[str, str] = {}\n    for line in lines:\n        fields = line.split(\": => \")\n        if len(fields) != 2:\n            continue\n        letter = fields[0]\n        path = fields[1]\n        mapping[letter] = path\n\n    return mapping\n\n\ndef find_existing_win32_subst_for_path(\n    path: str,\n    subst_mapping: Mapping[str, str],\n) -> str | None:\n    path = ntpath.normcase(ntpath.normpath(path))\n    for letter, target in subst_mapping.items():\n        if ntpath.normcase(target) == path:\n            return letter\n    return None\n\n\ndef find_unused_drive_letter() -> str | None:\n    import ctypes\n\n    buffer_len = 256\n    blen = ctypes.c_uint(buffer_len)\n    rv = ctypes.c_uint()\n    bufs = ctypes.create_string_buffer(buffer_len)\n    # pyre-fixme[16]: Module `ctypes` has no attribute `windll`.\n    rv = ctypes.windll.kernel32.GetLogicalDriveStringsA(blen, bufs)\n    if rv > buffer_len:\n        raise Exception(\"GetLogicalDriveStringsA result too large for buffer\")\n    nul = \"\\x00\".encode(\"ascii\")\n\n    used: list[str] = [\n        drive.decode(\"ascii\")[0] for drive in bufs.raw.strip(nul).split(nul)\n    ]\n    possible: list[str] = [c for c in \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"]\n    available: list[str] = sorted(list(set(possible) - set(used)))\n    if len(available) == 0:\n        return None\n    # Prefer to assign later letters rather than earlier letters\n    return available[-1]\n\n\ndef map_subst_path(path: str) -> str:\n    \"\"\"find a short drive letter mapping for a path\"\"\"\n    for _attempt in range(0, 24):\n        drive = find_existing_win32_subst_for_path(\n            path, subst_mapping=list_win32_subst_letters()\n        )\n        if drive:\n            return drive\n        available = find_unused_drive_letter()\n        if available is None:\n            raise Exception(\n                (\n                    \"unable to make shorter subst mapping for %s; \"\n                    \"no available drive letters\"\n                )\n                % path\n            )\n\n        # Try to set up a subst mapping; note that we may be racing with\n        # other processes on the same host, so this may not succeed.\n        try:\n            subprocess.check_call([\"subst\", \"%s:\" % available, path])\n            subst = \"%s:\\\\\" % available\n            print(\"Mapped scratch dir %s -> %s\" % (path, subst), file=sys.stderr)\n            return subst\n        except Exception:\n            print(\"Failed to map %s -> %s\" % (available, path), file=sys.stderr)\n\n    raise Exception(\"failed to set up a subst path for %s\" % path)\n\n\ndef _check_host_type(args: argparse.Namespace, host_type: HostType | None) -> HostType:\n    if host_type is None:\n        host_tuple_string: str | None = getattr(args, \"host_type\", None)\n        if host_tuple_string:\n            host_type = HostType.from_tuple_string(host_tuple_string)\n        else:\n            host_type = HostType()\n\n    assert isinstance(host_type, HostType)\n    return host_type\n\n\ndef setup_build_options(\n    args: argparse.Namespace, host_type: HostType | None = None\n) -> BuildOptions:\n    \"\"\"Create a BuildOptions object based on the arguments\"\"\"\n\n    fbcode_builder_dir: str = os.path.dirname(\n        os.path.dirname(os.path.abspath(__file__))\n    )\n    scratch_dir: str | None = args.scratch_path\n    if not scratch_dir:\n        # TODO: `mkscratch` doesn't currently know how best to place things on\n        # sandcastle, so whip up something reasonable-ish\n        if \"SANDCASTLE\" in os.environ:\n            if \"DISK_TEMP\" not in os.environ:\n                raise Exception(\n                    (\n                        \"I need DISK_TEMP to be set in the sandcastle environment \"\n                        \"so that I can store build products somewhere sane\"\n                    )\n                )\n\n            disk_temp: str = os.environ[\"DISK_TEMP\"]\n            if is_windows():\n                # force use gitbash tmp dir for windows, as its less likely to have a tmp cleaner\n                # that removes extracted prior dated source files\n                os.makedirs(GITBASH_TMP, exist_ok=True)\n                print(\n                    f\"Using {GITBASH_TMP} instead of DISK_TEMP {disk_temp} for scratch dir\",\n                    file=sys.stderr,\n                )\n                disk_temp = GITBASH_TMP\n\n            scratch_dir = os.path.join(disk_temp, \"fbcode_builder_getdeps\")\n        if not scratch_dir:\n            try:\n                scratch_dir = (\n                    subprocess.check_output(\n                        [\"mkscratch\", \"path\", \"--subdir\", \"fbcode_builder_getdeps\"]\n                    )\n                    .strip()\n                    .decode(\"utf-8\")\n                )\n            except OSError as exc:\n                if exc.errno != errno.ENOENT:\n                    # A legit failure; don't fall back, surface the error\n                    raise\n                # This system doesn't have mkscratch so we fall back to\n                # something local.\n                munged: str = fbcode_builder_dir.replace(\"Z\", \"zZ\")\n                for s in [\"/\", \"\\\\\", \":\"]:\n                    munged = munged.replace(s, \"Z\")\n\n                if is_windows() and os.path.isdir(\"c:/open\"):\n                    temp: str = \"c:/open/scratch\"\n                else:\n                    temp = tempfile.gettempdir()\n\n                scratch_dir = os.path.join(temp, \"fbcode_builder_getdeps-%s\" % munged)\n                if not is_windows() and os.geteuid() == 0:\n                    # Running as root; in the case where someone runs\n                    # sudo getdeps.py install-system-deps\n                    # and then runs as build without privs, we want to avoid creating\n                    # a scratch dir that the second stage cannot write to.\n                    # So we generate a different path if we are root.\n                    scratch_dir += \"-root\"\n\n        if not os.path.exists(scratch_dir):\n            os.makedirs(scratch_dir)\n\n        if is_windows():\n            subst = map_subst_path(scratch_dir)\n            scratch_dir = subst\n    else:\n        if not os.path.exists(scratch_dir):\n            os.makedirs(scratch_dir)\n\n    # Make sure we normalize the scratch path.  This path is used as part of the hash\n    # computation for detecting if projects have been updated, so we need to always\n    # use the exact same string to refer to a given directory.\n    # But! realpath in some combinations of Windows/Python3 versions can expand the\n    # drive substitutions on Windows, so avoid that!\n    if not is_windows():\n        scratch_dir = os.path.realpath(scratch_dir)\n\n    # Save these args passed by the user in an env variable, so it\n    # can be used while hashing this build.\n    os.environ[\"GETDEPS_CMAKE_DEFINES\"] = getattr(args, \"extra_cmake_defines\", \"\") or \"\"\n\n    host_type = _check_host_type(args, host_type)\n\n    build_args: dict[str, object] = {\n        k: v\n        for (k, v) in vars(args).items()\n        if k\n        in {\n            \"num_jobs\",\n            \"use_shipit\",\n            \"vcvars_path\",\n            \"allow_system_packages\",\n            \"lfs_path\",\n            \"shared_libs\",\n            \"free_up_disk\",\n            \"build_type\",\n        }\n    }\n\n    return BuildOptions(\n        fbcode_builder_dir,\n        scratch_dir,\n        host_type,\n        install_dir=args.install_prefix,\n        facebook_internal=args.facebook_internal,\n        # pyre-fixme[6]: For 6th argument expected `Optional[str]` but got `object`.\n        # pyre-fixme[6]: For 6th argument expected `bool` but got `object`.\n        # pyre-fixme[6]: For 6th argument expected `int` but got `object`.\n        **build_args,\n    )\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/cache.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\nfrom __future__ import annotations\n\n\nclass ArtifactCache:\n    \"\"\"The ArtifactCache is a small abstraction that allows caching\n    named things in some external storage mechanism.\n    The primary use case is for storing the build products on CI\n    systems to accelerate the build\"\"\"\n\n    def download_to_file(self, name: str, dest_file_name: str) -> bool:\n        \"\"\"If `name` exists in the cache, download it and place it\n        in the specified `dest_file_name` location on the filesystem.\n        If a transient issue was encountered a TransientFailure shall\n        be raised.\n        If `name` doesn't exist in the cache `False` shall be returned.\n        If `dest_file_name` was successfully updated `True` shall be\n        returned.\n        All other conditions shall raise an appropriate exception.\"\"\"\n        return False\n\n    def upload_from_file(self, name: str, source_file_name: str) -> None:\n        \"\"\"Causes `name` to be populated in the cache by uploading\n        the contents of `source_file_name` to the storage system.\n        If a transient issue was encountered a TransientFailure shall\n        be raised.\n        If the upload failed for some other reason, an appropriate\n        exception shall be raised.\"\"\"\n        pass\n\n\ndef create_cache() -> ArtifactCache | None:\n    \"\"\"This function is monkey patchable to provide an actual\n    implementation\"\"\"\n    return None\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/cargo.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\nfrom __future__ import annotations\n\nimport os\nimport re\nimport shutil\nimport sys\nimport typing\n\nfrom .builder import BuilderBase\nfrom .copytree import rmtree_more, simple_copytree\n\nif typing.TYPE_CHECKING:\n    from .buildopts import BuildOptions\n    from .load import ManifestLoader\n    from .manifest import ManifestContext, ManifestParser\n\n\nclass CargoBuilder(BuilderBase):\n    def __init__(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],  # manifests of dependencies\n        build_opts: BuildOptions,\n        ctx: ManifestContext,\n        manifest: ManifestParser,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n        build_doc: bool,\n        workspace_dir: str | None,\n        manifests_to_build: str | None,\n        cargo_config_file: str | None,\n    ) -> None:\n        super(CargoBuilder, self).__init__(\n            loader,\n            dep_manifests,\n            build_opts,\n            ctx,\n            manifest,\n            src_dir,\n            build_dir,\n            inst_dir,\n        )\n        self.build_doc = build_doc\n        self.ws_dir: str | None = workspace_dir\n        # pyre-fixme[8]: Attribute has type `Optional[List[str]]`; used as\n        #  `Union[None, List[str], str]`.\n        self.manifests_to_build: list[str] | None = (\n            manifests_to_build and manifests_to_build.split(\",\")\n        )\n        self.loader: ManifestLoader = loader\n        self.cargo_config_file_subdir: str | None = cargo_config_file\n\n    def run_cargo(\n        self,\n        install_dirs: list[str],\n        operation: str,\n        args: list[str] | None = None,\n    ) -> None:\n        args = args or []\n        env = self._compute_env()\n        # Enable using nightly features with stable compiler\n        env[\"RUSTC_BOOTSTRAP\"] = \"1\"\n        env[\"LIBZ_SYS_STATIC\"] = \"1\"\n        cmd = [\n            \"cargo\",\n            operation,\n            \"--workspace\",\n            \"-j%s\" % self.num_jobs,\n        ] + args\n        self._check_cmd(cmd, cwd=self.workspace_dir(), env=env)\n\n    def build_source_dir(self) -> str:\n        return os.path.join(self.build_dir, \"source\")\n\n    def workspace_dir(self) -> str:\n        return os.path.join(self.build_source_dir(), self.ws_dir or \"\")\n\n    def manifest_dir(self, manifest: str) -> str:\n        return os.path.join(self.build_source_dir(), manifest)\n\n    def recreate_dir(self, src: str, dst: str) -> None:\n        if os.path.isdir(dst):\n            if os.path.islink(dst):\n                os.remove(dst)\n            else:\n                rmtree_more(dst)\n        simple_copytree(src, dst)\n\n    def recreate_linked_dir(self, src: str, dst: str) -> None:\n        if os.path.isdir(dst):\n            if os.path.islink(dst):\n                os.remove(dst)\n            elif os.path.isdir(dst):\n                shutil.rmtree(dst)\n        os.symlink(src, dst)\n\n    def cargo_config_file(self) -> str:\n        build_source_dir = self.build_dir\n        if self.cargo_config_file_subdir:\n            return os.path.join(build_source_dir, self.cargo_config_file_subdir)\n        else:\n            return os.path.join(build_source_dir, \".cargo\", \"config.toml\")\n\n    def _create_cargo_config(self) -> dict[str, dict[str, str]]:\n        cargo_config_file = self.cargo_config_file()\n        cargo_config_dir = os.path.dirname(cargo_config_file)\n        if not os.path.isdir(cargo_config_dir):\n            os.mkdir(cargo_config_dir)\n\n        dep_to_git = self._resolve_dep_to_git()\n\n        if os.path.isfile(cargo_config_file):\n            with open(cargo_config_file, \"r\") as f:\n                print(f\"Reading {cargo_config_file}\", file=sys.stderr)\n                cargo_content = f.read()\n        else:\n            cargo_content = \"\"\n\n        new_content = cargo_content\n        if \"# Generated by getdeps.py\" not in cargo_content:\n            new_content += \"\"\"\\\n# Generated by getdeps.py\n[build]\ntarget-dir = '''{}'''\n\n[profile.dev]\ndebug = false\nincremental = false\n\n[profile.release]\nopt-level = \"{}\"\n\"\"\".format(\n                self.build_dir.replace(\"\\\\\", \"\\\\\\\\\"),\n                \"z\" if self.build_opts.build_type == \"MinSizeRel\" else \"s\",\n            )\n\n        # Point to vendored sources from getdeps manifests\n        for _dep, git_conf in dep_to_git.items():\n            if \"cargo_vendored_sources\" in git_conf:\n                vendored_dir = git_conf[\"cargo_vendored_sources\"].replace(\"\\\\\", \"\\\\\\\\\")\n                override = (\n                    f'[source.\"{git_conf[\"repo_url\"]}\"]\\ndirectory = \"{vendored_dir}\"\\n'\n                )\n                if override not in cargo_content:\n                    new_content += override\n\n            if self.build_opts.fbsource_dir:\n                # Point to vendored crates.io if possible\n                try:\n                    from .facebook.rust import vendored_crates\n\n                    new_content = vendored_crates(\n                        self.build_opts.fbsource_dir, new_content\n                    )\n                except ImportError:\n                    # This FB internal module isn't shippped to github,\n                    # so just rely on cargo downloading crates on it's own\n                    pass\n\n        if new_content != cargo_content:\n            with open(cargo_config_file, \"w\") as f:\n                print(\n                    f\"Writing cargo config for {self.manifest.name} to {cargo_config_file}\",\n                    file=sys.stderr,\n                )\n                f.write(new_content)\n\n        return dep_to_git\n\n    def _prepare(self, reconfigure: bool) -> None:\n        build_source_dir = self.build_source_dir()\n        self.recreate_dir(self.src_dir, build_source_dir)\n\n        dep_to_git = self._create_cargo_config()\n\n        if self.ws_dir is not None:\n            self._patchup_workspace(dep_to_git)\n\n    def _build(self, reconfigure: bool) -> None:\n        # _prepare has been run already. Actually do the build\n        build_source_dir = self.build_source_dir()\n\n        build_args = [\n            \"--artifact-dir\",\n            os.path.join(self.inst_dir, \"bin\"),\n            \"-Zunstable-options\",\n        ]\n\n        if self.build_opts.build_type != \"Debug\":\n            build_args.append(\"--release\")\n\n        if self.manifests_to_build is None:\n            self.run_cargo(\n                self.install_dirs,\n                \"build\",\n                build_args,\n            )\n        else:\n            # pyre-fixme[16]: Optional type has no attribute `__iter__`.\n            for manifest in self.manifests_to_build:\n                self.run_cargo(\n                    self.install_dirs,\n                    \"build\",\n                    build_args\n                    + [\n                        \"--manifest-path\",\n                        self.manifest_dir(manifest),\n                    ],\n                )\n\n        self.recreate_linked_dir(\n            build_source_dir, os.path.join(self.inst_dir, \"source\")\n        )\n\n    def run_tests(\n        self,\n        schedule_type: str,\n        owner: str | None,\n        test_filter: str | None,\n        test_exclude: str | None,\n        retry: int,\n        no_testpilot: bool,\n        timeout: int | None = None,\n    ) -> None:\n        build_args: list[str] = []\n        if self.build_opts.build_type != \"Debug\":\n            build_args.append(\"--release\")\n\n        if test_filter:\n            filter_args = [\"--\", test_filter]\n        else:\n            filter_args = []\n\n        if self.manifests_to_build is None:\n            self.run_cargo(self.install_dirs, \"test\", build_args + filter_args)\n            if self.build_doc and not filter_args:\n                self.run_cargo(self.install_dirs, \"doc\", [\"--no-deps\"])\n        else:\n            # pyre-fixme[16]: Optional type has no attribute `__iter__`.\n            for manifest in self.manifests_to_build:\n                margs = [\"--manifest-path\", self.manifest_dir(manifest)]\n                self.run_cargo(\n                    self.install_dirs, \"test\", build_args + filter_args + margs\n                )\n                if self.build_doc and not filter_args:\n                    self.run_cargo(self.install_dirs, \"doc\", [\"--no-deps\"] + margs)\n\n    def _patchup_workspace(self, dep_to_git: dict[str, dict[str, str]]) -> None:\n        \"\"\"\n        This method makes some assumptions about the state of the project and\n        its cargo dependendies:\n        1. Crates from cargo dependencies can be extracted from Cargo.toml files\n           using _extract_crates function. It is using a heuristic so check its\n           code to understand how it is done.\n        2. The extracted cargo dependencies crates can be found in the\n           dependency's install dir using _resolve_crate_to_path function\n           which again is using a heuristic.\n\n        Notice that many things might go wrong here. E.g. if someone depends\n        on another getdeps crate by writing in their Cargo.toml file:\n\n            my-rename-of-crate = { package = \"crate\", git = \"...\" }\n\n        they can count themselves lucky because the code will raise an\n        Exception. There might be more cases where the code will silently pass\n        producing bad results.\n        \"\"\"\n        workspace_dir = self.workspace_dir()\n        git_url_to_crates_and_paths = self._resolve_config(dep_to_git)\n        if git_url_to_crates_and_paths:\n            patch_cargo = os.path.join(workspace_dir, \"Cargo.toml\")\n            if os.path.isfile(patch_cargo):\n                with open(patch_cargo, \"r\") as f:\n                    manifest_content = f.read()\n            else:\n                manifest_content = \"\"\n\n            new_content = manifest_content\n            if \"[package]\" not in manifest_content:\n                # A fake manifest has to be crated to change the virtual\n                # manifest into a non-virtual. The virtual manifests are limited\n                # in many ways and the inability to define patches on them is\n                # one. Check https://github.com/rust-lang/cargo/issues/4934 to\n                # see if it is resolved.\n                null_file = \"/dev/null\"\n                if self.build_opts.is_windows():\n                    null_file = \"nul\"\n                new_content += f\"\"\"\n[package]\nname = \"fake_manifest_of_{self.manifest.name}\"\nversion = \"0.0.0\"\n\n[lib]\npath = \"{null_file}\"\n\"\"\"\n            config: list[str] = []\n            for git_url, crates_to_patch_path in git_url_to_crates_and_paths.items():\n                crates_patches = [\n                    '{} = {{ path = \"{}\" }}'.format(\n                        crate,\n                        crates_to_patch_path[crate].replace(\"\\\\\", \"\\\\\\\\\"),\n                    )\n                    for crate in sorted(crates_to_patch_path.keys())\n                ]\n                patch_key = f'[patch.\"{git_url}\"]'\n                if patch_key not in manifest_content:\n                    config.append(f\"\\n{patch_key}\\n\" + \"\\n\".join(crates_patches))\n            new_content += \"\\n\".join(config)\n            if new_content != manifest_content:\n                with open(patch_cargo, \"w\") as f:\n                    print(\n                        f\"writing patch to {patch_cargo}\",\n                        file=sys.stderr,\n                    )\n                    f.write(new_content)\n\n    def _resolve_config(\n        self, dep_to_git: dict[str, dict[str, str]]\n    ) -> dict[str, dict[str, str]]:\n        \"\"\"\n        Returns a configuration to be put inside root Cargo.toml file which\n        patches the dependencies git code with local getdeps versions.\n        See https://doc.rust-lang.org/cargo/reference/manifest.html#the-patch-section\n        \"\"\"\n        dep_to_crates = self._resolve_dep_to_crates(self.build_source_dir(), dep_to_git)\n\n        git_url_to_crates_and_paths: dict[str, dict[str, str]] = {}\n        for dep_name in sorted(dep_to_git.keys()):\n            git_conf = dep_to_git[dep_name]\n            req_crates = sorted(dep_to_crates.get(dep_name, []))\n            if not req_crates:\n                continue  # nothing to patch, move along\n\n            git_url = git_conf.get(\"repo_url\", None)\n            crate_source_map = git_conf[\"crate_source_map\"]\n            if git_url and crate_source_map:\n                crates_to_patch_path = git_url_to_crates_and_paths.get(git_url, {})\n                for c in req_crates:\n                    if c in crate_source_map and c not in crates_to_patch_path:\n                        # pyre-fixme[6]: For 1st argument expected `Union[slice[Any,\n                        #  Any, Any], SupportsIndex]` but got `str`.\n                        crates_to_patch_path[c] = crate_source_map[c]\n                        print(\n                            f\"{self.manifest.name}: Patching crate {c} via virtual manifest in {self.workspace_dir()}\",\n                            file=sys.stderr,\n                        )\n                if crates_to_patch_path:\n                    git_url_to_crates_and_paths[git_url] = crates_to_patch_path\n\n        return git_url_to_crates_and_paths\n\n    def _resolve_dep_to_git(self) -> dict[str, dict[str, str]]:\n        \"\"\"\n        For each direct dependency of the currently build manifest check if it\n        is also cargo-builded and if yes then extract it's git configs and\n        install dir\n        \"\"\"\n        dependencies = self.manifest.get_dependencies(self.ctx)\n        if not dependencies:\n            return {}\n\n        dep_to_git: dict[str, dict[str, str]] = {}\n        for dep in dependencies:\n            dep_manifest = self.loader.load_manifest(dep)\n            dep_builder = dep_manifest.get(\"build\", \"builder\", ctx=self.ctx)\n\n            dep_cargo_conf = dep_manifest.get_section_as_dict(\"cargo\", self.ctx)\n            dep_crate_map = dep_manifest.get_section_as_dict(\"crate.pathmap\", self.ctx)\n\n            if (\n                not (dep_crate_map or dep_cargo_conf)\n                and dep_builder not in [\"cargo\"]\n                or dep == \"rust\"\n            ):\n                # This dependency has no cargo rust content so ignore it.\n                # The \"rust\" dependency is an exception since it contains the\n                # toolchain.\n                continue\n\n            git_conf = dep_manifest.get_section_as_dict(\"git\", self.ctx)\n            if dep != \"rust\" and \"repo_url\" not in git_conf:\n                raise Exception(\n                    f\"{dep}: A cargo dependency requires git.repo_url to be defined.\"\n                )\n\n            if dep_builder == \"cargo\":\n                dep_source_dir = self.loader.get_project_install_dir(dep_manifest)\n                dep_source_dir = os.path.join(dep_source_dir, \"source\")\n            else:\n                fetcher = self.loader.create_fetcher(dep_manifest)\n                dep_source_dir = fetcher.get_src_dir()\n\n            crate_source_map: dict[str, str] = {}\n            if dep_crate_map:\n                for crate, subpath in dep_crate_map.items():\n                    if crate not in crate_source_map:\n                        if self.build_opts.is_windows():\n                            # pyre-fixme[16]: Optional type has no attribute `replace`.\n                            subpath = subpath.replace(\"/\", \"\\\\\")\n                        crate_path = os.path.join(dep_source_dir, subpath)\n                        print(\n                            f\"{self.manifest.name}: Mapped crate {crate} to dep {dep} dir {crate_path}\",\n                            file=sys.stderr,\n                        )\n                        crate_source_map[crate] = crate_path\n            elif dep_cargo_conf:\n                # We don't know what crates are defined buy the dep, look for them\n                search_pattern = re.compile('\\\\[package\\\\]\\nname = \"(.*)\"')\n                for crate_root, _, files in os.walk(dep_source_dir):\n                    if \"Cargo.toml\" in files:\n                        with open(os.path.join(crate_root, \"Cargo.toml\"), \"r\") as f:\n                            content = f.read()\n                            match = search_pattern.search(content)\n                            if match:\n                                crate = match.group(1)\n                                if crate:\n                                    print(\n                                        f\"{self.manifest.name}: Discovered crate {crate} in dep {dep} dir {crate_root}\",\n                                        file=sys.stderr,\n                                    )\n                                    crate_source_map[crate] = crate_root\n\n            # pyre-fixme[6]: For 2nd argument expected `Optional[str]` but got\n            #  `Dict[str, str]`.\n            git_conf[\"crate_source_map\"] = crate_source_map\n\n            if not dep_crate_map and dep_cargo_conf:\n                dep_cargo_dir = self.loader.get_project_build_dir(dep_manifest)\n                dep_cargo_dir = os.path.join(dep_cargo_dir, \"source\")\n                dep_ws_dir = dep_cargo_conf.get(\"workspace_dir\", None)\n                if dep_ws_dir:\n                    dep_cargo_dir = os.path.join(dep_cargo_dir, dep_ws_dir)\n                git_conf[\"cargo_vendored_sources\"] = dep_cargo_dir\n\n            # pyre-fixme[6]: For 2nd argument expected `Dict[str, str]` but got\n            #  `Dict[str, Optional[str]]`.\n            dep_to_git[dep] = git_conf\n        return dep_to_git\n\n    def _resolve_dep_to_crates(\n        self,\n        build_source_dir: str,\n        dep_to_git: dict[str, dict[str, str]],\n    ) -> dict[str, set[str]]:\n        \"\"\"\n        This function traverse the build_source_dir in search of Cargo.toml\n        files, extracts the crate names from them using _extract_crates\n        function and returns a merged result containing crate names per\n        dependency name from all Cargo.toml files in the project.\n        \"\"\"\n        if not dep_to_git:\n            return {}  # no deps, so don't waste time traversing files\n\n        dep_to_crates: dict[str, set[str]] = {}\n\n        # First populate explicit crate paths from dependencies\n        for name, git_conf in dep_to_git.items():\n            # pyre-fixme[16]: `str` has no attribute `keys`.\n            crates = git_conf[\"crate_source_map\"].keys()\n            if crates:\n                dep_to_crates.setdefault(name, set()).update(crates)\n\n        # Now find from Cargo.tomls\n        for root, _, files in os.walk(build_source_dir):\n            for f in files:\n                if f == \"Cargo.toml\":\n                    more_dep_to_crates = CargoBuilder._extract_crates_used(\n                        os.path.join(root, f), dep_to_git\n                    )\n                    for dep_name, crates in more_dep_to_crates.items():\n                        existing_crates = dep_to_crates.get(dep_name, set())\n                        for c in crates:\n                            if c not in existing_crates:\n                                print(\n                                    f\"Patch {self.manifest.name} uses {dep_name} crate {crates}\",\n                                    file=sys.stderr,\n                                )\n                                existing_crates.add(c)\n                        # pyre-fixme[61]: `name` is undefined, or not always defined.\n                        dep_to_crates.setdefault(name, set()).update(existing_crates)\n        return dep_to_crates\n\n    @staticmethod\n    def _extract_crates_used(\n        cargo_toml_file: str,\n        dep_to_git: dict[str, dict[str, str]],\n    ) -> dict[str, set[str]]:\n        \"\"\"\n        This functions reads content of provided cargo toml file and extracts\n        crate names per each dependency. The extraction is done by a heuristic\n        so it might be incorrect.\n        \"\"\"\n        deps_to_crates: dict[str, set[str]] = {}\n        with open(cargo_toml_file, \"r\") as f:\n            for line in f.readlines():\n                if line.startswith(\"#\") or \"git = \" not in line:\n                    continue  # filter out commented lines and ones without git deps\n                for dep_name, conf in dep_to_git.items():\n                    # Only redirect deps that point to git URLS\n                    if 'git = \"{}\"'.format(conf[\"repo_url\"]) in line:\n                        pkg_template = ' package = \"'\n                        if pkg_template in line:\n                            crate_name, _, _ = line.partition(pkg_template)[\n                                2\n                            ].partition('\"')\n                        else:\n                            crate_name, _, _ = line.partition(\"=\")\n                        deps_to_crates.setdefault(dep_name, set()).add(\n                            crate_name.strip()\n                        )\n        return deps_to_crates\n\n    def _resolve_crate_to_path(\n        self,\n        crate: str,\n        crate_source_map: dict[str, str],\n    ) -> str:\n        \"\"\"\n        Tries to find <crate> in source_dir by searching a [package]\n        keyword followed by name = \"<crate>\".\n        \"\"\"\n        search_pattern = '[package]\\nname = \"{}\"'.format(crate)\n\n        for _crate, crate_source_dir in crate_source_map.items():\n            for crate_root, _, files in os.walk(crate_source_dir):\n                if \"Cargo.toml\" in files:\n                    with open(os.path.join(crate_root, \"Cargo.toml\"), \"r\") as f:\n                        content = f.read()\n                        if search_pattern in content:\n                            return crate_root\n\n        raise Exception(\n            f\"{self.manifest.name}: Failed to find dep crate {crate} in paths {crate_source_map}\"\n        )\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/copytree.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\nfrom __future__ import annotations\n\nimport os\nimport shutil\nimport stat\nimport subprocess\nfrom collections.abc import Callable\n\nfrom .platform import is_windows\nfrom .runcmd import run_cmd\n\n\nPREFETCHED_DIRS: set[str] = set()\n\n\ndef containing_repo_type(path: str) -> tuple[str | None, str | None]:\n    while True:\n        if os.path.exists(os.path.join(path, \".git\")):\n            return (\"git\", path)\n        if os.path.exists(os.path.join(path, \".hg\")):\n            return (\"hg\", path)\n\n        parent = os.path.dirname(path)\n        if parent == path:\n            return None, None\n        path = parent\n\n\ndef find_eden_root(dirpath: str) -> str | None:\n    \"\"\"If the specified directory is inside an EdenFS checkout, returns\n    the canonical absolute path to the root of that checkout.\n\n    Returns None if the specified directory is not in an EdenFS checkout.\n    \"\"\"\n    if is_windows():\n        repo_type, repo_root = containing_repo_type(dirpath)\n        if repo_root is not None:\n            if os.path.exists(os.path.join(repo_root, \".eden\", \"config\")):\n                return repo_root\n        return None\n\n    try:\n        return os.readlink(os.path.join(dirpath, \".eden\", \"root\"))\n    except OSError:\n        return None\n\n\ndef prefetch_dir_if_eden(dirpath: str) -> None:\n    \"\"\"After an amend/rebase, Eden may need to fetch a large number\n    of trees from the servers.  The simplistic single threaded walk\n    performed by copytree makes this more expensive than is desirable\n    so we help accelerate things by performing a prefetch on the\n    source directory\"\"\"\n    global PREFETCHED_DIRS\n    if dirpath in PREFETCHED_DIRS:\n        return\n    root = find_eden_root(dirpath)\n    if root is None:\n        return\n    glob = f\"{os.path.relpath(dirpath, root).replace(os.sep, '/')}/**\"\n    print(f\"Prefetching {glob}\")\n    subprocess.call([\"edenfsctl\", \"prefetch\", \"--repo\", root, glob, \"--background\"])\n    PREFETCHED_DIRS.add(dirpath)\n\n\ndef simple_copytree(src_dir: str, dest_dir: str, symlinks: bool = False) -> str:\n    \"\"\"A simple version of shutil.copytree() that can delegate to native tools if faster\"\"\"\n    if is_windows():\n        os.makedirs(dest_dir, exist_ok=True)\n        cmd = [\n            \"robocopy.exe\",\n            src_dir,\n            dest_dir,\n            # copy directories, including empty ones\n            \"/E\",\n            # Ignore Extra files in destination\n            \"/XX\",\n            # enable parallel copy\n            \"/MT\",\n            # be quiet\n            \"/NFL\",\n            \"/NDL\",\n            \"/NJH\",\n            \"/NJS\",\n            \"/NP\",\n        ]\n        if symlinks:\n            cmd.append(\"/SL\")\n        # robocopy exits with code 1 if it copied ok, hence allow_fail\n        # https://learn.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/return-codes-used-robocopy-utility\n        exit_code = run_cmd(cmd, allow_fail=True)\n        if exit_code > 1:\n            raise subprocess.CalledProcessError(exit_code, cmd)\n        return dest_dir\n    else:\n        return shutil.copytree(src_dir, dest_dir, symlinks=symlinks)\n\n\ndef _remove_readonly_and_try_again(\n    func: Callable[..., object],\n    path: str,\n    # pyre-fixme[24]: Generic type `type` expects 1 type parameter, use\n    #  `typing.Type[<base type>]` to avoid runtime subscripting errors.\n    exc_info: tuple[type, BaseException, object],\n) -> None:\n    \"\"\"\n    Error handler for shutil.rmtree.\n    If the error is due to an access error (read only file)\n    it attempts to add write permission and then retries the operation.\n    Any other failure propagates.\n    \"\"\"\n    # exc_info is a tuple (exc_type, exc_value, traceback)\n    exc_type = exc_info[0]\n    if exc_type is PermissionError:\n        os.chmod(path, stat.S_IWRITE)\n        # Retry the original function (os.remove or os.rmdir)\n        try:\n            func(path)\n        except Exception:\n            # If it still fails, the original exception from func() will propagate\n            raise\n    else:\n        # If the error is not a PermissionError, re-raise the original exception\n        raise exc_info[1]\n\n\ndef rmtree_more(path: str) -> None:\n    \"\"\"Wrapper around shutil.rmtree() that makes it remove readonly files as well.\n    Useful when git on windows decides to make some files readonly on checkout\"\"\"\n    shutil.rmtree(path, onerror=_remove_readonly_and_try_again)\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/dyndeps.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\nfrom __future__ import annotations\n\nimport errno\nimport glob\nimport os\nimport re\nimport shlex\nimport shutil\nimport stat\nimport subprocess\nimport sys\nimport typing\nfrom collections.abc import Generator\nfrom struct import unpack\n\nif typing.TYPE_CHECKING:\n    from .buildopts import BuildOptions\n    from .envfuncs import Env\n\nOBJECT_SUBDIRS: tuple[str, ...] = (\"bin\", \"lib\", \"lib64\")\n\n\ndef copyfile(src: str, dest: str) -> None:\n    shutil.copyfile(src, dest)\n    shutil.copymode(src, dest)\n\n\nclass DepBase:\n    def __init__(\n        self,\n        buildopts: BuildOptions,\n        env: Env,\n        install_dirs: list[str],\n        strip: bool,\n    ) -> None:\n        self.buildopts: BuildOptions = buildopts\n        self.env: Env = env\n        self.install_dirs: list[str] = install_dirs\n        self.strip: bool = strip\n\n        # Deduplicates dependency processing. Keyed on the library\n        # destination path.\n        self.processed_deps: set[str] = set()\n\n        self.munged_lib_dir: str = \"\"\n\n    def list_dynamic_deps(self, objfile: str) -> list[str]:\n        raise RuntimeError(\"list_dynamic_deps not implemented\")\n\n    def interesting_dep(self, d: str) -> bool:\n        return True\n\n    # final_install_prefix must be the equivalent path to `destdir` on the\n    # installed system.  For example, if destdir is `/tmp/RANDOM/usr/local' which\n    # is intended to map to `/usr/local` in the install image, then\n    # final_install_prefix='/usr/local'.\n    # If left unspecified, destdir will be used.\n    def process_deps(\n        self, destdir: str, final_install_prefix: str | None = None\n    ) -> None:\n        if self.buildopts.is_windows():\n            lib_dir = \"bin\"\n        else:\n            lib_dir = \"lib\"\n        self.munged_lib_dir = os.path.join(destdir, lib_dir)\n\n        final_lib_dir: str = os.path.join(final_install_prefix or destdir, lib_dir)\n\n        if not os.path.isdir(self.munged_lib_dir):\n            os.makedirs(self.munged_lib_dir)\n\n        # Look only at the things that got installed in the leaf package,\n        # which will be the last entry in the install dirs list\n        inst_dir: str = self.install_dirs[-1]\n        print(\"Process deps under %s\" % inst_dir, file=sys.stderr)\n\n        for dir in OBJECT_SUBDIRS:\n            src_dir: str = os.path.join(inst_dir, dir)\n            if not os.path.isdir(src_dir):\n                continue\n            dest_dir: str = os.path.join(destdir, dir)\n            if not os.path.exists(dest_dir):\n                os.makedirs(dest_dir)\n\n            for objfile in self.list_objs_in_dir(src_dir):\n                print(\"Consider %s/%s\" % (dir, objfile))\n                dest_obj: str = os.path.join(dest_dir, objfile)\n                copyfile(os.path.join(src_dir, objfile), dest_obj)\n                self.munge_in_place(dest_obj, final_lib_dir)\n\n    def find_all_dependencies(self, build_dir: str) -> list[str]:\n        all_deps: set[str] = set()\n        for objfile in self.list_objs_in_dir(\n            build_dir, recurse=True, output_prefix=build_dir\n        ):\n            for d in self.list_dynamic_deps(objfile):\n                all_deps.add(d)\n\n        interesting_deps: set[str] = {d for d in all_deps if self.interesting_dep(d)}\n        dep_paths: list[str] = []\n        for dep in interesting_deps:\n            dep_path: str | None = self.resolve_loader_path(dep)\n            if dep_path:\n                dep_paths.append(dep_path)\n\n        return dep_paths\n\n    def munge_in_place(self, objfile: str, final_lib_dir: str) -> None:\n        print(\"Munging %s\" % objfile)\n        for d in self.list_dynamic_deps(objfile):\n            if not self.interesting_dep(d):\n                continue\n\n            # Resolve this dep: does it exist in any of our installation\n            # directories?  If so, then it is a candidate for processing\n            dep: str | None = self.resolve_loader_path(d)\n            if dep:\n                dest_dep: str = os.path.join(self.munged_lib_dir, os.path.basename(dep))\n                print(\"dep: %s -> %s\" % (d, dest_dep))\n                if dest_dep in self.processed_deps:\n                    # A previous dependency with the same name has already\n                    # been installed at dest_dep, so there is no need to copy\n                    # or munge the dependency again.\n                    # TODO: audit that both source paths have the same inode number\n                    pass\n                else:\n                    self.processed_deps.add(dest_dep)\n                    copyfile(dep, dest_dep)\n                    self.munge_in_place(dest_dep, final_lib_dir)\n\n                self.rewrite_dep(objfile, d, dep, dest_dep, final_lib_dir)\n\n        if self.strip:\n            self.strip_debug_info(objfile)\n\n    def rewrite_dep(\n        self,\n        objfile: str,\n        depname: str,\n        old_dep: str,\n        new_dep: str,\n        final_lib_dir: str,\n    ) -> None:\n        raise RuntimeError(\"rewrite_dep not implemented\")\n\n    def resolve_loader_path(self, dep: str) -> str | None:\n        if os.path.isabs(dep):\n            return dep\n        d: str = os.path.basename(dep)\n        for inst_dir in self.install_dirs:\n            for libdir in OBJECT_SUBDIRS:\n                candidate: str = os.path.join(inst_dir, libdir, d)\n                if os.path.exists(candidate):\n                    return candidate\n        return None\n\n    def list_objs_in_dir(\n        self, dir: str, recurse: bool = False, output_prefix: str = \"\"\n    ) -> Generator[str, None, None]:\n        for entry in os.listdir(dir):\n            entry_path: str = os.path.join(dir, entry)\n            st: os.stat_result = os.lstat(entry_path)\n            if stat.S_ISREG(st.st_mode):\n                if self.is_objfile(entry_path):\n                    relative_result: str = os.path.join(output_prefix, entry)\n                    yield os.path.normcase(relative_result)\n            elif recurse and stat.S_ISDIR(st.st_mode):\n                child_prefix: str = os.path.join(output_prefix, entry)\n                for result in self.list_objs_in_dir(\n                    entry_path, recurse=recurse, output_prefix=child_prefix\n                ):\n                    yield result\n\n    def is_objfile(self, objfile: str) -> bool:\n        return True\n\n    def strip_debug_info(self, objfile: str) -> None:\n        \"\"\"override this to define how to remove debug information\n        from an object file\"\"\"\n        pass\n\n    def check_call_verbose(self, args: list[str]) -> None:\n        print(\" \".join(map(shlex.quote, args)))\n        subprocess.check_call(args)\n\n\nclass WinDeps(DepBase):\n    def __init__(\n        self,\n        buildopts: BuildOptions,\n        env: Env,\n        install_dirs: list[str],\n        strip: bool,\n    ) -> None:\n        super(WinDeps, self).__init__(buildopts, env, install_dirs, strip)\n        self.dumpbin: str = self.find_dumpbin()\n\n    def find_dumpbin(self) -> str:\n        # Looking for dumpbin in the following hardcoded paths.\n        # The registry option to find the install dir doesn't work anymore.\n        globs: list[str] = [\n            (\n                \"C:/Program Files/\"\n                \"Microsoft Visual Studio/\"\n                \"*/*/VC/Tools/\"\n                \"MSVC/*/bin/Hostx64/x64/dumpbin.exe\"\n            ),\n            (\n                \"C:/Program Files (x86)/\"\n                \"Microsoft Visual Studio/\"\n                \"*/*/VC/Tools/\"\n                \"MSVC/*/bin/Hostx64/x64/dumpbin.exe\"\n            ),\n            (\n                \"C:/Program Files (x86)/\"\n                \"Common Files/\"\n                \"Microsoft/Visual C++ for Python/*/\"\n                \"VC/bin/dumpbin.exe\"\n            ),\n            (\"c:/Program Files (x86)/Microsoft Visual Studio */VC/bin/dumpbin.exe\"),\n            (\n                \"C:/Program Files/Microsoft Visual Studio/*/Professional/VC/Tools/MSVC/*/bin/HostX64/x64/dumpbin.exe\"\n            ),\n        ]\n        for pattern in globs:\n            for exe in glob.glob(pattern):\n                return exe\n\n        raise RuntimeError(\"could not find dumpbin.exe\")\n\n    # pyre-fixme[14]: `list_dynamic_deps` overrides method defined in `DepBase`\n    #  inconsistently.\n    def list_dynamic_deps(self, exe: str) -> list[str]:\n        deps: list[str] = []\n        print(\"Resolve deps for %s\" % exe)\n        output: str = subprocess.check_output(\n            [self.dumpbin, \"/nologo\", \"/dependents\", exe]\n        ).decode(\"utf-8\")\n\n        lines: list[str] = output.split(\"\\n\")\n        for line in lines:\n            m: re.Match[str] | None = re.match(\"\\\\s+(\\\\S+.dll)\", line, re.IGNORECASE)\n            if m:\n                deps.append(m.group(1).lower())\n\n        return deps\n\n    def rewrite_dep(\n        self,\n        objfile: str,\n        depname: str,\n        old_dep: str,\n        new_dep: str,\n        final_lib_dir: str,\n    ) -> None:\n        # We can't rewrite on windows, but we will\n        # place the deps alongside the exe so that\n        # they end up in the search path\n        pass\n\n    # These are the Windows system dll, which we don't want to copy while\n    # packaging.\n    SYSTEM_DLLS: set[str] = set(  # noqa: C405\n        [\n            \"advapi32.dll\",\n            \"dbghelp.dll\",\n            \"kernel32.dll\",\n            \"msvcp140.dll\",\n            \"vcruntime140.dll\",\n            \"ws2_32.dll\",\n            \"ntdll.dll\",\n            \"shlwapi.dll\",\n        ]\n    )\n\n    def interesting_dep(self, d: str) -> bool:\n        if \"api-ms-win-crt\" in d:\n            return False\n        if d in self.SYSTEM_DLLS:\n            return False\n        return True\n\n    def is_objfile(self, objfile: str) -> bool:\n        if not os.path.isfile(objfile):\n            return False\n        if objfile.lower().endswith(\".exe\"):\n            return True\n        return False\n\n    def emit_dev_run_script(self, script_path: str, dep_dirs: list[str]) -> None:\n        \"\"\"Emit a script that can be used to run build artifacts directly from the\n        build directory, without installing them.\n\n        The dep_dirs parameter should be a list of paths that need to be added to $PATH.\n        This can be computed by calling compute_dependency_paths() or\n        compute_dependency_paths_fast().\n\n        This is only necessary on Windows, which does not have RPATH, and instead\n        requires the $PATH environment variable be updated in order to find the proper\n        library dependencies.\n        \"\"\"\n        contents: str = self._get_dev_run_script_contents(dep_dirs)\n        with open(script_path, \"w\") as f:\n            f.write(contents)\n\n    def compute_dependency_paths(self, build_dir: str) -> list[str]:\n        \"\"\"Return a list of all directories that need to be added to $PATH to ensure\n        that library dependencies can be found correctly.  This is computed by scanning\n        binaries to determine exactly the right list of dependencies.\n\n        The compute_dependency_paths_fast() is a alternative function that runs faster\n        but may return additional extraneous paths.\n        \"\"\"\n        dep_dirs: set[str] = set()\n        # Find paths by scanning the binaries.\n        for dep in self.find_all_dependencies(build_dir):\n            dep_dirs.add(os.path.dirname(dep))\n\n        dep_dirs.update(self.read_custom_dep_dirs(build_dir))\n        return sorted(dep_dirs)\n\n    def compute_dependency_paths_fast(self, build_dir: str) -> list[str]:\n        \"\"\"Similar to compute_dependency_paths(), but rather than actually scanning\n        binaries, just add all library paths from the specified installation\n        directories.  This is much faster than scanning the binaries, but may result in\n        more paths being returned than actually necessary.\n        \"\"\"\n        dep_dirs: set[str] = set()\n        for inst_dir in self.install_dirs:\n            for subdir in OBJECT_SUBDIRS:\n                path: str = os.path.join(inst_dir, subdir)\n                if os.path.exists(path):\n                    dep_dirs.add(path)\n\n        dep_dirs.update(self.read_custom_dep_dirs(build_dir))\n        return sorted(dep_dirs)\n\n    def read_custom_dep_dirs(self, build_dir: str) -> set[str]:\n        # The build system may also have included libraries from other locations that\n        # we might not be able to find normally in find_all_dependencies().\n        # To handle this situation we support reading additional library paths\n        # from a LIBRARY_DEP_DIRS.txt file that may have been generated in the build\n        # output directory.\n        dep_dirs: set[str] = set()\n        try:\n            explicit_dep_dirs_path: str = os.path.join(\n                build_dir, \"LIBRARY_DEP_DIRS.txt\"\n            )\n            with open(explicit_dep_dirs_path, \"r\") as f:\n                for line in f.read().splitlines():\n                    dep_dirs.add(line)\n        except OSError as ex:\n            if ex.errno != errno.ENOENT:\n                raise\n\n        return dep_dirs\n\n    def _get_dev_run_script_contents(self, path_dirs: list[str]) -> str:\n        path_entries: list[str] = [\"$env:PATH\"] + path_dirs\n        path_str: str = \";\".join(path_entries)\n        return \"\"\"\\\n$orig_env = $env:PATH\n$env:PATH = \"{path_str}\"\n\ntry {{\n    $cmd_args = $args[1..$args.length]\n    & $args[0] @cmd_args\n}} finally {{\n    $env:PATH = $orig_env\n}}\n\"\"\".format(\n            path_str=path_str\n        )\n\n\nclass ElfDeps(DepBase):\n    def __init__(\n        self,\n        buildopts: BuildOptions,\n        env: Env,\n        install_dirs: list[str],\n        strip: bool,\n    ) -> None:\n        super(ElfDeps, self).__init__(buildopts, env, install_dirs, strip)\n\n        # We need patchelf to rewrite deps, so ensure that it is built...\n        args: list[str] = [sys.executable, sys.argv[0]]\n        if buildopts.allow_system_packages:\n            args.append(\"--allow-system-packages\")\n        subprocess.check_call(args + [\"build\", \"patchelf\"])\n\n        # ... and that we know where it lives\n        patchelf_install: str = os.fsdecode(\n            subprocess.check_output(args + [\"show-inst-dir\", \"patchelf\"]).strip()\n        )\n        if not patchelf_install:\n            # its a system package, so we assume it is in the path\n            patchelf_install = \"patchelf\"\n        else:\n            patchelf_install = os.path.join(patchelf_install, \"bin\", \"patchelf\")\n        self.patchelf: str = patchelf_install\n\n    def list_dynamic_deps(self, objfile: str) -> list[str]:\n        out: str = (\n            subprocess.check_output(\n                [self.patchelf, \"--print-needed\", objfile], env=dict(self.env.items())\n            )\n            .decode(\"utf-8\")\n            .strip()\n        )\n        lines: list[str] = out.split(\"\\n\")\n        return lines\n\n    def rewrite_dep(\n        self,\n        objfile: str,\n        depname: str,\n        old_dep: str,\n        new_dep: str,\n        final_lib_dir: str,\n    ) -> None:\n        final_dep: str = os.path.join(\n            final_lib_dir,\n            os.path.relpath(new_dep, self.munged_lib_dir),\n        )\n        self.check_call_verbose(\n            [self.patchelf, \"--replace-needed\", depname, final_dep, objfile]\n        )\n\n    def is_objfile(self, objfile: str) -> bool:\n        if not os.path.isfile(objfile):\n            return False\n        with open(objfile, \"rb\") as f:\n            # https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header\n            magic: bytes = f.read(4)\n            return magic == b\"\\x7fELF\"\n\n    def strip_debug_info(self, objfile: str) -> None:\n        self.check_call_verbose([\"strip\", objfile])\n\n\n# MACH-O magic number\nMACH_MAGIC: int = 0xFEEDFACF\n\n\nclass MachDeps(DepBase):\n    def interesting_dep(self, d: str) -> bool:\n        if d.startswith(\"/usr/lib/\") or d.startswith(\"/System/\"):\n            return False\n        return True\n\n    def is_objfile(self, objfile: str) -> bool:\n        if not os.path.isfile(objfile):\n            return False\n        with open(objfile, \"rb\") as f:\n            # mach stores the magic number in native endianness,\n            # so unpack as native here and compare\n            header: bytes = f.read(4)\n            if len(header) != 4:\n                return False\n            magic: int = unpack(\"I\", header)[0]\n            return magic == MACH_MAGIC\n\n    def list_dynamic_deps(self, objfile: str) -> list[str]:\n        if not self.interesting_dep(objfile):\n            return []\n        out: str = (\n            subprocess.check_output(\n                [\"otool\", \"-L\", objfile], env=dict(self.env.items())\n            )\n            .decode(\"utf-8\")\n            .strip()\n        )\n        lines: list[str] = out.split(\"\\n\")\n        deps: list[str] = []\n        for line in lines:\n            m: re.Match[str] | None = re.match(\"\\t(\\\\S+)\\\\s\", line)\n            if m:\n                if os.path.basename(m.group(1)) != os.path.basename(objfile):\n                    deps.append(os.path.normcase(m.group(1)))\n        return deps\n\n    def rewrite_dep(\n        self,\n        objfile: str,\n        depname: str,\n        old_dep: str,\n        new_dep: str,\n        final_lib_dir: str,\n    ) -> None:\n        if objfile.endswith(\".dylib\"):\n            # Erase the original location from the id of the shared\n            # object.  It doesn't appear to hurt to retain it, but\n            # it does look weird, so let's rewrite it to be sure.\n            self.check_call_verbose(\n                [\"install_name_tool\", \"-id\", os.path.basename(objfile), objfile]\n            )\n        final_dep: str = os.path.join(\n            final_lib_dir,\n            os.path.relpath(new_dep, self.munged_lib_dir),\n        )\n\n        self.check_call_verbose(\n            [\"install_name_tool\", \"-change\", depname, final_dep, objfile]\n        )\n\n\ndef create_dyn_dep_munger(\n    buildopts: BuildOptions,\n    env: Env,\n    install_dirs: list[str],\n    strip: bool = False,\n) -> DepBase | None:\n    if buildopts.is_linux():\n        return ElfDeps(buildopts, env, install_dirs, strip)\n    if buildopts.is_darwin():\n        return MachDeps(buildopts, env, install_dirs, strip)\n    if buildopts.is_windows():\n        return WinDeps(buildopts, env, install_dirs, strip)\n    if buildopts.is_freebsd():\n        return ElfDeps(buildopts, env, install_dirs, strip)\n    return None\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/envfuncs.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\nfrom __future__ import annotations\n\nimport os\nimport shlex\nimport sys\nfrom collections.abc import ItemsView, Iterator, KeysView, Mapping, ValuesView\n\n\nclass Env:\n    def __init__(self, src: Mapping[str, str] | None = None) -> None:\n        self._dict: dict[str, str] = {}\n        if src is None:\n            self.update(os.environ)\n        else:\n            self.update(src)\n\n    def update(self, src: Mapping[str, str]) -> None:\n        for k, v in src.items():\n            self.set(k, v)\n\n    def copy(self) -> Env:\n        return Env(self._dict)\n\n    def _key(self, key: str) -> str | None:\n        # The `str` cast may not appear to be needed, but without it we run\n        # into issues when passing the environment to subprocess.  The main\n        # issue is that in python2 `os.environ` (which is the initial source\n        # of data for the environment) uses byte based strings, but this\n        # project uses `unicode_literals`.  `subprocess` will raise an error\n        # if the environment that it is passed has a mixture of byte and\n        # unicode strings.\n        # It is simplest to force everything to be `str` for the sake of\n        # consistency.\n        key = str(key)\n        if sys.platform.startswith(\"win\"):\n            # Windows env var names are case insensitive but case preserving.\n            # An implementation of PAR files on windows gets confused if\n            # the env block contains keys with conflicting case, so make a\n            # pass over the contents to remove any.\n            # While this O(n) scan is technically expensive and gross, it\n            # is practically not a problem because the volume of calls is\n            # relatively low and the cost of manipulating the env is dwarfed\n            # by the cost of spawning a process on windows.  In addition,\n            # since the processes that we run are expensive anyway, this\n            # overhead is not the worst thing to worry about.\n            for k in list(self._dict.keys()):\n                if str(k).lower() == key.lower():\n                    return k\n        elif key in self._dict:\n            return key\n        return None\n\n    def get(self, key: str, defval: str | None = None) -> str | None:\n        resolved_key = self._key(key)\n        if resolved_key is None:\n            return defval\n        return self._dict[resolved_key]\n\n    def __getitem__(self, key: str) -> str:\n        val = self.get(key)\n        if val is None:\n            raise KeyError(key)\n        return val\n\n    def unset(self, key: str) -> None:\n        if key is None:\n            raise KeyError(\"attempting to unset env[None]\")\n\n        resolved_key = self._key(key)\n        if resolved_key:\n            del self._dict[resolved_key]\n\n    def __delitem__(self, key: str) -> None:\n        self.unset(key)\n\n    def __repr__(self) -> str:\n        return repr(self._dict)\n\n    def set(self, key: str, value: str) -> None:\n        if key is None:\n            raise KeyError(\"attempting to assign env[None] = %r\" % value)\n\n        if value is None:\n            raise ValueError(\"attempting to assign env[%s] = None\" % key)\n\n        # The `str` conversion is important to avoid triggering errors\n        # with subprocess if we pass in a unicode value; see commentary\n        # in the `_key` method.\n        key = str(key)\n        value = str(value)\n\n        # The `unset` call is necessary on windows where the keys are\n        # case insensitive.   Since this dict is case sensitive, simply\n        # assigning the value to the new key is not sufficient to remove\n        # the old value.  The `unset` call knows how to match keys and\n        # remove any potential duplicates.\n        self.unset(key)\n        self._dict[key] = value\n\n    def __setitem__(self, key: str, value: str) -> None:\n        self.set(key, value)\n\n    def __iter__(self) -> Iterator[str]:\n        return self._dict.__iter__()\n\n    def __len__(self) -> int:\n        return len(self._dict)\n\n    def keys(self) -> KeysView[str]:\n        return self._dict.keys()\n\n    def values(self) -> ValuesView[str]:\n        return self._dict.values()\n\n    def items(self) -> ItemsView[str, str]:\n        return self._dict.items()\n\n\ndef add_path_entry(\n    env: Env, name: str, item: str, append: bool = True, separator: str = os.pathsep\n) -> None:\n    \"\"\"Cause `item` to be added to the path style env var named\n    `name` held in the `env` dict.  `append` specifies whether\n    the item is added to the end (the default) or should be\n    prepended if `name` already exists.\"\"\"\n    val = env.get(name, \"\")\n    if val is not None and len(val) > 0:\n        val_list = val.split(separator)\n    else:\n        val_list = []\n    if append:\n        val_list.append(item)\n    else:\n        val_list.insert(0, item)\n    env.set(name, separator.join(val_list))\n\n\ndef add_flag(env: Env, name: str, flag: str, append: bool = True) -> None:\n    \"\"\"Cause `flag` to be added to the CXXFLAGS-style env var named\n    `name` held in the `env` dict.  `append` specifies whether the\n    flag is added to the end (the default) or should be prepended if\n    `name` already exists.\"\"\"\n    val = shlex.split(env.get(name, \"\") or \"\")\n    if append:\n        val.append(flag)\n    else:\n        val.insert(0, flag)\n    env.set(name, \" \".join(val))\n\n\n_path_search_cache: dict[object, str | None] = {}\n_not_found: object = object()\n\n\ndef tpx_path() -> str:\n    return \"xplat/testinfra/tpx/ctp.tpx\"\n\n\ndef path_search(\n    env: Mapping[str, str], exename: str, defval: str | None = None\n) -> str | None:\n    \"\"\"Search for exename in the PATH specified in env.\n    exename is eg: `ninja` and this function knows to append a .exe\n    to the end on windows.\n    Returns the path to the exe if found, or None if either no\n    PATH is set in env or no executable is found.\"\"\"\n\n    path = env.get(\"PATH\", None)\n    if path is None:\n        return defval\n\n    # The project hash computation code searches for C++ compilers (g++, clang, etc)\n    # repeatedly.  Cache the result so we don't end up searching for these over and over\n    # again.\n    cache_key = (path, exename)\n    result = _path_search_cache.get(cache_key, _not_found)\n    if result is _not_found:\n        result = _perform_path_search(path, exename)\n        _path_search_cache[cache_key] = result\n    # pyre-fixme[7]: Expected `Optional[str]` but got `Optional[object]`.\n    return result\n\n\ndef _perform_path_search(path: str, exename: str) -> str | None:\n    is_win = sys.platform.startswith(\"win\")\n    if is_win:\n        exename = \"%s.exe\" % exename\n\n    for bindir in path.split(os.pathsep):\n        full_name = os.path.join(bindir, exename)\n        if os.path.exists(full_name) and os.path.isfile(full_name):\n            if not is_win and not os.access(full_name, os.X_OK):\n                continue\n            return full_name\n\n    return None\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/errors.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\n\nclass TransientFailure(Exception):\n    \"\"\"Raising this error causes getdeps to return with an error code\n    that Sandcastle will consider to be a retryable transient\n    infrastructure error\"\"\"\n\n    pass\n\n\nclass ManifestNotFound(Exception):\n    def __init__(self, manifest_name: str) -> None:\n        super(Exception, self).__init__(\"Unable to find manifest '%s'\" % manifest_name)\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/expr.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\nfrom __future__ import annotations\n\nimport re\nimport shlex\nfrom collections.abc import Callable\n\n\ndef parse_expr(expr_text: str, valid_variables: set[str]) -> ExprNode:\n    \"\"\"parses the simple criteria expression syntax used in\n    dependency specifications.\n    Returns an ExprNode instance that can be evaluated like this:\n\n    ```\n    expr = parse_expr(\"os=windows\")\n    ok = expr.eval({\n        \"os\": \"windows\"\n    })\n    ```\n\n    Whitespace is allowed between tokens.  The following terms\n    are recognized:\n\n    KEY = VALUE   # Evaluates to True if ctx[KEY] == VALUE\n    not(EXPR)     # Evaluates to True if EXPR evaluates to False\n                  # and vice versa\n    all(EXPR1, EXPR2, ...) # Evaluates True if all of the supplied\n                           # EXPR's also evaluate True\n    any(EXPR1, EXPR2, ...) # Evaluates True if any of the supplied\n                           # EXPR's also evaluate True, False if\n                           # none of them evaluated true.\n    \"\"\"\n\n    p = Parser(expr_text, valid_variables)\n    return p.parse()\n\n\nclass ExprNode:\n    def eval(self, ctx: dict[str, str | None]) -> bool:\n        return False\n\n\nclass TrueExpr(ExprNode):\n    def eval(self, ctx: dict[str, str | None]) -> bool:\n        return True\n\n    def __str__(self) -> str:\n        return \"true\"\n\n\nclass NotExpr(ExprNode):\n    def __init__(self, node: ExprNode) -> None:\n        self._node: ExprNode = node\n\n    def eval(self, ctx: dict[str, str | None]) -> bool:\n        return not self._node.eval(ctx)\n\n    def __str__(self) -> str:\n        return \"not(%s)\" % self._node\n\n\nclass AllExpr(ExprNode):\n    def __init__(self, nodes: list[ExprNode]) -> None:\n        self._nodes: list[ExprNode] = nodes\n\n    def eval(self, ctx: dict[str, str | None]) -> bool:\n        for node in self._nodes:\n            if not node.eval(ctx):\n                return False\n        return True\n\n    def __str__(self) -> str:\n        items: list[str] = []\n        for node in self._nodes:\n            items.append(str(node))\n        return \"all(%s)\" % \",\".join(items)\n\n\nclass AnyExpr(ExprNode):\n    def __init__(self, nodes: list[ExprNode]) -> None:\n        self._nodes: list[ExprNode] = nodes\n\n    def eval(self, ctx: dict[str, str | None]) -> bool:\n        for node in self._nodes:\n            if node.eval(ctx):\n                return True\n        return False\n\n    def __str__(self) -> str:\n        items: list[str] = []\n        for node in self._nodes:\n            items.append(str(node))\n        return \"any(%s)\" % \",\".join(items)\n\n\nclass EqualExpr(ExprNode):\n    def __init__(self, key: str, value: str) -> None:\n        self._key: str = key\n        self._value: str = value\n\n    def eval(self, ctx: dict[str, str | None]) -> bool:\n        return ctx.get(self._key) == self._value\n\n    def __str__(self) -> str:\n        return \"%s=%s\" % (self._key, self._value)\n\n\nclass Parser:\n    def __init__(self, text: str, valid_variables: set[str]) -> None:\n        self.text: str = text\n        self.lex: shlex.shlex = shlex.shlex(text)\n        self.valid_variables: set[str] = valid_variables\n\n    def parse(self) -> ExprNode:\n        expr = self.top()\n        garbage = self.lex.get_token()\n        if garbage != \"\":\n            raise Exception(\n                \"Unexpected token %s after EqualExpr in %s\" % (garbage, self.text)\n            )\n        return expr\n\n    def top(self) -> ExprNode:\n        name = self.ident()\n        op = self.lex.get_token()\n\n        if op == \"(\":\n            parsers: dict[str, Callable[[], ExprNode]] = {\n                \"not\": self.parse_not,\n                \"any\": self.parse_any,\n                \"all\": self.parse_all,\n            }\n            func = parsers.get(name)\n            if not func:\n                raise Exception(\"invalid term %s in %s\" % (name, self.text))\n            return func()\n\n        if op == \"=\":\n            if name not in self.valid_variables:\n                raise Exception(\"unknown variable %r in expression\" % (name,))\n            # remove shell quote from value so can test things with period in them, e.g \"18.04\"\n            token = self.lex.get_token()\n            if token is None:\n                raise Exception(\"unexpected end of expression in %s\" % self.text)\n            unquoted = \" \".join(shlex.split(token))\n            return EqualExpr(name, unquoted)\n\n        raise Exception(\n            \"Unexpected token sequence '%s %s' in %s\" % (name, op, self.text)\n        )\n\n    def ident(self) -> str:\n        ident = self.lex.get_token()\n        if ident is None or not re.match(\"[a-zA-Z]+\", ident):\n            raise Exception(\"expected identifier found %s\" % ident)\n        return ident\n\n    def parse_not(self) -> NotExpr:\n        node = self.top()\n        expr = NotExpr(node)\n        tok = self.lex.get_token()\n        if tok != \")\":\n            raise Exception(\"expected ')' found %s\" % tok)\n        return expr\n\n    def parse_any(self) -> AnyExpr:\n        nodes: list[ExprNode] = []\n        while True:\n            nodes.append(self.top())\n            tok = self.lex.get_token()\n            if tok == \")\":\n                break\n            if tok != \",\":\n                raise Exception(\"expected ',' or ')' but found %s\" % tok)\n        return AnyExpr(nodes)\n\n    def parse_all(self) -> AllExpr:\n        nodes: list[ExprNode] = []\n        while True:\n            nodes.append(self.top())\n            tok = self.lex.get_token()\n            if tok == \")\":\n                break\n            if tok != \",\":\n                raise Exception(\"expected ',' or ')' but found %s\" % tok)\n        return AllExpr(nodes)\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/fetcher.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom __future__ import annotations\n\n# pyre-strict\n\nimport errno\nimport hashlib\nimport os\nimport random\nimport re\nimport shlex\nimport shutil\nimport stat\nimport subprocess\nimport sys\nimport tarfile\nimport time\nimport zipfile\nfrom abc import ABC, abstractmethod\nfrom collections.abc import Iterator\nfrom datetime import datetime\nfrom typing import NamedTuple, TYPE_CHECKING\nfrom urllib.parse import urlparse\nfrom urllib.request import Request, urlopen\n\nfrom .copytree import prefetch_dir_if_eden\nfrom .envfuncs import Env\nfrom .errors import TransientFailure\nfrom .platform import HostType, is_windows\nfrom .runcmd import run_cmd\n\nif TYPE_CHECKING:\n    from .buildopts import BuildOptions\n    from .manifest import ManifestContext, ManifestParser\n\n\ndef file_name_is_cmake_file(file_name: str) -> bool:\n    file_name = file_name.lower()\n    base = os.path.basename(file_name)\n    return (\n        base.endswith(\".cmake\")\n        or base.endswith(\".cmake.in\")\n        or base == \"cmakelists.txt\"\n    )\n\n\nclass ChangeStatus:\n    \"\"\"Indicates the nature of changes that happened while updating\n    the source directory.  There are two broad uses:\n    * When extracting archives for third party software we want to\n      know that we did something (eg: we either extracted code or\n      we didn't do anything)\n    * For 1st party code where we use shipit to transform the code,\n      we want to know if we changed anything so that we can perform\n      a build, but we generally want to be a little more nuanced\n      and be able to distinguish between just changing a source file\n      and whether we might need to reconfigure the build system.\n    \"\"\"\n\n    def __init__(self, all_changed: bool = False) -> None:\n        \"\"\"Construct a ChangeStatus object.  The default is to create\n        a status that indicates no changes, but passing all_changed=True\n        will create one that indicates that everything changed\"\"\"\n        if all_changed:\n            self.source_files: int = 1\n            self.make_files: int = 1\n        else:\n            self.source_files: int = 0\n            self.make_files: int = 0\n\n    def record_change(self, file_name: str) -> None:\n        \"\"\"Used by the shipit fetcher to record changes as it updates\n        files in the destination.  If the file name might be one used\n        in the cmake build system that we use for 1st party code, then\n        record that as a \"make file\" change.  We could broaden this\n        to match any file used by various build systems, but it is\n        only really useful for our internal cmake stuff at this time.\n        If the file isn't a build file and is under the `fbcode_builder`\n        dir then we don't class that as an interesting change that we\n        might need to rebuild, so we ignore it.\n        Otherwise we record the file as a source file change.\"\"\"\n\n        file_name = file_name.lower()\n        if file_name_is_cmake_file(file_name):\n            self.make_files += 1\n        elif \"/fbcode_builder/cmake\" in file_name:\n            self.source_files += 1\n        elif \"/fbcode_builder/\" not in file_name:\n            self.source_files += 1\n\n    def sources_changed(self) -> bool:\n        \"\"\"Returns true if any source files were changed during\n        an update operation.  This will typically be used to decide\n        that the build system to be run on the source dir in an\n        incremental mode\"\"\"\n        return self.source_files > 0\n\n    def build_changed(self) -> bool:\n        \"\"\"Returns true if any build files were changed during\n        an update operation.  This will typically be used to decidfe\n        that the build system should be reconfigured and re-run\n        as a full build\"\"\"\n        return self.make_files > 0\n\n\nclass Fetcher(ABC):\n    \"\"\"The Fetcher is responsible for fetching and extracting the\n    sources for project.  The Fetcher instance defines where the\n    extracted data resides and reports this to the consumer via\n    its `get_src_dir` method.\"\"\"\n\n    def update(self) -> ChangeStatus:\n        \"\"\"Brings the src dir up to date, ideally minimizing\n        changes so that a subsequent build doesn't over-build.\n        Returns a ChangeStatus object that helps the caller to\n        understand the nature of the changes required during\n        the update.\"\"\"\n        return ChangeStatus()\n\n    @abstractmethod\n    def clean(self) -> None:\n        \"\"\"Reverts any changes that might have been made to\n        the src dir\"\"\"\n        pass\n\n    @abstractmethod\n    def hash(self) -> str:\n        \"\"\"Returns a hash that identifies the version of the code in the\n        working copy.  For a git repo this is commit hash for the working\n        copy.  For other Fetchers this should relate to the version of\n        the code in the src dir.  The intent is that if a manifest\n        changes the version/rev of a project that the hash be different.\n        Importantly, this should be computable without actually fetching\n        the code, as we want this to factor into a hash used to download\n        a pre-built version of the code, without having to first download\n        and extract its sources (eg: boost on windows is pretty painful).\n        \"\"\"\n        pass\n\n    @abstractmethod\n    def get_src_dir(self) -> str:\n        \"\"\"Returns the source directory that the project was\n        extracted into\"\"\"\n        pass\n\n\nclass LocalDirFetcher:\n    \"\"\"This class exists to override the normal fetching behavior, and\n    use an explicit user-specified directory for the project sources.\n\n    This fetcher cannot update or track changes.  It always reports that the\n    project has changed, forcing it to always be built.\"\"\"\n\n    def __init__(self, path: str) -> None:\n        self.path: str = os.path.realpath(path)\n\n    def update(self) -> ChangeStatus:\n        return ChangeStatus(all_changed=True)\n\n    def hash(self) -> str:\n        return \"0\" * 40\n\n    def get_src_dir(self) -> str:\n        return self.path\n\n    def clean(self) -> None:\n        pass\n\n\nclass SystemPackageFetcher:\n    def __init__(\n        self, build_options: BuildOptions, packages: dict[str, list[str]]\n    ) -> None:\n        self.manager: str | None = build_options.host_type.get_package_manager()\n        # pyre-fixme[6]: For 1st argument expected `str` but got `Optional[str]`.\n        self.packages: list[str] | None = packages.get(self.manager)\n        self.host_type: HostType = build_options.host_type\n        if self.packages:\n            self.installed: bool | None = None\n        else:\n            self.installed = False\n\n    def packages_are_installed(self) -> bool:\n        if self.installed is not None:\n            return self.installed\n\n        cmd = None\n        if self.manager == \"rpm\":\n            # pyre-fixme[6]: For 1st argument expected\n            #  `pyre_extensions.PyreReadOnly[Iterable[SupportsRichComparisonT]]` but\n            #  got `Optional[List[str]]`.\n            cmd = [\"rpm\", \"-q\"] + sorted(self.packages)\n        elif self.manager == \"deb\":\n            # pyre-fixme[6]: For 1st argument expected\n            #  `pyre_extensions.PyreReadOnly[Iterable[SupportsRichComparisonT]]` but\n            #  got `Optional[List[str]]`.\n            cmd = [\"dpkg\", \"-s\"] + sorted(self.packages)\n        elif self.manager == \"homebrew\":\n            # pyre-fixme[6]: For 1st argument expected\n            #  `pyre_extensions.PyreReadOnly[Iterable[SupportsRichComparisonT]]` but\n            #  got `Optional[List[str]]`.\n            cmd = [\"brew\", \"ls\", \"--versions\"] + sorted(self.packages)\n\n        if cmd:\n            proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n            if proc.returncode == 0:\n                # captured as binary as we will hash this later\n                # pyre-fixme[8]: Attribute has type `Optional[bool]`; used as `bytes`.\n                self.installed = proc.stdout\n            else:\n                # Need all packages to be present to consider us installed\n                self.installed = False\n\n        else:\n            self.installed = False\n\n        return bool(self.installed)\n\n    def update(self) -> ChangeStatus:\n        assert self.installed\n        return ChangeStatus(all_changed=False)\n\n    def hash(self) -> str:\n        if self.packages_are_installed():\n            return hashlib.sha256(self.installed).hexdigest()\n        else:\n            return \"0\" * 40\n\n    def get_src_dir(self) -> None:\n        return None\n\n\nclass PreinstalledNopFetcher(SystemPackageFetcher):\n    def __init__(self) -> None:\n        self.installed = True\n\n\nclass GitFetcher(Fetcher):\n    DEFAULT_DEPTH = 1\n\n    def __init__(\n        self,\n        build_options: BuildOptions,\n        manifest: ManifestParser,\n        repo_url: str,\n        rev: str,\n        depth: int,\n        branch: str,\n    ) -> None:\n        # Extract the host/path portions of the URL and generate a flattened\n        # directory name.  eg:\n        # github.com/facebook/folly.git -> github.com-facebook-folly.git\n        url = urlparse(repo_url)\n        directory = \"%s%s%s\" % (url.netloc, url.path, branch if branch else \"\")\n        for s in [\"/\", \"\\\\\", \":\"]:\n            directory = directory.replace(s, \"-\")\n\n        # Place it in a repos dir in the scratch space\n        repos_dir = os.path.join(build_options.scratch_dir, \"repos\")\n        if not os.path.exists(repos_dir):\n            os.makedirs(repos_dir)\n        self.repo_dir: str = os.path.join(repos_dir, directory)\n\n        if not rev and build_options.project_hashes:\n            hash_file = os.path.join(\n                build_options.project_hashes,\n                re.sub(\"\\\\.git$\", \"-rev.txt\", url.path[1:]),\n            )\n            if os.path.exists(hash_file):\n                with open(hash_file, \"r\") as f:\n                    data = f.read()\n                    m = re.match(\"Subproject commit ([a-fA-F0-9]{40})\", data)\n                    if not m:\n                        raise Exception(\"Failed to parse rev from %s\" % hash_file)\n                    rev = m.group(1)\n                    print(\n                        \"Using pinned rev %s for %s\" % (rev, repo_url), file=sys.stderr\n                    )\n\n        self.rev: str = rev or branch or \"main\"\n        self.origin_repo: str = repo_url\n        self.manifest: ManifestParser = manifest\n        self.depth: int = depth if depth else GitFetcher.DEFAULT_DEPTH\n        self.branch: str = branch\n\n    def _update(self) -> ChangeStatus:\n        current_hash = (\n            subprocess.check_output([\"git\", \"rev-parse\", \"HEAD\"], cwd=self.repo_dir)\n            .strip()\n            .decode(\"utf-8\")\n        )\n        target_hash = (\n            subprocess.check_output([\"git\", \"rev-parse\", self.rev], cwd=self.repo_dir)\n            .strip()\n            .decode(\"utf-8\")\n        )\n        if target_hash == current_hash:\n            # It's up to date, so there are no changes.  This doesn't detect eg:\n            # if origin/main moved and rev='main', but that's ok for our purposes;\n            # we should be using explicit hashes or eg: a stable branch for the cases\n            # that we care about, and it isn't unreasonable to require that the user\n            # explicitly perform a clean build if those have moved.  For the most\n            # part we prefer that folks build using a release tarball from github\n            # rather than use the git protocol, as it is generally a bit quicker\n            # to fetch and easier to hash and verify tarball downloads.\n            return ChangeStatus()\n\n        print(\"Updating %s -> %s\" % (self.repo_dir, self.rev))\n        run_cmd([\"git\", \"fetch\", \"origin\", self.rev], cwd=self.repo_dir)\n        run_cmd([\"git\", \"checkout\", self.rev], cwd=self.repo_dir)\n        run_cmd([\"git\", \"submodule\", \"update\", \"--init\"], cwd=self.repo_dir)\n\n        return ChangeStatus(True)\n\n    def update(self) -> ChangeStatus:\n        if os.path.exists(self.repo_dir):\n            return self._update()\n        self._clone()\n        return ChangeStatus(True)\n\n    def _clone(self) -> None:\n        print(\"Cloning %s...\" % self.origin_repo)\n        # The basename/dirname stuff allows us to dance around issues where\n        # eg: this python process is native win32, but the git.exe is cygwin\n        # or msys and doesn't like the absolute windows path that we'd otherwise\n        # pass to it.  Careful use of cwd helps avoid headaches with cygpath.\n        cmd = [\n            \"git\",\n            \"clone\",\n            \"--depth=\" + str(self.depth),\n        ]\n        if self.branch:\n            cmd.append(\"--branch=\" + self.branch)\n        cmd += [\n            \"--\",\n            self.origin_repo,\n            os.path.basename(self.repo_dir),\n        ]\n        run_cmd(cmd, cwd=os.path.dirname(self.repo_dir))\n        self._update()\n\n    def clean(self) -> None:\n        if os.path.exists(self.repo_dir):\n            run_cmd([\"git\", \"clean\", \"-fxd\"], cwd=self.repo_dir)\n\n    def hash(self) -> str:\n        return self.rev\n\n    def get_src_dir(self) -> str:\n        return self.repo_dir\n\n\ndef does_file_need_update(\n    src_name: str, src_st: os.stat_result, dest_name: str\n) -> bool:\n    try:\n        target_st = os.lstat(dest_name)\n    except OSError as exc:\n        if exc.errno != errno.ENOENT:\n            raise\n        return True\n\n    if src_st.st_size != target_st.st_size:\n        return True\n\n    if stat.S_IFMT(src_st.st_mode) != stat.S_IFMT(target_st.st_mode):\n        return True\n    if stat.S_ISLNK(src_st.st_mode):\n        return os.readlink(src_name) != os.readlink(dest_name)\n    if not stat.S_ISREG(src_st.st_mode):\n        return True\n\n    # They might have the same content; compare.\n    with open(src_name, \"rb\") as sf, open(dest_name, \"rb\") as df:\n        chunk_size = 8192\n        while True:\n            src_data = sf.read(chunk_size)\n            dest_data = df.read(chunk_size)\n            if src_data != dest_data:\n                return True\n            if len(src_data) < chunk_size:\n                # EOF\n                break\n    return False\n\n\ndef copy_if_different(src_name: str, dest_name: str) -> bool:\n    \"\"\"Copy src_name -> dest_name, but only touch dest_name\n    if src_name is different from dest_name, making this a\n    more build system friendly way to copy.\"\"\"\n    src_st = os.lstat(src_name)\n    if not does_file_need_update(src_name, src_st, dest_name):\n        return False\n\n    dest_parent = os.path.dirname(dest_name)\n    if not os.path.exists(dest_parent):\n        os.makedirs(dest_parent)\n    if stat.S_ISLNK(src_st.st_mode):\n        try:\n            os.unlink(dest_name)\n        except OSError as exc:\n            if exc.errno != errno.ENOENT:\n                raise\n        target = os.readlink(src_name)\n        os.symlink(target, dest_name)\n    else:\n        shutil.copy2(src_name, dest_name)\n\n    return True\n\n\ndef filter_strip_marker(dest_name: str, marker: str) -> None:\n    \"\"\"Strip lines/blocks tagged with the given marker from a file.\"\"\"\n    try:\n        with open(dest_name, \"r\") as f:\n            content = f.read()\n    except (UnicodeDecodeError, PermissionError):\n        return\n\n    if marker not in content:\n        return\n\n    escaped = re.escape(marker)\n    block_re = re.compile(\n        r\"[^\\n]*\" + escaped + r\"-start[^\\n]*\\n.*?[^\\n]*\" + escaped + r\"-end[^\\n]*\\n?\",\n        re.DOTALL,\n    )\n    line_re = re.compile(r\".*\" + escaped + r\".*\\n?\")\n\n    filtered = block_re.sub(\"\", content)\n    filtered = line_re.sub(\"\", filtered)\n    if filtered != content:\n        with open(dest_name, \"w\") as f:\n            f.write(filtered)\n\n\ndef list_files_under_dir_newer_than_timestamp(\n    dir_to_scan: str, ts: int\n) -> Iterator[str]:\n    for root, _dirs, files in os.walk(dir_to_scan):\n        for src_file in files:\n            full_name = os.path.join(root, src_file)\n            st = os.lstat(full_name)\n            if st.st_mtime > ts:\n                yield full_name\n\n\nclass ShipitPathMap:\n    def __init__(self) -> None:\n        self.roots: list[str] = []\n        self.mapping: list[str] = []\n        self.exclusion: list[str] = []\n        self.strip_marker: str = \"@fb-only\"\n\n    def add_mapping(self, fbsource_dir: str, target_dir: str) -> None:\n        \"\"\"Add a posix path or pattern.  We cannot normpath the input\n        here because that would change the paths from posix to windows\n        form and break the logic throughout this class.\"\"\"\n        self.roots.append(fbsource_dir)\n        # pyre-fixme[6]: For 1st argument expected `str` but got `Tuple[str, str]`.\n        self.mapping.append((fbsource_dir, target_dir))\n\n    def add_exclusion(self, pattern: str) -> None:\n        # pyre-fixme[6]: For 1st argument expected `str` but got `Pattern[str]`.\n        self.exclusion.append(re.compile(pattern))\n\n    def _minimize_roots(self) -> None:\n        \"\"\"compute the de-duplicated set of roots within fbsource.\n        We take the shortest common directory prefix to make this\n        determination\"\"\"\n        self.roots.sort(key=len)\n        minimized = []\n\n        for r in self.roots:\n            add_this_entry = True\n            for existing in minimized:\n                if r.startswith(existing + \"/\"):\n                    add_this_entry = False\n                    break\n            if add_this_entry:\n                minimized.append(r)\n\n        self.roots = minimized\n\n    def _sort_mapping(self) -> None:\n        self.mapping.sort(reverse=True, key=lambda x: len(x[0]))\n\n    def _map_name(self, norm_name: str, dest_root: str) -> str | None:\n        if norm_name.endswith(\".pyc\") or norm_name.endswith(\".swp\"):\n            # Ignore some incidental garbage while iterating\n            return None\n\n        for excl in self.exclusion:\n            # pyre-fixme[16]: `str` has no attribute `match`.\n            if excl.match(norm_name):\n                return None\n\n        for src_name, dest_name in self.mapping:\n            if norm_name == src_name or norm_name.startswith(src_name + \"/\"):\n                rel_name = os.path.relpath(norm_name, src_name)\n                # We can have \".\" as a component of some paths, depending\n                # on the contents of the shipit transformation section.\n                # normpath doesn't always remove `.` as the final component\n                # of the path, which be problematic when we later mkdir\n                # the dirname of the path that we return.  Take care to avoid\n                # returning a path with a `.` in it.\n                rel_name = os.path.normpath(rel_name)\n                if dest_name == \".\":\n                    return os.path.normpath(os.path.join(dest_root, rel_name))\n                dest_name = os.path.normpath(dest_name)\n                return os.path.normpath(os.path.join(dest_root, dest_name, rel_name))\n\n        raise Exception(\"%s did not match any rules\" % norm_name)\n\n    def mirror(self, fbsource_root: str, dest_root: str) -> ChangeStatus:\n        self._minimize_roots()\n        self._sort_mapping()\n\n        change_status = ChangeStatus()\n\n        # Record the full set of files that should be in the tree\n        full_file_list = set()\n\n        if sys.platform == \"win32\":\n            # Let's not assume st_dev has a consistent value on Windows.\n            def st_dev(path: str) -> int:\n                return 1\n\n        else:\n\n            def st_dev(path: str) -> int:\n                return os.lstat(path).st_dev\n\n        for fbsource_subdir in self.roots:\n            dir_to_mirror = os.path.join(fbsource_root, fbsource_subdir)\n            root_dev = st_dev(dir_to_mirror)\n            prefetch_dir_if_eden(dir_to_mirror)\n            if not os.path.exists(dir_to_mirror):\n                raise Exception(\n                    \"%s doesn't exist; check your sparse profile!\" % dir_to_mirror\n                )\n            update_count = 0\n            for root, dirs, files in os.walk(dir_to_mirror):\n                dirs[:] = [d for d in dirs if root_dev == st_dev(os.path.join(root, d))]\n\n                for src_file in files:\n                    full_name = os.path.join(root, src_file)\n                    rel_name = os.path.relpath(full_name, fbsource_root)\n                    norm_name = rel_name.replace(\"\\\\\", \"/\")\n\n                    target_name = self._map_name(norm_name, dest_root)\n                    if target_name:\n                        full_file_list.add(target_name)\n                        if copy_if_different(full_name, target_name):\n                            filter_strip_marker(target_name, self.strip_marker)\n                            change_status.record_change(target_name)\n                            if update_count < 10:\n                                print(\"Updated %s -> %s\" % (full_name, target_name))\n                            elif update_count == 10:\n                                print(\"...\")\n                            update_count += 1\n            if update_count:\n                print(\"Updated %s for %s\" % (update_count, fbsource_subdir))\n\n        # Compare the list of previously shipped files; if a file is\n        # in the old list but not the new list then it has been\n        # removed from the source and should be removed from the\n        # destination.\n        # Why don't we simply create this list by walking dest_root?\n        # Some builds currently have to be in-source builds and\n        # may legitimately need to keep some state in the source tree :-/\n        installed_name = os.path.join(dest_root, \".shipit_shipped\")\n        if os.path.exists(installed_name):\n            with open(installed_name, \"rb\") as f:\n                for name in f.read().decode(\"utf-8\").splitlines():\n                    name = name.strip()\n                    if name not in full_file_list:\n                        print(\"Remove %s\" % name)\n                        os.unlink(name)\n                        change_status.record_change(name)\n\n        with open(installed_name, \"wb\") as f:\n            for name in sorted(full_file_list):\n                f.write((\"%s\\n\" % name).encode(\"utf-8\"))\n\n        return change_status\n\n\nclass FbsourceRepoData(NamedTuple):\n    hash: str\n    date: str\n\n\nFBSOURCE_REPO_DATA: dict[str, FbsourceRepoData] = {}\n\n\ndef get_fbsource_repo_data(build_options: BuildOptions) -> FbsourceRepoData:\n    \"\"\"Returns the commit metadata for the fbsource repo.\n    Since we may have multiple first party projects to\n    hash, and because we don't mutate the repo, we cache\n    this hash in a global.\"\"\"\n    # pyre-fixme[6]: For 1st argument expected `str` but got `Optional[str]`.\n    cached_data = FBSOURCE_REPO_DATA.get(build_options.fbsource_dir)\n    if cached_data:\n        return cached_data\n\n    if \"GETDEPS_HG_REPO_DATA\" in os.environ:\n        log_data = os.environ[\"GETDEPS_HG_REPO_DATA\"]\n    else:\n        cmd = [\"hg\", \"log\", \"-r.\", \"-T{node}\\n{date|hgdate}\"]\n        env = Env()\n        env.set(\"HGPLAIN\", \"1\")\n        log_data = subprocess.check_output(\n            cmd, cwd=build_options.fbsource_dir, env=dict(env.items())\n        ).decode(\"ascii\")\n\n    (hash, datestr) = log_data.split(\"\\n\")\n\n    # datestr is like \"seconds fractionalseconds\"\n    # We want \"20200324.113140\"\n    (unixtime, _fractional) = datestr.split(\" \")\n    date = datetime.fromtimestamp(int(unixtime)).strftime(\"%Y%m%d.%H%M%S\")\n    cached_data = FbsourceRepoData(hash=hash, date=date)\n\n    # pyre-fixme[6]: For 1st argument expected `str` but got `Optional[str]`.\n    FBSOURCE_REPO_DATA[build_options.fbsource_dir] = cached_data\n\n    return cached_data\n\n\ndef is_public_commit(build_options: BuildOptions) -> bool:  # noqa: C901\n    \"\"\"Check if the current commit is public (shipped/will be shipped to remote).\n\n    Works across git, sapling (sl), and hg repositories:\n    - For hg/sapling: Uses 'phase' command to check if commit is public\n    - For git: Checks if commit exists in remote branches\n\n    Returns True if public, False if draft/local-only or on error (conservative).\n    \"\"\"\n    # Use fbsource_dir if available (Meta internal), otherwise fall back to repo_root\n    repo_dir = build_options.fbsource_dir or build_options.repo_root\n    if not repo_dir:\n        # No repository detected, be conservative\n        return False\n\n    env = Env()\n    env.set(\"HGPLAIN\", \"1\")\n    env_dict = dict(env.items())\n\n    try:\n        # Try hg/sapling phase command first (works for both hg and sl)\n        # Try 'sl' first as it's the preferred tool at Meta\n        for cmd in [[\"sl\", \"phase\", \"-r\", \".\"], [\"hg\", \"phase\", \"-r\", \".\"]]:\n            try:\n                output = (\n                    subprocess.check_output(\n                        cmd, cwd=repo_dir, env=env_dict, stderr=subprocess.DEVNULL\n                    )\n                    .decode(\"ascii\")\n                    .strip()\n                )\n                # Output format: \"hash: public\" or \"hash: draft\"\n                return \"public\" in output\n            except (subprocess.CalledProcessError, FileNotFoundError):\n                continue\n\n        # Try git if hg/sl didn't work\n        try:\n            # Detect the default branch for origin remote\n            default_branch = None\n            try:\n                # Get the symbolic ref for origin/HEAD to find default branch\n                output = (\n                    subprocess.check_output(\n                        [\"git\", \"symbolic-ref\", \"refs/remotes/origin/HEAD\"],\n                        cwd=repo_dir,\n                        stderr=subprocess.DEVNULL,\n                    )\n                    .decode(\"ascii\")\n                    .strip()\n                )\n                # Output format: \"refs/remotes/origin/main\"\n                if output.startswith(\"refs/remotes/\"):\n                    default_branch = output\n            except subprocess.CalledProcessError:\n                # If symbolic-ref fails, fall back to common names\n                pass\n\n            # Build list of branches to check\n            branches_to_check = []\n            if default_branch:\n                branches_to_check.append(default_branch)\n            # Also try common defaults as fallback\n            branches_to_check.extend([\"origin/main\", \"origin/master\"])\n\n            # Check if HEAD is an ancestor of any of these branches\n            for branch in branches_to_check:\n                try:\n                    subprocess.check_output(\n                        [\"git\", \"merge-base\", \"--is-ancestor\", \"HEAD\", branch],\n                        cwd=repo_dir,\n                        stderr=subprocess.DEVNULL,\n                    )\n                    # If command succeeds (exit 0), HEAD is an ancestor of the branch\n                    return True\n                except subprocess.CalledProcessError:\n                    # Not an ancestor of this branch, try next\n                    continue\n            # HEAD is not in any default branch\n            return False\n        except FileNotFoundError:\n            pass\n\n        # If all VCS commands failed, be conservative and don't upload\n        return False\n\n    except Exception:\n        # On any unexpected error, be conservative and don't upload\n        return False\n\n\nclass SimpleShipitTransformerFetcher(Fetcher):\n    def __init__(\n        self,\n        build_options: BuildOptions,\n        manifest: ManifestParser,\n        ctx: ManifestContext,\n    ) -> None:\n        self.build_options: BuildOptions = build_options\n        self.manifest: ManifestParser = manifest\n        self.repo_dir: str = os.path.join(\n            build_options.scratch_dir, \"shipit\", manifest.name\n        )\n        self.ctx: ManifestContext = ctx\n\n    def clean(self) -> None:\n        if os.path.exists(self.repo_dir):\n            shutil.rmtree(self.repo_dir)\n\n    def update(self) -> ChangeStatus:\n        mapping = ShipitPathMap()\n        for src, dest in self.manifest.get_section_as_ordered_pairs(\n            \"shipit.pathmap\", self.ctx\n        ):\n            # pyre-fixme[6]: For 2nd argument expected `str` but got `Optional[str]`.\n            mapping.add_mapping(src, dest)\n        if self.manifest.shipit_fbcode_builder:\n            mapping.add_mapping(\n                \"fbcode/opensource/fbcode_builder\", \"build/fbcode_builder\"\n            )\n        for pattern in self.manifest.get_section_as_args(\"shipit.strip\", self.ctx):\n            mapping.add_exclusion(pattern)\n\n        # pyre-fixme[8]: Attribute has type `str`; used as `Optional[str]`.\n        mapping.strip_marker = self.manifest.shipit_strip_marker\n\n        # pyre-fixme[6]: In call `ShipitPathMap.mirror`, for 1st positional argument, expected `str` but got `Optional[str]`\n        return mapping.mirror(self.build_options.fbsource_dir, self.repo_dir)\n\n    def hash(self) -> str:\n        # We return a fixed non-hash string for in-fbsource builds.\n        # We're relying on the `update` logic to correctly invalidate\n        # the build in the case that files have changed.\n        return \"fbsource\"\n\n    def get_src_dir(self) -> str:\n        return self.repo_dir\n\n\nclass SubFetcher(Fetcher):\n    \"\"\"Fetcher for a project with subprojects\"\"\"\n\n    def __init__(self, base: Fetcher, subs: list[tuple[Fetcher, str]]) -> None:\n        self.base: Fetcher = base\n        self.subs: list[tuple[Fetcher, str]] = subs\n\n    def update(self) -> ChangeStatus:\n        base = self.base.update()\n        changed = base.build_changed() or base.sources_changed()\n        for fetcher, dir in self.subs:\n            stat = fetcher.update()\n            if stat.build_changed() or stat.sources_changed():\n                changed = True\n            link = self.base.get_src_dir() + \"/\" + dir\n            if not os.path.exists(link):\n                os.symlink(fetcher.get_src_dir(), link)\n        return ChangeStatus(changed)\n\n    def clean(self) -> None:\n        self.base.clean()\n        for fetcher, _ in self.subs:\n            fetcher.clean()\n\n    def hash(self) -> str:\n        my_hash = self.base.hash()\n        for fetcher, _ in self.subs:\n            my_hash += fetcher.hash()\n        return my_hash\n\n    def get_src_dir(self) -> str:\n        return self.base.get_src_dir()\n\n\nclass ShipitTransformerFetcher(Fetcher):\n    @classmethod\n    def _shipit_paths(cls, build_options: BuildOptions) -> list[str]:\n        www_path = [\"/var/www/scripts/opensource/codesync\"]\n        if build_options.fbsource_dir:\n            fbcode_path = [\n                os.path.join(\n                    build_options.fbsource_dir,\n                    \"fbcode/opensource/codesync/codesync-cli/codesync\",\n                )\n            ]\n        else:\n            fbcode_path = []\n        return www_path + fbcode_path\n\n    def __init__(\n        self, build_options: BuildOptions, project_name: str, external_branch: str\n    ) -> None:\n        self.build_options: BuildOptions = build_options\n        self.project_name: str = project_name\n        self.external_branch: str = external_branch\n        self.repo_dir: str = os.path.join(\n            build_options.scratch_dir, \"shipit\", project_name\n        )\n        self.shipit: str | None = None\n        for path in ShipitTransformerFetcher._shipit_paths(build_options):\n            if os.path.exists(path):\n                self.shipit = path\n                break\n\n    def update(self) -> ChangeStatus:\n        if os.path.exists(self.repo_dir):\n            return ChangeStatus()\n        self.run_shipit()\n        return ChangeStatus(True)\n\n    def clean(self) -> None:\n        if os.path.exists(self.repo_dir):\n            shutil.rmtree(self.repo_dir)\n\n    @classmethod\n    def available(cls, build_options: BuildOptions) -> bool:\n        return any(\n            os.path.exists(path)\n            for path in ShipitTransformerFetcher._shipit_paths(build_options)\n        )\n\n    def run_shipit(self) -> None:\n        tmp_path = self.repo_dir + \".new\"\n        try:\n            if os.path.exists(tmp_path):\n                shutil.rmtree(tmp_path)\n            os.makedirs(os.path.dirname(tmp_path), exist_ok=True)\n            cmd = [\n                self.shipit,\n                \"shipit\",\n                \"--project=\" + self.project_name,\n                \"--create-new-repo\",\n                # pyre-fixme[58]: `+` is not supported for operand types `str` and\n                #  `Optional[str]`.\n                \"--source-repo-dir=\" + self.build_options.fbsource_dir,\n                \"--source-branch=.\",\n                \"--skip-source-init\",\n                \"--skip-source-pull\",\n                \"--skip-source-clean\",\n                \"--skip-push\",\n                \"--destination-use-anonymous-https\",\n                \"--create-new-repo-output-path=\" + tmp_path,\n            ]\n            if self.external_branch:\n                cmd += [\n                    f\"--external-branch={self.external_branch}\",\n                ]\n\n            # Run shipit\n            # pyre-fixme[6]: For 1st argument expected `List[str]` but got\n            #  `List[Optional[str]]`.\n            run_cmd(cmd)\n\n            # Remove the .git directory from the repository it generated.\n            # There is no need to commit this.\n            repo_git_dir = os.path.join(tmp_path, \".git\")\n            shutil.rmtree(repo_git_dir)\n            os.rename(tmp_path, self.repo_dir)\n        except Exception:\n            # Clean up after a failed extraction\n            if os.path.exists(tmp_path):\n                shutil.rmtree(tmp_path)\n            self.clean()\n            raise\n\n    def hash(self) -> str:\n        # We return a fixed non-hash string for in-fbsource builds.\n        return \"fbsource\"\n\n    def get_src_dir(self) -> str:\n        return self.repo_dir\n\n\ndef download_url_to_file_with_progress(url: str, file_name: str) -> None:\n    print(\"Download with %s -> %s ...\" % (url, file_name))\n\n    class Progress:\n        last_report: float = 0\n\n        def write_update(self, total: int, amount: int) -> None:\n            if total == -1:\n                total = \"(Unknown)\"\n\n            if sys.stdout.isatty():\n                sys.stdout.write(\"\\r downloading %s of %s \" % (amount, total))\n            else:\n                # When logging to CI logs, avoid spamming the logs and print\n                # status every few seconds\n                now = time.time()\n                if now - self.last_report > 5:\n                    sys.stdout.write(\".. %s of %s \" % (amount, total))\n                    self.last_report = now\n            sys.stdout.flush()\n\n        def progress_pycurl(\n            self, total: float, amount: float, _uploadtotal: float, _uploadamount: float\n        ) -> None:\n            self.write_update(total, amount)\n\n    progress = Progress()\n    start = time.time()\n    try:\n        if os.environ.get(\"GETDEPS_USE_WGET\") is not None:\n            procargs = (\n                [\n                    \"wget\",\n                ]\n                + os.environ.get(\"GETDEPS_WGET_ARGS\", \"\").split()\n                + [\n                    \"-O\",\n                    file_name,\n                    url,\n                ]\n            )\n            subprocess.run(procargs, capture_output=True)\n            headers = None\n\n        elif os.environ.get(\"GETDEPS_USE_LIBCURL\") is not None:\n            import pycurl\n\n            with open(file_name, \"wb\") as f:\n                c = pycurl.Curl()\n                c.setopt(pycurl.URL, url)\n                c.setopt(pycurl.WRITEDATA, f)\n                # display progress\n                c.setopt(pycurl.NOPROGRESS, False)\n                c.setopt(pycurl.XFERINFOFUNCTION, progress.progress_pycurl)\n                c.perform()\n                c.close()\n            headers = None\n        else:\n            try:\n                req_header = {\"Accept\": \"application/*\"}\n                res = urlopen(Request(url, None, req_header))\n                chunk_size = 8192  # urlretrieve uses this value\n                headers = res.headers\n                content_length = res.headers.get(\"Content-Length\")\n                total = int(content_length.strip()) if content_length else -1\n                amount = 0\n                with open(file_name, \"wb\") as f:\n                    chunk = res.read(chunk_size)\n                    while chunk:\n                        f.write(chunk)\n                        amount += len(chunk)\n                        progress.write_update(total, amount)\n                        chunk = res.read(chunk_size)\n            except (OSError, IOError) as exc:  # noqa: B014\n                # Downloading from within Meta's network needs to use a proxy.\n                if shutil.which(\"fwdproxy-config\") is None:\n                    print(\n                        \"Note: Could not find Meta-specific fallback 'fwdproxy-config'. \"\n                        \"If you are working externally, you can ignore this message.\"\n                    )\n                    raise\n\n                print(\"Default download failed, retrying with curl and fwdproxy...\")\n                cmd = f\"curl -L $(fwdproxy-config curl) -o {shlex.quote(file_name)} {shlex.quote(url)}\"\n                print(f\"Running command: {cmd}\")\n                result = subprocess.run(cmd, shell=True, capture_output=True)\n                if result.returncode != 0:\n                    raise TransientFailure(\n                        f\"Failed to download {url} to {file_name}: {exc} (fwdproxy fallback failed: {result.stderr.decode()})\"\n                    )\n                headers = None\n    except (OSError, IOError) as exc:  # noqa: B014\n        raise TransientFailure(\n            \"Failed to download %s to %s: %s\" % (url, file_name, str(exc))\n        )\n\n    end = time.time()\n    sys.stdout.write(\" [Complete in %f seconds]\\n\" % (end - start))\n    sys.stdout.flush()\n    if headers is not None:\n        print(f\"{headers}\")\n\n\nclass ArchiveFetcher(Fetcher):\n    def __init__(\n        self,\n        build_options: BuildOptions,\n        manifest: ManifestParser,\n        url: str,\n        sha256: str,\n    ) -> None:\n        self.manifest: ManifestParser = manifest\n        self.url: str = url\n        self.sha256: str = sha256\n        self.build_options: BuildOptions = build_options\n\n        parsed_url = urlparse(self.url)\n        basename = \"%s-%s\" % (manifest.name, os.path.basename(parsed_url.path))\n        self.file_name: str = os.path.join(\n            build_options.scratch_dir, \"downloads\", basename\n        )\n        self.src_dir: str = os.path.join(\n            build_options.scratch_dir, \"extracted\", basename\n        )\n        self.hash_file: str = self.src_dir + \".hash\"\n\n    def _verify_hash(self) -> None:\n        h = hashlib.sha256()\n        with open(self.file_name, \"rb\") as f:\n            while True:\n                block = f.read(8192)\n                if not block:\n                    break\n                h.update(block)\n        digest = h.hexdigest()\n        if digest != self.sha256:\n            os.unlink(self.file_name)\n            raise Exception(\n                \"%s: expected sha256 %s but got %s\" % (self.url, self.sha256, digest)\n            )\n\n    def _download_dir(self) -> str:\n        \"\"\"returns the download dir, creating it if it doesn't already exist\"\"\"\n        download_dir = os.path.dirname(self.file_name)\n        if not os.path.exists(download_dir):\n            os.makedirs(download_dir)\n        return download_dir\n\n    def _download(self) -> None:\n        self._download_dir()\n        max_attempts = 5\n        delay = 1\n        for attempt in range(max_attempts):\n            try:\n                download_url_to_file_with_progress(self.url, self.file_name)\n                break\n            except TransientFailure as tf:\n                if attempt < max_attempts - 1:\n                    delay *= 2\n                    delay_with_jitter = delay * (1 + random.random() * 0.1)\n                    time.sleep(min(delay_with_jitter, 10))\n                else:\n                    print(f\"Failed after retries: {tf}\")\n                    raise\n        self._verify_hash()\n\n    def clean(self) -> None:\n        if os.path.exists(self.src_dir):\n            shutil.rmtree(self.src_dir)\n\n    def update(self) -> ChangeStatus:\n        try:\n            with open(self.hash_file, \"r\") as f:\n                saved_hash = f.read().strip()\n                if saved_hash == self.sha256 and os.path.exists(self.src_dir):\n                    # Everything is up to date\n                    return ChangeStatus()\n                print(\n                    \"saved hash %s doesn't match expected hash %s, re-validating\"\n                    % (saved_hash, self.sha256)\n                )\n                os.unlink(self.hash_file)\n        except EnvironmentError:\n            pass\n\n        # If we got here we know the contents of src_dir are either missing\n        # or wrong, so blow away whatever happened to be there first.\n        if os.path.exists(self.src_dir):\n            shutil.rmtree(self.src_dir)\n\n        # If we already have a file here, make sure it looks legit before\n        # proceeding: any errors and we just remove it and re-download\n        if os.path.exists(self.file_name):\n            try:\n                self._verify_hash()\n            except Exception:\n                if os.path.exists(self.file_name):\n                    os.unlink(self.file_name)\n\n        if not os.path.exists(self.file_name):\n            self._download()\n            self._verify_hash()\n\n        if tarfile.is_tarfile(self.file_name):\n            opener = tarfile.open\n        elif zipfile.is_zipfile(self.file_name):\n            opener = zipfile.ZipFile\n        else:\n            raise Exception(\"don't know how to extract %s\" % self.file_name)\n        os.makedirs(self.src_dir)\n        print(\"Extract %s -> %s\" % (self.file_name, self.src_dir))\n        if is_windows():\n            # Ensure that we don't fall over when dealing with long paths\n            # on windows\n            src = r\"\\\\?\\%s\" % os.path.normpath(self.src_dir)\n        else:\n            src = self.src_dir\n\n        with opener(self.file_name) as t:\n            # The `str` here is necessary to ensure that we don't pass a unicode\n            # object down to tarfile.extractall on python2.  When extracting\n            # the boost tarball it makes some assumptions and tries to convert\n            # a non-ascii path to ascii and throws.\n            src = str(src)\n            t.extractall(src)\n\n        if is_windows():\n            subdir = self.manifest.get(\"build\", \"subdir\")\n            checkdir = src\n            if subdir:\n                checkdir = src + \"\\\\\" + subdir\n            if os.path.exists(checkdir):\n                children = os.listdir(checkdir)\n                print(f\"Extracted to {checkdir} contents: {children}\")\n\n        with open(self.hash_file, \"w\") as f:\n            f.write(self.sha256)\n\n        return ChangeStatus(True)\n\n    def hash(self) -> str:\n        return self.sha256\n\n    def get_src_dir(self) -> str:\n        return self.src_dir\n\n\ndef homebrew_package_prefix(package: str) -> str | None:\n    cmd = [\"brew\", \"--prefix\", package]\n    try:\n        proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n    except FileNotFoundError:\n        return None\n\n    if proc.returncode == 0:\n        return proc.stdout.decode(\"utf-8\").rstrip()\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/include_rewriter.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\nfrom __future__ import annotations\n\n\"\"\"\nInclude Path Rewriter for getdeps\n\nThis module provides functionality to rewrite #include statements in C++ files\nto handle differences between fbcode and open source project structures.\n\"\"\"\n\nimport os\nimport re\nimport typing\nfrom pathlib import Path\nfrom typing import Any\n\nif typing.TYPE_CHECKING:\n    from .manifest import ManifestParser\n\n\nclass IncludePathRewriter:\n    \"\"\"Rewrites #include paths in C++ source files based on path mappings.\"\"\"\n\n    # C++ file extensions to process\n    CPP_EXTENSIONS: set[str] = {\n        \".cpp\",\n        \".cc\",\n        \".cxx\",\n        \".c\",\n        \".h\",\n        \".hpp\",\n        \".hxx\",\n        \".tcc\",\n        \".inc\",\n    }\n\n    def __init__(self, mappings: list[tuple[str, str]], verbose: bool = False) -> None:\n        \"\"\"\n        Initialize the rewriter with path mappings.\n\n        Args:\n            mappings: List of (old_path_prefix, new_path_prefix) tuples\n            verbose: Enable verbose output\n        \"\"\"\n        self.mappings: list[tuple[str, str]] = mappings\n        self.verbose: bool = verbose\n\n        # Compile regex patterns for efficiency\n        self.patterns: list[tuple[re.Pattern[str], str, str]] = []\n        for old_prefix, new_prefix in mappings:\n            # Match both quoted and angle bracket includes\n            # Pattern matches: #include \"old_prefix/rest\" or #include <old_prefix/rest>\n            pattern = re.compile(\n                r'(#\\s*include\\s*[<\"])(' + re.escape(old_prefix) + r'/[^\">]+)([\">])',\n                re.MULTILINE,\n            )\n            self.patterns.append((pattern, old_prefix, new_prefix))\n\n    def rewrite_file(self, file_path: Path, dry_run: bool = False) -> bool:\n        \"\"\"\n        Rewrite includes in a single file.\n\n        Args:\n            file_path: Path to the file to process\n            dry_run: If True, don't actually modify files\n\n        Returns:\n            True if file was modified, False otherwise\n        \"\"\"\n        try:\n            with open(file_path, \"r\", encoding=\"utf-8\") as f:\n                original_content: str = f.read()\n        except (IOError, UnicodeDecodeError) as e:\n            if self.verbose:\n                print(f\"Warning: Could not read {file_path}: {e}\")\n            return False\n\n        modified_content: str = original_content\n        changes_made: bool = False\n\n        for pattern, old_prefix, new_prefix in self.patterns:\n\n            def make_replace_func(\n                old_prefix: str, new_prefix: str\n            ) -> typing.Callable[[re.Match[str]], str]:\n                def replace_func(match: re.Match[str]) -> str:\n                    nonlocal changes_made\n                    prefix: str = match.group(1)  # #include [<\"]\n                    full_path: str = match.group(2)  # full path\n                    suffix: str = match.group(3)  # [\">]\n\n                    # Replace the old prefix with new prefix\n                    new_path: str = full_path.replace(old_prefix, new_prefix, 1)\n\n                    if self.verbose and not changes_made:\n                        print(f\"  {full_path} -> {new_path}\")\n\n                    changes_made = True\n                    return f\"{prefix}{new_path}{suffix}\"\n\n                return replace_func\n\n            modified_content = pattern.sub(\n                make_replace_func(old_prefix, new_prefix), modified_content\n            )\n\n        if changes_made and not dry_run:\n            try:\n                with open(file_path, \"w\", encoding=\"utf-8\") as f:\n                    f.write(modified_content)\n                if self.verbose:\n                    print(f\"Modified: {file_path}\")\n            except IOError as e:\n                print(f\"Error: Could not write {file_path}: {e}\")\n                return False\n        elif changes_made and dry_run:\n            if self.verbose:\n                print(f\"Would modify: {file_path}\")\n\n        return changes_made\n\n    def process_directory(self, source_dir: Path, dry_run: bool = False) -> int:\n        \"\"\"\n        Process all C++ files in a directory recursively.\n\n        Args:\n            source_dir: Root directory to process\n            dry_run: If True, don't actually modify files\n\n        Returns:\n            Number of files modified\n        \"\"\"\n        if not source_dir.exists():\n            if self.verbose:\n                print(f\"Warning: Directory {source_dir} does not exist\")\n            return 0\n\n        modified_count: int = 0\n        processed_count: int = 0\n\n        for root, dirs, files in os.walk(source_dir):\n            # Skip hidden directories and common build directories\n            dirs[:] = [\n                d\n                for d in dirs\n                if not d.startswith(\".\")\n                and d not in {\"build\", \"_build\", \"__pycache__\", \"CMakeFiles\"}\n            ]\n\n            for file in files:\n                file_path: Path = Path(root) / file\n\n                # Only process C++ files\n                if file_path.suffix.lower() not in self.CPP_EXTENSIONS:\n                    continue\n\n                processed_count += 1\n                if self.verbose:\n                    print(f\"Processing: {file_path}\")\n\n                if self.rewrite_file(file_path, dry_run):\n                    modified_count += 1\n\n        if self.verbose or modified_count > 0:\n            print(f\"Processed {processed_count} files, modified {modified_count} files\")\n        return modified_count\n\n\ndef rewrite_includes_from_manifest(\n    manifest: ManifestParser, ctx: Any, source_dir: str, verbose: bool = False\n) -> int:\n    \"\"\"\n    Rewrite includes using mappings from a manifest file.\n\n    Args:\n        manifest: The manifest object containing shipit.pathmap section\n        ctx: The manifest context\n        source_dir: Directory containing source files to process\n        verbose: Enable verbose output\n\n    Returns:\n        Number of files modified\n    \"\"\"\n    mappings: list[tuple[str, str]] = []\n\n    # Get mappings from the manifest's shipit.pathmap section\n    for src, dest in manifest.get_section_as_ordered_pairs(\"shipit.pathmap\", ctx):\n        # Remove fbcode/ or xplat/ prefixes from src since they won't appear in #include statements\n        if src.startswith(\"fbcode/\"):\n            src = src[len(\"fbcode/\") :]\n        elif src.startswith(\"xplat/\"):\n            src = src[len(\"xplat/\") :]\n        # pyre-fixme[6]: For 1st argument expected `Tuple[str, str]` but got\n        #  `Tuple[str, Optional[str]]`.\n        mappings.append((src, dest))\n\n    if not mappings:\n        if verbose:\n            print(\"No include path mappings found in manifest\")\n        return 0\n\n    if verbose:\n        print(\"Include path mappings:\")\n        for old_path, new_path in mappings:\n            print(f\"  {old_path} -> {new_path}\")\n\n    rewriter: IncludePathRewriter = IncludePathRewriter(mappings, verbose)\n    return rewriter.process_directory(Path(source_dir), dry_run=False)\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/load.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\nfrom __future__ import annotations\n\nimport base64\nimport copy\nimport hashlib\nimport os\nimport typing\nfrom collections.abc import Iterator\n\nfrom . import fetcher\nfrom .envfuncs import path_search\nfrom .errors import ManifestNotFound\nfrom .manifest import ManifestParser\n\nif typing.TYPE_CHECKING:\n    from .buildopts import BuildOptions\n    from .manifest import ContextGenerator, ManifestContext\n\n\nclass Loader:\n    \"\"\"The loader allows our tests to patch the load operation\"\"\"\n\n    def _list_manifests(self, build_opts: BuildOptions) -> Iterator[str]:\n        \"\"\"Returns a generator that iterates all the available manifests\"\"\"\n        for path, _, files in os.walk(build_opts.manifests_dir):\n            for name in files:\n                # skip hidden files\n                if name.startswith(\".\"):\n                    continue\n\n                yield os.path.join(path, name)\n\n    def _load_manifest(self, path: str) -> ManifestParser:\n        return ManifestParser(path)\n\n    def load_project(\n        self, build_opts: BuildOptions, project_name: str\n    ) -> ManifestParser:\n        if \"/\" in project_name or \"\\\\\" in project_name:\n            # Assume this is a path already\n            return ManifestParser(project_name)\n\n        for manifest in self._list_manifests(build_opts):\n            if os.path.basename(manifest) == project_name:\n                return ManifestParser(manifest)\n\n        raise ManifestNotFound(project_name)\n\n    def load_all(self, build_opts: BuildOptions) -> dict[str, ManifestParser]:\n        manifests_by_name: dict[str, ManifestParser] = {}\n\n        for manifest in self._list_manifests(build_opts):\n            m = self._load_manifest(manifest)\n\n            if m.name in manifests_by_name:\n                raise Exception(\"found duplicate manifest '%s'\" % m.name)\n\n            manifests_by_name[m.name] = m\n\n        return manifests_by_name\n\n\nclass ResourceLoader(Loader):\n    def __init__(self, namespace: str, manifests_dir: str) -> None:\n        self.namespace: str = namespace\n        self.manifests_dir: str = manifests_dir\n\n    def _list_manifests(self, build_opts: BuildOptions) -> Iterator[str]:\n        import pkg_resources\n\n        dirs: list[str] = [self.manifests_dir]\n\n        while dirs:\n            current = dirs.pop(0)\n            for name in pkg_resources.resource_listdir(self.namespace, current):\n                path = \"%s/%s\" % (current, name)\n\n                if pkg_resources.resource_isdir(self.namespace, path):\n                    dirs.append(path)\n                else:\n                    yield \"%s/%s\" % (current, name)\n\n    def _find_manifest(self, project_name: str) -> str:\n        # pyre-fixme[20]: Call `ResourceLoader._list_manifests` expects argument `build_opts`.\n        for name in self._list_manifests():\n            if name.endswith(\"/%s\" % project_name):\n                return name\n\n        raise ManifestNotFound(project_name)\n\n    def _load_manifest(self, path: str) -> ManifestParser:\n        import pkg_resources\n\n        contents = pkg_resources.resource_string(self.namespace, path).decode(\"utf8\")\n        return ManifestParser(file_name=path, fp=contents)\n\n    def load_project(\n        self, build_opts: BuildOptions, project_name: str\n    ) -> ManifestParser:\n        project_name = self._find_manifest(project_name)\n        # pyre-fixme[16]: `ResourceLoader` has no attribute `_load_resource_manifest`.\n        return self._load_resource_manifest(project_name)\n\n\nLOADER: Loader = Loader()\n\n\ndef patch_loader(namespace: str, manifests_dir: str = \"manifests\") -> None:\n    global LOADER\n    LOADER = ResourceLoader(namespace, manifests_dir)\n\n\ndef load_project(build_opts: BuildOptions, project_name: str) -> ManifestParser:\n    \"\"\"given the name of a project or a path to a manifest file,\n    load up the ManifestParser instance for it and return it\"\"\"\n    return LOADER.load_project(build_opts, project_name)\n\n\ndef load_all_manifests(build_opts: BuildOptions) -> dict[str, ManifestParser]:\n    return LOADER.load_all(build_opts)\n\n\nclass ManifestLoader:\n    \"\"\"ManifestLoader stores information about project manifest relationships for a\n    given set of (build options + platform) configuration.\n\n    The ManifestLoader class primarily serves as a location to cache project dependency\n    relationships and project hash values for this build configuration.\n    \"\"\"\n\n    def __init__(\n        self, build_opts: BuildOptions, ctx_gen: ContextGenerator | None = None\n    ) -> None:\n        self._loader: Loader = LOADER\n        self.build_opts: BuildOptions = build_opts\n        if ctx_gen is None:\n            self.ctx_gen: ContextGenerator = self.build_opts.get_context_generator()\n        else:\n            self.ctx_gen = ctx_gen\n\n        self.manifests_by_name: dict[str, ManifestParser] = {}\n        self._loaded_all: bool = False\n        self._project_hashes: dict[str, str] = {}\n        self._fetcher_overrides: dict[str, fetcher.LocalDirFetcher] = {}\n        self._build_dir_overrides: dict[str, str] = {}\n        self._install_dir_overrides: dict[str, str] = {}\n        self._install_prefix_overrides: dict[str, str] = {}\n\n    def load_manifest(self, name: str) -> ManifestParser:\n        manifest = self.manifests_by_name.get(name)\n        if manifest is None:\n            manifest = self._loader.load_project(self.build_opts, name)\n            self.manifests_by_name[name] = manifest\n        return manifest\n\n    def load_all_manifests(self) -> dict[str, ManifestParser]:\n        if not self._loaded_all:\n            all_manifests_by_name = self._loader.load_all(self.build_opts)\n            if self.manifests_by_name:\n                # To help ensure that we only ever have a single manifest object for a\n                # given project, and that it can't change once we have loaded it,\n                # only update our mapping for projects that weren't already loaded.\n                for name, manifest in all_manifests_by_name.items():\n                    self.manifests_by_name.setdefault(name, manifest)\n            else:\n                self.manifests_by_name = all_manifests_by_name\n            self._loaded_all = True\n\n        return self.manifests_by_name\n\n    def dependencies_of(self, manifest: ManifestParser) -> list[ManifestParser]:\n        \"\"\"Returns the dependencies of the given project, not including the project itself, in topological order.\"\"\"\n        return [\n            dep\n            for dep in self.manifests_in_dependency_order(manifest)\n            if dep != manifest\n        ]\n\n    def manifests_in_dependency_order(\n        self, manifest: ManifestParser | None = None\n    ) -> list[ManifestParser]:\n        \"\"\"Compute all dependencies of the specified project.  Returns a list of the\n        dependencies plus the project itself, in topologically sorted order.\n\n        Each entry in the returned list only depends on projects that appear before it\n        in the list.\n\n        If the input manifest is None, the dependencies for all currently loaded\n        projects will be computed.  i.e., if you call load_all_manifests() followed by\n        manifests_in_dependency_order() this will return a global dependency ordering of\n        all projects.\"\"\"\n        # The list of deps that have been fully processed\n        seen: set[str] = set()\n        # The list of deps which have yet to be evaluated.  This\n        # can potentially contain duplicates.\n        if manifest is None:\n            deps: list[ManifestParser] = list(self.manifests_by_name.values())\n        else:\n            assert manifest.name in self.manifests_by_name\n            deps = [manifest]\n        # The list of manifests in dependency order\n        dep_order: list[ManifestParser] = []\n        system_packages: dict[str, list[str]] = {}\n\n        while len(deps) > 0:\n            m = deps.pop(0)\n            if m.name in seen:\n                continue\n\n            # Consider its deps, if any.\n            # We sort them for increased determinism; we'll produce\n            # a correct order even if they aren't sorted, but we prefer\n            # to produce the same order regardless of how they are listed\n            # in the project manifest files.\n            ctx: ManifestContext = self.ctx_gen.get_context(m.name)\n            dep_list: list[str] = m.get_dependencies(ctx)\n\n            dep_count: int = 0\n            for dep_name in dep_list:\n                # If we're not sure whether it is done, queue it up\n                if dep_name not in seen:\n                    dep = self.manifests_by_name.get(dep_name)\n                    if dep is None:\n                        dep = self._loader.load_project(self.build_opts, dep_name)\n                        self.manifests_by_name[dep.name] = dep\n\n                    deps.append(dep)\n                    dep_count += 1\n\n            if dep_count > 0:\n                # If we queued anything, re-queue this item, as it depends\n                # those new item(s) and their transitive deps.\n                deps.append(m)\n                continue\n\n            # Its deps are done, so we can emit it\n            seen.add(m.name)\n            # Capture system packages as we may need to set PATHs to then later\n            if (\n                self.build_opts.allow_system_packages\n                and self.build_opts.host_type.get_package_manager()\n            ):\n                packages: dict[str, list[str]] = m.get_required_system_packages(ctx)\n                for pkg_type, v in packages.items():\n                    merged: list[str] = system_packages.get(pkg_type, [])\n                    if v not in merged:\n                        merged += v\n                    system_packages[pkg_type] = merged\n                # A manifest depends on all system packages in it dependencies as well\n                # pyre-fixme[8]: Attribute has type `Dict[str, str]`; used as\n                #  `Dict[str, List[str]]`.\n                m.resolved_system_packages = copy.copy(system_packages)\n            dep_order.append(m)\n\n        return dep_order\n\n    def set_project_src_dir(self, project_name: str, path: str) -> None:\n        self._fetcher_overrides[project_name] = fetcher.LocalDirFetcher(path)\n\n    def set_project_build_dir(self, project_name: str, path: str) -> None:\n        self._build_dir_overrides[project_name] = path\n\n    def set_project_install_dir(self, project_name: str, path: str) -> None:\n        self._install_dir_overrides[project_name] = path\n\n    def set_project_install_prefix(self, project_name: str, path: str) -> None:\n        self._install_prefix_overrides[project_name] = path\n\n    def create_fetcher(\n        self, manifest: ManifestParser\n    ) -> fetcher.Fetcher | fetcher.LocalDirFetcher:\n        override = self._fetcher_overrides.get(manifest.name)\n        if override is not None:\n            return override\n\n        ctx: ManifestContext = self.ctx_gen.get_context(manifest.name)\n        return manifest.create_fetcher(self.build_opts, self, ctx)\n\n    def get_project_hash(self, manifest: ManifestParser) -> str:\n        h = self._project_hashes.get(manifest.name)\n        if h is None:\n            h = self._compute_project_hash(manifest)\n            self._project_hashes[manifest.name] = h\n        return h\n\n    def _compute_project_hash(self, manifest: ManifestParser) -> str:\n        \"\"\"This recursive function computes a hash for a given manifest.\n        The hash takes into account some environmental factors on the\n        host machine and includes the hashes of its dependencies.\n        No caching of the computation is performed, which is theoretically\n        wasteful but the computation is fast enough that it is not required\n        to cache across multiple invocations.\"\"\"\n        ctx: ManifestContext = self.ctx_gen.get_context(manifest.name)\n\n        hasher = hashlib.sha256()\n        # Some environmental and configuration things matter\n        env: dict[str, str | None] = {}\n        env[\"install_dir\"] = self.build_opts.install_dir\n        env[\"scratch_dir\"] = self.build_opts.scratch_dir\n        env[\"vcvars_path\"] = self.build_opts.vcvars_path\n        env[\"os\"] = self.build_opts.host_type.ostype\n        env[\"distro\"] = self.build_opts.host_type.distro\n        env[\"distro_vers\"] = self.build_opts.host_type.distrovers\n        env[\"shared_libs\"] = str(self.build_opts.shared_libs)\n        for name in [\n            \"CXXFLAGS\",\n            \"CPPFLAGS\",\n            \"LDFLAGS\",\n            \"CXX\",\n            \"CC\",\n            \"GETDEPS_CMAKE_DEFINES\",\n        ]:\n            env[name] = os.environ.get(name)\n        for tool in [\"cc\", \"c++\", \"gcc\", \"g++\", \"clang\", \"clang++\"]:\n            env[\"tool-%s\" % tool] = path_search(os.environ, tool)\n        for name in manifest.get_section_as_args(\"depends.environment\", ctx):\n            env[name] = os.environ.get(name)\n\n        fetcher_inst: fetcher.Fetcher | fetcher.LocalDirFetcher = self.create_fetcher(\n            manifest\n        )\n        env[\"fetcher.hash\"] = fetcher_inst.hash()\n\n        for name in sorted(env.keys()):\n            hasher.update(name.encode(\"utf-8\"))\n            value = env.get(name)\n            if value is not None:\n                try:\n                    hasher.update(value.encode(\"utf-8\"))\n                except AttributeError as exc:\n                    raise AttributeError(\"name=%r, value=%r: %s\" % (name, value, exc))\n\n        manifest.update_hash(hasher, ctx)\n\n        # If a patchfile is specified, include its contents in the hash\n        patchfile: str | None = manifest.get(\"build\", \"patchfile\", ctx=ctx)\n        if patchfile:\n            patchfile_path: str = os.path.join(\n                self.build_opts.fbcode_builder_dir, \"patches\", patchfile\n            )\n            if os.path.exists(patchfile_path):\n                with open(patchfile_path, \"rb\") as f:\n                    hasher.update(f.read())\n\n        dep_list: list[str] = manifest.get_dependencies(ctx)\n        for dep in dep_list:\n            dep_manifest: ManifestParser = self.load_manifest(dep)\n            dep_hash: str = self.get_project_hash(dep_manifest)\n            hasher.update(dep_hash.encode(\"utf-8\"))\n\n        # Use base64 to represent the hash, rather than the simple hex digest,\n        # so that the string is shorter.  Use the URL-safe encoding so that\n        # the hash can also be safely used as a filename component.\n        h: str = base64.urlsafe_b64encode(hasher.digest()).decode(\"ascii\")\n        # ... and because cmd.exe is troublesome with `=` signs, nerf those.\n        # They tend to be padding characters at the end anyway, so we can\n        # safely discard them.\n        h = h.replace(\"=\", \"\")\n\n        return h\n\n    def _get_project_dir_name(self, manifest: ManifestParser) -> str:\n        if manifest.is_first_party_project():\n            return manifest.name\n        else:\n            project_hash: str = self.get_project_hash(manifest)\n            return \"%s-%s\" % (manifest.name, project_hash)\n\n    def get_project_install_dir(self, manifest: ManifestParser) -> str:\n        override = self._install_dir_overrides.get(manifest.name)\n        if override:\n            return override\n\n        project_dir_name: str = self._get_project_dir_name(manifest)\n        return os.path.join(self.build_opts.install_dir, project_dir_name)\n\n    def get_project_build_dir(self, manifest: ManifestParser) -> str:\n        override = self._build_dir_overrides.get(manifest.name)\n        if override:\n            return override\n\n        project_dir_name: str = self._get_project_dir_name(manifest)\n        return os.path.join(self.build_opts.scratch_dir, \"build\", project_dir_name)\n\n    def get_project_install_prefix(self, manifest: ManifestParser) -> str | None:\n        return self._install_prefix_overrides.get(manifest.name)\n\n    def get_project_install_dir_respecting_install_prefix(\n        self, manifest: ManifestParser\n    ) -> str:\n        inst_dir: str = self.get_project_install_dir(manifest)\n        prefix: str | None = self.get_project_install_prefix(manifest)\n        if prefix:\n            return inst_dir + prefix\n        return inst_dir\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/manifest.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\nfrom __future__ import annotations\n\nimport configparser\nimport hashlib\nimport io\nimport os\nimport sys\nimport typing\n\nfrom .builder import (\n    AutoconfBuilder,\n    Boost,\n    CMakeBootStrapBuilder,\n    CMakeBuilder,\n    Iproute2Builder,\n    MakeBuilder,\n    MesonBuilder,\n    NinjaBootstrap,\n    NopBuilder,\n    OpenSSLBuilder,\n    SetupPyBuilder,\n    SqliteBuilder,\n)\nfrom .cargo import CargoBuilder\nfrom .expr import ExprNode, parse_expr\nfrom .fetcher import (\n    ArchiveFetcher,\n    GitFetcher,\n    PreinstalledNopFetcher,\n    ShipitTransformerFetcher,\n    SimpleShipitTransformerFetcher,\n    SubFetcher,\n    SystemPackageFetcher,\n)\nfrom .py_wheel_builder import PythonWheelBuilder\n\nif typing.TYPE_CHECKING:\n    from .builder import BuilderBase\n    from .buildopts import BuildOptions\n    from .fetcher import Fetcher\n    from .load import ManifestLoader\n\nREQUIRED: str = \"REQUIRED\"\nOPTIONAL: str = \"OPTIONAL\"\n\nSCHEMA: dict[str, dict[str, object]] = {\n    \"manifest\": {\n        \"optional_section\": False,\n        \"fields\": {\n            \"name\": REQUIRED,\n            \"fbsource_path\": OPTIONAL,\n            \"shipit_project\": OPTIONAL,\n            \"shipit_fbcode_builder\": OPTIONAL,\n            \"use_shipit\": OPTIONAL,\n            \"shipit_external_branch\": OPTIONAL,\n            \"shipit_strip_marker\": OPTIONAL,\n        },\n    },\n    \"dependencies\": {\"optional_section\": True, \"allow_values\": False},\n    \"depends.environment\": {\"optional_section\": True},\n    \"git\": {\n        \"optional_section\": True,\n        \"fields\": {\n            \"repo_url\": REQUIRED,\n            \"rev\": OPTIONAL,\n            \"depth\": OPTIONAL,\n            \"branch\": OPTIONAL,\n        },\n    },\n    \"download\": {\n        \"optional_section\": True,\n        \"fields\": {\"url\": REQUIRED, \"sha256\": REQUIRED},\n    },\n    \"build\": {\n        \"optional_section\": True,\n        \"fields\": {\n            \"builder\": REQUIRED,\n            \"subdir\": OPTIONAL,\n            \"make_binary\": OPTIONAL,\n            \"build_in_src_dir\": OPTIONAL,\n            \"only_install\": OPTIONAL,\n            \"job_weight_mib\": OPTIONAL,\n            \"patchfile\": OPTIONAL,\n            \"patchfile_opts\": OPTIONAL,\n            \"rewrite_includes\": OPTIONAL,\n        },\n    },\n    \"msbuild\": {\"optional_section\": True, \"fields\": {\"project\": REQUIRED}},\n    \"cargo\": {\n        \"optional_section\": True,\n        \"fields\": {\n            \"build_doc\": OPTIONAL,\n            \"workspace_dir\": OPTIONAL,\n            \"manifests_to_build\": OPTIONAL,\n            # Where to write cargo config (defaults to build_dir/.cargo/config.toml)\n            \"cargo_config_file\": OPTIONAL,\n        },\n    },\n    \"github.actions\": {\n        \"optional_section\": True,\n        \"fields\": {\n            \"run_tests\": OPTIONAL,\n            \"required_locales\": OPTIONAL,\n            \"rust_version\": OPTIONAL,\n            \"build_type\": OPTIONAL,\n        },\n    },\n    \"crate.pathmap\": {\"optional_section\": True},\n    \"cmake.defines\": {\"optional_section\": True},\n    \"autoconf.args\": {\"optional_section\": True},\n    \"autoconf.envcmd.LDFLAGS\": {\"optional_section\": True},\n    \"rpms\": {\"optional_section\": True},\n    \"debs\": {\"optional_section\": True},\n    \"homebrew\": {\"optional_section\": True},\n    \"pps\": {\"optional_section\": True},\n    \"preinstalled.env\": {\"optional_section\": True},\n    \"bootstrap.args\": {\"optional_section\": True},\n    \"b2.args\": {\"optional_section\": True},\n    \"make.build_args\": {\"optional_section\": True},\n    \"make.install_args\": {\"optional_section\": True},\n    \"make.test_args\": {\"optional_section\": True},\n    \"meson.setup_args\": {\"optional_section\": True},\n    \"header-only\": {\"optional_section\": True, \"fields\": {\"includedir\": REQUIRED}},\n    \"shipit.pathmap\": {\"optional_section\": True},\n    \"shipit.strip\": {\"optional_section\": True},\n    \"install.files\": {\"optional_section\": True},\n    \"subprojects\": {\"optional_section\": True},\n    # fb-only\n    \"sandcastle\": {\"optional_section\": True, \"fields\": {\"run_tests\": OPTIONAL}},\n    \"setup-py.test\": {\"optional_section\": True, \"fields\": {\"python_script\": REQUIRED}},\n    \"setup-py.env\": {\"optional_section\": True},\n}\n\n# These sections are allowed to vary for different platforms\n# using the expression syntax to enable/disable sections\nALLOWED_EXPR_SECTIONS: list[str] = [\n    \"autoconf.args\",\n    \"autoconf.envcmd.LDFLAGS\",\n    \"build\",\n    \"cmake.defines\",\n    \"dependencies\",\n    \"make.build_args\",\n    \"make.install_args\",\n    \"bootstrap.args\",\n    \"b2.args\",\n    \"download\",\n    \"git\",\n    \"install.files\",\n    \"rpms\",\n    \"debs\",\n    \"shipit.pathmap\",\n    \"shipit.strip\",\n    \"homebrew\",\n    \"github.actions\",\n    \"pps\",\n]\n\n\ndef parse_conditional_section_name(name: str, section_def: str) -> ExprNode:\n    expr = name[len(section_def) + 1 :]\n    return parse_expr(expr, ManifestContext.ALLOWED_VARIABLES)\n\n\ndef validate_allowed_fields(\n    file_name: str,\n    section: str,\n    config: configparser.RawConfigParser,\n    allowed_fields: dict[str, str],\n) -> None:\n    for field in config.options(section):\n        if not allowed_fields.get(field):\n            raise Exception(\n                (\"manifest file %s section '%s' contains \" \"unknown field '%s'\")\n                % (file_name, section, field)\n            )\n\n    for field in allowed_fields:\n        if allowed_fields[field] == REQUIRED and not config.has_option(section, field):\n            raise Exception(\n                (\"manifest file %s section '%s' is missing \" \"required field '%s'\")\n                % (file_name, section, field)\n            )\n\n\ndef validate_allow_values(\n    file_name: str, section: str, config: configparser.RawConfigParser\n) -> None:\n    for field in config.options(section):\n        value = config.get(section, field)\n        if value is not None:\n            raise Exception(\n                (\n                    \"manifest file %s section '%s' has '%s = %s' but \"\n                    \"this section doesn't allow specifying values \"\n                    \"for its entries\"\n                )\n                % (file_name, section, field, value)\n            )\n\n\ndef validate_section(\n    file_name: str, section: str, config: configparser.RawConfigParser\n) -> str:\n    section_def = SCHEMA.get(section)\n    if not section_def:\n        for name in ALLOWED_EXPR_SECTIONS:\n            if section.startswith(name + \".\"):\n                # Verify that the conditional parses, but discard it\n                try:\n                    parse_conditional_section_name(section, name)\n                except Exception as exc:\n                    raise Exception(\n                        (\"manifest file %s section '%s' has invalid \" \"conditional: %s\")\n                        % (file_name, section, str(exc))\n                    )\n                section_def = SCHEMA.get(name)\n                canonical_section_name = name\n                break\n        if not section_def:\n            raise Exception(\n                \"manifest file %s contains unknown section '%s'\" % (file_name, section)\n            )\n    else:\n        canonical_section_name = section\n\n    allowed_fields = section_def.get(\"fields\")\n    if allowed_fields:\n        # pyre-ignore[6]: Expected `dict[str, str]` but got `object`.\n        validate_allowed_fields(file_name, section, config, allowed_fields)\n    elif not section_def.get(\"allow_values\", True):\n        validate_allow_values(file_name, section, config)\n    # pyre-fixme[61]: `canonical_section_name` is undefined, or not always defined.\n    return canonical_section_name\n\n\nclass ManifestParser:\n    def __init__(self, file_name: str, fp: str | typing.IO[str] | None = None) -> None:\n        # allow_no_value enables listing parameters in the\n        # autoconf.args section one per line\n        config = configparser.RawConfigParser(allow_no_value=True)\n        config.optionxform = str  # type: ignore[assignment]  # make it case sensitive\n        if fp is None:\n            with open(file_name, \"r\") as fp:\n                config.read_file(fp)\n        elif isinstance(fp, type(\"\")):\n            # For testing purposes, parse from a string (str\n            # or unicode)\n            config.read_file(io.StringIO(fp))\n        else:\n            config.read_file(fp)\n\n        # validate against the schema\n        seen_sections: set[str] = set()\n\n        for section in config.sections():\n            seen_sections.add(validate_section(file_name, section, config))\n\n        for section in SCHEMA.keys():\n            section_def = SCHEMA[section]\n            if (\n                not section_def.get(\"optional_section\", False)\n                and section not in seen_sections\n            ):\n                raise Exception(\n                    \"manifest file %s is missing required section %s\"\n                    % (file_name, section)\n                )\n\n        self._config: configparser.RawConfigParser = config\n        self.name: str = config.get(\"manifest\", \"name\")\n        self.fbsource_path: str | None = self.get(\"manifest\", \"fbsource_path\")\n        self.shipit_project: str | None = self.get(\"manifest\", \"shipit_project\")\n        self.shipit_fbcode_builder: str | None = self.get(\n            \"manifest\", \"shipit_fbcode_builder\"\n        )\n        self.resolved_system_packages: dict[str, str] = {}\n        self.shipit_strip_marker: str | None = self.get(\n            \"manifest\", \"shipit_strip_marker\", defval=\"@fb-only\"\n        )\n\n        if self.name != os.path.basename(file_name):\n            raise Exception(\n                \"filename of the manifest '%s' does not match the manifest name '%s'\"\n                % (file_name, self.name)\n            )\n\n        if \".\" in self.name:\n            raise Exception(\n                f\"manifest name ({self.name}) must not contain the '.' character (it is incompatible with github actions)\"\n            )\n\n    def get(\n        self,\n        section: str,\n        key: str,\n        defval: str | None = None,\n        ctx: ManifestContext | dict[str, str | None] | None = None,\n    ) -> str | None:\n        ctx = ctx or {}\n\n        for s in self._config.sections():\n            if s == section:\n                if self._config.has_option(s, key):\n                    return self._config.get(s, key)\n                return defval\n\n            if s.startswith(section + \".\"):\n                expr = parse_conditional_section_name(s, section)\n                # pyre-fixme[6]: For 1st argument expected `Dict[str,\n                #  Optional[str]]` but got `Union[Dict[str, Optional[str]],\n                #  ManifestContext]`.\n                if not expr.eval(ctx):\n                    continue\n\n                if self._config.has_option(s, key):\n                    return self._config.get(s, key)\n\n        return defval\n\n    def get_dependencies(self, ctx: ManifestContext) -> list[str]:\n        dep_list = list(self.get_section_as_dict(\"dependencies\", ctx).keys())\n        dep_list.sort()\n        builder = self.get(\"build\", \"builder\", ctx=ctx)\n        if builder in (\"cmake\", \"python-wheel\"):\n            dep_list.insert(0, \"cmake\")\n        elif builder == \"autoconf\" and self.name not in (\n            \"autoconf\",\n            \"libtool\",\n            \"automake\",\n        ):\n            # they need libtool and its deps (automake, autoconf) so add\n            # those as deps (but obviously not if we're building those\n            # projects themselves)\n            dep_list.insert(0, \"libtool\")\n\n        return dep_list\n\n    def get_section_as_args(\n        self,\n        section: str,\n        ctx: ManifestContext | dict[str, str | None] | None = None,\n    ) -> list[str]:\n        \"\"\"Intended for use with the make.[build_args/install_args] and\n        autoconf.args sections, this method collects the entries and returns an\n        array of strings.\n        If the manifest contains conditional sections, ctx is used to\n        evaluate the condition and merge in the values.\n        \"\"\"\n        args: list[str] = []\n        ctx = ctx or {}\n\n        for s in self._config.sections():\n            if s != section:\n                if not s.startswith(section + \".\"):\n                    continue\n                expr = parse_conditional_section_name(s, section)\n                # pyre-fixme[6]: For 1st argument expected `Dict[str,\n                #  Optional[str]]` but got `Union[Dict[str, Optional[str]],\n                #  ManifestContext]`.\n                if not expr.eval(ctx):\n                    continue\n            for field in self._config.options(s):\n                value = self._config.get(s, field)\n                if value is None:\n                    args.append(field)\n                else:\n                    args.append(\"%s=%s\" % (field, value))\n        return args\n\n    def get_section_as_ordered_pairs(\n        self,\n        section: str,\n        ctx: ManifestContext | dict[str, str | None] | None = None,\n    ) -> list[tuple[str, str | None]]:\n        \"\"\"Used for eg: shipit.pathmap which has strong\n        ordering requirements\"\"\"\n        res: list[tuple[str, str | None]] = []\n        ctx = ctx or {}\n\n        for s in self._config.sections():\n            if s != section:\n                if not s.startswith(section + \".\"):\n                    continue\n                expr = parse_conditional_section_name(s, section)\n                # pyre-fixme[6]: For 1st argument expected `Dict[str,\n                #  Optional[str]]` but got `Union[Dict[str, Optional[str]],\n                #  ManifestContext]`.\n                if not expr.eval(ctx):\n                    continue\n\n            for key in self._config.options(s):\n                value = self._config.get(s, key)\n                res.append((key, value))\n        return res\n\n    def get_section_as_dict(\n        self,\n        section: str,\n        ctx: ManifestContext | dict[str, str | None] | None,\n    ) -> dict[str, str | None]:\n        d: dict[str, str | None] = {}\n\n        for s in self._config.sections():\n            if s != section:\n                if not s.startswith(section + \".\"):\n                    continue\n                expr = parse_conditional_section_name(s, section)\n                # pyre-fixme[6]: For 1st argument expected `Dict[str,\n                #  Optional[str]]` but got `Union[None, Dict[str, Optional[str]],\n                #  ManifestContext]`.\n                if not expr.eval(ctx):\n                    continue\n            for field in self._config.options(s):\n                value = self._config.get(s, field)\n                d[field] = value\n        return d\n\n    def update_hash(self, hasher: hashlib._Hash, ctx: ManifestContext) -> None:\n        \"\"\"Compute a hash over the configuration for the given\n        context.  The goal is for the hash to change if the config\n        for that context changes, but not if a change is made to\n        the config only for a different platform than that expressed\n        by ctx.  The hash is intended to be used to help invalidate\n        a future cache for the third party build products.\n        The hasher argument is a hash object returned from hashlib.\"\"\"\n        for section in sorted(SCHEMA.keys()):\n            hasher.update(section.encode(\"utf-8\"))\n\n            # Note: at the time of writing, nothing in the implementation\n            # relies on keys in any config section being ordered.\n            # In theory we could have conflicting flags in different\n            # config sections and later flags override earlier flags.\n            # For the purposes of computing a hash we're not super\n            # concerned about this: manifest changes should be rare\n            # enough and we'd rather that this trigger an invalidation\n            # than strive for a cache hit at this time.\n            pairs = self.get_section_as_ordered_pairs(section, ctx)\n            pairs.sort(key=lambda pair: pair[0])\n            for key, value in pairs:\n                hasher.update(key.encode(\"utf-8\"))\n                if value is not None:\n                    hasher.update(value.encode(\"utf-8\"))\n\n    def is_first_party_project(self) -> bool:\n        \"\"\"returns true if this is an FB first-party project\"\"\"\n        return self.shipit_project is not None\n\n    def get_required_system_packages(\n        self, ctx: ManifestContext\n    ) -> dict[str, list[str]]:\n        \"\"\"Returns dictionary of packager system -> list of packages\"\"\"\n        return {\n            \"rpm\": self.get_section_as_args(\"rpms\", ctx),\n            \"deb\": self.get_section_as_args(\"debs\", ctx),\n            \"homebrew\": self.get_section_as_args(\"homebrew\", ctx),\n            \"pacman-package\": self.get_section_as_args(\"pps\", ctx),\n        }\n\n    def _is_satisfied_by_preinstalled_environment(self, ctx: ManifestContext) -> bool:\n        envs = self.get_section_as_args(\"preinstalled.env\", ctx)\n        if not envs:\n            return False\n        for key in envs:\n            val = os.environ.get(key, None)\n            print(\n                f\"Testing ENV[{key}]: {repr(val)}\",\n                file=sys.stderr,\n            )\n            if val is None:\n                return False\n            if len(val) == 0:\n                return False\n\n        return True\n\n    def get_repo_url(self, ctx: ManifestContext) -> str | None:\n        return self.get(\"git\", \"repo_url\", ctx=ctx)\n\n    def _create_fetcher(\n        self, build_options: BuildOptions, ctx: ManifestContext\n    ) -> Fetcher:\n        real_shipit_available = ShipitTransformerFetcher.available(build_options)\n        use_real_shipit = real_shipit_available and (\n            build_options.use_shipit\n            or self.get(\"manifest\", \"use_shipit\", defval=\"false\", ctx=ctx) == \"true\"\n        )\n        if (\n            not use_real_shipit\n            and self.fbsource_path\n            and build_options.fbsource_dir\n            and self.shipit_project\n        ):\n            return SimpleShipitTransformerFetcher(build_options, self, ctx)\n\n        if (\n            self.fbsource_path\n            and build_options.fbsource_dir\n            and self.shipit_project\n            and real_shipit_available\n        ):\n            # We can use the code from fbsource\n            return ShipitTransformerFetcher(\n                build_options,\n                self.shipit_project,\n                # pyre-fixme[6]: For 3rd argument expected `str` but got\n                #  `Optional[str]`.\n                self.get(\"manifest\", \"shipit_external_branch\"),\n            )\n\n        # If both of these are None, the package can only be coming from\n        # preinstalled toolchain or system packages\n        repo_url = self.get_repo_url(ctx)\n        url = self.get(\"download\", \"url\", ctx=ctx)\n\n        # Can we satisfy this dep with system packages?\n        if (repo_url is None and url is None) or build_options.allow_system_packages:\n            if self._is_satisfied_by_preinstalled_environment(ctx):\n                # pyre-fixme[7]: Expected `Fetcher` but got `PreinstalledNopFetcher`.\n                return PreinstalledNopFetcher()\n\n            if build_options.host_type.get_package_manager():\n                packages = self.get_required_system_packages(ctx)\n                package_fetcher = SystemPackageFetcher(build_options, packages)\n                if package_fetcher.packages_are_installed():\n                    # pyre-fixme[7]: Expected `Fetcher` but got `SystemPackageFetcher`.\n                    return package_fetcher\n\n        if repo_url:\n            rev = self.get(\"git\", \"rev\")\n            depth = self.get(\"git\", \"depth\")\n            branch = self.get(\"git\", \"branch\")\n            # pyre-fixme[6]: For 4th argument expected `str` but got `Optional[str]`.\n            # pyre-fixme[6]: For 5th argument expected `int` but got `Optional[str]`.\n            # pyre-fixme[6]: For 6th argument expected `str` but got `Optional[str]`.\n            return GitFetcher(build_options, self, repo_url, rev, depth, branch)\n\n        if url:\n            # We need to defer this import until now to avoid triggering\n            # a cycle when the facebook/__init__.py is loaded.\n            try:\n                from .facebook.lfs import LFSCachingArchiveFetcher\n\n                return LFSCachingArchiveFetcher(\n                    build_options,\n                    self,\n                    url,\n                    # pyre-fixme[6]: For 4th argument expected `str` but got\n                    #  `Optional[str]`.\n                    self.get(\"download\", \"sha256\", ctx=ctx),\n                )\n            except ImportError:\n                # This FB internal module isn't shippped to github,\n                # so just use its base class\n                return ArchiveFetcher(\n                    build_options,\n                    self,\n                    url,\n                    # pyre-fixme[6]: For 4th argument expected `str` but got\n                    #  `Optional[str]`.\n                    self.get(\"download\", \"sha256\", ctx=ctx),\n                )\n\n        raise KeyError(\n            f\"project {self.name} has no fetcher configuration or system packages matching {ctx} - have you run `getdeps.py install-system-deps --recursive`?\"\n        )\n\n    def create_fetcher(\n        self,\n        build_options: BuildOptions,\n        loader: ManifestLoader,\n        ctx: ManifestContext,\n    ) -> Fetcher:\n        fetcher = self._create_fetcher(build_options, ctx)\n        subprojects = self.get_section_as_ordered_pairs(\"subprojects\", ctx)\n        if subprojects:\n            subs: list[tuple[Fetcher, str | None]] = []\n            for project, subdir in subprojects:\n                submanifest = loader.load_manifest(project)\n                subfetcher = submanifest.create_fetcher(build_options, loader, ctx)\n                subs.append((subfetcher, subdir))\n            # pyre-fixme[6]: For 2nd argument expected `List[Tuple[Fetcher, str]]`\n            #  but got `List[Tuple[Fetcher, Optional[str]]]`.\n            return SubFetcher(fetcher, subs)\n        else:\n            return fetcher\n\n    def get_builder_name(self, ctx: ManifestContext) -> str:\n        builder = self.get(\"build\", \"builder\", ctx=ctx)\n        if not builder:\n            raise Exception(\"project %s has no builder for %r\" % (self.name, ctx))\n        return builder\n\n    def create_builder(  # noqa:C901\n        self,\n        build_options: BuildOptions,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n        ctx: ManifestContext,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        final_install_prefix: str | None = None,\n        extra_cmake_defines: dict[str, str] | None = None,\n        cmake_targets: list[str] | None = None,\n        extra_b2_args: list[str] | None = None,\n    ) -> BuilderBase:\n        builder = self.get_builder_name(ctx)\n        build_in_src_dir = self.get(\"build\", \"build_in_src_dir\", \"false\", ctx=ctx)\n        if build_in_src_dir == \"true\":\n            # Some scripts don't work when they are configured and build in\n            # a different directory than source (or when the build directory\n            # is not a subdir of source).\n            build_dir = src_dir\n            subdir = self.get(\"build\", \"subdir\", None, ctx=ctx)\n            if subdir is not None:\n                build_dir = os.path.join(build_dir, subdir)\n            print(\"build_dir is %s\" % build_dir)  # just to quiet lint\n\n        if builder == \"make\" or builder == \"cmakebootstrap\":\n            build_args = self.get_section_as_args(\"make.build_args\", ctx)\n            install_args = self.get_section_as_args(\"make.install_args\", ctx)\n            test_args = self.get_section_as_args(\"make.test_args\", ctx)\n            if builder == \"cmakebootstrap\":\n                return CMakeBootStrapBuilder(\n                    loader,\n                    dep_manifests,\n                    build_options,\n                    ctx,\n                    self,\n                    src_dir,\n                    # pyre-fixme[6]: For 7th argument expected `str` but got `None`.\n                    None,\n                    inst_dir,\n                    build_args,\n                    install_args,\n                    test_args,\n                )\n            else:\n                return MakeBuilder(\n                    loader,\n                    dep_manifests,\n                    build_options,\n                    ctx,\n                    self,\n                    src_dir,\n                    # pyre-fixme[6]: For 7th argument expected `str` but got `None`.\n                    None,\n                    inst_dir,\n                    build_args,\n                    install_args,\n                    test_args,\n                )\n\n        if builder == \"autoconf\":\n            args = self.get_section_as_args(\"autoconf.args\", ctx)\n            conf_env_args: dict[str, list[str]] = {}\n            ldflags_cmd = self.get_section_as_args(\"autoconf.envcmd.LDFLAGS\", ctx)\n            if ldflags_cmd:\n                conf_env_args[\"LDFLAGS\"] = ldflags_cmd\n            return AutoconfBuilder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                src_dir,\n                build_dir,\n                inst_dir,\n                args,\n                conf_env_args,\n            )\n\n        if builder == \"boost\":\n            args = self.get_section_as_args(\"b2.args\", ctx)\n            if extra_b2_args is not None:\n                args += extra_b2_args\n            return Boost(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                src_dir,\n                build_dir,\n                inst_dir,\n                args,\n            )\n\n        if builder == \"cmake\":\n            defines = self.get_section_as_dict(\"cmake.defines\", ctx)\n            return CMakeBuilder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                src_dir,\n                build_dir,\n                inst_dir,\n                # pyre-fixme[6]: For 9th argument expected `Optional[Dict[str,\n                #  str]]` but got `Dict[str, Optional[str]]`.\n                defines,\n                final_install_prefix,\n                extra_cmake_defines,\n                cmake_targets,\n            )\n\n        if builder == \"python-wheel\":\n            return PythonWheelBuilder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                src_dir,\n                build_dir,\n                inst_dir,\n            )\n\n        if builder == \"sqlite\":\n            return SqliteBuilder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                src_dir,\n                build_dir,\n                inst_dir,\n            )\n\n        if builder == \"ninja_bootstrap\":\n            return NinjaBootstrap(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                build_dir,\n                src_dir,\n                inst_dir,\n            )\n\n        if builder == \"nop\":\n            return NopBuilder(\n                loader, dep_manifests, build_options, ctx, self, src_dir, inst_dir\n            )\n\n        if builder == \"openssl\":\n            return OpenSSLBuilder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                build_dir,\n                src_dir,\n                inst_dir,\n            )\n\n        if builder == \"iproute2\":\n            return Iproute2Builder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                src_dir,\n                build_dir,\n                inst_dir,\n            )\n\n        if builder == \"meson\":\n            return MesonBuilder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                src_dir,\n                build_dir,\n                inst_dir,\n            )\n\n        if builder == \"setup-py\":\n            return SetupPyBuilder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                self,\n                src_dir,\n                build_dir,\n                inst_dir,\n            )\n\n        if builder == \"cargo\":\n            return self.create_cargo_builder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                src_dir,\n                build_dir,\n                inst_dir,\n            )\n\n        raise KeyError(\"project %s has no known builder\" % (self.name))\n\n    def create_prepare_builders(\n        self,\n        build_options: BuildOptions,\n        ctx: ManifestContext,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n    ) -> list[BuilderBase]:\n        \"\"\"Create builders that have a prepare step run, e.g. to write config files\"\"\"\n        prepare_builders: list[BuilderBase] = []\n        builder = self.get_builder_name(ctx)\n        cargo = self.get_section_as_dict(\"cargo\", ctx)\n        if not builder == \"cargo\" and cargo:\n            cargo_builder = self.create_cargo_builder(\n                loader,\n                dep_manifests,\n                build_options,\n                ctx,\n                src_dir,\n                build_dir,\n                inst_dir,\n            )\n            prepare_builders.append(cargo_builder)\n        return prepare_builders\n\n    def create_cargo_builder(\n        self,\n        loader: ManifestLoader,\n        dep_manifests: list[ManifestParser],\n        build_options: BuildOptions,\n        ctx: ManifestContext,\n        src_dir: str,\n        build_dir: str,\n        inst_dir: str,\n    ) -> CargoBuilder:\n        # pyre-fixme[6]: For 3rd argument expected `Optional[str]` but got `bool`.\n        build_doc = self.get(\"cargo\", \"build_doc\", False, ctx)\n        workspace_dir = self.get(\"cargo\", \"workspace_dir\", None, ctx)\n        manifests_to_build = self.get(\"cargo\", \"manifests_to_build\", None, ctx)\n        cargo_config_file = self.get(\"cargo\", \"cargo_config_file\", None, ctx)\n        return CargoBuilder(\n            loader,\n            dep_manifests,\n            build_options,\n            ctx,\n            self,\n            src_dir,\n            build_dir,\n            inst_dir,\n            # pyre-fixme[6]: For 9th argument expected `bool` but got `Optional[str]`.\n            build_doc,\n            workspace_dir,\n            manifests_to_build,\n            cargo_config_file,\n        )\n\n\nclass ManifestContext:\n    \"\"\"ProjectContext contains a dictionary of values to use when evaluating boolean\n    expressions in a project manifest.\n\n    This object should be passed as the `ctx` parameter in ManifestParser.get() calls.\n    \"\"\"\n\n    ALLOWED_VARIABLES: set[str] = {\n        \"os\",\n        \"distro\",\n        \"distro_vers\",\n        \"fb\",\n        \"fbsource\",\n        \"test\",\n        \"shared_libs\",\n    }\n\n    def __init__(self, ctx_dict: dict[str, str | None]) -> None:\n        assert set(ctx_dict.keys()) == self.ALLOWED_VARIABLES\n        self.ctx_dict: dict[str, str | None] = ctx_dict\n\n    def get(self, key: str) -> str | None:\n        return self.ctx_dict[key]\n\n    def set(self, key: str, value: str | None) -> None:\n        assert key in self.ALLOWED_VARIABLES\n        self.ctx_dict[key] = value\n\n    def copy(self) -> ManifestContext:\n        return ManifestContext(dict(self.ctx_dict))\n\n    def __str__(self) -> str:\n        s = \", \".join(\n            \"%s=%s\" % (key, value) for key, value in sorted(self.ctx_dict.items())\n        )\n        return \"{\" + s + \"}\"\n\n\nclass ContextGenerator:\n    \"\"\"ContextGenerator allows creating ManifestContext objects on a per-project basis.\n    This allows us to evaluate different projects with slightly different contexts.\n\n    For instance, this can be used to only enable tests for some projects.\"\"\"\n\n    def __init__(self, default_ctx: dict[str, str | None]) -> None:\n        self.default_ctx: ManifestContext = ManifestContext(default_ctx)\n        self.ctx_by_project: dict[str, ManifestContext] = {}\n\n    def set_value_for_project(\n        self, project_name: str, key: str, value: str | None\n    ) -> None:\n        project_ctx = self.ctx_by_project.get(project_name)\n        if project_ctx is None:\n            project_ctx = self.default_ctx.copy()\n            self.ctx_by_project[project_name] = project_ctx\n        project_ctx.set(key, value)\n\n    def set_value_for_all_projects(self, key: str, value: str | None) -> None:\n        self.default_ctx.set(key, value)\n        for ctx in self.ctx_by_project.values():\n            ctx.set(key, value)\n\n    def get_context(self, project_name: str) -> ManifestContext:\n        return self.ctx_by_project.get(project_name, self.default_ctx)\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/platform.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\nfrom __future__ import annotations\n\nimport os\nimport platform\nimport re\nimport shlex\nimport sys\n\n\ndef is_windows() -> bool:\n    \"\"\"Returns true if the system we are currently running on\n    is a Windows system\"\"\"\n    return sys.platform.startswith(\"win\")\n\n\ndef get_linux_type() -> tuple[str | None, str | None, str | None]:\n    try:\n        with open(\"/etc/os-release\") as f:\n            data = f.read()\n    except EnvironmentError:\n        return (None, None, None)\n\n    os_vars: dict[str, str] = {}\n    for line in data.splitlines():\n        parts = line.split(\"=\", 1)\n        if len(parts) != 2:\n            continue\n        key = parts[0].strip()\n        value_parts = shlex.split(parts[1].strip())\n        if not value_parts:\n            value = \"\"\n        else:\n            value = value_parts[0]\n        os_vars[key] = value\n\n    name = os_vars.get(\"NAME\")\n    if name:\n        name = name.lower()\n        name = re.sub(\"linux\", \"\", name)\n        name = name.strip().replace(\" \", \"_\")\n\n    version_id = os_vars.get(\"VERSION_ID\")\n    if version_id:\n        version_id = version_id.lower()\n\n    return \"linux\", name, version_id\n\n\n# Ideally we'd use a common library like `psutil` to read system information,\n# but getdeps can't take third-party dependencies.\n\n\ndef _get_available_ram_linux() -> int:\n    # TODO: Ideally, this function would inspect the current cgroup for any\n    # limits, rather than solely relying on system RAM.\n\n    meminfo_path = \"/proc/meminfo\"\n    try:\n        with open(meminfo_path) as f:\n            for line in f:\n                try:\n                    key, value = line.split(\":\", 1)\n                except ValueError:\n                    continue\n                suffix = \" kB\\n\"\n                if key == \"MemAvailable\" and value.endswith(suffix):\n                    value = value[: -len(suffix)]\n                    try:\n                        return int(value) // 1024\n                    except ValueError:\n                        continue\n    except OSError:\n        print(\"error opening {}\".format(meminfo_path), end=\"\", file=sys.stderr)\n    else:\n        print(\n            \"{} had no valid MemAvailable\".format(meminfo_path), end=\"\", file=sys.stderr\n        )\n\n    guess = 8\n    print(\", guessing {} GiB\".format(guess), file=sys.stderr)\n    return guess * 1024\n\n\ndef _get_available_ram_macos() -> int:\n    import ctypes.util\n\n    libc = ctypes.CDLL(ctypes.util.find_library(\"libc\"), use_errno=True)\n    sysctlbyname = libc.sysctlbyname\n    sysctlbyname.restype = ctypes.c_int\n    sysctlbyname.argtypes = [\n        ctypes.c_char_p,\n        ctypes.c_void_p,\n        ctypes.POINTER(ctypes.c_size_t),\n        ctypes.c_void_p,\n        ctypes.c_size_t,\n    ]\n    # TODO: There may be some way to approximate an availability\n    # metric, but just use total RAM for now.\n    memsize = ctypes.c_int64()\n    memsizesize = ctypes.c_size_t(8)\n    res = sysctlbyname(\n        b\"hw.memsize\", ctypes.byref(memsize), ctypes.byref(memsizesize), None, 0\n    )\n    if res != 0:\n        raise NotImplementedError(\n            f\"failed to retrieve hw.memsize sysctl: {ctypes.get_errno()}\"\n        )\n    return memsize.value // (1024 * 1024)\n\n\ndef _get_available_ram_windows() -> int:\n    import ctypes\n\n    DWORD = ctypes.c_uint32\n    QWORD = ctypes.c_uint64\n\n    class MEMORYSTATUSEX(ctypes.Structure):\n        _fields_ = [\n            (\"dwLength\", DWORD),\n            (\"dwMemoryLoad\", DWORD),\n            (\"ullTotalPhys\", QWORD),\n            (\"ullAvailPhys\", QWORD),\n            (\"ullTotalPageFile\", QWORD),\n            (\"ullAvailPageFile\", QWORD),\n            (\"ullTotalVirtual\", QWORD),\n            (\"ullAvailVirtual\", QWORD),\n            (\"ullExtendedVirtual\", QWORD),\n        ]\n\n    ms = MEMORYSTATUSEX()\n    ms.dwLength = ctypes.sizeof(ms)\n    # pyre-ignore[16]\n    res = ctypes.windll.kernel32.GlobalMemoryStatusEx(ctypes.byref(ms))\n    if res == 0:\n        raise NotImplementedError(\"error calling GlobalMemoryStatusEx\")\n\n    # This is fuzzy, but AvailPhys is too conservative, and AvailTotal is too\n    # aggressive, so average the two. It's okay for builds to use some swap.\n    return (ms.ullAvailPhys + ms.ullTotalPhys) // (2 * 1024 * 1024)\n\n\ndef _get_available_ram_freebsd() -> int:\n    import ctypes.util\n\n    libc = ctypes.CDLL(ctypes.util.find_library(\"libc\"), use_errno=True)\n    sysctlbyname = libc.sysctlbyname\n    sysctlbyname.restype = ctypes.c_int\n    sysctlbyname.argtypes = [\n        ctypes.c_char_p,\n        ctypes.c_void_p,\n        ctypes.POINTER(ctypes.c_size_t),\n        ctypes.c_void_p,\n        ctypes.c_size_t,\n    ]\n    # hw.usermem is pretty close to what we want.\n    memsize = ctypes.c_int64()\n    memsizesize = ctypes.c_size_t(8)\n    res = sysctlbyname(\n        b\"hw.usermem\", ctypes.byref(memsize), ctypes.byref(memsizesize), None, 0\n    )\n    if res != 0:\n        raise NotImplementedError(\n            f\"failed to retrieve hw.memsize sysctl: {ctypes.get_errno()}\"\n        )\n    return memsize.value // (1024 * 1024)\n\n\ndef get_available_ram() -> int:\n    \"\"\"\n    Returns a platform-appropriate available RAM metric in MiB.\n    \"\"\"\n    if sys.platform == \"linux\":\n        return _get_available_ram_linux()\n    elif sys.platform == \"darwin\":\n        return _get_available_ram_macos()\n    elif sys.platform == \"win32\":\n        return _get_available_ram_windows()\n    elif sys.platform.startswith(\"freebsd\"):\n        return _get_available_ram_freebsd()\n    else:\n        raise NotImplementedError(\n            f\"platform {sys.platform} does not have an implementation of get_available_ram\"\n        )\n\n\ndef is_current_host_arm() -> bool:\n    if sys.platform.startswith(\"darwin\"):\n        # platform.machine() can be fooled by rosetta for python < 3.9.2\n        return \"ARM64\" in os.uname().version\n    else:\n        machine = platform.machine().lower()\n        return \"arm\" in machine or \"aarch\" in machine\n\n\nclass HostType:\n    def __init__(\n        self,\n        ostype: str | None = None,\n        distro: str | None = None,\n        distrovers: str | None = None,\n    ) -> None:\n        # Maybe we should allow callers to indicate whether this machine uses\n        # an ARM architecture, but we need to change HostType serialization\n        # and deserialization in that case and hunt down anywhere that is\n        # persisting that serialized data.\n        isarm = False\n\n        if ostype is None:\n            distro = None\n            distrovers = None\n            if sys.platform.startswith(\"linux\"):\n                ostype, distro, distrovers = get_linux_type()\n            elif sys.platform.startswith(\"darwin\"):\n                ostype = \"darwin\"\n            elif is_windows():\n                ostype = \"windows\"\n                distrovers = str(sys.getwindowsversion().major)\n            elif sys.platform.startswith(\"freebsd\"):\n                ostype = \"freebsd\"\n            else:\n                ostype = sys.platform\n\n            isarm = is_current_host_arm()\n\n        # The operating system type\n        self.ostype: str | None = ostype\n        # The distribution, if applicable\n        self.distro: str | None = distro\n        # The OS/distro version if known\n        self.distrovers: str | None = distrovers\n        # Does the CPU use an ARM architecture? ARM includes Apple Silicon\n        # Macs as well as other ARM systems that might be running Linux or\n        # something.\n        self.isarm: bool = isarm\n\n    def is_windows(self) -> bool:\n        return self.ostype == \"windows\"\n\n    # is_arm is kinda half implemented at the moment. This method is only\n    # intended to be used when HostType represents information about the\n    # current machine we are running on.\n    # When HostType is being used to enumerate platform types (represent\n    # information about machine types that we may or may not be running on)\n    # the result could be nonsense (under the current implementation its always\n    # false.)\n    def is_arm(self) -> bool:\n        return self.isarm\n\n    def is_darwin(self) -> bool:\n        return self.ostype == \"darwin\"\n\n    def is_linux(self) -> bool:\n        return self.ostype == \"linux\"\n\n    def is_freebsd(self) -> bool:\n        return self.ostype == \"freebsd\"\n\n    def as_tuple_string(self) -> str:\n        return \"%s-%s-%s\" % (\n            self.ostype,\n            self.distro or \"none\",\n            self.distrovers or \"none\",\n        )\n\n    def get_package_manager(self) -> str | None:\n        if not self.is_linux() and not self.is_darwin():\n            return None\n        if self.is_darwin():\n            return \"homebrew\"\n        if self.distro in (\"fedora\", \"centos\", \"centos_stream\", \"rocky\"):\n            return \"rpm\"\n        if self.distro is not None and self.distro.startswith(\n            (\"debian\", \"ubuntu\", \"pop!_os\", \"mint\")\n        ):\n            return \"deb\"\n        if self.distro == \"arch\":\n            return \"pacman-package\"\n        return None\n\n    @staticmethod\n    def from_tuple_string(s: str) -> HostType:\n        ostype, distro, distrovers = s.split(\"-\")\n        return HostType(ostype=ostype, distro=distro, distrovers=distrovers)\n\n    def __eq__(self, b: object) -> bool:\n        if not isinstance(b, HostType):\n            return False\n        return (\n            self.ostype == b.ostype\n            and self.distro == b.distro\n            and self.distrovers == b.distrovers\n        )\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/py_wheel_builder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\nfrom __future__ import annotations\n\nimport codecs\nimport collections\nimport email\nimport email.message\nimport os\nimport re\nimport stat\n\nfrom .builder import BuilderBase, CMakeBuilder\n\n\nWheelNameInfo = collections.namedtuple(\n    \"WheelNameInfo\", (\"distribution\", \"version\", \"build\", \"python\", \"abi\", \"platform\")\n)\n\nCMAKE_HEADER = \"\"\"\ncmake_minimum_required(VERSION 3.8)\n\nproject(\"{manifest_name}\" LANGUAGES C)\n\nset(CMAKE_MODULE_PATH\n  \"{cmake_dir}\"\n  ${{CMAKE_MODULE_PATH}}\n)\ninclude(FBPythonBinary)\n\nset(CMAKE_INSTALL_DIR lib/cmake/{manifest_name} CACHE STRING\n    \"The subdirectory where CMake package config files should be installed\")\n\"\"\"\n\nCMAKE_FOOTER = \"\"\"\ninstall_fb_python_library({lib_name} EXPORT all)\ninstall(\n  EXPORT all\n  FILE {manifest_name}-targets.cmake\n  NAMESPACE {namespace}::\n  DESTINATION ${{CMAKE_INSTALL_DIR}}\n)\n\ninclude(CMakePackageConfigHelpers)\nconfigure_package_config_file(\n  ${{CMAKE_BINARY_DIR}}/{manifest_name}-config.cmake.in\n  {manifest_name}-config.cmake\n  INSTALL_DESTINATION ${{CMAKE_INSTALL_DIR}}\n  PATH_VARS\n    CMAKE_INSTALL_DIR\n)\ninstall(\n  FILES ${{CMAKE_CURRENT_BINARY_DIR}}/{manifest_name}-config.cmake\n  DESTINATION ${{CMAKE_INSTALL_DIR}}\n)\n\"\"\"\n\nCMAKE_CONFIG_FILE = \"\"\"\n@PACKAGE_INIT@\n\ninclude(CMakeFindDependencyMacro)\n\nset_and_check({upper_name}_CMAKE_DIR \"@PACKAGE_CMAKE_INSTALL_DIR@\")\n\nif (NOT TARGET {namespace}::{lib_name})\n  include(\"${{{upper_name}_CMAKE_DIR}}/{manifest_name}-targets.cmake\")\nendif()\n\nset({upper_name}_LIBRARIES {namespace}::{lib_name})\n\n{find_dependency_lines}\n\nif (NOT {manifest_name}_FIND_QUIETLY)\n  message(STATUS \"Found {manifest_name}: ${{PACKAGE_PREFIX_DIR}}\")\nendif()\n\"\"\"\n\n\n# Note: for now we are manually manipulating the wheel packet contents.\n# The wheel format is documented here:\n# https://www.python.org/dev/peps/pep-0491/#file-format\n#\n# We currently aren't particularly smart about correctly handling the full wheel\n# functionality, but this is good enough to handle simple pure-python wheels,\n# which is the main thing we care about right now.\n#\n# We could potentially use pip to install the wheel to a temporary location and\n# then copy its \"installed\" files, but this has its own set of complications.\n# This would require pip to already be installed and available, and we would\n# need to correctly find the right version of pip or pip3 to use.\n# If we did ever want to go down that path, we would probably want to use\n# something like the following pip3 command:\n#   pip3 --isolated install --no-cache-dir --no-index --system \\\n#       --target <install_dir> <wheel_file>\nclass PythonWheelBuilder(BuilderBase):\n    \"\"\"This Builder can take Python wheel archives and install them as python libraries\n    that can be used by add_fb_python_library()/add_fb_python_executable() CMake rules.\n    \"\"\"\n\n    # pyre-fixme[13]: Attribute `dist_info_dir` is never initialized.\n    dist_info_dir: str\n    # pyre-fixme[13]: Attribute `template_format_dict` is never initialized.\n    template_format_dict: dict[str, str]\n\n    def _build(self, reconfigure: bool) -> None:\n        # When we are invoked, self.src_dir contains the unpacked wheel contents.\n        #\n        # Since a wheel file is just a zip file, the Fetcher code recognizes it as such\n        # and goes ahead and unpacks it.  (We could disable that Fetcher behavior in the\n        # future if we ever wanted to, say if we wanted to call pip here.)\n        wheel_name = self._parse_wheel_name()\n        name_version_prefix = \"-\".join((wheel_name.distribution, wheel_name.version))\n        dist_info_name = name_version_prefix + \".dist-info\"\n        data_dir_name = name_version_prefix + \".data\"\n        self.dist_info_dir = os.path.join(self.src_dir, dist_info_name)\n        wheel_metadata = self._read_wheel_metadata(wheel_name)\n\n        # Check that we can understand the wheel version.\n        # We don't really care about wheel_metadata[\"Root-Is-Purelib\"] since\n        # we are generating our own standalone python archives rather than installing\n        # into site-packages.\n        version = wheel_metadata[\"Wheel-Version\"]\n        if not version.startswith(\"1.\"):\n            raise Exception(\"unsupported wheel version %s\" % (version,))\n\n        # Add a find_dependency() call for each of our dependencies.\n        # The dependencies are also listed in the wheel METADATA file, but it is simpler\n        # to pull this directly from the getdeps manifest.\n        dep_list = sorted(\n            self.manifest.get_section_as_dict(\"dependencies\", self.ctx).keys()\n        )\n        find_dependency_lines = [\"find_dependency({})\".format(dep) for dep in dep_list]\n\n        getdeps_cmake_dir = os.path.join(\n            os.path.dirname(os.path.dirname(__file__)), \"CMake\"\n        )\n        self.template_format_dict = {\n            # Note that CMake files always uses forward slash separators in path names,\n            # even on Windows.  Therefore replace path separators here.\n            \"cmake_dir\": _to_cmake_path(getdeps_cmake_dir),\n            \"lib_name\": self.manifest.name,\n            \"manifest_name\": self.manifest.name,\n            \"namespace\": self.manifest.name,\n            \"upper_name\": self.manifest.name.upper().replace(\"-\", \"_\"),\n            \"find_dependency_lines\": \"\\n\".join(find_dependency_lines),\n        }\n\n        # Find sources from the root directory\n        path_mapping: dict[str, str] = {}\n        for entry in os.listdir(self.src_dir):\n            if entry == data_dir_name:\n                continue\n            self._add_sources(path_mapping, os.path.join(self.src_dir, entry), entry)\n\n        # Files under the .data directory also need to be installed in the correct\n        # locations\n        if os.path.exists(data_dir_name):\n            # TODO: process the subdirectories of data_dir_name\n            # This isn't implemented yet since for now we have only needed dependencies\n            # on some simple pure Python wheels, so I haven't tested against wheels with\n            # additional files in the .data directory.\n            raise Exception(\n                \"handling of the subdirectories inside %s is not implemented yet\"\n                % data_dir_name\n            )\n\n        # Emit CMake files\n        self._write_cmakelists(path_mapping, dep_list)\n        self._write_cmake_config_template()\n\n        # Run the build\n        self._run_cmake_build(reconfigure)\n\n    def _run_cmake_build(self, reconfigure: bool) -> None:\n        cmake_builder = CMakeBuilder(\n            loader=self.loader,\n            dep_manifests=self.dep_manifests,\n            build_opts=self.build_opts,\n            ctx=self.ctx,\n            manifest=self.manifest,\n            # Note that we intentionally supply src_dir=build_dir,\n            # since we wrote out our generated CMakeLists.txt in the build directory\n            src_dir=self.build_dir,\n            build_dir=self.build_dir,\n            inst_dir=self.inst_dir,\n            defines={},\n            final_install_prefix=None,\n        )\n        cmake_builder.build(reconfigure=reconfigure)\n\n    def _write_cmakelists(\n        self, path_mapping: dict[str, str], dependencies: list[str]\n    ) -> None:\n        cmake_path = os.path.join(self.build_dir, \"CMakeLists.txt\")\n        with open(cmake_path, \"w\") as f:\n            f.write(CMAKE_HEADER.format(**self.template_format_dict))\n            for dep in dependencies:\n                f.write(\"find_package({0} REQUIRED)\\n\".format(dep))\n\n            f.write(\n                \"add_fb_python_library({lib_name}\\n\".format(**self.template_format_dict)\n            )\n            f.write('  BASE_DIR \"%s\"\\n' % _to_cmake_path(self.src_dir))\n            f.write(\"  SOURCES\\n\")\n            for src_path, install_path in path_mapping.items():\n                f.write(\n                    '    \"%s=%s\"\\n'\n                    % (_to_cmake_path(src_path), _to_cmake_path(install_path))\n                )\n            if dependencies:\n                f.write(\"  DEPENDS\\n\")\n                for dep in dependencies:\n                    f.write('    \"{0}::{0}\"\\n'.format(dep))\n            f.write(\")\\n\")\n\n            f.write(CMAKE_FOOTER.format(**self.template_format_dict))\n\n    def _write_cmake_config_template(self) -> None:\n        config_path_name = self.manifest.name + \"-config.cmake.in\"\n        output_path = os.path.join(self.build_dir, config_path_name)\n\n        with open(output_path, \"w\") as f:\n            f.write(CMAKE_CONFIG_FILE.format(**self.template_format_dict))\n\n    def _add_sources(\n        self, path_mapping: dict[str, str], src_path: str, install_path: str\n    ) -> None:\n        s = os.lstat(src_path)\n        if not stat.S_ISDIR(s.st_mode):\n            path_mapping[src_path] = install_path\n            return\n\n        for entry in os.listdir(src_path):\n            self._add_sources(\n                path_mapping,\n                os.path.join(src_path, entry),\n                os.path.join(install_path, entry),\n            )\n\n    def _parse_wheel_name(self) -> WheelNameInfo:\n        # The ArchiveFetcher prepends \"manifest_name-\", so strip that off first.\n        wheel_name = os.path.basename(self.src_dir)\n        prefix = self.manifest.name + \"-\"\n        if not wheel_name.startswith(prefix):\n            raise Exception(\n                \"expected wheel source directory to be of the form %s-NAME.whl\"\n                % (prefix,)\n            )\n        wheel_name = wheel_name[len(prefix) :]\n\n        wheel_name_re = re.compile(\n            r\"(?P<distribution>[^-]+)\"\n            r\"-(?P<version>\\d+[^-]*)\"\n            r\"(-(?P<build>\\d+[^-]*))?\"\n            r\"-(?P<python>\\w+\\d+(\\.\\w+\\d+)*)\"\n            r\"-(?P<abi>\\w+)\"\n            r\"-(?P<platform>\\w+(\\.\\w+)*)\"\n            r\"\\.whl\"\n        )\n        match = wheel_name_re.match(wheel_name)\n        if not match:\n            raise Exception(\n                \"bad python wheel name %s: expected to have the form \"\n                \"DISTRIBUTION-VERSION-[-BUILD]-PYTAG-ABI-PLATFORM\"\n            )\n\n        return WheelNameInfo(\n            distribution=match.group(\"distribution\"),\n            version=match.group(\"version\"),\n            build=match.group(\"build\"),\n            python=match.group(\"python\"),\n            abi=match.group(\"abi\"),\n            platform=match.group(\"platform\"),\n        )\n\n    # pyre-fixme[24]: Generic type `email.message.Message` expects 2 type parameters.\n    def _read_wheel_metadata(self, wheel_name: WheelNameInfo) -> email.message.Message:\n        metadata_path = os.path.join(self.dist_info_dir, \"WHEEL\")\n        with codecs.open(metadata_path, \"r\", encoding=\"utf-8\") as f:\n            return email.message_from_file(f)\n\n\ndef _to_cmake_path(path: str) -> str:\n    # CMake always uses forward slashes to separate paths in CMakeLists.txt files,\n    # even on Windows.  It treats backslashes as character escapes, so using\n    # backslashes in the path will cause problems.  Therefore replace all path\n    # separators with forward slashes to make sure the paths are correct on Windows.\n    # e.g. \"C:\\foo\\bar.txt\" becomes \"C:/foo/bar.txt\"\n    return path.replace(os.path.sep, \"/\")\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/runcmd.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\nfrom __future__ import annotations\n\nimport os\nimport select\nimport subprocess\nimport sys\nfrom collections.abc import Callable\nfrom shlex import quote as shellquote\n\nfrom .envfuncs import Env\nfrom .platform import is_windows\n\n\nclass RunCommandError(Exception):\n    pass\n\n\ndef make_memory_limit_preexec_fn(\n    job_weight_mib: int,\n) -> Callable[[], None] | None:\n    \"\"\"Create a preexec_fn that sets a per-process virtual memory limit.\n\n    When getdeps spawns build commands (cmake -> ninja -> N compiler processes),\n    the parallelism is computed from available RAM divided by job_weight_mib.\n    However, there is no enforcement of that budget: if a compiler or linker\n    process exceeds its expected memory usage, the system can run out of RAM\n    and the Linux OOM killer may terminate arbitrary processes — including the\n    user's shell or terminal.\n\n    This function returns a callable suitable for subprocess.Popen's preexec_fn\n    parameter. It runs in each child process after fork() but before exec(),\n    setting RLIMIT_AS (virtual address space limit) so that a runaway process\n    gets a failed allocation (std::bad_alloc / ENOMEM) instead of triggering\n    the OOM killer. The limit is inherited by all descendant processes (ninja,\n    compiler invocations, etc.).\n\n    The per-process limit is set to job_weight_mib * 10. The 10x multiplier\n    accounts for the fact that RLIMIT_AS caps virtual address space, which is\n    typically 2-4x larger than resident (physical) memory for C++ compilers\n    due to memory-mapped files, shared libraries, and address space reservations\n    that don't consume physical RAM. The multiplier is intentionally generous:\n    the goal is a safety net that catches genuine runaways before the OOM killer\n    fires, not a tight per-job budget.\n\n    Only applies on Linux, where the OOM killer is the problem. Returns None\n    on other platforms.\n    \"\"\"\n    if sys.platform != \"linux\":\n        return None\n\n    # Each job is budgeted job_weight_mib of physical RAM. Virtual address\n    # space is typically 2-4x RSS. Use 10x as a generous safety net: tight\n    # enough to stop a runaway process before the OOM killer fires, but loose\n    # enough to avoid false positives from normal virtual memory overhead.\n    limit_bytes: int = job_weight_mib * 10 * 1024 * 1024\n\n    def _set_memory_limit() -> None:\n        import resource\n\n        resource.setrlimit(resource.RLIMIT_AS, (limit_bytes, limit_bytes))\n\n    return _set_memory_limit\n\n\ndef _print_env_diff(env: Env, log_fn: Callable[[str], None]) -> None:\n    current_keys = set(os.environ.keys())\n    wanted_env = set(env.keys())\n\n    unset_keys = current_keys.difference(wanted_env)\n    for k in sorted(unset_keys):\n        log_fn(\"+ unset %s\\n\" % k)\n\n    added_keys = wanted_env.difference(current_keys)\n    for k in wanted_env.intersection(current_keys):\n        if os.environ[k] != env[k]:\n            added_keys.add(k)\n\n    for k in sorted(added_keys):\n        if (\"PATH\" in k) and (os.pathsep in env[k]):\n            log_fn(\"+ %s=\\\\\\n\" % k)\n            for elem in env[k].split(os.pathsep):\n                log_fn(\"+      %s%s\\\\\\n\" % (shellquote(elem), os.pathsep))\n        else:\n            log_fn(\"+ %s=%s \\\\\\n\" % (k, shellquote(env[k])))\n\n\ndef check_cmd(\n    cmd: list[str],\n    env: Env | None = None,\n    cwd: str | None = None,\n    allow_fail: bool = False,\n    log_file: str | None = None,\n) -> None:\n    \"\"\"Run the command and abort on failure\"\"\"\n    rc = run_cmd(cmd, env=env, cwd=cwd, allow_fail=allow_fail, log_file=log_file)\n    if rc != 0:\n        raise RuntimeError(f\"Failure exit code {rc} for command {cmd}\")\n\n\ndef run_cmd(\n    cmd: list[str],\n    env: Env | None = None,\n    cwd: str | None = None,\n    allow_fail: bool = False,\n    log_file: str | None = None,\n    preexec_fn: Callable[[], None] | None = None,\n) -> int:\n    def log_to_stdout(msg: str) -> None:\n        sys.stdout.buffer.write(msg.encode(errors=\"surrogateescape\"))\n\n    if log_file is not None:\n        with open(log_file, \"a\", encoding=\"utf-8\", errors=\"surrogateescape\") as log:\n\n            # pyre-fixme[53]: Captured variable `log` is not annotated.\n            def log_function(msg: str) -> None:\n                log.write(msg)\n                log_to_stdout(msg)\n\n            return _run_cmd(\n                cmd,\n                env=env,\n                cwd=cwd,\n                allow_fail=allow_fail,\n                log_fn=log_function,\n                preexec_fn=preexec_fn,\n            )\n    else:\n        return _run_cmd(\n            cmd,\n            env=env,\n            cwd=cwd,\n            allow_fail=allow_fail,\n            log_fn=log_to_stdout,\n            preexec_fn=preexec_fn,\n        )\n\n\ndef _run_cmd(\n    cmd: list[str],\n    env: Env | None,\n    cwd: str | None,\n    allow_fail: bool,\n    log_fn: Callable[[str], None],\n    preexec_fn: Callable[[], None] | None = None,\n) -> int:\n    log_fn(\"---\\n\")\n    try:\n        cmd_str = \" \\\\\\n+      \".join(shellquote(arg) for arg in cmd)\n    except TypeError:\n        # eg: one of the elements is None\n        raise RunCommandError(\"problem quoting cmd: %r\" % cmd)\n\n    if env:\n        assert isinstance(env, Env)\n        _print_env_diff(env, log_fn)\n\n        # Convert from our Env type to a regular dict.\n        # This is needed because python3 looks up b'PATH' and 'PATH'\n        # and emits an error if both are present.  In our Env type\n        # we'll return the same value for both requests, but we don't\n        # have duplicate potentially conflicting values which is the\n        # spirit of the check.\n        env_dict: dict[str, str] | None = dict(env.items())\n    else:\n        env_dict = None\n\n    if cwd:\n        log_fn(\"+ cd %s && \\\\\\n\" % shellquote(cwd))\n        # Our long path escape sequence may confuse cmd.exe, so if the cwd\n        # is short enough, strip that off.\n        if is_windows() and (len(cwd) < 250) and cwd.startswith(\"\\\\\\\\?\\\\\"):\n            cwd = cwd[4:]\n\n    log_fn(\"+ %s\\n\" % cmd_str)\n\n    isinteractive = os.isatty(sys.stdout.fileno())\n    if isinteractive:\n        stdout = None\n        sys.stdout.buffer.flush()\n    else:\n        stdout = subprocess.PIPE\n\n    try:\n        p = subprocess.Popen(\n            cmd,\n            env=env_dict,\n            cwd=cwd,\n            stdout=stdout,\n            stderr=subprocess.STDOUT,\n            preexec_fn=preexec_fn,\n        )\n    except (TypeError, ValueError, OSError) as exc:\n        log_fn(\"error running `%s`: %s\" % (cmd_str, exc))\n        raise RunCommandError(\n            \"%s while running `%s` with env=%r\\nos.environ=%r\"\n            % (str(exc), cmd_str, env_dict, os.environ)\n        )\n\n    if not isinteractive:\n        _pipe_output(p, log_fn)\n\n    p.wait()\n    if p.returncode != 0 and not allow_fail:\n        raise subprocess.CalledProcessError(p.returncode, cmd)\n\n    return p.returncode\n\n\nif hasattr(select, \"poll\"):\n\n    def _pipe_output(p: subprocess.Popen[bytes], log_fn: Callable[[str], None]) -> None:\n        \"\"\"Read output from p.stdout and call log_fn() with each chunk of data as it\n        becomes available.\"\"\"\n        # Perform non-blocking reads\n        import fcntl\n\n        assert p.stdout is not None\n        fcntl.fcntl(p.stdout.fileno(), fcntl.F_SETFL, os.O_NONBLOCK)\n        poll = select.poll()\n        poll.register(p.stdout.fileno(), select.POLLIN)\n\n        buffer_size = 4096\n        while True:\n            poll.poll()\n            data = p.stdout.read(buffer_size)\n            if not data:\n                break\n            # log_fn() accepts arguments as str (binary in Python 2, unicode in\n            # Python 3).  In Python 3 the subprocess output will be plain bytes,\n            # and need to be decoded.\n            if not isinstance(data, str):\n                data = data.decode(\"utf-8\", errors=\"surrogateescape\")\n            log_fn(data)\n\nelse:\n\n    def _pipe_output(p: subprocess.Popen[bytes], log_fn: Callable[[str], None]) -> None:\n        \"\"\"Read output from p.stdout and call log_fn() with each chunk of data as it\n        becomes available.\"\"\"\n        # Perform blocking reads.  Use a smaller buffer size to avoid blocking\n        # for very long when data is available.\n        assert p.stdout is not None\n        buffer_size = 64\n        while True:\n            # pyre-fixme[16]: Optional type has no attribute `read`.\n            data = p.stdout.read(buffer_size)\n            if not data:\n                break\n            # log_fn() accepts arguments as str (binary in Python 2, unicode in\n            # Python 3).  In Python 3 the subprocess output will be plain bytes,\n            # and need to be decoded.\n            if not isinstance(data, str):\n                data = data.decode(\"utf-8\", errors=\"surrogateescape\")\n            log_fn(data)\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/subcmd.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\nfrom __future__ import annotations\n\nimport argparse\nfrom collections.abc import Callable\n\n\nclass SubCmd:\n    NAME: str | None = None\n    HELP: str | None = None\n\n    def run(self, args: argparse.Namespace) -> int:\n        \"\"\"perform the command\"\"\"\n        return 0\n\n    def setup_parser(self, parser: argparse.ArgumentParser) -> None:\n        # Subclasses should override setup_parser() if they have any\n        # command line options or arguments.\n        pass\n\n\nCmdTable: list[type[SubCmd]] = []\n\n\ndef add_subcommands(\n    parser: argparse._SubParsersAction[argparse.ArgumentParser],\n    common_args: argparse.ArgumentParser,\n    cmd_table: list[type[SubCmd]] = CmdTable,\n) -> None:\n    \"\"\"Register parsers for the defined commands with the provided parser\"\"\"\n    for cls in cmd_table:\n        command = cls()\n        command_parser = parser.add_parser(\n            # pyre-fixme[6]: For 1st argument expected `str` but got `Optional[str]`.\n            command.NAME,\n            help=command.HELP,\n            parents=[common_args],\n        )\n        command.setup_parser(command_parser)\n        command_parser.set_defaults(func=command.run)\n\n\ndef cmd(\n    name: str,\n    help: str | None = None,\n    cmd_table: list[type[SubCmd]] = CmdTable,\n) -> Callable[[type[SubCmd]], type[SubCmd]]:\n    \"\"\"\n    @cmd() is a decorator that can be used to help define Subcmd instances\n\n    Example usage:\n\n        @subcmd('list', 'Show the result list')\n        class ListCmd(Subcmd):\n            def run(self, args):\n                # Perform the command actions here...\n                pass\n    \"\"\"\n\n    def wrapper(cls: type[SubCmd]) -> type[SubCmd]:\n        class SubclassedCmd(cls):\n            NAME = name\n            HELP = help\n\n        # pyre-fixme[6]: For 1st argument expected `Type[SubCmd]` but got\n        #  `Type[SubclassedCmd]`.\n        # pyre-fixme[16]: Callable `cmd` has no attribute `wrapper`.\n        cmd_table.append(SubclassedCmd)\n        # pyre-fixme[7]: Expected `Type[SubCmd]` but got `Type[SubclassedCmd]`.\n        return SubclassedCmd\n\n    return wrapper\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/test/expr_test.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport unittest\n\nfrom ..expr import parse_expr\n\n\nclass ExprTest(unittest.TestCase):\n    def test_equal(self) -> None:\n        valid_variables = {\"foo\", \"some_var\", \"another_var\"}\n        e = parse_expr(\"foo=bar\", valid_variables)\n        self.assertTrue(e.eval({\"foo\": \"bar\"}))\n        self.assertFalse(e.eval({\"foo\": \"not-bar\"}))\n        self.assertFalse(e.eval({\"not-foo\": \"bar\"}))\n\n    def test_not_equal(self) -> None:\n        valid_variables = {\"foo\"}\n        e = parse_expr(\"not(foo=bar)\", valid_variables)\n        self.assertFalse(e.eval({\"foo\": \"bar\"}))\n        self.assertTrue(e.eval({\"foo\": \"not-bar\"}))\n\n    def test_bad_not(self) -> None:\n        valid_variables = {\"foo\"}\n        with self.assertRaises(Exception):\n            parse_expr(\"foo=not(bar)\", valid_variables)\n\n    def test_bad_variable(self) -> None:\n        valid_variables = {\"bar\"}\n        with self.assertRaises(Exception):\n            parse_expr(\"foo=bar\", valid_variables)\n\n    def test_all(self) -> None:\n        valid_variables = {\"foo\", \"baz\"}\n        e = parse_expr(\"all(foo = bar, baz = qux)\", valid_variables)\n        self.assertTrue(e.eval({\"foo\": \"bar\", \"baz\": \"qux\"}))\n        self.assertFalse(e.eval({\"foo\": \"bar\", \"baz\": \"nope\"}))\n        self.assertFalse(e.eval({\"foo\": \"nope\", \"baz\": \"nope\"}))\n\n    def test_any(self) -> None:\n        valid_variables = {\"foo\", \"baz\"}\n        e = parse_expr(\"any(foo = bar, baz = qux)\", valid_variables)\n        self.assertTrue(e.eval({\"foo\": \"bar\", \"baz\": \"qux\"}))\n        self.assertTrue(e.eval({\"foo\": \"bar\", \"baz\": \"nope\"}))\n        self.assertFalse(e.eval({\"foo\": \"nope\", \"baz\": \"nope\"}))\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/test/fixtures/duplicate/foo",
    "content": "[manifest]\nname = foo\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/test/fixtures/duplicate/subdir/foo",
    "content": "[manifest]\nname = foo\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/test/manifest_test.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport sys\nimport unittest\n\nfrom ..load import load_all_manifests, patch_loader\nfrom ..manifest import ManifestParser\n\n\nclass ManifestTest(unittest.TestCase):\n    def test_missing_section(self) -> None:\n        with self.assertRaisesRegex(\n            Exception, \"manifest file test is missing required section manifest\"\n        ):\n            ManifestParser(\"test\", \"\")\n\n    def test_missing_name(self) -> None:\n        with self.assertRaisesRegex(\n            Exception,\n            \"manifest file test section 'manifest' is missing required field 'name'\",\n        ):\n            ManifestParser(\n                \"test\",\n                \"\"\"\n[manifest]\n\"\"\",\n            )\n\n    def test_minimal(self) -> None:\n        p = ManifestParser(\n            \"test\",\n            \"\"\"\n[manifest]\nname = test\n\"\"\",\n        )\n        self.assertEqual(p.name, \"test\")\n        self.assertEqual(p.fbsource_path, None)\n\n    def test_minimal_with_fbsource_path(self) -> None:\n        p = ManifestParser(\n            \"test\",\n            \"\"\"\n[manifest]\nname = test\nfbsource_path = fbcode/wat\n\"\"\",\n        )\n        self.assertEqual(p.name, \"test\")\n        self.assertEqual(p.fbsource_path, \"fbcode/wat\")\n\n    def test_unknown_field(self) -> None:\n        with self.assertRaisesRegex(\n            Exception,\n            (\n                \"manifest file test section 'manifest' contains \"\n                \"unknown field 'invalid.field'\"\n            ),\n        ):\n            ManifestParser(\n                \"test\",\n                \"\"\"\n[manifest]\nname = test\ninvalid.field = woot\n\"\"\",\n            )\n\n    def test_invalid_section_name(self) -> None:\n        with self.assertRaisesRegex(\n            Exception, \"manifest file test contains unknown section 'invalid.section'\"\n        ):\n            ManifestParser(\n                \"test\",\n                \"\"\"\n[manifest]\nname = test\n\n[invalid.section]\nfoo = bar\n\"\"\",\n            )\n\n    def test_value_in_dependencies_section(self) -> None:\n        with self.assertRaisesRegex(\n            Exception,\n            (\n                \"manifest file test section 'dependencies' has \"\n                \"'foo = bar' but this section doesn't allow \"\n                \"specifying values for its entries\"\n            ),\n        ):\n            ManifestParser(\n                \"test\",\n                \"\"\"\n[manifest]\nname = test\n\n[dependencies]\nfoo = bar\n\"\"\",\n            )\n\n    def test_invalid_conditional_section_name(self) -> None:\n        with self.assertRaisesRegex(\n            Exception,\n            (\n                \"manifest file test section 'dependencies.=' \"\n                \"has invalid conditional: expected \"\n                \"identifier found =\"\n            ),\n        ):\n            ManifestParser(\n                \"test\",\n                \"\"\"\n[manifest]\nname = test\n\n[dependencies.=]\n\"\"\",\n            )\n\n    def test_section_as_args(self) -> None:\n        p = ManifestParser(\n            \"test\",\n            \"\"\"\n[manifest]\nname = test\n\n[dependencies]\na\nb\nc\n\n[dependencies.test=on]\nfoo\n\"\"\",\n        )\n        self.assertEqual(p.get_section_as_args(\"dependencies\"), [\"a\", \"b\", \"c\"])\n        self.assertEqual(\n            p.get_section_as_args(\"dependencies\", {\"test\": \"off\"}), [\"a\", \"b\", \"c\"]\n        )\n        self.assertEqual(\n            p.get_section_as_args(\"dependencies\", {\"test\": \"on\"}),\n            [\"a\", \"b\", \"c\", \"foo\"],\n        )\n\n        p2 = ManifestParser(\n            \"test\",\n            \"\"\"\n[manifest]\nname = test\n\n[autoconf.args]\n--prefix=/foo\n--with-woot\n\"\"\",\n        )\n        self.assertEqual(\n            p2.get_section_as_args(\"autoconf.args\"), [\"--prefix=/foo\", \"--with-woot\"]\n        )\n\n    def test_section_as_dict(self) -> None:\n        p = ManifestParser(\n            \"test\",\n            \"\"\"\n[manifest]\nname = test\n\n[cmake.defines]\nfoo = bar\n\n[cmake.defines.test=on]\nfoo = baz\n\"\"\",\n        )\n        self.assertEqual(p.get_section_as_dict(\"cmake.defines\", {}), {\"foo\": \"bar\"})\n        self.assertEqual(\n            p.get_section_as_dict(\"cmake.defines\", {\"test\": \"on\"}), {\"foo\": \"baz\"}\n        )\n\n        p2 = ManifestParser(\n            \"test\",\n            \"\"\"\n[manifest]\nname = test\n\n[cmake.defines.test=on]\nfoo = baz\n\n[cmake.defines]\nfoo = bar\n\"\"\",\n        )\n        self.assertEqual(\n            p2.get_section_as_dict(\"cmake.defines\", {\"test\": \"on\"}),\n            {\"foo\": \"bar\"},\n            msg=\"sections cascade in the order they appear in the manifest\",\n        )\n\n    def test_parse_common_manifests(self) -> None:\n        patch_loader(__name__)\n        # pyre-fixme[6]: For 1st argument expected `BuildOptions` but got `None`.\n        manifests = load_all_manifests(None)\n        self.assertNotEqual(0, len(manifests), msg=\"parsed some number of manifests\")\n\n    def test_mismatch_name(self) -> None:\n        with self.assertRaisesRegex(\n            Exception,\n            \"filename of the manifest 'foo' does not match the manifest name 'bar'\",\n        ):\n            ManifestParser(\n                \"foo\",\n                \"\"\"\n[manifest]\nname = bar\n\"\"\",\n            )\n\n    def test_duplicate_manifest(self) -> None:\n        patch_loader(__name__, \"fixtures/duplicate\")\n\n        with self.assertRaisesRegex(Exception, \"found duplicate manifest 'foo'\"):\n            # pyre-fixme[6]: For 1st argument expected `BuildOptions` but got `None`.\n            load_all_manifests(None)\n\n    if sys.version_info < (3, 2):\n\n        def assertRaisesRegex(self, *args, **kwargs):\n            return self.assertRaisesRegex(*args, **kwargs)\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/test/platform_test.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport unittest\n\nfrom ..platform import HostType\n\n\nclass PlatformTest(unittest.TestCase):\n    def test_create(self) -> None:\n        p = HostType()\n        self.assertNotEqual(p.ostype, None, msg=\"probed and returned something\")\n\n        tuple_string = p.as_tuple_string()\n        round_trip = HostType.from_tuple_string(tuple_string)\n        self.assertEqual(round_trip, p)\n\n    def test_rendering_of_none(self) -> None:\n        p = HostType(ostype=\"foo\")\n        self.assertEqual(p.as_tuple_string(), \"foo-none-none\")\n\n    def test_is_methods(self) -> None:\n        p = HostType(ostype=\"windows\")\n        self.assertTrue(p.is_windows())\n        self.assertFalse(p.is_darwin())\n        self.assertFalse(p.is_linux())\n\n        p = HostType(ostype=\"darwin\")\n        self.assertFalse(p.is_windows())\n        self.assertTrue(p.is_darwin())\n        self.assertFalse(p.is_linux())\n\n        p = HostType(ostype=\"linux\")\n        self.assertFalse(p.is_windows())\n        self.assertFalse(p.is_darwin())\n        self.assertTrue(p.is_linux())\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/test/retry_test.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport unittest\nfrom unittest.mock import call, MagicMock, patch\n\nfrom ..buildopts import BuildOptions\nfrom ..errors import TransientFailure\nfrom ..fetcher import ArchiveFetcher\nfrom ..manifest import ManifestParser\n\n\nclass RetryTest(unittest.TestCase):\n    def _get_build_opts(self) -> BuildOptions:\n        mock_build_opts = MagicMock(spec=BuildOptions)\n        mock_build_opts.scratch_dir = \"/path/to/scratch_dir\"\n        return mock_build_opts\n\n    def _get_manifest(self) -> ManifestParser:\n        mock_manifest_parser = MagicMock(spec=ManifestParser)\n        mock_manifest_parser.name = \"mock_manifest_parser\"\n        return mock_manifest_parser\n\n    def _get_archive_fetcher(self) -> ArchiveFetcher:\n        return ArchiveFetcher(\n            build_options=self._get_build_opts(),\n            manifest=self._get_manifest(),\n            url=\"https://github.com/systemd/systemd/archive/refs/tags/v256.7.tar.gz\",\n            sha256=\"896d76ff65c88f5fd9e42f90d152b0579049158a163431dd77cdc57748b1d7b0\",\n        )\n\n    @patch(\"os.makedirs\")\n    @patch(\"os.environ.get\")\n    @patch(\"time.sleep\")\n    @patch(\"subprocess.run\")\n    def test_no_retries(\n        self, mock_run, mock_sleep, mock_os_environ_get, mock_makedirs\n    ) -> None:\n        def custom_makedirs(path, exist_ok=False):\n            return None\n\n        def custom_get(key, default=None):\n            if key == \"GETDEPS_USE_WGET\":\n                return \"1\"\n            elif key == \"GETDEPS_WGET_ARGS\":\n                return \"\"\n            else:\n                return None\n\n        mock_makedirs.side_effect = custom_makedirs\n        mock_os_environ_get.side_effect = custom_get\n        mock_sleep.side_effect = None\n        fetcher = self._get_archive_fetcher()\n        fetcher._verify_hash = MagicMock(return_value=None)\n        fetcher._download()\n        mock_sleep.assert_has_calls([], any_order=False)\n        mock_run.assert_called_once_with(\n            [\n                \"wget\",\n                \"-O\",\n                \"/path/to/scratch_dir/downloads/mock_manifest_parser-v256.7.tar.gz\",\n                \"https://github.com/systemd/systemd/archive/refs/tags/v256.7.tar.gz\",\n            ],\n            capture_output=True,\n        )\n\n    @patch(\"random.random\")\n    @patch(\"os.makedirs\")\n    @patch(\"os.environ.get\")\n    @patch(\"time.sleep\")\n    @patch(\"subprocess.run\")\n    def test_retries(\n        self, mock_run, mock_sleep, mock_os_environ_get, mock_makedirs, mock_random\n    ) -> None:\n        def custom_makedirs(path, exist_ok=False):\n            return None\n\n        def custom_get(key, default=None):\n            if key == \"GETDEPS_USE_WGET\":\n                return \"1\"\n            elif key == \"GETDEPS_WGET_ARGS\":\n                return \"\"\n            else:\n                return None\n\n        mock_random.return_value = 0\n\n        mock_run.side_effect = [\n            IOError(\"<urlopen error [Errno 104] Connection reset by peer>\"),\n            IOError(\"<urlopen error [Errno 104] Connection reset by peer>\"),\n            None,\n        ]\n        mock_makedirs.side_effect = custom_makedirs\n        mock_os_environ_get.side_effect = custom_get\n        mock_sleep.side_effect = None\n        fetcher = self._get_archive_fetcher()\n        fetcher._verify_hash = MagicMock(return_value=None)\n        fetcher._download()\n        mock_sleep.assert_has_calls([call(2), call(4)], any_order=False)\n        calls = [\n            call(\n                [\n                    \"wget\",\n                    \"-O\",\n                    \"/path/to/scratch_dir/downloads/mock_manifest_parser-v256.7.tar.gz\",\n                    \"https://github.com/systemd/systemd/archive/refs/tags/v256.7.tar.gz\",\n                ],\n                capture_output=True,\n            ),\n        ] * 3\n\n        mock_run.assert_has_calls(calls, any_order=False)\n\n    @patch(\"random.random\")\n    @patch(\"os.makedirs\")\n    @patch(\"os.environ.get\")\n    @patch(\"time.sleep\")\n    @patch(\"subprocess.run\")\n    def test_all_retries(\n        self, mock_run, mock_sleep, mock_os_environ_get, mock_makedirs, mock_random\n    ) -> None:\n        def custom_makedirs(path, exist_ok=False):\n            return None\n\n        def custom_get(key, default=None):\n            if key == \"GETDEPS_USE_WGET\":\n                return \"1\"\n            elif key == \"GETDEPS_WGET_ARGS\":\n                return \"\"\n            else:\n                return None\n\n        mock_random.return_value = 0\n\n        mock_run.side_effect = IOError(\n            \"<urlopen error [Errno 104] Connection reset by peer>\"\n        )\n        mock_makedirs.side_effect = custom_makedirs\n        mock_os_environ_get.side_effect = custom_get\n        mock_sleep.side_effect = None\n        fetcher = self._get_archive_fetcher()\n        fetcher._verify_hash = MagicMock(return_value=None)\n        with self.assertRaises(TransientFailure):\n            fetcher._download()\n        mock_sleep.assert_has_calls(\n            [call(2), call(4), call(8), call(10)], any_order=False\n        )\n        calls = [\n            call(\n                [\n                    \"wget\",\n                    \"-O\",\n                    \"/path/to/scratch_dir/downloads/mock_manifest_parser-v256.7.tar.gz\",\n                    \"https://github.com/systemd/systemd/archive/refs/tags/v256.7.tar.gz\",\n                ],\n                capture_output=True,\n            ),\n        ] * 5\n\n        mock_run.assert_has_calls(calls, any_order=False)\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/test/scratch_test.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport unittest\n\nfrom ..buildopts import find_existing_win32_subst_for_path\n\n\nclass Win32SubstTest(unittest.TestCase):\n    def test_no_existing_subst(self) -> None:\n        self.assertIsNone(\n            find_existing_win32_subst_for_path(\n                r\"C:\\users\\alice\\appdata\\local\\temp\\fbcode_builder_getdeps\",\n                subst_mapping={},\n            )\n        )\n        self.assertIsNone(\n            find_existing_win32_subst_for_path(\n                r\"C:\\users\\alice\\appdata\\local\\temp\\fbcode_builder_getdeps\",\n                subst_mapping={\"X:\\\\\": r\"C:\\users\\alice\\appdata\\local\\temp\\other\"},\n            )\n        )\n\n    def test_exact_match_returns_drive_path(self) -> None:\n        self.assertEqual(\n            find_existing_win32_subst_for_path(\n                r\"C:\\temp\\fbcode_builder_getdeps\",\n                subst_mapping={\"X:\\\\\": r\"C:\\temp\\fbcode_builder_getdeps\"},\n            ),\n            \"X:\\\\\",\n        )\n        self.assertEqual(\n            find_existing_win32_subst_for_path(\n                r\"C:/temp/fbcode_builder_getdeps\",\n                subst_mapping={\"X:\\\\\": r\"C:/temp/fbcode_builder_getdeps\"},\n            ),\n            \"X:\\\\\",\n        )\n\n    def test_multiple_exact_matches_returns_arbitrary_drive_path(self) -> None:\n        self.assertIn(\n            find_existing_win32_subst_for_path(\n                r\"C:\\temp\\fbcode_builder_getdeps\",\n                subst_mapping={\n                    \"X:\\\\\": r\"C:\\temp\\fbcode_builder_getdeps\",\n                    \"Y:\\\\\": r\"C:\\temp\\fbcode_builder_getdeps\",\n                    \"Z:\\\\\": r\"C:\\temp\\fbcode_builder_getdeps\",\n                },\n            ),\n            (\"X:\\\\\", \"Y:\\\\\", \"Z:\\\\\"),\n        )\n\n    def test_drive_letter_is_case_insensitive(self) -> None:\n        self.assertEqual(\n            find_existing_win32_subst_for_path(\n                r\"C:\\temp\\fbcode_builder_getdeps\",\n                subst_mapping={\"X:\\\\\": r\"c:\\temp\\fbcode_builder_getdeps\"},\n            ),\n            \"X:\\\\\",\n        )\n\n    def test_path_components_are_case_insensitive(self) -> None:\n        self.assertEqual(\n            find_existing_win32_subst_for_path(\n                r\"C:\\TEMP\\FBCODE_builder_getdeps\",\n                subst_mapping={\"X:\\\\\": r\"C:\\temp\\fbcode_builder_getdeps\"},\n            ),\n            \"X:\\\\\",\n        )\n        self.assertEqual(\n            find_existing_win32_subst_for_path(\n                r\"C:\\temp\\fbcode_builder_getdeps\",\n                subst_mapping={\"X:\\\\\": r\"C:\\TEMP\\FBCODE_builder_getdeps\"},\n            ),\n            \"X:\\\\\",\n        )\n"
  },
  {
    "path": "build/fbcode_builder/getdeps/test/strip_marker_test.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\n\nimport os\nimport tempfile\nimport unittest\n\nfrom ..fetcher import filter_strip_marker\nfrom ..manifest import ManifestParser\n\n\nclass ManifestStripMarkerTest(unittest.TestCase):\n    def test_default_strip_marker(self) -> None:\n        p = ManifestParser(\n            \"test\",\n            \"\"\"\n[manifest]\nname = test\n\"\"\",\n        )\n        self.assertEqual(p.shipit_strip_marker, \"@fb-only\")\n\n    def test_custom_strip_marker(self) -> None:\n        p = ManifestParser(\n            \"test\",\n            \"\"\"\n[manifest]\nname = test\nshipit_strip_marker = @oss-disable\n\"\"\",\n        )\n        self.assertEqual(p.shipit_strip_marker, \"@oss-disable\")\n\n\nclass FilterStripMarkerTest(unittest.TestCase):\n    def _write_temp(self, content: str) -> str:\n        fd, path = tempfile.mkstemp(suffix=\".txt\")\n        os.close(fd)\n        with open(path, \"w\") as f:\n            f.write(content)\n        return path\n\n    def _read(self, path: str) -> str:\n        with open(path, \"r\") as f:\n            return f.read()\n\n    def test_single_line_removal(self) -> None:\n        path = self._write_temp(\"keep this\\nremove this @fb-only\\nkeep this too\\n\")\n        try:\n            filter_strip_marker(path, \"@fb-only\")\n            self.assertEqual(self._read(path), \"keep this\\nkeep this too\\n\")\n        finally:\n            os.unlink(path)\n\n    def test_block_removal(self) -> None:\n        content = (\n            \"before\\n\"\n            \"// @fb-only-start\\n\"\n            \"secret stuff\\n\"\n            \"more secret\\n\"\n            \"// @fb-only-end\\n\"\n            \"after\\n\"\n        )\n        path = self._write_temp(content)\n        try:\n            filter_strip_marker(path, \"@fb-only\")\n            self.assertEqual(self._read(path), \"before\\nafter\\n\")\n        finally:\n            os.unlink(path)\n\n    def test_no_marker_present_no_change(self) -> None:\n        original = \"nothing special here\\njust plain code\\n\"\n        path = self._write_temp(original)\n        try:\n            filter_strip_marker(path, \"@fb-only\")\n            self.assertEqual(self._read(path), original)\n        finally:\n            os.unlink(path)\n\n    def test_custom_marker_single_line(self) -> None:\n        content = \"keep\\nremove @oss-disable\\nkeep too\\n\"\n        path = self._write_temp(content)\n        try:\n            filter_strip_marker(path, \"@oss-disable\")\n            self.assertEqual(self._read(path), \"keep\\nkeep too\\n\")\n        finally:\n            os.unlink(path)\n\n    def test_custom_marker_block(self) -> None:\n        content = (\n            \"before\\n\"\n            \"# @oss-disable-start\\n\"\n            \"internal only\\n\"\n            \"# @oss-disable-end\\n\"\n            \"after\\n\"\n        )\n        path = self._write_temp(content)\n        try:\n            filter_strip_marker(path, \"@oss-disable\")\n            self.assertEqual(self._read(path), \"before\\nafter\\n\")\n        finally:\n            os.unlink(path)\n\n    def test_custom_marker_ignores_default(self) -> None:\n        \"\"\"When using a custom marker, @fb-only lines should be kept.\"\"\"\n        content = \"keep @fb-only\\nremove @oss-disable\\nplain\\n\"\n        path = self._write_temp(content)\n        try:\n            filter_strip_marker(path, \"@oss-disable\")\n            self.assertEqual(self._read(path), \"keep @fb-only\\nplain\\n\")\n        finally:\n            os.unlink(path)\n\n    def test_mixed_single_and_block(self) -> None:\n        content = (\n            \"line1\\n\"\n            \"line2 @fb-only\\n\"\n            \"line3\\n\"\n            \"// @fb-only-start\\n\"\n            \"block content\\n\"\n            \"// @fb-only-end\\n\"\n            \"line4\\n\"\n        )\n        path = self._write_temp(content)\n        try:\n            filter_strip_marker(path, \"@fb-only\")\n            self.assertEqual(self._read(path), \"line1\\nline3\\nline4\\n\")\n        finally:\n            os.unlink(path)\n\n    def test_marker_with_regex_metacharacters(self) -> None:\n        \"\"\"Markers containing regex metacharacters should be escaped properly.\"\"\"\n        content = \"keep\\nremove @fb.only\\nkeep too\\n\"\n        path = self._write_temp(content)\n        try:\n            # With proper escaping, the dot is literal, not a wildcard\n            filter_strip_marker(path, \"@fb.only\")\n            self.assertEqual(self._read(path), \"keep\\nkeep too\\n\")\n        finally:\n            os.unlink(path)\n\n    def test_binary_file_skipped(self) -> None:\n        \"\"\"Binary files that can't be decoded as UTF-8 should be skipped.\"\"\"\n        fd, path = tempfile.mkstemp(suffix=\".bin\")\n        os.close(fd)\n        binary_content = b\"\\x80\\x81\\x82\\xff\\xfe\"\n        with open(path, \"wb\") as f:\n            f.write(binary_content)\n        try:\n            filter_strip_marker(path, \"@fb-only\")\n            with open(path, \"rb\") as f:\n                self.assertEqual(f.read(), binary_content)\n        finally:\n            os.unlink(path)\n"
  },
  {
    "path": "build/fbcode_builder/getdeps.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport argparse\nimport json\nimport os\nimport shutil\nimport subprocess\nimport sys\nimport tarfile\nimport tempfile\n\n# We don't import cache.create_cache directly as the facebook\n# specific import below may monkey patch it, and we want to\n# observe the patched version of this function!\nimport getdeps.cache as cache_module\nfrom getdeps.buildopts import setup_build_options\nfrom getdeps.dyndeps import create_dyn_dep_munger\nfrom getdeps.errors import TransientFailure\nfrom getdeps.fetcher import (\n    file_name_is_cmake_file,\n    is_public_commit,\n    list_files_under_dir_newer_than_timestamp,\n    SystemPackageFetcher,\n)\nfrom getdeps.load import ManifestLoader\nfrom getdeps.manifest import ManifestParser\nfrom getdeps.platform import HostType\nfrom getdeps.runcmd import check_cmd\nfrom getdeps.subcmd import add_subcommands, cmd, SubCmd\n\ntry:\n    import getdeps.facebook  # noqa: F401\nexcept ImportError:\n    # we don't ship the facebook specific subdir,\n    # so allow that to fail silently\n    pass\n\n\nsys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), \"getdeps\"))\n\n\nclass UsageError(Exception):\n    pass\n\n\n# Shared argument definition for --build-type used by multiple commands\nBUILD_TYPE_ARG = {\n    \"help\": \"Set the build type explicitly: Debug (unoptimized, debug symbols), RelWithDebInfo (optimized with debug symbols, default), MinSizeRel (size-optimized, no debug), or Release (optimized, no debug).\",\n    \"choices\": [\"Debug\", \"Release\", \"RelWithDebInfo\", \"MinSizeRel\"],\n    \"action\": \"store\",\n    \"default\": \"RelWithDebInfo\",\n}\n\n\n@cmd(\"validate-manifest\", \"parse a manifest and validate that it is correct\")\nclass ValidateManifest(SubCmd):\n    def run(self, args):\n        try:\n            ManifestParser(file_name=args.file_name)\n            print(\"OK\", file=sys.stderr)\n            return 0\n        except Exception as exc:\n            print(\"ERROR: %s\" % str(exc), file=sys.stderr)\n            return 1\n\n    def setup_parser(self, parser):\n        parser.add_argument(\"file_name\", help=\"path to the manifest file\")\n\n\n@cmd(\"show-host-type\", \"outputs the host type tuple for the host machine\")\nclass ShowHostType(SubCmd):\n    def run(self, args):\n        host = HostType()\n        print(\"%s\" % host.as_tuple_string())\n        return 0\n\n\nclass ProjectCmdBase(SubCmd):\n    def run(self, args):\n        opts = setup_build_options(args)\n\n        if args.current_project is not None:\n            opts.repo_project = args.current_project\n        if args.project is None:\n            if opts.repo_project is None:\n                raise UsageError(\n                    \"no project name specified, and no .projectid file found\"\n                )\n            if opts.repo_project == \"fbsource\":\n                # The fbsource repository is a little special.  There is no project\n                # manifest file for it.  A specific project must always be explicitly\n                # specified when building from fbsource.\n                raise UsageError(\n                    \"no project name specified (required when building in fbsource)\"\n                )\n            args.project = opts.repo_project\n\n        ctx_gen = opts.get_context_generator()\n        if args.test_dependencies:\n            ctx_gen.set_value_for_all_projects(\"test\", \"on\")\n        if args.enable_tests:\n            ctx_gen.set_value_for_project(args.project, \"test\", \"on\")\n        else:\n            ctx_gen.set_value_for_project(args.project, \"test\", \"off\")\n\n        if opts.shared_libs:\n            ctx_gen.set_value_for_all_projects(\"shared_libs\", \"on\")\n\n        loader = ManifestLoader(opts, ctx_gen)\n        self.process_project_dir_arguments(args, loader)\n\n        manifest = loader.load_manifest(args.project)\n\n        return self.run_project_cmd(args, loader, manifest)\n\n    def process_project_dir_arguments(self, args, loader):\n        def parse_project_arg(arg, arg_type):\n            parts = arg.split(\":\")\n            if len(parts) == 2:\n                project, path = parts\n            elif len(parts) == 1:\n                project = args.project\n                path = parts[0]\n            # On Windows path contains colon, e.g. C:\\open\n            elif os.name == \"nt\" and len(parts) == 3:\n                project = parts[0]\n                path = parts[1] + \":\" + parts[2]\n            else:\n                raise UsageError(\n                    \"invalid %s argument; too many ':' characters: %s\" % (arg_type, arg)\n                )\n\n            return project, os.path.abspath(path)\n\n        # If we are currently running from a project repository,\n        # use the current repository for the project sources.\n        build_opts = loader.build_opts\n        if build_opts.repo_project is not None and build_opts.repo_root is not None:\n            loader.set_project_src_dir(build_opts.repo_project, build_opts.repo_root)\n\n        for arg in args.src_dir:\n            project, path = parse_project_arg(arg, \"--src-dir\")\n            loader.set_project_src_dir(project, path)\n\n        for arg in args.build_dir:\n            project, path = parse_project_arg(arg, \"--build-dir\")\n            loader.set_project_build_dir(project, path)\n\n        for arg in args.install_dir:\n            project, path = parse_project_arg(arg, \"--install-dir\")\n            loader.set_project_install_dir(project, path)\n\n        for arg in args.project_install_prefix:\n            project, path = parse_project_arg(arg, \"--install-prefix\")\n            loader.set_project_install_prefix(project, path)\n\n    def setup_parser(self, parser):\n        parser.add_argument(\n            \"project\",\n            nargs=\"?\",\n            help=(\n                \"name of the project or path to a manifest \"\n                \"file describing the project\"\n            ),\n        )\n        parser.add_argument(\n            \"--no-tests\",\n            action=\"store_false\",\n            dest=\"enable_tests\",\n            default=True,\n            help=\"Disable building tests for this project.\",\n        )\n        parser.add_argument(\n            \"--test-dependencies\",\n            action=\"store_true\",\n            help=\"Enable building tests for dependencies as well.\",\n        )\n        parser.add_argument(\n            \"--current-project\",\n            help=\"Specify the name of the fbcode_builder manifest file for the \"\n            \"current repository.  If not specified, the code will attempt to find \"\n            \"this in a .projectid file in the repository root.\",\n        )\n        parser.add_argument(\n            \"--src-dir\",\n            default=[],\n            action=\"append\",\n            help=\"Specify a local directory to use for the project source, \"\n            \"rather than fetching it.\",\n        )\n        parser.add_argument(\n            \"--build-dir\",\n            default=[],\n            action=\"append\",\n            help=\"Explicitly specify the build directory to use for the \"\n            \"project, instead of the default location in the scratch path. \"\n            \"This only affects the project specified, and not its dependencies.\",\n        )\n        parser.add_argument(\n            \"--install-dir\",\n            default=[],\n            action=\"append\",\n            help=\"Explicitly specify the install directory to use for the \"\n            \"project, instead of the default location in the scratch path. \"\n            \"This only affects the project specified, and not its dependencies.\",\n        )\n        parser.add_argument(\n            \"--project-install-prefix\",\n            default=[],\n            action=\"append\",\n            help=\"Specify the final deployment installation path for a project\",\n        )\n\n        self.setup_project_cmd_parser(parser)\n\n    def setup_project_cmd_parser(self, parser):\n        pass\n\n    def create_builder(self, loader, manifest):\n        fetcher = loader.create_fetcher(manifest)\n        src_dir = fetcher.get_src_dir()\n        ctx = loader.ctx_gen.get_context(manifest.name)\n        build_dir = loader.get_project_build_dir(manifest)\n        inst_dir = loader.get_project_install_dir(manifest)\n        return manifest.create_builder(\n            loader.build_opts,\n            src_dir,\n            build_dir,\n            inst_dir,\n            ctx,\n            loader,\n            loader.dependencies_of(manifest),\n        )\n\n    def check_built(self, loader, manifest):\n        built_marker = os.path.join(\n            loader.get_project_install_dir(manifest), \".built-by-getdeps\"\n        )\n        return os.path.exists(built_marker)\n\n\nclass CachedProject:\n    \"\"\"A helper that allows calling the cache logic for a project\n    from both the build and the fetch code\"\"\"\n\n    def __init__(self, cache, loader, m):\n        self.m = m\n        self.inst_dir = loader.get_project_install_dir(m)\n        self.project_hash = loader.get_project_hash(m)\n        self.ctx = loader.ctx_gen.get_context(m.name)\n        self.loader = loader\n        self.cache = cache\n\n        self.cache_key = \"-\".join(\n            (\n                m.name,\n                self.ctx.get(\"os\"),\n                self.ctx.get(\"distro\") or \"none\",\n                self.ctx.get(\"distro_vers\") or \"none\",\n                self.project_hash,\n            )\n        )\n        self.cache_file_name = self.cache_key + \"-buildcache.tgz\"\n\n    def is_cacheable(self):\n        \"\"\"We only cache third party projects\"\"\"\n        return self.cache and self.m.shipit_project is None\n\n    def was_cached(self):\n        cached_marker = os.path.join(self.inst_dir, \".getdeps-cached-build\")\n        return os.path.exists(cached_marker)\n\n    def download(self):\n        if self.is_cacheable() and not os.path.exists(self.inst_dir):\n            print(\"check cache for %s\" % self.cache_file_name)\n            dl_dir = os.path.join(self.loader.build_opts.scratch_dir, \"downloads\")\n            if not os.path.exists(dl_dir):\n                os.makedirs(dl_dir)\n            try:\n                target_file_name = os.path.join(dl_dir, self.cache_file_name)\n                if self.cache.download_to_file(self.cache_file_name, target_file_name):\n                    tf = tarfile.open(target_file_name, \"r\")\n                    print(\n                        \"Extracting %s -> %s...\" % (self.cache_file_name, self.inst_dir)\n                    )\n                    tf.extractall(self.inst_dir)\n\n                    cached_marker = os.path.join(self.inst_dir, \".getdeps-cached-build\")\n                    with open(cached_marker, \"w\") as f:\n                        f.write(\"\\n\")\n\n                    return True\n            except Exception as exc:\n                print(\"%s\" % str(exc))\n\n        return False\n\n    def upload(self):\n        if self.is_cacheable():\n            # We can prepare an archive and stick it in LFS\n            tempdir = tempfile.mkdtemp()\n            tarfilename = os.path.join(tempdir, self.cache_file_name)\n            print(\"Archiving for cache: %s...\" % tarfilename)\n            tf = tarfile.open(tarfilename, \"w:gz\")\n            tf.add(self.inst_dir, arcname=\".\")\n            tf.close()\n            try:\n                self.cache.upload_from_file(self.cache_file_name, tarfilename)\n            except Exception as exc:\n                print(\n                    \"Failed to upload to cache (%s), continue anyway\" % str(exc),\n                    file=sys.stderr,\n                )\n            shutil.rmtree(tempdir)\n\n\n@cmd(\"fetch\", \"fetch the code for a given project\")\nclass FetchCmd(ProjectCmdBase):\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--recursive\",\n            help=\"fetch the transitive deps also\",\n            action=\"store_true\",\n            default=False,\n        )\n        parser.add_argument(\n            \"--host-type\",\n            help=(\n                \"When recursively fetching, fetch deps for \"\n                \"this host type rather than the current system\"\n            ),\n        )\n\n    def run_project_cmd(self, args, loader, manifest):\n        if args.recursive:\n            projects = loader.manifests_in_dependency_order()\n        else:\n            projects = [manifest]\n\n        cache = cache_module.create_cache()\n        for m in projects:\n            fetcher = loader.create_fetcher(m)\n            if isinstance(fetcher, SystemPackageFetcher):\n                # We are guaranteed that if the fetcher is set to\n                # SystemPackageFetcher then this item is completely\n                # satisfied by the appropriate system packages\n                continue\n            cached_project = CachedProject(cache, loader, m)\n            if cached_project.download():\n                continue\n\n            inst_dir = loader.get_project_install_dir(m)\n            built_marker = os.path.join(inst_dir, \".built-by-getdeps\")\n            if os.path.exists(built_marker):\n                with open(built_marker, \"r\") as f:\n                    built_hash = f.read().strip()\n\n                project_hash = loader.get_project_hash(m)\n                if built_hash == project_hash:\n                    continue\n\n            # We need to fetch the sources\n            fetcher.update()\n\n\n@cmd(\"install-system-deps\", \"Install system packages to satisfy the deps for a project\")\nclass InstallSysDepsCmd(ProjectCmdBase):\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--recursive\",\n            help=\"install the transitive deps also\",\n            action=\"store_true\",\n            default=False,\n        )\n        parser.add_argument(\n            \"--dry-run\",\n            action=\"store_true\",\n            default=False,\n            help=\"Don't install, just print the commands specs we would run\",\n        )\n        parser.add_argument(\n            \"--os-type\",\n            help=\"Filter to just this OS type to run\",\n            choices=[\"linux\", \"darwin\", \"windows\", \"pacman-package\"],\n            action=\"store\",\n            dest=\"ostype\",\n            default=None,\n        )\n        parser.add_argument(\n            \"--distro\",\n            help=\"Filter to just this distro to run\",\n            choices=[\"ubuntu\", \"centos_stream\"],\n            action=\"store\",\n            dest=\"distro\",\n            default=None,\n        )\n        parser.add_argument(\n            \"--distro-version\",\n            help=\"Filter to just this distro version\",\n            action=\"store\",\n            dest=\"distrovers\",\n            default=None,\n        )\n\n    def run_project_cmd(self, args, loader, manifest):\n        if args.recursive:\n            projects = loader.manifests_in_dependency_order()\n        else:\n            projects = [manifest]\n\n        rebuild_ctx_gen = False\n        if args.ostype:\n            loader.build_opts.host_type.ostype = args.ostype\n            loader.build_opts.host_type.distro = None\n            loader.build_opts.host_type.distrovers = None\n            rebuild_ctx_gen = True\n\n        if args.distro:\n            loader.build_opts.host_type.distro = args.distro\n            loader.build_opts.host_type.distrovers = None\n            rebuild_ctx_gen = True\n\n        if args.distrovers:\n            loader.build_opts.host_type.distrovers = args.distrovers\n            rebuild_ctx_gen = True\n\n        if rebuild_ctx_gen:\n            loader.ctx_gen = loader.build_opts.get_context_generator()\n\n        manager = loader.build_opts.host_type.get_package_manager()\n\n        all_packages = {}\n        for m in projects:\n            ctx = loader.ctx_gen.get_context(m.name)\n            packages = m.get_required_system_packages(ctx)\n            for k, v in packages.items():\n                merged = all_packages.get(k, [])\n                merged += v\n                all_packages[k] = merged\n\n        cmd_argss = []\n        if manager == \"rpm\":\n            packages = sorted(set(all_packages[\"rpm\"]))\n            if packages:\n                cmd_argss.append(\n                    [\"sudo\", \"dnf\", \"install\", \"-y\", \"--skip-broken\"] + packages\n                )\n        elif manager == \"deb\":\n            packages = sorted(set(all_packages[\"deb\"]))\n            if packages:\n                cmd_argss.append(\n                    [\n                        \"sudo\",\n                        \"--preserve-env=http_proxy\",\n                        \"apt-get\",\n                        \"install\",\n                        \"-y\",\n                    ]\n                    + packages\n                )\n                cmd_argss.append([\"pip\", \"install\", \"pex\"])\n        elif manager == \"homebrew\":\n            packages = sorted(set(all_packages[\"homebrew\"]))\n            if packages:\n                cmd_argss.append([\"brew\", \"install\"] + packages)\n        elif manager == \"pacman-package\":\n            packages = sorted(list(set(all_packages[\"pacman-package\"])))\n            if packages:\n                cmd_argss.append([\"pacman\", \"-S\"] + packages)\n        else:\n            host_tuple = loader.build_opts.host_type.as_tuple_string()\n            print(\n                f\"I don't know how to install any packages on this system {host_tuple}\"\n            )\n            return\n\n        for cmd_args in cmd_argss:\n            if args.dry_run:\n                print(\" \".join(cmd_args))\n            else:\n                check_cmd(cmd_args)\n        else:\n            print(\"no packages to install\")\n\n\n@cmd(\"list-deps\", \"lists the transitive deps for a given project\")\nclass ListDepsCmd(ProjectCmdBase):\n    def run_project_cmd(self, args, loader, manifest):\n        for m in loader.manifests_in_dependency_order():\n            print(m.name)\n        return 0\n\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--host-type\",\n            help=(\n                \"Produce the list for the specified host type, \"\n                \"rather than that of the current system\"\n            ),\n        )\n\n\ndef clean_dirs(opts):\n    for d in [\"build\", \"installed\", \"extracted\", \"shipit\"]:\n        d = os.path.join(opts.scratch_dir, d)\n        print(\"Cleaning %s...\" % d)\n        if os.path.exists(d):\n            shutil.rmtree(d)\n\n\n@cmd(\"clean\", \"clean up the scratch dir\")\nclass CleanCmd(SubCmd):\n    def run(self, args):\n        opts = setup_build_options(args)\n        clean_dirs(opts)\n\n\n@cmd(\"show-scratch-dir\", \"show the scratch dir\")\nclass ShowScratchDirCmd(SubCmd):\n    def run(self, args):\n        opts = setup_build_options(args)\n        print(opts.scratch_dir)\n\n\n@cmd(\"show-build-dir\", \"print the build dir for a given project\")\nclass ShowBuildDirCmd(ProjectCmdBase):\n    def run_project_cmd(self, args, loader, manifest):\n        if args.recursive:\n            manifests = loader.manifests_in_dependency_order()\n        else:\n            manifests = [manifest]\n\n        for m in manifests:\n            inst_dir = loader.get_project_build_dir(m)\n            print(inst_dir)\n\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--recursive\",\n            help=\"print the transitive deps also\",\n            action=\"store_true\",\n            default=False,\n        )\n\n\n@cmd(\"show-inst-dir\", \"print the installation dir for a given project\")\nclass ShowInstDirCmd(ProjectCmdBase):\n    def run_project_cmd(self, args, loader, manifest):\n        if args.recursive:\n            manifests = loader.manifests_in_dependency_order()\n        else:\n            manifests = [manifest]\n\n        for m in manifests:\n            fetcher = loader.create_fetcher(m)\n            if isinstance(fetcher, SystemPackageFetcher):\n                # We are guaranteed that if the fetcher is set to\n                # SystemPackageFetcher then this item is completely\n                # satisfied by the appropriate system packages\n                continue\n            inst_dir = loader.get_project_install_dir_respecting_install_prefix(m)\n            print(inst_dir)\n\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--recursive\",\n            help=\"print the transitive deps also\",\n            action=\"store_true\",\n            default=False,\n        )\n\n\n@cmd(\"query-paths\", \"print the paths for tooling to use\")\nclass QueryPathsCmd(ProjectCmdBase):\n    def run_project_cmd(self, args, loader, manifest):\n        if args.recursive:\n            manifests = loader.manifests_in_dependency_order()\n        else:\n            manifests = [manifest]\n\n        cache = cache_module.create_cache()\n        for m in manifests:\n            fetcher = loader.create_fetcher(m)\n            if isinstance(fetcher, SystemPackageFetcher):\n                # We are guaranteed that if the fetcher is set to\n                # SystemPackageFetcher then this item is completely\n                # satisfied by the appropriate system packages\n                continue\n            src_dir = fetcher.get_src_dir()\n            print(f\"{m.name}_SOURCE={src_dir}\")\n            inst_dir = loader.get_project_install_dir_respecting_install_prefix(m)\n            print(f\"{m.name}_INSTALL={inst_dir}\")\n            cached_project = CachedProject(cache, loader, m)\n            print(f\"{m.name}_CACHE_KEY={cached_project.cache_key}\")\n\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--recursive\",\n            help=\"print the transitive deps also\",\n            action=\"store_true\",\n            default=False,\n        )\n\n\n@cmd(\"show-source-dir\", \"print the source dir for a given project\")\nclass ShowSourceDirCmd(ProjectCmdBase):\n    def run_project_cmd(self, args, loader, manifest):\n        if args.recursive:\n            manifests = loader.manifests_in_dependency_order()\n        else:\n            manifests = [manifest]\n\n        for m in manifests:\n            fetcher = loader.create_fetcher(m)\n            print(fetcher.get_src_dir())\n\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--recursive\",\n            help=\"print the transitive deps also\",\n            action=\"store_true\",\n            default=False,\n        )\n\n\n@cmd(\"build\", \"build a given project\")\nclass BuildCmd(ProjectCmdBase):\n    def run_project_cmd(self, args, loader, manifest):\n        if args.clean:\n            clean_dirs(loader.build_opts)\n\n        print(\"Building on %s\" % loader.ctx_gen.get_context(args.project))\n        projects = loader.manifests_in_dependency_order()\n\n        cache = cache_module.create_cache() if args.use_build_cache else None\n\n        dep_manifests = []\n\n        for m in projects:\n            dep_manifests.append(m)\n\n            fetcher = loader.create_fetcher(m)\n\n            if args.build_skip_lfs_download and hasattr(fetcher, \"skip_lfs_download\"):\n                print(\"skipping lfs download for %s\" % m.name)\n                fetcher.skip_lfs_download()\n\n            if isinstance(fetcher, SystemPackageFetcher):\n                # We are guaranteed that if the fetcher is set to\n                # SystemPackageFetcher then this item is completely\n                # satisfied by the appropriate system packages\n                continue\n\n            if args.clean:\n                fetcher.clean()\n\n            build_dir = loader.get_project_build_dir(m)\n            inst_dir = loader.get_project_install_dir(m)\n\n            if (\n                m == manifest\n                and not args.only_deps\n                or m != manifest\n                and not args.no_deps\n            ):\n                print(\"Assessing %s...\" % m.name)\n                project_hash = loader.get_project_hash(m)\n                ctx = loader.ctx_gen.get_context(m.name)\n                built_marker = os.path.join(inst_dir, \".built-by-getdeps\")\n\n                cached_project = CachedProject(cache, loader, m)\n\n                reconfigure, sources_changed = self.compute_source_change_status(\n                    cached_project, fetcher, m, built_marker, project_hash\n                )\n\n                if os.path.exists(built_marker) and not cached_project.was_cached():\n                    # We've previously built this. We may need to reconfigure if\n                    # our deps have changed, so let's check them.\n                    dep_reconfigure, dep_build = self.compute_dep_change_status(\n                        m, built_marker, loader\n                    )\n                    if dep_reconfigure:\n                        reconfigure = True\n                    if dep_build:\n                        sources_changed = True\n\n                extra_cmake_defines = (\n                    json.loads(args.extra_cmake_defines)\n                    if args.extra_cmake_defines\n                    else {}\n                )\n\n                extra_b2_args = args.extra_b2_args or []\n                cmake_targets = args.cmake_target or [\"install\"]\n\n                if sources_changed or reconfigure or not os.path.exists(built_marker):\n                    if os.path.exists(built_marker):\n                        os.unlink(built_marker)\n                    src_dir = fetcher.get_src_dir()\n                    # Prepare builders write out config before the main builder runs\n                    prepare_builders = m.create_prepare_builders(\n                        loader.build_opts,\n                        ctx,\n                        src_dir,\n                        build_dir,\n                        inst_dir,\n                        loader,\n                        dep_manifests,\n                    )\n                    for preparer in prepare_builders:\n                        preparer.prepare(reconfigure=reconfigure)\n\n                    builder = m.create_builder(\n                        loader.build_opts,\n                        src_dir,\n                        build_dir,\n                        inst_dir,\n                        ctx,\n                        loader,\n                        dep_manifests,\n                        final_install_prefix=loader.get_project_install_prefix(m),\n                        extra_cmake_defines=extra_cmake_defines,\n                        cmake_targets=(cmake_targets if m == manifest else [\"install\"]),\n                        extra_b2_args=extra_b2_args,\n                    )\n                    builder.build(reconfigure=reconfigure)\n\n                    # If we are building the project (not dependency) and a specific\n                    # cmake_target (not 'install') has been requested, then we don't\n                    # set the built_marker. This allows subsequent runs of getdeps.py\n                    # for the project to run with different cmake_targets to trigger\n                    # cmake\n                    has_built_marker = False\n                    if not (m == manifest and \"install\" not in cmake_targets):\n                        os.makedirs(os.path.dirname(built_marker), exist_ok=True)\n                        with open(built_marker, \"w\") as f:\n                            f.write(project_hash)\n                            has_built_marker = True\n\n                    # Only populate the cache from continuous build runs, and\n                    # only if we have a built_marker.\n                    if not args.skip_upload and has_built_marker:\n                        if args.schedule_type == \"continuous\":\n                            cached_project.upload()\n                        elif args.schedule_type == \"base_retry\":\n                            # Check if on public commit before uploading\n                            if is_public_commit(loader.build_opts):\n                                cached_project.upload()\n                elif args.verbose:\n                    print(\"found good %s\" % built_marker)\n\n    def compute_dep_change_status(self, m, built_marker, loader):\n        reconfigure = False\n        sources_changed = False\n        st = os.lstat(built_marker)\n\n        ctx = loader.ctx_gen.get_context(m.name)\n        dep_list = m.get_dependencies(ctx)\n        for dep in dep_list:\n            if reconfigure and sources_changed:\n                break\n\n            dep_manifest = loader.load_manifest(dep)\n            dep_root = loader.get_project_install_dir(dep_manifest)\n            for dep_file in list_files_under_dir_newer_than_timestamp(\n                dep_root, st.st_mtime\n            ):\n                if os.path.basename(dep_file) == \".built-by-getdeps\":\n                    continue\n                if file_name_is_cmake_file(dep_file):\n                    if not reconfigure:\n                        reconfigure = True\n                        print(\n                            f\"Will reconfigure cmake because {dep_file} is newer than {built_marker}\"\n                        )\n                else:\n                    if not sources_changed:\n                        sources_changed = True\n                        print(\n                            f\"Will run build because {dep_file} is newer than {built_marker}\"\n                        )\n\n                if reconfigure and sources_changed:\n                    break\n\n        return reconfigure, sources_changed\n\n    def compute_source_change_status(\n        self, cached_project, fetcher, m, built_marker, project_hash\n    ):\n        reconfigure = False\n        sources_changed = False\n        if cached_project.download():\n            if not os.path.exists(built_marker):\n                fetcher.update()\n        else:\n            check_fetcher = True\n            if os.path.exists(built_marker):\n                check_fetcher = False\n                with open(built_marker, \"r\") as f:\n                    built_hash = f.read().strip()\n                if built_hash == project_hash:\n                    if cached_project.is_cacheable():\n                        # We can blindly trust the build status\n                        reconfigure = False\n                        sources_changed = False\n                    else:\n                        # Otherwise, we may have changed the source, so let's\n                        # check in with the fetcher layer\n                        check_fetcher = True\n                else:\n                    # Some kind of inconsistency with a prior build,\n                    # let's run it again to be sure\n                    os.unlink(built_marker)\n                    reconfigure = True\n                    sources_changed = True\n                    # While we don't need to consult the fetcher for the\n                    # status in this case, we may still need to have eg: shipit\n                    # run in order to have a correct source tree.\n                    fetcher.update()\n\n            if check_fetcher:\n                change_status = fetcher.update()\n                reconfigure = change_status.build_changed()\n                sources_changed = change_status.sources_changed()\n\n        return reconfigure, sources_changed\n\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--clean\",\n            action=\"store_true\",\n            default=False,\n            help=(\n                \"Clean up the build and installation area prior to building, \"\n                \"causing the projects to be built from scratch\"\n            ),\n        )\n        parser.add_argument(\n            \"--no-deps\",\n            action=\"store_true\",\n            default=False,\n            help=(\n                \"Only build the named project, not its deps. \"\n                \"This is most useful after you've built all of the deps, \"\n                \"and helps to avoid waiting for relatively \"\n                \"slow up-to-date-ness checks\"\n            ),\n        )\n        parser.add_argument(\n            \"--only-deps\",\n            action=\"store_true\",\n            default=False,\n            help=(\n                \"Only build the named project's deps. \"\n                \"This is most useful when you want to separate out building \"\n                \"of all of the deps and your project\"\n            ),\n        )\n        parser.add_argument(\n            \"--no-build-cache\",\n            action=\"store_false\",\n            default=True,\n            dest=\"use_build_cache\",\n            help=\"Do not attempt to use the build cache.\",\n        )\n        parser.add_argument(\n            \"--cmake-target\",\n            help=(\"Repeatable argument that specifies targets for cmake build.\"),\n            default=[],\n            action=\"append\",\n        )\n        parser.add_argument(\n            \"--extra-b2-args\",\n            help=(\n                \"Repeatable argument that contains extra arguments to pass \"\n                \"to b2, which compiles boost. \"\n                \"e.g.: 'cxxflags=-fPIC' 'cflags=-fPIC'\"\n            ),\n            action=\"append\",\n        )\n        parser.add_argument(\n            \"--free-up-disk\",\n            help=\"Remove unused tools and clean up intermediate files if possible to maximise space for the build\",\n            action=\"store_true\",\n            default=False,\n        )\n        parser.add_argument(\"--build-type\", **BUILD_TYPE_ARG)\n\n\n@cmd(\"fixup-dyn-deps\", \"Adjusts dynamic dependencies for packaging purposes\")\nclass FixupDeps(ProjectCmdBase):\n    def run_project_cmd(self, args, loader, manifest):\n        projects = loader.manifests_in_dependency_order()\n\n        # Accumulate the install directories so that the build steps\n        # can find their dep installation\n        install_dirs = []\n        dep_manifests = []\n\n        for m in projects:\n            inst_dir = loader.get_project_install_dir_respecting_install_prefix(m)\n            install_dirs.append(inst_dir)\n            dep_manifests.append(m)\n\n            if m == manifest:\n                ctx = loader.ctx_gen.get_context(m.name)\n                env = loader.build_opts.compute_env_for_install_dirs(\n                    loader, dep_manifests, ctx\n                )\n                dep_munger = create_dyn_dep_munger(\n                    loader.build_opts, env, install_dirs, args.strip\n                )\n                if dep_munger is None:\n                    print(f\"dynamic dependency fixups not supported on {sys.platform}\")\n                else:\n                    dep_munger.process_deps(args.destdir, args.final_install_prefix)\n\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\"destdir\", help=\"Where to copy the fixed up executables\")\n        parser.add_argument(\n            \"--final-install-prefix\", help=\"specify the final installation prefix\"\n        )\n        parser.add_argument(\n            \"--strip\",\n            action=\"store_true\",\n            default=False,\n            help=\"Strip debug info while processing executables\",\n        )\n\n\n@cmd(\"test\", \"test a given project\")\nclass TestCmd(ProjectCmdBase):\n    def run_project_cmd(self, args, loader, manifest):\n        if not self.check_built(loader, manifest):\n            print(\"project %s has not been built\" % manifest.name)\n            return 1\n        return self.create_builder(loader, manifest).run_tests(\n            schedule_type=args.schedule_type,\n            owner=args.test_owner,\n            test_filter=args.filter,\n            test_exclude=args.exclude,\n            retry=args.retry,\n            no_testpilot=args.no_testpilot,\n            timeout=args.timeout,\n        )\n\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\"--test-owner\", help=\"Owner for testpilot\")\n        parser.add_argument(\"--filter\", help=\"Only run the tests matching the regex\")\n        parser.add_argument(\"--exclude\", help=\"Exclude tests matching the regex\")\n        parser.add_argument(\n            \"--retry\",\n            type=int,\n            default=3,\n            help=\"Number of immediate retries for failed tests \"\n            \"(noop in continuous and testwarden runs)\",\n        )\n        parser.add_argument(\n            \"--no-testpilot\",\n            help=\"Do not use Test Pilot even when available\",\n            action=\"store_true\",\n        )\n        parser.add_argument(\n            \"--timeout\",\n            type=int,\n            default=None,\n            help=\"Timeout in seconds for each individual test\",\n        )\n        parser.add_argument(\"--build-type\", **BUILD_TYPE_ARG)\n\n\n@cmd(\n    \"debug\",\n    \"start a shell in the given project's build dir with the correct environment for running the build\",\n)\nclass DebugCmd(ProjectCmdBase):\n    def run_project_cmd(self, args, loader, manifest):\n        self.create_builder(loader, manifest).debug(reconfigure=False)\n\n\n@cmd(\n    \"env\",\n    \"print the environment in a shell sourceable format\",\n)\nclass EnvCmd(ProjectCmdBase):\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--os-type\",\n            help=\"Filter to just this OS type to run\",\n            choices=[\"linux\", \"darwin\", \"windows\"],\n            action=\"store\",\n            dest=\"ostype\",\n            default=None,\n        )\n\n    def run_project_cmd(self, args, loader, manifest):\n        if args.ostype:\n            loader.build_opts.host_type.ostype = args.ostype\n        self.create_builder(loader, manifest).printenv(reconfigure=False)\n\n\n@cmd(\"generate-github-actions\", \"generate a GitHub actions configuration\")\nclass GenerateGitHubActionsCmd(ProjectCmdBase):\n    RUN_ON_ALL = \"\"\" [push, pull_request]\"\"\"\n\n    WORKFLOW_DISPATCH_TMATE = \"\"\"\n  workflow_dispatch:\n    inputs:\n      tmate_enabled:\n        description: 'Start a tmate SSH session on failure'\n        required: false\n        default: false\n        type: boolean\"\"\"\n\n    def run_project_cmd(self, args, loader, manifest):\n        platforms = [\n            HostType(\"linux\", \"ubuntu\", \"24\"),\n            HostType(\"darwin\", None, None),\n            HostType(\"windows\", None, None),\n        ]\n\n        for p in platforms:\n            if args.os_types and p.ostype not in args.os_types:\n                continue\n            self.write_job_for_platform(p, args)\n\n    def get_run_on(self, args):\n        if args.run_on_all_branches:\n            return (\n                \"\"\"\n  push:\n  pull_request:\"\"\"\n                + self.WORKFLOW_DISPATCH_TMATE\n            )\n        if args.cron:\n            if args.cron == \"never\":\n                return \" {}\"\n            elif args.cron == \"workflow_dispatch\":\n                return self.WORKFLOW_DISPATCH_TMATE\n            else:\n                return (\n                    f\"\"\"\n  schedule:\n    - cron: '{args.cron}'\"\"\"\n                    + self.WORKFLOW_DISPATCH_TMATE\n                )\n\n        return (\n            f\"\"\"\n  push:\n    branches:\n    - {args.main_branch}\n  pull_request:\n    branches:\n    - {args.main_branch}\"\"\"\n            + self.WORKFLOW_DISPATCH_TMATE\n        )\n\n    # TODO: Break up complex function\n    def write_job_for_platform(self, platform, args):  # noqa: C901\n        build_opts = setup_build_options(args, platform)\n        ctx_gen = build_opts.get_context_generator()\n        if args.enable_tests:\n            ctx_gen.set_value_for_project(args.project, \"test\", \"on\")\n        else:\n            ctx_gen.set_value_for_project(args.project, \"test\", \"off\")\n        loader = ManifestLoader(build_opts, ctx_gen)\n        self.process_project_dir_arguments(args, loader)\n        manifest = loader.load_manifest(args.project)\n        manifest_ctx = loader.ctx_gen.get_context(manifest.name)\n        run_tests = (\n            args.enable_tests\n            and manifest.get(\"github.actions\", \"run_tests\", ctx=manifest_ctx) != \"off\"\n        )\n        rust_version = (\n            manifest.get(\"github.actions\", \"rust_version\", ctx=manifest_ctx) or \"stable\"\n        )\n\n        override_build_type = args.build_type or manifest.get(\n            \"github.actions\", \"build_type\", ctx=manifest_ctx\n        )\n        if run_tests:\n            manifest_ctx.set(\"test\", \"on\")\n        run_on = self.get_run_on(args)\n\n        tests_arg = \"--no-tests \"\n        if run_tests:\n            tests_arg = \"\"\n\n        # Some projects don't do anything \"useful\" as a leaf project, only\n        # as a dep for a leaf project. Check for those here; we don't want\n        # to waste the effort scheduling them on CI.\n        # We do this by looking at the builder type in the manifest file\n        # rather than creating a builder and checking its type because we\n        # don't know enough to create the full builder instance here.\n        builder_name = manifest.get(\"build\", \"builder\", ctx=manifest_ctx)\n        if builder_name == \"nop\":\n            return None\n\n        # We want to be sure that we're running things with python 3\n        # but python versioning is honestly a bit of a frustrating mess.\n        # `python` may be version 2 or version 3 depending on the system.\n        # python3 may not be a thing at all!\n        # Assume an optimistic default\n        py3 = \"python3\"\n\n        if build_opts.is_linux():\n            artifacts = \"linux\"\n            if args.runs_on:\n                runs_on = args.runs_on\n            else:\n                runs_on = f\"ubuntu-{args.ubuntu_version}\"\n                if args.cpu_cores:\n                    runs_on = f\"{args.cpu_cores}-core-ubuntu-{args.ubuntu_version}\"\n        elif build_opts.is_windows():\n            artifacts = \"windows\"\n            if args.runs_on:\n                runs_on = args.runs_on\n            else:\n                runs_on = \"windows-2022\"\n            # The windows runners are python 3 by default; python2.exe\n            # is available if needed.\n            py3 = \"python\"\n        else:\n            artifacts = \"mac\"\n            if args.runs_on:\n                runs_on = args.runs_on\n            else:\n                runs_on = \"macOS-latest\"\n\n        os.makedirs(args.output_dir, exist_ok=True)\n\n        job_file_prefix = \"getdeps_\"\n        if args.job_file_prefix:\n            job_file_prefix = args.job_file_prefix\n\n        output_file = os.path.join(args.output_dir, f\"{job_file_prefix}{artifacts}.yml\")\n\n        if args.job_name_prefix:\n            job_name = args.job_name_prefix + artifacts.capitalize()\n        else:\n            job_name = artifacts\n\n        with open(output_file, \"w\") as out:\n            # Deliberate line break here because the @ and the generated\n            # symbols are meaningful to our internal tooling when they\n            # appear in a single token\n            out.write(\"# This file was @\")\n            out.write(\"generated by getdeps.py\\n\")\n            out.write(\n                f\"\"\"\nname: {job_name}\n\non:{run_on}\n\npermissions:\n  contents: read  #  to fetch code (actions/checkout)\n\njobs:\n\"\"\"\n            )\n\n            getdepscmd = f\"{py3} build/fbcode_builder/getdeps.py\"\n\n            out.write(\"  build:\\n\")\n            out.write(\"    runs-on: %s\\n\" % runs_on)\n            out.write(\"    steps:\\n\")\n\n            if build_opts.is_windows():\n                # cmake relies on BOOST_ROOT but GH deliberately don't set it in order\n                # to avoid versioning issues:\n                # https://github.com/actions/virtual-environments/issues/319\n                # Instead, set the version we think we need; this is effectively\n                # coupled with the boost manifest\n                # This is the unusual syntax for setting an env var for the rest of\n                # the steps in a workflow:\n                # https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/\n                out.write(\"    - name: Export boost environment\\n\")\n                out.write(\n                    '      run: \"echo BOOST_ROOT=%BOOST_ROOT_1_83_0% >> %GITHUB_ENV%\"\\n'\n                )\n                out.write(\"      shell: cmd\\n\")\n\n                out.write(\"    - name: Fix Git config\\n\")\n                out.write(\"      run: >\\n\")\n                out.write(\"        git config --system core.longpaths true &&\\n\")\n                out.write(\"        git config --system core.autocrlf false &&\\n\")\n                # cxx crate needs symlinks enabled\n                out.write(\"        git config --system core.symlinks true\\n\")\n                # && is not supported on default windows powershell, so use cmd\n                out.write(\"      shell: cmd\\n\")\n\n            out.write(\"    - uses: actions/checkout@v6\\n\")\n\n            build_type_arg = \"\"\n            if override_build_type:\n                build_type_arg = f\"--build-type {override_build_type} \"\n\n            if args.shared_libs:\n                build_type_arg += \"--shared-libs \"\n\n            if build_opts.free_up_disk:\n                free_up_disk = \"--free-up-disk \"\n                if not build_opts.is_windows():\n                    out.write(\"    - name: Show disk space at start\\n\")\n                    out.write(\"      run: df -h\\n\")\n                    # remove the unused github supplied android dev tools\n                    out.write(\"    - name: Free up disk space\\n\")\n                    out.write(\"      run: sudo rm -rf /usr/local/lib/android\\n\")\n                    out.write(\"    - name: Show disk space after freeing up\\n\")\n                    out.write(\"      run: df -h\\n\")\n            else:\n                free_up_disk = \"\"\n\n            allow_sys_arg = \"\"\n            if (\n                build_opts.allow_system_packages\n                and build_opts.host_type.get_package_manager()\n            ):\n                sudo_arg = \"sudo --preserve-env=http_proxy \"\n                allow_sys_arg = \" --allow-system-packages\"\n                if build_opts.host_type.get_package_manager() == \"deb\":\n                    out.write(\"    - name: Update system package info\\n\")\n                    out.write(f\"      run: {sudo_arg}apt-get update\\n\")\n\n                out.write(\"    - name: Install system deps\\n\")\n                if build_opts.is_darwin():\n                    # brew is installed as regular user\n                    sudo_arg = \"\"\n\n                system_deps_cmd = f\"{sudo_arg}{getdepscmd}{allow_sys_arg} install-system-deps {tests_arg}--recursive {manifest.name}\"\n                if build_opts.is_linux() or build_opts.is_freebsd():\n                    system_deps_cmd += f\" && {sudo_arg}{getdepscmd}{allow_sys_arg} install-system-deps {tests_arg}--recursive patchelf\"\n                out.write(f\"      run: {system_deps_cmd}\\n\")\n\n                required_locales = manifest.get(\n                    \"github.actions\", \"required_locales\", ctx=manifest_ctx\n                )\n                if (\n                    build_opts.host_type.get_package_manager() == \"deb\"\n                    and required_locales\n                ):\n                    # ubuntu doesn't include this by default\n                    out.write(\"    - name: Install locale-gen\\n\")\n                    out.write(f\"      run: {sudo_arg}apt-get install locales\\n\")\n                    for loc in required_locales.split():\n                        out.write(f\"    - name: Ensure {loc} locale present\\n\")\n                        out.write(f\"      run: {sudo_arg}locale-gen {loc}\\n\")\n\n            out.write(\"    - id: paths\\n\")\n            out.write(\"      name: Query paths\\n\")\n            if build_opts.is_windows():\n                out.write(\n                    f\"      run: {getdepscmd}{allow_sys_arg} query-paths {tests_arg}--recursive --src-dir=. {manifest.name}  >> $env:GITHUB_OUTPUT\\n\"\n                )\n                out.write(\"      shell: pwsh\\n\")\n            else:\n                out.write(\n                    f'      run: {getdepscmd}{allow_sys_arg} query-paths {tests_arg}--recursive --src-dir=. {manifest.name}  >> \"$GITHUB_OUTPUT\"\\n'\n                )\n\n            projects = loader.manifests_in_dependency_order()\n\n            main_repo_url = manifest.get_repo_url(manifest_ctx)\n            has_same_repo_dep = False\n\n            # Add the rust dep which doesn't have a manifest\n            for m in projects:\n                if m == manifest:\n                    continue\n                mbuilder_name = m.get(\"build\", \"builder\", ctx=manifest_ctx)\n                if (\n                    m.name == \"rust\"\n                    or builder_name == \"cargo\"\n                    or mbuilder_name == \"cargo\"\n                ):\n                    out.write(f\"    - name: Install Rust {rust_version.capitalize()}\\n\")\n                    out.write(f\"      uses: dtolnay/rust-toolchain@{rust_version}\\n\")\n                    break\n\n            # Normal deps that have manifests\n            for m in projects:\n                if m == manifest or m.name == \"rust\":\n                    continue\n                ctx = loader.ctx_gen.get_context(m.name)\n                if m.get_repo_url(ctx) != main_repo_url:\n                    out.write(\"    - name: Fetch %s\\n\" % m.name)\n                    out.write(\n                        f\"      if: ${{{{ steps.paths.outputs.{m.name}_SOURCE }}}}\\n\"\n                    )\n                    out.write(\n                        f\"      run: {getdepscmd}{allow_sys_arg} fetch --no-tests {m.name}\\n\"\n                    )\n\n            for m in projects:\n                if m == manifest or m.name == \"rust\":\n                    continue\n                src_dir_arg = \"\"\n                ctx = loader.ctx_gen.get_context(m.name)\n                if main_repo_url and m.get_repo_url(ctx) == main_repo_url:\n                    # Its in the same repo, so src-dir is also .\n                    src_dir_arg = \"--src-dir=. \"\n                    has_same_repo_dep = True\n\n                if args.use_build_cache and not src_dir_arg:\n                    out.write(f\"    - name: Restore {m.name} from cache\\n\")\n                    out.write(f\"      id: restore_{m.name}\\n\")\n                    # only need to restore if would build it\n                    out.write(\n                        f\"      if: ${{{{ steps.paths.outputs.{m.name}_SOURCE }}}}\\n\"\n                    )\n                    out.write(\"      uses: actions/cache/restore@v4\\n\")\n                    out.write(\"      with:\\n\")\n                    out.write(\n                        f\"       path: ${{{{ steps.paths.outputs.{m.name}_INSTALL }}}}\\n\"\n                    )\n                    out.write(\n                        f\"       key: ${{{{ steps.paths.outputs.{m.name}_CACHE_KEY }}}}-install\\n\"\n                    )\n\n                out.write(\"    - name: Build %s\\n\" % m.name)\n                if not src_dir_arg:\n                    if args.use_build_cache:\n                        out.write(\n                            f\"      if: ${{{{ steps.paths.outputs.{m.name}_SOURCE && ! steps.restore_{m.name}.outputs.cache-hit }}}}\\n\"\n                        )\n                    else:\n                        out.write(\n                            f\"      if: ${{{{ steps.paths.outputs.{m.name}_SOURCE }}}}\\n\"\n                        )\n                out.write(\n                    f\"      run: {getdepscmd}{allow_sys_arg} build {build_type_arg}{src_dir_arg}{free_up_disk}--no-tests {m.name}\\n\"\n                )\n\n                if args.use_build_cache and not src_dir_arg:\n                    out.write(f\"    - name: Save {m.name} to cache\\n\")\n                    out.write(\"      uses: actions/cache/save@v4\\n\")\n                    out.write(\n                        f\"      if: ${{{{ steps.paths.outputs.{m.name}_SOURCE && ! steps.restore_{m.name}.outputs.cache-hit }}}}\\n\"\n                    )\n                    out.write(\"      with:\\n\")\n                    out.write(\n                        f\"       path: ${{{{ steps.paths.outputs.{m.name}_INSTALL }}}}\\n\"\n                    )\n                    out.write(\n                        f\"       key: ${{{{ steps.paths.outputs.{m.name}_CACHE_KEY }}}}-install\\n\"\n                    )\n\n            out.write(\"    - name: Build %s\\n\" % manifest.name)\n\n            project_prefix = \"\"\n            if not build_opts.is_windows():\n                prefix = loader.get_project_install_prefix(manifest) or \"/usr/local\"\n                project_prefix = \" --project-install-prefix %s:%s\" % (\n                    manifest.name,\n                    prefix,\n                )\n\n            # If we have dep from same repo, we already built it and don't want to rebuild it again\n            no_deps_arg = \"\"\n            if has_same_repo_dep:\n                no_deps_arg = \"--no-deps \"\n\n            out.write(\n                f\"      run: {getdepscmd}{allow_sys_arg} build {build_type_arg}{tests_arg}{no_deps_arg}--src-dir=. {manifest.name}{project_prefix}\\n\"\n            )\n\n            out.write(\"    - name: Copy artifacts\\n\")\n            if build_opts.is_linux():\n                # Strip debug info from the binaries, but only on linux.\n                # While the `strip` utility is also available on macOS,\n                # attempting to strip there results in an error.\n                # The `strip` utility is not available on Windows.\n                strip = \" --strip\"\n            else:\n                strip = \"\"\n\n            out.write(\n                f\"      run: {getdepscmd}{allow_sys_arg} fixup-dyn-deps{strip} \"\n                f\"--src-dir=. {manifest.name} _artifacts/{artifacts}{project_prefix} \"\n                f\"--final-install-prefix /usr/local\\n\"\n            )\n\n            out.write(\"    - uses: actions/upload-artifact@v6\\n\")\n            out.write(\"      with:\\n\")\n            out.write(\"        name: %s\\n\" % manifest.name)\n            out.write(\"        path: _artifacts\\n\")\n\n            if run_tests:\n                num_jobs_arg = \"\"\n                if args.num_jobs:\n                    num_jobs_arg = f\"--num-jobs {args.num_jobs} \"\n\n                out.write(\"    - name: Test %s\\n\" % manifest.name)\n                out.write(\n                    f\"      run: {getdepscmd}{allow_sys_arg} test {build_type_arg}{num_jobs_arg}--src-dir=. {manifest.name}{project_prefix}\\n\"\n                )\n            if build_opts.free_up_disk and not build_opts.is_windows():\n                out.write(\"    - name: Show disk space at end\\n\")\n                out.write(\"      if: always()\\n\")\n                out.write(\"      run: df -h\\n\")\n\n            out.write(\"    - name: Setup tmate session\\n\")\n            out.write(\n                \"      if: failure() && github.event_name == 'workflow_dispatch' && inputs.tmate_enabled\\n\"\n            )\n            out.write(\"      uses: mxschmitt/action-tmate@v3\\n\")\n\n    def setup_project_cmd_parser(self, parser):\n        parser.add_argument(\n            \"--disallow-system-packages\",\n            help=\"Disallow satisfying third party deps from installed system packages\",\n            action=\"store_true\",\n            default=False,\n        )\n        parser.add_argument(\n            \"--output-dir\", help=\"The directory that will contain the yml files\"\n        )\n        parser.add_argument(\n            \"--run-on-all-branches\",\n            action=\"store_true\",\n            help=\"Allow CI to fire on all branches - Handy for testing\",\n        )\n        parser.add_argument(\n            \"--ubuntu-version\", default=\"24.04\", help=\"Version of Ubuntu to use\"\n        )\n        parser.add_argument(\n            \"--cpu-cores\",\n            help=\"Number of CPU cores to use (applicable for Linux OS)\",\n        )\n        parser.add_argument(\n            \"--runs-on\",\n            help=\"Allow specifying explicit runs-on: for github actions\",\n        )\n        parser.add_argument(\n            \"--cron\",\n            help=\"Specify that the job runs on a cron schedule instead of on pushes. Pass never to disable the action.\",\n        )\n        parser.add_argument(\n            \"--main-branch\",\n            default=\"main\",\n            help=\"Main branch to trigger GitHub Action on\",\n        )\n        parser.add_argument(\n            \"--os-type\",\n            help=\"Filter to just this OS type to run\",\n            choices=[\"linux\", \"darwin\", \"windows\"],\n            action=\"append\",\n            dest=\"os_types\",\n            default=[],\n        )\n        parser.add_argument(\n            \"--job-file-prefix\",\n            type=str,\n            help=\"add a prefix to all job file names\",\n            default=None,\n        )\n        parser.add_argument(\n            \"--job-name-prefix\",\n            type=str,\n            help=\"add a prefix to all job names\",\n            default=None,\n        )\n        parser.add_argument(\n            \"--free-up-disk\",\n            help=\"Remove unused tools and clean up intermediate files if possible to maximise space for the build\",\n            action=\"store_true\",\n            default=False,\n        )\n        parser.add_argument(\"--build-type\", **BUILD_TYPE_ARG)\n        parser.add_argument(\n            \"--no-build-cache\",\n            action=\"store_false\",\n            default=True,\n            dest=\"use_build_cache\",\n            help=\"Do not attempt to use the build cache.\",\n        )\n\n\ndef get_arg_var_name(args):\n    for arg in args:\n        if arg.startswith(\"--\"):\n            return arg[2:].replace(\"-\", \"_\")\n\n    raise Exception(\"unable to determine argument variable name from %r\" % (args,))\n\n\ndef parse_args():\n    # We want to allow common arguments to be specified either before or after\n    # the subcommand name.  In order to do this we add them to the main parser\n    # and to subcommand parsers.  In order for this to work, we need to tell\n    # argparse that the default value is SUPPRESS, so that the default values\n    # from the subparser arguments won't override values set by the user from\n    # the main parser.  We maintain our own list of desired defaults in the\n    # common_defaults dictionary, and manually set those if the argument wasn't\n    # present at all.\n    common_args = argparse.ArgumentParser(add_help=False)\n    common_defaults = {}\n\n    def add_common_arg(*args, **kwargs):\n        var_name = get_arg_var_name(args)\n        default_value = kwargs.pop(\"default\", None)\n        common_defaults[var_name] = default_value\n        kwargs[\"default\"] = argparse.SUPPRESS\n        common_args.add_argument(*args, **kwargs)\n\n    add_common_arg(\"--scratch-path\", help=\"Where to maintain checkouts and build dirs\")\n    add_common_arg(\n        \"--vcvars-path\", default=None, help=\"Path to the vcvarsall.bat on Windows.\"\n    )\n    add_common_arg(\n        \"--install-prefix\",\n        help=(\n            \"Where the final build products will be installed \"\n            \"(default is [scratch-path]/installed)\"\n        ),\n    )\n    add_common_arg(\n        \"--num-jobs\",\n        type=int,\n        help=(\n            \"Number of concurrent jobs to use while building. \"\n            \"(default=number of cpu cores)\"\n        ),\n    )\n    add_common_arg(\n        \"--use-shipit\",\n        help=\"use the real ShipIt instead of the simple shipit transformer\",\n        action=\"store_true\",\n        default=False,\n    )\n    add_common_arg(\n        \"--facebook-internal\",\n        help=\"Setup the build context as an FB internal build\",\n        action=\"store_true\",\n        default=None,\n    )\n    add_common_arg(\n        \"--no-facebook-internal\",\n        help=\"Perform a non-FB internal build, even when in an fbsource repository\",\n        action=\"store_false\",\n        dest=\"facebook_internal\",\n    )\n    add_common_arg(\n        \"--shared-libs\",\n        help=\"Build shared libraries if possible\",\n        action=\"store_true\",\n        default=False,\n    )\n    add_common_arg(\n        \"--extra-cmake-defines\",\n        help=(\n            \"Input json map that contains extra cmake defines to be used \"\n            \"when compiling the current project and all its deps. \"\n            'e.g: \\'{\"CMAKE_CXX_FLAGS\": \"--bla\"}\\''\n        ),\n    )\n    add_common_arg(\n        \"--allow-system-packages\",\n        help=\"Allow satisfying third party deps from installed system packages\",\n        action=\"store_true\",\n        default=False,\n    )\n    add_common_arg(\n        \"-v\",\n        \"--verbose\",\n        help=\"Print more output\",\n        action=\"store_true\",\n        default=False,\n    )\n    add_common_arg(\n        \"-su\",\n        \"--skip-upload\",\n        help=\"skip upload steps\",\n        action=\"store_true\",\n        default=False,\n    )\n    add_common_arg(\n        \"--lfs-path\",\n        help=\"Provide a parent directory for lfs when fbsource is unavailable\",\n        default=None,\n    )\n    add_common_arg(\n        \"--build-skip-lfs-download\",\n        action=\"store_true\",\n        default=False,\n        help=(\n            \"Download from the URL, rather than LFS. This is useful \"\n            \"in cases where the upstream project has uploaded a new \"\n            \"version of the archive with a different hash\"\n        ),\n    )\n    add_common_arg(\n        \"--schedule-type\",\n        nargs=\"?\",\n        help=\"Indicates how the build was activated\",\n    )\n\n    ap = argparse.ArgumentParser(\n        description=\"Get and build dependencies and projects\", parents=[common_args]\n    )\n    sub = ap.add_subparsers(\n        # metavar suppresses the long and ugly default list of subcommands on a\n        # single line.  We still render the nicer list below where we would\n        # have shown the nasty one.\n        metavar=\"\",\n        title=\"Available commands\",\n        help=\"\",\n    )\n\n    add_subcommands(sub, common_args)\n\n    args = ap.parse_args()\n    for var_name, default_value in common_defaults.items():\n        if not hasattr(args, var_name):\n            setattr(args, var_name, default_value)\n\n    return ap, args\n\n\ndef main():\n    ap, args = parse_args()\n    if getattr(args, \"func\", None) is None:\n        ap.print_help()\n        return 0\n    try:\n        return args.func(args)\n    except UsageError as exc:\n        ap.error(str(exc))\n        return 1\n    except TransientFailure as exc:\n        print(\"TransientFailure: %s\" % str(exc))\n        # This return code is treated as a retryable transient infrastructure\n        # error by Facebook's internal CI, rather than eg: a build or code\n        # related error that needs to be fixed before progress can be made.\n        return 128\n    except subprocess.CalledProcessError as exc:\n        print(\"%s\" % str(exc), file=sys.stderr)\n        print(\"!! Failed\", file=sys.stderr)\n        return 1\n\n\nif __name__ == \"__main__\":\n    sys.exit(main())\n"
  },
  {
    "path": "build/fbcode_builder/manifests/CLI11",
    "content": "[manifest]\nname = CLI11\n\n[download]\nurl = https://github.com/CLIUtils/CLI11/archive/v2.0.0.tar.gz\nsha256 = 2c672f17bf56e8e6223a3bfb74055a946fa7b1ff376510371902adb9cb0ab6a3\n\n[build]\nbuilder = cmake\nsubdir = CLI11-2.0.0\n\n[cmake.defines]\nCLI11_BUILD_TESTS = OFF\nCLI11_BUILD_EXAMPLES = OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/autoconf",
    "content": "[manifest]\nname = autoconf\n\n[debs]\nautoconf\n\n[homebrew]\nautoconf\n\n[rpms]\nautoconf\n\n[pps]\nautoconf\n\n[download]\nurl = https://ftpmirror.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz\nsha256 = 954bd69b391edc12d6a4a51a2dd1476543da5c6bbf05a95b59dc0dd6fd4c2969\n\n[build]\nbuilder = autoconf\nsubdir = autoconf-2.69\n"
  },
  {
    "path": "build/fbcode_builder/manifests/automake",
    "content": "[manifest]\nname = automake\n\n[homebrew]\nautomake\n\n[debs]\nautomake\n\n[rpms]\nautomake\n\n[pps]\nautomake\n\n[download]\nurl = https://ftpmirror.gnu.org/gnu/automake/automake-1.16.1.tar.gz\nsha256 = 608a97523f97db32f1f5d5615c98ca69326ced2054c9f82e65bade7fc4c9dea8\n\n[build]\nbuilder = autoconf\nsubdir = automake-1.16.1\n\n[dependencies]\nautoconf\n"
  },
  {
    "path": "build/fbcode_builder/manifests/benchmark",
    "content": "[manifest]\nname = benchmark\n\n[download]\nurl = https://github.com/google/benchmark/archive/refs/tags/v1.8.0.tar.gz\nsha256 = ea2e94c24ddf6594d15c711c06ccd4486434d9cf3eca954e2af8a20c88f9f172\n\n[build]\nbuilder = cmake\nsubdir = benchmark-1.8.0/\n\n[cmake.defines]\nBENCHMARK_ENABLE_TESTING=OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/blake3",
    "content": "[manifest]\nname = blake3\n\n[download]\nurl = https://github.com/BLAKE3-team/BLAKE3/archive/refs/tags/1.5.1.tar.gz\nsha256 = 822cd37f70152e5985433d2c50c8f6b2ec83aaf11aa31be9fe71486a91744f37\n\n[build]\nbuilder = cmake\nsubdir = BLAKE3-1.5.1/c\n"
  },
  {
    "path": "build/fbcode_builder/manifests/boost",
    "content": "[manifest]\nname = boost\n\n[download.not(os=windows)]\nurl = https://archives.boost.io/release/1.83.0/source/boost_1_83_0.tar.gz\nsha256 = c0685b68dd44cc46574cce86c4e17c0f611b15e195be9848dfd0769a0a207628\n\n[download.os=windows]\nurl = https://archives.boost.io/release/1.83.0/source/boost_1_83_0.zip\nsha256 = c86bd9d9eef795b4b0d3802279419fde5221922805b073b9bd822edecb1ca28e\n\n[preinstalled.env]\n# Here we list the acceptable versions that cmake needs a hint to find\nBOOST_ROOT_1_69_0\nBOOST_ROOT_1_83_0\n\n[debs]\nlibboost-all-dev\n\n[homebrew]\nboost\n# Boost cmake detection on homebrew adds this as requirement: https://github.com/Homebrew/homebrew-core/issues/67427#issuecomment-754187345\nicu4c\n\n[pps]\nboost\n\n[rpms.all(distro=centos_stream,distro_vers=8)]\nboost169\nboost169-math\nboost169-test\nboost169-fiber\nboost169-graph\nboost169-log\nboost169-openmpi\nboost169-timer\nboost169-chrono\nboost169-locale\nboost169-thread\nboost169-atomic\nboost169-random\nboost169-static\nboost169-contract\nboost169-date-time\nboost169-iostreams\nboost169-container\nboost169-coroutine\nboost169-filesystem\nboost169-system\nboost169-stacktrace\nboost169-regex\nboost169-devel\nboost169-context\nboost169-python3-devel\nboost169-type_erasure\nboost169-wave\nboost169-python3\nboost169-serialization\nboost169-program-options\n\n[rpms.distro=fedora]\nboost-devel\nboost-static\n\n[build]\nbuilder = boost\njob_weight_mib = 512\npatchfile = boost_1_83_0.patch\n\n[b2.args]\n--with-atomic\n--with-chrono\n--with-container\n--with-context\n--with-contract\n--with-coroutine\n--with-date_time\n--with-exception\n--with-fiber\n--with-filesystem\n--with-graph\n--with-graph_parallel\n--with-iostreams\n--with-locale\n--with-log\n--with-math\n--with-mpi\n--with-program_options\n--with-python\n--with-random\n--with-regex\n--with-serialization\n--with-stacktrace\n--with-system\n--with-test\n--with-thread\n--with-timer\n--with-type_erasure\n\n[bootstrap.args.os=darwin]\n# Not really gcc, but CI puts a broken clang in the PATH, and saying gcc\n# here selects the correct one from Xcode.\n--with-toolset=gcc\n\n[b2.args.os=linux]\n# RHEL hardened gcc is not compatible with PCH\n# https://bugzilla.redhat.com/show_bug.cgi?id=1806545\npch=off\n\n[b2.args.os=darwin]\ntoolset=clang\n# Since Xcode 15.3 std::piecewise_construct is only visible in C++17 and later modes\ncxxflags=\"-DBOOST_UNORDERED_HAVE_PIECEWISE_CONSTRUCT=0\"\n\n[b2.args.all(os=windows,fb=on)]\ntoolset=msvc-14.3\n"
  },
  {
    "path": "build/fbcode_builder/manifests/boost-python",
    "content": "[manifest]\nname = boost-python\n\n[download.not(os=windows)]\nurl = https://archives.boost.io/release/1.83.0/source/boost_1_83_0.tar.gz\nsha256 = c0685b68dd44cc46574cce86c4e17c0f611b15e195be9848dfd0769a0a207628\n\n[download.os=windows]\nurl = https://archives.boost.io/release/1.83.0/source/boost_1_83_0.zip\nsha256 = c86bd9d9eef795b4b0d3802279419fde5221922805b073b9bd822edecb1ca28e\n\n[preinstalled.env]\n# Here we list the acceptable versions that cmake needs a hint to find\nBOOST_ROOT_1_69_0\nBOOST_ROOT_1_83_0\n\n[homebrew]\nboost\n# Boost cmake detection on homebrew adds this as requirement: https://github.com/Homebrew/homebrew-core/issues/67427#issuecomment-754187345\nicu4c\n\n[pps]\nboost\n\n[rpms.all(distro=centos_stream,distro_vers=8)]\nboost169\nboost169-math\nboost169-test\nboost169-fiber\nboost169-graph\nboost169-log\nboost169-openmpi\nboost169-timer\nboost169-chrono\nboost169-locale\nboost169-thread\nboost169-atomic\nboost169-random\nboost169-static\nboost169-contract\nboost169-date-time\nboost169-iostreams\nboost169-container\nboost169-coroutine\nboost169-filesystem\nboost169-system\nboost169-stacktrace\nboost169-regex\nboost169-devel\nboost169-context\nboost169-python3-devel\nboost169-type_erasure\nboost169-wave\nboost169-python3\nboost169-serialization\nboost169-program-options\n\n[rpms.distro=fedora]\nboost-devel\nboost-static\n\n[build]\nbuilder = boost\njob_weight_mib = 512\npatchfile = boost_1_83_0.patch\n\n[build.not(os=linux)]\nbuilder = nop\n\n[b2.args]\n--with-atomic\n--with-chrono\n--with-container\n--with-context\n--with-contract\n--with-coroutine\n--with-date_time\n--with-exception\n--with-fiber\n--with-filesystem\n--with-graph\n--with-graph_parallel\n--with-iostreams\n--with-locale\n--with-log\n--with-math\n--with-mpi\n--with-program_options\n--with-python\n--with-random\n--with-regex\n--with-serialization\n--with-stacktrace\n--with-system\n--with-test\n--with-thread\n--with-timer\n--with-type_erasure\n\n[bootstrap.args.os=darwin]\n# Not really gcc, but CI puts a broken clang in the PATH, and saying gcc\n# here selects the correct one from Xcode.\n--with-toolset=gcc\n\n[b2.args.os=linux]\n# RHEL hardened gcc is not compatible with PCH\n# https://bugzilla.redhat.com/show_bug.cgi?id=1806545\npch=off\n# Python extensions need -fPIC for static library linking into shared objects\ncxxflags=\"-fPIC\"\n\n[b2.args.os=darwin]\ntoolset=clang\n# Since Xcode 15.3 std::piecewise_construct is only visible in C++17 and later modes\ncxxflags=\"-DBOOST_UNORDERED_HAVE_PIECEWISE_CONSTRUCT=0\"\n\n[b2.args.all(os=windows,fb=on)]\ntoolset=msvc-14.3\n"
  },
  {
    "path": "build/fbcode_builder/manifests/bz2",
    "content": "[manifest]\nname = bz2\n\n[debs]\nlibbz2-dev\nbzip2\n\n[homebrew]\nbzip2\n\n[rpms]\nbzip2-devel\nbzip2\n\n[download]\nurl = https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz\nsha256 = ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269\n\n[build.not(os=windows)]\nbuilder = make\nsubdir = bzip2-1.0.8\n\n[make.build_args.os=linux]\n# python bz2 support on linux needs dynamic library\n-f\nMakefile-libbz2_so\n\n[make.install_args]\ninstall\n\n[build.os=windows]\nbuilder = nop\n"
  },
  {
    "path": "build/fbcode_builder/manifests/c-ares",
    "content": "[manifest]\nname = c-ares\n\n[download]\nurl = https://github.com/c-ares/c-ares/releases/download/v1.34.6/c-ares-1.34.6.tar.gz\nsha256 = 912dd7cc3b3e8a79c52fd7fb9c0f4ecf0aaa73e45efda880266a2d6e26b84ef5\n\n[build]\nbuilder = cmake\nsubdir = c-ares-1.34.6\n\n[cmake.defines]\nCARES_STATIC = ON\n\n[cmake.defines.shared_libs=off]\nCARES_SHARED = OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/cabal",
    "content": "[manifest]\nname = cabal\n\n[download.os=linux]\nurl = https://downloads.haskell.org/~cabal/cabal-install-3.6.2.0/cabal-install-3.6.2.0-x86_64-linux-deb10.tar.xz\nsha256 = 4759b56e9257e02f29fa374a6b25d6cb2f9d80c7e3a55d4f678a8e570925641c\n\n[build]\nbuilder = nop\n\n[install.files]\ncabal = bin/cabal\n"
  },
  {
    "path": "build/fbcode_builder/manifests/cachelib",
    "content": "[manifest]\nname = cachelib\nfbsource_path = fbcode/cachelib\nshipit_project = cachelib\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/cachelib.git\n\n[build]\nbuilder = cmake\nsubdir = cachelib\njob_weight_mib = 2048\n\n[dependencies]\nzlib\nfizz\nfmt\nfolly\nfbthrift\ngoogletest\nsparsemap\nwangle\nzstd\nmvfst\nnuma\nlibaio\nmagic_enum\n# cachelib also depends on openssl but since the latter requires a platform-\n# specific configuration we rely on the folly manifest to provide this\n# dependency to avoid duplication.\n\n[dependencies.all(distro=centos_stream,distro_vers=9)]\ngcc14\n\n[cmake.defines.all(distro=centos_stream,distro_vers=9)]\nCMAKE_C_COMPILER=/opt/rh/gcc-toolset-14/root/usr/bin/gcc\nCMAKE_CXX_COMPILER=/opt/rh/gcc-toolset-14/root/usr/bin/g++\n\n[shipit.pathmap]\nfbcode/cachelib = cachelib\nfbcode/cachelib/public_tld = .\n\n[shipit.strip]\n^fbcode/cachelib/examples(/|$)\n^fbcode/cachelib/facebook(/|$)\n^fbcode/cachelib/public_tld/website/docs/facebook(/|$)\n^fbcode/cachelib/public_tld/website/node_modules(/|$)\n^fbcode/cachelib/public_tld/website/build(/|$)\n"
  },
  {
    "path": "build/fbcode_builder/manifests/cinderx-3_14",
    "content": "[manifest]\nname = cinderx-3_14\nfbsource_path = fbcode/cinderx\nshipit_project = facebookincubator/cinderx\n\n[git]\nrepo_url = https://github.com/facebookincubator/cinderx.git\n\n[build.os=linux]\nbuilder = setup-py\n\n[build.not(os=linux)]\nbuilder = nop\n\n[dependencies]\npython-setuptools\npython-3_14\n\n[shipit.pathmap]\nfbcode/cinderx = cinderx\nfbcode/cinderx/oss_toplevel = .\n\n[setup-py.test]\npython_script = cinderx/PythonLib/test_cinderx/test_oss_quick.py\n\n[setup-py.env]\nCINDERX_ENABLE_PGO=1\nCINDERX_ENABLE_LTO=1\n"
  },
  {
    "path": "build/fbcode_builder/manifests/cinderx-main",
    "content": "# For building CinderX against CPython main.\n# Note that externally this can be broken  because in that environment we will\n# be checking out the head of the CPython repo. However CinderX is only built\n# and tested against our internal copy of CPython which updates ~daily, and so\n# may be behind CPython head.\n\n[manifest]\nname = cinderx-main\nfbsource_path = fbcode/cinderx\nshipit_project = facebookincubator/cinderx\n\n[git]\nrepo_url = https://github.com/facebookincubator/cinderx.git\n\n[build.os=linux]\nbuilder = setup-py\n\n[build.not(os=linux)]\nbuilder = nop\n\n[dependencies]\npython-setuptools\npython-main\n\n[shipit.pathmap]\nfbcode/cinderx = cinderx\nfbcode/cinderx/oss_toplevel = .\n\n[setup-py.test]\npython_script = cinderx/PythonLib/test_cinderx/test_oss_quick.py\n\n[setup-py.env]\nCINDERX_ENABLE_PGO=1\nCINDERX_ENABLE_LTO=1\n"
  },
  {
    "path": "build/fbcode_builder/manifests/clang",
    "content": "[manifest]\nname = clang\n\n[rpms]\nclang15-devel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/clang19",
    "content": "[manifest]\nname = clang19\n\n[debs.os=linux]\nclang-19\n\n[rpms.os=linux]\nclang\n"
  },
  {
    "path": "build/fbcode_builder/manifests/cmake",
    "content": "[manifest]\nname = cmake\n\n[homebrew]\ncmake\n\n# 18.04 cmake is too old\n[debs.not(all(distro=ubuntu,distro_vers=\"18.04\"))]\ncmake\n\n[rpms]\ncmake\n\n[pps]\ncmake\n\n[dependencies]\nninja\n\n[download.os=windows]\nurl = https://github.com/Kitware/CMake/releases/download/v3.20.4/cmake-3.20.4-windows-x86_64.zip\nsha256 = 965d2f001c3ca807d288f2b6b15c42b25579a0e73ef12c2a72c95f4c69123638\n\n[download.os=darwin]\nurl = https://github.com/Kitware/CMake/releases/download/v3.20.4/cmake-3.20.4-macos-universal.tar.gz\nsha256 = df90016635e3183834143c6d94607f0804fe9762f7cc6032f6a4afd7c19cd43b\n\n[download.any(os=linux,os=freebsd)]\nurl = https://github.com/Kitware/CMake/releases/download/v3.20.4/cmake-3.20.4.tar.gz\nsha256 = 87a4060298f2c6bb09d479de1400bc78195a5b55a65622a7dceeb3d1090a1b16\n\n[build.os=windows]\nbuilder = nop\nsubdir = cmake-3.20.4-windows-x86_64\n\n[build.os=darwin]\nbuilder = nop\nsubdir = cmake-3.20.4-macos-universal\n\n[install.files.os=darwin]\nCMake.app/Contents/bin = bin\nCMake.app/Contents/share = share\n\n[build.any(os=linux,os=freebsd)]\nbuilder = cmakebootstrap\nsubdir = cmake-3.20.4\n\n[make.install_args.any(os=linux,os=freebsd)]\ninstall\n"
  },
  {
    "path": "build/fbcode_builder/manifests/cpptoml",
    "content": "[manifest]\nname = cpptoml\n\n[homebrew]\ncpptoml\n\n[download]\nurl = https://github.com/chadaustin/cpptoml/archive/refs/tags/v0.1.2.tar.gz\nsha256 = beda37e94f9746874436c8090c045fd80ae6f8a51f7c668c932a2b110a4fc277\n\n[build]\nbuilder = cmake\nsubdir = cpptoml-0.1.2\n\n[cmake.defines.os=freebsd]\nENABLE_LIBCXX=NO\n"
  },
  {
    "path": "build/fbcode_builder/manifests/double-conversion",
    "content": "[manifest]\nname = double-conversion\n\n[download]\nurl = https://github.com/google/double-conversion/archive/v3.1.4.tar.gz\nsha256 = 95004b65e43fefc6100f337a25da27bb99b9ef8d4071a36a33b5e83eb1f82021\n\n[homebrew]\ndouble-conversion\n\n[debs]\nlibdouble-conversion-dev\n\n[rpms]\ndouble-conversion\ndouble-conversion-devel\n\n[pps]\ndouble-conversion\n\n[build]\nbuilder = cmake\nsubdir = double-conversion-3.1.4\n"
  },
  {
    "path": "build/fbcode_builder/manifests/double-conversion-python",
    "content": "[manifest]\nname = double-conversion-python\n\n[download]\nurl = https://github.com/google/double-conversion/archive/v3.1.4.tar.gz\nsha256 = 95004b65e43fefc6100f337a25da27bb99b9ef8d4071a36a33b5e83eb1f82021\n\n[homebrew]\ndouble-conversion\n\n[debs]\nlibdouble-conversion-dev\n\n[rpms]\ndouble-conversion\ndouble-conversion-devel\n\n[pps]\ndouble-conversion\n\n[build]\nbuilder = cmake\nsubdir = double-conversion-3.1.4\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines]\nCMAKE_POSITION_INDEPENDENT_CODE=ON\n"
  },
  {
    "path": "build/fbcode_builder/manifests/eden",
    "content": "[manifest]\nname = eden\nfbsource_path = fbcode/eden\nshipit_project = eden\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/sapling.git\n\n[github.actions]\nrun_tests = off\n\n[sandcastle]\nrun_tests = off\n\n[build]\nbuilder = cmake\n\n[dependencies]\nblake3\ngoogletest\nfolly\nfbthrift\nfb303\ncpptoml\nrocksdb\nre2\nlibgit2\npexpect\npython-psutil\npython-toml\npython-filelock\nedencommon\nrust-shed\n\n[dependencies.fbsource=on]\nrust\n\n# macOS ships with sqlite3, and some of the core system\n# frameworks require that that version be linked rather\n# than the one we might build for ourselves here, so we\n# skip building it on macos.\n[dependencies.not(os=darwin)]\nsqlite3\n\n[dependencies.os=darwin]\nosxfuse\n\n[dependencies.not(os=windows)]\n# TODO: teach getdeps to compile curl on Windows.\n# Enabling curl on Windows requires us to find a way to compile libcurl with\n# msvc.\nlibcurl\n# Added so that OSS doesn't see system \"python\" which is python 2 on darwin and some linux\npython\n# TODO: teach getdeps to compile lmdb on Windows.\nlmdb\n\n[dependencies.test=on]\n# sapling CLI is needed to run the tests\nsapling\n\n[shipit.pathmap.fb=on]\n# for internal builds that use getdeps\nfbcode/fb303 = fb303\nfbcode/common/rust/shed = common/rust/shed\nfbcode/thrift/lib/cpp = thrift/lib/cpp\nfbcode/thrift/lib/cpp2 = thrift/lib/cpp2\nfbcode/thrift/lib/java = thrift/lib/java\nfbcode/thrift/lib/py = thrift/lib/py\nfbcode/thrift/lib/python = thrift/lib/python\nfbcode/thrift/lib/rust = thrift/lib/rust\n\n[shipit.pathmap]\n# Map hostcaps for now as eden C++ includes its .h. Rust-shed should install it\nfbcode/common/rust/shed/hostcaps = common/rust/shed/hostcaps\nfbcode/configerator/structs/scm/hg = configerator/structs/scm/hg\nfbcode/eden/oss = .\nfbcode/eden = eden\nfbcode/tools/lfs = tools/lfs\n\n[shipit.pathmap.fb=off]\nfbcode/eden/fs/public_autocargo = eden/fs\nfbcode/eden/scm/public_autocargo = eden/scm\nfbcode/common/rust/shed/hostcaps/public_cargo = common/rust/shed/hostcaps\nfbcode/configerator/structs/scm/hg/public_autocargo = configerator/structs/scm/hg\n\n[shipit.strip]\n^fbcode/eden/addons/.*$\n^fbcode/eden/fs/eden-config\\.h$\n^fbcode/eden/fs/py/eden/config\\.py$\n^fbcode/eden/hg-server/.*$\n^fbcode/eden/mononoke/(?!lfs_protocol)\n^fbcode/eden/scm/build/.*$\n^fbcode/eden/scm/lib/third-party/rust/.*/Cargo.toml$\n^fbcode/eden/website/.*$\n^fbcode/eden/.*/\\.cargo/.*$\n/Cargo\\.lock$\n\\.pyc$\n\n[shipit.strip.fb=off]\n^fbcode/common/rust/shed(?!/public_autocargo).*/Cargo\\.toml$\n^fbcode/configerator/structs/scm/hg(?!/public_autocargo).*/Cargo\\.toml$\n^fbcode/eden/fs(?!/public_autocargo).*/Cargo\\.toml$\n^fbcode/eden/scm(?!/public_autocargo|/saplingnative).*/Cargo\\.toml$\n^.*/facebook/.*$\n^.*/fb/.*$\n\n[cmake.defines.all(fb=on,os=windows)]\nENABLE_GIT=OFF\nINSTALL_PYTHON_LIB=ON\n\n[cmake.defines.all(not(fb=on),os=windows)]\nENABLE_GIT=OFF\n\n[cmake.defines.fbsource=on]\nUSE_CARGO_VENDOR=ON\n\n[cmake.defines.fb=on]\nIS_FB_BUILD=ON\n\n[depends.environment]\nEDEN_VERSION_OVERRIDE\n"
  },
  {
    "path": "build/fbcode_builder/manifests/edencommon",
    "content": "[manifest]\nname = edencommon\nfbsource_path = fbcode/eden/common\nshipit_project = edencommon\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebookexperimental/edencommon.git\n\n[build]\nbuilder = cmake\n\n[dependencies]\nfbthrift\nfb303\nfmt\nfolly\ngflags\nglog\n\n[cmake.defines.test=on]\nBUILD_TESTS=ON\n\n[cmake.defines.test=off]\nBUILD_TESTS=OFF\n\n[shipit.pathmap]\nfbcode/eden/common = eden/common\nfbcode/eden/common/oss = .\n\n[shipit.strip]\n@README.facebook@\n"
  },
  {
    "path": "build/fbcode_builder/manifests/exprtk",
    "content": "[manifest]\nname = exprtk\n\n[download]\nurl = https://github.com/ArashPartow/exprtk/archive/refs/tags/0.0.1.tar.gz\nsha256 = fb72791c88ae3b3426e14fdad630027715682584daf56b973569718c56e33f28\n\n[build.not(os=windows)]\nbuilder = nop\nsubdir = exprtk-0.0.1\n\n[install.files]\nexprtk.hpp = exprtk.hpp\n\n[dependencies]\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fast_float",
    "content": "[manifest]\nname = fast_float\n\n[download]\nurl = https://github.com/fastfloat/fast_float/archive/refs/tags/v8.0.0.tar.gz\nsha256 = f312f2dc34c61e665f4b132c0307d6f70ad9420185fa831911bc24408acf625d\n\n[build]\nbuilder = cmake\nsubdir = fast_float-8.0.0\n\n[cmake.defines]\nFASTFLOAT_TEST = OFF\nFASTFLOAT_SANITIZE = OFF\n\n[debs.not(all(distro=ubuntu,any(distro_vers=\"18.04\",distro_vers=\"20.04\",distro_vers=\"22.04\",distro_vers=\"24.04\")))]\nlibfast-float-dev\n\n[rpms.distro=fedora]\nfast_float-devel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fatal",
    "content": "[manifest]\nname = fatal\nfbsource_path = fbcode/fatal\nshipit_project = fatal\n\n[git]\nrepo_url = https://github.com/facebook/fatal.git\n\n[shipit.pathmap]\nfbcode/fatal = fatal\nfbcode/fatal/public_tld = .\n\n[build]\nbuilder = nop\nsubdir = .\n\n[install.files]\nfatal/portability.h = fatal/portability.h\nfatal/preprocessor.h = fatal/preprocessor.h\nfatal/container = fatal/container\nfatal/functional = fatal/functional\nfatal/math = fatal/math\nfatal/string = fatal/string\nfatal/type = fatal/type\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fb303",
    "content": "[manifest]\nname = fb303\nfbsource_path = fbcode/fb303\nshipit_project = fb303\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/fb303.git\n\n[cargo]\ncargo_config_file = source/fb303/thrift/.cargo/config.toml\n\n[crate.pathmap]\nfb303_core = fb303/thrift/rust\n\n[build]\nbuilder = cmake\n\n[dependencies]\nfolly\ngflags\nglog\nfbthrift\n\n[cmake.defines.test=on]\nBUILD_TESTS=ON\n\n[cmake.defines.test=off]\nBUILD_TESTS=OFF\n\n[shipit.pathmap]\nfbcode/fb303/github = .\nfbcode/fb303/public_autocargo = fb303\nfbcode/fb303 = fb303\n\n[shipit.strip]\n^fbcode/fb303/(?!public_autocargo).+/Cargo\\.toml$\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fboss",
    "content": "[manifest]\nname = fboss\nfbsource_path = fbcode/fboss\nshipit_project = fboss\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/fboss.git\n\n[build.os=linux]\nbuilder = cmake\n# fboss files take a lot of RAM to compile.\njob_weight_mib = 3072\n\n[build.not(os=linux)]\nbuilder = nop\n\n[dependencies]\nfolly\nfb303\nwangle\nfizz\nmvfst\nfmt\nlibsodium\ngoogletest\nzstd\nfatal\nfbthrift\niproute2\nlibusb\nlibcurl\nlibnl\nlibsai\nre2\npython\nyaml-cpp\nlibyaml\nCLI11\nexprtk\nnlohmann-json\nlibgpiod\nsystemd\nrange-v3\ntabulate\ngcc12\npython-pyyaml\n\n# ShipitPathMap always assume to use directory to fetch the source code.\n# If you need to sync the files to fboss github repo, please make changes in\n# configerator/source/opensource/shipit_config/facebook/fboss.cconf\n[shipit.pathmap]\nfbcode/fboss/github = .\nfbcode/fboss/common = common\nfbcode/fboss = fboss\n# NOTE: Although this directory has other thrift files might not be ready for\n# opensource, this pathmap should only be used internally `getdeps.py fetch`\nfbcode/configerator/structs/neteng/fboss/thrift = configerator/structs/neteng/fboss/thrift\n\n[shipit.strip]\n^fbcode/fboss/github/docs/.*\n^fbcode/fboss/oss/.*\n^fbcode/fboss/github/.github/.*\n^fbcode/fboss/github/fboss-image/.*\n^fbcode/fboss/github/.pre-commit-config.yaml\n^fbcode/fboss/github/requirements-dev.txt\n^fbcode/fboss/.llms/.*\n\n[sandcastle]\nrun_tests = off\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fbthrift",
    "content": "[manifest]\nname = fbthrift\nfbsource_path = xplat/thrift\nshipit_project = fbthrift\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/fbthrift.git\n\n[cargo]\ncargo_config_file =  source/thrift/lib/rust/.cargo/config.toml\n\n[crate.pathmap]\nfbthrift = thrift/lib/rust\n\n[build]\nbuilder = cmake\njob_weight_mib = 2048\n\n[cmake.defines.all(not(os=windows),test=on)]\nenable_tests=ON\n\n[cmake.defines.any(os=windows,test=off)]\nenable_tests=OFF\n\n[dependencies]\nfizz\nfmt\nfolly\ngoogletest\nlibsodium\nwangle\nzstd\nmvfst\nxxhash\n# Thrift also depends on openssl but since the latter requires a platform-\n# specific configuration we rely on the folly manifest to provide this\n# dependency to avoid duplication.\n\n[shipit.pathmap]\nxplat/thrift/public_tld = .\nxplat/thrift = thrift\n\n[shipit.strip]\n^xplat/thrift/thrift-config\\.h$\n^xplat/thrift/perf/canary.py$\n^xplat/thrift/perf/loadtest.py$\n^xplat/thrift/.castle/.*\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fbthrift-python",
    "content": "[manifest]\nname = fbthrift-python\nfbsource_path = xplat/thrift\nshipit_project = fbthrift\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/fbthrift.git\n\n[cargo]\ncargo_config_file =  source/thrift/lib/rust/.cargo/config.toml\n\n[crate.pathmap]\nfbthrift = thrift/lib/rust\n\n[build]\nbuilder = cmake\njob_weight_mib = 2048\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines.all(not(os=windows),test=on)]\nenable_tests=ON\n\n[cmake.defines.any(os=windows,test=off)]\nenable_tests=OFF\n\n[cmake.defines.os=linux]\nthrift_python=ON\nenable_tests=ON\n\n[dependencies]\nfizz-python\nfmt-python\nfolly-python\ngoogletest\nlibsodium\nwangle-python\nzstd-python\nmvfst-python\nxxhash\n# Thrift also depends on openssl but since the latter requires a platform-\n# specific configuration we rely on the folly manifest to provide this\n# dependency to avoid duplication.\n\n[dependencies.os=linux]\nlibaio-python\nlibevent-python\n\n[shipit.pathmap]\nxplat/thrift/public_tld = .\nxplat/thrift = thrift\n\n[shipit.strip]\n^xplat/thrift/thrift-config\\.h$\n^xplat/thrift/perf/canary.py$\n^xplat/thrift/perf/loadtest.py$\n^xplat/thrift/.castle/.*\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fizz",
    "content": "[manifest]\nname = fizz\nfbsource_path = fbcode/fizz\nshipit_project = fizz\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebookincubator/fizz.git\n\n[build]\nbuilder = cmake\nsubdir = fizz\n\n[cmake.defines]\nBUILD_EXAMPLES = OFF\n\n[cmake.defines.test=on]\nBUILD_TESTS = ON\n\n[cmake.defines.all(os=windows, test=on)]\nBUILD_TESTS = OFF\n\n[cmake.defines.test=off]\nBUILD_TESTS = OFF\n\n[dependencies]\nfolly\nliboqs\nlibsodium\nzlib\nzstd\n\n[dependencies.all(test=on, not(os=windows))]\ngoogletest\n\n[shipit.pathmap]\nfbcode/fizz/public_tld = .\nfbcode/fizz = fizz\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fizz-python",
    "content": "[manifest]\nname = fizz-python\nfbsource_path = fbcode/fizz\nshipit_project = fizz\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebookincubator/fizz.git\n\n[build]\nbuilder = cmake\nsubdir = fizz\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines]\nBUILD_EXAMPLES = OFF\n\n[cmake.defines.os=linux]\nCMAKE_POSITION_INDEPENDENT_CODE = ON\nBUILD_SHARED_LIBS = ON\n\n[cmake.defines.test=on]\nBUILD_TESTS = ON\n\n[cmake.defines.all(os=windows, test=on)]\nBUILD_TESTS = OFF\n\n[cmake.defines.test=off]\nBUILD_TESTS = OFF\n\n[dependencies]\nfolly-python\nliboqs\nlibsodium\nzlib-python\nzstd-python\n\n[dependencies.all(test=on, not(os=windows))]\ngoogletest\n\n[shipit.pathmap]\nfbcode/fizz/public_tld = .\nfbcode/fizz = fizz\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fmt",
    "content": "[manifest]\nname = fmt\n\n[download]\nurl = https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz\nsha256 = ea7de4299689e12b6dddd392f9896f08fb0777ac7168897a244a6d6085043fea\n\n[build]\nbuilder = cmake\nsubdir = fmt-12.1.0\n\n[cmake.defines]\nFMT_TEST = OFF\nFMT_DOC = OFF\n\n[homebrew]\nfmt\n\n[rpms.distro=fedora]\nfmt-devel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/fmt-python",
    "content": "[manifest]\nname = fmt-python\n\n[download]\nurl = https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz\nsha256 = ea7de4299689e12b6dddd392f9896f08fb0777ac7168897a244a6d6085043fea\n\n[build]\nbuilder = cmake\nsubdir = fmt-12.1.0\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines]\nFMT_TEST = OFF\nFMT_DOC = OFF\n# Build as shared library so Python extensions can find fmt symbols at runtime\n# (fmt uses -fvisibility=hidden, so static linking leaves symbols unexported)\nBUILD_SHARED_LIBS = ON\n\n[homebrew]\nfmt\n\n[rpms.distro=fedora]\nfmt-devel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/folly",
    "content": "[manifest]\nname = folly\nfbsource_path = fbcode/folly\nshipit_project = folly\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/folly.git\n\n[build]\nbuilder = cmake\njob_weight_mib = 1024\n\n[dependencies]\ngflags\nglog\ngoogletest\nboost\nlibdwarf\nlibevent\nlibsodium\ndouble-conversion\nfast_float\nfmt\nlz4\nsnappy\nzstd\n# no openssl or zlib in the linux case, why?\n# these are usually installed on the system\n# and are the easiest system deps to pull in.\n# In the future we want to be able to express\n# that a system dep is sufficient in the manifest\n# for eg: openssl and zlib, but for now we don't\n# have it.\n\n# macOS doesn't expose the openssl api so we need\n# to build our own.\n[dependencies.os=darwin]\nopenssl\n\n# Windows has neither openssl nor zlib, so we get\n# to provide both\n[dependencies.os=windows]\nopenssl\nzlib\n\n[dependencies.os=linux]\nlibaio\nlibiberty\nlibunwind\n\n# xz depends on autoconf which does not build on\n# Windows\n[dependencies.not(os=windows)]\nxz\n\n[shipit.pathmap]\nfbcode/folly/public_tld = .\nfbcode/folly = folly\n\n[shipit.strip]\n^fbcode/folly/folly-config\\.h$\n^fbcode/folly/public_tld/build/facebook_.*\n\n[cmake.defines]\nBUILD_SHARED_LIBS=OFF\n\n[cmake.defines.not(os=windows)]\nBOOST_LINK_STATIC=ON\n\n[cmake.defines.os=freebsd]\nLIBDWARF_FOUND=NO\n\n[cmake.defines.test=on]\nBUILD_TESTS=ON\nBUILD_BENCHMARKS=OFF\n\n[cmake.defines.test=off]\nBUILD_TESTS=OFF\nBUILD_BENCHMARKS=OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/folly-python",
    "content": "[manifest]\nname = folly-python\nfbsource_path = fbcode/folly\nshipit_project = folly\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/folly.git\n\n[build]\nbuilder = cmake\njob_weight_mib = 1024\n\n[build.not(os=linux)]\nbuilder = nop\n\n[dependencies]\ngflags\nglog\ngoogletest\nboost-python\nlibdwarf-python\nlibevent-python\nlibsodium\ndouble-conversion-python\nfast_float\nfmt-python\nlz4-python\nsnappy\nzstd-python\n# no openssl or zlib in the linux case, why?\n# these are usually installed on the system\n# and are the easiest system deps to pull in.\n# In the future we want to be able to express\n# that a system dep is sufficient in the manifest\n# for eg: openssl and zlib, but for now we don't\n# have it.\n\n# macOS doesn't expose the openssl api so we need\n# to build our own.\n[dependencies.os=darwin]\nopenssl\n\n# Windows has neither openssl nor zlib, so we get\n# to provide both\n[dependencies.os=windows]\nopenssl\nzlib\n\n[dependencies.os=linux]\nlibaio-python\nlibiberty-python\nlibunwind\n\n# xz depends on autoconf which does not build on\n# Windows\n[dependencies.not(os=windows)]\nxz\n\n[shipit.pathmap]\nfbcode/folly/public_tld = .\nfbcode/folly = folly\n\n[shipit.strip]\n^fbcode/folly/folly-config\\.h$\n^fbcode/folly/public_tld/build/facebook_.*\n\n[cmake.defines.os=linux]\nPYTHON_EXTENSIONS=ON\nBUILD_SHARED_LIBS=ON\n\n[cmake.defines.not(os=windows)]\nBOOST_LINK_STATIC=ON\n\n[cmake.defines.os=freebsd]\nLIBDWARF_FOUND=NO\n\n[cmake.defines.test=on]\nBUILD_TESTS=ON\nBUILD_BENCHMARKS=OFF\n\n[cmake.defines.test=off]\nBUILD_TESTS=OFF\nBUILD_BENCHMARKS=OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/gcc12",
    "content": "[manifest]\nname = gcc12\n\n[rpms.all(distro=centos_stream,distro_vers=9)]\ngcc-toolset-12\n"
  },
  {
    "path": "build/fbcode_builder/manifests/gcc14",
    "content": "[manifest]\nname = gcc14\n\n[rpms.all(distro=centos_stream,distro_vers=9)]\ngcc-toolset-14\n"
  },
  {
    "path": "build/fbcode_builder/manifests/gflags",
    "content": "[manifest]\nname = gflags\n\n[download]\nurl = https://github.com/gflags/gflags/archive/v2.2.2.tar.gz\nsha256 = 34af2f15cf7367513b352bdcd2493ab14ce43692d2dcd9dfc499492966c64dcf\n\n[build]\nbuilder = cmake\nsubdir = gflags-2.2.2\n\n[cmake.defines]\nBUILD_SHARED_LIBS = ON\nBUILD_STATIC_LIBS = ON\n#BUILD_gflags_nothreads_LIB = OFF\nBUILD_gflags_LIB = ON\n\n[homebrew]\ngflags\n\n[debs]\nlibgflags-dev\n\n[rpms.distro=fedora]\ngflags-devel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/ghc",
    "content": "[manifest]\nname = ghc\n\n[download.os=linux]\nurl = https://downloads.haskell.org/~ghc/9.2.8/ghc-9.2.8-x86_64-fedora27-linux.tar.xz\nsha256 = 845f63cd365317bb764d81025554a2527dbe315d6fa268c9859e21b911bf2d3c\n\n[build]\nbuilder = autoconf\nsubdir = ghc-9.2.8\nbuild_in_src_dir = true\nonly_install = true\n\n[make.install_args]\ninstall\n"
  },
  {
    "path": "build/fbcode_builder/manifests/git-lfs",
    "content": "[manifest]\nname = git-lfs\n\n[rpms]\ngit-lfs\n\n[debs]\ngit-lfs\n\n[homebrew]\ngit-lfs\n\n# only used from system packages currently\n[build]\nbuilder = nop\n"
  },
  {
    "path": "build/fbcode_builder/manifests/glean",
    "content": "[manifest]\nname = glean\nfbsource_path = fbcode/glean\nshipit_project = facebookincubator/Glean\nuse_shipit = true\n\n[shipit.pathmap]\n# These are only used by target determinator to trigger builds, the\n# real path mappings are in the ShipIt config.\nfbcode/glean = glean\nfbcode/common/hs = hsthrift\n\n[subprojects]\nhsthrift = hsthrift\n\n[dependencies]\ncabal\nghc\ngflags\nglog\nfolly\nrocksdb\nxxhash\nllvm\nclang\nre2\n\n[build]\nbuilder = make\n\n[make.build_args]\nsetup-folly\nsetup-folly-version\ncabal-update\nall\nglean-hie\nglass\nglean-clang\nEXTRA_GHC_OPTS=-j4 +RTS -A32m -n4m -RTS\nCABAL_CONFIG_FLAGS=-f-hack-tests -f-typescript-tests -f-python-tests -f-dotnet-tests -f-go-tests -f-rust-tests -f-java-lsif-tests -f-flow-tests -f-bundled-folly\n\n[make.install_args]\ninstall\n\n[make.test_args]\ntest\nEXTRA_GHC_OPTS=-j4 +RTS -A32m -n4m -RTS\nCABAL_CONFIG_FLAGS=-f-hack-tests -f-typescript-tests -f-python-tests -f-dotnet-tests -f-go-tests -f-rust-tests -f-java-lsif-tests -f-flow-tests -f-bundled-folly\n"
  },
  {
    "path": "build/fbcode_builder/manifests/glog",
    "content": "[manifest]\nname = glog\n\n[download]\nurl = https://github.com/google/glog/archive/v0.5.0.tar.gz\nsha256 = eede71f28371bf39aa69b45de23b329d37214016e2055269b3b5e7cfd40b59f5\n\n[build]\nbuilder = cmake\nsubdir = glog-0.5.0\n\n[dependencies]\ngflags\n\n[cmake.defines]\nBUILD_SHARED_LIBS=ON\nBUILD_TESTING=NO\nWITH_PKGCONFIG=ON\n\n[cmake.defines.os=freebsd]\nHAVE_TR1_UNORDERED_MAP=OFF\nHAVE_TR1_UNORDERED_SET=OFF\n\n[homebrew]\nglog\n\n# on ubuntu glog brings in liblzma-dev, which in turn breaks watchman tests\n[debs.not(distro=ubuntu)]\nlibgoogle-glog-dev\n\n[rpms.distro=fedora]\nglog-devel\n\n"
  },
  {
    "path": "build/fbcode_builder/manifests/googletest",
    "content": "[manifest]\nname = googletest\n\n[download]\nurl = https://github.com/google/googletest/archive/refs/tags/v1.17.0.tar.gz\nsha256 = 65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c\n\n[build]\nbuilder = cmake\nsubdir = googletest-1.17.0\n\n[cmake.defines]\n# Everything else defaults to the shared runtime, so tell gtest that\n# it should not use its choice of the static runtime\ngtest_force_shared_crt=ON\n\n[cmake.defines.os=windows]\nBUILD_SHARED_LIBS=ON\n\n[homebrew]\ngoogletest\n\n# packaged googletest is too old\n[debs.not(all(distro=ubuntu,any(distro_vers=\"18.04\",distro_vers=\"20.04\",distro_vers=\"22.04\")))]\nlibgtest-dev\nlibgmock-dev\n\n[rpms.distro=fedora]\ngmock-devel\ngtest-devel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/gperf",
    "content": "[manifest]\nname = gperf\n\n[download]\nurl = https://ftpmirror.gnu.org/gnu/gperf/gperf-3.1.tar.gz\nsha256 = 588546b945bba4b70b6a3a616e80b4ab466e3f33024a352fc2198112cdbb3ae2\n\n[build.not(os=windows)]\nbuilder = autoconf\nsubdir = gperf-3.1\n\n[build.os=windows]\nbuilder = nop\n"
  },
  {
    "path": "build/fbcode_builder/manifests/hexdump",
    "content": "[manifest]\nname = hexdump\n\n[rpms]\nutil-linux\n\n[debs]\nbsdmainutils\n\n# only used from system packages currently\n[build]\nbuilder = nop\n"
  },
  {
    "path": "build/fbcode_builder/manifests/hsthrift",
    "content": "[manifest]\nname = hsthrift\nfbsource_path = fbcode/common/hs\nshipit_project = facebookincubator/hsthrift\nuse_shipit = true\n\n[shipit.pathmap]\n# These are only used by target determinator to trigger builds, the\n# real path mappings are in the ShipIt config.\nfbcode/common/hs = .\n\n[dependencies]\ncabal\nghc\ngflags\nglog\nfolly\nfbthrift\nwangle\nfizz\nboost\n\n[build]\nbuilder = make\n\n[make.build_args]\nsetup-folly\nsetup-meta\ncabal-update\nall\n\n[make.install_args]\ninstall\n\n[make.test_args]\ntest\n"
  },
  {
    "path": "build/fbcode_builder/manifests/iproute2",
    "content": "[manifest]\nname = iproute2\n\n[download]\nurl = https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/iproute2-4.12.0.tar.gz\nsha256 = 46612a1e2d01bb31932557bccdb1b8618cae9a439dfffc08ef35ed8e197f14ce\n\n[build.os=linux]\nbuilder = iproute2\nsubdir = iproute2-4.12.0\npatchfile = iproute2_oss.patch\n\n[build.not(os=linux)]\nbuilder = nop\n"
  },
  {
    "path": "build/fbcode_builder/manifests/jom",
    "content": "# jom is compatible with MSVC nmake, but adds the /j<number of jobs> argment which \n# speeds up openssl build a lot\n[manifest]\nname = jom\n\n# see https://download.qt.io/official_releases/jom/changelog.txt for latest version\n[download.os=windows]\nurl = https://download.qt.io/official_releases/jom/jom_1_1_4.zip\nsha256 = d533c1ef49214229681e90196ed2094691e8c4a0a0bef0b2c901debcb562682b\n\n[build.os=windows]\nbuilder = nop\n\n[install.files.os=windows]\n. = bin\n"
  },
  {
    "path": "build/fbcode_builder/manifests/jq",
    "content": "[manifest]\nname = jq\n\n[rpms.distro=fedora]\njq\n\n[homebrew]\njq\n\n[download.not(os=windows)]\n# we use jq-1.7+ to get fix for number truncation https://github.com/jqlang/jq/pull/1752\nurl = https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-1.7.1.tar.gz\nsha256 = 478c9ca129fd2e3443fe27314b455e211e0d8c60bc8ff7df703873deeee580c2\n\n[build.not(os=windows)]\nbuilder = autoconf\nsubdir = jq-1.7.1\n\n[build.os=windows]\nbuilder = nop\n\n[autoconf.args]\n# This argument turns off some developers tool and it is recommended in jq's\n# README\n--disable-maintainer-mode\n"
  },
  {
    "path": "build/fbcode_builder/manifests/katran",
    "content": "[manifest]\nname = katran\nfbsource_path = fbcode/katran\nshipit_project = katran\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebookincubator/katran.git\n\n[build.not(os=linux)]\nbuilder = nop\n\n[build.os=linux]\nbuilder = cmake\nsubdir = .\n\n[cmake.defines.test=on]\nBUILD_TESTS=ON\n\n[cmake.defines.test=off]\nBUILD_TESTS=OFF\n\n[dependencies]\nfolly\nfizz\nlibbpf\nlibmnl\nzlib\ngoogletest\nfmt\n\n[debs]\nlibssl-dev\n\n[shipit.pathmap]\nfbcode/katran/public_root = .\nfbcode/katran = katran\n\n[shipit.strip]\n^fbcode/katran/facebook\n^fbcode/katran/OSS_SYNC\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libaio",
    "content": "[manifest]\nname = libaio\n\n[debs]\nlibaio-dev\n\n[rpms.distro=centos_stream]\nlibaio-devel\n\n[download]\nurl = https://pagure.io/libaio/archive/libaio-0.3.113/libaio-libaio-0.3.113.tar.gz\nsha256 = 716c7059703247344eb066b54ecbc3ca2134f0103307192e6c2b7dab5f9528ab\n\n[build]\nbuilder = make\nsubdir = libaio-libaio-0.3.113\n\n[make.build_args.shared_libs=off]\nENABLE_SHARED=0\n\n[make.install_args]\ninstall\n\n[make.install_args.shared_libs=off]\nENABLE_SHARED=0\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libaio-python",
    "content": "[manifest]\nname = libaio-python\n\n[debs]\nlibaio-dev\n\n[rpms.distro=centos_stream]\nlibaio-devel\n\n[download]\nurl = https://pagure.io/libaio/archive/libaio-0.3.113/libaio-libaio-0.3.113.tar.gz\nsha256 = 716c7059703247344eb066b54ecbc3ca2134f0103307192e6c2b7dab5f9528ab\n\n[build]\nbuilder = make\nsubdir = libaio-libaio-0.3.113\n\n[build.not(os=linux)]\nbuilder = nop\n\n[make.build_args]\nCFLAGS=-fPIC -O2\n\n[make.install_args]\ninstall\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libbpf",
    "content": "[manifest]\nname = libbpf\n\n[download]\nurl = https://github.com/libbpf/libbpf/archive/refs/tags/v1.6.2.tar.gz\nsha256 = 16f31349c70764cba8e0fad3725cc9f52f6cf952554326aa0229daaa21ef4fbd\n\n# BPF only builds on linux, so make it a NOP on other platforms\n[build.not(os=linux)]\nbuilder = nop\n\n[build.os=linux]\nbuilder = make\nsubdir = libbpf-1.6.2/src\n\n[make.build_args]\nBUILD_STATIC_ONLY=y\n\n# libbpf-0.3 requires uapi headers >= 5.8\n[make.install_args]\ninstall\ninstall_uapi_headers\nBUILD_STATIC_ONLY=y\n\n[dependencies]\nlibelf\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libcurl",
    "content": "[manifest]\nname = libcurl\n\n[rpms]\nlibcurl-devel\nlibcurl-minimal\n\n[debs]\nlibcurl4-openssl-dev\n\n[pps]\nlibcurl-gnutls\n\n[download]\nurl = https://curl.haxx.se/download/curl-7.65.1.tar.gz\nsha256 = 821aeb78421375f70e55381c9ad2474bf279fc454b791b7e95fc83562951c690\n\n[dependencies]\nnghttp2\n\n# We use system OpenSSL on Linux (see folly's manifest for details)\n[dependencies.not(os=linux)]\nopenssl\n\n[build.not(os=windows)]\nbuilder = autoconf\nsubdir = curl-7.65.1\n\n[autoconf.args]\n# fboss (which added the libcurl dep) doesn't need ldap so it is disabled here.\n# if someone in the future wants to add ldap for something else, it won't hurt\n# fboss. However, that would require adding an ldap manifest.\n#\n# For the same reason, we disable libssh2 and libidn2 which aren't really used\n# but would require adding manifests if we don't disable them.\n--disable-ldap\n--without-libssh2\n--without-libidn2\n\n[build.os=windows]\nbuilder = cmake\nsubdir = curl-7.65.1\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libdwarf",
    "content": "[manifest]\nname = libdwarf\n\n[rpms]\nlibdwarf-devel\nlibdwarf\n\n[debs]\nlibdwarf-dev\n\n[homebrew]\ndwarfutils\n\n[download]\nurl = https://www.prevanders.net/libdwarf-0.9.2.tar.xz\nsha256 = 22b66d06831a76f6a062126cdcad3fcc58540b89a1acb23c99f8861f50999ec3\n\n[build]\nbuilder = cmake\nsubdir = libdwarf-0.9.2\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libdwarf-python",
    "content": "[manifest]\nname = libdwarf-python\n\n[rpms]\nlibdwarf-devel\nlibdwarf\n\n[debs]\nlibdwarf-dev\n\n[homebrew]\ndwarfutils\n\n[download]\nurl = https://www.prevanders.net/libdwarf-0.9.2.tar.xz\nsha256 = 22b66d06831a76f6a062126cdcad3fcc58540b89a1acb23c99f8861f50999ec3\n\n[build]\nbuilder = cmake\nsubdir = libdwarf-0.9.2\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines]\nCMAKE_POSITION_INDEPENDENT_CODE=ON\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libelf",
    "content": "[manifest]\nname = libelf\n\n[rpms]\nelfutils-libelf-devel-static\n\n[debs]\nlibelf-dev\n\n[pps]\nlibelf\n\n[download]\nurl = https://sourceware.org/elfutils/ftp/0.193/elfutils-0.193.tar.bz2\nsha256 = 7857f44b624f4d8d421df851aaae7b1402cfe6bcdd2d8049f15fc07d3dde7635\n\n# libelf only makes sense on linux, so make it a NOP on other platforms\n[build.not(os=linux)]\nbuilder = nop\n\n[build.os=linux]\nbuilder = autoconf\nsubdir = elfutils-0.193\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libevent",
    "content": "[manifest]\nname = libevent\n\n[debs]\nlibevent-dev\n\n[homebrew]\nlibevent\n\n[rpms]\nlibevent-devel\n\n[pps]\nlibevent\n\n# Note that the CMakeLists.txt file is present only in\n# git repo and not in the release tarball, so take care\n# to use the github generated source tarball rather than\n# the explicitly uploaded source tarball\n[download]\nurl = https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz\nsha256 = 92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb\n\n[build]\nbuilder = cmake\nsubdir = libevent-2.1.12-stable\n\n[cmake.defines]\nEVENT__DISABLE_TESTS = ON\nEVENT__DISABLE_BENCHMARK = ON\nEVENT__DISABLE_SAMPLES = ON\nEVENT__DISABLE_REGRESS = ON\n\n[cmake.defines.shared_libs=on]\nEVENT__BUILD_SHARED_LIBRARIES = ON\n\n[cmake.defines.shared_libs=off]\nEVENT__LIBRARY_TYPE = STATIC\n\n[cmake.defines.os=windows]\nEVENT__LIBRARY_TYPE = STATIC\n\n[dependencies.not(any(os=linux, os=freebsd))]\nopenssl\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libevent-python",
    "content": "[manifest]\nname = libevent-python\n\n# NOTE: System packages (debs, rpms) removed because they don't include\n# LibeventConfig.cmake which is required by find_package(Libevent REQUIRED CONFIG).\n# Building from source ensures CMake config files are present.\n\n[homebrew]\nlibevent\n\n[pps]\nlibevent\n\n# Note that the CMakeLists.txt file is present only in\n# git repo and not in the release tarball, so take care\n# to use the github generated source tarball rather than\n# the explicitly uploaded source tarball\n[download]\nurl = https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz\nsha256 = 92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb\n\n[build]\nbuilder = cmake\nsubdir = libevent-2.1.12-stable\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines]\nEVENT__DISABLE_TESTS = ON\nEVENT__DISABLE_BENCHMARK = ON\nEVENT__DISABLE_SAMPLES = ON\nEVENT__DISABLE_REGRESS = ON\nCMAKE_POSITION_INDEPENDENT_CODE=ON\n\n[cmake.defines.shared_libs=on]\nEVENT__BUILD_SHARED_LIBRARIES = ON\n\n[cmake.defines.os=windows]\nEVENT__LIBRARY_TYPE = STATIC\n\n[dependencies.not(any(os=linux, os=freebsd))]\nopenssl\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libffi",
    "content": "[manifest]\nname = libffi\n\n[debs]\nlibffi-dev\n\n[homebrew]\nlibffi\n\n[rpms]\nlibffi-devel\nlibffi\n\n[pps]\nlibffi\n\n[download]\nurl = https://github.com/libffi/libffi/releases/download/v3.4.2/libffi-3.4.2.tar.gz\nsha256 = 540fb721619a6aba3bdeef7d940d8e9e0e6d2c193595bc243241b77ff9e93620\n\n[build]\nbuilder = autoconf\nsubdir = libffi-3.4.2\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libgit2",
    "content": "[manifest]\nname = libgit2\n\n[homebrew]\nlibgit2\n\n[rpms]\nlibgit2-devel\n\n[pps]\nlibgit2\n\n# Ubuntu 18.04 libgit2 has clash with libcurl4-openssl-dev as it depends on\n# libcurl4-gnutls-dev.  Should be ok from 20.04 again\n# There is a description at https://github.com/r-hub/sysreqsdb/issues/77\n[debs.not(all(distro=ubuntu,distro_vers=\"18.04\"))]\nlibgit2-dev\n\n[download]\nurl = https://github.com/libgit2/libgit2/archive/v0.28.1.tar.gz\nsha256 = 0ca11048795b0d6338f2e57717370208c2c97ad66c6d5eac0c97a8827d13936b\n\n[build]\nbuilder = cmake\nsubdir = libgit2-0.28.1\n\n[cmake.defines]\n# Could turn this on if we also wanted to add a manifest for libssh2\nUSE_SSH = OFF\nBUILD_CLAR = OFF\n# Have to build shared to work around annoying problems with cmake\n# mis-parsing the frameworks required to link this on macos :-/\nBUILD_SHARED_LIBS = ON\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libgpiod",
    "content": "[manifest]\nname = libgpiod\n\n[download]\nurl = https://cdn.kernel.org/pub/software/libs/libgpiod/libgpiod-1.6.tar.xz\nsha256 = 62908023d59e8cbb9137ddd14deec50ced862d8f9b8749f288d3dbe7967151ef\n\n[build]\nbuilder = autoconf\nsubdir = libgpiod-1.6\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libiberty",
    "content": "[manifest]\nname = libiberty\n\n[rpms]\nbinutils-devel\nbinutils\n\n[debs.not(all(distro=ubuntu,distro_vers=\"24.04\"))]\nbinutils-dev\n\n[debs.all(distro=ubuntu,distro_vers=\"24.04\")]\nbinutils-x86-64-linux-gnu\n\n[download]\nurl = https://ftpmirror.gnu.org/gnu/binutils/binutils-2.43.tar.xz\nsha256 = b53606f443ac8f01d1d5fc9c39497f2af322d99e14cea5c0b4b124d630379365\n\n[dependencies]\nzlib\n\n[build]\nbuilder = autoconf\nsubdir = binutils-2.43/libiberty\npatchfile = libiberty_install_pic_lib.patch\n\n# only build the parts needed for demangling\n# as we still want to use system linker and assembler etc\n[autoconf.args]\n--enable-install-libiberty\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libiberty-python",
    "content": "[manifest]\nname = libiberty-python\n\n[rpms]\nbinutils-devel\nbinutils\n\n[debs.not(all(distro=ubuntu,distro_vers=\"24.04\"))]\nbinutils-dev\n\n[debs.all(distro=ubuntu,distro_vers=\"24.04\")]\nbinutils-x86-64-linux-gnu\n\n[download]\nurl = https://ftpmirror.gnu.org/gnu/binutils/binutils-2.43.tar.xz\nsha256 = b53606f443ac8f01d1d5fc9c39497f2af322d99e14cea5c0b4b124d630379365\n\n[dependencies]\nzlib-python\n\n[build]\nbuilder = autoconf\nsubdir = binutils-2.43/libiberty\npatchfile = libiberty_install_pic_lib.patch\n\n[build.not(os=linux)]\nbuilder = nop\n\n# only build the parts needed for demangling\n# as we still want to use system linker and assembler etc\n[autoconf.args]\n--enable-install-libiberty\nCFLAGS=-fPIC -O2\nPICFLAG=-fPIC\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libibverbs",
    "content": "[manifest]\nname = libibverbs\n\n[debs]\nlibibverbs-dev\nrdma-core\n\n[rpms]\nlibibverbs\nrdma-core-devel\n\n[download]\nurl = https://github.com/linux-rdma/rdma-core/releases/download/v60.0/rdma-core-60.0.tar.gz\nsha256 = 9b1b892e4eaaaa5dfbade07a290fbf5079e39117724fa1ef80d0ad78839328de\n\n[build]\nbuilder = cmake\nsubdir = rdma-core-60.0\n\n[dependencies]\nlibnl\n\n[cmake.defines]\nNO_MAN_PAGES=1\nNO_PYVERBS=1\nENABLE_RESOLVE_NEIGH=0\n# Use absolute short path for runtime dir to avoid Unix socket path length limit (108 chars)\nCMAKE_INSTALL_RUNDIR=/tmp/ibacm\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libmnl",
    "content": "[manifest]\nname = libmnl\n\n[rpms]\nlibmnl-devel\n\n# all centos 8 distros are missing this,\n# but its in fedora so may be back in a later version\n[rpms.not(all(any(distro=centos_stream,distro=centos),distro_vers=8))]\nlibmnl-static\n\n[debs]\nlibmnl-dev\n\n[pps]\nlibmnl\n\n[download]\nurl = https://www.netfilter.org/pub/libmnl/libmnl-1.0.4.tar.bz2\nsha256 = 171f89699f286a5854b72b91d06e8f8e3683064c5901fb09d954a9ab6f551f81\n\n[build.os=linux]\nbuilder = autoconf\nsubdir = libmnl-1.0.4\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libnl",
    "content": "[manifest]\nname = libnl\n\n[rpms]\nlibnl3-devel\nlibnl3\n\n[debs]\nlibnl-3-dev\nlibnl-route-3-dev\n\n[pps]\nlibnl\n\n[download]\nurl = https://github.com/thom311/libnl/releases/download/libnl3_2_25/libnl-3.2.25.tar.gz\nsha256 = 8beb7590674957b931de6b7f81c530b85dc7c1ad8fbda015398bc1e8d1ce8ec5\n\n[build.os=linux]\nbuilder = autoconf\nsubdir = libnl-3.2.25\n"
  },
  {
    "path": "build/fbcode_builder/manifests/liboqs",
    "content": "[manifest]\nname = liboqs\n\n[download]\nurl = https://github.com/open-quantum-safe/liboqs/archive/refs/tags/0.12.0.tar.gz\nsha256 = df999915204eb1eba311d89e83d1edd3a514d5a07374745d6a9e5b2dd0d59c08\n\n[build]\nbuilder = cmake\nsubdir = liboqs-0.12.0\n\n[cmake.defines]\nOQS_MINIMAL_BUILD = KEM_kyber_512;KEM_kyber_768;KEM_kyber_1024;KEM_ml_kem_512;KEM_ml_kem_768;KEM_ml_kem_1024\n\n[dependencies]\nopenssl\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libsai",
    "content": "[manifest]\nname = libsai\n\n[download]\nurl = https://github.com/opencomputeproject/SAI/archive/v1.16.3.tar.gz\nsha256 = 5c89cdb6b2e4f1b42ced6b78d43d06d22434ddbf423cdc551f7c2001f12e63d9\n\n[build]\nbuilder = nop\nsubdir = SAI-1.16.3\n\n[install.files]\ninc = include\nexperimental = experimental\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libsodium",
    "content": "[manifest]\nname = libsodium\n\n[debs]\nlibsodium-dev\n\n[homebrew]\nlibsodium\n\n[rpms]\nlibsodium-devel\nlibsodium-static\n\n[pps]\nlibsodium\n\n[download.not(os=windows)]\nurl = https://github.com/jedisct1/libsodium/releases/download/1.0.20-RELEASE/libsodium-1.0.20.tar.gz\nsha256 = ebb65ef6ca439333c2bb41a0c1990587288da07f6c7fd07cb3a18cc18d30ce19\n\n[build.not(os=windows)]\nbuilder = autoconf\nsubdir = libsodium-1.0.20\n\n[download.os=windows]\nurl = https://github.com/jedisct1/libsodium/releases/download/1.0.20-RELEASE/libsodium-1.0.20-msvc.zip\nsha256 = 2ff97f9e3f5b341bdc808e698057bea1ae454f99e29ff6f9b62e14d0eb1b1baa\n\n[build.os=windows]\nbuilder = nop\n\n[install.files.os=windows]\nlibsodium/x64/Release/v143/dynamic/libsodium.dll = bin/libsodium.dll\nlibsodium/x64/Release/v143/dynamic/libsodium.lib = lib/libsodium.lib\nlibsodium/x64/Release/v143/dynamic/libsodium.exp = lib/libsodium.exp\nlibsodium/x64/Release/v143/dynamic/libsodium.pdb = lib/libsodium.pdb\nlibsodium/include = include\n\n[autoconf.args]\n--with-pic\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libunwind",
    "content": "[manifest]\nname = libunwind\n\n[rpms]\nlibunwind-devel\nlibunwind\n\n# on ubuntu this brings in liblzma-dev, which in turn breaks watchman tests\n[debs.not(distro=ubuntu)]\nlibunwind-dev\n\n# The current libunwind v1.8.1 release has compiler issues with aarch64 (https://github.com/libunwind/libunwind/issues/702).\n# This more recent libunwind version (based on the latest commit, not a release version) got it fixed.\n[download]\nurl = https://github.com/libunwind/libunwind/archive/f081cf42917bdd5c428b77850b473f31f81767cf.tar.gz\nsha256 = 4ff5c335c02d225491d6c885db827fb5fa505fee4e68b4d7e866efc0087e7264\n\n[build]\nbuilder = autoconf\nsubdir = libunwind-f081cf42917bdd5c428b77850b473f31f81767cf\n\n[autoconf.args]\n--with-pic\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libusb",
    "content": "[manifest]\nname = libusb\n\n[debs]\nlibusb-1.0-0-dev\n\n[homebrew]\nlibusb\n\n[rpms]\nlibusb-devel\nlibusb\n\n[pps]\nlibusb\n\n[download]\nurl = https://github.com/libusb/libusb/releases/download/v1.0.22/libusb-1.0.22.tar.bz2\nsha256 = 75aeb9d59a4fdb800d329a545c2e6799f732362193b465ea198f2aa275518157\n\n[build.os=linux]\nbuilder = autoconf\nsubdir = libusb-1.0.22\n\n[autoconf.args]\n# fboss (which added the libusb dep) doesn't need udev so it is disabled here.\n# if someone in the future wants to add udev for something else, it won't hurt\n# fboss.\n--disable-udev\n"
  },
  {
    "path": "build/fbcode_builder/manifests/libyaml",
    "content": "[manifest]\nname = libyaml\n\n[download]\nurl = https://pyyaml.org/download/libyaml/yaml-0.1.7.tar.gz\nsha256 = 8088e457264a98ba451a90b8661fcb4f9d6f478f7265d48322a196cec2480729\n\n[build.os=linux]\nbuilder = autoconf\nsubdir = yaml-0.1.7\n\n[build.not(os=linux)]\nbuilder = nop\n"
  },
  {
    "path": "build/fbcode_builder/manifests/llvm",
    "content": "[manifest]\nname = llvm\n\n[rpms]\nllvm15-devel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/lmdb",
    "content": "[manifest]\nname = lmdb\n\n[build]\nbuilder = make\nsubdir = lmdb-LMDB_0.9.31/libraries/liblmdb\n\n[download]\nurl = https://github.com/LMDB/lmdb/archive/refs/tags/LMDB_0.9.31.tar.gz\nsha256 = dd70a8c67807b3b8532b3e987b0a4e998962ecc28643e1af5ec77696b081c9b0\n\n[make.build_args]\nBUILD_STATIC_ONLY=y\n\n[make.install_args]\ninstall\nBUILD_STATIC_ONLY=y\n"
  },
  {
    "path": "build/fbcode_builder/manifests/lz4",
    "content": "[manifest]\nname = lz4\n\n[homebrew]\nlz4\n\n[rpms]\nlz4-devel\n# centos 8 and centos_stream 9 are missing this rpm\n[rpms.not(any(all(distro=centos,distro_vers=8),all(distro=centos_stream,distro_vers=9)))]\nlz4-static\n\n[debs]\nliblz4-dev\n\n[pps]\nlz4\n\n[download]\nurl = https://github.com/lz4/lz4/releases/download/v1.10.0/lz4-1.10.0.tar.gz\nsha256 = 537512904744b35e232912055ccf8ec66d768639ff3abe5788d90d792ec5f48b\n\n[build]\nbuilder = cmake\nsubdir = lz4-1.10.0/build/cmake\n"
  },
  {
    "path": "build/fbcode_builder/manifests/lz4-python",
    "content": "[manifest]\nname = lz4-python\n\n[homebrew]\nlz4\n\n[rpms]\nlz4-devel\n# centos 8 and centos_stream 9 are missing this rpm\n[rpms.not(any(all(distro=centos,distro_vers=8),all(distro=centos_stream,distro_vers=9)))]\nlz4-static\n\n[debs]\nliblz4-dev\n\n[pps]\nlz4\n\n[download]\nurl = https://github.com/lz4/lz4/releases/download/v1.10.0/lz4-1.10.0.tar.gz\nsha256 = 537512904744b35e232912055ccf8ec66d768639ff3abe5788d90d792ec5f48b\n\n[build]\nbuilder = cmake\nsubdir = lz4-1.10.0/build/cmake\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines]\nCMAKE_POSITION_INDEPENDENT_CODE=ON\n"
  },
  {
    "path": "build/fbcode_builder/manifests/magic_enum",
    "content": "[manifest]\nname = magic_enum\n\n[download]\nurl = https://github.com/Neargye/magic_enum/releases/download/v0.9.7/magic_enum-v0.9.7.tar.gz\nsha256 = c047bc7ca0b76752168140e7ae9a4a30d72bf6530c196fdfbf5105a39d40cc46\n\n[build]\nbuilder = cmake\n\n[cmake.defines]\nMAGIC_ENUM_OPT_BUILD_EXAMPLES = OFF\nMAGIC_ENUM_OPT_BUILD_TESTS = OFF\nMAGIC_ENUM_OPT_INSTALL = ON\n"
  },
  {
    "path": "build/fbcode_builder/manifests/mcrouter",
    "content": "[manifest]\nname = mcrouter\nfbsource_path = fbcode/mcrouter\nshipit_project = mcrouter\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/mcrouter.git\n\n[dependencies]\nfolly\nwangle\nfizz\nfbthrift\nmvfst\nragel\ngflags\nglog\nboost\nlibevent\nopenssl\nzlib\ndouble-conversion\n\n[shipit.pathmap]\nfbcode/mcrouter/public_tld = .\nfbcode/mcrouter = mcrouter\n\n[shipit.strip]\n^fbcode/mcrouter/(.*/)?facebook/\n\n[build]\nbuilder = cmake\n\n[cmake.defines]\nBUILD_SHARED_LIBS=OFF\n\n[cmake.defines.test=on]\nBUILD_TESTS=ON\n\n[cmake.defines.test=off]\nBUILD_TESTS=OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/mononoke",
    "content": "[manifest]\nname = mononoke\nfbsource_path = fbcode/eden\nshipit_project = eden\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/sapling.git\n\n[build.not(os=windows)]\nbuilder = cargo\n\n[build.os=windows]\n# building Mononoke on windows is not supported\nbuilder = nop\n\n[cargo]\nbuild_doc = true\nworkspace_dir = eden/mononoke\n\n[github.actions]\nrust_version = 1.91\nbuild_type = MinSizeRel\n\n[shipit.pathmap]\nfbcode/configerator/structs/scm/hg = configerator/structs/scm/hg\nfbcode/configerator/structs/scm/hg/public_autocargo = configerator/structs/scm/hg\nfbcode/configerator/structs/scm/mononoke/public_autocargo = configerator/structs/scm/mononoke\nfbcode/configerator/structs/scm/mononoke = configerator/structs/scm/mononoke\nfbcode/eden/oss = .\nfbcode/eden = eden\nfbcode/eden/fs/public_autocargo = eden/fs\nfbcode/eden/mononoke/public_autocargo = eden/mononoke\nfbcode/eden/scm/public_autocargo = eden/scm\nfbcode/tools/lfs = tools/lfs\ntools/rust/ossconfigs = .\n\n[shipit.strip]\n^fbcode/configerator/structs/scm/hg(?!/public_autocargo).*/Cargo\\.toml$\n^fbcode/configerator/structs/scm/mononoke(?!/public_autocargo).*/Cargo\\.toml$\n^fbcode/eden/fs(?!/public_autocargo).*/Cargo\\.toml$\n^fbcode/eden/scm/lib/third-party/rust/.*/Cargo\\.toml$\n^fbcode/eden/mononoke(?!/public_autocargo).*/Cargo\\.toml$\n# strip other scm code  unrelated to mononoke to prevent triggering unnecessary checks\n^fbcode/eden(?!/mononoke|/scm/(lib|public_autocargo))/.*$\n^.*/facebook/.*$\n^.*/fb/.*$\n\n[dependencies]\nfb303\nfbthrift\nrust-shed\n\n[dependencies.fb=on]\nrust\n"
  },
  {
    "path": "build/fbcode_builder/manifests/mononoke_integration",
    "content": "[manifest]\nname = mononoke_integration\nfbsource_path = fbcode/eden\nshipit_project = eden\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/sapling.git\n\n[build.not(os=windows)]\nbuilder = make\nsubdir = eden/mononoke/tests/integration\n\n[build.os=windows]\n# building Mononoke on windows is not supported\nbuilder = nop\n\n[make.build_args]\nbuild-getdeps\n\n[make.install_args]\ninstall-getdeps\n\n[make.test_args]\ntest-getdeps\n\n[shipit.pathmap]\nfbcode/eden/mononoke/tests/integration = eden/mononoke/tests/integration\n\n[shipit.strip]\n^.*/facebook/.*$\n^.*/fb/.*$\n\n[dependencies]\ngit-lfs\njq\nmononoke\nnmap\npython\npython-click\nripgrep\nsapling\ntree\nzstd\n\n[dependencies.os=linux]\nsqlite3\n"
  },
  {
    "path": "build/fbcode_builder/manifests/moxygen",
    "content": "[manifest]\nname = moxygen\nfbsource_path = fbcode/moxygen\nshipit_project = moxygen\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebookexperimental/moxygen.git\n\n[build.os=windows]\nbuilder = nop\n\n[build]\nbuilder = cmake\nsubdir = .\njob_weight_mib = 3072\nrewrite_includes = true\n\n[cmake.defines.test=on]\nBUILD_TESTS = ON\n\n[cmake.defines.test=off]\nBUILD_TESTS = OFF\n\n[dependencies]\nfolly\nfizz\nwangle\nmvfst\nproxygen\n\n[dependencies.test=on]\ngoogletest\n\n[shipit.pathmap]\nfbcode/ti/experimental/moxygen/project_root = .\nfbcode/ti/experimental/moxygen = moxygen\n"
  },
  {
    "path": "build/fbcode_builder/manifests/mvfst",
    "content": "[manifest]\nname = mvfst\nfbsource_path = fbcode/quic\nshipit_project = mvfst\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/mvfst.git\n\n[build]\nbuilder = cmake\nsubdir = .\n\n[cmake.defines.test=on]\nBUILD_TESTS = ON\n\n[cmake.defines.all(os=windows, test=on)]\nBUILD_TESTS = OFF\n\n[cmake.defines.test=off]\nBUILD_TESTS = OFF\n\n[dependencies]\nfolly\nfizz\n\n[dependencies.all(test=on, not(os=windows))]\ngoogletest\n\n[shipit.pathmap]\nfbcode/quic/public_root = .\nfbcode/quic = quic\n"
  },
  {
    "path": "build/fbcode_builder/manifests/mvfst-python",
    "content": "[manifest]\nname = mvfst-python\nfbsource_path = fbcode/quic\nshipit_project = mvfst\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/mvfst.git\n\n[build]\nbuilder = cmake\nsubdir = .\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines.test=on]\nBUILD_TESTS = ON\n\n[cmake.defines.all(os=windows, test=on)]\nBUILD_TESTS = OFF\n\n[cmake.defines.test=off]\nBUILD_TESTS = OFF\n\n[cmake.defines.os=linux]\nCMAKE_POSITION_INDEPENDENT_CODE = ON\nBUILD_SHARED_LIBS = ON\n\n[dependencies]\nfolly-python\nfizz-python\n\n[dependencies.all(test=on, not(os=windows))]\ngoogletest\n\n[shipit.pathmap]\nfbcode/quic/public_root = .\nfbcode/quic = quic\n"
  },
  {
    "path": "build/fbcode_builder/manifests/ncurses",
    "content": "[manifest]\nname = ncurses\n\n[debs]\nlibncurses-dev\n\n[homebrew]\nncurses\n\n[rpms]\nncurses-devel\n\n[download]\nurl = https://ftpmirror.gnu.org/gnu/ncurses/ncurses-6.3.tar.gz\nsha256 = 97fc51ac2b085d4cde31ef4d2c3122c21abc217e9090a43a30fc5ec21684e059\n\n[build.not(os=windows)]\nbuilder = autoconf\nsubdir = ncurses-6.3\n\n[autoconf.args]\n--without-cxx-binding\n--without-ada\n\n[autoconf.args.os=linux]\n--enable-shared\n--with-shared\n\n[build.os=windows]\nbuilder = nop\n"
  },
  {
    "path": "build/fbcode_builder/manifests/nghttp2",
    "content": "[manifest]\nname = nghttp2\n\n[rpms]\nlibnghttp2-devel\nlibnghttp2\n\n[debs]\nlibnghttp2-dev\n\n[pps]\nlibnghttp2\n\n[download]\nurl = https://github.com/nghttp2/nghttp2/releases/download/v1.47.0/nghttp2-1.47.0.tar.gz\nsha256 = 62f50f0e9fc479e48b34e1526df8dd2e94136de4c426b7680048181606832b7c\n\n[build]\nbuilder = autoconf\nsubdir = nghttp2-1.47.0\n\n[autoconf.args]\n--enable-lib-only\n--disable-dependency-tracking\n"
  },
  {
    "path": "build/fbcode_builder/manifests/ninja",
    "content": "[manifest]\nname = ninja\n\n[debs]\nninja-build\n\n[homebrew]\nninja\n\n[rpms]\nninja-build\n\n[pps]\nninja\n\n[download.os=windows]\nurl = https://github.com/ninja-build/ninja/releases/download/v1.12.1/ninja-win.zip\nsha256 = f550fec705b6d6ff58f2db3c374c2277a37691678d6aba463adcbb129108467a\n\n[build.os=windows]\nbuilder = nop\n\n[install.files.os=windows]\nninja.exe = bin/ninja.exe\n\n[download.not(os=windows)]\nurl = https://github.com/ninja-build/ninja/archive/v1.12.1.tar.gz\nsha256 = 821bdff48a3f683bc4bb3b6f0b5fe7b2d647cf65d52aeb63328c91a6c6df285a\n\n[build.not(os=windows)]\nbuilder = ninja_bootstrap\nsubdir = ninja-1.12.1"
  },
  {
    "path": "build/fbcode_builder/manifests/nlohmann-json",
    "content": "[manifest]\nname = nlohmann-json\n\n[download]\nurl = https://github.com/nlohmann/json/archive/refs/tags/v3.10.5.tar.gz\nsha256 = 5daca6ca216495edf89d167f808d1d03c4a4d929cef7da5e10f135ae1540c7e4\n\n[dependencies]\n\n[build]\nbuilder = cmake\nsubdir = json-3.10.5\n"
  },
  {
    "path": "build/fbcode_builder/manifests/nmap",
    "content": "[manifest]\nname = nmap\n\n[rpms]\nnmap\nnmap-ncat\n\n[debs]\nnmap\n\n# 18.04 combines ncat into the nmap package, newer need the separate one\n[debs.not(all(distro=ubuntu,distro_vers=\"18.04\"))]\nncat\n\n[download.not(os=windows)]\nurl = https://api.github.com/repos/nmap/nmap/tarball/ef8213a36c2e89233c806753a57b5cd473605408\nsha256 = eda39e5a8ef4964fac7db16abf91cc11ff568eac0fa2d680b0bfa33b0ed71f4a\n\n[build.not(os=windows)]\nbuilder = autoconf\nsubdir = nmap-nmap-ef8213a\nbuild_in_src_dir = true\n\n[build.os=windows]\nbuilder = nop\n\n[autoconf.args]\n# Without this option the build was filing to find some third party libraries\n# that we don't need\nenable_rdma=no\n"
  },
  {
    "path": "build/fbcode_builder/manifests/numa",
    "content": "[manifest]\nname = numa\n\n[download]\nurl = https://github.com/numactl/numactl/releases/download/v2.0.19/numactl-2.0.19.tar.gz\nsha256 = f2672a0381cb59196e9c246bf8bcc43d5568bc457700a697f1a1df762b9af884\n\n[build]\nbuilder = autoconf\nsubdir = numactl-2.0.19\n\n[rpms.distro=centos_stream]\nnumactl-devel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/openr",
    "content": "[manifest]\nname = openr\nfbsource_path = facebook/openr\nshipit_project = openr\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/openr.git\n\n[build.os=linux]\nbuilder = cmake\n# openr files take a lot of RAM to compile.\njob_weight_mib = 3072\n\n[build.not(os=linux)]\n# boost.fiber is required and that is not available on macos.\nbuilder = nop\n\n[dependencies]\nboost\nfb303\nfbthrift\nfolly\ngoogletest\nre2\nrange-v3\n\n[cmake.defines.test=on]\nBUILD_TESTS=ON\nADD_ROOT_TESTS=OFF\n\n[cmake.defines.test=off]\nBUILD_TESTS=OFF\n\n\n[shipit.pathmap]\nfbcode/openr = openr\nfbcode/openr/public_tld = .\n"
  },
  {
    "path": "build/fbcode_builder/manifests/openssl",
    "content": "[manifest]\nname = openssl\n\n[debs]\nlibssl-dev\n\n[homebrew]\nopenssl\n# on homebrew need the matching curl and ca-\n\n[rpms]\nopenssl\nopenssl-devel\nopenssl-libs\n\n[pps]\nopenssl\n\n# no need to download on the systems where we always use the system libs\n[download.not(any(os=linux, os=freebsd))]\n# match the openssl version packages in ubuntu LTS folly current supports\nurl = https://www.openssl.org/source/openssl-3.0.15.tar.gz\nsha256 = 23c666d0edf20f14249b3d8f0368acaee9ab585b09e1de82107c66e1f3ec9533\n\n# We use the system openssl on these platforms even without --allow-system-packages\n[build.any(os=linux, os=freebsd)]\nbuilder = nop\n\n[build.not(any(os=linux, os=freebsd))]\nbuilder = openssl\nsubdir = openssl-3.0.15\n\n[dependencies.os=windows]\njom\nperl\n"
  },
  {
    "path": "build/fbcode_builder/manifests/osxfuse",
    "content": "[manifest]\nname = osxfuse\n\n[download]\nurl = https://github.com/osxfuse/osxfuse/archive/osxfuse-3.8.3.tar.gz\nsha256 = 93bab6731bdfe8dc1ef069483437270ce7fe5a370f933d40d8d0ef09ba846c0c\n\n[build]\nbuilder = nop\n\n[install.files]\nosxfuse-osxfuse-3.8.3/common = include\n"
  },
  {
    "path": "build/fbcode_builder/manifests/patchelf",
    "content": "[manifest]\nname = patchelf\n\n[rpms]\npatchelf\n\n[debs]\npatchelf\n\n[pps]\npatchelf\n\n[download]\nurl = https://github.com/NixOS/patchelf/archive/0.10.tar.gz\nsha256 = b3cb6bdedcef5607ce34a350cf0b182eb979f8f7bc31eae55a93a70a3f020d13\n\n[build]\nbuilder = autoconf\nsubdir = patchelf-0.10\n\n"
  },
  {
    "path": "build/fbcode_builder/manifests/pcre2",
    "content": "[manifest]\nname = pcre2\n\n[homebrew]\npcre2\n\n[rpms]\npcre2-devel\npcre-static\n\n[debs]\nlibpcre2-dev\n\n[download]\nurl = https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.40/pcre2-10.40.tar.bz2\nsha256 = 14e4b83c4783933dc17e964318e6324f7cae1bc75d8f3c79bc6969f00c159d68\n\n[build]\nbuilder = cmake\nsubdir = pcre2-10.40\n"
  },
  {
    "path": "build/fbcode_builder/manifests/perl",
    "content": "[manifest]\nname = perl\n\n[download.os=windows]\nurl = https://strawberryperl.com/download/5.28.1.1/strawberry-perl-5.28.1.1-64bit-portable.zip\nsha256 = 935c95ba096fa11c4e1b5188732e3832d330a2a79e9882ab7ba8460ddbca810d\n\n[build.os=windows]\nbuilder = nop\nsubdir = perl\n"
  },
  {
    "path": "build/fbcode_builder/manifests/pexpect",
    "content": "[manifest]\nname = pexpect\n\n[download]\nurl = https://files.pythonhosted.org/packages/0e/3e/377007e3f36ec42f1b84ec322ee12141a9e10d808312e5738f52f80a232c/pexpect-4.7.0-py2.py3-none-any.whl\nsha256 = 2094eefdfcf37a1fdbfb9aa090862c1a4878e5c7e0e7e7088bdb511c558e5cd1\n\n[build]\nbuilder = python-wheel\n\n[dependencies]\npython-ptyprocess\n"
  },
  {
    "path": "build/fbcode_builder/manifests/proxygen",
    "content": "[manifest]\nname = proxygen\nfbsource_path = fbcode/proxygen\nshipit_project = proxygen\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/proxygen.git\n\n[build.os=windows]\nbuilder = nop\n\n[build]\nbuilder = cmake\nsubdir = .\njob_weight_mib = 3072\n\n[cmake.defines.test=on]\nBUILD_TESTS = ON\n\n[cmake.defines.test=off]\nBUILD_TESTS = OFF\n\n[dependencies]\nzlib\ngperf\nfolly\nfizz\nwangle\nmvfst\nc-ares\n\n[dependencies.test=on]\ngoogletest\n\n[shipit.pathmap]\nfbcode/proxygen/public_tld = .\nfbcode/proxygen = proxygen\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python",
    "content": "[manifest]\nname = python\n\n[homebrew]\npython@3.10\n\n# sapling needs match statements with arrive in python 3.12 in centos 10\n[rpms.not(all(distro=centos_stream,distro_vers=9))]\npython3\npython3-devel\n\n# Centos Stream 9 default python is 3.9, sapling needs 3.10+\n[rpms.all(distro=centos_stream,distro_vers=9)]\npython3.12\npython3.12-devel\n\n# sapling needs match statements with arrive in python 3.10 in ubuntu 22.04\n[debs.not(all(distro=ubuntu,any(distro_vers=\"18.04\",distro_vers=\"20.04\")))]\npython3-all-dev\n\n[pps]\npython3\n\n[download]\nurl = https://www.python.org/ftp/python/3.10.19/Python-3.10.19.tgz\nsha256 = a078fb2d7a216071ebbe2e34b5f5355dd6b6e9b0cd1bacc4a41c63990c5a0eec\n\n[build]\nbuilder = autoconf\nsubdir = Python-3.10.19\n\n[autoconf.args]\n--enable-shared\n--with-ensurepip=install\n\n# python's pkg-config libffi detection is broken\n# See https://bugs.python.org/issue34823 for clearest description\n# and pending PR https://github.com/python/cpython/pull/20451\n# The documented workaround requires an environment variable derived from\n# pkg-config to be passed into its configure step\n[autoconf.envcmd.LDFLAGS]\npkg-config\n--libs-only-L\nlibffi\n\n[dependencies]\nlibffi\n# eden tests expect the python bz2 support\nbz2\n# eden tests expect the python curses support\nncurses\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-3_14",
    "content": "# This is primarily to support CinderX's CI, so it's not heavily configured.\n\n[manifest]\nname = python-3_14\n\n[download]\nurl = https://github.com/python/cpython/archive/refs/tags/v3.14.3.tar.gz\nsha256 = f229a232052ae318d2fc8eb0aca4a02d631e7e1a8790ef1f9b65e1632743a469\n\n[build]\nbuilder = autoconf\nsubdir = cpython-3.14.3\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-click",
    "content": "[manifest]\nname = python-click\n\n[download]\nurl = https://files.pythonhosted.org/packages/d2/3d/fa76db83bf75c4f8d338c2fd15c8d33fdd7ad23a9b5e57eb6c5de26b430e/click-7.1.2-py2.py3-none-any.whl\nsha256 = dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc\n\n[build]\nbuilder = python-wheel\n\n[rpms]\npython3-click\n\n[debs]\npython3-click\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-filelock",
    "content": "[manifest]\nname = python-filelock\n\n[download]\nurl = https://files.pythonhosted.org/packages/31/24/ee722b92f23b9ebd87783e893a75352c048bbbc1f67dce0d63b58b46cb48/filelock-3.3.2-py3-none-any.whl\nsha256 = bb2a1c717df74c48a2d00ed625e5a66f8572a3a30baacb7657add1d7bac4097b\n\n[build]\nbuilder = python-wheel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-main",
    "content": "# This is primarily to support CinderX's CI, so it's not heavily configured.\n\n[manifest]\nname = python-main\nfbsource_path = third-party/python/main/pristine\n# We don't actually have a shipit project for python-main, but we use getdeps\n# built-in shipit implementation which just needs a shipit.pathmap.\nshipit_project = dummy-name\n\n\n[git]\nrepo_url = https://github.com/python/cpython.git\n\n[shipit.pathmap]\nthird-party/python/main/pristine = .\n\n[build]\nbuilder = autoconf\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-psutil",
    "content": "[manifest]\nname = python-psutil\n\n[download]\nurl = https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl\nsha256 = 4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34\n\n[build]\nbuilder = python-wheel\n\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-ptyprocess",
    "content": "[manifest]\nname = python-ptyprocess\n\n[download]\nurl = https://files.pythonhosted.org/packages/d1/29/605c2cc68a9992d18dada28206eeada56ea4bd07a239669da41674648b6f/ptyprocess-0.6.0-py2.py3-none-any.whl\nsha256 = d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f\n\n[build]\nbuilder = python-wheel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-pyyaml",
    "content": "[manifest]\nname = python-pyyaml\n\n[download]\nurl = https://files.pythonhosted.org/packages/25/a2/b725b61ac76a75583ae7104b3209f75ea44b13cfd026aa535ece22b7f22e/PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl\nsha256 = 22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6\n\n[build]\nbuilder = python-wheel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-setuptools",
    "content": "[manifest]\nname = python-setuptools\n\n[download]\nurl = https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl\nsha256 = 062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922\n\n[build]\nbuilder = python-wheel\n\n[rpms]\npython3-setuptools\n\n# Centos Stream 9 default python is 3.9, sapling needs 3.10+\n[rpms.all(distro=centos_stream,distro_vers=9)]\npython3.12-setuptools\n\n[homebrew]\npython-setuptools\n\n[debs]\npython3-setuptools\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-setuptools-69",
    "content": "[manifest]\nname = python-setuptools-69\n\n[download]\nurl = https://files.pythonhosted.org/packages/c0/7a/3da654f49c95d0cc6e9549a855b5818e66a917e852ec608e77550c8dc08b/setuptools-69.1.1-py3-none-any.whl\nsha256 = 02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56\n\n[build]\nbuilder = python-wheel\n\n[rpms]\npython3-setuptools\n\n[homebrew]\npython-setuptools\n\n[debs]\npython3-setuptools\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-six",
    "content": "[manifest]\nname = python-six\n\n[download]\nurl = https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl\nsha256 = 3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c\n\n[build]\nbuilder = python-wheel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/python-toml",
    "content": "[manifest]\nname = python-toml\n\n[download]\nurl = https://files.pythonhosted.org/packages/a2/12/ced7105d2de62fa7c8fb5fce92cc4ce66b57c95fb875e9318dba7f8c5db0/toml-0.10.0-py2.py3-none-any.whl\nsha256 = 235682dd292d5899d361a811df37e04a8828a5b1da3115886b73cf81ebc9100e\n\n[build]\nbuilder = python-wheel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/ragel",
    "content": "[manifest]\nname = ragel\n\n[debs]\nragel\n\n[homebrew]\nragel\n\n[rpms]\nragel\n\n[download]\nurl = https://www.colm.net/files/ragel/ragel-6.10.tar.gz\nsha256 = 5f156edb65d20b856d638dd9ee2dfb43285914d9aa2b6ec779dac0270cd56c3f\n\n[build]\nbuilder = autoconf\nsubdir = ragel-6.10\n"
  },
  {
    "path": "build/fbcode_builder/manifests/range-v3",
    "content": "[manifest]\nname = range-v3\n\n[download]\nurl = https://github.com/ericniebler/range-v3/archive/refs/tags/0.11.0.tar.gz\nsha256 = 376376615dbba43d3bef75aa590931431ecb49eb36d07bb726a19f680c75e20c \n\n\n[build]\nbuilder = cmake\nsubdir = range-v3-0.11.0\n\n[cmake.defines]\nRANGE_V3_EXAMPLES=OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/rdma-core",
    "content": "[manifest]\nname = rdma-core\n\n[debs]\nrdma-core\n\n[rpms]\nrdma-core-devel\n"
  },
  {
    "path": "build/fbcode_builder/manifests/re2",
    "content": "[manifest]\nname = re2\n\n[homebrew]\nre2\n\n[debs]\nlibre2-dev\n\n[rpms]\nre2\nre2-devel\n\n[pps]\nre2\n\n[download]\nurl = https://github.com/google/re2/archive/2020-11-01.tar.gz\nsha256 = 8903cc66c9d34c72e2bc91722288ebc7e3ec37787ecfef44d204b2d6281954d7\n\n[build]\nbuilder = cmake\nsubdir = re2-2020-11-01\n"
  },
  {
    "path": "build/fbcode_builder/manifests/rebalancer",
    "content": "[manifest]\nname = rebalancer\nfbsource_path = fbcode/algopt/rebalancer/\nshipit_project = rebalancer\nshipit_fbcode_builder = true\nuse_shipit = true\n\n[git]\n# To git clone on devserver, setup fwdproxy:\n# https://www.internalfb.com/wiki/Open_Source/Maintain_a_FB_OSS_Project/Devserver_GitHub_Access/\nrepo_url = https://github.com/facebookincubator/rebalancer.git\nbranch = main\n\n[build]\nbuilder = cmake\n\n[dependencies]\nboost\nfbthrift\nfizz\nfmt\nfolly\ngflags\nglog\ngoogletest\nxxhash\n\n[dependencies.os=linux]\nclang19\n\n[cmake.defines.os=linux]\nCMAKE_C_COMPILER=clang-19\nCMAKE_CXX_COMPILER=clang++-19\n\n[cmake.defines.os=darwin]\nREBALANCER_USE_SCIP=0\n\n[shipit.strip]\n^.*/fb/.*$\n\n[shipit.pathmap]\nfbcode/algopt/rebalancer/oss_root = .\nfbcode/algopt/rebalancer = algopt/rebalancer\nfbcode/algopt/lp = algopt/lp\n\n[dependencies.all(distro=centos_stream,distro_vers=9)]\nclang19\n\n[cmake.defines.all(distro=centos_stream,distro_vers=9)]\nCMAKE_C_COMPILER=clang-19\nCMAKE_CXX_COMPILER=clang++-19\n"
  },
  {
    "path": "build/fbcode_builder/manifests/ripgrep",
    "content": "[manifest]\nname = ripgrep\n\n[rpms]\nripgrep\n\n[debs]\nripgrep\n\n[homebrew]\nripgrep\n\n# only used from system packages currently\n[build]\nbuilder = nop\n"
  },
  {
    "path": "build/fbcode_builder/manifests/rocksdb",
    "content": "[manifest]\nname = rocksdb\n\n[download]\nurl = https://github.com/facebook/rocksdb/archive/refs/tags/v8.7.3.zip\nsha256 = 36c06b61dc167f2455990d60dd88d734b73aa8c4dfc095243efd0243834c6cd3\n\n[dependencies]\nlz4\nsnappy\n\n[build]\nbuilder = cmake\nsubdir = rocksdb-8.7.3\n\n[cmake.defines]\nWITH_SNAPPY=ON\nWITH_LZ4=ON\nWITH_TESTS=OFF\nWITH_BENCHMARK_TOOLS=OFF\n# We get relocation errors with the static gflags lib,\n# and there's no clear way to make it pick the shared gflags\n# so just turn it off.\nWITH_GFLAGS=OFF\n# Disable the use of -Werror\nFAIL_ON_WARNINGS = OFF\n\n[cmake.defines.os=windows]\nROCKSDB_INSTALL_ON_WINDOWS=ON\n# RocksDB hard codes the paths to the snappy libs to something\n# that doesn't exist; ignoring the usual cmake rules.  As a result,\n# we can't build it with snappy without either patching rocksdb or\n# without introducing more complex logic to the build system to\n# connect the snappy build outputs to rocksdb's custom logic here.\n# Let's just turn it off on windows.\nWITH_SNAPPY=OFF\nWITH_LZ4=ON\nROCKSDB_SKIP_THIRDPARTY=ON\n"
  },
  {
    "path": "build/fbcode_builder/manifests/rust-shed",
    "content": "[manifest]\nname = rust-shed\nfbsource_path = fbcode/common/rust/shed\nshipit_project = rust-shed\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebookexperimental/rust-shed.git\n\n[build]\nbuilder = cargo\n\n[cargo]\nbuild_doc = true\nworkspace_dir =\n\n[shipit.pathmap]\nfbcode/common/rust/shed = shed\nfbcode/common/rust/shed/public_autocargo = shed\nfbcode/common/rust/shed/public_tld = .\ntools/rust/ossconfigs = .\n\n[shipit.strip]\n^fbcode/common/rust/shed/(?!public_autocargo|public_tld).+/Cargo\\.toml$\n\n[dependencies]\nfbthrift\nfb303\n\n# We use the system openssl on linux\n[dependencies.not(os=linux)]\nopenssl\n\n[dependencies.fbsource=on]\nrust\n"
  },
  {
    "path": "build/fbcode_builder/manifests/sapling",
    "content": "[manifest]\nname = sapling\nfbsource_path = fbcode/eden\nshipit_project = eden\nshipit_fbcode_builder = true\n\n[github.actions]\nrequired_locales = en_US.UTF-8\n\n[git]\nrepo_url = https://github.com/facebook/sapling.git\n\n[build.not(os=windows)]\nbuilder = make\nsubdir = eden/scm\n\n[build.os=windows]\n# For now the biggest blocker is missing \"make\" on windows, but there are bound\n# to be more\nbuilder = nop\n\n[make.build_args]\ngetdepsbuild\n\n[make.install_args]\ninstall-getdeps\n\n[make.test_args]\ntest-getdeps\n\n[shipit.pathmap]\nfbcode/configerator/structs/scm/hg = configerator/structs/scm/hg\nfbcode/configerator/structs/scm/hg/public_autocargo = configerator/structs/scm/hg\nfbcode/eden/oss = .\nfbcode/eden = eden\nfbcode/eden/fs/public_autocargo = eden/fs\nfbcode/eden/mononoke/public_autocargo = eden/mononoke\nfbcode/eden/scm/public_autocargo = eden/scm\nfbcode/tools/lfs = tools/lfs\n\n[shipit.strip]\n^fbcode/configerator/structs/scm/hg(?!/public_autocargo).*/Cargo\\.toml$\n^fbcode/eden/addons/.*$\n^fbcode/eden/fs/eden-config\\.h$\n^fbcode/eden/fs/py/eden/config\\.py$\n^fbcode/eden/hg-server/.*$\n^fbcode/eden/fs(?!/public_autocargo).*/Cargo\\.toml$\n^fbcode/eden/mononoke(?!/public_autocargo).*/Cargo\\.toml$\n^fbcode/eden/scm(?!/public_autocargo|/edenscmnative/bindings).*/Cargo\\.toml$\n^fbcode/eden/scm/build/.*$\n^fbcode/eden/website/.*$\n^fbcode/eden/.*/\\.cargo/.*$\n^.*/facebook/.*$\n^.*/fb/.*$\n/Cargo\\.lock$\n\\.pyc$\n\n[dependencies]\nfb303\nfbthrift\nrust-shed\n\n[dependencies.all(test=on,not(os=darwin))]\nhexdump\n\n[dependencies.not(os=windows)]\npython\npython-setuptools\n\n# We use the system openssl on linux\n[dependencies.not(os=linux)]\nopenssl\n\n[dependencies.fbsource=on]\nrust\n"
  },
  {
    "path": "build/fbcode_builder/manifests/snappy",
    "content": "[manifest]\nname = snappy\n\n[homebrew]\nsnappy\n\n[debs]\nlibsnappy-dev\n\n[rpms]\nsnappy-devel\n\n[pps]\nsnappy\n\n[download]\nurl = https://github.com/google/snappy/archive/1.1.7.tar.gz\nsha256 = 3dfa02e873ff51a11ee02b9ca391807f0c8ea0529a4924afa645fbf97163f9d4\n\n[build]\nbuilder = cmake\nsubdir = snappy-1.1.7\n\n[cmake.defines]\nSNAPPY_BUILD_TESTS = OFF\n\n# Avoid problems like `relocation R_X86_64_PC32 against symbol` on ELF systems\n# when linking rocksdb, which builds PIC even when building a static lib\n[cmake.defines.os=linux]\nBUILD_SHARED_LIBS = ON\n"
  },
  {
    "path": "build/fbcode_builder/manifests/sparsemap",
    "content": "[manifest]\nname = sparsemap\n\n[download]\nurl = https://github.com/Tessil/sparse-map/archive/refs/tags/v0.6.2.tar.gz\nsha256 = 7020c21e8752e59d72e37456cd80000e18671c803890a3e55ae36b295eba99f6\n\n[build]\nbuilder = cmake\nsubdir = sparse-map-0.6.2/\n"
  },
  {
    "path": "build/fbcode_builder/manifests/sqlite3",
    "content": "[manifest]\nname = sqlite3\n\n[debs]\nlibsqlite3-dev\nsqlite3\n\n[homebrew]\nsqlite\n\n[rpms]\nsqlite-devel\nsqlite-libs\nsqlite\n\n[pps]\nsqlite3\n\n[download]\nurl = https://sqlite.org/2019/sqlite-amalgamation-3280000.zip\nsha256 = d02fc4e95cfef672b45052e221617a050b7f2e20103661cda88387349a9b1327\n\n[dependencies]\ncmake\nninja\n\n[build]\nbuilder = sqlite\nsubdir = sqlite-amalgamation-3280000\n"
  },
  {
    "path": "build/fbcode_builder/manifests/systemd",
    "content": "[manifest]\nname = systemd\n\n[rpms]\nsystemd\nsystemd-devel\n\n\n[download]\nurl = https://github.com/systemd/systemd/archive/refs/tags/v256.7.tar.gz\nsha256 = 896d76ff65c88f5fd9e42f90d152b0579049158a163431dd77cdc57748b1d7b0\n\n[build.os=linux]\nbuilder = meson\nsubdir = systemd-256.7\n\n[meson.setup_args]\n-Dstatic-libsystemd=true\n-Dprefix=/\n"
  },
  {
    "path": "build/fbcode_builder/manifests/tabulate",
    "content": "[manifest]\nname = tabulate\n\n[download]\nurl = https://github.com/p-ranav/tabulate/archive/refs/tags/v1.5.tar.gz\nsha256 = 16b289f46306283544bb593f4601e80d6ea51248fde52e910cc569ef08eba3fb\n\n[build]\nbuilder = cmake\nsubdir = tabulate-1.5\n\n[cmake.defines]\ntabulate_BUILD_TESTS = OFF\ntabulate_BUILD_SAMPLES = OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/tree",
    "content": "[manifest]\nname = tree\n\n[debs]\ntree\n\n[homebrew]\ntree\n\n[rpms]\ntree\n\n[download.os=linux]\nurl = https://salsa.debian.org/debian/tree-packaging/-/archive/debian/1.8.0-1/tree-packaging-debian-1.8.0-1.tar.gz\nsha256 = a841eee1d52bfd64a48f54caab9937b9bd92935055c48885c4ab1ae4dab7fae5\n\n[download.os=darwin]\n# The official package of tree source requires users of non-Linux platform to\n# comment/uncomment certain lines in the Makefile to build for their platform.\n# Besauce getdeps.py doesn't have that functionality we just use this custom\n# fork of tree which has proper lines uncommented for a OSX build\nurl = https://github.com/lukaspiatkowski/tree-command/archive/debian/1.8.0-1-macos.tar.gz\nsha256 = 9cbe889553d95cf5a2791dd0743795d46a3c092c5bba691769c0e5c52e11229e\n\n[build.os=linux]\nbuilder = make\nsubdir = tree-packaging-debian-1.8.0-1\n\n[build.os=darwin]\nbuilder = make\nsubdir = tree-command-debian-1.8.0-1-macos\n\n[build.os=windows]\nbuilder = nop\n\n[make.install_args]\ninstall\n"
  },
  {
    "path": "build/fbcode_builder/manifests/wangle",
    "content": "[manifest]\nname = wangle\nfbsource_path = fbcode/wangle\nshipit_project = wangle\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/wangle.git\n\n[build]\nbuilder = cmake\nsubdir = wangle\n\n[cmake.defines.test=on]\nBUILD_TESTS=ON\n\n[cmake.defines.test=off]\nBUILD_TESTS=OFF\n\n[dependencies]\nfolly\ngoogletest\nfizz\n\n[shipit.pathmap]\nfbcode/wangle/public_tld = .\nfbcode/wangle = wangle\n"
  },
  {
    "path": "build/fbcode_builder/manifests/wangle-python",
    "content": "[manifest]\nname = wangle-python\nfbsource_path = fbcode/wangle\nshipit_project = wangle\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/wangle.git\n\n[build]\nbuilder = cmake\nsubdir = wangle\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines.test=on]\nBUILD_TESTS=ON\n\n[cmake.defines.test=off]\nBUILD_TESTS=OFF\n\n[cmake.defines.os=linux]\nCMAKE_POSITION_INDEPENDENT_CODE = ON\nBUILD_SHARED_LIBS = ON\n\n[dependencies]\nfolly-python\ngoogletest\nfizz-python\n\n[shipit.pathmap]\nfbcode/wangle/public_tld = .\nfbcode/wangle = wangle\n"
  },
  {
    "path": "build/fbcode_builder/manifests/watchman",
    "content": "[manifest]\nname = watchman\nfbsource_path = fbcode/watchman\nshipit_project = watchman\nshipit_fbcode_builder = true\n\n[git]\nrepo_url = https://github.com/facebook/watchman.git\n\n[build]\nbuilder = cmake\n\n[dependencies]\nboost\ncpptoml\nedencommon\nfb303\nfbthrift\nfolly\npcre2\ngoogletest\npython-setuptools-69\n\n[dependencies.fbsource=on]\nrust\n\n[shipit.pathmap]\nfbcode/watchman = watchman\nfbcode/watchman/oss = .\nfbcode/eden/fs = eden/fs\n\n[shipit.strip]\n^fbcode/eden/fs/(?!.*\\.thrift|service/shipit_test_file\\.txt)\n\n[cmake.defines.fb=on]\nENABLE_EDEN_SUPPORT=ON\nIS_FB_BUILD=ON\n\n# FB macos specific settings\n[cmake.defines.all(fb=on,os=darwin)]\n# this path is coupled with the FB internal watchman-osx.spec\nWATCHMAN_STATE_DIR=/opt/facebook/watchman/var/run/watchman\n# tell cmake not to try to create /opt/facebook/...\nINSTALL_WATCHMAN_STATE_DIR=OFF\nUSE_SYS_PYTHON=OFF\n\n[depends.environment]\nWATCHMAN_VERSION_OVERRIDE\n"
  },
  {
    "path": "build/fbcode_builder/manifests/xxhash",
    "content": "[manifest]\nname = xxhash\n\n[download]\nurl = https://github.com/Cyan4973/xxHash/archive/refs/tags/v0.8.2.tar.gz\nsha256 = baee0c6afd4f03165de7a4e67988d16f0f2b257b51d0e3cb91909302a26a79c4\n\n[rpms]\nxxhash-devel\n\n[debs]\nlibxxhash-dev\nxxhash\n\n[homebrew]\nxxhash\n\n[build]\nbuilder = cmake\nsubdir = xxHash-0.8.2/cmake_unofficial\n\n[cmake.defines]\nCMAKE_POSITION_INDEPENDENT_CODE = ON\n"
  },
  {
    "path": "build/fbcode_builder/manifests/xz",
    "content": "[manifest]\nname = xz\n\n# ubuntu's package causes watchman's tests to hang\n[debs.not(distro=ubuntu)]\nliblzma-dev\n\n[homebrew]\nxz\n\n[rpms]\nxz-devel\n\n[download]\nurl = https://tukaani.org/xz/xz-5.2.5.tar.gz\nsha256 = f6f4910fd033078738bd82bfba4f49219d03b17eb0794eb91efbae419f4aba10\n\n[build]\nbuilder = autoconf\nsubdir = xz-5.2.5\n\n[autoconf.args]\n--with-pic\n"
  },
  {
    "path": "build/fbcode_builder/manifests/yaml-cpp",
    "content": "[manifest]\nname = yaml-cpp\n\n[download]\nurl = https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-0.6.2.tar.gz\nsha256 = e4d8560e163c3d875fd5d9e5542b5fd5bec810febdcba61481fe5fc4e6b1fd05\n\n[build.os=linux]\nbuilder = cmake\nsubdir = yaml-cpp-yaml-cpp-0.6.2\n\n[build.not(os=linux)]\nbuilder = nop\n\n[dependencies]\nboost\ngoogletest\n\n[cmake.defines]\nYAML_CPP_BUILD_TESTS=OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/zlib",
    "content": "[manifest]\nname = zlib\n\n[debs]\nzlib1g-dev\n\n[homebrew]\nzlib\n\n[rpms.not(distro=fedora)]\nzlib-devel\nzlib-static\n\n[rpms.distro=fedora]\nzlib-ng-compat-devel\nzlib-ng-compat-static\n\n[pps]\nzlib\n\n[download]\nurl = https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz\nsha256 = 9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23\n\n[build]\nbuilder = cmake\nsubdir = zlib-1.3.1\npatchfile = zlib_dont_build_more_than_needed.patch\n"
  },
  {
    "path": "build/fbcode_builder/manifests/zlib-python",
    "content": "[manifest]\nname = zlib-python\n\n[debs]\nzlib1g-dev\n\n[homebrew]\nzlib\n\n[rpms.not(distro=fedora)]\nzlib-devel\nzlib-static\n\n[rpms.distro=fedora]\nzlib-ng-compat-devel\nzlib-ng-compat-static\n\n[pps]\nzlib\n\n[download]\nurl = https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz\nsha256 = 9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23\n\n[build]\nbuilder = cmake\nsubdir = zlib-1.3.1\npatchfile = zlib_dont_build_more_than_needed.patch\n\n[build.not(os=linux)]\nbuilder = nop\n\n[cmake.defines]\nCMAKE_POSITION_INDEPENDENT_CODE=ON\n"
  },
  {
    "path": "build/fbcode_builder/manifests/zstd",
    "content": "[manifest]\nname = zstd\n\n[homebrew]\nzstd\n\n# 18.04 zstd is too old\n[debs.not(all(distro=ubuntu,distro_vers=\"18.04\"))]\nlibclang-dev\nlibzstd-dev\nzstd\n\n[rpms]\nlibzstd-devel\nlibzstd\n\n[pps]\nzstd\n\n[download]\nurl = https://github.com/facebook/zstd/releases/download/v1.5.5/zstd-1.5.5.tar.gz\nsha256 = 9c4396cc829cfae319a6e2615202e82aad41372073482fce286fac78646d3ee4\n\n[build]\nbuilder = cmake\nsubdir = zstd-1.5.5/build/cmake\n\n# The zstd cmake build explicitly sets the install name\n# for the shared library in such a way that cmake discards\n# the path to the library from the install_name, rendering\n# the library non-resolvable during the build.  The short\n# term solution for this is just to link static on macos.\n#\n# And while we're at it, let's just always link statically.\n[cmake.defines]\nZSTD_BUILD_SHARED = OFF\n"
  },
  {
    "path": "build/fbcode_builder/manifests/zstd-python",
    "content": "[manifest]\nname = zstd-python\n\n[homebrew]\nzstd\n\n# 18.04 zstd is too old\n[debs.not(all(distro=ubuntu,distro_vers=\"18.04\"))]\nlibclang-dev\nlibzstd-dev\nzstd\n\n[rpms]\nlibzstd-devel\nlibzstd\n\n[pps]\nzstd\n\n[download]\nurl = https://github.com/facebook/zstd/releases/download/v1.5.5/zstd-1.5.5.tar.gz\nsha256 = 9c4396cc829cfae319a6e2615202e82aad41372073482fce286fac78646d3ee4\n\n[build]\nbuilder = cmake\nsubdir = zstd-1.5.5/build/cmake\n\n[build.not(os=linux)]\nbuilder = nop\n\n# The zstd cmake build explicitly sets the install name\n# for the shared library in such a way that cmake discards\n# the path to the library from the install_name, rendering\n# the library non-resolvable during the build.  The short\n# term solution for this is just to link static on macos.\n#\n# And while we're at it, let's just always link statically.\n[cmake.defines]\nZSTD_BUILD_SHARED = OFF\nCMAKE_POSITION_INDEPENDENT_CODE=ON\n"
  },
  {
    "path": "build/fbcode_builder/patches/boost_1_83_0.patch",
    "content": "diff --git a/boost/serialization/strong_typedef.hpp b/boost/serialization/strong_typedef.hpp\n--- a/boost/serialization/strong_typedef.hpp\n+++ b/boost/serialization/strong_typedef.hpp\n@@ -44,6 +44,7 @@\n     operator const T&() const {return t;}                                                                        \\\n     operator T&() {return t;}                                                                                    \\\n     bool operator==(const D& rhs) const {return t == rhs.t;}                                                     \\\n+    bool operator==(const T& lhs) const {return t == lhs;}                                                       \\\n     bool operator<(const D& rhs) const {return t < rhs.t;}                                                       \\\n };\n \ndiff --git a/tools/build/src/tools/msvc.jam b/tools/build/src/tools/msvc.jam\n--- a/tools/build/src/tools/msvc.jam\n+++ b/tools/build/src/tools/msvc.jam\n@@ -1137,6 +1137,14 @@\n         }\n         else\n         {\n+            if [ MATCH \"(14.4)\" : $(version) ]\n+            {\n+                if $(.debug-configuration)\n+                {\n+                    ECHO \"notice: [generate-setup-cmd] $(version) is 14.4x\" ;\n+                }\n+                parent = [ path.native [ path.join  $(parent) \"..\\\\..\\\\..\\\\..\\\\..\\\\Auxiliary\\\\Build\" ] ] ;\n+            }\n             if [ MATCH \"(14.3)\" : $(version) ]\n             {\n                 if $(.debug-configuration)\n"
  },
  {
    "path": "build/fbcode_builder/patches/iproute2_oss.patch",
    "content": "diff --git a/bridge/fdb.c b/bridge/fdb.c\n--- a/bridge/fdb.c\n+++ b/bridge/fdb.c\n@@ -31,7 +31,7 @@\n\n static unsigned int filter_index, filter_vlan, filter_state;\n\n-json_writer_t *jw_global;\n+static json_writer_t *jw_global;\n\n static void usage(void)\n {\ndiff --git a/ip/ipmroute.c b/ip/ipmroute.c\n--- a/ip/ipmroute.c\n+++ b/ip/ipmroute.c\n@@ -44,7 +44,7 @@\n        exit(-1);\n }\n\n-struct rtfilter {\n+static struct rtfilter {\n        int tb;\n        int af;\n        int iif;\ndiff --git a/ip/xfrm_monitor.c b/ip/xfrm_monitor.c\n--- a/ip/xfrm_monitor.c\n+++ b/ip/xfrm_monitor.c\n@@ -34,7 +34,7 @@\n #include \"ip_common.h\"\n\n static void usage(void) __attribute__((noreturn));\n-int listen_all_nsid;\n+static int listen_all_nsid;\n\n static void usage(void)\n {\n"
  },
  {
    "path": "build/fbcode_builder/patches/libiberty_install_pic_lib.patch",
    "content": "diff --git a/Makefile.in b/Makefile.in\nindex b77a41c..cbe71fe 100644\n--- a/Makefile.in\n+++ b/Makefile.in\n@@ -389,7 +389,7 @@ MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`\n install_to_libdir: all\n        if test -n \"${target_header_dir}\"; then \\\n                ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR); \\\n-               $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n; \\\n+               $(INSTALL_DATA) pic/$(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n; \\\n                ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n ); \\\n                mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB); \\\n                case \"${target_header_dir}\" in \\\n"
  },
  {
    "path": "build/fbcode_builder/patches/zlib_dont_build_more_than_needed.patch",
    "content": "diff -Naur ../zlib-1.3.1/CMakeLists.txt ./CMakeLists.txt\n--- ../zlib-1.3.1/CMakeLists.txt\t2024-01-22 10:32:37.000000000 -0800\n+++ ./CMakeLists.txt\t2024-01-23 13:14:09.870289968 -0800\n@@ -149,10 +149,8 @@\n     set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)\n endif(MINGW)\n \n-add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})\n+add_library(zlib ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})\n target_include_directories(zlib PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})\n-add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})\n-target_include_directories(zlibstatic PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})\n set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)\n set_target_properties(zlib PROPERTIES SOVERSION 1)\n \n@@ -169,7 +167,7 @@\n \n if(UNIX)\n     # On unix-like platforms the library is almost always called libz\n-   set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z)\n+   set_target_properties(zlib PROPERTIES OUTPUT_NAME z)\n    if(NOT APPLE AND NOT(CMAKE_SYSTEM_NAME STREQUAL AIX))\n      set_target_properties(zlib PROPERTIES LINK_FLAGS \"-Wl,--version-script,\\\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\\\"\")\n    endif()\n@@ -179,7 +177,7 @@\n endif()\n \n if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )\n-    install(TARGETS zlib zlibstatic\n+    install(TARGETS zlib\n         RUNTIME DESTINATION \"${INSTALL_BIN_DIR}\"\n         ARCHIVE DESTINATION \"${INSTALL_LIB_DIR}\"\n         LIBRARY DESTINATION \"${INSTALL_LIB_DIR}\" )\n "
  },
  {
    "path": "clippy.toml",
    "content": "too-many-lines-threshold = 200\nawait-holding-invalid-types = [\n    { path = \"tracing::span::Entered\", reason = \"`Entered` is not aware when a function is suspended: https://docs.rs/tracing/latest/tracing/struct.Span.html#in-asynchronous-code\" },\n    { path = \"tracing::span::EnteredSpan\", reason = \"`EnteredSpan` is not aware when a function is suspended: https://docs.rs/tracing/latest/tracing/struct.Span.html#in-asynchronous-code\" },\n]\n"
  },
  {
    "path": "install-system-packages.sh",
    "content": "#!/bin/bash -e\n# vim:ts=2:sw=2:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nset -x\npython3 \"$(dirname \"$0\")/build/fbcode_builder/getdeps.py\" --allow-system-packages install-system-deps --recursive watchman\n"
  },
  {
    "path": "run-tests.sh",
    "content": "#!/bin/bash -e\n# vim:ts=2:sw=2:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nset -x\npython3 \"$(dirname \"$0\")/build/fbcode_builder/getdeps.py\" test --allow-system-packages --no-testpilot watchman\n"
  },
  {
    "path": "rustfmt.toml",
    "content": "# Get help on options with `rustfmt --help=config`\n# Please keep these in alphabetical order.\nedition = \"2024\"\nformat_code_in_doc_comments = true\ngroup_imports = \"StdExternalCrate\"\nimports_granularity = \"Item\"\nmerge_derives = false\nstyle_edition = \"2024\"\nuse_field_init_shorthand = true\n"
  },
  {
    "path": "watchman/.clang-format",
    "content": "---\nAccessModifierOffset: -1\nAlignAfterOpenBracket: AlwaysBreak\nAlignConsecutiveAssignments: false\nAlignConsecutiveDeclarations: false\nAlignEscapedNewlinesLeft: true\nAlignOperands:   false\nAlignTrailingComments: false\nAllowAllParametersOfDeclarationOnNextLine: false\nAllowShortBlocksOnASingleLine: false\nAllowShortCaseLabelsOnASingleLine: false\nAllowShortFunctionsOnASingleLine: Empty\nAllowShortIfStatementsOnASingleLine: false\nAllowShortLoopsOnASingleLine: false\nAlwaysBreakAfterReturnType: None\nAlwaysBreakBeforeMultilineStrings: true\nAlwaysBreakTemplateDeclarations: true\nBinPackArguments: false\nBinPackParameters: false\nBraceWrapping:\n  AfterClass:      false\n  AfterControlStatement: false\n  AfterEnum:       false\n  AfterFunction:   false\n  AfterNamespace:  false\n  AfterObjCDeclaration: false\n  AfterStruct:     false\n  AfterUnion:      false\n  BeforeCatch:     false\n  BeforeElse:      false\n  IndentBraces:    false\nBreakBeforeBinaryOperators: None\nBreakBeforeBraces: Attach\nBreakBeforeTernaryOperators: true\nBreakConstructorInitializersBeforeComma: false\nBreakAfterJavaFieldAnnotations: false\nBreakStringLiterals: false\nColumnLimit:     80\nCommentPragmas:  '^ IWYU pragma:'\nConstructorInitializerAllOnOneLineOrOnePerLine: true\nConstructorInitializerIndentWidth: 4\nContinuationIndentWidth: 4\nCpp11BracedListStyle: true\nDerivePointerAlignment: false\nDisableFormat:   false\nForEachMacros:   [ FOR_EACH_RANGE, FOR_EACH, ]\nIncludeCategories:\n  - Regex:           '^\"watchman_system.h\"'\n    Priority:        -2\n  - Regex:           '^\"watchman(_string)?.h\"'\n    Priority:        -1\n  - Regex:           '^<.*\\.h(pp)?>'\n    Priority:        1\n  - Regex:           '^<.*'\n    Priority:        2\n  - Regex:           '.*'\n    Priority:        3\nIndentCaseLabels: true\nIndentWidth:     2\nIndentWrappedFunctionNames: false\nKeepEmptyLinesAtTheStartOfBlocks: false\nMacroBlockBegin: ''\nMacroBlockEnd:   ''\nMaxEmptyLinesToKeep: 1\nNamespaceIndentation: None\nObjCBlockIndentWidth: 2\nObjCSpaceAfterProperty: false\nObjCSpaceBeforeProtocolList: false\nPenaltyBreakBeforeFirstCallParameter: 1\nPenaltyBreakComment: 300\nPenaltyBreakFirstLessLess: 120\nPenaltyBreakString: 1000\nPenaltyExcessCharacter: 1000000\nPenaltyReturnTypeOnItsOwnLine: 200\nPointerAlignment: Left\nReflowComments:  true\nSortIncludes:    true\nSpaceAfterCStyleCast: false\nSpaceBeforeAssignmentOperators: true\nSpaceBeforeParens: ControlStatements\nSpaceInEmptyParentheses: false\nSpacesBeforeTrailingComments: 1\nSpacesInAngles:  false\nSpacesInContainerLiterals: true\nSpacesInCStyleCastParentheses: false\nSpacesInParentheses: false\nSpacesInSquareBrackets: false\nStandard:        Cpp11\nTabWidth:        8\nUseTab:          Never\n...\n"
  },
  {
    "path": "watchman/.clang-tidy",
    "content": "# NOTE there must be no spaces before the '-', so put the comma after.\n# When making changes, be sure to verify the output of the following command to ensure\n# the desired checks are enabled (run from the directory containing a .clang-tidy file):\n# `clang-tidy -- --dump-config`\n# NOTE: Please don't disable inheritance from the parent to make sure that common checks get propagated.\n---\nInheritParentConfig: true\nChecks: '\nfacebook-hte-PortabilityInclude-gflags/gflags.h,\n-facebook-hte-RelativeInclude,\n'\n...\n"
  },
  {
    "path": "watchman/.codex/AGENTS.md",
    "content": "@../.claude/CLAUDE.md\n"
  },
  {
    "path": "watchman/.llms/rules/AGENTS.md",
    "content": "---\noncalls: ['scm_client_infra']\n---\n\n@../../.claude/CLAUDE.md\n"
  },
  {
    "path": "watchman/.projectid",
    "content": "watchman\n"
  },
  {
    "path": "watchman/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_binary.bzl\", \"cpp_binary\")\nload(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\nload(\"@fbcode_macros//build_defs:native_rules.bzl\", \"buck_filegroup\")\nload(\"@fbcode_macros//build_defs:python_unittest.bzl\", \"python_unittest\")\nload(\"//cpe/nupkg_builder:nupkg.bzl\", \"nupkg\")\n\noncall(\"fbcode_buck2_contbuilds\")\n\n# Our node tests need access to the source tree, so export the\n# relevant directory.\nbuck_filegroup(\n    name = \"node-sources\",\n    srcs = glob([\"node/**/*\"]),\n)\n\n# Wraps the generated config.h file in a library rule that we can\n# depend upon.\ncpp_library(\n    name = \"config_h\",\n    headers = {\n        \"config.h\": \"//watchman/facebook:config.h\",\n    },\n)\n\ncpp_library(\n    name = \"prelude\",\n    headers = [\n        \"Constants.h\",\n        \"watchman_preprocessor.h\",\n        \"watchman_system.h\",\n        \"watchman_time.h\",\n    ],\n    exported_deps = [\n        \":config_h\",\n        \"//common/base:build_info\",\n        \"//folly/portability:sys_time\",\n        \"//folly/portability:sys_types\",\n        \"//folly/portability:unistd\",\n    ],\n    exported_external_deps = [\n        (\"glibc\", None, \"rt\"),\n    ],\n)\n\ncpp_library(\n    name = \"child_process\",\n    srcs = [\"ChildProcess.cpp\"],\n    headers = [\"ChildProcess.h\"],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":logging\",\n        \"//folly:scope_guard\",\n        \"//folly:string\",\n    ],\n    exported_deps = [\n        \":prelude\",\n        \":string\",\n        \"//folly/futures:core\",\n        \"//watchman/fs:fd\",\n        \"//watchman/portability:posixspawn\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"bser\",\n    srcs = [\"bser.cpp\"],\n    headers = [\"bser.h\"],\n    deps = [\n        \":logging\",\n    ],\n    exported_deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"clock\",\n    srcs = [\"Clock.cpp\"],\n    headers = [\"Clock.h\"],\n    deps = [\n        \"//folly:overload\",\n        \"//folly:string\",\n        \"//folly/portability:sys_time\",\n    ],\n    exported_deps = [\n        \":logging\",\n        \"//folly:synchronized\",\n    ],\n)\n\ncpp_library(\n    name = \"config\",\n    srcs = [\"WatchmanConfig.cpp\"],\n    headers = [\"WatchmanConfig.h\"],\n    deps = [\n        \":errors\",\n        \":logging\",\n        \"//folly:exception_string\",\n        \"//folly:synchronized\",\n    ],\n    exported_deps = [\n        \"//folly:portability\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\n# Maybe this could be merged with \":sockname\"\ncpp_library(\n    name = \"connect\",\n    srcs = [\"Connect.cpp\"],\n    headers = [\"Connect.h\"],\n    deps = [\n        \":config\",\n        \":sockname\",\n        \":stream\",\n    ],\n    exported_deps = [\n        \":result\",\n    ],\n)\n\ncpp_library(\n    name = \"content_hash\",\n    srcs = [\"ContentHash.cpp\"],\n    headers = [\"ContentHash.h\"],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":hash\",\n        \":logging\",\n        \":stream\",\n        \":thread_pool\",\n        \"//folly:scope_guard\",\n        \"//watchman/fs:fs\",\n    ],\n    exported_deps = [\n        \":prelude\",\n        \":string\",\n        \":util\",\n    ],\n    external_deps = [\n        (\"openssl\", None, \"crypto\"),\n    ],\n)\n\ncpp_library(\n    name = \"cookie\",\n    headers = [\"Cookie.h\"],\n    exported_deps = [\n        \":string\",\n    ],\n)\n\ncpp_library(\n    name = \"errors\",\n    srcs = [\"Errors.cpp\"],\n    headers = [\"Errors.h\"],\n    exported_deps = [\n        \"fbsource//third-party/fmt:fmt\",\n    ],\n)\n\ncpp_library(\n    name = \"flag_map\",\n    srcs = [\n        \"FlagMap.cpp\",\n    ],\n    headers = [\n        \"FlagMap.h\",\n    ],\n)\n\ncpp_library(\n    name = \"hash\",\n    headers = [\"Hash.h\"],\n)\n\ncpp_library(\n    name = \"ignore\",\n    srcs = [\"IgnoreSet.cpp\"],\n    headers = [\"IgnoreSet.h\"],\n    exported_deps = [\n        \":string\",\n        \"//watchman/thirdparty/libart/src:art\",\n    ],\n)\n\ncpp_library(\n    name = \"logging\",\n    srcs = [\n        \"LogConfig.cpp\",\n        \"Logging.cpp\",\n        \"PubSub.cpp\",\n    ],\n    deps = [\n        \"//folly:scope_guard\",\n        \"//folly:thread_local\",\n        \"//folly/experimental/symbolizer:symbolizer\",\n        \"//folly/portability:sys_time\",\n        \"//folly/system:thread_name\",\n        \"//watchman/portability:backtrace\",\n    ],\n    exported_deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":prelude\",\n        \":string\",\n        \"//folly:synchronized\",\n        \"//folly/portability:windows\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n    external_deps = [\n        (\"glibc\", None, \"pthread\"),\n    ],\n)\n\ncpp_library(\n    name = \"serde\",\n    headers = [\"Serde.h\"],\n    exported_deps = [\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"shutdown\",\n    srcs = [\"Shutdown.cpp\"],\n    deps = [\n        \":stream\",\n    ],\n)\n\ncpp_library(\n    name = \"string\",\n    srcs = [\"string.cpp\"],\n    headers = [\"watchman_string.h\"],\n    deps = [\n        \"//watchman/thirdparty/jansson:utf\",\n    ],\n    exported_deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":prelude\",\n        \"//folly:fbstring\",\n    ],\n)\n\ncpp_library(\n    name = \"view\",\n    srcs = [\n        \"root/dir.cpp\",\n        \"root/file.cpp\",\n    ],\n    headers = [\n        \"watchman_dir.h\",\n        \"watchman_file.h\",\n    ],\n    exported_deps = [\n        \":clock\",\n        \":string\",\n        \"//watchman/fs:fd\",\n    ],\n)\n\ncpp_library(\n    name = \"pathutils\",\n    srcs = [\n        \"PathUtils.cpp\",\n    ],\n    headers = [\n        \"PathUtils.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":config\",\n        \":logging\",\n        \":string\",\n        \":userdir\",\n        \":watchmanlib\",\n        \"//folly:exception\",\n        \"//folly:string\",\n        \"//folly/portability:fcntl\",\n        \"//folly/portability:filesystem\",\n        \"//folly/portability:sys_stat\",\n        \"//folly/portability:unistd\",\n        \"//watchman/fs:fs\",\n    ],\n)\n\ncpp_library(\n    name = \"pending\",\n    srcs = [\n        \"PendingCollection.cpp\",\n    ],\n    headers = [\n        \"PendingCollection.h\",\n    ],\n    deps = [\n        \":cookie\",\n        \":logging\",\n        \":view\",\n    ],\n    exported_deps = [\n        \":string\",\n        \"//eden/common/utils:option_set\",\n        \"//folly:synchronized\",\n        \"//folly/futures:core\",\n        \"//watchman/thirdparty/libart/src:art\",\n    ],\n)\n\ncpp_library(\n    name = \"poison\",\n    srcs = [\"Poison.cpp\"],\n    headers = [\"Poison.h\"],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":config\",\n        \":logging\",\n    ],\n    exported_deps = [\n        \":string\",\n        \"//folly:synchronized\",\n    ],\n)\n\ncpp_library(\n    name = \"result\",\n    headers = [\"Result.h\"],\n    exported_deps = [\n        \"//folly:unit\",\n    ],\n)\n\ncpp_library(\n    name = \"scm\",\n    srcs = [\n        \"scm/Git.cpp\",\n        \"scm/Mercurial.cpp\",\n        \"scm/SCM.cpp\",\n    ],\n    headers = [\n        \"scm/Git.h\",\n        \"scm/Mercurial.h\",\n        \"scm/SCM.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":command_registry\",\n        \":logging\",\n        \":sockname\",\n        \"//folly:string\",\n        \"//folly/portability:sys_time\",\n        \"//watchman/fs:fd\",\n        \"//watchman/fs:fs\",\n    ],\n    exported_deps = [\n        \":child_process\",\n        \":errors\",\n        \":prelude\",\n        \":string\",\n        \":util\",\n    ],\n)\n\ncpp_library(\n    name = \"util\",\n    srcs = [\n        \"ProcessUtil.cpp\",\n    ],\n    headers = [\n        \"LRUCache.h\",\n        \"MapUtil.h\",\n        \"ProcessUtil.h\",\n        \"RingBuffer.h\",\n    ],\n    deps = [\n        \"//eden/common/utils:process_info_cache\",\n    ],\n    exported_deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":config\",\n        \"//folly:synchronized\",\n        \"//folly/concurrency/container:lock_free_ring_buffer\",\n        \"//folly/futures:core\",\n        \"//folly/portability:sys_types\",\n    ],\n)\n\n# TODO: maybe Command.h and Command.cpp should live in PDU target.\ncpp_library(\n    name = \"command_registry\",\n    srcs = [\n        \"Command.cpp\",\n        \"CommandRegistry.cpp\",\n    ],\n    headers = [\n        \"Command.h\",\n        \"CommandRegistry.h\",\n    ],\n    deps = [\n        \":errors\",\n        \":logging\",\n        \":stream\",\n        \"//folly:string\",\n        \"//watchman/fs:fd\",\n    ],\n    exported_deps = [\n        \":pdu\",\n        \":prelude\",\n        \":result\",\n        \":serde\",\n        \"//eden/common/utils:option_set\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"options\",\n    srcs = [\n        \"Options.cpp\",\n    ],\n    headers = [\n        \"Options.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":command_registry\",\n        \":config\",\n        \":logging\",\n        \"//watchman/portability:getopt\",\n    ],\n)\n\ncpp_library(\n    name = \"perf_sample\",\n    srcs = [\"PerfSample.cpp\"],\n    headers = [\"PerfSample.h\"],\n    deps = [\n        \":child_process\",\n        \":config\",\n        \":logging\",\n        \":options\",\n        \":prelude\",\n        \":sockname\",\n        \"//folly:synchronized\",\n    ],\n    exported_deps = [\n        \"//folly/portability:sys_time\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"sockname\",\n    srcs = [\"sockname.cpp\"],\n    headers = [\"sockname.h\"],\n    deps = [\n        \":options\",\n    ],\n)\n\ncpp_library(\n    # @autodeps-skip\n    name = \"stream\",\n    srcs = [\n        \"stream.cpp\",\n        \"stream_stdout.cpp\",\n        \"stream_unix.cpp\",\n        \"stream_win.cpp\",\n    ],\n    headers = [\n        \"watchman_stream.h\",\n    ],\n    deps = [\n        \":config\",\n        \":logging\",\n        \":prelude\",\n        \"//folly:network_address\",\n        \"//folly/net:network_socket\",\n        \"//watchman/portability:winerror\",\n    ],\n    exported_deps = [\n        \"//watchman/fs:fd\",\n    ] + select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:windows\": [\n            \"//eden/common/utils/windows:win_util\",\n        ],\n    }),\n)\n\ncpp_library(\n    name = \"thread_pool\",\n    srcs = [\"ThreadPool.cpp\"],\n    headers = [\"ThreadPool.h\"],\n    deps = [\n        \":logging\",\n    ],\n    exported_deps = [\n        \":prelude\",\n        \"//folly:executor\",\n    ],\n)\n\ncpp_library(\n    name = \"pdu\",\n    srcs = [\n        \"PDU.cpp\",\n    ],\n    headers = [\n        \"PDU.h\",\n    ],\n    deps = [\n        \":bser\",\n        \":logging\",\n        \":prelude\",\n        \":stream\",\n        \"//folly:range\",\n        \"//folly:string\",\n        \"//watchman/portability:winerror\",\n    ],\n    exported_deps = [\n        \":result\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"cookie_sync\",\n    srcs = [\n        \"CookieSync.cpp\",\n    ],\n    headers = [\n        \"CookieSync.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":logging\",\n        \":stream\",\n        \"//folly:string\",\n    ],\n    exported_deps = [\n        \":cookie\",\n        \":string\",\n        \"//folly:synchronized\",\n        \"//folly/futures:core\",\n        \"//watchman/fs:fs\",\n    ],\n)\n\ncpp_library(\n    name = \"signal_handler\",\n    srcs = [\n        \"SignalHandler.cpp\",\n    ],\n    headers = [\n        \"SignalHandler.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":logging\",\n        \":shutdown\",\n    ],\n)\n\ncpp_library(\n    name = \"symlink_targets\",\n    srcs = [\"SymlinkTargets.cpp\"],\n    headers = [\"SymlinkTargets.h\"],\n    deps = [\n        \":hash\",\n        \":thread_pool\",\n        \"//watchman/fs:fs\",\n    ],\n    exported_deps = [\n        \":clock\",\n        \":prelude\",\n        \":string\",\n        \":util\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"query\",\n    srcs = [\n        \"query/FileResult.cpp\",\n        \"query/GlobEscaping.cpp\",\n        \"query/GlobTree.cpp\",\n        \"query/LocalFileResult.cpp\",\n        \"query/Query.cpp\",\n        \"query/QueryResult.cpp\",\n    ],\n    headers = [\n        \"query/FileResult.h\",\n        \"query/GlobEscaping.h\",\n        \"query/GlobTree.h\",\n        \"query/LocalFileResult.h\",\n        \"query/Query.h\",\n        \"query/QueryExpr.h\",\n        \"query/QueryResult.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":content_hash\",\n        \"//folly:range\",\n    ],\n    exported_deps = [\n        \":client_context\",\n        \":clock\",\n        \":string\",\n        \"//watchman/fs:fd\",\n        \"//watchman/fs:fs\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"parse\",\n    srcs = [\n        \"query/TermRegistry.cpp\",\n        \"query/base.cpp\",\n        \"query/dirname.cpp\",\n        \"query/empty.cpp\",\n        \"query/intcompare.cpp\",\n        \"query/match.cpp\",\n        \"query/name.cpp\",\n        \"query/pcre.cpp\",\n        \"query/since.cpp\",\n        \"query/suffix.cpp\",\n        \"query/type.cpp\",\n    ],\n    headers = [\n        \"query/TermRegistry.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \"fbsource//third-party/pcre2:pcre2-8\",\n        \":command_registry\",\n        \":errors\",\n        \":query\",\n        \"//folly:overload\",\n        \"//watchman/fs:fd\",\n        \"//watchman/fs:fs\",\n        \"//watchman/thirdparty/wildmatch:wildmatch\",\n    ],\n    exported_deps = [\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"userdir\",\n    srcs = [\"UserDir.cpp\"],\n    headers = [\"UserDir.h\"],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":logging\",\n        \":options\",\n        \"//eden/common/utils:stringconv\",\n        \"//folly:string\",\n        \"//folly/portability:unistd\",\n        \"//watchman/fs:fs\",\n        \"//watchman/portability:winerror\",\n    ],\n    exported_deps = select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:windows\": [\n            \"fbsource//third-party/toolchains/win:ole32.lib\",\n            \"fbsource//third-party/toolchains/win:shell32.lib\",\n        ],\n    }),\n)\n\ncpp_library(\n    name = \"root\",\n    srcs = [\n        \"QueryableView.cpp\",\n        \"TriggerCommand.cpp\",\n        \"query/QueryContext.cpp\",\n        \"query/eval.cpp\",\n        \"query/fieldlist.cpp\",\n        \"query/glob.cpp\",\n        \"query/parse.cpp\",\n        \"root/init.cpp\",\n        \"root/reap.cpp\",\n        \"root/sync.cpp\",\n        \"root/threading.cpp\",\n        \"root/watchlist.cpp\",\n    ],\n    headers = [\n        \"QueryableView.h\",\n        \"TriggerCommand.h\",\n        \"query/QueryContext.h\",\n        \"query/eval.h\",\n        \"query/parse.h\",\n        \"root/Root.h\",\n    ],\n    deps = [\n        \"fbcode//eden/common/utils:process_info_cache\",\n        \"fbcode//folly:scope_guard\",\n        \"fbcode//folly:string\",\n        \"fbcode//watchman:client_context\",\n        \"fbcode//watchman:command_registry\",\n        \"fbcode//watchman:errors\",\n        \"fbcode//watchman:parse\",\n        \"fbcode//watchman:pdu\",\n        \"fbcode//watchman:prelude\",\n        \"fbcode//watchman:scm\",\n        \"fbcode//watchman:shutdown\",\n        \"fbcode//watchman:sockname\",\n        \"fbcode//watchman:stream\",\n        \"fbcode//watchman:userdir\",\n        \"fbcode//watchman:view\",\n        \"fbcode//watchman/fs:fd\",\n        \"fbcode//watchman/thirdparty/wildmatch:wildmatch\",\n        \"fbsource//third-party/fmt:fmt\",\n    ],\n    exported_deps = [\n        \":child_process\",\n        \":clock\",\n        \":config\",\n        \":cookie_sync\",\n        \":ignore\",\n        \":logging\",\n        \":pending\",\n        \":perf_sample\",\n        \":query\",\n        \":serde\",\n        \":string\",\n        \"//folly:stop_watch\",\n        \"//folly:synchronized\",\n        \"//folly/futures:core\",\n        \"//watchman/fs:fs\",\n        \"//watchman/saved_state:saved_state\",\n        \"//watchman/telemetry:telemetry\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"watcher\",\n    srcs = [\"watcher/Watcher.cpp\"],\n    headers = [\"watcher/Watcher.h\"],\n    exported_deps = [\n        \":pending\",\n        \"//folly/futures:core\",\n        \"//watchman/fs:fs\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_library(\n    name = \"inmemoryview\",\n    srcs = [\n        \"InMemoryView.cpp\",\n        \"root/ageout.cpp\",\n        \"root/iothread.cpp\",\n        \"root/notifythread.cpp\",\n        \"root/warnerr.cpp\",\n    ],\n    headers = [\n        \"InMemoryView.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":errors\",\n        \":logging\",\n        \":poison\",\n        \":thread_pool\",\n        \":view\",\n        \":watcher\",\n        \"//folly:scope_guard\",\n        \"//watchman/fs:parallel_walk\",\n        \"//watchman/telemetry:telemetry\",\n        \"//watchman/thirdparty/wildmatch:wildmatch\",\n    ],\n    exported_deps = [\n        \":config\",\n        \":content_hash\",\n        \":cookie_sync\",\n        \":pending\",\n        \":perf_sample\",\n        \":prelude\",\n        \":query\",\n        \":result\",\n        \":root\",\n        \":string\",\n        \":symlink_targets\",\n        \":util\",\n        \"//folly:synchronized\",\n        \"//watchman/fs:fs\",\n    ],\n)\n\n# The bulk of the watchman implementation lives in this library\ncpp_library(\n    name = \"watchmanlib\",\n    srcs = [\n        \"Client.cpp\",\n        \"GroupLookup.cpp\",\n        \"SanityCheck.cpp\",\n        \"XattrUtils.cpp\",\n        \"cmds/debug.cpp\",\n        \"cmds/find.cpp\",\n        \"cmds/heapprof.cpp\",\n        \"cmds/info.cpp\",\n        \"cmds/log.cpp\",\n        \"cmds/query.cpp\",\n        \"cmds/since.cpp\",\n        \"cmds/state.cpp\",\n        \"cmds/subscribe.cpp\",\n        \"cmds/trigger.cpp\",\n        \"cmds/watch.cpp\",\n        \"listener.cpp\",\n        \"listener-user.cpp\",\n        \"root/resolve.cpp\",\n        \"root/warnerr.cpp\",\n        \"state.cpp\",\n        \"watcher/WatcherRegistry.cpp\",\n        \"watcher/eden.cpp\",\n        \"watcher/fsevents.cpp\",\n        \"watcher/inotify.cpp\",\n        \"watcher/kqueue.cpp\",\n        \"watcher/kqueue_and_fsevents.cpp\",\n        \"watcher/portfs.cpp\",\n        \"watcher/win32.cpp\",\n    ],\n    headers = [\n        \"Client.h\",\n        \"GroupLookup.h\",\n        \"XattrUtils.h\",\n        \"listener.h\",\n        \"state.h\",\n        \"watchman_cmd.h\",\n    ],\n    # We use constructors to declare commands rather than maintaining\n    # static tables of things.  Ensure that they don't get stripped\n    # out of the final binary!\n    link_whole = True,\n    deps = [\n        \"fbsource//third-party/cpptoml:cpptoml\",\n        \":child_process\",\n        \":client_context\",\n        \":config\",\n        \":connect\",\n        \":errors\",\n        \":flag_map\",\n        \":inmemoryview\",\n        \":options\",\n        \":poison\",\n        \":query\",\n        \":root\",\n        \":scm\",\n        \":serde\",\n        \":shutdown\",\n        \":signal_handler\",\n        \":sockname\",\n        \":thread_pool\",\n        \":view\",\n        \"//eden/common/utils:fsdetect\",\n        \"//eden/fs/service:thrift-streaming-cpp2-services\",\n        \"//folly:exception\",\n        \"//folly:map_util\",\n        \"//folly:network_address\",\n        \"//folly:scope_guard\",\n        \"//folly:stop_watch\",\n        \"//folly:string\",\n        \"//folly:synchronized\",\n        \"//folly/chrono:conv\",\n        \"//folly/futures:core\",\n        \"//folly/io/async:async_base\",\n        \"//folly/io/async:async_socket\",\n        \"//folly/io/async:event_base_manager\",\n        \"//folly/logging:logging\",\n        \"//folly/memory:malloc\",\n        \"//folly/net:network_socket\",\n        \"//folly/system:shell\",\n        \"//thrift/lib/cpp2/async:header_client_channel\",\n        \"//thrift/lib/cpp2/async:pooled_request_channel\",\n        \"//thrift/lib/cpp2/async:reconnecting_request_channel\",\n        \"//thrift/lib/cpp2/async:retrying_request_channel\",\n        \"//thrift/lib/cpp2/async:rocket_client_channel\",\n        \"//watchman/portability:winerror\",\n        \"//watchman/saved_state:factory\",\n        \"//watchman/thirdparty/wildmatch:wildmatch\",\n    ],\n    exported_deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":clock\",\n        \":command_registry\",\n        \":logging\",\n        \":pdu\",\n        \":perf_sample\",\n        \":prelude\",\n        \":stream\",\n        \":string\",\n        \":util\",\n        \":watcher\",\n        \"//eden/common/utils:process_info_cache\",\n        \"//watchman/fs:fd\",\n        \"//watchman/fs:fs\",\n        \"//watchman/telemetry:telemetry\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ] + select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:macos\": [\n            \"fbsource//third-party/toolchains/macos:CoreFoundation\",\n            \"fbsource//third-party/toolchains/macos:CoreServices\",\n        ],\n    }),\n)\n\ncpp_library(\n    name = \"client_context\",\n    headers = [\n        \"ClientContext.h\",\n    ],\n    exported_deps = [\n        \"//eden/common/utils:process_info_cache\",\n    ],\n)\n\n# and the watchman binary itself\ncpp_binary(\n    name = \"watchman\",\n    srcs = [\n        \"ProcessLock.cpp\",\n        \"main.cpp\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \":child_process\",\n        \":clock\",\n        \":command_registry\",\n        \":config\",\n        \":connect\",\n        \":logging\",\n        \":options\",\n        \":pathutils\",\n        \":pdu\",\n        \":perf_sample\",\n        \":root\",\n        \":sockname\",\n        \":stream\",\n        \":thread_pool\",\n        \":userdir\",\n        \":util\",\n        \":watchmanlib\",\n        \"//folly:exception\",\n        \"//folly:network_address\",\n        \"//folly:scope_guard\",\n        \"//folly:singleton\",\n        \"//folly:string\",\n        \"//folly/init:init\",\n        \"//folly/net:network_socket\",\n        \"//folly/portability:fcntl\",\n        \"//folly/system:shell\",\n        \"//watchman/fs:fd\",\n        \"//watchman/fs:fs\",\n    ] + select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:linux\": [\n            \"//watchman/facebook/saved_state:manifold_saved_state\",\n        ],\n        \"ovr_config//os:windows\": [\n            \"//watchman/thirdparty/deelevate_binding:deelevate_binding\",\n        ],\n    }),\n)\n\npython_unittest(\n    name = \"test_bser\",\n    srcs = [\"node/bser/test_bser.py\"],\n    # There is no Yarn offline mirror on macOS.\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    env = {\n        \"WATCHMAN_SRC_DIR\": \"$(location //watchman:node-sources)\",\n        \"YARN_OFFLINE\": \"1\",\n    },\n    supports_static_listing = False,\n    deps = [\n        \"//watchman/integration/lib:lib\",\n    ],\n)\n\ndot_version = read_config(\"watchman_build_info\", \"dot_combined\", \"00000000.000000\")\n\nnupkg.builder(\n    name = \"fb-watchman-windows\",\n    additional_scripts = [\n        \"facebook/watchman-perf.py\",\n    ],\n    chocolatey_install_script = \"facebook/windows/chocolateyinstall.ps1\",\n    chocolatey_uninstall_script = \"facebook/windows/chocolateyuninstall.ps1\",\n    oncall = \"scm_client_infra\",\n    version = dot_version,\n    deps = select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:windows\": [\n            \"fbcode//watchman:watchman\",\n            \"fbcode//watchman:watchman[pdb]\",\n            \"fbcode//watchman/cli:cli\",\n            \"fbcode//watchman/python/bin:watchman-diag\",\n            \"fbcode//watchman/python/bin:watchman-make\",\n            \"fbcode//watchman/python/bin:watchman-replicate-subscription\",\n            \"fbcode//watchman/python/bin:watchman-wait\",\n            \"fbsource//third-party/rust:deelevate-eledo-pty-bridge\",\n        ],\n    }),\n)\n"
  },
  {
    "path": "watchman/ChildProcess.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/ChildProcess.h\"\n#include <fmt/core.h>\n#include <folly/ScopeGuard.h>\n#include <folly/String.h>\n#include <memory>\n#include <system_error>\n#include <thread>\n#include \"watchman/Logging.h\"\n\nnamespace watchman {\n\nChildProcess::Environment::Environment() {\n  // Construct the map from the current process environment\n  uint32_t nenv, i;\n  const char* eq;\n  const char* ent;\n\n  for (i = 0, nenv = 0; environ[i]; i++) {\n    nenv++;\n  }\n\n  map_.reserve(nenv);\n\n  for (i = 0; environ[i]; i++) {\n    ent = environ[i];\n    eq = strchr(ent, '=');\n    if (!eq) {\n      continue;\n    }\n\n    // slice name=value into a key and a value string\n    auto key = w_string_piece(ent, eq - ent);\n    auto val = w_string_piece(eq + 1);\n\n    // Replace rather than set, just in case we somehow have duplicate\n    // keys in our environment array.\n    map_[key.asWString()] = val.asWString();\n  }\n}\n\nChildProcess::Environment::Environment(\n    const std::unordered_map<w_string, w_string>& map)\n    : map_(map) {}\n\n/* Constructs an envp array from a hash table.\n * The returned array occupies a single contiguous block of memory\n * such that it can be released by a single call to free(3).\n * The last element of the returned array is set to NULL for compatibility\n * with posix_spawn() */\nstd::unique_ptr<char*, ChildProcess::Deleter>\nChildProcess::Environment::asEnviron(size_t* env_size) const {\n  size_t len = (1 + map_.size()) * sizeof(char*);\n\n  // Make a pass through to compute the required memory size\n  for (const auto& it : map_) {\n    const auto& key = it.first;\n    const auto& val = it.second;\n\n    // key=value\\0\n    len += key.size() + 1 + val.size() + 1;\n  }\n\n  auto envp = (char**)malloc(len);\n  if (!envp) {\n    throw std::bad_alloc();\n  }\n  auto result = std::unique_ptr<char*, Deleter>(envp, Deleter());\n\n  // Now populate\n  auto buf = (char*)(envp + map_.size() + 1);\n  size_t i = 0;\n  for (const auto& it : map_) {\n    const auto& key = it.first;\n    const auto& val = it.second;\n\n    envp[i++] = buf;\n\n    // key=value\\0\n    memcpy(buf, key.data(), key.size());\n    buf += key.size();\n\n    memcpy(buf, \"=\", 1);\n    buf++;\n\n    memcpy(buf, val.data(), val.size());\n    buf += val.size();\n\n    *buf = 0;\n    buf++;\n  }\n\n  envp[map_.size()] = nullptr;\n\n  if (env_size) {\n    *env_size = len;\n  }\n  return result;\n}\n\nvoid ChildProcess::Environment::set(const w_string& key, const w_string& val) {\n  map_[key] = val;\n}\n\nvoid ChildProcess::Environment::setBool(const w_string& key, bool bval) {\n  if (bval) {\n    map_[key] = \"true\";\n  } else {\n    map_.erase(key);\n  }\n}\n\nvoid ChildProcess::Environment::set(\n    std::initializer_list<std::pair<w_string_piece, w_string_piece>> pairs) {\n  for (auto& pair : pairs) {\n    set(pair.first.asWString(), pair.second.asWString());\n  }\n}\n\nvoid ChildProcess::Environment::unset(const w_string& key) {\n  map_.erase(key);\n}\n\nChildProcess::Options::Options() : inner_(std::make_unique<Inner>()) {\n#ifdef POSIX_SPAWN_CLOEXEC_DEFAULT\n  setFlags(POSIX_SPAWN_CLOEXEC_DEFAULT);\n#endif\n}\n\nChildProcess::Options::Inner::Inner() {\n  posix_spawnattr_init(&attr);\n  posix_spawn_file_actions_init(&actions);\n}\n\nChildProcess::Options::Inner::~Inner() {\n  posix_spawn_file_actions_destroy(&actions);\n  posix_spawnattr_destroy(&attr);\n}\n\nvoid ChildProcess::Options::setFlags(short flags) {\n  short currentFlags;\n  auto err = posix_spawnattr_getflags(&inner_->attr, &currentFlags);\n  if (err) {\n    throw std::system_error(\n        err, std::generic_category(), \"posix_spawnattr_getflags\");\n  }\n  err = posix_spawnattr_setflags(&inner_->attr, currentFlags | flags);\n  if (err) {\n    throw std::system_error(\n        err, std::generic_category(), \"posix_spawnattr_setflags\");\n  }\n}\n\n#ifdef POSIX_SPAWN_SETSIGMASK\nvoid ChildProcess::Options::setSigMask(const sigset_t& mask) {\n  posix_spawnattr_setsigmask(&inner_->attr, &mask);\n  setFlags(POSIX_SPAWN_SETSIGMASK);\n}\n#endif\n\nChildProcess::Environment& ChildProcess::Options::environment() {\n  return env_;\n}\n\nvoid ChildProcess::Options::dup2(int fd, int targetFd) {\n  auto err = posix_spawn_file_actions_adddup2(&inner_->actions, fd, targetFd);\n  if (err) {\n    throw std::system_error(\n        err, std::generic_category(), \"posix_spawn_file_actions_adddup2\");\n  }\n}\n\nvoid ChildProcess::Options::dup2(const FileDescriptor& fd, int targetFd) {\n#ifdef _WIN32\n  auto err = posix_spawn_file_actions_adddup2_handle_np(\n      &inner_->actions, fd.handle(), targetFd);\n  if (err) {\n    throw std::system_error(\n        err,\n        std::generic_category(),\n        \"posix_spawn_file_actions_adddup2_handle_np\");\n  }\n#else\n  auto err =\n      posix_spawn_file_actions_adddup2(&inner_->actions, fd.fd(), targetFd);\n  if (err) {\n    throw std::system_error(\n        err, std::generic_category(), \"posix_spawn_file_actions_adddup2\");\n  }\n#endif\n}\n\nvoid ChildProcess::Options::open(\n    int targetFd,\n    const char* path,\n    int flags,\n    int mode) {\n  auto err = posix_spawn_file_actions_addopen(\n      &inner_->actions, targetFd, path, flags, mode);\n  if (err) {\n    throw std::system_error(\n        err, std::generic_category(), \"posix_spawn_file_actions_addopen\");\n  }\n}\n\nvoid ChildProcess::Options::pipe(int targetFd, bool childRead) {\n  if (pipes_.find(targetFd) != pipes_.end()) {\n    throw std::runtime_error(\"targetFd is already present in pipes map\");\n  }\n\n  auto result =\n      pipes_.emplace(std::make_pair(targetFd, std::make_unique<Pipe>()));\n  auto pipe = result.first->second.get();\n\n#ifndef _WIN32\n  pipe->read.clearNonBlock();\n  pipe->write.clearNonBlock();\n#endif\n\n  dup2(childRead ? pipe->read : pipe->write, targetFd);\n}\n\nvoid ChildProcess::Options::pipeStdin() {\n  pipe(STDIN_FILENO, true);\n}\n\nvoid ChildProcess::Options::pipeStdout() {\n  pipe(STDOUT_FILENO, false);\n}\n\nvoid ChildProcess::Options::pipeStderr() {\n  pipe(STDERR_FILENO, false);\n}\n\nvoid ChildProcess::Options::nullFd(int fd, int flags) {\n#ifdef _WIN32\n  open(fd, \"NUL\", flags, 0);\n#else\n  open(fd, \"/dev/null\", flags, 0666);\n#endif\n}\n\nvoid ChildProcess::Options::nullStdin() {\n  nullFd(STDIN_FILENO, O_RDONLY);\n}\n\nvoid ChildProcess::Options::nullStdout() {\n  nullFd(STDOUT_FILENO, O_WRONLY);\n}\n\nvoid ChildProcess::Options::nullStderr() {\n  nullFd(STDERR_FILENO, O_WRONLY);\n}\n\nvoid ChildProcess::Options::chdir(w_string_piece path) {\n  cwd_ = std::string(path.data(), path.size());\n#ifdef _WIN32\n  posix_spawnattr_setcwd_np(&inner_->attr, cwd_.c_str());\n#endif\n}\n\nstatic std::vector<std::string_view> json_args_to_string_vec(\n    const json_ref& args) {\n  std::vector<std::string_view> vec;\n\n  for (auto& arg : args.array()) {\n    vec.emplace_back(json_to_w_string(arg).view());\n  }\n\n  return vec;\n}\n\nChildProcess::ChildProcess(const json_ref& args, Options&& options)\n    : ChildProcess(json_args_to_string_vec(args), std::move(options)) {}\n\nChildProcess::ChildProcess(\n    std::vector<std::string_view> args,\n    Options&& options)\n    : pipes_(std::move(options.pipes_)) {\n  std::vector<char*> argv;\n  std::vector<std::string> argStrings;\n\n  argStrings.reserve(args.size());\n  argv.reserve(args.size() + 1);\n\n  for (auto& str : args) {\n    argStrings.emplace_back(str.data(), str.size());\n    argv.emplace_back(&argStrings.back()[0]);\n  }\n  argv.emplace_back(nullptr);\n\n#ifndef _WIN32\n  auto lock = lockCwdMutex();\n  char savedCwd[WATCHMAN_NAME_MAX];\n  if (!getcwd(savedCwd, sizeof(savedCwd))) {\n    throw std::system_error(errno, std::generic_category(), \"failed to getcwd\");\n  }\n  SCOPE_EXIT {\n    if (!options.cwd_.empty()) {\n      if (chdir(savedCwd) != 0) {\n        // log(FATAL) rather than throw because SCOPE_EXIT is\n        // a noexcept destructor and will call std::terminate\n        // in this case anyway.\n        log(FATAL, \"failed to restore cwd of \", savedCwd);\n      }\n    }\n  };\n\n  if (!options.cwd_.empty()) {\n    if (chdir(options.cwd_.c_str()) != 0) {\n      throw std::system_error(\n          errno,\n          std::generic_category(),\n          fmt::format(\"failed to chdir to {}\", options.cwd_));\n    }\n  }\n#endif\n\n  auto envp = options.env_.asEnviron();\n  auto ret = posix_spawnp(\n      &pid_,\n      argv[0],\n      &options.inner_->actions,\n      &options.inner_->attr,\n      &argv[0],\n      envp.get());\n\n  if (ret) {\n    // Failed, so the creator cannot call wait() on us.\n    // mark us as already done.\n    waited_ = true;\n  }\n\n  // Log some info\n  auto level = ret == 0 ? watchman::DBG : watchman::ERR;\n  watchman::log(level, \"ChildProcess: pid=\", pid_, \"\\n\");\n  for (size_t i = 0; i < args.size(); ++i) {\n    watchman::log(level, \"argv[\", i, \"] \", args[i], \"\\n\");\n  }\n  for (size_t i = 0; envp.get()[i]; ++i) {\n    watchman::log(level, \"envp[\", i, \"] \", envp.get()[i], \"\\n\");\n  }\n\n  // Close the other ends of the pipes\n  for (auto& it : pipes_) {\n    if (it.first == STDIN_FILENO) {\n      it.second->read.close();\n    } else {\n      it.second->write.close();\n    }\n  }\n\n  if (ret) {\n    throw std::system_error(ret, std::generic_category(), \"posix_spawnp\");\n  }\n}\n\nstatic std::mutex& getCwdMutex() {\n  // Meyers singleton\n  static std::mutex m;\n  return m;\n}\n\nstd::unique_lock<std::mutex> ChildProcess::lockCwdMutex() {\n  return std::unique_lock<std::mutex>(getCwdMutex());\n}\n\nChildProcess::~ChildProcess() {\n  if (!waited_) {\n    watchman::log(\n        watchman::FATAL,\n        \"you must call ChildProcess.wait() before destroying a ChildProcess\\n\");\n  }\n}\n\nvoid ChildProcess::disown() {\n  waited_ = true;\n}\n\nbool ChildProcess::terminated() {\n  if (waited_) {\n    return true;\n  }\n\n  auto pid = waitpid(pid_, &status_, WNOHANG);\n  if (pid == pid_) {\n    waited_ = true;\n  }\n\n  return waited_;\n}\n\nint ChildProcess::wait() {\n  if (waited_) {\n    return status_;\n  }\n\n  while (true) {\n    auto pid = waitpid(pid_, &status_, 0);\n    if (pid == pid_) {\n      waited_ = true;\n      return status_;\n    }\n\n    if (errno != EINTR) {\n      // Pretend that we've successfully waited the child. Otherwise the\n      // destructor will abort the process due to waited_ not being set.\n      waited_ = true;\n      throw std::system_error(errno, std::generic_category(), \"waitpid\");\n    }\n  }\n}\n\nvoid ChildProcess::kill(\n#ifndef _WIN32\n    int signo\n#endif\n) {\n#ifndef _WIN32\n  if (!waited_) {\n    ::kill(pid_, signo);\n  }\n#endif\n}\n\nstd::unique_ptr<Pipe> ChildProcess::takeStdin() {\n  CHECK_EQ(1, pipes_.size());\n  CHECK_EQ(0, pipes_.begin()->first);\n  auto pipe = std::move(pipes_.begin()->second);\n  return pipe;\n}\n\nstd::pair<std::optional<w_string>, std::optional<w_string>>\nChildProcess::communicate(pipeWriteCallback writeCallback) {\n#ifdef _WIN32\n  return threadedCommunicate(writeCallback);\n#else\n  return pollingCommunicate(writeCallback);\n#endif\n}\n\n#ifndef _WIN32\nstd::pair<std::optional<w_string>, std::optional<w_string>>\nChildProcess::pollingCommunicate(pipeWriteCallback writeCallback) {\n  std::unordered_map<int, std::string> outputs;\n\n  for (auto& it : pipes_) {\n    if (it.first != STDIN_FILENO) {\n      // We only want output streams here\n      continue;\n    }\n    watchman::log(\n        watchman::DBG, \"Setting up output buffer for fd \", it.first, \"\\n\");\n    outputs.emplace(std::make_pair(it.first, \"\"));\n  }\n\n  std::vector<pollfd> pfds;\n  std::unordered_map<int, int> revmap;\n  pfds.reserve(pipes_.size());\n  revmap.reserve(pipes_.size());\n\n  while (!pipes_.empty()) {\n    revmap.clear();\n    pfds.clear();\n\n    watchman::log(\n        watchman::DBG, \"Setting up pollfds for \", pipes_.size(), \" fds\\n\");\n\n    for (auto& it : pipes_) {\n      pollfd pfd;\n      if (it.first == STDIN_FILENO) {\n        pfd.fd = it.second->write.fd();\n        pfd.events = POLLOUT;\n      } else {\n        pfd.fd = it.second->read.fd();\n        pfd.events = POLLIN;\n      }\n      pfds.emplace_back(std::move(pfd));\n      revmap[pfd.fd] = it.first;\n    }\n\n    int r;\n    do {\n      watchman::log(watchman::DBG, \"waiting for \", pfds.size(), \" fds\\n\");\n      r = ::poll(pfds.data(), pfds.size(), -1);\n    } while (r == -1 && errno == EINTR);\n    if (r == -1) {\n      watchman::log(watchman::ERR, \"poll error\\n\");\n      throw std::system_error(errno, std::generic_category(), \"poll\");\n    }\n\n    for (auto& pfd : pfds) {\n      watchman::log(\n          watchman::DBG,\n          \"fd \",\n          pfd.fd,\n          \" revmap to \",\n          revmap[pfd.fd],\n          \" has events \",\n          pfd.revents,\n          \"\\n\");\n      if ((pfd.revents & (POLLHUP | POLLIN)) &&\n          revmap[pfd.fd] != STDIN_FILENO) {\n        watchman::log(\n            watchman::DBG,\n            \"fd \",\n            pfd.fd,\n            \" rev=\",\n            revmap[pfd.fd],\n            \" is readable\\n\");\n        char buf[BUFSIZ];\n        auto l = ::read(pfd.fd, buf, sizeof(buf));\n        if (l == -1 && (errno == EAGAIN || errno == EINTR)) {\n          watchman::log(\n              watchman::DBG,\n              \"fd \",\n              pfd.fd,\n              \" rev=\",\n              revmap[pfd.fd],\n              \" read give EAGAIN\\n\");\n          continue;\n        }\n        if (l == -1) {\n          int err = errno;\n          watchman::log(\n              watchman::ERR,\n              \"failed to read from pipe fd \",\n              pfd.fd,\n              \" err \",\n              folly::errnoStr(err),\n              \"\\n\");\n          throw std::system_error(\n              err, std::generic_category(), \"reading from child process\");\n        }\n        watchman::log(\n            watchman::DBG,\n            \"fd \",\n            pfd.fd,\n            \" rev=\",\n            revmap[pfd.fd],\n            \" read \",\n            l,\n            \" bytes\\n\");\n        if (l == 0) {\n          // Stream is done; close it out.\n          pipes_.erase(revmap[pfd.fd]);\n          continue;\n        }\n        outputs[revmap[pfd.fd]].append(buf, l);\n      }\n\n      if ((pfd.revents & POLLHUP) && revmap[pfd.fd] == STDIN_FILENO) {\n        watchman::log(\n            watchman::DBG,\n            \"fd \",\n            pfd.fd,\n            \" rev \",\n            revmap[pfd.fd],\n            \" closed by the other side\\n\");\n        pipes_.erase(revmap[pfd.fd]);\n        continue;\n      }\n      if ((pfd.revents & POLLOUT) && revmap[pfd.fd] == STDIN_FILENO &&\n          writeCallback(pipes_.at(revmap[pfd.fd])->write)) {\n        // We should close it\n        watchman::log(\n            watchman::DBG,\n            \"fd \",\n            pfd.fd,\n            \" rev \",\n            revmap[pfd.fd],\n            \" writer says to close\\n\");\n        pipes_.erase(revmap[pfd.fd]);\n        continue;\n      }\n\n      if (pfd.revents & POLLERR) {\n        // Something wrong with it, so close it\n        pipes_.erase(revmap[pfd.fd]);\n        watchman::log(\n            watchman::DBG,\n            \"fd \",\n            pfd.fd,\n            \" rev \",\n            revmap[pfd.fd],\n            \" error status, so closing\\n\");\n        continue;\n      }\n    }\n\n    watchman::log(watchman::DBG, \"remaining pipes \", pipes_.size(), \"\\n\");\n  }\n\n  auto optBuffer = [&](int fd) -> std::optional<w_string> {\n    auto it = outputs.find(fd);\n    if (it == outputs.end()) {\n      watchman::log(watchman::DBG, \"communicate fd \", fd, \" nullptr\\n\");\n      return std::nullopt;\n    }\n    watchman::log(\n        watchman::DBG, \"communicate fd \", fd, \" gives \", it->second, \"\\n\");\n    return w_string(it->second.data(), it->second.size());\n  };\n\n  return std::make_pair(optBuffer(STDOUT_FILENO), optBuffer(STDERR_FILENO));\n}\n#endif\n\n/** Spawn a thread to read from the pipe connected to the specified fd.\n * Returns a Future that will hold a string with the entire output from\n * that stream. */\nfolly::Future<std::optional<w_string>> ChildProcess::readPipe(int fd) {\n  auto it = pipes_.find(fd);\n  if (it == pipes_.end()) {\n    return std::nullopt;\n  }\n\n  auto p = std::make_shared<folly::Promise<w_string>>();\n  std::thread thr([this, fd, p]() noexcept {\n    std::string result;\n    p->setWith([&] {\n      auto& pipe = pipes_[fd];\n      while (true) {\n        char buf[4096];\n        auto readResult = pipe->read.read(buf, sizeof(buf));\n        readResult.throwIfError();\n        auto len = readResult.value();\n        if (len == 0) {\n          // all done\n          break;\n        }\n        result.append(buf, len);\n      }\n      return w_string(result.data(), result.size());\n    });\n  });\n\n  thr.detach();\n  return p->getFuture();\n}\n\n/** threadedCommunicate uses threads to read from the output streams.\n * It is intended to be used on Windows where there is no reasonable\n * way to carry out a non-blocking read on a pipe.  We compile and\n * test it on all platforms to make it easier to avoid regressions. */\nstd::pair<std::optional<w_string>, std::optional<w_string>>\nChildProcess::threadedCommunicate(pipeWriteCallback writeCallback) {\n  auto outFuture = readPipe(STDOUT_FILENO);\n  auto errFuture = readPipe(STDERR_FILENO);\n\n  auto it = pipes_.find(STDIN_FILENO);\n  if (it != pipes_.end()) {\n    auto& inPipe = pipes_[STDIN_FILENO];\n    while (!writeCallback(inPipe->write)) {\n      ; // keep trying to greedily write to the pipe\n    }\n    // Close the input stream; this typically signals the child\n    // process that we're done and allows us to safely block\n    // on the reads below.\n    pipes_.erase(STDIN_FILENO);\n  }\n\n  return std::make_pair(std::move(outFuture).get(), std::move(errFuture).get());\n}\n\nsize_t ChildProcess::getArgMax() {\n#ifdef _WIN32\n  return 32767;\n#else\n  int result = sysconf(_SC_ARG_MAX);\n  if (result == -1) {\n    return _POSIX_ARG_MAX;\n  }\n  // POSIX guarantees _SC_ARG_MAX must be greater than _POSIX_ARG_MAX.\n  return result;\n#endif\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/ChildProcess.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/futures/Future.h>\n#include <mutex>\n#include <string>\n#include <unordered_map>\n#include <vector>\n#include \"watchman/fs/Pipe.h\"\n#include \"watchman/portability/PosixSpawn.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_string.h\"\n#include \"watchman/watchman_system.h\"\n\nnamespace watchman {\n\nclass ChildProcess {\n public:\n  struct Deleter {\n    void operator()(char** vec) const {\n      free((void*)vec);\n    }\n  };\n\n  class Environment {\n   public:\n    // Constructs an environment from the current process environment\n    Environment();\n    Environment(const Environment&) = default;\n    /* implicit */ Environment(\n        const std::unordered_map<w_string, w_string>& map);\n\n    Environment& operator=(const Environment&) = default;\n\n    // Returns the environment as an environ compatible array\n    std::unique_ptr<char*, Deleter> asEnviron(size_t* env_size = nullptr) const;\n\n    // Set a value in the environment\n    void set(const w_string& key, const w_string& value);\n    void set(\n        std::initializer_list<std::pair<w_string_piece, w_string_piece>> pairs);\n    void setBool(const w_string& key, bool bval);\n\n    // Remove a value from the environment\n    void unset(const w_string& key);\n\n   private:\n    std::unordered_map<w_string, w_string> map_;\n  };\n\n  class Options {\n   public:\n    Options();\n    // Not copyable\n    Options(const Options&) = delete;\n    Options(Options&&) = default;\n    Options& operator=(const Options&) = delete;\n    Options& operator=(Options&&) = default;\n\n#ifdef POSIX_SPAWN_SETSIGMASK\n    void setSigMask(const sigset_t& mask);\n#endif\n    // Adds flags to the set of flags maintainted in the spawn attributes.\n    // This is logically equivalent to calling setflags(getflags()|flags)\n    void setFlags(short flags);\n\n    Environment& environment();\n\n    // Arranges to duplicate an fd from the parent as targetFd in\n    // the child process.\n    void dup2(int sourceFd, int targetFd);\n    void dup2(const FileDescriptor& fd, int targetFd);\n\n    // Arranges to create a pipe for communicating between the\n    // parent and child process and setting it as targetFd in\n    // the child.\n    void pipe(int targetFd, bool childRead);\n\n    // Set up stdin with a pipe\n    void pipeStdin();\n\n    // Set up stdout with a pipe\n    void pipeStdout();\n\n    // Set up stderr with a pipe\n    void pipeStderr();\n\n    // Set up stdin with a null device\n    void nullStdin();\n\n    // Set up stdout with a null device\n    void nullStdout();\n\n    // Set up stderr with a null device\n    void nullStderr();\n\n    // Arrange to open(2) a file for the child process and make\n    // it available as targetFd\n    void open(int targetFd, const char* path, int flags, int mode);\n\n    // Arrange to set the cwd for the child process\n    void chdir(w_string_piece path);\n\n   private:\n    void nullFd(int fd, int flags);\n\n    struct Inner {\n      // There is no defined way to copy or move either of\n      // these things, so we separate them out into a container\n      // that we can point to and move the pointer.\n      posix_spawn_file_actions_t actions;\n      posix_spawnattr_t attr;\n\n      Inner();\n      ~Inner();\n    };\n    std::unique_ptr<Inner> inner_;\n    Environment env_;\n    std::unordered_map<int, std::unique_ptr<Pipe>> pipes_;\n    std::string cwd_;\n\n    friend class ChildProcess;\n  };\n\n  ChildProcess(std::vector<std::string_view> args, Options&& options);\n  ChildProcess(const json_ref& args, Options&& options);\n  ~ChildProcess();\n\n  // Check to see if the process has terminated.\n  // Does not block.  Returns true if the process has\n  // terminated, false otherwise.\n  bool terminated();\n\n  // Wait for the process to terminate and return its\n  // exit status.  If the process has already terminated,\n  // immediately returns its exit status.\n  int wait();\n\n  // Disassociate from the running process.\n  // We will no longer be able to wait for it to complete.\n  // This causes minor leakage of resources.\n  void disown();\n\n  // This mutex is present to avoid fighting over the cwd when multiple\n  // process might need to chdir concurrently\n  static std::unique_lock<std::mutex> lockCwdMutex();\n\n  // Terminates the process\n  void kill(\n#ifndef _WIN32\n      int signo = SIGTERM\n#endif\n  );\n\n  // If stdin is a pipe and stdout and stderr aren't, then it's safe to extract\n  // the stdin pipe, write to it, close it, and then wait for the process to\n  // terminate.\n  std::unique_ptr<Pipe> takeStdin();\n\n  // The pipeWriteCallback is called by communicate when it is safe to write\n  // data to the pipe.  The callback should then attempt to write to it.\n  // The callback must return true when it has nothing more\n  // to write to the input of the child.  This will cause the\n  // pipe to be closed.\n  // Note that the pipe may be non-blocking, and you must not loop attempting\n  // to write data to the pipe - the caller will arrange to call you again\n  // if you return false (e.g. after a partial write).\n  using pipeWriteCallback = std::function<bool(FileDescriptor&)>;\n\n  /** ChildProcess::communicate() performs a read/write operation.\n   * The provided pipeWriteCallback allows sending data to the input stream.\n   * communicate() will return with the pair of output and error streams once\n   * they have been completely consumed. */\n  std::pair<std::optional<w_string>, std::optional<w_string>> communicate(\n      pipeWriteCallback writeCallback = [](FileDescriptor&) {\n        // If not provided by the caller, we're just going to close the input\n        // stream\n        return true;\n      });\n\n  // these are public for the sake of testing.  You should use the\n  // communicate() method instead of calling these directly.\n  std::pair<std::optional<w_string>, std::optional<w_string>>\n  pollingCommunicate(pipeWriteCallback writable);\n  std::pair<std::optional<w_string>, std::optional<w_string>>\n  threadedCommunicate(pipeWriteCallback writable);\n\n  /**\n   * Return the maximum number of platform characters allowed in the command\n   * lines, including null terminators. On POSIX, this number also includes the\n   * space consumed by environment variables.\n   */\n  static size_t getArgMax();\n\n private:\n  pid_t pid_;\n  bool waited_{false};\n  int status_;\n  std::unordered_map<int, std::unique_ptr<Pipe>> pipes_;\n\n  folly::Future<std::optional<w_string>> readPipe(int fd);\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/Client.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Client.h\"\n\n#include <folly/MapUtil.h>\n#include <folly/stop_watch.h>\n\n#include \"eden/common/utils/ProcessInfoCache.h\"\n#include \"watchman/ClientContext.h\"\n#include \"watchman/Command.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/MapUtil.h\"\n#include \"watchman/Poison.h\"\n#include \"watchman/ProcessUtil.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/Shutdown.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n#include \"watchman/telemetry/WatchmanStructuredLogger.h\"\n#include \"watchman/watchman_cmd.h\"\n\nnamespace watchman {\n\nnamespace {\n\nconstexpr size_t kResponseLogLimit = 0;\n\nfolly::Synchronized<std::unordered_set<UserClient*>> clients;\n\n// TODO: If used in a hot loop, EdenFS has a faster implementation.\n// https://github.com/facebookexperimental/eden/blob/c745d644d969dae1e4c0d184c19320fac7c27ae5/eden/fs/utils/IDGen.h\nstd::atomic<uint64_t> id_generator{1};\n} // namespace\n\nClient::Client() : Client(nullptr) {}\n\nClient::Client(std::unique_ptr<watchman_stream> stm)\n    : unique_id{id_generator++},\n      stm(std::move(stm)),\n      ping(\n#ifdef _WIN32\n          (this->stm &&\n           this->stm->getFileDescriptor().fdType() ==\n               FileDescriptor::FDType::Socket)\n              ? w_event_make_sockets()\n              : w_event_make_named_pipe()\n#else\n          w_event_make_sockets()\n#endif\n              ),\n      peerPid_{this->stm ? this->stm->getPeerProcessID() : 0},\n      peerInfo_{lookupProcessInfo(peerPid_)} {\n  logf(DBG, \"accepted client:stm={}\\n\", fmt::ptr(this->stm.get()));\n}\n\nClient::~Client() {\n  debugSub.reset();\n  errorSub.reset();\n\n  logf(DBG, \"client_delete {}\\n\", unique_id);\n\n  if (stm) {\n    stm->shutdown();\n  }\n}\n\nvoid Client::enqueueResponse(json_ref resp) {\n  responses.push_back(std::move(resp));\n}\n\nvoid Client::enqueueResponse(UntypedResponse resp) {\n  enqueueResponse(std::move(resp).toJson());\n}\n\nvoid Client::sendErrorResponse(std::string_view formatted) {\n  UntypedResponse resp;\n  resp.set(\"error\", typed_string_to_json(formatted));\n\n  if (dispatch_command) {\n    dispatch_command->error = formatted;\n  }\n\n  if (perf_sample) {\n    perf_sample->add_meta(\"error\", typed_string_to_json(formatted));\n  }\n\n  if (current_command) {\n    auto command = json_dumps(current_command->render(), 0);\n    watchman::log(\n        watchman::ERR,\n        \"send_error_response: \",\n        command,\n        \", failed: \",\n        formatted,\n        \"\\n\");\n  } else {\n    watchman::log(watchman::ERR, \"send_error_response: \", formatted, \"\\n\");\n  }\n\n  enqueueResponse(std::move(resp));\n}\n\nbool Client::dispatchCommand(const Command& command, CommandFlags mode) {\n  // Stash a reference to the current command to make it easier to log\n  // the command context in some of the error paths\n  current_command = &command;\n  SCOPE_EXIT {\n    current_command = nullptr;\n  };\n\n  try {\n    auto* def = command.getCommandDefinition();\n    if (!def) {\n      CommandValidationError::throwf(\"unknown command {}\", command.name());\n    }\n    if (def->flags.containsNoneOf(mode)) {\n      CommandValidationError::throwf(\n          \"command {} not available in this mode\", command.name());\n    }\n\n    if (!poisoned_reason.rlock()->empty() &&\n        !def->flags.contains(CMD_POISON_IMMUNE)) {\n      sendErrorResponse(*poisoned_reason.rlock());\n      return false;\n    }\n\n    if (!client_is_owner && !def->flags.contains(CMD_ALLOW_ANY_USER)) {\n      sendErrorResponse(\n          \"you must be the process owner to execute '{}'\", def->name);\n      return false;\n    }\n\n    // Scope for the perf sample\n    {\n      logf(DBG, \"dispatch_command: {}\\n\", def->name);\n      DispatchCommand dispatchCommand;\n      dispatchCommand.command = command.name();\n      dispatch_command = &dispatchCommand;\n\n      auto sample_name = \"dispatch_command:\" + std::string{def->name};\n      PerfSample sample(sample_name.c_str());\n      perf_sample = &sample;\n\n      SCOPE_EXIT {\n        dispatch_command = nullptr;\n        perf_sample = nullptr;\n      };\n\n      sample.set_wall_time_thresh(\n          cfg_get_double(\"slow_command_log_threshold_seconds\", 1.0));\n\n      // TODO: It's silly to convert a Command back into JSON after parsing it.\n      // Let's change `func` to take a Command after Command knows what a root\n      // path is.\n      auto rendered = command.render();\n      auto renderedString = rendered.toString();\n\n      try {\n        enqueueResponse(def->handler(this, rendered));\n      } catch (const ErrorResponse& e) {\n        sendErrorResponse(e.what());\n        dispatchCommand.error = e.what();\n      } catch (const ResponseWasHandledManually&) {\n      }\n\n      if (sample.finish()) {\n        sample.add_meta(\"args\", std::move(rendered));\n        sample.add_meta(\n            \"client\", json_object({{\"pid\", json_integer(peerPid_)}}));\n        sample.log();\n      }\n\n      const auto& [samplingRate, eventCount] =\n          getLogEventCounters(LogEventType::DispatchCommandType);\n      // Log if override set, or if we have hit the sample rate\n      if (sample.will_log || eventCount == samplingRate) {\n        dispatchCommand.event_count =\n            eventCount != samplingRate ? 0 : eventCount;\n        dispatchCommand.args = renderedString;\n        dispatchCommand.client_pid = peerPid_;\n        dispatchCommand.client_name =\n            facebook::eden::ProcessInfoCache::cleanProcessCommandline(\n                std::move(peerInfo_.get().name));\n\n        getLogger()->logEvent(dispatchCommand);\n      }\n\n      logf(DBG, \"dispatch_command: {} (completed)\\n\", def->name);\n    }\n\n    return true;\n  } catch (const std::exception& e) {\n    sendErrorResponse(folly::exceptionStr(e));\n    return false;\n  }\n}\n\nClientContext Client::getClientInfo() const {\n  return ClientContext{peerPid_, peerInfo_};\n}\n\nstd::string ClientStatus::getName() const {\n  switch (state_.load(std::memory_order_acquire)) {\n    case THREAD_STARTING:\n      return \"thread starting\";\n    case THREAD_STARTED:\n      return \"thread started\";\n    case WAITING_FOR_REQUEST:\n      return \"waiting for request\";\n    /// The client thread is decoding request data.\n    case DECODING_REQUEST:\n      return \"decoding request\";\n    /// The client thread is executing a request.\n    case DISPATCHING_COMMAND:\n      return \"dispatching command\";\n    /// The client thread is reading subscription events and processing them.\n    case PROCESSING_SUBSCRIPTION:\n      return \"processing subscription\";\n    /// The client thread is sending responses.\n    case SENDING_SUBSCRIPTION_RESPONSES:\n      return \"sending subscription responses\";\n    /// The client thread is shutting down.\n    case THREAD_STOPPING:\n      return \"stopping\";\n  }\n\n  return \"<unknown>\";\n}\n\nvoid UserClient::create(std::unique_ptr<watchman_stream> stm) {\n  auto uc = std::make_shared<UserClient>(PrivateBadge{}, std::move(stm));\n\n  // Start a thread for the client.\n  //\n  // We used to use libevent for this, but we have a low volume of concurrent\n  // clients and the json parse/encode APIs are not easily used in a\n  // non-blocking server architecture.\n  //\n  // The thread holds a reference count for its life, so the shared_ptr must be\n  // created before the thread is started.\n  std::thread{[uc] { uc->clientThread(); }}.detach();\n}\n\nUserClient::UserClient(PrivateBadge, std::unique_ptr<watchman_stream> stm)\n    : Client{std::move(stm)}, since_{std::chrono::system_clock::now()} {\n  clients.wlock()->insert(this);\n}\n\nUserClient::~UserClient() {\n  clients.wlock()->erase(this);\n\n  /* cancel subscriptions */\n  subscriptions.clear();\n\n  vacateStates();\n}\n\nstd::vector<std::shared_ptr<UserClient>> UserClient::getAllClients() {\n  std::vector<std::shared_ptr<UserClient>> v;\n\n  auto lock = clients.rlock();\n  v.reserve(lock->size());\n  for (auto& c : *lock) {\n    v.push_back(std::static_pointer_cast<UserClient>(c->shared_from_this()));\n  }\n  return v;\n}\n\nstd::vector<ClientDebugStatus> UserClient::getStatusForAllClients() {\n  std::vector<ClientDebugStatus> rv;\n  auto lock = clients.rlock();\n  rv.reserve(lock->size());\n  for (auto& c : *lock) {\n    rv.push_back(c->getDebugStatus());\n  }\n  return rv;\n}\n\nClientDebugStatus UserClient::getDebugStatus() const {\n  ClientDebugStatus rv;\n  rv.state = status_.getName();\n  if (peerPid_) {\n    rv.peer.emplace();\n    rv.peer->pid = peerPid_;\n    // May briefly, once, block on the ProcessInfoCache thread.\n    rv.peer->name = std::move(peerInfo_.get().name);\n  }\n  rv.since = std::chrono::system_clock::to_time_t(since_);\n  return rv;\n}\n\nvoid UserClient::vacateStates() {\n  while (!states.empty()) {\n    auto it = states.begin();\n    auto assertion = it->second.lock();\n\n    if (!assertion) {\n      states.erase(it->first);\n      continue;\n    }\n\n    auto root = assertion->root;\n\n    logf(\n        watchman::ERR,\n        \"implicitly vacating state {} on {} due to client disconnect\\n\",\n        assertion->name,\n        root->root_path);\n\n    // This will delete the state from client->states and invalidate\n    // the iterator.\n    w_leave_state(this, assertion, true, std::nullopt);\n  }\n}\n\nvoid UserClient::clientThread() noexcept {\n  status_.transitionTo(ClientStatus::THREAD_STARTED);\n\n  // Keep a persistent vector around so that we can avoid allocating\n  // and releasing heap memory when we collect items from the publisher\n  std::vector<std::shared_ptr<const watchman::Publisher::Item>> pending;\n\n  stm->setNonBlock(true);\n  w_set_thread_name(\n      \"client=\", unique_id, \":stm=\", uintptr_t(stm.get()), \":pid=\", peerPid_);\n\n  client_is_owner = stm->peerIsOwner();\n\n  EventPoll pfd[2];\n  pfd[0].evt = stm->getEvents();\n  pfd[1].evt = ping.get();\n\n  bool client_alive = true;\n  while (!w_is_stopping() && client_alive) {\n    // Wait for input from either the client socket or\n    // via the ping pipe, which signals that some other\n    // thread wants to unilaterally send data to the client\n\n    status_.transitionTo(ClientStatus::WAITING_FOR_REQUEST);\n    ignore_result(w_poll_events(pfd, 2, 2000));\n    if (w_is_stopping()) {\n      break;\n    }\n\n    if (pfd[0].ready) {\n      status_.transitionTo(ClientStatus::DECODING_REQUEST);\n      json_error_t jerr;\n      auto request = reader.decodeNext(stm.get(), &jerr);\n\n      if (!request && errno == EAGAIN) {\n        // That's fine\n      } else if (!request) {\n        // Not so cool\n        if (reader.wpos == reader.rpos) {\n          // If they disconnected in between PDUs, no need to log\n          // any error\n          goto disconnected;\n        }\n        sendErrorResponse(\n            \"invalid json at position {}: {}\", jerr.position, jerr.text);\n        logf(ERR, \"invalid data from client: {}\\n\", jerr.text);\n\n        goto disconnected;\n      } else if (request) {\n        format = reader.format;\n        status_.transitionTo(ClientStatus::DISPATCHING_COMMAND);\n        dispatchCommand(Command::parse(*request), CMD_DAEMON);\n      }\n    }\n\n    if (pfd[1].ready) {\n      while (ping->testAndClear()) {\n        status_.transitionTo(ClientStatus::PROCESSING_SUBSCRIPTION);\n        // Enqueue refs to pending log payloads\n        pending.clear();\n        getPending(pending, debugSub, errorSub);\n        for (auto& item : pending) {\n          enqueueResponse(json_ref(item->payload));\n        }\n\n        // Maybe we have subscriptions to dispatch?\n        std::vector<w_string> subsToDelete;\n        for (auto& [sub, subStream] : unilateralSub) {\n          watchman::log(\n              watchman::DBG, \"consider fan out sub \", sub->name, \"\\n\");\n\n          pending.clear();\n          subStream->getPending(pending);\n          bool seenSettle = false;\n          for (auto& item : pending) {\n            auto dumped = json_dumps(item->payload, 0);\n            watchman::log(\n                watchman::DBG,\n                \"Unilateral payload for sub \",\n                sub->name,\n                \" \",\n                dumped,\n                \"\\n\");\n\n            if (item->payload.get_optional(\"canceled\")) {\n              watchman::log(\n                  watchman::ERR,\n                  \"Cancel subscription \",\n                  sub->name,\n                  \" due to root cancellation\\n\");\n\n              UntypedResponse resp;\n              resp.set(\n                  {{\"unilateral\", json_true()},\n                   {\"canceled\", json_true()},\n                   {\"subscription\", w_string_to_json(sub->name)}});\n              if (auto root = item->payload.get_optional(\"root\")) {\n                resp.set(\"root\", *root);\n              }\n              enqueueResponse(std::move(resp));\n              // Remember to cancel this subscription.\n              // We can't do it in this loop because that would\n              // invalidate the iterators and cause a headache.\n              subsToDelete.push_back(sub->name);\n              continue;\n            }\n\n            if (item->payload.get_optional(\"state-enter\") ||\n                item->payload.get_optional(\"state-leave\")) {\n              UntypedResponse resp;\n              resp.insert(\n                  item->payload.object().begin(), item->payload.object().end());\n              // We have the opportunity to populate additional response\n              // fields here (since we don't want to block the command).\n              // We don't populate the fat clock for SCM aware queries\n              // because determination of mergeBase could add latency.\n              resp.set(\n                  {{\"unilateral\", json_true()},\n                   {\"subscription\", w_string_to_json(sub->name)}});\n              enqueueResponse(std::move(resp));\n\n              watchman::log(\n                  watchman::DBG,\n                  \"Fan out subscription state change for \",\n                  sub->name,\n                  \"\\n\");\n              continue;\n            }\n\n            if (!sub->debug_paused && item->payload.get_optional(\"settled\")) {\n              seenSettle = true;\n              continue;\n            }\n          }\n\n          if (seenSettle) {\n            sub->processSubscription();\n          }\n        }\n\n        for (auto& name : subsToDelete) {\n          unsubByName(name);\n        }\n      }\n    }\n\n    /* now send our response(s) */\n    while (!responses.empty() && client_alive) {\n      status_.transitionTo(ClientStatus::SENDING_SUBSCRIPTION_RESPONSES);\n      auto& response_to_send = responses.front();\n\n      stm->setNonBlock(false);\n      /* Return the data in the same format that was used to ask for it.\n       * Update client liveness based on send success.\n       */\n      auto encodeResult =\n          writer.pduEncodeToStream(this->format, response_to_send, stm.get());\n      client_alive = encodeResult.hasValue();\n      stm->setNonBlock(true);\n\n      std::optional<json_ref> subscriptionValue =\n          response_to_send.get_optional(\"subscription\");\n      if (kResponseLogLimit && subscriptionValue &&\n          subscriptionValue->isString() &&\n          json_string_value(*subscriptionValue)) {\n        auto subscriptionName = json_to_w_string(*subscriptionValue);\n        if (auto* sub = folly::get_ptr(subscriptions, subscriptionName)) {\n          if ((*sub)->lastResponses.size() >= kResponseLogLimit) {\n            (*sub)->lastResponses.pop_front();\n          }\n          (*sub)->lastResponses.push_back(\n              ClientSubscription::LoggedResponse{\n                  std::chrono::system_clock::now(), response_to_send});\n        }\n      }\n\n      responses.pop_front();\n    }\n  }\n\ndisconnected:\n  status_.transitionTo(ClientStatus::THREAD_STOPPING);\n  w_set_thread_name(\n      \"NOT_CONN:client=\",\n      unique_id,\n      \":stm=\",\n      uintptr_t(stm.get()),\n      \":pid=\",\n      peerPid_);\n}\n\n} // namespace watchman\n\nvoid w_leave_state(\n    watchman::UserClient* client,\n    std::shared_ptr<watchman::ClientStateAssertion> assertion,\n    bool abandoned,\n    const std::optional<json_ref>& metadata) {\n  // Broadcast about the state leave\n  auto payload = json_object(\n      {{\"root\", w_string_to_json(assertion->root->root_path)},\n       {\"clock\",\n        w_string_to_json(assertion->root->view()->getCurrentClockString())},\n       {\"state-leave\", w_string_to_json(assertion->name)}});\n  if (metadata) {\n    payload.set(\"metadata\", json_ref(*metadata));\n  }\n  if (abandoned) {\n    payload.set(\"abandoned\", json_true());\n  }\n  assertion->root->unilateralResponses->enqueue(std::move(payload));\n\n  // Now remove the state assertion\n  assertion->root->assertedStates.wlock()->removeAssertion(assertion);\n  // Increment state transition counter for this root\n  assertion->root->stateTransCount++;\n\n  if (client) {\n    mapRemove(client->states, assertion->name);\n  }\n}\n"
  },
  {
    "path": "watchman/Client.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <fmt/core.h>\n\n#include <chrono>\n#include <deque>\n#include <unordered_map>\n\n#include \"eden/common/utils/ProcessInfoCache.h\"\n#include \"watchman/Clock.h\"\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/PDU.h\"\n#include \"watchman/PerfSample.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n#include \"watchman/watchman_stream.h\"\n\nnamespace watchman {\n\nclass ClientStateAssertion;\nclass Command;\nclass Root;\nstruct Query;\nstruct QueryResult;\nstruct ClientContext;\n\nclass Client : public std::enable_shared_from_this<Client> {\n public:\n  Client();\n  explicit Client(std::unique_ptr<watchman_stream> stm);\n  virtual ~Client();\n\n  bool dispatchCommand(const Command& command, CommandFlags mode);\n\n  void enqueueResponse(json_ref resp);\n  void enqueueResponse(UntypedResponse resp);\n\n  ClientContext getClientInfo() const;\n\n  const uint64_t unique_id;\n  std::unique_ptr<watchman_stream> stm;\n  std::unique_ptr<watchman_event> ping;\n  PduBuffer reader;\n  PduBuffer writer;\n  bool client_mode = false;\n  bool client_is_owner = false;\n  PduFormat format;\n\n  // The command currently being processed by dispatchCommand. Only set by the\n  // client thread.\n  const Command* current_command = nullptr;\n  // The PerfSample wrapping the current command's execution. Only set by the\n  // client thread.\n  PerfSample* perf_sample = nullptr;\n  // The DispatchCommand wrapping the current command's execution. Only set by\n  // the client thread.\n  DispatchCommand* dispatch_command = nullptr;\n\n  // Queue of things to send to the client.\n  std::deque<json_ref> responses;\n\n  // Logging Subscriptions\n  std::shared_ptr<Publisher::Subscriber> debugSub;\n  std::shared_ptr<Publisher::Subscriber> errorSub;\n\n protected:\n  const pid_t peerPid_;\n  const facebook::eden::ProcessInfoHandle peerInfo_;\n\n  void sendErrorResponse(std::string_view formatted);\n\n  template <typename T, typename... Rest>\n  void sendErrorResponse(\n      fmt::format_string<T, Rest...> fmt,\n      T&& arg,\n      Rest&&... rest) {\n    return sendErrorResponse(\n        fmt::format(\n            std::move(fmt), std::forward<T>(arg), std::forward<Rest>(rest)...));\n  }\n};\n\nenum class OnStateTransition { QueryAnyway, DontAdvance };\n\nclass UserClient;\n\nclass ClientSubscription\n    : public std::enable_shared_from_this<ClientSubscription> {\n public:\n  explicit ClientSubscription(\n      const std::shared_ptr<Root>& root,\n      std::weak_ptr<Client> client);\n  ~ClientSubscription();\n\n  void processSubscription();\n\n  std::shared_ptr<UserClient> lockClient();\n  std::optional<UntypedResponse> buildSubscriptionResults(\n      const std::shared_ptr<Root>& root,\n      ClockSpec& position,\n      OnStateTransition onStateTransition);\n\n public:\n  struct LoggedResponse {\n    // TODO: also track the time when the response was enqueued\n    std::chrono::system_clock::time_point written;\n    json_ref response;\n  };\n\n  std::shared_ptr<Root> root;\n  w_string name;\n  /* whether this subscription is paused */\n  bool debug_paused = false;\n\n  std::shared_ptr<Query> query;\n  bool vcs_defer;\n  uint32_t last_sub_tick{0};\n  // map of statename => bool.  If true, policy is drop, else defer\n  std::unordered_map<w_string, bool> drop_or_defer;\n  std::weak_ptr<Client> weakClient;\n\n  std::deque<LoggedResponse> lastResponses;\n\n private:\n  ClockSpec runSubscriptionRules(\n      UserClient* client,\n      const std::shared_ptr<Root>& root);\n  void updateSubscriptionTicks(QueryResult* res);\n  void processSubscriptionImpl();\n};\n\nclass ClientStatus {\n public:\n  enum State {\n    /// UserClient is allocated, but its thread is not started.\n    THREAD_STARTING,\n    /// The client thread has begun.\n    THREAD_STARTED,\n    /// The client thread is waiting for a request.\n    WAITING_FOR_REQUEST,\n    /// The client thread is decoding request data.\n    DECODING_REQUEST,\n    /// The client thread is executing a request.\n    DISPATCHING_COMMAND,\n    /// The client thread is reading subscription events and processing them.\n    PROCESSING_SUBSCRIPTION,\n    /// The client thread is sending responses.\n    SENDING_SUBSCRIPTION_RESPONSES,\n    /// The client thread is shutting down.\n    THREAD_STOPPING,\n  };\n\n  void transitionTo(State state) {\n    state_.store(state, std::memory_order_release);\n  }\n\n  std::string getName() const;\n\n private:\n  // No locking or CAS required, as the tag is only written by UserClient's\n  // constructor and the client thread. There will never be simultaneous state\n  // transitions.\n  std::atomic<State> state_{THREAD_STARTING};\n};\n\nstruct PeerInfo : serde::Object {\n  int32_t pid;\n  std::string name;\n\n  template <typename X>\n  void map(X& x) {\n    x(\"pid\", pid);\n    x(\"name\", name);\n  }\n};\n\nstruct ClientDebugStatus : serde::Object {\n  std::string state;\n  std::optional<PeerInfo> peer;\n  std::optional<int64_t> since;\n\n  template <typename X>\n  void map(X& x) {\n    x(\"state\", state);\n    x(\"peer\", peer);\n    x(\"since\", since);\n  }\n};\n\n/**\n * Represents the server side session maintained for a client of\n * the watchman per-user process.\n *\n * Each UserClient has a corresponding thread that reads and decodes json\n * packets and dispatches the commands that it finds.\n */\nclass UserClient final : public Client {\n public:\n  static void create(std::unique_ptr<watchman_stream> stm);\n  ~UserClient() override;\n\n  static std::vector<std::shared_ptr<UserClient>> getAllClients();\n\n  static std::vector<ClientDebugStatus> getStatusForAllClients();\n\n  /* map of subscription name => struct watchman_client_subscription */\n  std::unordered_map<w_string, std::shared_ptr<ClientSubscription>>\n      subscriptions;\n\n  /* map of state-name => ClientStateAssertion\n   * The values are owned by root::assertedStates */\n  std::unordered_map<w_string, std::weak_ptr<ClientStateAssertion>> states;\n\n  // Subscriber to root::unilateralResponses\n  std::unordered_map<\n      std::shared_ptr<ClientSubscription>,\n      std::shared_ptr<Publisher::Subscriber>>\n      unilateralSub;\n\n  bool unsubByName(const w_string& name);\n\n private:\n  UserClient() = delete;\n  UserClient(UserClient&&) = delete;\n  UserClient& operator=(UserClient&&) = delete;\n\n  // To allow make_shared to construct UserClient.\n  struct PrivateBadge {};\n\n public: // Public for std::make_shared\n  explicit UserClient(PrivateBadge, std::unique_ptr<watchman_stream> stm);\n\n private:\n  ClientDebugStatus getDebugStatus() const;\n\n  // Abandon any states that haven't been explicit vacated.\n  void vacateStates();\n\n  void clientThread() noexcept;\n\n  const std::chrono::system_clock::time_point since_;\n\n  ClientStatus status_;\n};\n\n} // namespace watchman\n\nvoid w_leave_state(\n    watchman::UserClient* client,\n    std::shared_ptr<watchman::ClientStateAssertion> assertion,\n    bool abandoned,\n    const std::optional<json_ref>& metadata);\n"
  },
  {
    "path": "watchman/ClientContext.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"eden/common/utils/ProcessInfoCache.h\"\n\nnamespace watchman {\n/**\n * A struct containing information about the client that is triggering some\n * action in watchman. Currently used for telemetry.\n */\nstruct ClientContext {\n  pid_t clientPid;\n  std::optional<facebook::eden::ProcessInfoHandle> clientInfo;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/Clock.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Clock.h\"\n#include <folly/Overload.h>\n#include <folly/String.h>\n#include <folly/Synchronized.h>\n#include <folly/portability/SysTime.h>\n#include <memory>\n\nusing namespace watchman;\n\nstatic int proc_pid;\nstatic uint64_t proc_start_time;\n\nvoid ClockSpec::init() {\n  struct timeval tv;\n\n  proc_pid = (int)::getpid();\n  if (gettimeofday(&tv, nullptr) == -1) {\n    logf(FATAL, \"gettimeofday failed: {}\\n\", folly::errnoStr(errno));\n  }\n  proc_start_time = (uint64_t)tv.tv_sec;\n}\n\nClockSpec::ClockSpec(const json_ref& value) {\n  auto parseClockString = [=, this](const char* str) {\n    uint64_t start_time;\n    int pid;\n    ClockRoot root_number;\n    ClockTicks ticks;\n    // Parse a >= 2.8.2 version clock string\n    if (sscanf(\n            str,\n            \"c:%\" PRIu64 \":%d:%\" PRIu64 \":%\" PRIu64,\n            &start_time,\n            &pid,\n            &root_number,\n            &ticks) == 4) {\n      spec = Clock{start_time, pid, ClockPosition{root_number, ticks}};\n      return true;\n    }\n\n    if (sscanf(str, \"c:%d:%\" PRIu64, &pid, &ticks) == 2) {\n      // old-style clock value (<= 2.8.2) -- by setting clock time and root\n      // number to 0 we guarantee that this is treated as a fresh instance\n      spec = Clock{0, pid, ClockPosition{root_number, ticks}};\n      return true;\n    }\n\n    return false;\n  };\n\n  switch (value.type()) {\n    case JSON_INTEGER:\n      spec = Timestamp{static_cast<time_t>(value.asInt())};\n      return;\n\n    case JSON_OBJECT: {\n      auto clockStr = value.get_optional(\"clock\");\n      if (clockStr) {\n        if (!parseClockString(json_string_value(*clockStr))) {\n          throw std::domain_error(\"invalid clockspec\");\n        }\n      } else {\n        spec = Clock{0, 0, ClockPosition{0, 0}};\n      }\n\n      auto scm = value.get_optional(\"scm\");\n      if (scm) {\n        scmMergeBase = json_to_w_string(\n            scm->get_default(\"mergebase\", w_string_to_json(\"\")));\n        scmMergeBaseWith = json_to_w_string(scm->get(\"mergebase-with\"));\n        auto savedState = scm->get_optional(\"saved-state\");\n        if (savedState) {\n          savedStateConfig = savedState->get(\"config\");\n          savedStateStorageType = json_to_w_string(savedState->get(\"storage\"));\n          auto commitId = savedState->get_optional(\"commit-id\");\n          if (commitId) {\n            savedStateCommitId = json_to_w_string(*commitId);\n          } else {\n            savedStateCommitId = w_string();\n          }\n        }\n      }\n\n      return;\n    }\n\n    case JSON_STRING: {\n      auto str = json_string_value(value);\n\n      if (str[0] == 'n' && str[1] == ':') {\n        spec = NamedCursor{json_to_w_string(value)};\n        return;\n      }\n\n      if (parseClockString(str)) {\n        return;\n      }\n\n      /* fall through to default case and throw error.\n       * The redundant looking comment below is a hint to\n       * gcc that it is ok to fall through. */\n      [[fallthrough]];\n    }\n\n    default:\n      throw std::domain_error(\"invalid clockspec\");\n  }\n}\n\nstd::unique_ptr<ClockSpec> ClockSpec::parseOptionalClockSpec(\n    const json_ref& value) {\n  if (value.isNull()) {\n    return nullptr;\n  }\n  return std::make_unique<ClockSpec>(value);\n}\n\nClockSpec::ClockSpec() : spec{Timestamp{0}} {}\n\nClockSpec::ClockSpec(const ClockPosition& position)\n    : spec{Clock{proc_start_time, proc_pid, position}} {}\n\nQuerySince ClockSpec::evaluate(\n    const ClockPosition& position,\n    ClockTicks lastAgeOutTick,\n    folly::Synchronized<std::unordered_map<w_string, ClockTicks>>* cursorMap)\n    const {\n  return folly::variant_match(\n      spec,\n      [](const Timestamp& ts) -> QuerySince {\n        return QuerySince::Timestamp{ts.time};\n      },\n      [&](const Clock& clock) -> QuerySince {\n        QuerySince::Clock since_clock;\n        if (clock.start_time == proc_start_time && clock.pid == proc_pid &&\n            clock.position.rootNumber == position.rootNumber) {\n          since_clock.is_fresh_instance = clock.position.ticks < lastAgeOutTick;\n          if (since_clock.is_fresh_instance) {\n            since_clock.ticks = 0;\n          } else {\n            since_clock.ticks = clock.position.ticks;\n          }\n        } else {\n          // If the pid, start time or root number don't match, they asked a\n          // different incarnation of the server or a different instance of this\n          // root, so we treat them as having never spoken to us before.\n          since_clock.is_fresh_instance = true;\n          since_clock.ticks = 0;\n        }\n        return since_clock;\n      },\n      [&](const NamedCursor& named_cursor) -> QuerySince {\n        if (!cursorMap) {\n          // This is checked for and handled at parse time in SinceExpr::parse,\n          // so this should be impossible to hit.\n          throw std::runtime_error(\n              \"illegal to use a named cursor in this context\");\n        }\n\n        QuerySince::Clock since_clock;\n\n        {\n          auto wlock = cursorMap->wlock();\n          auto& cursors = *wlock;\n          auto it = cursors.find(named_cursor.cursor);\n\n          if (it == cursors.end()) {\n            since_clock.is_fresh_instance = true;\n            since_clock.ticks = 0;\n          } else {\n            since_clock.ticks = it->second;\n            since_clock.is_fresh_instance = since_clock.ticks < lastAgeOutTick;\n          }\n\n          // record the current tick value against the cursor so that we use\n          // that as the basis for a subsequent query.\n          cursors[named_cursor.cursor] = position.ticks;\n        }\n\n        log(DBG,\n            \"resolved cursor \",\n            named_cursor.cursor,\n            \" -> \",\n            since_clock.ticks,\n            \"\\n\");\n\n        return since_clock;\n      });\n}\n\nbool clock_id_string(\n    ClockRoot root_number,\n    ClockTicks ticks,\n    char* buf,\n    size_t bufsize) {\n  int res = snprintf(\n      buf,\n      bufsize,\n      \"c:%\" PRIu64 \":%d:%\" PRIu64 \":%\" PRIu64,\n      proc_start_time,\n      proc_pid,\n      root_number,\n      ticks);\n\n  if (res == -1) {\n    return false;\n  }\n  return (size_t)res < bufsize;\n}\n\nw_string ClockPosition::toClockString() const {\n  char clockbuf[128];\n  if (!clock_id_string(rootNumber, ticks, clockbuf, sizeof(clockbuf))) {\n    throw std::runtime_error(\"clock is too big for clockbuf\");\n  }\n  return w_string(clockbuf, W_STRING_UNICODE);\n}\n\njson_ref ClockSpec::toJson() const {\n  if (scmMergeBase) {\n    auto scm = json_object(\n        {{\"mergebase\", w_string_to_json(scmMergeBase.value())},\n         {\"mergebase-with\", w_string_to_json(scmMergeBaseWith)}});\n    if (savedStateStorageType) {\n      auto savedState = json_object(\n          {{\"storage\", w_string_to_json(savedStateStorageType.value())},\n           {\"config\", savedStateConfig.value()}});\n      if (savedStateCommitId != w_string()) {\n        json_object_set(\n            savedState, \"commit-id\", w_string_to_json(savedStateCommitId));\n      }\n      json_object_set(scm, \"saved-state\", savedState);\n    }\n    return json_object(\n        {{\"clock\", w_string_to_json(position().toClockString())},\n         {\"scm\", scm}});\n  }\n  return w_string_to_json(position().toClockString());\n}\n\nbool ClockSpec::hasScmParams() const {\n  return scmMergeBase.has_value();\n}\n\nbool ClockSpec::hasSavedStateParams() const {\n  return savedStateStorageType.has_value();\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/Clock.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/Synchronized.h>\n#include <unordered_map>\n#include <variant>\n#include \"watchman/Logging.h\"\n\nnamespace watchman {\n\nusing ClockTicks = uint64_t;\nusing ClockRoot = uint64_t;\n\nstruct ClockStamp {\n  ClockTicks ticks;\n  time_t timestamp;\n};\n\nstruct QuerySince {\n  struct Timestamp {\n    time_t time;\n  };\n  struct Clock {\n    bool is_fresh_instance;\n    ClockTicks ticks;\n  };\n  std::variant<Timestamp, Clock> since;\n\n  QuerySince() : since{Clock{true, 0}} {}\n  /* implicit */ QuerySince(Timestamp ts) : since{ts} {}\n  /* implicit */ QuerySince(Clock clock) : since{clock} {}\n\n  bool is_timestamp() const {\n    return std::holds_alternative<Timestamp>(since);\n  }\n\n  /**\n   * Throws if this holds a Timestamp.\n   */\n  bool is_fresh_instance() const {\n    return std::get<Clock>(since).is_fresh_instance;\n  }\n\n  /**\n   * Set the clock to a fresh instance.\n   *\n   * Throws if this holds a Timestamp.\n   */\n  void set_fresh_instance() {\n    std::get<Clock>(since).is_fresh_instance = true;\n  }\n};\n\nstruct ClockPosition {\n  ClockRoot rootNumber{0};\n  ClockTicks ticks{0};\n\n  ClockPosition() = default;\n  ClockPosition(ClockRoot rootNumber, ClockTicks ticks)\n      : rootNumber(rootNumber), ticks(ticks) {}\n\n  w_string toClockString() const;\n};\n\nstruct ClockSpec {\n  struct Timestamp {\n    time_t time;\n  };\n\n  struct Clock {\n    uint64_t start_time;\n    int pid;\n    ClockPosition position;\n  };\n\n  struct NamedCursor {\n    w_string cursor;\n  };\n\n  std::variant<Timestamp, Clock, NamedCursor> spec;\n\n  // Optional SCM merge base parameters\n  std::optional<w_string> scmMergeBase;\n  w_string scmMergeBaseWith;\n  // Optional saved state parameters\n  std::optional<json_ref> savedStateConfig;\n  std::optional<w_string> savedStateStorageType;\n  w_string savedStateCommitId;\n\n  ClockSpec();\n  explicit ClockSpec(const ClockPosition& position);\n  explicit ClockSpec(const json_ref& value);\n\n  /** Given a json value, parse out a clockspec.\n   * Will return nullptr if the input was json null, indicating\n   * an absence of a specified clock value.\n   * Throws std::domain_error for badly formed clockspec value.\n   */\n  static std::unique_ptr<ClockSpec> parseOptionalClockSpec(\n      const json_ref& value);\n\n  /** Evaluate the clockspec against the inputs, returning\n   * the effective since parameter.\n   * If cursorMap is passed in, it MUST be unlocked, as this method\n   * will acquire a lock to evaluate a named cursor. */\n  QuerySince evaluate(\n      const ClockPosition& position,\n      const ClockTicks lastAgeOutTick,\n      folly::Synchronized<std::unordered_map<w_string, ClockTicks>>* cursorMap =\n          nullptr) const;\n\n  /** Initializes some global state needed for clockspec evaluation */\n  static void init();\n\n  inline const ClockPosition& position() const {\n    auto* c = std::get_if<Clock>(&spec);\n    w_check(c, \"position() called for non-clock clockspec\");\n    return c->position;\n  }\n\n  bool hasScmParams() const;\n  bool hasSavedStateParams() const;\n\n  /** Returns a json value representing the current state of this ClockSpec\n   * that can be parsed by the ClockSpec(const json_ref&)\n   * constructor of this class */\n  json_ref toJson() const;\n};\n\n} // namespace watchman\n\nbool clock_id_string(\n    watchman::ClockRoot root_number,\n    watchman::ClockTicks ticks,\n    char* buf,\n    size_t bufsize);\n"
  },
  {
    "path": "watchman/Command.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Command.h\"\n#include <folly/String.h>\n#include <watchman/fs/FileDescriptor.h>\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/watchman_stream.h\"\n\nnamespace watchman {\n\nCommand::Command(w_string name, json_ref args)\n    : name_{std::move(name)},\n      args_{std::move(args)},\n      commandDefinition_{CommandDefinition::lookup(name_.view())} {}\n\nCommand Command::parse(const json_ref& pdu) {\n  if (!json_array_size(pdu)) {\n    throw CommandValidationError{\n        \"invalid command (expected an array with some elements!)\"};\n  }\n\n  const auto jstr = pdu.array().at(0);\n  const char* cmd_name = json_string_value(jstr);\n  if (!cmd_name) {\n    throw CommandValidationError{\n        \"invalid command: expected element 0 to be the command name\"};\n  }\n\n  const auto& pdu_array = pdu.array();\n  std::vector<json_ref> args_array;\n  args_array.reserve(pdu_array.size() - 1);\n  for (size_t i = 1; i < pdu_array.size(); ++i) {\n    args_array.push_back(pdu_array[i]);\n  }\n\n  return Command{w_string{cmd_name}, json_array(std::move(args_array))};\n}\n\njson_ref Command::render() const {\n  std::vector<json_ref> arr;\n  arr.push_back(w_string_to_json(name_));\n  arr.insert(arr.end(), args_.array().begin(), args_.array().end());\n  return json_array(std::move(arr));\n}\n\nvoid Command::validateOrExit(PduFormat error_format) {\n  auto* def = CommandDefinition::lookup(name_.view());\n  if (!def) {\n    // Nothing known about it, pass the command on anyway for forwards\n    // compatibility\n    return;\n  }\n\n  if (!def->validator) {\n    return;\n  }\n\n  try {\n    def->validator(*this);\n  } catch (const std::exception& exc) {\n    auto err = json_object(\n        {{\"error\", typed_string_to_json(exc.what(), W_STRING_MIXED)},\n         {\"version\", typed_string_to_json(PACKAGE_VERSION, W_STRING_UNICODE)},\n         {\"cli_validated\", json_true()}});\n\n    PduBuffer jr;\n    jr.pduEncodeToStream(error_format, err, w_stm_stdout());\n    exit(1);\n  }\n}\n\nResultErrno<folly::Unit> Command::run(\n    Stream& stream,\n    bool persistent,\n    PduFormat server_format,\n    PduFormat output_format,\n    Pretty pretty) const {\n  // Start in a well-defined non-blocking state as we can't tell\n  // what mode we're in on windows until we've set it to something\n  // explicitly at least once before!\n  stream.setNonBlock(false);\n\n  PduBuffer buffer;\n\n  // Send command\n  auto res = buffer.pduEncodeToStream(server_format, render(), &stream);\n  if (res.hasError()) {\n    logf(\n        ERR, \"error sending PDU to server: {}\\n\", folly::errnoStr(res.error()));\n    return res;\n  }\n\n  buffer.clear();\n\n  PduBuffer output_pdu_buffer;\n  if (persistent) {\n    for (;;) {\n      auto result = passPduToStdout(\n          stream, buffer, output_format, output_pdu_buffer, pretty);\n      if (result.hasError()) {\n        return result;\n      }\n    }\n  } else {\n    return passPduToStdout(\n        stream, buffer, output_format, output_pdu_buffer, pretty);\n  }\n}\n\nnamespace {\nbool is_pretty(Pretty pretty, const FileDescriptor& stdOut) {\n  switch (pretty) {\n    case Pretty::Yes:\n      return true;\n    case Pretty::IfTty:\n      return stdOut.isatty();\n    case Pretty::No:\n      return false;\n  }\n  return false;\n}\n} // namespace\n\nResultErrno<folly::Unit> Command::passPduToStdout(\n    Stream& stream,\n    PduBuffer& input_buffer,\n    PduFormat output_format,\n    PduBuffer& output_pdu_buf,\n    Pretty pretty) const {\n  json_error_t jerr;\n\n  stream.setNonBlock(false);\n  if (!input_buffer.readAndDetectPdu(&stream, &jerr)) {\n    int err = errno;\n    logf(ERR, \"failed to identify PDU: {}\\n\", jerr.text);\n    return err;\n  }\n\n  const bool pretty_output = is_pretty(pretty, FileDescriptor::stdOut());\n  if (!pretty_output && output_pdu_buf.format.type == output_format.type) {\n    // We can stream it through\n    if (!input_buffer.streamPdu(&stream, &jerr)) {\n      int err = errno;\n      logf(ERR, \"stream_pdu: {}\\n\", jerr.text);\n      return err;\n    }\n    return folly::unit;\n  }\n\n  auto response = input_buffer.decodePdu(&stream, &jerr);\n  if (!response) {\n    int err = errno;\n    logf(ERR, \"failed to parse response: {}\\n\", jerr.text);\n    return err;\n  }\n\n  auto* def = commandDefinition_;\n  if (pretty_output && def && def->result_printer) {\n    def->result_printer(*response);\n    // TODO: Can result_printer return an error?\n    return folly::unit;\n  } else {\n    output_pdu_buf.clear();\n    return output_pdu_buf.pduEncodeToStream(\n        output_format, *response, w_stm_stdout());\n  }\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/Command.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <chrono>\n#include \"watchman/PDU.h\"\n#include \"watchman/Result.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nnamespace watchman {\n\nstruct CommandDefinition;\nclass Stream;\n\nenum class Pretty {\n  Yes,\n  IfTty,\n  No,\n};\n\nclass Command {\n public:\n  /**\n   * Constructs a null command used only to start the Watchman server.\n   */\n  /* implicit */ Command(std::nullptr_t) : args_{json_null()} {}\n\n  Command(w_string name, json_ref args);\n\n  /**\n   * Parses a command from arbitrary JSON.\n   *\n   * Throws CommandValidationError if the JSON is invalid.\n   */\n  static Command parse(const json_ref& pdu);\n\n  /**\n   * Renders into a JSON (or BSER) PDU.\n   */\n  json_ref render() const;\n\n  /**\n   * The null command is used solely to start the server, and never actually\n   * executed.\n   */\n  bool isNullCommand() const {\n    return name_ == nullptr;\n  }\n\n  std::string_view name() const {\n    return name_.view();\n  }\n\n  json_ref& args() {\n    return args_;\n  }\n\n  const json_ref& args() const {\n    return args_;\n  }\n\n  /**\n   * Returns an unowned reference to the command definition for `name_`. May be\n   * null if there is no corresponding command.\n   */\n  const CommandDefinition* getCommandDefinition() const {\n    return commandDefinition_;\n  }\n\n  /**\n   * Perform some client-side validation of this Command and its arguments. If\n   * validation fails, print an error PDU to stdout in the format specified by\n   * `output_pdu` and `output_capabilities` and exit(1).\n   */\n  void validateOrExit(PduFormat error_format);\n\n  /**\n   * Called by the client. Sends a command to the daemon and prints the output\n   * response to stdout.\n   *\n   * If persistent is true, this function continuously loops until there is an\n   * error reading from the connection stream.\n   */\n  ResultErrno<folly::Unit> run(\n      Stream& stream,\n      bool persistent,\n      PduFormat server_format,\n      PduFormat output_format,\n      Pretty pretty) const;\n\n private:\n  /**\n   * Read a PDU from `stream`, blocking if necessary, and encode it into\n   * stdout through `output_pdu_buf`.\n   */\n  ResultErrno<folly::Unit> passPduToStdout(\n      Stream& stream,\n      PduBuffer& input_buffer,\n      PduFormat output_format,\n      PduBuffer& output_pdu_buf,\n      Pretty pretty) const;\n\n  w_string name_;\n  json_ref args_;\n\n  const CommandDefinition* commandDefinition_ = nullptr;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/CommandRegistry.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/CommandRegistry.h\"\n#include <unordered_map>\n#include <unordered_set>\n#include \"watchman/Errors.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nnamespace watchman {\n\nnamespace {\n\nCommandDefinition* commandsList = nullptr;\n\nstruct CommandRegistry {\n  std::unordered_set<std::string> capabilities;\n\n  CommandRegistry() {\n    capabilities.reserve(128);\n  }\n\n  static CommandRegistry& get() {\n    // Meyers singleton to avoid SIOF problems\n    static auto* s = new CommandRegistry;\n    return *s;\n  }\n};\n\n} // namespace\n\nErrorResponse::ErrorResponse(const char* message)\n    : std::runtime_error{message} {}\n\nUntypedResponse::UntypedResponse() {\n  set(\"version\", typed_string_to_json(PACKAGE_VERSION, W_STRING_UNICODE));\n}\n\nUntypedResponse::UntypedResponse(std::unordered_map<w_string, json_ref> map)\n    : std::unordered_map<w_string, json_ref>{std::move(map)} {}\n\njson_ref UntypedResponse::toJson() && {\n  return json_object(std::move(*this));\n}\n\nvoid UntypedResponse::set(const char* key, json_ref value) {\n  insert_or_assign(w_string{key, W_STRING_UNICODE}, std::move(value));\n}\n\nvoid UntypedResponse::set(\n    std::initializer_list<std::pair<const char*, json_ref>> values) {\n  for (auto& [key, value] : values) {\n    set(key, value);\n  }\n}\n\nCommandDefinition::CommandDefinition(\n    std::string_view name,\n    std::string_view capname,\n    CommandHandler handler,\n    CommandFlags flags,\n    CommandValidator validator,\n    ResultPrinter result_printer)\n    : name{name},\n      flags{flags},\n      validator{validator},\n      handler{handler},\n      result_printer{result_printer} {\n  next_ = commandsList;\n  commandsList = this;\n\n  capability_register(capname);\n}\n\nconst CommandDefinition* CommandDefinition::lookup(std::string_view name) {\n  // You can imagine optimizing this into a sublinear lookup but the command\n  // list is small and constant.\n  for (const auto* def = commandsList; def; def = def->next_) {\n    if (name == def->name) {\n      return def;\n    }\n  }\n  return nullptr;\n}\n\nstd::vector<const CommandDefinition*> CommandDefinition::getAll() {\n  size_t n = 0;\n  for (const auto* p = commandsList; p; p = p->next_) {\n    ++n;\n  }\n\n  std::vector<const CommandDefinition*> defs;\n  defs.reserve(n);\n  for (auto* p = commandsList; p; p = p->next_) {\n    defs.push_back(p);\n  }\n  return defs;\n}\n\nBaseResponse::BaseResponse() : version{PACKAGE_VERSION, W_STRING_UNICODE} {}\n\nvoid capability_register(std::string_view name) {\n  CommandRegistry::get().capabilities.emplace(name);\n}\n\nbool capability_supported(std::string_view name) {\n  auto& reg = CommandRegistry::get();\n  // TODO: Eliminate this copy.\n  return reg.capabilities.find(std::string{name}) != reg.capabilities.end();\n}\n\njson_ref capability_get_list() {\n  auto& caps = CommandRegistry::get().capabilities;\n\n  std::vector<json_ref> arr;\n  arr.reserve(caps.size());\n  for (auto& name : caps) {\n    arr.push_back(typed_string_to_json(name.c_str()));\n  }\n\n  return json_array(std::move(arr));\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/CommandRegistry.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdexcept>\n#include <vector>\n\n// TODO: We could avoid the Client dependency fi CommandHandler returned a\n// json_ref response or error rather than taking a Client.\n#include \"eden/common/utils/OptionSet.h\"\n#include \"watchman/Serde.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_preprocessor.h\"\n\nnamespace watchman {\n\nclass Client;\nclass Command;\n\n/**\n * Thrown by command handlers to indicate a potentially expected error, where\n * the given message is used directly in the Watchman error response.\n */\nclass ErrorResponse : public std::runtime_error {\n public:\n  ErrorResponse(const char* message);\n\n  template <typename First, typename... Rest>\n  ErrorResponse(\n      fmt::format_string<First, Rest...> fmt,\n      First&& first,\n      Rest&&... rest)\n      : ErrorResponse(\n            fmt::format(\n                std::move(fmt),\n                std::forward<First>(first),\n                std::forward<Rest>(rest)...)\n                .c_str()) {}\n};\n\n/**\n * Thrown by command handlers that manually enqueue a response.\n */\nclass ResponseWasHandledManually : public std::exception {};\n\n/**\n * Represents an old-style, untyped JSON command response.\n *\n * Since JSON ASTs are (or will be) immutable, the response objects are built in\n * an UntypedResponse before being converted to a JSON object as late as\n * possible.\n */\nclass UntypedResponse : public std::unordered_map<w_string, json_ref> {\n public:\n  /**\n   * Automatically sets the \"version\" field.\n   */\n  UntypedResponse();\n\n  /**\n   * Construct from a previously-composed JSON unordered_map.\n   */\n  explicit UntypedResponse(std::unordered_map<w_string, json_ref> map);\n\n  /**\n   * Consumes the UntypedResponse and converts it into a JSON object.\n   */\n  json_ref toJson() &&;\n\n  void set(const char* key, json_ref value);\n\n  void set(std::initializer_list<std::pair<const char*, json_ref>> values);\n};\n\n/**\n * Validates a command's arguments. Runs on the client. May modify the given\n * command. Should throw an exception (ideally CommandValidationError) if\n * validation fails.\n */\nusing CommandValidator = void (*)(Command& command);\n\n/**\n * Executes a command's primary action. Usually runs on the server, but there\n * are client-only commands.\n *\n * Returns a success response, or throws ErrorResponse.\n */\nusing CommandHandler =\n    UntypedResponse (*)(Client* client, const json_ref& args);\n\n/**\n * For commands that support pretty, human-readable output, this function is\n * called, on the client, with a result PDU. It should print its output to\n * stdout.\n *\n * Only called when the output is a tty.\n */\nusing ResultPrinter = void (*)(const json_ref& result);\n\nstruct CommandFlags : facebook::eden::OptionSet<CommandFlags, uint8_t> {};\n\ninline constexpr auto CMD_DAEMON = CommandFlags::raw(1);\ninline constexpr auto CMD_CLIENT = CommandFlags::raw(2);\ninline constexpr auto CMD_POISON_IMMUNE = CommandFlags::raw(4);\ninline constexpr auto CMD_ALLOW_ANY_USER = CommandFlags::raw(8);\n\nstruct CommandDefinition {\n  const std::string_view name;\n  const CommandFlags flags;\n  const CommandValidator validator;\n  const CommandHandler handler;\n  const ResultPrinter result_printer;\n\n  CommandDefinition(\n      std::string_view name,\n      std::string_view capname,\n      CommandHandler handler,\n      CommandFlags flags,\n      CommandValidator validator,\n      ResultPrinter result_printer);\n\n  /**\n   * Provide a way to query (and eventually modify) command line arguments\n   *\n   * This is not thread-safe and should only be invoked from main()\n   */\n  static const CommandDefinition* lookup(std::string_view name);\n\n  static std::vector<const CommandDefinition*> getAll();\n\n private:\n  // registration linkage\n  CommandDefinition* next_ = nullptr;\n};\n\n/**\n * Response types should extend BaseResponse by default, since every Watchman\n * response includes a version string.\n */\nstruct BaseResponse : serde::Object {\n  w_string version;\n\n  BaseResponse();\n\n  template <typename X>\n  void map(X& x) {\n    x.required(\"version\", version);\n  }\n};\n\n/**\n * For commands that have no request parameters, write:\n * `using Request = NullRequest`\n */\nusing NullRequest = serde::Nothing;\n\n/**\n * Provides a typed interface for CommandDefinition that can optionally handle\n * validation, result-printing, request decoding, and response encoding.\n */\ntemplate <typename T>\nclass TypedCommand : public CommandDefinition {\n public:\n  /// Override to implement a validator.\n  static constexpr CommandValidator validate = nullptr;\n\n  explicit TypedCommand(ResultPrinter resultPrinter = nullptr)\n      : CommandDefinition{\n            T::name,\n            // TODO: eliminate this allocation\n            std::string{\"cmd-\"} + std::string{T::name},\n            T::handleRaw,\n            T::flags,\n            T::validate,\n            resultPrinter} {}\n\n  static UntypedResponse handleRaw(Client* client, const json_ref& args) {\n    // In advance of having individual handlers take a Command struct directly,\n    // let's shift off the first entry `args`, since we know it's the command\n    // name.\n    auto& arr = args.array();\n    std::vector<json_ref> adjusted_args;\n    for (size_t i = 1; i < arr.size(); ++i) {\n      adjusted_args.push_back(arr[i]);\n    }\n\n    using Request = typename T::Request;\n    auto encodedResponse = serde::encode(\n        T::handle(\n            client,\n            serde::decode<Request>(json_array(std::move(adjusted_args)))));\n    return UntypedResponse{encodedResponse.object()};\n  }\n};\n\n/**\n * A subclass of TypedCommand that also provides can print a human-readable\n * representation of the response.\n *\n * TODO: It might be possible to morge this into TypedCommand by using SFINAE to\n * detect the existence of a printResult method.\n */\ntemplate <typename T>\nclass PrettyCommand : public TypedCommand<T> {\n public:\n  PrettyCommand() : TypedCommand<T>{&printResultRaw} {}\n\n  static void printResultRaw(const json_ref& result) {\n    using Response = typename T::Response;\n    return T::printResult(serde::decode<Response>(result));\n  }\n};\n\nstatic_assert(\n    std::is_trivially_destructible_v<CommandDefinition>,\n    \"CommandDefinition should remain unchanged until process exit\");\n\nvoid capability_register(std::string_view name);\nbool capability_supported(std::string_view name);\njson_ref capability_get_list();\n\n#define W_CMD_REG(name, func, flags, clivalidate)                       \\\n  static const ::watchman::CommandDefinition w_gen_symbol(w_cmd_def_) { \\\n    (name), \"cmd-\" name, (func), (flags), (clivalidate), nullptr        \\\n  }\n\n#define WATCHMAN_COMMAND(name, class_) static class_ reg_##name\n\n#define W_CAP_REG1(symbol, name)           \\\n  static w_ctor_fn_type(symbol) {          \\\n    ::watchman::capability_register(name); \\\n  }                                        \\\n  w_ctor_fn_reg(symbol)\n\n#define W_CAP_REG(name) W_CAP_REG1(w_gen_symbol(w_cap_reg_), name)\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/Connect.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Connect.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/sockname.h\"\n#include \"watchman/watchman_stream.h\"\n\nusing namespace watchman;\n\nResultErrno<std::unique_ptr<Stream>> w_stm_connect(int timeoutms) {\n  // Default to using unix domain sockets unless disabled by config\n  auto use_unix_domain = Configuration().getBool(\"use-unix-domain\", true);\n\n  // We have to return some kind of error if use_unix_domain is false and\n  // disabled_named_pipe is true. \"Destination address required\" seems to fit.\n  int err = EDESTADDRREQ;\n\n  if (use_unix_domain && !disable_unix_socket) {\n    auto stm = w_stm_connect_unix(get_unix_sock_name().c_str(), timeoutms);\n    if (stm.hasValue()) {\n      return stm;\n    }\n    err = stm.error();\n  }\n\n#ifdef _WIN32\n  if (!disable_named_pipe) {\n    std::unique_ptr<Stream> stm =\n        w_stm_connect_named_pipe(get_named_pipe_sock_path().c_str(), timeoutms);\n    if (stm) {\n      return stm;\n    }\n    err = errno;\n  }\n#endif\n\n  return err;\n}\n"
  },
  {
    "path": "watchman/Connect.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <memory>\n#include \"watchman/Result.h\"\n\nnamespace watchman {\nclass Stream;\n}\n\n/**\n * Connect to a running Watchman instance via unix socket or a named pipe.\n *\n * Returns a connected stream, or an errno upon error.\n */\nwatchman::ResultErrno<std::unique_ptr<watchman::Stream>> w_stm_connect(\n    int timeoutms);\n"
  },
  {
    "path": "watchman/Constants.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdint.h>\n\nnamespace watchman {\n\ninline constexpr uint32_t kIoBufSize = 1024 * 1024;\ninline constexpr uint32_t kBatchLimit = 16 * 1024;\n\n} // namespace watchman\n\n#define WATCHMAN_IO_BUF_SIZE (::watchman::kIoBufSize)\n#define WATCHMAN_BATCH_LIMIT (::watchman::kBatchLimit)\n"
  },
  {
    "path": "watchman/ContentHash.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/ContentHash.h\"\n#include <fmt/core.h>\n#include <folly/ScopeGuard.h>\n#include <string>\n#include \"watchman/Hash.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/ThreadPool.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/watchman_stream.h\"\n\n#ifdef __APPLE__\n#define COMMON_DIGEST_FOR_OPENSSL\n#include \"CommonCrypto/CommonDigest.h\" // @manual\n#elif defined(_WIN32)\n#include <Wincrypt.h> // @manual\n#else\n#include <openssl/sha.h>\n#endif\n\nnamespace watchman {\n\nusing HashValue = typename ContentHashCache::HashValue;\nusing Node = typename ContentHashCache::Node;\n\nbool ContentHashCacheKey::operator==(const ContentHashCacheKey& other) const {\n  return fileSize == other.fileSize && mtime.tv_sec == other.mtime.tv_sec &&\n      mtime.tv_nsec == other.mtime.tv_nsec &&\n      relativePath == other.relativePath;\n}\n\nstd::size_t ContentHashCacheKey::hashValue() const {\n  return hash_combine(\n      {relativePath.hashValue(),\n       fileSize,\n       static_cast<uint64_t>(mtime.tv_sec),\n       static_cast<uint64_t>(mtime.tv_nsec)});\n}\n\nContentHashCache::ContentHashCache(\n    const w_string& rootPath,\n    size_t maxItems,\n    std::chrono::milliseconds errorTTL)\n    : cache_(maxItems, errorTTL), rootPath_(rootPath) {}\n\nfolly::Future<std::shared_ptr<const Node>> ContentHashCache::get(\n    const ContentHashCacheKey& key) {\n  return cache_.get(\n      key, [this](const ContentHashCacheKey& k) { return computeHash(k); });\n}\n\nHashValue ContentHashCache::computeHashImmediate(const char* fullPath) {\n  HashValue result;\n  uint8_t buf[8192];\n\n  auto stm = w_stm_open(fullPath, O_RDONLY);\n  if (!stm) {\n    throw std::system_error(\n        errno, std::generic_category(), fmt::format(\"w_stm_open {}\", fullPath));\n  }\n\n#ifndef _WIN32\n  SHA_CTX ctx;\n  SHA1_Init(&ctx);\n\n  while (true) {\n    auto n = stm->read(buf, sizeof(buf));\n    if (n == 0) {\n      break;\n    }\n    if (n < 0) {\n      throw std::system_error(\n          errno,\n          std::generic_category(),\n          fmt::format(\"while reading from {}\", fullPath));\n    }\n    SHA1_Update(&ctx, buf, n);\n  }\n\n  SHA1_Final(result.data(), &ctx);\n#else\n  // Use the built-in crypt provider API on windows to avoid introducing a\n  // dependency on openssl in the windows build.\n  HCRYPTPROV provider{0};\n  HCRYPTHASH ctx{0};\n\n  if (!CryptAcquireContext(\n          &provider,\n          nullptr,\n          nullptr,\n          PROV_RSA_FULL,\n          CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {\n    throw std::system_error(\n        GetLastError(), std::system_category(), \"CryptAcquireContext\");\n  }\n  SCOPE_EXIT {\n    CryptReleaseContext(provider, 0);\n  };\n\n  if (!CryptCreateHash(provider, CALG_SHA1, 0, 0, &ctx)) {\n    throw std::system_error(\n        GetLastError(), std::system_category(), \"CryptCreateHash\");\n  }\n  SCOPE_EXIT {\n    CryptDestroyHash(ctx);\n  };\n\n  while (true) {\n    auto n = stm->read(buf, sizeof(buf));\n    if (n == 0) {\n      break;\n    }\n    if (n < 0) {\n      throw std::system_error(\n          errno,\n          std::generic_category(),\n          fmt::format(\"while reading from {}\", fullPath));\n    }\n\n    if (!CryptHashData(ctx, buf, n, 0)) {\n      throw std::system_error(\n          GetLastError(), std::system_category(), \"CryptHashData\");\n    }\n  }\n\n  DWORD size = result.size();\n  if (!CryptGetHashParam(ctx, HP_HASHVAL, result.data(), &size, 0)) {\n    throw std::system_error(\n        GetLastError(), std::system_category(), \"CryptGetHashParam HP_HASHVAL\");\n  }\n#endif\n  return result;\n}\n\nHashValue ContentHashCache::computeHashImmediate(\n    const ContentHashCacheKey& key) const {\n  auto fullPath = w_string::pathCat({rootPath_, key.relativePath});\n  auto result = computeHashImmediate(fullPath.c_str());\n\n  // Since TOCTOU is everywhere and everything, double check to make sure that\n  // the file looks like we were expecting at the start.  If it isn't, then\n  // we want to throw an exception and avoid associating the hash of whatever\n  // state we just read with this cache key.\n  auto stat = getFileInformation(fullPath.c_str());\n  if (size_t(stat.size) != key.fileSize ||\n      stat.mtime.tv_sec != key.mtime.tv_sec ||\n      stat.mtime.tv_nsec != key.mtime.tv_nsec) {\n    throw std::runtime_error(\n        \"metadata changed during hashing; query again to get latest status\");\n  }\n\n  return result;\n}\n\nfolly::Future<HashValue> ContentHashCache::computeHash(\n    const ContentHashCacheKey& key) const {\n  return folly::via(\n      &getThreadPool(), [key, this] { return computeHashImmediate(key); });\n}\n\nconst w_string& ContentHashCache::rootPath() const {\n  return rootPath_;\n}\n\nCacheStats ContentHashCache::stats() const {\n  return cache_.stats();\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/ContentHash.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <array>\n#include \"watchman/LRUCache.h\"\n#include \"watchman/watchman_string.h\"\n#include \"watchman/watchman_system.h\"\n\nnamespace watchman {\nstruct ContentHashCacheKey {\n  // Path relative to the watched root\n  w_string relativePath;\n  // file size in bytes\n  size_t fileSize;\n  // The modification time\n  struct timespec mtime;\n\n  // Computes a hash value for use in the cache map\n  std::size_t hashValue() const;\n  bool operator==(const ContentHashCacheKey& other) const;\n};\n} // namespace watchman\n\nnamespace std {\ntemplate <>\nstruct hash<watchman::ContentHashCacheKey> {\n  std::size_t operator()(watchman::ContentHashCacheKey const& key) const {\n    return key.hashValue();\n  }\n};\n} // namespace std\n\nnamespace watchman {\nclass ContentHashCache {\n public:\n  using HashValue = std::array<uint8_t, 20>;\n  using Node = LRUCache<ContentHashCacheKey, HashValue>::NodeType;\n\n  // Construct a cache for a given root, holding the specified\n  // maximum number of items, using the configured negative\n  // caching TTL.\n  ContentHashCache(\n      const w_string& rootPath,\n      size_t maxItems,\n      std::chrono::milliseconds errorTTL);\n\n  // Obtain the content hash for the given input.\n  // If the result is in the cache it will return a ready future\n  // holding the result.  Otherwise, computeHash will be invoked\n  // to populate the cache.  Returns a future with the result\n  // of the lookup.\n  folly::Future<std::shared_ptr<const Node>> get(\n      const ContentHashCacheKey& key);\n\n  // Compute the hash value for a given input.\n  // This will block the calling thread while the I/O is performed.\n  // Throws exceptions for any errors that may occur.\n  HashValue computeHashImmediate(const ContentHashCacheKey& key) const;\n\n  // Compute the hash value for a given input.\n  // This will block the calling thread while the I/O is performed.\n  // Throws exceptions for any errors that may occur.\n  static HashValue computeHashImmediate(const char* fullPath);\n\n  // Compute the hash value for a given input via the thread pool.\n  // Returns a future to operate on the result of this async operation\n  folly::Future<HashValue> computeHash(const ContentHashCacheKey& key) const;\n\n  // Returns the root path that this cache is associated with\n  const w_string& rootPath() const;\n\n  // Returns cache statistics\n  CacheStats stats() const;\n\n private:\n  LRUCache<ContentHashCacheKey, HashValue> cache_;\n  w_string rootPath_;\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/Cookie.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <string_view>\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\ninline constexpr std::string_view kCookiePrefix = \".watchman-cookie-\";\n\n/**\n * We need to guarantee that we never collapse a cookie notification\n * out of the pending list, because we absolutely must observe it coming\n * in via the kernel notification mechanism in order for synchronization\n * to be correct.\n * Since we don't have a Root available, we can't tell what the\n * precise cookie prefix is for the current pending list here, so\n * we do a substring match.  Not the most elegant thing in the world.\n */\ninline bool isPossiblyACookie(w_string_piece path) {\n  return path.contains(kCookiePrefix);\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/CookieSync.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/CookieSync.h\"\n#include <fmt/core.h>\n#include <folly/String.h>\n#include <exception>\n#include <optional>\n#include \"watchman/Logging.h\"\n#include \"watchman/watchman_stream.h\"\n\nnamespace watchman {\n\nCookieSync::Cookie::Cookie(uint64_t numCookies) : numPending(numCookies) {}\n\nCookieSync::CookieSync(FileSystem& fs, const w_string& dir) : fileSystem_{fs} {\n  char hostname[256];\n  gethostname(hostname, sizeof(hostname));\n  hostname[sizeof(hostname) - 1] = '\\0';\n\n  auto prefix = w_string::build(kCookiePrefix, hostname, \"-\", ::getpid(), \"-\");\n\n  auto guard = cookieDirs_.wlock();\n  guard->cookiePrefix_ = prefix;\n  guard->dirs_.insert(dir);\n}\n\nCookieSync::~CookieSync() {\n  // Wake up anyone that might have been waiting on us\n  abortAllCookies();\n}\n\nvoid CookieSync::addCookieDir(const w_string& dir) {\n  logf(DBG, \"Adding cookie dir: {}\\n\", dir);\n  auto guard = cookieDirs_.wlock();\n  guard->dirs_.insert(dir);\n}\n\nvoid CookieSync::removeCookieDir(const w_string& dir) {\n  logf(DBG, \"Removing cookie dir: {}\\n\", dir);\n  {\n    auto guard = cookieDirs_.wlock();\n    guard->dirs_.erase(dir);\n  }\n\n  // Cancel the cookies in the removed directory. These are considered to be\n  // serviced.\n  auto cookies = cookies_.wlock();\n  for (auto it = cookies->begin(); it != cookies->end();) {\n    auto& [cookiePath, cookie] = *it;\n    if (cookiePath.piece().startsWith(dir)) {\n      cookie->notify();\n      it = cookies->erase(it);\n    } else {\n      ++it;\n    }\n  }\n}\n\nvoid CookieSync::setCookieDir(const w_string& dir) {\n  auto guard = cookieDirs_.wlock();\n  guard->dirs_.clear();\n  guard->dirs_.insert(dir);\n}\n\nstd::vector<w_string> CookieSync::getOutstandingCookieFileList() const {\n  std::vector<w_string> result;\n  auto cookiesLocked = cookies_.rlock();\n  for (auto& it : *cookiesLocked) {\n    result.push_back(it.first);\n  }\n\n  return result;\n}\n\nfolly::SemiFuture<CookieSync::SyncResult> CookieSync::sync() {\n  std::shared_ptr<Cookie> cookie;\n  std::vector<w_string> cookieFileNames;\n  {\n    // We need to hold the cookieDirs lock while we lay cookies on disk to\n    // avoid a race where a cookie directory is removed after collecting all\n    // the cookie directories. In that case, this function would lay cookies on\n    // disk, but the cookie directory removal wouldn't be able to notify them,\n    // thus leaving them in a never notified state.\n    auto cookieDirsGuard = cookieDirs_.rlock();\n    auto prefixes = cookiePrefixLocked(*cookieDirsGuard);\n    auto serial = serial_++;\n\n    cookie = std::make_shared<Cookie>(prefixes.size());\n\n    // Even though we only write to the cookie at the end of the function, we\n    // need to hold it while the files are written on disk to avoid a race where\n    // cookies are detected on disk by the watcher, and notifyCookie is called\n    // prior to all the pending cookies being added to cookies_. Holding the\n    // lock will make sure that notifyCookie will be serialized with this code.\n    auto cookiesLock = cookies_.wlock();\n\n    CookieMap pendingCookies;\n    std::optional<std::tuple<w_string, int>> lastError;\n\n    cookieFileNames.reserve(prefixes.size());\n    for (const auto& prefix : prefixes) {\n      auto path_str = w_string::build(prefix, serial);\n      cookieFileNames.push_back(path_str);\n\n      /* then touch the file */\n      try {\n        fileSystem_.touch(path_str.c_str());\n      } catch (const std::system_error& e) {\n        lastError = {path_str, e.code().value()};\n        cookie->numPending.fetch_sub(1, std::memory_order_acq_rel);\n        logf(\n            ERR,\n            \"sync cookie {} couldn't be created: {}\\n\",\n            path_str,\n            folly::errnoStr(e.code().value()));\n        continue;\n      }\n\n      /* insert the cookie into the temporary map */\n      pendingCookies[path_str] = cookie;\n      logf(DBG, \"sync created cookie file {}\\n\", path_str);\n    }\n\n    if (pendingCookies.size() == 0) {\n      w_assert(lastError.has_value(), \"no cookies written, but no errors set\");\n      auto errCode = std::get<int>(*lastError);\n      throw std::system_error(\n          errCode,\n          std::generic_category(),\n          fmt::format(\n              \"sync: creat({}) failed: {}\",\n              std::get<w_string>(*lastError),\n              folly::errnoStr(errCode)));\n    }\n\n    cookiesLock->insert(pendingCookies.begin(), pendingCookies.end());\n  }\n\n  return cookie->promise.getSemiFuture().deferValue(\n      [cookieFileNames = std::move(cookieFileNames)](folly::Unit) mutable {\n        return SyncResult{std::move(cookieFileNames)};\n      });\n}\n\nCookieSync::SyncResult CookieSync::syncToNow(\n    std::chrono::milliseconds timeout) {\n  /* compute deadline */\n  using namespace std::chrono;\n  auto deadline = system_clock::now() + timeout;\n\n  while (true) {\n    auto cookieFuture = sync();\n\n    folly::Try<SyncResult> result;\n    try {\n      result = std::move(cookieFuture).getTry(timeout);\n    } catch (const folly::FutureTimeout&) {\n      auto why = fmt::format(\n          \"syncToNow: timed out waiting for cookie file to be observed by watcher within {} milliseconds\",\n          timeout.count());\n      log(ERR, why, \"\\n\");\n      throw std::system_error(ETIMEDOUT, std::generic_category(), why);\n    }\n\n    if (result.hasValue()) {\n      // Success!\n      return std::move(result).value();\n    }\n\n    // Sync was aborted by a recrawl; recompute the timeout\n    // and wait again if we still have time\n    timeout = duration_cast<milliseconds>(deadline - system_clock::now());\n    if (timeout.count() <= 0) {\n      result.throwUnlessValue();\n    }\n  }\n}\n\nvoid CookieSync::abortAllCookies() {\n  std::unordered_map<w_string, std::shared_ptr<Cookie>> cookies;\n\n  {\n    auto map = cookies_.wlock();\n    std::swap(*map, cookies);\n  }\n\n  for (const auto& [path, cookie] : cookies) {\n    log(ERR, \"syncToNow: aborting cookie \", path, \"\\n\");\n    unlink(path.c_str());\n\n    if (cookie->numPending.fetch_sub(1, std::memory_order_acq_rel) == 1) {\n      cookie->promise.setException(\n          folly::make_exception_wrapper<CookieSyncAborted>());\n    }\n  }\n}\n\nvoid CookieSync::Cookie::notify() {\n  if (numPending.fetch_sub(1, std::memory_order_acq_rel) == 1) {\n    promise.setValue();\n  }\n}\n\nvoid CookieSync::notifyCookie(const w_string& path) {\n  std::shared_ptr<Cookie> cookie;\n\n  {\n    auto map = cookies_.wlock();\n    auto cookie_iter = map->find(path);\n    log(DBG,\n        \"cookie for \",\n        path,\n        \"? \",\n        cookie_iter != map->end() ? \"yes\" : \"no\",\n        \"\\n\");\n\n    if (cookie_iter != map->end()) {\n      cookie = std::move(cookie_iter->second);\n      map->erase(cookie_iter);\n    }\n  }\n\n  if (cookie) {\n    cookie->notify();\n\n    // The file may not exist at this point; we're just taking this\n    // opportunity to remove it if nothing else has done so already.\n    // We don't care about the return code; best effort is fine.\n    unlink(path.c_str());\n  }\n}\n\nbool CookieSync::isCookiePrefix(w_string_piece path) const {\n  auto cookieDirs = cookieDirs_.rlock();\n  for (const auto& dir : cookieDirs->dirs_) {\n    if (path.startsWith(dir) &&\n        path.baseName().startsWith(cookieDirs->cookiePrefix_)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nbool CookieSync::isCookieDir(w_string_piece path) const {\n  auto cookieDirs = cookieDirs_.rlock();\n  for (const auto& dir : cookieDirs->dirs_) {\n    if (path == dir) {\n      return true;\n    }\n  }\n  return false;\n}\n\nstd::unordered_set<w_string> CookieSync::cookiePrefixLocked(\n    const CookieSync::CookieDirectories& guard) const {\n  std::unordered_set<w_string> res;\n  for (const auto& dir : guard.dirs_) {\n    res.insert(w_string::build(dir, \"/\", guard.cookiePrefix_));\n  }\n  return res;\n}\n\nstd::unordered_set<w_string> CookieSync::cookiePrefix() const {\n  auto guard = cookieDirs_.rlock();\n  return cookiePrefixLocked(*guard);\n}\n\nstd::unordered_set<w_string> CookieSync::cookieDirs() const {\n  std::unordered_set<w_string> res;\n  auto guard = cookieDirs_.rlock();\n  for (const auto& dir : guard->dirs_) {\n    res.insert(dir);\n  }\n  return res;\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/CookieSync.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <folly/Synchronized.h>\n#include <folly/futures/Future.h>\n#include \"watchman/Cookie.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nclass CookieSyncAborted : public std::exception {};\n\nclass CookieSync {\n public:\n  struct SyncResult {\n    /**\n     * For logging and debugging, populated with the paths of all cookie files\n     * used.\n     */\n    std::vector<w_string> cookieFileNames;\n  };\n\n  explicit CookieSync(FileSystem& fs, const w_string& dir);\n  ~CookieSync();\n\n  void setCookieDir(const w_string& dir);\n  void addCookieDir(const w_string& dir);\n  void removeCookieDir(const w_string& dir);\n\n  /**\n   * Ensure that we're synchronized with the state of the\n   * filesystem at the current time.\n   *\n   * We do this by touching one or more cookie files and waiting to\n   * observe them via the watcher.  When we see it we know that\n   * we've seen everything up to the point in time at which\n   * we're asking questions. (Note: it's unclear if all filesystem watchers\n   * provide such an ordering guarantee, and it's worth flushing all pending\n   * notifications to be sure.)\n   *\n   * Throws a std::system_error with an ETIMEDOUT\n   * error if the timeout expires before we observe the change, or a\n   * runtime_error if the root has been deleted or rendered inaccessible.\n   */\n  SyncResult syncToNow(std::chrono::milliseconds timeout);\n\n  /**\n   * Touches a cookie file and returns a Future that will\n   * be ready when that cookie file is processed by the IO\n   * thread at some future time.\n   * Important: if you chain a lambda onto the future, it\n   * will execute in the context of the IO thread.\n   * It is recommended that you minimize the actions performed\n   * in that context to avoid holding up the IO thread.\n   **/\n  folly::SemiFuture<SyncResult> sync();\n\n  /* If path is a valid cookie in the map, notify the waiter.\n   * Returns true if the path matches the cookie prefix (not just\n   * whether the cookie is currently valid).\n   * Returns false if the path does not match our cookie prefix.\n   */\n  void notifyCookie(const w_string& path);\n\n  /* Cause all pending cookie sync promises to complete immediately\n   * with a CookieSyncAborted exception */\n  void abortAllCookies();\n\n  // Check if this path matches an actual cookie.\n  bool isCookiePrefix(w_string_piece path) const;\n\n  // Check if the path matches a cookie directory.\n  bool isCookieDir(w_string_piece path) const;\n\n  // Returns the set of prefixes for cookie files\n  std::unordered_set<w_string> cookiePrefix() const;\n\n  std::unordered_set<w_string> cookieDirs() const;\n\n  // Returns the list of cookies that are pending observation; each of\n  // these has an associated waiting client.\n  std::vector<w_string> getOutstandingCookieFileList() const;\n\n private:\n  CookieSync(CookieSync&&) = delete;\n  CookieSync& operator=(CookieSync&&) = delete;\n\n  struct Cookie {\n    folly::Promise<folly::Unit> promise;\n    std::atomic<uint64_t> numPending;\n\n    explicit Cookie(uint64_t numCookies);\n\n    void notify();\n  };\n\n  struct CookieDirectories {\n    // paths to the query cookies directories. A cookie will be written to each\n    // of these when calling `sync`.\n    std::unordered_set<w_string> dirs_;\n    // valid filename prefix for cookies we create\n    w_string cookiePrefix_;\n  };\n\n  std::unordered_set<w_string> cookiePrefixLocked(\n      const CookieDirectories& guard) const;\n\n  FileSystem& fileSystem_;\n\n  folly::Synchronized<CookieDirectories> cookieDirs_;\n  // Serial number for cookie filename\n  std::atomic<uint32_t> serial_{0};\n  using CookieMap = std::unordered_map<w_string, std::shared_ptr<Cookie>>;\n  folly::Synchronized<CookieMap> cookies_;\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/Errors.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Errors.h\"\n\n#ifdef _WIN32\n#include <winerror.h> // @manual\n#endif\n\nusing std::generic_category;\n\nnamespace watchman {\n\nconst char* error_category::name() const noexcept {\n  return \"watchman\";\n}\n\nstd::string error_category::message(int) const {\n  return \"the programmer should not be trying to render an error message \"\n         \"using watchman::error_category, please report this bug!\";\n}\n\nconst std::error_category& error_category() {\n  static class error_category cat;\n  return cat;\n}\n\nconst char* inotify_category::name() const noexcept {\n  return \"inotify\";\n}\n\nstd::string inotify_category::message(int err) const {\n  switch (err) {\n    case EMFILE:\n      return \"The user limit on the total number of inotify \"\n             \"instances has been reached; increase the \"\n             \"fs.inotify.max_user_instances sysctl\";\n    case ENFILE:\n      return \"The system limit on the total number of file descriptors \"\n             \"has been reached\";\n    case ENOMEM:\n      return \"Insufficient kernel memory is available\";\n    case ENOSPC:\n      return \"The user limit on the total number of inotify watches \"\n             \"was reached; increase the fs.inotify.max_user_watches sysctl\";\n    default:\n      return std::generic_category().message(err);\n  }\n}\n\nconst std::error_category& inotify_category() {\n  static class inotify_category cat;\n  return cat;\n}\n\nbool error_category::equivalent(const std::error_code& code, int condition)\n    const noexcept {\n  if (code.category() == inotify_category()) {\n    // Treat inotify the same as the generic category for the purposes of\n    // equivalence; it is the same namespace, we just provide different\n    // renditions of the error messages.\n    return equivalent(\n        std::error_code(code.value(), std::generic_category()), condition);\n  }\n\n  switch (static_cast<error_code>(condition)) {\n    case error_code::no_such_file_or_directory:\n      return\n#ifdef _WIN32\n          code == windows_error_code(ERROR_FILE_NOT_FOUND) ||\n          code == windows_error_code(ERROR_DEV_NOT_EXIST) ||\n#endif\n          code == make_error_code(std::errc::no_such_file_or_directory);\n\n    case error_code::not_a_directory:\n      return\n#ifdef _WIN32\n          code == windows_error_code(ERROR_PATH_NOT_FOUND) ||\n          code == windows_error_code(ERROR_DIRECTORY) ||\n#endif\n          code == make_error_code(std::errc::not_a_directory);\n\n    case error_code::is_a_directory:\n      return code == make_error_code(std::errc::is_a_directory);\n\n#ifdef ESTALE\n    case error_code::stale_file_handle:\n      return code == std::error_code(ESTALE, std::generic_category());\n#endif\n\n    case error_code::too_many_symbolic_link_levels:\n      // POSIX says open with O_NOFOLLOW should set errno to ELOOP if the path\n      // is a symlink. However, FreeBSD (which ironically originated O_NOFOLLOW)\n      // sets it to EMLINK.  So we check for either condition here.\n      return code ==\n          make_error_code(std::errc::too_many_symbolic_link_levels) ||\n          code == make_error_code(std::errc::too_many_links);\n\n    case error_code::permission_denied:\n      return\n#ifdef _WIN32\n          code == windows_error_code(ERROR_ACCESS_DENIED) ||\n          code == windows_error_code(ERROR_INVALID_ACCESS) ||\n          code == windows_error_code(ERROR_WRITE_PROTECT) ||\n          code == windows_error_code(ERROR_SHARING_VIOLATION) ||\n#endif\n          code == make_error_code(std::errc::permission_denied) ||\n          code == make_error_code(std::errc::operation_not_permitted);\n\n    case error_code::system_limits_exceeded:\n      return\n#ifdef _WIN32\n          code == windows_error_code(ERROR_TOO_MANY_OPEN_FILES) ||\n#endif\n          code == make_error_code(std::errc::too_many_files_open_in_system) ||\n          code == make_error_code(std::errc::no_space_on_device) ||\n          code == make_error_code(std::errc::not_enough_memory) ||\n          code == make_error_code(std::errc::too_many_files_open);\n\n    case error_code::timed_out:\n      return\n#ifdef _WIN32\n          code == windows_error_code(ERROR_TIMEOUT) ||\n          code == windows_error_code(WAIT_TIMEOUT) ||\n#endif\n          code == make_error_code(std::errc::timed_out);\n\n    case error_code::not_a_symlink:\n      return\n#ifdef _WIN32\n          code == windows_error_code(ERROR_NOT_A_REPARSE_POINT) ||\n#endif\n          code == make_error_code(std::errc::invalid_argument);\n\n    default:\n      return false;\n  }\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/Errors.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <fmt/core.h>\n#include <cstdint>\n#include <string>\n#include <system_error>\n\n// We may have to deal with errors from various sources and with\n// different error namespaces.  This header defines some helpers\n// to make it easier for code to reason about and react to those errors.\n// http://blog.think-async.com/2010/04/system-error-support-in-c0x-part-5.html\n// explains the concepts behind the error_condition API used here.\n\nnamespace watchman {\n\n// Various classes of errors that we wish to programmatially respond to.\n// This doesn't need to be an exhaustive list of all possible conditions,\n// just those that we want to handle in code.\nenum class error_code {\n  no_such_file_or_directory,\n  not_a_directory,\n  too_many_symbolic_link_levels,\n  permission_denied,\n  system_limits_exceeded,\n  timed_out,\n  not_a_symlink,\n  is_a_directory,\n  stale_file_handle,\n};\n\n// An error category implementation that is present for comparison purposes\n// only; do not use this category to create error_codes explicitly.\nclass error_category : public std::error_category {\n public:\n  const char* name() const noexcept override;\n  std::string message(int err) const override;\n  bool equivalent(const std::error_code& code, int condition)\n      const noexcept override;\n};\n\n// Obtain a ref to the above error category\nconst std::error_category& error_category();\n\n// Helper that is used to implicitly construct an error condition\n// during equivalence testing.  Don't use this directly.\ninline std::error_condition make_error_condition(error_code e) {\n  return std::error_condition(static_cast<int>(e), error_category());\n}\n\n// Helper that is used to implicitly construct an error code\n// during equivalence testing.  Don't use this directly.\ninline std::error_code make_error_code(error_code e) {\n  return std::error_code(static_cast<int>(e), error_category());\n}\n\n// A type representing windows error codes.  These are stored\n// in DWORD values and it is not really feasible to enumerate all\n// possible values due to the way that windows error codes are\n// structured.\n// We use uint32_t here to avoid pulling in the windows header file\n// here implicitly.\n// We use this purely for convenience with the make_error_XXX\n// functions below.  While this is only used on Windows, it doesn't\n// hurt to define it unconditionally for all platforms here.\nenum windows_error_code : uint32_t {};\n\n// Helper that is used to implicitly construct an windows error condition\n// during equivalence testing.  This only makes sense to use on\n// windows platforms.\ninline std::error_condition make_error_condition(windows_error_code e) {\n  return std::error_condition(static_cast<int>(e), std::system_category());\n}\n\n// Helper that is used to implicitly construct an windows error code\n// during equivalence testing.  This only makes sense to use on\n// windows platforms.\ninline std::error_code make_error_code(windows_error_code e) {\n  return std::error_code(static_cast<int>(e), std::system_category());\n}\n\n// An error category for explaining inotify specific errors.\n// It is effectively the same as generic_category except that\n// the messages for some of the codes are different.\nclass inotify_category : public std::error_category {\n public:\n  const char* name() const noexcept override;\n  std::string message(int err) const override;\n};\n\n// Obtain a ref to the above error category\nconst std::error_category& inotify_category();\n\ntemplate <typename T>\nclass WatchmanError : public std::runtime_error {\n  struct NoPrefix {};\n\n public:\n  WatchmanError(const char* what)\n      : std::runtime_error{\n            T::prefix ? fmt::format(\"{}: {}\", T::prefix, what).c_str()\n                      : what} {}\n  WatchmanError(const std::string& what)\n      : std::runtime_error{\n            T::prefix ? fmt::format(\"{}: {}\", T::prefix, what).c_str()\n                      : what} {}\n  WatchmanError(NoPrefix, const std::string& what) : std::runtime_error{what} {}\n\n  using std::runtime_error::runtime_error;\n\n  template <typename... Args>\n  [[noreturn]] static void throwf(\n      fmt::format_string<Args...> fmt,\n      Args&&... args) {\n    if constexpr (nullptr != T::prefix) {\n      // It would be nice to avoid the double-format here.\n      throw T{\n          NoPrefix{},\n          fmt::format(\n              \"{}: {}\",\n              T::prefix,\n              fmt::format(fmt, std::forward<Args>(args)...))};\n    } else {\n      throw T{NoPrefix{}, fmt::format(fmt, std::forward<Args>(args)...)};\n    }\n  }\n};\n\nclass CommandValidationError : public WatchmanError<CommandValidationError> {\n public:\n  static constexpr const char* prefix = \"failed to validate command\";\n  using WatchmanError::WatchmanError;\n};\n\n/**\n * Represents an error parsing a query.\n */\nclass QueryParseError : public WatchmanError<QueryParseError> {\n public:\n  static constexpr const char* prefix = \"failed to parse query\";\n  using WatchmanError::WatchmanError;\n};\n\n/**\n * Represents an error executing a query.\n */\nclass QueryExecError : public WatchmanError<QueryExecError> {\n public:\n  static constexpr const char* prefix = \"query failed\";\n  using WatchmanError::WatchmanError;\n};\n\n/**\n * Represents an error resolving a root.\n */\nclass RootResolveError : public WatchmanError<RootResolveError> {\n public:\n  static constexpr const char* prefix = \"failed to resolve root\";\n  using WatchmanError::WatchmanError;\n};\n\n/**\n * Represents an error when root is not conntected.\n */\nclass RootNotConnectedError : public WatchmanError<RootNotConnectedError> {\n public:\n  static constexpr const char* prefix = \"root not connected\";\n  using WatchmanError::WatchmanError;\n};\n\n} // namespace watchman\n\n// Allow watchman::error_code to implicitly convert to std::error_condition\nnamespace std {\ntemplate <>\nstruct is_error_condition_enum<watchman::error_code> : public true_type {};\n\n// Allow watchman::windows_error_code to implicitly convert to\n// std::error_condition\ntemplate <>\nstruct is_error_condition_enum<watchman::windows_error_code>\n    : public true_type {};\n} // namespace std\n"
  },
  {
    "path": "watchman/FlagMap.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/FlagMap.h\"\n#include <string.h>\n#include <algorithm>\n\nvoid w_expand_flags(\n    const struct flag_map* fmap,\n    uint32_t flags,\n    char* buf,\n    size_t len) {\n  bool first = true;\n  *buf = '\\0';\n  while (fmap->label && len) {\n    if ((flags & fmap->value) == fmap->value) {\n      size_t space;\n\n      if (!first) {\n        *buf = ' ';\n        buf++;\n        len--;\n      } else {\n        first = false;\n      }\n\n      space = std::min(len, strlen(fmap->label) + 1);\n      memcpy(buf, fmap->label, space);\n\n      len -= space - 1;\n      buf += space - 1;\n    }\n    fmap++;\n  }\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/FlagMap.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stddef.h>\n#include <stdint.h>\n\nstruct flag_map {\n  uint32_t value;\n  const char* label;\n};\n\n/**\n * Given a flag map in `fmap`, and a set of flags in `flags`,\n * expand the flag bits that are set in `flags` into the corresponding\n * labels in `fmap` and print the result into the caller provided\n * buffer `buf` of size `len` bytes.\n */\nvoid w_expand_flags(\n    const struct flag_map* fmap,\n    uint32_t flags,\n    char* buf,\n    size_t len);\n"
  },
  {
    "path": "watchman/GroupLookup.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/GroupLookup.h\"\n#include <folly/String.h>\n#include \"watchman/Logging.h\"\n\n#ifndef _WIN32\n#include <errno.h>\n#include <grp.h>\n#include <string.h>\n#include <sys/types.h>\n#endif\n\n#ifndef _WIN32\nusing namespace watchman;\n\nconst struct group* w_get_group(const char* group_name) {\n  // This explicit errno statement is necessary to distinguish between the\n  // group not existing and an error.\n  errno = 0;\n  struct group* group = getgrnam(group_name);\n  if (!group) {\n    if (errno == 0) {\n      logf(ERR, \"group '{}' does not exist\\n\", group_name);\n    } else {\n      logf(\n          ERR,\n          \"getting gid for '{}' failed: {}\\n\",\n          group_name,\n          folly::errnoStr(errno));\n    }\n    return nullptr;\n  }\n  return group;\n}\n#endif // ndef _WIN32\n"
  },
  {
    "path": "watchman/GroupLookup.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#ifndef _WIN32\n\n#include <grp.h>\n/**\n * Gets the group struct for the given group name. The return value may point\n * to a static area so it should be used immediately and not passed to free(3).\n *\n * Returns null on failure.\n */\nconst struct group* w_get_group(const char* group_name);\n#endif // _WIN32\n"
  },
  {
    "path": "watchman/Hash.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdint.h>\n\nnamespace watchman {\n\n// This is the Hash128to64 function from Google's cityhash (available\n// under the MIT License).  We use it to reduce multiple 64 bit hashes\n// into a single hash.\ninline uint64_t hash_128_to_64(const uint64_t upper, const uint64_t lower) {\n  // Murmur-inspired hashing.\n  const uint64_t kMul = 0x9ddfea08eb382d69ULL;\n  uint64_t a = (lower ^ upper) * kMul;\n  a ^= (a >> 47);\n  uint64_t b = (upper ^ a) * kMul;\n  b ^= (b >> 47);\n  b *= kMul;\n  return b;\n}\n\ninline constexpr uint64_t hash_combine(std::initializer_list<uint64_t> hashes) {\n  const uint64_t* b = hashes.begin();\n  const uint64_t* e = hashes.end();\n  if (b == e) {\n    return 0;\n  } else {\n    uint64_t rv = *b++;\n    while (b != e) {\n      rv = hash_128_to_64(rv, *b++);\n    }\n    return rv;\n  }\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/IgnoreSet.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/IgnoreSet.h\"\n\n// The path and everything below it is ignored.\n#define FULL_IGNORE 0x1\n// The grand-children of the path are ignored, but not the path\n// or its direct children.\n#define VCS_IGNORE 0x2\n\nnamespace watchman {\n\nvoid IgnoreSet::add(const w_string& path, bool is_vcs_ignore) {\n  (is_vcs_ignore ? ignore_vcs : ignore_dirs).insert(path);\n\n  tree.insert(path, is_vcs_ignore ? VCS_IGNORE : FULL_IGNORE);\n\n  if (!is_vcs_ignore) {\n    dirs_vec.push_back(path);\n  }\n}\n\nbool IgnoreSet::isIgnored(const char* path, uint32_t pathlen) const {\n  const char* skip_prefix;\n  uint32_t len;\n  auto leaf = tree.longestMatch((const unsigned char*)path, (int)pathlen);\n\n  if (!leaf) {\n    // No entry -> not ignored.\n    return false;\n  }\n\n  if (pathlen < leaf->key.size()) {\n    // We wanted \"buil\" but matched \"build\"\n    return false;\n  }\n\n  if (pathlen == leaf->key.size()) {\n    // Exact match.  This is an ignore if we are in FULL_IGNORE,\n    // but not in VCS_IGNORE mode.\n    return leaf->value == FULL_IGNORE ? true : false;\n  }\n\n  // Our input string was longer than the leaf key string.\n  // We need to ensure that we observe a directory separator at the\n  // character after the common prefix, otherwise we may be falsely\n  // matching a sibling entry.\n  skip_prefix = path + leaf->key.size();\n  len = pathlen - leaf->key.size();\n\n  if (!is_slash(*skip_prefix)) {\n    // we wanted \"foo/bar\" but we matched something like \"food\"\n    // this is not an ignore situation.\n    return false;\n  }\n\n  if (leaf->value == FULL_IGNORE) {\n    // Definitely ignoring this portion of the tree\n    return true;\n  }\n\n  // we need to apply vcs_ignore style logic to determine if we are ignoring\n  // this path.  This devolves to: \"is there a '/' character after the end of\n  // the leaf key prefix?\"\n\n  if (pathlen <= leaf->key.size()) {\n    // There can't be a slash after this portion of the tree, therefore\n    // this is not ignored.\n    return false;\n  }\n\n  // Skip over the '/'\n  skip_prefix++;\n  len--;\n\n#ifndef _WIN32\n  // If we find a '/' from this point, we are ignoring this path.\n  return memchr(skip_prefix, '/', len) != nullptr;\n#else\n  // On windows, both '/' and '\\' are possible.\n  while (len > 0) {\n    if (is_slash(*skip_prefix)) {\n      return true;\n    }\n    skip_prefix++;\n    len--;\n  }\n  return false;\n#endif\n}\n\nbool IgnoreSet::isIgnoreVCS(const w_string& path) const {\n  return ignore_vcs.find(path) != ignore_vcs.end();\n}\n\nbool IgnoreSet::isIgnoreDir(const w_string& path) const {\n  return ignore_dirs.find(path) != ignore_dirs.end();\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/IgnoreSet.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <unordered_set>\n#include <vector>\n#include \"watchman/thirdparty/libart/src/art.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nclass IgnoreSet {\n public:\n  // Adds a string to the ignore list.\n  // The is_vcs_ignore parameter indicates whether it is a full ignore\n  // or a vcs-style grandchild ignore.\n  void add(const w_string& path, bool is_vcs_ignore);\n\n  // Tests whether path is ignored.\n  // Returns true if the path is ignored, false otherwise.\n  bool isIgnored(const char* path, uint32_t pathlen) const;\n\n  // Test whether path is listed in ignore vcs config\n  bool isIgnoreVCS(const w_string& path) const;\n\n  // Test whether path is listed in ignore dir config\n  bool isIgnoreDir(const w_string& path) const;\n\n  const std::vector<w_string>& getIgnoredDirs() const {\n    return dirs_vec;\n  }\n\n private:\n  // if the map has an entry for a given dir, we're ignoring it */\n  std::unordered_set<w_string> ignore_vcs;\n  std::unordered_set<w_string> ignore_dirs;\n  /* radix tree containing the same information as the ignore\n   * entries above.  This is used only on macOS and Windows because\n   * we cannot exclude these dirs using the kernel watching APIs */\n  art_tree<uint8_t, w_string> tree;\n  /* On macOS, we need to preserve the order of the ignore list so\n   * that we can exclude things deterministically and fit within\n   * system limits. */\n  std::vector<w_string> dirs_vec;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/InMemoryView.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/InMemoryView.h\"\n#include <fmt/core.h>\n#include <folly/ScopeGuard.h>\n#include <algorithm>\n#include <chrono>\n#include <memory>\n#include <thread>\n#include \"watchman/Errors.h\"\n#include \"watchman/ThreadPool.h\"\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryContext.h\"\n#include \"watchman/query/eval.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/thirdparty/wildmatch/wildmatch.h\"\n#include \"watchman/watcher/Watcher.h\"\n#include \"watchman/watchman_file.h\"\n\n// Each root gets a number that uniquely identifies it within the process. This\n// helps avoid confusion if a root is removed and then added again.\nstatic std::atomic<watchman::ClockRoot> next_root_number{1};\n\nnamespace watchman {\n\nnamespace {\n/** Concatenate dir_name and name around a unix style directory\n * separator.\n * dir_name may be NULL in which case this returns a copy of name.\n */\ninline std::string make_path_name(\n    const char* dir_name,\n    uint32_t dlen,\n    const char* name,\n    uint32_t nlen) {\n  std::string result;\n  result.reserve(dlen + nlen + 1);\n\n  if (dlen) {\n    result.append(dir_name, dlen);\n    // wildmatch wants unix separators\n    result.push_back('/');\n  }\n  result.append(name, nlen);\n  return result;\n}\n} // namespace\n\nInMemoryViewCaches::InMemoryViewCaches(\n    const w_string& rootPath,\n    size_t maxHashes,\n    size_t maxSymlinks,\n    std::chrono::milliseconds errorTTL)\n    : contentHashCache(rootPath, maxHashes, errorTTL),\n      symlinkTargetCache(rootPath, maxSymlinks, errorTTL) {}\n\nInMemoryFileResult::InMemoryFileResult(\n    const watchman_file* file,\n    InMemoryViewCaches& caches)\n    : file_(file), caches_(caches) {}\n\nvoid InMemoryFileResult::batchFetchProperties(\n    const std::vector<std::unique_ptr<FileResult>>& files) {\n  std::vector<folly::Future<folly::Unit>> readlinkFutures;\n  std::vector<folly::Future<folly::Unit>> sha1Futures;\n\n  // Since we may initiate some async work in the body of the function\n  // below, we need to ensure that we wait for it to complete before\n  // we return from this scope, even if we are throwing an exception.\n  // If we fail to do so, the continuation on the futures that we\n  // schedule will access invalid memory and we'll all feel bad.\n  SCOPE_EXIT {\n    if (!readlinkFutures.empty()) {\n      folly::collectAll(readlinkFutures.begin(), readlinkFutures.end()).wait();\n    }\n    if (!sha1Futures.empty()) {\n      folly::collectAll(sha1Futures.begin(), sha1Futures.end()).wait();\n    }\n  };\n\n  for (auto& f : files) {\n    auto* file = dynamic_cast<InMemoryFileResult*>(f.get());\n\n    if (file->neededProperties() & FileResult::Property::SymlinkTarget) {\n      if (!file->file_->stat.isSymlink()) {\n        // If this file is not a symlink then we immediately yield\n        // a nullptr w_string instance rather than propagating an error.\n        // This behavior is relied upon by the field rendering code and\n        // checked in test_symlink.py.\n        file->symlinkTarget_ = w_string();\n      } else {\n        auto dir = file->dirName();\n        dir.advance(file->caches_.symlinkTargetCache.rootPath().size());\n\n        // If dirName is the root, dir.size() will now be zero\n        if (dir.size() > 0) {\n          // if not at the root, skip the slash character at the\n          // front of dir\n          dir.advance(1);\n        }\n\n        SymlinkTargetCacheKey key{\n            w_string::pathCat({dir, file->baseName()}), file->file_->otime};\n\n        readlinkFutures.emplace_back(\n            caches_.symlinkTargetCache.get(key).thenTry(\n                [file](\n                    folly::Try<std::shared_ptr<\n                        const SymlinkTargetCache::Node>>&& result) {\n                  if (result.hasValue()) {\n                    file->symlinkTarget_ = result.value()->value();\n                  } else {\n                    // we don't have a way to report the error for readlink\n                    // due to legacy requirements in the interface, so we\n                    // just set it to empty.\n                    file->symlinkTarget_ = w_string();\n                  }\n                }));\n      }\n    }\n\n    if (file->neededProperties() & FileResult::Property::ContentSha1) {\n      auto dir = file->dirName();\n      dir.advance(file->caches_.contentHashCache.rootPath().size());\n\n      // If dirName is the root, dir.size() will now be zero\n      if (dir.size() > 0) {\n        // if not at the root, skip the slash character at the\n        // front of dir\n        dir.advance(1);\n      }\n\n      ContentHashCacheKey key{\n          w_string::pathCat({dir, file->baseName()}),\n          size_t(file->file_->stat.size),\n          file->file_->stat.mtime};\n\n      sha1Futures.emplace_back(caches_.contentHashCache.get(key).thenTry(\n          [file](\n              folly::Try<std::shared_ptr<const ContentHashCache::Node>>&&\n                  result) {\n            file->contentSha1_ =\n                makeResultWith([&] { return result.value()->value(); });\n          }));\n    }\n\n    file->clearNeededProperties();\n  }\n}\n\nstd::optional<FileInformation> InMemoryFileResult::stat() {\n  return file_->stat;\n}\n\nstd::optional<size_t> InMemoryFileResult::size() {\n  return file_->stat.size;\n}\n\nstd::optional<struct timespec> InMemoryFileResult::accessedTime() {\n  return file_->stat.atime;\n}\n\nstd::optional<struct timespec> InMemoryFileResult::modifiedTime() {\n  return file_->stat.mtime;\n}\n\nstd::optional<struct timespec> InMemoryFileResult::changedTime() {\n  return file_->stat.ctime;\n}\n\nw_string_piece InMemoryFileResult::baseName() {\n  return file_->getName();\n}\n\nw_string_piece InMemoryFileResult::dirName() {\n  if (!dirName_) {\n    dirName_ = file_->parent->getFullPath();\n  }\n  return *dirName_;\n}\n\nstd::optional<bool> InMemoryFileResult::exists() {\n  return file_->exists;\n}\n\nstd::optional<ClockStamp> InMemoryFileResult::ctime() {\n  return file_->ctime;\n}\n\nstd::optional<ClockStamp> InMemoryFileResult::otime() {\n  return file_->otime;\n}\n\nstd::optional<ResolvedSymlink> InMemoryFileResult::readLink() {\n  if (!symlinkTarget_.has_value()) {\n    if (!file_->stat.isSymlink()) {\n      // We already know it's not a symlink, so there is no need to fetch\n      // properties.\n      symlinkTarget_ = NotSymlink{};\n      return symlinkTarget_;\n    }\n    // Need to load the symlink target; batch that up\n    accessorNeedsProperties(FileResult::Property::SymlinkTarget);\n    return std::nullopt;\n  }\n  return symlinkTarget_;\n}\n\nstd::optional<FileResult::ContentHash> InMemoryFileResult::getContentSha1() {\n  if (!file_->exists) {\n    // Don't return hashes for files that we believe to be deleted.\n    throw std::system_error(\n        std::make_error_code(std::errc::no_such_file_or_directory));\n  }\n\n  if (!file_->stat.isFile()) {\n    // We only want to compute the hash for regular files\n    throw std::system_error(std::make_error_code(std::errc::is_a_directory));\n  }\n\n  if (contentSha1_.empty()) {\n    accessorNeedsProperties(FileResult::Property::ContentSha1);\n    return std::nullopt;\n  }\n  return contentSha1_.value();\n}\n\nViewDatabase::ViewDatabase(const w_string& root_path)\n    : rootPath_{root_path},\n      rootDir_{std::make_unique<watchman_dir>(root_path, nullptr)} {}\n\nwatchman_dir* ViewDatabase::resolveDir(const w_string& dir_name, bool create) {\n  if (dir_name == rootPath_) {\n    return rootDir_.get();\n  }\n\n  const char* dir_component = dir_name.data();\n  const char* dir_end = dir_component + dir_name.size();\n\n  watchman_dir* dir = rootDir_.get();\n  dir_component += rootPath_.size() + 1; // Skip root path prefix\n\n  w_assert(dir_component <= dir_end, \"impossible file name\");\n\n  watchman_dir* parent;\n  while (true) {\n    auto sep = (const char*)memchr(dir_component, '/', dir_end - dir_component);\n    // Note: if sep is NULL it means that we're looking at the basename\n    // component of the input directory name, which is the terminal\n    // iteration of this search.\n\n    w_string_piece component(\n        dir_component, sep ? (sep - dir_component) : (dir_end - dir_component));\n\n    auto child = dir->getChildDir(component);\n\n    if (!child && !create) {\n      return nullptr;\n    }\n    if (!child && sep && create) {\n      // A component in the middle wasn't present.  Since we're in create\n      // mode, we know that the leaf must exist.  The assumption is that\n      // we have another pending item for the parent.  We'll create the\n      // parent dir now and our other machinery will populate its contents\n      // later.\n      w_string child_name(dir_component, (uint32_t)(sep - dir_component));\n\n      // Careful! dir->dirs is keyed by non-owning string pieces so the\n      // child_name MUST be stored or otherwise kept alive by the watchman_dir\n      // instance constructed below!\n      auto& new_child = dir->dirs[child_name];\n      new_child.reset(new watchman_dir(child_name, dir));\n\n      child = new_child.get();\n    }\n\n    parent = dir;\n    dir = child;\n\n    if (!sep) {\n      // We reached the end of the string\n      if (dir) {\n        // We found the dir\n        return dir;\n      }\n      // We need to create the dir\n      break;\n    }\n\n    // Skip to the next component for the next iteration\n    dir_component = sep + 1;\n  }\n\n  w_string child_name(dir_component, (uint32_t)(dir_end - dir_component));\n  // Careful! parent->dirs is keyed by non-owning string pieces so the\n  // child_name MUST be stored or otherwise kept alive by the watchman_dir\n  // instance constructed below!\n  auto& new_child = parent->dirs[child_name];\n  new_child.reset(new watchman_dir(child_name, parent));\n  return new_child.get();\n}\n\nconst watchman_dir* ViewDatabase::resolveDir(const w_string& dir_name) const {\n  if (dir_name == rootPath_) {\n    return rootDir_.get();\n  }\n\n  const char* dir_component = dir_name.data();\n  const char* dir_end = dir_component + dir_name.size();\n\n  watchman_dir* dir = rootDir_.get();\n  dir_component += rootPath_.size() + 1; // Skip root path prefix\n\n  w_assert(dir_component <= dir_end, \"impossible file name\");\n\n  while (true) {\n    auto sep = (const char*)memchr(dir_component, '/', dir_end - dir_component);\n    // Note: if sep is NULL it means that we're looking at the basename\n    // component of the input directory name, which is the terminal\n    // iteration of this search.\n\n    w_string_piece component(\n        dir_component, sep ? (sep - dir_component) : (dir_end - dir_component));\n\n    auto child = dir->getChildDir(component);\n    if (!child) {\n      return nullptr;\n    }\n\n    dir = child;\n\n    if (!sep) {\n      // We reached the end of the string\n      if (dir) {\n        // We found the dir\n        return dir;\n      }\n      // Does not exist\n      return nullptr;\n    }\n\n    // Skip to the next component for the next iteration\n    dir_component = sep + 1;\n  }\n\n  return nullptr;\n}\n\nwatchman_file* ViewDatabase::getOrCreateChildFile(\n    watchman_dir* dir,\n    const w_string& file_name,\n    ClockStamp ctime) {\n  // file_name is typically a baseName slice; let's use it as-is\n  // to look up a child...\n  auto it = dir->files.find(file_name);\n  if (it != dir->files.end()) {\n    return it->second.get();\n  }\n\n  // ... but take the shorter string from inside the file that\n  // we create as the key.\n  auto file = watchman_file::make(file_name, dir);\n  auto& file_ptr = dir->files[file->getName()];\n  file_ptr = std::move(file);\n\n  file_ptr->ctime = ctime;\n\n  return file_ptr.get();\n}\n\nvoid ViewDatabase::markFileChanged(watchman_file* file, ClockStamp otime) {\n  file->otime = otime;\n\n  if (latestFile_ != file) {\n    // unlink from list\n    file->removeFromFileList();\n\n    // and move to the head\n    insertAtHeadOfFileList(file);\n  }\n}\n\nvoid ViewDatabase::markDirDeleted(\n    watchman_dir* dir,\n    ClockStamp otime,\n    bool recursive) {\n  if (!dir->last_check_existed) {\n    // If we know that it doesn't exist, return early\n    return;\n  }\n  dir->last_check_existed = false;\n\n  for (auto& it : dir->files) {\n    auto file = it.second.get();\n\n    if (file->exists) {\n      auto full_name = dir->getFullPathToChild(file->getName());\n      logf(DBG, \"mark_deleted: {}\\n\", full_name);\n      file->exists = false;\n      markFileChanged(file, otime);\n    }\n  }\n\n  if (recursive) {\n    for (auto& it : dir->dirs) {\n      auto child = it.second.get();\n\n      markDirDeleted(child, otime, true);\n    }\n  }\n}\n\nvoid ViewDatabase::insertAtHeadOfFileList(struct watchman_file* file) {\n  file->next = latestFile_;\n  if (file->next) {\n    file->next->prev = &file->next;\n  }\n  latestFile_ = file;\n  file->prev = &latestFile_;\n}\n\nInMemoryView::PendingChangeLogEntry::PendingChangeLogEntry(\n    const PendingChange& pc,\n    std::error_code errcode,\n    const FileInformation& st) noexcept {\n  this->now = pc.now;\n  this->pending_flags = pc.flags.asRaw();\n  storeTruncatedTail(this->path_tail, pc.path);\n\n  this->errcode = errcode.value();\n  this->mode = st.mode;\n  this->size = st.size;\n  this->mtime = st.mtime.tv_sec;\n}\n\njson_ref InMemoryView::PendingChangeLogEntry::asJsonValue() const {\n  return json_object({\n      {\"now\", json_integer(now.time_since_epoch().count())},\n      {\"pending_flags\",\n       typed_string_to_json(PendingFlags::raw(pending_flags).format())},\n      {\"path\",\n       w_string_to_json(w_string{path_tail, strnlen(path_tail, kPathLength)})},\n      {\"errcode\", json_integer(errcode)},\n      {\"mode\", json_integer(mode)},\n      {\"size\", json_integer(size)},\n      {\"mtime\", json_integer(mtime)},\n  });\n}\n\nInMemoryView::InMemoryView(\n    FileSystem& fileSystem,\n    const w_string& root_path,\n    Configuration config,\n    std::shared_ptr<Watcher> watcher)\n    : QueryableView{root_path, /*requiresCrawl=*/true},\n      fileSystem_{fileSystem},\n      config_(std::move(config)),\n      view_(std::in_place, root_path),\n      rootNumber_(next_root_number++),\n      rootPath_(root_path),\n      watcher_(std::move(watcher)),\n      caches_(\n          root_path,\n          config_.getInt(\"content_hash_max_items\", 128 * 1024),\n          config_.getInt(\"symlink_target_max_items\", 32 * 1024),\n          std::chrono::milliseconds(\n              config_.getInt(\"content_hash_negative_cache_ttl_ms\", 2000))),\n      enableContentCacheWarming_(\n          config_.getBool(\"content_hash_warming\", false)),\n      maxFilesToWarmInContentCache_(\n          size_t(config_.getInt(\"content_hash_max_warm_per_settle\", 1024))),\n      maxFileSizeToWarmInContentCache_(int64_t(config_.getInt(\n          \"content_hash_max_file_size_to_warm\",\n          10 * 1024 * 1024))),\n      syncContentCacheWarming_(\n          config_.getBool(\"content_hash_warm_wait_before_settle\", false)) {\n  json_int_t in_memory_view_ring_log_size =\n      config_.getInt(\"in_memory_view_ring_log_size\", 0);\n  if (in_memory_view_ring_log_size) {\n    this->processedPaths_ = std::make_unique<RingBuffer<PendingChangeLogEntry>>(\n        in_memory_view_ring_log_size);\n  }\n}\n\nInMemoryView::~InMemoryView() = default;\n\nClockStamp InMemoryView::ageOutFile(\n    std::unordered_set<w_string>& dirs_to_erase,\n    watchman_file* file) {\n  auto parent = file->parent;\n\n  auto full_name = parent->getFullPathToChild(file->getName());\n  logf(DBG, \"age_out file={}\\n\", full_name);\n\n  auto ageOutOtime = file->otime;\n\n  // If we have a corresponding dir, we want to arrange to remove it, but only\n  // after we have unlinked all of the associated file nodes.\n  dirs_to_erase.insert(full_name);\n\n  // Remove the entry from the containing file hash; this will free it.\n  // We don't need to stop watching it, because we already stopped watching it\n  // when we marked it as !exists.\n  parent->files.erase(file->getName());\n\n  return ageOutOtime;\n}\n\nvoid InMemoryView::ageOut(\n    int64_t& walked,\n    int64_t& files,\n    int64_t& dirs,\n    std::chrono::seconds minAge) {\n  files = 0;\n  walked = 0;\n  std::unordered_set<w_string> dirs_to_erase;\n\n  auto now = std::chrono::system_clock::now();\n  lastAgeOutTimestamp_ = now;\n  auto view = view_.wlock();\n\n  watchman_file* file = view->getLatestFile();\n  watchman_file* prior = nullptr;\n  while (file) {\n    ++walked;\n    if (file->exists ||\n        std::chrono::system_clock::from_time_t(file->otime.timestamp) + minAge >\n            now) {\n      prior = file;\n      file = file->next;\n      continue;\n    }\n\n    auto agedOtime = ageOutFile(dirs_to_erase, file);\n\n    // Revise tick for fresh instance reporting\n    lastAgeOutTick_ = std::max(lastAgeOutTick_, agedOtime.ticks);\n\n    files++;\n\n    // Go back to last good file node; we can't trust that the\n    // value of file->next saved before age_out_file is a valid\n    // file node as anything past that point may have also been\n    // aged out along with it.\n    file = prior;\n  }\n\n  for (auto& name : dirs_to_erase) {\n    auto parent = view->resolveDir(name.dirName(), false);\n    if (parent) {\n      parent->dirs.erase(name.baseName());\n    }\n  }\n\n  if (files + dirs_to_erase.size()) {\n    logf(ERR, \"aged {} files, {} dirs\\n\", files, dirs_to_erase.size());\n  }\n\n  dirs = dirs_to_erase.size();\n}\n\nvoid InMemoryView::timeGenerator(const Query* query, QueryContext* ctx) const {\n  // Walk back in time until we hit the boundary\n  auto view = view_.rlock();\n  ctx->generationStarted();\n\n  for (watchman_file* f = view->getLatestFile(); f; f = f->next) {\n    ctx->bumpNumWalked();\n    // Note that we use <= for the time comparisons in here so that we\n    // report the things that changed inclusive of the boundary presented.\n    // This is especially important for clients using the coarse unix\n    // timestamp as the since basis, as they would be much more\n    // likely to miss out on changes if we didn't.\n    if (auto* since_ts = std::get_if<QuerySince::Timestamp>(&ctx->since.since);\n        since_ts && f->otime.timestamp <= since_ts->time) {\n      break;\n    }\n    if (auto* since_clock = std::get_if<QuerySince::Clock>(&ctx->since.since);\n        since_clock && f->otime.ticks <= since_clock->ticks) {\n      break;\n    }\n\n    if (!ctx->fileMatchesRelativeRoot(f)) {\n      continue;\n    }\n\n    w_query_process_file(\n        query, ctx, std::make_unique<InMemoryFileResult>(f, caches_));\n  }\n}\n\nvoid InMemoryView::pathGenerator(const Query* query, QueryContext* ctx) const {\n  w_string_piece relative_root;\n  struct watchman_file* f;\n\n  if (query->relative_root) {\n    relative_root = *query->relative_root;\n  } else {\n    relative_root = rootPath_;\n  }\n\n  auto view = view_.rlock();\n  ctx->generationStarted();\n\n  for (const auto& path : *query->paths) {\n    const watchman_dir* dir;\n    w_string dir_name;\n\n    // Compose path with root\n    auto full_name = w_string::pathCat({relative_root, path.name});\n\n    // special case of root dir itself\n    if (rootPath_ == full_name) {\n      // dirname on the root is outside the root, which is useless\n      dir = view->resolveDir(full_name);\n      goto is_dir;\n    }\n\n    // Ideally, we'd just resolve it directly as a dir and be done.\n    // It's not quite so simple though, because we may resolve a dir\n    // that had been deleted and replaced by a file.\n    // We prefer to resolve the parent and walk down.\n    dir_name = full_name.dirName();\n    if (dir_name.empty()) {\n      continue;\n    }\n\n    dir = view->resolveDir(dir_name);\n\n    if (!dir) {\n      // Doesn't exist, and never has\n      continue;\n    }\n\n    if (!dir->files.empty()) {\n      auto file_name = path.name.baseName();\n      f = dir->getChildFile(file_name);\n\n      // If it's a file (but not an existent dir)\n      if (f && (!f->exists || !f->stat.isDir())) {\n        ctx->bumpNumWalked();\n        w_query_process_file(\n            query, ctx, std::make_unique<InMemoryFileResult>(f, caches_));\n        continue;\n      }\n    }\n\n    // Is it a dir?\n    if (dir->dirs.empty()) {\n      continue;\n    }\n\n    dir = dir->getChildDir(full_name.baseName());\n  is_dir:\n    // We got a dir; process recursively to specified depth\n    if (dir) {\n      dirGenerator(query, ctx, dir, path.depth);\n    }\n  }\n}\n\nvoid InMemoryView::dirGenerator(\n    const Query* query,\n    QueryContext* ctx,\n    const watchman_dir* dir,\n    uint32_t depth) const {\n  for (auto& it : dir->files) {\n    auto file = it.second.get();\n    ctx->bumpNumWalked();\n\n    w_query_process_file(\n        query, ctx, std::make_unique<InMemoryFileResult>(file, caches_));\n  }\n\n  if (depth > 0) {\n    for (auto& it : dir->dirs) {\n      const auto child = it.second.get();\n\n      dirGenerator(query, ctx, child, depth - 1);\n    }\n  }\n}\n\n/** This is our specialized handler for the ** recursive glob pattern.\n * This is the unhappy path because we have no choice but to recursively\n * walk the tree; we have no way to prune portions that won't match.\n * We do coalesce recursive matches together that might generate multiple\n * results.\n * For example: */\n// globs: [\"foo/**/*.h\", \"foo/**/**/*.h\"]\n/* effectively runs the same query multiple times.  By combining the\n * doublestar walk for both into a single walk, we can then match each\n * file against the list of patterns, terminating that match as soon\n * as any one of them matches the file node.\n */\nvoid InMemoryView::globGeneratorDoublestar(\n    QueryContext* ctx,\n    const struct watchman_dir* dir,\n    const GlobTree* node,\n    const char* dir_name,\n    uint32_t dir_name_len) const {\n  bool matched;\n\n  // First step is to walk the set of files contained in this node\n  for (auto& it : dir->files) {\n    auto file = it.second.get();\n    auto file_name = file->getName();\n\n    ctx->bumpNumWalked();\n\n    if (!file->exists) {\n      // Globs can only match files that exist\n      continue;\n    }\n\n    auto subject = make_path_name(\n        dir_name, dir_name_len, file_name.data(), file_name.size());\n\n    // Now that we have computed the name of this candidate file node,\n    // attempt to match against each of the possible doublestar patterns\n    // in turn.  As soon as any one of them matches we can stop this loop\n    // as it doesn't make a lot of sense to yield multiple results for\n    // the same file.\n    for (const auto& child_node : node->doublestar_children) {\n      matched =\n          wildmatch(\n              child_node->pattern.c_str(),\n              subject.c_str(),\n              ctx->query->glob_flags | WM_PATHNAME |\n                  (ctx->query->case_sensitive == CaseSensitivity::CaseSensitive\n                       ? 0\n                       : WM_CASEFOLD),\n              0) == WM_MATCH;\n\n      if (matched) {\n        w_query_process_file(\n            ctx->query,\n            ctx,\n            std::make_unique<InMemoryFileResult>(file, caches_));\n        // No sense running multiple matches for this same file node\n        // if this one succeeded.\n        break;\n      }\n    }\n  }\n\n  // And now walk down to any dirs; all dirs are eligible\n  for (auto& it : dir->dirs) {\n    const auto child = it.second.get();\n\n    if (!child->last_check_existed) {\n      // Globs can only match files in dirs that exist\n      continue;\n    }\n\n    auto subject = make_path_name(\n        dir_name, dir_name_len, child->name.data(), child->name.size());\n    globGeneratorDoublestar(ctx, child, node, subject.data(), subject.size());\n  }\n}\n\n/* Match each child of node against the children of dir */\nvoid InMemoryView::globGeneratorTree(\n    QueryContext* ctx,\n    const GlobTree* node,\n    const struct watchman_dir* dir) const {\n  if (!node->doublestar_children.empty()) {\n    globGeneratorDoublestar(ctx, dir, node, nullptr, 0);\n  }\n\n  for (const auto& child_node : node->children) {\n    w_assert(!child_node->is_doublestar, \"should not get here with ** glob\");\n\n    // If there are child dirs, consider them for recursion.\n    // Note that we don't restrict this to !leaf because the user may have\n    // set their globs list to something like [\"some_dir\", \"some_dir/file\"]\n    // and we don't want to preclude matching the latter.\n    if (!dir->dirs.empty()) {\n      // Attempt direct lookup if possible\n      if (!child_node->had_specials &&\n          ctx->query->case_sensitive == CaseSensitivity::CaseSensitive) {\n        w_string_piece component(\n            child_node->pattern.data(), child_node->pattern.size());\n        const auto child_dir = dir->getChildDir(component);\n\n        if (child_dir) {\n          globGeneratorTree(ctx, child_node.get(), child_dir);\n        }\n      } else {\n        // Otherwise we have to walk and match\n        for (auto& it : dir->dirs) {\n          const auto child_dir = it.second.get();\n\n          if (!child_dir->last_check_existed) {\n            // Globs can only match files in dirs that exist\n            continue;\n          }\n\n          if (wildmatch(\n                  child_node->pattern.c_str(),\n                  child_dir->name.c_str(),\n                  ctx->query->glob_flags |\n                      (ctx->query->case_sensitive ==\n                               CaseSensitivity::CaseSensitive\n                           ? 0\n                           : WM_CASEFOLD),\n                  0) == WM_MATCH) {\n            globGeneratorTree(ctx, child_node.get(), child_dir);\n          }\n        }\n      }\n    }\n\n    // If the node is a leaf we are in a position to match files.\n    if (child_node->is_leaf && !dir->files.empty()) {\n      // Attempt direct lookup if possible\n      if (!child_node->had_specials &&\n          ctx->query->case_sensitive == CaseSensitivity::CaseSensitive) {\n        w_string_piece component(\n            child_node->pattern.data(), child_node->pattern.size());\n        auto file = dir->getChildFile(component);\n\n        if (file) {\n          ctx->bumpNumWalked();\n          if (file->exists) {\n            // Globs can only match files that exist\n            w_query_process_file(\n                ctx->query,\n                ctx,\n                std::make_unique<InMemoryFileResult>(file, caches_));\n          }\n        }\n      } else {\n        for (auto& it : dir->files) {\n          // Otherwise we have to walk and match\n          auto file = it.second.get();\n          auto file_name = file->getName();\n          ctx->bumpNumWalked();\n\n          if (!file->exists) {\n            // Globs can only match files that exist\n            continue;\n          }\n\n          if (wildmatch(\n                  child_node->pattern.c_str(),\n                  file_name.data(),\n                  ctx->query->glob_flags |\n                      (ctx->query->case_sensitive ==\n                               CaseSensitivity::CaseSensitive\n                           ? 0\n                           : WM_CASEFOLD),\n                  0) == WM_MATCH) {\n            w_query_process_file(\n                ctx->query,\n                ctx,\n                std::make_unique<InMemoryFileResult>(file, caches_));\n          }\n        }\n      }\n    }\n  }\n}\n\nvoid InMemoryView::globGenerator(const Query* query, QueryContext* ctx) const {\n  w_string relative_root;\n\n  if (query->relative_root) {\n    relative_root = *query->relative_root;\n  } else {\n    relative_root = rootPath_;\n  }\n\n  auto view = view_.rlock();\n\n  const auto dir = view->resolveDir(relative_root);\n  if (!dir) {\n    QueryExecError::throwf(\n        \"glob_generator could not resolve {}, check your relative_root parameter!\",\n        relative_root);\n  }\n\n  globGeneratorTree(ctx, query->glob_tree.get(), dir);\n}\n\nvoid InMemoryView::allFilesGenerator(const Query* query, QueryContext* ctx)\n    const {\n  struct watchman_file* f;\n  auto view = view_.rlock();\n  ctx->generationStarted();\n\n  for (f = view->getLatestFile(); f; f = f->next) {\n    ctx->bumpNumWalked();\n    if (!ctx->fileMatchesRelativeRoot(f)) {\n      continue;\n    }\n\n    w_query_process_file(\n        query, ctx, std::make_unique<InMemoryFileResult>(f, caches_));\n  }\n}\n\nClockPosition InMemoryView::getMostRecentRootNumberAndTickValue() const {\n  return ClockPosition(rootNumber_, mostRecentTick_);\n}\n\nw_string InMemoryView::getCurrentClockString() const {\n  char clockbuf[128];\n  if (!clock_id_string(\n          rootNumber_, mostRecentTick_, clockbuf, sizeof(clockbuf))) {\n    throw std::runtime_error(\"clock string exceeded clockbuf size\");\n  }\n  return w_string(clockbuf, W_STRING_UNICODE);\n}\n\nClockTicks InMemoryView::getLastAgeOutTickValue() const {\n  return lastAgeOutTick_;\n}\n\nstd::chrono::system_clock::time_point InMemoryView::getLastAgeOutTimeStamp()\n    const {\n  return lastAgeOutTimestamp_;\n}\n\nvoid InMemoryView::startThreads(const std::shared_ptr<Root>& root) {\n  // Start a thread to call into the watcher API for filesystem notifications\n  auto self = std::static_pointer_cast<InMemoryView>(shared_from_this());\n  logf(DBG, \"starting threads for {} {}\\n\", fmt::ptr(this), rootPath_);\n  std::thread notifyThreadInstance([self, root]() {\n    w_set_thread_name(\n        \"notify \", uintptr_t(self.get()), \" \", self->rootPath_.view());\n    try {\n      self->notifyThread(root);\n    } catch (const std::exception& e) {\n      log(ERR, \"Exception: \", e.what(), \" cancel root\\n\");\n      root->cancel(fmt::format(\"notifyThread failed: {}\", e.what()));\n    }\n    log(DBG, \"out of loop\\n\");\n  });\n  notifyThreadInstance.detach();\n\n  // Wait for it to signal that the watcher has been initialized\n  pendingFromWatcher_.lockAndWait(std::chrono::milliseconds(-1) /* infinite */);\n\n  // And now start the IO thread\n  std::thread ioThreadInstance([self, root]() {\n    w_set_thread_name(\n        \"io \", uintptr_t(self.get()), \" \", self->rootPath_.view());\n    try {\n      self->ioThread(root);\n    } catch (const std::exception& e) {\n      log(ERR, \"Exception: \", e.what(), \" cancel root\\n\");\n      root->cancel(fmt::format(\"ioThread failed: {}\", e.what()));\n    }\n    log(DBG, \"out of loop\\n\");\n  });\n  ioThreadInstance.detach();\n}\n\nvoid InMemoryView::stopThreads(std::string_view reason) {\n  logf(\n      DBG,\n      \"signalThreads! {} {} because ... {}\\n\",\n      fmt::ptr(this),\n      rootPath_,\n      reason);\n  stopThreads_.store(true, std::memory_order_release);\n  watcher_->stopThreads();\n  {\n    auto pending = pendingFromWatcher_.lock();\n    // we need this to make sure that watch does not hang\n    for (auto& sync : pending->stealSyncs()) {\n      sync.setException(\n          std::runtime_error(\n              fmt::format(\"Watch shutting down because ... {}\", reason)));\n    }\n    pending->startRefusingSyncs(reason);\n    pending->ping();\n  }\n}\n\nvoid InMemoryView::wakeThreads() {\n  pendingFromWatcher_.lock()->ping();\n}\n\nfolly::SemiFuture<folly::Unit> InMemoryView::waitForSettle(\n    std::chrono::milliseconds settle_period) {\n  auto [p, f] = folly::makePromiseContract<folly::Unit>();\n  pendingSettles_.withWLock(\n      [&, p = std::move(p)](auto& pendingSettles) mutable {\n        pendingSettles.insert(std::make_pair(settle_period, std::move(p)));\n      });\n\n  // iothread might be waiting, so wake it so it sees the new entry in\n  // pendingSettles_.\n  pendingFromWatcher_.lock()->ping();\n\n  return std::move(f);\n}\n\n/* Ensure that we're synchronized with the state of the\n * filesystem at the current time.\n * We do this by touching a cookie file and waiting to\n * observe it via inotify.  When we see it we know that\n * we've seen everything up to the point in time at which\n * we're asking questions.\n * Throws a std::system_error with an ETIMEDOUT error if\n * the timeout expires before we observe the change, or\n * a runtime_error if the root has been deleted or rendered\n * inaccessible. */\nCookieSync::SyncResult InMemoryView::syncToNow(\n    const std::shared_ptr<Root>& root,\n    std::chrono::milliseconds timeout) {\n  auto syncResult = syncToNowCookies(root, timeout);\n\n  // Some watcher implementations (notably, FSEvents) reorder change events\n  // before they're reported, and cookie files are not sufficient. Instead, the\n  // watcher supports direct synchronization. Once a cookie file has been\n  // observed, ensure that all pending events have been flushed and wait until\n  // the pending event queue is fully crawled.\n  auto result = watcher_->flushPendingEvents();\n  if (result.valid()) {\n    // The watcher has made all pending events available and inserted a promise\n    // into its PendingCollection. Wait for InMemoryView to observe it and\n    // everything prior.\n    //\n    // Would be nice to use a deadline rather than a timeout here.\n\n    try {\n      std::move(result).get(timeout);\n    } catch (folly::FutureTimeout&) {\n      auto why = fmt::format(\n          \"syncToNow: timed out waiting for pending watcher events to be flushed within {} milliseconds\",\n          timeout.count());\n      log(ERR, why, \"\\n\");\n      throw std::system_error(ETIMEDOUT, std::generic_category(), why);\n    }\n  }\n\n  return syncResult;\n}\n\nfolly::SemiFuture<CookieSync::SyncResult> InMemoryView::sync(\n    const std::shared_ptr<Root>& root) {\n  return root->cookies.sync();\n}\n\nCookieSync::SyncResult InMemoryView::syncToNowCookies(\n    const std::shared_ptr<Root>& root,\n    std::chrono::milliseconds timeout) {\n  try {\n    return root->cookies.syncToNow(timeout);\n  } catch (const std::system_error& exc) {\n    auto cookieDirs = root->cookies.cookieDirs();\n\n    if (exc.code() == error_code::no_such_file_or_directory ||\n        exc.code() == error_code::permission_denied ||\n        exc.code() == error_code::not_a_directory) {\n      // A key path was removed; this is either the vcs dir (.hg, .git, .svn)\n      // or possibly the root of the watch itself.\n      if (!(watcher_->flags & WATCHER_HAS_SPLIT_WATCH)) {\n        w_assert(\n            cookieDirs.size() == 1,\n            \"Non split watchers cannot have multiple cookie directories\");\n        if (cookieDirs.count(rootPath_) == 1) {\n          // If the root was removed then we need to cancel the watch.\n          // We may have already observed the removal via the notifythread,\n          // but in some cases (eg: btrfs subvolume deletion) no notification\n          // is received.\n          root->cancel(\"root directory was removed or is inaccessible\");\n          throw std::runtime_error(\"root dir was removed or is inaccessible\");\n        } else {\n          // The cookie dir was a VCS subdir and it got deleted.  Let's\n          // focus instead on the parent dir and recursively retry.\n          root->cookies.setCookieDir(rootPath_);\n          return root->cookies.syncToNow(timeout);\n        }\n      } else {\n        // Split watchers have one watch on the root and watches for nested\n        // directories, and syncToNow will only throw if no cookies were\n        // created, ie: if all the nested watched directories are no longer\n        // present and the root directory has been removed.\n        root->cancel(\"root dir was removed or is inaccessible\");\n        throw std::runtime_error(\"root dir was removed or is inaccessible\");\n      }\n    }\n\n    // Let's augment the error reason with the current recrawl state,\n    // if any.\n    {\n      auto info = root->recrawlInfo.rlock();\n\n      if (!root->inner.done_initial || info->shouldRecrawl) {\n        std::string extra = (info->recrawlCount > 0)\n            ? fmt::format(\"(re-crawling, count={})\", info->recrawlCount)\n            : \"(performing initial crawl)\";\n\n        throw std::system_error(\n            exc.code(), fmt::format(\"{}. {}\", exc.what(), extra));\n      }\n    }\n\n    // On BTRFS we're not guaranteed to get notified about all classes\n    // of replacement so we make a best effort attempt to do something\n    // reasonable.   Let's pretend that we got notified about the cookie\n    // dir changing and schedule the IO thread to look at it.\n    // If it observes a change it will do the right thing.\n    {\n      auto now = std::chrono::system_clock::now();\n\n      // TODO: pass this PendingCollection in as a parameter\n      auto lock = pendingFromWatcher_.lock();\n      for (const auto& dir : cookieDirs) {\n        lock->add(dir, now, W_PENDING_CRAWL_ONLY);\n      }\n      lock->ping();\n    }\n\n    // We didn't have any useful additional contextual information\n    // to add so let's just bubble up the exception.\n    throw;\n  }\n}\n\nbool InMemoryView::doAnyOfTheseFilesExist(\n    const std::vector<w_string>& fileNames) const {\n  auto view = view_.rlock();\n  for (auto& name : fileNames) {\n    auto fullName = w_string::pathCat({rootPath_, name});\n    const auto dir = view->resolveDir(fullName.dirName());\n    if (!dir) {\n      continue;\n    }\n\n    auto file = dir->getChildFile(fullName.baseName());\n    if (!file) {\n      continue;\n    }\n    if (file->exists) {\n      return true;\n    }\n  }\n  return false;\n}\n\nconst w_string& InMemoryView::getName() const {\n  return watcher_->name;\n}\n\nconst std::shared_ptr<Watcher>& InMemoryView::getWatcher() const {\n  return watcher_;\n}\n\njson_ref InMemoryView::getWatcherDebugInfo() const {\n  return json_object({\n      {\"watcher\", watcher_->getDebugInfo()},\n      {\"view\", getViewDebugInfo()},\n  });\n}\n\nvoid InMemoryView::clearWatcherDebugInfo() {\n  watcher_->clearDebugInfo();\n  clearViewDebugInfo();\n}\n\njson_ref InMemoryView::getViewDebugInfo() const {\n  auto processedPathsResult = json_null();\n  if (processedPaths_) {\n    std::vector<json_ref> paths;\n    for (auto& entry : processedPaths_->readAll()) {\n      paths.push_back(entry.asJsonValue());\n    }\n    processedPathsResult = json_array(std::move(paths));\n  }\n  return json_object({\n      {\"processed_paths\", processedPathsResult},\n  });\n}\n\nvoid InMemoryView::clearViewDebugInfo() {\n  if (processedPaths_) {\n    processedPaths_->clear();\n  }\n}\n\nvoid InMemoryView::warmContentCache() {\n  if (!enableContentCacheWarming_) {\n    return;\n  }\n\n  log(DBG, \"considering files for content hash cache warming\\n\");\n\n  size_t n = 0;\n  std::deque<folly::Future<std::shared_ptr<const ContentHashCache::Node>>>\n      futures;\n\n  {\n    // Walk back in time until we hit the boundary, or hit the limit\n    // on the number of files we should warm up.\n    auto view = view_.rlock();\n    struct watchman_file* f;\n    for (f = view->getLatestFile(); f && n < maxFilesToWarmInContentCache_;\n         f = f->next) {\n      if (f->otime.ticks <= lastWarmedTick_) {\n        log(DBG,\n            \"warmContentCache: stop because file ticks \",\n            f->otime.ticks,\n            \" is <= lastWarmedTick_ \",\n            lastWarmedTick_,\n            \"\\n\");\n        break;\n      }\n\n      if (f->exists && f->stat.isFile() &&\n          (maxFileSizeToWarmInContentCache_ <= 0 ||\n           f->stat.size <=\n               static_cast<uint64_t>(maxFileSizeToWarmInContentCache_))) {\n        // Note: we could also add an expression to further constrain\n        // the things we warm up here.  Let's see if we need it before\n        // going ahead and adding.\n\n        auto dirStr = f->parent->getFullPath();\n        w_string_piece dir(dirStr);\n        dir.advance(caches_.contentHashCache.rootPath().size());\n\n        // If dirName is the root, dir.size() will now be zero\n        if (dir.size() > 0) {\n          // if not at the root, skip the slash character at the\n          // front of dir\n          dir.advance(1);\n        }\n        ContentHashCacheKey key{\n            w_string::pathCat({dir, f->getName()}),\n            size_t(f->stat.size),\n            f->stat.mtime};\n\n        log(DBG, \"warmContentCache: lookup \", key.relativePath, \"\\n\");\n        auto f_2 = caches_.contentHashCache.get(key);\n        if (syncContentCacheWarming_) {\n          futures.emplace_back(std::move(f_2));\n        }\n        ++n;\n      }\n    }\n\n    lastWarmedTick_ = mostRecentTick_;\n  }\n\n  log(DBG,\n      \"warmContentCache, lastWarmedTick_ now \",\n      lastWarmedTick_,\n      \" scheduled \",\n      n,\n      \" files for hashing, will wait for \",\n      futures.size(),\n      \" lookups to finish\\n\");\n\n  if (syncContentCacheWarming_) {\n    // Wait for them to finish, but don't use get() because we don't\n    // care about any errors that may have occurred.\n    folly::collectAll(futures.begin(), futures.end()).wait();\n    log(DBG, \"warmContentCache: hashing complete\\n\");\n  }\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/InMemoryView.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <folly/Synchronized.h>\n#include <map>\n#include <memory>\n#include <unordered_map>\n#include <unordered_set>\n#include <utility>\n#include \"watchman/ContentHash.h\"\n#include \"watchman/CookieSync.h\"\n#include \"watchman/PendingCollection.h\"\n#include \"watchman/PerfSample.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/Result.h\"\n#include \"watchman/RingBuffer.h\"\n#include \"watchman/SymlinkTargets.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/fs/DirHandle.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/watchman_string.h\"\n#include \"watchman/watchman_system.h\"\n\nstruct watchman_file;\n\nnamespace watchman {\n\nclass FileSystem;\nclass RootConfig;\nstruct GlobTree;\nclass Watcher;\n\n// Helper struct to hold caches used by the InMemoryView\nstruct InMemoryViewCaches {\n  ContentHashCache contentHashCache;\n  SymlinkTargetCache symlinkTargetCache;\n\n  InMemoryViewCaches(\n      const w_string& rootPath,\n      size_t maxHashes,\n      size_t maxSymlinks,\n      std::chrono::milliseconds errorTTL);\n};\n\nclass InMemoryFileResult final : public FileResult {\n public:\n  InMemoryFileResult(const watchman_file* file, InMemoryViewCaches& caches);\n  std::optional<FileInformation> stat() override;\n  std::optional<struct timespec> accessedTime() override;\n  std::optional<struct timespec> modifiedTime() override;\n  std::optional<struct timespec> changedTime() override;\n  std::optional<size_t> size() override;\n  w_string_piece baseName() override;\n  w_string_piece dirName() override;\n  std::optional<bool> exists() override;\n  std::optional<ResolvedSymlink> readLink() override;\n  std::optional<ClockStamp> ctime() override;\n  std::optional<ClockStamp> otime() override;\n  std::optional<FileResult::ContentHash> getContentSha1() override;\n  void batchFetchProperties(\n      const std::vector<std::unique_ptr<FileResult>>& files) override;\n\n private:\n  const watchman_file* file_;\n  std::optional<w_string> dirName_;\n  InMemoryViewCaches& caches_;\n  std::optional<ResolvedSymlink> symlinkTarget_;\n  Result<FileResult::ContentHash> contentSha1_;\n};\n\n/**\n * In-memory data structure representing Watchman's understanding of the watched\n * root. Files are ordered in a linked recency index as well as hierarchically\n * from the root.\n */\nclass ViewDatabase {\n public:\n  explicit ViewDatabase(const w_string& root_path);\n\n  watchman_file* getLatestFile() const {\n    return latestFile_;\n  }\n\n  ino_t getRootInode() const {\n    return rootInode_;\n  }\n\n  void setRootInode(ino_t ino) {\n    rootInode_ = ino;\n  }\n\n  watchman_dir* resolveDir(const w_string& dirname, bool create);\n\n  const watchman_dir* resolveDir(const w_string& dirname) const;\n\n  /**\n   * Returns the direct child file named name if it already exists, else creates\n   * that entry and returns it.\n   */\n  watchman_file* getOrCreateChildFile(\n      watchman_dir* dir,\n      const w_string& file_name,\n      ClockStamp ctime);\n\n  /**\n   * Updates the otime for the file and bubbles it to the front of recency\n   * index.\n   */\n  void markFileChanged(watchman_file* file, ClockStamp otime);\n\n  /**\n   * Mark a directory as being removed from the view. Marks the contained set of\n   * files as deleted. If recursive is true, is recursively invoked on child\n   * dirs.\n   */\n  void markDirDeleted(watchman_dir* dir, ClockStamp otime, bool recursive);\n\n private:\n  void insertAtHeadOfFileList(struct watchman_file* file);\n\n  const w_string rootPath_;\n\n  /* the most recently changed file */\n  watchman_file* latestFile_ = nullptr;\n\n  std::unique_ptr<watchman_dir> rootDir_;\n\n  // Inode number for the root dir.  This is used to detect what should\n  // be impossible situations, but is needed in practice to workaround\n  // eg: BTRFS not delivering all events for subvolumes\n  ino_t rootInode_{0};\n};\n\n/**\n * Keeps track of the state of the filesystem in-memory and drives a notify\n * thread which consumes events from the watcher.\n */\nclass InMemoryView final : public QueryableView {\n public:\n  InMemoryView(\n      FileSystem& fileSystem,\n      const w_string& root_path,\n      Configuration config,\n      std::shared_ptr<Watcher> watcher);\n  ~InMemoryView() override;\n\n  InMemoryView(InMemoryView&&) = delete;\n  InMemoryView& operator=(InMemoryView&&) = delete;\n\n  ClockPosition getMostRecentRootNumberAndTickValue() const override;\n  ClockTicks getLastAgeOutTickValue() const override;\n  std::chrono::system_clock::time_point getLastAgeOutTimeStamp() const override;\n  w_string getCurrentClockString() const override;\n\n  ClockStamp getClock(std::chrono::system_clock::time_point now) const {\n    return ClockStamp{\n        mostRecentTick_.load(std::memory_order_acquire),\n        std::chrono::system_clock::to_time_t(now),\n    };\n  }\n\n  void ageOut(\n      int64_t& walked,\n      int64_t& files,\n      int64_t& dirs,\n      std::chrono::seconds minAge) override;\n\n  folly::SemiFuture<folly::Unit> waitForSettle(\n      std::chrono::milliseconds settle_period) override;\n  CookieSync::SyncResult syncToNow(\n      const std::shared_ptr<Root>& root,\n      std::chrono::milliseconds timeout) override;\n\n  /**\n   * Write cookies to the working copy and wait to see them.\n   *\n   * The returned future will complete when all the cookies written to the\n   * working copy have been noticed by the underlying watcher.\n   */\n  folly::SemiFuture<CookieSync::SyncResult> sync(\n      const std::shared_ptr<Root>& root) override;\n\n  bool doAnyOfTheseFilesExist(\n      const std::vector<w_string>& fileNames) const override;\n\n  void timeGenerator(const Query* query, QueryContext* ctx) const override;\n\n  void pathGenerator(const Query* query, QueryContext* ctx) const override;\n\n  void globGenerator(const Query* query, QueryContext* ctx) const override;\n\n  void allFilesGenerator(const Query* query, QueryContext* ctx) const override;\n\n  /**\n   * Returns a SemiFuture that completes when any pending recrawls are\n   * completed. The primary use of this is so that \"watch-project\" doesn't send\n   * its return PDU to the client until after the initial crawl is complete.\n   * Note that a recrawl can happen at any point, so this is a bit of a weak\n   * promise that a query can be immediately executed, but is good enough\n   * assuming that the system isn't in a perpetual state of recrawl.\n   */\n  folly::SemiFuture<folly::Unit> waitUntilReadyToQuery() override;\n\n  void startThreads(const std::shared_ptr<Root>& root) override;\n  void stopThreads(std::string_view reason) override;\n  void wakeThreads() override;\n  void clientModeCrawl(const std::shared_ptr<Root>& root);\n\n  const w_string& getName() const override;\n  const std::shared_ptr<Watcher>& getWatcher() const;\n  json_ref getWatcherDebugInfo() const override;\n  void clearWatcherDebugInfo() override;\n  json_ref getViewDebugInfo() const;\n  void clearViewDebugInfo();\n\n  // If content cache warming is configured, do the warm up now\n  void warmContentCache();\n\n  InMemoryViewCaches& debugAccessCaches() const {\n    return caches_;\n  }\n\n private:\n  CookieSync::SyncResult syncToNowCookies(\n      const std::shared_ptr<Root>& root,\n      std::chrono::milliseconds timeout);\n\n  // Returns the erased file's otime.\n  ClockStamp ageOutFile(\n      std::unordered_set<w_string>& dirs_to_erase,\n      watchman_file* file);\n\n  // When a watcher is desynced, it sets the W_PENDING_IS_DESYNCED flag, and the\n  // crawler will set these recursively. If one of these flag is set,\n  // processPending will return IsDesynced::Yes and it is expected that the\n  // caller will abort all pending cookies after processAllPending returns.\n  enum class IsDesynced { Yes, No };\n\n  /** Recursively walks files under a specified dir */\n  void dirGenerator(\n      const Query* query,\n      QueryContext* ctx,\n      const watchman_dir* dir,\n      uint32_t depth) const;\n  void globGeneratorTree(\n      QueryContext* ctx,\n      const GlobTree* node,\n      const struct watchman_dir* dir) const;\n  void globGeneratorDoublestar(\n      QueryContext* ctx,\n      const struct watchman_dir* dir,\n      const GlobTree* node,\n      const char* dir_name,\n      uint32_t dir_name_len) const;\n\n  void notifyThread(const std::shared_ptr<Root>& root);\n\n  // BEGIN IOTHREAD\n\n  void ioThread(const std::shared_ptr<Root>& root);\n\n  // Consume entries from `pending` and apply them to the InMemoryView. Any new\n  // pending paths generated by processPath will be crawled before\n  // processAllPending returns.\n  IsDesynced processAllPending(\n      const std::shared_ptr<Root>& root,\n      ViewDatabase& view,\n      PendingChanges& pending);\n\n  void processPath(\n      const std::shared_ptr<Root>& root,\n      ViewDatabase& view,\n      PendingChanges& coll,\n      const PendingChange& pending,\n      const FileInformation* pre_stat,\n      std::vector<w_string>& pendingCookies);\n\n  /**\n   * Crawl the given directory. Any cookies discovered during the crawl are\n   * appended to pendingCookies.\n   *\n   * Allowed flags:\n   *  - W_PENDING_RECURSIVE: the directory will be recursively crawled,\n   *  - W_PENDING_VIA_NOTIFY when the watcher only supports directory\n   *    notification (W_PENDING_NONRECURSIVE_SCAN), this will stat all\n   *    the files and directories contained in the passed in directory and stop.\n   */\n  void crawler(\n      const std::shared_ptr<Root>& root,\n      ViewDatabase& view,\n      PendingChanges& coll,\n      const PendingChange& pending,\n      std::vector<w_string>& pendingCookies);\n\n  /**\n   * Crawl the given directory recursively using ParallelWalker.\n   *\n   * W_PENDING_RECURSIVE must be set.\n   */\n  void crawlerParallel(\n      const std::shared_ptr<Root>& root,\n      ViewDatabase& view,\n      PendingChanges& coll,\n      const PendingChange& pending,\n      std::vector<w_string>& pendingCookies);\n\n  /**\n   * Called on the IO thread. If `pending` is not in the ignored directory list,\n   * lstat() the file and update the InMemoryView. This may insert work into\n   * `coll` if a directory needs to be rescanned.\n   */\n  void statPath(\n      const Root& root,\n      const CookieSync& cookies,\n      ViewDatabase& view,\n      PendingChanges& coll,\n      const PendingChange& pending,\n      const FileInformation* pre_stat);\n\n  // END IOTHREAD\n\n public:\n  // This is public so the IO thread state machine can be driven from a test.\n  // TODO: Move this logic into a separate class with its own state.\n\n  enum class Continue {\n    Stop,\n    Continue,\n  };\n\n  struct IoThreadState {\n    explicit IoThreadState(std::chrono::milliseconds biggestTimeout)\n        : biggestTimeout{biggestTimeout} {}\n\n    const std::chrono::milliseconds biggestTimeout;\n\n    PendingChanges localPending;\n    std::chrono::milliseconds currentTimeout;\n\n    // When the iothread last processed a pending event from the Watcher.\n    std::optional<std::chrono::steady_clock::time_point> lastUnsettle;\n  };\n\n  // Returns a reference to the ViewDatabase without synchronizing on the mutex.\n  // DO NOT USE OUTSIDE OF SINGLE-THREADED TESTS.\n  ViewDatabase& unsafeAccessViewDatabase() {\n    return view_.unsafeGetUnlocked();\n  }\n\n  // Used by tests to inject events into the iothread.\n  PendingCollection& unsafeAccessPendingFromWatcher() {\n    return pendingFromWatcher_;\n  }\n\n  // Returns whether IO thread should stop.\n  Continue stepIoThread(\n      const std::shared_ptr<Root>& root,\n      IoThreadState& state,\n      PendingCollection& pendingFromWatcher);\n\n private:\n  void fullCrawl(\n      const std::shared_ptr<Root>& root,\n      PendingCollection& pendingFromWatcher,\n      PendingChanges& localPending);\n\n  // Performs settle-time actions.\n  // Returns whether the root was reaped and the IO thread should terminate.\n  Continue doSettleThings(Root& root, IoThreadState& state);\n\n  FileSystem& fileSystem_;\n  const Configuration config_;\n\n  folly::Synchronized<ViewDatabase> view_;\n  // The most recently observed tick value of an item in the view\n  // Only incremented by the iothread, but may be read by other threads.\n  std::atomic<ClockTicks> mostRecentTick_{1};\n  const ClockRoot rootNumber_{0};\n  const w_string rootPath_;\n\n  ClockTicks lastAgeOutTick_{0};\n  // This is system_clock instead of steady_clock because it's compared with a\n  // file's otime.\n  std::chrono::system_clock::time_point lastAgeOutTimestamp_{};\n\n  using PendingSettles =\n      std::multimap<std::chrono::milliseconds, folly::Promise<folly::Unit>>;\n\n  /**\n   * Holds promises that are fulfilled when the IO thread has settled for the\n   * desired amount of time.\n   *\n   * Sorted by settle period.\n   */\n  folly::Synchronized<PendingSettles> pendingSettles_;\n\n  /*\n   * Queue of items that we need to stat/process.\n   *\n   * Populated by both the IO thread (fullCrawl), the notify thread (from the\n   * watcher), and anything that calls waitUntilReadyToQuery.\n   */\n  PendingCollection pendingFromWatcher_;\n\n  std::atomic<bool> stopThreads_{false};\n  std::shared_ptr<Watcher> watcher_;\n\n  // mutable because we pass a reference to other things from inside\n  // const methods\n  mutable InMemoryViewCaches caches_;\n\n  // Should we warm the cache when we settle?\n  bool enableContentCacheWarming_{false};\n  // How many of the most recent files to warm up when settling?\n  size_t maxFilesToWarmInContentCache_{1024};\n  // Do not warm up files whose size is greater than this. A size of 0 is\n  // equivalent to unlimited.\n  int64_t maxFileSizeToWarmInContentCache_{10 * 1024 * 1024};\n  // If true, we will wait for the items to be hashed before\n  // dispatching the settle to watchman clients\n  bool syncContentCacheWarming_{false};\n  // Remember what we've already warmed up\n  uint32_t lastWarmedTick_{0};\n\n  struct PendingChangeLogEntry {\n    PendingChangeLogEntry() noexcept {\n      // time_point is not noexcept so this can't be defaulted.\n    }\n    explicit PendingChangeLogEntry(\n        const PendingChange& pc,\n        std::error_code errcode,\n        const FileInformation& st) noexcept;\n\n    json_ref asJsonValue() const;\n\n    // 55 should cover many filenames.\n    static constexpr size_t kPathLength = 55;\n\n    // fields from PendingChange\n    std::chrono::system_clock::time_point now;\n    PendingFlags::UnderlyingType pending_flags;\n    char path_tail[kPathLength];\n\n    // results of calling getFileInformation\n    int32_t errcode;\n    mode_t mode;\n    off_t size;\n    time_t mtime;\n  };\n\n  static_assert(88 == sizeof(PendingChangeLogEntry));\n\n  // If set, paths processed by processPending are logged here.\n  std::unique_ptr<RingBuffer<PendingChangeLogEntry>> processedPaths_;\n\n  // Track statPath() count during fullCrawl(). Used to report progress.\n  std::shared_ptr<std::atomic<size_t>> fullCrawlStatCount_;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/LRUCache.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <fmt/core.h>\n#include <folly/Synchronized.h>\n#include <folly/futures/Future.h>\n#include <chrono>\n#include <deque>\n#include <memory>\n#include <unordered_map>\n#include \"watchman/WatchmanConfig.h\"\n\nnamespace watchman {\n\n/**\n * LRUCache implements a cache map with an LRU eviction policy.\n *\n * Items are retained in the cache until evicted.\n * Eviction occurs when attempting to insert a new item into\n * a full cache.  Eviction will pick the least-recently-used\n * item to erase.\n *\n * set(), get(), erase() methods are provided for performing\n * immediate operations on the cache contents.  A clear()\n * method allows purging the entire contents at once.\n *\n * An alternative get() API is provided that allows the cache\n * to be satisfied by some function returning a Future<ValueType>.\n * This API has some thundering herd protection built-in;\n * multiple requests for the same key will aggregate on one\n * pending node that will fulfill the request later.\n * Since this mode may experience failure the cache allows\n * setting an errorTTL as a negative cache TTL.  The failure\n * of the lookup will be remembered for the specified duration\n * before allowing a subsequent async get to be tried again.\n *\n * Thread safety: the cache exposes stored values to its client\n * via a Node type.  The Node is a const shared_ptr, making it\n * immutable to the client.  The invariant is that if a client\n * has a reference to a Node, the value() of the node can\n * not be mutated by some other client.  For pending lookups,\n * clients will never be handed a Node; only a Future<Node>.\n *\n * There is a single lock protecting all mutation of the cache\n * and its nodes.  Because the cache is LRU it needs to touch\n * a node as part of a lookup to ensure that it will not\n * be evicted prematurely.\n */\n\ntemplate <typename KeyType, typename ValueType>\nclass LRUCache;\n\n// Some of these class names are a bit too generic to stash\n// in the typical \"detail\" namespace, so we have a more specific\n// container here.\nnamespace lrucache {\ntemplate <typename Node>\nclass TailQHead;\n\n/** The node tracks the value in the cache.\n * We use a shared_ptr to manage its lifetime safely.\n * Clients of the cache will only ever be handed a\n * shared_ptr<const Node>.  Once published to a client,\n * the underlying value is immutable.\n */\ntemplate <typename KeyType, typename ValueType>\nclass Node {\n  friend class TailQHead<Node<KeyType, ValueType>>;\n  friend class LRUCache<KeyType, ValueType>;\n\n public:\n  using PromiseList = std::deque<folly::Promise<std::shared_ptr<const Node>>>;\n\n  // Construct a node via LRUCache::set()\n  Node(const KeyType& key, ValueType&& value)\n      : key_(key), value_(std::move(value)) {}\n\n  // Construct a node using a getter function.\n  // The value is empty and the promise list is initialized.\n  explicit Node(const KeyType& key)\n      : key_(key), promises_(std::make_unique<PromiseList>()) {}\n\n  // Returns the underlying value.\n  const ValueType& value() const {\n    return value_.value();\n  }\n\n  // Returns the underlying value container.\n  // This is useful if you want to test for an error in a Future<> get.\n  const folly::Try<ValueType>& result() const {\n    return value_;\n  }\n\n private:\n  // Obtain a future that will be ready when the pending\n  // fetches are complete.\n  folly::Future<std::shared_ptr<const Node>> subscribe() {\n    promises_->emplace_back();\n    return promises_->back().getFuture();\n  }\n\n  // Test whether an error result can be evicted\n  bool expired(std::chrono::steady_clock::time_point now) const {\n    return value_.hasException() && now >= deadline_;\n  }\n\n  // Address of next element\n  Node* next_{nullptr};\n  // Address of previous next element\n  Node** addressOfPreviousNext_{nullptr};\n\n  // The key\n  KeyType key_;\n  // The stored value\n  folly::Try<ValueType> value_;\n\n  // The collection of clients waiting for this node to be available.\n  // This is a pointer so that we can minimize the space usage once\n  // it has been fulfilled.\n  std::unique_ptr<PromiseList> promises_;\n\n  // Time after which this node is to be considered invalid\n  std::chrono::steady_clock::time_point deadline_;\n};\n\n// A doubly-linked intrusive list through the cache nodes.\n// O(1) append and O(1) removal.\n// This is a non-owning list that is used to maintain the\n// ordered sets used for eviction.\ntemplate <typename Node>\nclass TailQHead {\n public:\n  // First element\n  Node* first_;\n  // Address of the \"next\" field in the last element\n  Node** addressOfLastNext_;\n\n public:\n  TailQHead() : first_(nullptr), addressOfLastNext_(&first_) {}\n\n  void insertTail(Node* node) {\n    node->next_ = nullptr;\n    node->addressOfPreviousNext_ = addressOfLastNext_;\n    *addressOfLastNext_ = node;\n    addressOfLastNext_ = &node->next_;\n  }\n\n  void remove(Node* node) {\n    if (!node->addressOfPreviousNext_) {\n      // Not linked, NOP.\n      return;\n    }\n\n    if (node->next_) {\n      node->next_->addressOfPreviousNext_ = node->addressOfPreviousNext_;\n    } else {\n      addressOfLastNext_ = node->addressOfPreviousNext_;\n    }\n    *node->addressOfPreviousNext_ = node->next_;\n  }\n\n  // Bubble the node to the tail end of the list.\n  void touch(Node* node) {\n    remove(node);\n    insertTail(node);\n  }\n\n  // Clear the list contents\n  void clear() {\n    first_ = nullptr;\n    addressOfLastNext_ = &first_;\n  }\n\n  // Returns a pointer to the first element.\n  // May be nullptr if the tailq is empty.\n  Node* head() {\n    return first_;\n  }\n};\n\nstruct Stats {\n  // Number of times that a get resulted in a usable result\n  size_t cacheHit{0};\n  // Number of times that a get resulted in sharing a pending get\n  size_t cacheShare{0};\n  // Number of times that a get resulted in no usable result\n  size_t cacheMiss{0};\n  // Number of times that an item was evicted for any reason\n  size_t cacheEvict{0};\n  // Number of times that an item was inserted or replaced\n  size_t cacheStore{0};\n  // Number of times that a get was attempted\n  size_t cacheLoad{0};\n  // Number of times that an item was erased via erase()\n  size_t cacheErase{0};\n  // Number of times that the cache has been clear()'d\n  size_t clearCount{0};\n\n  void clear() {\n    cacheHit = 0;\n    cacheShare = 0;\n    cacheMiss = 0;\n    cacheEvict = 0;\n    cacheStore = 0;\n    cacheLoad = 0;\n    cacheErase = 0;\n    ++clearCount;\n  }\n};\n\n// Factoring out the internal state struct here, as MSVC\n// has a hard time compiling it otherwise.\ntemplate <typename KeyType, typename ValueType>\nstruct InternalState {\n  using NodeType = Node<KeyType, ValueType>;\n  // This owns the nodes in the map\n  std::unordered_map<KeyType, std::shared_ptr<NodeType>> map;\n\n  // Maintain some stats for cache introspection\n  Stats stats;\n\n  // To manage eviction we categorize a node into one of\n  // three sets and link it into the appropriate tailq\n  // below.  A node belongs in only one set at a time.\n\n  // Nodes in the process of being fetched.  We cannot\n  // evict anything in this set.  Note that we don't\n  // strictly need to materialize this set (it can be\n  // inferred from node properties) but it is a nice\n  // invariant that any node always has a non-nullptr\n  // result from whichQ().\n  TailQHead<NodeType> lookupOrder;\n\n  // Nodes with a successful result.  Eviction policy\n  // is pure LRU.  Nodes in this set are touched on\n  // access, causing the head to be the least recently\n  // used node in the set, and the tail to be the\n  // most recently used.\n  TailQHead<NodeType> evictionOrder;\n\n  // Nodes with an error result; these have a TTL\n  // that we must respect as a way to manage load.\n  // Nodes in this set are never touched; this means\n  // that the head of this list is always the node\n  // with the closest deadline.\n  TailQHead<NodeType> erroredOrder;\n};\n\n} // namespace lrucache\n\nstruct CacheStats : public lrucache::Stats {\n  CacheStats(const lrucache::Stats s, size_t size) : Stats(s), size(size) {}\n  size_t size;\n};\n\n// The cache.  More information on this can be found at the\n// top of this header file!\ntemplate <typename KeyType, typename ValueType>\nclass LRUCache {\n public:\n  using NodeType = lrucache::Node<KeyType, ValueType>;\n\n private:\n  using State = lrucache::InternalState<KeyType, ValueType>;\n  using LockedState = typename folly::Synchronized<State>::LockedPtr;\n\n public:\n  // Construct a cache with a defined limit and the specified\n  // negative caching TTL duration.  The errorTTL is measured\n  // from the start of the lookup, not its completion.\n  LRUCache(\n      size_t maxItems,\n      std::chrono::milliseconds errorTTL,\n      std::chrono::milliseconds fetchTimeout = std::chrono::seconds(300))\n      : maxItems_(maxItems), errorTTL_(errorTTL), fetchTimeout_(fetchTimeout) {}\n\n  LRUCache(\n      Configuration&& cfg,\n      const char* configPrefix,\n      size_t defaultMaxItems,\n      size_t errorTTLSeconds,\n      size_t fetchTimeoutSeconds = 60)\n      : maxItems_(cfg.getInt(\n            fmt::format(\"{}_cache_size\", configPrefix).c_str(),\n            defaultMaxItems)),\n        errorTTL_(\n            std::chrono::seconds(cfg.getInt(\n                fmt::format(\"{}_cache_error_ttl_seconds\", configPrefix).c_str(),\n                errorTTLSeconds))),\n        fetchTimeout_(\n            std::chrono::seconds(cfg.getInt(\n                fmt::format(\"{}_fetch_timeout_seconds\", configPrefix).c_str(),\n                fetchTimeoutSeconds))) {}\n\n  // No moving or copying\n  LRUCache(const LRUCache&) = delete;\n  LRUCache& operator=(const LRUCache&) = delete;\n  LRUCache(LRUCache&&) = delete;\n  LRUCache& operator=(LRUCache&&) = delete;\n\n  // Lookup key and return the result.\n  // If the key was not present then the result will be nullptr.\n  // If there is an outstanding fetch in progress, throws an error;\n  // you must consistently use the Future<> version of get() for\n  // such a key.\n  std::shared_ptr<const NodeType> get(\n      const KeyType& key,\n      std::chrono::steady_clock::time_point now =\n          std::chrono::steady_clock::now()) {\n    auto state = state_.wlock();\n    ++state->stats.cacheLoad;\n\n    auto it = state->map.find(key);\n    if (it == state->map.end()) {\n      ++state->stats.cacheMiss;\n      return nullptr;\n    }\n\n    auto node = it->second;\n    auto q = whichQ(node.get(), state);\n\n    // Remove expired item\n    if (node->expired(now)) {\n      state->map.erase(it);\n      q->remove(node.get());\n      ++state->stats.cacheMiss;\n      ++state->stats.cacheEvict;\n      return nullptr;\n    }\n\n    if (q == &state->lookupOrder) {\n      // There's no safe way to allow this mode of fetch to subscribe\n      // to the pending lookup.  The caller should use the getter\n      // flavor exclusively for this key.\n      throw std::runtime_error(\"mixing Future getter with direct getter\");\n    }\n\n    if (q == &state->evictionOrder) {\n      q->touch(node.get());\n    }\n\n    ++state->stats.cacheHit;\n    return node;\n  }\n\n  // Lookup key using a getter function.\n  // If the key is not present in the cache, initiates a (possible async)\n  // load of that value using the supplied getter function.\n  // The getter function is a functor which behaves like:\n  // std::function<Future<ValueType>(const KeyType&)>\n  //\n  // If the key is present but not yet satisfied, append a Promise\n  // to the chain in the node and return a Future that will yield the\n  // node once the lookup is complete.\n  //\n  // If the key is present and satisfied, return a Future that will\n  // immediately yield the node.\n  //\n  // The purpose of this function is to reduce the exposure to\n  // \"thundering herd\" style problems.  In watchman we tend to have\n  // limited contention for the same key but may have a great many\n  // requests for different keys; it is desirable to collapse 2x or 3x\n  // the requests for the same key into a single request.\n  //\n  // It is not safe to delete the LRUCache while there are outstanding\n  // getter calls.  It is the responsibility of the caller to ensure\n  // that this does not happen.\n  template <typename Func>\n  folly::Future<std::shared_ptr<const NodeType>> get(\n      const KeyType& key,\n      Func&& getter,\n      std::chrono::steady_clock::time_point now =\n          std::chrono::steady_clock::now()) {\n    std::shared_ptr<NodeType> node;\n    auto future = folly::Future<std::shared_ptr<const NodeType>>::makeEmpty();\n\n    // Only hold the lock on the state while we set up the map entry.\n    {\n      auto state = state_.wlock();\n      ++state->stats.cacheLoad;\n\n      auto it = state->map.find(key);\n      if (it != state->map.end()) {\n        node = it->second;\n\n        auto q = whichQ(node.get(), state);\n\n        if (!node->expired(now)) {\n          // Only touch successful nodes\n          if (q == &state->evictionOrder) {\n            q->touch(node.get());\n          }\n\n          if (node->promises_) {\n            // Not yet satisfied, so chain on a promise\n            ++state->stats.cacheShare;\n            return node->subscribe();\n          }\n\n          // Available now\n          ++state->stats.cacheHit;\n          return folly::makeFuture<std::shared_ptr<const NodeType>>(node);\n        }\n\n        // Remove invalid node.\n        // We can't re-use it without introducing locking in\n        // the node itself.\n        q->remove(node.get());\n        state->map.erase(it);\n        ++state->stats.cacheEvict;\n      }\n\n      // Try to make a new node; this can fail if we are too full\n      node = makeNode(state, now, key);\n\n      // Insert into map and the appropriate tailq\n      state->map.emplace(std::make_pair(node->key_, node));\n      state->lookupOrder.insertTail(node.get());\n\n      ++state->stats.cacheMiss;\n      // and ensure that we capture a subscription before we release\n      // the lock!\n      future = node->subscribe();\n    }\n\n    // Arrange for the value to be populated.\n    // This is done outside the lock in case the getter is a\n    // simple callback that executes immediately in our context;\n    // if that were to then try to operate on the cache, it would\n    // deadlock.\n    folly::makeFuture()\n        .thenValue([getter = std::forward<Func>(getter), key](folly::Unit&&) {\n          return getter(key);\n        })\n        .thenTry([node, this, now](folly::Try<ValueType>&& result) {\n          // We're going to steal the promises so that we can fulfil\n          // them outside of the lock\n          std::unique_ptr<typename NodeType::PromiseList> promises;\n          {\n            auto state = state_.wlock();\n            node->value_ = std::move(result);\n\n            if (whichQ(node.get(), state) != &state->lookupOrder) {\n              // Should never happen...\n              abort();\n            }\n\n            ++state->stats.cacheStore;\n\n            // We're no longer looking this up; we'll put it in the\n            // correct bucket just before we release the lock below.\n            state->lookupOrder.remove(node.get());\n\n            // We only need a TTL for errors\n            if (node->value_.hasException()) {\n              // Note that we don't account for the time it takes to\n              // arrive at the error condition in this TTL.  This\n              // is semi-deliberate; the for the sake of testing we\n              // are passing `now` through from outside.\n              node->deadline_ = now + errorTTL_;\n            }\n\n            // Steal the promises; we will fulfill them below\n            // after we've released the lock.\n            std::swap(promises, node->promises_);\n\n            if (whichQ(node.get(), state) == &state->lookupOrder) {\n              // Should never happen...\n              abort();\n            }\n\n            // Now that the promises have been stolen, insert into\n            // the appropriate queue.\n            whichQ(node.get(), state)->insertTail(node.get());\n\n            // If we were saturated at the start of the query, we may\n            // not have been able to make room and may have taken on\n            // more requests than the cache limits allow.  Now that we're\n            // done we should be able to free up some of those entries,\n            // so take a stab at that now.\n            while (state->map.size() > maxItems_) {\n              if (!evictOne(state, now, true)) {\n                // We were not able to evict anything, so stop\n                // trying.  We'll be over our cache size limit,\n                // but there's not much more we can do.\n                break;\n              }\n            }\n          }\n\n          // Wake up all waiters\n          for (auto& p : *promises) {\n            p.setValue(node);\n          }\n        });\n\n    return std::move(future).within(fetchTimeout_);\n  }\n\n  // Explicitly set the value for a key.\n  // This will create or update a node as appropriate.\n  // This may fail if there is no space and no items can be evicted.\n  std::shared_ptr<const NodeType> set(\n      const KeyType& key,\n      ValueType&& value,\n      std::chrono::steady_clock::time_point now =\n          std::chrono::steady_clock::now()) {\n    auto state = state_.wlock();\n    auto it = state->map.find(key);\n\n    if (it != state->map.end()) {\n      // Remove this item.  We can't update the value in the\n      // item without introducing per-node locks, so we simply\n      // allow any external references to see their immutable\n      // value while we insert a new value in the map.\n\n      // Note that we don't check node->expired() here like\n      // we do in the get() path.  The assumption is that the\n      // caller is deliberately replacing an errored node\n      // with some valid value.\n      auto oldNode = it->second;\n      whichQ(oldNode.get(), state)->remove(oldNode.get());\n      state->map.erase(it);\n      ++state->stats.cacheEvict;\n    }\n\n    auto node = makeNode(state, now, key, std::move(value));\n    state->map.emplace(std::make_pair(node->key_, node));\n    whichQ(node.get(), state)->insertTail(node.get());\n    ++state->stats.cacheStore;\n\n    return node;\n  }\n\n  // Erase the entry associated with key.\n  // Returns the node if it was present, else nullptr.\n  std::shared_ptr<const NodeType> erase(const KeyType& key) {\n    auto state = state_.wlock();\n    auto it = state->map.find(key);\n    if (it == state->map.end()) {\n      return nullptr;\n    }\n\n    auto node = it->second;\n    // Note that we don't check node->expired() here like\n    // we do in the get() path.  The assumption is that the\n    // caller is deliberately invalidating an errored node.\n    whichQ(node.get(), state)->remove(node.get());\n    state->map.erase(it);\n    ++state->stats.cacheErase;\n\n    return node;\n  }\n\n  // Returns the number of cached items\n  size_t size() const {\n    auto state = state_.rlock();\n    return state->map.size();\n  }\n\n  // Returns cache statistics\n  CacheStats stats() const {\n    auto state = state_.rlock();\n    return CacheStats(state->stats, state->map.size());\n  }\n\n  // Purge all of the entries from the cache\n  void clear() {\n    auto state = state_.wlock();\n    state->evictionOrder.clear();\n    state->erroredOrder.clear();\n    state->lookupOrder.clear();\n    state->map.clear();\n    state->stats.clear();\n  }\n\n private:\n  // Small helper for creating a new Node.  This checks for capacity\n  // and attempts to evict an item to make room if needed.\n  // The eviction may fail in some cases, which results in this method\n  // also throwing.\n  template <typename... Args>\n  std::shared_ptr<NodeType> makeNode(\n      LockedState& state,\n      std::chrono::steady_clock::time_point now,\n      Args&&... args) {\n    // If we are too full, try to evict an item; this may throw if there are no\n    // evictable items!\n    if (state->map.size() + 1 > maxItems_) {\n      evictOne(state, now, true);\n    }\n\n    return std::make_shared<NodeType>(std::forward<Args>(args)...);\n  }\n\n  // Returns the queue into which the node should be placed (for new nodes),\n  // or should currently be linked into (for existing nodes).\n  lrucache::TailQHead<NodeType>* whichQ(NodeType* node, LockedState& state) {\n    if (node->promises_) {\n      return &state->lookupOrder;\n    }\n\n    if (!node->value_.hasValue()) {\n      return &state->erroredOrder;\n    }\n\n    return &state->evictionOrder;\n  }\n\n  // Attempt to evict a single item to make space for a new Node.\n  // if `forceRemoval` is true, then we're being called to flush\n  // out any excess items that we were forced to absorb earlier,\n  // so we can consider flushing out the error entries.\n  bool evictOne(\n      LockedState& state,\n      std::chrono::steady_clock::time_point now,\n      bool forceRemoval) {\n    // Since errors have a TTL (as opposed to infinite), try to\n    // evict one of those first.  That keeps the cache focused\n    // on usable items rather than prematurely evicting something\n    // that might be useful again in the future.\n    auto errorNode = state->erroredOrder.head();\n    if (errorNode && errorNode->expired(now)) {\n      state->erroredOrder.remove(errorNode);\n      // Erase from the map last, as this will invalidate node\n      state->map.erase(errorNode->key_);\n      ++state->stats.cacheEvict;\n      return true;\n    }\n\n    // Second choice is to evict a successful item\n    auto node = state->evictionOrder.head();\n    if (node) {\n      state->evictionOrder.remove(node);\n      // Erase from the map last, as this will invalidate node\n      state->map.erase(node->key_);\n      ++state->stats.cacheEvict;\n      return true;\n    }\n\n    // We couldn't find any other options and it is important\n    // to remove something, so let's eliminate an error item\n    // that we found earlier.\n    if (forceRemoval && errorNode) {\n      state->erroredOrder.remove(errorNode);\n      // Erase from the map last, as this will invalidate node\n      state->map.erase(errorNode->key_);\n      ++state->stats.cacheEvict;\n      return true;\n    }\n\n    // There are no evictable items to purge, so we are too full.\n    return false;\n  }\n\n  // The maximum allowed capacity\n  const size_t maxItems_;\n  // How long to cache items that have an error Result\n  const std::chrono::milliseconds errorTTL_;\n  const std::chrono::milliseconds fetchTimeout_;\n  folly::Synchronized<State> state_;\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/LogConfig.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/LogConfig.h\"\n#include \"watchman/Logging.h\"\n\nnamespace watchman::logging {\n\nint log_level = LogLevel::ERR;\nstd::string log_name;\n\n} // namespace watchman::logging\n"
  },
  {
    "path": "watchman/LogConfig.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <string>\n\nnamespace watchman::logging {\n\nextern int log_level;\nextern std::string log_name;\n\n} // namespace watchman::logging\n"
  },
  {
    "path": "watchman/Logging.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Logging.h\"\n\n#include <folly/ScopeGuard.h>\n#include <folly/ThreadLocal.h>\n#include <folly/experimental/symbolizer/Symbolizer.h>\n#include <folly/portability/SysTime.h>\n#include <folly/system/ThreadName.h>\n\n#include \"watchman/portability/Backtrace.h\"\n\n#include <fmt/core.h>\n#include <array>\n#include <limits>\n#include <optional>\n#include <sstream>\n\n#ifdef __APPLE__\n#include <pthread.h>\n#endif\n\nusing namespace watchman;\n\nstatic folly::ThreadLocal<std::optional<std::string>> threadName;\n\nnamespace {\ntemplate <typename String>\nvoid write_stderr(const String& str) {\n  w_string_piece piece = str;\n  ignore_result(\n      folly::fileops::write(STDERR_FILENO, piece.data(), piece.size()));\n}\n\ntemplate <typename String, typename... Strings>\nvoid write_stderr(const String& str, Strings&&... strings) {\n  write_stderr(str);\n  write_stderr(strings...);\n}\n} // namespace\n\nstatic void log_stack_trace() {\n  using namespace folly::symbolizer;\n#if FOLLY_HAVE_ELF && FOLLY_HAVE_DWARF\n  static FastStackTracePrinter printer{\n      std::make_unique<FDSymbolizePrinter>(STDERR_FILENO)};\n#else\n  // stack-allocated to avoid thread safety issues.\n  SafeStackTracePrinter printer;\n#endif\n  write_stderr(\"Fatal error detected at:\\n\");\n  printer.printStackTrace(true);\n}\n\nnamespace watchman {\n\nnamespace {\nstruct levelMaps {\n  // Actually a map of LogLevel, w_string, but it is relatively high friction\n  // to define the hasher for an enum key :-p\n  std::unordered_map<int, w_string> levelToLabel;\n  std::unordered_map<w_string, LogLevel> labelToLevel;\n\n  levelMaps()\n      : levelToLabel{\n            {ABORT, \"abort\"},\n            {FATAL, \"fatal\"},\n            {ERR, \"error\"},\n            {OFF, \"off\"},\n            {DBG, \"debug\"}} {\n    // Create the reverse map\n    for (auto& it : levelToLabel) {\n      labelToLevel.insert(\n          std::make_pair(it.second, static_cast<LogLevel>(it.first)));\n    }\n  }\n};\n\n// Meyers singleton for holding the log level maps\nlevelMaps& getLevelMaps() {\n  static levelMaps maps;\n  return maps;\n}\n\n} // namespace\n\nconst w_string& logLevelToLabel(LogLevel level) {\n  return getLevelMaps().levelToLabel.at(static_cast<int>(level));\n}\n\nLogLevel logLabelToLevel(const w_string& label) {\n  return getLevelMaps().labelToLevel.at(label);\n}\n\nLog::Log()\n    : errorPub_(std::make_shared<Publisher>()),\n      debugPub_(std::make_shared<Publisher>()) {\n  setStdErrLoggingLevel(ERR);\n}\n\nLog& getLog() {\n  static Log log;\n  return log;\n}\n\nchar* Log::timeString(char* buf, size_t bufsize, timeval tv) {\n  struct tm tm;\n#ifdef _WIN32\n  time_t seconds = (time_t)tv.tv_sec;\n  tm = *localtime(&seconds);\n#else\n  localtime_r(&tv.tv_sec, &tm);\n#endif\n\n  char timebuf[64];\n  strftime(timebuf, sizeof(timebuf), \"%Y-%m-%dT%H:%M:%S\", &tm);\n  snprintf(buf, bufsize, \"%s,%03d\", timebuf, (int)tv.tv_usec / 1000);\n  return buf;\n}\n\nchar* Log::currentTimeString(char* buf, size_t bufsize) {\n  struct timeval tv;\n  gettimeofday(&tv, nullptr);\n  return timeString(buf, bufsize, tv);\n}\n\nnamespace {\n// The C++ standard does not require that globals are all initialized on the\n// same thread, but that's a safe assumption in practice.\nstd::thread::id mainThreadId = std::this_thread::get_id();\n} // namespace\n\nconst char* Log::setThreadName(std::string&& name) {\n  if (mainThreadId != std::this_thread::get_id()) {\n    // pthread_setname_np on the main thread sets the name of the watchman\n    // process, preventing `pkill watchman` from crashing. We still want to set\n    // our local thread name for the purposes of Watchman's log messages.\n    folly::setThreadName(name);\n  }\n\n  threadName->emplace(name);\n  return threadName->value().c_str();\n}\n\nconst char* Log::getThreadName() {\n  if (!threadName->has_value()) {\n    auto name = folly::getCurrentThreadName();\n    if (name.hasValue()) {\n      threadName->emplace(name.value());\n    } else {\n      std::stringstream ss;\n      ss << std::this_thread::get_id();\n      threadName->emplace(ss.str());\n    }\n  }\n  return threadName->value().c_str();\n}\n\nvoid Log::setStdErrLoggingLevel(LogLevel level) {\n  auto notify = [this]() { doLogToStdErr(); };\n  auto subs = subscribers_.lock();\n  auto& debugSub = subs->debugSub_;\n  auto& errorSub = subs->errorSub_;\n  switch (level) {\n    case OFF:\n      errorSub.reset();\n      debugSub.reset();\n      return;\n    case DBG:\n      if (!debugSub) {\n        debugSub = debugPub_->subscribe(notify);\n      }\n      if (!errorSub) {\n        errorSub = errorPub_->subscribe(notify);\n      }\n      return;\n    default:\n      debugSub.reset();\n      if (!errorSub) {\n        errorSub = errorPub_->subscribe(notify);\n      }\n      return;\n  }\n}\n\nvoid Log::doLogToStdErr() {\n  std::vector<std::shared_ptr<const watchman::Publisher::Item>> items;\n\n  {\n    auto subs = subscribers_.lock();\n    getPending(items, subs->errorSub_, subs->debugSub_);\n  }\n\n  bool doFatal = false;\n  bool doAbort = false;\n  static w_string kFatal(\"fatal\");\n  static w_string kAbort(\"abort\");\n\n  for (auto& item : items) {\n    auto& log = json_to_w_string(item->payload.get(\"log\"));\n    ignore_result(folly::fileops::write(STDERR_FILENO, log.data(), log.size()));\n\n    auto level = json_to_w_string(item->payload.get(\"level\"));\n    if (level == kFatal) {\n      doFatal = true;\n    } else if (level == kAbort) {\n      doAbort = true;\n    }\n  }\n\n  if (doFatal || doAbort) {\n    log_stack_trace();\n    if (doAbort) {\n      abort();\n    } else {\n      _exit(1);\n    }\n  }\n}\n\n#ifdef _WIN32\nstatic constexpr size_t kMaxFrames = 64;\n\nLONG WINAPI exception_filter(LPEXCEPTION_POINTERS excep) {\n  std::array<void*, kMaxFrames> array;\n  size_t size;\n  char** strings;\n  size_t i;\n  char timebuf[64];\n\n  size = backtrace_from_exception(excep, array.data(), array.size());\n  strings = backtrace_symbols(array.data(), size);\n\n  write_stderr(\n      watchman::Log::currentTimeString(timebuf, sizeof(timebuf)),\n      \": [\",\n      watchman::Log::getThreadName(),\n      \"] Unhandled win32 exception code=\",\n      fmt::to_string(excep->ExceptionRecord->ExceptionCode),\n      \".  Fatal error detected at:\\n\");\n\n  for (i = 0; i < size; i++) {\n    write_stderr(strings[i], \"\\n\");\n  }\n  free(strings);\n\n  write_stderr(\"the stack trace for the exception filter call is:\\n\");\n  size = backtrace(array.data(), array.size());\n  strings = backtrace_symbols(array.data(), size);\n  for (i = 0; i < size; i++) {\n    write_stderr(strings[i], \"\\n\");\n  }\n  free(strings);\n\n  // Terminate the process.\n  // msvcrt abort() ultimately calls exit(3), so we shortcut that.\n  // Ideally we'd just exit() or ExitProcess() and be done, but it\n  // is documented as possible (or even likely!) that deadlock\n  // is possible, so we use TerminateProcess() to force ourselves\n  // to terminate.\n  TerminateProcess(GetCurrentProcess(), 3);\n  // However, TerminateProcess() is asynchronous and we will continue\n  // running here.  Let's also try exiting normally and see which\n  // approach wins!\n  exit(3);\n  return EXCEPTION_CONTINUE_SEARCH;\n}\n#endif\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/Logging.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <fmt/ranges.h>\n#include <folly/Synchronized.h>\n#include <folly/portability/Windows.h> // For timeval. Replace this.\n\n#include \"watchman/PubSub.h\"\n#include \"watchman/watchman_preprocessor.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nenum LogLevel { ABORT = -2, FATAL = -1, OFF = 0, ERR = 1, DBG = 2 };\n\nconst w_string& logLevelToLabel(LogLevel level);\nLogLevel logLabelToLevel(const w_string& label);\n\nclass Log {\n public:\n  std::shared_ptr<Publisher::Subscriber> subscribe(\n      LogLevel level,\n      Publisher::Notifier notify) {\n    return levelToPub(level).subscribe(notify);\n  }\n\n  static char* currentTimeString(char* buf, size_t bufsize);\n  static char* timeString(char* buf, size_t bufsize, timeval tv);\n  static const char* getThreadName();\n  static const char* setThreadName(std::string&& name);\n\n  void setStdErrLoggingLevel(LogLevel level);\n\n  // Build a string and log it\n  template <typename... Args>\n  void log(LogLevel level, Args&&... args) {\n    auto& pub = levelToPub(level);\n\n    // Avoid building the string if there are no subscribers\n    if (!pub.hasSubscribers()) {\n      return;\n    }\n\n    char timebuf[64];\n\n    auto payload = json_object(\n        {{\"log\",\n          typed_string_to_json(\n              w_string::build(\n                  currentTimeString(timebuf, sizeof(timebuf)),\n                  \": [\",\n                  getThreadName(),\n                  \"] \",\n                  std::forward<Args>(args)...))},\n         {\"unilateral\", json_true()},\n         {\"level\", typed_string_to_json(logLevelToLabel(level))}});\n\n    pub.enqueue(std::move(payload));\n  }\n\n  // Format a string and log it\n  template <typename... Args>\n  void logf(LogLevel level, fmt::string_view format_str, Args&&... args) {\n    auto& pub = levelToPub(level);\n\n    // Avoid building the string if there are no subscribers\n    if (!pub.hasSubscribers()) {\n      return;\n    }\n\n    char timebuf[64];\n\n    auto message =\n        fmt::format(fmt::runtime(format_str), std::forward<Args>(args)...);\n    auto payload = json_object(\n        {{\"log\",\n          typed_string_to_json(\n              w_string::build(\n                  currentTimeString(timebuf, sizeof(timebuf)),\n                  \": [\",\n                  getThreadName(),\n                  \"] \",\n                  std::move(message)))},\n         {\"unilateral\", json_true()},\n         {\"level\", typed_string_to_json(logLevelToLabel(level))}});\n\n    pub.enqueue(std::move(payload));\n  }\n\n  Log();\n\n private:\n  std::shared_ptr<Publisher> errorPub_;\n  std::shared_ptr<Publisher> debugPub_;\n\n  struct Subscribers {\n    std::shared_ptr<Publisher::Subscriber> errorSub_;\n    std::shared_ptr<Publisher::Subscriber> debugSub_;\n  };\n  // The lock on the subscribers exists for 2 reasons:\n  // 1. The standard reason: preventing multiple threads from clobbering over\n  //    each other or reading garbage from the subscribers. This lock prevents\n  //    multiple clients from clobbering the subscribers.\n  // 2. Only one thread may print to standard error at a given time. This avoids\n  //    the output logs from becoming scrambled. This lock is acquired before\n  //    writing to stderr.\n  folly::Synchronized<Subscribers, std::mutex> subscribers_;\n\n  inline Publisher& levelToPub(LogLevel level) {\n    return level == DBG ? *debugPub_ : *errorPub_;\n  }\n\n  void doLogToStdErr();\n};\n\n// Get the logger singleton\nLog& getLog();\n\ntemplate <typename... Args>\nvoid log(LogLevel level, Args&&... args) {\n  getLog().log(level, std::forward<Args>(args)...);\n}\n\ntemplate <typename... Args>\nvoid logf(LogLevel level, fmt::string_view format_str, Args&&... args) {\n  getLog().logf(level, format_str, std::forward<Args>(args)...);\n}\n\n// Log only to stderr. This bypasses Logging / folly::Synchronized which\n// might deadlock during exit.\ntemplate <typename... Args>\nvoid logf_stderr(fmt::string_view format_str, Args&&... args) {\n  auto msg = fmt::format(fmt::runtime(format_str), std::forward<Args>(args)...);\n  ignore_result(folly::fileops::write(STDERR_FILENO, msg.data(), msg.size()));\n}\n\n#ifdef _WIN32\nLONG WINAPI exception_filter(LPEXCEPTION_POINTERS excep);\n#endif\n\n} // namespace watchman\n\ntemplate <typename... Args>\nconst char* w_set_thread_name(const Args&... args) {\n  auto name =\n      fmt::to_string(fmt::join(std::make_tuple<const Args&...>(args...), \"\"));\n  return watchman::Log::setThreadName(std::move(name));\n}\n\n#define w_check(e, ...)                          \\\n  if (!(e)) {                                    \\\n    watchman::logf(                              \\\n        watchman::ERR,                           \\\n        \"{}:{} failed assertion `{}'\\n\",         \\\n        __FILE__,                                \\\n        __LINE__,                                \\\n        #e);                                     \\\n    watchman::log(watchman::ABORT, __VA_ARGS__); \\\n  }\n\n// Similar to assert(), but uses W_LOG_FATAL to log the stack trace\n// before giving up the ghost\n#ifdef NDEBUG\n#define w_assert(e, ...) ((void)0)\n#else\n#define w_assert(e, ...) w_check(e, __VA_ARGS__)\n#endif\n"
  },
  {
    "path": "watchman/MapUtil.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <utility>\nnamespace watchman {\n\n// Remove key from the map. Returns true if any keys were removed.\ntemplate <typename Map, typename Key>\nbool mapRemove(Map& map, Key& key) {\n  return map.erase(key) > 0;\n}\n\n// Inserts Key->Value mapping if Key is not already present.\n// Returns a boolean indicating whether insertion happened.\ntemplate <typename Map, typename Key, typename Value>\nbool mapInsert(Map& map, const Key& key, const Value& value) {\n  auto pair = map.insert(std::make_pair(key, value));\n  return pair.second;\n}\n\n// Returns true if the map contains any of the passed keys\ntemplate <typename Map, typename Key>\nbool mapContainsAny(const Map& map, const Key& key) {\n  return map.find(key) != map.end();\n}\n\n// Returns true if the map contains any of the passed keys\ntemplate <typename Map, typename Key, typename... Args>\nbool mapContainsAny(const Map& map, const Key& firstKey, Args... args) {\n  return mapContainsAny(map, firstKey) || mapContainsAny(map, args...);\n}\n\n// Returns true if the map contains any of a list of passed keys\ntemplate <typename Map, typename Iterator>\nbool mapContainsAnyOf(const Map& map, Iterator first, Iterator last) {\n  for (auto it = first; it != last; ++it) {\n    if (map.find(*it) != map.end()) {\n      return true;\n    }\n  }\n  return false;\n}\n\n// Returns Map[Key] or if it isn't present, returns a default value.\n// if the default isn't specified, returns a default-constructed value.\ntemplate <class Map, typename Key = typename Map::key_type>\ntypename Map::mapped_type mapGetDefault(\n    const Map& map,\n    const Key& key,\n    const typename Map::mapped_type& dflt = typename Map::mapped_type()) {\n  auto pos = map.find(key);\n  return (pos != map.end() ? pos->second : dflt);\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/Options.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Options.h\"\n#include <fmt/core.h>\n#include <string.h>\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/LogConfig.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/portability/GetOpt.h\"\n\n#define IS_REQUIRED(x) (x) == REQ_STRING\n\nnamespace watchman {\n\nFlags flags;\n\nnamespace {\nconst OptDesc opts[] = {\n    {\"help\",\n     'h',\n     \"Show this help\",\n     OPT_NONE,\n     &flags.show_help,\n     nullptr,\n     NOT_DAEMON},\n#ifndef _WIN32\n    {\"inetd\",\n     0,\n     \"Spawning from an inetd style supervisor\",\n     OPT_NONE,\n     &flags.inetd_style,\n     nullptr,\n     IS_DAEMON},\n#endif\n    {\"no-site-spawner\",\n     'S',\n     \"Don't use the site or system spawner\",\n     OPT_NONE,\n     &flags.no_site_spawner,\n     nullptr,\n     IS_DAEMON},\n    {\"version\",\n     'v',\n     \"Show version number\",\n     OPT_NONE,\n     &flags.show_version,\n     NULL,\n     NOT_DAEMON},\n/* -U / --sockname  have legacy meaning; unix domain on unix,\n * named pipe path on windows.  After we chose this assignment,\n * Windows evolved unix domain support which muddies this.\n * We need to preserve the sockname/U option here for backwards\n * compatibility */\n#ifdef _WIN32\n    {\"sockname\",\n     'U',\n     \"DEPRECATED: Specify alternate named pipe path (specifying this will\"\n     \" disable unix domain sockets unless `--unix-listener-path` is\"\n     \" specified)\",\n     REQ_STRING,\n     &flags.named_pipe_path,\n     \"PATH\",\n     IS_DAEMON},\n#else\n    {\"sockname\",\n     'U',\n     \"DEPRECATED: Specify alternate sockname. Use `--unix-listener-path` instead.\",\n     REQ_STRING,\n     &flags.unix_sock_name,\n     \"PATH\",\n     IS_DAEMON},\n#endif\n    {\"named-pipe-path\",\n     0,\n     \"Specify alternate named pipe path\",\n     REQ_STRING,\n     &flags.named_pipe_path,\n     \"PATH\",\n     IS_DAEMON},\n    {\"unix-listener-path\",\n     'u',\n#ifdef _WIN32\n     \"Specify alternate unix domain socket path (specifying this will disable\"\n     \" named pipes unless `--named-pipe-path` is specified)\",\n#else\n     \"Specify alternate unix domain socket path\",\n#endif\n     REQ_STRING,\n     &flags.unix_sock_name,\n     \"PATH\",\n     IS_DAEMON},\n    {\"logfile\",\n     'o',\n     \"Specify path to logfile ('-' = stdout and stderr)\",\n     REQ_STRING,\n     &watchman::logging::log_name,\n     \"PATH\",\n     IS_DAEMON},\n    {\"log-level\",\n     0,\n     \"set the log level (0 = off, default is 1, verbose = 2)\",\n     REQ_INT,\n     &watchman::logging::log_level,\n     NULL,\n     IS_DAEMON},\n    {\"pidfile\",\n     0,\n     \"Specify path to pidfile\",\n     REQ_STRING,\n     &flags.pid_file,\n     \"PATH\",\n     IS_DAEMON},\n    {\"persistent\",\n     'p',\n     \"Persist and wait for further responses\",\n     OPT_NONE,\n     &flags.persistent,\n     NULL,\n     NOT_DAEMON},\n    {\"no-save-state\",\n     'n',\n     \"Don't save state between invocations\",\n     OPT_NONE,\n     &flags.dont_save_state,\n     NULL,\n     IS_DAEMON},\n    {\"statefile\",\n     0,\n     \"Specify path to file to hold watch and trigger state\",\n     REQ_STRING,\n     &flags.watchman_state_file,\n     \"PATH\",\n     IS_DAEMON},\n    {\"json-command\",\n     'j',\n     \"Instead of parsing CLI arguments, take a single \"\n     \"json object from stdin\",\n     OPT_NONE,\n     &flags.json_input_arg,\n     NULL,\n     NOT_DAEMON},\n    {\"output-encoding\",\n     0,\n     \"CLI output encoding. json (default) or bser\",\n     REQ_STRING,\n     &flags.output_encoding,\n     NULL,\n     NOT_DAEMON},\n    {\"server-encoding\",\n     0,\n     \"CLI<->server encoding. bser (default) or json\",\n     REQ_STRING,\n     &flags.server_encoding,\n     NULL,\n     NOT_DAEMON},\n    {\"foreground\",\n     'f',\n     \"Run the service in the foreground\",\n     OPT_NONE,\n     &flags.foreground,\n     NULL,\n     NOT_DAEMON},\n    {\"pretty\",\n     0,\n     \"Force pretty output, even if stdout isn't a TTY\",\n     OPT_NONE,\n     &flags.yes_pretty,\n     NULL,\n     NOT_DAEMON},\n    {\"no-pretty\",\n     0,\n     \"Don't pretty print JSON\",\n     OPT_NONE,\n     &flags.no_pretty,\n     NULL,\n     NOT_DAEMON},\n    {\"no-spawn\",\n     0,\n     \"Don't try to start the service if it is not available\",\n     OPT_NONE,\n     &flags.no_spawn,\n     NULL,\n     NOT_DAEMON},\n    {\"no-local\",\n     0,\n     \"When no-spawn is enabled, don't try to handle request\"\n     \" in client mode if service is unavailable\",\n     OPT_NONE,\n     &flags.no_local,\n     NULL,\n     NOT_DAEMON},\n    // test-state-dir is for testing only and should not be used in production:\n    // instead, use the compile-time WATCHMAN_STATE_DIR option\n    {\"test-state-dir\",\n     0,\n     NULL,\n     REQ_STRING,\n     &flags.test_state_dir,\n     \"DIR\",\n     NOT_DAEMON},\n    {0, 0, 0, OPT_NONE, 0, 0, 0},\n};\n} // namespace\n\nvoid print_command_list_for_help(FILE* where) {\n  auto defs = CommandDefinition::getAll();\n  std::sort(\n      defs.begin(),\n      defs.end(),\n      [](const CommandDefinition* A, const CommandDefinition* B) {\n        return A->name < B->name;\n      });\n\n  fprintf(where, \"\\n\\nAvailable commands:\\n\\n\");\n  for (auto& def : defs) {\n    fmt::print(where, \"      {}\\n\", def->name);\n  }\n}\n\n/* One does not simply use getopt_long() */\n\n[[noreturn]] void usage(const OptDesc* opts_2, FILE* where) {\n  int i;\n  size_t len;\n  size_t longest = 0;\n  const char* label;\n\n  fprintf(where, \"Usage: watchman [opts_2] command\\n\");\n\n  /* measure up option names so we can format nicely */\n  for (i = 0; opts_2[i].optname; i++) {\n    label = opts_2[i].arglabel ? opts_2[i].arglabel : \"ARG\";\n\n    len = strlen(opts_2[i].optname);\n    switch (opts_2[i].argtype) {\n      case REQ_STRING:\n        len += strlen(label) + strlen(\"=\");\n        break;\n      default:;\n    }\n\n    if (opts_2[i].shortopt) {\n      len += strlen(\"-X, \");\n    }\n\n    if (len > longest) {\n      longest = len;\n    }\n  }\n\n  /* space between option definition and help text */\n  longest += 3;\n\n  for (i = 0; opts_2[i].optname; i++) {\n    char buf[80];\n\n    if (!opts_2[i].helptext) {\n      // This is a signal that this option shouldn't be printed out.\n      continue;\n    }\n\n    label = opts_2[i].arglabel ? opts_2[i].arglabel : \"ARG\";\n\n    fprintf(where, \"\\n \");\n    if (opts_2[i].shortopt) {\n      fprintf(where, \"-%c, \", opts_2[i].shortopt);\n    } else {\n      fprintf(where, \"    \");\n    }\n    switch (opts_2[i].argtype) {\n      case REQ_STRING:\n        snprintf(buf, sizeof(buf), \"--%s=%s\", opts_2[i].optname, label);\n        break;\n      default:\n        snprintf(buf, sizeof(buf), \"--%s\", opts_2[i].optname);\n        break;\n    }\n\n    fprintf(where, \"%-*s \", (unsigned int)longest, buf);\n\n    fprintf(where, \"%s\", opts_2[i].helptext);\n    fprintf(where, \"\\n\");\n  }\n\n  print_command_list_for_help(where);\n\n  fprintf(\n      where,\n      \"\\n\"\n      \"See https://github.com/facebook/watchman#watchman for more help\\n\"\n      \"\\n\"\n      \"Watchman, by Wez Furlong.\\n\"\n      \"Copyright (c) Meta Platforms, Inc.\\n\");\n\n  exit(1);\n}\n\nstd::vector<std::string>\nw_getopt(const OptDesc* opts_2, int* argcp, char*** argvp) {\n  int num_opts, i;\n  char* nextshort;\n  int argc = *argcp;\n  char** argv = *argvp;\n  int long_pos = -1;\n  int res;\n\n  /* first build up the getopt_long bits that we need */\n  for (num_opts = 0; opts_2[num_opts].optname; num_opts++) {\n    ;\n  }\n\n  /* to hold the args we pass to the daemon */\n  std::vector<std::string> daemon_argv;\n\n  /* something to hold the long options */\n  auto long_opts = (option*)calloc(num_opts + 1, sizeof(struct option));\n  if (!long_opts) {\n    log(FATAL, \"calloc struct option\\n\");\n  }\n\n  /* and the short options */\n  auto shortopts = (char*)malloc((1 + num_opts) * 2);\n  if (!shortopts) {\n    log(FATAL, \"malloc shortopts\\n\");\n  }\n  nextshort = shortopts;\n  nextshort[0] = ':';\n  nextshort++;\n\n  /* now transfer information into the space we made */\n  for (i = 0; i < num_opts; i++) {\n    long_opts[i].name = (char*)opts_2[i].optname;\n    long_opts[i].val = opts_2[i].shortopt;\n    switch (opts_2[i].argtype) {\n      case OPT_NONE:\n        long_opts[i].has_arg = no_argument;\n        break;\n      case REQ_STRING:\n      case REQ_INT:\n        long_opts[i].has_arg = required_argument;\n        break;\n    }\n\n    if (opts_2[i].shortopt) {\n      nextshort[0] = (char)opts_2[i].shortopt;\n      nextshort++;\n\n      if (long_opts[i].has_arg != no_argument) {\n        nextshort[0] = ':';\n        nextshort++;\n      }\n    }\n  }\n\n  nextshort[0] = 0;\n\n  while ((res = getopt_long(argc, argv, shortopts, long_opts, &long_pos)) !=\n         -1) {\n    const OptDesc* o;\n\n    switch (res) {\n      case ':':\n        /* missing option argument.\n         * Check to see if it was actually optional */\n        for (long_pos = 0; long_pos < num_opts; long_pos++) {\n          if (opts_2[long_pos].shortopt == optopt) {\n            if (IS_REQUIRED(opts_2[long_pos].argtype)) {\n              fprintf(\n                  stderr,\n                  \"--%s (-%c) requires an argument\",\n                  opts_2[long_pos].optname,\n                  opts_2[long_pos].shortopt);\n              return daemon_argv;\n            }\n          }\n        }\n        break;\n\n      case '?':\n        /* unknown option */\n        fprintf(stderr, \"Unknown or invalid option! %s\\n\", argv[optind - 1]);\n        usage(opts_2, stderr);\n        return daemon_argv;\n\n      default:\n        if (res == 0) {\n          /* we got a long option */\n          o = &opts_2[long_pos];\n        } else {\n          /* map short option to the real thing */\n          o = NULL;\n          for (long_pos = 0; long_pos < num_opts; long_pos++) {\n            if (opts_2[long_pos].shortopt == res) {\n              o = &opts_2[long_pos];\n              break;\n            }\n          }\n        }\n\n        if (o->is_daemon) {\n          daemon_argv.push_back(\n              fmt::format(\"--{}={}\", o->optname, optarg ? optarg : \"\"));\n        }\n\n        /* store the argument if we found one */\n        if (o->argtype != OPT_NONE && o->val && optarg) {\n          switch (o->argtype) {\n            case REQ_INT: {\n              auto ival = atoi(optarg);\n              *(int*)o->val = ival;\n              break;\n            }\n            case REQ_STRING: {\n              auto sval = typed_string_to_json(optarg, W_STRING_UNICODE);\n              *(std::string*)o->val = optarg;\n              break;\n            }\n            case OPT_NONE:;\n          }\n        }\n        if (o->argtype == OPT_NONE && o->val) {\n          auto bval = json_true();\n          *(int*)o->val = 1;\n        }\n    }\n\n    long_pos = -1;\n  }\n\n  free(long_opts);\n  free(shortopts);\n\n  *argcp = argc - optind;\n  *argvp = argv + optind;\n  return daemon_argv;\n}\n\nstd::vector<std::string> parseOptions(int* argcp, char*** argvp) {\n  auto daemon_argv = w_getopt(opts, argcp, argvp);\n  if (flags.show_help) {\n    usage(opts, stdout);\n  }\n  if (flags.show_version) {\n    fmt::print(\"{}\\n\", PACKAGE_VERSION);\n    exit(0);\n  }\n  return daemon_argv;\n}\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/Options.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdio.h>\n#include <string>\n#include <vector>\n\nnamespace watchman {\n\nstruct Flags {\n  int show_help = 0;\n#ifndef _WIN32\n  int inetd_style = 0;\n#endif\n  int no_site_spawner = 0;\n  int show_version = 0;\n  std::string named_pipe_path;\n  std::string unix_sock_name;\n  std::string pid_file;\n  int persistent = 0;\n  int dont_save_state = 0;\n  std::string watchman_state_file;\n  int json_input_arg = 0;\n  std::string output_encoding;\n  std::string server_encoding;\n  int foreground = 0;\n  int yes_pretty = 0;\n  int no_pretty = 0;\n  int no_spawn = 0;\n  int no_local = 0;\n  std::string test_state_dir;\n};\n\nextern Flags flags;\n\nenum ArgType {\n  OPT_NONE,\n  REQ_STRING,\n  REQ_INT,\n};\n\nstruct OptDesc {\n  /* name of long option: --optname */\n  const char* optname;\n  /* if non-zero, short option character */\n  int shortopt;\n  /* help text shown in the usage information */\n  const char* helptext;\n  /* whether we accept an argument */\n  ArgType argtype;\n  /* if an argument was provided, *val will be set to\n   * point to the option value.\n   * Because we only update the option if one was provided\n   * by the user, you can safely pre-initialize the val\n   * pointer to your choice of default.\n   * */\n  void* val;\n\n  /* if argtype != OPT_NONE, this is the label used to\n   * refer to the argument in the help text.  If left\n   * blank, we'll use the string \"ARG\" as a generic\n   * alternative */\n  const char* arglabel;\n\n  // Whether this option should be passed to the child\n  // when spawning the daemon\n  int is_daemon;\n#define IS_DAEMON 1\n#define NOT_DAEMON 0\n};\n\n/**\n * Populates the globals in `flags`.\n *\n * Returns daemon-specific arguments.\n */\nstd::vector<std::string> parseOptions(int* argcp, char*** argvp);\n\n// The following are largely for internal use.\n\nbool w_getopt(OptDesc* opts, int* argcp, char*** argvp, char*** daemon_argv);\n[[noreturn]] void usage(struct watchman_getopt* opts, FILE* where);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/PDU.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/PDU.h\"\n#include <folly/Range.h>\n#include <folly/String.h>\n#include \"watchman/Constants.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/bser.h\"\n#include \"watchman/portability/WinError.h\"\n#include \"watchman/watchman_stream.h\"\n\nnamespace watchman {\n\nPduBuffer::PduBuffer()\n    : buf((char*)malloc(WATCHMAN_IO_BUF_SIZE)), allocd(WATCHMAN_IO_BUF_SIZE) {\n  if (!buf) {\n    throw std::bad_alloc();\n  }\n}\n\nPduBuffer::~PduBuffer() {\n  free(buf);\n}\n\nvoid PduBuffer::clear() {\n  wpos = 0;\n  rpos = 0;\n}\n\n// Shunt down, return available size\nuint32_t PduBuffer::shuntDown() {\n  if (rpos && rpos == wpos) {\n    rpos = 0;\n    wpos = 0;\n  }\n  if (rpos && rpos < wpos) {\n    memmove(buf, buf + rpos, wpos - rpos);\n    wpos -= rpos;\n    rpos = 0;\n  }\n  return allocd - wpos;\n}\n\nbool PduBuffer::fillBuffer(watchman_stream* stm) {\n  uint32_t avail = shuntDown();\n\n  // Get some more space if we need it\n  if (avail == 0) {\n    char* newBuf = (char*)realloc(buf, allocd * 2);\n    if (!newBuf) {\n      return false;\n    }\n\n    buf = newBuf;\n    allocd *= 2;\n\n    avail = allocd - wpos;\n  }\n\n  errno = 0;\n  int r = stm->read(buf + wpos, avail);\n  if (r <= 0) {\n    return false;\n  }\n\n  wpos += r;\n\n  return true;\n}\n\ninline PduType PduBuffer::detectPdu() {\n  if (wpos - rpos < 2) {\n    return need_data;\n  }\n  if (memcmp(buf + rpos, BSER_MAGIC, 2) == 0) {\n    return is_bser;\n  }\n  if (memcmp(buf + rpos, BSER_V2_MAGIC, 2) == 0) {\n    return is_bser_v2;\n  }\n  return is_json_compact;\n}\n\nstd::optional<json_ref> PduBuffer::readJsonPrettyPdu(\n    watchman_stream* stm,\n    json_error_t* jerr) {\n  // Assume newline is at the end of what we have\n  char* nl = buf + wpos;\n  int r = (int)(nl - (buf + rpos));\n  std::optional<json_ref> res = json_loadb(buf + rpos, r, 0, jerr);\n  while (!res) {\n    // Maybe we can fill more data into the buffer and retry?\n    if (!fillBuffer(stm)) {\n      // No, then error is terminal\n      return std::nullopt;\n    }\n    // Recompute end of buffer\n    nl = buf + wpos;\n    r = (int)(nl - (buf + rpos));\n    // And try parsing this\n    res = json_loadb(buf + rpos, r, 0, jerr);\n  }\n\n  // update read pos to look beyond this point\n  rpos += r + 1;\n\n  return res;\n}\n\nstd::optional<json_ref> PduBuffer::readJsonPdu(\n    watchman_stream* stm,\n    json_error_t* jerr) {\n  /* look for a newline; that indicates the end of\n   * a json packet */\n  auto nl = (char*)memchr(buf + rpos, '\\n', wpos - rpos);\n\n  // If we don't have a newline, we need to fill the\n  // buffer\n  while (!nl) {\n    if (!fillBuffer(stm)) {\n      if (errno == 0 && stm == w_stm_stdin()) {\n        // Ugly-ish hack to support the -j CLI option.  This allows\n        // us to consume a JSON input that doesn't end with a newline.\n        // We only allow this on EOF when reading from stdin\n        nl = buf + wpos;\n        break;\n      }\n      return std::nullopt;\n    }\n    nl = (char*)memchr(buf + rpos, '\\n', wpos - rpos);\n  }\n\n  // buflen\n  int r = (int)(nl - (buf + rpos));\n  auto res = json_loadb(buf + rpos, r, 0, jerr);\n\n  // update read pos to look beyond this point\n  rpos += r + 1;\n\n  return res;\n}\n\nbool PduBuffer::decodePduInfo(\n    watchman_stream* stm,\n    uint32_t bser_version,\n    json_int_t* len,\n    json_int_t* bser_capabilities,\n    json_error_t* jerr) {\n  if (bser_version == 2) {\n    uint32_t capabilities;\n    while (wpos - rpos < sizeof(capabilities)) {\n      if (!fillBuffer(stm)) {\n        snprintf(jerr->text, sizeof(jerr->text), \"unable to fill buffer\");\n        return false;\n      }\n    }\n    // json_int_t is architecture-dependent, so go through the uint32_t for\n    // safety.\n    memcpy(&capabilities, buf + rpos, sizeof(capabilities));\n    *bser_capabilities = capabilities;\n    rpos += sizeof(capabilities);\n  }\n\n  for (;;) {\n    size_t needed;\n    std::optional<json_int_t> pdu_length =\n        bunser_int(buf + rpos, wpos - rpos, &needed);\n    if (pdu_length) {\n      *len = *pdu_length;\n      rpos += needed;\n      return true;\n    }\n\n    if (needed == kDecodeIntFailed) {\n      snprintf(jerr->text, sizeof(jerr->text), \"failed to read PDU size\");\n      return false;\n    }\n    if (!fillBuffer(stm)) {\n      snprintf(jerr->text, sizeof(jerr->text), \"unable to fill buffer\");\n      return false;\n    }\n  }\n\n  return true;\n}\n\nstd::optional<json_ref> PduBuffer::readBserPdu(\n    watchman_stream* stm,\n    uint32_t bser_version,\n    json_error_t* jerr) {\n  json_int_t val;\n  json_int_t bser_capabilities;\n  uint32_t ideal;\n  int r;\n\n  rpos += 2;\n\n  // We don't handle EAGAIN cleanly in here\n  stm->setNonBlock(false);\n  if (!decodePduInfo(stm, bser_version, &val, &bser_capabilities, jerr)) {\n    return std::nullopt;\n  }\n\n  // val tells us exactly how much storage we need for this PDU\n  if (val > allocd - wpos) {\n    ideal = allocd;\n    while ((ideal - wpos) < (uint32_t)val) {\n      ideal *= 2;\n    }\n    if (ideal > allocd) {\n      auto newBuf = (char*)realloc(buf, ideal);\n\n      if (!newBuf) {\n        snprintf(\n            jerr->text,\n            sizeof(jerr->text),\n            \"out of memory while allocating %\" PRIu32 \" bytes\",\n            ideal);\n        return std::nullopt;\n      }\n\n      buf = newBuf;\n      allocd = ideal;\n    }\n  }\n\n  // We have enough room for the whole thing, let's read it in\n  while ((wpos - rpos) < val) {\n    r = stm->read(buf + wpos, allocd - wpos);\n    if (r <= 0) {\n      jerr->position = wpos - rpos;\n      snprintf(\n          jerr->text,\n          sizeof(jerr->text),\n          \"error reading %\" PRIu32 \" bytes val=%\" PRIu64 \" wpos=%\" PRIu32\n          \" rpos=%\" PRIu32 \" for PDU: %s\",\n          uint32_t(allocd - wpos),\n          int64_t(val),\n          wpos,\n          rpos,\n          folly::errnoStr(errno).c_str());\n      return std::nullopt;\n    }\n    wpos += r;\n  }\n\n  std::optional<json_ref> obj;\n  try {\n    obj = bunser(buf + rpos, buf + wpos);\n  } catch (const BserParseError& e) {\n    // Deserialization failed. Log the message that failed to deserialize to\n    // stderr.\n    logf(\n        ERR,\n        \"decoding BSER failed. The first KB of the hex representation of \"\n        \"message follows:\\n{:.1024}\\n\",\n        folly::hexlify(\n            folly::ByteRange{\n                reinterpret_cast<const unsigned char*>(buf + rpos),\n                wpos - rpos}));\n    *jerr = e.detail;\n  }\n\n  // Ensure that we move the read position to the wpos; we consumed it all\n  rpos = wpos;\n\n  stm->setNonBlock(true);\n  return obj;\n}\n\nbool PduBuffer::readAndDetectPdu(watchman_stream* stm, json_error_t* jerr) {\n  PduFormat detected_format;\n\n  shuntDown();\n  detected_format.type = detectPdu();\n  if (detected_format.type == need_data) {\n    if (!fillBuffer(stm)) {\n      if (errno != EAGAIN) {\n        snprintf(\n            jerr->text,\n            sizeof(jerr->text),\n            \"fill_buffer: %s\",\n            errno ? folly::errnoStr(errno).c_str() : \"EOF\");\n      }\n      return false;\n    }\n    detected_format.type = detectPdu();\n  }\n\n  constexpr size_t kCapSize = 4;\n  static_assert(kCapSize == sizeof(detected_format.capabilities));\n\n  if (detected_format.type == is_bser_v2) {\n    // read capabilities (since we haven't increased rpos, first two bytes are\n    // still the header)\n    while (wpos - rpos < 2 + kCapSize) {\n      if (!fillBuffer(stm)) {\n        if (errno != EAGAIN) {\n          snprintf(\n              jerr->text,\n              sizeof(jerr->text),\n              \"fillBuffer: %s\",\n              errno ? folly::errnoStr(errno).c_str() : \"EOF\");\n        }\n        return false;\n      }\n    }\n\n    // Copy the capabilities over. BSER is system-endian so this is safe.\n    memcpy(&detected_format.capabilities, buf + rpos + 2, kCapSize);\n  }\n\n  if (detected_format.type == is_json_compact && stm == w_stm_stdin()) {\n    // Minor hack for the `-j` option for reading pretty printed\n    // json from stdin\n    detected_format.type = is_json_pretty;\n  }\n\n  format = detected_format;\n  return true;\n}\n\nstatic bool output_bytes(const char* buf, int x) {\n  auto& stm = FileDescriptor::stdOut();\n\n  while (x > 0) {\n    auto res = stm.write(buf, x);\n    if (res.hasError()) {\n      errno = res.error().value();\n#ifdef _WIN32\n      // TODO: propagate Result<int, std::error_code> as return type\n      errno = map_win32_err(errno);\n#endif\n      return false;\n    }\n\n    auto len = res.value();\n\n    buf += len;\n    x -= len;\n  }\n  return true;\n}\n\nbool PduBuffer::streamUntilNewLine(watchman_stream* stm) {\n  bool is_done = false;\n\n  while (true) {\n    char* localBuf = buf + rpos;\n    auto nl = (char*)memchr(localBuf, '\\n', wpos - rpos);\n    int x;\n    if (nl) {\n      x = 1 + (int)(nl - localBuf);\n      is_done = true;\n    } else {\n      x = wpos - rpos;\n    }\n\n    if (!output_bytes(localBuf, x)) {\n      return false;\n    }\n    rpos += x;\n\n    if (is_done) {\n      break;\n    }\n\n    if (!fillBuffer(stm)) {\n      break;\n    }\n  }\n  return true;\n}\n\nbool PduBuffer::streamN(\n    watchman_stream* stm,\n    json_int_t len,\n    json_error_t* jerr) {\n  if (!output_bytes(buf, rpos)) {\n    snprintf(\n        jerr->text,\n        sizeof(jerr->text),\n        \"failed output headers bytes %d: %s\\n\",\n        rpos,\n        folly::errnoStr(errno).c_str());\n    return false;\n  }\n  while (len > 0) {\n    uint32_t avail = wpos - rpos;\n\n    if (avail) {\n      if (!output_bytes(buf + rpos, avail)) {\n        snprintf(\n            jerr->text,\n            sizeof(jerr->text),\n            \"output_bytes: avail=%d, failed %s\\n\",\n            avail,\n            folly::errnoStr(errno).c_str());\n        return false;\n      }\n      rpos += avail;\n      len -= avail;\n\n      if (len == 0) {\n        return true;\n      }\n    }\n\n    avail = std::min((uint32_t)len, shuntDown());\n    int r = stm->read(buf + wpos, avail);\n\n    if (r <= 0) {\n      snprintf(\n          jerr->text,\n          sizeof(jerr->text),\n          \"read: len=%\" PRIi64 \" wanted %\" PRIu32 \" got %d %s\\n\",\n          (int64_t)len,\n          avail,\n          r,\n          folly::errnoStr(errno).c_str());\n      return false;\n    }\n    wpos += r;\n  }\n  return true;\n}\n\nbool PduBuffer::streamPdu(watchman_stream* stm, json_error_t* jerr) {\n  switch (format.type) {\n    case is_json_compact:\n    case is_json_pretty:\n      return streamUntilNewLine(stm);\n    case is_bser:\n    case is_bser_v2: {\n      uint32_t bser_version;\n      if (format.type == is_bser_v2) {\n        bser_version = 2;\n      } else {\n        bser_version = 1;\n      }\n      rpos += 2;\n      json_int_t bser_capabilities;\n      json_int_t len;\n      if (!decodePduInfo(stm, bser_version, &len, &bser_capabilities, jerr)) {\n        return false;\n      }\n      return streamN(stm, len, jerr);\n    }\n    default:\n      logf(FATAL, \"not streaming for pdu type {}\\n\", format.type);\n      return false;\n  }\n}\n\nstd::optional<json_ref> PduBuffer::decodePdu(\n    watchman_stream* stm,\n    json_error_t* jerr) {\n  switch (format.type) {\n    case is_json_compact:\n      return readJsonPdu(stm, jerr);\n    case is_json_pretty:\n      return readJsonPrettyPdu(stm, jerr);\n    case is_bser_v2:\n      return readBserPdu(stm, 2, jerr);\n    default: // bser v1\n      return readBserPdu(stm, 1, jerr);\n  }\n}\n\nstd::optional<json_ref> PduBuffer::decodeNext(\n    watchman_stream* stm,\n    json_error_t* jerr) {\n  *jerr = json_error_t();\n  if (!readAndDetectPdu(stm, jerr)) {\n    return std::nullopt;\n  }\n  return decodePdu(stm, jerr);\n}\n\nnamespace {\n\nstruct jbuffer_write_data {\n  watchman_stream* stm;\n  PduBuffer* jr;\n\n  bool flush() {\n    while (jr->wpos - jr->rpos) {\n      int x = stm->write(jr->buf + jr->rpos, jr->wpos - jr->rpos);\n\n      if (x <= 0) {\n        return false;\n      }\n\n      jr->rpos += x;\n    }\n\n    jr->clear();\n    return true;\n  }\n\n  static int write(const char* buffer, size_t size, void* ptr) {\n    auto data = (jbuffer_write_data*)ptr;\n    return data->write(buffer, size);\n  }\n\n  int write(const char* buffer, size_t size) {\n    while (size) {\n      // Accumulate in the buffer\n      int room = jr->allocd - jr->wpos;\n\n      // No room? send it over the wire\n      if (!room) {\n        if (!flush()) {\n          return -1;\n        }\n        room = jr->allocd - jr->wpos;\n      }\n\n      if ((int)size < room) {\n        room = (int)size;\n      }\n\n      // Stick it in the buffer\n      memcpy(jr->buf + jr->wpos, buffer, room);\n\n      buffer += room;\n      size -= room;\n      jr->wpos += room;\n    }\n\n    return 0;\n  }\n};\n\n} // namespace\n\nResultErrno<folly::Unit> PduBuffer::bserEncodeToStream(\n    uint32_t bser_version,\n    uint32_t bser_capabilities,\n    const json_ref& json,\n    watchman_stream* stm) {\n  jbuffer_write_data data = {stm, this};\n\n  int res = w_bser_write_pdu(\n      bser_version, bser_capabilities, jbuffer_write_data::write, json, &data);\n\n  if (res != 0) {\n    return errno;\n  }\n\n  if (!data.flush()) {\n    return errno;\n  }\n\n  return folly::unit;\n}\n\nResultErrno<folly::Unit> PduBuffer::jsonEncodeToStream(\n    const json_ref& json,\n    watchman_stream* stm,\n    int flags) {\n  jbuffer_write_data data = {stm, this};\n\n  int res = json_dump_callback(json, jbuffer_write_data::write, &data, flags);\n  if (res != 0) {\n    return errno;\n  }\n\n  if (data.write(\"\\n\", 1) != 0) {\n    return errno;\n  }\n\n  if (!data.flush()) {\n    return errno;\n  }\n\n  return folly::unit;\n}\n\nResultErrno<folly::Unit> PduBuffer::pduEncodeToStream(\n    PduFormat format_2,\n    const json_ref& json,\n    watchman_stream* stm) {\n  switch (format_2.type) {\n    case is_json_compact:\n      return jsonEncodeToStream(json, stm, JSON_COMPACT);\n    case is_json_pretty:\n      return jsonEncodeToStream(json, stm, JSON_INDENT(4));\n    case is_bser:\n      return bserEncodeToStream(1, format_2.capabilities, json, stm);\n    case is_bser_v2:\n      return bserEncodeToStream(2, format_2.capabilities, json, stm);\n    case need_data:\n    default:\n      return EINVAL;\n  }\n}\n\n/* vim:ts=2:sw=2:et:\n */\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/PDU.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdint.h>\n#include \"watchman/Result.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nnamespace watchman {\n\nclass Stream;\n\nenum PduType : uint32_t {\n  need_data,\n  is_json_compact,\n  is_json_pretty,\n  is_bser,\n  is_bser_v2\n};\n\n// Required for fmt 10\ninline uint32_t format_as(PduType type) {\n  return static_cast<uint32_t>(type);\n}\n\n/**\n * Specifies the wire encoding of a Watchman request or response.\n *\n * This could be made to fit in 8 bits, but it doesn't matter.\n */\nstruct PduFormat {\n  PduType type = need_data;\n  /// Capability bits only used for BSER v2, defined in bser.h\n  uint32_t capabilities = 0;\n};\n\nclass PduBuffer {\n public:\n  char* buf;\n  uint32_t allocd = 0;\n  uint32_t rpos = 0;\n  uint32_t wpos = 0;\n\n  /// The encoding format detected by decodeNext\n  PduFormat format;\n\n  PduBuffer();\n  PduBuffer(const PduBuffer&) = delete;\n  PduBuffer(PduBuffer&&) = delete;\n  PduBuffer& operator=(const PduBuffer&) = delete;\n  PduBuffer& operator=(const PduBuffer&&) = delete;\n  ~PduBuffer();\n\n  void clear();\n  ResultErrno<folly::Unit>\n  jsonEncodeToStream(const json_ref& json, Stream* stm, int flags);\n  ResultErrno<folly::Unit> bserEncodeToStream(\n      uint32_t bser_version,\n      uint32_t bser_capabilities,\n      const json_ref& json,\n      Stream* stm);\n\n  ResultErrno<folly::Unit>\n  pduEncodeToStream(PduFormat format, const json_ref& json, Stream* stm);\n\n  std::optional<json_ref> decodeNext(Stream* stm, json_error_t* jerr);\n\n  bool readAndDetectPdu(Stream* stm, json_error_t* jerr);\n  std::optional<json_ref> decodePdu(Stream* stm, json_error_t* jerr);\n  bool streamPdu(Stream* stm, json_error_t* jerr);\n\n private:\n  uint32_t shuntDown();\n  bool fillBuffer(Stream* stm);\n  PduType detectPdu();\n  std::optional<json_ref> readJsonPrettyPdu(Stream* stm, json_error_t* jerr);\n  std::optional<json_ref> readJsonPdu(Stream* stm, json_error_t* jerr);\n  std::optional<json_ref>\n  readBserPdu(Stream* stm, uint32_t bser_version, json_error_t* jerr);\n  bool decodePduInfo(\n      Stream* stm,\n      uint32_t bser_version,\n      json_int_t* len,\n      json_int_t* bser_capabilities,\n      json_error_t* jerr);\n  bool streamUntilNewLine(Stream* stm);\n  bool streamN(Stream* stm, json_int_t len, json_error_t* jerr);\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/PathUtils.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/PathUtils.h\"\n\n#include <fmt/core.h>\n#include <folly/Exception.h>\n#include <folly/String.h>\n#include <folly/portability/Fcntl.h>\n#include <folly/portability/Filesystem.h>\n#include <folly/portability/SysStat.h>\n\n#include \"watchman/GroupLookup.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/UserDir.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/XattrUtils.h\"\n#include \"watchman/fs/DirHandle.h\"\n#include \"watchman/watchman_string.h\"\n\n#ifndef _WIN32\n#include <folly/portability/Unistd.h>\n#include <sys/stat.h>\n#endif\n\nnamespace watchman {\n\nvoid verify_dir_ownership(const std::string& state_dir) {\n#ifndef _WIN32\n  // verify ownership\n  struct stat st{};\n  int dir_fd;\n  int ret = 0;\n  uid_t euid = geteuid();\n  // TODO: also allow a gid to be specified here\n  const char* sock_group_name = cfg_get_string(\"sock_group\", nullptr);\n  const char* secondary_sock_group =\n      cfg_get_string(\"secondary_sock_group\", nullptr);\n  // S_ISGID is set so that files inside this directory inherit the group\n  // name\n  mode_t dir_perms =\n      cfg_get_perms(\n          \"sock_access\", false /* write bits */, true /* execute bits */) |\n      S_ISGID;\n\n  auto dirp =\n      openDir(state_dir.c_str(), false /* don't need strict symlink rules */);\n\n  dir_fd = dirp->getFd();\n  if (dir_fd == -1) {\n    log(ERR, \"dirfd(\", state_dir, \"): \", folly::errnoStr(errno), \"\\n\");\n    goto bail;\n  }\n\n  if (fstat(dir_fd, &st) != 0) {\n    log(ERR, \"fstat(\", state_dir, \"): \", folly::errnoStr(errno), \"\\n\");\n    ret = 1;\n    goto bail;\n  }\n  if (euid != st.st_uid) {\n    log(ERR,\n        \"the owner of \",\n        state_dir,\n        \" is uid \",\n        st.st_uid,\n        \" and doesn't match your euid \",\n        euid,\n        \"\\n\");\n    ret = 1;\n    goto bail;\n  }\n  if (st.st_mode & 0022) {\n    log(ERR,\n        \"the permissions on \",\n        state_dir,\n        \" allow others to write to it. \"\n        \"Verify that you own the contents and then fix its \"\n        \"permissions by running `chmod 0700 '\",\n        state_dir,\n        \"'`\\n\");\n    ret = 1;\n    goto bail;\n  }\n\n  if (sock_group_name) {\n    const struct group* sock_group = w_get_group(sock_group_name);\n    if (!sock_group) {\n      ret = 1;\n      goto bail;\n    }\n\n    if (fchown(dir_fd, -1, sock_group->gr_gid) == -1) {\n      log(ERR,\n          \"setting up group '\",\n          sock_group_name,\n          \"' failed: \",\n          folly::errnoStr(errno),\n          \"\\n\");\n      ret = 1;\n      goto bail;\n    }\n  }\n\n#ifdef __linux__\n  // Allow setting an ACL on the state_dir, this method does not require the\n  // owner to be a member of the target group.\n  if (secondary_sock_group) {\n    // TODO: pass mode_t dir_perms (from earlier in this function) to\n    // setSecondaryGroupACL instead of using three booleans\n    if (!watchman::setSecondaryGroupACL(\n            state_dir.c_str(),\n            secondary_sock_group,\n            true /* read bits */,\n            false /* write bits */,\n            true /* execute bits */)) {\n      ret = 1;\n      goto bail;\n    }\n  }\n#else\n  (void)secondary_sock_group;\n#endif\n\n  // Depending on group and world accessibility, change permissions on the\n  // directory. We can't leave the directory open and set permissions on the\n  // socket because not all POSIX systems respect permissions on UNIX domain\n  // sockets, but all POSIX systems respect permissions on the containing\n  // directory.\n  logf(DBG, \"Setting permissions on state dir to {:o}\\n\", dir_perms);\n  if (fchmod(dir_fd, dir_perms) == -1) {\n    logf(\n        ERR,\n        \"fchmod({}, {:o}): {}\\n\",\n        state_dir,\n        dir_perms,\n        folly::errnoStr(errno));\n    ret = 1;\n    goto bail;\n  }\n\nbail:\n  if (ret) {\n    exit(ret);\n  }\n#else\n  (void)state_dir;\n#endif\n}\n\nvoid create_state_dir(const char* state_dir, std::error_code& ec) {\n  ec.clear();\n  // folly::fs::create_directories errors in the case where the state_dir is a\n  // symlink, so explicitly check for the existence first and gate the creation\n  // on this check.\n  auto exists = folly::fs::exists(state_dir, ec);\n  if (ec) {\n    return;\n  }\n\n  if (!exists) {\n    auto created = folly::fs::create_directories(state_dir, ec);\n\n    // If create_directories() failed, it will set ec, so just return\n    // so the caller can handle the error.\n    if (ec) {\n      return;\n    }\n\n    if (created) {\n#ifndef _WIN32\n      // Ignore the result here as it doesn't matter, we will check the actual\n      // permissions in verify_dir_ownership\n      chmod(state_dir, 0700);\n#endif\n    }\n  }\n\n  // Verify the permissions on both pre-existing and newly created directories\n  verify_dir_ownership(state_dir);\n}\n\nvoid create_log_dir(const char* log_dir, std::error_code& ec) {\n  ec.clear();\n  // Handle symlinks: check existence first, same pattern as create_state_dir\n  // (folly::fs::create_directories errors on symlinks)\n  auto exists = folly::fs::exists(log_dir, ec);\n  if (ec) {\n    return;\n  }\n\n  if (!exists) {\n    // Only create the leaf directory — the parent (log_dir config value)\n    // must already exist (e.g. set up by the container runtime or system).\n    // Using create_directory (not create_directories) so that a misconfigured\n    // log_dir path fails clearly instead of silently creating a deep tree.\n    folly::fs::create_directory(log_dir, ec);\n    if (ec) {\n      return;\n    }\n\n#ifndef _WIN32\n    chmod(log_dir, 0755);\n#endif\n  }\n}\n\nvoid compute_file_name(\n    std::string& str,\n    const std::string& user,\n    const char* suffix,\n    const char* what,\n    bool require_absolute) {\n  bool str_computed = false;\n  if (str.empty()) {\n    str_computed = true;\n    /* We'll put our various artifacts in a user specific dir\n     * within the state dir location */\n    auto state_dir = computeWatchmanStateDirectory(user);\n\n    std::error_code ec;\n    create_state_dir(state_dir.c_str(), ec);\n    if (ec) {\n      log(ERR,\n          \"while computing \",\n          what,\n          \": failed to create \",\n          state_dir,\n          \": \",\n          ec.message(),\n          \"\\n\");\n      exit(1);\n    }\n\n    str = fmt::format(\"{}/{}\", state_dir, suffix);\n  }\n#ifndef _WIN32\n  if (require_absolute && !w_string_piece(str).pathIsAbsolute()) {\n    log(FATAL,\n        what,\n        \" must be an absolute file path but \",\n        str,\n        \" was\",\n        str_computed ? \" computed.\" : \" provided.\",\n        \"\\n\");\n  }\n#else\n  (void)require_absolute;\n#endif\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/PathUtils.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <string>\n#include <system_error>\n\nnamespace watchman {\n\n/**\n * Compute file name for watchman artifacts. If a directory is created as a side\n * effect of this function, the ownership of the directory is verified.\n *\n * @param str The directory for the target filename. If this string is empty,\n * the state directory will be computed and populated. Otherwise, the only logic\n * this function performs is checking if the path is absolute (if requested)\n * @param user The username for the state directory (only used if str is empty)\n * @param suffix The suffix to append to the state directory path (only used if\n * str is empty)\n * @param what Description of what file being computed (for error messages)\n * @param require_absolute Whether the path must be absolute (default: true)\n */\nvoid compute_file_name(\n    std::string& str,\n    const std::string& user,\n    const char* suffix,\n    const char* what,\n    bool require_absolute = true);\n\n/**\n * Creates the given log directory. The parent directory must already exist;\n * only the leaf directory is created. Unlike create_state_dir, this does not\n * verify ownership or apply socket-specific permissions, making it suitable\n * for log directories that may be pre-created by container runtimes.\n */\nvoid create_log_dir(const char* log_dir, std::error_code& ec);\n} // namespace watchman\n"
  },
  {
    "path": "watchman/PendingCollection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/PendingCollection.h\"\n#include <folly/Synchronized.h>\n#include \"watchman/Cookie.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/watchman_dir.h\"\n\nusing namespace watchman;\n\nnamespace watchman {\n\nconst PendingFlags::NameTable PendingFlags::table = {\n    {W_PENDING_CRAWL_ONLY, \"CRAWL_ONLY\"},\n    {W_PENDING_RECURSIVE, \"RECURSIVE\"},\n    {W_PENDING_NONRECURSIVE_SCAN, \"NONRECURSIVE_SCAN\"},\n    {W_PENDING_VIA_NOTIFY, \"VIA_NOTIFY\"},\n    {W_PENDING_IS_DESYNCED, \"IS_DESYNCED\"},\n};\n\nbool is_path_prefix(\n    const char* path,\n    size_t path_len,\n    const char* other,\n    size_t common_prefix) {\n  if (common_prefix > path_len) {\n    return false;\n  }\n\n  w_assert(\n      memcmp(path, other, common_prefix) == 0,\n      \"is_path_prefix: %.*s vs %.*s should have %d common_prefix chars\\n\",\n      (int)path_len,\n      path,\n      (int)common_prefix,\n      other,\n      (int)common_prefix);\n  (void)other;\n\n  if (common_prefix == path_len) {\n    return true;\n  }\n\n  return is_slash(path[common_prefix]);\n}\n\n} // namespace watchman\n\nvoid PendingChanges::clear() {\n  pending_.reset();\n  tree_.clear();\n  syncs_.clear();\n}\n\nvoid PendingChanges::add(\n    const w_string& path,\n    std::chrono::system_clock::time_point now,\n    PendingFlags flags) {\n  auto existing = tree_.search(path);\n  if (existing) {\n    /* Entry already exists: consolidate */\n    consolidateItem(existing->get(), flags);\n    /* all done */\n    return;\n  }\n\n  if (isObsoletedByContainingDir(path)) {\n    return;\n  }\n\n  // Try to allocate the new node before we prune any children.\n  auto p = std::make_shared<watchman_pending_fs>(path, now, flags);\n\n  maybePruneObsoletedChildren(path, flags);\n\n  logf(DBG, \"add_pending: {} {}\\n\", path, flags.format());\n\n  tree_.insert(path, p);\n  linkHead(std::move(p));\n}\n\nvoid PendingChanges::add(\n    watchman_dir* dir,\n    const char* name,\n    std::chrono::system_clock::time_point now,\n    PendingFlags flags) {\n  return add(dir->getFullPathToChild(name), now, flags);\n}\n\nvoid PendingChanges::startRefusingSyncs(std::string_view reason) {\n  refuseSyncs_ = true;\n  refuseSyncsReason_ = reason;\n}\n\nvoid PendingChanges::addSync(folly::Promise<folly::Unit> promise) {\n  if (refuseSyncs_) {\n    promise.setException(\n        std::runtime_error(\n            fmt::format(\n                \"Watch is shutting down because ... {}\", refuseSyncsReason_)));\n    return;\n  }\n  syncs_.push_back(std::move(promise));\n}\n\nvoid PendingChanges::append(\n    std::shared_ptr<watchman_pending_fs> chain,\n    std::vector<folly::Promise<folly::Unit>> syncs) {\n  auto p = std::move(chain);\n  while (p) {\n    auto target_p =\n        tree_.search((const uint8_t*)p->path.data(), p->path.size());\n    if (target_p) {\n      /* Entry already exists: consolidate */\n      consolidateItem(target_p->get(), p->flags);\n      p = std::move(p->next);\n      continue;\n    }\n\n    if (isObsoletedByContainingDir(p->path)) {\n      p = std::move(p->next);\n      continue;\n    }\n    maybePruneObsoletedChildren(p->path, p->flags);\n\n    auto next = std::move(p->next);\n    tree_.insert(p->path, p);\n    linkHead(std::move(p));\n\n    p = std::move(next);\n  }\n\n  syncs_.insert(\n      syncs_.end(),\n      std::make_move_iterator(syncs.begin()),\n      std::make_move_iterator(syncs.end()));\n}\n\nstd::shared_ptr<watchman_pending_fs> PendingChanges::stealItems() {\n  tree_.clear();\n  return std::move(pending_);\n}\n\nstd::vector<folly::Promise<folly::Unit>> PendingChanges::stealSyncs() {\n  std::vector<folly::Promise<folly::Unit>> syncs;\n  std::swap(syncs, syncs_);\n  return syncs;\n}\n\nbool PendingChanges::empty() const {\n  return 0 == tree_.size() && syncs_.empty();\n}\n\nuint32_t PendingChanges::getPendingItemCount() const {\n  return tree_.size();\n}\n\n// if there are any entries that are obsoleted by a recursive insert,\n// walk over them now and mark them as ignored.\nvoid PendingChanges::maybePruneObsoletedChildren(\n    w_string path,\n    PendingFlags flags) {\n  if ((flags & (W_PENDING_RECURSIVE | W_PENDING_CRAWL_ONLY)) ==\n      W_PENDING_RECURSIVE) {\n    uint32_t pruned = 0;\n\n    // Since deletion invalidates the iterator, we need to repeatedly\n    // call this to prune out the nodes.  It will return 0 once no\n    // matching prefixes are found and deleted.\n    // Deletion is a bit awkward in this radix tree implementation.\n    // We can't recursively delete a given prefix as a built-in operation\n    // and it is non-trivial to add that functionality right now.\n    // When we lop-off a portion of a tree that we're going to analyze\n    // recursively, we have to iterate each leaf and explicitly delete\n    // that leaf.\n    // Since deletion invalidates the iteration state we have to signal\n    // to stop iteration after each deletion and then retry the prefix\n    // deletion.\n    //\n    // We need to compare the prefix to make sure that we don't delete\n    // a sibling node by mistake (see commentary on the is_path_prefix\n    // function for more on that).\n\n    auto callback = [&](const w_string& key,\n                        std::shared_ptr<watchman_pending_fs>& p) -> int {\n      w_check(\n          p,\n          \"Pending changes should be removed from both the list and the tree.\");\n\n      if (!p->flags.contains(W_PENDING_CRAWL_ONLY) &&\n          key.size() > path.size() &&\n          is_path_prefix(\n              (const char*)key.data(), key.size(), path.data(), path.size()) &&\n          !isPossiblyACookie(p->path)) {\n        logf(\n            DBG,\n            \"delete_kids: removing ({}) {} from pending because it is \"\n            \"obsoleted by ({}) {}\\n\",\n            p->path.size(),\n            p->path,\n            path.size(),\n            path);\n\n        // Unlink the child from the pending index.\n        unlinkItem(p);\n\n        // Remove it from the art tree.\n        tree_.erase(key);\n\n        // Stop iteration because we just invalidated the iterator state\n        // by modifying the tree mid-iteration.\n        return 1;\n      }\n\n      return 0;\n    };\n\n    while (tree_.iterPrefix(\n        reinterpret_cast<const uint8_t*>(path.data()), path.size(), callback)) {\n      // OK; try again\n      ++pruned;\n    }\n\n    if (pruned) {\n      logf(\n          DBG,\n          \"maybePruneObsoletedChildren: pruned {} nodes under ({}) {}\\n\",\n          pruned,\n          path.size(),\n          path);\n    }\n  }\n}\n\nvoid PendingChanges::consolidateItem(\n    watchman_pending_fs* p,\n    PendingFlags flags) {\n  // Increase the strength of the pending item if either of these\n  // flags are set.\n  // We upgrade crawl-only as well as recursive; it indicates that\n  // we've recently just performed the stat and we want to avoid\n  // infinitely trying to stat-and-crawl\n  p->flags.set(\n      flags &\n      (W_PENDING_CRAWL_ONLY | W_PENDING_RECURSIVE |\n       W_PENDING_NONRECURSIVE_SCAN | W_PENDING_IS_DESYNCED));\n\n  maybePruneObsoletedChildren(p->path, p->flags);\n}\n\n// Check the tree to see if there is a path that is earlier/higher in the\n// filesystem than the input path; if there is, and it is recursive,\n// return true to indicate that there is no need to track this new path\n// due to the already scheduled higher level path.\nbool PendingChanges::isObsoletedByContainingDir(const w_string& path) {\n  auto leaf = tree_.longestMatch((const uint8_t*)path.data(), path.size());\n  if (!leaf) {\n    return false;\n  }\n  auto p = leaf->value;\n\n  if ((p->flags & (W_PENDING_RECURSIVE | W_PENDING_CRAWL_ONLY)) ==\n          W_PENDING_RECURSIVE &&\n      is_path_prefix(\n          path.data(),\n          path.size(),\n          (const char*)leaf->key.data(),\n          leaf->key.size())) {\n    if (isPossiblyACookie(path)) {\n      return false;\n    }\n\n    // Yes: the pre-existing entry higher up in the tree obsoletes this\n    // one that we would add now.\n    logf(DBG, \"is_obsoleted: SKIP {} is obsoleted by {}\\n\", path, p->path);\n    return true;\n  }\n  return false;\n}\n\n// Helper to doubly-link a pending item to the head of a collection.\nvoid PendingChanges::linkHead(std::shared_ptr<watchman_pending_fs>&& p) {\n  p->prev.reset();\n  p->next = pending_;\n  if (p->next) {\n    p->next->prev = p;\n  }\n  pending_ = std::move(p);\n}\n\n// Helper to un-doubly-link a pending item.\nvoid PendingChanges::unlinkItem(std::shared_ptr<watchman_pending_fs>& p) {\n  if (pending_ == p) {\n    pending_ = p->next;\n  }\n  auto prev = p->prev.lock();\n\n  if (prev) {\n    prev->next = p->next;\n  }\n\n  if (p->next) {\n    p->next->prev = prev;\n  }\n\n  p->next.reset();\n  p->prev.reset();\n}\n\nPendingCollectionBase::PendingCollectionBase(std::condition_variable& cond)\n    : cond_(cond) {}\n\nvoid PendingCollectionBase::ping() {\n  pinged_ = true;\n  cond_.notify_all();\n}\n\nbool PendingCollectionBase::checkAndResetPinged() {\n  if (pending_ || pinged_) {\n    pinged_ = false;\n    return true;\n  }\n  return false;\n}\n\nPendingCollection::PendingCollection()\n    : folly::Synchronized<PendingCollectionBase, std::mutex>{\n          std::in_place,\n          cond_} {}\n\nPendingCollection::LockedPtr PendingCollection::lockAndWait(\n    std::chrono::milliseconds timeoutms) {\n  auto lock = this->lock();\n\n  if (lock->checkAndResetPinged()) {\n    return lock;\n  }\n\n  if (timeoutms.count() == -1) {\n    cond_.wait(lock.as_lock());\n  } else {\n    cond_.wait_for(lock.as_lock(), timeoutms);\n  }\n\n  lock->checkAndResetPinged();\n  return lock;\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/PendingCollection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/Synchronized.h>\n#include <folly/futures/Promise.h>\n#include <chrono>\n#include <condition_variable>\n#include \"eden/common/utils/OptionSet.h\"\n#include \"watchman/thirdparty/libart/src/art.h\"\n#include \"watchman/watchman_string.h\"\n\nstruct watchman_dir;\n\nnamespace watchman {\n\nstruct PendingFlags : facebook::eden::OptionSet<PendingFlags, uint8_t> {\n  using OptionSet::OptionSet;\n  static const NameTable table;\n};\n\n/**\n * Set when this change requires a recursive scan of its children.\n *\n * If an entry is recursive, then the IO thread will stat its children too.\n *\n * PendingCollection uses this to prune unnecessary notifications: if a parent\n * entry is already flagged as requiring a recursive scan, then children can be\n * pruned.\n */\nconstexpr inline auto W_PENDING_RECURSIVE = PendingFlags::raw(1);\n\n/**\n * Set when this change requires a non-recursive scan of its children.\n *\n * Some watchers, notably FSEvents in its default mode, only report changes to\n * directories and expect Watchman to enumerate and stat their children.\n *\n * This flag indicates to the IO thread that it must do such a scan.\n */\nconstexpr inline auto W_PENDING_NONRECURSIVE_SCAN = PendingFlags::raw(2);\n\n/**\n * This change event came from a watcher.\n *\n * Crawler uses this to distinguish between crawler-originated events and\n * watcher-originated events.\n *\n * iothread uses this flag to detect whether cookie events were discovered via a\n * crawl or watcher.\n */\nconstexpr inline auto W_PENDING_VIA_NOTIFY = PendingFlags::raw(4);\n\n/**\n * Set by the IO thread when it adds new pending paths while crawling.\n *\n * Crawl-only paths do not cause PendingCollection pruning. Also affects cookie\n * discovery.\n *\n * Sort of exclusive with VIA_NOTIFY...\n */\nconstexpr inline auto W_PENDING_CRAWL_ONLY = PendingFlags::raw(8);\n\n/**\n * Set when the watcher is desynced and may have missed filesystem events. The\n * watcher is no longer guaranteed to report every file or directory, which\n * could prevent cookies from being observed. W_PENDING_RECURSIVE flag should\n * also be set alongside it to force an recrawl of the passed in directory.\n * Cookies will not be considered when this flag is set.\n */\nconstexpr inline auto W_PENDING_IS_DESYNCED = PendingFlags::raw(16);\n\n/**\n * Set when the processPath() is triggered by recursive parallel walk.\n * processPath() -> statPath() should avoid appending to PendingChanges.\n * Missing pre_stat can be treated as deletion without extra stat().\n */\nconstexpr inline auto W_PENDING_VIA_PWALK = PendingFlags::raw(32);\n\n/**\n * Represents a change notification from the Watcher.\n */\nstruct PendingChange {\n  w_string path;\n  std::chrono::system_clock::time_point now;\n  PendingFlags flags;\n};\n\nstruct watchman_pending_fs : watchman::PendingChange {\n  // We own the next entry and will destroy that chain when we\n  // are destroyed.\n  std::shared_ptr<watchman_pending_fs> next;\n\n  watchman_pending_fs(\n      w_string path,\n      std::chrono::system_clock::time_point now,\n      PendingFlags flags)\n      : PendingChange{std::move(path), now, flags} {}\n\n private:\n  // Only used for unlinking during pruning.\n  std::weak_ptr<watchman_pending_fs> prev;\n  friend class PendingChanges;\n};\n\n/**\n * Holds a linked list of watchman_pending_fs instances and a trie that\n * efficiently prunes redundant changes.\n *\n * PendingChanges is only intended to be accessed by one thread at a time.\n * If you would like to use a single pending changes object accross\n * threads, you should use PendingCollection which puts a lock around\n * accesses to the unerlying PendingChanges object. If you only intend to\n * use the object on one thread, then you can use PendingChanges directly.\n */\nclass PendingChanges {\n public:\n  PendingChanges() = default;\n  PendingChanges(PendingChanges&&) = delete;\n  PendingChanges& operator=(PendingChanges&&) = delete;\n\n  /**\n   * Erase all elements from the collection.\n   *\n   * Any pending syncs will be fulfilled with a BrokenPromise error.\n   */\n  void clear();\n\n  /**\n   * Add a pending entry.  Will consolidate an existing entry with the same\n   * name. The caller must own the collection lock.\n   */\n  void add(\n      const w_string& path,\n      std::chrono::system_clock::time_point now,\n      PendingFlags flags);\n  void add(\n      watchman_dir* dir,\n      const char* name,\n      std::chrono::system_clock::time_point now,\n      PendingFlags flags);\n\n  /**\n   * Add a sync request. The consumer of this sync should fulfill it after\n   * processing all of the pending items.\n   */\n  void addSync(folly::Promise<folly::Unit> promise);\n\n  /**\n   * Merge the full contents of `chain` into this collection. They are usually\n   * from a stealItems() call.\n   *\n   * `chain` is consumed -- the links are broken.\n   */\n  void append(\n      std::shared_ptr<watchman_pending_fs> chain,\n      std::vector<folly::Promise<folly::Unit>> syncs);\n\n  /* Moves the head of the chain of items to the caller.\n   * The tree is cleared and the caller owns the whole chain */\n  std::shared_ptr<watchman_pending_fs> stealItems();\n\n  std::vector<folly::Promise<folly::Unit>> stealSyncs();\n\n  /**\n   * Returns true if there are no items or syncs.\n   */\n  bool empty() const;\n\n  /**\n   * Returns the number of unique pending items in the collection. Does not\n   * include sync requests.\n   */\n  uint32_t getPendingItemCount() const;\n\n  void startRefusingSyncs(std::string_view reason);\n\n protected:\n  art_tree<std::shared_ptr<watchman_pending_fs>, w_string> tree_;\n  std::shared_ptr<watchman_pending_fs> pending_;\n  std::vector<folly::Promise<folly::Unit>> syncs_;\n  bool refuseSyncs_{false}; // true if we should refuse to add any more syncs\n  std::string refuseSyncsReason_{};\n\n private:\n  void maybePruneObsoletedChildren(w_string path, PendingFlags flags);\n  inline void consolidateItem(watchman_pending_fs* p, PendingFlags flags);\n  bool isObsoletedByContainingDir(const w_string& path);\n  inline void linkHead(std::shared_ptr<watchman_pending_fs>&& p);\n  inline void unlinkItem(std::shared_ptr<watchman_pending_fs>& p);\n};\n\nclass PendingCollectionBase : public PendingChanges {\n public:\n  explicit PendingCollectionBase(std::condition_variable& cond);\n  PendingCollectionBase(PendingCollectionBase&&) = delete;\n  PendingCollectionBase& operator=(PendingCollectionBase&&) = delete;\n\n  /**\n   * Sets the pinged flag to true and wakes any waiting threads.\n   */\n  void ping();\n\n  /**\n   * Sets the pinged flag to false.\n   * Returns true if previously pinged or PendingChanges is non-empty.\n   */\n  bool checkAndResetPinged();\n\n private:\n  std::condition_variable& cond_;\n  bool pinged_{false};\n};\n\nclass PendingCollection\n    : public folly::Synchronized<PendingCollectionBase, std::mutex> {\n public:\n  PendingCollection();\n\n  /**\n   * If previously pinged or non-empty, returns a locked PendingCollectionBase.\n   * Otherwise, waits up to timeoutms (or indefinitely if -1 ms) for a ping().\n   *\n   * The internal pinged state is always false after this call.\n   */\n  LockedPtr lockAndWait(std::chrono::milliseconds timeoutms);\n\n private:\n  // Notified on ping().\n  std::condition_variable cond_;\n};\n\n// Since the tree has no internal knowledge about path structures, when we\n// search for \"foo/bar\" it may return a prefix match for an existing node\n// with the key \"foo/bard\".  We use this function to test whether the string\n// exactly matches the input (\"foo/bar\") or whether it has a slash as the next\n// character after the common prefix (\"foo/bar/\" as a prefix).\nbool is_path_prefix(\n    const char* path,\n    size_t path_len,\n    const char* other,\n    size_t common_prefix);\n\ninline bool is_path_prefix(const w_string& key, const w_string& root) {\n  return is_path_prefix(key.data(), key.size(), root.data(), root.size());\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/PerfSample.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/PerfSample.h\"\n\n#include <folly/Synchronized.h>\n#include <condition_variable>\n#include <thread>\n\n#include \"watchman/ChildProcess.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/Options.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/sockname.h\"\n#include \"watchman/watchman_system.h\"\n#include \"watchman/watchman_time.h\"\n\nusing namespace watchman;\n\nnamespace watchman {\nnamespace {\nclass PerfLogThread {\n  struct State {\n    explicit State(bool start) : running(start) {}\n\n    bool running;\n    std::vector<json_ref> samples;\n  };\n\n  folly::Synchronized<State, std::mutex> state_;\n  std::thread thread_;\n  std::condition_variable cond_;\n\n  void loop() noexcept;\n\n public:\n  explicit PerfLogThread(bool start) : state_(std::in_place, start) {\n    if (start) {\n      thread_ = std::thread([this] { loop(); });\n    }\n  }\n\n  ~PerfLogThread() {\n    stop();\n  }\n\n  void stop() {\n    {\n      auto state = state_.lock();\n      if (!state->running) {\n        return;\n      }\n      state->running = false;\n    }\n    cond_.notify_all();\n    thread_.join();\n  }\n\n  void addSample(json_ref&& sample) {\n    auto wlock = state_.lock();\n    wlock->samples.push_back(std::move(sample));\n    cond_.notify_one();\n  }\n};\n\nPerfLogThread& getPerfThread(bool start = true) {\n  // Get the perf logging thread, starting it on the first call.\n  // Meyer's singleton!\n  static PerfLogThread perfThread(start);\n  return perfThread;\n}\n} // namespace\n\nvoid processSamples(\n    size_t argv_limit,\n    size_t maximum_batch_size,\n    std::vector<json_ref>& samples,\n    std::function<void(std::vector<std::string>)> command_line,\n    std::function<void(std::string)> single_large_sample) {\n  while (samples.size() > 0) {\n    std::string encoded_sample = json_dumps(samples.front(), 0);\n    samples.erase(samples.begin()); // O(N^2)\n\n    if (encoded_sample.size() > argv_limit) {\n      single_large_sample(std::move(encoded_sample));\n    } else {\n      std::vector<std::string> args;\n      args.push_back(std::move(encoded_sample));\n      size_t arg_size = encoded_sample.size() + 1;\n\n      while (args.size() < maximum_batch_size && samples.size() > 0) {\n        encoded_sample = json_dumps(samples[0], 0);\n        if (arg_size + encoded_sample.size() + 1 > argv_limit) {\n          break;\n        }\n        samples.erase(samples.begin()); // O(N^2)\n        arg_size += encoded_sample.size() + 1;\n        args.push_back(std::move(encoded_sample));\n      }\n      command_line(std::move(args));\n    }\n  }\n}\n\nPerfSample::PerfSample(const char* description) : description(description) {\n  gettimeofday(&time_begin, nullptr);\n#ifdef HAVE_SYS_RESOURCE_H\n  getrusage(RUSAGE_SELF, &usage_begin);\n#endif\n}\n\ndouble PerfSample::get_perf_sampling_thresh() const {\n  static double perf_sampling_thresh{0};\n  if (perf_sampling_thresh == 0) {\n    auto thresh = cfg_get_json(\"perf_sampling_thresh\");\n    if (thresh) {\n      if (thresh->isNumber()) {\n        perf_sampling_thresh = json_number_value(*thresh);\n      } else {\n        perf_sampling_thresh =\n            json_number_value(thresh->get_default(description, json_real(0.0)));\n      }\n    }\n  }\n  return perf_sampling_thresh;\n}\n\nbool PerfSample::finish() {\n  gettimeofday(&time_end, nullptr);\n  w_timeval_sub(time_end, time_begin, &duration);\n#ifdef HAVE_SYS_RESOURCE_H\n  getrusage(RUSAGE_SELF, &usage_end);\n\n  // Compute the delta for the usage\n  w_timeval_sub(usage_end.ru_utime, usage_begin.ru_utime, &usage.ru_utime);\n  w_timeval_sub(usage_end.ru_stime, usage_begin.ru_stime, &usage.ru_stime);\n\n#define DIFFU(n) usage.n = usage_end.n - usage_begin.n\n  DIFFU(ru_maxrss);\n  DIFFU(ru_ixrss);\n  DIFFU(ru_idrss);\n  DIFFU(ru_minflt);\n  DIFFU(ru_majflt);\n  DIFFU(ru_nswap);\n  DIFFU(ru_inblock);\n  DIFFU(ru_oublock);\n  DIFFU(ru_msgsnd);\n  DIFFU(ru_msgrcv);\n  DIFFU(ru_nsignals);\n  DIFFU(ru_nvcsw);\n  DIFFU(ru_nivcsw);\n#undef DIFFU\n#endif\n\n  if (!will_log) {\n    if (wall_time_elapsed_thresh == 0) {\n      wall_time_elapsed_thresh = get_perf_sampling_thresh();\n    }\n\n    if (wall_time_elapsed_thresh > 0 &&\n        w_timeval_diff(time_begin, time_end) > wall_time_elapsed_thresh) {\n      will_log = true;\n    }\n  }\n\n  return will_log;\n}\n\nvoid PerfSample::add_root_metadata(const RootMetadata& root_metadata) {\n  auto meta = json_object(\n      {{\"path\", w_string_to_json(root_metadata.root_path)},\n       {\"recrawl_count\", json_integer(root_metadata.recrawl_count)},\n       {\"case_sensitive\", json_boolean(root_metadata.case_sensitive)}});\n  if (!root_metadata.watcher.empty()) {\n    meta.set({{\"watcher\", w_string_to_json(root_metadata.watcher)}});\n  }\n  add_meta(\"root\", std::move(meta));\n}\n\nvoid PerfSample::add_meta(const char* key, json_ref&& val) {\n  meta_data.set(key, std::move(val));\n}\n\nvoid PerfSample::set_wall_time_thresh(double thresh) {\n  wall_time_elapsed_thresh = thresh;\n}\n\nvoid PerfSample::force_log() {\n  will_log = true;\n}\n\nvoid PerfLogThread::loop() noexcept {\n  std::vector<json_ref> samples;\n  int64_t sample_batch;\n\n  w_set_thread_name(\"perflog\");\n\n  auto stateDir =\n      w_string_piece(flags.watchman_state_file).dirName().asWString();\n\n  json_ref perf_cmd = cfg_get_json(\"perf_logger_command\").value_or(json_null());\n  if (perf_cmd.isString()) {\n    perf_cmd = json_array({perf_cmd});\n  }\n  if (!perf_cmd.isArray()) {\n    logf(\n        FATAL,\n        \"perf_logger_command must be either a string or an array of strings\\n\");\n  }\n\n  sample_batch = cfg_get_int(\"perf_logger_command_max_samples_per_call\", 4);\n\n  while (true) {\n    {\n      auto state = state_.lock();\n      while (true) {\n        if (!state->samples.empty()) {\n          // We found samples to process\n          break;\n        }\n        if (!state->running) {\n          // No samples remaining, and we have been asked to quit.\n          return;\n        }\n        cond_.wait(state.as_lock());\n      }\n\n      samples.clear();\n      std::swap(samples, state->samples);\n    }\n\n    if (!samples.empty()) {\n      // Hack: Divide by two because this limit includes environment variables\n      // and perf_cmd.\n      // It's possible to compute this correctly on every platform given the\n      // current environment and any specified environment variables, but it's\n      // fine to be conservative here.\n      const size_t argv_limit = ChildProcess::getArgMax() / 2;\n\n      processSamples(\n          argv_limit,\n          sample_batch,\n          samples,\n          [&](std::vector<std::string> sample_args) {\n            std::vector<std::string_view> cmd;\n            cmd.reserve(perf_cmd.array().size() + sample_args.size());\n\n            for (auto& c : perf_cmd.array()) {\n              cmd.push_back(json_to_w_string(c).view());\n            }\n            for (auto& sample : sample_args) {\n              cmd.push_back(sample);\n            }\n\n            ChildProcess::Options opts;\n            opts.environment().set(\n                {{\"WATCHMAN_STATE_DIR\", stateDir},\n                 {\"WATCHMAN_SOCK\", get_sock_name_legacy()}});\n            opts.nullStdin();\n            opts.nullStdout();\n            opts.nullStderr();\n\n            try {\n              ChildProcess proc(cmd, std::move(opts));\n              proc.wait();\n            } catch (const std::exception& exc) {\n              log(ERR, \"failed to spawn perf logger: \", exc.what(), \"\\n\");\n            }\n          },\n          [&](std::string sample_stdin) {\n            ChildProcess::Options opts;\n            opts.environment().set(\n                {{\"WATCHMAN_STATE_DIR\", stateDir},\n                 {\"WATCHMAN_SOCK\", get_sock_name_legacy()}});\n            opts.pipeStdin();\n            opts.nullStdout();\n            opts.nullStderr();\n\n            try {\n              ChildProcess proc({perf_cmd}, std::move(opts));\n              auto stdinPipe = proc.takeStdin();\n\n              try {\n                const char* data = sample_stdin.data();\n                size_t size = sample_stdin.size();\n\n                size_t total_written = 0;\n                while (total_written < sample_stdin.size()) {\n                  auto result = stdinPipe->write.write(data, size);\n                  result.throwIfError();\n                  auto written = result.value();\n                  data += written;\n                  size -= written;\n                  total_written += written;\n                }\n              } catch (const std::exception& exc) {\n                log(ERR,\n                    \"failed to send data to perf logger: \",\n                    exc.what(),\n                    \"\\n\");\n              }\n\n              // close stdin to allow the process to terminate\n              stdinPipe.reset();\n              proc.wait();\n            } catch (const std::exception& exc) {\n              log(ERR, \"failed to spawn perf logger: \", exc.what(), \"\\n\");\n            }\n          });\n    }\n  }\n}\n\nvoid PerfSample::log() {\n  if (!will_log) {\n    return;\n  }\n\n  // Assemble a perf blob\n  auto info = json_object(\n      {{\"description\", typed_string_to_json(description)},\n       {\"meta\", meta_data},\n       {\"pid\", json_integer(::getpid())},\n       {\"version\", typed_string_to_json(PACKAGE_VERSION, W_STRING_UNICODE)}});\n\n#ifdef WATCHMAN_BUILD_INFO\n  info.set(\n      \"buildinfo\", typed_string_to_json(WATCHMAN_BUILD_INFO, W_STRING_UNICODE));\n#endif\n\n#define ADDTV(name, tv) info.set(name, json_real(w_timeval_abs_seconds(tv)))\n  ADDTV(\"elapsed_time\", duration);\n  ADDTV(\"start_time\", time_begin);\n#ifdef HAVE_SYS_RESOURCE_H\n  ADDTV(\"user_time\", usage.ru_utime);\n  ADDTV(\"system_time\", usage.ru_stime);\n#endif // HAVE_SYS_RESOURCE_H\n#undef ADDTV\n\n  // Log to the log file\n  auto dumped = json_dumps(info, 0);\n  watchman::log(ERR, \"PERF: \", dumped, \"\\n\");\n\n  if (!cfg_get_json(\"perf_logger_command\")) {\n    return;\n  }\n\n  // Send this to our logging thread for async processing\n  auto& perfThread = getPerfThread();\n  perfThread.addSample(std::move(info));\n}\n\nvoid perf_shutdown() {\n  getPerfThread(false).stop();\n}\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/PerfSample.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/portability/SysTime.h>\n#include <string>\n#include <vector>\n\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\n// Performance metrics sampling\n\nnamespace watchman {\n\n/**\n * Contains metadata regarding root used in structured logging.\n */\nstruct RootMetadata {\n  w_string root_path;\n  int64_t recrawl_count;\n  bool case_sensitive;\n  w_string watcher;\n};\n\ntemplate <typename T>\nvoid addRootMetadataToEvent(const RootMetadata& root_metadata, T& event) {\n  event.root = root_metadata.root_path.string();\n  event.recrawl = root_metadata.recrawl_count;\n  event.case_sensitive = root_metadata.case_sensitive;\n  event.watcher = root_metadata.watcher.string();\n}\n\nclass PerfSample {\n public:\n  // What we're sampling across\n  const char* description;\n\n  // Additional arbitrary information.\n  // This is a json object with various properties set inside it\n  json_ref meta_data{json_object()};\n\n  // Measure the wall time\n  timeval time_begin;\n  timeval time_end;\n  timeval duration;\n\n  // If set to true, the sample should be sent to the logging\n  // mechanism\n  bool will_log{false};\n\n  // If non-zero, force logging on if the wall time is greater\n  // that this value\n  double wall_time_elapsed_thresh{0};\n\n  double get_perf_sampling_thresh() const;\n\n#ifdef HAVE_SYS_RESOURCE_H\n  // When available (posix), record these process-wide stats.\n  // It can be difficult to attribute these directly to the\n  // action being sampled because there can be multiple\n  // watched roots and these metrics include the usage from\n  // all of them.\n  struct rusage usage_begin;\n  struct rusage usage_end;\n  struct rusage usage;\n#endif\n\n  /**\n   * Initialize and mark the start of a sample.\n   * The given description is an unowned pointer - it must live as long as the\n   * PerfSample.\n   */\n  explicit PerfSample(const char* description);\n\n  PerfSample(const PerfSample&) = delete;\n  PerfSample(PerfSample&&) = delete;\n  PerfSample& operator=(const PerfSample&) = delete;\n  PerfSample& operator=(PerfSample&&) = delete;\n\n  // Augment any configuration policy and cause this sample to be logged if the\n  // walltime exceeds the specified number of seconds (fractions are supported)\n  void set_wall_time_thresh(double thresh);\n\n  // Mark the end of a sample.  Returns true if the policy is to log this\n  // sample.  This allows the caller to conditionally build and add metadata\n  bool finish();\n\n  // Annotate sample with Root metadata.\n  void add_root_metadata(const RootMetadata& root_metadata);\n\n  // Annotate the sample with metadata\n  void add_meta(const char* key, json_ref&& val);\n\n  // Force the sample to go to the log\n  void force_log();\n\n  // If will_log is set, arranges to send the sample to the log\n  void log();\n};\n\nvoid perf_shutdown();\n\nvoid processSamples(\n    size_t argv_limit,\n    size_t maximum_batch_size,\n    std::vector<json_ref>& samples,\n    std::function<void(std::vector<std::string>)> command_line,\n    std::function<void(std::string)> single_large_sample);\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/Poison.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include \"watchman/Logging.h\"\n#include \"watchman/WatchmanConfig.h\"\n\nnamespace watchman {\n\nfolly::Synchronized<std::string> poisoned_reason;\n\nvoid set_poison_state(\n    w_string_piece dir,\n    std::chrono::system_clock::time_point now,\n    const char* syscall,\n    const std::error_code& err) {\n  if (!poisoned_reason.rlock()->empty()) {\n    return;\n  }\n\n  auto why = fmt::format(\n      \"A non-recoverable condition has triggered.  Watchman needs your help!\\n\"\n      \"The triggering condition was at timestamp={}: {}({}) -> {}\\n\"\n      \"All requests will continue to fail with this message until you resolve\\n\"\n      \"the underlying problem.  You will find more information on fixing this at\\n\"\n      \"{}#poison-{}\\n\",\n      std::chrono::system_clock::to_time_t(now),\n      syscall,\n      dir.view(),\n      err.message(),\n      cfg_get_trouble_url(),\n      syscall);\n\n  watchman::log(watchman::ERR, why);\n  *poisoned_reason.wlock() = why;\n}\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/Poison.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/Synchronized.h>\n#include <chrono>\n#include <string>\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\n/**\n * Some error conditions will put us into a non-recoverable state where we\n * can't guarantee that we will be operating correctly.  Rather than suffering\n * in silence and misleading our clients, we'll poison ourselves and advertise\n * that we have done so and provide some advice on how the user can cure us.\n */\nextern folly::Synchronized<std::string> poisoned_reason;\n\nvoid set_poison_state(\n    w_string_piece dir,\n    std::chrono::system_clock::time_point now,\n    const char* syscall,\n    const std::error_code& err);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/ProcessLock.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"ProcessLock.h\"\n\n#include <fmt/core.h>\n#include <folly/String.h>\n\n#include \"watchman/Logging.h\"\n\n#ifndef _WIN32\n#include <sys/file.h>\n#endif\n\nnamespace watchman {\n\nProcessLock ProcessLock::acquire(const std::string& pid_file) {\n  auto result = tryAcquire(pid_file);\n  if (auto* error = std::get_if<std::string>(&result)) {\n    log(ERR, *error, \"\\n\");\n    exit(1);\n  }\n  return std::move(std::get<ProcessLock>(result));\n}\n\nstd::variant<ProcessLock, ProcessLock::LockError> ProcessLock::tryAcquire(\n    const std::string& pid_file) {\n#ifndef _WIN32\n  FileDescriptor fd(\n      open(pid_file.c_str(), O_RDWR | O_CREAT, 0644),\n      FileDescriptor::FDType::Generic);\n\n  if (!fd) {\n    return fmt::format(\n        \"Failed to open pidfile {} for write: {}\",\n        pid_file,\n        folly::errnoStr(errno));\n  }\n  // Ensure that no children inherit the locked pidfile descriptor\n  fd.setCloExec();\n\n  // Watchman only starts its server when it's considered not running. But it's\n  // possible the old Watchman server has just shut down, and the lock isn't\n  // released yet. If we fail to acquire the lock, return, and let the caller\n  // decide whether to retry.\n\n  // Use flock because it transfers the lock to child processes through\n  // fork().\n  int result = ::flock(fd.fd(), LOCK_EX | LOCK_NB);\n  const int errno_copy = errno;\n  if (result != 0) {\n    char pidstr[32];\n    int len = read(fd.fd(), pidstr, sizeof(pidstr) - 1);\n    pidstr[len] = '\\0';\n\n    return fmt::format(\n        \"Failed to lock pidfile {}: process {} owns it: {}, and my pid = {}\",\n        pid_file,\n        pidstr,\n        folly::errnoStr(errno_copy),\n        getpid());\n  }\n\n  return ProcessLock{std::move(fd)};\n#else\n  // One does not simply, and without risk of races, write a pidfile\n  // on win32.  Instead we're using a named mutex in the global namespace.\n  // This gives us a very simple way to exclusively claim ownership of\n  // the lock for this user.  To make things a little more complicated,\n  // since we scope our locks based on the state dir location and require\n  // this to work for our integration tests, we need to create a unique\n  // name per state dir.  This is made even more interesting because\n  // we are forbidden from using windows directory separator characters\n  // in the name, so we cannot simply concatenate the state dir path\n  // with a watchman specific prefix.  Instead we iterate the path\n  // and rewrite any backslashes with forward slashes and use that\n  // for the name.\n  // Using a mutex for this does make it more awkward to discover\n  // the process id of the exclusive owner, but that's not critically\n  // important; it is possible to connect to the instance and issue\n  // a get-pid command if that is needed.\n\n  // We use the global namespace so that we ensure that we have one\n  // watchman process per user per state dir location.  If we didn't\n  // use the Global namespace we'd end using a local namespace scoped\n  // to the user session and that might cause confusion/insanity if\n  // they are doing something elaborate like being logged in via\n  // ssh in multiple sessions and expecting to share state.\n  std::string name(\"Global\\\\Watchman-\");\n  for (const auto& it : pid_file) {\n    if (it == '\\\\') {\n      // We're not allowed to use backslash in the name, so normalize\n      // to forward slashes.\n      name.append(\"/\");\n    } else {\n      name.push_back(it);\n    }\n  }\n\n  HANDLE mutex = CreateMutexA(nullptr, true, name.c_str());\n\n  if (!mutex) {\n    // Treat unexpected errors as fatal.\n    log(ERR,\n        \"Failed to create mutex named: \",\n        name,\n        \": \",\n        GetLastError(),\n        \"\\n\");\n    exit(1);\n  }\n\n  if (GetLastError() == ERROR_ALREADY_EXISTS) {\n    // Allow retrying failure to acquire the lock.\n    log(ERR,\n        \"Failed to acquire mutex named: \",\n        name,\n        \"; watchman is already running for this context\\n\");\n    exit(1);\n  }\n\n  /* We are intentionally not closing the mutex and intentionally not storing\n   * a reference to it anywhere: the intention is that it remain locked\n   * for the rest of the lifetime of our process.\n   * CloseHandle(mutex); // NOPE!\n   */\n  return ProcessLock{};\n#endif\n}\n\nProcessLock::Handle ProcessLock::writePid(const std::string& pid_file) {\n#ifndef _WIN32\n  CHECK(fd_) << \"writePid may only be called after acquire\";\n\n  // Replace contents of the pidfile with our pid string\n  if (0 == ftruncate(fd_.fd(), 0)) {\n    pid_t mypid = getpid();\n    auto pidString = fmt::to_string(mypid);\n    ignore_result(write(fd_.fd(), pidString.data(), pidString.size()));\n    fsync(fd_.fd());\n  } else {\n    log(ERR,\n        \"Failed to truncate pidfile \",\n        pid_file,\n        \": \",\n        folly::errnoStr(errno),\n        \"\\n\");\n  }\n\n  /* We are intentionally not closing the fd and intentionally not storing\n   * a reference to it anywhere: the intention is that it remain locked\n   * for the rest of the lifetime of our process.\n   * close(fd); // NOPE!\n   */\n  fd_.release();\n#endif\n  return Handle{};\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/ProcessLock.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/fs/FileDescriptor.h\"\n\n#include <chrono>\n#include <variant>\n\nnamespace watchman {\n\nclass ProcessLock {\n public:\n  using LockError = std::string;\n\n  /**\n   * Move-only unit type that indicates the process lock has been acquired.\n   */\n  class Handle {\n   public:\n    Handle() = default;\n    Handle(Handle&&) = default;\n    Handle& operator=(Handle&&) = default;\n\n   private:\n    Handle(const Handle&) = delete;\n    Handle& operator=(const Handle&) = delete;\n  };\n\n  /**\n   * Acquires an fd to the pidfile and locks it.\n   *\n   * Call before fork(), so failure can be printed to the daemonizing process.\n   *\n   * Prints an error and exits the process if it fails.\n   */\n  static ProcessLock acquire(const std::string& pid_file);\n\n  /**\n   * Acquires an fd to the pidfile and locks it.\n   *\n   * Call before fork(), so failure can be printed to the daemonizing process.\n   *\n   * If it fails, it returns a string containing the error message.\n   */\n  static std::variant<ProcessLock, LockError> tryAcquire(\n      const std::string& pid_file);\n\n  ProcessLock(ProcessLock&&) = default;\n  ProcessLock& operator=(ProcessLock&&) = default;\n\n  ProcessLock(const ProcessLock&) = delete;\n  ProcessLock& operator=(const ProcessLock&) = delete;\n\n  /**\n   * Called by the daemonized process to write the daemon pid into the locked\n   * pidfile.\n   *\n   * This releases the FileDescriptor but does not close it, as the lock should\n   * be held for the process's lifetime.\n   */\n  Handle writePid(const std::string& pid_file);\n\n private:\n#ifndef _WIN32\n  ProcessLock() = delete;\n  explicit ProcessLock(FileDescriptor fd) : fd_{std::move(fd)} {}\n\n  FileDescriptor fd_;\n#else\n  ProcessLock() = default;\n#endif\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/ProcessUtil.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/ProcessUtil.h\"\n\n#include \"eden/common/utils/ProcessInfoCache.h\"\n\nnamespace watchman {\n\nusing namespace facebook::eden;\n\nnamespace {\nProcessInfoCache& getProcessInfoCache() {\n  static auto* pic = new ProcessInfoCache;\n  return *pic;\n}\n} // namespace\n\nProcessInfoHandle lookupProcessInfo(pid_t pid) {\n  return getProcessInfoCache().lookup(pid);\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/ProcessUtil.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/portability/SysTypes.h>\n\nnamespace facebook::eden {\nclass ProcessInfoHandle;\n}\n\nnamespace watchman {\n\nusing ProcessInfoHandle = facebook::eden::ProcessInfoHandle;\n\nProcessInfoHandle lookupProcessInfo(pid_t pid);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/PubSub.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/PubSub.h\"\n#include <algorithm>\n#include <iterator>\n\nnamespace watchman {\n\nPublisher::Subscriber::Subscriber(\n    std::shared_ptr<Publisher> pub,\n    Notifier notify,\n    const std::optional<json_ref>& info)\n    : serial_(0),\n      publisher_(std::move(pub)),\n      notify_(notify),\n      info_(std::move(info)) {}\n\nPublisher::Subscriber::~Subscriber() {\n  // In the loop below we may own a reference to some other\n  // Subscriber instance.  That is fine, but we need to take\n  // care: if we end up with the last reference to that subscriber\n  // we will end up calling its destructor and effective recurse\n  // and attempt to acquire the wlock.   We therefore need to\n  // defer releasing any of the shared_ptr's that we lock in\n  // the loop below until after we have released the wlock.\n  std::vector<std::shared_ptr<Subscriber>> subscribers;\n\n  {\n    auto wlock = publisher_->state_.wlock();\n    auto it = wlock->subscribers.begin();\n    while (it != wlock->subscribers.end()) {\n      auto sub = it->lock();\n      // Prune vacated weak_ptr's or those that point to us\n      if (!sub || sub.get() == this) {\n        it = wlock->subscribers.erase(it);\n      } else {\n        ++it;\n        // Defer releasing the sub reference until after we've\n        // release the wlock!\n        subscribers.emplace_back(std::move(sub));\n      }\n    }\n    // Take this opportunity to reap anything that is no longer\n    // referenced now that we've removed some subscriber(s)\n    wlock->collectGarbage();\n  }\n\n  // It is now safe for subscribers to be torn down and release\n  // any references we took ownership of in the loop above.\n}\n\nvoid Publisher::Subscriber::getPending(\n    std::vector<std::shared_ptr<const Item>>& pending) {\n  {\n    auto rlock = publisher_->state_.rlock();\n    auto& items = rlock->items;\n\n    if (items.empty()) {\n      return;\n    }\n\n    // First we walk back to find the end of the range that\n    // we have seen previously.\n    int firstIndex;\n    for (firstIndex = int(items.size()) - 1; firstIndex >= 0; --firstIndex) {\n      if (items[firstIndex]->serial <= serial_) {\n        break;\n      }\n    }\n\n    // We found the item before the one we really want, so\n    // increment the index; we'll copy the remaining items.\n    ++firstIndex;\n    bool updated = false;\n\n    while (firstIndex < int(items.size())) {\n      pending.push_back(items[firstIndex]);\n      ++firstIndex;\n      updated = true;\n    }\n\n    if (updated) {\n      serial_ = pending.back()->serial;\n    }\n\n    return;\n  }\n}\n\nvoid getPending(\n    std::vector<std::shared_ptr<const Publisher::Item>>& items,\n    const std::shared_ptr<Publisher::Subscriber>& sub1,\n    const std::shared_ptr<Publisher::Subscriber>& sub2) {\n  if (sub1) {\n    sub1->getPending(items);\n  }\n  if (sub2) {\n    sub2->getPending(items);\n  }\n}\n\nstd::shared_ptr<Publisher::Subscriber> Publisher::subscribe(\n    Notifier notify,\n    const std::optional<json_ref>& info) {\n  auto sub =\n      std::make_shared<Publisher::Subscriber>(shared_from_this(), notify, info);\n  state_.wlock()->subscribers.emplace_back(sub);\n  return sub;\n}\n\nbool Publisher::hasSubscribers() const {\n  return !state_.rlock()->subscribers.empty();\n}\n\nvoid Publisher::state::collectGarbage() {\n  if (items.empty()) {\n    return;\n  }\n\n  uint64_t minSerial = std::numeric_limits<uint64_t>::max();\n  for (auto& it : subscribers) {\n    auto sub = it.lock();\n    if (sub) {\n      minSerial = std::min(minSerial, sub->getSerial());\n    }\n  }\n\n  while (!items.empty() && items.front()->serial < minSerial) {\n    items.pop_front();\n  }\n}\n\nbool Publisher::enqueue(json_ref&& payload) {\n  std::vector<std::shared_ptr<Subscriber>> subscribers;\n\n  {\n    auto wlock = state_.wlock();\n\n    // We need to collect live references for the notify portion,\n    // but since we're holding the wlock, take this opportunity to\n    // detect and prune dead subscribers and clean up some garbage.\n    auto it = wlock->subscribers.begin();\n    while (it != wlock->subscribers.end()) {\n      auto sub = it->lock();\n      // Prune vacated weak_ptr's\n      if (!sub) {\n        it = wlock->subscribers.erase(it);\n      } else {\n        ++it;\n        // Remember that live reference so that we can notify\n        // outside of the lock below.\n        subscribers.emplace_back(std::move(sub));\n      }\n    }\n\n    wlock->collectGarbage();\n\n    if (subscribers.empty()) {\n      return false;\n    }\n\n    wlock->items.emplace_back(\n        std::make_shared<Item>(wlock->nextSerial++, std::move(payload)));\n  }\n\n  // and notify them outside of the lock\n  for (auto& sub : subscribers) {\n    auto& n = sub->getNotify();\n    if (n) {\n      n();\n    }\n  }\n  return true;\n}\n\njson_ref Publisher::getDebugInfo() const {\n  auto ret = json_object();\n\n  auto rlock = state_.rlock();\n  ret.set(\"next_serial\", json_integer(rlock->nextSerial));\n\n  std::vector<json_ref> subscribers_arr;\n\n  for (auto& sub_ref : rlock->subscribers) {\n    auto sub = sub_ref.lock();\n    if (sub) {\n      auto sub_json = json_object({\n          {\"serial\", json_integer(sub->getSerial())},\n      });\n      if (auto& info = sub->getInfo()) {\n        sub_json.set(\"info\", json_ref(*info));\n      }\n      subscribers_arr.push_back(std::move(sub_json));\n    } else {\n      // This is a subscriber that is now dead. It will be cleaned up the next\n      // time enqueue is called.\n    }\n  }\n\n  ret.set(\"subscribers\", json_array(std::move(subscribers_arr)));\n\n  std::vector<json_ref> items_arr;\n\n  for (auto& item : rlock->items) {\n    auto item_json = json_object(\n        {{\"serial\", json_integer(item->serial)}, {\"payload\", item->payload}});\n    items_arr.emplace_back(item_json);\n  }\n\n  ret.set(\"items\", json_array(std::move(items_arr)));\n\n  return ret;\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/PubSub.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <folly/Synchronized.h>\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_string.h\"\n#include \"watchman/watchman_system.h\"\n\n#include <deque>\n#include <functional>\n#include <vector>\n\nnamespace watchman {\n\nclass Publisher : public std::enable_shared_from_this<Publisher> {\n public:\n  struct Item {\n    Item(uint64_t s, json_ref p) : serial{s}, payload{std::move(p)} {}\n\n    // copy of nextSerial_ at the time this was created.\n    // The item can be released when all subscribers have\n    // observed this serial number.\n    uint64_t serial;\n    json_ref payload;\n  };\n\n  // Generic callback that subscribers can register to arrange\n  // to be woken up when something is published\n  using Notifier = std::function<void()>;\n\n  // Each subscriber is represented by one of these\n  class Subscriber : public std::enable_shared_from_this<Subscriber> {\n    // The serial of the last Item to be consumed by\n    // this subscriber.\n    uint64_t serial_;\n    // Subscriber keeps the publisher alive so that no Items are lost\n    // if the Publisher is released before all of the subscribers.\n    std::shared_ptr<Publisher> publisher_;\n    // Advising the subscriber that there may be more items available\n    Notifier notify_;\n    // Information for debugging purposes\n    const std::optional<json_ref> info_;\n\n   public:\n    ~Subscriber();\n    Subscriber(\n        std::shared_ptr<Publisher> pub,\n        Notifier notify,\n        const std::optional<json_ref>& info);\n    Subscriber(const Subscriber&) = delete;\n\n    // Returns all as yet unseen published items for this subscriber.\n    void getPending(std::vector<std::shared_ptr<const Item>>& pending);\n\n    uint64_t getSerial() const {\n      return serial_;\n    }\n\n    Notifier& getNotify() {\n      return notify_;\n    }\n\n    const std::optional<json_ref>& getInfo() const {\n      return info_;\n    }\n  };\n\n  // Register a new subscriber.\n  // When the Subscriber object is released, the registration is\n  // automatically removed.\n  std::shared_ptr<Subscriber> subscribe(\n      Notifier notify,\n      const std::optional<json_ref>& info = std::nullopt);\n\n  // Returns true if there are any subscribers.\n  // This is racy and intended to be used to gate building a payload\n  // if there are no current subscribers.\n  bool hasSubscribers() const;\n\n  // Enqueue a new item, but only if there are subscribers.\n  // Returns true if the item was queued.\n  bool enqueue(json_ref&& payload);\n\n  // Return debugging info useful for state inspection.\n  json_ref getDebugInfo() const;\n\n private:\n  struct state {\n    state() = default;\n    state(const state&) = delete;\n    // Serial number to use for the next Item\n    uint64_t nextSerial{1};\n    // The stream of Items\n    std::deque<std::shared_ptr<const Item>> items;\n    // The subscribers\n    std::vector<std::weak_ptr<Subscriber>> subscribers;\n\n    void collectGarbage();\n    void enqueue(json_ref&& payload);\n  };\n  folly::Synchronized<state> state_;\n\n  friend class Subscriber;\n};\n\n// Equivalent to calling getPending on up to two Subscriber and\n// joining the resultant vectors together.\nvoid getPending(\n    std::vector<std::shared_ptr<const Publisher::Item>>& pending,\n    const std::shared_ptr<Publisher::Subscriber>& sub1,\n    const std::shared_ptr<Publisher::Subscriber>& sub2);\n} // namespace watchman\n"
  },
  {
    "path": "watchman/QueryableView.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/QueryableView.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/scm/SCM.h\"\n\nnamespace watchman {\n\nQueryableView::QueryableView(const w_string& root_path, bool requiresCrawl)\n    : requiresCrawl{requiresCrawl}, scm_(SCM::scmForPath(root_path)) {}\n\nQueryableView::~QueryableView() = default;\n\n/** Perform a time-based (since) query and emit results to the supplied\n * query context */\nvoid QueryableView::timeGenerator(const Query*, QueryContext*) const {\n  throw QueryExecError(\"timeGenerator not implemented\");\n}\n\n/** Walks files that match the supplied set of paths */\nvoid QueryableView::pathGenerator(const Query*, QueryContext*) const {\n  throw QueryExecError(\"pathGenerator not implemented\");\n}\n\nvoid QueryableView::globGenerator(const Query*, QueryContext*) const {\n  throw QueryExecError(\"globGenerator not implemented\");\n}\n\nvoid QueryableView::allFilesGenerator(const Query*, QueryContext*) const {\n  throw QueryExecError(\"allFilesGenerator not implemented\");\n}\n\nClockTicks QueryableView::getLastAgeOutTickValue() const {\n  return 0;\n}\n\nstd::chrono::system_clock::time_point QueryableView::getLastAgeOutTimeStamp()\n    const {\n  return std::chrono::system_clock::time_point{};\n}\n\nvoid QueryableView::ageOut(int64_t&, int64_t&, int64_t&, std::chrono::seconds) {\n}\n\nbool QueryableView::isVCSOperationInProgress() const {\n  static const std::vector<w_string> lockFiles{\".hg/wlock\", \".git/index.lock\"};\n  return doAnyOfTheseFilesExist(lockFiles);\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/QueryableView.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/futures/Future.h>\n#include <vector>\n\n#include \"watchman/Clock.h\"\n#include \"watchman/CookieSync.h\"\n#include \"watchman/PerfSample.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nstruct Query;\nstruct QueryContext;\nclass Root;\nclass SCM;\n\nclass QueryableView : public std::enable_shared_from_this<QueryableView> {\n public:\n  /**\n   * Set if this view requires crawling the filesystem.\n   */\n  const bool requiresCrawl;\n\n  QueryableView(const w_string& root_path, bool requiresCrawl);\n  virtual ~QueryableView();\n\n  /**\n   * Perform a time-based (since) query and emit results to the supplied\n   * query context.\n   */\n  virtual void timeGenerator(const Query* query, QueryContext* ctx) const;\n\n  /**\n   * Walks files that match the supplied set of paths.\n   */\n  virtual void pathGenerator(const Query* query, QueryContext* ctx) const;\n\n  virtual void globGenerator(const Query* query, QueryContext* ctx) const;\n\n  virtual void allFilesGenerator(const Query* query, QueryContext* ctx) const;\n\n  virtual ClockPosition getMostRecentRootNumberAndTickValue() const = 0;\n  virtual w_string getCurrentClockString() const = 0;\n  virtual ClockTicks getLastAgeOutTickValue() const;\n  virtual std::chrono::system_clock::time_point getLastAgeOutTimeStamp() const;\n  virtual void ageOut(\n      int64_t& walked,\n      int64_t& files,\n      int64_t& dirs,\n      std::chrono::seconds minAge);\n\n  virtual folly::SemiFuture<folly::Unit> waitForSettle(\n      std::chrono::milliseconds settle_period) = 0;\n  virtual CookieSync::SyncResult syncToNow(\n      const std::shared_ptr<Root>& root,\n      std::chrono::milliseconds timeout) = 0;\n\n  /**\n   * Synchronize this view with the working copy.\n   *\n   * The returned future will complete when this view caught up with all the\n   * writes to the working copy.\n   */\n  virtual folly::SemiFuture<CookieSync::SyncResult> sync(\n      const std::shared_ptr<Root>& root) = 0;\n\n  // Specialized query function that is used to test whether\n  // version control files exist as part of some settling handling.\n  // It should query the view and return true if any of the named\n  // files current exist in the view.\n  virtual bool doAnyOfTheseFilesExist(\n      const std::vector<w_string>& fileNames) const = 0;\n\n  bool isVCSOperationInProgress() const;\n\n  /**\n   * Start up any helper threads.\n   */\n  virtual void startThreads(const std::shared_ptr<Root>& /*root*/) {}\n  /**\n   * Request that helper threads shutdown (but does not join them).\n   */\n  virtual void stopThreads(std::string_view /*reason*/) {}\n  /**\n   * Request that helper threads wake up and re-evaluate their state.\n   */\n  virtual void wakeThreads() {}\n\n  virtual const w_string& getName() const = 0;\n  virtual json_ref getWatcherDebugInfo() const = 0;\n  virtual void clearWatcherDebugInfo() = 0;\n  [[nodiscard]] virtual folly::SemiFuture<folly::Unit>\n  waitUntilReadyToQuery() = 0;\n\n  // Return the SCM detected for this watched root\n  SCM* getSCM() const {\n    return scm_.get();\n  }\n\n private:\n  // The source control system that we detected during initialization\n  std::unique_ptr<SCM> scm_;\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/Result.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <folly/Unit.h>\n#include <exception>\n#include <stdexcept>\n#include <system_error>\n#include <type_traits>\n\nnamespace watchman {\n\n/**\n * Represents the Result of an operation, and thus can hold either\n * a value or an error, or neither.  This is similar to the folly::Try\n * type and also to the rust Result type.  The contained Error type\n * can be replaced by an arbitrary error container as a stronger nod\n * toward the rust Result type and is useful in situations where\n * throwing and catching exceptions is undesirable.\n */\ntemplate <typename Value, typename Error = std::exception_ptr>\nclass Result {\n  static_assert(\n      !std::is_reference<Value>::value && !std::is_reference<Error>::value,\n      \"Result may not be used with reference types\");\n  static_assert(\n      !std::is_same<Value, Error>::value,\n      \"Value and Error must not be the same type\");\n\n  enum class State { kEMPTY, kVALUE, kERROR };\n\n public:\n  using value_type = Value;\n  using error_type = Error;\n\n  // Default construct an empty Result\n  Result() : state_(State::kEMPTY) {}\n\n  ~Result() {\n    reset();\n  }\n\n  // Copy a value into the result\n  /* implicit */ Result(const value_type& other)\n      : state_(State::kVALUE), value_(other) {}\n\n  // Move in value\n  /* implicit */ Result(value_type&& other)\n      : state_(State::kVALUE), value_(std::move(other)) {}\n\n  // Copy in error\n  /* implicit */ Result(const error_type& error)\n      : state_(State::kERROR), error_(error) {}\n\n  // Move in error\n  /* implicit */ Result(error_type&& error)\n      : state_(State::kERROR), error_(std::move(error)) {}\n\n  // Move construct\n  Result(Result&& other) noexcept {\n    *this = std::move(other);\n  }\n\n  // Move assign\n  Result& operator=(Result&& other) noexcept {\n    if (&other != this) {\n      reset();\n\n      switch (other.state_) {\n        case State::kEMPTY:\n          break;\n        case State::kVALUE:\n          new (&value_) value_type{std::move(other.value_)};\n          break;\n        case State::kERROR:\n          new (&error_) error_type{std::move(other.error_)};\n          break;\n      }\n      state_ = other.state_;\n      other.reset();\n    }\n    return *this;\n  }\n\n  // Copy construct\n  Result(const Result& other) {\n    *this = other;\n  }\n\n  // Copy assign\n  Result& operator=(const Result& other) {\n    static_assert(\n        std::is_copy_constructible<value_type>::value &&\n            std::is_copy_constructible<error_type>::value,\n        \"Value and Error must be copyable for \"\n        \"Result<Value,Error> to be copyable\");\n\n    if (&other != this) {\n      reset();\n      switch (other.state_) {\n        case State::kEMPTY:\n          break;\n        case State::kVALUE:\n          new (&value_) value_type{other.value_};\n          break;\n        case State::kERROR:\n          new (&error_) error_type{other.error_};\n          break;\n      }\n      state_ = other.state_;\n    }\n    return *this;\n  }\n\n  bool hasValue() const {\n    return state_ == State::kVALUE;\n  }\n\n  bool hasError() const {\n    return state_ == State::kERROR;\n  }\n\n  bool empty() const {\n    return state_ == State::kEMPTY;\n  }\n\n  // If Result does not contain a valid Value, throw\n  // the Error value.  If there is no error value,\n  // throw a logic error.\n  // This variant is used when Error is std::exception_ptr.\n  template <typename E = error_type>\n  typename std::enable_if<std::is_same<E, std::exception_ptr>::value>::type\n  throwIfError() const {\n    switch (state_) {\n      case State::kVALUE:\n        return;\n      case State::kEMPTY:\n        throw std::logic_error(\"Uninitialized Result\");\n      case State::kERROR:\n        std::rethrow_exception(error_);\n    }\n  }\n\n  // If Result does not contain a valid Value, throw a logic error.\n  // This variant is used when Error is std::error_code.\n  template <typename E = error_type>\n  typename std::enable_if<std::is_same<E, std::error_code>::value>::type\n  throwIfError() const {\n    switch (state_) {\n      case State::kVALUE:\n        return;\n      case State::kEMPTY:\n        throw std::logic_error(\"Uninitialized Result\");\n      case State::kERROR:\n        throw std::system_error(error_);\n    }\n  }\n\n  // If Result does not contain a valid Value, throw a logic error.\n  // This variant is used when Error is not std::exception_ptr or\n  // std::error_code.\n  template <typename E = error_type>\n  typename std::enable_if<\n      !std::is_same<E, std::exception_ptr>::value &&\n      !std::is_same<E, std::error_code>::value>::type\n  throwIfError() const {\n    switch (state_) {\n      case State::kVALUE:\n        return;\n      case State::kEMPTY:\n        throw std::logic_error(\"Uninitialized Result\");\n      case State::kERROR:\n        throw std::logic_error(\"Result holds Error, not Value\");\n    }\n  }\n\n  // Get a mutable reference to the value.  If the value is\n  // not assigned, an exception will be thrown by throwIfError().\n  value_type& value() & {\n    throwIfError();\n    return value_;\n  }\n\n  // Get an rvalue reference to the value.  If the value is\n  // not assigned, an exception will be thrown by throwIfError().\n  value_type&& value() && {\n    throwIfError();\n    return std::move(value_);\n  }\n\n  // Get a const reference to the value.  If the value is\n  // not assigned, an exception will be thrown by throwIfError().\n  const value_type& value() const& {\n    throwIfError();\n    return value_;\n  }\n\n  // Throws a logic exception if the result does not contain an Error\n  void throwIfNotError() {\n    switch (state_) {\n      case State::kVALUE:\n        throw std::logic_error(\"Result holds Value, not Error\");\n      case State::kEMPTY:\n        throw std::logic_error(\"Uninitialized Result\");\n      case State::kERROR:\n        return;\n    }\n  }\n\n  // Get a mutable reference to the error.  If the error is\n  // not assigned, an exception will be thrown by throwIfNotError().\n  error_type& error() & {\n    throwIfNotError();\n    return error_;\n  }\n\n  // Get an rvalue reference to the error.  If the error is\n  // not assigned, an exception will be thrown by throwIfNotError().\n  error_type&& error() && {\n    throwIfNotError();\n    return std::move(error_);\n  }\n\n  // Get a const reference to the error.  If the error is\n  // not assigned, an exception will be thrown by throwIfNotError().\n  const error_type& error() const& {\n    throwIfNotError();\n    return error_;\n  }\n\n private:\n  State state_{State::kEMPTY};\n  union {\n    value_type value_;\n    error_type error_;\n  };\n\n  void reset() noexcept {\n    // value_/error_ is a union, thus manual call of destructors\n    switch (state_) {\n      case State::kEMPTY:\n        break;\n      case State::kVALUE:\n        value_.~value_type();\n        state_ = State::kEMPTY;\n        break;\n      case State::kERROR:\n        error_.~error_type();\n        state_ = State::kEMPTY;\n        break;\n    }\n  }\n};\n\n// Helper for making a Result from a value; auto-deduces the Value type.\n// The Error type can be overridden and is listed first because the whole\n// point of this is to avoid specifying the Value type.\ntemplate <typename Error = std::exception_ptr, typename T>\nResult<typename std::decay<T>::type, Error> makeResult(T&& t) {\n  return Result<typename std::decay<T>::type, Error>(std::forward<T>(t));\n}\n\n// Helper for populating a Result with the return value from a lambda.\n// If the lambda throws an exception it will be captured into the Result.\n// This is the non-void return type flavor.\ntemplate <typename Func>\ntypename std::enable_if<\n    !std::is_same<typename std::invoke_result<Func>::type, void>::value,\n    Result<typename std::invoke_result<Func>::type>>::type\nmakeResultWith(Func&& func) {\n  using ResType = typename std::invoke_result<Func>::type;\n\n  try {\n    return Result<ResType>(func());\n  } catch (const std::exception&) {\n    return Result<ResType>(std::current_exception());\n  }\n}\n\n// Helper for populating a Result with the return value from a lambda.\n// If the lambda throws an exception it will be captured into the Result.\n// This is the void return type flavor; it produces Result<Unit>\ntemplate <typename Func>\ntypename std::enable_if<\n    std::is_same<typename std::invoke_result<Func>::type, void>::value,\n    Result<folly::Unit>>::type\nmakeResultWith(Func&& func) {\n  try {\n    func();\n    return Result<folly::Unit>(folly::Unit{});\n  } catch (const std::exception&) {\n    return Result<folly::Unit>(std::current_exception());\n  }\n}\n\ntemplate <typename T>\nusing ResultErrno = Result<std::enable_if_t<!std::is_integral_v<T>, T>, int>;\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/RingBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/concurrency/container/LockFreeRingBuffer.h>\n\nnamespace watchman {\n\n/**\n * Fixed-size, lock-free ring buffer. Used for low-latency event logging.\n */\ntemplate <typename T>\nclass RingBuffer {\n public:\n  explicit RingBuffer(uint32_t capacity)\n      : ring_{capacity}, lastClear_{ring_.currentHead()} {}\n\n  void clear() {\n    lastClear_.store(ring_.currentHead(), std::memory_order_release);\n  }\n\n  void write(const T& entry) {\n    ring_.write(entry);\n  }\n\n  std::vector<T> readAll() const {\n    auto lastClear = lastClear_.load(std::memory_order_acquire);\n\n    std::vector<T> entries;\n\n    auto head = ring_.currentHead();\n    T entry;\n    while (head.moveBackward() && head >= lastClear &&\n           ring_.tryRead(entry, head)) {\n      entries.push_back(std::move(entry));\n    }\n    std::reverse(entries.begin(), entries.end());\n    return entries;\n  }\n\n private:\n  RingBuffer(RingBuffer&&) = delete;\n  RingBuffer(const RingBuffer&) = delete;\n  RingBuffer& operator=(RingBuffer&&) = delete;\n  RingBuffer& operator=(const RingBuffer&) = delete;\n\n  folly::LockFreeRingBuffer<T> ring_;\n  std::atomic<typename folly::LockFreeRingBuffer<T>::Cursor> lastClear_;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/SanityCheck.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include <folly/String.h>\n\n#include \"watchman/Connect.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/PDU.h\"\n#include \"watchman/PerfSample.h\"\n#include \"watchman/Shutdown.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n#include \"watchman/telemetry/WatchmanStructuredLogger.h\"\n#include \"watchman/watchman_stream.h\"\n\nnamespace watchman {\nnamespace {\n\n// Work-around decodeNext which implictly resets to non-blocking\nstd::optional<json_ref>\ndecodeNext(watchman_stream* client, PduBuffer& buf, json_error_t& jerr) {\n  client->setNonBlock(false);\n  return buf.decodeNext(client, &jerr);\n}\n\n/* Periodically connect to our endpoint and verify that we're talking\n * to ourselves.  This is normally a sign of madness, but if we don't\n * get an answer, or get a reply from someone else, we know things\n * are bad; someone removed our socket file or there was some kind of\n * race condition that resulted in multiple instances starting up.\n */\nvoid check_my_sock(watchman_stream* client) {\n  auto cmd = json_array({typed_string_to_json(\"get-pid\", W_STRING_UNICODE)});\n  PduBuffer buf;\n  json_error_t jerr;\n  pid_t my_pid = ::getpid();\n\n  auto res = buf.pduEncodeToStream(PduFormat{is_bser, 0}, cmd, client);\n  if (res.hasError()) {\n    log(watchman::FATAL,\n        \"Failed to send get-pid PDU: \",\n        folly::errnoStr(res.error()),\n        \"\\n\");\n    /* NOTREACHED */\n  }\n\n  buf.clear();\n  auto result = decodeNext(client, buf, jerr);\n  if (!result) {\n    log(watchman::FATAL,\n        \"Failed to decode get-pid response: \",\n        jerr.text,\n        \" \",\n        folly::errnoStr(errno),\n        \"\\n\");\n    /* NOTREACHED */\n  }\n\n  auto pid = result->get_optional(\"pid\");\n  if (!pid) {\n    log(watchman::FATAL,\n        \"Failed to get pid from get-pid response: \",\n        jerr.text,\n        \"\\n\");\n    /* NOTREACHED */\n  }\n  auto remote_pid = pid->asInt();\n\n  if (remote_pid != my_pid) {\n    log(watchman::FATAL,\n        \"remote pid from get-pid \",\n        long(remote_pid),\n        \" doesn't match my pid (\",\n        (long)my_pid,\n        \"\\n\");\n    /* NOTREACHED */\n  }\n}\n\n/**\n * Run clock command for the specified root. Useful for getting time\n * information.\n */\nvoid check_clock_command(watchman_stream* client, const json_ref& root) {\n  PduBuffer buf;\n  json_error_t jerr;\n\n  auto cmd = json_array(\n      {typed_string_to_json(\"clock\", W_STRING_UNICODE),\n       root,\n       json_object({{\"sync_timeout\", json_integer(20000)}})});\n  auto res = buf.pduEncodeToStream(PduFormat{is_bser, 0}, cmd, client);\n  if (res.hasError()) {\n    throw std::runtime_error(\n        fmt::format(\n            \"Failed to send clock PDU: {}\", folly::errnoStr(res.error())));\n  }\n\n  buf.clear();\n  auto result = decodeNext(client, buf, jerr);\n  if (!result) {\n    throw std::runtime_error(\n        fmt::format(\n            \"Failed to decode clock response: {} {}\",\n            jerr.text,\n            folly::errnoStr(errno)));\n  }\n\n  // Check for error in the response\n  auto error = result->get_optional(\"error\");\n  if (error) {\n    throw std::runtime_error(\n        fmt::format(\"Clock error : {}\", json_to_w_string(*error)));\n  }\n\n  // We use presence of \"clock\" as success\n  auto clock = result->get_optional(\"clock\");\n  if (!clock) {\n    throw std::runtime_error(\"Failed to get clock in response\");\n  }\n}\n\n/**\n * Runs watch-list command and returns a json_ref that contains a list of roots.\n */\njson_ref get_watch_list(watchman_stream* client) {\n  auto cmd = json_array({typed_string_to_json(\"watch-list\", W_STRING_UNICODE)});\n  PduBuffer buf;\n  json_error_t jerr;\n\n  auto res = buf.pduEncodeToStream(PduFormat{is_bser, 0}, cmd, client);\n  if (res.hasError()) {\n    throw std::runtime_error(\n        fmt::format(\n            \"Failed to send watch-list PDU: {}\", folly::errnoStr(res.error())));\n  }\n\n  buf.clear();\n  auto result = decodeNext(client, buf, jerr);\n  if (!result) {\n    throw std::runtime_error(\n        fmt::format(\n            \"Failed to decode watch-list response: {} error:  {}\",\n            jerr.text,\n            folly::errnoStr(errno)));\n  }\n  return result->get(\"roots\");\n}\n\n/**\n * Run watch-list to get the list of watched roots. Then, run 'clock' on each\n * watched root. We perf log the time taken to get the clock.\n */\nvoid do_clock_check(watchman_stream* client) {\n  // We don't expect errors in these calls. However, we do want to make sure\n  // they are not fatal.\n  try {\n    auto roots = get_watch_list(client);\n    for (auto& r : roots.array()) {\n      ClockTest clockTest;\n      clockTest.root = r.toString();\n      PerfSample sample(\"clock-test\");\n      sample.add_meta(\"root\", json_object({{\"path\", r}}));\n      try {\n        check_clock_command(client, r);\n      } catch (const std::exception& ex) {\n        log(watchman::ERR, \"Failed do_clock_check : \", ex.what(), \"\\n\");\n        clockTest.error = ex.what();\n        sample.add_meta(\"error\", w_string_to_json(ex.what()));\n        sample.force_log();\n      }\n\n      if (sample.finish()) {\n        sample.log();\n      }\n\n      const auto& [samplingRate, eventCount] =\n          getLogEventCounters(LogEventType::ClockTestType);\n      // Log if override set, or if we have hit the sample rate\n      if (sample.will_log || eventCount == samplingRate) {\n        clockTest.event_count = eventCount != samplingRate ? 0 : eventCount;\n        getLogger()->logEvent(clockTest);\n      }\n    }\n  } catch (const std::exception& ex) {\n    // Catch std::domain_error and std::runtime_error\n    log(watchman::ERR, \"Failed get_watch_list : \", ex.what(), \"\\n\");\n  }\n}\n\nvoid sanityCheckThread() noexcept {\n  w_set_thread_name(\"sanitychecks\");\n  auto lastCheck = std::chrono::steady_clock::now();\n  auto interval = std::chrono::minutes(1);\n\n  log(ERR, \"starting sanityCheckThread\\n\");\n  // we want to try the checks in here once per minute, but since\n  // this is mildly ghetto we don't have a way to directly signal\n  // this thread when we're shutting down.  So we sleep for a second\n  // at a time and then check to see if a shutdown is in progress\n  // so that we can shutdown with a slightly lower latency than\n  // if we were to sleep for a minute at a time.\n  while (!w_is_stopping()) {\n    auto now = std::chrono::steady_clock::now();\n    if (now - lastCheck < interval) {\n      std::this_thread::sleep_for(std::chrono::seconds(1));\n      continue;\n    }\n\n    lastCheck = now;\n    log(DBG, \"running sanity checks\\n\");\n\n    auto client = w_stm_connect(6000);\n    if (client.hasError()) {\n      log(watchman::FATAL,\n          \"Failed to connect to myself for sanity check: \",\n          folly::errnoStr(client.error()),\n          \"\\n\");\n      /* NOTREACHED */\n    }\n    check_my_sock(client.value().get());\n    do_clock_check(client.value().get());\n  }\n  log(ERR, \"done with sanityCheckThread\\n\");\n}\n} // namespace\n\nvoid startSanityCheckThread() {\n  // The blocking pipe reads we use on win32 can cause us to get blocked\n  // forever running the sanity checks, so skip this on win32\n#ifndef _WIN32\n  std::thread thr(sanityCheckThread);\n  thr.detach();\n#endif\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/SanityCheck.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\nnamespace watchman {\nvoid startSanityCheckThread();\n}\n"
  },
  {
    "path": "watchman/Serde.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\n/**\n\n`watchman::serde` provides convenient mapping between JSON or BSER serialization\nand standard and custom C++ data types.\n\nBrief API overview:\n\n`serde::encode(value)` converts `value` into its JSON representation.\n\n`serde::decode<T>(json)` decodes a JSON value into T, or throws an exception\nif not possible.\n\nTo define how a struct is mapped, derive from `serde::Object` and implement a\n`map` template function. See the `serde::Object` documentation.\n\nTo define how a fixed-width tuple is mapped, derive from\n`serde::Array<Required, T...>`, where `Required` is the minimum number of array\nelements required.\n\n\n# Protocol Evolution\n\nThis API allows protocol evolution. New fields can be added to structs or\ntuples, and unrecognized fields are never an error.\n\n*/\nnamespace watchman::serde {\n\n// TODO: introduce a proper exception hierarchy\nusing MissingKey = std::domain_error;\n\nnamespace detail {\n\nclass FieldEncoder {\n public:\n  explicit FieldEncoder(std::unordered_map<w_string, json_ref>& map)\n      : map_{map} {}\n\n  template <size_t N, typename T>\n  void operator()(const char (&name)[N], const T& field);\n\n  template <size_t N, typename T>\n  void required(const char (&name)[N], const T& field);\n\n  template <size_t N, typename T, typename P>\n  void skip_if(const char (&name)[N], const T& field, P&& predicate);\n\n  template <size_t N, typename T>\n  void skip_if_default(const char (&name)[N], const T& field);\n\n private:\n  std::unordered_map<w_string, json_ref>& map_;\n};\n\nclass FieldDecoder {\n public:\n  explicit FieldDecoder(const std::unordered_map<w_string, json_ref>& map)\n      : map_{map} {}\n\n  template <size_t N, typename T>\n  void operator()(const char (&name)[N], T& field);\n\n  template <size_t N, typename T>\n  void required(const char (&name)[N], T& field);\n\n  template <size_t N, typename T, typename P>\n  void skip_if(const char (&name)[N], T& field, P&& predicate);\n\n  template <size_t N, typename T>\n  void skip_if_default(const char (&name)[N], T& field);\n\n private:\n  const std::unordered_map<w_string, json_ref>& map_;\n};\n\n} // namespace detail\n\n/**\n * Derive from Object to indicate that a struct has a mapping to and from a JSON\n * or BSER object.\n *\n * Implement a `map` member function that provides the name of each field.\n *\n * template <typename X>\n * void map(X& x) {\n *   x(\"field\", field);\n * }\n *\n * X is an opaque type that defines the mapping between JSON object elements and\n * struct members.\n *\n * Calling `x` defines a field mapping with the default rules:\n * When deserializing, if present, it must have the correct type.\n * If not present, the field is default-initialized.\n * The field is always serialized on output.\n *\n * Calling `x.required` fails deserialization if the key is not present.\n *\n * Calling `x.skip_if_default` registers a mapping with default rules except\n * that, if the value compares equal to the default value for that type, it will\n * not be serialized.\n *\n * `x.skip_if` is the same as `x.skip_if_default` except that it takes an\n * arbitrary predicate.\n *\n * Do not conditionally change the field mappings at runtime.\n */\nstruct Object {};\n\n/**\n * Derive from Array to indicate conversion to and from roughly fixed-sized\n * arrays. Encoding produces an array of length sizeof...(E) and decoding will\n * succeed as long as the array has 'Required' values or more.\n */\ntemplate <size_t Required, typename... E>\nstruct Array : std::tuple<E...> {};\n\n/**\n * Specializations provide two static members: toJson and fromJson.\n *\n * `static json_ref toJson(T value)`\n * returns a JSON encoding of the given value.\n *\n * `static T fromJson(const json_ref& v)`\n * returns a decoded value, or throws an exception if `v` has the wrong type.\n */\ntemplate <typename T>\nstruct Serde {\n  static_assert(\n      std::is_base_of_v<Object, T>,\n      \"T must either derive Object or provide a Serde specialization\");\n\n  static json_ref toJson(const T& v) {\n    std::unordered_map<w_string, json_ref> o;\n    detail::FieldEncoder encoder{o};\n    // The const_cast is gross, but allowing `map` to run in both read and write\n    // contexts would otherwise require an additional template parameter.\n    // FieldEncoder::operator() takes a const field, so there isn't much real\n    // risk here.\n    const_cast<T&>(v).map(encoder);\n    return json_object(std::move(o));\n  }\n\n  static T fromJson(const json_ref& v) {\n    // TODO: throw a nicer error when v is not an object\n    auto& o = v.object();\n    if (JSON_OBJECT != v.type()) {\n      // throw a nice error\n    }\n\n    detail::FieldDecoder decoder{o};\n    T rv;\n    rv.map(decoder);\n    return rv;\n  }\n};\n\n// Primitive Serde Instances\n// TODO: flesh this out\n\ntemplate <>\nstruct Serde<json_ref> {\n  static json_ref toJson(json_ref v) {\n    return v;\n  }\n  static json_ref fromJson(json_ref v) {\n    return v;\n  }\n};\n\ntemplate <>\nstruct Serde<bool> {\n  static json_ref toJson(bool v) {\n    return json_boolean(v);\n  }\n\n  static bool fromJson(const json_ref& v) {\n    // TODO: error checking\n    return v.asBool();\n  }\n};\n\ntemplate <>\nstruct Serde<json_int_t> {\n  static json_ref toJson(json_int_t i) {\n    return json_integer(i);\n  }\n\n  static json_int_t fromJson(const json_ref& v) {\n    // TODO: error checking\n    return v.asInt();\n  }\n};\n\ntemplate <>\nstruct Serde<w_string> {\n  static json_ref toJson(const w_string& v) {\n    return w_string_to_json(v);\n  }\n\n  static w_string fromJson(const json_ref& v) {\n    // TODO: error checking\n    return v.asString();\n  }\n};\n\ntemplate <>\nstruct Serde<std::string> {\n  static json_ref toJson(const std::string& v) {\n    return typed_string_to_json(v);\n  }\n\n  static std::string fromJson(const json_ref& v) {\n    return v.asString().string();\n  }\n};\n\n/**\n * Convert any supported C++ value to its JSON representation.\n */\ntemplate <typename T>\njson_ref encode(T&& v) {\n  using Base = std::remove_const_t<std::remove_reference_t<T>>;\n  if constexpr (std::is_integral_v<Base> && !std::is_same_v<Base, bool>) {\n    // TODO: json_int_t is a signed 64-bit integer. It would be nice to\n    // bounds-check here. It should only be necessary if Base is uint64_t and\n    // the high bit is set.\n    return Serde<json_int_t>::toJson(v);\n  } else {\n    return Serde<Base>::toJson(std::forward<T>(v));\n  }\n}\n\n/**\n * Attempt to decode a C++ value from a JSON value. Throws if decoding fails.\n */\ntemplate <typename T>\nT decode(const json_ref& j) {\n  using Base = std::remove_const_t<std::remove_reference_t<T>>;\n  if constexpr (std::is_integral_v<Base> && !std::is_same_v<Base, bool>) {\n    // TODO: bounds-checking\n    return Serde<json_int_t>::fromJson(j);\n  } else {\n    return Serde<Base>::fromJson(j);\n  }\n}\n\n// Compound Serde Instances\n// TODO: add new specializations as necessary\n\nnamespace detail {\n\ntemplate <size_t I, size_t Required, typename... E>\nstruct PushTuple {\n  static size_t push(\n      std::vector<json_ref>& array,\n      const std::tuple<E...>& tuple,\n      size_t lastNonDefault) {\n    if constexpr (I == sizeof...(E)) {\n      return lastNonDefault;\n    } else {\n      auto& element = std::get<I>(tuple);\n      array.push_back(encode(element));\n\n      return PushTuple<I + 1, Required, E...>::push(\n          array,\n          tuple,\n          (I >= Required && decltype(element){} == element) ? lastNonDefault\n                                                            : (I + 1));\n    }\n  }\n};\n\ntemplate <size_t I, typename... E>\nstruct WriteTuple {\n  static void write(\n      std::tuple<E...>& tuple,\n      const std::vector<json_ref>& array) {\n    if constexpr (I == sizeof...(E)) {\n      return;\n    } else if (I >= array.size()) {\n      return;\n    } else {\n      auto& element = std::get<I>(tuple);\n      element = decode<std::remove_reference_t<decltype(element)>>(array[I]);\n      WriteTuple<I + 1, E...>::write(tuple, array);\n    }\n  }\n};\n\n} // namespace detail\n\ntemplate <size_t Required, typename... E>\nstruct Serde<Array<Required, E...>> {\n  static_assert(Required <= sizeof...(E));\n  using Tuple = Array<Required, E...>;\n\n  static json_ref toJson(const Tuple& tuple) {\n    std::vector<json_ref> array;\n\n    // TODO: We could scan for non-default values and compute a precise size to\n    // reserve. But the worst-case allocation should be fine. After all,\n    // json_ref is only pointer-sized, and optional tuple elements are small and\n    // rare.\n    array.reserve(sizeof...(E));\n    auto size = detail::PushTuple<0, Required, E...>::push(array, tuple, 0);\n    array.erase(array.begin() + size, array.end());\n    return json_array(std::move(array));\n  }\n\n  static Tuple fromJson(const json_ref& j) {\n    Tuple tuple{};\n\n    if (!j.isArray()) {\n      // TODO: throw a nice error\n    }\n    auto& array = j.array();\n    if (array.size() < Required) {\n      // TODO: make a better exception type\n      throw std::domain_error(\"array must have at least N elements\");\n    }\n\n    detail::WriteTuple<0, E...>::write(tuple, array);\n\n    return tuple;\n  }\n};\n\ntemplate <typename T>\nstruct Serde<std::optional<T>> {\n  static json_ref toJson(const std::optional<T>& o) {\n    return o ? Serde<T>::toJson(*o) : json_null();\n  }\n\n  static std::optional<T> fromJson(const json_ref& j) {\n    if (j.isNull()) {\n      return std::nullopt;\n    } else {\n      return Serde<T>::fromJson(j);\n    }\n  }\n};\n\ntemplate <typename T>\nstruct Serde<std::vector<T>> {\n  static json_ref toJson(const std::vector<T>& v) {\n    std::vector<json_ref> arr;\n    arr.reserve(v.size());\n    for (const auto& element : v) {\n      arr.push_back(encode(element));\n    }\n    return json_array(std::move(arr));\n  }\n\n  static std::vector<T> fromJson(const json_ref& j) {\n    auto& array = j.array();\n\n    std::vector<T> result;\n    result.reserve(array.size());\n    for (auto& element : array) {\n      result.push_back(decode<T>(element));\n    }\n    return result;\n  }\n};\n\ntemplate <typename V>\nstruct Serde<std::map<w_string, V>> {\n  static json_ref toJson(const std::map<w_string, V>& m) {\n    std::unordered_map<w_string, json_ref> o;\n    o.reserve(m.size());\n    for (auto& [name, value] : m) {\n      o.insert_or_assign(name, encode(value));\n    }\n    return json_object(std::move(o));\n  }\n\n  static std::map<w_string, V> fromJson(const json_ref& j) {\n    auto& hashmap = j.object();\n\n    std::map<w_string, V> result;\n    for (auto& [key, value] : hashmap) {\n      result.emplace(key, decode<V>(value));\n    }\n    return result;\n  }\n};\n\n/**\n * Type that serializes to null and deserialized from anything.\n */\nstruct Nothing {};\n\ntemplate <>\nstruct Serde<Nothing> {\n  static json_ref toJson(Nothing) {\n    return json_null();\n  }\n\n  static Nothing fromJson(const json_ref&) {\n    return {};\n  }\n};\n\nnamespace detail {\n\ntemplate <size_t N, typename T>\nvoid FieldEncoder::operator()(const char (&name)[N], const T& field) {\n  // TODO: per-field allocation, yikes\n  map_.insert_or_assign(w_string(name, W_STRING_UNICODE), serde::encode(field));\n}\n\ntemplate <size_t N, typename T>\nvoid FieldEncoder::required(const char (&name)[N], const T& field) {\n  // TODO: per-field allocation, yikes\n  map_.insert_or_assign(w_string(name, W_STRING_UNICODE), serde::encode(field));\n}\n\ntemplate <size_t N, typename T, typename P>\nvoid FieldEncoder::skip_if(\n    const char (&name)[N],\n    const T& field,\n    P&& predicate) {\n  // To prevent callers from accidentally mutating the field or capturing other\n  // fields, ensure the predicate has a non-capturing signature.\n  bool (*p)(const T&) = predicate;\n\n  if (p(field)) {\n    return;\n  }\n  (*this)(name, field);\n}\n\ntemplate <size_t N, typename T>\nvoid FieldEncoder::skip_if_default(const char (&name)[N], const T& field) {\n  if (T{} == field) {\n    return;\n  }\n  (*this)(name, field);\n}\n\ntemplate <size_t N, typename T>\nvoid FieldDecoder::operator()(const char (&name)[N], T& field) {\n  // TODO: per-field allocation, yikes\n  auto iter = map_.find(w_string{name});\n  if (iter == map_.end()) {\n    field = T{};\n  } else {\n    field = serde::decode<T>(iter->second);\n  }\n}\n\ntemplate <size_t N, typename T>\nvoid FieldDecoder::required(const char (&name)[N], T& field) {\n  // TODO: per-field allocation, yikes\n  auto iter = map_.find(w_string{name});\n  if (iter == map_.end()) {\n    throw MissingKey{\"key is missing\"};\n  } else {\n    field = serde::decode<T>(iter->second);\n  }\n}\n\ntemplate <size_t N, typename T, typename P>\nvoid FieldDecoder::skip_if(const char (&name)[N], T& field, P&&) {\n  (*this)(name, field);\n}\n\ntemplate <size_t N, typename T>\nvoid FieldDecoder::skip_if_default(const char (&name)[N], T& field) {\n  (*this)(name, field);\n}\n\n} // namespace detail\n\n} // namespace watchman::serde\n"
  },
  {
    "path": "watchman/Shutdown.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Shutdown.h\"\n#include <atomic>\n#include <vector>\n#include \"watchman/watchman_stream.h\"\n\nnamespace {\n\nstatic std::vector<std::shared_ptr<watchman_event>> listener_thread_events;\nstatic std::atomic<bool> stopping = false;\n\n} // namespace\n\nbool w_is_stopping() {\n  return stopping.load(std::memory_order_relaxed);\n}\n\nvoid w_request_shutdown() {\n  stopping.store(true, std::memory_order_relaxed);\n  // Knock listener thread out of poll/accept\n  for (auto& evt : listener_thread_events) {\n    evt->notify();\n  }\n}\n\nvoid w_push_listener_thread_event(std::shared_ptr<watchman_event> event) {\n  listener_thread_events.push_back(std::move(event));\n}\n"
  },
  {
    "path": "watchman/Shutdown.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <memory>\n\nnamespace watchman {\nclass Event;\n}\n\nusing watchman_event = watchman::Event;\n\nbool w_is_stopping();\nvoid w_request_shutdown();\nvoid w_push_listener_thread_event(std::shared_ptr<watchman_event> event);\n"
  },
  {
    "path": "watchman/SignalHandler.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include \"watchman/Logging.h\"\n#include \"watchman/Shutdown.h\"\n\n#ifdef HAVE_SYS_SIGLIST\n#define w_strsignal(val) sys_siglist[(val)]\n#else\n#define w_strsignal(val) strsignal((val))\n#endif\n\nusing namespace watchman;\n\n#ifndef _WIN32\nstatic void crash_handler(int signo, siginfo_t* si, void*) {\n  const char* reason = \"\";\n  if (si) {\n    switch (si->si_signo) {\n      case SIGILL:\n        switch (si->si_code) {\n          case ILL_ILLOPC:\n            reason = \"illegal opcode\";\n            break;\n          case ILL_ILLOPN:\n            reason = \"illegal operand\";\n            break;\n          case ILL_ILLADR:\n            reason = \"illegal addressing mode\";\n            break;\n          case ILL_ILLTRP:\n            reason = \"illegal trap\";\n            break;\n          case ILL_PRVOPC:\n            reason = \"privileged opcode\";\n            break;\n          case ILL_PRVREG:\n            reason = \"privileged register\";\n            break;\n          case ILL_COPROC:\n            reason = \"co-processor error\";\n            break;\n          case ILL_BADSTK:\n            reason = \"internal stack error\";\n            break;\n        }\n        break;\n      case SIGFPE:\n        switch (si->si_code) {\n          case FPE_INTDIV:\n            reason = \"integer divide by zero\";\n            break;\n          case FPE_INTOVF:\n            reason = \"integer overflow\";\n            break;\n          case FPE_FLTDIV:\n            reason = \"floating point divide by zero\";\n            break;\n          case FPE_FLTOVF:\n            reason = \"floating point overflow\";\n            break;\n          case FPE_FLTUND:\n            reason = \"floating point underflow\";\n            break;\n          case FPE_FLTRES:\n            reason = \"floating point inexact result\";\n            break;\n          case FPE_FLTINV:\n            reason = \"invalid floating point operation\";\n            break;\n          case FPE_FLTSUB:\n            reason = \"subscript out of range\";\n            break;\n        }\n        break;\n      case SIGSEGV:\n        switch (si->si_code) {\n          case SEGV_MAPERR:\n            reason = \"address not mapped to object\";\n            break;\n          case SEGV_ACCERR:\n            reason = \"invalid permissions for mapped object\";\n            break;\n        }\n        break;\n#ifdef SIGBUS\n      case SIGBUS:\n        switch (si->si_code) {\n          case BUS_ADRALN:\n            reason = \"invalid address alignment\";\n            break;\n          case BUS_ADRERR:\n            reason = \"non-existent physical address\";\n            break;\n        }\n        break;\n#endif\n    }\n  }\n\n  if (si) {\n    logf_stderr(\n        \"Terminating due to signal {} {} generated by pid={} uid={} {} ({})\\n\",\n        signo,\n        w_strsignal(signo),\n        si->si_pid,\n        si->si_uid,\n        reason,\n        uintptr_t(si->si_value.sival_ptr));\n  } else {\n    logf_stderr(\n        \"Terminating due to signal {} {} {}\\n\",\n        signo,\n        w_strsignal(signo),\n        reason);\n  }\n\n#if defined(HAVE_BACKTRACE) && defined(HAVE_BACKTRACE_SYMBOLS_FD)\n  {\n    void* array[24];\n    size_t size = backtrace(array, sizeof(array) / sizeof(array[0]));\n    backtrace_symbols_fd(array, size, STDERR_FILENO);\n  }\n#endif\n  if (signo == SIGTERM) {\n    w_request_shutdown();\n    return;\n  }\n  // Resend the signal to terminate ourselves with it.\n  // We register crash_handler with SA_RESETHAND so it will\n  // not be invoked a second time.\n  kill(getpid(), signo);\n}\n#endif\n\nnamespace {\n[[noreturn]] void terminationHandler() {\n  auto eptr = std::current_exception();\n  if (eptr) {\n    try {\n      std::rethrow_exception(eptr);\n    } catch (const std::exception& exc) {\n      logf_stderr(\"std::terminate was called. Exception: {}\\n\", exc.what());\n    } catch (...) {\n      logf_stderr(\n          \"std::terminate was called. Exception is not a std::exception.\\n\");\n    }\n  } else {\n    logf_stderr(\"std::terminate was called. There is no current exception.\\n\");\n  }\n  std::abort();\n}\n} // namespace\n\nnamespace watchman {\n\nvoid setup_signal_handlers() {\n#ifndef _WIN32\n  struct sigaction sa;\n\n  memset(&sa, 0, sizeof(sa));\n  sa.sa_sigaction = crash_handler;\n  sa.sa_flags = SA_SIGINFO | SA_RESETHAND;\n\n  sigaction(SIGSEGV, &sa, nullptr);\n#ifdef SIGBUS\n  sigaction(SIGBUS, &sa, nullptr);\n#endif\n  sigaction(SIGFPE, &sa, nullptr);\n  sigaction(SIGILL, &sa, nullptr);\n  sigaction(SIGTERM, &sa, nullptr);\n#else\n  // Don't show error dialogs for background service failures\n  SetErrorMode(SEM_FAILCRITICALERRORS);\n  // also tell the C runtime that we should just abort when\n  // we abort; don't do the crash reporting dialog.\n  _set_abort_behavior(_WRITE_ABORT_MSG, ~0);\n  // Force error output to stderr, don't use a msgbox.\n  _set_error_mode(_OUT_TO_STDERR);\n  // bridge OS exceptions into our FATAL logger so that we can\n  // capture a stack trace.\n  SetUnhandledExceptionFilter(exception_filter);\n#endif\n\n  std::set_terminate(terminationHandler);\n}\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/SignalHandler.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\nnamespace watchman {\n\nvoid setup_signal_handlers();\n\n}\n"
  },
  {
    "path": "watchman/SymlinkTargets.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/SymlinkTargets.h\"\n#include \"watchman/Hash.h\"\n#include \"watchman/ThreadPool.h\"\n#include \"watchman/fs/FileSystem.h\"\n\nnamespace watchman {\n\nusing Node = typename SymlinkTargetCache::Node;\n\nbool SymlinkTargetCacheKey::operator==(\n    const SymlinkTargetCacheKey& other) const {\n  return otime.ticks == other.otime.ticks && relativePath == other.relativePath;\n}\n\nstd::size_t SymlinkTargetCacheKey::hashValue() const {\n  return hash_128_to_64(relativePath.hashValue(), otime.ticks);\n}\n\nSymlinkTargetCache::SymlinkTargetCache(\n    const w_string& rootPath,\n    size_t maxItems,\n    std::chrono::milliseconds errorTTL)\n    : cache_(maxItems, errorTTL), rootPath_(rootPath) {}\n\nfolly::Future<std::shared_ptr<const Node>> SymlinkTargetCache::get(\n    const SymlinkTargetCacheKey& key) {\n  return cache_.get(\n      key, [this](const SymlinkTargetCacheKey& k) { return readLink(k); });\n}\n\nw_string SymlinkTargetCache::readLinkImmediate(\n    const SymlinkTargetCacheKey& key) const {\n  auto fullPath = w_string::pathCat({rootPath_, key.relativePath});\n  return readSymbolicLink(fullPath.c_str());\n}\n\nfolly::Future<w_string> SymlinkTargetCache::readLink(\n    const SymlinkTargetCacheKey& key) const {\n  return folly::makeFuture(key)\n      .via(&getThreadPool())\n      .thenValue(\n          [this](SymlinkTargetCacheKey key) { return readLinkImmediate(key); });\n}\n\nconst w_string& SymlinkTargetCache::rootPath() const {\n  return rootPath_;\n}\n\nCacheStats SymlinkTargetCache::stats() const {\n  return cache_.stats();\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/SymlinkTargets.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <string>\n#include \"watchman/Clock.h\"\n#include \"watchman/LRUCache.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_string.h\"\n#include \"watchman/watchman_system.h\"\n\nnamespace watchman {\nstruct SymlinkTargetCacheKey {\n  // Path relative to the watched root\n  w_string relativePath;\n  // The modification time\n  ClockStamp otime;\n\n  // Computes a hash value for use in the cache map\n  std::size_t hashValue() const;\n  bool operator==(const SymlinkTargetCacheKey& other) const;\n};\n} // namespace watchman\n\nnamespace std {\ntemplate <>\nstruct hash<watchman::SymlinkTargetCacheKey> {\n  std::size_t operator()(watchman::SymlinkTargetCacheKey const& key) const {\n    return key.hashValue();\n  }\n};\n} // namespace std\n\nnamespace watchman {\nclass SymlinkTargetCache {\n public:\n  using Node = LRUCache<SymlinkTargetCacheKey, w_string>::NodeType;\n\n  // Construct a cache for a given root, holding the specified\n  // maximum number of items, using the configured negative\n  // caching TTL.\n  SymlinkTargetCache(\n      const w_string& rootPath,\n      size_t maxItems,\n      std::chrono::milliseconds errorTTL);\n\n  // Obtain the content hash for the given input.\n  // If the result is in the cache it will return a ready future\n  // holding the result.  Otherwise, computeHash will be invoked\n  // to populate the cache.  Returns a future with the result\n  // of the lookup.\n  folly::Future<std::shared_ptr<const Node>> get(\n      const SymlinkTargetCacheKey& key);\n\n  // Read the symlink target.\n  // This will block the calling thread while the I/O is performed.\n  // Throws exceptions for any errors that may occur.\n  w_string readLinkImmediate(const SymlinkTargetCacheKey& key) const;\n\n  // Read the symlink target for a given input via the thread pool.\n  // Returns a future to operate on the result of this async operation\n  folly::Future<w_string> readLink(const SymlinkTargetCacheKey& key) const;\n\n  // Returns the root path that this cache is associated with\n  const w_string& rootPath() const;\n\n  // Returns cache statistics\n  CacheStats stats() const;\n\n private:\n  LRUCache<SymlinkTargetCacheKey, w_string> cache_;\n  w_string rootPath_;\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/ThreadPool.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/ThreadPool.h\"\n#include \"watchman/Logging.h\"\n\nnamespace watchman {\n\nThreadPool& getThreadPool() {\n  static ThreadPool pool;\n  return pool;\n}\n\nThreadPool::~ThreadPool() {\n  stop();\n}\n\nvoid ThreadPool::start(size_t numWorkers, size_t maxItems) {\n  std::unique_lock<std::mutex> lock(mutex_);\n  if (!workers_.empty()) {\n    throw std::runtime_error(\"ThreadPool already started\");\n  }\n  if (stopping_) {\n    throw std::runtime_error(\"Cannot restart a stopped pool\");\n  }\n  maxItems_ = maxItems;\n\n  for (auto i = 0U; i < numWorkers; ++i) {\n    workers_.emplace_back([this, i]() noexcept {\n      w_set_thread_name(\"ThreadPool-\", i);\n      runWorker();\n    });\n  }\n}\n\nvoid ThreadPool::runWorker() {\n  while (true) {\n    folly::Func task;\n\n    {\n      std::unique_lock<std::mutex> lock(mutex_);\n      condition_.wait(lock, [this] { return stopping_ || !tasks_.empty(); });\n      if (stopping_ && tasks_.empty()) {\n        return;\n      }\n      task = std::move(tasks_.front());\n      tasks_.pop_front();\n    }\n\n    task();\n  }\n}\n\nvoid ThreadPool::stop(bool join) {\n  {\n    std::unique_lock<std::mutex> lock(mutex_);\n    stopping_ = true;\n  }\n  condition_.notify_all();\n\n  if (join) {\n    for (auto& worker : workers_) {\n      worker.join();\n    }\n  }\n}\n\nvoid ThreadPool::add(folly::Func func) {\n  {\n    std::unique_lock<std::mutex> lock(mutex_);\n    if (stopping_) {\n      throw std::runtime_error(\"cannot add tasks after pool has stopped\");\n    }\n    if (tasks_.size() + 1 >= maxItems_) {\n      throw std::runtime_error(\"thread pool queue is full\");\n    }\n\n    tasks_.emplace_back(std::move(func));\n  }\n\n  condition_.notify_one();\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/ThreadPool.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <folly/Executor.h>\n#include <condition_variable>\n#include <deque>\n#include <mutex>\n#include <thread>\n#include <vector>\n#include \"watchman/watchman_system.h\" // to avoid system header ordering issue on win32\n\nnamespace watchman {\n\n// Almost the dumbest possible thread pool implementation.\n// This allows us to set an upper bound on the number of concurrent\n// tasks that are executed in the thread pool.  Contrast with\n// std::async which leaves it to the implementation to decide\n// whether each async invocation spawns a thread or uses a\n// thread pool with an unspecified number of threads.\n// Constraining the concurrency is important for watchman so\n// that we can limit the amount of I/O that we might induce.\n\nclass ThreadPool : public folly::Executor {\n public:\n  ThreadPool() = default;\n  ~ThreadPool() override;\n\n  // Start a thread pool with the specified number of worker threads\n  // and the specified upper bound on the number of queued jobs.\n  // The queue limit is intended as a brake in case the system\n  // is under a heavy backlog, and can also help surface issues\n  // where there a task executing in the pool is blocking on\n  // the results of some other task also running in the thread\n  // pool.\n  void start(size_t numWorkers, size_t maxItems);\n\n  // Request that the worker threads terminate.\n  // If `join` is true, wait for the worker threads to terminate.\n  void stop(bool join = true);\n\n  // Run a function in the thread pool.\n  // This queues up the function for asynchronous execution and\n  // may return before func has been executed.\n  // If the thread pool has been stopped, throws a runtime_error.\n  void add(folly::Func func) override;\n\n private:\n  std::vector<std::thread> workers_;\n  std::deque<folly::Func> tasks_;\n\n  std::mutex mutex_;\n  std::condition_variable condition_;\n  bool stopping_{false};\n  size_t maxItems_;\n\n  void runWorker();\n};\n\n// Return a reference to the shared thread pool for the watchman process.\nThreadPool& getThreadPool();\n} // namespace watchman\n"
  },
  {
    "path": "watchman/TriggerCommand.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/TriggerCommand.h\"\n#include <folly/String.h>\n#include \"watchman/Errors.h\"\n#include \"watchman/PDU.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/Shutdown.h\"\n#include \"watchman/UserDir.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/eval.h\"\n#include \"watchman/query/parse.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/sockname.h\"\n#include \"watchman/watchman_stream.h\"\n\nnamespace watchman {\n\nnamespace {\n\nvoid parse_redirection(\n    json_ref trig,\n    std::string& name,\n    int* flags,\n    const char* label) {\n  *flags = 0;\n\n  auto maybe = trig.get_optional(label);\n  if (!maybe) {\n    // Specifying a redirection is optional\n    return;\n  }\n  auto& ele = *maybe;\n\n  if (!ele.isString()) {\n    CommandValidationError::throwf(\"{} must be a string\", label);\n  }\n\n  name = json_string_value(ele);\n  if (name.empty() || name[0] != '>') {\n    CommandValidationError::throwf(\n        \"{}: must be prefixed with either > or >>, got {}\", label, name);\n  }\n\n  *flags = O_CREAT | O_WRONLY;\n\n  if (name[1] == '>') {\n#ifdef _WIN32\n    CommandValidationError::throwf(\n        \"{}: Windows does not support O_APPEND\", label);\n#else\n    *flags |= O_APPEND;\n    name.erase(0, 2);\n#endif\n  } else {\n    *flags |= O_TRUNC;\n    name.erase(0, 1);\n  }\n}\n\nResultErrno<std::unique_ptr<watchman_stream>> prepare_stdin(\n    TriggerCommand* cmd,\n    QueryResult* res) {\n  char stdin_file_name[WATCHMAN_NAME_MAX];\n\n  if (cmd->stdin_style == trigger_input_style::input_dev_null) {\n    return w_stm_open(\"/dev/null\", O_RDONLY | O_CLOEXEC);\n  }\n\n  // Adjust result to fit within the specified limit\n  if (cmd->max_files_stdin > 0) {\n    auto& fileList = res->resultsArray.results;\n    if (fileList.size() > cmd->max_files_stdin) {\n      fileList.erase(fileList.begin() + cmd->max_files_stdin, fileList.end());\n    }\n  }\n\n  /* prepare the input stream for the child process */\n  snprintf(\n      stdin_file_name,\n      sizeof(stdin_file_name),\n      \"%s/wmanXXXXXX\",\n      getTemporaryDirectory().c_str());\n  auto stdin_file = w_mkstemp(stdin_file_name);\n  if (!stdin_file) {\n    int err = errno;\n    logf(\n        ERR,\n        \"unable to create a temporary file: {} {}\\n\",\n        stdin_file_name,\n        folly::errnoStr(err));\n    return err;\n  }\n\n  /* unlink the file, we don't need it in the filesystem;\n   * we'll pass the fd on to the child as stdin */\n  unlink(stdin_file_name); // FIXME: windows path translation\n\n  switch (cmd->stdin_style) {\n    case input_json: {\n      PduBuffer buffer;\n\n      logf(DBG, \"input_json: sending json object to stm\\n\");\n      auto encodeResult = buffer.jsonEncodeToStream(\n          std::move(res->resultsArray).toJson(), stdin_file.get(), 0);\n      if (encodeResult.hasError()) {\n        logf(\n            ERR,\n            \"input_json: failed to write json data to stream: {}\\n\",\n            folly::errnoStr(encodeResult.error()));\n        return encodeResult.error();\n      }\n      break;\n    }\n    case input_name_list:\n      for (auto& name : res->resultsArray.results) {\n        auto& nameStr = json_to_w_string(name);\n        if (stdin_file->write(nameStr.data(), nameStr.size()) !=\n                (int)nameStr.size() ||\n            stdin_file->write(\"\\n\", 1) != 1) {\n          int err = errno;\n          logf(\n              ERR,\n              \"write failure while producing trigger stdin: {}\\n\",\n              folly::errnoStr(err));\n          return err;\n        }\n      }\n      break;\n    case input_dev_null:\n      // already handled above\n      break;\n  }\n\n  stdin_file->rewind();\n  return stdin_file;\n}\n\nvoid spawn_command(\n    const std::shared_ptr<Root>& root,\n    TriggerCommand* cmd,\n    QueryResult* res,\n    ClockSpec* since_spec) {\n  bool file_overflow = false;\n\n  size_t arg_max = ChildProcess::getArgMax();\n\n  size_t argspace_remaining = arg_max;\n\n  // Allow some misc working overhead\n  argspace_remaining -= 32;\n\n  // Record an overflow before we call prepare_stdin(), which mutates\n  // and resizes the results to fit the specified limit.\n  if (cmd->max_files_stdin > 0 &&\n      res->resultsArray.results.size() > cmd->max_files_stdin) {\n    file_overflow = true;\n  }\n\n  auto stdin_file_res = prepare_stdin(cmd, res);\n  if (stdin_file_res.hasError()) {\n    logf(\n        ERR,\n        \"trigger {}:{} {}\\n\",\n        root->root_path,\n        cmd->triggername,\n        folly::errnoStr(stdin_file_res.error()));\n    return;\n  }\n\n  auto stdin_file = std::move(stdin_file_res).value();\n\n  // Assumption: that only one thread will be executing on a given\n  // cmd instance so that mutation of cmd->env is safe.\n  // This is guaranteed in the current architecture.\n\n  // It is way too much of a hassle to try to recreate the clock value if it's\n  // not a relative clock spec, and it's only going to happen on the first run\n  // anyway, so just skip doing that entirely.\n  if (const auto* clock = since_spec\n          ? std::get_if<ClockSpec::Clock>(&since_spec->spec)\n          : nullptr) {\n    cmd->env.set(\"WATCHMAN_SINCE\", clock->position.toClockString());\n  } else {\n    cmd->env.unset(\"WATCHMAN_SINCE\");\n  }\n\n  cmd->env.set(\n      \"WATCHMAN_CLOCK\", res->clockAtStartOfQuery.position().toClockString());\n\n  if (cmd->query->relative_root) {\n    cmd->env.set(\"WATCHMAN_RELATIVE_ROOT\", *cmd->query->relative_root);\n  } else {\n    cmd->env.unset(\"WATCHMAN_RELATIVE_ROOT\");\n  }\n\n  // Compute args\n  std::vector<json_ref> args = cmd->command.value().array();\n\n  if (cmd->append_files) {\n    // Measure how much space the base args take up\n    for (size_t i = 0; i < args.size(); i++) {\n      const char* ele = json_string_value(args[i]);\n\n      argspace_remaining -= strlen(ele) + 1 + sizeof(char*);\n    }\n\n    // Dry run with env to compute space\n    size_t env_size;\n    cmd->env.asEnviron(&env_size);\n    argspace_remaining -= env_size;\n\n    for (const auto& item : res->dedupedFileNames) {\n      // also: NUL terminator and entry in argv\n      uint32_t size = item.size() + 1 + sizeof(char*);\n\n      if (argspace_remaining < size) {\n        file_overflow = true;\n        break;\n      }\n      argspace_remaining -= size;\n\n      args.push_back(w_string_to_json(item));\n    }\n  }\n\n  cmd->env.setBool(\"WATCHMAN_FILES_OVERFLOW\", file_overflow);\n\n  ChildProcess::Options opts;\n  opts.environment() = cmd->env;\n#ifndef _WIN32\n  sigset_t mask;\n  sigemptyset(&mask);\n  opts.setSigMask(mask);\n#endif\n  opts.setFlags(POSIX_SPAWN_SETPGROUP);\n\n  opts.dup2(stdin_file->getFileDescriptor(), STDIN_FILENO);\n\n  if (!cmd->stdout_name.empty()) {\n    opts.open(STDOUT_FILENO, cmd->stdout_name.c_str(), cmd->stdout_flags, 0666);\n  } else {\n    opts.dup2(FileDescriptor::stdOut(), STDOUT_FILENO);\n  }\n\n  if (!cmd->stderr_name.empty()) {\n    opts.open(STDERR_FILENO, cmd->stderr_name.c_str(), cmd->stderr_flags, 0666);\n  } else {\n    opts.dup2(FileDescriptor::stdErr(), STDERR_FILENO);\n  }\n\n  // Figure out the appropriate cwd\n  w_string working_dir =\n      cmd->query->relative_root ? *cmd->query->relative_root : root->root_path;\n\n  auto cwd = cmd->definition.get_optional(\"chdir\");\n  if (cwd) {\n    auto target = json_to_w_string(*cwd);\n    if (w_string_path_is_absolute(target)) {\n      working_dir = target;\n    } else {\n      working_dir = w_string::pathCat({working_dir, target});\n    }\n  }\n\n  log(DBG, \"using \", working_dir, \" for working dir\\n\");\n  opts.chdir(working_dir.c_str());\n\n  try {\n    if (cmd->current_proc) {\n      cmd->current_proc->kill();\n      cmd->current_proc->wait();\n    }\n    cmd->current_proc = std::make_unique<ChildProcess>(\n        json_array(std::move(args)), std::move(opts));\n  } catch (const std::exception& exc) {\n    log(ERR,\n        \"trigger \",\n        root->root_path,\n        \":\",\n        cmd->triggername,\n        \" failed: \",\n        exc.what(),\n        \"\\n\");\n  }\n\n  // We have integration tests that check for this string\n  log(cmd->current_proc ? DBG : ERR, \"posix_spawnp: \", cmd->triggername, \"\\n\");\n}\n\n} // namespace\n\nTriggerCommand::TriggerCommand(\n    SavedStateFactory savedStateFactory,\n    const std::shared_ptr<Root>& root,\n    const json_ref& trig)\n    : definition(trig),\n      append_files(false),\n      stdin_style(input_dev_null),\n      max_files_stdin(0),\n      stdout_flags(0),\n      stderr_flags(0),\n      savedStateFactory_{savedStateFactory},\n      ping_(w_event_make_sockets()) {\n  auto queryDef = json_object();\n  auto expr = definition.get_optional(\"expression\");\n  if (expr) {\n    queryDef.set(\"expression\", json_ref(*expr));\n  }\n  auto relative_root = definition.get_optional(\"relative_root\");\n  if (relative_root) {\n    json_object_set_nocheck(queryDef, \"relative_root\", *relative_root);\n  }\n\n  query = parseQuery(root, queryDef);\n  if (!query) {\n    return;\n  }\n\n  auto name = trig.get_optional(\"name\");\n  if (!name || !name->isString()) {\n    throw CommandValidationError(\"invalid or missing name\");\n  }\n  triggername = json_to_w_string(*name);\n\n  auto cmd = definition.get_optional(\"command\");\n  if (!cmd || !cmd->isArray() || !json_array_size(*cmd)) {\n    throw CommandValidationError(\"invalid command array\");\n  }\n  command = *cmd;\n\n  append_files = trig.get_default(\"append_files\", json_false()).asBool();\n  if (append_files) {\n    // This is unfortunately a bit of a hack.  When appending files to the\n    // command line we need a list of just the file names.  We would normally\n    // just set the field list to contain the name, but that may conflict with\n    // the setting for the \"stdin\" property that is managed below; if they\n    // didn't ask for the name, we can't just force it in. As a bit of an\n    // \"easy\" workaround, we'll capture the list of names from the deduping\n    // mechanism.\n    query->dedup_results = true;\n  }\n\n  auto ele = definition.get_optional(\"stdin\");\n  if (!ele) {\n    stdin_style = input_dev_null;\n  } else if (ele->isArray()) {\n    stdin_style = input_json;\n    parse_field_list(ele, &query->fieldList);\n  } else if (ele->isString()) {\n    const char* str = json_string_value(*ele);\n    if (!strcmp(str, \"/dev/null\")) {\n      stdin_style = input_dev_null;\n    } else if (!strcmp(str, \"NAME_PER_LINE\")) {\n      stdin_style = input_name_list;\n      parse_field_list(\n          json_array({typed_string_to_json(\"name\")}), &query->fieldList);\n    } else {\n      CommandValidationError::throwf(\"invalid stdin value {}\", str);\n    }\n  } else {\n    throw CommandValidationError(\"invalid value for stdin\");\n  }\n\n  // unlimited unless specified\n  auto ival = trig.get_default(\"max_files_stdin\", json_integer(0)).asInt();\n  if (ival < 0) {\n    throw CommandValidationError(\"max_files_stdin must be >= 0\");\n  }\n  max_files_stdin = ival;\n\n  parse_redirection(trig, stdout_name, &stdout_flags, \"stdout\");\n  parse_redirection(trig, stderr_name, &stderr_flags, \"stderr\");\n\n  // Set some standard vars\n  env.set(\n      {{\"WATCHMAN_ROOT\", root->root_path},\n       {\"WATCHMAN_SOCK\", get_sock_name_legacy()},\n       {\"WATCHMAN_TRIGGER\", triggername}});\n}\n\nTriggerCommand::~TriggerCommand() {\n  if (triggerThread_.joinable() && !stopTrigger_) {\n    // We could try to call stop() here, but that is paving over the problem,\n    // especially if we happen to be the triggerThread_ for some reason.\n    log(FATAL, \"destroying trigger without stopping it first\\n\");\n  }\n}\n\nvoid TriggerCommand::run(const std::shared_ptr<Root>& root) {\n  std::vector<std::shared_ptr<const Publisher::Item>> pending;\n  w_set_thread_name(\n      \"trigger \", triggername.view(), \" \", root->root_path.view());\n\n  try {\n    EventPoll pfd[1];\n    pfd[0].evt = ping_.get();\n\n    log(DBG, \"waiting for settle\\n\");\n\n    while (!w_is_stopping() && !stopTrigger_) {\n      ignore_result(w_poll_events(pfd, 1, 86400));\n      if (w_is_stopping() || stopTrigger_) {\n        break;\n      }\n      while (ping_->testAndClear()) {\n        pending.clear();\n        subscriber_->getPending(pending);\n        bool seenSettle = false;\n        for (auto& item : pending) {\n          if (item->payload.get_optional(\"settled\")) {\n            seenSettle = true;\n            break;\n          }\n        }\n\n        if (seenSettle) {\n          if (!maybeSpawn(root)) {\n            continue;\n          }\n          waitNoIntr();\n        }\n      }\n    }\n\n    if (current_proc) {\n      current_proc->kill();\n      current_proc->wait();\n    }\n  } catch (const std::exception& exc) {\n    log(ERR, \"Uncaught exception in trigger thread: \", exc.what(), \"\\n\");\n  }\n\n  log(DBG, \"out of loop\\n\");\n}\n\nvoid TriggerCommand::stop() {\n  stopTrigger_ = true;\n  if (triggerThread_.joinable()) {\n    ping_->notify();\n    triggerThread_.join();\n  }\n}\n\nvoid TriggerCommand::start(const std::shared_ptr<Root>& root) {\n  subscriber_ =\n      root->unilateralResponses->subscribe([this] { ping_->notify(); });\n  triggerThread_ = std::thread([this, root] {\n    try {\n      run(root);\n    } catch (const std::exception& e) {\n      log(ERR, \"exception in trigger thread: \", e.what(), \"\\n\");\n    }\n  });\n}\n\nbool TriggerCommand::maybeSpawn(const std::shared_ptr<Root>& root) {\n  bool didRun = false;\n\n  // If it looks like we're in a repo undergoing a rebase or\n  // other similar operation, we want to defer triggers until\n  // things settle down\n  if (root->view()->isVCSOperationInProgress()) {\n    logf(DBG, \"deferring triggers until VCS operations complete\\n\");\n    return false;\n  }\n\n  auto since_spec = query->since_spec.get();\n\n  if (const auto* clock = since_spec\n          ? std::get_if<ClockSpec::Clock>(&since_spec->spec)\n          : nullptr) {\n    logf(\n        DBG,\n        \"running trigger \\\"{}\\\" rules! since {}\\n\",\n        triggername,\n        clock->position.ticks);\n  } else {\n    logf(DBG, \"running trigger \\\"{}\\\" rules!\\n\", triggername);\n  }\n\n  // Triggers never need to sync explicitly; we are only dispatched\n  // at settle points which are by definition sync'd to the present time\n  query->sync_timeout = std::chrono::milliseconds(0);\n  log(DBG, \"assessing trigger \", triggername, \"\\n\");\n  try {\n    auto res =\n        w_query_execute(query.get(), root, time_generator, savedStateFactory_);\n\n    log(DBG,\n        \"trigger \\\"\",\n        triggername,\n        \"\\\" generated \",\n        res.resultsArray.results.size(),\n        \" results\\n\");\n\n    // create a new spec that will be used the next time\n    auto saved_spec = std::move(query->since_spec);\n    query->since_spec = std::make_unique<ClockSpec>(res.clockAtStartOfQuery);\n\n    log(DBG,\n        \"updating trigger \\\"\",\n        triggername,\n        \"\\\" use \",\n        res.clockAtStartOfQuery.position().ticks,\n        \" ticks next time\\n\");\n\n    if (!res.resultsArray.results.empty()) {\n      didRun = true;\n      spawn_command(root, this, &res, saved_spec.get());\n    }\n    return didRun;\n  } catch (const QueryExecError& e) {\n    log(ERR,\n        \"error running trigger \\\"\",\n        triggername,\n        \"\\\" query: \",\n        e.what(),\n        \"\\n\");\n    return false;\n  }\n}\n\nbool TriggerCommand::waitNoIntr() {\n  if (!w_is_stopping() && !stopTrigger_) {\n    if (current_proc && current_proc->terminated()) {\n      current_proc.reset();\n      return true;\n    }\n  }\n  return false;\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/TriggerCommand.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <thread>\n\n#include \"watchman/ChildProcess.h\"\n#include \"watchman/PubSub.h\"\n#include \"watchman/saved_state/SavedStateInterface.h\"\n\nnamespace watchman {\n\nclass Event;\nclass Root;\nstruct Query;\n\nenum trigger_input_style { input_dev_null, input_json, input_name_list };\n\nstruct TriggerCommand {\n  w_string triggername;\n  std::shared_ptr<Query> query;\n  json_ref definition;\n  std::optional<json_ref> command;\n  ChildProcess::Environment env;\n\n  bool append_files;\n  enum trigger_input_style stdin_style;\n  uint32_t max_files_stdin;\n\n  int stdout_flags;\n  int stderr_flags;\n  std::string stdout_name;\n  std::string stderr_name;\n\n  /* While we are running, this holds the pid\n   * of the running process */\n  std::unique_ptr<ChildProcess> current_proc;\n\n  TriggerCommand(\n      SavedStateFactory savedStateFactory,\n      const std::shared_ptr<Root>& root,\n      const json_ref& trig);\n  ~TriggerCommand();\n\n  void stop();\n  void start(const std::shared_ptr<Root>& root);\n\n private:\n  TriggerCommand(const TriggerCommand&) = delete;\n  TriggerCommand(TriggerCommand&&) = delete;\n\n  TriggerCommand& operator=(const TriggerCommand&) = delete;\n  TriggerCommand& operator=(TriggerCommand&&) = delete;\n\n  void run(const std::shared_ptr<Root>& root);\n  bool maybeSpawn(const std::shared_ptr<Root>& root);\n  bool waitNoIntr();\n\n  const SavedStateFactory savedStateFactory_;\n  std::thread triggerThread_;\n  std::shared_ptr<Publisher::Subscriber> subscriber_;\n  std::unique_ptr<Event> ping_;\n  bool stopTrigger_{false};\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/UserDir.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/UserDir.h\"\n#include <eden/common/utils/StringConv.h>\n#include <fmt/core.h>\n#include <folly/String.h>\n#include <folly/portability/Unistd.h>\n#include \"watchman/Logging.h\"\n#include \"watchman/Options.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/portability/WinError.h\"\n\n#ifdef _WIN32\n#include <Lmcons.h> // @manual\n#include <Shlobj.h> // @manual\n#else\n#include <pwd.h>\n#endif\n\nnamespace watchman {\n\nnamespace {\n\nconst char*\ngetEnvWithFallback(const char* name1, const char* name2, const char* fallback) {\n  const char* val = getenv(name1);\n  if (!val || *val == 0) {\n    val = getenv(name2);\n  }\n  if (!val || *val == 0) {\n    val = fallback;\n  }\n\n  return val;\n}\n\n#ifdef _WIN32\nstd::string getWatchmanAppDataPath() {\n  PWSTR local_app_data = nullptr;\n  auto res =\n      SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, nullptr, &local_app_data);\n  if (res != S_OK) {\n    logf(\n        FATAL,\n        \"SHGetKnownFolderPath FOLDERID_LocalAppData failed: {}\\n\",\n        win32_strerror(res));\n  }\n  SCOPE_EXIT {\n    CoTaskMemFree(local_app_data);\n  };\n  // Perform path mapping from wide string to our preferred UTF8\n  w_string temp_location(local_app_data, wcslen(local_app_data));\n  // and use the watchman subdir of LOCALAPPDATA\n  auto watchmanDir = fmt::format(\"{}/watchman\", temp_location);\n  if (mkdir(watchmanDir.c_str(), 0700) == 0 || errno == EEXIST) {\n    return watchmanDir;\n  }\n  logf(\n      ERR,\n      \"failed to create directory {}: {}\\n\",\n      watchmanDir,\n      folly::errnoStr(errno));\n  exit(1);\n}\n\nconst std::string& getCachedWatchmanAppDataPath() {\n  static std::string path = getWatchmanAppDataPath();\n  return path;\n}\n#endif\n\nstd::string computeTemporaryDirectory() {\n#ifdef _WIN32\n  if (!flags.test_state_dir.empty()) {\n    return flags.test_state_dir;\n  } else {\n    return getCachedWatchmanAppDataPath();\n  }\n#else\n  return getEnvWithFallback(\"TMPDIR\", \"TMP\", \"/tmp\");\n#endif\n}\n\n} // namespace\n\nstd::string computeUserName() {\n#ifdef _WIN32\n  // We don't trust the environment on Win32 because in some situations\n  // the environment may contain the domain name like `WORKGROUP\\user`\n  // which can confuse some path construction we do later on.\n  WCHAR userW[1 + UNLEN];\n  DWORD size = static_cast<DWORD>(std::size(userW));\n  if (GetUserNameW(userW, &size) && size > 0) {\n    // Constructing a w_string from a WCHAR* will convert to UTF-8\n    // -1 because the size includes the terminating null character.\n    std::wstring_view user(userW, size - 1);\n    return facebook::eden::wideToMultibyteString<std::string>(user);\n  }\n  DWORD lastError = GetLastError();\n\n  log(FATAL,\n      \"GetUserName failed: \",\n      win32_strerror(lastError),\n      \". I don't know who you are!?\\n\");\n#else\n  const char* user = getEnvWithFallback(\"USER\", \"LOGNAME\", nullptr);\n  if (user) {\n    return user;\n  }\n\n  uid_t uid = getuid();\n  struct passwd* pw = getpwuid(uid);\n  if (!pw) {\n    log(FATAL,\n        \"getpwuid(\",\n        uid,\n        \") failed: \",\n        folly::errnoStr(errno),\n        \". I don't know who you are\\n\");\n  }\n\n  user = pw->pw_name;\n  if (user) {\n    return user;\n  }\n\n  log(FATAL, \"watchman requires that you set $USER in your env\\n\");\n#endif\n  throw std::logic_error(\"unreachable\");\n}\n\nstd::string computeHomeDirectory() {\n#ifdef _WIN32\n  const char* home = getenv(\"USERPROFILE\");\n  if (!home) {\n    const char* drive = getenv(\"HOMEDRIVE\");\n    const char* path = getenv(\"HOMEPATH\");\n    if (!drive && !path) {\n      log(FATAL,\n          \"Failed to determine home directory based on USERPROFILE, HOMEDRIVE, and HOMEPATH\\n\");\n    }\n    return std::string(drive) + path;\n  }\n  return home;\n#else\n  uid_t uid = getuid();\n  struct passwd* pw = getpwuid(uid);\n\n  if (pw) {\n    return pw->pw_dir;\n  }\n\n  const char* home = getenv(\"HOME\");\n  if (!home) {\n    log(FATAL,\n        \"Failed to determine home directory based on getpwuid and HOME\\n\");\n  }\n  return home;\n#endif\n}\n\nconst std::string& getHomeDirectory() {\n  static std::string homeDir = computeHomeDirectory();\n  return homeDir;\n}\n\nconst std::string& getTemporaryDirectory() {\n  static std::string tmpdir = computeTemporaryDirectory();\n  return tmpdir;\n}\n\nstd::string computeXDGStateHomeDirectory() {\n  char* xdgStateHome = getenv(\"XDG_STATE_HOME\");\n\n  // https://specifications.freedesktop.org/basedir-spec/latest/#variables\n  // $XDG_STATE_HOME is either not set or empty, a default equal to\n  // $HOME/.local/state should be used.\n  if (!xdgStateHome || *xdgStateHome == 0) {\n    return fmt::format(\"{}/.local/state\", getHomeDirectory());\n  }\n\n  return xdgStateHome;\n}\n\nconst std::string& getXDGStateHomeDirectory() {\n  static std::string xdgStateHome = computeXDGStateHomeDirectory();\n  return xdgStateHome;\n}\n\nstd::string computeWatchmanStateDirectory(const std::string& user) {\n  if (!flags.test_state_dir.empty()) {\n    return fmt::format(\"{}/{}-state\", flags.test_state_dir, user);\n  }\n\n  char* testStateDir = getenv(\"WATCHMAN_TEST_STATE_DIR\");\n  if (testStateDir) {\n    return testStateDir;\n  }\n\n#ifdef _WIN32\n  return getCachedWatchmanAppDataPath();\n#else\n  auto state_parent =\n#if defined(WATCHMAN_USE_XDG_STATE_HOME)\n      fmt::format(\"{}/watchman\", getXDGStateHomeDirectory())\n#elif defined(WATCHMAN_STATE_DIR)\n      WATCHMAN_STATE_DIR\n#else\n      getTemporaryDirectory().c_str()\n#endif\n      ;\n  return fmt::format(\"{}/{}-state\", state_parent, user);\n#endif\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/UserDir.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <string>\n\nnamespace watchman {\n\n/**\n * Returns the username of the current user.\n */\nstd::string computeUserName();\n\n/**\n * Returns a cached reference to the current user's temporary directory.\n */\nconst std::string& getTemporaryDirectory();\n\n/**\n * Returns a cached reference to the current user's home directory.\n */\nconst std::string& getHomeDirectory();\n\n/**\n * Computes the Watchman state directory corresponding to the given user name.\n */\nstd::string computeWatchmanStateDirectory(const std::string& user);\n} // namespace watchman\n"
  },
  {
    "path": "watchman/WatchmanConfig.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/WatchmanConfig.h\"\n\n#include <folly/ExceptionString.h>\n#include <folly/Synchronized.h>\n#include <optional>\n\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n\nusing namespace watchman;\n\nnamespace {\n\nstruct ConfigState {\n  std::optional<json_ref> global_cfg;\n  w_string global_config_file_path;\n};\nfolly::Synchronized<ConfigState> configState;\n\nstd::optional<std::pair<json_ref, w_string>> loadSystemConfig() {\n  const char* cfg_file = getenv(\"WATCHMAN_CONFIG_FILE\");\n#ifdef WATCHMAN_CONFIG_FILE\n  if (!cfg_file) {\n    cfg_file = WATCHMAN_CONFIG_FILE;\n  }\n#endif\n  if (!cfg_file || cfg_file[0] == '\\0') {\n    return std::nullopt;\n  }\n\n  std::string cfg_file_default = std::string{cfg_file} + \".default\";\n  const char* current_cfg_file;\n\n  json_ref config = json_null();\n  try {\n    // Try to load system watchman configuration\n    try {\n      current_cfg_file = cfg_file;\n      config = json_load_file(current_cfg_file, 0);\n    } catch (const std::system_error& exc) {\n      if (exc.code() == watchman::error_code::no_such_file_or_directory) {\n        // Fallback to trying to load default watchman configuration if there\n        // is no system configuration\n        try {\n          current_cfg_file = cfg_file_default.c_str();\n          config = json_load_file(current_cfg_file, 0);\n        } catch (const std::system_error& default_exc) {\n          // If there is no default configuration either, just return\n          if (default_exc.code() ==\n              watchman::error_code::no_such_file_or_directory) {\n            return std::nullopt;\n          } else {\n            throw;\n          }\n        }\n      } else {\n        throw;\n      }\n    }\n  } catch (const std::system_error& exc) {\n    logf(\n        ERR,\n        \"Failed to load config file {}: {}\\n\",\n        current_cfg_file,\n        folly::exceptionStr(exc).toStdString());\n    return std::nullopt;\n  } catch (const std::exception& exc) {\n    logf(\n        ERR,\n        \"Failed to parse config file {}: {}\\n\",\n        current_cfg_file,\n        folly::exceptionStr(exc).toStdString());\n    return std::nullopt;\n  }\n\n  if (!config.isObject()) {\n    logf(ERR, \"config {} must be a JSON object\\n\", current_cfg_file);\n    return std::nullopt;\n  }\n\n  return {{config, current_cfg_file}};\n}\n\nstd::optional<json_ref> loadUserConfig() {\n  // TODO(xavierd): We should follow XDG and Windows AppData folder instead.\n  // Helper functions for this are available in UserInfo.h\n  const char* home = getenv(folly::kIsWindows ? \"USERPROFILE\" : \"HOME\");\n  if (!home) {\n    return std::nullopt;\n  }\n  auto path = std::string{home} + \"/.watchman.json\";\n  try {\n    json_ref config = json_load_file(path.c_str(), 0);\n    if (!config.isObject()) {\n      logf(ERR, \"config {} must be a JSON object\\n\", path);\n      return std::nullopt;\n    }\n    return config;\n  } catch (const std::system_error& exc) {\n    if (exc.code() == watchman::error_code::no_such_file_or_directory) {\n      return std::nullopt;\n    }\n    logf(\n        ERR,\n        \"Failed to load config file {}: {}\\n\",\n        path,\n        folly::exceptionStr(exc).toStdString());\n    return std::nullopt;\n  } catch (const std::exception& exc) {\n    logf(\n        ERR,\n        \"Failed to parse config file {}: {}\\n\",\n        path,\n        folly::exceptionStr(exc).toStdString());\n    return std::nullopt;\n  }\n}\n\n} // namespace\n\n/* Called during shutdown to free things so that we run cleanly\n * under valgrind */\nvoid cfg_shutdown() {\n  auto state = configState.wlock();\n  state->global_cfg.reset();\n}\n\nw_string cfg_get_global_config_file_path() {\n  return configState.rlock()->global_config_file_path;\n}\n\nvoid cfg_load_global_config_file() {\n  auto systemConfig = loadSystemConfig();\n  auto userConfig = loadUserConfig();\n\n  auto lockedState = configState.wlock();\n  if (systemConfig) {\n    lockedState->global_cfg = systemConfig->first;\n    lockedState->global_config_file_path = systemConfig->second;\n  }\n\n  if (userConfig) {\n    if (!lockedState->global_cfg) {\n      lockedState->global_cfg = json_object();\n    }\n    for (auto& [key, value] : userConfig->object()) {\n      json_object_set(*lockedState->global_cfg, key.c_str(), value);\n    }\n  }\n}\n\nvoid cfg_set_global(const char* name, const json_ref& val) {\n  auto state = configState.wlock();\n  if (!state->global_cfg) {\n    state->global_cfg = json_object();\n  }\n\n  state->global_cfg->set(name, json_ref(val));\n}\n\nstd::optional<json_ref> cfg_get_json(const char* name) {\n  auto state = configState.rlock();\n  if (state->global_cfg) {\n    return state->global_cfg->get_optional(name);\n  } else {\n    return std::nullopt;\n  }\n}\n\nconst char* cfg_get_string(const char* name, const char* defval) {\n  auto val = cfg_get_json(name);\n  if (!val) {\n    return defval;\n  }\n\n  if (!val->isString()) {\n    throw std::runtime_error(\n        fmt::format(\"Expected config value {} to be a string\", name));\n  }\n  return json_string_value(*val);\n}\n\n// Return true if the json ref is an array of string values\nstatic bool is_array_of_strings(const json_ref& ref) {\n  if (!ref.isArray()) {\n    return false;\n  }\n  for (auto& elt : ref.array()) {\n    if (!elt.isString()) {\n      return false;\n    }\n  }\n  return true;\n}\n\n// Given an array of string values, if that array does not contain\n// a \".watchmanconfig\" entry, prepend it\nstatic void prepend_watchmanconfig_to_array(std::vector<json_ref>& ref) {\n  const char* val;\n\n  if (ref.empty()) {\n    ref.push_back(typed_string_to_json(\".watchmanconfig\", W_STRING_UNICODE));\n    return;\n  }\n\n  val = json_string_value(ref[0]);\n  if (!strcmp(val, \".watchmanconfig\")) {\n    return;\n  }\n  ref.insert(\n      ref.begin(), typed_string_to_json(\".watchmanconfig\", W_STRING_UNICODE));\n}\n\n// Compute the effective value of the root_files configuration and\n// return a json reference.  The caller must decref the ref when done\n// (we may synthesize this value).   Sets enforcing to indicate whether\n// we will only allow watches on the root_files.\n// The array returned by this function (if not NULL) is guaranteed to\n// list .watchmanconfig as its zeroth element.\nstd::optional<json_ref> cfg_compute_root_files(bool* enforcing) {\n  *enforcing = false;\n\n  auto ref = cfg_get_json(\"enforce_root_files\");\n  if (ref) {\n    if (!ref->isBool()) {\n      logf(FATAL, \"Expected config value enforce_root_files to be boolean\\n\");\n    }\n    *enforcing = ref->asBool();\n  }\n\n  ref = cfg_get_json(\"root_files\");\n  if (ref) {\n    if (!is_array_of_strings(*ref)) {\n      logf(FATAL, \"global config root_files must be an array of strings\\n\");\n      *enforcing = false;\n      return std::nullopt;\n    }\n    std::vector<json_ref> arr = ref->array();\n    prepend_watchmanconfig_to_array(arr);\n    return json_array(std::move(arr));\n  }\n\n  // Try legacy root_restrict_files configuration\n  ref = cfg_get_json(\"root_restrict_files\");\n  if (ref) {\n    if (!is_array_of_strings(*ref)) {\n      logf(\n          FATAL,\n          \"deprecated global config root_restrict_files \"\n          \"must be an array of strings\\n\");\n      *enforcing = false;\n      return std::nullopt;\n    }\n    std::vector<json_ref> arr = ref->array();\n    prepend_watchmanconfig_to_array(arr);\n    *enforcing = true;\n    return json_array(std::move(arr));\n  }\n\n  // Synthesize our conservative default value.\n  // .watchmanconfig MUST be first\n  return json_array(\n      {typed_string_to_json(\".watchmanconfig\"),\n       typed_string_to_json(\".hg\"),\n       typed_string_to_json(\".git\"),\n       typed_string_to_json(\".svn\")});\n}\n\n// Produces a string like:  \"`foo`, `bar`, and `baz`\"\nstd::string cfg_pretty_print_root_files(const json_ref& root_files) {\n  std::string result;\n  for (unsigned int i = 0; i < root_files.array().size(); ++i) {\n    const auto& r = root_files.array()[i];\n    if (i > 1 && i == root_files.array().size() - 1) {\n      // We are last in a list of multiple items\n      result.append(\", and \");\n    } else if (i > 0) {\n      result.append(\", \");\n    }\n    result.append(\"`\");\n    result.append(json_string_value(r));\n    result.append(\"`\");\n  }\n  return result;\n}\n\njson_int_t cfg_get_int(const char* name, json_int_t defval) {\n  auto val = cfg_get_json(name);\n  if (!val) {\n    return defval;\n  }\n\n  if (!val->isInt()) {\n    throw std::runtime_error(\n        fmt::format(\"Expected config value {} to be an integer\", name));\n  }\n  return val->asInt();\n}\n\nbool cfg_get_bool(const char* name, bool defval) {\n  auto val = cfg_get_json(name);\n  if (!val) {\n    return defval;\n  }\n\n  if (!val->isBool()) {\n    throw std::runtime_error(\n        fmt::format(\"Expected config value {} to be a boolean\", name));\n  }\n  return val->asBool();\n}\n\ndouble cfg_get_double(const char* name, double defval) {\n  auto val = cfg_get_json(name);\n  if (!val) {\n    return defval;\n  }\n\n  if (!val->isNumber()) {\n    throw std::runtime_error(\n        fmt::format(\"Expected config value {} to be a number\", name));\n  }\n  return json_real_value(*val);\n}\n\n#ifndef _WIN32\n#define MAKE_GET_PERM(PROP, SUFFIX)                                 \\\n  static mode_t get_##PROP##_perm(                                  \\\n      const char* name,                                             \\\n      const json_ref& val,                                          \\\n      bool write_bits,                                              \\\n      bool execute_bits) {                                          \\\n    mode_t ret = 0;                                                 \\\n    auto perm = val.get_optional(#PROP);                            \\\n    if (perm) {                                                     \\\n      if (!perm->isBool()) {                                        \\\n        logf(                                                       \\\n            FATAL,                                                  \\\n            \"Expected config value {}.\" #PROP \" to be a boolean\\n\", \\\n            name);                                                  \\\n      }                                                             \\\n      if (perm->asBool()) {                                         \\\n        ret |= S_IR##SUFFIX;                                        \\\n        if (write_bits) {                                           \\\n          ret |= S_IW##SUFFIX;                                      \\\n        }                                                           \\\n        if (execute_bits) {                                         \\\n          ret |= S_IX##SUFFIX;                                      \\\n        }                                                           \\\n      }                                                             \\\n    }                                                               \\\n    return ret;                                                     \\\n  }\n\nMAKE_GET_PERM(group, GRP)\nMAKE_GET_PERM(others, OTH)\n\n/**\n * This function expects the config to be an object containing the keys 'group'\n * and 'others', each a bool.\n */\nmode_t cfg_get_perms(const char* name, bool write_bits, bool execute_bits) {\n  auto val = cfg_get_json(name);\n  mode_t ret = S_IRUSR | S_IWUSR;\n  if (execute_bits) {\n    ret |= S_IXUSR;\n  }\n\n  if (val) {\n    if (!val->isObject()) {\n      logf(FATAL, \"Expected config value {} to be an object\\n\", name);\n    }\n\n    ret |= get_group_perm(name, *val, write_bits, execute_bits);\n    ret |= get_others_perm(name, *val, write_bits, execute_bits);\n  }\n\n  return ret;\n}\n#endif\n\nconst char* cfg_get_trouble_url() {\n  return cfg_get_string(\n      \"troubleshooting_url\",\n      \"https://facebook.github.io/watchman/docs/troubleshooting.html\");\n}\n\nnamespace watchman {\n\nConfiguration::Configuration() {}\n\nConfiguration::Configuration(std::optional<json_ref> local)\n    : local_{std::move(local)} {}\n\nstd::optional<json_ref> Configuration::get(const char* name) const {\n  // Highest precedence: options set locally\n  if (local_) {\n    std::optional<json_ref> val = local_->get_optional(name);\n    if (val) {\n      return std::move(*val);\n    }\n  }\n  auto state = configState.rlock();\n\n  // then: global config options\n  if (!state->global_cfg) {\n    return std::nullopt;\n  }\n  return state->global_cfg->get_optional(name);\n}\n\nconst char* Configuration::getString(const char* name, const char* defval)\n    const {\n  auto val = get(name);\n  if (!val) {\n    return defval;\n  }\n\n  if (!val->isString()) {\n    throw std::runtime_error(\n        fmt::format(\"Expected config value {} to be a string\", name));\n  }\n  return json_string_value(*val);\n}\n\njson_int_t Configuration::getInt(const char* name, json_int_t defval) const {\n  auto val = get(name);\n  if (!val) {\n    return defval;\n  }\n\n  if (!val->isInt()) {\n    throw std::runtime_error(\n        fmt::format(\"Expected config value {} to be an integer\", name));\n  }\n  return val->asInt();\n}\n\nbool Configuration::getBool(const char* name, bool defval) const {\n  auto val = get(name);\n  if (!val) {\n    return defval;\n  }\n\n  if (!val->isBool()) {\n    throw std::runtime_error(\n        fmt::format(\"Expected config value {} to be a boolean\", name));\n  }\n  return val->asBool();\n}\n\ndouble Configuration::getDouble(const char* name, double defval) const {\n  auto val = get(name);\n  if (!val) {\n    return defval;\n  }\n\n  if (!val->isNumber()) {\n    throw std::runtime_error(\n        fmt::format(\"Expected config value {} to be a number\", name));\n  }\n  return json_real_value(*val);\n}\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/WatchmanConfig.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/Portability.h>\n\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nclass w_string;\n\nvoid cfg_shutdown();\nvoid cfg_load_global_config_file();\nw_string cfg_get_global_config_file_path();\nstd::optional<json_ref> cfg_get_json(const char* name);\nconst char* cfg_get_string(const char* name, const char* defval);\njson_int_t cfg_get_int(const char* name, json_int_t defval);\nbool cfg_get_bool(const char* name, bool defval);\ndouble cfg_get_double(const char* name, double defval);\n#ifndef _WIN32\nmode_t cfg_get_perms(const char* name, bool write_bits, bool execute_bits);\n#endif\nconst char* cfg_get_trouble_url();\nstd::optional<json_ref> cfg_compute_root_files(bool* enforcing);\n\n// Convert root files to comma delimited string for error message\nstd::string cfg_pretty_print_root_files(const json_ref& root_files);\n\nnamespace watchman {\n\n// Folly signal handling will be limited to Linux for now. We eventually want\n// to move all platforms to folly signal handling.\nconstexpr bool kUseFollySignalHandler = folly::kIsLinux;\n\nclass Configuration {\n public:\n  Configuration();\n  explicit Configuration(std::optional<json_ref> local);\n\n  std::optional<json_ref> get(const char* name) const;\n  const char* getString(const char* name, const char* defval) const;\n  json_int_t getInt(const char* name, json_int_t defval) const;\n  bool getBool(const char* name, bool defval) const;\n  double getDouble(const char* name, double defval) const;\n\n private:\n  std::optional<json_ref> local_;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/XattrUtils.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/XattrUtils.h\"\n#include <folly/Exception.h>\n#include <folly/String.h>\n#include \"watchman/GroupLookup.h\"\n#include \"watchman/Logging.h\"\n\n#ifdef __linux__\n#include <sys/xattr.h>\n#endif\n\nnamespace watchman {\n\n#ifdef __linux__\n// The following are lifted from sys/acl.h and inlined to avoid that\n// dependency\nnamespace {\n\n#define ACL_EA_ACCESS \"system.posix_acl_access\"\n#define ACL_EA_VERSION 0x0002\n\n// ACL permission bits\n#define ACL_READ (0x04)\n#define ACL_WRITE (0x02)\n#define ACL_EXECUTE (0x01)\n\n// ACL tag types\n#define ACL_UNDEFINED_TAG (0x00)\n#define ACL_USER_OBJ (0x01)\n#define ACL_USER (0x02)\n#define ACL_GROUP_OBJ (0x04)\n#define ACL_GROUP (0x08)\n#define ACL_MASK (0x10)\n#define ACL_OTHER (0x20)\n\n// ACL qualifier constants\n#define ACL_UNDEFINED_ID ((id_t) - 1)\n\n// Endianness conversion functions\n#if __BYTE_ORDER == __BIG_ENDIAN\n#define cpu_to_le16(w16) le16_to_cpu(w16)\n#define le16_to_cpu(w16) \\\n  ((u_int16_t)((u_int16_t)(w16) >> 8) | (u_int16_t)((u_int16_t)(w16) << 8))\n#define cpu_to_le32(w32) le32_to_cpu(w32)\n#define le32_to_cpu(w32)                             \\\n  ((u_int32_t)((u_int32_t)(w32) >> 24) |             \\\n   (u_int32_t)(((u_int32_t)(w32) >> 8) & 0xFF00) |   \\\n   (u_int32_t)(((u_int32_t)(w32) << 8) & 0xFF0000) | \\\n   (u_int32_t)((u_int32_t)(w32) << 24))\n#elif __BYTE_ORDER == __LITTLE_ENDIAN\n#define cpu_to_le16(w16) ((u_int16_t)(w16))\n#define le16_to_cpu(w16) ((u_int16_t)(w16))\n#define cpu_to_le32(w32) ((u_int32_t)(w32))\n#define le32_to_cpu(w32) ((u_int32_t)(w32))\n#else\n#error unknown endianness?\n#endif\n\n// ACL data structures\nstruct acl_ea_entry {\n  u_int16_t e_tag;\n  u_int16_t e_perm;\n  u_int32_t e_id;\n};\n\nstruct acl_ea_header {\n  u_int32_t a_version;\n  acl_ea_entry a_entries[0];\n};\n} // namespace\n#endif\n\nbool setSecondaryGroupACL(\n    const char* path,\n    const char* secondary_group_name,\n    bool read,\n    bool write,\n    bool execute) {\n#ifdef __linux__\n  // Get the secondary group's gid\n  const struct group* sec_group = w_get_group(secondary_group_name);\n  if (!sec_group) {\n    logf(ERR, \"failed to get group for {}: {}\\n\", path, folly::errnoStr(errno));\n    return false;\n  }\n\n  // Get the path's current permissions, following symlinks\n  struct stat st{};\n  if (stat(path, &st) != 0) {\n    logf(ERR, \"Failed to stat {}: {}\\n\", path, folly::errnoStr(errno));\n    return false;\n  }\n\n  // setxattr doesn't like when just GROUP is supplied, so we will provide\n  // USER_OBJ, GROUP_OBJ, GROUP, MASK, and OTHER (based off of the path's\n  // current permissions)\n  const size_t acl_entry_count = 5;\n\n  // Allocate the memory for the ACL data\n  size_t acl_size =\n      sizeof(acl_ea_header) + (acl_entry_count * sizeof(acl_ea_entry));\n  char* ext_acl_p = (char*)malloc(acl_size);\n\n  if (!ext_acl_p) {\n    logf(\n        ERR,\n        \"failed to allocate memory for extended attribue: {}\\n\",\n        folly::errnoStr(errno));\n    return false;\n  }\n\n  // Set up the header\n  acl_ea_header* header = (acl_ea_header*)ext_acl_p;\n  header->a_version = cpu_to_le32(ACL_EA_VERSION);\n\n  // Set up the 5 entries\n  acl_ea_entry* ext_entry = (acl_ea_entry*)(header + 1);\n\n  // USER_OBJ entry\n  uint16_t user_perm = ((st.st_mode & S_IRUSR) ? ACL_READ : 0) |\n      ((st.st_mode & S_IWUSR) ? ACL_WRITE : 0) |\n      ((st.st_mode & S_IXUSR) ? ACL_EXECUTE : 0);\n  ext_entry->e_tag = cpu_to_le16(ACL_USER_OBJ);\n  ext_entry->e_perm = cpu_to_le16(user_perm);\n  ext_entry->e_id = ACL_UNDEFINED_ID;\n  ext_entry++;\n\n  // GROUP_OBJ entry\n  uint16_t group_perm = ((st.st_mode & S_IRGRP) ? ACL_READ : 0) |\n      ((st.st_mode & S_IWGRP) ? ACL_WRITE : 0) |\n      ((st.st_mode & S_IXGRP) ? ACL_EXECUTE : 0);\n  ext_entry->e_tag = cpu_to_le16(ACL_GROUP_OBJ);\n  ext_entry->e_perm = cpu_to_le16(group_perm);\n  ext_entry->e_id = ACL_UNDEFINED_ID;\n  ext_entry++;\n\n  // ACL_GROUP entry (secondary group)\n  uint16_t sec_group_perm = (read ? ACL_READ : 0) | (write ? ACL_WRITE : 0) |\n      (execute ? ACL_EXECUTE : 0);\n  ext_entry->e_tag = cpu_to_le16(ACL_GROUP);\n  ext_entry->e_perm = cpu_to_le16(sec_group_perm);\n  ext_entry->e_id = cpu_to_le32(sec_group->gr_gid);\n  ext_entry++;\n\n  // MASK entry (calculated using the file's existing group permisisons and the\n  // secondary group permissions)\n  uint16_t mask_perm = group_perm | sec_group_perm;\n  ext_entry->e_tag = cpu_to_le16(ACL_MASK);\n  ext_entry->e_perm = cpu_to_le16(mask_perm);\n  ext_entry->e_id = ACL_UNDEFINED_ID;\n  ext_entry++;\n\n  // OTHER entry\n  uint16_t other_perm = ((st.st_mode & S_IROTH) ? ACL_READ : 0) |\n      ((st.st_mode & S_IWOTH) ? ACL_WRITE : 0) |\n      ((st.st_mode & S_IXOTH) ? ACL_EXECUTE : 0);\n  ext_entry->e_tag = cpu_to_le16(ACL_OTHER);\n  ext_entry->e_perm = cpu_to_le16(other_perm);\n  ext_entry->e_id = ACL_UNDEFINED_ID;\n\n  // Finally, set the ACL xattr on the path and free the allocated memory\n  int ret = setxattr(path, ACL_EA_ACCESS, ext_acl_p, acl_size, 0);\n  free(ext_acl_p);\n\n  if (ret != 0) {\n    logf(ERR, \"failed to set ACL for {} : {}\\n\", path, folly::errnoStr(errno));\n    return false;\n  }\n\n  return true;\n#else\n  (void)path;\n  (void)secondary_group_name;\n  (void)read;\n  (void)write;\n  (void)execute;\n  log(ERR, \"setSecondaryGroupACL() is only implemented on Linux\\n\");\n  return false;\n#endif\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/XattrUtils.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\nnamespace watchman {\n\n/**\n * Sets extended attributes for the given path to allow secondary group access.\n * This function avoids needing to use chmod which wont work if the user is not\n * a member of the secondary group.\n *\n * @param path The path to to set attributes on\n * @param secondary_group_name The name of the secondary group\n * @param read If the secondary group should be given read permissions\n * @param write If the secondary group should be given write permissions\n * @param execute If the secondary group should be given execute permissions\n * @return On Linux, true if the attributes were set successfully, false on\n * error. Always returns false on non-Linux\n */\nbool setSecondaryGroupACL(\n    const char* path,\n    const char* secondary_group_name,\n    bool read,\n    bool write,\n    bool execute);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/benchmarks/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_binary.bzl\", \"cpp_binary\")\n\noncall(\"scm_client_infra\")\n\ncpp_binary(\n    name = \"bser\",\n    srcs = [\"bser.cpp\"],\n    deps = [\n        \"fbsource//third-party/benchmark:benchmark\",\n        \"fbsource//third-party/fmt:fmt\",\n        \"//watchman:bser\",\n    ],\n)\n\ncpp_binary(\n    name = \"string\",\n    srcs = [\"string.cpp\"],\n    deps = [\n        \"fbsource//third-party/benchmark:benchmark\",\n        \"//watchman:string\",\n    ],\n)\n"
  },
  {
    "path": "watchman/benchmarks/bser.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/bser.h\"\n#include <benchmark/benchmark.h>\n#include <fmt/core.h>\n#include <random>\n#include <vector>\n\nnamespace {\n\nstd::vector<char> predictable_bser_data() {\n  constexpr size_t kRootSize = 10000;\n\n  std::unordered_map<w_string, json_ref> fields;\n  fields.emplace(w_string{\"name\"}, typed_string_to_json(\"filename\"));\n  fields.emplace(w_string{\"size\"}, json_integer(10000));\n  fields.emplace(\n      w_string{\"clock\"},\n      typed_string_to_json(\"c:1661943594:3604891:5106627930189791234:22998\"));\n\n  json_ref entry = json_object(std::move(fields));\n\n  std::vector<json_ref> values;\n  values.reserve(kRootSize);\n  for (size_t i = 0; i < kRootSize; ++i) {\n    values.push_back(entry);\n  }\n\n  json_ref root = json_array(std::move(values));\n\n  bser_ctx_t ctx;\n  ctx.bser_version = 2;\n  ctx.bser_capabilities = 0;\n  std::vector<char> output;\n  ctx.dump = [](const char* buffer, size_t size, void* opaque) -> int {\n    auto& output = *static_cast<std::vector<char>*>(opaque);\n    // TODO: quadratic\n    output.insert(output.end(), buffer, buffer + size);\n    return 0;\n  };\n  if (w_bser_dump(&ctx, root, &output)) {\n    throw std::runtime_error(\"w_bser_dump failed\");\n  }\n\n  fmt::print(\"generated {} bytes of predictable BSER data\\n\", output.size());\n  return output;\n}\n\nw_string random_string(std::mt19937& mt) {\n  static const unsigned kMaximumLength = 60;\n  static const char kCharTable[62 + 1] =\n      \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n\n  std::uniform_int_distribution<unsigned> string_length(0, kMaximumLength);\n  std::uniform_int_distribution<unsigned> random_char(0, 61);\n  uint32_t length = string_length(mt);\n\n  char buffer[kMaximumLength];\n  std::generate(buffer, buffer + kMaximumLength, [&] {\n    return kCharTable[random_char(mt)];\n  });\n  return w_string(buffer, length);\n}\n\njson_ref random_value(std::mt19937& mt, unsigned depth);\n\n/**\n * Returns x - y unless y > x, in which case it returns 0.\n */\ninline unsigned clamped_sub(unsigned x, unsigned y) {\n  return x < y ? 0 : (x - y);\n}\n\njson_ref random_array(std::mt19937& mt, unsigned depth) {\n  std::uniform_int_distribution<unsigned> array_length(\n      0, clamped_sub(10, depth));\n  unsigned length = array_length(mt);\n  std::vector<json_ref> elements;\n  elements.reserve(length);\n  for (unsigned i = 0; i < length; ++i) {\n    elements.push_back(random_value(mt, depth + 1));\n  }\n  return json_array(std::move(elements));\n}\n\njson_ref random_object(std::mt19937& mt, unsigned depth) {\n  std::uniform_int_distribution<unsigned> object_length(\n      0, clamped_sub(10, depth));\n  unsigned length = object_length(mt);\n\n  std::unordered_map<w_string, json_ref> elements;\n  for (unsigned i = 0; i < length; ++i) {\n    elements.emplace(random_string(mt), random_value(mt, depth + 1));\n  }\n  return json_object(std::move(elements));\n}\n\njson_ref random_value(std::mt19937& mt, unsigned depth = 0) {\n  std::uniform_int_distribution<unsigned> type(0, 15);\n  std::uniform_int_distribution<unsigned> integer;\n  std::uniform_real_distribution<double> real(-10'000'000.0, 10'000'000.0);\n  switch (type(mt)) {\n    case 0:\n      return json_null();\n    case 1:\n      return json_false();\n    case 2:\n      return json_true();\n    case 3:\n    case 4:\n    case 5:\n      return json_integer(integer(mt));\n    case 6:\n      return json_real(real(mt));\n    case 7:\n    case 8:\n    case 9:\n      return w_string_to_json(random_string(mt));\n    case 10:\n    case 11:\n    case 12:\n      return random_array(mt, depth);\n    case 13:\n    case 14:\n    case 15:\n      return random_object(mt, depth);\n  }\n  abort();\n}\n\nstd::vector<char> unpredictable_bser_data() {\n  // kRootSize 1000 with the default Mersenne-Twister seed produces a BSER\n  // document about one megabyte.\n  const size_t kRootSize = 1000;\n  std::mt19937 mt;\n\n  std::vector<json_ref> values;\n  values.reserve(kRootSize);\n  for (size_t i = 0; i < kRootSize; ++i) {\n    values.push_back(random_value(mt));\n  }\n  json_ref root = json_array(std::move(values));\n\n  bser_ctx_t ctx;\n  ctx.bser_version = 2;\n  ctx.bser_capabilities = 0;\n  std::vector<char> output;\n  ctx.dump = [](const char* buffer, size_t size, void* opaque) -> int {\n    auto& output = *static_cast<std::vector<char>*>(opaque);\n    // TODO: quadratic\n    output.insert(output.end(), buffer, buffer + size);\n    return 0;\n  };\n  if (w_bser_dump(&ctx, root, &output)) {\n    throw std::runtime_error(\"w_bser_dump failed\");\n  }\n\n  fmt::print(\"generated {} bytes of unpredictable BSER data\\n\", output.size());\n  return output;\n}\n\nstatic std::vector<json_ref> leaks;\n\ntemplate <std::vector<char> (*SynthesizeFn)()>\nstruct ParseBenchmark {\n  static std::vector<char> data;\n\n  static void run(benchmark::State& state) {\n    // Comment this line out when profiling with `perf` to avoid seeing\n    // deallocation costs.\n    leaks.clear();\n\n    for (auto _ : state) {\n      leaks.push_back(bunser(data.data(), data.data() + data.size()));\n    }\n  }\n};\n\ntemplate <std::vector<char> (*SynthesizeFn)()>\nstd::vector<char> ParseBenchmark<SynthesizeFn>::data = SynthesizeFn();\n\nvoid bser_parse_predictable(benchmark::State& state) {\n  ParseBenchmark<predictable_bser_data>::run(state);\n}\nBENCHMARK(bser_parse_predictable);\n\nvoid bser_parse_unpredictable(benchmark::State& state) {\n  ParseBenchmark<unpredictable_bser_data>::run(state);\n}\nBENCHMARK(bser_parse_unpredictable);\n\n} // namespace\n\nint main(int argc, char** argv) {\n  ::benchmark::Initialize(&argc, argv);\n  if (::benchmark::ReportUnrecognizedArguments(argc, argv)) {\n    return 1;\n  }\n  ::benchmark::RunSpecifiedBenchmarks();\n}\n"
  },
  {
    "path": "watchman/benchmarks/string.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <benchmark/benchmark.h>\n#include \"watchman/watchman_string.h\"\n\nnamespace {\n\nvoid string_allocate_and_deallocate(benchmark::State& state) {\n  char c[] = \"hello world, how are you?\";\n  for (auto _ : state) {\n    benchmark::DoNotOptimize(w_string{c, sizeof(c) - 1});\n  }\n}\n\nBENCHMARK(string_allocate_and_deallocate);\n\nvoid string_hash(benchmark::State& state) {\n  char c[] = \"if there are no branches in the hash function, constant is fine\";\n  w_string str = c;\n  for (auto _ : state) {\n    benchmark::DoNotOptimize(str.hashValue());\n  }\n}\n\nBENCHMARK(string_hash);\n\nvoid string_piece_hash(benchmark::State& state) {\n  char c[] = \"if there are no branches in the hash function, constant is fine\";\n  w_string_piece piece = c;\n  for (auto _ : state) {\n    benchmark::DoNotOptimize(piece.hashValue());\n  }\n}\n\nBENCHMARK(string_piece_hash);\n\n} // namespace\n\nint main(int argc, char** argv) {\n  ::benchmark::Initialize(&argc, argv);\n  if (::benchmark::ReportUnrecognizedArguments(argc, argv)) {\n    return 1;\n  }\n  ::benchmark::RunSpecifiedBenchmarks();\n}\n"
  },
  {
    "path": "watchman/bser.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/bser.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/thirdparty/jansson/jansson_private.h\"\n\n#include <math.h>\n\n/*\n * This defines a binary serialization of the JSON data objects in this\n * library.  It is designed for use with watchman and is not intended to serve\n * as a general binary JSON interchange format.  In particular, all integers\n * are signed integers and are stored in host byte order to minimize\n * transformation overhead.\n */\n\nnamespace {\n\n/* Return the smallest size int that can store the value */\n#define INT_SIZE(x)                \\\n  (((x) == ((int8_t)x))        ? 1 \\\n       : ((x) == ((int16_t)x)) ? 2 \\\n       : ((x) == ((int32_t)x)) ? 4 \\\n                               : 8)\n\n#define BSER_ARRAY 0x00\n#define BSER_OBJECT 0x01\n#define BSER_BYTESTRING 0x02\n#define BSER_INT8 0x03\n#define BSER_INT16 0x04\n#define BSER_INT32 0x05\n#define BSER_INT64 0x06\n#define BSER_REAL 0x07\n#define BSER_TRUE 0x08\n#define BSER_FALSE 0x09\n#define BSER_NULL 0x0a\n#define BSER_TEMPLATE 0x0b\n#define BSER_SKIP 0x0c\n#define BSER_UTF8STRING 0x0d\n\nconst char bser_true = BSER_TRUE;\nconst char bser_false = BSER_FALSE;\nconst char bser_null = BSER_NULL;\nconst char bser_bytestring_hdr = BSER_BYTESTRING;\nconst char bser_array_hdr = BSER_ARRAY;\nconst char bser_object_hdr = BSER_OBJECT;\nconst char bser_template_hdr = BSER_TEMPLATE;\nconst char bser_utf8string_hdr = BSER_UTF8STRING;\nconst char bser_skip = BSER_SKIP;\n\nconstexpr size_t kMaximumContainerSize = std::numeric_limits<uint32_t>::max();\n\n// We could write the BSER parser to use O(1) stack depth, but in the short term\n// let's limit container depth.\nconstexpr size_t kMaximumDepth = 500;\n\nconstexpr size_t kMaximumReservation = 10000;\n\ntemplate <typename T>\nvoid limitedReservation(T& container, size_t size) {\n  // When parsing BSER, we want to avoid reallocations when\n  // possible. However, hostile inputs can ask for extremely large\n  // arrays and maps. In those cases, simply cap the reservation\n  // request to a reasonable amount before attempting to parse. If\n  // reallocation is necessary, so be it.\n  container.reserve(std::min(size, kMaximumReservation));\n}\n\nbool is_bser_version_supported(const bser_ctx_t* ctx) {\n  return ctx->bser_version == 1 || ctx->bser_version == 2;\n}\n\nint bser_real(const bser_ctx_t* ctx, double val, void* data) {\n  char sz = BSER_REAL;\n  if (!is_bser_version_supported(ctx)) {\n    return -1;\n  }\n\n  if (ctx->dump(&sz, sizeof(sz), data)) {\n    return -1;\n  }\n  return ctx->dump((char*)&val, sizeof(val), data);\n}\n\nint bser_int(const bser_ctx_t* ctx, json_int_t val, void* data) {\n  int8_t i8;\n  int16_t i16;\n  int32_t i32;\n  int64_t i64;\n  char sz;\n  int size = INT_SIZE(val);\n  char* iptr;\n\n  if (!is_bser_version_supported(ctx)) {\n    return -1;\n  }\n\n  switch (size) {\n    case 1:\n      sz = BSER_INT8;\n      i8 = (int8_t)val;\n      iptr = (char*)&i8;\n      break;\n    case 2:\n      sz = BSER_INT16;\n      i16 = (int16_t)val;\n      iptr = (char*)&i16;\n      break;\n    case 4:\n      sz = BSER_INT32;\n      i32 = (int32_t)val;\n      iptr = (char*)&i32;\n      break;\n    case 8:\n      sz = BSER_INT64;\n      i64 = (int64_t)val;\n      iptr = (char*)&i64;\n      break;\n    default:\n      return -1;\n  }\n\n  if (ctx->dump(&sz, sizeof(sz), data)) {\n    return -1;\n  }\n\n  return ctx->dump(iptr, size, data);\n}\n\nint bser_generic_string(\n    const bser_ctx_t* ctx,\n    w_string_piece str,\n    void* data,\n    const char hdr) {\n  if (!is_bser_version_supported(ctx)) {\n    return -1;\n  }\n\n  if (ctx->dump(&hdr, sizeof(hdr), data)) {\n    return -1;\n  }\n\n  if (bser_int(ctx, str.size(), data)) {\n    return -1;\n  }\n\n  if (ctx->dump(str.data(), str.size(), data)) {\n    return -1;\n  }\n\n  return 0;\n}\n\nint bser_bytestring(const bser_ctx_t* ctx, w_string_piece str, void* data) {\n  return bser_generic_string(ctx, str, data, bser_bytestring_hdr);\n}\n\nint bser_utf8string(const bser_ctx_t* ctx, w_string_piece str, void* data) {\n  if ((ctx->bser_capabilities & BSER_CAP_DISABLE_UNICODE) ||\n      ctx->bser_version == 1) {\n    return bser_bytestring(ctx, str, data);\n  }\n  return bser_generic_string(ctx, str, data, bser_utf8string_hdr);\n}\n\nint bser_mixedstring(const bser_ctx_t* ctx, w_string_piece str, void* data) {\n  if (ctx->bser_version != 1 &&\n      !(BSER_CAP_DISABLE_UNICODE_FOR_ERRORS & ctx->bser_capabilities) &&\n      !(BSER_CAP_DISABLE_UNICODE & ctx->bser_capabilities)) {\n    auto utf8_clean = str.asUTF8Clean();\n    return bser_utf8string(ctx, utf8_clean, data);\n  } else {\n    return bser_bytestring(ctx, str, data);\n  }\n}\n\nint bser_array(const bser_ctx_t* ctx, const json_ref& array, void* data);\n\nint bser_template(\n    const bser_ctx_t* ctx,\n    const json_ref& array,\n    const json_ref& templ,\n    void* data) {\n  size_t n = json_array_size(array);\n\n  if (!is_bser_version_supported(ctx)) {\n    return -1;\n  }\n\n  if (ctx->dump(&bser_template_hdr, sizeof(bser_template_hdr), data)) {\n    return -1;\n  }\n\n  // The template goes next\n  if (bser_array(ctx, templ, data)) {\n    return -1;\n  }\n\n  // Now the array of arrays of object values.\n  // How many objects\n  if (bser_int(ctx, n, data)) {\n    return -1;\n  }\n\n  auto& array_arr = array.array();\n  auto& templ_arr = templ.array();\n  size_t pn = templ_arr.size();\n\n  // For each object\n  for (size_t i = 0; i < n; i++) {\n    auto& obj = array_arr[i];\n\n    // For each factored key\n    for (size_t pi = 0; pi < pn; pi++) {\n      const char* key = json_string_value(templ_arr[pi]);\n\n      // Look up the object property\n      auto val = json_object_get(obj, key);\n      if (!val) {\n        // property not set on this one; emit a skip\n        if (ctx->dump(&bser_skip, sizeof(bser_skip), data)) {\n          return -1;\n        }\n        continue;\n      }\n\n      // Emit value\n      if (w_bser_dump(ctx, *val, data)) {\n        return -1;\n      }\n    }\n  }\n\n  return 0;\n}\n\nint bser_array(const bser_ctx_t* ctx, const json_ref& array, void* data) {\n  if (!is_bser_version_supported(ctx)) {\n    return -1;\n  }\n\n  auto templ = json_array_get_template(array);\n  if (templ && !templ->array().empty()) {\n    return bser_template(ctx, array, *templ, data);\n  }\n\n  if (ctx->dump(&bser_array_hdr, sizeof(bser_array_hdr), data)) {\n    return -1;\n  }\n\n  auto& arr = array.array();\n  if (bser_int(ctx, arr.size(), data)) {\n    return -1;\n  }\n\n  for (auto& val : arr) {\n    if (w_bser_dump(ctx, val, data)) {\n      return -1;\n    }\n  }\n\n  return 0;\n}\n\nint bser_object(const bser_ctx_t* ctx, const json_ref& obj, void* data) {\n  size_t n;\n\n  if (!is_bser_version_supported(ctx)) {\n    return -1;\n  }\n\n  if (ctx->dump(&bser_object_hdr, sizeof(bser_object_hdr), data)) {\n    return -1;\n  }\n\n  n = json_object_size(obj);\n  if (bser_int(ctx, n, data)) {\n    return -1;\n  }\n\n  for (auto& it : obj.object()) {\n    auto& key = it.first;\n    auto& val = it.second;\n\n    if (bser_bytestring(ctx, key.c_str(), data)) {\n      return -1;\n    }\n    if (w_bser_dump(ctx, val, data)) {\n      return -1;\n    }\n  }\n\n  return 0;\n}\n\n} // namespace\n\nint w_bser_dump(const bser_ctx_t* ctx, const json_ref& json, void* data) {\n  if (!is_bser_version_supported(ctx)) {\n    return -1;\n  }\n\n  switch (json.type()) {\n    case JSON_NULL:\n      return ctx->dump(&bser_null, sizeof(bser_null), data);\n    case JSON_TRUE:\n      return ctx->dump(&bser_true, sizeof(bser_true), data);\n    case JSON_FALSE:\n      return ctx->dump(&bser_false, sizeof(bser_false), data);\n    case JSON_REAL:\n      return bser_real(ctx, json_real_value(json), data);\n    case JSON_INTEGER:\n      return bser_int(ctx, json.asInt(), data);\n    case JSON_STRING: {\n      auto& wstr = json_to_w_string(json);\n      switch (wstr.type()) {\n        case W_STRING_BYTE:\n          return bser_bytestring(ctx, wstr, data);\n        case W_STRING_UNICODE:\n          return bser_utf8string(ctx, wstr, data);\n        case W_STRING_MIXED:\n          return bser_mixedstring(ctx, wstr, data);\n        default:\n          w_assert(false, \"unknown string type 0x%02x\", wstr.type());\n          return -1;\n      }\n    }\n    case JSON_ARRAY:\n      return bser_array(ctx, json, data);\n    case JSON_OBJECT:\n      return bser_object(ctx, json, data);\n    default:\n      return -1;\n  }\n}\n\nnamespace {\n\nint measure(const char*, size_t size, void* ptr) {\n  auto tot = (json_int_t*)ptr;\n  *tot += size;\n  return 0;\n}\n\n} // namespace\n\nint w_bser_write_pdu(\n    const uint32_t bser_version,\n    const uint32_t bser_capabilities,\n    json_dump_callback_t dump,\n    const json_ref& json,\n    void* data) {\n  json_int_t m_size = 0;\n  bser_ctx_t ctx{bser_version, bser_capabilities, measure};\n\n  if (!is_bser_version_supported(&ctx)) {\n    return -1;\n  }\n\n  if (w_bser_dump(&ctx, json, &m_size)) {\n    return -1;\n  }\n\n  // To actually write the contents\n  ctx.dump = dump;\n\n  if (bser_version == 2) {\n    if (dump(BSER_V2_MAGIC, 2, data)) {\n      return -1;\n    }\n  } else {\n    if (dump(BSER_MAGIC, 2, data)) {\n      return -1;\n    }\n  }\n\n  if (bser_version == 2) {\n    if (dump(\n            (const char*)&bser_capabilities, sizeof(bser_capabilities), data)) {\n      return -1;\n    }\n  }\n\n  if (bser_int(&ctx, m_size, data)) {\n    return -1;\n  }\n\n  if (w_bser_dump(&ctx, json, data)) {\n    return -1;\n  }\n\n  return 0;\n}\n\nnamespace {\n\n/**\n * Contains BserParser state. BSER is a simple format, so the only mutable state\n * is the current pointer.\n *\n * Terminology note:\n * \"parse\" means we know the current value type, so decode and return it.\n * \"expect\" means we don't know the current value type, but the document\n * requires it be a specific type.\n */\nclass BserParser {\n public:\n  BserParser(const char* buf, const char* end)\n      : buf{buf}, start{buf}, end{end} {\n    if (end < buf) {\n      logf(\n          watchman::FATAL,\n          \"end {} < buf {}\",\n          static_cast<const void*>(end),\n          static_cast<const void*>(buf));\n    }\n  }\n\n  json_ref expectValue() {\n    return parseValue(*ensure(1));\n  }\n\n  json_ref parseValue(char value_type) {\n    switch (value_type) {\n      case BSER_INT8:\n      case BSER_INT16:\n      case BSER_INT32:\n      case BSER_INT64:\n        return json_integer(parseInteger(value_type));\n\n      case BSER_BYTESTRING:\n      case BSER_UTF8STRING: {\n        std::string_view str = parseString();\n        return typed_string_to_json(\n            str.data(),\n            str.size(),\n            value_type == BSER_BYTESTRING ? W_STRING_BYTE : W_STRING_UNICODE);\n      }\n\n      case BSER_REAL: {\n        return json_real(parseReal());\n      }\n\n      case BSER_TRUE:\n        return json_true();\n      case BSER_FALSE:\n        return json_false();\n      case BSER_NULL:\n        return json_null();\n      case BSER_ARRAY:\n        return json_array(parseArray());\n      case BSER_TEMPLATE:\n        return parseTemplate();\n      case BSER_OBJECT:\n        return parseObject();\n      default:\n        throw BserParseError(\"invalid bser encoding type: {:02x}\", value_type);\n    }\n  }\n\n private:\n  /**\n   * Ensures `needed` bytes remain in the document, and advances the `buf`\n   * pointer. Returns the old `buf` with the assurance that up to `needed` bytes\n   * are safe to read.\n   */\n  const char* ensure(size_t needed) {\n    assert(end >= buf);\n    if (needed > static_cast<size_t>(end - buf)) {\n      throw BserParseError(\n          \"unexpected EOF at {}: expected {} remaining but total document is {}\",\n          buf - start,\n          needed,\n          end - start);\n    }\n    const char* old = buf;\n    buf += needed;\n    return old;\n  }\n\n  char expectType(std::initializer_list<char> types) {\n    char type = *ensure(1);\n    for (char expected : types) {\n      if (type == expected) {\n        return type;\n      }\n    }\n    std::string expected = \"{\";\n    bool comma = false;\n    for (char type_2 : types) {\n      if (comma) {\n        expected += \",\";\n      } else {\n        comma = true;\n      }\n      expected += std::to_string(static_cast<int>(type_2));\n    }\n    expected += \"}\";\n    throw BserParseError(\n        \"unexpected value type: expected {} but saw {}\",\n        expected,\n        static_cast<int>(type));\n  }\n\n  template <typename T>\n  json_int_t parseInteger() {\n    T v;\n    memcpy(&v, ensure(sizeof(v)), sizeof(v));\n    return v;\n  }\n\n  json_int_t parseInteger(char type) {\n    switch (type) {\n      case BSER_INT8:\n        return parseInteger<int8_t>();\n      case BSER_INT16:\n        return parseInteger<int16_t>();\n      case BSER_INT32:\n        return parseInteger<int32_t>();\n      case BSER_INT64:\n        return parseInteger<int64_t>();\n    }\n    assert(false && \"invalid integer type\");\n    abort();\n  }\n\n  double parseReal() {\n    double dval;\n    memcpy(&dval, ensure(sizeof(double)), sizeof(dval));\n\n    if (!isfinite(dval)) {\n      throw BserParseError(\"reals must be finite\");\n    }\n\n    return dval;\n  }\n\n  json_int_t expectInteger() {\n    char type = expectType({BSER_INT8, BSER_INT16, BSER_INT32, BSER_INT64});\n    return parseInteger(type);\n  }\n\n  size_t expectSize(const char* label) {\n    json_int_t size = expectInteger();\n    if (size < 0) {\n      throw BserParseError(\"{} has negative size\", label);\n    }\n    size_t rv = size;\n    if (rv > kMaximumContainerSize) {\n      throw BserParseError(\"{} size is too large: {}\", label, rv);\n    }\n    return rv;\n  }\n\n  // References memory in the input document.\n  std::string_view parseString() {\n    size_t length = expectSize(\"string\");\n    return std::string_view{ensure(length), length};\n  }\n\n  std::string_view expectString() {\n    expectType({BSER_BYTESTRING, BSER_UTF8STRING});\n    return parseString();\n  }\n\n  std::vector<json_ref> parseArray() {\n    BumpDepth scope{depth};\n\n    size_t count = expectSize(\"array\");\n\n    std::vector<json_ref> rv;\n    limitedReservation(rv, count);\n    for (size_t i = 0; i < count; i++) {\n      rv.push_back(expectValue());\n    }\n    return rv;\n  }\n\n  std::vector<json_ref> expectArray() {\n    expectType({BSER_ARRAY});\n    return parseArray();\n  }\n\n  json_ref parseTemplate() {\n    BumpDepth scope{depth};\n\n    // Load in the property names template\n    auto templ = expectArray();\n    if (templ.empty()) {\n      // To avoid \"decompression bombs\" -- small documents that expand into huge\n      // memory requirements -- require that templates have a non-empty key set.\n      throw BserParseError(\"templates require a non-empty key set\");\n    }\n\n    // Validate that all template keys are strings before entering the main\n    // loop.\n    for (const auto& template_key : templ) {\n      if (!template_key.isString()) {\n        throw BserParseError(\n            \"template value must be string, was {}\", template_key.type());\n      }\n    }\n\n    // And the number of objects\n    auto element_count = expectSize(\"template\");\n\n    // Now load up the array with object values\n    std::vector<json_ref> rv;\n    limitedReservation(rv, element_count);\n    for (size_t i = 0; i < element_count; ++i) {\n      std::unordered_map<w_string, json_ref> item;\n      limitedReservation(item, templ.size());\n      for (const auto& template_key : templ) {\n        char type = *ensure(1);\n        if (type == BSER_SKIP) {\n          continue;\n        }\n\n        assert(template_key.isString());\n        item.insert_or_assign(\n            json_string_value(template_key), parseValue(type));\n      }\n\n      rv.push_back(json_object(std::move(item)));\n    }\n\n    return json_array(std::move(rv));\n  }\n\n  json_ref parseObject() {\n    BumpDepth scope{depth};\n\n    size_t element_count = expectSize(\"object\");\n\n    std::unordered_map<w_string, json_ref> rv;\n    limitedReservation(rv, element_count);\n\n    for (size_t i = 0; i < element_count; i++) {\n      auto key = expectString();\n      auto value = expectValue();\n\n      rv.emplace(\n          w_string{\n              key.data(),\n              key.size(),\n              // Hard-coding the string type matches BSER's previous behavior,\n              // but should we respect the type encoded in the BSER document?\n              W_STRING_BYTE},\n          std::move(value));\n    }\n\n    return json_object(std::move(rv));\n  }\n\n  struct BumpDepth {\n    explicit BumpDepth(size_t& depth) : depth{depth} {\n      if (++depth == kMaximumDepth) {\n        throw BserParseTooDeep{};\n      }\n    }\n    ~BumpDepth() {\n      --depth;\n    }\n\n    size_t& depth;\n  };\n\n  const char* buf;\n  const char* const start;\n  const char* const end;\n  size_t depth = 0;\n};\n\n} // namespace\n\nstd::optional<json_int_t>\nbunser_int(const char* buf, size_t avail, size_t* needed) {\n  if (avail == 0) {\n    *needed = 1;\n    return std::nullopt;\n  }\n\n  switch (buf[0]) {\n    case BSER_INT8:\n      *needed = 2;\n      if (avail < 2) {\n        return std::nullopt;\n      } else {\n        int8_t i8;\n        memcpy(&i8, buf + 1, sizeof(i8));\n        return i8;\n      }\n    case BSER_INT16:\n      *needed = 3;\n      if (avail < 3) {\n        return std::nullopt;\n      } else {\n        int16_t i16;\n        memcpy(&i16, buf + 1, sizeof(i16));\n        return i16;\n      }\n    case BSER_INT32:\n      *needed = 5;\n      if (avail < 5) {\n        return std::nullopt;\n      } else {\n        int32_t i32;\n        memcpy(&i32, buf + 1, sizeof(i32));\n        return i32;\n      }\n    case BSER_INT64:\n      *needed = 9;\n      if (avail < 9) {\n        return std::nullopt;\n      } else {\n        int64_t i64;\n        memcpy(&i64, buf + 1, sizeof(i64));\n        return i64;\n      }\n    default:\n      *needed = kDecodeIntFailed;\n      return std::nullopt;\n  }\n}\n\njson_ref bunser(const char* buf, const char* end) {\n  if (buf >= end) {\n    throw BserParseError(\"document too short\");\n  }\n  return BserParser{buf, end}.expectValue();\n}\n"
  },
  {
    "path": "watchman/bser.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <fmt/core.h>\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\ntypedef struct bser_ctx {\n  uint32_t bser_version;\n  uint32_t bser_capabilities;\n  json_dump_callback_t dump;\n} bser_ctx_t;\n\nclass BserParseError : public std::exception {\n public:\n  const json_error_t detail;\n\n  explicit BserParseError(const char* what) : detail{what} {}\n\n  template <typename... T>\n  explicit BserParseError(fmt::format_string<T...> fmt, T&&... args)\n      : detail{fmt::format(fmt, std::forward<T>(args)...).c_str()} {\n    // TODO: this constructor could use fmt::format_to_n to avoid an extra copy\n    // Or perhaps json_error_t should use std::string instead of fixed-size\n    // arrays.\n  }\n\n  explicit BserParseError(const json_error_t& d) : detail{d} {}\n\n  const char* what() const noexcept override {\n    return detail.text;\n  }\n\n private:\n  mutable std::string what_;\n};\n\nclass BserParseTooDeep : public BserParseError {\n public:\n  BserParseTooDeep()\n      : BserParseError{\"bser document exceeds recursion limit\"} {}\n};\n\n#define BSER_MAGIC \"\\x00\\x01\"\n#define BSER_V2_MAGIC \"\\x00\\x02\"\n\n// BSERv2 capabilities. Must be powers of 2.\n#define BSER_CAP_DISABLE_UNICODE 0x1\n#define BSER_CAP_DISABLE_UNICODE_FOR_ERRORS 0x2\n\nint w_bser_write_pdu(\n    const uint32_t bser_version,\n    const uint32_t capabilities,\n    json_dump_callback_t dump,\n    const json_ref& json,\n    void* data);\nint w_bser_dump(const bser_ctx_t* ctx, const json_ref& json, void* data);\n\nconstexpr size_t kDecodeIntFailed = ~size_t{};\n\n/**\n * Attempt to unserialize an integer value.\n * Returns the integer if successful. Returns std::nullopt if unsuccessful.\n * If decoding fails, *needed is set to the number of bytes required to parse\n * the integer.\n *\n * If *needed is kDecodeIntFailed, then `buf` does not contain a valid BSER int.\n */\nstd::optional<json_int_t>\nbunser_int(const char* buf, size_t avail, size_t* needed);\n\n/**\n * Parses a value from a BSER document.\n *\n * Ignores any unused data at the end of the buffer.\n */\njson_ref bunser(const char* buf, const char* end);\n"
  },
  {
    "path": "watchman/build/package/fedora-env/Dockerfile",
    "content": "ARG FEDORA_VERSION\nFROM fedora:$FEDORA_VERSION\n\nRUN dnf install -y gcc g++ git openssl-devel rpmdevtools\n\nRUN curl https://sh.rustup.rs -sSf | sh -s -- -y\nENV PATH=\"/root/.cargo/bin:${PATH}\"\n\n# Avoid build output from Watchman's build getting buffered in large\n# chunks, which makes debugging progress tough.\nENV PYTHONUNBUFFERED=1\n"
  },
  {
    "path": "watchman/build/package/make-deb.sh",
    "content": "#!/bin/bash -e\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncd \"$(dirname \"$0\")\"\n\ncd /__w/watchman/watchman\n\ncd \"$(git rev-parse --show-toplevel)\"\n\n# Why /usr/local? This .deb does not hold to any rigorous packaging\n# standards (e.g. Debian), and is intended to replace existing ad hoc\n# Watchman installations.\n#\n# Until we have a reason otherwise, let's remain compatible with\n# legacy installation paths.\nPREFIX=\"/usr/local\"\n\n# Generated by the prior invocation of ./autogen.sh\nBUILT=\"/__w/watchman/watchman/built\"\n\nfind \"$BUILT\"\n\nset -x\n\n# This is an implicit assertion that the `lib` directory is empty.\n# We statically link dependencies for packaging purposes.\nrmdir \"$BUILT/lib\"\n\n# TODO: make a debuginfo package\nstrip \"$BUILT/bin/watchman\"\nstrip \"$BUILT/bin/watchmanctl\"\n\nPACKAGE_VERSION=$(\"$BUILT/bin/watchman\" --version)\n\nPACKAGE_WORKDIR=$(mktemp -d)\ntrap 'rm -rf -- \"$PACKAGE_WORKDIR\"' EXIT\n\nmkdir -p \"$PACKAGE_WORKDIR$PREFIX\"\ncp -ar \"$BUILT/bin\" \"$PACKAGE_WORKDIR$PREFIX/bin\"\n\ncp -ar /__w/watchman/watchman/watchman/build/package/watchman-deb/DEBIAN \"$PACKAGE_WORKDIR\"\n\npython3 /__w/watchman/watchman/watchman/build/package/substcontrol.py \"$PACKAGE_WORKDIR/DEBIAN/control\" \"$PACKAGE_VERSION\" \"$UBUNTU_VERSION\"\n\nmkdir -p /_debs\n\nDEB_OUTPUT=\"/_debs/watchman.deb\"\n\ndpkg-deb -b \"$PACKAGE_WORKDIR\" \"$DEB_OUTPUT\"\n"
  },
  {
    "path": "watchman/build/package/make-packages.sh",
    "content": "#!/bin/bash -e\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncd \"$(dirname \"$0\")\"\n\n# buildkit truncates log output.\n# https://stackoverflow.com/questions/65819424/is-there-a-way-to-increase-the-log-size-in-docker-when-building-a-container\nexport DOCKER_BUILDKIT=0\n\nDB=\"docker build --progress plain\"\n\nUBUNTU_VERSIONS=\"18 20 22\"\n\n# There may be an opportunity to run some of these in parallel.\nfor uv in $UBUNTU_VERSIONS; do\n    $DB --build-arg \"UBUNTU_VERSION=$uv.04\" -t \"watchman-ubuntu-$uv-env\" ubuntu-env\n\n    $DB --build-arg \"BASE_IMAGE=watchman-ubuntu-$uv-env\" -t \"watchman-ubuntu-$uv-build\" watchman-build\n\n    $DB --build-arg \"BASE_IMAGE=watchman-ubuntu-$uv-build\" -t \"watchman-ubuntu-$uv-deb\" watchman-deb\n\n    mkdir -p \"_debs/ubuntu-$uv\"\n\n    docker run --rm --mount \"type=bind,source=$(pwd)/_debs,target=/_out\" \"watchman-ubuntu-$uv-deb\" sh -c \"cp /_debs/* /_out/ubuntu-$uv\"\ndone\n"
  },
  {
    "path": "watchman/build/package/make-rpm.sh",
    "content": "#!/bin/bash -e\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncd \"$(dirname \"$0\")\"\n\ncd /__w/watchman/watchman\n\ncd \"$(git rev-parse --show-toplevel)\"\n\n# Why /usr/local? This .deb does not hold to any rigorous packaging\n# standards (e.g. Debian), and is intended to replace existing ad hoc\n# Watchman installations.\n#\n# Until we have a reason otherwise, let's remain compatible with\n# legacy installation paths.\nPREFIX=\"/usr/local\"\n\n# Generated by the prior invocation of ./autogen.sh\nBUILT=\"/__w/watchman/watchman/built\"\n\nfind \"$BUILT\"\n\nset -x\n\n# This is an implicit assertion that the `lib` directory is empty.\n# We statically link dependencies for packaging purposes.\nrmdir \"$BUILT/lib\"\n\nPACKAGE_VERSION=$(\"$BUILT/bin/watchman\" --version)\n\nPACKAGE_WORKDIR=$(mktemp -d)\ntrap 'rm -rf -- \"$PACKAGE_WORKDIR\"' EXIT\n\nSPECS=\"$PACKAGE_WORKDIR/SPECS\"\n\nmkdir -p \"$SPECS\"\n\ncp watchman/build/package/watchman.spec \"$SPECS/watchman.spec\"\n\nrpmbuild \\\n    -bb \\\n    --define \"dist .fc$FEDORA_VERSION\" \\\n    --define \"_rpmdir $PACKAGE_WORKDIR/RPMS\" \\\n    --define \"version $PACKAGE_VERSION\" \\\n    --define \"prefix $PREFIX/\" \\\n    --define \"image $BUILT\" \\\n    \"$SPECS/watchman.spec\"\n\nmkdir -p /_rpms\ncp -a \"$PACKAGE_WORKDIR\"/RPMS/x86_64/*.rpm /_rpms\n\nfind /_rpms\n\nfor rpm in /_rpms/*.rpm; do\n    echo \"::set-output name=rpm_path::$rpm\"\n    echo \"::set-output name=rpm_name::$(basename \"$rpm\")\"\n    break\ndone\n"
  },
  {
    "path": "watchman/build/package/substcontrol.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport sys\n\nDEPENDENCIES_BY_UBUNTU = {\n    \"18.04\": [\n        \"libgoogle-glog0v5\",\n        \"libpcre2-8-0\",\n        \"libdouble-conversion1\",\n        \"libevent-2.1-6\",\n        \"libsnappy1v5\",\n    ],\n    \"20.04\": [\n        \"libgoogle-glog0v5\",\n        \"libboost-context1.71.0\",\n        \"libdouble-conversion3\",\n        \"libevent-2.1-7\",\n        \"libsnappy1v5\",\n    ],\n    \"22.04\": [\n        \"libgoogle-glog0v5\",\n        \"libboost-context1.74.0\",\n        \"libdouble-conversion3\",\n        \"libevent-2.1-7\",\n        \"libsnappy1v5\",\n    ],\n}\n\n\ndef main():\n    filename, package_version, ubuntu_version = sys.argv[1:]\n\n    with open(filename, \"r\") as f:\n        contents = f.read()\n\n    contents = contents.replace(\"%VERSION%\", package_version)\n    contents = contents.replace(\n        \"%DEPENDS%\", \", \".join(DEPENDENCIES_BY_UBUNTU[ubuntu_version])\n    )\n\n    with open(filename, \"w\") as f:\n        f.write(contents)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "watchman/build/package/ubuntu-env/Dockerfile",
    "content": "ARG UBUNTU_VERSION\nFROM ubuntu:$UBUNTU_VERSION\n\n# https://serverfault.com/a/1016972 to ensure installing tzdata does\n# not result in a prompt that hangs forever.\nENV DEBIAN_FRONTEND=noninteractive\nENV TZ=Etc/UTC\n\nRUN apt-get -y update\nRUN apt-get -y install python3 python3-pip gcc g++ libssl-dev curl sudo\n\n# Ubuntu 18.04 has an older version of Git, which causes actions/checkout@v3\n# to check out the repository with REST, breaking version number generation.\nRUN apt-get -y install software-properties-common\nRUN add-apt-repository -y ppa:git-core/ppa\nRUN apt-get -y install git\n\nRUN curl https://sh.rustup.rs -sSf | sh -s -- -y\nENV PATH=\"/root/.cargo/bin:${PATH}\"\n\n# Avoid build output from Watchman's build getting buffered in large\n# chunks, which makes debugging progress tough.\nENV PYTHONUNBUFFERED=1\n"
  },
  {
    "path": "watchman/build/package/watchman-build/Dockerfile",
    "content": "ARG BASE_IMAGE\nFROM $BASE_IMAGE\n\nWORKDIR /watchman\nRUN ./install-system-packages.sh\n\n# Clean up the temporary build artifacts so the image is smaller.\nRUN ./autogen.sh && rm -rf /tmp/fbcode_builder_getdeps*\n"
  },
  {
    "path": "watchman/build/package/watchman-deb/DEBIAN/control",
    "content": "Package: watchman\nVersion: %VERSION%\nArchitecture: amd64\nMaintainer: Meta Platforms, Inc.\nStandards-Version: 4.6.1.1\nDescription: A file watching service\nDepends: %DEPENDS%\n"
  },
  {
    "path": "watchman/build/package/watchman-deb/DEBIAN/postinst",
    "content": "#!/bin/sh -e\n\ncase \"$1\" in\n    configure)\n        mkdir -p /usr/local/var/run/watchman\n        chmod 2777 /usr/local/var/run/watchman\n    ;;\n\n    abort-upgrade|abort-remove|abort-deconfigure)\n    ;;\n\n    *)\n        echo \"postinst called with unknown argument \\`$1'\" >&2\n        exit 1\n    ;;\nesac\n\n# dh_installdeb will replace this with shell code automatically\n# generated by other debhelper scripts.\n\n#DEBHELPER#\n\nexit 0\n"
  },
  {
    "path": "watchman/build/package/watchman-deb/Dockerfile",
    "content": "ARG BASE_IMAGE\nFROM $BASE_IMAGE\n\nWORKDIR /watchman\n\nENV BUILT=\"/watchman/built\"\n\nADD make-deb.sh /watchman/build/make-deb.sh\nADD DEBIAN /watchman/watchman/build/package/DEBIAN\n\n# TODO: make a debugsymbols package\nRUN strip built/bin/*\n\nRUN /watchman/build/make-deb.sh\n"
  },
  {
    "path": "watchman/build/package/watchman-deb/make-deb.sh",
    "content": "#!/bin/bash -e\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\ncd \"$(dirname \"$0\")\"\ncd \"$(git rev-parse --show-toplevel)\"\n\n# Why /usr/local? This .deb does not hold to any rigorous packaging\n# standards (e.g. Debian), and is intended to replace existing ad hoc\n# Watchman installations.\n#\n# Until we have a reason otherwise, let's remain compatible with\n# legacy installation paths.\nPREFIX=\"/usr/local\"\n\nset -x\n\nif [[ $BUILT = \"\" ]]; then\n    BUILT=$(mktemp -d)\n    trap 'rm -rf -- \"$BUILT\"' EXIT\n\n    sudo python3 build/fbcode_builder/getdeps.py install-system-deps \\\n         --recursive watchman\n\n    python3 build/fbcode_builder/getdeps.py build \\\n            --allow-system-packages \\\n            --src-dir=. \\\n            \"--project-install-prefix=watchman:$PREFIX\" \\\n            watchman\n\n    python3 build/fbcode_builder/getdeps.py fixup-dyn-deps \\\n            --allow-system-packages \\\n            --src-dir=. \\\n            \"--project-install-prefix=watchman:$PREFIX\" \\\n            --final-install-prefix \"$PREFIX\" \\\n            watchman \\\n            \"$BUILT\"\nfi\n\n# This is an implicit assertion that the `lib` directory is empty.\n# We statically link dependencies for packaging purposes.\nrmdir \"$BUILT/lib\"\n\nPACKAGE_VERSION=$(\"$BUILT/bin/watchman\" --version)\n\nPACKAGE_WORKDIR=$(mktemp -d)\ntrap 'rm -rf -- \"$PACKAGE_WORKDIR\"' EXIT\n\nmkdir -p \"$PACKAGE_WORKDIR$PREFIX\"\ncp -ar \"$BUILT/bin\" \"$PACKAGE_WORKDIR$PREFIX/bin\"\ncp -ar watchman/build/package/watchman-deb/DEBIAN \"$PACKAGE_WORKDIR\"\n\nsed -i \"s/%VERSION%/$PACKAGE_VERSION/\" \"$PACKAGE_WORKDIR/DEBIAN/control\"\n\nmkdir -p /_debs\n\nDEB_OUTPUT=\"/_debs/watchman_$PACKAGE_VERSION.deb\"\n\n# TODO: use dpkg-shlibdeps to automate generation of the runtime\n# dependency list\n\ndpkg-deb -b \"$PACKAGE_WORKDIR\" \"$DEB_OUTPUT\"\n"
  },
  {
    "path": "watchman/build/package/watchman.spec",
    "content": "Name: watchman\nVersion: %{version}\nRelease: 1%{?dist}\nLicense: MIT\nSummary: A file watching service\nURL: https://facebook.github.io/watchman/\n\n%description\n\nA file watching service.\n\n%build\n\n%install\nmkdir -p %{buildroot}%{prefix}\ncp -rvp %{image}/* %{buildroot}%{prefix}\n\n%files\n%defattr(-, root, root, -)\n%{prefix}bin/watchman\n%{prefix}bin/watchmanctl\n\n%post\n\nmkdir -p %{prefix}/var/run/watchman\nchmod 2777 %{prefix}/var/run/watchman\n"
  },
  {
    "path": "watchman/build/vagrant/.gitignore",
    "content": ".vagrant/\n"
  },
  {
    "path": "watchman/build/vagrant/README.md",
    "content": "# Vagrant VMs for Validating Watchman Builds\n\nWatchman uses GitHub Actions for CI, but sometimes it's useful to have\nreproducible, bare environments representative of where people\ntypically attempt to build Watchman.\n\nThis Vagrantfile provides some provisioned VMs with the minimal set of\ndependencies required to build and run Watchman.\n\nNone of the VMs will autostart, so they must be specified explicitly\nto `vagrant up`. When running `vagrant up` or `vagrant provision`,\nensure the `WATCHMAN_SOURCE` environment variable contains a path to\nthe Watchman source directory.\n"
  },
  {
    "path": "watchman/build/vagrant/Vagrantfile",
    "content": "# -*- mode: ruby -*-\n# vi: set ft=ruby :\n\nrequire 'etc'\n\nWATCHMAN_SOURCE = ENV[\"WATCHMAN_SOURCE\"]\nDEV = ENV[\"DEV\"]\n\ndef provision_ubuntu(config)\n  if DEV\n    system_update = \"\"\n    dev_packages = <<-SHELL\n      apt-get install -y emacs-nox htop tmux\n    SHELL\n  else\n    system_update = <<-SHELL\n      apt-get dist-upgrade -y\n    SHELL\n    dev_packages = \"\"\n  end\n\n  config.vm.provision \"shell\", inline: <<-SHELL\n    set -x\n\n    apt-get update\n\n    #{system_update}\n\n    # To avoid falling over during spiky RAM utilization, allow swap to\n    # dynamically expand.\n    apt-get install -y swapspace\n\n    apt-get install -y gcc g++ m4 make pkg-config libssl-dev libz-dev\n\n    su -c 'curl https://sh.rustup.rs -sSf | sh -s -- -y' - vagrant\n\n    #{dev_packages}\n  SHELL\nend\n\ndef provision_fedora(config)\n  if DEV\n    system_update = \"\"\n    dev_packages = <<-SHELL\n      dnf install -y emacs-nox htop tmux\n    SHELL\n  else\n    system_update = <<-SHELL\n      dnf update\n    SHELL\n    dev_packages = \"\"\n  end\n\n  config.vm.provision \"shell\", inline: <<-SHELL\n    set -x\n\n    #{system_update}\n\n    dnf install -y python3-devel\n\n    su -c 'curl https://sh.rustup.rs -sSf | sh -s -- -y' - vagrant\n\n    #{dev_packages}\n  SHELL\nend\n\ndef provision_freebsd(config)\n  if DEV\n    system_update = \"\"\n    dev_packages = <<-SHELL\n      pkg install -y emacs-nox htop tmux\n    SHELL\n  else\n    system_update = <<-SHELL\n      pkg upgrade -y\n    SHELL\n    dev_packages = \"\"\n  end\n\n  config.vm.provision \"shell\", inline: <<-SHELL\n    set -x\n\n    pkg update\n\n    #{system_update}\n\n    pkg install -y elfutils git gmake m4 patchelf python3\n\n    su -l vagrant -c 'curl https://sh.rustup.rs -sSf | sh -s -- -y'\n\n    #{dev_packages}\n  SHELL\nend\n\ndef provider_linux(config)\n  [\"vmware_fusion\", \"vmware_workstation\"].each do |provider|\n    config.vm.provider provider do |vmware, override|\n      # gcc uses 1.5 GB per process with Facebook style C++ :|\n      cpu_count = Etc.nprocessors / 2\n      vmware.cpus = cpu_count\n      vmware.memory = 1536 * cpu_count\n    end\n  end\nend\n\ndef provider_freebsd(config)\n  [\"vmware_fusion\", \"vmware_workstation\"].each do |provider|\n    config.vm.provider provider do |vmware, override|\n      # FreeBSD and clang are quite memory-efficient relative to Linux\n      # and gcc.\n      cpu_count = Etc.nprocessors - 2\n      vmware.cpus = cpu_count\n      vmware.memory = 768 * cpu_count\n    end\n  end\nend\n\ndef sync_fuse(config)\n  if WATCHMAN_SOURCE.nil?\n    return\n  end\n  config.vm.synced_folder WATCHMAN_SOURCE, \"/home/vagrant/watchman\"\nend\n\ndef sync_nfs(config)\n  if WATCHMAN_SOURCE.nil?\n    return\n  end\n  config.vm.synced_folder WATCHMAN_SOURCE, \"/home/vagrant/watchman\", type: \"nfs\", nfs_version: 4, nfs_udp: false\nend\n\nVagrant.configure(\"2\") do |config|\n  if WATCHMAN_SOURCE.nil?\n    STDERR.puts \"Please set WATCHMAN_SOURCE to the directory containing Watchman's source code\"\n  end\n\n  # TODO: autogen.sh will put its built artifacts in /tmp by\n  # default. The VMs automatically clear /tmp on boot, so it might\n  # make sense to consider a different scratch path.\n\n  config.vm.define \"watchman-ubuntu-18\", autostart: false do |ubuntu|\n    ubuntu.vm.box = \"bento/ubuntu-18.04\"\n    ubuntu.vm.hostname = \"watchman-ubuntu-18\"\n\n    provision_ubuntu ubuntu\n    provider_linux ubuntu\n    sync_fuse ubuntu\n  end\n\n  config.vm.define \"watchman-ubuntu-20\", autostart: false do |ubuntu|\n    ubuntu.vm.box = \"bento/ubuntu-20.04\"\n    ubuntu.vm.hostname = \"watchman-ubuntu-20\"\n\n    provision_ubuntu ubuntu\n    provider_linux ubuntu\n    sync_fuse ubuntu\n  end\n\n  config.vm.define \"watchman-ubuntu-22\", autostart: false do |ubuntu|\n    ubuntu.vm.box = \"bento/ubuntu-22.04\"\n    ubuntu.vm.hostname = \"watchman-ubuntu-22\"\n\n    provision_ubuntu ubuntu\n    provider_linux ubuntu\n    sync_fuse ubuntu\n  end\n\n  fedora_vms = [\n    {name: \"watchman-fedora-35\", box: \"generic/fedora35\"},\n    {name: \"watchman-fedora-36\", box: \"generic/fedora36\"},\n    {name: \"watchman-fedora-37\", box: \"generic/fedora37\"},\n    # boxen needs many more packages installed by default. Maybe\n    # generic/ will release a Fedora 38 box soon.\n    {name: \"watchman-fedora-38\", box: \"boxen/fedora-38-x86_64\"},\n  ]\n\n  fedora_vms.each { |fedora_vm|\n    config.vm.define fedora_vm[:name], autostart: false do |config|\n      config.vm.box = fedora_vm[:box]\n      config.vm.hostname = fedora_vm[:name]\n\n      provision_fedora config\n      provider_linux config\n      sync_fuse config\n    end\n  }\n\n  config.vm.define \"watchman-freebsd\" do |freebsd|\n    freebsd.vm.box = \"generic/freebsd12\"\n    freebsd.vm.hostname = \"watchman-freebsd-12\"\n\n    provision_freebsd freebsd\n    provider_freebsd freebsd\n    sync_nfs freebsd\n  end\n\nend\n"
  },
  {
    "path": "watchman/cli/BUCK",
    "content": "load(\"@fbsource//tools/build_defs:rust_binary.bzl\", \"rust_binary\")\n\noncall(\"scm_client_infra\")\n\nrust_binary(\n    name = \"cli\",\n    srcs = glob([\"src/**/*.rs\"]),\n    autocargo = {\n        \"cargo_target_config\": {\n            \"name\": \"watchmanctl\",\n        },\n        \"cargo_toml_config\": {\n            \"dependencies_override\": {\n                \"dependencies\": {\n                    \"ahash\": {\n                        \"features\": [\"runtime-rng\"],\n                        \"version\": \"0.8.11\",\n                    },\n                    \"anyhow\": {\"version\": \"1.0.98\"},\n                    \"duct\": {\"version\": \"0.13.6\"},\n                    \"jwalk\": {\"version\": \"0.8.1\"},\n                    \"serde\": {\n                        \"features\": [\n                            \"derive\",\n                            \"rc\",\n                        ],\n                        \"version\": \"1.0.219\",\n                    },\n                    \"serde_json\": {\n                        \"features\": [\n                            \"alloc\",\n                            \"float_roundtrip\",\n                            \"raw_value\",\n                            \"unbounded_depth\",\n                        ],\n                        \"version\": \"1.0.140\",\n                    },\n                    \"structopt\": {\"version\": \"0.3.26\"},\n                    \"sysinfo\": {\"version\": \"0.35.1\"},\n                    \"tabular\": {\"version\": \"0.2.0\"},\n                    \"tokio\": {\n                        \"features\": [\n                            \"full\",\n                            \"test-util\",\n                            \"tracing\",\n                        ],\n                        \"version\": \"1.47.1\",\n                    },\n                },\n                \"target\": {\n                    \"'cfg(target_os = \\\"linux\\\")'\": {\n                        \"dependencies\": {\n                            \"nix\": {\n                                \"features\": [\n                                    \"dir\",\n                                    \"event\",\n                                    \"hostname\",\n                                    \"inotify\",\n                                    \"ioctl\",\n                                    \"mman\",\n                                    \"mount\",\n                                    \"net\",\n                                    \"poll\",\n                                    \"ptrace\",\n                                    \"reboot\",\n                                    \"resource\",\n                                    \"sched\",\n                                    \"signal\",\n                                    \"term\",\n                                    \"time\",\n                                    \"user\",\n                                    \"zerocopy\",\n                                ],\n                                \"version\": \"0.30.1\",\n                            },\n                        },\n                    },\n                    \"'cfg(target_os = \\\"macos\\\")'\": {\n                        \"dependencies\": {\n                            \"nix\": {\n                                \"features\": [\n                                    \"dir\",\n                                    \"event\",\n                                    \"hostname\",\n                                    \"inotify\",\n                                    \"ioctl\",\n                                    \"mman\",\n                                    \"mount\",\n                                    \"net\",\n                                    \"poll\",\n                                    \"ptrace\",\n                                    \"reboot\",\n                                    \"resource\",\n                                    \"sched\",\n                                    \"signal\",\n                                    \"term\",\n                                    \"time\",\n                                    \"user\",\n                                    \"zerocopy\",\n                                ],\n                                \"version\": \"0.30.1\",\n                            },\n                        },\n                    },\n                },\n            },\n            \"extra_buck_dependencies\": {\n                \"dependencies\": [\n                    \"//watchman/rust/watchman_client:watchman_client\",\n                ],\n                \"target\": {\n                    \"'cfg(unix)'\": {\n                        \"dependencies\": [\n                            \"fbsource//third-party/rust:nix\",\n                        ],\n                    },\n                },\n            },\n            \"package\": {\n                \"authors\": [\"Source Control Oncall oncall+source_control@xmail.facebook.com\"],\n                \"name\": \"watchmanctl\",\n            },\n        },\n    },\n    features = [\n        \"fb\",\n    ],\n    deps = [\n        \"fbsource//third-party/rust:ahash\",\n        \"fbsource//third-party/rust:anyhow\",\n        \"fbsource//third-party/rust:duct\",\n        \"fbsource//third-party/rust:jwalk\",\n        \"fbsource//third-party/rust:serde\",\n        \"fbsource//third-party/rust:serde_json\",\n        \"fbsource//third-party/rust:structopt\",\n        \"fbsource//third-party/rust:sysinfo\",\n        \"fbsource//third-party/rust:tabular\",\n        \"fbsource//third-party/rust:tokio\",\n        \"//watchman/rust/watchman_client:watchman_client\",\n    ] + select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:linux\": [\n            \"fbsource//third-party/rust:nix\",\n        ],\n        \"ovr_config//os:macos\": [\n            \"fbsource//third-party/rust:nix\",\n        ],\n    }),\n)\n"
  },
  {
    "path": "watchman/cli/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nif (IS_FB_BUILD)\n    rust_executable(watchmanctl FEATURES fb)\nelse()\n    rust_executable(watchmanctl)\nendif()\n\ninstall_rust_executable(watchmanctl)\n"
  },
  {
    "path": "watchman/cli/Cargo.toml",
    "content": "# @generated by autocargo from //watchman/cli:cli\n\n[package]\nname = \"watchmanctl\"\nversion = \"0.1.0\"\nauthors = [\"Source Control Oncall oncall+source_control@xmail.facebook.com\"]\nedition = \"2024\"\nrepository = \"https://github.com/facebook/watchman\"\nlicense = \"MIT\"\n\n[dependencies]\nahash = { version = \"0.8.11\", features = [\"runtime-rng\"] }\nanyhow = \"1.0.98\"\nduct = \"0.13.6\"\njwalk = \"0.8.1\"\nserde = { version = \"1.0.219\", features = [\"derive\", \"rc\"] }\nserde_json = { version = \"1.0.140\", features = [\"alloc\", \"float_roundtrip\", \"raw_value\", \"unbounded_depth\"] }\nstructopt = \"0.3.26\"\nsysinfo = \"0.35.1\"\ntabular = \"0.2.0\"\ntokio = { version = \"1.47.1\", features = [\"full\", \"test-util\", \"tracing\"] }\nwatchman_client = { version = \"0.9.0\", path = \"../rust/watchman_client\" }\n\n[target.'cfg(target_os = \"linux\")'.dependencies]\nnix = { version = \"0.30.1\", features = [\"dir\", \"event\", \"hostname\", \"inotify\", \"ioctl\", \"mman\", \"mount\", \"net\", \"poll\", \"ptrace\", \"reboot\", \"resource\", \"sched\", \"signal\", \"term\", \"time\", \"user\", \"zerocopy\"] }\n\n[target.'cfg(target_os = \"macos\")'.dependencies]\nnix = { version = \"0.30.1\", features = [\"dir\", \"event\", \"hostname\", \"inotify\", \"ioctl\", \"mman\", \"mount\", \"net\", \"poll\", \"ptrace\", \"reboot\", \"resource\", \"sched\", \"signal\", \"term\", \"time\", \"user\", \"zerocopy\"] }\n\n[target.'cfg(unix)'.dependencies]\nnix = { version = \"0.30.1\", features = [\"dir\", \"event\", \"hostname\", \"inotify\", \"ioctl\", \"mman\", \"mount\", \"net\", \"poll\", \"ptrace\", \"reboot\", \"resource\", \"sched\", \"signal\", \"term\", \"time\", \"user\", \"zerocopy\"] }\n\n[features]\ndefault = []\nfb = []\n"
  },
  {
    "path": "watchman/cli/src/audit.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::io::ErrorKind;\nuse std::io::Write;\n#[cfg(unix)]\nuse std::os::unix::fs::MetadataExt;\n#[cfg(unix)]\nuse std::os::unix::fs::PermissionsExt;\n#[cfg(windows)]\nuse std::os::windows::fs::MetadataExt;\nuse std::path::Path;\nuse std::path::PathBuf;\nuse std::sync::Arc;\nuse std::time::Duration;\nuse std::time::Instant;\n\nuse ahash::AHashMap;\nuse jwalk::WalkDir;\nuse serde::Deserialize;\nuse structopt::StructOpt;\nuse watchman_client::prelude::*;\n\n#[derive(StructOpt, Debug)]\n#[structopt(about = \"Audit Watchman's in-memory database with the filesystem\")]\npub(crate) struct AuditCmd {\n    #[structopt(name = \"path\", parse(from_os_str))]\n    path: PathBuf,\n\n    #[structopt(\n        long = \"settle_period\",\n        about = \"milliseconds to wait for filesystem change notifications to settle\"\n    )]\n    settle_period_ms: Option<u64>,\n\n    #[structopt(\n        long = \"settle_timeout\",\n        about = \"fail query if settle_timeout milliseconds elapses before settle_period is reached\"\n    )]\n    settle_timeout_ms: Option<u64>,\n\n    #[structopt(\n        long = \"sync_timeout\",\n        about = \"seconds to wait for Watchman query result\",\n        default_value = \"120\"\n    )]\n    sync_timeout_secs: u64,\n}\n\nquery_result_type! {\n    struct AuditQueryResult {\n        name: NameField,\n        mode: ModeAndPermissionsField,\n        size: SizeField,\n        mtime: MTimeField,\n        oclock: ObservedClockField,\n        ino: InodeNumberField,\n    }\n}\n\n// Skip cookies when diffing.\nfn is_cookie<T: AsRef<Path>>(name: T) -> bool {\n    name.as_ref()\n        .file_name()\n        .and_then(|s| s.to_str())\n        .is_some_and(|s| s.starts_with(\".watchman-cookie-\"))\n}\n\n#[cfg(windows)]\n/// Windows epoch starts at 1601-01-01 00:00:00 UTC. This function converts\n/// Windows epoch time to Unix epoch time. 0x019DB1DED53E8000 is Windows epoch\n/// fo 1970-01-01 00:00:00 UTC.\nfn from_windows_epoch(epoch: i64) -> i64 {\n    (epoch - 0x019DB1DED53E8000) / 10_000_000\n}\n\n#[derive(Debug)]\npub struct AuditOption {\n    pub settle_period_ms: Option<u64>,\n    pub settle_timeout_ms: Option<u64>,\n    pub sync_timeout_secs: u64,\n    pub silent: bool,\n}\n\nimpl Default for AuditOption {\n    fn default() -> Self {\n        AuditOption {\n            settle_period_ms: None,\n            settle_timeout_ms: None,\n            sync_timeout_secs: 120,\n            silent: false,\n        }\n    }\n}\n\npub async fn audit_repo(\n    out: &mut (dyn Write + Send + Sync),\n    client: &Client,\n    repo: &Path,\n    option: AuditOption,\n) -> anyhow::Result<()> {\n    let resolved = Arc::new(\n        client\n            .resolve_root(CanonicalPath::canonicalize(repo)?)\n            .await?,\n    );\n\n    if resolved.watcher() == \"eden\" {\n        return Err(anyhow::anyhow!(\n            \"{} is an EdenFS mount - no need to audit\",\n            resolved.project_root().display()\n        ));\n    }\n\n    writeln!(\n        out,\n        \"Sanity checking the filesystem at {} against watchman; this may take a couple of minutes.\",\n        repo.display(),\n    )?;\n\n    let config = client.get_config(&resolved).await?;\n    let mut ignore_dirs = config.ignore_dirs.unwrap_or_default().clone();\n\n    // TODO: This list is duplicated in the Watchman query below.\n    ignore_dirs.push(\".hg\".into());\n    ignore_dirs.push(\".git\".into());\n    ignore_dirs.push(\".svn\".into());\n\n    let filesystem_state_handle = {\n        let resolved = resolved.clone();\n        let silent = option.silent;\n        tokio::spawn(async move {\n            let mut filesystem_state: AHashMap<PathBuf, std::fs::Metadata> = AHashMap::new();\n\n            let start_crawl = Instant::now();\n\n            // Allocate outside the loop to save time.\n            let resolved_path = Arc::new(resolved.path());\n\n            let resolved_path_copy = resolved_path.clone();\n            let walk_dir = WalkDir::new(&*resolved_path)\n                .skip_hidden(false)\n                .process_read_dir(move |_depth, path, _read_dir_state, children| {\n                    let resolved_path: &Path = resolved_path_copy.as_ref();\n                    let from_root = match path.strip_prefix(resolved_path) {\n                        Ok(from_root) => from_root,\n                        Err(_) => {\n                            return;\n                        }\n                    };\n\n                    if from_root == Path::new(\"\") {\n                        children.retain(|child| match child {\n                            Ok(child) => {\n                                ignore_dirs.iter().all(|i| i.as_os_str() != child.file_name)\n                            }\n                            Err(_) => true,\n                        });\n                    }\n                });\n\n            for entry in walk_dir {\n                let entry = match entry {\n                    Ok(entry) => entry,\n                    Err(err) => {\n                        if !silent {\n                            eprintln!(\"error while traversing directory: {}\", err);\n                        }\n                        continue;\n                    }\n                };\n\n                let entry_path = entry.path();\n                let relpath = match entry_path.strip_prefix(&*resolved_path) {\n                    Ok(relpath) => relpath,\n                    Err(err) => {\n                        if !silent {\n                            eprintln!(\n                                \"unable to form relative path from {} to {}: {}\",\n                                resolved_path.display(),\n                                entry_path.display(),\n                                err\n                            );\n                        }\n                        continue;\n                    }\n                };\n\n                let metadata = match entry.metadata() {\n                    Ok(metadata) => metadata,\n                    Err(err) => {\n                        if err.io_error().map(|e| e.kind() == ErrorKind::NotFound) != Some(true) {\n                            if !silent {\n                                eprintln!(\n                                    \"error fetching metadata for {}: {}\",\n                                    entry_path.display(),\n                                    err\n                                );\n                            }\n                        }\n                        continue;\n                    }\n                };\n                filesystem_state.insert(relpath.to_path_buf(), metadata);\n            }\n            // Watchman doesn't return information about the root, so remove it here.\n            filesystem_state.remove(&PathBuf::new());\n            if !silent {\n                eprintln!(\"Crawled filesystem in {:?}\", start_crawl.elapsed());\n            }\n\n            filesystem_state\n        })\n    };\n\n    let start_query = Instant::now();\n\n    // Do not ignore fresh instance results: the goal is to validate the\n    // correctness of query results against the filesystem state, no\n    // matter what happened in the crawler.\n\n    use Expr::*;\n    let result = client\n        .query::<AuditQueryResult>(\n            &resolved,\n            QueryRequestCommon {\n                expression: Some(All(vec![\n                    Exists,\n                    Not(Box::new(Any(vec![\n                        DirName(DirNameTerm {\n                            path: \".git\".into(),\n                            depth: None,\n                        }),\n                        DirName(DirNameTerm {\n                            path: \".hg\".into(),\n                            depth: None,\n                        }),\n                        DirName(DirNameTerm {\n                            path: \".svn\".into(),\n                            depth: None,\n                        }),\n                        Name(NameTerm {\n                            paths: vec![\".git\".into()],\n                            wholename: true,\n                        }),\n                        Name(NameTerm {\n                            paths: vec![\".svn\".into()],\n                            wholename: true,\n                        }),\n                        Name(NameTerm {\n                            paths: vec![\".hg\".into()],\n                            wholename: true,\n                        }),\n                    ]))),\n                ])),\n                settle_period: option\n                    .settle_period_ms\n                    .map(Duration::from_millis)\n                    .map(SettleDurationMs),\n                settle_timeout: option\n                    .settle_timeout_ms\n                    .map(Duration::from_millis)\n                    .map(SettleDurationMs),\n                sync_timeout: SyncTimeout::Duration(Duration::new(option.sync_timeout_secs, 0)),\n\n                ..Default::default()\n            },\n        )\n        .await;\n\n    let result = match result {\n        Ok(result) => result,\n        Err(err) => {\n            writeln!(out, \"Error during Watchman query: {}\", err)?;\n            // Use a different error code for Watchman query errors, including timeouts, so they can be differentiated by audit logging.\n            std::process::exit(2);\n        }\n    };\n\n    writeln!(\n        out,\n        \"Queried Watchman in {:?} (is_fresh_instance = {}, clock = {:?}, version = {})\",\n        start_query.elapsed(),\n        result.is_fresh_instance,\n        result.clock,\n        result.version\n    )?;\n    if let Some(debug) = result.debug {\n        if let Some(cookie_files) = debug.cookie_files {\n            writeln!(out, \"    cookie files: {:?}\", cookie_files)?;\n        }\n    }\n\n    let filesystem_state = filesystem_state_handle.await.unwrap();\n\n    let diff_start = Instant::now();\n\n    let watchman_files = match result.files {\n        Some(files) => files,\n        None => {\n            return Err(anyhow::anyhow!(\"No files set in result\"));\n        }\n    };\n\n    let mut any_differences = false;\n    let mut phantoms = vec![];\n    let mut missing = vec![];\n\n    let mut watchman_state: AHashMap<&Path, &AuditQueryResult> =\n        AHashMap::with_capacity(watchman_files.len());\n    for watchman_file in &watchman_files {\n        let filename = &*watchman_file.name;\n        // Skip cookies when diffing.\n        if is_cookie(filename) {\n            continue;\n        }\n        watchman_state.insert(filename, watchman_file);\n\n        let metadata = match filesystem_state.get(filename) {\n            Some(metadata) => metadata,\n            None => {\n                phantoms.push(watchman_file);\n                continue;\n            }\n        };\n\n        let mut diffs = Vec::new();\n\n        #[cfg(unix)]\n        {\n            if *watchman_file.mode != u64::from(metadata.permissions().mode()) {\n                diffs.push(format!(\n                    \"watchman mode is {} vs. fs {}\",\n                    *watchman_file.mode,\n                    metadata.permissions().mode()\n                ));\n            }\n\n            if metadata.is_file() && *watchman_file.size != metadata.size() {\n                diffs.push(format!(\n                    \"watchman size is {} vs. fs {}\",\n                    *watchman_file.size,\n                    metadata.len()\n                ));\n            }\n\n            if metadata.is_file() && *watchman_file.mtime != metadata.mtime() {\n                diffs.push(format!(\n                    \"watchman mtime is {} vs. fs {}\",\n                    *watchman_file.mtime,\n                    metadata.mtime()\n                ));\n            }\n\n            if *watchman_file.ino != metadata.ino() {\n                diffs.push(format!(\n                    \"watchman ino is {} vs. fs {}\",\n                    *watchman_file.ino,\n                    metadata.ino()\n                ));\n            }\n        }\n\n        #[cfg(windows)]\n        {\n            // TODO: Add permission bit check for Windows.\n\n            if metadata.is_file() && *watchman_file.size != metadata.file_size() {\n                diffs.push(format!(\n                    \"watchman size is {} vs. fs {}\",\n                    *watchman_file.size,\n                    metadata.len()\n                ));\n            }\n\n            if metadata.is_file() {\n                if let Ok(last_write_time) = metadata.last_write_time().try_into() {\n                    let last_write_time = from_windows_epoch(last_write_time);\n                    if *watchman_file.mtime != last_write_time {\n                        diffs.push(format!(\n                            \"watchman mtime is {} vs. fs {}\",\n                            *watchman_file.mtime, last_write_time,\n                        ));\n                    }\n                }\n            }\n        }\n\n        if !diffs.is_empty() {\n            writeln!(\n                out,\n                \"Conflicting information for {}:\",\n                watchman_file.name.display()\n            )?;\n            for diff in diffs {\n                writeln!(out, \"  {}\", diff)?;\n            }\n            writeln!(out, \"  oclock is {:?}\", *watchman_file.oclock)?;\n            any_differences = true;\n        }\n    }\n\n    for (path, val) in &filesystem_state {\n        if is_cookie(path) {\n            continue;\n        }\n        if !watchman_state.contains_key(&path.as_path()) {\n            missing.push((path, val));\n        }\n    }\n\n    phantoms.sort_by(|x, y| x.name.cmp(&y.name));\n    missing.sort_by(|x, y| x.0.cmp(y.0));\n\n    if !phantoms.is_empty() {\n        writeln!(\n            out,\n            \"There are {} items reported by watchman not on the filesystem:\",\n            phantoms.len()\n        )?;\n        for phantom in &phantoms {\n            writeln!(out, \"  {}\", phantom.name.display())?;\n        }\n        any_differences = true;\n    }\n\n    if !missing.is_empty() {\n        writeln!(\n            out,\n            \"There are {} items on the filesystem not reported by watchman:\",\n            missing.len()\n        )?;\n        for (path, _) in &missing {\n            writeln!(out, \"  {}\", path.display())?;\n        }\n        any_differences = true;\n    }\n\n    if any_differences {\n        // This is dumb, but Rust doesn't have a standard way to return\n        // nonzero exit codes yet.\n        std::process::exit(1);\n    }\n\n    writeln!(out, \"Diffed in {:#?}\", diff_start.elapsed())?;\n\n    Ok(())\n}\n\nimpl AuditCmd {\n    fn to_audit_option(&self) -> AuditOption {\n        AuditOption {\n            settle_period_ms: self.settle_period_ms,\n            settle_timeout_ms: self.settle_timeout_ms,\n            sync_timeout_secs: self.sync_timeout_secs,\n            silent: false,\n        }\n    }\n\n    pub async fn run(&self) -> anyhow::Result<()> {\n        let client = Connector::new().connect().await?;\n        let mut out = std::io::stdout();\n\n        audit_repo(&mut out, &client, &self.path, self.to_audit_option()).await\n    }\n}\n"
  },
  {
    "path": "watchman/cli/src/main.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse structopt::StructOpt;\nuse structopt::clap::AppSettings;\n\nmod audit;\nmod rage;\n\n#[derive(StructOpt, Debug)]\n#[structopt(setting = AppSettings::DisableVersion,\n    setting = AppSettings::VersionlessSubcommands)]\nstruct MainCommand {\n    #[structopt(subcommand)]\n    subcommand: TopLevelSubcommand,\n}\n\n#[derive(StructOpt, Debug)]\nenum TopLevelSubcommand {\n    Audit(audit::AuditCmd),\n    Rage(rage::RageCmd),\n}\n\nimpl TopLevelSubcommand {\n    async fn run(&self) -> anyhow::Result<()> {\n        use TopLevelSubcommand::*;\n        match self {\n            Audit(cmd) => cmd.run().await,\n            Rage(cmd) => cmd.run().await,\n        }\n    }\n}\n\n#[tokio::main]\nasync fn main() {\n    let cmd = MainCommand::from_args();\n    match cmd.subcommand.run().await {\n        Ok(()) => {}\n        Err(e) => {\n            eprintln!(\"error: {}\", e);\n            std::process::exit(1);\n        }\n    }\n}\n"
  },
  {
    "path": "watchman/cli/src/rage/mod.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::fs::DirEntry;\nuse std::fs::File;\nuse std::io;\nuse std::io::BufRead;\nuse std::io::BufReader;\nuse std::io::Write;\nuse std::path::Path;\nuse std::path::PathBuf;\n\nuse anyhow::Result;\nuse duct::Expression;\nuse structopt::StructOpt;\nuse sysinfo::System;\n#[cfg(target_os = \"linux\")]\nuse tabular::Table;\n#[cfg(target_os = \"linux\")]\nuse tabular::row;\nuse watchman_client::CanonicalPath;\nuse watchman_client::Client;\nuse watchman_client::Connector;\nuse watchman_client::ResolvedRoot;\nuse watchman_client::prelude::GetConfigRequest;\n\n#[cfg(feature = \"fb\")]\nmod facebook;\nmod stream;\n\nuse self::stream::Stream;\nuse crate::audit::AuditOption;\n\n// Wrapper type around [`duct::Expression`] to provide better error messages\nstruct RageExpression {\n    expr: Expression,\n    cmd: &'static str,\n}\n\nimpl RageExpression {\n    fn new(expr: Expression, cmd: &'static str) -> Self {\n        Self {\n            expr: expr.stderr_to_stdout(),\n            cmd,\n        }\n    }\n\n    fn config<T: FnOnce(Expression) -> Expression>(mut self, fun: T) -> Self {\n        self.expr = fun(self.expr);\n        self\n    }\n\n    fn read(&self) -> String {\n        self.expr.read().map_or_else(\n            |e| format!(\"Failed to run '{}': {:?}\", self.cmd, e),\n            |x| x.trim().to_string(),\n        )\n    }\n}\n\nmacro_rules! cmd {\n    ($program:expr $(, $arg:expr )* $(,)? ) => {\n        RageExpression::new(duct::cmd!($program, $($arg),*), stringify!($program $($arg)*))\n    };\n}\n\n#[cfg(unix)]\nfn getuid() -> nix::unistd::Uid {\n    nix::unistd::getuid()\n}\n\nstruct WatchmanRage {\n    stream: Stream,\n}\n\nimpl WatchmanRage {\n    async fn new() -> Self {\n        let hostname = System::host_name();\n        let stream = Stream::new(hostname);\n\n        Self { stream }\n    }\n\n    fn empty_line(&mut self) -> Result<()> {\n        writeln!(self.stream)?;\n        Ok(())\n    }\n\n    async fn run(&mut self) -> Result<()> {\n        self.print_system_info()?;\n        self.empty_line()?;\n        self.print_package_version()?;\n        self.empty_line()?;\n        self.print_cli_version()?;\n        self.empty_line()?;\n        self.print_watchman_env()?;\n        self.empty_line()?;\n        #[cfg(target_os = \"linux\")]\n        {\n            self.print_inotify()?;\n            self.empty_line()?;\n        }\n        #[cfg(target_os = \"macos\")]\n        {\n            self.print_launchd_info()?;\n            self.empty_line()?;\n        }\n        self.print_state_info()?;\n        self.empty_line()?;\n        #[cfg(any(target_os = \"linux\", target_os = \"macos\"))]\n        {\n            self.print_running_watchman()?;\n            self.empty_line()?;\n        }\n        self.print_watchman_service_info().await?;\n        self.empty_line()?;\n        Ok(())\n    }\n\n    fn print_system_info(&mut self) -> Result<()> {\n        macro_rules! write_or_unknown {\n            ($out: expr, $fmt: expr, $value: expr) => {\n                writeln!($out, $fmt, $value.as_deref().unwrap_or(\"<unknown>\"))\n            };\n        }\n\n        // Note: OS & Arch here are set at compile time, which can be inaccurate in some cases (Apple Silicon)\n        writeln!(self.stream, \"Platform: {}\", std::env::consts::OS)?;\n        writeln!(\n            self.stream,\n            \"Arch (Compile Time): {}\",\n            std::env::consts::ARCH\n        )?;\n        write_or_unknown!(self.stream, \"Hostname: {}\", System::host_name())?;\n        write_or_unknown!(self.stream, \"Release: {}\", System::name())?;\n        write_or_unknown!(self.stream, \"System Version: {}\", System::os_version())?;\n        write_or_unknown!(self.stream, \"Kernel Version: {}\", System::kernel_version())?;\n        #[cfg(unix)]\n        writeln!(self.stream, \"Running watchman-diag as UID: {}\", getuid())?;\n\n        Ok(())\n    }\n\n    #[cfg(unix)]\n    fn print_package_version(&mut self) -> Result<()> {\n        writeln!(\n            self.stream,\n            \"RPM version (rpm -q fb-watchman): {}\",\n            cmd!(\"rpm\", \"-q\", \"fb-watchman\").read()\n        )?;\n        Ok(())\n    }\n\n    #[cfg(windows)]\n    fn print_package_version(&mut self) -> Result<()> {\n        writeln!(\n            self.stream,\n            \"Chocolatey version (clist -lr fb.watchman): {}\",\n            cmd!(\"clist\", \"-lr\", \"fb.watchman\").read()\n        )?;\n        Ok(())\n    }\n\n    fn print_cli_version(&mut self) -> Result<()> {\n        writeln!(\n            self.stream,\n            \"CLI version (watchman -v): {}\",\n            cmd!(\"watchman\", \"--no-spawn\", \"-v\").read()\n        )?;\n        Ok(())\n    }\n\n    fn print_watchman_env(&mut self) -> Result<()> {\n        let vars = std::env::vars()\n            .filter(|(k, _)| k.starts_with(\"WATCHMAN_\"))\n            .collect::<Vec<_>>();\n\n        if !vars.is_empty() {\n            writeln!(\n                self.stream,\n                \"WARNING: The following Watchman related environment variables are set (this is unusual and may cause problems):\"\n            )?;\n\n            for (k, v) in vars.iter() {\n                writeln!(self.stream, \"{}={}\", k, v)?;\n            }\n        }\n\n        Ok(())\n    }\n\n    #[cfg(target_os = \"linux\")]\n    fn print_inotify(&mut self) -> Result<()> {\n        let mut table =\n            Table::new(\"{:<} {:<} {:<} {:<}\").with_row(row!(\"PID\", \"EXE\", \"FD\", \"WATCHES\"));\n\n        macro_rules! bail {\n            ($e: expr) => {\n                match $e {\n                    Ok(v) => v,\n                    Err(_) => continue,\n                }\n            };\n        }\n        let procs = match std::fs::read_dir(\"/proc\") {\n            Ok(c) => c,\n            Err(e) => {\n                writeln!(self.stream, \"Unable to crawl inotify information: {:?}\", e)?;\n                return Ok(());\n            }\n        };\n        for proc in procs {\n            let proc = bail!(proc).path();\n            let content = bail!(std::fs::read_dir(proc.join(\"fd\")));\n            let exe = std::fs::read_link(proc.join(\"exe\")).map(|x| x.display().to_string());\n            let exe = exe.as_deref().unwrap_or(\"<unknown>\");\n\n            for entry in content {\n                let fd = bail!(entry).path();\n                let target = bail!(std::fs::read_link(&fd));\n                if target.display().to_string() != \"anon_inode:inotify\" {\n                    continue;\n                }\n\n                if let Some(fdnum) = fd.file_name() {\n                    let fdinfo = proc.join(\"fdinfo\").join(fdnum);\n                    let fdinfo = bail!(std::fs::read_to_string(fdinfo));\n                    let fdnum = fdnum.to_string_lossy();\n                    let pid = proc\n                        .file_name()\n                        .map_or_else(|| \"<unknown>\".into(), |x| x.to_string_lossy());\n\n                    if fdinfo.is_empty() {\n                        table.add_row(row!(pid, exe, fdnum, \"<unknown>\"));\n                    } else {\n                        let watches = fdinfo\n                            .lines()\n                            .filter(|line| line.starts_with(\"inotify wd:\"))\n                            .count();\n                        table.add_row(row!(pid, exe, fdnum, watches));\n                    }\n                }\n            }\n        }\n\n        writeln!(self.stream, \"Inotify watch information\")?;\n        writeln!(self.stream, \"{}\", table)?;\n        Ok(())\n    }\n\n    #[cfg(target_os = \"macos\")]\n    fn print_launchd_info(&mut self) -> Result<()> {\n        writeln!(self.stream, \"Launchd info:\")?;\n        writeln!(\n            self.stream,\n            \"{}\",\n            cmd!(\"launchctl\", \"list\", \"com.github.facebook.watchman\").read()\n        )?;\n\n        writeln!(self.stream, \"launchd.log samples:\")?;\n        match File::open(\"/var/log/com.apple.xpc.launchd/launchd.log\") {\n            Ok(file) => {\n                let watchman_lines = BufReader::new(file)\n                    .lines()\n                    .filter_map(|result| {\n                        if let Ok(line) = result {\n                            if line.contains(\"com.github.facebook.watchman\") {\n                                return Some(line);\n                            }\n                        }\n                        None\n                    })\n                    .take(40); // Limit log entries printed to avoid flooding the rage\n\n                for line in watchman_lines {\n                    writeln!(self.stream, \"{}\", line)?;\n                }\n            }\n            Err(e) => {\n                writeln!(self.stream, \"Failed to open launchd.log: {}\", e)?;\n            }\n        }\n\n        Ok(())\n    }\n\n    fn print_state_info(&mut self) -> Result<()> {\n        // construct all possible state directories\n        let mut roots: Vec<PathBuf> = vec![\n            \"/var/facebook/watchman\".into(),\n            \"/opt/facebook/var/run/watchman\".into(),\n            \"/opt/facebook/watchman/var/run/watchman\".into(),\n        ];\n\n        if let Ok(path) = std::env::var(\"TEMP\") {\n            roots.push(path.into());\n        }\n        if let Ok(path) = std::env::var(\"TMP\") {\n            roots.push(path.into());\n        }\n\n        /// Are there any file ends with `-state` name in there\n        fn get_state_dirs(p: &Path) -> Vec<DirEntry> {\n            if let Ok(content) = std::fs::read_dir(p) {\n                content\n                    .filter_map(|entry| {\n                        if let Ok(entry) = entry {\n                            if entry.file_name().to_string_lossy().ends_with(\"-state\") {\n                                Some(entry)\n                            } else {\n                                None\n                            }\n                        } else {\n                            None\n                        }\n                    })\n                    .collect::<Vec<_>>()\n            } else {\n                Vec::new()\n            }\n        }\n\n        fn print_state_dir(out: &mut Stream, state: &Path) -> Result<()> {\n            let state_file = state.join(\"state\");\n            writeln!(out, \"State information from {}\\n\", state.display())?;\n            writeln!(out, \"State file: {}\", state_file.display())?;\n\n            if let Ok(content) = std::fs::read_to_string(state_file) {\n                writeln!(out, \"{}\", content)?;\n            }\n\n            let log_file = state.join(\"log\");\n            if let Ok(lines) = {\n                File::open(&log_file).and_then(|file| {\n                    // We prefer `.split` here instead of `.lines` since the log\n                    // file may contain invalid utf-8 characters.\n                    BufReader::new(file)\n                        .split(b'\\n')\n                        .collect::<io::Result<Vec<_>>>()\n                })\n            } {\n                writeln!(out, \"Log samples: {}\", log_file.display())?;\n\n                for line in lines.into_iter().rev().take(300).rev() {\n                    writeln!(out, \"{}\", String::from_utf8_lossy(&line).trim())?;\n                }\n            }\n\n            Ok(())\n        }\n\n        for root in roots.iter() {\n            let dirs = get_state_dirs(root);\n            for state in dirs {\n                print_state_dir(&mut self.stream, &state.path())?;\n            }\n        }\n\n        #[cfg(windows)]\n        if let Ok(path) = std::env::var(\"LOCALAPPDATA\") {\n            let windows_state = PathBuf::from(&path).join(\"watchman\");\n            print_state_dir(&mut self.stream, &windows_state)?;\n        }\n\n        Ok(())\n    }\n\n    #[cfg(any(target_os = \"linux\", target_os = \"macos\"))]\n    fn print_running_watchman(&mut self) -> Result<()> {\n        let lines = duct::cmd!(\"ps\", \"-ef\").read()?;\n\n        writeln!(self.stream, \"Running Watchman Processes\")?;\n        for line in lines.lines() {\n            if line.contains(\"watchman\") {\n                writeln!(self.stream, \"{}\", line)?;\n            }\n        }\n\n        Ok(())\n    }\n\n    async fn print_watchman_service_info(&mut self) -> Result<()> {\n        // Do not run if we are in sudo\n        #[cfg(posix)]\n        if getuid == 0 && std::env::var(\"SUDO_UID\").is_some() {\n            return;\n        }\n\n        // TODO: connect timeself.stream\n        let client = Connector::new().connect().await?;\n        let version = client.version().await?;\n\n        writeln!(self.stream, \"Watchman service information:\")?;\n        writeln!(self.stream, \"{:?}\", version)?;\n        writeln!(self.stream, \"Status:\\n\")?;\n\n        writeln!(\n            self.stream,\n            \"{}\",\n            cmd!(\"watchman\", \"--pretty\", \"debug-status\").read()\n        )?;\n\n        // TODO(zeyi): it's probably better if this can return `ResolvedRoot`\n        let watches = client.watch_list().await?.roots;\n        writeln!(self.stream, \"Watches:\")?;\n        for watch in watches.iter() {\n            writeln!(self.stream, \"- {}\", watch.display())?;\n        }\n\n        for watch in watches.iter() {\n            writeln!(self.stream)?;\n\n            let option = AuditOption {\n                silent: true,\n                ..Default::default()\n            };\n            if let Err(e) = crate::audit::audit_repo(&mut self.stream, &client, watch, option).await\n            {\n                writeln!(\n                    self.stream,\n                    \"Failed to sanity check {}: {:?}\",\n                    watch.display(),\n                    e\n                )?;\n            }\n            writeln!(self.stream)?;\n\n            self.collect_watch_info(&client, watch).await.ok();\n        }\n\n        Ok(())\n    }\n\n    async fn check_watchman_config(&mut self, client: &Client, root: &ResolvedRoot) -> Result<()> {\n        let repo_root = root.project_root();\n        // We are not using `client.get_config()` method to examine the\n        // configuration currently used in Watchman server because it is typed\n        // and we may need to compare fields that is not yet included in the struct definition.\n        let repo_config: serde_json::Value = client\n            .generic_request(GetConfigRequest(\"get-config\", repo_root.into()))\n            .await?;\n        let watchmanconfig_file = repo_root.join(\".watchmanconfig\");\n        let watchmanconfig = std::fs::read_to_string(&watchmanconfig_file)?;\n        let watchmanconfig: serde_json::Value = serde_json::from_str(&watchmanconfig)?;\n\n        if let Some(repo_config) = repo_config.get(\"config\") {\n            if repo_config != &watchmanconfig {\n                writeln!(\n                    self.stream,\n                    \"Watchman root {} is using this configuration:\\n {}\",\n                    repo_root.display(),\n                    repo_config\n                )?;\n                writeln!(\n                    self.stream,\n                    \"'{}' has this configuration:\\n{}\",\n                    watchmanconfig_file.display(),\n                    watchmanconfig\n                )?;\n                writeln!(\n                    self.stream,\n                    \"** You should run: `watchman watch-del {}; watchman watch {}` to reload .watchmanconfig **\",\n                    repo_root.display(),\n                    repo_root.display()\n                )?;\n            }\n        } else {\n            writeln!(\n                self.stream,\n                \"Failed to retireve configuration from Watchman. Not checking if configuration matches on-disk setting\"\n            )?;\n        }\n\n        Ok(())\n    }\n\n    async fn collect_watch_info(&mut self, client: &Client, repo: &Path) -> Result<()> {\n        let root = match client\n            .resolve_root(CanonicalPath::with_canonicalized_path(repo.into()))\n            .await\n        {\n            Ok(root) => root,\n            Err(e) => {\n                writeln!(\n                    self.stream,\n                    \"Failed to resolve repo root for '{}': {:?}\\n\",\n                    repo.display(),\n                    e\n                )?;\n                return Ok(());\n            }\n        };\n\n        if let Err(e) = self.check_watchman_config(client, &root).await {\n            writeln!(\n                self.stream,\n                \"Failed to check Watchman configuration for '{}': {:?}\\n\",\n                repo.display(),\n                e\n            )?;\n        }\n\n        if root.watcher() != \"eden\" {\n            writeln!(self.stream, \"Sparse configuration for {}\", repo.display())?;\n            writeln!(\n                self.stream,\n                \"{}\\n\",\n                cmd!(\"hg\", \"sparse\").config(|c| c.dir(repo)).read()\n            )?;\n\n            // TODO(zeyi): we could migrate this into using the watchman connection,\n            // but we need to define the struct first\n            writeln!(\n                self.stream,\n                \"Content hash cache stats for {}\",\n                repo.display()\n            )?;\n            writeln!(\n                self.stream,\n                \"{}\\n\",\n                cmd!(\"watchman\", \"debug-contenthash\", repo).read()\n            )?;\n\n            writeln!(\n                self.stream,\n                \"Symlink target cache stats for {}\",\n                repo.display()\n            )?;\n            writeln!(\n                self.stream,\n                \"{}\\n\",\n                cmd!(\"watchman\", \"debug-symlink-target-cache\", repo).read()\n            )?;\n        }\n\n        writeln!(self.stream, \"Subscriptions for {}\", repo.display())?;\n        writeln!(\n            self.stream,\n            \"{}\\n\",\n            cmd!(\"watchman\", \"debug-get-subscriptions\", repo).read()\n        )?;\n\n        writeln!(self.stream, \"Asserted states for {}\", repo.display())?;\n        writeln!(\n            self.stream,\n            \"{}\\n\",\n            cmd!(\"watchman\", \"debug-get-asserted-states\", repo).read()\n        )?;\n\n        Ok(())\n    }\n\n    fn wait(self) {\n        self.stream.wait();\n    }\n}\n\n#[derive(StructOpt, Debug)]\npub(crate) struct RageCmd {}\n\nimpl RageCmd {\n    pub(crate) async fn run(&self) -> Result<()> {\n        let mut rage = WatchmanRage::new().await;\n        rage.run().await?;\n        rage.wait();\n\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "watchman/cli/src/rage/stream.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::io;\nuse std::io::IsTerminal;\nuse std::io::Stdout;\nuse std::io::Write;\n\n#[cfg(feature = \"fb\")]\npub use super::facebook::FbReporter;\n\n#[cfg(not(feature = \"fb\"))]\nmod fallback {\n    use std::io;\n    use std::io::Write;\n\n    use anyhow::Result;\n    use anyhow::anyhow;\n\n    pub struct FbReporter {}\n\n    impl FbReporter {\n        pub fn new(hostname: Option<String>) -> Result<Self> {\n            Err(anyhow!(\"unimplemented\"))\n        }\n\n        pub fn wait(mut self) {\n            unimplemented!()\n        }\n    }\n\n    impl Write for FbReporter {\n        fn write(&mut self, buf: &[u8]) -> io::Result<usize> {\n            unimplemented!()\n        }\n\n        fn flush(&mut self) -> io::Result<()> {\n            unimplemented!()\n        }\n    }\n}\n\n#[cfg(not(feature = \"fb\"))]\npub use self::fallback::*;\n\npub enum Stream {\n    Child(FbReporter),\n    Stdout(Stdout),\n}\n\nimpl Stream {\n    /// Creates a printer that writes to stdout\n    fn new_stdout() -> Self {\n        Self::Stdout(std::io::stdout())\n    }\n\n    pub fn new(hostname: Option<String>) -> Self {\n        if !std::io::stdout().is_terminal() {\n            Self::new_stdout()\n        } else if let Ok(reporter) = FbReporter::new(hostname) {\n            Self::Child(reporter)\n        } else {\n            Self::new_stdout()\n        }\n    }\n\n    #[allow(dead_code)]\n    pub fn is_redirected(&self) -> bool {\n        if let Self::Child(_) = self {\n            true\n        } else {\n            !std::io::stdout().is_terminal()\n        }\n    }\n\n    fn out(&mut self) -> &mut dyn Write {\n        match self {\n            Self::Child(c) => c,\n            Self::Stdout(out) => out,\n        }\n    }\n\n    pub fn wait(self) {\n        if let Self::Child(child) = self {\n            // wait until reporter finishes, and leave terminal nice and clean.\n            child.wait();\n        }\n    }\n}\n\nimpl Write for Stream {\n    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {\n        self.out().write(buf)\n    }\n\n    fn flush(&mut self) -> io::Result<()> {\n        self.out().flush()\n    }\n}\n"
  },
  {
    "path": "watchman/cmds/debug.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <unordered_map>\n\n#include <fmt/chrono.h>\n\n#include <folly/String.h>\n#include <folly/chrono/Conv.h>\n#include <folly/system/Shell.h>\n\n#include \"watchman/Client.h\"\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/LRUCache.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/Poison.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/watchman_cmd.h\"\n\nnamespace watchman {\nnamespace {\n\nstatic UntypedResponse cmd_debug_recrawl(Client* client, const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments for 'debug-recrawl'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  UntypedResponse resp;\n\n  root->scheduleRecrawl(\"debug-recrawl\");\n\n  resp.set(\"recrawl\", json_true());\n  return resp;\n}\nW_CMD_REG(\"debug-recrawl\", cmd_debug_recrawl, CMD_DAEMON, w_cmd_realpath_root);\n\nstatic UntypedResponse cmd_debug_show_cursors(\n    Client* client,\n    const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments for 'debug-show-cursors'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  UntypedResponse resp;\n\n  auto map = root->inner.cursors.rlock();\n  std::unordered_map<w_string, json_ref> cursors;\n  cursors.reserve(map->size());\n  for (const auto& it : *map) {\n    const auto& name = it.first;\n    const auto& ticks = it.second;\n    cursors.insert_or_assign(name, json_integer(ticks));\n  }\n\n  resp.set(\"cursors\", json_object(std::move(cursors)));\n  return resp;\n}\nW_CMD_REG(\n    \"debug-show-cursors\",\n    cmd_debug_show_cursors,\n    CMD_DAEMON,\n    w_cmd_realpath_root);\n\n/* debug-ageout */\nstatic UntypedResponse cmd_debug_ageout(Client* client, const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 3) {\n    throw ErrorResponse(\"wrong number of arguments for 'debug-ageout'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  std::chrono::seconds min_age(args.array()[2].asInt());\n\n  UntypedResponse resp;\n  root->performAgeOut(min_age);\n\n  resp.set(\"ageout\", json_true());\n  return resp;\n}\nW_CMD_REG(\"debug-ageout\", cmd_debug_ageout, CMD_DAEMON, w_cmd_realpath_root);\n\nstatic UntypedResponse cmd_debug_poison(Client* client, const json_ref& args) {\n  auto root = resolveRoot(client, args);\n\n  auto now = std::chrono::system_clock::now();\n\n  set_poison_state(\n      root->root_path,\n      now,\n      \"debug-poison\",\n      std::error_code(ENOMEM, std::generic_category()));\n\n  UntypedResponse resp;\n  resp.set(\n      \"poison\",\n      typed_string_to_json(poisoned_reason.rlock()->c_str(), W_STRING_UNICODE));\n  return resp;\n}\nW_CMD_REG(\"debug-poison\", cmd_debug_poison, CMD_DAEMON, w_cmd_realpath_root);\n\nstatic UntypedResponse cmd_debug_drop_privs(Client* client, const json_ref&) {\n  client->client_is_owner = false;\n\n  UntypedResponse resp;\n  resp.set(\"owner\", json_boolean(client->client_is_owner));\n  return resp;\n}\nW_CMD_REG(\"debug-drop-privs\", cmd_debug_drop_privs, CMD_DAEMON, nullptr);\n\nstruct DebugSetParallelCrawlCommand\n    : TypedCommand<DebugSetParallelCrawlCommand> {\n  static constexpr std::string_view name = \"debug-set-parallel-crawl\";\n  static constexpr CommandFlags flags = CMD_DAEMON;\n\n  using Request = serde::Array<2, w_string, bool>;\n\n  struct Response : BaseResponse {\n    bool enabled;\n\n    template <typename X>\n    void map(X& x) {\n      BaseResponse::map(x);\n      x(\"enable_parallel_crawl\", enabled);\n    }\n  };\n\n  static Response handle(Client* client, const Request& req) {\n    Response res;\n    res.version = w_string{PACKAGE_VERSION, W_STRING_UNICODE};\n    bool create = true;\n    auto root = resolveRootByName(client, std::get<0>(req).c_str(), create);\n    bool enabled = std::get<1>(req);\n    root->enable_parallel_crawl.store(enabled, std::memory_order_release);\n    res.enabled = enabled;\n    return res;\n  }\n};\nWATCHMAN_COMMAND(debug_set_parallel_command, DebugSetParallelCrawlCommand);\n\nstatic UntypedResponse cmd_debug_set_subscriptions_paused(\n    Client* clientbase,\n    const json_ref& args) {\n  auto client = (UserClient*)clientbase;\n\n  const auto& paused = args.at(1);\n  auto& paused_map = paused.object();\n  for (auto& it : paused_map) {\n    auto sub_iter = client->subscriptions.find(it.first);\n    if (sub_iter == client->subscriptions.end()) {\n      throw ErrorResponse(\n          \"this client does not have a subscription named '{}'\", it.first);\n    }\n    if (!it.second.isBool()) {\n      throw ErrorResponse(\n          \"new value for subscription '{}' not a boolean\", it.first);\n    }\n  }\n\n  auto states = json_object();\n\n  for (auto& it : paused_map) {\n    auto sub_iter = client->subscriptions.find(it.first);\n    bool old_paused = sub_iter->second->debug_paused;\n    bool new_paused = it.second.asBool();\n    sub_iter->second->debug_paused = new_paused;\n    states.set(\n        it.first,\n        json_object({{\"old\", json_boolean(old_paused)}, {\"new\", it.second}}));\n  }\n\n  UntypedResponse resp;\n  resp.set(\"paused\", std::move(states));\n  return resp;\n}\nW_CMD_REG(\n    \"debug-set-subscriptions-paused\",\n    cmd_debug_set_subscriptions_paused,\n    CMD_DAEMON,\n    nullptr);\n\nstatic json_ref getDebugSubscriptionInfo(Root* root) {\n  std::vector<json_ref> subscriptions;\n  for (const auto& user_client : UserClient::getAllClients()) {\n    for (const auto& sub : user_client->subscriptions) {\n      if (root == sub.second->root.get()) {\n        std::vector<json_ref> last_responses;\n        for (auto& response : sub.second->lastResponses) {\n          char timebuf[64];\n          last_responses.push_back(json_object({\n              {\"written_time\",\n               typed_string_to_json(\n                   Log::timeString(\n                       timebuf,\n                       std::size(timebuf),\n                       folly::to<timeval>(response.written)))},\n              {\"response\", response.response},\n          }));\n        }\n\n        subscriptions.push_back(json_object({\n            {\"name\", w_string_to_json(sub.first)},\n            {\"client_id\", json_integer(user_client->unique_id)},\n            {\"last_responses\", json_array(std::move(last_responses))},\n        }));\n      }\n    }\n  }\n  return json_array(std::move(subscriptions));\n}\n\nstatic UntypedResponse cmd_debug_get_subscriptions(\n    Client* clientbase,\n    const json_ref& args) {\n  auto client = (UserClient*)clientbase;\n\n  auto root = resolveRoot(client, args);\n\n  UntypedResponse resp;\n  auto debug_info = root->unilateralResponses->getDebugInfo();\n  // copy over all the key-value pairs from debug_info\n  resp.insert(debug_info.object().begin(), debug_info.object().end());\n\n  auto subscriptions = getDebugSubscriptionInfo(root.get());\n  resp.emplace(\"subscriptions\", subscriptions);\n\n  return resp;\n}\nW_CMD_REG(\n    \"debug-get-subscriptions\",\n    cmd_debug_get_subscriptions,\n    CMD_DAEMON,\n    w_cmd_realpath_root);\n\nstatic UntypedResponse cmd_debug_get_asserted_states(\n    Client* clientbase,\n    const json_ref& args) {\n  auto client = (UserClient*)clientbase;\n\n  auto root = resolveRoot(client, args);\n  UntypedResponse response;\n\n  // copy over all the key-value pairs to stateSet and release lock\n  auto states = root->assertedStates.rlock()->debugStates();\n  response.set(\n      {{\"root\", w_string_to_json(root->root_path)},\n       {\"states\", std::move(states)}});\n  return response;\n}\nW_CMD_REG(\n    \"debug-get-asserted-states\",\n    cmd_debug_get_asserted_states,\n    CMD_DAEMON,\n    w_cmd_realpath_root);\n\nnamespace {\n\nstd::string shellQuoteCommand(std::string_view command) {\n  std::vector<std::string> argv;\n  folly::split('\\0', command, argv);\n\n  // Every argument in a command line is null-terminated. Remove the last, empty\n  // argument.\n  if (argv.size() && argv.back().empty()) {\n    argv.pop_back();\n  }\n\n  for (auto& arg : argv) {\n    // TODO: shellQuote is not particularly good. It always brackets with ' and\n    // does not handle non-printable characters. We should write our own.\n    arg = folly::shellQuote(arg);\n  }\n  return folly::join(' ', argv);\n}\n\n} // namespace\n\nstruct DebugStatusCommand : PrettyCommand<DebugStatusCommand> {\n  static constexpr std::string_view name = \"debug-status\";\n\n  static constexpr CommandFlags flags = CMD_DAEMON | CMD_ALLOW_ANY_USER;\n\n  using Request = serde::Array<0>;\n\n  struct Response : BaseResponse {\n    std::vector<RootDebugStatus> roots;\n    std::vector<ClientDebugStatus> clients;\n\n    template <typename X>\n    void map(X& x) {\n      BaseResponse::map(x);\n      x(\"roots\", roots);\n      x(\"clients\", clients);\n    }\n  };\n\n  static Response handle(Client*, const Request&) {\n    Response res;\n    res.version = w_string{PACKAGE_VERSION, W_STRING_UNICODE};\n    res.roots = Root::getStatusForAllRoots();\n    res.clients = UserClient::getStatusForAllClients();\n    return res;\n  }\n\n  static void printResult(const Response& response) {\n    fmt::print(\"ROOTS\\n-----\\n\");\n    for (auto& root : response.roots) {\n      fmt::print(\"{}\\n\", root.path);\n      if (root.cancelled) {\n        fmt::print(\"  - cancelled: true\\n\");\n      }\n      fmt::print(\"  - fstype: {}\\n\", root.fstype);\n      if (!root.watcher.empty()) {\n        fmt::print(\"  - watcher: {}\\n\", root.watcher);\n      }\n      fmt::print(\"  - uptime: {} s\\n\", root.uptime);\n      fmt::print(\"  - crawl_status: {}\\n\", root.crawl_status);\n      fmt::print(\"  - done_initial: {}\\n\", root.done_initial);\n      fmt::print(\"\\n\");\n    }\n\n    fmt::print(\"CLIENTS\\n-------\\n\");\n    for (auto& client : response.clients) {\n      if (client.peer) {\n        fmt::print(\n            \"{}: {}\\n\", client.peer->pid, shellQuoteCommand(client.peer->name));\n      } else {\n        fmt::print(\"unknown peer\\n\");\n      }\n      if (client.since) {\n        fmt::print(\n            \"  - since: {}\\n\",\n            std::chrono::system_clock::from_time_t(client.since.value()));\n      }\n      fmt::print(\"  - state: {}\\n\", client.state);\n      fmt::print(\"\\n\");\n    }\n    // fmt does not flush, so when the stream is not line buffered the stream\n    // needs to be manually flushed (or else nothing is written to stdout).\n    // eventually this can be fmt::flush instead:\n    // https://github.com/vgc/vgc/issues/519\n    // TODO(T136788014): why doesn't macOS do this for us.\n    fflush(stdout);\n  }\n};\nWATCHMAN_COMMAND(debug_status, DebugStatusCommand);\n\nstruct DebugRootStatusCommand : TypedCommand<DebugRootStatusCommand> {\n  static constexpr std::string_view name = \"debug-root-status\";\n  static constexpr CommandFlags flags = CMD_DAEMON;\n\n  using Request = serde::Array<1, w_string>;\n\n  struct Response : BaseResponse {\n    RootDebugStatus status;\n\n    template <typename X>\n    void map(X& x) {\n      BaseResponse::map(x);\n      x(\"root_status\", status);\n    }\n  };\n\n  static Response handle(Client* client, const Request& req) {\n    Response res;\n    res.version = w_string{PACKAGE_VERSION, W_STRING_UNICODE};\n    auto root = resolveRootByName(client, std::get<0>(req).c_str());\n    res.status = root->getStatus();\n    return res;\n  }\n};\nWATCHMAN_COMMAND(debug_root_status, DebugRootStatusCommand);\n\nstatic UntypedResponse cmd_debug_watcher_info(\n    Client* clientbase,\n    const json_ref& args) {\n  auto* client = static_cast<UserClient*>(clientbase);\n\n  auto root = resolveRoot(client, args);\n  UntypedResponse response;\n  response.set(\"watcher-debug-info\", root->view()->getWatcherDebugInfo());\n  return response;\n}\nW_CMD_REG(\"debug-watcher-info\", cmd_debug_watcher_info, CMD_DAEMON, nullptr);\n\nstatic UntypedResponse cmd_debug_watcher_info_clear(\n    Client* clientbase,\n    const json_ref& args) {\n  auto* client = static_cast<UserClient*>(clientbase);\n\n  auto root = resolveRoot(client, args);\n  UntypedResponse response;\n  root->view()->clearWatcherDebugInfo();\n  return response;\n}\nW_CMD_REG(\n    \"debug-watcher-info-clear\",\n    cmd_debug_watcher_info_clear,\n    CMD_DAEMON,\n    nullptr);\n\nvoid addCacheStats(UntypedResponse& resp, const CacheStats& stats) {\n  resp.set(\n      {{\"cacheHit\", json_integer(stats.cacheHit)},\n       {\"cacheShare\", json_integer(stats.cacheShare)},\n       {\"cacheMiss\", json_integer(stats.cacheMiss)},\n       {\"cacheEvict\", json_integer(stats.cacheEvict)},\n       {\"cacheStore\", json_integer(stats.cacheStore)},\n       {\"cacheLoad\", json_integer(stats.cacheLoad)},\n       {\"cacheErase\", json_integer(stats.cacheErase)},\n       {\"clearCount\", json_integer(stats.clearCount)},\n       {\"size\", json_integer(stats.size)}});\n}\n\nUntypedResponse debugContentHashCache(Client* client, const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments for 'debug-contenthash'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  auto view = std::dynamic_pointer_cast<InMemoryView>(root->view());\n  if (!view) {\n    throw ErrorResponse(\"root is not an InMemoryView watcher\");\n  }\n\n  auto stats = view->debugAccessCaches().contentHashCache.stats();\n  UntypedResponse resp;\n  addCacheStats(resp, stats);\n  return resp;\n}\nW_CMD_REG(\n    \"debug-contenthash\",\n    debugContentHashCache,\n    CMD_DAEMON,\n    w_cmd_realpath_root);\n\nUntypedResponse debugSymlinkTargetCache(Client* client, const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\n        \"wrong number of arguments for 'debug-symlink-target-cache'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  auto view = std::dynamic_pointer_cast<InMemoryView>(root->view());\n  if (!view) {\n    throw ErrorResponse(\"root is not an InMemoryView watcher\");\n  }\n\n  auto stats = view->debugAccessCaches().symlinkTargetCache.stats();\n  UntypedResponse resp;\n  addCacheStats(resp, stats);\n  return resp;\n}\nW_CMD_REG(\n    \"debug-symlink-target-cache\",\n    debugSymlinkTargetCache,\n    CMD_DAEMON,\n    w_cmd_realpath_root);\n\n} // namespace\n} // namespace watchman\n"
  },
  {
    "path": "watchman/cmds/find.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Client.h\"\n#include \"watchman/ClientContext.h\"\n#include \"watchman/ProcessUtil.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/eval.h\"\n#include \"watchman/query/parse.h\"\n#include \"watchman/saved_state/SavedStateFactory.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\n\n/* find /root [patterns] */\nstatic UntypedResponse cmd_find(Client* client, const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) < 2) {\n    throw ErrorResponse(\"not enough arguments for 'find'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  auto query = parseQueryLegacy(root, args, 2, nullptr, nullptr, nullptr);\n  if (client->client_mode) {\n    query->sync_timeout = std::chrono::milliseconds(0);\n  }\n  auto clientPid = client->stm ? client->stm->getPeerProcessID() : 0;\n  query->clientInfo.clientPid = clientPid;\n  query->clientInfo.clientInfo = clientPid\n      ? std::make_optional(lookupProcessInfo(clientPid))\n      : std::nullopt;\n\n  auto res = w_query_execute(query.get(), root, nullptr, getInterface);\n  UntypedResponse response;\n  response.set(\n      {{\"clock\", res.clockAtStartOfQuery.toJson()},\n       {\"files\", std::move(res.resultsArray).toJson()}});\n\n  return response;\n}\nW_CMD_REG(\n    \"find\",\n    cmd_find,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    w_cmd_realpath_root);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/cmds/heapprof.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include <folly/String.h>\n#include <folly/memory/Malloc.h>\n#include \"watchman/Client.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\n\n#if defined(FOLLY_USE_JEMALLOC)\n\n// This command is present to manually trigger a  heap profile dump when\n// jemalloc is in use.\nstatic UntypedResponse cmd_debug_prof_dump(Client*, const json_ref&) {\n  if (!folly::usingJEMalloc()) {\n    throw std::runtime_error(\"jemalloc is not in use\");\n  }\n\n  auto result = mallctl(\"prof.dump\", nullptr, nullptr, nullptr, 0);\n  UntypedResponse resp;\n  resp.set(\n      \"prof.dump\",\n      w_string_to_json(\n          fmt::format(\"mallctl prof.dump returned: {}\", folly::errnoStr(result))\n              .c_str()));\n  return resp;\n}\nW_CMD_REG(\"debug-prof-dump\", cmd_debug_prof_dump, CMD_DAEMON, nullptr);\n\n#endif\n"
  },
  {
    "path": "watchman/cmds/info.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <map>\n#include <optional>\n#include <set>\n\n#include <folly/String.h>\n\n#include \"watchman/Client.h\"\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Serde.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/sockname.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\n\nnamespace {\n\nclass VersionCommand : public PrettyCommand<VersionCommand> {\n public:\n  static constexpr std::string_view name = \"version\";\n\n  static constexpr CommandFlags flags =\n      CMD_DAEMON | CMD_CLIENT | CMD_ALLOW_ANY_USER;\n\n  struct RequestOptions : serde::Object {\n    std::vector<w_string> required;\n    std::vector<w_string> optional;\n\n    template <typename X>\n    void map(X& x) {\n      x.skip_if_default(\"required\", required);\n      x.skip_if_default(\"optional\", optional);\n    }\n  };\n\n  using Request = serde::Array<0, RequestOptions>;\n\n  struct Response : BaseResponse {\n    std::optional<w_string> buildinfo;\n    std::map<w_string, bool> capabilities;\n    std::optional<w_string> error;\n\n    template <typename X>\n    void map(X& x) {\n      BaseResponse::map(x);\n      x.skip_if_default(\"buildinfo\", buildinfo);\n      x.skip_if_default(\"capabilities\", capabilities);\n      x.skip_if_default(\"error\", error);\n    }\n  };\n\n  static Response handle(Client*, const Request& request) {\n    Response response;\n\n#ifdef WATCHMAN_BUILD_INFO\n    response.buildinfo = w_string{WATCHMAN_BUILD_INFO, W_STRING_UNICODE};\n#endif\n\n    auto& options = std::get<0>(request);\n\n    if (!options.required.empty() || !options.optional.empty()) {\n      for (const auto& capname : options.optional) {\n        response.capabilities[capname] = capability_supported(capname.view());\n      }\n\n      std::set<w_string> missing;\n\n      for (const auto& capname : options.required) {\n        bool have = capability_supported(capname.view());\n        response.capabilities[capname] = have;\n        if (!have) {\n          missing.insert(capname);\n        }\n      }\n\n      if (!missing.empty()) {\n        response.error = w_string::build(\n            \"client required capabilities [\",\n            fmt::join(missing, \", \"),\n            \"] not supported by this server\");\n      }\n    }\n\n    return response;\n  }\n\n  static void printResult(const Response& response) {\n    if (response.error) {\n      fmt::print(\"error: {}\\n\", response.error.value());\n    }\n    fmt::print(\"version: {}\\n\", response.version);\n    if (response.buildinfo) {\n      fmt::print(\"buildinfo: {}\\n\", response.buildinfo.value());\n    }\n    // fmt does not flush, so when the stream is not line buffered the stream\n    // needs to be manually flushed (or else nothing is written to stdout).\n    // eventually this can be fmt::flush instead:\n    // https://github.com/vgc/vgc/issues/519\n    // TODO(T136788014): why doesn't macOS do this for us.\n    fflush(stdout);\n  }\n};\n\nWATCHMAN_COMMAND(version, VersionCommand);\n\n/* list-capabilities */\nstatic UntypedResponse cmd_list_capabilities(Client*, const json_ref&) {\n  UntypedResponse resp;\n  resp.set(\"capabilities\", capability_get_list());\n  return resp;\n}\nW_CMD_REG(\n    \"list-capabilities\",\n    cmd_list_capabilities,\n    CMD_DAEMON | CMD_CLIENT | CMD_ALLOW_ANY_USER,\n    nullptr);\n\n/* get-sockname */\nstatic UntypedResponse cmd_get_sockname(Client*, const json_ref&) {\n  UntypedResponse resp;\n\n  // For legacy reasons we report the unix domain socket as sockname on\n  // unix but the named pipe path on windows\n  resp.set(\n      \"sockname\",\n      w_string_to_json(w_string(get_sock_name_legacy(), W_STRING_BYTE)));\n  if (!disable_unix_socket) {\n    resp.set(\n        \"unix_domain\", w_string_to_json(w_string::build(get_unix_sock_name())));\n  }\n\n#ifdef _WIN32\n  if (!disable_named_pipe) {\n    resp.set(\n        \"named_pipe\",\n        w_string_to_json(w_string::build(get_named_pipe_sock_path())));\n  }\n#endif\n\n  return resp;\n}\nW_CMD_REG(\n    \"get-sockname\",\n    cmd_get_sockname,\n    CMD_DAEMON | CMD_CLIENT | CMD_ALLOW_ANY_USER,\n    nullptr);\n\nstatic UntypedResponse cmd_get_config(Client* client, const json_ref& args) {\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments for 'get-config'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  UntypedResponse resp;\n\n  std::optional<json_ref> config = root->config_file;\n  if (!config) {\n    config = json_object();\n  }\n\n  resp.set(\"config\", std::move(*config));\n  return resp;\n}\nW_CMD_REG(\"get-config\", cmd_get_config, CMD_DAEMON, w_cmd_realpath_root);\n\n} // namespace\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/cmds/log.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Client.h\"\n#include \"watchman/LogConfig.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\n\n// log-level \"debug\"\n// log-level \"error\"\n// log-level \"off\"\nstatic UntypedResponse cmd_loglevel(Client* client, const json_ref& args) {\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments to 'log-level'\");\n  }\n\n  watchman::LogLevel level;\n  try {\n    level = watchman::logLabelToLevel(json_to_w_string(args.at(1)));\n  } catch (std::out_of_range&) {\n    throw ErrorResponse(\"invalid log level for 'log-level'\");\n  }\n\n  auto clientRef = client->shared_from_this();\n  auto notify = [clientRef]() { clientRef->ping->notify(); };\n  auto& log = watchman::getLog();\n\n  switch (level) {\n    case watchman::OFF:\n      client->debugSub.reset();\n      client->errorSub.reset();\n      break;\n    case watchman::DBG:\n      client->debugSub = log.subscribe(watchman::DBG, notify);\n      client->errorSub = log.subscribe(watchman::ERR, notify);\n      break;\n    case watchman::ERR:\n    default:\n      client->debugSub.reset();\n      client->errorSub = log.subscribe(watchman::ERR, notify);\n  }\n\n  UntypedResponse resp;\n  resp.set(\"log_level\", json_ref(args.at(1)));\n  return resp;\n}\nW_CMD_REG(\"log-level\", cmd_loglevel, CMD_DAEMON, nullptr);\n\n// log \"debug\" \"text to log\"\nstatic UntypedResponse cmd_log(Client*, const json_ref& args) {\n  if (json_array_size(args) != 3) {\n    throw ErrorResponse(\"wrong number of arguments to 'log'\");\n  }\n\n  watchman::LogLevel level;\n  try {\n    level = watchman::logLabelToLevel(json_to_w_string(args.at(1)));\n  } catch (std::out_of_range&) {\n    throw ErrorResponse(\"invalid log level for 'log'\");\n  }\n\n  auto text = json_to_w_string(args.at(2));\n\n  watchman::log(level, text, \"\\n\");\n\n  UntypedResponse resp;\n  resp.set(\"logged\", json_true());\n  return resp;\n}\nW_CMD_REG(\"log\", cmd_log, CMD_DAEMON | CMD_ALLOW_ANY_USER, nullptr);\n\n// change the server log level for the logs\nstatic UntypedResponse cmd_global_log_level(Client*, const json_ref& args) {\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments to 'global-log-level'\");\n  }\n\n  watchman::LogLevel level;\n  try {\n    level = watchman::logLabelToLevel(json_to_w_string(args.at(1)));\n  } catch (std::out_of_range&) {\n    throw ErrorResponse(\"invalid log level for 'global-log-level'\");\n  }\n\n  watchman::getLog().setStdErrLoggingLevel(level);\n\n  UntypedResponse resp;\n  resp.set(\"log_level\", json_ref(args.at(1)));\n  return resp;\n}\nW_CMD_REG(\n    \"global-log-level\",\n    cmd_global_log_level,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    nullptr);\n\n// discover the log file path of the running watchman\nstatic UntypedResponse cmd_get_log(Client*, const json_ref& args) {\n  if (json_array_size(args) != 1) {\n    throw ErrorResponse(\"wrong number of arguments to 'get-log'\");\n  }\n\n  UntypedResponse resp;\n  resp.set(\"log\", w_string_to_json(w_string::build(logging::log_name)));\n  return resp;\n}\nW_CMD_REG(\"get-log\", cmd_get_log, CMD_DAEMON | CMD_ALLOW_ANY_USER, nullptr);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/cmds/query.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/Query.h\"\n#include \"watchman/Client.h\"\n#include \"watchman/ClientContext.h\"\n#include \"watchman/ProcessUtil.h\"\n#include \"watchman/query/eval.h\"\n#include \"watchman/query/parse.h\"\n#include \"watchman/saved_state/SavedStateFactory.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\n\n/* query /root {query} */\nstatic UntypedResponse cmd_query(Client* client, const json_ref& args) {\n  if (json_array_size(args) != 3) {\n    throw ErrorResponse(\"wrong number of arguments for 'query', expected 3\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  const auto& query_spec = args.at(2);\n  auto query = parseQuery(root, query_spec);\n  auto clientPid = client->stm ? client->stm->getPeerProcessID() : 0;\n  query->clientInfo.clientPid = clientPid;\n  query->clientInfo.clientInfo = clientPid\n      ? std::make_optional(lookupProcessInfo(clientPid))\n      : std::nullopt;\n\n  if (client->client_mode) {\n    query->sync_timeout = std::chrono::milliseconds(0);\n  }\n\n  auto res = w_query_execute(query.get(), root, nullptr, getInterface);\n  UntypedResponse response;\n  response.set(\n      {{\"is_fresh_instance\", json_boolean(res.isFreshInstance)},\n       {\"clock\", res.clockAtStartOfQuery.toJson()},\n       {\"files\", std::move(res.resultsArray).toJson()},\n       {\"debug\", res.debugInfo.render()}});\n  if (res.savedStateInfo) {\n    response.set(\"saved-state-info\", std::move(*res.savedStateInfo));\n  }\n\n  add_root_warnings_to_response(response, root);\n\n  return response;\n}\nW_CMD_REG(\n    \"query\",\n    cmd_query,\n    CMD_DAEMON | CMD_CLIENT | CMD_ALLOW_ANY_USER,\n    w_cmd_realpath_root);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/cmds/since.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Client.h\"\n#include \"watchman/ClientContext.h\"\n#include \"watchman/ProcessUtil.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/eval.h\"\n#include \"watchman/query/parse.h\"\n#include \"watchman/saved_state/SavedStateFactory.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\n\n/* since /root <timestamp> [patterns] */\nstatic UntypedResponse cmd_since(Client* client, const json_ref& args) {\n  const char* clockspec;\n\n  /* resolve the root */\n  if (json_array_size(args) < 3) {\n    throw ErrorResponse(\"not enough arguments for 'since'\");\n  }\n  auto& arr = args.array();\n\n  auto root = resolveRoot(client, args);\n\n  auto clock_ele = arr[2];\n  clockspec = json_string_value(clock_ele);\n  if (!clockspec) {\n    throw ErrorResponse(\"expected argument 2 to be a valid clockspec\");\n  }\n\n  auto query = parseQueryLegacy(root, args, 3, nullptr, clockspec, nullptr);\n  auto clientPid = client->stm ? client->stm->getPeerProcessID() : 0;\n  query->clientInfo.clientPid = clientPid;\n  query->clientInfo.clientInfo = clientPid\n      ? std::make_optional(lookupProcessInfo(clientPid))\n      : std::nullopt;\n\n  auto res = w_query_execute(query.get(), root, nullptr, getInterface);\n  UntypedResponse response;\n  response.set(\n      {{\"is_fresh_instance\", json_boolean(res.isFreshInstance)},\n       {\"clock\", res.clockAtStartOfQuery.toJson()},\n       {\"files\", std::move(res.resultsArray).toJson()},\n       {\"debug\", res.debugInfo.render()}});\n  if (res.savedStateInfo) {\n    response.set(\"saved-state-info\", std::move(*res.savedStateInfo));\n  }\n\n  add_root_warnings_to_response(response, root);\n  return response;\n}\nW_CMD_REG(\n    \"since\",\n    cmd_since,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    w_cmd_realpath_root);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/cmds/state.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Client.h\"\n#include \"watchman/MapUtil.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/ThreadPool.h\"\n#include \"watchman/query/parse.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\nusing ms = std::chrono::milliseconds;\n\nstruct state_arg {\n  w_string name;\n  ms sync_timeout;\n  std::optional<json_ref> metadata;\n};\n\n// Parses the args for state-enter and state-leave\nstatic void parse_state_arg(Client*, const json_ref& args, state_arg* parsed) {\n  parsed->sync_timeout = kDefaultQuerySyncTimeout;\n  parsed->metadata = std::nullopt;\n  parsed->name = w_string{};\n\n  if (json_array_size(args) != 3) {\n    throw ErrorResponse(\n        \"invalid number of arguments, expected 3, got {}\",\n        json_array_size(args));\n  }\n\n  const auto& state_args = args.at(2);\n\n  // [cmd, root, statename]\n  if (state_args.isString()) {\n    parsed->name = json_to_w_string(state_args);\n    return;\n  }\n\n  // [cmd, root, {name:, metadata:, sync_timeout:}]\n  parsed->name = json_to_w_string(state_args.get(\"name\"));\n  parsed->metadata = state_args.get_optional(\"metadata\");\n  parsed->sync_timeout =\n      ms(state_args\n             .get_default(\n                 \"sync_timeout\", json_integer(parsed->sync_timeout.count()))\n             .asInt());\n\n  if (parsed->sync_timeout < ms::zero()) {\n    throw ErrorResponse(\"sync_timeout must be >= 0\");\n  }\n\n  return;\n}\n\nnamespace watchman {\n\nstatic UntypedResponse cmd_state_enter(\n    Client* clientbase,\n    const json_ref& args) {\n  state_arg parsed;\n  auto client = dynamic_cast<UserClient*>(clientbase);\n\n  auto root = resolveRoot(client, args);\n\n  parse_state_arg(client, args, &parsed);\n\n  if (client->states.find(parsed.name) != client->states.end()) {\n    throw ErrorResponse(\"state {} is already asserted\", parsed.name);\n  }\n\n  auto assertion = std::make_shared<ClientStateAssertion>(root, parsed.name);\n\n  // Ask the root to track the assertion and maintain ordering.\n  // This will throw if the state is already asserted or pending assertion\n  // so we do this prior to linking it in to the client.\n  root->assertedStates.wlock()->queueAssertion(assertion);\n\n  // Increment state transition counter for this root\n  root->stateTransCount++;\n  // Record the state assertion in the client\n  client->states[parsed.name] = assertion;\n\n  // We successfully entered the state, this is our response to the\n  // state-enter command.  We do this before we send the subscription\n  // PDUs in case CLIENT has active subscriptions for this root\n  UntypedResponse response;\n\n  response.set(\n      {{\"root\", w_string_to_json(root->root_path)},\n       {\"state-enter\", w_string_to_json(parsed.name)}});\n\n  root->view()\n      ->sync(root)\n      // Note that it is possible that the sync()\n      // might throw.  If that happens the exception will bubble back\n      // to the client as an error PDU.\n      // after this point, any errors are async and the client is\n      // unaware of them.\n      .defer([assertion, parsed, root](\n                 folly::Try<CookieSync::SyncResult>&& result) {\n        try {\n          result.throwUnlessValue();\n        } catch (const std::exception& exc) {\n          // The sync failed for whatever reason; log it.\n          log(ERR, \"state-enter sync failed: \", exc.what(), \"\\n\");\n          // Don't allow this assertion to clog up and block further\n          // attempts.  Mark it as done and remove it from the root.\n          // The client side of this will get removed when the client\n          // disconnects or attempts to leave the state.\n          root->assertedStates.wlock()->removeAssertion(assertion);\n          return;\n        }\n        auto clock = w_string_to_json(root->view()->getCurrentClockString());\n        auto payload = json_object(\n            {{\"root\", w_string_to_json(root->root_path)},\n             {\"clock\", std::move(clock)},\n             {\"state-enter\", w_string_to_json(parsed.name)}});\n        if (parsed.metadata) {\n          payload.set(\"metadata\", json_ref(*parsed.metadata));\n        }\n\n        {\n          auto wlock = root->assertedStates.wlock();\n          assertion->disposition = ClientStateDisposition::Asserted;\n\n          if (wlock->isFront(assertion)) {\n            // Broadcast about the state enter\n            root->unilateralResponses->enqueue(std::move(payload));\n          } else {\n            // Defer the broadcast until we are at the front of the queue.\n            // removeAssertion() will take care of sending this when this\n            // assertion makes it to the front of the queue.\n            assertion->enterPayload = payload;\n          }\n        }\n      })\n      .via(&getThreadPool());\n\n  return response;\n}\n\n} // namespace watchman\n\nW_CMD_REG(\"state-enter\", cmd_state_enter, CMD_DAEMON, w_cmd_realpath_root);\n\nstatic UntypedResponse cmd_state_leave(\n    Client* clientbase,\n    const json_ref& args) {\n  state_arg parsed;\n  // This is a weak reference to the assertion.  This is safe because only this\n  // client can delete this assertion, and this function is only executed by\n  // the thread that owns this client.\n  std::shared_ptr<ClientStateAssertion> assertion;\n  auto client = dynamic_cast<UserClient*>(clientbase);\n\n  auto root = resolveRoot(client, args);\n\n  parse_state_arg(client, args, &parsed);\n\n  auto it = client->states.find(parsed.name);\n  if (it == client->states.end()) {\n    throw ErrorResponse(\"state {} is not asserted\", parsed.name);\n  }\n\n  assertion = it->second.lock();\n  if (!assertion) {\n    throw ErrorResponse(\"state {} was implicitly vacated\", parsed.name);\n  }\n\n  // Sanity check ownership\n  if (mapGetDefault(client->states, parsed.name).lock() != assertion) {\n    throw ErrorResponse(\n        \"state {} was not asserted by this session\", parsed.name);\n  }\n\n  // Mark as pending leave; we haven't vacated the state until we've\n  // seen the sync cookie.\n  {\n    auto assertedStates = root->assertedStates.wlock();\n    if (assertion->disposition == ClientStateDisposition::Done) {\n      throw ErrorResponse(\"state {} was implicitly vacated\", parsed.name);\n    }\n    // Note that there is a potential race here wrt. this state being\n    // asserted again by another client and the broadcast\n    // of the payload below, because the asserted states lock in\n    // scope here cannot be held that long.  We address that race\n    // by only broadcasting the enter assertion when it reaches\n    // the front of the queue.  That happens in removeAssertion()\n    // and also in the post-sync portion of the code in cmd_state_enter().\n    assertion->disposition = ClientStateDisposition::PendingLeave;\n  }\n\n  // Remove the association from the client.  We'll remove it from the\n  // root on the other side of the sync.\n  client->states.erase(it);\n\n  // We're about to successfully leave the state, this is our response to the\n  // state-leave command.  We do this before we send the subscription\n  // PDUs in case CLIENT has active subscriptions for this root\n  UntypedResponse response;\n  response.set(\n      {{\"root\", w_string_to_json(root->root_path)},\n       {\"state-leave\", w_string_to_json(parsed.name)}});\n\n  root->view()\n      ->sync(root)\n      .defer([assertion, parsed, root](\n                 folly::Try<CookieSync::SyncResult>&& result) {\n        try {\n          result.throwUnlessValue();\n        } catch (const std::exception& exc) {\n          // The sync failed for whatever reason; log it and take no futher\n          // action\n          log(ERR, \"state-leave sync failed: \", exc.what(), \"\\n\");\n          return;\n        }\n        // Notify and exit the state\n        w_leave_state(nullptr, assertion, false, parsed.metadata);\n      })\n      .via(&getThreadPool());\n  return response;\n}\nW_CMD_REG(\"state-leave\", cmd_state_leave, CMD_DAEMON, w_cmd_realpath_root);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/cmds/subscribe.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/MapUtil.h>\n#include \"watchman/Client.h\"\n#include \"watchman/ClientContext.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/MapUtil.h\"\n#include \"watchman/ProcessUtil.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/eval.h\"\n#include \"watchman/query/parse.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/root/watchlist.h\"\n#include \"watchman/saved_state/SavedStateFactory.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\n\nClientSubscription::ClientSubscription(\n    const std::shared_ptr<Root>& root,\n    std::weak_ptr<Client> client)\n    : root(root), weakClient(client) {}\n\nstd::shared_ptr<UserClient> ClientSubscription::lockClient() {\n  auto client = weakClient.lock();\n  if (client) {\n    return std::dynamic_pointer_cast<UserClient>(client);\n  }\n  return nullptr;\n}\n\nClientSubscription::~ClientSubscription() {\n  auto client = lockClient();\n  if (client) {\n    client->unsubByName(name);\n  }\n}\n\nbool UserClient::unsubByName(const w_string& name) {\n  auto subIter = subscriptions.find(name);\n  if (subIter == subscriptions.end()) {\n    return false;\n  }\n\n  // Break the weakClient pointer so that ~ClientSubscription()\n  // cannot successfully lockClient and recursively call us.\n  subIter->second->weakClient.reset();\n  unilateralSub.erase(subIter->second);\n  subscriptions.erase(subIter);\n\n  return true;\n}\n\nenum class sub_action { no_sync_needed, execute, defer, drop };\n\nstatic std::tuple<sub_action, w_string> get_subscription_action(\n    ClientSubscription* sub,\n    const std::shared_ptr<Root>& root,\n    ClockPosition position) {\n  auto action = sub_action::execute;\n  w_string policy_name;\n\n  log(DBG,\n      \"sub=\",\n      fmt::ptr(sub),\n      \" \",\n      sub->name,\n      \", last=\",\n      sub->last_sub_tick,\n      \" pending=\",\n      position.ticks,\n      \"\\n\");\n\n  if (sub->last_sub_tick != position.ticks) {\n    if (!sub->drop_or_defer.empty()) {\n      auto assertedStates = root->assertedStates.rlock();\n      // This subscription has some policy for states.\n      // Figure out what we should do.\n      for (auto& policy_iter : sub->drop_or_defer) {\n        auto name = policy_iter.first;\n        bool policy_is_drop = policy_iter.second;\n\n        if (!assertedStates->isStateAsserted(name)) {\n          continue;\n        }\n\n        if (action != sub_action::defer) {\n          // This policy is active\n          action = sub_action::defer;\n          policy_name = name;\n        }\n\n        if (policy_is_drop) {\n          action = sub_action::drop;\n\n          // If we're dropping, we don't need to look at any\n          // other policies\n          policy_name = name;\n          break;\n        }\n        // Otherwise keep looking until we find a drop\n      }\n    }\n  } else {\n    log(DBG, \"subscription \", sub->name, \" is up to date\\n\");\n    action = sub_action::no_sync_needed;\n  }\n\n  return std::make_tuple(action, policy_name);\n}\n\nvoid ClientSubscription::processSubscription() {\n  try {\n    processSubscriptionImpl();\n  } catch (const std::system_error& exc) {\n    if (exc.code() == error_code::stale_file_handle) {\n      // This can happen if, for example, the Eden filesystem got into\n      // a weird state without fully unmounting from the VFS.\n      // In this situation we're getting a signal that the root is no longer\n      // valid so the correct action is to cancel the watch.\n      log(ERR,\n          \"While processing subscriptions for \",\n          root->root_path,\n          \" got: \",\n          exc.what(),\n          \".  Cancel watch\\n\");\n      root->cancel(\n          fmt::format(\"Error processing subscriptions: {}\", exc.what()));\n    } else {\n      throw;\n    }\n  }\n}\n\nvoid ClientSubscription::processSubscriptionImpl() {\n  auto client = lockClient();\n  if (!client) {\n    log(ERR, \"encountered a vacated client while running subscription rules\\n\");\n    return;\n  }\n\n  sub_action action;\n  w_string policy_name;\n  auto position = root->view()->getMostRecentRootNumberAndTickValue();\n  std::tie(action, policy_name) = get_subscription_action(this, root, position);\n\n  if (action != sub_action::no_sync_needed) {\n    bool executeQuery = true;\n\n    if (action == sub_action::drop) {\n      // fast-forward over any notifications while in the drop state\n      last_sub_tick = position.ticks;\n      query->since_spec = std::make_unique<ClockSpec>(position);\n      log(DBG,\n          \"dropping subscription notifications for \",\n          name,\n          \" until state \",\n          policy_name,\n          \" is vacated. Advanced ticks to \",\n          last_sub_tick,\n          \"\\n\");\n      executeQuery = false;\n    } else if (action == sub_action::defer) {\n      log(DBG,\n          \"deferring subscription notifications for \",\n          name,\n          \" until state \",\n          policy_name,\n          \" is vacated\\n\");\n      executeQuery = false;\n    } else if (vcs_defer && root->view()->isVCSOperationInProgress()) {\n      log(DBG,\n          \"deferring subscription notifications for \",\n          name,\n          \" until VCS operations complete\\n\");\n      executeQuery = false;\n    }\n\n    if (executeQuery) {\n      try {\n        last_sub_tick =\n            runSubscriptionRules(client.get(), root).position().ticks;\n      } catch (const std::exception& exc) {\n        // This may happen if an SCM aware query fails to run hg for\n        // whatever reason.  Since last_sub_tick is not advanced,\n        // we haven't missed any results and will re-evaluate with\n        // the same basis the next time a file is changed.  Due to\n        // the way that hg works, it is quite likely that it has\n        // touched some files already and that we'll get called\n        // again almost immediately.\n        log(ERR,\n            \"Error while performing query for subscription \",\n            name,\n            \": \",\n            exc.what(),\n            \". Deferring until next change.\\n\");\n      }\n    }\n  } else {\n    log(DBG, \"subscription \", name, \" is up to date\\n\");\n  }\n}\n\nvoid ClientSubscription::updateSubscriptionTicks(QueryResult* res) {\n  // create a new spec that will be used the next time\n  query->since_spec = std::make_unique<ClockSpec>(res->clockAtStartOfQuery);\n}\n\nstd::optional<UntypedResponse> ClientSubscription::buildSubscriptionResults(\n    const std::shared_ptr<Root>& root,\n    ClockSpec& position,\n    OnStateTransition onStateTransition) {\n  auto since_spec = query->since_spec.get();\n\n  if (const auto* clock = since_spec\n          ? std::get_if<ClockSpec::Clock>(&since_spec->spec)\n          : nullptr) {\n    log(DBG,\n        \"running subscription \",\n        name,\n        \" rules since \",\n        clock->position.ticks,\n        \"\\n\");\n  } else {\n    log(DBG, \"running subscription \", name, \" rules (no since)\\n\");\n  }\n\n  // Subscriptions never need to sync explicitly; we are only dispatched\n  // at settle points which are by definition sync'd to the present time\n  query->sync_timeout = std::chrono::milliseconds(0);\n  // We're called by the io thread, so there's little chance that the root\n  // could be legitimately blocked by something else.  That means that we\n  // can use a short lock_timeout\n  query->lock_timeout =\n      uint32_t(root->config.getInt(\"subscription_lock_timeout_ms\", 100));\n  logf(DBG, \"running subscription {} {}\\n\", name, fmt::ptr(this));\n\n  try {\n    auto res = w_query_execute(query.get(), root, time_generator, getInterface);\n\n    logf(\n        DBG,\n        \"subscription {} generated {} results\\n\",\n        name,\n        res.resultsArray.results.size());\n\n    position = res.clockAtStartOfQuery;\n\n    // An SCM operation was interleaved with the query execution. This could\n    // result in over-reporing query results. Discard our results but, do not\n    // update the clock in order to allow changes to be reported the next time\n    // the query is run.\n    bool scmAwareQuery = since_spec && since_spec->hasScmParams();\n    if (onStateTransition == OnStateTransition::DontAdvance && scmAwareQuery) {\n      if (root->stateTransCount.load() != res.stateTransCountAtStartOfQuery) {\n        log(DBG,\n            \"discarding SCM aware query results, SCM activity interleaved\\n\");\n        return std::nullopt;\n      }\n    }\n\n    // We can suppress empty results, unless this is a source code aware query\n    // and the mergeBase has changed or this is a fresh instance.\n    bool mergeBaseChanged = scmAwareQuery &&\n        res.clockAtStartOfQuery.scmMergeBase != query->since_spec->scmMergeBase;\n    if (res.resultsArray.results.empty() && !mergeBaseChanged &&\n        !res.isFreshInstance) {\n      updateSubscriptionTicks(&res);\n      return std::nullopt;\n    }\n\n    UntypedResponse response;\n\n    // It is way too much of a hassle to try to recreate the clock value if it's\n    // not a relative clock spec, and it's only going to happen on the first run\n    // anyway, so just skip doing that entirely.\n    if (since_spec &&\n        std::holds_alternative<ClockSpec::Clock>(since_spec->spec)) {\n      response.set(\"since\", since_spec->toJson());\n    }\n    updateSubscriptionTicks(&res);\n\n    response.set(\n        {{\"is_fresh_instance\", json_boolean(res.isFreshInstance)},\n         {\"clock\", res.clockAtStartOfQuery.toJson()},\n         {\"files\", std::move(res.resultsArray).toJson()},\n         {\"root\", w_string_to_json(root->root_path)},\n         {\"subscription\", w_string_to_json(name)},\n         {\"unilateral\", json_true()}});\n    if (res.savedStateInfo) {\n      response.set({{\"saved-state-info\", std::move(*res.savedStateInfo)}});\n    }\n\n    return response;\n  } catch (const QueryExecError& e) {\n    log(ERR, \"error running subscription \", name, \" query: \", e.what());\n    return std::nullopt;\n  }\n}\n\nClockSpec ClientSubscription::runSubscriptionRules(\n    UserClient* client,\n    const std::shared_ptr<Root>& root) {\n  ClockSpec position;\n\n  auto response =\n      buildSubscriptionResults(root, position, OnStateTransition::DontAdvance);\n\n  if (response) {\n    add_root_warnings_to_response(*response, root);\n    client->enqueueResponse(std::move(*response));\n  }\n  return position;\n}\n\nstatic UntypedResponse cmd_flush_subscriptions(\n    Client* clientbase,\n    const json_ref& args) {\n  auto client = (UserClient*)clientbase;\n\n  int sync_timeout;\n  std::optional<json_ref> subs;\n\n  // TODO: merge this parse and sync logic with the logic in query evaluation\n  if (json_array_size(args) == 3) {\n    auto& sync_timeout_obj = args.at(2).get(\"sync_timeout\");\n    subs = args.at(2).get_optional(\"subscriptions\");\n    if (!sync_timeout_obj.isInt()) {\n      throw ErrorResponse(\"'sync_timeout' must be an integer\");\n    }\n    sync_timeout = sync_timeout_obj.asInt();\n  } else {\n    throw ErrorResponse(\"wrong number of arguments to 'flush-subscriptions'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  std::vector<w_string> subs_to_sync;\n  if (subs) {\n    if (!subs->isArray()) {\n      throw ErrorResponse(\n          \"expected 'subscriptions' to be an array of subscription names\");\n    }\n\n    for (auto& sub_name : subs->array()) {\n      if (!sub_name.isString()) {\n        throw ErrorResponse(\n            \"expected 'subscriptions' to be an array of subscription names\");\n      }\n\n      auto& sub_name_str = json_to_w_string(sub_name);\n      auto sub_iter = client->subscriptions.find(sub_name_str);\n      if (sub_iter == client->subscriptions.end()) {\n        throw ErrorResponse(\n            \"this client does not have a subscription named '{}'\",\n            sub_name_str);\n      }\n      auto& sub = sub_iter->second;\n      if (sub->root != root) {\n        throw ErrorResponse(\n            \"subscription '{}' is on root '{}' different from command root \"\n            \"'{}'\",\n            sub_name_str,\n            sub->root->root_path,\n            root->root_path);\n      }\n\n      subs_to_sync.push_back(sub_name_str);\n    }\n  } else {\n    // Look for all subscriptions matching this root.\n    for (auto& sub_iter : client->subscriptions) {\n      if (sub_iter.second->root == root) {\n        subs_to_sync.push_back(sub_iter.first);\n      }\n    }\n  }\n\n  root->syncToNow(\n      std::chrono::milliseconds(sync_timeout), client->getClientInfo());\n\n  UntypedResponse resp;\n  std::vector<json_ref> synced;\n  std::vector<json_ref> no_sync_needed;\n  std::vector<json_ref> dropped;\n\n  for (auto& sub_name_str : subs_to_sync) {\n    auto sub_iter = client->subscriptions.find(sub_name_str);\n    auto& sub = sub_iter->second;\n\n    sub_action action;\n    w_string policy_name;\n    auto position = root->view()->getMostRecentRootNumberAndTickValue();\n    std::tie(action, policy_name) =\n        get_subscription_action(sub.get(), root, position);\n\n    if (action == sub_action::drop) {\n      sub->last_sub_tick = position.ticks;\n      sub->query->since_spec = std::make_unique<ClockSpec>(position);\n      log(DBG,\n          \"(flush-subscriptions) dropping subscription notifications for \",\n          sub->name,\n          \" until state \",\n          policy_name,\n          \" is vacated. Advanced ticks to \",\n          sub->last_sub_tick,\n          \"\\n\");\n      dropped.push_back(w_string_to_json(sub_name_str));\n    } else {\n      // flush-subscriptions means that we _should NOT defer_ notifications. So\n      // ignore defer and defer_vcs.\n      ClockSpec out_position;\n      log(DBG,\n          \"(flush-subscriptions) executing subscription \",\n          sub->name,\n          \"\\n\");\n      auto sub_result = sub->buildSubscriptionResults(\n          root, out_position, OnStateTransition::QueryAnyway);\n      if (sub_result) {\n        client->enqueueResponse(std::move(*sub_result));\n        synced.push_back(w_string_to_json(sub_name_str));\n      } else {\n        no_sync_needed.push_back(w_string_to_json(sub_name_str));\n      }\n    }\n  }\n\n  resp.set(\n      {{\"synced\", json_array(std::move(synced))},\n       {\"no_sync_needed\", json_array(std::move(no_sync_needed))},\n       {\"dropped\", json_array(std::move(dropped))}});\n  add_root_warnings_to_response(resp, root);\n  return resp;\n}\nW_CMD_REG(\n    \"flush-subscriptions\",\n    cmd_flush_subscriptions,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    w_cmd_realpath_root);\n\n/* unsubscribe /root subname\n * Cancels a subscription */\nstatic UntypedResponse cmd_unsubscribe(\n    Client* clientbase,\n    const json_ref& args) {\n  UserClient* client = (UserClient*)clientbase;\n\n  auto root = resolveRoot(client, args);\n\n  auto jstr = args.at(2);\n  const char* name = json_string_value(jstr);\n  if (!name) {\n    throw ErrorResponse(\"expected 2nd parameter to be subscription name\");\n  }\n\n  auto sname = json_to_w_string(jstr);\n  bool deleted = client->unsubByName(sname);\n\n  UntypedResponse resp;\n  resp.set(\n      {{\"unsubscribe\", typed_string_to_json(name)},\n       {\"deleted\", json_boolean(deleted)}});\n  return resp;\n}\nW_CMD_REG(\n    \"unsubscribe\",\n    cmd_unsubscribe,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    w_cmd_realpath_root);\n\n/* subscribe /root subname {query}\n * Subscribes the client connection to the specified root. */\nstatic UntypedResponse cmd_subscribe(Client* clientbase, const json_ref& args) {\n  UserClient* client = (UserClient*)clientbase;\n\n  if (json_array_size(args) != 4) {\n    throw ErrorResponse(\"wrong number of arguments for subscribe\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  json_ref jname = args.at(2);\n  if (!jname.isString()) {\n    throw ErrorResponse(\"expected 2nd parameter to be subscription name\");\n  }\n\n  json_ref query_spec = args.at(3);\n\n  auto query = parseQuery(root, query_spec);\n  auto clientPid = client->stm ? client->stm->getPeerProcessID() : 0;\n  query->clientInfo.clientPid = clientPid;\n  query->clientInfo.clientInfo = clientPid\n      ? std::make_optional(lookupProcessInfo(clientPid))\n      : std::nullopt;\n  query->subscriptionName = json_to_w_string(jname);\n\n  auto defer_list = query_spec.get_optional(\"defer\");\n  if (defer_list && !defer_list->isArray()) {\n    throw ErrorResponse(\"defer field must be an array of strings\");\n  }\n\n  auto drop_list = query_spec.get_optional(\"drop\");\n  if (drop_list && !drop_list->isArray()) {\n    throw ErrorResponse(\"drop field must be an array of strings\");\n  }\n\n  const std::vector<json_ref>* defer_array =\n      defer_list ? &defer_list->array() : nullptr;\n  const std::vector<json_ref>* drop_array =\n      drop_list ? &drop_list->array() : nullptr;\n\n  UntypedResponse resp;\n\n  auto sub_name = json_to_w_string(jname);\n\n  // Check for duplicate subscription names. We do this early because\n  // constructing a ClientSubscription with a duplicate name isn't safe.\n  if (mapContainsAny(client->subscriptions, sub_name)) {\n    if (root->config.getBool(\"enforce_unique_subscription_names\", false)) {\n      throw ErrorResponse(\"subscription name '{}' is not unique\", sub_name);\n    }\n    log(ERR, \"clobbering existing subscription '\", sub_name, \"'\\n\");\n    resp.set(\n        \"warning\",\n        w_string_to_json(\n            w_string::format(\n                \"subscription name '{}' is not unique\", sub_name)));\n  }\n\n  auto sub =\n      std::make_shared<ClientSubscription>(root, client->shared_from_this());\n\n  sub->name = std::move(sub_name);\n  sub->query = query;\n\n  auto defer = query_spec.get_default(\"defer_vcs\", json_true());\n  if (!defer.isBool()) {\n    throw ErrorResponse(\"defer_vcs must be boolean\");\n  }\n  sub->vcs_defer = defer.asBool();\n\n  if (defer_array) {\n    for (auto& elt : *defer_array) {\n      sub->drop_or_defer[json_to_w_string(elt)] = false;\n    }\n  }\n  if (drop_array) {\n    for (auto& elt : *drop_array) {\n      sub->drop_or_defer[json_to_w_string(elt)] = true;\n    }\n  }\n\n  // If they want SCM aware results we should wait for SCM events to finish\n  // before dispatching subscriptions\n  if (query->since_spec && query->since_spec->hasScmParams()) {\n    sub->vcs_defer = true;\n\n    // If they didn't specify any drop/defer behavior, default to a reasonable\n    // setting that works together with the fsmonitor extension for hg.\n    if (mapContainsAny(sub->drop_or_defer, \"hg.update\", \"hg.transaction\")) {\n      sub->drop_or_defer[\"hg.update\"] = false; // defer\n      sub->drop_or_defer[\"hg.transaction\"] = false; // defer\n    }\n  }\n\n  // Connect the root to our subscription\n  {\n    auto client_id = w_string::build(client->unique_id);\n    auto client_stream = w_string::build(fmt::ptr(client->stm.get()));\n    auto info_json = json_object(\n        {{\"name\", w_string_to_json(sub->name)},\n         {\"client\", w_string_to_json(client_id)},\n         {\"stm\", w_string_to_json(client_stream)},\n         {\"is_owner\", json_boolean(client->stm->peerIsOwner())},\n         {\"pid\", json_integer(client->stm->getPeerProcessID())}});\n    if (sub->query->query_spec) {\n      info_json.set(\"query\", json_ref(*sub->query->query_spec));\n    }\n\n    std::weak_ptr<Client> clientRef(client->shared_from_this());\n    client->unilateralSub.insert(\n        std::make_pair(\n            sub,\n            root->unilateralResponses->subscribe(\n                [clientRef, sub]() {\n                  auto client = clientRef.lock();\n                  if (client) {\n                    client->ping->notify();\n                  }\n                },\n                info_json)));\n  }\n\n  client->subscriptions[sub->name] = sub;\n\n  resp.set(\"subscribe\", json_ref(jname));\n\n  add_root_warnings_to_response(resp, root);\n  ClockSpec position;\n  auto initial_subscription_results = sub->buildSubscriptionResults(\n      root, position, OnStateTransition::DontAdvance);\n  resp.set(\"clock\", position.toJson());\n  if (initial_subscription_results) {\n    if (auto* saved_state_info =\n            folly::get_ptr(*initial_subscription_results, \"saved-state-info\")) {\n      resp.set(\"saved-state-info\", *saved_state_info);\n    }\n  }\n\n  std::vector<json_ref> asserted_states;\n  {\n    auto rootAssertedStates = root->assertedStates.rlock();\n    for (const auto& key : sub->drop_or_defer) {\n      if (rootAssertedStates->isStateAsserted(key.first)) {\n        // Not sure what to do in case of failure here. -jupi\n        asserted_states.push_back(w_string_to_json(key.first));\n      }\n    }\n  }\n  resp.set(\"asserted-states\", json_array(std::move(asserted_states)));\n\n  // TODO: It would be nice to return something that indicates the start of a\n  // potential stream of responses, rather than manually enqueuing here and\n  // return null.\n  client->enqueueResponse(std::move(resp));\n  if (initial_subscription_results) {\n    client->enqueueResponse(std::move(*initial_subscription_results));\n  }\n  throw ResponseWasHandledManually{};\n}\nW_CMD_REG(\n    \"subscribe\",\n    cmd_subscribe,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    w_cmd_realpath_root);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/cmds/trigger.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Client.h\"\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/TriggerCommand.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/parse.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/saved_state/SavedStateFactory.h\"\n#include \"watchman/state.h\"\n#include \"watchman/watchman_cmd.h\"\n\n#include <memory>\n\nusing namespace watchman;\n\n/* trigger-del /root triggername\n * Delete a trigger from a root\n */\nstatic UntypedResponse cmd_trigger_delete(\n    Client* client,\n    const json_ref& args) {\n  w_string tname;\n  bool res;\n\n  auto root = resolveRoot(client, args);\n\n  if (json_array_size(args) != 3) {\n    throw ErrorResponse(\"wrong number of arguments\");\n  }\n  auto jname = args.at(2);\n  if (!jname.isString()) {\n    throw ErrorResponse(\"expected 2nd parameter to be trigger name\");\n  }\n  tname = json_to_w_string(jname);\n\n  std::unique_ptr<TriggerCommand> cmd;\n\n  {\n    auto map = root->triggers.wlock();\n    auto it = map->find(tname);\n    if (it == map->end()) {\n      res = false;\n    } else {\n      std::swap(cmd, it->second);\n      map->erase(it);\n      res = true;\n    }\n  }\n\n  if (cmd) {\n    // Stop the thread\n    cmd->stop();\n  }\n\n  if (res) {\n    w_state_save();\n  }\n\n  UntypedResponse resp;\n  resp.set({{\"deleted\", json_boolean(res)}, {\"trigger\", json_ref(jname)}});\n  return resp;\n}\nW_CMD_REG(\"trigger-del\", cmd_trigger_delete, CMD_DAEMON, w_cmd_realpath_root);\n\n/* trigger-list /root\n * Displays a list of registered triggers for a given root\n */\nstatic UntypedResponse cmd_trigger_list(Client* client, const json_ref& args) {\n  auto root = resolveRoot(client, args);\n\n  UntypedResponse resp;\n  auto arr = root->triggerListToJson();\n\n  resp.set(\"triggers\", std::move(arr));\n  return resp;\n}\nW_CMD_REG(\"trigger-list\", cmd_trigger_list, CMD_DAEMON, w_cmd_realpath_root);\n\nstatic json_ref build_legacy_trigger(\n    const std::shared_ptr<Root>& root,\n    const json_ref& args) {\n  uint32_t next_arg = 0;\n  uint32_t i;\n  size_t n;\n\n  auto trig = json_object(\n      {{\"name\", args.at(2)},\n       {\"append_files\", json_true()},\n       {\"stdin\",\n        json_array(\n            {typed_string_to_json(\"name\"),\n             typed_string_to_json(\"exists\"),\n             typed_string_to_json(\"new\"),\n             typed_string_to_json(\"size\"),\n             typed_string_to_json(\"mode\")})}});\n\n  json_ref expr = json_null();\n  auto query = parseQueryLegacy(root, args, 3, &next_arg, nullptr, &expr);\n  query->request_id = w_string::build(\"trigger \", json_to_w_string(args.at(2)));\n\n  json_object_set(\n      trig,\n      \"expression\",\n      expr.get_optional(\"expression\").value_or(json_null()));\n\n  if (next_arg >= args.array().size()) {\n    throw ErrorResponse(\"no command was specified\");\n  }\n\n  n = json_array_size(args) - next_arg;\n  std::vector<json_ref> command;\n  command.reserve(n);\n  for (i = 0; i < n; i++) {\n    auto ele = args.at(i + next_arg);\n    if (!ele.isString()) {\n      throw ErrorResponse(\"expected argument {} to be a string\", i);\n    }\n    command.push_back(std::move(ele));\n  }\n  json_object_set_new(trig, \"command\", json_array(std::move(command)));\n\n  return trig;\n}\n\n/* trigger /root triggername [watch patterns] -- cmd to run\n * Sets up a trigger so that we can execute a command when a change\n * is detected */\nstatic UntypedResponse cmd_trigger(Client* client, const json_ref& args) {\n  bool need_save = true;\n  std::unique_ptr<TriggerCommand> cmd;\n\n  auto root = resolveRoot(client, args);\n\n  if (json_array_size(args) < 3) {\n    throw ErrorResponse(\"not enough arguments\");\n  }\n\n  json_ref trig = args.at(2);\n  if (trig.isString()) {\n    trig = build_legacy_trigger(root, args);\n  }\n\n  cmd = std::make_unique<TriggerCommand>(getInterface, root, trig);\n\n  UntypedResponse resp;\n  resp.set(\"triggerid\", w_string_to_json(cmd->triggername));\n\n  {\n    auto wlock = root->triggers.wlock();\n    auto& map = *wlock;\n    auto& old = map[cmd->triggername];\n\n    if (old && json_equal(cmd->definition, old->definition)) {\n      // Same definition: we don't and shouldn't touch things, so that we\n      // preserve the associated trigger clock and don't cause the trigger\n      // to re-run immediately\n      resp.set(\n          \"disposition\",\n          typed_string_to_json(\"already_defined\", W_STRING_UNICODE));\n      need_save = false;\n    } else {\n      resp.set(\n          \"disposition\",\n          typed_string_to_json(old ? \"replaced\" : \"created\", W_STRING_UNICODE));\n      if (old) {\n        // If we're replacing an old definition, be sure to stop the old\n        // one before we destroy it, and before we start the new one.\n        old->stop();\n      }\n      // Start the new trigger thread\n      cmd->start(root);\n      old = std::move(cmd);\n\n      need_save = true;\n    }\n  }\n\n  if (need_save) {\n    w_state_save();\n  }\n\n  return resp;\n}\nW_CMD_REG(\"trigger\", cmd_trigger, CMD_DAEMON, w_cmd_realpath_root);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/cmds/watch.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Client.h\"\n#include \"watchman/ClientContext.h\"\n#include \"watchman/Command.h\"\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/LogConfig.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/root/watchlist.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\n\nvoid w_cmd_realpath_root(Command& command) {\n  std::vector<json_ref> args = command.args().array();\n\n  if (args.empty()) {\n    throw CommandValidationError(\"wrong number of arguments\");\n  }\n\n  const char* path = json_string_value(args[0]);\n  if (!path) {\n    throw CommandValidationError(\n        \"second argument must be a string expressing the path to the watch\");\n  }\n\n  try {\n    auto resolved = realPath(path);\n    args[0] = w_string_to_json(resolved);\n  } catch (const std::exception& exc) {\n    CommandValidationError::throwf(\n        \"Could not resolve {} to the canonical watch path: {}\",\n        path,\n        exc.what());\n  }\n\n  command.args() = json_array(std::move(args));\n}\nW_CAP_REG(\"clock-sync-timeout\")\n\n/* Add the current clock value to the response */\nstatic void annotate_with_clock(\n    const std::shared_ptr<Root>& root,\n    UntypedResponse& resp) {\n  resp.set(\"clock\", w_string_to_json(root->view()->getCurrentClockString()));\n}\n\n/* clock /root [options]\n * Returns the current clock value for a watched root\n * If the options contain a sync_timeout, we ensure that the repo\n * is synced up-to-date and the returned clock represents the\n * latest state.\n */\nstatic UntypedResponse cmd_clock(Client* client, const json_ref& args) {\n  int sync_timeout = 0;\n\n  // TODO: merge this parse and sync logic with the logic in query evaluation\n  if (json_array_size(args) == 3) {\n    auto& opts = args.at(2);\n    if (!opts.isObject()) {\n      throw ErrorResponse(\n          \"the third argument to 'clock' must be an optional object\");\n    }\n\n    auto sync = opts.get_optional(\"sync_timeout\");\n    if (sync) {\n      if (!sync->isInt()) {\n        throw ErrorResponse(\n            \"the sync_timeout option passed to 'clock' must be an integer\");\n      }\n      sync_timeout = sync->asInt();\n    }\n  } else if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments to 'clock'\");\n  }\n\n  /* resolve the root */\n  auto root = resolveRoot(client, args);\n\n  if (sync_timeout) {\n    root->syncToNow(\n        std::chrono::milliseconds(sync_timeout), client->getClientInfo());\n  }\n\n  UntypedResponse resp;\n  annotate_with_clock(root, resp);\n\n  return resp;\n}\nW_CMD_REG(\n    \"clock\",\n    cmd_clock,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    w_cmd_realpath_root);\n\n/* watch-del /root\n * Stops watching the specified root */\nstatic UntypedResponse cmd_watch_delete(Client* client, const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments to 'watch-del'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  UntypedResponse resp;\n  resp.set(\n      {{\"watch-del\", json_boolean(root->stopWatch(\"watch-del\"))},\n       {\"root\", w_string_to_json(root->root_path)}});\n  return resp;\n}\nW_CMD_REG(\"watch-del\", cmd_watch_delete, CMD_DAEMON, w_cmd_realpath_root);\n\n/* watch-del-all\n * Stops watching all roots */\nstatic UntypedResponse cmd_watch_del_all(Client*, const json_ref&) {\n  UntypedResponse resp;\n  auto roots = w_root_stop_watch_all();\n  resp.set(\"roots\", std::move(roots));\n  return resp;\n}\nW_CMD_REG(\n    \"watch-del-all\",\n    cmd_watch_del_all,\n    CMD_DAEMON | CMD_POISON_IMMUNE,\n    nullptr);\n\n/* watch-list\n * Returns a list of watched roots */\nstatic UntypedResponse cmd_watch_list(Client*, const json_ref&) {\n  UntypedResponse resp;\n  auto root_paths = w_root_watch_list_to_json();\n  resp.set(\"roots\", std::move(root_paths));\n  return resp;\n}\nW_CMD_REG(\n    \"watch-list\",\n    cmd_watch_list,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    nullptr);\n\n// For each directory component in candidate_dir to the root of the filesystem,\n// look for root_file.  If root_file is present, update relpath to reflect the\n// relative path to the original value of candidate_dir and return true.  If\n// not found, return false. candidate_dir is modified by this function if\n// return true.\nstatic bool find_file_in_dir_tree(\n    const w_string& root_file,\n    w_string_piece& candidate_dir,\n    w_string_piece& relpath) {\n  w_string_piece current_dir(candidate_dir);\n  while (true) {\n    auto projPath = w_string::pathCat({current_dir, root_file});\n\n    if (w_path_exists(projPath.c_str())) {\n      // Got a match\n      relpath = w_string_piece(candidate_dir);\n      if (candidate_dir.size() == current_dir.size()) {\n        relpath = w_string_piece();\n      } else {\n        relpath.advance(current_dir.size() + 1);\n        candidate_dir = current_dir;\n      }\n      return true;\n    }\n\n    auto parent = current_dir.dirName();\n    if (parent.empty() || parent == current_dir) {\n      return false;\n    }\n    current_dir = parent;\n  }\n  return false;\n}\n\nbool find_project_root(\n    const json_ref& root_files,\n    w_string_piece& resolved,\n    w_string_piece& relpath) {\n  if (!root_files.isArray()) {\n    return false;\n  }\n  for (auto& item : root_files.array()) {\n    auto name = json_to_w_string(item);\n\n    if (find_file_in_dir_tree(name, resolved, relpath)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nvoid check_no_watchman(w_string resolved_root) {\n  // check if .nowatchman exists under the resolved path\n  auto no_watchman_path = w_string::pathCat({resolved_root, \".nowatchman\"});\n  if (w_path_exists(no_watchman_path.c_str())) {\n    CommandValidationError::throwf(\n        \"resolve_projpath: the repository is configured to not enable watchman. \"\n        \"Found .nowatchman at {}\",\n        no_watchman_path);\n  }\n}\n\n// For watch-project, take a root path string and resolve the\n// containing project directory, then update the args to reflect\n// that path.\n// relpath will hold the path to the project dir, relative to the\n// watched dir.  If it is NULL it means that the project dir is\n// equivalent to the watched dir.\nstatic w_string resolve_projpath(\n    std::vector<json_ref>& args,\n    w_string& relpath) {\n  const char* path;\n  bool enforcing;\n  if (args.size() < 2) {\n    throw CommandValidationError(\"wrong number of arguments\");\n  }\n\n  path = json_string_value(args[1]);\n  if (!path) {\n    throw CommandValidationError(\"second argument must be a string\");\n  }\n\n  auto resolved = realPath(path);\n\n  auto root_files = cfg_compute_root_files(&enforcing);\n  if (!root_files) {\n    CommandValidationError::throwf(\n        \"resolve_projpath: error computing root_files configuration value, \"\n        \"consult your log file at {} for more details\",\n        logging::log_name);\n  }\n\n  // See if we're requesting something in a pre-existing watch\n\n  w_string_piece prefix;\n  w_string_piece relpiece;\n  if (findEnclosingRoot(resolved, prefix, relpiece)) {\n    relpath = relpiece.asWString();\n    resolved = prefix.asWString();\n    args[1] = w_string_to_json(resolved);\n    return resolved;\n  }\n  auto resolvedpiece = resolved.piece();\n  if (find_project_root(*root_files, resolvedpiece, relpiece)) {\n    relpath = relpiece.asWString();\n    resolved = resolvedpiece.asWString();\n    check_no_watchman(resolved);\n    args[1] = w_string_to_json(resolved);\n    return resolved;\n  }\n\n  if (!enforcing) {\n    // We'll use the path they originally requested\n    return resolved;\n  }\n\n  // Convert root files to comma delimited string for error message\n  auto root_files_list = cfg_pretty_print_root_files(*root_files);\n\n  CommandValidationError::throwf(\n      \"resolve_projpath:  None of the files listed in global config \"\n      \"root_files are present in path `{}` or any of its \"\n      \"parent directories.  root_files is defined by the \"\n      \"`{}` config file and includes {}.  \"\n      \"One or more of these files must be present in order to allow \"\n      \"a watch. Try pulling and checking out a newer version of the project?\",\n      path,\n      cfg_get_global_config_file_path(),\n      root_files_list);\n}\n\n/* watch /root */\nstatic UntypedResponse cmd_watch(Client* client, const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments to 'watch'\");\n  }\n\n  auto root = resolveOrCreateRoot(client, args);\n  root->view()->waitUntilReadyToQuery().get();\n\n  UntypedResponse resp;\n\n  if (root->failure_reason) {\n    resp.set(\"error\", w_string_to_json(*root->failure_reason));\n  } else if (root->inner.cancelled) {\n    resp.set(\n        \"error\", typed_string_to_json(\"root was cancelled\", W_STRING_UNICODE));\n  } else {\n    resp.set(\n        {{\"watch\", w_string_to_json(root->root_path)},\n         {\"watcher\", w_string_to_json(root->view()->getName())}});\n  }\n  add_root_warnings_to_response(resp, root);\n  return resp;\n}\nW_CMD_REG(\n    \"watch\",\n    cmd_watch,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    w_cmd_realpath_root);\n\nstatic UntypedResponse cmd_watch_project(Client* client, const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\"wrong number of arguments to 'watch-project'\");\n  }\n\n  w_string rel_path_from_watch;\n  std::vector<json_ref> args_array = args.array();\n  auto dir_to_watch = resolve_projpath(args_array, rel_path_from_watch);\n  auto root = resolveOrCreateRoot(client, json_array(std::move(args_array)));\n\n  root->view()->waitUntilReadyToQuery().get();\n\n  UntypedResponse resp;\n\n  if (root->failure_reason) {\n    resp.set(\"error\", w_string_to_json(*root->failure_reason));\n  } else if (root->inner.cancelled) {\n    resp.set(\n        \"error\", typed_string_to_json(\"root was cancelled\", W_STRING_UNICODE));\n  } else {\n    resp.set(\n        {{\"watch\", w_string_to_json(root->root_path)},\n         {\"watcher\", w_string_to_json(root->view()->getName())}});\n  }\n  add_root_warnings_to_response(resp, root);\n  if (!rel_path_from_watch.empty()) {\n    resp.set(\"relative_path\", w_string_to_json(rel_path_from_watch));\n  }\n  return resp;\n}\nW_CMD_REG(\n    \"watch-project\",\n    cmd_watch_project,\n    CMD_DAEMON | CMD_ALLOW_ANY_USER,\n    w_cmd_realpath_root);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/cppclient/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_binary.bzl\", \"cpp_binary\")\nload(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_binary(\n    name = \"cli\",\n    srcs = [\"CLI.cpp\"],\n    deps = [\n        \":cppclient\",\n        \"//folly/init:init\",\n        \"//folly/io/async:scoped_event_base_thread\",\n        \"//folly/json:dynamic\",\n    ],\n)\n\ncpp_library(\n    name = \"cppclient\",\n    srcs = [\n        \"WatchmanClient.cpp\",\n        \"WatchmanConnection.cpp\",\n        \"WatchmanResponseError.cpp\",\n    ],\n    headers = [\n        \"WatchmanClient.h\",\n        \"WatchmanConnection.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \"fbsource//third-party/glog:glog\",\n        \"//folly:network_address\",\n        \"//folly/executors:inline_executor\",\n        \"//folly/json/bser:bser\",\n    ],\n    exported_deps = [\n        \"//folly:exception_wrapper\",\n        \"//folly:executor\",\n        \"//folly:optional\",\n        \"//folly:try\",\n        \"//folly/futures:core\",\n        \"//folly/io:iobuf\",\n        \"//folly/io/async:async_base\",\n        \"//folly/io/async:async_socket\",\n        \"//folly/json:dynamic\",\n    ] + select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:linux\": [\n            \"//folly:subprocess\",\n        ],\n        \"ovr_config//os:macos\": [\n            \"//folly:subprocess\",\n        ],\n        \"ovr_config//os:windows\": [\n            \"//eden/common/utils:process\",\n        ],\n    }),\n)\n"
  },
  {
    "path": "watchman/cppclient/CLI.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n  This is a test utility for WatchmanConnection. This works a bit like the\n  watchman CLI.\n\n  Build with something like:\n  $ LDFLAGS=$(pkg-config watchmanclient --libs) \\\n      CPPFLAGS=$(pkg-config watchmanclient --cflags) \\\n      make CLI\n\n  WatchmanConnection is automatically tested via the cppclient test more\n  thoroughly.\n*/\n\n#include <watchman/cppclient/WatchmanConnection.h>\n\n#include <iostream>\n#include <memory>\n\n#include <folly/init/Init.h>\n#include <folly/io/async/ScopedEventBaseThread.h>\n#include <folly/json/json.h>\n\nusing namespace folly;\nusing namespace watchman;\n\nint main(int argc, char** argv) {\n  const folly::Init init(&argc, &argv);\n\n  folly::ScopedEventBaseThread sebt;\n  auto eb = sebt.getEventBase();\n\n  folly::dynamic cmd = folly::dynamic::array;\n  for (int i = 1; i < argc; i++) {\n    cmd.push_back(std::string(argv[i]));\n  }\n\n  auto c = std::make_shared<WatchmanConnection>(eb);\n  c->connect()\n      .thenValue([&](const folly::dynamic& version) {\n        std::cout << \"Connected to watchman: \" << version << std::endl;\n        std::cout << \"Going to run \" << cmd << std::endl;\n        return c->run(cmd);\n      })\n      .thenValue([](const folly::dynamic& result) {\n        LOG(INFO) << \"Result: \" << result;\n      })\n      .thenError([](const folly::exception_wrapper& ex) {\n        std::cerr << \"Failed: \" << ex.what() << std::endl;\n      })\n      .wait();\n\n  c->run(folly::dynamic::array(\"watch-list\"))\n      .thenValue(\n          [](const folly::dynamic& res) { std::cout << res << std::endl; })\n      .wait();\n  c->close();\n\n  return 0;\n}\n"
  },
  {
    "path": "watchman/cppclient/WatchmanClient.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"WatchmanClient.h\"\n\n#include <fmt/core.h>\n#include <glog/logging.h>\n\n#include <utility>\n\nnamespace watchman {\n\nusing namespace folly;\n\nWatchmanClient::~WatchmanClient() {\n  // We need to explicitly close the connection so in the case that it outlives\n  // us it doesn't accidentally call our callback.\n  conn_->close();\n}\n\nWatchmanClient::WatchmanClient(\n    EventBase* eventBase,\n    std::optional<std::string>&& socketPath,\n    folly::Executor* cpuExecutor,\n    ErrorCallback errorCallback)\n    : conn_(\n          std::make_shared<WatchmanConnection>(\n              eventBase,\n              std::move(socketPath),\n              std::optional<WatchmanConnection::Callback>(\n                  [this](Try<dynamic>&& data) {\n                    connectionCallback(std::move(data));\n                  }),\n              cpuExecutor)),\n      errorCallback_(std::move(errorCallback)) {}\n\nvoid WatchmanClient::connectionCallback(Try<dynamic>&& try_data) {\n  // If an exception occurs notify all subscription callbacks. Other outstanding\n  // one-shots etc. will get exceptions returned via their futures if needed.\n  if (try_data.hasException()) {\n    for (auto& subscription : subscriptionMap_) {\n      subscription.second->executor_->add(\n          [sub_ptr = subscription.second, try_data]() mutable {\n            if (sub_ptr->active_) {\n              sub_ptr->callback_(std::move(try_data));\n            }\n          });\n    }\n    if (errorCallback_) {\n      errorCallback_(try_data.exception());\n    }\n    return;\n  }\n\n  auto& data = try_data.value();\n  auto subscription_data = data.get_ptr(\"subscription\");\n  if (subscription_data) {\n    auto subscription = [&]() -> SubscriptionPtr {\n      std::lock_guard<std::mutex> guard(mutex_);\n      auto subscriptionIt =\n          subscriptionMap_.find(subscription_data->asString());\n      if (subscriptionIt == subscriptionMap_.end()) {\n        return nullptr;\n      } else {\n        return subscriptionIt->second;\n      }\n    }();\n    if (!subscription) {\n      LOG(ERROR) << \"Unexpected subscription update: \"\n                 << subscription_data->asString();\n    } else {\n      auto exec = subscription->executor_;\n      exec->add([sub_ptr = std::move(subscription),\n                 data = std::move(data)]() mutable {\n        if (sub_ptr->active_) {\n          sub_ptr->callback_(Try<dynamic>(std::move(data)));\n        }\n      });\n    }\n  } else {\n    LOG(ERROR) << \"Unhandled unilateral data: \" << data;\n  }\n}\n\nSemiFuture<dynamic> WatchmanClient::connect(dynamic versionArgs) {\n  return conn_->connect(std::move(versionArgs));\n}\n\nvoid WatchmanClient::close() {\n  return conn_->close();\n}\n\nSemiFuture<dynamic> WatchmanClient::run(const dynamic& cmd) {\n  return conn_->run(cmd);\n}\n\nFuture<WatchPathPtr> WatchmanClient::watchImpl(std::string_view path) {\n  return conn_->run(dynamic::array(\"watch-project\", path))\n      .thenValue([=](dynamic&& data) {\n        auto relative_path = data[\"relative_path\"];\n        std::optional<std::string> relative_path_optional;\n        if (relative_path != nullptr) {\n          relative_path_optional = relative_path.asString();\n        }\n        return std::make_shared<WatchPath>(\n            data[\"watch\"].asString(), relative_path_optional);\n      });\n}\n\nSemiFuture<WatchPathPtr> WatchmanClient::watch(std::string_view path) {\n  return watchImpl(path).semi();\n}\n\nSemiFuture<std::string> WatchmanClient::getClock(WatchPathPtr path) {\n  return conn_->run(dynamic::array(\"clock\", path->root_))\n      .thenValue([](dynamic data) { return data[\"clock\"].asString(); });\n}\n\nSemiFuture<QueryResult> WatchmanClient::query(\n    dynamic queryObj,\n    WatchPathPtr path) {\n  if (path->relativePath_) {\n    queryObj[\"relative_root\"] = *path->relativePath_;\n  }\n  return run(dynamic::array(\"query\", path->root_, std::move(queryObj)))\n      .deferValue(\n          [](folly::dynamic&& res) { return QueryResult{std::move(res)}; });\n}\n\nSemiFuture<SubscriptionPtr> WatchmanClient::subscribe(\n    dynamic query,\n    WatchPathPtr path,\n    Executor* executor,\n    SubscriptionCallback&& callback,\n    std::string subscriptionName) {\n  auto name = subscriptionName.empty() ? fmt::format(\"sub{}\", (int)++nextSubID_)\n                                       : std::move(subscriptionName);\n  auto subscription =\n      std::make_shared<Subscription>(executor, std::move(callback), name, path);\n  {\n    std::lock_guard<std::mutex> guard(mutex_);\n    subscriptionMap_[name] = subscription;\n  }\n  if (path->relativePath_) {\n    query[\"relative_root\"] = *(path->relativePath_);\n  }\n  return run(dynamic::array(\"subscribe\", path->root_, name, query))\n      .deferValue([subscription = std::move(subscription),\n                   name = name](const dynamic& data) {\n        CHECK(data[\"subscribe\"] == name)\n            << \"Unexpected response to subscribe request \" << data;\n        return subscription;\n      });\n}\n\nSemiFuture<SubscriptionPtr> WatchmanClient::subscribe(\n    const dynamic& query,\n    std::string_view path,\n    Executor* executor,\n    SubscriptionCallback&& callback,\n    std::string subscriptionName) {\n  return watchImpl(path).thenValue(\n      [=,\n       this,\n       callback = std::move(callback),\n       subscriptionName =\n           std::move(subscriptionName)](WatchPathPtr watch_path) mutable {\n        return subscribe(\n            query,\n            watch_path,\n            executor,\n            std::move(callback),\n            std::move(subscriptionName));\n      });\n}\n\nSemiFuture<dynamic> WatchmanClient::flushSubscription(\n    SubscriptionPtr sub,\n    std::chrono::milliseconds timeout) {\n  CHECK(sub->active_) << \"Not subscribed.\";\n\n  dynamic args = dynamic::object;\n  args[\"sync_timeout\"] = timeout.count();\n  args[\"subscriptions\"] = dynamic::array(sub->name_);\n  return run(\n      dynamic::array(\"flush-subscriptions\", sub->watchPath_->root_, args));\n}\n\nSemiFuture<dynamic> WatchmanClient::unsubscribe(SubscriptionPtr sub) {\n  CHECK(sub->active_) << \"Already unsubscribed.\";\n\n  sub->active_ = false;\n  return conn_\n      ->run(dynamic::array(\"unsubscribe\", sub->watchPath_->root_, sub->name_))\n      .ensure([=, this] {\n        std::lock_guard<std::mutex> guard(mutex_);\n        subscriptionMap_.erase(sub->name_);\n      })\n      .semi();\n}\n\nSubscription::Subscription(\n    Executor* executor,\n    SubscriptionCallback&& callback,\n    const std::string& name,\n    WatchPathPtr watchPath)\n    : executor_(executor),\n      callback_(std::move(callback)),\n      name_(name),\n      watchPath_(watchPath) {}\n\nWatchPath::WatchPath(\n    const std::string& root,\n    const std::optional<std::string>& relativePath)\n    : root_(root), relativePath_(relativePath) {}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/cppclient/WatchmanClient.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n/* A C++ client library for accessing Watchman. This builds on top of\n * WatchmanConnection to provide a C++ friendly subscription API and maybe\n * later other convienence functions. The entry point for this API is via\n * the WatchmanClient type.\n *\n * Example usage:\n *  // Set-up an EventBase to execute I/O operations in.\n *  folly::EventBase eb = ...;\n *\n *  // Set-up a session with a subscription using chained future actions to:\n *  // * Connect to the watchman server (and print out Watchman version)\n *  // * Set-up a watch for /some/path\n *  // * Subscribe to a query of name data for any updated files\n *  WatchmanClient client(&eb);\n *  auto subFuture = client.connect().then([](folly::dynamic&& response) {\n *    std::cout << \"Server version \" << response[\"version\"] << std::endl;\n *\n *    return client.watch(\"/some/path\").then([](WatchPathPtr watch) {\n *      folly::dynamic query = folly::dynamic::object(\"fields\", {\"name\"});\n *\n *      return client.subscribe(\n *          query,\n *          watch,\n *          &eb,\n *          [](folly::Try<folly::dynamic>&& data) {\n *            if (data.hasValue()) {\n *              std::cout << \"Got file update data: \" << data << std::endl;\n *            } else {\n *              std::cout << \"subscribe() failed with: \" << data.exception()\n *                        << std::endl;\n *            }\n *          });\n *    });\n *  });\n *\n *  // Wait for chain of futures to complete or raise an exception.\n *  auto subscription = subFuture.wait().value();\n *\n *  // Run a one-shot Watchman command and extract the output.\n *  auto watchman_version_str =\n *    client.run({\"version\"}).wait().value()[\"version\"];\n *\n *  // ... do stuff ...\n *\n *  // Unsubscribe from query above. Note this is not strictly needed if we're\n *  // going to immediately shut down the connection anyway.\n *  client.unsubscribe(subscription);\n *\n *  // Close connection. Note again this is not strictly needed as\n *  // deconstruction will also cause the connection to close.\n *  client.close();\n */\n\n#include \"WatchmanConnection.h\"\n\n#include <chrono>\n#include <functional>\n#include <memory>\n#include <mutex>\n#include <optional>\n#include <string>\n#include <string_view>\n#include <unordered_map>\n\n#include <folly/Executor.h>\n#include <folly/Optional.h>\n#include <folly/Try.h>\n#include <folly/futures/Future.h>\n#include <folly/json/dynamic.h>\n\nnamespace watchman {\n\nstruct WatchmanClient;\nstruct Subscription;\n\nstruct WatchPath {\n  friend WatchmanClient;\n\n  WatchPath(\n      const std::string& root,\n      const std::optional<std::string>& relativePath);\n\n private:\n  const std::string root_;\n  const std::optional<std::string> relativePath_;\n};\n\nusing Clock = std::string;\nusing WatchPathPtr = std::shared_ptr<WatchPath>;\n\nusing SubscriptionCallback = std::function<void(folly::Try<folly::dynamic>&&)>;\nusing ErrorCallback = std::function<void(folly::exception_wrapper&)>;\n\nstruct QueryResult {\n  QueryResult(folly::dynamic raw) : raw_{std::move(raw)} {}\n\n  folly::dynamic raw_;\n};\n\nstruct Subscription {\n  friend WatchmanClient;\n\n  Subscription(\n      folly::Executor* executor,\n      SubscriptionCallback&& callback,\n      const std::string& name,\n      WatchPathPtr watchPath);\n\n private:\n  folly::Executor::KeepAlive<folly::Executor> executor_;\n  SubscriptionCallback callback_;\n  const std::string name_;\n  WatchPathPtr watchPath_;\n  bool active_{true};\n};\n\nusing SubscriptionPtr = std::shared_ptr<Subscription>;\n\nstruct WatchmanClient {\n  ~WatchmanClient();\n\n  explicit WatchmanClient(\n      folly::EventBase* eventBase,\n      std::optional<std::string>&& sockPath = {},\n      folly::Executor* cpuExecutor = {},\n      ErrorCallback errCb = {});\n\n  [[deprecated(\"use std::optional instead\")]] explicit WatchmanClient(\n      folly::EventBase* eventBase,\n      folly::Optional<std::string>&& sockPath,\n      folly::Executor* cpuExecutor = {},\n      ErrorCallback errCb = {})\n      : WatchmanClient(\n            eventBase,\n            std::optional<std::string>{std::move(sockPath)},\n            cpuExecutor,\n            std::move(errCb)) {}\n\n  /**\n   * Establishes a connection, returning version and capability information per\n   * https://facebook.github.io/watchman/docs/cmd/version.html#capabilities\n   */\n  folly::SemiFuture<folly::dynamic> connect(\n      folly::dynamic versionArgs = folly::dynamic::object()(\n          \"required\",\n          folly::dynamic::array(\"relative_root\")));\n\n  /**\n   * Close the underlying connection to Watchman, including automatically\n   * unsubscribing from all subscriptions.\n   */\n  void close();\n\n  /**\n   * Returns true if the underlying connection is closed or broken.\n   */\n  bool isDead() {\n    return conn_->isDead();\n  }\n\n  /**\n   * Execute a watchman command, yielding the command response.\n   * cmd is typically an array.\n   * See\n   * https://facebook.github.io/watchman/docs/socket-interface.html#watchman-protocol\n   * for the conventions.\n   *\n   * Errors, both at the transport layer and at the watchman protocol layer\n   * (where the \"error\" field is set in the response) are captured in the Future\n   * as exceptions. Watchman protocol response errors are represented by the\n   * WatchmanResponseError type.\n   */\n  folly::SemiFuture<folly::dynamic> run(const folly::dynamic& cmd);\n\n  /**\n   * Create a watch for a path, automatically sharing scarce OS resources\n   * between multiple watchers of the same (super-)tree. This should be the\n   * preferred way to create a WatchPath instance unless you want to explicitly\n   * avoid sharing Watchman tree configurations between independent watchers.\n   *\n   * See https://facebook.github.io/watchman/docs/cmd/watch-project.html for\n   * details.\n   */\n  folly::SemiFuture<WatchPathPtr> watch(std::string_view path);\n\n  /**\n   * Ask Watchman for its current clock in a given root.\n   */\n  folly::SemiFuture<Clock> getClock(WatchPathPtr path);\n\n  /**\n   * Send a single query to Watchman. queryObj is an object rather than an\n   * array.\n   */\n  folly::SemiFuture<QueryResult> query(\n      folly::dynamic queryObj,\n      WatchPathPtr path);\n\n  /**\n   * Establishes a subscription that will trigger callback (via your specified\n   * executor) whenever matching files change.\n   */\n  folly::SemiFuture<SubscriptionPtr> subscribe(\n      folly::dynamic query,\n      WatchPathPtr path,\n      folly::Executor* executor,\n      SubscriptionCallback&& callback,\n      std::string subscriptionName);\n\n  /**\n   * As-per subscribe above but automatically creates a WatchPath from a string.\n   * This is probably what you want but see comments on watch() for details.\n   */\n  folly::SemiFuture<SubscriptionPtr> subscribe(\n      const folly::dynamic& query,\n      std::string_view path,\n      folly::Executor* executor,\n      SubscriptionCallback&& callback,\n      std::string subscriptionName);\n\n  /**\n   * Returns a future which completes when all outstanding Watchman updates have\n   * been received or a timeout occurs.\n   * See https://facebook.github.io/watchman/docs/cmd/flush-subscriptions.html\n   */\n  folly::SemiFuture<folly::dynamic> flushSubscription(\n      SubscriptionPtr subscription,\n      std::chrono::milliseconds timeout);\n\n  /** Cancels an existing subscription. */\n  folly::SemiFuture<folly::dynamic> unsubscribe(SubscriptionPtr subscription);\n\n  /** Intended for test only. */\n  WatchmanConnection& getConnection() {\n    return *conn_;\n  }\n\n private:\n  void connectionCallback(folly::Try<folly::dynamic>&& try_data);\n\n  folly::Future<WatchPathPtr> watchImpl(std::string_view path);\n\n  std::shared_ptr<WatchmanConnection> conn_;\n  ErrorCallback errorCallback_;\n  std::unordered_map<std::string, SubscriptionPtr> subscriptionMap_;\n  std::mutex mutex_;\n  int nextSubID_{0};\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/cppclient/WatchmanConnection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"WatchmanConnection.h\"\n\n#include <cstdlib>\n\n#include <fmt/core.h>\n\n#include <folly/ExceptionWrapper.h>\n#include <folly/SocketAddress.h>\n#include <folly/executors/InlineExecutor.h>\n#include <folly/json/bser/Bser.h>\n\n#ifdef _WIN32\n#include <eden/common/utils/SpawnedProcess.h> // @manual\n#else\n#include <folly/Subprocess.h> // @manual\n#endif\n\nnamespace watchman {\n\nusing namespace folly::bser;\nusing namespace folly;\n#ifdef _WIN32\nusing facebook::eden::SpawnedProcess;\n#endif\n\n// Ordered with the most likely kind first\nstatic const std::vector<dynamic> kUnilateralLabels{\"subscription\", \"log\"};\n\nstatic const dynamic kError(\"error\");\nstatic const dynamic kCapabilities(\"capabilities\");\n\n// We'll just dispatch bser decodes and callbacks inline unless they\n// give us an alternative environment\nstatic InlineExecutor inlineExecutor;\n\nWatchmanConnection::WatchmanConnection(\n    EventBase* eventBase,\n    std::optional<std::string>&& sockPath,\n    std::optional<WatchmanConnection::Callback>&& callback,\n    Executor* cpuExecutor)\n    : eventBase_(eventBase),\n      sockPath_(std::move(sockPath)),\n      callback_(std::move(callback)),\n      cpuExecutor_(cpuExecutor ? cpuExecutor : &inlineExecutor),\n      versionCmd_(nullptr),\n      bufQ_(IOBufQueue::cacheChainLength()) {\n  CHECK_NOTNULL(eventBase);\n}\n\nWatchmanConnection::~WatchmanConnection() {\n  close();\n}\n\nfolly::Future<std::string> WatchmanConnection::getSockPath() {\n  // Take explicit configuration first\n  if (sockPath_.has_value()) {\n    return makeFuture(sockPath_.value());\n  }\n\n  // Else use the environmental variable used by watchman to report\n  // the active socket path\n  auto var = std::getenv(\"WATCHMAN_SOCK\");\n  if (var && *var) {\n    return makeFuture(std::string(var));\n  }\n\n  return via(cpuExecutor_, [] {\n  // Else discover it from the CLI\n#ifdef _WIN32\n    SpawnedProcess::Options options;\n    options.pipeStdout();\n    options.pipeStderr();\n\n    SpawnedProcess proc{\n        {\"watchman\", \"--output-encoding=bser\", \"get-sockname\"},\n        std::move(options)};\n#else\n  folly::Subprocess proc(\n      {\"watchman\", \"--output-encoding=bser\", \"get-sockname\"},\n      folly::Subprocess::Options().pipeStdout().pipeStderr().usePath());\n#endif\n\n    auto out_pair = proc.communicate();\n    auto returnCode = proc.wait();\n    if (returnCode.exitStatus() != 0) {\n#ifndef _WIN32\n      throw WatchmanError{fmt::format(\n          \"`watchman get-sockname` returned error code {} when called as user {}. Error: {}\",\n          returnCode.exitStatus(),\n          geteuid(),\n          out_pair.second)};\n#else\n      throw WatchmanError{fmt::format(\n          \"`watchman get-sockname` returned error code {}. Error: {}\", returnCode.exitStatus(), out_pair.second)};\n#endif\n    }\n    auto result = parseBser(out_pair.first);\n\n    // Recent versions of watchman include both `unix_domain` and `sockname`\n    // fields, however older versions - such as v4.9.0, included in Ubuntu\n    // 20.04 - only define `sockname`.\n    //\n    // Prefer the newer, more specific 'unix_domain', but fall back to\n    // 'sockname'.\n    if (result.count(\"unix_domain\")) {\n      return result[\"unix_domain\"].asString();\n    }\n    return result[\"sockname\"].asString();\n  });\n}\n\nFuture<dynamic> WatchmanConnection::connect(const folly::dynamic& versionArgs) {\n  if (!versionArgs.isObject()) {\n    throw WatchmanError(\"versionArgs must be object\");\n  }\n  versionCmd_ = folly::dynamic::array(\"version\", versionArgs);\n\n  auto res = getSockPath().thenValue(\n      [shared_this = shared_from_this()](std::string&& path) {\n        shared_this->eventBase_->runInEventBaseThread([=] {\n          folly::SocketAddress addr;\n          addr.setFromPath(path);\n\n          shared_this->sock_ =\n              folly::AsyncSocket::newSocket(shared_this->eventBase_.get());\n          shared_this->sock_->connect(shared_this.get(), addr);\n        });\n\n        return shared_this->connectPromise_.getFuture();\n      });\n  return res;\n}\n\nvoid WatchmanConnection::close() {\n  if (closing_) {\n    return;\n  }\n  closing_ = true;\n  if (sock_) {\n    eventBase_->runImmediatelyOrRunInEventBaseThreadAndWait([this] {\n      // This implicitly closes the connection without flushing outstanding\n      // writes. Should be fine as Watchman is mostly just providing info, so\n      // an incomplete partial write isn't a problem. Doing a fully flushing\n      // close here might be the cause a deadlock accessing the event base.\n      sock_.reset();\n    });\n  }\n  failQueuedCommands(\n      make_exception_wrapper<WatchmanError>(\n          \"WatchmanConnection::close() was called\"));\n}\n\n// The convention for Watchman responses is that they represent\n// an error if they contain the \"error\" key.  We want to report\n// those as exceptions, but it is easier to do that via a Try\nTry<dynamic> WatchmanConnection::watchmanResponseToTry(dynamic&& value) {\n  auto error = value.get_ptr(kError);\n  if (error) {\n    return Try<dynamic>(make_exception_wrapper<WatchmanResponseError>(value));\n  }\n  return Try<dynamic>(std::move(value));\n}\n\nvoid WatchmanConnection::connectSuccess() noexcept {\n  try {\n    sock_->setReadCB(this);\n    sock_->setCloseOnExec();\n\n    run(versionCmd_)\n        .thenValue([shared_this = shared_from_this()](dynamic&& result) {\n          // If there is no \"capabilities\" key then the version of\n          // watchman is too old; treat this as an error\n          if (!result.get_ptr(kCapabilities)) {\n            result[\"error\"] =\n                \"This watchman server has no support for capabilities, \"\n                \"please upgrade to the current stable version of watchman\";\n            shared_this->connectPromise_.setTry(\n                shared_this->watchmanResponseToTry(std::move(result)));\n            return;\n          }\n          shared_this->connectPromise_.setValue(std::move(result));\n        })\n        .thenError(\n            [shared_this = shared_from_this()](folly::exception_wrapper&& e) {\n              shared_this->connectPromise_.setException(std::move(e));\n            });\n  } catch (...) {\n    connectPromise_.setException(\n        folly::exception_wrapper(std::current_exception()));\n  }\n}\n\nvoid WatchmanConnection::connectErr(\n    const folly::AsyncSocketException& ex) noexcept {\n  connectPromise_.setException(ex);\n}\n\nWatchmanConnection::QueuedCommand::QueuedCommand(const dynamic& command)\n    : cmd(command) {}\n\nFuture<dynamic> WatchmanConnection::run(const dynamic& command) noexcept {\n  auto cmd = std::make_shared<QueuedCommand>(command);\n  if (broken_) {\n    cmd->promise.setException(WatchmanError(\"The connection was broken\"));\n    return cmd->promise.getFuture();\n  }\n  if (!sock_) {\n    cmd->promise.setException(WatchmanError(\n        \"No socket (did you call connect() and check result for exceptions?)\"));\n    return cmd->promise.getFuture();\n  }\n\n  bool shouldWrite;\n  {\n    std::lock_guard<std::mutex> g(mutex_);\n    // We only need to call sendCommand if we don't have a command in\n    // progress; the completion handler will trigger it once we receive\n    // the response\n    shouldWrite = commandQ_.empty();\n    commandQ_.push_back(cmd);\n  }\n\n  if (shouldWrite) {\n    eventBase_->runInEventBaseThread(\n        [shared_this = shared_from_this()] { shared_this->sendCommand(); });\n  }\n\n  return cmd->promise.getFuture();\n}\n\n// Generate a failure for all queued commands\nvoid WatchmanConnection::failQueuedCommands(folly::exception_wrapper&& ex) {\n  std::lock_guard<std::mutex> g(mutex_);\n  auto q = commandQ_;\n  commandQ_.clear();\n\n  broken_ = true;\n  for (auto& cmd : q) {\n    if (!cmd->promise.isFulfilled()) {\n      cmd->promise.setException(ex);\n    }\n  }\n\n  // If the user has explicitly closed the connection no need for callback\n  if (callback_ && !closing_) {\n    cpuExecutor_->add([shared_this = shared_from_this(), ex = std::move(ex)] {\n      // Make sure we weren't asked to close between the time we fired this\n      // callback and when the callback ran.\n      if (!shared_this->closing_) {\n        (*(shared_this->callback_))(folly::Try<folly::dynamic>(std::move(ex)));\n      }\n    });\n  }\n}\n\n// Sends the next eligible command to the Watchman service\nvoid WatchmanConnection::sendCommand(bool pop) {\n  std::shared_ptr<QueuedCommand> cmd;\n\n  {\n    std::lock_guard<std::mutex> g(mutex_);\n\n    if (pop) {\n      // We finished processing this one, discard it and focus\n      // on the next item, if any.\n      commandQ_.pop_front();\n    }\n    if (commandQ_.empty()) {\n      return;\n    }\n    cmd = commandQ_.front();\n  }\n\n  sock_->writeChain(this, toBserIOBuf(cmd->cmd, serialization_opts()));\n}\n\nvoid WatchmanConnection::popAndSendCommand() {\n  sendCommand(/* pop = */ true);\n}\n\n// Called when AsyncSocket::writeChain completes\nvoid WatchmanConnection::writeSuccess() noexcept {\n  // Don't care particularly\n}\n\n// Called when AsyncSocket::writeChain fails\nvoid WatchmanConnection::writeErr(\n    size_t,\n    const folly::AsyncSocketException& ex) noexcept {\n  failQueuedCommands(ex);\n}\n\n// Called when AsyncSocket wants to give us data\nvoid WatchmanConnection::getReadBuffer(void** bufReturn, size_t* lenReturn) {\n  std::lock_guard<std::mutex> g(mutex_);\n  const auto ret = bufQ_.preallocate(2048, 2048);\n  *bufReturn = ret.first;\n  *lenReturn = ret.second;\n}\n\n// Called when AsyncSocket gave us data\nvoid WatchmanConnection::readDataAvailable(size_t len) noexcept {\n  {\n    std::lock_guard<std::mutex> g(mutex_);\n    bufQ_.postallocate(len);\n  }\n  cpuExecutor_->add([shared_this = shared_from_this()] {\n    shared_this->decodeNextResponse();\n  });\n}\n\nstd::unique_ptr<folly::IOBuf> WatchmanConnection::splitNextPdu() {\n  std::lock_guard<std::mutex> g(mutex_);\n  if (!bufQ_.front()) {\n    return nullptr;\n  }\n\n  // Do we have enough data to decode the next item?\n  size_t pdu_len = 0;\n  try {\n    pdu_len = decodePduLength(bufQ_.front());\n  } catch (const std::out_of_range&) {\n    // Don't have enough data yet\n    return nullptr;\n  }\n\n  if (pdu_len > bufQ_.chainLength()) {\n    // Don't have enough data yet\n    return nullptr;\n  }\n\n  // Remove the PDU blob from the front of the chain\n  return bufQ_.split(pdu_len);\n}\n\n// Try to peel off one or more PDU's from our buffer queue.\n// Decode each complete PDU from BSER -> dynamic and dispatch\n// either the associated QueuedCommand or to the callback_ for\n// unilateral responses.\n// This is executed via the cpuExecutor.  We only allow one\n// thread to carry out the decoding at a time so that the callbacks\n// are triggered in the order that they are received.  It is possible\n// for us to receive a large PDU followed by a small one and for the\n// small one to finish decoding before the large one, so we must\n// serialize the dispatching.\nvoid WatchmanConnection::decodeNextResponse() {\n  if (decoding_.exchange(true)) {\n    return;\n  }\n  SCOPE_EXIT {\n    decoding_.store(false);\n  };\n\n  while (true) {\n    auto pdu = splitNextPdu();\n    if (!pdu) {\n      return;\n    }\n\n    try {\n      auto decoded = parseBser(pdu.get());\n\n      bool is_unilateral = false;\n      // Check for a unilateral response\n      for (const auto& k : kUnilateralLabels) {\n        if (decoded.get_ptr(k)) {\n          // This is a unilateral response\n          if (callback_.has_value()) {\n            callback_.value()(watchmanResponseToTry(std::move(decoded)));\n            is_unilateral = true;\n            break;\n          }\n          // No callback; usage error :-/\n          failQueuedCommands(\n              std::runtime_error(\"No unilateral callback has been installed\"));\n          return;\n        }\n      }\n      if (is_unilateral) {\n        continue;\n      }\n\n      // It's actually a command response; get the cmd so that we\n      // can fulfil its promise\n      std::shared_ptr<QueuedCommand> cmd;\n      {\n        std::lock_guard<std::mutex> g(mutex_);\n        if (commandQ_.empty()) {\n          failQueuedCommands(\n              std::runtime_error(\"No commands have been queued\"));\n          return;\n        }\n        cmd = commandQ_.front();\n      }\n\n      // Dispatch outside of the lock in case it tries to send another\n      // command\n      cmd->promise.setTry(watchmanResponseToTry(std::move(decoded)));\n\n      // Now we're in a position to send the next queued command.\n      // We remove it after dispatching the try above in case that\n      // queued up more commands; we want to be the one thing that\n      // is responsible for sending the next queued command here\n      popAndSendCommand();\n    } catch (...) {\n      failQueuedCommands(folly::exception_wrapper{std::current_exception()});\n      return;\n    }\n  }\n}\n\n// Called when AsyncSocket hits EOF\nvoid WatchmanConnection::readEOF() noexcept {\n  failQueuedCommands(\n      std::system_error(ENOTCONN, std::system_category(), \"connection closed\"));\n}\n\n// Called when AsyncSocket has a read error\nvoid WatchmanConnection::readErr(\n    const folly::AsyncSocketException& ex) noexcept {\n  failQueuedCommands(ex);\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/cppclient/WatchmanConnection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <atomic>\n#include <deque>\n#include <memory>\n#include <optional>\n\n#include <folly/ExceptionWrapper.h>\n#include <folly/futures/Future.h>\n#include <folly/io/IOBufQueue.h>\n#include <folly/io/async/AsyncSocket.h>\n#include <folly/io/async/EventBase.h>\n#include <folly/json/dynamic.h>\n\nnamespace watchman {\n\n// General watchman error\nclass WatchmanError : public std::runtime_error {\n public:\n  using std::runtime_error::runtime_error;\n};\n\n// Encapsulates an error reported by the protocol\n// what() returns the error message, getResponse() returns\n// the complete response packet\nclass WatchmanResponseError : public WatchmanError {\n public:\n  explicit WatchmanResponseError(const folly::dynamic& response);\n  const folly::dynamic& getResponse() const;\n\n private:\n  folly::dynamic response_;\n};\n\n// Represents a raw connection to the watchman service\nclass WatchmanConnection\n    : folly::AsyncSocket::ConnectCallback,\n      folly::AsyncReader::ReadCallback,\n      folly::AsyncWriter::WriteCallback,\n      public std::enable_shared_from_this<WatchmanConnection> {\n public:\n  using Callback = std::function<void(folly::Try<folly::dynamic>)>;\n\n  explicit WatchmanConnection(\n      folly::EventBase* eventBase,\n      std::optional<std::string>&& sockPath = {},\n      std::optional<Callback>&& callback = {},\n      // You really should provide an executor that runs in a different\n      // thread to avoid blocking your event base for large responses\n      folly::Executor* cpuExecutor = nullptr);\n  ~WatchmanConnection() override;\n\n  // Initiate a connection.  Yields the version information for the\n  // service at a later time.  You need to call connect once before\n  // you can use the run() method.\n  // versionArgs, if specified, must be an object value.  It will\n  // be passed as part of the extended version command and should\n  // be used to list required capabilities for the session\n  folly::Future<folly::dynamic> connect(\n      const folly::dynamic& versionArgs = folly::dynamic::object(\n          \"required\",\n          folly::dynamic::array(\"relative_root\")));\n\n  // Issue a watchman command, yielding the results at a later time.\n  // If the connection was terminated, will throw immediately\n  folly::Future<folly::dynamic> run(const folly::dynamic& command) noexcept;\n\n  // Close the connection.  All queued commands will be cancelled\n  void close();\n\n  // Returns true if the connection has been closed or is in a broken state\n  bool isDead() {\n    return closing_ || broken_;\n  }\n\n  // This is intended for test only.\n  void forceEOF() {\n    readEOF();\n  }\n\n private:\n  // Represents a command queued up by the run() function\n  struct QueuedCommand {\n    folly::dynamic cmd;\n    folly::Promise<folly::dynamic> promise;\n\n    explicit QueuedCommand(const folly::dynamic& command);\n  };\n\n  folly::Future<std::string> getSockPath();\n  void failQueuedCommands(folly::exception_wrapper&& ex);\n  void sendCommand(bool pop = false);\n  void popAndSendCommand();\n  void decodeNextResponse();\n  folly::Try<folly::dynamic> watchmanResponseToTry(folly::dynamic&& value);\n  std::unique_ptr<folly::IOBuf> splitNextPdu();\n\n  // ConnectCallback\n  void connectSuccess() noexcept override;\n  void connectErr(const folly::AsyncSocketException& ex) noexcept override;\n\n  // WriteCallback\n  void writeSuccess() noexcept override;\n  void writeErr(\n      size_t bytesWritten,\n      const folly::AsyncSocketException& ex) noexcept override;\n\n  // ReadCallback\n  void getReadBuffer(void** bufReturn, size_t* lenReturn) override;\n  void readDataAvailable(size_t len) noexcept override;\n  void readEOF() noexcept override;\n  void readErr(const folly::AsyncSocketException& ex) noexcept override;\n\n  folly::Executor::KeepAlive<folly::EventBase> eventBase_;\n  std::optional<std::string> sockPath_;\n  std::optional<Callback> callback_;\n  folly::Executor::KeepAlive<folly::Executor> cpuExecutor_;\n  folly::Promise<folly::dynamic> connectPromise_;\n  folly::dynamic versionCmd_;\n  std::shared_ptr<folly::AsyncSocket> sock_;\n  std::mutex mutex_;\n  std::deque<std::shared_ptr<QueuedCommand>> commandQ_;\n  folly::IOBufQueue bufQ_{folly::IOBufQueue::cacheChainLength()};\n  bool broken_{false};\n  bool closing_{false};\n  std::atomic<bool> decoding_{false};\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/cppclient/WatchmanResponseError.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"WatchmanConnection.h\"\n\nnamespace watchman {\n\nusing namespace folly;\n\nstatic const dynamic kError(\"error\");\n\nWatchmanResponseError::WatchmanResponseError(const folly::dynamic& response)\n    : WatchmanError(response[kError].c_str()), response_(response) {}\n\nconst folly::dynamic& WatchmanResponseError::getResponse() const {\n  return response_;\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/cppclient/watchmanclient.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: watchmanclient\nDescription: Watchman C++ client library\nRequires: libfolly\nVersion: 0\nLibs: -L${libdir} -lwatchmanclient\nCflags: -I${includedir}\n"
  },
  {
    "path": "watchman/docs/sync.md",
    "content": "# Query Synchronization\n\n**Terminology note**: Like the C++ memory model, this document will use the term sequenced-before and sequenced-after to reflect an ordering relationship between operations. Not all operations have a defined order. If two separate processes write to the filesystem, even if one does complete prior to the other, it does not necessarily imply a sequenced relationship between them. If one process writes two files on the same thread, there is a sequenced relationship.\n\n## Overview\n\nWatchman provides a model of query consistency: queries sequenced-after a filesystem modification will reflect those modifications in its query results.\n\nThat is, if a file is modified, a subsequent query should observe those modifications.\n\nThe challenge is that filesystem notification APIs are asynchronous and deferred. So how can Watchman know when it has processed every notification that has happened prior?\n\nThe specifics are platform-dependent, but Watchman generally uses cookie files. It generates a file of a unique filename in the watched directory and waits to receive the corresponding notification, at which point it assumes it has observed every prior change event.\n\n## inotify\n\nIn practice, cookie files work well on Linux. It's unclear whether this sequencing is guaranteed by the kernel, however. That is, is it possible for a write to file A somewhere in the directory hierarchy followed by a write to a cookie file elsewhere to be reported in the opposite order?\n\ninotify's own man page says:\n\n> However, robust applications should allow for the fact that bugs in the monitoring logic or races of the kind described below may leave the cache inconsistent with the filesystem state. It is probably wise to do some consistency checking, and rebuild the cache when inconsistencies are detected.\n\nIn addition:\n\n> The events returned by reading from an inotify file descriptor form an ordered queue.  Thus, for example, it is guaranteed that when renaming from one directory to another, events will be produced in the correct order on the inotify file descriptor.\n\nLinux kernel 5.3 [introduced a regression in inotify](https://lore.kernel.org/linux-fsdevel/CAOQ4uxhWz_J4fir9ft5XpRVHoNCdk_bP1y-a=MhBqRYSf3N8gA@mail.gmail.com/) (likely 49246466a989 \"fsnotify: move fsnotify_nameremove() hook out of d_delete()\") that caused events to sometimes be reported prior to the corresponding caches being flushed after an unlink, resulting in Watchman sometimes observing stale data.\n\nUnder correct operation, inotify should carry sequencing through each step. That is, the inotify event's observation is sequenced-after its corresponding write. The regression here broke that.\n\n## FSEvents\n\nThere are three mechanisms for watching for filesystem changes on macOS: kqueue, /dev/fsevents, and CoreServices FSEvents.\n\nkqueue does not work for large repositories, as it requires a large number of file descriptors which macOS is not tolerant of.\n\n> Last time I tried I had to go into recovery mode to stop the endless reboot cycle where macOS kernel panicked due to not having any FDs available... I tried raising the max FDs to something like 128 million, but 1) this did nothing, 2) some applications were looping through all the potential FDs to try to close them.\n\n/dev/fsevents requires root and is a private, undocumented API.\n\nApple encourages use of FSEvents, which has two modes: per-file notifications, and per-directory notifications. The former produces a higher volume of change events, but in theory allows Watchman to synchronize with cookies as in inotify. The latter produces fewer change events, and in turn requires Watchman `stat()` every child of a directory when a change notification arrives.\n\nHere is our understanding:\n\n```\n┌──────────┐    ┌───────────┐    ┌───────────────┐\n│ Watchman │◄──►│ fseventsd │◄──►│ Darwin kernel │\n└──────────┘    └───────────┘    └───────────────┘\n```\n\nThe kernel reports change events to fseventsd which holds them for a period of time. They may be coalesced, and coalesced events are then reported to subscribed processes like Watchman. The coalesced events may be coarse. The FSEvents documentation is not clear, but we assume it's possible for macOS to combine multiple changes in one directory into a \"just scan this directory\" event.\n\nFSEvents provides a mechanism for flushing change events: [FSEventStreamFlushSync](https://developer.apple.com/documentation/coreservices/1445629-fseventstreamflushsync?language=objc) and [FSEventStreamFlushAsync](https://developer.apple.com/documentation/coreservices/1441727-fseventstreamflushasync?language=objc). This only seems to ensure that events queued in fseventsd will be flushed to subscribers, but does not provide any guarantees about events pending in the kernel.\n\n_As far as we can tell, there is no reliable way to synchronize queries on macOS._\n\nImagine the following sequence of events:\n\n* Watchman starts up and crawls the directory.\n* A program (e.g. git checkout) writes a large number of files into that directory.\n* The program finishes, and then immediately issues a Watchman query, expecting all of those changes to be correct in the result set.\n* That is, the query must not begin evaluating until every notification produced prior has been observed.\n\n### Directory Notifications\n\nBecause Watchman does not receive notifications about individual files in this mode, it will only observe the cookie by scanning a changed directory. Therefore, Watchman cannot distinguish between discovery of a cookie for an unrelated reason (e.g. processing events from before the query started) and being notified of its creation.\n\nOne option would be to try using cookie _directories_ instead of files, and adding entries to these directories in order to produce events. This would work if\n\n1. we were confident FSEvents provided a guarantee that changes sequenced-after each other are notified in the same order, and\n2. we were confident these cookie directory events would never be coalesced into a scan.\n\nWe are not confident of either. See the next section.\n\n### File Notifications\n\nIn production, our Watchman was instrumented with two ring buffers: one containing the last N events provided by FSEvents and the other the paths that Watchman has `stat()`'d. In addition, we record when Watchman noticed a cookie file and unblocked the corresponding query.\n\nI have observed the following scenario in production:\n\n1. src/foo.cpp changes from size 100 to size 101\n2. Watchman query begins\n3. Watchman writes cookie file into repository\n4. FSEvents notifies Watchman of the cookie\n5. Watchman notices the cookie, and starts FSEventStreamFlushSync\n6. FSEventStreamFlushSync succeeds. Watchman assumes at this point it is caught up and unblocks the query, which returns size \"100\" for src/foo.cpp\n6. **Then**, FSEvents notifies Watchman that src/foo.cpp has changed\n\n### Do we have any options?\n\nIf fseventsd is inflating per-file notifications from a directory-only stream of events from the kernel, it's possible directory changes do have an ordering.\n\n## Detecting Divergence\n\nWatchman's view of the filesystem can diverge temporarily or persistently. The aforementioned Linux inotify regression was persistent. FSEvents on the other hand just causes queries to be unblocked too soon. Subsequent queries will eventually see the correct filesystem state.\n\nBoth circumstances can be discovered with `watchmanctl audit`, which rapidly scans the filesystem in parallel with a Watchman query and then compares the results.\n"
  },
  {
    "path": "watchman/facebook/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:export_files.bzl\", \"export_file\")\nload(\"@fbcode_macros//build_defs:python_binary.bzl\", \"python_binary\")\nload(\"@fbcode_macros//build_defs:python_library.bzl\", \"python_library\")\nload(\"@fbcode_macros//build_defs:python_unittest.bzl\", \"python_unittest\")\n\noncall(\"scm_client_infra\")\n\n# Just copy the pre-configured attributes so that we have\n# know precisely what the characteristics will be for this build.\nexport_file(\n    name = \"config.h\",\n    src = \"buck_config.h\",\n    out = \"config.h\",\n    mode = \"copy\",\n)\n\npython_library(\n    name = \"watchman_version\",\n    srcs = [\"watchman_version.py\"],\n    base_module = \"\",\n    typing = True,\n)\n\npython_unittest(\n    name = \"test_watchman_version\",\n    srcs = [\"test/test_watchman_version.py\"],\n    typing = True,\n    deps = [\n        \":watchman_version\",\n        \"//libfb/py:testutil\",\n    ],\n)\n\npython_binary(\n    name = \"watchman-perf\",\n    srcs = {\"watchman-perf.py\": \"watchman_perf.py\"},\n    base_module = \"\",\n    labels = [\"noautodeps\"],\n    main_function = \"watchman_perf.main\",\n    typing = True,\n)\n\npython_unittest(\n    name = \"test_watchman_perf\",\n    srcs = [\n        \"test/test_watchman_perf.py\",\n    ],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n        \"ovr_config//os:macos\",\n    ],\n    labels = [\"noautodeps\"],\n    typing = True,\n    deps = [\n        \":watchman-perf-library\",\n    ],\n)\n"
  },
  {
    "path": "watchman/facebook/saved_state/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"manifold_saved_state\",\n    srcs = [\n        \"DevInfraSavedStateManifoldClient.cpp\",\n        \"DevInfraSavedStateXDBClient.cpp\",\n        \"ManifoldSavedStateInterface.cpp\",\n    ],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    deps = [\n        \"fbcode//common/db/locator:dblocator\",\n        \"fbcode//eden/common/utils:process_info_cache\",\n        \"fbcode//servicerouter/client/cpp2:client_factory\",\n        \"fbcode//servicerouter/client/cpp2:cpp2\",\n        \"fbcode//watchman:command_registry\",\n        \"fbcode//watchman:errors\",\n        \"fbcode//watchman:logging\",\n        \"fbcode//watchman:perf_sample\",\n        \"fbcode//watchman:scm\",\n        \"fbcode//watchman/telemetry:telemetry\",\n    ],\n    exported_deps = [\n        \"fbcode//common/db/mysql_client:mysql_client\",\n        \"fbcode//manifold/blobstore/if:blobstore-cpp2-services\",\n        \"fbcode//watchman:client_context\",\n        \"fbcode//watchman:config\",\n        \"fbcode//watchman:string\",\n        \"fbcode//watchman/saved_state:saved_state\",\n        \"fbcode//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n"
  },
  {
    "path": "watchman/fs/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_binary.bzl\", \"cpp_binary\")\nload(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"fd\",\n    srcs = [\n        \"FSDetect.cpp\",\n        \"FileDescriptor.cpp\",\n        \"FileInformation.cpp\",\n        \"Pipe.cpp\",\n        \"WindowsTime.cpp\",\n    ],\n    headers = [\n        \"FSDetect.h\",\n        \"FileDescriptor.h\",\n        \"FileInformation.h\",\n        \"Pipe.h\",\n        \"WindowsTime.h\",\n    ],\n    deps = [\n        \"//eden/common/utils:fsdetect\",\n        \"//folly:exception\",\n        \"//folly:file_util\",\n        \"//folly:string\",\n        \"//folly/portability:event\",\n        \"//watchman/portability:winerror\",\n    ],\n    exported_deps = [\n        \"fbcode//eden/common/utils:file_utils\",\n        \"fbcode//folly:range\",\n        \"fbcode//folly/portability:sys_time\",\n        \"fbcode//watchman:prelude\",\n        \"fbcode//watchman:result\",\n        \"fbcode//watchman:string\",\n    ],\n    exported_external_deps = [\n        (\"glibc\", None, \"rt\"),\n    ],\n)\n\ncpp_library(\n    name = \"fs\",\n    srcs = [\n        \"FileSystem.cpp\",\n        \"UnixDirHandle.cpp\",\n        \"WinDirHandle.cpp\",\n    ],\n    headers = [\n        \"DirHandle.h\",\n        \"FileSystem.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \"//folly:scope_guard\",\n        \"//folly:string\",\n        \"//watchman:config\",\n        \"//watchman:logging\",\n        \"//watchman:prelude\",\n        \"//watchman:stream\",\n        \"//watchman:string\",\n        \"//watchman/portability:winerror\",\n    ],\n    exported_deps = [\n        \":fd\",\n        \"//watchman:result\",\n    ],\n)\n\ncpp_library(\n    name = \"parallel_walk\",\n    srcs = [\n        \"ParallelWalk.cpp\",\n    ],\n    headers = [\n        \"ParallelWalk.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \"//folly/concurrency:unbounded_queue\",\n        \"//folly/executors:cpu_thread_pool_executor\",\n        \"//folly/system:hardware_concurrency\",\n    ],\n    exported_deps = [\n        \":fd\",\n        \":fs\",\n        \"//folly:exception_wrapper\",\n        \"//folly:fbstring\",\n    ],\n)\n\ncpp_binary(\n    name = \"pwalk\",\n    srcs = [\n        \"ParallelWalkMain.cpp\",\n    ],\n    deps = [\n        \":fs\",\n        \":parallel_walk\",\n        \"//folly/init:init\",\n    ],\n)\n"
  },
  {
    "path": "watchman/fs/DirHandle.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <memory>\n#include \"watchman/fs/FileInformation.h\"\n\nnamespace watchman {\n\nstruct DirEntry {\n  bool has_stat;\n  const char* d_name;\n  FileInformation stat;\n};\n\nclass DirHandle {\n public:\n  virtual ~DirHandle() = default;\n  virtual const DirEntry* readDir() = 0;\n#ifndef _WIN32\n  virtual int getFd() const = 0;\n#endif\n};\n\n/**\n * Returns a dir handle to path.\n * Does not follow symlinks if strict == true.\n * Throws std::system_error if the dir could not be opened.\n */\nstd::unique_ptr<DirHandle> openDir(const char* path, bool strict = true);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fs/FSDetect.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/FSDetect.h\"\n#include <folly/FileUtil.h>\n#include <folly/String.h>\n#include \"eden/common/utils/FSDetect.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/watchman_system.h\"\n\n#ifdef HAVE_SYS_VFS_H\n#include <sys/vfs.h>\n#endif\n#ifdef HAVE_SYS_STATVFS_H\n#include <sys/statvfs.h>\n#endif\n#ifdef HAVE_SYS_PARAM_H\n#include <sys/param.h>\n#endif\n#ifdef HAVE_SYS_MOUNT_H\n#include <sys/mount.h>\n#endif\n#ifdef __linux__\n#include <linux/magic.h>\n#endif\n\nusing namespace watchman;\n\nnamespace watchman {\n\nCaseSensitivity getCaseSensitivityForPath([[maybe_unused]] const char* path) {\n#ifdef __APPLE__\n  return pathconf(path, _PC_CASE_SENSITIVE) ? CaseSensitivity::CaseSensitive\n                                            : CaseSensitivity::CaseInSensitive;\n#elif defined(_WIN32)\n  return CaseSensitivity::CaseInSensitive;\n#else\n  return CaseSensitivity::CaseSensitive;\n#endif\n}\n\n} // namespace watchman\n\n// This function is used to return the fstype for a given path\n// based on the linux style /proc/mounts data provided.\n// It will return nullptr for paths that don't have a match.\nstd::optional<w_string> find_fstype_in_linux_proc_mounts(\n    std::string_view path,\n    std::string_view procMountsData) {\n  std::vector<std::string_view> lines;\n  std::string_view bestMountPoint, bestVfsType;\n\n  folly::split('\\n', procMountsData, lines);\n  for (auto& line : lines) {\n    std::string_view device, mountPoint, vfstype, opts, freq, passno;\n    if (folly::split(\n            ' ', line, device, mountPoint, vfstype, opts, freq, passno)) {\n      // Look for the mountPoint that matches the longest prefix of path\n      // we intentially bias towards the last matching path\n      if (mountPoint.size() >= bestMountPoint.size() &&\n          folly::StringPiece{path}.startsWith(mountPoint)) {\n        if (\n            // mount point matches path exactly\n            path.size() == mountPoint.size() ||\n            // prefix ends with a slash\n            folly::StringPiece{mountPoint}.endsWith('/') ||\n            // the byte after the mount point prefix is a slash and thus is\n            // not an ambiguous prefix match\n            (path.size() > mountPoint.size() &&\n             path[mountPoint.size()] == '/')) {\n          // This is a better match than any prior mount point\n          bestMountPoint = mountPoint;\n\n          if (vfstype == \"fuse\" || vfstype == \"fuse.edenfs\") {\n            // For example: edenfs registers with fstype \"fuse\" or \"fuse.edenfs\"\n            // and device \"edenfs\", so we take the device node\n            // as the filesystem type\n            bestVfsType = device;\n          } else if (vfstype == \"nfs\") {\n            // similar to fuse edenfs will register itself under the\n            // device name. In general, we don't want watchman to be used\n            // over nfs, so in all cases except eden we still use \"nfs\"\n            // as the type.\n            if (facebook::eden::is_edenfs_fs_type(device)) {\n              bestVfsType = device;\n            } else {\n              bestVfsType = vfstype;\n            }\n          } else {\n            // Most other fuse filesystems use libfuse which registers\n            // with fstype names like \"fuse.something\", or we're working\n            // with non-fuse filesystems and have a more meaningful\n            // fstype reported anyway\n            bestVfsType = vfstype;\n          }\n        }\n      }\n    }\n  }\n\n  if (bestVfsType.empty()) {\n    return std::nullopt;\n  }\n  return w_string(bestVfsType.data(), bestVfsType.size());\n}\n\nw_string w_fstype_detect_macos_nfs(w_string fstype, w_string edenfs_indicator) {\n  if (fstype == \"nfs\" &&\n      facebook::eden::is_edenfs_fs_type(edenfs_indicator.string())) {\n    return edenfs_indicator;\n  }\n  return fstype;\n}\n\n// The primary purpose of checking the filesystem type is to prevent\n// watching filesystems that are known to be problematic, such as\n// network or remote mounted filesystems.  As such, we don't strictly\n// need to have a fully comprehensive mapping of the underlying filesystem\n// type codes to names, just the known problematic types\n\nw_string w_fstype([[maybe_unused]] const char* path) {\n#ifdef __linux__\n  // If possible, we prefer to read the filesystem type names from\n  // `/proc/self/mounts`\n  std::string mounts;\n  if (folly::readFile(\"/proc/self/mounts\", mounts)) {\n    auto fstype = find_fstype_in_linux_proc_mounts(path, mounts);\n    if (fstype) {\n      return *fstype;\n    }\n  }\n\n  // Reading the mount table can fail for the simple reason that `/proc` isn't\n  // mounted, so fall back to some slightly manual code that looks at known\n  // filesystem type ids.\n\n  struct statfs sfs;\n  const char* name = \"unknown\";\n\n  // Unfortunately the FUSE magic number is not defined in linux/magic.h,\n  // and is only available in the Linux source code in fs/fuse/inode.c\n  constexpr __fsword_t FUSE_MAGIC_NUMBER = 0x65735546;\n\n  if (statfs(path, &sfs) == 0) {\n    switch (sfs.f_type) {\n#ifdef CIFS_MAGIC_NUMBER\n      case CIFS_MAGIC_NUMBER:\n        name = \"cifs\";\n        break;\n#endif\n#ifdef NFS_SUPER_MAGIC\n      case NFS_SUPER_MAGIC:\n        name = \"nfs\";\n        break;\n#endif\n#ifdef SMB_SUPER_MAGIC\n      case SMB_SUPER_MAGIC:\n        name = \"smb\";\n        break;\n#endif\n      case FUSE_MAGIC_NUMBER:\n        name = \"fuse\";\n        break;\n      default:\n        name = \"unknown\";\n    }\n  }\n\n  return w_string(name, W_STRING_UNICODE);\n#elif STATVFS_HAS_FSTYPE_AS_STRING\n  // if this is going to be used on macos this needs\n  // to detect edenfs with w_fstype_detect_macos_nfs\n  struct statvfs sfs;\n\n  if (statvfs(path, &sfs) == 0) {\n#ifdef HAVE_STRUCT_STATVFS_F_FSTYPENAME\n    return w_string(sfs.f_fstypename, W_STRING_UNICODE);\n#endif\n#ifdef HAVE_STRUCT_STATVFS_F_BASETYPE\n    return w_string(sfs.f_basetype, W_STRING_UNICODE);\n#endif\n  }\n#elif HAVE_STATFS\n  struct statfs sfs;\n\n  if (statfs(path, &sfs) == 0) {\n    auto fstype = w_string(sfs.f_fstypename, W_STRING_UNICODE);\n    auto edenfs_indicator = w_string(sfs.f_mntfromname, W_STRING_UNICODE);\n    return w_fstype_detect_macos_nfs(fstype, edenfs_indicator);\n  }\n#endif\n#ifdef _WIN32\n  auto wpath = w_string_piece(path).asWideUNC();\n  WCHAR fstype[MAX_PATH + 1];\n  FileDescriptor h(\n      intptr_t(CreateFileW(\n          wpath.c_str(),\n          GENERIC_READ,\n          FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,\n          nullptr,\n          OPEN_EXISTING,\n          FILE_FLAG_BACKUP_SEMANTICS,\n          nullptr)),\n      FileDescriptor::FDType::Generic);\n  if (h &&\n      GetVolumeInformationByHandleW(\n          (HANDLE)h.handle(), nullptr, 0, 0, 0, 0, fstype, MAX_PATH + 1)) {\n    return w_string(fstype, wcslen(fstype));\n  }\n  return w_string(\"unknown\", W_STRING_UNICODE);\n#else\n  return w_string(\"unknown\", W_STRING_UNICODE);\n#endif\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/fs/FSDetect.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/Range.h>\n#include <optional>\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\n/** Returns CaseSensitive or CaseInSensitive depending on the\n * case sensitivity of the input path. */\nCaseSensitivity getCaseSensitivityForPath(const char* path);\n\n} // namespace watchman\n\n// Returns the name of the filesystem for the specified path\nw_string w_fstype(const char* path);\nstd::optional<w_string> find_fstype_in_linux_proc_mounts(\n    std::string_view path,\n    std::string_view procMountsData);\n"
  },
  {
    "path": "watchman/fs/FileDescriptor.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/FileDescriptor.h\"\n#include <folly/String.h>\n#include <system_error>\n#include \"watchman/fs/FSDetect.h\"\n#include \"watchman/fs/FileInformation.h\"\n#include \"watchman/fs/WindowsTime.h\"\n#include \"watchman/watchman_string.h\"\n\n#ifdef __APPLE__\n#include <sys/attr.h> // @manual\n#include <sys/utsname.h> // @manual\n#include <sys/vnode.h> // @manual\n#endif\n\n#ifdef _WIN32\n#include <winioctl.h> // @manual\n#include <winsock2.h> // @manual\n#endif\n\nnamespace watchman {\n\nFileDescriptor::~FileDescriptor() {\n  close();\n}\n\nFileDescriptor::system_handle_type FileDescriptor::normalizeHandleValue(\n    system_handle_type h) {\n#ifdef _WIN32\n  // Windows uses both 0 and INVALID_HANDLE_VALUE as invalid handle values.\n  if (h == intptr_t(INVALID_HANDLE_VALUE) || h == 0) {\n    return FileDescriptor::kInvalid;\n  }\n#else\n  // Posix defines -1 to be an invalid value, but we'll also recognize and\n  // normalize any negative descriptor value.\n  if (h < 0) {\n    return FileDescriptor::kInvalid;\n  }\n#endif\n  return h;\n}\n\nFileDescriptor::FileDescriptor(\n    FileDescriptor::system_handle_type fd,\n    FDType fdType)\n    : fd_(normalizeHandleValue(fd)), fdType_(resolveFDType(fd, fdType)) {}\n\nFileDescriptor::FileDescriptor(\n    FileDescriptor::system_handle_type fd,\n    const char* operation,\n    FDType fdType)\n    : fd_(normalizeHandleValue(fd)), fdType_(resolveFDType(fd, fdType)) {\n  if (fd_ == kInvalid) {\n    throw std::system_error(\n        errno,\n        std::generic_category(),\n        std::string(operation) + \": \" + folly::errnoStr(errno));\n  }\n}\n\nFileDescriptor::FileDescriptor(FileDescriptor&& other) noexcept\n    : fd_(other.release()), fdType_(other.fdType_) {}\n\nFileDescriptor& FileDescriptor::operator=(FileDescriptor&& other) noexcept {\n  close();\n  fd_ = other.fd_;\n  fdType_ = other.fdType_;\n  other.fd_ = kInvalid;\n  return *this;\n}\n\nvoid FileDescriptor::close() {\n  if (fd_ != kInvalid) {\n#ifndef _WIN32\n    ::close(fd_);\n#else\n    if (fdType_ == FDType::Socket) {\n      ::closesocket(fd_);\n    } else {\n      CloseHandle((HANDLE)fd_);\n    }\n#endif\n    fd_ = kInvalid;\n  }\n}\n\nFileDescriptor::system_handle_type FileDescriptor::release() {\n  system_handle_type result = fd_;\n  fd_ = kInvalid;\n  return result;\n}\n\nFileDescriptor::FDType FileDescriptor::resolveFDType(\n    FileDescriptor::system_handle_type fd,\n    FDType fdType) {\n  if (normalizeHandleValue(fd) == kInvalid) {\n    return FDType::Unknown;\n  }\n\n  if (fdType != FDType::Unknown) {\n    return fdType;\n  }\n\n#ifdef _WIN32\n  if (GetFileType((HANDLE)fd) == FILE_TYPE_PIPE) {\n    // It may be a pipe or a socket.\n    // We can decide by asking for the underlying pipe\n    // information; anonymous pipes are implemented on\n    // top of named pipes so it is fine to use this function:\n    DWORD flags = 0;\n    DWORD out = 0;\n    DWORD in = 0;\n    DWORD inst = 0;\n    if (GetNamedPipeInfo((HANDLE)fd, &flags, &out, &in, &inst) != 0) {\n      return FDType::Pipe;\n    }\n\n    // We believe it to be a socket managed by winsock because it wasn't\n    // a pipe.  However, when using pipes between WSL and native win32\n    // we get here and the handle isn't recognized by winsock either.\n    // Let's ask it for the error associated with the handle; if winsock\n    // disavows it then we know it isn't a pipe or a socket, but we don't\n    // know precisely what it is.\n    int err = 0;\n    int errsize = sizeof(err);\n    if (::getsockopt(\n            fd,\n            SOL_SOCKET,\n            SO_ERROR,\n            reinterpret_cast<char*>(&err),\n            &errsize) &&\n        WSAGetLastError() == WSAENOTSOCK) {\n      return FDType::Generic;\n    }\n\n    return FDType::Socket;\n  }\n#endif\n  return FDType::Generic;\n}\n\nvoid FileDescriptor::setCloExec() {\n#ifndef _WIN32\n  ignore_result(fcntl(fd_, F_SETFD, FD_CLOEXEC));\n#endif\n}\n\nvoid FileDescriptor::setNonBlock() {\n#ifndef _WIN32\n  ignore_result(fcntl(fd_, F_SETFL, fcntl(fd_, F_GETFL) | O_NONBLOCK));\n#else\n  if (fdType_ == FDType::Socket) {\n    u_long mode = 1;\n    ignore_result(::ioctlsocket(fd_, FIONBIO, &mode));\n  }\n#endif\n}\n\nvoid FileDescriptor::clearNonBlock() {\n#ifndef _WIN32\n  ignore_result(fcntl(fd_, F_SETFL, fcntl(fd_, F_GETFL) & ~O_NONBLOCK));\n#else\n  if (fdType_ == FDType::Socket) {\n    u_long mode = 0;\n    ignore_result(::ioctlsocket(fd_, FIONBIO, &mode));\n  }\n#endif\n}\n\nFileInformation FileDescriptor::getInfo() const {\n#ifndef _WIN32\n  struct stat st;\n  if (fstat(fd_, &st)) {\n    int err = errno;\n    throw std::system_error(err, std::generic_category(), \"fstat\");\n  }\n  return FileInformation(st);\n#else // _WIN32\n  FILE_BASIC_INFO binfo;\n  FILE_STANDARD_INFO sinfo;\n\n  if (!GetFileInformationByHandleEx(\n          (HANDLE)handle(), FileBasicInfo, &binfo, sizeof(binfo))) {\n    throw std::system_error(\n        GetLastError(),\n        std::system_category(),\n        \"GetFileInformationByHandleEx FileBasicInfo\");\n  }\n\n  FileInformation info(binfo.FileAttributes);\n\n  FILETIME_LARGE_INTEGER_to_timespec(binfo.CreationTime, &info.ctime);\n  FILETIME_LARGE_INTEGER_to_timespec(binfo.LastAccessTime, &info.atime);\n  FILETIME_LARGE_INTEGER_to_timespec(binfo.LastWriteTime, &info.mtime);\n\n  if (!GetFileInformationByHandleEx(\n          (HANDLE)handle(), FileStandardInfo, &sinfo, sizeof(sinfo))) {\n    throw std::system_error(\n        GetLastError(),\n        std::system_category(),\n        \"GetFileInformationByHandleEx FileStandardInfo\");\n  }\n\n  info.size = sinfo.EndOfFile.QuadPart;\n  info.nlink = sinfo.NumberOfLinks;\n\n  return info;\n#endif\n}\n\nw_string FileDescriptor::getOpenedPath() const {\n#if defined(F_GETPATH)\n  // macOS.  The kernel interface only allows MAXPATHLEN\n  char buf[MAXPATHLEN + 1];\n  if (fcntl(fd_, F_GETPATH, buf) == -1) {\n    throw std::system_error(\n        errno, std::generic_category(), \"fcntl for getOpenedPath\");\n  }\n  return w_string(buf);\n#elif defined(__linux__) || defined(__sun)\n  char procpath[1024];\n#if defined(__linux__)\n  snprintf(procpath, sizeof(procpath), \"/proc/self/fd/%d\", fd_);\n#elif defined(__sun)\n  snprintf(procpath, sizeof(procpath), \"/proc/self/path/%d\", fd_);\n#endif\n\n  // Avoid an extra stat by speculatively attempting to read into\n  // a reasonably sized buffer.\n  char buf[WATCHMAN_NAME_MAX];\n  auto len = readlink(procpath, buf, sizeof(buf));\n  if (len == sizeof(buf)) {\n    len = -1;\n    // We need to stat it to discover the required length\n    errno = ENAMETOOLONG;\n  }\n\n  if (len >= 0) {\n    return w_string(buf, len);\n  }\n\n  if (errno == ENOENT) {\n    // For this path to not exist must mean that /proc is not mounted.\n    // Report this with an actionable message\n    throw std::system_error(\n        ENOSYS,\n        std::generic_category(),\n        \"getOpenedPath: need /proc to be mounted!\");\n  }\n\n  if (errno != ENAMETOOLONG) {\n    throw std::system_error(\n        errno, std::generic_category(), \"readlink for getOpenedPath\");\n  }\n\n  // Figure out how much space we need\n  struct stat st;\n  if (fstat(fd_, &st)) {\n    throw std::system_error(\n        errno, std::generic_category(), \"fstat for getOpenedPath\");\n  }\n  std::string result;\n  result.resize(st.st_size + 1, 0);\n\n  len = readlink(procpath, &result[0], result.size());\n  if (len == int(result.size())) {\n    // It's longer than we expected; TOCTOU detected!\n    throw std::system_error(\n        ENAMETOOLONG,\n        std::generic_category(),\n        \"readlinkat: link contents grew while examining file\");\n  }\n  if (len >= 0) {\n    return w_string(&result[0], len);\n  }\n\n  throw std::system_error(\n      errno, std::generic_category(), \"readlink for getOpenedPath\");\n#elif defined(_WIN32)\n  std::wstring wchar;\n  wchar.resize(WATCHMAN_NAME_MAX);\n  auto len = GetFinalPathNameByHandleW(\n      (HANDLE)fd_,\n      &wchar[0],\n      wchar.size(),\n      FILE_NAME_NORMALIZED | VOLUME_NAME_DOS);\n  auto err = GetLastError();\n\n  if (len >= wchar.size()) {\n    // Grow it\n    wchar.resize(len);\n    len = GetFinalPathNameByHandleW(\n        (HANDLE)fd_, &wchar[0], len, FILE_NAME_NORMALIZED | VOLUME_NAME_DOS);\n    err = GetLastError();\n  }\n\n  if (len == 0) {\n    throw std::system_error(\n        GetLastError(), std::system_category(), \"GetFinalPathNameByHandleW\");\n  }\n\n  return w_string(wchar.data(), len);\n#else\n  throw std::system_error(\n      ENOSYS,\n      std::generic_category(),\n      \"getOpenedPath not implemented on this platform\");\n#endif\n}\n\nw_string FileDescriptor::readSymbolicLink() const {\n#ifndef _WIN32\n  struct stat st;\n  if (fstat(fd_, &st)) {\n    throw std::system_error(\n        errno, std::generic_category(), \"fstat for readSymbolicLink\");\n  }\n  std::string result;\n  result.resize(st.st_size + 1, 0);\n\n#ifdef __linux__\n  // Linux 2.6.39 and later provide this interface\n  auto atlen = readlinkat(fd_, \"\", &result[0], result.size());\n  if (atlen == int(result.size())) {\n    // It's longer than we expected; TOCTOU detected!\n    throw std::system_error(\n        ENAMETOOLONG,\n        std::generic_category(),\n        \"readlinkat: link contents grew while examining file\");\n  }\n  if (atlen >= 0) {\n    return w_string(result.data(), atlen);\n  }\n  // if we get ENOTDIR back then we're probably on an older linux and\n  // should fall back to the technique used below.\n  if (errno != ENOTDIR) {\n    throw std::system_error(\n        errno, std::generic_category(), \"readlinkat for readSymbolicLink\");\n  }\n#endif\n\n  auto myName = getOpenedPath();\n  auto len = readlink(myName.c_str(), &result[0], result.size());\n  if (len == int(result.size())) {\n    // It's longer than we expected; TOCTOU detected!\n    throw std::system_error(\n        ENAMETOOLONG,\n        std::generic_category(),\n        \"readlink: link contents grew while examining file\");\n  }\n  if (len >= 0) {\n    return w_string(result.data(), len);\n  }\n\n  throw std::system_error(\n      errno, std::generic_category(), \"readlink for readSymbolicLink\");\n#else // _WIN32\n  auto rep = facebook::eden::getReparseData((HANDLE)fd_).value();\n  WCHAR* target;\n  USHORT targetlen;\n  switch (rep->ReparseTag) {\n    case IO_REPARSE_TAG_SYMLINK:\n      target = rep->SymbolicLinkReparseBuffer.PathBuffer +\n          (rep->SymbolicLinkReparseBuffer.SubstituteNameOffset / sizeof(WCHAR));\n      targetlen =\n          rep->SymbolicLinkReparseBuffer.SubstituteNameLength / sizeof(WCHAR);\n      break;\n\n    case IO_REPARSE_TAG_MOUNT_POINT:\n      target = rep->MountPointReparseBuffer.PathBuffer +\n          (rep->MountPointReparseBuffer.SubstituteNameOffset / sizeof(WCHAR));\n      targetlen =\n          rep->MountPointReparseBuffer.SubstituteNameLength / sizeof(WCHAR);\n      break;\n    default:\n      throw std::system_error(\n          ENOSYS, std::generic_category(), \"Unsupported ReparseTag\");\n  }\n\n  return w_string(target, targetlen);\n#endif\n}\n\nbool FileDescriptor::isatty() const {\n#ifdef _WIN32\n  return GetFileType(reinterpret_cast<HANDLE>(fd_)) == FILE_TYPE_CHAR;\n#else\n  return ::isatty(fd_);\n#endif\n}\n\nResult<int, std::error_code> FileDescriptor::read(void* buf, int size) const {\n#ifndef _WIN32\n  auto result = ::read(fd_, buf, size);\n  if (result == -1) {\n    int errcode = errno;\n    return Result<int, std::error_code>(\n        std::error_code(errcode, std::generic_category()));\n  }\n  return Result<int, std::error_code>(result);\n#else\n  if (fdType_ == FDType::Socket) {\n    auto result = ::recv(fd_, static_cast<char*>(buf), size, 0);\n    if (result == -1) {\n      int errcode = WSAGetLastError();\n      return Result<int, std::error_code>(\n          std::error_code(errcode, std::system_category()));\n    }\n    return Result<int, std::error_code>(result);\n  }\n\n  DWORD result = 0;\n  if (!ReadFile((HANDLE)fd_, buf, size, &result, nullptr)) {\n    auto err = GetLastError();\n    if (err == ERROR_BROKEN_PIPE) {\n      // Translate broken pipe on read to EOF\n      result = 0;\n    } else {\n      return Result<int, std::error_code>(\n          std::error_code(err, std::system_category()));\n    }\n  }\n  return Result<int, std::error_code>(result);\n#endif\n}\n\nResult<int, std::error_code> FileDescriptor::write(const void* buf, int size)\n    const {\n#ifndef _WIN32\n  auto result = ::write(fd_, buf, size);\n  if (result == -1) {\n    int errcode = errno;\n    return Result<int, std::error_code>(\n        std::error_code(errcode, std::generic_category()));\n  }\n  return Result<int, std::error_code>(result);\n#else\n  if (fdType_ == FDType::Socket) {\n    auto result = ::send(fd_, static_cast<const char*>(buf), size, 0);\n    if (result == -1) {\n      int errcode = WSAGetLastError();\n      return Result<int, std::error_code>(\n          std::error_code(errcode, std::system_category()));\n    }\n    return Result<int, std::error_code>(result);\n  }\n  DWORD result = 0;\n  if (!WriteFile((HANDLE)fd_, buf, size, &result, nullptr)) {\n    return Result<int, std::error_code>(\n        std::error_code(GetLastError(), std::system_category()));\n  }\n  return Result<int, std::error_code>(result);\n#endif\n}\n\nconst FileDescriptor& FileDescriptor::stdIn() {\n  static FileDescriptor f(\n#ifdef _WIN32\n      intptr_t(GetStdHandle(STD_INPUT_HANDLE))\n#else\n      STDIN_FILENO\n#endif\n          ,\n      FileDescriptor::FDType::Unknown);\n  return f;\n}\n\nconst FileDescriptor& FileDescriptor::stdOut() {\n  static FileDescriptor f(\n#ifdef _WIN32\n      intptr_t(GetStdHandle(STD_OUTPUT_HANDLE))\n#else\n      STDOUT_FILENO\n#endif\n          ,\n      FileDescriptor::FDType::Unknown);\n  return f;\n}\n\nconst FileDescriptor& FileDescriptor::stdErr() {\n  static FileDescriptor f(\n#ifdef _WIN32\n      intptr_t(GetStdHandle(STD_ERROR_HANDLE))\n#else\n      STDERR_FILENO\n#endif\n          ,\n      FileDescriptor::FDType::Unknown);\n  return f;\n}\n\n#ifdef _WIN32\n\nULONG FileDescriptor::getReparseTag() const {\n  return facebook::eden::getReparseData((HANDLE)fd_).value()->ReparseTag;\n}\n#endif\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fs/FileDescriptor.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <system_error>\n#include \"eden/common/utils/FileUtils.h\"\n#include \"watchman/Result.h\"\n#include \"watchman/watchman_system.h\"\n\nclass w_string;\n\nnamespace watchman {\n\nstruct FileInformation;\nstruct REPARSE_DATA_BUFFER;\n\nenum class CaseSensitivity {\n  // The caller knows that the filesystem path(s) in question are\n  // case insensitive.\n  CaseInSensitive,\n  // The caller knows that the filesystem path(s) in question are\n  // case sensitive.\n  CaseSensitive,\n  // The caller does not know if the path(s) are case sensitive\n  Unknown,\n};\n\n/** Windows doesn't have equivalent bits for all of the various\n * open(2) flags, so we abstract it out here */\nstruct OpenFileHandleOptions {\n  unsigned followSymlinks : 1; // O_NOFOLLOW\n  unsigned closeOnExec : 1; // O_CLOEXEC\n  unsigned metaDataOnly : 1; // avoid accessing file contents\n  unsigned readContents : 1; // the read portion of O_RDONLY or O_RDWR\n  unsigned writeContents : 1; // the write portion of O_WRONLY or O_RDWR\n  unsigned create : 1; // O_CREAT\n  unsigned exclusiveCreate : 1; // O_EXCL\n  unsigned truncate : 1; // O_TRUNC\n  unsigned strictNameChecks : 1;\n  CaseSensitivity caseSensitive;\n\n  OpenFileHandleOptions()\n      : followSymlinks(0),\n        closeOnExec(1),\n        metaDataOnly(0),\n        readContents(0),\n        writeContents(0),\n        create(0),\n        exclusiveCreate(0),\n        truncate(0),\n        strictNameChecks(1),\n        caseSensitive(CaseSensitivity::Unknown) {}\n\n  static inline OpenFileHandleOptions queryFileInfo() {\n    OpenFileHandleOptions opts;\n    opts.metaDataOnly = 1;\n    return opts;\n  }\n\n  static inline OpenFileHandleOptions openDir() {\n    OpenFileHandleOptions opts;\n    opts.readContents = 1;\n    opts.strictNameChecks = false;\n    opts.followSymlinks = 1;\n    return opts;\n  }\n\n  static inline OpenFileHandleOptions strictOpenDir() {\n    OpenFileHandleOptions opts;\n    opts.readContents = 1;\n    opts.strictNameChecks = true;\n    opts.followSymlinks = 0;\n    return opts;\n  }\n};\n\n// Manages the lifetime of a system independent file descriptor.\n// On POSIX systems this is a posix file descriptor.\n// On Win32 systems this is a Win32 HANDLE object.\n// It will close() the descriptor when it is destroyed.\nclass FileDescriptor {\n public:\n  using system_handle_type =\n#ifdef _WIN32\n      // We track the HANDLE value as intptr_t to avoid needing\n      // to pull in the windows header files all over the place;\n      // this is consistent with the _get_osfhandle function in\n      // the msvcrt library.\n      intptr_t\n#else\n      int\n#endif\n      ;\n\n  enum class FDType {\n    Unknown,\n    Generic,\n    Pipe,\n    Socket,\n  };\n\n  // A value representing the canonical invalid handle\n  // value for the system.\n  static constexpr system_handle_type kInvalid = -1;\n\n  // Normalizes invalid handle values to our canonical invalid handle value.\n  // Otherwise, just returns the handle as-is.\n  static system_handle_type normalizeHandleValue(system_handle_type h);\n\n  // If the FDType is Unknown, probe it to determine its type\n  static FDType resolveFDType(system_handle_type h, FDType fdType);\n\n  ~FileDescriptor();\n\n  // Default construct to an empty instance\n  FileDescriptor() = default;\n\n  // Construct a file descriptor object from an fd.\n  // Will happily accept an invalid handle value without\n  // raising an error; the FileDescriptor will simply evaluate as\n  // false in a boolean context.\n  explicit FileDescriptor(system_handle_type fd, FDType fdType);\n\n  // Construct a file descriptor object from an fd.\n  // If fd is invalid will throw a generic error with a message\n  // constructed from the provided operation name and the current\n  // errno value.\n  FileDescriptor(system_handle_type fd, const char* operation, FDType fdType);\n\n  // No copying\n  FileDescriptor(const FileDescriptor&) = delete;\n  FileDescriptor& operator=(const FileDescriptor&) = delete;\n\n  FileDescriptor(FileDescriptor&& other) noexcept;\n  FileDescriptor& operator=(FileDescriptor&& other) noexcept;\n\n  // Closes the associated descriptor\n  void close();\n\n  // Stops tracking the descriptor, returning it to the caller.\n  // The caller is then responsible for closing it.\n  system_handle_type release();\n\n  // In a boolean context, returns true if this object owns\n  // a valid descriptor.\n  explicit operator bool() const {\n    return fd_ != kInvalid;\n  }\n\n  // Returns the underlying descriptor value\n  inline system_handle_type system_handle() const {\n    return fd_;\n  }\n\n#ifndef _WIN32\n  // Returns the descriptor value as a file descriptor.\n  // This method is only present on posix systems to aid in\n  // detecting non-portable use at compile time.\n  inline int fd() const {\n    return fd_;\n  }\n#else\n  // Returns the descriptor value as a file handle.\n  // This method is only present on win32 systems to aid in\n  // detecting non-portable use at compile time.\n  inline intptr_t handle() const {\n    return fd_;\n  }\n#endif\n\n  inline FDType fdType() const {\n    return fdType_;\n  }\n\n  // Set the close-on-exec bit\n  void setCloExec();\n\n  // Enable non-blocking IO\n  void setNonBlock();\n\n  // Disable non-blocking IO\n  void clearNonBlock();\n\n  /** equivalent to fstat(2) */\n  FileInformation getInfo() const;\n\n  /** Returns the filename associated with the file handle */\n  w_string getOpenedPath() const;\n\n  /** Returns the symbolic link target */\n  w_string readSymbolicLink() const;\n\n  /**\n   * Returns true if this FileDescriptor is connected to a tty device.\n   * Calls isatty() on unix and GetFileType on Windows.\n   */\n  bool isatty() const;\n\n  /** read(2), but yielding a Result for system independent error reporting */\n  Result<int, std::error_code> read(void* buf, int size) const;\n\n  /** write(2), but yielding a Result for system independent error reporting */\n  Result<int, std::error_code> write(const void* buf, int size) const;\n\n  // Return a global handle to one of the standard IO stream descriptors\n  static const FileDescriptor& stdIn();\n  static const FileDescriptor& stdOut();\n  static const FileDescriptor& stdErr();\n\n#ifdef _WIN32\n  ULONG getReparseTag() const;\n#endif\n\n private:\n  system_handle_type fd_{kInvalid};\n  FDType fdType_{FDType::Unknown};\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fs/FileInformation.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/FileInformation.h\"\n#include \"watchman/portability/WinError.h\"\n#include \"watchman/watchman_string.h\"\n#include \"watchman/watchman_time.h\"\n\nnamespace watchman {\n\n#ifndef _WIN32\nFileInformation::FileInformation(const struct stat& st)\n    : mode(st.st_mode),\n      size(static_cast<uint64_t>(st.st_size)),\n      uid(st.st_uid),\n      gid(st.st_gid),\n      ino(st.st_ino),\n      dev(st.st_dev),\n      nlink(st.st_nlink) {\n  memcpy(&atime, &st.WATCHMAN_ST_TIMESPEC(a), sizeof(atime));\n  memcpy(&mtime, &st.WATCHMAN_ST_TIMESPEC(m), sizeof(mtime));\n  memcpy(&ctime, &st.WATCHMAN_ST_TIMESPEC(c), sizeof(ctime));\n}\n#endif\n\n#ifdef _WIN32\nFileInformation::FileInformation(uint32_t dwFileAttributes)\n    : fileAttributes(dwFileAttributes) {\n  if (fileAttributes & FILE_ATTRIBUTE_READONLY) {\n    mode = 0444;\n  } else {\n    mode = 0666;\n  }\n  if (fileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) {\n    // Report it as a symlink. This is used by source control\n    // to detect symlinks.\n    mode |= S_IFLNK;\n  } else if (fileAttributes & FILE_ATTRIBUTE_DIRECTORY) {\n    mode |= _S_IFDIR | 0111 /* executable/searchable */;\n  } else {\n    mode |= _S_IFREG;\n  }\n}\n#endif\n\nDType FileInformation::dtype() const {\n#ifdef DTTOIF\n  return static_cast<DType>(IFTODT(mode));\n#else\n  // Windows, Solaris\n  if (isSymlink()) {\n    return DType::Symlink;\n  }\n  if (isDir()) {\n    return DType::Dir;\n  }\n  if (isFile()) {\n    return DType::Regular;\n  }\n  return DType::Unknown;\n#endif\n}\n\nbool FileInformation::isSymlink() const {\n#ifdef _WIN32\n  // We treat all reparse points as equivalent to symlinks\n  return fileAttributes & FILE_ATTRIBUTE_REPARSE_POINT;\n#else\n  return S_ISLNK(mode);\n#endif\n}\n\nbool FileInformation::isDir() const {\n#ifdef _WIN32\n  // Note that junctions have both DIRECTORY and REPARSE_POINT set,\n  // so we have to check both bits to make sure that we only report\n  // this as a dir if it isn't a junction, otherwise we will fail to\n  // opendir.\n  return (fileAttributes &\n          (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT)) ==\n      FILE_ATTRIBUTE_DIRECTORY;\n#else\n  return S_ISDIR(mode);\n#endif\n}\n\nbool FileInformation::isFile() const {\n#ifdef _WIN32\n  // We can't simply test for FILE_ATTRIBUTE_NORMAL as that is only\n  // valid when no other bits are set.  Instead we check for the absence\n  // of DIRECTORY and REPARSE_POINT to decide that it is a regular file.\n  return (fileAttributes &\n          (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT)) == 0;\n#else\n  return S_ISREG(mode);\n#endif\n}\n\nFileInformation FileInformation::makeDeletedFileInformation() {\n  FileInformation info;\n#ifndef _WIN32\n  info.mode = S_IFREG;\n#else\n  info.mode = _S_IFREG;\n#endif\n  return info;\n}\n} // namespace watchman\n\n#ifdef _WIN32\n\nbool w_path_exists(const char* path) {\n  auto wpath = w_string_piece(path).asWideUNC();\n\n  WIN32_FILE_ATTRIBUTE_DATA data;\n  if (!GetFileAttributesExW(wpath.c_str(), GetFileExInfoStandard, &data)) {\n    DWORD err = GetLastError();\n    errno = map_win32_err(err);\n    return false;\n  }\n  return true;\n}\n\n#endif\n"
  },
  {
    "path": "watchman/fs/FileInformation.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <sys/stat.h>\n#include \"watchman/watchman_system.h\"\n\n#ifndef _WIN32\n#include <dirent.h>\n#endif\n\nnamespace watchman {\n\n#ifdef _WIN32\nusing mode_t = int;\nusing dev_t = int;\nusing gid_t = int;\nusing uid_t = int;\nusing ino_t = unsigned int;\nusing nlink_t = unsigned int;\n\n/**\n * Convertion between st_mode and d_type on Windows. On Windows the 4th nibble\n * of mode contains the type of directory entry. Right shifting by 12 bits to\n * form a d_type.\n */\nstatic_assert(S_IFMT == 0xF000, \"The S_IFMT on Windows should be 0xF000\");\n\n#define DT_UNKNOWN 0\n#define DT_FIFO ((_S_IFIFO) >> 12)\n#define DT_CHR ((_S_IFCHR) >> 12)\n#define DT_DIR ((_S_IFDIR) >> 12)\n#define DT_REG ((_S_IFREG) >> 12)\n#define S_IFLNK 0xA000\n\n#endif\n\n/** Represents the type of a filesystem entry.\n *\n * This is the same type and intent as the d_type field of a dirent struct.\n *\n * We provide an explicit type to make it clearer when we're working\n * with this value.\n *\n * https://www.daemon-systems.org/man/DTTOIF.3.html\n *\n * Not all systems have a dtype concept so we have some conditional\n * code here to compensate.\n */\nenum class DType {\n  Unknown = DT_UNKNOWN,\n  Fifo = DT_FIFO,\n  Char = DT_CHR,\n  Dir = DT_DIR,\n  Regular = DT_REG,\n\n#ifdef DT_BLK\n  Block = DT_BLK,\n#else\n  Block,\n#endif\n\n#ifdef DT_LNK\n  Symlink = DT_LNK,\n#else\n  Symlink,\n#endif\n\n#ifdef DT_SOCK\n  Socket = DT_SOCK,\n#else\n  Socket,\n#endif\n\n#ifdef DT_WHT\n  Whiteout = DT_WHT,\n#else\n  Whiteout,\n#endif\n};\n\nstruct FileInformation {\n  // On POSIX systems, the complete mode information.\n  // On Windows, this is lossy wrt. symlink information,\n  // so it is preferable to use isSymlink() rather than\n  // S_ISLNK() on the mode value.\n  mode_t mode{0};\n  uint64_t size{0};\n\n  // On Windows systems, these fields are approximated\n  // from cheaply available information in a way that is\n  // consistent with msvcrt which is widely used by many\n  // native win32 applications (including python).\n  uid_t uid{0};\n  gid_t gid{0};\n  ino_t ino{0};\n  dev_t dev{0};\n  nlink_t nlink{0};\n\n#ifdef _WIN32\n  uint32_t fileAttributes{0};\n#endif\n\n  struct timespec atime{0, 0};\n  struct timespec mtime{0, 0};\n  struct timespec ctime{0, 0};\n\n  // Returns the directory entry type for the file.\n  DType dtype() const;\n\n  // Returns true if this file information references\n  // a symlink, false otherwise.\n  bool isSymlink() const;\n\n  // Returns true if this file information references\n  // a directory, false otherwise.\n  bool isDir() const;\n\n  // Returns true if this file information references\n  // a regular file, false otherwise.\n  bool isFile() const;\n\n#ifndef _WIN32\n  explicit FileInformation(const struct stat& st);\n#else\n  // Partially initialize the common fields.\n  // There are a number of different forms of windows specific data\n  // types that hold the rest of the information and we don't want\n  // to pollute the headers with them, so those are populated\n  // externally by the APIs declared elsewhere in this header file.\n  explicit FileInformation(uint32_t dwFileAttributes);\n#endif\n  FileInformation() = default;\n\n  // Construct a placeholder FileInformation instance that represents\n  // a file that has been deleted.  This is used in a very specific\n  // circumstance in Source Control Aware query responses to represent\n  // files that were deleted between two revisions.\n  static FileInformation makeDeletedFileInformation();\n};\n\n} // namespace watchman\n\n#ifndef _WIN32\nstatic inline bool w_path_exists(const char* path) {\n  return access(path, F_OK) == 0;\n}\n#else\nbool w_path_exists(const char* path);\n#endif\n"
  },
  {
    "path": "watchman/fs/FileSystem.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/FileSystem.h\"\n#include <fmt/core.h>\n#include <folly/String.h>\n#include <system_error>\n#include \"watchman/fs/FSDetect.h\"\n#include \"watchman/portability/WinError.h\"\n#include \"watchman/watchman_stream.h\"\n#include \"watchman/watchman_string.h\"\n\n#ifdef __APPLE__\n#include <sys/attr.h> // @manual\n#include <sys/utsname.h> // @manual\n#include <sys/vnode.h> // @manual\n#endif\n\n#if defined(_WIN32) || defined(O_PATH)\n#define CAN_OPEN_SYMLINKS 1\n#else\n#define CAN_OPEN_SYMLINKS 0\n#endif\n\nnamespace watchman {\n\nnamespace {\n\nclass RealFileSystem final : public FileSystem {\n public:\n  std::unique_ptr<DirHandle> openDir(const char* path, bool strict = true)\n      override {\n    return watchman::openDir(path, strict);\n  }\n\n  FileInformation getFileInformation(\n      const char* path,\n      CaseSensitivity caseSensitive = CaseSensitivity::Unknown) override {\n    return watchman::getFileInformation(path, caseSensitive);\n  }\n\n  /**\n   * Watchman-specific API for creating an empty file on the filesystem.\n   * On unix, the created file will have mode 0700.\n   * Throws system_error on failure.\n   */\n  void touch(const char* path) override {\n    if (!w_stm_open(path, O_CREAT | O_TRUNC | O_WRONLY | O_CLOEXEC, 0700)) {\n      int err = errno;\n      throw std::system_error{\n          err,\n          std::generic_category(),\n          fmt::format(\"failed to touch {}: {}\", path, folly::errnoStr(err))};\n    }\n  }\n};\n\nRealFileSystem gRealFileSystem;\n\n} // namespace\n\nFileSystem& realFileSystem = gRealFileSystem;\n\n#if !CAN_OPEN_SYMLINKS\n\nnamespace {\n\n/** Checks that the basename component of the input path exactly\n * matches the canonical case of the path on disk.\n * It only makes sense to call this function on a case insensitive filesystem.\n * If the case does not match, throws an exception. */\nvoid checkCanonicalBaseName(const char* path) {\n#ifdef __APPLE__\n  struct attrlist attrlist;\n  struct {\n    uint32_t len;\n    attrreference_t ref;\n    char canonical_name[WATCHMAN_NAME_MAX];\n  } vomit;\n  w_string_piece pathPiece(path);\n  auto base = pathPiece.baseName();\n\n  memset(&attrlist, 0, sizeof(attrlist));\n  attrlist.bitmapcount = ATTR_BIT_MAP_COUNT;\n  attrlist.commonattr = ATTR_CMN_NAME;\n\n  if (getattrlist(path, &attrlist, &vomit, sizeof(vomit), FSOPT_NOFOLLOW) ==\n      -1) {\n    throw std::system_error(\n        errno,\n        std::generic_category(),\n        fmt::format(\"checkCanonicalBaseName({}): getattrlist failed\", path));\n  }\n\n  w_string_piece name(((char*)&vomit.ref) + vomit.ref.attr_dataoffset);\n  if (name != base) {\n    throw std::system_error(\n        ENOENT,\n        std::generic_category(),\n        fmt::format(\n            \"checkCanonicalBaseName({}): ({}) doesn't match canonical base ({})\",\n            path,\n            name,\n            base));\n  }\n#else\n  // Older Linux and BSDish systems are in this category.\n  // This is the awful portable fallback used in the absence of\n  // a system specific way to detect this.\n  w_string_piece pathPiece(path);\n  auto parent = pathPiece.dirName().asWString();\n  auto dir = realFileSystem.openDir(parent.c_str());\n  auto base = pathPiece.baseName();\n\n  while (true) {\n    auto ent = dir->readDir();\n    if (!ent) {\n      // We didn't find an entry that exactly matched -> fail\n      throw std::system_error(\n          ENOENT,\n          std::generic_category(),\n          fmt::format(\n              \"checkCanonicalBaseName({}): no match found in parent dir\",\n              path));\n    }\n    // Note: we don't break out early if we get a case-insensitive match\n    // because the dir may contain multiple representations of the same\n    // name.  For example, Bash-for-Windows has dirs that contain both\n    // \"pod\" and \"Pod\" dirs in its perl installation.  We want to make\n    // sure that we've observed all of the entries in the dir before\n    // giving up.\n    if (w_string_piece(ent->d_name) == base) {\n      // Exact match; all is good!\n      return;\n    }\n  }\n#endif\n}\n} // namespace\n#endif\n\nFileDescriptor openFileHandle(\n    const char* path,\n    const OpenFileHandleOptions& opts) {\n#ifndef _WIN32\n  int flags = (!opts.followSymlinks ? O_NOFOLLOW : 0) |\n      (opts.closeOnExec ? O_CLOEXEC : 0) |\n#ifdef O_PATH\n      (opts.metaDataOnly ? O_PATH : 0) |\n#endif\n      ((opts.readContents && opts.writeContents)\n           ? O_RDWR\n           : (opts.writeContents      ? O_WRONLY\n                  : opts.readContents ? O_RDONLY\n                                      : 0)) |\n      (opts.create ? O_CREAT : 0) | (opts.exclusiveCreate ? O_EXCL : 0) |\n      (opts.truncate ? O_TRUNC : 0);\n\n  auto fd = open(path, flags);\n  if (fd == -1) {\n    int err = errno;\n    throw std::system_error(\n        err, std::generic_category(), fmt::format(\"open: {}\", path));\n  }\n  FileDescriptor file(fd, FileDescriptor::FDType::Unknown);\n#else // _WIN32\n  DWORD access = 0, share = 0, create = 0, attrs = 0;\n  DWORD err;\n  auto sec = SECURITY_ATTRIBUTES();\n\n  if (!strcmp(path, \"/dev/null\")) {\n    path = \"NUL:\";\n  }\n\n  auto wpath = w_string_piece(path).asWideUNC();\n\n  if (opts.metaDataOnly) {\n    access = 0;\n  } else {\n    if (opts.writeContents) {\n      access |= GENERIC_WRITE;\n    }\n    if (opts.readContents) {\n      access |= GENERIC_READ;\n    }\n  }\n\n  // We want more posix-y behavior by default\n  share = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE;\n\n  sec.nLength = sizeof(sec);\n  sec.bInheritHandle = TRUE;\n  if (opts.closeOnExec) {\n    sec.bInheritHandle = FALSE;\n  }\n\n  if (opts.create && opts.exclusiveCreate) {\n    create = CREATE_NEW;\n  } else if (opts.create && opts.truncate) {\n    create = CREATE_ALWAYS;\n  } else if (opts.create) {\n    create = OPEN_ALWAYS;\n  } else if (opts.truncate) {\n    create = TRUNCATE_EXISTING;\n  } else {\n    create = OPEN_EXISTING;\n  }\n\n  attrs = FILE_FLAG_POSIX_SEMANTICS | FILE_FLAG_BACKUP_SEMANTICS;\n  if (!opts.followSymlinks) {\n    attrs |= FILE_FLAG_OPEN_REPARSE_POINT;\n  }\n\n  FileDescriptor file(\n      intptr_t(CreateFileW(\n          wpath.c_str(), access, share, &sec, create, attrs, nullptr)),\n      FileDescriptor::FDType::Unknown);\n  err = GetLastError();\n  if (!file) {\n    throw std::system_error(\n        err,\n        std::system_category(),\n        std::string(\"CreateFileW for openFileHandle: \") + path);\n  }\n\n#endif\n\n  if (!opts.strictNameChecks) {\n    return file;\n  }\n\n  auto opened = file.getOpenedPath();\n  if (w_string_piece(opened).pathIsEqual(path)) {\n#if !CAN_OPEN_SYMLINKS\n    CaseSensitivity caseSensitive = opts.caseSensitive;\n    if (caseSensitive == CaseSensitivity::Unknown) {\n      caseSensitive = getCaseSensitivityForPath(path);\n    }\n    if (caseSensitive == CaseSensitivity::CaseInSensitive) {\n      // We need to perform one extra check for case-insensitive\n      // paths to make sure that we didn't accidentally open\n      // the wrong case name.\n      checkCanonicalBaseName(path);\n    }\n#endif\n    return file;\n  }\n\n  throw std::system_error(\n      ENOENT,\n      std::generic_category(),\n      fmt::format(\n          \"open({}): opened path doesn't match canonical path {}\",\n          path,\n          opened));\n}\n\nFileInformation getFileInformation(\n    const char* path,\n    CaseSensitivity caseSensitive) {\n  auto options = OpenFileHandleOptions::queryFileInfo();\n  options.caseSensitive = caseSensitive;\n#if defined(_WIN32) || defined(O_PATH)\n  // These operating systems allow opening symlink nodes and querying them\n  // for stat information\n  auto handle = openFileHandle(path, options);\n  auto info = handle.getInfo();\n  return info;\n#else\n  // Since the leaf of the path may be a symlink, and this system doesn't\n  // allow opening symlinks for stat purposes, we have to resort to performing\n  // a relative fstatat() from the parent dir.\n  w_string_piece pathPiece(path);\n  auto parent = pathPiece.dirName().asWString();\n  auto handle = openFileHandle(parent.c_str(), options);\n  struct stat st;\n  if (fstatat(\n          handle.fd(), pathPiece.baseName().data(), &st, AT_SYMLINK_NOFOLLOW)) {\n    throw std::system_error(errno, std::generic_category(), \"fstatat\");\n  }\n\n  if (caseSensitive == CaseSensitivity::Unknown) {\n    caseSensitive = getCaseSensitivityForPath(path);\n  }\n  if (caseSensitive == CaseSensitivity::CaseInSensitive) {\n    // We need to perform one extra check for case-insensitive\n    // paths to make sure that we didn't accidentally open\n    // the wrong case name.\n    checkCanonicalBaseName(path);\n  }\n\n  return FileInformation(st);\n#endif\n}\n\n#ifdef _WIN32\nnamespace {\n\nw_string getCurrentDirectory() {\n  WCHAR wchar[WATCHMAN_NAME_MAX];\n  auto len = GetCurrentDirectoryW(std::size(wchar), wchar);\n  auto err = GetLastError();\n  // Technically, len > std::size(wchar) is sufficient, because the w_string\n  // constructor below will add a trailing zero.\n  if (len == 0 || len >= std::size(wchar)) {\n    throw std::system_error(\n        err, std::system_category(), \"GetCurrentDirectoryW\");\n  }\n  // Assumption: that the OS maintains the CWD in canonical form\n  return w_string(wchar, len);\n}\n\n} // namespace\n#endif\n\nw_string realPath(const char* path) {\n  auto options = OpenFileHandleOptions::queryFileInfo();\n  // Follow symlinks, because that's really the point of this function\n  options.followSymlinks = 1;\n  options.strictNameChecks = 0;\n\n#ifdef _WIN32\n  // Special cases for cwd.\n  // On Windows, \"\" is used to refer to the CWD.\n  // We also allow using \".\" for parity with unix, even though that\n  // doesn't generally work for that purpose on windows.\n  // This allows `watchman watch-project .` to succeeed on windows.\n  if (path[0] == 0 || (path[0] == '.' && path[1] == 0)) {\n    return getCurrentDirectory();\n  }\n#endif\n\n  auto handle = openFileHandle(path, options);\n  return handle.getOpenedPath();\n}\n\nw_string readSymbolicLink(const char* path) {\n#ifndef _WIN32\n  std::string result;\n\n  // Speculatively assume that this is large enough to read the\n  // symlink text.  This helps to avoid an extra lstat call.\n  result.resize(256);\n\n  for (int retry = 0; retry < 2; ++retry) {\n    auto len = readlink(path, &result[0], result.size());\n    if (len < 0) {\n      throw std::system_error(\n          errno,\n          std::system_category(),\n          fmt::format(\"readlink for readSymbolicLink(\\\"{}\\\")\", path));\n    }\n    if (size_t(len) < result.size()) {\n      return w_string(result.data(), len);\n    }\n\n    // Truncated read; we need to figure out the right size to use\n    struct stat st;\n    if (lstat(path, &st)) {\n      throw std::system_error(\n          errno,\n          std::system_category(),\n          fmt::format(\"lstat for readSymbolicLink(\\\"{}\\\")\", path));\n    }\n\n    result.resize(st.st_size + 1, 0);\n  }\n\n  throw std::system_error(\n      E2BIG,\n      std::system_category(),\n      fmt::format(\n          \"readlink for readSymbolicLink(\\\"{}\\\"): symlink changed while reading it\",\n          path));\n#else\n  return openFileHandle(path, OpenFileHandleOptions::queryFileInfo())\n      .readSymbolicLink();\n#endif\n}\n\nbool isOnSameMount(\n    const FileInformation& root,\n    const FileInformation& file,\n    const char* file_path) {\n#ifdef _WIN32\n  (void)root;\n  if ((file.fileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) ==\n      FILE_ATTRIBUTE_REPARSE_POINT) {\n    auto fd = openFileHandle(file_path, OpenFileHandleOptions::queryFileInfo());\n    auto reparseTag = fd.getReparseTag();\n    return reparseTag != IO_REPARSE_TAG_PROJFS;\n  } else {\n    return true;\n  }\n#else\n  (void)file_path;\n  return root.dev == file.dev;\n#endif\n}\n\n} // namespace watchman\n\n#ifdef _WIN32\n\nint mkdir(const char* path, int) {\n  auto wpath = w_string_piece(path).asWideUNC();\n  DWORD err;\n  BOOL res;\n\n  res = CreateDirectoryW(wpath.c_str(), nullptr);\n  err = GetLastError();\n\n  if (res) {\n    return 0;\n  }\n  errno = map_win32_err(err);\n  return -1;\n}\n\n#endif\n"
  },
  {
    "path": "watchman/fs/FileSystem.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include \"watchman/Result.h\"\n#include \"watchman/fs/DirHandle.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/fs/FileInformation.h\"\n\n/** This header defines platform independent helper functions for\n * operating on the filesystem at a low level.\n * These functions are intended to be used to query information from\n * the filesystem, rather than implementing a full-fledged abstraction\n * for general purpose use.\n *\n * One of the primary features of this header is to provide an OS-Independent\n * alias for the OS-Dependent file descriptor type.\n *\n * The functions in this file generally return or operate on an instance of\n * that type.\n */\n\nnamespace watchman {\n\nclass FileSystem {\n public:\n  virtual ~FileSystem() = default;\n\n  /**\n   * Open a directory for enumeration.\n   */\n  virtual std::unique_ptr<DirHandle> openDir(\n      const char* path,\n      bool strict = true) = 0;\n\n  /**\n   * Analogous to calling lstat() on the path, but can check the canonical case.\n   *\n   * Follows symlinks.\n   */\n  virtual FileInformation getFileInformation(\n      const char* path,\n      CaseSensitivity caseSensitive = CaseSensitivity::Unknown) = 0;\n\n  /**\n   * Watchman-specific API for creating an empty file on the filesystem.\n   * On unix, the created file will have mode 0700.\n   *\n   * Throws system_error on failure.\n   *\n   * Besides creating cookie files, Watchman mostly reads from the watched\n   * directory. If that changes, this function could be replaced by a more\n   * general open(2)-like API.\n   */\n  virtual void touch(const char* path) = 0;\n};\n\nextern FileSystem& realFileSystem;\n\n/** equivalent to open(2)\n * This function is not intended to be used to create files,\n * just to open a file handle to query its metadata */\nFileDescriptor openFileHandle(\n    const char* path,\n    const OpenFileHandleOptions& opts);\n\n/** equivalent to lstat(2), but performs strict name checking */\nFileInformation getFileInformation(\n    const char* path,\n    CaseSensitivity caseSensitive = CaseSensitivity::Unknown);\n\n/**\n * Test to see if both the files are on the same mount point.\n *\n * In particular, EdenFS mount below the root will return false.\n */\nbool isOnSameMount(\n    const FileInformation& root,\n    const FileInformation& file,\n    const char* file_path);\n\n/** equivalent to realpath() */\nw_string realPath(const char* path);\n\n/** equivalent to readlink() */\nw_string readSymbolicLink(const char* path);\n\n} // namespace watchman\n\n#ifdef _WIN32\nint mkdir(const char* path, int);\n#endif\n"
  },
  {
    "path": "watchman/fs/ParallelWalk.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/ParallelWalk.h\"\n#include <fmt/core.h>\n#include <folly/concurrency/UnboundedQueue.h>\n#include <folly/executors/CPUThreadPoolExecutor.h>\n#include <folly/system/HardwareConcurrency.h>\n\nnamespace watchman {\n\ntemplate <typename T>\nusing Queue = folly::UMPMCQueue<std::optional<T>, true /* MayBlock */>;\n\nstruct ParallelWalkerContext {\n  // Input.\n  std::shared_ptr<FileSystem> fileSystem;\n  folly::Executor* executor;\n  std::optional<FileInformation> rootStat;\n\n  // Task tracking. Other task states live in the Executor.\n  std::atomic<size_t> readDirTaskCount{0};\n  std::atomic<bool> stopped{false};\n\n  // Output.\n  Queue<ReadDirResult> resultQueue{};\n  Queue<IoErrorWithPath> errorQueue{};\n\n  ParallelWalkerContext(\n      std::shared_ptr<FileSystem> fileSystem,\n      folly::Executor* executor,\n      std::optional<FileInformation> rootStat)\n      : fileSystem{std::move(fileSystem)},\n        executor{executor},\n        rootStat{rootStat} {}\n\n  // Helper for (resultQueue or errorQueue).dequeue.\n  // If no tasks are running, return nullopt.\n  template <typename T>\n  std::optional<T> taskAwareDequeue(Queue<T>& queue) {\n    // Try non-blocking deque first.\n    auto maybe = queue.try_dequeue();\n    if (maybe) {\n      return std::move(maybe).value();\n    }\n    if (readDirTaskCount.load(std::memory_order_acquire) == 0) {\n      return std::nullopt;\n    }\n    // readDirTaskCount > 0. ~ReadDirTaskCounter will push nullopt to queue.\n    // So this will not block forever.\n    auto value = queue.dequeue();\n    return value;\n  }\n};\n\nnamespace {\n\nfolly::Executor::KeepAlive<> createExecutor(size_t threadCountHint) {\n  size_t hwThreadCount = folly::available_concurrency();\n  size_t threadCount = threadCountHint\n      ? std::min(threadCountHint, hwThreadCount)\n      : hwThreadCount;\n  return new folly::CPUThreadPoolExecutor(\n      threadCount, std::make_unique<folly::NamedThreadFactory>(\"pwalk\"));\n}\n\n// Executor used by the readDir tasks. The executor is global to avoid spawning\n// too many threads walking multiple roots.\nfolly::Executor* getExecutor(size_t threadCountHint) {\n  static folly::Executor::KeepAlive<> e = createExecutor(threadCountHint);\n  return e.get();\n}\n\nfolly::fbstring pathJoin(\n    const folly::fbstring& dirName,\n    const folly::fbstring& baseName) {\n  if (dirName.empty()) {\n    return baseName;\n  }\n  if (baseName.empty()) {\n    return dirName;\n  }\n  return fmt::format(\"{}/{}\", dirName, baseName);\n}\n\n// Update readDirTaskCount. +1 on construction. -1 on destruction.\nclass ReadDirTaskCounter {\n public:\n  ~ReadDirTaskCounter() {\n    if (!context_) {\n      return;\n    }\n    size_t count =\n        context_->readDirTaskCount.fetch_sub(1, std::memory_order_acq_rel);\n    if (count == 1) {\n      // Last task ends. Mark queues as \"ended\".\n      context_->resultQueue.enqueue(std::nullopt);\n      context_->errorQueue.enqueue(std::nullopt);\n    }\n  }\n\n  explicit ReadDirTaskCounter(std::shared_ptr<ParallelWalkerContext> context)\n      : context_(std::move(context)) {\n    context_->readDirTaskCount.fetch_add(1, std::memory_order_relaxed);\n  }\n\n  ReadDirTaskCounter(const ReadDirTaskCounter& rhs) {\n    context_ = rhs.context_;\n    context_->readDirTaskCount.fetch_add(1, std::memory_order_relaxed);\n  }\n\n  ReadDirTaskCounter() = delete;\n#if defined(_MSC_VER)\n  // MSVC (tested with cl 19.32.31332 from VS 2022) does not do\n  // copy/move-elision for lambda capture.\n  ReadDirTaskCounter(ReadDirTaskCounter&&) = default;\n#else\n  ReadDirTaskCounter(ReadDirTaskCounter&&) = delete;\n#endif\n  ReadDirTaskCounter& operator=(const ReadDirTaskCounter&) = delete;\n  ReadDirTaskCounter& operator=(ReadDirTaskCounter&&) = delete;\n\n private:\n  std::shared_ptr<ParallelWalkerContext> context_;\n};\n\n/**\n * Approximate bytes per entry for a directory. Used to provide a hint\n * to reserve ReadDirResult::entries.\n *\n * 32 is picked by running the following Python script on a mac:\n *\n *     import os, glob\n *     def size_per_entry(d):\n *         try: return os.stat(d).st_size / len(os.listdir(d))\n *         except Exception: return None\n *     print(min(filter(None, map(size_per_entry, glob.glob('/''*''/''*')))))\n *\n * Therefore it is optimized for APFS.\n * Other filesystems probably have different optimal values.\n */\nconst size_t kApproximateSizePerEntry = 32;\n\n/**\n * Read and stat dirPath's direct children.\n * Push ReadDirResult to context->resultQueue.\n * Push errors to context->errorQueue.\n * Spawn readDirTask for subdirectories.\n */\nvoid readDirTask(\n    std::shared_ptr<ParallelWalkerContext> context,\n    AbsolutePath dirFullPath,\n    ReadDirTaskCounter&& counter,\n    size_t dirSizeHint = 0) {\n  if (context->stopped.load(std::memory_order_acquire)) {\n    return;\n  }\n\n  std::unique_ptr<DirHandle> dir;\n  try {\n    dir = context->fileSystem->openDir(dirFullPath.c_str());\n  } catch (const std::system_error& err) {\n    IoErrorWithPath error{std::move(dirFullPath), err, \"opendir\"};\n    context->errorQueue.enqueue(error);\n    return;\n  }\n\n  // openDir() returns nullptr. It is used to ignore a directory.\n  if (!dir) {\n    return;\n  }\n\n  std::vector<DirEntryOwned> entries;\n  entries.reserve(dirSizeHint);\n\n  size_t subdirCount = 0;\n  while (const DirEntry* dirent = dir->readDir()) {\n    // Skip . and ..\n    const char* d_name = dirent->d_name;\n    if (d_name[0] == '.' &&\n        (d_name[1] == 0 || (d_name[1] == '.' && d_name[2] == 0))) {\n      continue;\n    }\n    // Get stat() information.\n    PathComponent name(d_name);\n    FileInformation st;\n    if (dirent->has_stat) {\n      st = dirent->stat;\n    } else {\n      auto fileFullPath = pathJoin(dirFullPath, name);\n      try {\n        st = context->fileSystem->getFileInformation(fileFullPath.c_str());\n      } catch (const std::system_error& err) {\n        IoErrorWithPath error{\n            std::move(fileFullPath), err, \"getFileInformation\"};\n        context->errorQueue.enqueue(error);\n        // Contine checking other entries.\n        continue;\n      }\n    }\n    if (st.isDir()) {\n      subdirCount += 1;\n    }\n    DirEntryOwned entry{\n        std::move(name),\n        st,\n    };\n    entries.push_back(entry);\n  }\n\n  // Figure out subdirs to read before losing ownership of entries.\n  std::vector<std::pair<AbsolutePath, size_t>> subdirsToRead;\n  subdirsToRead.reserve(subdirCount);\n  for (const auto& entry : entries) {\n    if (entry.stat.isDir()) {\n      AbsolutePath subdirPath = pathJoin(dirFullPath, entry.name);\n      if (!context->rootStat ||\n          isOnSameMount(*context->rootStat, entry.stat, subdirPath.c_str())) {\n        size_t sizeHint = entry.stat.size / kApproximateSizePerEntry;\n        subdirsToRead.emplace_back(subdirPath, sizeHint);\n      }\n    }\n  }\n\n  // Enqueue ReadDirResult before reading subdirs.\n  ReadDirResult result{std::move(dirFullPath), std::move(entries), subdirCount};\n  context->resultQueue.enqueue(result);\n\n  // Spawn tasks to read subdirs.\n  for (auto& pair : subdirsToRead) {\n    auto& path = pair.first;\n    auto sizeHint = pair.second;\n    auto task = [context = context,\n                 path = std::move(path),\n                 counter = counter,\n                 sizeHint = sizeHint]() mutable {\n      readDirTask(\n          std::move(context), std::move(path), std::move(counter), sizeHint);\n    };\n    context->executor->add(std::move(task));\n  }\n}\n\n} // namespace\n\nParallelWalker::ParallelWalker(\n    std::shared_ptr<FileSystem> fileSystem,\n    AbsolutePath rootPath,\n    std::optional<FileInformation> rootStat,\n    size_t threadCountHint) {\n  auto executor = getExecutor(threadCountHint);\n  context_ = std::make_shared<ParallelWalkerContext>(\n      std::move(fileSystem), executor, rootStat);\n  auto task = [context = context_,\n               path = std::move(rootPath),\n               counter = ReadDirTaskCounter(context_)]() mutable {\n    readDirTask(std::move(context), std::move(path), std::move(counter));\n  };\n  context_->executor->add(std::move(task));\n}\n\nParallelWalker::~ParallelWalker() {\n  context_->stopped.store(true, std::memory_order_release);\n}\n\nstd::optional<ReadDirResult> ParallelWalker::nextResult() {\n  return context_->taskAwareDequeue(context_->resultQueue);\n}\n\nstd::optional<IoErrorWithPath> ParallelWalker::nextError() {\n  return context_->taskAwareDequeue(context_->errorQueue);\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fs/ParallelWalk.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/ExceptionWrapper.h>\n#include <folly/FBString.h>\n#include <optional>\n#include <vector>\n#include \"watchman/fs/FileInformation.h\"\n#include \"watchman/fs/FileSystem.h\"\n\n/** Parallel filesystem walker. Collect path names and stats recursively. */\n\nnamespace watchman {\n\n// Consider eden/common/utils/PathFuncs.h, if builds.\nusing PathComponent = folly::fbstring;\nusing AbsolutePath = folly::fbstring;\n\n/** Similar to `DirEntry` but always contains stat and owns the strings. */\nstruct DirEntryOwned {\n  PathComponent name;\n  FileInformation stat;\n};\n\n/** ReadDir result: names and stats of direct children of a directory. */\nstruct ReadDirResult {\n  // Full directory path.\n  AbsolutePath dirFullPath;\n\n  // Entries and their stats.\n  std::vector<DirEntryOwned> entries;\n\n  // Count of subdir entries. Useful for pre-allocation.\n  size_t subdirCount = 0;\n};\n\n/** Error message with a path associated */\nstruct IoErrorWithPath {\n  // Full path causing the error. Could be a file or a directory.\n  AbsolutePath fullPath;\n\n  // Actual error.\n  folly::exception_wrapper error;\n\n  // Name of the operation. Useful for error messages.\n  const char* operationName;\n};\n\nstruct ParallelWalkerContext;\n\nclass ParallelWalker final {\n public:\n  /**\n   * Start reading rootPath recursively. Does not block.\n   *\n   * threadCountHint specifies the desired thread count to initialize the\n   * global thread pool. It is ignored if the thread pool was initialized.\n   * threadCountHint can be 0, which means the hardware concurrency.\n   * threadCountHint caps at hardware concurrency.\n   *\n   * Use nextResult() to obtain ReadDirResults.\n   * Use nextError() to obtain IoErrorWithPaths.\n   */\n  explicit ParallelWalker(\n      std::shared_ptr<FileSystem> fileSystem,\n      AbsolutePath rootPath,\n      std::optional<FileInformation> rootStat,\n      size_t threadCountHint = 0);\n\n  /**\n   * Obtain the next ReadDirResult. Might block.\n   *\n   * Parent directory is guarnateed to be provided before child directories.\n   * After completion, always return nullopt without blocking.\n   */\n  std::optional<ReadDirResult> nextResult();\n\n  /**\n   * Obtain an occurred error. Might block.\n   *\n   * After completion, always return nullopt without blocking.\n   */\n  std::optional<IoErrorWithPath> nextError();\n\n  /**\n   * Discard the walker. Does not block.\n   *\n   * Existing tasks will still run to completion but new tasks will exit\n   * immediately without spawning tasks for subdirectories.\n   * context_ will be dropped after completeing all tasks.\n   */\n  ~ParallelWalker();\n\n  ParallelWalker() = delete;\n  ParallelWalker(ParallelWalker&&) = delete;\n  ParallelWalker(const ParallelWalker&) = delete;\n  ParallelWalker& operator=(ParallelWalker&&) = delete;\n  ParallelWalker& operator=(const ParallelWalker&) = delete;\n\n private:\n  std::shared_ptr<ParallelWalkerContext> context_;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fs/ParallelWalkMain.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/init/Init.h>\n#include <chrono>\n#include <cstdlib>\n#include <iostream>\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/fs/ParallelWalk.h\"\n\nvoid walk(watchman::AbsolutePath path, size_t threadCountHint) {\n  std::cout << path << std::endl;\n\n  auto start_time = std::chrono::steady_clock::now();\n  std::shared_ptr<watchman::FileSystem> fileSystem(\n      std::shared_ptr<watchman::FileSystem>{}, &watchman::realFileSystem);\n  auto walker = watchman::ParallelWalker(\n      fileSystem,\n      path,\n      fileSystem->getFileInformation(path.c_str()),\n      threadCountHint);\n  size_t directory_count = 0;\n  size_t path_count = 0;\n  off_t size = 0;\n  while (true) {\n    auto result = walker.nextResult();\n    if (!result.has_value()) {\n      break;\n    }\n    directory_count += 1;\n    auto& entries = result.value().entries;\n    path_count += entries.size();\n    for (const auto& entry : entries) {\n      size += entry.stat.size;\n    }\n  }\n  auto end_time = std::chrono::steady_clock::now();\n  auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(\n      end_time - start_time);\n  double seconds = milliseconds.count() / 1000.;\n\n  while (true) {\n    auto maybe_error = walker.nextError();\n    if (!maybe_error) {\n      break;\n    }\n    auto error = maybe_error.value();\n    std::cout << \"  Error: \" << error.fullPath << \": \" << error.error.what()\n              << std::endl;\n  }\n\n  std::cout << \"  Dir#:  \" << directory_count << std::endl;\n  std::cout << \"  Path#: \" << path_count << std::endl;\n  std::cout << \"  Size:  \" << size << std::endl;\n  std::cout << \"  Time:  \" << seconds << \" seconds\" << std::endl;\n}\n\nint main(int argc, char* argv[]) {\n  const folly::Init init(&argc, &argv);\n\n  if (argc == 1) {\n    std::cerr << \"Provide at least a root path to walk\" << std::endl;\n  } else {\n    size_t thread_count_hint = 0;\n    const char* env = std::getenv(\"PWALK_THREAD\");\n    if (env) {\n      thread_count_hint = atoi(env);\n      if (thread_count_hint) {\n        std::cerr << \"Using min(\" << thread_count_hint << \", nproc) threads\"\n                  << std::endl;\n      }\n    }\n    for (int i = 1; i < argc; ++i) {\n      walk(watchman::AbsolutePath(argv[i]), thread_count_hint);\n    }\n  }\n  return 0;\n}\n"
  },
  {
    "path": "watchman/fs/Pipe.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/Pipe.h\"\n#include <folly/Exception.h>\n#include <folly/String.h>\n#include <folly/portability/Event.h>\n#include <system_error>\n\nnamespace watchman {\n\nPipe::Pipe() {\n#ifdef _WIN32\n  HANDLE readPipe;\n  HANDLE writePipe;\n  auto sec = SECURITY_ATTRIBUTES();\n\n  sec.nLength = sizeof(sec);\n  sec.bInheritHandle = FALSE; // O_CLOEXEC equivalent\n  constexpr DWORD kPipeSize = 64 * 1024;\n\n  if (!CreatePipe(&readPipe, &writePipe, &sec, kPipeSize)) {\n    throw std::system_error(\n        GetLastError(), std::system_category(), \"CreatePipe failed\");\n  }\n  read = FileDescriptor(intptr_t(readPipe), FileDescriptor::FDType::Pipe);\n  write = FileDescriptor(intptr_t(writePipe), FileDescriptor::FDType::Pipe);\n\n#else\n  int fds[2];\n  int res;\n#if HAVE_PIPE2\n  res = pipe2(fds, O_NONBLOCK | O_CLOEXEC);\n#else\n  res = pipe(fds);\n#endif\n\n  if (res) {\n    throw std::system_error(\n        errno,\n        std::system_category(),\n        std::string(\"pipe error: \") + folly::errnoStr(errno));\n  }\n  read = FileDescriptor(fds[0], FileDescriptor::FDType::Pipe);\n  write = FileDescriptor(fds[1], FileDescriptor::FDType::Pipe);\n\n#if !HAVE_PIPE2\n  read.setCloExec();\n  read.setNonBlock();\n  write.setCloExec();\n  write.setNonBlock();\n#endif\n#endif\n}\n\nSocketPair::SocketPair() {\n  FileDescriptor::system_handle_type pair[2];\n\n#ifdef _WIN32\n  // The win32 libevent implementation will attempt to use unix domain sockets\n  // if available, but will fall back to using loopback TCP sockets.\n  auto r = evutil_socketpair(AF_UNIX, SOCK_STREAM, 0, pair);\n#else\n  auto r = ::socketpair(\n      AF_UNIX,\n#ifdef SOCK_NONBLOCK\n      SOCK_NONBLOCK |\n#endif\n#ifdef SOCK_CLOEXEC\n          SOCK_CLOEXEC |\n#endif\n          SOCK_STREAM,\n      0,\n      pair);\n#endif\n  folly::checkUnixError(r, \"socketpair failed\");\n\n  read = FileDescriptor(pair[0], FileDescriptor::FDType::Socket);\n  write = FileDescriptor(pair[1], FileDescriptor::FDType::Socket);\n\n  read.setNonBlock();\n  write.setNonBlock();\n  read.setCloExec();\n  write.setCloExec();\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fs/Pipe.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include \"watchman/fs/FileDescriptor.h\"\n\nnamespace watchman {\n\n// Convenience for constructing a Pipe\nclass Pipe {\n public:\n  FileDescriptor read;\n  FileDescriptor write;\n\n  // Construct a pipe, setting the close-on-exec and\n  // non-blocking bits.\n  Pipe();\n};\n\n// Convenience for constructing a SocketPair\nclass SocketPair {\n public:\n  FileDescriptor read;\n  FileDescriptor write;\n\n  // Construct a socketpair, setting the close-on-exec and\n  // non-blocking bits.\n  SocketPair();\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fs/UnixDirHandle.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/DirHandle.h\"\n\n#include <fmt/core.h>\n#include <folly/String.h>\n#include <system_error>\n#include \"watchman/Logging.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/fs/FileSystem.h\"\n\n#ifndef _WIN32\n#include <dirent.h>\n#endif\n\n#ifdef __APPLE__\n#include <sys/attr.h> // @manual\n#include <sys/utsname.h> // @manual\n#include <sys/vnode.h> // @manual\n#endif\n\nnamespace watchman {\n\n#ifdef HAVE_GETATTRLISTBULK\n// The ordering of these fields is defined by the ordering of the\n// corresponding ATTR_XXX flags that are listed after each item.\n// Those flags appear in a specific order in the getattrlist()\n// man page.  We use FSOPT_PACK_INVAL_ATTRS to ensure that the\n// kernel won't omit a field that it didn't return to us.\ntypedef struct {\n  uint32_t len;\n  attribute_set_t returned; // ATTR_CMN_RETURNED_ATTRS\n  uint32_t err; // ATTR_CMN_ERROR\n\n  /* The attribute data length will not be greater than NAME_MAX + 1\n   * characters, which is NAME_MAX * 3 + 1 bytes (as one UTF-8-encoded\n   * character may take up to three bytes\n   */\n  attrreference_t name; // ATTR_CMN_NAME\n  dev_t dev; // ATTR_CMN_DEVID\n  fsobj_type_t objtype; // ATTR_CMN_OBJTYPE\n  struct timespec mtime; // ATTR_CMN_MODTIME\n  struct timespec ctime; // ATTR_CMN_CHGTIME\n  struct timespec atime; // ATTR_CMN_ACCTIME\n  uid_t uid; // ATTR_CMN_OWNERID\n  gid_t gid; // ATTR_CMN_GRPID\n  uint32_t mode; // ATTR_CMN_ACCESSMASK, Only the permission bits of st_mode\n                 // are valid; other bits should be ignored,\n                 // e.g., by masking with ~S_IFMT.\n  uint64_t ino; // ATTR_CMN_FILEID\n  uint32_t link; // ATTR_FILE_LINKCOUNT or ATTR_DIR_LINKCOUNT\n  off_t file_size; // ATTR_FILE_TOTALSIZE\n\n} __attribute__((packed)) bulk_attr_item;\n#endif\n\n#ifndef _WIN32\nclass UnixDirHandle : public DirHandle {\n#ifdef HAVE_GETATTRLISTBULK\n  std::string dirName_;\n  FileDescriptor fd_;\n  struct attrlist attrlist_;\n  int retcount_{0};\n  char buf_[64 * (sizeof(bulk_attr_item) + NAME_MAX * 3 + 1)];\n  char* cursor_{nullptr};\n#endif\n  DIR* d_{nullptr};\n  struct DirEntry ent_;\n\n public:\n  explicit UnixDirHandle(const char* path, bool strict);\n  ~UnixDirHandle() override;\n  const DirEntry* readDir() override;\n  int getFd() const override;\n};\n#endif\n\n#ifndef _WIN32\n/* Opens a directory making sure it's not a symlink */\nstatic DIR* opendir_nofollow(const char* path) {\n  auto fd = openFileHandle(path, OpenFileHandleOptions::strictOpenDir());\n#if !defined(HAVE_FDOPENDIR) || defined(__APPLE__)\n  /* fdopendir doesn't work on earlier versions macOS, and we don't\n   * use this function since 10.10, as we prefer to use getattrlistbulk\n   * in that case */\n  return opendir(path);\n#else\n  // errno should be set appropriately if this is not a directory\n  auto d = fdopendir(fd.fd());\n  if (d) {\n    fd.release();\n  }\n  return d;\n#endif\n}\n#endif\n\n#ifdef HAVE_GETATTRLISTBULK\n// I've seen bulkstat report incorrect sizes on kernel version 14.5.0.\n// (That's OSX 10.10.5).\n// Let's avoid it for major kernel versions < 15.\n// Using statics here to avoid querying the uname on every opendir.\n// There is opportunity for a data race the first time through, but the\n// worst case side effect is wasted compute early on.\nstatic bool use_bulkstat_by_default() {\n  static bool probed = false;\n  static bool safe = false;\n\n  if (!probed) {\n    struct utsname name;\n    if (uname(&name) == 0) {\n      int maj = 0, min = 0, patch = 0;\n      sscanf(name.release, \"%d.%d.%d\", &maj, &min, &patch);\n      if (maj >= 15) {\n        safe = true;\n      }\n    }\n    probed = true;\n  }\n\n  return safe;\n}\n#endif\n\n#ifndef _WIN32\nstd::unique_ptr<DirHandle> openDir(const char* path, bool strict) {\n  return std::make_unique<UnixDirHandle>(path, strict);\n}\n\n#ifdef HAVE_GETATTRLISTBULK\nstatic std::string flagsToLabel(\n    const std::unordered_map<uint32_t, const char*>& labels,\n    uint32_t flags) {\n  std::string str;\n  for (const auto& it : labels) {\n    if (it.first == 0) {\n      // Sometimes a define evaluates to zero; it's not useful so skip it\n      continue;\n    }\n    if ((flags & it.first) == it.first) {\n      if (!str.empty()) {\n        str.append(\" \");\n      }\n      str.append(it.second);\n      flags &= ~it.first;\n    }\n  }\n  if (flags == 0) {\n    return str;\n  }\n  return fmt::format(\"{} unknown:{}\", str, flags);\n}\n\nstatic const std::unordered_map<uint32_t, const char*> commonLabels = {\n    {ATTR_CMN_RETURNED_ATTRS, \"ATTR_CMN_RETURNED_ATTRS\"},\n    {ATTR_CMN_ERROR, \"ATTR_CMN_ERROR\"},\n    {ATTR_CMN_NAME, \"ATTR_CMN_NAME\"},\n    {ATTR_CMN_DEVID, \"ATTR_CMN_DEVID\"},\n    {ATTR_CMN_OBJTYPE, \"ATTR_CMN_OBJTYPE\"},\n    {ATTR_CMN_MODTIME, \"ATTR_CMN_MODTIME\"},\n    {ATTR_CMN_CHGTIME, \"ATTR_CMN_CHGTIME\"},\n    {ATTR_CMN_ACCTIME, \"ATTR_CMN_ACCTIME\"},\n    {ATTR_CMN_OWNERID, \"ATTR_CMN_OWNERID\"},\n    {ATTR_CMN_GRPID, \"ATTR_CMN_GRPID\"},\n    {ATTR_CMN_ACCESSMASK, \"ATTR_CMN_ACCESSMASK\"},\n    {ATTR_CMN_FILEID, \"ATTR_CMN_FILEID\"},\n};\n#endif\n\nUnixDirHandle::UnixDirHandle(const char* path, bool strict)\n#ifdef HAVE_GETATTRLISTBULK\n    : dirName_(path)\n#endif\n{\n#ifdef HAVE_GETATTRLISTBULK\n  dirName_ = path;\n  if (cfg_get_bool(\"_use_bulkstat\", use_bulkstat_by_default())) {\n    auto opts = strict ? OpenFileHandleOptions::strictOpenDir()\n                       : OpenFileHandleOptions::openDir();\n\n    fd_ = openFileHandle(path, opts);\n\n    auto info = fd_.getInfo();\n\n    if (!info.isDir()) {\n      throw std::system_error(ENOTDIR, std::generic_category(), path);\n    }\n\n    attrlist_ = attrlist{};\n    attrlist_.bitmapcount = ATTR_BIT_MAP_COUNT;\n    // These field flags are listed here in the same order that they\n    // are listed in the getattrlist() manpage, which is also the\n    // same order that they will be emitted into the buffer, which\n    // is thus the order that they must appear in bulk_attr_item.\n    attrlist_.commonattr = ATTR_CMN_RETURNED_ATTRS | ATTR_CMN_ERROR |\n        ATTR_CMN_NAME | ATTR_CMN_DEVID | ATTR_CMN_OBJTYPE | ATTR_CMN_MODTIME |\n        ATTR_CMN_CHGTIME | ATTR_CMN_ACCTIME | ATTR_CMN_OWNERID |\n        ATTR_CMN_GRPID | ATTR_CMN_ACCESSMASK | ATTR_CMN_FILEID;\n\n    attrlist_.dirattr = ATTR_DIR_LINKCOUNT;\n    attrlist_.fileattr = ATTR_FILE_TOTALSIZE | ATTR_FILE_LINKCOUNT;\n    return;\n  }\n#endif\n  d_ = strict ? opendir_nofollow(path) : opendir(path);\n\n  if (!d_) {\n    throw std::system_error(\n        errno,\n        std::generic_category(),\n        std::string(strict ? \"opendir_nofollow: \" : \"opendir: \") + path);\n  }\n}\n\nconst DirEntry* UnixDirHandle::readDir() {\n#ifdef HAVE_GETATTRLISTBULK\n  if (fd_) {\n    bulk_attr_item* item;\n\n    if (!cursor_) {\n      // Read the next batch of results\n      int retcount;\n\n      memset(buf_, 0, sizeof(buf_));\n      errno = 0;\n      retcount = getattrlistbulk(\n          fd_.fd(),\n          &attrlist_,\n          buf_,\n          sizeof(buf_),\n          // FSOPT_PACK_INVAL_ATTRS informs the kernel that we want to\n          // include attrs in our buffer even if it doesn't return them\n          // to us; we want this because we took pains to craft our\n          // bulk_attr_item struct to avoid pointer math.\n          FSOPT_PACK_INVAL_ATTRS);\n      if (retcount == -1) {\n        throw std::system_error(\n            errno, std::generic_category(), \"getattrlistbulk\");\n      }\n      if (retcount == 0) {\n        // End of the stream\n        return nullptr;\n      }\n\n      retcount_ = retcount;\n      cursor_ = buf_;\n    }\n\n    // Decode the next item\n    item = (bulk_attr_item*)cursor_;\n    cursor_ += item->len;\n    if (cursor_ > buf_ + sizeof(buf_)) {\n      // This shouldn't happen in practice: the man page indicates that ERANGE\n      // is returned from getattrlistbulk() if the buffer isn't large enough\n      // for a single entry.\n      throw std::system_error(\n          ENOSPC,\n          std::generic_category(),\n          \"getattrlistbulk: attributes overflow size of buf storage\");\n    }\n    if (--retcount_ == 0) {\n      // No more entries from the last chunk\n      cursor_ = nullptr;\n    }\n\n    w_string_piece name{};\n\n    if (item->returned.commonattr & ATTR_CMN_NAME) {\n      ent_.d_name = ((char*)&item->name) + item->name.attr_dataoffset;\n      // Check that the data is within bounds.\n      // This shouldn't happen in practice: as per the above comment,\n      // we expect to have encountered an ERANGE before we get here.\n      // Note that even though the data reference records the length,\n      // that length is the padded length of the value; the true\n      // name value is a NUL terminated string within that space.\n      if (ent_.d_name + item->name.attr_length > buf_ + sizeof(buf_)) {\n        throw std::system_error(\n            ENOSPC,\n            std::generic_category(),\n            \"getattrlistbulk: name overflows size of buf storage\");\n      }\n      name = w_string_piece(ent_.d_name);\n    }\n\n    if ((item->returned.commonattr & ATTR_CMN_ERROR) && item->err != 0) {\n      log(ERR,\n          \"getattrlistbulk: error while reading dir: \",\n          dirName_,\n          \"/\",\n          name,\n          \": \",\n          item->err,\n          \" \",\n          folly::errnoStr(item->err),\n          \"\\n\");\n\n      // No name means we've got nothing useful to go on\n      if (name.empty()) {\n        throw std::system_error(\n            item->err, std::generic_category(), \"getattrlistbulk\");\n      }\n\n      // Getting the name means that we can at least enumerate the dir\n      // contents.\n      ent_.has_stat = false;\n      return &ent_;\n    }\n\n    if (name.empty()) {\n      throw std::system_error(\n          EIO,\n          std::generic_category(),\n          fmt::format(\n              \"getattrlistbulk didn't return a name for a directory entry under {}!?\",\n              dirName_));\n    }\n\n    if ((item->returned.commonattr & attrlist_.commonattr) !=\n        attrlist_.commonattr) {\n      log(ERR,\n          \"getattrlistbulk didn't return all useful stat data for \",\n          dirName_,\n          \"/\",\n          name,\n          \" returned=\",\n          flagsToLabel(commonLabels, item->returned.commonattr),\n          \"\\n\");\n      // We can still yield the name, so we don't need to throw an exception\n      // in this case.\n      ent_.has_stat = false;\n      return &ent_;\n    }\n\n    ent_.stat = watchman::FileInformation();\n\n    ent_.stat.dev = item->dev;\n    memcpy(&ent_.stat.mtime, &item->mtime, sizeof(item->mtime));\n    memcpy(&ent_.stat.ctime, &item->ctime, sizeof(item->ctime));\n    memcpy(&ent_.stat.atime, &item->atime, sizeof(item->atime));\n    ent_.stat.uid = item->uid;\n    ent_.stat.gid = item->gid;\n    ent_.stat.mode = item->mode & ~S_IFMT;\n    ent_.stat.ino = item->ino;\n\n    switch (item->objtype) {\n      case VREG:\n        ent_.stat.mode |= S_IFREG;\n        ent_.stat.size = item->file_size;\n        ent_.stat.nlink = item->link;\n        break;\n      case VDIR:\n        ent_.stat.mode |= S_IFDIR;\n        ent_.stat.nlink = item->link;\n        break;\n      case VLNK:\n        ent_.stat.mode |= S_IFLNK;\n        ent_.stat.size = item->file_size;\n        break;\n      case VBLK:\n        ent_.stat.mode |= S_IFBLK;\n        break;\n      case VCHR:\n        ent_.stat.mode |= S_IFCHR;\n        break;\n      case VFIFO:\n        ent_.stat.mode |= S_IFIFO;\n        break;\n      case VSOCK:\n        ent_.stat.mode |= S_IFSOCK;\n        break;\n    }\n    ent_.has_stat = true;\n    return &ent_;\n  }\n#endif\n\n  if (!d_) {\n    return nullptr;\n  }\n  errno = 0;\n  auto dent = readdir(d_);\n  if (!dent) {\n    if (errno) {\n      throw std::system_error(errno, std::generic_category(), \"readdir\");\n    }\n    return nullptr;\n  }\n\n  ent_.d_name = dent->d_name;\n  ent_.has_stat = false;\n  return &ent_;\n}\n\nUnixDirHandle::~UnixDirHandle() {\n  if (d_) {\n    closedir(d_);\n  }\n}\n\nint UnixDirHandle::getFd() const {\n#ifdef HAVE_GETATTRLISTBULK\n  if (cfg_get_bool(\"_use_bulkstat\", use_bulkstat_by_default())) {\n    return fd_.fd();\n  }\n#endif\n  return dirfd(d_);\n}\n#endif\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/fs/WinDirHandle.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/DirHandle.h\"\n\n#include <folly/ScopeGuard.h>\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/fs/WindowsTime.h\"\n#include \"watchman/watchman_string.h\"\n#include \"watchman/watchman_system.h\"\n\nnamespace watchman {\n\n#ifdef _WIN32\n\nnamespace {\nclass WinDirHandle : public DirHandle {\n  std::wstring dirWPath_;\n  FileDescriptor h_;\n  bool win7_{false};\n  FILE_FULL_DIR_INFO* info_{nullptr};\n  char __declspec(align(8)) buf_[64 * 1024];\n  HANDLE hDirFind_{nullptr};\n  char nameBuf_[WATCHMAN_NAME_MAX];\n  DirEntry ent_;\n\n public:\n  ~WinDirHandle() {\n    if (hDirFind_) {\n      FindClose(hDirFind_);\n    }\n  }\n\n  explicit WinDirHandle(const char* path, bool strict) {\n    dirWPath_ = w_string_piece(path).asWideUNC();\n\n    h_ = openFileHandle(\n        path,\n        strict ? OpenFileHandleOptions::strictOpenDir()\n               : OpenFileHandleOptions::openDir());\n\n    // Use Win7 compatibility mode for readDir()\n    if (getenv(\"WATCHMAN_WIN7_COMPAT\") &&\n        getenv(\"WATCHMAN_WIN7_COMPAT\")[0] == '1') {\n      win7_ = true;\n    }\n\n    ent_ = DirEntry();\n    ent_.d_name = nameBuf_;\n    ent_.has_stat = true;\n    if (path[1] == ':') {\n      ent_.stat.dev = tolower(path[0]) - 'a';\n    }\n  }\n\n  const DirEntry* readDir() override {\n    if (win7_) {\n      return readDirWin7();\n    }\n    try {\n      return readDirWin8();\n    } catch (const std::system_error& err) {\n      if (err.code().value() != ERROR_INVALID_PARAMETER) {\n        throw;\n      }\n      // Fallback on Win7 implementation. FileFullDirectoryInfo\n      // parameter is not supported before Win8\n      win7_ = true;\n      return readDirWin7();\n    }\n  }\n\n private:\n  const DirEntry* readDirWin8() {\n    if (!info_) {\n      if (!GetFileInformationByHandleEx(\n              (HANDLE)h_.handle(), FileFullDirectoryInfo, buf_, sizeof(buf_))) {\n        if (GetLastError() == ERROR_NO_MORE_FILES) {\n          return nullptr;\n        }\n        throw std::system_error(\n            GetLastError(),\n            std::system_category(),\n            \"GetFileInformationByHandleEx\");\n      }\n      info_ = (FILE_FULL_DIR_INFO*)buf_;\n    }\n\n    // Decode the item currently pointed at\n    DWORD len = WideCharToMultiByte(\n        CP_UTF8,\n        0,\n        info_->FileName,\n        info_->FileNameLength / sizeof(WCHAR),\n        nameBuf_,\n        sizeof(nameBuf_) - 1,\n        nullptr,\n        nullptr);\n\n    if (len <= 0) {\n      throw std::system_error(\n          GetLastError(), std::system_category(), \"WideCharToMultiByte\");\n    }\n\n    nameBuf_[len] = 0;\n\n    // Populate stat info to speed up the crawler() routine\n    ent_.stat = FileInformation(info_->FileAttributes);\n    FILETIME_LARGE_INTEGER_to_timespec(info_->CreationTime, &ent_.stat.ctime);\n    FILETIME_LARGE_INTEGER_to_timespec(info_->LastAccessTime, &ent_.stat.atime);\n    FILETIME_LARGE_INTEGER_to_timespec(info_->LastWriteTime, &ent_.stat.mtime);\n    ent_.stat.size = info_->EndOfFile.QuadPart;\n\n    // Advance the pointer to the next entry ready for the next read\n    info_ = info_->NextEntryOffset == 0\n        ? nullptr\n        : (FILE_FULL_DIR_INFO*)(((char*)info_) + info_->NextEntryOffset);\n\n    return &ent_;\n  }\n\n  const DirEntry* readDirWin7() {\n    // FileFullDirectoryInfo is not supported prior to Windows 8\n    WIN32_FIND_DATAW findFileData;\n    bool success;\n\n    if (!hDirFind_) {\n      std::wstring strWPath(dirWPath_);\n      strWPath += L\"\\\\*\";\n\n      hDirFind_ = FindFirstFileW(strWPath.c_str(), &findFileData);\n      success = hDirFind_ != INVALID_HANDLE_VALUE;\n    } else {\n      success = FindNextFileW(hDirFind_, &findFileData);\n    }\n    if (!success) {\n      if (GetLastError() == ERROR_NO_MORE_FILES) {\n        return nullptr;\n      }\n\n      throw std::system_error(\n          GetLastError(),\n          std::system_category(),\n          hDirFind_ ? \"FindNextFileW\" : \"FindFirstFileW\");\n    }\n\n    DWORD len = WideCharToMultiByte(\n        CP_UTF8,\n        0,\n        findFileData.cFileName,\n        -1,\n        nameBuf_,\n        sizeof(nameBuf_) - 1,\n        nullptr,\n        nullptr);\n\n    if (len <= 0) {\n      throw std::system_error(\n          GetLastError(), std::system_category(), \"WideCharToMultiByte\");\n    }\n\n    nameBuf_[len] = 0;\n\n    // Populate stat info to speed up the crawler() routine\n    ent_.stat = FileInformation(findFileData.dwFileAttributes);\n    FILETIME_to_timespec(&findFileData.ftCreationTime, &ent_.stat.ctime);\n    FILETIME_to_timespec(&findFileData.ftLastAccessTime, &ent_.stat.atime);\n    FILETIME_to_timespec(&findFileData.ftLastWriteTime, &ent_.stat.mtime);\n\n    LARGE_INTEGER fileSize;\n    fileSize.HighPart = findFileData.nFileSizeHigh;\n    fileSize.LowPart = findFileData.nFileSizeLow;\n    ent_.stat.size = fileSize.QuadPart;\n\n    return &ent_;\n  }\n};\n} // namespace\n\nstd::unique_ptr<DirHandle> openDir(const char* path, bool strict) {\n  return std::make_unique<WinDirHandle>(path, strict);\n}\n\n#endif\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fs/WindowsTime.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/WindowsTime.h\"\n#include <stdint.h>\n#include \"watchman/watchman_time.h\"\n\nnamespace watchman {\n\n#ifdef _WIN32\n\nnamespace {\n\n// 100's of nanoseconds since the FILETIME epoch\nstatic constexpr uint64_t EPOCH = ((uint64_t)116444736000000000ULL);\n\n} // namespace\n\n// FILETIME is expressed in 100's of nanoseconds\nvoid FILETIME_LARGE_INTEGER_to_timespec(LARGE_INTEGER ft, timespec* ts) {\n  static const uint32_t factor = WATCHMAN_NSEC_IN_SEC / 100;\n\n  ft.QuadPart -= EPOCH;\n  ts->tv_sec = ft.QuadPart / factor;\n  ft.QuadPart -= ts->tv_sec * factor;\n  ts->tv_nsec = ft.QuadPart * 100;\n}\n\nvoid FILETIME_to_timespec(const FILETIME* ft, timespec* ts) {\n  LARGE_INTEGER li;\n\n  li.HighPart = ft->dwHighDateTime;\n  li.LowPart = ft->dwLowDateTime;\n\n  FILETIME_LARGE_INTEGER_to_timespec(li, ts);\n}\n\n#endif\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fs/WindowsTime.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/portability/SysTime.h>\n#include <time.h>\n\nnamespace watchman {\n\n#ifdef _WIN32\n\nvoid FILETIME_to_timespec(const FILETIME* ft, timespec* ts);\nvoid FILETIME_LARGE_INTEGER_to_timespec(LARGE_INTEGER ft, timespec* ts);\n\n#endif\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/fuzz/BUCK",
    "content": "load(\"@fbcode//security/lionhead/harnesses:defs.bzl\", \"cpp_lionhead_harness\")\nload(\"@fbsource//xplat/security/lionhead:defs.bzl\", \"Metadata\", \"SUBSET_OF_EMPLOYEES\", \"Severity\")\n\noncall(\"scm_client_infra\")\n\nwatchman_metadata = Metadata(\n    exposure = SUBSET_OF_EMPLOYEES,\n    project = \"watchman\",\n    severity_denial_of_service = Severity.FILE_SECURITY_TASK,\n    severity_service_takeover = Severity.FILE_SECURITY_TASK,\n)\n\ncpp_lionhead_harness(\n    name = \"bser_decode\",\n    srcs = [\n        \"BserDecode.cpp\",\n    ],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    context_task = \"T131981406\",  #TODO: This is a template task. Please create your own copy and insert meaningful context for this fuzzer. Otherwise, security engineers will not know how to handle security issues found by this harness.\n    metadata = watchman_metadata,\n    deps = [\n        \"//watchman:bser\",\n    ],\n)\n\ncpp_lionhead_harness(\n    name = \"json_decode\",\n    srcs = [\n        \"JsonDecode.cpp\",\n    ],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    context_task = \"T131981406\",  #TODO: This is a template task. Please create your own copy and insert meaningful context for this fuzzer. Otherwise, security engineers will not know how to handle security issues found by this harness.\n    metadata = watchman_metadata,\n    deps = [\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_lionhead_harness(\n    name = \"pybser_decode\",\n    srcs = [\n        \"PyBserDecode.cpp\",\n    ],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    context_task = \"T131981406\",  #TODO: This is a template task. Please create your own copy and insert meaningful context for this fuzzer. Otherwise, security engineers will not know how to handle security issues found by this harness.\n    metadata = watchman_metadata,\n    deps = [\n        \"//watchman/python/pywatchman:bserimpl\",\n    ],\n)\n"
  },
  {
    "path": "watchman/fuzz/BserDecode.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/bser.h\"\n\nextern \"C\" int LLVMFuzzerTestOneInput(void const* data, size_t size) {\n  auto* d = reinterpret_cast<const char*>(data);\n  try {\n    bunser(d, d + size);\n  } catch (const BserParseError&) {\n    // Caught parse errors are okay.\n  }\n  return 0;\n}\n"
  },
  {
    "path": "watchman/fuzz/JsonDecode.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nextern \"C\" int LLVMFuzzerTestOneInput(void const* data, size_t size) {\n  json_error_t err{};\n  auto* d = reinterpret_cast<const char*>(data);\n  try {\n    json_loadb(d, size, JSON_DECODE_ANY, &err);\n  } catch (std::exception&) {\n    // Catchable exceptions are okay.\n  }\n  return 0;\n}\n"
  },
  {
    "path": "watchman/fuzz/PyBserDecode.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/python/pywatchman/bser.h\"\n\nextern \"C\" int LLVMFuzzerTestOneInput(void const* data, size_t size) {\n  // libfuzzer is not happy if Py_Initialize initializes signal handlers.\n  Py_InitializeEx(0);\n\n  auto* d = reinterpret_cast<const char*>(data);\n  unser_ctx_t ctx{};\n  ctx.is_mutable = false;\n  ctx.value_encoding = nullptr;\n  ctx.value_errors = nullptr;\n  ctx.bser_version = 1;\n  ctx.bser_capabilities = 0;\n\n  PyObject* parsed = bser_loads_recursive(&d, d + size, &ctx);\n  if (!parsed) {\n    // Raised parse errors are okay.\n    PyErr_Clear();\n    return 0;\n  }\n  Py_DECREF(parsed);\n  return 0;\n}\n"
  },
  {
    "path": "watchman/integration/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_binary.bzl\", \"cpp_binary\")\nload(\"@fbcode_macros//build_defs:native_rules.bzl\", \"buck_filegroup\")\nload(\"@fbcode_macros//build_defs:python_integration_test.bzl\", \"python_integration_test\")\nload(\"@fbcode_macros//build_defs:python_unittest.bzl\", \"python_unittest\")\nload(\":defs.bzl\", \"integration_env\")\n\noncall(\"scm_client_infra\")\n\ncpp_binary(\n    name = \"cppclient\",\n    srcs = [\"cppclient.cpp\"],\n    deps = [\n        \"fbsource//third-party/glog:glog\",\n        \"//folly/init:init\",\n        \"//folly/io:fs_util\",\n        \"//folly/io/async:event_base_thread\",\n        \"//folly/json:dynamic\",\n        \"//folly/testing:test_util\",\n        \"//watchman/cppclient:cppclient\",\n    ],\n)\n\nbuck_filegroup(\n    name = \"integration-helpers\",\n    srcs = [\n        \"cat.py\",\n        \"site_spawn.py\",\n        \"site_spawn_fail.py\",\n        \"touch.py\",\n        \"trig.py\",\n        \"trig-cwd.py\",\n        \"trigjson.py\",\n    ],\n)\n\n# fbsource/third-party/pcre is not available in @mode/mac at this time, so temporarily\n# exclude tests that depend on PCRE from the @mode/mac PCRE build.\npython_unittest(\n    name = \"pcre\",\n    srcs = [\n        \"test_capabilities.py\",\n        \"test_pcre.py\",\n    ],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    env = integration_env(),\n    supports_static_listing = False,\n    typing = True,\n    deps = [\n        \"//watchman/integration/lib:lib\",\n        \"//watchman/python/pywatchman:pywatchman\",\n    ],\n)\n\npython_integration_test(\n    name = \"integration\",\n    srcs = glob(\n        [\"test_*.py\"],\n        exclude = [\n            \"test_capabilities.py\",\n            \"test_pcre.py\",\n        ],\n    ),\n    env = integration_env({\"WATCHMAN_TEST_CONFIG\": '{\"parallel_crawl_thread_count\":4}'}),\n    supports_static_listing = False,\n    typing = True,\n    deps = [\n        \"//watchman/integration/lib:lib\",\n        \"//watchman/python/pywatchman:pywatchman\",\n    ],\n)\n"
  },
  {
    "path": "watchman/integration/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nadd_fb_python_library(integration_lib\n  SOURCES\n    lib/__init__.py\n    lib/Interrupt.py\n    lib/TempDir.py\n    lib/WatchmanEdenTestCase.py\n    lib/WatchmanInstance.py\n    lib/WatchmanSCMTestCase.py\n    lib/WatchmanTestCase.py\n    lib/node.py\n    lib/path_utils.py\n)\n\nfile(GLOB TEST_MODULES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} \"test_*.py\")\n\n# TODO: hook up these tests:\nlist(REMOVE_ITEM TEST_MODULES\n  test_eden_journal.py\n  test_eden_pathgen.py\n  test_eden_sha1.py\n  test_eden_since.py\n  test_eden_subscribe.py\n  test_eden_unmount.py\n  test_eden_watch_root.py\n  test_nodejs.py\n  test_wm_wait.py\n  test_pcre.py\n)\n\nadd_fb_python_unittest(test_py\n  SOURCES\n    ${TEST_MODULES}\n\n  DEPENDS\n    pywatchman\n    integration_lib\n\n  WORKING_DIRECTORY\n    ${CMAKE_BINARY_DIR}\n\n  ENV\n    \"YARN_PATH=${YARN}\"\n    \"NODE_BIN=${NODE}\"\n    \"HGUSER=John Smith <smith@example.com>\"\n    \"NOSCMLOG=1\"\n    \"WATCHMAN_EMPTY_ENV_VAR=\"\n    \"WATCHMAN_NO_SPAWN=1\"\n    \"WATCHMAN_BINARY=$<TARGET_FILE:watchman>\"\n    \"WATCHMAN_WAIT_PATH=$<TARGET_PROPERTY:watchman-wait.GEN_PY_EXE,EXECUTABLE>\"\n    \"WATCHMAN_SRC_DIR=${CMAKE_SOURCE_DIR}/watchman\"\n)\n"
  },
  {
    "path": "watchman/integration/__init__.py",
    "content": ""
  },
  {
    "path": "watchman/integration/capabilities.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar assert = require('assert');\nvar watchman = require('fb-watchman');\n\nfunction optional() {\n  var client = new watchman.Client();\n  client.capabilityCheck({optional: ['will-never-exist']},\n      function (error, resp) {\n        assert.equal(error, null, 'no errors');\n        assert.equal(resp.capabilities['will-never-exist'], false);\n        client.end();\n      });\n}\noptional();\n\nfunction required() {\n  var client = new watchman.Client();\n  client.capabilityCheck({required: ['will-never-exist']},\n      function (error, resp) {\n        assert.equal('client required capability `will-never-exist` is not' +\n                     ' supported by this server', error.message);\n        client.end();\n      });\n}\nrequired();\n\nfunction synth() {\n  var client = new watchman.Client();\n\n  resp = client._synthesizeCapabilityCheck({version: '1.0'},\n      ['will-never-exist'], []);\n  assert.equal(resp.capabilities['will-never-exist'], false);\n\n  resp = client._synthesizeCapabilityCheck({version: '3.2'},\n      ['relative_root'], []);\n  assert.equal(resp.capabilities['relative_root'], false);\n\n  resp = client._synthesizeCapabilityCheck({version: '3.3'},\n      ['relative_root'], []);\n  assert.equal(resp.capabilities['relative_root'], true);\n\n  resp = client._synthesizeCapabilityCheck({version: '1.0'},\n      [], ['will-never-exist']);\n  assert.equal('client required capability `will-never-exist` is not' +\n               ' supported by this server', resp.error);\n}\nsynth();\n\n"
  },
  {
    "path": "watchman/integration/case.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar assert = require('assert');\nvar watchman = require('fb-watchman');\nvar client = new watchman.Client();\nconst fs = require('fs');\nconst os = require('os');\nconst path = require('path');\n\nvar platform = os.platform();\nif (platform == 'darwin' || platform == 'win32') {\n  var tmp = fs.realpathSync(process.env.TMPDIR);\n  var foo = path.join(tmp, 'foo');\n  var FOO = path.join(tmp, 'FOO');\n\n  fs.mkdir(FOO, function(err_mk_dir_foo) {\n    assert.equal(err_mk_dir_foo, null, 'no errors');\n    var bar = path.join(foo, 'bar');\n    var BAR = path.join(FOO, 'bar');\n\n    fs.mkdir(BAR, function(err_mk_dir_bar) {\n      assert.equal(err_mk_dir_bar, null, 'no errors');\n\n      client.command(['watch', bar], function (error, resp) {\n        assert.equal('RootResolveError: unable to resolve root ' + bar\n                      + \": \\\"\" + bar + \"\\\" resolved to \\\"\" + BAR\n                      + \"\\\" but we were unable to examine \\\"\"\n                      + bar + \"\\\" using strict \"\n                      + \"case sensitive rules.  Please check each component of the path and make \"\n                      + \"sure that that path exactly matches the correct case of the files on your \"\n                      + \"filesystem.\"\n                      , error.message);\n        client.end();\n      });\n    });\n  });\n}\n"
  },
  {
    "path": "watchman/integration/cat.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport sys\n\n\nargs = sys.argv[1:]\n\nif not args:\n    args = [\"-\"]\n\nfor file_name in args:\n    if file_name == \"-\":\n        sys.stdout.write(sys.stdin.read())\n    else:\n        with open(file_name, \"rb\") as f:\n            sys.stdout.write(f.read())\n"
  },
  {
    "path": "watchman/integration/cppclient.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/cppclient/WatchmanClient.h\"\n\n#include <atomic>\n#include <chrono>\n#include <condition_variable>\n#include <mutex>\n#include <thread>\n\n#include <folly/init/Init.h>\n#include <folly/io/FsUtil.h>\n#include <folly/io/async/EventBaseThread.h>\n#include <folly/json/json.h>\n#include <folly/testing/TestUtil.h>\n#include <glog/logging.h>\n\nusing namespace folly;\nusing namespace watchman;\nusing namespace std::chrono;\n\nint main(int argc, char** argv) {\n  const folly::Init init(&argc, &argv);\n\n  system(\"rm -f hit\");\n\n  folly::EventBaseThread ebt;\n  auto eb = ebt.getEventBase();\n\n  Promise<Unit> errorCallbackTrigger;\n  WatchmanClient c(\n      eb, std::nullopt, nullptr, [&errorCallbackTrigger](exception_wrapper&) {\n        LOG(INFO) << \"Expected global error caught\";\n        errorCallbackTrigger.setValue();\n      });\n  c.connect().get();\n  LOG(INFO) << \"Connected to watchman\";\n\n  std::mutex mutex;\n  std::condition_variable cv;\n  std::atomic_bool hit(false);\n\n  auto current_dir = fs::current_path().string();\n  WatchPathPtr current_dir_ptr = c.watch(current_dir).get();\n  dynamic query = dynamic::object(\"fields\", dynamic::array(\"name\"))(\n      \"expression\", dynamic::array(\"name\", \"hit\"));\n  auto sub = c.subscribe(\n                  query,\n                  current_dir,\n                  eb,\n                  [&](Try<dynamic>&& data) {\n                    // Skip \"state-enter\" and \"state-leave\" updates that\n                    // don't describe filesystem changes\n                    if (data->get_ptr(\"files\") == nullptr) {\n                      return;\n                    }\n                    if ((*data)[\"is_fresh_instance\"].getBool()) {\n                      return;\n                    } else {\n                      if ((*data)[\"files\"][0].getString().find(\"hit\") !=\n                          std::string::npos) {\n                        LOG(INFO) << \"Got hit\";\n                        std::unique_lock<std::mutex> lock(mutex);\n                        hit = true;\n                        cv.notify_all();\n                      }\n                    }\n                  },\n                  \"cppclient-integration\")\n                 .wait()\n                 .value();\n\n  {\n    // By creating a subscription above, we ensured that Watchman is already\n    // watching the current directory. Now create and watch a subdirectory.\n    // Watchman will reuse the watch root, but return results as though it were\n    // watching only the subdirectory.\n    LOG(INFO) << \"Testing relative paths\";\n    auto subdir = folly::test::TemporaryDirectory{/*namePrefix=*/\"\",\n                                                  /*dir=*/current_dir};\n    LOG(INFO) << \"Created \" << subdir.path();\n    auto empty_file_path = subdir.path() / \"empty_file\";\n    auto empty_file_relative_path =\n        fs::relative(empty_file_path, subdir.path());\n    {\n      auto empty_file = std::ofstream{empty_file_path};\n      if (!empty_file) {\n        LOG(ERROR) << \"Failed to create \" << empty_file_path;\n        return 1;\n      }\n      LOG(INFO) << \"Created \" << empty_file_path;\n    }\n    dynamic relative_query = dynamic::object(\"fields\", dynamic::array(\"name\"))(\n        \"expression\",\n        dynamic::array(\"name\", empty_file_relative_path.string()));\n    auto subdir_ptr = c.watch(subdir.path().string()).get();\n    auto result = c.query(relative_query, subdir_ptr).get();\n    if (result.raw_[\"files\"].empty()) {\n      LOG(ERROR) << \"FAIL: No files found in \" << folly::toJson(result.raw_);\n      return 1;\n    }\n    if (result.raw_[\"files\"][0].getString() != empty_file_relative_path) {\n      LOG(ERROR) << \"FAIL: Expected a file named \" << empty_file_relative_path\n                 << \", got \" << fs::path{result.raw_[\"files\"][0].getString()}\n                 << \" in \" << folly::toJson(result.raw_);\n      return 1;\n    }\n    LOG(INFO) << \"PASS: Watchman returned \" << empty_file_relative_path\n              << \" and not \" << fs::relative(empty_file_path, current_dir);\n  }\n\n  LOG(INFO) << \"Triggering subscription\";\n  auto clock_before_hit = c.getClock(current_dir_ptr).get();\n  system(\"touch hit\");\n  LOG(INFO) << \"Waiting for hit.\";\n  std::unique_lock<std::mutex> lock(mutex);\n  auto now = std::chrono::system_clock::now();\n  if (!cv.wait_until(lock, now + seconds(5), [&]() { return (bool)hit; })) {\n    LOG(ERROR) << \"FAIL: timeout/no hit\";\n    return 1;\n  }\n  hit = false;\n\n  LOG(INFO) << \"Testing one-off query\";\n  auto data =\n      c.query(\n           dynamic::object(\"expression\", dynamic::array(\"name\", \"hit\"))(\n               \"fields\", dynamic::array(\"name\"))(\"since\", clock_before_hit),\n           current_dir_ptr)\n          .get();\n  if (data.raw_[\"files\"][0].getString().find(\"hit\") == std::string::npos) {\n    LOG(ERROR) << \"FAIL: one-off query missed the hit file\";\n    return 1;\n  } else {\n    LOG(INFO) << \"PASS: one-off query saw the touched hit file\";\n  }\n\n  LOG(INFO) << \"Flushing subscription\";\n  auto flush_res =\n      c.flushSubscription(sub, std::chrono::milliseconds(1000)).wait().value();\n  if (flush_res.find(\"no_sync_needed\") == flush_res.items().end() ||\n      !flush_res.find(\"no_sync_needed\")->second.isArray() ||\n      !(flush_res.find(\"no_sync_needed\")->second.size() == 1) ||\n      !(flush_res.find(\"no_sync_needed\")->second[0] ==\n        \"cppclient-integration\")) {\n    LOG(ERROR) << \"FAIL: unexpected flush result \" << toJson(flush_res);\n    return 1;\n  }\n  LOG(INFO) << \"PASS: flush response looks okay\";\n\n  LOG(INFO) << \"Unsubscribing\";\n  c.unsubscribe(sub).wait();\n  LOG(INFO) << \"Trying to falsely trigger subscription\";\n  system(\"rm hit\");\n  /* sleep override */ std::this_thread::sleep_for(std::chrono::seconds(3));\n  if (hit) {\n    LOG(ERROR) << \"FAIL: still got a hit\";\n    return 1;\n  }\n  LOG(INFO) << \"PASS: didn't see false trigger after 3 seconds\";\n\n  LOG(INFO) << \"Testing error handling\";\n  Promise<Unit> subErrorCallbackTrigger;\n  c.subscribe(\n       query,\n       current_dir,\n       eb,\n       [&](folly::Try<dynamic>&& data) {\n         if (data.hasException()) {\n           LOG(INFO) << \"Expected subcription error caught\";\n           subErrorCallbackTrigger.setValue();\n         }\n       },\n       \"cppclient-integration\")\n      .wait()\n      .value();\n  c.getConnection().forceEOF();\n  try {\n    errorCallbackTrigger.getFuture().within(seconds(1)).wait().value();\n  } catch (FutureTimeout&) {\n    LOG(ERROR) << \"FAIL: did not get callback from global error handler\";\n    return 1;\n  }\n  try {\n    subErrorCallbackTrigger.getFuture().within(seconds(1)).wait().value();\n  } catch (FutureTimeout&) {\n    LOG(ERROR) << \"FAIL: did not get subscription error\";\n    return 1;\n  }\n  LOG(INFO) << \"PASS: caught expected errors\";\n\n  return 0;\n}\n"
  },
  {
    "path": "watchman/integration/eden/BUCK",
    "content": "load(\"@fbcode//eden:defs.bzl\", \"get_test_env_and_deps\")\nload(\"@fbcode//watchman/integration:defs.bzl\", \"eden_integration_env\")\nload(\"@fbcode_macros//build_defs:python_unittest.bzl\", \"python_unittest\")\n\noncall(\"scm_client_infra\")\n\nartifacts = get_test_env_and_deps(\"-oss\")\n\npython_unittest(\n    name = \"eden\",\n    srcs = glob([\"test_eden*.py\"]),\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    env = eden_integration_env(artifacts[\"env\"]),\n    typing = True,\n    deps = [\n        \"//eden/fs/service:thrift-python-types\",\n        \"//eden/integration/lib:lib\",\n        \"//watchman/integration/lib:lib\",\n        \"//watchman/python/pywatchman:pywatchman\",\n    ],\n)\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_glob_upper_bound.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport re\nfrom typing import Any, Dict, List, Optional\n\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\ndef populate(\n    repo, threshold: Optional[int] = None, extra_files: Optional[List[str]] = None\n) -> None:\n    # We ignore \".hg\" here just so some of the tests that list files don't have to\n    # explicitly filter out the contents of this directory.  However, in most situations\n    # the .hg directory normally should not be ignored.\n    config: Dict[str, Any] = {\"ignore_dirs\": [\".hg\"]}\n    if threshold:\n        config[\"eden_file_count_threshold_for_fresh_instance\"] = threshold\n    config[\"eden_enable_glob_upper_bounds\"] = True\n    repo.write_file(\".watchmanconfig\", json.dumps(config))\n    repo.write_file(\"hello\", \"hola\\n\")\n    repo.write_file(\"adir/file\", \"foo!\\n\")\n    repo.write_file(\"bdir/test.sh\", \"#!/bin/bash\\necho test\\n\", mode=0o755)\n    repo.write_file(\"bdir/noexec.sh\", \"#!/bin/bash\\necho test\\n\")\n    repo.symlink(\"slink\", \"hello\")\n    if extra_files:\n        for extra_file in extra_files:\n            repo.write_file(extra_file, \"\")\n    repo.commit(\"initial commit.\")\n\n\nclass TestEdenGlobUpperBound(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def setUp(self):\n        super().setUp()\n        self.watchmanCommand(\"log-level\", \"debug\")\n\n    def test_eden_since_upper_bound(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"allof\",\n                    [\"type\", \"f\"],\n                    [\n                        \"anyof\",\n                        [\"dirname\", \"adir\"],\n                        [\"match\", \"bdir/**\", \"wholename\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"adir/file\", \"bdir/test.sh\", \"bdir/noexec.sh\"],\n        )\n        self.assertGlobUpperBound({\"adir/**\", \"bdir/**\"})\n\n    def test_eden_trailing_slash(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"allof\", [\"type\", \"f\"], [\"dirname\", \"adir/\"]],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [\"adir/file\"])\n        self.assertGlobUpperBound({\"adir/**\"})\n\n    def test_eden_since_empty_upper_bound(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"allof\",\n                    [\"type\", \"f\"],\n                    [\"false\"],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [],\n        )\n        self.assertGlobUpperBound([])\n\n    def test_eden_since_upper_bound_case_insensitive(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(\n                repo, extra_files=[\"mixedCASE/file1\", \"MIXEDcase/file2\"]\n            )\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"idirname\", \"MixedCase\"],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"mixedCASE/file1\", \"MIXEDcase/file2\"],\n        )\n        self.assertGlobUpperBound(\n            (\n                # We can't bound this query with a glob on a case-sensitive FS.\n                None if self.isCaseSensitiveMount(root) else {\"mixedcase/**\"}\n            )\n        )\n\n    def test_eden_since_upper_bound_includedotfiles(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(\n                repo, extra_files=[\"dotfiles/.file1\", \"dotfiles/.file2\"]\n            )\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"match\",\n                    \"dotfiles/*\",\n                    \"wholename\",\n                    {\"includedotfiles\": True},\n                ],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"dotfiles/.file1\", \"dotfiles/.file2\"],\n        )\n        self.assertGlobUpperBound({\"dotfiles/*\"})\n\n    def test_eden_since_upper_bound_name_escaping(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(repo, extra_files=[\"a*b\", \"[?\"])\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"name\",\n                    [\"a*b\", \"[?\"],\n                    \"wholename\",\n                ],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"a*b\", \"[?\"],\n        )\n        self.assertGlobUpperBound({r\"a\\*b\", r\"\\[\\?\"})\n\n    def test_eden_since_upper_bound_name_normalization(self) -> None:\n        root = self.makeEdenMount(lambda repo: populate(repo, extra_files=[\"a/b\"]))\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"name\",\n                    r\"a\\b\",\n                    \"wholename\",\n                ],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"a/b\"],\n        )\n        self.assertGlobUpperBound({\"a/b\"})\n\n    def test_eden_since_upper_bound_name_set_normalization(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(repo, extra_files=[\"a/b\", \"a/c\"])\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"name\",\n                    [r\"a\\b\", r\"a\\c\"],\n                    \"wholename\",\n                ],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"a/b\", \"a/c\"],\n        )\n        self.assertGlobUpperBound({\"a/b\", \"a/c\"})\n\n    def test_eden_since_upper_bound_match_noescape(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(repo, extra_files=[r\"a\\b\", r\"a\\c\", r\"a\\?\"])\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                # Match a literal 'a\\' followed by any character\n                \"expression\": [\"match\", r\"a\\?\", \"wholename\", {\"noescape\": True}],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [r\"a\\b\", r\"a\\c\", r\"a\\?\"],\n        )\n        self.assertGlobUpperBound({r\"a\\\\?\"})\n\n    def test_eden_since_upper_bound_match_escape(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(repo, extra_files=[r\"a\\b\", r\"a\\c\", r\"a\\?\"])\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                # Match a literal 'a\\' followed by any character\n                \"expression\": [\"match\", r\"a\\\\?\", \"wholename\"],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [r\"a\\b\", r\"a\\c\", r\"a\\?\"],\n        )\n        self.assertGlobUpperBound({r\"a\\\\?\"})\n\n    def test_eden_since_upper_bound_dirname_escaping(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(repo, extra_files=[\"a*b/c\", \"abbb/d\"])\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"dirname\", \"a*b\"],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"a*b/c\"],\n        )\n        self.assertGlobUpperBound({r\"a\\*b/**\"})\n\n    def test_eden_since_upper_bound_match_complex_pattern(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(\n                repo,\n                extra_files=[\n                    # match\n                    \"a0c/_/_/_.txt\",\n                    \"abc/_/_.txt\",\n                    \"Abc/_/_.txt\",\n                    \"abc/_/_/_.txt\",\n                    \"acc/_/_/_.txt\",\n                    # no match\n                    \"0bc/_/_.txt\",\n                    \"abc/_.txt\",\n                    \"abc/_/_.txz\",\n                    \"abz/_/_.txt\",\n                ],\n            )\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"match\",\n                    \"[[:alpha:]]?[^z]/*/**/*.tx[t]\",\n                    \"wholename\",\n                ],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\n                \"a0c/_/_/_.txt\",\n                \"abc/_/_.txt\",\n                \"Abc/_/_.txt\",\n                \"abc/_/_/_.txt\",\n                \"acc/_/_/_.txt\",\n            ],\n        )\n        self.assertGlobUpperBound({\"[[:alpha:]]?[^z]/*/**\"})\n\n    def assertGlobUpperBound(self, expected_patterns) -> None:\n        if expected_patterns is None:\n            pat_summary = re.compile(r\".*Did not find a glob upper bound on query\\.\")\n        else:\n            pat_summary = re.compile(\n                r\".*Found \"\n                + f\"{len(set(expected_patterns))}\"\n                + r\" glob pattern\\(s\\) as upper bound on query\\.\"\n            )\n\n        self.assertWaitFor(\n            lambda: any(\n                pat_summary.match(summary_line)\n                for summary_line in self.getServerLogContents()\n            ),\n            message=\"logs ready\",\n            timeout=5,\n        )\n\n        pat_one_pattern = re.compile(\".*Glob upper bound pattern: (.+)$\")\n\n        matches = (\n            pat_one_pattern.match(pattern_line)\n            for pattern_line in self.getServerLogContents()\n        )\n        patterns = {match.group(1) for match in filter(None, matches)}\n\n        self.assertSetEqual(\n            patterns, set(expected_patterns) if expected_patterns else set()\n        )\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_journal.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport time\nfrom os import path\n\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\nclass TestEdenJournal(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_eden_journal(self) -> None:\n        def populate(repo):\n            repo.write_file(\"hello\", \"hola\\n\")\n            repo.commit(\"initial commit.\")\n\n        root = self.makeEdenMount(populate)\n        repo = self.repoForPath(root)\n        initial_commit = repo.get_head_hash()\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        clock = self.watchmanCommand(\"clock\", root)\n\n        self.touchRelative(root, \"newfile\")\n\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"], \"since\": clock})\n        clock = res[\"clock\"]\n        self.assertFileListsEqual(res[\"files\"], [\"newfile\"])\n\n        repo.add_file(\"newfile\")\n        repo.commit(message=\"add newfile\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"dirname\", \".hg\"],\n                        [\"match\", \"checklink*\"],\n                        [\"match\", \"hg-check*\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": clock,\n            },\n        )\n        clock = res[\"clock\"]\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"newfile\"],\n            message=\"We expect to report the files changed in the commit\",\n        )\n\n        # Test the the journal has the correct contents across a \"reset\" like\n        # operation where the parents are poked directly.   This is using\n        # debugsetparents rather than reset because the latter isn't enabled\n        # by default for hg in the watchman test machinery.\n        self.touchRelative(root, \"unclean\")\n        repo.hg(\"debugsetparents\", initial_commit)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"not\", [\"dirname\", \".hg\"]],\n                \"fields\": [\"name\"],\n                \"since\": clock,\n            },\n        )\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"newfile\", \"unclean\"],\n            message=(\n                \"We expect to report the file changed in the commit \"\n                \"as well as the unclean file\"\n            ),\n        )\n\n        # make sure that we detect eden getting unmounted.  This sleep is unfortunate\n        # and ugly.  Without it, the unmount will fail because something is accessing\n        # the filesystem.  I haven't been able to find out what it is because fuser\n        # takes too long to run and by the time it has run, whatever that blocker\n        # was is not longer there.  Ordinarily I'd prefer to poll on some condition\n        # in a loop rather than just sleeping an arbitrary amount, but I just don't\n        # know what the offending thing is and running the unmount in a loop is prone\n        # to false negatives.\n        time.sleep(1)\n\n        eden = self.eden\n        assert eden is not None\n        eden.remove(root)\n        watches = self.watchmanCommand(\"watch-list\")\n        self.assertNotIn(root, watches[\"roots\"])\n\n    def test_two_rapid_checkouts_show_briefly_changed_files(self) -> None:\n        initial_commit = None\n        add_commit = None\n        remove_commit = None\n\n        def populate(repo):\n            nonlocal initial_commit, add_commit, remove_commit\n            repo.write_file(\"hello\", \"hola\\n\")\n            initial_commit = repo.commit(\"initial commit.\")\n\n            repo.write_file(\"newfile\", \"contents\\n\")\n            add_commit = repo.commit(\"add newfile\")\n\n            repo.remove_file(\"newfile\")\n            remove_commit = repo.commit(\"remove newfile\")\n\n        root = self.makeEdenMount(populate)\n        repo = self.repoForPath(root)\n\n        # Synchronize to the initial commit.\n        repo.update(initial_commit, clean=True)\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n        clock = self.watchmanCommand(\"clock\", root)\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"], \"since\": clock})\n        clock = res[\"clock\"]\n\n        # Update to the latest commit, through the intermediate.\n        repo.update(add_commit)\n        repo.update(remove_commit)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"dirname\", \".hg\"],\n                        [\"match\", \"checklink*\"],\n                        [\"match\", \"hg-check*\"],\n                    ],\n                ],\n                \"fields\": [\"name\", \"new\"],\n                \"since\": clock,\n            },\n        )\n\n        res = self.normalizeFiles(res)\n\n        self.assertCountEqual(\n            res[\"files\"],\n            [{\"name\": \"newfile\", \"new\": False}],\n            \"Files created and removed across the update operation should show up in the changed list\",\n        )\n\n    def test_aba_checkouts_show_briefly_changed_files(self) -> None:\n        initial_commit = None\n        add_commit = None\n\n        def populate(repo):\n            nonlocal initial_commit, add_commit\n            repo.write_file(\"hello\", \"hola\\n\")\n            initial_commit = repo.commit(\"initial commit.\")\n\n            repo.write_file(\"newfile\", \"contents\\n\")\n            add_commit = repo.commit(\"add newfile\")\n\n        root = self.makeEdenMount(populate)\n        repo = self.repoForPath(root)\n\n        # Synchronize to the initial commit.\n        repo.update(initial_commit, clean=True)\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n        clock = self.watchmanCommand(\"clock\", root)\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"], \"since\": clock})\n        clock = res[\"clock\"]\n\n        # Update to a new file and back to the initial commit, expecting to see the modified file show up in the change list.\n        repo.update(add_commit)\n        repo.update(initial_commit)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"dirname\", \".hg\"],\n                        [\"match\", \"checklink*\"],\n                        [\"match\", \"hg-check*\"],\n                    ],\n                ],\n                \"fields\": [\"name\", \"new\"],\n                \"since\": clock,\n            },\n        )\n\n        res = self.normalizeFiles(res)\n\n        self.assertCountEqual(\n            res[\"files\"],\n            [{\"name\": \"newfile\", \"new\": False}],\n            \"Files created and removed across the update operation should show up in the changed list\",\n        )\n\n    def test_querying_with_truncated_journal_returns_fresh_instance(self) -> None:\n        def populate(repo):\n            repo.write_file(\"hello\", \"hola\\n\")\n            repo.commit(\"initial commit.\")\n\n        root = self.makeEdenMount(populate)\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        clock = self.watchmanCommand(\"clock\", root)\n\n        with self.eden.get_thrift_client_legacy() as thrift_client:\n            thrift_client.setJournalMemoryLimit(root, 0)\n            self.assertEqual(0, thrift_client.getJournalMemoryLimit(root))\n\n        # Eden's Journal always remembers at least one entry so we will\n        # do things in twos\n\n        self.touchRelative(root, \"newfile\")\n        self.touchRelative(root, \"newfile2\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\"anyof\", [\"dirname\", \".hg\"], [\"dirname\", \".eden\"]],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": clock,\n            },\n        )\n        clock = res[\"clock\"]\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"], [\"hello\", \"newfile\", \"newfile2\", \".hg\", \".eden\"]\n        )\n\n        self.removeRelative(root, \"newfile\")\n        self.removeRelative(root, \"newfile2\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\"anyof\", [\"dirname\", \".hg\"], [\"dirname\", \".eden\"]],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": clock,\n            },\n        )\n        clock = res[\"clock\"]\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [\"hello\", \".hg\", \".eden\"])\n\n    def test_changing_root_tree(self) -> None:\n        def populate(repo):\n            repo.write_file(\"hello\", \"hola\\n\")\n            repo.commit(\"initial commit.\")\n\n        root = self.makeEdenMount(populate)\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        clock = self.watchmanCommand(\"clock\", root)\n\n        # When the root tree inode changes, EdenFS will report an empty path\n        # for such change. This test ensures we handle this case well.\n        self.touchRelative(root, \"\")\n        self.touchRelative(root, \"\")\n\n        # This should not throw\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\"anyof\", [\"dirname\", \".hg\"], [\"dirname\", \".eden\"]],\n                ],\n                \"fields\": [\"name\", \"exists\"],\n                \"since\": clock,\n            },\n        )\n\n        self.assertEqual(res[\"files\"][0], {\"name\": path.basename(root), \"exists\": True})\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_pathgen.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\ndef populate(repo) -> None:\n    # We ignore \".hg\" here just so some of the tests that list files don't have to\n    # explicitly filter out the contents of this directory.  However, in most situations\n    # the .hg directory normally should not be ignored.\n    repo.write_file(\".watchmanconfig\", '{\"ignore_dirs\":[\".buckd\", \".hg\"]}')\n    repo.write_file(\"hello\", \"hola\\n\")\n    repo.write_file(\"adir/file\", \"foo!\\n\")\n    repo.write_file(\"bdir/test.sh\", \"#!/bin/bash\\necho test\\n\", mode=0o755)\n    repo.write_file(\"bdir/noexec.sh\", \"#!/bin/bash\\necho test\\n\")\n    repo.write_file(\"b*ir/star\", \"star\")\n    repo.write_file(\"b\\\\*ir/foo\", \"foo\")\n    repo.write_file(\"cdir/sub/file\", \"\")\n    repo.symlink(\"slink\", \"hello\")\n    repo.commit(\"initial commit.\")\n\n\nclass TestEdenPathGenerator(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_defer_mtime(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        # Ensure that the mtime field is loaded for rendering.\n        # The expression doesn't use timestamps but the field list does.\n        res = self.watchmanCommand(\n            \"query\", root, {\"glob\": [\"bdir/noexec.sh\"], \"fields\": [\"name\", \"mtime\"]}\n        )\n        print(res)\n        self.assertEqual(res[\"files\"][0][\"name\"], \"bdir/noexec.sh\")\n        self.assertGreater(res[\"files\"][0][\"mtime\"], 0)\n\n    def test_eden_readlink(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"allof\", [\"type\", \"l\"], [\"not\", [\"dirname\", \".eden\"]]],\n                \"fields\": [\"name\", \"symlink_target\"],\n            },\n        )\n        print(res)\n        self.assertEqual(res[\"files\"][0], {\"name\": \"slink\", \"symlink_target\": \"hello\"})\n\n    def test_non_existent_file(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n        clock = self.watchmanCommand(\"clock\", root)[\"clock\"]\n\n        # Create the file that we want to remove\n        self.touchRelative(root, \"111\")\n\n        # We need to observe this file prior to deletion, otherwise\n        # eden will optimize it out of the results after the delete\n        res = self.watchmanCommand(\n            \"query\", root, {\"since\": clock, \"fields\": [\"name\", \"mode\"]}\n        )\n        clock = res[\"clock\"]\n\n        os.unlink(os.path.join(root, \"111\"))\n        res = self.watchmanCommand(\n            \"query\", root, {\"since\": clock, \"fields\": [\"name\", \"mode\"]}\n        )\n\n        # Clunky piecemeal checks here because the `mode` value is set\n        # to something, even though it is deleted, but we cannot portably\n        # test the values from python land, so we want to check that it\n        # is non-zero\n        files = res[\"files\"]\n        self.assertEqual(len(files), 1)\n        f = files[0]\n        self.assertEqual(f[\"name\"], \"111\")\n        self.assertGreater(f[\"mode\"], 0)\n\n    def test_eden_watch(self) -> None:\n        root = self.makeEdenMount(populate)\n\n        # make sure this exists; we should not observe it in any of the results\n        # that we get back from watchman because it is listed in the ignore_dirs\n        # config section.\n        os.mkdir(os.path.join(root, \".buckd\"))\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n        self.assertFileList(\n            root,\n            self.eden_dir_entries\n            + [\n                \".eden\",\n                \".watchmanconfig\",\n                \"adir\",\n                \"adir/file\",\n                \"bdir\",\n                \"bdir/noexec.sh\",\n                \"bdir/test.sh\",\n                \"b*ir\",\n                \"b*ir/star\",\n                \"b\\\\*ir\",\n                \"b\\\\*ir/foo\",\n                \"cdir\",\n                \"cdir/sub\",\n                \"cdir/sub/file\",\n                \"hello\",\n                \"slink\",\n            ],\n        )\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\n                \".watchmanconfig\",\n                \"adir/file\",\n                \"bdir/noexec.sh\",\n                \"bdir/test.sh\",\n                \"b*ir/star\",\n                \"b\\\\*ir/foo\",\n                \"cdir/sub/file\",\n                \"hello\",\n            ],\n        )\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"type\", \"l\"], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual(res[\"files\"], self.eden_dir_entries + [\"slink\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"relative_root\": \"bdir\", \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"noexec.sh\", \"test.sh\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"glob\": [\"*.sh\"]},\n        )\n        self.assertFileListsEqual([], res[\"files\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"type\", \"f\"],\n                \"fields\": [\"name\"],\n                \"relative_root\": \"bdir\",\n                \"glob\": [\"*.sh\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"noexec.sh\", \"test.sh\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"glob\": [\"**/*.sh\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"bdir/noexec.sh\", \"bdir/test.sh\"])\n\n        # glob_includedotfiles should be False by default.\n        res = self.watchmanCommand(\n            \"query\", root, {\"fields\": [\"name\"], \"glob\": [\"**/root\"]}\n        )\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        # Verify glob_includedotfiles=True is honored in Eden.\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"fields\": [\"name\"], \"glob\": [\"**/root\"], \"glob_includedotfiles\": True},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\".eden/root\"])\n\n        res = self.watchmanCommand(\"query\", root, {\"path\": [\"\"], \"fields\": [\"name\"]})\n        self.assertFileListsEqual(\n            res[\"files\"],\n            self.eden_dir_entries\n            + [\n                \".eden\",\n                \".watchmanconfig\",\n                \"adir\",\n                \"adir/file\",\n                \"b*ir\",\n                \"b*ir/star\",\n                \"bdir\",\n                \"bdir/noexec.sh\",\n                \"bdir/test.sh\",\n                \"b\\\\*ir\",\n                \"b\\\\*ir/foo\",\n                \"cdir\",\n                \"cdir/sub\",\n                \"cdir/sub/file\",\n                \"hello\",\n                \"slink\",\n            ],\n        )\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"path\": [{\"path\": \"bdir\", \"depth\": 0}], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"bdir/noexec.sh\", \"bdir/test.sh\"])\n\n        with self.assertRaises(pywatchman.CommandError) as ctx:\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\"path\": [{\"path\": \"bdir\", \"depth\": 1}], \"fields\": [\"name\"]},\n            )\n        self.assertIn(\"only supports depth\", str(ctx.exception))\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"path\": [\"\"], \"relative_root\": \"bdir\", \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"noexec.sh\", \"test.sh\"])\n\n        # Don't wildcard match a name with a * in it\n        res = self.watchmanCommand(\n            \"query\", root, {\"path\": [{\"path\": \"b*ir\", \"depth\": 0}], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"b*ir/star\"])\n\n        # Check that the globbing stuff does the right thing\n        # with a backslash literal here.  Unfortunately, watchman\n        # has a slight blindsport with such a path; we're normalizing\n        # backslash to a forward slash in the name of portability...\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"path\": [{\"path\": \"b\\\\*ir\", \"depth\": 0}], \"fields\": [\"name\"]},\n        )\n        # ... so the path that gets encoded in the query is\n        # \"b/*ir\" and that gets expanded to \"b/\\*ir/*\" when this\n        # is mapped to a glob and passed to eden.  This same\n        # path query won't yield the correct set of matches\n        # in the non-eden case either.\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"suffix\": [\"sh\", \"js\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"bdir/noexec.sh\", \"bdir/test.sh\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"suffix\": [\"s*\"]},\n        )\n\n        # With overlapping glob patterns in the same generator, Watchman should\n        # not return duplicate results.\n        res = self.watchmanCommand(\n            \"query\", root, {\"fields\": [\"name\"], \"glob\": [\"bdir/*.sh\", \"bdir/test*\"]}\n        )\n        files = res[\"files\"]\n        self.assertFileListsEqual(\n            files,\n            [\"bdir/noexec.sh\", \"bdir/test.sh\"],\n            \"Overlapping patterns should yield no duplicates\",\n        )\n\n        # edenfs had a bug where a globFiles request like [\"foo/*\", \"foo/*/*\"] would\n        # effectively ignore the second pattern. Ensure that bug has been fixed.\n        res = self.watchmanCommand(\n            \"query\", root, {\"fields\": [\"name\"], \"glob\": [\"cdir/*\", \"cdir/*/*\"]}\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"cdir/sub\", \"cdir/sub/file\"])\n\n    def test_path_and_glob_dotfiles(self):\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        # glob_includedotfiles is false by default. Ensure it doesn't interfere\n        # with the path generator (which is a glob under the hood)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"fields\": [\"name\"],\n                \"glob\": [],\n                \"path\": [{\"path\": \"\", \"depth\": 0}],\n                \"expression\": [\"name\", \".eden\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\".eden\"])\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_query.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\ndef populate(repo) -> None:\n    # We ignore \".hg\" here just so some of the tests that list files don't have to\n    # explicitly filter out the contents of this directory.  However, in most situations\n    # the .hg directory normally should not be ignored.\n    repo.write_file(\".watchmanconfig\", '{\"ignore_dirs\":[\".hg\"]}')\n    repo.write_file(\"hello\", \"hola\\n\")\n    repo.write_file(\"world\", \"sekai\\n\")\n    repo.write_file(\"adir/file\", \"foo!\\n\")\n    repo.write_file(\"bdir/test.sh\", \"#!/bin/bash\\necho test\\n\", mode=0o755)\n    repo.write_file(\"bdir/noexec.sh\", \"#!/bin/bash\\necho test\\n\")\n    repo.symlink(\"slink\", \"hello\")\n    repo.commit(\"initial commit.\")\n\n\nclass TestEdenQuery(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_eden_path_query(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        # It should return `hello`\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"path\": [\"hello\"],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"hello\"])\n\n        # It should return files under bdir\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"path\": [\"bdir\"],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"bdir/test.sh\", \"bdir/noexec.sh\"])\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_scm.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nfrom watchman.integration.lib import WatchmanEdenTestCase\nfrom watchman.integration.lib.WatchmanSCMTestCase import HgMixin\n\n\ndef populate(repo) -> None:\n    # We ignore \".hg\" here just so some of the tests that list files don't have to\n    # explicitly filter out the contents of this directory.  However, in most situations\n    # the .hg directory normally should not be ignored.\n    repo.write_file(\".watchmanconfig\", '{\"ignore_dirs\":[\".hg\"]}')\n    repo.write_file(\"hello\", \"hola\\n\")\n    repo.commit(\"initial commit.\")\n\n\nclass TestEdenScm(WatchmanEdenTestCase.WatchmanEdenTestCase, HgMixin):\n    def test_eden_cachedScm(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        self.hg([\"book\", \"initial\"], root)\n\n        def run_scm_query():\n            res = self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"fields\": [\"name\"],\n                    \"since\": {\"scm\": {\"mergebase-with\": \"initial\"}},\n                },\n            )\n            self.assertNotEqual(res[\"clock\"][\"scm\"][\"mergebase\"], \"\")\n            self.assertEqual(res[\"clock\"][\"scm\"][\"mergebase-with\"], \"initial\")\n            return res\n\n        self.touchRelative(root, \"foo\")\n        res = run_scm_query()\n        self.assertFileListsEqual(res[\"files\"], [\"foo\"])\n\n        self.touchRelative(root, \"bar\")\n        res = run_scm_query()\n        self.assertFileListsEqual(res[\"files\"], [\"foo\", \"bar\"])\n\n        self.touchRelative(root, \"baz\")\n        res = run_scm_query()\n        self.assertFileListsEqual(res[\"files\"], [\"foo\", \"bar\", \"baz\"])\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_sha1.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport hashlib\nimport os\n\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\nclass TestEdenSha1(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def write_file_and_hash(self, filename, content) -> str:\n        content = content.encode(\"utf-8\")\n        with open(filename, \"wb\") as f:\n            f.write(content)\n\n        sha = hashlib.sha1()\n        sha.update(content)\n        return sha.hexdigest()\n\n    def test_eden_sha1(self) -> None:\n        def populate(repo):\n            repo.write_file(\"hello\", \"hola\\n\")\n            repo.write_file(\"adir/file\", \"foo!\\n\")\n            repo.write_file(\"bdir/test.sh\", \"#!/bin/bash\\necho test\\n\", mode=0o755)\n            repo.write_file(\"bdir/noexec.sh\", \"#!/bin/bash\\necho test\\n\")\n            repo.symlink(\"slink\", \"hello\")\n            repo.commit(\"initial commit.\")\n\n        root = self.makeEdenMount(populate)\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        expect_hex = self.write_file_and_hash(os.path.join(root, \"foo\"), \"hello\\n\")\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"name\", \"foo\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n        self.assertEqual(expect_hex, res[\"files\"][0][\"content.sha1hex\"])\n\n        # repeated query also works\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"name\", \"foo\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n        self.assertEqual(expect_hex, res[\"files\"][0][\"content.sha1hex\"])\n\n        # change the content and expect to see that reflected\n        # in the subsequent query\n        expect_hex = self.write_file_and_hash(os.path.join(root, \"foo\"), \"goodbye\\n\")\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"name\", \"foo\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n        self.assertEqual(expect_hex, res[\"files\"][0][\"content.sha1hex\"])\n\n        # directories have no content hash\n        os.mkdir(os.path.join(root, \"dir\"))\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"name\", \"dir\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n        self.assertEqual(None, res[\"files\"][0][\"content.sha1hex\"])\n\n        # removed files have no content hash\n        os.unlink(os.path.join(root, \"foo\"))\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"name\", \"foo\"],\n                # need to a since query so that the removed files\n                # show up in the results\n                \"since\": res[\"clock\"],\n                \"fields\": [\"name\", \"content.sha1hex\"],\n            },\n        )\n        self.assertEqual(None, res[\"files\"][0][\"content.sha1hex\"])\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_shutdown.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-strict\n\nfrom eden.integration.lib import hgrepo\nfrom watchman.integration.lib import WatchmanEdenTestCase, WatchmanInstance\n\n\nclass TestEdenShutdown(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_shutdown_and_restart(self) -> None:\n        def populate(repo: hgrepo.HgRepository) -> None:\n            repo.write_file(\"hello\", \"hola\\n\")\n            repo.commit(\"initial commit.\")\n\n        root = self.makeEdenMount(populate)\n\n        inst = WatchmanInstance.Instance()\n        _, stderr = inst.commandViaCLI([\"watch\", root])\n        self.assertEqual(stderr, b\"\")\n        _, stderr = inst.commandViaCLI([\"shutdown-server\"])\n        self.assertEqual(stderr, b\"\")\n        _, stderr = inst.commandViaCLI([\"get-sockname\"])\n        self.assertEqual(stderr, b\"\")\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_since.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\nimport shutil\nfrom typing import Any, Dict, List, Optional\n\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\ndef populate(\n    repo, threshold: Optional[int] = None, extra_files: Optional[List[str]] = None\n) -> None:\n    # We ignore \".hg\" here just so some of the tests that list files don't have to\n    # explicitly filter out the contents of this directory.  However, in most situations\n    # the .hg directory normally should not be ignored.\n    config: Dict[str, Any] = {\"ignore_dirs\": [\".hg\"]}\n    config[\"eden_use_streaming_since\"] = True\n    if threshold:\n        config[\"eden_file_count_threshold_for_fresh_instance\"] = threshold\n    config[\"eden_enable_glob_upper_bounds\"] = True\n    repo.write_file(\".watchmanconfig\", json.dumps(config))\n    repo.write_file(\"hello\", \"hola\\n\")\n    repo.write_file(\"adir/file\", \"foo!\\n\")\n    repo.write_file(\"bdir/test.sh\", \"#!/bin/bash\\necho test\\n\", mode=0o755)\n    repo.write_file(\"bdir/noexec.sh\", \"#!/bin/bash\\necho test\\n\")\n    repo.symlink(\"slink\", \"hello\")\n    if extra_files:\n        for extra_file in extra_files:\n            repo.write_file(extra_file, \"\")\n    repo.commit(\"initial commit.\")\n\n\nclass TestEdenSince(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_eden_lazy_eval(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"allof\", [\"type\", \"f\"], [\"match\", \"*.sh\"]],\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"bdir/test.sh\", \"bdir/noexec.sh\"])\n\n    def test_eden_empty_relative_root(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"type\", \"f\"],\n                \"relative_root\": \"\",\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\".watchmanconfig\", \"hello\", \"adir/file\", \"bdir/test.sh\", \"bdir/noexec.sh\"],\n        )\n\n    def test_eden_since(self) -> None:\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"since\": \"c:0:0\"},\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"hello\", \"adir/file\", \"bdir/test.sh\", \"bdir/noexec.sh\", \".watchmanconfig\"],\n        )\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"type\", \"f\"],\n                \"relative_root\": \"adir\",\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n\n        self.assertFileListsEqual(\n            res[\"files\"],\n            [\"file\"],\n            message=\"should only return adir/file with no adir prefix\",\n        )\n\n        clock = res[\"clock\"]\n\n        self.touchRelative(root, \"hello\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"since\": clock},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"hello\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\", \"new\"], \"since\": clock},\n        )\n        self.assertEqual([{\"name\": \"hello\", \"new\": False}], res[\"files\"])\n        self.touchRelative(root, \"hello\")\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"type\", \"f\"],\n                \"fields\": [\"name\", \"new\"],\n                \"since\": res[\"clock\"],\n            },\n        )\n        self.assertEqual([{\"name\": \"hello\", \"new\": False}], res[\"files\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"since\": res[\"clock\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"type\", \"f\"],\n                \"empty_on_fresh_instance\": True,\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        os.unlink(os.path.join(root, \"hello\"))\n        res = self.watchmanCommand(\n            \"query\", root, {\"fields\": [\"name\"], \"since\": res[\"clock\"]}\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"hello\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"since\": res[\"clock\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        self.touchRelative(root, \"newfile\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"type\", \"f\"],\n                \"fields\": [\"name\", \"new\"],\n                \"since\": res[\"clock\"],\n            },\n        )\n        self.assertEqual([{\"name\": \"newfile\", \"new\": True}], res[\"files\"])\n\n        self.touchRelative(root, \"newfile\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"type\", \"f\"],\n                \"fields\": [\"name\", \"new\"],\n                \"since\": res[\"clock\"],\n            },\n        )\n        self.assertEqual([{\"name\": \"newfile\", \"new\": False}], res[\"files\"])\n\n        adir_file = os.path.join(root, \"adir/file\")\n        os.unlink(adir_file)\n        with open(adir_file, \"w\") as f:\n            f.write(\"new contents\\n\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"type\", \"f\"],\n                \"fields\": [\"name\", \"new\"],\n                \"since\": res[\"clock\"],\n            },\n        )\n        self.assertEqual([{\"name\": \"adir/file\", \"new\": False}], res[\"files\"])\n\n    def query_adir_change_since(self, root, clock):\n        return self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"anyof\",\n                    [\"match\", \"adir\", \"basename\"],\n                    [\"dirname\", \"adir\"],\n                ],\n                \"fields\": [\"name\", \"type\"],\n                \"since\": clock,\n                \"empty_on_fresh_instance\": True,\n                \"always_include_directories\": True,\n            },\n        )\n\n    def test_eden_since_removal(self) -> None:\n        root = self.makeEdenMount(populate)\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        first_clock = self.watchmanCommand(\n            \"clock\",\n            root,\n        )[\"clock\"]\n\n        shutil.rmtree(os.path.join(root, \"adir\"))\n\n        first_res = self.query_adir_change_since(root, first_clock)\n\n        # TODO(T104564495): Watchman reports removed directories as file\n        # removal. This is caused by EdenFS's Journal not knowing if a\n        # file/directory is removed, and thus this is reported to Watchman as\n        # an UNKNOWN file, which for removed files/directory will be reported\n        # as a removed file.\n        self.assertQueryRepsonseEqual(\n            [{\"name\": \"adir\", \"type\": \"f\"}, {\"name\": \"adir/file\", \"type\": \"f\"}],\n            first_res[\"files\"],\n        )\n\n    def test_eden_since_across_update(self) -> None:\n        root = self.makeEdenMount(populate)\n        repo = self.repoForPath(root)\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        shutil.rmtree(os.path.join(root, \"adir\"))\n\n        # commit the removal so we can test the change across an update.\n        repo.hg(\"addremove\")\n        repo.commit(\"removal commit.\")\n\n        first_clock = self.watchmanCommand(\n            \"clock\",\n            root,\n        )[\"clock\"]\n\n        repo.hg(\"prev\")  # add the files back across commits\n\n        first_res = self.query_adir_change_since(root, first_clock)\n\n        self.assertQueryRepsonseEqual(\n            [{\"name\": \"adir\", \"type\": \"d\"}, {\"name\": \"adir/file\", \"type\": \"f\"}],\n            first_res[\"files\"],\n        )\n\n        second_clock = self.watchmanCommand(\n            \"clock\",\n            root,\n        )[\"clock\"]\n\n        repo.hg(\"next\")  # remove the files again across commits\n\n        second_res = self.query_adir_change_since(root, second_clock)\n\n        self.assertQueryRepsonseEqual(\n            [{\"name\": \"adir\", \"type\": \"d\"}, {\"name\": \"adir/file\", \"type\": \"f\"}],\n            second_res[\"files\"],\n        )\n\n    def test_eden_since_over_threshold(self) -> None:\n        # Make sure to have a large amount of files to dwarf Mercurial\n        # modifying a ton of files in the .hg directory.\n        root = self.makeEdenMount(\n            lambda repo: populate(\n                repo, 50, extra_files=[f\"bigdir/{i}\" for i in range(100)]\n            )\n        )\n        repo = self.repoForPath(root)\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        clock = self.watchmanCommand(\n            \"clock\",\n            root,\n        )[\"clock\"]\n\n        def do_query(clock):\n            return self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"expression\": [\"type\", \"f\"],\n                    \"empty_on_fresh_instance\": True,\n                    \"fields\": [\"name\"],\n                    \"since\": clock,\n                },\n            )\n\n        shutil.rmtree(os.path.join(root, \"bigdir\"))\n        repo.hg(\"addremove\")\n        repo.commit(\"removal commit.\")\n\n        clock = self.watchmanCommand(\n            \"clock\",\n            root,\n        )[\"clock\"]\n\n        res = do_query(clock)\n        self.assertFalse(res[\"is_fresh_instance\"])\n        clock = res[\"clock\"]\n\n        repo.hg(\"prev\")\n\n        # A couple of files changed, more than the threshold one 1 set in the\n        # configuration. This is expected to return a fresh instance.\n        res = do_query(clock)\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual([], res[\"files\"])\n        clock = res[\"clock\"]\n\n        # Make sure that we detect newly edited files afterwards.\n        with open(os.path.join(root, \"hello\"), \"w\") as f:\n            f.write(\"hello\\n\")\n\n        res = do_query(clock)\n        self.assertFalse(res[\"is_fresh_instance\"])\n        self.assertQueryRepsonseEqual([\"hello\"], res[\"files\"])\n\n    def test_eden_since_dotfiles_change(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(\n                repo, extra_files=[\"dotfiles/.file1\", \"dotfiles/.file2\"]\n            )\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"since\": \"c:0:0\"},\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListContains(\n            res[\"files\"],\n            [\"dotfiles/.file1\", \"dotfiles/.file2\"],\n        )\n\n        clock = res[\"clock\"]\n\n        self.touchRelative(root, \"dotfiles/.file1\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"], \"since\": clock},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"dotfiles/.file1\"])\n\n    def test_eden_since_fresh_instance_dotfiles(self) -> None:\n        root = self.makeEdenMount(\n            lambda repo: populate(\n                repo, extra_files=[\"dotfiles/.file1\", \"dotfiles/.file2\"]\n            )\n        )\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"fields\": [\"name\"],\n                \"since\": \"c:0:0\",\n                # Edge case: in the `since` generator, dotfiles are included\n                # even if the `glob` generator is explicitly configured to omit\n                # them.\n                \"glob_includedotfiles\": False,\n            },\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListContains(\n            res[\"files\"],\n            [\"dotfiles/.file1\", \"dotfiles/.file2\"],\n        )\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_subscribe.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\ndef possible_cookie(name):\n    return \".watchman-cookie-\" in name\n\n\nclass TestEdenSubscribe(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def requiresPersistentSession(self) -> bool:\n        return True\n\n    def test_eden_subscribe(self) -> None:\n        commits = []\n\n        def populate(repo):\n            # We ignore \".hg\" here just so some of the tests that list files don't have\n            # to explicitly filter out the contents of this directory.  However, in most\n            # situations the .hg directory normally should not be ignored.\n            repo.write_file(\".watchmanconfig\", '{\"ignore_dirs\":[\".buckd\", \".hg\"]}')\n            repo.write_file(\"hello\", \"hola\\n\")\n            commits.append(repo.commit(\"initial commit.\"))\n            repo.write_file(\"welcome\", \"bienvenue\\n\")\n            commits.append(repo.commit(\"commit 2\"))\n            repo.write_file(\"readme.txt\", \"important docs\\n\")\n            commits.append(repo.commit(\"commit 3\"))\n            # Switch back to the first commit at the start of the test\n            repo.update(commits[0])\n\n        root = self.makeEdenMount(populate)\n        repo = self.repoForPath(root)\n\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"myname\",\n            {\"fields\": [\"name\"], \"expression\": [\"not\", [\"match\", \".watchman-cookie*\"]]},\n        )\n\n        dat = self.waitForSub(\"myname\", root=root)[0]\n        self.assertTrue(dat[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            dat[\"files\"], self.eden_dir_entries + [\".eden\", \".watchmanconfig\", \"hello\"]\n        )\n\n        self.touchRelative(root, \"w0000t\")\n        dat = self.waitForSub(\"myname\", root=root)[0]\n        self.assertEqual(False, dat[\"is_fresh_instance\"])\n        self.assertFileListsEqual(dat[\"files\"], [\"w0000t\"])\n\n        # we should not observe .buckd in the subscription results\n        # because it is listed in the ignore_dirs config section.\n        os.mkdir(os.path.join(root, \".buckd\"))\n\n        self.touchRelative(root, \"hello\")\n        dat = self.waitForSub(\"myname\", root=root)[0]\n        self.assertEqual(False, dat[\"is_fresh_instance\"])\n        self.assertFileListsEqual(dat[\"files\"], [\"hello\"])\n\n        # performing an hg checkout should notify us of the files changed between\n        # commits\n        repo.update(commits[2])\n        dat = self.waitForSub(\"myname\", root=root)[0]\n        self.assertEqual(False, dat[\"is_fresh_instance\"])\n        self.assertFileListsEqual(dat[\"files\"], [\"welcome\", \"readme.txt\"])\n\n        # make another subscription and assert that we get a fresh\n        # instance result with all the files in it\n        self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"othersub\",\n            {\"fields\": [\"name\"], \"expression\": [\"not\", [\"match\", \".watchman-cookie*\"]]},\n        )\n\n        dat = self.waitForSub(\"othersub\", root=root)[0]\n        self.assertEqual(True, dat[\"is_fresh_instance\"])\n        self.assertFileListsEqual(\n            dat[\"files\"],\n            self.eden_dir_entries\n            + [\".eden\", \".watchmanconfig\", \"hello\", \"w0000t\", \"welcome\", \"readme.txt\"],\n        )\n\n    def assertWaitForAssertedStates(self, root, states) -> None:\n        def sortStates(states):\n            \"\"\"Deterministically sort the states for comparison.\n            We sort by name and rely on the sort being stable as the\n            relative ordering of the potentially multiple queueued\n            entries per name is important to preserve\"\"\"\n            return sorted(states, key=lambda x: x[\"name\"])\n\n        states = sortStates(states)\n\n        def getStates():\n            res = self.watchmanCommand(\"debug-get-asserted-states\", root)\n            return sortStates(res[\"states\"])\n\n        self.assertWaitForEqual(states, getStates)\n\n    def test_state_enter_leave(self) -> None:\n        \"\"\"Check that state-enter and state-leave are basically working.\n        This is a subset of the tests that are performed in test_subscribe.py;\n        we only strictly need to check the basic plumbing here and need not\n        replicate the entire set of tests\"\"\"\n\n        def populate(repo):\n            repo.write_file(\"hello\", \"hola\\n\")\n            repo.commit(\"initial commit.\")\n\n        root = self.makeEdenMount(populate)\n        res = self.watchmanCommand(\"watch\", root)\n        self.assertEqual(\"eden\", res[\"watcher\"])\n\n        result = self.watchmanCommand(\"debug-get-asserted-states\", root)\n        self.assertEqual([], result[\"states\"])\n\n        self.watchmanCommand(\"state-enter\", root, \"foo\")\n        self.watchmanCommand(\"state-enter\", root, \"bar\")\n        self.assertWaitForAssertedStates(\n            root,\n            [\n                {\"name\": \"bar\", \"state\": \"Asserted\"},\n                {\"name\": \"foo\", \"state\": \"Asserted\"},\n            ],\n        )\n\n        self.watchmanCommand(\"state-leave\", root, \"foo\")\n        self.assertWaitForAssertedStates(root, [{\"name\": \"bar\", \"state\": \"Asserted\"}])\n\n        self.watchmanCommand(\"state-leave\", root, \"bar\")\n        self.assertWaitForAssertedStates(root, [])\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_suffix.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\ndef populate(repo) -> None:\n    # We ignore \".hg\" here just so some of the tests that list files don't have to\n    # explicitly filter out the contents of this directory.  However, in most situations\n    # the .hg directory normally should not be ignored.\n    repo.write_file(\".watchmanconfig\", '{\"ignore_dirs\":[\".hg\"]}')\n\n    # Create multiple nested directories to test the relative_root option\n    repo.write_file(\"foo.c\", \"1\\n\")\n    repo.write_file(\"subdir/bar.c\", \"1\\n\")\n    repo.write_file(\"subdir/bar.h\", \"1\\n\")\n    repo.write_file(\"subdir/subdir2/baz.c\", \"1\\n\")\n    repo.write_file(\"subdir/subdir2/baz.h\", \"1\\n\")\n    repo.write_file(\"subdir/subdir2/subdir3/baz.c\", \"1\\n\")\n\n    repo.commit(\"initial commit.\")\n\n\nclass TestEdenQuery(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_simple_suffix(self) -> None:\n        root = self.makeEdenMount(populate)\n        self.watchmanCommand(\"watch\", root)\n\n        # Test each permutation of relative root\n        relative_roots = [\"\", \"subdir\", \"subdir/subdir2\", \"subdir/subdir2/subdir3\"]\n        expected_output = [\n            [\n                \"foo.c\",\n                \"subdir/bar.c\",\n                \"subdir/subdir2/baz.c\",\n                \"subdir/subdir2/subdir3/baz.c\",\n            ],\n            [\n                \"bar.c\",\n                \"subdir2/baz.c\",\n                \"subdir2/subdir3/baz.c\",\n            ],\n            [\n                \"baz.c\",\n                \"subdir3/baz.c\",\n            ],\n            [\n                \"baz.c\",\n            ],\n        ]\n        for relative_root, output in zip(relative_roots, expected_output):\n            # Test Simple suffix eval\n            self.assertFileListsEqual(\n                self.watchmanCommand(\n                    \"query\",\n                    root,\n                    {\n                        \"relative_root\": relative_root,\n                        \"expression\": [\"allof\", [\"type\", \"f\"], [\"suffix\", [\"c\"]]],\n                        \"fields\": [\"name\"],\n                    },\n                )[\"files\"],\n                output,\n            )\n\n            # Check that it is the same as normal suffix eval\n            self.assertFileListsEqual(\n                self.watchmanCommand(\n                    \"query\",\n                    root,\n                    {\n                        \"relative_root\": relative_root,\n                        \"expression\": [\n                            \"allof\",\n                            # Adding a true expression causes watchman to\n                            # evaluate this normally instead of as a simple suffix\n                            [\"true\"],\n                            [\"type\", \"f\"],\n                            [\"suffix\", [\"c\"]],\n                        ],\n                        \"fields\": [\"name\"],\n                    },\n                )[\"files\"],\n                output,\n            )\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_takeover.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\ndef populate(repo):\n    repo.write_file(\".watchmanconfig\", '{\"ignore_dirs\":[\".buckd\"]}')\n    repo.write_file(\"hello\", \"hola\\n\")\n    repo.commit(\"initial commit.\")\n\n\nclass TestEdenTakeover(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_eden_takeover(self) -> None:\n        root = self.makeEdenMount(populate)\n        self.eden.graceful_restart()\n\n        self.watchmanCommand(\"watch\", root)\n        watch_list = self.getWatchList()\n        self.assertEqual(len(watch_list), 1)\n        self.assertEqual(watch_list[0], root)\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_unmount.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\ndef populate(repo):\n    repo.write_file(\".watchmanconfig\", '{\"ignore_dirs\":[\".buckd\"]}')\n    repo.write_file(\"hello\", \"hola\\n\")\n    repo.commit(\"initial commit.\")\n\n\nclass TestEdenUnmount(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_eden_unmount(self) -> None:\n        root = self.makeEdenMount(populate)\n        self.watchmanCommand(\"watch\", root)\n\n        clock = self.watchmanCommand(\"clock\", root)\n        self.touchRelative(root, \"newfile\")\n\n        self.eden.unmount(root)\n\n        with self.assertRaises(pywatchman.CommandError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"], \"since\": clock})\n\n        self.assertRegex(str(ctx.exception), \"unable to resolve root\")\n\n    def test_eden_unmount_watch(self) -> None:\n        root = self.makeEdenMount(populate)\n        self.eden.unmount(root)\n\n        with self.assertRaises(pywatchman.CommandError) as ctx:\n            self.watchmanCommand(\"watch\", root)\n\n        self.assertRegex(str(ctx.exception), \"unable to resolve root\")\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_watch_parent.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom eden.fs.service.eden.thrift_types import GetStatInfoParams, STATS_MOUNTS_STATS\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\nclass TestEdenWatchParent(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_eden_watch_parent(self) -> None:\n        def populate(repo):\n            repo.write_file(\"adir/file\", \"foo!\\n\")\n            repo.commit(\"initial commit.\")\n\n        def get_loaded_count() -> int:\n            with self.eden.get_thrift_client_legacy() as client:\n                stats = client.getStatInfo(\n                    GetStatInfoParams(statsMask=STATS_MOUNTS_STATS)._to_py_deprecated()\n                )\n            mountPointInfo = stats.mountPointInfo\n            if mountPointInfo is None:\n                raise Exception(\"stats.mountPointInfo is not set\")\n            self.assertEqual(len(mountPointInfo), 1)\n            for mountPath in mountPointInfo:\n                info = mountPointInfo[mountPath]\n                return info.loadedFileCount + info.loadedTreeCount\n            return 0\n\n        root = self.makeEdenMount(populate)\n\n        before_loaded = get_loaded_count()\n        self.watchmanCommand(\"watch\", os.path.dirname(root))\n        after_loaded = get_loaded_count()\n\n        self.assertEqual(before_loaded, after_loaded)\n"
  },
  {
    "path": "watchman/integration/eden/test_eden_watch_root.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanEdenTestCase\n\n\nclass TestEdenWatchRoot(WatchmanEdenTestCase.WatchmanEdenTestCase):\n    def test_eden_watch_root(self) -> None:\n        def populate(repo):\n            repo.write_file(\"adir/file\", \"foo!\\n\")\n            repo.commit(\"initial commit.\")\n\n        root = self.makeEdenMount(populate)\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"watch\", os.path.join(root, \"adir\"))\n        self.assertRegex(\n            str(ctx.exception),\n            (\n                \"unable to resolve root .*: eden: you may only watch \"\n                + \"from the root of an eden mount point.\"\n            ),\n        )\n"
  },
  {
    "path": "watchman/integration/facebook/BUCK",
    "content": "load(\"@fbcode//watchman/integration:defs.bzl\", \"integration_env\")\nload(\"@fbcode_macros//build_defs:python_unittest.bzl\", \"python_unittest\")\n\noncall(\"scm_client_infra\")\n\npython_unittest(\n    name = \"integration\",\n    srcs = glob([\"test_*.py\"]),\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    env = integration_env(),\n    supports_static_listing = False,\n    typing = True,\n    deps = [\n        \"//watchman/integration/lib:lib\",\n        \"//watchman/python/pywatchman:pywatchman\",\n    ],\n)\n"
  },
  {
    "path": "watchman/integration/lib/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:python_library.bzl\", \"python_library\")\n\noncall(\"scm_client_infra\")\n\npython_library(\n    name = \"lib\",\n    srcs = glob([\"*.py\"]),\n    typing = True,\n    deps = [\n        \"//eden/integration/lib:lib\",\n        \"//watchman/python/pywatchman:pywatchman\",\n    ],\n)\n"
  },
  {
    "path": "watchman/integration/lib/Interrupt.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\ninterrupted = False\n\n\ndef wasInterrupted() -> bool:\n    global interrupted\n    return interrupted\n\n\ndef setInterrupted() -> None:\n    global interrupted\n    interrupted = True\n\n\ndef checkInterrupt() -> None:\n    \"\"\"\n    If an interrupt was detected, raise it now.\n    We use this to defer interrupt processing until we're\n    in the right place to handle it.\n    \"\"\"\n    if wasInterrupted():\n        raise KeyboardInterrupt()\n"
  },
  {
    "path": "watchman/integration/lib/TempDir.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport atexit\nimport errno\nimport os\nimport shutil\nimport sys\nimport tempfile\nimport time\n\nfrom . import path_utils as path\n\n\nglobal_temp_dir = None\n\n\nclass TempDir:\n    \"\"\"\n    This is a helper for locating a reasonable place for temporary files.\n    When run in the watchman test suite, we compute this up-front and then\n    store everything under that temporary directory.\n    When run under the FB internal test runner, we infer a reasonable grouped\n    location from the process group environmental variable exported by the\n    test runner.\n    \"\"\"\n\n    def __init__(self, keepAtShutdown: bool = False) -> None:\n        # We'll put all our temporary stuff under one dir so that we\n        # can clean it all up at the end.\n\n        parent_dir = tempfile.gettempdir()\n        prefix = \"watchmantest\"\n\n        self.temp_dir = path.get_canonical_filesystem_path(\n            tempfile.mkdtemp(dir=parent_dir, prefix=prefix)\n        )\n\n        if os.name != \"nt\":\n            # On some platforms, setting the setgid bit on a directory doesn't\n            # work if the user isn't a member of the directory's group. Set the\n            # group explicitly to avoid this.\n            os.chown(self.temp_dir, -1, os.getegid())\n            # Some environments have a weird umask that can leave state\n            # directories too open and break tests.\n            os.umask(0o022)\n        # Redirect all temporary files to that location\n        tempfile.tempdir = os.fsdecode(self.temp_dir)\n\n        self.keep = keepAtShutdown\n\n        def cleanup():\n            if self.keep:\n                sys.stdout.write(\"Preserving output in %s\\n\" % self.temp_dir)\n                return\n            self._retry_rmtree(self.temp_dir)\n\n        atexit.register(cleanup)\n\n    def get_dir(self):\n        return self.temp_dir\n\n    def set_keep(self, value) -> None:\n        self.keep = value\n\n    def _retry_rmtree(self, top) -> None:\n        # Keep trying to remove it; on Windows it may take a few moments\n        # for any outstanding locks/handles to be released\n        for _ in range(1, 10):\n            shutil.rmtree(top, onerror=_remove_readonly)\n            if not os.path.isdir(top):\n                return\n            sys.stdout.write(\"Waiting to remove temp data under %s\\n\" % top)\n            time.sleep(0.2)\n        sys.stdout.write(\"Failed to completely remove %s\\n\" % top)\n\n\ndef _remove_readonly(func, path, exc_info) -> None:\n    # If we encounter an EPERM or EACCESS error removing a file try making its parent\n    # directory writable and then retry the removal.  This is necessary to clean up\n    # eden mount point directories after the checkout is unmounted, as these directories\n    # are made read-only by \"eden clone\"\n    _ex_type, ex, _traceback = exc_info\n    if not (\n        isinstance(ex, EnvironmentError) and ex.errno in (errno.EACCES, errno.EPERM)\n    ):\n        # Just ignore other errors.  This will be retried by _retry_rmtree()\n        return\n\n    try:\n        parent_dir = os.path.dirname(path)\n        os.chmod(parent_dir, 0o755)\n        # func() is the function that failed.\n        # This is usually os.unlink() or os.rmdir().\n        func(path)\n    except OSError:\n        return\n\n\ndef get_temp_dir(keep=None):\n    global global_temp_dir\n    if global_temp_dir:\n        return global_temp_dir\n    if keep is None:\n        keep = os.environ.get(\"WATCHMAN_TEST_KEEP\", \"0\") == \"1\"\n    global_temp_dir = TempDir(keep)\n    return global_temp_dir\n"
  },
  {
    "path": "watchman/integration/lib/WatchmanEdenTestCase.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n# no unicode literals\n\nimport os\nimport sys\n\nfrom . import WatchmanTestCase\n\n\nTestParent = object\ntry:\n    from eden.integration.lib import edenclient, hgrepo\n\n    def is_sandcastle():\n        return \"SANDCASTLE\" in os.environ\n\n    if edenclient.can_run_eden():\n        TestParent = WatchmanTestCase.WatchmanTestCase\n\n    can_run_eden = edenclient.can_run_eden\n\nexcept ImportError:\n\n    def is_buck_build():\n        return \"BUCK_BUILD_ID\" in os.environ\n\n    # We want import failures to hard fail the build when using buck internally\n    # because it means we overlooked something, but we want it to be a soft\n    # fail when we run our opensource build\n    if is_buck_build():\n        raise\n\n    def can_run_eden():\n        return False\n\n    class WatchmanEdenTestCase:\n        pass\n\nelse:\n\n    class WatchmanEdenTestCase(WatchmanTestCase.WatchmanTestCase):\n        # The contents of the .eden directory\n        # This is used by several tests when checking reported file lists\n        eden_dir_entries = [\n            \".eden/root\",\n            \".eden/socket\",\n            \".eden/client\",\n            \".eden/this-dir\",\n        ]\n\n        eden: edenclient.EdenFS\n\n        def setUp(self) -> None:\n            super(WatchmanEdenTestCase, self).setUp()\n\n            # The test EdenFS instance.\n            # We let it create and manage its own temporary test directory, rather than\n            # using the one scoped to the test because we have very real length limits on\n            # the socket path name that we're likely to hit otherwise.\n            self.eden = edenclient.EdenFS()\n            self.addCleanup(lambda: self.cleanUpEden())\n\n            # where we'll mount the eden client(s)\n            self.mounts_dir = self.mkdtemp(prefix=\"eden_mounts\")\n\n            # Watchman needs to start up with the same HOME as eden, otherwise\n            # it won't be able to locate the eden socket\n            self.save_home = os.environ[\"HOME\"]\n            os.environ[\"HOME\"] = str(self.eden.home_dir)\n            self.addCleanup(lambda: self._restoreHome())\n\n            self.system_hgrc = None\n\n            self.eden_watchman = self.watchmanInstance()\n            self.addCleanup(self.cleanUpWatchman)\n\n            self.client = self.getClient(self.eden_watchman)\n\n            # chg can interfere with eden, so disable it up front\n            os.environ[\"CHGDISABLE\"] = \"1\"\n\n            # Start the EdenFS instance\n            self.eden.start(extra_args=[\"--enable_fault_injection\"])\n\n        def _restoreHome(self) -> None:\n            assert self.save_home is not None\n            os.environ[\"HOME\"] = self.save_home\n\n        def cleanUpEden(self) -> None:\n            self.eden.cleanup()\n\n        def cleanUpWatchman(self):\n            roots = self.watchmanCommand(\"watch-list\")[\"roots\"]\n            self.watchmanCommand(\"watch-del-all\")\n            for root in roots:\n                try:\n                    self.eden.unmount(root)\n                except Exception:\n                    pass\n\n            self.eden_watchman.stop()\n            self.eden_watchman = None\n\n        def makeEdenMount(self, populate_fn=None):\n            \"\"\"populate_fn is a function that accepts a repo object and\n            that is expected to populate it as a pre-requisite to\n            starting up the eden mount for it.\n            \"\"\"\n\n            repo_path = self.mkdtemp(prefix=\"eden_repo_\")\n            repo_name = os.path.basename(repo_path)\n            repo = self.repoForPath(repo_path)\n            repo.init()\n\n            if populate_fn:\n                populate_fn(repo)\n\n            mount_path = os.path.join(self.mounts_dir, repo_name)\n\n            self.eden.clone(repo_path, mount_path)\n            return mount_path\n\n        def repoForPath(self, path):\n            if self.system_hgrc is None:\n                system_hgrc_path = self.mktemp(\"hgrc\")\n                with open(system_hgrc_path, \"w\") as f:\n                    f.write(hgrepo.HgRepository.get_system_hgrc_contents())\n                self.system_hgrc = system_hgrc_path\n\n            return hgrepo.HgRepository(path, system_hgrc=self.system_hgrc)\n\n        def setDefaultConfiguration(self):\n            self.setConfiguration(\"local\", \"bser\", False, False)\n\n        def isCaseSensitiveMount(self, path) -> bool:\n            # Ideally we'd ask Eden somehow, but this is close enough for use in\n            # tests. See eden/fs/cli/main.py.\n            return sys.platform == \"linux\"\n"
  },
  {
    "path": "watchman/integration/lib/WatchmanInstance.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport atexit\nimport hashlib\nimport json\nimport os\nimport signal\nimport subprocess\nimport sys\nimport tempfile\nimport threading\nimport time\nimport uuid\n\nimport pywatchman\n\nfrom . import TempDir\n\ntry:\n    import pwd\nexcept ImportError:\n    # Windows\n    pass\n\ntls = threading.local()\n\n\ndef getSharedInstance(config=None):\n    config_hash = hashlib.sha1(json.dumps(config).encode()).hexdigest()\n    attr = f\"instance_{config_hash}\"\n    global tls\n    inst = getattr(tls, attr, None)\n    if inst is None:\n        # Ensure that the temporary dir is configured\n        TempDir.get_temp_dir().get_dir()\n        inst = Instance(config=config)\n        inst.start()\n        setattr(tls, attr, inst)\n        atexit.register(lambda inst=inst: inst.stop())\n    return inst\n\n\ndef mergeTestConfig(config):\n    \"\"\"Merge local config with test config specified via WATCHMAN_TEST_CONFIG\"\"\"\n    test_config = json.loads(os.getenv(\"WATCHMAN_TEST_CONFIG\") or \"{}\")\n    return {**test_config, **(config or {})}\n\n\nclass InitWithFilesMixin:\n    def _init_state(self) -> None:\n        # pyre-fixme[16]: `InitWithFilesMixin` has no attribute `base_dir`.\n        self.base_dir = tempfile.mkdtemp(prefix=\"inst\")\n        # no separate user directory here -- that's only in InitWithDirMixin\n        # pyre-fixme[16]: `InitWithFilesMixin` has no attribute `user_dir`.\n        self.user_dir = None\n        # pyre-fixme[16]: `InitWithFilesMixin` has no attribute `cfg_file`.\n        self.cfg_file = os.path.join(self.base_dir, \"config.json\")\n        # pyre-fixme[16]: `InitWithFilesMixin` has no attribute `log_file_name`.\n        self.log_file_name = os.path.join(self.base_dir, \"log\")\n        # pyre-fixme[16]: `InitWithFilesMixin` has no attribute `cli_log_file_name`.\n        self.cli_log_file_name = os.path.join(self.base_dir, \"cli-log\")\n        # pyre-fixme[16]: `InitWithFilesMixin` has no attribute `pid_file`.\n        self.pid_file = os.path.join(self.base_dir, \"pid\")\n        # pyre-fixme[16]: `InitWithFilesMixin` has no attribute `pipe_name`.\n        self.pipe_name = (\n            \"\\\\\\\\.\\\\pipe\\\\watchman-test-%s\"\n            % uuid.uuid5(uuid.NAMESPACE_URL, self.base_dir).hex\n        )\n        # pyre-fixme[16]: `InitWithFilesMixin` has no attribute `sock_file`.\n        self.sock_file = os.path.join(self.base_dir, \"sock\")\n        # pyre-fixme[16]: `InitWithFilesMixin` has no attribute `state_file`.\n        self.state_file = os.path.join(self.base_dir, \"state\")\n\n    def get_state_args(self):\n        return [\n            \"--unix-listener-path={0}\".format(self.sock_file),\n            \"--named-pipe-path={0}\".format(self.pipe_name),\n            \"--logfile={0}\".format(self.log_file_name),\n            \"--statefile={0}\".format(self.state_file),\n            \"--pidfile={0}\".format(self.pid_file),\n        ]\n\n\nclass InitWithDirMixin:\n    \"\"\"A mixin to allow setting up a state dir rather than a state file. This is\n    only meant to test state dir creation and permissions -- most operations are\n    unlikely to work.\n    \"\"\"\n\n    def _init_state(self) -> None:\n        # pyre-fixme[16]: `InitWithDirMixin` has no attribute `base_dir`.\n        self.base_dir = tempfile.mkdtemp(prefix=\"inst\")\n        # pyre-fixme[16]: `InitWithDirMixin` has no attribute `cfg_file`.\n        self.cfg_file = os.path.join(self.base_dir, \"config.json\")\n        # This needs to be separate from the log_file_name because the\n        # log_file_name won't exist in the beginning, but the cli_log_file_name\n        # will.\n        # pyre-fixme[16]: `InitWithDirMixin` has no attribute `cli_log_file_name`.\n        self.cli_log_file_name = os.path.join(self.base_dir, \"cli-log\")\n        # This doesn't work on Windows, but we don't expect to be hitting this\n        # codepath on Windows anyway\n        username = pwd.getpwuid(os.getuid())[0]\n        # pyre-fixme[16]: `InitWithDirMixin` has no attribute `user_dir`.\n        self.user_dir = os.path.join(self.base_dir, \"%s-state\" % username)\n        # pyre-fixme[16]: `InitWithDirMixin` has no attribute `log_file_name`.\n        self.log_file_name = os.path.join(self.user_dir, \"log\")\n        # pyre-fixme[16]: `InitWithDirMixin` has no attribute `sock_file`.\n        self.sock_file = os.path.join(self.user_dir, \"sock\")\n        # pyre-fixme[16]: `InitWithDirMixin` has no attribute `state_file`.\n        self.state_file = os.path.join(self.user_dir, \"state\")\n        # pyre-fixme[16]: `InitWithDirMixin` has no attribute `pipe_name`.\n        self.pipe_name = \"INVALID\"\n\n    def get_state_args(self):\n        return [\"--test-state-dir={0}\".format(self.base_dir)]\n\n\nclass _Instance:\n    # Tracks a running watchman instance.  It is created with an\n    # overridden global configuration file; you may pass that\n    # in to the constructor\n\n    def __init__(\n        self, config=None, start_timeout: float = 60.0, debug_watchman: bool = False\n    ) -> None:\n        self.start_timeout = start_timeout\n        # pyre-fixme[16]: `_Instance` has no attribute `_init_state`.\n        self._init_state()\n        self.proc = None\n        self.pid = None\n        self.debug_watchman = debug_watchman\n        # pyre-fixme[16]: `_Instance` has no attribute `cfg_file`.\n        with open(self.cfg_file, \"w\") as f:\n            f.write(json.dumps(mergeTestConfig(config)))\n\n    def __del__(self) -> None:\n        self.stop()\n\n    def __enter__(self) -> \"_Instance\":\n        return self\n\n    def __exit__(self, *exc_info) -> None:\n        self.stop()\n\n    def getSockPath(self):\n        return pywatchman.SockPath(\n            unix_domain=self.getUnixSockPath(), named_pipe=self.getNamedPipePath()\n        )\n\n    def getUnixSockPath(self):\n        return self.sock_file\n\n    def getNamedPipePath(self):\n        return self.pipe_name\n\n    def getCLILogContents(self) -> str:\n        # pyre-fixme[16]: `_Instance` has no attribute `cli_log_file_name`.\n        with open(self.cli_log_file_name, \"r\") as f:\n            return f.read()\n\n    def getServerLogContents(self) -> str:\n        # pyre-fixme[16]: `_Instance` has no attribute `log_file_name`.\n        with open(self.log_file_name, \"r\") as f:\n            return f.read()\n\n    def stop(self) -> None:\n        if self.proc:\n            self.proc.kill()\n            self.proc.wait()\n            self.proc = None\n\n    def watchmanBinary(self) -> str:\n        return os.environ.get(\"WATCHMAN_BINARY\", \"watchman\")\n\n    def commandViaCLI(self, cmd, prefix=None):\n        \"\"\"a very bare bones helper to test the site spawner functionality\"\"\"\n        args = prefix or []\n        args.extend([self.watchmanBinary(), \"--log-level=2\"])\n        args.extend(self.get_state_args())\n        args.extend(cmd)\n\n        env = os.environ.copy()\n        env[\"WATCHMAN_CONFIG_FILE\"] = self.cfg_file\n        del env[\"WATCHMAN_NO_SPAWN\"]\n        proc = subprocess.Popen(\n            args, env=env, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE\n        )\n        return proc.communicate()\n\n    def start(self, extra_env=None) -> None:\n        args = [self.watchmanBinary(), \"--foreground\", \"--log-level=2\"]\n        # pyre-fixme[16]: `_Instance` has no attribute `get_state_args`.\n        args.extend(self.get_state_args())\n        env = os.environ.copy()\n        # pyre-fixme[16]: `_Instance` has no attribute `cfg_file`.\n        env[\"WATCHMAN_CONFIG_FILE\"] = self.cfg_file\n        if extra_env:\n            env.update(extra_env)\n        # pyre-fixme[16]: `_Instance` has no attribute `cli_log_file_name`.\n        with open(self.cli_log_file_name, \"w+\") as cli_log_file:\n            self.proc = subprocess.Popen(\n                args, env=env, stdin=None, stdout=cli_log_file, stderr=cli_log_file\n            )\n        if self.debug_watchman:\n            print(\"Watchman instance PID: \" + str(self.proc.pid))\n            user_input = input\n            user_input(\"Press Enter to continue...\")\n\n        # wait for it to come up\n        deadline = time.time() + self.start_timeout\n        while time.time() < deadline:\n            try:\n                # Use a reasonable timeout for individual connection attempts.\n                # This needs to be long enough to handle slow startup on\n                # resource-constrained systems (e.g., Windows CI with large files).\n                client = pywatchman.client(\n                    sockpath=self.getSockPath(),\n                    timeout=min(10.0, max(1.0, deadline - time.time())),\n                )\n                self.pid = client.query(\"get-pid\")[\"pid\"]\n                break\n            except (pywatchman.SocketConnectError, pywatchman.SocketTimeout):\n                t, val, tb = sys.exc_info()\n                time.sleep(0.1)\n            finally:\n                client.close()\n\n        if self.pid is None:\n            # self.proc didn't come up: wait for it to die\n            self.proc.wait(timeout=self.start_timeout)\n            # pyre-fixme[61]: `val` is undefined, or not always defined.\n            raise val\n\n    def _waitForSuspend(self, suspended, timeout: float) -> bool:\n        if os.name == \"nt\":\n            # There's no 'ps' equivalent we can use\n            return True\n\n        # Check the information in the 'ps' output\n        deadline = time.time() + timeout\n        state = \"s\" if sys.platform.startswith(\"sunos\") else \"state\"\n        while time.time() < deadline:\n            out, err = subprocess.Popen(\n                [\"ps\", \"-o\", state, \"-p\", str(self.pid)],\n                stdout=subprocess.PIPE,\n                stderr=subprocess.PIPE,\n            ).communicate()\n            status = out.splitlines()[-1]\n            is_suspended = \"T\" in status.decode(\"utf-8\", \"surrogateescape\")\n            if is_suspended == suspended:\n                return True\n\n            time.sleep(0.03)\n        return False\n\n    def _susresBinary(self) -> str:\n        return os.environ.get(\"WATCHMAN_SUSRES\", \"susres.exe\")\n\n    def suspend(self) -> None:\n        if self.proc.poll() or self.pid <= 1:\n            raise Exception(\"watchman process isn't running\")\n        if os.name == \"nt\":\n            subprocess.check_call([self._susresBinary(), \"suspend\", str(self.pid)])\n        else:\n            os.kill(self.pid, signal.SIGSTOP)\n\n        if not self._waitForSuspend(True, 5):\n            raise Exception(\"watchman process didn't stop in 5 seconds\")\n\n    def resume(self) -> None:\n        if self.proc.poll() or self.pid <= 1:\n            raise Exception(\"watchman process isn't running\")\n        if os.name == \"nt\":\n            subprocess.check_call([self._susresBinary(), \"resume\", str(self.pid)])\n        else:\n            os.kill(self.pid, signal.SIGCONT)\n\n        if not self._waitForSuspend(False, 5):\n            raise Exception(\"watchman process didn't resume in 5 seconds\")\n\n\nclass Instance(_Instance, InitWithFilesMixin):\n    pass\n\n\nclass InstanceWithStateDir(_Instance, InitWithDirMixin):\n    pass\n"
  },
  {
    "path": "watchman/integration/lib/WatchmanSCMTestCase.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport subprocess\n\nfrom . import WatchmanTestCase\n\n\nSTRING_TYPES = (str, bytes)\n\n\nclass HgMixin:\n    def hg(self, args, cwd=None):\n        env = dict(os.environ)\n        env[\"HGPLAIN\"] = \"1\"\n        env[\"HGUSER\"] = \"John Smith <smith@example.com>\"\n        env[\"NOSCMLOG\"] = \"1\"  # disable some instrumentation at FB\n        sockpath = self.watchmanInstance().getSockPath()\n        env[\"WATCHMAN_SOCK\"] = sockpath.legacy_sockpath()\n        p = subprocess.Popen(\n            [\n                env.get(\"EDEN_HG_BINARY\", \"hg\"),\n                # we force the extension on.  This is a soft error for\n                # mercurial if it is not available, so we also employ\n                # the skipIfNoFSMonitor() test above to make sure the\n                # environment is sane.\n                \"--config\",\n                \"extensions.fsmonitor=\",\n                # Deployed versions of mercurial regressed and stopped\n                # respecting the WATCHMAN_SOCK environment override, so\n                # we have to reach in and force their hardcoded sockpath here.\n                \"--config\",\n                \"fsmonitor.sockpath=%s\" % sockpath.legacy_sockpath(),\n            ]\n            + args,\n            env=env,\n            cwd=cwd,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n        )\n        out, err = p.communicate()\n        if p.returncode != 0:\n            raise Exception(\"hg %r failed: %s, %s\" % (args, out, err))\n\n        return out, err\n\n\nclass WatchmanSCMTestCase(WatchmanTestCase.WatchmanTestCase, HgMixin):\n    def __init__(self, methodName: str = \"run\") -> None:\n        super(WatchmanSCMTestCase, self).__init__(methodName)\n\n    def requiresPersistentSession(self) -> bool:\n        return True\n\n    def skipIfNoFSMonitor(self) -> None:\n        \"\"\"cause the test to skip if fsmonitor is not available.\n        We don't call this via unittest.skip because we want\n        to have the skip message show the context\"\"\"\n        try:\n            out, err = self.hg([\"help\", \"--extension\", \"fsmonitor\"])\n        except Exception as e:\n            self.skipTest(\"fsmonitor is not available: %s\" % str(e))\n        else:\n            out = out.decode(\"utf-8\")\n            err = err.decode(\"utf-8\")\n            fail_str = \"failed to import extension\"\n            if (fail_str in out) or (fail_str in err):\n                self.skipTest(\"hg configuration is broken: %s %s\" % (out, err))\n\n    def checkOSApplicability(self) -> None:\n        if os.name == \"nt\":\n            self.skipTest(\"The order of events on Windows is funky\")\n\n    def resolveCommitHash(self, revset, cwd=None) -> str:\n        return self.hg(args=[\"log\", \"-T\", \"{node}\", \"-r\", revset], cwd=cwd)[0].decode(\n            \"utf-8\"\n        )\n\n    def waitForStatesToVacate(self, root) -> None:\n        # Wait for all states to vacate (check repeatedly)\n        def checkAssertedStates():\n            result = self.getClient().query(\"debug-get-asserted-states\", root)\n            return result[\"states\"]\n\n        self.assertWaitForEqual([], checkAssertedStates)\n\n    def getConsolidatedFileList(self, dat):\n        fset = set()\n        for _ in dat:\n            fset.update(_.get(\"files\", []))\n        return fset\n\n    def getSubFatClocksOnly(self, subname, root):\n        dat = self.waitForSub(subname, root=root)\n        return [item for item in dat if not isinstance(item[\"clock\"], STRING_TYPES)]\n"
  },
  {
    "path": "watchman/integration/lib/WatchmanTestCase.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport errno\nimport functools\nimport inspect\nimport json\nimport os\nimport os.path\nimport sys\nimport tempfile\nimport time\nimport unittest\nfrom typing import Any, Dict, List\n\nimport pywatchman\n\nfrom . import Interrupt, TempDir, WatchmanInstance\nfrom .path_utils import norm_absolute_path, norm_relative_path\n\n\nSTRING_TYPES = (str, bytes)\n\n\nif os.name == \"nt\":\n    # monkey patch to hopefully minimize test flakiness\n    def wrap_with_backoff(fn):\n        def wrapper(*args, **kwargs):\n            delay = 0.01\n            attempts = 10\n            while True:\n                try:\n                    return fn(*args, **kwargs)\n                except WindowsError as e:\n                    if attempts == 0:\n                        raise\n                    # WindowsError: [Error 32] The process cannot access the\n                    # file because it is being used by another process.\n                    # Error 5: Access is denied.\n                    if e.winerror not in (5, 32):\n                        raise\n\n                attempts = attempts - 1\n                time.sleep(delay)\n                delay = delay * 2\n\n        return wrapper\n\n    for name in [\"rename\", \"unlink\", \"remove\", \"rmdir\", \"makedirs\"]:\n        setattr(os, name, wrap_with_backoff(getattr(os, name)))\n\n\nclass TempDirPerTestMixin(unittest.TestCase):\n    def __init__(self, *args, **kwargs) -> None:\n        super(TempDirPerTestMixin, self).__init__(*args, **kwargs)\n        self.tempdir = None\n\n    def setUp(self) -> None:\n        super(TempDirPerTestMixin, self).setUp()\n\n        id = self._getTempDirName()\n\n        # Arrange for any temporary stuff we create to go under\n        # our global tempdir and put it in a dir named for the test\n        self.tempdir = os.path.join(TempDir.get_temp_dir().get_dir(), id)\n        os.mkdir(self.tempdir)\n\n    def _getTempDirName(self) -> str:\n        return self.id()\n\n    def mkdtemp(self, **kwargs):\n        return norm_absolute_path(tempfile.mkdtemp(dir=self.tempdir, **kwargs))\n\n    def mktemp(self, prefix: str = \"\") -> str:\n        f, name = tempfile.mkstemp(prefix=prefix, dir=self.tempdir)\n        os.close(f)\n        return name\n\n\nclass WatchmanTestCase(TempDirPerTestMixin, unittest.TestCase):\n    # pyre-fixme[13]: Attribute `transport` is never initialized.\n    transport: str\n    # pyre-fixme[13]: Attribute `encoding` is never initialized.\n    encoding: str\n    # pyre-fixme[13]: Attribute `parallelCrawl` is never initialized.\n    parallelCrawl: bool\n    # pyre-fixme[13]: Attribute `splitWatcher` is never initialized.\n    splitWatcher: bool\n\n    def __init__(self, methodName: str = \"run\") -> None:\n        super(WatchmanTestCase, self).__init__(methodName)\n        # pyre-fixme[16]: `WatchmanTestCase` has no attribute `setDefaultConfiguration`.\n        self.setDefaultConfiguration()\n        self.maxDiff = None\n        self.attempt = 0\n        # ASAN-enabled builds can be slower enough that we hit timeouts\n        # with the default of 1 second\n        self.socketTimeout = 80.0\n\n    def requiresPersistentSession(self) -> bool:\n        return False\n\n    def checkPersistentSession(self) -> None:\n        if self.requiresPersistentSession() and self.transport == \"cli\":\n            self.skipTest(\"need persistent session\")\n\n    def checkOSApplicability(self) -> None:\n        # override this to call self.skipTest if this test class should skip\n        # on the current OS\n        pass\n\n    def skipIfCapabilityMissing(self, cap, reason) -> None:\n        res = self.getClient().capabilityCheck([cap])\n        if not res[\"capabilities\"][cap]:\n            self.skipTest(reason)\n\n    def setUp(self) -> None:\n        super(WatchmanTestCase, self).setUp()\n        self.checkPersistentSession()\n        self.checkOSApplicability()\n\n    def tearDown(self) -> None:\n        \"\"\"Print the watchman logs when a test complete\n\n        When debugging watchman test issues, having access to the logs makes\n        debugging much easier, and since test runners usually omit the test\n        output on success, let's always display the test output.\n        \"\"\"\n        print(\"Watchman logs:\")\n        self.dumpLogs()\n\n    def getClient(\n        self, inst=None, replace_cached: bool = False, no_cache: bool = False\n    ):\n        if inst or not hasattr(self, \"client\") or no_cache:\n            client = pywatchman.client(\n                timeout=self.socketTimeout,\n                transport=self.transport,\n                sendEncoding=self.encoding,\n                recvEncoding=self.encoding,\n                sockpath=(inst or self.watchmanInstance()).getSockPath(),\n            )\n            if (not inst or replace_cached) and not no_cache:\n                # only cache the client if it points to the shared instance\n                # pyre-fixme[16]: `WatchmanTestCase` has no attribute `client`.\n                self.client = client\n                self.addCleanup(lambda: self.__clearClient())\n            return client\n        return self.client\n\n    def __logTestInfo(self, test, msg):\n        if hasattr(self, \"client\"):\n            try:\n                self.getClient().query(\"log\", \"debug\", \"TEST: %s %s\\n\\n\" % (test, msg))\n            except Exception:\n                pass\n\n    def setAttemptNumber(self, attempt: int) -> None:\n        self.attempt = attempt\n\n    def __clearClient(self):\n        if hasattr(self, \"client\"):\n            self.client.close()\n            delattr(self, \"client\")\n\n    def _getTempDirName(self) -> str:\n        name = self._getLongTestID()\n        if self.attempt > 0:\n            name += \"-%d\" % self.attempt\n        return name\n\n    def _getLongTestID(self) -> str:\n        parallel = \"sp\"[int(self.parallelCrawl)]\n        return \"%s.%s.%s.%s\" % (self.id(), self.transport, self.encoding, parallel)\n\n    def run(self, result):\n        if result is None:\n            raise Exception(\"MUST be a runtests.py:Result instance\")\n\n        id = self._getLongTestID()\n        try:\n            self.__logTestInfo(id, \"BEGIN\")\n            super(WatchmanTestCase, self).run(result)\n        finally:\n            try:\n                self.watchmanCommand(\"log-level\", \"off\")\n                self.getClient().getLog(remove=True)\n            except Exception:\n                pass\n            self.__logTestInfo(id, \"END\")\n            self.__clearWatches()\n            self.__clearClient()\n\n        return result\n\n    def dumpLogs(self) -> None:\n        \"\"\"used in travis CI to show the hopefully relevant log snippets\"\"\"\n\n        print(self.getLogSample())\n\n    def getLogSample(self) -> str:\n        \"\"\"used in CI to show the hopefully relevant log snippets\"\"\"\n        inst = self.watchmanInstance()\n\n        def tail(logstr, n):\n            lines = logstr.split(\"\\n\")[-n:]\n            return \"\\n\".join(lines)\n\n        return \"\\n\".join(\n            [\n                \"CLI logs\",\n                tail(inst.getCLILogContents(), 500),\n                \"Server logs\",\n                tail(inst.getServerLogContents(), 500),\n            ]\n        )\n\n    def getServerLogContents(self):\n        \"\"\"\n        Returns the contents of the server log file as an array\n        that has already been split by line.\n        \"\"\"\n        return self.watchmanInstance().getServerLogContents().split(\"\\n\")\n\n    def setConfiguration(\n        self, transport, encoding, parallelCrawl, splitWatcher\n    ) -> None:\n        self.transport = transport\n        self.encoding = encoding\n        self.parallelCrawl = parallelCrawl\n        self.splitWatcher = splitWatcher\n\n    def removeRelative(self, base, *fname) -> None:\n        fname = os.path.join(base, *fname)\n        os.remove(fname)\n\n    def touch(self, fname, times=None) -> None:\n        try:\n            os.utime(fname, times)\n        except OSError as e:\n            if e.errno == errno.ENOENT:\n                with open(fname, \"a\"):\n                    os.utime(fname, times)\n            else:\n                raise\n\n    def touchRelative(self, base, *fname) -> None:\n        fname = os.path.join(base, *fname)\n        self.touch(fname, None)\n\n    def __clearWatches(self):\n        if hasattr(self, \"client\"):\n            try:\n                self.client.subs = {}\n                self.client.sub_by_root = {}\n                self.watchmanCommand(\"watch-del-all\")\n            except Exception:\n                pass\n\n    def __del__(self) -> None:\n        self.__clearWatches()\n\n    def watchmanCommand(self, *args):\n        client = self.getClient()\n        return client.query(*args)\n\n    def watchmanInstance(self):\n        return WatchmanInstance.getSharedInstance(self.watchmanConfig())\n\n    def watchmanConfig(self):\n        \"\"\"Watchman config for this test case\"\"\"\n        config = {\n            \"enable_parallel_crawl\": self.parallelCrawl,\n            \"prefer_split_fsevents_watcher\": self.splitWatcher,\n        }\n        return config\n\n    def _waitForCheck(self, cond, res_check, timeout: float):\n        deadline = time.time() + timeout\n        res = None\n        while time.time() < deadline:\n            Interrupt.checkInterrupt()\n            res = cond()\n            if res_check(res):\n                return [True, res]\n            time.sleep(0.03)\n        return [False, res]\n\n    # Continually invoke `cond` until it returns true or timeout\n    # is reached.  Returns a tuple of [bool, result] where the\n    # first element of the tuple indicates success/failure and\n    # the second element is the return value from the condition\n    def waitFor(self, cond, timeout=None):\n        timeout = self.getTimeout(timeout)\n        return self._waitForCheck(cond, lambda res: res, timeout)\n\n    def waitForEqual(self, expected, actual_cond, timeout=None):\n        timeout = self.getTimeout(timeout)\n        return self._waitForCheck(actual_cond, lambda res: res == expected, timeout)\n\n    def getTimeout(self, timeout=None) -> float:\n        return timeout or self.socketTimeout\n\n    def assertWaitFor(self, cond, timeout=None, message=None):\n        timeout = self.getTimeout(timeout)\n        status, res = self.waitFor(cond, timeout)\n        if status:\n            return res\n        if message is None:\n            message = \"%s was not met in %s seconds: %s\" % (cond, timeout, res)\n        self.fail(message)\n\n    def assertWaitForEqual(self, expected, actual_cond, timeout=None, message=None):\n        timeout = self.getTimeout(timeout)\n        status, res = self.waitForEqual(expected, actual_cond, timeout)\n        if status:\n            return res\n        if message is None:\n            message = \"%s was not equal to %s in %s seconds: %s\" % (\n                actual_cond,\n                expected,\n                timeout,\n                res,\n            )\n        self.fail(message)\n\n    def getFileList(self, root, cursor=None, relativeRoot=None):\n        expr = {\"expression\": [\"exists\"], \"fields\": [\"name\"]}\n        if cursor:\n            expr[\"since\"] = cursor\n        if relativeRoot:\n            expr[\"relative_root\"] = relativeRoot\n        res = self.watchmanCommand(\"query\", root, expr)\n        files = res[\"files\"]\n        self.last_file_list = files\n        return files\n\n    def waitForSync(self, root) -> None:\n        \"\"\"ensure that watchman has observed any pending file changes\n        This is most useful after mutating the filesystem and before\n        attempting to perform a since query\n        \"\"\"\n        self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"name\", \"_bogus_\"], \"fields\": [\"name\"]}\n        )\n\n    def getWatchList(self):\n        watch_list = self.watchmanCommand(\"watch-list\")[\"roots\"]\n        self.last_root_list = watch_list\n        return watch_list\n\n    def assertFileListsEqual(self, list1, list2, message=None) -> None:\n        list1 = [norm_relative_path(f) for f in list1]\n        list2 = [norm_relative_path(f) for f in list2]\n        self.assertCountEqual(list1, list2, message)\n\n    def fileListsEqual(self, list1, list2) -> bool:\n        list1 = [norm_relative_path(f) for f in list1]\n        list2 = [norm_relative_path(f) for f in list2]\n        return sorted(list1) == sorted(list2)\n\n    def fileListContains(self, list1, list2) -> bool:\n        \"\"\"return true if list1 contains each unique element in list2\"\"\"\n        set1 = {norm_relative_path(f) for f in list1}\n        list2 = [norm_relative_path(f) for f in list2]\n        return set1.issuperset(list2)\n\n    def assertFileListContains(self, list1, list2, message=None) -> None:\n        if not self.fileListContains(list1, list2):\n            message = \"list1 %r should contain %r: %s\" % (list1, list2, message)\n            self.fail(message)\n\n    # Wait for the file list to match the input set\n    def assertFileList(\n        self, root, files=None, cursor=None, relativeRoot=None, message=None\n    ) -> None:\n        expected_files = files or []\n        if (cursor is not None) and cursor[0:2] == \"n:\":\n            # it doesn't make sense to repeat named cursor queries, as\n            # the cursor moves each time\n            self.getFileList(root, cursor=cursor, relativeRoot=relativeRoot)\n        else:\n            st, res = self.waitFor(\n                lambda: self.fileListsEqual(\n                    self.getFileList(root, cursor=cursor, relativeRoot=relativeRoot),\n                    expected_files,\n                )\n            )\n        # pyre-fixme[16]: `WatchmanTestCase` has no attribute `last_file_list`.\n        self.assertFileListsEqual(self.last_file_list, expected_files, message)\n\n    def assertQueryRepsonseEqual(self, expected_resp, actual_resp) -> None:\n        # converting the dict to a string version of the json is not\n        # exactly the fastest function to use to sort, but it is unambiguous.\n        sorted_expected = sorted(\n            expected_resp, key=lambda x: json.dumps(x, sort_keys=True)\n        )\n        sorted_actual = sorted(actual_resp, key=lambda x: json.dumps(x, sort_keys=True))\n\n        self.assertCountEqual(sorted_expected, sorted_actual)\n\n    # Wait for the list of watched roots to match the input set\n    def assertWatchListContains(self, roots, message=None) -> None:\n        st, res = self.waitFor(\n            lambda: self.fileListContains(self.getWatchList(), roots)\n        )\n        # pyre-fixme[16]: `WatchmanTestCase` has no attribute `last_root_list`.\n        self.assertFileListContains(self.last_root_list, roots, message)\n\n    def waitForSub(\n        self, name, root, accept=None, timeout=None, remove: bool = True, client=None\n    ):\n        timeout = self.getTimeout(timeout)\n        client = client or self.getClient()\n\n        def default_accept(dat):\n            return True\n\n        if accept is None:\n            accept = default_accept\n\n        deadline = time.time() + timeout\n        while time.time() < deadline:\n            Interrupt.checkInterrupt()\n            sub = self.getSubscription(name, root=root, remove=False, client=client)\n            if sub is not None:\n                res = accept(sub)\n                if res:\n                    return self.getSubscription(\n                        name, root=root, remove=remove, client=client\n                    )\n            # wait for more data\n            client.setTimeout(deadline - time.time())\n            client.receive()\n\n        return None\n\n    def waitForSubFileList(self, name, root, fileList: List[str], timeout=None):\n        def accept(subResults: List[Dict[str, Any]]) -> bool:\n            if subResults is None:\n                return False\n\n            normalizedResult = self.normalizeFiles(subResults[-1])\n\n            for file in fileList:\n                if file not in normalizedResult[\"files\"]:\n                    return False\n\n            return True\n\n        return self.waitForSub(name, root, accept=accept, timeout=timeout)\n\n    def getSubscription(\n        self, name, root, remove: bool = True, normalize: bool = True, client=None\n    ):\n        client = client or self.getClient()\n        data = client.getSubscription(name, root=root, remove=remove)\n\n        if data is None or not normalize:\n            return data\n\n        return [self.normalizeFiles(sub) for sub in data]\n\n    def normalizeFiles(self, data):\n        def norm_item(item):\n            if isinstance(item, STRING_TYPES):\n                return norm_relative_path(item)\n            item[\"name\"] = norm_relative_path(item[\"name\"])\n            return item\n\n        if \"files\" in data:\n            files = []\n            for item in data[\"files\"]:\n                files.append(norm_item(item))\n            data[\"files\"] = files\n\n        return data\n\n    def isCaseInsensitive(self):\n        if hasattr(self, \"_case_insensitive\"):\n            return self._case_insensitive\n        d = self.mkdtemp()\n        self.touchRelative(d, \"a\")\n        self._case_insensitive = os.path.exists(os.path.join(d, \"A\"))\n        return self._case_insensitive\n\n    def suspendWatchman(self) -> None:\n        self.watchmanInstance().suspend()\n\n    def resumeWatchman(self) -> None:\n        self.watchmanInstance().resume()\n\n    def rootIsWatched(self, r) -> bool:\n        r = norm_absolute_path(r)\n        watches = [\n            norm_absolute_path(root)\n            for root in self.watchmanCommand(\"watch-list\")[\"roots\"]\n        ]\n        return r in watches\n\n\ndef skip_for(transports=None, codecs=None):\n    \"\"\"\n    Decorator to allow skipping tests for particular transports or codecs.\"\"\"\n    transports = set(transports or ())\n    codecs = set(codecs or ())\n\n    def skip(f):\n        @functools.wraps(f)\n        def wrapper(self, *args, **kwargs):\n            if self.transport in transports or self.encoding in codecs:\n                self.skipTest(\n                    \"test skipped for transport %s, codec %s\"\n                    % (self.transport, self.encoding)\n                )\n            return f(self, *args, **kwargs)\n\n        return wrapper\n\n    return skip\n\n\ndef expand_matrix(test_class) -> None:\n    \"\"\"\n    A decorator function used to create different permutations from\n    a given input test class.\n\n    Given a test class named \"MyTest\", this will create 4 separate\n    classes named \"MyTestLocalBser\", \"MyTestLocalBser2\",\n    \"MyTestLocalJson\" and \"MyTestCliJson\" that will exercise the\n    different transport and encoding options implied by their names.\n    \"\"\"\n\n    matrix = [\n        (\"unix\", \"bser\", \"parallel\", False, \"UnixBser2\"),\n        (\"unix\", \"json\", \"serial\", False, \"UnixJson\"),\n        (\"cli\", \"json\", \"parallel\", False, \"CliJson\"),\n    ]\n\n    if os.name == \"nt\":\n        matrix += [(\"namedpipe\", \"bser\", \"serial\", False, \"NamedPipeBser2\")]\n\n    if sys.platform == \"darwin\":\n        matrix += [\n            (\"unix\", \"bser\", \"parallel\", True, \"KQueueAndFSEventsUnixBser2\"),\n        ]\n\n    # We do some rather hacky things here to define new test class types\n    # in our caller's scope.  This is needed so that the unittest TestLoader\n    # will find the subclasses we define.\n    # pyre-fixme[16]: Optional type has no attribute `f_back`.\n    caller_scope = inspect.currentframe().f_back.f_locals\n\n    def make_class(transport, encoding, suffix, parallel, split):\n        subclass_name = test_class.__name__ + suffix\n\n        # Define a new class that derives from the input class\n        class MatrixTest(test_class):\n            def setDefaultConfiguration(self):\n                self.setConfiguration(transport, encoding, parallel, split)\n\n        # Set the name and module information on our new subclass\n        MatrixTest.__name__ = subclass_name\n        MatrixTest.__qualname__ = subclass_name\n        MatrixTest.__module__ = test_class.__module__\n\n        # Before we publish the test, check whether that generated\n        # configuration would always skip\n        try:\n            t = MatrixTest()\n            t.checkPersistentSession()\n            t.checkOSApplicability()\n            caller_scope[subclass_name] = MatrixTest\n        except unittest.SkipTest:\n            pass\n\n    for transport, encoding, parallel, split, suffix in matrix:\n        make_class(transport, encoding, suffix, parallel == \"parallel\", split)\n\n    return None\n"
  },
  {
    "path": "watchman/integration/lib/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nimport os.path\n\nif \"WATCHMAN_INTEGRATION_HELPERS\" in os.environ:\n    HELPER_ROOT = os.path.join(os.environ[\"WATCHMAN_INTEGRATION_HELPERS\"])\nelse:\n    WATCHMAN_SRC_DIR: str = os.environ.get(\"WATCHMAN_SRC_DIR\", os.getcwd())\n    HELPER_ROOT = os.path.join(WATCHMAN_SRC_DIR, \"integration\")\n"
  },
  {
    "path": "watchman/integration/lib/node.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nimport os\nimport shutil\nimport subprocess\n\n\ndef _find_node():\n    return os.environ.get(\"NODE_BIN\", shutil.which(\"node\"))\n\n\ndef _find_yarn():\n    return os.environ.get(\"YARN_PATH\", shutil.which(\"yarn\"))\n\n\n# To avoid CI environments that put broken yarn and node executables in PATH,\n# verify they at least run.\ndef _ensure_can_run(binary_path) -> None:\n    if binary_path is None:\n        return None\n    try:\n        if 0 != subprocess.call([binary_path, \"--version\"], stdout=subprocess.DEVNULL):\n            return None\n    except OSError:\n        return None\n    return binary_path\n\n\nnode_bin = _ensure_can_run(_find_node())\nyarn_bin = _ensure_can_run(_find_yarn())\n"
  },
  {
    "path": "watchman/integration/lib/path_utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport ctypes\nimport os\nimport os.path\nimport platform\n\n\nif os.name == \"nt\":\n\n    def open_file_win(path):\n        create_file = ctypes.windll.kernel32.CreateFileW\n\n        c_path = ctypes.create_unicode_buffer(path)\n        access = 0\n        mode = 7  # FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE\n        disposition = 3  # OPEN_EXISTING\n        flags = 33554432  # FILE_FLAG_BACKUP_SEMANTICS\n\n        h = create_file(c_path, access, mode, 0, disposition, flags, 0)\n        if h == -1:\n            raise WindowsError(\"Failed to open file: \" + path)\n\n        return h\n\n    def get_canonical_filesystem_path(name):\n        gfpnbh = ctypes.windll.kernel32.GetFinalPathNameByHandleW\n        close_handle = ctypes.windll.kernel32.CloseHandle\n\n        h = open_file_win(name)\n        try:\n            gfpnbh = ctypes.windll.kernel32.GetFinalPathNameByHandleW\n            numwchars = 1024\n            while True:\n                buf = ctypes.create_unicode_buffer(numwchars)\n                result = gfpnbh(h, buf, numwchars, 0)\n                if result == 0:\n                    raise Exception(\"unknown error while normalizing path\")\n\n                # The first four chars are //?/\n                if result <= numwchars:\n                    return buf.value[4:].replace(\"\\\\\", \"/\")\n\n                # Not big enough; the result is the amount we need\n                numwchars = result + 1\n        finally:\n            close_handle(h)\n\nelif platform.system() == \"Darwin\":\n    import ctypes.util\n\n    libc = ctypes.CDLL(ctypes.util.find_library(\"c\"), use_errno=True)\n    realpath = libc.realpath\n    realpath.argtypes = [ctypes.c_char_p, ctypes.c_char_p]\n    realpath.restype = ctypes.c_char_p\n\n    def get_canonical_filesystem_path(name):\n        numchars = 1024  # MAXPATHLEN\n        # The kernel caps this routine to MAXPATHLEN, so there is no\n        # point in over-allocating or trying again with a larger buffer\n        buffer = ctypes.create_string_buffer(numchars)\n        result = realpath(name.encode(\"utf-8\"), buffer)\n        if result is None:\n            raise OSError(ctypes.get_errno())\n        return result.decode(\"utf-8\")\n\nelse:\n\n    def get_canonical_filesystem_path(name):\n        return os.path.normpath(name)\n\n\ndef norm_relative_path(path):\n    # TODO: in the future we will standardize on `/` as the\n    # dir separator so we can remove the replace call from here.\n    # We do not need to normcase because all of our tests are\n    # using the appropriate case already, and watchman returns\n    # paths in the canonical file replace case anyway.\n    return path.replace(\"\\\\\", \"/\")\n\n\ndef norm_absolute_path(path):\n    # TODO: in the future we will standardize on `/` as the\n    # dir separator so we can remove the replace call.\n    return path.replace(\"\\\\\", \"/\")\n"
  },
  {
    "path": "watchman/integration/node_basic.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar assert = require('assert');\nvar watchman = require('fb-watchman');\nvar client = new watchman.Client();\n\nvar t = setTimeout(function () {\n  assert.fail('timeout', null, 'timed out running test');\n}, 10000);\n\nclient.on('error', function(error) {\n  assert.fail(error, null, 'unexpected error');\n});\n\nclient.command(['version'], function(error, resp) {\n  assert.equal(error, null, 'no errors');\n  console.log('Talking to watchman version', resp.version);\n  client.end();\n  clearTimeout(t);\n});\n\n"
  },
  {
    "path": "watchman/integration/site_spawn.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# This is a simple script that spawns a watchman process in the background\n\nimport os\nimport subprocess\nimport sys\n\n\nargs = sys.argv[1:]\nargs.insert(0, os.environ.get(\"WATCHMAN_BINARY\", \"watchman\"))\nargs.insert(1, \"--foreground\")\nsubprocess.Popen(args)\n"
  },
  {
    "path": "watchman/integration/site_spawn_fail.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# This is a simple script that fails to spawn a process in the background\n\nimport sys\n\n\nprint(\"failed to start\")\nsys.stdout.flush()\nsys.exit(1)\n"
  },
  {
    "path": "watchman/integration/test_absroot.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport os.path\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\nfrom watchman.integration.lib.path_utils import norm_absolute_path\n\n\n@WatchmanTestCase.expand_matrix\nclass TestAbsoluteRoot(WatchmanTestCase.WatchmanTestCase):\n    def test_dot(self) -> None:\n        root = self.mkdtemp()\n\n        save_dir = os.getcwd()\n        try:\n            os.chdir(root)\n\n            dot = \"\" if os.name == \"nt\" else \".\"\n\n            if self.transport == \"cli\":\n                res = self.watchmanCommand(\"watch\", dot)\n                self.assertEqual(root, norm_absolute_path(res[\"watch\"]))\n            else:\n                with self.assertRaises(pywatchman.WatchmanError) as ctx:\n                    self.watchmanCommand(\"watch\", dot)\n\n                self.assertIn(\"must be absolute\", str(ctx.exception))\n\n        finally:\n            os.chdir(save_dir)\n\n    def test_root(self) -> None:\n        if os.name != \"nt\":\n            with self.assertRaises(pywatchman.WatchmanError) as ctx:\n                self.watchmanCommand(\"watch\", \"/\")\n\n                self.assertIn(\"cannot watch\", str(ctx.exception))\n"
  },
  {
    "path": "watchman/integration/test_age_file.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport os.path\nimport shutil\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestAgeOutFile(WatchmanTestCase.WatchmanTestCase):\n    @WatchmanTestCase.skip_for(transports=[\"cli\"])\n    def test_age_file(self) -> None:\n        root = self.mkdtemp()\n\n        os.mkdir(os.path.join(root, \"a\"))\n        self.touchRelative(root, \"a\", \"file.txt\")\n        self.touchRelative(root, \"b.txt\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\"a\", \"a/file.txt\", \"b.txt\"])\n\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\", \"exists\"]})\n        self.assertTrue(res[\"is_fresh_instance\"])\n        clock = res[\"clock\"]\n\n        # Removing file nodes also impacts the suffix list, so we test\n        # that it is operating as intended in here too\n        res = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"suffix\", \"txt\"], \"fields\": [\"name\"]}\n        )\n\n        self.assertFileListsEqual(res[\"files\"], [\"a/file.txt\", \"b.txt\"])\n\n        # Let's track a named cursor; we need to validate that it is\n        # correctly aged out\n        self.watchmanCommand(\"since\", root, \"n:foo\")\n        cursors = self.watchmanCommand(\"debug-show-cursors\", root)\n        self.assertIn(\"n:foo\", cursors[\"cursors\"])\n\n        os.unlink(os.path.join(root, \"a\", \"file.txt\"))\n        shutil.rmtree(os.path.join(root, \"a\"))\n\n        self.assertFileList(root, [\"b.txt\"])\n\n        # Prune all deleted items\n        self.watchmanCommand(\"debug-ageout\", root, 0)\n\n        # Wait for 'a' to age out and cause is_fresh_instance to be set\n        def is_fresh():\n            res = self.watchmanCommand(\n                \"query\", root, {\"since\": clock, \"fields\": [\"name\", \"exists\"]}\n            )\n            return res.get(\"is_fresh_instance\", False)\n\n        self.waitFor(lambda: is_fresh())\n\n        self.assertFileList(root, [\"b.txt\"], cursor=clock)\n\n        # Our cursor should have been collected\n        cursors = self.watchmanCommand(\"debug-show-cursors\", root)\n        self.assertNotIn(\"n:foo\", cursors[\"cursors\"])\n\n        # Add a new file to the suffix list; this will insert at the head\n        self.touchRelative(root, \"c.txt\")\n\n        # Suffix quere to very that linkage is safe\n        res = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"suffix\", \"txt\"], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual([\"b.txt\", \"c.txt\"], res[\"files\"])\n\n        # Stress the aging a bit\n        for _ in range(3):\n            os.mkdir(os.path.join(root, \"dir\"))\n            for j in range(100):\n                self.touchRelative(root, \"stress-%d\" % j)\n                self.touchRelative(root, \"dir\", str(j))\n\n            for j in range(100):\n                os.unlink(os.path.join(root, \"stress-%d\" % j))\n\n            shutil.rmtree(os.path.join(root, \"dir\"))\n\n            self.assertFileList(root, [\"b.txt\", \"c.txt\"])\n            self.watchmanCommand(\"debug-ageout\", root, 0)\n            self.assertFileList(root, [\"b.txt\", \"c.txt\"])\n"
  },
  {
    "path": "watchman/integration/test_age_watch.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\nimport os.path\nimport unittest\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestAgeOutWatch(WatchmanTestCase.WatchmanTestCase):\n    def makeRootAndConfig(self):\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"idle_reap_age_seconds\": 3}))\n        return root\n\n    @unittest.skip(\"This test is fundamentally flaky\")\n    def test_watchReap(self) -> None:\n        root = self.makeRootAndConfig()\n        self.watchmanCommand(\"watch\", root)\n\n        # make sure that we don't reap when there are registered triggers\n        self.watchmanCommand(\"trigger\", root, {\"name\": \"t\", \"command\": [\"true\"]})\n\n        self.assertWaitFor(\n            lambda: self.rootIsWatched(root),\n            message=\"%s was not watched by watchman-wait\" % root,\n        )\n\n        self.watchmanCommand(\"trigger-del\", root, \"t\")\n\n        # Make sure that we don't reap while we hold a subscription\n        self.watchmanCommand(\"subscribe\", root, \"s\", {\"fields\": [\"name\"]})\n\n        # subscription won't stick in cli mode\n        if self.transport != \"cli\":\n            self.assertWaitFor(lambda: self.rootIsWatched(root))\n\n            # let's verify that we can safely reap two roots at once without\n            # causing a deadlock\n            second = self.makeRootAndConfig()\n            self.watchmanCommand(\"watch\", second)\n            self.assertFileList(second, [\".watchmanconfig\"])\n\n            # and unsubscribe from root and allow it to be reaped\n            unsub = self.watchmanCommand(\"unsubscribe\", root, \"s\")\n            self.assertTrue(unsub[\"deleted\"], \"deleted subscription %s\" % unsub)\n            # and now we should be ready to reap\n            self.assertWaitFor(\n                lambda: not self.rootIsWatched(root) and not self.rootIsWatched(second)\n            )\n"
  },
  {
    "path": "watchman/integration/test_auth.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestAuth(WatchmanTestCase.WatchmanTestCase):\n    def requiresPersistentSession(self) -> bool:\n        return True\n\n    def test_dropPriv(self) -> None:\n        root = self.mkdtemp()\n        self.touchRelative(root, \"111\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        # pretend we are not the owner\n        self.watchmanCommand(\"debug-drop-privs\")\n\n        # Should be able to watch something that is already watched\n        self.watchmanCommand(\"watch\", root)\n\n        # can't make a new watch\n        altroot = self.mkdtemp()\n        with self.assertRaises(pywatchman.WatchmanError):\n            self.watchmanCommand(\"watch\", altroot)\n\n        # Should not be able to delete a watch\n        with self.assertRaises(pywatchman.WatchmanError):\n            self.watchmanCommand(\"watch-del\", root)\n\n        # or register a trigger\n        with self.assertRaises(pywatchman.WatchmanError):\n            self.watchmanCommand(\"trigger\", root, \"trig\", \"*.js\", \"--\", \"false\")\n"
  },
  {
    "path": "watchman/integration/test_big.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nfrom typing import List\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\ndef populate_tests(original_test_class):\n    # Rather than one long sequential test that tests every buffer size, register\n    # an individual test per size. This allows more tests to run in parallel.\n\n    # Create a huge query.  We're shooting for more than 2MB; the server buffer\n    # size is 1MB and we want to make sure we need more than 2 chunks, and we\n    # want to tickle some buffer boundary conditions\n\n    base = 2 * 1024 * 1024\n    sizes = list(range(base - 256, base + 256, 63))\n    while sizes:\n        batch = sizes[:4]\n        sizes = sizes[4:]\n        suffix = \"_\".join(map(str, batch))\n        setattr(\n            original_test_class,\n            f\"test_bigQuery_{suffix}\",\n            lambda self, batch=batch: self.do_test_bigQuery(sizes=batch),\n        )\n\n    return original_test_class\n\n\n@WatchmanTestCase.expand_matrix\n@populate_tests\nclass TestBig(WatchmanTestCase.WatchmanTestCase):\n    def checkOSApplicability(self) -> None:\n        if os.name == \"nt\":\n            self.skipTest(\"Windows has problems with this test\")\n\n    def do_test_bigQuery(self, sizes: List[int]) -> None:\n        root = self.mkdtemp()\n\n        self.watchmanCommand(\"watch\", root)\n\n        for size in sizes:\n            try:\n                res = self.watchmanCommand(\n                    \"query\", root, {\"expression\": [\"name\", \"a\" * size]}\n                )\n\n                self.assertEqual([], res[\"files\"])\n            except pywatchman.WatchmanError as e:\n                # We don't want to print the real command, as\n                # it is too long, instead, replace it with\n                # a summary of the size that we picked\n                e.cmd = \"big query with size %d\" % size\n\n                if self.transport == \"cli\":\n                    e.cmd = \"%s\\n%s\" % (e.cmd, self.getLogSample())\n                raise\n"
  },
  {
    "path": "watchman/integration/test_big_file.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport os.path\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestBigFile(WatchmanTestCase.WatchmanTestCase):\n    def test_big_file(self) -> None:\n        root = self.mkdtemp()\n\n        def check(file_size):\n            with open(os.path.join(root, \"big\"), \"w\") as f:\n                f.truncate(file_size)\n\n            self.watchmanCommand(\"watch\", root)\n\n            result = self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"fields\": [\n                        \"name\",\n                        \"size\",\n                    ],\n                },\n            )\n\n            self.assertEqual(len(result[\"files\"]), 1)\n\n            file = result[\"files\"][0]\n            self.assertEqual(file[\"name\"], \"big\")\n            self.assertEqual(file[\"size\"], file_size)\n\n        # This size overflows int32\n        check(2**31)\n\n        # This size overflows uint32\n        check(2**32)\n"
  },
  {
    "path": "watchman/integration/test_bsdish.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestBSDish(WatchmanTestCase.WatchmanTestCase):\n    def test_bsdish_toplevel(self) -> None:\n        root = self.mkdtemp()\n        os.mkdir(os.path.join(root, \"lower\"))\n        self.touchRelative(root, \"lower\", \"file\")\n        self.touchRelative(root, \"top\")\n\n        watch = self.watchmanCommand(\"watch\", root)\n\n        self.assertFileList(root, [\"lower\", \"lower/file\", \"top\"])\n\n        find = self.watchmanCommand(\"find\", root)\n        clock = find[\"clock\"]\n\n        since = self.watchmanCommand(\"since\", root, clock)\n        clock = since[\"clock\"]\n\n        since = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"allof\", [\"since\", clock], [\"type\", \"f\"]]}\n        )\n        self.assertFileListsEqual([], since[\"files\"])\n        clock = since[\"clock\"]\n\n        os.unlink(os.path.join(root, \"top\"))\n        self.assertFileList(root, [\"lower\", \"lower/file\"])\n\n        now = self.watchmanCommand(\"since\", root, clock)\n        expected = [\"top\"]\n        if watch[\"watcher\"] == \"kqueue+fsevents\":\n            # For the split watch, a cookie is being written to each top level\n            # directory, and thus the \"lower\" directory will be reported as\n            # having been changed.\n            expected.append(\"lower\")\n        self.assertEqual(len(expected), len(now[\"files\"]))\n        self.assertFileListsEqual(\n            expected, list(map(lambda x: x[\"name\"], now[\"files\"]))\n        )\n        for f in now[\"files\"]:\n            if f[\"name\"] == \"top\":\n                self.assertFalse(f[\"exists\"])\n"
  },
  {
    "path": "watchman/integration/test_bser_cli.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport binascii\nimport json\nimport os\nimport os.path\nimport subprocess\nimport unittest\n\nfrom pywatchman import bser, encoding\nfrom watchman.integration.lib import WatchmanInstance\n\n\nclass TestDashJCliOption(unittest.TestCase):\n    def getSockPath(self):\n        return WatchmanInstance.getSharedInstance().getSockPath()\n\n    def doJson(self, addNewLine, pretty: bool = False) -> None:\n        sockpath = self.getSockPath()\n        if pretty:\n            watchman_cmd = b'[\\n\"get-sockname\"\\n]'\n        else:\n            watchman_cmd = json.dumps([\"get-sockname\"])\n            watchman_cmd = watchman_cmd.encode(\"ascii\")\n        if addNewLine:\n            watchman_cmd = watchman_cmd + b\"\\n\"\n\n        cli_cmd = [\n            os.environ.get(\"WATCHMAN_BINARY\", \"watchman\"),\n            \"--unix-listener-path={0}\".format(sockpath.unix_domain),\n            \"--named-pipe-path={0}\".format(sockpath.named_pipe),\n            \"--logfile=/BOGUS\",\n            \"--statefile=/BOGUS\",\n            \"--no-spawn\",\n            \"--no-local\",\n            \"-j\",\n        ]\n        proc = subprocess.Popen(\n            cli_cmd,\n            stdin=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n            stdout=subprocess.PIPE,\n        )\n\n        stdout, stderr = proc.communicate(input=watchman_cmd)\n        self.assertEqual(proc.poll(), 0, stderr.decode(errors=\"replace\"))\n        # the response should be json because that is the default\n        result = json.loads(stdout.decode(\"utf-8\"))\n        self.assertEqual(result[\"unix_domain\"], sockpath.unix_domain)\n\n    def test_jsonInputNoNewLine(self) -> None:\n        self.doJson(False)\n\n    def test_jsonInputNewLine(self) -> None:\n        self.doJson(True)\n\n    def test_jsonInputPretty(self) -> None:\n        self.doJson(True, True)\n\n    def test_bserInput(self) -> None:\n        sockpath = self.getSockPath()\n        # pyre-fixme[16]: Module `pywatchman` has no attribute `bser`.\n        watchman_cmd = bser.dumps([\"get-sockname\"])\n        cli_cmd = [\n            os.environ.get(\"WATCHMAN_BINARY\", \"watchman\"),\n            \"--unix-listener-path={0}\".format(sockpath.unix_domain),\n            \"--named-pipe-path={0}\".format(sockpath.named_pipe),\n            \"--logfile=/BOGUS\",\n            \"--statefile=/BOGUS\",\n            \"--no-spawn\",\n            \"--no-local\",\n            \"-j\",\n        ]\n        proc = subprocess.Popen(\n            cli_cmd,\n            stdin=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n            stdout=subprocess.PIPE,\n        )\n\n        stdout, stderr = proc.communicate(input=watchman_cmd)\n        self.assertEqual(proc.poll(), 0, stderr)\n        # the response should be bser to match our input\n        # pyre-fixme[16]: Module `pywatchman` has no attribute `bser`.\n        result = bser.loads(stdout)\n        result_sockname = result[\"unix_domain\"]\n        result_sockname = encoding.decode_local(result_sockname)\n        self.assertEqual(\n            result_sockname,\n            sockpath.unix_domain,\n            binascii.hexlify(stdout).decode(\"ascii\"),\n        )\n"
  },
  {
    "path": "watchman/integration/test_bulkstat.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nfrom watchman.integration.lib import WatchmanInstance, WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestBulkStat(WatchmanTestCase.WatchmanTestCase):\n    def test_bulkstat_on(self) -> None:\n        config = {\"_use_bulkstat\": True}\n        with WatchmanInstance.Instance(config=config) as inst:\n            inst.start()\n            self.getClient(inst, replace_cached=True)\n\n            root = self.mkdtemp()\n            # pyre-fixme[16]: `TestBulkStat` has no attribute `client`.\n            self.client.query(\"watch\", root)\n\n            self.touchRelative(root, \"foo\")\n            self.touchRelative(root, \"bar\")\n            self.assertFileList(root, [\"foo\", \"bar\"])\n\n    def test_bulkstat_off(self) -> None:\n        config = {\"_use_bulkstat\": False}\n        with WatchmanInstance.Instance(config=config) as inst:\n            inst.start()\n            self.getClient(inst, replace_cached=True)\n\n            root = self.mkdtemp()\n            # pyre-fixme[16]: `TestBulkStat` has no attribute `client`.\n            self.client.query(\"watch\", root)\n\n            self.touchRelative(root, \"foo\")\n            self.touchRelative(root, \"bar\")\n            self.assertFileList(root, [\"foo\", \"bar\"])\n"
  },
  {
    "path": "watchman/integration/test_capabilities.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nimport os\nimport sys\n\nimport pywatchman\nimport pywatchman.capabilities\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestCapabilities(WatchmanTestCase.WatchmanTestCase):\n    def test_capabilities(self) -> None:\n        client = self.getClient()\n        res = client.query(\"version\")\n        self.assertFalse(\"error\" in res, \"version with no args still works\")\n\n        res = client.query(\"version\", {\"optional\": [\"term-match\", \"will-never-exist\"]})\n        self.assertDictEqual(\n            res[\"capabilities\"], {\"term-match\": True, \"will-never-exist\": False}\n        )\n\n        res = client.query(\n            \"version\", {\"required\": [\"term-match\"], \"optional\": [\"will-never-exist\"]}\n        )\n        self.assertDictEqual(\n            res[\"capabilities\"], {\"term-match\": True, \"will-never-exist\": False}\n        )\n        self.assertFalse(\"error\" in res, \"no error for missing optional\")\n\n        with self.assertRaisesRegex(\n            pywatchman.CommandError,\n            \"client required capabilities \\\\[will-never-exist\\\\] not \"\n            + \"supported by this server\",\n        ):\n            client.query(\"version\", {\"required\": [\"term-match\", \"will-never-exist\"]})\n\n    def test_capabilityCheck(self) -> None:\n        client = self.getClient()\n\n        res = client.capabilityCheck(optional=[\"term-match\", \"will-never-exist\"])\n        self.assertDictEqual(\n            res[\"capabilities\"], {\"term-match\": True, \"will-never-exist\": False}\n        )\n\n        res = client.capabilityCheck(\n            required=[\"term-match\"], optional=[\"will-never-exist\"]\n        )\n        self.assertDictEqual(\n            res[\"capabilities\"], {\"term-match\": True, \"will-never-exist\": False}\n        )\n\n        with self.assertRaisesRegex(\n            pywatchman.CommandError,\n            \"client required capabilities \\\\[will-never-exist\\\\] not \"\n            + \"supported by this server\",\n        ):\n            client.capabilityCheck(required=[\"term-match\", \"will-never-exist\"])\n\n    def test_capabilitySynth(self) -> None:\n        res = pywatchman.capabilities.synthesize(\n            {\"version\": \"1.0\"}, {\"optional\": [\"will-never-exist\"], \"required\": []}\n        )\n        self.assertDictEqual(\n            res, {\"version\": \"1.0\", \"capabilities\": {\"will-never-exist\": False}}\n        )\n\n        res = pywatchman.capabilities.synthesize(\n            {\"version\": \"1.0\"}, {\"required\": [\"will-never-exist\"], \"optional\": []}\n        )\n        self.assertDictEqual(\n            res,\n            {\n                \"version\": \"1.0\",\n                \"error\": \"client required capabilities [will-never-exist] \"\n                + \"not supported by this server\",\n                \"capabilities\": {\"will-never-exist\": False},\n            },\n        )\n\n        res = pywatchman.capabilities.synthesize(\n            {\"version\": \"3.2\"}, {\"optional\": [\"relative_root\"], \"required\": []}\n        )\n        self.assertDictEqual(\n            res, {\"version\": \"3.2\", \"capabilities\": {\"relative_root\": False}}\n        )\n        res = pywatchman.capabilities.synthesize(\n            {\"version\": \"3.3\"}, {\"optional\": [\"relative_root\"], \"required\": []}\n        )\n        self.assertDictEqual(\n            res, {\"version\": \"3.3\", \"capabilities\": {\"relative_root\": True}}\n        )\n\n    def test_full_capability_set(self) -> None:\n        client = self.getClient()\n        res = client.listCapabilities()\n\n        expected = {\n            \"bser-v2\",\n            \"clock-sync-timeout\",\n            \"cmd-clock\",\n            \"cmd-debug-ageout\",\n            \"cmd-debug-contenthash\",\n            \"cmd-debug-drop-privs\",\n            \"cmd-debug-get-asserted-states\",\n            \"cmd-debug-get-subscriptions\",\n            \"cmd-debug-poison\",\n            \"cmd-debug-recrawl\",\n            \"cmd-debug-root-status\",\n            \"cmd-debug-set-parallel-crawl\",\n            \"cmd-debug-set-subscriptions-paused\",\n            \"cmd-debug-show-cursors\",\n            \"cmd-debug-status\",\n            \"cmd-debug-symlink-target-cache\",\n            \"cmd-debug-watcher-info\",\n            \"cmd-debug-watcher-info-clear\",\n            \"cmd-find\",\n            \"cmd-flush-subscriptions\",\n            \"cmd-get-config\",\n            \"cmd-get-log\",\n            \"cmd-get-pid\",\n            \"cmd-get-sockname\",\n            \"cmd-global-log-level\",\n            \"cmd-list-capabilities\",\n            \"cmd-log\",\n            \"cmd-log-level\",\n            \"cmd-query\",\n            \"cmd-shutdown-server\",\n            \"cmd-since\",\n            \"cmd-state-enter\",\n            \"cmd-state-leave\",\n            \"cmd-subscribe\",\n            \"cmd-trigger\",\n            \"cmd-trigger-del\",\n            \"cmd-trigger-list\",\n            \"cmd-unsubscribe\",\n            \"cmd-version\",\n            \"cmd-watch\",\n            \"cmd-watch-del\",\n            \"cmd-watch-del-all\",\n            \"cmd-watch-list\",\n            \"cmd-watch-project\",\n            \"dedup_results\",\n            \"field-atime\",\n            \"field-atime_f\",\n            \"field-atime_ms\",\n            \"field-atime_ns\",\n            \"field-atime_us\",\n            \"field-cclock\",\n            \"field-content.sha1hex\",\n            \"field-ctime\",\n            \"field-ctime_f\",\n            \"field-ctime_ms\",\n            \"field-ctime_ns\",\n            \"field-ctime_us\",\n            \"field-dev\",\n            \"field-exists\",\n            \"field-gid\",\n            \"field-ino\",\n            \"field-mode\",\n            \"field-mtime\",\n            \"field-mtime_f\",\n            \"field-mtime_ms\",\n            \"field-mtime_ns\",\n            \"field-mtime_us\",\n            \"field-name\",\n            \"field-new\",\n            \"field-nlink\",\n            \"field-oclock\",\n            \"field-size\",\n            \"field-symlink_target\",\n            \"field-type\",\n            \"field-uid\",\n            \"glob_generator\",\n            \"relative_root\",\n            \"saved-state-local\",\n            \"scm-git\",\n            \"scm-hg\",\n            \"scm-since\",\n            \"suffix-set\",\n            \"term-allof\",\n            \"term-anyof\",\n            \"term-dirname\",\n            \"term-empty\",\n            \"term-exists\",\n            \"term-false\",\n            \"term-idirname\",\n            \"term-imatch\",\n            \"term-iname\",\n            \"term-ipcre\",\n            \"term-match\",\n            \"term-name\",\n            \"term-not\",\n            \"term-pcre\",\n            \"term-since\",\n            \"term-size\",\n            \"term-suffix\",\n            \"term-true\",\n            \"term-type\",\n            \"watcher-eden\",\n            \"wildmatch\",\n            \"wildmatch-multislash\",\n        }\n\n        if sys.platform == \"darwin\":\n            expected.add(\"watcher-fsevents\")\n            expected.add(\"watcher-kqueue\")\n            expected.add(\"watcher-kqueue+fsevents\")\n            expected.add(\"cmd-debug-kqueue-and-fsevents-recrawl\")\n            expected.add(\"cmd-debug-fsevents-inject-drop\")\n        elif sys.platform == \"linux\":\n            expected.add(\"watcher-inotify\")\n        elif sys.platform == \"win32\":\n            expected.add(\"watcher-win32\")\n\n        if os.environ.get(\"TESTING_VIA_BUCK\", \"0\") == \"1\":\n            expected.add(\"saved-state-manifold\")\n\n        unimportant = {\n            \"cmd-debug-prof-dump\",\n        }\n\n        self.assertEqual(\n            expected,\n            set(res) - unimportant,\n        )\n"
  },
  {
    "path": "watchman/integration/test_case_sensitive.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestCaseSensitive(WatchmanTestCase.WatchmanTestCase):\n    def test_changeCase(self) -> None:\n        root = self.mkdtemp()\n        os.mkdir(os.path.join(root, \"foo\"))\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\"foo\"])\n\n        os.rename(os.path.join(root, \"foo\"), os.path.join(root, \"FOO\"))\n        self.touchRelative(root, \"FOO\", \"bar\")\n        self.assertFileList(root, [\"FOO\", \"FOO/bar\"])\n\n        os.rename(os.path.join(root, \"FOO\", \"bar\"), os.path.join(root, \"FOO\", \"BAR\"))\n        self.assertFileList(root, [\"FOO\", \"FOO/BAR\"])\n\n        os.rename(os.path.join(root, \"FOO\"), os.path.join(root, \"foo\"))\n        self.assertFileList(root, [\"foo\", \"foo/BAR\"])\n\n        os.mkdir(os.path.join(root, \"foo\", \"baz\"))\n        self.touchRelative(root, \"foo\", \"baz\", \"file\")\n        self.assertFileList(root, [\"foo\", \"foo/BAR\", \"foo/baz\", \"foo/baz/file\"])\n\n        os.rename(os.path.join(root, \"foo\"), os.path.join(root, \"Foo\"))\n\n        self.assertFileList(root, [\"Foo\", \"Foo/BAR\", \"Foo/baz\", \"Foo/baz/file\"])\n"
  },
  {
    "path": "watchman/integration/test_clock.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestClock(WatchmanTestCase.WatchmanTestCase):\n    def test_clock(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        clock = self.watchmanCommand(\"clock\", root)\n\n        self.assertRegex(clock[\"clock\"], \"^c:\\\\d+:\\\\d+:\\\\d+:\\\\d+$\")\n\n    def test_clock_sync(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        clock1 = self.watchmanCommand(\"clock\", root, {\"sync_timeout\": 5000})\n        self.assertRegex(clock1[\"clock\"], \"^c:\\\\d+:\\\\d+:\\\\d+:\\\\d+$\")\n\n        clock2 = self.watchmanCommand(\"clock\", root, {\"sync_timeout\": 5000})\n        self.assertRegex(clock2[\"clock\"], \"^c:\\\\d+:\\\\d+:\\\\d+:\\\\d+$\")\n\n        self.assertNotEqual(clock1, clock2)\n"
  },
  {
    "path": "watchman/integration/test_command.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestCommand(WatchmanTestCase.WatchmanTestCase):\n    def test_unknown_commands_print_json_error(self) -> None:\n        stdout, stderr = self.watchmanInstance().commandViaCLI(\n            [\"--pretty\", \"unknown-command\"]\n        )\n        self.assertEqual(b\"\", stderr)\n        self.assertNotEqual(b\"\", stdout)\n        error = json.loads(stdout)\n        self.assertRegex(\n            error[\"error\"],\n            \".*watchman::CommandValidationError: failed to validate command: unknown command unknown-command\",\n        )\n"
  },
  {
    "path": "watchman/integration/test_content_hash.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport hashlib\nimport json\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestContentHash(WatchmanTestCase.WatchmanTestCase):\n    def write_file_and_hash(self, filename, content) -> str:\n        content = content.encode(\"utf-8\")\n        with open(filename, \"wb\") as f:\n            f.write(content)\n\n        sha = hashlib.sha1()\n        sha.update(content)\n        return sha.hexdigest()\n\n    def test_contentHash(self) -> None:\n        root = self.mkdtemp()\n\n        expect_hex = self.write_file_and_hash(os.path.join(root, \"foo\"), \"hello\\n\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\"foo\"])\n\n        stats = self.watchmanCommand(\"debug-contenthash\", root)\n        self.assertEqual(stats[\"size\"], 0)\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"name\", \"foo\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n        self.assertEqual(expect_hex, res[\"files\"][0][\"content.sha1hex\"])\n\n        stats = self.watchmanCommand(\"debug-contenthash\", root)\n        self.assertEqual(stats[\"size\"], 1)\n        self.assertEqual(stats[\"cacheHit\"], 0)\n        self.assertEqual(stats[\"cacheStore\"], 1)\n\n        # repeated query also works\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"name\", \"foo\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n        self.assertEqual(expect_hex, res[\"files\"][0][\"content.sha1hex\"])\n\n        stats = self.watchmanCommand(\"debug-contenthash\", root)\n        self.assertEqual(stats[\"size\"], 1)\n        self.assertEqual(stats[\"cacheHit\"], 1)\n        self.assertEqual(stats[\"cacheStore\"], 1)\n\n        # change the content and expect to see that reflected\n        # in the subsequent query.  We query two at the same time to ensure that\n        # exercise the batch fetching code and that we get sane results for both\n        # entries.\n        expect_hex = self.write_file_and_hash(os.path.join(root, \"foo\"), \"goodbye\\n\")\n        expect_bar_hex = self.write_file_and_hash(\n            os.path.join(root, \"bar\"), \"different\\n\"\n        )\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"path\": [\"foo\", \"bar\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n        self.assertEqual(\n            [\n                {\"name\": \"bar\", \"content.sha1hex\": expect_bar_hex},\n                {\"name\": \"foo\", \"content.sha1hex\": expect_hex},\n            ],\n            sorted(res[\"files\"], key=lambda k: k[\"name\"]),\n        )\n\n        stats = self.watchmanCommand(\"debug-contenthash\", root)\n        self.assertEqual(stats[\"size\"], 3)\n        self.assertEqual(stats[\"cacheHit\"], 1)\n        self.assertEqual(stats[\"cacheMiss\"], 3)\n        self.assertEqual(stats[\"cacheStore\"], 3)\n\n        # directories have no content hash\n        os.mkdir(os.path.join(root, \"dir\"))\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"name\", \"dir\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n        self.assertEqual(None, res[\"files\"][0][\"content.sha1hex\"])\n\n        # removed files have no content hash\n        os.unlink(os.path.join(root, \"foo\"))\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"name\", \"foo\"],\n                # need to a since query so that the removed files\n                # show up in the results\n                \"since\": res[\"clock\"],\n                \"fields\": [\"name\", \"content.sha1hex\"],\n            },\n        )\n        self.assertEqual(None, res[\"files\"][0][\"content.sha1hex\"])\n\n    def test_contentHashWarming(self) -> None:\n        root = self.mkdtemp()\n\n        expect_hex = self.write_file_and_hash(os.path.join(root, \"foo\"), \"hello\\n\")\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"content_hash_warming\": True}))\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\".watchmanconfig\", \"foo\"])\n\n        def cachePopulate():\n            stats = self.watchmanCommand(\"debug-contenthash\", root)\n            return stats[\"size\"] >= 2 and stats[\"cacheStore\"] >= 2\n\n        self.waitFor(cachePopulate)\n        stats = self.watchmanCommand(\"debug-contenthash\", root)\n        size = stats[\"size\"]\n        self.assertEqual(size, 2)\n        self.assertEqual(stats[\"cacheHit\"], 0)\n        self.assertEqual(stats[\"cacheMiss\"], size)\n        self.assertEqual(stats[\"cacheStore\"], size)\n        self.assertEqual(stats[\"cacheLoad\"], size)\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"name\", \"foo\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n        self.assertEqual(expect_hex, res[\"files\"][0][\"content.sha1hex\"])\n\n    def test_cacheLimit(self) -> None:\n        root = self.mkdtemp()\n\n        expect_hex = self.write_file_and_hash(os.path.join(root, \"foo\"), \"hello\\n\")\n        expect_bar_hex = self.write_file_and_hash(\n            os.path.join(root, \"bar\"), \"different\\n\"\n        )\n\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"content_hash_max_items\": 1}))\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\".watchmanconfig\", \"foo\", \"bar\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"path\": [\"foo\", \"bar\"], \"fields\": [\"name\", \"content.sha1hex\"]},\n        )\n\n        self.assertEqual(\n            [\n                {\"name\": \"bar\", \"content.sha1hex\": expect_bar_hex},\n                {\"name\": \"foo\", \"content.sha1hex\": expect_hex},\n            ],\n            sorted(res[\"files\"], key=lambda k: k[\"name\"]),\n        )\n        stats = self.watchmanCommand(\"debug-contenthash\", root)\n        # ensure that we pruned the cache back to match the content_hash_max_items\n        self.assertEqual(stats[\"size\"], 1)\n        self.assertEqual(stats[\"cacheHit\"], 0)\n        self.assertEqual(stats[\"cacheMiss\"], 2)\n        self.assertEqual(stats[\"cacheStore\"], 2)\n        self.assertEqual(stats[\"cacheLoad\"], 2)\n"
  },
  {
    "path": "watchman/integration/test_cookie.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport socket\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestCookie(WatchmanTestCase.WatchmanTestCase):\n    def test_delete_cookie_dir(self) -> None:\n        root = self.mkdtemp()\n        cookie_dir = os.path.join(root, \".hg\")\n        os.mkdir(cookie_dir)\n        self.touchRelative(root, \"foo\")\n\n        self.watchmanCommand(\"watch-project\", root)\n        self.assertFileList(root, files=[\"foo\", \".hg\"])\n\n        os.rmdir(cookie_dir)\n        self.assertFileList(root, files=[\"foo\"])\n        os.unlink(os.path.join(root, \"foo\"))\n        self.assertFileList(root, files=[])\n        os.rmdir(root)\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            result = self.assertFileList(root, files=[])\n            print(\"Should not have gotten here, but the result was:\", result)\n\n        reason = str(ctx.exception)\n        self.assertTrue(\n            (\"No such file\" in reason)\n            or (\"root dir was removed\" in reason)\n            or (\"The system cannot find the file specified\" in reason)\n            or (\"unable to resolve root\" in reason),\n            msg=reason,\n        )\n\n    def test_other_cookies(self) -> None:\n        root = self.mkdtemp()\n        cookie_dir = os.path.join(root, \".git\")\n        os.mkdir(cookie_dir)\n        watch = self.watchmanCommand(\"watch\", root)\n\n        host = socket.gethostname()\n        pid = self.watchmanCommand(\"get-pid\")[\"pid\"]\n\n        self.assertFileList(root, files=[\".git\"])\n        os.mkdir(os.path.join(root, \"foo\"))\n\n        # Same process, same watch\n        self.touchRelative(root, \".git/.watchman-cookie-%s-%d-1000000\" % (host, pid))\n\n        cookies = [\n            # Different process, same watch root\n            \".git/.watchman-cookie-%s-1-100000\" % host,\n            # Different process, root dir instead of VCS dir\n            \".watchman-cookie-%s-1-100000\" % host,\n            # Different process, different watch root\n            \"foo/.watchman-cookie-%s-1-100000\" % host,\n        ]\n\n        if watch[\"watcher\"] != \"kqueue+fsevents\":\n            # With the split watch, a cookie is written in all top-level\n            # directories and at the root, therefore the following 2 cookies\n            # are expected to not be present in watchman's queries output as\n            # they are genuine cookies.\n\n            # Same process, different watch root\n            cookies.append(\"foo/.watchman-cookie-%s-%d-100000\" % (host, pid))\n            # Same process, root dir instead of VCS dir\n            cookies.append(\".watchman-cookie-%s-%d-100000\" % (host, pid))\n\n        for cookie in cookies:\n            self.touchRelative(root, cookie)\n\n        self.assertFileList(root, files=[\"foo\", \".git\"] + cookies)\n"
  },
  {
    "path": "watchman/integration/test_cppclient.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nimport os\nimport os.path\nimport signal\nimport subprocess\nimport tempfile\nimport unittest\n\nfrom watchman.integration.lib import Interrupt, WatchmanInstance\n\nWATCHMAN_SRC_DIR: str = os.environ.get(\"WATCHMAN_SRC_DIR\", os.getcwd())\nTEST_BINARY = (\n    os.environ[\"WATCHMAN_CPPCLIENT_BINARY\"]\n    if \"WATCHMAN_CPPCLIENT_BINARY\" in os.environ.keys()\n    else os.path.join(WATCHMAN_SRC_DIR, \"integration/cppclient.t\")\n)\n\n\n@unittest.skipIf(os.name == \"nt\", \"cppclient doesn't run on Windows\")\nclass TestCppClient(unittest.TestCase):\n    def setUp(self) -> None:\n        self.tmpDirCtx = tempfile.TemporaryDirectory()  # noqa P201\n        self.tmpDir = self.tmpDirCtx.__enter__()\n\n    def tearDown(self) -> None:\n        self.tmpDirCtx.__exit__(None, None, None)\n\n    @unittest.skipIf(not os.path.isfile(TEST_BINARY), \"test binary not built\")\n    def test_cppclient(self) -> None:\n        env = os.environ.copy()\n        env[\"WATCHMAN_SOCK\"] = (\n            WatchmanInstance.getSharedInstance().getSockPath().legacy_sockpath()\n        )\n        proc = subprocess.Popen(\n            TEST_BINARY,\n            env=env,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n            cwd=self.tmpDir,\n        )\n        (stdout, stderr) = proc.communicate()\n        status = proc.poll()\n\n        if status == -signal.SIGINT:\n            Interrupt.setInterrupted()\n            self.fail(\"Interrupted by SIGINT\")\n            return\n\n        if status != 0:\n            self.fail(\n                \"Exit status %d\\n%s\\n%s\\n\"\n                % (status, stdout.decode(\"utf-8\"), stderr.decode(\"utf-8\"))\n            )\n            return\n\n        self.assertTrue(True, TEST_BINARY)\n"
  },
  {
    "path": "watchman/integration/test_cursor.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestCursor(WatchmanTestCase.WatchmanTestCase):\n    def test_cursor(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[], cursor=\"n:testCursor\")\n\n        # touch a file; it should show as `new` when we next use the cursor\n        self.touchRelative(root, \"one\")\n        result = self.watchmanCommand(\n            \"query\", root, {\"since\": \"n:testCursor\", \"fields\": [\"name\", \"new\"]}\n        )\n\n        self.assertEqual(result[\"files\"], [{\"name\": \"one\", \"new\": True}])\n\n        # nothing changed, so we expect no changes in this run\n        self.assertFileList(root, files=[], cursor=\"n:testCursor\")\n\n        # Now touch the same file again; it should not show as new\n        # when we run the next query\n        self.touchRelative(root, \"one\")\n        result = self.watchmanCommand(\n            \"query\", root, {\"since\": \"n:testCursor\", \"fields\": [\"name\", \"new\"]}\n        )\n\n        self.assertEqual(result[\"files\"], [{\"name\": \"one\", \"new\": False}])\n\n        # Deleted files shouldn't show up in fresh cursors\n        self.touchRelative(root, \"two\")\n        os.unlink(os.path.join(root, \"one\"))\n        result = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": \"n:testCursor2\", \"fields\": [\"name\", \"new\", \"exists\"]},\n        )\n        self.assertTrue(result[\"is_fresh_instance\"])\n        self.assertEqual(\n            result[\"files\"], [{\"name\": \"two\", \"new\": True, \"exists\": True}]\n        )\n\n        # ... but they should show up afterwards\n        os.unlink(os.path.join(root, \"two\"))\n\n        result = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": \"n:testCursor2\", \"fields\": [\"name\", \"new\", \"exists\"]},\n        )\n        self.assertEqual(\n            result[\"files\"], [{\"name\": \"two\", \"new\": False, \"exists\": False}]\n        )\n"
  },
  {
    "path": "watchman/integration/test_dir_move.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport os.path\nimport shutil\nimport time\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestDirMove(WatchmanTestCase.WatchmanTestCase):\n    # testing this is flaky at best on windows due to latency\n    # and exclusivity of file handles, so skip it.\n    def checkOSApplicability(self) -> None:\n        if os.name == \"nt\":\n            self.skipTest(\"windows is too flaky for this test\")\n\n    def build_under(self, root, name, latency: float = 0) -> None:\n        os.mkdir(os.path.join(root, name))\n        if latency > 0:\n            time.sleep(latency)\n        self.touch(os.path.join(root, name, \"a\"))\n\n    def test_atomicMove(self) -> None:\n        root = self.mkdtemp()\n\n        dir_of_interest = os.path.join(root, \"dir\")\n        alt_dir = os.path.join(root, \"alt\")\n        dead_dir = os.path.join(root, \"bye\")\n\n        self.build_under(root, \"dir\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\"dir\", \"dir/a\"])\n\n        # build out a replacement dir\n        self.build_under(root, \"alt\")\n\n        os.rename(dir_of_interest, dead_dir)\n        os.rename(alt_dir, dir_of_interest)\n\n        self.assertFileList(root, [\"dir\", \"dir/a\", \"bye\", \"bye/a\"])\n\n    def test_NonAtomicMove(self) -> None:\n        root = self.mkdtemp()\n\n        dir_of_interest = os.path.join(root, \"dir\")\n\n        self.build_under(root, \"dir\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\"dir\", \"dir/a\"])\n\n        shutil.rmtree(dir_of_interest)\n        self.build_under(root, \"dir\", latency=1)\n\n        self.assertFileList(root, [\"dir\", \"dir/a\"])\n"
  },
  {
    "path": "watchman/integration/test_dirname.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestDirName(WatchmanTestCase.WatchmanTestCase):\n    def test_dirname(self) -> None:\n        root = self.mkdtemp()\n        for i in range(0, 5):\n            istr = str(i)\n            os.makedirs(os.path.join(root, istr, istr, istr, istr, istr))\n            self.touchRelative(root, \"a\")\n            self.touchRelative(root, istr, \"a\")\n            self.touchRelative(root, \"%sa\" % istr)\n            self.touchRelative(root, istr, istr, \"a\")\n            self.touchRelative(root, istr, istr, istr, \"a\")\n            self.touchRelative(root, istr, istr, istr, istr, \"a\")\n            self.touchRelative(root, istr, istr, istr, istr, istr, \"a\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        tests = [\n            [\n                \"\",\n                None,\n                [\n                    \"0/0/0/0/0/a\",\n                    \"0/0/0/0/a\",\n                    \"0/0/0/a\",\n                    \"0/0/a\",\n                    \"0/a\",\n                    \"1/1/1/1/1/a\",\n                    \"1/1/1/1/a\",\n                    \"1/1/1/a\",\n                    \"1/1/a\",\n                    \"1/a\",\n                    \"2/2/2/2/2/a\",\n                    \"2/2/2/2/a\",\n                    \"2/2/2/a\",\n                    \"2/2/a\",\n                    \"2/a\",\n                    \"3/3/3/3/3/a\",\n                    \"3/3/3/3/a\",\n                    \"3/3/3/a\",\n                    \"3/3/a\",\n                    \"3/a\",\n                    \"4/4/4/4/4/a\",\n                    \"4/4/4/4/a\",\n                    \"4/4/4/a\",\n                    \"4/4/a\",\n                    \"4/a\",\n                    \"a\",\n                ],\n            ],\n            [\n                \"\",\n                4,\n                [\n                    \"0/0/0/0/0/a\",\n                    \"1/1/1/1/1/a\",\n                    \"2/2/2/2/2/a\",\n                    \"3/3/3/3/3/a\",\n                    \"4/4/4/4/4/a\",\n                ],\n            ],\n            [\n                \"\",\n                3,\n                [\n                    \"0/0/0/0/0/a\",\n                    \"0/0/0/0/a\",\n                    \"1/1/1/1/1/a\",\n                    \"1/1/1/1/a\",\n                    \"2/2/2/2/2/a\",\n                    \"2/2/2/2/a\",\n                    \"3/3/3/3/3/a\",\n                    \"3/3/3/3/a\",\n                    \"4/4/4/4/4/a\",\n                    \"4/4/4/4/a\",\n                ],\n            ],\n            [\"0\", None, [\"0/0/0/0/0/a\", \"0/0/0/0/a\", \"0/0/0/a\", \"0/0/a\", \"0/a\"]],\n            [\"1\", None, [\"1/1/1/1/1/a\", \"1/1/1/1/a\", \"1/1/1/a\", \"1/1/a\", \"1/a\"]],\n            [\"1\", 0, [\"1/1/1/1/1/a\", \"1/1/1/1/a\", \"1/1/1/a\", \"1/1/a\"]],\n            [\"1\", 1, [\"1/1/1/1/1/a\", \"1/1/1/1/a\", \"1/1/1/a\"]],\n            [\"1\", 2, [\"1/1/1/1/1/a\", \"1/1/1/1/a\"]],\n            [\"1\", 3, [\"1/1/1/1/1/a\"]],\n            [\"1\", 4, []],\n        ]\n\n        for dirname, depth, expect in tests:\n            if depth is None:\n                # equivalent to `depth ge 0`\n                term = [\"dirname\", dirname]\n            else:\n                term = [\"dirname\", dirname, [\"depth\", \"gt\", depth]]\n\n            label = repr([dirname, depth, expect, term])\n\n            results = self.watchmanCommand(\n                \"query\",\n                root,\n                {\"expression\": [\"allof\", term, [\"name\", \"a\"]], \"fields\": [\"name\"]},\n            )\n\n            self.assertFileListsEqual(results[\"files\"], expect, label)\n"
  },
  {
    "path": "watchman/integration/test_empty.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestEmpty(WatchmanTestCase.WatchmanTestCase):\n    def test_empty(self) -> None:\n        root = self.mkdtemp()\n        self.touchRelative(root, \"empty\")\n        with open(os.path.join(root, \"notempty\"), \"w\") as f:\n            f.write(\"foo\")\n\n        self.watchmanCommand(\"watch\", root)\n        results = self.watchmanCommand(\n            \"query\", root, {\"expression\": \"empty\", \"fields\": [\"name\"]}\n        )\n\n        self.assertEqual([\"empty\"], results[\"files\"])\n\n        results = self.watchmanCommand(\n            \"query\", root, {\"expression\": \"exists\", \"fields\": [\"name\"]}\n        )\n\n        self.assertFileListsEqual([\"empty\", \"notempty\"], results[\"files\"])\n\n        clock = results[\"clock\"]\n        os.unlink(os.path.join(root, \"empty\"))\n\n        self.assertFileList(root, files=[\"notempty\"])\n\n        results = self.watchmanCommand(\n            \"query\", root, {\"expression\": \"exists\", \"fields\": [\"name\"]}\n        )\n\n        self.assertFileListsEqual([\"notempty\"], results[\"files\"])\n\n        # \"files that don't exist\" without a since term is absurd, so pass that in\n        results = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": clock, \"expression\": [\"not\", \"exists\"], \"fields\": [\"name\"]},\n        )\n\n        self.assertFileListsEqual([\"empty\"], results[\"files\"])\n"
  },
  {
    "path": "watchman/integration/test_fields.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestFields(WatchmanTestCase.WatchmanTestCase):\n    def test_fields(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        self.touchRelative(root, \"a\")\n        self.assertFileList(root, files=[\"a\"])\n\n        result = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"fields\": [\n                    \"name\",\n                    \"exists\",\n                    \"new\",\n                    \"size\",\n                    \"mode\",\n                    \"uid\",\n                    \"gid\",\n                    \"mtime\",\n                    \"mtime_ms\",\n                    \"mtime_us\",\n                    \"mtime_ns\",\n                    \"mtime_f\",\n                    \"ctime\",\n                    \"ctime_ms\",\n                    \"ctime_us\",\n                    \"ctime_ns\",\n                    \"ctime_f\",\n                    \"ino\",\n                    \"dev\",\n                    \"nlink\",\n                    \"oclock\",\n                    \"cclock\",\n                ],\n                \"since\": \"n:foo\",\n            },\n        )\n        self.assertEqual(len(result[\"files\"]), 1)\n        file = result[\"files\"][0]\n        self.assertEqual(file[\"name\"], \"a\")\n        self.assertTrue(file[\"exists\"])\n        self.assertTrue(file[\"new\"])\n\n        st = os.lstat(os.path.join(root, \"a\"))\n\n        fields = [\"size\", \"mode\", \"uid\", \"gid\"]\n        if os.name != \"nt\":\n            # These fields are meaningless in msvcrt\n            fields += [\"dev\", \"ino\"]\n            # Python seemingly has different logic for nlink than\n            # watchman and php on nt\n            fields += [\"nlink\"]\n\n        for field in fields:\n            self.assertEqual(file[field], getattr(st, \"st_\" + field), msg=field)\n\n        for field in [\"mtime\", \"ctime\"]:\n            self.assertEqual(file[field], int(getattr(st, \"st_\" + field)), msg=field)\n            seconds = file[field]\n            ms = file[field + \"_ms\"]\n            us = file[field + \"_us\"]\n            ns = file[field + \"_ns\"]\n            self.assertEqual(ms // 1000, seconds)\n            self.assertEqual(us // 1000, ms)\n            self.assertEqual(ns // 1000, us)\n\n        for field in [\"cclock\", \"oclock\"]:\n            self.assertRegex(file[field], \"^c:\\\\d+:\\\\d+:\\\\d+:\\\\d+$\")\n"
  },
  {
    "path": "watchman/integration/test_find.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport os.path\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestFind(WatchmanTestCase.WatchmanTestCase):\n    def test_find(self) -> None:\n        root = self.mkdtemp()\n        self.touchRelative(root, \"foo.c\")\n        self.touchRelative(root, \"bar.txt\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\"foo.c\", \"bar.txt\"])\n\n        # Make sure we correctly observe deletions\n        os.unlink(os.path.join(root, \"bar.txt\"))\n        self.assertFileList(root, [\"foo.c\"])\n\n        # touch -> delete -> touch, should show up as exists\n        self.touchRelative(root, \"bar.txt\")\n        self.assertFileList(root, [\"foo.c\", \"bar.txt\"])\n        os.unlink(os.path.join(root, \"bar.txt\"))\n\n        # A moderately more complex set of changes\n        os.mkdir(os.path.join(root, \"adir\"))\n        os.mkdir(os.path.join(root, \"adir\", \"subdir\"))\n        self.touchRelative(root, \"adir\", \"subdir\", \"file\")\n        os.rename(\n            os.path.join(root, \"adir\", \"subdir\"), os.path.join(root, \"adir\", \"overhere\")\n        )\n\n        self.assertFileList(\n            root, [\"adir\", \"adir/overhere\", \"adir/overhere/file\", \"foo.c\"]\n        )\n\n        os.rename(os.path.join(root, \"adir\"), os.path.join(root, \"bdir\"))\n\n        self.assertFileList(\n            root, [\"bdir\", \"bdir/overhere\", \"bdir/overhere/file\", \"foo.c\"]\n        )\n\n        self.assertTrue(self.rootIsWatched(root))\n\n        self.watchmanCommand(\"watch-del\", root)\n        self.waitFor(lambda: not self.rootIsWatched(root))\n\n        self.assertFalse(self.rootIsWatched(root))\n"
  },
  {
    "path": "watchman/integration/test_fishy.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nimport os\nimport subprocess\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestFishy(WatchmanTestCase.WatchmanTestCase):\n    def checkOSApplicability(self) -> None:\n        if os.name == \"nt\":\n            self.skipTest(\"non admin symlinks and unix userland not available\")\n\n    def test_fishy(self) -> None:\n        root = self.mkdtemp()\n\n        os.mkdir(os.path.join(root, \"foo\"))\n        self.touchRelative(root, \"foo\", \"a\")\n\n        self.watchmanCommand(\"watch\", root)\n        base = self.watchmanCommand(\"find\", root, \".\")\n        clock = base[\"clock\"]\n\n        self.suspendWatchman()\n        # Explicitly using the shell to run these commands\n        # as the original test case wasn't able to reproduce\n        # the problem with whatever sequence and timing of\n        # operations was produced by the original php test\n        subprocess.check_call(\n            \"mv foo bar && ln -s bar foo\",\n            shell=True,\n            cwd=root,\n        )\n\n        self.resumeWatchman()\n        self.assertFileList(root, files=[\"bar\", \"bar/a\", \"foo\"], cursor=clock)\n\n    def test_more_moves(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        base = self.watchmanCommand(\"find\", root, \".\")\n        clock = base[\"clock\"]\n\n        self.suspendWatchman()\n        # Explicitly using the shell to run these commands\n        # as the original test case wasn't able to reproduce\n        # the problem with whatever sequence and timing of\n        # operations was produced by the original php test\n        subprocess.check_call(\n            \"touch a && mkdir d1 d2 && mv d1 d2 && mv d2/d1 . && mv a d1\",\n            shell=True,\n            cwd=root,\n        )\n        self.resumeWatchman()\n        self.assertFileList(root, files=[\"d1\", \"d1/a\", \"d2\"], cursor=clock)\n\n    def test_even_more_moves(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        base = self.watchmanCommand(\"find\", root, \".\")\n        clock = base[\"clock\"]\n\n        self.suspendWatchman()\n        # Explicitly using the shell to run these commands\n        # as the original test case wasn't able to reproduce\n        # the problem with whatever sequence and timing of\n        # operations was produced by the original php test\n        subprocess.check_call(\n            (\n                \"mkdir d1 d2 && \"\n                \"touch d1/a && \"\n                \"mkdir d3 && \"\n                \"mv d1 d2 d3 && \"\n                \"mv d3/* . && \"\n                \"mv d1 d2 d3 && \"\n                \"mv d3/* . && \"\n                \"mv d1/a d2\"\n            ),\n            shell=True,\n            cwd=root,\n        )\n        self.resumeWatchman()\n        self.assertFileList(root, files=[\"d1\", \"d2\", \"d2/a\", \"d3\"], cursor=clock)\n\n    def test_notify_dir(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        os.mkdir(os.path.join(root, \"wtest\"))\n        os.mkdir(os.path.join(root, \"wtest\", \"dir\"))\n        self.touchRelative(root, \"wtest\", \"1\")\n        self.touchRelative(root, \"wtest\", \"2\")\n        self.assertFileList(\n            root, [\"wtest\", \"wtest/1\", \"wtest/2\", \"wtest/dir\"], cursor=\"n:foo\"\n        )\n\n        os.rmdir(os.path.join(root, \"wtest/dir\"))\n        files = self.watchmanCommand(\n            \"query\", root, {\"fields\": [\"name\"], \"since\": \"n:foo\"}\n        )[\"files\"]\n        self.assertFileListsEqual(files, [\"wtest\", \"wtest/dir\"])\n\n        os.unlink(os.path.join(root, \"wtest/2\"))\n        files = self.watchmanCommand(\n            \"query\", root, {\"fields\": [\"name\"], \"since\": \"n:foo\"}\n        )[\"files\"]\n        self.assertFileListsEqual(files, [\"wtest\", \"wtest/2\"])\n\n        os.unlink(os.path.join(root, \"wtest/1\"))\n        files = self.watchmanCommand(\n            \"query\", root, {\"fields\": [\"name\"], \"since\": \"n:foo\"}\n        )[\"files\"]\n        self.assertFileListsEqual(files, [\"wtest\", \"wtest/1\"])\n"
  },
  {
    "path": "watchman/integration/test_force_recrawl.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestForceRecrawl(WatchmanTestCase.WatchmanTestCase):\n    def test_force_recrawl(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n\n        os.mkdir(os.path.join(root, \"foo\"))\n        filelist = [\"foo\"]\n\n        self.assertFileList(root, filelist)\n\n        self.suspendWatchman()\n\n        filelist = [\"foo\"]\n        for i in range(20000):\n            self.touchRelative(root, \"foo\", str(i))\n            filelist.append(f\"foo/{i}\")\n\n        self.resumeWatchman()\n\n        self.assertFileList(root, filelist)\n"
  },
  {
    "path": "watchman/integration/test_fork.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestSince(WatchmanTestCase.WatchmanTestCase):\n    def checkOSApplicability(self) -> None:\n        if not getattr(os, \"fork\", None):\n            self.skipTest(\"no fork on this system\")\n\n    def test_forkclient(self) -> None:\n        client = self.getClient()\n\n        client.query(\"version\")\n\n        pid = os.fork()\n        if pid == 0:\n            # I am the new process\n            try:\n                with self.assertRaises(pywatchman.UseAfterFork) as ctx:\n                    client.query(\"version\")\n                self.assertIn(\n                    \"do not re-use a connection after fork\", str(ctx.exception)\n                )\n\n                # All good\n                os._exit(0)\n            except BaseException as exc:\n                print(\"Error in child process: %s\" % exc)\n                os._exit(1)\n\n        _pid, status = os.waitpid(pid, 0)\n        self.assertEqual(status, 0, \"child process exited 0\")\n"
  },
  {
    "path": "watchman/integration/test_fsevents_resync.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\nimport os.path\nimport sys\nimport time\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestFSEventsResync(WatchmanTestCase.WatchmanTestCase):\n    def checkOSApplicability(self) -> None:\n        if sys.platform != \"darwin\":\n            self.skipTest(\"N/A unless macOS\")\n\n    def test_resync(self) -> None:\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"fsevents_try_resync\": True}))\n\n        watch = self.watchmanCommand(\"watch\", root)\n\n        # On macOS, we may not always use fsevents\n        if watch[\"watcher\"] != \"fsevents\":\n            return\n\n        self.touchRelative(root, \"111\")\n        self.assertFileList(root, [\".watchmanconfig\", \"111\"])\n\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"]})\n        self.assertTrue(res[\"is_fresh_instance\"])\n        clock = res[\"clock\"]\n\n        dropinfo = self.watchmanCommand(\"debug-fsevents-inject-drop\", root)\n        self.assertTrue(\"last_good\" in dropinfo, dropinfo)\n\n        # We expect to see the results of these two filesystem operations\n        # on our next query, and not see evidence of a recrawl\n        os.unlink(os.path.join(root, \"111\"))\n        self.touchRelative(root, \"222\")\n\n        time.sleep(1)\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": clock, \"expression\": [\"exists\"], \"fields\": [\"name\"]},\n        )\n        self.assertFalse(res[\"is_fresh_instance\"], res)\n        self.assertTrue(\"warning\" not in res, res)\n        self.assertEqual(res[\"files\"], [\"222\"])\n"
  },
  {
    "path": "watchman/integration/test_fstype.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanInstance, WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestIllegalFSType(WatchmanTestCase.WatchmanTestCase):\n    def test_Illegal(self) -> None:\n        config = {\n            \"illegal_fstypes\": [\n                # This should include any/all fs types. If this test fails on\n                # your platform, look in /tmp/watchman-test.log for a line like:\n                # \"path /var/tmp/a3osdzvzqnco0sok is on filesystem type zfs\"\n                # then add the type name to this list, in sorted order\n                \"NTFS\",\n                \"apfs\",\n                \"btrfs\",\n                \"cifs\",\n                \"ext2\",\n                \"ext3\",\n                \"ext4\",\n                \"fuse\",\n                \"hfs\",\n                \"msdos\",\n                \"nfs\",\n                \"smb\",\n                \"tmpfs\",\n                \"ufs\",\n                \"unknown\",\n                \"xfs\",\n                \"zfs\",\n            ],\n            \"illegal_fstypes_advice\": \"just cos\",\n        }\n\n        with WatchmanInstance.Instance(config=config) as inst:\n            inst.start()\n            client = self.getClient(inst)\n\n            d = self.mkdtemp()\n            with self.assertRaises(pywatchman.WatchmanError) as ctx:\n                client.query(\"watch\", d)\n            self.assertIn(\n                (\n                    \"filesystem and is disallowed by global config\"\n                    + \" illegal_fstypes: just cos\"\n                ),\n                str(ctx.exception),\n            )\n"
  },
  {
    "path": "watchman/integration/test_glob.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport os.path\nimport shutil\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestGlob(WatchmanTestCase.WatchmanTestCase):\n    def test_glob(self) -> None:\n        root = self.mkdtemp()\n        self.touchRelative(root, \"a.c\")\n        self.touchRelative(root, \"b.c\")\n        self.touchRelative(root, \".a.c\")\n\n        inc_dir = os.path.join(root, \"includes\")\n        os.mkdir(inc_dir)\n        self.touchRelative(inc_dir, \"a.h\")\n        self.touchRelative(inc_dir, \"b.h\")\n\n        second_inc_dir = os.path.join(inc_dir, \"second\")\n        os.mkdir(second_inc_dir)\n        self.touchRelative(second_inc_dir, \"foo.h\")\n        self.touchRelative(second_inc_dir, \"bar.h\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        res = self.watchmanCommand(\"query\", root, {\"glob\": [\"*.h\"], \"fields\": [\"name\"]})\n        self.assertEqual(res[\"files\"], [])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"glob\": [\"*.h\"], \"relative_root\": \"includes\", \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual([\"a.h\", \"b.h\"], res[\"files\"])\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"glob\": [\"**/*.h\"], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual(\n            [\n                \"includes/a.h\",\n                \"includes/b.h\",\n                \"includes/second/bar.h\",\n                \"includes/second/foo.h\",\n            ],\n            res[\"files\"],\n        )\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"glob\": [\"**/*.h\"],\n                \"relative_root\": \"includes/second\",\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual([\"bar.h\", \"foo.h\"], res[\"files\"])\n\n        # check that a windows style path separator is normalized when\n        # present in relative_root\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"glob\": [\"**/*.h\"],\n                \"relative_root\": \"includes\\\\second\",\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual([\"bar.h\", \"foo.h\"], res[\"files\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"glob\": [\"**/*.h\"], \"relative_root\": \"includes\", \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(\n            [\"a.h\", \"b.h\", \"second/bar.h\", \"second/foo.h\"], res[\"files\"]\n        )\n\n        res = self.watchmanCommand(\"query\", root, {\"glob\": [\"*.c\"], \"fields\": [\"name\"]})\n        self.assertFileListsEqual(res[\"files\"], [\"a.c\", \"b.c\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"glob\": [\"*.c\"], \"glob_includedotfiles\": True, \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\".a.c\", \"a.c\", \"b.c\"])\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"glob\": [\"**/*.h\", \"**/**/*.h\"], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual(\n            [\n                \"includes/a.h\",\n                \"includes/b.h\",\n                \"includes/second/bar.h\",\n                \"includes/second/foo.h\",\n            ],\n            res[\"files\"],\n        )\n\n        # check that dedup is happening\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"glob\": [\"**/*.h\", \"**/**/*.h\", \"includes/*.h\"], \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(\n            [\n                \"includes/a.h\",\n                \"includes/b.h\",\n                \"includes/second/bar.h\",\n                \"includes/second/foo.h\",\n            ],\n            res[\"files\"],\n        )\n\n        shutil.rmtree(second_inc_dir)\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"glob\": [\"**/*.h\", \"**/**/*.h\"], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual([\"includes/a.h\", \"includes/b.h\"], res[\"files\"])\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"glob\": [\"*/*.h\"], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual([\"includes/a.h\", \"includes/b.h\"], res[\"files\"])\n\n        os.unlink(os.path.join(inc_dir, \"a.h\"))\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"glob\": [\"*/*.h\"], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual([\"includes/b.h\"], res[\"files\"])\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\n                \"query\", root, {\"glob\": [\"*/*.h\"], \"relative_root\": \"bogus\"}\n            )\n        self.assertIn(\"check your relative_root\", str(ctx.exception))\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"glob\": [12345]})\n        self.assertIn(\"expected json string object\", str(ctx.exception))\n\n    def test_glob_generator_empty(self) -> None:\n        \"\"\"Specifying no input patterns should return no results.\"\"\"\n        root = self.mkdtemp()\n\n        os.mkdir(os.path.join(root, \"mydir\"))\n        self.touchRelative(root, \"myfile\")\n        self.watchmanCommand(\"watch\", root)\n\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"], \"glob\": []})\n        self.assertFileListsEqual(res[\"files\"], [])\n\n    def test_glob_generator_absolute(self) -> None:\n        \"\"\"Make it easier to understand buck errors resulting from bad globs\"\"\"\n        root = self.mkdtemp()\n\n        os.mkdir(os.path.join(root, \"mydir\"))\n        self.watchmanCommand(\"watch\", root)\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"glob\": [\"//fbandroid/*.cpp\"]})\n        self.assertIn(\n            \"QueryParseError: failed to parse query: \"\n            \"glob `//fbandroid/*.cpp` is an absolute path.  \"\n            \"All globs must be relative paths\",\n            str(ctx.exception),\n        )\n\n    def test_case_sensitive(self) -> None:\n        root = self.mkdtemp()\n\n        os.mkdir(os.path.join(root, \"Hello\"))\n        self.touchRelative(root, \"hello.c\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        expect_sensitive = [\"Hello\"]\n        expect_insensitive = [\"Hello\", \"hello.c\"]\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"fields\": [\"name\"], \"glob\": [\"Hello*\"], \"case_sensitive\": True},\n        )\n        self.assertFileListsEqual(res[\"files\"], expect_sensitive)\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"fields\": [\"name\"], \"glob\": [\"Hello*\"], \"case_sensitive\": False},\n        )\n        self.assertFileListsEqual(res[\"files\"], expect_insensitive)\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"fields\": [\"name\"], \"glob\": [\"Hello*\"]}\n        )\n        self.assertFileListsEqual(\n            res[\"files\"],\n            expect_insensitive if self.isCaseInsensitive() else expect_sensitive,\n        )\n"
  },
  {
    "path": "watchman/integration/test_ignore.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestIgnore(WatchmanTestCase.WatchmanTestCase):\n    def test_ignore_git(self) -> None:\n        root = self.mkdtemp()\n        os.mkdir(os.path.join(root, \".git\"))\n        os.mkdir(os.path.join(root, \".git\", \"objects\"))\n        os.mkdir(os.path.join(root, \".git\", \"objects\", \"pack\"))\n        self.touchRelative(root, \"foo\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        # prove that we don't see pack in .git as we crawl\n        self.assertFileList(root, files=[\".git\", \".git/objects\", \"foo\"])\n\n        # and prove that we aren't watching deeply under .git\n        self.touchRelative(root, \".git\", \"objects\", \"dontlookatme\")\n        self.assertFileList(root, files=[\".git\", \".git/objects\", \"foo\"])\n\n    def test_invalid_ignore(self) -> None:\n        root = self.mkdtemp()\n        bad = [{\"ignore_vcs\": \"lemon\"}, {\"ignore_vcs\": [\"foo\", 123]}]\n        for cfg in bad:\n            with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n                json.dump(cfg, f)\n\n            with self.assertRaises(pywatchman.WatchmanError) as ctx:\n                self.watchmanCommand(\"watch\", root)\n            self.assertIn(\"ignore_vcs must be an array of strings\", str(ctx.exception))\n\n    def test_ignore_overlap_vcs_ignore(self) -> None:\n        \"\"\"Validate that we still have working cookies even though we were\n        told to ignore .hg\"\"\"\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            json.dump({\"ignore_dirs\": [\".hg\"]}, f)\n        os.mkdir(os.path.join(root, \".hg\"))\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\".watchmanconfig\"])\n        self.touchRelative(root, \"foo\")\n        self.assertFileList(root, files=[\".watchmanconfig\", \"foo\"])\n\n    def test_ignore_generic(self) -> None:\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            json.dump({\"ignore_dirs\": [\"build\"]}, f)\n        os.makedirs(os.path.join(root, \"build\", \"lower\"))\n        os.makedirs(os.path.join(root, \"builda\"))\n        self.touchRelative(root, \"foo\")\n        self.touchRelative(root, \"build\", \"bar\")\n        self.touchRelative(root, \"buildfile\")\n        self.touchRelative(root, \"build\", \"lower\", \"baz\")\n        self.touchRelative(root, \"builda\", \"hello\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(\n            root,\n            files=[\".watchmanconfig\", \"builda\", \"builda/hello\", \"buildfile\", \"foo\"],\n        )\n\n        self.touchRelative(root, \"build\", \"lower\", \"dontlookatme\")\n        self.touchRelative(root, \"build\", \"orme\")\n        self.touchRelative(root, \"buil\")\n\n        self.assertFileList(\n            root,\n            files=[\n                \".watchmanconfig\",\n                \"buil\",\n                \"builda\",\n                \"builda/hello\",\n                \"buildfile\",\n                \"foo\",\n            ],\n        )\n"
  },
  {
    "path": "watchman/integration/test_info.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestInfo(WatchmanTestCase.WatchmanTestCase):\n    def test_sock_name(self) -> None:\n        resp = self.watchmanCommand(\"get-sockname\")\n        self.assertEqual(\n            resp[\"sockname\"],\n            self.watchmanInstance().getSockPath().legacy_sockpath(),\n        )\n\n    def test_get_config_empty(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        self.assertEqual(self.get_config(root), {})\n\n    def test_get_config(self) -> None:\n        config = {\"test-key\": \"test-value\"}\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            json.dump(config, f)\n        self.watchmanCommand(\"watch\", root)\n        self.assertEqual(self.get_config(root), config)\n\n    def get_config(self, root):\n        resp = self.watchmanCommand(\"get-config\", root)\n        config = resp[\"config\"]\n        return config\n"
  },
  {
    "path": "watchman/integration/test_invalid_expr.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestInvalidExpr(WatchmanTestCase.WatchmanTestCase):\n    def test_invalid_expr_term(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"expression\": [\n                        \"allof\",\n                        \"dont-implement-this-term\",\n                        [\"anyof\", [\"suffix\", \"apcarc\"]],\n                    ]\n                },\n            )\n\n        self.assertIn(\n            (\n                \"failed to parse query: unknown expression \"\n                \"term 'dont-implement-this-term'\"\n            ),\n            str(ctx.exception),\n        )\n\n    def test_invalid_sync_timeout(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"exists\"], \"sync_timeout\": -1}\n            )\n\n        self.assertIn(\n            \"failed to parse query: sync_timeout must be an integer value >= 0\",\n            str(ctx.exception),\n        )\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"exists\"], \"sync_timeout\": 2000}\n        )\n        self.assertEqual(res[\"files\"], [])\n"
  },
  {
    "path": "watchman/integration/test_invalid_watchmanconfig.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestWatchmanConfigValid(WatchmanTestCase.WatchmanTestCase):\n    def test_trailing_comma(self) -> None:\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write('{\"ignore_dirs\":[\"foo\",],}')\n\n        with self.assertRaises(Exception) as ctx:\n            self.watchmanCommand(\"watch\", root)\n        self.assertIn(\"failed to parse json\", str(ctx.exception))\n"
  },
  {
    "path": "watchman/integration/test_kqueue_and_fsevents_recrawl.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport os.path\nimport sys\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestKQueueAndFSEventsRecrawl(WatchmanTestCase.WatchmanTestCase):\n    def checkOSApplicability(self) -> None:\n        if sys.platform != \"darwin\":\n            self.skipTest(\"N/A unless macOS\")\n\n    def test_recrawl(self) -> None:\n        root = self.mkdtemp()\n        watch = self.watchmanCommand(\"watch\", root)\n\n        # On macOS, we may not always use kqueue+fsevents\n        if watch[\"watcher\"] != \"kqueue+fsevents\":\n            return\n\n        os.mkdir(os.path.join(root, \"foo\"))\n        filelist = [\"foo\"]\n\n        self.assertFileList(root, filelist)\n\n        self.suspendWatchman()\n\n        filelist = [\"foo\"]\n        for i in range(3000):\n            self.touchRelative(root, \"foo\", str(i))\n            filelist.append(f\"foo/{i}\")\n\n        self.resumeWatchman()\n\n        self.watchmanCommand(\n            \"debug-kqueue-and-fsevents-recrawl\", root, os.path.join(root, \"foo\")\n        )\n\n        self.assertFileList(root, filelist)\n"
  },
  {
    "path": "watchman/integration/test_local_saved_state.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanSCMTestCase, WatchmanTestCase\n\n\ndef is_ubuntu() -> bool:\n    try:\n        with open(\"/etc/lsb-release\") as f:\n            if \"Ubuntu\" in f.read():\n                return True\n    except Exception:\n        pass\n    return False\n\n\n@WatchmanTestCase.expand_matrix\nclass TestSavedState(WatchmanSCMTestCase.WatchmanSCMTestCase):\n    def checkOSApplicability(self) -> None:\n        if is_ubuntu():\n            self.skipTest(\"Test is flaky. See Facebook task T36574087.\")\n        if \"CIRCLECI\" in os.environ or \"TRAVIS\" in os.environ:\n            self.skipTest(\"consistently fails on single core machines!\")\n        if os.name == \"nt\":\n            self.skipTest(\"The order of events on Windows is funky\")\n\n    def setUp(self) -> None:\n        self.skipIfNoFSMonitor()\n        self.root = self.mkdtemp()\n        \"\"\" Set up a repo with a DAG like this:\n@  changeset:\n|  bookmark:    feature4\n|  tag:         tip\n|  summary:     add f1\n|\n| o  changeset:\n|/   bookmark:    feature2\n|    summary:     remove car\n|\no  changeset:\n|  bookmark:    main\n|  summary:     add bar and car\n|\no  changeset:\n|  bookmark:    feature3\n|  summary:     add m2\n|\n| o  changeset:\n|/   bookmark:    feature1\n|    summary:     add m1\n|\no  changeset:\n|  bookmark:   feature0\n|  summary:    add p1\n|\no  changeset:\n   bookmark:    initial\n   summary:     add foo\n        \"\"\"\n        self.hg([\"init\"], cwd=self.root)\n        self.touchRelative(self.root, \"foo\")\n        self.hg([\"book\", \"initial\"], cwd=self.root)\n        self.hg([\"addremove\"], cwd=self.root)\n        self.hg([\"commit\", \"-m\", \"initial\"], cwd=self.root)\n        self.hg([\"book\", \"feature0\"], cwd=self.root)\n        self.touchRelative(self.root, \"p1\")\n        self.hg([\"addremove\"], cwd=self.root)\n        self.hg([\"commit\", \"-m\", \"add p1\"], cwd=self.root)\n        self.hg([\"book\", \"feature1\"], cwd=self.root)\n        self.touchRelative(self.root, \"m1\")\n        self.hg([\"addremove\"], cwd=self.root)\n        self.hg([\"commit\", \"-m\", \"add m1\"], cwd=self.root)\n        self.hg([\"co\", \"feature0\"], cwd=self.root)\n        self.hg([\"book\", \"feature3\"], cwd=self.root)\n        self.touchRelative(self.root, \"m2\")\n        self.hg([\"addremove\"], cwd=self.root)\n        self.hg([\"commit\", \"-m\", \"add m2\"], cwd=self.root)\n        self.hg([\"book\", \"main\"], cwd=self.root)\n        self.touchRelative(self.root, \"bar\")\n        self.touchRelative(self.root, \"car\")\n        self.hg([\"addremove\"], cwd=self.root)\n        self.hg([\"commit\", \"-m\", \"add bar and car\"], cwd=self.root)\n        self.hg([\"book\", \"feature2\"], cwd=self.root)\n        self.hg([\"rm\", \"car\"], cwd=self.root)\n        self.hg([\"commit\", \"-m\", \"remove car\"], cwd=self.root)\n        self.hg([\"co\", \"main\"], cwd=self.root)\n        self.hg([\"book\", \"feature4\"], cwd=self.root)\n        self.touchRelative(self.root, \"f1\")\n        self.hg([\"addremove\"], cwd=self.root)\n        self.hg([\"commit\", \"-m\", \"add f1\"], cwd=self.root)\n        self.watchmanCommand(\"watch\", self.root)\n\n    def getQuery(self, config):\n        return {\n            \"expression\": [\n                \"not\",\n                [\"anyof\", [\"name\", \".hg\"], [\"match\", \"hg-check*\"], [\"dirname\", \".hg\"]],\n            ],\n            \"fields\": [\"name\"],\n            \"since\": {\n                \"scm\": {\n                    \"mergebase-with\": \"main\",\n                    \"saved-state\": {\"storage\": \"local\", \"config\": config},\n                }\n            },\n        }\n\n    def getLocalFilename(self, saved_state_rev, metadata):\n        if metadata:\n            return saved_state_rev + \"_\" + metadata\n        return saved_state_rev\n\n    # Creates a saved state (with no content) for the specified project at the\n    # specified bookmark within the specified local storage path.\n    def saveState(self, project, bookmark, local_storage, metadata=None):\n        saved_state_rev = self.resolveCommitHash(bookmark, cwd=self.root)\n        project_dir = os.path.join(local_storage, project)\n        if not os.path.isdir(project_dir):\n            os.mkdir(project_dir)\n        filename = self.getLocalFilename(saved_state_rev, metadata)\n        self.touchRelative(project_dir, filename)\n        return saved_state_rev\n\n    def getConfig(self, result):\n        return result[\"clock\"][\"scm\"][\"saved-state\"][\"config\"]\n\n    def assertStorageTypeLocal(self, result) -> None:\n        self.assertEqual(result[\"clock\"][\"scm\"][\"saved-state\"][\"storage\"], \"local\")\n\n    def assertCommitIDEquals(self, result, commit_id) -> None:\n        self.assertEqual(result[\"clock\"][\"scm\"][\"saved-state\"][\"commit-id\"], commit_id)\n\n    def assertCommitIDNotPresent(self, result) -> None:\n        self.assertTrue(\"commit-id\" not in result[\"clock\"][\"scm\"][\"saved-state\"])\n\n    def assertSavedStateErrorEquals(self, result, error_string) -> None:\n        self.assertEqual(result[\"saved-state-info\"][\"error\"], error_string)\n\n    def assertSavedStateInfo(self, result, path, commit_id) -> None:\n        self.assertEqual(\n            result[\"saved-state-info\"], {\"local-path\": path, \"commit-id\": commit_id}\n        )\n\n    def assertMergebaseEquals(self, result, mergebase) -> None:\n        self.assertEqual(result[\"clock\"][\"scm\"][\"mergebase\"], mergebase)\n\n    def test_localSavedStateErrorHandling(self) -> None:\n        # Local storage should throw if config does not include\n        # local-storage-path. Unit tests more extensively test all possible\n        # error cases, this just confirms that an example error propagates end\n        # to end properly.\n        config = {\"project\": \"test\"}\n        test_query = self.getQuery(config)\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", self.root, test_query)\n        self.assertIn(\n            \"'local-storage-path' must be present in saved state config\",\n            str(ctx.exception),\n        )\n\n    def test_localSavedStateNoStateFound(self) -> None:\n        # Local saved state should return no commit id and error message if no\n        # valid state found (project does not match states saved above)\n        local_storage = self.mkdtemp()\n        self.saveState(\"example_project\", \"feature3\", local_storage)\n        self.saveState(\"example_project\", \"feature0\", local_storage)\n        config = {\"local-storage-path\": local_storage, \"project\": \"does-not-exist\"}\n        test_query = self.getQuery(config)\n        res = self.watchmanCommand(\"query\", self.root, test_query)\n        expected_mergebase = self.resolveCommitHash(\"main\", cwd=self.root)\n        self.assertMergebaseEquals(res, expected_mergebase)\n        self.assertCommitIDNotPresent(res)\n        self.assertEqual(self.getConfig(res), config)\n        self.assertStorageTypeLocal(res)\n        self.assertSavedStateErrorEquals(res, \"No suitable saved state found\")\n        self.assertFileListsEqual(res[\"files\"], [\"foo\", \"p1\", \"m2\", \"bar\", \"car\", \"f1\"])\n\n    def test_localSavedStateNotWithinLimit(self) -> None:\n        # Local saved state should return an empty commit id, error message,\n        # and changed files since prior clock if the first available saved\n        # state is not within the limit\n        local_storage = self.mkdtemp()\n        self.saveState(\"example_project\", \"feature3\", local_storage)\n        self.saveState(\"example_project\", \"feature0\", local_storage)\n        config = {\n            \"local-storage-path\": local_storage,\n            \"project\": \"example_project\",\n            \"max-commits\": 1,\n        }\n        test_query = self.getQuery(config)\n        res = self.watchmanCommand(\"query\", self.root, test_query)\n        self.assertSavedStateErrorEquals(res, \"No suitable saved state found\")\n        self.assertEqual(self.getConfig(res), config)\n        self.assertStorageTypeLocal(res)\n        expected_mergebase = self.resolveCommitHash(\"main\", cwd=self.root)\n        self.assertMergebaseEquals(res, expected_mergebase)\n        self.assertFileListsEqual(res[\"files\"], [\"foo\", \"p1\", \"m2\", \"bar\", \"car\", \"f1\"])\n\n    def test_localSavedStateNotWithinLimitOmitChangedFiles(self) -> None:\n        # Local saved state should return an empty commit id, error message,\n        # and changed files since prior clock if the first available saved\n        # state is not within the limit\n        local_storage = self.mkdtemp()\n        self.saveState(\"example_project\", \"feature3\", local_storage)\n        self.saveState(\"example_project\", \"feature0\", local_storage)\n        config = {\n            \"local-storage-path\": local_storage,\n            \"project\": \"example_project\",\n            \"max-commits\": 1,\n        }\n        test_query = self.getQuery(config)\n        test_query[\"omit_changed_files\"] = True\n        res = self.watchmanCommand(\"query\", self.root, test_query)\n        self.assertSavedStateErrorEquals(res, \"No suitable saved state found\")\n        self.assertEqual(self.getConfig(res), config)\n        self.assertStorageTypeLocal(res)\n        expected_mergebase = self.resolveCommitHash(\"main\", cwd=self.root)\n        self.assertMergebaseEquals(res, expected_mergebase)\n        self.assertFileListsEqual(res[\"files\"], [])\n\n    def test_localSavedStateNotWithinLimitError(self) -> None:\n        # Local saved state should return an empty commit id, error message,\n        # and changed files since prior clock if the first available saved\n        # state is not within the limit\n        local_storage = self.mkdtemp()\n        self.saveState(\"example_project\", \"feature3\", local_storage)\n        self.saveState(\"example_project\", \"feature0\", local_storage)\n        config = {\n            \"local-storage-path\": local_storage,\n            \"project\": \"example_project\",\n            \"max-commits\": 1,\n        }\n        test_query = self.getQuery(config)\n        test_query[\"fail_if_no_saved_state\"] = True\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", self.root, test_query)\n        self.assertIn(\n            (\n                \"The merge base changed but no corresponding saved state \"\n                \"was found for the new merge base\"\n            ),\n            str(ctx.exception),\n        )\n\n    def test_localSavedStateLookupSuccess(self) -> None:\n        # Local saved state should return the saved state commit id, info, and\n        # changed files since the saved state if valid state found within limit\n        local_storage = self.mkdtemp()\n        saved_state_rev_feature3 = self.saveState(\n            \"example_project\", \"feature3\", local_storage\n        )\n        self.saveState(\"example_project\", \"feature0\", local_storage)\n        config = {\n            \"local-storage-path\": local_storage,\n            \"project\": \"example_project\",\n            \"max-commits\": 10,\n        }\n        test_query = self.getQuery(config)\n        res = self.watchmanCommand(\"query\", self.root, test_query)\n        expected_mergebase = self.resolveCommitHash(\"main\", cwd=self.root)\n        self.assertMergebaseEquals(res, expected_mergebase)\n        self.assertStorageTypeLocal(res)\n        self.assertCommitIDEquals(res, saved_state_rev_feature3)\n        self.assertEqual(self.getConfig(res), config)\n        project_dir = os.path.join(local_storage, \"example_project\")\n        expected_path = os.path.join(project_dir, saved_state_rev_feature3)\n        self.assertSavedStateInfo(res, expected_path, saved_state_rev_feature3)\n        self.assertFileListsEqual(res[\"files\"], [\"f1\", \"bar\", \"car\"])\n\n    def test_localSavedStateLookupSuccessOmitChangedFiles(self) -> None:\n        # Local saved state should return the saved state commit id, info, and\n        # changed files since the saved state if valid state found within limit.\n        # Since this sets omit_changed_files, we only return the files from the\n        # saved-state to the mergebase\n        local_storage = self.mkdtemp()\n        saved_state_rev_feature3 = self.saveState(\n            \"example_project\", \"feature3\", local_storage\n        )\n        self.saveState(\"example_project\", \"feature0\", local_storage)\n        config = {\n            \"local-storage-path\": local_storage,\n            \"project\": \"example_project\",\n            \"max-commits\": 10,\n        }\n        test_query = self.getQuery(config)\n        test_query[\"omit_changed_files\"] = True\n        res = self.watchmanCommand(\"query\", self.root, test_query)\n        expected_mergebase = self.resolveCommitHash(\"main\", cwd=self.root)\n        self.assertMergebaseEquals(res, expected_mergebase)\n        self.assertStorageTypeLocal(res)\n        self.assertCommitIDEquals(res, saved_state_rev_feature3)\n        self.assertEqual(self.getConfig(res), config)\n        project_dir = os.path.join(local_storage, \"example_project\")\n        expected_path = os.path.join(project_dir, saved_state_rev_feature3)\n        self.assertSavedStateInfo(res, expected_path, saved_state_rev_feature3)\n        self.assertFileListsEqual(res[\"files\"], [])\n\n    def test_localSavedStateLookupSuccessWithMetadata(self) -> None:\n        local_storage = self.mkdtemp()\n        metadata = \"metadata\"\n        saved_state_rev_feature3 = self.saveState(\n            \"example_project\", \"feature3\", local_storage, metadata\n        )\n        self.saveState(\"example_project\", \"feature0\", local_storage, metadata)\n        config = {\n            \"local-storage-path\": local_storage,\n            \"project\": \"example_project\",\n            \"project-metadata\": metadata,\n            \"max-commits\": 10,\n        }\n        test_query = self.getQuery(config)\n        res = self.watchmanCommand(\"query\", self.root, test_query)\n        expected_mergebase = self.resolveCommitHash(\"main\", cwd=self.root)\n        self.assertMergebaseEquals(res, expected_mergebase)\n        self.assertStorageTypeLocal(res)\n        self.assertCommitIDEquals(res, saved_state_rev_feature3)\n        self.assertEqual(self.getConfig(res), config)\n        project_dir = os.path.join(local_storage, \"example_project\")\n        filepath = self.getLocalFilename(saved_state_rev_feature3, metadata)\n        expected_path = os.path.join(project_dir, filepath)\n        self.assertSavedStateInfo(res, expected_path, saved_state_rev_feature3)\n        self.assertFileListsEqual(res[\"files\"], [\"f1\", \"bar\", \"car\"])\n\n    def test_localSavedStateFailureIfMetadataDoesNotMatch(self) -> None:\n        local_storage = self.mkdtemp()\n        self.saveState(\"example_project\", \"feature3\", local_storage)\n        self.saveState(\"example_project\", \"feature0\", local_storage)\n        config = {\n            \"local-storage-path\": local_storage,\n            \"project\": \"example_project\",\n            \"project-metadata\": \"meta\",\n            \"max-commits\": 10,\n        }\n        test_query = self.getQuery(config)\n        res = self.watchmanCommand(\"query\", self.root, test_query)\n        self.assertSavedStateErrorEquals(res, \"No suitable saved state found\")\n        self.assertEqual(self.getConfig(res), config)\n        self.assertStorageTypeLocal(res)\n        expected_mergebase = self.resolveCommitHash(\"main\", cwd=self.root)\n        self.assertMergebaseEquals(res, expected_mergebase)\n        self.assertFileListsEqual(res[\"files\"], [\"foo\", \"p1\", \"m2\", \"bar\", \"car\", \"f1\"])\n\n    def test_localSavedStateFailureIfNoMetadataForFileThatHasIt(self) -> None:\n        local_storage = self.mkdtemp()\n        metadata = \"metadata\"\n        self.saveState(\"example_project\", \"feature3\", local_storage, metadata)\n        self.saveState(\"example_project\", \"feature0\", local_storage, metadata)\n        config = {\n            \"local-storage-path\": local_storage,\n            \"project\": \"example_project\",\n            \"max-commits\": 10,\n        }\n        test_query = self.getQuery(config)\n        res = self.watchmanCommand(\"query\", self.root, test_query)\n        self.assertSavedStateErrorEquals(res, \"No suitable saved state found\")\n        self.assertEqual(self.getConfig(res), config)\n        self.assertStorageTypeLocal(res)\n        expected_mergebase = self.resolveCommitHash(\"main\", cwd=self.root)\n        self.assertMergebaseEquals(res, expected_mergebase)\n        self.assertFileListsEqual(res[\"files\"], [\"foo\", \"p1\", \"m2\", \"bar\", \"car\", \"f1\"])\n\n    def test_localSavedStateSubscription(self) -> None:\n        local_storage = self.mkdtemp()\n        saved_state_rev_feature3 = self.saveState(\n            \"example_project\", \"feature3\", local_storage\n        )\n        saved_state_rev_feature0 = self.saveState(\n            \"example_project\", \"feature0\", local_storage\n        )\n        # Set up a subscription for the successful query and confirm that the\n        # subscription response contains the most recent saved state to the\n        # current rev's mergebase, and the changed files since that rev\n        config = {\n            \"local-storage-path\": local_storage,\n            \"project\": \"example_project\",\n            \"max-commits\": 10,\n        }\n        test_query = self.getQuery(config)\n        sub = self.watchmanCommand(\"subscribe\", self.root, \"scmsub\", test_query)\n        self.waitForStatesToVacate(self.root)\n        syncTimeout = {\"sync_timeout\": 1000}\n        self.watchmanCommand(\"flush-subscriptions\", self.root, syncTimeout)\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=self.root)\n        expected_mergebase = self.resolveCommitHash(\"main\", cwd=self.root)\n        self.assertMergebaseEquals(sub, expected_mergebase)\n        self.assertStorageTypeLocal(sub)\n        self.assertEqual(self.getConfig(sub), config)\n        self.assertCommitIDEquals(sub, saved_state_rev_feature3)\n        project_dir = os.path.join(local_storage, \"example_project\")\n        expected_path = os.path.join(project_dir, saved_state_rev_feature3)\n        self.assertSavedStateInfo(sub, expected_path, saved_state_rev_feature3)\n        self.assertFileListsEqual(\n            self.getConsolidatedFileList(dat), [\"f1\", \"bar\", \"car\"]\n        )\n        # Check out a rev with the same merge base and confirm saved state\n        # commit id is unchanged, info is not present, and file list is updated\n        self.hg([\"co\", \"-C\", \"feature2\"], cwd=self.root)\n        self.waitForStatesToVacate(self.root)\n        self.watchmanCommand(\"flush-subscriptions\", self.root, syncTimeout)\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=self.root)\n        self.assertFileListsEqual(self.getConsolidatedFileList(dat), [\"f1\", \"car\"])\n        last_res = dat[-1]\n        self.assertTrue(\"saved-state-info\" not in last_res)\n        self.assertStorageTypeLocal(last_res)\n        self.assertEqual(self.getConfig(last_res), config)\n        self.assertMergebaseEquals(last_res, expected_mergebase)\n        self.assertCommitIDEquals(last_res, saved_state_rev_feature3)\n        # Check out rev with a different mergebase and confirm mergebase\n        # changes, new saved state info is returned, and file list is relative\n        # to the new mergebase\n        self.hg([\"co\", \"-C\", \"feature1\"], cwd=self.root)\n        self.waitForStatesToVacate(self.root)\n        self.watchmanCommand(\"flush-subscriptions\", self.root, syncTimeout)\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=self.root)\n        self.assertFileListsEqual(self.getConsolidatedFileList(dat), [\"m1\"])\n        last_res = dat[-1]\n        self.assertStorageTypeLocal(last_res)\n        self.assertEqual(self.getConfig(last_res), config)\n        expected_path = os.path.join(project_dir, saved_state_rev_feature0)\n        self.assertSavedStateInfo(last_res, expected_path, saved_state_rev_feature0)\n        expected_mergebase = self.resolveCommitHash(\"feature0\", cwd=self.root)\n        self.assertMergebaseEquals(last_res, expected_mergebase)\n        self.assertCommitIDEquals(last_res, saved_state_rev_feature0)\n        # Switch to a commit with saved state for that actual commit and ensure\n        # file list is empty\n        self.hg([\"co\", \"-C\", \"feature3\"], cwd=self.root)\n        self.waitForStatesToVacate(self.root)\n        self.watchmanCommand(\"flush-subscriptions\", self.root, syncTimeout)\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=self.root)\n        self.assertFileListsEqual(self.getConsolidatedFileList(dat), [])\n        last_res = dat[-1]\n        self.assertStorageTypeLocal(last_res)\n        self.assertEqual(self.getConfig(last_res), config)\n        expected_path = os.path.join(project_dir, saved_state_rev_feature3)\n        self.assertSavedStateInfo(last_res, expected_path, saved_state_rev_feature3)\n        expected_mergebase = self.resolveCommitHash(\"feature3\", cwd=self.root)\n        self.assertMergebaseEquals(last_res, expected_mergebase)\n        self.assertCommitIDEquals(last_res, saved_state_rev_feature3)\n        # Make sure that without any saved state available we get a saved state\n        # error message, no commit ID is specified, but the subscription\n        # otherwise succeeds, and we get all changes since the prior clock\n        self.hg([\"co\", \"-C\", \"initial\"], cwd=self.root)\n        self.waitForStatesToVacate(self.root)\n        self.watchmanCommand(\"flush-subscriptions\", self.root, syncTimeout)\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=self.root)\n        self.assertFileListsEqual(self.getConsolidatedFileList(dat), [\"m2\", \"p1\"])\n        last_res = dat[-1]\n        self.assertStorageTypeLocal(last_res)\n        self.assertEqual(self.getConfig(last_res), config)\n        self.assertSavedStateErrorEquals(last_res, \"No suitable saved state found\")\n        expected_mergebase = self.resolveCommitHash(\"initial\", cwd=self.root)\n        self.assertMergebaseEquals(last_res, expected_mergebase)\n        self.assertCommitIDNotPresent(last_res)\n"
  },
  {
    "path": "watchman/integration/test_log.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestLog(WatchmanTestCase.WatchmanTestCase):\n    def test_invalidNumArgsLogLevel(self) -> None:\n        for params in [[\"log-level\"], [\"log-level\", \"debug\", \"extra\"]]:\n            with self.assertRaises(pywatchman.WatchmanError) as ctx:\n                self.watchmanCommand(*params)\n\n            self.assertIn(\"wrong number of arguments\", str(ctx.exception))\n\n    def test_invalidLevelLogLevel(self) -> None:\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"log-level\", \"invalid\")\n\n        self.assertIn(\"invalid log level\", str(ctx.exception))\n\n    def test_invalidNumArgsLog(self) -> None:\n        for params in [[\"log\"], [\"log\", \"debug\"], [\"log\", \"debug\", \"test\", \"extra\"]]:\n            with self.assertRaises(pywatchman.WatchmanError) as ctx:\n                self.watchmanCommand(*params)\n\n            self.assertIn(\"wrong number of arguments\", str(ctx.exception))\n\n    def test_invalidLevelLog(self) -> None:\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"log\", \"invalid\", \"test\")\n\n        self.assertIn(\"invalid log level\", str(ctx.exception))\n"
  },
  {
    "path": "watchman/integration/test_match.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport os.path\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestMatch(WatchmanTestCase.WatchmanTestCase):\n    def test_match(self) -> None:\n        root = self.mkdtemp()\n        self.touchRelative(root, \"foo.c\")\n        self.touchRelative(root, \"bar.txt\")\n        os.mkdir(os.path.join(root, \"foo\"))\n        self.touchRelative(root, \"foo\", \".bar.c\")\n        self.touchRelative(root, \"foo\", \"baz.c\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileList(\n            root, [\"bar.txt\", \"foo.c\", \"foo\", \"foo/.bar.c\", \"foo/baz.c\"]\n        )\n\n        res = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"match\", \"*.c\"], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo.c\", \"foo/baz.c\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"match\", \"*.c\", \"wholename\"], \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo.c\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"match\", \"foo/*.c\", \"wholename\"], \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo/baz.c\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"match\", \"foo/*.c\", \"wholename\"], \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo/baz.c\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"match\", \"**/*.c\", \"wholename\"], \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo.c\", \"foo/baz.c\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"match\",\n                    \"**/*.c\",\n                    \"wholename\",\n                    {\"includedotfiles\": True},\n                ],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo.c\", \"foo/.bar.c\", \"foo/baz.c\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"match\", \"foo/**/*.c\", \"wholename\"], \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo/baz.c\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"match\", \"FOO/*.c\", \"wholename\"], \"fields\": [\"name\"]},\n        )\n        if self.isCaseInsensitive():\n            self.assertFileListsEqual(res[\"files\"], [\"foo/baz.c\"])\n        else:\n            self.assertFileListsEqual(res[\"files\"], [])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"match\", \"FOO/*.c\", \"wholename\"],\n                \"case_sensitive\": True,\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"match\", \"FOO/*.c\", \"wholename\"],\n                \"case_sensitive\": False,\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo/baz.c\"])\n"
  },
  {
    "path": "watchman/integration/test_name.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestNameExpr(WatchmanTestCase.WatchmanTestCase):\n    def test_name_expr(self) -> None:\n        root = self.mkdtemp()\n\n        self.touchRelative(root, \"foo.c\")\n        os.mkdir(os.path.join(root, \"subdir\"))\n        self.touchRelative(root, \"subdir\", \"bar.txt\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"iname\", \"FOO.c\"], \"fields\": [\"name\"]}\n            )[\"files\"],\n            [\"foo.c\"],\n        )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\"expression\": [\"iname\", [\"FOO.c\", \"INVALID.txt\"]], \"fields\": [\"name\"]},\n            )[\"files\"],\n            [\"foo.c\"],\n        )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"name\", \"foo.c\"], \"fields\": [\"name\"]}\n            )[\"files\"],\n            [\"foo.c\"],\n        )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\"expression\": [\"name\", [\"foo.c\", \"invalid\"]], \"fields\": [\"name\"]},\n            )[\"files\"],\n            [\"foo.c\"],\n        )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\"expression\": [\"name\", \"foo.c\", \"wholename\"], \"fields\": [\"name\"]},\n            )[\"files\"],\n            [\"foo.c\"],\n        )\n\n        if self.isCaseInsensitive():\n            self.assertFileListsEqual(\n                self.watchmanCommand(\n                    \"query\",\n                    root,\n                    {\"expression\": [\"name\", \"Foo.c\", \"wholename\"], \"fields\": [\"name\"]},\n                )[\"files\"],\n                [\"foo.c\"],\n            )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\"expression\": [\"name\", \"bar.txt\", \"wholename\"], \"fields\": [\"name\"]},\n            )[\"files\"],\n            [],\n        )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"expression\": [\"name\", \"bar.txt\", \"wholename\"],\n                    \"relative_root\": \"subdir\",\n                    \"fields\": [\"name\"],\n                },\n            )[\"files\"],\n            [\"bar.txt\"],\n        )\n\n        # foo.c is not in subdir so this shouldn't return any matches\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"expression\": [\"name\", \"foo.c\", \"wholename\"],\n                    \"relative_root\": \"subdir\",\n                    \"fields\": [\"name\"],\n                },\n            )[\"files\"],\n            [],\n        )\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"expression\": \"name\"})\n\n        self.assertRegex(str(ctx.exception), \"Expected array for 'i?name' term\")\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"name\", \"one\", \"two\", \"three\"]}\n            )\n\n        self.assertRegex(\n            str(ctx.exception), \"Invalid number of arguments for 'i?name' term\"\n        )\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"expression\": [\"name\", 2]})\n\n        self.assertRegex(\n            str(ctx.exception),\n            (\"Argument 2 to 'i?name' must be either a string or an array of string\"),\n        )\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"expression\": [\"name\", \"one\", 2]})\n\n        self.assertRegex(str(ctx.exception), \"Argument 3 to 'i?name' must be a string\")\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"name\", \"one\", \"invalid\"]}\n            )\n\n        self.assertRegex(\n            str(ctx.exception), \"Invalid scope 'invalid' for i?name expression\"\n        )\n"
  },
  {
    "path": "watchman/integration/test_nice.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport sys\nimport unittest\n\nfrom watchman.integration.lib import WatchmanInstance\n\n\n@unittest.skipIf(os.name == \"nt\", \"N/A on windows\")\nclass TestNice(unittest.TestCase):\n    @unittest.skipIf(\n        sys.platform == \"darwin\", \"launchd renders this test invalid on macOS\"\n    )\n    def test_failing_to_start_when_nice(self) -> None:\n        inst = WatchmanInstance.Instance()\n        stdout, stderr = inst.commandViaCLI([\"version\"], prefix=[\"nice\"])\n        print(\"stdout\", stdout.decode(errors=\"replace\"))\n        print(\"stderr\", stderr.decode(errors=\"replace\"))\n        stderr = stderr.decode(\"ascii\")\n        self.assertEqual(b\"\", stdout)\n        self.assertRegex(stderr, \"refusing to start\")\n\n    def test_failing_to_start_when_nice_foreground(self) -> None:\n        inst = WatchmanInstance.Instance()\n        stdout, stderr = inst.commandViaCLI(\n            [\"--foreground\", \"version\"], prefix=[\"nice\"]\n        )\n        print(\"stdout\", stdout)\n        print(\"stderr\", stderr)\n\n        output = stderr.decode(\"ascii\")\n        try:\n            output += inst.getServerLogContents()\n        except IOError:\n            # on macos, we may not have gotten as far\n            # as creating the log file when the error\n            # triggers, so we're fine with passing\n            # on io errors here\n            pass\n        self.assertRegex(output, \"refusing to start\")\n"
  },
  {
    "path": "watchman/integration/test_nodejs.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport glob\nimport inspect\nimport os\nimport os.path\nimport shutil\nimport signal\nimport subprocess\nimport unittest\n\nfrom watchman.integration.lib import Interrupt, WatchmanInstance, WatchmanTestCase\nfrom watchman.integration.lib.node import node_bin, yarn_bin\n\n\nWATCHMAN_SRC_DIR: str = os.environ.get(\"WATCHMAN_SRC_DIR\", os.getcwd())\nTHIS_DIR = os.path.join(WATCHMAN_SRC_DIR, \"integration\")\n\n\ndef find_js_tests(test_class) -> None:\n    \"\"\"\n    A decorator function used to create a class per JavaScript test script\n    \"\"\"\n\n    # We do some rather hacky things here to define new test class types\n    # in our caller's scope.  This is needed so that the unittest TestLoader\n    # will find the subclasses we define.\n    # pyre-fixme[16]: Optional type has no attribute `f_back`.\n    caller_scope = inspect.currentframe().f_back.f_locals\n\n    for js in glob.glob(os.path.join(THIS_DIR, \"*.js\")):\n        base = os.path.basename(js)\n        if base.startswith(\".\") or base.startswith(\"_\"):\n            continue\n\n        subclass_name = base.replace(\".\", \"_\").replace(\"-\", \"_\")\n\n        def make_class(jsfile):\n            # Define a new class that derives from the input class.\n            # This has to be a function otherwise jsfile captures\n            # the value from the last iteration of the glob loop.\n\n            class JSTest(test_class):\n                def getCommandArgs(self):\n                    return [node_bin, jsfile]\n\n            # Set the name and module information on our new subclass\n            JSTest.__name__ = subclass_name\n            JSTest.__qualname__ = subclass_name\n            JSTest.__module__ = test_class.__module__\n\n            caller_scope[subclass_name] = JSTest\n\n        make_class(js)\n\n    return None\n\n\n@find_js_tests\nclass NodeTestCase(WatchmanTestCase.TempDirPerTestMixin, unittest.TestCase):\n    attempt = 0\n\n    def setAttemptNumber(self, attempt: int) -> None:\n        \"\"\"enable flaky test retry\"\"\"\n        self.attempt = attempt\n\n    @unittest.skipIf(\n        yarn_bin is None or node_bin is None, \"yarn/node not correctly installed\"\n    )\n    def runTest(self) -> None:\n        env = os.environ.copy()\n        env[\"WATCHMAN_SOCK\"] = (\n            WatchmanInstance.getSharedInstance().getSockPath().legacy_sockpath()\n        )\n        env[\"TMPDIR\"] = self.tempdir\n\n        # build the node module with yarn\n        node_dir = os.path.join(env[\"TMPDIR\"], \"fb-watchman\")\n        shutil.copytree(os.path.join(WATCHMAN_SRC_DIR, \"node\"), node_dir)\n\n        install_args = [yarn_bin, \"install\"]\n        if \"YARN_OFFLINE\" in env:\n            install_args.append(\"--offline\")\n\n        bser_dir = os.path.join(node_dir, \"bser\")\n        subprocess.check_call(install_args, cwd=bser_dir, env=env)\n\n        env[\"TMP\"] = env[\"TMPDIR\"]\n        env[\"TEMP\"] = env[\"TMPDIR\"]\n        env[\"IN_PYTHON_HARNESS\"] = \"1\"\n        env[\"NODE_PATH\"] = \"%s:%s\" % (node_dir, env[\"TMPDIR\"])\n        proc = subprocess.Popen(\n            # pyre-fixme[16]: `NodeTestCase` has no attribute `getCommandArgs`.\n            self.getCommandArgs(),\n            env=env,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n        )\n        (stdout, stderr) = proc.communicate()\n        status = proc.poll()\n\n        if status == -signal.SIGINT:\n            Interrupt.setInterrupted()\n            self.fail(\"Interrupted by SIGINT\")\n            return\n\n        if status != 0:\n            self.fail(\n                \"Exit status %d\\n%s\\n%s\\n\"\n                % (status, stdout.decode(\"utf-8\"), stderr.decode(\"utf-8\"))\n            )\n            return\n        self.assertTrue(True, self.getCommandArgs())\n\n    def _getTempDirName(self):\n        dotted = (\n            os.path.normpath(self.id())\n            .replace(os.sep, \".\")\n            .replace(\"tests.integration.\", \"\")\n            .replace(\".php\", \"\")\n        )\n        if self.attempt > 0:\n            dotted += \"-%d\" % self.attempt\n        return dotted\n"
  },
  {
    "path": "watchman/integration/test_path_generator.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestPathGenerator(WatchmanTestCase.WatchmanTestCase):\n    def test_path_generator_dot(self) -> None:\n        root = self.mkdtemp()\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileListsEqual(\n            self.watchmanCommand(\"query\", root, {\"path\": [\".\"]})[\"files\"], []\n        )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\"query\", root, {\"relative_root\": \".\", \"path\": [\".\"]})[\n                \"files\"\n            ],\n            [],\n        )\n\n    def test_path_generator_case(self) -> None:\n        root = self.mkdtemp()\n\n        os.mkdir(os.path.join(root, \"foo\"))\n        self.touchRelative(root, \"foo\", \"bar\")\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"], \"path\": [\"foo\"]})[\n                \"files\"\n            ],\n            [\"foo/bar\"],\n        )\n\n        if self.isCaseInsensitive():\n            os.rename(os.path.join(root, \"foo\"), os.path.join(root, \"Foo\"))\n\n            self.assertFileListsEqual(\n                self.watchmanCommand(\n                    \"query\",\n                    root,\n                    {\"fields\": [\"name\"], \"path\": [\"foo\"]},  # not Foo!\n                )[\"files\"],\n                [],\n                message=\"Case insensitive matching not implemented \\\n                        for path generator\",\n            )\n\n    def test_path_generator_relative_root(self) -> None:\n        root = self.mkdtemp()\n\n        os.mkdir(os.path.join(root, \"foo\"))\n        self.touchRelative(root, \"foo\", \"bar\")\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\"fields\": [\"name\"], \"relative_root\": \"foo\", \"path\": [\"bar\"]},\n            )[\"files\"],\n            [\"bar\"],\n        )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"fields\": [\"name\"],\n                    \"relative_root\": \"foo\",\n                    \"path\": [{\"path\": \"bar\", \"depth\": -1}],\n                },\n            )[\"files\"],\n            [\"bar\"],\n        )\n\n        if self.isCaseInsensitive():\n            os.rename(os.path.join(root, \"foo\"), os.path.join(root, \"Foo\"))\n\n            self.assertFileListsEqual(\n                self.watchmanCommand(\n                    \"query\",\n                    root,\n                    {\"fields\": [\"name\"], \"path\": [\"foo\"]},  # not Foo!\n                )[\"files\"],\n                [],\n                message=\"Case insensitive matching not implemented \\\n                        for path relative_root\",\n            )\n\n    def test_path_generator_empty(self) -> None:\n        \"\"\"Specifying no input paths should return no results.\"\"\"\n        root = self.mkdtemp()\n\n        os.mkdir(os.path.join(root, \"mydir\"))\n        self.touchRelative(root, \"myfile\")\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"], \"path\": []})[\n                \"files\"\n            ],\n            [],\n        )\n"
  },
  {
    "path": "watchman/integration/test_pcre.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestPcre(WatchmanTestCase.WatchmanTestCase):\n    def check_pcre(self) -> None:\n        res = self.watchmanCommand(\"version\", {\"optional\": [\"term-pcre\"]})\n        if not res[\"capabilities\"][\"term-pcre\"]:\n            self.skipTest(\"no PCRE support in the server\")\n\n    def test_big_pcre(self) -> None:\n        self.check_pcre()\n\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n\n        fill = \"lemon\\\\.php\" * 3600\n        pcre = (\n            \"^(\"\n            + \"|\".join([fill[i : i + 100] for i in range(0, len(fill), 100)])\n            + \"sss)\"\n        )\n\n        try:\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\"expression\": [\"pcre\", pcre, \"wholename\"], \"fields\": [\"name\"]},\n            )\n\n            # Some PCRE libraries are actually OK with this\n            # expression, so we won't always throw an error\n        except pywatchman.WatchmanError as e:\n            self.assertIn(\"is too\", str(e))\n\n    def test_pcre(self) -> None:\n        self.check_pcre()\n\n        root = self.mkdtemp()\n        self.touchRelative(root, \"foo.c\")\n        self.touchRelative(root, \"bar.txt\")\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileList(root, [\"bar.txt\", \"foo.c\"])\n\n        out = self.watchmanCommand(\"find\", root, \"-p\", \".*c$\")\n        self.assertEqual(1, len(out[\"files\"]))\n        self.assertFileListsEqual([\"foo.c\"], [out[\"files\"][0][\"name\"]])\n\n        out = self.watchmanCommand(\"find\", root, \"-p\", \".*txt$\")\n        self.assertEqual(1, len(out[\"files\"]))\n        self.assertFileListsEqual([\"bar.txt\"], [out[\"files\"][0][\"name\"]])\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"find\", root, \"-p\", \"(\")\n        self.assertIn(\"at offset 1 in (\", str(ctx.exception))\n\n        if self.isCaseInsensitive():\n            # -p matches case sensitivity of filesystem\n            out = self.watchmanCommand(\"find\", root, \"-p\", \".*C$\")\n            self.assertEqual(1, len(out[\"files\"]))\n            self.assertFileListsEqual([\"foo.c\"], [out[\"files\"][0][\"name\"]])\n\n        # and case insensitive mode\n        out = self.watchmanCommand(\"find\", root, \"-P\", \".*C$\")\n        self.assertEqual(1, len(out[\"files\"]))\n        self.assertFileListsEqual([\"foo.c\"], [out[\"files\"][0][\"name\"]])\n"
  },
  {
    "path": "watchman/integration/test_perms.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport unittest\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\ndef is_root() -> bool:\n    return hasattr(os, \"geteuid\") and os.geteuid() == 0\n\n\n@WatchmanTestCase.expand_matrix\nclass TestPerms(WatchmanTestCase.WatchmanTestCase):\n    def checkOSApplicability(self) -> None:\n        if os.name == \"nt\":\n            self.skipTest(\"N/A on Windows\")\n\n    @unittest.skipIf(is_root(), \"N/A if root\")\n    def test_permDeniedSubDir(self) -> None:\n        root = self.mkdtemp()\n        subdir = os.path.join(root, \"subdir\")\n        os.mkdir(subdir)\n        os.chmod(subdir, 0)\n        self.watchmanCommand(\"watch\", root)\n        res = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"exists\"], \"fields\": [\"name\"]}\n        )\n        self.assertRegex(res[\"warning\"], \"Marking this portion of the tree deleted\")\n\n    @unittest.skipIf(is_root(), \"N/A if root\")\n    def test_permDeniedRoot(self) -> None:\n        root = self.mkdtemp()\n        os.chmod(root, 0)\n        with self.assertRaisesRegex(pywatchman.CommandError, \"(open|opendir|realpath)\"):\n            self.watchmanCommand(\"watch\", root)\n"
  },
  {
    "path": "watchman/integration/test_remove.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport shutil\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestRemove(WatchmanTestCase.WatchmanTestCase):\n    def test_remove(self) -> None:\n        root = self.mkdtemp()\n        os.makedirs(os.path.join(root, \"one\", \"two\"))\n        self.touchRelative(root, \"one\", \"onefile\")\n        self.touchRelative(root, \"one\", \"two\", \"twofile\")\n        self.touchRelative(root, \"top\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(\n            root, files=[\"one\", \"one/onefile\", \"one/two\", \"one/two/twofile\", \"top\"]\n        )\n\n        shutil.rmtree(os.path.join(root, \"one\"))\n\n        self.assertFileList(root, files=[\"top\"])\n\n        self.touchRelative(root, \"one\")\n        self.assertFileList(root, files=[\"top\", \"one\"])\n\n        self.removeRelative(root, \"one\")\n        self.assertFileList(root, files=[\"top\"])\n\n        shutil.rmtree(root)\n        os.makedirs(os.path.join(root, \"notme\"))\n\n        self.assertWaitFor(\n            lambda: not self.rootIsWatched(root),\n            message=\"%s should be cancelled\" % root,\n        )\n"
  },
  {
    "path": "watchman/integration/test_remove_then_add.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport shutil\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestRemoveThenAdd(WatchmanTestCase.WatchmanTestCase):\n    def checkOSApplicability(self) -> None:\n        if os.name == \"linux\" and os.getenv(\"TRAVIS\"):\n            self.skipTest(\"openvz and inotify unlinks == bad time\")\n\n    def test_remove_then_add(self) -> None:\n        root = self.mkdtemp()\n        os.mkdir(os.path.join(root, \"foo\"))\n\n        self.watchmanCommand(\"watch\", root)\n\n        self.touchRelative(root, \"foo\", \"222\")\n        os.mkdir(os.path.join(root, \"foo\", \"bar\"))\n\n        self.assertFileList(root, files=[\"foo\", \"foo/bar\", \"foo/222\"])\n\n        shutil.rmtree(os.path.join(root, \"foo\", \"bar\"))\n        self.removeRelative(root, \"foo\", \"222\")\n        shutil.rmtree(os.path.join(root, \"foo\"))\n\n        self.assertFileList(root, files=[])\n\n        os.mkdir(os.path.join(root, \"foo\"))\n        self.touchRelative(root, \"foo\", \"222\")\n\n        self.assertFileList(root, files=[\"foo\", \"foo/222\"])\n"
  },
  {
    "path": "watchman/integration/test_request_id.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport errno\nimport os\nimport re\nimport subprocess\n\nfrom watchman.integration.lib import WatchmanInstance, WatchmanTestCase\n\n\ndef is_hg_installed() -> bool:\n    with open(os.devnull, \"wb\") as devnull:\n        try:\n            env = os.environ.copy()\n            env[\"HGPLAIN\"] = \"1\"\n            env[\"WATCHMAN_SOCK\"] = (\n                WatchmanInstance.getSharedInstance().getSockPath().legacy_sockpath()\n            )\n\n            exit_code = subprocess.call(\n                [\"hg\", \"--version\"], stdout=devnull, stderr=devnull, env=env\n            )\n            return exit_code == 0\n        except OSError as e:\n            if e.errno == errno.ENOENT:\n                return False\n            raise\n\n\n@WatchmanTestCase.expand_matrix\nclass TestRequestId(WatchmanTestCase.WatchmanTestCase):\n    def test_queryRequestId(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        self.watchmanCommand(\"log-level\", \"debug\")\n        self.touchRelative(root, \"111\")\n\n        request_id = \"f13bd3bc02c27afe2413932c6fa6c4942b0574b3\"\n        params = {\"since\": \"c:0:0\", \"request_id\": request_id}\n        self.watchmanCommand(\"query\", root, params)\n        pat = re.compile(\".* \\\\[client=.*\\\\] request_id = %s\" % request_id)\n\n        self.assertWaitFor(\n            lambda: any(pat.match(l) for l in self.getServerLogContents()),\n            message=\"request_id logged\",\n        )\n\n    def skipIfNoHgRequestIdSupport(self) -> None:\n        root = self.mkdtemp()\n        request_id = \"bf8a47014bd1b66103a8ab0aece4be7ada871660\"\n\n        env = os.environ.copy()\n        env[\"HGPLAIN\"] = \"1\"\n        env[\"HGREQUESTID\"] = request_id\n        env[\"WATCHMAN_SOCK\"] = (\n            WatchmanInstance.getSharedInstance().getSockPath().legacy_sockpath()\n        )\n\n        subprocess.call([\"hg\", \"init\"], env=env, cwd=root)\n        subprocess.call([\"hg\", \"log\"], env=env, cwd=root)\n\n        try:\n            with open(os.path.join(root, \".hg/blackbox.log\")) as f:\n                if request_id in f.read():\n                    return\n        except IOError:\n            pass\n\n        self.skipTest(\"HGREQUESTID is not supported\")\n\n    def test_scmHgRequestId(self) -> None:\n        if not is_hg_installed():\n            self.skipTest(\"Hg not installed\")\n        self.skipIfNoHgRequestIdSupport()\n\n        root = self.mkdtemp()\n\n        # In this test, the repo does not necessarily need fsmonitor enabled,\n        # since watchman calls HGREQUESTID=... hg status and that would also\n        # have request_id logged without fsmonitor.\n        env = os.environ.copy()\n        env[\"HGPLAIN\"] = \"1\"\n        env[\"WATCHMAN_SOCK\"] = (\n            WatchmanInstance.getSharedInstance().getSockPath().legacy_sockpath()\n        )\n        subprocess.call([\"hg\", \"init\"], env=env, cwd=root)\n        subprocess.call(\n            [\n                \"hg\",\n                \"commit\",\n                \"-mempty\",\n                \"-utest\",\n                \"-d0 0\",\n                \"--config=ui.allowemptycommit=1\",\n            ],\n            env=env,\n            cwd=root,\n        )\n        commit_hash = subprocess.check_output(\n            [\"hg\", \"log\", \"-r.\", \"-T{node}\"], env=env, cwd=root\n        ).decode(\"utf-8\")\n\n        # Must watch the directory after it's an HG repo to perform scm-aware\n        # queries.\n        self.watchmanCommand(\"watch\", root)\n        request_id = \"4c05a798ea1acc7c97b75e61fec5f640d90f8209\"\n\n        params = {\n            \"fields\": [\"name\"],\n            \"request_id\": request_id,\n            \"since\": {\"scm\": {\"mergebase-with\": commit_hash}},\n        }\n        self.watchmanCommand(\"query\", root, params)\n\n        blackbox_path = os.path.join(root, \".hg\", \"blackbox.log\")\n\n        def try_read_blackbox():\n            try:\n                with open(blackbox_path) as f:\n                    return f.read()\n            except IOError:\n                return \"\"\n\n        self.assertWaitFor(\n            lambda: request_id in try_read_blackbox(),\n            message=\"request_id passed to and logged by hg\",\n        )\n"
  },
  {
    "path": "watchman/integration/test_restrictions.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanInstance, WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestWatchRestrictions(WatchmanTestCase.WatchmanTestCase):\n    def test_rootRestrict(self) -> None:\n        config = {\"root_restrict_files\": [\".git\", \".foo\"]}\n        expect = [\n            (\"directory\", \".git\", True),\n            (\"file\", \".foo\", True),\n            (\"directory\", \".foo\", True),\n            (None, None, False),\n            (\"directory\", \".svn\", False),\n            (\"file\", \"baz\", False),\n        ]\n        self.runWatchTests(config=config, expect=expect)\n\n    def runWatchTests(self, config, expect) -> None:\n        with WatchmanInstance.Instance(config=config) as inst:\n            inst.start()\n            client = self.getClient(inst)\n\n            for filetype, name, expect_pass in expect:\n                for watch_type in [\"watch\", \"watch-project\"]:\n                    # encode the test criteria in the dirname so that we can\n                    # figure out which test scenario failed more easily\n                    d = self.mkdtemp(\n                        suffix=\"-%s-%s-%s-%s\"\n                        % (filetype, name, expect_pass, watch_type)\n                    )\n                    if filetype == \"directory\":\n                        os.mkdir(os.path.join(d, name))\n                    elif filetype == \"file\":\n                        self.touchRelative(d, name)\n\n                    assert_functions = {\n                        (True, \"watch\"): self.assertWatchSucceeds,\n                        (True, \"watch-project\"): self.assertWatchProjectSucceeds,\n                        (False, \"watch\"): self.assertWatchIsRestricted,\n                        (False, \"watch-project\"): self.assertWatchProjectIsRestricted,\n                    }\n                    assert_function = assert_functions[(expect_pass, watch_type)]\n                    assert_function(inst, client, d)\n\n    def assertWatchSucceeds(self, inst, client, path) -> None:\n        client.query(\"watch\", path)\n\n    def assertWatchProjectSucceeds(self, inst, client, path) -> None:\n        client.query(\"watch-project\", path)\n\n    def assertWatchIsRestricted(self, inst, client, path) -> None:\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            client.query(\"watch\", path)\n        message = str(ctx.exception)\n        self.assertIn(\"unable to resolve root {0}\".format(path), message)\n        self.assertIn(\n            (\n                \"Your watchman administrator has configured watchman to \"\n                + \"prevent watching path `{0}`\"\n            ).format(path),\n            message,\n        )\n        self.assertIn(\n            \"None of the files listed in global config root_files are present \"\n            + \"and enforce_root_files is set to true.\",\n            message,\n        )\n        self.assertIn(\n            \"root_files is defined by the `{0}` config file\".format(inst.cfg_file),\n            message,\n        )\n        self.assertIn(\n            \"config file and includes `.watchmanconfig`, `.git`, and `.foo`.\", message\n        )\n        self.assertIn(\n            \"One or more of these files must be present in order to allow a \"\n            + \"watch.  Try pulling and checking out a newer version of the \"\n            + \"project?\",\n            message,\n        )\n\n    def assertWatchProjectIsRestricted(self, inst, client, path) -> None:\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            client.query(\"watch-project\", path)\n        message = str(ctx.exception)\n        self.assertIn(\n            (\n                \"None of the files listed in global config root_files are \"\n                + \"present in path `{0}` or any of its parent directories.\"\n            ).format(path),\n            message,\n        )\n        self.assertIn(\n            \"root_files is defined by the `{0}` config file\".format(inst.cfg_file),\n            message,\n        )\n        self.assertIn(\n            \"config file and includes `.watchmanconfig`, `.git`, and `.foo`.\", message\n        )\n        self.assertIn(\n            \"One or more of these files must be present in order to allow a \"\n            + \"watch. Try pulling and checking out a newer version of the \"\n            + \"project?\",\n            message,\n        )\n\n    def test_invalidRoot(self) -> None:\n        d = self.mkdtemp()\n        invalid = os.path.join(d, \"invalid\")\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"watch\", invalid)\n        msg = str(ctx.exception)\n        if \"No such file or directory\" in msg:\n            # unix\n            return\n        if \"The system cannot find the file specified\" in msg:\n            # windows\n            return\n        self.assertTrue(False, msg)\n"
  },
  {
    "path": "watchman/integration/test_saved_state.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanSCMTestCase, WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestSavedState(WatchmanSCMTestCase.WatchmanSCMTestCase):\n    def setUp(self) -> None:\n        self.skipIfNoFSMonitor()\n        self.root = self.mkdtemp()\n        # This test does not require much so just create a super simple repo\n        self.hg([\"init\"], cwd=self.root)\n        self.touchRelative(self.root, \"foo\")\n        self.hg([\"book\", \"initial\"], cwd=self.root)\n        self.hg([\"addremove\"], cwd=self.root)\n        self.hg([\"commit\", \"-m\", \"initial\"], cwd=self.root)\n        self.touchRelative(self.root, \"bar\")\n        self.touchRelative(self.root, \"car\")\n        self.hg([\"addremove\"], cwd=self.root)\n        self.hg([\"commit\", \"-m\", \"add bar and car\"], cwd=self.root)\n        self.hg([\"book\", \"main\"], cwd=self.root)\n        self.watchmanCommand(\"watch\", self.root)\n\n    def get_skeleton_query(self):\n        return {\n            \"expression\": [\n                \"not\",\n                [\"anyof\", [\"name\", \".hg\"], [\"match\", \"hg-check*\"], [\"dirname\", \".hg\"]],\n            ],\n            \"fields\": [\"name\"],\n            \"since\": {\"scm\": {\"mergebase-with\": \"main\"}},\n        }\n\n    def test_unsupportedStorageType(self) -> None:\n        # If the storage type is not supported, watchman should throw\n        test_query = self.get_skeleton_query()\n        test_query[\"since\"][\"scm\"][\"saved-state\"] = {\"storage\": \"foo\", \"config\": {}}\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", self.root, test_query)\n        self.assertIn(\"invalid storage type 'foo'\", str(ctx.exception))\n"
  },
  {
    "path": "watchman/integration/test_scm.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport unittest\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanSCMTestCase, WatchmanTestCase\n\n\ndef is_ubuntu() -> bool:\n    try:\n        with open(\"/etc/lsb-release\") as f:\n            if \"Ubuntu\" in f.read():\n                return True\n    except Exception:\n        pass\n    return False\n\n\n@WatchmanTestCase.expand_matrix\nclass TestScm(WatchmanSCMTestCase.WatchmanSCMTestCase):\n    def test_not_supported(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"expression\": [\"allof\", [\"type\", \"f\"], [\"match\", \"*.sh\"]],\n                    \"fields\": [\"name\"],\n                    \"since\": {\n                        \"scm\": {\"mergebase-with\": \"remote/master\"},\n                        \"clock\": \"c:0:0\",\n                    },\n                },\n            )\n        self.assertIn(\"root does not support SCM-aware queries\", str(ctx.exception))\n\n    @unittest.skipIf(is_ubuntu(), \"Test is flaky. See Facebook task T36574087.\")\n    def test_scmHg(self) -> None:\n        self.skipIfNoFSMonitor()\n\n        root = self.mkdtemp()\n        \"\"\" Set up a repo with a DAG like this:\n@  changeset:   4:6c38b3c78a62\n|  bookmark:    feature2\n|  tag:         tip\n|  summary:     add m2\n|\no  changeset:   3:88fea8704cd2\n|  bookmark:    main\n|  parent:      1:6b3ecb11785e\n|  summary:     add m1\n|\n| o  changeset:   5:7bc34583612\n|/   bookmark:    feature3\n|    summary:     remove car\n|\n| o  changeset:   2:2db357583971\n|/   bookmark:    feature1\n|    summary:     add f1\n|\no  changeset:   0:b08db10380dd\n   bookmark:    initial\n   summary:     initial\n        \"\"\"\n\n        self.hg([\"init\"], cwd=root)\n        self.touchRelative(root, \"foo\")\n        self.hg([\"book\", \"initial\"], cwd=root)\n        self.hg([\"addremove\"], cwd=root)\n        self.hg([\"commit\", \"-m\", \"initial\"], cwd=root)\n        self.hg([\"book\", \"main\"], cwd=root)\n        self.touchRelative(root, \"bar\")\n        self.touchRelative(root, \"car\")\n        self.hg([\"addremove\"], cwd=root)\n        self.hg([\"commit\", \"-m\", \"add bar and car\"], cwd=root)\n        self.hg([\"book\", \"feature1\"], cwd=root)\n        os.makedirs(os.path.join(root, \"a\", \"b\", \"c\"))\n        self.touchRelative(root, \"a\", \"b\", \"c\", \"f1\")\n        self.hg([\"addremove\"], cwd=root)\n        self.hg([\"commit\", \"-m\", \"add f1\"], cwd=root)\n        self.hg([\"co\", \"main\"], cwd=root)\n        self.hg([\"book\", \"feature3\"], cwd=root)\n        self.hg([\"rm\", \"car\"], cwd=root)\n        self.hg([\"commit\", \"-m\", \"remove car\"], cwd=root)\n        self.hg([\"co\", \"main\"], cwd=root)\n        self.touchRelative(root, \"m1\")\n        self.hg([\"addremove\"], cwd=root)\n        self.hg([\"commit\", \"-m\", \"add m1\"], cwd=root)\n        self.hg([\"book\", \"feature2\"], cwd=root)\n        self.touchRelative(root, \"m2\")\n        self.hg([\"addremove\"], cwd=root)\n        self.hg([\"commit\", \"-m\", \"add m2\"], cwd=root)\n\n        watch = self.watchmanCommand(\"watch\", root)\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"name\", \".hg\"],\n                        [\"match\", \"hg-check*\"],\n                        [\"dirname\", \".hg\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo\", \"bar\", \"car\", \"m1\", \"m2\"])\n\n        # Verify behavior with badly formed queries\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"expression\": [\n                        \"not\",\n                        [\n                            \"anyof\",\n                            [\"name\", \".hg\"],\n                            [\"match\", \"hg-check*\"],\n                            [\"dirname\", \".hg\"],\n                        ],\n                    ],\n                    \"since\": {\"scm\": {}},\n                },\n            )\n        self.assertIn(\n            \"key 'mergebase-with' is not present in this json object\",\n            str(ctx.exception),\n        )\n\n        # When the client doesn't know the merge base, we should give\n        # them the current status and merge base\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"name\", \".hg\"],\n                        [\"match\", \"hg-check*\"],\n                        [\"dirname\", \".hg\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": {\"scm\": {\"mergebase-with\": \"main\"}},\n            },\n        )\n\n        self.assertNotEqual(res[\"clock\"][\"scm\"][\"mergebase\"], \"\")\n        self.assertEqual(res[\"clock\"][\"scm\"][\"mergebase-with\"], \"main\")\n        # The only file changed between main and feature2 is m2\n        self.assertFileListsEqual(res[\"files\"], [\"m2\"])\n\n        # Let's also set up a subscription for the same query\n        sub = self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"scmsub\",\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"name\", \".hg\"],\n                        [\"match\", \"hg-check*\"],\n                        [\"dirname\", \".hg\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": {\"scm\": {\"mergebase-with\": \"main\"}},\n            },\n        )\n\n        self.waitForStatesToVacate(root)\n        self.watchmanCommand(\"flush-subscriptions\", root, {\"sync_timeout\": 1000})\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=root)\n\n        # compare with the query results that we got\n        self.assertEqual(sub[\"clock\"][\"scm\"], res[\"clock\"][\"scm\"])\n        self.assertFileListsEqual(res[\"files\"], self.getConsolidatedFileList(dat))\n\n        mergeBase = res[\"clock\"][\"scm\"][\"mergebase\"]\n\n        # Ensure that we can see a file that isn't tracked show up\n        # as a delta in the what we consider to be the common case.\n        # we're threading the merge-base result from the prior query\n        # through, so this should just end up looking like a normal\n        # since query.\n        self.touchRelative(root, \"w00t\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"name\", \".hg\"],\n                        [\"match\", \"hg-check*\"],\n                        [\"dirname\", \".hg\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": res[\"clock\"],\n            },\n        )\n        self.assertEqual(res[\"clock\"][\"scm\"][\"mergebase\"], mergeBase)\n        self.assertFileListsEqual(res[\"files\"], [\"w00t\"])\n\n        # and check that subscription results are consistent with it\n        self.waitForStatesToVacate(root)\n        self.watchmanCommand(\"flush-subscriptions\", root, {\"sync_timeout\": 1000})\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=root)\n        self.assertEqual(dat[-1][\"clock\"][\"scm\"], res[\"clock\"][\"scm\"])\n        self.assertFileListsEqual(res[\"files\"], self.getConsolidatedFileList(dat))\n\n        # Going back to the merge base, we should get a regular looking incremental\n        # list of the files as we would from a since query; we expect to see\n        # the removal of w00t and m2\n        os.unlink(os.path.join(root, \"w00t\"))\n\n        self.waitForStatesToVacate(root)\n        self.watchmanCommand(\"flush-subscriptions\", root, {\"sync_timeout\": 1000})\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=root)\n        self.assertFileListsEqual([\"w00t\"], self.getConsolidatedFileList(dat))\n\n        self.hg([\"co\", \"-C\", \"main\"], cwd=root)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"name\", \".hg\"],\n                        [\"match\", \"hg-check*\"],\n                        [\"dirname\", \".hg\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": res[\"clock\"],\n            },\n        )\n        self.assertEqual(res[\"clock\"][\"scm\"][\"mergebase\"], mergeBase)\n        self.assertFileListsEqual(res[\"files\"], [\"w00t\", \"m2\"])\n\n        self.waitForStatesToVacate(root)\n        self.watchmanCommand(\"flush-subscriptions\", root, {\"sync_timeout\": 1000})\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=root)\n        self.assertEqual(dat[0][\"clock\"][\"scm\"], res[\"clock\"][\"scm\"])\n        # we already observed the w00t update above, so we expect to see just the\n        # file(s) that changed in the update operation\n        self.assertFileListsEqual([\"m2\"], self.getConsolidatedFileList(dat))\n\n        # Now we're going to move to another branch with a different mergebase.\n        self.hg([\"co\", \"-C\", \"feature1\"], cwd=root)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"name\", \".hg\"],\n                        [\"match\", \"hg-check*\"],\n                        [\"dirname\", \".hg\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": res[\"clock\"],\n            },\n        )\n\n        # We expect to observe the changed merged base\n        self.assertNotEqual(res[\"clock\"][\"scm\"][\"mergebase\"], mergeBase)\n        # and only the file that changed since that new mergebase\n        self.assertFileListsEqual(res[\"files\"], [\"a/b/c/f1\"])\n\n        # check again that subscription results are consistent with it.\n        self.waitForStatesToVacate(root)\n        self.watchmanCommand(\"flush-subscriptions\", root, {\"sync_timeout\": 1000})\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=root)\n        self.assertEqual(dat[-1][\"clock\"][\"scm\"], res[\"clock\"][\"scm\"])\n        # Cookies are written to all the top level directories, thus the\n        # set of files will also include the top level directory, even\n        # though no files changed in it.\n        additionalFiles = [\"a\"] if watch[\"watcher\"] == \"kqueue+fsevents\" else []\n        self.assertFileListsEqual(\n            res[\"files\"] + additionalFiles, self.getConsolidatedFileList(dat)\n        )\n\n        # and to check whether our dirstate caching code is reasonable,\n        # run a query that should be able to hit the cache\n        clock = res[\"clock\"]\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"name\", \".hg\"],\n                        [\"match\", \"hg-check*\"],\n                        [\"dirname\", \".hg\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": {\"scm\": {\"mergebase-with\": \"main\"}},\n            },\n        )\n        self.assertEqual(clock[\"scm\"], res[\"clock\"][\"scm\"])\n\n        # Fresh instance queries return the complete set of changes (so there is\n        # no need to provide information on deleted files). # In contrast, SCM\n        # aware queries must contain the deleted files in the result list. Check\n        # that the deleted file is part of the result set for feature3.\n        self.hg([\"co\", \"-C\", \"feature3\"], cwd=root)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"name\", \".hg\"],\n                        [\"match\", \"hg-check*\"],\n                        [\"dirname\", \".hg\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": res[\"clock\"],\n            },\n        )\n        self.assertFileListsEqual(\n            res[\"files\"], [\"a\", \"a/b\", \"a/b/c\", \"a/b/c/f1\", \"car\"]\n        )\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"name\", \".hg\"],\n                        [\"match\", \"hg-check*\"],\n                        [\"dirname\", \".hg\"],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": {\"scm\": {\"mergebase\": \"\", \"mergebase-with\": \"main\"}},\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"car\"])\n\n        # Make sure that LocalFileResult can render timestamps in the results\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"name\", \"car\"],\n                \"fields\": [\"name\", \"mtime\", \"atime\", \"ctime\", \"content.sha1hex\"],\n                \"since\": {\"scm\": {\"mergebase\": \"\", \"mergebase-with\": \"main\"}},\n            },\n        )\n        # Since 'car' was deleted, its timestamps are reported as 0\n        for ts in [\"mtime\", \"atime\", \"ctime\"]:\n            self.assertEqual(res[\"files\"][0][ts], 0)\n        self.assertEqual(res[\"files\"][0][\"content.sha1hex\"], None)\n\n        # Check again with a file that exists\n        self.hg([\"co\", \"-C\", \"feature2\"], cwd=root)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"name\", \"m2\"],\n                \"fields\": [\"name\", \"mtime\", \"atime\", \"ctime\", \"content.sha1hex\"],\n                \"since\": {\"scm\": {\"mergebase\": \"\", \"mergebase-with\": \"main\"}},\n            },\n        )\n        for ts in [\"mtime\", \"atime\", \"ctime\"]:\n            self.assertGreater(res[\"files\"][0][ts], 0)\n        self.assertEqual(\n            res[\"files\"][0][\"content.sha1hex\"],\n            \"da39a3ee5e6b4b0d3255bfef95601890afd80709\",\n        )\n\n        # Go to the 'initial' bookmark, and query for changes since 'initial'\n        # We should ideally not see any changes ...\n        self.hg([\"co\", \"-C\", \"initial\"], cwd=root)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"not\", [\"anyof\", [\"name\", \".hg\"], [\"dirname\", \".hg\"]]],\n                \"fields\": [\"name\"],\n                \"since\": {\"scm\": {\"mergebase-with\": \"initial\"}},\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        # Determine the bookmark hashes\n        mergeBaseMain = self.resolveCommitHash(\"main\", cwd=root)\n        mergeBaseInitial = self.resolveCommitHash(\"initial\", cwd=root)\n\n        # Checkout initial\n        self.hg([\"co\", \"-C\", \"initial\"], cwd=root)\n        self.watchmanCommand(\"flush-subscriptions\", root, {\"sync_timeout\": 1000})\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=root)\n\n        # Checkout main - verify merge base change and empty file list\n        self.hg([\"co\", \"-C\", \"main\"], cwd=root)\n\n        self.waitForStatesToVacate(root)\n        self.watchmanCommand(\"flush-subscriptions\", root, {\"sync_timeout\": 1000})\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=root)\n        self.assertEqual(dat[-1][\"clock\"][\"scm\"][\"mergebase\"], mergeBaseMain)\n        self.assertFileListsEqual(self.getConsolidatedFileList(dat), [])\n\n        # Checkout initial - verify merge base change and empty file list\n        self.hg([\"co\", \"-C\", \"initial\"], cwd=root)\n\n        self.waitForStatesToVacate(root)\n        self.watchmanCommand(\"flush-subscriptions\", root, {\"sync_timeout\": 1000})\n        dat = self.getSubFatClocksOnly(\"scmsub\", root=root)\n        self.assertEqual(dat[-1][\"clock\"][\"scm\"][\"mergebase\"], mergeBaseInitial)\n        self.assertFileListsEqual(self.getConsolidatedFileList(dat), [])\n\n        # Ensure that we reported deleted files correctly, even\n        # if we've never seen the files before.  To do this, we're\n        # going to cancel the watch and restart it, so this is broken\n        # out separately from the earlier tests against feature3\n        self.hg([\"co\", \"-C\", \"feature3\"], cwd=root)\n        self.watchmanCommand(\"watch-del\", root)\n        self.watchmanCommand(\"watch\", root)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"allof\",\n                    [\"type\", \"f\"],\n                    [\n                        \"not\",\n                        [\n                            \"anyof\",\n                            [\"name\", \".hg\"],\n                            [\"match\", \"hg-check*\"],\n                            [\"dirname\", \".hg\"],\n                        ],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": {\"scm\": {\"mergebase\": \"\", \"mergebase-with\": \"main\"}},\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"car\"])\n\n        self.hg([\"co\", \"-C\", \"feature1\"], cwd=root)\n        self.watchmanCommand(\"watch-del\", root)\n        self.watchmanCommand(\"watch\", root)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"allof\",\n                    [\"type\", \"f\"],\n                    [\n                        \"not\",\n                        [\n                            \"anyof\",\n                            [\"name\", \".hg\"],\n                            [\"match\", \"hg-check*\"],\n                            [\"dirname\", \".hg\"],\n                        ],\n                    ],\n                ],\n                \"fields\": [\"name\"],\n                \"since\": {\"scm\": {\"mergebase\": \"\", \"mergebase-with\": \"main\"}},\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"a/b/c/f1\"])\n\n        # verify behavior of relative_root with a bogus prefix\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"relative_root\": \"bogus\",\n                \"fields\": [\"name\"],\n                \"since\": {\"scm\": {\"mergebase\": \"\", \"mergebase-with\": \"main\"}},\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        # verify behavior of relative_root with a matching prefix\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"relative_root\": \"a\",\n                \"fields\": [\"name\"],\n                \"since\": {\"scm\": {\"mergebase\": \"\", \"mergebase-with\": \"main\"}},\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"b/c/f1\"])\n"
  },
  {
    "path": "watchman/integration/test_since.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\nimport os.path\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestSince(WatchmanTestCase.WatchmanTestCase):\n    def test_sinceIssue1(self) -> None:\n        root = self.mkdtemp()\n        self.touchRelative(root, \"111\")\n        self.touchRelative(root, \"222\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\"111\", \"222\"])\n\n        # Create a cursor for this state\n        self.watchmanCommand(\"since\", root, \"n:foo\")\n\n        bar_dir = os.path.join(root, \"bar\")\n        os.mkdir(bar_dir)\n        self.touchRelative(bar_dir, \"333\")\n        self.waitForSync(root)\n\n        # We should not observe 111 or 222\n        self.assertFileList(root, cursor=\"n:foo\", files=[\"bar\", \"bar/333\"])\n\n    def test_sinceIssue2(self) -> None:\n        root = self.mkdtemp()\n        watch = self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[])\n\n        foo_dir = os.path.join(root, \"foo\")\n        os.mkdir(foo_dir)\n        self.touchRelative(foo_dir, \"111\")\n        self.waitForSync(root)\n\n        self.assertFileList(root, cursor=\"n:foo\", files=[\"foo\", \"foo/111\"])\n\n        bar_dir = os.path.join(foo_dir, \"bar\")\n        os.mkdir(bar_dir)\n        self.touchRelative(bar_dir, \"222\")\n\n        # wait until we observe all the files\n        self.assertFileList(root, files=[\"foo\", \"foo/111\", \"foo/bar\", \"foo/bar/222\"])\n\n        # now check the delta for the since\n        expected = [\"foo/bar\", \"foo/bar/222\"]\n        files = self.getFileList(root, cursor=\"n:foo\")\n        if watch[\"watcher\"] in (\n            \"inotify\",\n            \"portfs\",\n            \"kqueue\",\n            \"fsevents\",\n            \"dirfsevents\",\n            \"kqueue+fsevents\",\n        ):\n            # These systems also show the containing dir as modified\n            expected.append(\"foo\")\n        elif watch[\"watcher\"] == \"win32\":\n            # the containing directory sometimes(!) shows as modified\n            # on win32, but the important thing is that the other files\n            # show up in the list\n            files = [f for f in files if f != \"foo\"]\n        self.assertFileListsEqual(files, expected)\n\n    def test_sinceRelativeRoot(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        clock = self.watchmanCommand(\"clock\", root)[\"clock\"]\n\n        self.touchRelative(root, \"a\")\n        os.mkdir(os.path.join(root, \"subdir\"))\n        self.touchRelative(os.path.join(root, \"subdir\"), \"foo\")\n        self.assertFileList(root, files=[\"a\", \"subdir\", \"subdir/foo\"])\n\n        _c, start_time, pid, root_number, ticks = clock.split(\":\")\n        # Move the clock back to avoid flakiness when mkdir/touch are fast enough to make the\n        # query have the same time as `clock`\n        before_clock = \"c:{}:{}:{}:{}\".format(\n            str(int(start_time) - 1), pid, root_number, ticks\n        )\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": before_clock, \"relative_root\": \"subdir\", \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo\"])\n\n        # touch a file outside the relative root\n        self.touchRelative(root, \"b\")\n        self.assertFileList(root, files=[\"a\", \"b\", \"subdir\", \"subdir/foo\"])\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": res[\"clock\"], \"relative_root\": \"subdir\", \"fields\": [\"name\"]},\n        )\n        expect = []\n        # Filter out 'foo' as some operating systems may report\n        # it and others may not.  We're not interested in it here.\n        self.assertFileListsEqual(filter(lambda x: x != \"foo\", res[\"files\"]), expect)\n\n        # touching just the subdir shouldn't cause anything to show up\n        self.touchRelative(root, \"subdir\")\n        self.waitForSync(root)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": res[\"clock\"], \"relative_root\": \"subdir\", \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        # touching a new file inside the subdir should cause it to show up\n        dir2 = os.path.join(root, \"subdir\", \"dir2\")\n        os.mkdir(dir2)\n        self.touchRelative(dir2, \"bar\")\n        self.waitForSync(root)\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": res[\"clock\"], \"relative_root\": \"subdir\", \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"dir2\", \"dir2/bar\"])\n\n    def assertFreshInstanceForSince(self, root, cursor, empty: bool = False) -> None:\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": cursor, \"fields\": [\"name\"], \"empty_on_fresh_instance\": empty},\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        if empty:\n            self.assertFileListsEqual(res[\"files\"], [])\n        else:\n            self.assertFileListsEqual(res[\"files\"], [\"111\"])\n\n    def test_sinceFreshInstance(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [])\n        self.touchRelative(root, \"111\")\n\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"]})\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [\"111\"])\n\n        # relative clock value, fresh instance\n        self.assertFreshInstanceForSince(root, \"c:0:1:0:1\", False)\n\n        # old-style clock value (implies fresh instance, event if the\n        # pid is the same)\n        pid = self.watchmanCommand(\"get-pid\")[\"pid\"]\n        self.assertFreshInstanceForSince(root, \"c:%s:1\" % pid, False)\n\n        # -- decompose clock and replace elements one by one\n        clock = self.watchmanCommand(\"clock\", root)[\"clock\"]\n        p = clock.split(\":\")\n        # ['c', startTime, pid, rootNum, ticks]\n        self.assertEqual(len(p), 5)\n\n        # replace start time\n        self.assertFreshInstanceForSince(\n            root, \":\".join([\"c\", \"0\", p[2], p[3], p[4]]), False\n        )\n\n        # replace pid\n        self.assertFreshInstanceForSince(\n            root, \":\".join([\"c\", p[1], \"1\", p[3], p[4]]), False\n        )\n\n        # replace root number (also try empty_on_fresh_instance)\n        self.assertFreshInstanceForSince(\n            root, \":\".join([\"c\", p[1], p[2], \"0\", p[4]]), True\n        )\n\n        # empty_on_fresh_instance, not a fresh instance\n        self.touchRelative(root, \"222\")\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"since\": clock, \"fields\": [\"name\"], \"empty_on_fresh_instance\": True},\n        )\n        self.assertFalse(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [\"222\"])\n\n        # fresh instance results should omit deleted files\n        os.unlink(os.path.join(root, \"111\"))\n        res = self.watchmanCommand(\n            \"query\", root, {\"since\": \"c:0:1:0:1\", \"fields\": [\"name\"]}\n        )\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [\"222\"])\n\n    def test_reAddWatchFreshInstance(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [])\n        self.touchRelative(root, \"111\")\n\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"]})\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [\"111\"])\n\n        clock = res[\"clock\"]\n        os.unlink(os.path.join(root, \"111\"))\n        self.watchmanCommand(\"watch-del\", root)\n\n        self.watchmanCommand(\"watch\", root)\n        self.touchRelative(root, \"222\")\n\n        # wait for touch to be observed\n        self.assertFileList(root, [\"222\"])\n\n        # ensure that our since query is a fresh instance\n        res = self.watchmanCommand(\"query\", root, {\"since\": clock, \"fields\": [\"name\"]})\n        self.assertTrue(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [\"222\"])\n\n    def test_recrawlFreshInstance(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        self.touchRelative(root, \"111\")\n        self.assertFileList(root, [\"111\"])\n\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"]})\n        self.assertTrue(res[\"is_fresh_instance\"])\n\n        clock = res[\"clock\"]\n        os.unlink(os.path.join(root, \"111\"))\n        self.watchmanCommand(\"debug-recrawl\", root)\n\n        self.touchRelative(root, \"222\")\n        res = self.watchmanCommand(\"query\", root, {\"since\": clock, \"fields\": [\"name\"]})\n        # In earlier versions of the server, the recrawl would always\n        # generate a fresh instance result set.  This is no longer true.\n        self.assertFalse(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [\"111\", \"222\"])\n        self.assertRegex(res[\"warning\"], \"Recrawled this watch\")\n\n    def test_recrawlFreshInstanceWarningSuppressed(self) -> None:\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"suppress_recrawl_warnings\": True}))\n\n        self.watchmanCommand(\"watch\", root)\n        self.touchRelative(root, \"111\")\n        self.assertFileList(root, [\".watchmanconfig\", \"111\"])\n\n        res = self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"]})\n        self.assertTrue(res[\"is_fresh_instance\"])\n\n        clock = res[\"clock\"]\n        os.unlink(os.path.join(root, \"111\"))\n        self.watchmanCommand(\"debug-recrawl\", root)\n\n        self.touchRelative(root, \"222\")\n        res = self.watchmanCommand(\"query\", root, {\"since\": clock, \"fields\": [\"name\"]})\n        # In earlier versions of the server, the recrawl would always\n        # generate a fresh instance result set.  This is no longer true.\n        self.assertFalse(res[\"is_fresh_instance\"])\n        self.assertFileListsEqual(res[\"files\"], [\"111\", \"222\"])\n        self.assertTrue(\"warning\" not in res)\n"
  },
  {
    "path": "watchman/integration/test_since_term.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport time\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestSinceTerm(WatchmanTestCase.WatchmanTestCase):\n    def test_since_term(self) -> None:\n        root = self.mkdtemp()\n\n        self.touchRelative(root, \"foo.c\")\n        os.mkdir(os.path.join(root, \"subdir\"))\n        self.touchRelative(root, \"subdir\", \"bar.txt\")\n\n        watch = self.watchmanCommand(\"watch\", root)\n\n        res = self.watchmanCommand(\"find\", root, \"foo.c\")\n        first_clock = res[\"clock\"]\n        base_mtime = res[\"files\"][0][\"mtime\"]\n\n        # Since is GT not GTE\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"since\", base_mtime, \"mtime\"], \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo.c\", \"subdir\", \"subdir/bar.txt\"])\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"allof\",\n                    [\"since\", base_mtime - 1, \"mtime\"],\n                    [\"name\", \"foo.c\"],\n                ],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo.c\"])\n\n        if self.isCaseInsensitive():\n            res = self.watchmanCommand(\n                \"query\",\n                root,\n                {\n                    \"expression\": [\n                        \"allof\",\n                        [\"since\", base_mtime - 1, \"mtime\"],\n                        [\"name\", \"FOO.c\"],\n                    ],\n                    \"fields\": [\"name\"],\n                },\n            )\n            self.assertFileListsEqual(res[\"files\"], [\"foo.c\"])\n\n        # Try with a clock\n        res = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"since\", first_clock], \"fields\": [\"name\"]}\n        )\n        expected = []\n        if watch[\"watcher\"] == \"kqueue+fsevents\":\n            # A cookie is written to subdir in the split watcher, thus it is\n            # expected to have it in the files returned by the query.\n            expected.append(\"subdir\")\n        self.assertFileListsEqual(res[\"files\"], expected)\n\n        future = base_mtime + 15\n        self.touch(os.path.join(root, \"foo.c\"), (future, future))\n\n        # Try again with a clock\n        res = self.watchmanCommand(\n            \"query\", root, {\"expression\": [\"since\", first_clock], \"fields\": [\"name\"]}\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo.c\"] + expected)\n\n        # And check that we're still later than a later but not current mtime\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\"expression\": [\"since\", base_mtime + 5, \"mtime\"], \"fields\": [\"name\"]},\n        )\n        self.assertFileListsEqual(res[\"files\"], [\"foo.c\"])\n\n        # If using a timestamp against the oclock, ensure that we're comparing\n        # in the correct order.  We need to force a 2 second delay so that the\n        # timestamp moves forward by at least 1 increment for this test to\n        # work correctly\n        time.sleep(2)\n\n        res = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"allof\", [\"since\", int(time.time())], [\"name\", \"foo.c\"]],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res[\"files\"], [])\n\n        # Try with a fresh clock instance; we must only return files that exist.\n        self.removeRelative(root, \"subdir\", \"bar.txt\")\n        self.assertFileList(root, files=[\"foo.c\", \"subdir\"], cursor=\"c:0:0\")\n"
  },
  {
    "path": "watchman/integration/test_site_spawn.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\nimport sys\nimport unittest\n\nfrom watchman.integration.lib import HELPER_ROOT, WatchmanInstance\n\nSITE_SPAWN = os.path.join(HELPER_ROOT, \"site_spawn.py\")\nSITE_SPAWN_FAIL = os.path.join(HELPER_ROOT, \"site_spawn_fail.py\")\n\n\n@unittest.skipIf(os.name == \"nt\", \"not supported on windows\")\nclass TestSiteSpawn(unittest.TestCase):\n    def test_failingSpawner(self) -> None:\n        config = {\"spawn_watchman_service\": SITE_SPAWN_FAIL}\n\n        inst = WatchmanInstance.Instance(config=config)\n        stdout, stderr = inst.commandViaCLI([\"version\"])\n        sys.stdout.buffer.write(b\"stdout:\\n\")\n        sys.stdout.buffer.write(stdout)\n        sys.stdout.buffer.write(b\"stderr:\\n\")\n        sys.stdout.buffer.write(stderr)\n        stderr = stderr.decode(\"ascii\")\n        self.assertEqual(b\"\", stdout)\n        self.assertRegex(stderr, \"failed to start\\n\")\n        self.assertRegex(stderr, \"site_spawn_fail.py: exited with status 1\")\n\n    def test_no_site_spawner(self) -> None:\n        \"\"\"With a site spawner configured to otherwise fail, pass\n        `--no-site-spawner` and ensure that a failure didn't occur.\"\"\"\n        config = {\"spawn_watchman_service\": SITE_SPAWN_FAIL}\n\n        inst = WatchmanInstance.Instance(config=config)\n        stdout, stderr = inst.commandViaCLI([\"version\", \"--no-site-spawner\"])\n\n        print(stdout, stderr.decode(\"ascii\"))\n        parsed = json.loads(stdout.decode(\"ascii\"))\n        self.assertTrue(\"version\" in parsed)\n\n        inst.commandViaCLI([\"--no-spawn\", \"--no-local\", \"shutdown-server\"])\n\n    def test_spawner(self) -> None:\n        config = {\"spawn_watchman_service\": SITE_SPAWN}\n\n        inst = WatchmanInstance.Instance(config=config)\n        stdout, stderr = inst.commandViaCLI([\"version\"])\n\n        parsed = json.loads(stdout.decode(\"ascii\"))\n        self.assertTrue(\"version\" in parsed)\n\n        # Shut down that process, as we have no automatic way to deal with it\n        inst.commandViaCLI([\"--no-spawn\", \"--no-local\", \"shutdown-server\"])\n"
  },
  {
    "path": "watchman/integration/test_size.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestSizeExpr(WatchmanTestCase.WatchmanTestCase):\n    def test_size_expr(self) -> None:\n        root = self.mkdtemp()\n\n        self.touchRelative(root, \"empty\")\n        with open(os.path.join(root, \"notempty\"), \"w\") as f:\n            f.write(\"foo\")\n\n        with open(os.path.join(root, \"1k\"), \"w\") as f:\n            f.truncate(1024)\n\n        self.watchmanCommand(\"watch\", root)\n\n        tests = [\n            [\"eq\", 0, [\"empty\"]],\n            [\"ne\", 0, [\"1k\", \"notempty\"]],\n            [\"gt\", 0, [\"1k\", \"notempty\"]],\n            [\"gt\", 2, [\"1k\", \"notempty\"]],\n            [\"ge\", 3, [\"1k\", \"notempty\"]],\n            [\"gt\", 3, [\"1k\"]],\n            [\"le\", 3, [\"empty\", \"notempty\"]],\n            [\"lt\", 3, [\"empty\"]],\n        ]\n\n        for op, operand, expect in tests:\n            res = self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"size\", op, operand], \"fields\": [\"name\"]}\n            )\n            self.assertFileListsEqual(\n                res[\"files\"], expect, message=repr((op, operand, expect))\n            )\n\n        self.removeRelative(root, \"1k\")\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"size\", \"gt\", 100], \"fields\": [\"name\"]}\n            )[\"files\"],\n            [],\n            message=\"removed file is not matched\",\n        )\n"
  },
  {
    "path": "watchman/integration/test_sock_perms.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport random\nimport re\nimport stat\nimport string\nimport subprocess\nimport sys\nimport time\nimport unittest\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanInstance\n\n\ntry:\n    import grp\nexcept ImportError:\n    # Windows\n    pass\n\n\n@unittest.skipIf(\n    os.name == \"nt\" or sys.platform == \"darwin\" or os.geteuid() == 0,\n    \"win, mac or root\",\n)\nclass TestSockPerms(unittest.TestCase):\n    def _new_instance(self, config):\n        start_timeout = 60\n        return WatchmanInstance.InstanceWithStateDir(\n            config=config, start_timeout=start_timeout\n        )\n\n    def _get_custom_gid(self):\n        # This is a bit hard to do: we need to find a group the user is a member\n        # of that's not the effective or real gid. If there are none then we\n        # must skip.\n        groups = os.getgroups()\n        for gid in groups:\n            if gid != os.getgid() and gid != os.getegid():\n                return gid\n        self.skipTest(\"no usable groups found\")\n\n    def _get_non_member_group(self):\n        \"\"\"Get a group tuple that this user is not a member of.\"\"\"\n        user_groups = set(os.getgroups())\n        for group in grp.getgrall():\n            if group.gr_gid not in user_groups:\n                return group\n        self.skipTest(\"no usable groups found\")\n\n    def waitFor(self, cond, timeout: float = 60):\n        deadline = time.time() + timeout\n        res = None\n        while time.time() < deadline:\n            try:\n                res = cond()\n                if res:\n                    return [True, res]\n            except Exception:\n                pass\n            time.sleep(0.03)\n        return [False, res]\n\n    def assertWaitFor(\n        self, cond, timeout: int = 60, message=None, get_debug_output=None\n    ):\n        status, res = self.waitFor(cond, timeout)\n        if status:\n            return res\n        if message is None:\n            message = \"%s was not met in %s seconds: %s\" % (cond, timeout, res)\n        if get_debug_output is not None:\n            message += \"\\ndebug output:\\n%s\\nend debug output\\n\" % get_debug_output()\n        self.fail(message)\n\n    def test_too_open_user_dir(self) -> None:\n        instance = self._new_instance({})\n        os.makedirs(instance.user_dir)\n        os.chmod(instance.user_dir, 0o777)\n        with self.assertRaises(pywatchman.SocketConnectError) as ctx:\n            instance.start()\n        self.assertEqual(ctx.exception.sockpath, instance.getSockPath().unix_domain)\n\n        wanted = \"the permissions on %s allow others to write to it\" % (\n            instance.user_dir\n        )\n        self.assertWaitFor(\n            lambda: wanted in instance.getCLILogContents(),\n            get_debug_output=lambda: instance.getCLILogContents(),\n        )\n\n    def test_invalid_sock_group(self) -> None:\n        # create a random group name\n        while True:\n            group_name = \"\".join(\n                random.choice(string.ascii_lowercase) for _ in range(8)\n            )\n            try:\n                grp.getgrnam(group_name)\n            except KeyError:\n                break\n\n        instance = self._new_instance({\"sock_group\": group_name})\n        with self.assertRaises(pywatchman.SocketConnectError) as ctx:\n            instance.start()\n        self.assertEqual(ctx.exception.sockpath, instance.getSockPath().unix_domain)\n        # This is the error we expect to find\n        wanted = \"group '%s' does not exist\" % group_name\n        # But if the site uses LDAP or YP/NIS or other similar technology for\n        # their password database then we might experience other infra flakeyness\n        # so we allow for the alternative error case to be present and consider\n        # it a pass.\n        we_love_ldap = \"getting gid for '%s' failed:\" % group_name\n        self.assertWaitFor(\n            lambda: (wanted in instance.getCLILogContents())\n            or (we_love_ldap in instance.getCLILogContents()),\n            get_debug_output=lambda: str(ctx.exception)\n            + \"\\n\"\n            + instance.getCLILogContents(),\n        )\n\n    def test_user_not_in_sock_group(self) -> None:\n        group = self._get_non_member_group()\n        instance = self._new_instance({\"sock_group\": group.gr_name})\n        with self.assertRaises(pywatchman.SocketConnectError) as ctx:\n            instance.start()\n        self.assertEqual(ctx.exception.sockpath, instance.getSockPath().unix_domain)\n        wanted = \"setting up group '%s' failed\" % group.gr_name\n        self.assertWaitFor(\n            lambda: wanted in instance.getCLILogContents(),\n            get_debug_output=lambda: instance.getCLILogContents(),\n        )\n\n    def test_default_sock_group(self) -> None:\n        # By default the socket group should be the effective gid of the process\n        gid = os.getegid()\n        instance = self._new_instance({})\n        instance.start()\n        instance.stop()\n\n        self.assertFileGID(instance.user_dir, gid)\n        self.assertFileGID(instance.sock_file, gid)\n\n    def test_custom_sock_group(self) -> None:\n        gid = self._get_custom_gid()\n        group = grp.getgrgid(gid)\n        instance = self._new_instance({\"sock_group\": group.gr_name})\n        instance.start()\n        instance.stop()\n\n        self.assertFileGID(instance.user_dir, gid)\n        self.assertFileGID(instance.sock_file, gid)\n\n    def test_user_previously_in_sock_group(self) -> None:\n        \"\"\"This tests the case where a user was previously in sock_group\n        (so Watchman created the directory with that group), but no longer is\n        (so the socket is created with a different group).\"\"\"\n        # Since it's hard to drop a group from a process without being\n        # superuser, fake it. Use a private testing-only config option to set\n        # up separate groups for the directory and the file.\n        gid = self._get_custom_gid()\n        group = grp.getgrgid(gid)\n        non_member_group = self._get_non_member_group()\n        # Need to wait for the server to come up here, can't use\n        # expect_success=False.\n        instance = self._new_instance(\n            {\"sock_group\": group.gr_name, \"__sock_file_group\": non_member_group.gr_name}\n        )\n        with self.assertRaises(pywatchman.SocketConnectError):\n            instance.start()\n\n        wanted = (\n            \"for socket '%s', gid %d doesn't match expected gid %d \"\n            \"(group name %s).\"\n            % (\n                instance.getSockPath().unix_domain,\n                gid,\n                non_member_group.gr_gid,\n                non_member_group.gr_name,\n            )\n        )\n        self.assertWaitFor(lambda: wanted in instance.getServerLogContents())\n\n    def test_invalid_sock_access(self) -> None:\n        instance = self._new_instance({\"sock_access\": \"bogus\"})\n        with self.assertRaises(pywatchman.SocketConnectError) as ctx:\n            instance.start()\n        self.assertEqual(ctx.exception.sockpath, instance.getSockPath().unix_domain)\n        wanted = \"Expected config value sock_access to be an object\"\n        self.assertWaitFor(\n            lambda: wanted in instance.getCLILogContents(),\n            get_debug_output=lambda: instance.getCLILogContents(),\n        )\n\n        instance = self._new_instance({\"sock_access\": {\"group\": \"oui\"}})\n        with self.assertRaises(pywatchman.SocketConnectError) as ctx:\n            instance.start()\n        self.assertEqual(ctx.exception.sockpath, instance.getSockPath().unix_domain)\n        wanted = \"Expected config value sock_access.group to be a boolean\"\n        self.assertWaitFor(\n            lambda: wanted in instance.getCLILogContents(),\n            get_debug_output=lambda: instance.getCLILogContents(),\n        )\n\n    def test_default_sock_access(self) -> None:\n        instance = self._new_instance({})\n        instance.start()\n        instance.stop()\n\n        self.assertFileMode(instance.user_dir, 0o700 | stat.S_ISGID)\n        self.assertFileMode(instance.sock_file, 0o600)\n\n    def test_custom_sock_access_group(self) -> None:\n        instance = self._new_instance({\"sock_access\": {\"group\": True}})\n        instance.start()\n        instance.stop()\n\n        self.assertFileMode(instance.user_dir, 0o750 | stat.S_ISGID)\n        self.assertFileMode(instance.sock_file, 0o660)\n\n    def test_custom_sock_access_others(self) -> None:\n        instance = self._new_instance({\"sock_access\": {\"group\": True, \"others\": True}})\n        instance.start()\n        instance.stop()\n\n        self.assertFileMode(instance.user_dir, 0o755 | stat.S_ISGID)\n        self.assertFileMode(instance.sock_file, 0o666)\n\n    def test_sock_access_upgrade(self) -> None:\n        instance = self._new_instance({\"sock_access\": {\"group\": True, \"others\": True}})\n        os.makedirs(instance.user_dir)\n        os.chmod(instance.user_dir, 0o700)\n        instance.start()\n        instance.stop()\n\n        self.assertFileMode(instance.user_dir, 0o755 | stat.S_ISGID)\n        self.assertFileMode(instance.sock_file, 0o666)\n\n    def test_sock_access_downgrade(self) -> None:\n        instance = self._new_instance({\"sock_access\": {\"group\": True}})\n        os.makedirs(instance.user_dir)\n        os.chmod(instance.user_dir, 0o755 | stat.S_ISGID)\n        instance.start()\n        instance.stop()\n\n        self.assertFileMode(instance.user_dir, 0o750 | stat.S_ISGID)\n        self.assertFileMode(instance.sock_file, 0o660)\n\n    def test_sock_access_group_change(self) -> None:\n        gid = self._get_custom_gid()\n        group = grp.getgrgid(gid)\n        instance = self._new_instance({\"sock_group\": group.gr_name})\n        os.makedirs(instance.user_dir)\n        # ensure that a different group is set\n        os.chown(instance.user_dir, -1, os.getegid())\n        instance.start()\n        instance.stop()\n\n        self.assertFileGID(instance.user_dir, gid)\n        self.assertFileGID(instance.sock_file, gid)\n\n    def test_sock_access_via_acl(self) -> None:\n        gid = self._get_custom_gid()\n        group = grp.getgrgid(gid)\n        instance = self._new_instance({\"secondary_sock_group\": group.gr_name})\n        instance.start()\n        instance.stop()\n\n        self.assertACL(instance.user_dir, group, f\"group:{group.gr_name}:r-x\")\n        self.assertACL(instance.sock_file, group, f\"group:{group.gr_name}:rw-\")\n\n    def test_sock_access_via_acl_user_not_in_sock_group(self) -> None:\n        group = self._get_non_member_group()\n        instance = self._new_instance({\"secondary_sock_group\": group.gr_name})\n        instance.start()\n        instance.stop()\n\n        self.assertACL(instance.user_dir, group, f\"group:{group.gr_name}:r-x\")\n        self.assertACL(instance.sock_file, group, f\"group:{group.gr_name}:rw-\")\n\n    def test_sock_symlink(self) -> None:\n        instance = self._new_instance({\"sock_access\": {\"group\": True}})\n        os.makedirs(instance.user_dir)\n        user_dir2 = instance.user_dir + \"2\"\n        os.rename(instance.user_dir, user_dir2)\n        os.chmod(user_dir2, 0o700)\n        os.symlink(user_dir2, instance.user_dir)\n\n        instance.start()\n\n        # Assert that starting watchman sets the permissions on the symlink\n        self.assertFileMode(instance.user_dir, 0o750 | stat.S_ISGID)\n        self.assertFileMode(instance.user_dir, 0o777, follow_symlink=False)\n\n        os.chmod(user_dir2, 0o700)\n\n        # Check that get-sockname sets file permissions to 0750\n        stdout = instance.commandViaCLI([\"get-sockname\"])[0].decode(\"utf-8\")\n        self.assertIn('\"sockname\":', stdout)\n        self.assertFileMode(instance.user_dir, 0o750 | stat.S_ISGID)\n        self.assertFileMode(instance.user_dir, 0o777, follow_symlink=False)\n\n        def run_get_sockname():\n            cmd = f\"seq 100 | xargs -Iz -P 100 {instance.watchmanBinary()} {' '.join(instance.get_state_args())} get-sockname --no-spawn\"\n            env = os.environ.copy()\n            return subprocess.Popen(\n                cmd,\n                env=env,\n                stdin=None,\n                stdout=subprocess.PIPE,\n                stderr=subprocess.PIPE,\n                shell=True,\n            )\n\n        results = run_get_sockname().communicate()\n        self.assertNotIn(\"chmod 0700\", results[1].decode(\"utf-8\"))\n        instance.stop()\n\n    def assertFileMode(self, f, mode, follow_symlink=True) -> None:\n        if follow_symlink:\n            st = os.stat(f)\n        else:\n            st = os.lstat(f)\n        self.assertEqual(stat.S_IMODE(st.st_mode), mode)\n\n    def assertFileGID(self, f, gid, follow_symlink=True) -> None:\n        if follow_symlink:\n            st = os.stat(f)\n        else:\n            st = os.lstat(f)\n        self.assertEqual(st.st_gid, gid)\n\n    def assertACL(self, f, group, expected_regex) -> None:\n        getfacl_result = subprocess.run(\n            [\"/usr/bin/getfacl\", f], capture_output=True, text=True, check=True\n        ).stdout\n\n        group_pattern = re.compile(expected_regex)\n        self.assertIsNotNone(\n            group_pattern.search(getfacl_result),\n            f\"Group '{group.gr_name}' does not have expected permissions {expected_regex}, acl result:\\n {getfacl_result}\",\n        )\n"
  },
  {
    "path": "watchman/integration/test_subscribe.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\nimport os.path\nimport unittest\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\nfrom watchman.integration.lib.path_utils import norm_relative_path\n\n\n@WatchmanTestCase.expand_matrix\nclass TestSubscribe(WatchmanTestCase.WatchmanTestCase):\n    def requiresPersistentSession(self) -> bool:\n        return True\n\n    def wlockExists(self, subdata, exists) -> bool:\n        norm_wlock = norm_relative_path(\".hg/wlock\")\n        for sub in subdata:\n            if \"files\" not in sub:\n                # Don't trip over cancellation notices left over from other\n                # tests that ran against this same instance\n                continue\n            for f in sub[\"files\"]:\n                if (\n                    f[\"exists\"] == exists\n                    and norm_relative_path(f[\"name\"]) == norm_wlock\n                ):\n                    return True\n        return False\n\n    def matchStateSubscription(self, subdata, mode):\n        for sub in subdata:\n            if mode in sub:\n                return sub\n        return None\n\n    def assertWaitForAssertedStates(self, root, states) -> None:\n        def sortStates(states):\n            \"\"\"Deterministically sort the states for comparison.\n            We sort by name and rely on the sort being stable as the\n            relative ordering of the potentially multiple queueued\n            entries per name is important to preserve\"\"\"\n            return sorted(states, key=lambda x: x[\"name\"])\n\n        states = sortStates(states)\n\n        def getStates():\n            res = self.watchmanCommand(\"debug-get-asserted-states\", root)\n            return sortStates(res[\"states\"])\n\n        self.assertWaitForEqual(states, getStates)\n\n    def test_state_enter_leave(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        result = self.watchmanCommand(\"debug-get-asserted-states\", root)\n        self.assertEqual([], result[\"states\"])\n\n        self.watchmanCommand(\"state-enter\", root, \"foo\")\n        self.watchmanCommand(\"state-enter\", root, \"bar\")\n        self.assertWaitForAssertedStates(\n            root,\n            [\n                {\"name\": \"bar\", \"state\": \"Asserted\"},\n                {\"name\": \"foo\", \"state\": \"Asserted\"},\n            ],\n        )\n\n        self.assertListEqual(\n            [\"bar\", \"foo\"],\n            sorted(\n                self.watchmanCommand(\n                    \"subscribe\",\n                    root,\n                    \"defer\",\n                    {\"fields\": [\"name\"], \"defer\": [\"foo\", \"bar\"]},\n                ).get(\"asserted-states\")\n            ),\n        )\n\n        self.watchmanCommand(\"state-leave\", root, \"foo\")\n        self.assertWaitForAssertedStates(root, [{\"name\": \"bar\", \"state\": \"Asserted\"}])\n\n        self.watchmanCommand(\"state-leave\", root, \"bar\")\n        self.assertWaitForAssertedStates(root, [])\n\n    def test_defer_state(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n\n        self.watchmanCommand(\n            \"subscribe\", root, \"defer\", {\"fields\": [\"name\"], \"defer\": [\"foo\"]}\n        )\n\n        self.touchRelative(root, \"a\")\n        self.assertNotEqual(None, self.waitForSubFileList(\"defer\", root, [\"a\"]))\n\n        def isStateEnterFoo(sub):\n            for item in sub:\n                if item.get(\"state-enter\", None) == \"foo\":\n                    return True\n            return False\n\n        self.watchmanCommand(\"state-enter\", root, \"foo\")\n        sub = self.waitForSub(\"defer\", root, accept=isStateEnterFoo)\n        self.assertTrue(isStateEnterFoo(sub))\n\n        self.touchRelative(root, \"in-foo\")\n        # We expect this to timeout because state=foo is asserted\n        with self.assertRaises(pywatchman.SocketTimeout):\n            self.waitForSub(\"defer\", root, timeout=1)\n\n        self.watchmanCommand(\"state-leave\", root, \"foo\")\n\n        self.assertNotEqual(\n            None,\n            self.waitForSub(\n                \"defer\",\n                root,\n                accept=lambda x: self.matchStateSubscription(x, \"state-leave\"),\n            ),\n        )\n\n        # and now we should observe the file change\n        self.assertNotEqual(None, self.waitForSub(\"defer\", root))\n\n        # and again, but this time passing metadata\n        self.watchmanCommand(\"state-enter\", root, {\"name\": \"foo\", \"metadata\": \"meta!\"})\n        begin = self.waitForSub(\"defer\", root)[0]\n        self.assertEqual(\"foo\", begin[\"state-enter\"])\n        self.assertEqual(\"meta!\", begin[\"metadata\"])\n\n        self.touchRelative(root, \"in-foo-2\")\n        # flush-subscriptions should let this come through immediately\n        flush = self.watchmanCommand(\n            \"flush-subscriptions\", root, {\"sync_timeout\": 1000}\n        )\n        del flush[\"version\"]\n        self.assertDictEqual(\n            {\"synced\": [\"defer\"], \"no_sync_needed\": [], \"dropped\": []}, flush\n        )\n        sub_data = self.getSubscription(\"defer\", root)\n        self.assertEqual(1, len(sub_data))\n        self.assertFileListsEqual([\"in-foo-2\"], sub_data[0][\"files\"])\n\n        self.touchRelative(root, \"in-foo-3\")\n        # We expect this to timeout because state=foo is asserted\n        with self.assertRaises(pywatchman.SocketTimeout):\n            self.waitForSub(\"defer\", root, timeout=1)\n\n        self.watchmanCommand(\n            \"state-leave\", root, {\"name\": \"foo\", \"metadata\": \"leavemeta\"}\n        )\n\n        end = self.waitForSub(\n            \"defer\",\n            root,\n            accept=lambda x: self.matchStateSubscription(x, \"state-leave\"),\n        )[0]\n        self.assertEqual(\"leavemeta\", end[\"metadata\"])\n\n        # and now we should observe the file change\n        self.assertNotEqual(None, self.waitForSubFileList(\"defer\", root, [\"in-foo-3\"]))\n\n    def test_drop_state(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n\n        self.watchmanCommand(\n            \"subscribe\", root, \"drop\", {\"fields\": [\"name\"], \"drop\": [\"foo\"]}\n        )\n        self.assertNotEqual(None, self.waitForSub(\"drop\", root=root))\n\n        self.touchRelative(root, \"a\")\n        subResult = self.waitForSubFileList(\"drop\", root, [\"a\"])\n        self.assertNotEqual(None, subResult)\n\n        self.watchmanCommand(\"state-enter\", root, \"foo\")\n        subResult = self.waitForSub(\"drop\", root)\n        print(subResult)\n        begin = subResult[0]\n        self.assertEqual(\"foo\", begin[\"state-enter\"])\n\n        self.touchRelative(root, \"in-foo\")\n        flush = self.watchmanCommand(\n            \"flush-subscriptions\", root, {\"sync_timeout\": 1000}\n        )\n        del flush[\"version\"]\n        self.assertDictEqual(\n            {\"synced\": [], \"no_sync_needed\": [], \"dropped\": [\"drop\"]}, flush\n        )\n\n        self.touchRelative(root, \"in-foo-2\")\n        # We expect this to timeout because state=foo is asserted\n        with self.assertRaises(pywatchman.SocketTimeout):\n            self.waitForSub(\"drop\", root, timeout=1)\n\n        self.watchmanCommand(\"state-leave\", root, \"foo\")\n\n        self.assertNotEqual(\n            None,\n            self.waitForSub(\n                \"drop\",\n                root,\n                accept=lambda x: self.matchStateSubscription(x, \"state-leave\"),\n            ),\n        )\n\n        # There should be no more subscription data to observe\n        # because we requested that it be dropped\n        with self.assertRaises(pywatchman.SocketTimeout):\n            self.waitForSub(\"drop\", root, timeout=1)\n\n        # let's make sure that we can observe new changes\n        self.touchRelative(root, \"out-foo\")\n\n        self.assertFileList(root, files=[\"a\", \"in-foo\", \"in-foo-2\", \"out-foo\"])\n        self.assertNotEqual(None, self.waitForSubFileList(\"drop\", root, [\"out-foo\"]))\n\n    def test_defer_vcs(self) -> None:\n        root = self.mkdtemp()\n        # fake an hg control dir\n        os.mkdir(os.path.join(root, \".hg\"))\n        # touch another file so that the initial subscription result comes\n        # through\n        self.touchRelative(root, \"foo\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\".hg\", \"foo\"])\n\n        self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"defer\",\n            {\n                \"expression\": [\"type\", \"f\"],\n                \"fields\": [\"name\", \"exists\"],\n                \"defer_vcs\": True,\n            },\n        )\n\n        dat = self.waitForSub(\"defer\", root)[0]\n        self.assertEqual(True, dat[\"is_fresh_instance\"])\n        self.assertEqual([{\"name\": \"foo\", \"exists\": True}], dat[\"files\"])\n\n        # Pretend that hg is update the working copy\n        self.touchRelative(root, \".hg\", \"wlock\")\n        # flush-subscriptions should force the update through\n        flush = self.watchmanCommand(\n            \"flush-subscriptions\", root, {\"sync_timeout\": 1000}\n        )\n        del flush[\"version\"]\n        self.assertDictEqual(\n            {\"synced\": [\"defer\"], \"no_sync_needed\": [], \"dropped\": []}, flush\n        )\n        sub_data = self.getSubscription(\"defer\", root)\n        self.assertEqual(1, len(sub_data))\n        self.assertFileListsEqual(\n            [\".hg/wlock\"], [d[\"name\"] for d in sub_data[0][\"files\"]]\n        )\n\n        self.touchRelative(root, \"in-foo\")\n        # We expect this to timeout because the wlock file exists\n        with self.assertRaises(pywatchman.SocketTimeout):\n            self.waitForSub(\n                \"defer\", root, accept=lambda x: self.wlockExists(x, True), timeout=2\n            )\n\n        # Remove the wlock and allow subscriptions to flow\n        os.unlink(os.path.join(root, \".hg\", \"wlock\"))\n\n        dat = self.waitForSub(\n            \"defer\", root, timeout=2, accept=lambda x: self.wlockExists(x, False)\n        )\n        self.assertNotEqual(None, dat)\n\n    def test_immediate_subscribe(self) -> None:\n        root = self.mkdtemp()\n        # fake an hg control dir\n        os.mkdir(os.path.join(root, \".hg\"))\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\".hg\"])\n\n        self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"nodefer\",\n            {\"fields\": [\"name\", \"exists\"], \"defer_vcs\": False},\n        )\n\n        dat = self.waitForSub(\"nodefer\", root)[0]\n        self.assertEqual(True, dat[\"is_fresh_instance\"])\n        self.assertEqual([{\"name\": \".hg\", \"exists\": True}], dat[\"files\"])\n\n        # Pretend that hg is update the working copy\n        self.touchRelative(root, \".hg\", \"wlock\")\n\n        dat = self.waitForSub(\n            \"nodefer\", root, accept=lambda x: self.wlockExists(x, True)\n        )\n        # We observed the changes even though wlock existed\n        self.assertNotEqual(None, dat)\n\n        os.unlink(os.path.join(root, \".hg\", \"wlock\"))\n\n        dat = self.waitForSub(\n            \"nodefer\", root, accept=lambda x: self.wlockExists(x, False)\n        )\n        self.assertNotEqual(None, dat)\n\n    def test_multi_cancel(self) -> None:\n        \"\"\"Test that for multiple subscriptions on the same socket, we receive\n        cancellation notices for all of them.\"\"\"\n        root = self.mkdtemp()\n        self.touchRelative(root, \"lemon\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\"lemon\"])\n\n        for n in range(32):\n            sub_name = \"sub%d\" % n\n            self.watchmanCommand(\"subscribe\", root, sub_name, {\"fields\": [\"name\"]})\n            # Drain the initial messages\n            dat = self.waitForSub(sub_name, root, remove=True)\n            self.assertEqual(len(dat), 1)\n            dat = dat[0]\n            self.assertFileListsEqual(dat[\"files\"], [\"lemon\"])\n\n        self.watchmanCommand(\"watch-del\", root)\n\n        for n in range(32):\n            # If the cancellation notice doesn't come through this will timeout.\n            dat = self.waitForSub(\"sub%d\" % n, root)\n            self.assertEqual(len(dat), 1)\n            dat = dat[0]\n            self.assertTrue(dat[\"canceled\"])\n            self.assertTrue(dat[\"unilateral\"])\n\n    def test_subscribe(self) -> None:\n        root = self.mkdtemp()\n        a_dir = os.path.join(root, \"a\")\n        os.mkdir(a_dir)\n        self.touchRelative(a_dir, \"lemon\")\n        self.touchRelative(root, \"b\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\"a\", \"a/lemon\", \"b\"])\n\n        self.watchmanCommand(\"subscribe\", root, \"myname\", {\"fields\": [\"name\"]})\n\n        self.watchmanCommand(\n            \"subscribe\", root, \"relative\", {\"fields\": [\"name\"], \"relative_root\": \"a\"}\n        )\n\n        # prove initial results come through\n        dat = self.waitForSub(\"myname\", root=root)[0]\n        self.assertEqual(True, dat[\"is_fresh_instance\"])\n        self.assertFileListsEqual(dat[\"files\"], [\"a\", \"a/lemon\", \"b\"])\n\n        # and that relative_root adapts the path name\n        dat = self.waitForSub(\"relative\", root=root)[0]\n        self.assertEqual(True, dat[\"is_fresh_instance\"])\n        self.assertFileListsEqual(dat[\"files\"], [\"lemon\"])\n\n        # check that deletes show up in the subscription results\n        os.unlink(os.path.join(root, \"a\", \"lemon\"))\n        dat = self.waitForSub(\n            \"myname\",\n            root=root,\n            accept=lambda x: self.findSubscriptionContainingFile(x, \"a/lemon\"),\n        )\n        self.assertNotEqual(None, dat)\n        self.assertEqual(False, dat[0][\"is_fresh_instance\"])\n\n        dat = self.waitForSub(\n            \"relative\",\n            root=root,\n            accept=lambda x: self.findSubscriptionContainingFile(x, \"lemon\"),\n        )\n        self.assertNotEqual(None, dat)\n        self.assertEqual(False, dat[0][\"is_fresh_instance\"])\n\n        # Trigger a recrawl and ensure that the subscription isn't lost\n        self.watchmanCommand(\"debug-recrawl\", root)\n\n        def matchesRecrawledDir(subdata):\n            for sub in subdata:\n                if \"warning\" in sub:\n                    return True\n            return False\n\n        # ensure that there is at least one change to broadcast\n        self.touchRelative(root, \"a\")\n        dat = self.waitForSub(\"myname\", root=root, accept=matchesRecrawledDir)\n        self.assertNotEqual(None, dat)\n\n        # Ensure that we observed the recrawl warning\n        warn = None\n        for item in dat:\n            if \"warning\" in item:\n                warn = item[\"warning\"]\n                break\n        self.assertRegex(warn, r\"Recrawled this watch\")\n\n    # TODO: this test is very flaky on Windows\n    @unittest.skipIf(os.name == \"nt\", \"win\")\n    def test_flush_subscriptions(self) -> None:\n        root = self.mkdtemp()\n\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"win32_batch_latency_ms\": 0}))\n\n        a_dir = os.path.join(root, \"a\")\n\n        os.mkdir(a_dir)\n        self.touchRelative(a_dir, \"lemon.txt\")\n        self.touchRelative(a_dir, \"orange.dat\")\n        self.touchRelative(root, \"b\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(\n            root, files=[\".watchmanconfig\", \"a\", \"a/lemon.txt\", \"a/orange.dat\", \"b\"]\n        )\n\n        self.watchmanCommand(\n            \"subscribe\", root, \"sub1\", {\"fields\": [\"name\"], \"expression\": [\"type\", \"f\"]}\n        )\n        self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"sub2\",\n            {\n                \"fields\": [\"name\"],\n                \"expression\": [\"allof\", [\"type\", \"f\"], [\"suffix\", \"txt\"]],\n            },\n        )\n        self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"sub3\",\n            {\n                \"fields\": [\"name\"],\n                \"expression\": [\"allof\", [\"type\", \"f\"], [\"suffix\", \"dat\"]],\n            },\n        )\n\n        root2 = self.mkdtemp()\n        self.touchRelative(root2, \"banana\")\n        self.watchmanCommand(\"watch\", root2)\n        self.assertFileList(root2, files=[\"banana\"])\n        ret = self.watchmanCommand(\n            \"subscribe\", root2, \"sub-other\", {\"fields\": [\"name\"]}\n        )\n\n        # discard the initial result PDUs\n        self.waitForSub(\"sub1\", root=root)\n        self.waitForSub(\"sub2\", root=root)\n        self.waitForSub(\"sub3\", root=root)\n\n        # pause subscriptions so that the result of flush-subscriptions is\n        # deterministic\n        debug_ret = self.watchmanCommand(\n            \"debug-set-subscriptions-paused\", {\"sub1\": True, \"sub2\": True, \"sub3\": True}\n        )\n        self.assertDictEqual(\n            {\n                \"sub1\": {\"old\": False, \"new\": True},\n                \"sub2\": {\"old\": False, \"new\": True},\n                \"sub3\": {\"old\": False, \"new\": True},\n            },\n            debug_ret[\"paused\"],\n        )\n\n        self.touchRelative(root, \"c\")\n        self.touchRelative(a_dir, \"d.txt\")\n        self.touchRelative(a_dir, \"e.dat\")\n\n        # test out a few broken flush-subscriptions\n        broken_args = [\n            ((), \"wrong number of arguments to 'flush-subscriptions'\"),\n            ((root,), \"wrong number of arguments to 'flush-subscriptions'\"),\n            (\n                (root, {\"subscriptions\": [\"sub1\"]}),\n                \"key 'sync_timeout' is not present in this json object\",\n            ),\n            (\n                (root, {\"subscriptions\": \"wat\", \"sync_timeout\": 2000}),\n                \"expected 'subscriptions' to be an array of subscription names\",\n            ),\n            (\n                (root, {\"subscriptions\": [\"sub1\", False], \"sync_timeout\": 2000}),\n                \"expected 'subscriptions' to be an array of subscription names\",\n            ),\n            (\n                (root, {\"subscriptions\": [\"sub1\", \"notsub\"], \"sync_timeout\": 2000}),\n                \"this client does not have a subscription named 'notsub'\",\n            ),\n            (\n                (root, {\"subscriptions\": [\"sub1\", \"sub-other\"], \"sync_timeout\": 2000}),\n                \"subscription 'sub-other' is on root\",\n            ),\n        ]\n\n        for args, err_msg in broken_args:\n            with self.assertRaises(pywatchman.WatchmanError) as ctx:\n                self.watchmanCommand(\"flush-subscriptions\", *args)\n            self.assertIn(err_msg, str(ctx.exception))\n\n        ret = self.watchmanCommand(\n            \"flush-subscriptions\",\n            root,\n            {\"sync_timeout\": 1000, \"subscriptions\": [\"sub1\", \"sub2\"]},\n        )\n        version = ret[\"version\"]\n        self.assertEqual([], ret[\"no_sync_needed\"])\n        self.assertCountEqual([\"sub1\", \"sub2\"], ret[\"synced\"])\n\n        # Do not wait for subscription results -- instead, make sure they've\n        # shown up immediately.\n        sub1_data = self.getSubscription(\"sub1\", root)\n        sub2_data = self.getSubscription(\"sub2\", root)\n\n        for sub_name, sub_data in [(\"sub1\", sub1_data), (\"sub2\", sub2_data)]:\n            self.assertEqual(1, len(sub_data))\n            data = sub_data[0].copy()\n            # we'll verify these below\n            del data[\"files\"]\n            del data[\"since\"]\n            # this is subject to change so we can't verify it\n            del data[\"clock\"]\n\n            self.assertDictEqual(\n                {\n                    \"version\": version,\n                    \"is_fresh_instance\": False,\n                    \"subscription\": sub_name,\n                    \"root\": root,\n                    \"unilateral\": True,\n                },\n                data,\n            )\n\n        self.assertFileListsEqual([\"a/d.txt\", \"a/e.dat\", \"c\"], sub1_data[0][\"files\"])\n        self.assertFileListsEqual([\"a/d.txt\"], sub2_data[0][\"files\"])\n\n        # touch another file, make sure the updates come through again\n        self.touchRelative(a_dir, \"f.dat\")\n        ret = self.watchmanCommand(\n            \"flush-subscriptions\",\n            root,\n            # default for subscriptions is to sync all subscriptions matching\n            # root (so sub1, sub2 and sub3, but not sub-other)\n            {\"sync_timeout\": 1000},\n        )\n        self.assertCountEqual([\"sub2\"], ret[\"no_sync_needed\"])\n        self.assertCountEqual([\"sub1\", \"sub3\"], ret[\"synced\"])\n\n        # again, don't wait for the subscriptions\n        sub1_data2 = self.getSubscription(\"sub1\", root)\n        sub2_data2 = self.getSubscription(\"sub2\", root)\n        sub3_data2 = self.getSubscription(\"sub3\", root)\n\n        self.assertEqual(1, len(sub1_data2))\n        # no updates to sub2, so we expect nothing\n        self.assertIs(None, sub2_data2)\n        self.assertEqual(1, len(sub3_data2))\n\n        self.assertEqual(\n            sub1_data[0][\"clock\"],\n            sub1_data2[0][\"since\"],\n            'for sub1, previous \"clock\" should be current \"since\"',\n        )\n        self.assertFileListsEqual([\"a/f.dat\"], sub1_data2[0][\"files\"])\n        self.assertFileListsEqual([\"a/e.dat\", \"a/f.dat\"], sub3_data2[0][\"files\"])\n\n        # now resume the subscriptions and make sure future updates (and only\n        # future updates) come through\n        self.watchmanCommand(\n            \"debug-set-subscriptions-paused\",\n            {\"sub1\": False, \"sub2\": False, \"sub3\": False},\n        )\n\n        self.touchRelative(root, \"newfile.txt\")\n        new_sub1 = self.waitForSub(\"sub1\", root=root)[0]\n        new_sub2 = self.waitForSub(\"sub2\", root=root)[0]\n\n        self.assertEqual(sub1_data2[0][\"clock\"], new_sub1[\"since\"])\n        # for sub2 the clock is different because we've actually forced an\n        # evaluation in between in the second flush-subscriptions call, so we\n        # don't have a reference point\n        self.assertFileListsEqual([\"newfile.txt\"], new_sub1[\"files\"])\n        self.assertFileListsEqual([\"newfile.txt\"], new_sub2[\"files\"])\n\n    def test_unsub_deadlock(self) -> None:\n        \"\"\"I saw a stack trace of a lock assertion that seemed to originate\n        in the unsubByName() method.  It looks possible for this to call\n        itself recursively and this test exercises that code path.  It\n        also exercises a similar deadlock where multiple subscriptions from\n        multiple connections are torn down around the same time.\"\"\"\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n        clock = self.watchmanCommand(\"clock\", root)[\"clock\"]\n        for _ in range(0, 100):\n            clients = []\n            for i in range(0, 20):\n                client = self.getClient(no_cache=True)\n                client.query(\n                    \"subscribe\", root, \"sub%s\" % i, {\"fields\": [\"name\"], \"since\": clock}\n                )\n                self.touchRelative(root, \"a\")\n                clients.append(client)\n            for client in clients:\n                client.close()\n\n    def test_subscription_cleanup(self) -> None:\n        \"\"\"Verify that subscriptions get cleaned up from internal state on\n        unsubscribes and socket disconnects. This test failing usually\n        indicates a reference cycle keeping the subscriber alive.\"\"\"\n        root = self.mkdtemp()\n        a_dir = os.path.join(root, \"a\")\n\n        os.mkdir(a_dir)\n        self.touchRelative(a_dir, \"lemon.txt\")\n        self.touchRelative(a_dir, \"orange.dat\")\n        self.touchRelative(root, \"b\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\"a\", \"a/lemon.txt\", \"a/orange.dat\", \"b\"])\n\n        self.watchmanCommand(\n            \"subscribe\", root, \"sub1\", {\"fields\": [\"name\"], \"expression\": [\"type\", \"f\"]}\n        )\n\n        self.touchRelative(a_dir, \"wat.txt\")\n\n        self.watchmanCommand(\n            \"subscribe\", root, \"sub2\", {\"fields\": [\"name\"], \"expression\": [\"type\", \"f\"]}\n        )\n\n        out = self.watchmanCommand(\"debug-get-subscriptions\", root)\n        subs = {sub[\"info\"][\"name\"] for sub in out[\"subscribers\"]}\n        self.assertCountEqual({\"sub1\", \"sub2\"}, subs)\n\n        # this should remove sub1 from the map\n        self.watchmanCommand(\"unsubscribe\", root, \"sub1\")\n        out = self.watchmanCommand(\"debug-get-subscriptions\", root)\n        subs = {sub[\"info\"][\"name\"] for sub in out[\"subscribers\"]}\n        self.assertCountEqual({\"sub2\"}, subs)\n\n        # flush sub2 so that there's no reason anything else would be keeping\n        # it around\n        self.watchmanCommand(\"flush-subscriptions\", root, {\"sync_timeout\": 1000})\n        # disconnect from the socket -- the next command will reconnect the\n        # socket, but sub2 should have disappeared\n        # pyre-fixme[16]: `TestSubscribe` has no attribute `client`.\n        self.client.close()\n\n        # It might take a while for watchman to realize its connection has been\n        # reset, so check repeatedly.\n        def checkSubscribers():\n            out = self.watchmanCommand(\"debug-get-subscriptions\", root)\n            return out[\"subscribers\"]\n\n        self.assertWaitForEqual([], checkSubscribers)\n\n    # TODO: Assimilate this test into test_subscribe when Watchman gets\n    # unicode support.\n    # TODO: Correctly test subscribe with unicode on Windows.\n    @unittest.skipIf(os.name == \"nt\", \"win\")\n    @WatchmanTestCase.skip_for(codecs=[\"json\"])\n    def test_subscribe_unicode(self) -> None:\n        unicode_filename = \"\\u263a\"\n\n        root = self.mkdtemp()\n        a_dir = os.path.join(root, \"a\")\n        os.mkdir(a_dir)\n        self.touchRelative(a_dir, \"lemon\")\n        self.touchRelative(root, \"b\")\n        self.touchRelative(root, unicode_filename)\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\"a\", \"a/lemon\", \"b\", unicode_filename])\n\n        self.watchmanCommand(\"subscribe\", root, \"myname\", {\"fields\": [\"name\"]})\n\n        self.watchmanCommand(\n            \"subscribe\", root, \"relative\", {\"fields\": [\"name\"], \"relative_root\": \"a\"}\n        )\n\n        # prove initial results come through\n        dat = self.waitForSub(\"myname\", root=root)[0]\n        self.assertEqual(True, dat[\"is_fresh_instance\"])\n        self.assertFileListsEqual(dat[\"files\"], [\"a\", \"a/lemon\", \"b\", unicode_filename])\n\n        os.unlink(os.path.join(root, \"a\", \"lemon\"))\n\n        # Trigger a recrawl and ensure that the subscription isn't lost\n        self.watchmanCommand(\"debug-recrawl\", root)\n\n        def matchesRecrawledDir(subdata):\n            for sub in subdata:\n                if \"warning\" in sub:\n                    return True\n            return False\n\n        # ensure that there is at least one change to broadcast\n        self.touchRelative(root, \"a\")\n        dat = self.waitForSub(\"myname\", root=root, accept=matchesRecrawledDir)\n        self.assertNotEqual(None, dat)\n\n        # Ensure that we observed the recrawl warning\n        warn = None\n        for item in dat:\n            if \"warning\" in item:\n                warn = item[\"warning\"]\n                break\n        self.assertRegex(warn, r\"Recrawled this watch\")\n\n    def test_unique_name_error(self) -> None:\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"enforce_unique_subscription_names\": True}))\n        self.touchRelative(root, \"lemon\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\"lemon\", \".watchmanconfig\"])\n\n        # Create a subscription\n        self.watchmanCommand(\"subscribe\", root, \"my_sub\", {\"fields\": [\"name\"]})\n        # Drain the initial messages\n        dat = self.waitForSub(\"my_sub\", root, remove=True)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"lemon\", \".watchmanconfig\"])\n\n        # Try to create another subscription with the same name\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\n                \"subscribe\",\n                root,\n                \"my_sub\",\n                {\"fields\": [\"name\"], \"expression\": [\"false\"]},\n            )\n        self.assertIn(\"subscription name 'my_sub' is not unique\", str(ctx.exception))\n\n        # Ensure the initial subscription is in force\n        self.touchRelative(root, \"banana\")\n        dat = self.waitForSub(\"my_sub\", root, remove=True)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"banana\"])\n\n    def test_resubscribe_same_name_no_error(self) -> None:\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"enforce_unique_subscription_names\": True}))\n        self.touchRelative(root, \"lemon\")\n        self.touchRelative(root, \"banana\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\"lemon\", \"banana\", \".watchmanconfig\"])\n\n        # Create a subscription\n        self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"my_sub\",\n            {\"fields\": [\"name\"], \"expression\": [\"name\", \"lemon\"]},\n        )\n        # Drain the initial messages\n        dat = self.waitForSub(\"my_sub\", root, remove=True)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"lemon\"])\n        # Unsubscribe\n        self.watchmanCommand(\"unsubscribe\", root, \"my_sub\")\n\n        # Create a new subscription with the same name\n        self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"my_sub\",\n            {\"fields\": [\"name\"], \"expression\": [\"name\", \"banana\"]},\n        )\n        # Ensure the later subscription is in force\n        dat = self.waitForSub(\"my_sub\", root, remove=True)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"banana\"])\n\n    def test_resubscribe_same_name_no_warning(self) -> None:\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"enforce_unique_subscription_names\": False}))\n        self.touchRelative(root, \"lemon\")\n        self.touchRelative(root, \"banana\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\"lemon\", \"banana\", \".watchmanconfig\"])\n\n        # Create a subscription\n        self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"my_sub\",\n            {\"fields\": [\"name\"], \"expression\": [\"name\", \"lemon\"]},\n        )\n        # Drain the initial messages\n        dat = self.waitForSub(\"my_sub\", root, remove=True)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"lemon\"])\n        # Unsubscribe\n        self.watchmanCommand(\"unsubscribe\", root, \"my_sub\")\n\n        # Create a new subscription with the same name\n        dat = self.watchmanCommand(\n            \"subscribe\",\n            root,\n            \"my_sub\",\n            {\"fields\": [\"name\"], \"expression\": [\"name\", \"banana\"]},\n        )\n        # Make sure we don't get a spurious warning here\n        self.assertNotIn(\"warning\", dat)\n\n        # Ensure the later subscription is in force\n        dat = self.waitForSub(\"my_sub\", root, remove=True)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"banana\"])\n\n    def test_multi_client_same_name(self) -> None:\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"enforce_unique_subscription_names\": True}))\n        self.touchRelative(root, \"lemon\")\n        self.touchRelative(root, \"banana\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\"lemon\", \"banana\", \".watchmanconfig\"])\n\n        client1 = self.getClient(no_cache=True)\n        client2 = self.getClient(no_cache=True)\n\n        # Create a subscription\n        client1.query(\n            \"subscribe\",\n            root,\n            \"my_sub\",\n            {\"fields\": [\"name\"], \"expression\": [\"name\", \"lemon\"]},\n        )\n        dat = self.waitForSub(\"my_sub\", root, remove=True, client=client1)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"lemon\"])\n\n        # Create a new subscription with the same name from a different client,\n        # with a different expression\n        client2.query(\n            \"subscribe\",\n            root,\n            \"my_sub\",\n            {\"fields\": [\"name\"], \"expression\": [\"name\", \"banana\"]},\n        )\n        dat = self.waitForSub(\"my_sub\", root, remove=True, client=client2)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"banana\"])\n\n        # Trigger events on both and ensure they are routed correctly.\n        self.touchRelative(root, \"lemon\")\n        self.touchRelative(root, \"banana\")\n\n        dat = self.waitForSub(\"my_sub\", root, remove=True, client=client1)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"lemon\"])\n\n        dat = self.waitForSub(\"my_sub\", root, remove=True, client=client2)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"banana\"])\n\n        client1.query(\"unsubscribe\", root, \"my_sub\")\n        client1.close()\n\n        # Ensure unsubscribing and closing one client hasn't affected the other\n        self.touchRelative(root, \"lemon\")\n        self.touchRelative(root, \"banana\")\n\n        dat = self.waitForSub(\"my_sub\", root, remove=True, client=client2)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"banana\"])\n\n        client2.close()\n\n    def test_unique_name_warning(self) -> None:\n        root = self.mkdtemp()\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"enforce_unique_subscription_names\": False}))\n        self.touchRelative(root, \"lemon\")\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, files=[\"lemon\", \".watchmanconfig\"])\n\n        # Create a subscription\n        self.watchmanCommand(\"subscribe\", root, \"my_sub\", {\"fields\": [\"name\"]})\n        # Drain the initial messages\n        dat = self.waitForSub(\"my_sub\", root, remove=True)\n        self.assertEqual(len(dat), 1)\n        dat = dat[0]\n        self.assertFileListsEqual(dat[\"files\"], [\"lemon\", \".watchmanconfig\"])\n\n        # Create another subscription with the same name\n        dat = self.watchmanCommand(\"subscribe\", root, \"my_sub\", {\"fields\": [\"name\"]})\n        self.assertEqual(dat[\"warning\"], \"subscription name 'my_sub' is not unique\")\n\n    def findSubscriptionContainingFile(self, subdata, filename):\n        filename = norm_relative_path(filename)\n        for dat in subdata:\n            if \"files\" in dat and filename in self.normFileList(dat[\"files\"]):\n                return dat\n        return None\n\n    def normFileList(self, files):\n        return sorted(map(norm_relative_path, files))\n"
  },
  {
    "path": "watchman/integration/test_suffix.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestMatch(WatchmanTestCase.WatchmanTestCase):\n    def test_match_suffix(self) -> None:\n        root = self.mkdtemp()\n        self.touchRelative(root, \"foo.c\")\n        self.touchRelative(root, \"README.pdf\")\n        os.mkdir(os.path.join(root, \"html\"))\n        self.touchRelative(root, \"html\", \"frames.html\")\n        self.touchRelative(root, \"html\", \"mov.mp4\")\n        self.touchRelative(root, \"html\", \"ignore.xxx\")\n        os.mkdir(os.path.join(root, \"win\"))\n        self.touchRelative(root, \"win\", \"ms.dll\")\n        self.touchRelative(root, \"win\", \"ignore.txt\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileList(\n            root,\n            [\n                \"README.pdf\",\n                \"foo.c\",\n                \"html\",\n                \"win\",\n                \"win/ms.dll\",\n                \"win/ignore.txt\",\n                \"html/frames.html\",\n                \"html/mov.mp4\",\n                \"html/ignore.xxx\",\n            ],\n        )\n        # Simple anyof suffix query that watchman can convert to suffix array.\n        # We will compare results against a user constructed suffix array query.\n        res1 = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"anyof\",\n                    [\"suffix\", \"pdf\"],\n                    [\"suffix\", \"nomatch\"],\n                    [\"suffix\", \"dll\"],\n                ],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res1[\"files\"], [\"README.pdf\", \"win/ms.dll\"])\n        # User constructed anyof query with suffix array. This should give\n        # same results as above query with list of suffixes.\n        res2 = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"anyof\", [\"suffix\", [\"pdf\", \"nomatch\", \"dll\"]]],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res1[\"files\"], res2[\"files\"])\n        # Another anyof suffix query that watchman can convert to suffix array.\n        # This will check boundary (empty result set)\n        res1 = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"anyof\", [\"suffix\", \"nomatch\"], [\"suffix\", \"none\"]],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res1[\"files\"], [])\n        # User constructed anyof query with suffix array. This should give\n        # same results as above query with suffix array.\n        res2 = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\"anyof\", [\"suffix\", [\"nomatch\", \"none\"]]],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res1[\"files\"], res2[\"files\"])\n        # Compound anyof suffix query that watchman can convert to suffix array.\n        # We will compare results against suffix array query.\n        res1 = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"anyof\",\n                    [\n                        \"allof\",\n                        [\"dirname\", \"html\"],\n                        [\"type\", \"f\"],\n                        [\n                            \"anyof\",\n                            [\"suffix\", \"pdf\"],\n                            [\"suffix\", \"html\"],\n                            [\"suffix\", \"nomatch\"],\n                        ],\n                    ],\n                    [\"name\", \".never-match-this\", \"wholename\"],\n                ],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res1[\"files\"], [\"html/frames.html\"])\n        # User constructed anyof suffix query. This should give same results\n        # as above query with suffix array.\n        res2 = self.watchmanCommand(\n            \"query\",\n            root,\n            {\n                \"expression\": [\n                    \"anyof\",\n                    [\n                        \"allof\",\n                        [\"dirname\", \"html\"],\n                        [\"type\", \"f\"],\n                        [\"anyof\", [\"suffix\", [\"pdf\", \"html\", \"nomatch\"]]],\n                    ],\n                    [\"name\", \".never-match-this\", \"wholename\"],\n                ],\n                \"fields\": [\"name\"],\n            },\n        )\n        self.assertFileListsEqual(res1[\"files\"], res2[\"files\"])\n\n    def test_suffix_expr(self) -> None:\n        root = self.mkdtemp()\n\n        self.touchRelative(root, \"foo.c\")\n        os.mkdir(os.path.join(root, \"subdir\"))\n        self.touchRelative(root, \"subdir\", \"bar.txt\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"suffix\", \"c\"], \"fields\": [\"name\"]}\n            )[\"files\"],\n            [\"foo.c\"],\n        )\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"expression\": \"suffix\"})\n\n        self.assertRegex(str(ctx.exception), \"Expected array for 'suffix' term\")\n"
  },
  {
    "path": "watchman/integration/test_suffix_generator.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestSuffixGenerator(WatchmanTestCase.WatchmanTestCase):\n    def test_suffix_generator(self) -> None:\n        root = self.mkdtemp()\n\n        # Suffix queries are defined as being case insensitive.\n        # Use an uppercase suffix to verify that our lowercase\n        # suffixes in the pattern are matching correctly.\n        self.touchRelative(root, \"foo.C\")\n        os.mkdir(os.path.join(root, \"subdir\"))\n        self.touchRelative(root, \"subdir\", \"bar.txt\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\"query\", root, {\"suffix\": \"c\", \"fields\": [\"name\"]})[\n                \"files\"\n            ],\n            [\"foo.C\"],\n        )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\", root, {\"suffix\": [\"c\", \"txt\"], \"fields\": [\"name\"]}\n            )[\"files\"],\n            [\"foo.C\", \"subdir/bar.txt\"],\n        )\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\",\n                root,\n                {\"suffix\": [\"c\", \"txt\"], \"relative_root\": \"subdir\", \"fields\": [\"name\"]},\n            )[\"files\"],\n            [\"bar.txt\"],\n        )\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"suffix\": {\"a\": \"b\"}})\n\n        self.assertRegex(\n            str(ctx.exception), \"'suffix' must be a string or an array of strings\"\n        )\n\n    def test_suffix_generator_empty(self) -> None:\n        \"\"\"Specifying no input suffixes should return no results.\"\"\"\n        root = self.mkdtemp()\n\n        os.mkdir(os.path.join(root, \"mydir\"))\n        os.mkdir(os.path.join(root, \"mydir.dir\"))\n        self.touchRelative(root, \"myfile\")\n        self.touchRelative(root, \"myfile.txt\")\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\"query\", root, {\"fields\": [\"name\"], \"suffix\": []})[\n                \"files\"\n            ],\n            [],\n        )\n"
  },
  {
    "path": "watchman/integration/test_trigger.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\nimport os.path\nimport re\nimport sys\n\nfrom watchman.integration.lib import HELPER_ROOT, WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestTrigger(WatchmanTestCase.WatchmanTestCase):\n    def requiresPersistentSession(self) -> bool:\n        # cli transport has no log subscriptions\n        return True\n\n    def hasTriggerInLogs(self, root, triggerName) -> bool:\n        pat = \"%s.*posix_spawnp: %s\" % (re.escape(root), triggerName)\n        r = re.compile(pat, re.I)\n        for line in self.getServerLogContents():\n            line = line.replace(\"\\\\\", \"/\")\n            if r.search(line):\n                return True\n        return False\n\n    # https://github.com/facebook/watchman/issues/141\n    def test_triggerIssue141(self) -> None:\n        root = self.mkdtemp()\n        self.touchRelative(root, \"foo.js\")\n\n        self.watchmanCommand(\"watch\", root)\n        self.assertFileList(root, [\"foo.js\"])\n\n        touch = os.path.join(HELPER_ROOT, \"touch.py\")\n        logs = self.mkdtemp()\n        first_log = os.path.join(logs, \"first\")\n        second_log = os.path.join(logs, \"second\")\n\n        res = self.watchmanCommand(\n            \"trigger\", root, \"first\", \"*.js\", \"--\", sys.executable, touch, first_log\n        )\n        self.assertEqual(res[\"triggerid\"], \"first\")\n\n        res = self.watchmanCommand(\n            \"trigger\", root, \"second\", \"*.js\", \"--\", sys.executable, touch, second_log\n        )\n        self.assertEqual(res[\"triggerid\"], \"second\")\n\n        self.assertWaitFor(\n            lambda: os.path.exists(first_log) and os.path.exists(second_log),\n            message=\"both triggers fire at start\",\n        )\n\n        # touch the file, should run both triggers\n        self.touchRelative(root, \"foo.js\")\n\n        self.assertWaitFor(\n            lambda: self.hasTriggerInLogs(root, \"first\")\n            and self.hasTriggerInLogs(root, \"second\"),\n            message=\"both triggers fired on update\",\n        )\n\n    def validate_trigger_output(self, root, files, context) -> None:\n        trigger_log = os.path.join(root, \"trigger.log\")\n        trigger_json = os.path.join(root, \"trigger.json\")\n\n        def files_are_listed():\n            if not os.path.exists(trigger_log):\n                return False\n            with open(trigger_log) as f:\n                n = 0\n                for line in f:\n                    for filename in files:\n                        if filename in line:\n                            n = n + 1\n                return n == len(files)\n\n        self.assertWaitFor(\n            lambda: files_are_listed(),\n            message=\"%s should contain %s\" % (trigger_log, json.dumps(files)),\n        )\n\n        def files_are_listed_json():\n            if not os.path.exists(trigger_json):\n                return False\n            expect = {}\n            for f in files:\n                expect[f] = True\n            with open(trigger_json) as f:\n                result = {}\n                for line in f:\n                    data = json.loads(line)\n                    for item in data:\n                        result[item[\"name\"]] = item[\"exists\"]\n\n                return result == expect\n\n        self.assertWaitFor(\n            lambda: files_are_listed_json(),\n            message=\"%s should contain %s\" % (trigger_json, json.dumps(files)),\n        )\n\n    def test_legacyTrigger(self) -> None:\n        root = self.mkdtemp()\n\n        self.touchRelative(root, \"foo.c\")\n        self.touchRelative(root, \"b ar.c\")\n        self.touchRelative(root, \"bar.txt\")\n\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            json.dump({\"settle\": 200}, f)\n\n        watch = self.watchmanCommand(\"watch\", root)\n\n        self.assertFileList(root, [\".watchmanconfig\", \"b ar.c\", \"bar.txt\", \"foo.c\"])\n\n        res = self.watchmanCommand(\n            \"trigger\",\n            root,\n            \"test\",\n            \"*.c\",\n            \"--\",\n            sys.executable,\n            os.path.join(HELPER_ROOT, \"trig.py\"),\n            os.path.join(root, \"trigger.log\"),\n        )\n        self.assertEqual(\"created\", res[\"disposition\"])\n\n        res = self.watchmanCommand(\n            \"trigger\",\n            root,\n            \"other\",\n            \"*.c\",\n            \"--\",\n            sys.executable,\n            os.path.join(HELPER_ROOT, \"trigjson.py\"),\n            os.path.join(root, \"trigger.json\"),\n        )\n        self.assertEqual(\"created\", res[\"disposition\"])\n\n        # check that the legacy parser produced the right trigger def\n        expect = [\n            {\n                \"name\": \"other\",\n                \"append_files\": True,\n                \"command\": [\n                    sys.executable,\n                    os.path.join(HELPER_ROOT, \"trigjson.py\"),\n                    os.path.join(root, \"trigger.json\"),\n                ],\n                \"expression\": [\"anyof\", [\"match\", \"*.c\", \"wholename\"]],\n                \"stdin\": [\"name\", \"exists\", \"new\", \"size\", \"mode\"],\n            },\n            {\n                \"name\": \"test\",\n                \"append_files\": True,\n                \"command\": [\n                    sys.executable,\n                    os.path.join(HELPER_ROOT, \"trig.py\"),\n                    os.path.join(root, \"trigger.log\"),\n                ],\n                \"expression\": [\"anyof\", [\"match\", \"*.c\", \"wholename\"]],\n                \"stdin\": [\"name\", \"exists\", \"new\", \"size\", \"mode\"],\n            },\n        ]\n\n        triggers = self.watchmanCommand(\"trigger-list\", root).get(\"triggers\")\n        self.assertCountEqual(triggers, expect)\n\n        self.suspendWatchman()\n        self.touchRelative(root, \"foo.c\")\n        self.touchRelative(root, \"b ar.c\")\n        self.resumeWatchman()\n\n        self.assertWaitFor(\n            lambda: self.hasTriggerInLogs(root, \"test\")\n            and self.hasTriggerInLogs(root, \"other\"),\n            message=\"both triggers fired on update\",\n        )\n\n        self.validate_trigger_output(root, [\"foo.c\", \"b ar.c\"], \"initial\")\n\n        def remove_logs():\n            os.unlink(os.path.join(root, \"trigger.log\"))\n            os.unlink(os.path.join(root, \"trigger.json\"))\n\n        for f in (\"foo.c\", \"b ar.c\"):\n            # Validate that we observe the updates correctly\n            # (that we're handling the since portion of the query)\n            self.suspendWatchman()\n            remove_logs()\n            self.touchRelative(root, f)\n            self.resumeWatchman()\n\n            self.validate_trigger_output(root, [f], \"only %s\" % f)\n\n        remove_logs()\n\n        self.watchmanCommand(\"debug-recrawl\", root)\n        # ensure that the triggers don't get deleted\n        triggers = self.watchmanCommand(\"trigger-list\", root).get(\"triggers\")\n        self.assertCountEqual(triggers, expect)\n\n        self.touchRelative(root, \"foo.c\")\n        expect = [\"foo.c\"]\n        if watch[\"watcher\"] == \"win32\":\n            # We end up re-scanning the root here and noticing that\n            # b ar.c has changed.  What we're testing here is that\n            # the trigger is run again, and it is ok if it notifies\n            # about more files on win32, so just adjust expec:tations\n            # here in the test to accommodate that difference.\n            expect = [\"foo.c\", \"b ar.c\"]\n\n        self.validate_trigger_output(root, expect, \"after recrawl\")\n\n        # Now test to see how we deal with updating the defs\n        res = self.watchmanCommand(\"trigger\", root, \"other\", \"*.c\", \"--\", \"true\")\n        self.assertEqual(\"replaced\", res[\"disposition\"])\n\n        res = self.watchmanCommand(\"trigger\", root, \"other\", \"*.c\", \"--\", \"true\")\n        self.assertEqual(\"already_defined\", res[\"disposition\"])\n\n        # and deletion\n        res = self.watchmanCommand(\"trigger-del\", root, \"test\")\n        self.assertTrue(res[\"deleted\"])\n        self.assertEqual(\"test\", res[\"trigger\"])\n\n        triggers = self.watchmanCommand(\"trigger-list\", root)\n        self.assertEqual(1, len(triggers[\"triggers\"]))\n\n        res = self.watchmanCommand(\"trigger-del\", root, \"other\")\n        self.assertTrue(res[\"deleted\"])\n        self.assertEqual(\"other\", res[\"trigger\"])\n\n        triggers = self.watchmanCommand(\"trigger-list\", root)\n        self.assertEqual(0, len(triggers[\"triggers\"]))\n"
  },
  {
    "path": "watchman/integration/test_trigger_chdir.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport json\nimport os\nimport os.path\nimport sys\nimport time\n\nfrom watchman.integration.lib import HELPER_ROOT, WatchmanTestCase\n\n\nTRIG_CWD = os.path.join(HELPER_ROOT, \"trig-cwd.py\")\nCAT_PY = os.path.join(HELPER_ROOT, \"cat.py\")\n\n\n@WatchmanTestCase.expand_matrix\nclass TestTrigger(WatchmanTestCase.WatchmanTestCase):\n    def fileContains(self, file_name, thing) -> bool:\n        if not os.path.exists(file_name):\n            return False\n\n        thing = thing + \"\\n\"\n        with open(file_name, \"r\") as f:\n            return thing in f\n\n    def fileHasValidJson(self, file_name) -> bool:\n        if not os.path.exists(file_name):\n            return False\n\n        try:\n            with open(file_name, \"r\") as f:\n                json.load(f)\n            return True\n        except Exception:\n            return False\n\n    def checkOSApplicability(self) -> None:\n        if os.name == \"nt\":\n            self.skipTest(\"no append on Windows\")\n\n    def test_triggerChdir(self) -> None:\n        root = self.mkdtemp()\n        os.mkdir(os.path.join(root, \"sub\"))\n        self.watchmanCommand(\"watch\", root)\n\n        self.watchmanCommand(\n            \"trigger\",\n            root,\n            {\n                \"name\": \"cap\",\n                \"command\": [sys.executable, TRIG_CWD],\n                \"stdout\": \">%s\" % os.path.join(root, \"trig.log\"),\n                \"expression\": [\"suffix\", \"txt\"],\n                \"stdin\": \"/dev/null\",\n                \"chdir\": \"sub\",\n            },\n        )\n\n        self.touchRelative(root, \"A.txt\")\n        self.assertWaitFor(\n            lambda: self.fileContains(\n                os.path.join(root, \"trig.log\"), \"PWD=\" + os.path.join(root, \"sub\")\n            )\n        )\n        self.assertWaitFor(\n            lambda: self.fileContains(\n                os.path.join(root, \"trig.log\"), \"WATCHMAN_EMPTY_ENV_VAR=\"\n            )\n        )\n\n    def test_triggerChdirRelativeRoot(self) -> None:\n        root = self.mkdtemp()\n        os.mkdir(os.path.join(root, \"sub1\"))\n        os.mkdir(os.path.join(root, \"sub1\", \"sub2\"))\n        self.watchmanCommand(\"watch\", root)\n\n        self.watchmanCommand(\n            \"trigger\",\n            root,\n            {\n                \"name\": \"cap\",\n                \"command\": [sys.executable, TRIG_CWD],\n                \"stdout\": \">%s\" % os.path.join(root, \"trig.log\"),\n                \"expression\": [\"suffix\", \"txt\"],\n                \"relative_root\": \"sub1\",\n                \"stdin\": \"/dev/null\",\n                \"chdir\": \"sub2\",\n            },\n        )\n\n        self.touchRelative(root, \"sub1\", \"A.txt\")\n        self.assertWaitFor(\n            lambda: self.fileContains(\n                os.path.join(root, \"trig.log\"),\n                \"PWD=\" + os.path.join(root, \"sub1\", \"sub2\"),\n            )\n        )\n\n        self.assertWaitFor(\n            lambda: self.fileContains(\n                os.path.join(root, \"trig.log\"), \"WATCHMAN_ROOT=\" + root\n            )\n        )\n        self.assertWaitFor(\n            lambda: self.fileContains(\n                os.path.join(root, \"trig.log\"),\n                \"WATCHMAN_RELATIVE_ROOT=\" + os.path.join(root, \"sub1\"),\n            )\n        )\n\n    def test_triggerMaxFiles(self) -> None:\n        root = self.mkdtemp()\n\n        with open(os.path.join(root, \".watchmanconfig\"), \"w\") as f:\n            f.write(json.dumps({\"settle\": 200}))\n\n        self.watchmanCommand(\"watch\", root)\n\n        self.watchmanCommand(\n            \"trigger\",\n            root,\n            {\n                \"name\": \"cap\",\n                \"command\": [sys.executable, TRIG_CWD],\n                \"stdout\": \">>%s\" % os.path.join(root, \"trig.log\"),\n                \"expression\": [\"suffix\", \"txt\"],\n                \"stdin\": [\"name\"],\n                \"max_files_stdin\": 2,\n            },\n        )\n\n        self.touchRelative(root, \"A.txt\")\n        self.assertWaitFor(\n            lambda: self.fileContains(os.path.join(root, \"trig.log\"), \"PWD=\" + root)\n        )\n\n        self.assertTrue(\n            not self.fileContains(\n                os.path.join(root, \"trig.log\"), \"WATCHMAN_FILES_OVERFLOW=true\"\n            ),\n            msg=\"No overflow for a single file\",\n        )\n\n        deadline = time.time() + 5\n        overflown = False\n        while time.time() < deadline:\n            os.unlink(os.path.join(root, \"trig.log\"))\n\n            self.touchRelative(root, \"B.txt\")\n            self.touchRelative(root, \"A.txt\")\n            self.touchRelative(root, \"C.txt\")\n            self.touchRelative(root, \"D.txt\")\n\n            self.assertWaitFor(\n                lambda: self.fileContains(os.path.join(root, \"trig.log\"), \"PWD=\" + root)\n            )\n\n            if self.fileContains(\n                os.path.join(root, \"trig.log\"), \"WATCHMAN_FILES_OVERFLOW=true\"\n            ):\n                overflown = True\n                break\n\n        self.assertTrue(overflown, \"Observed WATCHMAN_FILES_OVERFLOW\")\n\n    def test_triggerNamePerLine(self) -> None:\n        root = self.mkdtemp()\n\n        self.watchmanCommand(\"watch\", root)\n        log_file = os.path.join(root, \"trig.log\")\n        self.watchmanCommand(\n            \"trigger\",\n            root,\n            {\n                \"name\": \"cat\",\n                \"command\": [sys.executable, CAT_PY],\n                \"stdout\": \">%s\" % log_file,\n                \"expression\": [\"suffix\", \"txt\"],\n                \"stdin\": \"NAME_PER_LINE\",\n            },\n        )\n\n        self.touchRelative(root, \"A.txt\")\n        self.assertWaitFor(lambda: self.fileContains(log_file, \"A.txt\"))\n\n        self.touchRelative(root, \"B.txt\")\n        self.touchRelative(root, \"A.txt\")\n        self.assertWaitFor(\n            lambda: self.fileContains(log_file, \"A.txt\")\n            and self.fileContains(log_file, \"B.txt\")\n        )\n        with open(log_file, \"r\") as f:\n            self.assertEqual([\"A.txt\\n\", \"B.txt\\n\"], sorted(f.readlines()))\n\n    def test_triggerNamePerLineRelativeRoot(self) -> None:\n        root = self.mkdtemp()\n        os.mkdir(os.path.join(root, \"subdir\"))\n\n        self.watchmanCommand(\"watch\", root)\n        log_file = os.path.join(root, \"trig.log\")\n        self.watchmanCommand(\n            \"trigger\",\n            root,\n            {\n                \"name\": \"cat\",\n                \"command\": [sys.executable, CAT_PY],\n                \"relative_root\": \"subdir\",\n                \"stdout\": \">%s\" % log_file,\n                \"expression\": [\"suffix\", \"txt\"],\n                \"stdin\": \"NAME_PER_LINE\",\n            },\n        )\n\n        self.touchRelative(root, \"A.txt\")\n        self.touchRelative(root, \"subdir\", \"B.txt\")\n        self.assertWaitFor(lambda: self.fileContains(log_file, \"B.txt\"))\n\n    def test_triggerNamePerLineAppend(self) -> None:\n        root = self.mkdtemp()\n\n        self.watchmanCommand(\"watch\", root)\n        log_file = os.path.join(root, \"trig.log\")\n        self.watchmanCommand(\n            \"trigger\",\n            root,\n            {\n                \"name\": \"cat\",\n                \"command\": [sys.executable, CAT_PY],\n                \"stdout\": \">>%s\" % log_file,\n                \"expression\": [\"suffix\", \"txt\"],\n                \"stdin\": \"NAME_PER_LINE\",\n            },\n        )\n\n        self.touchRelative(root, \"A.txt\")\n        self.assertWaitFor(lambda: self.fileContains(log_file, \"A.txt\"))\n\n        self.touchRelative(root, \"B.txt\")\n        self.assertWaitFor(\n            lambda: self.fileContains(log_file, \"A.txt\")\n            and self.fileContains(log_file, \"B.txt\")\n        )\n        with open(log_file, \"r\") as f:\n            self.assertEqual([\"A.txt\\n\", \"B.txt\\n\"], sorted(f.readlines()))\n\n    def test_triggerJsonNameOnly(self) -> None:\n        root = self.mkdtemp()\n\n        self.watchmanCommand(\"watch\", root)\n        log_file = os.path.join(root, \"trig.log\")\n        self.watchmanCommand(\n            \"trigger\",\n            root,\n            {\n                \"name\": \"cat\",\n                \"command\": [sys.executable, CAT_PY],\n                \"stdout\": \">%s\" % log_file,\n                \"expression\": [\"suffix\", \"txt\"],\n                \"stdin\": [\"name\"],\n            },\n        )\n\n        self.touchRelative(root, \"A.txt\")\n        self.assertWaitFor(lambda: self.fileHasValidJson(log_file))\n\n        with open(log_file, \"r\") as f:\n            data = json.load(f)\n        self.assertEqual([\"A.txt\"], data)\n\n    def test_triggerJsonNameAndSize(self) -> None:\n        root = self.mkdtemp()\n\n        self.watchmanCommand(\"watch\", root)\n        log_file = os.path.join(root, \"trig.log\")\n        self.watchmanCommand(\n            \"trigger\",\n            root,\n            {\n                \"name\": \"cat\",\n                \"command\": [sys.executable, CAT_PY],\n                \"stdout\": \">%s\" % log_file,\n                \"expression\": [\"suffix\", \"txt\"],\n                \"stdin\": [\"name\", \"size\"],\n            },\n        )\n\n        self.touchRelative(root, \"A.txt\")\n        self.assertWaitFor(lambda: self.fileHasValidJson(log_file))\n\n        with open(log_file, \"r\") as f:\n            data = json.load(f)\n        self.assertEqual(\"A.txt\", data[0][\"name\"])\n        self.assertEqual(0, data[0][\"size\"])\n"
  },
  {
    "path": "watchman/integration/test_trigger_error.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestTriggerError(WatchmanTestCase.WatchmanTestCase):\n    def assertTriggerRegError(self, err, *args) -> None:\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(*args)\n        self.assertRegex(str(ctx.exception), err)\n\n    def test_bad_args(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertTriggerRegError(\"not enough arguments\", \"trigger\", root)\n\n        self.assertTriggerRegError(\"no command was specified\", \"trigger\", root, \"oink\")\n\n        self.assertTriggerRegError(\n            \"no command was specified\", \"trigger\", root, \"oink\", \"--\"\n        )\n\n        self.assertTriggerRegError(\n            \"failed to parse query: rule @ position 4 is not a string value\",\n            \"trigger\",\n            root,\n            \"oink\",\n            \"--\",\n            123,\n        )\n\n        self.assertTriggerRegError(\"invalid or missing name\", \"trigger\", root, 123)\n\n        self.assertTriggerRegError(\"invalid or missing name\", \"trigger\", root, [])\n\n        self.assertTriggerRegError(\n            \"invalid or missing name\", \"trigger\", root, {\"name\": 123}\n        )\n\n        self.assertTriggerRegError(\n            \"invalid command array\", \"trigger\", root, {\"name\": \"oink\"}\n        )\n\n        self.assertTriggerRegError(\n            \"invalid command array\", \"trigger\", root, {\"name\": \"oink\", \"command\": []}\n        )\n\n        self.assertTriggerRegError(\n            \"invalid stdin value lemon\",\n            \"trigger\",\n            root,\n            {\"name\": \"oink\", \"command\": [\"cat\"], \"stdin\": \"lemon\"},\n        )\n\n        self.assertTriggerRegError(\n            \"invalid value for stdin\",\n            \"trigger\",\n            root,\n            {\"name\": \"oink\", \"command\": [\"cat\"], \"stdin\": 13},\n        )\n\n        self.assertTriggerRegError(\n            \"max_files_stdin must be >= 0\",\n            \"trigger\",\n            root,\n            {\"name\": \"oink\", \"command\": [\"cat\"], \"max_files_stdin\": -1},\n        )\n\n        self.assertTriggerRegError(\n            \"stdout: must be prefixed with either > or >>, got out\",\n            \"trigger\",\n            root,\n            {\"name\": \"oink\", \"command\": [\"cat\"], \"stdout\": \"out\"},\n        )\n\n        self.assertTriggerRegError(\n            \"stderr: must be prefixed with either > or >>, got out\",\n            \"trigger\",\n            root,\n            {\"name\": \"oink\", \"command\": [\"cat\"], \"stderr\": \"out\"},\n        )\n"
  },
  {
    "path": "watchman/integration/test_two_deep.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport time\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestTwoDeep(WatchmanTestCase.WatchmanTestCase):\n    def test_two_deep(self) -> None:\n        root = self.mkdtemp()\n        self.watchmanCommand(\"watch\", root)\n\n        os.makedirs(os.path.join(root, \"foo\", \"bar\"))\n\n        # Guarantee that 111's mtime is greater than its parent dirs\n        time.sleep(1)\n\n        with open(os.path.join(root, \"foo\", \"bar\", \"111\"), \"w\") as f:\n            f.write(\"111\")\n\n        self.assertFileList(root, files=[\"foo\", \"foo/bar\", \"foo/bar/111\"])\n\n        res_111 = self.watchmanCommand(\"find\", root, \"foo/bar/111\")[\"files\"][0]\n        st_111 = os.lstat(os.path.join(root, \"foo\", \"bar\", \"111\"))\n\n        res_bar = self.watchmanCommand(\"find\", root, \"foo/bar\")[\"files\"][0]\n        st_bar = os.lstat(os.path.join(root, \"foo\", \"bar\"))\n\n        self.assertEqual(res_111[\"mtime\"], int(st_111.st_mtime))\n        self.assertEqual(res_bar[\"mtime\"], int(st_bar.st_mtime))\n"
  },
  {
    "path": "watchman/integration/test_type.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestTypeExpr(WatchmanTestCase.WatchmanTestCase):\n    def test_type_expr(self) -> None:\n        root = self.mkdtemp()\n\n        self.touchRelative(root, \"foo.c\")\n        os.mkdir(os.path.join(root, \"subdir\"))\n        self.touchRelative(root, \"subdir\", \"bar.txt\")\n\n        self.watchmanCommand(\"watch\", root)\n\n        self.assertFileListsEqual(\n            self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"type\", \"f\"], \"fields\": [\"name\"]}\n            )[\"files\"],\n            [\"foo.c\", \"subdir/bar.txt\"],\n        )\n\n        self.assertEqual(\n            self.watchmanCommand(\n                \"query\", root, {\"expression\": [\"type\", \"d\"], \"fields\": [\"name\", \"type\"]}\n            )[\"files\"],\n            [{\"name\": \"subdir\", \"type\": \"d\"}],\n        )\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"expression\": [\"type\", \"x\"]})\n\n        self.assertIn(\"invalid type string 'x'\", str(ctx.exception))\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"expression\": \"type\"})\n\n        self.assertIn(\n            '\"type\" term requires a type string parameter', str(ctx.exception)\n        )\n\n        with self.assertRaises(pywatchman.WatchmanError) as ctx:\n            self.watchmanCommand(\"query\", root, {\"expression\": [\"type\", 123]})\n\n        self.assertIn(\n            'First parameter to \"type\" term must be a type string', str(ctx.exception)\n        )\n"
  },
  {
    "path": "watchman/integration/test_watch_del_all.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\nclass TestWatchDelAll(WatchmanTestCase.WatchmanTestCase):\n    def test_watch_del_all(self) -> None:\n        root = self.mkdtemp()\n\n        dirs = [os.path.join(root, f) for f in [\"a\", \"b\", \"c\", \"d\"]]\n\n        for d in dirs:\n            os.mkdir(d)\n            self.touchRelative(d, \"foo\")\n            self.watchmanCommand(\"watch\", d)\n            self.assertFileList(d, files=[\"foo\"])\n\n        self.watchmanCommand(\"watch-del-all\")\n        self.assertEqual(self.watchmanCommand(\"watch-list\")[\"roots\"], [])\n"
  },
  {
    "path": "watchman/integration/test_watch_project.py",
    "content": "# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\n\nimport pywatchman\nfrom watchman.integration.lib import WatchmanInstance, WatchmanTestCase\nfrom watchman.integration.lib.path_utils import norm_absolute_path, norm_relative_path\n\n\ndef make_empty_watchmanconfig(dir) -> None:\n    with open(os.path.join(dir, \".watchmanconfig\"), \"w\") as f:\n        f.write(\"{}\")\n\n\n@WatchmanTestCase.expand_matrix\nclass TestWatchProject(WatchmanTestCase.WatchmanTestCase):\n    def runProjectTests(\n        self, config, expect, touch_watchmanconfig: bool = False\n    ) -> None:\n        with WatchmanInstance.Instance(config=config) as inst:\n            inst.start()\n            client = self.getClient(inst)\n\n            for touch, expect_watch, expect_rel, expect_pass in expect:\n                # encode the test criteria in the dirname so that we can\n                # figure out which test scenario failed more easily\n\n                suffix = \"-%s-%s-%s-%s\" % (touch, expect_watch, expect_rel, expect_pass)\n                suffix = suffix.replace(\"/\", \"Z\")\n                d = self.mkdtemp(suffix=suffix)\n\n                dir_to_watch = os.path.join(d, \"a\", \"b\", \"c\")\n                os.makedirs(dir_to_watch, 0o777)\n                dir_to_watch = norm_absolute_path(dir_to_watch)\n                self.touchRelative(d, touch)\n                if touch_watchmanconfig:\n                    make_empty_watchmanconfig(d)\n\n                if expect_watch:\n                    expect_watch = os.path.join(d, expect_watch)\n                else:\n                    expect_watch = d\n\n                if expect_pass:\n                    res = client.query(\"watch-project\", dir_to_watch)\n\n                    self.assertEqual(\n                        norm_absolute_path(os.path.join(d, expect_watch)),\n                        norm_absolute_path(res[\"watch\"]),\n                    )\n                    if not expect_rel:\n                        self.assertEqual(None, res.get(\"relative_path\"))\n                    else:\n                        self.assertEqual(\n                            norm_relative_path(expect_rel),\n                            norm_relative_path(res.get(\"relative_path\")),\n                        )\n                else:\n                    with self.assertRaises(pywatchman.WatchmanError) as ctx:\n                        client.query(\"watch-project\", dir_to_watch)\n                    self.assertIn(\n                        (\n                            \"None of the files listed in global config \"\n                            + \"root_files are present in path `\"\n                            + dir_to_watch\n                            + \"` or any of its parent directories.  \"\n                            + \"root_files is defined by the\"\n                        ),\n                        str(ctx.exception),\n                    )\n\n    def test_watchProject(self) -> None:\n        expect = [\n            (\"a/b/c/.git\", \"a/b/c\", None, True),\n            (\"a/b/.hg\", \"a/b\", \"c\", True),\n            (\"a/.foo\", \"a\", \"b/c\", True),\n            (\".bar\", None, \"a/b/c\", True),\n            (\"a/.bar\", \"a\", \"b/c\", True),\n            (\".svn\", \"a/b/c\", None, True),\n            (\"a/baz\", \"a/b/c\", None, True),\n        ]\n        self.runProjectTests({\"root_files\": [\".git\", \".hg\", \".foo\", \".bar\"]}, expect)\n\n    def test_watchProjectWatchmanConfig(self) -> None:\n        expect = [\n            (\"a/b/c/.git\", None, \"a/b/c\", True),\n            (\"a/b/.hg\", None, \"a/b/c\", True),\n            (\"a/.foo\", None, \"a/b/c\", True),\n            (\".bar\", None, \"a/b/c\", True),\n            (\"a/.bar\", None, \"a/b/c\", True),\n            (\".svn\", None, \"a/b/c\", True),\n            (\"a/baz\", None, \"a/b/c\", True),\n        ]\n        self.runProjectTests(\n            {\"root_files\": [\".git\", \".hg\", \".foo\", \".bar\"]},\n            expect,\n            touch_watchmanconfig=True,\n        )\n\n    def test_watchProjectEnforcing(self) -> None:\n        config = {\n            \"root_files\": [\".git\", \".hg\", \".foo\", \".bar\"],\n            \"enforce_root_files\": True,\n        }\n        expect = [\n            (\"a/b/c/.git\", \"a/b/c\", None, True),\n            (\"a/b/.hg\", \"a/b\", \"c\", True),\n            (\"a/.foo\", \"a\", \"b/c\", True),\n            (\".bar\", None, \"a/b/c\", True),\n            (\"a/.bar\", \"a\", \"b/c\", True),\n            (\".svn\", None, None, False),\n            (\"a/baz\", None, None, False),\n        ]\n        self.runProjectTests(config=config, expect=expect)\n\n    def test_reUseNestedWatch(self) -> None:\n        d = self.mkdtemp()\n        abc = os.path.join(d, \"a\", \"b\", \"c\")\n        os.makedirs(abc, 0o777)\n        make_empty_watchmanconfig(abc)\n\n        res = self.watchmanCommand(\"watch-project\", d)\n        self.assertEqual(d, norm_absolute_path(res[\"watch\"]))\n\n        res = self.watchmanCommand(\"watch-project\", abc)\n        self.assertEqual(d, norm_absolute_path(res[\"watch\"]))\n        self.assertEqual(\"a/b/c\", norm_relative_path(res[\"relative_path\"]))\n"
  },
  {
    "path": "watchman/integration/test_wm_wait.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport os\nimport subprocess\nimport sys\nimport unittest\n\nfrom watchman.integration.lib import WatchmanTestCase\n\n\n@WatchmanTestCase.expand_matrix\n@unittest.skipIf(os.name == \"nt\", \"Doesn't run on Windows\")\nclass TestWatchmanWait(WatchmanTestCase.WatchmanTestCase):\n    def requiresPersistentSession(self) -> bool:\n        return True\n\n    def spawnWatchmanWait(self, cmdArgs):\n        wait_script = os.environ.get(\"WATCHMAN_WAIT_PATH\")\n        if wait_script:\n            args = [wait_script]\n        else:\n            args = [\n                sys.executable,\n                os.path.join(os.environ[\"WATCHMAN_PYTHON_BIN\"], \"watchman-wait\"),\n            ]\n        args.extend(cmdArgs)\n\n        env = os.environ.copy()\n        sock_path = self.watchmanInstance().getSockPath()\n        env[\"WATCHMAN_SOCK\"] = sock_path.legacy_sockpath()\n        pywatchman_path = env.get(\"PYWATCHMAN_PATH\")\n        if pywatchman_path:\n            env[\"PYTHONPATH\"] = pywatchman_path\n        return subprocess.Popen(\n            args, env=env, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE\n        )\n\n    def assertWaitedFileList(self, stdout, expected) -> None:\n        stdout = stdout.decode(\"utf-8\").rstrip()\n        files = [f.rstrip() for f in stdout.split(\"\\n\")]\n        self.assertFileListContains(files, expected)\n\n    def assertWaitForWmWaitWatch(self, root) -> None:\n        \"\"\"Wait for the specified root to appear in the watch list;\n        watchman-wait will initiate that asynchronously and we have\n        to wait for that before proceeding.\n        Then wait for the watch to be ready to query, otherwise the\n        test expectations will not be reliably met.\"\"\"\n\n        # wait for the watch to appear\n        self.assertWaitFor(\n            lambda: self.rootIsWatched(root),\n            message=\"%s was not watched by watchman-wait\" % root,\n        )\n\n        # now wait for it to be ready to query.  The easiest way\n        # to do this is to ask for the watch ourselves, as that\n        # will block us until it is ready\n        self.watchmanCommand(\"watch\", root)\n\n    def test_wait(self) -> None:\n        root = self.mkdtemp()\n        self.touchRelative(root, \"foo\")\n        a_dir = os.path.join(root, \"a\")\n        os.mkdir(a_dir)\n        self.touchRelative(a_dir, \"foo\")\n\n        wmwait = self.spawnWatchmanWait(\n            [\"--relative\", root, \"--max-events\", \"8\", \"-t\", \"3\", root]\n        )\n        self.assertWaitForWmWaitWatch(root)\n\n        self.touchRelative(root, \"bar\")\n        self.removeRelative(root, \"foo\")\n        self.touchRelative(a_dir, \"bar\")\n        self.removeRelative(a_dir, \"foo\")\n\n        b_dir = os.path.join(root, \"b\")\n        os.mkdir(b_dir)\n        self.touchRelative(b_dir, \"foo\")\n\n        (stdout, stderr) = wmwait.communicate()\n        self.assertWaitedFileList(stdout, [\"a/bar\", \"a/foo\", \"b/foo\", \"bar\", \"foo\"])\n\n    def test_rel_root(self) -> None:\n        root = self.mkdtemp()\n\n        a_dir = os.path.join(root, \"a\")\n        os.mkdir(a_dir)\n        b_dir = os.path.join(root, \"b\")\n        os.mkdir(b_dir)\n\n        wmwait = self.spawnWatchmanWait(\n            [\"--relative\", b_dir, \"--max-events\", \"8\", \"-t\", \"6\", a_dir, b_dir]\n        )\n\n        self.assertWaitForWmWaitWatch(b_dir)\n        self.assertWaitForWmWaitWatch(a_dir)\n\n        self.touchRelative(a_dir, \"afoo\")\n        self.touchRelative(b_dir, \"bfoo\")\n\n        a_sub_dir = os.path.join(a_dir, \"asub\")\n        os.mkdir(a_sub_dir)\n        b_sub_dir = os.path.join(b_dir, \"bsub\")\n        os.mkdir(b_sub_dir)\n\n        (stdout, stderr) = wmwait.communicate()\n        self.assertWaitedFileList(stdout, [\"../a/afoo\", \"../a/asub\", \"bfoo\", \"bsub\"])\n"
  },
  {
    "path": "watchman/integration/touch.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# Portable simple implementation of `touch`\n\n\nimport errno\nimport os\nimport sys\n\n\nfname = sys.argv[1]\n\ntry:\n    os.utime(fname, None)\nexcept OSError as e:\n    if e.errno == errno.ENOENT:\n        with open(fname, \"a\"):\n            os.utime(fname, None)\n    else:\n        raise\n"
  },
  {
    "path": "watchman/integration/trig-cwd.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport os\n\n\nos.environ[\"PWD\"] = os.getcwd()\n\nfor k, v in os.environ.items():\n    print(\"%s=%s\" % (k, v))\n"
  },
  {
    "path": "watchman/integration/trig.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport sys\nimport time\n\n\nlog_file_name = sys.argv[1]\n\nargs = sys.argv[2:]\n\nwith open(log_file_name, \"a\") as f:\n    for arg in args:\n        f.write(\"%s \" % time.time())\n        f.write(arg)\n        f.write(\"\\n\")\n\nprint(\"WOOT from trig.sh\")\n"
  },
  {
    "path": "watchman/integration/trigjson.py",
    "content": "#!/usr/bin/env python\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport sys\n\n\nlog_file_name = sys.argv[1]\n\n# Copy json from stdin to the log file\nwith open(log_file_name, \"a\") as f:\n    print(\"trigjson.py: Copying STDIN to %s\" % log_file_name)\n    json_in = sys.stdin.read()\n    print(\"stdin: %s\" % json_in)\n    f.write(json_in)\n"
  },
  {
    "path": "watchman/java/.buckconfig",
    "content": "[java]\n  src_roots = java, test\n  source_level = 6\n  target_level = 6\n  jar_spool_mode = direct_to_jar\n\n[project]\n  ide = intellij\n  allow_symlinks = forbid\n  watchman_query_timeout_ms = 1000\n  initial_targets = //watchman\n  ignore = .git, .buckd, .idea, buck-out, buck-cache, \\\n           **/.DS_Store, **/**.orig, \\\n           *___jb_bak___*, \\\n           *___jb_tmp___*, \\\n           *___jb_old___*, \\\n           **/*.swp, \\\n           **/*~\n  parallel_parsing = true\n\n[build]\n  thread_core_ratio = 0.75\n  thread_core_ratio_min_threads = 1\n\n[cache]\n  mode = dir\n  dir = buck-cache\n  dir_max_size = 100MB\n\n[test]\n  timeout = 60000\n"
  },
  {
    "path": "watchman/java/.gitignore",
    "content": "# Ignore files used by the Buck build system\n/.buckd/\n/buck-cache/\n/buck-out/\n"
  },
  {
    "path": "watchman/java/.nobuckcheck",
    "content": ""
  },
  {
    "path": "watchman/java/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\njava_binary(\n    name = \"watchman\",\n    deps = [\n        \":watchman-lib\",\n    ],\n)\n\nzip_file(\n    name = \"watchman-lib.src\",\n    srcs = glob([\"src/**/*.java\"]),\n    licenses = [\n        \"LICENSE\",\n    ],\n    visibility = [\n        \"PUBLIC\",\n    ],\n)\n\njava_library(\n    name = \"watchman-lib\",\n    srcs = [\n        \":watchman-lib.src\",\n    ],\n    annotation_processor_deps = [\n        \"//third-party/guava:guava\",\n        \"//third-party/immutables:generator\",\n        \"//third-party/immutables:value-processor\",\n    ],\n    annotation_processors = [\n        \"org.immutables.value.processor.Processor\",\n    ],\n    source = \"7\",\n    target = \"7\",\n    tests = [\n        \":watchman-tests\",\n    ],\n    visibility = [\n        \"PUBLIC\",\n    ],\n    deps = [\n        \"//third-party/guava:guava\",\n        \"//third-party/immutables:value\",\n        \"//third-party/jna:jna\",\n        \"//third-party/jna:jna-platform\",\n        \"//third-party/jsr-305:jsr-305\",\n        \"//third-party/nuprocess:nuprocess\",\n    ],\n)\n\njava_test(\n    name = \"watchman-tests\",\n    srcs = glob([\"test/**/*.java\"]),\n    source = \"7\",\n    target = \"7\",\n    test_type = \"junit\",\n    deps = [\n        \":watchman-lib\",\n        \"//third-party/guava:guava\",\n        \"//third-party/hamcrest:hamcrest-2\",\n        \"//third-party/java/junit/junit:junit\",\n        \"//third-party/mockito:mockito\",\n    ],\n)\n"
  },
  {
    "path": "watchman/java/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\nMIT License\n\nCopyright (c) Facebook, Inc. and its affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "watchman/java/README.md",
    "content": "Watchman Java Library\n====\n\nThis provides Java bindings to the Watchman service.\n\nBuilding\n===\n\nMake sure that you have [buck](https://buckbuild.com/) installed. In this\nfolder, run:\n\n```\nbuck fetch :watchman\nbuck build :watchman\n```\n\nThe resulting JAR file is found in:\n`buck-out/gen/watchman.jar'\n\nTo run the tests:\n\n```\nbuck fetch :watchman-tests\nbuck test :watchman-lib\n```\n\n"
  },
  {
    "path": "watchman/java/pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\">\n    <modelVersion>4.0.0</modelVersion>\n    <groupId>com.facebook.watchman</groupId>\n    <artifactId>watchman-lib</artifactId>\n    <packaging>jar</packaging>\n    <version>1.0-SNAPSHOT</version>\n    <name>Watchman java client</name>\n    <url>http://maven.apache.org</url>\n    <build>\n        <sourceDirectory>src</sourceDirectory>\n        <testSourceDirectory>test</testSourceDirectory>\n        <plugins>\n            <plugin>\n                <artifactId>maven-compiler-plugin</artifactId>\n                <configuration>\n                    <source>1.7</source>\n                    <target>1.7</target>\n                </configuration>\n            </plugin>\n        </plugins>\n    </build>\n    <dependencies>\n        <dependency>\n            <groupId>junit</groupId>\n            <artifactId>junit</artifactId>\n            <version>4.13.1</version>\n            <scope>test</scope>\n        </dependency>\n        <dependency>\n            <groupId>org.hamcrest</groupId>\n            <artifactId>hamcrest-junit</artifactId>\n            <version>2.0.0.0</version>\n            <scope>test</scope>\n        </dependency>\n        <dependency>\n            <groupId>org.mockito</groupId>\n            <artifactId>mockito-core</artifactId>\n            <version>1.9.5</version>\n            <scope>test</scope>\n        </dependency>\n        <dependency>\n            <groupId>com.google.guava</groupId>\n            <artifactId>guava</artifactId>\n            <version>19.0</version>\n        </dependency>\n        <dependency>\n            <groupId>net.java.dev.jna</groupId>\n            <artifactId>jna</artifactId>\n            <version>4.2.0</version>\n        </dependency>\n        <dependency>\n            <groupId>net.java.dev.jna</groupId>\n            <artifactId>jna-platform</artifactId>\n            <version>4.2.0</version>\n        </dependency>\n        <dependency>\n            <groupId>org.immutables</groupId>\n            <artifactId>value</artifactId>\n            <version>2.1.5</version>\n        </dependency>\n        <dependency>\n            <groupId>com.google.code.findbugs</groupId>\n            <artifactId>jsr305</artifactId>\n            <version>3.0.1</version>\n        </dependency>\n        <dependency>\n            <groupId>com.zaxxer</groupId>\n            <artifactId>nuprocess</artifactId>\n            <version>1.1.0</version>\n        </dependency>\n    </dependencies>\n</project>"
  },
  {
    "path": "watchman/java/sandcastle.ini",
    "content": "oncall = tmp_t21891137\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/Callback.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.util.Map;\n\npublic interface Callback {\n  void call(Map<String, Object> message) throws Exception;\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/CapabilitiesStrategy.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.util.Collections;\nimport java.util.Map;\nimport java.util.concurrent.ExecutionException;\n\nimport com.google.common.util.concurrent.ListenableFuture;\n\n/**\n * Called a \"strategy\" because we might have different ways of testing for capabilities as versions\n * change. Should become an interface once we get different implementations available.\n */\npublic class CapabilitiesStrategy {\n\n  private final static String CMD_WATCH_PROJECT = \"cmd-watch-project\";\n  private final static String CAPABILITIES = \"capabilities\";\n\n  /**\n   * Tests if a client supports the \"watch-project\" command or not.\n   */\n  public static boolean checkWatchProjectCapability(WatchmanClient client) {\n\n    ListenableFuture<Map<String, Object>> future = client.version(\n        Collections.<String>emptyList(),\n        Collections.singletonList(CMD_WATCH_PROJECT));\n    try {\n      Map<String, Object> response = future.get();\n      if (response.containsKey(CAPABILITIES)) {\n        Map<String, Object> capabilities = (Map<String, Object>) response.get(CAPABILITIES);\n        return Boolean.TRUE.equals(capabilities.get(CMD_WATCH_PROJECT));\n      }\n      return false;\n    } catch (InterruptedException | ExecutionException e) {\n      return false;\n    }\n  }\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/Deserializer.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.Map;\n\npublic interface Deserializer {\n\n  /**\n   * Reads the next object from the InputSteram, blocking until it becomes available.\n   * @param stream the stream to read from\n   * @return a deserialized object, read from the stream\n   */\n  Map<String, Object> deserialize(InputStream stream) throws IOException;\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/WatchmanClient.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.io.IOException;\nimport java.nio.file.Path;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Objects;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport org.immutables.value.Value;\n\npublic interface WatchmanClient {\n\n  ListenableFuture<Map<String, Object>> clock(Path path);\n  ListenableFuture<Map<String, Object>> clock(Path path, Number syncTimeout);\n\n  ListenableFuture<Map<String, Object>> watch(Path path);\n\n  ListenableFuture<Map<String,Object>> watchDel(Path path);\n\n  ListenableFuture<Boolean> unsubscribe(SubscriptionDescriptor descriptor);\n\n  ListenableFuture<SubscriptionDescriptor> subscribe(\n      Path path,\n      Map<String, Object> query,\n      Callback listener);\n\n  ListenableFuture<Map<String, Object>> version();\n\n  ListenableFuture<Map<String, Object>> version(\n      List<String> optionalCapabilities,\n      List<String> requiredCapabilities);\n\n  ListenableFuture<Map<String, Object>> run(List<Object> command);\n\n  ListenableFuture<Boolean> unsubscribeAll();\n\n  void close() throws IOException;\n\n  void start();\n\n  @Value.Immutable\n  @Value.Style(visibility = Value.Style.ImplementationVisibility.PRIVATE)\n  abstract class SubscriptionDescriptor {\n    public abstract String root();\n    public abstract String name();\n\n    @Override\n    public int hashCode() {\n      return Objects.hash(root(), name());\n    }\n  }\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/WatchmanClientImpl.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport com.google.common.util.concurrent.MoreExecutors;\nimport javax.annotation.Nullable;\n\nimport java.io.IOException;\nimport java.io.OutputStream;\nimport java.nio.file.Path;\nimport java.util.Arrays;\nimport java.util.Collection;\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.ConcurrentHashMap;\nimport java.util.concurrent.atomic.AtomicInteger;\n\nimport com.google.common.annotations.VisibleForTesting;\nimport com.google.common.base.Function;\nimport com.google.common.base.Optional;\nimport com.google.common.base.Predicates;\nimport com.google.common.base.Supplier;\nimport com.google.common.base.Suppliers;\nimport com.google.common.collect.Collections2;\nimport com.google.common.collect.ImmutableList;\nimport com.google.common.collect.ImmutableMap;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\n\nimport static com.google.common.base.Preconditions.checkNotNull;\n\npublic class WatchmanClientImpl implements WatchmanClient {\n  private static final String SUBSCRIPTION_KEY = \"subscription\";\n  private static final Collection<String> UNILATERAL_LABELS = Arrays.asList(\n      SUBSCRIPTION_KEY);\n\n  private final WatchmanConnection connection;\n  private final ConcurrentHashMap<SubscriptionDescriptor, Callback> subscriptions =\n      new ConcurrentHashMap<SubscriptionDescriptor, Callback>();\n  private final AtomicInteger subscriptionIndex = new AtomicInteger(0);\n\n  private final Supplier<Boolean> supportsWatchProject;\n\n  public WatchmanClientImpl(WatchmanTransport transport) throws IOException {\n    connection = new WatchmanConnection(\n        transport,\n        Optional.of(UNILATERAL_LABELS),\n        Optional.<Callback>of(new UnilateralCallbackImpl()));\n\n    supportsWatchProject = Suppliers.memoize(new Supplier<Boolean>() {\n      @Override\n      public Boolean get() {\n        return CapabilitiesStrategy.checkWatchProjectCapability(WatchmanClientImpl.this);\n      }\n    });\n  }\n\n  @VisibleForTesting\n  WatchmanClientImpl(\n      Callable<Map<String, Object>> incomingMessageGetter,\n      OutputStream outgoingMessageStream,\n      Supplier<Boolean> supportsWatchProject) {\n    connection = new WatchmanConnection(\n        incomingMessageGetter,\n        outgoingMessageStream,\n        Optional.of(UNILATERAL_LABELS),\n        Optional.<Callback>of(new UnilateralCallbackImpl()));\n\n    this.supportsWatchProject = supportsWatchProject;\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> clock(Path path) {\n    List<String> request = ImmutableList.of(\n        \"clock\",\n        path.toAbsolutePath().toString());\n    return connection.run(request);\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> clock(Path path, Number syncTimeout) {\n    List<Object> request = ImmutableList.<Object>of(\n        \"clock\",\n        path.toAbsolutePath().toString(),\n        ImmutableMap.<String, Object>of(\"sync_timeout\", syncTimeout));\n\n    return connection.run(request);\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> watch(Path path) {\n    if (!supportsWatchProject.get()) {\n      return Futures.immediateFailedFuture(\n          new WatchmanException(\"Please upgrade Watchman to the latest version in order to use \" +\n              \"the watching functionality\"));\n    }\n\n    List<String> request = ImmutableList.of(\n        \"watch-project\",\n        path.toAbsolutePath().toString()\n    );\n    return connection.run(request);\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> watchDel(Path path) {\n    List<String> request = ImmutableList.of(\n        \"watch-del\",\n        path.toAbsolutePath().toString());\n    return connection.run(request);\n  }\n\n  @Override\n  public ListenableFuture<Boolean> unsubscribe(final SubscriptionDescriptor descriptor) {\n    if (! subscriptions.containsKey(descriptor)) {\n      return Futures.immediateFuture(false);\n    }\n\n    List<String> request = ImmutableList.of(\n        \"unsubscribe\",\n        descriptor.root(),\n        descriptor.name());\n\n    return Futures.transform(connection.run(request), new Function<Map<String, Object>, Boolean>() {\n      @Nullable\n      @Override\n      public Boolean apply(@Nullable Map<String, Object> input) {\n        checkNotNull(input);\n\n        boolean wasDeleted = (Boolean) input.get(\"deleted\");\n        if (wasDeleted) {\n          if (subscriptions.remove(descriptor) == null) {\n            return false;\n          }\n        }\n        return wasDeleted;\n      }\n    }, MoreExecutors.directExecutor());\n  }\n\n  @Override\n  public ListenableFuture<SubscriptionDescriptor> subscribe(\n      Path path,\n      Map<String, Object> query,\n      final Callback listener) {\n    final String subscriptionId = \"sub-\" + subscriptionIndex.getAndAdd(1);\n    final String root = path.toAbsolutePath().toString();\n\n    final SubscriptionDescriptor result = new SubscriptionDescriptorBuilder()\n        .name(subscriptionId)\n        .root(root)\n        .build();\n    subscriptions.put(result, listener);\n\n    List<Object> request = ImmutableList.of(\n        \"subscribe\",\n        root,\n        subscriptionId,\n        query == null ? Collections.emptyMap() : query);\n\n    return Futures.transform(\n        connection.run(request),\n        new Function<Map<String, Object>, SubscriptionDescriptor>() {\n          @Nullable\n          @Override\n          public SubscriptionDescriptor apply(@Nullable Map<String, Object> input) {\n            // TODO remove subscription descriptor from `subscriptions` if we got an error from wman\n            return result;\n          }\n        }, MoreExecutors.directExecutor());\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> version() {\n    List<String> request = ImmutableList.of(\"version\");\n    return connection.run(request);\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> version(\n      List<String> optionalCapabilities,\n      List<String> requiredCapabilities) {\n    Map<String, Object> capabilities = ImmutableMap.<String, Object>of(\n        \"optional\", optionalCapabilities,\n        \"required\", requiredCapabilities);\n    List<Object> request = ImmutableList.of(\"version\", capabilities);\n    return connection.run(request);\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> run(List<Object> command) {\n    return connection.run(command);\n  }\n\n  /**\n   * unsubscribes from all the subscriptions; convenience method\n   */\n  @Override\n  public ListenableFuture<Boolean> unsubscribeAll() {\n    Collection<ListenableFuture<Boolean>> unsubscribeAll = Collections2.transform(\n        subscriptions.keySet(),\n        new Function<SubscriptionDescriptor, ListenableFuture<Boolean>>() {\n          @Nullable\n          @Override\n          public ListenableFuture<Boolean> apply(@Nullable SubscriptionDescriptor input) {\n            return unsubscribe(input);\n          }\n        });\n    return Futures.transform(\n        Futures.allAsList(unsubscribeAll),\n        new Function<List<Boolean>, Boolean>() {\n          @Nullable\n          @Override\n          public Boolean apply(@Nullable List<Boolean> input) {\n            return !Collections2.filter(input, Predicates.equalTo(false)).isEmpty();\n          }\n        }, MoreExecutors.directExecutor());\n  }\n\n  /**\n   * closes the WatchmanConnection\n   */\n  @Override\n  public void close() throws IOException {\n    connection.close();\n  }\n\n  @Override\n  public void start() {\n    connection.start();\n  }\n\n  private class UnilateralCallbackImpl implements Callback {\n\n    @Override\n    public void call(Map<String, Object> message) throws Exception {\n      if (message.containsKey(SUBSCRIPTION_KEY)) {\n        String subscriptionId = (String) message.get(\"subscription\");\n        String root = (String) message.get(\"root\");\n        SubscriptionDescriptor subscription = new SubscriptionDescriptorBuilder()\n            .name(subscriptionId)\n            .root(root)\n            .build();\n\n        Callback listener = subscriptions.get(subscription);\n        if (listener == null) {\n          // TODO log error?!\n          return;\n        }\n        listener.call(message);\n      }\n    }\n  }\n\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/WatchmanConnection.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.util.Collection;\nimport java.util.Map;\nimport java.util.concurrent.BlockingQueue;\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.CountDownLatch;\nimport java.util.concurrent.ExecutorService;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.atomic.AtomicBoolean;\nimport java.util.concurrent.atomic.AtomicReference;\n\nimport com.facebook.watchman.bser.BserDeserializer;\nimport com.facebook.watchman.bser.BserSerializer;\n\nimport com.google.common.base.Optional;\nimport com.google.common.collect.Queues;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.ListeningExecutorService;\nimport com.google.common.util.concurrent.MoreExecutors;\nimport com.google.common.util.concurrent.SettableFuture;\nimport com.google.common.util.concurrent.ThreadFactoryBuilder;\nimport org.immutables.value.Value;\n\npublic class WatchmanConnection {\n\n  private final ListeningExecutorService outgoingMessageExecutor;\n  private final ExecutorService incomingMessageExecutor;\n  private final Callable<Map<String, Object>> incomingMessageGetter;\n  private final Optional<WatchmanTransport> transport;\n  private final OutputStream outgoingMessageStream;\n  private final Optional<Callback> unilateralCallback;\n  private final Optional<Collection<String>> unilateralLabels;\n  private final BlockingQueue<QueuedCommand> commandQueue;\n  private final AtomicBoolean processing;\n  private final BserSerializer bserSerializer;\n  private final Optional<WatchmanCommandListener> commandListener;\n\n  public WatchmanConnection(WatchmanTransport transport) throws IOException {\n    this(\n        incomingMessageGetterFromTransport(transport),\n        transport.getOutputStream(),\n        Optional.<Collection<String>>absent(),\n        Optional.<Callback>absent(),\n        Optional.<WatchmanCommandListener>absent(),\n        Optional.<WatchmanTransport>of(transport));\n  }\n\n  public WatchmanConnection(\n      final WatchmanTransport transport,\n      Optional<Collection<String>> unilateralLabels,\n      Optional<Callback> unilateralCallback) throws IOException {\n    this(\n        incomingMessageGetterFromTransport(transport),\n        transport.getOutputStream(),\n        unilateralLabels,\n        unilateralCallback,\n        Optional.<WatchmanCommandListener>absent(),\n        Optional.<WatchmanTransport>of(transport));\n  }\n\n  public WatchmanConnection(\n      final WatchmanTransport transport,\n      Optional<Collection<String>> unilateralLabels,\n      Optional<Callback> unilateralCallback,\n      Optional<WatchmanCommandListener> commandListener) throws IOException {\n    this(\n        incomingMessageGetterFromTransport(transport),\n        transport.getOutputStream(),\n        unilateralLabels,\n        unilateralCallback,\n        commandListener,\n        Optional.<WatchmanTransport>of(transport));\n  }\n\n  public WatchmanConnection(\n      Callable<Map<String, Object>> incomingMessageGetter,\n      OutputStream outgoingMessageStream) {\n    this(\n        incomingMessageGetter,\n        outgoingMessageStream,\n        Optional.<Collection<String>>absent(),\n        Optional.<Callback>absent(),\n        Optional.<WatchmanCommandListener>absent(),\n        Optional.<WatchmanTransport>absent());\n  }\n\n  public WatchmanConnection(\n      Callable<Map<String, Object>> incomingMessageGetter,\n      OutputStream outgoingMessageStream,\n      Optional<WatchmanCommandListener> commandListener) {\n    this(\n        incomingMessageGetter,\n        outgoingMessageStream,\n        Optional.<Collection<String>>absent(),\n        Optional.<Callback>absent(),\n        commandListener,\n        Optional.<WatchmanTransport>absent());\n  }\n\n  public WatchmanConnection(\n      Callable<Map<String, Object>> incomingMessageGetter,\n      OutputStream outgoingMessageStream,\n      Optional<Collection<String>> unilateralLabels,\n      Optional<Callback> unilateralCallback) {\n    this(\n        incomingMessageGetter,\n        outgoingMessageStream,\n        unilateralLabels,\n        unilateralCallback,\n        Optional.<WatchmanCommandListener>absent(),\n        Optional.<WatchmanTransport>absent());\n  }\n\n  public WatchmanConnection(\n      Callable<Map<String, Object>> incomingMessageGetter,\n      OutputStream outgoingMessageStream,\n      Optional<Collection<String>> unilateralLabels,\n      Optional<Callback> unilateralCallback,\n      Optional<WatchmanCommandListener> commandListener,\n      Optional<WatchmanTransport> optionalTransport) {\n    this.incomingMessageGetter = incomingMessageGetter;\n    this.outgoingMessageStream = outgoingMessageStream;\n    this.unilateralLabels = unilateralLabels;\n    this.unilateralCallback = unilateralCallback;\n    this.transport = optionalTransport;\n    this.processing = new AtomicBoolean(true);\n    this.outgoingMessageExecutor = MoreExecutors.listeningDecorator(\n        Executors.newSingleThreadExecutor(\n            new ThreadFactoryBuilder()\n                .setNameFormat(\"[watchman] Outgoing Message Executor\")\n                .setDaemon(true)\n                .build()));\n    this.commandQueue = Queues.newLinkedBlockingDeque();\n    this.bserSerializer = new BserSerializer();\n    this.commandListener = commandListener;\n    this.incomingMessageExecutor = Executors.newSingleThreadExecutor(\n        new ThreadFactoryBuilder()\n            .setNameFormat(\"[watchman] Incoming Message Executor\")\n            .setDaemon(true)\n            .build());\n  }\n\n  private boolean checkMessageUnilateral(Map<String, Object> response) {\n    if (! unilateralLabels.isPresent()) return false;\n    for (String label: unilateralLabels.get()) {\n      if (response.containsKey(label)) return true;\n    }\n    return false;\n  }\n\n  public ListenableFuture<Map<String, Object>> run(final Object command) {\n    if (! processing.get()) {\n      SettableFuture<Map<String, Object>> die = SettableFuture.create();\n      die.setException(new WatchmanException(\"connection closing down\"));\n      return die;\n    }\n    final CountDownLatch latch = new CountDownLatch(1);\n    final AtomicReference<Map<String, Object>> resultRef =\n        new AtomicReference<Map<String, Object>>();\n    final AtomicReference<Exception> errorRef = new AtomicReference<Exception>();\n    QueuedCommand queuedCommand = new QueuedCommandBuilder()\n        .command(command)\n        .latch(latch)\n        .resultRef(resultRef)\n        .errorRef(errorRef)\n        .build();\n    commandQueue.add(queuedCommand);\n    return outgoingMessageExecutor.submit(new Callable<Map<String, Object>>() {\n      @Override\n      public Map<String, Object> call() throws Exception {\n        if (commandListener.isPresent()) {\n          commandListener.get().onStart();\n        }\n        if (processing.get()) {\n          bserSerializer.serializeToStream(\n              command,\n              outgoingMessageStream);\n        }\n        if (commandListener.isPresent()) {\n          commandListener.get().onSent();\n        }\n        latch.await();\n        if (commandListener.isPresent()) {\n          commandListener.get().onReceived();\n        }\n        if (resultRef.get() != null) return resultRef.get();\n        throw errorRef.get();\n      }\n    });\n  }\n\n  private void failAllCommands(Exception e) {\n    processing.set(false);\n    for (QueuedCommand command: commandQueue) {\n      command.errorRef().set(e);\n      command.latch().countDown();\n    }\n  }\n\n  public void close() throws IOException {\n    failAllCommands(new WatchmanException(\"connection closing down\"));\n    outgoingMessageStream.close();\n    incomingMessageExecutor.shutdown();\n    outgoingMessageExecutor.shutdown();\n\n    if (transport.isPresent()) {\n      transport.get().close();\n    }\n  }\n\n  public void start() {\n    this.incomingMessageExecutor.execute(new IncomingMessageThread());\n  }\n\n  private class IncomingMessageThread implements Runnable {\n\n    @Override\n    public void run() {\n      while (processing.get()) {\n        try {\n          Map<String, Object> deserializedResponse = incomingMessageGetter.call();\n          if (deserializedResponse == null) continue;\n\n          if (checkMessageUnilateral(deserializedResponse)) {\n            if (unilateralCallback.isPresent()) {\n              unilateralCallback.get().call(deserializedResponse);\n            } else {\n              failAllCommands(\n                  new Exception(\"Received unilateral message without any callback registered\"));\n              return;\n            }\n            continue;\n          }\n\n          QueuedCommand lastCommand = commandQueue.take();\n          if (deserializedResponse.containsKey(\"error\")) {\n            lastCommand.errorRef().set(new WatchmanException(\n                String.valueOf(deserializedResponse.get(\"error\")),\n                deserializedResponse));\n          } else {\n            lastCommand.resultRef().set(deserializedResponse);\n          }\n          lastCommand.latch().countDown();\n        } catch (Exception e) {\n          failAllCommands(e);\n          return;\n        }\n      }\n    }\n  }\n\n  @Value.Immutable\n  @Value.Style(visibility = Value.Style.ImplementationVisibility.PRIVATE)\n  interface QueuedCommand {\n    Object command();\n    CountDownLatch latch();\n    AtomicReference<Map<String, Object>> resultRef();\n    AtomicReference<Exception> errorRef();\n  }\n\n  /**\n   * Permits the synchronization of test classes with the thread sending messages. If the\n   * WatchmanConnection has a WatchmanCommandListener attached, it will make sure that the methods\n   * will be called:\n   * <ul>\n   *   <li>onStart: when the thread picks up the command</li>\n   *   <li>onSent: when the serialization to the OutputStream is done</li>\n   *   <li>onReceived: when a response from Watchman is received</li>\n   * </ul>\n   */\n  public interface WatchmanCommandListener {\n    void onStart();\n    void onSent();\n    void onReceived();\n  }\n\n  /**\n   * Generates a Callable that can be invoked repeatedly to extract\n   * deserialized messages from watchman's transport.\n   */\n  private static Callable<Map<String, Object>> incomingMessageGetterFromTransport(WatchmanTransport transport)\n      throws IOException {\n    final InputStream inputStream = transport.getInputStream();\n    final BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    return new Callable<Map<String, Object>>() {\n      @Override\n      public Map<String, Object> call() throws Exception {\n        return deserializer.deserialize(inputStream);\n      }\n    };\n  }\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/WatchmanException.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.util.Map;\n\npublic class WatchmanException extends Exception {\n\n  private final Map<String, Object> response;\n\n  public WatchmanException() {\n    super();\n    response = null;\n  }\n\n  public WatchmanException(String reason) {\n    super(reason);\n    response = null;\n  }\n\n  public WatchmanException(String error, Map<String, Object> response) {\n    super(error);\n    this.response = response;\n  }\n\n  public Map<String, Object> getResponse() {\n    return response;\n  }\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/WatchmanTransport.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.io.Closeable;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\npublic interface WatchmanTransport extends Closeable {\n  InputStream getInputStream();\n  OutputStream getOutputStream();\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/WatchmanTransportBuilder.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.nio.ByteBuffer;\nimport java.nio.channels.Channels;\nimport java.nio.channels.WritableByteChannel;\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\nimport java.util.Map;\nimport java.util.concurrent.TimeUnit;\n\nimport com.facebook.watchman.bser.BserDeserializer;\nimport com.facebook.watchman.environment.ExecutableFinder;\nimport com.facebook.watchman.unixsocket.UnixDomainSocket;\n\nimport com.facebook.watchman.windowspipe.WindowsNamedPipe;\nimport com.google.common.base.Optional;\nimport com.google.common.collect.ImmutableMap;\nimport com.sun.jna.Platform;\nimport com.zaxxer.nuprocess.NuAbstractProcessHandler;\nimport com.zaxxer.nuprocess.NuProcess;\nimport com.zaxxer.nuprocess.NuProcessBuilder;\n\nimport static com.google.common.base.Preconditions.checkArgument;\n\npublic class WatchmanTransportBuilder {\n  private static class BufferingOutputHandler extends NuAbstractProcessHandler {\n\n    private final ByteArrayOutputStream buffer;\n    private final WritableByteChannel sink;\n    private Optional<IOException> throwable;\n    private NuProcess process = null;\n\n    public BufferingOutputHandler() {\n      buffer = new ByteArrayOutputStream();\n      sink = Channels.newChannel(buffer);\n      throwable = Optional.absent();\n    }\n\n    @Override\n    public void onStart(NuProcess nuProcess) {\n      super.onStart(nuProcess);\n      this.process = nuProcess;\n    }\n\n    @Override\n    public void onStdout(ByteBuffer buffer, boolean closed) {\n      try {\n        sink.write(buffer);\n        if (closed) {\n          sink.close();\n        }\n      } catch (IOException e) {\n        throwable = Optional.of(e);\n        process.destroy(false);\n      }\n    }\n\n    public ByteBuffer getOutput() throws IOException {\n      if (throwable.isPresent()) {\n        throw throwable.get();\n      }\n      return ByteBuffer.wrap(buffer.toByteArray());\n    }\n  }\n\n  public static WatchmanTransport discoverTransport() throws WatchmanTransportUnavailableException {\n    return discoverTransport(0, TimeUnit.SECONDS); // forever\n  }\n\n  public static WatchmanTransport discoverTransport(long duration, TimeUnit unit)\n      throws WatchmanTransportUnavailableException {\n    Optional<Path> optionalExecutable = ExecutableFinder.getOptionalExecutable(\n        Paths.get(\"watchman\"),\n        ImmutableMap.copyOf(System.getenv()));\n    if (!optionalExecutable.isPresent()) {\n      throw new WatchmanTransportUnavailableException();\n    }\n    return discoverTransport(optionalExecutable.get(), duration, unit);\n  }\n\n  public static WatchmanTransport discoverTransport(Path watchmanPath, long duration, TimeUnit unit)\n      throws WatchmanTransportUnavailableException {\n    NuProcessBuilder processBuilder = new NuProcessBuilder(\n        watchmanPath.toString(),\n        \"--output-encoding=bser\",\n        \"get-sockname\");\n\n    BufferingOutputHandler outputHandler = new BufferingOutputHandler();\n    processBuilder.setProcessListener(outputHandler);\n    NuProcess process = processBuilder.start();\n    if (process == null) {\n      throw new WatchmanTransportUnavailableException(\"Could not create process\");\n    }\n    int exitCode;\n    try {\n      exitCode = process.waitFor(duration, unit);\n    } catch (InterruptedException e) {\n      throw new WatchmanTransportUnavailableException(\"Subprocess interrupted\", e);\n    }\n\n    if (exitCode == Integer.MIN_VALUE) {\n      throw new WatchmanTransportUnavailableException(\"Subprocess timed out\");\n    }\n    if (exitCode != 0) {\n      throw new WatchmanTransportUnavailableException(\n          \"Subprocess non-zero exit status: \" + String.valueOf(exitCode));\n    }\n\n    ByteBuffer output;\n    try {\n      output = outputHandler.getOutput();\n    } catch (IOException e) {\n      throw new WatchmanTransportUnavailableException(\"Could not read subprocess output\", e);\n    }\n\n    InputStream stream = new ByteArrayInputStream(output.array());\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Map<String, Object> deserializedValue = null;\n    try {\n      deserializedValue = deserializer.deserialize(stream);\n    } catch (IOException e) {\n      throw new WatchmanTransportUnavailableException(\"Could not deserialize BSER output\", e);\n    }\n\n    checkArgument(deserializedValue.containsKey(\"sockname\"));\n    String sockname = String.valueOf(deserializedValue.get(\"sockname\"));\n    try {\n      if (Platform.isWindows()) {\n        return new WindowsNamedPipe(sockname);\n      } else {\n        return UnixDomainSocket.createSocketWithPath(Paths.get(sockname));\n      }\n    } catch (IOException e) {\n      throw new WatchmanTransportUnavailableException(\"Could not create watchman transport to resulting path\", e);\n    }\n  }\n\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/WatchmanTransportUnavailableException.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\npublic class WatchmanTransportUnavailableException extends Exception {\n\n  public WatchmanTransportUnavailableException() {\n    super();\n  }\n\n  public WatchmanTransportUnavailableException(String message) {\n    super(message);\n  }\n\n  public WatchmanTransportUnavailableException(String message, Throwable cause) {\n    super(message, cause);\n  }\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/bser/BserConstants.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.bser;\n\npublic class BserConstants {\n  // Utility class, do not instantiate.\n  private BserConstants() { }\n\n  public static final byte BSER_ARRAY = 0x00;\n  public static final byte BSER_OBJECT = 0x01;\n  public static final byte BSER_STRING = 0x02;\n  public static final byte BSER_INT8 = 0x03;\n  public static final byte BSER_INT16 = 0x04;\n  public static final byte BSER_INT32 = 0x05;\n  public static final byte BSER_INT64 = 0x06;\n  public static final byte BSER_REAL = 0x07;\n  public static final byte BSER_TRUE = 0x08;\n  public static final byte BSER_FALSE = 0x09;\n  public static final byte BSER_NULL = 0x0a;\n  public static final byte BSER_TEMPLATE = 0x0b;\n  public static final byte BSER_SKIP = 0x0c;\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/bser/BserDeserializer.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.bser;\n\n// CHECKSTYLE.OFF: AvoidStarImport\nimport static com.facebook.watchman.bser.BserConstants.*;\n\nimport com.google.common.base.Preconditions;\nimport com.google.common.io.ByteStreams;\n\nimport java.io.InputStream;\nimport java.io.IOException;\n\nimport java.nio.BufferUnderflowException;\nimport java.nio.ByteBuffer;\nimport java.nio.ByteOrder;\nimport java.nio.charset.CharsetDecoder;\nimport java.nio.charset.CodingErrorAction;\nimport java.nio.charset.StandardCharsets;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util.LinkedHashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.TreeMap;\n\nimport javax.annotation.Nullable;\n\nimport com.facebook.watchman.Deserializer;\n\n/**\n * Decoder for the BSER binary JSON format used by the Watchman service:\n *\n * https://facebook.github.io/watchman/docs/bser.html\n */\npublic class BserDeserializer implements Deserializer {\n  public enum KeyOrdering {\n      UNSORTED,\n      SORTED\n  }\n\n  /**\n   * Exception thrown when BSER parser unexpectedly reaches the end of\n   * the input stream.\n   */\n  @SuppressWarnings(\"serial\")\n  public static class BserEofException extends IOException {\n    public BserEofException(String message) {\n      super(message);\n    }\n\n    public BserEofException(String message, Throwable cause) {\n      super(message, cause);\n    }\n  }\n\n  private final KeyOrdering keyOrdering;\n  private final CharsetDecoder utf8Decoder;\n\n  /**\n   * If {@code keyOrdering} is {@code SORTED}, any {@code Map} objects\n   * in the resulting value will have their keys sorted in natural\n   * order. Otherwise, any {@code Map}s will have their keys in the\n   * same order with which they were encoded.\n   */\n  public BserDeserializer(KeyOrdering keyOrdering) {\n    this.keyOrdering = keyOrdering;\n    this.utf8Decoder = StandardCharsets.UTF_8\n        .newDecoder()\n        .onMalformedInput(CodingErrorAction.REPORT);\n  }\n\n  // 2 bytes marker, 1 byte int size\n  private static final int INITIAL_SNIFF_LEN = 3;\n\n  // 2 bytes marker, 1 byte int size, up to 8 bytes int64 value\n  private static final int SNIFF_BUFFER_SIZE = 13;\n\n  /**\n   * Deserializes the next BSER-encoded value from the stream.\n   *\n   * @return either a {@link String}, {@link Number}, {@link List},\n   * {@link Map}, or {@code null}, depending on the type of the\n   * top-level encoded object.\n   */\n  @Nullable\n  public Object deserializeBserValue(InputStream inputStream) throws IOException {\n    try {\n      return deserializeRecursive(readBserBuffer(inputStream));\n    } catch (BufferUnderflowException e) {\n      throw new BserEofException(\"Prematurely reached end of BSER buffer\", e);\n    }\n  }\n\n  /**\n   * Same as {@link BserDeserializer#deserializeBserValue(InputStream)}, but respecting the\n   * {@link Deserializer#deserialize(InputStream)} interface.\n   */\n  @SuppressWarnings(\"unchecked\")\n  public Map<String, Object> deserialize(InputStream inputStream) throws IOException {\n    return (Map<String, Object>) deserializeBserValue(inputStream);\n  }\n\n  private ByteBuffer readBserBuffer(InputStream inputStream) throws IOException {\n    ByteBuffer sniffBuffer = ByteBuffer.allocate(SNIFF_BUFFER_SIZE).order(ByteOrder.nativeOrder());\n    Preconditions.checkState(sniffBuffer.hasArray());\n\n    int sniffBytesRead = ByteStreams.read(inputStream, sniffBuffer.array(), 0, INITIAL_SNIFF_LEN);\n    if (sniffBytesRead < INITIAL_SNIFF_LEN) {\n      throw new BserEofException(\n          String.format(\n              \"Invalid BSER header (expected %d bytes, got %d bytes)\",\n              INITIAL_SNIFF_LEN,\n              sniffBytesRead));\n    }\n\n    if (sniffBuffer.get() != 0x00 || sniffBuffer.get() != 0x01) {\n      throw new IOException(\"Invalid BSER header\");\n    }\n\n    byte lengthType = sniffBuffer.get();\n    int lengthBytesRemaining;\n    switch (lengthType) {\n      case BSER_INT8:\n        lengthBytesRemaining = 1;\n        break;\n      case BSER_INT16:\n        lengthBytesRemaining = 2;\n        break;\n      case BSER_INT32:\n        lengthBytesRemaining = 4;\n        break;\n      case BSER_INT64:\n        lengthBytesRemaining = 8;\n        break;\n      default:\n        throw new IOException(\n            String.format(\"Unrecognized BSER header length type %d\", lengthType));\n    }\n    int lengthBytesRead = ByteStreams.read(\n        inputStream,\n        sniffBuffer.array(),\n        sniffBuffer.position(),\n        lengthBytesRemaining);\n    if (lengthBytesRead < lengthBytesRemaining) {\n      throw new BserEofException(\n          String.format(\n              \"Invalid BSER header length (expected %d bytes, got %d bytes)\",\n              lengthBytesRemaining,\n              lengthBytesRead));\n    }\n    int bytesRemaining = deserializeIntLen(sniffBuffer, lengthType);\n\n    ByteBuffer bserBuffer = ByteBuffer.allocate(bytesRemaining)\n        .order(ByteOrder.nativeOrder());\n    Preconditions.checkState(bserBuffer.hasArray());\n\n    int remainingBytesRead = ByteStreams.read(\n        inputStream,\n        bserBuffer.array(),\n        0,\n        bytesRemaining);\n\n    if (remainingBytesRead < bytesRemaining) {\n      throw new IOException(\n          String.format(\n              \"Invalid BSER header (expected %d bytes, got %d bytes)\",\n              bytesRemaining,\n              remainingBytesRead));\n    }\n\n    return bserBuffer;\n  }\n\n  private int deserializeIntLen(ByteBuffer buffer, byte type) throws IOException {\n    long value = deserializeNumber(buffer, type).longValue();\n    if (value > Integer.MAX_VALUE) {\n      throw new IOException(\n          String.format(\n              \"BSER length out of range (%d > %d)\",\n              value,\n              Integer.MAX_VALUE));\n    } else if (value < 0) {\n      throw new IOException(\n          String.format(\n              \"BSER length out of range (%d < 0)\",\n              value));\n    }\n    return (int) value;\n  }\n\n  private Number deserializeNumber(ByteBuffer buffer, byte type) throws IOException {\n    switch (type) {\n      case BSER_INT8:\n        return buffer.get();\n      case BSER_INT16:\n        return buffer.getShort();\n      case BSER_INT32:\n        return buffer.getInt();\n      case BSER_INT64:\n        return buffer.getLong();\n      default:\n        throw new IOException(String.format(\"Invalid BSER number encoding %d\", type));\n    }\n  }\n\n  private String deserializeString(ByteBuffer buffer) throws IOException {\n    byte intType = buffer.get();\n    int len = deserializeIntLen(buffer, intType);\n\n    // We use a CharsetDecoder here instead of String(byte[], Charset)\n    // because we want it to throw an exception for any non-UTF-8 input.\n    buffer.limit(buffer.position() + len);\n\n    try {\n      // We'll likely have many duplicates of this string. Java 7 and\n      // up have not-insane behavior of String.intern(), so we'll use\n      // it to deduplicate the String instances.\n      //\n      // See: http://java-performance.info/string-intern-in-java-6-7-8/\n      return utf8Decoder.decode(buffer).toString().intern();\n    } finally {\n      buffer.limit(buffer.capacity());\n    }\n  }\n\n  private List<Object> deserializeArray(ByteBuffer buffer) throws IOException {\n    byte intType = buffer.get();\n    int numItems = deserializeIntLen(buffer, intType);\n    if (numItems == 0) {\n      return Collections.emptyList();\n    }\n    ArrayList<Object> list = new ArrayList<Object>(numItems);\n    for (int i = 0; i < numItems; i++) {\n      list.add(deserializeRecursive(buffer));\n    }\n    return list;\n  }\n\n  private Map<String, Object> deserializeObject(ByteBuffer buffer) throws IOException {\n    byte intType = buffer.get();\n    int numItems = deserializeIntLen(buffer, intType);\n    if (numItems == 0) {\n      return Collections.emptyMap();\n    }\n    Map<String, Object> map;\n    if (keyOrdering == KeyOrdering.UNSORTED) {\n      map = new LinkedHashMap<String, Object>(numItems);\n    } else {\n      map = new TreeMap<String, Object>();\n    }\n    for (int i = 0; i < numItems; i++) {\n      byte stringType = buffer.get();\n      if (stringType != BSER_STRING) {\n        throw new IOException(\n            String.format(\n                \"Unrecognized BSER object key type %d, expected string\",\n                stringType));\n      }\n      String key = deserializeString(buffer);\n      Object value = deserializeRecursive(buffer);\n      map.put(key, value);\n    }\n    return map;\n  }\n\n  private List<Map<String, Object>> deserializeTemplate(ByteBuffer buffer) throws IOException {\n    byte arrayType = buffer.get();\n    if (arrayType != BSER_ARRAY) {\n      throw new IOException(String.format(\"Expected ARRAY to follow TEMPLATE, got %d\", arrayType));\n    }\n    List<Object> keys = deserializeArray(buffer);\n    byte numItemsType = buffer.get();\n    int numItems = deserializeIntLen(buffer, numItemsType);\n    ArrayList<Map<String, Object>> result = new ArrayList<Map<String, Object>>();\n    for (int itemIdx = 0; itemIdx < numItems; itemIdx++) {\n      Map<String, Object> obj;\n      if (keyOrdering == KeyOrdering.UNSORTED) {\n        obj = new LinkedHashMap<String, Object>();\n      } else {\n        obj = new TreeMap<String, Object>();\n      }\n      for (int keyIdx = 0; keyIdx < keys.size(); keyIdx++) {\n        byte keyValueType = buffer.get();\n        if (keyValueType != BSER_SKIP) {\n          String key = (String) keys.get(keyIdx);\n          obj.put(key, deserializeRecursiveWithType(buffer, keyValueType));\n        }\n      }\n      result.add(obj);\n    }\n    return result;\n  }\n\n  @Nullable\n  private Object deserializeRecursive(ByteBuffer buffer) throws IOException {\n    byte type = buffer.get();\n    return deserializeRecursiveWithType(buffer, type);\n  }\n\n  private Object deserializeRecursiveWithType(ByteBuffer buffer, byte type) throws IOException {\n    switch (type) {\n      case BSER_INT8:\n      case BSER_INT16:\n      case BSER_INT32:\n      case BSER_INT64:\n        return deserializeNumber(buffer, type);\n      case BSER_REAL:\n        return buffer.getDouble();\n      case BSER_TRUE:\n        return true;\n      case BSER_FALSE:\n        return false;\n      case BSER_NULL:\n        return null;\n      case BSER_STRING:\n        return deserializeString(buffer);\n      case BSER_ARRAY:\n        return deserializeArray(buffer);\n      case BSER_OBJECT:\n        return deserializeObject(buffer);\n      case BSER_TEMPLATE:\n        return deserializeTemplate(buffer);\n      default:\n        throw new IOException(String.format(\"Unrecognized BSER value type %d\", type));\n    }\n  }\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/bser/BserSerializer.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.bser;\n\n// CHECKSTYLE.OFF: AvoidStarImport\nimport static com.facebook.watchman.bser.BserConstants.*;\n\nimport com.google.common.io.BaseEncoding;\n\nimport java.io.OutputStream;\nimport java.io.IOException;\n\nimport java.nio.ByteBuffer;\nimport java.nio.ByteOrder;\nimport java.nio.CharBuffer;\nimport java.nio.charset.CharacterCodingException;\nimport java.nio.charset.CharsetEncoder;\nimport java.nio.charset.CodingErrorAction;\nimport java.nio.charset.StandardCharsets;\nimport java.nio.channels.Channels;\nimport java.nio.channels.WritableByteChannel;\n\nimport java.util.List;\nimport java.util.Map;\n\n/**\n * Encoder for the BSER binary JSON format used by the Watchman service:\n *\n * https://facebook.github.io/watchman/docs/bser.html\n */\npublic class BserSerializer {\n  private static final int INITIAL_BUFFER_SIZE = 8192;\n  private static final byte[] EMPTY_HEADER = BaseEncoding.base16().decode(\"00010500000000\");\n\n  private enum BserIntegralEncodedSize {\n    INT8(1),\n    INT16(2),\n    INT32(4),\n    INT64(8);\n\n    public final int size;\n\n    private BserIntegralEncodedSize(int size) {\n      this.size = size;\n    }\n  }\n\n  private final CharsetEncoder utf8Encoder;\n\n  public BserSerializer() {\n    this.utf8Encoder = StandardCharsets.UTF_8\n        .newEncoder()\n        .onMalformedInput(CodingErrorAction.REPORT);\n  }\n\n  /**\n   * Serializes an object using BSER encoding to the stream.\n   */\n  public void serializeToStream(Object value, OutputStream outputStream) throws IOException {\n    ByteBuffer buffer = ByteBuffer\n        .allocate(INITIAL_BUFFER_SIZE)\n        .order(ByteOrder.nativeOrder());\n\n    buffer = serializeToBuffer(value, buffer);\n    buffer.flip();\n\n    WritableByteChannel c = Channels.newChannel(outputStream);\n    try {\n      c.write(buffer);\n    } finally {\n      if (c != null) {\n        c.close();\n      }\n    }\n  }\n\n  /**\n   * Serializes an object using BSER encoding. If possible, writes the object\n   * to the provided byte buffer and returns it. If the buffer is not big\n   * enough to hold the object, returns a new buffer.\n   *\n   * After returning, buffer.position() is advanced past the last encoded byte.\n   */\n  public ByteBuffer serializeToBuffer(Object value, ByteBuffer buffer) throws IOException {\n    buffer.put(EMPTY_HEADER);\n    buffer = appendRecursive(buffer, value, utf8Encoder);\n\n    int encodedLength = buffer.position() - EMPTY_HEADER.length;\n\n    // Overwrite the 32-bit length field at position 3 with the actual length of the object.\n    buffer.putInt(3, encodedLength);\n\n    return buffer;\n  }\n\n  @SuppressWarnings(\"unchecked\")\n  private static ByteBuffer appendRecursive(\n      ByteBuffer buffer,\n      Object value,\n      CharsetEncoder utf8Encoder) throws IOException {\n    if (value instanceof Boolean) {\n      buffer = increaseBufferCapacityIfNeeded(buffer, 1);\n      buffer.put(((Boolean) value) ? BSER_TRUE : BSER_FALSE);\n    } else if (value == null) {\n      buffer = increaseBufferCapacityIfNeeded(buffer, 1);\n      buffer.put(BSER_NULL);\n    } else if (value instanceof String) {\n      buffer = appendString(buffer, (String) value, utf8Encoder);\n    } else if (value instanceof Double || value instanceof Float) {\n      buffer = increaseBufferCapacityIfNeeded(buffer, 9);\n      buffer.put(BSER_REAL);\n      buffer.putDouble((Double) value);\n    } else if (value instanceof Long) {\n      buffer = appendLong(buffer, (Long) value);\n    } else if (value instanceof Integer) {\n      buffer = appendLong(buffer, (Integer) value);\n    } else if (value instanceof Short) {\n      buffer = appendLong(buffer, (Short) value);\n    } else if (value instanceof Byte) {\n      buffer = appendLong(buffer, (Byte) value);\n    } else if (value instanceof Map<?, ?>) {\n      Map<Object, Object> map = (Map<Object, Object>) value;\n      int mapLen = map.size();\n      BserIntegralEncodedSize encodedSize = getEncodedSize(mapLen);\n      buffer = increaseBufferCapacityIfNeeded(buffer, 2 + encodedSize.size);\n      buffer.put(BSER_OBJECT);\n      buffer = appendLongWithSize(buffer, mapLen, encodedSize);\n      for (Map.Entry<Object, Object> entry : map.entrySet()) {\n        if (!(entry.getKey() instanceof String)) {\n          throw new IOException(\n              String.format(\n                  \"Unrecognized map key type %s, expected string\",\n                  entry.getKey().getClass()));\n        }\n        buffer = appendString(buffer, (String) entry.getKey(), utf8Encoder);\n        buffer = appendRecursive(buffer, entry.getValue(), utf8Encoder);\n      }\n    } else if (value instanceof List<?>) {\n      List<Object> list = (List<Object>) value;\n      int listLen = list.size();\n      BserIntegralEncodedSize encodedSize = getEncodedSize(listLen);\n      buffer = increaseBufferCapacityIfNeeded(buffer, 2 + encodedSize.size);\n      buffer.put(BSER_ARRAY);\n      buffer = appendLongWithSize(buffer, listLen, encodedSize);\n      for (Object obj : list) {\n        buffer = appendRecursive(buffer, obj, utf8Encoder);\n      }\n    } else {\n      throw new RuntimeException(\"Cannot encode object: \" + value);\n    }\n\n    return buffer;\n  }\n\n  private static ByteBuffer appendString(\n      ByteBuffer buffer,\n      String value,\n      CharsetEncoder utf8Encoder) throws CharacterCodingException {\n    CharBuffer valueBuffer = CharBuffer.wrap(value);\n    ByteBuffer utf8String = utf8Encoder.encode(valueBuffer);\n    int utf8StringLenBytes = utf8String.remaining();\n    BserIntegralEncodedSize utf8StringLenSize = getEncodedSize(utf8StringLenBytes);\n    buffer = increaseBufferCapacityIfNeeded(\n        buffer,\n        2 + utf8StringLenSize.size + utf8StringLenBytes);\n    buffer.put(BSER_STRING);\n    buffer = appendLongWithSize(buffer, utf8StringLenBytes, utf8StringLenSize);\n    buffer.put(utf8String);\n    return buffer;\n  }\n\n  private static ByteBuffer appendLong(ByteBuffer buffer, long value) {\n    BserIntegralEncodedSize encodedSize = getEncodedSize(value);\n    buffer = increaseBufferCapacityIfNeeded(buffer, 1 + encodedSize.size);\n    return appendLongWithSize(buffer, value, encodedSize);\n  }\n\n  private static BserIntegralEncodedSize getEncodedSize(long value) {\n    if (value >= -0x80 && value <= 0x7F) {\n      return BserIntegralEncodedSize.INT8;\n    } else if (value >= -0x8000 && value <= 0x7FFF) {\n      return BserIntegralEncodedSize.INT16;\n    } else if (value >= -0x80000000 && value <= 0x7FFFFFFF) {\n      return BserIntegralEncodedSize.INT32;\n    } else if (value >= -0x8000000000000000L && value <= 0x7FFFFFFFFFFFFFFFL) {\n      return BserIntegralEncodedSize.INT64;\n    } else {\n      // We shouldn't be able to reach here.\n      throw new RuntimeException(\"Unhandled long value: \" + value);\n    }\n  }\n\n  private static ByteBuffer appendLongWithSize(\n      ByteBuffer buffer,\n      long value,\n      BserIntegralEncodedSize encodedSize) {\n    // We assume we've already increased the size of the buffer to hold\n    // the encoded size.\n    switch (encodedSize) {\n      case INT8:\n        buffer.put(BSER_INT8);\n        buffer.put((byte) value);\n        break;\n      case INT16:\n        buffer.put(BSER_INT16);\n        buffer.putShort((short) value);\n        break;\n      case INT32:\n        buffer.put(BSER_INT32);\n        buffer.putInt((int) value);\n        break;\n      case INT64:\n        buffer.put(BSER_INT64);\n        buffer.putLong(value);\n        break;\n    }\n    return buffer;\n  }\n\n  private static ByteBuffer increaseBufferCapacityIfNeeded(ByteBuffer buffer, int amount) {\n    int remaining = buffer.remaining();\n    if (remaining < amount) {\n      int capacity = buffer.capacity();\n      while (remaining < amount) {\n        remaining += capacity;\n        capacity *= 2;\n      }\n      buffer = resizeBufferWithCapacity(buffer, capacity);\n    }\n    return buffer;\n  }\n\n  private static ByteBuffer resizeBufferWithCapacity(ByteBuffer buffer, int capacity) {\n    buffer.flip();\n    return ByteBuffer\n        .allocate(capacity)\n        .order(buffer.order())\n        .put(buffer);\n  }\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/environment/ExecutableFinder.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.environment;\n\nimport java.io.IOException;\nimport java.nio.charset.Charset;\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\n\nimport com.google.common.base.Function;\nimport com.google.common.base.Optional;\nimport com.google.common.base.Splitter;\nimport com.google.common.collect.FluentIterable;\nimport com.google.common.collect.ImmutableCollection;\nimport com.google.common.collect.ImmutableMap;\nimport com.google.common.collect.ImmutableSet;\nimport com.sun.jna.Platform;\n\nimport static java.io.File.pathSeparator;\n\n/**\n * Given the name of an executable, search a set of (possibly platform-specific) known locations for\n * that executable.\n */\npublic class ExecutableFinder {\n\n  private static final ImmutableSet<String> DEFAULT_WINDOWS_EXTENSIONS =\n      ImmutableSet.of(\n          \".bat\",\n          \".cmd\",\n          \".com\",\n          \".cpl\",\n          \".exe\",\n          \".js\",\n          \".jse\",\n          \".msc\",\n          \".vbs\",\n          \".wsf\",\n          \".wsh\");\n  // Avoid using MorePaths.TO_PATH because of circular deps in this package\n  private static final Function<String, Path> TO_PATH = new Function<String, Path>() {\n    @Override\n    public Path apply(String path) {\n      return Paths.get(path);\n    }\n  };\n\n  private static final Function<Path, Boolean> IS_EXECUTABLE = new Function<Path, Boolean>() {\n    @Override\n    public Boolean apply(Path path) {\n      return ExecutableFinder.isExecutable(path);\n    }\n  };\n\n  public static Path getExecutable(\n      Path suggestedExecutable,\n      ImmutableMap<String, String> env) {\n    Optional<Path> exe = getOptionalExecutable(suggestedExecutable, env);\n    if (!exe.isPresent()) {\n      throw new RuntimeException(String.format(\n          \"Unable to locate %s on PATH, or it's not marked as being executable\",\n          suggestedExecutable));\n    }\n    return exe.get();\n  }\n\n  public static Optional<Path> getOptionalExecutable(\n      Path suggestedExecutable,\n      ImmutableMap<String, String> env) {\n    return getOptionalExecutable(suggestedExecutable, getPaths(env), getExecutableSuffixes(env));\n  }\n\n  public static Optional<Path> getOptionalExecutable(\n      Path suggestedExecutable,\n      ImmutableCollection<Path> path,\n      ImmutableCollection<String> fileSuffixes) {\n\n    // Fast path out of here.\n    if (isExecutable(suggestedExecutable)) {\n      return Optional.of(suggestedExecutable);\n    }\n\n    Optional<Path> executable = FileFinder.getOptionalFile(\n        FileFinder.combine(\n            /* prefixes */ null,\n            suggestedExecutable.toString(),\n            ImmutableSet.copyOf(fileSuffixes)),\n        path,\n        IS_EXECUTABLE);\n\n    return executable;\n  }\n\n  private static boolean isExecutable(Path exe) {\n    if (!Files.exists(exe)) {\n      return false;\n    }\n\n    if (Files.isSymbolicLink(exe)) {\n      try {\n        Path target = Files.readSymbolicLink(exe);\n        return isExecutable(exe.resolveSibling(target).normalize());\n      } catch (IOException e) { // NOPMD\n      } catch (SecurityException e) { // NOPMD\n\n      }\n    }\n\n    if (Files.isDirectory(exe)) {\n      return false;\n    }\n\n    if (!Files.isExecutable(exe) && !Files.isSymbolicLink(exe)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  private static ImmutableSet<Path> getPaths(ImmutableMap<String, String> env) {\n    ImmutableSet.Builder<Path> paths = ImmutableSet.builder();\n\n    // Add the empty path so that when we iterate over it, we can check for the suffixed version of\n    // a given path, be it absolute or not.\n    paths.add(Paths.get(\"\"));\n\n    String pathEnv = env.get(\"PATH\");\n    if (pathEnv != null) {\n      paths.addAll(\n          FluentIterable.from(Splitter.on(pathSeparator).omitEmptyStrings().split(pathEnv))\n              .transform(TO_PATH));\n    }\n\n    if (Platform.isMac()) {\n      Path osXPaths = Paths.get(\"/etc/paths\");\n      if (Files.exists(osXPaths)) {\n        try {\n          paths.addAll(\n              FluentIterable.from(Files.readAllLines(osXPaths, Charset.defaultCharset()))\n                  .transform(TO_PATH));\n        } catch (IOException e) {\n        }\n      }\n    }\n\n    return paths.build();\n  }\n\n  private static ImmutableSet<String> getExecutableSuffixes(ImmutableMap<String, String> env) {\n    if (Platform.isWindows()) {\n      String pathext = env.get(\"PATHEXT\");\n      if (pathext == null) {\n        return DEFAULT_WINDOWS_EXTENSIONS;\n      }\n      return ImmutableSet.<String>builder()\n          .addAll(Splitter.on(\";\").omitEmptyStrings().split(pathext))\n          .build();\n    }\n    return ImmutableSet.of(\"\");\n  }\n\n\n  /**\n   * Constructor hidden; there is no reason to instantiate this class.\n   */\n  private ExecutableFinder() {}\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/environment/FileFinder.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.environment;\n\nimport javax.annotation.Nullable;\n\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.util.Set;\n\nimport com.google.common.base.Function;\nimport com.google.common.base.Optional;\nimport com.google.common.collect.ImmutableSet;\n\n/**\n * Methods for finding files.\n */\npublic class FileFinder {\n  /**\n   * Filter that checks that a file exists.\n   */\n  public static final Function<Path, Boolean> EXISTS = new Function<Path, Boolean>() {\n    @Override\n    public Boolean apply(Path path) {\n      return Files.exists(path);\n    }\n  };\n\n  /**\n   * Filter that tests if a file is executable.\n   */\n  public static final Function<Path, Boolean> IS_EXECUTABLE = new Function<Path, Boolean>() {\n    @Override\n    public Boolean apply(Path path) {\n      return Files.isExecutable(path);\n    }\n  };\n\n  /**\n   * Filter that tests if a file is a regular file.\n   */\n  public static final Function<Path, Boolean> IS_REGULAR_FILE = new Function<Path, Boolean>() {\n    @Override\n    public Boolean apply(Path path) {\n      return Files.isRegularFile(path);\n    }\n  };\n\n  /**\n   * Combines prefixes, base, and suffixes to create a set of file names.\n   * @param prefixes set of prefixes. May be null or empty.\n   * @param base base name. May be empty.\n   * @param suffixes set of suffixes. May be null or empty.\n   * @return a set containing all combinations of prefix, base, and suffix.\n   */\n  public static ImmutableSet<String> combine(\n      @Nullable Set<String> prefixes,\n      String base,\n      @Nullable Set<String> suffixes) {\n\n    ImmutableSet<String> suffixedSet;\n    if (suffixes == null || suffixes.isEmpty()) {\n      suffixedSet = ImmutableSet.of(base);\n    } else {\n      ImmutableSet.Builder<String> suffixedBuilder = ImmutableSet.builder();\n      for (String suffix : suffixes) {\n        suffixedBuilder.add(base + suffix);\n      }\n      suffixedSet = suffixedBuilder.build();\n    }\n\n    if (prefixes == null || prefixes.isEmpty()) {\n      return suffixedSet;\n    } else {\n      ImmutableSet.Builder<String> builder = ImmutableSet.builder();\n      for (String prefix : prefixes) {\n        for (String suffix : suffixedSet) {\n          builder.add(prefix + suffix);\n        }\n      }\n      return builder.build();\n    }\n  }\n\n  /**\n   * Tries to find a file with a specific name in a search path.\n   * @param name file name to look for.\n   * @param searchPath directories to search.\n   * @return if found: the path to the file. if not found, Optional.absent().\n   */\n  public static Optional<Path> getOptionalFile(\n      String name,\n      Iterable<Path> searchPath) {\n    return getOptionalFile(name, searchPath, EXISTS);\n  }\n\n  /**\n   * Tries to find a file with a specific name in a search path.\n   * @param name file name to look for.\n   * @param searchPath directories to search.\n   * @param filter additional check that discovered paths must pass to be eligible.\n   * @return if found: the path to the file. if not found, Optional.absent().\n   */\n  public static Optional<Path> getOptionalFile(\n      String name,\n      Iterable<Path> searchPath,\n      Function<Path, Boolean> filter) {\n    return getOptionalFile(\n        ImmutableSet.of(name),\n        searchPath,\n        filter);\n  }\n\n  /**\n   * Tries to find a file with one of a number of possible names in a search path.\n   * @param possibleNames file names to look for.\n   * @param searchPath directories to search.\n   * @return if found: the path to the file. if not found, Optional.absent().\n   */\n  public static Optional<Path> getOptionalFile(\n      Set<String> possibleNames,\n      Iterable<Path> searchPath) {\n    return getOptionalFile(possibleNames, searchPath, EXISTS);\n  }\n\n  /**\n   * Tries to find a file with one of a number of possible names in a search path.\n   * @param possibleNames file names to look for.\n   * @param searchPath directories to search.\n   * @param filter additional check that discovered paths must pass to be eligible.\n   * @return if found: the path to the file. if not found, Optional.absent().\n   */\n  public static Optional<Path> getOptionalFile(\n      Set<String> possibleNames,\n      Iterable<Path> searchPath,\n      Function<Path, Boolean> filter) {\n\n    for (Path path : searchPath) {\n      for (String filename : possibleNames) {\n        Path resolved = path.resolve(filename);\n        if (filter.apply(resolved)) {\n          return Optional.of(resolved);\n        }\n      }\n    }\n\n    return Optional.absent();\n  }\n\n  /**\n   * Constructor hidden; there is no reason to instantiate this class.\n   */\n  private FileFinder() {}\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/unixsocket/ReferenceCountedFileDescriptor.java",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n /*\n\n Copyright 2004-2015, Martian Software, Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n */\n\npackage com.facebook.watchman.unixsocket;\n\nimport com.sun.jna.LastErrorException;\n\nimport java.io.IOException;\n\n/**\n * Encapsulates a file descriptor plus a reference count to ensure close requests\n * only close the file descriptor once the last reference to the file descriptor\n * is released.\n * <p>\n * If not explicitly closed, the file descriptor will be closed when\n * this object is finalized.\n */\nclass ReferenceCountedFileDescriptor {\n  private int fd;\n  private int fdRefCount;\n  private boolean closePending;\n\n  public ReferenceCountedFileDescriptor(int fd) {\n    this.fd = fd;\n    this.fdRefCount = 0;\n    this.closePending = false;\n  }\n\n  @Override\n  protected void finalize() throws IOException {\n    close();\n  }\n\n  public synchronized int acquire() {\n    fdRefCount++;\n    return fd;\n  }\n\n  public synchronized void release() throws IOException {\n    fdRefCount--;\n    if (fdRefCount == 0 && closePending && fd != -1) {\n      doClose();\n    }\n  }\n\n  public synchronized void close() throws IOException {\n    if (fd == -1 || closePending) {\n      return;\n    }\n\n    if (fdRefCount == 0) {\n      doClose();\n    } else {\n      // Another thread has the FD. We'll close it when they release the reference.\n      closePending = true;\n    }\n  }\n\n  private void doClose() throws IOException {\n    try {\n      UnixDomainSocketLibrary.close(fd);\n      fd = -1;\n    } catch (LastErrorException e) {\n      throw new IOException(e);\n    }\n  }\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/unixsocket/UnixDomainSocket.java",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n\n Copyright 2004-2015, Martian Software, Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n */\n\npackage com.facebook.watchman.unixsocket;\n\nimport com.facebook.watchman.WatchmanTransport;\nimport com.sun.jna.LastErrorException;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\n\nimport java.nio.file.Path;\nimport java.nio.ByteBuffer;\n\nimport java.net.Socket;\n\n/**\n * Implements a {@link Socket} backed by a native Unix domain socket.\n *\n * Instances of this class always return {@code null} for\n * {@link Socket#getInetAddress()}, {@link Socket#getLocalAddress()},\n * {@link Socket#getLocalSocketAddress()}, {@link Socket#getRemoteSocketAddress()}.\n *\n * If not explicitly closed, will close the file descriptor when finalized.\n *\n * Caller is responsible for closing the streams returned from\n * {@link #getInputStream()} and {@link #getOutputStream()}.\n */\npublic class UnixDomainSocket extends Socket implements WatchmanTransport {\n  private final ReferenceCountedFileDescriptor fd;\n  private final InputStream is;\n  private final OutputStream os;\n\n  /**\n   * Creates a Unix domain socket bound to a path.\n   */\n  public static UnixDomainSocket createSocketWithPath(Path path) throws IOException {\n    int fd = -1;\n    try {\n      fd = UnixDomainSocketLibrary.socket(\n          UnixDomainSocketLibrary.PF_LOCAL,\n          UnixDomainSocketLibrary.SOCK_STREAM,\n          0);\n      UnixDomainSocketLibrary.SockaddrUn address =\n          new UnixDomainSocketLibrary.SockaddrUn(path.toString());\n      UnixDomainSocketLibrary.connect(fd, address, address.size());\n      return new UnixDomainSocket(new ReferenceCountedFileDescriptor(fd));\n    } catch (LastErrorException e) {\n      if (fd != -1) {\n        UnixDomainSocketLibrary.close(fd);\n      }\n      throw new IOException(e);\n    }\n  }\n\n  /**\n   * Creates a Unix domain socket backed by a native file descriptor.\n   */\n  private UnixDomainSocket(ReferenceCountedFileDescriptor fd) {\n    this.fd = fd;\n    this.is = new UnixDomainSocketInputStream();\n    this.os = new UnixDomainSocketOutputStream();\n  }\n\n  @Override\n  public InputStream getInputStream() {\n    return is;\n  }\n\n  @Override\n  public OutputStream getOutputStream() {\n    return os;\n  }\n\n  @Override\n  public void shutdownInput() throws IOException {\n    doShutdown(UnixDomainSocketLibrary.SHUT_RD);\n  }\n\n  @Override\n  public void shutdownOutput() throws IOException {\n    doShutdown(UnixDomainSocketLibrary.SHUT_WR);\n  }\n\n  private void doShutdown(int how) throws IOException {\n    try {\n      int socketFd = fd.acquire();\n      if (socketFd != -1) {\n        UnixDomainSocketLibrary.shutdown(socketFd, how);\n      }\n    } catch (LastErrorException e) {\n      throw new IOException(e);\n    } finally {\n      fd.release();\n    }\n  }\n\n  @Override\n  public void close() throws IOException {\n    super.close();\n    try {\n      // This might not close the FD right away. In case we are about\n      // to read or write on another thread, it will delay the close\n      // until the read or write completes, to prevent the FD from\n      // being re-used for a different purpose and the other thread\n      // reading from a different FD.\n      fd.close();\n    } catch (LastErrorException e) {\n      throw new IOException(e);\n    }\n  }\n\n  @Override\n  protected void finalize() throws IOException {\n    close();\n  }\n\n  private class UnixDomainSocketInputStream extends InputStream {\n    @Override\n    public int read() throws IOException {\n      ByteBuffer buf = ByteBuffer.allocate(1);\n      int result;\n      if (doRead(buf) == 0) {\n        result = -1;\n      } else {\n        // Make sure to & with 0xFF to avoid sign extension\n        result = 0xFF & buf.get();\n      }\n      return result;\n    }\n\n    @Override\n    public int read(byte[] b, int off, int len) throws IOException {\n      if (len == 0) {\n        return 0;\n      }\n      ByteBuffer buf = ByteBuffer.wrap(b, off, len);\n      int result = doRead(buf);\n      if (result == 0) {\n        result = -1;\n      }\n      return result;\n    }\n\n    private int doRead(ByteBuffer buf) throws IOException {\n      try {\n        int fdToRead = fd.acquire();\n        if (fdToRead == -1) {\n          return -1;\n        }\n        return UnixDomainSocketLibrary.read(fdToRead, buf, buf.remaining());\n      } catch (LastErrorException e) {\n        throw new IOException(e);\n      } finally {\n        fd.release();\n      }\n    }\n  }\n\n  private class UnixDomainSocketOutputStream extends OutputStream {\n\n    @Override\n    public void write(int b) throws IOException {\n      ByteBuffer buf = ByteBuffer.allocate(1);\n      buf.put(0, (byte) (0xFF & b));\n      doWrite(buf);\n    }\n\n    @Override\n    public void write(byte[] b, int off, int len) throws IOException {\n      if (len == 0) {\n        return;\n      }\n      ByteBuffer buf = ByteBuffer.wrap(b, off, len);\n      doWrite(buf);\n    }\n\n    private void doWrite(ByteBuffer buf) throws IOException {\n      try {\n        int fdToWrite = fd.acquire();\n        if (fdToWrite == -1) {\n          return;\n        }\n        int ret = UnixDomainSocketLibrary.write(fdToWrite, buf, buf.remaining());\n        if (ret != buf.remaining()) {\n          // This shouldn't happen with standard blocking Unix domain sockets.\n          throw new IOException(\"Could not write \" + buf.remaining() + \" bytes as requested \" +\n                                \"(wrote \" + ret + \" bytes instead)\");\n        }\n      } catch (LastErrorException e) {\n        throw new IOException(e);\n      } finally {\n        fd.release();\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/unixsocket/UnixDomainSocketLibrary.java",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n\n Copyright 2004-2015, Martian Software, Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n */\n\npackage com.facebook.watchman.unixsocket;\n\nimport com.sun.jna.LastErrorException;\nimport com.sun.jna.Native;\nimport com.sun.jna.Platform;\nimport com.sun.jna.Structure;\nimport com.sun.jna.Union;\nimport com.sun.jna.ptr.IntByReference;\n\nimport java.io.IOException;\nimport java.nio.ByteBuffer;\nimport java.util.Arrays;\nimport java.util.List;\n\n/**\n * Utility class to bridge native Unix domain socket calls to Java using JNA.\n */\nclass UnixDomainSocketLibrary {\n  public static final int PF_LOCAL = 1;\n  public static final int AF_LOCAL = 1;\n  public static final int SOCK_STREAM = 1;\n\n  public static final int SHUT_RD = 0;\n  public static final int SHUT_WR = 1;\n\n  // Utility class, do not instantiate.\n  private UnixDomainSocketLibrary() { }\n\n  // BSD platforms write a length byte at the start of struct sockaddr_un.\n  private static final boolean HAS_SUN_LEN = isBsdish();\n\n  private static boolean isBsdish() {\n    return\n      Platform.isMac() || Platform.isFreeBSD() || Platform.isNetBSD() ||\n      Platform.isOpenBSD() || Platform.iskFreeBSD();\n  }\n\n  /**\n   * Bridges {@code struct sockaddr_un} to and from native code.\n   */\n  public static class SockaddrUn extends Structure implements Structure.ByReference {\n    /**\n     * On BSD platforms, the {@code sun_len} and {@code sun_family} values in\n     * {@code struct sockaddr_un}.\n     */\n    public static class SunLenAndFamily extends Structure {\n      public byte sunLen;\n      public byte sunFamily;\n\n      @Override\n      protected List<String> getFieldOrder() {\n        return Arrays.asList(new String[] { \"sunLen\", \"sunFamily\" });\n      }\n    }\n\n    /**\n     * On BSD platforms, {@code sunLenAndFamily} will be present.\n     * On other platforms, only {@code sunFamily} will be present.\n     */\n    public static class SunFamily extends Union {\n      public SunLenAndFamily sunLenAndFamily;\n      public short sunFamily;\n    }\n\n    public SunFamily sunFamily = new SunFamily();\n    public byte[] sunPath = new byte[104];\n\n    /**\n     * Constructs an empty {@code struct sockaddr_un}.\n     */\n    public SockaddrUn() {\n      if (HAS_SUN_LEN) {\n        sunFamily.sunLenAndFamily = new SunLenAndFamily();\n        sunFamily.setType(SunLenAndFamily.class);\n      } else {\n        sunFamily.setType(Short.TYPE);\n      }\n      allocateMemory();\n    }\n\n    /**\n     * Constructs a {@code struct sockaddr_un} with a path whose bytes are encoded\n     * using the default encoding of the platform.\n     */\n    public SockaddrUn(String path) throws IOException {\n      byte[] pathBytes = path.getBytes();\n      if (pathBytes.length > sunPath.length - 1) {\n        throw new IOException(\n            \"Cannot fit name [\" + path + \"] in maximum unix domain socket length\");\n      }\n      System.arraycopy(pathBytes, 0, sunPath, 0, pathBytes.length);\n      sunPath[pathBytes.length] = (byte) 0;\n      if (HAS_SUN_LEN) {\n        int len = fieldOffset(\"sunPath\") + pathBytes.length;\n        sunFamily.sunLenAndFamily = new SunLenAndFamily();\n        sunFamily.sunLenAndFamily.sunLen = (byte) len;\n        sunFamily.sunLenAndFamily.sunFamily = AF_LOCAL;\n        sunFamily.setType(SunLenAndFamily.class);\n      } else {\n        sunFamily.sunFamily = AF_LOCAL;\n        sunFamily.setType(Short.TYPE);\n      }\n      allocateMemory();\n    }\n\n    @Override\n    protected List<String> getFieldOrder() {\n      return Arrays.asList(new String[] { \"sunFamily\", \"sunPath\" });\n    }\n  }\n\n  static {\n    Native.register(Platform.C_LIBRARY_NAME);\n  }\n\n  public static native int socket(int domain, int type, int protocol) throws LastErrorException;\n  public static native int connect(int fd, SockaddrUn address, int addressLen)\n    throws LastErrorException;\n  public static native int bind(int fd, SockaddrUn address, int addressLen)\n    throws LastErrorException;\n  public static native int listen(int fd, int backlog) throws LastErrorException;\n  public static native int accept(int fd, SockaddrUn address, IntByReference addressLen)\n    throws LastErrorException;\n  public static native int read(int fd, ByteBuffer buffer, int count)\n    throws LastErrorException;\n  public static native int write(int fd, ByteBuffer buffer, int count)\n    throws LastErrorException;\n  public static native int close(int fd) throws LastErrorException;\n  public static native int shutdown(int fd, int how) throws LastErrorException;\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/windowspipe/WindowsNamedPipe.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.windowspipe;\n\nimport com.facebook.watchman.WatchmanTransport;\nimport com.sun.jna.Memory;\nimport com.sun.jna.platform.win32.WinBase;\nimport com.sun.jna.platform.win32.WinError;\nimport com.sun.jna.platform.win32.WinNT;\nimport com.sun.jna.ptr.IntByReference;\n\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.OutputStream;\nimport java.util.Arrays;\n\n/**\n * Implements a {@link WatchmanTransport} backed by a native windows named pipe.\n * This implementation opens a named pipe in overlapped (async) mode.\n * It means that one thread can read and another thread can write at the same time\n * (exactly what {@link com.facebook.watchman.WatchmanConnection} does).\n */\npublic class WindowsNamedPipe implements WatchmanTransport {\n  private static final WindowsNamedPipeLibrary API = WindowsNamedPipeLibrary.INSTANCE;\n\n  private final WinNT.HANDLE pipeHandle;\n  private final InputStream in;\n  private final OutputStream out;\n  // Assumption: reading and writing are async and happen in different threads (see WatchmanConnection).\n  // So, each operation (read, write) has its own waitable object.\n  private final WinNT.HANDLE readerWaitable;\n  private final WinNT.HANDLE writerWaitable;\n\n  public WindowsNamedPipe(String path) throws IOException {\n    pipeHandle =\n        API.CreateFile(\n            path,\n            WinNT.GENERIC_READ | WinNT.GENERIC_WRITE,\n            0,\n            null,\n            WinNT.OPEN_EXISTING,\n            WinNT.FILE_FLAG_OVERLAPPED,\n            null\n        );\n    if (WinNT.INVALID_HANDLE_VALUE.equals(pipeHandle) ) {\n      throw new IOException(\"Failed to open a named pipe \" + path + \" error:\" + API.GetLastError());\n    }\n\n    in = new NamedPipeInputStream();\n    out = new NamedPipeOutputStream();\n\n    readerWaitable = API.CreateEvent(null, true, false, null);\n    if (readerWaitable == null) {\n      throw new IOException(\"CreateEvent() failed \");\n    }\n\n    writerWaitable = API.CreateEvent(null, true, false, null);\n    if (writerWaitable == null) {\n      throw new IOException(\"CreateEvent() failed \");\n    }\n  }\n\n\n  @Override\n  public void close() throws IOException {\n    API.CloseHandle(pipeHandle);\n    API.CloseHandle(readerWaitable);\n    API.CloseHandle(writerWaitable);\n  }\n\n  @Override\n  public InputStream getInputStream() {\n    return in;\n  }\n\n  @Override\n  public OutputStream getOutputStream() {\n    return out;\n  }\n\n  private class NamedPipeOutputStream extends OutputStream {\n    @Override\n    public void write(int b) throws IOException {\n      write(new byte[]{(byte) (0xFF & b)});\n    }\n\n    @Override\n    public void write(byte[] b, int off, int len) throws IOException {\n      byte[] data = Arrays.copyOfRange(b, off, off + len);\n\n      WinBase.OVERLAPPED olap = new WinBase.OVERLAPPED();\n      olap.hEvent = writerWaitable;\n      olap.write();\n\n      boolean immediate = API.WriteFile(pipeHandle, data, len, null, olap.getPointer());\n      if (!immediate) {\n        if (API.GetLastError() != WinError.ERROR_IO_PENDING) {\n          throw new IOException(\"WriteFile() failed\");\n        }\n      }\n      IntByReference written = new IntByReference();\n      if (!API.GetOverlappedResult(pipeHandle, olap.getPointer(), written, true)) {\n        throw new IOException(\"GetOverlappedResult() failed for write operation\");\n      }\n      if (written.getValue() != len) {\n        throw new IOException(\"WriteFile() wrote less bytes than requested\");\n      }\n    }\n  }\n\n  private class NamedPipeInputStream extends InputStream {\n\n    @Override\n    public int read() throws IOException {\n      byte[] b = new byte[1];\n      read(b);\n      return 0xFF & b[0];\n    }\n\n    @Override\n    public int read(byte[] b, int off, int len) throws IOException {\n      Memory readBuffer = new Memory(len);\n\n      WinBase.OVERLAPPED olap = new WinBase.OVERLAPPED();\n      olap.hEvent = readerWaitable;\n      olap.write();\n\n      boolean immediate = API.ReadFile(pipeHandle, readBuffer, len, null, olap.getPointer());\n      if (!immediate) {\n        if (API.GetLastError() != WinError.ERROR_IO_PENDING) {\n          throw new IOException(\"ReadFile() failed \");\n        }\n      }\n      IntByReference read = new IntByReference();\n      if (!API.GetOverlappedResult(pipeHandle, olap.getPointer(), read, true)) {\n        throw new IOException(\"GetOverlappedResult() failed for read operation\");\n      }\n      if (read.getValue() != len) {\n        throw new IOException(\"ReadFile() read less bytes than requested\");\n      }\n      byte[] byteArray = readBuffer.getByteArray(0, len);\n      System.arraycopy(byteArray, 0, b, off, len);\n      return len;\n    }\n  }\n\n}\n"
  },
  {
    "path": "watchman/java/src/com/facebook/watchman/windowspipe/WindowsNamedPipeLibrary.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.windowspipe;\n\nimport com.sun.jna.Memory;\nimport com.sun.jna.Native;\nimport com.sun.jna.Pointer;\nimport com.sun.jna.platform.win32.WinBase;\nimport com.sun.jna.platform.win32.WinNT;\nimport com.sun.jna.ptr.IntByReference;\nimport com.sun.jna.win32.W32APIOptions;\n\npublic interface WindowsNamedPipeLibrary extends WinNT {\n  WindowsNamedPipeLibrary INSTANCE = (WindowsNamedPipeLibrary) Native.loadLibrary(\"kernel32\",\n      WindowsNamedPipeLibrary.class, W32APIOptions.UNICODE_OPTIONS);\n\n  boolean GetOverlappedResult(HANDLE hFile,\n                              Pointer lpOverlapped,\n                              IntByReference lpNumberOfBytesTransferred,\n                              boolean wait);\n\n  boolean ReadFile(HANDLE hFile, Memory pointer, int nNumberOfBytesToRead,\n                   IntByReference lpNumberOfBytesRead, Pointer lpOverlapped);\n\n  HANDLE CreateFile(String lpFileName, int dwDesiredAccess, int dwShareMode,\n                    WinBase.SECURITY_ATTRIBUTES lpSecurityAttributes,\n                    int dwCreationDisposition, int dwFlagsAndAttributes,\n                    HANDLE hTemplateFile);\n\n  HANDLE CreateEvent(WinBase.SECURITY_ATTRIBUTES lpEventAttributes,\n                     boolean bManualReset, boolean bInitialState, String lpName);\n\n  boolean CloseHandle(HANDLE hObject);\n\n  boolean WriteFile(HANDLE hFile, byte[] lpBuffer, int nNumberOfBytesToWrite,\n                    IntByReference lpNumberOfBytesWritten,\n                    Pointer lpOverlapped);\n\n  int GetLastError();\n}\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/CapabilitiesTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.io.IOException;\nimport java.util.List;\nimport java.util.Map;\n\nimport com.facebook.watchman.fakes.FakeWatchmanClient;\n\nimport com.google.common.collect.ImmutableMap;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport com.google.common.util.concurrent.SettableFuture;\nimport org.junit.Assert;\nimport org.junit.Test;\n\npublic class CapabilitiesTest {\n  public static String DEFAULT_VERSION_STRING = \"1.2.3\";\n\n  /**\n   * Make sure that CapabilitiesStrategy#checkWatchProjectCapability only calls WatchmanClient#version, and\n   * no other method of the client. Also make sure that \"cmd-watch-project\" is the only required\n   * capability, with no other optional capabilities being queried.\n   */\n  @Test\n  public void testWatchProjectVersionCalled() {\n    Map<String, Object> response = ImmutableMap.<String, Object>builder()\n        .put(\"capabilities\", ImmutableMap.builder().put(\"cmd-watch-project\", true).build())\n        .put(\"version\", DEFAULT_VERSION_STRING)\n        .build();\n    final SettableFuture<Map<String, Object>> future = SettableFuture.create();\n    future.set(response);\n\n    WatchmanClient mock = new FakeWatchmanClient() {\n      @Override\n      public ListenableFuture<Map<String, Object>> version(\n          List<String> optionalCapabilities,\n          List<String> requiredCapabilities) {\n        IllegalArgumentException e = new IllegalArgumentException(\n            \"The requiredCapabilities argument should be equal to [\\\"cmd-watch-project\\\"]\");\n        if (requiredCapabilities.size() != 1) throw e;\n        if (!requiredCapabilities.get(0).equals(\"cmd-watch-project\")) throw e;\n\n        return future;\n      }\n    };\n    CapabilitiesStrategy.checkWatchProjectCapability(mock);\n  }\n\n  /**\n   * Test that the return value is correct, when Watchman supports capabilities, and watch-project\n   * is one of them.\n   */\n  @Test\n  public void testWatchProjectCapabilitySupported() {\n    Map<String, Object> response = ImmutableMap.<String, Object>builder()\n        .put(\"capabilities\", ImmutableMap.builder().put(\"cmd-watch-project\", true).build())\n        .put(\"version\", DEFAULT_VERSION_STRING)\n        .build();\n    final SettableFuture<Map<String, Object>> future = SettableFuture.create();\n    future.set(response);\n\n    WatchmanClient mock = new FakeWatchmanClient() {\n      @Override\n      public ListenableFuture<Map<String, Object>> version(\n          List<String> optionalCapabilities,\n          List<String> requiredCapabilities) {\n        return future;\n      }\n    };\n    Assert.assertTrue(CapabilitiesStrategy.checkWatchProjectCapability(mock));\n  }\n\n  /**\n   * Test that the return value is correct, when watchman supports capabilities, but the\n   * watch-project command is not supported. (theoretically impossible, since capabilities were\n   * introduced in 3.8 and watch-project in 3.1, but better make sure).\n   */\n  @Test\n  public void testWatchProjectCapabilityUnsupported() {\n    final SettableFuture<Map<String, Object>> future = SettableFuture.create();\n    future.setException(new WatchmanException(\"something\"));\n\n    WatchmanClient mock = new FakeWatchmanClient() {\n      @Override\n      public ListenableFuture<Map<String, Object>> version(\n          List<String> optionalCapabilities,\n          List<String> requiredCapabilities) {\n        return future;\n      }\n    };\n    Assert.assertFalse(CapabilitiesStrategy.checkWatchProjectCapability(mock));\n  }\n\n  /**\n   * Add @Test to this method to check if the methods work fine with your local Watchman install.\n   */\n  @Test\n  public void testIntegration() throws WatchmanTransportUnavailableException, IOException {\n    WatchmanClient client = new WatchmanClientImpl(WatchmanTransportBuilder.discoverTransport());\n    client.start();\n    Assert.assertTrue(CapabilitiesStrategy.checkWatchProjectCapability(client));\n    client.close();\n  }\n\n}\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/WatchmanClientTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.IOException;\nimport java.nio.file.Paths;\nimport java.util.Arrays;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.CountDownLatch;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.TimeUnit;\nimport java.util.concurrent.atomic.AtomicReference;\n\nimport com.facebook.watchman.bser.BserDeserializer;\n\nimport com.google.common.base.Supplier;\nimport com.google.common.collect.ImmutableMap;\nimport org.hamcrest.Matchers;\nimport org.junit.Assert;\nimport org.junit.Before;\nimport org.junit.Rule;\nimport org.junit.Test;\nimport org.junit.rules.ExpectedException;\nimport org.mockito.Mockito;\n\npublic class WatchmanClientTest extends WatchmanTestBase {\n\n  private WatchmanClient mClient;\n  private Boolean withWatchProject;\n\n  @Rule\n  public ExpectedException thrown = ExpectedException.none();\n\n  /* @Before methods in subclasses are run AFTER @Before methods of the base class */\n  @Before\n  public void setClient() throws IOException {\n    withWatchProject = true;\n    mClient = new WatchmanClientImpl(\n        mIncomingMessageGetter,\n        mOutgoingMessageStream,\n        new Supplier<Boolean>() {\n          @Override\n          public Boolean get() {\n            return withWatchProject;\n          }\n        });\n    mClient.start();\n  }\n\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void subscribeTriggersListenerTest() throws InterruptedException {\n    Map<String, Object> subscriptionReply = new HashMap<>();\n    subscriptionReply.put(\"version\", \"1.2.3\");\n    // \"subscribe\" value should be private to WatchmanClient so we could use any mock string\n    subscriptionReply.put(\"subscribe\", \"sub-0\");\n    mObjectQueue.put(subscriptionReply);\n\n    Map<String, Object> subscribeEvent = new HashMap<>();\n    subscribeEvent.put(\"version\", \"1.2.3\");\n    subscribeEvent.put(\"clock\", \"c:123:1234\");\n    subscribeEvent.put(\"files\", Arrays.asList(\"/foo/bar\", \"/foo/baz\"));\n    subscribeEvent.put(\"root\", \"/foo\");\n    subscribeEvent.put(\"subscription\", \"sub-0\");\n    mObjectQueue.put(subscribeEvent);\n\n    final CountDownLatch latch = new CountDownLatch(1);\n    final AtomicReference<Map<String, Object>> result = new AtomicReference<>();\n    mClient.subscribe(Paths.get(\"/foo\"), null, new Callback() {\n      @Override\n      public void call(Map<String, Object> event) {\n        result.set(event);\n        latch.countDown();\n      }\n    });\n\n    if (! latch.await(10, TimeUnit.SECONDS)) {\n      Assert.fail();\n    }\n\n    deepObjectEquals(subscribeEvent, result.get());\n  }\n\n  /**\n   * Test the case when we get a unilateral message from Watchman (a subscription update event)\n   * before the answer to the command we have just sent. We expect that the response to the watch\n   * request is delivered, and not the subscription update event.\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void watchProjectWithUnilateralTest() throws ExecutionException, InterruptedException {\n    Map<String, Object> dummyUnilateralMessage = new HashMap<>();\n    dummyUnilateralMessage.put(\"version\", \"1.2.3\");\n    dummyUnilateralMessage.put(\"clock\", \"c:123:1234\");\n    dummyUnilateralMessage.put(\"files\", Arrays.asList(\"/foo/bar\", \"/foo/baz\"));\n    dummyUnilateralMessage.put(\"root\", \"/foo\");\n    dummyUnilateralMessage.put(\"subscription\", \"sub-0\");\n    mObjectQueue.put(dummyUnilateralMessage);\n\n    Map<String, Object> mockResponse = new HashMap<>();\n    mockResponse.put(\"version\", \"1.2.3\");\n    mockResponse.put(\"watch\", \"/foo/bar\");\n    mockResponse.put(\"relative_path\", \"/foo\");\n    mObjectQueue.put(mockResponse);\n\n    Map<String, Object> receivedResponse = mClient.watch(Paths.get(\"/foo/bar\")).get();\n    deepObjectEquals(mockResponse, receivedResponse);\n  }\n\n  /**\n   * Test that the watch-project request sent by WatchmanClient respects the interface of Watchman\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void watchProjectRequestTest() throws IOException, ExecutionException, InterruptedException {\n    String PATH = \"/foo/bar\";\n\n    mObjectQueue.put(new HashMap<String, Object>()); // response irrelevant\n    mClient.watch(Paths.get(PATH)).get();\n\n    ByteArrayInputStream in = new ByteArrayInputStream(mOutgoingMessageStream.toByteArray());\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> request = (List<Object>) deserializer.deserializeBserValue(in);\n\n    //noinspection RedundantCast\n    deepObjectEquals(\n        Arrays.<Object>asList(\"watch-project\", PATH),\n        request);\n  }\n\n  /**\n   * Test that the watch-del request sent by WatchmanClient respects the interface of Watchman\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void watchDelRequestTest() throws IOException, ExecutionException, InterruptedException {\n    String PATH = \"/foo/bar\";\n\n    mObjectQueue.put(new HashMap<String, Object>()); // response irrelevant\n    mClient.watchDel(Paths.get(PATH)).get();\n\n    ByteArrayInputStream in = new ByteArrayInputStream(mOutgoingMessageStream.toByteArray());\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> request = (List<Object>) deserializer.deserializeBserValue(in);\n\n    //noinspection RedundantCast\n    deepObjectEquals(\n        Arrays.<Object>asList(\"watch-del\", PATH),\n        request);\n  }\n\n  /**\n   * Test that requesting a watch when watch-project is unavailable throws a WatchmanException whose\n   * message mentions upgrading Watchman.\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void watchRequestTest() throws IOException, ExecutionException, InterruptedException {\n    String PATH = \"/foo/bar\";\n    thrown.expect(ExecutionException.class);\n    thrown.expectCause(Matchers.allOf(\n        Matchers.isA(WatchmanException.class),\n        Matchers.hasToString(\n            Matchers.containsString(\"upgrade\"))));\n\n    withWatchProject = false;\n    mClient.watch(Paths.get(PATH)).get(); // throws\n  }\n\n  /**\n   * Test that the subscribe request sent by WatchmanClient respects the interface of Watchman\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void subscribeRequestTest() throws ExecutionException, InterruptedException, IOException {\n    final String PATH = \"/foo/bar\";\n    final String NAME = \"sub-0\";\n    Callback mockListener = Mockito.mock(Callback.class);\n\n    Map<String, Object> response = new HashMap<>();\n    response.put(\"subscribe\", \"name\");\n    mObjectQueue.put(response); // response irrelevant\n    mClient.subscribe(\n        Paths.get(PATH),\n        new HashMap<String, Object>(),\n        mockListener).get();\n\n    ByteArrayInputStream in = new ByteArrayInputStream(mOutgoingMessageStream.toByteArray());\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> request = (List<Object>) deserializer.deserializeBserValue(in);\n    deepObjectEquals(\n        Arrays.<Object>asList(\"subscribe\", PATH, NAME, new HashMap<String, Object>()),\n        request);\n  }\n\n  /**\n   * Test that the unsubscribe request sent by WatchmanClient respects the interface of Watchman\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void unsubscribeRequestTest()\n      throws ExecutionException, InterruptedException, IOException {\n    final String PATH = \"/foo/bar\";\n    final String NAME = \"sub-0\";\n\n    Map<String, Object> response = new HashMap<>();\n    response.put(\"deleted\", true);\n    mObjectQueue.put(response); // response irrelevant\n    mObjectQueue.put(response); // response irrelevant\n\n    Callback mockListener = Mockito.mock(Callback.class);\n    WatchmanClient.SubscriptionDescriptor descriptor = mClient.subscribe(\n        Paths.get(PATH),\n        new HashMap<String, Object>(),\n        mockListener).get();\n    mOutgoingMessageStream.reset(); // ignore the subscribe command\n    mClient.unsubscribe(descriptor).get();\n\n    ByteArrayInputStream in = new ByteArrayInputStream(mOutgoingMessageStream.toByteArray());\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> request = (List<Object>) deserializer.deserializeBserValue(in);\n    deepObjectEquals(\n        Arrays.<Object>asList(\"unsubscribe\", PATH, NAME),\n        request);\n  }\n\n  /**\n   * Test that the clock request sent by WatchmanClient respects the interface of Watchman\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void clockRequestWithoutTimeoutTest() throws ExecutionException, InterruptedException, IOException {\n    final String PATH = \"/foo/bar\";\n\n    Map<String, Object> response = new HashMap<>();\n    response.put(\"clock\", \"some value\");\n    mObjectQueue.put(response); // response irrelevant\n\n    mClient.clock(Paths.get(PATH)).get();\n\n    ByteArrayInputStream in = new ByteArrayInputStream(mOutgoingMessageStream.toByteArray());\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> request = (List<Object>) deserializer.deserializeBserValue(in);\n    deepObjectEquals(\n        Arrays.<Object>asList(\"clock\", PATH),\n        request);\n  }\n\n  /**\n   * Test that the clock request sent by WatchmanClient respects the interface of Watchman, when\n   * sync_timeout is also required\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void clockRequestWithTimeoutTest() throws ExecutionException, InterruptedException, IOException {\n    final String PATH = \"/foo/bar\";\n    final Short SYNC_TIMEOUT = 1500;\n\n    Map<String, Object> response = new HashMap<>();\n    response.put(\"clock\", \"some value\");\n    mObjectQueue.put(response); // response irrelevant\n\n    mClient.clock(Paths.get(PATH), SYNC_TIMEOUT).get();\n\n    ByteArrayInputStream in = new ByteArrayInputStream(mOutgoingMessageStream.toByteArray());\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> request = (List<Object>) deserializer.deserializeBserValue(in);\n    deepObjectEquals(\n        Arrays.<Object>asList(\n            \"clock\",\n            PATH,\n            ImmutableMap.<String, Object>of(\"sync_timeout\", SYNC_TIMEOUT)),\n        request);\n  }\n\n\n  /**\n   * Test that the version request sent by WatchmanClient respects the interface of Watchman\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void versionRequestTestNoCapabilities()\n      throws ExecutionException, InterruptedException, IOException {\n    Map<String, Object> response = new HashMap<>();\n    response.put(\"version\", \"1.2.3\");\n    mObjectQueue.put(response); // response irrelevant\n\n    mClient.version().get();\n\n    ByteArrayInputStream in = new ByteArrayInputStream(mOutgoingMessageStream.toByteArray());\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> request = (List<Object>) deserializer.deserializeBserValue(in);\n    deepObjectEquals(\n        Arrays.<Object>asList(\"version\"),\n        request);\n  }\n\n  /**\n   * Test that the version request sent by WatchmanClient respects the interface of Watchman\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void versionRequestTestWithCapabilities()\n      throws ExecutionException, InterruptedException, IOException {\n    Map<String, Object> response = new HashMap<>();\n    response.put(\"version\", \"1.2.3\");\n    mObjectQueue.put(response); // response irrelevant\n\n    List<String> optionalCapabilities = Collections.singletonList(\"optional1\");\n    List<String> requiredCapabilities = Arrays.asList(\"required1\", \"required2\");\n    mClient.version(optionalCapabilities, requiredCapabilities).get();\n\n    Map<String, Object> expectedCapabilitiesMap = new HashMap<>();\n    expectedCapabilitiesMap.put(\"optional\", optionalCapabilities);\n    expectedCapabilitiesMap.put(\"required\", requiredCapabilities);\n\n    ByteArrayInputStream in = new ByteArrayInputStream(mOutgoingMessageStream.toByteArray());\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> request = (List<Object>) deserializer.deserializeBserValue(in);\n    deepObjectEquals(\n        Arrays.<Object>asList(\"version\", expectedCapabilitiesMap),\n        request);\n  }\n}\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/WatchmanConnectionTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Collection;\nimport java.util.Collections;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.CountDownLatch;\nimport java.util.concurrent.ExecutionException;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.Semaphore;\nimport java.util.concurrent.TimeUnit;\nimport java.util.concurrent.atomic.AtomicBoolean;\nimport java.util.concurrent.atomic.AtomicReference;\n\nimport com.facebook.watchman.bser.BserDeserializer;\nimport com.facebook.watchman.bser.BserSerializer;\n\nimport com.google.common.base.Optional;\nimport com.google.common.collect.ImmutableList;\nimport com.google.common.collect.ImmutableMap;\nimport com.google.common.util.concurrent.FutureCallback;\nimport com.google.common.util.concurrent.Futures;\nimport com.google.common.util.concurrent.ListenableFuture;\nimport org.hamcrest.Matchers;\nimport org.junit.Assert;\nimport org.junit.Rule;\nimport org.junit.Test;\nimport org.junit.rules.ExpectedException;\n\npublic class WatchmanConnectionTest extends WatchmanTestBase {\n\n  private static final String CLOCK = \"c:123:1234\";\n\n  @Rule\n  public ExpectedException thrown = ExpectedException.none();\n\n  /**\n   * Test that sending a request with a response available will actually return that response.\n   */\n  @SuppressWarnings(\"unchecked\")\n  @Test\n  public void sendCommandTest() throws ExecutionException, InterruptedException, IOException {\n    Map<String, Object> mockResponse = new HashMap<>();\n    mockResponse.put(\"clock\", CLOCK);\n    mObjectQueue.put(mockResponse);\n\n    WatchmanConnection connection = new WatchmanConnection(mIncomingMessageGetter, mOutgoingMessageStream);\n    connection.start();\n    Map<String, Object> receivedResponse = connection.run(Arrays.asList(\"clock\", \"/a/b/c\")).get();\n\n    deepObjectEquals(mockResponse, receivedResponse);\n  }\n\n  /**\n   * Test that requesting two commands to be sent will block the latter until the former receives\n   * a response.\n   */\n  @Test\n  public void singleCommandTest() throws IOException, ExecutionException, InterruptedException {\n    final List<Object> firstMessage = Arrays.<Object>asList(\"clock\", \"/a/b/c\");\n    final List<Object> secondMessage = Arrays.<Object>asList(\"watch-project\", \"/a/b/c\");\n    final Map<String, Object> firstResponse = new HashMap<>();\n    firstResponse.put(\"clock\", CLOCK);\n    final Semaphore commandSentSemaphore = new Semaphore(0);\n\n    WatchmanConnection connection = new WatchmanConnection(\n        mIncomingMessageGetter,\n        mOutgoingMessageStream,\n        Optional.<WatchmanConnection.WatchmanCommandListener>of(\n            new WatchmanConnection.WatchmanCommandListener() {\n\n              @Override\n              public void onStart() {\n\n              }\n\n              @Override\n              public void onSent() {\n                commandSentSemaphore.release();\n              }\n\n              @Override\n              public void onReceived() {\n\n              }\n            }));\n    connection.start();\n    ListenableFuture<Map<String, Object>> firstFuture = connection.run(firstMessage);\n    ListenableFuture<Map<String, Object>> secondFuture = connection.run(secondMessage);\n\n    ByteArrayOutputStream expected = new ByteArrayOutputStream();\n    BserSerializer serializer = new BserSerializer();\n    serializer.serializeToStream(firstMessage, expected);\n    commandSentSemaphore.acquire();\n    Assert.assertArrayEquals(expected.toByteArray(), this.mOutgoingMessageStream.toByteArray());\n\n    mObjectQueue.put(new HashMap<String, Object>());\n    firstFuture.get();\n    serializer.serializeToStream(secondMessage, expected);\n    commandSentSemaphore.acquire();\n    Assert.assertArrayEquals(expected.toByteArray(), this.mOutgoingMessageStream.toByteArray());\n  }\n\n  /**\n   * Test that receiving a message which contains an \"error\" label will result in an error thrown.\n   */\n  @SuppressWarnings(\"ThrowableInstanceNeverThrown\")\n  @Test\n  public void exceptionThrownTest() throws InterruptedException, ExecutionException {\n    final String reason = \"please throw\";\n    WatchmanException expected = new WatchmanException(reason);\n    thrown.expect(ExecutionException.class);\n    thrown.expectCause(Matchers.allOf(\n        Matchers.isA(WatchmanException.class),\n        Matchers.hasToString(expected.toString())));\n\n    final List<Object> request = Arrays.<Object>asList(\"clock\", \"/a/b/c\"); // irrelevant\n    final Map<String, Object> response = new HashMap<>();\n    response.put(\"error\", reason);\n    mObjectQueue.put(response);\n\n    WatchmanConnection connection = new WatchmanConnection(mIncomingMessageGetter, mOutgoingMessageStream);\n    connection.start();\n\n    connection.run(request).get();\n  }\n\n  /**\n   * Test that receiving a unilateral update with a request under processing will deliver the\n   * unilateral message to the unilateral handler and **then** return the request's response to the\n   * requester.\n   */\n  @Test\n  public void testUnilateralMessageBeforeResponse()\n      throws ExecutionException, InterruptedException {\n    final String unilateralLabel = \"unifoo\";\n    final List<String> request = Collections.singletonList(\"version\");\n    final Map<String, Object> response = ImmutableMap.<String, Object>of(\"version\", \"irrelevant\");\n    final Map<String, Object> unilateral =\n        ImmutableMap.<String, Object>of(unilateralLabel, \"bar\");\n\n    // following two are AtomicBooleans instead of booleans because we need them final (used in\n    // anonymous inner classes) and non-final; synchronization is offered by the Semaphore\n    final AtomicBoolean callbackConditionRespected = new AtomicBoolean(false);\n    final AtomicBoolean responseConditionRespected = new AtomicBoolean(false);\n    final AtomicBoolean callbackHasRun = new AtomicBoolean(false);\n    final AtomicBoolean responseHasRun = new AtomicBoolean(false);\n    final Semaphore conditionSemaphore = new Semaphore(1);\n    final CountDownLatch waitedResponses = new CountDownLatch(2);\n\n    Callback callbackListener = new Callback() {\n      @Override\n      public void call(Map<String, Object> message) throws Exception {\n        try {\n          conditionSemaphore.acquire();\n          callbackConditionRespected.set(!responseHasRun.get());\n          callbackHasRun.set(true);\n          conditionSemaphore.release();\n        } catch (InterruptedException ignored) {\n        } finally {\n          waitedResponses.countDown();\n        }\n      }\n    };\n\n    WatchmanConnection connection = new WatchmanConnection(\n        mIncomingMessageGetter,\n        mOutgoingMessageStream,\n        Optional.<Collection<String>>of(Collections.singletonList(unilateralLabel)),\n        Optional.<Callback>of(callbackListener));\n    connection.start();\n\n    connection.run(request).addListener(\n        new Runnable() {\n          @Override\n          public void run() {\n            try {\n              conditionSemaphore.acquire();\n              responseConditionRespected.set(callbackHasRun.get());\n              responseHasRun.set(true);\n              conditionSemaphore.release();\n            } catch (InterruptedException ignored) {\n            } finally {\n              waitedResponses.countDown();\n            }\n          }\n        },\n        Executors.newSingleThreadExecutor());\n\n    mObjectQueue.put(unilateral);\n    mObjectQueue.put(response);\n\n    waitedResponses.await();\n    Assert.assertTrue(callbackConditionRespected.get());\n    Assert.assertTrue(responseConditionRespected.get());\n  }\n\n  /**\n   * Test that receiving a WatchmanConnection#close before the commands in the queue have finished\n   * executing will make all the commands throw with an error. Also, only the first command should\n   * have been sent over the wire, and since no response is provided, the subsequent commands are\n   * blocked by the first one waiting.\n   *\n   * Note that we must wait for the first message to have successfully been transmitted.\n   */\n  @Test\n  public void testCurrentRequestCanceled()\n      throws InterruptedException, IOException {\n    final List<String> request = ImmutableList.of(\"version\");\n    final int nrRequests = 5;\n    final CountDownLatch requestSpinner = new CountDownLatch(nrRequests);\n    final CountDownLatch closeSpinner = new CountDownLatch(nrRequests);\n    final Semaphore oneMessageSent = new Semaphore(0);\n\n    WatchmanConnection connection = new WatchmanConnection(\n        mIncomingMessageGetter,\n        mOutgoingMessageStream,\n        Optional.<WatchmanConnection.WatchmanCommandListener>of(\n            new WatchmanConnection.WatchmanCommandListener() {\n\n              @Override\n              public void onStart() {}\n\n              @Override\n              public void onSent() {\n                requestSpinner.countDown();\n                oneMessageSent.release();\n              }\n\n              @Override\n              public void onReceived() {}\n            }));\n    connection.start();\n\n    List<AtomicBoolean> conditions = new ArrayList<AtomicBoolean>();\n    for (int i=0; i<nrRequests; ++i) {\n      final AtomicBoolean conditionRespected = new AtomicBoolean(false);\n      conditions.add(conditionRespected);\n      ListenableFuture<Map<String, Object>> futureRequest = connection.run(request);\n      Futures.addCallback(\n          futureRequest,\n          new FutureCallback<Map<String, Object>>() {\n            @Override\n            public void onSuccess(Map<String, Object> result) {\n              conditionRespected.set(false);\n              closeSpinner.countDown();\n            }\n\n            @Override\n            public void onFailure(Throwable t) {\n              conditionRespected.set(true);\n              closeSpinner.countDown();\n            }\n          });\n    }\n\n    oneMessageSent.acquire();\n    connection.close();\n    if (!requestSpinner.await(3, TimeUnit.SECONDS)) {\n      Assert.fail(\"Requests time limit exceeded\");\n    }\n    if (!closeSpinner.await(3, TimeUnit.SECONDS)) {\n      Assert.fail(\"Close time limit exceeded\");\n    }\n\n    ByteArrayOutputStream expected = new ByteArrayOutputStream();\n    BserSerializer serializer = new BserSerializer();\n    serializer.serializeToStream(request, expected);\n    Assert.assertArrayEquals(expected.toByteArray(), this.mOutgoingMessageStream.toByteArray());\n\n    int entry = 0;\n    for (AtomicBoolean condition: conditions) {\n      Assert.assertTrue(\n          \"Asserting condition for request #\" + Integer.toString(entry),\n          condition.get());\n      entry++;\n    }\n  }\n\n  @Test\n  public void propagatesDeserializationException() throws Exception {\n    final AtomicReference<BserDeserializer.BserEofException> expectedExceptionRef = new AtomicReference<>();\n    final Semaphore commandSentSemaphore = new Semaphore(0);\n    WatchmanConnection.WatchmanCommandListener commandListener =\n        new WatchmanConnection.WatchmanCommandListener() {\n          @Override public void onStart() { }\n          @Override public void onSent() { commandSentSemaphore.release(); }\n          @Override public void onReceived() { }\n        };\n    Callable<Map<String, Object>> incomingMessageGetter = new Callable<Map<String, Object>>() {\n      @Override\n      public Map<String, Object> call() throws Exception {\n        commandSentSemaphore.acquire();\n        BserDeserializer.BserEofException e = new BserDeserializer.BserEofException(\"expected\");\n        expectedExceptionRef.set(e);\n        throw e;\n      }\n    };\n    WatchmanConnection connection = new WatchmanConnection(\n        incomingMessageGetter,\n        mOutgoingMessageStream,\n        Optional.<WatchmanConnection.WatchmanCommandListener>of(commandListener));\n    connection.start();\n    ListenableFuture<Map<String, Object>> listenableFuture = connection.run(Arrays.asList(\"clock\", \"/a/b/c\"));\n    try {\n      Map<String, Object> receivedResponse = listenableFuture.get(5, TimeUnit.SECONDS);\n      Assert.fail(\"Should not get a response, got \" + receivedResponse.toString());\n    } catch (ExecutionException executionException) {\n      Assert.assertSame(expectedExceptionRef.get(), executionException.getCause());\n    }\n  }\n\n  @Test\n  public void propagatesInterruptionException() throws Exception {\n    final Semaphore enteredCallable = new Semaphore(0);\n    final Semaphore exitedCallable = new Semaphore(0);\n    final AtomicReference<Thread> threadRef = new AtomicReference<>();\n    final AtomicReference<InterruptedException> expectedException = new AtomicReference<>();\n    Callable<Map<String, Object>> incomingMessageGetter = new Callable<Map<String, Object>>() {\n      @Override\n      public Map<String, Object> call() throws Exception {\n        try {\n          threadRef.set(Thread.currentThread());\n          enteredCallable.release();\n          new Semaphore(0).acquire(); // wait for interruption\n          return new HashMap<>();\n        } catch (InterruptedException e) {\n          expectedException.set(e);\n          throw e;\n        } finally {\n          exitedCallable.release();\n        }\n      }\n    };\n    WatchmanConnection connection = new WatchmanConnection(incomingMessageGetter, mOutgoingMessageStream);\n    connection.start();\n    ListenableFuture<Map<String, Object>> listenableFuture = connection.run(Arrays.asList(\"clock\", \"/a/b/c\"));\n    enteredCallable.acquire();\n    threadRef.get().interrupt();\n    Assert.assertTrue(\"Callable should have exited\", exitedCallable.tryAcquire(5, TimeUnit.SECONDS));\n    try {\n      listenableFuture.get(5, TimeUnit.SECONDS);\n      Assert.fail(\"Should not be able to get a result from an interrupted operation\");\n    } catch (InterruptedException e) {\n      // This is reasonable behavior...\n      Assert.assertSame(\"If InterruptedException, should be the one thrown by thread\",\n          expectedException.get(), e);\n    } catch (ExecutionException e) {\n      // ...and this is also reasonable behavior.\n      Assert.assertSame(\"If ExecutionException, cause should be exception that interrupted thread\",\n          expectedException.get(), e.getCause());\n    }\n  }\n}\n\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/WatchmanTestBase.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.util.Iterator;\nimport java.util.List;\nimport java.util.Map;\nimport java.util.concurrent.BlockingQueue;\nimport java.util.concurrent.Callable;\nimport java.util.concurrent.LinkedBlockingQueue;\n\nimport org.junit.Assert;\nimport org.junit.Before;\n\npublic class WatchmanTestBase {\n\n  protected ByteArrayOutputStream mOutgoingMessageStream;\n  protected BlockingQueue<Map<String, Object>> mObjectQueue;\n  protected Callable<Map<String, Object>> mIncomingMessageGetter;\n\n  @Before\n  public void setUp() throws IOException {\n    mOutgoingMessageStream = new ByteArrayOutputStream();\n    mObjectQueue = new LinkedBlockingQueue<>();\n    mIncomingMessageGetter = new Callable<Map<String, Object>>() {\n      @Override\n      public Map<String, Object> call() throws Exception {\n        return mObjectQueue.take();\n      }\n    };\n  }\n\n  @SuppressWarnings(\"unchecked\")\n  protected static void deepObjectEquals(List<Object> expected, List<Object> object) {\n    Assert.assertNotNull(object);\n    Assert.assertEquals(expected.size(), object.size());\n    Iterator<Object> iteratorExpected = expected.iterator();\n    Iterator<Object> iteratorObject = object.iterator();\n    while (iteratorExpected.hasNext()) {\n      Object elementExpected = iteratorExpected.next();\n      Object elementObject = iteratorObject.next();\n      if (elementExpected instanceof List) {\n        Assert.assertTrue(elementObject instanceof List);\n        deepObjectEquals((List<Object>) elementExpected, (List<Object>) elementObject);\n      } else if (elementExpected instanceof Map) {\n        Assert.assertTrue(elementObject instanceof Map);\n        deepObjectEquals((Map<String, Object>) elementExpected, (Map<String,Object>) elementObject);\n      } else {\n        Assert.assertEquals(elementExpected, elementObject);\n      }\n    }\n  }\n\n  @SuppressWarnings(\"unchecked\")\n  protected static void deepObjectEquals(Map<String, Object> expected, Map<String, Object> object) {\n    Assert.assertNotNull(object);\n    Assert.assertEquals(expected.size(), object.size());\n    for (String key: expected.keySet()) {\n      Object elementExpected = expected.get(key);\n      Object elementObject = object.get(key);\n      if (elementExpected instanceof List) {\n        Assert.assertTrue(elementObject instanceof List);\n        deepObjectEquals((List<Object>) elementExpected, (List<Object>) elementObject);\n      } else if (elementExpected instanceof Map) {\n        Assert.assertTrue(elementObject instanceof Map);\n        deepObjectEquals((Map<String, Object>) elementExpected, (Map<String,Object>) elementObject);\n      } else {\n        Assert.assertEquals(elementExpected, elementObject);\n      }\n    }\n  }\n\n}\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/bser/BserDeserializerTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.bser;\n\nimport static org.hamcrest.Matchers.closeTo;\nimport static org.hamcrest.Matchers.contains;\nimport static org.hamcrest.Matchers.equalTo;\nimport static org.hamcrest.Matchers.is;\nimport static org.hamcrest.Matchers.nullValue;\nimport static org.hamcrest.Matchers.sameInstance;\nimport static org.junit.Assert.assertThat;\n\nimport com.google.common.collect.ImmutableList;\nimport com.google.common.collect.ImmutableMap;\nimport com.google.common.io.BaseEncoding;\n\nimport java.io.ByteArrayInputStream;\nimport java.io.InputStream;\nimport java.io.IOException;\n\nimport java.nio.ByteOrder;\nimport java.nio.charset.CharacterCodingException;\n\nimport java.util.AbstractMap.SimpleImmutableEntry;\nimport java.util.List;\nimport java.util.Map;\n\nimport com.facebook.watchman.bser.BserDeserializer;\n\nimport org.hamcrest.Matchers;\n\nimport org.junit.rules.ExpectedException;\nimport org.junit.Rule;\nimport org.junit.Test;\n\n@SuppressWarnings(\"unchecked\")\npublic class BserDeserializerTest {\n  @Rule\n  public ExpectedException thrown = ExpectedException.none();\n\n  private static final String SHORT_11FF;\n  private static final String INT_1122EEFF;\n  private static final String LONG_0000000080000000;\n  private static final String LONG_11223344CCDDEEFF;\n  private static final String REAL_0DOT123456789;\n  private static final Map.Entry<String, Object> FOO_MAP_ENTRY =\n      new SimpleImmutableEntry<String, Object>(\"foo\", (byte) 0x23);\n  private static final Map.Entry<String, Object> BAR_MAP_ENTRY =\n      new SimpleImmutableEntry<String, Object>(\"bar\", (byte) 0x42);\n  private static final Map.Entry<String, Object> BAZ_MAP_ENTRY =\n      new SimpleImmutableEntry<String, Object>(\"baz\", (byte) 0xF0);\n\n  static {\n    if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) {\n      SHORT_11FF = \"11FF\";\n      INT_1122EEFF = \"1122EEFF\";\n      LONG_0000000080000000 = \"0000000080000000\";\n      LONG_11223344CCDDEEFF = \"11223344CCDDEEFF\";\n      REAL_0DOT123456789 = \"3FBF9ADD3739635F\";\n    } else {\n      SHORT_11FF = \"FF11\";\n      INT_1122EEFF = \"FFEE2211\";\n      LONG_0000000080000000 = \"0000008000000000\";\n      LONG_11223344CCDDEEFF = \"FFEEDDCC44332211\";\n      REAL_0DOT123456789 = \"5F633937DD9ABF3F\";\n    }\n  }\n\n  private static InputStream getByteStream(String base16) {\n    return new ByteArrayInputStream(BaseEncoding.base16().decode(base16));\n  }\n\n  @Test\n  public void deserializeEmptyArray() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> deserialized = (List<Object>) deserializer.deserializeBserValue(\n        getByteStream(\"00010303000300\"));\n    List<Object> expected = ImmutableList.of();\n    assertThat(deserialized, equalTo(expected));\n  }\n\n  @Test\n  public void deserializeEmptyArrayTwiceReturnsSameArray() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> deserialized = (List<Object>) deserializer.deserializeBserValue(\n        getByteStream(\"00010303000300\"));\n    List<Object> deserialized2 = (List<Object>) deserializer.deserializeBserValue(\n        getByteStream(\"00010303000300\"));\n    assertThat(deserialized, is(sameInstance(deserialized2)));\n  }\n\n  @Test\n  public void deserializeArrayOfInt8() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Object> deserialized = (List<Object>) deserializer.deserializeBserValue(\n        getByteStream(\"000103090003030323034203F0\"));\n    List<Object> expected = ImmutableList.<Object>of((byte) 0x23, (byte) 0x42, (byte) 0xF0);\n    assertThat(deserialized, equalTo(expected));\n  }\n\n  @Test\n  public void deserializeString() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    String deserialized = (String) deserializer.deserializeBserValue(\n        getByteStream(\"0001030E02030B68656C6C6F20776F726C64\"));\n    String expected = \"hello world\";\n    assertThat(deserialized, equalTo(expected));\n  }\n\n  @Test\n  public void sameStringDeserializedTwiceReturnsSameInstance() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    String deserialized = (String) deserializer.deserializeBserValue(\n        getByteStream(\"0001030E02030B68656C6C6F20776F726C64\"));\n    String deserialized2 = (String) deserializer.deserializeBserValue(\n        getByteStream(\"0001030E02030B68656C6C6F20776F726C64\"));\n    assertThat(deserialized, is(sameInstance(deserialized2)));\n  }\n\n  @Test\n  public void deserializeEmptyMap() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Map<String, Object> deserialized = (Map<String, Object>) deserializer.deserializeBserValue(\n        getByteStream(\"00010303010300\"));\n    Map<String, Object> expected = ImmutableMap.of();\n    assertThat(deserialized, equalTo(expected));\n  }\n\n  @Test\n  public void deserializeEmptyMapTwiceReturnsSameMap() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Map<String, Object> deserialized = (Map<String, Object>) deserializer.deserializeBserValue(\n        getByteStream(\"00010303010300\"));\n    Map<String, Object> deserialized2 = (Map<String, Object>) deserializer.deserializeBserValue(\n        getByteStream(\"00010303010300\"));\n    assertThat(deserialized, is(sameInstance(deserialized2)));\n  }\n\n  @Test\n  public void deserializeUnsortedMapOfStringToInt8() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Map<String, Object> deserialized = (Map<String, Object>) deserializer.deserializeBserValue(\n        getByteStream(\"0001031B010303020303666F6F0323020303626172034202030362617A03F0\"));\n    // Make sure the result contains these entries in the order they appeared in the input.\n    assertThat(\n        deserialized.entrySet(),\n        contains(FOO_MAP_ENTRY, BAR_MAP_ENTRY, BAZ_MAP_ENTRY));\n  }\n\n  @Test\n  public void deserializeSortedMapOfStringToInt8() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.SORTED);\n    Map<String, Object> deserialized = (Map<String, Object>) deserializer.deserializeBserValue(\n        getByteStream(\"0001031B010303020303666F6F0323020303626172034202030362617A03F0\"));\n    // Make sure the result contains these entries in sorted order.\n    assertThat(\n        deserialized.entrySet(),\n        contains(BAR_MAP_ENTRY, BAZ_MAP_ENTRY, FOO_MAP_ENTRY));\n  }\n\n  @Test\n  public void deserializeTemplate() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    List<Map<String, Object>> deserialized = (List<Map<String, Object>>)\n        deserializer.deserializeBserValue(\n            getByteStream(\n                \"000103280B0003020203046E616D6502030361676503030203046672656403140203\" +\n                \"0470657465031E0C0319\"));\n\n    // We have to cast to byte because otherwise Java coerces the ages to Integer\n    // objects which are sadly not equal to the BSER-deserialized Byte objects with the\n    // same value.\n    assertThat(\n        deserialized,\n        Matchers.<Map<String, Object>>contains(\n            Matchers.<Map<String, Object>>allOf(\n                Matchers.<String, Object>hasEntry(\"name\", \"fred\"),\n                Matchers.<String, Object>hasEntry(\"age\", (byte) 20)),\n            Matchers.<Map<String, Object>>allOf(\n                Matchers.<String, Object>hasEntry(\"name\", \"pete\"),\n                Matchers.<String, Object>hasEntry(\"age\", (byte) 30)),\n            Matchers.<Map<String, Object>>allOf(\n                Matchers.<String, Object>hasEntry(\"age\", (byte) 25))));\n  }\n\n  @Test\n  public void deserializeInt8() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Byte deserialized = (Byte) deserializer.deserializeBserValue(getByteStream(\"000103020342\"));\n    assertThat(deserialized, equalTo((byte) 0x42));\n  }\n\n  @Test\n  public void sameInt8DeserializedTwiceReturnsSameInstance() throws IOException {\n    // Java actually interns small integer values for us. How nice!\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Byte deserialized = (Byte) deserializer.deserializeBserValue(getByteStream(\"000103020342\"));\n    Byte deserialized2 = (Byte) deserializer.deserializeBserValue(getByteStream(\"000103020342\"));\n    assertThat(deserialized, is(sameInstance(deserialized2)));\n  }\n\n  @Test\n  public void deserializeInt16() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Short deserialized = (Short) deserializer.deserializeBserValue(\n        getByteStream(\"0001030304\" + SHORT_11FF));\n    assertThat(deserialized, equalTo((short) 0x11FF));\n  }\n\n  @Test\n  public void deserializeInt32() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Integer deserialized = (Integer) deserializer.deserializeBserValue(\n        getByteStream(\"0001030505\" + INT_1122EEFF));\n    assertThat(deserialized, equalTo(0x1122EEFF));\n  }\n\n  @Test\n  public void deserializeInt64() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Long deserialized = (Long) deserializer.deserializeBserValue(\n        getByteStream(\"0001030906\" + LONG_11223344CCDDEEFF));\n    assertThat(deserialized, equalTo(0x11223344CCDDEEFFL));\n  }\n\n  @Test\n  public void deserializeReal() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Double deserialized = (Double) deserializer.deserializeBserValue(\n        getByteStream(\"0001030907\" + REAL_0DOT123456789));\n    assertThat(deserialized, closeTo(0.123456789, 1e-6));\n  }\n\n  @Test\n  public void deserializeTrue() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Boolean deserialized = (Boolean) deserializer.deserializeBserValue(getByteStream(\"0001030108\"));\n    assertThat(deserialized, is(true));\n  }\n\n  @Test\n  public void deserializeFalse() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Boolean deserialized = (Boolean) deserializer.deserializeBserValue(getByteStream(\"0001030109\"));\n    assertThat(deserialized, is(false));\n  }\n\n  @Test\n  public void deserializeNull() throws IOException {\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    Object deserialized = deserializer.deserializeBserValue(getByteStream(\"000103010A\"));\n    assertThat(deserialized, is(nullValue()));\n  }\n\n  @Test\n  public void throwIfSniffLengthTooShort() throws IOException {\n    thrown.expect(IOException.class);\n    thrown.expectMessage(\"Invalid BSER header (expected 3 bytes, got 0 bytes)\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"\"));\n  }\n\n  @Test\n  public void throwIfInvalidHeader() throws IOException {\n    thrown.expect(IOException.class);\n    thrown.expectMessage(\"Invalid BSER header\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"000F03\"));\n  }\n\n  @Test\n  public void throwIfInvalidHeaderLengthType() throws IOException {\n    thrown.expect(IOException.class);\n    thrown.expectMessage(\"Unrecognized BSER header length type 7\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"000107\" + REAL_0DOT123456789));\n  }\n\n  @Test\n  public void throwIfHeaderLengthIsNegative() throws IOException {\n    thrown.expect(IOException.class);\n    thrown.expectMessage(\"BSER length out of range (-128 < 0)\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"00010380\"));\n  }\n\n  @Test\n  public void throwIfBodyLengthIsOverMaxInt() throws IOException {\n    thrown.expect(IOException.class);\n    thrown.expectMessage(\"BSER length out of range (2147483648 > 2147483647)\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"000106\" + LONG_0000000080000000));\n  }\n\n  @Test\n  public void throwIfHeaderLengthTooShort() throws IOException {\n    thrown.expect(IOException.class);\n    thrown.expectMessage(\"Invalid BSER header length (expected 1 bytes, got 0 bytes)\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"000103\"));\n  }\n\n  @Test\n  public void throwIfRemainingLengthTooShort() throws IOException {\n    thrown.expect(IOException.class);\n    thrown.expectMessage(\"Invalid BSER header (expected 1 bytes, got 0 bytes)\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"00010301\"));\n  }\n\n  @Test\n  public void throwIfStringNotUTF8() throws IOException {\n    thrown.expect(CharacterCodingException.class);\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"00010306020303ABCDEF\"));\n  }\n\n  @Test\n  public void throwIfArrayLengthTooShort() throws IOException {\n    thrown.expect(BserDeserializer.BserEofException.class);\n    thrown.expectMessage(\"Prematurely reached end of BSER buffer\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"000103050003020323\"));\n  }\n\n  @Test\n  public void throwIfMapLengthTooShort() throws IOException {\n    thrown.expect(BserDeserializer.BserEofException.class);\n    thrown.expectMessage(\"Prematurely reached end of BSER buffer\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"0001030B010303020303666F6F0323\"));\n  }\n\n  @Test\n  public void throwIfMapKeyNotString() throws IOException {\n    thrown.expect(IOException.class);\n    thrown.expectMessage(\"Unrecognized BSER object key type 3, expected string\");\n    BserDeserializer deserializer = new BserDeserializer(BserDeserializer.KeyOrdering.UNSORTED);\n    deserializer.deserializeBserValue(getByteStream(\"0001030701030103030323\"));\n  }\n}\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/bser/BserSerializerTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.bser;\n\nimport static org.hamcrest.Matchers.equalTo;\nimport static org.hamcrest.Matchers.is;\nimport static org.hamcrest.Matchers.not;\nimport static org.hamcrest.Matchers.sameInstance;\nimport static org.junit.Assert.assertThat;\n\nimport com.google.common.base.Strings;\nimport com.google.common.collect.ImmutableList;\nimport com.google.common.collect.ImmutableMap;\nimport com.google.common.io.BaseEncoding;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\n\nimport java.nio.ByteBuffer;\nimport java.nio.ByteOrder;\nimport java.nio.charset.CharacterCodingException;\n\nimport com.facebook.watchman.bser.BserSerializer;\n\nimport org.junit.rules.ExpectedException;\nimport org.junit.Before;\nimport org.junit.Rule;\nimport org.junit.Test;\n\npublic class BserSerializerTest {\n  @Rule\n  public ExpectedException thrown = ExpectedException.none();\n\n  private ByteBuffer buffer;\n\n  private static final String EXPECTED_EMPTY_ARRAY;\n  private static final String EXPECTED_INT8_ARRAY;\n  private static final String EXPECTED_STRING;\n  private static final String EXPECTED_EMPTY_MAP;\n  private static final String EXPECTED_INT8_MAP;\n  private static final String EXPECTED_INT8;\n  private static final String EXPECTED_INT16;\n  private static final String EXPECTED_INT32;\n  private static final String EXPECTED_INT64;\n  private static final String EXPECTED_MIN_INT8;\n  private static final String EXPECTED_MIN_INT16;\n  private static final String EXPECTED_MIN_INT32;\n  private static final String EXPECTED_MIN_INT64;\n  private static final String EXPECTED_REAL;\n  private static final String EXPECTED_TRUE;\n  private static final String EXPECTED_FALSE;\n  private static final String EXPECTED_NULL;\n\n  // BSER encoding depends on the host byte order, and to keep the\n  // encoder simpler, we always encode the buffer length as a\n  // (endian-specific) 32-bit value at the start of the encoded byte\n  // sequence.\n  //\n  // So, we initialize these expected byte sequences statically depending\n  // on the host byte order.\n  static {\n    if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) {\n      EXPECTED_EMPTY_ARRAY = \"00010500000003000300\";\n      EXPECTED_INT8_ARRAY = \"000105000000090003030323034203F0\";\n      EXPECTED_STRING = \"0001050000000E02030B68656C6C6F20776F726C64\";\n      EXPECTED_EMPTY_MAP = \"00010500000003010300\";\n      EXPECTED_INT8_MAP = \"0001050000001B010303020303666F6F0323020303626172034202030362617A03F0\";\n      EXPECTED_INT8 = \"000105000000020342\";\n      EXPECTED_INT16 = \"000105000000030411FF\";\n      EXPECTED_INT32 = \"0001050000005051122EEFF\";\n      EXPECTED_INT64 = \"000105000000090611223344CCDDEEFF\";\n      EXPECTED_MIN_INT8 = \"000105000000020380\";\n      EXPECTED_MIN_INT16 = \"00010500000003048000\";\n      EXPECTED_MIN_INT32 = \"00010500000050580000000\";\n      EXPECTED_MIN_INT64 = \"00010500000009068000000000000000\";\n      EXPECTED_REAL = \"00010500000009073FBF9ADD3739635F\";\n      EXPECTED_TRUE = \"0001050000000108\";\n      EXPECTED_FALSE = \"0001050000000109\";\n      EXPECTED_NULL = \"000105000000010A\";\n    } else {\n      EXPECTED_EMPTY_ARRAY = \"00010503000000000300\";\n      EXPECTED_INT8_ARRAY = \"000105090000000003030323034203F0\";\n      EXPECTED_STRING = \"0001050E00000002030B68656C6C6F20776F726C64\";\n      EXPECTED_EMPTY_MAP = \"00010503000000010300\";\n      EXPECTED_INT8_MAP = \"0001051B000000010303020303666F6F0323020303626172034202030362617A03F0\";\n      EXPECTED_INT8 = \"000105020000000342\";\n      EXPECTED_INT16 = \"0001050300000004FF11\";\n      EXPECTED_INT32 = \"0001050500000005FFEE2211\";\n      EXPECTED_INT64 = \"0001050900000006FFEEDDCC44332211\";\n      EXPECTED_MIN_INT8 = \"000105020000000380\";\n      EXPECTED_MIN_INT16 = \"00010503000000040080\";\n      EXPECTED_MIN_INT32 = \"000105050000000500000080\";\n      EXPECTED_MIN_INT64 = \"00010509000000060000000000000080\";\n      EXPECTED_REAL = \"00010509000000075F633937DD9ABF3F\";\n      EXPECTED_TRUE = \"0001050100000008\";\n      EXPECTED_FALSE = \"0001050100000009\";\n      EXPECTED_NULL = \"000105010000000A\";\n    }\n  }\n\n  @Before\n  public void setUp() {\n    buffer = ByteBuffer.allocate(512).order(ByteOrder.nativeOrder());\n  }\n\n  private ByteBuffer assertEncodingMatches(Object object, String base16) throws IOException {\n    BserSerializer serializer = new BserSerializer();\n    ByteBuffer result = serializer.serializeToBuffer(object, buffer);\n    result.flip();\n    byte[] base16Array = BaseEncoding.base16().decode(base16);\n    assertThat(\n        String.format(\n            \"Encoded buffer mismatch (%s != %s)\",\n            base16,\n            BaseEncoding.base16().encode(result.array(), result.position(), result.limit())),\n        result,\n        equalTo(ByteBuffer.wrap(base16Array)));\n    return result;\n  }\n\n  @Test\n  public void serializeEmptyArray() throws IOException {\n    assertEncodingMatches(ImmutableList.of(), EXPECTED_EMPTY_ARRAY);\n  }\n\n  @Test\n  public void serializeArrayOfInt8() throws IOException {\n    assertEncodingMatches(\n        ImmutableList.of((byte) 0x23, (byte) 0x42, (byte) 0xF0),\n        EXPECTED_INT8_ARRAY);\n  }\n\n  @Test\n  public void serializeString() throws IOException {\n    assertEncodingMatches(\"hello world\", EXPECTED_STRING);\n  }\n\n  @Test\n  public void serializeEmptyMap() throws IOException {\n    assertEncodingMatches(ImmutableMap.of(), EXPECTED_EMPTY_MAP);\n  }\n\n  @Test\n  public void serializeInt8Map() throws IOException {\n    assertEncodingMatches(\n        ImmutableMap.of(\n            \"foo\", (byte) 0x23,\n            \"bar\", (byte) 0x42,\n            \"baz\", (byte) 0xF0),\n        EXPECTED_INT8_MAP);\n  }\n\n  @Test\n  public void serializeInt8() throws IOException {\n    assertEncodingMatches((byte) 0x42, EXPECTED_INT8);\n  }\n\n  @Test\n  public void serializeInt16() throws IOException {\n    assertEncodingMatches(0x11FF, EXPECTED_INT16);\n  }\n\n  @Test\n  public void serializeInt32() throws IOException {\n    assertEncodingMatches(0x1122EEFF, EXPECTED_INT32);\n  }\n\n  @Test\n  public void serializeInt64() throws IOException {\n    assertEncodingMatches(0x11223344CCDDEEFFL, EXPECTED_INT64);\n  }\n\n  @Test\n  public void serializeMinInt8() throws IOException {\n    assertEncodingMatches((byte) -0x80, EXPECTED_MIN_INT8);\n  }\n\n  @Test\n  public void serializeMinInt16() throws IOException {\n    assertEncodingMatches(-0x8000, EXPECTED_MIN_INT16);\n  }\n\n  @Test\n  public void serializeMinInt32() throws IOException {\n    assertEncodingMatches(-0x80000000, EXPECTED_MIN_INT32);\n  }\n\n  @Test\n  public void serializeMinInt64() throws IOException {\n    assertEncodingMatches(-0x8000000000000000L, EXPECTED_MIN_INT64);\n  }\n\n  @Test\n  public void serializeReal() throws IOException {\n    assertEncodingMatches(0.123456789, EXPECTED_REAL);\n  }\n\n  @Test\n  public void serializeTrue() throws IOException {\n    assertEncodingMatches(true, EXPECTED_TRUE);\n  }\n\n  @Test\n  public void serializeFalse() throws IOException {\n    assertEncodingMatches(false, EXPECTED_FALSE);\n  }\n\n  @Test\n  public void serializeNull() throws IOException {\n    assertEncodingMatches(null, EXPECTED_NULL);\n  }\n\n  @Test\n  public void throwIfStringNotUTF8() throws IOException {\n    thrown.expect(CharacterCodingException.class);\n    BserSerializer serializer = new BserSerializer();\n    // UTF-8 cannot legally represent half of a surrogate pair, so this should throw.\n    serializer.serializeToBuffer(\"\\uDC00\", buffer);\n  }\n\n  @Test\n  public void throwIfMapKeyNotString() throws IOException {\n    thrown.expect(IOException.class);\n    thrown.expectMessage(\"Unrecognized map key type class java.lang.Integer, expected string\");\n    BserSerializer serializer = new BserSerializer();\n    serializer.serializeToBuffer(ImmutableMap.of(0, 1), buffer);\n  }\n\n  @Test\n  public void smallObjectReusesInputBuffer() throws IOException {\n    BserSerializer serializer = new BserSerializer();\n    ByteBuffer result = serializer.serializeToBuffer(true, buffer);\n    assertThat(result, is(sameInstance(buffer)));\n  }\n\n  @Test\n  public void largeObjectAllocatesNewBuffer() throws IOException {\n    BserSerializer serializer = new BserSerializer();\n    ByteBuffer result = serializer.serializeToBuffer(Strings.repeat(\"X\", 10000), buffer);\n    assertThat(result, is(not(sameInstance(buffer))));\n  }\n\n  @Test\n  public void serializeTrueToStream() throws IOException {\n    try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {\n      BserSerializer serializer = new BserSerializer();\n      serializer.serializeToStream(true, os);\n      assertThat(os.toByteArray(), equalTo(BaseEncoding.base16().decode(EXPECTED_TRUE)));\n    }\n  }\n}\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/environment/ExecutableFinderTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.environment;\n\nimport java.io.IOException;\nimport java.nio.file.FileSystems;\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.nio.file.Paths;\nimport java.nio.file.attribute.PosixFilePermission;\nimport java.util.Set;\n\nimport com.facebook.watchman.util.TemporaryPaths;\n\nimport com.google.common.base.Optional;\nimport com.google.common.collect.ImmutableList;\nimport com.google.common.collect.ImmutableMap;\nimport org.junit.Rule;\nimport org.junit.Test;\n\nimport static java.nio.charset.StandardCharsets.UTF_8;\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertTrue;\n\npublic class ExecutableFinderTest {\n  @Rule\n  public TemporaryPaths tmp = new TemporaryPaths();\n\n  @Test\n  public void testSearchPathsFileFoundReturnsPath() throws IOException {\n    Path dir1 = tmp.newFolder(\"foo\");\n    Path dir2 = tmp.newFolder(\"bar\");\n    Path dir3 = tmp.newFolder(\"baz\");\n    Path file = createExecutable(\"bar/blech\");\n\n    assertEquals(\n        Optional.of(file),\n        ExecutableFinder.getOptionalExecutable(\n                Paths.get(\"blech\"),\n                ImmutableList.of(dir1, dir2, dir3),\n                ImmutableList.<String>of()));\n  }\n\n  @Test\n  public void testSearchPathsNonExecutableFileIsIgnored() throws IOException {\n    Path dir1 = tmp.newFolder(\"foo\");\n    // Note this is not executable.\n    tmp.newFile(\"foo/blech\");\n    Path dir2 = tmp.newFolder(\"bar\");\n    Path dir3 = tmp.newFolder(\"baz\");\n    Path file = createExecutable(\"bar/blech\");\n\n    assertEquals(\n        Optional.of(file),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"blech\"),\n            ImmutableList.of(dir1, dir2, dir3),\n            ImmutableList.<String>of()));\n  }\n\n  @Test\n  public void testSearchPathsDirAndFileFoundReturnsFileNotDir() throws IOException {\n    Path dir1 = tmp.newFolder(\"foo\");\n    // We don't want to find this folder.\n    tmp.newFolder(\"foo\", \"foo\");\n    Path dir2 = tmp.newFolder(\"bar\");\n    Path file = createExecutable(\"bar/foo\");\n\n    assertEquals(\n        Optional.of(file),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"foo\"),\n            ImmutableList.of(dir1, dir2),\n            ImmutableList.<String>of()));\n  }\n\n  @Test\n  public void testSearchPathsMultipleFileFoundReturnsFirstPath() throws IOException {\n    Path dir1 = tmp.newFolder(\"foo\");\n    Path dir2 = tmp.newFolder(\"bar\");\n    Path dir3 = tmp.newFolder(\"baz\");\n    Path file1 = createExecutable(\"bar/blech\");\n    createExecutable(\"baz/blech\");\n\n    assertEquals(\n        Optional.of(file1),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"blech\"),\n            ImmutableList.of(dir1, dir2, dir3),\n            ImmutableList.<String>of()));\n  }\n\n  @Test\n  public void testSearchPathsSymlinkToExecutableInsidePathReturnsPath() throws IOException {\n    Path dir2 = tmp.newFolder(\"bar\");\n    createExecutable(\"bar/blech_target\");\n    Path file1 = dir2.resolve(\"blech\");\n    Files.createSymbolicLink(file1, Paths.get(\"blech_target\"));\n\n    assertEquals(\n        Optional.of(file1),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"blech\"),\n            ImmutableList.of(dir2),\n            ImmutableList.<String>of()));\n  }\n\n  @Test\n  public void testSearchPathsSymlinkToExecutableOutsideSearchPathReturnsPath() throws IOException {\n    Path dir1 = tmp.newFolder(\"foo\");\n    Path dir2 = tmp.newFolder(\"bar\");\n    Path dir3 = tmp.newFolder(\"baz\");\n    tmp.newFolder(\"unsearched\");\n    Path binary = createExecutable(\"unsearched/binary\");\n    Path file1 = dir2.resolve(\"blech\");\n    Files.createSymbolicLink(file1, binary);\n\n    assertEquals(\n        Optional.of(file1),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"blech\"),\n            ImmutableList.of(dir1, dir2, dir3),\n            ImmutableList.<String>of()));\n  }\n\n  @Test\n  public void testSearchPathsFileNotFoundReturnsAbsent() throws IOException {\n    Path dir1 = tmp.newFolder(\"foo\");\n    Path dir2 = tmp.newFolder(\"bar\");\n    Path dir3 = tmp.newFolder(\"baz\");\n\n    assertEquals(\n        Optional.<Path>absent(),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"blech\"),\n            ImmutableList.of(dir1, dir2, dir3),\n            ImmutableList.<String>of()));\n  }\n\n  @Test\n  public void testSearchPathsEmptyReturnsAbsent() throws IOException {\n    assertEquals(\n        Optional.<Path>absent(),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"blech\"),\n            ImmutableList.<Path>of(),\n            ImmutableList.<String>of()));\n  }\n\n  @Test\n  public void testSearchPathsWithIsExecutableFunctionFailure() throws IOException {\n    // Path to search\n    Path baz = tmp.newFolder(\"baz\");\n\n    // Unexecutable \"executable\"\n    Path bar = baz.resolve(\"bar\");\n    Files.write(bar, \"\".getBytes(UTF_8));\n    assertTrue(bar.toFile().setExecutable(false));\n\n    assertEquals(\n        Optional.<Path>absent(),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"bar\"),\n            ImmutableList.of(baz),\n            ImmutableList.<String>of()));\n  }\n\n  @Test\n  public void testSearchPathsWithExtensions() throws IOException {\n    Path dir = tmp.newFolder(\"foo\");\n    Path file = createExecutable(\"foo/bar.EXE\");\n\n    assertEquals(\n        Optional.of(file),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"bar\"),\n            ImmutableList.of(dir),\n            ImmutableList.of(\".BAT\", \".EXE\")));\n  }\n\n  @Test\n  public void testSearchPathsWithExtensionsNoMatch() throws IOException {\n    Path dir = tmp.newFolder(\"foo\");\n    createExecutable(\"foo/bar.COM\");\n\n    assertEquals(\n        Optional.absent(),\n        ExecutableFinder.getOptionalExecutable(\n            Paths.get(\"bar\"),\n            ImmutableList.of(dir),\n            ImmutableList.of(\".BAT\", \".EXE\")));\n  }\n\n  @Test\n  public void testThatADirectoryIsNotConsideredAnExecutable() throws IOException {\n    Path dir = tmp.newFolder();\n    Path exe = dir.resolve(\"exe\");\n    Files.createDirectories(exe);\n\n    assertEquals(\n        Optional.absent(),\n        ExecutableFinder.getOptionalExecutable(\n            exe.toAbsolutePath(),\n            ImmutableMap.<String, String>of()));\n  }\n\n  private Path createExecutable(String executablePath) throws IOException {\n    Path file = tmp.newFile(executablePath);\n    makeExecutable(file);\n    return file;\n  }\n\n  public static void makeExecutable(Path file) throws IOException {\n    if (FileSystems.getDefault().supportedFileAttributeViews().contains(\"posix\")) {\n      Set<PosixFilePermission> permissions = Files.getPosixFilePermissions(file);\n\n      if (permissions.contains(PosixFilePermission.OWNER_READ)) {\n        permissions.add(PosixFilePermission.OWNER_EXECUTE);\n      }\n      if (permissions.contains(PosixFilePermission.GROUP_READ)) {\n        permissions.add(PosixFilePermission.GROUP_EXECUTE);\n      }\n      if (permissions.contains(PosixFilePermission.OTHERS_READ)) {\n        permissions.add(PosixFilePermission.OTHERS_EXECUTE);\n      }\n\n      Files.setPosixFilePermissions(file, permissions);\n    } else {\n      if (!file.toFile().setExecutable(/* executable */ true, /* ownerOnly */ true)) {\n        throw new IOException(\"The file could not be made executable\");\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/environment/FileFinderTest.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.environment;\n\nimport java.io.IOException;\nimport java.nio.file.Path;\nimport java.util.Arrays;\n\nimport com.facebook.watchman.util.TemporaryPaths;\n\nimport com.google.common.base.Optional;\nimport com.google.common.collect.ImmutableList;\nimport com.google.common.collect.ImmutableSet;\nimport com.google.common.collect.ImmutableSortedSet;\nimport org.junit.Assert;\nimport org.junit.Rule;\nimport org.junit.Test;\n\npublic class FileFinderTest {\n  @Rule\n  public TemporaryPaths tmp = new TemporaryPaths();\n\n  @Test\n  public void combine() {\n    Object[] result = FileFinder.combine(null, \"foo\", null).toArray();\n    Arrays.sort(result);\n    Assert.assertArrayEquals(\n        new String[] { \"foo\" },\n        result);\n\n    result = FileFinder.combine(\n        ImmutableSet.<String>of(),\n        \"foo\",\n        ImmutableSet.of(\".exe\", \".com\", \".bat\")).toArray();\n    Arrays.sort(result);\n    Assert.assertArrayEquals(\n        new String[] { \"foo.bat\", \"foo.com\", \"foo.exe\" },\n        result);\n\n    result = FileFinder.combine(\n        ImmutableSet.<String>of(\"lib\", \"\"),\n        \"foo\",\n        null).toArray();\n    Arrays.sort(result);\n    Assert.assertArrayEquals(\n        new String[] { \"foo\", \"libfoo\" },\n        result);\n  }\n\n  @Test\n  public void firstMatchInPath() throws IOException {\n    Path fee = tmp.newFolder(\"fee\");\n    Path fie = tmp.newFolder(\"fie\");\n    tmp.newFile(\"fee/foo\");\n    tmp.newFile(\"fie/foo\");\n    ImmutableList<Path> searchPath = ImmutableList.of(fie, fee);\n    Optional<Path> result = FileFinder.getOptionalFile(\"foo\", searchPath);\n    Assert.assertTrue(result.isPresent());\n    Assert.assertEquals(fie.resolve(\"foo\"), result.get());\n  }\n\n  @Test\n  public void matchAny() throws IOException {\n    Path fee = tmp.newFolder(\"fee\");\n    tmp.newFile(\"fee/foo\");\n    Path fie = tmp.newFolder(\"fie\");\n    tmp.newFile(\"fie/bar\");\n\n    ImmutableSet<String> names = ImmutableSet.of(\n        \"foo\",\n        \"bar\",\n        \"baz\");\n    Optional<Path> result =\n        FileFinder.getOptionalFile(\n            names,\n            ImmutableSortedSet.of(fee));\n    Assert.assertTrue(result.isPresent());\n    Assert.assertEquals(fee.resolve(\"foo\"), result.get());\n\n    result = FileFinder.getOptionalFile(\n        names,\n        ImmutableSortedSet.of(fie));\n    Assert.assertTrue(result.isPresent());\n    Assert.assertEquals(fie.resolve(\"bar\"), result.get());\n  }\n\n  @Test\n  public void noMatch() throws IOException {\n    Path fee = tmp.newFolder(\"fee\");\n    tmp.newFile(\"fee/foo\");\n    Path fie = tmp.newFolder(\"fie\");\n    tmp.newFile(\"fie/bar\");\n\n    Optional<Path> result =\n        FileFinder.getOptionalFile(\n            \"baz\",\n            ImmutableSortedSet.of(fee, fie));\n    Assert.assertFalse(result.isPresent());\n  }\n}\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/fakes/FakeWatchmanClient.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.fakes;\n\nimport java.io.IOException;\nimport java.nio.file.Path;\nimport java.util.List;\nimport java.util.Map;\n\nimport com.facebook.watchman.Callback;\nimport com.facebook.watchman.WatchmanClient;\n\nimport com.google.common.util.concurrent.ListenableFuture;\nimport sun.reflect.generics.reflectiveObjects.NotImplementedException;\n\npublic class FakeWatchmanClient implements WatchmanClient {\n\n  @Override\n  public ListenableFuture<Map<String, Object>> clock(Path path) {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> clock(Path path, Number syncTimeout) {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> watch(Path path) {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> watchDel(Path path) {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public ListenableFuture<Boolean> unsubscribe(SubscriptionDescriptor descriptor) {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public ListenableFuture<SubscriptionDescriptor> subscribe(\n      Path path, Map<String, Object> query, Callback listener) {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> version() {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> version(\n      List<String> optionalCapabilities, List<String> requiredCapabilities) {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public ListenableFuture<Map<String, Object>> run(List<Object> command) {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public ListenableFuture<Boolean> unsubscribeAll() {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public void close() throws IOException {\n    throw new NotImplementedException();\n  }\n\n  @Override\n  public void start() {\n    throw new NotImplementedException();\n  }\n}\n"
  },
  {
    "path": "watchman/java/test/com/facebook/watchman/util/TemporaryPaths.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\npackage com.facebook.watchman.util;\n\nimport java.io.IOException;\nimport java.nio.file.FileVisitResult;\nimport java.nio.file.Files;\nimport java.nio.file.Path;\nimport java.nio.file.SimpleFileVisitor;\nimport java.nio.file.attribute.BasicFileAttributes;\nimport java.util.Arrays;\n\nimport org.junit.rules.ExternalResource;\n\npublic class TemporaryPaths extends ExternalResource {\n\n  private final boolean keepContents;\n  private Path root;\n\n  public TemporaryPaths() {\n    this(false);\n  }\n\n  public TemporaryPaths(boolean keepContents) {\n    this.keepContents = keepContents;\n  }\n\n  @Override\n  protected void before() throws Throwable {\n    root = Files.createTempDirectory(\"junit-temp-path\").toRealPath();\n  }\n\n  public Path getRoot() {\n    return root;\n  }\n\n  public Path newFolder() throws IOException {\n    return Files.createTempDirectory(root, \"tmpFolder\");\n  }\n\n  @Override\n  @SuppressWarnings(\"PMD.EmptyCatchBlock\")\n  protected void after() {\n    if (root == null) {\n      return;\n    }\n\n    if (keepContents) {\n      System.out.printf(\"Contents available at %s.\\n\", getRoot());\n      return;\n    }\n\n    try {\n      Files.walkFileTree(root, new SimpleFileVisitor<Path>() {\n        @Override\n        public FileVisitResult visitFile(\n            Path file, BasicFileAttributes attrs) throws IOException {\n          Files.delete(file);\n          return FileVisitResult.CONTINUE;\n        }\n\n        @Override\n        public FileVisitResult postVisitDirectory(Path dir,\n            IOException exc) throws IOException {\n          Files.delete(dir);\n          return FileVisitResult.CONTINUE;\n        }\n      });\n    } catch (IOException e) {\n      // Swallow. Nothing sane to do.\n    }\n  }\n\n  public Path newFile(String fileName) throws IOException {\n    Path toCreate = root.resolve(fileName);\n\n    if (Files.exists(toCreate)) {\n      throw new IOException(\n          \"a file with the name \\'\" + fileName + \"\\' already exists in the test folder\");\n    }\n\n    return Files.createFile(toCreate);\n  }\n\n  public Path newFile() throws IOException {\n    return Files.createTempFile(root, \"junit\", \"file\");\n  }\n\n  public Path newFolder(String... name) throws IOException {\n    Path toCreate = root;\n    for (String segment : name) {\n      toCreate = toCreate.resolve(segment);\n    }\n\n    if (Files.exists(toCreate)) {\n      throw new IOException(\n          String.format(\n              \"a folder with the name '%s' already exists in the test folder\",\n              Arrays.toString(name)));\n    }\n\n    return Files.createDirectories(toCreate);\n  }\n}\n"
  },
  {
    "path": "watchman/java/third-party/guava/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\nremote_file(\n    name = \"guava-jar\",\n    out = \"guava-19.0.jar\",\n    sha1 = \"6ce200f6b23222af3d8abb6b6459e6c44f4bb0e9\",\n    url = \"http://central.maven.org/maven2/com/google/guava/guava/19.0/guava-19.0.jar\",\n)\n\nprebuilt_jar(\n    name = \"guava\",\n    binary_jar = \":guava-jar\",\n    visibility = [\"PUBLIC\"],\n)\n"
  },
  {
    "path": "watchman/java/third-party/guava/README",
    "content": "README for Guava\n\nURL: https://github.com/google/guava\nDownloaded From: http://central.maven.org/maven2/com/google/guava/guava/19.0/guava-19.0.jar\nLicense: Apache 2.0\n"
  },
  {
    "path": "watchman/java/third-party/hamcrest/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\nremote_file(\n    name = \"java-hamcrest-2-jar\",\n    out = \"java-hamcrest-2.0.0.0.jar\",\n    sha1 = \"0221cf2b5aabedf8cd76534996caa21b283ea5d0\",\n    url = \"http://central.maven.org/maven2/org/hamcrest/hamcrest-junit/2.0.0.0/hamcrest-junit-2.0.0.0.jar\",\n)\n\nremote_file(\n    name = \"hamcrest-junit-2-jar\",\n    out = \"hamcrest-junit-2.0.0.0.jar\",\n    sha1 = \"0f1c8853ade0ecf707f5a261c830e98893983813\",\n    url = \"http://central.maven.org/maven2/org/hamcrest/java-hamcrest/2.0.0.0/java-hamcrest-2.0.0.0.jar\",\n)\n\njava_library(\n    name = \"hamcrest-2\",\n    visibility = [\"PUBLIC\"],\n    deps = [],\n    exported_deps = [\n        \":hamcrest-junit-2\",\n        \":java-hamcrest-2\",\n    ],\n)\n\nprebuilt_jar(\n    name = \"java-hamcrest-2\",\n    binary_jar = \":java-hamcrest-2-jar\",\n    visibility = [\"PUBLIC\"],\n)\n\nprebuilt_jar(\n    name = \"hamcrest-junit-2\",\n    binary_jar = \":hamcrest-junit-2-jar\",\n    visibility = [\"PUBLIC\"],\n    deps = [\n        \":java-hamcrest-2\",\n    ],\n)\n"
  },
  {
    "path": "watchman/java/third-party/hamcrest/README",
    "content": "README for Hamcrest-2\n\nURL: http://hamcrest.org/\nDownloaded From:\n* http://central.maven.org/maven2/org/hamcrest/hamcrest-junit/2.0.0.0/hamcrest-junit-2.0.0.0.jar\n* http://central.maven.org/maven2/org/hamcrest/java-hamcrest/2.0.0.0/java-hamcrest-2.0.0.0.jar\nLicense: BSD\n"
  },
  {
    "path": "watchman/java/third-party/immutables/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\nremote_file(\n    name = \"value-jar\",\n    out = \"value-2.1.5.jar\",\n    sha1 = \"8da4fc0eb4655734ffe1b09284f4fc62d033b853\",\n    url = \"http://central.maven.org/maven2/org/immutables/value/2.1.5/value-2.1.5.jar\",\n)\n\nremote_file(\n    name = \"value-processor-jar\",\n    out = \"value-processor-2.1.5.jar\",\n    sha1 = \"37ad0e3c1bd72ab735eaf714b2ce935dee18e4a8\",\n    url = \"http://central.maven.org/maven2/org/immutables/value-processor/2.1.5/value-processor-2.1.5.jar\",\n)\n\nremote_file(\n    name = \"generator-jar\",\n    out = \"generator-2.1.5.jar\",\n    sha1 = \"8cd760cf8cdcbee6f60f11fc7ed8034dfc650444\",\n    url = \"http://central.maven.org/maven2/org/immutables/generator/2.1.5/generator-2.1.5.jar\",\n)\n\nprebuilt_jar(\n    name = \"value\",\n    binary_jar = \":value-jar\",\n    visibility = [\n        \"PUBLIC\",\n    ],\n)\n\nprebuilt_jar(\n    name = \"value-processor\",\n    binary_jar = \":value-processor-jar\",\n    visibility = [\n        \"PUBLIC\",\n    ],\n)\n\nprebuilt_jar(\n    name = \"generator\",\n    binary_jar = \":generator-jar\",\n    visibility = [\n        \"PUBLIC\",\n    ],\n)\n"
  },
  {
    "path": "watchman/java/third-party/immutables/README",
    "content": "README for Immutables\n\nURL: https://github.com/immutables/immutables\nDownloaded From:\n* http://central.maven.org/maven2/org/immutables/generator/2.1.5/generator-2.1.5.jar\n* http://central.maven.org/maven2/org/immutables/value-processor/2.1.5/value-processor-2.1.5.jar\n* http://central.maven.org/maven2/org/immutables/value/2.1.5/value-2.1.5.jar\n\nLicense: Apache 2.0\n"
  },
  {
    "path": "watchman/java/third-party/jna/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\nremote_file(\n    name = \"jna-jar\",\n    out = \"jna-4.2.0.jar\",\n    sha1 = \"812b976ed15bb1b0b3fc059fae927b0f76b39585\",\n    url = \"http://central.maven.org/maven2/net/java/dev/jna/jna/4.2.0/jna-4.2.0.jar\",\n)\n\nremote_file(\n    name = \"jna-platform-jar\",\n    out = \"jna-platform-4.2.0.jar\",\n    sha1 = \"4a04d34615d534f273f7b8bd30d75304efe4ab04\",\n    url = \"http://central.maven.org/maven2/net/java/dev/jna/jna-platform/4.2.0/jna-platform-4.2.0.jar\",\n)\n\nprebuilt_jar(\n    name = \"jna\",\n    binary_jar = \":jna-jar\",\n    visibility = [\"PUBLIC\"],\n)\n\nprebuilt_jar(\n    name = \"jna-platform\",\n    binary_jar = \":jna-platform-jar\",\n    visibility = [\"PUBLIC\"],\n)\n"
  },
  {
    "path": "watchman/java/third-party/jna/README",
    "content": "README for JNA\n\nURL: https://github.com/java-native-access/jna\nDownloaded From: http://central.maven.org/maven2/net/java/dev/jna/jna/4.2.0/jna-4.2.0.jar\nLicense: Apache 2.0 and LPGL 2.1 dual license\n"
  },
  {
    "path": "watchman/java/third-party/jsr-305/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\nremote_file(\n    name = \"jsr-305-jar\",\n    out = \"jsr305.jar\",\n    sha1 = \"f7be08ec23c21485b9b5a1cf1654c2ec8c58168d\",\n    url = \"http://central.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.jar\",\n)\n\nprebuilt_jar(\n    name = \"jsr-305\",\n    binary_jar = \":jsr-305-jar\",\n    visibility = [\n        \"PUBLIC\",\n    ],\n)\n"
  },
  {
    "path": "watchman/java/third-party/jsr-305/README",
    "content": "README for JSR-305\n\nURL: http://findbugs.sourceforge.net/\nDownloaded From: http://central.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.jar\nLicense: Apache 2.0\n"
  },
  {
    "path": "watchman/java/third-party/junit/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\nremote_file(\n    name = \"junit-download\",\n    out = \"junit-4.12.jar\",\n    sha1 = \"2973d150c0dc1fefe998f834810d68f278ea58ec\",\n    url = \"http://central.maven.org/maven2/junit/junit/4.12/junit-4.12.jar\",\n)\n\nprebuilt_jar(\n    name = \"junit-jar\",\n    binary_jar = \":junit-download\",\n)\n\njava_library(\n    name = \"junit\",\n    visibility = [\"PUBLIC\"],\n    exported_deps = [\n        \":junit-jar\",\n        \"//third-party/hamcrest:hamcrest-2\",\n    ],\n)\n"
  },
  {
    "path": "watchman/java/third-party/junit/README",
    "content": "README for Junit\n\nURL: https://github.com/junit-team/junit4\nDownloaded From: http://central.maven.org/maven2/junit/junit/4.12/junit-4.12.jar\nLicense: Apache 2.0\n"
  },
  {
    "path": "watchman/java/third-party/mockito/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\nremote_file(\n    name = \"mockito-jar\",\n    out = \"mockito-core-1.9.5.jar\",\n    sha1 = \"c3264abeea62c4d2f367e21484fbb40c7e256393\",\n    url = \"http://central.maven.org/maven2/org/mockito/mockito-core/1.9.5/mockito-core-1.9.5.jar\",\n)\n\nprebuilt_jar(\n    name = \"mockito\",\n    binary_jar = \":mockito-jar\",\n    visibility = [\"PUBLIC\"],\n    deps = [\n        \"//third-party/hamcrest:hamcrest-2\",\n        \"//third-party/objenesis:objenesis\",\n    ],\n)\n"
  },
  {
    "path": "watchman/java/third-party/mockito/README",
    "content": "README for Mockito\n\nURL: http://mockito.org/\nDownloaded From: http://central.maven.org/maven2/org/mockito/mockito-core/1.9.5/mockito-core-1.9.5.jar\nLicense: MIT\n"
  },
  {
    "path": "watchman/java/third-party/nuprocess/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\nremote_file(\n    name = \"nuprocess-jar\",\n    out = \"nuprocess-1.1.0.jar\",\n    sha1 = \"9479382344b61b36dd3ca1ec1b10aaa91295d632\",\n    url = \"http://central.maven.org/maven2/com/zaxxer/nuprocess/1.1.0/nuprocess-1.1.0.jar\",\n)\n\nprebuilt_jar(\n    name = \"nuprocess\",\n    binary_jar = \":nuprocess-jar\",\n    visibility = [\"PUBLIC\"],\n    deps = [\n        \"//third-party/jna:jna\",\n    ],\n)\n"
  },
  {
    "path": "watchman/java/third-party/nuprocess/README",
    "content": "README for NuProcess\n\nURL: https://github.com/brettwooldridge/NuProcess\nDownloaded from: http://central.maven.org/maven2/com/zaxxer/nuprocess/1.1.0/nuprocess-1.1.0.jar\nLicense: Apache 2.0 license\n"
  },
  {
    "path": "watchman/java/third-party/objenesis/BUCK",
    "content": "oncall(\"scm_client_infra\")\n\nremote_file(\n    name = \"objenesis-jar\",\n    out = \"objenesis-1.3.jar\",\n    sha1 = \"dc13ae4faca6df981fc7aeb5a522d9db446d5d50\",\n    url = \"http://central.maven.org/maven2/org/objenesis/objenesis/1.3/objenesis-1.3.jar\",\n)\n\nprebuilt_jar(\n    name = \"objenesis\",\n    binary_jar = \":objenesis-jar\",\n    visibility = [\"PUBLIC\"],\n)\n"
  },
  {
    "path": "watchman/java/third-party/objenesis/README",
    "content": "README for Objenesis\n\nURL: http://objenesis.org/\nDownloaded From: http://central.maven.org/maven2/org/objenesis/objenesis/1.3/objenesis-1.3.jar\nLicense: MIT\n"
  },
  {
    "path": "watchman/listener-user.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/ScopeGuard.h>\n\n#include \"watchman/Client.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/PerfSample.h\"\n#include \"watchman/Shutdown.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/root/resolve.h\"\n#include \"watchman/watchman_cmd.h\"\n\n// Functions relating to the per-user service\n\nusing namespace watchman;\n\nstatic UntypedResponse cmd_shutdown(Client*, const json_ref&) {\n  logf(ERR, \"shutdown-server was requested, exiting!\\n\");\n  w_request_shutdown();\n\n  UntypedResponse resp;\n  resp.set(\"shutdown-server\", json_true());\n  return resp;\n}\nW_CMD_REG(\n    \"shutdown-server\",\n    cmd_shutdown,\n    CMD_DAEMON | CMD_POISON_IMMUNE,\n    nullptr);\n\nvoid add_root_warnings_to_response(\n    UntypedResponse& response,\n    const std::shared_ptr<Root>& root) {\n  auto info = root->recrawlInfo.rlock();\n\n  if (!info->warning) {\n    return;\n  }\n\n  response.set(\n      \"warning\",\n      w_string_to_json(\n          w_string::build(\n              info->warning.value(),\n              \"\\n\",\n              \"To clear this warning, run:\\n\"\n              \"`watchman watch-del '\",\n              root->root_path,\n              \"' ; watchman watch-project '\",\n              root->root_path,\n              \"'`\\n\")));\n}\n\nstd::shared_ptr<Root>\ndoResolveOrCreateRoot(Client* client, const json_ref& args, bool create) {\n  // Assume root is first element\n  size_t root_index = 1;\n  if (args.array().size() <= root_index) {\n    throw RootResolveError(\"wrong number of arguments\");\n  }\n  const auto& ele = args.at(root_index);\n\n  const char* root_name = json_string_value(ele);\n  if (!root_name) {\n    RootResolveError::throwf(\n        \"invalid value for argument {}, expected a string naming the root dir\",\n        root_index);\n  }\n  return resolveRootByName(client, root_name, create);\n}\n\nstd::shared_ptr<Root>\nresolveRootByName(Client* client, const char* rootName, bool create) {\n  try {\n    std::shared_ptr<Root> root;\n    if (client->client_mode) {\n      root = w_root_resolve_for_client_mode(rootName);\n    } else {\n      if (!client->client_is_owner) {\n        // Only the owner is allowed to create watches\n        create = false;\n      }\n      root = w_root_resolve(rootName, create);\n    }\n\n    if (client->dispatch_command) {\n      addRootMetadataToEvent(\n          root->getRootMetadata(), *client->dispatch_command);\n    }\n\n    if (client->perf_sample) {\n      client->perf_sample->add_root_metadata(root->getRootMetadata());\n    }\n    return root;\n  } catch (const RootNotConnectedError&) {\n    // pass through RootNotConnectedError\n    throw;\n  } catch (const std::exception& exc) {\n    RootResolveError::throwf(\n        \"unable to resolve root {}: {}{}\",\n        rootName,\n        exc.what(),\n        client->client_is_owner\n            ? \"\"\n            : \" (this may be because you are not the process owner)\");\n  }\n}\n\nstd::shared_ptr<Root> resolveRoot(Client* client, const json_ref& args) {\n  return doResolveOrCreateRoot(client, args, false);\n}\n\nstd::shared_ptr<Root> resolveOrCreateRoot(\n    Client* client,\n    const json_ref& args) {\n  return doResolveOrCreateRoot(client, args, true);\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/listener.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/listener.h\"\n#include <folly/Exception.h>\n#include <folly/MapUtil.h>\n#include <folly/SocketAddress.h>\n#include <folly/String.h>\n#include <folly/Synchronized.h>\n#include <folly/net/NetworkSocket.h>\n#include <atomic>\n#include <chrono>\n#include <optional>\n#include <thread>\n#include \"watchman/Client.h\"\n#include \"watchman/Constants.h\"\n#include \"watchman/GroupLookup.h\"\n#include \"watchman/SanityCheck.h\"\n#include \"watchman/Shutdown.h\"\n#include \"watchman/SignalHandler.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/XattrUtils.h\"\n#include \"watchman/portability/WinError.h\"\n#include \"watchman/sockname.h\"\n#include \"watchman/state.h\"\n#include \"watchman/watchman_cmd.h\"\n\nusing namespace watchman;\n\nstatic FileDescriptor listener_fd;\n\n#if defined(HAVE_KQUEUE) || defined(HAVE_FSEVENTS)\n#ifdef __OpenBSD__\n#include <sys/siginfo.h> // @manual\n#endif\n#include <sys/param.h>\n#include <sys/resource.h>\n#include <sys/sysctl.h>\n#endif\n\n#ifndef _WIN32\n\n// If we are running under inetd-style supervision, call this function\n// to move the inetd provided socket descriptor(s) to a new descriptor\n// number and remember that we can just use these when we're starting\n// up the listener.\nvoid w_listener_prep_inetd() {\n  if (listener_fd) {\n    throw std::runtime_error(\n        \"w_listener_prep_inetd: listener_fd is already assigned\");\n  }\n\n  listener_fd = FileDescriptor(\n      dup(STDIN_FILENO),\n      \"dup(stdin) for listener\",\n      // It's probably a socket but we don't know for sure\n      FileDescriptor::FDType::Unknown);\n}\n\n#endif\n\nstatic FileDescriptor get_listener_unix_domain_socket(const char* path) {\n#ifndef _WIN32\n  mode_t perms = cfg_get_perms(\n      \"sock_access\", true /* write bits */, false /* execute bits */);\n#endif\n  FileDescriptor listener_fd;\n\n  struct sockaddr_un un{};\n  if (strlen(path) >= sizeof(un.sun_path) - 1) {\n    logf(ERR, \"{}: path is too long\\n\", path);\n    return FileDescriptor();\n  }\n\n  listener_fd = FileDescriptor(\n      ::socket(PF_LOCAL, SOCK_STREAM, 0),\n      \"socket\",\n      FileDescriptor::FDType::Socket);\n\n  un.sun_family = PF_LOCAL;\n  memcpy(un.sun_path, path, strlen(path) + 1);\n\n  (void)unlink(path);\n  if (::bind(listener_fd.system_handle(), (struct sockaddr*)&un, sizeof(un)) !=\n      0) {\n    logf(ERR, \"bind({}): {}\\n\", path, folly::errnoStr(errno));\n    return FileDescriptor();\n  }\n\n#ifndef _WIN32\n  // The permissions in the containing directory should be correct, so this\n  // should be correct as well. But set the permissions in any case.\n  if (chmod(path, perms) == -1) {\n    logf(ERR, \"chmod({}, {:o}): {}\", path, perms, folly::errnoStr(errno));\n    return FileDescriptor();\n  }\n#ifdef __linux__\n  // Allow setting an ACL on the sock file, this method does not require the\n  // owner to be a member of the target group.\n  const char* secondary_sock_group =\n      cfg_get_string(\"secondary_sock_group\", nullptr);\n\n  if (secondary_sock_group) {\n    // TODO: pass mode_t perms (from earlier in this function) to\n    // setSecondaryGroupACL instead of using three booleans\n    if (!watchman::setSecondaryGroupACL(\n            path,\n            secondary_sock_group,\n            true /* read bits */,\n            true /* write bits */,\n            false /* execute bits */)) {\n      return FileDescriptor();\n    }\n  }\n#endif\n\n  // Double-check that the socket has the right permissions. This can happen\n  // when the containing directory was created in a previous run, with a group\n  // the user is no longer in.\n  struct stat st;\n  if (lstat(path, &st) == -1) {\n    watchman::log(\n        watchman::ERR, \"lstat(\", path, \"): \", folly::errnoStr(errno), \"\\n\");\n    return FileDescriptor();\n  }\n\n  // This is for testing only\n  // (test_sock_perms.py:test_user_previously_in_sock_group). Do not document.\n  const char* sock_group_name = cfg_get_string(\"__sock_file_group\", nullptr);\n  if (!sock_group_name) {\n    sock_group_name = cfg_get_string(\"sock_group\", nullptr);\n  }\n\n  if (sock_group_name) {\n    const struct group* sock_group = w_get_group(sock_group_name);\n    if (!sock_group) {\n      return FileDescriptor();\n    }\n    if (st.st_gid != sock_group->gr_gid) {\n      watchman::log(\n          watchman::ERR,\n          \"for socket '\",\n          path,\n          \"', gid \",\n          st.st_gid,\n          \" doesn't match expected gid \",\n          sock_group->gr_gid,\n          \" (group name \",\n          sock_group_name,\n          \"). Ensure that you are still a member of group \",\n          sock_group_name,\n          \".\\n\");\n      return FileDescriptor();\n    }\n  }\n#endif\n\n  if (::listen(listener_fd.system_handle(), 200) != 0) {\n    logf(ERR, \"listen({}): {}\\n\", path, folly::errnoStr(errno));\n    return FileDescriptor();\n  }\n\n  return listener_fd;\n}\n\n#ifdef _WIN32\n\nstatic FileDescriptor create_pipe_server(const char* path) {\n  return FileDescriptor(\n      intptr_t(CreateNamedPipe(\n          path,\n          PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,\n          PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_REJECT_REMOTE_CLIENTS,\n          PIPE_UNLIMITED_INSTANCES,\n          WATCHMAN_IO_BUF_SIZE,\n          512,\n          0,\n          nullptr)),\n      FileDescriptor::FDType::Pipe);\n}\n\nstatic void named_pipe_accept_loop_internal(\n    std::shared_ptr<watchman_event> listener_event) {\n  HANDLE handles[2];\n  auto olap = OVERLAPPED();\n  HANDLE connected_event = CreateEvent(nullptr, FALSE, TRUE, nullptr);\n  auto path = get_named_pipe_sock_path();\n\n  if (!connected_event) {\n    logf(\n        ERR,\n        \"named_pipe_accept_loop_internal: CreateEvent failed: {}\\n\",\n        win32_strerror(GetLastError()));\n    return;\n  }\n\n  handles[0] = connected_event;\n  handles[1] = (HANDLE)listener_event->system_handle();\n  olap.hEvent = connected_event;\n\n  logf(ERR, \"waiting for pipe clients on {}\\n\", path);\n  while (!w_is_stopping()) {\n    FileDescriptor client_fd;\n    DWORD res;\n\n    client_fd = create_pipe_server(path.c_str());\n    if (!client_fd) {\n      logf(\n          ERR,\n          \"CreateNamedPipe(%s) failed: %s\\n\",\n          path,\n          win32_strerror(GetLastError()));\n      continue;\n    }\n\n    ResetEvent(connected_event);\n    if (!ConnectNamedPipe((HANDLE)client_fd.handle(), &olap)) {\n      res = GetLastError();\n\n      if (res == ERROR_PIPE_CONNECTED) {\n        UserClient::create(w_stm_fdopen(std::move(client_fd)));\n        continue;\n      }\n\n      if (res != ERROR_IO_PENDING) {\n        logf(ERR, \"ConnectNamedPipe: {}\\n\", win32_strerror(GetLastError()));\n        continue;\n      }\n\n      res = WaitForMultipleObjectsEx(2, handles, false, INFINITE, true);\n      if (res == WAIT_OBJECT_0 + 1) {\n        // Signalled to stop\n        CancelIoEx((HANDLE)client_fd.handle(), &olap);\n        continue;\n      }\n\n      if (res != WAIT_OBJECT_0) {\n        logf(\n            ERR,\n            \"WaitForMultipleObjectsEx: ConnectNamedPipe: \"\n            \"unexpected status {}\\n\",\n            res);\n        CancelIoEx((HANDLE)client_fd.handle(), &olap);\n        continue;\n      }\n    }\n    UserClient::create(w_stm_fdopen(std::move(client_fd)));\n  }\n  logf(ERR, \"is_stopping is true, so acceptor is done\\n\");\n}\n\nstatic void named_pipe_accept_loop() {\n  log(DBG, \"Starting pipe listener on \", get_named_pipe_sock_path(), \"\\n\");\n\n  std::shared_ptr<watchman_event> listener_event = w_event_make_named_pipe();\n  w_push_listener_thread_event(listener_event);\n\n  std::vector<std::thread> acceptors;\n  for (json_int_t i = 0; i < cfg_get_int(\"win32_concurrent_accepts\", 32); ++i) {\n    acceptors.push_back(std::thread([i, listener_event]() {\n      w_set_thread_name(\"accept\", i);\n      named_pipe_accept_loop_internal(listener_event);\n    }));\n  }\n  for (auto& thr : acceptors) {\n    thr.join();\n  }\n}\n#endif\n\n/** A helper for owning and running a socket-style (rather than\n * named pipe style) accept loop that runs in another thread.\n */\nclass AcceptLoop {\n public:\n  /** Start an accept loop thread using the provided socket\n   * descriptor (`fd`).  The `name` parameter is used to name the\n   * thread */\n  AcceptLoop(std::string name, FileDescriptor&& fd) {\n    fd.setCloExec();\n    fd.setNonBlock();\n\n    std::shared_ptr<watchman_event> listener_event = w_event_make_sockets();\n    w_push_listener_thread_event(listener_event);\n\n    thread_ = std::thread([listener_fd = std::move(fd),\n                           name = std::move(name),\n                           listener_event]() mutable {\n      w_set_thread_name(name);\n      accept_thread(std::move(listener_fd), listener_event);\n    });\n  }\n\n  AcceptLoop(const AcceptLoop&) = delete;\n  AcceptLoop& operator=(const AcceptLoop&) = delete;\n\n  AcceptLoop(AcceptLoop&& other) {\n    *this = std::move(other);\n  }\n\n  AcceptLoop& operator=(AcceptLoop&& other) {\n    thread_ = std::move(other.thread_);\n    joined_ = other.joined_;\n    // Ensure that we don't try to join the source,\n    // as std::thread::join will std::terminate in that case.\n    // If it weren't for this we could use the compiler\n    // default implementation of move.\n    other.joined_ = true;\n    return *this;\n  }\n\n  ~AcceptLoop() {\n    join();\n  }\n\n  void join() {\n    if (joined_) {\n      return;\n    }\n    thread_.join();\n    joined_ = true;\n  }\n\n private:\n  static void accept_thread(\n      FileDescriptor&& listenerDescriptor,\n      std::shared_ptr<watchman_event> listener_event) {\n    auto listener = w_stm_fdopen(std::move(listenerDescriptor));\n    while (!w_is_stopping()) {\n      FileDescriptor client_fd;\n      EventPoll pfd[2];\n\n      pfd[0].evt = listener->getEvents();\n      pfd[1].evt = listener_event.get();\n\n      if (w_poll_events(pfd, 2, 60000) == 0) {\n        if (w_is_stopping()) {\n          break;\n        }\n        // Timed out, or error.\n        continue;\n      }\n\n      if (w_is_stopping()) {\n        break;\n      }\n\n#ifdef HAVE_ACCEPT4\n      client_fd = FileDescriptor(\n          accept4(\n              listener->getFileDescriptor().system_handle(),\n              nullptr,\n              0,\n              SOCK_CLOEXEC),\n          FileDescriptor::FDType::Socket);\n#else\n      client_fd = FileDescriptor(\n          ::accept(listener->getFileDescriptor().system_handle(), nullptr, 0),\n          FileDescriptor::FDType::Socket);\n#endif\n      if (!client_fd) {\n        continue;\n      }\n      client_fd.setCloExec();\n      int bufsize = WATCHMAN_IO_BUF_SIZE;\n      ::setsockopt(\n          client_fd.system_handle(),\n          SOL_SOCKET,\n          SO_SNDBUF,\n          (char*)&bufsize,\n          sizeof(bufsize));\n\n      UserClient::create(w_stm_fdopen(std::move(client_fd)));\n    }\n  }\n\n  std::thread thread_;\n  bool joined_{false};\n};\n\nbool w_start_listener() {\n#ifndef _WIN32\n  struct sigaction sa;\n  sigset_t sigset;\n#endif\n\n#if defined(HAVE_KQUEUE) || defined(HAVE_FSEVENTS)\n  {\n    struct rlimit limit;\n#ifndef __OpenBSD__\n    int mib[2] = {\n        CTL_KERN,\n#ifdef KERN_MAXFILESPERPROC\n        KERN_MAXFILESPERPROC\n#else\n        KERN_MAXFILES\n#endif\n    };\n#endif\n    int maxperproc;\n\n    getrlimit(RLIMIT_NOFILE, &limit);\n\n#ifndef __OpenBSD__\n    {\n      size_t len;\n\n      len = sizeof(maxperproc);\n      sysctl(mib, 2, &maxperproc, &len, nullptr, 0);\n      logf(\n          ERR,\n          \"file limit is {} kern.maxfilesperproc={}\\n\",\n          limit.rlim_cur,\n          maxperproc);\n    }\n#else\n    maxperproc = limit.rlim_max;\n    logf(\n        ERR,\n        \"openfiles-cur is {} openfiles-max={}\\n\",\n        limit.rlim_cur,\n        maxperproc);\n#endif\n\n    if (limit.rlim_cur != RLIM_INFINITY && maxperproc > 0 &&\n        limit.rlim_cur < (rlim_t)maxperproc) {\n      limit.rlim_cur = maxperproc;\n\n      if (setrlimit(RLIMIT_NOFILE, &limit)) {\n        logf(\n            ERR,\n            \"failed to raise limit to {} ({}).\\n\",\n            limit.rlim_cur,\n            folly::errnoStr(errno));\n      } else {\n        logf(ERR, \"raised file limit to {}\\n\", limit.rlim_cur);\n      }\n    }\n\n    getrlimit(RLIMIT_NOFILE, &limit);\n#ifndef HAVE_FSEVENTS\n    if (limit.rlim_cur < 10240) {\n      logf(\n          ERR,\n          \"Your file descriptor limit is very low ({})\"\n          \"please consult the watchman docs on raising the limits\\n\",\n          limit.rlim_cur);\n    }\n#endif\n  }\n#endif\n\n#ifndef _WIN32\n  signal(SIGPIPE, SIG_IGN);\n\n  /* allow SIGUSR1 and SIGCHLD to wake up a blocked thread, without restarting\n   * syscalls */\n  memset(&sa, 0, sizeof(sa));\n  sa.sa_handler = [](int) {};\n  sa.sa_flags = 0;\n  sigaction(SIGUSR1, &sa, nullptr);\n  sigaction(SIGCHLD, &sa, nullptr);\n\n  // Block SIGCHLD everywhere\n  sigemptyset(&sigset);\n  sigaddset(&sigset, SIGCHLD);\n  sigprocmask(SIG_BLOCK, &sigset, nullptr);\n#endif\n  // TODO: We are trying out folly signal handling on Linux. Eventually we\n  // should remove this if and use folly signal handling on all platforms.\n  if (!kUseFollySignalHandler) {\n    setup_signal_handlers();\n  }\n\n  std::optional<AcceptLoop> tcp_loop;\n  std::optional<AcceptLoop> unix_loop;\n\n  // When we unwind, ensure that we stop the accept threads\n  SCOPE_EXIT {\n    if (!w_is_stopping()) {\n      w_request_shutdown();\n    }\n    unix_loop.reset();\n    tcp_loop.reset();\n  };\n\n  if (listener_fd) {\n    // Assume that it was prepped by w_listener_prep_inetd()\n    logf(ERR, \"Using socket from inetd as listening socket\\n\");\n  } else {\n    listener_fd = get_listener_unix_domain_socket(get_unix_sock_name().c_str());\n    if (!listener_fd) {\n      logf(ERR, \"Failed to initialize unix domain listener\\n\");\n      return false;\n    }\n  }\n\n  if (listener_fd && !disable_unix_socket) {\n    unix_loop = AcceptLoop(\"unix-listener\", std::move(listener_fd));\n  }\n\n  if (Configuration().getBool(\"enable-sanity-check\", true)) {\n    startSanityCheckThread();\n  }\n\n#ifdef _WIN32\n  // Start the named pipes and join them; this will\n  // block until the server is shutdown.\n  if (!disable_named_pipe) {\n    named_pipe_accept_loop();\n  }\n#endif\n\n  // Clearing these will cause .join() to be called,\n  // so the next two lines will block until the server\n  // shutdown is initiated, rather than cause the server\n  // to shutdown.\n  unix_loop.reset();\n  tcp_loop.reset();\n\n  // Wait for clients, waking any sleeping clients up in the process\n  {\n    auto interval = std::chrono::microseconds(2000);\n    const auto max_interval = std::chrono::seconds(1);\n    const auto deadline =\n        std::chrono::steady_clock::now() + std::chrono::seconds(10);\n\n    size_t last_count = 0;\n    size_t n_clients = 0;\n\n    while (true) {\n      {\n        auto clients = UserClient::getAllClients();\n        n_clients = clients.size();\n        for (auto& client : clients) {\n          client->ping->notify();\n        }\n      }\n\n      // The clients lock and shared_ptr refcounts are released here, so entries\n      // may be removed from the active clients table.\n\n      if (n_clients == 0) {\n        break;\n      }\n\n      if (std::chrono::steady_clock::now() >= deadline) {\n        log(ERR, \"Abandoning wait for \", n_clients, \" outstanding clients\\n\");\n        break;\n      }\n\n      if (n_clients != last_count) {\n        log(ERR, \"waiting for \", n_clients, \" clients to terminate\\n\");\n      }\n\n      /* sleep override */\n      std::this_thread::sleep_for(interval);\n      interval *= 2;\n      if (interval > max_interval) {\n        interval = max_interval;\n      }\n    }\n  }\n\n  return true;\n}\n\n/* get-pid */\nstatic UntypedResponse cmd_get_pid(Client*, const json_ref&) {\n  UntypedResponse resp;\n  resp.set(\"pid\", json_integer(::getpid()));\n  return resp;\n}\nW_CMD_REG(\"get-pid\", cmd_get_pid, CMD_DAEMON, nullptr);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/listener.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/fs/FileDescriptor.h\"\n\nvoid w_listener_prep_inetd();\nbool w_start_listener();\n"
  },
  {
    "path": "watchman/main.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include <folly/Exception.h>\n#include <folly/ScopeGuard.h>\n#include <folly/Singleton.h>\n#include <folly/SocketAddress.h>\n#include <folly/String.h>\n#include <folly/init/Init.h>\n#include <folly/net/NetworkSocket.h>\n#include <folly/portability/Fcntl.h>\n#include <folly/system/Shell.h>\n\n#include <stdio.h>\n#include <optional>\n\n#include \"watchman/ChildProcess.h\"\n#include \"watchman/Client.h\"\n#include \"watchman/Clock.h\"\n#include \"watchman/Command.h\"\n#include \"watchman/Connect.h\"\n#include \"watchman/GroupLookup.h\"\n#include \"watchman/LogConfig.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/Options.h\"\n#include \"watchman/PDU.h\"\n#include \"watchman/PathUtils.h\"\n#include \"watchman/PerfSample.h\"\n#include \"watchman/ProcessLock.h\"\n#include \"watchman/ProcessUtil.h\"\n#include \"watchman/ThreadPool.h\"\n#include \"watchman/UserDir.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/XattrUtils.h\"\n#include \"watchman/fs/DirHandle.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/listener.h\"\n#include \"watchman/root/watchlist.h\"\n#include \"watchman/sockname.h\"\n#include \"watchman/state.h\"\n#include \"watchman/watchman_cmd.h\"\n#include \"watchman/watchman_stream.h\"\n\n#ifdef _WIN32\n#include <Lmcons.h> // @manual\n#include <Shlobj.h> // @manual\n#include \"watchman/thirdparty/deelevate_binding/include/deelevate.h\" // @manual\n#endif\n\nusing namespace watchman;\n\n#ifdef __APPLE__\n#include <mach-o/dyld.h> // @manual\n#endif\n\nnamespace {\n/// How should server requests be encoded?\nPduFormat server_format{is_bser, 0};\n/// How should output to stdout be encoded?\nPduFormat output_format{is_json_pretty, 0};\n} // namespace\n\nnamespace {\nconst std::string& get_pid_file() {\n  // We defer computing this path until we're in the server context because\n  // eager evaluation can trigger integration test failures unless all clients\n  // are aware of both the pidfile and the sockpath being used in the tests.\n  watchman::compute_file_name(\n      flags.pid_file, computeUserName(), \"pid\", \"pidfile\");\n  return flags.pid_file;\n}\n} // namespace\n\nW_CAP_REG(\"bser-v2\")\n\n/**\n * Log and fatal if Watchman was started with a low priority, which can cause a\n * poor experience, as Watchman is unable to keep up with the filesystem's\n * change notifications, triggering recrawls.\n */\nvoid detect_low_process_priority() {\n#ifndef _WIN32\n  // Since `-1` is a valid nice level, in order to detect an\n  // error we clear errno first and then test whether it is\n  // non-zero after we have retrieved the nice value.\n  errno = 0;\n  auto nice_value = nice(0);\n  folly::checkPosixError(errno, \"failed to get `nice` value\");\n\n  auto min_acceptable_nice_value = cfg_get_int(\"min_acceptable_nice_value\", 0);\n  if (nice_value > min_acceptable_nice_value) {\n    logf(\n        watchman::FATAL,\n        \"Watchman is running at a lower than normal priority. (nice_value={}, \"\n        \"min_acceptable_nice_value={}). Since that results in poor performance \"\n        \"that is otherwise very difficult to trace, diagnose and debug, \"\n        \"Watchman is refusing to start.\\n\",\n        nice_value,\n        min_acceptable_nice_value);\n  }\n#endif\n}\n\n/*\n * Detect the command that starts watchman\n */\nstd::optional<std::string> detect_starting_command(pid_t ppid) {\n#ifndef _WIN32\n  try {\n    auto processInfo = lookupProcessInfo(ppid).get();\n    return processInfo.name;\n  } catch (const std::exception& e) {\n    logf(\n        ERR,\n        \"Failed to lookup process info for pid {} exception {} \\n\",\n        ppid,\n        e.what());\n  }\n\n#endif\n  return std::nullopt;\n}\n\n[[noreturn]] static void run_service(ProcessLock::Handle&&, pid_t ppid) {\n#ifndef _WIN32\n  // Before we redirect stdin/stdout to the log files, move any inetd-provided\n  // socket to a different descriptor number.\n  if (flags.inetd_style) {\n    w_listener_prep_inetd();\n  }\n#endif\n\n  // redirect std{in,out,err}\n  int fd = folly::fileops::open(\"/dev/null\", O_RDONLY);\n  if (fd != -1) {\n    ignore_result(::dup2(fd, STDIN_FILENO));\n    folly::fileops::close(fd);\n  }\n\n  if (logging::log_name != \"-\") {\n    fd = folly::fileops::open(\n        logging::log_name.c_str(), O_WRONLY | O_APPEND | O_CREAT, 0600);\n    if (fd != -1) {\n      ignore_result(::dup2(fd, STDOUT_FILENO));\n      ignore_result(::dup2(fd, STDERR_FILENO));\n      folly::fileops::close(fd);\n    }\n  }\n\n  // If we weren't attached to a tty, check this now that we've opened\n  // the log files so that we can log the problem there.\n  //\n  // This is unlikely to trip, as both foreground and daemonized execution\n  // check process priority prior.\n  detect_low_process_priority();\n\n#ifndef _WIN32\n  /* we are the child, let's set things up */\n  ignore_result(chdir(\"/\"));\n#endif\n\n  w_set_thread_name(\"listener\");\n  {\n    char hostname[256];\n    gethostname(hostname, sizeof(hostname));\n    hostname[sizeof(hostname) - 1] = '\\0';\n    auto startingCommandName = detect_starting_command(ppid);\n    logf(\n        ERR,\n        \"Watchman {} {} starting up on {} by command {}\\n\",\n        PACKAGE_VERSION,\n#ifdef WATCHMAN_BUILD_INFO\n        WATCHMAN_BUILD_INFO,\n#else\n        \"<no build info set>\",\n#endif\n        hostname,\n        startingCommandName.value_or(\"<unknown_command>\"));\n  }\n\n#ifndef _WIN32\n  // Block SIGCHLD by default; we only want it to be delivered\n  // to the reaper thread and only when it is ready to reap.\n  // This MUST happen before we spawn any threads so that they\n  // can pick up our default blocked signal mask.\n  {\n    sigset_t sigset;\n\n    sigemptyset(&sigset);\n    sigaddset(&sigset, SIGCHLD);\n    sigprocmask(SIG_BLOCK, &sigset, nullptr);\n  }\n#endif\n\n  bool res = false;\n  {\n    watchman::getThreadPool().start(\n        cfg_get_int(\"thread_pool_worker_threads\", 16),\n        cfg_get_int(\"thread_pool_max_items\", 1024 * 1024));\n\n    ClockSpec::init();\n    w_state_load();\n    SCOPE_EXIT {\n      w_state_shutdown();\n    };\n    res = w_start_listener();\n    w_root_free_watched_roots();\n    perf_shutdown();\n    cfg_shutdown();\n  }\n\n  log(ERR, \"Exiting from service with res=\", res, \"\\n\");\n\n  if (res) {\n    exit(0);\n  }\n  exit(1);\n}\n\n// close any random descriptors that we may have inherited,\n// leaving only the main stdio descriptors open, if we execute a\n// child process.\nstatic void close_random_fds() {\n#ifndef _WIN32\n#ifdef HAVE_CLOSE_RANGE\n  close_range(STDERR_FILENO + 1, INT_MAX, 0);\n#else\n  struct rlimit limit;\n  long open_max = 0;\n  int max_fd;\n\n  // Deduce the upper bound for number of descriptors\n  limit.rlim_cur = 0;\n#ifdef RLIMIT_NOFILE\n  if (getrlimit(RLIMIT_NOFILE, &limit) != 0) {\n    limit.rlim_cur = 0;\n  }\n#elif defined(RLIM_OFILE)\n  if (getrlimit(RLIMIT_OFILE, &limit) != 0) {\n    limit.rlim_cur = 0;\n  }\n#endif\n#ifdef _SC_OPEN_MAX\n  open_max = sysconf(_SC_OPEN_MAX);\n#endif\n  if (open_max <= 0) {\n    open_max = 36; /* POSIX_OPEN_MAX (20) + some padding */\n  }\n  if (limit.rlim_cur == RLIM_INFINITY || limit.rlim_cur > INT_MAX) {\n    // \"no limit\", which seems unlikely\n    limit.rlim_cur = INT_MAX;\n  }\n  // Take the larger of the two values we compute\n  if (limit.rlim_cur > (rlim_t)open_max) {\n    open_max = limit.rlim_cur;\n  }\n  // Closing too many fds can be too slow. Limit the `open_max` to avoid slow\n  // startup.\n  auto reasonable_fd_max = Configuration().getInt(\"reasonable_fd_max\", 2500000);\n  if (open_max > reasonable_fd_max) {\n    open_max = reasonable_fd_max;\n  }\n  for (max_fd = open_max; max_fd > STDERR_FILENO; --max_fd) {\n    folly::fileops::close(max_fd);\n  }\n#endif // ndef HAVE_CLOSE_RANGE\n#endif // ndef _WIN32\n}\n\n[[noreturn]] static void run_service_in_foreground() {\n  detect_low_process_priority();\n  close_random_fds();\n\n  auto& pid_file = get_pid_file();\n  auto processLock = ProcessLock::acquire(pid_file);\n  run_service(processLock.writePid(pid_file), getppid());\n}\n\nnamespace {\nstruct [[nodiscard]] SpawnResult {\n  enum Status {\n    Spawned,\n    FailedToLock,\n  };\n\n  SpawnResult() = delete;\n\n  /* implicit */ SpawnResult(Status s, std::string r = {})\n      : status{s}, reason{std::move(r)} {}\n\n  void exitIfFailed() {\n    if (status == FailedToLock) {\n      fprintf(stderr, \"%s\\n\", reason.c_str());\n      exit(1);\n    }\n  }\n\n  Status status;\n\n  /**\n   * If status is not Spawned, then this contains the error message.\n   */\n  std::string reason;\n};\n} // namespace\n\n#ifndef _WIN32\n/**\n * Forks and daemonizes, starting the Watchman service in the child.\n */\nstatic SpawnResult run_service_as_daemon() {\n  detect_low_process_priority();\n  close_random_fds();\n\n  // Lock the pidfile before we daemonize so that errors can be detected\n  // and returned (for logging) before we drop stderr. This prevents failure to\n  // lock from causing the daemonize process to start and immediately exit with\n  // an error, making it hard to track down why a command isn't succeeding.\n  auto acquireResult = ProcessLock::tryAcquire(get_pid_file());\n  if (auto* reason = std::get_if<std::string>(&acquireResult)) {\n    return SpawnResult{SpawnResult::FailedToLock, *reason};\n  }\n\n  auto& processLock = std::get<ProcessLock>(acquireResult);\n  auto parentPid = getppid();\n\n  // the double-fork-and-setsid trick establishes a\n  // child process that runs in its own process group\n  // with its own session and that won't get killed\n  // off when your shell exits (for example).\n  if (fork()) {\n    // The parent of the first fork is the client\n    // process that is being run by the user, and\n    // we want to allow that to continue.\n    return SpawnResult::Spawned;\n  }\n  setsid();\n  if (fork()) {\n    // The parent of the second fork has served its\n    // purpose, so we simply exit here, otherwise\n    // we'll duplicate the effort of either the\n    // client or the server depending on if we\n    // return or not.\n    _exit(0);\n  }\n\n  // We are the child. Let's populate the pid file and start listening on the\n  // socket.\n  run_service(processLock.writePid(get_pid_file()), parentPid);\n}\n#endif\n\n#ifdef _WIN32\nstatic SpawnResult spawn_win32(const std::vector<std::string>& daemon_argv) {\n  char module_name[WATCHMAN_NAME_MAX];\n  GetModuleFileName(nullptr, module_name, sizeof(module_name));\n\n  ChildProcess::Options opts;\n  opts.setFlags(POSIX_SPAWN_SETPGROUP);\n  opts.nullStdin();\n  opts.open(\n      STDOUT_FILENO,\n      logging::log_name.c_str(),\n      O_WRONLY | O_CREAT | O_APPEND,\n      0600);\n  opts.dup2(STDOUT_FILENO, STDERR_FILENO);\n  opts.chdir(\"/\");\n\n  std::vector<std::string_view> args{module_name, \"--foreground\"};\n  for (auto& arg : daemon_argv) {\n    args.push_back(arg);\n  }\n\n  ChildProcess proc(args, std::move(opts));\n  std::this_thread::sleep_for(std::chrono::milliseconds(500));\n  if (proc.terminated()) {\n    logf(\n        ERR,\n        \"Failed to spawn watchman server; it exited with code {}.\\n\"\n        \"Check the log file at {} for more information\\n\",\n        proc.wait(),\n        logging::log_name);\n    exit(1);\n  }\n  proc.disown();\n  return SpawnResult::Spawned;\n}\n#endif\n\n#ifndef _WIN32\n// Spawn watchman via a site-specific spawn helper program.\n// We'll pass along any daemon-appropriate arguments that\n// we noticed during argument parsing.\nstatic SpawnResult spawn_site_specific(\n    const std::vector<std::string>& daemon_argv,\n    const char* spawner) {\n  std::vector<std::string_view> args;\n  args.reserve(1 + daemon_argv.size());\n  args.emplace_back(spawner);\n  for (auto& arg : daemon_argv) {\n    args.push_back(arg);\n  }\n\n  close_random_fds();\n\n  // Note that we're not setting up the output to go to the log files\n  // here.  This is intentional; we'd like any failures in the spawner\n  // to bubble up to the user as having things silently fail and get\n  // logged to the server log doesn't provide any obvious cues to the\n  // user about what went wrong.  Watchman will open and redirect output\n  // to its log files when it ultimately is launched and enters the\n  // run_service() function above.\n  // However, we do need to make sure that any output from both stdout\n  // and stderr goes to stderr of the end user.\n  ChildProcess::Options opts;\n  opts.open(STDIN_FILENO, \"/dev/null\", O_RDONLY, 0666);\n  opts.dup2(STDERR_FILENO, STDOUT_FILENO);\n  opts.dup2(STDERR_FILENO, STDERR_FILENO);\n\n  try {\n    ChildProcess proc(args, std::move(opts));\n\n    auto res = proc.wait();\n\n    if (WIFEXITED(res) && WEXITSTATUS(res) == 0) {\n      return SpawnResult::Spawned;\n    }\n\n    if (WIFEXITED(res)) {\n      log(FATAL, spawner, \": exited with status \", WEXITSTATUS(res), \"\\n\");\n    } else if (WIFSIGNALED(res)) {\n      log(FATAL, spawner, \": signaled with \", WTERMSIG(res), \"\\n\");\n    }\n    log(FATAL, spawner, \": failed to start, exit status \", res, \"\\n\");\n\n  } catch (const std::exception& exc) {\n    log(FATAL,\n        \"Failed to spawn watchman via `\",\n        spawner,\n        \"': \",\n        exc.what(),\n        \"\\n\");\n  }\n\n  return SpawnResult::Spawned;\n}\n#endif\n\n#ifdef __APPLE__\n\nstd::vector<std::string> escape_args_for_sh(\n    const std::vector<std::string>& args) {\n  std::vector<std::string> transformedArgs{};\n  transformedArgs.reserve(args.size());\n\n  for (auto& arg : args) {\n    transformedArgs.push_back(folly::shellQuote(arg));\n  }\n  return transformedArgs;\n}\n\nstd::string prep_args_for_plist(\n    const std::vector<std::string>& args,\n    size_t indentation) {\n  std::vector<std::string> transformedArgs{};\n  transformedArgs.reserve(args.size());\n  for (auto& arg : args) {\n    transformedArgs.push_back(\n        fmt::format(\"{:>{}}<string>{}</string>\\n\", \"\", indentation, arg));\n  }\n  return folly::join(\"\", transformedArgs);\n}\n\nstatic SpawnResult spawn_via_launchd() {\n  char watchman_path[WATCHMAN_NAME_MAX];\n  uint32_t size = sizeof(watchman_path);\n  char plist_path[WATCHMAN_NAME_MAX];\n  FILE* fp;\n\n  close_random_fds();\n\n  if (_NSGetExecutablePath(watchman_path, &size) == -1) {\n    log(FATAL, \"_NSGetExecutablePath: path too long; size \", size, \"\\n\");\n  }\n\n  snprintf(\n      plist_path,\n      sizeof(plist_path),\n      \"%s/Library/LaunchAgents\",\n      getHomeDirectory().c_str());\n  // Best effort attempt to ensure that the agents dir exists.  We'll detect\n  // and report the failure in the fopen call below.\n  mkdir(plist_path, 0755);\n  snprintf(\n      plist_path,\n      sizeof(plist_path),\n      \"%s/Library/LaunchAgents/com.github.facebook.watchman.plist\",\n      getHomeDirectory().c_str());\n\n  if (access(plist_path, R_OK) == 0) {\n    // Unload any that may already exist, as it is likely wrong\n\n    ChildProcess unload_proc(\n        {\"/bin/launchctl\", \"unload\", \"-F\", plist_path},\n        ChildProcess::Options());\n    unload_proc.wait();\n\n    // Forcibly remove the plist.  In some cases it may have some attributes\n    // set that prevent launchd from loading it.  This can happen where\n    // the system was re-imaged or restored from a backup\n    unlink(plist_path);\n  }\n\n  fp = fopen(plist_path, \"w\");\n  if (!fp) {\n    log(FATAL,\n        \"Failed to open \",\n        plist_path,\n        \" for write: \",\n        folly::errnoStr(errno),\n        \"\\n\");\n  }\n\n  watchman::compute_file_name(\n      flags.pid_file, computeUserName(), \"pid\", \"pidfile\");\n\n  const char* path_env =\n      Configuration().getString(\"subprocess_path_env\", getenv(\"PATH\"));\n  // If subprocess_path_env is not set and PATH is not in the environment,\n  // set the path to the empty string.\n  if (path_env == nullptr) {\n    path_env = \"\";\n  }\n\n  std::vector<std::string> watchman_args{\n      watchman_path,\n      \"--foreground\",\n      fmt::format(\"--logfile={}\", logging::log_name),\n      fmt::format(\"--log-level={}\", logging::log_level),\n      fmt::format(\"--sockname={}\", get_unix_sock_name()),\n      fmt::format(\"--statefile={}\", flags.watchman_state_file),\n      fmt::format(\"--pidfile={}\", flags.pid_file)};\n  std::string watchman_spawning_command;\n\n  auto spawn_with_sh = Configuration().getBool(\"macos_spawn_with_sh\", false);\n  if (spawn_with_sh) {\n    watchman_args = escape_args_for_sh(std::move(watchman_args));\n    watchman_args = {\"/bin/sh\", \"-c\", folly::join(\" \", watchman_args)};\n  }\n\n  auto plist_content = fmt::format(\n      \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\"\n      \"<!DOCTYPE plist PUBLIC \\\"-//Apple//DTD PLIST 1.0//EN\\\" \"\n      \"\\\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\\\">\\n\"\n      \"<plist version=\\\"1.0\\\">\\n\"\n      \"<dict>\\n\"\n      \"    <key>Label</key>\\n\"\n      \"    <string>com.github.facebook.watchman</string>\\n\"\n      \"    <key>Disabled</key>\\n\"\n      \"    <false/>\\n\"\n      \"    <key>ProgramArguments</key>\\n\"\n      \"    <array>\\n\"\n      \"{}\"\n      \"    </array>\\n\"\n      \"    <key>KeepAlive</key>\\n\"\n      \"    <dict>\\n\"\n      \"        <key>Crashed</key>\\n\"\n      \"        <true/>\\n\"\n      \"    </dict>\\n\"\n      \"    <key>RunAtLoad</key>\\n\"\n      \"    <true/>\\n\"\n      \"    <key>EnvironmentVariables</key>\\n\"\n      \"    <dict>\\n\"\n      \"        <key>PATH</key>\\n\"\n      \"        <string>\"\n      \"{}\"\n      \"</string>\\n\"\n      \"    </dict>\\n\"\n      \"    <key>ProcessType</key>\\n\"\n      \"    <string>Interactive</string>\\n\"\n      \"    <key>Nice</key>\\n\"\n      \"    <integer>-5</integer>\\n\"\n      \"</dict>\\n\"\n      \"</plist>\\n\",\n      prep_args_for_plist(watchman_args, 8),\n      path_env);\n  fwrite(plist_content.data(), 1, plist_content.size(), fp);\n  fclose(fp);\n  // Don't rely on umask, ensure we have the correct perms\n  chmod(plist_path, 0644);\n\n  ChildProcess load_proc(\n      {\"/bin/launchctl\", \"load\", \"-F\", plist_path}, ChildProcess::Options());\n  auto res = load_proc.wait();\n\n  if (WIFEXITED(res) && WEXITSTATUS(res) == 0) {\n    return SpawnResult::Spawned;\n  }\n\n  // Most likely cause is \"headless\" operation with no GUI context\n  if (WIFEXITED(res)) {\n    logf(ERR, \"launchctl: exited with status {}\\n\", WEXITSTATUS(res));\n  } else if (WIFSIGNALED(res)) {\n    logf(ERR, \"launchctl: signaled with {}\\n\", WTERMSIG(res));\n  }\n  logf(ERR, \"Falling back to daemonize\\n\");\n  return run_service_as_daemon();\n}\n#endif\n\nstatic void parse_encoding(std::string_view enc, PduType* pdu) {\n  if (enc.empty()) {\n    return;\n  }\n  if (enc == \"json\") {\n    *pdu = is_json_compact;\n    return;\n  }\n  if (enc == \"bser\") {\n    *pdu = is_bser;\n    return;\n  }\n  if (enc == \"bser-v2\") {\n    *pdu = is_bser_v2;\n    return;\n  }\n  log(ERR, \"Invalid encoding '\", enc, \"', use one of json, bser or bser-v2\\n\");\n  exit(EX_USAGE);\n}\n\n#ifdef _WIN32\nbool initialize_winsock() {\n  WSADATA wsaData;\n  if ((WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ||\n      (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)) {\n    return false;\n  }\n  return true;\n}\n\nbool initialize_uds() {\n  if (!initialize_winsock()) {\n    log(DBG, \"unable to initialize winsock, disabling UDS support\\n\");\n  }\n\n  // Test if UDS support is present\n  FileDescriptor fd(\n      ::socket(PF_LOCAL, SOCK_STREAM, 0), FileDescriptor::FDType::Socket);\n\n  bool fd_initialized = (bool)fd;\n\n  if (!fd_initialized) {\n    log(DBG, \"unable to create UNIX domain socket, disabling UDS support\\n\");\n    return false;\n  }\n\n  return true;\n}\n#endif\n\nstatic void setup_sock_name() {\n#ifdef _WIN32\n  if (!initialize_uds()) {\n    // if we can't create UNIX domain socket, disable it.\n    disable_unix_socket = true;\n  }\n#endif\n\n  auto user = computeUserName();\n\n  // Precompute the temporary directory path in case this process's environment\n  // changes.\n  (void)getTemporaryDirectory();\n\n#ifdef _WIN32\n  // On Windows, if an application uses --sockname to override the named\n  // pipe path so that it can isolate its watchman integration tests,\n  // but doesn't also specify --unix-listener-path then we need to\n  // take care to prevent using the default unix domain path which would\n  // otherwise break their isolation.\n  // If either option is specified without the other, then we disable\n  // the use of the other.\n  if (!flags.named_pipe_path.empty() || !flags.unix_sock_name.empty()) {\n    disable_named_pipe = flags.named_pipe_path.empty();\n    disable_unix_socket = flags.unix_sock_name.empty();\n  }\n\n  if (flags.named_pipe_path.empty()) {\n    flags.named_pipe_path = fmt::format(\"\\\\\\\\.\\\\pipe\\\\watchman-{}\", user);\n  }\n#endif\n  watchman::compute_file_name(flags.unix_sock_name, user, \"sock\", \"sockname\");\n\n  watchman::compute_file_name(\n      flags.watchman_state_file, user, \"state\", \"statefile\");\n\n  // Log file precedence (highest to lowest):\n  // 1. --logfile CLI flag (log_name already set before this function)\n  // 2. \"log_dir\" config key -> <log_dir>/<user>/log\n  // 3. Default: <state_dir>/log (handled by compute_file_name below)\n  if (logging::log_name.empty()) {\n    const char* log_dir = cfg_get_string(\"log_dir\", nullptr);\n    if (log_dir) {\n      if (log_dir[0] != '/'\n#ifdef _WIN32\n          && !(log_dir[0] && log_dir[1] == ':')\n#endif\n      ) {\n        log(ERR,\n            \"log_dir must be an absolute path but '\",\n            log_dir,\n            \"' was provided.\\n\");\n        exit(1);\n      }\n      auto log_directory = fmt::format(\"{}/{}\", log_dir, user);\n      std::error_code ec;\n      watchman::create_log_dir(log_directory.c_str(), ec);\n      if (ec) {\n        logf(\n            ERR,\n            \"failed to create log directory {}: {}\\n\",\n            log_directory,\n            ec.message());\n        exit(1);\n      }\n      logging::log_name = fmt::format(\"{}/log\", log_directory);\n    }\n  }\n\n  // If log_name is still empty, compute_file_name populates it with\n  // <state_dir>/log. If already set (by --logfile or log_dir above),\n  // it just validates the path is absolute.\n  watchman::compute_file_name(\n      logging::log_name,\n      user,\n      \"log\",\n      \"logfile\",\n      /*require_absolute=*/logging::log_name != \"-\");\n}\n\nstatic ResultErrno<folly::Unit> try_command(\n    const Command& command,\n    int timeout) {\n  auto stmResult = w_stm_connect(timeout * 1000);\n  if (stmResult.hasError()) {\n    return stmResult.error();\n  }\n\n  if (command.isNullCommand()) {\n    // We've confirmed we can connect -- there's nothing else to do with the\n    // null command.\n    return folly::unit;\n  }\n\n  auto stream = std::move(stmResult).value();\n\n  return command.run(\n      *stream,\n      flags.persistent,\n      server_format,\n      output_format,\n      flags.yes_pretty ? Pretty::Yes\n                       : (flags.no_pretty ? Pretty::No : Pretty::IfTty));\n}\n\nstatic bool try_client_mode_command(const Command& command, bool pretty) {\n  auto client = std::make_shared<watchman::Client>();\n  client->client_mode = true;\n\n  bool res = client->dispatchCommand(command, CMD_CLIENT);\n\n  if (!client->responses.empty()) {\n    json_dumpf(\n        client->responses.front(),\n        stdout,\n        pretty ? JSON_INDENT(4) : JSON_COMPACT);\n    fmt::print(\"\\n\");\n  }\n\n  return res;\n}\n\nstatic std::vector<std::string> parse_cmdline(int* argcp, char*** argvp) {\n  cfg_load_global_config_file();\n\n  auto daemon_argv = watchman::parseOptions(argcp, argvp);\n  watchman::getLog().setStdErrLoggingLevel(\n      static_cast<watchman::LogLevel>(logging::log_level));\n  setup_sock_name();\n  parse_encoding(flags.server_encoding, &server_format.type);\n  parse_encoding(flags.output_encoding, &output_format.type);\n  if (flags.output_encoding.empty()) {\n    output_format.type = flags.no_pretty ? is_json_compact : is_json_pretty;\n  }\n\n  // Prevent integration tests that call the watchman cli from\n  // accidentally spawning a server.\n  if (getenv(\"WATCHMAN_NO_SPAWN\")) {\n    flags.no_spawn = true;\n  }\n\n  return daemon_argv;\n}\n\nstatic Command build_command_from_stdin() {\n  auto err = json_error_t();\n  PduBuffer buf;\n\n  auto cmd = buf.decodeNext(w_stm_stdin(), &err);\n\n  if (buf.format.type == is_bser) {\n    // If they used bser for the input, select bser for output\n    // unless they explicitly requested something else\n    if (flags.server_encoding.empty()) {\n      server_format.type = is_bser;\n    }\n    if (flags.output_encoding.empty()) {\n      output_format.type = is_bser;\n    }\n  } else if (buf.format.type == is_bser_v2) {\n    // If they used bser v2 for the input, select bser v2 for output\n    // unless they explicitly requested something else\n    if (flags.server_encoding.empty()) {\n      server_format.type = is_bser_v2;\n    }\n    if (flags.output_encoding.empty()) {\n      output_format.type = is_bser_v2;\n    }\n  }\n\n  if (!cmd) {\n    fprintf(\n        stderr,\n        \"failed to parse command from stdin: \"\n        \"line %d, column %d, position %d: %s\\n\",\n        err.line,\n        err.column,\n        err.position,\n        err.text);\n    exit(1);\n  }\n  return Command::parse(std::move(*cmd));\n}\n\nstatic Command build_command(int argc, char** argv) {\n  if (flags.json_input_arg) {\n    return build_command_from_stdin();\n  }\n\n  // Special case: no arguments means that we just want\n  // to verify that the service is up, starting it if\n  // needed.\n  // TODO: Add telemetry. Does anyone actually do this?\n  if (argc == 0) {\n    return Command{nullptr};\n  }\n\n  w_string name = argv[0];\n  std::vector<json_ref> args;\n  for (int i = 1; i < argc; i++) {\n    args.push_back(typed_string_to_json(argv[i], W_STRING_UNICODE));\n  }\n\n  return Command{std::move(name), json_array(std::move(args))};\n}\n\nstatic SpawnResult try_spawn_watchman(\n    const std::vector<std::string>& daemon_argv) {\n  // Every spawner that doesn't fork() this client process is susceptible to a\n  // race condition if `watchman shutdown-server` and `watchman <command>` are\n  // run in short order. The latter tries to spawn a daemon while the former is\n  // still shutting down, holding the pid lock, and this causes it to time out\n  // and fail. The solution would be to implement some kind of startup pipe that\n  // allows the server to indicate to the client when it's done starting up,\n  // communicating errors that are worthy of a retry.\n\n#ifndef _WIN32\n  if (flags.no_site_spawner) {\n    // The astute reader will notice this we're calling run_service_as_daemon()\n    // here and not the various other platform spawning functions in the block\n    // further below in this function.  This is deliberate: we want\n    // to do the most simple background running possible when the\n    // no_site_spawner flag is used.   In the future we plan to\n    // migrate the platform spawning functions to use the site_spawn\n    // functionality.\n    return run_service_as_daemon();\n  }\n  // If we have a site-specific spawning requirement, then we'll\n  // invoke that spawner rather than using any of the built-in\n  // spawning functionality.\n  const char* site_spawn = cfg_get_string(\"spawn_watchman_service\", nullptr);\n  if (site_spawn) {\n    return spawn_site_specific(daemon_argv, site_spawn);\n  }\n#endif\n\n#if defined(__APPLE__)\n  return spawn_via_launchd();\n#elif defined(_WIN32)\n  return spawn_win32(daemon_argv);\n#else\n  return run_service_as_daemon();\n#endif\n}\n\nstatic int inner_main(int argc, char** argv) {\n  // TODO: We used to avoid folly::init so it didn't interfere with our own\n  // signal handling. We want to swap to folly signal handling, so we'll do a\n  // full init on Linux to test it. We should remove this if in the future.\n  if (kUseFollySignalHandler) {\n    folly::unsafe_unscoped_init(\n        &argc, &argv, folly::InitOptions().useGFlags(false));\n  } else {\n    folly::SingletonVault::singleton()->registrationComplete();\n  }\n\n  SCOPE_EXIT {\n    if (!kUseFollySignalHandler) {\n      folly::SingletonVault::singleton()->destroyInstancesFinal();\n    }\n  };\n\n  auto daemon_argv = parse_cmdline(&argc, &argv);\n\n#ifdef _WIN32\n  // On Windows its not possible to connect to elevated Watchman daemon from\n  // non-elevated processes. To ensure that Watchman daemon will always be\n  // accessible, deelevate by default if needed.\n  // Note watchman runs in some environments which require elevated\n  // permissions, so we can not always de-elevate.\n  if (Configuration().getBool(\"should_deelevate_on_startup\", false)) {\n    deelevate_requires_normal_privileges();\n  }\n#endif\n\n  if (flags.foreground) {\n    run_service_in_foreground();\n    return 0;\n  }\n\n  w_set_thread_name(\"cli\");\n  auto cmd = build_command(argc, argv);\n  cmd.validateOrExit(output_format);\n\n  auto should_start = [](int err) -> bool {\n    return err == ECONNREFUSED || err == ENOENT;\n  };\n\n  auto ran = try_command(cmd, 0);\n  if (ran.hasError() && should_start(ran.error())) {\n    if (flags.no_spawn) {\n      if (!flags.no_local) {\n        if (try_client_mode_command(cmd, !flags.no_pretty)) {\n          ran = folly::unit;\n        }\n      }\n    } else {\n      // Failed to run command. Try to spawn a daemon.\n\n      // Some site spawner scripts will asynchronously launch the service.\n      // When that happens we may encounter ECONNREFUSED.  We need to\n      // tolerate this, so we add some retries.\n      int attempts = 10;\n      std::chrono::milliseconds interval{10};\n\n      bool spawned = false;\n      while (true) {\n        if (!spawned) {\n          auto spawn_result = try_spawn_watchman(daemon_argv);\n          switch (spawn_result.status) {\n            case SpawnResult::Spawned:\n              spawned = true;\n              break;\n            case SpawnResult::FailedToLock:\n              // Otherwise, it's possible another daemon is still shutting down,\n              // and we should try to start again next time. Alternatively,\n              // another daemon is starting up, and when it's ready, the command\n              // should succeed.\n              break;\n          }\n        }\n\n        ran = try_command(cmd, 10);\n        if (ran.hasError() && should_start(ran.error()) && attempts-- > 0) {\n          /* sleep override */ std::this_thread::sleep_for(interval);\n          // 10 doublings of 10 ms is about 10 seconds total.\n          interval *= 2;\n          continue;\n        }\n        // Success or terminal failure\n        break;\n      }\n    }\n  }\n\n  if (ran.hasValue()) {\n    return 0;\n  }\n\n  if (!flags.no_spawn) {\n    log(ERR,\n        \"unable to talk to your watchman on \",\n        get_sock_name_legacy(),\n        \"! (\",\n        folly::errnoStr(ran.error()),\n        \")\\n\");\n#ifdef __APPLE__\n    if (getenv(\"TMUX\")) {\n      logf(\n          ERR,\n          \"\\n\"\n          \"You may be hitting a tmux related session issue.\\n\"\n          \"An immediate workaround is to run:\\n\"\n          \"\\n\"\n          \"    watchman version\\n\"\n          \"\\n\"\n          \"just once, from *outside* your tmux session, to allow the launchd\\n\"\n          \"registration to be setup.  Once done, you can continue to access\\n\"\n          \"watchman from inside your tmux sessions as usual.\\n\"\n          \"\\n\"\n          \"Longer term, you may wish to install this tool:\\n\"\n          \"\\n\"\n          \"    https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard\\n\"\n          \"\\n\"\n          \"and configure tmux to use `reattach-to-user-namespace`\\n\"\n          \"when it launches your shell.\\n\");\n    }\n#endif\n  }\n  return 1;\n}\n\nint main(int argc, char** argv) {\n  try {\n    return inner_main(argc, argv);\n  } catch (const std::exception& e) {\n    logf_stderr(\n        \"Uncaught C++ exception: {}\\n\", folly::exceptionStr(e).toStdString());\n    return 1;\n  } catch (...) {\n    logf_stderr(\"Uncaught C++ exception: ...\\n\");\n    return 1;\n  }\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/node/.flowconfig",
    "content": ""
  },
  {
    "path": "watchman/node/README.md",
    "content": "# fb-watchman\n\n`fb-watchman` is a filesystem watcher that uses the\n[Watchman](https://facebook.github.io/watchman/) file watching service from\nFacebook.\n\nWatchman provides file change notification services using very\nefficient recursive watches and also allows more advanced change matching and\nfilesystem tree querying operations using\n[a powerful expression syntax](https://facebook.github.io/watchman/docs/file-query.html#expressions).\n\n## Install\n\nYou should [install Watchman](\nhttps://facebook.github.io/watchman/docs/install.html) to make the most of this\nmodule.\n\nThen simply:\n\n```\n$ npm install fb-watchman\n```\n\n## Key Concepts\n\n- Watchman recursively watches directories.\n- Each watched directory is called a `root`.\n- You must initiate a `watch` on a `root` using the `watch-project` command prior to subscribing to changes\n- Rather than separately watching many sibling directories, `watch-project` consolidates and re-uses existing watches relative to a project root (the location of your `.watchmanconfig` or source control repository root)\n- change notifications are relative to the project root\n\n## How do I use it?\n\n[Read the NodeJS watchman documentation](https://facebook.github.io/watchman/docs/nodejs.html)\n"
  },
  {
    "path": "watchman/node/bser/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nadd_fb_python_unittest(bser_js\n  SOURCES\n    test_bser.py\n\n  DEPENDS\n    integration_lib\n\n  WORKING_DIRECTORY\n    ${CMAKE_BINARY_DIR}\n\n  ENV\n    \"YARN_PATH=${YARN}\"\n    \"NODE_BIN=${NODE}\"\n    \"WATCHMAN_SRC_DIR=${CMAKE_SOURCE_DIR}/watchman\"\n)\n"
  },
  {
    "path": "watchman/node/bser/README.md",
    "content": "# BSER Binary Serialization\n\nBSER is a binary serialization scheme that can be used as an alternative to JSON.\nBSER uses a framed encoding that makes it simpler to use to stream a sequence of\nencoded values.\n\nIt is intended to be used for local-IPC only and strings are represented as binary\nwith no specific encoding; this matches the convention employed by most operating\nsystem filename storage.\n\nFor more details about the serialization scheme see\n[Watchman's docs](https://facebook.github.io/watchman/docs/bser.html).\n\n## API\n\n```js\nvar bser = require('bser');\n```\n\n### bser.loadFromBuffer\n\nThe is the synchronous decoder; given an input string or buffer,\ndecodes a single value and returns it.  Throws an error if the\ninput is invalid.\n\n```js\nvar obj = bser.loadFromBuffer(buf);\n```\n\n### bser.dumpToBuffer\n\nSynchronously encodes a value as BSER.\n\n```js\nvar encoded = bser.dumpToBuffer(['hello']);\nconsole.log(bser.loadFromBuffer(encoded)); // ['hello']\n```\n\n### BunserBuf\n\nThe asynchronous decoder API is implemented in the BunserBuf object.\nYou may incrementally append data to this object and it will emit the\ndecoded values via its `value` event.\n\n```js\nvar bunser = new bser.BunserBuf();\n\nbunser.on('value', function(obj) {\n  console.log(obj);\n});\n```\n\nThen in your socket `data` event:\n\n```js\nbunser.append(buf);\n```\n\n## Example\n\nRead BSER from socket:\n\n```js\nvar bunser = new bser.BunserBuf();\n\nbunser.on('value', function(obj) {\n  console.log('data from socket', obj);\n});\n\nvar socket = net.connect('/socket');\n\nsocket.on('data', function(buf) {\n  bunser.append(buf);\n});\n```\n\nWrite BSER to socket:\n\n```js\nsocket.write(bser.dumpToBuffer(obj));\n```\n"
  },
  {
    "path": "watchman/node/bser/index.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar EE = require('events').EventEmitter;\nvar util = require('util');\nvar os = require('os');\nvar assert = require('assert');\nvar Int64 = require('node-int64');\n\n// BSER uses the local endianness to reduce byte swapping overheads\n// (the protocol is expressly local IPC only).  We need to tell node\n// to use the native endianness when reading various native values.\nvar isBigEndian = os.endianness() == 'BE';\n\n// Find the next power-of-2 >= size\nfunction nextPow2(size) {\n  return Math.pow(2, Math.ceil(Math.log(size) / Math.LN2));\n}\n\n// Expandable buffer that we can provide a size hint for\nfunction Accumulator(initsize) {\n  this.buf = Buffer.alloc(nextPow2(initsize || 8192));\n  this.readOffset = 0;\n  this.writeOffset = 0;\n}\n// For testing\nexports.Accumulator = Accumulator\n\n// How much we can write into this buffer without allocating\nAccumulator.prototype.writeAvail = function() {\n  return this.buf.length - this.writeOffset;\n}\n\n// How much we can read\nAccumulator.prototype.readAvail = function() {\n  return this.writeOffset - this.readOffset;\n}\n\n// Ensure that we have enough space for size bytes\nAccumulator.prototype.reserve = function(size) {\n  if (size < this.writeAvail()) {\n    return;\n  }\n\n  // If we can make room by shunting down, do so\n  if (this.readOffset > 0) {\n    this.buf.copy(this.buf, 0, this.readOffset, this.writeOffset);\n    this.writeOffset -= this.readOffset;\n    this.readOffset = 0;\n  }\n\n  // If we made enough room, no need to allocate more\n  if (size < this.writeAvail()) {\n    return;\n  }\n\n  // Allocate a replacement and copy it in\n  var buf = Buffer.alloc(nextPow2(this.buf.length + size - this.writeAvail()));\n  this.buf.copy(buf);\n  this.buf = buf;\n}\n\n// Append buffer or string.  Will resize as needed\nAccumulator.prototype.append = function(buf) {\n  if (Buffer.isBuffer(buf)) {\n    this.reserve(buf.length);\n    buf.copy(this.buf, this.writeOffset, 0, buf.length);\n    this.writeOffset += buf.length;\n  } else {\n    var size = Buffer.byteLength(buf);\n    this.reserve(size);\n    this.buf.write(buf, this.writeOffset);\n    this.writeOffset += size;\n  }\n}\n\nAccumulator.prototype.assertReadableSize = function(size) {\n  if (this.readAvail() < size) {\n    throw new Error(\"wanted to read \" + size +\n        \" bytes but only have \" + this.readAvail());\n  }\n}\n\nAccumulator.prototype.peekString = function(size) {\n  this.assertReadableSize(size);\n  return this.buf.toString('utf-8', this.readOffset, this.readOffset + size);\n}\n\nAccumulator.prototype.readString = function(size) {\n  var str = this.peekString(size);\n  this.readOffset += size;\n  return str;\n}\n\nAccumulator.prototype.peekInt = function(size) {\n  this.assertReadableSize(size);\n  switch (size) {\n    case 1:\n      return this.buf.readInt8(this.readOffset, size);\n    case 2:\n      return isBigEndian ?\n        this.buf.readInt16BE(this.readOffset, size) :\n        this.buf.readInt16LE(this.readOffset, size);\n    case 4:\n      return isBigEndian ?\n        this.buf.readInt32BE(this.readOffset, size) :\n        this.buf.readInt32LE(this.readOffset, size);\n    case 8:\n        var big = this.buf.slice(this.readOffset, this.readOffset + 8);\n        if (isBigEndian) {\n          // On a big endian system we can simply pass the buffer directly\n          return new Int64(big);\n        }\n        // Otherwise we need to byteswap\n        return new Int64(byteswap64(big));\n    default:\n      throw new Error(\"invalid integer size \" + size);\n  }\n}\n\nAccumulator.prototype.readInt = function(bytes) {\n  var ival = this.peekInt(bytes);\n  if (ival instanceof Int64 && isFinite(ival.valueOf())) {\n    ival = ival.valueOf();\n  }\n  this.readOffset += bytes;\n  return ival;\n}\n\nAccumulator.prototype.peekDouble = function() {\n  this.assertReadableSize(8);\n  return isBigEndian ?\n    this.buf.readDoubleBE(this.readOffset) :\n    this.buf.readDoubleLE(this.readOffset);\n}\n\nAccumulator.prototype.readDouble = function() {\n  var dval = this.peekDouble();\n  this.readOffset += 8;\n  return dval;\n}\n\nAccumulator.prototype.readAdvance = function(size) {\n  if (size > 0) {\n    this.assertReadableSize(size);\n  } else if (size < 0 && this.readOffset + size < 0) {\n    throw new Error(\"advance with negative offset \" + size +\n        \" would seek off the start of the buffer\");\n  }\n  this.readOffset += size;\n}\n\nAccumulator.prototype.writeByte = function(value) {\n  this.reserve(1);\n  this.buf.writeInt8(value, this.writeOffset);\n  ++this.writeOffset;\n}\n\nAccumulator.prototype.writeInt = function(value, size) {\n  this.reserve(size);\n  switch (size) {\n    case 1:\n      this.buf.writeInt8(value, this.writeOffset);\n      break;\n    case 2:\n      if (isBigEndian) {\n        this.buf.writeInt16BE(value, this.writeOffset);\n      } else {\n        this.buf.writeInt16LE(value, this.writeOffset);\n      }\n      break;\n    case 4:\n      if (isBigEndian) {\n        this.buf.writeInt32BE(value, this.writeOffset);\n      } else {\n        this.buf.writeInt32LE(value, this.writeOffset);\n      }\n      break;\n    default:\n      throw new Error(\"unsupported integer size \" + size);\n  }\n  this.writeOffset += size;\n}\n\nAccumulator.prototype.writeDouble = function(value) {\n  this.reserve(8);\n  if (isBigEndian) {\n    this.buf.writeDoubleBE(value, this.writeOffset);\n  } else {\n    this.buf.writeDoubleLE(value, this.writeOffset);\n  }\n  this.writeOffset += 8;\n}\n\nvar BSER_ARRAY     = 0x00;\nvar BSER_OBJECT    = 0x01;\nvar BSER_STRING    = 0x02;\nvar BSER_INT8      = 0x03;\nvar BSER_INT16     = 0x04;\nvar BSER_INT32     = 0x05;\nvar BSER_INT64     = 0x06;\nvar BSER_REAL      = 0x07;\nvar BSER_TRUE      = 0x08;\nvar BSER_FALSE     = 0x09;\nvar BSER_NULL      = 0x0a;\nvar BSER_TEMPLATE  = 0x0b;\nvar BSER_SKIP      = 0x0c;\n\nvar ST_NEED_PDU = 0; // Need to read and decode PDU length\nvar ST_FILL_PDU = 1; // Know the length, need to read whole content\n\nvar MAX_INT8 = 127;\nvar MAX_INT16 = 32767;\nvar MAX_INT32 = 2147483647;\n\nfunction BunserBuf() {\n  EE.call(this);\n  this.buf = new Accumulator();\n  this.state = ST_NEED_PDU;\n}\nutil.inherits(BunserBuf, EE);\nexports.BunserBuf = BunserBuf;\n\nBunserBuf.prototype.append = function(buf, synchronous) {\n  if (synchronous) {\n    this.buf.append(buf);\n    return this.process(synchronous);\n  }\n\n  try {\n    this.buf.append(buf);\n  } catch (err) {\n    this.emit('error', err);\n    return;\n  }\n  // Arrange to decode later.  This allows the consuming\n  // application to make progress with other work in the\n  // case that we have a lot of subscription updates coming\n  // in from a large tree.\n  this.processLater();\n}\n\nBunserBuf.prototype.processLater = function() {\n  var self = this;\n  process.nextTick(function() {\n    try {\n      self.process(false);\n    } catch (err) {\n      self.emit('error', err);\n    }\n  });\n}\n\n// Do something with the buffer to advance our state.\n// If we're running synchronously we'll return either\n// the value we've decoded or undefined if we don't\n// yet have enought data.\n// If we're running asynchronously, we'll emit the value\n// when it becomes ready and schedule another invocation\n// of process on the next tick if we still have data we\n// can process.\nBunserBuf.prototype.process = function(synchronous) {\n  if (this.state == ST_NEED_PDU) {\n    if (this.buf.readAvail() < 2) {\n      return;\n    }\n    // Validate BSER header\n    this.expectCode(0);\n    this.expectCode(1);\n    this.pduLen = this.decodeInt(true /* relaxed */);\n    if (this.pduLen === false) {\n      // Need more data, walk backwards\n      this.buf.readAdvance(-2);\n      return;\n    }\n    // Ensure that we have a big enough buffer to read the rest of the PDU\n    this.buf.reserve(this.pduLen);\n    this.state = ST_FILL_PDU;\n  }\n\n  if (this.state == ST_FILL_PDU) {\n    if (this.buf.readAvail() < this.pduLen) {\n      // Need more data\n      return;\n    }\n\n    // We have enough to decode it\n    var val = this.decodeAny();\n    if (synchronous) {\n      return val;\n    }\n    this.emit('value', val);\n    this.state = ST_NEED_PDU;\n  }\n\n  if (!synchronous && this.buf.readAvail() > 0) {\n    this.processLater();\n  }\n}\n\nBunserBuf.prototype.raise = function(reason) {\n  throw new Error(reason + \", in Buffer of length \" +\n      this.buf.buf.length + \" (\" + this.buf.readAvail() +\n      \" readable) at offset \" + this.buf.readOffset + \" buffer: \" +\n      JSON.stringify(this.buf.buf.slice(\n          this.buf.readOffset, this.buf.readOffset + 32).toJSON()));\n}\n\nBunserBuf.prototype.expectCode = function(expected) {\n  var code = this.buf.readInt(1);\n  if (code != expected) {\n    this.raise(\"expected bser opcode \" + expected + \" but got \" + code);\n  }\n}\n\nBunserBuf.prototype.decodeAny = function() {\n  var code = this.buf.peekInt(1);\n  switch (code) {\n    case BSER_INT8:\n    case BSER_INT16:\n    case BSER_INT32:\n    case BSER_INT64:\n      return this.decodeInt();\n    case BSER_REAL:\n      this.buf.readAdvance(1);\n      return this.buf.readDouble();\n    case BSER_TRUE:\n      this.buf.readAdvance(1);\n      return true;\n    case BSER_FALSE:\n      this.buf.readAdvance(1);\n      return false;\n    case BSER_NULL:\n      this.buf.readAdvance(1);\n      return null;\n    case BSER_STRING:\n      return this.decodeString();\n    case BSER_ARRAY:\n      return this.decodeArray();\n    case BSER_OBJECT:\n      return this.decodeObject();\n    case BSER_TEMPLATE:\n      return this.decodeTemplate();\n    default:\n      this.raise(\"unhandled bser opcode \" + code);\n  }\n}\n\nBunserBuf.prototype.decodeArray = function() {\n  this.expectCode(BSER_ARRAY);\n  var nitems = this.decodeInt();\n  var arr = [];\n  for (var i = 0; i < nitems; ++i) {\n    arr.push(this.decodeAny());\n  }\n  return arr;\n}\n\nBunserBuf.prototype.decodeObject = function() {\n  this.expectCode(BSER_OBJECT);\n  var nitems = this.decodeInt();\n  var res = {};\n  for (var i = 0; i < nitems; ++i) {\n    var key = this.decodeString();\n    var val = this.decodeAny();\n    res[key] = val;\n  }\n  return res;\n}\n\nBunserBuf.prototype.decodeTemplate = function() {\n  this.expectCode(BSER_TEMPLATE);\n  var keys = this.decodeArray();\n  var nitems = this.decodeInt();\n  var arr = [];\n  for (var i = 0; i < nitems; ++i) {\n    var obj = {};\n    for (var keyidx = 0; keyidx < keys.length; ++keyidx) {\n      if (this.buf.peekInt(1) == BSER_SKIP) {\n        this.buf.readAdvance(1);\n        continue;\n      }\n      var val = this.decodeAny();\n      obj[keys[keyidx]] = val;\n    }\n    arr.push(obj);\n  }\n  return arr;\n}\n\nBunserBuf.prototype.decodeString = function() {\n  this.expectCode(BSER_STRING);\n  var len = this.decodeInt();\n  return this.buf.readString(len);\n}\n\n// This is unusual compared to the other decode functions in that\n// we may not have enough data available to satisfy the read, and\n// we don't want to throw.  This is only true when we're reading\n// the PDU length from the PDU header; we'll set relaxSizeAsserts\n// in that case.\nBunserBuf.prototype.decodeInt = function(relaxSizeAsserts) {\n  if (relaxSizeAsserts && (this.buf.readAvail() < 1)) {\n    return false;\n  } else {\n    this.buf.assertReadableSize(1);\n  }\n  var code = this.buf.peekInt(1);\n  var size = 0;\n  switch (code) {\n    case BSER_INT8:\n      size = 1;\n      break;\n    case BSER_INT16:\n      size = 2;\n      break;\n    case BSER_INT32:\n      size = 4;\n      break;\n    case BSER_INT64:\n      size = 8;\n      break;\n    default:\n      this.raise(\"invalid bser int encoding \" + code);\n  }\n\n  if (relaxSizeAsserts && (this.buf.readAvail() < 1 + size)) {\n    return false;\n  }\n  this.buf.readAdvance(1);\n  return this.buf.readInt(size);\n}\n\n// synchronously BSER decode a string and return the value\nfunction loadFromBuffer(input) {\n  var buf = new BunserBuf();\n  var result = buf.append(input, true);\n  if (buf.buf.readAvail()) {\n    throw Error(\n        'excess data found after input buffer, use BunserBuf instead');\n  }\n  if (typeof result === 'undefined') {\n    throw Error(\n        'no bser found in string and no error raised!?');\n  }\n  return result;\n}\nexports.loadFromBuffer = loadFromBuffer\n\n// Byteswap an arbitrary buffer, flipping from one endian\n// to the other, returning a new buffer with the resultant data\nfunction byteswap64(buf) {\n  var swap = Buffer.alloc(buf.length);\n  for (var i = 0; i < buf.length; i++) {\n    swap[i] = buf[buf.length -1 - i];\n  }\n  return swap;\n}\n\nfunction dump_int64(buf, val) {\n  // Get the raw bytes.  The Int64 buffer is big endian\n  var be = val.toBuffer();\n\n  if (isBigEndian) {\n    // We're a big endian system, so the buffer is exactly how we\n    // want it to be\n    buf.writeByte(BSER_INT64);\n    buf.append(be);\n    return;\n  }\n  // We need to byte swap to get the correct representation\n  var le = byteswap64(be);\n  buf.writeByte(BSER_INT64);\n  buf.append(le);\n}\n\nfunction dump_int(buf, val) {\n  var abs = Math.abs(val);\n  if (abs <= MAX_INT8) {\n    buf.writeByte(BSER_INT8);\n    buf.writeInt(val, 1);\n  } else if (abs <= MAX_INT16) {\n    buf.writeByte(BSER_INT16);\n    buf.writeInt(val, 2);\n  } else if (abs <= MAX_INT32) {\n    buf.writeByte(BSER_INT32);\n    buf.writeInt(val, 4);\n  } else {\n    dump_int64(buf, new Int64(val));\n  }\n}\n\nfunction dump_any(buf, val) {\n  switch (typeof(val)) {\n    case 'number':\n      // check if it is an integer or a float\n      if (isFinite(val) && Math.floor(val) === val) {\n        dump_int(buf, val);\n      } else {\n        buf.writeByte(BSER_REAL);\n        buf.writeDouble(val);\n      }\n      return;\n    case 'string':\n      buf.writeByte(BSER_STRING);\n      dump_int(buf, Buffer.byteLength(val));\n      buf.append(val);\n      return;\n    case 'boolean':\n      buf.writeByte(val ? BSER_TRUE : BSER_FALSE);\n      return;\n    case 'object':\n      if (val === null) {\n        buf.writeByte(BSER_NULL);\n        return;\n      }\n      if (val instanceof Int64) {\n        dump_int64(buf, val);\n        return;\n      }\n      if (Array.isArray(val)) {\n        buf.writeByte(BSER_ARRAY);\n        dump_int(buf, val.length);\n        for (var i = 0; i < val.length; ++i) {\n          dump_any(buf, val[i]);\n        }\n        return;\n      }\n      buf.writeByte(BSER_OBJECT);\n      var keys = Object.keys(val);\n\n      // First pass to compute number of defined keys\n      var num_keys = keys.length;\n      for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var v = val[key];\n        if (typeof(v) == 'undefined') {\n          num_keys--;\n        }\n      }\n      dump_int(buf, num_keys);\n      for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var v = val[key];\n        if (typeof(v) == 'undefined') {\n          // Don't include it\n          continue;\n        }\n        dump_any(buf, key);\n        try {\n          dump_any(buf, v);\n        } catch (e) {\n          throw new Error(\n            e.message + ' (while serializing object property with name `' +\n              key + \"')\");\n        }\n      }\n      return;\n\n    default:\n      throw new Error('cannot serialize type ' + typeof(val) + ' to BSER');\n  }\n}\n\n// BSER encode value and return a buffer of the contents\nfunction dumpToBuffer(val) {\n  var buf = new Accumulator();\n  // Build out the header\n  buf.writeByte(0);\n  buf.writeByte(1);\n  // Reserve room for an int32 to hold our PDU length\n  buf.writeByte(BSER_INT32);\n  buf.writeInt(0, 4); // We'll come back and fill this in at the end\n\n  dump_any(buf, val);\n\n  // Compute PDU length\n  var off = buf.writeOffset;\n  var len = off - 7 /* the header length */;\n  buf.writeOffset = 3; // The length value to fill in\n  buf.writeInt(len, 4); // write the length in the space we reserved\n  buf.writeOffset = off;\n\n  return buf.buf.slice(0, off);\n}\nexports.dumpToBuffer = dumpToBuffer\n"
  },
  {
    "path": "watchman/node/bser/package.json",
    "content": "{\n  \"name\": \"bser\",\n  \"version\": \"2.1.1\",\n  \"description\": \"JavaScript implementation of the BSER Binary Serialization\",\n  \"main\": \"index.js\",\n  \"directories\": {\n    \"test\": \"test\"\n  },\n  \"scripts\": {\n    \"test\": \"node test/bser.js\"\n  },\n  \"files\": [\n    \"index.js\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/facebook/watchman\"\n  },\n  \"keywords\": [\n    \"bser\",\n    \"binary\",\n    \"protocol\"\n  ],\n  \"author\": \"Wez Furlong <wez@fb.com> (http://wezfurlong.org)\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/facebook/watchman/issues\"\n  },\n  \"homepage\": \"https://facebook.github.io/watchman/docs/bser.html\",\n  \"dependencies\": {\n    \"node-int64\": \"^0.4.0\"\n  }\n}\n"
  },
  {
    "path": "watchman/node/bser/test/bser.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar assert = require('assert');\nvar bser = require('../');\nvar Int64 = require('node-int64');\n\n// This is a hard-coded template representation from the C test suite\nvar template =  \"\\x00\\x01\\x03\\x28\" +\n                \"\\x0b\\x00\\x03\\x02\\x02\\x03\\x04\\x6e\\x61\\x6d\\x65\\x02\" +\n                \"\\x03\\x03\\x61\\x67\\x65\\x03\\x03\\x02\\x03\\x04\\x66\\x72\" +\n                \"\\x65\\x64\\x03\\x14\\x02\\x03\\x04\\x70\\x65\\x74\\x65\\x03\" +\n                \"\\x1e\\x0c\\x03\\x19\" ;\n\nvar val = bser.loadFromBuffer(template);\nassert.deepStrictEqual(val, [\n  {\"name\": \"fred\", \"age\": 20},\n  {\"name\": \"pete\", \"age\": 30},\n  {\"age\": 25}\n]);\n\nfunction roundtrip(val) {\n  var encoded = bser.dumpToBuffer(val);\n  var decoded = bser.loadFromBuffer(encoded);\n  assert.deepStrictEqual(decoded, val);\n}\n\nvar values_to_test = [\n  1,\n  \"hello\",\n  1.5,\n  false,\n  true,\n  new Int64('0x0123456789abcdef'),\n  127,\n  128,\n  129,\n  32767,\n  32768,\n  32769,\n  65534,\n  65536,\n  65537,\n  2147483647,\n  2147483648,\n  2147483649,\n  null,\n  [1, 2, 3],\n  {foo: \"bar\"},\n  {nested: {struct: \"hello\", list: [true, false, 1, \"string\"]}}\n];\n\nfor (var i = 0; i < values_to_test.length; ++i) {\n  roundtrip(values_to_test[i]);\n}\nroundtrip(values_to_test);\n\n// Verify Accumulator edge cases\nvar acc = new bser.Accumulator(8);\nacc.append(\"hello\");\nassert.equal(acc.readAvail(), 5);\nassert.equal(acc.readOffset, 0);\nassert.equal(acc.readString(3), \"hel\");\nassert.equal(acc.readOffset, 3);\nassert.equal(acc.readAvail(), 2);\nassert.equal(acc.writeAvail(), 3);\n\n// This should trigger a shunt and not make the buffer bigger\nacc.reserve(5);\nassert.equal(acc.readOffset, 0, 'shunted');\nassert.equal(acc.readAvail(), 2, 'still have 2 available to read');\nassert.equal(acc.writeAvail(), 6, '2 left to read out of 8 total space');\nassert.equal(acc.peekString(2), 'lo', 'have the correct remainder');\n\n// Don't include keys that have undefined values\nvar res = bser.dumpToBuffer({expression: undefined});\nassert.deepStrictEqual(bser.loadFromBuffer(res), {});\n\n// Dump numbers without fraction to integers\nvar buffer;\nbuffer = bser.dumpToBuffer(1);\nassert.equal(buffer.toString('hex'), \"000105020000000301\");\nbuffer = bser.dumpToBuffer(1.0);\nassert.equal(buffer.toString('hex'), \"000105020000000301\");\n\n// Dump numbers with fraction to double\nbuffer = bser.dumpToBuffer(1.1);\nassert.equal(buffer.toString('hex'), \"00010509000000079a9999999999f13f\");\n\n"
  },
  {
    "path": "watchman/node/bser/test_bser.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\nimport os\nimport shutil\nimport subprocess\nimport tempfile\nimport unittest\n\nfrom watchman.integration.lib.node import node_bin, yarn_bin\n\n\nWATCHMAN_SRC_DIR = os.environ.get(\"WATCHMAN_SRC_DIR\", os.getcwd())\nTHIS_DIR = os.path.join(WATCHMAN_SRC_DIR, \"tests\")\n\n\nclass BserTestCase(unittest.TestCase):\n    @unittest.skipIf(\n        yarn_bin is None or node_bin is None, \"yarn/node not correctly installed\"\n    )\n    def runTest(self):\n        with tempfile.TemporaryDirectory() as tempdir:\n            env = os.environ.copy()\n            env[\"TMPDIR\"] = tempdir\n\n            # build the node module with yarn\n            node_dir = os.path.join(env[\"TMPDIR\"], \"fb-watchman\")\n            shutil.copytree(os.path.join(WATCHMAN_SRC_DIR, \"node\"), node_dir)\n            bser_dir = os.path.join(node_dir, \"bser\")\n\n            # install pre-reqs\n            install_args = [yarn_bin, \"install\"]\n            if \"YARN_OFFLINE\" in env:\n                install_args.append(\"--offline\")\n            print(\"Installing yarn deps with \", install_args)\n            subprocess.check_call(install_args, cwd=bser_dir, env=env)\n\n            env[\"TMP\"] = env[\"TMPDIR\"]\n            env[\"TEMP\"] = env[\"TMPDIR\"]\n            env[\"NODE_PATH\"] = \"%s:%s\" % (env[\"TMPDIR\"], env.get(\"NODE_PATH\", \"\"))\n            subprocess.check_call([yarn_bin, \"test\"], cwd=bser_dir, env=env)\n            self.assertTrue(True, \"test completed\")\n"
  },
  {
    "path": "watchman/node/example.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar watchman = require('./index.js');\nvar client = new watchman.Client();\n\nclient.on('end', function() {\n  // Called when the connection to watchman is terminated\n  console.log('client ended');\n});\n\nclient.on('error', function(error) {\n  console.error('Error while talking to watchman: ', error);\n});\n\nclient.capabilityCheck({required:['relative_root']}, function (error, resp) {\n  if (error) {\n    console.error('Error checking capabilities:', error);\n    return;\n  }\n  console.log('Talking to watchman version', resp.version);\n});\n\n// Example of the error case\nclient.command(['invalid-command-never-will-work'], function(error, resp) {\n  if (error) {\n    console.error('failed to subscribe: ', error);\n    return;\n  }\n});\n\n// Initiate a watch.  You can repeatedly ask to watch the same dir without\n// error; Watchman will re-use an existing watch.\nclient.command(['watch-project', process.cwd()], function(error, resp) {\n  if (error) {\n    console.error('Error initiating watch:', error);\n    return;\n  }\n\n  // It is considered to be best practice to show any 'warning' or 'error'\n  // information to the user, as it may suggest steps for remediation\n  if ('warning' in resp) {\n    console.log('warning: ', resp.warning);\n  }\n\n  // The default subscribe behavior is to deliver a list of all current files\n  // when you first subscribe, so you don't need to walk the tree for yourself\n  // on startup.  If you don't want this behavior, you should issue a `clock`\n  // command and use it to give a logical time constraint on the subscription.\n  // See further below for an example of this.\n\n  // watch-project may re-use an existing watch at a higher level in the\n  // filesystem.  It will tell us the relative path to the directory that\n  // we expressed interest in, so we need to adjust for it in our results\n  var path_prefix = '';\n  var root = resp.watch;\n  if ('relative_path' in resp) {\n    path_prefix = resp.relative_path;\n    console.log('(re)using project watch at ', root, ', our dir is relative: ',\n        path_prefix);\n  }\n\n  // Subscribe to notifications about .js files\n  // https://facebook.github.io/watchman/docs/cmd/subscribe.html\n  client.command(['subscribe', root, 'mysubscription', {\n      // Match any .js file under process.cwd()\n      // https://facebook.github.io/watchman/docs/file-query.html#expressions\n      // Has more on the supported expression syntax\n      expression: [\"allof\",\n          [\"match\", \"*.js\"],\n      ],\n      // focus on the relative path from the project to the path\n      // of interest\n      relative_root: path_prefix,\n      // Which fields we're interested in\n      fields: [\"name\", \"size\", \"exists\", \"type\"]\n    }],\n    function(error, resp) {\n      if (error) {\n        // Probably an error in the subscription criteria\n        console.error('failed to subscribe: ', error);\n        return;\n      }\n      console.log('subscription ' + resp.subscribe + ' established');\n    }\n  );\n\n  // Subscription results are emitted via the subscription event.\n  // Note that this emits for all subscriptions.  If you have\n  // subscriptions with different `fields` you will need to check\n  // the subscription name and handle the differing data accordingly\n  client.on('subscription', function(resp) {\n    // Each entry in `resp.files` will have the fields you requested\n    // in your subscription.  The default is:\n    //  { name: 'example.js',\n    //    size: 1680,\n    //    new: true,\n    //    exists: true,\n    //    mode: 33188 }\n    //\n    // Names are relative to resp.root; join them together to\n    // obtain a fully qualified path.\n    //\n    // `resp`  looks like this in practice:\n    //\n    // { root: '/private/tmp/foo',\n    //   subscription: 'mysubscription',\n    //   files: [ { name: 'node_modules/fb-watchman/index.js',\n    //       size: 4768,\n    //       exists: true,\n    //       mode: 33188 } ] }\n    console.log(resp.root, resp.subscription);\n    for (var i in resp.files) {\n      var f = resp.files[i];\n      console.log(f);\n    }\n  });\n\n  // Here's an example of just subscribing for notifications after the\n  // current point in time\n  client.command(['clock', root], function(error, resp) {\n    if (error) {\n      console.error('Failed to query clock:', error);\n      return;\n    }\n\n    client.command(['subscribe', root, 'sincesub', {\n        expression: ['allof', [\"match\", \"*.js\"]],\n        // focus on the relative path from the project to the path\n        // of interest\n        relative_root: path_prefix,\n        // Note: since we only request a single field, the `sincesub` subscription\n        // response will just set files to an array of filenames, not an array of\n        // objects with name properties\n        // { root: '/private/tmp/foo',\n        //   subscription: 'sincesub',\n        //   files: [ 'node_modules/fb-watchman/index.js' ] }\n        fields: [\"name\"],\n        since: resp.clock // time constraint\n      }],\n      function(error, resp) {\n        if (error) {\n          console.error('failed to subscribe: ', error);\n          return;\n        }\n        console.log('subscription ' + resp.subscribe + ' established');\n      }\n    );\n  });\n});\n"
  },
  {
    "path": "watchman/node/index.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @flow\n */\n\n'use strict';\n\nconst bser = require('bser');\nconst childProcess = require('child_process');\nconst {EventEmitter} = require('events');\nconst net = require('net');\n\n// We'll emit the responses to these when they get sent down to us\nconst unilateralTags = ['subscription', 'log'];\n\n/*::\ninterface BunserBuf extends EventEmitter {\n  append(buf: Buffer): void;\n}\n\ntype Options = {\n  watchmanBinaryPath?: string,\n  ...\n};\n\ntype Response = {\n  capabilities?: ?{[key: string]: boolean},\n  version: string,\n  error?: string,\n  ...\n};\n\ntype CommandCallback = (error: ?Error, result?: Response) => void;\n\ntype Command = {\n  cb: CommandCallback,\n  cmd: mixed,\n};\n*/\n\nclass WatchmanError extends Error {\n  watchmanResponse /*: mixed */;\n}\n\n/**\n * @param options An object with the following optional keys:\n *   * 'watchmanBinaryPath' (string) Absolute path to the watchman binary.\n *     If not provided, the Client locates the binary using the PATH specified\n *     by the node child_process's default env.\n */\nclass Client extends EventEmitter {\n  bunser /*: ?BunserBuf */;\n  commands /*: Array<Command> */;\n  connecting /*: boolean */;\n  currentCommand /*: ?Command */;\n  socket /*: ?net.Socket */;\n  watchmanBinaryPath /*: string */;\n\n  constructor(options /*: Options */) {\n    super();\n\n    this.watchmanBinaryPath = 'watchman';\n    if (options && options.watchmanBinaryPath) {\n      this.watchmanBinaryPath = options.watchmanBinaryPath.trim();\n    }\n    this.commands = [];\n  }\n\n  // Try to send the next queued command, if any\n  sendNextCommand() {\n    if (this.currentCommand) {\n      // There's a command pending response, don't send this new one yet\n      return;\n    }\n\n    this.currentCommand = this.commands.shift();\n    if (!this.currentCommand) {\n      // No further commands are queued\n      return;\n    }\n\n    if (this.socket) {\n      this.socket.write(bser.dumpToBuffer(this.currentCommand.cmd));\n    } else {\n      this.emit(\n        'error',\n        new Error('socket is null attempting to send command'),\n      );\n    }\n  }\n\n  cancelCommands(why /*: string*/) {\n    const error = new Error(why);\n\n    // Steal all pending commands before we start cancellation, in\n    // case something decides to schedule more commands\n    const cmds = this.commands;\n    this.commands = [];\n\n    if (this.currentCommand) {\n      cmds.unshift(this.currentCommand);\n      this.currentCommand = null;\n    }\n\n    // Synthesize an error condition for any commands that were queued\n    cmds.forEach(cmd => {\n      cmd.cb(error);\n    });\n  }\n\n  connect() {\n    const makeSock = (sockname /*:string*/) => {\n      // bunser will decode the watchman BSER protocol for us\n      const bunser = (this.bunser = new bser.BunserBuf());\n      // For each decoded line:\n      bunser.on('value', obj => {\n        // Figure out if this is a unliteral response or if it is the\n        // response portion of a request-response sequence.  At the time\n        // of writing, there are only two possible unilateral responses.\n        let unilateral /*: false | string */ = false;\n        for (let i = 0; i < unilateralTags.length; i++) {\n          const tag = unilateralTags[i];\n          if (tag in obj) {\n            unilateral = tag;\n          }\n        }\n\n        if (unilateral) {\n          this.emit(unilateral, obj);\n        } else if (this.currentCommand) {\n          const cmd = this.currentCommand;\n          this.currentCommand = null;\n          if ('error' in obj) {\n            const error = new WatchmanError(obj.error);\n            error.watchmanResponse = obj;\n            cmd.cb(error);\n          } else {\n            cmd.cb(null, obj);\n          }\n        }\n\n        // See if we can dispatch the next queued command, if any\n        this.sendNextCommand();\n      });\n      bunser.on('error', err => {\n        this.emit('error', err);\n      });\n\n      const socket = (this.socket = net.createConnection(sockname));\n      socket.on('connect', () => {\n        this.connecting = false;\n        this.emit('connect');\n        this.sendNextCommand();\n      });\n      socket.on('error', err => {\n        this.connecting = false;\n        this.emit('error', err);\n      });\n      socket.on('data', buf => {\n        if (this.bunser) {\n          this.bunser.append(buf);\n        }\n      });\n      socket.on('end', () => {\n        this.socket = null;\n        this.bunser = null;\n        this.cancelCommands('The watchman connection was closed');\n        this.emit('end');\n      });\n    };\n\n    // triggers will export the sock path to the environment.\n    // If we're invoked in such a way, we can simply pick up the\n    // definition from the environment and avoid having to fork off\n    // a process to figure it out\n    if (process.env.WATCHMAN_SOCK) {\n      makeSock(process.env.WATCHMAN_SOCK);\n      return;\n    }\n\n    // We need to ask the client binary where to find it.\n    // This will cause the service to start for us if it isn't\n    // already running.\n    const args = ['--no-pretty', 'get-sockname'];\n\n    // We use the more elaborate spawn rather than exec because there\n    // are some error cases on Windows where process spawning can hang.\n    // It is desirable to pipe stderr directly to stderr live so that\n    // we can discover the problem.\n    let proc = null;\n    let spawnFailed = false;\n\n    const spawnError = (\n      error /*: Error | {message: string, code?: string, errno?: string}*/,\n    ) => {\n      if (spawnFailed) {\n        // For ENOENT, proc 'close' will also trigger with a negative code,\n        // let's suppress that second error.\n        return;\n      }\n      spawnFailed = true;\n      if (error.code === 'EACCES' || error.errno === 'EACCES') {\n        error.message =\n          'The Watchman CLI is installed but cannot ' +\n          'be spawned because of a permission problem';\n      } else if (error.code === 'ENOENT' || error.errno === 'ENOENT') {\n        error.message =\n          'Watchman was not found in PATH.  See ' +\n          'https://facebook.github.io/watchman/docs/install.html ' +\n          'for installation instructions';\n      }\n      console.error('Watchman: ', error.message);\n      this.emit('error', error);\n    };\n\n    try {\n      proc = childProcess.spawn(this.watchmanBinaryPath, args, {\n        stdio: ['ignore', 'pipe', 'pipe'],\n        windowsHide: true,\n      });\n    } catch (error) {\n      spawnError(error);\n      return;\n    }\n\n    const stdout = [];\n    const stderr = [];\n    proc.stdout.on('data', data => {\n      stdout.push(data);\n    });\n    proc.stderr.on('data', data => {\n      data = data.toString('utf8');\n      stderr.push(data);\n      console.error(data);\n    });\n    proc.on('error', error => {\n      spawnError(error);\n    });\n\n    proc.on('close', (code, signal) => {\n      if (code !== 0) {\n        spawnError(\n          new Error(\n            this.watchmanBinaryPath +\n              ' ' +\n              args.join(' ') +\n              ' returned with exit code=' +\n              code +\n              ', signal=' +\n              signal +\n              ', stderr= ' +\n              stderr.join(''),\n          ),\n        );\n        return;\n      }\n      try {\n        const obj = JSON.parse(stdout.join(''));\n        if ('error' in obj) {\n          const error = new WatchmanError(obj.error);\n          error.watchmanResponse = obj;\n          this.emit('error', error);\n          return;\n        }\n        makeSock(obj.sockname);\n      } catch (e) {\n        this.emit('error', e);\n      }\n    });\n  }\n\n  command(args /*: mixed*/, done /*: CommandCallback */ = () => {}) {\n    // Queue up the command\n    this.commands.push({cmd: args, cb: done});\n\n    // Establish a connection if we don't already have one\n    if (!this.socket) {\n      if (!this.connecting) {\n        this.connecting = true;\n        this.connect();\n        return;\n      }\n      return;\n    }\n\n    // If we're already connected and idle, try sending the command immediately\n    this.sendNextCommand();\n  }\n\n  // This is a helper that we expose for testing purposes\n  _synthesizeCapabilityCheck /*:: <T: { capabilities?: ?{[key: string]: boolean}, version: string, error?: string, ... }> */(\n    resp /*: T */,\n    optional /*: $ReadOnlyArray<string> */,\n    required /*: $ReadOnlyArray<string> */,\n  ) /*: T & { error?: string, ...} */ {\n    const capabilities /*:{[key: string]: boolean} */ = (resp.capabilities =\n      {});\n    const version = resp.version;\n    optional.forEach(name => {\n      capabilities[name] = have_cap(version, name);\n    });\n    required.forEach(name => {\n      const have = have_cap(version, name);\n      capabilities[name] = have;\n      if (!have) {\n        resp.error =\n          'client required capability `' +\n          name +\n          '` is not supported by this server';\n      }\n    });\n    return resp;\n  }\n\n  capabilityCheck(\n    caps /*: $ReadOnly<{optional?: $ReadOnlyArray<string>, required?: $ReadOnlyArray<string>, ...}>*/,\n    done /*: CommandCallback */,\n  ) {\n    const optional = caps.optional || [];\n    const required = caps.required || [];\n    this.command(\n      [\n        'version',\n        {\n          optional: optional,\n          required: required,\n        },\n      ],\n      (error, resp /*: ?Response */) => {\n        if (error || !resp) {\n          done(error || new Error('no watchman response'));\n          return;\n        }\n        if (!('capabilities' in resp)) {\n          // Server doesn't support capabilities, so we need to\n          // synthesize the results based on the version\n          resp = this._synthesizeCapabilityCheck(resp, optional, required);\n          if (resp.error) {\n            error = new WatchmanError(resp.error);\n            error.watchmanResponse = resp;\n            done(error);\n            return;\n          }\n        }\n        done(null, resp);\n      },\n    );\n  }\n\n  // Close the connection to the service\n  end() {\n    this.cancelCommands('The client was ended');\n    if (this.socket) {\n      this.socket.end();\n      this.socket = null;\n    }\n    this.bunser = null;\n  }\n}\n\nconst cap_versions /*: $ReadOnly<{[key:string]: ?string}>*/ = {\n  'cmd-watch-del-all': '3.1.1',\n  'cmd-watch-project': '3.1',\n  relative_root: '3.3',\n  'term-dirname': '3.1',\n  'term-idirname': '3.1',\n  wildmatch: '3.7',\n};\n\n// Compares a vs b, returns < 0 if a < b, > 0 if b > b, 0 if a == b\nfunction vers_compare(aStr /*:string*/, bStr /*:string*/) {\n  const a = aStr.split('.');\n  const b = bStr.split('.');\n  for (let i = 0; i < 3; i++) {\n    const d = parseInt(a[i] || '0') - parseInt(b[i] || '0');\n    if (d != 0) {\n      return d;\n    }\n  }\n  return 0; // Equal\n}\n\nfunction have_cap(vers /*:string */, name /*:string*/) {\n  if (cap_versions[name] != null) {\n    return vers_compare(vers, cap_versions[name]) >= 0;\n  }\n  return false;\n}\n\nmodule.exports.Client = Client;\n"
  },
  {
    "path": "watchman/node/package.json",
    "content": "{\n  \"name\": \"fb-watchman\",\n  \"version\": \"2.0.2\",\n  \"description\": \"Bindings for the Watchman file watching service\",\n  \"main\": \"index.js\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git@github.com:facebook/watchman.git\"\n  },\n  \"keywords\": [\n    \"facebook\",\n    \"watchman\",\n    \"file\",\n    \"watch\",\n    \"watcher\",\n    \"watching\",\n    \"fs.watch\",\n    \"fswatcher\",\n    \"fs\",\n    \"glob\",\n    \"utility\"\n  ],\n  \"author\": \"Wez Furlong <wez@fb.com> (http://wezfurlong.org)\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/facebook/watchman/issues\"\n  },\n  \"homepage\": \"https://facebook.github.io/watchman/\",\n  \"files\": [\n    \"index.js\"\n  ],\n  \"dependencies\": {\n    \"bser\": \"2.1.1\"\n  }\n}\n"
  },
  {
    "path": "watchman/portability/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"backtrace\",\n    srcs = [\"Backtrace.cpp\"],\n    headers = [\"Backtrace.h\"],\n    exported_deps = select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:windows\": [\n            \"fbsource//third-party/toolchains/win:dbghelp.lib\",\n        ],\n    }),\n)\n\ncpp_library(\n    name = \"getopt\",\n    headers = [\"GetOpt.h\"],\n    exported_deps = select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:windows\": [\n            \"//watchman/thirdparty/getopt:getopt\",\n        ],\n    }),\n)\n\ncpp_library(\n    name = \"posixspawn\",\n    srcs = [\"PosixSpawn.cpp\"],\n    headers = [\"PosixSpawn.h\"],\n    deps = [\n        \":winerror\",\n        \"//folly:string\",\n        \"//folly:synchronized\",\n        \"//watchman:logging\",\n        \"//watchman:stream\",\n    ],\n    exported_deps = [\n        \"//folly/portability:sys_types\",\n    ],\n)\n\ncpp_library(\n    name = \"winerror\",\n    srcs = [\"WinError.cpp\"],\n    headers = [\"WinError.h\"],\n)\n"
  },
  {
    "path": "watchman/portability/Backtrace.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/portability/Backtrace.h\"\n#include <stdint.h>\n#include <mutex>\n#include <vector>\n\n#ifdef _WIN32\n\n#define PRIsize_t \"Iu\"\n\n// some versions of dbghelp.h do: typedef enum {}; with no typedef name\n#pragma warning(disable : 4091)\n\n// dbghelp.h relies on these symbols being defined by its user\n#ifndef IN\n#define IN\n#endif\n#ifndef OUT\n#define OUT\n#endif\n#ifndef OPTIONAL\n#define OPTIONAL\n#endif\n\n// Must be included before dbghelp.h\n#include <windows.h>\n\n#include <dbghelp.h> // @manual\n\nstatic std::once_flag sym_init_once;\nstatic HANDLE proc;\n// 4k for a symbol name? Demangled symbols are pretty huge\nstatic constexpr size_t kMaxSymbolLen = 4096;\n\nstatic void sym_init() {\n  proc = GetCurrentProcess();\n  SymInitialize(proc, nullptr, TRUE);\n  SymSetOptions(\n      SYMOPT_LOAD_LINES | SYMOPT_FAIL_CRITICAL_ERRORS | SYMOPT_NO_PROMPTS |\n      SYMOPT_UNDNAME);\n}\n\nsize_t backtrace(void** frames, size_t n_frames) {\n  std::call_once(sym_init_once, sym_init);\n  // Skip the first three frames; they're always going to show\n  // w_log, log_stack_trace and backtrace\n  return CaptureStackBackTrace(3, (DWORD)n_frames, frames, nullptr);\n}\n\nchar** backtrace_symbols(void** array, size_t n_frames) {\n  std::vector<std::string> arr;\n  size_t i;\n  union {\n    SYMBOL_INFO info;\n    char buf[kMaxSymbolLen];\n  } sym;\n  IMAGEHLP_LINE64 line;\n  // How much space we need to hold the final argv style\n  // array for the results\n  size_t totalSize = 0;\n\n  std::call_once(sym_init_once, sym_init);\n\n  sym.info = SYMBOL_INFO();\n  sym.info.MaxNameLen = sizeof(sym) - sizeof(sym.info);\n  sym.info.SizeOfStruct = sizeof(sym.info);\n\n  line.SizeOfStruct = sizeof(line);\n\n  for (i = 0; i < n_frames; i++) {\n    char str[kMaxSymbolLen + 128];\n    DWORD64 addr = (DWORD64)(intptr_t)array[i];\n    DWORD displacement;\n\n    if (!SymFromAddr(proc, addr, 0, &sym.info)) {\n      snprintf(\n          sym.info.Name,\n          sizeof(sym.buf),\n          \"<failed to resolve symbol: %s>\",\n          std::system_category().message(GetLastError()).c_str());\n    }\n\n    if (SymGetLineFromAddr64(proc, addr, &displacement, &line)) {\n      snprintf(\n          str,\n          sizeof(str),\n          \"#%\" PRIsize_t \" %p %s %s:%u\",\n          i,\n          array[i],\n          sym.info.Name,\n          line.FileName,\n          line.LineNumber);\n\n    } else {\n      snprintf(\n          str,\n          sizeof(str),\n          \"#%\" PRIsize_t \" %p %s\",\n          i,\n          array[i],\n          sym.info.Name);\n    }\n\n    arr.emplace_back(str);\n    // One pointer, the string content and the trailing NUL byte\n    totalSize += sizeof(char*) + arr.back().size() + 1;\n  }\n\n  auto strings = (char**)malloc(totalSize + sizeof(char*));\n  if (!strings) {\n    return nullptr;\n  }\n\n  auto buf = (char*)(strings + arr.size() + 1);\n  for (i = 0; i < arr.size(); ++i) {\n    strings[i] = buf;\n    memcpy(buf, arr[i].c_str(), arr[i].size() + 1);\n    buf += arr[i].size() + 1;\n  }\n  strings[i] = nullptr;\n\n  return strings;\n}\n\nsize_t backtrace_from_exception(\n    LPEXCEPTION_POINTERS exception,\n    void** frames,\n    size_t n_frames) {\n  std::call_once(sym_init_once, sym_init);\n\n  auto context = exception->ContextRecord;\n  auto thread = GetCurrentThread();\n  STACKFRAME64 frame;\n  DWORD image;\n  size_t i = 0;\n#ifdef _M_IX86\n  image = IMAGE_FILE_MACHINE_I386;\n  frame.AddrPC.Offset = context->Eip;\n  frame.AddrPC.Mode = AddrModeFlat;\n  frame.AddrFrame.Offset = context->Ebp;\n  frame.AddrFrame.Mode = AddrModeFlat;\n  frame.AddrStack.Offset = context->Esp;\n  frame.AddrStack.Mode = AddrModeFlat;\n#elif _M_X64\n  image = IMAGE_FILE_MACHINE_AMD64;\n  frame.AddrPC.Offset = context->Rip;\n  frame.AddrPC.Mode = AddrModeFlat;\n  frame.AddrFrame.Offset = context->Rsp;\n  frame.AddrFrame.Mode = AddrModeFlat;\n  frame.AddrStack.Offset = context->Rsp;\n  frame.AddrStack.Mode = AddrModeFlat;\n#elif _M_IA64\n  image = IMAGE_FILE_MACHINE_IA64;\n  frame.AddrPC.Offset = context->StIIP;\n  frame.AddrPC.Mode = AddrModeFlat;\n  frame.AddrFrame.Offset = context->IntSp;\n  frame.AddrFrame.Mode = AddrModeFlat;\n  frame.AddrBStore.Offset = context->RsBSP;\n  frame.AddrBStore.Mode = AddrModeFlat;\n  frame.AddrStack.Offset = context->IntSp;\n  frame.AddrStack.Mode = AddrModeFlat;\n#else\n  return 0; // No stack trace for you!\n#endif\n  while (i < n_frames &&\n         StackWalk64(\n             image,\n             proc,\n             thread,\n             &frame,\n             context,\n             nullptr,\n             nullptr,\n             nullptr,\n             nullptr)) {\n    frames[i++] = (void*)frame.AddrPC.Offset;\n  }\n  return i;\n}\n\n#endif\n"
  },
  {
    "path": "watchman/portability/Backtrace.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#ifdef _WIN32\n\n#define HAVE_BACKTRACE\n#define HAVE_BACKTRACE_SYMBOLS\n\nextern \"C\" {\n\ntypedef struct _EXCEPTION_POINTERS* LPEXCEPTION_POINTERS;\n\nsize_t backtrace(void** frames, size_t n_frames);\nchar** backtrace_symbols(void** array, size_t n_frames);\nsize_t backtrace_from_exception(\n    LPEXCEPTION_POINTERS exception,\n    void** frames,\n    size_t n_frames);\n}\n\n#endif\n"
  },
  {
    "path": "watchman/portability/GetOpt.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#ifdef _WIN32\n\n#include \"watchman/thirdparty/getopt/GetOpt.h\" // @manual\n\n#else\n\n#include <getopt.h>\n\n#endif\n"
  },
  {
    "path": "watchman/portability/PosixSpawn.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/portability/PosixSpawn.h\"\n#include <folly/String.h>\n#include <folly/Synchronized.h>\n#include \"watchman/Logging.h\"\n#include \"watchman/portability/WinError.h\"\n#include \"watchman/watchman_stream.h\"\n\n#ifdef _WIN32\n\nusing namespace watchman;\n\n// Maps pid => process handle\n// This is so that we can wait/poll/query the termination status\nstatic folly::Synchronized<std::unordered_map<DWORD, HANDLE>> child_procs;\n\npid_t waitpid(pid_t pid, int* status, int options) {\n  HANDLE h;\n\n  {\n    auto rlock = child_procs.rlock();\n    auto it = rlock->find(pid);\n    if (it == rlock->end()) {\n      errno = ESRCH;\n      return -1;\n    }\n    h = it->second;\n  }\n\n  auto res = WaitForSingleObject(h, options == WNOHANG ? 0 : INFINITE);\n\n  switch (res) {\n    case WAIT_OBJECT_0: {\n      DWORD exitCode = 0;\n      GetExitCodeProcess(h, &exitCode);\n      *status = int(exitCode);\n      child_procs.wlock()->erase(pid);\n      return pid;\n    }\n    case WAIT_ABANDONED_0:\n      *status = 0;\n      child_procs.wlock()->erase(pid);\n      return pid;\n    case WAIT_TIMEOUT:\n      return 0;\n    default:\n      errno = EINVAL;\n      return -1;\n  }\n}\n\nint posix_spawnattr_init(posix_spawnattr_t* attrp) {\n  *attrp = posix_spawnattr_t();\n  return 0;\n}\n\nint posix_spawnattr_setflags(posix_spawnattr_t* attrp, short flags) {\n  attrp->flags = flags;\n  return 0;\n}\n\nint posix_spawnattr_getflags(posix_spawnattr_t* attrp, short* flags) {\n  *flags = attrp->flags;\n  return 0;\n}\n\nint posix_spawnattr_setcwd_np(posix_spawnattr_t* attrp, const char* path) {\n  char* path_dup = nullptr;\n\n  if (path) {\n    path_dup = strdup(path);\n    if (!path_dup) {\n      return ENOMEM;\n    }\n  }\n\n  free(attrp->working_dir);\n  attrp->working_dir = path_dup;\n  return 0;\n}\n\nint posix_spawnattr_destroy(posix_spawnattr_t* attrp) {\n  free(attrp->working_dir);\n  return 0;\n}\n\nint posix_spawn_file_actions_init(posix_spawn_file_actions_t* actions) {\n  *actions = posix_spawn_file_actions_t();\n  return 0;\n}\n\nint posix_spawn_file_actions_adddup2(\n    posix_spawn_file_actions_t* actions,\n    int fd,\n    int target_fd) {\n  struct _posix_spawn_file_action *acts, *act;\n  acts = (_posix_spawn_file_action*)realloc(\n      actions->acts, (actions->nacts + 1) * sizeof(*acts));\n  if (!acts) {\n    return ENOMEM;\n  }\n  act = &acts[actions->nacts];\n  act->action = _posix_spawn_file_action::dup_fd;\n  act->u.source_fd = fd;\n  act->target_fd = target_fd;\n  actions->acts = acts;\n  actions->nacts++;\n  return 0;\n}\n\nint posix_spawn_file_actions_adddup2_handle_np(\n    posix_spawn_file_actions_t* actions,\n    intptr_t handle,\n    int target_fd) {\n  struct _posix_spawn_file_action *acts, *act;\n  acts = (_posix_spawn_file_action*)realloc(\n      actions->acts, (actions->nacts + 1) * sizeof(*acts));\n  if (!acts) {\n    return ENOMEM;\n  }\n  act = &acts[actions->nacts];\n  act->action = _posix_spawn_file_action::dup_handle;\n  act->u.dup_local_handle = handle;\n  act->target_fd = target_fd;\n  actions->acts = acts;\n  actions->nacts++;\n  return 0;\n}\n\nint posix_spawn_file_actions_addopen(\n    posix_spawn_file_actions_t* actions,\n    int target_fd,\n    const char* name,\n    int flags,\n    int mode) {\n  struct _posix_spawn_file_action *acts, *act;\n  char* name_dup = strdup(name);\n  if (!name_dup) {\n    return ENOMEM;\n  }\n  acts = (_posix_spawn_file_action*)realloc(\n      actions->acts, (actions->nacts + 1) * sizeof(*acts));\n  if (!acts) {\n    free(name_dup);\n    return ENOMEM;\n  }\n  act = &acts[actions->nacts];\n  act->action = _posix_spawn_file_action::open_file;\n  act->target_fd = target_fd;\n  act->u.open_info.name = name_dup;\n  act->u.open_info.flags = flags;\n  act->u.open_info.mode = mode;\n\n  actions->acts = acts;\n  actions->nacts++;\n  return 0;\n}\n\nint posix_spawn_file_actions_destroy(posix_spawn_file_actions_t* actions) {\n  int i;\n  for (i = 0; i < actions->nacts; i++) {\n    if (actions->acts[i].action != _posix_spawn_file_action::open_file) {\n      continue;\n    }\n    free(actions->acts[i].u.open_info.name);\n  }\n  free(actions->acts);\n  return 0;\n}\n\n#define CMD_EXE_PREFIX \"cmd.exe /c \\\"\"\nstatic char* build_command_line(char* const argv[]) {\n  int argc = 0, i = 0;\n  size_t size = 0;\n  char *cmdbuf = nullptr, *cur = nullptr;\n\n  // Note: includes trailing NUL which we count as the closing quote\n  size = sizeof(CMD_EXE_PREFIX);\n\n  for (argc = 0; argv[argc] != nullptr; argc++) {\n    size += 4 * (strlen(argv[argc]) + 1);\n  }\n\n  cmdbuf = (char*)malloc(size);\n  if (!cmdbuf) {\n    return nullptr;\n  }\n\n  // Here be dragons.  More gory details in http://stackoverflow.com/q/4094699\n  // Surely not complete here by any means\n\n  strcpy_s(cmdbuf, size, CMD_EXE_PREFIX);\n  cur = cmdbuf + strlen(CMD_EXE_PREFIX);\n  for (i = 0; i < argc; i++) {\n    int j;\n    char* arg = argv[i];\n\n    // Space separated\n    if (i > 0) {\n      *cur = ' ';\n      cur++;\n    }\n\n    *cur = '\"';\n    cur++;\n\n    // FIXME: multibyte\n    for (j = 0; arg[j]; j++) {\n      switch (arg[j]) {\n        case '\"':\n          if (arg[j + 1] != '\"') {\n            strcpy(cur, \"\\\"\\\"\\\"\");\n            cur += 3;\n          } else {\n            strcpy(cur, \"\\\"\\\"\\\"\\\"\");\n            cur += 4;\n            j++;\n          }\n          break;\n        default:\n          *cur = arg[j];\n          cur++;\n      }\n    }\n    *cur = '\"';\n    cur++;\n  }\n  *cur = '\"';\n  cur++;\n  *cur = 0;\n  return cmdbuf;\n}\n\nstatic char* make_env_block(char* const envp[]) {\n  int i;\n  size_t total_len = 1; /* for final NUL */\n  char* block = NULL;\n  char* target = NULL;\n\n  for (i = 0; envp[i]; i++) {\n    total_len += strlen(envp[i]) + 1;\n  }\n\n  block = (char*)malloc(total_len);\n  if (!block) {\n    return NULL;\n  }\n\n  target = block;\n\n  for (i = 0; envp[i]; i++) {\n    size_t len = strlen(envp[i]);\n    // Also copy the NULL\n    memcpy(target, envp[i], len + 1);\n    target += len + 1;\n  }\n\n  // Final NUL terminator\n  *target = 0;\n\n  return block;\n}\n\nstatic int posix_spawn_common(\n    bool search_path,\n    pid_t* pid,\n    const char* path,\n    const posix_spawn_file_actions_t* file_actions,\n    const posix_spawnattr_t* attrp,\n    char* const argv[],\n    char* const envp[]) {\n  auto sinfo = STARTUPINFOEX();\n  auto sec = SECURITY_ATTRIBUTES();\n  auto pinfo = PROCESS_INFORMATION();\n  char* cmdbuf;\n  char* env_block;\n  DWORD create_flags = CREATE_NO_WINDOW | EXTENDED_STARTUPINFO_PRESENT;\n  int ret;\n  int i;\n  HANDLE inherited_handles[3] = {0, 0, 0};\n\n  cmdbuf = build_command_line(argv);\n  if (!cmdbuf) {\n    return ENOMEM;\n  }\n\n  env_block = make_env_block(envp);\n  if (!env_block) {\n    free(cmdbuf);\n    return ENOMEM;\n  }\n\n  sinfo.StartupInfo.cb = sizeof(sinfo);\n  sinfo.StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;\n  sinfo.StartupInfo.wShowWindow = SW_HIDE;\n\n  sec.nLength = sizeof(sec);\n  sec.bInheritHandle = TRUE;\n\n  if (attrp->flags & POSIX_SPAWN_SETPGROUP) {\n    create_flags |= CREATE_NEW_PROCESS_GROUP;\n  }\n\n  for (i = 0; i < file_actions->nacts; i++) {\n    struct _posix_spawn_file_action* act = &file_actions->acts[i];\n    HANDLE* target = NULL;\n\n    switch (act->target_fd) {\n      case 0:\n        target = &sinfo.StartupInfo.hStdInput;\n        break;\n      case 1:\n        target = &sinfo.StartupInfo.hStdOutput;\n        break;\n      case 2:\n        target = &sinfo.StartupInfo.hStdError;\n        break;\n    }\n\n    if (!target) {\n      logf(ERR, \"posix_spawn: can't target fd outside range [0-2]\\n\");\n      ret = ENOSYS;\n      goto done;\n    }\n\n    if (act->action != _posix_spawn_file_action::open_file) {\n      // Process a dup(2) action\n      DWORD err;\n\n      if (*target) {\n        CloseHandle(*target);\n        *target = INVALID_HANDLE_VALUE;\n      }\n\n      if (act->action == _posix_spawn_file_action::dup_fd) {\n        HANDLE src = NULL;\n        switch (act->u.source_fd) {\n          case 0:\n            src = sinfo.StartupInfo.hStdInput;\n            break;\n          case 1:\n            src = sinfo.StartupInfo.hStdOutput;\n            break;\n          case 2:\n            src = sinfo.StartupInfo.hStdError;\n            break;\n        }\n        if (!src) {\n          src = (HANDLE)_get_osfhandle(act->u.source_fd);\n        }\n        act->u.dup_local_handle = intptr_t(src);\n      }\n\n      if (!DuplicateHandle(\n              GetCurrentProcess(),\n              (HANDLE)act->u.dup_local_handle,\n              GetCurrentProcess(),\n              target,\n              0,\n              TRUE,\n              DUPLICATE_SAME_ACCESS)) {\n        err = GetLastError();\n        logf(\n            ERR,\n            \"posix_spawn: failed to duplicate handle: {}\\n\",\n            win32_strerror(err));\n        ret = map_win32_err(err);\n        goto done;\n      }\n    } else {\n      // Process an open(2) action\n\n      auto h = w_handle_open(\n          act->u.open_info.name, act->u.open_info.flags & ~O_CLOEXEC);\n      if (!h) {\n        ret = errno;\n        logf(\n            ERR,\n            \"posix_spawn: failed to open {} into target fd {}: {}\\n\",\n            act->u.open_info.name,\n            act->target_fd,\n            folly::errnoStr(ret));\n        goto done;\n      }\n\n      if (*target) {\n        CloseHandle(*target);\n      }\n      *target = (HANDLE)h.release();\n    }\n  }\n\n  if (!sinfo.StartupInfo.hStdInput) {\n    sinfo.StartupInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);\n  }\n  if (!sinfo.StartupInfo.hStdOutput) {\n    sinfo.StartupInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);\n  }\n  if (!sinfo.StartupInfo.hStdError) {\n    sinfo.StartupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);\n  }\n\n  // Ensure that we only pass the stdio handles to the child.\n  {\n    SIZE_T size = 0;\n\n    inherited_handles[0] = sinfo.StartupInfo.hStdInput;\n    inherited_handles[1] = sinfo.StartupInfo.hStdOutput;\n    inherited_handles[2] = sinfo.StartupInfo.hStdError;\n    sinfo.lpAttributeList = NULL;\n\n    InitializeProcThreadAttributeList(NULL, 1, 0, &size);\n    sinfo.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST)malloc(size);\n    InitializeProcThreadAttributeList(sinfo.lpAttributeList, 1, 0, &size);\n    UpdateProcThreadAttribute(\n        sinfo.lpAttributeList,\n        0,\n        PROC_THREAD_ATTRIBUTE_HANDLE_LIST,\n        inherited_handles,\n        3 * sizeof(HANDLE),\n        NULL,\n        NULL);\n  }\n\n  if (!CreateProcess(\n          search_path ? NULL : path,\n          cmdbuf,\n          &sec,\n          &sec,\n          TRUE,\n          create_flags,\n          env_block,\n          attrp->working_dir,\n          &sinfo.StartupInfo,\n          &pinfo)) {\n    logf(\n        ERR,\n        \"CreateProcess: `{}`: (cwd={}) {}\\n\",\n        cmdbuf,\n        attrp->working_dir ? attrp->working_dir : \"<process cwd>\",\n        win32_strerror(GetLastError()));\n    ret = EACCES;\n  } else {\n    *pid = (pid_t)pinfo.dwProcessId;\n\n    // Record the pid -> handle mapping for later wait/reap\n    child_procs.wlock()->emplace(pinfo.dwProcessId, pinfo.hProcess);\n\n    CloseHandle(pinfo.hThread);\n    ret = 0;\n  }\n\n  free(sinfo.lpAttributeList);\n\ndone:\n  free(cmdbuf);\n  free(env_block);\n\n  // If we manufactured any handles, close them out now\n  if (sinfo.StartupInfo.hStdInput != GetStdHandle(STD_INPUT_HANDLE)) {\n    CloseHandle(sinfo.StartupInfo.hStdInput);\n  }\n  if (sinfo.StartupInfo.hStdOutput != GetStdHandle(STD_OUTPUT_HANDLE)) {\n    CloseHandle(sinfo.StartupInfo.hStdOutput);\n  }\n  if (sinfo.StartupInfo.hStdError != GetStdHandle(STD_ERROR_HANDLE)) {\n    CloseHandle(sinfo.StartupInfo.hStdError);\n  }\n\n  return ret;\n}\n\nint posix_spawn(\n    pid_t* pid,\n    const char* path,\n    const posix_spawn_file_actions_t* file_actions,\n    const posix_spawnattr_t* attrp,\n    char* const argv[],\n    char* const envp[]) {\n  return posix_spawn_common(false, pid, path, file_actions, attrp, argv, envp);\n}\n\nint posix_spawnp(\n    pid_t* pid,\n    const char* file,\n    const posix_spawn_file_actions_t* file_actions,\n    const posix_spawnattr_t* attrp,\n    char* const argv[],\n    char* const envp[]) {\n  return posix_spawn_common(true, pid, file, file_actions, attrp, argv, envp);\n}\n\n#endif\n"
  },
  {
    "path": "watchman/portability/PosixSpawn.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/portability/SysTypes.h>\n#include <stdint.h>\n\n#ifndef _WIN32\n\n#include <spawn.h>\n\n#else\n\n// Spawn attributes\n\ntypedef struct _posix_spawnattr {\n  short flags;\n  char* working_dir;\n} posix_spawnattr_t;\n\n#define POSIX_SPAWN_SETPGROUP 2\n\nint posix_spawnattr_init(posix_spawnattr_t* attrp);\nint posix_spawnattr_setflags(posix_spawnattr_t* attrp, short flags);\nint posix_spawnattr_getflags(posix_spawnattr_t* attrp, short* flags);\nint posix_spawnattr_destroy(posix_spawnattr_t* attrp);\n\nint posix_spawnattr_setcwd_np(posix_spawnattr_t* attrp, const char* path);\n\n// File actions\nstruct _posix_spawn_file_action {\n  enum { open_file, dup_fd, dup_handle } action;\n  int target_fd;\n  union {\n    intptr_t dup_local_handle;\n    int source_fd;\n    struct {\n      char* name;\n      int flags;\n      int mode;\n    } open_info;\n  } u;\n};\n\ntypedef struct _posix_spawn_file_actions {\n  struct _posix_spawn_file_action* acts;\n  int nacts;\n} posix_spawn_file_actions_t;\n\nint posix_spawn_file_actions_init(posix_spawn_file_actions_t* actions);\nint posix_spawn_file_actions_adddup2(\n    posix_spawn_file_actions_t* actions,\n    int fd,\n    int target_fd);\nint posix_spawn_file_actions_adddup2_handle_np(\n    posix_spawn_file_actions_t* actions,\n    intptr_t handle,\n    int target_fd);\nint posix_spawn_file_actions_addopen(\n    posix_spawn_file_actions_t* actions,\n    int target_fd,\n    const char* name,\n    int flags,\n    int mode);\nint posix_spawn_file_actions_destroy(posix_spawn_file_actions_t* actions);\n\n// And spawning itself\n\nint posix_spawn(\n    pid_t* pid,\n    const char* path,\n    const posix_spawn_file_actions_t* file_actions,\n    const posix_spawnattr_t* attrp,\n    char* const argv[],\n    char* const envp[]);\nint posix_spawnp(\n    pid_t* pid,\n    const char* file,\n    const posix_spawn_file_actions_t* file_actions,\n    const posix_spawnattr_t* attrp,\n    char* const argv[],\n    char* const envp[]);\n\n#define WNOHANG 1\npid_t waitpid(pid_t pid, int* status, int options);\n\n#endif\n"
  },
  {
    "path": "watchman/portability/WinError.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/portability/WinError.h\"\n\n#ifdef _WIN32\n\n#include <windows.h>\n\nconst char* win32_strerror(uint32_t err) {\n  static thread_local char msgbuf[1024];\n\n  FormatMessageA(\n      FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\n      nullptr,\n      err,\n      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),\n      msgbuf,\n      sizeof(msgbuf) - 1,\n      nullptr);\n\n  return msgbuf;\n}\n\nint map_win32_err(uint32_t err) {\n  switch (err) {\n    case ERROR_SUCCESS:\n      return 0;\n    case ERROR_ALREADY_EXISTS:\n      return EEXIST;\n    case ERROR_TIMEOUT:\n      return ETIMEDOUT;\n    case WAIT_TIMEOUT:\n      return ETIMEDOUT;\n    case WAIT_IO_COMPLETION:\n      return EINTR;\n    case ERROR_INVALID_FUNCTION:\n      return ENOSYS;\n    case ERROR_PATH_NOT_FOUND:\n      return ENOTDIR;\n    case ERROR_FILE_NOT_FOUND:\n      return ENOENT;\n    case ERROR_TOO_MANY_OPEN_FILES:\n      return EMFILE;\n    case ERROR_ACCESS_DENIED:\n      return EACCES;\n    case ERROR_INVALID_HANDLE:\n      return EBADF;\n    case ERROR_NOT_ENOUGH_MEMORY:\n      return ENOMEM;\n    case ERROR_INVALID_ACCESS:\n      return EACCES;\n    case ERROR_INVALID_DATA:\n      return EINVAL;\n    case ERROR_NO_MORE_FILES:\n      return EMFILE;\n    case ERROR_WRITE_PROTECT:\n      return EPERM;\n    case ERROR_NOT_SUPPORTED:\n      return ENOSYS;\n    case ERROR_DEV_NOT_EXIST:\n      return ENOENT;\n    case ERROR_FILE_EXISTS:\n      return EEXIST;\n    case ERROR_INVALID_PARAMETER:\n      return EINVAL;\n    case ERROR_NO_PROC_SLOTS:\n      return EAGAIN;\n    case ERROR_BROKEN_PIPE:\n      return EPIPE;\n    case ERROR_DISK_FULL:\n      return ENOSPC;\n    case ERROR_IO_INCOMPLETE:\n      return EAGAIN;\n    case ERROR_IO_PENDING:\n      return EAGAIN;\n    case WSAECONNREFUSED:\n      return ECONNREFUSED;\n    default:\n      return EINVAL;\n  }\n}\n\n#endif\n"
  },
  {
    "path": "watchman/portability/WinError.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdint.h>\n\n#ifdef _WIN32\n\n// DWORD = uint32_t\n\nconst char* win32_strerror(uint32_t err);\nint map_win32_err(uint32_t err);\n\n#endif\n"
  },
  {
    "path": "watchman/python/.gitignore",
    "content": "instroot\n"
  },
  {
    "path": "watchman/python/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nadd_subdirectory(pywatchman)\n\nadd_fb_python_executable(watchman-diag\n  SOURCES\n    bin/watchman-diag=__main__.py\n  DEPENDS\n    pywatchman\n)\ninstall_fb_python_executable(watchman-diag)\n\nadd_fb_python_executable(watchman-make\n  SOURCES\n    bin/watchman-make=__main__.py\n  DEPENDS\n    pywatchman\n)\ninstall_fb_python_executable(watchman-make)\n\nadd_fb_python_executable(watchman-replicate-subscription\n  SOURCES\n    bin/watchman-replicate-subscription=__main__.py\n  DEPENDS\n    pywatchman\n)\ninstall_fb_python_executable(watchman-replicate-subscription)\n\nadd_fb_python_executable(watchman-wait\n  SOURCES\n    bin/watchman-wait=__main__.py\n  DEPENDS\n    pywatchman\n)\ninstall_fb_python_executable(watchman-wait)\n"
  },
  {
    "path": "watchman/python/LICENSE",
    "content": "The following license applies to all files within this directory and any\nsubdirectories:\n\nCopyright 2014-present Meta Platforms, Inc.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice,\n   this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n * Neither the name Facebook nor the names of its contributors may be used to\n   endorse or promote products derived from this software without specific\n   prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nCopyright for portions of this software is held by Benjamin Peterson (c)\n2010-2016, as part of the 'six' project:\n\nCopyright (c) 2010-2016 Benjamin Peterson\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "watchman/python/MANIFEST.in",
    "content": "include pywatchman/bser.h\n"
  },
  {
    "path": "watchman/python/README.md",
    "content": "# Watchman client for Python\n\nThis directory contains the Watchman client for Python.\n\n## Build\n\n```sh\npython -m build\n```\n"
  },
  {
    "path": "watchman/python/bin/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:python_binary.bzl\", \"python_binary\")\n\noncall(\"scm_client_infra\")\n\npython_binary(\n    name = \"watchman-make\",\n    srcs = {\"watchman-make\": \"watchman_make.py\"},\n    main_module = \"watchman.python.bin.watchman_make\",\n    deps = [\"//watchman/python/pywatchman:pywatchman\"],\n)\n\npython_binary(\n    name = \"watchman-wait\",\n    srcs = {\"watchman-wait\": \"watchman_wait.py\"},\n    main_module = \"watchman.python.bin.watchman_wait\",\n    deps = [\"//watchman/python/pywatchman:pywatchman\"],\n)\n\npython_binary(\n    name = \"watchman-diag\",\n    srcs = {\"watchman-diag\": \"watchman_diag.py\"},\n    main_module = \"watchman.python.bin.watchman_diag\",\n    deps = [\"//watchman/python/pywatchman:pywatchman\"],\n)\n\npython_binary(\n    name = \"watchman-replicate-subscription\",\n    srcs = {\"watchman-replicate-subscription\": \"watchman_replicate_subscription.py\"},\n    main_module = \"watchman.python.bin.watchman_replicate_subscription\",\n    deps = [\"//watchman/python/pywatchman:pywatchman\"],\n)\n"
  },
  {
    "path": "watchman/python/bin/watchman-diag",
    "content": "#!/usr/bin/env python3\n\n# Collect some FB specific watchman diagnostics\nimport glob\nimport json\nimport os\nimport re\nimport stat\nimport subprocess\nimport sys\nimport time\n\nimport pywatchman\n\n\ndef print_table(table):\n    col_width = [max(len(x) for x in col) for col in zip(*table)]\n    for line in table:\n        print(\n            \"  \".join(\"{0:{1}}\".format(x, col_width[i]) for i, x in enumerate(line))\n            + \" \"\n        )\n\n\ndef print_status(msg):\n    print(msg)\n    # If they're piping into `arc paste`, they may get impatient\n    if not os.isatty(sys.stdout.fileno()):\n        sys.stderr.write(msg + \"\\n\")\n\n\nclass ProcessInfo(object):\n    def __init__(self):\n        self.pid_to_name = {}\n\n    def procname(self, pid):\n        if pid in self.pid_to_name:\n            return self.pid_to_name[pid]\n        name = os.readlink(\"/proc/%s/exe\" % pid)\n        try:\n            name = os.path.realpath(name)\n        except Exception as e:\n            pass\n        self.pid_to_name[pid] = name\n        return name\n\n\nclass InotifyInfo(object):\n    \"\"\"Extract information about users of inotify on the system\"\"\"\n\n    def __init__(self, procinfo):\n        self.procinfo = procinfo\n\n    def procname(self, pid):\n        return self.procinfo.procname(pid)\n\n    def read_fdinfo(self, path):\n        bufsize = 65536\n        blob = []\n        fd = os.open(path, os.O_RDONLY)\n        while True:\n            buf = os.read(fd, bufsize)\n            if len(buf) == 0:\n                break\n            blob.append(buf)\n        os.close(fd)\n        if len(blob) == 0:\n            return None\n        return \"\".join(blob)\n\n    def parsefdinfo(self, blob):\n        watches = 0\n        for line in blob.split(\"\\n\"):\n            if line.find(\"inotify wd\") != -1:\n                watches = watches + 1\n        return watches\n\n    def get_watches(self):\n        watches = [(\"PID\", \"EXE\", \"FD\", \"WATCHES\")]\n        for fddir in glob.glob(\"/proc/*/fd\"):\n            for fdnode in glob.glob(fddir + \"/*\"):\n                try:\n                    l = os.readlink(fdnode)\n                    if l != \"anon_inode:inotify\":\n                        continue\n                    _, _, pid, _, fdnum = fdnode.split(\"/\")\n                    info = self.read_fdinfo(\"/proc/%s/fdinfo/%s\" % (pid, fdnum))\n                    if info is None:\n                        watches.append(\n                            (pid, self.procname(pid), fdnum, \"<unknown> (see t8692428)\")\n                        )\n                        continue\n                    watches.append(\n                        (pid, self.procname(pid), fdnum, str(self.parsefdinfo(info)))\n                    )\n\n                except Exception as e:\n                    pass\n        return watches\n\n\ndef walk_root(root, case_sensitive, ignores):\n    \"\"\"Generate a map of file nodes for the given dir by looking\n    at the filesystem\"\"\"\n\n    # we can't use os.walk because it insists on stating and derefing\n    # dewey and gvfs symlinks (== slow)\n    results = {}\n\n    # the queue of dirs to analyze\n    dirs = [root]\n    while len(dirs) > 0:\n        dir = dirs.pop()\n        for ent in os.listdir(dir):\n            full = os.path.join(dir, ent)\n            rel = os.path.relpath(full, root)\n\n            if rel in ignores:\n                continue\n\n            st = os.lstat(full)\n            if stat.S_ISDIR(st.st_mode):\n                # add this child to our dir queue\n                dirs.append(full)\n\n            item = (rel, st)\n            if not case_sensitive:\n                rel = rel.lower()\n            results[rel] = item\n\n    return results\n\n\ndef collect_watch_info(watchman, watch):\n    root_config = watchman.query(\"get-config\", watch)[\"config\"]\n    watchmanconfig_file = os.path.join(watch, \".watchmanconfig\")\n    file_config = {}\n    if os.path.exists(watchmanconfig_file):\n        with open(watchmanconfig_file) as f:\n            file_config = json.load(f)\n    if file_config != root_config:\n        print(\"Watchman root %s is using this configuration: %s\" % (watch, root_config))\n        print(\"%s has this configuration: %s\" % (watchmanconfig_file, file_config))\n        print_status(\n            (\n                \"** You should run: `watchman watch-del %s ; \"\n                + \"watchman watch %s` to reload .watchmanconfig **\\n\"\n            )\n            % (watch, watch)\n        )\n\n    if not is_eden(watch):\n        # Eden mounts don't use the sparse extension, so skip this bit\n        print(\"\\nSparse configuration for %s:\" % watch)\n        passthru(\"cd %s && hg sparse\" % watch, shell=True)\n\n        # Eden watcher is stateless and doesn't have this\n        print(\"\\nContent hash cache stats for %s:\" % watch)\n        passthru([\"watchman\", \"debug-contenthash\", watch])\n\n        print(\"\\nSymlink target cache stats for %s:\" % watch)\n        passthru([\"watchman\", \"debug-symlink-target-cache\", watch])\n\n    print(\"\\nSubscriptions for %s:\" % watch)\n    passthru([\"watchman\", \"debug-get-subscriptions\", watch])\n\n    print(\"\\nAsserted states for %s:\" % watch)\n    passthru([\"watchman\", \"debug-get-asserted-states\", watch])\n\n\ndef is_eden(dirpath):\n    if sys.platform == \"win32\":\n        return os.path.isfile(os.path.join(dirpath, \".eden\", \"config\"))\n    return os.path.islink(os.path.join(dirpath, \".eden\", \"root\"))\n\n\ndef cross_check_watch(watchman, watch, case_sensitive):\n    if is_eden(watch):\n        # We don't keep any state in watchman for eden mounts\n        # that is worth testing against an O(repo) crawl\n        print_status(\n            \"\\nSkipping filesystem sanity check for %s as it is an eden mount\\n\" % watch\n        )\n        return\n\n    print_status(\n        \"\\nSanity checking the filesystem at %s against watchman; this may take a couple of minutes.\"\n        % watch\n    )\n\n    root_config = watchman.query(\"get-config\", watch)[\"config\"]\n    ignores = []\n    if \"ignore_dirs\" in root_config:\n        ignores = root_config[\"ignore_dirs\"]\n    ignores.append(\".hg\")\n    ignores.append(\".git\")\n    ignores.append(\".svn\")\n\n    print_status(\"Crawling %s...\" % watch)\n    start = time.time()\n    fs = walk_root(watch, case_sensitive, ignores)\n    print_status(\"(took %ds)\" % (time.time() - start))\n    start = time.time()\n    print_status(\"Interrogating watchman about %s...\" % watch)\n\n    fields = [\"name\", \"mode\", \"size\", \"mtime_f\", \"oclock\"]\n    if os.name == \"posix\":\n        fields.append(\"ino\")\n\n    files = watchman.query(\n        \"query\",\n        watch,\n        {\n            \"expression\": [\n                \"allof\",\n                [\n                    \"not\",\n                    [\n                        \"anyof\",\n                        [\"dirname\", \".git\"],\n                        [\"dirname\", \".hg\"],\n                        [\"dirname\", \".svn\"],\n                        [\"name\", \".git\", \"wholename\"],\n                        [\"name\", \".svn\", \"wholename\"],\n                        [\"name\", \".hg\", \"wholename\"],\n                    ],\n                ],\n                \"exists\",\n            ],\n            \"fields\": fields,\n        },\n    )\n    print_status(\"(took %ds)\" % (time.time() - start))\n    print_status(\"Comparing results...\")\n\n    phantoms = []\n    bad_deletes = []\n    mismatched = []\n    missing = []\n    all_names_in_watchman = set()\n\n    def diff_item(w_item, fs_item):\n        diffs = []\n        if w_item[\"name\"] != fs_item[0]:\n            diffs.append(\n                \"watchman name is `%s` vs fs `%s\" % (w_item[\"name\"], fs_item[0])\n            )\n        st = fs_item[1]\n        if w_item[\"mode\"] != st.st_mode:\n            diffs.append(\n                \"watchman mode is 0%o vs fs 0%o\" % (w_item[\"mode\"], st.st_mode)\n            )\n        if w_item[\"size\"] != st.st_size and not stat.S_ISDIR(st.st_mode):\n            diffs.append(\"watchman size is %d vs fs %d\" % (w_item[\"size\"], st.st_size))\n        if w_item[\"mtime_f\"] != st.st_mtime:\n            diffs.append(\n                \"watchman mtime is %s vs fs %s\" % (w_item[\"mtime_f\"], st.st_mtime)\n            )\n        if os.name == \"posix\" and (w_item[\"ino\"] != st.st_ino):\n            diffs.append(\"watchman ino is %d vs fs %d\" % (w_item[\"ino\"], st.st_ino))\n\n        if len(diffs) > 0:\n            diffs.append(\"   oclock is %s\" % w_item[\"oclock\"])\n            return diffs\n        return None\n\n    for f in files[\"files\"]:\n        key = f[\"name\"]\n        if not case_sensitive:\n            key = key.lower()\n        all_names_in_watchman.add(key)\n\n        if key not in fs:\n            phantoms.append(f)\n        else:\n            diff = diff_item(f, fs[key])\n            if diff:\n                print(\"Conflicting information for %s:\" % f[\"name\"])\n                for d in diff:\n                    print(d)\n\n    for key in fs:\n        if not key in all_names_in_watchman:\n            missing.append(fs[key])\n\n    print_status(\n        \"There are %d items reported by watchman that do not exist on the fs:\"\n        % len(phantoms)\n    )\n    if len(phantoms) > 0:\n        for item in phantoms:\n            print(item)\n\n    print_status(\n        \"There are %d items on the filesystem not reported by watchman:\" % len(missing)\n    )\n    if len(missing) > 0:\n        # Let's see if watchman had previously seen any of these\n        names = [\"anyof\"]\n        for item in missing:\n            name = item[0]\n            print(name, item[1])\n            names.append([\"name\", name, \"wholename\"])\n\n        files = watchman.query(\"query\", watch, {\"expression\": names, \"fields\": fields})\n\n        print(\"This is what watchman knows about this set of files:\")\n        for f in files[\"files\"]:\n            print(f)\n\n\ndef passthru(*args, **kwargs):\n    sys.stdout.flush()\n    try:\n        subprocess.call(*args, **kwargs)\n    except Exception as e:\n        print(\"Error while running %s %s: %s\" % (args, kwargs, e))\n\n\nif not os.isatty(sys.stdout.fileno()):\n    sys.stderr.write(\n        \"(most output is going to your pipe, some short summary will show here on stderr)\\n\"\n    )\n\n# Print the basic system info\nprint(\"Platform: %s\" % sys.platform)\nif os.name == \"posix\":\n    uname = os.uname()\n    print_table([uname])\n    print(\"Running watchman-diag as uid %d\" % os.getuid())\n\nprint\n\nif os.name == \"posix\":\n    print(\"RPM version: (rpm -q fb-watchman)\")\n    passthru([\"rpm\", \"-q\", \"fb-watchman\"])\n\nif sys.platform == \"win32\":\n    print(\"choco package version:\")\n    passthru([\"choco\", \"list\", \"--local-only\", \"watchman\"])\n\nprint(\"CLI version: (watchman -v)\")\npassthru([\"watchman\", \"--no-spawn\", \"-v\"])\nprint\n\nwatchman_env_vars = [v for v in os.environ.keys() if v.startswith(\"WATCHMAN_\")]\nif watchman_env_vars:\n    print()\n    print(\n        \"!!!WARNING!!! The following watchman related environment variables are set\",\n        \"(this is unusual and may cause problems):\",\n    )\n    for var in watchman_env_vars:\n        print(\"%s=%s\" % (var, os.getenv(var)))\n    print()\n\nprocinfo = ProcessInfo()\ncase_sensitive = True\n\nif sys.platform == \"linux\":\n    inotify = InotifyInfo(procinfo)\n    print(\"Inotify watch information:\")\n    print_table(inotify.get_watches())\n    print\n\nif sys.platform == \"darwin\":\n    print(\"launchd info:\")\n    passthru([\"launchctl\", \"list\", \"com.github.facebook.watchman\"])\n    case_sensitive = False\n\nif sys.platform == \"win32\":\n    case_sensitive = False\n\n\ndef collect_state_info(path):\n    try:\n        print(\"State information from %s\" % path)\n        print\n        print(\"State file: %s/state\" % path)\n        try:\n            with open(os.path.join(path, \"state\"), \"r\") as f:\n                print(f.read())\n        except FileNotFoundError:\n            pass\n\n        try:\n            with open(os.path.join(path, \"log\"), \"r\") as f:\n                lines = f.readlines()\n                tail = lines[-300:]\n                print(\"Log samples: %s/log\" % path)\n                for line in tail:\n                    print(line.rstrip())\n        except FileNotFoundError:\n            pass\n    except Exception as e:\n        print(\"# %s\" % str(e))\n        pass\n    print\n\n\nfor root in [\n    \"/var/facebook/watchman\",\n    \"/opt/facebook/var/run/watchman\",\n    \"/opt/facebook/watchman/var/run/watchman\",\n    os.environ.get(\"TEMP\"),\n    os.environ.get(\"TMP\"),\n]:\n    if root is None or root == \"\":\n        continue\n\n    for path in glob.glob(\"%s/*-state\" % root):\n        collect_state_info(path)\n\nappdata = os.environ.get(\"LOCALAPPDATA\")\nif appdata:\n    watchman_appdata = os.path.join(appdata, \"watchman\")\n    if os.path.exists(watchman_appdata):\n        collect_state_info(watchman_appdata)\n\nif os.name == \"posix\":\n    print(\"List of running watchman processes:\")\n    passthru(\"ps -ef | grep watchman\", shell=True)\n    print\n\n# We do these last, as they depend on watchman being able to respond:\nif os.name != \"posix\" or (os.getuid() != 0 or not os.environ.get(\"SUDO_UID\")):\n    # Safe to run watchman commands\n    print(\"Watchman service information:\")\n    watchman = pywatchman.client(timeout=600)\n    print(watchman.query(\"version\"))\n    print(\"\\nStatus:\\n\")\n    passthru([\"watchman\", \"--pretty\", \"debug-status\"])\n\n    watches = watchman.query(\"watch-list\")[\"roots\"]\n    print(\"Watches:\\n%s\\n\" % watches)\n\n    for watch in watches:\n        cross_check_watch(watchman, watch, case_sensitive)\n        collect_watch_info(watchman, watch)\n"
  },
  {
    "path": "watchman/python/bin/watchman-make",
    "content": "#!/usr/bin/env python3\nimport argparse\nimport os\nimport subprocess\nimport sys\n\nimport pywatchman\n\n\nSTRING_TYPES = (str, bytes)\n\n\ndef patterns_to_terms(pats):\n    # convert a list of globs into the equivalent watchman expression term\n    if pats is None or len(pats) == 0:\n        return [\"true\"]\n    terms = [\"anyof\"]\n    for p in pats:\n        terms.append([\"match\", p, \"wholename\", {\"includedotfiles\": True}])\n    return terms\n\n\nclass Target(object):\n    \"\"\"Base Class for a Target\n\n    We track the patterns that we consider to be the dependencies for\n    this target and establish a subscription for them.\n\n    When we receive notifications for that subscription, we know that\n    we should execute the command.\n    \"\"\"\n\n    def __init__(self, name, patterns, cmd):\n        self.name = name\n        self.patterns = patterns\n        self.cmd = cmd\n        self.triggered = False\n\n    def start(self, client, root):\n        query = {\"expression\": patterns_to_terms(self.patterns), \"fields\": [\"name\"]}\n        watch = client.query(\"watch-project\", root)\n        if \"warning\" in watch:\n            print(\"WARNING: \", watch[\"warning\"], file=sys.stderr)\n        root_dir = watch[\"watch\"]\n        if \"relative_path\" in watch:\n            query[\"relative_root\"] = watch[\"relative_path\"]\n\n        # get the initial clock value so that we only get updates\n        query[\"since\"] = client.query(\"clock\", root_dir)[\"clock\"]\n\n        print(\n            \"# Changes to files matching %s will execute `%s`\"\n            % (\" \".join(self.patterns), self.cmd),\n            file=sys.stderr,\n        )\n        sub = client.query(\"subscribe\", root_dir, self.name, query)\n\n    def consumeEvents(self, client):\n        data = client.getSubscription(self.name)\n        if data is None:\n            return\n        for item in data:\n            # We only want to trigger if files matched;\n            # updates without a files list are metadata\n            # such as state-enter/leave notices so we skip them\n            if \"files\" in item:\n                self.triggered = True\n            if \"canceled\" in item:\n                raise RuntimeError(\"Watch was cancelled\")\n\n    def execute(self):\n        if not self.triggered:\n            return\n        self.triggered = False\n        print(\"# Execute: `%s`\" % self.cmd, file=sys.stderr)\n        subprocess.call(self.cmd, shell=True)\n\n\nclass MakefileTarget(Target):\n    \"\"\"Represents a Makefile target that we'd like to build.\"\"\"\n\n    def __init__(self, name, make, targets, patterns):\n        self.make = make\n        self.targets = targets\n        cmd = \"%s %s\" % (self.make, \" \".join(self.targets))\n        super(MakefileTarget, self).__init__(name, patterns, cmd)\n\n    def __repr__(self):\n        return \"{make=%r targets=%r pat=%r}\" % (self.make, self.targets, self.patterns)\n\n\nclass RunTarget(Target):\n    \"\"\"Represents a script that we'd like to run.\"\"\"\n\n    def __init__(self, name, runfile, patterns):\n        self.runfile = runfile\n        super(RunTarget, self).__init__(name, patterns, self.runfile)\n\n    def __repr__(self):\n        return \"{runfile=%r pat=%r}\" % (self.runfile, self.patterns)\n\n\nclass DefineTarget(argparse.Action):\n    \"\"\"argument parser helper to manage defining MakefileTarget instances.\"\"\"\n\n    def __init__(self, option_strings, dest, **kwargs):\n        super(DefineTarget, self).__init__(option_strings, dest, **kwargs)\n\n    def __call__(self, parser, namespace, values, option_string=None):\n        targets = getattr(namespace, self.dest)\n        if targets is None:\n            targets = []\n            setattr(namespace, self.dest, targets)\n\n        if isinstance(values, STRING_TYPES):\n            values = [values]\n\n        if namespace.pattern is None or len(namespace.pattern) == 0:\n            print(\"no patterns were specified for target %s\" % values, file=sys.stderr)\n            sys.exit(1)\n\n        target = MakefileTarget(\n            \"target_%d\" % len(targets), namespace.make, values, namespace.pattern\n        )\n        targets.append(target)\n\n        # Clear out patterns between targets\n        namespace.pattern = None\n\n\nparser = argparse.ArgumentParser(\n    formatter_class=argparse.RawDescriptionHelpFormatter,\n    description=\"\"\"\nwatchman-make waits for changes to files and then invokes a build tool\n(by default, `make`) or provided script to process those changes.\nIt uses the watchman service to efficiently watch the appropriate files.\n\nEvents are consolidated and settled before they are dispatched to your build\ntool, so that it won't start executing until after the files have stopped\nchanging.\n\nYou can tell watchman-make about one or more build targets and dependencies\nfor those targets or provide a script to run.\nwatchman-make will then trigger the build for the given targets or\nrun the provided script as changes are detected.\n\n\"\"\",\n)\nparser.add_argument(\n    \"-t\",\n    \"--target\",\n    nargs=\"+\",\n    type=str,\n    action=DefineTarget,\n    help=\"\"\"\nSpecify a list of target(s) to pass to the make tool.  The --make and\n--pattern options that precede --target are used to define the trigger\ncondition.\n\"\"\",\n)\nparser.add_argument(\n    \"-s\",\n    \"--settle\",\n    type=float,\n    default=0.2,\n    help=\"How long to wait to allow changes to settle before invoking targets\",\n)\nparser.add_argument(\n    \"--make\",\n    type=str,\n    default=\"make\",\n    help=\"\"\"\nThe name of the make tool to use for the next --target.  The default is `make`.\nYou may include additional arguments; you are not limited to just the\npath to a tool or script.\n\"\"\",\n)\nparser.add_argument(\n    \"-p\",\n    \"--pattern\",\n    type=str,\n    nargs=\"+\",\n    help=\"\"\"\nDefine filename matching patterns that will be used to trigger the next\n--target definition.\n\nThe pattern syntax is wildmatch style; globbing with recursive matching\nvia '**'.\n\n--pattern is reset to empty after each --target argument.\n\"\"\",\n)\nparser.add_argument(\n    \"--root\",\n    type=str,\n    default=\".\",\n    help=\"\"\"\nDefine the root of the project.  The default is to use the PWD.\nAll patterns are considered to be relative to this root, and the build\ntool is executed with this location set as its PWD.\n\"\"\",\n)\nparser.add_argument(\n    \"-r\",\n    \"--run\",\n    type=str,\n    help=\"\"\"\nThe script that should be run when changes are detected\n\"\"\",\n)\nparser.add_argument(\n    \"--connect-timeout\",\n    type=float,\n    default=600,\n    help=\"\"\"\nInitial watchman client connection timeout. It should be sufficiently large to\nprevent timeouts when watchman is busy (eg. performing a crawl). The default\nvalue is 600 seconds.\n\"\"\",\n)\nargs = parser.parse_args()\n\nif args.target is None and args.run is None:\n    print(\"# No run script or targets were specified, nothing to do.\", file=sys.stderr)\n    sys.exit(1)\n\nif args.target is None:\n    args.target = []\n    if args.run is not None:\n        args.target.append(RunTarget(\"RunTarget\", args.run, args.pattern))\n\n\ndef check_root(desired_root):\n    try:\n        root = os.path.abspath(desired_root)\n        os.chdir(root)\n        return root\n    except Exception as ex:\n        print(\n            \"--root=%s: specified path is invalid: %s\" % (desired_root, ex),\n            file=sys.stderr,\n        )\n        sys.exit(1)\n\n\ntargets = {}\nclient = pywatchman.client(timeout=args.connect_timeout)\ntry:\n    client.capabilityCheck(required=[\"cmd-watch-project\", \"wildmatch\"])\n    root = check_root(args.root)\n    print(\"# Relative to %s\" % root, file=sys.stderr)\n    for t in args.target:\n        t.start(client, root)\n        targets[t.name] = t\n\nexcept pywatchman.CommandError as ex:\n    print(\"watchman:\", str(ex), file=sys.stderr)\n    sys.exit(1)\n\nprint(\"# waiting for changes\", file=sys.stderr)\nwhile True:\n    try:\n        # Wait for changes to start to occur.  We're happy to wait\n        # quite some time for this\n        client.setTimeout(600)\n\n        result = client.receive()\n        for _, t in targets.items():\n            t.consumeEvents(client)\n\n        # Now we wait for events to settle\n        client.setTimeout(args.settle)\n        settled = False\n        while not settled:\n            try:\n                result = client.receive()\n                for _, t in targets.items():\n                    t.consumeEvents(client)\n            except pywatchman.SocketTimeout as ex:\n                # Our short settle timeout hit, so we're now settled\n                settled = True\n                break\n\n        # Now we can work on executing the targets\n        for _, t in targets.items():\n            t.execute()\n\n        # Print this at the bottom of the loop rather than the top\n        # because we may timeout every so often and it looks weird\n        # to keep printing 'waiting for changes' each time we do.\n        print(\"# waiting for changes\", file=sys.stderr)\n\n    except pywatchman.SocketTimeout as ex:\n        # Let's check to see if we're still functional\n        try:\n            vers = client.query(\"version\")\n        except Exception as ex:\n            print(\"watchman:\", str(ex), file=sys.stderr)\n            sys.exit(1)\n\n    except pywatchman.WatchmanError as ex:\n        print(\"watchman:\", str(ex), file=sys.stderr)\n        sys.exit(1)\n\n    except KeyboardInterrupt:\n        # suppress ugly stack trace when they Ctrl-C\n        break\n"
  },
  {
    "path": "watchman/python/bin/watchman-replicate-subscription",
    "content": "#!/usr/bin/env python3\nimport argparse\nimport json\nimport os\nimport sys\nimport time\n\nimport pywatchman\n\n\ndef fieldlist(s):\n    # helper for splitting a list of fields by comma\n    return s.split(\",\")\n\n\nparser = argparse.ArgumentParser(\n    formatter_class=argparse.RawDescriptionHelpFormatter,\n    description=\"\"\"\nwatchman-replicate-subscription can replicate an existing watchman\nsubscription. It queries watchman for a list of subscriptions, identifies the\nsource subscription (i.e., the subscription to replicate) and subscribes to watchman\nusing the same query.\n\nIntegrators can use this client to validate the watchman notifications their\nclient is receiving to localize anomalous behavior.\n\nThe source subscription is identified using any combination of the 'name',\n'pid', and 'client' arguments. The provided combination must uniquely identify\na subscription. Source subscription details for a watched root can be\nretrieved by running the command 'watchman-replicate-subscription PATH --list'.\n\nBy default, the replicated subscription will take the source subscription\nname and prepend the substring 'replicate: ' to it. The 'qname' option can be\nused to specify the replicated subscription name.\n\nThe subscription can stop after a configurable number of events are observed.\nThe default is a single event. You may also remove the limit and allow it to\nexecute continuously.\n\nwatchman-replicate-subscription will print one event per line. The event\ninformation is determined by the fields in the identified subscription, with\neach field separated by a space (or your choice of --separator).\n\nSubscription state-enter and state-leave PDUs will be interleaved with other\nevents. Known subscription PDUs (currently only those generated by the\nmercurial fsmonitor extension) will be enclosed in square brackets. All others will be\noutput in JSON format.\n\nEvents are consolidated and settled by the watchman server before they are\ndispatched to watchman-replicate-subscription.\n\nExit Status:\n\nThe following exit status codes can be used to determine what caused\nwatchman-wait to exit:\n\n0  After successfully waiting for event(s) or listing matching subscriptions\n1  In case of a runtime error of some kind\n2  The -t/--timeout option was used and that amount of time passed\n   before an event was received\n3  Execution was interrupted (Ctrl-C)\n\n\"\"\",\n)\nparser.add_argument(\n    \"path\",\n    type=str,\n    help=\"\"\"\nThe path to a watched root whose subscription we'd like to replicate. The list\nof watched roots can be retrieved by running 'watchman watch-list'.\n\"\"\",\n)\nparser.add_argument(\n    \"-s\",\n    \"--separator\",\n    type=str,\n    default=\" \",\n    help=\"String to use as field separator for event output.\",\n)\nparser.add_argument(\n    \"-q\",\n    \"--qname\",\n    type=str,\n    default=None,\n    help=\"\"\"\nThe replicated subscription name. The default will be the source subscription\nwith the string 'replicate: ' prepended to it.\n\"\"\",\n)\nparser.add_argument(\n    \"-n\",\n    \"--name\",\n    type=str,\n    default=None,\n    help=\"\"\"\nThe name of the subscription to replicate.\n\"\"\",\n)\nparser.add_argument(\n    \"-c\",\n    \"--client\",\n    type=str,\n    default=None,\n    help=\"\"\"\nThe client id of the subscription to replicate.\n\"\"\",\n)\nparser.add_argument(\n    \"-p\",\n    \"--pid\",\n    type=str,\n    default=None,\n    help=\"\"\"\nThe process id of the subscription to replicate.\n\"\"\",\n)\nparser.add_argument(\n    \"-m\",\n    \"--max-events\",\n    type=int,\n    default=1,\n    help=\"\"\"\nSet the maximum number of events that will be processed.  When the limit\nis reached, watchman-replicate-subscription exit.  The default is 1.  Setting\nthe limit to 0 removes the limit, causing watchman-wait to execute indefinitely.\n\"\"\",\n)\nparser.add_argument(\n    \"-t\",\n    \"--timeout\",\n    type=float,\n    default=0,\n    help=\"\"\"\nExit if no events trigger within the specified timeout.  If timeout is\nzero (the default) then keep running indefinitely.\n\"\"\",\n)\nparser.add_argument(\n    \"--connect-timeout\",\n    type=float,\n    default=100,\n    help=\"\"\"\nInitial watchman client connection timeout. It should be sufficiently large to\nprevent timeouts when watchman is busy (eg. performing a crawl). The default\nvalue is 100 seconds.\n\"\"\",\n)\nparser.add_argument(\n    \"-l\",\n    \"--list\",\n    action=\"store_true\",\n    help=\"\"\"\nPrint the matching subscription list and exit.\n\"\"\",\n)\nparser.add_argument(\n    \"-f\",\n    \"--full\",\n    action=\"store_true\",\n    help=\"\"\"\nUse with '--list' to print complete subscription information, including the\nquery.\n\"\"\",\n)\nparser.add_argument(\n    \"--state-only\",\n    action=\"store_true\",\n    help=\"\"\"\nPrint only the subscription state-enter and state-leave PDUs.\n\"\"\",\n)\nargs = parser.parse_args()\n\n# Running total of individual file events we've seen\ntotal_events = 0\n\n\nclass Subscription(object):\n    root = None  # Watched root\n    name = None  # Our name for this subscription\n    path = None\n\n    def __init__(self, path, name, query):\n        self.name = name\n        self.query = query\n        self.path = os.path.abspath(path)\n        if not os.path.exists(self.path):\n            print(\"path %s (%s) does not exist.\" % (path, self.path), file=sys.stderr)\n            sys.exit(1)\n\n    def __repr__(self):\n        return \"Subscription(path=%s, name=%s, query=%s)\" % (\n            self.path,\n            self.name,\n            json.dumps(self.query),\n        )\n\n    def start(self, client):\n        watch = client.query(\"watch-project\", self.path)\n        if \"warning\" in watch:\n            print(\"WARNING: \", watch[\"warning\"], file=sys.stderr)\n        self.root = watch[\"watch\"]\n\n        # get the initial clock value so that we only get updates\n        self.query[\"since\"] = client.query(\"clock\", self.root)[\"clock\"]\n        sub = client.query(\"subscribe\", self.root, self.name, self.query)\n\n    def formatField(self, fname, val):\n        return str(val)\n\n    def formatFsmonitorSubPdu(self, sub):\n        out = []\n        keys = [\"state-enter\", \"state-leave\"]\n        for key in keys:\n            if key in sub:\n                out.append(key)\n                out.append(sub[key])\n        keys = [\"abandoned\"]\n        for key in keys:\n            if key in sub:\n                out.append(key)\n        if \"metadata\" in sub:\n            metadata = sub[\"metadata\"]\n            keys = [\"status\", \"rev\", \"partial\", \"distance\"]\n            for key in keys:\n                if key in keys:\n                    out.append(str(metadata[key]))\n        return \"[ %s ]\" % (\" \".join(out))\n\n    def formatSubPdu(self, sub):\n        # If fsmonitor metadata fields present, pretty-print\n        if \"metadata\" in sub and all(\n            key in sub[\"metadata\"] for key in [\"status\", \"rev\", \"partial\", \"distance\"]\n        ):\n            return self.formatFsmonitorSubPdu(sub)\n        return json.dumps(sub, indent=2)\n\n    def emit(self, client):\n        global total_events\n        data = client.getSubscription(self.name)\n        if data is None:\n            return False\n        for dat in data:\n            if any(key in dat.keys() for key in [\"state-enter\", \"state-leave\"]):\n                print(self.formatSubPdu(dat))\n                sys.stdout.flush()\n                total_events = total_events + 1\n                if args.max_events > 0 and total_events >= args.max_events:\n                    sys.exit(0)\n            if args.state_only:\n                continue\n            for f in dat.get(\"files\", []):\n                out = []\n                if len(repFields) == 1:\n                    # When only 1 field is specified, the result is a\n                    # list of just the values\n                    out.append(self.formatField(repFields[0], f))\n                else:\n                    # Otherwise it is a list of objects\n                    for fname, val in f.items():\n                        out.append(self.formatField(fname, val))\n                print(args.separator.join(out))\n                sys.stdout.flush()\n                total_events = total_events + 1\n                if args.max_events > 0 and total_events >= args.max_events:\n                    sys.exit(0)\n        return True\n\n\ndef getSubIdInfo(subName, subClient, subPid):\n    return \"(name='%s', pid='%s' client='%s')\" % (\n        \"Any\" if subName is None else subName,\n        \"Any\" if subPid is None else subPid,\n        \"Any\" if subClient is None else subClient,\n    )\n\n\ndef getSubInfo(sub, keys=None):\n    rslt = {}\n    if keys is None:\n        keys = [\"name\", \"pid\", \"client\", \"query\"]\n    subInfo = sub[\"info\"] if \"info\" in sub else {}\n    for key in keys:\n        if key in subInfo:\n            rslt[key] = subInfo[key]\n        else:\n            rslt[key] = \"\"\n            keyWarn = true\n    return rslt\n\n\npath = args.path\nsubName = args.name\nsubPid = args.pid\nsubClient = args.client\nclient = pywatchman.client(timeout=args.connect_timeout)\n\n# We use debug-get-subscriptions to get subscription information.  Note:\n# the debug commands are not stable/supported, so we are susceptible to breakage\n# if they change.  Do not copy this approach without understanding this risk.\nsubs = client.query(\"debug-get-subscriptions\", path)\nmatchSubs = []\nfor sub in subs[\"subscribers\"]:\n    info = sub[\"info\"]\n    if (\n        (subName is None or sub[\"info\"][\"name\"] == subName)\n        and (subPid is None or str(sub[\"info\"][\"pid\"]) == subPid)\n        and (subClient is None or str(sub[\"info\"][\"client\"]) == subClient)\n    ):\n        matchSubs.append(sub)\n\nif args.list:\n    if len(matchSubs) == 0:\n        print(\"No matching subscriptions\")\n    for sub in matchSubs:\n        keys = None if args.full else [\"name\", \"pid\", \"client\"]\n        print(json.dumps(getSubInfo(sub, keys=keys), indent=2), file=sys.stdout)\n    sys.exit(0)\n\nif len(matchSubs) == 0:\n    print(\n        \"Error, no matching subscriptions:\\n\"\n        \"\\tcriteria: %s\\n\"\n        \"\\tpath: %s\\n\"\n        \"To get a list of subscriptions for a watched root, use:\\n\"\n        \"\\twatchman-replicate-subscription PATH --list\"\n        % (getSubIdInfo(subName, subClient, subPid), path),\n        file=sys.stderr,\n    )\n    sys.exit(1)\n\nif len(matchSubs) > 1:\n    print(\n        \"Error, found multiple matching subscriptions:\\n\"\n        \"\\tcriteria: %s\\n\"\n        \"\\tpath: %s\\n\"\n        \"Use the '--name', '--client' and '--pid' options to identify a subscription.\\n\"\n        \"To get a list of subscriptions for a watched root, use:\\n\"\n        \"\\twatchman-replicate-subscription PATH --list\"\n        % (getSubIdInfo(subName, subClient, subPid), path),\n        file=sys.stderr,\n    )\n    sys.exit(1)\n\nmatchSub = matchSubs[0]\nrepQuery = matchSubs[0][\"info\"][\"query\"]\n\n# Subscriptions with no fields specified, will get watchman default\n# and will describe themselves in the response.  If they specified\n# just a single field then we'd like to know what it is because we\n# won't know the name from the `files` list so we make an attempt\n# to capture the field definition here and use it only in the case\n# that it is a single field name,\nrepFields = matchSubs[0][\"info\"][\"query\"].get(\"fields\", [])\nrepName = args.qname if args.qname else \"replicate: \" + matchSub[\"info\"][\"name\"]\n\nrepSub = Subscription(name=repName, path=path, query=repQuery)\nprint(\"%s\" % (repSub))\n\ndeadline = None\nif args.timeout > 0:\n    deadline = time.time() + args.timeout\n\ntry:\n    repSub.start(client)\n\nexcept pywatchman.CommandError as ex:\n    print(\"watchman:\", ex.msg, file=sys.stderr)\n    sys.exit(1)\n\nwhile deadline is None or time.time() < deadline:\n    try:\n        if deadline is not None:\n            client.setTimeout(deadline - time.time())\n        # wait for a unilateral response\n        result = client.receive()\n\n        # in theory we can parse just the result variable here, but\n        # the client object will accumulate all subscription results\n        # over time, so we ask it to remove and return those values\n        # for each of the subscriptions\n        repSub.emit(client)\n\n    except pywatchman.SocketTimeout as ex:\n        if deadline is not None and time.time() >= deadline:\n            sys.exit(2)\n\n        # Let's check to see if we're still functional\n        try:\n            vers = client.query(\"version\")\n        except Exception as ex:\n            print(\"watchman:\", str(ex), file=sys.stderr)\n            sys.exit(1)\n\n    except KeyboardInterrupt:\n        # suppress ugly stack trace when they Ctrl-C\n        sys.exit(3)\n"
  },
  {
    "path": "watchman/python/bin/watchman-wait",
    "content": "#!/usr/bin/env python3\nimport argparse\nimport os\nimport sys\nimport time\n\nimport pywatchman\n\n\ndef fieldlist(s):\n    # helper for splitting a list of fields by comma\n    return s.split(\",\")\n\n\nparser = argparse.ArgumentParser(\n    formatter_class=argparse.RawDescriptionHelpFormatter,\n    description=\"\"\"\nwatchman-wait waits for changes to files.  It uses the watchman service to\nefficiently and recursively watch your specified list of paths.\n\nIt is suitable for waiting for changes to files from shell scripts.\n\nIt can stop after a configurable number of events are observed.  The default\nis a single event.  You may also remove the limit and allow it to execute\ncontinuously.\n\nwatchman-wait will print one event per line.  The event information includes\nyour specified list of fields, with each field separated by a space (or your\nchoice of --separator).\n\nEvents are consolidated and settled by the watchman server before they are\ndispatched to watchman-wait.\n\nExit Status:\n\nThe following exit status codes can be used to determine what caused\nwatchman-wait to exit:\n\n0  After successfully waiting for event(s)\n1  In case of a runtime error of some kind\n2  The -t/--timeout option was used and that amount of time passed\n   before an event was received\n3  Execution was interrupted (Ctrl-C)\n\n\"\"\",\n)\nparser.add_argument(\"path\", type=str, nargs=\"+\", help=\"path(s) to watch\")\nparser.add_argument(\n    \"--relative\",\n    type=str,\n    default=\".\",\n    help=\"print paths relative to this dir (default=PWD)\",\n)\nparser.add_argument(\n    \"--fields\",\n    type=fieldlist,\n    default=[\"name\"],\n    help=\"\"\"\nComma separated list of file information fields to return.\nThe default is just the name.  For a list of possible fields, see:\nhttps://facebook.github.io/watchman/docs/cmd/query.html#available-fields\n\"\"\",\n)\nparser.add_argument(\n    \"-s\",\n    \"--separator\",\n    type=str,\n    default=\" \",\n    help=\"String to use as field separator for event output.\",\n)\nparser.add_argument(\n    \"-0\",\n    \"--null\",\n    action=\"store_true\",\n    help=\"\"\"\nUse a NUL byte as a field separator, takes precedence over --separator.\n\"\"\",\n)\nparser.add_argument(\n    \"-m\",\n    \"--max-events\",\n    type=int,\n    default=1,\n    help=\"\"\"\nSet the maximum number of events that will be processed.  When the limit\nis reached, watchman-wait will exit.  The default is 1.  Setting the\nlimit to 0 removes the limit, causing watchman-wait to execute indefinitely.\n\"\"\",\n)\nparser.add_argument(\n    \"-p\",\n    \"--pattern\",\n    type=str,\n    nargs=\"+\",\n    help=\"\"\"\nOnly emit paths that match this list of patterns.  Patterns are\napplied by the watchman server and are matched against the root-relative\npaths.\n\nYou will almost certainly want to use quotes around your pattern list\nso that your shell doesn't interpret the pattern.\n\nThe pattern syntax is wildmatch style; globbing with recursive matching\nvia '**'.\n\"\"\",\n)\nparser.add_argument(\n    \"-t\",\n    \"--timeout\",\n    type=float,\n    default=0,\n    help=\"\"\"\nExit if no events trigger within the specified timeout.  If timeout is\nzero (the default) then keep running indefinitely.\n\"\"\",\n)\nparser.add_argument(\n    \"--connect-timeout\",\n    type=float,\n    default=100,\n    help=\"\"\"\nInitial watchman client connection timeout. It should be sufficiently large to\nprevent timeouts when watchman is busy (eg. performing a crawl). The default\nvalue is 100 seconds.\n\"\"\",\n)\nargs = parser.parse_args()\nif args.null:\n    args.separator = \"\\0\"\n\n\n# We parse the list of paths into a set of subscriptions\nsubscriptions = {}\n\n# Running total of individual file events we've seen\ntotal_events = 0\n\n\nclass Subscription(object):\n    root = None  # Watched root\n    relpath = None  # Offset to dir of interest\n    name = None  # Our name for this subscription\n    path = None\n\n    def __init__(self, path):\n        if path in subscriptions:\n            raise ValueError(\"path %s already specified\" % path)\n        self.name = path\n        self.path = os.path.abspath(path)\n        if not os.path.exists(self.path):\n            print(\n                \"\"\"path %s (%s) does not exist.\nPerhaps you should use the --pattern option?\"\"\"\n                % (path, self.path),\n                file=sys.stderr,\n            )\n            sys.exit(1)\n        subscriptions[self.name] = self\n\n    def __repr__(self):\n        return \"Subscription(root=%s, rel=%s, name=%s)\" % (\n            self.root,\n            self.relpath,\n            self.name,\n        )\n\n    def start(self, client):\n        dir_to_watch = self.path\n        if args.pattern:\n            expr = [\"anyof\"]\n            for p in args.pattern:\n                expr.append([\"match\", p, \"wholename\", {\"includedotfiles\": True}])\n        else:\n            expr = [\"true\"]\n        if not os.path.isdir(self.path):\n            # Need to watch its parent\n            dir_to_watch = os.path.dirname(self.path)\n            expr = [\"name\", os.path.basename(self.path)]\n\n        query = {\"expression\": expr, \"fields\": args.fields}\n        watch = client.query(\"watch-project\", dir_to_watch)\n        if \"warning\" in watch:\n            print(\"WARNING: \", watch[\"warning\"], file=sys.stderr)\n\n        self.root = watch[\"watch\"]\n        if \"relative_path\" in watch:\n            query[\"relative_root\"] = watch[\"relative_path\"]\n\n        # get the initial clock value so that we only get updates\n        query[\"since\"] = client.query(\"clock\", self.root)[\"clock\"]\n\n        sub = client.query(\"subscribe\", self.root, self.name, query)\n\n    def formatField(self, fname, val):\n        if fname == \"name\":\n            # Respect the --relative path printing option\n            return os.path.relpath(os.path.join(self.name, val), args.relative)\n        # otherwise just make sure it's a string so that we can join it\n        return str(val)\n\n    def emit(self, client):\n        global total_events\n        data = client.getSubscription(self.name)\n        if data is None:\n            return False\n        for dat in data:\n            for f in dat.get(\"files\", []):\n                out = []\n                if len(args.fields) == 1:\n                    # When only 1 field is specified, the result is a\n                    # list of just the values\n                    out.append(self.formatField(args.fields[0], f))\n                else:\n                    # Otherwise it is a list of objects\n                    for fname in args.fields:\n                        out.append(self.formatField(fname, f[fname]))\n                print(args.separator.join(out))\n                sys.stdout.flush()\n                total_events = total_events + 1\n                if args.max_events > 0 and total_events >= args.max_events:\n                    sys.exit(0)\n        return True\n\n\n# Translate paths into subscriptions\nfor path in args.path:\n    sub = Subscription(path)\n\n# and start up the client + subscriptions\nclient = pywatchman.client(timeout=args.connect_timeout)\n\ndeadline = None\nif args.timeout > 0:\n    deadline = time.time() + args.timeout\n\ntry:\n    client.capabilityCheck(required=[\"term-dirname\", \"cmd-watch-project\", \"wildmatch\"])\n    for _, sub in subscriptions.items():\n        sub.start(client)\n\nexcept pywatchman.CommandError as ex:\n    print(\"watchman:\", ex.msg, file=sys.stderr)\n    sys.exit(1)\n\nwhile deadline is None or time.time() < deadline:\n    try:\n        if deadline is not None:\n            client.setTimeout(deadline - time.time())\n        # wait for a unilateral response\n        result = client.receive()\n\n        # in theory we can parse just the result variable here, but\n        # the client object will accumulate all subscription results\n        # over time, so we ask it to remove and return those values\n        # for each of the subscriptions\n        for _, sub in subscriptions.items():\n            sub.emit(client)\n\n    except pywatchman.SocketTimeout as ex:\n        if deadline is not None and time.time() >= deadline:\n            sys.exit(2)\n\n        # Let's check to see if we're still functional\n        try:\n            vers = client.query(\"version\")\n        except Exception as ex:\n            print(\"watchman:\", str(ex), file=sys.stderr)\n            sys.exit(1)\n\n    except KeyboardInterrupt:\n        # suppress ugly stack trace when they Ctrl-C\n        sys.exit(3)\n"
  },
  {
    "path": "watchman/python/bin/watchman-wait-aio",
    "content": "#!/usr/bin/env python3\n\nimport argparse\nimport asyncio\nimport os\nimport sys\n\nimport pywatchman\nfrom pywatchman.aioclient import AIOClient as WatchmanClient\n\n\ndef _with_timeout(task, timeout):\n    if timeout > 0:\n        return asyncio.wait_for(task, timeout)\n    return task\n\n\nclass Subscription(object):\n    \"\"\"A single subscription.\"\"\"\n\n    def __init__(self, abspath, name):\n        self.name = name  # Our name for this subscription\n        self.abspath = abspath  # Full path to the dir being watched\n        self.root = None  # Watched root\n        self.relpath = None  # Path relative to root of thr dir being watched\n\n    def __str__(self):\n        return \"Subscription(name=%s, root=%s, abspath=%s, relpath=%s)\" % (\n            self.name,\n            self.root,\n            self.abspath,\n            self.relpath,\n        )\n\n    async def activate(self, client, patterns=None, fields=[\"name\"]):\n        \"\"\"Activate the subscription. This function is a coroutine.\"\"\"\n        dir_to_watch = self.abspath\n\n        if patterns:\n            expr = [\"anyof\"]\n            for p in patterns:\n                expr.append([\"match\", p, \"wholename\", {\"includedotfiles\": True}])\n        else:\n            expr = [\"true\"]\n\n        if not os.path.isdir(self.abspath):\n            # Need to watch its parent\n            dir_to_watch = os.path.dirname(self.abspath)\n            expr = [\"name\", os.path.basename(self.abspath)]\n\n        query = {\"expression\": expr, \"fields\": fields}\n\n        watch = await client.query(\"watch-project\", dir_to_watch)\n\n        if \"warning\" in watch:\n            print(\"WARNING: \", watch[\"warning\"], file=sys.stderr)\n\n        self.root = watch[\"watch\"]\n        if \"relative_path\" in watch:\n            self.relpath = watch[\"relative_path\"]\n            expr = [\"allof\", [\"dirname\", self.relpath], expr]\n\n        # get the initial clock value so that we only get updates\n        query[\"since\"] = (await client.query(\"clock\", self.root))[\"clock\"]\n\n        await client.query(\"subscribe\", self.root, self.name, query)\n\n    async def get(self, client):\n        data = await client.get_subscription(self.name, self.root)\n        return data[\"files\"]\n\n    @classmethod\n    def from_path(cls, path, name=None):\n        \"\"\"Create a subscription for the given path, using that path as the\n        subscription's name if not specified.\"\"\"\n        name = name or path\n        abspath = os.path.abspath(path)\n        return cls(abspath, name)\n\n\nclass SubscriptionManager(object):\n    def __init__(\n        self, client, paths, patterns, fields, separator, relative, max_events\n    ):\n        self.subscriptions = {}\n        self.listeners = []\n        self.total_events = 0\n        self.client = client\n        self.paths = paths\n        self.patterns = patterns\n        self.fields = fields\n        self.separator = separator\n        self.relative = relative\n        self.max_events = max_events\n\n    async def activate(self):\n        for path in self.paths:\n            await self._add_subscription(path)\n        self._init_listeners()\n\n    def _init_listeners(self):\n        async def process_loop(sub):\n            while True:\n                for rec in await sub.get(self.client):\n                    print(self._format_record(rec))\n                    sys.stdout.flush()\n                self.total_events += 1\n                if self.max_events > 0 and self.total_events >= self.max_events:\n                    self._cancel_all()\n                    break\n\n        self.listeners = [\n            asyncio.ensure_future(process_loop(sub))\n            for _, sub in self.subscriptions.items()\n        ]\n\n    def _check_path(self, path):\n        if path in self.subscriptions:\n            raise ValueError(\"path %s already specified\" % path)\n        if not os.path.exists(path):\n            raise ValueError(\"path %s does not exist\" % path)\n\n    async def _add_subscription(self, path):\n        self._check_path(path)\n        sub = Subscription.from_path(path)\n        await sub.activate(self.client, self.patterns, self.fields)\n        self.subscriptions[path] = sub\n\n    def _cancel_all(self):\n        for l in self.listeners:\n            if not l.done():\n                l.cancel()\n        self.client.close()\n\n    def _format_field(self, fname, fval):\n        # TODO: The crazy string conversion won't be needed with BSER v2.\n        if fname == \"name\":\n            fval = os.path.relpath(fval, self.relative.encode(\"utf-8\")).decode(\"utf-8\")\n        return str(fval)\n\n    def _format_record(self, rec):\n        if len(self.fields) == 1:\n            return self._format_field(self.fields[0], rec)\n        else:\n            output = [self._format_field(f, rec[f]) for f in self.fields]\n            return output.join(self.separator)\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(\n        formatter_class=argparse.RawDescriptionHelpFormatter,\n        description=\"\"\"\nwatchman-wait-aio waits for changes to files. It uses the watchman service to\nefficiently and recursively watch your specified list of paths.\n\nIt is suitable for waiting for changes to files from shell scripts.\n\nIt can stop after a configurable number of events are observed. The default\nis a single event.  You may also remove the limit and allow it to execute\ncontinuously.\n\nwatchman-wait will print one event per line. The event information includes\nyour specified list of fields, with each field separated by a space (or your\nchoice of --separator).\n\nEvents are consolidated and settled by the watchman server before they are\ndispatched to watchman-wait.\n\nExit Status:\n\nThe following exit status codes can be used to determine what caused\nwatchman-wait-aio to exit:\n\n0  After successfully waiting for event(s)\n1  In case of a runtime error of some kind\n2  The -t/--timeout option was used and that amount of time passed\n   before an event was received\n3  Execution was interrupted (Ctrl-C)\n    \"\"\",\n    )\n    parser.add_argument(\"path\", type=str, nargs=\"+\", help=\"path(s) to watch\")\n    parser.add_argument(\n        \"--relative\",\n        type=str,\n        default=\".\",\n        help=\"print paths relative to this dir (default=PWD)\",\n    )\n    parser.add_argument(\n        \"--fields\",\n        type=lambda s: s.split(\",\"),\n        default=[\"name\"],\n        help=\"\"\"\nComma separated list of file information fields to return.\nThe default is just the name.  For a list of possible fields, see:\nhttps://facebook.github.io/watchman/docs/cmd/query.html#available-fields.\"\"\",\n    )\n    parser.add_argument(\n        \"-s\",\n        \"--separator\",\n        type=str,\n        default=\" \",\n        help=\"String to use as field separator for event output.\",\n    )\n    parser.add_argument(\n        \"-0\",\n        \"--null\",\n        action=\"store_true\",\n        help=\"\"\"\nUse a NUL byte as a field separator, takes precedence over --separator.\"\"\",\n    )\n    parser.add_argument(\n        \"-m\",\n        \"--max-events\",\n        type=int,\n        default=1,\n        help=\"\"\"\nSet the maximum number of events that will be processed.  When the limit\nis reached, watchman-wait will exit.  The default is 1.  Setting the\nlimit to 0 removes the limit, causing watchman-wait to execute indefinitely.\"\"\",\n    )\n    parser.add_argument(\n        \"-p\",\n        \"--pattern\",\n        type=str,\n        nargs=\"+\",\n        help=\"\"\"\nOnly emit paths that match this list of patterns.  Patterns are\napplied by the watchman server and are matched against the root-relative\npaths.\n\nYou will almost certainly want to use quotes around your pattern list\nso that your shell doesn't interpret the pattern.\n\nThe pattern syntax is wildmatch style; globbing with recursive matching\nvia '**'.\"\"\",\n    )\n    parser.add_argument(\n        \"-t\",\n        \"--timeout\",\n        type=float,\n        default=0,\n        help=\"\"\"\nExit if no events trigger within the specified timeout.  If timeout is\nzero (the default) then keep running indefinitely.\"\"\",\n    )\n    return parser.parse_args()\n\n\ndef main():\n    args = parse_args()\n    loop = asyncio.get_event_loop()\n    mgr = None\n    try:\n        client = loop.run_until_complete(\n            _with_timeout(WatchmanClient.from_socket(), args.timeout)\n        )\n        mgr = SubscriptionManager(\n            client,\n            args.path,\n            args.pattern,\n            args.fields,\n            \"\\0\" if args.null else args.separator,\n            args.relative,\n            args.max_events,\n        )\n        loop.run_until_complete(_with_timeout(mgr.activate(), args.timeout))\n        # Start the subscription processing tasks\n        loop.run_until_complete(\n            _with_timeout(asyncio.gather(*mgr.listeners), args.timeout)\n        )\n\n    except pywatchman.CommandError as ex:\n        print(\"watchman:\", ex.msg, file=sys.stderr)\n        if mgr is not None:\n            mgr._cancel_all()\n        sys.exit(1)\n\n    except asyncio.TimeoutError:\n        if mgr is not None:\n            mgr._cancel_all()\n        sys.exit(2)\n\n    except KeyboardInterrupt:\n        # suppress ugly stack trace when they Ctrl-C\n        if mgr is not None:\n            mgr._cancel_all()\n        sys.exit(3)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "watchman/python/publish-pypi.sh",
    "content": "#!/bin/sh\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n#\n# ===============================\n# pywatchman pypi publishing tool\n# ===============================\n#\n# this publishes the watchman python module to the pypi project\n# index located at https://pypi.python.org/pypi/pywatchman. the\n# metadata used for this process comes directly from setup.py.\n#\n# this requires write access to the pywatchman project on pypi\n# as well as a ~/.pypirc of the following form:\n#\n#    [distutils]\n#    index-servers = pypi\n#\n#    [pypi]\n#    repository: https://pypi.python.org/pypi\n#    username: <pypi_username>\n#    password: <pypi_password>\n#\n\npython setup.py sdist bdist_wheel upload -r pypi\n"
  },
  {
    "path": "watchman/python/pyproject.toml",
    "content": "[project]\nname = \"pywatchman\"\nversion = \"3.0.0\"\nauthors = [\n    { name = \"Meta Source Control Team\", email = \"sourcecontrol-dev@fb.com\" },\n]\ndescription = \"Watchman client for Python\"\nlicense = { file = \"LICENSE\" }\nreadme = \"README.md\"\nrequires-python = \">=3.8\"\nclassifiers = [\n    \"Development Status :: 5 - Production/Stable\",\n    \"Intended Audience :: Developers\",\n    \"Topic :: System :: Filesystems\",\n    \"License :: OSI Approved :: MIT License\",\n    \"Operating System :: OS Independent\",\n    \"Programming Language :: Python :: 3\",\n    \"Programming Language :: Python :: 3.8\",\n    \"Programming Language :: Python :: 3.9\",\n    \"Programming Language :: Python :: 3.10\",\n    \"Programming Language :: Python :: 3.11\",\n]\nkeywords = [\n    \"watchman\",\n    \"inotify\",\n    \"fsevents\",\n    \"kevent\",\n    \"kqueue\",\n    \"portfs\",\n    \"filesystem\",\n    \"watcher\",\n]\n\n[project.urls]\nHomepage = \"https://github.com/facebook/watchman\"\nIssues = \"https://github.com/facebook/watchman/issues\"\n\n\n[build-system]\nrequires = [\"setuptools>=61.0\", \"wheel>=0.37.0\"]\nbuild-backend = \"setuptools.build_meta\"\n"
  },
  {
    "path": "watchman/python/pywatchman/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\nload(\"@fbcode_macros//build_defs:cpp_python_extension.bzl\", \"cpp_python_extension\")\nload(\"@fbcode_macros//build_defs:python_library.bzl\", \"python_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"bserimpl\",\n    srcs = [\"bser.c\"],\n    headers = [\"bser.h\"],\n    compiler_flags = [\n        \"-Wno-missing-field-initializers\",\n    ],\n    exported_deps = [\n        \"fbsource//third-party/python:python\",\n    ],\n)\n\ncpp_python_extension(\n    name = \"bser\",\n    srcs = [\"bsermodule.c\"],\n    base_module = \"pywatchman\",\n    # https://osdir.com/ml/python.cython.devel/2008-04/msg00080.html\n    # This triggers for us calling Py_INCREF(Py_True)\n    compiler_flags = [\n        \"-Wno-missing-field-initializers\",\n    ],\n    deps = [\n        \":bserimpl\",\n    ],\n)\n\npython_library(\n    name = \"pywatchman\",\n    srcs = glob(\n        [\"*.py\"],\n        exclude = [\"aioclient.py\"],\n    ),\n    base_module = \"pywatchman\",\n    deps = [\n        \":bser\",  # @manual\n    ],\n)\n"
  },
  {
    "path": "watchman/python/pywatchman/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nadd_fb_python_library(pywatchman\n  SOURCES\n    __init__.py\n    capabilities.py\n    encoding.py\n    load.py\n    pybser.py\n    windows.py\n  NAMESPACE pywatchman\n)\n"
  },
  {
    "path": "watchman/python/pywatchman/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport inspect\nimport math\nimport os\nimport socket\nimport subprocess\nimport sys\nimport time\nimport typing\n\nfrom . import capabilities, encoding\n\n\n# Sometimes it's really hard to get Python extensions to compile,\n# so fall back to a pure Python implementation.\ntry:\n    from . import bser\n\n    # Demandimport causes modules to be loaded lazily. Force the load now\n    # so that we can fall back on pybser if bser doesn't exist\n    bser.pdu_info\nexcept ImportError:\n    from . import pybser as bser\n\n\nbser: typing.Any\n\n\nif os.name == \"nt\":\n    import ctypes\n    from ctypes import wintypes\n\n    from .windows import (\n        CancelIoEx,\n        CloseHandle,\n        CreateEvent,\n        CreateFile,\n        ERROR_IO_PENDING,\n        FILE_FLAG_OVERLAPPED,\n        FORMAT_MESSAGE_ALLOCATE_BUFFER,\n        FORMAT_MESSAGE_FROM_SYSTEM,\n        FORMAT_MESSAGE_IGNORE_INSERTS,\n        FormatMessage,\n        GENERIC_READ,\n        GENERIC_WRITE,\n        GetLastError,\n        GetOverlappedResult,\n        GetOverlappedResultEx,\n        INVALID_HANDLE_VALUE,\n        LocalFree,\n        OPEN_EXISTING,\n        OVERLAPPED,\n        ReadFile,\n        SetLastError,\n        WAIT_FAILED,\n        WAIT_IO_COMPLETION,\n        WAIT_OBJECT_0,\n        WAIT_TIMEOUT,\n        WaitForSingleObjectEx,\n        WindowsSocketException,\n        WindowsSocketHandle,\n        WriteFile,\n    )\n\n# 2 bytes marker, 1 byte int size, 8 bytes int64 value\nsniff_len = 13\n\n# This is a helper for debugging the client.\n_debugging = False\nif _debugging:\n\n    def log(fmt, *args):\n        print(\n            \"[%s] %s\"\n            % (time.strftime(\"%a, %d %b %Y %H:%M:%S\", time.gmtime()), fmt % args[:]),\n            file=sys.stderr,\n        )\n\nelse:\n\n    def log(fmt, *args):\n        pass\n\n\ndef _win32_strerror(err):\n    \"\"\"expand a win32 error code into a human readable message\"\"\"\n\n    # FormatMessage will allocate memory and assign it here\n    buf = ctypes.c_char_p()\n    FormatMessage(\n        FORMAT_MESSAGE_FROM_SYSTEM\n        | FORMAT_MESSAGE_ALLOCATE_BUFFER\n        | FORMAT_MESSAGE_IGNORE_INSERTS,\n        None,\n        err,\n        0,\n        buf,\n        0,\n        None,\n    )\n    try:\n        return buf.value\n    finally:\n        LocalFree(buf)\n\n\nclass WatchmanError(Exception):\n    \"\"\"Base exception for watchman client errors.\n\n    This exception and its subclasses are raised when errors occur during\n    watchman client operations, such as communication failures, invalid\n    responses, or command execution errors.\n\n    Attributes:\n        msg: Error message describing the problem.\n        cmd: Optional command that was being executed when the error occurred.\n    \"\"\"\n\n    def __init__(self, msg=None, cmd=None):\n        self.msg = msg\n        self.cmd = cmd\n\n    def setCommand(self, cmd):\n        self.cmd = cmd\n\n    def __str__(self):\n        if self.cmd:\n            return \"%s, while executing %s\" % (self.msg, self.cmd)\n        return self.msg\n\n\nclass BSERv1Unsupported(WatchmanError):\n    pass\n\n\nclass UseAfterFork(WatchmanError):\n    pass\n\n\nclass WatchmanEnvironmentError(WatchmanError):\n    def __init__(self, msg, errno, errmsg, cmd=None):\n        super(WatchmanEnvironmentError, self).__init__(\n            \"{0}: errno={1} errmsg={2}\".format(msg, errno, errmsg), cmd\n        )\n\n\nclass SocketConnectError(WatchmanError):\n    def __init__(self, sockpath, exc):\n        super(SocketConnectError, self).__init__(\n            \"unable to connect to %s: %s\" % (sockpath, exc)\n        )\n        self.sockpath = sockpath\n        self.exc = exc\n\n\nclass SocketTimeout(WatchmanError):\n    \"\"\"A specialized exception raised for socket timeouts during communication to/from watchman.\n    This makes it easier to implement non-blocking loops as callers can easily distinguish\n    between a routine timeout and an actual error condition.\n\n    Note that catching WatchmanError will also catch this as it is a super-class, so backwards\n    compatibility in exception handling is preserved.\n    \"\"\"\n\n\nclass CommandError(WatchmanError):\n    \"\"\"error returned by watchman\n\n    self.msg is the message returned by watchman.\n    \"\"\"\n\n    def __init__(self, msg, cmd=None):\n        super(CommandError, self).__init__(\"watchman command error: %s\" % (msg,), cmd)\n\n\ndef is_named_pipe_path(path: str) -> bool:\n    \"\"\"Returns True if path is a watchman named pipe path\"\"\"\n    return path.startswith(\"\\\\\\\\.\\\\pipe\\\\watchman\")\n\n\nclass SockPath:\n    \"\"\"Describes how to connect to watchman\"\"\"\n\n    unix_domain = None\n    named_pipe = None\n    tcp_address = None\n\n    def __init__(\n        self, unix_domain=None, named_pipe=None, sockpath=None, tcp_address=None\n    ):\n        if named_pipe is None and sockpath is not None and is_named_pipe_path(sockpath):\n            named_pipe = sockpath\n\n        if (\n            unix_domain is None\n            and sockpath is not None\n            and not is_named_pipe_path(sockpath)\n        ):\n            unix_domain = sockpath\n\n        self.unix_domain = unix_domain\n        self.named_pipe = named_pipe\n        self.tcp_address = tcp_address\n\n    def legacy_sockpath(self):\n        \"\"\"Returns a sockpath suitable for passing to the watchman\n        CLI --sockname parameter\"\"\"\n        log(\"legacy_sockpath called: %r\", self)\n        if os.name == \"nt\":\n            return self.named_pipe\n        return self.unix_domain\n\n\nclass Transport:\n    \"\"\"communication transport to the watchman server\"\"\"\n\n    buf = None\n\n    def close(self):\n        \"\"\"tear it down\"\"\"\n        raise NotImplementedError()\n\n    def readBytes(self, size):\n        \"\"\"read size bytes\"\"\"\n        raise NotImplementedError()\n\n    def write(self, buf):\n        \"\"\"write some data\"\"\"\n        raise NotImplementedError()\n\n    def setTimeout(self, value):\n        pass\n\n    def readLine(self):\n        \"\"\"read a line\n        Maintains its own buffer, callers of the transport should not mix\n        calls to readBytes and readLine.\n        \"\"\"\n        if self.buf is None:\n            self.buf = []\n\n        # Buffer may already have a line if we've received unilateral\n        # response(s) from the server\n        if len(self.buf) == 1 and b\"\\n\" in self.buf[0]:\n            (line, b) = self.buf[0].split(b\"\\n\", 1)\n            self.buf = [b]\n            return line\n\n        while True:\n            b = self.readBytes(4096)\n            if b\"\\n\" in b:\n                result = b\"\".join(self.buf)\n                (line, b) = b.split(b\"\\n\", 1)\n                self.buf = [b]\n                return result + line\n            self.buf.append(b)\n\n\nclass Codec:\n    \"\"\"communication encoding for the watchman server\"\"\"\n\n    transport = None\n\n    def __init__(self, transport):\n        self.transport = transport\n\n    def receive(self):\n        raise NotImplementedError()\n\n    def send(self, *args):\n        raise NotImplementedError()\n\n    def setTimeout(self, value):\n        self.transport.setTimeout(value)\n\n\nclass SocketTransport(Transport):\n    \"\"\"abstract socket transport\"\"\"\n\n    sock = None\n    timeout = None\n\n    def __init__(self):\n        pass\n\n    def close(self):\n        if self.sock:\n            self.sock.close()\n            self.sock = None\n\n    def setTimeout(self, value):\n        self.timeout = value\n        self.sock.settimeout(self.timeout)\n\n    def readBytes(self, size):\n        try:\n            buf = [self.sock.recv(size)]\n            if not buf[0]:\n                raise WatchmanError(\"empty watchman response\")\n            return buf[0]\n        except socket.timeout:\n            raise SocketTimeout(\"timed out waiting for response\")\n\n    def write(self, data):\n        try:\n            log(\"write %r\", data)\n            self.sock.sendall(data)\n        except socket.timeout:\n            raise SocketTimeout(\"timed out sending query command\")\n\n\nclass UnixSocketTransport(SocketTransport):\n    \"\"\"local unix domain socket transport\"\"\"\n\n    def __init__(self, sockpath, timeout):\n        super(UnixSocketTransport, self).__init__()\n        self.sockpath = sockpath\n        self.timeout = timeout\n\n        sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)\n        try:\n            sock.settimeout(self.timeout)\n            sock.connect(self.sockpath.unix_domain)\n            self.sock = sock\n        except socket.error as e:\n            sock.close()\n            raise SocketConnectError(self.sockpath.unix_domain, e)\n\n\nclass WindowsUnixSocketTransport(SocketTransport):\n    \"\"\"local unix domain socket transport on Windows\"\"\"\n\n    sock = None\n    timeout = None\n\n    def __init__(self, sockpath, timeout):\n        super(WindowsUnixSocketTransport, self).__init__()\n        self.sockpath = sockpath\n        self.timeout = timeout\n\n        sock = None\n        try:\n            sock = WindowsSocketHandle()\n            sock.settimeout(self.timeout)\n            sock.connect(self.sockpath.unix_domain)\n            self.sock = sock\n        except WindowsSocketException as e:\n            if sock is not None:\n                sock.close()\n            raise SocketConnectError(self.sockpath.unix_domain, e)\n\n\nclass TcpSocketTransport(SocketTransport):\n    \"\"\"TCP socket transport\"\"\"\n\n    def __init__(self, sockpath, timeout):\n        super(TcpSocketTransport, self).__init__()\n        self.sockpath = sockpath\n        self.timeout = timeout\n\n        try:\n            # Note that address resolution does not respect 'timeout'\n            # which applies only to socket traffic.\n            results = socket.getaddrinfo(\n                self.sockpath.tcp_address[0],\n                self.sockpath.tcp_address[1],\n                0,\n                socket.IPPROTO_TCP,\n            )\n            (family, type, proto, canonname, sockaddr) = results[0]\n        except Exception as e:\n            raise SocketConnectError(\n                \"Error resolving address: %r\" % (self.sockpath.tcp_address,), e\n            )\n\n        sock = socket.socket(family, socket.SOCK_STREAM)\n        try:\n            sock.settimeout(self.timeout)\n            sock.connect(sockaddr)\n            self.sock = sock\n        except socket.error as e:\n            sock.close()\n            raise SocketConnectError(str(self.sockpath.tcp_address), e)\n\n\ndef _get_overlapped_result_ex_impl(pipe, olap, nbytes, millis, alertable):\n    \"\"\"Windows 7 and earlier does not support GetOverlappedResultEx. The\n    alternative is to use GetOverlappedResult and wait for read or write\n    operation to complete. This is done be using CreateEvent and\n    WaitForSingleObjectEx. CreateEvent, WaitForSingleObjectEx\n    and GetOverlappedResult are all part of Windows API since WindowsXP.\n    This is the exact same implementation that can be found in the watchman\n    source code (see get_overlapped_result_ex_impl in stream_win.c). This\n    way, maintenance should be simplified.\n    \"\"\"\n    log(\"Preparing to wait for maximum %dms\", millis)\n    if millis != 0:\n        waitReturnCode = WaitForSingleObjectEx(olap.hEvent, millis, alertable)\n        if waitReturnCode == WAIT_OBJECT_0:\n            # Event is signaled, overlapped IO operation result should be available.\n            pass\n        elif waitReturnCode == WAIT_IO_COMPLETION:\n            # WaitForSingleObjectEx returnes because the system added an I/O completion\n            # routine or an asynchronous procedure call (APC) to the thread queue.\n            SetLastError(WAIT_IO_COMPLETION)\n            pass\n        elif waitReturnCode == WAIT_TIMEOUT:\n            # We reached the maximum allowed wait time, the IO operation failed\n            # to complete in timely fashion.\n            SetLastError(WAIT_TIMEOUT)\n            return False\n        elif waitReturnCode == WAIT_FAILED:\n            # something went wrong calling WaitForSingleObjectEx\n            err = GetLastError()\n            log(\"WaitForSingleObjectEx failed: %s\", _win32_strerror(err))\n            return False\n        else:\n            # unexpected situation deserving investigation.\n            err = GetLastError()\n            log(\"Unexpected error: %s\", _win32_strerror(err))\n            return False\n\n    return GetOverlappedResult(pipe, olap, nbytes, False)\n\n\nclass WindowsNamedPipeTransport(Transport):\n    \"\"\"connect to a named pipe\"\"\"\n\n    def __init__(self, sockpath, timeout):\n        self.sockpath = sockpath\n        self.timeout = int(math.ceil(timeout * 1000))\n        self._iobuf = None\n\n        path = os.fsencode(self.sockpath.named_pipe)\n\n        log(\"CreateFile %r\", path)\n\n        self.pipe = CreateFile(\n            path,\n            GENERIC_READ | GENERIC_WRITE,\n            0,\n            None,\n            OPEN_EXISTING,\n            FILE_FLAG_OVERLAPPED,\n            None,\n        )\n\n        err = GetLastError()\n        if self.pipe == INVALID_HANDLE_VALUE or self.pipe == 0:\n            self.pipe = None\n            raise SocketConnectError(\n                self.sockpath.named_pipe, self._make_win_err(\"\", err)\n            )\n\n        # event for the overlapped I/O operations\n        self._waitable = CreateEvent(None, True, False, None)\n        err = GetLastError()\n        if self._waitable is None:\n            self._raise_win_err(\"CreateEvent failed\", err)\n\n        self._get_overlapped_result_ex = GetOverlappedResultEx\n        if (\n            os.getenv(\"WATCHMAN_WIN7_COMPAT\") == \"1\"\n            or self._get_overlapped_result_ex is None\n        ):\n            self._get_overlapped_result_ex = _get_overlapped_result_ex_impl\n\n    def _raise_win_err(self, msg, err):\n        raise self._make_win_err(msg, err)\n\n    def _make_win_err(self, msg, err):\n        return IOError(\"%s win32 error code: %d %s\" % (msg, err, _win32_strerror(err)))\n\n    def close(self):\n        if self.pipe:\n            log(\"Closing pipe\")\n            CloseHandle(self.pipe)\n        self.pipe = None\n\n        if self._waitable is not None:\n            # We release the handle for the event\n            CloseHandle(self._waitable)\n        self._waitable = None\n\n    def setTimeout(self, value):\n        # convert to milliseconds\n        self.timeout = int(value * 1000)\n\n    def readBytes(self, size):\n        \"\"\"A read can block for an unbounded amount of time, even if the\n        kernel reports that the pipe handle is signalled, so we need to\n        always perform our reads asynchronously\n        \"\"\"\n\n        # try to satisfy the read from any buffered data\n        if self._iobuf:\n            if size >= len(self._iobuf):\n                res = self._iobuf\n                self.buf = None\n                return res\n            res = self._iobuf[:size]\n            self._iobuf = self._iobuf[size:]\n            return res\n\n        # We need to initiate a read\n        buf = ctypes.create_string_buffer(size)\n        olap = OVERLAPPED()\n        olap.hEvent = self._waitable\n\n        log(\"made read buff of size %d\", size)\n\n        # ReadFile docs warn against sending in the nread parameter for async\n        # operations, so we always collect it via GetOverlappedResultEx\n        immediate = ReadFile(self.pipe, buf, size, None, olap)\n\n        if not immediate:\n            err = GetLastError()\n            if err != ERROR_IO_PENDING:\n                self._raise_win_err(\"failed to read %d bytes\" % size, err)\n\n        nread = wintypes.DWORD()\n        if not self._get_overlapped_result_ex(\n            self.pipe, olap, nread, 0 if immediate else self.timeout, True\n        ):\n            err = GetLastError()\n            CancelIoEx(self.pipe, olap)\n\n            if err == WAIT_TIMEOUT:\n                log(\"GetOverlappedResultEx timedout\")\n                raise SocketTimeout(\n                    \"timed out after waiting %dms for read\" % self.timeout\n                )\n\n            log(\"GetOverlappedResultEx reports error %d\", err)\n            self._raise_win_err(\"error while waiting for read\", err)\n\n        nread = nread.value\n        if nread == 0:\n            # Docs say that named pipes return 0 byte when the other end did\n            # a zero byte write.  Since we don't ever do that, the only\n            # other way this shows up is if the client has gotten in a weird\n            # state, so let's bail out\n            CancelIoEx(self.pipe, olap)\n            raise IOError(\"Async read yielded 0 bytes; unpossible!\")\n\n        # Holds precisely the bytes that we read from the prior request\n        buf = buf[:nread]\n\n        returned_size = min(nread, size)\n        if returned_size == nread:\n            return buf\n\n        # keep any left-overs around for a later read to consume\n        self._iobuf = buf[returned_size:]\n        return buf[:returned_size]\n\n    def write(self, data):\n        olap = OVERLAPPED()\n        olap.hEvent = self._waitable\n\n        immediate = WriteFile(self.pipe, ctypes.c_char_p(data), len(data), None, olap)\n\n        if not immediate:\n            err = GetLastError()\n            if err != ERROR_IO_PENDING:\n                self._raise_win_err(\n                    \"failed to write %d bytes to handle %r\" % (len(data), self.pipe),\n                    err,\n                )\n\n        # Obtain results, waiting if needed\n        nwrote = wintypes.DWORD()\n        if self._get_overlapped_result_ex(\n            self.pipe, olap, nwrote, 0 if immediate else self.timeout, True\n        ):\n            log(\"made write of %d bytes\", nwrote.value)\n            return nwrote.value\n\n        err = GetLastError()\n\n        # It's potentially unsafe to allow the write to continue after\n        # we unwind, so let's make a best effort to avoid that happening\n        CancelIoEx(self.pipe, olap)\n\n        if err == WAIT_TIMEOUT:\n            raise SocketTimeout(\"timed out after waiting %dms for write\" % self.timeout)\n        self._raise_win_err(\n            \"error while waiting for write of %d bytes\" % len(data), err\n        )\n\n\ndef _default_binpath(binpath=None) -> str:\n    if binpath:\n        return binpath\n    # The test harness sets WATCHMAN_BINARY to the binary under test,\n    # so we use that by default, otherwise, allow resolving watchman\n    # from the users PATH.\n    return os.environ.get(\"WATCHMAN_BINARY\", \"watchman\")\n\n\nclass CLIProcessTransport(Transport):\n    \"\"\"open a pipe to the cli to talk to the service\n    This intended to be used only in the test harness!\n\n    The CLI is an oddball because we only support JSON input\n    and cannot send multiple commands through the same instance,\n    so we spawn a new process for each command.\n\n    We disable server spawning for this implementation, again, because\n    it is intended to be used only in our test harness.  You really\n    should not need to use the CLI transport for anything real.\n\n    While the CLI can output in BSER, our Transport interface doesn't\n    support telling this instance that it should do so.  That effectively\n    limits this implementation to JSON input and output only at this time.\n\n    It is the responsibility of the caller to set the send and\n    receive codecs appropriately.\n    \"\"\"\n\n    proc = None\n    closed = True\n\n    def __init__(self, sockpath, timeout, binpath=None):\n        self.sockpath = sockpath\n        self.timeout = timeout\n        self.binpath = _default_binpath(binpath)\n\n    def close(self):\n        if self.proc:\n            if self.proc.pid is not None:\n                self.proc.kill()\n            self.proc.stdin.close()\n            self.proc.stdout.close()\n            self.proc.wait()\n            self.proc = None\n\n    def _connect(self):\n        if self.proc:\n            return self.proc\n        args = [\n            self.binpath,\n            \"--unix-listener-path={0}\".format(self.sockpath.unix_domain),\n            \"--named-pipe-path={0}\".format(self.sockpath.named_pipe),\n            \"--logfile=/BOGUS\",\n            \"--statefile=/BOGUS\",\n            \"--no-spawn\",\n            \"--no-local\",\n            \"--no-pretty\",\n            \"-j\",\n        ]\n        log(\"starting with %r\", args)\n        self.proc = subprocess.Popen(\n            args, stdin=subprocess.PIPE, stdout=subprocess.PIPE\n        )\n        return self.proc\n\n    def readBytes(self, size):\n        self._connect()\n        res = self.proc.stdout.read(size)\n        log(\"CLI read %r\", repr(res))\n        if not res:\n            raise WatchmanError(\"EOF on CLI process transport\")\n        return res\n\n    def write(self, data):\n        if self.closed:\n            self.close()\n            self.closed = False\n        self._connect()\n        log(\"CLI write %r\", data)\n        res = self.proc.stdin.write(data)\n        self.proc.stdin.close()\n        self.closed = True\n        return res\n\n\nclass BserCodec(Codec):\n    \"\"\"use the BSER encoding.  This is the default, preferred codec\"\"\"\n\n    def __init__(self, transport, value_encoding, value_errors):\n        super(BserCodec, self).__init__(transport)\n        self._value_encoding = value_encoding\n        self._value_errors = value_errors\n\n    def _loads(self, response):\n        return bser.loads(\n            response,\n            value_encoding=self._value_encoding,\n            value_errors=self._value_errors,\n        )\n\n    def receive(self):\n        buf = [self.transport.readBytes(sniff_len)]\n        if not buf[0]:\n            raise WatchmanError(\"empty watchman response\")\n\n        _1, _2, elen = bser.pdu_info(buf[0])\n\n        rlen = len(buf[0])\n        while elen > rlen:\n            buf.append(self.transport.readBytes(elen - rlen))\n            rlen += len(buf[-1])\n\n        response = b\"\".join(buf)\n        try:\n            res = self._loads(response)\n            return res\n        except ValueError as e:\n            raise WatchmanError(\"watchman response decode error: %s\" % e)\n\n    def send(self, *args):\n        cmd = bser.dumps(*args)  # Defaults to BSER v1\n        self.transport.write(cmd)\n\n\nclass ImmutableBserCodec(BserCodec):\n    \"\"\"use the BSER encoding, decoding values using the newer\n    immutable object support\"\"\"\n\n    def _loads(self, response):\n        return bser.loads(\n            response,\n            False,\n            value_encoding=self._value_encoding,\n            value_errors=self._value_errors,\n        )\n\n\nclass Bser2WithFallbackCodec(BserCodec):\n    \"\"\"use BSER v2 encoding\"\"\"\n\n    def __init__(self, transport, value_encoding, value_errors):\n        super(Bser2WithFallbackCodec, self).__init__(\n            transport, value_encoding, value_errors\n        )\n        bserv2_key = \"required\"\n\n        self.send([\"version\", {bserv2_key: [\"bser-v2\"]}])\n\n        capabilities = self.receive()\n\n        if \"error\" in capabilities:\n            raise BSERv1Unsupported(\n                \"The watchman server version does not support Python 3. Please \"\n                \"upgrade your watchman server.\"\n            )\n\n        if capabilities[\"capabilities\"][\"bser-v2\"]:\n            self.bser_version = 2\n            self.bser_capabilities = 0\n        else:\n            self.bser_version = 1\n            self.bser_capabilities = 0\n\n    def receive(self):\n        buf = [self.transport.readBytes(sniff_len)]\n        if not buf[0]:\n            raise WatchmanError(\"empty watchman response\")\n\n        recv_bser_version, recv_bser_capabilities, elen = bser.pdu_info(buf[0])\n\n        if hasattr(self, \"bser_version\"):\n            # Readjust BSER version and capabilities if necessary\n            self.bser_version = max(self.bser_version, recv_bser_version)\n            self.capabilities = self.bser_capabilities & recv_bser_capabilities\n\n        rlen = len(buf[0])\n        while elen > rlen:\n            buf.append(self.transport.readBytes(elen - rlen))\n            rlen += len(buf[-1])\n\n        response = b\"\".join(buf)\n        try:\n            res = self._loads(response)\n            return res\n        except ValueError as e:\n            raise WatchmanError(\"watchman response decode error: %s\" % e)\n\n    def send(self, *args):\n        if hasattr(self, \"bser_version\"):\n            cmd = bser.dumps(\n                *args, version=self.bser_version, capabilities=self.bser_capabilities\n            )\n        else:\n            cmd = bser.dumps(*args)\n        self.transport.write(cmd)\n\n\nclass ImmutableBser2Codec(Bser2WithFallbackCodec, ImmutableBserCodec):\n    \"\"\"use the BSER encoding, decoding values using the newer\n    immutable object support\"\"\"\n\n    pass\n\n\nclass JsonCodec(Codec):\n    \"\"\"Use json codec.  This is here primarily for testing purposes\"\"\"\n\n    json = None\n\n    def __init__(self, transport):\n        super(JsonCodec, self).__init__(transport)\n        # optional dep on json, only if JsonCodec is used\n        import json\n\n        self.json = json\n\n    def receive(self):\n        line = self.transport.readLine()\n        try:\n            # In Python 3, json.loads is a transformation from Unicode string to\n            # objects possibly containing Unicode strings. We typically expect\n            # the JSON blob to be ASCII-only with non-ASCII characters escaped,\n            # but it's possible we might get non-ASCII bytes that are valid\n            # UTF-8.\n            line = line.decode(\"utf-8\")\n            return self.json.loads(line)\n        except Exception as e:\n            print(e, line)\n            raise\n\n    def send(self, *args):\n        cmd = self.json.dumps(*args)\n        # In Python 3, json.dumps is a transformation from objects possibly\n        # containing Unicode strings to Unicode string. Even with (the default)\n        # ensure_ascii=True, dumps returns a Unicode string.\n        cmd = cmd.encode(\"ascii\")\n        self.transport.write(cmd + b\"\\n\")\n\n\nclass client:\n    \"\"\"Handles the communication with the watchman service\"\"\"\n\n    sockpath = None\n    transport = None\n    sendCodec = None\n    recvCodec = None\n    sendConn = None\n    recvConn = None\n    subs = {}  # Keyed by subscription name\n    sub_by_root = {}  # Keyed by root, then by subscription name\n    logs = []  # When log level is raised\n    unilateral = [\"log\", \"subscription\"]\n    tport = None\n    useImmutableBser = None\n    pid = None\n\n    def __init__(\n        self,\n        sockpath=None,\n        tcpAddress=None,\n        timeout=1.0,\n        transport=None,\n        sendEncoding=None,\n        recvEncoding=None,\n        useImmutableBser=False,\n        # use False for these two because None has a special\n        # meaning\n        valueEncoding=False,\n        valueErrors=False,\n        binpath=None,\n    ):\n        if sockpath is not None and not isinstance(sockpath, SockPath):\n            sockpath = SockPath(sockpath=sockpath, tcp_address=tcpAddress)\n        self.sockpath = sockpath\n        self.timeout = timeout\n        self.useImmutableBser = useImmutableBser\n        self.binpath = _default_binpath(binpath)\n\n        if inspect.isclass(transport) and issubclass(transport, Transport):\n            self.transport = transport\n        else:\n            log(\n                \"figure out transport. param=%r, env=%r\",\n                transport,\n                os.getenv(\"WATCHMAN_TRANSPORT\"),\n            )\n            transport = transport or os.getenv(\"WATCHMAN_TRANSPORT\") or \"local\"\n            if self.transport == \"tcp\" and tcpAddress is None:\n                raise WatchmanError(\n                    \"Constructor requires argument tcpAddress when 'tcp' \"\n                    \"transport protocol is used\"\n                )\n            if (transport == \"namedpipe\") or (transport == \"local\" and os.name == \"nt\"):\n                self.transport = WindowsNamedPipeTransport\n            elif transport == \"unix\" and os.name == \"nt\":\n                self.transport = WindowsUnixSocketTransport\n            elif transport == \"local\" or transport == \"unix\":\n                self.transport = UnixSocketTransport\n            elif transport == \"cli\":\n                self.transport = CLIProcessTransport\n                if sendEncoding is None:\n                    sendEncoding = \"json\"\n                if recvEncoding is None:\n                    recvEncoding = sendEncoding\n            elif transport == \"tcp\":\n                self.transport = TcpSocketTransport\n            else:\n                raise WatchmanError(\"invalid transport %s\" % transport)\n\n        sendEncoding = str(sendEncoding or os.getenv(\"WATCHMAN_ENCODING\") or \"bser\")\n        recvEncoding = str(recvEncoding or os.getenv(\"WATCHMAN_ENCODING\") or \"bser\")\n\n        self.recvCodec = self._parseEncoding(recvEncoding)\n        self.sendCodec = self._parseEncoding(sendEncoding)\n\n        # We want to act like the native OS methods as much as possible. This\n        # means returning bytestrings on Python 2 by default and Unicode\n        # strings on Python 3. However we take an optional argument that lets\n        # users override this.\n        if valueEncoding is False:\n            self.valueEncoding = encoding.get_local_encoding()\n            self.valueErrors = encoding.default_local_errors\n        else:\n            self.valueEncoding = valueEncoding\n            if valueErrors is False:\n                self.valueErrors = encoding.default_local_errors\n            else:\n                self.valueErrors = valueErrors\n\n    def _makeBSERCodec(self, codec):\n        def make_codec(transport):\n            return codec(transport, self.valueEncoding, self.valueErrors)\n\n        return make_codec\n\n    def _parseEncoding(self, enc):\n        if enc == \"bser\":\n            if self.useImmutableBser:\n                return self._makeBSERCodec(ImmutableBser2Codec)\n            return self._makeBSERCodec(Bser2WithFallbackCodec)\n        elif enc == \"bser-v1\":\n            raise BSERv1Unsupported(\n                \"Python 3 does not support the BSER v1 encoding: specify \"\n                '\"bser\" or omit the sendEncoding and recvEncoding '\n                \"arguments\"\n            )\n        elif enc == \"json\":\n            return JsonCodec\n        else:\n            raise WatchmanError(\"invalid encoding %s\" % enc)\n\n    def _hasprop(self, result, name):\n        if self.useImmutableBser:\n            return hasattr(result, name)\n        return name in result\n\n    def _resolvesockname(self):\n        # if invoked via a trigger, watchman will set this env var; we\n        # should use it unless explicitly set otherwise\n        path = os.getenv(\"WATCHMAN_SOCK\")\n        if path:\n            return SockPath(sockpath=path)\n\n        cmd = [self.binpath, \"--output-encoding=bser\", \"get-sockname\"]\n        try:\n            args = dict(stdout=subprocess.PIPE, stderr=subprocess.PIPE)  # noqa: C408\n\n            if os.name == \"nt\":\n                # if invoked via an application with graphical user interface,\n                # this call will cause a brief command window pop-up.\n                # Using the flag STARTF_USESHOWWINDOW to avoid this behavior.\n                startupinfo = subprocess.STARTUPINFO()\n                startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW\n                args[\"startupinfo\"] = startupinfo\n\n            p = subprocess.Popen(cmd, **args)\n\n        except OSError as e:\n            raise WatchmanError('\"watchman\" executable not in PATH (%s)', e)\n\n        stdout, stderr = p.communicate()\n        exitcode = p.poll()\n\n        if exitcode:\n            raise WatchmanError(\"watchman exited with code %d\" % exitcode)\n\n        result = bser.loads(stdout)\n        if \"error\" in result:\n            raise WatchmanError(\"get-sockname error: %s\" % result[\"error\"])\n\n        def get_path_result(name):\n            value = result.get(name, None)\n            if value is None:\n                return None\n            return value.decode(sys.getfilesystemencoding(), errors=\"surrogateescape\")\n\n        # sockname is always present\n        sockpath = get_path_result(\"sockname\")\n        assert sockpath is not None\n\n        return SockPath(\n            # unix_domain and named_pipe are reported by newer versions\n            # of the server and may not be present\n            unix_domain=get_path_result(\"unix_domain\"),\n            named_pipe=get_path_result(\"named_pipe\"),\n            # sockname is always present\n            sockpath=sockpath,\n        )\n\n    def _connect(self):\n        \"\"\"establish transport connection\"\"\"\n\n        if self.recvConn:\n            if self.pid != os.getpid():\n                raise UseAfterFork(\n                    \"do not re-use a connection after fork; open a new client instead\"\n                )\n            return\n\n        if self.sockpath is None:\n            self.sockpath = self._resolvesockname()\n\n        kwargs = {}\n        if self.transport == CLIProcessTransport:\n            kwargs[\"binpath\"] = self.binpath\n\n        self.tport = self.transport(self.sockpath, self.timeout, **kwargs)\n        self.sendConn = self.sendCodec(self.tport)\n        self.recvConn = self.recvCodec(self.tport)\n        self.pid = os.getpid()\n\n    def __del__(self):\n        self.close()\n\n    def __enter__(self):\n        self._connect()\n        return self\n\n    def __exit__(self, exc_type, exc_value, exc_traceback):\n        self.close()\n\n    def close(self):\n        if self.tport:\n            self.tport.close()\n            self.tport = None\n            self.recvConn = None\n            self.sendConn = None\n\n    def receive(self):\n        \"\"\"receive the next PDU from the watchman service\n\n        If the client has activated subscriptions or logs then\n        this PDU may be a unilateral PDU sent by the service to\n        inform the client of a log event or subscription change.\n\n        It may also simply be the response portion of a request\n        initiated by query.\n\n        There are clients in production that subscribe and call\n        this in a loop to retrieve all subscription responses,\n        so care should be taken when making changes here.\n        \"\"\"\n\n        self._connect()\n        result = self.recvConn.receive()\n        if self._hasprop(result, \"error\"):\n            raise CommandError(result[\"error\"])\n\n        if self._hasprop(result, \"log\"):\n            self.logs.append(result[\"log\"])\n\n        if self._hasprop(result, \"subscription\"):\n            sub = result[\"subscription\"]\n            if not (sub in self.subs):\n                self.subs[sub] = []\n            self.subs[sub].append(result)\n\n            # also accumulate in {root,sub} keyed store\n            root = os.path.normpath(os.path.normcase(result[\"root\"]))\n            if not root in self.sub_by_root:\n                self.sub_by_root[root] = {}\n            if not sub in self.sub_by_root[root]:\n                self.sub_by_root[root][sub] = []\n            self.sub_by_root[root][sub].append(result)\n\n        return result\n\n    def isUnilateralResponse(self, res):\n        if \"unilateral\" in res and res[\"unilateral\"]:\n            return True\n        # Fall back to checking for known unilateral responses\n        for k in self.unilateral:\n            if k in res:\n                return True\n        return False\n\n    def getLog(self, remove=True):\n        \"\"\"Retrieve buffered log data\n\n        If remove is true the data will be removed from the buffer.\n        Otherwise it will be left in the buffer\n        \"\"\"\n        res = self.logs\n        if remove:\n            self.logs = []\n        return res\n\n    def getSubscription(self, name, remove=True, root=None):\n        \"\"\"Retrieve the data associated with a named subscription\n\n        If remove is True (the default), the subscription data is removed\n        from the buffer.  Otherwise the data is returned but left in\n        the buffer.\n\n        Returns None if there is no data associated with `name`\n\n        If root is not None, then only return the subscription\n        data that matches both root and name.  When used in this way,\n        remove processing impacts both the unscoped and scoped stores\n        for the subscription data.\n        \"\"\"\n        if root is not None:\n            root = os.path.normpath(os.path.normcase(root))\n            if root not in self.sub_by_root:\n                return None\n            if name not in self.sub_by_root[root]:\n                return None\n            sub = self.sub_by_root[root][name]\n            if remove:\n                del self.sub_by_root[root][name]\n                # don't let this grow unbounded\n                if name in self.subs:\n                    del self.subs[name]\n            return sub\n\n        if name not in self.subs:\n            return None\n        sub = self.subs[name]\n        if remove:\n            del self.subs[name]\n        return sub\n\n    def query(self, *args):\n        \"\"\"Send a query to the watchman service and return the response\n\n        This call will block until the response is returned.\n        If any unilateral responses are sent by the service in between\n        the request-response they will be buffered up in the client object\n        and NOT returned via this method.\n        \"\"\"\n\n        log(\"calling client.query\")\n        self._connect()\n        try:\n            self.sendConn.send(args)\n\n            res = self.receive()\n            while self.isUnilateralResponse(res):\n                res = self.receive()\n\n            return res\n        except EnvironmentError as ee:\n            # When we can depend on Python 3, we can use PEP 3134\n            # exception chaining here.\n            raise WatchmanEnvironmentError(\n                \"I/O error communicating with watchman daemon\",\n                ee.errno,\n                ee.strerror,\n                args,\n            )\n        except WatchmanError as ex:\n            ex.setCommand(args)\n            raise\n\n    def capabilityCheck(self, optional=None, required=None):\n        \"\"\"Perform a server capability check\"\"\"\n        opts = {\"optional\": optional or [], \"required\": required or []}\n        res = self.query(\"version\", opts)\n\n        if not self._hasprop(res, \"capabilities\"):\n            # Server doesn't support capabilities, so we need to\n            # synthesize the results based on the version\n            capabilities.synthesize(res, opts)\n            if \"error\" in res:\n                raise CommandError(res[\"error\"])\n\n        return res\n\n    def listCapabilities(self):\n        return self.query(\"list-capabilities\", {})[\"capabilities\"]\n\n    def setTimeout(self, value):\n        self.recvConn.setTimeout(value)\n        self.sendConn.setTimeout(value)\n"
  },
  {
    "path": "watchman/python/pywatchman/bser.c",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"bser.h\"\n\nstatic Py_ssize_t bserobj_tuple_length(PyObject* o) {\n  bserObject* obj = (bserObject*)o;\n\n  return PySequence_Length(obj->keys);\n}\n\nstatic PyObject* bserobj_tuple_item(PyObject* o, Py_ssize_t i) {\n  bserObject* obj = (bserObject*)o;\n\n  return PySequence_GetItem(obj->values, i);\n}\n\n// clang-format off\nstatic PySequenceMethods bserobj_sq = {\n  bserobj_tuple_length,      /* sq_length */\n  0,                         /* sq_concat */\n  0,                         /* sq_repeat */\n  bserobj_tuple_item,        /* sq_item */\n  0,                         /* sq_ass_item */\n  0,                         /* sq_contains */\n  0,                         /* sq_inplace_concat */\n  0                          /* sq_inplace_repeat */\n};\n// clang-format on\n\nstatic void bserobj_dealloc(PyObject* o) {\n  bserObject* obj = (bserObject*)o;\n\n  Py_CLEAR(obj->keys);\n  Py_CLEAR(obj->values);\n  PyObject_Del(o);\n}\n\nstatic PyObject* bserobj_getattrro(PyObject* o, PyObject* name) {\n  bserObject* obj = (bserObject*)o;\n  Py_ssize_t i, n;\n  PyObject* name_bytes = NULL;\n  PyObject* key_bytes = NULL;\n  PyObject* ret = NULL;\n  const char* namestr;\n  const char* keystr;\n\n  if (PyIndex_Check(name)) {\n    i = PyNumber_AsSsize_t(name, PyExc_IndexError);\n    if (i == -1 && PyErr_Occurred()) {\n      goto bail;\n    }\n    ret = PySequence_GetItem(obj->values, i);\n    goto bail;\n  }\n\n  // We can be passed in Unicode objects here -- we don't support anything other\n  // than UTF-8 for keys.\n  if (PyUnicode_Check(name)) {\n    name_bytes = PyUnicode_AsUTF8String(name);\n    if (name_bytes == NULL) {\n      goto bail;\n    }\n    namestr = PyBytes_AsString(name_bytes);\n  } else {\n    namestr = PyBytes_AsString(name);\n  }\n\n  if (namestr == NULL) {\n    goto bail;\n  }\n  // hack^Wfeature to allow mercurial to use \"st_size\" to reference \"size\"\n  if (!strncmp(namestr, \"st_\", 3)) {\n    namestr += 3;\n  }\n\n  n = PyTuple_GET_SIZE(obj->keys);\n  for (i = 0; i < n; i++) {\n    PyObject* key = PyTuple_GET_ITEM(obj->keys, i);\n\n    if (PyUnicode_Check(key)) {\n      key_bytes = PyUnicode_AsUTF8String(key);\n      if (key_bytes == NULL) {\n        goto bail;\n      }\n      keystr = PyBytes_AsString(key_bytes);\n    } else {\n      keystr = PyBytes_AsString(key);\n    }\n\n    if (keystr == NULL) {\n      goto bail;\n    }\n\n    if (!strcmp(keystr, namestr)) {\n      ret = PySequence_GetItem(obj->values, i);\n      goto bail;\n    }\n    Py_XDECREF(key_bytes);\n    key_bytes = NULL;\n  }\n\n  PyErr_Format(\n      PyExc_AttributeError, \"bserobject has no attribute '%.400s'\", namestr);\nbail:\n  Py_XDECREF(name_bytes);\n  Py_XDECREF(key_bytes);\n  return ret;\n}\n\n// clang-format off\nstatic PyMappingMethods bserobj_map = {\n  bserobj_tuple_length,     /* mp_length */\n  bserobj_getattrro,        /* mp_subscript */\n  0                         /* mp_ass_subscript */\n};\n\nPyTypeObject bserObjectType = {\n  PyVarObject_HEAD_INIT(NULL, 0)\n  \"bserobj_tuple\",           /* tp_name */\n  sizeof(bserObject),        /* tp_basicsize */\n  0,                         /* tp_itemsize */\n  bserobj_dealloc,           /* tp_dealloc */\n  0,                         /* tp_print */\n  0,                         /* tp_getattr */\n  0,                         /* tp_setattr */\n  0,                         /* tp_compare */\n  0,                         /* tp_repr */\n  0,                         /* tp_as_number */\n  &bserobj_sq,               /* tp_as_sequence */\n  &bserobj_map,              /* tp_as_mapping */\n  0,                         /* tp_hash  */\n  0,                         /* tp_call */\n  0,                         /* tp_str */\n  bserobj_getattrro,         /* tp_getattro */\n  0,                         /* tp_setattro */\n  0,                         /* tp_as_buffer */\n  Py_TPFLAGS_DEFAULT,        /* tp_flags */\n  \"bserobj tuple\",           /* tp_doc */\n  0,                         /* tp_traverse */\n  0,                         /* tp_clear */\n  0,                         /* tp_richcompare */\n  0,                         /* tp_weaklistoffset */\n  0,                         /* tp_iter */\n  0,                         /* tp_iternext */\n  0,                         /* tp_methods */\n  0,                         /* tp_members */\n  0,                         /* tp_getset */\n  0,                         /* tp_base */\n  0,                         /* tp_dict */\n  0,                         /* tp_descr_get */\n  0,                         /* tp_descr_set */\n  0,                         /* tp_dictoffset */\n  0,                         /* tp_init */\n  0,                         /* tp_alloc */\n  0,                         /* tp_new */\n};\n// clang-format on\n\nint bunser_int(const char** ptr, const char* end, int64_t* val) {\n  int needed;\n  const char* buf = *ptr;\n  int8_t i8;\n  int16_t i16;\n  int32_t i32;\n  int64_t i64;\n\n  if (buf >= end) {\n    PyErr_SetString(PyExc_ValueError, \"input buffer to small for int encoding\");\n    return 0;\n  }\n\n  switch (buf[0]) {\n    case BSER_INT8:\n      needed = 2;\n      break;\n    case BSER_INT16:\n      needed = 3;\n      break;\n    case BSER_INT32:\n      needed = 5;\n      break;\n    case BSER_INT64:\n      needed = 9;\n      break;\n    default:\n      PyErr_Format(\n          PyExc_ValueError, \"invalid bser int encoding 0x%02x\", buf[0]);\n      return 0;\n  }\n  if (end - buf < needed) {\n    PyErr_SetString(PyExc_ValueError, \"input buffer to small for int encoding\");\n    return 0;\n  }\n  *ptr = buf + needed;\n  switch (buf[0]) {\n    case BSER_INT8:\n      memcpy(&i8, buf + 1, sizeof(i8));\n      *val = i8;\n      return 1;\n    case BSER_INT16:\n      memcpy(&i16, buf + 1, sizeof(i16));\n      *val = i16;\n      return 1;\n    case BSER_INT32:\n      memcpy(&i32, buf + 1, sizeof(i32));\n      *val = i32;\n      return 1;\n    case BSER_INT64:\n      memcpy(&i64, buf + 1, sizeof(i64));\n      *val = i64;\n      return 1;\n    default:\n      return 0;\n  }\n}\n\nstatic int bunser_bytestring(\n    const char** ptr,\n    const char* end,\n    const char** start,\n    int64_t* len) {\n  const char* buf = *ptr;\n\n  // skip string marker\n  buf++;\n  if (!bunser_int(&buf, end, len)) {\n    return 0;\n  }\n\n  if (buf + *len > end) {\n    PyErr_Format(PyExc_ValueError, \"invalid string length in bser data\");\n    return 0;\n  }\n\n  *ptr = buf + *len;\n  *start = buf;\n  return 1;\n}\n\nstatic PyObject*\nbunser_array(const char** ptr, const char* end, const unser_ctx_t* ctx) {\n  const char* buf = *ptr;\n  int64_t nitems, i;\n  int mutable = ctx->is_mutable;\n  PyObject* res;\n\n  assert(buf < end);\n\n  // skip array header\n  buf++;\n  if (!bunser_int(&buf, end, &nitems)) {\n    return 0;\n  }\n  *ptr = buf;\n\n  if (nitems > UINT32_MAX) {\n    PyErr_Format(PyExc_ValueError, \"too many items for python array\");\n    return NULL;\n  }\n\n  if (nitems > end - buf) {\n    // BSER guarantees each value will consume at least one byte of the input.\n    PyErr_Format(PyExc_ValueError, \"document too short for array's size\");\n    return NULL;\n  }\n\n  if (mutable) {\n    res = PyList_New((Py_ssize_t)nitems);\n  } else {\n    res = PyTuple_New((Py_ssize_t)nitems);\n  }\n\n  if (!res) {\n    return NULL;\n  }\n\n  for (i = 0; i < nitems; i++) {\n    PyObject* ele = bser_loads_recursive(ptr, end, ctx);\n\n    if (!ele) {\n      Py_DECREF(res);\n      return NULL;\n    }\n\n    if (mutable) {\n      PyList_SET_ITEM(res, i, ele);\n    } else {\n      PyTuple_SET_ITEM(res, i, ele);\n    }\n    // DECREF(ele) not required as SET_ITEM steals the ref\n  }\n\n  return res;\n}\n\nstatic PyObject*\nbunser_object(const char** ptr, const char* end, const unser_ctx_t* ctx) {\n  const char* buf = *ptr;\n  int64_t nitems, i;\n  int mutable = ctx->is_mutable;\n  PyObject* res;\n  bserObject* obj;\n\n  // skip array header\n  buf++;\n  if (!bunser_int(&buf, end, &nitems)) {\n    return 0;\n  }\n  *ptr = buf;\n\n  if (nitems > UINT32_MAX) {\n    PyErr_Format(PyExc_ValueError, \"object too big\");\n    return NULL;\n  }\n\n  if (2 * nitems > end - buf) {\n    // Each key-value pair in the input will be at least two bytes long. This\n    // check ensures we only pre-allocate an amount of memory for the key and\n    // value tuples proportional to the length of the input.\n    PyErr_Format(PyExc_ValueError, \"document too short for object's size\");\n    return NULL;\n  }\n\n  if (mutable) {\n    res = PyDict_New();\n  } else {\n    obj = PyObject_New(bserObject, &bserObjectType);\n    obj->keys = PyTuple_New((Py_ssize_t)nitems);\n    obj->values = PyTuple_New((Py_ssize_t)nitems);\n    res = (PyObject*)obj;\n  }\n\n  for (i = 0; i < nitems; i++) {\n    const char* keystr;\n    int64_t keylen;\n    PyObject* key;\n    PyObject* ele;\n\n    if (!bunser_bytestring(ptr, end, &keystr, &keylen)) {\n      Py_DECREF(res);\n      return NULL;\n    }\n\n    if (keylen > LONG_MAX) {\n      PyErr_Format(PyExc_ValueError, \"string too big for python\");\n      Py_DECREF(res);\n      return NULL;\n    }\n\n    if (mutable) {\n      // This will interpret the key as UTF-8.\n      key = PyUnicode_FromStringAndSize(keystr, (Py_ssize_t)keylen);\n    } else {\n      // For immutable objects we'll manage key lookups, so we can avoid going\n      // through the Unicode APIs. This avoids a potentially expensive and\n      // definitely unnecessary conversion to UTF-16 and back for Python 2.\n      // TODO: On Python 3 the Unicode APIs are smarter: we might be able to use\n      // Unicode keys there without an appreciable performance loss.\n      key = PyBytes_FromStringAndSize(keystr, (Py_ssize_t)keylen);\n    }\n\n    if (!key) {\n      Py_DECREF(res);\n      return NULL;\n    }\n\n    ele = bser_loads_recursive(ptr, end, ctx);\n\n    if (!ele) {\n      Py_DECREF(key);\n      Py_DECREF(res);\n      return NULL;\n    }\n\n    if (mutable) {\n      PyDict_SetItem(res, key, ele);\n      Py_DECREF(key);\n      Py_DECREF(ele);\n    } else {\n      /* PyTuple_SET_ITEM steals ele, key */\n      PyTuple_SET_ITEM(obj->values, i, ele);\n      PyTuple_SET_ITEM(obj->keys, i, key);\n    }\n  }\n\n  return res;\n}\n\nstatic PyObject*\nbunser_template(const char** ptr, const char* end, const unser_ctx_t* ctx) {\n  const char* buf = *ptr;\n  int64_t nitems, i;\n  int mutable = ctx->is_mutable;\n  PyObject* arrval;\n  PyObject* keys;\n  Py_ssize_t numkeys, keyidx;\n  unser_ctx_t keys_ctx = {0};\n  if (mutable) {\n    keys_ctx.is_mutable = 1;\n    // Decode keys as UTF-8 in this case.\n    keys_ctx.value_encoding = \"utf-8\";\n    keys_ctx.value_errors = \"strict\";\n  } else {\n    // Treat keys as bytestrings in this case -- we'll do Unicode conversions at\n    // lookup time.\n  }\n\n  if (buf + 1 >= end) {\n    PyErr_SetString(\n        PyExc_ValueError, \"input buffer to small for template encoding\");\n    return 0;\n  }\n\n  if (buf[1] != BSER_ARRAY) {\n    PyErr_Format(PyExc_ValueError, \"Expect ARRAY to follow TEMPLATE\");\n    return NULL;\n  }\n\n  // skip header\n  buf++;\n  *ptr = buf;\n\n  // Load template keys.\n  // For keys we don't want to do any decoding right now.\n  keys = bunser_array(ptr, end, &keys_ctx);\n  if (!keys) {\n    return NULL;\n  }\n\n  numkeys = PySequence_Length(keys);\n  if (numkeys == 0) {\n    PyErr_Format(PyExc_ValueError, \"Expected non-empty ARRAY in TEMPLATE\");\n    return NULL;\n  }\n\n  // Load number of array elements\n  if (!bunser_int(ptr, end, &nitems)) {\n    Py_DECREF(keys);\n    return 0;\n  }\n\n  if (nitems > UINT32_MAX) {\n    PyErr_Format(PyExc_ValueError, \"Too many items for python\");\n    Py_DECREF(keys);\n    return NULL;\n  }\n\n  arrval = PyList_New(0);\n  if (!arrval) {\n    Py_DECREF(keys);\n    return NULL;\n  }\n\n  for (i = 0; i < nitems; i++) {\n    PyObject* dict = NULL;\n    bserObject* obj = NULL;\n\n    if (mutable) {\n      dict = PyDict_New();\n    } else {\n      obj = PyObject_New(bserObject, &bserObjectType);\n      if (obj) {\n        obj->keys = keys;\n        Py_INCREF(obj->keys);\n        obj->values = PyTuple_New(numkeys);\n      }\n      dict = (PyObject*)obj;\n    }\n    if (!dict) {\n    fail:\n      Py_DECREF(keys);\n      Py_DECREF(arrval);\n      return NULL;\n    }\n\n    for (keyidx = 0; keyidx < numkeys; keyidx++) {\n      PyObject* key;\n      PyObject* ele;\n\n      if (*ptr >= end) {\n        PyErr_SetString(PyExc_ValueError, \"input buffer too small\");\n        return 0;\n      }\n\n      if (**ptr == BSER_SKIP) {\n        *ptr = *ptr + 1;\n        ele = Py_None;\n        Py_INCREF(ele);\n      } else {\n        ele = bser_loads_recursive(ptr, end, ctx);\n      }\n\n      if (!ele) {\n        goto fail;\n      }\n\n      if (mutable) {\n        key = PyList_GET_ITEM(keys, keyidx);\n        PyDict_SetItem(dict, key, ele);\n        Py_DECREF(ele);\n      } else {\n        PyTuple_SET_ITEM(obj->values, keyidx, ele);\n        // DECREF(ele) not required as SET_ITEM steals the ref\n      }\n    }\n\n    int error = PyList_Append(arrval, dict);\n    Py_DECREF(dict);\n    if (error != 0) {\n      goto fail;\n    }\n  }\n\n  Py_DECREF(keys);\n\n  return arrval;\n}\n\nPyObject* bser_loads_recursive(\n    const char** ptr,\n    const char* end,\n    const unser_ctx_t* ctx) {\n  const char* buf = *ptr;\n\n  if (buf >= end) {\n    PyErr_SetString(PyExc_ValueError, \"input buffer too small\");\n    return 0;\n  }\n\n  switch (buf[0]) {\n    case BSER_INT8:\n    case BSER_INT16:\n    case BSER_INT32:\n    case BSER_INT64: {\n      int64_t ival;\n      if (!bunser_int(ptr, end, &ival)) {\n        return NULL;\n      }\n// Python 3 has one integer type.\n#if PY_MAJOR_VERSION >= 3\n      return PyLong_FromLongLong(ival);\n#else\n      if (ival < LONG_MIN || ival > LONG_MAX) {\n        return PyLong_FromLongLong(ival);\n      }\n      return PyInt_FromSsize_t(Py_SAFE_DOWNCAST(ival, int64_t, Py_ssize_t));\n#endif // PY_MAJOR_VERSION >= 3\n    }\n\n    case BSER_REAL: {\n      if (buf + 1 + sizeof(double) > end) {\n        PyErr_SetString(\n            PyExc_ValueError, \"input buffer too small for real encoding\");\n        return 0;\n      }\n      double dval;\n      memcpy(&dval, buf + 1, sizeof(dval));\n      *ptr = buf + 1 + sizeof(double);\n      return PyFloat_FromDouble(dval);\n    }\n\n    case BSER_TRUE:\n      *ptr = buf + 1;\n      Py_INCREF(Py_True);\n      return Py_True;\n\n    case BSER_FALSE:\n      *ptr = buf + 1;\n      Py_INCREF(Py_False);\n      return Py_False;\n\n    case BSER_NULL:\n      *ptr = buf + 1;\n      Py_INCREF(Py_None);\n      return Py_None;\n\n    case BSER_BYTESTRING: {\n      const char* start;\n      int64_t len;\n\n      if (!bunser_bytestring(ptr, end, &start, &len)) {\n        return NULL;\n      }\n\n      if (len > LONG_MAX) {\n        PyErr_Format(PyExc_ValueError, \"string too long for python\");\n        return NULL;\n      }\n\n      if (ctx->value_encoding != NULL) {\n        return PyUnicode_Decode(\n            start, (long)len, ctx->value_encoding, ctx->value_errors);\n      } else {\n        return PyBytes_FromStringAndSize(start, (long)len);\n      }\n    }\n\n    case BSER_UTF8STRING: {\n      const char* start;\n      int64_t len;\n\n      if (!bunser_bytestring(ptr, end, &start, &len)) {\n        return NULL;\n      }\n\n      if (len > LONG_MAX) {\n        PyErr_Format(PyExc_ValueError, \"string too long for python\");\n        return NULL;\n      }\n\n      return PyUnicode_Decode(start, (long)len, \"utf-8\", \"strict\");\n    }\n\n    case BSER_ARRAY:\n      return bunser_array(ptr, end, ctx);\n\n    case BSER_OBJECT:\n      return bunser_object(ptr, end, ctx);\n\n    case BSER_TEMPLATE:\n      return bunser_template(ptr, end, ctx);\n\n    default:\n      PyErr_Format(PyExc_ValueError, \"unhandled bser opcode 0x%02x\", buf[0]);\n  }\n\n  return NULL;\n}\n"
  },
  {
    "path": "watchman/python/pywatchman/bser.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#define PY_SSIZE_T_CLEAN\n#include <Python.h> // @manual=fbsource//third-party/python:python\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define BSER_ARRAY 0x00\n#define BSER_OBJECT 0x01\n#define BSER_BYTESTRING 0x02\n#define BSER_INT8 0x03\n#define BSER_INT16 0x04\n#define BSER_INT32 0x05\n#define BSER_INT64 0x06\n#define BSER_REAL 0x07\n#define BSER_TRUE 0x08\n#define BSER_FALSE 0x09\n#define BSER_NULL 0x0a\n#define BSER_TEMPLATE 0x0b\n#define BSER_SKIP 0x0c\n#define BSER_UTF8STRING 0x0d\n\n// An immutable object representation of BSER_OBJECT.\n// Rather than build a hash table, key -> value are obtained\n// by walking the list of keys to determine the offset into\n// the values array.  The assumption is that the number of\n// array elements will be typically small (~6 for the top\n// level query result and typically 3-5 for the file entries)\n// so that the time overhead for this is small compared to\n// using a proper hash table.  Even with this simplistic\n// approach, this is still faster for the mercurial use case\n// as it helps to eliminate creating N other objects to\n// represent the stat information in the hgwatchman extension\n// clang-format off\ntypedef struct {\n  PyObject_HEAD\n  PyObject *keys;   // tuple of field names\n  PyObject *values; // tuple of values\n} bserObject;\n\nextern PyTypeObject bserObjectType;\n\ntypedef struct loads_ctx {\n  int is_mutable;\n  const char* value_encoding;\n  const char* value_errors;\n  uint32_t bser_version;\n  uint32_t bser_capabilities;\n} unser_ctx_t;\n\nint bunser_int(const char** ptr, const char* end, int64_t* val);\n\nPyObject*\nbser_loads_recursive(const char** ptr, const char* end, const unser_ctx_t* ctx);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "watchman/python/pywatchman/bsermodule.c",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#define PY_SSIZE_T_CLEAN\n#include <Python.h> // @manual=fbsource//third-party/python:python\n#include <bytesobject.h> // @manual=fbsource//third-party/python:python\n#ifdef _MSC_VER\n#define inline __inline\n#if _MSC_VER >= 1800\n#include <stdint.h>\n#else\n// The compiler associated with Python 2.7 on Windows doesn't ship\n// with stdint.h, so define the small subset that we use here.\ntypedef __int8 int8_t;\ntypedef __int16 int16_t;\ntypedef __int32 int32_t;\ntypedef __int64 int64_t;\ntypedef unsigned __int8 uint8_t;\ntypedef unsigned __int16 uint16_t;\ntypedef unsigned __int32 uint32_t;\ntypedef unsigned __int64 uint64_t;\n#define UINT32_MAX 4294967295U\n#endif\n#endif\n\n#include \"bser.h\"\n\n// clang-format off\n/* Return the smallest size int that can store the value */\n#define INT_SIZE(x) (((x) == ((int8_t)x))  ? 1 :    \\\n                     ((x) == ((int16_t)x)) ? 2 :    \\\n                     ((x) == ((int32_t)x)) ? 4 : 8)\n\n// clang-format on\n\nstatic const char bser_true = BSER_TRUE;\nstatic const char bser_false = BSER_FALSE;\nstatic const char bser_null = BSER_NULL;\nstatic const char bser_bytestring_hdr = BSER_BYTESTRING;\nstatic const char bser_array_hdr = BSER_ARRAY;\nstatic const char bser_object_hdr = BSER_OBJECT;\n\nstatic inline uint32_t next_power_2(uint32_t n) {\n  n |= (n >> 16);\n  n |= (n >> 8);\n  n |= (n >> 4);\n  n |= (n >> 2);\n  n |= (n >> 1);\n  return n + 1;\n}\n\n// A buffer we use for building up the serialized result\nstruct bser_buffer {\n  char* buf;\n  uint32_t wpos;\n  uint32_t allocd;\n  uint32_t bser_version;\n  uint32_t capabilities;\n};\ntypedef struct bser_buffer bser_t;\n\nstatic int bser_append(bser_t* bser, const char* data, uint32_t len) {\n  if (bser->wpos >= UINT32_MAX - len) {\n    // 4 GiB overflow\n    errno = ENOMEM;\n    return 0;\n  }\n\n  uint32_t newlen = next_power_2(bser->wpos + len);\n  if (newlen == 0) {\n    // We wrapped around - can't store 4G in allocd, so give up. This limits\n    // total output to 2 GiB.\n    errno = ENOMEM;\n    return 0;\n  }\n\n  if (newlen > bser->allocd) {\n    char* nbuf = realloc(bser->buf, newlen);\n    if (!nbuf) {\n      return 0;\n    }\n\n    bser->buf = nbuf;\n    bser->allocd = newlen;\n  }\n\n  memcpy(bser->buf + bser->wpos, data, len);\n  bser->wpos += len;\n  return 1;\n}\n\nstatic int bser_init(bser_t* bser, uint32_t version, uint32_t capabilities) {\n  bser->allocd = 8192;\n  bser->wpos = 0;\n  bser->buf = malloc(bser->allocd);\n  bser->bser_version = version;\n  bser->capabilities = capabilities;\n  if (!bser->buf) {\n    return 0;\n  }\n\n// Leave room for the serialization header, which includes\n// our overall length.  To make things simpler, we'll use an\n// int32 for the header\n#define EMPTY_HEADER \"\\x00\\x01\\x05\\x00\\x00\\x00\\x00\"\n\n// Version 2 also carries an integer indicating the capabilities. The\n// capabilities integer comes before the PDU size.\n#define EMPTY_HEADER_V2 \"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\"\n  if (version == 2) {\n    bser_append(bser, EMPTY_HEADER_V2, sizeof(EMPTY_HEADER_V2) - 1);\n  } else {\n    bser_append(bser, EMPTY_HEADER, sizeof(EMPTY_HEADER) - 1);\n  }\n\n  return 1;\n}\n\nstatic void bser_dtor(bser_t* bser) {\n  free(bser->buf);\n  bser->buf = NULL;\n}\n\nstatic int bser_long(bser_t* bser, int64_t val) {\n  int8_t i8;\n  int16_t i16;\n  int32_t i32;\n  int64_t i64;\n  char sz;\n  int size = INT_SIZE(val);\n  char* iptr;\n\n  switch (size) {\n    case 1:\n      sz = BSER_INT8;\n      i8 = (int8_t)val;\n      iptr = (char*)&i8;\n      break;\n    case 2:\n      sz = BSER_INT16;\n      i16 = (int16_t)val;\n      iptr = (char*)&i16;\n      break;\n    case 4:\n      sz = BSER_INT32;\n      i32 = (int32_t)val;\n      iptr = (char*)&i32;\n      break;\n    case 8:\n      sz = BSER_INT64;\n      i64 = (int64_t)val;\n      iptr = (char*)&i64;\n      break;\n    default:\n      PyErr_SetString(PyExc_RuntimeError, \"Cannot represent this long value!?\");\n      return 0;\n  }\n\n  if (!bser_append(bser, &sz, sizeof(sz))) {\n    return 0;\n  }\n\n  return bser_append(bser, iptr, size);\n}\n\nstatic int bser_bytestring(bser_t* bser, PyObject* sval) {\n  char* buf = NULL;\n  Py_ssize_t len;\n  int res;\n  PyObject* utf = NULL;\n\n  if (PyUnicode_Check(sval)) {\n    utf = PyUnicode_AsEncodedString(sval, \"utf-8\", \"ignore\");\n    sval = utf;\n  }\n\n  res = PyBytes_AsStringAndSize(sval, &buf, &len);\n  if (res == -1) {\n    res = 0;\n    goto out;\n  }\n\n  if (!bser_append(bser, &bser_bytestring_hdr, sizeof(bser_bytestring_hdr))) {\n    res = 0;\n    goto out;\n  }\n\n  if (!bser_long(bser, len)) {\n    res = 0;\n    goto out;\n  }\n\n  if (len > UINT32_MAX) {\n    PyErr_Format(PyExc_ValueError, \"string too big\");\n    res = 0;\n    goto out;\n  }\n\n  res = bser_append(bser, buf, (uint32_t)len);\n\nout:\n  if (utf) {\n    Py_DECREF(utf);\n  }\n\n  return res;\n}\n\nstatic int bser_recursive(bser_t* bser, PyObject* val) {\n  if (PyBool_Check(val)) {\n    if (val == Py_True) {\n      return bser_append(bser, &bser_true, sizeof(bser_true));\n    }\n    return bser_append(bser, &bser_false, sizeof(bser_false));\n  }\n\n  if (val == Py_None) {\n    return bser_append(bser, &bser_null, sizeof(bser_null));\n  }\n\n// Python 3 has one integer type.\n#if PY_MAJOR_VERSION < 3\n  if (PyInt_Check(val)) {\n    return bser_long(bser, PyInt_AS_LONG(val));\n  }\n#endif // PY_MAJOR_VERSION < 3\n\n  if (PyLong_Check(val)) {\n    return bser_long(bser, PyLong_AsLongLong(val));\n  }\n\n  if (PyBytes_Check(val) || PyUnicode_Check(val)) {\n    return bser_bytestring(bser, val);\n  }\n\n  if (PyFloat_Check(val)) {\n    double dval = PyFloat_AS_DOUBLE(val);\n    char sz = BSER_REAL;\n\n    if (!bser_append(bser, &sz, sizeof(sz))) {\n      return 0;\n    }\n\n    return bser_append(bser, (char*)&dval, sizeof(dval));\n  }\n\n  if (PyList_Check(val)) {\n    Py_ssize_t i, len = PyList_GET_SIZE(val);\n\n    if (!bser_append(bser, &bser_array_hdr, sizeof(bser_array_hdr))) {\n      return 0;\n    }\n\n    if (!bser_long(bser, len)) {\n      return 0;\n    }\n\n    for (i = 0; i < len; i++) {\n      PyObject* ele = PyList_GET_ITEM(val, i);\n\n      if (!bser_recursive(bser, ele)) {\n        return 0;\n      }\n    }\n\n    return 1;\n  }\n\n  if (PyTuple_Check(val)) {\n    Py_ssize_t i, len = PyTuple_GET_SIZE(val);\n\n    if (!bser_append(bser, &bser_array_hdr, sizeof(bser_array_hdr))) {\n      return 0;\n    }\n\n    if (!bser_long(bser, len)) {\n      return 0;\n    }\n\n    for (i = 0; i < len; i++) {\n      PyObject* ele = PyTuple_GET_ITEM(val, i);\n\n      if (!bser_recursive(bser, ele)) {\n        return 0;\n      }\n    }\n\n    return 1;\n  }\n\n  if (PyMapping_Check(val)) {\n    Py_ssize_t len = PyMapping_Length(val);\n    Py_ssize_t pos = 0;\n    PyObject *key, *ele;\n\n    if (!bser_append(bser, &bser_object_hdr, sizeof(bser_object_hdr))) {\n      return 0;\n    }\n\n    if (!bser_long(bser, len)) {\n      return 0;\n    }\n\n    while (PyDict_Next(val, &pos, &key, &ele)) {\n      if (!bser_bytestring(bser, key)) {\n        return 0;\n      }\n      if (!bser_recursive(bser, ele)) {\n        return 0;\n      }\n    }\n\n    return 1;\n  }\n\n  PyErr_SetString(PyExc_ValueError, \"Unsupported value type\");\n  return 0;\n}\n\nstatic PyObject* bser_dumps(PyObject* self, PyObject* args, PyObject* kw) {\n  PyObject *val = NULL, *res;\n  bser_t bser;\n  uint32_t len, bser_version = 1, bser_capabilities = 0;\n\n  (void)self;\n\n  static char* kw_list[] = {\"val\", \"version\", \"capabilities\", NULL};\n\n  if (!PyArg_ParseTupleAndKeywords(\n          args,\n          kw,\n          \"O|ii:dumps\",\n          kw_list,\n          &val,\n          &bser_version,\n          &bser_capabilities)) {\n    return NULL;\n  }\n\n  if (!bser_init(&bser, bser_version, bser_capabilities)) {\n    return PyErr_NoMemory();\n  }\n\n  if (!bser_recursive(&bser, val)) {\n    bser_dtor(&bser);\n    if (errno == ENOMEM) {\n      return PyErr_NoMemory();\n    }\n    // otherwise, we've already set the error to something reasonable\n    return NULL;\n  }\n\n  // Now fill in the overall length\n  if (bser_version == 1) {\n    len = bser.wpos - (sizeof(EMPTY_HEADER) - 1);\n    memcpy(bser.buf + 3, &len, sizeof(len));\n  } else {\n    len = bser.wpos - (sizeof(EMPTY_HEADER_V2) - 1);\n    // The BSER capabilities block comes before the PDU length\n    memcpy(bser.buf + 2, &bser_capabilities, sizeof(bser_capabilities));\n    memcpy(bser.buf + 7, &len, sizeof(len));\n  }\n\n  res = PyBytes_FromStringAndSize(bser.buf, bser.wpos);\n  bser_dtor(&bser);\n\n  return res;\n}\n\nstatic int _pdu_info_helper(\n    const char* data,\n    const char* end,\n    uint32_t* bser_version_out,\n    uint32_t* bser_capabilities_out,\n    int64_t* expected_len_out,\n    off_t* position_out) {\n  uint32_t bser_version;\n  uint32_t bser_capabilities = 0;\n  int64_t expected_len;\n\n  const char* start;\n  start = data;\n  // Validate the header and length\n  if (memcmp(data, EMPTY_HEADER, 2) == 0) {\n    bser_version = 1;\n  } else if (memcmp(data, EMPTY_HEADER_V2, 2) == 0) {\n    bser_version = 2;\n  } else {\n    PyErr_SetString(PyExc_ValueError, \"invalid bser header\");\n    return 0;\n  }\n\n  data += 2;\n\n  if (bser_version == 2) {\n    // Expect an integer telling us what capabilities are supported by the\n    // remote server (currently unused).\n    if (!memcpy(&bser_capabilities, &data, sizeof(bser_capabilities))) {\n      return 0;\n    }\n    data += sizeof(bser_capabilities);\n  }\n\n  // Expect an integer telling us how big the rest of the data\n  // should be\n  if (!bunser_int(&data, end, &expected_len)) {\n    return 0;\n  }\n\n  *bser_version_out = bser_version;\n  *bser_capabilities_out = (uint32_t)bser_capabilities;\n  *expected_len_out = expected_len;\n  *position_out = (off_t)(data - start);\n  return 1;\n}\n\n// This function parses the PDU header and provides info about the packet\n// Returns false if unsuccessful\nstatic int pdu_info_helper(\n    PyObject* self,\n    PyObject* args,\n    uint32_t* bser_version_out,\n    uint32_t* bser_capabilities_out,\n    int64_t* total_len_out) {\n  const char* start = NULL;\n  const char* data = NULL;\n  Py_ssize_t datalen = 0;\n  const char* end;\n  int64_t expected_len;\n  off_t position;\n\n  (void)self;\n\n  if (!PyArg_ParseTuple(args, \"s#\", &start, &datalen)) {\n    return 0;\n  }\n  data = start;\n  end = data + datalen;\n\n  if (!_pdu_info_helper(\n          data,\n          end,\n          bser_version_out,\n          bser_capabilities_out,\n          &expected_len,\n          &position)) {\n    return 0;\n  }\n  *total_len_out = (int64_t)(expected_len + position);\n  return 1;\n}\n\n// Expected use case is to read a packet from the socket and then call\n// bser.pdu_info on the packet.  It returns the BSER version, BSER capabilities,\n// and the total length of the entire response that the peer is sending,\n// including the bytes already received. This allows the client  to compute the\n// data size it needs to read before it can decode the data.\nstatic PyObject* bser_pdu_info(PyObject* self, PyObject* args) {\n  uint32_t version, capabilities;\n  int64_t total_len;\n  if (!pdu_info_helper(self, args, &version, &capabilities, &total_len)) {\n    return NULL;\n  }\n  return Py_BuildValue(\"kkL\", version, capabilities, total_len);\n}\n\nstatic PyObject* bser_pdu_len(PyObject* self, PyObject* args) {\n  uint32_t version, capabilities;\n  int64_t total_len;\n  if (!pdu_info_helper(self, args, &version, &capabilities, &total_len)) {\n    return NULL;\n  }\n  return Py_BuildValue(\"L\", total_len);\n}\n\nstatic PyObject* bser_loads(PyObject* self, PyObject* args, PyObject* kw) {\n  const char* data = NULL;\n  Py_ssize_t datalen = 0;\n  const char* start;\n  const char* end;\n  int64_t expected_len;\n  off_t position;\n  PyObject* mutable_obj = NULL;\n  const char* value_encoding = NULL;\n  const char* value_errors = NULL;\n  unser_ctx_t ctx = {1, 0};\n\n  static char* kw_list[] = {\n      \"buf\", \"mutable\", \"value_encoding\", \"value_errors\", NULL};\n\n  (void)self;\n\n  if (!PyArg_ParseTupleAndKeywords(\n          args,\n          kw,\n          \"s#|Ozz:loads\",\n          kw_list,\n          &start,\n          &datalen,\n          &mutable_obj,\n          &value_encoding,\n          &value_errors)) {\n    return NULL;\n  }\n\n  if (mutable_obj) {\n    ctx.is_mutable = PyObject_IsTrue(mutable_obj) > 0 ? 1 : 0;\n  }\n  ctx.value_encoding = value_encoding;\n  if (value_encoding == NULL) {\n    ctx.value_errors = NULL;\n  } else if (value_errors == NULL) {\n    ctx.value_errors = \"strict\";\n  } else {\n    ctx.value_errors = value_errors;\n  }\n  data = start;\n  end = data + datalen;\n\n  if (!_pdu_info_helper(\n          data,\n          end,\n          &ctx.bser_version,\n          &ctx.bser_capabilities,\n          &expected_len,\n          &position)) {\n    return NULL;\n  }\n\n  data = start + position;\n  // Verify\n  if (expected_len + data != end) {\n    PyErr_SetString(PyExc_ValueError, \"bser data len != header len\");\n    return NULL;\n  }\n\n  return bser_loads_recursive(&data, end, &ctx);\n}\n\nstatic PyObject* bser_load(PyObject* self, PyObject* args, PyObject* kw) {\n  PyObject* load;\n  PyObject* load_method;\n  PyObject* string;\n  PyObject* load_method_args;\n  PyObject* load_method_kwargs;\n  PyObject* fp = NULL;\n  PyObject* mutable_obj = NULL;\n  PyObject* value_encoding = NULL;\n  PyObject* value_errors = NULL;\n\n  static char* kw_list[] = {\n      \"fp\", \"mutable\", \"value_encoding\", \"value_errors\", NULL};\n\n  (void)self;\n\n  if (!PyArg_ParseTupleAndKeywords(\n          args,\n          kw,\n          \"O|OOO:load\",\n          kw_list,\n          &fp,\n          &mutable_obj,\n          &value_encoding,\n          &value_errors)) {\n    return NULL;\n  }\n\n  load = PyImport_ImportModule(\"pywatchman.load\");\n  if (load == NULL) {\n    return NULL;\n  }\n  load_method = PyObject_GetAttrString(load, \"load\");\n  if (load_method == NULL) {\n    return NULL;\n  }\n  // Mandatory method arguments\n  load_method_args = Py_BuildValue(\"(O)\", fp);\n  if (load_method_args == NULL) {\n    return NULL;\n  }\n  // Optional method arguments\n  load_method_kwargs = PyDict_New();\n  if (load_method_kwargs == NULL) {\n    return NULL;\n  }\n  if (mutable_obj) {\n    PyDict_SetItemString(load_method_kwargs, \"mutable\", mutable_obj);\n  }\n  if (value_encoding) {\n    PyDict_SetItemString(load_method_kwargs, \"value_encoding\", value_encoding);\n  }\n  if (value_errors) {\n    PyDict_SetItemString(load_method_kwargs, \"value_errors\", value_errors);\n  }\n  string = PyObject_Call(load_method, load_method_args, load_method_kwargs);\n  Py_DECREF(load_method_kwargs);\n  Py_DECREF(load_method_args);\n  Py_DECREF(load_method);\n  Py_DECREF(load);\n  return string;\n}\n\n// clang-format off\nstatic PyMethodDef bser_methods[] = {\n  {\n    \"loads\",\n    (void *)(PyCFunctionWithKeywords)bser_loads,\n    METH_VARARGS | METH_KEYWORDS,\n    \"Deserialize string.\"\n  },\n  {\n    \"load\",\n    (void *)(PyCFunctionWithKeywords)bser_load,\n    METH_VARARGS | METH_KEYWORDS,\n    \"Deserialize a file object\"\n  },\n  {\n    \"pdu_info\",\n    (PyCFunction)bser_pdu_info,\n    METH_VARARGS,\n    \"Extract PDU information.\"\n  },\n  {\n    \"pdu_len\",\n    (PyCFunction)bser_pdu_len,\n    METH_VARARGS,\n    \"Extract total PDU length.\"\n  },\n  {\n    \"dumps\",\n    (void *)(PyCFunctionWithKeywords)bser_dumps,\n    METH_VARARGS | METH_KEYWORDS,\n    \"Serialize string.\"\n  },\n  {NULL, NULL, 0, NULL}\n};\n\n#if PY_MAJOR_VERSION >= 3\nstatic struct PyModuleDef bser_module = {\n  PyModuleDef_HEAD_INIT,\n  \"bser\",\n  \"Efficient encoding and decoding of BSER.\",\n  -1,\n  bser_methods\n};\n// clang-format on\n\nPyMODINIT_FUNC PyInit_bser(void) {\n  PyObject* mod;\n\n  mod = PyModule_Create(&bser_module);\n  PyType_Ready(&bserObjectType);\n\n  return mod;\n}\n#else\n\nPyMODINIT_FUNC initbser(void) {\n  (void)Py_InitModule(\"bser\", bser_methods);\n  PyType_Ready(&bserObjectType);\n}\n#endif // PY_MAJOR_VERSION >= 3\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/python/pywatchman/capabilities.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\ndef parse_version(vstr) -> int:\n    res = 0\n    for n in vstr.split(\".\"):\n        res = res * 1000\n        res = res + int(n)\n    return res\n\n\ncap_versions = {\n    \"cmd-watch-del-all\": \"3.1.1\",\n    \"cmd-watch-project\": \"3.1\",\n    \"relative_root\": \"3.3\",\n    \"term-dirname\": \"3.1\",\n    \"term-idirname\": \"3.1\",\n    \"wildmatch\": \"3.7\",\n}\n\n\ndef check(version, name: str):\n    if name in cap_versions:\n        return version >= parse_version(cap_versions[name])\n    return False\n\n\ndef synthesize(vers, opts):\n    \"\"\"Synthesize a capability enabled version response\n    This is a very limited emulation for relatively recent feature sets\n    \"\"\"\n    parsed_version = parse_version(vers[\"version\"])\n    vers[\"capabilities\"] = {}\n    for name in opts[\"optional\"]:\n        vers[\"capabilities\"][name] = check(parsed_version, name)\n    failed = False  # noqa: F841 T25377293 Grandfathered in\n    for name in opts[\"required\"]:\n        have = check(parsed_version, name)\n        vers[\"capabilities\"][name] = have\n        if not have:\n            vers[\"error\"] = (\n                \"client required capabilities [\"\n                + name\n                + \"] not supported by this server\"\n            )\n    return vers\n"
  },
  {
    "path": "watchman/python/pywatchman/encoding.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport sys\n\n\n\"\"\"Module to deal with filename encoding on the local system, as returned by\nWatchman.\"\"\"\n\n\ndefault_local_errors = \"surrogateescape\"\n\n\ndef get_local_encoding() -> str:\n    if sys.platform == \"win32\":\n        # Watchman always returns UTF-8 encoded strings on Windows.\n        return \"utf-8\"\n    # On the Python 3 versions we support, sys.getfilesystemencoding never\n    # returns None.\n    return sys.getfilesystemencoding()\n\n\ndef encode_local(s):\n    return s.encode(get_local_encoding(), default_local_errors)\n\n\ndef decode_local(bs):\n    return bs.decode(get_local_encoding(), default_local_errors)\n"
  },
  {
    "path": "watchman/python/pywatchman/load.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport ctypes\n\n\ntry:\n    from . import bser\nexcept ImportError:\n    from . import pybser as bser\n\n\nEMPTY_HEADER = b\"\\x00\\x01\\x05\\x00\\x00\\x00\\x00\"\n\n\ndef _read_bytes(fp, buf):\n    \"\"\"Read bytes from a file-like object\n\n    @param fp: File-like object that implements read(int)\n    @type fp: file\n\n    @param buf: Buffer to read into\n    @type buf: bytes\n\n    @return: buf\n    \"\"\"\n\n    # Do the first read without resizing the input buffer\n    offset = 0\n    remaining = len(buf)\n    while remaining > 0:\n        l = fp.readinto((ctypes.c_char * remaining).from_buffer(buf, offset))\n        if l is None or l == 0:\n            return offset\n        offset += l\n        remaining -= l\n    return offset\n\n\ndef load(fp, mutable: bool = True, value_encoding=None, value_errors=None):\n    \"\"\"Deserialize a BSER-encoded blob.\n\n    @param fp: The file-object to deserialize.\n    @type file:\n\n    @param mutable: Whether to return mutable results.\n    @type mutable: bool\n\n    @param value_encoding: Optional codec to use to decode values. If\n                           unspecified or None, return values as bytestrings.\n    @type value_encoding: str\n\n    @param value_errors: Optional error handler for codec. 'strict' by default.\n                         The other most common argument is 'surrogateescape' on\n                         Python 3. If value_encoding is None, this is ignored.\n    @type value_errors: str\n    \"\"\"\n    buf = ctypes.create_string_buffer(8192)\n    SNIFF_BUFFER_SIZE = len(EMPTY_HEADER)\n    header = (ctypes.c_char * SNIFF_BUFFER_SIZE).from_buffer(buf)\n    read_len = _read_bytes(fp, header)\n    if read_len < len(header):\n        return None\n\n    total_len = bser.pdu_len(buf)\n    if total_len > len(buf):\n        ctypes.resize(buf, total_len)\n\n    body = (ctypes.c_char * (total_len - len(header))).from_buffer(buf, len(header))\n    read_len = _read_bytes(fp, body)\n    if read_len < len(body):\n        raise RuntimeError(\"bser data ended early\")\n\n    return bser.loads(\n        (ctypes.c_char * total_len).from_buffer(buf, 0),\n        mutable,\n        value_encoding,\n        value_errors,\n    )\n"
  },
  {
    "path": "watchman/python/pywatchman/pybser.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport binascii\nimport collections.abc as collections_abc\nimport ctypes\nimport struct\n\n\nBSER_ARRAY = b\"\\x00\"\nBSER_OBJECT = b\"\\x01\"\nBSER_BYTESTRING = b\"\\x02\"\nBSER_INT8 = b\"\\x03\"\nBSER_INT16 = b\"\\x04\"\nBSER_INT32 = b\"\\x05\"\nBSER_INT64 = b\"\\x06\"\nBSER_REAL = b\"\\x07\"\nBSER_TRUE = b\"\\x08\"\nBSER_FALSE = b\"\\x09\"\nBSER_NULL = b\"\\x0a\"\nBSER_TEMPLATE = b\"\\x0b\"\nBSER_SKIP = b\"\\x0c\"\nBSER_UTF8STRING = b\"\\x0d\"\n\nSTRING_TYPES = (str, bytes)\nunicode = str\n\n\ndef tobytes(i):\n    return str(i).encode(\"ascii\")\n\n\nlong = int\n\n# Leave room for the serialization header, which includes\n# our overall length.  To make things simpler, we'll use an\n# int32 for the header\nEMPTY_HEADER = b\"\\x00\\x01\\x05\\x00\\x00\\x00\\x00\"\nEMPTY_HEADER_V2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\"\n\n\ndef _int_size(x) -> int:\n    \"\"\"Return the smallest size int that can store the value\"\"\"\n    if -0x80 <= x <= 0x7F:\n        return 1\n    elif -0x8000 <= x <= 0x7FFF:\n        return 2\n    elif -0x80000000 <= x <= 0x7FFFFFFF:\n        return 4\n    elif long(-0x8000000000000000) <= x <= long(0x7FFFFFFFFFFFFFFF):\n        return 8\n    else:\n        raise RuntimeError(\"Cannot represent value: \" + str(x))\n\n\ndef _buf_pos(buf, pos) -> bytes:\n    ret = buf[pos]\n    # Normalize the return type to bytes\n    if not isinstance(ret, bytes):\n        ret = bytes((ret,))\n    return ret\n\n\nclass _bser_buffer:\n    def __init__(self, version):\n        self.bser_version = version\n        self.buf = ctypes.create_string_buffer(8192)\n        if self.bser_version == 1:\n            struct.pack_into(\n                tobytes(len(EMPTY_HEADER)) + b\"s\", self.buf, 0, EMPTY_HEADER\n            )\n            self.wpos = len(EMPTY_HEADER)\n        else:\n            assert self.bser_version == 2\n            struct.pack_into(\n                tobytes(len(EMPTY_HEADER_V2)) + b\"s\", self.buf, 0, EMPTY_HEADER_V2\n            )\n            self.wpos = len(EMPTY_HEADER_V2)\n\n    def ensure_size(self, size):\n        buf = self.buf\n        old_size = ctypes.sizeof(buf)\n        new_size = old_size\n        while new_size - self.wpos < size:\n            new_size *= 2\n        if old_size != new_size:\n            ctypes.resize(buf, new_size)\n\n    def append_long(self, val):\n        size = _int_size(val)\n        to_write = size + 1\n        self.ensure_size(to_write)\n        if size == 1:\n            struct.pack_into(b\"=cb\", self.buf, self.wpos, BSER_INT8, val)\n        elif size == 2:\n            struct.pack_into(b\"=ch\", self.buf, self.wpos, BSER_INT16, val)\n        elif size == 4:\n            struct.pack_into(b\"=ci\", self.buf, self.wpos, BSER_INT32, val)\n        elif size == 8:\n            struct.pack_into(b\"=cq\", self.buf, self.wpos, BSER_INT64, val)\n        else:\n            raise RuntimeError(\"Cannot represent this long value\")\n        self.wpos += to_write\n\n    def append_string(self, s):\n        if isinstance(s, unicode):\n            s = s.encode(\"utf-8\")\n        s_len = len(s)\n        size = _int_size(s_len)\n        to_write = 2 + size + s_len\n        self.ensure_size(to_write)\n        if size == 1:\n            struct.pack_into(\n                b\"=ccb\" + tobytes(s_len) + b\"s\",\n                self.buf,\n                self.wpos,\n                BSER_BYTESTRING,\n                BSER_INT8,\n                s_len,\n                s,\n            )\n        elif size == 2:\n            struct.pack_into(\n                b\"=cch\" + tobytes(s_len) + b\"s\",\n                self.buf,\n                self.wpos,\n                BSER_BYTESTRING,\n                BSER_INT16,\n                s_len,\n                s,\n            )\n        elif size == 4:\n            struct.pack_into(\n                b\"=cci\" + tobytes(s_len) + b\"s\",\n                self.buf,\n                self.wpos,\n                BSER_BYTESTRING,\n                BSER_INT32,\n                s_len,\n                s,\n            )\n        elif size == 8:\n            struct.pack_into(\n                b\"=ccq\" + tobytes(s_len) + b\"s\",\n                self.buf,\n                self.wpos,\n                BSER_BYTESTRING,\n                BSER_INT64,\n                s_len,\n                s,\n            )\n        else:\n            raise RuntimeError(\"Cannot represent this string value\")\n        self.wpos += to_write\n\n    def append_recursive(self, val):\n        if isinstance(val, bool):\n            needed = 1\n            self.ensure_size(needed)\n            if val:\n                to_encode = BSER_TRUE\n            else:\n                to_encode = BSER_FALSE\n            struct.pack_into(b\"=c\", self.buf, self.wpos, to_encode)\n            self.wpos += needed\n        elif val is None:\n            needed = 1\n            self.ensure_size(needed)\n            struct.pack_into(b\"=c\", self.buf, self.wpos, BSER_NULL)\n            self.wpos += needed\n        elif isinstance(val, (int, long)):\n            self.append_long(val)\n        elif isinstance(val, STRING_TYPES):\n            self.append_string(val)\n        elif isinstance(val, float):\n            needed = 9\n            self.ensure_size(needed)\n            struct.pack_into(b\"=cd\", self.buf, self.wpos, BSER_REAL, val)\n            self.wpos += needed\n        elif isinstance(val, collections_abc.Mapping) and isinstance(\n            val, collections_abc.Sized\n        ):\n            val_len = len(val)\n            size = _int_size(val_len)\n            needed = 2 + size\n            self.ensure_size(needed)\n            if size == 1:\n                struct.pack_into(\n                    b\"=ccb\", self.buf, self.wpos, BSER_OBJECT, BSER_INT8, val_len\n                )\n            elif size == 2:\n                struct.pack_into(\n                    b\"=cch\", self.buf, self.wpos, BSER_OBJECT, BSER_INT16, val_len\n                )\n            elif size == 4:\n                struct.pack_into(\n                    b\"=cci\", self.buf, self.wpos, BSER_OBJECT, BSER_INT32, val_len\n                )\n            elif size == 8:\n                struct.pack_into(\n                    b\"=ccq\", self.buf, self.wpos, BSER_OBJECT, BSER_INT64, val_len\n                )\n            else:\n                raise RuntimeError(\"Cannot represent this mapping value\")\n            self.wpos += needed\n            iteritems = val.items()\n            for k, v in iteritems:\n                self.append_string(k)\n                self.append_recursive(v)\n        elif isinstance(val, collections_abc.Iterable) and isinstance(\n            val, collections_abc.Sized\n        ):\n            val_len = len(val)\n            size = _int_size(val_len)\n            needed = 2 + size\n            self.ensure_size(needed)\n            if size == 1:\n                struct.pack_into(\n                    b\"=ccb\", self.buf, self.wpos, BSER_ARRAY, BSER_INT8, val_len\n                )\n            elif size == 2:\n                struct.pack_into(\n                    b\"=cch\", self.buf, self.wpos, BSER_ARRAY, BSER_INT16, val_len\n                )\n            elif size == 4:\n                struct.pack_into(\n                    b\"=cci\", self.buf, self.wpos, BSER_ARRAY, BSER_INT32, val_len\n                )\n            elif size == 8:\n                struct.pack_into(\n                    b\"=ccq\", self.buf, self.wpos, BSER_ARRAY, BSER_INT64, val_len\n                )\n            else:\n                raise RuntimeError(\"Cannot represent this sequence value\")\n            self.wpos += needed\n            for v in val:\n                self.append_recursive(v)\n        else:\n            raise RuntimeError(\"Cannot represent unknown value type\")\n\n\ndef dumps(obj, version: int = 1, capabilities: int = 0):\n    bser_buf = _bser_buffer(version=version)\n    bser_buf.append_recursive(obj)\n    # Now fill in the overall length\n    if version == 1:\n        obj_len = bser_buf.wpos - len(EMPTY_HEADER)\n        try:\n            struct.pack_into(b\"=i\", bser_buf.buf, 3, obj_len)\n        except struct.error:\n            # The C implementation treats overflow as MemoryError. Do the same here.\n            raise MemoryError\n    else:\n        obj_len = bser_buf.wpos - len(EMPTY_HEADER_V2)\n        struct.pack_into(b\"=i\", bser_buf.buf, 2, capabilities)\n        struct.pack_into(b\"=i\", bser_buf.buf, 7, obj_len)\n    return bser_buf.buf.raw[: bser_buf.wpos]\n\n\n# This is a quack-alike with the bserObjectType in bser.c\n# It provides by getattr accessors and getitem for both index\n# and name.\nclass _BunserDict:\n    __slots__ = (\"_keys\", \"_values\")\n\n    def __init__(self, keys, values):\n        self._keys = keys\n        self._values = values\n\n    def __getattr__(self, name):\n        return self.__getitem__(name)\n\n    def __getitem__(self, key):\n        if isinstance(key, (int, long)):\n            return self._values[key]\n        elif key.startswith(\"st_\"):\n            # hack^Wfeature to allow mercurial to use \"st_size\" to\n            # reference \"size\"\n            key = key[3:]\n        try:\n            return self._values[self._keys.index(key)]\n        except ValueError:\n            raise KeyError(\"_BunserDict has no key %s\" % key)\n\n    def __len__(self):\n        return len(self._keys)\n\n\nclass Bunser:\n    def __init__(self, mutable=True, value_encoding=None, value_errors=None):\n        self.mutable = mutable\n        self.value_encoding = value_encoding\n\n        if value_encoding is None:\n            self.value_errors = None\n        elif value_errors is None:\n            self.value_errors = \"strict\"\n        else:\n            self.value_errors = value_errors\n\n    @staticmethod\n    def unser_int(buf, pos):\n        try:\n            int_type = _buf_pos(buf, pos)\n        except IndexError:\n            raise ValueError(\"Invalid bser int encoding, pos out of range\")\n        if int_type == BSER_INT8:\n            needed = 2\n            fmt = b\"=b\"\n        elif int_type == BSER_INT16:\n            needed = 3\n            fmt = b\"=h\"\n        elif int_type == BSER_INT32:\n            needed = 5\n            fmt = b\"=i\"\n        elif int_type == BSER_INT64:\n            needed = 9\n            fmt = b\"=q\"\n        else:\n            raise ValueError(\n                \"Invalid bser int encoding 0x%s at position %s\"\n                % (binascii.hexlify(int_type).decode(\"ascii\"), pos)\n            )\n        int_val = struct.unpack_from(fmt, buf, pos + 1)[0]\n        return (int_val, pos + needed)\n\n    def unser_utf8_string(self, buf, pos):\n        str_len, pos = self.unser_int(buf, pos + 1)\n        str_val = struct.unpack_from(tobytes(str_len) + b\"s\", buf, pos)[0]\n        return (str_val.decode(\"utf-8\"), pos + str_len)\n\n    def unser_bytestring(self, buf, pos):\n        str_len, pos = self.unser_int(buf, pos + 1)\n        str_val = struct.unpack_from(tobytes(str_len) + b\"s\", buf, pos)[0]\n        if self.value_encoding is not None:\n            str_val = str_val.decode(self.value_encoding, self.value_errors)\n            # str_len stays the same because that's the length in bytes\n        return (str_val, pos + str_len)\n\n    def unser_array(self, buf, pos):\n        arr_len, pos = self.unser_int(buf, pos + 1)\n        arr = []\n        for _ in range(arr_len):\n            arr_item, pos = self.loads_recursive(buf, pos)\n            arr.append(arr_item)\n\n        if not self.mutable:\n            arr = tuple(arr)\n\n        return arr, pos\n\n    def unser_object(self, buf, pos):\n        obj_len, pos = self.unser_int(buf, pos + 1)\n        if self.mutable:\n            obj = {}\n        else:\n            keys = []\n            vals = []\n\n        for _ in range(obj_len):\n            key, pos = self.unser_utf8_string(buf, pos)\n            val, pos = self.loads_recursive(buf, pos)\n            if self.mutable:\n                obj[key] = val\n            else:\n                keys.append(key)\n                vals.append(val)\n\n        if not self.mutable:\n            obj = _BunserDict(keys, vals)\n\n        return obj, pos\n\n    def unser_template(self, buf, pos):\n        val_type = _buf_pos(buf, pos + 1)\n        if val_type != BSER_ARRAY:\n            raise RuntimeError(\"Expect ARRAY to follow TEMPLATE\")\n        # force UTF-8 on keys\n        keys_bunser = Bunser(mutable=self.mutable, value_encoding=\"utf-8\")\n        keys, pos = keys_bunser.unser_array(buf, pos + 1)\n        nitems, pos = self.unser_int(buf, pos)\n        arr = []\n        for _ in range(nitems):\n            if self.mutable:\n                obj = {}\n            else:\n                vals = []\n\n            for keyidx in range(len(keys)):\n                if _buf_pos(buf, pos) == BSER_SKIP:\n                    pos += 1\n                    ele = None\n                else:\n                    ele, pos = self.loads_recursive(buf, pos)\n\n                if self.mutable:\n                    key = keys[keyidx]\n                    obj[key] = ele\n                else:\n                    vals.append(ele)\n\n            if not self.mutable:\n                obj = _BunserDict(keys, vals)\n\n            arr.append(obj)\n        return arr, pos\n\n    def loads_recursive(self, buf, pos):\n        val_type = _buf_pos(buf, pos)\n        if (\n            val_type == BSER_INT8\n            or val_type == BSER_INT16\n            or val_type == BSER_INT32\n            or val_type == BSER_INT64\n        ):\n            return self.unser_int(buf, pos)\n        elif val_type == BSER_REAL:\n            val = struct.unpack_from(b\"=d\", buf, pos + 1)[0]\n            return (val, pos + 9)\n        elif val_type == BSER_TRUE:\n            return (True, pos + 1)\n        elif val_type == BSER_FALSE:\n            return (False, pos + 1)\n        elif val_type == BSER_NULL:\n            return (None, pos + 1)\n        elif val_type == BSER_BYTESTRING:\n            return self.unser_bytestring(buf, pos)\n        elif val_type == BSER_UTF8STRING:\n            return self.unser_utf8_string(buf, pos)\n        elif val_type == BSER_ARRAY:\n            return self.unser_array(buf, pos)\n        elif val_type == BSER_OBJECT:\n            return self.unser_object(buf, pos)\n        elif val_type == BSER_TEMPLATE:\n            return self.unser_template(buf, pos)\n        else:\n            raise ValueError(\n                \"unhandled bser opcode 0x%s\"\n                % binascii.hexlify(val_type).decode(\"ascii\")\n            )\n\n\ndef _pdu_info_helper(buf):\n    bser_version = -1\n    if buf[0:2] == EMPTY_HEADER[0:2]:\n        bser_version = 1\n        bser_capabilities = 0\n        expected_len, pos2 = Bunser.unser_int(buf, 2)\n    elif buf[0:2] == EMPTY_HEADER_V2[0:2]:\n        if len(buf) < 8:\n            raise ValueError(\"Invalid BSER header\")\n        bser_version = 2\n        bser_capabilities = struct.unpack_from(\"I\", buf, 2)[0]\n        expected_len, pos2 = Bunser.unser_int(buf, 6)\n    else:\n        raise ValueError(\"Invalid BSER header\")\n\n    return bser_version, bser_capabilities, expected_len, pos2\n\n\ndef pdu_info(buf):\n    info = _pdu_info_helper(buf)\n    return info[0], info[1], info[2] + info[3]\n\n\ndef pdu_len(buf):\n    info = _pdu_info_helper(buf)\n    return info[2] + info[3]\n\n\ndef loads(buf, mutable: bool = True, value_encoding=None, value_errors=None):\n    \"\"\"Deserialize a BSER-encoded blob.\n\n    @param buf: The buffer to deserialize.\n    @type buf: bytes\n\n    @param mutable: Whether to return mutable results.\n    @type mutable: bool\n\n    @param value_encoding: Optional codec to use to decode values. If\n                           unspecified or None, return values as bytestrings.\n    @type value_encoding: str\n\n    @param value_errors: Optional error handler for codec. 'strict' by default.\n                         The other most common argument is 'surrogateescape' on\n                         Python 3. If value_encoding is None, this is ignored.\n    @type value_errors: str\n    \"\"\"\n\n    info = _pdu_info_helper(buf)\n    expected_len = info[2]\n    pos = info[3]\n\n    if len(buf) != expected_len + pos:\n        raise ValueError(\n            \"bser data len %d != header len %d\" % (expected_len + pos, len(buf))\n        )\n\n    bunser = Bunser(\n        mutable=mutable, value_encoding=value_encoding, value_errors=value_errors\n    )\n\n    return bunser.loads_recursive(buf, pos)[0]\n\n\ndef load(fp, mutable: bool = True, value_encoding=None, value_errors=None):\n    from . import load\n\n    return load.load(fp, mutable, value_encoding, value_errors)\n"
  },
  {
    "path": "watchman/python/pywatchman/windows.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport ctypes\nimport ctypes.wintypes\nimport os\nimport socket\n\n\n# pyre-ignore\nwintypes = ctypes.wintypes\nGENERIC_READ = 0x80000000\nGENERIC_WRITE = 0x40000000\nFILE_FLAG_OVERLAPPED = 0x40000000\nOPEN_EXISTING = 3\nINVALID_HANDLE_VALUE = ctypes.c_void_p(-1).value\nFORMAT_MESSAGE_FROM_SYSTEM = 0x00001000\nFORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100\nFORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200\nWAIT_FAILED = 0xFFFFFFFF\nWAIT_TIMEOUT = 0x00000102\nWAIT_OBJECT_0 = 0x00000000\nWAIT_IO_COMPLETION = 0x000000C0\nINFINITE = 0xFFFFFFFF\nSO_SNDTIMEO = 0x1005\nSO_RCVTIMEO = 0x1006\nSOL_SOCKET = 0xFFFF\nWSAETIMEDOUT = 10060\n\n# Overlapped I/O operation is in progress. (997)\nERROR_IO_PENDING = 0x000003E5\n\n# The pointer size follows the architecture\n# We use WPARAM since this type is already conditionally defined\nULONG_PTR = ctypes.wintypes.WPARAM\n\n\nclass OVERLAPPED(ctypes.Structure):\n    _fields_ = [\n        (\"Internal\", ULONG_PTR),\n        (\"InternalHigh\", ULONG_PTR),\n        (\"Offset\", wintypes.DWORD),\n        (\"OffsetHigh\", wintypes.DWORD),\n        (\"hEvent\", wintypes.HANDLE),\n    ]\n\n    def __init__(self):\n        self.Internal = 0\n        self.InternalHigh = 0\n        self.Offset = 0\n        self.OffsetHigh = 0\n        self.hEvent = 0\n\n\nLPDWORD = ctypes.POINTER(wintypes.DWORD)\n\n# pyre-ignore\nwindll = ctypes.windll\n\nCreateFile = windll.kernel32.CreateFileA\nCreateFile.argtypes = [\n    wintypes.LPSTR,\n    wintypes.DWORD,\n    wintypes.DWORD,\n    wintypes.LPVOID,\n    wintypes.DWORD,\n    wintypes.DWORD,\n    wintypes.HANDLE,\n]\nCreateFile.restype = wintypes.HANDLE\n\nCloseHandle = windll.kernel32.CloseHandle\nCloseHandle.argtypes = [wintypes.HANDLE]\nCloseHandle.restype = wintypes.BOOL\n\nReadFile = windll.kernel32.ReadFile\nReadFile.argtypes = [\n    wintypes.HANDLE,\n    wintypes.LPVOID,\n    wintypes.DWORD,\n    LPDWORD,\n    ctypes.POINTER(OVERLAPPED),\n]\nReadFile.restype = wintypes.BOOL\n\nWriteFile = windll.kernel32.WriteFile\nWriteFile.argtypes = [\n    wintypes.HANDLE,\n    wintypes.LPVOID,\n    wintypes.DWORD,\n    LPDWORD,\n    ctypes.POINTER(OVERLAPPED),\n]\nWriteFile.restype = wintypes.BOOL\n\nGetLastError = windll.kernel32.GetLastError\nGetLastError.argtypes = []\nGetLastError.restype = wintypes.DWORD\n\nSetLastError = windll.kernel32.SetLastError\nSetLastError.argtypes = [wintypes.DWORD]\nSetLastError.restype = None\n\nFormatMessage = windll.kernel32.FormatMessageA\nFormatMessage.argtypes = [\n    wintypes.DWORD,\n    wintypes.LPVOID,\n    wintypes.DWORD,\n    wintypes.DWORD,\n    ctypes.POINTER(wintypes.LPSTR),\n    wintypes.DWORD,\n    wintypes.LPVOID,\n]\nFormatMessage.restype = wintypes.DWORD\n\nLocalFree = windll.kernel32.LocalFree\n\nGetOverlappedResult = windll.kernel32.GetOverlappedResult\nGetOverlappedResult.argtypes = [\n    wintypes.HANDLE,\n    ctypes.POINTER(OVERLAPPED),\n    LPDWORD,\n    wintypes.BOOL,\n]\nGetOverlappedResult.restype = wintypes.BOOL\n\nGetOverlappedResultEx = getattr(windll.kernel32, \"GetOverlappedResultEx\", None)\nif GetOverlappedResultEx is not None:\n    GetOverlappedResultEx.argtypes = [\n        wintypes.HANDLE,\n        ctypes.POINTER(OVERLAPPED),\n        LPDWORD,\n        wintypes.DWORD,\n        wintypes.BOOL,\n    ]\n    GetOverlappedResultEx.restype = wintypes.BOOL\n\nWaitForSingleObjectEx = windll.kernel32.WaitForSingleObjectEx\nWaitForSingleObjectEx.argtypes = [wintypes.HANDLE, wintypes.DWORD, wintypes.BOOL]\nWaitForSingleObjectEx.restype = wintypes.DWORD\n\nCreateEvent = windll.kernel32.CreateEventA\nCreateEvent.argtypes = [LPDWORD, wintypes.BOOL, wintypes.BOOL, wintypes.LPSTR]\nCreateEvent.restype = wintypes.HANDLE\n\n# Windows Vista is the minimum supported client for CancelIoEx.\nCancelIoEx = windll.kernel32.CancelIoEx\nCancelIoEx.argtypes = [wintypes.HANDLE, ctypes.POINTER(OVERLAPPED)]\nCancelIoEx.restype = wintypes.BOOL\n\nWinSocket = windll.ws2_32.socket\nWinSocket.argtypes = [ctypes.c_int, ctypes.c_int, ctypes.c_int]\nWinSocket.restype = ctypes.wintypes.HANDLE\n\nWinConnect = windll.ws2_32.connect\nWinConnect.argtypes = [ctypes.wintypes.HANDLE, ctypes.c_void_p, ctypes.c_int]\nWinConnect.restype = ctypes.c_int\n\nWinSend = windll.ws2_32.send\nWinSend.argtypes = [ctypes.wintypes.HANDLE, ctypes.c_char_p, ctypes.c_int, ctypes.c_int]\nWinSend.restype = ctypes.c_int\n\nWinRecv = windll.ws2_32.recv\nWinRecv.argtypes = [ctypes.wintypes.HANDLE, ctypes.c_char_p, ctypes.c_int, ctypes.c_int]\nWinRecv.restype = ctypes.c_int\n\nclosesocket = windll.ws2_32.closesocket\nclosesocket.argtypes = [ctypes.wintypes.HANDLE]\nclosesocket.restype = ctypes.c_int\n\nWinSetIntSockOpt = windll.ws2_32.setsockopt\nWinSetIntSockOpt.argtypes = [\n    ctypes.wintypes.HANDLE,\n    ctypes.c_int,\n    ctypes.c_int,\n    wintypes.LPDWORD,\n    ctypes.c_int,\n]\nWinSetIntSockOpt.restype = ctypes.c_int\n\nWSAGetLastError = windll.ws2_32.WSAGetLastError\nWSAGetLastError.argtypes = []\n\nWSADESCRIPTION_LEN = 256 + 1\nWSASYS_STATUS_LEN = 128 + 1\n\n\nclass WSAData64(ctypes.Structure):\n    _fields_ = [\n        (\"wVersion\", ctypes.c_ushort),\n        (\"wHighVersion\", ctypes.c_ushort),\n        (\"iMaxSockets\", ctypes.c_ushort),\n        (\"iMaxUdpDg\", ctypes.c_ushort),\n        (\"lpVendorInfo\", ctypes.c_char_p),\n        (\"szDescription\", ctypes.c_ushort * WSADESCRIPTION_LEN),\n        (\"szSystemStatus\", ctypes.c_ushort * WSASYS_STATUS_LEN),\n    ]\n\n\nWSAStartup = windll.ws2_32.WSAStartup\nWSAStartup.argtypes = [ctypes.wintypes.WORD, ctypes.POINTER(WSAData64)]\nWSAStartup.restype = ctypes.c_int\n\n\nclass SOCKADDR_UN(ctypes.Structure):\n    _fields_ = [(\"sun_family\", ctypes.c_ushort), (\"sun_path\", ctypes.c_char * 108)]\n\n\nclass WindowsSocketException(Exception):\n    def __init__(self, code: int) -> None:\n        super(WindowsSocketException, self).__init__(\n            \"Windows Socket Error: {}\".format(code)\n        )\n\n\nclass WindowsSocketHandle:\n    AF_UNIX = 1\n    SOCK_STREAM = 1\n\n    fd: int = -1\n    address: str = \"\"\n\n    @staticmethod\n    def _checkReturnCode(retcode):\n        if retcode == -1:\n            errcode = WSAGetLastError()\n            if errcode == WSAETIMEDOUT:\n                raise socket.timeout()\n            raise WindowsSocketException(errcode)\n\n    def __init__(self):\n        wsa_data = WSAData64()\n        # ctypes.c_ushort(514) = MAKE_WORD(2,2) which is for the winsock\n        # library version 2.2\n        errcode = WSAStartup(ctypes.c_ushort(514), ctypes.pointer(wsa_data))\n        if errcode != 0:\n            raise WindowsSocketException(errcode)\n\n        fd = WinSocket(self.AF_UNIX, self.SOCK_STREAM, 0)\n        self._checkReturnCode(fd)\n        self.fd = fd\n\n    def fileno(self) -> int:\n        return self.fd\n\n    def settimeout(self, timeout: int) -> None:\n        timeout = wintypes.DWORD(0 if timeout is None else int(timeout * 1000))\n        retcode = WinSetIntSockOpt(\n            self.fd,\n            SOL_SOCKET,\n            SO_RCVTIMEO,\n            ctypes.byref(timeout),\n            ctypes.sizeof(timeout),\n        )\n        self._checkReturnCode(retcode)\n        retcode = WinSetIntSockOpt(\n            self.fd,\n            SOL_SOCKET,\n            SO_SNDTIMEO,\n            ctypes.byref(timeout),\n            ctypes.sizeof(timeout),\n        )\n        self._checkReturnCode(retcode)\n        return None\n\n    def connect(self, address: str) -> None:\n        # pyre-ignore\n        address = os.fsencode(os.path.normpath(address))\n        addr = SOCKADDR_UN(sun_family=self.AF_UNIX, sun_path=address)\n        self._checkReturnCode(\n            WinConnect(self.fd, ctypes.pointer(addr), ctypes.sizeof(addr))\n        )\n        self.address = address\n\n    def send(self, buff: bytes) -> int:\n        retcode = WinSend(self.fd, buff, len(buff), 0)\n        self._checkReturnCode(retcode)\n        return retcode\n\n    def sendall(self, buff: bytes) -> None:\n        while len(buff) > 0:\n            x = self.send(buff)\n            if x > 0:\n                buff = buff[x:]\n            else:\n                break\n        return None\n\n    def recv(self, size: int) -> bytes:\n        buff = ctypes.create_string_buffer(size)\n        retsize = WinRecv(self.fd, buff, size, 0)\n        self._checkReturnCode(retsize)\n        return buff.raw[0:retsize]\n\n    def getpeername(self) -> str:\n        return self.address\n\n    def getsockname(self) -> str:\n        return self.address\n\n    def close(self) -> int:\n        return closesocket(self.fd)\n"
  },
  {
    "path": "watchman/python/pywatchman_aio/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:python_library.bzl\", \"python_library\")\n\noncall(\"scm_client_infra\")\n\npython_library(\n    name = \"pywatchman_aio\",\n    srcs = glob([\"*.py\"]),\n    base_module = \"pywatchman_aio\",\n    deps = [\n        \"//watchman/python/pywatchman:pywatchman\",\n    ],\n)\n"
  },
  {
    "path": "watchman/python/pywatchman_aio/__init__.py",
    "content": "#!/usr/bin/env python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport asyncio\nimport os\nimport subprocess\nimport typing\n\nfrom pywatchman import CommandError, encoding, WatchmanError\n\n\ntry:\n    from pywatchman import bser\nexcept ImportError:\n    from pywatchman import pybser as bser\n\n\n# 2 bytes marker, 1 byte int size, 8 bytes int64 value\nSNIFF_LEN = 13\n\n\n# TODO: Fix this when https://github.com/python/asyncio/issues/281 is resolved.\n# tl;dr is that you cannot have different event loops running in different\n# threads all fork subprocesses and listen for child events. The current\n# workaround is to do the old fashioned blocking process communication using a\n# ThreadPool.\ndef _resolve_sockname_helper():\n    # if invoked via a trigger, watchman will set this env var; we\n    # should use it unless explicitly set otherwise\n    path = os.getenv(\"WATCHMAN_SOCK\")\n    if path:\n        return path\n\n    cmd = [\"watchman\", \"--output-encoding=bser\", \"get-sockname\"]\n\n    try:\n        p = subprocess.Popen(\n            cmd,\n            stdout=subprocess.PIPE,\n            stderr=subprocess.PIPE,\n            close_fds=os.name != \"nt\",\n        )\n    except OSError as e:\n        raise WatchmanError('\"watchman\" executable not in PATH (%s)', e)\n\n    stdout, stderr = p.communicate()\n    exitcode = p.poll()\n\n    if exitcode:\n        raise WatchmanError(\"watchman exited with code %d\" % exitcode)\n\n    result = bser.loads(stdout)\n\n    if \"error\" in result:\n        raise WatchmanError(str(result[\"error\"]))\n\n    return result[\"sockname\"]\n\n\nasync def _resolve_sockname():\n    \"\"\"Find the Unix socket path to the global Watchman instance.\"\"\"\n    loop = asyncio.get_running_loop()\n    return await loop.run_in_executor(None, _resolve_sockname_helper)\n\n\nclass AsyncTransport:\n    \"\"\"Communication transport to the Watchman Service.\"\"\"\n\n    async def activate(self, **kwargs):\n        \"\"\"Make the transport ready for use. Optional for subclasses.\"\"\"\n        pass\n\n    async def read(self, size):\n        \"\"\"Read 'size' bytes from the transport.\"\"\"\n        raise NotImplementedError()\n\n    async def write(self, buf):\n        \"\"\"Write 'buf' bytes to the transport.\"\"\"\n        raise NotImplementedError()\n\n    def close(self):\n        \"\"\"Close the transport. Optional for subclasses.\"\"\"\n        pass\n\n\nclass AsyncUnixSocketTransport(AsyncTransport):\n    \"\"\"Local Unix domain socket transport supporting asyncio.\"\"\"\n\n    def __init__(self):\n        self.sockname = None\n        self.reader = None\n        self.writer = None\n\n    async def activate(self, **kwargs):\n        # Requires keyword-argument 'sockname'\n        reader, writer = await asyncio.open_unix_connection(kwargs[\"sockname\"])\n        self.reader = reader\n        self.writer = writer\n\n    async def write(self, data):\n        self.writer.write(data)\n        await self.writer.drain()\n\n    async def read(self, size):\n        res = await self.reader.read(size)\n        if not len(res):\n            raise ConnectionResetError(\"connection closed\")\n        return res\n\n    def close(self):\n        if self.writer:\n            self.writer.close()\n\n\nclass AsyncCodec:\n    \"\"\"Communication encoding for the Watchman service.\"\"\"\n\n    def __init__(self, transport):\n        self.transport = transport\n\n    async def receive(self):\n        \"\"\"Read from the underlying transport, parse and return the message.\"\"\"\n        raise NotImplementedError()\n\n    async def send(self, *args):\n        \"\"\"Send the given message via the underlying transport.\"\"\"\n        raise NotImplementedError()\n\n    def close(self):\n        \"\"\"Close the underlying transport.\"\"\"\n        self.transport.close()\n\n\n# This requires BSERv2 support of the server, but doesn't gracefully check\n# for the requisite capability being present in older versions.\nclass AsyncBserCodec(AsyncCodec):\n    \"\"\"Use the BSER encoding.\"\"\"\n\n    async def receive(self):\n        sniff = await self.transport.read(SNIFF_LEN)\n        if not sniff:\n            raise WatchmanError(\"empty watchman response\")\n        _1, _2, elen = bser.pdu_info(sniff)\n        rlen = len(sniff)\n        buf = bytearray(elen)\n        buf[:rlen] = sniff\n        while elen > rlen:\n            b = await self.transport.read(elen - rlen)\n            buf[rlen : rlen + len(b)] = b\n            rlen += len(b)\n        response = bytes(buf)\n        try:\n            res = self._loads(response)\n            return res\n        except ValueError as e:\n            raise WatchmanError(\"watchman response decode error: %s\" % e)\n\n    async def send(self, *args):\n        cmd = bser.dumps(*args, version=2, capabilities=0)\n        await self.transport.write(cmd)\n\n    def _loads(self, response):\n        \"\"\"Parse the BSER packet\"\"\"\n        return bser.loads(\n            response,\n            True,\n            value_encoding=encoding.get_local_encoding(),\n            value_errors=encoding.default_local_errors,\n        )\n\n\nclass ReceiveLoopError(Exception):\n    pass\n\n\nclass AIOClient:\n    \"\"\"Create and manage an asyncio Watchman connection.\n\n    Example usage:\n     with await AIOClient.from_socket() as client:\n         res = await client.query(...)\n         # ... use res ...\n         await client.query(\n             'subscribe',\n             root_dir,\n             sub_name,\n             {expression: ..., ...},\n         )\n         while True:\n             sub_update = await client.get_subscription(sub_name, root_dir)\n             # ... process sub_update ...\n    \"\"\"\n\n    # Don't call this directly use ::from_socket() instead.\n    def __init__(self, connection):\n        self.connection = connection\n        self.log_queue = asyncio.Queue()\n        self.sub_by_root = {}\n        self.bilateral_response_queue = asyncio.Queue()\n        self.receive_task = None\n        self.receive_task_exception = None\n        self._closed = False\n\n    def __enter__(self):\n        return self\n\n    def __exit__(self, type, value, traceback):\n        self.close()\n        return False\n\n    async def receive_bilateral_response(self):\n        \"\"\"Receive the response to a request made to the Watchman service.\"\"\"\n\n        self._check_receive_loop()\n        resp = await self.bilateral_response_queue.get()\n        self._check_error(resp)\n        return resp\n\n    async def query(self, *args):\n        \"\"\"Send a query to the Watchman service and return the response.\"\"\"\n\n        self._check_receive_loop()\n        try:\n            await self.connection.send(args)\n            return await self.receive_bilateral_response()\n        except CommandError as ex:\n            ex.setCommand(args)\n            raise ex\n\n    async def capability_check(self, optional=None, required=None):\n        \"\"\"Perform a server capability check.\"\"\"\n\n        self._check_receive_loop()\n        # If the returned response is an error, self.query will raise an error\n        await self.query(\n            \"version\", {\"optional\": optional or [], \"required\": required or []}\n        )\n\n    async def get_subscription(self, name, root):\n        \"\"\"Retrieve the data associated with a named subscription\n\n        Returns None if there is no data associated with `name`\n\n        If root is not None, then only return the subscription\n        data that matches both root and name.  When used in this way,\n        remove processing impacts both the unscoped and scoped stores\n        for the subscription data.\n        \"\"\"\n        self._check_receive_loop()\n        self._ensure_subscription_queue_exists(name, root)\n        res = await self.sub_by_root[root][name].get()\n        self._check_error(res)\n        return res\n\n    async def pop_log(self):\n        \"\"\"Get one log from the log queue.\"\"\"\n        self._check_receive_loop()\n        res = self.log_queue.get()\n        self._check_error(res)\n        return res\n\n    def close(self):\n        \"\"\"Close the underlying connection.\"\"\"\n        self._closed = True\n        if self.receive_task:\n            self.receive_task.cancel()\n        if self.connection:\n            self.connection.close()\n\n    def enable_receiving(self, loop=None):\n        \"\"\"Schedules the receive loop to run on the given loop.\"\"\"\n        self.receive_task = asyncio.ensure_future(self._receive_loop(), loop=loop)\n\n        def do_if_done(fut):\n            try:\n                fut.result()\n            except asyncio.CancelledError:\n                pass\n            except Exception as ex:\n                self.receive_task_exception = ex\n            self.receive_task = None\n\n        self.receive_task.add_done_callback(do_if_done)\n\n    @classmethod\n    async def from_socket(cls, sockname: typing.Optional[str] = None) -> \"AIOClient\":\n        \"\"\"Create a new AIOClient using Unix transport and BSER Codec\n        connecting to the specified socket. If the specified socket is None,\n        then resolve the socket path automatically.\n\n        This method also schedules the receive loop to run on the event loop.\n\n        This method is a coroutine.\"\"\"\n        if not sockname:\n            sockname = await _resolve_sockname()\n        transport = AsyncUnixSocketTransport()\n        await transport.activate(sockname=sockname)\n        connection = AsyncBserCodec(transport)\n        obj = cls(connection)\n        obj.enable_receiving()\n        return obj\n\n    async def _receive_loop(self):\n        \"\"\"Receive the response to a request made to the Watchman service.\n\n        Note that when trying to receive a PDU from the Watchman service,\n        we might get a unilateral response to a subscription or log, so these\n        are processed and queued up for later retrieval. This function only\n        returns when a non-unilateral response is received.\"\"\"\n\n        try:\n            while True:\n                response = await self.connection.receive()\n                if self._is_unilateral(response):\n                    await self._process_unilateral_response(response)\n                else:\n                    await self.bilateral_response_queue.put(response)\n        except Exception as ex:\n            await self._broadcast_exception(ex)\n            # We may get a cancel exception on close, so don't close again.\n            if not self._closed:\n                self.close()\n\n    async def _broadcast_exception(self, ex):\n        await self.bilateral_response_queue.put(ex)\n        await self.log_queue.put(ex)\n        for root in self.sub_by_root.values():\n            for sub_queue in root.values():\n                await sub_queue.put(ex)\n\n    def _check_error(self, res):\n        if isinstance(res, Exception):\n            raise res\n        if \"error\" in res:\n            raise CommandError(res[\"error\"])\n\n    def _check_receive_loop(self):\n        if self._closed:\n            raise Exception(\"Connection has been closed, make a new one to reconnect.\")\n        if self.receive_task is None:\n            raise ReceiveLoopError(\"Receive loop was not started.\")\n\n    def _is_unilateral(self, res):\n        return res.get(\"unilateral\") or \"subscription\" in res or \"log\" in res\n\n    def _ensure_subscription_queue_exists(self, name, root):\n        # Note this function must be called from an async function on only one\n        # event loop.\n        self.sub_by_root.setdefault(root, {}).setdefault(name, asyncio.Queue())\n\n    async def _process_unilateral_response(self, response):\n        if \"log\" in response:\n            await self.log_queue.put(response[\"log\"])\n\n        elif \"subscription\" in response:\n            sub = response[\"subscription\"]\n            root = os.path.normcase(response[\"root\"])\n            self._ensure_subscription_queue_exists(sub, root)\n            await self.sub_by_root[root][sub].put(response)\n\n        elif self._is_unilateral(response):\n            raise WatchmanError(\"Unknown unilateral response: \" + str(response))\n\n        else:\n            raise WatchmanError(\"Not a unilateral response: \" + str(response))\n"
  },
  {
    "path": "watchman/python/setup.py",
    "content": "#!/usr/bin/env python\n# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nfrom setuptools import Extension, setup\n\nsetup(\n    packages=[\"pywatchman\"],\n    ext_modules=[\n        Extension(\n            \"pywatchman.bser\",\n            sources=[\"pywatchman/bsermodule.c\", \"pywatchman/bser.c\"],\n            include_dirs=[\"./pywatchman\"],\n        )\n    ],\n    zip_safe=True,\n    scripts=[\n        \"bin/watchman-make\",\n        \"bin/watchman-wait\",\n        \"bin/watchman-replicate-subscription\",\n    ],\n    test_suite=\"tests\",\n)\n"
  },
  {
    "path": "watchman/python/tests/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:python_unittest.bzl\", \"python_unittest\")\n\noncall(\"scm_client_infra\")\n\npython_unittest(\n    name = \"tests\",\n    srcs = glob([\"*.py\"]),\n    compatible_with = [\n        \"ovr_config//os:linux\",\n        \"ovr_config//os:macos\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//watchman/python/pywatchman:pywatchman\",\n    ],\n)\n"
  },
  {
    "path": "watchman/python/tests/__init__.py",
    "content": ""
  },
  {
    "path": "watchman/python/tests/tests.py",
    "content": "#!/usr/bin/env python\n# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# pyre-unsafe\n\n\nimport inspect\nimport os\nimport struct\nimport sys\nimport tempfile\nimport unittest\nimport uuid\n\nfrom pywatchman import (\n    bser,\n    client,\n    pybser,\n    SocketConnectError,\n    SocketTimeout,\n    Transport,\n    WatchmanError,\n)\n\n\n# pyre-fixme[16]: Module `pywatchman` has no attribute `bser`.\nif os.path.basename(bser.__file__) == \"pybser.py\":\n    raise Exception(\n        \"bser module resolved to pybser! Something is broken in your build. __file__={!r}, sys.path={!r}\".format(\n            # pyre-fixme[16]: Module `pywatchman` has no attribute `bser`.\n            bser.__file__,\n            sys.path,\n        )\n    )\n\nPILE_OF_POO = \"\\U0001f4a9\"\nNON_UTF8_STRING = b\"\\xff\\xff\\xff\"\n\n\nclass TestSocketTimeout(unittest.TestCase):\n    def test_exception_handling(self):\n        try:\n            raise SocketTimeout(\"should not raise\")\n        except WatchmanError:\n            pass\n\n\nclass TestTransportErrorHandling(unittest.TestCase):\n    def test_transport_error(self):\n        buf = '{\"foo\":\"bar\"}'\n        failAfterBytesRead = 5\n\n        class FakeFailingTransport(Transport):\n            def __init__(self, sockpath, timeout):\n                self.readBuf = buf\n                self.readBufPos = 0\n                self.writeBuf = []\n                self.closed = False\n\n            def close(self):\n                self.closed = True\n\n            def readBytes(self, size):\n                readEnd = self.readBufPos + size\n                if readEnd > failAfterBytesRead:\n                    raise IOError(23, \"fnord\")\n                elif readEnd > len(self.readBuf):\n                    return \"\"\n                read = self.readBuf[self.readBufPos : self.readBufPos + size]\n                self.readBufPos += size\n                return read\n\n            def write(self, buf):\n                self.writeBuf.extend(buf)\n\n        c = client(\n            sockpath=\"\",\n            transport=FakeFailingTransport,\n            sendEncoding=\"json\",\n            recvEncoding=\"json\",\n        )\n        try:\n            c.query(\"foobarbaz\")\n            self.assertTrue(False, \"expected a WatchmanError\")\n        except WatchmanError as e:\n            self.assertIn(\n                \"I/O error communicating with watchman daemon: \"\n                + \"errno=23 errmsg=fnord, while executing \"\n                + \"('foobarbaz',)\",\n                str(e),\n            )\n        except Exception as e:\n            self.assertTrue(False, \"expected a WatchmanError, but got \" + str(e))\n\n\nclass TestLocalTransport(unittest.TestCase):\n    def test_missing_socket_file_raises_connect_error(self):\n        socket_path = self.make_deleted_socket_path()\n        c = client(sockpath=socket_path, transport=\"local\")\n        with self.assertRaises(SocketConnectError):\n            with c:\n                pass\n\n    def make_deleted_socket_path(self):\n        if os.name == \"nt\":\n            path = self.make_deleted_windows_socket_path()\n        else:\n            path = self.make_deleted_unix_socket_path()\n        self.assertFalse(os.path.exists(path))\n        return path\n\n    def make_deleted_windows_socket_path(self):\n        return \"\\\\\\\\.\\\\pipe\\\\pywatchman-test-{}\".format(uuid.uuid1().hex)\n\n    def make_deleted_unix_socket_path(self):\n        temp_dir = tempfile.mkdtemp()\n        return os.path.join(temp_dir, \"socket\")\n\n\ndef expand_bser_mods(test_class):\n    \"\"\"\n    A decorator function used to create a class for bser and pybser\n    variants of the test.\n    \"\"\"\n\n    # We do some rather hacky things here to define new test class types\n    # in our caller's scope.  This is needed so that the unittest TestLoader\n    # will find the subclasses we define.\n    caller_scope = inspect.currentframe().f_back.f_locals\n\n    flavors = [(bser, \"Bser\"), (pybser, \"PyBser\")]\n    for mod, suffix in flavors:\n\n        def make_class(mod, suffix):\n            subclass_name = test_class.__name__ + suffix\n\n            # Define a new class that derives from the input class\n            class MatrixTest(test_class):\n                def init_bser_mod(self):\n                    self.bser_mod = mod\n\n            # Set the name and module information on our new subclass\n            MatrixTest.__name__ = subclass_name\n            MatrixTest.__qualname__ = subclass_name\n            MatrixTest.__module__ = test_class.__module__\n\n            caller_scope[subclass_name] = MatrixTest\n\n        make_class(mod, suffix)\n\n\nclass FakeFile:\n    def __init__(self, data):\n        self._data = data\n        self._ptr = 0\n\n    def readinto(self, buf):\n        l = len(buf)\n        if len(self._data) - self._ptr < l:\n            return None\n        buf[:] = self._data[self._ptr : self._ptr + l]\n        self._ptr += l\n        return l\n\n\n@expand_bser_mods\nclass TestBSERDump(unittest.TestCase):\n    def setUp(self):\n        self.init_bser_mod()\n\n    def raw(self, structured_input, bser_output):\n        enc = self.bser_mod.dumps(structured_input)\n        self.assertEqual(enc, bser_output)\n\n    def roundtrip(self, val, mutable=True, value_encoding=None, value_errors=None):\n        enc = self.bser_mod.dumps(val)\n        # print(\"# %s  -->  %s\" % (repr(val),\n        #                         binascii.hexlify(enc).decode('ascii')))\n        dec = self.bser_mod.loads(\n            enc, mutable, value_encoding=value_encoding, value_errors=value_errors\n        )\n        self.assertEqual(val, dec)\n\n        fp = FakeFile(enc)\n        dec = self.bser_mod.load(\n            fp, mutable, value_encoding=value_encoding, value_errors=value_errors\n        )\n        self.assertEqual(val, dec)\n\n    def munged(self, val, munged, value_encoding=None, value_errors=None):\n        enc = self.bser_mod.dumps(val)\n        # print(\"# %s  -->  %s\" % (repr(val),\n        #                         binascii.hexlify(enc).decode('ascii')))\n        dec = self.bser_mod.loads(\n            enc, value_encoding=value_encoding, value_errors=value_errors\n        )\n        self.assertEqual(munged, dec)\n\n    def test_raw(self):\n        self.raw(\n            {\"name\": \"Tom\"},\n            b\"\\x00\\x01\\x05\\x10\\x00\\x00\\x00\\x01\\x03\\x01\\x02\\x03\\x04name\\x02\\x03\\x03Tom\",\n        )\n        self.raw(\n            {\"names\": [\"Tom\", \"Jerry\"]},\n            b\"\\x00\\x01\\x05\\x1c\\x00\\x00\\x00\\x01\\x03\\x01\\x02\\x03\\x05names\\x00\"\n            b\"\\x03\\x02\\x02\\x03\\x03Tom\\x02\\x03\\x05Jerry\",\n        )\n        self.raw(\n            [\"Tom\", \"Jerry\"],\n            b\"\\x00\\x01\\x05\\x11\\x00\\x00\\x00\\x00\\x03\\x02\\x02\\x03\\x03Tom\\x02\\x03\\x05Jerry\",\n        )\n        self.raw(\n            [1, 123, 12345, 1234567, 12345678912345678],\n            b\"\\x00\\x01\\x05\\x18\\x00\\x00\\x00\\x00\\x03\\x05\\x03\\x01\\x03{\\x0490\"\n            b\"\\x05\\x87\\xd6\\x12\\x00\\x06N\\xd6\\x14^T\\xdc+\\x00\",\n        )\n\n    def test_int(self):\n        self.roundtrip(1)\n        self.roundtrip(0x100)\n        self.roundtrip(0x10000)\n        self.roundtrip(0x10000000)\n        self.roundtrip(0x1000000000)\n\n    def test_negative_int(self):\n        self.roundtrip(-0x80)\n        self.roundtrip(-0x8000)\n        self.roundtrip(-0x80000000)\n        self.roundtrip(-0x8000000000000000)\n\n    def test_float(self):\n        self.roundtrip(1.5)\n\n    def test_bool(self):\n        self.roundtrip(True)\n        self.roundtrip(False)\n\n    def test_none(self):\n        self.roundtrip(None)\n\n    def test_string(self):\n        self.roundtrip(b\"hello\")\n\n        # For Python 3, here we can only check that a Unicode string goes in,\n        # not that a Unicode string comes out.\n        self.munged(\"Hello\", b\"Hello\")\n\n        self.roundtrip(\"Hello\", value_encoding=\"utf8\")\n        self.roundtrip(\"Hello\", value_encoding=\"ascii\")\n        self.roundtrip(\"Hello\" + PILE_OF_POO, value_encoding=\"utf8\")\n\n        # can't use the with form here because Python 2.6\n        self.assertRaises(\n            UnicodeDecodeError,\n            self.roundtrip,\n            \"Hello\" + PILE_OF_POO,\n            value_encoding=\"ascii\",\n        )\n        self.munged(\n            \"Hello\" + PILE_OF_POO,\n            \"Hello\",\n            value_encoding=\"ascii\",\n            value_errors=\"ignore\",\n        )\n        self.roundtrip(b\"hello\" + NON_UTF8_STRING)\n        self.assertRaises(\n            UnicodeDecodeError,\n            self.roundtrip,\n            b\"hello\" + NON_UTF8_STRING,\n            value_encoding=\"utf8\",\n        )\n        self.munged(\n            b\"hello\" + NON_UTF8_STRING,\n            \"hello\",\n            value_encoding=\"utf8\",\n            value_errors=\"ignore\",\n        )\n        # TODO: test non-UTF8 strings with surrogateescape in Python 3\n\n        ustr = \"\\xe4\\xf6\\xfc\"\n        self.munged(ustr, ustr.encode(\"utf-8\"))\n\n    def test_list(self):\n        self.roundtrip([1, 2, 3])\n        self.roundtrip([1, b\"helo\", 2.5, False, None, True, 3])\n\n    def test_tuple(self):\n        self.munged((1, 2, 3), [1, 2, 3])\n        self.roundtrip((1, 2, 3), mutable=False)\n\n    def test_dict(self):\n        self.roundtrip({\"hello\": b\"there\"})\n        self.roundtrip({\"hello\": \"there\"}, value_encoding=\"utf8\")\n        self.roundtrip({\"hello\": \"there\"}, value_encoding=\"ascii\")\n        self.roundtrip({\"hello\": \"there\" + PILE_OF_POO}, value_encoding=\"utf8\")\n\n        # can't use the with form here because Python 2.6\n        self.assertRaises(\n            UnicodeDecodeError,\n            self.roundtrip,\n            {\"hello\": \"there\" + PILE_OF_POO},\n            value_encoding=\"ascii\",\n        )\n        self.munged(\n            {\"Hello\": \"there\" + PILE_OF_POO},\n            {\"Hello\": \"there\"},\n            value_encoding=\"ascii\",\n            value_errors=\"ignore\",\n        )\n        self.roundtrip({\"Hello\": b\"there\" + NON_UTF8_STRING})\n        self.assertRaises(\n            UnicodeDecodeError,\n            self.roundtrip,\n            {\"hello\": b\"there\" + NON_UTF8_STRING},\n            value_encoding=\"utf8\",\n        )\n        self.munged(\n            {\"Hello\": b\"there\" + NON_UTF8_STRING},\n            {\"Hello\": \"there\"},\n            value_encoding=\"utf8\",\n            value_errors=\"ignore\",\n        )\n\n        obj = self.bser_mod.loads(self.bser_mod.dumps({\"hello\": b\"there\"}), False)\n        self.assertEqual(1, len(obj))\n        self.assertEqual(b\"there\", obj.hello)\n        self.assertEqual(b\"there\", obj[\"hello\"])\n        self.assertEqual(b\"there\", obj[0])\n        # make sure this doesn't crash\n        self.assertRaises(Exception, lambda: obj[45.25])\n        (hello,) = obj  # sequence/list assignment\n        self.assertEqual(b\"there\", hello)\n\n    def assertItemAttributes(self, dictish, attrish):\n        self.assertEqual(len(dictish), len(attrish))\n        # Use items for compatibility across Python 2 and 3.\n        for k, v in dictish.items():\n            self.assertEqual(v, getattr(attrish, k))\n\n    def test_template(self):\n        # since we can't generate the template bser output, here's a\n        # a blob from the C test suite in watchman\n        templ = (\n            b\"\\x00\\x01\\x03\\x28\"\n            + b\"\\x0b\\x00\\x03\\x02\\x02\\x03\\x04\\x6e\\x61\\x6d\\x65\\x02\"\n            + b\"\\x03\\x03\\x61\\x67\\x65\\x03\\x03\\x02\\x03\\x04\\x66\\x72\"\n            + b\"\\x65\\x64\\x03\\x14\\x02\\x03\\x04\\x70\\x65\\x74\\x65\\x03\"\n            + b\"\\x1e\\x0c\\x03\\x19\"\n        )\n        dec = self.bser_mod.loads(templ)\n        exp = [\n            {\"name\": b\"fred\", \"age\": 20},\n            {\"name\": b\"pete\", \"age\": 30},\n            {\"name\": None, \"age\": 25},\n        ]\n        self.assertEqual(exp, dec)\n        res = self.bser_mod.loads(templ, False)\n\n        for i in range(0, len(exp)):\n            self.assertItemAttributes(exp[i], res[i])\n\n    def test_pdu_info(self):\n        enc = self.bser_mod.dumps(1)\n        DEFAULT_BSER_VERSION = 1\n        DEFAULT_BSER_CAPABILITIES = 0\n        self.assertEqual(\n            (DEFAULT_BSER_VERSION, DEFAULT_BSER_CAPABILITIES, len(enc)),\n            self.bser_mod.pdu_info(enc),\n        )\n\n        # try a bigger one; prove that we get the correct length\n        # even though we receive just a portion of the complete\n        # data\n        enc = self.bser_mod.dumps([1, 2, 3, \"hello there, much larger\"])\n        self.assertEqual(\n            (DEFAULT_BSER_VERSION, DEFAULT_BSER_CAPABILITIES, len(enc)),\n            self.bser_mod.pdu_info(enc[0:7]),\n        )\n\n    def test_pdu_len(self):\n        enc = self.bser_mod.dumps(1)\n        self.assertEqual(len(enc), self.bser_mod.pdu_len(enc))\n\n        # try a bigger one; prove that we get the correct length\n        # even though we receive just a portion of the complete\n        # data\n        enc = self.bser_mod.dumps([1, 2, 3, \"hello there, much larger\"])\n        self.assertEqual(len(enc), self.bser_mod.pdu_len(enc[0:7]))\n\n    def test_garbage(self):\n        # can't use the with form here because Python 2.6\n        self.assertRaises(ValueError, self.bser_mod.loads, b\"\\x00\\x01\\n\")\n        self.assertRaises(ValueError, self.bser_mod.loads, b\"\\x00\\x01\\x04\\x01\\x00\\x02\")\n        self.assertRaises(ValueError, self.bser_mod.loads, b\"\\x00\\x01\\x07\")\n        self.assertRaises(ValueError, self.bser_mod.loads, b\"\\x00\\x01\\x03\\x01\\xff\")\n\n        self.assertRaises(ValueError, self.bser_mod.pdu_info, b\"\\x00\\x02\")\n\n    def test_string_lengths(self):\n        self.roundtrip(b\"\")\n\n        self.roundtrip(b\"a\" * ((1 << 8) - 2))\n        self.roundtrip(b\"a\" * ((1 << 8) - 1))\n        self.roundtrip(b\"a\" * ((1 << 8) + 0))\n        self.roundtrip(b\"a\" * ((1 << 8) + 1))\n\n        self.roundtrip(b\"a\" * ((1 << 16) - 2))\n        self.roundtrip(b\"a\" * ((1 << 16) - 1))\n        self.roundtrip(b\"a\" * ((1 << 16) + 0))\n        self.roundtrip(b\"a\" * ((1 << 16) + 1))\n\n        self.roundtrip(b\"a\" * ((1 << 24) - 2))\n        self.roundtrip(b\"a\" * ((1 << 24) - 1))\n        self.roundtrip(b\"a\" * ((1 << 24) + 0))\n        self.roundtrip(b\"a\" * ((1 << 24) + 1))\n\n    def test_big_string_lengths(self):\n        # These tests take a couple dozen seconds with the Python\n        # implementation of bser. Keep them in a separate test so we can run\n        # them conditionally.\n        self.assertRaises(MemoryError, self.bser_mod.dumps, b\"a\" * ((1 << 32) - 2))\n        self.assertRaises(MemoryError, self.bser_mod.dumps, b\"a\" * ((1 << 32) - 1))\n        self.assertRaises(MemoryError, self.bser_mod.dumps, b\"a\" * ((1 << 32) + 0))\n        self.assertRaises(MemoryError, self.bser_mod.dumps, b\"a\" * ((1 << 32) + 1))\n\n    def test_fuzz_examples(self):\n        def t(ex: bytes):\n            try:\n                document = b\"\\x00\\x01\\x05\" + struct.pack(\"@i\", len(ex)) + ex\n                print(\"encoded\", document)\n                # pyre-fixme[16]: `TestBSERDump` has no attribute `bser_mod`.\n                self.bser_mod.loads(document)\n            except Exception:\n                # Exceptions are okay - abort is not.\n                pass\n\n        t(b\"\\x03\\x00\")\n        t(b\"\\x02\")\n        t(b\"\\x07\")\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "watchman/query/FileResult.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/FileResult.h\"\n\nnamespace watchman {\n\nFileResult::~FileResult() {}\n\nstd::optional<DType> FileResult::dtype() {\n  auto statInfo = stat();\n  if (!statInfo.has_value()) {\n    return std::nullopt;\n  }\n  return statInfo->dtype();\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/FileResult.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <optional>\n#include <vector>\n#include \"watchman/Clock.h\"\n#include \"watchman/fs/FileInformation.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nstruct NotSymlink {};\nusing ResolvedSymlink = std::variant<NotSymlink, w_string>;\n\n// A View-independent way of accessing file properties in the\n// query engine.  A FileResult is not intended to be accessed\n// concurrently from multiple threads and may be unsafe to\n// be used in that manner (there is no implied locking).\nclass FileResult {\n public:\n  virtual ~FileResult();\n\n  // Maybe returns the file information.\n  // Returns folly::none if the file information is not yet known.\n  virtual std::optional<FileInformation> stat() = 0;\n\n  // Returns the stat.st_atime field\n  virtual std::optional<struct timespec> accessedTime() = 0;\n\n  // Returns the stat.st_mtime field\n  virtual std::optional<struct timespec> modifiedTime() = 0;\n\n  // Returns the stat.st_ctime field\n  virtual std::optional<struct timespec> changedTime() = 0;\n\n  // Returns the size of the file in bytes, as reported in\n  // the stat.st_size field.\n  virtual std::optional<size_t> size() = 0;\n\n  // Returns the name of the file in its containing dir\n  virtual w_string_piece baseName() = 0;\n  // Returns the name of the containing dir relative to the\n  // VFS root\n  virtual w_string_piece dirName() = 0;\n\n  // Maybe return the file existence status.\n  // Returns folly::none if the information is not currently known.\n  virtual std::optional<bool> exists() = 0;\n\n  // Returns the symlink target\n  virtual std::optional<ResolvedSymlink> readLink() = 0;\n\n  // Maybe return the change time.\n  // Returns folly::none if ctime is not currently known\n  virtual std::optional<ClockStamp> ctime() = 0;\n\n  // Maybe return the observed time.\n  // Returns folly::none if otime is not currently known\n  virtual std::optional<ClockStamp> otime() = 0;\n\n  // Returns the SHA-1 hash of the file contents\n  using ContentHash = std::array<uint8_t, 20>;\n  virtual std::optional<ContentHash> getContentSha1() = 0;\n\n  // Maybe return the dtype.\n  // Returns folly::none if the dtype is not currently known.\n  // Returns DType::Unknown if we have dtype data but it doesn't\n  // tell us the dtype (this is common on some older filesystems\n  // on linux).\n  virtual std::optional<DType> dtype();\n\n  // A bitset of Property values\n  using Properties = uint_least16_t;\n\n  // Represents one of the FileResult fields.\n  // Values are such that these can be bitwise OR'd to\n  // produce a value of type `Properties` representing\n  // multiple properties\n  enum Property : Properties {\n    // No specific fields required\n    None = 0,\n    // The dirName() and/or baseName() methods will be called\n    Name = 1 << 0,\n    // Need the mtime/ctime data returned by stat(2).\n    StatTimeStamps = 1 << 1,\n    // Need only enough information to distinguish between\n    // file types, not the full mode information.\n    FileDType = 1 << 2,\n    // The ctime() method will be called\n    CTime = 1 << 3,\n    // The otime() method will be called\n    OTime = 1 << 4,\n    // The getContentSha1() method will be called\n    ContentSha1 = 1 << 5,\n    // The exists() method will be called\n    Exists = 1 << 6,\n    // Will need size information.\n    Size = 1 << 7,\n    // the readLink() method will be called\n    SymlinkTarget = 1 << 8,\n    // Need full stat metadata\n    FullFileInformation = 1 << 9,\n  };\n\n  // Perform a batch fetch to fill in some missing data.\n  // `files` is the set of FileResult instances that need more\n  // data; their individual neededProperties_ values describes\n  // the set of data that is needed.\n  // `files` are assumed to all be of the same FileResult descendant,\n  // and this is guaranteed by the current implementation.\n  // When batchFetchProperties is called, it is invoked on one of\n  // the elements of `files`.\n  // The expectation is that the implementation of `batchFetchProperties`\n  // will perform whatever actions are necessary to ensure that\n  // a subsequent attempt to evaluate `neededProperties_` against each\n  // member of `files` will not result in adding any of\n  // those `FileResult` instances in being added to a deferred\n  // batch.\n  // The implementation of batchFetchProperties must clear\n  // neededProperties_ to None.\n  virtual void batchFetchProperties(\n      const std::vector<std::unique_ptr<FileResult>>& files) = 0;\n\n protected:\n  // To be called by one of the FileResult accessors when it needs\n  // to record which properties are required to satisfy the request.\n  void accessorNeedsProperties(Properties properties) {\n    neededProperties_ |= properties;\n  }\n\n  // Clear any recorded needed properties\n  void clearNeededProperties() {\n    neededProperties_ = Property::None;\n  }\n\n  // Return the set of needed properties\n  Properties neededProperties() const {\n    return neededProperties_;\n  }\n\n private:\n  // The implementation of FileResult will set appropriate\n  // bits in neededProperties_ when its accessors are called\n  // and the associated data is not available.\n  Properties neededProperties_{Property::None};\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/GlobEscaping.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/GlobEscaping.h\"\n#include <string>\n\nnamespace watchman {\nw_string convertLiteralPathToGlob(w_string_piece literal) {\n  std::string pattern;\n  pattern.reserve(literal.size());\n  for (auto ch : literal.view()) {\n    switch (ch) {\n      case '\\\\':\n      case '*':\n      case '[':\n      case '?':\n        pattern.push_back('\\\\');\n        break;\n    }\n    pattern.push_back(ch);\n  }\n  return w_string{pattern};\n}\n\nw_string convertNoEscapeGlobToGlob(w_string_piece noescapePattern) {\n  std::string pattern;\n  pattern.reserve(noescapePattern.size());\n  for (auto ch : noescapePattern.view()) {\n    switch (ch) {\n      case '\\\\':\n        pattern.push_back('\\\\');\n        break;\n    }\n    pattern.push_back(ch);\n  }\n  return w_string{pattern};\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/GlobEscaping.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n/**\n * Convert a path to a glob pattern that matches that path literally.\n * NOTE: `/` is the only allowed separator. `\\` is treated as a literal\n * character and NOT a separator, and is therefore escaped.\n */\nw_string convertLiteralPathToGlob(w_string_piece literal);\n\n/**\n * Convert a glob pattern written for `noescape: true` to a glob pattern that\n * can be used without the `noescape` flag.\n */\nw_string convertNoEscapeGlobToGlob(w_string_piece noescapePattern);\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/GlobTree.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/GlobTree.h\"\n\n#include <fmt/core.h>\n#include <folly/Range.h>\n\nnamespace watchman {\n\nGlobTree::GlobTree(const char* pattern, uint32_t pattern_len)\n    : pattern(pattern, pattern_len),\n      is_leaf(0),\n      had_specials(0),\n      is_doublestar(0) {}\n\nstd::vector<std::string> GlobTree::unparse() const {\n  std::vector<std::string> result;\n  unparse_into(result, \"\");\n  return result;\n}\n\n// Performs the heavy lifting for reversing the parse process\n// to compute a list of glob strings.\n// `globStrings` is the target array for the glob expressions.\n// `relative` is the glob-expression-so-far that the current\n// node will append to when it produces its glob string output.\n// This function recurses down the glob tree calling unparse_into\n// on its children.\nvoid GlobTree::unparse_into(\n    std::vector<std::string>& globStrings,\n    std::string_view relative) const {\n  auto needSlash =\n      !relative.empty() && !folly::StringPiece{relative}.endsWith('/');\n  auto optSlash = needSlash ? \"/\" : \"\";\n\n  auto join = [&]() -> std::string {\n    return fmt::format(\"{}{}{}\", relative, optSlash, pattern);\n  };\n\n  // If there are no children of this node, it is effectively a leaf\n  // node. Leaves correspond to a concrete glob string that we need\n  // to emit, so here's where we do that.\n  if (is_leaf || children.size() + doublestar_children.size() == 0) {\n    globStrings.push_back(join());\n  }\n\n  for (auto& child : children) {\n    child->unparse_into(globStrings, join());\n  }\n  for (auto& child : doublestar_children) {\n    child->unparse_into(globStrings, join());\n  }\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/GlobTree.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <string>\n#include <vector>\n\nnamespace watchman {\n\n/**\n * A node in the tree of node matching rules.\n */\nstruct GlobTree {\n  std::string pattern;\n\n  // The list of child rules, excluding any ** rules\n  std::vector<std::unique_ptr<GlobTree>> children;\n  // The list of ** rules that exist under this node\n  std::vector<std::unique_ptr<GlobTree>> doublestar_children;\n\n  unsigned is_leaf : 1; // if true, generate files for matches\n  unsigned had_specials : 1; // if false, can do simple string compare\n  unsigned is_doublestar : 1; // pattern begins with **\n\n  GlobTree(const char* pattern, uint32_t pattern_len);\n\n  // Produces a list of globs from the glob tree, effectively\n  // performing the reverse of the original parsing operation.\n  std::vector<std::string> unparse() const;\n\n  // A helper method for unparse\n  void unparse_into(\n      std::vector<std::string>& globStrings,\n      std::string_view relative) const;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/LocalFileResult.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/LocalFileResult.h\"\n#include \"watchman/ContentHash.h\"\n\nnamespace watchman {\n\nLocalFileResult::LocalFileResult(\n    w_string fullPath,\n    ClockStamp clock,\n    CaseSensitivity caseSensitivity)\n    : fullPath_(std::move(fullPath)),\n      clock_(clock),\n      caseSensitivity_(caseSensitivity) {}\n\nvoid LocalFileResult::getInfo() {\n  if (info_.has_value()) {\n    return;\n  }\n  try {\n    info_ = getFileInformation(fullPath_.c_str(), caseSensitivity_);\n    exists_ = true;\n  } catch (const std::exception&) {\n    // Treat any error as effectively deleted\n    exists_ = false;\n    info_ = FileInformation::makeDeletedFileInformation();\n  }\n}\n\nstd::optional<FileInformation> LocalFileResult::stat() {\n  if (!info_.has_value()) {\n    accessorNeedsProperties(FileResult::Property::FullFileInformation);\n    return std::nullopt;\n  }\n  return info_;\n}\n\nstd::optional<size_t> LocalFileResult::size() {\n  if (!info_.has_value()) {\n    accessorNeedsProperties(FileResult::Property::Size);\n    return std::nullopt;\n  }\n  return info_->size;\n}\n\nstd::optional<struct timespec> LocalFileResult::accessedTime() {\n  if (!info_.has_value()) {\n    accessorNeedsProperties(FileResult::Property::StatTimeStamps);\n    return std::nullopt;\n  }\n  return info_->atime;\n}\n\nstd::optional<struct timespec> LocalFileResult::modifiedTime() {\n  if (!info_.has_value()) {\n    accessorNeedsProperties(FileResult::Property::StatTimeStamps);\n    return std::nullopt;\n  }\n  return info_->mtime;\n}\n\nstd::optional<struct timespec> LocalFileResult::changedTime() {\n  if (!info_.has_value()) {\n    accessorNeedsProperties(FileResult::Property::StatTimeStamps);\n    return std::nullopt;\n  }\n  return info_->ctime;\n}\n\nw_string_piece LocalFileResult::baseName() {\n  return w_string_piece(fullPath_).baseName();\n}\n\nw_string_piece LocalFileResult::dirName() {\n  return w_string_piece(fullPath_).dirName();\n}\n\nstd::optional<bool> LocalFileResult::exists() {\n  if (!info_.has_value()) {\n    accessorNeedsProperties(FileResult::Property::Exists);\n    return std::nullopt;\n  }\n  return exists_;\n}\n\nstd::optional<ResolvedSymlink> LocalFileResult::readLink() {\n  if (symlinkTarget_.has_value()) {\n    return symlinkTarget_;\n  }\n  accessorNeedsProperties(FileResult::Property::SymlinkTarget);\n  return std::nullopt;\n}\n\nstd::optional<ClockStamp> LocalFileResult::ctime() {\n  return clock_;\n}\n\nstd::optional<ClockStamp> LocalFileResult::otime() {\n  return clock_;\n}\n\nstd::optional<FileResult::ContentHash> LocalFileResult::getContentSha1() {\n  if (contentSha1_.empty()) {\n    accessorNeedsProperties(FileResult::Property::ContentSha1);\n    return std::nullopt;\n  }\n  return contentSha1_.value();\n}\n\nvoid LocalFileResult::batchFetchProperties(\n    const std::vector<std::unique_ptr<FileResult>>& files) {\n  for (auto& f : files) {\n    auto localFile = dynamic_cast<LocalFileResult*>(f.get());\n    localFile->getInfo();\n\n    if (localFile->neededProperties() & FileResult::Property::SymlinkTarget) {\n      ResolvedSymlink target = NotSymlink{};\n      // If this file is not a symlink then we immediately yield a \"not a\n      // symlink\" rather than propagating an error. This behavior is relied\n      // upon by the field rendering code and checked in test_symlink.py.\n      if (localFile->info_->isSymlink()) {\n        target = readSymbolicLink(localFile->fullPath_.c_str());\n      }\n      localFile->symlinkTarget_ = target;\n    }\n\n    if (localFile->neededProperties() & FileResult::Property::ContentSha1) {\n      // TODO: find a way to reference a ContentHashCache instance\n      // that will work with !InMemoryView based views.\n      localFile->contentSha1_ = makeResultWith([&] {\n        return ContentHashCache::computeHashImmediate(\n            localFile->fullPath_.c_str());\n      });\n    }\n\n    localFile->clearNeededProperties();\n  }\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/LocalFileResult.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <variant>\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\n/**\n * A FileResult that exists on the local filesystem.\n * This differs from InMemoryFileResult in that we don't maintain any\n * long-lived persistent information about the file and that the methods of\n * this instance will query the local filesystem to discover the information as\n * it is accessed.\n * We do cache the results of any filesystem operations that we may perform\n * for the duration of the lifetime of a given LocalFileResult, but that\n * information is not shared beyond that lifetime.\n * FileResult objects are typically extremely short lived, existing between\n * the point in time at which a file is matched by a query and the time\n * at which the file is rendered into the results of the query.\n */\nclass LocalFileResult : public FileResult {\n public:\n  LocalFileResult(\n      w_string fullPath,\n      ClockStamp clock,\n      CaseSensitivity caseSensitivity);\n\n  // Returns stat-like information about this file.  If the file doesn't\n  // exist the stat information will be largely useless (it will be zeroed\n  // out), but will report itself as being a regular file.  This is fine\n  // today because the only source of LocalFileResult instances today is\n  // based on the list of files returned from source control, and scm\n  // of today only reports files, never dirs.\n  std::optional<watchman::FileInformation> stat() override;\n  std::optional<struct timespec> accessedTime() override;\n  std::optional<struct timespec> modifiedTime() override;\n  std::optional<struct timespec> changedTime() override;\n  std::optional<size_t> size() override;\n\n  // Returns the name of the file in its containing dir\n  w_string_piece baseName() override;\n  // Returns the name of the containing dir relative to the\n  // VFS root\n  w_string_piece dirName() override;\n  // Returns true if the file currently exists\n  std::optional<bool> exists() override;\n  // Returns the symlink target\n  std::optional<ResolvedSymlink> readLink() override;\n\n  std::optional<ClockStamp> ctime() override;\n  std::optional<ClockStamp> otime() override;\n\n  // Returns the SHA-1 hash of the file contents\n  std::optional<FileResult::ContentHash> getContentSha1() override;\n\n  void batchFetchProperties(\n      const std::vector<std::unique_ptr<FileResult>>& files) override;\n\n private:\n  void getInfo();\n  w_string getFullPath();\n\n  bool exists_{true};\n  std::optional<FileInformation> info_;\n  w_string fullPath_;\n  ClockStamp clock_;\n  CaseSensitivity caseSensitivity_;\n  std::optional<ResolvedSymlink> symlinkTarget_;\n  Result<FileResult::ContentHash> contentSha1_;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/Query.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/QueryExpr.h\"\n\nnamespace watchman {\n\nQuery::~Query() = default;\n\nbool Query::isFieldRequested(w_string_piece name) const {\n  for (auto& f : fieldList) {\n    if (f->name.piece() == name) {\n      return true;\n    }\n  }\n  return false;\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/Query.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <optional>\n#include \"watchman/ClientContext.h\"\n#include \"watchman/Clock.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nclass FileResult;\nstruct GlobTree;\nstruct QueryContext;\nclass QueryExpr;\n\nstruct QueryFieldRenderer {\n  w_string name;\n  std::optional<json_ref> (*make)(FileResult* file, const QueryContext* ctx);\n};\n\nclass QueryFieldList : public std::vector<QueryFieldRenderer*> {\n public:\n  /**\n   * Adds the specified field to the list of those requested by the query.\n   *\n   * Throws QueryParseError if the name is invalid.\n   */\n  void add(const w_string& name);\n};\n\nstruct QueryPath {\n  w_string name;\n  int depth;\n};\n\nstruct Query {\n  CaseSensitivity case_sensitive = CaseSensitivity::CaseInSensitive;\n  bool fail_if_no_saved_state = false;\n  bool empty_on_fresh_instance = false;\n  bool omit_changed_files = false;\n  bool dedup_results = false;\n  uint32_t bench_iterations = 0;\n\n  /**\n   * Optional full path to relative root, without and with trailing slash.\n   */\n  std::optional<w_string> relative_root;\n  w_string relative_root_slash;\n\n  std::optional<std::vector<QueryPath>> paths;\n\n  std::unique_ptr<GlobTree> glob_tree;\n  // Additional flags to pass to wildmatch in the glob_generator\n  int glob_flags = 0;\n\n  struct SettleTimeouts {\n    std::chrono::milliseconds settle_period;\n    std::chrono::milliseconds settle_timeout;\n  };\n\n  /**\n   * If set, the query will wait for a period of no new watcher events, up until\n   * the specified timeout.\n   */\n  std::optional<SettleTimeouts> settle_timeouts;\n\n  /**\n   * How long this query should attempt to wait for a cookie file to be\n   * observed.\n   *\n   * If zero, no syncing is performed.\n   */\n  std::chrono::milliseconds sync_timeout;\n\n  uint32_t lock_timeout = 0;\n\n  // We can't (and mustn't!) evaluate the clockspec\n  // fully until we execute query, because we have\n  // to evaluate named cursors and determine fresh\n  // instance at the time we execute\n  std::unique_ptr<ClockSpec> since_spec;\n\n  std::unique_ptr<QueryExpr> expr;\n\n  // The query that we parsed into this struct\n  std::optional<json_ref> query_spec;\n\n  QueryFieldList fieldList;\n\n  std::optional<w_string> request_id;\n  std::optional<w_string> subscriptionName;\n  ClientContext clientInfo{0, std::nullopt};\n\n  bool alwaysIncludeDirectories{false};\n\n  ~Query();\n\n  /** Returns true if the supplied name is contained in\n   * the parsed fieldList in this query */\n  bool isFieldRequested(w_string_piece name) const;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/QueryContext.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/QueryContext.h\"\n\n#include \"folly/stop_watch.h\"\n\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/eval.h\"\n#include \"watchman/query/parse.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/watchman_file.h\"\n\nusing namespace watchman;\n\nnamespace {\n\nconstexpr size_t kMaximumRenderBatchSize = 1024;\n\nstd::optional<json_ref> file_result_to_json(\n    const QueryFieldList& fieldList,\n    const std::unique_ptr<FileResult>& file,\n    const QueryContext* ctx) {\n  if (fieldList.size() == 1) {\n    return fieldList.front()->make(file.get(), ctx);\n  }\n  std::unordered_map<w_string, json_ref> value;\n  value.reserve(fieldList.size());\n\n  for (auto& f : fieldList) {\n    auto ele = f->make(file.get(), ctx);\n    if (!ele.has_value()) {\n      // Need data to be loaded\n      return std::nullopt;\n    }\n    value.insert_or_assign(f->name, std::move(ele.value()));\n  }\n  return json_object(std::move(value));\n}\n\n} // namespace\n\nvoid QueryContext::resetWholeName() {\n  wholename_.reset();\n}\n\nconst w_string& QueryContext::getWholeName() {\n  if (!wholename_) {\n    wholename_ = computeWholeName(file.get());\n  }\n  return *wholename_;\n}\n\nw_string QueryContext::computeWholeName(FileResult* file) const {\n  uint32_t name_start;\n\n  if (query->relative_root) {\n    // At this point every path should start with the relative root, so this is\n    // legal\n    name_start = query->relative_root->size() + 1;\n  } else {\n    name_start = root->root_path.size() + 1;\n  }\n\n  // Record the name relative to the root\n  auto parent = file->dirName();\n  if (name_start > parent.size()) {\n    return file->baseName().asWString();\n  }\n  parent.advance(name_start);\n  return w_string::build(parent, \"/\", file->baseName());\n}\n\nbool QueryContext::dirMatchesRelativeRoot(w_string_piece fullDirectoryPath) {\n  if (!query->relative_root) {\n    return true;\n  }\n\n  // \"matches relative root\" here can be either an exact match for\n  // the relative root, or some path below it, so we compare against\n  // both.  relative_root_slash is a precomputed version of relative_root\n  // with the trailing slash to make this comparison very slightly cheaper\n  // and less awkward to express in code.\n  return fullDirectoryPath == query->relative_root ||\n      fullDirectoryPath.startsWith(query->relative_root_slash);\n}\n\nbool QueryContext::fileMatchesRelativeRoot(w_string_piece fullFilePath) {\n  // dirName() scans the string contents; avoid it with this cheap test\n  if (!query->relative_root) {\n    return true;\n  }\n\n  return dirMatchesRelativeRoot(fullFilePath.dirName());\n}\n\nbool QueryContext::fileMatchesRelativeRoot(const watchman_file* f) {\n  // getFullPath() allocates memory; avoid it with this cheap test\n  if (!query->relative_root) {\n    return true;\n  }\n\n  return dirMatchesRelativeRoot(f->parent->getFullPath());\n}\n\nQueryContext::QueryContext(\n    const Query* q,\n    const std::shared_ptr<Root>& root,\n    bool disableFreshInstance)\n    : created(std::chrono::steady_clock::now()),\n      query(q),\n      root(root),\n      disableFreshInstance{disableFreshInstance} {}\n\nvoid QueryContext::addToEvalBatch(std::unique_ptr<FileResult>&& file) {\n  evalBatch_.emplace_back(std::move(file));\n\n  // Find a balance between local memory usage, latency in fetching\n  // and the cost of fetching the data needed to re-evaluate this batch.\n  // TODO: maybe allow passing this number in via the query?\n  if (evalBatch_.size() >= 20480) {\n    fetchEvalBatchNow();\n  }\n}\n\nvoid QueryContext::fetchEvalBatchNow() {\n  if (evalBatch_.empty()) {\n    return;\n  }\n  folly::stop_watch<std::chrono::microseconds> timer;\n  evalBatch_.front()->batchFetchProperties(evalBatch_);\n  edenFilePropertiesDurationUs.fetch_add(timer.elapsed().count());\n\n  auto toProcess = std::move(evalBatch_);\n\n  for (auto& file : toProcess) {\n    w_query_process_file(query, this, std::move(file));\n  }\n\n  w_assert(evalBatch_.empty(), \"should have no files that NeedDataLoad\");\n}\n\nRenderResult QueryContext::renderResults() {\n  std::optional<json_ref> templ;\n  if (query->fieldList.size() > 1) {\n    // build a template for the serializer\n    templ = field_list_to_json_name_array(query->fieldList);\n  }\n  return RenderResult{std::move(resultsArray), std::move(templ)};\n}\n\nvoid QueryContext::maybeRender(std::unique_ptr<FileResult>&& file) {\n  auto maybeRendered = file_result_to_json(query->fieldList, file, this);\n  if (maybeRendered.has_value()) {\n    resultsArray.push_back(std::move(maybeRendered.value()));\n    return;\n  }\n\n  addToRenderBatch(std::move(file));\n}\n\nvoid QueryContext::addToRenderBatch(std::unique_ptr<FileResult>&& file) {\n  renderBatch_.emplace_back(std::move(file));\n  // TODO: maybe allow passing this number in via the query?\n  if (renderBatch_.size() >= kMaximumRenderBatchSize) {\n    fetchRenderBatchNow();\n  }\n}\n\nbool QueryContext::fetchRenderBatchNow() {\n  if (renderBatch_.empty()) {\n    return true;\n  }\n\n  folly::stop_watch<std::chrono::microseconds> timer;\n  renderBatch_.front()->batchFetchProperties(renderBatch_);\n  edenFilePropertiesDurationUs.fetch_add(timer.elapsed().count());\n\n  auto toProcess = std::move(renderBatch_);\n\n  for (auto& file : toProcess) {\n    auto maybeRendered = file_result_to_json(query->fieldList, file, this);\n    if (maybeRendered.has_value()) {\n      resultsArray.push_back(std::move(maybeRendered.value()));\n    } else {\n      renderBatch_.emplace_back(std::move(file));\n    }\n  }\n\n  return renderBatch_.empty();\n}\n"
  },
  {
    "path": "watchman/query/QueryContext.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/stop_watch.h>\n#include <unordered_set>\n#include \"watchman/Clock.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/QueryResult.h\"\n\nstruct watchman_file;\n\nnamespace watchman {\n\nclass FileResult;\nstruct Query;\nclass Root;\n\nenum class QueryContextState {\n  NotStarted,\n  WaitingForCookieSync,\n  WaitingForViewLock,\n  Generating,\n  Rendering,\n  Completed,\n};\n\n// Holds state for the execution of a query\nstruct QueryContext : QueryContextBase {\n  std::chrono::time_point<std::chrono::steady_clock> created;\n  folly::stop_watch<std::chrono::milliseconds> stopWatch;\n  std::atomic<QueryContextState> state{QueryContextState::NotStarted};\n  std::atomic<std::chrono::milliseconds> cookieSyncDuration{\n      std::chrono::milliseconds(0)};\n  std::atomic<std::chrono::milliseconds> viewLockWaitDuration{\n      std::chrono::milliseconds(0)};\n  std::atomic<std::chrono::milliseconds> generationDuration{\n      std::chrono::milliseconds(0)};\n  std::atomic<std::chrono::milliseconds> renderDuration{\n      std::chrono::milliseconds(0)};\n  std::atomic<int64_t> edenGlobFilesDurationUs{0};\n  std::atomic<int64_t> edenChangedFilesDurationUs{0};\n  std::atomic<int64_t> edenFilePropertiesDurationUs{0};\n  std::atomic<int64_t> scmFilesChangedSinceMergebaseWithDurationUs{0};\n  std::string generatorType;\n  std::string freshInstanceCause;\n\n  void generationStarted() {\n    viewLockWaitDuration = stopWatch.lap();\n    state = QueryContextState::Generating;\n  }\n\n  const Query* query;\n  std::shared_ptr<Root> root;\n  std::unique_ptr<FileResult> file;\n  QuerySince since;\n\n  // Rendered results\n  std::vector<json_ref> resultsArray;\n\n  // When deduping the results, set<wholename> of\n  // the files held in results\n  std::unordered_set<w_string> dedup;\n\n  // When unconditional_log_if_results_contain_file_prefixes is set\n  // and one of those prefixes matches a file in the generated results,\n  // that name is added here with the intent that this is passed\n  // to the perf logger\n  std::vector<w_string> namesToLog;\n\n  // How many times we suppressed a result due to dedup checking\n  uint32_t num_deduped{0};\n\n  // Disable fresh instance queries\n  bool disableFreshInstance{false};\n\n  QueryContext(\n      const Query* q,\n      const std::shared_ptr<Root>& root,\n      bool disableFreshInstance);\n  QueryContext(const QueryContext&) = delete;\n  QueryContext& operator=(const QueryContext&) = delete;\n  QueryContext(QueryContext&&) = delete;\n  QueryContext& operator=(QueryContext&&) = delete;\n  ~QueryContext() override = default;\n\n  // Increment numWalked_ by the specified amount\n  inline void bumpNumWalked(int64_t amount = 1) {\n    numWalked_ += amount;\n  }\n\n  int64_t getNumWalked() const {\n    return numWalked_;\n  }\n\n  void resetWholeName();\n\n  /**\n   * Returns a shared reference to the wholename\n   * of the file.  The caller must not delref\n   * the reference.\n   */\n  const w_string& getWholeName() override;\n\n  /**\n   * Returns a JSON array containing the query results. Also returns an optional\n   * template, for use by json_array_set_template.\n   *\n   * Consumes the resultsArray field.\n   */\n  RenderResult renderResults();\n\n  // Adds `file` to the currently accumulating batch of files\n  // that require data to be loaded.\n  // If the batch is large enough, this will trigger `fetchEvalBatchNow()`.\n  // This is intended to be called for files that still having\n  // their expression cause evaluated during w_query_process_file().\n  void addToEvalBatch(std::unique_ptr<FileResult>&& file);\n\n  // Perform an immediate fetch of data for the items in the\n  // evalBatch_ set, and then re-evaluate each of them by passing\n  // them to w_query_process_file().\n  void fetchEvalBatchNow();\n\n  void maybeRender(std::unique_ptr<FileResult>&& file);\n  void addToRenderBatch(std::unique_ptr<FileResult>&& file);\n\n  // Perform a batch load of the items in the render batch,\n  // and attempt to render those items again.\n  // Returns true if the render batch is empty after rendering\n  // the items, false if still more data is needed.\n  bool fetchRenderBatchNow();\n\n  w_string computeWholeName(FileResult* file) const;\n\n  // Returns true if the filename associated with `f` matches\n  // the relative_root constraint set on the query.\n  // Delegates to dirMatchesRelativeRoot().\n  bool fileMatchesRelativeRoot(const watchman_file* f);\n\n  // Returns true if the path to the specified file matches the\n  // relative_root constraint set on the query.  fullFilePath is\n  // a fully qualified absolute path to the file.\n  // Delegates to dirMatchesRelativeRoot.\n  bool fileMatchesRelativeRoot(w_string_piece fullFilePath);\n\n  // Returns true if the directory path matches the relative_root\n  // constraint set on the query.  fullDirectoryPath is a fully\n  // qualified absolute path to a directory.\n  // If relative_root is not set, always returns true.\n  bool dirMatchesRelativeRoot(w_string_piece fullDirectoryPath);\n\n private:\n  std::optional<w_string> wholename_;\n\n  // Number of files considered as part of running this query\n  int64_t numWalked_{0};\n\n  // Files for which we encountered NeedMoreData and that we\n  // will re-evaluate once we have enough of them accumulated\n  // to batch fetch the required data\n  std::vector<std::unique_ptr<FileResult>> evalBatch_;\n\n  // Similar to needBatchFetch_ above, except that the files\n  // in this batch have been successfully matched by the\n  // expression and are just pending data to be loaded\n  // for rendering the result fields.\n  std::vector<std::unique_ptr<FileResult>> renderBatch_;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/QueryExpr.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <optional>\n#include <vector>\n#include \"watchman/Clock.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nusing EvaluateResult = std::optional<bool>;\nclass FileResult;\n\nclass QueryContextBase {\n public:\n  // root number, ticks at start of query execution\n  ClockSpec clockAtStartOfQuery;\n  uint32_t lastAgeOutTickValueAtStartOfQuery;\n\n  virtual ~QueryContextBase() = default;\n\n  /**\n   * Returns the wholename of this query's current file.\n\n   * Note: The wholename is lazily computed and the returned reference is valid\n   * until the next file is set.\n   */\n  virtual const w_string& getWholeName() = 0;\n};\n\n/**\n * Describes how terms are being aggregated.\n */\nenum AggregateOp {\n  AnyOf,\n  AllOf,\n};\n\n/**\n * Describes which part of a simple suffix expression\n */\nenum SimpleSuffixType { Excluded, Suffix, IsSimpleSuffix, Type };\n\nclass QueryExpr {\n public:\n  virtual ~QueryExpr() = default;\n  virtual EvaluateResult evaluate(QueryContextBase* ctx, FileResult* file) = 0;\n\n  // If OTHER can be aggregated with THIS, returns a new expression instance\n  // representing the combined state.  Op provides information on the containing\n  // query and can be used to determine how aggregation is done.\n  // returns nullptr if no aggregation was performed.\n  virtual std::unique_ptr<QueryExpr> aggregate(\n      const QueryExpr* /*other*/,\n      const AggregateOp /*op*/) const {\n    return nullptr;\n  }\n\n  /**\n   * Returns a set of glob expressions that form an upper bound on the results\n   * of this expression. This SHOULD be a tight upper bound that restricts the\n   * paths to a small set of prefixes (small relative to the size of the\n   * project).\n   *\n   * The patterns are intended to be evaluated by wildmatch (or a compatible\n   * globber) with the WM_PATHNAME flag set, and optionally WM_CASEFOLD\n   * (depending on the CaseSensitivity parameter). Note that this may differ\n   * from how the `glob` generator and any `match` terms are configured in the\n   * current query.\n   *\n   * WARNING: nullopt and an empty vector do NOT mean the same thing:\n   * - nullopt signifies no upper bound (the expression cannot be safely\n   * approximated by a glob)\n   * - an empty vector signifies that the expression cannot match any path.\n   */\n  virtual std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const = 0;\n\n  virtual std::vector<std::string> getSuffixQueryGlobPatterns() const = 0;\n\n  enum ReturnOnlyFiles { No, Yes, Unrelated };\n\n  /**\n   * Returns whether this expression only returns files.\n   * Used to determine if Eden can use the faster server-based\n   * method to handle this query.\n   */\n  virtual ReturnOnlyFiles listOnlyFiles() const = 0;\n\n  /**\n   * Returns whether this expression is a simple suffix expression, or a part\n   * of a simple suffix expression. A simple suffix expression is an allof\n   * expression that contains a single suffix expresssion containing one or more\n   * suffixes, and a type expresssion that wants files only. The intention for\n   * this is to allow watchman to more accurately determine what arguments to\n   * pass to eden's globFiles API.\n   */\n  virtual SimpleSuffixType evaluateSimpleSuffix() const = 0;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/QueryResult.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/QueryResult.h\"\n\nnamespace watchman {\n\njson_ref RenderResult::toJson() && {\n  auto arr = json_array(std::move(results));\n  if (templ) {\n    json_array_set_template_new(arr, std::move(*templ));\n  }\n  return arr;\n}\n\njson_ref QueryDebugInfo::render() const {\n  std::vector<json_ref> arr;\n  for (auto& fn : cookieFileNames) {\n    arr.push_back(w_string_to_json(fn));\n  }\n  return json_object({\n      {\"cookie_files\", json_array(std::move(arr))},\n  });\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/QueryResult.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <unordered_set>\n#include <vector>\n#include \"watchman/Clock.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nstruct QueryDebugInfo {\n  std::vector<w_string> cookieFileNames;\n\n  json_ref render() const;\n};\n\nstruct RenderResult {\n  std::vector<json_ref> results;\n  std::optional<json_ref> templ;\n\n  json_ref toJson() &&;\n};\n\nstruct QueryResult {\n  bool isFreshInstance;\n  RenderResult resultsArray;\n  // Only populated if the query was set to dedup_results\n  std::unordered_set<w_string> dedupedFileNames;\n  ClockSpec clockAtStartOfQuery;\n  uint32_t stateTransCountAtStartOfQuery;\n  std::optional<json_ref> savedStateInfo;\n  QueryDebugInfo debugInfo;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/TermRegistry.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/TermRegistry.h\"\n#include <fmt/core.h>\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/query/QueryExpr.h\"\n\nnamespace watchman {\n\nnamespace {\n\nstruct RegisteredParser {\n  std::string_view name;\n  const QueryExprParser* parser;\n};\n\nconstexpr RegisteredParser kParserTable[] = {\n#define WATCHMAN_REGISTER_PARSER(name) {#name, &parsers::name##_parser},\n    WATCHMAN_EXPRESSION_PARSER_LIST(WATCHMAN_REGISTER_PARSER)\n#undef WATCHMAN_REGISTER_PARSER\n};\n\n// TODO: We could export the list of names and have CommandRegistry read it.\nstatic struct Init {\n  Init() {\n    std::string prefix{\"term-\"};\n    for (auto [parserName, parserp] : kParserTable) {\n      // std::string_view concatenation is not actually nicer than sprintf, jeez\n      capability_register((prefix + std::string{parserName}).c_str());\n    }\n  }\n} init;\n\n} // namespace\n\nQueryExprParser getQueryExprParser(const w_string& name) {\n  for (auto [parserName, parserp] : kParserTable) {\n    if (parserName == name.view()) {\n      if (auto* parser = *parserp) {\n        return parser;\n      }\n      throw QueryParseError(\n          fmt::format(\"unsupported expression term '{}'\", name));\n    }\n  }\n  throw QueryParseError(fmt::format(\"unknown expression term '{}'\", name));\n}\n\nstd::unique_ptr<QueryExpr> parseQueryExpr(Query* query, const json_ref& exp) {\n  w_string name;\n\n  if (exp.isString()) {\n    name = json_to_w_string(exp);\n  } else if (exp.isArray() && json_array_size(exp) > 0) {\n    const auto& first = exp.at(0);\n\n    if (!first.isString()) {\n      throw QueryParseError(\"first element of an expression must be a string\");\n    }\n    name = json_to_w_string(first);\n  } else {\n    throw QueryParseError(\"expected array or string for an expression\");\n  }\n\n  return getQueryExprParser(name)(query, exp);\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/TermRegistry.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nnamespace watchman {\n\nstruct Query;\nclass QueryExpr;\n\ntypedef std::unique_ptr<QueryExpr> (\n    *QueryExprParser)(Query* query, const json_ref& term);\n\nQueryExprParser getQueryExprParser(const w_string& name);\n\n#define WATCHMAN_EXPRESSION_PARSER_LIST(_) \\\n  _(allof)                                 \\\n  _(anyof)                                 \\\n  _(dirname)                               \\\n  _(empty)                                 \\\n  _(exists)                                \\\n  _(false)                                 \\\n  _(idirname)                              \\\n  _(imatch)                                \\\n  _(iname)                                 \\\n  _(ipcre)                                 \\\n  _(match)                                 \\\n  _(name)                                  \\\n  _(not)                                   \\\n  _(pcre)                                  \\\n  _(since)                                 \\\n  _(size)                                  \\\n  _(suffix)                                \\\n  _(true)                                  \\\n  _(type)\n\nnamespace parsers {\n#define WATCHMAN_DECLARE_PARSER(name) \\\n  extern const QueryExprParser name##_parser;\nWATCHMAN_EXPRESSION_PARSER_LIST(WATCHMAN_DECLARE_PARSER)\n#undef WATCHMAN_DECLARE_PARSER\n} // namespace parsers\n\n#define W_TERM_PARSER(name, func) \\\n  const ::watchman::QueryExprParser watchman::parsers::name##_parser = (func)\n\n#define W_TERM_PARSER_UNSUPPORTED(name) \\\n  const ::watchman::QueryExprParser watchman::parsers::name##_parser = nullptr\n\n/**\n * Parse an expression term. It can be one of:\n * \"term\"\n * [\"term\" <parameters>]\n *\n * Throws QueryParseError if term is invalid.\n */\nstd::unique_ptr<QueryExpr> parseQueryExpr(Query* query, const json_ref& exp);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/base.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Errors.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n\n#include <memory>\n#include <queue>\n#include <unordered_set>\n#include <vector>\n\nusing namespace watchman;\n\n/* Basic boolean and compound expressions */\n\nclass NotExpr : public QueryExpr {\n  std::unique_ptr<QueryExpr> expr;\n\n public:\n  explicit NotExpr(std::unique_ptr<QueryExpr> other_expr)\n      : expr(std::move(other_expr)) {}\n\n  EvaluateResult evaluate(QueryContextBase* ctx, FileResult* file) override {\n    auto res = expr->evaluate(ctx, file);\n    if (!res.has_value()) {\n      return res;\n    }\n    return !*res;\n  }\n\n  static std::unique_ptr<QueryExpr> parse(Query* query, const json_ref& term) {\n    /* rigidly require [\"not\", expr] */\n    if (!term.isArray() || json_array_size(term) != 2) {\n      throw QueryParseError(\"must use [\\\"not\\\", expr]\");\n    }\n\n    const auto& other = term.at(1);\n    auto other_expr = parseQueryExpr(query, other);\n    return std::make_unique<NotExpr>(std::move(other_expr));\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // We can't negate globs, so return an unbounded result regardless of what\n    // the inner expression is.\n    return std::nullopt;\n  }\n\n  /**\n   * Inverts the result of the subexpression.\n   * Expressions that are unrelated stay unrelated.\n   */\n  ReturnOnlyFiles listOnlyFiles() const override {\n    auto subExprValue = expr->listOnlyFiles();\n    if (subExprValue == ReturnOnlyFiles::Yes) {\n      return ReturnOnlyFiles::No;\n    } else if (subExprValue == ReturnOnlyFiles::No) {\n      return ReturnOnlyFiles::Yes;\n    }\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\n\nW_TERM_PARSER(not, NotExpr::parse);\n\nclass TrueExpr : public QueryExpr {\n public:\n  EvaluateResult evaluate(QueryContextBase*, FileResult*) override {\n    return true;\n  }\n\n  static std::unique_ptr<QueryExpr> parse(Query*, const json_ref&) {\n    return std::make_unique<TrueExpr>();\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // We will match every path --> unbounded.\n    return std::nullopt;\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\n\nW_TERM_PARSER(true, TrueExpr::parse);\n\nclass FalseExpr : public QueryExpr {\n public:\n  EvaluateResult evaluate(QueryContextBase*, FileResult*) override {\n    return false;\n  }\n\n  static std::unique_ptr<QueryExpr> parse(Query*, const json_ref&) {\n    return std::make_unique<FalseExpr>();\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // We will not match any path --> bounded by an empty list of globs.\n    return std::vector<std::string>{};\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\n\nW_TERM_PARSER(false, FalseExpr::parse);\n\nclass ListExpr : public QueryExpr {\n  bool allof;\n  std::vector<std::unique_ptr<QueryExpr>> exprs;\n\n public:\n  ListExpr(bool isAll, std::vector<std::unique_ptr<QueryExpr>> exprs)\n      : allof(isAll), exprs(std::move(exprs)) {}\n\n  EvaluateResult evaluate(QueryContextBase* ctx, FileResult* file) override {\n    bool needData = false;\n\n    for (auto& expr : exprs) {\n      auto res = expr->evaluate(ctx, file);\n\n      if (!res.has_value()) {\n        needData = true;\n      } else if (!*res) {\n        if (allof) {\n          // Return NoMatch even if we have needData set, as allof\n          // requires that all terms match and this one doesn't,\n          // so we can avoid loading the data for prior terms\n          // in this list\n          return false;\n        }\n      } else {\n        // Matched\n\n        if (!allof) {\n          // Similar to the condition above, we can short circuit loading\n          // other data if this one matches for the anyof case.\n          return true;\n        }\n      }\n    }\n\n    if (needData) {\n      // We're not sure yet\n      return std::nullopt;\n    }\n    return allof;\n  }\n\n  static std::unique_ptr<QueryExpr>\n  parse(Query* query, const json_ref& term, bool allof) {\n    std::vector<std::unique_ptr<QueryExpr>> list;\n\n    /* don't allow \"allof\" on its own */\n    if (!term.isArray() || json_array_size(term) < 2) {\n      if (allof) {\n        throw QueryParseError(\"must use [\\\"allof\\\", expr...]\");\n      }\n      throw QueryParseError(\"must use [\\\"anyof\\\", expr...]\");\n    }\n\n    auto n = json_array_size(term) - 1;\n    list.reserve(n);\n\n    for (size_t i = 0; i < n; i++) {\n      const auto& exp = term.at(i + 1);\n\n      auto op = allof ? AggregateOp::AllOf : AggregateOp::AnyOf;\n      auto parsed = parseQueryExpr(query, exp);\n      if (list.empty()) {\n        list.emplace_back(std::move(parsed));\n      } else {\n        // Try to aggregate with previous expression\n        auto aggExpr = list.back().get()->aggregate(parsed.get(), op);\n        if (aggExpr) {\n          list.back() = std::move(aggExpr);\n        } else {\n          list.emplace_back(std::move(parsed));\n        }\n      }\n    }\n\n    return std::make_unique<ListExpr>(allof, std::move(list));\n  }\n\n  static std::unique_ptr<QueryExpr> parseAllOf(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, true);\n  }\n  static std::unique_ptr<QueryExpr> parseAnyOf(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, false);\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity caseSensitive) const override {\n    if (allof) {\n      // Heuristic: The fewer patterns needed to describe the upper bound, the\n      // tighter we assume the bound will be. This is suboptimal, as it doesn't\n      // consider the tree structure.\n      //\n      // The success case for this heuristic is eliminating dead \"anyof\"\n      // branches:\n      // {\"foo/**\"} vs {\"foo/**\", \"bar/**\"}\n      //   --> selects {\"foo/**\"}, which is narrower\n      //\n      // The failure cases include:\n      // {\"foo/**\"} vs {\"foo/bar/**\", \"foo/baz/**\"}\n      //   --> selects {\"foo/**\"} despite the alternative being narrower\n      // {\"foo/**\"} vs {\"foo/bar/**\"}\n      //   --> selects {\"foo/**\"} despite the alternative being narrower\n      // {\"foo/**\"} vs {\"bar/**\"}\n      //   --> selects {\"foo/**\"} despite the optimal result being {}\n      std::optional<std::vector<std::string>> minUpperBound;\n      for (auto& expr : exprs) {\n        auto elemUpperBound = expr->computeGlobUpperBound(caseSensitive);\n        if (!elemUpperBound.has_value()) {\n          continue;\n        }\n        if (!minUpperBound.has_value() ||\n            minUpperBound->size() > elemUpperBound->size()) {\n          minUpperBound = std::move(elemUpperBound);\n        }\n        if (minUpperBound.has_value() && minUpperBound->size() <= 1) {\n          break;\n        }\n      }\n      return minUpperBound;\n    }\n\n    /* anyof */\n\n    // If all expressions in the list are bounded, return the union of all\n    // upper bounds. If any expression is unbounded, return an unbounded\n    // result.\n    //\n    // TODO: Consider the tree structure here as well, e.g. the union\n    // of {\"foo/**\"} and {\"foo/bar/**\"} would just be {\"foo/**\"}.\n    std::unordered_set<std::string> unionOfUpperBounds;\n    for (auto& expr : exprs) {\n      auto elemUpperBound = expr->computeGlobUpperBound(caseSensitive);\n      if (!elemUpperBound.has_value()) {\n        return std::nullopt;\n      }\n      unionOfUpperBounds.insert(elemUpperBound->begin(), elemUpperBound->end());\n    }\n\n    return std::vector<std::string>(\n        unionOfUpperBounds.begin(), unionOfUpperBounds.end());\n  }\n  /**\n   * Combines the results of the subexpressions.\n   * For allof, the result needs to satisfy each subexpression.\n   * - If any subexpression requests non-file data, the whole expression must\n   *   also contain non-file data. Therefore we return No if any subexpression\n   *   requests non-file data.\n   * - If any subexpression requests only file data, the whole expression must\n   *   also contain only file data. Therefore we return Yes if one subexpression\n   *   requests only file data. and there is no subexpression requesting\n   *    non-file data.\n   * - We return No if there are both Yes and No subexpressions because\n   *   we want expressions that exclude groups of types like\n   *   [\"not\", [\"allof\", [\"type\", \"l\"], [\"type\", \"d\"]]]\n   *   to return Yes if we are excluding directories.\n   * For anyof, the result can satisfy any subexpression.\n   * - If any subexpression requests non-file data, the whole expression could\n   *   also contain non-file data. Therefore we return No if any subexpression\n   *   requests non-file data.\n   * - The only way for the whole expression to contain only file data is if\n   *   each subexpression contains only file data. Therefore we return Yes only\n   * if each subexpression is Yes.\n   */\n  ReturnOnlyFiles listOnlyFiles() const override {\n    ReturnOnlyFiles result = ReturnOnlyFiles::Unrelated;\n    if (allof) {\n      for (auto& subExpr : exprs) {\n        auto value = subExpr->listOnlyFiles();\n        if (value == ReturnOnlyFiles::Yes) {\n          result = ReturnOnlyFiles::Yes;\n        } else if (value == ReturnOnlyFiles::No) {\n          return ReturnOnlyFiles::No;\n        }\n      }\n    } else {\n      bool allYes = exprs.empty()\n          ? false\n          : exprs[0]->listOnlyFiles() == ReturnOnlyFiles::Yes;\n      for (auto& subExpr : exprs) {\n        auto value = subExpr->listOnlyFiles();\n        if (value == ReturnOnlyFiles::Yes) {\n          // Keep checking the remaining subexprs\n        } else if (value == ReturnOnlyFiles::No) {\n          return ReturnOnlyFiles::No;\n        } else {\n          allYes = false;\n        }\n      }\n      if (allYes) {\n        return ReturnOnlyFiles::Yes;\n      }\n    }\n    return result;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    if (allof) {\n      std::vector<SimpleSuffixType> types;\n      for (auto& subExpr : exprs) {\n        types.push_back(subExpr->evaluateSimpleSuffix());\n      }\n      if (types.size() == 2) {\n        if ((types[0] == SimpleSuffixType::Type &&\n             types[1] == SimpleSuffixType::Suffix) ||\n            (types[1] == SimpleSuffixType::Type &&\n             types[0] == SimpleSuffixType::Suffix)) {\n          return SimpleSuffixType::IsSimpleSuffix;\n        }\n      }\n    }\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    if (allof) {\n      for (auto& subExpr : exprs) {\n        if (subExpr->evaluateSimpleSuffix() == SimpleSuffixType::Suffix) {\n          return subExpr->getSuffixQueryGlobPatterns();\n        }\n      }\n    }\n    return std::vector<std::string>{};\n  }\n};\n\nW_TERM_PARSER(anyof, ListExpr::parseAnyOf);\nW_TERM_PARSER(allof, ListExpr::parseAllOf);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/dirname.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Errors.h\"\n#include \"watchman/query/GlobEscaping.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n#include \"watchman/query/intcompare.h\"\n\n#include <memory>\n\nusing namespace watchman;\n\nstatic inline bool is_dir_sep(int c) {\n  return c == '/' || c == '\\\\';\n}\n\nclass DirNameExpr : public QueryExpr {\n  w_string dirname;\n  struct w_query_int_compare depth;\n  using StartsWith = bool (*)(w_string_piece str, w_string_piece prefix);\n  StartsWith startswith;\n  CaseSensitivity caseSensitive;\n\n public:\n  explicit DirNameExpr(\n      w_string dirname,\n      struct w_query_int_compare depth,\n      CaseSensitivity caseSensitive)\n      : dirname(dirname), depth(depth), startswith(caseSensitive == CaseSensitivity::CaseInSensitive\n            ? [](w_string_piece str,\n                 w_string_piece\n                     prefix) { return str.startsWithCaseInsensitive(prefix); }\n            : [](w_string_piece str, w_string_piece prefix) {\n                return str.startsWith(prefix);\n              }), caseSensitive(caseSensitive) {}\n\n  EvaluateResult evaluate(QueryContextBase* ctx, FileResult*) override {\n    auto& str = ctx->getWholeName();\n\n    if (str.size() <= dirname.size()) {\n      // Either it doesn't prefix match, or file name is == dirname.\n      // That means that the best case is that the wholename matches.\n      // we only want to match if dirname(wholename) matches, so it\n      // is not possible for us to match unless the length of wholename\n      // is greater than the dirname operand\n      return false;\n    }\n\n    // Want to make sure that wholename is a child of dirname, so\n    // check for a dir separator.  Special case for dirname == '' (the root),\n    // which won't have a slash in position 0.\n    if (dirname.size() > 0 && !is_dir_sep(str.data()[dirname.size()])) {\n      // may have a common prefix with, but is not a child of dirname\n      return false;\n    }\n\n    if (!startswith(str, dirname)) {\n      return false;\n    }\n\n    // Now compute the depth of file from dirname.  We do this by\n    // counting dir separators, not including the one we saw above.\n    json_int_t actual_depth = 0;\n    for (size_t i = dirname.size() + 1; i < str.size(); i++) {\n      if (is_dir_sep(str.data()[i])) {\n        actual_depth++;\n      }\n    }\n\n    return eval_int_compare(actual_depth, &depth);\n  }\n\n  // [\"dirname\", \"foo\"] -> [\"dirname\", \"foo\", [\"depth\", \"ge\", 0]]\n  static std::unique_ptr<QueryExpr>\n  parse(Query*, const json_ref& term, CaseSensitivity case_sensitive) {\n    const char* which = case_sensitive == CaseSensitivity::CaseInSensitive\n        ? \"idirname\"\n        : \"dirname\";\n    struct w_query_int_compare depth_comp;\n\n    if (!term.isArray()) {\n      QueryParseError::throwf(\"Expected array for '{}' term\", which);\n    }\n\n    if (json_array_size(term) < 2) {\n      QueryParseError::throwf(\n          \"Invalid number of arguments for '{}' term\", which);\n    }\n\n    if (json_array_size(term) > 3) {\n      QueryParseError::throwf(\n          \"Invalid number of arguments for '{}' term\", which);\n    }\n\n    const auto& name = term.at(1);\n    if (!name.isString()) {\n      QueryParseError::throwf(\"Argument 2 to '{}' must be a string\", which);\n    }\n\n    if (json_array_size(term) == 3) {\n      const auto& depth = term.at(2);\n      if (!depth.isArray()) {\n        QueryParseError::throwf(\n            \"Invalid number of arguments for '{}' term\", which);\n      }\n\n      const auto& depth_array = depth.array();\n\n      parse_int_compare(depth, &depth_comp);\n\n      if (strcmp(\"depth\", json_string_value(depth_array.at(0)))) {\n        QueryParseError::throwf(\n            \"Third parameter to '{}' should be a relational depth term\", which);\n      }\n    } else {\n      depth_comp.operand = 0;\n      depth_comp.op = W_QUERY_ICMP_GE;\n    }\n\n    w_string dirname = json_to_w_string(name);\n    auto view = dirname.view();\n    auto last_not_slash = view.find_last_not_of('/');\n    w_string trimmed_dirname;\n    if (last_not_slash == std::string_view::npos) {\n      trimmed_dirname = dirname;\n    } else {\n      trimmed_dirname = w_string{view.substr(0, last_not_slash + 1)};\n    }\n\n    return std::make_unique<DirNameExpr>(\n        std::move(trimmed_dirname), depth_comp, case_sensitive);\n  }\n  static std::unique_ptr<QueryExpr> parseDirName(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, query->case_sensitive);\n  }\n  static std::unique_ptr<QueryExpr> parseIDirName(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, CaseSensitivity::CaseInSensitive);\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity outputCaseSensitive) const override {\n    // We could leverage the depth parameter to generate a depth bound, e.g. `*`\n    // for [\"depth\", \"eq\", \"0\"], but this risks taking precedence over a prefix\n    // bound elsewhere in the query, so for simplicity we avoid depth bounds\n    // right now.\n\n    if (caseSensitive == CaseSensitivity::CaseInSensitive &&\n        outputCaseSensitive != CaseSensitivity::CaseInSensitive) {\n      // The caller asked for a case-sensitive upper bound, so treat idirname as\n      // unbounded.\n      return std::nullopt;\n    }\n    if (dirname.size() == 0) {\n      // Treat [\"dirname\", \"\"] as unbounded.\n      return std::nullopt;\n    }\n    // NOTE: This is the correct way to escape `dirname` because the only\n    // separator it can contain is `/`. If there's a `\\`, it's treated as a\n    // literal character, and is therefore escaped.\n    w_string outputPattern = convertLiteralPathToGlob(dirname);\n    if (outputCaseSensitive == CaseSensitivity::CaseInSensitive) {\n      outputPattern = outputPattern.piece().asLowerCase();\n    }\n\n    return std::vector<std::string>{outputPattern.string() + \"/**\"};\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\n\nW_TERM_PARSER(dirname, DirNameExpr::parseDirName);\nW_TERM_PARSER(idirname, DirNameExpr::parseIDirName);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/empty.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n\n#include <memory>\n\nnamespace watchman {\n\nclass QueryContextBase;\n\nclass ExistsExpr : public QueryExpr {\n public:\n  EvaluateResult evaluate(QueryContextBase*, FileResult* file) override {\n    return file->exists();\n  }\n\n  static std::unique_ptr<QueryExpr> parse(Query*, const json_ref&) {\n    return std::make_unique<ExistsExpr>();\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // `exists` doesn't constrain the path.\n    return std::nullopt;\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\nW_TERM_PARSER(exists, ExistsExpr::parse);\n\nclass EmptyExpr : public QueryExpr {\n public:\n  EvaluateResult evaluate(QueryContextBase*, FileResult* file) override {\n    auto exists = file->exists();\n    auto stat = file->stat();\n    auto size = file->size();\n\n    if (!exists.has_value()) {\n      return std::nullopt;\n    }\n    if (!exists.value()) {\n      return false;\n    }\n\n    if (!stat.has_value()) {\n      return std::nullopt;\n    }\n\n    if (!size.has_value()) {\n      return std::nullopt;\n    }\n\n    if (stat->isDir() || stat->isFile()) {\n      return size.value() == 0;\n    }\n\n    return false;\n  }\n\n  static std::unique_ptr<QueryExpr> parse(Query*, const json_ref&) {\n    return std::make_unique<EmptyExpr>();\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // `empty` doesn't constrain the path.\n    return std::nullopt;\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\nW_TERM_PARSER(empty, EmptyExpr::parse);\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/eval.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/eval.h\"\n\n#include <fmt/chrono.h>\n#include <folly/ScopeGuard.h>\n\n#include \"eden/common/utils/ProcessInfoCache.h\"\n#include \"watchman/ClientContext.h\"\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/PerfSample.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/LocalFileResult.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryContext.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/saved_state/SavedStateInterface.h\"\n#include \"watchman/scm/SCM.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n#include \"watchman/telemetry/WatchmanStructuredLogger.h\"\n\nusing namespace watchman;\n\nnamespace {\nstd::vector<w_string> computeUnconditionalLogFilePrefixes() {\n  Configuration globalConfig;\n  auto names =\n      globalConfig.get(\"unconditional_log_if_results_contain_file_prefixes\");\n\n  std::vector<w_string> result;\n  if (names) {\n    for (auto& name : names->array()) {\n      result.push_back(json_to_w_string(name));\n    }\n  }\n\n  return result;\n}\n\nconst std::vector<w_string>& getUnconditionalLogFilePrefixes() {\n  // Meyer's singleton to hold this for the life of the process\n  static const std::vector<w_string> names =\n      computeUnconditionalLogFilePrefixes();\n  return names;\n}\n} // namespace\n\n/* Query evaluator */\nvoid w_query_process_file(\n    const Query* query,\n    QueryContext* ctx,\n    std::unique_ptr<FileResult> file) {\n  // TODO: Should this be implicit by assigning a file to the QueryContext? It\n  // could be cleared when resetting the file.\n  ctx->resetWholeName();\n  ctx->file = std::move(file);\n  SCOPE_EXIT {\n    ctx->file.reset();\n  };\n\n  // For fresh instances, only return files that currently exist\n  // TODO: shift this clause to execute_common and generate\n  // a wrapped query: [\"allof\", \"exists\", EXPR] and execute that\n  // instead of query->expr so that the lazy evaluation logic can\n  // be automatically applied and avoid fetching the exists flag\n  // for every file.  See also related TODO in batchFetchNow.\n  if (!ctx->disableFreshInstance &&\n      std::holds_alternative<QuerySince::Clock>(ctx->since.since) &&\n      std::get<QuerySince::Clock>(ctx->since.since).is_fresh_instance) {\n    auto exists = ctx->file->exists();\n    if (!exists.has_value()) {\n      // Reconsider this one later\n      ctx->addToEvalBatch(std::move(ctx->file));\n      return;\n    }\n    if (!exists.value()) {\n      return;\n    }\n  }\n\n  // We produce an output for this file if there is no expression,\n  // or if the expression matched.\n  if (query->expr) {\n    auto match = query->expr->evaluate(ctx, ctx->file.get());\n\n    if (!match.has_value()) {\n      // Reconsider this one later\n      ctx->addToEvalBatch(std::move(ctx->file));\n      return;\n    } else if (!*match) {\n      return;\n    }\n  }\n\n  if (ctx->query->dedup_results) {\n    auto name = ctx->getWholeName();\n\n    auto inserted = ctx->dedup.insert(name);\n    if (!inserted.second) {\n      // Already present in the results, no need to emit it again\n      ctx->num_deduped++;\n      return;\n    }\n  }\n\n  auto logPrefixes = getUnconditionalLogFilePrefixes();\n  if (!logPrefixes.empty()) {\n    auto name = ctx->getWholeName();\n    for (auto& prefix : logPrefixes) {\n      if (name.piece().startsWith(prefix)) {\n        ctx->namesToLog.push_back(name);\n      }\n    }\n  }\n\n  ctx->maybeRender(std::move(ctx->file));\n}\n\nvoid time_generator(\n    const Query* query,\n    const std::shared_ptr<Root>& root,\n    QueryContext* ctx) {\n  root->view()->timeGenerator(query, ctx);\n}\n\nstatic void default_generators(\n    const Query* query,\n    const std::shared_ptr<Root>& root,\n    QueryContext* ctx) {\n  bool generated = false;\n\n  // Time based query\n  if (ctx->since.is_timestamp() || !ctx->since.is_fresh_instance()) {\n    time_generator(query, root, ctx);\n    generated = true;\n  }\n\n  if (query->paths.has_value()) {\n    root->view()->pathGenerator(query, ctx);\n    generated = true;\n  }\n\n  if (query->glob_tree) {\n    root->view()->globGenerator(query, ctx);\n    generated = true;\n  }\n\n  // And finally, if there were no other generators, we walk all known\n  // files\n  if (!generated) {\n    root->view()->allFilesGenerator(query, ctx);\n  }\n}\n\nstatic void execute_common(\n    QueryContext* ctx,\n    QueryExecute* queryExecute,\n    PerfSample* sample,\n    QueryResult* res,\n    QueryGenerator generator,\n    const ClientContext& clientInfo) {\n  ctx->stopWatch.reset();\n\n  if (ctx->query->dedup_results) {\n    ctx->dedup.reserve(64);\n  }\n\n  // isFreshInstance is also later set by the value in ctx after generator\n  {\n    auto* since_clock = std::get_if<QuerySince::Clock>(&ctx->since.since);\n    res->isFreshInstance = since_clock && since_clock->is_fresh_instance;\n  }\n\n  if (!(res->isFreshInstance && ctx->query->empty_on_fresh_instance)) {\n    if (!generator) {\n      generator = default_generators;\n    }\n    generator(ctx->query, ctx->root, ctx);\n  }\n  ctx->generationDuration = ctx->stopWatch.lap();\n  ctx->state = QueryContextState::Rendering;\n\n  // We may have some file results pending re-evaluation,\n  // so make sure that we process them before we get to\n  // the render phase below.\n  ctx->fetchEvalBatchNow();\n  while (!ctx->fetchRenderBatchNow()) {\n    // Depending on the implementation of the query terms and\n    // the field renderers, we may need to do a couple of fetches\n    // to get all that we need, so we loop until we get them all.\n  }\n\n  ctx->renderDuration = ctx->stopWatch.lap();\n  ctx->state = QueryContextState::Completed;\n\n  // For Eden instances it is possible that when running the query it was\n  // discovered that it is actually a fresh instance [e.g. mount generation\n  // changes or journal truncation]; update res to match\n  {\n    auto* since_clock = std::get_if<QuerySince::Clock>(&ctx->since.since);\n    res->isFreshInstance |= since_clock && since_clock->is_fresh_instance;\n  }\n  if (sample && !ctx->namesToLog.empty()) {\n    std::vector<json_ref> nameList;\n    nameList.reserve(ctx->namesToLog.size());\n    for (auto& name : ctx->namesToLog) {\n      nameList.push_back(w_string_to_json(name));\n\n      // Avoid listing everything!\n      if (nameList.size() >= 12) {\n        break;\n      }\n    }\n\n    // NOTE: sample and queryExecute are either both non-null or both null\n    queryExecute->num_special_files = ctx->namesToLog.size();\n    queryExecute->special_files = json_array(nameList).toString();\n\n    sample->add_meta(\n        \"num_special_files_in_result_set\",\n        json_integer(ctx->namesToLog.size()));\n    sample->add_meta(\n        \"special_files_in_result_set\", json_array(std::move(nameList)));\n    sample->force_log();\n  }\n\n  if (sample) {\n    // NOTE: sample and queryExecute are either both non-null or both null\n    auto root_metadata = ctx->root->getRootMetadata();\n\n    if (sample->finish()) {\n      sample->add_root_metadata(root_metadata);\n      auto meta = json_object({\n          {\"fresh_instance\", json_boolean(res->isFreshInstance)},\n          {\"num_deduped\", json_integer(ctx->num_deduped)},\n          {\"num_results\", json_integer(ctx->resultsArray.size())},\n          {\"num_walked\", json_integer(ctx->getNumWalked())},\n      });\n      if (ctx->query->query_spec) {\n        meta.set(\"query\", json_ref(*ctx->query->query_spec));\n      }\n      sample->add_meta(\"query_execute\", std::move(meta));\n      sample->log();\n    }\n\n    const auto& [samplingRate, eventCount] =\n        getLogEventCounters(LogEventType::QueryExecuteType);\n    // Log if override set, or if we have hit the sample rate,\n    // or if the query used the changes_since_mergebase_with generator\n    if (sample->will_log || eventCount == samplingRate ||\n        (!ctx->generatorType.empty() &&\n         ctx->generatorType == \"scm_files_changed_since_mergebase_with\") ||\n        (!ctx->freshInstanceCause.empty() &&\n         ctx->freshInstanceCause != \"New instance\")) {\n      addRootMetadataToEvent(root_metadata, *queryExecute);\n      queryExecute->event_count = eventCount != samplingRate ? 0 : eventCount;\n      queryExecute->fresh_instance = res->isFreshInstance;\n      queryExecute->deduped = ctx->num_deduped;\n      queryExecute->results = ctx->resultsArray.size();\n      queryExecute->walked = ctx->getNumWalked();\n      queryExecute->eden_glob_files_duration_us =\n          ctx->edenGlobFilesDurationUs.load(std::memory_order_relaxed);\n      queryExecute->eden_changed_files_duration_us =\n          ctx->edenChangedFilesDurationUs.load(std::memory_order_relaxed);\n      queryExecute->eden_file_properties_duration_us =\n          ctx->edenFilePropertiesDurationUs.load(std::memory_order_relaxed);\n      queryExecute->scm_files_changed_since_mergebase_with_duration_us =\n          ctx->scmFilesChangedSinceMergebaseWithDurationUs.load(\n              std::memory_order_relaxed);\n      queryExecute->generation_duration_ms =\n          ctx->generationDuration.load().count();\n      if (!ctx->generatorType.empty()) {\n        queryExecute->generator = ctx->generatorType;\n      }\n\n      if (ctx->query->query_spec) {\n        queryExecute->query = ctx->query->query_spec->toString();\n      }\n      queryExecute->client_pid = clientInfo.clientPid;\n      queryExecute->client_name = clientInfo.clientInfo.has_value()\n          ? facebook::eden::ProcessInfoCache::cleanProcessCommandline(\n                std::move(clientInfo.clientInfo.value().get().name))\n          : \"\";\n\n      if (!ctx->freshInstanceCause.empty()) {\n        queryExecute->fresh_instance_cause = ctx->freshInstanceCause;\n      }\n\n      getLogger()->logEvent(*queryExecute);\n    }\n  }\n\n  res->resultsArray = ctx->renderResults();\n  res->dedupedFileNames = std::move(ctx->dedup);\n}\n\n// Capability indicating support for scm-aware since queries\nW_CAP_REG(\"scm-since\")\n\nQueryResult w_query_execute(\n    const Query* query,\n    const std::shared_ptr<Root>& root,\n    QueryGenerator generator,\n    SavedStateFactory savedStateFactory) {\n  QueryResult res;\n  ClockSpec resultClock(ClockPosition{});\n  bool disableFreshInstance{false};\n  auto requestId = query->request_id;\n\n  QueryExecute queryExecute;\n  PerfSample sample(\"query_execute\");\n  if (requestId && !requestId->empty()) {\n    log(DBG, \"request_id = \", *requestId, \"\\n\");\n    queryExecute.request_id = requestId->string();\n    sample.add_meta(\"request_id\", w_string_to_json(*requestId));\n  }\n\n  // We want to check this before we sync, as the SCM may generate changes\n  // in the filesystem when running the underlying commands to query it.\n  if (query->since_spec && query->since_spec->hasScmParams()) {\n    auto scm = root->view()->getSCM();\n\n    if (!scm) {\n      throw QueryExecError(\"This root does not support SCM-aware queries.\");\n    }\n\n    // Populate transition counter at start of query. This allows us to\n    // determine if SCM operations ocurred concurrent with query execution.\n    res.stateTransCountAtStartOfQuery = root->stateTransCount.load();\n    resultClock.scmMergeBaseWith = query->since_spec->scmMergeBaseWith;\n    resultClock.scmMergeBase =\n        scm->mergeBaseWith(resultClock.scmMergeBaseWith, requestId);\n    // Always update the saved state storage type and key, but conditionally\n    // update the saved state commit id below based on whether the mergebase has\n    // changed.\n    if (query->since_spec->hasSavedStateParams()) {\n      resultClock.savedStateStorageType =\n          query->since_spec->savedStateStorageType;\n      resultClock.savedStateConfig = query->since_spec->savedStateConfig;\n    }\n\n    if (resultClock.scmMergeBase != query->since_spec->scmMergeBase) {\n      // The merge base is different, so on the assumption that a lot of\n      // things have changed between the prior and current state of\n      // the world, we're just going to ask the SCM to tell us about\n      // the changes, then we're going to feed that change list through\n      // a simpler watchman query.\n      auto modifiedMergebase = resultClock.scmMergeBase;\n      if (query->since_spec->hasSavedStateParams()) {\n        // Find the most recent saved state to the new mergebase and return\n        // changed files since that saved state, if available.\n        auto savedStateInterface = savedStateFactory(\n            query->since_spec->savedStateStorageType.value(),\n            query->since_spec->savedStateConfig.value(),\n            scm,\n            root->config,\n            [root](RootMetadata& root_metadata) {\n              root->collectRootMetadata(root_metadata);\n            },\n            query->clientInfo);\n        auto savedStateResult = savedStateInterface->getMostRecentSavedState(\n            resultClock.scmMergeBase ? resultClock.scmMergeBase->piece()\n                                     : w_string_piece{});\n        res.savedStateInfo = savedStateResult.savedStateInfo;\n        if (!savedStateResult.commitId.empty()) {\n          resultClock.savedStateCommitId = savedStateResult.commitId;\n          // Modify the mergebase to be the saved state mergebase so we can\n          // return changed files since the saved state.\n          modifiedMergebase = savedStateResult.commitId;\n        } else {\n          // Setting the saved state commit id to the empty string alerts the\n          // client that the mergebase changed, yet no saved state was\n          // available. The changed files list will be relative to the prior\n          // clock as if scm-aware queries were not being used at all, to ensure\n          // clients have all changed files they need.\n          queryExecute.saved_state_missing = true;\n          resultClock.savedStateCommitId = w_string();\n          modifiedMergebase = std::nullopt;\n        }\n      }\n      // If the modified mergebase is null then we had no saved state available\n      // so we need to fall back to the normal behavior of returning all changes\n      // since the prior clock, so we should not update the generator in that\n      // case.\n      if (modifiedMergebase) {\n        disableFreshInstance = true;\n        generator = [root, modifiedMergebase, requestId](\n                        const Query* q,\n                        const std::shared_ptr<Root>& r,\n                        QueryContext* c) {\n          c->generationStarted();\n          c->generatorType = \"scm_files_changed_since_mergebase_with\";\n          auto position = c->clockAtStartOfQuery.position();\n          folly::stop_watch<std::chrono::microseconds> timer;\n          auto changedFiles =\n              root->view()->getSCM()->getFilesChangedSinceMergeBaseWith(\n                  modifiedMergebase ? modifiedMergebase->piece()\n                                    : w_string_piece{},\n                  position.toClockString(),\n                  requestId);\n          c->scmFilesChangedSinceMergebaseWithDurationUs.store(\n              timer.elapsed().count(), std::memory_order_relaxed);\n          ClockStamp clock{position.ticks, ::time(nullptr)};\n          for (const auto& path : changedFiles) {\n            auto fullPath = w_string::pathCat({r->root_path, path});\n            if (!c->fileMatchesRelativeRoot(fullPath)) {\n              continue;\n            }\n            // Note well!  At the time of writing the LocalFileResult class\n            // assumes that removed entries must have been regular files.\n            // We don't have enough information returned from\n            // getFilesChangedSinceMergeBaseWith() to distinguish between\n            // deleted files and deleted symlinks.  Also, it is not possible\n            // to see a directory returned from that call; we're only going\n            // to enumerate !dirs for this case.\n            w_query_process_file(\n                q,\n                c,\n                std::make_unique<LocalFileResult>(\n                    fullPath, clock, r->case_sensitive));\n          }\n        };\n      } else if (query->fail_if_no_saved_state) {\n        throw QueryExecError(\n            \"The merge base changed but no corresponding saved state was \"\n            \"found for the new merge base. fail_if_no_saved_state was set \"\n            \"in the query so treating this as an error\");\n      }\n    } else {\n      if (query->since_spec->hasSavedStateParams()) {\n        // If the mergebase has not changed, then preserve the input value for\n        // the saved state commit id so it will be accurate in subscriptions.\n        resultClock.savedStateCommitId = query->since_spec->savedStateCommitId;\n      }\n    }\n  }\n  // We should skip asking SCM for the changed files if the query\n  // indicated to omit those. To do so, lets just make an empty\n  // generator.\n  if (query->omit_changed_files) {\n    generator = [](const Query*, const std::shared_ptr<Root>&, QueryContext*) {\n    };\n  }\n  QueryContext ctx{query, root, disableFreshInstance};\n\n  // Track the query against the root.\n  // This is to enable the `watchman debug-status` diagnostic command.\n  // It promises only to read the read-only fields in ctx and ctx.query.\n  root->queries.wlock()->insert(&ctx);\n  SCOPE_EXIT {\n    root->queries.wlock()->erase(&ctx);\n  };\n  if (query->settle_timeouts) {\n    auto future = root->waitForSettle(query->settle_timeouts->settle_period);\n    try {\n      std::move(future).get(query->settle_timeouts->settle_timeout);\n    } catch (const folly::FutureTimeout&) {\n      QueryExecError::throwf(\n          \"waitForSettle: timed out waiting for settle {} in {}\",\n          query->settle_timeouts->settle_period,\n          query->settle_timeouts->settle_timeout);\n    }\n  }\n  if (query->sync_timeout.count()) {\n    ctx.state = QueryContextState::WaitingForCookieSync;\n    ctx.stopWatch.reset();\n    try {\n      auto result = root->syncToNow(query->sync_timeout, query->clientInfo);\n      res.debugInfo.cookieFileNames = std::move(result.cookieFileNames);\n    } catch (const std::exception& exc) {\n      QueryExecError::throwf(\"synchronization failed: {}\", exc.what());\n    }\n    ctx.cookieSyncDuration = ctx.stopWatch.lap();\n  }\n\n  /* The first stage of execution is generation.\n   * We generate a series of file inputs to pass to\n   * the query executor.\n   *\n   * We evaluate each of the generators one after the\n   * other.  If multiple generators are used, it is\n   * possible and expected that the same file name\n   * will be evaluated multiple times if those generators\n   * both emit the same file.\n   */\n\n  ctx.clockAtStartOfQuery =\n      ClockSpec(root->view()->getMostRecentRootNumberAndTickValue());\n  ctx.lastAgeOutTickValueAtStartOfQuery =\n      root->view()->getLastAgeOutTickValue();\n\n  // Copy in any scm parameters\n  res.clockAtStartOfQuery = resultClock;\n  // then update the clock position portion\n  std::get<ClockSpec::Clock>(res.clockAtStartOfQuery.spec) =\n      std::get<ClockSpec::Clock>(ctx.clockAtStartOfQuery.spec);\n\n  // Evaluate the cursor for this root\n  ctx.since = query->since_spec ? query->since_spec->evaluate(\n                                      ctx.clockAtStartOfQuery.position(),\n                                      ctx.lastAgeOutTickValueAtStartOfQuery,\n                                      &root->inner.cursors)\n                                : QuerySince{};\n\n  // If there is a since spec, check if it is fresh instance\n  // By default new instances are fresh instance\n  if (ctx.since.is_fresh_instance()) {\n    if (query->since_spec) {\n      ctx.freshInstanceCause = \"Since spec eval resulted in fresh instance\";\n      log(DBG, \"Since spec eval resulted in fresh instance\\n\");\n    } else {\n      ctx.freshInstanceCause = \"New instance\";\n    }\n  }\n\n  if (query->bench_iterations > 0) {\n    for (uint32_t i = 0; i < query->bench_iterations; ++i) {\n      QueryContext c{query, root, ctx.disableFreshInstance};\n      QueryResult r;\n      c.clockAtStartOfQuery = ctx.clockAtStartOfQuery;\n      c.since = ctx.since;\n      execute_common(&c, nullptr, nullptr, &r, generator, query->clientInfo);\n    }\n  }\n\n  execute_common(\n      &ctx, &queryExecute, &sample, &res, generator, query->clientInfo);\n  return res;\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/eval.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <functional>\n#include <memory>\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/QueryResult.h\"\n#include \"watchman/saved_state/SavedStateInterface.h\"\n\nnamespace watchman {\n\nstruct Query;\nstruct QueryContext;\nclass Root;\n\n// Generator callback, used to plug in an alternate\n// generator when used in triggers or subscriptions\nusing QueryGenerator = std::function<void(\n    const Query* query,\n    const std::shared_ptr<Root>& root,\n    QueryContext* ctx)>;\n\n} // namespace watchman\n\n/**\n * Execute a query against the root.\n *\n * savedStateFactory allows testing this function without pulling in a wide\n * set of dependencies.\n */\nwatchman::QueryResult w_query_execute(\n    const watchman::Query* query,\n    const std::shared_ptr<watchman::Root>& root,\n    watchman::QueryGenerator generator,\n    watchman::SavedStateFactory savedStateFactory);\n\n// Allows a generator to process a file node\n// through the query engine\nvoid w_query_process_file(\n    const watchman::Query* query,\n    watchman::QueryContext* ctx,\n    std::unique_ptr<watchman::FileResult> file);\n\nvoid time_generator(\n    const watchman::Query* query,\n    const std::shared_ptr<watchman::Root>& root,\n    watchman::QueryContext* ctx);\n"
  },
  {
    "path": "watchman/query/fieldlist.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryContext.h\"\n#include \"watchman/watchman_time.h\"\n\nnamespace watchman {\n\nnamespace {\n\nstd::optional<json_ref> make_name(FileResult* file, const QueryContext* ctx) {\n  return w_string_to_json(ctx->computeWholeName(file));\n}\n\nstd::optional<json_ref> make_symlink(FileResult* file, const QueryContext*) {\n  auto target = file->readLink();\n  if (!target.has_value()) {\n    return std::nullopt;\n  }\n  if (std::holds_alternative<NotSymlink>(*target)) {\n    return json_null();\n  } else {\n    return w_string_to_json(std::get<w_string>(*target));\n  }\n}\n\nstd::optional<json_ref> make_sha1_hex(FileResult* file, const QueryContext*) {\n  try {\n    auto hash = file->getContentSha1();\n    if (!hash.has_value()) {\n      // Need to load it still\n      return std::nullopt;\n    }\n    char buf[40];\n    static const char* hexDigit = \"0123456789abcdef\";\n    for (size_t i = 0; i < hash->size(); ++i) {\n      auto& digit = (*hash)[i];\n      buf[(i * 2) + 0] = hexDigit[digit >> 4];\n      buf[(i * 2) + 1] = hexDigit[digit & 0xf];\n    }\n    return w_string_to_json(w_string(buf, sizeof(buf), W_STRING_UNICODE));\n  } catch (const std::system_error& exc) {\n    auto errcode = exc.code();\n    if (errcode == error_code::no_such_file_or_directory ||\n        errcode == error_code::is_a_directory) {\n      // Deleted files, or (currently existing) directories have no hash\n      return json_null();\n    }\n    // We'll report the error wrapped up in an object so that it can be\n    // distinguished from a valid hash result.\n    return json_object(\n        {{\"error\", w_string_to_json(w_string(exc.what(), W_STRING_UNICODE))}});\n  } catch (const std::exception& exc) {\n    // We'll report the error wrapped up in an object so that it can be\n    // distinguished from a valid hash result.\n    return json_object(\n        {{\"error\", w_string_to_json(w_string(exc.what(), W_STRING_UNICODE))}});\n  }\n}\n\nstd::optional<json_ref> make_size(FileResult* file, const QueryContext*) {\n  auto size = file->size();\n  if (!size.has_value()) {\n    return std::nullopt;\n  }\n  return json_integer(size.value());\n}\n\nstd::optional<json_ref> make_exists(FileResult* file, const QueryContext*) {\n  auto exists = file->exists();\n  if (!exists.has_value()) {\n    return std::nullopt;\n  }\n  return json_boolean(exists.value());\n}\n\nstd::optional<json_ref> make_new(FileResult* file, const QueryContext* ctx) {\n  bool is_new = false;\n\n  auto* since_clock = std::get_if<QuerySince::Clock>(&ctx->since.since);\n  if (since_clock && since_clock->is_fresh_instance) {\n    is_new = true;\n  } else {\n    auto ctime = file->ctime();\n    if (!ctime.has_value()) {\n      // Reconsider this one later\n      return std::nullopt;\n    }\n    if (since_clock) {\n      is_new = ctime->ticks > since_clock->ticks;\n    } else {\n      auto& since_ts = std::get<QuerySince::Timestamp>(ctx->since.since);\n      is_new = since_ts.time > ctime->timestamp;\n    }\n  }\n\n  return json_boolean(is_new);\n}\n\n#define MAKE_CLOCK_FIELD(name, member)                      \\\n  static std::optional<json_ref> make_##name(               \\\n      FileResult* file, const QueryContext* ctx) {          \\\n    char buf[128];                                          \\\n    auto clock = file->member();                            \\\n    if (!clock.has_value()) {                               \\\n      /* need to load data */                               \\\n      return std::nullopt;                                  \\\n    }                                                       \\\n    if (clock_id_string(                                    \\\n            ctx->clockAtStartOfQuery.position().rootNumber, \\\n            clock->ticks,                                   \\\n            buf,                                            \\\n            sizeof(buf))) {                                 \\\n      return typed_string_to_json(buf, W_STRING_UNICODE);   \\\n    }                                                       \\\n    return json_null();                                     \\\n  }\nMAKE_CLOCK_FIELD(cclock, ctime)\nMAKE_CLOCK_FIELD(oclock, otime)\n\n// Note: our JSON library supports 64-bit integers, but this may\n// pose a compatibility issue for others.  We'll see if anyone\n// runs into an issue and deal with it then...\nstatic_assert(\n    sizeof(json_int_t) >= sizeof(time_t),\n    \"json_int_t isn't large enough to hold a time_t\");\n\n#define MAKE_INT_FIELD(name, member)           \\\n  static std::optional<json_ref> make_##name(  \\\n      FileResult* file, const QueryContext*) { \\\n    auto stat = file->stat();                  \\\n    if (!stat.has_value()) {                   \\\n      /* need to load data */                  \\\n      return std::nullopt;                     \\\n    }                                          \\\n    return json_integer(stat->member);         \\\n  }\n\n#define MAKE_TIME_INT_FIELD(name, member, scale)                  \\\n  static std::optional<json_ref> make_##name(                     \\\n      FileResult* file, const QueryContext*) {                    \\\n    auto spec = file->member();                                   \\\n    if (!spec.has_value()) {                                      \\\n      /* need to load data */                                     \\\n      return std::nullopt;                                        \\\n    }                                                             \\\n    return json_integer(                                          \\\n        ((int64_t)spec->tv_sec * scale) +                         \\\n        ((int64_t)spec->tv_nsec * scale / WATCHMAN_NSEC_IN_SEC)); \\\n  }\n\n#define MAKE_TIME_DOUBLE_FIELD(name, member)               \\\n  static std::optional<json_ref> make_##name(              \\\n      FileResult* file, const QueryContext*) {             \\\n    auto spec = file->member();                            \\\n    if (!spec.has_value()) {                               \\\n      /* need to load data */                              \\\n      return std::nullopt;                                 \\\n    }                                                      \\\n    return json_real(spec->tv_sec + 1e-9 * spec->tv_nsec); \\\n  }\n\n/* For each type (e.g. \"m\"), define fields\n * - mtime: mtime in seconds\n * - mtime_ms: mtime in milliseconds\n * - mtime_us: mtime in microseconds\n * - mtime_ns: mtime in nanoseconds\n * - mtime_f: mtime as a double\n */\n#define MAKE_TIME_FIELDS(type, member)                           \\\n  MAKE_TIME_INT_FIELD(type##time, member, 1)                     \\\n  MAKE_TIME_INT_FIELD(type##time_ms, member, 1000)               \\\n  MAKE_TIME_INT_FIELD(type##time_us, member, 1000 * 1000)        \\\n  MAKE_TIME_INT_FIELD(type##time_ns, member, 1000 * 1000 * 1000) \\\n  MAKE_TIME_DOUBLE_FIELD(type##time_f, member)\n\nMAKE_INT_FIELD(mode, mode)\nMAKE_INT_FIELD(uid, uid)\nMAKE_INT_FIELD(gid, gid)\nMAKE_TIME_FIELDS(a, accessedTime)\nMAKE_TIME_FIELDS(m, modifiedTime)\nMAKE_TIME_FIELDS(c, changedTime)\nMAKE_INT_FIELD(ino, ino)\nMAKE_INT_FIELD(dev, dev)\nMAKE_INT_FIELD(nlink, nlink)\n\n// clang-format off\n#define MAKE_TIME_FIELD_DEFS(type) \\\n  { #type \"time\", make_##type##time}, \\\n  { #type \"time_ms\", make_##type##time_ms},\\\n  { #type \"time_us\", make_##type##time_us}, \\\n  { #type \"time_ns\", make_##type##time_ns}, \\\n  { #type \"time_f\", make_##type##time_f}\n// clang-format on\n\nstd::optional<json_ref> make_type_field(FileResult* file, const QueryContext*) {\n  auto dtype = file->dtype();\n  if (dtype.has_value()) {\n    switch (*dtype) {\n      case DType::Regular:\n        return typed_string_to_json(\"f\", W_STRING_UNICODE);\n      case DType::Dir:\n        return typed_string_to_json(\"d\", W_STRING_UNICODE);\n      case DType::Symlink:\n        return typed_string_to_json(\"l\", W_STRING_UNICODE);\n      case DType::Block:\n        return typed_string_to_json(\"b\", W_STRING_UNICODE);\n      case DType::Char:\n        return typed_string_to_json(\"c\", W_STRING_UNICODE);\n      case DType::Fifo:\n        return typed_string_to_json(\"p\", W_STRING_UNICODE);\n      case DType::Socket:\n        return typed_string_to_json(\"s\", W_STRING_UNICODE);\n      case DType::Whiteout:\n        // Whiteout shouldn't generally be visible to userspace,\n        // and we don't have a defined letter code for it, so\n        // treat it as \"who knows!?\"\n        return typed_string_to_json(\"?\", W_STRING_UNICODE);\n      case DType::Unknown:\n      default:\n          // Not enough info; fall through and use the full stat data\n          ;\n    }\n  }\n\n  // Bias towards the more common file types first\n  auto optionalStat = file->stat();\n  if (!optionalStat.has_value()) {\n    return std::nullopt;\n  }\n\n  auto stat = optionalStat.value();\n  if (stat.isFile()) {\n    return typed_string_to_json(\"f\", W_STRING_UNICODE);\n  }\n  if (stat.isDir()) {\n    return typed_string_to_json(\"d\", W_STRING_UNICODE);\n  }\n  if (stat.isSymlink()) {\n    return typed_string_to_json(\"l\", W_STRING_UNICODE);\n  }\n#ifndef _WIN32\n  if (S_ISBLK(stat.mode)) {\n    return typed_string_to_json(\"b\", W_STRING_UNICODE);\n  }\n  if (S_ISCHR(stat.mode)) {\n    return typed_string_to_json(\"c\", W_STRING_UNICODE);\n  }\n  if (S_ISFIFO(stat.mode)) {\n    return typed_string_to_json(\"p\", W_STRING_UNICODE);\n  }\n  if (S_ISSOCK(stat.mode)) {\n    return typed_string_to_json(\"s\", W_STRING_UNICODE);\n  }\n#endif\n#ifdef S_ISDOOR\n  if (S_ISDOOR(stat.mode)) {\n    return typed_string_to_json(\"D\", W_STRING_UNICODE);\n  }\n#endif\n  return typed_string_to_json(\"?\", W_STRING_UNICODE);\n}\n\n// Helper to construct the list of field defs\nstd::unordered_map<w_string, QueryFieldRenderer> build_defs() {\n  struct {\n    const char* name;\n    std::optional<json_ref> (*make)(FileResult* file, const QueryContext* ctx);\n  } defs[] = {\n      {\"name\", make_name},\n      {\"symlink_target\", make_symlink},\n      {\"exists\", make_exists},\n      {\"size\", make_size},\n      {\"mode\", make_mode},\n      {\"uid\", make_uid},\n      {\"gid\", make_gid},\n      MAKE_TIME_FIELD_DEFS(a),\n      MAKE_TIME_FIELD_DEFS(m),\n      MAKE_TIME_FIELD_DEFS(c),\n      {\"ino\", make_ino},\n      {\"dev\", make_dev},\n      {\"nlink\", make_nlink},\n      {\"new\", make_new},\n      {\"oclock\", make_oclock},\n      {\"cclock\", make_cclock},\n      {\"type\", make_type_field},\n      {\"content.sha1hex\", make_sha1_hex},\n  };\n  std::unordered_map<w_string, QueryFieldRenderer> map;\n  for (auto& def : defs) {\n    w_string name(def.name, W_STRING_UNICODE);\n    map.emplace(name, QueryFieldRenderer{name, def.make});\n  }\n\n  return map;\n}\n\n// Meyers singleton to avoid SIOF wrt. static constructors in this module\n// and the order that w_ctor_fn callbacks are dispatched.\nstd::unordered_map<w_string, QueryFieldRenderer>& field_defs() {\n  static std::unordered_map<w_string, QueryFieldRenderer> map(build_defs());\n  return map;\n}\n\n} // namespace\n\nvoid QueryFieldList::add(const w_string& name) {\n  auto& defs = field_defs();\n  auto it = defs.find(name);\n  if (it == defs.end()) {\n    QueryParseError::throwf(\"unknown field name '{}'\", name);\n  }\n  this->push_back(&it->second);\n}\n\njson_ref field_list_to_json_name_array(const QueryFieldList& fieldList) {\n  std::vector<json_ref> templ;\n  templ.reserve(fieldList.size());\n\n  for (auto& f : fieldList) {\n    templ.push_back(w_string_to_json(f->name));\n  }\n\n  return json_array(std::move(templ));\n}\n\nvoid parse_field_list(\n    const std::optional<json_ref>& maybe_field_list,\n    QueryFieldList* selected) {\n  selected->clear();\n\n  json_ref field_list = maybe_field_list\n      ? *maybe_field_list\n      : json_array(\n            {typed_string_to_json(\"name\", W_STRING_UNICODE),\n             typed_string_to_json(\"exists\", W_STRING_UNICODE),\n             typed_string_to_json(\"new\", W_STRING_UNICODE),\n             typed_string_to_json(\"size\", W_STRING_UNICODE),\n             typed_string_to_json(\"mode\", W_STRING_UNICODE)});\n\n  if (!field_list.isArray()) {\n    throw QueryParseError(\"field list must be an array of strings\");\n  }\n\n  for (auto& jname : field_list.array()) {\n    if (!jname.isString()) {\n      throw QueryParseError(\"field list must be an array of strings\");\n    }\n\n    auto name = json_to_w_string(jname);\n    selected->add(name);\n  }\n}\n\nnamespace {\nstruct register_field_capabilities {\n  register_field_capabilities() {\n    for (auto& it : field_defs()) {\n      char capname[128];\n      snprintf(capname, sizeof(capname), \"field-%s\", it.first.c_str());\n      capability_register(capname);\n    }\n  }\n} reg;\n} // namespace\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/glob.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/ScopeGuard.h>\n#include <memory>\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryContext.h\"\n#include \"watchman/thirdparty/wildmatch/wildmatch.h\"\n\nusing std::make_unique;\n\nnamespace watchman {\n\nnamespace {\n\n/* The glob generator.\n * The user can specify a list of globs as the set of candidate nodes\n * for their query expression.\n * The list may feature redundant components that we desire to avoid\n * matching more times than we need.\n * For example [\"some/deep/path/foo.h\", \"some/deep/path/bar.h\"] have\n * a common path prefix that we only want to match once.\n *\n * To deal with this we compile the set of glob patterns into a tree\n * structure, splitting the pattern by the unix directory separator.\n *\n * At execution time we walk down the watchman_dir tree and the pattern\n * tree concurrently.  If the watchman_dir tree has no matching component\n * then we can terminate evaluation of that portion of the pattern tree\n * early.\n */\n\nW_CAP_REG(\"glob_generator\")\n\n// Look ahead in pattern; we want to find the directory separator.\n// While we are looking, check for wildmatch special characters.\n// If we do not find a directory separator, return NULL.\nconst char* find_sep_and_specials(\n    const char* pattern,\n    const char* end,\n    bool* had_specials) {\n  *had_specials = false;\n  while (pattern < end) {\n    switch (*pattern) {\n      case '*':\n      case '?':\n      case '[':\n      case '\\\\':\n        *had_specials = true;\n        break;\n      case '/':\n        return pattern;\n    }\n    ++pattern;\n  }\n  // No separator found\n  return nullptr;\n}\n\n// Simple brute force lookup of pattern within a node.\n// This is run at compile time and most glob sets are low enough cardinality\n// that this doesn't turn out to be a hot spot in practice.\nGlobTree* lookup_node_child(\n    std::vector<std::unique_ptr<GlobTree>>* vec,\n    const char* pattern,\n    uint32_t pattern_len) {\n  for (auto& kid : *vec) {\n    if (kid->pattern.size() == pattern_len &&\n        memcmp(kid->pattern.data(), pattern, pattern_len) == 0) {\n      return kid.get();\n    }\n  }\n  return nullptr;\n}\n\n// Compile and add a new glob pattern to the tree.\n// Compilation splits a pattern into nodes, with one node for each directory\n// separator separated path component.\nbool add_glob(GlobTree* tree, const w_string& glob_str) {\n  GlobTree* parent = tree;\n  const char* pattern = glob_str.data();\n  const char* pattern_end = pattern + glob_str.size();\n  bool had_specials;\n\n  if (glob_str.piece().pathIsAbsolute()) {\n    throw QueryParseError(\n        fmt::format(\n            \"glob `{}` is an absolute path.  All globs must be relative paths!\",\n            glob_str));\n  }\n\n  while (pattern < pattern_end) {\n    const char* sep =\n        find_sep_and_specials(pattern, pattern_end, &had_specials);\n    const char* end;\n    GlobTree* node;\n    bool is_doublestar = false;\n    auto* container = &parent->children;\n\n    end = sep ? sep : pattern_end;\n\n    // If a node uses double-star (recursive glob) then we take the remainder\n    // of the pattern string, regardless of whether we found a separator or\n    // not, because the ** forces us to walk the entire sub-tree and try the\n    // match for every possible node.\n    if (had_specials && end - pattern >= 2 && pattern[0] == '*' &&\n        pattern[1] == '*') {\n      end = pattern_end;\n      is_doublestar = true;\n\n      // Queue this up for the doublestar code path\n      container = &parent->doublestar_children;\n    }\n\n    // If we can re-use an existing node, we just saved ourselves from a\n    // redundant match at execution time!\n    node = lookup_node_child(container, pattern, (uint32_t)(end - pattern));\n    if (!node) {\n      // This is a new matching possibility.\n      container->emplace_back(\n          make_unique<GlobTree>(pattern, (uint32_t)(end - pattern)));\n      node = container->back().get();\n      node->had_specials = had_specials;\n      node->is_doublestar = is_doublestar;\n    }\n\n    // If we didn't find a separator in the remainder of this pattern, it\n    // means that we expect it to be able to match files (it is therefore the\n    // \"leaf\" of the pattern path).  Remember that fact as it can help us avoid\n    // matching files when the pattern can only match dirs.\n    if (!sep) {\n      node->is_leaf = true;\n    }\n\n    pattern = end + 1; // skip separator\n    parent = node; // the next iteration uses this node as its parent\n  }\n\n  return true;\n}\n\n} // namespace\n\nvoid parse_globs(Query* res, const json_ref& query) {\n  size_t i;\n\n  auto globs = query.get_optional(\"glob\");\n  if (!globs) {\n    return;\n  }\n\n  if (!globs->isArray()) {\n    throw QueryParseError(\"'glob' must be an array\");\n  }\n\n  // Globs implicitly enable dedup_results mode\n  res->dedup_results = true;\n\n  auto noescape = query.get_default(\"glob_noescape\", json_false());\n  if (!noescape.isBool()) {\n    throw QueryParseError(\"glob_noescape must be a boolean\");\n  }\n\n  auto includedotfiles =\n      query.get_default(\"glob_includedotfiles\", json_false());\n  if (!includedotfiles.isBool()) {\n    throw QueryParseError(\"glob_includedotfiles must be a boolean\");\n  }\n\n  res->glob_flags = (includedotfiles.asBool() ? 0 : WM_PERIOD) |\n      (noescape.asBool() ? WM_NOESCAPE : 0);\n\n  res->glob_tree = make_unique<GlobTree>(\"\", 0);\n  for (i = 0; i < json_array_size(*globs); i++) {\n    const auto& ele = globs->at(i);\n    const auto& pattern = json_to_w_string(ele);\n\n    if (!add_glob(res->glob_tree.get(), pattern)) {\n      throw QueryParseError(\"failed to compile multi-glob\");\n    }\n  }\n}\n\nstatic w_string parse_suffix(const json_ref& ele) {\n  if (!ele.isString()) {\n    throw QueryParseError(\"'suffix' must be a string or an array of strings\");\n  }\n\n  auto str = json_to_w_string(ele);\n\n  return str.piece().asLowerCase(str.type());\n}\n\nvoid parse_suffixes(Query* res, const json_ref& query) {\n  auto suffixes = query.get_optional(\"suffix\");\n  if (!suffixes) {\n    return;\n  }\n\n  std::vector<json_ref> suffixArray;\n  if (suffixes->isString()) {\n    suffixArray.push_back(*suffixes);\n  } else if (suffixes->isArray()) {\n    suffixArray = suffixes->array();\n  } else {\n    throw QueryParseError(\"'suffix' must be a string or an array of strings\");\n  }\n\n  if (query.get_optional(\"glob\")) {\n    throw QueryParseError(\n        \"'suffix' cannot be used together with the 'glob' generator\");\n  }\n\n  // Globs implicitly enable dedup_results mode\n  res->dedup_results = true;\n  // Suffix queries are defined as being case insensitive\n  res->glob_flags = WM_CASEFOLD;\n  res->glob_tree = make_unique<GlobTree>(\"\", 0);\n\n  for (auto& ele : suffixArray) {\n    if (!ele.isString()) {\n      throw QueryParseError(\"'suffix' must be a string or an array of strings\");\n    }\n\n    auto suff = parse_suffix(ele);\n    auto pattern = w_string::build(\"**/*.\", suff);\n    if (!add_glob(res->glob_tree.get(), pattern)) {\n      throw QueryParseError(\"failed to compile multi-glob\");\n    }\n  }\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/intcompare.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/query/intcompare.h\"\n#include <fmt/core.h>\n#include \"watchman/Errors.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n\n#include <memory>\n\nnamespace watchman {\n\n// Helper functions for integer comparisons in query expressions\n\nstatic const struct {\n  const char* opname;\n  enum w_query_icmp_op op;\n} opname_to_op[] = {\n    {\"eq\", W_QUERY_ICMP_EQ},\n    {\"ne\", W_QUERY_ICMP_NE},\n    {\"gt\", W_QUERY_ICMP_GT},\n    {\"ge\", W_QUERY_ICMP_GE},\n    {\"lt\", W_QUERY_ICMP_LT},\n    {\"le\", W_QUERY_ICMP_LE},\n};\n\n// term is a json array that looks like:\n// [\"size\", \"eq\", 1024]\nvoid parse_int_compare(const json_ref& term, struct w_query_int_compare* comp) {\n  const char* opname;\n  size_t i;\n  bool found = false;\n\n  auto& arr = term.array();\n\n  if (arr.size() != 3) {\n    throw QueryParseError(\"integer comparator must have 3 elements\");\n  }\n  if (!arr[1].isString()) {\n    throw QueryParseError(\"integer comparator op must be a string\");\n  }\n  if (!arr[2].isInt()) {\n    throw QueryParseError(\"integer comparator operand must be an integer\");\n  }\n\n  opname = json_string_value(arr[1]);\n  for (i = 0; i < sizeof(opname_to_op) / sizeof(opname_to_op[0]); i++) {\n    if (!strcmp(opname_to_op[i].opname, opname)) {\n      comp->op = opname_to_op[i].op;\n      found = true;\n      break;\n    }\n  }\n\n  if (!found) {\n    throw QueryParseError(\n        fmt::format(\"integer comparator opname `{}' is invalid\", opname));\n  }\n\n  comp->operand = arr[2].asInt();\n}\n\nbool eval_int_compare(json_int_t ival, struct w_query_int_compare* comp) {\n  switch (comp->op) {\n    case W_QUERY_ICMP_EQ:\n      return ival == comp->operand;\n    case W_QUERY_ICMP_NE:\n      return ival != comp->operand;\n    case W_QUERY_ICMP_GT:\n      return ival > comp->operand;\n    case W_QUERY_ICMP_GE:\n      return ival >= comp->operand;\n    case W_QUERY_ICMP_LT:\n      return ival < comp->operand;\n    case W_QUERY_ICMP_LE:\n      return ival <= comp->operand;\n    default:\n      // Not possible to get here, but some compilers don't realize\n      return false;\n  }\n}\n\nclass SizeExpr : public QueryExpr {\n  w_query_int_compare comp;\n\n public:\n  explicit SizeExpr(w_query_int_compare comp) : comp(comp) {}\n\n  EvaluateResult evaluate(QueryContextBase*, FileResult* file) override {\n    auto exists = file->exists();\n    auto size = file->size();\n\n    if (!exists.has_value()) {\n      return std::nullopt;\n    }\n\n    // Removed files never match\n    if (!exists.value()) {\n      return false;\n    }\n\n    if (!size.has_value()) {\n      return std::nullopt;\n    }\n\n    return eval_int_compare(size.value(), &comp);\n  }\n\n  static std::unique_ptr<QueryExpr> parse(Query*, const json_ref& term) {\n    if (!term.isArray()) {\n      throw QueryParseError(\"Expected array for 'size' term\");\n    }\n\n    w_query_int_compare comp;\n    parse_int_compare(term, &comp);\n\n    return std::make_unique<SizeExpr>(comp);\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // `size` doesn't constrain the path.\n    return std::nullopt;\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\nW_TERM_PARSER(size, SizeExpr::parse);\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/intcompare.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nnamespace watchman {\n\nenum w_query_icmp_op {\n  W_QUERY_ICMP_EQ,\n  W_QUERY_ICMP_NE,\n  W_QUERY_ICMP_GT,\n  W_QUERY_ICMP_GE,\n  W_QUERY_ICMP_LT,\n  W_QUERY_ICMP_LE,\n};\nstruct w_query_int_compare {\n  enum w_query_icmp_op op;\n  json_int_t operand;\n};\nvoid parse_int_compare(const json_ref& term, struct w_query_int_compare* comp);\nbool eval_int_compare(json_int_t ival, struct w_query_int_compare* comp);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/match.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <memory>\n#include <string>\n#include \"GlobEscaping.h\"\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n#include \"watchman/thirdparty/wildmatch/wildmatch.h\"\n\nnamespace watchman {\n\nnamespace {\n/// Trims the given \\param pattern after the first occurrence of the `**`\n/// token, if any.\nw_string_piece trimGlobAfterDoubleStar(w_string_piece pattern) {\n  bool inClass = false;\n  const char* pos = pattern.data();\n  const char* end = pattern.data() + pattern.size();\n  while (pos < end) {\n    if (inClass) {\n      switch (*pos) {\n        case ']':\n          inClass = false;\n          break;\n        case '\\\\':\n          // skip the escaped character\n          ++pos;\n          break;\n      }\n    } else {\n      switch (*pos) {\n        case '[':\n          inClass = true;\n          break;\n        case '\\\\':\n          // skip the escaped character\n          ++pos;\n          break;\n        case '*':\n          // Look ahead to see if this is a `**` token.\n          if ((pos + 1 < end) && pos[1] == '*') {\n            return w_string_piece{pattern.data(), pos + 2};\n          }\n          break;\n      }\n    }\n    ++pos;\n  }\n  return pattern;\n}\n} // namespace\nclass WildMatchExpr : public QueryExpr {\n  std::string pattern;\n  CaseSensitivity caseSensitive;\n  bool wholename;\n  bool noescape;\n  bool includedotfiles;\n\n public:\n  WildMatchExpr(\n      const char* pat,\n      CaseSensitivity caseSensitive,\n      bool wholename,\n      bool noescape,\n      bool includedotfiles)\n      : pattern(pat),\n        caseSensitive(caseSensitive),\n        wholename(wholename),\n        noescape(noescape),\n        includedotfiles(includedotfiles) {}\n\n  EvaluateResult evaluate(QueryContextBase* ctx, FileResult* file) override {\n    w_string_piece str;\n    bool res;\n\n    if (wholename) {\n      str = ctx->getWholeName();\n    } else {\n      str = file->baseName();\n    }\n\n#ifdef _WIN32\n    // Translate to unix style slashes for wildmatch\n    w_string normBuf = str.asWString().normalizeSeparators();\n    str = normBuf;\n#endif\n\n    res =\n        wildmatch(\n            pattern.c_str(),\n            str.data(),\n            (includedotfiles ? 0 : WM_PERIOD) | (noescape ? WM_NOESCAPE : 0) |\n                (wholename ? WM_PATHNAME : 0) |\n                (caseSensitive == CaseSensitivity::CaseInSensitive ? WM_CASEFOLD\n                                                                   : 0),\n            0) == WM_MATCH;\n\n    return res;\n  }\n\n  static std::unique_ptr<QueryExpr>\n  parse(Query*, const json_ref& term, CaseSensitivity case_sensitive) {\n    const char *pattern, *scope = \"basename\";\n    const char* which =\n        case_sensitive == CaseSensitivity::CaseInSensitive ? \"imatch\" : \"match\";\n    int noescape = 0;\n    int includedotfiles = 0;\n\n    if (term.array().size() > 1 && term.at(1).isString()) {\n      pattern = json_string_value(term.at(1));\n    } else {\n      QueryParseError::throwf(\n          \"First parameter to \\\"{}\\\" term must be a pattern string\", which);\n    }\n\n    if (term.array().size() > 2) {\n      if (term.at(2).isString()) {\n        scope = json_string_value(term.at(2));\n      } else {\n        QueryParseError::throwf(\n            \"Second parameter to \\\"{}\\\" term must be an optional scope string\",\n            which);\n      }\n    }\n\n    if (term.array().size() > 3) {\n      auto& opts = term.at(3);\n      if (!opts.isObject()) {\n        QueryParseError::throwf(\n            \"Third parameter to \\\"{}\\\" term must be an optional object\", which);\n      }\n\n      auto ele = opts.get_default(\"noescape\", json_false());\n      if (!ele.isBool()) {\n        QueryParseError::throwf(\n            \"noescape option for \\\"{}\\\" term must be a boolean\", which);\n      }\n      noescape = ele.asBool();\n\n      ele = opts.get_default(\"includedotfiles\", json_false());\n      if (!ele.isBool()) {\n        QueryParseError::throwf(\n            \"includedotfiles option for \\\"{}\\\" term must be a boolean\", which);\n      }\n      includedotfiles = ele.asBool();\n    }\n\n    if (term.array().size() > 4) {\n      QueryParseError::throwf(\n          \"too many parameters passed to \\\"{}\\\" expression\", which);\n    }\n\n    if (strcmp(scope, \"basename\") && strcmp(scope, \"wholename\")) {\n      QueryParseError::throwf(\n          \"Invalid scope '{}' for {} expression\", scope, which);\n    }\n\n    return std::make_unique<WildMatchExpr>(\n        pattern,\n        case_sensitive,\n        !strcmp(scope, \"wholename\"),\n        noescape,\n        includedotfiles);\n  }\n  static std::unique_ptr<QueryExpr> parseMatch(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, query->case_sensitive);\n  }\n  static std::unique_ptr<QueryExpr> parseIMatch(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, CaseSensitivity::CaseInSensitive);\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity outputCaseSensitive) const override {\n    if (caseSensitive == CaseSensitivity::CaseInSensitive &&\n        outputCaseSensitive != CaseSensitivity::CaseInSensitive) {\n      // The caller asked for a case-sensitive upper bound, so treat imatch as\n      // unbounded.\n      return std::nullopt;\n    }\n    if (!wholename) {\n      // basename matches don't bound the prefix, so they're not very useful.\n      return std::nullopt;\n    }\n    w_string outputPattern{pattern};\n    if (outputPattern.piece().startsWith(\"**\")) {\n      // This pattern doesn't bound the prefix, so just report it as unbounded.\n      return std::nullopt;\n    }\n    if (outputCaseSensitive == CaseSensitivity::CaseInSensitive) {\n      outputPattern = outputPattern.piece().asLowerCase();\n    }\n    if (noescape) {\n      outputPattern = convertNoEscapeGlobToGlob(outputPattern);\n    }\n    return std::vector<std::string>{\n        trimGlobAfterDoubleStar(outputPattern).string()};\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\nW_TERM_PARSER(match, WildMatchExpr::parseMatch);\nW_TERM_PARSER(imatch, WildMatchExpr::parseIMatch);\nW_CAP_REG(\"wildmatch\")\nW_CAP_REG(\"wildmatch-multislash\")\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/name.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Errors.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/GlobEscaping.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n\n#include <unordered_set>\n\nusing namespace watchman;\n\nclass NameExpr : public QueryExpr {\n  w_string name;\n  std::unordered_set<w_string> set;\n  CaseSensitivity caseSensitive;\n  bool wholename;\n  explicit NameExpr(\n      std::unordered_set<w_string>&& set,\n      CaseSensitivity caseSensitive,\n      bool wholename)\n      : set(std::move(set)),\n        caseSensitive(caseSensitive),\n        wholename(wholename) {}\n\n public:\n  EvaluateResult evaluate(QueryContextBase* ctx, FileResult* file) override {\n    if (!set.empty()) {\n      bool matched;\n      w_string str;\n\n      if (wholename) {\n        str = ctx->getWholeName();\n        if (caseSensitive == CaseSensitivity::CaseInSensitive) {\n          str = str.piece().asLowerCase();\n        }\n      } else {\n        str = caseSensitive == CaseSensitivity::CaseInSensitive\n            ? file->baseName().asLowerCase()\n            : file->baseName().asWString();\n      }\n\n      matched = set.find(str) != set.end();\n\n      return matched;\n    }\n\n    w_string_piece str;\n\n    if (wholename) {\n      str = ctx->getWholeName();\n    } else {\n      str = file->baseName();\n    }\n\n    if (caseSensitive == CaseSensitivity::CaseInSensitive) {\n      return w_string_equal_caseless(str, name);\n    }\n    return str == name;\n  }\n\n  static std::unique_ptr<QueryExpr>\n  parse(Query*, const json_ref& term, CaseSensitivity caseSensitive) {\n    const char *pattern = nullptr, *scope = \"basename\";\n    const char* which =\n        caseSensitive == CaseSensitivity::CaseInSensitive ? \"iname\" : \"name\";\n    std::unordered_set<w_string> set;\n\n    if (!term.isArray()) {\n      QueryParseError::throwf(\"Expected array for '{}' term\", which);\n    }\n\n    if (json_array_size(term) > 3) {\n      QueryParseError::throwf(\n          \"Invalid number of arguments for '{}' term\", which);\n    }\n\n    if (json_array_size(term) == 3) {\n      const auto& jscope = term.at(2);\n      if (!jscope.isString()) {\n        QueryParseError::throwf(\"Argument 3 to '{}' must be a string\", which);\n      }\n\n      scope = json_string_value(jscope);\n\n      if (strcmp(scope, \"basename\") && strcmp(scope, \"wholename\")) {\n        QueryParseError::throwf(\n            \"Invalid scope '{}' for {} expression\", scope, which);\n      }\n    }\n\n    const auto& name = term.at(1);\n\n    if (name.isArray()) {\n      const auto& name_array = name.array();\n\n      for (const auto& ele : name_array) {\n        if (!ele.isString()) {\n          QueryParseError::throwf(\n              \"Argument 2 to '{}' must be either a string or an array of string\",\n              which);\n        }\n      }\n\n      set.reserve(name_array.size());\n      for (const auto& jele : name_array) {\n        w_string element;\n        auto ele = json_to_w_string(jele);\n\n        if (caseSensitive == CaseSensitivity::CaseInSensitive) {\n          element = ele.piece().asLowerCase(ele.type()).normalizeSeparators();\n        } else {\n          element = ele.normalizeSeparators();\n        }\n\n        set.insert(element);\n      }\n\n    } else if (name.isString()) {\n      pattern = json_string_value(name);\n    } else {\n      QueryParseError::throwf(\n          \"Argument 2 to '{}' must be either a string or an array of string\",\n          which);\n    }\n\n    auto data = new NameExpr(\n        std::move(set), caseSensitive, !strcmp(scope, \"wholename\"));\n\n    if (pattern) {\n      data->name = json_to_w_string(name).normalizeSeparators();\n    }\n\n    return std::unique_ptr<QueryExpr>(data);\n  }\n\n  static std::unique_ptr<QueryExpr> parseName(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, query->case_sensitive);\n  }\n  static std::unique_ptr<QueryExpr> parseIName(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, CaseSensitivity::CaseInSensitive);\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity outputCaseSensitive) const override {\n    if (caseSensitive == CaseSensitivity::CaseInSensitive &&\n        outputCaseSensitive != CaseSensitivity::CaseInSensitive) {\n      // The caller asked for a case-sensitive upper bound, so treat iname as\n      // unbounded.\n      return std::nullopt;\n    }\n    if (!wholename) {\n      // basename matches don't bound the prefix, so they're not very useful.\n      return std::nullopt;\n    }\n    std::unordered_set<std::string> globUpperBound;\n    if (!set.empty()) {\n      for (const auto& s : set) {\n        w_string outputPattern = convertLiteralPathToGlob(s);\n        if (outputCaseSensitive == CaseSensitivity::CaseInSensitive) {\n          outputPattern = outputPattern.piece().asLowerCase();\n        }\n        globUpperBound.insert(outputPattern.string());\n      }\n    } else {\n      w_string outputPattern = convertLiteralPathToGlob(name);\n      if (outputCaseSensitive == CaseSensitivity::CaseInSensitive) {\n        outputPattern = outputPattern.piece().asLowerCase();\n      }\n      globUpperBound.insert(outputPattern.string());\n    }\n    return std::vector<std::string>(\n        globUpperBound.begin(), globUpperBound.end());\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\n\nW_TERM_PARSER(name, NameExpr::parseName);\nW_TERM_PARSER(iname, NameExpr::parseIName);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/parse.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n#include \"watchman/query/parse.h\"\n#include \"watchman/root/Root.h\"\n\nnamespace watchman {\n\nnamespace {\n\nbool parse_since(Query* res, const json_ref& query) {\n  auto since = query.get_optional(\"since\");\n  if (!since) {\n    return true;\n  }\n\n  auto spec = ClockSpec::parseOptionalClockSpec(*since);\n  if (spec) {\n    // res owns the ref to spec\n    res->since_spec = std::move(spec);\n    return true;\n  }\n\n  throw QueryParseError(\"invalid value for 'since'\");\n}\n\nbool parse_paths(Query* res, const json_ref& query) {\n  size_t i;\n\n  auto paths = query.get_optional(\"path\");\n  if (!paths) {\n    return true;\n  }\n\n  if (!paths->isArray()) {\n    throw QueryParseError(\"'path' must be an array\");\n  }\n\n  auto size = json_array_size(*paths);\n\n  res->paths.emplace();\n  std::vector<QueryPath>& res_paths = *res->paths;\n  res_paths.resize(size);\n\n  for (i = 0; i < size; i++) {\n    const auto& ele = paths->at(i);\n    w_string name;\n\n    res_paths[i].depth = -1;\n\n    if (ele.isString()) {\n      name = json_to_w_string(ele);\n    } else if (ele.isObject()) {\n      name = json_to_w_string(ele.get(\"path\"));\n\n      auto depth = ele.get(\"depth\");\n      if (!depth.isInt()) {\n        throw QueryParseError(\"path.depth must be an integer\");\n      }\n\n      res_paths[i].depth = depth.asInt();\n    } else {\n      throw QueryParseError(\n          \"expected object with 'path' and 'depth' properties\");\n    }\n\n    res_paths[i].name = name.normalizeSeparators();\n  }\n\n  return true;\n}\n\nW_CAP_REG(\"relative_root\")\n\nvoid parse_relative_root(\n    const std::shared_ptr<Root>& root,\n    Query* res,\n    const json_ref& query) {\n  auto relative_root = query.get_optional(\"relative_root\");\n  if (!relative_root) {\n    return;\n  }\n\n  if (!relative_root->isString()) {\n    throw QueryParseError(\"'relative_root' must be a string\");\n  }\n\n  auto path = json_to_w_string(*relative_root).normalizeSeparators();\n  if (path.empty()) {\n    // An empty relative_root is equivalent to not specifying\n    // a relative root.  Importantly, we want to avoid setting\n    // relative_root to \"\" because that introduces some complexities\n    // in handling that case for eg: eden.\n    return;\n  }\n\n  auto canon_path = w_string_canon_path(path);\n  res->relative_root = w_string::pathCat({root->root_path, canon_path});\n  res->relative_root_slash = w_string::build(res->relative_root.value(), \"/\");\n}\n\nvoid parse_query_expression(Query* res, const json_ref& query) {\n  auto exp = query.get_optional(\"expression\");\n  if (!exp) {\n    // Empty expression means that we emit all generated files\n    return;\n  }\n\n  res->expr = parseQueryExpr(res, *exp);\n}\n\nvoid parse_request_id(Query* res, const json_ref& query) {\n  auto request_id = query.get_optional(\"request_id\");\n  if (!request_id) {\n    return;\n  }\n\n  if (!request_id->isString()) {\n    throw QueryParseError(\"'request_id' must be a string\");\n  }\n\n  res->request_id = json_to_w_string(*request_id);\n}\n\nnamespace {\njson_int_t parse_nonnegative_integer(std::string_view name, json_ref v) {\n  if (!v.isInt()) {\n    throw QueryParseError(std::string{name} + \" must be an integer value >= 0\");\n  }\n  json_int_t value = v.asInt();\n  if (value < 0) {\n    throw QueryParseError(std::string{name} + \" must be an integer value >= 0\");\n  }\n  return value;\n}\n} // namespace\n\nvoid parse_sync(Query* res, const json_ref& query) {\n  auto settle_period = query.get_optional(\"settle_period\");\n  auto settle_timeout = query.get_optional(\"settle_timeout\");\n  if (settle_period && settle_timeout) {\n    auto settle_period_value =\n        parse_nonnegative_integer(\"settle_period\", *settle_period);\n    auto settle_timeout_value =\n        parse_nonnegative_integer(\"settle_timeout\", *settle_timeout);\n    Query::SettleTimeouts settle_timeouts;\n    settle_timeouts.settle_period =\n        std::chrono::milliseconds{settle_period_value};\n    settle_timeouts.settle_timeout =\n        std::chrono::milliseconds{settle_timeout_value};\n    res->settle_timeouts = settle_timeouts;\n  } else if (settle_period) {\n    throw QueryParseError(\"settle_period specified without settle_timeout\");\n  } else if (settle_timeout) {\n    throw QueryParseError(\"settle_timeout specified without settle_period\");\n  }\n\n  auto sync_timeout = query.get_default(\n      \"sync_timeout\",\n      json_integer(\n          std::chrono::duration_cast<std::chrono::milliseconds>(\n              kDefaultQuerySyncTimeout)\n              .count()));\n  res->sync_timeout = std::chrono::milliseconds{\n      parse_nonnegative_integer(\"sync_timeout\", sync_timeout)};\n}\n\nvoid parse_lock_timeout(Query* res, const json_ref& query) {\n  auto lock_timeout = query.get_default(\n      \"lock_timeout\",\n      json_integer(\n          std::chrono::duration_cast<std::chrono::milliseconds>(\n              kDefaultQuerySyncTimeout)\n              .count()));\n\n  if (!lock_timeout.isInt()) {\n    throw QueryParseError(\"lock_timeout must be an integer value >= 0\");\n  }\n\n  auto value = lock_timeout.asInt();\n\n  if (value < 0) {\n    throw QueryParseError(\"lock_timeout must be an integer value >= 0\");\n  }\n\n  res->lock_timeout = value;\n}\n\nbool parse_bool_param(\n    const json_ref& query,\n    const char* name,\n    bool default_value) {\n  auto value = query.get_default(name, json_boolean(default_value));\n  if (!value.isBool()) {\n    throw QueryParseError(fmt::format(\"{} must be a boolean\", name));\n  }\n\n  return value.asBool();\n}\n\nW_CAP_REG(\"dedup_results\")\n\nvoid parse_dedup(Query* res, const json_ref& query) {\n  res->dedup_results = parse_bool_param(query, \"dedup_results\", false);\n}\n\nvoid parse_fail_if_no_saved_state(Query* res, const json_ref& query) {\n  res->fail_if_no_saved_state =\n      parse_bool_param(query, \"fail_if_no_saved_state\", false);\n}\n\nvoid parse_omit_changed_files(Query* res, const json_ref& query) {\n  res->omit_changed_files =\n      parse_bool_param(query, \"omit_changed_files\", false);\n}\n\nvoid parse_empty_on_fresh_instance(Query* res, const json_ref& query) {\n  res->empty_on_fresh_instance =\n      parse_bool_param(query, \"empty_on_fresh_instance\", false);\n}\n\nvoid parse_always_include_directories(Query* res, const json_ref& query) {\n  res->alwaysIncludeDirectories =\n      parse_bool_param(query, \"always_include_directories\", false);\n}\n\nvoid parse_benchmark(Query* res, const json_ref& query) {\n  // Preserve behavior by supporting a boolean value. Also support int values.\n  auto bench = query.get_optional(\"bench\");\n  if (bench) {\n    if (bench->isBool()) {\n      res->bench_iterations = 100;\n    } else {\n      res->bench_iterations = bench->asInt();\n    }\n  }\n}\n\nvoid parse_case_sensitive(\n    Query* res,\n    const std::shared_ptr<Root>& root,\n    const json_ref& query) {\n  auto case_sensitive = parse_bool_param(\n      query,\n      \"case_sensitive\",\n      root->case_sensitive == CaseSensitivity::CaseSensitive);\n\n  res->case_sensitive = case_sensitive ? CaseSensitivity::CaseSensitive\n                                       : CaseSensitivity::CaseInSensitive;\n}\n\n} // namespace\n\nstd::shared_ptr<Query> parseQuery(\n    const std::shared_ptr<Root>& root,\n    const json_ref& query) {\n  auto result = std::make_shared<Query>();\n  auto res = result.get();\n\n  parse_benchmark(res, query);\n  parse_case_sensitive(res, root, query);\n  parse_sync(res, query);\n  parse_dedup(res, query);\n  parse_lock_timeout(res, query);\n  parse_relative_root(root, res, query);\n  parse_empty_on_fresh_instance(res, query);\n  parse_fail_if_no_saved_state(res, query);\n  parse_omit_changed_files(res, query);\n  parse_always_include_directories(res, query);\n\n  /* Look for path generators */\n  parse_paths(res, query);\n\n  /* Look for glob generators */\n  parse_globs(res, query);\n\n  /* Look for suffix generators */\n  parse_suffixes(res, query);\n\n  /* Look for since generator */\n  parse_since(res, query);\n\n  parse_query_expression(res, query);\n\n  parse_request_id(res, query);\n\n  parse_field_list(query.get_optional(\"fields\"), &res->fieldList);\n\n  res->query_spec = query;\n\n  return result;\n}\n\nvoid w_query_legacy_field_list(QueryFieldList* flist) {\n  // TODO: Avoid the round-trip through json_ref and insert the requested fields\n  // into QueryFieldList directly.\n\n  static const char* names[] = {\n      \"name\",\n      \"exists\",\n      \"size\",\n      \"mode\",\n      \"uid\",\n      \"gid\",\n      \"mtime\",\n      \"ctime\",\n      \"ino\",\n      \"dev\",\n      \"nlink\",\n      \"new\",\n      \"cclock\",\n      \"oclock\"};\n  uint8_t i;\n  std::vector<json_ref> list;\n\n  for (i = 0; i < sizeof(names) / sizeof(names[0]); i++) {\n    list.push_back(typed_string_to_json(names[i], W_STRING_UNICODE));\n  }\n\n  parse_field_list(json_array(std::move(list)), flist);\n}\n\n// Translate from the legacy array into the new style, then\n// delegate to the main parser.\n// We build a big anyof expression\nstd::shared_ptr<Query> parseQueryLegacy(\n    const std::shared_ptr<Root>& root,\n    const json_ref& args,\n    int start,\n    uint32_t* next_arg,\n    const char* clockspec,\n    json_ref* expr_p) {\n  bool include = true;\n  bool negated = false;\n  uint32_t i;\n  const char* term_name = \"match\";\n  std::vector<json_ref> included_array;\n  std::vector<json_ref> excluded_array;\n  auto query_obj = json_object();\n\n  if (!args.isArray()) {\n    throw QueryParseError(\"Expected an array\");\n  }\n\n  auto& args_array = args.array();\n\n  for (i = start; i < args_array.size(); i++) {\n    const char* arg = json_string_value(args_array[i]);\n    if (!arg) {\n      /* not a string value! */\n      throw QueryParseError(\n          fmt::format(\"rule @ position {} is not a string value\", i));\n    }\n  }\n\n  for (i = start; i < json_array_size(args); i++) {\n    const char* arg = json_string_value(args_array[i]);\n    if (!strcmp(arg, \"--\")) {\n      i++;\n      break;\n    }\n    if (!strcmp(arg, \"-X\")) {\n      include = false;\n      continue;\n    }\n    if (!strcmp(arg, \"-I\")) {\n      include = true;\n      continue;\n    }\n    if (!strcmp(arg, \"!\")) {\n      negated = true;\n      continue;\n    }\n    if (!strcmp(arg, \"-P\")) {\n      term_name = \"ipcre\";\n      continue;\n    }\n    if (!strcmp(arg, \"-p\")) {\n      term_name = \"pcre\";\n      continue;\n    }\n\n    // Which group are we going to file it into\n    std::vector<json_ref>* container;\n    if (include) {\n      if (included_array.empty()) {\n        included_array.push_back(\n            typed_string_to_json(\"anyof\", W_STRING_UNICODE));\n      }\n      container = &included_array;\n    } else {\n      if (excluded_array.empty()) {\n        excluded_array.push_back(\n            typed_string_to_json(\"anyof\", W_STRING_UNICODE));\n      }\n      container = &excluded_array;\n    }\n\n    auto term = json_array(\n        {typed_string_to_json(term_name, W_STRING_UNICODE),\n         typed_string_to_json(arg),\n         typed_string_to_json(\"wholename\", W_STRING_UNICODE)});\n    if (negated) {\n      term = json_array({typed_string_to_json(\"not\", W_STRING_UNICODE), term});\n    }\n    container->push_back(std::move(term));\n\n    // Reset negated flag\n    negated = false;\n    term_name = \"match\";\n  }\n\n  std::optional<json_ref> included = included_array.empty()\n      ? std::nullopt\n      : std::make_optional(json_array(std::move(included_array)));\n\n  std::optional<json_ref> excluded;\n  if (!excluded_array.empty()) {\n    excluded = json_array(\n        {typed_string_to_json(\"not\", W_STRING_UNICODE),\n         json_array(std::move(excluded_array))});\n  }\n\n  std::optional<json_ref> query_array;\n  if (included && excluded) {\n    query_array = json_array(\n        {typed_string_to_json(\"allof\", W_STRING_UNICODE),\n         *excluded,\n         *included});\n  } else if (included) {\n    query_array = included;\n  } else {\n    query_array = excluded;\n  }\n\n  // query_array may be NULL, which means find me all files.\n  // Otherwise, it is the expression we want to use.\n  if (query_array) {\n    json_object_set_new_nocheck(\n        query_obj, \"expression\", std::move(*query_array));\n  }\n\n  // For trigger\n  if (next_arg) {\n    *next_arg = i;\n  }\n\n  if (clockspec) {\n    json_object_set_new_nocheck(\n        query_obj, \"since\", typed_string_to_json(clockspec, W_STRING_UNICODE));\n  }\n\n  /* compose the query with the field list */\n  auto query = parseQuery(root, query_obj);\n\n  if (expr_p) {\n    *expr_p = query_obj;\n  }\n\n  if (query) {\n    w_query_legacy_field_list(&query->fieldList);\n  }\n\n  return query;\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/parse.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <vector>\n#include \"watchman/Clock.h\"\n#include \"watchman/fs/FileSystem.h\"\n\nnamespace watchman {\n\nstruct Query;\nstruct QueryFieldRenderer;\nclass QueryFieldList;\nclass Root;\n\nconstexpr inline std::chrono::milliseconds kDefaultQuerySyncTimeout{60000};\n\nstd::shared_ptr<watchman::Query> parseQuery(\n    const std::shared_ptr<watchman::Root>& root,\n    const json_ref& query);\n\n// parse the old style since and find queries\nstd::shared_ptr<watchman::Query> parseQueryLegacy(\n    const std::shared_ptr<watchman::Root>& root,\n    const json_ref& args,\n    int start,\n    uint32_t* next_arg,\n    const char* clockspec,\n    json_ref* expr_p);\n\nvoid w_query_legacy_field_list(watchman::QueryFieldList* flist);\n\nvoid parse_field_list(\n    const std::optional<json_ref>& field_list,\n    watchman::QueryFieldList* selected);\njson_ref field_list_to_json_name_array(\n    const watchman::QueryFieldList& fieldList);\n\nvoid parse_suffixes(watchman::Query* res, const json_ref& query);\nvoid parse_globs(watchman::Query* res, const json_ref& query);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/query/pcre.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include <memory>\n#include \"watchman/Errors.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n\n#ifdef HAVE_PCRE_H\n\n#include <pcre2.h> // @manual=fbsource//third-party/pcre2:pcre2-8\n\nusing namespace watchman;\n\nclass PcreExpr : public QueryExpr {\n  pcre2_code* re;\n  pcre2_match_data* matchData;\n  bool wholename;\n\n public:\n  explicit PcreExpr(pcre2_code* re, pcre2_match_data* matchData, bool wholename)\n      : re(re), matchData(matchData), wholename(wholename) {}\n\n  ~PcreExpr() override {\n    if (re) {\n      pcre2_code_free(re);\n    }\n    if (matchData) {\n      pcre2_match_data_free(matchData);\n    }\n  }\n\n  EvaluateResult evaluate(QueryContextBase* ctx, FileResult* file) override {\n    w_string_piece str;\n    int rc;\n\n    if (wholename) {\n      str = ctx->getWholeName();\n    } else {\n      str = file->baseName();\n    }\n\n    logf(ERR, \"NAME: {}\\n\", str);\n\n    rc = pcre2_match(\n        re,\n        reinterpret_cast<const unsigned char*>(str.data()),\n        str.size(),\n        0,\n        0,\n        matchData,\n        nullptr);\n    logf(ERR, \"RC: {}\\n\", rc);\n    // Errors are either PCRE2_ERROR_NOMATCH or non actionable. Thus only match\n    // when we get a positive return value.\n    return rc >= 0;\n  }\n\n  static std::unique_ptr<QueryExpr>\n  parse(Query*, const json_ref& term, CaseSensitivity caseSensitive) {\n    const char *pattern, *scope = \"basename\";\n    const char* which =\n        caseSensitive == CaseSensitivity::CaseInSensitive ? \"ipcre\" : \"pcre\";\n    size_t erroff = 0;\n    int errcode = 0;\n\n    if (term.array().size() > 1 && term.at(1).isString()) {\n      pattern = json_string_value(term.at(1));\n    } else {\n      throw QueryParseError(\n          fmt::format(\n              \"First parameter to \\\"{}\\\" term must be a pattern string\",\n              which));\n    }\n\n    if (term.array().size() > 2) {\n      if (term.at(2).isString()) {\n        scope = json_string_value(term.at(2));\n      } else {\n        throw QueryParseError(\n            fmt::format(\n                \"Second parameter to \\\"{}\\\" term must be an optional scope string\",\n                which));\n      }\n    }\n\n    if (strcmp(scope, \"basename\") && strcmp(scope, \"wholename\")) {\n      throw QueryParseError(\n          fmt::format(\"Invalid scope '{}' for {} expression\", scope, which));\n    }\n\n    logf(ERR, \"PATTERN: {}\\n\", pattern);\n\n    auto re = pcre2_compile(\n        reinterpret_cast<const unsigned char*>(pattern),\n        PCRE2_ZERO_TERMINATED,\n        caseSensitive == CaseSensitivity::CaseInSensitive ? PCRE2_CASELESS : 0,\n        &errcode,\n        &erroff,\n        nullptr);\n    if (!re) {\n      // From PCRE2 documentation:\n      // https://www.pcre.org/current/doc/html/pcre2api.html#SEC32: \"None of the\n      // messages are very long; a buffer size of 120 code units is ample\"\n      PCRE2_UCHAR buffer[120];\n      static_assert(\n          sizeof(char) == sizeof(PCRE2_UCHAR),\n          \"Watchman uses the 8-bit PCRE2 library\");\n      pcre2_get_error_message(errcode, buffer, 120);\n      throw QueryParseError(\n          fmt::format(\n              \"invalid {}: code {} {} at offset {} in {}\",\n              which,\n              errcode,\n              reinterpret_cast<const char*>(&buffer),\n              erroff,\n              pattern));\n    }\n\n    auto matchData = pcre2_match_data_create_from_pattern(re, nullptr);\n    if (!matchData) {\n      throw std::bad_alloc();\n    }\n\n    return std::make_unique<PcreExpr>(\n        re, matchData, !strcmp(scope, \"wholename\"));\n  }\n  static std::unique_ptr<QueryExpr> parsePcre(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, query->case_sensitive);\n  }\n  static std::unique_ptr<QueryExpr> parseIPcre(\n      Query* query,\n      const json_ref& term) {\n    return parse(query, term, CaseSensitivity::CaseInSensitive);\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // We could, in principle, try to reverse-engineer the expression into a\n    // prefix glob (if it's wholename-scoped and has the same case-sensitivity\n    // as the one passed here).\n    //\n    // In practice, it's better to treat all `pcre` terms as unbounded, and ask\n    // clients who care about bounding their queries to add a `match` or\n    // `dirname` term explicitly.\n\n    return std::nullopt;\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\nW_TERM_PARSER(pcre, PcreExpr::parsePcre);\nW_TERM_PARSER(ipcre, PcreExpr::parseIPcre);\n\n#else\n\nW_TERM_PARSER_UNSUPPORTED(pcre);\nW_TERM_PARSER_UNSUPPORTED(ipcre);\n\n#endif\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/since.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Errors.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n\n#include <folly/Overload.h>\n\n#include <memory>\n\nusing namespace watchman;\n\nnamespace watchman {\nclass QueryContextBase;\n}\n\nenum since_what { SINCE_OCLOCK, SINCE_CCLOCK, SINCE_MTIME, SINCE_CTIME };\n\nstatic struct {\n  enum since_what value;\n  const char* label;\n} allowed_fields[] = {\n    {since_what::SINCE_OCLOCK, \"oclock\"},\n    {since_what::SINCE_CCLOCK, \"cclock\"},\n    {since_what::SINCE_MTIME, \"mtime\"},\n    {since_what::SINCE_CTIME, \"ctime\"},\n};\n\nclass SinceExpr : public QueryExpr {\n  std::unique_ptr<ClockSpec> spec;\n  enum since_what field;\n\n public:\n  explicit SinceExpr(std::unique_ptr<ClockSpec> spec, enum since_what field)\n      : spec(std::move(spec)), field(field) {}\n\n  EvaluateResult evaluate(QueryContextBase* ctx, FileResult* file) override {\n    time_t tval = 0;\n\n    auto since = spec->evaluate(\n        ctx->clockAtStartOfQuery.position(),\n        ctx->lastAgeOutTickValueAtStartOfQuery);\n\n    // Note that we use >= for the time comparisons in here so that we\n    // report the things that changed inclusive of the boundary presented.\n    // This is especially important for clients using the coarse unix\n    // timestamp as the since basis, as they would be much more\n    // likely to miss out on changes if we didn't.\n\n    switch (field) {\n      case since_what::SINCE_OCLOCK:\n      case since_what::SINCE_CCLOCK: {\n        const auto clock =\n            (field == since_what::SINCE_OCLOCK) ? file->otime() : file->ctime();\n        if (!clock.has_value()) {\n          return std::nullopt;\n        }\n\n        return folly::variant_match(\n            since.since,\n            [&](const QuerySince::Timestamp& since_ts) -> std::optional<bool> {\n              return clock->timestamp >= since_ts.time;\n            },\n            [&](const QuerySince::Clock& since_clock) -> std::optional<bool> {\n              if (since_clock.is_fresh_instance) {\n                return file->exists();\n              }\n              return clock->ticks > since_clock.ticks;\n            });\n      }\n      case since_what::SINCE_MTIME: {\n        auto stat = file->stat();\n        if (!stat.has_value()) {\n          return std::nullopt;\n        }\n        tval = stat->mtime.tv_sec;\n        break;\n      }\n      case since_what::SINCE_CTIME: {\n        auto stat = file->stat();\n        if (!stat.has_value()) {\n          return std::nullopt;\n        }\n        tval = stat->ctime.tv_sec;\n        break;\n      }\n    }\n\n    auto* since_ts = std::get_if<QuerySince::Timestamp>(&since.since);\n    w_check(since_ts, \"expect a timestamp since\");\n    return tval >= since_ts->time;\n  }\n\n  static std::unique_ptr<QueryExpr> parse(Query*, const json_ref& term) {\n    auto selected_field = since_what::SINCE_OCLOCK;\n    const char* fieldname = \"oclock\";\n\n    if (!term.isArray()) {\n      throw QueryParseError(\"\\\"since\\\" term must be an array\");\n    }\n\n    if (json_array_size(term) < 2 || json_array_size(term) > 3) {\n      throw QueryParseError(\"\\\"since\\\" term has invalid number of parameters\");\n    }\n\n    const auto& jval = term.at(1);\n    auto spec = ClockSpec::parseOptionalClockSpec(jval);\n    if (!spec) {\n      throw QueryParseError(\"invalid clockspec for \\\"since\\\" term\");\n    }\n    if (std::holds_alternative<ClockSpec::NamedCursor>(spec->spec)) {\n      throw QueryParseError(\"named cursors are not allowed in \\\"since\\\" terms\");\n    }\n\n    if (term.array().size() == 3) {\n      const auto& field = term.at(2);\n      size_t i;\n      bool valid = false;\n\n      fieldname = json_string_value(field);\n      if (!fieldname) {\n        throw QueryParseError(\"field name for \\\"since\\\" term must be a string\");\n      }\n\n      for (i = 0; i < sizeof(allowed_fields) / sizeof(allowed_fields[0]); ++i) {\n        if (!strcmp(allowed_fields[i].label, fieldname)) {\n          selected_field = allowed_fields[i].value;\n          valid = true;\n          break;\n        }\n      }\n\n      if (!valid) {\n        QueryParseError::throwf(\n            \"invalid field name \\\"{}\\\" for \\\"since\\\" term\", fieldname);\n      }\n    }\n\n    switch (selected_field) {\n      case since_what::SINCE_CTIME:\n      case since_what::SINCE_MTIME:\n        if (!std::holds_alternative<ClockSpec::Timestamp>(spec->spec)) {\n          QueryParseError::throwf(\n              \"field \\\"{}\\\" requires a timestamp value for comparison in \\\"since\\\" term\",\n              fieldname);\n        }\n        break;\n      case since_what::SINCE_OCLOCK:\n      case since_what::SINCE_CCLOCK:\n        /* we'll work with clocks or timestamps */\n        break;\n    }\n\n    return std::make_unique<SinceExpr>(std::move(spec), selected_field);\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // `since` doesn't constrain the path.\n    return std::nullopt;\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\nW_TERM_PARSER(since, SinceExpr::parse);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/suffix.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n\n#include <memory>\n#include <unordered_set>\n\nusing namespace watchman;\n\nnamespace {\n\nclass SuffixExpr : public QueryExpr {\n  std::unordered_set<w_string> suffixSet_;\n\n public:\n  explicit SuffixExpr(std::unordered_set<w_string>&& suffixSet)\n      : suffixSet_(std::move(suffixSet)) {}\n\n  EvaluateResult evaluate(QueryContextBase*, FileResult* file) override {\n    if (suffixSet_.size() < 3) {\n      // For small suffix sets, benchmarks indicated that iteration provides\n      // better performance since no suffix allocation is necessary.\n      for (auto const& suffix : suffixSet_) {\n        if (file->baseName().hasSuffix(suffix)) {\n          return true;\n        }\n      }\n      return false;\n    }\n    auto suffix = file->baseName().asLowerCaseSuffix();\n    return suffix && (suffixSet_.find(*suffix) != suffixSet_.end());\n  }\n\n  static std::unique_ptr<QueryExpr> parse(Query*, const json_ref& term) {\n    std::unordered_set<w_string> suffixSet;\n\n    if (!term.isArray()) {\n      throw QueryParseError{\"Expected array for 'suffix' term\"};\n    }\n\n    if (json_array_size(term) > 2) {\n      throw QueryParseError(\"Invalid number of arguments for 'suffix' term\");\n    }\n\n    const auto& suffix = term.at(1);\n\n    // Suffix match supports array or single suffix string\n    if (suffix.isArray()) {\n      suffixSet.reserve(json_array_size(suffix));\n      for (const auto& ele : suffix.array()) {\n        if (!ele.isString()) {\n          throw QueryParseError(\n              \"Argument 2 to 'suffix' must be either a string or an array of string\");\n        }\n        suffixSet.insert(json_to_w_string(ele).piece().asLowerCase());\n      }\n    } else if (suffix.isString()) {\n      suffixSet.insert(json_to_w_string(suffix).piece().asLowerCase());\n    } else {\n      throw QueryParseError(\n          \"Argument 2 to 'suffix' must be either a string or an array of string\");\n    }\n    return std::make_unique<SuffixExpr>(std::move(suffixSet));\n  }\n\n  std::unique_ptr<QueryExpr> aggregate(\n      const QueryExpr* other,\n      const AggregateOp op) const override {\n    if (op != AggregateOp::AnyOf) {\n      return nullptr;\n    }\n    const SuffixExpr* otherExpr = dynamic_cast<const SuffixExpr*>(other);\n    if (otherExpr == nullptr) {\n      return nullptr;\n    }\n    std::unordered_set<w_string> suffixSet;\n    suffixSet.reserve(suffixSet_.size() + otherExpr->suffixSet_.size());\n    suffixSet.insert(\n        otherExpr->suffixSet_.begin(), otherExpr->suffixSet_.end());\n    suffixSet.insert(suffixSet_.begin(), suffixSet_.end());\n    return std::make_unique<SuffixExpr>(std::move(suffixSet));\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // We mostly care about prefix bounds that help us skip fetching information\n    // about entire subtrees of the root. `suffix` doesn't help there so treat\n    // it as unbounded.\n    return std::nullopt;\n  }\n\n  ReturnOnlyFiles listOnlyFiles() const override {\n    return ReturnOnlyFiles::Unrelated;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    return SimpleSuffixType::Suffix;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    std::vector<std::string> patterns;\n    for (const auto& suffix : suffixSet_) {\n      patterns.push_back(\"**/*.\" + suffix.string());\n    }\n\n    return patterns;\n  }\n};\n\n} // namespace\n\nW_TERM_PARSER(suffix, SuffixExpr::parse);\nW_CAP_REG(\"suffix-set\")\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/query/type.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include \"watchman/Errors.h\"\n#include \"watchman/fs/FileInformation.h\"\n#include \"watchman/query/FileResult.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n\n#include <memory>\n\nusing namespace watchman;\n\nclass TypeExpr : public QueryExpr {\n  char arg;\n\n public:\n  explicit TypeExpr(char arg) : arg(arg) {}\n\n  EvaluateResult evaluate(QueryContextBase*, FileResult* file) override {\n    auto optionalDtype = file->dtype();\n    if (!optionalDtype.has_value()) {\n      return std::nullopt;\n    }\n    auto dtype = *optionalDtype;\n    if (dtype != DType::Unknown) {\n      switch (arg) {\n        case 'b':\n          return dtype == DType::Block;\n        case 'c':\n          return dtype == DType::Char;\n        case 'p':\n          return dtype == DType::Fifo;\n        case 's':\n          return dtype == DType::Socket;\n        case 'd':\n          return dtype == DType::Dir;\n        case 'f':\n          return dtype == DType::Regular;\n        case 'l':\n          return dtype == DType::Symlink;\n      }\n    }\n\n    auto stat = file->stat();\n    if (!stat.has_value()) {\n      return std::nullopt;\n    }\n\n    switch (arg) {\n#ifndef _WIN32\n      case 'b':\n        return S_ISBLK(stat->mode);\n      case 'c':\n        return S_ISCHR(stat->mode);\n      case 'p':\n        return S_ISFIFO(stat->mode);\n      case 's':\n        return S_ISSOCK(stat->mode);\n#endif\n      case 'd':\n        return stat->isDir();\n      case 'f':\n        return stat->isFile();\n      case 'l':\n        return stat->isSymlink();\n#ifdef S_ISDOOR\n      case 'D':\n        return S_ISDOOR(stat->mode);\n#endif\n      default:\n        return false;\n    }\n  }\n\n  static std::unique_ptr<QueryExpr> parse(Query*, const json_ref& term) {\n    const char *typestr, *found;\n    char arg;\n\n    if (!term.isArray()) {\n      throw QueryParseError{\"\\\"type\\\" term requires a type string parameter\"};\n    }\n\n    if (term.array().size() > 1 && term.at(1).isString()) {\n      typestr = json_string_value(term.at(1));\n    } else {\n      throw QueryParseError(\n          \"First parameter to \\\"type\\\" term must be a type string\");\n    }\n\n    found = strpbrk(typestr, \"bcdfplsD\");\n    if (!found || strlen(typestr) > 1) {\n      QueryParseError::throwf(\"invalid type string '{}'\", typestr);\n    }\n\n    arg = *found;\n\n    return std::make_unique<TypeExpr>(arg);\n  }\n\n  std::optional<std::vector<std::string>> computeGlobUpperBound(\n      CaseSensitivity) const override {\n    // `type` doesn't constrain the path.\n    return std::nullopt;\n  }\n\n  /**\n   * Determines if this expression will return only files.\n   * An expression returns files if is not type 'd', for directories.\n   */\n  ReturnOnlyFiles listOnlyFiles() const override {\n    if (arg == 'd') {\n      return ReturnOnlyFiles::No;\n    }\n    return ReturnOnlyFiles::Yes;\n  }\n\n  SimpleSuffixType evaluateSimpleSuffix() const override {\n    if (arg == 'f') {\n      return SimpleSuffixType::Type;\n    }\n    return SimpleSuffixType::Excluded;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns() const override {\n    return std::vector<std::string>{};\n  }\n};\nW_TERM_PARSER(type, TypeExpr::parse);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/Root.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <memory>\n#include <unordered_map>\n\n#include \"watchman/Clock.h\"\n#include \"watchman/CookieSync.h\"\n#include \"watchman/IgnoreSet.h\"\n#include \"watchman/PendingCollection.h\"\n#include \"watchman/PubSub.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/Serde.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_string.h\"\n\n/* Prune out nodes that were deleted roughly 12-36 hours ago */\n#define DEFAULT_GC_AGE (86400 / 2)\n#define DEFAULT_GC_INTERVAL 86400\n\nnamespace watchman {\n\nclass Root;\nstruct TriggerCommand;\nclass QueryableView;\nstruct QueryContext;\nstruct RootMetadata;\nstruct ClientContext;\n\nenum ClientStateDisposition {\n  PendingEnter,\n  Asserted,\n  PendingLeave,\n  Done,\n};\n\nclass ClientStateAssertion {\n public:\n  const std::shared_ptr<Root> root; // Holds a ref on the root\n  const w_string name;\n  // locking: You must hold root->assertedStates lock to access this member\n  ClientStateDisposition disposition{PendingEnter};\n\n  // Deferred payload to send when this assertion makes it to the front\n  // of the queue.\n  // locking: You must hold root->assertedStates lock to access this member.\n  std::optional<json_ref> enterPayload;\n\n  ClientStateAssertion(const std::shared_ptr<Root>& root, const w_string& name)\n      : root(root), name(name) {}\n};\n\nclass ClientStateAssertions {\n public:\n  /** Returns true if `assertion` is the front instance in the queue\n   * of assertions that match assertion->name */\n  bool isFront(const std::shared_ptr<ClientStateAssertion>& assertion) const;\n\n  /** Returns true if `assertion` currently has an Asserted disposition */\n  bool isStateAsserted(w_string stateName) const;\n\n  /** Add assertion to the queue of assertions for assertion->name.\n   * Throws if the named state is already asserted or if there is\n   * a pending assertion for that state. */\n  void queueAssertion(std::shared_ptr<ClientStateAssertion> assertion);\n\n  /** remove assertion from the queue of assertions for assertion->name.\n   * If no more assertions remain in that named queue then the queue is\n   * removed.\n   * If the removal of an assertion causes the new front of that queue\n   * to occupied by an assertion with Asserted disposition, generates a\n   * broadcast of its enterPayload.\n   */\n  bool removeAssertion(const std::shared_ptr<ClientStateAssertion>& assertion);\n\n  /** Returns some diagnostic information that is used by\n   * the integration tests. */\n  json_ref debugStates() const;\n\n private:\n  /** states_ maps from a state name to a queue of assertions with\n   * various dispositions */\n  std::\n      unordered_map<w_string, std::deque<std::shared_ptr<ClientStateAssertion>>>\n          states_;\n};\n\nclass RootConfig {\n public:\n  /* path to root */\n  const w_string root_path;\n  /* filesystem type name, as returned by w_fstype() */\n  const w_string fs_type;\n  const CaseSensitivity case_sensitive;\n  const IgnoreSet ignore;\n  const FileInformation stat;\n};\n\n/**\n * Given the ignore_dirs and ignore_vcs configuration arrays, return a\n * configured IgnoreSet.\n *\n * Normally an implementation detail, but exposed for testing.\n */\nIgnoreSet computeIgnoreSet(\n    const w_string& root_path,\n    const Configuration& config);\n\nstruct RootRecrawlInfo : serde::Object {\n  int64_t count;\n  bool should_recrawl;\n  std::optional<w_string> warning;\n  w_string reason;\n  std::optional<int64_t> started_at;\n  std::optional<int64_t> completed_at;\n  std::optional<int64_t> stat_count;\n\n  template <typename X>\n  void map(X& x) {\n    x(\"count\", count);\n    x(\"should-recrawl\", should_recrawl);\n    x(\"warning\", warning);\n    x(\"reason\", reason);\n    x(\"started\", started_at);\n    x(\"completed\", completed_at);\n    x(\"stats\", stat_count);\n  }\n};\n\nstruct RootQueryInfo : serde::Object {\n  int64_t elapsed_milliseconds;\n  int64_t cookie_sync_duration_milliseconds;\n  int64_t generation_duration_milliseconds;\n  int64_t render_duration_milliseconds;\n  int64_t view_lock_wait_duration_milliseconds;\n  w_string state;\n  int64_t client_pid;\n  std::optional<w_string> request_id;\n  std::optional<json_ref> query;\n  std::optional<w_string> subscription_name;\n\n  template <typename X>\n  void map(X& x) {\n    x(\"elapsed-milliseconds\", elapsed_milliseconds);\n    x(\"cookie-sync-duration-milliseconds\", cookie_sync_duration_milliseconds);\n    x(\"generation-duration-milliseconds\", generation_duration_milliseconds);\n    x(\"render-duration-milliseconds\", render_duration_milliseconds);\n    x(\"view-lock-wait-duration-milliseconds\",\n      view_lock_wait_duration_milliseconds);\n    x(\"state\", state);\n    x(\"client-pid\", client_pid);\n    x(\"request-id\", request_id);\n    x.skip_if(\"query\", query, [](const auto& query_2) {\n      return !query_2.has_value();\n    });\n  }\n};\n\nstruct RootDebugStatus : serde::Object {\n  w_string path;\n  w_string fstype;\n  w_string watcher;\n  int64_t uptime;\n  bool case_sensitive;\n  std::vector<w_string> cookie_prefix;\n  std::vector<w_string> cookie_dir;\n  std::vector<w_string> cookie_list;\n  RootRecrawlInfo recrawl_info;\n  std::vector<RootQueryInfo> queries;\n  bool done_initial;\n  bool cancelled;\n  bool enable_parallel_crawl;\n  w_string crawl_status;\n\n  template <typename X>\n  void map(X& x) {\n    x(\"path\", path);\n    x(\"fstype\", fstype);\n    x(\"watcher\", watcher);\n    x(\"uptime\", uptime);\n    x(\"case_sensitive\", case_sensitive);\n    x(\"cookie_prefix\", cookie_prefix);\n    x(\"cookie_dir\", cookie_dir);\n    x(\"cookie_list\", cookie_list);\n    x(\"recrawl_info\", recrawl_info);\n    x(\"queries\", queries);\n    x(\"done_initial\", done_initial);\n    x(\"cancelled\", cancelled);\n    x(\"crawl-status\", crawl_status);\n    x(\"enable_parallel_crawl\", enable_parallel_crawl);\n  }\n};\n\n/**\n * Represents a watched root directory.\n *\n * Lifetime is managed by a shared_ptr. The root is tracked in `watched_roots`\n * until it is cancelled. The count of live roots is tracked by `live_roots`.\n *\n * Watcher threads are detached, and thus cannot be joined. However, they\n * maintain strong references to roots, so we know the threads are stopped when\n * the root becomes unreferenced.\n */\nclass Root : public RootConfig, public std::enable_shared_from_this<Root> {\n public:\n  using SaveGlobalStateHook = void (*)();\n\n  /* map of rule id => struct TriggerCommand */\n  folly::Synchronized<\n      std::unordered_map<w_string, std::unique_ptr<TriggerCommand>>>\n      triggers;\n\n  const std::chrono::steady_clock::time_point startTime =\n      std::chrono::steady_clock::now();\n\n  CookieSync cookies;\n\n  /* mutable config items */\n  std::atomic<bool> enable_parallel_crawl;\n\n  /* config options loaded via json file */\n  std::optional<json_ref> config_file;\n  Configuration config;\n\n  const std::chrono::milliseconds trigger_settle{0};\n  /**\n   * Don't GC more often than this.\n   *\n   * If zero, then never age out.\n   */\n  const std::chrono::seconds gc_interval{DEFAULT_GC_INTERVAL};\n  /**\n   * When GCing, age out files older than this.\n   */\n  const std::chrono::seconds gc_age{DEFAULT_GC_AGE};\n  const std::chrono::seconds idle_reap_age{0};\n\n  const bool allow_crawling_other_mounts;\n\n  // Stream of broadcast unilateral items emitted by this root\n  std::shared_ptr<Publisher> unilateralResponses;\n\n  struct RecrawlInfo {\n    /* how many times we've had to recrawl */\n    uint64_t recrawlCount = 0;\n    /* if true, we've decided that we should re-crawl the root\n     * for the sake of ensuring consistency */\n    bool shouldRecrawl = true;\n    // Last recrawl reason\n    w_string reason{\"startup\"};\n    // Last ad-hoc warning message\n    std::optional<w_string> warning;\n    std::chrono::steady_clock::time_point crawlStart;\n    std::chrono::steady_clock::time_point crawlFinish;\n    // Number of statPath() called during recrawl\n    std::shared_ptr<std::atomic<size_t>> statCount;\n  };\n  folly::Synchronized<RecrawlInfo> recrawlInfo;\n\n  // Why we failed to watch\n  std::optional<w_string> failure_reason;\n\n  // State transition counter to allow identification of concurrent state\n  // transitions\n  std::atomic<uint32_t> stateTransCount{0};\n  folly::Synchronized<ClientStateAssertions> assertedStates;\n\n  struct Inner {\n    /**\n     * Initially false and set to false by the iothread after scheduleRecrawl.\n     * Set true after fullCrawl is done.\n     *\n     * Primarily used by the iothread but this is atomic because other threads\n     * sometimes read it to produce log messages.\n     */\n    std::atomic<bool> done_initial{false};\n\n    /**\n     * Set if cancel() has been called. Once true, is never set to false.\n     */\n    std::atomic<bool> cancelled{false};\n\n    /* map of cursor name => last observed tick value */\n    folly::Synchronized<std::unordered_map<w_string, ClockTicks>> cursors;\n\n    /// Set by connection threads and read on the iothread.\n    std::atomic<std::chrono::steady_clock::time_point> last_cmd_timestamp{\n        std::chrono::steady_clock::time_point{}};\n\n    /// Only accessed on the iothread.\n    std::chrono::steady_clock::time_point last_reap_timestamp;\n  } inner;\n\n  // For debugging and diagnostic purposes, this set references\n  // all outstanding query contexts that are executing against this root.\n  // If is only safe to read the query contexts while the queries.rlock()\n  // is held, and even then it is only really safe to read fields that\n  // are not changed by the query exection.\n  folly::Synchronized<std::unordered_set<QueryContext*>> queries;\n\n  /**\n   * Returns the view with which this Root was constructed.\n   */\n  std::shared_ptr<QueryableView> view() const {\n    return view_;\n  }\n\n  Root(\n      FileSystem& fileSystem,\n      const w_string& root_path,\n      const w_string& fs_type,\n      std::optional<json_ref> config_file,\n      Configuration config,\n      std::shared_ptr<QueryableView> view,\n      SaveGlobalStateHook saveGlobalStateHook);\n  ~Root();\n\n  void considerAgeOut();\n  void performAgeOut(std::chrono::seconds min_age);\n  folly::SemiFuture<folly::Unit> waitForSettle(\n      std::chrono::milliseconds settle_period);\n  CookieSync::SyncResult syncToNow(\n      std::chrono::milliseconds timeout,\n      const ClientContext& client_info);\n  void scheduleRecrawl(const char* why);\n  void recrawlTriggered(const char* why);\n\n  // Requests cancellation of the root.\n  // Returns true if this request caused the root cancellation, false\n  // if it was already in the process of being cancelled.\n  bool cancel(std::string_view reason);\n\n  // Returns true if the caller should stop the watch.\n  bool considerReap();\n  bool removeFromWatched();\n  void stopThreads(std::string_view reason);\n  bool stopWatch(std::string_view reason);\n  json_ref triggerListToJson() const;\n\n  static std::vector<RootDebugStatus> getStatusForAllRoots();\n  RootDebugStatus getStatus() const;\n\n  // Collect standard metadata taken from a root.\n  RootMetadata getRootMetadata() const;\n  void collectRootMetadata(RootMetadata& rootMetadata) const;\n\n  SaveGlobalStateHook getSaveGlobalStateHook() const {\n    return saveGlobalStateHook_;\n  }\n\n private:\n  const std::shared_ptr<QueryableView> view_;\n\n  /// A hook that allows saving Watchman's state after key operations. Usually\n  /// holds w_state_save.\n  SaveGlobalStateHook saveGlobalStateHook_;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/root/ageout.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/QueryableView.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n#include \"watchman/telemetry/WatchmanStructuredLogger.h\"\n\nusing namespace watchman;\n\nvoid Root::considerAgeOut() {\n  if (gc_interval.count() == 0) {\n    return;\n  }\n\n  auto now = std::chrono::system_clock::now();\n  if (now <= view()->getLastAgeOutTimeStamp() + gc_interval) {\n    // Don't check too often\n    return;\n  }\n\n  performAgeOut(gc_age);\n}\n\nvoid Root::performAgeOut(std::chrono::seconds min_age) {\n  // Find deleted nodes older than the gc_age setting.\n  // This is particularly useful in cases where your tree observes a\n  // large number of creates and deletes for many unique filenames in\n  // a given dir (eg: temporary/randomized filenames generated as part\n  // of build tooling or atomic renames)\n  watchman::PerfSample sample(\"age_out\");\n\n  int64_t walked = 0;\n  int64_t files = 0;\n  int64_t dirs = 0;\n  view()->ageOut(walked, files, dirs, std::chrono::seconds(min_age));\n\n  // Age out cursors too.\n  {\n    auto cursors = inner.cursors.wlock();\n    auto it = cursors->begin();\n    while (it != cursors->end()) {\n      if (it->second < view()->getLastAgeOutTickValue()) {\n        it = cursors->erase(it);\n      } else {\n        ++it;\n      }\n    }\n  }\n  auto root_metadata = getRootMetadata();\n\n  if (sample.finish()) {\n    sample.add_meta(\n        \"age_out\",\n        json_object(\n            {{\"walked\", json_integer(walked)},\n             {\"files\", json_integer(files)},\n             {\"dirs\", json_integer(dirs)}}));\n\n    sample.add_root_metadata(root_metadata);\n    sample.log();\n  }\n\n  const auto& [samplingRate, eventCount] =\n      getLogEventCounters(LogEventType::AgeOutType);\n  // Log if override set, or if we have hit the sample rate\n  if (sample.will_log || eventCount == samplingRate) {\n    AgeOut ageOut;\n    ageOut.root = root_metadata.root_path.string();\n    ageOut.event_count = eventCount != samplingRate ? 0 : eventCount;\n    ageOut.recrawl = root_metadata.recrawl_count;\n    ageOut.case_sensitive = root_metadata.case_sensitive;\n    ageOut.watcher = root_metadata.watcher.string();\n    ageOut.walked = walked;\n    ageOut.files = files;\n    ageOut.dirs = dirs;\n    getLogger()->logEvent(ageOut);\n  }\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/dir.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/watchman_dir.h\"\n#include \"watchman/watchman_file.h\"\n\nvoid watchman_dir::Deleter::operator()(watchman_file* file) const {\n  free_file_node(file);\n}\n\nwatchman_dir::watchman_dir(w_string name, watchman_dir* parent)\n    : name(std::move(name)), parent(parent) {}\n\nw_string watchman_dir::getFullPath() const {\n  return getFullPathToChild(w_string_piece());\n}\n\nwatchman_file* watchman_dir::getChildFile(w_string_piece name_2) const {\n  auto it = files.find(name_2);\n  if (it == files.end()) {\n    return nullptr;\n  }\n  return it->second.get();\n}\n\nwatchman_dir* watchman_dir::getChildDir(w_string_piece name_2) const {\n  auto it = dirs.find(name_2);\n  if (it == dirs.end()) {\n    return nullptr;\n  }\n  return it->second.get();\n}\n\nw_string watchman_dir::getFullPathToChild(w_string_piece extra) const {\n  uint32_t length = 0;\n  if (extra.size()) {\n    length = extra.size() + 1 /* separator */;\n  }\n  for (const watchman_dir* d = this; d; d = d->parent) {\n    length += d->name.size() + 1 /* separator OR final NUL terminator */;\n  }\n\n  auto* s = watchman::StringHeader::alloc(length - 1, W_STRING_BYTE);\n\n  char* buf = s->buf();\n  char* end = buf + s->len;\n\n  *end = 0;\n  if (extra.size()) {\n    end -= extra.size();\n    memcpy(end, extra.data(), extra.size());\n  }\n  for (const watchman_dir* d = this; d; d = d->parent) {\n    if (d != this || (extra.size())) {\n      --end;\n      *end = '/';\n    }\n    end -= d->name.size();\n    memcpy(end, d->name.data(), d->name.size());\n  }\n\n  return w_string{s};\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/file.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/watchman_file.h\"\n#ifdef __APPLE__\n#include <sys/attr.h> // @manual\n#endif\n\nvoid watchman_file::removeFromFileList() {\n  if (next) {\n    next->prev = prev;\n  }\n  // file->prev points to the address of either\n  // `previous_file->next` OR `root->inner.latest_file`.\n  // This next assignment is therefore fixing up either\n  // the linkage from the prior file node or from the\n  // head of the list.\n  if (prev) {\n    *prev = next;\n  }\n}\n\n/* We embed our name string in the tail end of the struct that we're\n * allocating here.  This turns out to be more memory efficient due\n * to the way that the allocator bins sizeof(watchman_file); there's\n * a bit of unusable space after the end of the structure that happens\n * to be about the right size to fit a typical filename.\n * Embedding the name in the end allows us to make the most of this\n * memory and free up the separate heap allocation for file_name.\n */\nstd::unique_ptr<watchman_file, watchman_dir::Deleter> watchman_file::make(\n    const w_string& name,\n    watchman_dir* parent) {\n  auto file = (watchman_file*)calloc(\n      1, sizeof(watchman_file) + sizeof(uint32_t) + name.size() + 1);\n  std::unique_ptr<watchman_file, watchman_dir::Deleter> filePtr(\n      file, watchman_dir::Deleter());\n\n  auto lenPtr = (uint32_t*)(file + 1);\n  *lenPtr = name.size();\n\n  auto data = (char*)(lenPtr + 1);\n  memcpy(data, name.data(), name.size());\n  data[name.size()] = 0;\n\n  file->parent = parent;\n  file->exists = true;\n\n  return filePtr;\n}\n\nwatchman_file::~watchman_file() {\n  removeFromFileList();\n}\n\nvoid free_file_node(struct watchman_file* file) {\n  file->~watchman_file();\n  free(file);\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/init.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include <folly/String.h>\n#include \"watchman/Logging.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/TriggerCommand.h\"\n#include \"watchman/fs/DirHandle.h\"\n#include \"watchman/fs/FSDetect.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/root/watchlist.h\"\n\nnamespace watchman {\n\nnamespace {\n/// Idle out watches that haven't had activity in several days\ninline constexpr json_int_t kDefaultReapAge = 86400 * 5;\ninline constexpr json_int_t kDefaultSettlePeriod = 20;\n} // namespace\n\nvoid ClientStateAssertions::queueAssertion(\n    std::shared_ptr<ClientStateAssertion> assertion) {\n  // Check to see if someone else has or had a pending claim for this\n  // state and reject the attempt in that case\n  auto state_q = states_.find(assertion->name);\n  if (state_q != states_.end() && !state_q->second.empty()) {\n    auto disp = state_q->second.back()->disposition;\n    if (disp == ClientStateDisposition::PendingEnter ||\n        disp == ClientStateDisposition::Asserted) {\n      throw std::runtime_error(\n          fmt::format(\n              \"state {} is already Asserted or PendingEnter\", assertion->name));\n    }\n  }\n  states_[assertion->name].push_back(assertion);\n}\n\njson_ref ClientStateAssertions::debugStates() const {\n  std::vector<json_ref> states;\n  for (const auto& state_q : states_) {\n    for (const auto& state : state_q.second) {\n      auto obj = json_object();\n      obj.set(\"name\", w_string_to_json(state->name));\n      switch (state->disposition) {\n        case ClientStateDisposition::PendingEnter:\n          obj.set(\"state\", w_string_to_json(\"PendingEnter\"));\n          break;\n        case ClientStateDisposition::Asserted:\n          obj.set(\"state\", w_string_to_json(\"Asserted\"));\n          break;\n        case ClientStateDisposition::PendingLeave:\n          obj.set(\"state\", w_string_to_json(\"PendingLeave\"));\n          break;\n        case ClientStateDisposition::Done:\n          obj.set(\"state\", w_string_to_json(\"Done\"));\n          break;\n      }\n      states.push_back(std::move(obj));\n    }\n  }\n  return json_array(std::move(states));\n}\n\nbool ClientStateAssertions::removeAssertion(\n    const std::shared_ptr<ClientStateAssertion>& assertion) {\n  auto it = states_.find(assertion->name);\n  if (it == states_.end()) {\n    return false;\n  }\n\n  auto& queue = it->second;\n  for (auto assertionIter = queue.begin(); assertionIter != queue.end();\n       ++assertionIter) {\n    if (*assertionIter == assertion) {\n      assertion->disposition = ClientStateDisposition::Done;\n      queue.erase(assertionIter);\n\n      // If there are no more entries queued with this name, remove\n      // the name from the states map.\n      if (queue.empty()) {\n        states_.erase(it);\n      } else {\n        // Now check to see who is at the front of the queue.  If\n        // they are set to asserted and have a payload assigned, they\n        // are a state-enter that is pending broadcast of the assertion.\n        // We couldn't send it earlier without risking out of order\n        // delivery wrt. vacating states.\n        auto front = queue.front();\n        if (front->disposition == ClientStateDisposition::Asserted &&\n            front->enterPayload) {\n          front->root->unilateralResponses->enqueue(\n              std::move(*front->enterPayload));\n          front->enterPayload = std::nullopt;\n        }\n      }\n      return true;\n    }\n  }\n\n  return false;\n}\n\nbool ClientStateAssertions::isFront(\n    const std::shared_ptr<ClientStateAssertion>& assertion) const {\n  auto it = states_.find(assertion->name);\n  if (it == states_.end()) {\n    return false;\n  }\n  auto& queue = it->second;\n  if (queue.empty()) {\n    return false;\n  }\n  return queue.front() == assertion;\n}\n\nbool ClientStateAssertions::isStateAsserted(w_string stateName) const {\n  auto it = states_.find(stateName);\n  if (it == states_.end()) {\n    return false;\n  }\n  auto& queue = it->second;\n  for (auto& state : queue) {\n    if (state->disposition == Asserted) {\n      return true;\n    }\n  }\n  return false;\n}\n\nnamespace {\n\njson_ref getIgnoreVcs(const Configuration& config) {\n  std::optional<json_ref> ignores = config.get(\"ignore_vcs\");\n  if (!ignores) {\n    // default to a well-known set of vcs's\n    return json_array(\n        {typed_string_to_json(\".git\"),\n         typed_string_to_json(\".svn\"),\n         typed_string_to_json(\".hg\"),\n         typed_string_to_json(\".jj\")});\n  }\n\n  if (!ignores->isArray()) {\n    throw std::runtime_error(\"ignore_vcs must be an array of strings\");\n  }\n\n  return *ignores;\n}\n\n/**\n * Returns which directory should be used for cookies. Returns the first\n * directory in ignore_vcs that exists. Otherwise, returns the root_path.\n */\nw_string computeCookieDir(\n    const w_string& root_path,\n    const Configuration& config,\n    CaseSensitivity case_sensitive,\n    const IgnoreSet& ignore) {\n  auto ignores = getIgnoreVcs(config);\n  for (auto& jignore : ignores.array()) {\n    if (!jignore.isString()) {\n      throw std::runtime_error(\"ignore_vcs must be an array of strings\");\n    }\n\n    auto fullname = w_string::pathCat({root_path, json_to_w_string(jignore)});\n    // if we are completely ignoring this dir, we have nothing more to\n    // do here\n    if (ignore.isIgnoreDir(fullname)) {\n      continue;\n    }\n\n    FileInformation info;\n    try {\n      info = getFileInformation(fullname.c_str(), case_sensitive);\n    } catch (const std::exception&) {\n      continue;\n    }\n\n    if (info.isDir()) {\n      // root/{.hg,.git,.svn}\n      return fullname;\n    }\n  }\n\n  return root_path;\n}\n\n} // namespace\n\nIgnoreSet computeIgnoreSet(\n    const w_string& root_path,\n    const Configuration& config) {\n  IgnoreSet result;\n\n  if (auto ignores = config.get(\"ignore_dirs\")) {\n    if (!ignores->isArray()) {\n      logf(ERR, \"ignore_dirs must be an array of strings\\n\");\n    } else {\n      auto& arr = ignores->array();\n      for (size_t i = 0; i < arr.size(); i++) {\n        auto& jignore = arr[i];\n\n        if (!jignore.isString()) {\n          logf(ERR, \"ignore_dirs must be an array of strings\\n\");\n          continue;\n        }\n\n        auto name = json_to_w_string(jignore);\n        auto fullname = w_string::pathCat({root_path, name});\n        result.add(fullname, false);\n        logf(DBG, \"ignoring {} recursively\\n\", fullname);\n      }\n    }\n  }\n\n  auto ignores = getIgnoreVcs(config);\n  for (auto& jignore : ignores.array()) {\n    if (!jignore.isString()) {\n      throw std::runtime_error(\"ignore_vcs must be an array of strings\");\n    }\n\n    auto fullname = w_string::pathCat({root_path, json_to_w_string(jignore)});\n\n    // if we are completely ignoring this dir, we have nothing more to\n    // do here\n    if (result.isIgnoreDir(fullname)) {\n      continue;\n    }\n    result.add(fullname, true);\n  }\n\n  return result;\n}\n\nRoot::Root(\n    FileSystem& fileSystem,\n    const w_string& root_path,\n    const w_string& fs_type,\n    std::optional<json_ref> config_file,\n    Configuration config_,\n    std::shared_ptr<QueryableView> view,\n    SaveGlobalStateHook saveGlobalStateHook)\n    : RootConfig{\n          root_path,\n          fs_type,\n          getCaseSensitivityForPath(root_path.c_str()),\n          computeIgnoreSet(root_path, config_),\n          fileSystem.getFileInformation(root_path.c_str())},\n      cookies(\n          fileSystem,\n          computeCookieDir(root_path, config_, case_sensitive, ignore)),\n      enable_parallel_crawl{config_.getBool(\"enable_parallel_crawl\", false)},\n      config_file(std::move(config_file)),\n      config(std::move(config_)),\n      trigger_settle(int(config.getInt(\"settle\", kDefaultSettlePeriod))),\n      gc_interval(\n          int(config.getInt(\"gc_interval_seconds\", DEFAULT_GC_INTERVAL))),\n      gc_age(int(config.getInt(\"gc_age_seconds\", DEFAULT_GC_AGE))),\n      idle_reap_age(\n          int(config.getInt(\"idle_reap_age_seconds\", kDefaultReapAge))),\n      allow_crawling_other_mounts{config_.getBool(\"allow_crawling_other_mounts\", false)},\n      unilateralResponses(std::make_shared<Publisher>()),\n      view_{std::move(view)},\n      saveGlobalStateHook_{std::move(saveGlobalStateHook)} {\n  // This just opens and releases the dir.  If an exception is thrown\n  // it will bubble up.\n  fileSystem.openDir(root_path.c_str());\n\n  // TODO: This is only exception-safe because the rest of the function is\n  // unlikely to throw. Switch to some sort of RAII handle instead.\n  ++live_roots;\n\n  inner.last_cmd_timestamp = std::chrono::steady_clock::now();\n\n  if (!view_->requiresCrawl) {\n    // This watcher can resolve queries without needing a crawl.\n    inner.done_initial = true;\n    auto crawlInfo = recrawlInfo.wlock();\n    crawlInfo->shouldRecrawl = false;\n    crawlInfo->crawlStart = std::chrono::steady_clock::now();\n    crawlInfo->crawlFinish = crawlInfo->crawlStart;\n  }\n}\n\nRoot::~Root() {\n  logf(DBG, \"root: final ref on {}\\n\", root_path);\n  --live_roots;\n}\n\nRootMetadata Root::getRootMetadata() const {\n  RootMetadata root_metadata;\n  collectRootMetadata(root_metadata);\n  return root_metadata;\n}\n\nvoid Root::collectRootMetadata(RootMetadata& rootMetadata) const {\n  // Note: if the root lock isn't held, we may read inaccurate numbers for\n  // some of these properties.  We're ok with that, and don't want to force\n  // the root lock to be re-acquired just for this.\n  rootMetadata.root_path = root_path;\n  rootMetadata.recrawl_count = recrawlInfo.rlock()->recrawlCount;\n  rootMetadata.case_sensitive =\n      case_sensitive == CaseSensitivity::CaseSensitive;\n\n  // During recrawl, the view may be re-assigned.  Protect against\n  // reading a nullptr.\n  auto view = this->view();\n  if (view) {\n    rootMetadata.watcher = view->getName();\n  }\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/root/iothread.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/chrono.h>\n#include <chrono>\n\n#include \"watchman/Errors.h\"\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/PerfSample.h\"\n#include \"watchman/fs/ParallelWalk.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/root/warnerr.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n#include \"watchman/telemetry/WatchmanStructuredLogger.h\"\n#include \"watchman/watcher/Watcher.h\"\n#include \"watchman/watchman_dir.h\"\n#include \"watchman/watchman_file.h\"\n\nnamespace watchman {\n\nfolly::SemiFuture<folly::Unit> InMemoryView::waitUntilReadyToQuery() {\n  auto [p, f] = folly::makePromiseContract<folly::Unit>();\n  auto pending = pendingFromWatcher_.lock();\n  pending->addSync(std::move(p));\n  pending->ping();\n  return std::move(f);\n}\n\nvoid InMemoryView::fullCrawl(\n    const std::shared_ptr<Root>& root,\n    PendingCollection& pendingFromWatcher,\n    PendingChanges& localPending) {\n  root->recrawlInfo.wlock()->crawlStart = std::chrono::steady_clock::now();\n\n  PerfSample sample(\"full-crawl\");\n\n  auto view = view_.wlock();\n  // Ensure that we observe these files with a new, distinct clock,\n  // otherwise a fresh subscription established immediately after a watch\n  // can get stuck with an empty view until another change is observed\n  mostRecentTick_.fetch_add(1, std::memory_order_acq_rel);\n\n  fullCrawlStatCount_ = std::make_shared<std::atomic<size_t>>(0);\n  root->recrawlInfo.wlock()->statCount = fullCrawlStatCount_;\n\n  auto start = std::chrono::system_clock::now();\n  pendingFromWatcher.lock()->add(root->root_path, start, W_PENDING_RECURSIVE);\n  while (true) {\n    // There is the potential for a subtle race condition here.  Since we now\n    // coalesce overlaps we must consume our outstanding set before we merge\n    // in any new kernel notification information or we risk missing out on\n    // observing changes that happen during the initial crawl.  This\n    // translates to a two level loop; the outer loop sweeps in data from\n    // inotify, then the inner loop processes it and any dirs that we pick up\n    // from recursive processing.\n    {\n      auto lock = pendingFromWatcher.lock();\n      localPending.append(lock->stealItems(), lock->stealSyncs());\n    }\n    if (localPending.empty()) {\n      break;\n    }\n\n    (void)processAllPending(root, *view, localPending);\n  }\n\n  auto recrawlInfo = root->recrawlInfo.wlock();\n  recrawlInfo->shouldRecrawl = false;\n  recrawlInfo->crawlFinish = std::chrono::steady_clock::now();\n  recrawlInfo->statCount = nullptr;\n  fullCrawlStatCount_ = nullptr;\n  root->inner.done_initial.store(true, std::memory_order_release);\n\n  // There is no need to hold locks while logging, and abortAllCookies resolves\n  // a Promise which can run arbitrary code, so locks must be released here.\n  auto recrawlCount = recrawlInfo->recrawlCount;\n  recrawlInfo.unlock();\n  view.unlock();\n\n  root->cookies.abortAllCookies();\n\n  auto root_metadata = root->getRootMetadata();\n  sample.add_root_metadata(root_metadata);\n  sample.finish();\n  sample.force_log();\n  sample.log();\n\n  FullCrawl fullCrawl;\n  fullCrawl.root = root_metadata.root_path.string();\n  fullCrawl.recrawl = root_metadata.recrawl_count;\n  fullCrawl.case_sensitive = root_metadata.case_sensitive;\n  fullCrawl.watcher = root_metadata.watcher.string();\n  getLogger()->logEvent(fullCrawl);\n\n  logf(ERR, \"{}crawl complete\\n\", recrawlCount ? \"re\" : \"\");\n}\n\nInMemoryView::Continue InMemoryView::doSettleThings(\n    Root& root,\n    IoThreadState& state) {\n  // No new pending items were given to us, so consider that\n  // we may now be settled.\n\n  std::chrono::milliseconds sinceUnsettle = state.lastUnsettle\n      ? std::chrono::duration_cast<std::chrono::milliseconds>(\n            std::chrono::steady_clock::now() - *state.lastUnsettle)\n      : std::chrono::milliseconds{0};\n\n  warmContentCache();\n\n  root.unilateralResponses->enqueue(json_object({{\"settled\", json_true()}}));\n\n  if (root.considerReap()) {\n    root.stopWatch(\"Watch was idle for too long\");\n    return Continue::Stop;\n  }\n\n  std::optional<std::chrono::milliseconds> nextPendingSettle;\n\n  {\n    auto pendingSettles = pendingSettles_.wlock();\n    auto iter = pendingSettles->begin();\n    while (iter != pendingSettles->end() && iter->first <= sinceUnsettle) {\n      auto node = pendingSettles->extract(iter++);\n      node.mapped().setValue();\n    }\n\n    if (iter != pendingSettles->end()) {\n      nextPendingSettle = iter->first;\n    }\n  }\n\n  if (nextPendingSettle) {\n    // There is another settle pending, so only wait until then.\n    state.currentTimeout = *nextPendingSettle - sinceUnsettle;\n  } else {\n    state.currentTimeout =\n        std::min(state.biggestTimeout, state.currentTimeout * 2);\n  }\n\n  root.considerAgeOut();\n  return Continue::Continue;\n}\n\nvoid InMemoryView::clientModeCrawl(const std::shared_ptr<Root>& root) {\n  PendingChanges pending;\n  fullCrawl(root, pendingFromWatcher_, pending);\n}\n\nnamespace {\n\nstd::chrono::milliseconds getBiggestTimeout(const Root& root) {\n  std::chrono::milliseconds biggest_timeout = root.gc_interval;\n\n  if (biggest_timeout.count() == 0 ||\n      (root.idle_reap_age.count() != 0 &&\n       root.idle_reap_age < biggest_timeout)) {\n    biggest_timeout = root.idle_reap_age;\n  }\n  if (biggest_timeout.count() == 0) {\n    biggest_timeout = std::chrono::hours(24);\n  }\n  return biggest_timeout;\n}\n\n} // namespace\n\nvoid InMemoryView::ioThread(const std::shared_ptr<Root>& root) {\n  IoThreadState state{getBiggestTimeout(*root)};\n  state.currentTimeout = root->trigger_settle;\n  // Injects a temporary blocks, only in test code. This is to\n  // force the iothread to loose a race with the notify thread.\n  // TODO: Support something like EdenFS FaultInjector so that we can do\n  // something less hacky.\n  if (config_.getBool(\"inject_block_in_io_thread_start\", false)) {\n    sleep(10);\n  }\n  while (Continue::Continue == stepIoThread(root, state, pendingFromWatcher_)) {\n  }\n}\n\nInMemoryView::Continue InMemoryView::stepIoThread(\n    const std::shared_ptr<Root>& root,\n    IoThreadState& state,\n    PendingCollection& pendingFromWatcher) {\n  if (stopThreads_.load(std::memory_order_acquire)) {\n    return Continue::Stop;\n  }\n\n  auto markUnsettled = [&](IoThreadState& state) {\n    state.lastUnsettle = std::chrono::steady_clock::now();\n    // Reduce sleep timeout to the settle duration ready for the next loop\n    // through.\n    state.currentTimeout = root->trigger_settle;\n  };\n\n  if (!root->inner.done_initial.load(std::memory_order_acquire)) {\n    /* first order of business is to find all the files under our root */\n    fullCrawl(root, pendingFromWatcher, state.localPending);\n\n    markUnsettled(state);\n    return Continue::Continue;\n  }\n\n  // Wait for the notify thread to give us pending items, or for\n  // the settle period to expire\n  {\n    logf(DBG, \"poll_events timeout={}ms\\n\", state.currentTimeout);\n    auto targetPendingLock =\n        pendingFromWatcher.lockAndWait(state.currentTimeout);\n    logf(DBG, \" ... wake up\\n\");\n    state.localPending.append(\n        targetPendingLock->stealItems(), targetPendingLock->stealSyncs());\n  }\n\n  if (root->inner.cancelled.load(std::memory_order_acquire)) {\n    // The root was cancelled. Root::cancel will call stopThreads() soon, so\n    // just exit early.\n    return Continue::Stop;\n  }\n\n  // Has a Watcher indicated this root needs a recrawl?\n  // TODO: scheduleRecrawl should be replaced with a regular event published in\n  // the PendingCollection.\n  if (root->recrawlInfo.rlock()->shouldRecrawl) {\n    auto info = root->recrawlInfo.wlock();\n    info->recrawlCount++;\n    root->inner.done_initial.store(false, std::memory_order_release);\n    // Now that done_initial is false, the next pass will recrawl.\n    return Continue::Continue;\n  }\n\n  // fullCrawl unconditionally sets done_initial to true and if\n  // handleShouldRecrawl set it false, execution wouldn't reach this part of\n  // the loop.\n  w_check(\n      root->inner.done_initial.load(std::memory_order_acquire),\n      \"A full crawl should not be pending at this point in the loop.\");\n\n  // Waiting for an event timed out or we were woken with a ping, so still\n  // consider the root settled.\n  if (state.localPending.empty()) {\n    return doSettleThings(*root, state);\n  }\n\n  // Otherwise we have pending items to stat and crawl\n\n  // Some Linux kernels between 5.3 and 5.6 will report inotify events before\n  // the file has been evicted from the cache, causing Watchman to incorrectly\n  // think the file is still on disk after it's unlinked. If configured, allow\n  // a brief sleep to mitigate.\n  //\n  // Careful with this knob: it adds latency to every query by delaying cookie\n  // processing.\n  auto notify_sleep_ms = config_.getInt(\"notify_sleep_ms\", 0);\n  if (notify_sleep_ms) {\n    std::this_thread::sleep_for(std::chrono::milliseconds(notify_sleep_ms));\n  }\n\n  auto view = view_.wlock();\n\n  mostRecentTick_.fetch_add(1, std::memory_order_acq_rel);\n\n  auto isDesynced = processAllPending(root, *view, state.localPending);\n  if (isDesynced == IsDesynced::Yes) {\n    logf(ERR, \"recrawl complete, aborting all pending cookies\\n\");\n    root->cookies.abortAllCookies();\n  }\n\n  // Always mark unsettled after processing events because settle durations\n  // should only include idle time, not time spent processing events.\n  markUnsettled(state);\n  return Continue::Continue;\n}\n\nInMemoryView::IsDesynced InMemoryView::processAllPending(\n    const std::shared_ptr<Root>& root,\n    ViewDatabase& view,\n    PendingChanges& coll) {\n  auto desyncState = IsDesynced::No;\n\n  // Don't resolve any of these until any recursive crawls are done.\n  std::vector<std::vector<folly::Promise<folly::Unit>>> allSyncs;\n\n  // Don't resolve cookies -- that is, unblock queries -- until all\n  // pending paths are processed.  There is no inherent order in\n  // events from the watcher. They might trigger recrawls or require\n  // subsequent enumeration and discovery. So we cannot unblock any\n  // pending queries until we're sure the internal view is caught up\n  // to all pending change events.\n  std::vector<w_string> pendingCookies;\n\n  while (!coll.empty()) {\n    logf(\n        DBG,\n        \"processing {} events in {}\\n\",\n        coll.getPendingItemCount(),\n        rootPath_);\n\n    auto pending = coll.stealItems();\n    auto syncs = coll.stealSyncs();\n    if (syncs.empty()) {\n      w_check(\n          pending != nullptr,\n          \"coll.stealItems() and coll.size() did not agree about its size\");\n    } else {\n      allSyncs.push_back(std::move(syncs));\n    }\n\n    while (pending) {\n      if (!stopThreads_.load(std::memory_order_acquire)) {\n        if (pending->flags & W_PENDING_IS_DESYNCED) {\n          // The watcher is desynced but some cookies might be written to disk\n          // while the recursive crawl is ongoing. We are going to specifically\n          // ignore these cookies during that recursive crawl to avoid a race\n          // condition where cookies might be seen before some files have been\n          // observed as changed on disk. Due to this, and the fact that cookies\n          // notifications might simply have been dropped by the watcher, we\n          // need to abort the pending cookies to force them to be recreated on\n          // disk, and thus re-seen.\n          if (pending->flags & W_PENDING_CRAWL_ONLY) {\n            desyncState = IsDesynced::Yes;\n          }\n        }\n\n        // processPath may insert new pending items into `coll`\n        processPath(root, view, coll, *pending, nullptr, pendingCookies);\n      }\n\n      // TODO: Document that continuing to run this loop when stopThreads_ is\n      // true fixes a stack overflow when pending is long.\n      pending = std::move(pending->next);\n    }\n  }\n\n  for (auto& pendingCookie : pendingCookies) {\n    if (processedPaths_) {\n      // Record a fake entry to indicate when we unblocked the cookie in the\n      // processed paths log.\n      processedPaths_->write(\n          PendingChangeLogEntry{\n              PendingChange{\n                  pendingCookie,\n                  std::chrono::system_clock::now(),\n                  W_PENDING_CRAWL_ONLY},\n              // This error code is unlikely to ever collide with reality.\n              make_error_code(error_code::too_many_symbolic_link_levels),\n              FileInformation{}});\n    }\n    root->cookies.notifyCookie(pendingCookie);\n  }\n\n  for (auto& outer : allSyncs) {\n    for (auto& sync : outer) {\n      sync.setValue();\n    }\n  }\n\n  return desyncState;\n}\n\nvoid InMemoryView::processPath(\n    const std::shared_ptr<Root>& root,\n    ViewDatabase& view,\n    PendingChanges& coll,\n    const PendingChange& pending,\n    const FileInformation* pre_stat,\n    std::vector<w_string>& pendingCookies) {\n  w_check(\n      pending.path.size() >= rootPath_.size(),\n      \"full_path must be a descendant of the root directory\\n\",\n      \"rootPath_:    \",\n      rootPath_,\n      \"\\n\",\n      \"pending.path: \",\n      pending.path,\n      \"\\n\");\n\n  /* From a particular query's point of view, there are four sorts of cookies we\n   * can observe:\n   * 1. Cookies that this query has created. This marks the end of this query's\n   *    sync_to_now, so we hide it from the results.\n   * 2. Cookies that another query on the same watch by the same process has\n   *    created. This marks the end of that other query's sync_to_now, so from\n   *    the point of view of this query we turn a blind eye to it.\n   * 3. Cookies created by another process on the same watch. We're independent\n   *    of other processes, so we report these.\n   * 4. Cookies created by a nested watch by the same or a different process.\n   *    We're independent of other watches, so we report these.\n   *\n   * The below condition is true for cases 1 and 2 and false for 3 and 4.\n   */\n  if (root->cookies.isCookiePrefix(pending.path)) {\n    bool consider_cookie;\n    if (watcher_->flags & WATCHER_HAS_PER_FILE_NOTIFICATIONS) {\n      // The watcher gives us file level notification, thus only consider\n      // cookies if this path is coming directly from the watcher, not from a\n      // recursive crawl.\n      consider_cookie = (pending.flags & W_PENDING_VIA_NOTIFY) ||\n          !root->inner.done_initial.load(std::memory_order_acquire);\n    } else {\n      // If we are de-synced, we shouldn't consider cookies as we are currently\n      // walking directories recursively and we need to wait for after the\n      // directory is fully re-crawled before notifying the cookie. At the end\n      // of the crawl, cookies will be cancelled and re-created.\n      consider_cookie =\n          (pending.flags & W_PENDING_IS_DESYNCED) != W_PENDING_IS_DESYNCED;\n    }\n\n    if (consider_cookie) {\n      pendingCookies.push_back(pending.path);\n    }\n\n    // Never allow cookie files to show up in the tree\n    return;\n  }\n\n  if (pending.path == rootPath_ || (pending.flags & W_PENDING_CRAWL_ONLY)) {\n    crawler(root, view, coll, pending, pendingCookies);\n  } else {\n    statPath(*root, root->cookies, view, coll, pending, pre_stat);\n  }\n}\n\nnamespace {\n\nvoid apply_dir_size_hint(watchman_dir* dir, uint32_t ndirs, uint32_t nfiles) {\n  if (dir->files.empty() && nfiles > 0) {\n    dir->files.reserve(nfiles);\n  }\n  if (dir->dirs.empty() && ndirs > 0) {\n    dir->dirs.reserve(ndirs);\n  }\n}\n\n} // namespace\n\nvoid InMemoryView::crawler(\n    const std::shared_ptr<Root>& root,\n    ViewDatabase& view,\n    PendingChanges& coll,\n    const PendingChange& pending,\n    std::vector<w_string>& pendingCookies) {\n  bool recursive = pending.flags.contains(W_PENDING_RECURSIVE);\n  bool stat_all = pending.flags.contains(W_PENDING_NONRECURSIVE_SCAN);\n\n  auto dir = view.resolveDir(pending.path, true);\n\n  // Detect root directory replacement.\n  // The inode number check is handled more generally by the sister code\n  // in stat.cpp.  We need to special case it for the root because we never\n  // generate a watchman_file node for the root and thus never call\n  // InMemoryView::statPath (we'll fault if we do!).\n  // Ideally the kernel would have given us a signal when we've been replaced\n  // but some filesystems (eg: BTRFS) do not emit appropriate inotify events\n  // for things like subvolume deletes.  We've seen situations where the\n  // root has been replaced and we got no notifications at all and this has\n  // left the cookie sync mechanism broken forever.\n  if (pending.path == root->root_path) {\n    try {\n      auto st = fileSystem_.getFileInformation(\n          pending.path.c_str(), root->case_sensitive);\n      if (st.ino != view.getRootInode()) {\n        // If it still exists and the inode doesn't match, then we need\n        // to force recrawl to make sure we're in sync.\n        // We're lazily initializing the rootInode to 0 here, so we don't\n        // need to do this the first time through (we're already crawling\n        // everything in that case).\n        if (view.getRootInode() != 0) {\n          root->scheduleRecrawl(\n              \"root was replaced and we didn't get notified by the kernel\");\n          return;\n        }\n        recursive = true;\n        view.setRootInode(st.ino);\n      }\n    } catch (const std::system_error& err) {\n      handle_open_errno(\n          *root,\n          dir->getFullPath(),\n          pending.now,\n          \"getFileInformation\",\n          err.code());\n      view.markDirDeleted(dir, getClock(pending.now), true);\n      return;\n    }\n  }\n\n  if (recursive &&\n      root->enable_parallel_crawl.load(std::memory_order_acquire)) {\n    return crawlerParallel(root, view, coll, pending, pendingCookies);\n  }\n\n  auto& path = pending.path;\n\n  logf(\n      DBG, \"opendir({}) recursive={} stat_all={}\\n\", path, recursive, stat_all);\n\n  /* Start watching and open the dir for crawling.\n   * Whether we open the dir prior to watching or after is watcher specific,\n   * so the operations are rolled together in our abstraction */\n  std::unique_ptr<DirHandle> osdir;\n\n  try {\n    osdir = watcher_->startWatchDir(root, path.c_str());\n  } catch (const std::system_error& err) {\n    logf(DBG, \"startWatchDir({}) threw {}\\n\", path, err.what());\n    handle_open_errno(\n        *root, dir->getFullPath(), pending.now, \"opendir\", err.code());\n    view.markDirDeleted(dir, getClock(pending.now), true);\n    return;\n  }\n\n  if (dir->files.empty()) {\n    // Pre-size our hash(es) if we can, so that we can avoid collisions\n    // and re-hashing during initial crawl\n    uint32_t num_dirs = 0;\n#ifndef _WIN32\n    struct stat st;\n    int dfd = osdir->getFd();\n    if (dfd != -1 && fstat(dfd, &st) == 0) {\n      num_dirs = (uint32_t)st.st_nlink;\n    }\n#endif\n    // st.st_nlink is usually number of dirs + 2 (., ..).\n    // If it is less than 2 then it doesn't follow that convention.\n    // We just pass it through for the dir size hint and the hash\n    // table implementation will round that up to the next power of 2\n    apply_dir_size_hint(\n        dir,\n        num_dirs,\n        uint32_t(root->config.getInt(\"hint_num_files_per_dir\", 64)));\n  }\n\n  /* flag for delete detection */\n  for (auto& it : dir->files) {\n    auto file = it.second.get();\n    if (file->exists) {\n      file->maybe_deleted = true;\n    }\n  }\n\n  try {\n    while (const DirEntry* dirent = osdir->readDir()) {\n      // Don't follow parent/self links\n      if (dirent->d_name[0] == '.' &&\n          (!strcmp(dirent->d_name, \".\") || !strcmp(dirent->d_name, \"..\"))) {\n        continue;\n      }\n\n      // Queue it up for analysis if the file is newly existing\n      w_string name(dirent->d_name, W_STRING_BYTE);\n      struct watchman_file* file = dir->getChildFile(name);\n      if (file) {\n        file->maybe_deleted = false;\n      }\n      if (!file || !file->exists || stat_all || recursive) {\n        auto full_path = dir->getFullPathToChild(name);\n\n        PendingFlags newFlags;\n        if (recursive || !file || !file->exists) {\n          newFlags.set(W_PENDING_RECURSIVE);\n        }\n        if (pending.flags & W_PENDING_IS_DESYNCED) {\n          newFlags.set(W_PENDING_IS_DESYNCED);\n        }\n\n        logf(\n            DBG,\n            \"in crawler calling processPath on {} oldflags={} newflags={}\\n\",\n            full_path,\n            pending.flags.asRaw(),\n            newFlags.asRaw());\n\n        PendingChange full_pending{std::move(full_path), pending.now, newFlags};\n        processPath(\n            root,\n            view,\n            coll,\n            full_pending,\n            dirent->has_stat ? &dirent->stat : nullptr,\n            pendingCookies);\n      }\n    }\n  } catch (const std::system_error& exc) {\n    log(ERR,\n        \"Error while reading dir \",\n        path,\n        \": \",\n        exc.what(),\n        \", re-adding to pending list to re-assess\\n\");\n    coll.add(path, pending.now, {});\n  }\n  osdir.reset();\n\n  // Anything still in maybe_deleted is actually deleted.\n  // Arrange to re-process it shortly\n  for (auto& it : dir->files) {\n    auto file = it.second.get();\n    if (file->exists &&\n        (file->maybe_deleted || (file->stat.isDir() && recursive))) {\n      coll.add(\n          dir,\n          file->getName().data(),\n          pending.now,\n          recursive ? W_PENDING_RECURSIVE : PendingFlags{});\n    }\n  }\n}\n\nnamespace {\n\n// Handle ignore and startWatchDir on openDir.\nclass CrawlerFileSystem : public FileSystem {\n public:\n  std::unique_ptr<DirHandle> openDir(const char* path, bool strict) override {\n    // startWatchDir implementations use default openDir, which has\n    // strict=true.\n    w_assert(strict, \"CrawlerFileSystem::openDir requires strict=true\");\n    (void)strict;\n    // Match ignore handling in statPath().\n    w_string fullPath{path};\n    if (root_->ignore.isIgnoreDir(fullPath)) {\n      return nullptr;\n    }\n    if ((root_->root_path != fullPath &&\n         root_->ignore.isIgnoreVCS(fullPath.dirName())) &&\n        !root_->cookies.isCookieDir(fullPath)) {\n      return nullptr;\n    }\n    // Use watcher->startWatchDir to ensure side effects are applied\n    // in the right order (ex. inotify_add_watch before opendir).\n    // This requires startWatchDir to be thread-safe.\n    return watcher_->startWatchDir(root_, path);\n  }\n\n  FileInformation getFileInformation(\n      const char* path,\n      CaseSensitivity caseSensitive) override {\n    return fileSystem_.getFileInformation(path, caseSensitive);\n  }\n\n  void touch(const char* path) override {\n    fileSystem_.touch(path);\n  }\n\n  CrawlerFileSystem(\n      FileSystem& fileSystem,\n      std::shared_ptr<Root> root,\n      std::shared_ptr<Watcher> watcher)\n      : fileSystem_{fileSystem},\n        root_{std::move(root)},\n        watcher_{std::move(watcher)} {}\n\n  CrawlerFileSystem() = delete;\n  CrawlerFileSystem(CrawlerFileSystem&&) = delete;\n  CrawlerFileSystem(const CrawlerFileSystem&) = delete;\n  CrawlerFileSystem& operator=(CrawlerFileSystem&&) = delete;\n  CrawlerFileSystem& operator=(const CrawlerFileSystem&) = delete;\n\n private:\n  FileSystem& fileSystem_;\n  std::shared_ptr<Root> root_;\n  std::shared_ptr<Watcher> watcher_;\n};\n\n} // namespace\n\nvoid InMemoryView::crawlerParallel(\n    const std::shared_ptr<Root>& root,\n    ViewDatabase& view,\n    PendingChanges& coll,\n    const PendingChange& pending,\n    std::vector<w_string>& pendingCookies) {\n  w_assert(\n      pending.flags.contains(W_PENDING_RECURSIVE),\n      \"crawlerParallel requires W_PENDING_RECURSIVE\");\n\n  // Flags to pass down to statPath().\n  const PendingFlags inheritFlags =\n      (pending.flags & W_PENDING_IS_DESYNCED) | W_PENDING_VIA_PWALK;\n\n  AbsolutePath path{pending.path.c_str()};\n  logf(DBG, \"crawlerParallel({})\\n\", path);\n\n  // Use ParallelWalker to get directory entries and stats recursively.\n  // Unlike crawler(), do not call the crawler function recursively\n  // (via W_PENDING_RECURSIVE), and avoid extra syscalls.\n\n  std::shared_ptr<CrawlerFileSystem> fs =\n      std::make_shared<CrawlerFileSystem>(fileSystem_, root, watcher_);\n  size_t threadCountHint = config_.getInt(\"parallel_crawl_thread_count\", 0);\n  ParallelWalker walker{\n      std::move(fs),\n      path,\n      root->allow_crawling_other_mounts ? std::nullopt\n                                        : std::optional{root->stat},\n      threadCountHint};\n\n  // Step 1: Process readDir results.\n  while (true) {\n    auto result = walker.nextResult();\n    if (!result.has_value()) {\n      break;\n    }\n    ReadDirResult& dirResult = result.value();\n\n    // Step 1a: Prepare the dirView.\n    w_string dirPath{dirResult.dirFullPath.c_str()};\n    auto dirView = view.resolveDir(dirPath, true);\n    if (dirView->files.empty()) {\n      dirView->files.reserve(dirResult.entries.size());\n      dirView->dirs.reserve(dirResult.subdirCount);\n    }\n    for (auto& it : dirView->files) {\n      auto fileView = it.second.get();\n      if (fileView->exists) {\n        fileView->maybe_deleted = true;\n      }\n    }\n\n    // Step 1b: Update files in the dirView via statPath().\n    // Prepare the stat so statPath can avoid syscall.\n    for (auto& entry : dirResult.entries) {\n      w_string name{entry.name.c_str(), W_STRING_BYTE};\n      watchman_file* fileView = dirView->getChildFile(name);\n      if (fileView) {\n        fileView->maybe_deleted = false;\n      }\n      auto fullPath = dirView->getFullPathToChild(name);\n      processPath(\n          root,\n          view,\n          coll,\n          PendingChange{\n              std::move(fullPath),\n              pending.now,\n              inheritFlags,\n          },\n          &entry.stat,\n          pendingCookies);\n    }\n\n    // Step 1c: Mark for deletion.\n    for (auto& it : dirView->files) {\n      auto fileView = it.second.get();\n      if (fileView->exists && fileView->maybe_deleted) {\n        auto fullPath = dirView->getFullPathToChild(fileView->getName());\n        processPath(\n            root,\n            view,\n            coll,\n            PendingChange{\n                std::move(fullPath),\n                pending.now,\n                inheritFlags,\n            },\n            nullptr,\n            pendingCookies);\n      }\n    }\n  }\n\n  // Step 2: Handle errors.\n  while (true) {\n    auto maybe_error = walker.nextError();\n    if (!maybe_error) {\n      break;\n    }\n    auto error = maybe_error.value();\n    const std::system_error* exc =\n        error.error.get_exception<std::system_error>();\n    if (exc) {\n      auto code = exc->code();\n      if (code == error_code::no_such_file_or_directory ||\n          code == error_code::not_a_directory) {\n        // Handled by step 1c.\n      } else {\n        // Report error. Affect query response.\n        handle_open_errno(\n            *root, error.fullPath, pending.now, error.operationName, code);\n      }\n    }\n  }\n}\n\nnamespace {\nbool did_file_change(\n    const FileInformation* saved,\n    const FileInformation* fresh) {\n  /* we have to compare this way because the stat structure\n   * may contain fields that vary and that don't impact our\n   * understanding of the file */\n\n#define FIELD_CHG(name)             \\\n  if (saved->name != fresh->name) { \\\n    return true;                    \\\n  }\n\n  // Can't compare with memcmp due to padding and garbage in the struct\n  // on OpenBSD, which has a 32-bit tv_sec + 64-bit tv_nsec\n#define TIMESPEC_FIELD_CHG(wat)                           \\\n  {                                                       \\\n    struct timespec a = saved->wat##time;                 \\\n    struct timespec b = fresh->wat##time;                 \\\n    if (a.tv_sec != b.tv_sec || a.tv_nsec != b.tv_nsec) { \\\n      return true;                                        \\\n    }                                                     \\\n  }\n\n  FIELD_CHG(mode);\n\n  if (!saved->isDir()) {\n    FIELD_CHG(size);\n    FIELD_CHG(nlink);\n  }\n  FIELD_CHG(dev);\n  FIELD_CHG(ino);\n  FIELD_CHG(uid);\n  FIELD_CHG(gid);\n  // Don't care about st_blocks\n  // Don't care about st_blksize\n  // Don't care about st_atimespec\n  TIMESPEC_FIELD_CHG(m);\n  TIMESPEC_FIELD_CHG(c);\n\n  return false;\n}\n} // namespace\n\nvoid InMemoryView::statPath(\n    const Root& root,\n    const CookieSync& cookies,\n    ViewDatabase& view,\n    PendingChanges& coll,\n    const PendingChange& pending,\n    const FileInformation* pre_stat) {\n  bool recursive = pending.flags.contains(W_PENDING_RECURSIVE);\n  const bool via_notify = pending.flags.contains(W_PENDING_VIA_NOTIFY);\n  const PendingFlags desynced_flag = pending.flags & W_PENDING_IS_DESYNCED;\n\n  // viaPwalk is true iff calling from crawlerParallel.\n  bool viaPwalk = pending.flags.contains(W_PENDING_VIA_PWALK);\n\n  if (root.ignore.isIgnoreDir(pending.path)) {\n    logf(DBG, \"{} matches ignore_dir rules\\n\", pending.path);\n    return;\n  }\n\n  auto& path = pending.path;\n  w_check(!path.empty(), \"must have path\");\n  auto dir_name = pending.path.dirName();\n  auto file_name = pending.path.baseName();\n  w_check(!dir_name.empty(), \"must have dir_name\");\n  auto parentDir = view.resolveDir(dir_name, true);\n\n  auto file = parentDir->getChildFile(file_name);\n\n  auto dir_ent = parentDir->getChildDir(file_name);\n\n  FileInformation st;\n  std::error_code errcode;\n  if (pre_stat) {\n    st = *pre_stat;\n  } else if (viaPwalk) {\n    // crawlerParallel always provides \"pre_stat\". If it doesn't, it means the\n    // file is missing (see \"Step 1c\" in crawlerParallel). Treat as deleted\n    // without an extra getFileInformation() call.\n    errcode = make_error_code(error_code::no_such_file_or_directory);\n  } else {\n    try {\n      st = fileSystem_.getFileInformation(path.c_str(), root.case_sensitive);\n      log(DBG,\n          \"getFileInformation(\",\n          path,\n          \") file=\",\n          fmt::ptr(file),\n          \" dir=\",\n          fmt::ptr(dir_ent),\n          \"\\n\");\n    } catch (const std::system_error& exc) {\n      errcode = exc.code();\n      log(DBG,\n          \"getFileInformation(\",\n          path,\n          \") file=\",\n          fmt::ptr(file),\n          \" dir=\",\n          fmt::ptr(dir_ent),\n          \" failed: \",\n          exc.what(),\n          \"\\n\");\n    }\n  }\n\n  if (processedPaths_) {\n    processedPaths_->write(PendingChangeLogEntry{pending, errcode, st});\n  }\n  if (fullCrawlStatCount_) {\n    // Not using loaded value - load can be relaxed - no need for acq_rel\n    fullCrawlStatCount_->fetch_add(1, std::memory_order_release);\n  }\n\n  if (errcode == error_code::no_such_file_or_directory ||\n      errcode == error_code::not_a_directory) {\n    /* it's not there, update our state */\n    if (dir_ent) {\n      view.markDirDeleted(dir_ent, getClock(pending.now), true);\n      log(DBG,\n          \"getFileInformation(\",\n          path,\n          \") -> \",\n          errcode.message(),\n          \" so stopping watch\\n\");\n    }\n    if (file) {\n      if (file->exists) {\n        log(DBG,\n            \"getFileInformation(\",\n            path,\n            \") -> \",\n            errcode.message(),\n            \" so marking \",\n            file->getName(),\n            \" deleted\\n\");\n        file->exists = false;\n        view.markFileChanged(file, getClock(pending.now));\n      }\n    } else {\n      // It was created and removed before we could ever observe it\n      // in the filesystem.  We need to generate a deleted file\n      // representation of it now, so that subscription clients can\n      // be notified of this event\n      file = view.getOrCreateChildFile(\n          parentDir, file_name, getClock(pending.now));\n      log(DBG,\n          \"getFileInformation(\",\n          path,\n          \") -> \",\n          errcode.message(),\n          \" and file node was NULL. \"\n          \"Generating a deleted node.\\n\");\n      file->exists = false;\n      view.markFileChanged(file, getClock(pending.now));\n    }\n\n    if (!viaPwalk &&\n        (root.case_sensitive == CaseSensitivity::CaseInSensitive &&\n         dir_name != root.root_path && parentDir->last_check_existed)) {\n      /* If we rejected the name because it wasn't canonical,\n       * we need to ensure that we look in the parent dir to discover\n       * the new item(s)\n       *\n       * Unless viaPwalk, in which case the siblings (items in parent dir)\n       * will be visited by crawlerParallel. */\n      logf(\n          DBG,\n          \"we're case insensitive, and {} is ENOENT, \"\n          \"speculatively look at parent dir {}\\n\",\n          path,\n          dir_name);\n      coll.add(dir_name, pending.now, W_PENDING_CRAWL_ONLY);\n    }\n\n  } else if (errcode.value()) {\n    log(ERR,\n        \"getFileInformation(\",\n        path,\n        \") failed and not handled! -> \",\n        errcode.message(),\n        \" value=\",\n        errcode.value(),\n        \" category=\",\n        errcode.category().name(),\n        \"\\n\");\n  } else {\n    if (!file) {\n      file = view.getOrCreateChildFile(\n          parentDir, file_name, getClock(pending.now));\n    }\n\n    if (!file->exists) {\n      /* we're transitioning from deleted to existing,\n       * so we're effectively new again */\n      file->ctime.ticks = mostRecentTick_;\n      file->ctime.timestamp = std::chrono::system_clock::to_time_t(pending.now);\n      /* if a dir was deleted and now exists again, we want\n       * to crawl it again */\n      recursive = true;\n    }\n    if (!file->exists || via_notify || did_file_change(&file->stat, &st)) {\n      logf(\n          DBG,\n          \"file changed exists={} via_notify={} stat-changed={} isdir={} size={} {}\\n\",\n          file->exists,\n          via_notify,\n          file->exists && !via_notify,\n          st.isDir(),\n          st.size,\n          path);\n      file->exists = true;\n      view.markFileChanged(file, getClock(pending.now));\n\n      // If the inode number changed then we definitely need to recursively\n      // examine any children because we cannot assume that the kernel will\n      // have given us the correct hints about this change.  BTRFS is one\n      // example of a filesystem where this has been observed to happen.\n      if (file->stat.ino != st.ino) {\n        recursive = true;\n      }\n    }\n\n    memcpy(&file->stat, &st, sizeof(file->stat));\n    watcher_->startWatchFile(file);\n\n    if (st.isDir()) {\n      if (dir_ent == nullptr) {\n        recursive = true;\n      } else {\n        // Ensure that we believe that this node exists\n        dir_ent->last_check_existed = true;\n      }\n\n      if (!(root.allow_crawling_other_mounts ||\n            isOnSameMount(root.stat, st, path.c_str()))) {\n        logf(\n            DBG,\n            \"Ignoring {} as it doesn't reside on the same mount point as the root directory\\n\",\n            pending.path);\n        return;\n      }\n\n      // Don't recurse if our parent is an ignore dir or via crawlerParallel\n      // (already recursive)\n      if (!viaPwalk &&\n          (!root.ignore.isIgnoreVCS(dir_name) ||\n           // but do if we're looking at the cookie dir (stat_path is never\n           // called for the root itself)\n           cookies.isCookieDir(pending.path))) {\n        if (recursive) {\n          /* we always need to crawl if we're recursive, this can happen when a\n           * directory is created */\n          coll.add(\n              pending.path,\n              pending.now,\n              desynced_flag | W_PENDING_RECURSIVE | W_PENDING_CRAWL_ONLY);\n        } else if (pending.flags & W_PENDING_NONRECURSIVE_SCAN) {\n          /* on file changes, we receive a notification on the directory and\n           * thus we just need to crawl this one directory to consider all\n           * the pending files. */\n          coll.add(\n              pending.path,\n              pending.now,\n              desynced_flag | W_PENDING_NONRECURSIVE_SCAN |\n                  W_PENDING_CRAWL_ONLY);\n        } else {\n          if (watcher_->flags & WATCHER_HAS_PER_FILE_NOTIFICATIONS) {\n            /* we get told about changes on the child, so we don't need to do\n             * anything */\n          } else {\n            /* in all the other cases, crawl */\n            coll.add(\n                pending.path,\n                pending.now,\n                desynced_flag | W_PENDING_CRAWL_ONLY);\n          }\n        }\n      }\n    } else if (dir_ent) {\n      // We transitioned from dir to file (see fishy.php), so we should prune\n      // our former tree here\n      view.markDirDeleted(dir_ent, getClock(pending.now), true);\n    }\n  }\n}\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/notifythread.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Constants.h\"\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/watcher/Watcher.h\"\n\nnamespace watchman {\n\n// we want to consume inotify events as quickly as possible\n// to minimize the risk that the kernel event buffer overflows,\n// so we do this as a blocking thread that reads the inotify\n// descriptor and then queues the filesystem IO work until after\n// we have drained the inotify descriptor\nvoid InMemoryView::notifyThread(const std::shared_ptr<Root>& root) {\n  PendingChanges fromWatcher;\n\n  if (!watcher_->start(root)) {\n    logf(\n        ERR,\n        \"failed to start root {}, cancelling watch: {}\\n\",\n        root->root_path,\n        root->failure_reason ? *root->failure_reason : w_string{});\n    root->cancel(\n        fmt::format(\n            \"Failed to start watcher: {}\",\n            root->failure_reason ? root->failure_reason->view() : \"\"));\n    return;\n  }\n\n  // signal that we're done here, so that we can start the\n  // io thread after this point\n  pendingFromWatcher_.lock()->ping();\n\n  while (!stopThreads_.load(std::memory_order_acquire)) {\n    // big number because not all watchers can deal with\n    // -1 meaning infinite wait at the moment\n    if (!watcher_->waitNotify(86400)) {\n      continue;\n    }\n    do {\n      auto resultFlags = watcher_->consumeNotify(root, fromWatcher);\n\n      if (resultFlags.cancelSelf) {\n        root->cancel(\"Watcher noticed root has been removed.\");\n        break;\n      }\n      if (fromWatcher.getPendingItemCount() >= WATCHMAN_BATCH_LIMIT) {\n        break;\n      }\n    } while (watcher_->waitNotify(0));\n\n    if (!fromWatcher.empty()) {\n      auto lock = pendingFromWatcher_.lock();\n      lock->append(fromWatcher.stealItems(), fromWatcher.stealSyncs());\n      lock->ping();\n    }\n  }\n}\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/reap.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/chrono.h>\n#include \"watchman/Logging.h\"\n#include \"watchman/root/Root.h\"\n\nusing namespace watchman;\n\nbool Root::considerReap() {\n  if (idle_reap_age.count() == 0) {\n    return false;\n  }\n\n  auto now = std::chrono::steady_clock::now();\n\n  if (now > inner.last_cmd_timestamp.load(std::memory_order_acquire) +\n              idle_reap_age &&\n      (triggers.rlock()->empty()) && (now > inner.last_reap_timestamp) &&\n      !unilateralResponses->hasSubscribers()) {\n    // We haven't had any activity in a while, and there are no registered\n    // triggers or subscriptions against this watch.\n    log(ERR,\n        \"root \",\n        root_path,\n        \" has had no activity in \",\n        idle_reap_age,\n        \" and has no triggers or subscriptions, cancelling watch.  \"\n        \"Set idle_reap_age_seconds in your .watchmanconfig to control this \"\n        \"behavior\\n\");\n    return true;\n  }\n\n  inner.last_reap_timestamp = now;\n\n  return false;\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/resolve.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include <folly/String.h>\n#include <system_error>\n#include \"watchman/Errors.h\"\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/fs/FSDetect.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/root/watchlist.h\"\n#include \"watchman/state.h\"\n#include \"watchman/watcher/WatcherRegistry.h\"\n\nusing namespace watchman;\n\nnamespace {\n\n/* Returns true if the global config root_restrict_files is not defined or if\n * one of the files in root_restrict_files exists, false otherwise. */\nbool root_check_restrict(const char* watch_path) {\n  bool enforcing;\n  auto root_restrict_files = cfg_compute_root_files(&enforcing);\n  if (!root_restrict_files) {\n    return true;\n  }\n  if (!enforcing) {\n    return true;\n  }\n\n  if (!root_restrict_files->isArray()) {\n    return false;\n  }\n  auto& arr = root_restrict_files->array();\n\n  for (size_t i = 0; i < arr.size(); i++) {\n    auto& obj = arr[i];\n    const char* restrict_file = json_string_value(obj);\n\n    if (!restrict_file) {\n      logf(\n          ERR,\n          \"resolve_root: global config root_restrict_files \"\n          \"element {} should be a string\\n\",\n          i);\n      continue;\n    }\n\n    auto restrict_path = fmt::format(\"{}/{}\", watch_path, restrict_file);\n    bool rv = w_path_exists(restrict_path.c_str());\n    if (rv) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nstatic void check_allowed_fs(const char* filename, const w_string& fs_type) {\n  const char* advice = nullptr;\n\n  // Report this to the log always, as it is helpful in understanding\n  // problem reports\n  logf(ERR, \"path {} is on filesystem type {}\\n\", filename, fs_type);\n\n  auto illegal_fstypes = cfg_get_json(\"illegal_fstypes\");\n  if (!illegal_fstypes) {\n    return;\n  }\n\n  auto advice_string = cfg_get_json(\"illegal_fstypes_advice\");\n  if (advice_string) {\n    advice = json_string_value(*advice_string);\n  }\n  if (!advice) {\n    advice = \"relocate the dir to an allowed filesystem type\";\n  }\n\n  if (!illegal_fstypes->isArray()) {\n    logf(ERR, \"resolve_root: global config illegal_fstypes is not an array\\n\");\n    return;\n  }\n\n  auto& arr = illegal_fstypes->array();\n\n  for (size_t i = 0; i < arr.size(); i++) {\n    auto& obj = arr[i];\n    const char* name = json_string_value(obj);\n\n    if (!name) {\n      logf(\n          ERR,\n          \"resolve_root: global config illegal_fstypes \"\n          \"element {} should be a string\\n\",\n          i);\n      continue;\n    }\n\n    if (fs_type == name) {\n      RootResolveError::throwf(\n          \"path uses the \\\"{}\\\" filesystem \"\n          \"and is disallowed by global config illegal_fstypes: {}\",\n          fs_type,\n          advice);\n    }\n  }\n}\n\nstd::optional<json_ref> load_root_config(const char* path) {\n  char cfgfilename[WATCHMAN_NAME_MAX];\n  snprintf(cfgfilename, sizeof(cfgfilename), \"%s/.watchmanconfig\", path);\n\n  if (!w_path_exists(cfgfilename)) {\n    if (errno == ENOENT) {\n      return std::nullopt;\n    }\n    logf(\n        ERR, \"{} is not accessible: {}\\n\", cfgfilename, folly::errnoStr(errno));\n    return std::nullopt;\n  }\n\n  return json_load_file(cfgfilename, 0);\n}\n\n} // namespace\n\nstd::shared_ptr<Root>\nroot_resolve(const char* filename_cstr, bool auto_watch, bool* created) {\n  std::error_code realpath_err;\n  std::shared_ptr<Root> root;\n\n  *created = false;\n\n  w_string_piece filename{filename_cstr};\n\n  // Sanity check that the path is absolute\n  if (!w_string_path_is_absolute(filename)) {\n    log(ERR, \"resolve_root: path \\\"\", filename, \"\\\" must be absolute\\n\");\n    RootResolveError::throwf(\"path \\\"{}\\\" must be absolute\", filename);\n  }\n\n  // TODO: This does not prevent watching paths like C:\\ on Windows.\n  if (filename == \"/\") {\n    log(ERR, \"resolve_root: cannot watchman \\\"/\\\"\\n\");\n    throw RootResolveError(\"cannot watch \\\"/\\\"\");\n  }\n\n  w_string root_str;\n\n  try {\n    root_str = realPath(filename_cstr);\n    try {\n      getFileInformation(filename_cstr);\n    } catch (const std::system_error& exc) {\n      if (exc.code() == error_code::no_such_file_or_directory) {\n        RootResolveError::throwf(\n            \"\\\"{}\\\" resolved to \\\"{}\\\" but we were \"\n            \"unable to examine \\\"{}\\\" using strict \"\n            \"case sensitive rules.  Please check \"\n            \"each component of the path and make \"\n            \"sure that that path exactly matches \"\n            \"the correct case of the files on your \"\n            \"filesystem.\",\n            filename,\n            root_str,\n            filename);\n      }\n      RootResolveError::throwf(\n          \"unable to lstat \\\"{}\\\" {}\", filename, exc.what());\n    }\n  } catch (const std::system_error& exc) {\n    realpath_err = exc.code();\n    root_str = w_string(filename_cstr, W_STRING_BYTE);\n  }\n\n  {\n    auto map = watched_roots.rlock();\n    const auto& it = map->find(root_str);\n    if (it != map->end()) {\n      root = it->second;\n    }\n  }\n\n  if (!root && realpath_err.value() != 0) {\n    // Path didn't resolve and neither did the name they passed in\n    RootResolveError::throwf(\n        \"realpath({}) -> {}\", filename, realpath_err.message());\n  }\n\n  if (root || !auto_watch) {\n    if (!root) {\n      RootResolveError::throwf(\"directory {} is not watched\", root_str);\n    }\n\n    // Treat this as new activity for aging purposes; this roughly maps\n    // to a client querying something about the root and should extend\n    // the lifetime of the root\n\n    // Note that this write potentially races with the read in consider_reap\n    // but we're \"OK\" with it because the latter is performed under a write\n    // lock and the worst case side effect is that we (safely) decide to reap\n    // at the same instant that a new command comes in.  The reap intervals\n    // are typically on the order of days.\n    root->inner.last_cmd_timestamp.store(\n        std::chrono::steady_clock::now(), std::memory_order_release);\n    return root;\n  }\n\n  logf(DBG, \"Want to watch {} -> {}\\n\", filename, root_str);\n\n  auto fs_type = w_fstype(filename_cstr);\n  check_allowed_fs(root_str.c_str(), fs_type);\n\n  if (!root_check_restrict(root_str.c_str())) {\n    bool enforcing;\n    auto root_files = cfg_compute_root_files(&enforcing);\n    auto root_files_list = cfg_pretty_print_root_files(root_files.value());\n    RootResolveError::throwf(\n        \"Your watchman administrator has configured watchman \"\n        \"to prevent watching path `{}`.  None of the files \"\n        \"listed in global config root_files are \"\n        \"present and enforce_root_files is set to true.  \"\n        \"root_files is defined by the `{}` config file and \"\n        \"includes {}.  One or more of these files must be \"\n        \"present in order to allow a watch.  Try pulling \"\n        \"and checking out a newer version of the project?\",\n        root_str,\n        cfg_get_global_config_file_path(),\n        root_files_list);\n  }\n\n  try {\n    auto config_file = load_root_config(root_str.c_str());\n    Configuration config{config_file};\n    root = std::make_shared<Root>(\n        realFileSystem,\n        root_str,\n        fs_type,\n        config_file,\n        config,\n        WatcherRegistry::initWatcher(root_str, fs_type, config),\n        &w_state_save);\n\n    {\n      auto wlock = watched_roots.wlock();\n      auto& map = *wlock;\n      auto& existing = map[root->root_path];\n      if (existing) {\n        // Someone beat us in this race\n        root = existing;\n        *created = false;\n      } else {\n        existing = root;\n        *created = true;\n      }\n    }\n\n    return root;\n  } catch (const std::system_error& exc) {\n    if (exc.code() == std::errc::not_connected) {\n      RootNotConnectedError::throwf(\n          \"\\\"{}\\\" was able to be opened, but we were unable to read its \"\n          \"contents. If \\\"{}\\\" is located on a FUSE or network mount, \"\n          \"please ensure that you have mounted it correctly, including \"\n          \"validating any required credentials or certificates.\\n\",\n          filename,\n          filename);\n    }\n    throw;\n  }\n}\n\nstd::shared_ptr<Root> w_root_resolve(const char* filename, bool auto_watch) {\n  bool created = false;\n  auto root = root_resolve(filename, auto_watch, &created);\n\n  if (created) {\n    try {\n      root->view()->startThreads(root);\n    } catch (const std::exception& e) {\n      log(ERR, \"w_root_resolve, while calling startThreads: \", e.what());\n      root->cancel(\n          fmt::format(\"Error starting threads for root: {}\", e.what()));\n      throw;\n    }\n    w_state_save();\n  }\n  return root;\n}\n\nstd::shared_ptr<Root> w_root_resolve_for_client_mode(const char* filename) {\n  bool created = false;\n  auto root = root_resolve(filename, true, &created);\n\n  if (created) {\n    auto view = std::dynamic_pointer_cast<InMemoryView>(root->view());\n    if (!view) {\n      throw RootResolveError(\"client mode not available\");\n    }\n\n    /* force a walk now */\n    view->clientModeCrawl(root);\n  }\n  return root;\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/resolve.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <memory>\n\nnamespace watchman {\nclass Root;\n}\n\nstd::shared_ptr<watchman::Root> w_root_resolve(\n    const char* path,\n    bool auto_watch);\n\nstd::shared_ptr<watchman::Root> w_root_resolve_for_client_mode(\n    const char* filename);\n\nstd::shared_ptr<watchman::Root>\nroot_resolve(const char* filename, bool auto_watch, bool* created);\n"
  },
  {
    "path": "watchman/root/sync.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"eden/common/utils/ProcessInfoCache.h\"\n#include \"watchman/ClientContext.h\"\n#include \"watchman/PerfSample.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n#include \"watchman/telemetry/WatchmanStructuredLogger.h\"\n\nusing namespace watchman;\n\nfolly::SemiFuture<folly::Unit> Root::waitForSettle(\n    std::chrono::milliseconds settle_period) {\n  return view()->waitForSettle(settle_period);\n}\n\nCookieSync::SyncResult Root::syncToNow(\n    std::chrono::milliseconds timeout,\n    const ClientContext& client_info) {\n  PerfSample sample(\"sync_to_now\");\n  SyncToNow syncToNow;\n  auto root = shared_from_this();\n  try {\n    auto result = view()->syncToNow(root, timeout);\n    auto root_metadata = getRootMetadata();\n\n    if (sample.finish()) {\n      sample.add_root_metadata(root_metadata);\n      sample.add_meta(\n          \"sync_to_now\",\n          json_object(\n              {{\"success\", json_boolean(true)},\n               {\"timeoutms\", json_integer(timeout.count())}}));\n      sample.log();\n    }\n\n    const auto& [samplingRate, eventCount] =\n        getLogEventCounters(LogEventType::SyncToNowType);\n    // Log if override set, or if we have hit the sample rate\n    if (sample.will_log || eventCount == samplingRate) {\n      syncToNow.client_pid = client_info.clientPid;\n      syncToNow.client_name = client_info.clientInfo.has_value()\n          ? facebook::eden::ProcessInfoCache::cleanProcessCommandline(\n                std::move(client_info.clientInfo.value().get().name))\n          : \"\";\n      syncToNow.root = root_metadata.root_path.string();\n      syncToNow.event_count = eventCount != samplingRate ? 0 : eventCount;\n      syncToNow.recrawl = root_metadata.recrawl_count;\n      syncToNow.case_sensitive = root_metadata.case_sensitive;\n      syncToNow.watcher = root_metadata.watcher.string();\n      syncToNow.timeoutms = timeout.count();\n      getLogger()->logEvent(syncToNow);\n    }\n    return result;\n  } catch (const std::exception& exc) {\n    auto root_metadata = getRootMetadata();\n    sample.force_log();\n    sample.finish();\n    sample.add_root_metadata(root_metadata);\n    sample.add_meta(\n        \"sync_to_now\",\n        json_object(\n            {{\"success\", json_boolean(false)},\n             {\"reason\", w_string_to_json(exc.what())},\n             {\"timeoutms\", json_integer(timeout.count())}}));\n    sample.log();\n\n    const auto& [samplingRate, eventCount] =\n        getLogEventCounters(LogEventType::SyncToNowType);\n    syncToNow.root = root_metadata.root_path.string();\n    syncToNow.error = exc.what();\n    syncToNow.event_count = eventCount != samplingRate ? 0 : eventCount;\n    syncToNow.recrawl = root_metadata.recrawl_count;\n    syncToNow.case_sensitive = root_metadata.case_sensitive;\n    syncToNow.watcher = root_metadata.watcher.string();\n    syncToNow.success = false;\n    syncToNow.timeoutms = timeout.count();\n    getLogger()->logEvent(syncToNow);\n\n    throw;\n  }\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/test/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_unittest.bzl\", \"cpp_unittest\")\n\noncall(\"scm_client_infra\")\n\ncpp_unittest(\n    name = \"test\",\n    srcs = [\"RootTest.cpp\"],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n        \"ovr_config//os:macos\",\n    ],\n    deps = [\n        \"//folly/portability:gmock\",\n        \"//folly/portability:gtest\",\n        \"//watchman:root\",\n    ],\n)\n"
  },
  {
    "path": "watchman/root/test/RootTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/root/Root.h\"\n#include <folly/portability/GMock.h>\n#include <folly/portability/GTest.h>\n\nnamespace {\n\nusing namespace watchman;\n\nTEST(RootTest, IgnoreSet_includes_ignore_vcs_if_no_ignore_dirs) {\n  json_ref val = json_object({\n      {\"ignore_vcs\", json_array({w_string_to_json(\".hg\")})},\n  });\n  Configuration config(val);\n\n  auto ignores = computeIgnoreSet(w_string{\"root\"}, config);\n  EXPECT_TRUE(ignores.isIgnoreVCS(w_string{\"root/.hg\"}));\n}\n\n} // namespace\n"
  },
  {
    "path": "watchman/root/threading.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/QueryableView.h\"\n#include \"watchman/TriggerCommand.h\"\n#include \"watchman/root/Root.h\"\n\nusing namespace watchman;\n\nvoid Root::recrawlTriggered(const char* why) {\n  recrawlInfo.wlock()->recrawlCount++;\n\n  log(ERR, root_path, \": \", why, \": tree recrawl triggered\\n\");\n}\n\nvoid Root::scheduleRecrawl(const char* why) {\n  {\n    auto info = recrawlInfo.wlock();\n\n    if (!info->shouldRecrawl) {\n      info->recrawlCount++;\n      info->reason = why;\n      if (!config.getBool(\"suppress_recrawl_warnings\", false)) {\n        info->warning = w_string::build(\n            \"Recrawled this watch \",\n            info->recrawlCount,\n            \" time\",\n            info->recrawlCount != 1 ? \"s\" : \"\",\n            \", most recently because:\\n\",\n            why,\n            \"To resolve, please review the information on\\n\",\n            cfg_get_trouble_url(),\n            \"#recrawl\");\n      }\n\n      log(ERR, root_path, \": \", why, \": scheduling a tree recrawl\\n\");\n    }\n    info->shouldRecrawl = true;\n  }\n  view()->wakeThreads();\n}\n\nvoid Root::stopThreads(std::string_view reason) {\n  view()->stopThreads(reason);\n}\n\n// Cancels a watch.\nbool Root::cancel(std::string_view reason) {\n  if (inner.cancelled.exchange(true, std::memory_order_acq_rel)) {\n    // Already cancelled. Return false.\n    return false;\n  }\n\n  log(DBG, \"marked \", root_path, \" cancelled\\n\");\n\n  // The client will fan this out to all matching subscriptions.\n  // This happens in listener.cpp.\n  unilateralResponses->enqueue(json_object(\n      {{\"root\", w_string_to_json(root_path)}, {\"canceled\", json_true()}}));\n\n  stopThreads(reason);\n  removeFromWatched();\n\n  {\n    auto map = triggers.rlock();\n    for (auto& it : *map) {\n      it.second->stop();\n    }\n  }\n\n  return true;\n}\n\nbool Root::stopWatch(std::string_view reason) {\n  bool stopped = removeFromWatched();\n\n  if (stopped) {\n    cancel(reason);\n    saveGlobalStateHook_();\n  }\n  stopThreads(reason);\n\n  return stopped;\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/warnerr.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/root/warnerr.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/Poison.h\"\n#include \"watchman/root/Root.h\"\n\nnamespace watchman {\n\nvoid handle_open_errno(\n    Root& root,\n    w_string_piece dirPath,\n    std::chrono::system_clock::time_point now,\n    const char* syscall,\n    const std::error_code& err) {\n  bool log_warning = true;\n\n  if (err == error_code::no_such_file_or_directory ||\n      err == error_code::not_a_directory ||\n      err == error_code::too_many_symbolic_link_levels) {\n    log_warning = false;\n  } else if (err == error_code::permission_denied) {\n    log_warning = true;\n  } else if (err == error_code::system_limits_exceeded) {\n    set_poison_state(dirPath, now, syscall, err);\n    if (!root.failure_reason) {\n      root.failure_reason = w_string::build(*poisoned_reason.rlock());\n    }\n    return;\n  } else {\n    log_warning = true;\n  }\n\n  if (dirPath == root.root_path) {\n    auto warn = w_string::build(\n        syscall,\n        \"(\",\n        dirPath,\n        \") -> \",\n        err.message(),\n        \". Root is inaccessible; cancelling watch\\n\");\n    log(ERR, warn);\n    if (!root.failure_reason) {\n      root.failure_reason = warn;\n    }\n    root.cancel(\"root inaccessible\");\n    return;\n  }\n\n  auto warn = w_string::build(\n      syscall,\n      \"(\",\n      dirPath,\n      \") -> \",\n      err.message(),\n      \". Marking this portion of the tree deleted\");\n\n  log(err == error_code::no_such_file_or_directory ? DBG : ERR, warn, \"\\n\");\n  if (log_warning) {\n    root.recrawlInfo.wlock()->warning = warn;\n  }\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/root/warnerr.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <chrono>\n#include <system_error>\n#include \"watchman/watchman_string.h\"\n\nstruct watchman_dir;\n\nnamespace watchman {\n\nclass Root;\n\nvoid handle_open_errno(\n    Root& root,\n    w_string_piece dirName,\n    std::chrono::system_clock::time_point now,\n    const char* syscall,\n    const std::error_code& err);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/root/watchlist.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/root/watchlist.h\"\n#include <fmt/core.h>\n#include <folly/Synchronized.h>\n#include <vector>\n#include \"watchman/QueryableView.h\"\n#include \"watchman/TriggerCommand.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryContext.h\"\n#include \"watchman/root/Root.h\"\n\nnamespace watchman {\n\nfolly::Synchronized<std::unordered_map<w_string, std::shared_ptr<Root>>>\n    watched_roots;\nstd::atomic<long> live_roots{0};\n\nbool Root::removeFromWatched() {\n  auto map = watched_roots.wlock();\n  auto it = map->find(root_path);\n  if (it == map->end()) {\n    return false;\n  }\n  // it's possible that the root has already been removed and replaced with\n  // another, so make sure we're removing the right object\n  if (it->second.get() == this) {\n    map->erase(it);\n    return true;\n  }\n  return false;\n}\n\nbool findEnclosingRoot(\n    const w_string& fileName,\n    w_string_piece& prefix,\n    w_string_piece& relativePath) {\n  std::shared_ptr<Root> root;\n  auto name = fileName.piece();\n  {\n    auto map = watched_roots.rlock();\n    for (const auto& it : *map) {\n      auto root_name = it.first;\n      if (name.startsWith(root_name.piece()) &&\n          (name.size() == root_name.size() /* exact match */ ||\n           is_slash(name[root_name.size()] /* dir container matches */))) {\n        root = it.second;\n        prefix = root_name.piece();\n        if (name.size() == root_name.size()) {\n          relativePath = w_string_piece();\n        } else {\n          relativePath = name;\n          relativePath.advance(root_name.size() + 1);\n        }\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\njson_ref w_root_stop_watch_all() {\n  std::vector<Root*> roots;\n  std::vector<json_ref> stopped;\n\n  Root::SaveGlobalStateHook saveGlobalStateHook = nullptr;\n\n  // Funky looking loop because root->cancel() needs to acquire the\n  // watched_roots wlock and will invalidate any iterators we might\n  // otherwise have held.  Therefore we just loop until the map is\n  // empty.\n  while (true) {\n    std::shared_ptr<Root> root;\n\n    {\n      auto map = watched_roots.wlock();\n      if (map->empty()) {\n        break;\n      }\n\n      auto it = map->begin();\n      root = it->second;\n    }\n\n    root->cancel(\"watch-del-all\");\n    if (!saveGlobalStateHook) {\n      saveGlobalStateHook = root->getSaveGlobalStateHook();\n    } else {\n      // This assumes there is only one hook per application, rather than\n      // independent hooks per root. That's true today because every root holds\n      // w_state_save.\n      w_assert(\n          saveGlobalStateHook == root->getSaveGlobalStateHook(),\n          \"all roots must contain the same saveGlobalStateHook\");\n    }\n    stopped.push_back(w_string_to_json(root->root_path));\n  }\n\n  if (saveGlobalStateHook) {\n    saveGlobalStateHook();\n  }\n\n  return json_array(std::move(stopped));\n}\n\njson_ref w_root_watch_list_to_json() {\n  std::vector<json_ref> arr;\n\n  auto map = watched_roots.rlock();\n  for (const auto& it : *map) {\n    auto root = it.second;\n    arr.push_back(w_string_to_json(root->root_path));\n  }\n\n  return json_array(std::move(arr));\n}\n\nstd::vector<RootDebugStatus> Root::getStatusForAllRoots() {\n  std::vector<RootDebugStatus> result;\n\n  auto map = watched_roots.rlock();\n  result.reserve(map->size());\n  for (const auto& [name, root] : *map) {\n    result.push_back(root->getStatus());\n  }\n\n  return result;\n}\n\nRootDebugStatus Root::getStatus() const {\n  RootDebugStatus obj;\n  auto now = std::chrono::steady_clock::now();\n\n  auto cookie_array = cookies.getOutstandingCookieFileList();\n\n  std::string crawl_status;\n  RootRecrawlInfo recrawl_info;\n  {\n    auto info = recrawlInfo.rlock();\n    recrawl_info.count = info->recrawlCount;\n    recrawl_info.should_recrawl = info->shouldRecrawl;\n    recrawl_info.reason = info->reason;\n    if (info->warning) {\n      recrawl_info.warning = info->warning;\n    }\n    std::shared_ptr<std::atomic<size_t>> stat_count = info->statCount;\n    if (stat_count) {\n      recrawl_info.stat_count = stat_count->load(std::memory_order_acquire);\n    }\n\n    int64_t finish_ago = std::chrono::duration_cast<std::chrono::milliseconds>(\n                             now - info->crawlFinish)\n                             .count();\n    int64_t start_ago = std::chrono::duration_cast<std::chrono::milliseconds>(\n                            now - info->crawlStart)\n                            .count();\n    if (!inner.done_initial) {\n      recrawl_info.started_at = -start_ago;\n      crawl_status = fmt::format(\n          \"{}crawling for {} ms\", info->recrawlCount ? \"re-\" : \"\", start_ago);\n    } else if (info->shouldRecrawl) {\n      recrawl_info.completed_at = -finish_ago;\n      crawl_status = fmt::format(\n          \"needs recrawl: {}. Last crawl was {}ms ago\",\n          info->warning ? info->warning->view() : std::string_view{},\n          finish_ago);\n    } else {\n      recrawl_info.started_at = -start_ago;\n      recrawl_info.completed_at = -finish_ago;\n      crawl_status = fmt::format(\n          \"crawl completed {}ms ago, and took {}ms\",\n          finish_ago,\n          start_ago - finish_ago);\n    }\n  }\n\n  std::vector<RootQueryInfo> query_info;\n  {\n    auto locked = queries.rlock();\n    for (auto& ctx : *locked) {\n      auto elapsed = now - ctx->created;\n\n      const char* queryState = \"?\";\n      switch (ctx->state.load()) {\n        case QueryContextState::NotStarted:\n          queryState = \"NotStarted\";\n          break;\n        case QueryContextState::WaitingForCookieSync:\n          queryState = \"WaitingForCookieSync\";\n          break;\n        case QueryContextState::WaitingForViewLock:\n          queryState = \"WaitingForViewLock\";\n          break;\n        case QueryContextState::Generating:\n          queryState = \"Generating\";\n          break;\n        case QueryContextState::Rendering:\n          queryState = \"Rendering\";\n          break;\n        case QueryContextState::Completed:\n          queryState = \"Completed\";\n          break;\n      }\n\n      RootQueryInfo info;\n      info.elapsed_milliseconds =\n          std::chrono::duration_cast<std::chrono::milliseconds>(elapsed)\n              .count();\n      info.cookie_sync_duration_milliseconds =\n          ctx->cookieSyncDuration.load().count();\n      info.generation_duration_milliseconds =\n          ctx->generationDuration.load().count();\n      info.render_duration_milliseconds = ctx->renderDuration.load().count();\n      info.view_lock_wait_duration_milliseconds =\n          ctx->viewLockWaitDuration.load().count();\n      info.state = queryState;\n      info.client_pid = ctx->query->clientInfo.clientPid;\n      info.request_id = ctx->query->request_id;\n      info.query = ctx->query->query_spec;\n      if (ctx->query->subscriptionName) {\n        info.subscription_name = ctx->query->subscriptionName;\n      }\n\n      query_info.push_back(std::move(info));\n    }\n  }\n\n  std::vector<w_string> cookiePrefix;\n  for (const auto& name : cookies.cookiePrefix()) {\n    // If cookiePrefix() returned a std::vector, we could move the string here.\n    cookiePrefix.push_back(name);\n  }\n\n  std::vector<w_string> cookieDirs;\n  for (const auto& dir : cookies.cookieDirs()) {\n    // If cookieDirs() returned a std::vector, we could move the string here.\n    cookieDirs.push_back(dir);\n  }\n\n  obj.path = root_path;\n  obj.fstype = fs_type;\n  obj.watcher = view_->getName();\n  obj.uptime =\n      std::chrono::duration_cast<std::chrono::seconds>(now - startTime).count();\n  obj.case_sensitive = case_sensitive == CaseSensitivity::CaseSensitive;\n  obj.cookie_prefix = cookiePrefix;\n  obj.cookie_dir = cookieDirs;\n  obj.cookie_list = cookie_array;\n  obj.recrawl_info = std::move(recrawl_info);\n  obj.queries = std::move(query_info);\n  obj.done_initial = inner.done_initial;\n  obj.cancelled = inner.cancelled;\n  obj.crawl_status = w_string{crawl_status.data(), crawl_status.size()};\n  obj.enable_parallel_crawl = enable_parallel_crawl;\n  return obj;\n}\n\njson_ref Root::triggerListToJson() const {\n  std::vector<json_ref> arr;\n  {\n    auto map = triggers.rlock();\n    for (const auto& it : *map) {\n      const auto& cmd = it.second;\n      arr.push_back(cmd->definition);\n    }\n  }\n\n  return json_array(std::move(arr));\n}\n\nvoid w_root_free_watched_roots() {\n  int last, interval;\n  time_t started;\n  std::vector<std::shared_ptr<Root>> roots;\n\n  // We want to cancel the list of roots, but need to be careful to avoid\n  // deadlock; make a copy of the set of roots under the lock...\n  {\n    auto map = watched_roots.rlock();\n    for (const auto& it : *map) {\n      roots.emplace_back(it.second);\n    }\n  }\n\n  // ... and cancel them outside of the lock\n  for (auto& root : roots) {\n    if (!root->cancel(\"main thread exiting\")) {\n      root->stopThreads(\"main thread exiting\");\n    }\n  }\n\n  // release them all so that we don't mess with the number of live_roots\n  // in the code below.\n  roots.clear();\n\n  last = live_roots;\n  time(&started);\n  logf(DBG, \"waiting for roots to cancel and go away {}\\n\", last);\n  interval = 100;\n  for (;;) {\n    auto current = live_roots.load();\n    if (current == 0) {\n      break;\n    }\n    if (time(nullptr) > started + 3) {\n      logf(ERR, \"{} roots were still live at exit\\n\", current);\n      break;\n    }\n    if (current != last) {\n      logf(DBG, \"waiting: {} live\\n\", current);\n      last = current;\n    }\n    /* sleep override */ std::this_thread::sleep_for(\n        std::chrono::microseconds(interval));\n    interval = std::min(interval * 2, 1000000);\n  }\n\n  logf(DBG, \"all roots are gone\\n\");\n}\n\n} // namespace watchman\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/root/watchlist.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/Synchronized.h>\n#include <atomic>\n#include <memory>\n#include <unordered_map>\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nnamespace watchman {\n\nclass Root;\n\nextern std::atomic<long> live_roots;\n\nextern folly::Synchronized<std::unordered_map<w_string, std::shared_ptr<Root>>>\n    watched_roots;\n\n// Given a filename, walk the current set of watches.\n// If a watch is a prefix match for filename then we consider it to\n// be an enclosing watch and we'll return the root path and the relative\n// path to filename.\n// Returns NULL if there were no matches.\n// If multiple watches have the same prefix, it is undefined which one will\n// match.\nbool findEnclosingRoot(\n    const w_string& fileName,\n    w_string_piece& prefix,\n    w_string_piece& relativePath);\n\nvoid w_root_free_watched_roots();\njson_ref w_root_stop_watch_all();\njson_ref w_root_watch_list_to_json();\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/.gitignore",
    "content": "*.bundle\n*.gem\n*.so\nGemfile.lock\nmkmf.log\nvendor\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/.rspec",
    "content": "--format documentation\n--color\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/Gemfile",
    "content": "source 'https://rubygems.org'\n\ngemspec\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/LICENSE.txt",
    "content": "Copyright (c) 2014-present Meta Platforms, Inc. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice,\n   this list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n * Neither the name Facebook nor the names of its contributors may be used to\n   endorse or promote products derived from this software without specific\n   prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/README.md",
    "content": "# RubyWatchman\n\nRubyWatchman is a gem that implements the [Watchman binary\nprotocol](https://facebook.github.io/watchman/docs/bser.html). It is\nimplemented in C for speed, and is much faster than talking to\n[Watchman](https://github.com/facebook/watchman) using the JSON protocol.\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'ruby-watchman'\n```\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install ruby-watchman\n\n## Usage\n\nThis example shows:\n\n1. Asking a running Watchman process for its local socket\n2. Checking with Watchman whether a given path (in this case the current working\n   directory) is being watched\n3. Adding the path to the watch list if necessary\n4. Asking Watchman for the names of all files in the watch (files which exist,\n   or have existed since watching started), then printing them\n\n```ruby\nrequire 'ruby-watchman'\nrequire 'socket'\nrequire 'pathname'\n\nsockname = RubyWatchman.load(\n  %x{watchman --output-encoding=bser get-sockname}\n)['sockname']\nraise unless $?.exitstatus.zero?\n\nUNIXSocket.open(sockname) do |socket|\n  root = Pathname.new('.').realpath.to_s\n  roots = RubyWatchman.query(['watch-list'], socket)['roots']\n  if !roots.include?(root)\n    # this path isn't being watched yet; try to set up watch\n    result = RubyWatchman.query(['watch', root], socket)\n\n    # root_restrict_files setting may prevent Watchman from working\n    raise if result.has_key?('error')\n  end\n\n  query = ['query', root, {\n    'expression' => ['type', 'f'],\n    'fields'     => ['name'],\n  }]\n  paths = RubyWatchman.query(query, socket)\n\n  # could return error if watch is removed\n  raise if paths.has_key?('error')\n\n  p paths['files']\nend\n```\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/Rakefile",
    "content": "# Copyright (c) Meta Platforms, Inc. All Rights Reserved.\n\nrequire 'rubygems'\nrequire 'rake/clean'\nrequire 'rspec/core/rake_task'\nrequire File.expand_path('lib/ruby-watchman/version.rb', File.dirname(__FILE__))\n\nCLEAN.include Rake::FileList['*.gem', '**/*.so', '**/*.bundle', '**/*.o', '**/mkmf.log', '**/Makefile']\n\nRSpec::Core::RakeTask.new(:spec)\n\ntask :default => :all\n\ndesc 'Build and run specs'\ntask :all => [:make, :spec]\n\nfile 'ext/ruby-watchman/Makefile' => %w[\n  ext/ruby-watchman/depend\n  ext/ruby-watchman/extconf.rb\n] do\n  Dir.chdir('ext/ruby-watchman') { ruby './extconf.rb' }\nend\n\ndesc 'Build extension'\ntask :make => %w[\n  ext/ruby-watchman/Makefile\n  ext/ruby-watchman/watchman.c\n  ext/ruby-watchman/watchman.h\n] do\n  Dir.chdir('ext/ruby-watchman') { system 'make' }\nend\nEXT_FILE = \"ext/ruby-watchman/ext.#{RbConfig::CONFIG['DLEXT']}\"\nfile EXT_FILE => :make\n\nGEM_FILE_DEPENDENCIES = Dir[\n  'ext/ruby-watchman/**/*.{c,h,rb}',\n  'ext/ruby-watchman/depend',\n  'lib/**/*.rb',\n  'spec/**/*.rb'\n] + [EXT_FILE] # not actually included in gem, but we want to be sure it builds\n\nGEM_FILE = \"ruby-watchman-#{RubyWatchman::VERSION}.gem\"\n\nfile GEM_FILE => GEM_FILE_DEPENDENCIES do\n  system 'gem build ruby-watchman.gemspec'\nend\n\ndesc 'Build gem (\"gem build\")'\ntask :build => GEM_FILE\n\ndesc 'Publish gem (\"gem push\")'\ntask :push => :build do\n  system \"gem push #{GEM_FILE}\"\nend\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/ext/ruby-watchman/depend",
    "content": "# Copyright (c) Meta Platforms, Inc. All Rights Reserved.\n\nCFLAGS += -Wall -Wextra -Wno-unused-parameter\n\nwatchman.o: watchman.c watchman.h\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/ext/ruby-watchman/extconf.rb",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nrequire 'mkmf'\n\ndef header(item)\n  unless find_header(item)\n    puts \"couldn't find #{item} (required)\"\n    exit 1\n  end\nend\n\n# mandatory headers\nheader('ruby.h')\nheader('fcntl.h')\nheader('sys/errno.h')\nheader('sys/socket.h')\n\n# variable headers\nhave_header('ruby/st.h') # >= 1.9; sets HAVE_RUBY_ST_H\nhave_header('st.h')      # 1.8; sets HAVE_ST_H\n\nRbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']\n\ncreate_makefile('ruby-watchman/ext')\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/ext/ruby-watchman/watchman.c",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman.h\"\n\n#if defined(HAVE_RUBY_ST_H)\n#include <ruby/st.h>\n#elif defined(HAVE_ST_H)\n#include <st.h>\n#else\n#error no st.h header found\n#endif\n\n#include <fcntl.h> /* for fcntl() */\n#include <sys/errno.h> /* for errno */\n#include <sys/socket.h> /* for recv(), MSG_PEEK */\n\ntypedef struct {\n  uint8_t* data; // payload\n  size_t cap; // total capacity\n  size_t len; // current length\n} watchman_t;\n\n// Forward declarations:\nVALUE watchman_load(char** ptr, char* end);\nvoid watchman_dump(watchman_t* w, VALUE serializable);\n\n#define WATCHMAN_DEFAULT_STORAGE 4096\n\n#define WATCHMAN_BINARY_MARKER \"\\x00\\x01\"\n#define WATCHMAN_ARRAY_MARKER 0x00\n#define WATCHMAN_HASH_MARKER 0x01\n#define WATCHMAN_STRING_MARKER 0x02\n#define WATCHMAN_INT8_MARKER 0x03\n#define WATCHMAN_INT16_MARKER 0x04\n#define WATCHMAN_INT32_MARKER 0x05\n#define WATCHMAN_INT64_MARKER 0x06\n#define WATCHMAN_FLOAT_MARKER 0x07\n#define WATCHMAN_TRUE 0x08\n#define WATCHMAN_FALSE 0x09\n#define WATCHMAN_NIL 0x0a\n#define WATCHMAN_TEMPLATE_MARKER 0x0b\n#define WATCHMAN_SKIP_MARKER 0x0c\n\n#define WATCHMAN_HEADER  \\\n  WATCHMAN_BINARY_MARKER \\\n  \"\\x06\"                 \\\n  \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\"\n\nstatic const char watchman_array_marker = WATCHMAN_ARRAY_MARKER;\nstatic const char watchman_hash_marker = WATCHMAN_HASH_MARKER;\nstatic const char watchman_string_marker = WATCHMAN_STRING_MARKER;\nstatic const char watchman_true = WATCHMAN_TRUE;\nstatic const char watchman_false = WATCHMAN_FALSE;\nstatic const char watchman_nil = WATCHMAN_NIL;\n\n/**\n * Appends `len` bytes, starting at `data`, to the watchman_t struct `w`\n *\n * Will attempt to reallocate the underlying storage if it is not sufficient.\n */\nvoid watchman_append(watchman_t* w, const char* data, size_t len) {\n  if (w->len + len > w->cap) {\n    w->cap += w->len + WATCHMAN_DEFAULT_STORAGE;\n    REALLOC_N(w->data, uint8_t, w->cap);\n  }\n  memcpy(w->data + w->len, data, len);\n  w->len += len;\n}\n\n/**\n * Allocate a new watchman_t struct\n *\n * The struct has a small amount of extra capacity preallocated, and a blank\n * header that can be filled in later to describe the PDU.\n */\nwatchman_t* watchman_init() {\n  watchman_t* w = ALLOC(watchman_t);\n  w->cap = WATCHMAN_DEFAULT_STORAGE;\n  w->len = 0;\n  w->data = ALLOC_N(uint8_t, WATCHMAN_DEFAULT_STORAGE);\n\n  watchman_append(w, WATCHMAN_HEADER, sizeof(WATCHMAN_HEADER) - 1);\n  return w;\n}\n\n/**\n * Free a watchman_t struct `w` that was previously allocated with\n * `watchman_init`\n */\nvoid watchman_free(watchman_t* w) {\n  xfree(w->data);\n  xfree(w);\n}\n\n/**\n * Encodes and appends the integer `num` to `w`\n */\nvoid watchman_dump_int(watchman_t* w, int64_t num) {\n  char encoded[1 + sizeof(int64_t)];\n\n  if (num == (int8_t)num) {\n    encoded[0] = WATCHMAN_INT8_MARKER;\n    encoded[1] = (int8_t)num;\n    watchman_append(w, encoded, 1 + sizeof(int8_t));\n  } else if (num == (int16_t)num) {\n    encoded[0] = WATCHMAN_INT16_MARKER;\n    *(int16_t*)(encoded + 1) = (int16_t)num;\n    watchman_append(w, encoded, 1 + sizeof(int16_t));\n  } else if (num == (int32_t)num) {\n    encoded[0] = WATCHMAN_INT32_MARKER;\n    *(int32_t*)(encoded + 1) = (int32_t)num;\n    watchman_append(w, encoded, 1 + sizeof(int32_t));\n  } else {\n    encoded[0] = WATCHMAN_INT64_MARKER;\n    *(int64_t*)(encoded + 1) = (int64_t)num;\n    watchman_append(w, encoded, 1 + sizeof(int64_t));\n  }\n}\n\n/**\n * Encodes and appends the string `string` to `w`\n */\nvoid watchman_dump_string(watchman_t* w, VALUE string) {\n  watchman_append(w, &watchman_string_marker, sizeof(watchman_string_marker));\n  watchman_dump_int(w, RSTRING_LEN(string));\n  watchman_append(w, RSTRING_PTR(string), RSTRING_LEN(string));\n}\n\n/**\n * Encodes and appends the double `num` to `w`\n */\nvoid watchman_dump_double(watchman_t* w, double num) {\n  char encoded[1 + sizeof(double)];\n  encoded[0] = WATCHMAN_FLOAT_MARKER;\n  *(double*)(encoded + 1) = num;\n  watchman_append(w, encoded, sizeof(encoded));\n}\n\n/**\n * Encodes and appends the array `array` to `w`\n */\nvoid watchman_dump_array(watchman_t* w, VALUE array) {\n  long i;\n  watchman_append(w, &watchman_array_marker, sizeof(watchman_array_marker));\n  watchman_dump_int(w, RARRAY_LEN(array));\n  for (i = 0; i < RARRAY_LEN(array); i++) {\n    watchman_dump(w, rb_ary_entry(array, i));\n  }\n}\n\n/**\n * Helper method that encodes and appends a key/value pair (`key`, `value`) from\n * a hash to the watchman_t struct passed in via `data`\n */\nint watchman_dump_hash_iterator(VALUE key, VALUE value, VALUE data) {\n  watchman_t* w = (watchman_t*)data;\n  watchman_dump_string(w, StringValue(key));\n  watchman_dump(w, value);\n  return ST_CONTINUE;\n}\n\n/**\n * Encodes and appends the hash `hash` to `w`\n */\nvoid watchman_dump_hash(watchman_t* w, VALUE hash) {\n  watchman_append(w, &watchman_hash_marker, sizeof(watchman_hash_marker));\n  watchman_dump_int(w, RHASH_SIZE(hash));\n  rb_hash_foreach(hash, watchman_dump_hash_iterator, (VALUE)w);\n}\n\n/**\n * Encodes and appends the serialized Ruby object `serializable` to `w`\n *\n * Examples of serializable objects include arrays, hashes, strings, numbers\n * (integers, floats), booleans, and nil.\n */\nvoid watchman_dump(watchman_t* w, VALUE serializable) {\n  switch (TYPE(serializable)) {\n    case T_ARRAY:\n      return watchman_dump_array(w, serializable);\n    case T_HASH:\n      return watchman_dump_hash(w, serializable);\n    case T_STRING:\n      return watchman_dump_string(w, serializable);\n    case T_FIXNUM: // up to 63 bits\n      return watchman_dump_int(w, FIX2LONG(serializable));\n    case T_BIGNUM:\n      return watchman_dump_int(w, NUM2LL(serializable));\n    case T_FLOAT:\n      return watchman_dump_double(w, NUM2DBL(serializable));\n    case T_TRUE:\n      return watchman_append(w, &watchman_true, sizeof(watchman_true));\n    case T_FALSE:\n      return watchman_append(w, &watchman_false, sizeof(watchman_false));\n    case T_NIL:\n      return watchman_append(w, &watchman_nil, sizeof(watchman_nil));\n    default:\n      rb_raise(rb_eTypeError, \"unsupported type\");\n  }\n}\n\n/**\n * Extract and return the int encoded at `ptr`\n *\n * Moves `ptr` past the extracted int.\n *\n * Will raise an ArgumentError if extracting the int would take us beyond the\n * end of the buffer indicated by `end`, or if there is no int encoded at `ptr`.\n *\n * @returns The extracted int\n */\nint64_t watchman_load_int(char** ptr, char* end) {\n  char* val_ptr = *ptr + sizeof(int8_t);\n  int64_t val = 0;\n\n  if (val_ptr >= end) {\n    rb_raise(rb_eArgError, \"insufficient int storage\");\n  }\n\n  switch (*ptr[0]) {\n    case WATCHMAN_INT8_MARKER:\n      if (val_ptr + sizeof(int8_t) > end) {\n        rb_raise(rb_eArgError, \"overrun extracting int8_t\");\n      }\n      val = *(int8_t*)val_ptr;\n      *ptr = val_ptr + sizeof(int8_t);\n      break;\n    case WATCHMAN_INT16_MARKER:\n      if (val_ptr + sizeof(int16_t) > end) {\n        rb_raise(rb_eArgError, \"overrun extracting int16_t\");\n      }\n      val = *(int16_t*)val_ptr;\n      *ptr = val_ptr + sizeof(int16_t);\n      break;\n    case WATCHMAN_INT32_MARKER:\n      if (val_ptr + sizeof(int32_t) > end) {\n        rb_raise(rb_eArgError, \"overrun extracting int32_t\");\n      }\n      val = *(int32_t*)val_ptr;\n      *ptr = val_ptr + sizeof(int32_t);\n      break;\n    case WATCHMAN_INT64_MARKER:\n      if (val_ptr + sizeof(int64_t) > end) {\n        rb_raise(rb_eArgError, \"overrun extracting int64_t\");\n      }\n      val = *(int64_t*)val_ptr;\n      *ptr = val_ptr + sizeof(int64_t);\n      break;\n    default:\n      rb_raise(\n          rb_eArgError, \"bad integer marker 0x%02x\", (unsigned int)*ptr[0]);\n      break;\n  }\n\n  return val;\n}\n\n/**\n * Reads and returns a string encoded in the Watchman binary protocol format,\n * starting at `ptr` and finishing at or before `end`\n */\nVALUE watchman_load_string(char** ptr, char* end) {\n  if (*ptr >= end) {\n    rb_raise(rb_eArgError, \"unexpected end of input\");\n  }\n\n  if (*ptr[0] != WATCHMAN_STRING_MARKER) {\n    rb_raise(rb_eArgError, \"not a number\");\n  }\n\n  *ptr += sizeof(int8_t);\n  if (*ptr >= end) {\n    rb_raise(rb_eArgError, \"invalid string header\");\n  }\n\n  int64_t len = watchman_load_int(ptr, end);\n  if (len == 0) { // special case for zero-length strings\n    return rb_str_new2(\"\");\n  } else if (*ptr + len > end) {\n    rb_raise(rb_eArgError, \"insufficient string storage\");\n  }\n\n  VALUE string = rb_str_new(*ptr, len);\n  *ptr += len;\n  return string;\n}\n\n/**\n * Reads and returns a double encoded in the Watchman binary protocol format,\n * starting at `ptr` and finishing at or before `end`\n */\ndouble watchman_load_double(char** ptr, char* end) {\n  *ptr += sizeof(int8_t); // caller has already verified the marker\n  if (*ptr + sizeof(double) > end) {\n    rb_raise(rb_eArgError, \"insufficient double storage\");\n  }\n  double val = *(double*)*ptr;\n  *ptr += sizeof(double);\n  return val;\n}\n\n/**\n * Helper method which returns length of the array encoded in the Watchman\n * binary protocol format, starting at `ptr` and finishing at or before `end`\n */\nint64_t watchman_load_array_header(char** ptr, char* end) {\n  if (*ptr >= end) {\n    rb_raise(rb_eArgError, \"unexpected end of input\");\n  }\n\n  // verify and consume marker\n  if (*ptr[0] != WATCHMAN_ARRAY_MARKER) {\n    rb_raise(rb_eArgError, \"not an array\");\n  }\n  *ptr += sizeof(int8_t);\n\n  // expect a count\n  if (*ptr + sizeof(int8_t) * 2 > end) {\n    rb_raise(rb_eArgError, \"incomplete array header\");\n  }\n  return watchman_load_int(ptr, end);\n}\n\n/**\n * Reads and returns an array encoded in the Watchman binary protocol format,\n * starting at `ptr` and finishing at or before `end`\n */\nVALUE watchman_load_array(char** ptr, char* end) {\n  int64_t count, i;\n  VALUE array;\n\n  count = watchman_load_array_header(ptr, end);\n  array = rb_ary_new2(count);\n\n  for (i = 0; i < count; i++) {\n    rb_ary_push(array, watchman_load(ptr, end));\n  }\n\n  return array;\n}\n\n/**\n * Reads and returns a hash encoded in the Watchman binary protocol format,\n * starting at `ptr` and finishing at or before `end`\n */\nVALUE watchman_load_hash(char** ptr, char* end) {\n  int64_t count, i;\n  VALUE hash, key, value;\n\n  *ptr += sizeof(int8_t); // caller has already verified the marker\n\n  // expect a count\n  if (*ptr + sizeof(int8_t) * 2 > end) {\n    rb_raise(rb_eArgError, \"incomplete hash header\");\n  }\n  count = watchman_load_int(ptr, end);\n\n  hash = rb_hash_new();\n\n  for (i = 0; i < count; i++) {\n    key = watchman_load_string(ptr, end);\n    value = watchman_load(ptr, end);\n    rb_hash_aset(hash, key, value);\n  }\n\n  return hash;\n}\n\n/**\n * Reads and returns a templated array encoded in the Watchman binary protocol\n * format, starting at `ptr` and finishing at or before `end`\n *\n * Templated arrays are arrays of hashes which have repetitive key information\n * pulled out into a separate \"headers\" prefix.\n *\n * @see https://facebook.github.io/watchman/docs/bser.html\n */\nVALUE watchman_load_template(char** ptr, char* end) {\n  int64_t header_items_count, i, row_count;\n  VALUE array, hash, header, key, value;\n\n  *ptr += sizeof(int8_t); // caller has already verified the marker\n\n  // process template header array\n  header_items_count = watchman_load_array_header(ptr, end);\n  header = rb_ary_new2(header_items_count);\n  for (i = 0; i < header_items_count; i++) {\n    rb_ary_push(header, watchman_load_string(ptr, end));\n  }\n\n  // process row items\n  row_count = watchman_load_int(ptr, end);\n  array = rb_ary_new2(header_items_count);\n  while (row_count--) {\n    hash = rb_hash_new();\n    for (i = 0; i < header_items_count; i++) {\n      if (*ptr >= end) {\n        rb_raise(rb_eArgError, \"unexpected end of input\");\n      }\n\n      if (*ptr[0] == WATCHMAN_SKIP_MARKER) {\n        *ptr += sizeof(uint8_t);\n      } else {\n        value = watchman_load(ptr, end);\n        key = rb_ary_entry(header, i);\n        rb_hash_aset(hash, key, value);\n      }\n    }\n    rb_ary_push(array, hash);\n  }\n  return array;\n}\n\n/**\n * Reads and returns an object encoded in the Watchman binary protocol format,\n * starting at `ptr` and finishing at or before `end`\n */\nVALUE watchman_load(char** ptr, char* end) {\n  if (*ptr >= end) {\n    rb_raise(rb_eArgError, \"unexpected end of input\");\n  }\n\n  switch (*ptr[0]) {\n    case WATCHMAN_ARRAY_MARKER:\n      return watchman_load_array(ptr, end);\n    case WATCHMAN_HASH_MARKER:\n      return watchman_load_hash(ptr, end);\n    case WATCHMAN_STRING_MARKER:\n      return watchman_load_string(ptr, end);\n    case WATCHMAN_INT8_MARKER:\n    case WATCHMAN_INT16_MARKER:\n    case WATCHMAN_INT32_MARKER:\n    case WATCHMAN_INT64_MARKER:\n      return LL2NUM(watchman_load_int(ptr, end));\n    case WATCHMAN_FLOAT_MARKER:\n      return rb_float_new(watchman_load_double(ptr, end));\n    case WATCHMAN_TRUE:\n      *ptr += 1;\n      return Qtrue;\n    case WATCHMAN_FALSE:\n      *ptr += 1;\n      return Qfalse;\n    case WATCHMAN_NIL:\n      *ptr += 1;\n      return Qnil;\n    case WATCHMAN_TEMPLATE_MARKER:\n      return watchman_load_template(ptr, end);\n    default:\n      rb_raise(rb_eTypeError, \"unsupported type\");\n  }\n\n  return Qnil; // keep the compiler happy\n}\n\n/**\n * RubyWatchman.load(serialized)\n *\n * Converts the binary object, `serialized`, from the Watchman binary protocol\n * format into a normal Ruby object.\n */\nVALUE RubyWatchman_load(VALUE self, VALUE serialized) {\n  serialized = StringValue(serialized);\n  long len = RSTRING_LEN(serialized);\n  char* ptr = RSTRING_PTR(serialized);\n  char* end = ptr + len;\n\n  // expect at least the binary marker and a int8_t length counter\n  if ((size_t)len < sizeof(WATCHMAN_BINARY_MARKER) - 1 + sizeof(int8_t) * 2) {\n    rb_raise(rb_eArgError, \"undersized header\");\n  }\n\n  int mismatched =\n      memcmp(ptr, WATCHMAN_BINARY_MARKER, sizeof(WATCHMAN_BINARY_MARKER) - 1);\n  if (mismatched) {\n    rb_raise(rb_eArgError, \"missing binary marker\");\n  }\n\n  // get size marker\n  ptr += sizeof(WATCHMAN_BINARY_MARKER) - 1;\n  uint64_t payload_size = watchman_load_int(&ptr, end);\n  if (!payload_size) {\n    rb_raise(rb_eArgError, \"empty payload\");\n  }\n\n  // sanity check length\n  if (ptr + payload_size != end) {\n    rb_raise(\n        rb_eArgError,\n        \"payload size mismatch (%lu)\",\n        (unsigned long)(end - (ptr + payload_size)));\n  }\n\n  VALUE loaded = watchman_load(&ptr, end);\n\n  // one more sanity check\n  if (ptr != end) {\n    rb_raise(\n        rb_eArgError,\n        \"payload termination mismatch (%lu)\",\n        (unsigned long)(end - ptr));\n  }\n\n  return loaded;\n}\n\n/**\n * RubyWatchman.dump(serializable)\n *\n * Converts the Ruby object, `serializable`, into a binary string in the\n * Watchman binary protocol format.\n *\n * Examples of serializable objects include arrays, hashes, strings, numbers\n * (integers, floats), booleans, and nil.\n */\nVALUE RubyWatchman_dump(VALUE self, VALUE serializable) {\n  watchman_t* w = watchman_init();\n  watchman_dump(w, serializable);\n\n  // update header with final length information\n  uint64_t* len =\n      (uint64_t*)(w->data + sizeof(WATCHMAN_HEADER) - sizeof(uint64_t) - 1);\n  *len = w->len - sizeof(WATCHMAN_HEADER) + 1;\n\n  // prepare final return value\n  VALUE serialized = rb_str_buf_new(w->len);\n  rb_str_buf_cat(serialized, (const char*)w->data, w->len);\n  watchman_free(w);\n  return serialized;\n}\n\n// How far we have to look to figure out the size of the PDU header\n#define WATCHMAN_SNIFF_BUFFER_SIZE \\\n  sizeof(WATCHMAN_BINARY_MARKER) - 1 + sizeof(int8_t)\n\n// How far we have to peek, at most, to figure out the size of the PDU itself\n#define WATCHMAN_PEEK_BUFFER_SIZE                                      \\\n  sizeof(WATCHMAN_BINARY_MARKER) - 1 + sizeof(WATCHMAN_INT64_MARKER) + \\\n      sizeof(int64_t)\n\n/**\n * RubyWatchman.query(query, socket)\n *\n * Converts `query`, a Watchman query comprising Ruby objects, into the Watchman\n * binary protocol format, transmits it over socket, and unserializes and\n * returns the result.\n */\nVALUE RubyWatchman_query(VALUE self, VALUE query, VALUE socket) {\n  VALUE error = Qnil;\n  VALUE errorClass = Qnil;\n  VALUE loaded = Qnil;\n  char* buffer = NULL;\n  int fileno = NUM2INT(rb_funcall(socket, rb_intern(\"fileno\"), 0));\n\n  // do blocking I/O to simplify the following logic\n  int flags = fcntl(fileno, F_GETFL);\n  if (!(flags & O_NONBLOCK) &&\n      fcntl(fileno, F_SETFL, flags & ~O_NONBLOCK) == -1) {\n    error = rb_str_new2(\"unable to clear O_NONBLOCK flag\");\n    goto cleanup;\n  }\n\n  // send the message\n  VALUE serialized = RubyWatchman_dump(self, query);\n  long query_len = RSTRING_LEN(serialized);\n  ssize_t sent = send(fileno, RSTRING_PTR(serialized), query_len, 0);\n  if (sent == -1) {\n    goto system_call_fail;\n  } else if (sent != query_len) {\n    error = rb_str_new2(\"sent byte count mismatch\");\n    goto cleanup;\n  }\n\n  // sniff to see how large the header is\n  int8_t peek[WATCHMAN_PEEK_BUFFER_SIZE];\n  ssize_t received =\n      recv(fileno, peek, WATCHMAN_SNIFF_BUFFER_SIZE, MSG_PEEK | MSG_WAITALL);\n  if (received == -1) {\n    goto system_call_fail;\n  } else if (received != WATCHMAN_SNIFF_BUFFER_SIZE) {\n    error = rb_str_new2(\"failed to sniff PDU header\");\n    goto cleanup;\n  }\n\n  // peek at size of PDU\n  int8_t sizes[] = {0, 0, 0, 1, 2, 4, 8};\n  int8_t sizes_idx = peek[sizeof(WATCHMAN_BINARY_MARKER) - 1];\n  if (sizes_idx < WATCHMAN_INT8_MARKER || sizes_idx > WATCHMAN_INT64_MARKER) {\n    error = rb_str_new2(\"bad PDU size marker\");\n    goto cleanup;\n  }\n  ssize_t peek_size =\n      sizeof(WATCHMAN_BINARY_MARKER) - 1 + sizeof(int8_t) + sizes[sizes_idx];\n\n  received = recv(fileno, peek, peek_size, MSG_PEEK);\n  if (received == -1) {\n    goto system_call_fail;\n  } else if (received != peek_size) {\n    error = rb_str_new2(\"failed to peek at PDU header\");\n    goto cleanup;\n  }\n  int8_t* pdu_size_ptr = peek + sizeof(WATCHMAN_BINARY_MARKER) - sizeof(int8_t);\n  int64_t payload_size = peek_size +\n      watchman_load_int((char**)&pdu_size_ptr, (char*)peek + peek_size);\n\n  // actually read the PDU\n  buffer = xmalloc(payload_size);\n  if (!buffer) {\n    errorClass = rb_eNoMemError;\n    error = rb_str_new2(\"failed to allocate\");\n    goto cleanup;\n  }\n  received = recv(fileno, buffer, payload_size, MSG_WAITALL);\n  if (received == -1) {\n    goto system_call_fail;\n  } else if (received != payload_size) {\n    error = rb_str_new2(\"failed to load PDU\");\n    goto cleanup;\n  }\n\n  if (!(flags & O_NONBLOCK) && fcntl(fileno, F_SETFL, flags) == -1) {\n    error = rb_str_new2(\"unable to restore fnctl flags\");\n    goto cleanup;\n  }\n\n  char* payload = buffer + peek_size;\n  loaded = watchman_load(&payload, payload + payload_size);\n  goto cleanup;\n\nsystem_call_fail:\n  errorClass = rb_eSystemCallError;\n  error = INT2FIX(errno);\n\ncleanup:\n  if (buffer) {\n    xfree(buffer);\n  }\n\n  if (!(flags & O_NONBLOCK) && fcntl(fileno, F_SETFL, flags) == -1) {\n    rb_raise(rb_eRuntimeError, \"unable to restore fnctl flags\");\n  }\n\n  if (NIL_P(errorClass)) {\n    errorClass = rb_eRuntimeError;\n  }\n\n  if (!NIL_P(error)) {\n    rb_exc_raise(rb_class_new_instance(1, &error, errorClass));\n  }\n\n  return loaded;\n}\n\nVALUE mRubyWatchman = 0; // module RubyWatchman\n\nvoid Init_ext() {\n  mRubyWatchman = rb_define_module(\"RubyWatchman\");\n  rb_define_singleton_method(mRubyWatchman, \"load\", RubyWatchman_load, 1);\n  rb_define_singleton_method(mRubyWatchman, \"dump\", RubyWatchman_dump, 1);\n  rb_define_singleton_method(mRubyWatchman, \"query\", RubyWatchman_query, 2);\n}\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/lib/ruby-watchman/version.rb",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nmodule RubyWatchman\n  VERSION = '0.0.2'\nend\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/lib/ruby-watchman.rb",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nrequire 'ruby-watchman/ext'\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/ruby-watchman.gemspec",
    "content": "# Copyright (c) Meta Platforms, Inc. All Rights Reserved.\n\nlib = File.expand_path('../lib', __FILE__)\n$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)\nrequire 'ruby-watchman/version'\n\nGem::Specification.new do |s|\n  s.name          = 'ruby-watchman'\n  s.version       = RubyWatchman::VERSION\n  s.authors       = ['Greg Hurrell']\n  s.email         = ['glh@fb.com']\n  s.summary       = 'Ruby implementation of Watchman binary protocol'\n  s.description   = <<-DESC.gsub(/^\\s+/, '')\n    A fast implementation of the Watchman binary protocol written in C.\n  DESC\n  s.homepage      = 'https://github.com/facebook/watchman/tree/main/ruby/ruby-watchman'\n  s.license       = 'BSD'\n  s.extensions    = 'ext/ruby-watchman/extconf.rb'\n\n  s.files         = Dir[\n    'ext/ruby-watchman/**/*.{c,h,rb}',\n    'ext/ruby-watchman/depend',\n    'lib/**/*.rb',\n    'spec/**/*.rb'\n  ]\n  s.test_files    = s.files.grep(%r{^spec/})\n  s.require_paths = %w[lib]\n\n  s.add_development_dependency 'bundler', '~> 1.5'\n  s.add_development_dependency 'rake'\n  s.add_development_dependency 'rspec', '3.0.0'\nend\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/spec/ruby_watchman_spec.rb",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nrequire 'spec_helper'\n\ndescribe RubyWatchman do\n  def binary(str)\n    if str.respond_to?(:force_encoding) # Ruby >= 1.9\n      str.force_encoding('ASCII-8BIT')\n    else\n      str\n    end\n  end\n\n  def little_endian?\n    byte = [0xff00].pack('s')[0]\n    if byte.is_a?(Fixnum) # ie. Ruby 1.8\n      byte.zero?\n    elsif byte.is_a?(String) # ie. Ruby >= 1.9\n      byte == \"\\x00\"\n    else\n      raise 'unable to determine endianness'\n    end\n  end\n\n  def roundtrip(value)\n    described_class.load(described_class.dump(value))\n  end\n\n  it 'roundtrips arrays' do\n    value = [1, 2, ['three', false]]\n    expect(roundtrip(value)).to eq(value)\n  end\n\n  it 'roundtrips hashes' do\n    value = {\n      'foo' => 1,\n      'bar' => {\n        'baz' => 'bing',\n      }\n    }\n    expect(roundtrip(value)).to eq(value)\n  end\n\n  it 'roundtrips strings' do\n    expect(roundtrip('')).to eq('')\n    expect(roundtrip('/foo/bar/baz')).to eq('/foo/bar/baz')\n  end\n\n  it 'roundtrips uint8_t integers' do\n    expect(roundtrip(0)).to eq(0)\n    expect(roundtrip(1)).to eq(1)\n    expect(roundtrip(0xff)).to eq(0xff)\n  end\n\n  it 'roundtrips uint16_t integers' do\n    expect(roundtrip(0x1234)).to eq(0x1234)\n  end\n\n  it 'roundtrips uint32_t integers' do\n    expect(roundtrip(0x12345678)).to eq(0x12345678)\n  end\n\n  it 'roundtrips uint64_t integers' do\n    expect(roundtrip(0x12345678abcdef00)).to eq(0x12345678abcdef00)\n  end\n\n  it 'roundtrips floats' do\n    expect(roundtrip(1234.5678)).to eq(1234.5678)\n  end\n\n  it 'roundtrips `true` booleans' do\n    expect(roundtrip(true)).to eq(true)\n  end\n\n  it 'roundtrips `false` booleans' do\n    expect(roundtrip(false)).to eq(false)\n  end\n\n  it 'roundtrips nil' do\n    expect(roundtrip(nil)).to be_nil\n  end\n\n  describe '.load' do\n    it 'rejects undersized input' do\n      expect { described_class.load('') }.\n        to raise_error(ArgumentError, /undersized/i)\n    end\n\n    it 'rejects input without a binary marker' do\n      expect { described_class.load('gibberish') }.\n        to raise_error(ArgumentError, /missing/i)\n    end\n\n    it 'rejects a missing payload header' do\n      # binary protocol marker, but nothing else\n      input = binary(\"\\x00\\x01\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /undersized/i)\n    end\n\n    it 'rejects empty payloads' do\n      # uint8_t size marker of zero\n      input = binary(\"\\x00\\x01\\x03\\x00\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /empty/i)\n    end\n\n    it 'rejects unrecognized payload markers' do\n      # 0x10 is not a valid integer marker\n      input = binary(\"\\x00\\x01\\x10\\x00\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /bad integer/i)\n    end\n\n    it 'rejects undersized payload markers' do\n      # int16_t marker, but only storage for int8_t\n      input = binary(\"\\x00\\x01\\x04\\x00\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /overrun\\b.+\\bint16_t/i)\n    end\n\n    it 'loads array values' do\n      input = binary(\n        \"\\x00\\x01\\x03\\x16\\x00\\x03\\x05\\x03\\x01\\x02\\x03\" \\\n        \"\\x06foobar\\x08\\x09\\x00\\x03\\x02\\x03\\x0a\\x0a\"\n      )\n      expect(described_class.load(input)).\n        to eq([1, 'foobar', true, false, [10, nil]])\n    end\n\n    it 'handles empty arrays' do\n      input = binary(\"\\x00\\x01\\x03\\x03\\x00\\x03\\x00\")\n      expect(described_class.load(input)).to eq([])\n    end\n\n    it 'rejects arrays with incomplete headers' do\n      input = binary(\"\\x00\\x01\\x03\\x02\\x00\\x03\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /incomplete array header/i)\n    end\n\n    it 'rejects arrays with incomplete entries' do\n      input = binary(\"\\x00\\x01\\x03\\x05\\x00\\x03\\x10\\x0a\\x0a\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /unexpected end/i)\n    end\n\n    it 'loads hash values' do\n      input = binary(\n        \"\\x00\\x01\\x03\\x1a\\x01\\x03\\x02\\x02\\x03\\x03foo\\x0a\" \\\n        \"\\x02\\x03\\x03bar\\x01\\x03\\x01\\x02\\x03\\x03baz\\x08\"\n      )\n      expected = {\n        'foo' => nil,\n        'bar' => {\n          'baz' => true,\n        }\n      }\n      expect(described_class.load(input)).to eq(expected)\n    end\n\n    it 'handles empty hashes' do\n      input = binary(\"\\x00\\x01\\x03\\x03\\x01\\x03\\x00\")\n      expect(described_class.load(input)).to eq({})\n    end\n\n    it 'rejects hashes with incomplete headers' do\n      input = binary(\"\\x00\\x01\\x03\\x02\\x01\\x03\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /incomplete hash header/i)\n    end\n\n    it 'rejects hashes with invalid keys' do\n      # keys must be strings; this one uses uses a number instead\n      input = binary(\"\\x00\\x01\\x03\\x05\\x01\\x03\\x01\\x03\\x00\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /not a number/i)\n    end\n\n    it 'rejects hashes with missing keys' do\n      input = binary(\"\\x00\\x01\\x03\\x03\\x01\\x03\\x01\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /unexpected end/i)\n    end\n\n    it 'rejects hashes with missing values' do\n      input = binary(\"\\x00\\x01\\x03\\x09\\x01\\x03\\x01\\x02\\x03\\x03foo\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /unexpected end/i)\n    end\n\n    it 'loads string values' do\n      input = binary(\"\\x00\\x01\\x03\\x06\\x02\\x03\\x03foo\")\n      expect(described_class.load(input)).to eq('foo')\n    end\n\n    it 'handles empty strings' do\n      input = binary(\"\\x00\\x01\\x03\\x03\\x02\\x03\\x00\")\n      expect(described_class.load(input)).to eq('')\n    end\n\n    if String.new.respond_to?(:encoding) # ie. Ruby >= 1.9\n      it 'loads string values as ASCII-8BIT encoded strings' do\n        input = binary(\"\\x00\\x01\\x03\\x06\\x02\\x03\\x03foo\")\n        expect(described_class.load(input).encoding.to_s).to eq('ASCII-8BIT')\n      end\n    end\n\n    it 'rejects string values with incomplete headers' do\n      input = binary(\"\\x00\\x01\\x03\\x01\\x02\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /invalid string header/i)\n    end\n\n    it 'rejects string values with invalid headers' do\n      # expect a number indicating the string length, get a boolean instead\n      input = binary(\"\\x00\\x01\\x03\\x05\\x02\\x08foo\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /bad integer/i)\n    end\n\n    it 'rejects string values with insufficient storage' do\n      # expect 3 bytes, get 2 instead\n      input = binary(\"\\x00\\x01\\x03\\x05\\x02\\x03\\x03fo\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /insufficient string storage/i)\n    end\n\n    it 'loads uint8_t values' do\n      input = binary(\"\\x00\\x01\\x03\\x02\\x03\\x12\")\n      expect(described_class.load(input)).to eq(0x12)\n    end\n\n    it 'loads uint16_t values' do\n      if little_endian?\n        input = binary(\"\\x00\\x01\\x03\\x03\\x04\\x34\\x12\")\n      else\n        input = binary(\"\\x00\\x01\\x03\\x03\\x04\\x12\\x34\")\n      end\n\n      expect(described_class.load(input)).to eq(0x1234)\n    end\n\n    it 'loads uint32_t values' do\n      if little_endian?\n        input = binary(\"\\x00\\x01\\x03\\x05\\x05\\x78\\x56\\x34\\x12\")\n      else\n        input = binary(\"\\x00\\x01\\x03\\x05\\x05\\x12\\x34\\x56\\x78\")\n      end\n\n      expect(described_class.load(input)).to eq(0x12345678)\n    end\n\n    it 'loads int uint64_t values' do\n      if little_endian?\n        input = binary(\"\\x00\\x01\\x03\\x09\\x06\\xef\\xcd\\xab\\x90\\x78\\x56\\x34\\x12\")\n      else\n        input = binary(\"\\x00\\x01\\x03\\x09\\x06\\x12\\x34\\x56\\x78\\x90\\xab\\xcd\\xef\")\n      end\n      expect(described_class.load(input)).to eq(0x1234567890abcdef)\n    end\n\n    it 'rejects int markers with missing values' do\n      # expect an integer, but hit the end of the buffer\n      input = binary(\"\\x00\\x01\\x03\\x01\\x05\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /insufficient int storage/i)\n    end\n\n    it 'rejects double markers with insufficient storage' do\n      # double with 7 bytes of storage instead of the required 8 bytes\n      input = binary(\"\\x00\\x01\\x03\\x08\\x07\\x00\\x00\\x00\\x00\\x00\\x00\\x00\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /insufficient double storage/i)\n    end\n\n    it 'loads boolean `true` values' do\n      input = binary(\"\\x00\\x01\\x03\\x01\\x08\")\n      expect(described_class.load(input)).to eq(true)\n    end\n\n    it 'loads boolean `false` values' do\n      input = binary(\"\\x00\\x01\\x03\\x01\\x09\")\n      expect(described_class.load(input)).to eq(false)\n    end\n\n    it 'loads nil' do\n      input = binary(\"\\x00\\x01\\x03\\x01\\x0a\")\n      expect(described_class.load(input)).to be_nil\n    end\n\n    it 'loads templates' do\n      # this example includes a \"skip\" marker\n      input = binary(\n        \"\\x00\\x01\\x03\\x28\\x0b\\x00\\x03\\x02\\x02\\x03\\x04name\" \\\n        \"\\x02\\x03\\x03age\\x03\\x03\\x02\\x03\\x04fred\\x03\" \\\n        \"\\x14\\x02\\x03\\x04pete\\x03\\x1e\\x0c\\x03\\x19\"\n      )\n      expected = [\n        { 'name' => 'fred', 'age' => 20 },\n        { 'name' => 'pete', 'age' => 30 },\n        { 'age' => 25  },\n      ]\n      expect(described_class.load(input)).to eq(expected)\n    end\n\n    it 'handles empty templates' do\n      input = binary(\n        \"\\x00\\x01\\x03\\x12\\x0b\\x00\\x03\\x02\\x02\" \\\n        \"\\x03\\x03foo\\x02\\x03\\x03bar\\x03\\x00\"\n      )\n      expect(described_class.load(input)).to eq([])\n    end\n\n    it 'rejects templates without a header array' do\n      input = binary(\"\\x00\\x01\\x03\\x01\\x0b\")\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /unexpected end/i)\n    end\n\n    it 'rejects templates without a row items array' do\n      input = binary(\n        \"\\x00\\x01\\x03\\x10\\x0b\\x00\\x03\\x02\\x02\" \\\n        \"\\x03\\x03foo\\x02\\x03\\x03bar\"\n      )\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /insufficient/i)\n    end\n\n    it 'rejects templates with non-string header items' do\n      input = binary(\n        \"\\x00\\x01\\x03\\x0e\\x0b\\x00\\x03\\x02\\x02\" \\\n        \"\\x03\\x03foo\\x03\\x03\\x03\\x00\"\n      )\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /not a number/)\n    end\n\n    it 'rejects templates with a header item array count mismatch' do\n      input = binary(\n        \"\\x00\\x01\\x03\\x0a\\x0b\\x00\\x03\\x02\\x02\" \\\n        \"\\x03\\x03foo\"\n      )\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /unexpected end/)\n    end\n\n    it 'rejects templates with a row item count mismatch' do\n      input = binary(\n        \"\\x00\\x01\\x03\\x25\\x0b\\x00\\x03\\x02\\x02\\x03\\x04name\" \\\n        \"\\x02\\x03\\x03age\\x03\\x03\\x02\\x03\\x04fred\\x03\" \\\n        \"\\x14\\x02\\x03\\x04pete\\x03\\x1e\"\n      )\n      expect { described_class.load(input) }.\n        to raise_error(ArgumentError, /unexpected end/)\n    end\n  end\n\n  describe '.dump' do\n    let(:query) do\n      # typical kind of query that Command-T issues\n      ['query', '/some/path', {\n        'expression' => ['type', 'f'],\n        'fields'     => ['name'],\n      }]\n    end\n\n    it 'serializes' do\n      expect { described_class.dump(query) }.to_not raise_error\n    end\n\n    if String.new.respond_to?(:encoding) # ie. Ruby >= 1.9\n      it 'serializes to an ASCII-8BIT string' do\n        expect(described_class.dump(query).encoding.to_s).to eq('ASCII-8BIT')\n      end\n    end\n\n    it 'generates a correct serialization' do\n      # in Ruby 1.8, hashes aren't ordered, so two serializations are possible\n      if little_endian?\n        expected = [\n          binary(\n            \"\\x00\\x01\\x06\\x49\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x02\\x03\" \\\n            \"\\x05query\\x02\\x03\\x0a/some/path\\x01\\x03\\x02\\x02\\x03\\x0a\" \\\n            \"expression\\x00\\x03\\x02\\x02\\x03\\x04type\\x02\\x03\\x01f\\x02\\x03\\x06\" \\\n            \"fields\\x00\\x03\\x01\\x02\\x03\\x04name\"\n          ),\n          binary(\n            \"\\x00\\x01\\x06\\x49\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x03\\x03\\x02\\x03\" \\\n            \"\\x05query\\x02\\x03\\x0a/some/path\\x01\\x03\\x02\\x02\\x03\\x06fields\" \\\n            \"\\x00\\x03\\x01\\x02\\x03\\x04name\\x02\\x03\\x0aexpression\\x00\\x03\\x02\" \\\n            \"\\x02\\x03\\x04type\\x02\\x03\\x01f\"\n          )\n        ]\n      else\n        expected = [\n          binary(\n            \"\\x00\\x01\\x06\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x49\\x00\\x03\\x03\\x02\\x03\" \\\n            \"\\x05query\\x02\\x03\\x0a/some/path\\x01\\x03\\x02\\x02\\x03\\x0a\" \\\n            \"expression\\x00\\x03\\x02\\x02\\x03\\x04type\\x02\\x03\\x01f\\x02\\x03\\x06\" \\\n            \"fields\\x00\\x03\\x01\\x02\\x03\\x04name\"\n          ),\n          binary(\n            \"\\x00\\x01\\x06\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x49\\x00\\x03\\x03\\x02\\x03\" \\\n            \"\\x05query\\x02\\x03\\x0a/some/path\\x01\\x03\\x02\\x02\\x03\\x06fields\" \\\n            \"\\x00\\x03\\x01\\x02\\x03\\x04name\\x02\\x03\\x0aexpression\\x00\\x03\\x02\" \\\n            \"\\x02\\x03\\x04type\\x02\\x03\\x01f\"\n          )\n        ]\n      end\n      expect(expected).to include(described_class.dump(query))\n    end\n  end\nend\n"
  },
  {
    "path": "watchman/ruby/ruby-watchman/spec/spec_helper.rb",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)\n$LOAD_PATH.unshift File.expand_path('../../ext', __FILE__)\nrequire 'ruby-watchman'\n"
  },
  {
    "path": "watchman/runtests.py",
    "content": "#!/usr/bin/env python3\n# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport argparse\nimport json\nimport math\nimport multiprocessing\nimport os\nimport os.path\nimport random\nimport shutil\nimport signal\nimport subprocess\nimport sys\nimport tempfile\nimport threading\nimport time\nimport traceback\nimport unittest\n\n\n# in the FB internal test infra, ensure that we are running from the\n# dir that houses this script rather than some other higher level dir\n# in the containing tree.  We can't use __file__ to determine this\n# because our PAR machinery can generate a name like /proc/self/fd/3/foo\n# which won't resolve to anything useful by the time we get here.\nif not os.path.exists(\"runtests.py\") and os.path.exists(\"watchman/runtests.py\"):\n    os.chdir(\"watchman\")\n\n# Ensure that we can find pywatchman and integration tests (if we're not the\n# main module, a wrapper is probably loading us up and we shouldn't screw around\n# with sys.path).\nif __name__ == \"__main__\":\n    sys.path.insert(0, os.path.join(os.getcwd(), \"python\"))\n    sys.path.insert(1, os.path.join(os.getcwd(), \"integration\"))\n    sys.path.insert(1, os.path.join(os.getcwd(), \"integration\", \"facebook\"))\n\n\n# Only Python 3.5+ supports native asyncio\nhas_asyncio = sys.version_info >= (3, 5)\nif has_asyncio:\n    sys.path.insert(0, os.path.join(os.getcwd(), \"tests\", \"async\"))\n    import asyncio\n\ntry:\n    import queue\nexcept Exception:\n    import Queue\n\n    queue = Queue\n\nparser = argparse.ArgumentParser(\n    description=\"Run the watchman unit and integration tests\"\n)\nparser.add_argument(\"-v\", \"--verbosity\", default=2, help=\"test runner verbosity\")\nparser.add_argument(\n    \"--keep\",\n    action=\"store_true\",\n    help=\"preserve all temporary files created during test execution\",\n)\nparser.add_argument(\n    \"--keep-if-fail\",\n    action=\"store_true\",\n    help=\"preserve all temporary files created during test execution if failed\",\n)\n\nparser.add_argument(\"files\", nargs=\"*\", help=\"specify which test files to run\")\n\nparser.add_argument(\n    \"--method\", action=\"append\", help=\"specify which python test method names to run\"\n)\n\n\ndef default_concurrency():\n    # Python 2.7 hangs when we use threads, so avoid it\n    # https://bugs.python.org/issue20318\n    if sys.version_info >= (3, 0):\n        level = min(4, math.ceil(1.5 * multiprocessing.cpu_count()))\n        if \"CIRCLECI\" in os.environ:\n            # Use fewer cores in circle CI because the inotify sysctls\n            # are pretty low, and we sometimes hit those limits.\n            level = level / 2\n        return int(level)\n\n    return 1\n\n\nparser.add_argument(\n    \"--concurrency\",\n    default=default_concurrency(),\n    type=int,\n    help=\"How many tests to run at once\",\n)\n\nparser.add_argument(\n    \"--watcher\",\n    action=\"store\",\n    default=\"auto\",\n    help=\"Specify which watcher should be used to run the tests\",\n)\n\nparser.add_argument(\n    \"--debug-watchman\",\n    action=\"store_true\",\n    help=\"Pauses start up and prints out the PID for watchman server process.\"\n    + \"Forces concurrency to 1.\",\n)\n\nparser.add_argument(\n    \"--watchman-path\", action=\"store\", help=\"Specify the path to the watchman binary\"\n)\n\nparser.add_argument(\n    \"--win7\", action=\"store_true\", help=\"Set env to force win7 compatibility tests\"\n)\n\nparser.add_argument(\n    \"--retry-flaky\",\n    action=\"store\",\n    type=int,\n    default=2,\n    help=\"How many additional times to retry flaky tests.\",\n)\n\nparser.add_argument(\n    \"--testpilot-json\",\n    action=\"store_true\",\n    help=\"Output test results in Test Pilot JSON format\",\n)\n\nparser.add_argument(\n    \"--pybuild-dir\",\n    action=\"store\",\n    help=\"For out-of-src-tree builds, where the generated python lives\",\n)\n\nargs = parser.parse_args()\n\nif args.pybuild_dir is not None:\n    sys.path.insert(0, os.path.realpath(args.pybuild_dir))\n\n# Import our local stuff after we've had a chance to look at args.pybuild_dir.\n# The `try` block prevents the imports from being reordered\ntry:\n    import Interrupt\n    import pywatchman\n    import TempDir\n    import WatchmanInstance\nexcept ImportError:\n    raise\n\n# We test for this in a test case\nos.environ[\"WATCHMAN_EMPTY_ENV_VAR\"] = \"\"\nos.environ[\"HGUSER\"] = \"John Smith <smith@example.com>\"\nos.environ[\"NOSCMLOG\"] = \"1\"\nos.environ[\"WATCHMAN_NO_SPAWN\"] = \"1\"\n\nif args.win7:\n    os.environ[\"WATCHMAN_WIN7_COMPAT\"] = \"1\"\n\n# Ensure that we find the watchman we built in the tests\nif args.watchman_path:\n    args.watchman_path = os.path.realpath(args.watchman_path)\n    bin_dir = os.path.dirname(args.watchman_path)\n    os.environ[\"WATCHMAN_BINARY\"] = args.watchman_path\nelse:\n    bin_dir = os.path.dirname(__file__)\n\nos.environ[\"PYWATCHMAN_PATH\"] = os.path.join(os.getcwd(), \"python\")\nos.environ[\"WATCHMAN_PYTHON_BIN\"] = os.path.abspath(\n    os.path.join(os.getcwd(), \"python\", \"bin\")\n)\nos.environ[\"PATH\"] = \"%s%s%s\" % (\n    os.path.abspath(bin_dir),\n    os.pathsep,\n    os.environ[\"PATH\"],\n)\n\n# We'll put all our temporary stuff under one dir so that we\n# can clean it all up at the end\ntemp_dir = TempDir.get_temp_dir(args.keep)\n\n\ndef interrupt_handler(signo, frame):\n    Interrupt.setInterrupted()\n\n\nsignal.signal(signal.SIGINT, interrupt_handler)\n\n\nclass Result(unittest.TestResult):\n    # Make it easier to spot success/failure by coloring the status\n    # green for pass, red for fail and yellow for skip.\n    # also print the elapsed time per test\n    transport = None\n    encoding = None\n    attempt = 0\n\n    def shouldStop(self):\n        if Interrupt.wasInterrupted():\n            return True\n        return super(Result, self).shouldStop()\n\n    def startTest(self, test):\n        self.startTime = time.time()\n        super(Result, self).startTest(test)\n\n    def addSuccess(self, test):\n        elapsed = time.time() - self.startTime\n        super(Result, self).addSuccess(test)\n        if args.testpilot_json:\n            print(\n                json.dumps(\n                    {\n                        \"op\": \"test_done\",\n                        \"status\": \"passed\",\n                        \"test\": test.id(),\n                        \"start_time\": self.startTime,\n                        \"end_time\": time.time(),\n                    }\n                )\n            )\n        else:\n            print(\n                \"\\033[32mPASS\\033[0m %s (%.3fs)%s\"\n                % (test.id(), elapsed, self._attempts())\n            )\n\n    def addSkip(self, test, reason):\n        elapsed = time.time() - self.startTime\n        super(Result, self).addSkip(test, reason)\n        if args.testpilot_json:\n            print(\n                json.dumps(\n                    {\n                        \"op\": \"test_done\",\n                        \"status\": \"skipped\",\n                        \"test\": test.id(),\n                        \"details\": reason,\n                        \"start_time\": self.startTime,\n                        \"end_time\": time.time(),\n                    }\n                )\n            )\n        else:\n            print(\"\\033[33mSKIP\\033[0m %s (%.3fs) %s\" % (test.id(), elapsed, reason))\n\n    def __printFail(self, test, err):\n        elapsed = time.time() - self.startTime\n        t, val, trace = err\n        if args.testpilot_json:\n            print(\n                json.dumps(\n                    {\n                        \"op\": \"test_done\",\n                        \"status\": \"failed\",\n                        \"test\": test.id(),\n                        \"details\": \"\".join(traceback.format_exception(t, val, trace)),\n                        \"start_time\": self.startTime,\n                        \"end_time\": time.time(),\n                    }\n                )\n            )\n        else:\n            print(\n                \"\\033[31mFAIL\\033[0m %s (%.3fs)%s\\n%s\"\n                % (\n                    test.id(),\n                    elapsed,\n                    self._attempts(),\n                    \"\".join(traceback.format_exception(t, val, trace)),\n                )\n            )\n\n    def addFailure(self, test, err):\n        self.__printFail(test, err)\n        super(Result, self).addFailure(test, err)\n\n    def addError(self, test, err):\n        self.__printFail(test, err)\n        super(Result, self).addError(test, err)\n\n    def setAttemptNumber(self, attempt):\n        self.attempt = attempt\n\n    def _attempts(self):\n        if self.attempt > 0:\n            return \" (%d attempts)\" % self.attempt\n        return \"\"\n\n\ndef expandFilesList(files):\n    \"\"\"expand any dir names into a full list of files\"\"\"\n    res = []\n    for g in args.files:\n        if os.path.isdir(g):\n            for dirname, _dirs, files in os.walk(g):\n                for f in files:\n                    if not f.startswith(\".\"):\n                        res.append(os.path.normpath(os.path.join(dirname, f)))\n        else:\n            res.append(os.path.normpath(g))\n    return res\n\n\nif args.files:\n    args.files = expandFilesList(args.files)\n\n\ndef shouldIncludeTestFile(filename):\n    \"\"\"used by our loader to respect the set of tests to run\"\"\"\n    global args\n    fname = os.path.relpath(filename.replace(\".pyc\", \".py\"))\n    if args.files:\n        for f in args.files:\n            if f == fname:\n                return True\n        return False\n\n    if args.method:\n        # implies python tests only\n        if not fname.endswith(\".py\"):\n            return False\n\n    return True\n\n\ndef shouldIncludeTestName(name):\n    \"\"\"used by our loader to respect the set of tests to run\"\"\"\n    global args\n    if args.method:\n        for f in args.method:\n            if f in name:\n                # the strict original interpretation of this flag\n                # was pretty difficult to use in practice, so we\n                # now also allow substring matches against the\n                # entire test name.\n                return True\n        return False\n    return True\n\n\nclass Loader(unittest.TestLoader):\n    \"\"\"allows us to control the subset of which tests are run\"\"\"\n\n    def __init__(self):\n        super(Loader, self).__init__()\n\n    def loadTestsFromTestCase(self, testCaseClass):\n        return super(Loader, self).loadTestsFromTestCase(testCaseClass)\n\n    def getTestCaseNames(self, testCaseClass):\n        names = super(Loader, self).getTestCaseNames(testCaseClass)\n        return filter(lambda name: shouldIncludeTestName(name), names)\n\n    def loadTestsFromModule(self, module, *args, **kw):\n        if not shouldIncludeTestFile(module.__file__):\n            return unittest.TestSuite()\n        return super(Loader, self).loadTestsFromModule(module, *args, **kw)\n\n\nloader = Loader()\nsuite = unittest.TestSuite()\n\ndirectories = [\"python/tests\", \"integration\"]\nfacebook_directory = \"integration/facebook\"\nif os.path.exists(facebook_directory):\n    # the facebook dir isn't sync'd to github, but it\n    # is present internally, so it should remain in this list\n    directories += [facebook_directory]\n\nif has_asyncio:\n    directories += [\"tests/async\"]\n\nfor d in directories:\n    suite.addTests(loader.discover(d, top_level_dir=d))\n\nif os.name == \"nt\":\n    t_globs = \"tests/*.exe\"\nelse:\n    t_globs = \"tests/*.t\"\n\ntls = threading.local()\n\n\n# Manage printing from concurrent threads\n# http://stackoverflow.com/a/3030755/149111\nclass ThreadSafeFile:\n    def __init__(self, f):\n        self.f = f\n        self.lock = threading.RLock()\n        self.nesting = 0\n\n    def _getlock(self):\n        self.lock.acquire()\n        self.nesting += 1\n\n    def _droplock(self):\n        nesting = self.nesting\n        self.nesting = 0\n        for _ in range(nesting):\n            self.lock.release()\n\n    def __getattr__(self, name):\n        if name == \"softspace\":\n            return tls.softspace\n        else:\n            raise AttributeError(name)\n\n    def __setattr__(self, name, value):\n        if name == \"softspace\":\n            tls.softspace = value\n        else:\n            return object.__setattr__(self, name, value)\n\n    def write(self, data):\n        self._getlock()\n        self.f.write(data)\n        if data == \"\\n\":\n            self._droplock()\n\n    def flush(self):\n        self._getlock()\n        self.f.flush()\n        self._droplock()\n\n\nsys.stdout = ThreadSafeFile(sys.stdout)\n\ntests_queue = queue.Queue()\nresults_queue = queue.Queue()\n\n\ndef runner():\n    global results_queue\n    global tests_queue\n\n    broken = False\n    try:\n        # Start up a shared watchman instance for the tests.\n        inst = WatchmanInstance.Instance(\n            {\"watcher\": args.watcher}, debug_watchman=args.debug_watchman\n        )\n        inst.start()\n        # Allow tests to locate this default instance\n        WatchmanInstance.setSharedInstance(inst)\n\n        if has_asyncio:\n            # Each thread will have its own event loop\n            asyncio.set_event_loop(asyncio.new_event_loop())\n\n    except Exception as e:\n        print(\"while starting watchman: %s\" % str(e))\n        traceback.print_exc()\n        broken = True\n\n    while not broken:\n        test = tests_queue.get()\n        try:\n            if test == \"terminate\":\n                break\n\n            if Interrupt.wasInterrupted() or broken:\n                continue\n\n            result = None\n            for attempt in range(0, args.retry_flaky + 1):\n                # Check liveness of the server\n                try:\n                    client = pywatchman.client(timeout=3.0, sockpath=inst.getSockPath())\n                    client.query(\"version\")\n                    client.close()\n                except Exception as exc:\n                    print(\n                        \"Failed to connect to watchman server: %s; starting a new one\"\n                        % exc\n                    )\n\n                    try:\n                        inst.stop()\n                    except Exception:\n                        pass\n\n                    try:\n                        inst = WatchmanInstance.Instance(\n                            {\"watcher\": args.watcher},\n                            debug_watchman=args.debug_watchman,\n                        )\n                        inst.start()\n                        # Allow tests to locate this default instance\n                        WatchmanInstance.setSharedInstance(inst)\n                    except Exception as e:\n                        print(\"while starting watchman: %s\" % str(e))\n                        traceback.print_exc()\n                        broken = True\n                        continue\n\n                try:\n                    result = Result()\n                    result.setAttemptNumber(attempt)\n\n                    if hasattr(test, \"setAttemptNumber\"):\n                        test.setAttemptNumber(attempt)\n\n                    test.run(result)\n\n                    if hasattr(test, \"setAttemptNumber\") and not result.wasSuccessful():\n                        # Facilitate retrying this possibly flaky test\n                        continue\n\n                    break\n                except Exception as e:\n                    print(e)\n\n                    if hasattr(test, \"setAttemptNumber\") and not result.wasSuccessful():\n                        # Facilitate retrying this possibly flaky test\n                        continue\n\n            if (\n                not result.wasSuccessful()\n                and \"TRAVIS\" in os.environ\n                and hasattr(test, \"dumpLogs\")\n            ):\n                test.dumpLogs()\n\n            results_queue.put(result)\n\n        finally:\n            tests_queue.task_done()\n\n    if not broken:\n        inst.stop()\n\n\ndef expand_suite(suite, target=None):\n    \"\"\"recursively expand a TestSuite into a list of TestCase\"\"\"\n    if target is None:\n        target = []\n    for test in suite:\n        if isinstance(test, unittest.TestSuite):\n            expand_suite(test, target)\n        else:\n            target.append(test)\n\n    # randomize both because we don't want tests to have relatively\n    # dependency ordering and also because this can help avoid clumping\n    # longer running tests together\n    random.shuffle(target)\n    return target\n\n\ndef queue_jobs(tests):\n    for test in tests:\n        tests_queue.put(test)\n\n\nall_tests = expand_suite(suite)\nif args.debug_watchman:\n    args.concurrency = 1\nelif len(all_tests) < args.concurrency:\n    args.concurrency = len(all_tests)\nqueue_jobs(all_tests)\n\nif args.concurrency > 1:\n    for _ in range(args.concurrency):\n        t = threading.Thread(target=runner)\n        t.daemon = True\n        t.start()\n        # also send a termination sentinel\n        tests_queue.put(\"terminate\")\n\n    # Wait for all tests to have been dispatched\n    tests_queue.join()\nelse:\n    # add a termination sentinel\n    tests_queue.put(\"terminate\")\n    runner()\n\n# Now pull out and aggregate the results\ntests_run = 0\ntests_failed = 0\ntests_skipped = 0\nwhile not results_queue.empty():\n    res = results_queue.get()\n    tests_run = tests_run + res.testsRun\n    tests_failed = tests_failed + len(res.errors) + len(res.failures)\n    tests_skipped = tests_skipped + len(res.skipped)\n\nif not args.testpilot_json:\n    print(\n        \"Ran %d, failed %d, skipped %d, concurrency %d\"\n        % (tests_run, tests_failed, tests_skipped, args.concurrency)\n    )\n\nif \"APPVEYOR\" in os.environ:\n    logdir = \"logs7\" if args.win7 else \"logs\"\n    logzip = \"%s.zip\" % logdir\n    shutil.copytree(tempfile.tempdir, logdir)\n    subprocess.call([\"7z\", \"a\", logzip, logdir])\n    subprocess.call([\"appveyor\", \"PushArtifact\", logzip])\n\nif \"CIRCLE_ARTIFACTS\" in os.environ:\n    print(\"Creating %s/logs.zip\" % os.environ[\"CIRCLE_ARTIFACTS\"])\n    subprocess.call(\n        [\n            \"zip\",\n            \"-q\",\n            \"-r\",\n            \"%s/logs.zip\" % os.environ[\"CIRCLE_ARTIFACTS\"],\n            temp_dir.get_dir(),\n        ]\n    )\n\nif tests_failed or (tests_run == 0):\n    if args.keep_if_fail:\n        temp_dir.set_keep(True)\n    if args.testpilot_json:\n        # When outputting JSON, our return code indicates if we successfully\n        # produced output or not, not whether the tests passed.  The JSON\n        # output contains the detailed test pass/failure information.\n        sys.exit(0)\n    sys.exit(1)\n"
  },
  {
    "path": "watchman/rust/.gitignore",
    "content": "*/Cargo.lock\n*/target/\n"
  },
  {
    "path": "watchman/rust/serde_bser/BUCK",
    "content": "load(\"@fbsource//tools/build_defs:rust_library.bzl\", \"rust_library\")\n\noncall(\"scm_client_infra\")\n\nrust_library(\n    name = \"serde_bser\",\n    srcs = glob([\"src/**/*.rs\"]),\n    preferred_linkage = \"static\",\n    test_deps = [\n        \"fbsource//third-party/rust:maplit\",\n    ],\n    deps = [\n        \"fbsource//third-party/rust:anyhow\",\n        \"fbsource//third-party/rust:byteorder\",\n        \"fbsource//third-party/rust:bytes\",\n        \"fbsource//third-party/rust:serde\",\n        \"fbsource//third-party/rust:serde_bytes\",\n        \"fbsource//third-party/rust:thiserror\",\n    ],\n)\n"
  },
  {
    "path": "watchman/rust/serde_bser/Cargo.toml",
    "content": "[package]\nname = \"serde_bser\"\nversion = \"0.4.0\"\nauthors = [\"Rain <rain1@fb.com>\", \"Wez Furlong\"]\nedition = \"2021\"\ndescription = \"Implements the Watchman BSER encoding for serde. https://facebook.github.io/watchman/docs/bser.html\"\ndocumentation = \"https://docs.rs/serde_bser\"\nrepository = \"https://github.com/facebook/watchman/\"\nlicense = \"MIT\"\n\n[dependencies]\nanyhow = \"1.0\"\nbyteorder = \"1.3\"\nbytes = { version = \"1.9\", features = [\"serde\"] }\nserde = { version = \"1.0.126\", features = [\"derive\", \"rc\"] }\nserde_bytes = \"0.11\"\nthiserror = \"2.0\"\n\n[dev-dependencies]\nmaplit = \"1.0\"\n\n[features]\ndebug_bytes = []\ndefault = []\n\n[lints.rust]\nunexpected_cfgs = { level = \"warn\", check-cfg = [\"cfg(fbcode_build)\"] }\n"
  },
  {
    "path": "watchman/rust/serde_bser/LICENSE",
    "content": "MIT License\n\nCopyright (c) Meta Platforms, Inc. and its affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "watchman/rust/serde_bser/README.md",
    "content": "# Work in Progress!\n\nThis is work in progress on a BSER implementation that is compatible\nwith serde.  It is not complete!  If you're reading this and want\nto help move it closer to completion, please don't be afraid to\nwork up a pull request!\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/bytestring.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::ffi::OsString;\nuse std::fmt::Write;\nuse std::path::PathBuf;\n\nuse serde::Deserialize;\nuse serde::Serialize;\n\n/// The ByteString type represents values encoded using BSER_BYTESTRING.\n/// The purpose of this encoding is to represent bytestrings with an arbitrary\n/// encoding.\n///\n/// In practice, as used by watchman, bytestrings have the filesystem encoding\n/// on posix systems (which is usually utf8 on linux, guaranteed utf8 on macos)\n/// and when they appear as file names in file results are guaranteed to be utf8\n/// on Windows systems.\n///\n/// When it comes to interoperating with Rust code, ByteString is nominally\n/// equivalent to `OsString`/`PathBuf` and is convertible to and from those values.\n///\n/// It is worth noting that on Windows sytems the conversion from ByteString to OsString is\n/// potentially lossy: while convention is that bytestring holds utf8 in the common case in\n/// watchman, that isn't enforced by its serializer and we may potentially encounter an error\n/// during conversion.  Converting from OsString to ByteString can potentially fail on windows\n/// because Watchman and thus ByteString doesn't have a way to represent the poorly formed\n/// surrogate pairs that Windows allows in its filenames.\n\n#[derive(Serialize, Deserialize, Clone, PartialEq, Eq)]\n#[serde(transparent)]\npub struct ByteString(#[serde(with = \"serde_bytes\")] Vec<u8>);\n\nimpl std::fmt::Debug for ByteString {\n    fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {\n        let escaped = self.as_escaped_string();\n        write!(fmt, \"\\\"{}\\\"\", escaped.escape_debug())\n    }\n}\n\nimpl std::fmt::Display for ByteString {\n    fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {\n        let escaped = self.as_escaped_string();\n        write!(fmt, \"\\\"{}\\\"\", escaped.escape_default())\n    }\n}\n\nimpl std::ops::Deref for ByteString {\n    type Target = [u8];\n\n    fn deref(&self) -> &[u8] {\n        &self.0\n    }\n}\n\nimpl std::ops::DerefMut for ByteString {\n    fn deref_mut(&mut self) -> &mut [u8] {\n        &mut self.0\n    }\n}\n\nimpl ByteString {\n    /// Returns the raw bytes as a slice.\n    pub fn as_bytes(&self) -> &[u8] {\n        self.0.as_slice()\n    }\n\n    /// Consumes ByteString yielding bytes.\n    pub fn into_bytes(self) -> Vec<u8> {\n        self.0\n    }\n\n    /// Returns a version of the bytestring encoded as a mostly-utf-8\n    /// string, with invalid sequences escaped using `\\xXX` hex notation.\n    /// This is for diagnostic and display purposes.\n    pub fn as_escaped_string(&self) -> String {\n        let mut input = self.0.as_slice();\n        let mut output = String::new();\n\n        loop {\n            match ::std::str::from_utf8(input) {\n                Ok(valid) => {\n                    output.push_str(valid);\n                    break;\n                }\n                Err(error) => {\n                    let (valid, after_valid) = input.split_at(error.valid_up_to());\n                    unsafe { output.push_str(::std::str::from_utf8_unchecked(valid)) }\n\n                    if let Some(invalid_sequence_length) = error.error_len() {\n                        for b in &after_valid[..invalid_sequence_length] {\n                            write!(output, \"\\\\x{:x}\", b).unwrap();\n                        }\n                        input = &after_valid[invalid_sequence_length..];\n                    } else {\n                        break;\n                    }\n                }\n            }\n        }\n\n        output\n    }\n}\n\n/// Guaranteed conversion from an owned byte vector to a ByteString\nimpl From<Vec<u8>> for ByteString {\n    fn from(vec: Vec<u8>) -> Self {\n        Self(vec)\n    }\n}\n\n/// Guaranteed conversion from a UTF-8 string to a ByteString\nimpl From<String> for ByteString {\n    fn from(s: String) -> Self {\n        Self(s.into_bytes())\n    }\n}\n\nimpl From<&str> for ByteString {\n    fn from(s: &str) -> Self {\n        Self(s.as_bytes().to_vec())\n    }\n}\n\n/// Attempt to convert a ByteString into a UTF-8 String\nimpl TryInto<String> for ByteString {\n    type Error = std::string::FromUtf8Error;\n\n    fn try_into(self) -> Result<String, Self::Error> {\n        String::from_utf8(self.0)\n    }\n}\n\n/// Conversion to OsString is guaranteed to succeed on unix systems\n/// but can potentially fail on Windows systems.\nimpl TryInto<OsString> for ByteString {\n    type Error = std::string::FromUtf8Error;\n\n    #[cfg(unix)]\n    fn try_into(self) -> Result<OsString, Self::Error> {\n        Ok(std::os::unix::ffi::OsStringExt::from_vec(self.0))\n    }\n\n    #[cfg(windows)]\n    fn try_into(self) -> Result<OsString, Self::Error> {\n        let s = String::from_utf8(self.0)?;\n        Ok(s.into())\n    }\n}\n\n/// Conversion to PathBuf is subject to the same rules as conversion\n/// to OsString\nimpl TryInto<PathBuf> for ByteString {\n    type Error = std::string::FromUtf8Error;\n\n    fn try_into(self) -> Result<PathBuf, Self::Error> {\n        let os: OsString = self.try_into()?;\n        Ok(os.into())\n    }\n}\n\n/// Conversion from OsString -> ByteString is guaranteed to succeed on unix\n/// systems but can potentially fail on Windows systems.\nimpl TryInto<ByteString> for OsString {\n    type Error = &'static str;\n\n    #[cfg(unix)]\n    fn try_into(self) -> Result<ByteString, Self::Error> {\n        Ok(ByteString(std::os::unix::ffi::OsStringExt::into_vec(self)))\n    }\n\n    #[cfg(windows)]\n    fn try_into(self) -> Result<ByteString, Self::Error> {\n        let s = self\n            .into_string()\n            .map_err(|_| \"OsString is not representible as UTF-8\")?;\n        Ok(ByteString(s.into_bytes()))\n    }\n}\n\n/// Conversion from PathBuf -> ByteString is subject to the same rules\n/// as conversion from OsString\nimpl TryInto<ByteString> for PathBuf {\n    type Error = &'static str;\n\n    fn try_into(self) -> Result<ByteString, Self::Error> {\n        self.into_os_string().try_into()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use super::ByteString;\n    use crate::from_slice;\n    use crate::ser::serialize;\n\n    #[test]\n    fn test_serde() {\n        let bs = ByteString::from(vec![1, 2, 3, 4]);\n\n        let out = serialize(Vec::<u8>::new(), &bs).unwrap();\n        assert_eq!(\n            out,\n            b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x03\\x07\\x02\\x03\\x04\\x01\\x02\\x03\\x04\"\n        );\n\n        let got: ByteString = from_slice(&out).unwrap();\n        assert_eq!(bs, got);\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/de/bunser.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! Internal stateless code for handling BSER deserialization.\n\nuse anyhow::Context as _;\nuse byteorder::ByteOrder;\nuse byteorder::NativeEndian;\n\nuse crate::de::read::DeRead;\nuse crate::de::read::Reference;\nuse crate::errors::*;\nuse crate::header::*;\n\n#[derive(Debug)]\npub struct Bunser<R> {\n    read: R,\n    scratch: Vec<u8>,\n}\n\npub struct PduInfo {\n    pub bser_capabilities: u32,\n    pub len: i64,\n    pub start: i64,\n}\n\nimpl<'de, R> Bunser<R>\nwhere\n    R: DeRead<'de>,\n{\n    pub fn new(read: R) -> Self {\n        Bunser {\n            read,\n            scratch: Vec::with_capacity(128),\n        }\n    }\n\n    /// Read the PDU off the stream. This should be called in the beginning.\n    pub fn read_pdu(&mut self) -> Result<PduInfo> {\n        {\n            let magic = self.read_bytes(2)?;\n            if magic.get_ref() != &EMPTY_HEADER[..2] {\n                return Err(Error::DeInvalidMagic {\n                    magic: Vec::from(magic.get_ref()),\n                });\n            }\n        }\n        let bser_capabilities = self\n            .read\n            .next_u32(&mut self.scratch)\n            .map_err(Error::de_reader_error)?;\n        let len = self.check_next_int()?;\n        let start = self.read_count();\n        Ok(PduInfo {\n            bser_capabilities,\n            len,\n            start,\n        })\n    }\n\n    pub fn read_count(&self) -> i64 {\n        self.read.read_count() as i64\n    }\n\n    pub fn end(&self, pdu_info: &PduInfo) -> Result<()> {\n        let expected = (pdu_info.start + pdu_info.len) as usize;\n        if self.read.read_count() != expected {\n            return Err(Error::DeEof {\n                expected,\n                read: self.read.read_count(),\n            });\n        }\n        Ok(())\n    }\n\n    #[inline]\n    pub fn peek(&mut self) -> Result<u8> {\n        self.read.peek().map_err(Error::de_reader_error)\n    }\n\n    #[inline]\n    pub fn discard(&mut self) {\n        self.read.discard();\n    }\n\n    /// Return a borrowed or copied version of the next n bytes.\n    #[inline]\n    pub fn read_bytes<'s>(&'s mut self, len: i64) -> Result<Reference<'de, 's, [u8]>> {\n        let len = len as usize;\n        self.read\n            .next_bytes(len, &mut self.scratch)\n            .map_err(Error::de_reader_error)\n    }\n\n    /// Return the next i8 value. This assumes the caller already knows the next\n    /// value is an i8.\n    pub fn next_i8(&mut self) -> Result<i8> {\n        self.read.discard();\n        let bytes = self\n            .read_bytes(1)\n            .context(\"error while reading i8\")\n            .map_err(Error::de_reader_error)?\n            .get_ref();\n        Ok(bytes[0] as i8)\n    }\n\n    /// Return the next i16 value. This assumes the caller already knows the\n    /// next value is an i16.\n    pub fn next_i16(&mut self) -> Result<i16> {\n        self.read.discard();\n        let bytes = self\n            .read_bytes(2)\n            .context(\"error while reading i16\")\n            .map_err(Error::de_reader_error)?\n            .get_ref();\n        Ok(NativeEndian::read_i16(bytes))\n    }\n\n    /// Return the next i32 value. This assumes the caller already knows the\n    /// next value is an i32.\n    pub fn next_i32(&mut self) -> Result<i32> {\n        self.read.discard();\n        let bytes = self\n            .read_bytes(4)\n            .context(\"error while reading i32\")\n            .map_err(Error::de_reader_error)?\n            .get_ref();\n        Ok(NativeEndian::read_i32(bytes))\n    }\n\n    /// Return the next i64 value. This assumes the caller already knows the\n    /// next value is an i64.\n    pub fn next_i64(&mut self) -> Result<i64> {\n        self.read.discard();\n        let bytes = self\n            .read_bytes(8)\n            .context(\"error while reading i64\")\n            .map_err(Error::de_reader_error)?\n            .get_ref();\n        Ok(NativeEndian::read_i64(bytes))\n    }\n\n    /// Check and return the next integer value. Errors out if the next value is\n    /// not actually an int.\n    pub fn check_next_int(&mut self) -> Result<i64> {\n        let value = match self.peek()? {\n            BSER_INT8 => self.next_i8()? as i64,\n            BSER_INT16 => self.next_i16()? as i64,\n            BSER_INT32 => self.next_i32()? as i64,\n            BSER_INT64 => self.next_i64()?,\n            ch => {\n                return Err(Error::DeInvalidStartByte {\n                    kind: \"integer\".into(),\n                    byte: ch,\n                });\n            }\n        };\n\n        Ok(value)\n    }\n\n    pub fn next_f64(&mut self) -> Result<f64> {\n        self.read.discard();\n        let bytes = self\n            .read_bytes(8)\n            .context(\"error while reading f64\")\n            .map_err(Error::de_reader_error)?\n            .get_ref();\n        Ok(NativeEndian::read_f64(bytes))\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/de/map.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse serde::de;\nuse serde::forward_to_deserialize_any;\n\nuse super::Deserializer;\nuse super::read::DeRead;\nuse super::reentrant::ReentrantGuard;\nuse crate::errors::*;\nuse crate::header::*;\n\npub struct MapAccess<'a, R> {\n    de: &'a mut Deserializer<R>,\n    remaining: usize,\n}\n\nimpl<'a, 'de, R> MapAccess<'a, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    /// Create a new `MapAccess`.\n    ///\n    /// `_guard` makes sure the caller is accounting for the recursion limit.\n    pub fn new(de: &'a mut Deserializer<R>, nitems: usize, _guard: &ReentrantGuard) -> Self {\n        MapAccess {\n            de,\n            remaining: nitems,\n        }\n    }\n}\n\nimpl<'a, 'de, R> de::MapAccess<'de> for MapAccess<'a, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    type Error = Error;\n\n    fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>>\n    where\n        K: de::DeserializeSeed<'de>,\n    {\n        if self.remaining == 0 {\n            Ok(None)\n        } else {\n            self.remaining -= 1;\n            let key = seed.deserialize(MapKey { de: &mut *self.de })?;\n            Ok(Some(key))\n        }\n    }\n\n    fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value>\n    where\n        V: de::DeserializeSeed<'de>,\n    {\n        seed.deserialize(&mut *self.de)\n    }\n}\n\n/// A deserializer that is specialized to deal with map keys. Specifically, map keys are always\n/// strings.\nstruct MapKey<'a, R> {\n    de: &'a mut Deserializer<R>,\n}\n\nimpl<'a, 'de, R> de::Deserializer<'de> for MapKey<'a, R>\nwhere\n    R: DeRead<'de>,\n{\n    type Error = Error;\n\n    #[inline]\n    fn deserialize_any<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        match self.de.bunser.peek()? {\n            // Both bytestrings and UTF-8 strings are treated as Unicode strings, since field\n            // identifiers must be Unicode strings.\n            BSER_BYTESTRING | BSER_UTF8STRING => self.de.visit_utf8string(visitor),\n            other => Err(Error::DeInvalidStartByte {\n                kind: \"map key\".into(),\n                byte: other,\n            }),\n        }\n    }\n\n    #[inline]\n    fn deserialize_option<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        // Map keys cannot be null.\n        visitor.visit_some(self)\n    }\n\n    #[inline]\n    fn deserialize_newtype_struct<V>(self, _name: &'static str, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        visitor.visit_newtype_struct(self)\n    }\n\n    #[inline]\n    fn deserialize_enum<V>(\n        self,\n        name: &'static str,\n        variants: &'static [&'static str],\n        visitor: V,\n    ) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        self.de.deserialize_enum(name, variants, visitor)\n    }\n\n    #[inline]\n    fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        self.de.deserialize_bytes(visitor)\n    }\n\n    #[inline]\n    fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        self.de.deserialize_bytes(visitor)\n    }\n\n    forward_to_deserialize_any! {\n        bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string unit unit_struct\n        seq tuple tuple_struct map struct identifier ignored_any\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/de/mod.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nmod bunser;\nmod map;\nmod read;\nmod reentrant;\nmod seq;\nmod template;\n#[cfg(test)]\nmod test;\nmod variant;\n\nuse std::io;\nuse std::str;\n\nuse serde::de;\nuse serde::forward_to_deserialize_any;\n\npub use self::bunser::Bunser;\npub use self::bunser::PduInfo;\npub use self::read::DeRead;\npub use self::read::Reference;\npub use self::read::SliceRead;\nuse self::reentrant::ReentrantLimit;\nuse crate::errors::*;\nuse crate::header::*;\n\npub struct Deserializer<R> {\n    bunser: Bunser<R>,\n    pdu_info: PduInfo,\n    remaining_depth: ReentrantLimit,\n}\n\nmacro_rules! make_visit_num {\n    ($fn:ident, $next:ident) => {\n        #[inline]\n        fn $fn<V>(&mut self, visitor: V) -> Result<V::Value>\n        where\n            V: de::Visitor<'de>,\n        {\n            visitor.$fn(self.bunser.$next()?)\n        }\n    };\n}\n\nfn from_trait<'de, R, T>(read: R) -> Result<T>\nwhere\n    R: DeRead<'de>,\n    T: de::Deserialize<'de>,\n{\n    let mut d = Deserializer::new(read)?;\n    let value = de::Deserialize::deserialize(&mut d)?;\n\n    // Make sure we saw the expected length.\n    d.end()?;\n    Ok(value)\n}\n\npub fn from_slice<'de, T>(slice: &'de [u8]) -> Result<T>\nwhere\n    T: de::Deserialize<'de>,\n{\n    from_trait(SliceRead::new(slice))\n}\n\npub fn from_reader<R, T>(rdr: R) -> Result<T>\nwhere\n    R: io::Read,\n    T: de::DeserializeOwned,\n{\n    from_trait(read::IoRead::new(rdr))\n}\n\nimpl<'de, R> Deserializer<R>\nwhere\n    R: DeRead<'de>,\n{\n    pub fn new(read: R) -> Result<Self> {\n        let mut bunser = Bunser::new(read);\n        let pdu_info = bunser.read_pdu()?;\n        Ok(Deserializer {\n            bunser,\n            pdu_info,\n            remaining_depth: ReentrantLimit::new(128),\n        })\n    }\n\n    /// This method must be called after a value has been fully deserialized.\n    pub fn end(&self) -> Result<()> {\n        self.bunser.end(&self.pdu_info)\n    }\n\n    #[inline]\n    pub fn capabilities(&self) -> u32 {\n        self.pdu_info.bser_capabilities\n    }\n\n    fn parse_value<V>(&mut self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        match self.bunser.peek()? {\n            BSER_ARRAY => {\n                let guard = self.remaining_depth.acquire(\"array\")?;\n                self.bunser.discard();\n                let nitems = self.bunser.check_next_int()?;\n\n                visitor.visit_seq(seq::SeqAccess::new(self, nitems as usize, &guard))\n            }\n            BSER_OBJECT => {\n                let guard = self.remaining_depth.acquire(\"object\")?;\n                self.bunser.discard();\n                let nitems = self.bunser.check_next_int()?;\n\n                visitor.visit_map(map::MapAccess::new(self, nitems as usize, &guard))\n            }\n            BSER_TRUE => self.visit_bool(visitor, true),\n            BSER_FALSE => self.visit_bool(visitor, false),\n            BSER_NULL => self.visit_unit(visitor),\n            BSER_BYTESTRING => self.visit_bytestring(visitor),\n            BSER_UTF8STRING => self.visit_utf8string(visitor),\n            BSER_TEMPLATE => {\n                let guard = self.remaining_depth.acquire(\"template\")?;\n                self.bunser.discard();\n\n                // TODO: handle possible IO interruption better here -- will\n                // probably need some intermediate states.\n                let keys = self.template_keys()?;\n                let nitems = self.bunser.check_next_int()?;\n                let template = template::Template::new(self, keys, nitems as usize, &guard);\n                visitor.visit_seq(template)\n            }\n            BSER_REAL => self.visit_f64(visitor),\n            BSER_INT8 => self.visit_i8(visitor),\n            BSER_INT16 => self.visit_i16(visitor),\n            BSER_INT32 => self.visit_i32(visitor),\n            BSER_INT64 => self.visit_i64(visitor),\n            ch => Err(Error::DeInvalidStartByte {\n                kind: \"next item\".into(),\n                byte: ch,\n            }),\n        }\n    }\n\n    make_visit_num!(visit_i8, next_i8);\n    make_visit_num!(visit_i16, next_i16);\n    make_visit_num!(visit_i32, next_i32);\n    make_visit_num!(visit_i64, next_i64);\n    make_visit_num!(visit_f64, next_f64);\n\n    fn template_keys(&mut self) -> Result<Vec<template::Key<'de>>> {\n        // The list of keys is actually an array, so just use the deserializer\n        // to process it.\n        de::Deserialize::deserialize(self)\n    }\n\n    fn visit_bytestring<V>(&mut self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        self.bunser.discard();\n        let len = self.bunser.check_next_int()?;\n        match self.bunser.read_bytes(len)? {\n            Reference::Borrowed(s) => visitor.visit_borrowed_bytes(s),\n            Reference::Copied(s) => visitor.visit_bytes(s),\n        }\n    }\n\n    fn visit_utf8string<V>(&mut self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        self.bunser.discard();\n        let len = self.bunser.check_next_int()?;\n        match self\n            .bunser\n            .read_bytes(len)?\n            .map_result(str::from_utf8)\n            .map_err(Error::de_reader_error)?\n        {\n            Reference::Borrowed(s) => visitor.visit_borrowed_str(s),\n            Reference::Copied(s) => visitor.visit_str(s),\n        }\n    }\n\n    #[inline]\n    fn visit_bool<V>(&mut self, visitor: V, value: bool) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        self.bunser.discard();\n        visitor.visit_bool(value)\n    }\n\n    #[inline]\n    fn visit_unit<V>(&mut self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        self.bunser.discard();\n        visitor.visit_unit()\n    }\n}\n\nimpl<'de, 'a, R> de::Deserializer<'de> for &'a mut Deserializer<R>\nwhere\n    R: DeRead<'de>,\n{\n    type Error = Error;\n\n    #[inline]\n    fn deserialize_any<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        self.parse_value(visitor)\n    }\n\n    /// Parse a `null` as a None, and anything else as a `Some(...)`.\n    #[inline]\n    fn deserialize_option<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        match self.bunser.peek()? {\n            BSER_NULL => {\n                self.bunser.discard();\n                visitor.visit_none()\n            }\n            _ => visitor.visit_some(self),\n        }\n    }\n\n    #[inline]\n    fn deserialize_newtype_struct<V>(self, _name: &str, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        // This is e.g. E(T). Ignore the E.\n        visitor.visit_newtype_struct(self)\n    }\n\n    /// Parse an enum as an object like {key: value}, or a unit variant as just\n    /// a value.\n    #[inline]\n    fn deserialize_enum<V>(\n        self,\n        name: &'static str,\n        _variants: &'static [&'static str],\n        visitor: V,\n    ) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        match self.bunser.peek()? {\n            BSER_BYTESTRING | BSER_UTF8STRING => {\n                visitor.visit_enum(variant::UnitVariantAccess::new(self))\n            }\n            BSER_OBJECT => {\n                let guard = self\n                    .remaining_depth\n                    .acquire(format!(\"object-like enum '{}'\", name))?;\n                self.bunser.discard();\n                // For enum variants the object must have exactly one entry\n                // (named the variant, but serde will perform that check).\n                let nitems = self.bunser.check_next_int()?;\n                if nitems != 1 {\n                    return Err(de::Error::invalid_value(\n                        de::Unexpected::Signed(nitems),\n                        &\"integer `1`\",\n                    ));\n                }\n                visitor.visit_enum(variant::VariantAccess::new(self, &guard))\n            }\n            ch => Err(Error::DeInvalidStartByte {\n                kind: format!(\"enum '{}'\", name),\n                byte: ch,\n            }),\n        }\n    }\n\n    forward_to_deserialize_any! {\n        bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes\n        byte_buf unit unit_struct seq tuple tuple_struct map struct identifier\n        ignored_any\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/de/read.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#[cfg(feature = \"debug_bytes\")]\nuse std::fmt;\nuse std::io;\nuse std::result;\n\nuse anyhow::Context as _;\nuse anyhow::bail;\nuse byteorder::ByteOrder;\nuse byteorder::NativeEndian;\n\n#[cfg(feature = \"debug_bytes\")]\nmacro_rules! debug_bytes {\n    ($($arg:tt)*) => {\n       eprint!($($arg)*);\n    }\n}\n\n#[cfg(not(feature = \"debug_bytes\"))]\nmacro_rules! debug_bytes {\n    ($($arg:tt)*) => {};\n}\n\n#[cfg(feature = \"debug_bytes\")]\nstruct ByteBuf<'a>(&'a [u8]);\n#[cfg(feature = \"debug_bytes\")]\nimpl<'a> fmt::LowerHex for ByteBuf<'a> {\n    fn fmt(&self, fmtr: &mut fmt::Formatter) -> result::Result<(), fmt::Error> {\n        for byte in self.0 {\n            let val = byte.clone();\n            if (val >= b'-' && val <= b'9')\n                || (val >= b'A' && val <= b'Z')\n                || (val >= b'a' && val <= b'z')\n                || val == b'_'\n            {\n                fmtr.write_fmt(format_args!(\"{}\", val as char))?;\n            } else {\n                fmtr.write_fmt(format_args!(r\"\\x{:02x}\", byte))?;\n            }\n        }\n        Ok(())\n    }\n}\n\npub trait DeRead<'de> {\n    /// read next byte (if peeked byte not discarded return it)\n    fn next(&mut self) -> anyhow::Result<u8>;\n    /// peek next byte (peeked byte should come in next and next_bytes unless discarded)\n    fn peek(&mut self) -> anyhow::Result<u8>;\n    /// how many bytes have been read so far.\n    /// this doesn't include the peeked byte\n    fn read_count(&self) -> usize;\n    /// discard peeked byte\n    fn discard(&mut self);\n    /// read next byte (if peeked byte not discarded include it)\n    fn next_bytes<'s>(\n        &'s mut self,\n        len: usize,\n        scratch: &'s mut Vec<u8>,\n    ) -> anyhow::Result<Reference<'de, 's, [u8]>>;\n    /// read u32 as native endian\n    fn next_u32(&mut self, scratch: &mut Vec<u8>) -> anyhow::Result<u32> {\n        let bytes = self\n            .next_bytes(4, scratch)\n            .context(\"error while parsing u32\")?\n            .get_ref();\n        Ok(NativeEndian::read_u32(bytes))\n    }\n}\n\npub struct SliceRead<'a> {\n    slice: &'a [u8],\n    index: usize,\n}\n\nimpl<'a> SliceRead<'a> {\n    pub fn new(slice: &'a [u8]) -> Self {\n        SliceRead { slice, index: 0 }\n    }\n}\n\npub struct IoRead<R>\nwhere\n    R: io::Read,\n{\n    reader: R,\n    read_count: usize,\n    /// Temporary storage of peeked byte.\n    peeked: Option<u8>,\n}\n\nimpl<R> IoRead<R>\nwhere\n    R: io::Read,\n{\n    pub fn new(reader: R) -> Self {\n        debug_bytes!(\"Read bytes:\\n\");\n        IoRead {\n            reader,\n            read_count: 0,\n            peeked: None,\n        }\n    }\n}\n\nimpl<R> Drop for IoRead<R>\nwhere\n    R: io::Read,\n{\n    fn drop(&mut self) {\n        debug_bytes!(\"\\n\");\n    }\n}\n\nimpl<'a> DeRead<'a> for SliceRead<'a> {\n    fn next(&mut self) -> anyhow::Result<u8> {\n        if self.index >= self.slice.len() {\n            bail!(\"eof while reading next byte\");\n        }\n        let ch = self.slice[self.index];\n        self.index += 1;\n        Ok(ch)\n    }\n\n    fn peek(&mut self) -> anyhow::Result<u8> {\n        if self.index >= self.slice.len() {\n            bail!(\"eof while peeking next byte\");\n        }\n        Ok(self.slice[self.index])\n    }\n\n    #[inline]\n    fn read_count(&self) -> usize {\n        self.index\n    }\n\n    #[inline]\n    fn discard(&mut self) {\n        self.index += 1;\n    }\n\n    fn next_bytes<'s>(\n        &'s mut self,\n        len: usize,\n        _scratch: &'s mut Vec<u8>,\n    ) -> anyhow::Result<Reference<'a, 's, [u8]>> {\n        // BSER has no escaping or anything similar, so just go ahead and return\n        // a reference to the bytes.\n        if self.index + len > self.slice.len() {\n            bail!(\"eof while parsing bytes/string\");\n        }\n        let borrowed = &self.slice[self.index..(self.index + len)];\n        self.index += len;\n        Ok(Reference::Borrowed(borrowed))\n    }\n}\n\nimpl<'de, R> DeRead<'de> for IoRead<R>\nwhere\n    R: io::Read,\n{\n    fn next(&mut self) -> anyhow::Result<u8> {\n        match self.peeked.take() {\n            Some(peeked) => Ok(peeked),\n            None => {\n                let mut buffer = [0; 1];\n                self.reader.read_exact(&mut buffer)?;\n                debug_bytes!(\"{:x}\", ByteBuf(&buffer));\n                self.read_count += 1;\n                Ok(buffer[0])\n            }\n        }\n    }\n\n    fn peek(&mut self) -> anyhow::Result<u8> {\n        match self.peeked {\n            Some(peeked) => Ok(peeked),\n            None => {\n                let mut buffer = [0; 1];\n                self.reader.read_exact(&mut buffer)?;\n                debug_bytes!(\"{:x}\", ByteBuf(&buffer));\n                self.peeked = Some(buffer[0]);\n                self.read_count += 1;\n                Ok(buffer[0])\n            }\n        }\n    }\n\n    #[inline]\n    fn read_count(&self) -> usize {\n        match self.peeked {\n            Some(_) => self.read_count - 1,\n            None => self.read_count,\n        }\n    }\n\n    #[inline]\n    fn discard(&mut self) {\n        self.peeked = None\n    }\n\n    fn next_bytes<'s>(\n        &'s mut self,\n        len: usize,\n        scratch: &'s mut Vec<u8>,\n    ) -> anyhow::Result<Reference<'de, 's, [u8]>> {\n        scratch.resize(len, 0);\n        let mut idx = 0;\n        if self.peeked.is_some() {\n            idx += 1;\n        }\n        if idx < len {\n            self.reader.read_exact(&mut scratch[idx..len])?;\n            debug_bytes!(\"{:x}\", ByteBuf(&scratch[idx..len]));\n            self.read_count += len - idx;\n        }\n        if let Some(peeked) = self.peeked.take() {\n            scratch[0] = peeked;\n        }\n        Ok(Reference::Copied(&scratch[0..len]))\n    }\n}\n\n#[derive(Debug)]\npub enum Reference<'b, 'c, T: ?Sized> {\n    Borrowed(&'b T),\n    Copied(&'c T),\n}\n\nimpl<'b, 'c, T> Reference<'b, 'c, T>\nwhere\n    T: ?Sized,\n{\n    pub fn map_result<F, U, E>(self, f: F) -> anyhow::Result<Reference<'b, 'c, U>>\n    where\n        F: FnOnce(&T) -> result::Result<&U, E>,\n        E: std::error::Error + Send + Sync + 'static,\n        U: ?Sized + 'b + 'c,\n    {\n        match self {\n            Reference::Borrowed(borrowed) => Ok(Reference::Borrowed(f(borrowed)?)),\n            Reference::Copied(copied) => Ok(Reference::Copied(f(copied)?)),\n        }\n    }\n\n    pub fn get_ref<'a>(&self) -> &'a T\n    where\n        'b: 'a,\n        'c: 'a,\n    {\n        match *self {\n            Reference::Borrowed(borrowed) => borrowed,\n            Reference::Copied(copied) => copied,\n        }\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/de/reentrant.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! Module to handle reentrant/recursion limits while deserializing.\n\nuse std::cell::Cell;\nuse std::rc::Rc;\n\nuse crate::errors::*;\n\n/// Sets a limit on the amount of recursion during deserialization. This does\n/// not do any synchronization -- it is intended purely for single-threaded use.\npub struct ReentrantLimit(Rc<Cell<usize>>);\n\nimpl ReentrantLimit {\n    /// Create a new reentrant limit.\n    pub fn new(limit: usize) -> Self {\n        ReentrantLimit(Rc::new(Cell::new(limit)))\n    }\n\n    /// Try to decrease the limit by 1. Return an RAII guard that when freed\n    /// will increase the limit by 1.\n    pub fn acquire<S: Into<String>>(&mut self, kind: S) -> Result<ReentrantGuard> {\n        if self.0.get() == 0 {\n            return Err(Error::DeRecursionLimitExceeded { kind: kind.into() });\n        }\n        self.0.set(self.0.get() - 1);\n        Ok(ReentrantGuard(self.0.clone()))\n    }\n}\n\n/// RAII guard for reentrant limits.\npub struct ReentrantGuard(Rc<Cell<usize>>);\n\nimpl Drop for ReentrantGuard {\n    fn drop(&mut self) {\n        self.0.set(self.0.get() + 1);\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/de/seq.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse serde::de;\n\nuse super::Deserializer;\nuse super::read::DeRead;\nuse super::reentrant::ReentrantGuard;\nuse crate::errors::*;\n\npub struct SeqAccess<'a, R> {\n    de: &'a mut Deserializer<R>,\n    remaining: usize,\n}\n\nimpl<'a, 'de, R> SeqAccess<'a, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    /// Create a new `MapAccess`.\n    ///\n    /// `_guard` makes sure the caller is accounting for the recursion limit.\n    pub fn new(de: &'a mut Deserializer<R>, nitems: usize, _guard: &ReentrantGuard) -> Self {\n        SeqAccess {\n            de,\n            remaining: nitems,\n        }\n    }\n}\n\nimpl<'a, 'de, R> de::SeqAccess<'de> for SeqAccess<'a, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    type Error = Error;\n\n    fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>>\n    where\n        T: de::DeserializeSeed<'de>,\n    {\n        if self.remaining == 0 {\n            Ok(None)\n        } else {\n            self.remaining -= 1;\n            let value = seed.deserialize(&mut *self.de)?;\n            Ok(Some(value))\n        }\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/de/template.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::borrow::Cow;\nuse std::rc::Rc;\n\nuse serde::Deserialize;\nuse serde::de;\nuse serde::forward_to_deserialize_any;\n\nuse super::Deserializer;\nuse super::read::DeRead;\nuse super::reentrant::ReentrantGuard;\nuse crate::errors::*;\nuse crate::header::*;\n\n// This is ugly because #[serde(borrow)] can't be used with collections directly\n// at the moment. See\n// https://github.com/serde-rs/serde/issues/914#issuecomment-298801226 for more.\n// Note that keys are always ASCII, so treating them as str is fine, even if they're\n// serialized as BSER_BYTESTRING instances. (These keys are used as struct field\n// identifiers, which are Unicode strings so can't be directly matched up with\n// bytestrings.)\n#[derive(Clone, Debug, Deserialize)]\npub struct Key<'a>(#[serde(borrow)] Cow<'a, str>);\n\n/// A BSER template is logically an array of objects, all with the same or\n/// similar keys.\n///\n/// A template is serialized as\n/// `<BSER_TEMPLATE><BSER_ARRAY of keys><number of objects><object 1 values><object 2 values>...`\n///\n/// and gets deserialized as\n///\n/// ```text\n/// [\n///    {key1: obj1_value1, key2: obj1_value2, ...},\n///    {key2: obj2_value1, key2: obj2_value2, ...},\n///    ...\n/// ]\n/// ```\n///\n/// The special value BSER_SKIP is used if a particular object doesn't have a\n/// key.\npub struct Template<'a, 'de, R> {\n    de: &'a mut Deserializer<R>,\n    keys: Rc<Vec<Key<'de>>>,\n    remaining: usize,\n}\n\nimpl<'a, 'de, R: 'a> Template<'a, 'de, R> {\n    /// Create a new `Template`.\n    ///\n    /// `_guard` makes sure the caller is accounting for the recursion limit.\n    pub fn new(\n        de: &'a mut Deserializer<R>,\n        keys: Vec<Key<'de>>,\n        nitems: usize,\n        _guard: &ReentrantGuard,\n    ) -> Self {\n        Template {\n            de,\n            keys: Rc::new(keys),\n            remaining: nitems,\n        }\n    }\n}\n\nimpl<'a, 'de, R> de::SeqAccess<'de> for Template<'a, 'de, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    type Error = Error;\n\n    fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>>\n    where\n        T: de::DeserializeSeed<'de>,\n    {\n        if self.remaining == 0 {\n            Ok(None)\n        } else {\n            self.remaining -= 1;\n            let obj_de = ObjectDeserializer {\n                de: &mut *self.de,\n                keys: self.keys.clone(),\n            };\n            let value = seed.deserialize(obj_de)?;\n            Ok(Some(value))\n        }\n    }\n}\n\nstruct ObjectDeserializer<'a, 'de, R> {\n    de: &'a mut Deserializer<R>,\n    keys: Rc<Vec<Key<'de>>>,\n}\n\nimpl<'a, 'de, R> de::Deserializer<'de> for ObjectDeserializer<'a, 'de, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    type Error = Error;\n\n    #[inline]\n    fn deserialize_any<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        visitor.visit_map(TemplateObject::new(&mut *self.de, self.keys))\n    }\n\n    #[inline]\n    fn deserialize_newtype_struct<V>(self, _name: &'static str, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        // This is e.g. E(T). Ignore the E.\n        visitor.visit_newtype_struct(self)\n    }\n\n    fn deserialize_enum<V>(\n        self,\n        _name: &'static str,\n        _variants: &'static [&'static str],\n        visitor: V,\n    ) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        visitor.visit_map(TemplateObject::new(&mut *self.de, self.keys))\n    }\n\n    forward_to_deserialize_any! {\n        bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes\n        byte_buf unit unit_struct seq tuple tuple_struct map struct identifier\n        ignored_any option\n    }\n}\n\nstruct TemplateObject<'a, 'de, R> {\n    de: &'a mut Deserializer<R>,\n    keys: Rc<Vec<Key<'de>>>,\n    cur: usize,\n}\n\nimpl<'a, 'de, R> TemplateObject<'a, 'de, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    fn new(de: &'a mut Deserializer<R>, keys: Rc<Vec<Key<'de>>>) -> Self {\n        TemplateObject { de, keys, cur: 0 }\n    }\n}\n\nimpl<'a, 'de, R> de::MapAccess<'de> for TemplateObject<'a, 'de, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    type Error = Error;\n\n    fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>>\n    where\n        K: de::DeserializeSeed<'de>,\n    {\n        if self.cur == self.keys.len() {\n            Ok(None)\n        } else {\n            let cur = self.cur;\n            self.cur += 1;\n            let obj_de = KeyDeserializer {\n                key: &self.keys[cur],\n            };\n            let value = seed.deserialize(obj_de)?;\n            Ok(Some(value))\n        }\n    }\n\n    fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value>\n    where\n        V: de::DeserializeSeed<'de>,\n    {\n        seed.deserialize(ValueDeserializer { de: &mut *self.de })\n    }\n}\n\nstruct KeyDeserializer<'a, 'de> {\n    key: &'a Key<'de>,\n}\n\nimpl<'a, 'de: 'a> de::Deserializer<'de> for KeyDeserializer<'a, 'de> {\n    type Error = Error;\n\n    #[inline]\n    fn deserialize_any<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        match self.key.0 {\n            Cow::Borrowed(s) => visitor.visit_borrowed_str(s),\n            Cow::Owned(ref s) => visitor.visit_str(s),\n        }\n    }\n\n    forward_to_deserialize_any! {\n        bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes\n        byte_buf unit unit_struct seq tuple tuple_struct map struct identifier\n        ignored_any option enum newtype_struct\n    }\n}\n\nstruct ValueDeserializer<'a, R> {\n    de: &'a mut Deserializer<R>,\n}\n\nimpl<'a, 'de, R> de::Deserializer<'de> for ValueDeserializer<'a, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    type Error = Error;\n\n    #[inline]\n    fn deserialize_any<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        // The only new thing here compared to the main Deserializer is that it\n        // is possible to skip this value with BSER_SKIP.\n        match self.de.bunser.peek()? {\n            BSER_SKIP => {\n                self.de.bunser.discard();\n                visitor.visit_none()\n            }\n            _ => self.de.deserialize_any(visitor),\n        }\n    }\n\n    /// Parse a BSER_SKIP or a null as a None, and anything else as a\n    /// `Some(...)`.\n    #[inline]\n    fn deserialize_option<V>(self, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        match self.de.bunser.peek()? {\n            BSER_SKIP | BSER_NULL => {\n                self.de.bunser.discard();\n                visitor.visit_none()\n            }\n            _ => visitor.visit_some(self),\n        }\n    }\n\n    #[inline]\n    fn deserialize_newtype_struct<V>(self, _name: &str, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        // This is e.g. E(T). Ignore the E.\n        visitor.visit_newtype_struct(self)\n    }\n\n    // TODO: do we also need to do enum here?\n\n    forward_to_deserialize_any! {\n        bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes\n        byte_buf unit unit_struct seq tuple tuple_struct map struct identifier\n        ignored_any enum\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/de/test.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::borrow::Cow;\nuse std::collections::HashMap;\nuse std::io::Cursor;\n\nuse maplit::hashmap;\nuse serde::Deserialize;\n\nuse crate::from_reader;\nuse crate::from_slice;\n\n// For \"from_reader\" data in owned and for \"from_slice\" data is borrowed\n\n#[derive(Debug, Deserialize, Eq, Hash, PartialEq)]\nstruct Bytestring<'a>(#[serde(borrow)] Cow<'a, [u8]>);\n\nimpl<'a> From<&'a [u8]> for Bytestring<'a> {\n    fn from(value: &'a [u8]) -> Self {\n        Bytestring(Cow::Borrowed(value))\n    }\n}\n\nimpl<'a, 'b> PartialEq<&'b [u8]> for Bytestring<'a> {\n    fn eq(&self, rhs: &&'b [u8]) -> bool {\n        self.0 == *rhs\n    }\n}\n\n#[derive(Debug, Deserialize, Eq, PartialEq)]\nstruct BytestringArray<'a>(#[serde(borrow)] Vec<Bytestring<'a>>);\n\n#[derive(Debug, Deserialize, Eq, PartialEq)]\nstruct BytestringObject<'a>(#[serde(borrow)] HashMap<Bytestring<'a>, Bytestring<'a>>);\n\n#[derive(Debug, Deserialize, Eq, PartialEq)]\nstruct TwoBytestrings<'a>(\n    #[serde(borrow)] Bytestring<'a>,\n    #[serde(borrow)] Bytestring<'a>,\n);\n\n#[derive(Debug, Deserialize, Eq, PartialEq)]\nenum BytestringVariant<'a> {\n    TestUnit,\n    TestNewtype(Bytestring<'a>),\n    TestTuple(\n        #[serde(borrow)] Bytestring<'a>,\n        #[serde(borrow)] Bytestring<'a>,\n    ),\n    TestStruct {\n        #[serde(borrow)]\n        abc: Bytestring<'a>,\n        #[serde(borrow)]\n        def: Bytestring<'a>,\n    },\n}\n\n#[derive(Debug, Deserialize, Eq, PartialEq)]\nenum StringVariant {\n    TestUnit,\n    TestNewtype(String),\n    TestTuple(String, String),\n    TestStruct { abc: String, def: String },\n}\n\n#[test]\nfn test_basic_array() {\n    let bser_v2 =\n        b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x11\\x00\\x00\\x00\\x00\\x03\\x02\\x02\\x03\\x03Tom\\x02\\x03\\x05Jerry\";\n    let decoded = from_slice::<BytestringArray<'_>>(bser_v2).unwrap();\n    assert_eq!(decoded.0, vec![&b\"Tom\"[..], &b\"Jerry\"[..]]);\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: Vec<String> = from_reader(reader).unwrap();\n    let expected = vec![\"Tom\", \"Jerry\"];\n    assert_eq!(decoded, expected);\n}\n\n#[test]\nfn test_basic_object() {\n    let bser_v2 =\n        b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x0f\\x00\\x00\\x00\\x01\\x03\\x01\\x02\\x03\\x03abc\\x02\\x03\\x03def\";\n    let decoded = from_slice::<BytestringObject<'_>>(bser_v2).unwrap();\n    let expected = hashmap! {\n        Bytestring::from(&b\"abc\"[..]) => Bytestring::from(&b\"def\"[..])\n    };\n    assert_eq!(decoded.0, expected);\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: HashMap<String, String> = from_reader(reader).unwrap();\n    let expected = hashmap! {\n        \"abc\".into() => \"def\".into()\n    };\n    assert_eq!(decoded, expected);\n}\n\n#[test]\nfn test_basic_tuple() {\n    let bser_v2 =\n        b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x11\\x00\\x00\\x00\\x00\\x03\\x02\\x02\\x03\\x03Tom\\x02\\x03\\x05Jerry\";\n    let decoded = from_slice::<TwoBytestrings<'_>>(bser_v2).unwrap();\n    assert_eq!(decoded.0, &b\"Tom\"[..]);\n    assert_eq!(decoded.1, &b\"Jerry\"[..]);\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: (String, String) = from_reader(reader).unwrap();\n    let expected: (String, String) = (\"Tom\".into(), \"Jerry\".into());\n    assert_eq!(decoded, expected);\n}\n\n#[test]\nfn test_bare_variant() {\n    // \"TestUnit\"\n    let bser_v2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x0b\\x00\\x00\\x00\\x02\\x03\\x08TestUnit\";\n    let decoded = from_slice::<BytestringVariant<'_>>(bser_v2).unwrap();\n    assert_eq!(decoded, BytestringVariant::TestUnit);\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: StringVariant = from_reader(reader).unwrap();\n    assert_eq!(decoded, StringVariant::TestUnit);\n}\n\n#[test]\nfn test_unit_variant() {\n    // {\"TestUnit\": null}\n    let bser_v2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x0f\\x00\\x00\\x00\\x01\\x03\\x01\\x02\\x03\\x08TestUnit\\n\";\n    let decoded = from_slice::<BytestringVariant<'_>>(bser_v2).unwrap();\n    assert_eq!(decoded, BytestringVariant::TestUnit);\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: StringVariant = from_reader(reader).unwrap();\n    assert_eq!(decoded, StringVariant::TestUnit);\n}\n\n#[test]\nfn test_newtype_variant() {\n    // {\"TestNewtype\": \"foobar\"}\n    let bser_v2 =\n        b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x1a\\x00\\x00\\x00\\x01\\x03\\x01\\x02\\x03\\x0bTestNewtype\\\n                    \\x02\\x03\\x06foobar\";\n    let decoded = from_slice::<BytestringVariant<'_>>(bser_v2).unwrap();\n    assert_eq!(\n        decoded,\n        BytestringVariant::TestNewtype((&b\"foobar\"[..]).into())\n    );\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: StringVariant = from_reader(reader).unwrap();\n    assert_eq!(decoded, StringVariant::TestNewtype(\"foobar\".into()));\n}\n\n#[test]\nfn test_tuple_variant() {\n    // {\"TestTuple\": [\"foo\", \"bar\"]}\n    let bser_v2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x1e\\x00\\x00\\x00\\x01\\x03\\x01\\x02\\x03\\tTestTuple\\\n                    \\x00\\x03\\x02\\x02\\x03\\x03foo\\x02\\x03\\x03bar\";\n    let decoded = from_slice::<BytestringVariant<'_>>(bser_v2).unwrap();\n    assert_eq!(\n        decoded,\n        BytestringVariant::TestTuple((&b\"foo\"[..]).into(), (&b\"bar\"[..]).into())\n    );\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: StringVariant = from_reader(reader).unwrap();\n    assert_eq!(\n        decoded,\n        StringVariant::TestTuple(\"foo\".into(), \"bar\".into())\n    );\n}\n\n#[test]\nfn test_struct_variant() {\n    // {\"TestStruct\": {\"abc\": \"foo\", \"def\": \"bar\"}}\n    let bser_v2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05+\\x00\\x00\\x00\\x01\\x03\\x01\\x02\\x03\\nTestStruct\\\n                    \\x01\\x03\\x02\\x02\\x03\\x03abc\\x02\\x03\\x03foo\\x02\\x03\\x03def\\x02\\x03\\x03bar\";\n    let decoded = from_slice::<BytestringVariant<'_>>(bser_v2).unwrap();\n    assert_eq!(\n        decoded,\n        BytestringVariant::TestStruct {\n            abc: (&b\"foo\"[..]).into(),\n            def: (&b\"bar\"[..]).into(),\n        }\n    );\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: StringVariant = from_reader(reader).unwrap();\n    assert_eq!(\n        decoded,\n        StringVariant::TestStruct {\n            abc: \"foo\".into(),\n            def: \"bar\".into(),\n        }\n    );\n}\n\n#[derive(Debug, Deserialize, Eq, PartialEq)]\nstruct BytestringTemplateObject<'a> {\n    abc: i32,\n    #[serde(borrow)]\n    def: Option<Bytestring<'a>>,\n    ghi: Option<i64>,\n}\n\n#[derive(Debug, Deserialize, Eq, PartialEq)]\nstruct TemplateObject {\n    abc: i32,\n    def: Option<String>,\n    ghi: Option<i64>,\n}\n\n#[test]\nfn test_template() {\n    // Logical expansion of this template:\n    // [\n    //   {\"abc\": 123, \"def\": \"bar\", \"ghi\": null},\n    //   {\"abc\": 456,               \"ghi\": 789},\n    // ]\n    //\n    // The second \"def\" is skipped.\n    let bser_v2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05(\\x00\\x00\\x00\\x0b\\x00\\x03\\x03\\x02\\x03\\x03abc\\x02\\\n                    \\x03\\x03def\\x02\\x03\\x03ghi\\x03\\x02\\x03{\\x02\\x03\\x03bar\\n\\x04\\xc8\\x01\\x0c\\x04\\\n                    \\x15\\x03\";\n    let decoded = from_slice::<Vec<BytestringTemplateObject<'_>>>(bser_v2).unwrap();\n    assert_eq!(\n        decoded,\n        vec![\n            BytestringTemplateObject {\n                abc: 123,\n                def: Some((&b\"bar\"[..]).into()),\n                ghi: None,\n            },\n            BytestringTemplateObject {\n                abc: 456,\n                def: None,\n                ghi: Some(789),\n            },\n        ]\n    );\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: Vec<TemplateObject> = from_reader(reader).unwrap();\n    assert_eq!(\n        decoded,\n        vec![\n            TemplateObject {\n                abc: 123,\n                def: Some(\"bar\".into()),\n                ghi: None,\n            },\n            TemplateObject {\n                abc: 456,\n                def: None,\n                ghi: Some(789),\n            },\n        ]\n    );\n}\n\n#[derive(Debug, Deserialize, PartialEq)]\n#[serde(untagged)]\npub enum RequestResult<T, E> {\n    Error(E),\n    Ok(T),\n}\n\n#[derive(Debug, Deserialize, PartialEq)]\npub struct FileInfo {\n    name: String,\n    size: u32,\n}\n\n#[derive(Debug, Deserialize, PartialEq)]\npub struct Files {\n    files: Vec<FileInfo>,\n}\n\n#[derive(Debug, Deserialize, PartialEq)]\npub struct RequestError {\n    error: String,\n}\n\n#[derive(Debug, Deserialize, PartialEq)]\npub struct BytestringFileInfo<'a> {\n    #[serde(borrow)]\n    name: Bytestring<'a>,\n    size: u32,\n}\n\n#[derive(Debug, Deserialize, PartialEq)]\npub struct BytestringFiles<'a> {\n    #[serde(borrow)]\n    files: Vec<BytestringFileInfo<'a>>,\n}\n\n#[derive(Debug, Deserialize, PartialEq)]\npub struct BytestringRequestError<'a> {\n    #[serde(borrow)]\n    error: Bytestring<'a>,\n}\n\n#[test]\nfn test_compact_arrays() {\n    // {\n    //  \"files\": [\n    //      {\n    //          \"name\": \"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\",\n    //          \"size\": 384\n    //      },\n    //      {\n    //          \"name\": \"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug/deps\",\n    //          \"size\": 3200\n    //      },\n    //   ]\n    // }\n\n    let bser_v2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x04\\xeb\\x00\\x01\\x03\\x04\\x02\\x03\\x05files\\x0b\\x00\\x03\\x02\\x0d\\x03\\x04name\\x0d\\x03\\x04size\\x03\\x02\\x02\\x038fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\\x04\\x80\\x01\\x02\\x03\\x3dfbcode/scm/hg/lib/hg_watchman_client/tester/target/debug/deps\\x04\\x80\\x0c\\x02\\x03\\x05clock\\x0d\\x03\\x19c\\x3a1525428959\\x3a45796\\x3a2\\x3a7717\\x02\\x03\\x11is_fresh_instance\\x09\\x02\\x03\\x07version\\x0d\\x03\\x054.9.1\";\n\n    let decoded = from_slice::<BytestringFiles<'_>>(bser_v2).unwrap();\n\n    assert_eq!(\n        decoded,\n        BytestringFiles {\n            files: vec![\n                BytestringFileInfo {\n                    name: (&b\"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\"[..]).into(),\n                    size: 384,\n                },\n                BytestringFileInfo {\n                    name: (&b\"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug/deps\"[..])\n                        .into(),\n                    size: 3200,\n                },\n            ],\n        }\n    );\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: Files = from_reader(reader).unwrap();\n\n    assert_eq!(\n        decoded,\n        Files {\n            files: vec![\n                FileInfo {\n                    name: \"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\".into(),\n                    size: 384,\n                },\n                FileInfo {\n                    name: \"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug/deps\".into(),\n                    size: 3200,\n                },\n            ],\n        }\n    );\n}\n\n#[test]\nfn test_compact_arrays_untagged_enum() {\n    let bser_v2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x04\\xeb\\x00\\x01\\x03\\x04\\x02\\x03\\x05files\\x0b\\x00\\x03\\x02\\x0d\\x03\\x04name\\x0d\\x03\\x04size\\x03\\x02\\x02\\x038fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\\x04\\x80\\x01\\x02\\x03\\x3dfbcode/scm/hg/lib/hg_watchman_client/tester/target/debug/deps\\x04\\x80\\x0c\\x02\\x03\\x05clock\\x0d\\x03\\x19c\\x3a1525428959\\x3a45796\\x3a2\\x3a7717\\x02\\x03\\x11is_fresh_instance\\x09\\x02\\x03\\x07version\\x0d\\x03\\x054.9.1\";\n\n    let decoded =\n        from_slice::<RequestResult<BytestringFiles<'_>, BytestringRequestError<'_>>>(bser_v2)\n            .unwrap();\n\n    assert_eq!(\n        decoded,\n        RequestResult::Ok(BytestringFiles {\n            files: vec![\n                BytestringFileInfo {\n                    name: (&b\"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\"[..]).into(),\n                    size: 384,\n                },\n                BytestringFileInfo {\n                    name: (&b\"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug/deps\"[..])\n                        .into(),\n                    size: 3200,\n                },\n            ],\n        })\n    );\n\n    let reader = Cursor::new(bser_v2.to_vec());\n\n    let decoded: RequestResult<Files, RequestError> = from_reader(reader).unwrap();\n\n    assert_eq!(\n        decoded,\n        RequestResult::Ok(Files {\n            files: vec![\n                FileInfo {\n                    name: \"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\".into(),\n                    size: 384,\n                },\n                FileInfo {\n                    name: \"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug/deps\".into(),\n                    size: 3200,\n                },\n            ],\n        })\n    );\n}\n\n#[test]\n// non compact arrays\nfn test_arrays() {\n    // {\n    //    \"files\": [\n    //      {\n    //          \"name\": \"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\",\n    //          \"size\": 384\n    //      },\n    //      {\n    //          \"name\": \"fbcode/scm/hg/lib/hg_watchman_client/tester\",\n    //          \"size\": 224\n    //      }\n    //    ]\n    // }\n\n    let bser_v2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x04\\xea\\x00\\x01\\x03\\x04\\x02\\x03\\x07version\\x02\\x03\\x054.9.1\\x02\\x03\\x11is_fresh_instance\\x09\\x02\\x03\\x05clock\\x02\\x03\\x19c\\x3a1525428959\\x3a45796\\x3a2\\x3a9642\\x02\\x03\\x05files\\x00\\x03\\x02\\x01\\x03\\x02\\x02\\x03\\x04size\\x04\\x80\\x01\\x02\\x03\\x04name\\x02\\x038fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\\x01\\x03\\x02\\x02\\x03\\x04size\\x04\\xe0\\x00\\x02\\x03\\x04name\\x02\\x03\\x2bfbcode/scm/hg/lib/hg_watchman_client/tester\";\n\n    let decoded = from_slice::<BytestringFiles<'_>>(bser_v2).unwrap();\n\n    assert_eq!(\n        decoded,\n        BytestringFiles {\n            files: vec![\n                BytestringFileInfo {\n                    name: (&b\"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\"[..]).into(),\n                    size: 384,\n                },\n                BytestringFileInfo {\n                    name: (&b\"fbcode/scm/hg/lib/hg_watchman_client/tester\"[..]).into(),\n                    size: 224,\n                },\n            ],\n        }\n    );\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: Files = from_reader(reader).unwrap();\n\n    assert_eq!(\n        decoded,\n        Files {\n            files: vec![\n                FileInfo {\n                    name: \"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\".into(),\n                    size: 384,\n                },\n                FileInfo {\n                    name: \"fbcode/scm/hg/lib/hg_watchman_client/tester\".into(),\n                    size: 224,\n                },\n            ],\n        }\n    );\n}\n\n#[test]\n// non compact arrays\nfn test_arrays_untagged_enum() {\n    let bser_v2 = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x04\\xea\\x00\\x01\\x03\\x04\\x02\\x03\\x07version\\x02\\x03\\x054.9.1\\x02\\x03\\x11is_fresh_instance\\x09\\x02\\x03\\x05clock\\x02\\x03\\x19c\\x3a1525428959\\x3a45796\\x3a2\\x3a9642\\x02\\x03\\x05files\\x00\\x03\\x02\\x01\\x03\\x02\\x02\\x03\\x04size\\x04\\x80\\x01\\x02\\x03\\x04name\\x02\\x038fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\\x01\\x03\\x02\\x02\\x03\\x04size\\x04\\xe0\\x00\\x02\\x03\\x04name\\x02\\x03\\x2bfbcode/scm/hg/lib/hg_watchman_client/tester\";\n\n    let decoded =\n        from_slice::<RequestResult<BytestringFiles<'_>, BytestringRequestError<'_>>>(bser_v2)\n            .unwrap();\n\n    assert_eq!(\n        decoded,\n        RequestResult::Ok(BytestringFiles {\n            files: vec![\n                BytestringFileInfo {\n                    name: (&b\"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\"[..]).into(),\n                    size: 384,\n                },\n                BytestringFileInfo {\n                    name: (&b\"fbcode/scm/hg/lib/hg_watchman_client/tester\"[..]).into(),\n                    size: 224,\n                },\n            ],\n        })\n    );\n\n    let reader = Cursor::new(bser_v2.to_vec());\n    let decoded: RequestResult<Files, RequestError> = from_reader(reader).unwrap();\n\n    assert_eq!(\n        decoded,\n        RequestResult::Ok(Files {\n            files: vec![\n                FileInfo {\n                    name: \"fbcode/scm/hg/lib/hg_watchman_client/tester/target/debug\".into(),\n                    size: 384,\n                },\n                FileInfo {\n                    name: \"fbcode/scm/hg/lib/hg_watchman_client/tester\".into(),\n                    size: 224,\n                },\n            ],\n        })\n    );\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/de/variant.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse serde::de;\n\nuse super::Deserializer;\nuse super::read::DeRead;\nuse super::reentrant::ReentrantGuard;\nuse crate::errors::*;\n\nmacro_rules! impl_enum_access {\n    ($type:ident) => {\n        impl<'a, 'de, R> de::EnumAccess<'de> for $type<'a, R>\n        where\n            R: 'a + DeRead<'de>,\n        {\n            type Error = Error;\n            type Variant = Self;\n\n            fn variant_seed<V>(self, seed: V) -> Result<(V::Value, Self)>\n            where\n                V: de::DeserializeSeed<'de>,\n            {\n                let val = seed.deserialize(&mut *self.de)?;\n                Ok((val, self))\n            }\n        }\n    };\n}\n\n/// Deserialize access for unit, struct and tuple variants.\npub struct VariantAccess<'a, R> {\n    de: &'a mut Deserializer<R>,\n}\n\nimpl<'a, 'de, R> VariantAccess<'a, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    /// Create a new `VariantAccess`.\n    ///\n    /// `_guard` makes sure the caller is accounting for the recursion limit.\n    pub fn new(de: &'a mut Deserializer<R>, _guard: &ReentrantGuard) -> Self {\n        VariantAccess { de }\n    }\n}\n\nimpl_enum_access!(VariantAccess);\n\nimpl<'a, 'de, R> de::VariantAccess<'de> for VariantAccess<'a, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    type Error = Error;\n\n    fn unit_variant(self) -> Result<()> {\n        de::Deserialize::deserialize(self.de)\n    }\n\n    fn newtype_variant_seed<T>(self, seed: T) -> Result<T::Value>\n    where\n        T: de::DeserializeSeed<'de>,\n    {\n        seed.deserialize(self.de)\n    }\n\n    fn tuple_variant<V>(self, _len: usize, visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        de::Deserializer::deserialize_any(self.de, visitor)\n    }\n\n    fn struct_variant<V>(self, _fields: &'static [&'static str], visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        de::Deserializer::deserialize_any(self.de, visitor)\n    }\n}\n\n/// Deserialize access for plain unit variants.\npub struct UnitVariantAccess<'a, R> {\n    de: &'a mut Deserializer<R>,\n}\n\nimpl<'a, 'de, R> UnitVariantAccess<'a, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    pub fn new(de: &'a mut Deserializer<R>) -> Self {\n        UnitVariantAccess { de }\n    }\n}\n\nimpl_enum_access!(UnitVariantAccess);\n\nimpl<'a, 'de, R> de::VariantAccess<'de> for UnitVariantAccess<'a, R>\nwhere\n    R: 'a + DeRead<'de>,\n{\n    type Error = Error;\n\n    fn unit_variant(self) -> Result<()> {\n        Ok(())\n    }\n\n    fn newtype_variant_seed<T>(self, _seed: T) -> Result<T::Value>\n    where\n        T: de::DeserializeSeed<'de>,\n    {\n        Err(de::Error::invalid_type(\n            de::Unexpected::UnitVariant,\n            &\"newtype variant\",\n        ))\n    }\n\n    fn tuple_variant<V>(self, _len: usize, _visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        Err(de::Error::invalid_type(\n            de::Unexpected::UnitVariant,\n            &\"tuple variant\",\n        ))\n    }\n\n    fn struct_variant<V>(self, _fields: &'static [&'static str], _visitor: V) -> Result<V::Value>\n    where\n        V: de::Visitor<'de>,\n    {\n        Err(de::Error::invalid_type(\n            de::Unexpected::UnitVariant,\n            &\"struct variant\",\n        ))\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/errors.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::fmt;\n\nuse serde::de;\nuse serde::ser;\nuse thiserror::Error;\n\nuse crate::header::header_byte_desc;\n\npub type Result<T> = ::std::result::Result<T, Error>;\n\n#[derive(Error, Debug)]\npub enum Error {\n    #[error(\"while deserializing BSER: invalid start byte for {}: {}\", .kind, header_byte_desc(*.byte))]\n    DeInvalidStartByte { kind: String, byte: u8 },\n\n    #[error(\"error while deserializing BSER: {}\", msg)]\n    DeCustom { msg: String },\n\n    #[error(\"while deserializing BSER: recursion limit exceeded with {}\", .kind)]\n    DeRecursionLimitExceeded { kind: String },\n\n    #[error(\"Expected {} bytes read, but only read {} bytes\", .expected, .read)]\n    DeEof { expected: usize, read: usize },\n\n    #[error(\"Invalid magic header: {:?}\", .magic)]\n    DeInvalidMagic { magic: Vec<u8> },\n\n    #[error(\"reader error while deserializing\")]\n    DeReaderError {\n        #[source]\n        source: anyhow::Error,\n    },\n\n    #[error(\"error while serializing BSER: {}\", .msg)]\n    SerCustom { msg: String },\n\n    #[error(\"while serializing BSER: need size of {}\", .kind)]\n    SerNeedSize { kind: &'static str },\n\n    #[error(\"while serializing BSER: integer too big: {}\", .v)]\n    SerU64TooBig { v: u64 },\n\n    #[error(\"IO Error\")]\n    Io(#[from] ::std::io::Error),\n}\n\nimpl Error {\n    pub fn de_reader_error(source: anyhow::Error) -> Self {\n        Self::DeReaderError { source }\n    }\n}\n\nimpl de::Error for Error {\n    fn custom<T: fmt::Display>(msg: T) -> Self {\n        Error::DeCustom {\n            msg: format!(\"{}\", msg),\n        }\n    }\n}\n\nimpl ser::Error for Error {\n    fn custom<T: fmt::Display>(msg: T) -> Self {\n        Error::SerCustom {\n            msg: format!(\"{}\", msg),\n        }\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/header.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! Header constants for BSER.\n\npub const EMPTY_HEADER: &[u8] = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x05\\x00\\x00\\x00\\x00\";\n\npub const BSER_ARRAY: u8 = 0x00;\npub const BSER_OBJECT: u8 = 0x01;\npub const BSER_BYTESTRING: u8 = 0x02;\npub const BSER_INT8: u8 = 0x03;\npub const BSER_INT16: u8 = 0x04;\npub const BSER_INT32: u8 = 0x05;\npub const BSER_INT64: u8 = 0x06;\npub const BSER_REAL: u8 = 0x07;\npub const BSER_TRUE: u8 = 0x08;\npub const BSER_FALSE: u8 = 0x09;\npub const BSER_NULL: u8 = 0x0a;\npub const BSER_TEMPLATE: u8 = 0x0b;\npub const BSER_SKIP: u8 = 0x0c;\npub const BSER_UTF8STRING: u8 = 0x0d;\n\n// Capabilities (we would ideally want to use EnumSet here, but\n// https://github.com/contain-rs/enum-set/issues/21 stops us)\n#[allow(unused)]\npub const BSER_CAP_DISABLE_UNICODE: u8 = 0x01;\n#[allow(unused)]\npub const BSER_CAP_DISABLE_UNICODE_FOR_ERRORS: u8 = 0x02;\n\npub fn header_byte_desc(byte: u8) -> String {\n    match byte {\n        BSER_ARRAY => \"BSER_ARRAY\".into(),\n        BSER_OBJECT => \"BSER_OBJECT\".into(),\n        BSER_BYTESTRING => \"BSER_BYTESTRING\".into(),\n        BSER_INT8 => \"BSER_INT8\".into(),\n        BSER_INT16 => \"BSER_INT16\".into(),\n        BSER_INT32 => \"BSER_INT32\".into(),\n        BSER_INT64 => \"BSER_INT64\".into(),\n        BSER_REAL => \"BSER_REAL\".into(),\n        BSER_TRUE => \"BSER_TRUE\".into(),\n        BSER_FALSE => \"BSER_FALSE\".into(),\n        BSER_NULL => \"BSER_NULL\".into(),\n        BSER_TEMPLATE => \"BSER_TEMPLATE\".into(),\n        BSER_SKIP => \"BSER_SKIP\".into(),\n        BSER_UTF8STRING => \"BSER_UTF8STRING\".into(),\n        ch => format!(\"unknown byte '{:?}'\", ch),\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/lib.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#![cfg_attr(fbcode_build, deny(warnings, rust_2018_idioms))]\n\npub mod bytestring;\npub mod de;\nmod errors;\nmod header;\npub mod ser;\npub mod value;\n\npub use crate::de::from_reader;\npub use crate::de::from_slice;\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/ser/count_write.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::io;\nuse std::io::Write;\n\n/// A writer that counts how many bytes were written.\npub struct CountWrite {\n    count: usize,\n}\n\nimpl CountWrite {\n    pub fn new() -> Self {\n        CountWrite { count: 0 }\n    }\n\n    #[inline]\n    pub fn count(&self) -> usize {\n        self.count\n    }\n}\n\nimpl Write for CountWrite {\n    #[inline]\n    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {\n        self.count += buf.len();\n        Ok(buf.len())\n    }\n\n    #[inline]\n    fn flush(&mut self) -> io::Result<()> {\n        Ok(())\n    }\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/ser/mod.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nmod count_write;\n#[cfg(test)]\nmod test;\n\nuse std::io;\n\nuse bytes::BufMut;\nuse serde::ser;\nuse serde::ser::Serialize;\n\nuse self::count_write::CountWrite;\nuse crate::errors::*;\nuse crate::header::*;\n\n// How full must the buffer get before we start flushing it?\nconst HIGHWATER: usize = 4096;\n\npub fn serialize<W, T>(mut writer: W, value: T) -> Result<W>\nwhere\n    W: io::Write,\n    T: ser::Serialize,\n{\n    // For the PDU info we need to first count how many bytes it is going to be.\n    let mut count_serializer = Serializer::new(CountWrite::new());\n    value.serialize(&mut count_serializer)?;\n    let count_write = count_serializer.finish()?;\n    let count = count_write.count();\n\n    // Now write out the first bits of PDU info.\n    // TODO: make this tokio AsyncWrite compatible\n    // TODO: support capabilities\n    writer.write_all(b\"\\x00\\x02\\x00\\x00\\x00\\x00\")?;\n    let mut serializer = Serializer::new(writer);\n    count.serialize(&mut serializer)?;\n\n    // Finally, serialize the value\n    value.serialize(&mut serializer)?;\n    Ok(serializer.finish()?)\n}\n\npub struct Serializer<W> {\n    writer: W,\n    scratch: Vec<u8>,\n    offset: usize,\n}\n\n/// If the value fits in the size specified by `$to`, call the `$put` function.\n///\n/// This works for all $val types except for `u64`.\nmacro_rules! maybe_put_int {\n    ($self:ident, $val:expr, $to:ident, $put:ident) => {\n        let min = $to::MIN as i64;\n        let max = $to::MAX as i64;\n        let val = $val as i64;\n        if val >= min && val <= max {\n            return $self.$put($val as $to);\n        }\n    };\n}\n\nimpl<W> Serializer<W>\nwhere\n    W: io::Write,\n{\n    // Create a new BSER serializer without leading PDU info.\n    fn new(writer: W) -> Self {\n        Serializer {\n            writer,\n            scratch: Vec::with_capacity(HIGHWATER * 2),\n            offset: 0,\n        }\n    }\n\n    /// Write out any internally cached data through to the writer.\n    #[inline]\n    pub fn flush(&mut self) -> io::Result<()> {\n        while self.offset < self.scratch.len() {\n            match self.writer.write(&self.scratch[self.offset..]) {\n                Ok(n) => self.offset += n,\n                Err(ref e) if e.kind() == io::ErrorKind::Interrupted => {}\n                Err(e) => return Err(e),\n            };\n        }\n        self.offset = 0;\n        unsafe {\n            self.scratch.set_len(0);\n        }\n        Ok(())\n    }\n\n    /// Finish writing any buffered data and unwrap the inner `Write`.\n    pub fn finish(mut self) -> io::Result<W> {\n        self.flush()?;\n        Ok(self.writer)\n    }\n\n    /// Try flushing any buffered data. If successful, unwrap the inner\n    /// `Write`. On failure, return `Self` and the error.\n    #[inline]\n    pub fn try_finish(mut self) -> ::std::result::Result<W, (Self, io::Error)> {\n        match self.flush() {\n            Ok(()) => Ok(self.writer),\n            Err(e) => Err((self, e)),\n        }\n    }\n\n    #[inline]\n    fn maybe_flush(&mut self) -> Result<()> {\n        if self.scratch.len() > HIGHWATER {\n            Ok(self.flush()?)\n        } else {\n            Ok(())\n        }\n    }\n\n    #[inline]\n    fn put_i8(&mut self, v: i8) {\n        self.scratch.push(BSER_INT8);\n        self.scratch.push(v as u8);\n    }\n\n    #[inline]\n    fn put_i16(&mut self, v: i16) {\n        maybe_put_int!(self, v, i8, put_i8);\n        self.scratch.push(BSER_INT16);\n        #[cfg(target_endian = \"little\")]\n        self.scratch.put_i16_le(v);\n        #[cfg(target_endian = \"big\")]\n        self.scratch.put_i16(v);\n    }\n\n    #[inline]\n    fn put_i32(&mut self, v: i32) {\n        maybe_put_int!(self, v, i16, put_i16);\n        self.scratch.push(BSER_INT32);\n        #[cfg(target_endian = \"little\")]\n        self.scratch.put_i32_le(v);\n        #[cfg(target_endian = \"big\")]\n        self.scratch.put_i32(v);\n    }\n\n    #[inline]\n    fn put_i64(&mut self, v: i64) {\n        maybe_put_int!(self, v, i32, put_i32);\n        self.scratch.push(BSER_INT64);\n        #[cfg(target_endian = \"little\")]\n        self.scratch.put_i64_le(v);\n        #[cfg(target_endian = \"big\")]\n        self.scratch.put_i64(v);\n    }\n}\n\nmacro_rules! write_val {\n    ($self:ident, $val:expr) => {{\n        $self.maybe_flush()?;\n        $self.scratch.push($val);\n        Ok(())\n    }};\n    ($self:ident, $val:expr, $put:ident) => {{\n        $self.maybe_flush()?;\n        $self.$put($val);\n        Ok(())\n    }};\n}\n\nimpl<'a, W> ser::Serializer for &'a mut Serializer<W>\nwhere\n    W: io::Write,\n{\n    type Ok = ();\n    type Error = Error;\n\n    type SerializeSeq = Compound<'a, W>;\n    type SerializeTuple = Compound<'a, W>;\n    type SerializeTupleStruct = Compound<'a, W>;\n    type SerializeTupleVariant = Compound<'a, W>;\n    type SerializeMap = Compound<'a, W>;\n    type SerializeStruct = Compound<'a, W>;\n    type SerializeStructVariant = Compound<'a, W>;\n\n    #[inline]\n    fn serialize_bool(self, value: bool) -> Result<()> {\n        if value {\n            write_val!(self, BSER_TRUE)\n        } else {\n            write_val!(self, BSER_FALSE)\n        }\n    }\n\n    #[inline]\n    fn serialize_i8(self, v: i8) -> Result<()> {\n        write_val!(self, v, put_i8)\n    }\n\n    #[inline]\n    fn serialize_i16(self, v: i16) -> Result<()> {\n        write_val!(self, v, put_i16)\n    }\n\n    #[inline]\n    fn serialize_i32(self, v: i32) -> Result<()> {\n        write_val!(self, v, put_i32)\n    }\n\n    #[inline]\n    fn serialize_i64(self, v: i64) -> Result<()> {\n        write_val!(self, v, put_i64)\n    }\n\n    #[inline]\n    fn serialize_u8(self, v: u8) -> Result<()> {\n        maybe_put_int!(self, v, i8, serialize_i8);\n        self.serialize_i16(v as i16)\n    }\n\n    #[inline]\n    fn serialize_u16(self, v: u16) -> Result<()> {\n        maybe_put_int!(self, v, i16, serialize_i16);\n        self.serialize_i32(v as i32)\n    }\n\n    #[inline]\n    fn serialize_u32(self, v: u32) -> Result<()> {\n        maybe_put_int!(self, v, i32, serialize_i32);\n        self.serialize_i64(v as i64)\n    }\n\n    #[inline]\n    fn serialize_u64(self, v: u64) -> Result<()> {\n        // maybe_put_int! doesn't work for u64 because it converts to i64\n        // internally.\n        if v > (i64::MAX as u64) {\n            Err(Error::SerU64TooBig { v })\n        } else {\n            self.serialize_i64(v as i64)\n        }\n    }\n\n    #[inline]\n    fn serialize_f32(self, v: f32) -> Result<()> {\n        self.serialize_f64(v as f64)\n    }\n\n    #[inline]\n    fn serialize_f64(self, v: f64) -> Result<()> {\n        self.maybe_flush()?;\n        self.scratch.push(BSER_REAL);\n        #[cfg(target_endian = \"little\")]\n        self.scratch.put_f64_le(v);\n        #[cfg(target_endian = \"big\")]\n        self.scratch.put_f64(v);\n        Ok(())\n    }\n\n    #[inline]\n    fn serialize_char(self, v: char) -> Result<()> {\n        self.serialize_str(&v.to_string())\n    }\n\n    #[inline]\n    fn serialize_str(self, v: &str) -> Result<()> {\n        self.maybe_flush()?;\n        self.scratch.push(BSER_UTF8STRING);\n        self.put_i64(v.len() as i64);\n        self.scratch.extend_from_slice(v.as_bytes());\n        Ok(())\n    }\n\n    #[inline]\n    fn serialize_bytes(self, v: &[u8]) -> Result<()> {\n        self.maybe_flush()?;\n        self.scratch.push(BSER_BYTESTRING);\n        self.put_i64(v.len() as i64);\n        self.scratch.extend_from_slice(v);\n        Ok(())\n    }\n\n    #[inline]\n    fn serialize_unit(self) -> Result<()> {\n        write_val!(self, BSER_NULL)\n    }\n\n    #[inline]\n    fn serialize_unit_struct(self, _name: &'static str) -> Result<()> {\n        self.serialize_unit()\n    }\n\n    #[inline]\n    fn serialize_unit_variant(\n        self,\n        _name: &'static str,\n        _variant_index: u32,\n        variant: &'static str,\n    ) -> Result<()> {\n        self.serialize_str(variant)\n    }\n\n    #[inline]\n    fn serialize_newtype_struct<T>(self, _name: &'static str, value: &T) -> Result<()>\n    where\n        T: ?Sized + ser::Serialize,\n    {\n        // This is e.g. E(T). Ignore the E.\n        value.serialize(self)\n    }\n\n    #[inline]\n    fn serialize_newtype_variant<T>(\n        self,\n        _name: &'static str,\n        _variant_index: u32,\n        variant: &'static str,\n        value: &T,\n    ) -> Result<()>\n    where\n        T: ?Sized + ser::Serialize,\n    {\n        use serde::ser::SerializeStruct;\n        // This is e.g. E { N(T) }, where N is the variant.\n        // Serialize this as {variant: value}\n        let mut ser_struct = self.serialize_struct(\"\", 1)?;\n        ser_struct.serialize_field(variant, value)?;\n        ser_struct.end()\n    }\n\n    #[inline]\n    fn serialize_none(self) -> Result<()> {\n        self.serialize_unit()\n    }\n\n    #[inline]\n    fn serialize_some<T>(self, value: &T) -> Result<()>\n    where\n        T: ?Sized + ser::Serialize,\n    {\n        value.serialize(self)\n    }\n\n    #[inline]\n    fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq> {\n        match len {\n            None => Err(Error::SerNeedSize { kind: \"sequence\" }),\n            Some(len) => self.serialize_tuple(len),\n        }\n    }\n\n    #[inline]\n    fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple> {\n        // (A, B, C) etc. Serialize this as an array.\n        self.maybe_flush()?;\n        self.scratch.push(BSER_ARRAY);\n        self.put_i64(len as i64);\n        Ok(Compound { ser: self })\n    }\n\n    #[inline]\n    fn serialize_tuple_struct(\n        self,\n        _name: &'static str,\n        len: usize,\n    ) -> Result<Self::SerializeTupleStruct> {\n        self.serialize_tuple(len)\n    }\n\n    #[inline]\n    fn serialize_tuple_variant(\n        self,\n        _name: &'static str,\n        _variant_index: u32,\n        variant: &'static str,\n        len: usize,\n    ) -> Result<Self::SerializeTupleVariant> {\n        // This is e.g. E { N(A, B, C) }, where N is the variant. Serialize this\n        // as { variant: [values] }.\n        self.maybe_flush()?;\n        self.scratch.push(BSER_OBJECT);\n        self.put_i8(1);\n        self.serialize_str(variant)?;\n        self.serialize_tuple(len)\n    }\n\n    #[inline]\n    fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap> {\n        match len {\n            None => Err(Error::SerNeedSize { kind: \"map\" }),\n            Some(len) => self.serialize_struct(\"\", len),\n        }\n    }\n\n    #[inline]\n    fn serialize_struct(self, _name: &'static str, len: usize) -> Result<Self::SerializeStruct> {\n        self.maybe_flush()?;\n        // BSER objects are serialized as <BSER_OBJECT><len>(<key><value>...).\n        self.scratch.push(BSER_OBJECT);\n        self.put_i64(len as i64);\n        Ok(Compound { ser: self })\n    }\n\n    #[inline]\n    fn serialize_struct_variant(\n        self,\n        name: &'static str,\n        variant_index: u32,\n        variant: &'static str,\n        len: usize,\n    ) -> Result<Self::SerializeStructVariant> {\n        // This is e.g. E { N { foo: A, bar: B } }, where N is the\n        // variant. Serialize this as { variant: { foo: valA, bar: valB } }.\n        // That's really the same as serialize_tuple_variant.\n        self.serialize_tuple_variant(name, variant_index, variant, len)\n    }\n}\n\n#[doc(hidden)]\npub struct Compound<'a, W> {\n    ser: &'a mut Serializer<W>,\n}\n\nmacro_rules! impl_compound {\n    ($trait:ty, [$($fns:ident),*]) => {\n        impl<'a, W> $trait for Compound<'a, W>\n            where W: io::Write\n        {\n            type Ok = ();\n            type Error = Error;\n\n            $(\n                #[inline]\n                fn $fns<T>(&mut self, value: &T) -> Result<()>\n                    where T: ?Sized + ser::Serialize\n                {\n                    value.serialize(&mut *self.ser)\n                }\n            )*\n\n            #[inline]\n            fn end(self) -> Result<()> {\n                Ok(())\n            }\n        }\n    }\n}\n\nimpl_compound!(ser::SerializeSeq, [serialize_element]);\nimpl_compound!(ser::SerializeTuple, [serialize_element]);\nimpl_compound!(ser::SerializeTupleStruct, [serialize_field]);\nimpl_compound!(ser::SerializeTupleVariant, [serialize_field]);\nimpl_compound!(ser::SerializeMap, [serialize_key, serialize_value]);\n\nmacro_rules! impl_compound_struct {\n    ($trait:ty) => {\n        impl<'a, W> $trait for Compound<'a, W>\n        where\n            W: io::Write,\n        {\n            type Ok = ();\n            type Error = Error;\n\n            #[inline]\n            fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<()>\n            where\n                T: ?Sized + ser::Serialize,\n            {\n                // TODO: this can go wrong if writing out the key succeeds but\n                // writing the value fails.\n                ser::SerializeMap::serialize_key(self, key)?;\n                ser::SerializeMap::serialize_value(self, value)\n            }\n\n            #[inline]\n            fn end(self) -> Result<()> {\n                ser::SerializeMap::end(self)\n            }\n        }\n    };\n}\n\nimpl_compound_struct!(ser::SerializeStruct);\nimpl_compound_struct!(ser::SerializeStructVariant);\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/ser/test.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::f64::consts;\n\nuse serde::Serialize;\n\nuse super::serialize;\n\n#[derive(Debug, Serialize)]\nenum TestEnum {\n    TestUnit,\n    TestNewtype(#[serde(with = \"serde_bytes\")] &'static [u8]),\n    TestTuple(i8, u64),\n    TestStruct { abc: (), def: char },\n}\n\n#[derive(Debug, Serialize)]\nstruct SerializeStruct {\n    test_list: Vec<i32>,\n    test_tuple: (String, Option<f64>),\n    test_enum: TestEnum,\n    test_enum_list: Vec<TestEnum>,\n}\n\nconst BASIC_SERIALIZED: &[u8] = b\"\\x00\\x02\\x00\\x00\\x00\\x00\\x04\\xcb\\x00\\x01\\x03\\x04\\r\\x03\\t\\\n                                  test_list\\x00\\x03\\x05\\x03\\x03\\x03\\x04\\x03*\\x04\\xdb\\x03\\x05\\x00\\\n                                  \\x00\\x08\\x00\\r\\x03\\ntest_tuple\\x00\\x03\\x02\\r\\x03\\x03foo\\x07\\\n                                  \\x18-DT\\xfb!\\t@\\r\\x03\\ttest_enum\\r\\x03\\x08TestUnit\\r\\x03\\x0e\\\n                                  test_enum_list\\x00\\x03\\x03\\x01\\x03\\x01\\r\\x03\\x0bTestNewtype\\\n                                  \\x02\\x03\\tBSER test\\x01\\x03\\x01\\r\\x03\\tTestTuple\\x00\\x03\\x02\\x03*\\\n                                  \\x06\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x7f\\x01\\x03\\x01\\r\\x03\\n\\\n                                  TestStruct\\x00\\x03\\x02\\r\\x03\\x03abc\\n\\r\\x03\\x03\\\n                                  def\\r\\x03\\x04\\xf0\\x9f\\x92\\xa9\";\n\n#[test]\nfn test_basic_serialize() {\n    let to_serialize = SerializeStruct {\n        test_list: vec![3, 4, 42, 987, 2 << 18],\n        test_tuple: (\"foo\".into(), Some(consts::PI)),\n        test_enum: TestEnum::TestUnit,\n        test_enum_list: vec![\n            TestEnum::TestNewtype(&b\"BSER test\"[..]),\n            TestEnum::TestTuple(42, i64::MAX as u64),\n            TestEnum::TestStruct {\n                abc: (),\n                def: '\\u{1f4a9}',\n            },\n        ],\n    };\n\n    let out = Vec::new();\n    let out = serialize(out, to_serialize).unwrap();\n    assert_eq!(out, BASIC_SERIALIZED);\n}\n"
  },
  {
    "path": "watchman/rust/serde_bser/src/value.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::collections::HashMap;\nuse std::path::PathBuf;\n\nuse serde::Serialize;\nuse serde::de::Deserialize;\nuse serde::de::MapAccess;\nuse serde::de::SeqAccess;\nuse serde::de::Visitor;\n\nuse crate::bytestring::ByteString;\n\n/// The Value type is used in cases where the schema is not known statically.\n/// As used in Watchman's protocol, this allows encoding arbitrary metadata\n/// that can be passed through the system by eg: the `state-enter` command,\n/// or returned from a saved state storage engine.\n/// The values are conceptually equivalent to json values, with the notable\n/// difference that BSER can represent a binary byte string value.\n#[derive(Debug, Clone, PartialEq)]\npub enum Value {\n    Array(Vec<Value>),\n    Object(HashMap<String, Value>),\n    ByteString(ByteString),\n    Integer(i64),\n    Real(f64),\n    Bool(bool),\n    Null,\n    Utf8String(String),\n}\n\nimpl From<Vec<Value>> for Value {\n    fn from(v: Vec<Value>) -> Self {\n        Self::Array(v)\n    }\n}\n\nimpl From<HashMap<String, Value>> for Value {\n    fn from(v: HashMap<String, Value>) -> Self {\n        Self::Object(v)\n    }\n}\n\nimpl From<bool> for Value {\n    fn from(v: bool) -> Self {\n        Self::Bool(v)\n    }\n}\n\nimpl From<&str> for Value {\n    fn from(s: &str) -> Self {\n        Self::Utf8String(s.to_string())\n    }\n}\n\nimpl From<String> for Value {\n    fn from(s: String) -> Self {\n        Self::Utf8String(s)\n    }\n}\n\nimpl TryInto<Value> for PathBuf {\n    type Error = &'static str;\n\n    fn try_into(self) -> Result<Value, Self::Error> {\n        let s: ByteString = self.try_into()?;\n        Ok(Value::ByteString(s))\n    }\n}\n\nimpl From<i64> for Value {\n    fn from(v: i64) -> Self {\n        Self::Integer(v)\n    }\n}\n\nimpl TryInto<Value> for usize {\n    type Error = &'static str;\n\n    fn try_into(self) -> Result<Value, Self::Error> {\n        if self > i64::MAX as usize {\n            Err(\"value is too large to represent as i64\")\n        } else {\n            Ok(Value::Integer(self as i64))\n        }\n    }\n}\n\nimpl<'de> Deserialize<'de> for Value {\n    #[inline]\n    fn deserialize<D>(deserializer: D) -> Result<Value, D::Error>\n    where\n        D: serde::Deserializer<'de>,\n    {\n        struct ValueVisitor;\n\n        impl<'de> Visitor<'de> for ValueVisitor {\n            type Value = Value;\n\n            fn expecting(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n                formatter.write_str(\"any valid BSER value\")\n            }\n\n            #[inline]\n            fn visit_bool<E>(self, value: bool) -> Result<Value, E> {\n                Ok(Value::Bool(value))\n            }\n\n            #[inline]\n            fn visit_i64<E>(self, value: i64) -> Result<Value, E> {\n                Ok(Value::Integer(value))\n            }\n\n            /*\n            #[inline]\n            fn visit_u64<E>(self, v: u64) -> Result<Value, E> {\n                // maybe_put_int! doesn't work for u64 because it converts to i64\n                // internally.\n                if v > (i64::MAX as u64) {\n                    Err(serde::de::Error::custom(format!(\n                        \"value {} is too large to represent as a BSER integer\",\n                        v\n                    )))\n                } else {\n                    Ok(Value::Integer(v as i64))\n                }\n            }\n            */\n\n            #[inline]\n            fn visit_f64<E>(self, value: f64) -> Result<Value, E> {\n                Ok(Value::Real(value))\n            }\n\n            #[inline]\n            fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E> {\n                Ok(Value::ByteString(value.to_vec().into()))\n            }\n\n            #[inline]\n            fn visit_byte_buf<E>(self, value: Vec<u8>) -> Result<Self::Value, E> {\n                Ok(Value::ByteString(value.into()))\n            }\n\n            #[inline]\n            fn visit_str<E>(self, value: &str) -> Result<Value, E>\n            where\n                E: serde::de::Error,\n            {\n                self.visit_string(String::from(value))\n            }\n\n            #[inline]\n            fn visit_string<E>(self, value: String) -> Result<Value, E> {\n                Ok(Value::Utf8String(value))\n            }\n\n            #[inline]\n            fn visit_some<D>(self, deserializer: D) -> Result<Value, D::Error>\n            where\n                D: serde::Deserializer<'de>,\n            {\n                Deserialize::deserialize(deserializer)\n            }\n\n            #[inline]\n            fn visit_none<E>(self) -> Result<Value, E> {\n                Ok(Value::Null)\n            }\n\n            #[inline]\n            fn visit_unit<E>(self) -> Result<Value, E> {\n                Ok(Value::Null)\n            }\n\n            #[inline]\n            fn visit_seq<V>(self, mut visitor: V) -> Result<Value, V::Error>\n            where\n                V: SeqAccess<'de>,\n            {\n                let mut vec = Vec::new();\n\n                while let Some(elem) = visitor.next_element()? {\n                    vec.push(elem);\n                }\n\n                Ok(Value::Array(vec))\n            }\n\n            fn visit_map<V>(self, mut visitor: V) -> Result<Value, V::Error>\n            where\n                V: MapAccess<'de>,\n            {\n                match visitor.next_key()? {\n                    Some(Value::ByteString(key)) => {\n                        let mut values = HashMap::new();\n\n                        values.insert(\n                            key.try_into().map_err(serde::de::Error::custom)?,\n                            visitor.next_value()?,\n                        );\n                        while let Some((key, value)) = visitor.next_entry()? {\n                            values.insert(key, value);\n                        }\n\n                        Ok(Value::Object(values))\n                    }\n                    Some(Value::Utf8String(key)) => {\n                        let mut values = HashMap::new();\n\n                        values.insert(key, visitor.next_value()?);\n                        while let Some((key, value)) = visitor.next_entry()? {\n                            values.insert(key, value);\n                        }\n\n                        Ok(Value::Object(values))\n                    }\n                    Some(value) => Err(serde::de::Error::custom(format!(\n                        \"value {:?} is illegal as a key in a BSER map\",\n                        value\n                    ))),\n                    None => Ok(Value::Object(HashMap::new())),\n                }\n            }\n        }\n\n        deserializer.deserialize_any(ValueVisitor)\n    }\n}\n\nimpl Serialize for Value {\n    #[inline]\n    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: ::serde::Serializer,\n    {\n        match *self {\n            Value::Null => serializer.serialize_unit(),\n            Value::Bool(b) => serializer.serialize_bool(b),\n            Value::Integer(n) => serializer.serialize_i64(n),\n            Value::Real(n) => serializer.serialize_f64(n),\n            Value::Utf8String(ref s) => serializer.serialize_str(s),\n            Value::ByteString(ref b) => serializer.serialize_bytes(b.as_bytes()),\n            Value::Array(ref v) => v.serialize(serializer),\n            Value::Object(ref m) => {\n                use serde::ser::SerializeMap;\n                let mut map = serializer.serialize_map(Some(m.len()))?;\n                for (k, v) in m {\n                    map.serialize_key(k)?;\n                    map.serialize_value(v)?;\n                }\n                map.end()\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "watchman/rust/watchman_client/BUCK",
    "content": "load(\"@fbsource//tools/build_defs:rust_binary.bzl\", \"rust_binary\")\nload(\"@fbsource//tools/build_defs:rust_library.bzl\", \"rust_library\")\n\noncall(\"scm_client_infra\")\n\nrust_library(\n    name = \"watchman_client\",\n    srcs = glob([\"src/**/*.rs\"]),\n    preferred_linkage = \"static\",\n    deps = [\n        \"fbsource//third-party/rust:anyhow\",\n        \"fbsource//third-party/rust:bytes\",\n        \"fbsource//third-party/rust:futures\",\n        \"fbsource//third-party/rust:maplit\",\n        \"fbsource//third-party/rust:serde\",\n        \"fbsource//third-party/rust:thiserror\",\n        \"fbsource//third-party/rust:tokio\",\n        \"fbsource//third-party/rust:tokio-util\",\n        \"//watchman/rust/serde_bser:serde_bser\",\n    ] + select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:windows\": [\n            \"fbsource//third-party/rust:winapi\",\n        ],\n    }),\n)\n\nrust_binary(\n    name = \"state\",\n    srcs = [\"examples/state.rs\"],\n    link_style = \"static\",\n    deps = [\n        \"fbsource//third-party/rust:clap\",\n        \"fbsource//third-party/rust:tokio\",\n        \":watchman_client\",\n    ],\n)\n\nrust_binary(\n    name = \"glob\",\n    srcs = [\"examples/glob.rs\"],\n    link_style = \"static\",\n    deps = [\n        \"fbsource//third-party/rust:clap\",\n        \"fbsource//third-party/rust:serde\",\n        \"fbsource//third-party/rust:tokio\",\n        \":watchman_client\",\n    ],\n)\n\nrust_binary(\n    name = \"subscribe\",\n    srcs = [\"examples/subscribe.rs\"],\n    link_style = \"static\",\n    deps = [\n        \"fbsource//third-party/rust:clap\",\n        \"fbsource//third-party/rust:tokio\",\n        \":watchman_client\",\n    ],\n)\n\nrust_binary(\n    name = \"since\",\n    srcs = [\"examples/since.rs\"],\n    link_style = \"static\",\n    deps = [\n        \"fbsource//third-party/rust:clap\",\n        \"fbsource//third-party/rust:tokio\",\n        \":watchman_client\",\n    ],\n)\n"
  },
  {
    "path": "watchman/rust/watchman_client/Cargo.toml",
    "content": "[package]\nname = \"watchman_client\"\nversion = \"0.9.0\"\nauthors = [\"Wez Furlong\"]\nedition = \"2021\"\ndescription = \"a client for the Watchman file watching service\"\ndocumentation = \"https://docs.rs/watchman_client\"\nrepository = \"https://github.com/facebook/watchman/\"\nlicense = \"MIT\"\nexclude = [\"examples/*\"]\n\n[dependencies]\nanyhow = \"1.0\"\nbytes = { version = \"1.9\", features = [\"serde\"] }\nfutures = { version = \"0.3.13\", features = [\"async-await\", \"compat\"] }\nmaplit = \"1.0\"\nserde = { version = \"1.0.126\", features = [\"derive\", \"rc\"] }\nserde_bser = { version = \"0.4\", path = \"../serde_bser\" }\nthiserror = \"2.0\"\ntokio = { version = \"1.45\", features = [\"full\", \"test-util\"] }\ntokio-util = { version = \"0.7\", features = [\"full\"] }\n\n[target.'cfg(windows)'.dependencies]\nwinapi = { version = \"0.3\", features = [\"fileapi\", \"handleapi\", \"winbase\", \"winuser\"] }\n\n[dev-dependencies]\nclap = { version = \"4.5.7\", features = [\"derive\"] }\n\n[lints.rust]\nunexpected_cfgs = { level = \"warn\", check-cfg = [\"cfg(fbcode_build)\"] }\n"
  },
  {
    "path": "watchman/rust/watchman_client/LICENSE",
    "content": "MIT License\n\nCopyright (c) Meta Platforms, Inc. and its affiliates.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "watchman/rust/watchman_client/examples/glob.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::path::PathBuf;\n\nuse clap::Parser;\nuse serde::Deserialize;\nuse watchman_client::prelude::*;\n\n/// Perform a glob query for a path, using watchman\n#[derive(Debug, Parser)]\nstruct Cli {\n    #[arg(default_value = \".\")]\n    path: PathBuf,\n}\n\n#[tokio::main(flavor = \"current_thread\")]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    if let Err(err) = run().await {\n        // Print a prettier error than the default\n        eprintln!(\"{}\", err);\n        std::process::exit(1);\n    }\n    Ok(())\n}\n\nasync fn run() -> Result<(), Box<dyn std::error::Error>> {\n    let opt = Cli::parse();\n    let client = Connector::new().connect().await?;\n    let resolved = client\n        .resolve_root(CanonicalPath::canonicalize(opt.path)?)\n        .await?;\n\n    println!(\"resolved watch to {:?}\", resolved);\n\n    // Basic globs -> names\n    let files = client.glob(&resolved, &[\"**/*.rs\"]).await?;\n    println!(\"files: {:#?}\", files);\n\n    query_result_type! {\n        struct NameAndHash {\n            name: NameField,\n            hash: ContentSha1HexField,\n        }\n    }\n\n    let response: QueryResult<NameAndHash> = client\n        .query(\n            &resolved,\n            QueryRequestCommon {\n                glob: Some(vec![\"**/*.rs\".to_string()]),\n                expression: Some(Expr::Not(Box::new(Expr::Empty))),\n                ..Default::default()\n            },\n        )\n        .await?;\n    println!(\"response: {:#?}\", response);\n\n    Ok(())\n}\n"
  },
  {
    "path": "watchman/rust/watchman_client/examples/since.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! This example shows how to send a query to watchman and print out the files\n//! changed since the given timestamp.\n\nuse std::path::PathBuf;\n\nuse clap::Parser;\nuse watchman_client::prelude::*;\n\n/// Query files changed since a timestamp\n#[derive(Debug, Parser)]\nstruct Cli {\n    /// Specifies the clock. Use `watchman clock <PATH>` to retrieve the current\n    /// clock of a watched directory\n    clock: String,\n\n    #[arg(short, long)]\n    /// [not recommended] Uses Unix timestamp as clock\n    unix_timestamp: bool,\n\n    #[arg(short, long, default_value = \".\")]\n    /// Specifies the path to watched directory\n    path: PathBuf,\n}\n\n#[tokio::main(flavor = \"current_thread\")]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    if let Err(err) = run().await {\n        // Print a prettier error than the default\n        eprintln!(\"{}\", err);\n        std::process::exit(1);\n    }\n    Ok(())\n}\n\nasync fn run() -> Result<(), Box<dyn std::error::Error>> {\n    let opt = Cli::parse();\n    let client = Connector::new().connect().await?;\n    let resolved = client\n        .resolve_root(CanonicalPath::canonicalize(opt.path)?)\n        .await?;\n\n    let clock_spec = if opt.unix_timestamp {\n        // it is better to use watchman's clock rather than Unix timestamp.\n        // see `watchman_client::pdu::ClockSpec::unix_timestamp` for details.\n        ClockSpec::UnixTimestamp(opt.clock.parse()?)\n    } else {\n        ClockSpec::StringClock(opt.clock)\n    };\n\n    let result = client\n        .query::<NameOnly>(\n            &resolved,\n            QueryRequestCommon {\n                since: Some(Clock::Spec(clock_spec.clone())),\n                ..Default::default()\n            },\n        )\n        .await?;\n\n    eprintln!(\"Clock is now: {:?}\", result.clock);\n\n    if let Some(files) = result.files {\n        for file in files.iter() {\n            println!(\"{}\", file.name.display());\n        }\n    } else {\n        eprintln!(\"no file changed since {:?}\", clock_spec);\n    }\n\n    Ok(())\n}\n"
  },
  {
    "path": "watchman/rust/watchman_client/examples/state.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nuse std::path::PathBuf;\n\nuse clap::Parser;\nuse watchman_client::prelude::*;\n\n/// Exercise the state-enter and state-leave commands\n#[derive(Debug, Parser)]\nstruct Cli {\n    #[arg(default_value = \".\")]\n    path: PathBuf,\n}\n\n#[tokio::main(flavor = \"current_thread\")]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    if let Err(err) = run().await {\n        // Print a prettier error than the default\n        eprintln!(\"{}\", err);\n        std::process::exit(1);\n    }\n    Ok(())\n}\n\nasync fn run() -> Result<(), Box<dyn std::error::Error>> {\n    let opt = Cli::parse();\n    let client = Connector::new().connect().await?;\n    let resolved = client\n        .resolve_root(CanonicalPath::canonicalize(opt.path)?)\n        .await?;\n\n    println!(\"resolved watch to {:?}\", resolved);\n\n    let asserted_states = client.get_asserted_states(&resolved).await?;\n    println!(\"Asserted states: {:?}\", asserted_states);\n    client\n        .state_enter(&resolved, \"woot\", SyncTimeout::Default, None)\n        .await?;\n    println!(\"asserted woot state\");\n    tokio::time::sleep(std::time::Duration::from_secs(10)).await;\n    let asserted_states = client.get_asserted_states(&resolved).await?;\n    println!(\"Asserted states: {:?}\", asserted_states);\n    tokio::time::sleep(std::time::Duration::from_secs(10)).await;\n    client\n        .state_leave(&resolved, \"woot\", SyncTimeout::Default, None)\n        .await?;\n    println!(\"vacated woot state\");\n    tokio::time::sleep(std::time::Duration::from_secs(10)).await;\n    let asserted_states = client.get_asserted_states(&resolved).await?;\n    println!(\"Asserted states: {:?}\", asserted_states);\n    Ok(())\n}\n"
  },
  {
    "path": "watchman/rust/watchman_client/examples/subscribe.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! This example shows how to initiate a subscription and print out\n//! file changes as they are reported\nuse std::path::PathBuf;\n\nuse clap::Parser;\nuse watchman_client::prelude::*;\n\n/// Subscribe to watchman and stream file changes for a path\n#[derive(Debug, Parser)]\nstruct Cli {\n    #[arg(default_value = \".\")]\n    path: PathBuf,\n}\n\n#[tokio::main(flavor = \"current_thread\")]\nasync fn main() {\n    if let Err(err) = run().await {\n        // Print a prettier error than the default\n        eprintln!(\"{}\", err);\n        std::process::exit(1);\n    }\n}\n\nasync fn run() -> Result<(), Box<dyn std::error::Error>> {\n    let opt = Cli::parse();\n    let client = Connector::new().connect().await?;\n    let resolved = client\n        .resolve_root(CanonicalPath::canonicalize(opt.path)?)\n        .await?;\n\n    let (mut sub, initial) = client\n        .subscribe::<NameOnly>(&resolved, SubscribeRequest::default())\n        .await?;\n\n    println!(\"{} {:#?}\", sub.name(), initial);\n    loop {\n        let item = sub.next().await?;\n        println!(\"{:#?}\", item);\n    }\n}\n"
  },
  {
    "path": "watchman/rust/watchman_client/examples/trigger.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! This example shows how to setup and remove a persistent trigger.\n\nuse std::path::Path;\nuse std::path::PathBuf;\n\nuse clap::Parser;\nuse watchman_client::prelude::*;\n\n/// Interact with watchman triggers.\n#[derive(Debug, Parser)]\nenum Cli {\n    /// Registers a watcher trigger that will stream the list of files modified.\n    Register {\n        /// Specifies the path to watched directory\n        path: PathBuf,\n\n        /// Specifies the name of the trigger to register.\n        name: String,\n\n        /// Specifies the output file, must be prefixed with `>` or `>>`.\n        output_file: String,\n    },\n    /// Removes a watcher trigger.\n    Del {\n        /// Specifies the path to watched directory\n        path: PathBuf,\n\n        /// Specifies the name of the trigger to remove.\n        name: String,\n    },\n    /// Lists all watcher triggers for a path.\n    List {\n        /// Specifies the path to watched directory\n        path: PathBuf,\n    },\n}\nimpl Cli {\n    fn path(&self) -> &Path {\n        match self {\n            Self::Register { path, .. } => path,\n            Self::Del { path, .. } => path,\n            Self::List { path, .. } => path,\n        }\n    }\n}\n\n#[tokio::main(flavor = \"current_thread\")]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    if let Err(err) = run().await {\n        // Print a prettier error than the default\n        eprintln!(\"{}\", err);\n        std::process::exit(1);\n    }\n    Ok(())\n}\n\nasync fn run() -> Result<(), Box<dyn std::error::Error>> {\n    let command = Cli::parse();\n    let client = Connector::new().connect().await?;\n\n    let resolved = client\n        .resolve_root(CanonicalPath::canonicalize(command.path())?)\n        .await?;\n\n    match command {\n        Cli::Del { name, .. } => {\n            let result = client.remove_trigger(&resolved, &name).await?;\n            println!(\"{:?}\", result);\n        }\n        Cli::List { .. } => {\n            let result = client.list_triggers(&resolved).await?;\n            println!(\"{:?}\", result);\n        }\n        Cli::Register {\n            name, output_file, ..\n        } => {\n            let result = client\n                .register_trigger(\n                    &resolved,\n                    TriggerRequest {\n                        name,\n                        stdout: Some(output_file),\n                        stdin: Some(TriggerStdinConfig::NamePerLine),\n                        command: vec![\"cat\".to_string()],\n                        ..Default::default()\n                    },\n                )\n                .await?;\n            println!(\"{:?}\", result);\n        }\n    }\n\n    Ok(())\n}\n"
  },
  {
    "path": "watchman/rust/watchman_client/src/expr.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! Working with the watchman expression term syntax\nuse std::path::PathBuf;\n\nuse maplit::hashmap;\nuse serde::Serialize;\nuse serde_bser::value::Value;\n\nuse crate::pdu::*;\n\n/// An expression term used to filter candidate files from query results.\n#[derive(Serialize, Debug, Clone)]\n#[serde(into = \"Value\")]\npub enum Expr {\n    /// Always evaluates to true\n    True,\n\n    /// Always evaluates to false\n    False,\n\n    /// Inverts the match state of the child term\n    Not(Box<Expr>),\n\n    /// Evaluates to true IFF all child terms evaluate true\n    All(Vec<Expr>),\n\n    /// Evaluates to true if any child terms evaluate true\n    Any(Vec<Expr>),\n\n    /// Match on the parent directory structure\n    /// <https://facebook.github.io/watchman/docs/expr/dirname.html>\n    DirName(DirNameTerm),\n\n    /// Evaluates as true if the file exists, has size 0 and is a regular\n    /// file or directory.\n    /// <https://facebook.github.io/watchman/docs/expr/empty.html>\n    Empty,\n\n    /// Evaluates as true if the file exists; this is useful for filtering\n    /// out notifications for files that have been deleted.\n    /// Note that this term doesn't add value for `path` and `glob` generators\n    /// which implicitly add this constraint.\n    /// <https://facebook.github.io/watchman/docs/expr/exists.html>\n    Exists,\n\n    /// Performs a glob-style match against the file name\n    /// <https://facebook.github.io/watchman/docs/expr/match.html>\n    Match(MatchTerm),\n\n    /// Performs an exact match against the file name.\n    /// <https://facebook.github.io/watchman/docs/expr/name.html>\n    Name(NameTerm),\n\n    /// Use PCRE to match the filename.\n    /// Note that this is an optional server feature and using this term\n    /// on a server that doesn't support this feature will generate an\n    /// error in response to the query.\n    /// <https://facebook.github.io/watchman/docs/expr/pcre.html>\n    Pcre(PcreTerm),\n\n    /// Evaluates as true if the specified time property of the file is\n    /// greater than the since value.\n    /// <https://facebook.github.io/watchman/docs/expr/since.html>\n    Since(SinceTerm),\n\n    /// Evaluate as true if the size of a file matches the specified constraint.\n    /// Files that do not presently exist will evaluate as false.\n    /// <https://facebook.github.io/watchman/docs/expr/size.html>\n    Size(RelOp),\n\n    /// Evaluate as true if the filename suffix (also known as extension)\n    /// matches the provided set of suffixes.\n    /// Suffix matches are always case insensitive.\n    /// `php` matches `foo.php` and `foo.PHP` but not `foophp`.\n    /// <https://facebook.github.io/watchman/docs/expr/suffix.html>\n    Suffix(Vec<PathBuf>),\n\n    /// Evaluate as true if the file type exactly matches the specified type.\n    FileType(FileType),\n}\n\nimpl From<Expr> for Value {\n    fn from(val: Expr) -> Self {\n        match val {\n            Expr::True => \"true\".into(),\n            Expr::False => \"false\".into(),\n            Expr::Not(expr) => Value::Array(vec![\"not\".into(), (*expr).into()]),\n            Expr::All(expr) => {\n                let mut expr: Vec<Value> = expr.into_iter().map(Into::into).collect();\n                expr.insert(0, \"allof\".into());\n                Value::Array(expr)\n            }\n            Expr::Any(expr) => {\n                let mut expr: Vec<Value> = expr.into_iter().map(Into::into).collect();\n                expr.insert(0, \"anyof\".into());\n                Value::Array(expr)\n            }\n            Expr::DirName(term) => {\n                let mut expr: Vec<Value> = vec![\"dirname\".into(), term.path.try_into().unwrap()];\n                if let Some(depth) = term.depth {\n                    expr.push(depth.into_term(\"depth\"));\n                }\n                expr.into()\n            }\n            Expr::Empty => \"empty\".into(),\n            Expr::Exists => \"exists\".into(),\n            Expr::Match(term) => vec![\n                \"match\".into(),\n                term.glob.into(),\n                if term.wholename {\n                    \"wholename\"\n                } else {\n                    \"basename\"\n                }\n                .into(),\n                Value::Object(hashmap! {\n                    \"includedotfiles\".to_string() => term.include_dot_files.into(),\n                    \"noescape\".to_string() => term.no_escape.into()\n                }),\n            ]\n            .into(),\n            Expr::Name(term) => vec![\n                \"name\".into(),\n                Value::Array(\n                    term.paths\n                        .into_iter()\n                        .map(|p| p.try_into().unwrap())\n                        .collect(),\n                ),\n                if term.wholename {\n                    \"wholename\"\n                } else {\n                    \"basename\"\n                }\n                .into(),\n            ]\n            .into(),\n            Expr::Pcre(term) => vec![\n                \"pcre\".into(),\n                term.pattern.into(),\n                if term.wholename {\n                    \"wholename\"\n                } else {\n                    \"basename\"\n                }\n                .into(),\n            ]\n            .into(),\n            Expr::Since(term) => match term {\n                SinceTerm::ObservedClock(c) => {\n                    vec![\"since\".into(), c.into(), \"oclock\".into()].into()\n                }\n                SinceTerm::CreatedClock(c) => {\n                    vec![\"since\".into(), c.into(), \"cclock\".into()].into()\n                }\n                SinceTerm::MTime(c) => {\n                    vec![\"since\".into(), c.to_string().into(), \"mtime\".into()].into()\n                }\n                SinceTerm::CTime(c) => {\n                    vec![\"since\".into(), c.to_string().into(), \"ctime\".into()].into()\n                }\n            },\n            Expr::Size(term) => term.into_term(\"size\"),\n            Expr::Suffix(term) => vec![\n                \"suffix\".into(),\n                Value::Array(term.into_iter().map(|p| p.try_into().unwrap()).collect()),\n            ]\n            .into(),\n            Expr::FileType(term) => vec![\"type\".into(), term.to_string().into()].into(),\n        }\n    }\n}\n\n/// Performs an exact match against the file name.\n/// <https://facebook.github.io/watchman/docs/expr/name.html>\n#[derive(Clone, Debug)]\npub struct NameTerm {\n    pub paths: Vec<PathBuf>,\n    /// By default, the name is evaluated against the basename portion\n    /// of the filename.  Set wholename=true to have it match against\n    /// the path relative to the root of the project.\n    pub wholename: bool,\n}\n\n/// Match on the parent directory structure\n/// <https://facebook.github.io/watchman/docs/expr/dirname.html>\n#[derive(Clone, Debug)]\npub struct DirNameTerm {\n    /// The path to a directory\n    pub path: PathBuf,\n    /// Specifies the matching depth.  A file has depth == 0\n    /// if it is contained directory within `path`, depth == 1 if\n    /// it is in a direct child directory of `path`, depth == 2 if\n    /// in a grand-child directory and so on.\n    /// If None, the default is considered to GreaterOrEqual depth 0.\n    pub depth: Option<RelOp>,\n}\n\n/// Use PCRE to match the filename.\n/// Note that this is an optional server feature and using this term\n/// on a server that doesn't support this feature will generate an\n/// error in response to the query.\n/// <https://facebook.github.io/watchman/docs/expr/pcre.html>\n#[derive(Clone, Debug, Default)]\npub struct PcreTerm {\n    /// The perl compatible regular expression\n    pub pattern: String,\n\n    /// By default, the name is evaluated against the basename portion\n    /// of the filename.  Set wholename=true to have it match against\n    /// the path relative to the root of the project.\n    pub wholename: bool,\n}\n\n/// Encodes the match expression term\n/// <https://facebook.github.io/watchman/docs/expr/match.html>\n#[derive(Clone, Debug, Default)]\npub struct MatchTerm {\n    /// The glob expression to evaluate\n    pub glob: String,\n    /// By default, the glob is evaluated against the basename portion\n    /// of the filename.  Set wholename=true to have it match against\n    /// the path relative to the root of the project.\n    pub wholename: bool,\n    /// By default, paths whose names start with a `.` are not matched.\n    /// Set include_dot_files=true to include them\n    pub include_dot_files: bool,\n    /// By default, backslashes in the pattern escape the next character.\n    /// To have `\\` treated literally, set no_escape=true.\n    pub no_escape: bool,\n}\n\n/// Specifies a relational comparison with an integer value\n#[derive(Clone, Debug)]\npub enum RelOp {\n    Equal(usize),\n    NotEqual(usize),\n    Greater(usize),\n    GreaterOrEqual(usize),\n    Less(usize),\n    LessOrEqual(usize),\n}\n\nimpl RelOp {\n    fn into_term(self, field: &str) -> Value {\n        let (op, value) = match self {\n            Self::Equal(value) => (\"eq\", value),\n            Self::NotEqual(value) => (\"ne\", value),\n            Self::Greater(value) => (\"gt\", value),\n            Self::GreaterOrEqual(value) => (\"ge\", value),\n            Self::Less(value) => (\"lt\", value),\n            Self::LessOrEqual(value) => (\"le\", value),\n        };\n        Value::Array(vec![field.into(), op.into(), value.try_into().unwrap()])\n    }\n}\n\n/// Evaluates as true if the specified time property of the file is greater\n/// than the since value.\n/// <https://facebook.github.io/watchman/docs/expr/since.html>\n#[derive(Clone, Debug)]\npub enum SinceTerm {\n    /// Yield true if the file was observed to be modified more recently than\n    /// the specified clockspec\n    ObservedClock(ClockSpec),\n\n    /// Yield true if the file changed from !exists -> exists more recently\n    /// than the specified clockspec\n    CreatedClock(ClockSpec),\n\n    /// Yield true if the mtime stat field is >= the provided timestamp.\n    /// Note that this is >= because it has 1-second granularity.\n    MTime(i64),\n\n    /// Yield true if the ctime stat field is >= the provided timestamp.\n    /// Note that this is >= because it has 1-second granularity.\n    CTime(i64),\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    fn val(expr: Expr) -> Value {\n        expr.into()\n    }\n\n    #[test]\n    fn exprs() {\n        assert_eq!(val(Expr::True), \"true\".into());\n        assert_eq!(val(Expr::False), \"false\".into());\n        assert_eq!(val(Expr::Empty), \"empty\".into());\n        assert_eq!(val(Expr::Exists), \"exists\".into());\n        assert_eq!(\n            val(Expr::Not(Box::new(Expr::False))),\n            vec![\"not\".into(), \"false\".into()].into()\n        );\n        assert_eq!(\n            val(Expr::All(vec![Expr::True, Expr::False])),\n            vec![\"allof\".into(), \"true\".into(), \"false\".into()].into()\n        );\n        assert_eq!(\n            val(Expr::Any(vec![Expr::True, Expr::False])),\n            vec![\"anyof\".into(), \"true\".into(), \"false\".into()].into()\n        );\n\n        assert_eq!(\n            val(Expr::DirName(DirNameTerm {\n                path: \"foo\".into(),\n                depth: None,\n            })),\n            vec![\"dirname\".into(), Value::ByteString(\"foo\".into())].into()\n        );\n        assert_eq!(\n            val(Expr::DirName(DirNameTerm {\n                path: \"foo\".into(),\n                depth: Some(RelOp::GreaterOrEqual(1)),\n            })),\n            vec![\n                \"dirname\".into(),\n                Value::ByteString(\"foo\".into()),\n                vec![\"depth\".into(), \"ge\".into(), 1.into()].into()\n            ]\n            .into()\n        );\n\n        assert_eq!(\n            val(Expr::Match(MatchTerm {\n                glob: \"*.txt\".into(),\n                ..Default::default()\n            })),\n            vec![\n                \"match\".into(),\n                \"*.txt\".into(),\n                \"basename\".into(),\n                hashmap! {\n                    \"includedotfiles\".to_string() => Value::Bool(false),\n                    \"noescape\".to_string() => Value::Bool(false),\n                }\n                .into()\n            ]\n            .into()\n        );\n\n        assert_eq!(\n            val(Expr::Match(MatchTerm {\n                glob: \"*.txt\".into(),\n                wholename: true,\n                include_dot_files: true,\n                ..Default::default()\n            })),\n            vec![\n                \"match\".into(),\n                \"*.txt\".into(),\n                \"wholename\".into(),\n                hashmap! {\n                    \"includedotfiles\".to_string() => Value::Bool(true),\n                    \"noescape\".to_string() => Value::Bool(false),\n                }\n                .into()\n            ]\n            .into()\n        );\n\n        assert_eq!(\n            val(Expr::Name(NameTerm {\n                paths: vec![\"foo\".into()],\n                wholename: true,\n            })),\n            vec![\n                \"name\".into(),\n                vec![Value::ByteString(\"foo\".into())].into(),\n                \"wholename\".into()\n            ]\n            .into()\n        );\n\n        assert_eq!(\n            val(Expr::Pcre(PcreTerm {\n                pattern: \"foo$\".into(),\n                wholename: true,\n            })),\n            vec![\"pcre\".into(), \"foo$\".into(), \"wholename\".into()].into()\n        );\n\n        assert_eq!(\n            val(Expr::FileType(FileType::Regular)),\n            vec![\"type\".into(), \"f\".into()].into()\n        );\n\n        assert_eq!(\n            val(Expr::Suffix(vec![\"php\".into(), \"js\".into()])),\n            vec![\n                \"suffix\".into(),\n                vec![\n                    Value::ByteString(\"php\".into()),\n                    Value::ByteString(\"js\".into())\n                ]\n                .into()\n            ]\n            .into()\n        );\n\n        assert_eq!(\n            val(Expr::Since(SinceTerm::ObservedClock(ClockSpec::null()))),\n            vec![\"since\".into(), \"c:0:0\".into(), \"oclock\".into()].into()\n        );\n    }\n}\n"
  },
  {
    "path": "watchman/rust/watchman_client/src/fields.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! Defines the fields used in the query result structs\n\n// don't show deprecation warnings about NewField when we build this file\n#![allow(deprecated)]\n\nuse std::path::PathBuf;\n\nuse serde::Deserialize;\nuse serde_bser::bytestring::ByteString;\n\nuse crate::prelude::*;\n\n/// This trait is used to furnish the caller with the watchman\n/// field name for an entry in the file results\n#[doc(hidden)]\npub trait QueryFieldName {\n    fn field_name() -> &'static str;\n}\n\n/// This trait is used to produce the complete list of file\n/// result field names for a query\n#[doc(hidden)]\npub trait QueryFieldList {\n    fn field_list() -> Vec<&'static str>;\n}\n\n/// This macro defines a field struct that can be composed using\n/// the `query_result_type!` macro into a struct that can be used\n/// with the `Client::query` method.\nmacro_rules! define_field {(\n    $(#[$meta:meta])*\n    $tyname:ident, $ty:ty, $field_name:literal) => {\n        #[derive(Deserialize, Clone, Debug)]\n        $(#[$meta])*\n        pub struct $tyname {\n            #[serde(rename = $field_name)]\n            val: $ty,\n        }\n\n        impl QueryFieldName for $tyname {\n            fn field_name() -> &'static str {\n                $field_name\n            }\n        }\n\n        impl $tyname {\n            /// Fields should only be consumed when constructed via a QueryResult.\n            /// This constructor is provided for users to easily mock out\n            /// QueryResult objects in tests.\n            pub fn new(val: $ty) -> Self {\n                $tyname {\n                    val,\n                }\n            }\n\n            /// Consumes the field and returns the underlying\n            /// value storage\n            pub fn into_inner(self) -> $ty {\n                self.val\n            }\n        }\n\n        impl std::ops::Deref for $tyname {\n            type Target = $ty;\n            fn deref(&self) -> &Self::Target {\n                &self.val\n            }\n        }\n\n        impl std::ops::DerefMut for $tyname {\n            fn deref_mut(&mut self) -> &mut Self::Target {\n                &mut self.val\n            }\n        }\n    };\n}\n\ndefine_field!(\n    /// The field corresponding to the `name` of the file.\n    NameField,\n    PathBuf,\n    \"name\"\n);\n\ndefine_field!(\n    /// Like NameField but does not assume UTF-8.\n    BytesNameField,\n    ByteString,\n    \"name\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `exists` status of the file\n    ExistsField,\n    bool,\n    \"exists\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `cclock` field.\n    /// the cclock is the created clock; the clock value when we first observed the file,\n    /// or the clock value when it last switched from !exists to exists.\n    CreatedClockField,\n    ClockSpec,\n    \"cclock\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `oclock` field.\n    /// the oclock is the observed clock; the clock value where we last observed some\n    /// change in this file or its metadata.\n    ObservedClockField,\n    ClockSpec,\n    \"oclock\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `content.sha1hex` field.\n    /// For regular files this evaluates to the sha1 hash of the\n    /// file contents.\n    ContentSha1HexField,\n    ContentSha1Hex,\n    \"content.sha1hex\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `ctime` field.\n    /// ctime is the last inode change time measured in integer seconds since the\n    /// unix epoch.\n    CTimeField,\n    i64,\n    \"ctime\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `ctime_f` field.\n    /// ctime is the last inode change time measured in floating point seconds\n    /// (including the fractional portion) since the unix epoch.\n    CTimeAsFloatField,\n    f32,\n    \"ctime_f\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `mtime` field.\n    /// mtime is the last modified time measured in integer seconds\n    /// since the unix epoch.\n    MTimeField,\n    i64,\n    \"mtime\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `mtime_f` field.\n    /// mtime is the last modified time measured in floating point seconds\n    /// (including the fractional portion) since the unix epoch.\n    MTimeAsFloatField,\n    f32,\n    \"mtime_f\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `size` field.\n    /// This represents the size of the file in bytes.\n    SizeField,\n    u64,\n    \"size\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `mode` field.\n    /// This encodes the full file type and permission bits.\n    /// Note that most programs and users are more comfortable with\n    /// this value when printed in octal.\n    /// It is recommended to use `FileTypeField` if all you need is the\n    /// file type and not the permission bits, as it is cheaper to\n    /// determine just the type in a virtualized filesystem.\n    ModeAndPermissionsField,\n    u64,\n    \"mode\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `uid` field.\n    /// The uid field is the owning uid expressed as an integer.\n    /// This field is not meaningful on Windows.\n    OwnerUidField,\n    u32,\n    \"uid\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `gid` field.\n    /// The gid field is the owning gid expressed as an integer.\n    /// This field is not meaningful on Windows.\n    OwnerGidField,\n    u32,\n    \"gid\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `ino` field.\n    /// The ino field is the inode number expressed as an integer.\n    /// This field is not meaningful on Windows.\n    InodeNumberField,\n    u64,\n    \"ino\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `dev` field.\n    /// The dev field is the device number expressed as an integer.\n    /// This field is not meaningful on Windows.\n    DeviceNumberField,\n    u64,\n    \"dev\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `nlink` field.\n    /// The nlink field is the number of hard links to the file\n    /// expressed as an integer.\n    NumberOfLinksField,\n    u64,\n    \"nlink\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `type` field.\n    /// The type field encodes the type of the file.\n    FileTypeField,\n    FileType,\n    \"type\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `symlink_target` field.\n    /// For files of type symlink this evaluates to the result\n    /// of readlink(2) on the file.\n    SymlinkTargetField,\n    Option<String>,\n    \"symlink_target\"\n);\n\ndefine_field!(\n    /// The field corresponding to the `new` field.\n    /// The new field evaluates to true if a file is newer than\n    /// the since generator criteria.\n    ///\n    /// Use of this field is discouraged as there are a number of\n    /// situations in which the newness has a counter-intuitive\n    /// value.  In addition, computing newness in a virtualized\n    /// filesystem is relatively expensive.\n    ///\n    /// If your application needs to reason about the transition\n    /// from `!exists -> exists` then you should track the\n    /// `ExistsField` in your application.\n    #[deprecated(note = \"NewField can have counter-intuitive \\\n                         values in a number of situations so it \\\n                         is recommended that you track \\\n                         ExistsField instead\")]\n    NewField,\n    bool,\n    \"new\"\n);\n\n/// A macro to help define a type to hold file information from\n/// a query.\n/// This macro enables a type-safe way to define the set of fields\n/// to be returned and de-serialize only those fields.\n///\n/// This defines a struct that will receive the name and content\n/// hash fields from the results.  When used together with\n/// `Client::query`, the query will automatically use the appropriate\n/// list of field names:\n///\n/// ```\n/// use serde::Deserialize;\n/// use watchman_client::prelude::*;\n///\n/// query_result_type! {\n///     struct NameAndHash {\n///         name: NameField,\n///         hash: ContentSha1HexField,\n///     }\n/// }\n/// ```\n///\n/// The struct must consist of 2 or more fields; the macro subsystem\n/// won't allow for generating an appropriate type definition for a single\n/// field result.\n///\n/// If you need only a single field, look at [NameOnly](struct.NameOnly.html).\n///\n/// The field types must implement an undocumented trait that enables\n/// the automatic field naming and correct deserialization regardless\n/// of the field name in the struct.  As such, you should consider\n/// the set of fields to be limited to those provided by this crate.\n#[macro_export]\nmacro_rules! query_result_type {(\n    $struct_vis:vis struct $tyname:ident {\n        $($field_vis:vis $field_name:ident : $field_ty:ty),+ $(,)?\n    }\n    ) => (\n\n#[derive(Deserialize, Debug, Clone)]\n$struct_vis struct $tyname {\n    $(\n        #[serde(flatten)]\n        $field_vis $field_name: $field_ty,\n    )*\n}\n\nimpl QueryFieldList for $tyname {\n    fn field_list() -> Vec <&'static str> {\n         vec![\n        $(\n            <$field_ty>::field_name(),\n        )*\n        ]\n    }\n}\n    )\n}\n\n/// Use the `NameOnly` struct when your desired field list in your\n/// query results consist only of the name field.\n/// It is not possible to use the `query_result_type!` macro to define\n/// an appropriate type due to limitations in the Rust macro system.\n#[derive(Deserialize, Debug, Clone)]\n#[serde(from = \"PathBuf\")]\npub struct NameOnly {\n    pub name: NameField,\n}\n\nimpl QueryFieldList for NameOnly {\n    fn field_list() -> Vec<&'static str> {\n        vec![\"name\"]\n    }\n}\n\nimpl From<PathBuf> for NameOnly {\n    fn from(path: PathBuf) -> Self {\n        Self {\n            name: NameField { val: path },\n        }\n    }\n}\n\n#[derive(Deserialize, Debug, Clone)]\npub struct NoField {}\n\nimpl QueryFieldList for NoField {\n    fn field_list() -> Vec<&'static str> {\n        vec![]\n    }\n}\n"
  },
  {
    "path": "watchman/rust/watchman_client/src/lib.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! This crate provides a client to the watchman file watching service.\n//!\n//! Start with the [Connector](struct.Connector.html) struct and use\n//! it to connect and return a [Client](struct.Client.html) struct,\n//! [Client::resolve_root](struct.Client.html#method.resolve_root) to\n//! resolve a path and initiate a watch, and then\n//! [Client::query](struct.Client.html#method.query) to perform\n//! a query, or [Client::subscribe](struct.Client.html#method.subscribe)\n//! to subscribe to file changes in real time.\n//!\n//! This example shows how to connect and expand a glob from the\n//! current working directory:\n//!\n//! ```no_run\n//! use watchman_client::prelude::*;\n//! #[tokio::main]\n//! async fn main() -> Result<(), Box<dyn std::error::Error>> {\n//!     let mut client = Connector::new().connect().await?;\n//!     let resolved = client\n//!         .resolve_root(CanonicalPath::canonicalize(\".\")?)\n//!         .await?;\n//!\n//!     // Basic globs -> names\n//!     let files = client.glob(&resolved, &[\"**/*.rs\"]).await?;\n//!     println!(\"files: {:#?}\", files);\n//!     Ok(())\n//! }\n//! ```\n#![cfg_attr(fbcode_build, deny(warnings))]\n\npub mod expr;\npub mod fields;\nmod named_pipe;\npub mod pdu;\nuse std::collections::HashMap;\nuse std::collections::VecDeque;\nuse std::io;\nuse std::io::Write;\nuse std::marker::PhantomData;\nuse std::path::Path;\nuse std::path::PathBuf;\nuse std::sync::Arc;\nuse std::sync::atomic::AtomicUsize;\nuse std::sync::atomic::Ordering;\n\nuse bytes::Bytes;\nuse bytes::BytesMut;\nuse futures::future::FutureExt;\nuse futures::stream::StreamExt;\nuse serde_bser::de::Bunser;\nuse serde_bser::de::SliceRead;\npub use serde_bser::value::Value;\nuse thiserror::Error;\nuse tokio::io::AsyncRead;\nuse tokio::io::AsyncWrite;\nuse tokio::io::AsyncWriteExt;\n#[cfg(unix)]\nuse tokio::net::UnixStream;\nuse tokio::process::Command;\nuse tokio::sync::Mutex;\nuse tokio::sync::mpsc::Receiver;\nuse tokio::sync::mpsc::Sender;\nuse tokio::sync::mpsc::UnboundedReceiver;\nuse tokio::sync::mpsc::UnboundedSender;\nuse tokio_util::codec::Decoder;\nuse tokio_util::codec::FramedRead;\n\n/// The next id number to use when generating a subscription name\nstatic SUB_ID: AtomicUsize = AtomicUsize::new(1);\n\n/// `use watchman_client::prelude::*` for convenient access to the types\n/// provided by this crate\npub mod prelude {\n    pub use crate::CanonicalPath;\n    pub use crate::Client;\n    pub use crate::Connector;\n    pub use crate::ResolvedRoot;\n    pub use crate::expr::*;\n    pub use crate::fields::*;\n    pub use crate::pdu::*;\n    pub use crate::query_result_type;\n}\n\nuse prelude::*;\n\n#[derive(Error, Debug)]\npub enum ConnectionLost {\n    #[error(\"Client task exited\")]\n    ClientTaskExited,\n\n    #[error(\"Client task failed: {0}\")]\n    Error(String),\n}\n\n#[derive(Error, Debug)]\npub enum Error {\n    #[error(\"Failed to connect to Watchman: {0}\")]\n    ConnectionError(tokio::io::Error),\n\n    #[error(\"Lost connection to watchman\")]\n    ConnectionLost(#[from] ConnectionLost),\n\n    #[error(\n        \"While invoking the {watchman_path} CLI to discover the server connection details: {reason}, stderr=`{stderr}`\"\n    )]\n    ConnectionDiscovery {\n        watchman_path: PathBuf,\n        reason: String,\n        stderr: String,\n    },\n    #[error(\"The watchman server reported an error: \\\"{}\\\", while executing command: {}\", .message, .command)]\n    WatchmanServerError { message: String, command: String },\n    #[error(\"The watchman server reported an error: \\\"{}\\\"\", .message)]\n    WatchmanResponseError { message: String },\n    #[error(\"The watchman server didn't return a value for field `{}` in response to a `{}` command. {:?}\", .fieldname, .command, .response)]\n    MissingField {\n        fieldname: &'static str,\n        command: String,\n        response: String,\n    },\n\n    #[error(\"Deserialization error (data: {data:x?})\")]\n    Deserialize {\n        data: Vec<u8>,\n        #[source]\n        source: anyhow::Error,\n    },\n\n    #[error(\"Seriaization error\")]\n    Serialize {\n        #[source]\n        source: anyhow::Error,\n    },\n\n    #[error(\"Failed to connect to {endpoint}\")]\n    Connect {\n        endpoint: PathBuf,\n        #[source]\n        source: Box<std::io::Error>,\n    },\n}\n\n#[derive(Error, Debug)]\nenum TaskError {\n    #[error(\"IO Error: {0}\")]\n    Io(#[from] std::io::Error),\n\n    #[error(\"Task is shutting down\")]\n    Shutdown,\n\n    #[error(\"EOF on Watchman socket\")]\n    Eof,\n\n    #[error(\"Received a unilateral PDU from the server\")]\n    UnilateralPdu,\n\n    #[error(\"Deserialization error (data: {data:x?})\")]\n    Deserialize {\n        #[source]\n        source: anyhow::Error,\n        data: Vec<u8>,\n    },\n}\n\n/// The Connector defines how to connect to the watchman server.\n/// You will typically use `Connector::new` to set up the connection with\n/// the environmental defaults.  You might want to override those defaults\n/// in situations such as integration testing environments, or in extremely\n/// latency sensitive environments where the cost of performing discovery\n/// is a measurable overhead.\n#[derive(Default)]\npub struct Connector {\n    watchman_cli_path: Option<PathBuf>,\n    unix_domain: Option<PathBuf>,\n}\n\nimpl Connector {\n    /// Set up the connector with the system defaults.\n    /// If `WATCHMAN_SOCK` is set in the environment it will preset the\n    /// local IPC socket path.\n    /// Otherwise the connector will invoke the watchman CLI to perform\n    /// discovery.\n    pub fn new() -> Self {\n        let connector = Self::default();\n\n        if let Some(val) = std::env::var_os(\"WATCHMAN_SOCK\") {\n            connector.unix_domain_socket(val)\n        } else {\n            connector\n        }\n    }\n\n    /// If the watchman CLI is installed in a location that is not present\n    /// in the PATH environment variable, this method is used to inform\n    /// the connector of its location.\n    pub fn watchman_cli_path<P: AsRef<Path>>(mut self, path: P) -> Self {\n        self.watchman_cli_path = Some(path.as_ref().to_path_buf());\n        self\n    }\n\n    /// Specify the unix domain socket path\n    pub fn unix_domain_socket<P: AsRef<Path>>(mut self, path: P) -> Self {\n        self.unix_domain = Some(path.as_ref().to_path_buf());\n        self\n    }\n\n    /// Resolve the unix domain socket path, taking either the override\n    /// or performing discovery.\n    async fn resolve_unix_domain_path(&self) -> Result<PathBuf, Error> {\n        if let Some(path) = self.unix_domain.as_ref() {\n            Ok(path.clone())\n        } else {\n            let watchman_path = self\n                .watchman_cli_path\n                .as_ref()\n                .map_or_else(|| Path::new(\"watchman\"), |p| p.as_ref());\n\n            let mut cmd = Command::new(watchman_path);\n            cmd.args([\"--output-encoding\", \"bser-v2\", \"get-sockname\"]);\n\n            #[cfg(windows)]\n            cmd.creation_flags(winapi::um::winbase::CREATE_NO_WINDOW);\n\n            let output = cmd\n                .output()\n                .await\n                .map_err(|source| Error::ConnectionDiscovery {\n                    watchman_path: watchman_path.to_path_buf(),\n                    reason: source.to_string(),\n                    stderr: \"\".to_string(),\n                })?;\n\n            let info: GetSockNameResponse =\n                serde_bser::from_slice(&output.stdout).map_err(|source| {\n                    Error::ConnectionDiscovery {\n                        watchman_path: watchman_path.to_path_buf(),\n                        reason: source.to_string(),\n                        stderr: String::from_utf8_lossy(&output.stderr).into_owned(),\n                    }\n                })?;\n\n            let debug = format!(\"{:#?}\", info);\n\n            if let Some(message) = info.error {\n                return Err(Error::WatchmanServerError {\n                    message,\n                    command: \"get-sockname\".into(),\n                });\n            }\n\n            info.sockname.ok_or_else(|| Error::MissingField {\n                fieldname: \"sockname\",\n                command: \"get-sockname\".into(),\n                response: debug,\n            })\n        }\n    }\n\n    /// Establish a connection to the watchman server.\n    /// If the connector was configured to perform discovery (which is\n    /// the default configuration), then this will attempt to start\n    /// the watchman server.\n    pub async fn connect(&self) -> Result<Client, Error> {\n        let sock_path = self.resolve_unix_domain_path().await?;\n\n        #[cfg(unix)]\n        let stream = UnixStream::connect(sock_path)\n            .await\n            .map_err(Error::ConnectionError)?;\n\n        #[cfg(windows)]\n        let stream = named_pipe::NamedPipe::connect(sock_path).await?;\n\n        let stream: Box<dyn ReadWriteStream> = Box::new(stream);\n\n        let (reader, writer) = tokio::io::split(stream);\n\n        let (request_tx, request_rx) = tokio::sync::mpsc::channel(128);\n\n        let mut task = ClientTask {\n            writer,\n            reader: FramedRead::new(reader, BserSplitter),\n            request_rx,\n            request_queue: VecDeque::new(),\n            waiting_response: false,\n            subscriptions: HashMap::new(),\n        };\n        tokio::spawn(async move {\n            if let Err(err) = task.run().await {\n                let _ignored = writeln!(io::stderr(), \"watchman client task failed: {}\", err);\n            }\n        });\n\n        let inner = Arc::new(Mutex::new(ClientInner { request_tx }));\n\n        Ok(Client { inner })\n    }\n}\n\n/// Represents a canonical path in the filesystem.\n#[derive(Debug, Clone)]\npub struct CanonicalPath(PathBuf);\n\nimpl CanonicalPath {\n    /// Construct the canonical version of the supplied path.\n    /// This function will canonicalize the path and return the\n    /// result, if successful.\n    /// If you have already canonicalized the path, it is preferable\n    /// to use the `with_canonicalized_path` function instead.\n    pub fn canonicalize<P: AsRef<Path>>(path: P) -> Result<Self, std::io::Error> {\n        let path = std::fs::canonicalize(path)?;\n        Ok(Self(Self::strip_unc_escape(path)))\n    }\n\n    /// Construct from an already canonicalized path.\n    /// This function will panic if the supplied path is not an absolute\n    /// path!\n    pub fn with_canonicalized_path(path: PathBuf) -> Self {\n        assert!(\n            path.is_absolute(),\n            \"attempted to call \\\n             CanonicalPath::with_canonicalized_path on a non-canonical path! \\\n             You probably want to call CanonicalPath::canonicalize instead!\"\n        );\n        Self(Self::strip_unc_escape(path))\n    }\n\n    /// Watchman doesn't like the UNC prefix being present for incoming paths\n    /// in its current implementation: we should fix that, but in the meantime\n    /// we want clients to be able to connect to existing versions, so let's\n    /// strip off the UNC escape\n    #[cfg(windows)]\n    #[inline]\n    fn strip_unc_escape(path: PathBuf) -> PathBuf {\n        match path.to_str() {\n            Some(s) if s.starts_with(\"\\\\\\\\?\\\\\") => PathBuf::from(&s[4..]),\n            _ => path,\n        }\n    }\n\n    #[cfg(unix)]\n    #[inline]\n    fn strip_unc_escape(path: PathBuf) -> PathBuf {\n        path\n    }\n\n    /// Consume self yielding the canonicalized PathBuf.\n    pub fn into_path_buf(self) -> PathBuf {\n        self.0\n    }\n}\n\n/// Data that describes a watched filesystem location.\n/// Watchman performs watch aggregation to project boundaries, so a request\n/// to watch a subdirectory will resolve to the higher level root path\n/// and a relative path offset.\n/// This struct encodes both pieces of information.\n#[derive(Debug, Clone)]\npub struct ResolvedRoot {\n    root: PathBuf,\n    relative: Option<PathBuf>,\n    watcher: String,\n}\n\nimpl ResolvedRoot {\n    /// Returns the name of the watcher that the server is using to\n    /// monitor the path.  The watcher is generally system dependent,\n    /// but some systems offer multipler watchers.\n    /// You generally don't care too much about the watcher that is\n    /// in use, but if the watcher is a virtualized filesystem such as\n    /// `eden` then you may wish to use to alternative queries to get the\n    /// best performance.\n    pub fn watcher(&self) -> &str {\n        self.watcher.as_str()\n    }\n\n    /// Returns the root of the watchman project that is being watched\n    pub fn project_root(&self) -> &Path {\n        &self.root\n    }\n\n    /// Returns the absolute path to the directory that you requested be resolved.\n    pub fn path(&self) -> PathBuf {\n        if let Some(relative) = self.relative.as_ref() {\n            self.root.join(relative)\n        } else {\n            self.root.clone()\n        }\n    }\n\n    /// Returns the path to the directory that you requested be resolved,\n    /// relative to the `project_root`.\n    pub fn project_relative_path(&self) -> Option<&Path> {\n        self.relative.as_ref().map(PathBuf::as_ref)\n    }\n}\n\ntrait ReadWriteStream: AsyncRead + AsyncWrite + std::marker::Unpin + Send {}\n\n#[cfg(unix)]\nimpl ReadWriteStream for UnixStream {}\n\nstruct SendRequest {\n    /// The serialized request to send to the server\n    buf: Vec<u8>,\n    /// to pass the response back to the requstor\n    tx: tokio::sync::oneshot::Sender<Result<Bytes, String>>,\n}\n\nimpl SendRequest {\n    fn respond(self, result: Result<Bytes, String>) {\n        let _ = self.tx.send(result);\n    }\n}\n\nenum SubscriptionNotification {\n    Pdu(Bytes),\n    Canceled,\n}\n\nenum TaskItem {\n    QueueRequest(SendRequest),\n    RegisterSubscription(String, UnboundedSender<SubscriptionNotification>),\n}\n\n/// Splits BSER mesages out of a stream. Does not attempt to actually decode them.\nstruct BserSplitter;\n\nimpl Decoder for BserSplitter {\n    type Item = Bytes;\n    type Error = TaskError;\n\n    fn decode(&mut self, buf: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {\n        let mut bunser = Bunser::new(SliceRead::new(buf.as_ref()));\n\n        let pdu = match bunser.read_pdu() {\n            Ok(pdu) => pdu,\n            Err(source) => {\n                // We know that the smallest full PDU returned by the server won't ever be smaller\n                // than this size. So, if we have less than BUF_SIZE bytes, ask for more data.\n                const BUF_SIZE: usize = 16;\n\n                let missing = BUF_SIZE.saturating_sub(buf.len());\n\n                if missing > 0 {\n                    buf.reserve(missing);\n                    return Ok(None);\n                }\n\n                // We should have succeded in reading some data here, but we didn't. Return an\n                // error.\n                return Err(TaskError::Deserialize {\n                    source: source.into(),\n                    data: buf.to_vec(),\n                });\n            }\n        };\n\n        let total_size = (pdu.start + pdu.len) as usize;\n\n        let missing = total_size.saturating_sub(buf.len());\n        if missing > 0 {\n            buf.reserve(missing);\n            return Ok(None);\n        }\n\n        let ret = buf.split_to(total_size);\n        Ok(Some(ret.freeze()))\n    }\n}\n\n/// A live connection to a watchman server.\n/// Use [Connector](struct.Connector.html) to establish a connection.\npub struct Client {\n    inner: Arc<Mutex<ClientInner>>,\n}\n\n/// The client task coordinates sending requests with processing\n/// unilateral results\nstruct ClientTask {\n    writer: tokio::io::WriteHalf<Box<dyn ReadWriteStream>>,\n    reader: FramedRead<tokio::io::ReadHalf<Box<dyn ReadWriteStream>>, BserSplitter>,\n    request_rx: Receiver<TaskItem>,\n    request_queue: VecDeque<SendRequest>,\n    waiting_response: bool,\n    subscriptions: HashMap<String, UnboundedSender<SubscriptionNotification>>,\n}\n\nimpl Drop for ClientTask {\n    fn drop(&mut self) {\n        self.fail_all(&TaskError::Shutdown)\n    }\n}\n\nimpl ClientTask {\n    async fn run(&mut self) -> Result<(), TaskError> {\n        // process things, and if we encounter an error, ensure that\n        // we fail all outstanding requests\n        match self.run_loop().await {\n            Err(err) => {\n                self.fail_all(&err);\n                Err(err)\n            }\n            ok => ok,\n        }\n    }\n\n    async fn run_loop(&mut self) -> Result<(), TaskError> {\n        loop {\n            futures::select_biased! {\n                pdu = self.reader.next().fuse() => {\n                    match pdu {\n                        Some(pdu) => self.process_pdu(pdu?).await?,\n                        None => return Err(TaskError::Eof),\n                    }\n                }\n                task = self.request_rx.recv().fuse() => {\n                    match task {\n                        Some(TaskItem::QueueRequest(request)) => self.queue_request(request).await?,\n                        Some(TaskItem::RegisterSubscription(name, tx)) => {\n                            self.register_subscription(name, tx)\n                        }\n                        None => break,\n                    }\n                }\n            }\n        }\n\n        Ok(())\n    }\n\n    fn register_subscription(\n        &mut self,\n        name: String,\n        tx: UnboundedSender<SubscriptionNotification>,\n    ) {\n        self.subscriptions.insert(name, tx);\n    }\n\n    /// Generate an error for each queued request.\n    /// This is called in situations where the state of the connection\n    /// to the serve is non-recoverable.\n    fn fail_all(&mut self, err: &TaskError) {\n        while let Some(request) = self.request_queue.pop_front() {\n            request.respond(Err(err.to_string()));\n        }\n    }\n\n    /// If we're not waiting for the response to a request,\n    /// then send the next one!\n    async fn send_next_request(&mut self) -> Result<(), TaskError> {\n        if !self.waiting_response && !self.request_queue.is_empty() {\n            match self\n                .writer\n                .write_all(&self.request_queue.front().expect(\"not empty\").buf)\n                .await\n            {\n                Err(err) => {\n                    // A failed write breaks our world; we don't want to\n                    // try to continue\n                    return Err(err.into());\n                }\n                Ok(_) => self.waiting_response = true,\n            }\n        }\n        Ok(())\n    }\n\n    /// Queue up a new request from the client code, and then\n    /// check to see if we can send a queued request to the server.\n    async fn queue_request(&mut self, request: SendRequest) -> Result<(), TaskError> {\n        self.request_queue.push_back(request);\n        self.send_next_request().await?;\n        Ok(())\n    }\n\n    /// Dispatch a PDU that we just read to the appropriate client code.\n    async fn process_pdu(&mut self, pdu: Bytes) -> Result<(), TaskError> {\n        use serde::Deserialize;\n        #[derive(Deserialize, Debug)]\n        pub struct Unilateral {\n            #[allow(unused)]\n            pub unilateral: bool,\n            pub subscription: String,\n            #[serde(default)]\n            pub canceled: bool,\n        }\n\n        if let Ok(unilateral) = bunser::<Unilateral>(&pdu) {\n            if let Some(subscription) = self.subscriptions.get_mut(&unilateral.subscription) {\n                let msg = if unilateral.canceled {\n                    SubscriptionNotification::Canceled\n                } else {\n                    SubscriptionNotification::Pdu(pdu)\n                };\n\n                if subscription.send(msg).is_err() || unilateral.canceled {\n                    // The `Subscription` was dropped; we don't need to\n                    // treat this as terminal for this client session,\n                    // so just de-register the handler\n                    self.subscriptions.remove(&unilateral.subscription);\n                }\n            }\n        } else if self.waiting_response {\n            let request = self\n                .request_queue\n                .pop_front()\n                .expect(\"waiting_response is only true when request_queue is not empty\");\n            self.waiting_response = false;\n\n            request.respond(Ok(pdu));\n        } else {\n            // This should never happen as we're not doing any subscription stuff\n            return Err(TaskError::UnilateralPdu);\n        }\n\n        self.send_next_request().await?;\n        Ok(())\n    }\n}\n\nfn bunser<T>(buf: &[u8]) -> Result<T, Error>\nwhere\n    T: serde::de::DeserializeOwned,\n{\n    let response: T = serde_bser::from_slice(buf).map_err(|source| Error::Deserialize {\n        source: source.into(),\n        data: buf.to_vec(),\n    })?;\n    Ok(response)\n}\n\nstruct ClientInner {\n    request_tx: Sender<TaskItem>,\n}\n\nimpl ClientInner {\n    /// This method will send a request to the watchman server\n    /// and wait for its response.\n    /// This is really an internal method, but it is made public in case a\n    /// consumer of this crate needs to issue a command for which we haven't\n    /// yet made an ergonomic wrapper.\n    pub(crate) async fn generic_request<Request, Response>(\n        &mut self,\n        request: Request,\n    ) -> Result<Response, Error>\n    where\n        Request: serde::Serialize + std::fmt::Debug,\n        Response: serde::de::DeserializeOwned,\n    {\n        // Step 1: serialize into a bser byte buffer\n        let mut request_data = vec![];\n        serde_bser::ser::serialize(&mut request_data, &request).map_err(|source| {\n            Error::Serialize {\n                source: source.into(),\n            }\n        })?;\n\n        // Step 2: ask the client task to send it for us\n        let (tx, rx) = tokio::sync::oneshot::channel();\n        self.request_tx\n            .send(TaskItem::QueueRequest(SendRequest {\n                buf: request_data,\n                tx,\n            }))\n            .await\n            .map_err(|_| ConnectionLost::ClientTaskExited)?;\n\n        // Step 3: wait for the client task to give us the response\n        let pdu_data = rx\n            .await\n            .map_err(|_| ConnectionLost::ClientTaskExited)?\n            .map_err(ConnectionLost::Error)?;\n\n        // Step 4: sniff for an error response in the deserialized data\n        use serde::Deserialize;\n        #[derive(Deserialize, Debug)]\n        struct MaybeError {\n            #[serde(default)]\n            error: Option<String>,\n        }\n\n        // Step 5: deserialize into the caller-desired format\n        let maybe_err: MaybeError = bunser(&pdu_data)?;\n        if let Some(message) = maybe_err.error {\n            return Err(Error::WatchmanServerError {\n                message,\n                command: format!(\"{:#?}\", request),\n            });\n        }\n\n        let response: Response = bunser(&pdu_data)?;\n        Ok(response)\n    }\n}\n\n/// Returned by [Subscription::next](struct.Subscription.html#method.next)\n/// as events are observed by Watchman.\n#[allow(clippy::large_enum_variant)]\n#[derive(Debug, Clone)]\npub enum SubscriptionData<F>\nwhere\n    F: serde::de::DeserializeOwned + std::fmt::Debug + Clone + QueryFieldList,\n{\n    /// The Subscription was canceled.\n    /// This could be for a number of reasons that are not knowable\n    /// to the client:\n    /// * The user may have issued the `watch-del` command\n    /// * The containing watch root may have been deleted or\n    ///   un-mounted\n    /// * The containing watch may no longer be accessible\n    ///   to the watchman user/process\n    /// * Some other error condition that renders the project\n    ///   unwatchable may have occurred\n    /// * The server may have been gracefully shutdown\n    ///\n    /// A Canceled subscription will deliver no further results.\n    Canceled,\n\n    /// Files matching your criteria have changed.\n    /// The QueryResult contains the details.\n    /// Pay attention to the\n    /// [is_fresh_instance](pdu/struct.QueryResult.html#structfield.is_fresh_instance) field!\n    FilesChanged(QueryResult<F>),\n\n    /// Some other watchman client has broadcast that the watched\n    /// project is entering a new named state.\n    /// For example, `hg.update` may be generated by the FB\n    /// internal source control system to indicate that the\n    /// working copy is about to be updated to a new revision.\n    /// The metadata field contains data specific to the named\n    /// state.\n    StateEnter {\n        state_name: String,\n        metadata: Option<Value>,\n    },\n    /// Some other watchman client has broadcast that the watched\n    /// project is no longer in the named state.\n    /// This event can also be generated if the watchman client\n    /// that entered the state disconnects unexpectedly from\n    /// the watchman server.\n    /// The `metadata` field will be `None` in that situation.\n    StateLeave {\n        state_name: String,\n        metadata: Option<Value>,\n    },\n}\n\n/// A handle to a subscription initiated via `Client::subscribe`.\n/// Repeatedly call `Subscription::next().await` to yield the next\n/// set of subscription results.\n/// Use the `cancel` method to gracefully halt this subscription\n/// if you have a program that creates and destroys subscriptions\n/// throughout its lifetime.\npub struct Subscription<F>\nwhere\n    F: serde::de::DeserializeOwned + std::fmt::Debug + Clone + QueryFieldList,\n{\n    name: String,\n    inner: Arc<Mutex<ClientInner>>,\n    root: ResolvedRoot,\n    responses: UnboundedReceiver<SubscriptionNotification>,\n    _phantom: PhantomData<F>,\n}\n\nimpl<F> Subscription<F>\nwhere\n    F: serde::de::DeserializeOwned + std::fmt::Debug + Clone + QueryFieldList,\n{\n    /// Returns the assigned name for this subscription instance.\n    pub fn name(&self) -> &str {\n        &self.name\n    }\n\n    /// Yield the next set of subscription data.\n    /// An error is generated if the subscription is disconnected\n    /// from the server.\n    #[allow(clippy::should_implement_trait)]\n    pub async fn next(&mut self) -> Result<SubscriptionData<F>, Error> {\n        let msg = self\n            .responses\n            .recv()\n            .await\n            .ok_or(ConnectionLost::ClientTaskExited)?;\n\n        match msg {\n            SubscriptionNotification::Pdu(pdu) => {\n                let response: QueryResult<F> = bunser(&pdu)?;\n\n                if let Some(state_name) = response.state_enter {\n                    Ok(SubscriptionData::StateEnter {\n                        state_name,\n                        metadata: response.state_metadata,\n                    })\n                } else if let Some(state_name) = response.state_leave {\n                    Ok(SubscriptionData::StateLeave {\n                        state_name,\n                        metadata: response.state_metadata,\n                    })\n                } else {\n                    Ok(SubscriptionData::FilesChanged(response))\n                }\n            }\n            SubscriptionNotification::Canceled => {\n                self.responses.close();\n                Ok(SubscriptionData::Canceled)\n            }\n        }\n    }\n\n    /// Gracefully cancel this subscription.\n    /// If you are imminently about to drop the associated client then you\n    /// need not call this method.\n    /// However, if the associated client is going to live much longer\n    /// than a Subscription that you are about to drop,\n    /// then it is recommended that you call `cancel` so that the server\n    /// will stop delivering data about it.\n    pub async fn cancel(self) -> Result<(), Error> {\n        let mut inner = self.inner.lock().await;\n        let _: UnsubscribeResponse = inner\n            .generic_request(Unsubscribe(\"unsubscribe\", self.root.root, self.name))\n            .await?;\n        Ok(())\n    }\n}\n\nimpl Client {\n    /// This method will send a request to the watchman server\n    /// and wait for its response.\n    /// This is really an internal method, but it is made public in case a\n    /// consumer of this crate needs to issue a command for which we haven't\n    /// yet made an ergonomic wrapper.\n    #[doc(hidden)]\n    pub async fn generic_request<Request, Response>(\n        &self,\n        request: Request,\n    ) -> Result<Response, Error>\n    where\n        Request: serde::Serialize + std::fmt::Debug,\n        Response: serde::de::DeserializeOwned,\n    {\n        let mut inner = self.inner.lock().await;\n        let response: Response = inner.generic_request(request).await?;\n        Ok(response)\n    }\n\n    pub async fn version(&self) -> Result<GetVersionResponse, Error> {\n        self.generic_request(&[\"version\"]).await\n    }\n\n    pub async fn watch_list(&self) -> Result<WatchListResponse, Error> {\n        self.generic_request(&[\"watch-list\"]).await\n    }\n\n    /// This method will attempt to assert the state named `state_name`\n    /// on the watchman server. This is used to facilitate advanced settling\n    /// in subscriptions.\n    ///\n    /// Only one client can assert a given named state for a given root at\n    /// a given time; an error will be returned if another client owns the\n    /// requested state assertion.\n    ///\n    /// If successful, the state will remain asserted until the owning client\n    /// either issues a `state-leave` or disconnects from the server.\n    ///\n    /// The optional `metadata` will be published to all subscribers of the\n    /// root and made visible via `SubscriptionData::StateEnter::metadata`.\n    ///\n    /// See also: <https://facebook.github.io/watchman/docs/cmd/state-enter.html>\n    pub async fn state_enter(\n        &self,\n        root: &ResolvedRoot,\n        state_name: &str,\n        sync_timeout: SyncTimeout,\n        metadata: Option<Value>,\n    ) -> Result<(), Error> {\n        let request = StateEnterLeaveRequest(\n            \"state-enter\",\n            root.root.clone(),\n            StateEnterLeaveParams {\n                name: state_name,\n                metadata,\n                sync_timeout,\n            },\n        );\n\n        let _response: StateEnterLeaveResponse = self.generic_request(request).await?;\n        Ok(())\n    }\n\n    /// This method will attempt to release an owned state assertion for the\n    /// state named `state_name` on the watchman server. This is used to facilitate\n    /// advanced settling in subscriptions.\n    ///\n    /// The optional `metadata` will be published to all subscribers of the\n    /// root and made visible via `SubscriptionData::StateLeave::metadata`.\n    ///\n    /// See also: <https://facebook.github.io/watchman/docs/cmd/state-leave.html>\n    pub async fn state_leave(\n        &self,\n        root: &ResolvedRoot,\n        state_name: &str,\n        sync_timeout: SyncTimeout,\n        metadata: Option<Value>,\n    ) -> Result<(), Error> {\n        let request = StateEnterLeaveRequest(\n            \"state-leave\",\n            root.root.clone(),\n            StateEnterLeaveParams {\n                name: state_name,\n                metadata,\n                sync_timeout,\n            },\n        );\n\n        let _response: StateEnterLeaveResponse = self.generic_request(request).await?;\n        Ok(())\n    }\n\n    /// This is typically the first method invoked on a client.\n    /// Its purpose is to ensure that the watchman server is watching the specified\n    /// path and to resolve it to a `ResolvedRoot` instance.\n    ///\n    /// The path to resolve must be a canonical path; watchman performs strict name\n    /// resolution to detect TOCTOU issues and will generate an error if the path\n    /// is not the canonical name.\n    ///\n    /// Note that for regular filesystem watches, if the requested path is not\n    /// yet being watched, this method will not yield until the watchman server\n    /// has completed a recursive crawl of that portion of the filesystem.\n    /// In other words, the worst case performance of this is\n    /// `O(recursive-number-of-files)` and is impacted by the underlying storage\n    /// device and its performance characteristics.\n    pub async fn resolve_root(&self, path: CanonicalPath) -> Result<ResolvedRoot, Error> {\n        let response: WatchProjectResponse = self\n            .generic_request(WatchProjectRequest(\"watch-project\", path.0.clone()))\n            .await?;\n\n        Ok(ResolvedRoot {\n            root: response.watch,\n            relative: response.relative_path,\n            watcher: response.watcher,\n        })\n    }\n\n    /// Perform a generic watchman query.\n    /// The `F` type is a struct defined by the\n    /// [query_result_type!](macro.query_result_type.html) macro,\n    /// or, if you want only the file name from the results, the\n    /// [NameOnly](struct.NameOnly.html) struct.\n    ///\n    /// ```\n    /// use serde::Deserialize;\n    /// use watchman_client::prelude::*;\n    ///\n    /// query_result_type! {\n    ///     struct NameAndType {\n    ///         name: NameField,\n    ///         file_type: FileTypeField,\n    ///     }\n    /// }\n    ///\n    /// async fn query(\n    ///     client: &mut Client,\n    ///     resolved: &ResolvedRoot,\n    /// ) -> Result<(), Box<dyn std::error::Error>> {\n    ///     let response: QueryResult<NameAndType> = client\n    ///         .query(\n    ///             &resolved,\n    ///             QueryRequestCommon {\n    ///                 glob: Some(vec![\"**/*.rs\".to_string()]),\n    ///                 ..Default::default()\n    ///             },\n    ///         )\n    ///         .await?;\n    ///     println!(\"response: {:#?}\", response);\n    ///     Ok(())\n    /// }\n    /// ```\n    ///\n    /// When constructing your result type, you can select from the\n    /// following fields:\n    ///\n    /// * [CTimeAsFloatField](struct.CTimeAsFloatField.html)\n    /// * [CTimeField](struct.CTimeField.html)\n    /// * [ContentSha1HexField](struct.ContentSha1HexField.html)\n    /// * [CreatedClockField](struct.CreatedClockField.html)\n    /// * [DeviceNumberField](struct.DeviceNumberField.html)\n    /// * [ExistsField](struct.ExistsField.html)\n    /// * [FileTypeField](struct.FileTypeField.html)\n    /// * [InodeNumberField](struct.InodeNumberField.html)\n    /// * [MTimeAsFloatField](struct.MTimeAsFloatField.html)\n    /// * [MTimeField](struct.MTimeField.html)\n    /// * [ModeAndPermissionsField](struct.ModeAndPermissionsField.html)\n    /// * [NameField](struct.NameField.html)\n    /// * [NewField](struct.NewField.html)\n    /// * [NumberOfLinksField](struct.NumberOfLinksField.html)\n    /// * [ObservedClockField](struct.ObservedClockField.html)\n    /// * [OwnerGidField](struct.OwnerGidField.html)\n    /// * [OwnerUidField](struct.OwnerUidField.html)\n    /// * [SizeField](struct.SizeField.html)\n    /// * [SymlinkTargetField](struct.SymlinkTargetField.html)\n    ///\n    /// (See [the fields module](fields/index.html) for a definitive list)\n    ///\n    /// The file names are all relative to the `root` parameter.\n    pub async fn query<F>(\n        &self,\n        root: &ResolvedRoot,\n        query: QueryRequestCommon,\n    ) -> Result<QueryResult<F>, Error>\n    where\n        F: serde::de::DeserializeOwned + std::fmt::Debug + Clone + QueryFieldList,\n    {\n        let query = QueryRequest(\n            \"query\",\n            root.root.clone(),\n            QueryRequestCommon {\n                relative_root: root.relative.clone(),\n                fields: F::field_list(),\n                ..query\n            },\n        );\n\n        let response: QueryResult<F> = self.generic_request(query.clone()).await?;\n\n        Ok(response)\n    }\n\n    /// Create a Subscription that will yield file changes as they occur in\n    /// real time.\n    /// The `F` type is a struct defined by the\n    /// [query_result_type!](macro.query_result_type.html) macro,\n    /// or, if you want only the file name from the results, the\n    /// [NameOnly](struct.NameOnly.html) struct.\n    ///\n    /// Returns two pieces of information:\n    /// * A [Subscription](struct.Subscription.html) handle that can be used to yield changes\n    ///   as they are observed by watchman\n    /// * A [SubscribeResponse](pdu/struct.SubscribeResponse.html) that contains some data about the\n    ///   state of the watch at the time the subscription was\n    ///   initiated\n    pub async fn subscribe<F>(\n        &self,\n        root: &ResolvedRoot,\n        query: SubscribeRequest,\n    ) -> Result<(Subscription<F>, SubscribeResponse), Error>\n    where\n        F: serde::de::DeserializeOwned + std::fmt::Debug + Clone + QueryFieldList,\n    {\n        let name = format!(\n            \"sub-[{}]-{}\",\n            std::env::args()\n                .next()\n                .unwrap_or_else(|| \"<no-argv-0>\".to_string()),\n            SUB_ID.fetch_add(1, Ordering::Relaxed)\n        );\n\n        let query = SubscribeCommand(\n            \"subscribe\",\n            root.root.clone(),\n            name.clone(),\n            SubscribeRequest {\n                relative_root: root.relative.clone(),\n                fields: F::field_list(),\n                ..query\n            },\n        );\n\n        let (tx, responses) = tokio::sync::mpsc::unbounded_channel();\n\n        {\n            let inner = self.inner.lock().await;\n            inner\n                .request_tx\n                .send(TaskItem::RegisterSubscription(name.clone(), tx))\n                .await\n                .map_err(|_| ConnectionLost::ClientTaskExited)?;\n        }\n\n        let subscription = Subscription::<F> {\n            name,\n            inner: Arc::clone(&self.inner),\n            root: root.clone(),\n            responses,\n            _phantom: PhantomData,\n        };\n\n        let response: SubscribeResponse = self.generic_request(query).await?;\n\n        Ok((subscription, response))\n    }\n\n    /// Expand a set of globs into the set of matching file names.\n    /// The globs must be relative to the `root` parameter.\n    /// The returned file names are all relative to the `root` parameter.\n    pub async fn glob(&self, root: &ResolvedRoot, globs: &[&str]) -> Result<Vec<PathBuf>, Error> {\n        let response: QueryResult<NameOnly> = self\n            .query(\n                root,\n                QueryRequestCommon {\n                    relative_root: root.relative.clone(),\n                    glob: Some(globs.iter().map(|&s| s.to_string()).collect()),\n                    ..Default::default()\n                },\n            )\n            .await?;\n        Ok(response\n            .files\n            .unwrap_or_else(Vec::new)\n            .into_iter()\n            .map(|f| f.name.into_inner())\n            .collect())\n    }\n\n    /// Returns the current clock value for a watched root.\n    /// If `sync_timeout` is `SyncTimeout::DisableCookie` then the instantaneous\n    /// clock value is returned without using a sync cookie.\n    ///\n    /// Otherwise, a sync cookie will be created and the server will wait\n    /// for up to the associated `sync_timeout` duration to observe it.\n    /// If that timeout is reached, this method will yield an error.\n    ///\n    /// When should you use a cookie?  If you need to a clock value that is\n    /// guaranteed to reflect any filesystem changes that happened before\n    /// a given point in time you should use a sync cookie.\n    ///\n    /// ## See also:\n    ///  * <https://facebook.github.io/watchman/docs/cmd/clock.html>\n    ///  * <https://facebook.github.io/watchman/docs/cookies.html>\n    pub async fn clock(\n        &self,\n        root: &ResolvedRoot,\n        sync_timeout: SyncTimeout,\n    ) -> Result<ClockSpec, Error> {\n        let response: ClockResponse = self\n            .generic_request(ClockRequest(\n                \"clock\",\n                root.root.clone(),\n                ClockRequestParams { sync_timeout },\n            ))\n            .await?;\n        Ok(response.clock)\n    }\n\n    /// Returns the current configuration for a watched root.\n    pub async fn get_config(&self, root: &ResolvedRoot) -> Result<WatchmanConfig, Error> {\n        let response: GetConfigResponse = self\n            .generic_request(GetConfigRequest(\"get-config\", root.root.clone()))\n            .await?;\n        Ok(response.config)\n    }\n\n    /// Registers a trigger.\n    pub async fn register_trigger(\n        &self,\n        root: &ResolvedRoot,\n        request: TriggerRequest,\n    ) -> Result<TriggerResponse, Error> {\n        let response: TriggerResponse = self\n            .generic_request(TriggerCommand(\"trigger\", root.root.clone(), request))\n            .await?;\n        Ok(response)\n    }\n\n    /// Removes a registered trigger.\n    pub async fn remove_trigger(\n        &self,\n        root: &ResolvedRoot,\n        name: &str,\n    ) -> Result<TriggerDelResponse, Error> {\n        let response: TriggerDelResponse = self\n            .generic_request(TriggerDelCommand(\n                \"trigger-del\",\n                root.root.clone(),\n                name.into(),\n            ))\n            .await?;\n        Ok(response)\n    }\n\n    /// Lists registered triggers.\n    pub async fn list_triggers(&self, root: &ResolvedRoot) -> Result<TriggerListResponse, Error> {\n        let response: TriggerListResponse = self\n            .generic_request(TriggerListCommand(\"trigger-list\", root.root.clone()))\n            .await?;\n        Ok(response)\n    }\n\n    pub async fn get_asserted_states(\n        &self,\n        root: &ResolvedRoot,\n    ) -> Result<GetAssertedStatesResponse, Error> {\n        let request = GetAssertedStatesRequest(\"debug-get-asserted-states\", root.root.clone());\n\n        let response: GetAssertedStatesResponse = self.generic_request(request).await?;\n        Ok(response)\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use std::io;\n\n    use futures::stream;\n    use futures::stream::TryStreamExt;\n    use serde::Deserialize;\n    use serde::Serialize;\n    use tokio_util::io::StreamReader;\n\n    use super::*;\n\n    #[derive(Serialize, Deserialize, PartialEq, Debug)]\n    struct TestStruct {\n        value: i32,\n    }\n\n    #[test]\n    fn connection_builder_paths() {\n        let builder = Connector::new().unix_domain_socket(\"/some/path\");\n        assert_eq!(builder.unix_domain, Some(PathBuf::from(\"/some/path\")));\n    }\n\n    #[tokio::test]\n    async fn test_decoder() {\n        async fn read_bser(buf: &[u8], chunk_size: usize) -> Vec<TestStruct> {\n            let chunks = buf\n                .chunks(chunk_size)\n                .map(|c| Result::<_, io::Error>::Ok(Bytes::copy_from_slice(c)));\n\n            let reader = StreamReader::new(stream::iter(chunks));\n\n            FramedRead::new(reader, BserSplitter)\n                .map_err(TaskError::from)\n                .and_then(|bytes| async move {\n                    // We unwrap this since a) this is a test and b) serde_bser's errors aren't\n                    // easily propagated into en error type like anyhow::Error without losing the\n                    // message.\n                    Ok(serde_bser::from_slice::<TestStruct>(&bytes).unwrap())\n                })\n                .try_collect()\n                .await\n                .unwrap()\n        }\n\n        let msgs = vec![\n            TestStruct { value: 1 },\n            TestStruct { value: 2 },\n            TestStruct { value: 3 },\n        ];\n\n        let mut buf = vec![];\n\n        for msg in msgs.iter() {\n            serde_bser::ser::serialize(&mut buf, msg).expect(\"Failed to write to a Vec\");\n        }\n\n        // Read it with various sizes\n        assert_eq!(msgs, read_bser(&buf, 1).await);\n        assert_eq!(msgs, read_bser(&buf, 2).await);\n        assert_eq!(msgs, read_bser(&buf, 10).await);\n        assert_eq!(msgs, read_bser(&buf, buf.len()).await);\n    }\n\n    #[test]\n    fn test_decoder_err() {\n        let mut bytes = BytesMut::new();\n\n        // We don't error if there isn't much data yet\n        bytes.extend_from_slice(&[0; 10]);\n        let r1 = BserSplitter.decode(&mut bytes);\n        assert!(r1.is_ok());\n        assert!(r1.unwrap().is_none());\n\n        // We do if there is enough\n        bytes.extend_from_slice(&[0; 10]);\n        let r1 = BserSplitter.decode(&mut bytes);\n        assert!(r1.is_err());\n    }\n\n    #[test]\n    fn test_bounds() {\n        fn assert_bounds<T: std::error::Error + Sync + Send + 'static>() {}\n        assert_bounds::<Error>();\n        assert_bounds::<TaskError>();\n    }\n}\n"
  },
  {
    "path": "watchman/rust/watchman_client/src/named_pipe.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#![cfg(windows)]\nuse core::ffi::c_void;\nuse std::io::Error as IoError;\nuse std::os::windows::ffi::OsStrExt;\nuse std::path::PathBuf;\nuse std::pin::Pin;\nuse std::task::Context;\nuse std::task::Poll;\n\nuse tokio::io::AsyncRead;\nuse tokio::io::AsyncWrite;\nuse tokio::io::ReadBuf;\nuse tokio::net::windows::named_pipe::NamedPipeClient;\nuse winapi::um::fileapi::CreateFileW;\nuse winapi::um::fileapi::OPEN_EXISTING;\nuse winapi::um::winbase::FILE_FLAG_OVERLAPPED;\nuse winapi::um::winnt::GENERIC_READ;\nuse winapi::um::winnt::GENERIC_WRITE;\n\nuse crate::Error;\n\n/// Wrapper around a tokio [`NamedPipeClient`]\npub struct NamedPipe {\n    io: NamedPipeClient,\n}\n\nimpl NamedPipe {\n    pub async fn connect(path: PathBuf) -> Result<Self, Error> {\n        let win_path = path\n            .as_os_str()\n            .encode_wide()\n            .chain(Some(0))\n            .collect::<Vec<_>>();\n\n        let handle = unsafe {\n            CreateFileW(\n                win_path.as_ptr(),\n                GENERIC_READ | GENERIC_WRITE,\n                0,\n                std::ptr::null_mut(),\n                OPEN_EXISTING,\n                FILE_FLAG_OVERLAPPED,\n                std::ptr::null_mut(),\n            )\n        };\n        if handle.is_null() {\n            let err = IoError::last_os_error();\n            return Err(Error::Connect {\n                endpoint: path,\n                source: Box::new(err),\n            });\n        }\n\n        let io = unsafe {\n            // CreateFileW returns HANDLE which is typedef PVOID HANDLE which itself is typedef void *PVOID;\n            // See https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types\n            // tokio expects this: pub type HANDLE = *mut c_void;\n            NamedPipeClient::from_raw_handle(handle as *mut c_void).map_err(|err| {\n                Error::Connect {\n                    endpoint: path,\n                    source: Box::new(err),\n                }\n            })?\n        };\n        Ok(Self { io })\n    }\n}\n\nimpl AsyncRead for NamedPipe {\n    fn poll_read(\n        self: Pin<&mut Self>,\n        ctx: &mut Context,\n        buf: &mut ReadBuf,\n    ) -> Poll<Result<(), IoError>> {\n        AsyncRead::poll_read(Pin::new(&mut self.get_mut().io), ctx, buf)\n    }\n}\n\nimpl AsyncWrite for NamedPipe {\n    fn poll_write(\n        self: Pin<&mut Self>,\n        ctx: &mut Context,\n        buf: &[u8],\n    ) -> Poll<Result<usize, IoError>> {\n        AsyncWrite::poll_write(Pin::new(&mut self.get_mut().io), ctx, buf)\n    }\n\n    fn poll_flush(self: Pin<&mut Self>, ctx: &mut Context) -> Poll<Result<(), IoError>> {\n        AsyncWrite::poll_flush(Pin::new(&mut self.get_mut().io), ctx)\n    }\n\n    fn poll_shutdown(self: Pin<&mut Self>, ctx: &mut Context) -> Poll<Result<(), IoError>> {\n        AsyncWrite::poll_shutdown(Pin::new(&mut self.get_mut().io), ctx)\n    }\n}\n\nimpl crate::ReadWriteStream for NamedPipe {}\n"
  },
  {
    "path": "watchman/rust/watchman_client/src/pdu.rs",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//! This module defines the request and response PDU types used by the\n//! watchman protocol.\n\nuse std::fmt;\nuse std::path::PathBuf;\n\nuse serde::Deserialize;\nuse serde::Serialize;\nuse serde::Serializer;\nuse serde_bser::value::Value;\n\nuse crate::expr::Expr;\n\n#[derive(Deserialize, Debug)]\npub struct GetVersionResponse {\n    pub version: String,\n}\n\n#[derive(Deserialize, Debug)]\npub struct WatchListResponse {\n    pub roots: Vec<PathBuf>,\n}\n\n/// The `get-sockname` command response\n#[derive(Deserialize, Debug)]\npub struct GetSockNameResponse {\n    pub version: String,\n    pub sockname: Option<PathBuf>,\n    pub error: Option<String>,\n}\n\n/// The `clock` command response\n#[derive(Deserialize, Debug)]\npub struct ClockResponse {\n    pub version: String,\n    pub clock: ClockSpec,\n}\n\n/// The `clock` command request.\n#[derive(Serialize, Debug)]\npub struct ClockRequest(pub &'static str, pub PathBuf, pub ClockRequestParams);\n\n#[derive(Serialize, Debug)]\npub struct ClockRequestParams {\n    #[serde(skip_serializing_if = \"SyncTimeout::is_disabled\", default)]\n    pub sync_timeout: SyncTimeout,\n}\n\n/// The `get-config` command request\n#[derive(Serialize, Debug)]\npub struct GetConfigRequest(pub &'static str, pub PathBuf);\n\n/// An incomplete, but typed, representation of the Watchman config file,\n/// which usually lives in /etc/watchman.json. Add new fields as they're\n/// needed, and it might be worth someday exposing the serde_bser::Value\n/// directly so callers can parse it however they want.\n#[derive(Deserialize, Debug)]\npub struct WatchmanConfig {\n    pub ignore_dirs: Option<Vec<PathBuf>>,\n}\n\n/// The `get-config` command response\n#[derive(Deserialize, Debug)]\npub struct GetConfigResponse {\n    pub version: String,\n    pub config: WatchmanConfig,\n}\n\n/// Parameters used by `state-enter` and `state-leave` commands.\n#[derive(Serialize, Debug)]\npub struct StateEnterLeaveParams<'a> {\n    /// The name of the state being asserted\n    pub name: &'a str,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub metadata: Option<Value>,\n    #[serde(skip_serializing_if = \"SyncTimeout::is_default\")]\n    pub sync_timeout: SyncTimeout,\n}\n\n/// The `state-enter` or `state-leave` request.\n/// You should use `Client::state_enter` rather than directly constructing\n/// this type.\n#[derive(Serialize, Debug)]\npub struct StateEnterLeaveRequest<'a>(pub &'static str, pub PathBuf, pub StateEnterLeaveParams<'a>);\n\n/// The `state-enter` response\n#[derive(Deserialize, Debug)]\npub struct StateEnterLeaveResponse {\n    /// The watchman server version\n    pub version: String,\n}\n\n/// The `watch-project` command request.\n/// You should use `Client::resolve_root` rather than directly\n/// constructing this type.\n#[derive(Serialize, Debug)]\npub struct WatchProjectRequest(pub &'static str, pub PathBuf);\n\n/// The `watch-project` response\n#[derive(Deserialize, Debug)]\npub struct WatchProjectResponse {\n    /// The watchman server version\n    pub version: String,\n    /// The path relative to the root of the project; if not none,\n    /// this must be passed to QueryRequestCommon::relative_root\n    pub relative_path: Option<PathBuf>,\n    /// The root of the watched project\n    pub watch: PathBuf,\n    /// The watcher that the server is using to monitor this path\n    pub watcher: String,\n}\n\n/// When using the `path` generator, this specifies a path to be\n/// examined.\n/// <https://facebook.github.io/watchman/docs/file-query.html#path-generator>\n#[derive(Serialize, Clone, Debug)]\n#[serde(untagged)]\npub enum PathGeneratorElement {\n    RecursivePath(PathBuf),\n    ConstrainedDepth { path: PathBuf, depth: i64 },\n}\n\n/// The `query` request\n#[derive(Serialize, Clone, Debug)]\npub struct QueryRequest(pub &'static str, pub PathBuf, pub QueryRequestCommon);\n\n#[allow(clippy::trivially_copy_pass_by_ref)]\nfn is_false(v: &bool) -> bool {\n    !*v\n}\n\n#[derive(Serialize, Clone, Debug)]\n#[serde(into = \"i64\")]\npub struct SettleDurationMs(pub std::time::Duration);\n\nimpl From<std::time::Duration> for SettleDurationMs {\n    fn from(duration: std::time::Duration) -> Self {\n        Self(duration)\n    }\n}\n\nimpl From<SettleDurationMs> for i64 {\n    fn from(val: SettleDurationMs) -> Self {\n        val.0.as_millis() as i64\n    }\n}\n\n#[derive(Serialize, Clone, Debug, Default)]\n#[serde(into = \"i64\")]\npub enum SyncTimeout {\n    /// Use the default cookie synchronization timeout\n    #[default]\n    Default,\n    /// Disable the use of a sync cookie.\n    /// This can save ~15ms of latency, but may result in\n    /// results from an outdated view of the filesystem.\n    /// It is safe to use after you have performed a synchronized\n    /// query or clock call, so that you can guarantee that the\n    /// server is at least as current as the time that you started\n    /// your processing.\n    DisableCookie,\n    /// Specify a timeout for the sync cookie.  You should not\n    /// need to override the default value in most cases.\n    /// Note that the server has millisecond level granularity\n    /// for the timeout.\n    Duration(std::time::Duration),\n}\n\nimpl SyncTimeout {\n    fn is_default(&self) -> bool {\n        match self {\n            Self::Default => true,\n            _ => false,\n        }\n    }\n\n    fn is_disabled(&self) -> bool {\n        match self {\n            Self::DisableCookie => true,\n            _ => false,\n        }\n    }\n}\n\nimpl From<std::time::Duration> for SyncTimeout {\n    fn from(duration: std::time::Duration) -> Self {\n        let millis = duration.as_millis();\n        if millis == 0 {\n            Self::DisableCookie\n        } else {\n            Self::Duration(duration)\n        }\n    }\n}\n\nimpl From<SyncTimeout> for i64 {\n    fn from(val: SyncTimeout) -> Self {\n        match val {\n            // This is only really here because the `ClockRequestParams` PDU\n            // treats a missing sync_timeout as `DisableCookie`, whereas\n            // the `QueryRequestCommon` PDU treats it as `Default`.\n            // We don't really know for sure what the server will use for\n            // its default value as it may potentially be changed in a future\n            // revision of the server, but for the sake of having reasonable\n            // default behavior, we use the current default sync timeout here.\n            // We're honestly not likely to change this, so this should be fine.\n            // The server uses 1 minute; the value here is expressed in milliseconds.\n            SyncTimeout::Default => 60_000,\n            SyncTimeout::DisableCookie => 0,\n            SyncTimeout::Duration(d) => d.as_millis() as i64,\n        }\n    }\n}\n\n/// The query parameters.\n/// There are a large number of fields that influence the behavior.\n///\n/// A query consists of three phases:\n/// 1. Candidate generation\n/// 2. Result filtration (using the `expression` term)\n/// 3. Result rendering\n///\n/// The generation phase is explained in detail here:\n/// <https://facebook.github.io/watchman/docs/file-query.html#generators>\n///\n/// Note that it is legal to combine multiple generators but that it\n/// is often undesirable to do so.\n/// Not specifying a generator results in the default \"all-files\" generator\n/// being used to iterate all known files.\n///\n/// The filtration and expression syntax is explained here:\n/// <https://facebook.github.io/watchman/docs/file-query.html#expressions>\n#[derive(Serialize, Default, Clone, Debug)]\npub struct QueryRequestCommon {\n    /// If set, enables the glob generator and specifies a set of globs\n    /// that will be expanded into a list of file names and then filtered\n    /// according to the expression field.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub glob: Option<Vec<String>>,\n\n    /// If using the glob generator and set to true, do not treat the backslash\n    /// character as an escape sequence\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub glob_noescape: bool,\n\n    /// If using the glob generator and set to true, include files whose basename\n    /// starts with `.` in the results. The default behavior for globs is to\n    /// exclude those files from the results.\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub glob_includedotfiles: bool,\n\n    /// If set, enables the use of the `path` generator.\n    /// <https://facebook.github.io/watchman/docs/file-query.html#path-generator>\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub path: Option<Vec<PathGeneratorElement>>,\n\n    /// If set, enables the use of the `suffix` generator, and specifies the\n    /// list of filename suffixes.\n    /// In virtualized filesystems this can result in an expensive O(project)\n    /// filesystem walk, so it is strongly recommended that you scope this to\n    /// a relatively shallow subdirectory.\n    ///\n    /// <https://facebook.github.io/watchman/docs/file-query.html#suffix-generator>\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub suffix: Option<Vec<PathBuf>>,\n\n    /// If set, enables the use of the `since` generator and specifies the last\n    /// time you queried the server and for which you wish to receive a delta of\n    /// changes.\n    /// You will typically thread the QueryResult.clock field back to a subsequent\n    /// since query to process the continuity of matching file changes.\n    /// <https://facebook.github.io/watchman/docs/file-query.html#since-generator>\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub since: Option<Clock>,\n\n    /// if set, indicates that all input paths are relative to this subdirectory\n    /// in the project, and that all returned filenames will also be relative to\n    /// this subdirectory.\n    /// In large virtualized filesystems it is undesirable to leave this set to\n    /// None as it makes it more likely that you will trigger an O(project)\n    /// filesystem walk.\n    /// This field is set automatically from the ResolvedRoot when you perform queries\n    /// using Client::query.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub relative_root: Option<PathBuf>,\n\n    /// If set, specifies the expression to use to filter the candidate matches\n    /// produced by the selected query generator.\n    /// Each candidate is visited in turn and has the expression applied.\n    /// Candidates for which the expression evaluates as true will be included\n    /// in the returned list of files.\n    /// If left unspecified, the server will assume `Expr::True`.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub expression: Option<Expr>,\n\n    /// Specifies the list of fields names returned by the server.\n    /// The `name` field should be considered a required field and is the cheapest\n    /// field to return.\n    /// Depending on the watcher implementation, other metadata has varying cost.\n    /// In general, avoid querying `size` and `mode` fields and instead prefer to\n    /// query `content.sha1hex` and `type` instead to avoid materializing inodes\n    /// in a virtualized filesystem.\n    pub fields: Vec<&'static str>,\n\n    /// If true you indicate that you know how to 100% correctly deal with a fresh\n    /// instance result set.  It is strongly recommended that you leave this\n    /// option alone as it is a common source of cache invalidation and divergence\n    /// issues for clients.\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub empty_on_fresh_instance: bool,\n\n    /// If true you indicate that you don't want watchman to query for or\n    /// return the changed files. This is most helpful if you'd quickly\n    /// like the saved-state but don't care about the changed files.\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub omit_changed_files: bool,\n\n    /// When requesting saved state information via SavedStateClockData, if\n    /// `fail_if_no_saved_state` is set to true, the server will generate a\n    /// query error in the case that the merge base change and no appropriate\n    /// saved state could be found.\n    /// Otherwise, the default behavior is to perform a normal watchman since\n    /// query that may return a large number of changed files.\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub fail_if_no_saved_state: bool,\n\n    /// If true, treat filenames as case sensitive even on filesystems that otherwise\n    /// appear to be case insensitive.\n    /// This can improve performance of directory traversal in queries by turning\n    /// O(directory-size) operations into an O(1) hash lookup.\n    /// <https://facebook.github.io/watchman/docs/cmd/query.html#case-sensitivity>\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub case_sensitive: bool,\n\n    /// If set, override the default synchronization timeout.\n    /// The timeout controls how long the server will wait to observe a cookie\n    /// file through the notification stream.\n    /// If the timeout is reached, the query will fail.\n    ///\n    /// Specify `SyncTimeout::DisableCookie` to tell the server not to use a sync\n    /// cookie.  **Disabling sync cookies means that your query results may be\n    /// slightly out of date**.  You can safely perform a query with sync cookies\n    /// disabled if you have explicitly synchronized.  For example, you can perform a\n    /// synchronized `Client::clock` call at the start of your processing run\n    /// to ensure that the server is current up to that point in time,\n    /// and then issue a large volume of additional queries with the sync cookie\n    /// disabled and save approximately ~15ms of latency per query.\n    ///\n    /// ## See also:\n    /// * <https://facebook.github.io/watchman/docs/cookies.html>\n    /// * <https://facebook.github.io/watchman/docs/cmd/query.html#synchronization-timeout-since-21>\n    #[serde(skip_serializing_if = \"SyncTimeout::is_default\", default)]\n    pub sync_timeout: SyncTimeout,\n\n    #[serde(skip_serializing_if = \"Option::is_none\", default)]\n    pub settle_period: Option<SettleDurationMs>,\n\n    #[serde(skip_serializing_if = \"Option::is_none\", default)]\n    pub settle_timeout: Option<SettleDurationMs>,\n\n    /// If set to true, when mixing generators (not recommended), dedup results by filename.\n    /// This defaults to false.  When not enabled, if multiple generators match\n    /// the same file, it will appear twice in the result set.\n    /// Turning on dedup_results will increase the memory cost of processing a query\n    /// and build an O(result-size) hash map to dedup the results.\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub dedup_results: bool,\n\n    /// Controls the duration that the server will wait to obtain a lock on the\n    /// filesystem view.\n    /// You should not normally need to change this.\n    /// <https://facebook.github.io/watchman/docs/cmd/query.html#lock-timeout>\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub lock_timeout: Option<i64>,\n\n    /// If set, records the request_id in internal performance sampling data.\n    /// It is also exported through the environment as HGREQUESTID so that\n    /// the context of the request can be passed down to any child mercurial\n    /// processes that might be spawned as part of processing source control\n    /// aware queries.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub request_id: Option<String>,\n\n    /// If this is set Watchman should guarantee that events are sent for\n    /// directories. When this is not set watchman is known to skip sending\n    /// events for directories on EdenFS repos that change across commits.\n    /// Collecting these events can be slow when there were many recent commit\n    /// transitions.\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub always_include_directories: bool,\n}\n\n#[derive(Deserialize, Clone, Debug)]\npub struct QueryDebugInfo {\n    pub cookie_files: Option<Vec<PathBuf>>,\n}\n\n/// Holds the result of a query.\n/// The result is generic over a `F` type that you define.\n/// The `F` should deserialize the list of fields in your QueryRequestCommon\n/// struct.\n#[derive(Deserialize, Clone, Debug)]\npub struct QueryResult<F>\nwhere\n    F: std::fmt::Debug + Clone,\n{\n    /// The version of the watchman server\n    pub version: String,\n    /// If true, indicates that this result set represents the\n    /// total set of possible matches.  Otherwise the results should be\n    /// considered to be incremental since your last since query.\n    /// If is_fresh_instance is true you MUST arrange to forget about\n    /// any files not included in the list of files in this QueryResult\n    /// otherwise you risk diverging your state.\n    #[serde(default)]\n    pub is_fresh_instance: bool,\n\n    /// Holds the list of matching files from the query\n    pub files: Option<Vec<F>>,\n\n    /// The clock value at the time that these results were generated\n    pub clock: Clock,\n\n    #[serde(rename = \"state-enter\")]\n    #[doc(hidden)]\n    pub state_enter: Option<String>,\n\n    #[serde(rename = \"state-leave\")]\n    #[doc(hidden)]\n    pub state_leave: Option<String>,\n    #[serde(rename = \"metadata\")]\n    pub state_metadata: Option<Value>,\n\n    /// When using source control aware queries with saved\n    /// state configuration, this field holds metadata from\n    /// the save state storage engine.\n    #[serde(rename = \"saved-state-info\")]\n    pub saved_state_info: Option<Value>,\n\n    pub debug: Option<QueryDebugInfo>,\n}\n\n#[derive(Serialize, Default, Clone, Debug)]\npub struct SubscribeRequest {\n    /// If set, enables the use of the `since` generator and specifies the last\n    /// time you queried the server and for which you wish to receive a delta of\n    /// changes.\n    /// You will typically thread the QueryResult.clock field back to a subsequent\n    /// since query to process the continuity of matching file changes.\n    /// <https://facebook.github.io/watchman/docs/file-query.html#since-generator>\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub since: Option<Clock>,\n\n    /// if set, indicates that all input paths are relative to this subdirectory\n    /// in the project, and that all returned filenames will also be relative to\n    /// this subdirectory.\n    /// In large virtualized filesystems it is undesirable to leave this set to\n    /// None as it makes it more likely that you will trigger an O(project)\n    /// filesystem walk.\n    /// This field is set automatically from the ResolvedRoot when you perform queries\n    /// using Client::query.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub relative_root: Option<PathBuf>,\n\n    /// If set, specifies the expression to use to filter the candidate matches\n    /// produced by the selected query generator.\n    /// Each candidate is visited in turn and has the expression applied.\n    /// Candidates for which the expression evaluates as true will be included\n    /// in the returned list of files.\n    /// If left unspecified, the server will assume `Expr::True`.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub expression: Option<Expr>,\n\n    /// Specifies the list of fields names returned by the server.\n    /// The `name` field should be considered a required field and is the cheapest\n    /// field to return.\n    /// Depending on the watcher implementation, other metadata has varying cost.\n    /// In general, avoid querying `size` and `mode` fields and instead prefer to\n    /// query `content.sha1hex` and `type` instead to avoid materializing inodes\n    /// in a virtualized filesystem.\n    pub fields: Vec<&'static str>,\n\n    /// If true you indicate that you know how to 100% correctly deal with a fresh\n    /// instance result set.  It is strongly recommended that you leave this\n    /// option alone as it is a common source of cache invalidation and divergence\n    /// issues for clients.\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub empty_on_fresh_instance: bool,\n\n    /// If true, treat filenames as case sensitive even on filesystems that otherwise\n    /// appear to be case insensitive.\n    /// This can improve performance of directory traversal in queries by turning\n    /// O(directory-size) operations into an O(1) hash lookup.\n    /// <https://facebook.github.io/watchman/docs/cmd/query.html#case-sensitivity>\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub case_sensitive: bool,\n\n    /// In some circumstances it is desirable for a client to observe the creation of\n    /// the control files at the start of a version control operation. You may specify\n    /// that you want this behavior by passing the defer_vcs flag to your\n    /// subscription command invocation\n    /// <https://facebook.github.io/watchman/docs/cmd/subscribe.html#filesystem-settling>\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub defer_vcs: bool,\n\n    /// The `defer` field specifies a list of state names for which the subscriber\n    /// wishes to defer the notification stream.\n    /// <https://facebook.github.io/watchman/docs/cmd/subscribe.html#defer>\n    #[serde(default, skip_serializing_if = \"Vec::is_empty\")]\n    pub defer: Vec<&'static str>,\n\n    /// The `drop` field specifies a list of state names for which the subscriber\n    /// wishes to discard the notification stream.\n    /// <https://facebook.github.io/watchman/docs/cmd/subscribe.html#drop>\n    #[serde(default, skip_serializing_if = \"Vec::is_empty\")]\n    pub drop: Vec<&'static str>,\n}\n\n#[derive(Serialize, Clone, Debug)]\npub struct SubscribeCommand(\n    pub &'static str,\n    pub PathBuf,\n    pub String,\n    pub SubscribeRequest,\n);\n\n/// Returns information about the state of the watch at the time the\n/// subscription was initiated.\n#[derive(Deserialize, Debug)]\npub struct SubscribeResponse {\n    pub version: String,\n    #[allow(unused)] // TODO unused warning after rustc upgrade\n    subscribe: String,\n\n    /// The clock at initiation time.\n    pub clock: Clock,\n\n    /// The set of asserted states at watch initiation time.\n    /// This is useful in the case where you need to reason\n    /// about the states and may have connected after the\n    /// StateEnter was generated but prior to the StateLeave\n    #[serde(default, rename = \"asserted-states\")]\n    pub asserted_states: Vec<String>,\n\n    /// When using source control aware queries with saved\n    /// state configuration, this field holds metadata from\n    /// the save state storage engine.\n    #[serde(rename = \"saved-state-info\")]\n    pub saved_state_info: Option<Value>,\n}\n\n/// The `trigger` command request.\n///\n/// The fields are explained in detail here:\n/// <https://facebook.github.io/watchman/docs/cmd/trigger#extended-syntax>\n#[derive(Deserialize, Serialize, Default, Clone, Debug)]\npub struct TriggerRequest {\n    /// Defines the name of the trigger.\n    pub name: String,\n\n    /// Specifies the command to invoke.\n    pub command: Vec<String>,\n\n    /// It true, matching files (up to system limits) will be added to the\n    /// command's execution args.\n    #[serde(default, skip_serializing_if = \"is_false\")]\n    pub append_files: bool,\n\n    /// Specifies the expression used to filter candidate matches.\n    #[serde(skip_serializing_if = \"Option::is_none\", skip_deserializing)]\n    pub expression: Option<Expr>,\n\n    /// Configure the way `stdin` is configured for the executed trigger.\n    #[serde(\n        default,\n        skip_serializing_if = \"Option::is_none\",\n        serialize_with = \"TriggerStdinConfig::serialize\",\n        skip_deserializing\n    )]\n    pub stdin: Option<TriggerStdinConfig>,\n\n    /// Specifies a file to write the output stream to.  Prefix with `>` to\n    /// overwrite and `>>` to append.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub stdout: Option<String>,\n\n    /// Specifies a file to write the error stream to.  Prefix with `>` to\n    /// overwrite and `>>` to append.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub stderr: Option<String>,\n\n    /// Specifies a limit on the number of files reported on stdin when stdin is\n    /// set to hold the set of matched files.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub max_files_stdin: Option<u64>,\n\n    /// Specifies the working directory that will be set prior to spawning the\n    /// process. The default is to set the working directory to the watched\n    /// root. The value of this property is a string that will be interpreted\n    /// relative to the watched root.\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub chdir: Option<String>,\n\n    /// Since 3.4. Evaluates triggers with respect to a path within a watched root.\n    ///\n    /// See <https://facebook.github.io/watchman/docs/cmd/trigger#relative-roots>\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub relative_root: Option<PathBuf>,\n}\n\n#[derive(Clone, Debug, Default)]\npub enum TriggerStdinConfig {\n    #[default]\n    DevNull,\n    FieldNames(Vec<String>),\n    NamePerLine,\n}\n\nimpl TriggerStdinConfig {\n    fn serialize<S>(this: &Option<Self>, serializer: S) -> Result<S::Ok, S::Error>\n    where\n        S: Serializer,\n    {\n        match this {\n            Some(Self::DevNull) => serializer.serialize_str(\"/dev/null\"),\n            Some(Self::FieldNames(names)) => serializer.collect_seq(names.iter()),\n            Some(Self::NamePerLine) => serializer.serialize_str(\"NAME_PER_LINE\"),\n            None => serializer.serialize_none(),\n        }\n    }\n}\n\n#[derive(Serialize, Clone, Debug)]\npub struct TriggerCommand(pub &'static str, pub PathBuf, pub TriggerRequest);\n\n#[derive(Deserialize, Debug)]\npub struct TriggerResponse {\n    pub version: String,\n    pub disposition: String,\n    pub triggerid: String,\n}\n\n#[derive(Serialize, Clone, Debug)]\npub struct TriggerDelCommand(pub &'static str, pub PathBuf, pub String);\n\n#[derive(Deserialize, Debug)]\npub struct TriggerDelResponse {\n    pub version: String,\n    pub deleted: bool,\n    pub trigger: String,\n}\n\n#[derive(Serialize, Clone, Debug)]\npub struct TriggerListCommand(pub &'static str, pub PathBuf);\n\n#[derive(Deserialize, Debug)]\npub struct TriggerListResponse {\n    pub version: String,\n    pub triggers: Vec<TriggerRequest>,\n}\n\n#[derive(Serialize, Debug)]\npub struct Unsubscribe(pub &'static str, pub PathBuf, pub String);\n\n#[derive(Deserialize, Debug)]\npub struct UnsubscribeResponse {\n    pub version: String,\n    pub unsubscribe: String,\n}\n\n#[derive(Serialize, Debug)]\npub struct GetAssertedStatesRequest(pub &'static str, pub PathBuf);\n\n#[derive(Deserialize, Debug)]\npub struct State {\n    pub name: String,\n    pub state: String,\n}\n\n#[derive(Deserialize, Debug)]\npub struct GetAssertedStatesResponse {\n    pub version: String,\n    pub root: String,\n    pub states: Vec<State>,\n}\n\n/// A `Clock` is used to refer to a logical point in time.\n/// Internally, watchman maintains a monotonically increasing tick counter\n/// along with some additional data to detect A-B-A style situations if\n/// eg: the watchman server is restarted.\n///\n/// Clocks are important when using the recency index with the `since`\n/// generator.\n///\n/// A clock can also encoded metadata describing the state of source\n/// control to work with source control aware queries:\n/// <https://facebook.github.io/watchman/docs/scm-query.html>\n#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]\n#[serde(untagged)]\npub enum Clock {\n    /// Just a basic ClockSpec\n    Spec(ClockSpec),\n    /// A clock embedding additional source control information\n    ScmAware(FatClockData),\n}\n\n/// The fundamental clock specifier string.\n/// The contents of the string should be considered to be opaque to\n/// the client as the server occasionally evolves the meaning of\n/// the clockspec and its format is expressly not a stable API.\n///\n/// In particular, there is no defined way for a client to reason\n/// about the relationship between any two ClockSpec's.\n///\n/// <https://facebook.github.io/watchman/docs/clockspec.html>\n#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]\n#[serde(untagged)]\npub enum ClockSpec {\n    StringClock(String),\n    UnixTimestamp(i64),\n}\n\n/// Construct a null clockspec\nimpl Default for ClockSpec {\n    fn default() -> Self {\n        Self::null()\n    }\n}\n\nimpl ClockSpec {\n    /// Construct a null clockspec.\n    /// This indicates a time before any changes occurred and will\n    /// cause a `since` generator based query to emit a fresh instance\n    /// result set that contains all possible matches.\n    /// It is appropriate to use a null clock in cases where you are\n    /// starting up from scratch and don't have a saved clock value\n    /// to use as the basis for your query.\n    pub fn null() -> Self {\n        Self::StringClock(\"c:0:0\".to_string())\n    }\n\n    /// Construct a named cursor clockspec.\n    ///\n    /// Using a named cursor causes the server to maintain the name -> clock\n    /// value mapping on the behalf of your tool.  This frees your client\n    /// from the need to manage storing of the clock between queries but\n    /// does require an exclusive lock for the duration of the query, which\n    /// serializes the query with all other clients.\n    ///\n    /// The namespace is per watched project so your cursor name must be\n    /// unique enough to not collide with other tools that use this same\n    /// feature.\n    ///\n    /// There is no way to clear the value associated with a named cursor.\n    ///\n    /// The first time you use a named cursor, it has an effective value\n    /// of the null clock.\n    ///\n    /// We do not recommend using named cursors because of the exclusive\n    /// lock requirement.\n    pub fn named_cursor(cursor: &str) -> Self {\n        Self::StringClock(format!(\"n:{}\", cursor))\n    }\n\n    /// A clock specified as a unix timestamp.\n    /// The watchman server will never generate a clock in this form,\n    /// but will accept them in `since` generator based queries.\n    /// Using UnixTimeStamp is discouraged as it has granularity of\n    /// 1 second and will often result in over-reporting the same events\n    /// when they happen in the same second.\n    pub fn unix_timestamp(time_t: i64) -> Self {\n        Self::UnixTimestamp(time_t)\n    }\n}\n\nimpl From<ClockSpec> for Value {\n    fn from(val: ClockSpec) -> Self {\n        match val {\n            ClockSpec::StringClock(st) => Value::Utf8String(st),\n            ClockSpec::UnixTimestamp(ts) => Value::Integer(ts),\n        }\n    }\n}\n\n/// Holds extended clock data that includes source control aware\n/// query metadata.\n/// <https://facebook.github.io/watchman/docs/scm-query.html>\n#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]\npub struct FatClockData {\n    pub clock: ClockSpec,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub scm: Option<ScmAwareClockData>,\n}\n\n/// Holds extended clock data that includes source control aware\n/// query metadata.\n/// <https://facebook.github.io/watchman/docs/scm-query.html>\n#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]\npub struct ScmAwareClockData {\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub mergebase: Option<String>,\n    #[serde(rename = \"mergebase-with\")]\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub mergebase_with: Option<String>,\n\n    #[serde(rename = \"saved-state\")]\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub saved_state: Option<SavedStateClockData>,\n}\n\n/// Holds extended clock data that includes source control aware\n/// query metadata.\n/// <https://facebook.github.io/watchman/docs/scm-query.html>\n#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]\npub struct SavedStateClockData {\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub storage: Option<String>,\n    #[serde(rename = \"commit-id\")]\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub commit: Option<String>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    pub config: Option<Value>,\n}\n\n/// Reports the content SHA1 hash for a file.\n/// Since computing the hash can fail, this struct can also represent\n/// the error that happened during hash computation.\n#[derive(Deserialize, Debug, Clone, PartialEq)]\n#[serde(untagged)]\npub enum ContentSha1Hex {\n    /// The 40-hex-digit SHA1 content hash of the file contents\n    Hash(String),\n    /// The error that occurred while trying to determine the hash\n    Error { error: String },\n    /// Value if the file was deleted.\n    /// Note that this is distinct from the case where watchman believes\n    /// that the file exists and where some other process unlinks it before\n    /// watchman can compute the hash: in that racy scenario, the value\n    /// will be `ContentSha1Hex::Error(_)`.\n    None,\n}\n\n/// Encodes the file type field returned in query results and\n/// specified in expression terms.\n///\n/// <https://facebook.github.io/watchman/docs/expr/type.html>\n///\n/// Use this in your query file struct like this:\n///\n/// ```\n/// use serde::Deserialize;\n/// use watchman_client::prelude::*;\n/// #[derive(Deserialize, Debug, Clone)]\n/// struct NameAndType {\n///     name: std::path::PathBuf,\n///     #[serde(rename = \"type\")]\n///     file_type: FileType,\n/// }\n/// ```\n#[derive(Serialize, Deserialize, Debug, Clone, Copy)]\n#[serde(from = \"String\", into = \"String\")]\npub enum FileType {\n    BlockSpecial,\n    CharSpecial,\n    Directory,\n    Regular,\n    Fifo,\n    Symlink,\n    Socket,\n    SolarisDoor,\n    Unknown,\n}\n\nimpl fmt::Display for FileType {\n    fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {\n        f.write_str(&String::from(*self))\n    }\n}\n\nimpl From<String> for FileType {\n    fn from(s: String) -> Self {\n        match s.as_ref() {\n            \"b\" => Self::BlockSpecial,\n            \"c\" => Self::CharSpecial,\n            \"d\" => Self::Directory,\n            \"f\" => Self::Regular,\n            \"p\" => Self::Fifo,\n            \"l\" => Self::Symlink,\n            \"s\" => Self::Socket,\n            \"D\" => Self::SolarisDoor,\n            \"?\" => Self::Unknown,\n            unknown => panic!(\"Watchman Server returned impossible file type {}\", unknown),\n        }\n    }\n}\n\nimpl From<FileType> for String {\n    fn from(val: FileType) -> Self {\n        match val {\n            FileType::BlockSpecial => \"b\",\n            FileType::CharSpecial => \"c\",\n            FileType::Directory => \"d\",\n            FileType::Regular => \"f\",\n            FileType::Fifo => \"p\",\n            FileType::Symlink => \"l\",\n            FileType::Socket => \"s\",\n            FileType::SolarisDoor => \"D\",\n            FileType::Unknown => \"?\",\n        }\n        .to_string()\n    }\n}\n\n#[cfg(test)]\nmod tests {\n    use std::collections::HashMap;\n\n    use serde_bser::value::Value;\n\n    use super::*;\n    use crate::bunser;\n\n    fn convert_bser_value<T>(input: Value) -> T\n    where\n        T: serde::de::DeserializeOwned,\n    {\n        let binary = serde_bser::ser::serialize(Vec::new(), input).unwrap();\n        bunser(&binary).unwrap()\n    }\n\n    #[test]\n    fn test_content_sha1hex_hash() {\n        let value: ContentSha1Hex =\n            convert_bser_value(\"e820c2c600a36f05ba905cf1bf32c4834e804e22\".into());\n        assert_eq!(\n            value,\n            ContentSha1Hex::Hash(\"e820c2c600a36f05ba905cf1bf32c4834e804e22\".into())\n        );\n    }\n\n    #[test]\n    fn test_content_sha1hex_error() {\n        let mut error_obj: HashMap<String, Value> = HashMap::new();\n        error_obj.insert(\"error\".to_string(), \"out of cookies\".into());\n\n        let value: ContentSha1Hex = convert_bser_value(error_obj.into());\n        assert_eq!(\n            value,\n            ContentSha1Hex::Error {\n                error: \"out of cookies\".into()\n            }\n        );\n    }\n\n    #[test]\n    fn test_content_sha1hex_none() {\n        let value: ContentSha1Hex = convert_bser_value(Value::Null);\n        assert_eq!(value, ContentSha1Hex::None);\n    }\n}\n"
  },
  {
    "path": "watchman/saved_state/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"factory\",\n    srcs = [\"SavedStateFactory.cpp\"],\n    headers = [\"SavedStateFactory.h\"],\n    deps = [\n        \"fbcode//watchman:client_context\",\n        \"fbcode//watchman:errors\",\n        \"fbcode//watchman:root\",\n        \"fbcode//watchman/saved_state:saved_state\",\n    ],\n    exported_deps = [\n        \"//watchman:config\",\n        \"//watchman:string\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ] + select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:linux\": [\n            \"//watchman/facebook/saved_state:manifold_saved_state\",\n        ],\n    }),\n)\n\ncpp_library(\n    name = \"saved_state\",\n    srcs = [\n        \"LocalSavedStateInterface.cpp\",\n        \"SavedStateInterface.cpp\",\n    ],\n    headers = [\n        \"LocalSavedStateInterface.h\",\n        \"SavedStateInterface.h\",\n    ],\n    deps = [\n        \"//watchman:command_registry\",\n        \"//watchman:errors\",\n        \"//watchman:logging\",\n        \"//watchman:scm\",\n        \"//watchman/fs:fd\",\n    ],\n    exported_deps = [\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n"
  },
  {
    "path": "watchman/saved_state/LocalSavedStateInterface.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/saved_state/LocalSavedStateInterface.h\"\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/fs/FileInformation.h\"\n#include \"watchman/scm/SCM.h\"\n\nstatic const int kDefaultMaxCommits{10};\n\nW_CAP_REG(\"saved-state-local\")\n\nnamespace watchman {\n\nLocalSavedStateInterface::LocalSavedStateInterface(\n    const json_ref& savedStateConfig,\n    const SCM* scm)\n    : SavedStateInterface(savedStateConfig), scm_(scm) {\n  // Max commits to search in source control history for a saved state\n  auto maxCommits = savedStateConfig.get_optional(\"max-commits\");\n  if (maxCommits) {\n    if (!maxCommits->isInt()) {\n      throw QueryParseError(\"'max-commits' must be an integer\");\n    }\n    maxCommits_ = maxCommits->asInt();\n    if (maxCommits_ < 1) {\n      throw QueryParseError(\"'max-commits' must be a positive integer\");\n    }\n  } else {\n    maxCommits_ = kDefaultMaxCommits;\n  }\n  // Local path to search for saved states. This path will only ever be read,\n  // never written.\n  auto localStoragePath = savedStateConfig.get_optional(\"local-storage-path\");\n  if (!localStoragePath) {\n    throw QueryParseError(\n        \"'local-storage-path' must be present in saved state config\");\n  }\n  if (!localStoragePath->isString()) {\n    throw QueryParseError(\"'local-storage-path' must be a string\");\n  }\n  localStoragePath_ = json_to_w_string(*localStoragePath);\n  if (!w_string_path_is_absolute(localStoragePath_)) {\n    throw QueryParseError(\"'local-storage-path' must be an absolute path\");\n  }\n  // The saved state project must be a sub-directory in the local storage\n  // path.\n  if (w_string_path_is_absolute(project_)) {\n    throw QueryParseError(\"'project' must be a relative path\");\n  }\n}\n\nSavedStateInterface::SavedStateResult\nLocalSavedStateInterface::getMostRecentSavedStateImpl(\n    w_string_piece lookupCommitId) const {\n  auto commitIds =\n      scm_->getCommitsPriorToAndIncluding(lookupCommitId, maxCommits_);\n  for (auto& commitId : commitIds) {\n    auto path = getLocalPath(commitId);\n    // We could return a path that no longer exists if the path is removed\n    // (for example by saved state GC) after we check that the path exists\n    // here, but before the client reads the state. We've explicitly chosen to\n    // return the state without additional safety guarantees, and leave it to\n    // the client to ensure GC happens only after states are no longer likely\n    // to be used.\n    if (w_path_exists(path.c_str())) {\n      log(DBG, \"Found saved state for commit \", commitId, \"\\n\");\n      SavedStateInterface::SavedStateResult result;\n      result.commitId = commitId;\n      result.savedStateInfo = json_object(\n          {{\"local-path\", w_string_to_json(path)},\n           {\"commit-id\", w_string_to_json(commitId)}});\n      return result;\n    }\n  }\n  SavedStateInterface::SavedStateResult result;\n  result.commitId = w_string();\n  result.savedStateInfo = json_object(\n      {{\"error\", w_string_to_json(\"No suitable saved state found\")}});\n  return result;\n}\n\nw_string LocalSavedStateInterface::getLocalPath(w_string_piece commitId) const {\n  w_string filename;\n  if (!projectMetadata_) {\n    filename = w_string::build(commitId);\n  } else {\n    filename = w_string::build(commitId, w_string(\"_\"), *projectMetadata_);\n  }\n  return w_string::pathCat({localStoragePath_, project_, filename});\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/saved_state/LocalSavedStateInterface.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/saved_state/SavedStateInterface.h\"\n\nnamespace watchman {\n\n// Identifies the most recent saved state for a given commit from saved states\n// stored on the local filesystem. The local storage path must contain a\n// subdirectory for the project, and within the project directory the saved\n// state for a given commit must be in a file whose name is the source control\n// commit hash. If project metadata is not specified, then only saved states\n// with no project metadata will be returned. If project metadata is specified,\n// then the most recent saved state with the specified project metadata will be\n// returned.\n//\n// Checks the most recent n commits to find a saved state, if available. If a\n// saved state is not available, returns an error message in the saved state\n// info JSON. If a saved state is available, returns the local path for the\n// state in the saved state info JSON, along with the saved state commit id.\nclass LocalSavedStateInterface : public SavedStateInterface {\n public:\n  LocalSavedStateInterface(const json_ref& savedStateConfig, const SCM* scm);\n\n  SavedStateInterface::SavedStateResult getMostRecentSavedStateImpl(\n      w_string_piece lookupCommitId) const override;\n  w_string getLocalPath(w_string_piece commitId) const;\n\n private:\n  json_int_t maxCommits_;\n  w_string localStoragePath_;\n  const SCM* scm_;\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/saved_state/SavedStateFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/saved_state/SavedStateFactory.h\"\n#include \"watchman/ClientContext.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/saved_state/LocalSavedStateInterface.h\"\n\n#if HAVE_MANIFOLD\n#include \"watchman/facebook/saved_state/ManifoldSavedStateInterface.h\" // @manual\n#endif\n\nnamespace watchman {\n\nstd::unique_ptr<SavedStateInterface> getInterface(\n    w_string_piece storageType,\n    const json_ref& savedStateConfig,\n    const SCM* scm,\n    [[maybe_unused]] Configuration config,\n    [[maybe_unused]] std::function<void(RootMetadata&)> collectRootMetadata,\n    [[maybe_unused]] ClientContext clientInfo) {\n#if HAVE_MANIFOLD\n  if (storageType == \"manifold\") {\n    return std::make_unique<ManifoldSavedStateInterface>(\n        savedStateConfig,\n        scm,\n        std::move(config),\n        std::move(collectRootMetadata),\n        std::move(clientInfo));\n  }\n#endif\n  if (storageType == \"local\") {\n    return std::make_unique<LocalSavedStateInterface>(savedStateConfig, scm);\n  }\n  QueryParseError::throwf(\"invalid storage type '{}'\", storageType);\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/saved_state/SavedStateFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nstruct RootMetadata;\nclass SCM;\nclass SavedStateInterface;\nstruct ClientContext;\n\n/**\n * Returns an appropriate SavedStateInterface implementation for the\n * specified storage type. Returns a managed pointer to the saved state\n * interface if successful. Throws if the storage type is not recognized, or\n * if the saved state interface does not successfully parse the saved state\n * config.\n */\nstd::unique_ptr<SavedStateInterface> getInterface(\n    w_string_piece storageType,\n    const json_ref& savedStateConfig,\n    const SCM* scm,\n    Configuration config,\n    std::function<void(RootMetadata&)> collectRootMetadata,\n    ClientContext clientInfo);\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/saved_state/SavedStateInterface.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/saved_state/SavedStateInterface.h\"\n#include <memory>\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n\nnamespace watchman {\n\nSavedStateInterface::~SavedStateInterface() = default;\n\nSavedStateInterface::SavedStateInterface(const json_ref& savedStateConfig) {\n  auto project = savedStateConfig.get_optional(\"project\");\n  if (!project) {\n    throw QueryParseError(\"'project' must be present in saved state config\");\n  }\n  if (!project->isString()) {\n    throw QueryParseError(\"'project' must be a string\");\n  }\n  project_ = json_to_w_string(*project);\n  auto projectMetadata = savedStateConfig.get_optional(\"project-metadata\");\n  if (projectMetadata) {\n    if (!projectMetadata->isString()) {\n      throw QueryParseError(\"'project-metadata' must be a string\");\n    }\n    projectMetadata_ = json_to_w_string(*projectMetadata);\n  } else {\n    projectMetadata_ = std::nullopt;\n  }\n}\n\nSavedStateInterface::SavedStateResult\nSavedStateInterface::getMostRecentSavedState(\n    w_string_piece lookupCommitId) const {\n  try {\n    return getMostRecentSavedStateImpl(lookupCommitId);\n  } catch (const std::exception& ex) {\n    // This is a performance optimization only so return an error message on\n    // failure but do not throw.\n    auto reason = ex.what();\n    log(ERR, \"Exception while finding most recent saved state: \", reason, \"\\n\");\n    SavedStateInterface::SavedStateResult result;\n    result.commitId = w_string();\n    result.savedStateInfo = json_object(\n        {{\"error\", w_string_to_json(\"Error while finding saved state\")}});\n    return result;\n  }\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/saved_state/SavedStateInterface.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nnamespace watchman {\n\nclass Configuration;\nstruct RootMetadata;\nclass SavedStateInterface;\nclass SCM;\nstruct ClientContext;\n\nusing SavedStateFactory = std::unique_ptr<SavedStateInterface> (*)(\n    w_string_piece storageType,\n    const json_ref& savedStateConfig,\n    const SCM* scm,\n    Configuration config,\n    std::function<void(RootMetadata&)> collectRootMetadata,\n    ClientContext clientInfo);\n\n// An interface that returns information about saved states associated with\n// specific source control commits. Clients using scm-aware queries can\n// receive information about the most recent known good saved state when the\n// mergebase changes, along with the changed files since that saved state. The\n// client can then update the current state based on the saved state and the\n// modified files since that state's commit, rather than processing all\n// changes since the prior mergebase.\nclass SavedStateInterface {\n public:\n  virtual ~SavedStateInterface();\n\n  // The commit ID of a saved state and a JSON blob of information clients can\n  // use to access the saved state.  The contents of the info varies with the\n  // storage type.\n  struct SavedStateResult {\n    w_string commitId;\n    std::optional<json_ref> savedStateInfo;\n  };\n  // Returns saved state information for the most recent commit prior to and\n  // including lookupCommitId that has a valid saved state for the specified\n  // storage key. The contents of the storage key and the return value vary with\n  // the storage type.\n  SavedStateResult getMostRecentSavedState(w_string_piece lookupCommitId) const;\n\n protected:\n  w_string project_;\n  std::optional<w_string> projectMetadata_;\n\n  explicit SavedStateInterface(const json_ref& savedStateConfig);\n  virtual SavedStateResult getMostRecentSavedStateImpl(\n      w_string_piece lookupCommitId) const = 0;\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/scm/Git.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/scm/Git.h\"\n#include <fmt/core.h>\n#include <folly/String.h>\n#include <folly/portability/SysTime.h>\n#include \"watchman/ChildProcess.h\"\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/fs/FileSystem.h\"\n\n// Capability indicating support for the git SCM\nW_CAP_REG(\"scm-git\")\n\nusing namespace std::chrono;\n\nnamespace {\nusing namespace watchman;\n\nvoid replaceEmbeddedNulls(std::string& str) {\n  std::replace(str.begin(), str.end(), '\\0', '\\n');\n}\n\nstd::string gitExecutablePath() {\n  return \"git\";\n}\n\nstruct GitResult {\n  w_string output;\n};\n\nGitResult runGit(\n    std::vector<std::string_view> cmdline,\n    ChildProcess::Options options,\n    std::string_view description) {\n  ChildProcess proc{cmdline, std::move(options)};\n  auto outputs = proc.communicate();\n  auto status = proc.wait();\n  if (status) {\n    auto output =\n        std::string{outputs.first ? outputs.first->view() : std::string_view{}};\n    auto error = std::string{\n        outputs.second ? outputs.second->view() : std::string_view{}};\n    replaceEmbeddedNulls(output);\n    replaceEmbeddedNulls(error);\n\n    SCMError::throwf(\n        \"failed to {}\\ncmd = {}\\nstdout = {}\\nstderr = {}\\nstatus = {}\",\n        description,\n        folly::join(\" \", cmdline),\n        output,\n        error,\n        status);\n  }\n\n  if (outputs.first) {\n    return GitResult{std::move(*outputs.first)};\n  } else {\n    return GitResult{\"\"};\n  }\n}\n\n} // namespace\n\nnamespace watchman {\n\nGit::Git(w_string_piece rootPath, w_string_piece scmRoot)\n    : SCM(rootPath, scmRoot),\n      indexPath_(fmt::format(\"{}/.git/index\", getSCMRoot())),\n      commitsPrior_(Configuration(), \"scm_git_commits_prior\", 32, 10),\n      mergeBases_(Configuration(), \"scm_git_mergebase\", 32, 10),\n      filesChangedSinceMergeBaseWith_(\n          Configuration(),\n          \"scm_git_files_since_mergebase\",\n          32,\n          10) {}\n\nChildProcess::Options Git::makeGitOptions(\n    const std::optional<w_string>& requestId) const {\n  ChildProcess::Options opt;\n  (void)requestId;\n  opt.nullStdin();\n  opt.pipeStdout();\n  opt.pipeStderr();\n  opt.chdir(getRootPath());\n  return opt;\n}\n\nstruct timespec Git::getIndexMtime() const {\n  try {\n    auto info =\n        getFileInformation(indexPath_.c_str(), CaseSensitivity::CaseSensitive);\n    return info.mtime;\n  } catch (const std::system_error&) {\n    // Failed to stat, so assume the current time\n    struct timeval now;\n    gettimeofday(&now, nullptr);\n    struct timespec ts;\n    ts.tv_sec = now.tv_sec;\n    ts.tv_nsec = now.tv_usec * 1000;\n    return ts;\n  }\n}\n\nw_string Git::mergeBaseWith(\n    w_string_piece commitId,\n    const std::optional<w_string>& requestId) const {\n  auto mtime = getIndexMtime();\n  auto key = fmt::format(\"{}:{}:{}\", commitId, mtime.tv_sec, mtime.tv_nsec);\n  auto commit = std::string{commitId.view()};\n\n  return mergeBases_\n      .get(\n          key,\n          [this, commit, requestId](const std::string&) {\n            auto result = runGit(\n                {gitExecutablePath(), \"merge-base\", commit, \"HEAD\"},\n                makeGitOptions(requestId),\n                \"query for the merge base\");\n\n            auto output = std::string{result.output.view()};\n            if (!output.empty() && output.back() == '\\n') {\n              output.pop_back();\n            }\n\n            if (output.size() != 40) {\n              SCMError::throwf(\n                  \"expected merge base to be a 40 character string, got {}\",\n                  output);\n            }\n\n            // TODO: is w_string(s.c_str()) safe?\n            return folly::makeFuture(w_string(output.c_str()));\n          })\n      .get()\n      ->value();\n}\n\nstd::vector<w_string> Git::getFilesChangedSinceMergeBaseWith(\n    w_string_piece commitId,\n    w_string_piece clock,\n    const std::optional<w_string>& requestId) const {\n  auto key = fmt::format(\"{}:{}\", commitId, clock);\n  auto commitCopy = std::string{commitId.view()};\n  return filesChangedSinceMergeBaseWith_\n      .get(\n          key,\n          [this, commit = std::move(commitCopy), requestId](\n              const std::string&) {\n            auto result = runGit(\n                {gitExecutablePath(), \"diff\", \"--name-only\", \"-z\", commit},\n                makeGitOptions(requestId),\n                \"query for files changed since merge base\");\n\n            std::vector<w_string> lines;\n            w_string_piece(result.output).split(lines, '\\0');\n            return folly::makeFuture(lines);\n          })\n      .get()\n      ->value();\n}\n\nstd::chrono::time_point<std::chrono::system_clock> Git::getCommitDate(\n    w_string_piece commitId,\n    const std::optional<w_string>& requestId) const {\n  auto result = runGit(\n      {gitExecutablePath(), \"log\", \"--format:%ct\", \"-n\", \"1\", commitId.view()},\n      makeGitOptions(requestId),\n      \"get commit date\");\n  double timestamp;\n  if (std::sscanf(result.output.c_str(), \"%lf\", &timestamp) != 1) {\n    throw std::runtime_error(\n        fmt::format(\n            \"failed to parse date value `{}` into a double\", result.output));\n  }\n  // TODO: maybe do some bounds checking on the double we get from\n  // git.\n  return system_clock::from_time_t(static_cast<time_t>(timestamp));\n}\n\nstd::vector<w_string> Git::getCommitsPriorToAndIncluding(\n    w_string_piece commitId,\n    int numCommits,\n    const std::optional<w_string>& requestId) const {\n  auto mtime = getIndexMtime();\n  auto key = fmt::format(\n      \"{}:{}:{}:{}\", commitId, numCommits, mtime.tv_sec, mtime.tv_nsec);\n  auto commitCopy = std::string{commitId.view()};\n\n  return commitsPrior_\n      .get(\n          key,\n          [this, commit = std::move(commitCopy), numCommits, requestId](\n              const std::string&) {\n            auto result = runGit(\n                {gitExecutablePath(),\n                 \"log\",\n                 \"-n\",\n                 fmt::to_string(numCommits),\n                 \"--format=%H\",\n                 commit},\n                makeGitOptions(requestId),\n                \"get prior commits\");\n\n            std::vector<w_string> lines;\n            w_string_piece(result.output).split(lines, '\\n');\n            return folly::makeFuture(lines);\n          })\n      .get()\n      ->value();\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/scm/Git.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <chrono>\n#include <vector>\n#include \"watchman/ChildProcess.h\"\n#include \"watchman/LRUCache.h\"\n#include \"watchman/scm/SCM.h\"\n\nnamespace watchman {\n\nclass Git : public SCM {\n public:\n  Git(w_string_piece rootPath, w_string_piece scmRoot);\n  w_string mergeBaseWith(\n      w_string_piece commitId,\n      const std::optional<w_string>& requestId = std::nullopt) const override;\n  std::vector<w_string> getFilesChangedSinceMergeBaseWith(\n      w_string_piece commitId,\n      w_string_piece clock,\n      const std::optional<w_string>& requestId = std::nullopt) const override;\n\n  std::chrono::time_point<std::chrono::system_clock> getCommitDate(\n      w_string_piece commitId,\n      const std::optional<w_string>& requestId = std::nullopt) const override;\n  std::vector<w_string> getCommitsPriorToAndIncluding(\n      w_string_piece commitId,\n      int numCommits,\n      const std::optional<w_string>& requestId = std::nullopt) const override;\n\n private:\n  std::string indexPath_;\n  mutable LRUCache<std::string, std::vector<w_string>> commitsPrior_;\n  mutable LRUCache<std::string, w_string> mergeBases_;\n  mutable LRUCache<std::string, std::vector<w_string>>\n      filesChangedSinceMergeBaseWith_;\n\n  ChildProcess::Options makeGitOptions(\n      const std::optional<w_string>& requestId) const;\n  struct timespec getIndexMtime() const;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/scm/Mercurial.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"Mercurial.h\"\n#include <fmt/core.h>\n#include <folly/String.h>\n#include <folly/portability/SysTime.h>\n#include <chrono>\n#include <cmath>\n#include <cstdio>\n#include \"watchman/ChildProcess.h\"\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/sockname.h\"\n\n// Capability indicating support for the mercurial SCM\nW_CAP_REG(\"scm-hg\")\n\nusing namespace std::chrono;\n\nnamespace {\nusing namespace watchman;\n\nvoid replaceEmbeddedNulls(std::string& str) {\n  std::replace(str.begin(), str.end(), '\\0', '\\n');\n}\n\nstd::string hgExecutablePath() {\n  auto hg = getenv(\"EDEN_HG_BINARY\");\n  if (hg && strlen(hg) > 0) {\n    return hg;\n  }\n  return \"hg\";\n}\n\nstruct MercurialResult {\n  w_string output;\n};\n\nMercurialResult runMercurial(\n    std::vector<std::string_view> cmdline,\n    ChildProcess::Options options,\n    std::string_view description) {\n  ChildProcess proc{cmdline, std::move(options)};\n  auto outputs = proc.communicate();\n  auto status = proc.wait();\n  if (status) {\n    auto output =\n        std::string{outputs.first ? outputs.first->view() : std::string_view{}};\n    auto error = std::string{\n        outputs.second ? outputs.second->view() : std::string_view{}};\n    replaceEmbeddedNulls(output);\n    replaceEmbeddedNulls(error);\n    SCMError::throwf(\n        \"failed to {}\\ncmd = {}\\nstdout = {}\\nstderr = {}\",\n        description,\n        folly::join(\" \", cmdline),\n        output,\n        error);\n  }\n\n  if (outputs.first) {\n    return MercurialResult{std::move(*outputs.first)};\n  } else {\n    return MercurialResult{\"\"};\n  }\n}\n\n} // namespace\n\nnamespace watchman {\n\nChildProcess::Options Mercurial::makeHgOptions(\n    const std::optional<w_string>& requestId) const {\n  ChildProcess::Options opt;\n  // Ensure that the hgrc doesn't mess with the behavior\n  // of the commands that we're runing.\n  opt.environment().set(\"HGPLAIN\", w_string(\"1\"));\n  // Ensure that we do not telemetry log profiling data for the commands we are\n  // running by default. This is to avoid a significant increase in the rate of\n  // logging.\n  if (!cfg_get_bool(\"enable_hg_telemetry_logging\", false)) {\n    opt.environment().set(\"NOSCMLOG\", w_string(\"1\"));\n  }\n  // chg can elect to kill all children if an error occurs in any child.\n  // This can cause commands we spawn to fail transiently.  While we'd\n  // love to have the lowest latency, the transient failure causes problems\n  // with our ability to deliver notifications to our clients in a timely\n  // manner, so we disable the use of chg for the mercurial processes\n  // that we spawn.\n  opt.environment().set(\"CHGDISABLE\", w_string(\"1\"));\n  // This method is called from the eden watcher and can trigger before\n  // mercurial has finalized writing out its history data.  Setting this\n  // environmental variable allows us to break the view isolation and read\n  // information about the commit before the transaction is complete.\n  opt.environment().set(\"HG_PENDING\", getRootPath());\n  if (requestId && !requestId->empty()) {\n    opt.environment().set(\"HGREQUESTID\", *requestId);\n  }\n\n  // Default to strict hg status.  HGDETECTRACE is used by some deployments\n  // of mercurial to cause `hg status` to error out if it detects mutation\n  // of the working copy that is happening currently with the status call.\n  // This has to be opt-in behavior as it changes the semantics of the status\n  // CLI invocation.  Watchman is ready to handle this case in a reasonably\n  // defined manner, so we are safe to enable it.\n  if (cfg_get_bool(\"fsmonitor.detectrace\", true)) {\n    opt.environment().set(\"HGDETECTRACE\", w_string(\"1\"));\n  }\n\n  // Ensure that mercurial uses this path to communicate with us,\n  // rather than whatever is hardcoded in its config.\n  opt.environment().set(\"WATCHMAN_SOCK\", get_sock_name_legacy());\n\n  opt.nullStdin();\n  opt.pipeStdout();\n  opt.pipeStderr();\n  opt.chdir(getRootPath());\n\n  return opt;\n}\n\nMercurial::Mercurial(w_string_piece rootPath, w_string_piece scmRoot)\n    : SCM(rootPath, scmRoot),\n      dirStatePath_(fmt::format(\"{}/.hg/dirstate\", getSCMRoot())),\n      commitsPrior_(Configuration(), \"scm_hg_commits_prior\", 32, 10),\n      mergeBases_(Configuration(), \"scm_hg_mergebase\", 32, 10),\n      filesChangedSinceMergeBaseWith_(\n          Configuration(),\n          \"scm_hg_files_since_mergebase\",\n          32,\n          10) {}\n\nstruct timespec Mercurial::getDirStateMtime() const {\n  try {\n    auto info = getFileInformation(\n        dirStatePath_.c_str(), CaseSensitivity::CaseSensitive);\n    return info.mtime;\n  } catch (const std::system_error&) {\n    // Failed to stat, so assume the current time\n    struct timeval now;\n    gettimeofday(&now, nullptr);\n    struct timespec ts;\n    ts.tv_sec = now.tv_sec;\n    ts.tv_nsec = now.tv_usec * 1000;\n    return ts;\n  }\n}\n\nw_string Mercurial::mergeBaseWith(\n    w_string_piece commitId,\n    const std::optional<w_string>& requestId) const {\n  auto mtime = getDirStateMtime();\n  auto key = fmt::format(\"{}:{}:{}\", commitId, mtime.tv_sec, mtime.tv_nsec);\n  auto commit = std::string{commitId.view()};\n\n  return mergeBases_\n      .get(\n          key,\n          [this, commit, requestId](const std::string&) {\n            auto revset = fmt::format(\"ancestor(.,{})\", commit);\n            MercurialResult result;\n            if (!cfg_get_bool(\"disable_hg_autopullcommits\", false)) {\n              result = runMercurial(\n                  {hgExecutablePath(), \"log\", \"-T\", \"{node}\", \"-r\", revset},\n                  makeHgOptions(requestId),\n                  \"query for the merge base\");\n\n            } else {\n              result = runMercurial(\n                  {hgExecutablePath(),\n                   \"log\",\n                   \"-T\",\n                   \"{node}\",\n                   \"-r\",\n                   revset,\n                   \"--config\",\n                   \"ui.autopullcommits=false\"},\n                  makeHgOptions(requestId),\n                  \"query for the merge base\");\n            }\n\n            if (result.output.empty()) {\n              SCMError::throwf(\n                  \"no output was returned from `hg log -T{{node}} -r {}\",\n                  revset);\n            }\n\n            if (result.output.size() != 40) {\n              SCMError::throwf(\n                  \"expected merge base to be a 40 character string, got {}\",\n                  result.output.view());\n            }\n\n            return folly::makeFuture(result.output);\n          })\n      .get()\n      ->value();\n}\n\nstd::vector<w_string> Mercurial::getFilesChangedSinceMergeBaseWith(\n    w_string_piece commitId,\n    w_string_piece clock,\n    const std::optional<w_string>& requestId) const {\n  auto key = fmt::format(\"{}:{}\", commitId, clock);\n  auto commitCopy = std::string{commitId.view()};\n\n  // This is not going to include changes to directories across commits\n  // because mercurial does not report them. Unclear if we need them in this\n  // case. We fixed missing directory events in getFilesChangedBetweenCommits,\n  // but this is a separate code path into hg status, so we need extra support\n  // to include directory support here if needed.\n  return filesChangedSinceMergeBaseWith_\n      .get(\n          key,\n          [this, commit = std::move(commitCopy), requestId](\n              const std::string&) {\n            MercurialResult result;\n            if (!cfg_get_bool(\"disable_hg_autopullcommits\", false)) {\n              result = runMercurial(\n                  {hgExecutablePath(),\n                   \"--traceback\",\n                   \"status\",\n                   \"-n\",\n                   \"--rev\",\n                   commit,\n                   // The \"\" argument at the end causes paths to be printed out\n                   // relative to the cwd (set to root path above).\n                   \"\"},\n                  makeHgOptions(requestId),\n                  \"query for files changed since merge base\");\n            } else {\n              result = runMercurial(\n                  {hgExecutablePath(),\n                   \"--traceback\",\n                   \"status\",\n                   \"-n\",\n                   \"--rev\",\n                   commit,\n                   \"--config\",\n                   \"ui.autopullcommits=false\",\n                   // The \"\" argument at the end causes paths to be printed out\n                   // relative to the cwd (set to root path above).\n                   \"\"},\n                  makeHgOptions(requestId),\n                  \"query for files changed since merge base\");\n            }\n            std::vector<w_string> lines;\n            result.output.piece().split(lines, '\\n');\n            return folly::makeFuture(lines);\n          })\n      .get()\n      ->value();\n}\n\ntime_point<system_clock> Mercurial::getCommitDate(\n    w_string_piece commitId,\n    const std::optional<w_string>& requestId) const {\n  auto result = runMercurial(\n      {hgExecutablePath(),\n       \"--traceback\",\n       \"log\",\n       \"-r\",\n       commitId.data(),\n       \"-T\",\n       \"{date}\\n\"},\n      makeHgOptions(requestId),\n      \"get commit date\");\n  return Mercurial::convertCommitDate(result.output.c_str());\n}\n\ntime_point<system_clock> Mercurial::convertCommitDate(const char* commitDate) {\n  double date;\n  if (std::sscanf(commitDate, \"%lf\", &date) != 1) {\n    throw std::runtime_error(\n        fmt::format(\n            \"failed to parse date value `{}` into a double\", commitDate));\n  }\n  // TODO: maybe do some bounds checking on the double we get from\n  // hg.\n  return system_clock::from_time_t(static_cast<time_t>(date));\n}\n\nstd::vector<w_string> Mercurial::getCommitsPriorToAndIncluding(\n    w_string_piece commitId,\n    int numCommits,\n    const std::optional<w_string>& requestId) const {\n  auto mtime = getDirStateMtime();\n  auto key = fmt::format(\n      \"{}:{}:{}:{}\", commitId, numCommits, mtime.tv_sec, mtime.tv_nsec);\n  auto commitCopy = std::string{commitId.view()};\n\n  return commitsPrior_\n      .get(\n          key,\n          [this, commit = std::move(commitCopy), numCommits, requestId](\n              const std::string&) {\n            auto revset = fmt::format(\n                \"reverse(last(_firstancestors({}), {}))\\n\", commit, numCommits);\n            auto result = runMercurial(\n                {hgExecutablePath(),\n                 \"--traceback\",\n                 \"log\",\n                 \"-r\",\n                 revset,\n                 \"-T\",\n                 \"{node}\\n\"},\n                makeHgOptions(requestId),\n                \"get prior commits\");\n\n            std::vector<w_string> lines;\n            w_string_piece(result.output).split(lines, '\\n');\n            return folly::makeFuture(lines);\n          })\n      .get()\n      ->value();\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/scm/Mercurial.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include \"watchman/watchman_system.h\"\n\n#include <string>\n#include \"watchman/ChildProcess.h\"\n#include \"watchman/LRUCache.h\"\n#include \"watchman/scm/SCM.h\"\n\nnamespace watchman {\n\nclass Mercurial : public SCM {\n public:\n  Mercurial(w_string_piece rootPath, w_string_piece scmRoot);\n  w_string mergeBaseWith(\n      w_string_piece commitId,\n      const std::optional<w_string>& requestId = std::nullopt) const override;\n  std::vector<w_string> getFilesChangedSinceMergeBaseWith(\n      w_string_piece commitId,\n      w_string_piece clock,\n      const std::optional<w_string>& requestId = std::nullopt) const override;\n  std::chrono::time_point<std::chrono::system_clock> getCommitDate(\n      w_string_piece commitId,\n      const std::optional<w_string>& requestId = std::nullopt) const override;\n  // public for testing\n  static std::chrono::time_point<std::chrono::system_clock> convertCommitDate(\n      const char* commitDate);\n  std::vector<w_string> getCommitsPriorToAndIncluding(\n      w_string_piece commitId,\n      int numCommits,\n      const std::optional<w_string>& requestId = std::nullopt) const override;\n\n private:\n  std::string dirStatePath_;\n  mutable LRUCache<std::string, std::vector<w_string>> commitsPrior_;\n  mutable LRUCache<std::string, w_string> mergeBases_;\n  mutable LRUCache<std::string, std::vector<w_string>>\n      filesChangedSinceMergeBaseWith_;\n\n  // Returns options for invoking hg\n  ChildProcess::Options makeHgOptions(\n      const std::optional<w_string>& requestId) const;\n  struct timespec getDirStateMtime() const;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/scm/SCM.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/scm/SCM.h\"\n#include <memory>\n#include \"watchman/Logging.h\"\n#include \"watchman/fs/FileInformation.h\"\n#include \"watchman/scm/Git.h\"\n#include \"watchman/scm/Mercurial.h\"\n\nnamespace watchman {\n\nstatic const w_string_piece kGit{\".git\"};\nstatic const w_string_piece kHg{\".hg\"};\n\nSCM::~SCM() {}\n\nSCM::SCM(w_string_piece rootPath, w_string_piece scmRoot)\n    : rootPath_(rootPath.asWString()), scmRoot_(scmRoot.asWString()) {}\n\nconst w_string& SCM::getRootPath() const {\n  return rootPath_;\n}\n\nconst w_string& SCM::getSCMRoot() const {\n  return scmRoot_;\n}\n\nstd::optional<w_string> findFileInDirTree(\n    w_string_piece rootPath,\n    std::initializer_list<w_string_piece> candidates) {\n  w_check(\n      rootPath.pathIsAbsolute(), \"rootPath must be absolute: \", rootPath, \"\\n\");\n\n  while (true) {\n    for (auto& candidate : candidates) {\n      auto path = w_string::pathCat({rootPath, candidate});\n\n      if (w_path_exists(path.c_str())) {\n        return std::move(path);\n      }\n    }\n\n    auto next = rootPath.dirName();\n    if (next == rootPath) {\n      // We can't go any higher, so we couldn't find the\n      // requested path(s)\n      return std::nullopt;\n    }\n\n    rootPath = next;\n  }\n}\n\nstd::unique_ptr<SCM> SCM::scmForPath(w_string_piece rootPath) {\n  auto scmRoot = findFileInDirTree(rootPath, {kHg, kGit});\n  if (!scmRoot) {\n    return nullptr;\n  }\n  auto root = scmRoot->piece();\n\n  auto base = root.baseName();\n\n  if (base == kHg) {\n    return std::make_unique<Mercurial>(rootPath, root.dirName());\n  }\n\n  if (base == kGit) {\n    return std::make_unique<Git>(rootPath, root.dirName());\n  }\n\n  return nullptr;\n}\n} // namespace watchman\n"
  },
  {
    "path": "watchman/scm/SCM.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <chrono>\n#include <optional>\n#include <vector>\n#include \"watchman/Errors.h\"\n#include \"watchman/watchman_string.h\"\n#include \"watchman/watchman_system.h\"\n\nnamespace watchman {\n\n// Walks the paths from rootPath up to the root of the filesystem.\n// At each level, checks to see if any of the candidate filenames\n// in the provided candidates list exist.  Returns the name of\n// the first one it finds.  If no candidates are found, returns\n// nullopt.\nstd::optional<w_string> findFileInDirTree(\n    w_string_piece rootPath,\n    std::initializer_list<w_string_piece> candidates);\n\nclass SCMError : public WatchmanError<SCMError> {\n public:\n  static constexpr char* prefix = nullptr;\n  using WatchmanError::WatchmanError;\n};\n\nclass SCM {\n protected:\n  // Construct an SCM instance for the specified rootPath on disk.\n  // rootPath may be a child directory of the true SCM root.\n  SCM(w_string_piece rootPath, w_string_piece scmRoot);\n\n public:\n  virtual ~SCM();\n\n  // Figure out an appropriate SCM implementation for the specified\n  // rootPath.  Returns a managed pointer to it if successful.\n  // Returns nullptr if rootPath doesn't appear to be tracked\n  // by any source control systems known to watchman.\n  // Will throw an exception if watchman encounters a problem\n  // in setting up the SCM instance.\n  static std::unique_ptr<SCM> scmForPath(w_string_piece rootPath);\n\n  // Returns the root path provided during construction\n  const w_string& getRootPath() const;\n\n  // Returns the directory which is considered to be the root of\n  // of the repository.  This may be a parent of the rootPath that\n  // was used to construct this SCM instance.\n  const w_string& getSCMRoot() const;\n\n  // Compute the merge base between the working copy revision and the\n  // specified commitId.  The commitId is typically a branch name like \"main\".\n  virtual w_string mergeBaseWith(\n      w_string_piece commitId,\n      const std::optional<w_string>& requestId = std::nullopt) const = 0;\n\n  // Compute the set of paths that have changed in the commits\n  // starting in the working copy and going back to the merge base\n  // with the specified commitId.  This list also includes the\n  // set of files that show as modified in the \"status\" output,\n  // but NOT those that are ignored.\n  virtual std::vector<w_string> getFilesChangedSinceMergeBaseWith(\n      w_string_piece commitId,\n      w_string_piece clock,\n      const std::optional<w_string>& requestId = std::nullopt) const = 0;\n\n  // Compute the source control date associated with the specified\n  // commit.\n  virtual std::chrono::time_point<std::chrono::system_clock> getCommitDate(\n      w_string_piece commitId,\n      const std::optional<w_string>& requestId = std::nullopt) const = 0;\n\n  // Compute the numCommits commits prior to and including the specified commit\n  // in source control history. Returns an ordered list with the most recent\n  // commit (the one specified) first.\n  virtual std::vector<w_string> getCommitsPriorToAndIncluding(\n      w_string_piece commitId,\n      int numCommits,\n      const std::optional<w_string>& requestId = std::nullopt) const = 0;\n\n private:\n  w_string rootPath_;\n  w_string scmRoot_;\n};\n} // namespace watchman\n"
  },
  {
    "path": "watchman/sockname.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Options.h\"\n\nusing namespace watchman;\n\nnamespace watchman {\n\nbool disable_unix_socket = false;\nbool disable_named_pipe = false;\n\nconst char* get_sock_name_legacy() {\n#ifdef _WIN32\n  return flags.named_pipe_path.c_str();\n#else\n  return flags.unix_sock_name.c_str();\n#endif\n}\n\nconst std::string& get_unix_sock_name() {\n  return flags.unix_sock_name;\n}\n\nconst std::string& get_named_pipe_sock_path() {\n  return flags.named_pipe_path;\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/sockname.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <string>\n\nnamespace watchman {\n\n/** Returns the legacy socket name.\n * It is legacy because its meaning is system dependent and\n * a little confusing, but needs to be retained for backwards\n * compatibility reasons as it is exported into the environment\n * in a number of scenarios.\n * You should prefer to use get_unix_sock_name() or\n * get_named_pipe_sock_path() instead\n */\nconst char* get_sock_name_legacy();\n\n/** Returns the configured unix domain socket path. */\nconst std::string& get_unix_sock_name();\n\n/** Returns the configured named pipe socket path */\nconst std::string& get_named_pipe_sock_path();\n\nextern bool disable_unix_socket;\nextern bool disable_named_pipe;\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/state.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/state.h\"\n#include <folly/String.h>\n#include <folly/Synchronized.h>\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/Options.h\"\n#include \"watchman/PDU.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/Shutdown.h\"\n#include \"watchman/TriggerCommand.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/root/resolve.h\"\n#include \"watchman/root/watchlist.h\"\n#include \"watchman/saved_state/SavedStateFactory.h\"\n#include \"watchman/watchman_stream.h\"\n\nusing namespace watchman;\n\n/** The state saving thread is responsible for writing out the\n * persistent information about the users watches.\n * It runs in its own thread so that we avoid the possibility\n * of self deadlock if various threads were to immediately\n * save the state when things are changing.\n *\n * This uses a simple condition variable to wait for and be\n * notified of state changes.\n */\n\nnamespace {\nstruct state {\n  bool needsSave{false};\n};\nfolly::Synchronized<state, std::mutex> saveState;\nstd::condition_variable stateCond;\nstd::thread state_saver_thread;\n} // namespace\n\nstatic bool do_state_save();\n\nstatic void state_saver() noexcept {\n  bool do_save;\n\n  w_set_thread_name(\"statesaver\");\n\n  while (!w_is_stopping()) {\n    {\n      auto state = saveState.lock();\n      if (!state->needsSave) {\n        stateCond.wait(state.as_lock());\n      }\n      do_save = state->needsSave;\n      state->needsSave = false;\n    }\n\n    if (do_save) {\n      do_state_save();\n    }\n  }\n}\n\nvoid w_state_shutdown() {\n  if (flags.dont_save_state) {\n    return;\n  }\n\n  stateCond.notify_one();\n  state_saver_thread.join();\n}\n\nbool w_state_load() {\n  if (flags.dont_save_state) {\n    return true;\n  }\n\n  state_saver_thread = std::thread(state_saver);\n\n  std::optional<json_ref> state;\n  try {\n    state = json_load_file(flags.watchman_state_file.c_str(), 0);\n  } catch (const std::system_error& exc) {\n    if (exc.code() == watchman::error_code::no_such_file_or_directory) {\n      // No need to alarm anyone if we've never written a state file\n      return false;\n    }\n    logf(\n        ERR,\n        \"failed to load json from {}: {}\\n\",\n        flags.watchman_state_file,\n        folly::exceptionStr(exc).toStdString());\n    return false;\n  } catch (const std::exception& exc) {\n    logf(\n        ERR,\n        \"failed to parse json from {}: {}\\n\",\n        flags.watchman_state_file,\n        folly::exceptionStr(exc).toStdString());\n    return false;\n  }\n\n  if (!w_root_load_state(state.value())) {\n    return false;\n  }\n\n  return true;\n}\n\nstatic bool do_state_save() {\n  PduBuffer buffer;\n\n  auto state = json_object();\n\n  auto file = w_stm_open(\n      flags.watchman_state_file.c_str(), O_WRONLY | O_TRUNC | O_CREAT, 0600);\n  if (!file) {\n    log(ERR,\n        \"save_state: unable to open \",\n        flags.watchman_state_file,\n        \" for write: \",\n        folly::errnoStr(errno),\n        \"\\n\");\n    return false;\n  }\n\n  state.set(\"version\", typed_string_to_json(PACKAGE_VERSION, W_STRING_UNICODE));\n\n  /* now ask the different subsystems to fill out the state */\n  if (!w_root_save_state(state)) {\n    return false;\n  }\n\n  /* we've prepared what we're going to save, so write it out */\n  buffer.jsonEncodeToStream(state, file.get(), JSON_INDENT(4));\n  return true;\n}\n\n/** Arranges for the state to be saved.\n * Does not immediately save the state. */\nvoid w_state_save() {\n  if (flags.dont_save_state) {\n    return;\n  }\n\n  saveState.lock()->needsSave = true;\n  stateCond.notify_one();\n}\n\nbool w_root_save_state(json_ref& state) {\n  bool result = true;\n\n  std::vector<json_ref> watched_dirs;\n\n  logf(DBG, \"saving state\\n\");\n\n  {\n    auto map = watched_roots.rlock();\n    for (const auto& it : *map) {\n      auto root = it.second;\n\n      auto obj = json_object();\n\n      json_object_set_new(obj, \"path\", w_string_to_json(root->root_path));\n\n      auto triggers = root->triggerListToJson();\n      json_object_set_new(obj, \"triggers\", std::move(triggers));\n\n      watched_dirs.push_back(std::move(obj));\n    }\n  }\n\n  json_object_set_new(state, \"watched\", json_array(std::move(watched_dirs)));\n\n  return result;\n}\n\nbool w_root_load_state(const json_ref& state) {\n  size_t i;\n\n  auto watched = state.get_optional(\"watched\");\n  if (!watched) {\n    return true;\n  }\n\n  if (!watched->isArray()) {\n    return false;\n  }\n\n  for (i = 0; i < json_array_size(*watched); i++) {\n    const auto& obj = watched->at(i);\n    bool created = false;\n    size_t j;\n\n    auto triggers = obj.get(\"triggers\");\n    auto path = json_object_get(obj, \"path\");\n    const char* filename = path ? json_string_value(*path) : nullptr;\n\n    std::shared_ptr<Root> root;\n    try {\n      root = root_resolve(filename, true, &created);\n    } catch (const std::exception&) {\n      continue;\n    }\n\n    {\n      auto wlock = root->triggers.wlock();\n      auto& map = *wlock;\n\n      /* re-create the trigger configuration */\n      for (j = 0; j < json_array_size(triggers); j++) {\n        const auto& tobj = triggers.at(j);\n\n        // Legacy rules format\n        auto rarray = tobj.get_optional(\"rules\");\n        if (rarray) {\n          continue;\n        }\n\n        try {\n          auto cmd = std::make_unique<TriggerCommand>(getInterface, root, tobj);\n          cmd->start(root);\n          auto& mapEntry = map[cmd->triggername];\n          mapEntry = std::move(cmd);\n        } catch (const std::exception& exc) {\n          watchman::log(\n              watchman::ERR,\n              \"loading trigger for \",\n              root->root_path,\n              \": \",\n              exc.what(),\n              \"\\n\");\n        }\n      }\n    }\n\n    if (created) {\n      try {\n        root->view()->startThreads(root);\n      } catch (const std::exception& e) {\n        watchman::log(\n            watchman::ERR,\n            \"root_start(\",\n            root->root_path,\n            \") failed: \",\n            e.what(),\n            \"\\n\");\n        root->cancel(\n            fmt::format(\"Error starting threads for root: {}\", e.what()));\n      }\n    }\n  }\n\n  return true;\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/state.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nvoid w_state_shutdown();\nvoid w_state_save();\nbool w_state_load();\n\nbool w_root_save_state(json_ref& state);\nbool w_root_load_state(const json_ref& state);\n"
  },
  {
    "path": "watchman/stream.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <chrono>\n#include <thread>\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/watchman_stream.h\"\n\n#ifdef _WIN32\n#include <io.h> // @manual\n#endif\n\nusing namespace watchman;\n\nint w_poll_events(EventPoll* p, int n, int timeoutms) {\n#ifdef _WIN32\n  if (!p->evt->isSocket()) {\n    return w_poll_events_named_pipe(p, n, timeoutms);\n  }\n#endif\n  return w_poll_events_sockets(p, n, timeoutms);\n}\n\n#if defined(HAVE_MKOSTEMP) && defined(sun)\n// Not guaranteed to be defined in stdlib.h\nextern int mkostemp(char*, int);\n#endif\n\nstd::unique_ptr<watchman_stream> w_mkstemp(char* templ) {\n#if defined(_WIN32)\n  char* name = _mktemp(templ);\n  if (!name) {\n    return nullptr;\n  }\n  // Most annoying aspect of windows is the latency around\n  // file handle exclusivity.  We could avoid this dumb loop\n  // by implementing our own mkostemp, but this is the most\n  // expedient option for the moment.\n  for (size_t attempts = 0; attempts < 10; ++attempts) {\n    auto stm = w_stm_open(name, O_RDWR | O_CLOEXEC | O_CREAT | O_TRUNC, 0600);\n    if (stm) {\n      return stm;\n    }\n    if (errno == EACCES) {\n      /* sleep override */ std::this_thread::sleep_for(\n          std::chrono::microseconds(2000));\n      continue;\n    }\n    return nullptr;\n  }\n  return nullptr;\n#else\n  FileDescriptor fd;\n#ifdef HAVE_MKOSTEMP\n  fd = FileDescriptor(\n      mkostemp(templ, O_CLOEXEC), FileDescriptor::FDType::Generic);\n#else\n  fd = FileDescriptor(mkstemp(templ), FileDescriptor::FDType::Generic);\n#endif\n  if (!fd) {\n    return nullptr;\n  }\n  fd.setCloExec();\n\n  return w_stm_fdopen(std::move(fd));\n#endif\n}\n"
  },
  {
    "path": "watchman/stream_stdout.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Logging.h\"\n#include \"watchman/portability/WinError.h\"\n#include \"watchman/watchman_stream.h\"\n\nusing watchman::FileDescriptor;\nusing namespace watchman;\n\nnamespace {\nclass StdioStream : public watchman_stream {\n  const FileDescriptor& fd_;\n\n public:\n  explicit StdioStream(const FileDescriptor& fd) : fd_(fd) {}\n\n  int read(void* buf, int size) override {\n    auto result = fd_.read(buf, size);\n    if (result.hasError()) {\n      errno = result.error().value();\n#ifdef _WIN32\n      // TODO: propagate Result<int, std::error_code> as return type\n      errno = map_win32_err(errno);\n#endif\n      return -1;\n    }\n    return result.value();\n  }\n\n  int write(const void* buf, int size) override {\n    auto result = fd_.write(buf, size);\n    if (result.hasError()) {\n      errno = result.error().value();\n#ifdef _WIN32\n      // TODO: propagate Result<int, std::error_code> as return type\n      errno = map_win32_err(errno);\n#endif\n      return -1;\n    }\n    return result.value();\n  }\n\n  watchman_event* getEvents() override {\n    log(FATAL, \"calling get_events on a stdio stm\\n\");\n    return nullptr;\n  }\n\n  void setNonBlock(bool) override {}\n\n  bool rewind() override {\n    return false;\n  }\n\n  bool shutdown() override {\n    return false;\n  }\n\n  bool peerIsOwner() override {\n    return false;\n  }\n\n  pid_t getPeerProcessID() const override {\n    return 0;\n  }\n\n  const watchman::FileDescriptor& getFileDescriptor() const override {\n    return fd_;\n  }\n};\n} // namespace\n\nwatchman_stream* w_stm_stdout() {\n  static StdioStream stdoutStream(FileDescriptor::stdOut());\n  return &stdoutStream;\n}\n\nwatchman_stream* w_stm_stdin() {\n  static StdioStream stdinStream(FileDescriptor::stdIn());\n  return &stdinStream;\n}\n"
  },
  {
    "path": "watchman/stream_unix.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/SocketAddress.h>\n#include <folly/net/NetworkSocket.h>\n#include <memory>\n#include \"watchman/Constants.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/fs/Pipe.h\"\n#include \"watchman/portability/WinError.h\"\n#include \"watchman/watchman_stream.h\"\n\n#ifdef HAVE_UCRED_H\n#include <ucred.h> // @manual\n#endif\n#ifdef HAVE_SYS_UCRED_H\n#include <sys/ucred.h> // @manual\n#endif\n#ifdef HAVE_SYS_SOCKET_H\n#include <folly/portability/Sockets.h> // @manual\n#endif\n\n#ifdef _WIN32\n#include \"eden/common/utils/windows/WinUtil.h\" // @manual\n#endif\n\nusing namespace watchman;\n\nstatic const int kWriteTimeout = 60000;\n\nnamespace {\n// This trait allows w_poll_events to wait on either a PipeEvent or\n// a descriptor contained in a UnixStream\nclass PollableEvent : public watchman_event {\n public:\n  virtual FileDescriptor::system_handle_type getFd() const = 0;\n};\n\n// The event object, implemented as pipe\nclass PipeEvent : public PollableEvent {\n public:\n  SocketPair pipe;\n\n  void notify() override {\n    ignore_result(pipe.write.write(\"a\", 1).hasValue());\n  }\n\n  bool testAndClear() override {\n    char buf[64];\n    bool signalled = false;\n    while (true) {\n      auto res = pipe.read.read(buf, sizeof(buf));\n      if (res.hasError() || res.value() == 0) {\n        break;\n      }\n      signalled = true;\n    }\n    return signalled;\n  }\n\n  FileDescriptor::system_handle_type getFd() const override {\n    return pipe.read.system_handle();\n  }\n\n  FileDescriptor::system_handle_type system_handle() override {\n    return pipe.read.system_handle();\n  }\n\n  bool isSocket() override {\n    return true;\n  }\n};\n\n// Event object that UnixStream returns via getEvents.\n// It cannot be poked by hand; it is just a helper to\n// allow waiting on a socket using w_poll_events.\nclass FakeSocketEvent : public PollableEvent {\n private:\n  FileDescriptor::system_handle_type socket;\n\n public:\n  explicit FakeSocketEvent(FileDescriptor::system_handle_type fd)\n      : socket(fd) {}\n\n  void notify() override {}\n  bool testAndClear() override {\n    return false;\n  }\n  FileDescriptor::system_handle_type getFd() const override {\n    return socket;\n  }\n\n  FileDescriptor::system_handle_type system_handle() override {\n    return socket;\n  }\n\n  bool isSocket() override {\n    return true;\n  }\n};\n\nclass UnixStream : public watchman_stream {\n public:\n  FileDescriptor fd;\n  FakeSocketEvent evt;\n#ifdef SO_PEERCRED\n  struct ucred cred;\n#elif defined(LOCAL_PEERCRED)\n  struct xucred cred;\n  pid_t epid;\n#elif defined(SO_RECVUCRED)\n  struct ucred_deleter {\n    void operator()(ucred_t* utp) {\n      ucred_free(utp);\n    }\n  };\n  std::unique_ptr<ucred_t, ucred_deleter> cred;\n#endif\n  bool credvalid{false};\n  bool blocking_{false};\n\n  explicit UnixStream(FileDescriptor&& descriptor)\n      : fd(std::move(descriptor)), evt(fd.system_handle()) {\n#ifdef SO_PEERCRED\n    socklen_t len = sizeof(cred);\n    credvalid = getsockopt(fd.fd(), SOL_SOCKET, SO_PEERCRED, &cred, &len) == 0;\n#elif defined(LOCAL_PEERCRED)\n    socklen_t len = sizeof(cred);\n#if defined(__FreeBSD__) || defined(__DragonFly__)\n    credvalid = getsockopt(fd.fd(), 0, LOCAL_PEERCRED, &cred, &len) == 0;\n#else\n    credvalid =\n        getsockopt(fd.fd(), SOL_LOCAL, LOCAL_PEERCRED, &cred, &len) == 0;\n#endif\n    if (credvalid) {\n#if defined(__APPLE__)\n      len = sizeof(epid);\n      credvalid =\n          getsockopt(fd.fd(), SOL_LOCAL, LOCAL_PEEREPID, &epid, &len) == 0;\n#elif defined(__FreeBSD__)\n      epid = cred.cr_pid;\n#else\n      credvalid = false;\n#endif\n    }\n#elif defined(SO_RECVUCRED)\n    ucred_t* peer_cred{nullptr};\n    credvalid = getpeerucred(fd.fd(), &peer_cred) == 0;\n    cred.reset(peer_cred);\n#endif\n  }\n\n  const FileDescriptor& getFileDescriptor() const override {\n    return fd;\n  }\n\n  int read(void* buf, int size) override {\n    auto res = fd.read(buf, size);\n    if (res.hasError()) {\n#ifdef _WIN32\n      errno = map_win32_err(res.error().value());\n#else\n      errno = res.error().value();\n#endif\n      return -1;\n    }\n    errno = 0;\n    return res.value();\n  }\n\n  int write(const void* buf, int size) override {\n    if (blocking_) {\n      int wrote = 0;\n\n      while (size > 0) {\n        struct pollfd pfd;\n        pfd.fd = fd.system_handle();\n        pfd.events = POLLOUT;\n#ifdef _WIN32\n        if (WSAPoll(&pfd, 1, kWriteTimeout) == 0) {\n          errno = map_win32_err(WSAGetLastError());\n          break;\n        }\n#else\n        if (poll(&pfd, 1, kWriteTimeout) == 0) {\n          break;\n        }\n#endif\n        if (pfd.revents & (POLLERR | POLLHUP)) {\n          break;\n        }\n        auto x = fd.write(buf, size);\n        if (x.hasError()) {\n#ifdef _WIN32\n          errno = map_win32_err(x.error().value());\n#else\n          errno = x.error().value();\n#endif\n          break;\n        }\n        if (x.value() == 0) {\n          errno = 0;\n          break;\n        }\n\n        wrote += x.value();\n        size -= x.value();\n        buf = reinterpret_cast<const void*>(\n            reinterpret_cast<const char*>(buf) + x.value());\n      }\n      return wrote == 0 ? -1 : wrote;\n    }\n    auto x = fd.write(buf, size);\n    if (x.hasError()) {\n#ifdef _WIN32\n      errno = map_win32_err(x.error().value());\n#else\n      errno = x.error().value();\n#endif\n      return -1;\n    }\n    errno = 0;\n    return x.value();\n  }\n\n  watchman_event* getEvents() override {\n    return &evt;\n  }\n\n  void setNonBlock(bool nonb) override {\n    if (nonb) {\n      fd.setNonBlock();\n    } else {\n      fd.clearNonBlock();\n    }\n    blocking_ = !nonb;\n  }\n\n  bool rewind() override {\n#ifndef _WIN32\n    return lseek(fd.fd(), 0, SEEK_SET) == 0;\n#else\n    return false;\n#endif\n  }\n\n  bool shutdown() override {\n    return ::shutdown(\n        fd.system_handle(),\n#ifdef SHUT_RDWR\n        SHUT_RDWR\n#else\n        SD_BOTH\n#endif\n    );\n  }\n\n  // For these PEERCRED things, the uid reported is the effective uid of\n  // the process, which may have been altered due to setuid or similar\n  // mechanisms.  We'll treat the other process as an owner if their\n  // effective UID matches ours, or if they are root.\n  bool peerIsOwner() override {\n#ifdef _WIN32\n    return true;\n#else\n    if (!credvalid) {\n      return false;\n    }\n#ifdef SO_PEERCRED\n    if (cred.uid == getuid() || cred.uid == 0) {\n      return true;\n    }\n#elif defined(LOCAL_PEERCRED)\n    if (cred.cr_uid == getuid() || cred.cr_uid == 0) {\n      return true;\n    }\n#elif defined(SO_RECVUCRED)\n    uid_t ucreduid = ucred_getruid(cred.get());\n    if (ucreduid == getuid() || ucreduid == 0) {\n      return true;\n    }\n#endif\n    return false;\n#endif\n  }\n\n  pid_t getPeerProcessID() const override {\n#ifdef _WIN32\n    return facebook::eden::getPeerProcessID(fd.system_handle());\n#endif\n    if (!credvalid) {\n      return 0;\n    }\n#ifdef SO_PEERCRED\n    return cred.pid;\n#elif defined(LOCAL_PEERCRED)\n    return epid;\n#elif defined(SO_RECVUCRED)\n    pid_t ucredpid = ucred_getpid(cred.get());\n    if (ucredpid == (pid_t)-1) {\n      return 0;\n    }\n    return ucredpid;\n#else\n    return 0;\n#endif\n  }\n};\n} // namespace\n\nstd::unique_ptr<watchman_event> w_event_make_sockets() {\n  return std::make_unique<PipeEvent>();\n}\n\n#define MAX_POLL_EVENTS 63 // Must match MAXIMUM_WAIT_OBJECTS-1 on win\nint w_poll_events_sockets(EventPoll* p, int n, int timeoutms) {\n  struct pollfd pfds[MAX_POLL_EVENTS];\n  int i;\n  int res;\n\n  if (n > MAX_POLL_EVENTS) {\n    // Programmer error :-/\n    logf(FATAL, \"{} > MAX_POLL_EVENTS ({})\\n\", n, MAX_POLL_EVENTS);\n  }\n\n  for (i = 0; i < n; i++) {\n    auto pe = dynamic_cast<PollableEvent*>(p[i].evt);\n    w_check(pe != nullptr, \"PollableEvent!?\");\n    pfds[i].fd = pe->getFd();\n    pfds[i].events = POLLIN;\n    pfds[i].revents = 0;\n  }\n\n#ifdef _WIN32\n  res = WSAPoll(pfds, n, timeoutms);\n  auto win_err = WSAGetLastError();\n  errno = map_win32_err(win_err);\n#else\n  res = poll(pfds, n, timeoutms);\n#endif\n\n  for (i = 0; i < n; i++) {\n    p[i].ready = pfds[i].revents != 0;\n  }\n\n  return res;\n}\n\nstd::unique_ptr<watchman_stream> w_stm_fdopen(FileDescriptor&& fd) {\n  if (!fd) {\n    return nullptr;\n  }\n#ifdef _WIN32\n  if (fd.fdType() != FileDescriptor::FDType::Socket) {\n    return w_stm_fdopen_windows(std::move(fd));\n  }\n#endif\n  return std::make_unique<UnixStream>(std::move(fd));\n}\n\nResultErrno<std::unique_ptr<watchman_stream>> w_stm_connect_unix(\n    const char* path,\n    int timeoutms) {\n  struct sockaddr_un un{};\n  int max_attempts = timeoutms / 10;\n  int attempts = 0;\n\n  if (strlen(path) >= sizeof(un.sun_path) - 1) {\n    logf(ERR, \"w_stm_connect_unix({}) path is too long\\n\", path);\n    return E2BIG;\n  }\n\n  FileDescriptor fd(\n      ::socket(\n          PF_LOCAL,\n#ifdef SOCK_CLOEXEC\n          SOCK_CLOEXEC |\n#endif\n              SOCK_STREAM,\n          0),\n      FileDescriptor::FDType::Socket);\n  if (!fd) {\n    return errno;\n  }\n  fd.setCloExec();\n\n  un.sun_family = PF_LOCAL;\n  memcpy(un.sun_path, path, strlen(path) + 1);\n\nretry_connect:\n\n  if (::connect(fd.system_handle(), (struct sockaddr*)&un, sizeof(un))) {\n#ifdef _WIN32\n    int win_err = WSAGetLastError();\n    int err = map_win32_err(win_err);\n#else\n    int err = errno;\n#endif\n\n    if (err == ECONNREFUSED || err == ENOENT) {\n      if (attempts++ < max_attempts) {\n        /* sleep override */ std::this_thread::sleep_for(\n            std::chrono::microseconds(10000));\n        goto retry_connect;\n      }\n    }\n\n    return err;\n  }\n\n  int bufsize = WATCHMAN_IO_BUF_SIZE;\n  ::setsockopt(\n      fd.system_handle(),\n      SOL_SOCKET,\n      SO_RCVBUF,\n      reinterpret_cast<const char*>(&bufsize),\n      sizeof(bufsize));\n\n  return ResultErrno<std::unique_ptr<Stream>>{w_stm_fdopen(std::move(fd))};\n}\n\n#ifndef _WIN32\nstd::unique_ptr<watchman_stream>\nw_stm_open(const char* filename, int flags, ...) {\n  int mode = 0;\n\n  // If we're creating, pull out the mode flag\n  if (flags & O_CREAT) {\n    va_list ap;\n    va_start(ap, flags);\n    mode = va_arg(ap, int);\n    va_end(ap);\n  }\n\n  return w_stm_fdopen(FileDescriptor(\n      open(filename, flags, mode), FileDescriptor::FDType::Unknown));\n}\n#endif\n"
  },
  {
    "path": "watchman/stream_win.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <algorithm>\n#include <memory>\n#include \"watchman/Logging.h\"\n#include \"watchman/portability/WinError.h\"\n#include \"watchman/watchman_stream.h\"\n\nusing namespace watchman;\n\n#ifdef _WIN32\n\n#include \"eden/common/utils/windows/WinUtil.h\"\n\n// Things are more complicated here than on unix.\n// We maintain an overlapped context for reads and\n// another for writes.  Actual write data is queued\n// and dispatched to the underlying handle as prior\n// writes complete.\n\nclass win_handle;\n\nnamespace {\nclass WindowsEvent : public watchman_event {\n public:\n  HANDLE hEvent;\n\n  explicit WindowsEvent(bool initialState = false)\n      : hEvent(CreateEvent(nullptr, TRUE, initialState, nullptr)) {}\n\n  ~WindowsEvent() {\n    CloseHandle(hEvent);\n  }\n\n  void notify() override {\n    SetEvent(hEvent);\n  }\n\n  bool testAndClear() override {\n    bool was_set = WaitForSingleObject(hEvent, 0) == WAIT_OBJECT_0;\n    ResetEvent(hEvent);\n    return was_set;\n  }\n\n  void reset() {\n    ResetEvent(hEvent);\n  }\n\n  FileDescriptor::system_handle_type system_handle() override {\n    return (FileDescriptor::system_handle_type)hEvent;\n  }\n\n  bool isSocket() override {\n    return false;\n  }\n};\n} // namespace\n\nstruct overlapped_op {\n  OVERLAPPED olap;\n  class win_handle* h;\n  struct write_buf* wbuf;\n};\n\nstruct write_buf {\n  struct write_buf* next;\n  int len;\n  char* cursor;\n  char data[1];\n};\n\nclass win_handle : public watchman_stream {\n public:\n  struct overlapped_op *read_pending{nullptr}, *write_pending{nullptr};\n  FileDescriptor h;\n  WindowsEvent waitable;\n  CRITICAL_SECTION mtx;\n  bool error_pending{false};\n  DWORD errcode{0};\n  DWORD file_type;\n  struct write_buf *write_head{nullptr}, *write_tail{nullptr};\n  char read_buf[8192];\n  char* read_cursor{read_buf};\n  int read_avail{0};\n  bool blocking{true};\n\n  explicit win_handle(FileDescriptor&& handle);\n  ~win_handle();\n  int read(void* buf, int size) override;\n  int write(const void* buf, int size) override;\n  watchman_event* getEvents() override;\n  void setNonBlock(bool nonb) override;\n  bool rewind() override;\n  bool shutdown() override;\n  bool peerIsOwner() override;\n  const FileDescriptor& getFileDescriptor() const override {\n    return h;\n  }\n\n  // Helper to avoid sprinkling casts all over this file\n  inline HANDLE handle() const {\n    return (HANDLE)h.handle();\n  }\n\n  pid_t getPeerProcessID() const override {\n    return facebook::eden::getPeerProcessID(h.system_handle());\n  }\n};\n\n#if 1\n#define stream_debug(x, ...) 0\n#else\n#define stream_debug(x, ...)                                      \\\n  do {                                                            \\\n    time_t now;                                                   \\\n    char timebuf[64];                                             \\\n    struct tm tm;                                                 \\\n    time(&now);                                                   \\\n    localtime_s(&tm, &now);                                       \\\n    strftime(timebuf, sizeof(timebuf), \"%Y-%m-%dT%H:%M:%S\", &tm); \\\n    fprintf(stderr, \"%s    : \", timebuf);                         \\\n    fprintf(stderr, x, __VA_ARGS__);                              \\\n    fflush(stderr);                                               \\\n  } while (0)\n#endif\n\ntypedef BOOL(WINAPI* get_overlapped_result_ex_func)(\n    HANDLE file,\n    LPOVERLAPPED olap,\n    LPDWORD bytes,\n    DWORD millis,\n    BOOL alertable);\nstatic BOOL WINAPI probe_get_overlapped_result_ex(\n    HANDLE file,\n    LPOVERLAPPED olap,\n    LPDWORD bytes,\n    DWORD millis,\n    BOOL alertable);\nstatic get_overlapped_result_ex_func get_overlapped_result_ex =\n    probe_get_overlapped_result_ex;\n\nstatic BOOL WINAPI get_overlapped_result_ex_impl(\n    HANDLE file,\n    LPOVERLAPPED olap,\n    LPDWORD bytes,\n    DWORD millis,\n    BOOL alertable) {\n  DWORD waitReturnCode, err;\n\n  stream_debug(\"Preparing to wait for maximum %ums\\n\", millis);\n  if (millis != 0) {\n    waitReturnCode = WaitForSingleObjectEx(olap->hEvent, millis, alertable);\n    switch (waitReturnCode) {\n      case WAIT_OBJECT_0:\n        // Event is signaled, overlapped IO operation result should be\n        // available.\n        break;\n      case WAIT_IO_COMPLETION:\n        // WaitForSingleObjectEx returnes because the system added an I/O\n        // completion routine or an asynchronous procedure call (APC) to the\n        // thread queue.\n        SetLastError(WAIT_IO_COMPLETION);\n        break;\n      case WAIT_TIMEOUT:\n        // We reached the maximum allowed wait time, the IO operation failed\n        // to complete in timely fashion.\n        SetLastError(WAIT_TIMEOUT);\n        return FALSE;\n\n      case WAIT_FAILED:\n        // something went wrong calling WaitForSingleObjectEx\n        err = GetLastError();\n        stream_debug(\"WaitForSingleObjectEx failed: %s\\n\", win32_strerror(err));\n        return FALSE;\n\n      default:\n        // unexpected situation deserving investigation.\n        err = GetLastError();\n        stream_debug(\"Unexpected error: %s\\n\", win32_strerror(err));\n        return FALSE;\n    }\n  }\n\n  return GetOverlappedResult(file, olap, bytes, FALSE);\n}\n\nstatic BOOL WINAPI probe_get_overlapped_result_ex(\n    HANDLE file,\n    LPOVERLAPPED olap,\n    LPDWORD bytes,\n    DWORD millis,\n    BOOL alertable) {\n  get_overlapped_result_ex_func func;\n\n  func = (get_overlapped_result_ex_func)GetProcAddress(\n      GetModuleHandle(\"kernel32.dll\"), \"GetOverlappedResultEx\");\n\n  if ((getenv(\"WATCHMAN_WIN7_COMPAT\") &&\n       getenv(\"WATCHMAN_WIN7_COMPAT\")[0] == '1') ||\n      !func) {\n    func = get_overlapped_result_ex_impl;\n  }\n\n  get_overlapped_result_ex = func;\n\n  return func(file, olap, bytes, millis, alertable);\n}\n\nwin_handle::~win_handle() {\n  EnterCriticalSection(&mtx);\n\n  if (read_pending) {\n    if (CancelIoEx(handle(), &read_pending->olap)) {\n      free(read_pending);\n      read_pending = nullptr;\n    }\n  }\n  if (write_pending) {\n    if (CancelIoEx(handle(), &write_pending->olap)) {\n      free(write_pending);\n      write_pending = nullptr;\n    }\n\n    while (write_head) {\n      struct write_buf* b = write_head;\n      write_head = b->next;\n\n      free(b);\n    }\n  }\n\n  DeleteCriticalSection(&mtx);\n}\n\nstatic void move_from_read_buffer(\n    class win_handle* h,\n    int* total_read_ptr,\n    char** target_buf_ptr,\n    int* size_ptr) {\n  int nread = std::min(*size_ptr, h->read_avail);\n  size_t wasted;\n\n  if (!nread) {\n    return;\n  }\n\n  memcpy(*target_buf_ptr, h->read_cursor, nread);\n  *total_read_ptr += nread;\n  *target_buf_ptr += nread;\n  *size_ptr -= nread;\n  h->read_cursor += nread;\n  h->read_avail -= nread;\n\n  stream_debug(\"moved %d bytes from buffer\\n\", nread);\n\n  // Pack the buffer to free up space at the rear for reads\n  wasted = h->read_cursor - h->read_buf;\n  if (wasted) {\n    memmove(h->read_buf, h->read_cursor, h->read_avail);\n    h->read_cursor = h->read_buf;\n  }\n}\n\nstatic bool win_read_handle_completion(class win_handle* h) {\n  BOOL olap_res;\n  DWORD bytes, err;\n\nagain:\n\n  EnterCriticalSection(&h->mtx);\n  if (!h->read_pending) {\n    LeaveCriticalSection(&h->mtx);\n    return false;\n  }\n\n  stream_debug(\"have read_pending, checking status\\n\");\n  h->waitable.reset();\n\n  // Don't hold the mutex while we're blocked\n  LeaveCriticalSection(&h->mtx);\n  olap_res = get_overlapped_result_ex(\n      h->handle(),\n      &h->read_pending->olap,\n      &bytes,\n      h->blocking ? INFINITE : 0,\n      true);\n  err = GetLastError();\n  EnterCriticalSection(&h->mtx);\n\n  if (olap_res) {\n    stream_debug(\n        \"pending read completed, read %d bytes, %s\\n\",\n        (int)bytes,\n        win32_strerror(err));\n    h->read_avail += bytes;\n    free(h->read_pending);\n    h->read_pending = nullptr;\n  } else {\n    if (err == WAIT_IO_COMPLETION) {\n      // Some other async thing completed and our wait was interrupted.\n      // This is similar to EINTR\n      LeaveCriticalSection(&h->mtx);\n      goto again;\n    }\n    stream_debug(\"pending read failed: %s\\n\", win32_strerror(err));\n    if (err != ERROR_IO_INCOMPLETE) {\n      // Failed\n      free(h->read_pending);\n      h->read_pending = nullptr;\n\n      h->errcode = err;\n      h->error_pending = true;\n      stream_debug(\"marking read as failed\\n\");\n      h->waitable.notify();\n    }\n  }\n  LeaveCriticalSection(&h->mtx);\n\n  return h->read_pending != nullptr;\n}\n\nstatic int win_read_blocking(class win_handle* h, void* buf, int size) {\n  int total_read = 0;\n  DWORD bytes, err;\n\n  move_from_read_buffer(h, &total_read, (char**)&buf, &size);\n\n  if (size == 0) {\n    return total_read;\n  }\n\n  stream_debug(\"blocking read of %d bytes\\n\", (int)size);\n  if (ReadFile(h->handle(), buf, size, &bytes, nullptr)) {\n    total_read += bytes;\n    stream_debug(\n        \"blocking read provided %d bytes, total=%d\\n\", (int)bytes, total_read);\n    return total_read;\n  }\n\n  err = GetLastError();\n\n  stream_debug(\"blocking read failed: %s\\n\", win32_strerror(err));\n\n  if (total_read) {\n    stream_debug(\"but already got %d bytes from buffer\\n\", total_read);\n    return total_read;\n  }\n\n  errno = map_win32_err(err);\n  return -1;\n}\n\nstatic int win_read_non_blocking(class win_handle* h, void* buf, int size) {\n  int total_read = 0;\n  char* target;\n  DWORD target_space;\n  DWORD bytes;\n\n  stream_debug(\"non_blocking read for %d bytes\\n\", size);\n\n  move_from_read_buffer(h, &total_read, (char**)&buf, &size);\n\n  target = h->read_cursor + h->read_avail;\n  target_space = (DWORD)((h->read_buf + sizeof(h->read_buf)) - target);\n\n  stream_debug(\"initiate read for %d\\n\", target_space);\n\n  // Create a unique olap for each request\n  h->read_pending = (overlapped_op*)calloc(1, sizeof(*h->read_pending));\n  if (h->read_avail == 0) {\n    stream_debug(\"ResetEvent because there is no read_avail right now\\n\");\n    h->waitable.reset();\n  }\n  h->read_pending->olap.hEvent = h->waitable.hEvent;\n  h->read_pending->h = h;\n\n  if (!ReadFile(\n          h->handle(), target, target_space, nullptr, &h->read_pending->olap)) {\n    DWORD err = GetLastError();\n\n    if (err != ERROR_IO_PENDING) {\n      free(h->read_pending);\n      h->read_pending = nullptr;\n\n      stream_debug(\"olap read failed immediately: %s\\n\", win32_strerror(err));\n      h->waitable.notify();\n    } else {\n      stream_debug(\"olap read queued ok\\n\");\n    }\n\n    errno = map_win32_err(err);\n    return total_read == 0 ? -1 : total_read;\n  }\n\n  // Note: we obtain the bytes via GetOverlappedResult because the docs for\n  // ReadFile warn against passing the pointer to the ReadFile parameter for\n  // asynchronouse reads\n  GetOverlappedResult(h->handle(), &h->read_pending->olap, &bytes, FALSE);\n  stream_debug(\"olap read succeeded immediately bytes=%d\\n\", (int)bytes);\n\n  h->read_avail += bytes;\n  free(h->read_pending);\n  h->read_pending = nullptr;\n\n  move_from_read_buffer(h, &total_read, (char**)&buf, &size);\n\n  stream_debug(\"read returning %d\\n\", total_read);\n  h->waitable.notify();\n  return total_read;\n}\n\nint win_handle::read(void* buf, int size) {\n  if (win_read_handle_completion(this)) {\n    errno = EAGAIN;\n    return -1;\n  }\n\n  // Report a prior failure\n  if (error_pending) {\n    stream_debug(\n        \"win_read: reporting prior failure err=%d errno=%d %s\\n\",\n        errcode,\n        map_win32_err(errcode),\n        win32_strerror(errcode));\n    errno = map_win32_err(errcode);\n    error_pending = false;\n    return -1;\n  }\n\n  if (blocking) {\n    return win_read_blocking(this, buf, size);\n  }\n\n  return win_read_non_blocking(this, buf, size);\n}\n\nstatic void initiate_write(class win_handle* h);\n\nstatic void CALLBACK\nwrite_completed(DWORD err, DWORD bytes, LPOVERLAPPED olap) {\n  // Reverse engineer our handle from the olap pointer\n  struct overlapped_op* op = (overlapped_op*)olap;\n  class win_handle* h = op->h;\n  struct write_buf* wbuf = op->wbuf;\n\n  stream_debug(\n      \"WriteFileEx: completion callback invoked: bytes=%d %s\\n\",\n      (int)bytes,\n      win32_strerror(err));\n\n  EnterCriticalSection(&h->mtx);\n  if (h->write_pending == op) {\n    h->write_pending = nullptr;\n  }\n\n  if (err == 0) {\n    wbuf->cursor += bytes;\n    wbuf->len -= bytes;\n\n    if (wbuf->len == 0) {\n      // Consumed this buffer\n      free(wbuf);\n    } else {\n      stream_debug(\n          \"WriteFileEx: short write: %d written, %d remain\\n\",\n          bytes,\n          wbuf->len);\n      // the initiate_write call will send the remainder\n      // but we need to re-insert this wbuf in the write queue\n      wbuf->next = h->write_head;\n      h->write_head = wbuf;\n      if (!h->write_tail) {\n        h->write_tail = wbuf;\n      }\n    }\n  } else {\n    stream_debug(\"WriteFilex: completion: failed: %s\\n\", win32_strerror(err));\n    h->errcode = err;\n    h->error_pending = true;\n  }\n\n  stream_debug(\"SetEvent because WriteFileEx completed\\n\");\n  h->waitable.notify();\n\n  // Send whatever else we have waiting to go\n  initiate_write(h);\n\n  LeaveCriticalSection(&h->mtx);\n\n  // Free the prior struct after possibly initiating another write\n  // to minimize the chance of the same address being reused and\n  // confusing the completion status\n  free(op);\n}\n\n// Must be called with the mutex held\nstatic void initiate_write(class win_handle* h) {\n  struct write_buf* wbuf = h->write_head;\n  if (h->write_pending || !wbuf) {\n    return;\n  }\n\n  h->write_head = wbuf->next;\n  if (!h->write_head) {\n    h->write_tail = nullptr;\n  }\n\n  h->write_pending = (overlapped_op*)calloc(1, sizeof(*h->write_pending));\n  h->write_pending->h = h;\n  h->write_pending->wbuf = wbuf;\n\n  stream_debug(\n      \"Calling WriteFileEx with wbuf=%p wbuf->cursor=%p len=%d olap=%p\\n\",\n      wbuf,\n      wbuf->cursor,\n      wbuf->len,\n      &h->write_pending->olap);\n  if (!WriteFileEx(\n          h->handle(),\n          wbuf->cursor,\n          wbuf->len,\n          &h->write_pending->olap,\n          write_completed)) {\n    stream_debug(\"WriteFileEx: failed %s\\n\", win32_strerror(GetLastError()));\n    free(h->write_pending);\n    h->write_pending = nullptr;\n  } else {\n    stream_debug(\"WriteFileEx: queued %d bytes for later\\n\", wbuf->len);\n  }\n}\n\nint win_handle::write(const void* buf, int size) {\n  struct write_buf* wbuf;\n\n  EnterCriticalSection(&mtx);\n  if (file_type != FILE_TYPE_PIPE && blocking && !write_head) {\n    DWORD bytes;\n    stream_debug(\"blocking write of %d\\n\", size);\n    if (WriteFile(handle(), buf, size, &bytes, nullptr)) {\n      LeaveCriticalSection(&mtx);\n      stream_debug(\"blocking write wrote %d bytes of %d\\n\", bytes, size);\n      return bytes;\n    }\n    errcode = GetLastError();\n    error_pending = true;\n    errno = map_win32_err(errcode);\n    stream_debug(\"SetEvent because blocking write completed (failed)\\n\");\n    waitable.notify();\n    stream_debug(\"write failed: %s\\n\", win32_strerror(errcode));\n    LeaveCriticalSection(&mtx);\n    return -1;\n  }\n\n  wbuf = (write_buf*)malloc(sizeof(*wbuf) + size - 1);\n  if (!wbuf) {\n    return -1;\n  }\n  wbuf->next = nullptr;\n  wbuf->cursor = wbuf->data;\n  wbuf->len = size;\n  memcpy(wbuf->data, buf, size);\n\n  if (write_tail) {\n    write_tail->next = wbuf;\n  } else {\n    write_head = wbuf;\n  }\n  write_tail = wbuf;\n\n  stream_debug(\"queue write of %d bytes to write_tail\\n\", size);\n\n  if (!write_pending) {\n    initiate_write(this);\n  }\n\n  LeaveCriticalSection(&mtx);\n\n  return size;\n}\n\nwatchman_event* win_handle::getEvents() {\n  return &waitable;\n}\n\nvoid win_handle::setNonBlock(bool nonb) {\n  blocking = !nonb;\n}\n\nbool win_handle::rewind() {\n  bool res;\n  LARGE_INTEGER new_pos;\n\n  new_pos.QuadPart = 0;\n  res = SetFilePointerEx(handle(), new_pos, &new_pos, FILE_BEGIN);\n  errno = map_win32_err(GetLastError());\n  return res;\n}\n\n// Ensure that any data buffered for write are sent prior to setting\n// ourselves up to close\nbool win_handle::shutdown() {\n  BOOL olap_res;\n  DWORD bytes;\n\n  blocking = true;\n  while (write_pending) {\n    olap_res = get_overlapped_result_ex(\n        handle(), &write_pending->olap, &bytes, INFINITE, true);\n  }\n\n  return true;\n}\n\nbool win_handle::peerIsOwner() {\n  // TODO: implement this for Windows\n  return true;\n}\n\nstd::unique_ptr<watchman_event> w_event_make_named_pipe() {\n  return std::make_unique<WindowsEvent>();\n}\n\nwin_handle::win_handle(FileDescriptor&& handle)\n    : h(std::move(handle)),\n      // Initially signalled, meaning that they can try reading\n      waitable(true),\n      file_type(GetFileType((HANDLE)h.handle())) {\n  InitializeCriticalSection(&mtx);\n}\n\nstd::unique_ptr<watchman_stream> w_stm_fdopen_windows(FileDescriptor&& handle) {\n  if (!handle) {\n    return nullptr;\n  }\n\n  return std::make_unique<win_handle>(std::move(handle));\n}\n\nstd::unique_ptr<watchman_stream> w_stm_connect_named_pipe(\n    const char* path,\n    int timeoutms) {\n  DWORD err;\n  DWORD64 deadline = GetTickCount64() + timeoutms;\n\n  if (strlen(path) > 255) {\n    logf(ERR, \"w_stm_connect_named_pipe({}) path is too long\\n\", path);\n    errno = E2BIG;\n    return nullptr;\n  }\n\n  while (true) {\n    FileDescriptor handle(\n        intptr_t(CreateFile(\n            path,\n            GENERIC_READ | GENERIC_WRITE,\n            0,\n            nullptr,\n            OPEN_EXISTING,\n            FILE_FLAG_OVERLAPPED,\n            nullptr)),\n        FileDescriptor::FDType::Pipe);\n\n    if (handle) {\n      return w_stm_fdopen(std::move(handle));\n    }\n\n    err = GetLastError();\n    if (timeoutms > 0) {\n      timeoutms -= (DWORD)(GetTickCount64() - deadline);\n    }\n    if (timeoutms <= 0 ||\n        (err != ERROR_PIPE_BUSY && err != ERROR_FILE_NOT_FOUND)) {\n      // either we're out of time, or retrying won't help with this error\n      errno = map_win32_err(err);\n      return nullptr;\n    }\n\n    // We can retry\n    if (!WaitNamedPipe(path, timeoutms)) {\n      err = GetLastError();\n      if (err == ERROR_SEM_TIMEOUT) {\n        errno = map_win32_err(err);\n        return nullptr;\n      }\n      if (err == ERROR_FILE_NOT_FOUND) {\n        // Grace to allow it to be created\n        SleepEx(10, true);\n      }\n    }\n  }\n}\n\nint w_poll_events_named_pipe(EventPoll* p, int n, int timeoutms) {\n  HANDLE handles[MAXIMUM_WAIT_OBJECTS];\n  int i;\n  DWORD res;\n\n  if (n > MAXIMUM_WAIT_OBJECTS - 1) {\n    // Programmer error :-/\n    logf(\n        FATAL,\n        \"{} > MAXIMUM_WAIT_OBJECTS-1 ({})\\n\",\n        n,\n        MAXIMUM_WAIT_OBJECTS - 1);\n  }\n\n  for (i = 0; i < n; i++) {\n    auto evt = dynamic_cast<WindowsEvent*>(p[i].evt);\n    w_check(evt != nullptr, \"!WindowsEvent\");\n    handles[i] = evt->hEvent;\n    p[i].ready = false;\n  }\n\n  res = WaitForMultipleObjectsEx(\n      n, handles, false, timeoutms == -1 ? INFINITE : timeoutms, true);\n\n  if (res == WAIT_FAILED) {\n    errno = map_win32_err(GetLastError());\n    return -1;\n  }\n  if (res == WAIT_IO_COMPLETION) {\n    errno = EINTR;\n    return -1;\n  }\n  // Note: WAIT_OBJECT_0 == 0\n  if (/* res >= WAIT_OBJECT_0 && */ res < WAIT_OBJECT_0 + n) {\n    p[res - WAIT_OBJECT_0].ready = true;\n    return 1;\n  }\n  if (res >= WAIT_ABANDONED_0 && res < WAIT_ABANDONED_0 + n) {\n    p[res - WAIT_ABANDONED_0].ready = true;\n    return 1;\n  }\n  return 0;\n}\n\n// similar to open(2), but returns a handle\nFileDescriptor w_handle_open(const char* path, int flags) {\n  DWORD access = 0, share = 0, create = 0, attrs = 0;\n  DWORD err;\n  auto sec = SECURITY_ATTRIBUTES();\n\n  if (!strcmp(path, \"/dev/null\")) {\n    path = \"NUL:\";\n  }\n\n  auto wpath = w_string_piece(path).asWideUNC();\n\n  if (flags & (O_WRONLY | O_RDWR)) {\n    access |= GENERIC_WRITE;\n  }\n  if ((flags & O_WRONLY) == 0) {\n    access |= GENERIC_READ;\n  }\n\n  // We want more posix-y behavior by default\n  share = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE;\n\n  sec.nLength = sizeof(sec);\n  sec.bInheritHandle = TRUE;\n  if (flags & O_CLOEXEC) {\n    sec.bInheritHandle = FALSE;\n  }\n\n  if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) {\n    create = CREATE_NEW;\n  } else if ((flags & (O_CREAT | O_TRUNC)) == (O_CREAT | O_TRUNC)) {\n    create = CREATE_ALWAYS;\n  } else if (flags & O_CREAT) {\n    create = OPEN_ALWAYS;\n  } else if (flags & O_TRUNC) {\n    create = TRUNCATE_EXISTING;\n  } else {\n    create = OPEN_EXISTING;\n  }\n\n  attrs = FILE_ATTRIBUTE_NORMAL;\n  if (flags & O_DIRECTORY) {\n    attrs |= FILE_FLAG_BACKUP_SEMANTICS;\n  }\n\n  FileDescriptor h(\n      intptr_t(CreateFileW(\n          wpath.c_str(), access, share, &sec, create, attrs, nullptr)),\n      FileDescriptor::FDType::Unknown);\n  err = GetLastError();\n\n  errno = map_win32_err(err);\n  return h;\n}\n\nstd::unique_ptr<watchman_stream> w_stm_open(const char* path, int flags, ...) {\n  return w_stm_fdopen(w_handle_open(path, flags));\n}\n\n#endif\n"
  },
  {
    "path": "watchman/string.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <stdarg.h>\n#include <new>\n#include <ostream>\n#include <stdexcept>\n#include \"watchman/thirdparty/jansson/utf.h\"\n#include \"watchman/watchman_string.h\"\n\n// Filename mapping and handling strategy\n// We'll track the utf-8 rendition of the underlying filesystem names\n// in the watchman datastructures.  We'll convert to Wide Char at the\n// boundary with the Windows API.  All paths that we observe from the\n// Windows API will be converted to UTF-8.\n// TODO: we should use wmain to guarantee that we only ever see UTF-8\n// for our program arguments and environment\n\n#define LEN_ESCAPE L\"\\\\\\\\?\\\\\"\n#define LEN_ESCAPE_LEN 4\n#define UNC_PREFIX L\"UNC\"\n#define UNC_PREFIX_LEN 3\n// We see this escape come back from reparse points when reading\n// junctions/symlinks\n#define SYMLINK_ESCAPE L\"\\\\??\\\\\"\n#define SYMLINK_ESCAPE_LEN 4\n\nnamespace watchman {\nstruct StringHeader;\n}\n\nusing namespace watchman;\n\nstatic void w_string_delref(StringHeader* str);\nstatic StringHeader*\nw_string_new_len_typed(const char* str, uint32_t len, w_string_type_t type);\n\n// string piece\n\nw_string_piece::w_string_piece(w_string_piece&& other) noexcept\n    : str_(other.str_), len_(other.len_) {\n  other.str_ = nullptr;\n  other.len_ = 0;\n}\n\nw_string w_string_piece::asWString(w_string_type_t stringType) const {\n  return w_string(data(), size(), stringType);\n}\n\nw_string w_string_piece::asLowerCase(w_string_type_t stringType) const {\n  // TODO: a fast islower check would avoid the unconditional\n  // allocation.\n\n  uint32_t len = size();\n  return w_string::generate(len, stringType, [&](char* buf) {\n    for (uint32_t i = 0; i < len; ++i) {\n      // TODO: `tolower` depends on locale.\n      buf[i] = static_cast<char>(tolower(static_cast<unsigned char>(str_[i])));\n    }\n  });\n}\n\nstd::optional<w_string> w_string_piece::asLowerCaseSuffix(\n    w_string_type_t stringType) const {\n  w_string_piece suffixPiece = this->suffix();\n  if (suffixPiece.empty()) {\n    return std::nullopt;\n  }\n\n  return suffixPiece.asLowerCase(stringType);\n}\n\nw_string w_string_piece::asUTF8Clean() const {\n  w_string s(str_, len_, W_STRING_UNICODE);\n  utf8_fix_string(const_cast<char*>(s.data()), s.size());\n  return s;\n}\n\nbool w_string_piece::pathIsAbsolute() const {\n  return w_string_path_is_absolute(*this);\n}\n\n/** Compares two path strings.\n * They are equal if the case of each character matches.\n * Directory separator slashes are normalized such that\n * \\ and / are considered equal. */\nbool w_string_piece::pathIsEqual(w_string_piece other) const {\n#ifdef _WIN32\n  if (size() != other.size()) {\n    return false;\n  }\n\n  auto A = data();\n  auto B = other.data();\n\n  auto end = A + size();\n  for (; A < end; ++A, ++B) {\n    if (*A == *B) {\n      continue;\n    }\n    if (A == data()) {\n      // This is a bit awful, but msys and other similar software\n      // can set the cwd to a lowercase drive letter.  Since we\n      // can't ever watch at a level higher than drive letters,\n      // we really shouldn't care about a case difference there\n      // so we relax the strictness of the check here.\n      // This case only triggers for the first character of the\n      // path.  Paths evaluated with this method are always\n      // absolute.  In theory, we should also do something\n      // reasonable for UNC paths, but folks shouldn't be\n      // watching those with watchman anyway.\n      if (tolower(*A) == tolower(*B)) {\n        continue;\n      }\n    }\n\n    if (is_slash(*A) && is_slash(*B)) {\n      continue;\n    }\n    return false;\n  }\n  return true;\n#else\n  return *this == other;\n#endif\n}\n\nw_string_piece w_string_piece::dirName() const {\n  if (len_ == 0) {\n    return {};\n  }\n  const char* const e = str_ + len_;\n  for (auto end = e - 1; end >= str_; --end) {\n    if (is_slash(*end)) {\n      /* found the end of the parent dir */\n#ifdef _WIN32\n      if (end > str_ && end[-1] == ':') {\n        // Special case for \"C:\\\"; we want to keep the\n        // trailing slash for this case so that we continue\n        // to consider it an absolute path\n        return w_string_piece(str_, 1 + end - str_);\n      }\n#endif\n      return w_string_piece(str_, end - str_);\n    }\n  }\n  return {};\n}\n\nw_string_piece w_string_piece::baseName() const {\n  if (len_ == 0) {\n    return *this;\n  }\n  const char* const e = str_ + len_;\n  for (auto end = e - 1; end >= str_; --end) {\n    if (is_slash(*end)) {\n      /* found the end of the parent dir */\n#ifdef _WIN32\n      if (end == e && end > str_ && end[-1] == ':') {\n        // Special case for \"C:\\\"; we want the baseName to\n        // be this same component so that we continue\n        // to consider it an absolute path\n        return *this;\n      }\n#endif\n      return w_string_piece(end + 1, e - (end + 1));\n    }\n  }\n\n  return *this;\n}\n\nw_string_piece w_string_piece::suffix() const {\n  if (len_ == 0) {\n    return {};\n  }\n  const char* const e = str_ + len_;\n  for (auto end = e - 1; end >= str_; --end) {\n    if (is_slash(*end)) {\n      return {};\n    }\n    if (*end == '.') {\n      return w_string_piece(end + 1, e - (end + 1));\n    }\n  }\n  return {};\n}\n\nbool w_string_piece::startsWith(w_string_piece prefix) const {\n  if (prefix.size() > size()) {\n    return false;\n  }\n  return memcmp(data(), prefix.data(), prefix.size()) == 0;\n}\n\nbool w_string_piece::startsWithCaseInsensitive(w_string_piece prefix) const {\n  if (prefix.size() > size()) {\n    return false;\n  }\n\n  auto me = str_;\n  auto pref = prefix.str_;\n\n  const char* const end = prefix.str_ + prefix.len_;\n  while (pref < end) {\n    // TODO: `tolower` depends on locale.\n    if (tolower((uint8_t)*me) != tolower((uint8_t)*pref)) {\n      return false;\n    }\n    ++pref;\n    ++me;\n  }\n  return true;\n}\n\n// string\n\nw_string::~w_string() {\n  if (str_) {\n    w_string_delref(str_);\n  }\n}\n\nw_string::w_string(const w_string& other) : str_(other.str_) {\n  if (str_) {\n    str_->addref();\n  }\n}\n\n#ifdef _WIN32\n\nw_string::w_string(const WCHAR* wpath, size_t pathlen) {\n  int len, res;\n  bool is_unc = false;\n\n  if (!wcsncmp(wpath, SYMLINK_ESCAPE, SYMLINK_ESCAPE_LEN)) {\n    wpath += SYMLINK_ESCAPE_LEN;\n    pathlen -= SYMLINK_ESCAPE_LEN;\n  }\n\n  if (!wcsncmp(wpath, LEN_ESCAPE, LEN_ESCAPE_LEN)) {\n    wpath += LEN_ESCAPE_LEN;\n    pathlen -= LEN_ESCAPE_LEN;\n\n    if (pathlen >= UNC_PREFIX_LEN + 1 &&\n        !wcsncmp(wpath, UNC_PREFIX, UNC_PREFIX_LEN) &&\n        wpath[UNC_PREFIX_LEN] == '\\\\') {\n      // Need to convert \"\\\\?\\UNC\\server\\share\" to \"\\\\server\\share\"\n      // We'll pass \"C\\server\\share\" and then poke a \"\\\" in at the\n      // start\n      wpath += UNC_PREFIX_LEN - 1;\n      pathlen -= (UNC_PREFIX_LEN - 1);\n      is_unc = true;\n    }\n  }\n\n  len = WideCharToMultiByte(\n      CP_UTF8, 0, wpath, pathlen, nullptr, 0, nullptr, nullptr);\n  if (len <= 0) {\n    throw std::system_error(\n        GetLastError(), std::system_category(), \"WideCharToMultiByte\");\n  }\n\n  str_ = StringHeader::alloc(len, W_STRING_UNICODE);\n  char* buf = str_->buf();\n\n  res = WideCharToMultiByte(\n      CP_UTF8, 0, wpath, pathlen, buf, len, nullptr, nullptr);\n  if (res != len) {\n    // Weird!\n    throw std::system_error(\n        GetLastError(), std::system_category(), \"WideCharToMultiByte\");\n  }\n\n  if (is_unc) {\n    // Replace the \"C\" from UNC with a leading slash\n    buf[0] = '\\\\';\n  }\n\n  // Normalize directory separators for our internal UTF-8\n  // strings to be forward slashes.  These will get transformed\n  // to backslashes when converting to WCHAR in our counterpart\n  // w_string_piece::asWideUNC()\n  std::transform(\n      buf, buf + len, buf, [](wchar_t c) { return c == '\\\\' ? '/' : c; });\n\n  buf[res] = 0;\n}\n\n#endif\n\nw_string& w_string::operator=(const w_string& other) {\n  if (&other == this) {\n    return *this;\n  }\n\n  reset();\n  if (str_) {\n    w_string_delref(str_);\n  }\n  str_ = other.str_;\n  if (str_) {\n    str_->addref();\n  }\n\n  return *this;\n}\n\nw_string::w_string(w_string&& other) noexcept : str_(other.str_) {\n  other.str_ = nullptr;\n}\n\nw_string& w_string::operator=(w_string&& other) noexcept {\n  if (&other == this) {\n    return *this;\n  }\n  reset();\n  str_ = other.str_;\n  other.str_ = nullptr;\n  return *this;\n}\n\nvoid w_string::reset() noexcept {\n  if (str_) {\n    w_string_delref(str_);\n    str_ = nullptr;\n  }\n}\n\ninline uint32_t hash_string(const char* str, size_t len) {\n  // Watchman used to use Bob Jenkins's lookup3. Many good hash functions exist,\n  // but, empirically, the standard library's are faster than lookup3 and\n  // convenient.\n  size_t hash = std::hash<std::string_view>{}(std::string_view(str, len));\n  // Supporting 32-bit is easy: we can skip the mix.\n  static_assert(\n      sizeof(size_t) == sizeof(uint64_t), \"32-bit platforms are not supported\");\n\n  // We could use do fancy mixing like with twang_32from64 but a simple xor\n  // should be sufficient for hash tables.\n  return (hash >> 32) ^ hash;\n}\n\nStringHash w_string::computeAndStoreHash() const noexcept {\n  StringHash hash = hash_string(str_->buf(), str_->len);\n\n  str_->_hval.store(hash, std::memory_order_release);\n  str_->set_hval_computed();\n  return hash;\n}\n\nstatic inline uint32_t checked_len(size_t len) {\n  if (len > UINT32_MAX) {\n    throw std::range_error(\"string length exceeds UINT32_MAX\");\n  }\n  return len;\n}\n\nw_string::w_string(const char* buf, size_t len, w_string_type_t stringType)\n    : w_string{w_string_new_len_typed(buf, checked_len(len), stringType)} {}\n\nw_string::w_string(const char* buf, w_string_type_t stringType)\n    : w_string{w_string_new_len_typed(buf, strlen_uint32(buf), stringType)} {}\n\nw_string w_string::dirName() const {\n  return w_string_piece(*this).dirName().asWString();\n}\n\nw_string w_string::baseName() const {\n  return w_string_piece(*this).baseName().asWString();\n}\n\nstd::optional<w_string> w_string::asLowerCaseSuffix() const {\n  return piece().asLowerCaseSuffix();\n}\n\nw_string w_string::normalizeSeparators(char targetSeparator) const {\n  uint32_t len = str_->len;\n\n  if (len == 0) {\n    return *this;\n  }\n\n  const char* thisbuf = str_->buf();\n\n  // This doesn't do any special UNC or path len escape prefix handling\n  // on windows.  We don't currently use it in a way that would require it.\n\n  // Trim any trailing dir seps\n  while (len > 0) {\n    if (thisbuf[len - 1] == '/' || thisbuf[len - 1] == '\\\\') {\n      --len;\n    } else {\n      break;\n    }\n  }\n\n  return generate(len, W_STRING_BYTE, [&](char* buf) {\n    for (uint32_t i = 0; i < len; ++i) {\n      char c = thisbuf[i];\n      buf[i] = (c == '/' || c == '\\\\') ? targetSeparator : c;\n    }\n  });\n}\n\nbool w_string::operator<(const w_string& other) const {\n  if (str_ == other.str_) {\n    // identity fast path\n    return false;\n  } else {\n    return view() < other.view();\n  }\n}\n\nbool w_string::operator==(const w_string& other) const {\n  if (str_ == other.str_) {\n    // identity fast path\n    return true;\n  } else if (\n      str_->has_hval() && other.str_->has_hval() &&\n      str_->_hval != other.str_->_hval) {\n    return false;\n  } else {\n    return view() == other.view();\n  }\n}\n\nbool w_string::operator!=(const w_string& other) const {\n  return !(*this == other);\n}\n\nw_string w_string::pathCat(std::initializer_list<w_string_piece> elems) {\n  uint32_t length = 0;\n\n  for (auto& p : elems) {\n    length += p.size() + 1;\n  }\n\n  auto* s = StringHeader::alloc(length, W_STRING_BYTE);\n  char* buf = s->buf();\n\n  for (auto& p : elems) {\n    if (p.size() == 0) {\n      // Skip empty strings\n      continue;\n    }\n    if (buf != s->buf()) {\n      *buf = '/';\n      ++buf;\n    }\n    memcpy(buf, p.data(), p.size());\n    buf += p.size();\n  }\n  *buf = 0;\n  // Post-hoc length adjustment.\n  // TODO: correctly calculate destination length up front.\n  s->len = buf - s->buf();\n\n  return w_string{s};\n}\n\nStringHash w_string_piece::hashValue() const noexcept {\n  return hash_string(data(), size());\n}\n\nuint32_t strlen_uint32(const char* str) {\n  size_t slen = strlen(str);\n  if (slen > UINT32_MAX) {\n    throw std::range_error(\"string length exceeds UINT32_MAX\");\n  }\n\n  return (uint32_t)slen;\n}\n\n#ifdef _WIN32\n\nstd::wstring w_string_piece::asWideUNC() const {\n  int len, res, prefix_len;\n  bool use_escape = false;\n  bool is_unc = false;\n\n  // Make a copy of ourselves, as we may mutate\n  w_string_piece path = *this;\n\n  if (path.size() == 0) {\n    return std::wstring(L\"\");\n  }\n\n  // We don't want to use the length escape for special filenames like NUL:\n  // (which we use as the equivalent to /dev/null).\n  // We only strictly need to use the escape when pathlen >= MAX_PATH,\n  // but since such paths are rare, we want to ensure that we hit any\n  // problems with the escape approach on common paths (not all windows\n  // API functions apparently support this very well)\n  if (path.size() > 3 && path.size() < MAX_PATH &&\n      path[path.size() - 1] == ':') {\n    use_escape = false;\n    prefix_len = 0;\n  } else {\n    use_escape = true;\n\n    prefix_len = LEN_ESCAPE_LEN;\n\n    // More func with escaped names when UNC notation is used\n    if (path[0] == '\\\\' && path[1] == '\\\\') {\n      is_unc = true;\n      prefix_len += UNC_PREFIX_LEN;\n    }\n  }\n\n  // Step 1, measure up\n  len = MultiByteToWideChar(CP_UTF8, 0, path.data(), path.size(), nullptr, 0);\n  if (len <= 0) {\n    throw std::system_error(\n        GetLastError(), std::system_category(), \"MultiByteToWideChar\");\n  }\n\n  // Step 2, allocate and prepend UNC prefix\n  std::wstring result;\n  result.reserve(prefix_len + len + 1);\n\n  if (use_escape) {\n    result.append(LEN_ESCAPE);\n\n    // UNC paths need further mangling when using length escapes\n    if (is_unc) {\n      result.append(UNC_PREFIX);\n      // \"\\\\server\\path\" -> \"\\\\?\\UNC\\server\\path\"\n      path = w_string_piece(\n          path.data() + 1,\n          path.size() - 1); // Skip the first of these two slashes\n    }\n  }\n\n  // Step 3, convert into the new space\n  result.resize(prefix_len + len);\n  res = MultiByteToWideChar(\n      CP_UTF8, 0, path.data(), path.size(), &result[prefix_len], len);\n\n  if (res != len) {\n    // Something crazy happened\n    throw std::system_error(\n        GetLastError(), std::system_category(), \"MultiByteToWideChar\");\n  }\n\n  // Replace all forward slashes with backslashes.  This makes things easier\n  // for clients that are just jamming paths together using /, but is also\n  // required when we are using the long filename escape prefix\n  for (auto& c : result) {\n    if (c == '/') {\n      c = '\\\\';\n    }\n  }\n  return result;\n}\n\n#endif\n\nstatic StringHeader*\nw_string_new_len_typed(const char* str, uint32_t len, w_string_type_t type) {\n  auto* s = StringHeader::alloc(len, type);\n  char* buf = s->buf();\n  if (len) {\n    memcpy(buf, str, len);\n  }\n  buf[len] = 0;\n  return s;\n}\n\nvoid w_string_delref(StringHeader* str) {\n  if (str->decref()) {\n    // Call the destructor.  We can't use regular delete because\n    // we allocated with malloc().\n    str->~StringHeader();\n    free(str);\n  }\n}\n\nbool w_string_equal_caseless(w_string_piece a, w_string_piece b) {\n  uint32_t i;\n\n  if (a.size() != b.size()) {\n    return false;\n  }\n  for (i = 0; i < a.size(); i++) {\n    // TODO: `tolower` depends on locale.\n    if (tolower((uint8_t)a[i]) != tolower((uint8_t)b[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nbool w_string_piece::hasSuffix(w_string_piece suffix) const {\n  unsigned int base, i;\n\n  if (size() < suffix.size() + 1) {\n    return false;\n  }\n\n  base = size() - suffix.size();\n\n  if (str_[base - 1] != '.') {\n    return false;\n  }\n\n  for (i = 0; i < suffix.size(); i++) {\n    // TODO: `tolower` depends on locale.\n    if (tolower((uint8_t)str_[base + i]) != suffix[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nbool w_string_piece::contains(w_string_piece needle) const {\n#if HAVE_MEMMEM\n  if (needle.empty()) {\n    return true;\n  }\n  return memmem(data(), size(), needle.data(), needle.size()) != nullptr;\n#else\n  return view().find(needle.view()) != std::string_view::npos;\n#endif\n}\n\nw_string_piece w_string_canon_path(w_string_piece str) {\n  const char* begin = str.data();\n  const char* end = str.data() + str.size();\n  while (end != begin && is_slash(end[-1])) {\n    --end;\n  }\n  return w_string_piece{begin, end};\n}\n\nbool w_string_path_is_absolute(w_string_piece path) {\n  // TODO: To avoid needing a strlen in call sites that have a null-terminated\n  // `const char*` path, this function could have a `const char*` overload\n  // because it only ever looks at the first few characters of the string.\n\n#ifdef _WIN32\n  char drive_letter;\n\n  if (path.size() <= 2) {\n    return false;\n  }\n\n  // \"\\something\"\n  if (is_slash(path[0])) {\n    // \"\\\\something\" is absolute, \"\\something\" is relative to the current\n    // dir of the current drive, whatever that may be, for a given process\n    return is_slash(path[1]);\n  }\n\n  // TODO: `tolower` depends on locale.\n  drive_letter = (char)tolower(path[0]);\n  // \"C:something\"\n  if (drive_letter >= 'a' && drive_letter <= 'z' && path[1] == ':') {\n    // \"C:\\something\" is absolute, but \"C:something\" is relative to\n    // the current dir on the C drive(!)\n    return is_slash(path[2]);\n  }\n  // we could check for things like NUL:, COM: and so on here.\n  // While those are technically absolute names, we can't watch them, so\n  // we don't consider them absolute for the purposes of checking whether\n  // the path is a valid watchable root\n  return false;\n#else\n  return path.size() > 0 && path[0] == '/';\n#endif\n}\n\nstd::ostream& operator<<(std::ostream& stream, const w_string& a) {\n  stream << a.view();\n  return stream;\n}\n\nstd::ostream& operator<<(std::ostream& stream, const w_string_piece& a) {\n  stream << a.view();\n  return stream;\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/telemetry/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"fbcode_buck2_contbuilds\")\n\ncpp_library(\n    name = \"telemetry\",\n    srcs = [\n        \"LogEvent.cpp\",\n        \"WatchmanStats.cpp\",\n        \"WatchmanStructuredLogger.cpp\",\n    ],\n    headers = [\n        \"LogEvent.h\",\n        \"WatchmanStats.h\",\n        \"WatchmanStructuredLogger.h\",\n    ],\n    deps = [\n        \"//watchman:config\",\n    ],\n    exported_deps = [\n        \"//eden/common/telemetry:log_info\",\n        \"//eden/common/telemetry:scribe_logger\",\n        \"//eden/common/telemetry:structured_logger\",\n        \"//eden/common/telemetry:structured_logger_factory\",\n        \"//eden/common/telemetry:telemetry\",\n        \"//eden/common/utils:ref_ptr\",\n        \"//folly:stop_watch\",\n        \"//folly:thread_local\",\n        \"//folly/portability:sys_types\",\n    ],\n)\n"
  },
  {
    "path": "watchman/telemetry/LogEvent.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <unordered_map>\n\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n\nnamespace watchman {\n\nstd::pair<int64_t, int64_t> getLogEventCounters(const LogEventType& type) {\n  static std::unordered_map<LogEventType, std::atomic_int64_t> eventCounters;\n  static int64_t samplingRate = cfg_get_int(\"scribe-sampling-rate\", 100);\n\n  // Find event counter or add if missing - init to 0;\n  auto it = eventCounters.find(type);\n  if (it == eventCounters.end()) {\n    it = eventCounters.emplace(type, 0).first;\n  }\n\n  // Return sampling rate and event count\n  auto& eventCounter = it->second;\n  auto eventCount = ++eventCounter % samplingRate;\n  return std::make_pair(samplingRate, eventCount ? eventCount : samplingRate);\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/telemetry/LogEvent.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/portability/SysTypes.h>\n#include <folly/stop_watch.h>\n\n#include <atomic>\n#include <chrono>\n#include <cstdint>\n#include <optional>\n#include <string>\n\n#include \"eden/common/telemetry/DynamicEvent.h\"\n#include \"eden/common/telemetry/LogEvent.h\"\n\nnamespace watchman {\n\nusing DynamicEvent = facebook::eden::DynamicEvent;\nusing TypedEvent = facebook::eden::TypedEvent;\n\nstruct WatchmanBaseEvent : public TypedEvent {\n  // TODO: add system and user time for Unix systems\n  std::chrono::time_point<std::chrono::system_clock> start_time =\n      std::chrono::system_clock::now();\n  std::string root;\n  std::string error;\n  int64_t event_count = 1;\n\n  void populate(DynamicEvent& event) const override {\n    std::chrono::duration<int64_t, std::nano> elapsed_time =\n        std::chrono::system_clock::now() - start_time;\n    event.addInt(\n        \"start_time\", std::chrono::system_clock::to_time_t(start_time));\n    event.addInt(\n        \"elapsed_time\",\n        std::chrono::duration_cast<std::chrono::milliseconds>(elapsed_time)\n            .count());\n    if (!root.empty()) {\n      event.addString(\"root\", root);\n    }\n    if (!error.empty()) {\n      event.addString(\"error\", error);\n    }\n    event.addInt(\"event_count\", event_count);\n  }\n\n  // Keep getType() pure virtual to force subclasses to implement it\n  virtual const char* getType() const override = 0;\n};\n\nstruct WatchmanEvent : public WatchmanBaseEvent {\n  int64_t recrawl = 0;\n  bool case_sensitive = false;\n  std::string watcher;\n  pid_t client_pid = 0;\n  std::string client_name;\n\n  void populate(DynamicEvent& event) const override {\n    WatchmanBaseEvent::populate(event);\n    event.addInt(\"recrawl\", recrawl);\n    event.addBool(\"case_sensitive\", case_sensitive);\n    if (!watcher.empty()) {\n      event.addString(\"watcher\", watcher);\n    }\n\n    if (client_pid != 0) {\n      event.addInt(\"client_pid\", client_pid);\n    }\n    if (!client_name.empty()) {\n      event.addString(\"client\", client_name);\n    }\n  }\n\n  // Keep getType() pure virtual to force subclasses to implement it\n  virtual const char* getType() const override = 0;\n};\n\nenum LogEventType : uint8_t {\n  DispatchCommandType,\n  ClockTestType,\n  AgeOutType,\n  SyncToNowType,\n  SavedStateType,\n  QueryExecuteType,\n  FullCrawlType,\n  DroppedType\n};\n\n// Returns samplingRate and eventCount\nstd::pair<int64_t, int64_t> getLogEventCounters(const LogEventType& type);\n\nstruct DispatchCommand : public WatchmanEvent {\n  std::string command;\n  std::string args;\n\n  void populate(DynamicEvent& event) const override {\n    WatchmanEvent::populate(event);\n    event.addString(\"command\", command);\n    if (!args.empty()) {\n      event.addString(\"args\", args);\n    }\n  }\n\n  const char* getType() const override {\n    return \"dispatch_command\";\n  }\n};\n\nstruct ClockTest : public WatchmanBaseEvent {\n  void populate(DynamicEvent& event) const override {\n    WatchmanBaseEvent::populate(event);\n  }\n\n  const char* getType() const override {\n    return \"clock_test\";\n  }\n};\n\nstruct AgeOut : public WatchmanEvent {\n  int64_t walked = 0;\n  int64_t files = 0;\n  int64_t dirs = 0;\n\n  void populate(DynamicEvent& event) const override {\n    WatchmanEvent::populate(event);\n    event.addInt(\"walked\", walked);\n    event.addInt(\"files\", files);\n    event.addInt(\"dirs\", dirs);\n  }\n\n  const char* getType() const override {\n    return \"age_out\";\n  }\n};\n\nstruct SyncToNow : public WatchmanEvent {\n  bool success = true;\n  int64_t timeoutms = 0;\n\n  void populate(DynamicEvent& event) const override {\n    WatchmanEvent::populate(event);\n    event.addBool(\"success\", success);\n    event.addInt(\"timeoutms\", timeoutms);\n  }\n\n  const char* getType() const override {\n    return \"sync_to_now\";\n  }\n};\n\nstruct SavedState : public WatchmanEvent {\n  enum Target { Manifold = 1, Xdb = 2 };\n  enum Action { GetProperties = 1, Connect = 2, Query = 3 };\n\n  Target target = Manifold;\n  Action action = GetProperties;\n  std::string project;\n  std::string path;\n  int64_t commit_date = 0;\n  std::optional<std::string> projectMetadata;\n  std::string properties;\n  bool success = false;\n\n  void populate(DynamicEvent& event) const override {\n    WatchmanEvent::populate(event);\n    event.addInt(\"target\", target);\n    event.addInt(\"action\", action);\n    event.addString(\"project\", project);\n    if (!path.empty()) {\n      event.addString(\"path\", path);\n    }\n    event.addInt(\"commit_date\", commit_date);\n    if (projectMetadata.has_value()) {\n      event.addString(\"metadata\", projectMetadata.value());\n    }\n    if (!properties.empty()) {\n      event.addString(\"properties\", properties);\n    }\n    event.addBool(\"success\", success);\n  }\n\n  const char* getType() const override {\n    return \"saved_state\";\n  }\n};\n\nstruct QueryExecute : public WatchmanEvent {\n  std::string request_id;\n  int64_t num_special_files = 0;\n  std::string special_files;\n  bool fresh_instance = false;\n  std::string fresh_instance_cause;\n  bool saved_state_missing = false;\n  int64_t deduped = 0;\n  int64_t results = 0;\n  int64_t walked = 0;\n  std::string query;\n  int64_t eden_glob_files_duration_us = 0;\n  int64_t eden_changed_files_duration_us = 0;\n  int64_t eden_file_properties_duration_us = 0;\n  int64_t scm_files_changed_since_mergebase_with_duration_us = 0;\n  std::string generator;\n  int64_t generation_duration_ms = 0;\n\n  void populate(DynamicEvent& event) const override {\n    WatchmanEvent::populate(event);\n    if (!request_id.empty()) {\n      event.addString(\"request_id\", request_id);\n    }\n    event.addInt(\"num_special_files\", num_special_files);\n    if (!special_files.empty()) {\n      event.addString(\"special_files\", special_files);\n    }\n    event.addBool(\"fresh_instance\", fresh_instance);\n    if (!query.empty()) {\n      event.addString(\"fresh_instance_cause\", fresh_instance_cause);\n    }\n    event.addInt(\"deduped\", deduped);\n    event.addInt(\"results\", results);\n    event.addInt(\"walked\", walked);\n    if (!query.empty()) {\n      event.addString(\"query\", query);\n    }\n    if (eden_glob_files_duration_us != 0) {\n      event.addInt(\"eden_glob_files_duration_us\", eden_glob_files_duration_us);\n    }\n    if (eden_changed_files_duration_us != 0) {\n      event.addInt(\n          \"eden_changed_files_duration_us\", eden_changed_files_duration_us);\n    }\n    if (eden_file_properties_duration_us != 0) {\n      event.addInt(\n          \"eden_file_properties_duration_us\", eden_file_properties_duration_us);\n    }\n    if (scm_files_changed_since_mergebase_with_duration_us != 0) {\n      event.addInt(\n          \"scm_files_changed_since_mergebase_with_duration_us\",\n          scm_files_changed_since_mergebase_with_duration_us);\n    }\n    if (!generator.empty()) {\n      event.addString(\"generator\", generator);\n    }\n    if (generation_duration_ms != 0) {\n      event.addInt(\"generation_duration_ms\", generation_duration_ms);\n    }\n    if (saved_state_missing) {\n      event.addBool(\"saved_state_missing\", saved_state_missing);\n    }\n  }\n\n  const char* getType() const override {\n    return \"query_execute\";\n  }\n};\n\nstruct FullCrawl : public WatchmanEvent {\n  void populate(DynamicEvent& event) const override {\n    WatchmanEvent::populate(event);\n  }\n\n  const char* getType() const override {\n    return \"full_crawl\";\n  }\n};\n\nstruct Dropped : public WatchmanEvent {\n  bool isKernel = false;\n\n  void populate(DynamicEvent& event) const override {\n    WatchmanEvent::populate(event);\n    event.addBool(\"isKernel\", isKernel);\n  }\n\n  const char* getType() const override {\n    return \"dropped\";\n  }\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/telemetry/WatchmanStats.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/telemetry/WatchmanStats.h\"\n\n#include <memory>\n\nnamespace watchman {\n\nvoid WatchmanStats::flush() {\n  // This method is only really useful while testing to ensure that the service\n  // data singleton instance has the latest stats. Since all our stats are now\n  // quantile stat based, flushing the quantile stat map is sufficient for that\n  // use case.\n  facebook::fb303::ServiceData::get()->getQuantileStatMap()->flushAll();\n}\n\nWatchmanStatsPtr getWatchmanStats() {\n  // A running Watchman daemon only needs a single WatchmanStats instance. Avoid\n  // atomic reference counts with RefPtr::singleton. We could use\n  // folly::Singleton but that makes unit testing harder.\n  static WatchmanStats* gWatchmanStats = new WatchmanStats;\n  return WatchmanStatsPtr::singleton(*gWatchmanStats);\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/telemetry/WatchmanStats.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <memory>\n\n#include <folly/ThreadLocal.h>\n\n#include \"eden/common/telemetry/DurationScope.h\"\n#include \"eden/common/telemetry/Stats.h\"\n#include \"eden/common/telemetry/StatsGroup.h\"\n#include \"eden/common/utils/RefPtr.h\"\n\nnamespace watchman {\n\nusing StatsGroupBase = facebook::eden::StatsGroupBase;\nusing TelemetryStats = facebook::eden::TelemetryStats;\n\nclass WatchmanStats : public facebook::eden::RefCounted {\n public:\n  /**\n   * Records a specified elapsed duration. Updates thread-local storage, and\n   * aggregates into the fb303 ServiceData in the background and on reads.\n   */\n  template <typename T, typename Rep, typename Period>\n  void addDuration(\n      StatsGroupBase::Duration T::* duration,\n      std::chrono::duration<Rep, Period> elapsed) {\n    (getStatsForCurrentThread<T>().*duration).addDuration(elapsed);\n  }\n\n  template <typename T>\n  void increment(StatsGroupBase::Counter T::* counter, double value = 1.0) {\n    (getStatsForCurrentThread<T>().*counter).addValue(value);\n  }\n\n  /**\n   * Aggregates thread-locals into fb303's ServiceData.\n   *\n   * This function can be called on any thread.\n   */\n  void flush();\n\n  template <typename T>\n  T& getStatsForCurrentThread() = delete;\n\n private:\n  class ThreadLocalTag {};\n\n  template <typename T>\n  using ThreadLocal = folly::ThreadLocal<T, ThreadLocalTag, void>;\n\n  ThreadLocal<TelemetryStats> telemetryStats_;\n};\n\nusing WatchmanStatsPtr = facebook::eden::RefPtr<WatchmanStats>;\n\ntemplate <>\ninline TelemetryStats&\nWatchmanStats::getStatsForCurrentThread<TelemetryStats>() {\n  return *telemetryStats_.get();\n}\n\nWatchmanStatsPtr getWatchmanStats();\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/telemetry/WatchmanStructuredLogger.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/telemetry/WatchmanStructuredLogger.h\"\n\n#include \"eden/common/telemetry/StructuredLoggerFactory.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/telemetry/WatchmanStats.h\"\n\nnamespace watchman {\n\nusing UserInfo = facebook::eden::UserInfo;\n\nWatchmanStructuredLogger::WatchmanStructuredLogger(\n    std::shared_ptr<ScribeLogger> scribeLogger,\n    SessionInfo sessionInfo)\n    : ScubaStructuredLogger{std::move(scribeLogger), std::move(sessionInfo)} {}\n\nstd::shared_ptr<StructuredLogger> getLogger() {\n  static std::shared_ptr<StructuredLogger> logger = facebook::eden::\n      makeDefaultStructuredLogger<WatchmanStructuredLogger, WatchmanStatsPtr>(\n          cfg_get_string(\"scribe-cat\", \"\"),\n          cfg_get_string(\"scribe-category\", \"\"),\n          facebook::eden::makeSessionInfo(\n              UserInfo::lookup(),\n              facebook::eden::getHostname(),\n              PACKAGE_VERSION),\n          getWatchmanStats());\n  return logger;\n}\n\nDynamicEvent WatchmanStructuredLogger::populateDefaultFields(\n    std::optional<const char*> type) {\n  DynamicEvent event = StructuredLogger::populateDefaultFields(type);\n  event.addString(\"version\", sessionInfo_.appVersion);\n#ifdef WATCHMAN_BUILD_INFO\n  event.addString(\"buildinfo\", WATCHMAN_BUILD_INFO);\n#endif\n  event.addString(\"logged_by\", \"watchman\");\n\n  const auto& fbInfo = sessionInfo_.fbInfo;\n  for (const auto& info : fbInfo) {\n    const auto& key = info.first;\n    const auto& value = info.second;\n    std::visit(\n        [&](const auto& v) {\n          using T = std::decay_t<decltype(v)>;\n          if constexpr (std::is_same_v<T, std::string>) {\n            event.addString(key, v);\n          } else if constexpr (std::is_same_v<T, uint64_t>) {\n            event.addInt(key, v);\n          }\n        },\n        value);\n  }\n\n  return event;\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/telemetry/WatchmanStructuredLogger.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"eden/common/telemetry/ScribeLogger.h\"\n#include \"eden/common/telemetry/ScubaStructuredLogger.h\"\n#include \"eden/common/telemetry/SessionInfo.h\"\n#include \"eden/common/telemetry/StructuredLogger.h\"\n\nnamespace watchman {\n\nusing DynamicEvent = facebook::eden::DynamicEvent;\nusing SessionInfo = facebook::eden::SessionInfo;\nusing ScribeLogger = facebook::eden::ScribeLogger;\nusing ScubaStructuredLogger = facebook::eden::ScubaStructuredLogger;\nusing StructuredLogger = facebook::eden::StructuredLogger;\n\nclass WatchmanStructuredLogger : public ScubaStructuredLogger {\n public:\n  explicit WatchmanStructuredLogger(\n      std::shared_ptr<ScribeLogger> scribeLogger,\n      SessionInfo sessionInfo);\n  virtual ~WatchmanStructuredLogger() override = default;\n\n protected:\n  virtual DynamicEvent populateDefaultFields(\n      std::optional<const char*> type) override;\n};\n\nstd::shared_ptr<StructuredLogger> getLogger();\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/test/ArtTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n#include <folly/logging/xlog.h>\n#include <folly/portability/GTest.h>\n#include <stdio.h>\n#include <string.h>\n\n#include \"watchman/thirdparty/libart/src/art.h\"\n\nstatic FILE* open_test_file(const char* name) {\n  FILE* f = fopen(name, \"r\");\n  char altname[1024];\n\n  if (f) {\n    return f;\n  }\n\n#ifdef WATCHMAN_TEST_SRC_DIR\n  snprintf(altname, sizeof(altname), \"%s/%s\", WATCHMAN_TEST_SRC_DIR, name);\n  f = fopen(altname, \"r\");\n  if (f) {\n    return f;\n  }\n#endif\n\n  snprintf(altname, sizeof(altname), \"watchman/%s\", name);\n  f = fopen(altname, \"r\");\n  if (f) {\n    return f;\n  }\n  throw std::runtime_error(fmt::format(\"can't find test data file {}\", name));\n}\n\nTEST(Art, insert) {\n  art_tree<uintptr_t> t;\n  int len;\n  char buf[512];\n  FILE* f = open_test_file(\"watchman/thirdparty/libart/tests/words.txt\");\n  uintptr_t line = 1;\n\n  while (fgets(buf, sizeof buf, f)) {\n    len = (int)strlen(buf);\n    buf[len - 1] = '\\0';\n    t.insert(buf, line);\n    EXPECT_EQ(t.size(), line) << \"art_size didn't match current line no\";\n    line++;\n  }\n}\n\nTEST(Art, insert_verylong) {\n  art_tree<void*> t;\n\n  unsigned char key1[300] = {\n      16,  0,   0,   0,   7,   10,  0,   0,   0,   2,   17,  10,  0,   0,\n      0,   120, 10,  0,   0,   0,   120, 10,  0,   0,   0,   216, 10,  0,\n      0,   0,   202, 10,  0,   0,   0,   194, 10,  0,   0,   0,   224, 10,\n      0,   0,   0,   230, 10,  0,   0,   0,   210, 10,  0,   0,   0,   206,\n      10,  0,   0,   0,   208, 10,  0,   0,   0,   232, 10,  0,   0,   0,\n      124, 10,  0,   0,   0,   124, 2,   16,  0,   0,   0,   2,   12,  185,\n      89,  44,  213, 251, 173, 202, 211, 95,  185, 89,  110, 118, 251, 173,\n      202, 199, 101, 0,   8,   18,  182, 92,  236, 147, 171, 101, 150, 195,\n      112, 185, 218, 108, 246, 139, 164, 234, 195, 58,  177, 0,   8,   16,\n      0,   0,   0,   2,   12,  185, 89,  44,  213, 251, 173, 202, 211, 95,\n      185, 89,  110, 118, 251, 173, 202, 199, 101, 0,   8,   18,  180, 93,\n      46,  151, 9,   212, 190, 95,  102, 178, 217, 44,  178, 235, 29,  190,\n      218, 8,   16,  0,   0,   0,   2,   12,  185, 89,  44,  213, 251, 173,\n      202, 211, 95,  185, 89,  110, 118, 251, 173, 202, 199, 101, 0,   8,\n      18,  180, 93,  46,  151, 9,   212, 190, 95,  102, 183, 219, 229, 214,\n      59,  125, 182, 71,  108, 180, 220, 238, 150, 91,  117, 150, 201, 84,\n      183, 128, 8,   16,  0,   0,   0,   2,   12,  185, 89,  44,  213, 251,\n      173, 202, 211, 95,  185, 89,  110, 118, 251, 173, 202, 199, 101, 0,\n      8,   18,  180, 93,  46,  151, 9,   212, 190, 95,  108, 176, 217, 47,\n      50,  219, 61,  134, 207, 97,  151, 88,  237, 246, 208, 8,   18,  255,\n      255, 255, 219, 191, 198, 134, 5,   223, 212, 72,  44,  208, 250, 180,\n      14,  1,   0,   0,   8,   '\\0'};\n  unsigned char key2[303] = {\n      16,  0,   0,   0,   7,   10,  0,   0,   0,   2,   17,  10,  0,   0,   0,\n      120, 10,  0,   0,   0,   120, 10,  0,   0,   0,   216, 10,  0,   0,   0,\n      202, 10,  0,   0,   0,   194, 10,  0,   0,   0,   224, 10,  0,   0,   0,\n      230, 10,  0,   0,   0,   210, 10,  0,   0,   0,   206, 10,  0,   0,   0,\n      208, 10,  0,   0,   0,   232, 10,  0,   0,   0,   124, 10,  0,   0,   0,\n      124, 2,   16,  0,   0,   0,   2,   12,  185, 89,  44,  213, 251, 173, 202,\n      211, 95,  185, 89,  110, 118, 251, 173, 202, 199, 101, 0,   8,   18,  182,\n      92,  236, 147, 171, 101, 150, 195, 112, 185, 218, 108, 246, 139, 164, 234,\n      195, 58,  177, 0,   8,   16,  0,   0,   0,   2,   12,  185, 89,  44,  213,\n      251, 173, 202, 211, 95,  185, 89,  110, 118, 251, 173, 202, 199, 101, 0,\n      8,   18,  180, 93,  46,  151, 9,   212, 190, 95,  102, 178, 217, 44,  178,\n      235, 29,  190, 218, 8,   16,  0,   0,   0,   2,   12,  185, 89,  44,  213,\n      251, 173, 202, 211, 95,  185, 89,  110, 118, 251, 173, 202, 199, 101, 0,\n      8,   18,  180, 93,  46,  151, 9,   212, 190, 95,  102, 183, 219, 229, 214,\n      59,  125, 182, 71,  108, 180, 220, 238, 150, 91,  117, 150, 201, 84,  183,\n      128, 8,   16,  0,   0,   0,   3,   12,  185, 89,  44,  213, 251, 133, 178,\n      195, 105, 183, 87,  237, 150, 155, 165, 150, 229, 97,  182, 0,   8,   18,\n      161, 91,  239, 50,  10,  61,  150, 223, 114, 179, 217, 64,  8,   12,  186,\n      219, 172, 150, 91,  53,  166, 221, 101, 178, 0,   8,   18,  255, 255, 255,\n      219, 191, 198, 134, 5,   208, 212, 72,  44,  208, 250, 180, 14,  1,   0,\n      0,   8,   '\\0'};\n\n  t.insert(std::string(reinterpret_cast<char*>(key1), 299), (void*)key1);\n  t.insert(std::string(reinterpret_cast<char*>(key2), 302), (void*)key2);\n  t.insert(std::string(reinterpret_cast<char*>(key2), 302), (void*)key2);\n  EXPECT_TRUE(t.size() == 2);\n}\n\nTEST(Art, insert_search) {\n  art_tree<uintptr_t> t;\n  int len;\n  char buf[512];\n  FILE* f = open_test_file(\"watchman/thirdparty/libart/tests/words.txt\");\n  uintptr_t line = 1;\n\n  while (fgets(buf, sizeof buf, f)) {\n    len = (int)strlen(buf);\n    buf[len - 1] = '\\0';\n    t.insert(std::string(buf), line);\n    line++;\n  }\n\n  // Seek back to the start\n  fseek(f, 0, SEEK_SET);\n\n  // Search for each line\n  line = 1;\n  while (fgets(buf, sizeof buf, f)) {\n    len = (int)strlen(buf);\n    buf[len - 1] = '\\0';\n\n    {\n      uintptr_t val = *t.search(buf);\n      EXPECT_EQ(line, val) << \"Line: \" << line << \" Val: \" << val\n                           << \" Str: \" << buf;\n    }\n    line++;\n  }\n\n  // Check the minimum\n  auto l = t.minimum();\n  EXPECT_TRUE(l && l->key == \"A\");\n\n  // Check the maximum\n  l = t.maximum();\n  EXPECT_TRUE(l && l->key == \"zythum\");\n}\n\nTEST(Art, insert_delete) {\n  art_tree<uintptr_t> t;\n  int len;\n  char buf[512];\n  FILE* f = open_test_file(\"watchman/thirdparty/libart/tests/words.txt\");\n\n  uintptr_t line = 1, nlines;\n  while (fgets(buf, sizeof buf, f)) {\n    len = (int)strlen(buf);\n    buf[len - 1] = '\\0';\n    t.insert(buf, line);\n    line++;\n  }\n\n  nlines = line - 1;\n\n  // Seek back to the start\n  fseek(f, 0, SEEK_SET);\n\n  // Search for each line\n  line = 1;\n  while (fgets(buf, sizeof buf, f)) {\n    uintptr_t val;\n    len = (int)strlen(buf);\n    buf[len - 1] = '\\0';\n\n    // Search first, ensure all entries still\n    // visible\n    val = *t.search(buf);\n    EXPECT_EQ(line, val) << \"Line: \" << line << \" Val: \" << val\n                         << \" Str: \" << buf;\n\n    // Delete, should get lineno back\n    EXPECT_TRUE(t.erase(buf))\n        << \"failed to erase line \" << line << \" str: \" << buf;\n\n    // Check the size\n    EXPECT_EQ(t.size(), nlines - line) << \"bad size after delete\";\n    line++;\n  }\n\n  // Check the minimum and maximum\n  EXPECT_TRUE(!t.minimum());\n  EXPECT_TRUE(!t.maximum());\n}\n\nTEST(Art, insert_iter) {\n  art_tree<uintptr_t> t;\n\n  int len;\n  char buf[512];\n  FILE* f = open_test_file(\"watchman/thirdparty/libart/tests/words.txt\");\n\n  uint64_t xor_mask = 0;\n  uintptr_t lineno = 1, nlines;\n  while (fgets(buf, sizeof buf, f)) {\n    len = (int)strlen(buf);\n    buf[len - 1] = '\\0';\n    t.insert(buf, lineno);\n\n    xor_mask ^= (lineno * (buf[0] + len - 1));\n    lineno++;\n  }\n  nlines = lineno - 1;\n\n  {\n    uint64_t out[] = {0, 0};\n    EXPECT_TRUE(t.iter([&out](const std::string& key, uintptr_t& line) {\n      uint64_t mask = (line * (key[0] + key.size()));\n      out[0]++;\n      out[1] ^= mask;\n      return 0;\n    }) == 0);\n\n    EXPECT_TRUE(out[0] == nlines);\n    EXPECT_TRUE(out[1] == xor_mask);\n  }\n}\n\ntemplate <typename T>\nstruct prefix_data {\n  int count;\n  int max_count;\n  const char** expected;\n\n  int operator()(const std::string& k, T&) {\n    EXPECT_TRUE(count < max_count);\n    XLOGF(ERR, \"Key: {} Expect: {}\", k, expected[count]);\n    EXPECT_TRUE(memcmp(k.data(), expected[count], k.size()) == 0);\n    count++;\n    return 0;\n  }\n};\n\nTEST(Art, iter_prefix) {\n  art_tree<void*> t;\n  const char* expected2[] = {\n      \"abc.123.456\",\n      \"api\",\n      \"api.foe.fum\",\n      \"api.foo\",\n      \"api.foo.bar\",\n      \"api.foo.baz\"};\n\n  t.insert(\"api.foo.bar\", nullptr);\n  t.insert(\"api.foo.baz\", nullptr);\n  t.insert(\"api.foe.fum\", nullptr);\n  t.insert(\"abc.123.456\", nullptr);\n  t.insert(\"api.foo\", nullptr);\n  t.insert(\"api\", nullptr);\n\n  {\n    // Iterate over api\n    const char* expected[] = {\n        \"api\", \"api.foe.fum\", \"api.foo\", \"api.foo.bar\", \"api.foo.baz\"};\n    prefix_data<void*> p = {0, 5, expected};\n    EXPECT_TRUE(!t.iterPrefix((unsigned char*)\"api\", 3, p));\n    XLOGF(ERR, \"Count: {} Max: {}\", p.count, p.max_count);\n    EXPECT_TRUE(p.count == p.max_count);\n  }\n\n  {\n    // Iterate over 'a'\n    prefix_data<void*> p2 = {0, 6, expected2};\n    EXPECT_TRUE(!t.iterPrefix((unsigned char*)\"a\", 1, p2));\n    EXPECT_TRUE(p2.count == p2.max_count);\n  }\n\n  {\n    // Check a failed iteration\n    prefix_data<void*> p3 = {0, 0, nullptr};\n    EXPECT_TRUE(!t.iterPrefix((unsigned char*)\"b\", 1, p3));\n    EXPECT_TRUE(p3.count == 0);\n  }\n\n  {\n    // Iterate over api.\n    const char* expected4[] = {\n        \"api.foe.fum\", \"api.foo\", \"api.foo.bar\", \"api.foo.baz\"};\n    prefix_data<void*> p4 = {0, 4, expected4};\n    EXPECT_TRUE(!t.iterPrefix((unsigned char*)\"api.\", 4, p4));\n    XLOGF(ERR, \"Count: {} Max: {}\", p4.count, p4.max_count);\n    EXPECT_TRUE(p4.count == p4.max_count);\n  }\n\n  {\n    // Iterate over api.foo.ba\n    const char* expected5[] = {\"api.foo.bar\"};\n    prefix_data<void*> p5 = {0, 1, expected5};\n    EXPECT_TRUE(!t.iterPrefix((unsigned char*)\"api.foo.bar\", 11, p5));\n    XLOGF(ERR, \"Count: {} Max: {}\", p5.count, p5.max_count);\n    EXPECT_TRUE(p5.count == p5.max_count);\n  }\n\n  // Check a failed iteration on api.end\n  {\n    prefix_data<void*> p6 = {0, 0, nullptr};\n    EXPECT_TRUE(!t.iterPrefix((unsigned char*)\"api.end\", 7, p6));\n    EXPECT_TRUE(p6.count == 0);\n  }\n\n  // Iterate over empty prefix\n  {\n    prefix_data<void*> p7 = {0, 6, expected2};\n    EXPECT_TRUE(!t.iterPrefix((unsigned char*)\"\", 0, p7));\n    EXPECT_TRUE(p7.count == p7.max_count);\n  }\n}\n\nTEST(Art, long_prefix) {\n  art_tree<uintptr_t> t;\n\n  t.insert(\"this:key:has:a:long:prefix:3\", 3);\n  t.insert(\"this:key:has:a:long:common:prefix:2\", 2);\n  t.insert(\"this:key:has:a:long:common:prefix:1\", 1);\n\n  // Search for the keys\n  EXPECT_TRUE(1 == *t.search(\"this:key:has:a:long:common:prefix:1\"));\n  EXPECT_TRUE(2 == *t.search(\"this:key:has:a:long:common:prefix:2\"));\n  EXPECT_TRUE(3 == *t.search(\"this:key:has:a:long:prefix:3\"));\n\n  {\n    const char* expected[] = {\n        \"this:key:has:a:long:common:prefix:1\",\n        \"this:key:has:a:long:common:prefix:2\",\n        \"this:key:has:a:long:prefix:3\",\n    };\n    prefix_data<uintptr_t> p = {0, 3, expected};\n    EXPECT_TRUE(!t.iterPrefix((unsigned char*)\"this:key:has\", 12, p));\n    XLOGF(ERR, \"Count: {} Max: {}\", p.count, p.max_count);\n    EXPECT_TRUE(p.count == p.max_count);\n  }\n}\n\nTEST(Art, prefix) {\n  art_tree<void*> t;\n  void* v;\n\n  t.insert(\"food\", (void*)\"food\");\n  t.insert(\"foo\", (void*)\"foo\");\n  XLOGF(ERR, \"size is now {}\", t.size());\n  EXPECT_TRUE(t.size() == 2);\n  EXPECT_TRUE((v = *t.search(\"food\")) != nullptr);\n  XLOGF(ERR, \"food lookup yields {}\", v);\n  EXPECT_TRUE(v && strcmp((char*)v, \"food\") == 0);\n\n  t.iter([](const std::string& key, void*& value) {\n    XLOGF(ERR, \"iter leaf: key_len={} {} value={}\", key.size(), key, value);\n    return 0;\n  });\n\n  EXPECT_TRUE((v = *t.search(\"foo\")) != nullptr);\n  XLOGF(ERR, \"foo lookup yields {}\", v);\n  EXPECT_TRUE(v && strcmp((char*)v, \"foo\") == 0);\n}\n\nTEST(Art, insert_search_uuid) {\n  art_tree<uintptr_t> t;\n  int len;\n  char buf[512];\n  FILE* f = open_test_file(\"watchman/thirdparty/libart/tests/uuid.txt\");\n  uintptr_t line = 1;\n\n  while (fgets(buf, sizeof buf, f)) {\n    len = (int)strlen(buf);\n    buf[len - 1] = '\\0';\n    t.insert(buf, line);\n    line++;\n  }\n\n  // Seek back to the start\n  fseek(f, 0, SEEK_SET);\n\n  // Search for each line\n  line = 1;\n  while (fgets(buf, sizeof buf, f)) {\n    uintptr_t val;\n    len = (int)strlen(buf);\n    buf[len - 1] = '\\0';\n\n    val = *t.search(buf);\n    EXPECT_EQ(line, val) << \"Line: \" << line << \" Val: \" << val\n                         << \" Str: \" << buf;\n    line++;\n  }\n\n  // Check the minimum\n  auto l = t.minimum();\n  XLOGF(ERR, \"minimum is {}\", l->key);\n  EXPECT_TRUE(l && l->key == \"00026bda-e0ea-4cda-8245-522764e9f325\");\n\n  // Check the maximum\n  l = t.maximum();\n  XLOGF(ERR, \"maximum is {}\", l->key);\n  EXPECT_TRUE(l && l->key == \"ffffcb46-a92e-4822-82af-a7190f9c1ec5\");\n}\n"
  },
  {
    "path": "watchman/test/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_binary.bzl\", \"cpp_binary\")\nload(\"@fbcode_macros//build_defs:cpp_unittest.bzl\", \"cpp_unittest\")\n\noncall(\"scm_client_infra\")\n\ncpp_unittest(\n    name = \"art\",\n    srcs = [\n        \"ArtTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \"//folly/logging:logging\",\n        \"//folly/portability:gtest\",\n        \"//watchman/thirdparty/libart/src:art\",\n    ],\n)\n\ncpp_unittest(\n    name = \"ignore\",\n    srcs = [\n        \"IgnoreTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/logging:logging\",\n        \"//folly/portability:gtest\",\n        \"//folly/portability:sys_time\",\n        \"//watchman:ignore\",\n        \"//watchman:prelude\",\n    ],\n)\n\ncpp_unittest(\n    name = \"inmemoryview\",\n    srcs = [\"InMemoryViewTest.cpp\"],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/executors:manual_executor\",\n        \"//folly/portability:gtest\",\n        \"//watchman:inmemoryview\",\n        \"//watchman:query\",\n        \"//watchman:root\",\n        \"//watchman:view\",\n        \"//watchman:watcher\",\n        \"//watchman/fs:fd\",\n        \"//watchman/test/lib:lib\",\n    ],\n)\n\ncpp_unittest(\n    name = \"failstostart\",\n    srcs = [\"FailsToStartViewTest.cpp\"],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/executors:manual_executor\",\n        \"//folly/portability:gtest\",\n        \"//watchman:inmemoryview\",\n        \"//watchman:query\",\n        \"//watchman:root\",\n        \"//watchman:view\",\n        \"//watchman:watcher\",\n        \"//watchman/fs:fd\",\n        \"//watchman/test/lib:lib\",\n    ],\n)\n\ncpp_unittest(\n    name = \"json\",\n    srcs = [\"JsonTest.cpp\"],\n    supports_static_listing = False,\n    deps = [\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_unittest(\n    name = \"serde\",\n    srcs = [\"SerdeTest.cpp\"],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//watchman:serde\",\n    ],\n)\n\ncpp_binary(\n    name = \"json-bench\",\n    srcs = [\"JsonBenchmark.cpp\"],\n    deps = [\n        \"fbsource//third-party/benchmark:benchmark\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_unittest(\n    name = \"pendingcollection\",\n    srcs = [\n        \"PendingCollectionTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/logging:logging\",\n        \"//folly/portability:gtest\",\n        \"//watchman:logging\",\n        \"//watchman:pending\",\n    ],\n)\n\ncpp_unittest(\n    name = \"perfsample\",\n    srcs = [\n        \"PerfSampleTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly:scope_guard\",\n        \"//folly/portability:gtest\",\n        \"//watchman:perf_sample\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_unittest(\n    name = \"fsdetect\",\n    srcs = [\n        \"FSDetectTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//watchman/fs:fd\",\n    ],\n)\n\ncpp_unittest(\n    name = \"string\",\n    srcs = [\n        \"StringTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//watchman:string\",\n    ],\n)\n\ncpp_unittest(\n    name = \"log\",\n    srcs = [\"LogTest.cpp\"],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//watchman:logging\",\n    ],\n)\n\ncpp_unittest(\n    name = \"bser\",\n    srcs = [\n        \"BserTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \"//folly:scope_guard\",\n        \"//folly/logging:logging\",\n        \"//folly/portability:gtest\",\n        \"//folly/portability:sys_mman\",\n        \"//watchman:bser\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_unittest(\n    name = \"wildmatch\",\n    srcs = [\n        \"WildmatchTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly:string\",\n        \"//folly/portability:gtest\",\n        \"//watchman:prelude\",\n        \"//watchman/thirdparty/jansson:jansson\",\n        \"//watchman/thirdparty/wildmatch:wildmatch\",\n    ],\n)\n\ncpp_unittest(\n    name = \"childproc\",\n    srcs = [\n        \"ChildProcTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//folly/test:test_utils\",\n        \"//watchman:child_process\",\n    ],\n)\n\ncpp_unittest(\n    name = \"result\",\n    srcs = [\n        \"ResultTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//folly/test:test_utils\",\n        \"//watchman:result\",\n    ],\n)\n\ncpp_unittest(\n    name = \"ringbuffer\",\n    srcs = [\"RingBufferTest.cpp\"],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//watchman:util\",\n    ],\n)\n\ncpp_unittest(\n    name = \"cache\",\n    srcs = [\n        \"CacheTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/executors:manual_executor\",\n        \"//folly/init:init\",\n        \"//folly/portability:gtest\",\n        \"//watchman:util\",\n    ],\n)\n\ncpp_unittest(\n    name = \"maputil\",\n    srcs = [\n        \"MapUtilTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//watchman:string\",\n        \"//watchman:util\",\n    ],\n)\n\ncpp_unittest(\n    name = \"mercurial\",\n    srcs = [\n        \"MercurialTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//watchman:scm\",\n    ],\n)\n\ncpp_unittest(\n    name = \"localsavedstateinterface\",\n    srcs = [\n        \"LocalSavedStateInterfaceTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//folly/test:test_utils\",\n        \"//watchman:errors\",\n        \"//watchman/saved_state:saved_state\",\n        \"//watchman/test/lib:lib\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_unittest(\n    name = \"globupperbound\",\n    srcs = [\n        \"GlobUpperBoundTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gmock\",\n        \"//folly/portability:gtest\",\n        \"//folly/test:test_utils\",\n        \"//watchman:parse\",\n        \"//watchman:query\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_unittest(\n    name = \"returnonlyfiles\",\n    srcs = [\n        \"ReturnOnlyFilesTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gmock\",\n        \"//folly/portability:gtest\",\n        \"//folly/test:test_utils\",\n        \"//watchman:parse\",\n        \"//watchman:query\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_unittest(\n    name = \"suffixquery\",\n    srcs = [\n        \"SuffixQueryTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gmock\",\n        \"//folly/portability:gtest\",\n        \"//folly/test:test_utils\",\n        \"//watchman:parse\",\n        \"//watchman:query\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_unittest(\n    name = \"pathutils\",\n    srcs = [\n        \"PathUtilsTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly:exception\",\n        \"//folly:file_util\",\n        \"//folly:random\",\n        \"//folly/portability:gtest\",\n        \"//folly/portability:stdlib\",\n        \"//folly/portability:sys_types\",\n        \"//folly/portability:unistd\",\n        \"//folly/test:test_utils\",\n        \"//folly/testing:test_util\",\n        \"//watchman:pathutils\",\n    ],\n)\n\ncpp_unittest(\n    name = \"watcherselectiondarwin\",\n    srcs = [\n        \"WatcherSelectionDarwinTest.cpp\",\n    ],\n    supports_static_listing = False,\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//watchman:command_registry\",\n        \"//watchman:config\",\n        \"//watchman:config_h\",\n        \"//watchman:root\",\n        \"//watchman:watchmanlib\",\n        \"//watchman/test/lib:lib\",\n    ],\n)\n"
  },
  {
    "path": "watchman/test/BserTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/bser.h\"\n#include <fmt/core.h>\n#include <folly/ScopeGuard.h>\n#include <folly/logging/xlog.h>\n#include <folly/portability/GTest.h>\n#include \"watchman/thirdparty/jansson/jansson_private.h\"\n\n#ifdef _WIN32\n#include <windows.h>\n#else\n// TODO: The portability header is not desired here: it injects\n// symbols into the platform namespace and we don't want fake unix\n// semantics on Windows. But I don't know how to shut up the linter.\n#include <folly/portability/SysMman.h>\n#endif\n\n#define UTF8_PILE_OF_POO \"\\xf0\\x9f\\x92\\xa9\"\n\nnamespace {\n\n// Construct a std::string from a literal that may have embedded NUL bytes.\n// The -1 compensates for the NUL terminator that is included in sizeof()\ntemplate <size_t N>\nstd::string S(const char (&str)[N]) {\n  return std::string{str, str + N - 1};\n}\n\nint dump_to_string(const char* buffer, size_t size, void* data) {\n  auto str = (std::string*)data;\n  str->append(buffer, size);\n  return 0;\n}\n\nvoid hexdump(const char* start, const char* end) {\n  int i;\n  int maxbytes = 24;\n\n  while (start < end) {\n    ptrdiff_t limit = end - start;\n    if (limit > maxbytes) {\n      limit = maxbytes;\n    }\n    fmt::print(\"# \");\n    for (i = 0; i < limit; i++) {\n      fmt::print(\"{:02x}\", (int)(uint8_t)start[i]);\n    }\n    while (i <= maxbytes) {\n      fmt::print(\"  \");\n      i++;\n    }\n    fmt::print(\"   \");\n    for (i = 0; i < limit; i++) {\n      fmt::print(\"{}\", isprint((uint8_t)start[i]) ? start[i] : '.');\n    }\n    fmt::print(\"\\n\");\n    start += limit;\n  }\n}\n\nstd::unique_ptr<std::string>\nbdumps(uint32_t version, uint32_t capabilities, const json_ref& json) {\n  std::string buffer;\n  bser_ctx_t ctx{version, capabilities, dump_to_string};\n\n  if (w_bser_dump(&ctx, json, &buffer) == 0) {\n    return std::make_unique<std::string>(std::move(buffer));\n  }\n\n  return nullptr;\n}\n\nstd::unique_ptr<std::string>\nbdumps_pdu(uint32_t version, uint32_t capabilities, const json_ref& json) {\n  std::string buffer;\n\n  if (w_bser_write_pdu(version, capabilities, dump_to_string, json, &buffer) ==\n      0) {\n    return std::make_unique<std::string>(std::move(buffer));\n  }\n\n  return nullptr;\n}\n\nconst char* json_inputs[] = {\n    \"null\",\n    \"true\",\n    \"false\",\n    \"0\",\n    \"-100\",\n    \"\\\"hello\\\"\",\n    \"{\\\"bar\\\": true, \\\"foo\\\": 42}\",\n    \"[1, 2, 3]\",\n    \"[null, true, false, 65536]\",\n    \"[1.5, 2.0]\",\n    \"[{\\\"lemon\\\": 2.5}, null, 16000, true, false]\",\n    \"[1, 16000, 65536, 90000, 2147483648, 4294967295]\",\n};\n\nstruct {\n  const char* json_text;\n  const char* template_text;\n} template_tests[] = {\n    {\"[\"\n     \"{\\\"age\\\": 20, \\\"name\\\": \\\"fred\\\"}, \"\n     \"{\\\"age\\\": 30, \\\"name\\\": \\\"pete\\\"}, \"\n     \"{\\\"age\\\": 25}\"\n     \"]\",\n     \"[\\\"name\\\", \\\"age\\\"]\"},\n    {\"[{}, {}, {}, {}, {}]\", \"[]\"},\n};\n\nstruct {\n  const char* json_text;\n  std::string bserv1;\n  std::string bserv2;\n} serialization_tests[] = {\n    {\n        \"[\\\"Tom\\\", \\\"Jerry\\\"]\",\n        S(\"\\x00\\x01\\x03\\x11\\x00\\x03\\x02\\x02\\x03\\x03\\x54\\x6f\\x6d\\x02\\x03\\x05\\x4a\"\n          \"\\x65\\x72\\x72\\x79\"),\n        S(\"\\x00\\x02\\x00\\x00\\x00\\x00\\x03\\x11\\x00\\x03\\x02\\x02\\x03\\x03\\x54\\x6f\\x6d\"\n          \"\\x02\\x03\\x05\\x4a\\x65\\x72\\x72\\x79\"),\n    },\n    {\n        \"[1, 123, 12345, 1234567, 12345678912345678]\",\n        S(\"\\x00\\x01\\x03\\x18\\x00\\x03\\x05\\x03\\x01\\x03\\x7b\\x04\\x39\\x30\\x05\\x87\\xd6\"\n          \"\\x12\\x00\\x06\\x4e\\xd6\\x14\\x5e\\x54\\xdc\\x2b\\x00\"),\n        S(\"\\x00\\x02\\x00\\x00\\x00\\x00\\x03\\x18\\x00\\x03\\x05\\x03\\x01\\x03\\x7b\\x04\\x39\"\n          \"\\x30\\x05\\x87\\xd6\\x12\\x00\\x06\\x4e\\xd6\\x14\\x5e\\x54\\xdc\\x2b\\x00\"),\n    }};\n\nvoid check_roundtrip(\n    uint32_t bser_version,\n    uint32_t bser_capabilities,\n    const char* input,\n    const char* template_text) {\n  XLOGF(\n      ERR,\n      \"testing BSER version {}, capabilities {}\",\n      bser_version,\n      bser_capabilities);\n  std::optional<json_ref> templ;\n  json_error_t jerr;\n\n  auto expected = json_loads(input, JSON_DECODE_ANY, &jerr);\n  ASSERT_TRUE(expected) << \"loaded \" << input << \" \" << jerr.text;\n  if (template_text) {\n    templ = json_loads(template_text, 0, &jerr);\n    json_array_set_template_new(expected.value(), std::move(templ.value()));\n  }\n\n  auto dump_buf = bdumps(bser_version, bser_capabilities, expected.value());\n  ASSERT_NE(dump_buf, nullptr) << \"dumped something\";\n  const char* end = dump_buf->data() + dump_buf->size();\n  hexdump(dump_buf->data(), end);\n\n  auto decoded = bunser(dump_buf->data(), end);\n\n  auto jdump = json_dumps(decoded, JSON_ENCODE_ANY | JSON_SORT_KEYS);\n  EXPECT_TRUE(json_equal(expected.value(), decoded))\n      << \"round-tripped json_equal: \" << jdump;\n  EXPECT_EQ(jdump, input) << \"round-tripped\";\n}\n\nvoid check_serialization(\n    uint32_t bser_version,\n    uint32_t bser_capabilities,\n    const char* json_in,\n    const std::string& bser_out) {\n  XLOGF(\n      ERR,\n      \"testing BSER version {}, capabilities {}\",\n      bser_version,\n      bser_capabilities);\n\n  // Test JSON -> BSER serialization.\n  json_error_t jerr;\n  auto input = json_loads(json_in, 0, &jerr);\n  auto bser_in = bdumps_pdu(bser_version, bser_capabilities, input.value());\n  EXPECT_EQ(*bser_in, bser_out) << \"raw bser comparison \" << json_in;\n}\n\n// The strings are left as mixed escaped and unescaped bytes so that it's easy\n// to see how it's constructed.\n// The breaks in the middle of the string literals here are to prevent \"\\x05f\"\n// etc from being treated as a single character.\nconst std::string bser_typed_intro = S(\"\\x00\\x03\\x03\");\nconst std::string bser_typed_bytestring =\n    S(\"\\x02\\x03\\x05\"\n      \"foo\\xd0\\xff\");\n\nconst std::string bser_typed_utf8string_byte =\n    S(\"\\x02\\x03\\x07\"\n      \"bar\" UTF8_PILE_OF_POO);\nconst std::string bser_typed_utf8string_utf8 =\n    S(\"\\x0d\\x03\\x07\"\n      \"bar\" UTF8_PILE_OF_POO);\n\nconst std::string bser_typed_mixedstring_byte =\n    S(\"\\x02\\x03\\x0e\"\n      \"baz\\xb1\\xc1\\xe0\\x90\\x40\" UTF8_PILE_OF_POO \"\\xf4\\xff\");\nconst std::string bser_typed_mixedstring_utf8 =\n    S(\"\\x0d\\x03\\x0e\"\n      \"baz?????\" UTF8_PILE_OF_POO \"??\");\n\n// The tuples are (bser version, bser capabilities, expected BSER serialization)\nstd::vector<std::tuple<uint32_t, uint32_t, std::string>> typed_string_checks = {\n    std::make_tuple(\n        1,\n        0,\n        bser_typed_intro + bser_typed_bytestring + bser_typed_utf8string_byte +\n            bser_typed_mixedstring_byte),\n    std::make_tuple(\n        2,\n        0,\n        bser_typed_intro + bser_typed_bytestring + bser_typed_utf8string_utf8 +\n            bser_typed_mixedstring_utf8),\n    std::make_tuple(\n        2,\n        BSER_CAP_DISABLE_UNICODE,\n        bser_typed_intro + bser_typed_bytestring + bser_typed_utf8string_byte +\n            bser_typed_mixedstring_byte),\n    std::make_tuple(\n        2,\n        BSER_CAP_DISABLE_UNICODE_FOR_ERRORS,\n        bser_typed_intro + bser_typed_bytestring + bser_typed_utf8string_utf8 +\n            bser_typed_mixedstring_byte),\n\n    std::make_tuple(\n        2,\n        BSER_CAP_DISABLE_UNICODE | BSER_CAP_DISABLE_UNICODE_FOR_ERRORS,\n        bser_typed_intro + bser_typed_bytestring + bser_typed_utf8string_byte +\n            bser_typed_mixedstring_byte)};\n\nvoid check_bser_typed_strings() {\n  auto bytestring = typed_string_to_json(\"foo\\xd0\\xff\", W_STRING_BYTE);\n  auto utf8string =\n      typed_string_to_json(\"bar\" UTF8_PILE_OF_POO, W_STRING_UNICODE);\n  // This consists of\n  // - ASCII (valid)\n  // - bare continuation byte 0xB1 (invalid)\n  // - overlong encoding of an ASCII byte 0xC1 (invalid)\n  // - 3 byte sequence with valid start (0xE0 0x90) but an invalid byte (0x40)\n  // - 4 byte sequence (valid)\n  // - 4 byte sequence (0xF4) past the end of the string (invalid)\n  auto mixedstring = typed_string_to_json(\n      \"baz\\xb1\\xc1\\xe0\\x90\\x40\" UTF8_PILE_OF_POO \"\\xf4\\xff\", W_STRING_MIXED);\n\n  auto str_array = json_array({bytestring, utf8string, mixedstring});\n\n  // check that this gets serialized correctly\n  for (const auto& t : typed_string_checks) {\n    uint32_t bser_version = std::get<0>(t);\n    uint32_t bser_capabilities = std::get<1>(t);\n    const std::string& bser_out = std::get<2>(t);\n    XLOGF(\n        ERR,\n        \"testing BSER version {}, capabilities {}\",\n        bser_version,\n        bser_capabilities);\n\n    auto bser_buf = bdumps(bser_version, bser_capabilities, str_array);\n    EXPECT_EQ(*bser_buf, bser_out);\n  }\n}\n\nTEST(Bser, bser_tests) {\n  int num_templ = sizeof(template_tests) / sizeof(template_tests[0]);\n  int num_serial = sizeof(serialization_tests) / sizeof(serialization_tests[0]);\n\n  for (auto& json_input : json_inputs) {\n    fmt::print(\"json_input = {}\\n\", json_input);\n    check_roundtrip(1, 0, json_input, nullptr);\n    check_roundtrip(2, 0, json_input, nullptr);\n    check_roundtrip(2, BSER_CAP_DISABLE_UNICODE, json_input, nullptr);\n    check_roundtrip(\n        2, BSER_CAP_DISABLE_UNICODE_FOR_ERRORS, json_input, nullptr);\n    check_roundtrip(\n        2,\n        BSER_CAP_DISABLE_UNICODE | BSER_CAP_DISABLE_UNICODE_FOR_ERRORS,\n        json_input,\n        nullptr);\n  }\n\n  for (int i = 0; i < num_templ; i++) {\n    check_roundtrip(\n        1, 0, template_tests[i].json_text, template_tests[i].template_text);\n    check_roundtrip(\n        2, 0, template_tests[i].json_text, template_tests[i].template_text);\n    check_roundtrip(\n        2,\n        BSER_CAP_DISABLE_UNICODE,\n        template_tests[i].json_text,\n        template_tests[i].template_text);\n    check_roundtrip(\n        2,\n        BSER_CAP_DISABLE_UNICODE_FOR_ERRORS,\n        template_tests[i].json_text,\n        template_tests[i].template_text);\n    check_roundtrip(\n        2,\n        BSER_CAP_DISABLE_UNICODE | BSER_CAP_DISABLE_UNICODE_FOR_ERRORS,\n        template_tests[i].json_text,\n        template_tests[i].template_text);\n  }\n\n  for (int i = 0; i < num_serial; i++) {\n    check_serialization(\n        1, 0, serialization_tests[i].json_text, serialization_tests[i].bserv1);\n    check_serialization(\n        2, 0, serialization_tests[i].json_text, serialization_tests[i].bserv2);\n  }\n\n  check_bser_typed_strings();\n}\n\nTEST(Bser, bunser_int_returns_needed) {\n  size_t needed;\n\n  // Work around a bug in googletest 1.11 (Ubuntu 22.04) on gcc 11.2.\n  // https://github.com/google/googletest/issues/3384\n  auto nullopt = std::optional<json_int_t>{};\n\n  EXPECT_EQ(nullopt, bunser_int(nullptr, 0, &needed));\n  EXPECT_EQ(1, needed);\n  EXPECT_EQ(nullopt, bunser_int(\"\\x03\", 1, &needed));\n  EXPECT_EQ(2, needed);\n  EXPECT_EQ(nullopt, bunser_int(\"\\x04\", 1, &needed));\n  EXPECT_EQ(3, needed);\n  EXPECT_EQ(nullopt, bunser_int(\"\\x05\", 1, &needed));\n  EXPECT_EQ(5, needed);\n  EXPECT_EQ(nullopt, bunser_int(\"\\x06\", 1, &needed));\n  EXPECT_EQ(9, needed);\n\n  EXPECT_EQ(nullopt, bunser_int(\"\\x00\", 1, &needed));\n  EXPECT_EQ(kDecodeIntFailed, needed);\n}\n\n// NOTE: The returned pointer may not be aligned.\nusing Alloc = std::unique_ptr<char[], std::function<void(void*)>>;\n\nAlloc normal_malloc(size_t size) {\n  void* p = malloc(size);\n  if (!p) {\n    throw std::bad_alloc{};\n  }\n\n  return {reinterpret_cast<char*>(p), &free};\n}\n\n#ifdef _WIN32\n\nsize_t get_page_size() {\n  SYSTEM_INFO si{};\n  GetSystemInfo(&si);\n  return si.dwAllocationGranularity;\n}\n\nstd::tuple<void*, size_t> allocate_pages(size_t size) {\n  static size_t page_size = get_page_size();\n  size_t actual_size = (size + (page_size - 1)) / page_size * page_size;\n\n  // TODO: We should explicitly allocate guard pages at either side.\n  void* p = VirtualAlloc(nullptr, actual_size, MEM_COMMIT, PAGE_READWRITE);\n  if (!p) {\n    throw std::bad_alloc{};\n  }\n\n  return {p, actual_size};\n}\n\nvoid deallocate_pages(void* p, size_t actual_size) {\n  VirtualFree(p, actual_size, MEM_RELEASE);\n}\n\n#else\n\nstd::tuple<void*, size_t> allocate_pages(size_t size) {\n  static size_t page_size = sysconf(_SC_PAGE_SIZE);\n  size_t actual_size = (size + (page_size - 1)) / page_size * page_size;\n\n  // TODO: We should explicitly allocate guard pages at either side.\n  // But, so far, ASAN does a pretty good job of catching overflows.\n  void* p = mmap(\n      nullptr,\n      actual_size,\n      PROT_READ | PROT_WRITE,\n      MAP_PRIVATE | MAP_ANONYMOUS,\n      -1,\n      0);\n  if (p == MAP_FAILED) {\n    perror(\"mmap failed\");\n    throw std::bad_alloc{};\n  }\n  return {p, actual_size};\n}\n\nvoid deallocate_pages(void* p, size_t actual_size) {\n  munmap(p, actual_size);\n}\n\n#endif\n\nAlloc page_head(size_t size) {\n  auto [p, actual_size] = allocate_pages(size);\n  return {\n      reinterpret_cast<char*>(p), [p = p, actual_size = actual_size](void*) {\n        deallocate_pages(p, actual_size);\n      }};\n}\n\nAlloc page_tail(size_t size) {\n  auto [p, actual_size] = allocate_pages(size);\n  return {\n      reinterpret_cast<char*>(p) + (actual_size - size),\n      [p = p, actual_size = actual_size](void*) {\n        deallocate_pages(p, actual_size);\n      }};\n}\n\nusing AllocFn = Alloc (*)(size_t);\n\n// In local testing, I observed ASAN occasionally missing an overflow. To\n// provide an additional chance of catching them, allocate the test data at the\n// head and at the tail of a page.\nconstexpr AllocFn allAllocators[] = {\n    page_tail,\n    page_head,\n    normal_malloc,\n};\n\n// Work around the fact that std::string_view{\"\\0\"} has size() of 0.\ntemplate <size_t N>\nstd::string_view literal(const char (&p)[N]) {\n  static_assert(N > 0);\n  return std::string_view{p, N - 1};\n}\n\nTEST(Bser, fuzz_examples) {\n  std::string_view corpus[] = {\n      literal(\"\\x08\"),\n      literal(\"\\x00\"),\n      literal(\"\\x00\\x00\"),\n      literal(\"\\x02\"),\n      literal(\"\\x0b\"),\n      literal(\"\\x01\\x04\\x2f\\x01\"),\n      literal(\"\\x07\\xb3\\xb3\\x40\\x3a\\xb3\\xb3\\xb3\"),\n      literal(\"\\x0b\\x00\\x04\\x02\\x00\\x04\\x02\\x41\\x08\\x05\\x02\\xff\\x01\\x00\"),\n      literal(\"\\x0b\\x00\\x03\\x01\\x04\\x03\\x00\\x03\\x01\\x04\\x03\\x00\"),\n      literal(\n          \"\\x04\\x00\\xd2\\x06\\xd2\\x04\\xff\\xff\\xff\\xff\\x04\\x00\"\n          \"\\xd2\\x06\\xd2\\x04\\xff\\xff\\xff\\xff\\xff\\xff\\xff\"),\n      literal(\"\\x0b\\x00\\x03\\xee\\x06\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\"),\n      literal(\"\\x00\\x06\\x7f\\xff\\xff\\xff\\xff\\xff\\xff\\xff\"),\n      literal(\"\\x00\\x06\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\"),\n      literal(\"\\x02\\x03\\xf4\"),\n      literal(\"\\x07\\x00\\xff\\xff\\x0a\\x00\\xff\\xff\\xff\"),\n      literal(\"\\x02\\x06\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\"),\n      literal(\n          \"\\x00\\x05\\xc6\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\xee\\x04\\x05\\x05\"\n          \"\\x05\\x05\\x05\\x01\\x05\\x04\\xf6\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\"\n          \"\\x05\\x05\\x05\\x05\\x05\\x05\\x0b\\x00\\x03\\x00\\x05\\x05\\x05\\x05\\x05\\x05\"\n          \"\\x05\\x05\\x05\\x19\\x05\\x05\\x05\\x05\\x01\\x05\\x05\\x05\\x05\\x05\\x05\\x05\"\n          \"\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\xe6\\x05\\x05\\x05\"\n          \"\\x05\\x05\\x05\\x01\\x05\\x04\\xf6\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\"\n          \"\\x05\\x05\\x05\\x05\\x05\\x05\\x0b\\x00\\x03\\x00\\x05\\x05\\x05\\x05\\x05\\x05\"\n          \"\\x05\\x05\\x05\\x19\\x05\\x05\\x05\\x05\\x01\\x05\\x05\\x05\\x05\\x05\\x05\\x05\"\n          \"\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\xe6\\x05\\x05\\x05\"\n          \"\\x05\\x05\\x05\\x05\\x05\\x05\\x21\\x05\\x05\\x05\\x05\\x05\\x05\\x05\\x21\\x05\"\n          \"\\x05\\x05\\x05\\x05\"),\n  };\n  for (std::string_view input : corpus) {\n    for (auto allocator : allAllocators) {\n      CHECK_NE(0, input.size());\n\n      // Make a non-null-terminated, heap-allocated input. This helps ASAN catch\n      // any overflows.\n      auto data = allocator(input.size());\n      memcpy(data.get(), input.data(), input.size());\n\n      try {\n        bunser(data.get(), data.get() + input.size());\n      } catch (const BserParseError&) {\n      }\n    }\n  }\n}\n\nTEST(Bser, detect_array_stack_overflow) {\n  const std::string_view rec{\"\\x00\\x03\\x01\", 3};\n  const size_t N = 1000;\n  std::string str;\n  str.reserve(N * rec.size());\n  for (size_t i = 0; i < N; ++i) {\n    str += rec;\n  }\n  EXPECT_THROW((bunser(str.data(), str.data() + str.size())), BserParseTooDeep);\n}\n\n} // namespace\n"
  },
  {
    "path": "watchman/test/CacheTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/executors/ManualExecutor.h>\n#include <folly/init/Init.h>\n#include <folly/portability/GTest.h>\n#include <deque>\n#include <stdexcept>\n#include <string>\n#include \"watchman/LRUCache.h\"\n\nusing namespace watchman;\n\nstatic constexpr const std::chrono::milliseconds kErrorTTL(1000);\n\nnamespace watchman::lrucache {\ntemplate <typename... A>\n[[maybe_unused]] static std::ostream& operator<<(\n    std::ostream& out,\n    Node<A...> const& node) {\n  return out << (const void*)&node;\n}\n} // namespace watchman::lrucache\n\nTEST(CacheTest, basics) {\n  LRUCache<std::string, bool> cache(5, kErrorTTL);\n\n  EXPECT_EQ(cache.size(), 0) << \"initially empty\";\n  EXPECT_EQ(cache.get(\"foo\"), nullptr) << \"nullptr for non-existent item\";\n\n  EXPECT_TRUE(cache.set(\"foo\", true)->value()) << \"inserted true\";\n  EXPECT_EQ(cache.size(), 1) << \"size is now one\";\n  EXPECT_TRUE(cache.get(\"foo\")->value()) << \"looked up item\";\n\n  EXPECT_FALSE(cache.set(\"foo\", false)->value()) << \"replaced true with false\";\n  EXPECT_FALSE(cache.get(\"foo\")->value()) << \"looked up new false item\";\n  EXPECT_EQ(cache.size(), 1) << \"replacement didn't change size\";\n\n  EXPECT_FALSE(cache.erase(\"foo\")->value()) << \"erased and returned false foo\";\n  EXPECT_EQ(cache.erase(\"foo\"), nullptr)\n      << \"double erase doesn't return anything\";\n  EXPECT_EQ(cache.get(\"foo\"), nullptr) << \"nullptr for non-existent item\";\n\n  for (size_t i = 0; i < 6; ++i) {\n    EXPECT_NE(cache.set(std::to_string(i), true), nullptr) << \"inserted\";\n  }\n\n  EXPECT_EQ(cache.size(), 5)\n      << \"limited to 5 items, despite inserting 6 total. size=\" << cache.size();\n\n  EXPECT_EQ(cache.get(\"0\"), nullptr) << \"we expect 0 to have been evicted\";\n  for (size_t i = 1; i < 6; ++i) {\n    EXPECT_TRUE(cache.get(std::to_string(i))) << \"found later node \" << i;\n  }\n\n  EXPECT_TRUE(cache.set(\"bar\", true)) << \"added new item\";\n  EXPECT_EQ(cache.get(\"1\"), nullptr) << \"we expect 1 to be evicted\";\n  EXPECT_TRUE(cache.get(\"2\")) << \"2 should be there, and we just touched it\";\n  EXPECT_TRUE(cache.set(\"baz\", true)) << \"added new item\";\n  EXPECT_EQ(cache.size(), 5) << \"max size still respected\";\n  EXPECT_TRUE(cache.get(\"2\")) << \"2 should still be there; not evicted\";\n  EXPECT_EQ(cache.get(\"3\"), nullptr) << \"we expect 3 to be evicted\";\n\n  cache.clear();\n  EXPECT_EQ(cache.size(), 0) << \"cleared out and have zero items\";\n}\n\nTEST(CacheTest, future) {\n  using Cache = LRUCache<int, int>;\n  using Node = typename Cache::NodeType;\n  Cache cache(5, kErrorTTL);\n  folly::ManualExecutor exec;\n\n  auto now = std::chrono::steady_clock::now();\n\n  auto okGetter = [&exec](int k) {\n    return folly::makeFuture(k).via(&exec).thenTry(\n        [](folly::Try<int>&& key) { return (1 + key.value()) * 2; });\n  };\n\n  auto failGetter = [&exec](int k) {\n    return folly::makeFuture(k).via(&exec).thenTry(\n        [](folly::Try<int>&&) -> int { throw std::runtime_error(\"bleet\"); });\n  };\n\n  auto inlineFailGetter = [](int) -> folly::Future<int> {\n    throw std::runtime_error(\"bleet\");\n  };\n\n  // Queue up a get via a getter that will succeed\n  auto f = cache.get(0, okGetter, now);\n  EXPECT_FALSE(f.isReady()) << \"future didn't finish yet\";\n\n  EXPECT_THROW(cache.get(0), std::runtime_error);\n\n  // Queue up a second get using the same getter\n  auto f2 = cache.get(0, okGetter, now);\n  EXPECT_FALSE(f2.isReady()) << \"also not ready\";\n\n  exec.drain();\n\n  EXPECT_TRUE(f.isReady()) << \"first is ready\";\n  EXPECT_TRUE(f2.isReady()) << \"second is ready\";\n\n  EXPECT_EQ(f.value()->value(), 2) << \"got correct value for first\";\n  EXPECT_EQ(f.value()->value(), f2.value()->value())\n      << \"got same value for second\";\n\n  // Now to saturate the cache with failed lookups\n\n  cache.clear();\n  std::vector<folly::Future<std::shared_ptr<const Node>>> futures;\n  for (size_t i = 1; i < 7; ++i) {\n    if (i % 2 == 0) {\n      futures.emplace_back(\n          cache.get(i, failGetter, now + std::chrono::milliseconds(i)));\n    } else {\n      futures.emplace_back(\n          cache.get(i, inlineFailGetter, now + std::chrono::milliseconds(i)));\n    }\n  }\n\n  auto drained = exec.drain();\n  // 3 keys will not need executors because they'll fail inline immediately.\n  EXPECT_EQ(drained, 4) << \"should be 4 things pending, but have \" << drained;\n\n  // Let them make progress\n  exec.drain();\n\n  EXPECT_EQ(cache.size(), 5)\n      << \"cache should be full, but has \" << cache.size();\n\n  folly::collectAll(futures.begin(), futures.end())\n      .defer(\n          [](folly::Try<std::vector<folly::Try<std::shared_ptr<const Node>>>>&&\n                 result) {\n            for (auto& r : result.value()) {\n              EXPECT_TRUE(r.value()->result().hasException())\n                  << \"should be an error node\";\n            }\n          })\n      .wait();\n\n  EXPECT_EQ(cache.size(), 5)\n      << \"cache should still be full (no excess) but has \" << cache.size();\n\n  EXPECT_EQ(cache.get(42, now), nullptr) << \"we don't have 42 yet\";\n\n  // Now if we \"sleep\" for long enough, we should be able to evict\n  // the error nodes and allow the insert to happen.\n  EXPECT_EQ(cache.get(42, now), nullptr) << \"we don't have 42 yet\";\n  EXPECT_TRUE(cache.set(42, 42, now + kErrorTTL + std::chrono::milliseconds(1)))\n      << \"inserted\";\n  EXPECT_NE(cache.get(42, now), nullptr) << \"we found 42 in the cache\";\n  EXPECT_EQ(cache.size(), 5)\n      << \"cache should still be full (no excess) but has \" << cache.size();\n}\n\nint main(int argc, char* argv[]) {\n  testing::InitGoogleTest(&argc, argv);\n  const folly::Init init(&argc, &argv);\n  return RUN_ALL_TESTS();\n}\n"
  },
  {
    "path": "watchman/test/ChildProcTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/portability/GTest.h>\n#include <folly/test/TestUtils.h>\n#include <list>\n#include \"watchman/ChildProcess.h\"\n\nusing watchman::ChildProcess;\nusing Options = ChildProcess::Options;\n\nTEST(ChildProcess, pipe) {\n  Options opts;\n  opts.pipeStdout();\n  ChildProcess echo(\n      {\n#ifdef _WIN32\n          \"cmd /c echo hello\",\n#else\n          \"echo\",\n          \"hello\",\n#endif\n      },\n      std::move(opts));\n\n  auto outputs = echo.communicate();\n  EXPECT_EQ(0, echo.wait())\n      << \"\\nstdout:\\n\"\n      << outputs.first.value() << \"\\nstderr:\" << outputs.second.value() << \"\\n\";\n\n  w_string_piece line(outputs.first.value());\n  EXPECT_TRUE(line.startsWith(\"hello\"))\n      << \"\\nstdout:\\n\"\n      << outputs.first.value() << \"\\nstderr:\" << outputs.second.value() << \"\\n\";\n}\n\nvoid test_pipe_input(bool threaded) {\n#ifndef _WIN32\n  Options opts;\n  opts.pipeStdout();\n  opts.pipeStdin();\n  ChildProcess cat({\"cat\", \"-\"}, std::move(opts));\n\n  std::vector<std::string> expected{\"one\", \"two\", \"three\"};\n  std::list<std::string> lines{\"one\\n\", \"two\\n\", \"three\\n\"};\n\n  auto writable = [&lines](watchman::FileDescriptor& fd) {\n    if (lines.empty()) {\n      return true;\n    }\n    auto str = lines.front();\n    if (write(fd.fd(), str.data(), str.size()) == -1) {\n      throw std::runtime_error(\"write to child failed\");\n    }\n    lines.pop_front();\n    return false;\n  };\n\n  auto outputs =\n      threaded ? cat.threadedCommunicate(writable) : cat.communicate(writable);\n  cat.wait();\n\n  std::vector<std::string> resultLines;\n  w_string_piece(outputs.first.value()).split(resultLines, '\\n');\n  EXPECT_EQ(resultLines.size(), 3);\n  EXPECT_EQ(resultLines, expected);\n#else\n  (void)threaded;\n#endif\n}\n\nTEST(ChildProcess, stresstest_pipe_output) {\n  SKIP_IF(folly::kIsWindows);\n\n  bool okay = true;\n  for (int i = 0; i < 3000; ++i) {\n    Options opts;\n    opts.pipeStdout();\n    ChildProcess proc({\"head\", \"-n20\", \"/dev/urandom\"}, std::move(opts));\n    auto outputs = proc.communicate();\n    w_string_piece out(outputs.first.value());\n    proc.wait();\n    if (out.empty() || out[out.size() - 1] != '\\n') {\n      okay = false;\n      break;\n    }\n  }\n  EXPECT_TRUE(okay);\n}\n\nTEST(ChildProcess, inputThreaded) {\n  test_pipe_input(true);\n}\n\nTEST(ChildProcess, inputNotThreaded) {\n  test_pipe_input(false);\n}\n"
  },
  {
    "path": "watchman/test/FSDetectTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/fs/FSDetect.h\"\n#include <folly/portability/GTest.h>\n#include <string>\n\nTEST(FSType, fstype) {\n  auto mount_data =\n      \"sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=58706680k,nr_inodes=14676670,mode=755 0 0\\n\"\n      \"securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0\\n\"\n      \"devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0\\n\"\n      \"tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0\\n\"\n      \"cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0\\n\"\n      \"pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"bpf /sys/fs/bpf bpf rw,relatime,mode=700 0 0\\n\"\n      \"configfs /sys/kernel/config configfs rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"/dev/vda3 / btrfs rw,seclabel,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/ 0 0\\n\"\n      \"/dev/vda1 /boot ext3 rw,seclabel,relatime 0 0\\n\"\n      \"/etc/auto.home /home autofs rw,relatime,fd=40,pgrp=2446760,timeout=600,minproto=5,maxproto=5,indirect 0 0\\n\"\n      \"tmpfs /run/user/5537 tmpfs rw,seclabel,nosuid,nodev,relatime,size=11743612k,mode=700,uid=5537,gid=100 0 0\\n\"\n      \"/dev/vda3 /home/wez btrfs rw,seclabel,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/data/users/wez/dotsync-home 0 0\\n\"\n      \"edenfs /data/users/wez/fbsource fuse rw,nosuid,relatime,user_id=5537,group_id=100,default_permissions,allow_other 0 0\\n\"\n      \"squashfuse_ll /mnt/xarfuse/uid-5537/326c1234-ns-4026531840 fuse.squashfuse_ll rw,nosuid,nodev,relatime,user_id=5537,group_id=100 0 0\\n\"\n      \"/dev/vda3 /data/users/wez/fbsource/buck-out btrfs rw,seclabel,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/data/users/wez/scratch/dataZusersZwezZovrsource/edenfsZredirectionsZbuck-out 0 0\\n\";\n\n  EXPECT_EQ(\n      std::nullopt, find_fstype_in_linux_proc_mounts(\"bleet\", mount_data));\n  EXPECT_EQ(\n      w_string(\"btrfs\"), find_fstype_in_linux_proc_mounts(\"/\", mount_data));\n  EXPECT_EQ(\n      w_string(\"btrfs\"),\n      find_fstype_in_linux_proc_mounts(\"/foo/bar\", mount_data));\n  EXPECT_EQ(\n      w_string(\"edenfs\"),\n      find_fstype_in_linux_proc_mounts(\"/data/users/wez/fbsource\", mount_data));\n  EXPECT_EQ(\n      w_string(\"edenfs\"),\n      find_fstype_in_linux_proc_mounts(\n          \"/data/users/wez/fbsource/something\", mount_data));\n  EXPECT_EQ(\n      w_string(\"btrfs\"),\n      find_fstype_in_linux_proc_mounts(\n          \"/data/users/wez/fbsourcenoslash\", mount_data));\n  EXPECT_EQ(\n      w_string(\"fuse.squashfuse_ll\"),\n      find_fstype_in_linux_proc_mounts(\n          \"/mnt/xarfuse/uid-5537/326c1234-ns-4026531840\", mount_data));\n  EXPECT_EQ(\n      w_string(\"fuse.squashfuse_ll\"),\n      find_fstype_in_linux_proc_mounts(\n          \"/mnt/xarfuse/uid-5537/326c1234-ns-4026531840/\", mount_data));\n}\n\nTEST(FSType, fstype_two_entries) {\n  auto mount_data =\n      \"sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=58706680k,nr_inodes=14676670,mode=755 0 0\\n\"\n      \"securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0\\n\"\n      \"devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0\\n\"\n      \"tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0\\n\"\n      \"cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0\\n\"\n      \"pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"bpf /sys/fs/bpf bpf rw,relatime,mode=700 0 0\\n\"\n      \"configfs /sys/kernel/config configfs rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"/dev/vda3 / btrfs rw,seclabel,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/ 0 0\\n\"\n      \"/dev/vda1 /boot ext3 rw,seclabel,relatime 0 0\\n\"\n      \"/etc/auto.home /home autofs rw,relatime,fd=40,pgrp=2446760,timeout=600,minproto=5,maxproto=5,indirect 0 0\\n\"\n      \"tmpfs /run/user/5537 tmpfs rw,seclabel,nosuid,nodev,relatime,size=11743612k,mode=700,uid=5537,gid=100 0 0\\n\"\n      \"/dev/vda3 /home/wez btrfs rw,seclabel,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/data/users/wez/dotsync-home 0 0\\n\"\n      \"/dev/vda3 /data/users/wez/fbsource btrfs rw,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/data/users/wez/scratch/fbsource 0 0\\n\"\n      \"edenfs /data/users/wez/fbsource fuse rw,nosuid,relatime,user_id=5537,group_id=100,default_permissions,allow_other 0 0\\n\"\n      \"squashfuse_ll /mnt/xarfuse/uid-5537/326c1234-ns-4026531840 fuse.squashfuse_ll rw,nosuid,nodev,relatime,user_id=5537,group_id=100 0 0\\n\"\n      \"/dev/vda3 /data/users/wez/fbsource/buck-out btrfs rw,seclabel,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/data/users/wez/scratch/dataZusersZwezZovrsource/edenfsZredirectionsZbuck-out 0 0\\n\";\n\n  // in some systems there are bind mounts under the eden fbsource mount for\n  // reasons. We want the mount that was added last, which will be the current\n  // mount that the user is interacting with to be the mount we detect.\n  EXPECT_EQ(\n      w_string(\"edenfs\"),\n      find_fstype_in_linux_proc_mounts(\"/data/users/wez/fbsource\", mount_data));\n  EXPECT_EQ(\n      w_string(\"edenfs\"),\n      find_fstype_in_linux_proc_mounts(\n          \"/data/users/wez/fbsource/something\", mount_data));\n  EXPECT_EQ(\n      w_string(\"btrfs\"),\n      find_fstype_in_linux_proc_mounts(\n          \"/data/users/wez/fbsourcenoslash\", mount_data));\n\n  auto mount_data_btrfs =\n      \"sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=58706680k,nr_inodes=14676670,mode=755 0 0\\n\"\n      \"securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0\\n\"\n      \"devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0\\n\"\n      \"tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0\\n\"\n      \"cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0\\n\"\n      \"pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"bpf /sys/fs/bpf bpf rw,relatime,mode=700 0 0\\n\"\n      \"configfs /sys/kernel/config configfs rw,nosuid,nodev,noexec,relatime 0 0\\n\"\n      \"/dev/vda3 / btrfs rw,seclabel,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/ 0 0\\n\"\n      \"/dev/vda1 /boot ext3 rw,seclabel,relatime 0 0\\n\"\n      \"/etc/auto.home /home autofs rw,relatime,fd=40,pgrp=2446760,timeout=600,minproto=5,maxproto=5,indirect 0 0\\n\"\n      \"tmpfs /run/user/5537 tmpfs rw,seclabel,nosuid,nodev,relatime,size=11743612k,mode=700,uid=5537,gid=100 0 0\\n\"\n      \"/dev/vda3 /home/wez btrfs rw,seclabel,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/data/users/wez/dotsync-home 0 0\\n\"\n      \"edenfs /data/users/wez/fbsource fuse rw,nosuid,relatime,user_id=5537,group_id=100,default_permissions,allow_other 0 0\\n\"\n      \"/dev/vda3 /data/users/wez/fbsource btrfs rw,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/data/users/wez/scratch/fbsource 0 0\\n\"\n      \"squashfuse_ll /mnt/xarfuse/uid-5537/326c1234-ns-4026531840 fuse.squashfuse_ll rw,nosuid,nodev,relatime,user_id=5537,group_id=100 0 0\\n\"\n      \"/dev/vda3 /data/users/wez/fbsource/buck-out btrfs rw,seclabel,relatime,compress-force=zstd:3,discard,space_cache,subvolid=5,subvol=/data/users/wez/scratch/dataZusersZwezZovrsource/edenfsZredirectionsZbuck-out 0 0\\n\";\n\n  EXPECT_EQ(\n      w_string(\"btrfs\"),\n      find_fstype_in_linux_proc_mounts(\n          \"/data/users/wez/fbsource\", mount_data_btrfs));\n  EXPECT_EQ(\n      w_string(\"btrfs\"),\n      find_fstype_in_linux_proc_mounts(\n          \"/data/users/wez/fbsource/something\", mount_data_btrfs));\n  EXPECT_EQ(\n      w_string(\"btrfs\"),\n      find_fstype_in_linux_proc_mounts(\n          \"/data/users/wez/fbsourcenoslash\", mount_data_btrfs));\n}\n"
  },
  {
    "path": "watchman/test/FailsToStartViewTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/executors/ManualExecutor.h>\n#include <folly/portability/GTest.h>\n#include <chrono>\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/fs/FSDetect.h\"\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/test/lib/FakeFileSystem.h\"\n#include \"watchman/test/lib/FakeWatcher.h\"\n#include \"watchman/watcher/Watcher.h\"\n#include \"watchman/watchman_file.h\"\n\nnamespace {\n\nusing namespace watchman;\nusing namespace std::literals::chrono_literals;\nusing namespace ::testing;\n\nConfiguration getConfiguration() {\n  json_ref json = json_object();\n  json_object_set(json, \"enable_parallel_crawl\", json_boolean(true));\n  json_object_set(json, \"inject_block_in_io_thread_start\", json_boolean(true));\n  return Configuration{std::move(json)};\n}\n\nclass FailsToStartViewTest : public Test {\n public:\n  using Continue = InMemoryView::Continue;\n\n  const w_string root_path{FAKEFS_ROOT \"root\"};\n\n  FakeFileSystem fs;\n  Configuration config = getConfiguration();\n  std::shared_ptr<FakeWatcher> watcher =\n      std::make_shared<FakeWatcher>(fs, true);\n\n  std::shared_ptr<InMemoryView> view =\n      std::make_shared<InMemoryView>(fs, root_path, config, watcher);\n  PendingCollection& pending = view->unsafeAccessPendingFromWatcher();\n\n  FailsToStartViewTest() {\n    pending.lock()->ping();\n  }\n};\n\nTEST_F(FailsToStartViewTest, can_start) {\n  fs.defineContents({\n      FAKEFS_ROOT \"root\",\n  });\n\n  auto root = std::make_shared<Root>(\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {});\n\n  root->view()->startThreads(root);\n  ASSERT_THROW(\n      root->view()->waitUntilReadyToQuery().get(5000ms), std::runtime_error);\n}\n\n} // namespace\n"
  },
  {
    "path": "watchman/test/GlobUpperBoundTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/portability/GMock.h>\n#include <folly/portability/GTest.h>\n#include <folly/test/TestUtils.h>\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nusing namespace watchman;\nusing namespace testing;\n\nnamespace {\nstd::optional<std::vector<std::string>> expr_to_upper_bound(\n    std::string expression_json,\n    CaseSensitivity caseSensitivity) {\n  json_error_t err{};\n  auto expression = json_loads(expression_json.c_str(), JSON_DECODE_ANY, &err);\n  if (!expression.has_value()) {\n    ADD_FAILURE() << \"JSON parse error in fixture: \" << err.text << \" at \"\n                  << err.source << \":\" << err.line << \":\" << err.column;\n    return std::nullopt;\n  }\n  Query query;\n  // Disable automatic parsing of \"match\" as \"imatch\", \"name\" as \"iname\", etc.\n  query.case_sensitive = CaseSensitivity::CaseSensitive;\n  auto expr = watchman::parseQueryExpr(&query, *expression);\n  return expr->computeGlobUpperBound(caseSensitivity);\n}\n\nclass CaseInvariantGlobUpperBoundTest\n    : public testing::TestWithParam<CaseSensitivity> {\n protected:\n  CaseSensitivity caseSensitivity_ = GetParam();\n};\n} // namespace\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_false) {\n  // \"false\" is bounded by an empty set of globs\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"false\"] )\", caseSensitivity_),\n      Optional(IsEmpty()));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_true) {\n  // \"true\" is unbounded\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"true\"] )\", caseSensitivity_), Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_since) {\n  // \"since\" is unbounded\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"since\", \"c:0:0\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_exists) {\n  // \"exists\" is unbounded\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"exists\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_empty) {\n  // \"empty\" is unbounded\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"empty\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_size) {\n  // \"size\" is unbounded\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"size\", \"eq\", 1024] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_suffix) {\n  // \"suffix\" is unbounded\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"suffix\", \"foo\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_type) {\n  // \"type\" is unbounded\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"type\", \"f\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_name_basename) {\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"name\", \"Foo\", \"basename\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"iname\", \"Foo\", \"basename\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST(GlobUpperBoundTest, term_name_wholename) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", \"Foo\", \"wholename\"] )\", CaseSensitivity::CaseSensitive),\n      Optional(UnorderedElementsAre(\"Foo\")));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", \"Foo\", \"wholename\"] )\", CaseSensitivity::Unknown),\n      Optional(UnorderedElementsAre(\"Foo\")));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", \"Foo\", \"wholename\"] )\",\n          CaseSensitivity::CaseInSensitive),\n      Optional(UnorderedElementsAre(\"foo\")));\n}\n\nTEST(GlobUpperBoundTest, term_name_wholename_multi) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", [\"Foo\", \"foo\"], \"wholename\"] )\",\n          CaseSensitivity::CaseSensitive),\n      Optional(UnorderedElementsAre(\"Foo\", \"foo\")));\n\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", [\"Foo\", \"foo\"], \"wholename\"] )\",\n          CaseSensitivity::Unknown),\n      Optional(UnorderedElementsAre(\"Foo\", \"foo\")));\n\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", [\"Foo\", \"foo\"], \"wholename\"] )\",\n          CaseSensitivity::CaseInSensitive),\n      Optional(UnorderedElementsAre(\"foo\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_name_escape) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", \"a/b?*\", \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(R\"(a/b\\?\\*)\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_name_multi_escape) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", [\"*\", \"a?[]\"], \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(R\"(\\*)\", R\"(a\\?\\[])\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_name_normalize) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", \"a\\\\b\", \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(\"a/b\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_name_multi_normalize) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"name\", [\"a\\\\b\", \"c\\\\d\"], \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(\"a/b\", \"c/d\")));\n}\n\nTEST(GlobUpperBoundTest, term_iname_wholename) {\n  // iname can be bounded with a case-insensitive glob\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"iname\", \"Foo\", \"wholename\"] )\",\n          CaseSensitivity::CaseInSensitive),\n      Optional(UnorderedElementsAre(\"foo\")));\n\n  // iname cannot be bounded with a case-sensitive glob\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"iname\", \"foo\", \"wholename\"] )\", CaseSensitivity::CaseSensitive),\n      Eq(std::nullopt));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"iname\", \"foo\", \"wholename\"] )\", CaseSensitivity::Unknown),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_match_basename) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo/**/bar\", \"basename\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"imatch\", \"foo/**/bar\", \"basename\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_match_wholename) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo/*/bar\", \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/*/bar\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_match_trim_doublestar) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo/**/bar\", \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/**\")));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo/**/bar/**/baz\", \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/**\")));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"**/foo\", \"wholename\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_match_escaped_doublestar) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo/\\\\**/bar\", \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(R\"(foo/\\**/bar)\")));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo/*\\\\*/bar\", \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(R\"(foo/*\\*/bar)\")));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo/[**]/bar\", \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/[**]/bar\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_match_dotfiles) {\n  // The bounding globs are always evaluated with the equivalent of\n  // `\"includedotfiles\": true`. It's safe to widen a glob omitting dotfiles to a\n  // glob including dotfiles.\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo/*\", \"wholename\", {\"includedotfiles\": true}] )\",\n          caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/*\")));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo/*\", \"wholename\", {\"includedotfiles\": false}] )\",\n          caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/*\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_match_noescape) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo\\\\*\", \"wholename\", {\"noescape\": true}] )\",\n          caseSensitivity_),\n      Optional(UnorderedElementsAre(R\"(foo\\\\*)\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_match_escape) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"match\", \"foo\\\\\\\\*\", \"wholename\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(R\"(foo\\\\*)\")));\n}\n\nTEST(GlobUpperBoundTest, term_imatch_wholename) {\n  // imatch can be bounded with a case-insensitive glob\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"imatch\", \"Foo/*/Bar\", \"wholename\"] )\",\n          CaseSensitivity::CaseInSensitive),\n      Optional(UnorderedElementsAre(\"foo/*/bar\")));\n\n  // imatch cannot be bounded with a case-sensitive glob\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"imatch\", \"foo/*/bar\", \"wholename\"] )\",\n          CaseSensitivity::CaseSensitive),\n      Eq(std::nullopt));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"imatch\", \"foo/*/bar\", \"wholename\"] )\",\n          CaseSensitivity::Unknown),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_pcre_basename) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"pcre\", \"^Foo[0-9]\", \"basename\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"ipcre\", \"^Foo[0-9]\", \"basename\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_pcre_wholename) {\n  // NOTE: In principle, with sufficiently advanced analysis, we could translate\n  // this regex into a useful glob upper bound. But currently we don't.\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"pcre\", \"^Foo[0-9]\", \"wholename\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST(GlobUpperBoundTest, term_ipcre_wholename) {\n  // NOTE: In principle, with sufficiently advanced analysis, we could translate\n  // this regex into a useful glob upper bound. But currently we don't.\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"ipcre\", \"^Foo[0-9]\", \"wholename\"] )\",\n          CaseSensitivity::CaseInSensitive),\n      Eq(std::nullopt));\n\n  // ipcre can never be bounded with a case-sensitive glob\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"ipcre\", \"^foo[0-9]\", \"wholename\"] )\",\n          CaseSensitivity::CaseSensitive),\n      Eq(std::nullopt));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"ipcre\", \"^foo[0-9]\", \"wholename\"] )\", CaseSensitivity::Unknown),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_dirname_root_unbounded) {\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"dirname\", \"\"] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_dirname_root_exact_depth) {\n  // NOTE: In principle, we could bound this with \"*/*/*/*\", but currently we\n  // don't.\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"dirname\", \"\", [\"depth\", \"eq\", 3]] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST(GlobUpperBoundTest, term_dirname_prefix) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"dirname\", \"Foo/Bar\"] )\", CaseSensitivity::CaseSensitive),\n      Optional(UnorderedElementsAre(\"Foo/Bar/**\")));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"dirname\", \"Foo/Bar\"] )\", CaseSensitivity::Unknown),\n      Optional(UnorderedElementsAre(\"Foo/Bar/**\")));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"dirname\", \"Foo/Bar\"] )\", CaseSensitivity::CaseInSensitive),\n      Optional(UnorderedElementsAre(\"foo/bar/**\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_dirname_escape) {\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"dirname\", \"*[?\"] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(R\"(\\*\\[\\?/**)\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_dirname_prefix_depth_zero) {\n  // NOTE: In principle, we could bound this with \"foo/bar/*\", but currently we\n  // don't.\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"dirname\", \"foo/bar\", [\"depth\", \"eq\", 0]] )\", caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/bar/**\")));\n}\n\nTEST(GlobUpperBoundTest, term_idirname) {\n  // idirname can be bounded with a case-insensitive glob\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"idirname\", \"Foo/Bar\"] )\", CaseSensitivity::CaseInSensitive),\n      Optional(UnorderedElementsAre(\"foo/bar/**\")));\n\n  // idirname cannot be bounded with a case-sensitive glob\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"idirname\", \"foo/bar\"] )\", CaseSensitivity::CaseSensitive),\n      Eq(std::nullopt));\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"idirname\", \"foo/bar\"] )\", CaseSensitivity::Unknown),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_not) {\n  // Negating a bounded expression --> unbounded\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"( [\"not\", [\"dirname\", \"foo/bar\"]] )\", caseSensitivity_),\n      Eq(std::nullopt));\n  // Negating an unbounded expression --> also unbounded\n  EXPECT_THAT(\n      expr_to_upper_bound(R\"( [\"not\", [\"type\", \"f\"]] )\", caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_allof_nested_anyof) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"([\n            \"allof\",\n            [\"anyof\",\n              [\"dirname\", \"foo/bar\"],\n              [\"match\", \"baz/**\", \"wholename\"]\n            ],\n            [\"type\", \"f\"],\n            [\"match\", \"*.js\"]\n          ])\",\n          caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/bar/**\", \"baz/**\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_allof_prefers_fewer_globs) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"([\n            \"allof\",\n            [\"name\", [\"foo/bar/baz\", \"foo/bar/quux\"]],\n            [\"dirname\", \"foo/bar\"]\n          ])\",\n          caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/bar/**\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_anyof_unbounded) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"([\n            \"anyof\",\n            [\"dirname\", \"foo/bar\"],\n            [\"type\", \"f\"]\n          ])\",\n          caseSensitivity_),\n      Eq(std::nullopt));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_anyof_nested_allof) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"([\n            \"anyof\",\n            [\"allof\",\n              [\"dirname\", \"foo\"],\n              [\"type\", \"f\"]\n            ],\n            [\"allof\",\n              [\"match\", \"foo/bar/baz/**\", \"wholename\"],\n              [\"type\", \"d\"]\n            ]\n          ])\",\n          caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/**\", \"foo/bar/baz/**\")));\n}\n\nTEST(GlobUpperBoundTest, term_anyof_dedupes) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"([\n            \"anyof\",\n            [\"dirname\", \"foo\"],\n            [\"dirname\", \"Bar\"],\n            [\"match\", \"Foo/**\", \"wholename\"],\n            [\"match\", \"bar/**\", \"wholename\"]\n          ])\",\n          CaseSensitivity::CaseSensitive),\n      Optional(UnorderedElementsAre(\"foo/**\", \"Foo/**\", \"bar/**\", \"Bar/**\")));\n\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"([\n            \"anyof\",\n            [\"dirname\", \"foo\"],\n            [\"dirname\", \"Bar\"],\n            [\"match\", \"Foo/**\", \"wholename\"],\n            [\"match\", \"bar/**\", \"wholename\"]\n          ])\",\n          CaseSensitivity::Unknown),\n      Optional(UnorderedElementsAre(\"foo/**\", \"Foo/**\", \"bar/**\", \"Bar/**\")));\n\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"([\n            \"anyof\",\n            [\"dirname\", \"foo\"],\n            [\"dirname\", \"Bar\"],\n            [\"match\", \"Foo/**\", \"wholename\"],\n            [\"match\", \"bar/**\", \"wholename\"]\n          ])\",\n          CaseSensitivity::CaseInSensitive),\n      Optional(UnorderedElementsAre(\"foo/**\", \"bar/**\")));\n}\n\nTEST_P(CaseInvariantGlobUpperBoundTest, term_anyof_dedupes_expensive_globs) {\n  EXPECT_THAT(\n      expr_to_upper_bound(\n          R\"([\n            \"anyof\",\n            [\"match\", \"foo/**/bar\", \"wholename\"],\n            [\"match\", \"foo/**/baz/quux\", \"wholename\"],\n            [\"match\", \"foo/**/more/*\", \"wholename\"]\n          ])\",\n          caseSensitivity_),\n      Optional(UnorderedElementsAre(\"foo/**\")));\n}\n\nINSTANTIATE_TEST_CASE_P(\n    GlobUpperBoundTest,\n    CaseInvariantGlobUpperBoundTest,\n    testing::Values(\n        CaseSensitivity::CaseSensitive,\n        CaseSensitivity::CaseInSensitive,\n        CaseSensitivity::Unknown),\n    [](const auto& info) {\n      switch (info.param) {\n        case CaseSensitivity::CaseSensitive:\n          return \"CaseSensitive\";\n        case CaseSensitivity::CaseInSensitive:\n          return \"CaseInSensitive\";\n        case CaseSensitivity::Unknown:\n          return \"Unknown\";\n        default:\n          return \"-\";\n      }\n    });\n"
  },
  {
    "path": "watchman/test/IgnoreTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/logging/xlog.h>\n#include <folly/portability/GTest.h>\n#include <folly/portability/SysTime.h>\n#include \"watchman/IgnoreSet.h\"\n#include \"watchman/watchman_time.h\"\n\nnamespace {\n\nusing namespace watchman;\n\n// A list that looks similar to one used in one of our repos\nconst char* ignore_dirs[] = {\n    \".buckd\",\n    \".idea\",\n    \"_build\",\n    \"buck-cache\",\n    \"buck-out\",\n    \"build\",\n    \"foo/.buckd\",\n    \"foo/buck-cache\",\n    \"foo/buck-out\",\n    \"bar/_build\",\n    \"bar/buck-cache\",\n    \"bar/buck-out\",\n    \"baz/.buckd\",\n    \"baz/buck-cache\",\n    \"baz/buck-out\",\n    \"baz/build\",\n    \"baz/qux\",\n    \"baz/focus-out\",\n    \"baz/tmp\",\n    \"baz/foo/bar/foo/build\",\n    \"baz/foo/bar/bar/build\",\n    \"baz/foo/bar/baz/build\",\n    \"baz/foo/bar/qux\",\n    \"baz/foo/baz/foo\",\n    \"baz/bar/foo/foo/foo/foo/foo/foo\",\n    \"baz/bar/bar/foo/foo\",\n    \"baz/bar/bar/foo/foo\"};\n\nconst char* ignore_vcs[] = {\".hg\", \".svn\", \".git\", \".jj\"};\n\nstruct test_case {\n  const char* path;\n  bool ignored;\n};\n\nvoid run_correctness_test(\n    IgnoreSet* state,\n    const struct test_case* tests,\n    uint32_t num_tests) {\n  uint32_t i;\n\n  for (i = 0; i < num_tests; i++) {\n    bool res = state->isIgnored(tests[i].path, strlen_uint32(tests[i].path));\n    EXPECT_EQ(res, tests[i].ignored) << tests[i].path;\n  }\n}\n\nvoid add_strings(\n    IgnoreSet* ignore,\n    const char** strings,\n    uint32_t num_strings,\n    bool is_vcs_ignore) {\n  uint32_t i;\n  for (i = 0; i < num_strings; i++) {\n    ignore->add(w_string(strings[i], W_STRING_UNICODE), is_vcs_ignore);\n  }\n}\n\nvoid init_state(IgnoreSet* state) {\n  add_strings(state, ignore_dirs, std::size(ignore_dirs), false);\n  add_strings(state, ignore_vcs, std::size(ignore_vcs), true);\n}\n\nTEST(Ignore, correctness) {\n  IgnoreSet state;\n  static const struct test_case tests[] = {\n      {\"some/path\", false},\n      {\"buck-out/gen/foo\", true},\n      {\".hg/wlock\", false},\n      {\".hg/store/foo\", true},\n      {\"buck-out\", true},\n      {\"foo/buck-out\", true},\n      {\"foo/hello\", false},\n      {\"baz/hello\", false},\n      {\".hg\", false},\n      {\"buil\", false},\n      {\"build\", true},\n      {\"build/lower\", true},\n      {\"builda\", false},\n      {\"build/bar\", true},\n      {\"buildfile\", false},\n      {\"build/lower/baz\", true},\n      {\"builda/hello\", false},\n      {\".jj/repo/store/foo\", true},\n  };\n\n  init_state(&state);\n\n  run_correctness_test(&state, tests, sizeof(tests) / sizeof(tests[0]));\n}\n\n// Load up the words data file and build a list of strings from that list.\n// Each of those strings is prefixed with the supplied string.\n// If there are fewer than limit entries available in the data file, we will\n// abort.\nstd::vector<w_string> build_list_with_prefix(const char* prefix, size_t limit) {\n  std::vector<w_string> strings;\n  char buf[512];\n  FILE* f = fopen(\"thirdparty/libart/tests/words.txt\", \"r\");\n\n#ifdef WATCHMAN_TEST_SRC_DIR\n  if (!f) {\n    f = fopen(\n        WATCHMAN_TEST_SRC_DIR \"/watchman/thirdparty/libart/tests/words.txt\",\n        \"r\");\n  }\n#endif\n\n  if (!f) {\n    f = fopen(\"watchman/thirdparty/libart/tests/words.txt\", \"r\");\n  }\n\n  if (!f) {\n    char cwd[4096];\n    if (getcwd(cwd, sizeof(cwd))) {\n      throw std::runtime_error{\n          std::string{\"Could not load words.txt when run from \"} + cwd};\n    } else {\n      throw std::runtime_error{\n          \"Could not load words.txt, unknown working directory\"};\n    }\n  }\n\n  while (fgets(buf, sizeof buf, f)) {\n    // Remove newline\n    uint32_t len = strlen_uint32(buf);\n    buf[len - 1] = '\\0';\n    strings.emplace_back(w_string::build(prefix, buf));\n\n    if (strings.size() >= limit) {\n      break;\n    }\n  }\n\n  EXPECT_GE(strings.size(), limit);\n\n  return strings;\n}\n\nstatic const size_t kWordLimit = 230000;\n\nvoid bench_list(const char* label, const char* prefix) {\n  IgnoreSet state;\n  size_t i, n;\n  struct timeval start, end;\n\n  init_state(&state);\n  auto strings = build_list_with_prefix(prefix, kWordLimit);\n\n  gettimeofday(&start, nullptr);\n  for (n = 0; n < 100; n++) {\n    for (i = 0; i < kWordLimit; i++) {\n      state.isIgnored(strings[i].data(), strings[i].size());\n    }\n  }\n  gettimeofday(&end, nullptr);\n\n  XLOGF(ERR, \"{}: took {}\", label, w_timeval_diff(start, end));\n}\n\nTEST(Ignore, bench_all_ignores) {\n  bench_list(\"all_ignores_tree\", \"baz/buck-out/gen/\");\n}\n\nTEST(Ignore, bench_no_ignores) {\n  bench_list(\"no_ignores_tree\", \"baz/some/path\");\n}\n\n} // namespace\n"
  },
  {
    "path": "watchman/test/InMemoryViewTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/InMemoryView.h\"\n#include <folly/executors/ManualExecutor.h>\n#include <folly/portability/GTest.h>\n#include \"watchman/fs/FSDetect.h\"\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryContext.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/test/lib/FakeFileSystem.h\"\n#include \"watchman/test/lib/FakeWatcher.h\"\n#include \"watchman/watcher/Watcher.h\"\n#include \"watchman/watchman_dir.h\"\n#include \"watchman/watchman_file.h\"\n\nnamespace {\n\nusing namespace watchman;\n\nConfiguration getConfiguration(bool usePwalk) {\n  json_ref json = json_object();\n  json_object_set(json, \"enable_parallel_crawl\", json_boolean(usePwalk));\n  return Configuration{std::move(json)};\n}\n\nclass InMemoryViewTest : public testing::TestWithParam<bool /* pwalk */> {\n public:\n  using Continue = InMemoryView::Continue;\n\n  const w_string root_path{FAKEFS_ROOT \"root\"};\n\n  FakeFileSystem fs;\n  Configuration config = getConfiguration(GetParam());\n  std::shared_ptr<FakeWatcher> watcher = std::make_shared<FakeWatcher>(fs);\n\n  std::shared_ptr<InMemoryView> view =\n      std::make_shared<InMemoryView>(fs, root_path, config, watcher);\n  PendingCollection& pending = view->unsafeAccessPendingFromWatcher();\n\n  InMemoryViewTest() {\n    pending.lock()->ping();\n  }\n};\n\nTEST_P(InMemoryViewTest, can_construct) {\n  fs.defineContents({\n      FAKEFS_ROOT \"root\",\n  });\n\n  Root root{\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {}};\n}\n\nTEST_P(InMemoryViewTest, drive_initial_crawl) {\n  fs.defineContents({FAKEFS_ROOT \"root/dir/file.txt\"});\n\n  auto root = std::make_shared<Root>(\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {});\n\n  InMemoryView::IoThreadState state{std::chrono::minutes(5)};\n\n  // This will perform the initial crawl.\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  Query query;\n  query.fieldList.add(\"name\");\n  query.paths.emplace();\n  query.paths->emplace_back(QueryPath{\"\", 1});\n\n  QueryContext ctx{&query, root, false};\n  view->pathGenerator(&query, &ctx);\n\n  EXPECT_EQ(2, ctx.resultsArray.size());\n  EXPECT_STREQ(\"dir\", ctx.resultsArray.at(0).asCString());\n  EXPECT_STREQ(\"dir/file.txt\", ctx.resultsArray.at(1).asCString());\n}\n\nTEST_P(InMemoryViewTest, respond_to_watcher_events) {\n  getLog().setStdErrLoggingLevel(DBG);\n\n  fs.defineContents({FAKEFS_ROOT \"root/dir/file.txt\"});\n\n  auto root = std::make_shared<Root>(\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {});\n\n  InMemoryView::IoThreadState state{std::chrono::minutes(5)};\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  Query query;\n  query.fieldList.add(\"name\");\n  query.fieldList.add(\"size\");\n  query.paths.emplace();\n  query.paths->emplace_back(QueryPath{\"\", 1});\n\n  QueryContext ctx1{&query, root, false};\n  view->pathGenerator(&query, &ctx1);\n\n  EXPECT_EQ(2, ctx1.resultsArray.size());\n\n  auto one = ctx1.resultsArray.at(0);\n  EXPECT_STREQ(\"dir\", one.get(\"name\").asCString());\n  EXPECT_EQ(0, one.get(\"size\").asInt());\n  auto two = ctx1.resultsArray.at(1);\n  EXPECT_STREQ(\"dir/file.txt\", two.get(\"name\").asCString());\n  EXPECT_EQ(0, two.get(\"size\").asInt());\n\n  // Update filesystem and ensure the query results don't update.\n\n  fs.updateMetadata(FAKEFS_ROOT \"root/dir/file.txt\", [&](FileInformation& fi) {\n    fi.size = 100;\n  });\n  pending.lock()->ping();\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  QueryContext ctx2{&query, root, false};\n  view->pathGenerator(&query, &ctx2);\n\n  one = ctx2.resultsArray.at(0);\n  EXPECT_STREQ(\"dir\", one.get(\"name\").asCString());\n  EXPECT_EQ(0, one.get(\"size\").asInt());\n  two = ctx2.resultsArray.at(1);\n  EXPECT_STREQ(\"dir/file.txt\", two.get(\"name\").asCString());\n  EXPECT_EQ(0, two.get(\"size\").asInt());\n\n  // Now notify the iothread of the change, process events, and assert the view\n  // updates.\n  pending.lock()->add(\n      FAKEFS_ROOT \"root/dir/file.txt\", {}, W_PENDING_VIA_NOTIFY);\n  pending.lock()->ping();\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  QueryContext ctx3{&query, root, false};\n  view->pathGenerator(&query, &ctx3);\n\n  one = ctx3.resultsArray.at(0);\n  EXPECT_STREQ(\"dir\", one.get(\"name\").asCString());\n  EXPECT_EQ(0, one.get(\"size\").asInt());\n  two = ctx3.resultsArray.at(1);\n  EXPECT_STREQ(\"dir/file.txt\", two.get(\"name\").asCString());\n  EXPECT_EQ(100, two.get(\"size\").asInt());\n}\n\nTEST_P(InMemoryViewTest, wait_for_respond_to_watcher_events) {\n  getLog().setStdErrLoggingLevel(DBG);\n\n  fs.defineContents({FAKEFS_ROOT \"root/dir/file.txt\"});\n\n  auto root = std::make_shared<Root>(\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {});\n\n  InMemoryView::IoThreadState state{std::chrono::minutes(5)};\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  Query query;\n  query.fieldList.add(\"name\");\n  query.fieldList.add(\"size\");\n  query.paths.emplace();\n  query.paths->emplace_back(QueryPath{\"\", 1});\n\n  QueryContext ctx1{&query, root, false};\n  view->pathGenerator(&query, &ctx1);\n\n  EXPECT_EQ(2, ctx1.resultsArray.size());\n\n  auto one = ctx1.resultsArray.at(0);\n  EXPECT_STREQ(\"dir\", one.get(\"name\").asCString());\n  EXPECT_EQ(0, one.get(\"size\").asInt());\n  auto two = ctx1.resultsArray.at(1);\n  EXPECT_STREQ(\"dir/file.txt\", two.get(\"name\").asCString());\n  EXPECT_EQ(0, two.get(\"size\").asInt());\n\n  // Update filesystem and ensure the query results don't update.\n\n  fs.updateMetadata(FAKEFS_ROOT \"root/dir/file.txt\", [&](FileInformation& fi) {\n    fi.size = 100;\n  });\n  pending.lock()->ping();\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  QueryContext ctx2{&query, root, false};\n  view->pathGenerator(&query, &ctx2);\n\n  one = ctx2.resultsArray.at(0);\n  EXPECT_STREQ(\"dir\", one.get(\"name\").asCString());\n  EXPECT_EQ(0, one.get(\"size\").asInt());\n  two = ctx2.resultsArray.at(1);\n  EXPECT_STREQ(\"dir/file.txt\", two.get(\"name\").asCString());\n  EXPECT_EQ(0, two.get(\"size\").asInt());\n\n  // Now notify the iothread of the change, process events, and assert the view\n  // updates.\n  pending.lock()->add(\n      FAKEFS_ROOT \"root/dir/file.txt\", {}, W_PENDING_VIA_NOTIFY);\n  pending.lock()->ping();\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  QueryContext ctx3{&query, root, false};\n  view->pathGenerator(&query, &ctx3);\n\n  one = ctx3.resultsArray.at(0);\n  EXPECT_STREQ(\"dir\", one.get(\"name\").asCString());\n  EXPECT_EQ(0, one.get(\"size\").asInt());\n  two = ctx3.resultsArray.at(1);\n  EXPECT_STREQ(\"dir/file.txt\", two.get(\"name\").asCString());\n  EXPECT_EQ(100, two.get(\"size\").asInt());\n}\n\nTEST_P(\n    InMemoryViewTest,\n    syncToNow_does_not_return_until_cookie_dir_is_crawled) {\n  getLog().setStdErrLoggingLevel(DBG);\n\n  Query query;\n  query.fieldList.add(\"name\");\n  query.fieldList.add(\"size\");\n  query.paths.emplace();\n  query.paths->emplace_back(QueryPath{\"file.txt\", 1});\n\n  fs.defineContents({FAKEFS_ROOT \"root/file.txt\"});\n\n  auto root = std::make_shared<Root>(\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {});\n\n  // Initial crawl\n\n  InMemoryView::IoThreadState state{std::chrono::minutes(5)};\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  // Somebody has updated a file.\n\n  fs.updateMetadata(\n      FAKEFS_ROOT \"root/file.txt\", [&](FileInformation& fi) { fi.size = 100; });\n\n  // We have not seen the new size, so the size should be zero.\n\n  {\n    QueryContext ctx{&query, root, false};\n    view->pathGenerator(&query, &ctx);\n\n    EXPECT_EQ(1, ctx.resultsArray.size());\n\n    auto one = ctx.resultsArray.at(0);\n    EXPECT_STREQ(\"file.txt\", one.get(\"name\").asCString());\n    EXPECT_EQ(0, one.get(\"size\").asInt());\n  }\n\n  // A query starts, but the watcher has not notified us.\n\n  auto executor = folly::ManualExecutor{};\n\n  // Query, to synchronize, writes a cookie to the filesystem.\n  auto syncFuture1 =\n      root->cookies.sync().via(folly::Executor::getKeepAliveToken(executor));\n\n  // But we want to know exactly when it unblocks:\n  auto syncFuture = std::move(syncFuture1).thenValue([&](auto) {\n    // We are running in the iothread, so it is unsafe to access\n    // InMemoryView, but this test is trying to simulate another query's thread\n    // being unblocked too early. Access the ViewDatabase unsafely because the\n    // iothread currently has it locked. That's okay because this test is\n    // single-threaded.\n\n    const auto& viewdb = view->unsafeAccessViewDatabase();\n    auto* dir = viewdb.resolveDir(FAKEFS_ROOT \"root\");\n    auto* file = dir->getChildFile(\"file.txt\");\n    return file->stat.size;\n  });\n\n  // Have Watcher publish change to \"/root\" but this watcher does not have\n  // per-file notifications.\n\n  pending.lock()->add(\n      FAKEFS_ROOT \"root\",\n      {},\n      W_PENDING_VIA_NOTIFY | W_PENDING_NONRECURSIVE_SCAN);\n\n  executor.drain();\n\n  EXPECT_FALSE(syncFuture.isReady());\n  // This will notice the cookie and unblock.\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n  executor.drain();\n  EXPECT_TRUE(syncFuture.isReady());\n\n  EXPECT_EQ(100, std::move(syncFuture).get());\n}\n\nTEST_P(\n    InMemoryViewTest,\n    syncToNow_does_not_return_until_all_pending_events_are_processed) {\n  getLog().setStdErrLoggingLevel(DBG);\n\n  Query query;\n  query.fieldList.add(\"name\");\n  query.fieldList.add(\"size\");\n  query.paths.emplace();\n  query.paths->emplace_back(QueryPath{\"dir/file.txt\", 1});\n\n  fs.defineContents({FAKEFS_ROOT \"root/dir/file.txt\"});\n\n  auto root = std::make_shared<Root>(\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {});\n\n  // Initial crawl\n\n  InMemoryView::IoThreadState state{std::chrono::minutes(5)};\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  // Somebody has updated a file.\n\n  fs.updateMetadata(FAKEFS_ROOT \"root/dir/file.txt\", [&](FileInformation& fi) {\n    fi.size = 100;\n  });\n\n  // We have not seen the new size, so the size should be zero.\n\n  {\n    QueryContext ctx{&query, root, false};\n    view->pathGenerator(&query, &ctx);\n\n    EXPECT_EQ(1, ctx.resultsArray.size());\n\n    auto one = ctx.resultsArray.at(0);\n    EXPECT_STREQ(\"dir/file.txt\", one.get(\"name\").asCString());\n    EXPECT_EQ(0, one.get(\"size\").asInt());\n  }\n\n  // A query starts, but the watcher has not notified us.\n\n  auto executor = folly::ManualExecutor{};\n\n  // Query, to synchronize, writes a cookie to the filesystem.\n  auto syncFuture1 =\n      root->cookies.sync().via(folly::Executor::getKeepAliveToken(executor));\n\n  // But we want to know exactly when it unblocks:\n  auto syncFuture = std::move(syncFuture1).thenValue([&](auto) {\n    // We are running in the iothread, so it is unsafe to access\n    // InMemoryView, but this test is trying to simulate another query's thread\n    // being unblocked too early. Access the ViewDatabase unsafely because the\n    // iothread currently has it locked. That's okay because this test is\n    // single-threaded.\n\n    const auto& viewdb = view->unsafeAccessViewDatabase();\n    auto* dir = viewdb.resolveDir(FAKEFS_ROOT \"root/dir\");\n    auto* file = dir->getChildFile(\"file.txt\");\n    return file->stat.size;\n  });\n\n  // Have Watcher publish its change events but this watcher does not have\n  // per-file notifications.\n\n  // The Watcher event from the modified file, which was sequenced before the\n  // cookie write.\n  pending.lock()->add(\n      FAKEFS_ROOT \"root/dir\",\n      {},\n      W_PENDING_VIA_NOTIFY | W_PENDING_NONRECURSIVE_SCAN);\n\n  // The Watcher event from the cookie.\n  pending.lock()->add(\n      FAKEFS_ROOT \"root\",\n      {},\n      W_PENDING_VIA_NOTIFY | W_PENDING_NONRECURSIVE_SCAN);\n\n  // This will notice the cookie and unblock.\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n  executor.drain();\n  EXPECT_TRUE(syncFuture.isReady());\n\n  EXPECT_EQ(100, std::move(syncFuture).get());\n}\n\nTEST_P(\n    InMemoryViewTest,\n    syncToNow_does_not_return_until_initial_crawl_completes) {\n  getLog().setStdErrLoggingLevel(DBG);\n\n  Query query;\n  query.fieldList.add(\"name\");\n  query.fieldList.add(\"size\");\n  query.paths.emplace();\n  query.paths->emplace_back(QueryPath{\"dir/file.txt\", 1});\n\n  fs.defineContents({\n      FAKEFS_ROOT \"root/dir/file.txt\",\n  });\n  // TODO: add a mode for defining FileInformation with the hierarchy\n  fs.updateMetadata(FAKEFS_ROOT \"root/dir/file.txt\", [&](FileInformation& fi) {\n    fi.size = 100;\n  });\n\n  auto root = std::make_shared<Root>(\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {});\n\n  auto executor = folly::ManualExecutor{};\n\n  // A query is immediately issued. To synchronize, a cookie is written.\n  auto syncFuture1 =\n      root->cookies.sync().via(folly::Executor::getKeepAliveToken(executor));\n\n  // But we want to know exactly when it unblocks:\n  auto syncFuture = std::move(syncFuture1).thenValue([&](auto) {\n    // We are running in the iothread, so it is unsafe to access\n    // InMemoryView, but this test is trying to simulate another query's thread\n    // being unblocked too early. Access the ViewDatabase unsafely because the\n    // iothread currently has it locked. That's okay because this test is\n    // single-threaded.\n\n    const auto& viewdb = view->unsafeAccessViewDatabase();\n    auto* dir = viewdb.resolveDir(FAKEFS_ROOT \"root/dir\");\n    auto* file = dir->getChildFile(\"file.txt\");\n    EXPECT_EQ(100, file->stat.size);\n  });\n\n  executor.drain();\n\n  EXPECT_FALSE(syncFuture.isReady());\n\n  // Initial crawl...\n\n  InMemoryView::IoThreadState state{std::chrono::minutes(5)};\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  executor.drain();\n\n  // ... should unblock the cookie when it's done.\n  EXPECT_TRUE(syncFuture.isReady());\n  std::move(syncFuture).get();\n}\n\nTEST_P(InMemoryViewTest, waitUntilReadyToQuery_waits_for_initial_crawl) {\n  getLog().setStdErrLoggingLevel(DBG);\n\n  Query query;\n  query.fieldList.add(\"name\");\n  query.fieldList.add(\"size\");\n  query.paths.emplace();\n  query.paths->emplace_back(QueryPath{\"dir/file.txt\", 1});\n\n  fs.defineContents({\n      FAKEFS_ROOT \"root/dir/file.txt\",\n  });\n  // TODO: add a mode for defining FileInformation with the hierarchy\n  fs.updateMetadata(FAKEFS_ROOT \"root/dir/file.txt\", [&](FileInformation& fi) {\n    fi.size = 100;\n  });\n\n  auto root = std::make_shared<Root>(\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {});\n\n  auto syncFuture = view->waitUntilReadyToQuery();\n  EXPECT_FALSE(syncFuture.isReady());\n\n  // Initial crawl...\n\n  InMemoryView::IoThreadState state{std::chrono::minutes(5)};\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  // Unblocks!\n  std::move(syncFuture).get();\n}\n\nTEST_P(InMemoryViewTest, directory_removal_does_not_report_parent) {\n  getLog().setStdErrLoggingLevel(DBG);\n\n  fs.defineContents({\n      FAKEFS_ROOT \"root/dir/foo/file.txt\",\n  });\n\n  auto root = std::make_shared<Root>(\n      fs, root_path, \"fs_type\", w_string_to_json(\"{}\"), config, view, [] {});\n\n  auto beforeFirstStep = view->getMostRecentRootNumberAndTickValue();\n\n  InMemoryView::IoThreadState state{std::chrono::minutes(5)};\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  Query query;\n  query.fieldList.add(\"name\");\n  query.paths.emplace();\n  query.paths->emplace_back(QueryPath{\"\", 1});\n\n  QueryContext ctx1{&query, root, false};\n  ctx1.since = QuerySince::Clock{false, beforeFirstStep.ticks};\n\n  view->timeGenerator(&query, &ctx1);\n\n  ASSERT_EQ(3, ctx1.resultsArray.size());\n\n  auto one = ctx1.resultsArray.at(0);\n  EXPECT_EQ(\"dir/foo/file.txt\", ctx1.resultsArray.at(0).asString());\n  EXPECT_EQ(\"dir/foo\", ctx1.resultsArray.at(1).asString());\n  EXPECT_EQ(\"dir\", ctx1.resultsArray.at(2).asString());\n\n  auto beforeChanges = view->getMostRecentRootNumberAndTickValue();\n\n  // Now remove all of foo/ and notify the iothread of the change as if we are\n  // the FSEvents watcher.\n  fs.removeRecursively(FAKEFS_ROOT \"root/dir/foo\");\n  pending.lock()->add(\n      FAKEFS_ROOT \"root/dir/foo\",\n      {},\n      W_PENDING_VIA_NOTIFY | W_PENDING_NONRECURSIVE_SCAN);\n  pending.lock()->ping();\n  EXPECT_EQ(Continue::Continue, view->stepIoThread(root, state, pending));\n\n  QueryContext ctx2{&query, root, false};\n  ctx2.since = QuerySince::Clock{false, beforeChanges.ticks};\n\n  view->timeGenerator(&query, &ctx2);\n\n  ASSERT_EQ(2, ctx2.resultsArray.size());\n  EXPECT_EQ(\"dir/foo\", ctx2.resultsArray.at(0).asString());\n  EXPECT_EQ(\"dir/foo/file.txt\", ctx2.resultsArray.at(1).asString());\n\n  // iothread will not update the view for dir/ until it sees an actual\n  // notification from the watcher for that directory.\n}\n\nINSTANTIATE_TEST_CASE_P(\n    InMemoryViewTests,\n    InMemoryViewTest,\n    testing::Values(false, true));\n\n} // namespace\n"
  },
  {
    "path": "watchman/test/JsonBenchmark.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <benchmark/benchmark.h>\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nnamespace {\n\nvoid encode_doubles(benchmark::State& state) {\n  // 3.7 ^ 500 still fits in a double.\n  constexpr size_t N = 500;\n  // Produce a variety of doubles.\n  constexpr double B = 3.7;\n\n  std::vector<json_ref> arr;\n  arr.reserve(N);\n\n  double value = 1;\n  for (size_t i = 0; i < N; ++i) {\n    arr.push_back(json_real(value));\n    value *= B;\n  }\n\n  json_ref array = json_array(std::move(arr));\n\n  for (auto _ : state) {\n    benchmark::DoNotOptimize(json_dumps(array, JSON_COMPACT));\n  }\n}\nBENCHMARK(encode_doubles);\n\nvoid encode_zero_point_zero(benchmark::State& state) {\n  constexpr size_t N = 500;\n\n  std::vector<json_ref> arr;\n  arr.reserve(N);\n  for (size_t i = 0; i < N; ++i) {\n    arr.push_back(json_real(0));\n  }\n\n  json_ref array = json_array(std::move(arr));\n\n  for (auto _ : state) {\n    benchmark::DoNotOptimize(json_dumps(array, JSON_COMPACT));\n  }\n}\nBENCHMARK(encode_zero_point_zero);\n\nvoid decode_doubles(benchmark::State& state) {\n  // 3.7 ^ 500 still fits in a double.\n  constexpr size_t N = 500;\n  // Produce a variety of doubles.\n  constexpr double B = 3.7;\n\n  std::vector<json_ref> arr;\n  arr.reserve(N);\n  double value = 1;\n  for (size_t i = 0; i < N; ++i) {\n    arr.push_back(json_real(value));\n    value *= B;\n  }\n\n  json_ref array = json_array(std::move(arr));\n  auto encoded = json_dumps(array, JSON_COMPACT);\n\n  for (auto _ : state) {\n    json_error_t err;\n    benchmark::DoNotOptimize(json_loads(encoded.c_str(), 0, &err));\n  }\n}\n\nBENCHMARK(decode_doubles);\n\n} // namespace\n\nBENCHMARK_MAIN();\n"
  },
  {
    "path": "watchman/test/JsonTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <gtest/gtest.h>\n#include \"watchman/thirdparty/jansson/jansson_private.h\"\n\nnamespace {\n\nstd::string json_dtostr(double value) {\n  char buf[30];\n  int length = jsonp_dtostr(buf, std::size(buf), value);\n  if (length >= 0) {\n    return std::string{buf, buf + length};\n  } else {\n    throw std::domain_error(\n        fmt::format(\"error converting value to buffer, length = {}\", length));\n  }\n}\n\nTEST(JsonTest, dtostr) {\n  EXPECT_EQ(\"0.0\", json_dtostr(0));\n  EXPECT_EQ(\n      \"0.33333333333333331\", json_dtostr(0.3333333333333333333333333333333333));\n  EXPECT_EQ(\n      \"0.66666666666666663\", json_dtostr(0.6666666666666666666666666666666666));\n  EXPECT_EQ(\n      \"3.3333333333333333e+33\",\n      json_dtostr(3333333333333333333333333333333333.0));\n  EXPECT_EQ(\n      \"6.6666666666666667e+33\",\n      json_dtostr(6666666666666666666666666666666666.0));\n  EXPECT_EQ(\"1.0\", json_dtostr(1.0));\n  EXPECT_EQ(\"1e+20\", json_dtostr(100000000000000000000.0));\n}\n\nTEST(JsonTest, double_round_trip) {\n  double values[] = {\n      0.3333333333333333333333333333333333,\n      3333333333333333333333333333333333.0,\n      1.0,\n      100000000000000000000.0,\n  };\n  for (auto d : values) {\n    SCOPED_TRACE(fmt::format(\"value = {}\", d));\n    auto encoded = json_dumps(json_real(d), JSON_ENCODE_ANY | JSON_COMPACT);\n    json_error_t err{};\n    auto value = json_loads(encoded.c_str(), JSON_DECODE_ANY, &err);\n\n    EXPECT_EQ(JSON_REAL, value.value().type());\n    EXPECT_EQ(d, json_real_value(value.value())) << \" encoded = \" << encoded;\n  }\n}\n\nTEST(JsonTest, too_deep_parse_tree) {\n  std::string document(10000, '[');\n\n  json_error_t err;\n  json_loads(document.c_str(), JSON_DECODE_ANY, &err);\n}\n\n} // namespace\n"
  },
  {
    "path": "watchman/test/LocalSavedStateInterfaceTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/saved_state/LocalSavedStateInterface.h\"\n#include <folly/portability/GTest.h>\n#include <folly/test/TestUtils.h>\n#include \"watchman/Errors.h\"\n#include \"watchman/test/lib/FakeFileSystem.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nusing namespace watchman;\n\nvoid expect_query_parse_error(\n    const json_ref& config,\n    const char* expectedError) {\n  EXPECT_THROW_RE(\n      LocalSavedStateInterface interface(config, nullptr),\n      QueryParseError,\n      expectedError);\n}\n\nTEST(LocalSavedStateInterfaceTest, max_commits) {\n  auto localStoragePath =\n      w_string_to_json(w_string(FAKEFS_ROOT \"absolute/path\"));\n  auto project = w_string_to_json(\"foo\");\n  expect_query_parse_error(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", project},\n           {\"max-commits\", w_string_to_json(\"string\")}}),\n      \"failed to parse query: 'max-commits' must be an integer\");\n  expect_query_parse_error(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", project},\n           {\"max-commits\", json_integer(0)}}),\n      \"failed to parse query: 'max-commits' must be a positive integer\");\n  expect_query_parse_error(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", project},\n           {\"max-commits\", json_integer(-1)}}),\n      \"failed to parse query: 'max-commits' must be a positive integer\");\n  LocalSavedStateInterface interface(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", project},\n           {\"max-commits\", json_integer(1)}}),\n      nullptr);\n  EXPECT_TRUE(true) << \"expected constructor to succeed\";\n}\n\nTEST(LocalSavedStateInterfaceTest, localStoragePath) {\n  auto project = w_string_to_json(w_string(\"foo\"));\n  expect_query_parse_error(\n      json_object({{\"project\", project}}),\n      \"failed to parse query: 'local-storage-path' must be present in saved state config\");\n  expect_query_parse_error(\n      json_object(\n          {{\"project\", project}, {\"local-storage-path\", json_integer(5)}}),\n      \"failed to parse query: 'local-storage-path' must be a string\");\n  expect_query_parse_error(\n      json_object(\n          {{\"project\", project},\n           {\"local-storage-path\", w_string_to_json(\"relative/path\")}}),\n      \"failed to parse query: 'local-storage-path' must be an absolute path\");\n  LocalSavedStateInterface interface(\n      json_object(\n          {{\"project\", project},\n           {\"local-storage-path\",\n            w_string_to_json(FAKEFS_ROOT \"absolute/path\")}}),\n      nullptr);\n  EXPECT_TRUE(true) << \"expected constructor to succeed\";\n}\n\nTEST(LocalSavedStateInterfaceTest, project) {\n  auto localStoragePath = w_string_to_json(FAKEFS_ROOT \"absolute/path\");\n  expect_query_parse_error(\n      json_object({{\"local-storage-path\", localStoragePath}}),\n      \"failed to parse query: 'project' must be present in saved state config\");\n  expect_query_parse_error(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", json_integer(5)}}),\n      \"failed to parse query: 'project' must be a string\");\n  expect_query_parse_error(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", w_string_to_json(FAKEFS_ROOT \"absolute/path\")}}),\n      \"failed to parse query: 'project' must be a relative path\");\n  LocalSavedStateInterface interface(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", w_string_to_json(\"foo\")}}),\n      nullptr);\n  EXPECT_TRUE(true) << \"expected constructor to succeed\";\n}\n\nTEST(LocalSavedStateInterfaceTest, project_metadata) {\n  auto localStoragePath = w_string_to_json(FAKEFS_ROOT \"absolute/path\");\n  expect_query_parse_error(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", w_string_to_json(\"relative/path\")},\n           {\"project-metadata\", json_integer(5)}}),\n      \"failed to parse query: 'project-metadata' must be a string\");\n  LocalSavedStateInterface interface(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", w_string_to_json(\"foo\")},\n           {\"project-metadata\", w_string_to_json(\"meta\")}}),\n      nullptr);\n  EXPECT_TRUE(true) << \"expected constructor to succeed\";\n}\n\nTEST(LocalSavedStateInterfaceTest, path) {\n  auto localStoragePath = w_string_to_json(FAKEFS_ROOT \"absolute/path\");\n  LocalSavedStateInterface interface(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", w_string_to_json(\"foo\")}}),\n      nullptr);\n  auto path = interface.getLocalPath(\"hash\");\n  w_string_piece expectedPath = FAKEFS_ROOT \"absolute/path/foo/hash\";\n  EXPECT_EQ(path, expectedPath);\n  interface = LocalSavedStateInterface(\n      json_object(\n          {{\"local-storage-path\", localStoragePath},\n           {\"project\", w_string_to_json(\"foo\")},\n           {\"project-metadata\", w_string_to_json(\"meta\")}}),\n      nullptr);\n  path = interface.getLocalPath(\"hash\");\n  expectedPath = FAKEFS_ROOT \"absolute/path/foo/hash_meta\";\n  EXPECT_EQ(path, expectedPath);\n}\n"
  },
  {
    "path": "watchman/test/LogTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/portability/GTest.h>\n#include \"watchman/Logging.h\"\n\nusing namespace watchman;\n\nvoid w_request_shutdown(void) {}\n\nTEST(Log, logging) {\n  char huge[8192];\n  bool logged = false;\n\n  auto sub = watchman::getLog().subscribe(\n      watchman::DBG, [&logged]() { logged = true; });\n\n  memset(huge, 'X', sizeof(huge));\n  huge[sizeof(huge) - 1] = '\\0';\n\n  logf(DBG, \"test {}\", huge);\n\n  std::vector<std::shared_ptr<const watchman::Publisher::Item>> pending;\n  sub->getPending(pending);\n  EXPECT_FALSE(pending.empty()) << \"got an item from our subscription\";\n  EXPECT_TRUE(logged);\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/test/MapUtilTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/MapUtil.h\"\n#include <folly/portability/GTest.h>\n#include <string>\n#include <unordered_map>\n#include <unordered_set>\n#include \"watchman/watchman_string.h\"\n\nusing watchman::mapContainsAny;\nusing watchman::mapContainsAnyOf;\n\nTEST(MapUtil, map_contains_any) {\n  std::unordered_map<w_string, int> uMap = {\n      {\"one\", 1}, {\"two\", 2}, {\"three\", 3}};\n\n  // Map contains key\n\n  EXPECT_TRUE(mapContainsAny(uMap, \"one\"))\n      << \"mapContainsAny single string present\";\n\n  EXPECT_TRUE(mapContainsAny(uMap, \"one\", \"two\"))\n      << \"mapContainsAny two strings present\";\n\n  EXPECT_TRUE(mapContainsAny(uMap, \"one\", \"two\", \"three\"))\n      << \"mapContainsAny three strings present\";\n\n  EXPECT_TRUE(mapContainsAny(uMap, \"one\", \"xcase\"))\n      << \"mapContainsAny first string present\";\n\n  EXPECT_TRUE(mapContainsAny(uMap, \"xcase\", \"two\"))\n      << \"mapContainsAny second string present\";\n\n  EXPECT_TRUE(mapContainsAny(uMap, \"xcase1\", \"xcase2\", \"three\"))\n      << \"mapContainsAny last string present\";\n\n  // Map does not contain key\n\n  EXPECT_FALSE(mapContainsAny(uMap, \"xcase\"))\n      << \"mapContainsAny single string absent\";\n\n  EXPECT_FALSE(mapContainsAny(uMap, \"xcase1\", \"xcase2\"))\n      << \"mapContainsAny two strings absent\";\n\n  EXPECT_FALSE(mapContainsAny(uMap, \"xcase1\", \"xcase2\", \"xcase3\"))\n      << \"mapContainsAny three strings absent\";\n\n  // Empty map tests\n  std::unordered_map<w_string, w_string> eMap;\n\n  EXPECT_FALSE(mapContainsAny(eMap, \"xcase1\"))\n      << \"mapContainsAny absent on empty map\";\n}\n\nTEST(MapUtil, map_contains_any_of) {\n  std::unordered_map<w_string, int> uMap = {\n      {\"one\", 1}, {\"two\", 2}, {\"three\", 3}};\n\n  {\n    // Using iterator to do the lookup\n    std::unordered_set<w_string> kSet = {\"one\"};\n    EXPECT_TRUE(mapContainsAnyOf(uMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf single string present\";\n\n    kSet.emplace(\"two\");\n    EXPECT_TRUE(mapContainsAnyOf(uMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf two strings present\";\n\n    kSet.emplace(\"three\");\n    EXPECT_TRUE(mapContainsAnyOf(uMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf all strings present\";\n  }\n  {\n    std::unordered_set<w_string> kSet = {\"one\", \"xcase1\", \"xcase2\", \"xcase3\"};\n    EXPECT_TRUE(mapContainsAnyOf(uMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf one of several strings present\";\n\n    kSet.emplace(\"two\");\n    EXPECT_TRUE(mapContainsAnyOf(uMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf two of several strings present\";\n  }\n  {\n    std::unordered_set<w_string> kSet;\n    EXPECT_FALSE(mapContainsAnyOf(uMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf empty set\";\n\n    kSet.emplace(\"xcase1\");\n    EXPECT_FALSE(mapContainsAnyOf(uMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf single string absent\";\n\n    kSet.emplace(\"xcase2\");\n    EXPECT_FALSE(mapContainsAnyOf(uMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf two strings absent\";\n\n    kSet.emplace(\"xcase3\");\n    EXPECT_FALSE(mapContainsAnyOf(uMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf three strings absent\";\n  }\n\n  // Empty map tests\n  {\n    std::unordered_map<w_string, w_string> eMap;\n\n    std::unordered_set<w_string> kSet;\n    EXPECT_FALSE(mapContainsAnyOf(eMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf absent on empty map and set\";\n\n    kSet.emplace(\"one\");\n    EXPECT_FALSE(mapContainsAnyOf(eMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf absent on empty map and non-empty set\";\n\n    kSet.emplace(\"two\");\n    EXPECT_FALSE(mapContainsAnyOf(eMap, kSet.begin(), kSet.end()))\n        << \"mapContainsAnyOf absent on empty map and 2 item set\";\n  }\n}\n"
  },
  {
    "path": "watchman/test/MercurialTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/scm/Mercurial.h\"\n#include <folly/portability/GTest.h>\n\nusing namespace std::chrono;\n\nTEST(Mercurial, convertCommitDate) {\n  auto date = watchman::Mercurial::convertCommitDate(\"1529420960.025200\");\n  auto result = duration_cast<seconds>(date.time_since_epoch()).count();\n  auto expected = 1529420960;\n  EXPECT_EQ(result, expected);\n}\n"
  },
  {
    "path": "watchman/test/PathUtilsTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/PathUtils.h\"\n\n#include <folly/Exception.h>\n#include <folly/FileUtil.h>\n#include <folly/Random.h>\n#include <folly/portability/GTest.h>\n#include <folly/portability/Stdlib.h>\n#include <folly/portability/SysTypes.h>\n#include <folly/portability/Unistd.h>\n#include <folly/test/TestUtils.h>\n#include <folly/testing/TestUtil.h>\n#include <string>\n\n#ifndef _WIN32\n#include <sys/stat.h>\n#endif\n\nusing folly::test::TemporaryDirectory;\nusing namespace watchman;\n\nclass PathUtilsTest : public ::testing::Test {\n protected:\n  void SetUp() override {\n    // Create a temporary directory for testing\n    tempDir_ = std::make_unique<TemporaryDirectory>();\n  }\n\n  void TearDown() override {\n    tempDir_.reset();\n  }\n\n  // Helper function to set up environment for testing\n  void setWatchmanStateDir(const std::string& stateDirPath) {\n    // Set environment variables that affect state directory computation\n    setenv(\"WATCHMAN_TEST_STATE_DIR\", stateDirPath.c_str(), 1);\n  }\n\n  std::string getTempPath() const {\n    return tempDir_->path().string();\n  }\n\n  std::string getRandomSuffix() const {\n    return fmt::format(\"testsuffix{}\", folly::Random::rand32());\n  }\n\n  std::unique_ptr<TemporaryDirectory> tempDir_;\n\n  // Helper function to check permissions on a directory (Unix only)\n  void checkDirectoryPermissions(const std::string& dir_path) {\n#ifndef _WIN32\n    struct stat st{};\n    EXPECT_EQ(stat(dir_path.c_str(), &st), 0)\n        << fmt::format(\"Should be able to stat directory: {}\", dir_path);\n\n    // Verify the directory is owned by the current effective user\n    // This check applies to all Unix systems (verify_dir_ownership checks this)\n    EXPECT_EQ(st.st_uid, geteuid()) << fmt::format(\n        \"Directory {} should be owned by current effective user\", dir_path);\n\n    // Check that group and other don't have write permissions\n    // This matches the security check in verify_dir_ownership (st.st_mode &\n    // 0022)\n    EXPECT_EQ(st.st_mode & S_IWGRP, 0) << fmt::format(\n        \"Directory {} should not have group write permissions\", dir_path);\n    EXPECT_EQ(st.st_mode & S_IWOTH, 0) << fmt::format(\n        \"Directory {} should not have other write permissions\", dir_path);\n\n#ifdef __APPLE__\n    // On macOS, we can be more strict and expect exactly 0700 permissions\n    mode_t expected_perms = S_IRWXU; // 0700\n    mode_t actual_perms = st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);\n\n    EXPECT_EQ(actual_perms, expected_perms) << fmt::format(\n        \"Directory {} should have 0700 permissions, but got 0{:o}\",\n        dir_path,\n        actual_perms);\n#endif\n    // Note: On Linux, the exact permissions may vary due to ACLs and config\n    // but the security requirements (owner-only write access) are still\n    // enforced\n#else\n    // Windows\n    (void)dir_path;\n#endif\n  }\n};\n\nTEST_F(PathUtilsTest, computeFileNameWithExistingDirectory) {\n  std::string result;\n  std::string suffix = getRandomSuffix();\n\n  auto state_dir = getTempPath() + \"/watchman_state\";\n  setWatchmanStateDir(state_dir);\n  folly::fs::create_directories(state_dir);\n\n  // Verify the state directory already exists\n  EXPECT_TRUE(folly::fs::exists(state_dir));\n\n  auto expected = fmt::format(\"{}/{}\", state_dir, suffix);\n\n  // This should compute a path and create directories as needed\n  EXPECT_NO_THROW({\n    compute_file_name(result, \"testuser\", suffix.c_str(), \"testfile\", true);\n  });\n\n  // The result should not be empty\n  EXPECT_FALSE(result.empty());\n  EXPECT_EQ(result, expected);\n\n  // Verify the directory was created\n  EXPECT_TRUE(folly::fs::exists(state_dir));\n\n  // The result should be an absolute path (on Unix systems) and have correct\n  // permissions\n#ifndef _WIN32\n  EXPECT_TRUE(result[0] == '/');\n  checkDirectoryPermissions(state_dir);\n#endif\n}\n\n#ifndef _WIN32\nTEST_F(PathUtilsTest, computeFileNameWithSymlinkToExistingDirectory) {\n  std::string result;\n  std::string suffix = getRandomSuffix();\n\n  auto actual_state_dir = getTempPath() + \"/watchman_state_actual\";\n  folly::fs::create_directories(actual_state_dir);\n\n  // Verify the state directory already exists\n  EXPECT_TRUE(folly::fs::exists(actual_state_dir));\n\n  auto state_dir = getTempPath() + \"/watchman_state\";\n  folly::fs::create_symlink(actual_state_dir, state_dir);\n  setWatchmanStateDir(state_dir);\n\n  // Verify the state directory exists and is a symlink\n  EXPECT_TRUE(folly::fs::exists(state_dir));\n  EXPECT_TRUE(folly::fs::is_symlink(state_dir));\n\n  auto expected = fmt::format(\"{}/{}\", state_dir, suffix);\n\n  // This should compute a path and create directories as needed\n  EXPECT_NO_THROW({\n    compute_file_name(result, \"testuser\", suffix.c_str(), \"testfile\", true);\n  });\n\n  // The result should not be empty\n  EXPECT_FALSE(result.empty());\n  EXPECT_EQ(result, expected);\n\n  // Verify the directory was created\n  EXPECT_TRUE(folly::fs::exists(state_dir));\n\n  // The result should be an absolute path and have correct permissions\n  EXPECT_TRUE(result[0] == '/');\n  checkDirectoryPermissions(state_dir);\n}\n#endif\n\nTEST_F(PathUtilsTest, computeFileNameWithNonExistingDirectory) {\n  std::string result;\n  std::string suffix = getRandomSuffix();\n\n  auto state_dir_parent = getTempPath() + \"watchman_state/a/b\";\n\n  // Verify that a parent directory doesn't exist\n  EXPECT_FALSE(folly::fs::exists(state_dir_parent));\n\n  auto state_dir = state_dir_parent + \"/c/d\";\n  setWatchmanStateDir(state_dir);\n\n  auto expected = fmt::format(\"{}/{}\", state_dir, suffix);\n\n  // This should compute a path and create directories as needed\n  EXPECT_NO_THROW({\n    compute_file_name(result, \"testuser\", suffix.c_str(), \"testfile\", true);\n  });\n\n  // The result should not be empty\n  EXPECT_FALSE(result.empty());\n  EXPECT_EQ(result, expected);\n\n  // Verify the leaf directory was created\n  EXPECT_TRUE(folly::fs::exists(state_dir));\n\n  // The result should be an absolute path (on Unix systems) and have correct\n  // permissions\n#ifndef _WIN32\n  EXPECT_TRUE(result[0] == '/');\n  checkDirectoryPermissions(state_dir);\n#endif\n}\n\nTEST_F(PathUtilsTest, computeFileNameRelativePathRequireAbsolute) {\n  std::string result = \"relative/path\";\n  std::string suffix = getRandomSuffix();\n\n  // This should cause a FATAL error on Unix systems due to non-absolute path\n#ifndef _WIN32\n  EXPECT_DEATH(\n      {\n        compute_file_name(result, \"testuser\", suffix.c_str(), \"testfile\", true);\n      },\n      \"must be an absolute file path\");\n#else\n  // On Windows, this should not cause an error\n  EXPECT_NO_THROW({\n    compute_file_name(result, \"testuser\", suffix.c_str(), \"testfile\", true);\n  });\n#endif\n}\n\nTEST_F(PathUtilsTest, computeFileNameRelativePathNoRequireAbsolute) {\n  std::string result = \"relative/path\";\n  std::string suffix = getRandomSuffix();\n\n  // When require_absolute is false, relative paths should be allowed\n  EXPECT_NO_THROW({\n    compute_file_name(result, \"testuser\", suffix.c_str(), \"testfile\", false);\n  });\n\n  EXPECT_EQ(result, \"relative/path\");\n}\n\n// create_log_dir tests — exercises the log-specific directory creation\n// that skips verify_dir_ownership (unlike create_state_dir)\n\nTEST_F(PathUtilsTest, createLogDirCreatesNewDirectory) {\n  // Parent must exist (e.g. set up by container runtime); only leaf is created\n  auto parent = getTempPath() + \"/watchman_logs\";\n  folly::fs::create_directories(parent);\n  auto log_dir = parent + \"/testuser\";\n  EXPECT_FALSE(folly::fs::exists(log_dir));\n\n  std::error_code ec;\n  create_log_dir(log_dir.c_str(), ec);\n\n  EXPECT_FALSE(ec) << \"create_log_dir should succeed: \" << ec.message();\n  EXPECT_TRUE(folly::fs::exists(log_dir));\n  EXPECT_TRUE(folly::fs::is_directory(log_dir));\n\n#ifndef _WIN32\n  struct stat st{};\n  ASSERT_EQ(stat(log_dir.c_str(), &st), 0);\n  // Log dirs get 0755, not 0700 like state dirs\n  mode_t perms = st.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);\n  EXPECT_EQ(perms, static_cast<mode_t>(0755))\n      << fmt::format(\"Expected 0755 but got 0{:o}\", perms);\n#endif\n}\n\nTEST_F(PathUtilsTest, createLogDirFailsWhenParentMissing) {\n  // Parent directory must exist — create_log_dir only creates the leaf.\n  // A missing parent indicates a misconfigured log_dir and should fail\n  // clearly rather than silently creating a deep tree.\n  auto log_dir = getTempPath() + \"/nonexistent_parent/watchman_logs\";\n  EXPECT_FALSE(folly::fs::exists(getTempPath() + \"/nonexistent_parent\"));\n\n  std::error_code ec;\n  create_log_dir(log_dir.c_str(), ec);\n\n  EXPECT_TRUE(ec) << \"create_log_dir should fail when parent doesn't exist\";\n  EXPECT_FALSE(folly::fs::exists(log_dir));\n}\n\nTEST_F(PathUtilsTest, createLogDirHandlesExistingDirectory) {\n  // Pre-existing directory (e.g. container runtime pre-created it)\n  auto log_dir = getTempPath() + \"/watchman_logs\";\n  folly::fs::create_directories(log_dir);\n  ASSERT_TRUE(folly::fs::exists(log_dir));\n\n  std::error_code ec;\n  create_log_dir(log_dir.c_str(), ec);\n\n  // Should succeed without error even though dir already exists\n  EXPECT_FALSE(ec) << \"create_log_dir should handle existing dir: \"\n                   << ec.message();\n  EXPECT_TRUE(folly::fs::exists(log_dir));\n}\n\n#ifndef _WIN32\nTEST_F(PathUtilsTest, createLogDirHandlesSymlinkToExistingDirectory) {\n  // Symlink to an existing directory should not cause errors\n  auto actual_dir = getTempPath() + \"/watchman_logs_actual\";\n  folly::fs::create_directories(actual_dir);\n  ASSERT_TRUE(folly::fs::exists(actual_dir));\n\n  auto log_dir = getTempPath() + \"/watchman_logs\";\n  folly::fs::create_symlink(actual_dir, log_dir);\n  ASSERT_TRUE(folly::fs::is_symlink(log_dir));\n\n  std::error_code ec;\n  create_log_dir(log_dir.c_str(), ec);\n\n  EXPECT_FALSE(ec) << \"create_log_dir should handle symlinks: \" << ec.message();\n  EXPECT_TRUE(folly::fs::exists(log_dir));\n}\n\nTEST_F(PathUtilsTest, createLogDirDoesNotExitOnDifferentOwnership) {\n  // Key difference from create_state_dir: create_log_dir must not call\n  // exit(1) when the directory has different ownership or permissions.\n  // In containers, the parent may be owned by root.\n  // We verify this by creating a dir with permissive mode (which would\n  // fail verify_dir_ownership's 0022 check) and confirming create_log_dir\n  // succeeds.\n  auto log_dir = getTempPath() + \"/watchman_logs_permissive\";\n  folly::fs::create_directories(log_dir);\n  chmod(log_dir.c_str(), 0777);\n\n  std::error_code ec;\n  create_log_dir(log_dir.c_str(), ec);\n\n  // create_log_dir should not exit or error — it doesn't check ownership\n  EXPECT_FALSE(ec) << \"create_log_dir should not fail on permissive dir: \"\n                   << ec.message();\n  EXPECT_TRUE(folly::fs::exists(log_dir));\n}\n#endif\n\nTEST_F(PathUtilsTest, computeFileNameDifferentSuffixes) {\n  auto state_dir = getTempPath() + \"/watchman_state\";\n  setWatchmanStateDir(state_dir);\n\n  // Verify the state directory doesn't exist initially\n  EXPECT_FALSE(folly::fs::exists(state_dir));\n\n  // Test various suffixes that are used in watchman\n  std::vector<std::pair<std::string, std::string>> suffixTests = {\n      {\"pid\", \"pidfile\"},\n      {\"sock\", \"sockname\"},\n      {\"state\", \"statefile\"},\n      {\"log\", \"logfile\"}};\n\n  for (const auto& [suffix, what] : suffixTests) {\n    std::string result;\n    std::string expected = fmt::format(\"{}/{}\", state_dir, suffix);\n\n    EXPECT_NO_THROW({\n      compute_file_name(result, \"testuser\", suffix.c_str(), what.c_str(), true);\n    }) << fmt::format(\"Failed for suffix: {}, what: {}\", suffix, what);\n\n    EXPECT_FALSE(result.empty())\n        << fmt::format(\"Empty result for suffix: {}, what: {}\", suffix, what);\n\n    EXPECT_EQ(result, expected) << fmt::format(\n        \"Result doesn't match expected: {}, what: {}\", suffix, what);\n  }\n}\n"
  },
  {
    "path": "watchman/test/PendingCollectionTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/PendingCollection.h\"\n#include \"watchman/Logging.h\"\n\n#include <folly/logging/xlog.h>\n#include <folly/portability/GTest.h>\n#include <chrono>\n\nusing namespace watchman;\n\nnamespace watchman {\n[[maybe_unused]] static std::ostream& operator<<(\n    std::ostream& out,\n    PendingChanges const& item) {\n  return out << (const void*)&item;\n}\n[[maybe_unused]] static std::ostream& operator<<(\n    std::ostream& out,\n    watchman_pending_fs const& item) {\n  return out << (const void*)&item;\n}\n} // namespace watchman\n\nnamespace {\n\nvoid build_list(\n    std::vector<watchman_pending_fs>* list,\n    std::chrono::system_clock::time_point now,\n    const w_string& parent_name,\n    size_t depth,\n    size_t num_files,\n    size_t num_dirs) {\n  size_t i;\n  for (i = 0; i < num_files; i++) {\n    list->emplace_back(\n        w_string::build(parent_name.view(), \"/file\", i),\n        now,\n        W_PENDING_VIA_NOTIFY);\n  }\n\n  for (i = 0; i < num_dirs; i++) {\n    list->emplace_back(\n        w_string::build(parent_name.view(), \"/dir\", i),\n        now,\n        W_PENDING_RECURSIVE);\n\n    if (depth > 0) {\n      build_list(list, now, list->back().path, depth - 1, num_files, num_dirs);\n    }\n  }\n}\n\nsize_t process_items(PendingCollection::LockedPtr& coll) {\n  size_t drained = 0;\n\n  auto item = coll->stealItems();\n  while (item) {\n    drained++;\n    item = std::move(item->next);\n  }\n  return drained;\n}\n\n} // namespace\n\n// Simulate\nTEST(Pending, bench) {\n  // These parameters give us 262140 items to track\n  const size_t tree_depth = 7;\n  const size_t num_files_per_dir = 8;\n  const size_t num_dirs_per_dir = 4;\n  w_string root_name(\"/some/path\", W_STRING_BYTE);\n  std::vector<watchman_pending_fs> list;\n  const size_t alloc_size = 280000;\n\n  list.reserve(alloc_size);\n\n  // Build a list ordered from the root (top) down to the leaves.\n  auto build_start = std::chrono::system_clock::now();\n  build_list(\n      &list,\n      build_start,\n      root_name,\n      tree_depth,\n      num_files_per_dir,\n      num_dirs_per_dir);\n  XLOGF(ERR, \"built list with {} items\", list.size());\n\n  // Benchmark insertion in top-down order.\n  {\n    PendingCollection coll;\n    size_t drained = 0;\n    auto lock = coll.lock();\n\n    auto start = std::chrono::steady_clock::now();\n    for (auto& item : list) {\n      lock->add(item.path, item.now, item.flags);\n    }\n    drained = process_items(lock);\n\n    auto end = std::chrono::steady_clock::now();\n    XLOGF(\n        ERR,\n        \"took {}s to insert {} items into pending coll\",\n        std::chrono::duration<double>(end - start).count(),\n        drained);\n  }\n\n  // and now in reverse order; this is from the leaves of the filesystem\n  // tree up to the root, or bottom-up.  This simulates the workload of\n  // a recursive delete of a filesystem tree.\n  {\n    PendingCollection coll;\n    size_t drained = 0;\n    auto lock = coll.lock();\n\n    auto start = std::chrono::steady_clock::now();\n    for (auto it = list.rbegin(); it != list.rend(); ++it) {\n      auto& item = *it;\n      lock->add(item.path, item.now, item.flags);\n    }\n\n    drained = process_items(lock);\n\n    auto end = std::chrono::steady_clock::now();\n    XLOGF(\n        ERR,\n        \"took {}s to reverse insert {} items into pending coll\",\n        std::chrono::duration<double>(end - start).count(),\n        drained);\n  }\n}\n\nnamespace {\n\ntemplate <typename Collection>\nclass PendingCollectionFixture : public testing::Test {\n public:\n  Collection coll;\n  std::chrono::system_clock::time_point now = std::chrono::system_clock::now();\n};\n\nclass WrappedPendingCollection : public PendingCollectionBase {\n public:\n  WrappedPendingCollection() : PendingCollectionBase{cond} {}\n\n  std::condition_variable cond;\n};\n\n/**\n * A naive, low-performance implementation of PendingCollection so they can be\n * fuzzed in relation to each other.\n *\n * This type is intended to be as unclever as possible.\n */\nclass NaivePendingCollection {\n public:\n  void add(\n      const w_string& path,\n      std::chrono::system_clock::time_point now,\n      PendingFlags flags) {\n    for (std::shared_ptr<watchman_pending_fs> p = head_; p; p = p->next) {\n      if (path.piece().startsWith(p->path) &&\n          watchman::is_path_prefix(path, p->path)) {\n        if ((p->flags & (W_PENDING_RECURSIVE | W_PENDING_CRAWL_ONLY)) ==\n            W_PENDING_RECURSIVE) {\n          return;\n        }\n      }\n    }\n\n    for (std::shared_ptr<watchman_pending_fs> p = head_; p; p = p->next) {\n      if (p->path == path) {\n        // consolidateItem\n        p->flags.set(\n            flags &\n            (W_PENDING_CRAWL_ONLY | W_PENDING_RECURSIVE |\n             W_PENDING_IS_DESYNCED));\n        // TODO: should prune here\n        return;\n      }\n    }\n\n    // maybePruneObsoletedChildren\n    if ((flags & (W_PENDING_RECURSIVE | W_PENDING_CRAWL_ONLY)) ==\n        W_PENDING_RECURSIVE) {\n      std::shared_ptr<watchman_pending_fs>* prev = &head_;\n      auto p = head_;\n      while (p) {\n        if (watchman::is_path_prefix(p->path, path)) {\n          (*prev) = p->next;\n          p = p->next;\n        } else {\n          prev = &(*prev)->next;\n          p = p->next;\n        }\n      }\n    }\n\n    auto p = std::make_shared<watchman_pending_fs>(path, now, flags);\n    p->next = head_;\n    head_ = p;\n  }\n\n  size_t getPendingItemCount() const {\n    size_t i = 0;\n    for (auto p = head_; p; p = p->next) {\n      ++i;\n    }\n    return i;\n  }\n\n  std::shared_ptr<watchman_pending_fs> stealItems() {\n    return std::exchange(head_, nullptr);\n  }\n\n private:\n  std::shared_ptr<watchman_pending_fs> head_;\n};\n\nusing PCTypes = ::testing::Types<PendingChanges, NaivePendingCollection>;\n\n} // namespace\n\nTYPED_TEST_SUITE(PendingCollectionFixture, PCTypes);\n\nTYPED_TEST(PendingCollectionFixture, add_one_item) {\n  w_string path{\"foo/bar\"};\n  PendingFlags flags;\n\n  this->coll.add(path, this->now, flags);\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_EQ(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo/bar\"}, item->path);\n  EXPECT_EQ(PendingFlags{}, item->flags);\n}\n\nTYPED_TEST(PendingCollectionFixture, add_two_items) {\n  PendingFlags flags;\n\n  this->coll.add(w_string{\"foo/bar\"}, this->now, flags);\n  this->coll.add(w_string{\"foo/baz\"}, this->now, flags);\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_NE(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo/baz\"}, item->path);\n  EXPECT_EQ(PendingFlags{}, item->flags);\n\n  item = item->next;\n  ASSERT_NE(nullptr, item);\n  EXPECT_EQ(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo/bar\"}, item->path);\n  EXPECT_EQ(PendingFlags{}, item->flags);\n}\n\nTYPED_TEST(PendingCollectionFixture, same_item_consolidates) {\n  PendingFlags flags;\n  this->coll.add(w_string{\"foo/bar\"}, this->now, flags);\n  this->coll.add(w_string{\"foo/bar\"}, this->now, flags);\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_EQ(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo/bar\"}, item->path);\n  EXPECT_EQ(PendingFlags{}, item->flags);\n}\n\nTYPED_TEST(PendingCollectionFixture, prune_obsoleted_children) {\n  this->coll.add(w_string{\"foo/bar\"}, this->now, 0);\n  this->coll.add(w_string{\"foo\"}, this->now, W_PENDING_RECURSIVE);\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_EQ(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo\"}, item->path);\n  EXPECT_EQ(W_PENDING_RECURSIVE, item->flags);\n}\n\nTYPED_TEST(\n    PendingCollectionFixture,\n    recursive_parents_prevent_children_from_being_added) {\n  this->coll.add(w_string{\"foo\"}, this->now, W_PENDING_RECURSIVE);\n  this->coll.add(w_string{\"foo/bar\"}, this->now, 0);\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_EQ(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo\"}, item->path);\n  EXPECT_EQ(W_PENDING_RECURSIVE, item->flags);\n}\n\nTYPED_TEST(\n    PendingCollectionFixture,\n    mixed_addition_is_cleared_by_recursive_parents) {\n  this->coll.add(w_string{\"foo/bar\"}, this->now, 0);\n  this->coll.add(w_string{\"foo/bar/baz\"}, this->now, 0);\n  this->coll.add(w_string{\"foo\"}, this->now, W_PENDING_RECURSIVE);\n  this->coll.add(w_string{\"foo/bar/baz/qux\"}, this->now, 0);\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_EQ(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo\"}, item->path);\n  EXPECT_EQ(W_PENDING_RECURSIVE, item->flags);\n}\n\nTYPED_TEST(PendingCollectionFixture, unrelated_prefixes_dont_prune) {\n  PendingFlags flags;\n  this->coll.add(w_string{\"foo/bar\"}, this->now, flags);\n  this->coll.add(w_string{\"f\"}, this->now, W_PENDING_RECURSIVE);\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_NE(nullptr, item->next);\n  EXPECT_EQ(w_string{\"f\"}, item->path);\n  EXPECT_EQ(W_PENDING_RECURSIVE, item->flags);\n\n  item = item->next;\n  ASSERT_NE(nullptr, item);\n  EXPECT_EQ(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo/bar\"}, item->path);\n  EXPECT_EQ(PendingFlags{}, item->flags);\n}\n\nTYPED_TEST(PendingCollectionFixture, queue_crawl_then_notify) {\n  this->coll.add(\n      w_string{\"foo\"}, this->now, W_PENDING_CRAWL_ONLY | W_PENDING_RECURSIVE);\n  this->coll.add(w_string{\"foo/bar\"}, this->now, W_PENDING_VIA_NOTIFY);\n\n  // TODO: Why are these paths not returned bottom-up?\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_NE(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo/bar\"}, item->path);\n  EXPECT_EQ(W_PENDING_VIA_NOTIFY, item->flags);\n\n  item = item->next;\n  EXPECT_EQ(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo\"}, item->path);\n  EXPECT_EQ(W_PENDING_CRAWL_ONLY | W_PENDING_RECURSIVE, item->flags);\n}\n\nTYPED_TEST(PendingCollectionFixture, queue_notify_then_crawl) {\n  this->coll.add(w_string{\"foo/bar\"}, this->now, W_PENDING_VIA_NOTIFY);\n  this->coll.add(\n      w_string{\"foo\"}, this->now, W_PENDING_CRAWL_ONLY | W_PENDING_RECURSIVE);\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_NE(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo\"}, item->path);\n  EXPECT_EQ(W_PENDING_CRAWL_ONLY | W_PENDING_RECURSIVE, item->flags);\n\n  item = item->next;\n  EXPECT_EQ(nullptr, item->next);\n  EXPECT_EQ(w_string{\"foo/bar\"}, item->path);\n  EXPECT_EQ(W_PENDING_VIA_NOTIFY, item->flags);\n}\n\nTYPED_TEST(PendingCollectionFixture, real_example) {\n  this->coll.add(\n      w_string{\"/home/chadaustin/tmp/watchmanroots/test-root/foo/baz\"},\n      this->now,\n      W_PENDING_NONRECURSIVE_SCAN | W_PENDING_RECURSIVE);\n  this->coll.add(\n      w_string{\"/home/chadaustin/tmp/watchmanroots/test-root/foo/baz\"},\n      this->now,\n      W_PENDING_NONRECURSIVE_SCAN);\n  this->coll.add(\n      w_string{\"/home/chadaustin/tmp/watchmanroots/test-root/foo/baq\"},\n      this->now,\n      W_PENDING_NONRECURSIVE_SCAN);\n  this->coll.add(\n      w_string{\"/home/chadaustin/tmp/watchmanroots/test-root/f\"},\n      this->now,\n      W_PENDING_NONRECURSIVE_SCAN | W_PENDING_RECURSIVE);\n\n  EXPECT_EQ(3, this->coll.getPendingItemCount());\n\n  auto item = this->coll.stealItems();\n  ASSERT_NE(nullptr, item);\n  EXPECT_NE(nullptr, item->next);\n\n  item = item->next;\n  ASSERT_NE(nullptr, item);\n  EXPECT_NE(nullptr, item->next);\n\n  item = item->next;\n  ASSERT_NE(nullptr, item);\n  EXPECT_EQ(nullptr, item->next);\n}\n"
  },
  {
    "path": "watchman/test/PerfSampleTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/PerfSample.h\"\n\n#include <folly/ScopeGuard.h>\n#include <folly/portability/GTest.h>\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nusing namespace watchman;\n\nnamespace {\njson_ref make_sample(int i) {\n  return json_object({std::make_pair(\"value\", json_integer(i))});\n}\n} // namespace\n\nTEST(Perf, sample_batches_are_limited_to_batch_size) {\n  std::vector<json_ref> samples = {\n      make_sample(1),\n      make_sample(2),\n      make_sample(3),\n      make_sample(4),\n      make_sample(5),\n  };\n\n  std::vector<std::vector<std::string>> calls;\n\n  processSamples(\n      1000,\n      4,\n      samples,\n      [&](std::vector<std::string> samples) {\n        calls.push_back(std::move(samples));\n      },\n      [&](std::string) {\n        throw std::runtime_error(\"unexpected stdin callback\");\n      });\n\n  ASSERT_EQ(2, calls.size());\n  ASSERT_EQ(4, calls[0].size());\n  EXPECT_EQ(\"{\\\"value\\\": 1}\", calls[0][0]);\n  EXPECT_EQ(\"{\\\"value\\\": 2}\", calls[0][1]);\n  ASSERT_EQ(1, calls[1].size());\n  EXPECT_EQ(\"{\\\"value\\\": 5}\", calls[1][0]);\n}\n\nTEST(Perf, sample_batches_are_limited_if_total_size_exceeds_argv_limit) {\n  std::vector<json_ref> samples = {\n      make_sample(1),\n      make_sample(2),\n      make_sample(3),\n      make_sample(4),\n      make_sample(5),\n  };\n\n  std::vector<std::vector<std::string>> calls;\n\n  processSamples(\n      20,\n      4,\n      samples,\n      [&](std::vector<std::string> samples) {\n        calls.push_back(std::move(samples));\n      },\n      [&](std::string) {\n        throw std::runtime_error(\"unexpected stdin callback\");\n      });\n\n  ASSERT_EQ(3, calls.size());\n  ASSERT_EQ(2, calls[0].size());\n  EXPECT_EQ(\"{\\\"value\\\": 1}\", calls[0][0]);\n  EXPECT_EQ(\"{\\\"value\\\": 2}\", calls[0][1]);\n  ASSERT_EQ(2, calls[1].size());\n  EXPECT_EQ(\"{\\\"value\\\": 3}\", calls[1][0]);\n  EXPECT_EQ(\"{\\\"value\\\": 4}\", calls[1][1]);\n  ASSERT_EQ(1, calls[2].size());\n  EXPECT_EQ(\"{\\\"value\\\": 5}\", calls[2][0]);\n}\n\nTEST(Perf, large_samples_are_passed_in_stdin) {\n  std::vector<json_ref> samples = {\n      make_sample(1),\n      make_sample(2),\n  };\n\n  std::vector<std::vector<std::string>> arg_calls;\n  std::vector<std::string> stdin_calls;\n\n  processSamples(\n      5,\n      4,\n      samples,\n      [&](std::vector<std::string> samples) {\n        arg_calls.push_back(std::move(samples));\n      },\n      [&](std::string stdin_str) {\n        stdin_calls.push_back(std::move(stdin_str));\n      });\n\n  ASSERT_EQ(0, arg_calls.size());\n  ASSERT_EQ(2, stdin_calls.size());\n  EXPECT_EQ(\"{\\\"value\\\": 1}\", stdin_calls[0]);\n  EXPECT_EQ(\"{\\\"value\\\": 2}\", stdin_calls[1]);\n}\n"
  },
  {
    "path": "watchman/test/ResultTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Result.h\"\n#include <folly/portability/GTest.h>\n#include <folly/test/TestUtils.h>\n#include <string>\n\nusing namespace watchman;\n\nTEST(Result, empty) {\n  Result<bool> b;\n\n  EXPECT_TRUE(b.empty()) << \"default constructed and empty\";\n\n  EXPECT_THROW(b.throwIfError(), std::logic_error);\n  EXPECT_THROW(b.value(), std::logic_error);\n  EXPECT_THROW(b.error(), std::logic_error)\n      << \"error throws logic error for empty result\";\n}\n\nTEST(Result, simple_value) {\n  auto b = makeResult(true);\n\n  EXPECT_FALSE(b.empty());\n  EXPECT_TRUE(b.hasValue());\n  EXPECT_TRUE(b.value());\n\n  Result<bool> copyOfB(b);\n\n  EXPECT_FALSE(b.empty()) << \"b is not empty after being copied\";\n  EXPECT_FALSE(copyOfB.empty()) << \"copyOfB is not empty\";\n  EXPECT_TRUE(copyOfB.hasValue()) << \"copyOfB has a value\";\n  EXPECT_TRUE(copyOfB.value()) << \"copyOfB holds true\";\n\n  Result<bool> movedB(std::move(b));\n\n  EXPECT_TRUE(b.empty()) << \"b empty after move\";\n  EXPECT_FALSE(movedB.empty()) << \"movedB is not empty\";\n  EXPECT_TRUE(movedB.hasValue()) << \"movedB has a value\";\n  EXPECT_TRUE(movedB.value()) << \"movedB holds true\";\n\n  b = movedB;\n  EXPECT_FALSE(b.empty()) << \"b is not empty after copying\";\n  EXPECT_TRUE(b.hasValue()) << \"b has a value\";\n  EXPECT_TRUE(b.value()) << \"b holds true\";\n\n  b = std::move(copyOfB);\n  EXPECT_FALSE(b.empty()) << \"b is not empty after copying\";\n  EXPECT_TRUE(b.hasValue()) << \"b has a value\";\n  EXPECT_TRUE(b.value()) << \"b holds true\";\n  EXPECT_TRUE(copyOfB.empty()) << \"copyOfB is empty after being moved\";\n}\n\nTEST(Result, error) {\n  auto a = makeResultWith([] { return std::string(\"noice\"); });\n  EXPECT_TRUE(a.hasValue()) << \"got a value\";\n  EXPECT_EQ(a.value(), \"noice\") << \"got our string out\";\n  using atype = decltype(a);\n  auto is_string = std::is_same<typename atype::value_type, std::string>::value;\n  EXPECT_TRUE(is_string) << \"a has std::string as a value type\";\n\n  auto b = makeResultWith([] { throw std::runtime_error(\"w00t\"); });\n\n  EXPECT_TRUE(b.hasError()) << \"we got an exception contained\";\n\n  EXPECT_THROW_RE(b.throwIfError(), std::runtime_error, \"w00t\");\n\n  using btype = decltype(b);\n  auto is_unit = std::is_same<typename btype::value_type, folly::Unit>::value;\n  EXPECT_TRUE(is_unit) << \"b has Unit as a value type\";\n\n  auto c = makeResultWith([] {\n    if (false) {\n      return 42;\n    }\n    throw std::runtime_error(\"gah\");\n  });\n\n  using ctype = decltype(c);\n  auto is_int = std::is_same<typename ctype::value_type, int>::value;\n  EXPECT_TRUE(is_int) << \"c has int as a value type\";\n\n  EXPECT_TRUE(c.hasError()) << \"c has an error\";\n}\n\nTEST(Result, non_exception_error_type) {\n  Result<std::string, int> result(\"hello\");\n\n  EXPECT_TRUE(result.hasValue()) << \"has value\";\n  EXPECT_EQ(result.value(), \"hello\");\n\n  result = Result<std::string, int>(42);\n  EXPECT_TRUE(result.hasError()) << \"holding error\";\n  EXPECT_EQ(result.error(), 42) << \"holding 42\";\n\n  EXPECT_THROW(result.throwIfError(), std::logic_error);\n}\n"
  },
  {
    "path": "watchman/test/ReturnOnlyFilesTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/portability/GMock.h>\n#include <folly/portability/GTest.h>\n#include <folly/test/TestUtils.h>\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nusing namespace watchman;\nusing namespace testing;\n\nnamespace {\nstd::optional<QueryExpr::ReturnOnlyFiles> expr_return_only_files(\n    std::string expression_json) {\n  json_error_t err{};\n  auto expression = json_loads(expression_json.c_str(), JSON_DECODE_ANY, &err);\n  if (!expression.has_value()) {\n    ADD_FAILURE() << \"JSON parse error in fixture: \" << err.text << \" at \"\n                  << err.source << \":\" << err.line << \":\" << err.column;\n    return std::nullopt;\n  }\n  Query query;\n  // Disable automatic parsing of \"match\" as \"imatch\", \"name\" as \"iname\", etc.\n  auto expr = watchman::parseQueryExpr(&query, *expression);\n  return expr->listOnlyFiles();\n}\n\n} // namespace\n\nTEST(ReturnOnlyFilesTest, false) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"false\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, true) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"true\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, type_d) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"type\", \"d\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::No));\n}\n\nTEST(ReturnOnlyFilesTest, type_f) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"type\", \"f\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Yes));\n}\n\nTEST(ReturnOnlyFilesTest, type_l) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"type\", \"l\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Yes));\n}\n\nTEST(ReturnOnlyFilesTest, dirname) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"dirname\", \"l\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, idirname) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"idirname\", \"l\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, empty) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"empty\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, exists) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"exists\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, match) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"match\", \"l\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, imatch) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"imatch\", \"l\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, name) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"name\", \"l\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, iname) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"iname\", \"l\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, pcre) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"pcre\", \"l\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, ipcre) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"ipcre\", \"l\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, since) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"since\", \"c:0:0\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, size) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"size\", \"eq\", 0] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, suffix) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"suffix\", \"txt\"] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, allof_yes) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"allof\", [\"type\", \"f\"], [\"exists\"]] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Yes));\n}\n\nTEST(ReturnOnlyFilesTest, allof_no) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"allof\", [\"type\", \"d\"], [\"exists\"]] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::No));\n}\n\nTEST(ReturnOnlyFilesTest, allof_unrelated) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"allof\", [\"false\"], [\"exists\"]] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n\nTEST(ReturnOnlyFilesTest, allof_yesno) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"allof\", [\"type\", \"d\"], [\"type\", \"f\"]] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::No));\n}\n\nTEST(ReturnOnlyFilesTest, not_allof_yesno) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"not\",\n        [\"allof\", [\"type\", \"d\"], [\"type\", \"f\"]]] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Yes));\n}\n\nTEST(ReturnOnlyFilesTest, anyof_no) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"allof\", [\"type\", \"d\"], [\"exists\"]] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::No));\n}\n\nTEST(ReturnOnlyFilesTest, anyof_yes) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"anyof\", [\"type\", \"f\"], [\"type\", \"l\"]] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Yes));\n}\n\nTEST(ReturnOnlyFilesTest, anyof_unrelated) {\n  EXPECT_THAT(\n      expr_return_only_files(R\"( [\"not\",\n        [\"anyof\", [\"exists\"], [\"true\"]]] )\"),\n      Optional(QueryExpr::ReturnOnlyFiles::Unrelated));\n}\n"
  },
  {
    "path": "watchman/test/RingBufferTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/portability/GTest.h>\n\n#include \"watchman/RingBuffer.h\"\n\nusing namespace watchman;\n\nTEST(RingBufferTest, writes_can_be_read) {\n  RingBuffer<int> rb{2};\n  rb.write(10);\n  rb.write(11);\n  auto result = rb.readAll();\n  EXPECT_EQ(2, result.size());\n  EXPECT_EQ(10, result[0]);\n  EXPECT_EQ(11, result[1]);\n\n  rb.write(12);\n  result = rb.readAll();\n  EXPECT_EQ(11, result[0]);\n  EXPECT_EQ(12, result[1]);\n}\n\nTEST(RingBufferTest, writes_can_be_cleared) {\n  RingBuffer<int> rb{10};\n  rb.write(3);\n  rb.write(4);\n  auto result = rb.readAll();\n  EXPECT_EQ(2, result.size());\n  EXPECT_EQ(3, result[0]);\n  EXPECT_EQ(4, result[1]);\n  rb.clear();\n  rb.write(5);\n  result = rb.readAll();\n  EXPECT_EQ(1, result.size());\n  EXPECT_EQ(5, result[0]);\n}\n"
  },
  {
    "path": "watchman/test/SerdeTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Serde.h\"\n#include <folly/portability/GTest.h>\n\nnamespace {\nusing namespace watchman;\n\ntemplate <typename T>\nstruct HasField : public serde::Object {\n  T field;\n\n  template <typename X>\n  void map(X& x) {\n    x(\"field\", field);\n  }\n};\n\nTEST(SerdeTest, map_boolean) {\n  HasField<bool> s;\n  s.field = false;\n\n  auto o = serde::encode(s);\n  EXPECT_EQ(JSON_OBJECT, o.type());\n  EXPECT_EQ(1, o.object().size());\n  auto field = o.object().at(\"field\");\n  EXPECT_EQ(false, field.asBool());\n\n  s.field = true;\n  o = serde::encode(s);\n  field = o.object().at(\"field\");\n  EXPECT_EQ(true, field.asBool());\n}\n\ntemplate <typename T>\nvoid roundtrip(const T& value) {\n  HasField<T> s;\n  s.field = value;\n\n  auto result = serde::decode<HasField<T>>(serde::encode(s));\n  EXPECT_EQ(result.field, value);\n}\n\nTEST(SerdeTest, integer_roundtrip) {\n  roundtrip<bool>(false);\n  roundtrip<bool>(true);\n\n  roundtrip<char>(100);\n  roundtrip<signed char>(100);\n  roundtrip<unsigned char>(100);\n  roundtrip<signed short>(100);\n  roundtrip<unsigned short>(100);\n  roundtrip<signed int>(100);\n  roundtrip<unsigned int>(100);\n  roundtrip<signed long>(100);\n  roundtrip<unsigned long>(100);\n  roundtrip<signed long long>(100);\n  roundtrip<unsigned long long>(100);\n\n  roundtrip<int8_t>(100);\n  roundtrip<uint8_t>(100);\n  roundtrip<int16_t>(100);\n  roundtrip<uint16_t>(100);\n  roundtrip<int32_t>(100);\n  roundtrip<uint32_t>(100);\n  roundtrip<int64_t>(100);\n  roundtrip<uint64_t>(100);\n}\n\nTEST(SerdeTest, array_roundtrip) {\n  roundtrip<std::vector<int>>(std::vector<int>{10, 20, -30});\n}\n\nTEST(SerdeTest, map_roundtrip) {\n  roundtrip<std::map<w_string, bool>>(\n      std::map<w_string, bool>{{\"foo\", false}, {\"bar\", true}});\n}\n\nTEST(SerdeTest, missing_keys_are_okay) {\n  {\n    auto decoded = serde::decode<HasField<int>>(json_object());\n    EXPECT_EQ(0, decoded.field);\n  }\n\n  {\n    auto decoded = serde::decode<HasField<std::string>>(json_object());\n    EXPECT_EQ(\"\", decoded.field);\n  }\n}\n\nstruct RequiredField : serde::Object {\n  std::string str;\n\n  template <typename X>\n  void map(X& x) {\n    x.required(\"str\", str);\n  }\n};\n\nTEST(SerdeTest, required_keys_are_necessary) {\n  EXPECT_THROW(serde::decode<RequiredField>(json_object()), serde::MissingKey);\n\n  auto decoded = serde::decode<RequiredField>(\n      json_object({{\"str\", typed_string_to_json(\"value\")}}));\n  EXPECT_EQ(\"value\", decoded.str);\n\n  auto encoded = serde::encode(decoded);\n  EXPECT_EQ(JSON_OBJECT, encoded.type());\n  EXPECT_EQ(1, encoded.object().size());\n  auto str = encoded.object().at(\"str\");\n  EXPECT_EQ(JSON_STRING, str.type());\n  EXPECT_EQ(\"value\", str.asString());\n}\n\nstruct Base : serde::Object {\n  std::string version;\n\n  template <typename X>\n  void map(X& x) {\n    x(\"version\", version);\n  }\n};\n\nstruct Derived : Base {\n  bool yes;\n  int count;\n\n  template <typename X>\n  void map(X& x) {\n    Base::map(x);\n    x(\"yes\", yes);\n    x(\"count\", count);\n  }\n};\n\nTEST(SerdeTest, base_class) {\n  Derived d;\n  d.version = \"ver 15\";\n  d.yes = true;\n  d.count = -45;\n\n  auto o = serde::encode(d);\n  auto& encoded = o.object();\n  EXPECT_EQ(3, encoded.size());\n\n  auto version = encoded.at(\"version\");\n  EXPECT_EQ(JSON_STRING, version.type());\n  EXPECT_EQ(\"ver 15\", version.asString());\n\n  auto yes = encoded.at(\"yes\");\n  EXPECT_EQ(JSON_TRUE, yes.type());\n\n  auto count = encoded.at(\"count\");\n  EXPECT_EQ(JSON_INTEGER, count.type());\n}\n\nstruct OptionalMembers : serde::Object {\n  std::optional<bool> set;\n  std::optional<bool> unset;\n\n  template <typename X>\n  void map(X& x) {\n    x(\"set\", set);\n    x.skip_if_default(\"unset\", unset);\n  }\n};\n\nTEST(SerdeTest, optional_field) {\n  OptionalMembers members;\n\n  {\n    auto o = serde::encode(members);\n    auto& encoded = o.object();\n    EXPECT_EQ(1, encoded.size());\n    EXPECT_EQ(JSON_NULL, encoded.at(\"set\").type());\n\n    OptionalMembers decoded = serde::decode<OptionalMembers>(o);\n    EXPECT_EQ(members.set, decoded.set);\n    EXPECT_EQ(members.unset, decoded.unset);\n  }\n\n  {\n    members.set = true;\n    members.unset = false;\n\n    auto o = serde::encode(members);\n    auto& encoded = o.object();\n    EXPECT_EQ(2, encoded.size());\n    EXPECT_EQ(JSON_TRUE, encoded.at(\"set\").type());\n    EXPECT_EQ(JSON_FALSE, encoded.at(\"unset\").type());\n\n    OptionalMembers decoded = serde::decode<OptionalMembers>(o);\n    EXPECT_EQ(members.set, decoded.set);\n    EXPECT_EQ(members.unset, decoded.unset);\n  }\n}\n\nusing TupleArray = serde::Array<1, int, bool>;\n\nTEST(SerdeTest, arrays_as_tuples) {\n  TupleArray ta;\n\n  {\n    // Encoding a tuple only emits the required and non-default elements.\n    auto o = serde::encode(ta);\n    EXPECT_EQ(JSON_ARRAY, o.type());\n    auto& array = o.array();\n    EXPECT_EQ(1, array.size());\n\n    auto parsed = serde::decode<TupleArray>(o);\n    EXPECT_EQ(0, std::get<0>(parsed));\n    EXPECT_EQ(false, std::get<1>(parsed));\n  }\n\n  std::get<0>(ta) = 10;\n  std::get<1>(ta) = true;\n\n  {\n    // Non-default elements are all emitted.\n    auto o = serde::encode(ta);\n    EXPECT_EQ(JSON_ARRAY, o.type());\n    auto& array = o.array();\n    EXPECT_EQ(2, array.size());\n\n    auto parsed = serde::decode<TupleArray>(o);\n    EXPECT_EQ(10, std::get<0>(parsed));\n    EXPECT_EQ(true, std::get<1>(parsed));\n  }\n}\n\nTEST(SerdeTest, longer_arrays_are_not_rejected) {\n  auto j = json_array(\n      {json_integer(10), json_false(), typed_string_to_json(\"hello world\")});\n  auto ta = serde::decode<TupleArray>(j);\n  EXPECT_EQ(10, std::get<0>(ta));\n  EXPECT_EQ(false, std::get<1>(ta));\n}\n\nstruct SkippedThings : serde::Object {\n  int x = 10;\n  int y = 5;\n\n  template <typename X>\n  void map(X& m) {\n    m.skip_if(\"x\", x, [](const auto& x) { return x == 10; });\n    m.skip_if(\"y\", y, [](const auto& y) { return y == 5; });\n  }\n};\n\nusing MultipleOptionals = serde::Array<0, int, int, int>;\n\nTEST(SerdeTest, non_defaults_after_defaults_are_encoded) {\n  auto json = serde::encode(MultipleOptionals{{0, 0, 10}});\n  EXPECT_EQ(JSON_ARRAY, json.type());\n  auto& arr = json.array();\n  EXPECT_EQ(3, arr.size());\n  EXPECT_EQ(0, arr[0].asInt());\n  EXPECT_EQ(0, arr[1].asInt());\n  EXPECT_EQ(10, arr[2].asInt());\n\n  json = serde::encode(MultipleOptionals{{0, 0, 0}});\n  EXPECT_EQ(JSON_ARRAY, json.type());\n  EXPECT_EQ(0, json.array().size());\n}\n\nTEST(SerdeTest, skip_if) {\n  SkippedThings s;\n\n  {\n    auto o = serde::encode(s);\n    EXPECT_EQ(JSON_OBJECT, o.type());\n    EXPECT_EQ(0, o.object().size());\n\n    auto decoded = serde::decode<SkippedThings>(o);\n    EXPECT_EQ(0, decoded.x);\n    EXPECT_EQ(0, decoded.y);\n  }\n\n  s.x = 0;\n  s.y = 0;\n\n  {\n    auto o = serde::encode(s);\n    EXPECT_EQ(JSON_OBJECT, o.type());\n    auto& map = o.object();\n    EXPECT_EQ(0, map.at(\"x\").asInt());\n    EXPECT_EQ(0, map.at(\"y\").asInt());\n\n    auto decoded = serde::decode<SkippedThings>(o);\n    EXPECT_EQ(0, decoded.x);\n    EXPECT_EQ(0, decoded.y);\n  }\n\n  s.x = 100;\n  s.y = 5;\n\n  {\n    auto o = serde::encode(s);\n    EXPECT_EQ(JSON_OBJECT, o.type());\n    auto& map = o.object();\n    EXPECT_EQ(1, map.size());\n    EXPECT_EQ(100, map.at(\"x\").asInt());\n\n    auto decoded = serde::decode<SkippedThings>(o);\n    EXPECT_EQ(100, decoded.x);\n    // This is a bit strange, but unset keys in a JSON object always produce\n    // default-initialized fields. Therefore, this is 0, not 5.\n    EXPECT_EQ(0, decoded.y);\n  }\n}\n\n} // namespace\n"
  },
  {
    "path": "watchman/test/StringTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/portability/GTest.h>\n#include <string>\n#include \"watchman/watchman_string.h\"\n\nTEST(String, fmt) {\n  EXPECT_EQ(w_string::format(\"hello {}\", \"world\"), w_string(\"hello world\"));\n\n  // Tickle the boundary case between the stack buffer and the dynamic\n  // string construction in w_string::vformat\n  for (size_t i = 1023; i <= 1025; ++i) {\n    std::string a(i, 'a');\n    auto s = w_string::format(\"{}\", a);\n    EXPECT_EQ(s, w_string(a.data(), a.size()));\n  }\n}\n\nTEST(String, integrals) {\n  EXPECT_EQ(w_string::build(int8_t(1)), w_string(\"1\"));\n  EXPECT_EQ(w_string::build(int16_t(1)), w_string(\"1\"));\n  EXPECT_EQ(w_string::build(int32_t(1)), w_string(\"1\"));\n  EXPECT_EQ(w_string::build(int64_t(1)), w_string(\"1\"));\n\n  EXPECT_EQ(w_string::build(int8_t(-1)), w_string(\"-1\"));\n  EXPECT_EQ(w_string::build(int16_t(-1)), w_string(\"-1\"));\n  EXPECT_EQ(w_string::build(int32_t(-1)), w_string(\"-1\"));\n  EXPECT_EQ(w_string::build(int64_t(-1)), w_string(\"-1\"));\n\n  EXPECT_EQ(w_string::build(uint8_t(1)), w_string(\"1\"));\n  EXPECT_EQ(w_string::build(uint16_t(1)), w_string(\"1\"));\n  EXPECT_EQ(w_string::build(uint32_t(1)), w_string(\"1\"));\n  EXPECT_EQ(w_string::build(uint64_t(1)), w_string(\"1\"));\n\n  EXPECT_EQ(w_string::build(uint8_t(255)), w_string(\"255\"));\n  EXPECT_EQ(w_string::build(uint16_t(255)), w_string(\"255\"));\n  EXPECT_EQ(w_string::build(uint32_t(255)), w_string(\"255\"));\n  EXPECT_EQ(w_string::build(uint64_t(255)), w_string(\"255\"));\n\n  EXPECT_EQ(w_string::build(int8_t(-127)), w_string(\"-127\"));\n\n  EXPECT_EQ(w_string::build(bool(true)), w_string(\"true\"));\n  EXPECT_EQ(w_string::build(bool(false)), w_string(\"false\"));\n}\n\nTEST(String, strings) {\n  {\n    auto hello = w_string::build(\"hello\");\n    EXPECT_EQ(hello, w_string(\"hello\"));\n    EXPECT_EQ(hello.size(), 5);\n    EXPECT_TRUE(!strcmp(\"hello\", hello.c_str()))\n        << \"looks nul terminated `\" << hello.c_str() << \"` \"\n        << strlen_uint32(hello.c_str());\n  }\n\n  {\n    w_string_piece piece(\"hello\");\n    EXPECT_EQ(piece.size(), 5);\n    auto hello = w_string::build(piece);\n    EXPECT_EQ(hello.size(), 5);\n    EXPECT_TRUE(!strcmp(\"hello\", hello.c_str())) << \"looks nul terminated\";\n  }\n\n  {\n    char foo[] = \"foo\";\n    auto str = w_string::build(foo);\n    EXPECT_EQ(str.size(), 3);\n    EXPECT_FALSE(str.empty());\n    EXPECT_TRUE(!strcmp(\"foo\", foo)) << \"foo matches\";\n  }\n\n  {\n    w_string defaultStr;\n    EXPECT_TRUE(defaultStr.empty())\n        << \"default constructed string should be empty\";\n\n    w_string movedFrom{\"hello\"};\n    w_string{std::move(movedFrom)};\n    EXPECT_TRUE(movedFrom.empty()) << \"moved-from string should be empty\";\n\n    EXPECT_TRUE(w_string_piece().empty())\n        << \"default constructed string piece shouldbe empty\";\n\n    EXPECT_TRUE(w_string::build(\"\").empty()) << \"empty string is empty\";\n  }\n}\n\nTEST(String, pointers) {\n  bool foo = true;\n  char lowerBuf[20];\n\n  auto str = w_string::build(fmt::ptr(&foo));\n  snprintf(\n      lowerBuf, sizeof(lowerBuf), \"0x%\" PRIx64, (uint64_t)(uintptr_t)(&foo));\n  EXPECT_EQ(str.size(), strlen_uint32(lowerBuf))\n      << \"reasonable seeming bool pointer len, got \" << str.size()\n      << \" vs expected \" << strlen_uint32(lowerBuf);\n  EXPECT_EQ(str.size(), strlen_uint32(str.c_str()))\n      << \"string is really nul terminated, size \" << str.size()\n      << \" strlen of c_str \" << strlen_uint32(str.c_str());\n  EXPECT_TRUE(!strcmp(lowerBuf, str.c_str()))\n      << \"bool pointer rendered right hex value sprintf->\" << lowerBuf\n      << \" str->\" << str.c_str();\n\n  str = w_string::build(nullptr);\n  EXPECT_GT(str.size(), 0);\n  EXPECT_EQ(str, w_string(\"0x0\"));\n\n  void* zero = 0;\n  EXPECT_EQ(w_string::build(zero), \"0x0\");\n}\n\nTEST(String, double) {\n  auto str = w_string::build(5.5);\n  EXPECT_EQ(str, w_string(\"5.5\"));\n}\n\nTEST(String, canon_path) {\n  EXPECT_EQ(\"foo\", w_string_canon_path(\"foo\"));\n  EXPECT_EQ(\"foo\", w_string_canon_path(\"foo/\"));\n  EXPECT_EQ(\"foo\", w_string_canon_path(\"foo//\"));\n  EXPECT_EQ(\"/foo\", w_string_canon_path(\"/foo\"));\n  EXPECT_EQ(\"foo/bar\", w_string_canon_path(\"foo/bar\"));\n}\n\nTEST(String, concat) {\n  auto str = w_string::build(\"one\", 2, \"three\", 1.2, false, w_string_piece{});\n  EXPECT_EQ(str, w_string(\"one2three1.2false\"));\n}\n\nTEST(String, lowercase_suffix) {\n  EXPECT_FALSE(w_string(\"\").asLowerCaseSuffix());\n  EXPECT_EQ(w_string(\".\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(w_string(\"endwithdot.\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_FALSE(w_string(\"nosuffix\").asLowerCaseSuffix());\n  EXPECT_EQ(\n      w_string(\".beginwithdot\").asLowerCaseSuffix(), w_string(\"beginwithdot\"));\n  EXPECT_EQ(\n      w_string(\"MainActivity.java\").asLowerCaseSuffix(), w_string(\"java\"));\n  EXPECT_EQ(w_string(\"README.TXT\").asLowerCaseSuffix(), w_string(\"txt\"));\n  EXPECT_EQ(\n      w_string(\"README.camelCaseSuffix\").asLowerCaseSuffix(),\n      w_string(\"camelcasesuffix\"));\n  EXPECT_EQ(w_string(\"foo/bar\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(w_string(\"foo.wat/bar\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(w_string(\"foo.wat/bar.xml\").asLowerCaseSuffix(), w_string(\"xml\"));\n  EXPECT_EQ(w_string(\"foo\\\\bar\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(w_string(\"foo\\\\bar.lU\").asLowerCaseSuffix(), w_string(\"lu\"));\n\n#ifdef _WIN32\n  EXPECT_EQ(w_string(\"foo.wat\\\\bar\").asLowerCaseSuffix(), std::nullopt);\n#else\n  EXPECT_EQ(w_string(\"foo.wat\\\\bar\").asLowerCaseSuffix(), w_string(\"wat\\\\bar\"));\n#endif\n\n  // 255 is the longest suffix among some systems\n  std::string longName(255, 'a');\n  auto str = w_string::build(\".\", longName.c_str());\n  EXPECT_EQ(str.asLowerCaseSuffix()->size(), 255);\n}\n\nTEST(String, string_piece_suffix) {\n  EXPECT_EQ(w_string_piece().suffix(), \"\");\n  EXPECT_EQ(w_string_piece(\"\").suffix(), \"\");\n  EXPECT_EQ(w_string_piece(\".\").suffix(), \"\");\n  EXPECT_EQ(w_string_piece(\"endwithdot.\").suffix(), \"\");\n  EXPECT_EQ(w_string_piece(\"nosuffix\").suffix(), \"\");\n  EXPECT_EQ(\n      w_string_piece(\".beginwithdot\").suffix(), w_string_piece(\"beginwithdot\"));\n  EXPECT_EQ(\n      w_string_piece(\"MainActivity.java\").suffix(), w_string_piece(\"java\"));\n  EXPECT_EQ(w_string_piece(\"README.TXT\").suffix(), w_string_piece(\"TXT\"));\n  EXPECT_EQ(\n      w_string_piece(\"README.camelCaseSuffix\").suffix(),\n      w_string_piece(\"camelCaseSuffix\"));\n  EXPECT_EQ(w_string_piece(\"foo/bar\").suffix(), \"\");\n  EXPECT_EQ(w_string_piece(\"foo.wat/bar\").suffix(), \"\");\n  EXPECT_EQ(w_string_piece(\"foo.wat/bar.xml\").suffix(), \"xml\");\n  EXPECT_EQ(w_string_piece(\"foo\\\\bar\").suffix(), \"\");\n  EXPECT_EQ(w_string_piece(\"foo\\\\bar.lU\").suffix(), \"lU\");\n\n#ifdef _WIN32\n  EXPECT_EQ(w_string_piece(\"foo.wat\\\\bar\").suffix(), \"\");\n#else\n  EXPECT_EQ(\n      w_string_piece(\"foo.wat\\\\bar\").suffix(), w_string_piece(\"wat\\\\bar\"));\n#endif\n\n  // 255 is the longest suffix among some systems\n  std::string longName(255, 'a');\n  auto str = w_string::build(\".\", longName.c_str());\n  auto sp = w_string_piece(str.data(), str.size());\n  EXPECT_EQ(sp.asLowerCaseSuffix()->size(), 255);\n}\n\nTEST(String, string_piece_lowercase_suffix) {\n  EXPECT_EQ(w_string_piece().asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(w_string_piece(\"\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(w_string_piece(\".\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(w_string_piece(\"endwithdot.\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_FALSE(w_string_piece(\"nosuffix\").asLowerCaseSuffix());\n  EXPECT_EQ(\n      w_string_piece(\".beginwithdot\").asLowerCaseSuffix(),\n      w_string(\"beginwithdot\"));\n  EXPECT_EQ(\n      w_string_piece(\"MainActivity.java\").asLowerCaseSuffix(),\n      w_string(\"java\"));\n  EXPECT_EQ(w_string_piece(\"README.TXT\").asLowerCaseSuffix(), w_string(\"txt\"));\n  EXPECT_EQ(\n      w_string_piece(\"README.camelCaseSuffix\").asLowerCaseSuffix(),\n      w_string(\"camelcasesuffix\"));\n  EXPECT_EQ(w_string_piece(\"foo/bar\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(w_string_piece(\"foo.wat/bar\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(\n      w_string_piece(\"foo.wat/bar.xml\").asLowerCaseSuffix(), w_string(\"xml\"));\n  EXPECT_EQ(w_string_piece(\"foo\\\\bar\").asLowerCaseSuffix(), std::nullopt);\n  EXPECT_EQ(w_string_piece(\"foo\\\\bar.lU\").asLowerCaseSuffix(), w_string(\"lu\"));\n\n#ifdef _WIN32\n  EXPECT_EQ(w_string_piece(\"foo.wat\\\\bar\").asLowerCaseSuffix(), std::nullopt);\n#else\n  EXPECT_EQ(\n      w_string_piece(\"foo.wat\\\\bar\").asLowerCaseSuffix(), w_string(\"wat\\\\bar\"));\n#endif\n\n  // 255 is the longest suffix among some systems\n  std::string longName(255, 'a');\n  auto str = w_string::build(\".\", longName.c_str());\n  auto sp = w_string_piece(str.c_str(), str.size());\n  EXPECT_EQ(sp.asLowerCaseSuffix()->size(), 255);\n}\n\nTEST(String, path_cat) {\n  auto str = w_string::pathCat({\"foo\", \"\"});\n  EXPECT_EQ(\"foo\", str);\n  EXPECT_EQ(3, str.size());\n\n  str = w_string::pathCat({\"\", \"foo\"});\n  EXPECT_EQ(\"foo\", str);\n  EXPECT_EQ(3, str.size());\n\n  str = w_string::pathCat({\"foo\", \"bar\"});\n  EXPECT_EQ(\"foo/bar\", str);\n  EXPECT_EQ(7, str.size());\n\n  str = w_string::pathCat({\"foo\", \"bar\", \"\"});\n  EXPECT_EQ(\"foo/bar\", str);\n  EXPECT_EQ(7, str.size());\n\n  str = w_string::pathCat({\"foo\", \"\", \"bar\"});\n  EXPECT_EQ(\"foo/bar\", str);\n  EXPECT_EQ(7, str.size());\n}\n\nTEST(String, basename_dirname) {\n  auto str = w_string_piece(\"foo/bar\").baseName().asWString();\n  EXPECT_EQ(str, \"bar\");\n\n  str = w_string_piece(\"foo/bar\").dirName().asWString();\n  EXPECT_EQ(str, \"foo\");\n\n  str = w_string_piece(\"\").baseName().asWString();\n  EXPECT_EQ(str, \"\");\n\n  str = w_string_piece(\"\").dirName().asWString();\n  EXPECT_EQ(str, \"\");\n\n  str = w_string_piece(\"foo\").dirName().asWString();\n  EXPECT_EQ(str, \"\");\n\n  str = w_string(\"f/b/z\");\n  auto piece = str.piece().dirName();\n  auto str2 = piece.baseName().asWString();\n  EXPECT_EQ(str2, \"b\");\n\n  str = w_string_piece(\"foo/bar/baz\").dirName().dirName().asWString();\n  EXPECT_EQ(str, \"foo\");\n\n  str = w_string_piece(\"foo\").baseName().asWString();\n  EXPECT_EQ(str, \"foo\");\n\n  str = w_string_piece(\"foo\\\\bar\").baseName().asWString();\n#ifdef _WIN32\n  EXPECT_EQ(str, \"bar\");\n#else\n  EXPECT_EQ(str, \"foo\\\\bar\");\n#endif\n\n  str = w_string_piece(\"foo\\\\bar\").dirName().asWString();\n#ifdef _WIN32\n  EXPECT_EQ(str, \"foo\");\n#else\n  EXPECT_EQ(str, \"\");\n#endif\n\n#ifdef _WIN32\n  w_string_piece winFoo(\"C:\\\\foo\");\n\n  str = winFoo.baseName().asWString();\n  EXPECT_EQ(str, \"foo\");\n\n  str = winFoo.dirName().asWString();\n  EXPECT_EQ(str, \"C:\\\\\");\n\n  str = winFoo.dirName().dirName().asWString();\n  EXPECT_EQ(str, \"C:\\\\\");\n#endif\n\n  // This is testing that we don't walk off the end of the string.\n  // We had a bug where if the buffer had a slash as the character\n  // after the end of the string, baseName and dirName could incorrectly\n  // match that position and trigger a string range check.\n  // The endSlash string below has 7 characters, with the 8th byte\n  // as a slash to trigger this condition.\n  w_string_piece endSlash(\"dir/foo/\", 7);\n  str = endSlash.baseName().asWString();\n  EXPECT_EQ(str, \"foo\");\n  str = endSlash.dirName().asWString();\n  EXPECT_EQ(str, \"dir\");\n}\n\nTEST(String, operators) {\n  EXPECT_LT(w_string_piece(\"a\"), w_string_piece(\"b\"));\n  EXPECT_LT(w_string_piece(\"a\"), w_string_piece(\"ba\"));\n  EXPECT_LT(w_string_piece(\"aa\"), w_string_piece(\"b\"));\n  EXPECT_TRUE(!(w_string_piece(\"b\") < w_string_piece(\"a\"))) << \"b not < a\";\n  EXPECT_TRUE(!(w_string_piece(\"a\") < w_string_piece(\"a\"))) << \"a not < a\";\n  EXPECT_LT(w_string_piece(\"A\"), w_string_piece(\"a\"));\n}\n\nTEST(String, piece_and_string_should_have_same_hash) {\n  EXPECT_EQ(w_string{\"\"}.hashValue(), w_string_piece{\"\"}.hashValue());\n  EXPECT_EQ(\n      w_string{\"foobar\"}.hashValue(), w_string_piece{\"foobar\"}.hashValue());\n}\n\nTEST(String, split) {\n  {\n    std::vector<std::string> expected{\"a\", \"b\", \"c\"};\n    std::vector<std::string> result;\n    w_string_piece(\"a:b:c\").split(result, ':');\n\n    EXPECT_TRUE(expected == result) << \"split ok\";\n  }\n\n  {\n    std::vector<w_string> expected{\"a\", \"b\", \"c\"};\n    std::vector<w_string> result;\n    w_string_piece(\"a:b:c\").split(result, ':');\n\n    EXPECT_TRUE(expected == result) << \"split ok (w_string)\";\n  }\n\n  {\n    std::vector<std::string> expected{\"a\", \"b\", \"c\"};\n    std::vector<std::string> result;\n    w_string_piece(\"a:b:c:\").split(result, ':');\n\n    EXPECT_TRUE(expected == result)\n        << \"split doesn't create empty last element\";\n  }\n\n  {\n    std::vector<std::string> expected{\"a\", \"b\", \"\", \"c\"};\n    std::vector<std::string> result;\n    w_string_piece(\"a:b::c:\").split(result, ':');\n\n    EXPECT_TRUE(expected == result) << \"split does create empty element\";\n  }\n\n  {\n    std::vector<std::string> result;\n    w_string_piece().split(result, ':');\n    EXPECT_TRUE(result.size() == 0)\n        << \"split as 0 elements, got \" << result.size();\n\n    w_string_piece(w_string()).split(result, ':');\n    EXPECT_TRUE(result.size() == 0)\n        << \"split as 0 elements, got \" << result.size();\n  }\n}\n\nTEST(String, path_equal) {\n  EXPECT_TRUE(w_string_piece(\"/foo/bar\").pathIsEqual(\"/foo/bar\"));\n  EXPECT_TRUE(!w_string_piece(\"/foo/bar\").pathIsEqual(\"/Foo/bar\"));\n#ifdef _WIN32\n  EXPECT_TRUE(w_string_piece(\"c:/foo/bar\").pathIsEqual(\"C:/foo/bar\"))\n      << \"allow different case for drive letter only c:/foo/bar\";\n  EXPECT_TRUE(w_string_piece(\"c:/foo\\\\bar\").pathIsEqual(\"C:/foo/bar\"))\n      << \"allow different slashes c:/foo\\\\bar\";\n  EXPECT_TRUE(!w_string_piece(\"c:/Foo/bar\").pathIsEqual(\"C:/foo/bar\"))\n      << \"strict case in the other positions c:/Foo/bar\";\n#endif\n}\n\nTEST(String, truncated_head) {\n  char head[8];\n  storeTruncatedHead(head, w_string_piece{\"foo\"});\n  EXPECT_EQ(\n      w_string_piece{\"foo\"}, w_string_piece(head, strnlen(head, sizeof(head))));\n\n  storeTruncatedHead(head, w_string_piece{\"0123456\"});\n  EXPECT_EQ(\n      w_string_piece{\"0123456\"},\n      w_string_piece(head, strnlen(head, sizeof(head))));\n\n  storeTruncatedHead(head, w_string_piece{\"01234567\"});\n  EXPECT_EQ(\n      w_string_piece{\"01234567\"},\n      w_string_piece(head, strnlen(head, sizeof(head))));\n\n  storeTruncatedHead(head, w_string_piece{\"012345678\"});\n  EXPECT_EQ(\n      w_string_piece{\"01234...\"},\n      w_string_piece(head, strnlen(head, sizeof(head))));\n}\n\nTEST(String, truncated_tail) {\n  char head[8];\n  storeTruncatedTail(head, w_string_piece{\"foo\"});\n  EXPECT_EQ(\n      w_string_piece{\"foo\"}, w_string_piece(head, strnlen(head, sizeof(head))));\n\n  storeTruncatedTail(head, w_string_piece{\"0123456\"});\n  EXPECT_EQ(\n      w_string_piece{\"0123456\"},\n      w_string_piece(head, strnlen(head, sizeof(head))));\n\n  storeTruncatedTail(head, w_string_piece{\"01234567\"});\n  EXPECT_EQ(\n      w_string_piece{\"01234567\"},\n      w_string_piece(head, strnlen(head, sizeof(head))));\n\n  storeTruncatedTail(head, w_string_piece{\"012345678\"});\n  EXPECT_EQ(\n      w_string_piece{\"...45678\"},\n      w_string_piece(head, strnlen(head, sizeof(head))));\n}\n\nTEST(String, contains) {\n  w_string data{\"watchman\"};\n  w_string_piece haystack{data};\n  EXPECT_TRUE(haystack.contains(\"atch\"));\n  EXPECT_FALSE(haystack.contains(\"maan\"));\n  EXPECT_TRUE(haystack.contains(\"\"));\n  EXPECT_TRUE(haystack.contains(\"watchman\"));\n  EXPECT_FALSE(haystack.contains(\"watchman2\"));\n}\n\nTEST(String, allocate_many_sizes) {\n  // This strange test relies on ASAN to assert that our allocation size math is\n  // correct.\n  EXPECT_EQ(0, w_string(\"\", 0).size());\n  EXPECT_EQ(1, w_string(\"x\", 1).size());\n  EXPECT_EQ(2, w_string(\"xx\", 2).size());\n  EXPECT_EQ(3, w_string(\"xxx\", 3).size());\n  EXPECT_EQ(4, w_string(\"xxxx\", 4).size());\n  EXPECT_EQ(5, w_string(\"xxxxx\", 5).size());\n  EXPECT_EQ(6, w_string(\"xxxxxx\", 6).size());\n  EXPECT_EQ(7, w_string(\"xxxxxxx\", 7).size());\n  EXPECT_EQ(8, w_string(\"xxxxxxxx\", 8).size());\n}\n"
  },
  {
    "path": "watchman/test/SuffixQueryTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/portability/GMock.h>\n#include <folly/portability/GTest.h>\n#include <folly/test/TestUtils.h>\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryExpr.h\"\n#include \"watchman/query/TermRegistry.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\nusing namespace watchman;\nusing namespace testing;\n\nnamespace {\n\nstd::optional<json_ref> parse_json(std::string expression_json) {\n  json_error_t err{};\n  auto expression = json_loads(expression_json.c_str(), JSON_DECODE_ANY, &err);\n  if (!expression.has_value()) {\n    ADD_FAILURE() << \"JSON parse error in fixture: \" << err.text << \" at \"\n                  << err.source << \":\" << err.line << \":\" << err.column;\n    return std::nullopt;\n  }\n  return expression;\n}\n\nstd::optional<SimpleSuffixType> expr_evaluate_simple_suffix(\n    std::string expression_json) {\n  json_error_t err{};\n  auto expression = parse_json(expression_json);\n  if (!expression.has_value()) {\n    return std::nullopt;\n  }\n  Query query;\n  // Disable automatic parsing of \"match\" as \"imatch\", \"name\" as \"iname\", etc.\n  auto expr = watchman::parseQueryExpr(&query, *expression);\n  return expr->evaluateSimpleSuffix();\n}\n\nstd::optional<std::vector<std::string>> expr_get_suffix_glob(\n    std::string expression_json) {\n  json_error_t err{};\n  auto expression = parse_json(expression_json);\n  if (!expression.has_value()) {\n    return std::nullopt;\n  }\n  Query query;\n  // Disable automatic parsing of \"match\" as \"imatch\", \"name\" as \"iname\", etc.\n  auto expr = watchman::parseQueryExpr(&query, *expression);\n  auto rv = expr->getSuffixQueryGlobPatterns();\n  std::sort(rv.begin(), rv.end());\n  return rv;\n}\n\n} // namespace\n\nTEST(SuffixQueryTest, false) {\n  EXPECT_THAT(\n      expr_evaluate_simple_suffix(R\"( [\"false\"] )\"),\n      Optional(SimpleSuffixType::Excluded));\n}\n\nTEST(SuffixQueryTest, false_glob) {\n  EXPECT_THAT(\n      expr_get_suffix_glob(R\"( [\"false\"] )\"),\n      Optional(std::vector<std::string>{}));\n}\n\nTEST(SuffixQueryTest, type_d) {\n  EXPECT_THAT(\n      expr_evaluate_simple_suffix(R\"( [\"type\", \"d\"] )\"),\n      Optional(SimpleSuffixType::Excluded));\n}\n\nTEST(SuffixQueryTest, type_d_glob) {\n  EXPECT_THAT(\n      expr_get_suffix_glob(R\"( [\"type\", \"d\"] )\"),\n      Optional(std::vector<std::string>{}));\n}\n\nTEST(SuffixQueryTest, type_f) {\n  EXPECT_THAT(\n      expr_evaluate_simple_suffix(R\"( [\"type\", \"f\"] )\"),\n      Optional(SimpleSuffixType::Type));\n}\n\nTEST(SuffixQueryTest, type_f_glob) {\n  EXPECT_THAT(\n      expr_get_suffix_glob(R\"( [\"type\", \"f\"] )\"),\n      Optional(std::vector<std::string>{}));\n}\nTEST(SuffixQueryTest, suffix) {\n  EXPECT_THAT(\n      expr_evaluate_simple_suffix(R\"( [\"suffix\", [\"a\", \"f\"]] )\"),\n      Optional(SimpleSuffixType::Suffix));\n}\n\nTEST(SuffixQueryTest, suffix_glob) {\n  EXPECT_THAT(\n      expr_get_suffix_glob(R\"( [\"suffix\", [\"a\", \"f\"]] )\"),\n      Optional(std::vector<std::string>{\"**/*.a\", \"**/*.f\"}));\n}\n\nTEST(SuffixQueryTest, allof_excl) {\n  EXPECT_THAT(\n      expr_evaluate_simple_suffix(R\"( [\"allof\", [\"type\", \"f\"], [\"exists\"]] )\"),\n      Optional(SimpleSuffixType::Excluded));\n}\n\nTEST(SuffixQueryTest, allof_excl_glob) {\n  EXPECT_THAT(\n      expr_get_suffix_glob(R\"( [\"allof\", [\"type\", \"f\"], [\"exists\"]] )\"),\n      Optional(std::vector<std::string>{}));\n}\n\nTEST(SuffixQueryTest, allof_yes) {\n  EXPECT_THAT(\n      expr_evaluate_simple_suffix(\n          R\"( [\"allof\", [\"type\", \"f\"], [\"suffix\", [\"a\"]]] )\"),\n      Optional(SimpleSuffixType::IsSimpleSuffix));\n}\n\nTEST(SuffixQueryTest, allof_yes_glob) {\n  EXPECT_THAT(\n      expr_get_suffix_glob(R\"( [\"allof\", [\"type\", \"f\"], [\"suffix\", [\"a\"]]] )\"),\n      Optional(std::vector<std::string>{\"**/*.a\"}));\n}\n"
  },
  {
    "path": "watchman/test/WatcherSelectionDarwinTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/config.h\" // @donotremove\n\n#if defined(HAVE_CORESERVICES_CORESERVICES_H) && defined(__APPLE__)\n\n#include <folly/portability/GTest.h>\n\n#include <CoreServices/CoreServices.h> // @manual\n#include <string_view>\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/test/lib/FakeFileSystem.h\"\n#include \"watchman/watcher/WatcherRegistry.h\"\n\nusing namespace watchman;\n\nnamespace {\nConfiguration getConfiguration(bool perferSplit) {\n  json_ref json = json_object();\n  json_object_set(\n      json, \"prefer_split_fsevents_watcher\", json_boolean(perferSplit));\n  json_object_set(json, \"watcher\", typed_string_to_json(\"auto\"));\n  return Configuration{std::move(json)};\n}\n\nclass WatcherSelectionDarwinTest\n    : public testing::TestWithParam<bool /* split */> {\n public:\n  const w_string root_str{FAKEFS_ROOT \"root\"};\n  const w_string fs_type{\"apfs\"};\n  Configuration config = getConfiguration(GetParam());\n};\n\n#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \\\n    (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)\n\nTEST_P(WatcherSelectionDarwinTest, selectionTest) {\n  if (GetParam()) {\n    // prefer_split_fsevents_watcher but it isn't an option, so use kqueue.\n    auto view = WatcherRegistry::initWatcher(root_str, fs_type, config);\n    EXPECT_EQ(\"kqueue\", view->getName());\n  } else {\n    // prefer_split_fsevents_watcher isnt an option and doen't want\n    auto view = WatcherRegistry::initWatcher(root_str, fs_type, config);\n    EXPECT_EQ(\"kqueue\", view->getName());\n  }\n}\n#else\nTEST_P(WatcherSelectionDarwinTest, selectionTest) {\n  if (GetParam()) {\n    // prefer_split_fsevents_watcher an option and want\n    auto view = WatcherRegistry::initWatcher(root_str, fs_type, config);\n    EXPECT_EQ(\"kqueue+fsevents\", view->getName());\n  } else {\n    // prefer_split_fsevents_watcher an option but doen't want\n    auto view = WatcherRegistry::initWatcher(root_str, fs_type, config);\n    EXPECT_EQ(\"fsevents\", view->getName());\n  }\n}\n#endif\n\nINSTANTIATE_TEST_CASE_P(\n    WatcherSelectionConfig,\n    WatcherSelectionDarwinTest,\n    testing::Values(true, false));\n\n} // namespace\n\n#endif // HAVE_CORESERVICES_CORESERVICES_H && __APPLE__\n"
  },
  {
    "path": "watchman/test/WildmatchTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/watchman_system.h\"\n\n#include <folly/String.h>\n#include <folly/portability/GTest.h>\n#include \"watchman/thirdparty/jansson/jansson.h\"\n#include \"watchman/thirdparty/wildmatch/wildmatch.h\"\n\n#define WILDMATCH_TEST_JSON_FILE \"watchman/test/WildmatchTest.json\"\n\nstatic void run_test(const json_ref& test_case_data) {\n  auto wildmatch_should_succeed = test_case_data.at(0).asBool();\n  auto wildmatch_flags = test_case_data.at(1).asInt();\n  auto text_to_match = json_string_value(test_case_data.at(2));\n  auto pattern_to_use = json_string_value(test_case_data.at(3));\n\n  auto wildmatch_succeeded =\n      wildmatch(pattern_to_use, text_to_match, wildmatch_flags, nullptr) ==\n      WM_MATCH;\n  EXPECT_EQ(wildmatch_succeeded, wildmatch_should_succeed)\n      << \"Pattern [\" << pattern_to_use << \"] matching text [\" << text_to_match\n      << \"] with flags \" << wildmatch_flags;\n}\n\nTEST(WildMatch, tests) {\n  FILE* test_cases_file;\n  json_error_t error;\n\n  test_cases_file = fopen(WILDMATCH_TEST_JSON_FILE, \"r\");\n#ifdef WATCHMAN_TEST_SRC_DIR\n  if (!test_cases_file) {\n    test_cases_file =\n        fopen(WATCHMAN_TEST_SRC_DIR \"/\" WILDMATCH_TEST_JSON_FILE, \"r\");\n  }\n#endif\n  if (!test_cases_file) {\n    test_cases_file = fopen(\"watchman/\" WILDMATCH_TEST_JSON_FILE, \"r\");\n  }\n  if (!test_cases_file) {\n    throw std::runtime_error(\n        fmt::format(\n            \"Couldn't open {}: {}\",\n            WILDMATCH_TEST_JSON_FILE,\n            folly::errnoStr(errno)));\n  }\n  auto test_cases = json_loadf(test_cases_file, 0, &error);\n  if (!test_cases) {\n    throw std::runtime_error(\n        fmt::format(\n            \"Error decoding JSON: {} (source={}, line={}, col={})\",\n            error.text,\n            error.source,\n            error.line,\n            error.column));\n  }\n  EXPECT_EQ(fclose(test_cases_file), 0);\n  EXPECT_TRUE(test_cases.value().isArray())\n      << \"Expected JSON in \" << WILDMATCH_TEST_JSON_FILE << \"  to be an array\";\n\n  for (auto& test_case_data : test_cases.value().array()) {\n    run_test(test_case_data);\n  }\n}\n"
  },
  {
    "path": "watchman/test/WildmatchTest.json",
    "content": "[\n[true, 2, \"foo\", \"foo\"],\n[false, 2, \"foo\", \"bar\"],\n[true, 2, \"\", \"\"],\n[true, 2, \"foo\", \"???\"],\n[false, 2, \"foo\", \"??\"],\n[true, 2, \"foo\", \"*\"],\n[true, 2, \"foo\", \"f*\"],\n[false, 2, \"foo\", \"*f\"],\n[true, 2, \"foo\", \"*foo*\"],\n[true, 2, \"foobar\", \"*ob*a*r*\"],\n[true, 2, \"aaaaaaabababab\", \"*ab\"],\n[true, 2, \"foo*\", \"foo\\\\*\"],\n[false, 2, \"foobar\", \"foo\\\\*bar\"],\n[true, 2, \"f\\\\oo\", \"f\\\\\\\\oo\"],\n[true, 2, \"ball\", \"*[al]?\"],\n[false, 2, \"ten\", \"[ten]\"],\n[true, 0, \"ten\", \"**[!te]\"],\n[false, 0, \"ten\", \"**[!ten]\"],\n[false, 2, \"ten\", \"**[!te]\"],\n[false, 2, \"ten\", \"**[!ten]\"],\n[true, 2, \"ten\", \"t[a-g]n\"],\n[false, 2, \"ten\", \"t[!a-g]n\"],\n[true, 2, \"ton\", \"t[!a-g]n\"],\n[true, 2, \"ton\", \"t[^a-g]n\"],\n[true, 2, \"a]b\", \"a[]]b\"],\n[true, 2, \"a-b\", \"a[]-]b\"],\n[true, 2, \"a]b\", \"a[]-]b\"],\n[false, 2, \"aab\", \"a[]-]b\"],\n[true, 2, \"aab\", \"a[]a-]b\"],\n[true, 2, \"]\", \"]\"],\n[false, 2, \"foo/baz/bar\", \"foo*bar\"],\n[true, 0, \"foo/baz/bar\", \"foo**bar\"],\n[false, 2, \"foo/baz/bar\", \"foo**bar\"],\n[false, 2, \"foo/bar\", \"foo?bar\"],\n[false, 2, \"foo/bar\", \"foo[/]bar\"],\n[true, 0, \"foo/bar\", \"f[^eiu][^eiu][^eiu][^eiu][^eiu]r\"],\n[false, 2, \"foo/bar\", \"f[^eiu][^eiu][^eiu][^eiu][^eiu]r\"],\n[true, 0, \"foo-bar\", \"f[^eiu][^eiu][^eiu][^eiu][^eiu]r\"],\n[true, 2, \"foo-bar\", \"f[^eiu][^eiu][^eiu][^eiu][^eiu]r\"],\n[false, 0, \"foo\", \"**/foo\"],\n[true, 2, \"foo\", \"**/foo\"],\n[true, 2, \"/foo\", \"**/foo\"],\n[true, 2, \"bar/baz/foo\", \"**/foo\"],\n[false, 2, \"bar/baz/foo\", \"*/foo\"],\n[false, 2, \"foo/bar/baz\", \"**/bar*\"],\n[true, 2, \"deep/foo/bar/baz\", \"**/bar/*\"],\n[false, 2, \"deep/foo/bar/baz/\", \"**/bar/*\"],\n[true, 2, \"deep/foo/bar/baz/\", \"**/bar/**\"],\n[false, 2, \"deep/foo/bar\", \"**/bar/*\"],\n[true, 2, \"deep/foo/bar/\", \"**/bar/**\"],\n[true, 0, \"foo/bar/baz\", \"**/bar**\"],\n[false, 2, \"foo/bar/baz\", \"**/bar**\"],\n[true, 2, \"foo/bar/baz/x\", \"*/bar/**\"],\n[false, 2, \"deep/foo/bar/baz/x\", \"*/bar/**\"],\n[true, 2, \"deep/foo/bar/baz/x\", \"**/bar/*/*\"],\n[false, 2, \"acrt\", \"a[c-c]st\"],\n[true, 2, \"acrt\", \"a[c-c]rt\"],\n[false, 2, \"]\", \"[!]-]\"],\n[true, 2, \"a\", \"[!]-]\"],\n[false, 2, \"\", \"\\\\\"],\n[false, 2, \"\\\\\", \"\\\\\"],\n[false, 2, \"/\\\\\", \"*/\\\\\"],\n[true, 2, \"/\\\\\", \"*/\\\\\\\\\"],\n[true, 2, \"foo\", \"foo\"],\n[true, 2, \"@foo\", \"@foo\"],\n[false, 2, \"foo\", \"@foo\"],\n[true, 2, \"[ab]\", \"\\\\[ab]\"],\n[true, 2, \"[ab]\", \"[[]ab]\"],\n[true, 2, \"[ab]\", \"[[:]ab]\"],\n[false, 2, \"[ab]\", \"[[::]ab]\"],\n[true, 2, \"[ab]\", \"[[:digit]ab]\"],\n[true, 2, \"[ab]\", \"[\\\\[:]ab]\"],\n[true, 2, \"?a?b\", \"\\\\??\\\\?b\"],\n[true, 2, \"abc\", \"\\\\a\\\\b\\\\c\"],\n[false, 2, \"foo\", \"\"],\n[true, 2, \"foo/bar/baz/to\", \"**/t[o]\"],\n[true, 2, \"a1B\", \"[[:alpha:]][[:digit:]][[:upper:]]\"],\n[false, 2, \"a\", \"[[:digit:][:upper:][:space:]]\"],\n[true, 2, \"A\", \"[[:digit:][:upper:][:space:]]\"],\n[true, 2, \"1\", \"[[:digit:][:upper:][:space:]]\"],\n[false, 2, \"1\", \"[[:digit:][:upper:][:spaci:]]\"],\n[true, 2, \" \", \"[[:digit:][:upper:][:space:]]\"],\n[false, 2, \".\", \"[[:digit:][:upper:][:space:]]\"],\n[true, 2, \".\", \"[[:digit:][:punct:][:space:]]\"],\n[true, 2, \"5\", \"[[:xdigit:]]\"],\n[true, 2, \"f\", \"[[:xdigit:]]\"],\n[true, 2, \"D\", \"[[:xdigit:]]\"],\n[true, 2, \"_\", \"[[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]\"],\n[true, 2, \"\\u007F\", \"[^[:alnum:][:alpha:][:blank:][:digit:][:graph:][:lower:][:print:][:punct:][:space:][:upper:][:xdigit:]]\"],\n[true, 2, \".\", \"[^[:alnum:][:alpha:][:blank:][:cntrl:][:digit:][:lower:][:space:][:upper:][:xdigit:]]\"],\n[true, 2, \"5\", \"[a-c[:digit:]x-z]\"],\n[true, 2, \"b\", \"[a-c[:digit:]x-z]\"],\n[true, 2, \"y\", \"[a-c[:digit:]x-z]\"],\n[false, 2, \"q\", \"[a-c[:digit:]x-z]\"],\n[true, 2, \"]\", \"[\\\\\\\\-^]\"],\n[false, 2, \"[\", \"[\\\\\\\\-^]\"],\n[true, 2, \"-\", \"[\\\\-_]\"],\n[true, 2, \"]\", \"[\\\\]]\"],\n[false, 2, \"\\\\]\", \"[\\\\]]\"],\n[false, 2, \"\\\\\", \"[\\\\]]\"],\n[false, 2, \"ab\", \"a[]b\"],\n[false, 2, \"a[]b\", \"a[]b\"],\n[false, 2, \"ab[\", \"ab[\"],\n[false, 2, \"ab\", \"[!\"],\n[false, 2, \"ab\", \"[-\"],\n[true, 2, \"-\", \"[-]\"],\n[false, 2, \"-\", \"[a-\"],\n[false, 2, \"-\", \"[!a-\"],\n[true, 2, \"-\", \"[--A]\"],\n[true, 2, \"5\", \"[--A]\"],\n[true, 2, \" \", \"[ --]\"],\n[true, 2, \"$\", \"[ --]\"],\n[true, 2, \"-\", \"[ --]\"],\n[false, 2, \"0\", \"[ --]\"],\n[true, 2, \"-\", \"[---]\"],\n[true, 2, \"-\", \"[------]\"],\n[false, 2, \"j\", \"[a-e-n]\"],\n[true, 2, \"-\", \"[a-e-n]\"],\n[true, 2, \"a\", \"[!------]\"],\n[false, 2, \"[\", \"[]-a]\"],\n[true, 2, \"^\", \"[]-a]\"],\n[false, 2, \"^\", \"[!]-a]\"],\n[true, 2, \"[\", \"[!]-a]\"],\n[true, 2, \"^\", \"[a^bc]\"],\n[true, 2, \"-b]\", \"[a-]b]\"],\n[false, 2, \"\\\\\", \"[\\\\]\"],\n[true, 2, \"\\\\\", \"[\\\\\\\\]\"],\n[false, 2, \"\\\\\", \"[!\\\\\\\\]\"],\n[true, 2, \"G\", \"[A-\\\\\\\\]\"],\n[false, 2, \"aaabbb\", \"b*a\"],\n[false, 2, \"aabcaa\", \"*ba*\"],\n[true, 2, \",\", \"[,]\"],\n[true, 2, \",\", \"[\\\\\\\\,]\"],\n[true, 2, \"\\\\\", \"[\\\\\\\\,]\"],\n[true, 2, \"-\", \"[,-.]\"],\n[false, 2, \"+\", \"[,-.]\"],\n[false, 2, \"-.]\", \"[,-.]\"],\n[true, 2, \"2\", \"[\\\\1-\\\\3]\"],\n[true, 2, \"3\", \"[\\\\1-\\\\3]\"],\n[false, 2, \"4\", \"[\\\\1-\\\\3]\"],\n[true, 2, \"\\\\\", \"[[-\\\\]]\"],\n[true, 2, \"[\", \"[[-\\\\]]\"],\n[true, 2, \"]\", \"[[-\\\\]]\"],\n[false, 2, \"-\", \"[[-\\\\]]\"],\n[true, 2, \"-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1\", \"-*-*-*-*-*-*-12-*-*-*-m-*-*-*\"],\n[false, 2, \"-adobe-courier-bold-o-normal--12-120-75-75-X-70-iso8859-1\", \"-*-*-*-*-*-*-12-*-*-*-m-*-*-*\"],\n[false, 2, \"-adobe-courier-bold-o-normal--12-120-75-75-/-70-iso8859-1\", \"-*-*-*-*-*-*-12-*-*-*-m-*-*-*\"],\n[true, 2, \"/adobe/courier/bold/o/normal//12/120/75/75/m/70/iso8859/1\", \"/*/*/*/*/*/*/12/*/*/*/m/*/*/*\"],\n[false, 2, \"/adobe/courier/bold/o/normal//12/120/75/75/X/70/iso8859/1\", \"/*/*/*/*/*/*/12/*/*/*/m/*/*/*\"],\n[true, 2, \"abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txt\", \"**/*a*b*g*n*t\"],\n[false, 2, \"abcd/abcdefg/abcdefghijk/abcdefghijklmnop.txtz\", \"**/*a*b*g*n*t\"],\n[true, 0, \".bar\", \"*\"],\n[true, 2, \".bar\", \"*\"],\n[false, 4, \".bar\", \"*\"],\n[false, 6, \".bar\", \"*\"],\n[true, 0, \".bar\", \".*\"],\n[true, 2, \".bar\", \".*\"],\n[true, 4, \".bar\", \".*\"],\n[true, 6, \".bar\", \".*\"],\n[true, 0, \".bar.txt\", \"*.txt\"],\n[true, 2, \".bar.txt\", \"*.txt\"],\n[false, 4, \".bar.txt\", \"*.txt\"],\n[false, 6, \".bar.txt\", \"*.txt\"],\n[false, 0, \".bar\", \"**/*\"],\n[true, 2, \".bar\", \"**/*\"],\n[false, 4, \".bar\", \"**/*\"],\n[false, 6, \".bar\", \"**/*\"],\n[false, 0, \".bar\", \"**/.*\"],\n[true, 2, \".bar\", \"**/.*\"],\n[false, 4, \".bar\", \"**/.*\"],\n[true, 6, \".bar\", \"**/.*\"],\n[true, 0, \"foo/.bar\", \"*\"],\n[false, 2, \"foo/.bar\", \"*\"],\n[true, 4, \"foo/.bar\", \"*\"],\n[false, 6, \"foo/.bar\", \"*\"],\n[false, 0, \"foo/.bar\", \".*\"],\n[false, 2, \"foo/.bar\", \".*\"],\n[false, 4, \"foo/.bar\", \".*\"],\n[false, 6, \"foo/.bar\", \".*\"],\n[true, 0, \"foo/.bar\", \"**/*\"],\n[true, 2, \"foo/.bar\", \"**/*\"],\n[true, 4, \"foo/.bar\", \"**/*\"],\n[false, 6, \"foo/.bar\", \"**/*\"],\n[true, 0, \"foo/.bar\", \"**/.*\"],\n[true, 2, \"foo/.bar\", \"**/.*\"],\n[true, 4, \"foo/.bar\", \"**/.*\"],\n[true, 6, \"foo/.bar\", \"**/.*\"],\n[true, 0, \"foo/.bar/baz\", \"**/*\"],\n[true, 2, \"foo/.bar/baz\", \"**/*\"],\n[true, 4, \"foo/.bar/baz\", \"**/*\"],\n[false, 6, \"foo/.bar/baz\", \"**/*\"],\n[true, 0, \"foo/.bar/baz\", \"**/.*\"],\n[false, 2, \"foo/.bar/baz\", \"**/.*\"],\n[true, 4, \"foo/.bar/baz\", \"**/.*\"],\n[false, 6, \"foo/.bar/baz\", \"**/.*\"],\n[true, 0, \"foo/bar/.baz\", \"**/*\"],\n[true, 2, \"foo/bar/.baz\", \"**/*\"],\n[true, 4, \"foo/bar/.baz\", \"**/*\"],\n[false, 6, \"foo/bar/.baz\", \"**/*\"],\n[true, 0, \"foo/bar/.baz\", \"**/.*\"],\n[true, 2, \"foo/bar/.baz\", \"**/.*\"],\n[true, 4, \"foo/bar/.baz\", \"**/.*\"],\n[true, 6, \"foo/bar/.baz\", \"**/.*\"],\n[true, 0, \"foobar\", \"foo\\\\bar\"],\n[false, 8, \"foobar\", \"foo\\\\bar\"],\n[true, 8, \"foo\\\\bar\", \"foo\\\\bar\"],\n[true, 2, \"foo/bar/baz\", \"foo//bar/baz\"],\n[true, 2, \"foo/bar/baz\", \"foo/////bar/////////baz\"]\n]\n"
  },
  {
    "path": "watchman/test/async/AsyncWatchmanTestCase.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport asyncio\nimport errno\nimport os\nimport os.path\nimport unittest\n\nimport WatchmanInstance\nfrom pywatchman_aio import AIOClient as WatchmanClient\n\n\nclass AsyncWatchmanTestCase(unittest.TestCase):\n    def setUp(self):\n        self.loop = asyncio.get_event_loop()\n        sockpath = WatchmanInstance.getSharedInstance().getSockPath()\n        self.client = self.loop.run_until_complete(WatchmanClient.from_socket(sockpath))\n\n    def tearDown(self):\n        self.client.close()\n\n    def run(self, result):\n        assert result\n        super(AsyncWatchmanTestCase, self).run(result)\n        return result\n\n    def touch(self, fname, times=None):\n        try:\n            os.utime(fname, times)\n        except OSError as e:\n            if e.errno == errno.ENOENT:\n                with open(fname, \"a\"):\n                    os.utime(fname, times)\n            else:\n                raise\n\n    def touch_relative(self, base, *fname):\n        fname = os.path.join(base, *fname)\n        self.touch(fname, None)\n\n    def watchman_command(self, *args):\n        task = asyncio.wait_for(self.client.query(*args), 10)\n        return self.loop.run_until_complete(task)\n\n    def get_file_list(self, root):\n        expr = {\"expression\": [\"exists\"], \"fields\": [\"name\"]}\n        res = self.watchman_command(\"query\", root, expr)[\"files\"]\n        return res\n\n    def assert_sub_contains_all(self, sub, what):\n        files = set(sub[\"files\"])\n        for obj in what:\n            assert obj in files, str(obj) + \" was not in subscription \" + repr(sub)\n\n    def assert_file_sets_equal(self, iter1, iter2, message=None):\n        set1 = set(iter1)\n        set2 = set(iter2)\n        self.assertEqual(set1, set2, message)\n\n    # Wait for the file list to match the input set\n    def assert_root_file_set(self, root, files):\n        self.assert_file_sets_equal(self.get_file_list(root), files)\n\n    def wait_for_sub(self, name, root, timeout=10):\n        client = self.client\n        task = asyncio.wait_for(client.get_subscription(name, root), timeout)\n        return self.loop.run_until_complete(task)\n"
  },
  {
    "path": "watchman/test/async/test_dead_socket.py",
    "content": "#!/usr/bin/env python3\n# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport asyncio\nimport os\nimport unittest\nfrom unittest import IsolatedAsyncioTestCase\n\nimport pywatchman_aio\nimport WatchmanInstance\n\n\n# Note this does not extend AsyncWatchmanTestCase as it wants to start its\n# own Watchman server instances per test.\nclass TestDeadSocket(IsolatedAsyncioTestCase):\n    @unittest.skipIf(os.name == \"nt\", \"not supported on windows\")\n    def test_query_dead_socket(self):\n        async def test_core(wminst):\n            with await pywatchman_aio.AIOClient.from_socket(\n                sockname=wminst.getSockPath()\n            ) as client:\n                wminst.stop()\n                with self.assertRaises(ConnectionResetError):\n                    await client.query(\"version\")\n\n        self._async_runner(test_core)\n\n    @unittest.skipIf(os.name == \"nt\", \"not supported on windows\")\n    def test_subscription_dead_socket(self):\n        async def test_core(wminst):\n            with await pywatchman_aio.AIOClient.from_socket(\n                sockname=wminst.getSockPath()\n            ) as client:\n                root = f\"{wminst.base_dir}/work\"\n                os.makedirs(root)\n                await client.query(\"watch\", root)\n                await client.query(\"subscribe\", root, \"sub\", {\"expression\": [\"exists\"]})\n                wminst.stop()\n                with self.assertRaises(ConnectionResetError):\n                    await client.get_subscription(\"sub\", root)\n\n        self._async_runner(test_core)\n\n    def _async_runner(self, test_core):\n        wminst = WatchmanInstance.Instance()\n        wminst.start()\n        try:\n            return asyncio.new_event_loop().run_until_complete(test_core(wminst))\n        finally:\n            wminst.stop()\n"
  },
  {
    "path": "watchman/test/async/test_subscribe_async.py",
    "content": "#!/usr/bin/env python3\n# vim:ts=4:sw=4:et:\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport os\nimport tempfile\nimport unittest\n\nimport AsyncWatchmanTestCase\n\n\nclass TestSubscribe(AsyncWatchmanTestCase.AsyncWatchmanTestCase):\n    @unittest.skipIf(os.name == \"nt\", \"not supported on windows\")\n    def test_subscribe(self):\n        root = tempfile.mkdtemp()\n        a_dir = os.path.join(root, \"a\")\n        os.mkdir(a_dir)\n        self.touch_relative(a_dir, \"lemon\")\n        self.touch_relative(root, \"b\")\n\n        self.watchman_command(\"watch\", root)\n        self.assert_root_file_set(root, files=[\"a\", \"a/lemon\", \"b\"])\n\n        self.watchman_command(\"subscribe\", root, \"myname\", {\"fields\": [\"name\"]})\n\n        self.watchman_command(\n            \"subscribe\", root, \"relative\", {\"fields\": [\"name\"], \"relative_root\": \"a\"}\n        )\n\n        # prove initial results come through\n        dat = self.wait_for_sub(\"myname\", root=root)\n        self.assertEqual(True, dat[\"is_fresh_instance\"])\n        self.assert_file_sets_equal(dat[\"files\"], [\"a\", \"a/lemon\", \"b\"])\n\n        # and that relative_root adapts the path name\n        dat = self.wait_for_sub(\"relative\", root=root)\n        self.assertEqual(True, dat[\"is_fresh_instance\"])\n        self.assert_file_sets_equal(dat[\"files\"], [\"lemon\"])\n\n        # check that deletes show up in the subscription results\n        os.unlink(os.path.join(root, \"a\", \"lemon\"))\n        dat = self.wait_for_sub(\"myname\", root=root)\n        self.assertNotEqual(None, dat)\n        self.assertEqual(False, dat[\"is_fresh_instance\"])\n        self.assert_sub_contains_all(dat, [\"a/lemon\"])\n\n        dat = self.wait_for_sub(\"relative\", root=root)\n        self.assertNotEqual(None, dat)\n        self.assertEqual(False, dat[\"is_fresh_instance\"])\n        self.assert_sub_contains_all(dat, [\"lemon\"])\n\n        # Trigger a recrawl and ensure that the subscription isn't lost\n        self.watchman_command(\"debug-recrawl\", root)\n        # Touch a file to make sure clock increases and subscribtion event.\n        # This prevents test failure on some platforms\n        self.touch_relative(root, \"c\")\n\n        dat = self.wait_for_sub(\"myname\", root=root)\n        self.assertNotEqual(None, dat)\n        self.assertEqual(False, dat[\"is_fresh_instance\"])\n\n        # Ensure that we observed the recrawl warning\n        warn = None\n        if \"warning\" in dat:\n            warn = dat[\"warning\"]\n        self.assertRegex(warn, r\"Recrawled this watch\")\n"
  },
  {
    "path": "watchman/test/facebook/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_unittest.bzl\", \"cpp_unittest\")\n\noncall(\"scm_client_infra\")\n\ncpp_unittest(\n    name = \"devInfraSavedStateXDBClientTest\",\n    srcs = [\n        \"DevInfraSavedStateXDBClientTest.cpp\",\n    ],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    deps = [\n        \"//folly/portability:gtest\",\n        \"//folly/test:test_utils\",\n        \"//watchman/facebook/saved_state:manifold_saved_state\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n\ncpp_unittest(\n    name = \"devInfraSavedStateManifoldClientTest\",\n    srcs = [\n        \"DevInfraSavedStateManifoldClientTest.cpp\",\n    ],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n    ],\n    deps = [\n        \"//eden/common/utils:process_info_cache\",\n        \"//folly/logging:logging\",\n        \"//folly/portability:gtest\",\n        \"//folly/test:test_utils\",\n        \"//watchman:client_context\",\n        \"//watchman:config\",\n        \"//watchman:prelude\",\n        \"//watchman/facebook/saved_state:manifold_saved_state\",\n        \"//watchman/thirdparty/jansson:jansson\",\n    ],\n)\n"
  },
  {
    "path": "watchman/test/lib/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\nload(\"@fbcode_macros//build_defs:cpp_unittest.bzl\", \"cpp_unittest\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"lib\",\n    srcs = [\n        \"FakeFileSystem.cpp\",\n        \"FakeWatcher.cpp\",\n    ],\n    headers = [\n        \"FakeFileSystem.h\",\n        \"FakeWatcher.h\",\n    ],\n    deps = [\n        \"//folly:map_util\",\n    ],\n    exported_deps = [\n        \"//folly:synchronized\",\n        \"//watchman:watcher\",\n        \"//watchman/fs:fs\",\n    ],\n)\n\ncpp_unittest(\n    name = \"test\",\n    srcs = [\n        \"FakeFileSystemTest.cpp\",\n    ],\n    compatible_with = [\n        \"ovr_config//os:linux\",\n        \"ovr_config//os:macos\",\n    ],\n    deps = [\n        \":lib\",\n        \"//folly/portability:gmock\",\n        \"//folly/portability:gtest\",\n    ],\n)\n"
  },
  {
    "path": "watchman/test/lib/FakeFileSystem.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/test/lib/FakeFileSystem.h\"\n#include <folly/MapUtil.h>\n\nnamespace watchman {\n\nnamespace {\n\nconstexpr folly::StringPiece kRootPrefix = folly::kIsWindows ? \"Z:\\\\\" : \"/\";\n\n/**\n * Ensures the specified path is absolute, and returns it minus the leading\n * slash. The following sequence of /-delimited names can be used to traverse\n * the filesystem tree.\n */\nfolly::StringPiece parseAbsolute(folly::StringPiece path) {\n  if (path.removePrefix(kRootPrefix)) {\n    return path;\n  } else {\n    throw std::logic_error{fmt::format(\"Path {} must be absolute\", path)};\n  }\n}\n\nfolly::StringPiece parseAbsolute(const char* path) {\n  return parseAbsolute(folly::StringPiece{path});\n}\n\n/**\n * Ensures the specified path is absolute, and returns two ranges, one to the\n * dirname and one to the basename.\n */\nstd::pair<folly::StringPiece, folly::StringPiece> parseAbsoluteBasename(\n    const char* path) {\n  folly::StringPiece parsed{path};\n  if (!parsed.removePrefix(kRootPrefix)) {\n    throw std::logic_error{fmt::format(\"Path {} must be absolute\", path)};\n  }\n  path = parsed.data(); // It's still null-terminated.\n\n  const char* slash = strrchr(path, '/');\n  if (!slash) {\n    return {folly::StringPiece{}, path};\n  } else {\n    return {folly::StringPiece{path, slash}, folly::StringPiece{slash + 1}};\n  }\n}\n\n/**\n * Traverse the directory structure and call `func` on the leaf inode.\n *\n * Throws ENOENT if it doesn't exist.\n */\ntemplate <typename Func>\nstd::invoke_result_t<Func, const FakeInode&> withPath(\n    const FakeInode& root,\n    folly::StringPiece path,\n    const char* op,\n    Func&& func) {\n  const FakeInode* inode = &root;\n  while (!path.empty()) {\n    size_t idx = path.find('/');\n    folly::StringPiece this_level;\n    if (idx == folly::StringPiece::npos) {\n      this_level = path;\n      path.clear();\n    } else {\n      this_level = path.subpiece(0, idx);\n      path.advance(idx + 1);\n    }\n\n    inode = folly::get_ptr(inode->children, this_level.str());\n    if (!inode) {\n      throw std::system_error(\n          ENOENT,\n          std::generic_category(),\n          fmt::format(\"{}: no file at {}\", op, path));\n    }\n  }\n\n  return func(*inode);\n}\n\n/**\n * Traverse the directory structure and call `func` on the leaf inode.\n *\n * Throws ENOENT if it doesn't exist.\n */\ntemplate <typename Func>\nstd::invoke_result_t<Func, FakeInode&> withPath(\n    FakeInode& root,\n    folly::StringPiece path,\n    const char* op,\n    Func&& func) {\n  FakeInode* inode = &root;\n  while (!path.empty()) {\n    size_t idx = path.find('/');\n    folly::StringPiece this_level;\n    if (idx == folly::StringPiece::npos) {\n      this_level = path;\n      path.clear();\n    } else {\n      this_level = path.subpiece(0, idx);\n      path.advance(idx + 1);\n    }\n\n    inode = folly::get_ptr(inode->children, this_level.str());\n    if (!inode) {\n      throw std::system_error(\n          ENOENT,\n          std::generic_category(),\n          fmt::format(\"{}: no file at {}\", op, path));\n    }\n  }\n\n  return func(*inode);\n}\n\nclass FakeDirHandle : public DirHandle {\n public:\n  struct FakeDirEntry {\n    std::string name;\n    std::optional<FileInformation> stat;\n  };\n\n  explicit FakeDirHandle(std::vector<FakeDirEntry> entries)\n      : entries_{std::move(entries)} {}\n\n  const DirEntry* readDir() override {\n    if (idx_ >= entries_.size()) {\n      return nullptr;\n    }\n\n    auto& e = entries_[idx_++];\n    current_.has_stat = e.stat.has_value();\n    current_.d_name = e.name.c_str();\n    current_.stat = e.stat ? e.stat.value() : FileInformation{};\n    return &current_;\n  }\n\n#ifndef _WIN32\n  int getFd() const override {\n    return 0;\n  }\n#endif\n\n private:\n  size_t idx_ = 0;\n  DirEntry current_;\n  std::vector<FakeDirEntry> entries_;\n};\n\n} // namespace\n\nFakeFileSystem::Flags::Flags() = default;\n\nFakeFileSystem::FakeFileSystem(Flags flags)\n    : flags_{flags}, root_{std::in_place, FakeInode{fakeDir()}} {}\n\nstd::unique_ptr<DirHandle> FakeFileSystem::openDir(\n    const char* path,\n    bool strict) {\n  auto root = root_.rlock();\n  return withPath(\n      *root, parseAbsolute(path), \"openDir\", [&](const FakeInode& inode) {\n        // TODO: assert it's a directory\n\n        // TODO: implement strict case checking\n        (void)strict;\n        std::vector<FakeDirHandle::FakeDirEntry> entries;\n        for (auto& [name, child] : inode.children) {\n          FakeDirHandle::FakeDirEntry entry;\n          entry.name = name;\n          if (flags_.includeReadDirStat) {\n            entry.stat = child.metadata;\n          }\n          entries.push_back(std::move(entry));\n        }\n\n        return std::make_unique<FakeDirHandle>(std::move(entries));\n      });\n}\n\nFileInformation FakeFileSystem::getFileInformation(\n    const char* path,\n    CaseSensitivity caseSensitive) {\n  auto root = root_.rlock();\n  return withPath(\n      *root,\n      parseAbsolute(path),\n      \"getFileInformation\",\n      [&](const FakeInode& inode) {\n        // TODO: validate case\n        (void)caseSensitive;\n\n        return inode.metadata;\n      });\n}\nvoid FakeFileSystem::touch(const char* path) {\n  auto pair = parseAbsoluteBasename(path);\n  auto& dirname = pair.first;\n  auto& basename = pair.second;\n  auto root = root_.wlock();\n  withPath(*root, dirname, \"touch\", [&](FakeInode& inode) {\n    // TODO: Should we assert if child exists or is a directory?\n    auto [iter, inserted] = inode.children.emplace(basename.str(), fakeFile());\n    // TODO: What does this mean on Windows? Should we ifdef?\n    iter->second.metadata.mode |= 0700;\n  });\n}\n\nvoid FakeFileSystem::defineContents(std::initializer_list<const char*> paths) {\n  for (folly::StringPiece path : paths) {\n    if (path.removeSuffix(kRootPrefix)) {\n      fmt::print(\"addNode dir: {}\\n\", path);\n      addNode(path.str().c_str(), fakeDir());\n    } else {\n      fmt::print(\"addNode file: {}\\n\", path);\n      addNode(path.str().c_str(), fakeFile());\n    }\n  }\n}\n\nvoid FakeFileSystem::addNode(const char* path, const FileInformation& fi) {\n  auto root = root_.wlock();\n  FakeInode* inode = &*root;\n\n  auto piece = parseAbsolute(path);\n  while (!piece.empty()) {\n    fmt::print(\"piece = {}\\n\", piece);\n    size_t idx = piece.find('/');\n    folly::StringPiece this_level;\n    if (idx == folly::StringPiece::npos) {\n      this_level = piece;\n      piece.clear();\n    } else {\n      this_level = piece.subpiece(0, idx);\n      piece.advance(idx + 1);\n    }\n\n    FakeInode* child = folly::get_ptr(inode->children, this_level.str());\n    if (!child) {\n      // TODO: add option for whether autocreate is desired or not\n      FakeInode fakeInode{fakeDir()};\n      auto [iter, yes] = inode->children.emplace(this_level.str(), fakeInode);\n      child = &iter->second;\n    } else {\n      // TODO: ensure child is a directory\n    }\n    inode = child;\n  }\n\n  inode->metadata = fi;\n}\n\nvoid FakeFileSystem::updateMetadata(\n    const char* path,\n    std::function<void(FileInformation&)> func) {\n  auto root = root_.wlock();\n  return withPath(\n      *root, parseAbsolute(path), \"updateMetadata\", [&](FakeInode& inode) {\n        func(inode.metadata);\n      });\n}\n\nvoid FakeFileSystem::removeRecursively(const char* path) {\n  auto pair = parseAbsoluteBasename(path);\n  auto& dirname = pair.first;\n  auto& basename = pair.second;\n  auto root = root_.wlock();\n  return withPath(*root, dirname, \"recursivelyRemove\", [&](FakeInode& parent) {\n    if (!parent.metadata.isDir()) {\n      throw std::system_error(\n          ENOTDIR,\n          std::generic_category(),\n          fmt::format(\"{} is not a directory\", dirname));\n    }\n    size_t count = parent.children.erase(basename.str());\n    if (count == 0) {\n      throw std::system_error(\n          ENOENT,\n          std::generic_category(),\n          fmt::format(\"{} does not exist\", path));\n    }\n    (void)count;\n  });\n}\n\nFileInformation FakeFileSystem::fakeDir() {\n  FileInformation fi{};\n  fi.mode = S_IFDIR;\n  fi.size = 0;\n  fi.uid = kDefaultUid;\n  fi.gid = kDefaultGid;\n  fi.ino = inodeNumber_.fetch_add(1, std::memory_order_acq_rel);\n  fi.dev = kDefaultDev;\n  fi.nlink = 2; // TODO: to populate\n#ifdef _WIN32\n  fi.fileAttributes = FILE_ATTRIBUTE_DIRECTORY;\n#endif\n  // TODO: populate timestamps\n  return fi;\n}\n\nFileInformation FakeFileSystem::fakeFile() {\n  FileInformation fi{};\n  fi.mode = S_IFREG;\n  fi.size = 0;\n  fi.uid = kDefaultUid;\n  fi.gid = kDefaultGid;\n  fi.ino = inodeNumber_.fetch_add(1, std::memory_order_acq_rel);\n  fi.dev = kDefaultDev;\n  fi.nlink = 1;\n#ifdef _WIN32\n  fi.fileAttributes = 0;\n#endif\n  // TODO: populate timestamps\n  return fi;\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/test/lib/FakeFileSystem.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <folly/Synchronized.h>\n#include <atomic>\n#include <map>\n#include \"watchman/fs/FileSystem.h\"\n\n#ifdef _WIN32\n#define FAKEFS_ROOT \"Z:\\\\\"\n#else\n#define FAKEFS_ROOT \"/\"\n#endif\n\nnamespace watchman {\n\nstruct FakeInode {\n  FileInformation metadata;\n  // For testability, a defined order is useful. Lexicographical ordering is\n  // fine, though it might be nice to support arbitrary orders in the future.\n  // After all, operating systems don't guarantee any particular order from\n  // readdir.\n  std::map<std::string, FakeInode> children;\n\n  explicit FakeInode(const FileInformation& fi) : metadata{fi} {}\n};\n\nclass FakeFileSystem final : public FileSystem {\n public:\n  static constexpr uid_t kDefaultUid = 1001;\n  static constexpr gid_t kDefaultGid = 1002;\n  static constexpr dev_t kDefaultDev = 1;\n\n  struct Flags {\n    // For the FakeFileSystem constructor below, this constructor must be\n    // defined externally.\n    Flags();\n\n    // Default to POSIX semantics. Set true for readdirplus / Windows semantics.\n    bool includeReadDirStat = false;\n  };\n\n  explicit FakeFileSystem(Flags flags = Flags{});\n\n  // FileSystem implementation\n\n  std::unique_ptr<DirHandle> openDir(const char* path, bool strict = true)\n      override;\n\n  FileInformation getFileInformation(\n      const char* path,\n      CaseSensitivity caseSensitive = CaseSensitivity::Unknown) override;\n\n  void touch(const char* path) override;\n\n  // Modify the FS structure\n\n  void defineContents(std::initializer_list<const char*> paths);\n\n  void addNode(const char* path, const FileInformation& fi);\n\n  void updateMetadata(\n      const char* path,\n      std::function<void(FileInformation&)> func);\n\n  void removeRecursively(const char* path);\n\n  FileInformation fakeDir();\n  FileInformation fakeFile();\n\n private:\n  const Flags flags_;\n  std::atomic<ino_t> inodeNumber_{1};\n  folly::Synchronized<FakeInode> root_;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/test/lib/FakeFileSystemTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/test/lib/FakeFileSystem.h\"\n#include <folly/portability/GMock.h>\n#include <folly/portability/GTest.h>\n\nnamespace {\n\nusing namespace testing;\nusing namespace watchman;\n\nTEST(FakeFileSystemTest, get_root) {\n  FakeFileSystem fs;\n  auto fi = fs.getFileInformation(\"/\");\n  EXPECT_TRUE(fi.isDir());\n}\n\nTEST(FakeFileSystemTest, defineContents_populates_files_and_directories) {\n  FakeFileSystem fs;\n  fs.defineContents({\n      \"/fake/root/empty/\",\n      \"/fake/root/.watchmanconfig\",\n      \"/fake/root/dir/file.txt\",\n  });\n\n  EXPECT_EQ(DType::Dir, fs.getFileInformation(\"/fake/root/empty\").dtype());\n  EXPECT_EQ(\n      DType::Regular,\n      fs.getFileInformation(\"/fake/root/.watchmanconfig\").dtype());\n  EXPECT_EQ(\n      DType::Regular, fs.getFileInformation(\"/fake/root/dir/file.txt\").dtype());\n}\n\nTEST(FakeFileSystemTest, openDir_enumerates_entries_without_stat) {\n  FakeFileSystem fs;\n  fs.defineContents({\n      \"/fake/a\",\n      \"/fake/b\",\n      \"/fake/c/\",\n  });\n\n  auto handle = fs.openDir(\"/fake\");\n  auto* entry = handle->readDir();\n  EXPECT_NE(nullptr, entry);\n\n  EXPECT_FALSE(entry->has_stat);\n  EXPECT_STREQ(\"a\", entry->d_name);\n\n  entry = handle->readDir();\n  EXPECT_NE(nullptr, entry);\n  EXPECT_FALSE(entry->has_stat);\n  EXPECT_STREQ(\"b\", entry->d_name);\n\n  entry = handle->readDir();\n  EXPECT_NE(nullptr, entry);\n  EXPECT_FALSE(entry->has_stat);\n  EXPECT_STREQ(\"c\", entry->d_name);\n\n  EXPECT_EQ(nullptr, handle->readDir());\n}\n\nTEST(FakeFileSystemTest, openDir_enumerates_entries_with_stat) {\n  FakeFileSystem::Flags flags;\n  flags.includeReadDirStat = true;\n  FakeFileSystem fs{flags};\n  fs.defineContents({\n      \"/fake/a\",\n      \"/fake/b\",\n      \"/fake/c/\",\n  });\n\n  auto handle = fs.openDir(\"/fake\");\n  auto* entry = handle->readDir();\n  EXPECT_NE(nullptr, entry);\n\n  EXPECT_TRUE(entry->has_stat);\n  EXPECT_STREQ(\"a\", entry->d_name);\n  EXPECT_FALSE(entry->stat.isDir());\n\n  entry = handle->readDir();\n  EXPECT_NE(nullptr, entry);\n  EXPECT_TRUE(entry->has_stat);\n  EXPECT_STREQ(\"b\", entry->d_name);\n  EXPECT_FALSE(entry->stat.isDir());\n\n  entry = handle->readDir();\n  EXPECT_NE(nullptr, entry);\n  EXPECT_TRUE(entry->has_stat);\n  EXPECT_STREQ(\"c\", entry->d_name);\n  EXPECT_TRUE(entry->stat.isDir());\n\n  EXPECT_EQ(nullptr, handle->readDir());\n}\n\nTEST(FakeFileSystemTest, touch_makes_an_empty_file) {\n  FakeFileSystem fs;\n  fs.defineContents({\n      \"/fake/\",\n  });\n\n  fs.touch(\"/fake/newfile.txt\");\n\n  auto info = fs.getFileInformation(\"/fake/newfile.txt\");\n  EXPECT_TRUE(info.isFile());\n  EXPECT_EQ(0, info.size);\n\n#ifndef _WIN32\n  EXPECT_EQ(0700 | S_IFREG, info.mode);\n#endif\n\n  fs.touch(\"/atroot.txt\");\n\n  info = fs.getFileInformation(\"/atroot.txt\");\n  EXPECT_TRUE(info.isFile());\n  EXPECT_EQ(0, info.size);\n}\n\nTEST(FakeFileSystemTest, recursively_remove_directory) {\n  FakeFileSystem fs;\n  fs.defineContents({\n      \"/fake/dir/one.txt\",\n      \"/fake/dir/two.txt\",\n  });\n\n  fs.removeRecursively(\"/fake/dir\");\n\n  auto dh = fs.openDir(\"/fake\");\n  EXPECT_EQ(nullptr, dh->readDir());\n}\n\nTEST(FakeFileSystemTest, recursive_removal_fails_if_parent_is_file) {\n  FakeFileSystem fs;\n  fs.defineContents({\n      \"/fake/dir/one.txt\",\n  });\n\n  EXPECT_THAT(\n      [&] { fs.removeRecursively(\"/fake/dir/one.txt/nothing\"); },\n      Throws<std::system_error>(Property(\n          &std::system_error::code,\n          Eq(std::error_code(ENOTDIR, std::generic_category())))));\n}\n\nTEST(FakeFileSystemTest, recursive_removal_fails_if_child_does_not_exist) {\n  FakeFileSystem fs;\n  fs.defineContents({\n      \"/fake/dir/one.txt\",\n  });\n\n  EXPECT_THAT(\n      [&] { fs.removeRecursively(\"/fake/dir/two.txt\"); },\n      Throws<std::system_error>(Property(\n          &std::system_error::code,\n          Eq(std::error_code(ENOENT, std::generic_category())))));\n}\n\n} // namespace\n"
  },
  {
    "path": "watchman/test/lib/FakeWatcher.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/test/lib/FakeWatcher.h\"\n#include \"watchman/fs/FileSystem.h\"\n\nnamespace watchman {\n\nFakeWatcher::FakeWatcher(FileSystem& fileSystem, bool failsToStart)\n    : Watcher{\"FakeWatcher\", 0},\n      fileSystem_{fileSystem},\n      failsToStart_(failsToStart) {}\n\nbool FakeWatcher::start(const std::shared_ptr<Root>& /*root*/) {\n  return !failsToStart_;\n}\n\nstd::unique_ptr<DirHandle> FakeWatcher::startWatchDir(\n    const std::shared_ptr<Root>& root,\n    const char* path) {\n  (void)root;\n  return fileSystem_.openDir(path);\n}\n\nbool FakeWatcher::waitNotify(int timeoutms) {\n  (void)timeoutms;\n  throw std::logic_error{\"waitNotify not implemented\"};\n}\n\nWatcher::ConsumeNotifyRet FakeWatcher::consumeNotify(\n    const std::shared_ptr<Root>& root,\n    PendingChanges& coll) {\n  (void)root;\n  (void)coll;\n  throw std::logic_error{\"consumeNotify not implemented\"};\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/test/lib/FakeWatcher.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/watcher/Watcher.h\"\n\nnamespace watchman {\n\nclass FileSystem;\n\nclass FakeWatcher : public Watcher {\n public:\n  explicit FakeWatcher(FileSystem& fileSystem, bool failsToStart = false);\n\n  bool start(const std::shared_ptr<Root>& root) override;\n\n  std::unique_ptr<DirHandle> startWatchDir(\n      const std::shared_ptr<Root>& root,\n      const char* path) override;\n\n  bool waitNotify(int timeoutms) override;\n  ConsumeNotifyRet consumeNotify(\n      const std::shared_ptr<Root>& root,\n      PendingChanges& coll) override;\n\n private:\n  FileSystem& fileSystem_;\n  bool failsToStart_;\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/test/run.sh",
    "content": "#!/bin/bash\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the MIT license found in the\n# LICENSE file in the root directory of this source tree.\n\n# This is a dumb wrapper to satisfy the buck_sh_test rule\nexec \"$@\"\n"
  },
  {
    "path": "watchman/thirdparty/deelevate_binding/.gitignore",
    "content": ".*.sw*\n/target\nCargo.lock"
  },
  {
    "path": "watchman/thirdparty/deelevate_binding/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"deelevate_binding\",\n    headers = [\"include/deelevate.h\"],\n    exported_deps = select({\n        \"DEFAULT\": [],\n        \"ovr_config//os:windows\": [\n            \"fbsource//third-party/rust:deelevate\",\n            \"fbsource//third-party/toolchains/win:ntdll.lib\",\n        ],\n    }),\n)\n"
  },
  {
    "path": "watchman/thirdparty/deelevate_binding/CMakeLists.txt",
    "content": "if(NOT WIN32)\n    message( FATAL_ERROR \"deelevate cannot be used on platforms other than Windows\" )\nendif()\n\nfind_package(Python COMPONENTS Interpreter)\n\nrust_executable(deelevate BINARY_NAME eledo-pty-bridge)\n\nrust_static_library(rust_deelevate CRATE deelevate)\ninstall_rust_static_library(\n  rust_deelevate\n  INSTALL_DIR thirdparty\n)\n\nadd_library(libdeelevate INTERFACE)\ntarget_include_directories(libdeelevate INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/include)\ntarget_link_libraries(\n  libdeelevate\n  INTERFACE\n  rust_deelevate\n  userenv.lib\n  bcrypt.lib\n  ntdll.lib\n)\n\ninstall(\n  TARGETS libdeelevate\n)\n"
  },
  {
    "path": "watchman/thirdparty/deelevate_binding/Cargo.toml",
    "content": "[package]\nname = \"deelevate_binding\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[lib]\ncrate-type = [\"staticlib\", \"lib\"]\n\n[dependencies]\ndeelevate = \"0.1\"\n"
  },
  {
    "path": "watchman/thirdparty/deelevate_binding/include/deelevate.h",
    "content": "#include <cstdarg>\n#include <cstdint>\n#include <cstdlib>\n#include <ostream>\n#include <new>\n\nextern \"C\" {\n\n/// This function is for use by C/C++ code that wants to test whether the\n/// current session is elevated.  The return value is 0 for a non-privileged\n/// process and non-zero for a privileged process.\n/// If an error occurs while obtaining this information, the program will\n/// terminate.\nint32_t deelevate_is_privileged_process();\n\n/// This function is for use by C/C++ code that wants to ensure that execution\n/// will only continue if the current token has a Normal privilege level.\n/// This function will attempt to re-execute the program in the appropriate\n/// context.\n/// This function will only return if the current context has normal privs.\nvoid deelevate_requires_normal_privileges();\n\n/// This function is for use by C/C++ code that wants to ensure that execution\n/// will only continue if the current token has an Elevated privilege level.\n/// This function will attempt to re-execute the program in the appropriate\n/// context.\n/// This function will only return if the current context has Elevated or\n/// High Integrity Admin privs.\nvoid deelevate_requires_elevated_privileges();\n\n} // extern \"C\"\n"
  },
  {
    "path": "watchman/thirdparty/deelevate_binding/src/lib.rs",
    "content": ""
  },
  {
    "path": "watchman/thirdparty/getopt/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"getopt\",\n    srcs = [\"GetOpt.cpp\"],\n    headers = [\"GetOpt.h\"],\n)\n"
  },
  {
    "path": "watchman/thirdparty/getopt/GetOpt.cpp",
    "content": "/*\n * getopt_long() -- long options parser\n *\n * Portions Copyright (c) 1987, 1993, 1994\n * The Regents of the University of California.  All rights reserved.\n *\n * Portions Copyright (c) 2003\n * PostgreSQL Global Development Group\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n *    notice, this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the University nor the names of its contributors\n *    may be used to endorse or promote products derived from this software\n *    without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\n * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n * SUCH DAMAGE.\n */\n\n#include \"watchman/thirdparty/getopt/GetOpt.h\"\n\n#include <stdio.h>\n#include <string.h>\n\n#ifdef _WIN32\n\n#define BADCH '?'\n#define BADARG ':'\n#define EMSG \"\"\n\nint opterr = 1, /* if error message should be printed */\n    optind = 1, /* index into parent argv vector */\n    optopt, /* character checked for validity */\n    optreset; /* reset getopt */\nchar* optarg; /* argument associated with option */\n\nint getopt_long(\n    int argc,\n    char* const argv[],\n    const char* optstring,\n    const struct option* longopts,\n    int* longindex) {\n  static const char* place = EMSG; /* option letter processing */\n  const char* oli; /* option letter list index */\n\n  if (!*place) { /* update scanning pointer */\n    if (optind >= argc) {\n      place = EMSG;\n      return -1;\n    }\n\n    place = argv[optind];\n\n    if (place[0] != '-') {\n      place = EMSG;\n      return -1;\n    }\n\n    place++;\n\n    if (place[0] && place[0] == '-' && place[1] == '\\0') { /* found \"--\" */\n      ++optind;\n      place = EMSG;\n      return -1;\n    }\n\n    if (place[0] && place[0] == '-' && place[1]) {\n      /* long option */\n      size_t namelen;\n      int i;\n\n      place++;\n\n      namelen = strcspn(place, \"=\");\n      for (i = 0; longopts[i].name != NULL; i++) {\n        if (strlen(longopts[i].name) == namelen &&\n            strncmp(place, longopts[i].name, namelen) == 0) {\n          if (longopts[i].has_arg) {\n            if (place[namelen] == '=')\n              optarg = (char*)place + namelen + 1;\n            else if (optind < argc - 1) {\n              optind++;\n              optarg = argv[optind];\n            } else {\n              if (optstring[0] == ':')\n                return BADARG;\n              if (opterr)\n                fprintf(\n                    stderr,\n                    \"%s: option requires an argument -- %s\\n\",\n                    argv[0],\n                    place);\n              place = EMSG;\n              optind++;\n              return BADCH;\n            }\n          } else {\n            optarg = NULL;\n            if (place[namelen] != 0) {\n              /* XXX error? */\n            }\n          }\n\n          optind++;\n\n          if (longindex)\n            *longindex = i;\n\n          place = EMSG;\n\n          if (longopts[i].flag == NULL)\n            return longopts[i].val;\n          else {\n            *longopts[i].flag = longopts[i].val;\n            return 0;\n          }\n        }\n      }\n\n      if (opterr && optstring[0] != ':')\n        fprintf(stderr, \"%s: illegal option -- %s\\n\", argv[0], place);\n      place = EMSG;\n      optind++;\n      return BADCH;\n    }\n  }\n\n  /* short option */\n  optopt = (int)*place++;\n\n  oli = strchr(optstring, optopt);\n  if (!oli) {\n    if (!*place)\n      ++optind;\n    if (opterr && *optstring != ':')\n      fprintf(stderr, \"%s: illegal option -- %c\\n\", argv[0], optopt);\n    return BADCH;\n  }\n\n  if (oli[1] != ':') { /* don't need argument */\n    optarg = NULL;\n    if (!*place)\n      ++optind;\n  } else { /* need an argument */\n    if (*place) /* no white space */\n      optarg = (char*)place;\n    else if (argc <= ++optind) { /* no arg */\n      place = EMSG;\n      if (*optstring == ':')\n        return BADARG;\n      if (opterr)\n        fprintf(\n            stderr, \"%s: option requires an argument -- %c\\n\", argv[0], optopt);\n      return BADCH;\n    } else\n      /* white space */\n      optarg = argv[optind];\n    place = EMSG;\n    ++optind;\n  }\n  return optopt;\n}\n\n#endif\n"
  },
  {
    "path": "watchman/thirdparty/getopt/GetOpt.h",
    "content": "/*\n * Portions Copyright (c) 1987, 1993, 1994\n * The Regents of the University of California.  All rights reserved.\n *\n * Portions Copyright (c) 2003-2010, PostgreSQL Global Development Group\n */\n\n#pragma once\n\n#ifdef _WIN32\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nextern int opterr;\nextern int optind;\nextern int optopt;\nextern char* optarg;\n\nstruct option {\n  const char* name;\n  int has_arg;\n  int* flag;\n  int val;\n};\n\n#define no_argument 0\n#define required_argument 1\n\nextern int getopt_long(\n    int argc,\n    char* const argv[],\n    const char* optstring,\n    const struct option* longopts,\n    int* longindex);\n\nint getopt(int nargc, char* const nargv[], const char* ostr);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "watchman/thirdparty/jansson/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"utf\",\n    srcs = [\"utf.cpp\"],\n    headers = [\"utf.h\"],\n)\n\ncpp_library(\n    name = \"jansson\",\n    srcs = [\n        \"dump.cpp\",\n        \"error.cpp\",\n        \"load.cpp\",\n        \"strconv.cpp\",\n        \"value.cpp\",\n    ],\n    headers = [\n        \"jansson.h\",\n        \"jansson_private.h\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n        \"//folly:string\",\n    ],\n    exported_deps = [\n        \":utf\",\n        \"//watchman:string\",\n    ],\n)\n"
  },
  {
    "path": "watchman/thirdparty/jansson/dump.cpp",
    "content": "/*\n * Copyright (c) 2009-2012 Petri Lehtinen <petri@digip.org>\n *\n * Jansson is free software; you can redistribute it and/or modify\n * it under the terms of the MIT license. See LICENSE for details.\n */\n\n#ifndef _GNU_SOURCE\n#define _GNU_SOURCE\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"jansson.h\"\n#include \"jansson_private.h\"\n#include \"utf.h\"\n\n#define MAX_INTEGER_STR_LENGTH 100\n#define MAX_REAL_STR_LENGTH 100\n\nstruct object_key {\n  size_t serial;\n  const char* key;\n};\n\nstatic int dump_to_string(const char* buffer, size_t size, void* data) {\n  auto str = (std::string*)data;\n  str->append(buffer, size);\n  return 0;\n}\n\nstatic int dump_to_file(const char* buffer, size_t size, void* data) {\n  FILE* dest = (FILE*)data;\n  if (fwrite(buffer, size, 1, dest) != 1) {\n    return -1;\n  }\n  return 0;\n}\n\n/* 32 spaces (the maximum indentation size) */\nstatic char whitespace[] = \"                                \";\n\nstatic int dump_indent(\n    size_t flags,\n    int depth,\n    int space,\n    json_dump_callback_t dump,\n    void* data) {\n  if (JSON_INDENT(flags) > 0) {\n    int i, ws_count = JSON_INDENT(flags);\n\n    if (dump(\"\\n\", 1, data))\n      return -1;\n\n    for (i = 0; i < depth; i++) {\n      if (dump(whitespace, ws_count, data))\n        return -1;\n    }\n  } else if (space && !(flags & JSON_COMPACT)) {\n    return dump(\" \", 1, data);\n  }\n  return 0;\n}\n\nstatic int dump_string(\n    const char* str,\n    json_dump_callback_t dump,\n    void* data,\n    size_t flags) {\n  const char *pos, *end;\n  int32_t codepoint;\n\n  if (dump(\"\\\"\", 1, data))\n    return -1;\n\n  end = pos = str;\n  while (1) {\n    const char* text;\n    char seq[13];\n    int length;\n\n    while (*end) {\n      end = utf8_iterate(pos, &codepoint);\n      if (!end) {\n        return -1;\n      }\n\n      /* mandatory escape or control char */\n      if (codepoint == '\\\\' || codepoint == '\"' || codepoint < 0x20)\n        break;\n\n      /* slash */\n      if ((flags & JSON_ESCAPE_SLASH) && codepoint == '/')\n        break;\n\n      /* non-ASCII */\n      if ((flags & JSON_ENSURE_ASCII) && codepoint > 0x7F)\n        break;\n\n      pos = end;\n    }\n\n    if (pos != str) {\n      if (dump(str, pos - str, data))\n        return -1;\n    }\n\n    if (end == pos)\n      break;\n\n    /* handle \\, /, \", and control codes */\n    length = 2;\n    switch (codepoint) {\n      case '\\\\':\n        text = \"\\\\\\\\\";\n        break;\n      case '\\\"':\n        text = \"\\\\\\\"\";\n        break;\n      case '\\b':\n        text = \"\\\\b\";\n        break;\n      case '\\f':\n        text = \"\\\\f\";\n        break;\n      case '\\n':\n        text = \"\\\\n\";\n        break;\n      case '\\r':\n        text = \"\\\\r\";\n        break;\n      case '\\t':\n        text = \"\\\\t\";\n        break;\n      case '/':\n        text = \"\\\\/\";\n        break;\n      default: {\n        /* codepoint is in BMP */\n        if (codepoint < 0x10000) {\n          sprintf(seq, \"\\\\u%04x\", codepoint);\n          length = 6;\n        }\n\n        /* not in BMP -> construct a UTF-16 surrogate pair */\n        else {\n          int32_t first, last;\n\n          codepoint -= 0x10000;\n          first = 0xD800 | ((codepoint & 0xffc00) >> 10);\n          last = 0xDC00 | (codepoint & 0x003ff);\n\n          sprintf(seq, \"\\\\u%04x\\\\u%04x\", first, last);\n          length = 12;\n        }\n\n        text = seq;\n        break;\n      }\n    }\n\n    if (dump(text, length, data))\n      return -1;\n\n    str = pos = end;\n  }\n\n  return dump(\"\\\"\", 1, data);\n}\n\nstatic int do_dump(\n    const json_ref& json,\n    size_t flags,\n    int depth,\n    json_dump_callback_t dump,\n    void* data) {\n  switch (json.type()) {\n    case JSON_NULL:\n      return dump(\"null\", 4, data);\n\n    case JSON_TRUE:\n      return dump(\"true\", 4, data);\n\n    case JSON_FALSE:\n      return dump(\"false\", 5, data);\n\n    case JSON_INTEGER: {\n      char buffer[MAX_INTEGER_STR_LENGTH];\n      int size;\n\n      size = snprintf(\n          buffer,\n          MAX_INTEGER_STR_LENGTH,\n          \"%\" JSON_INTEGER_FORMAT,\n          json_integer_value(json));\n      if (size < 0 || size >= MAX_INTEGER_STR_LENGTH) {\n        return -1;\n      }\n\n      return dump(buffer, size, data);\n    }\n\n    case JSON_REAL: {\n      char buffer[MAX_REAL_STR_LENGTH];\n      int size;\n      double value = json_real_value(json);\n\n      size = jsonp_dtostr(buffer, MAX_REAL_STR_LENGTH, value);\n      if (size < 0) {\n        return -1;\n      }\n\n      return dump(buffer, size, data);\n    }\n\n    case JSON_STRING:\n      return dump_string(json_string_value(json), dump, data, flags);\n\n    case JSON_ARRAY: {\n      auto& arr = json.array();\n\n      if (dump(\"[\", 1, data)) {\n        return -1;\n      }\n      if (arr.size() == 0) {\n        return dump(\"]\", 1, data);\n      }\n      if (dump_indent(flags, depth + 1, 0, dump, data))\n        return -1;\n\n      for (size_t i = 0; i < arr.size(); ++i) {\n        if (do_dump(arr[i], flags, depth + 1, dump, data)) {\n          return -1;\n        }\n\n        if (i < arr.size() - 1) {\n          if (dump(\",\", 1, data) ||\n              dump_indent(flags, depth + 1, 1, dump, data)) {\n            return -1;\n          }\n        } else {\n          if (dump_indent(flags, depth, 0, dump, data)) {\n            return -1;\n          }\n        }\n      }\n\n      return dump(\"]\", 1, data);\n    }\n\n    case JSON_OBJECT: {\n      json_object_t* object;\n      const char* separator;\n      int separator_length;\n\n      if (flags & JSON_COMPACT) {\n        separator = \":\";\n        separator_length = 1;\n      } else {\n        separator = \": \";\n        separator_length = 2;\n      }\n\n      object = json_to_object(json.get());\n      auto it = object->map.begin();\n\n      if (dump(\"{\", 1, data)) {\n        return -1;\n      }\n      if (object->map.empty()) {\n        return dump(\"}\", 1, data);\n      }\n\n      if (dump_indent(flags, depth + 1, 0, dump, data)) {\n        return -1;\n      }\n\n      if (flags & JSON_SORT_KEYS) {\n        using Pair = std::pair<const w_string, json_ref>;\n\n        std::vector<Pair*> items;\n        items.reserve(object->map.size());\n        for (auto& item : object->map) {\n          items.push_back(&item);\n        }\n\n        std::sort(items.begin(), items.end(), [](const Pair* a, const Pair* b) {\n          return a->first < b->first;\n        });\n\n        auto sorted_it = items.begin();\n        while (sorted_it != items.end()) {\n          auto next = std::next(sorted_it);\n\n          dump_string((*sorted_it)->first.c_str(), dump, data, flags);\n          if (dump(separator, separator_length, data) ||\n              do_dump((*sorted_it)->second, flags, depth + 1, dump, data)) {\n            return -1;\n          }\n\n          if (next != items.end()) {\n            if (dump(\",\", 1, data) ||\n                dump_indent(flags, depth + 1, 1, dump, data)) {\n              return -1;\n            }\n          } else {\n            if (dump_indent(flags, depth, 0, dump, data)) {\n              return -1;\n            }\n          }\n\n          sorted_it = next;\n        }\n      } else {\n        while (it != object->map.end()) {\n          auto next = std::next(it);\n\n          dump_string(it->first.c_str(), dump, data, flags);\n          if (dump(separator, separator_length, data) ||\n              do_dump(it->second, flags, depth + 1, dump, data)) {\n            return -1;\n          }\n\n          if (next != object->map.end()) {\n            if (dump(\",\", 1, data) ||\n                dump_indent(flags, depth + 1, 1, dump, data)) {\n              return -1;\n            }\n          } else {\n            if (dump_indent(flags, depth, 0, dump, data)) {\n              return -1;\n            }\n          }\n\n          it = next;\n        }\n      }\n      return dump(\"}\", 1, data);\n    }\n\n    default:\n      /* not reached */\n      return -1;\n  }\n}\n\nstd::string json_dumps(const json_ref& json, size_t flags) {\n  std::string strbuff;\n\n  if (json_dump_callback(json, dump_to_string, (void*)&strbuff, flags)) {\n    throw std::runtime_error(\"json_dumps failed\");\n  }\n  return strbuff;\n}\n\nint json_dumpf(const json_ref& json, FILE* output, size_t flags) {\n  return json_dump_callback(json, dump_to_file, (void*)output, flags);\n}\n\nint json_dump_file(const json_ref& json, const char* path, size_t flags) {\n  std::unique_ptr<FILE, int (*)(FILE*)> output{fopen(path, \"w\"), &fclose};\n  if (!output)\n    return -1;\n\n  return json_dumpf(json, output.get(), flags);\n}\n\nint json_dump_callback(\n    const json_ref& json,\n    json_dump_callback_t callback,\n    void* data,\n    size_t flags) {\n  if (!(flags & JSON_ENCODE_ANY)) {\n    if (!json.isArray() && !json.isObject())\n      return -1;\n  }\n\n  return do_dump(json, flags, 0, callback, data);\n}\n"
  },
  {
    "path": "watchman/thirdparty/jansson/error.cpp",
    "content": "/*\n * Copyright (c) 2009-2012 Petri Lehtinen <petri@digip.org>\n *\n * Jansson is free software; you can redistribute it and/or modify\n * it under the terms of the MIT license. See LICENSE for details.\n */\n\n#include <string.h>\n#include \"jansson_private.h\"\n\nvoid jsonp_error_init(json_error_t* error, const char* source) {\n  if (error) {\n    error->text[0] = '\\0';\n    error->line = -1;\n    error->column = -1;\n    error->position = 0;\n    if (source)\n      jsonp_error_set_source(error, source);\n    else\n      error->source[0] = '\\0';\n  }\n}\n\nvoid jsonp_error_set_source(json_error_t* error, const char* source) {\n  size_t length;\n\n  if (!error || !source)\n    return;\n\n  length = strlen(source);\n  if (length < JSON_ERROR_SOURCE_LENGTH)\n    strcpy(error->source, source);\n  else {\n    size_t extra = length - JSON_ERROR_SOURCE_LENGTH + 4;\n    strcpy(error->source, \"...\");\n    strcpy(error->source + 3, source + extra);\n  }\n}\n\nvoid jsonp_error_set(\n    json_error_t* error,\n    int line,\n    int column,\n    size_t position,\n    const char* msg,\n    ...) {\n  va_list ap;\n\n  va_start(ap, msg);\n  jsonp_error_vset(error, line, column, position, msg, ap);\n  va_end(ap);\n}\n\nvoid jsonp_error_vset(\n    json_error_t* error,\n    int line,\n    int column,\n    size_t position,\n    const char* msg,\n    va_list ap) {\n  if (!error)\n    return;\n\n  if (error->text[0] != '\\0') {\n    /* error already set */\n    return;\n  }\n\n  error->line = line;\n  error->column = column;\n  error->position = position;\n\n  vsnprintf(error->text, JSON_ERROR_TEXT_LENGTH, msg, ap);\n  error->text[JSON_ERROR_TEXT_LENGTH - 1] = '\\0';\n}\n"
  },
  {
    "path": "watchman/thirdparty/jansson/jansson.h",
    "content": "/* Copyright (c) 2009-2012 Petri Lehtinen <petri@digip.org>\n *\n * Jansson is free software; you can redistribute it and/or modify\n * it under the terms of the MIT license. See LICENSE for details.\n */\n\n#pragma once\n\n#include \"watchman/watchman_string.h\" // Needed for w_string_t\n\n#include <stdarg.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <atomic>\n#include <cstdlib> /* for size_t */\n#include <map>\n#include <optional>\n#include <string>\n#include <type_traits>\n#include <unordered_map>\n#include <vector>\n#include \"watchman/thirdparty/jansson/utf.h\"\n\n/* types */\n\nenum json_type : char {\n  JSON_OBJECT,\n  JSON_ARRAY,\n  JSON_STRING,\n  JSON_INTEGER,\n  JSON_REAL,\n  JSON_TRUE,\n  JSON_FALSE,\n  JSON_NULL\n};\n\n// Required for fmt 10\ninline char format_as(json_type type) {\n  return static_cast<char>(type);\n}\n\nstruct json_t {\n  json_type type;\n  std::atomic<size_t> refcount;\n\n  explicit json_t(json_type type);\n\n  struct SingletonHack {};\n  // true, false, null are never heap allocated, always\n  // reference a global singleton value with a bogus refcount\n  json_t(json_type type, SingletonHack&&);\n};\n\n#define JSON_INTEGER_FORMAT PRId64\nusing json_int_t = int64_t;\n\nclass json_ref {\n  // ref_ is never a null pointer. The moved-from json_ref points to the JSON\n  // null singleton.\n  json_t* ref_;\n\n  void incref() {\n    if (ref_->refcount.load(std::memory_order_relaxed) != (size_t)-1) {\n      ref_->refcount.fetch_add(1, std::memory_order_relaxed);\n    }\n  }\n\n  void decref() {\n    if (ref_->refcount.load(std::memory_order_relaxed) != (size_t)-1) {\n      if (1 == ref_->refcount.fetch_sub(1, std::memory_order_acq_rel)) {\n        json_delete(ref_);\n      }\n    }\n  }\n\n  static void json_delete(json_t* json);\n\n  /**\n   * DO NOT USE. Private constructor for internal use by json_* constructor\n   * functions.\n   */\n  explicit json_ref(json_t* ref) : ref_{ref} {\n    assert(ref_ != nullptr);\n  }\n\n public:\n  /**\n   * DO NOT USE. Private constructor for internal use by json_* constructor\n   * functions.\n   */\n  static json_ref takeOwnership(json_t* ref) {\n    return json_ref{ref};\n  }\n\n  json_ref() = delete;\n  ~json_ref();\n\n  json_ref(const json_ref& other);\n  json_ref& operator=(const json_ref& other);\n\n  json_ref(json_ref&& other) noexcept;\n  json_ref& operator=(json_ref&& other) noexcept;\n\n  void reset();\n\n  json_t* get() const {\n    return ref_;\n  }\n\n  /**\n   * Returns the value associated with key in a json object.\n   * Returns defval if this json value is not an object or\n   * if the key was not found.\n   */\n  json_ref get_default(const char* key, json_ref defval) const;\n\n  /**\n   * Returns the value associated with key in a json object.\n   * Throws domain_error if this is not a json object or\n   * a range_error if the key is not present.\n   */\n  const json_ref& get(const char* key) const;\n\n  /**\n   * Returns the value associated with a key in a JSON object.\n   * Returns std::nullopt if this JSON value is not an object or if the key is\n   * not found.\n   */\n  std::optional<json_ref> get_optional(const char* key) const;\n\n  /** Set key = value */\n  void set(const char* key, json_ref&& val);\n  void set(const w_string& key, json_ref&& val);\n\n  /** Set a list of key/value pairs */\n  void set(std::initializer_list<std::pair<const char*, json_ref&&>> pairs) {\n    for (auto& p : pairs) {\n      set(p.first, std::move(p.second));\n    }\n  }\n\n  /**\n   * Returns a reference to the underlying array.\n   * Throws domain_error if this is not an array.\n   * This is useful both for iterating the array contents\n   * and for returning the size of the array.\n   */\n  const std::vector<json_ref>& array() const;\n\n  /**\n   * Returns a reference to the underlying map object.\n   * Throws domain_error if this is not an object.\n   * This is useful for iterating over the object contents, etc.\n   */\n  const std::unordered_map<w_string, json_ref>& object() const;\n\n  /** Returns a reference to the array value at the specified index.\n   * Throws out_of_range or domain_error if the index is bad or if\n   * this is not an array */\n  const json_ref& at(std::size_t idx) const {\n    return array().at(idx);\n  }\n\n  json_type type() const {\n    assert(ref_ != nullptr);\n    return ref_->type;\n  }\n\n  bool isObject() const {\n    return type() == JSON_OBJECT;\n  }\n  bool isArray() const {\n    return type() == JSON_ARRAY;\n  }\n  bool isString() const {\n    return type() == JSON_STRING;\n  }\n  bool isBool() const {\n    return (type() == JSON_TRUE || type() == JSON_FALSE);\n  }\n  bool isTrue() const {\n    return type() == JSON_TRUE;\n  }\n  bool isFalse() const {\n    return type() == JSON_FALSE;\n  }\n  bool isNull() const {\n    return type() == JSON_NULL;\n  }\n  bool isNumber() const {\n    return isInt() || isDouble();\n  }\n  bool isInt() const {\n    return type() == JSON_INTEGER;\n  }\n  bool isDouble() const {\n    return type() == JSON_REAL;\n  }\n\n  /**\n   * Throws if not a string.\n   */\n  const w_string& asString() const;\n\n  /**\n   * If not a string, returns std::nullopt.\n   *\n   * A more efficient method would return a nullable pointer.\n   */\n  std::optional<w_string> asOptionalString() const;\n\n  /**\n   * Converts to a JSON formatted string.\n   */\n  std::string toString() const;\n\n  const char* asCString() const;\n  bool asBool() const;\n  json_int_t asInt() const;\n};\n\n/* construction, destruction, reference counting */\n\njson_ref json_object();\njson_ref json_object(std::unordered_map<w_string, json_ref> values);\njson_ref json_object(\n    std::initializer_list<std::pair<const char*, json_ref>> values);\njson_ref json_array(std::vector<json_ref> values);\njson_ref json_array(std::initializer_list<json_ref> values);\njson_ref w_string_to_json(w_string str);\n\ntemplate <typename... Args>\njson_ref typed_string_to_json(Args&&... args) {\n  return w_string_to_json(w_string(std::forward<Args>(args)...));\n}\n\nconst w_string& json_to_w_string(const json_ref& json);\njson_ref json_integer(json_int_t value);\njson_ref json_real(double value);\njson_ref json_true();\njson_ref json_false();\n#define json_boolean(val) ((val) ? json_true() : json_false())\njson_ref json_null();\n\n/* error reporting */\n\n#define JSON_ERROR_TEXT_LENGTH 160\n#define JSON_ERROR_SOURCE_LENGTH 80\n\nstruct json_error_t {\n  int line = 0;\n  int column = 0;\n  int position = 0;\n  char source[JSON_ERROR_SOURCE_LENGTH];\n  char text[JSON_ERROR_TEXT_LENGTH];\n\n  json_error_t() {\n    source[0] = 0;\n    text[0] = 0;\n  }\n\n  explicit json_error_t(const char* t) {\n    source[0] = 0;\n    snprintf(text, sizeof(text), \"%s\", t);\n  }\n};\n\n/* getters, setters, manipulation */\n\nsize_t json_object_size(const json_ref& object);\nstd::optional<json_ref> json_object_get(\n    const json_ref& object,\n    const char* key);\nint json_object_set_new(\n    const json_ref& object,\n    const char* key,\n    json_ref&& value);\nint json_object_set_new_nocheck(\n    const json_ref& object,\n    const char* key,\n    json_ref&& value);\n\ninline int json_object_set(\n    const json_ref& object,\n    const char* key,\n    const json_ref& value) {\n  return json_object_set_new(object, key, json_ref(value));\n}\n\ninline int json_object_set_nocheck(\n    const json_ref& object,\n    const char* key,\n    const json_ref& value) {\n  return json_object_set_new_nocheck(object, key, json_ref(value));\n}\n\nsize_t json_array_size(const json_ref& array);\nint json_array_set_template_new(const json_ref& json, json_ref&& templ);\nstd::optional<json_ref> json_array_get_template(const json_ref& array);\n\nconst char* json_string_value(const json_ref& string);\njson_int_t json_integer_value(const json_ref& integer);\ndouble json_real_value(const json_ref& real);\ndouble json_number_value(const json_ref& json);\n\n#define JSON_VALIDATE_ONLY 0x1\n#define JSON_STRICT 0x2\n\n/* equality */\n\nint json_equal(const json_ref& value1, const json_ref& value2);\n\n/* copying */\n\njson_ref json_deep_copy(const json_ref& value);\n\n/* decoding */\n\n#define JSON_REJECT_DUPLICATES 0x1\n#define JSON_DISABLE_EOF_CHECK 0x2\n#define JSON_DECODE_ANY 0x4\n\nstd::optional<json_ref>\njson_loads(const char* input, size_t flags, json_error_t* error);\nstd::optional<json_ref> json_loadb(\n    const char* buffer,\n    size_t buflen,\n    size_t flags,\n    json_error_t* error);\nstd::optional<json_ref>\njson_loadf(FILE* input, size_t flags, json_error_t* error);\njson_ref json_load_file(const char* path, size_t flags);\n\n/* encoding */\n\n#define JSON_INDENT(n) (n & 0x1F)\n#define JSON_COMPACT 0x20\n#define JSON_ENSURE_ASCII 0x40\n#define JSON_SORT_KEYS 0x80\n#define JSON_ENCODE_ANY 0x200\n#define JSON_ESCAPE_SLASH 0x400\n\ntypedef int (\n    *json_dump_callback_t)(const char* buffer, size_t size, void* data);\n\nstd::string json_dumps(const json_ref& json, size_t flags);\nint json_dumpf(const json_ref& json, FILE* output, size_t flags);\nint json_dump_file(const json_ref& json, const char* path, size_t flags);\nint json_dump_callback(\n    const json_ref& json,\n    json_dump_callback_t callback,\n    void* data,\n    size_t flags);\n"
  },
  {
    "path": "watchman/thirdparty/jansson/jansson_private.h",
    "content": "/*\n * Copyright (c) 2009-2012 Petri Lehtinen <petri@digip.org>\n *\n * Jansson is free software; you can redistribute it and/or modify\n * it under the terms of the MIT license. See LICENSE for details.\n */\n\n#ifndef JANSSON_PRIVATE_H\n#define JANSSON_PRIVATE_H\n\n#include <stddef.h>\n#include <algorithm>\n#include <unordered_map>\n#include <vector>\n#include \"jansson.h\"\n\nstruct json_object_t : json_t {\n  std::unordered_map<w_string, json_ref> map;\n\n  explicit json_object_t(std::unordered_map<w_string, json_ref> values);\n\n  typename std::unordered_map<w_string, json_ref>::iterator findCString(\n      const char* key);\n};\n\nstruct json_array_t : json_t {\n  std::vector<json_ref> table;\n  std::optional<json_ref> templ;\n\n  json_array_t(std::vector<json_ref> values);\n  json_array_t(std::initializer_list<json_ref> values);\n};\n\nstruct json_string_t : json_t {\n  w_string value;\n\n  json_string_t(w_string str);\n};\n\nstruct json_real_t : json_t {\n  double value;\n\n  json_real_t(double value);\n};\n\nstruct json_integer_t : json_t {\n  json_int_t value;\n\n  json_integer_t(json_int_t value);\n};\n\ninline json_object_t* json_to_object(const json_t* json) {\n  return static_cast<json_object_t*>(const_cast<json_t*>(json));\n}\n\ninline json_array_t* json_to_array(const json_t* json) {\n  return static_cast<json_array_t*>(const_cast<json_t*>(json));\n}\n\ninline json_string_t* json_to_string(const json_t* json) {\n  return static_cast<json_string_t*>(const_cast<json_t*>(json));\n}\n\ninline json_real_t* json_to_real(const json_t* json) {\n  return static_cast<json_real_t*>(const_cast<json_t*>(json));\n}\n\ninline json_integer_t* json_to_integer(const json_t* json) {\n  return static_cast<json_integer_t*>(const_cast<json_t*>(json));\n}\n\nvoid jsonp_error_init(json_error_t* error, const char* source);\nvoid jsonp_error_set_source(json_error_t* error, const char* source);\nvoid jsonp_error_set(\n    json_error_t* error,\n    int line,\n    int column,\n    size_t position,\n    const char* msg,\n    ...);\nvoid jsonp_error_vset(\n    json_error_t* error,\n    int line,\n    int column,\n    size_t position,\n    const char* msg,\n    va_list ap);\n\n/* Locale independent string<->double conversions */\nint jsonp_strtod(std::string& strbuffer, double* out);\nint jsonp_dtostr(char* buffer, size_t size, double value);\n\n/* Windows compatibility */\n#ifdef _WIN32\n#define snprintf _snprintf\n#define vsnprintf _vsnprintf\n#endif\n\n#endif\n"
  },
  {
    "path": "watchman/thirdparty/jansson/load.cpp",
    "content": "/*\n * Copyright (c) 2009-2012 Petri Lehtinen <petri@digip.org>\n *\n * Jansson is free software; you can redistribute it and/or modify\n * it under the terms of the MIT license. See LICENSE for details.\n */\n\n#ifndef _GNU_SOURCE\n#define _GNU_SOURCE\n#endif\n#include \"jansson.h\"\n#include \"jansson_private.h\"\n#include \"utf.h\"\n\n#include <assert.h>\n#include <errno.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include <system_error>\n\n#include <fmt/core.h>\n#include <folly/String.h>\n\n\n#define STREAM_STATE_OK 0\n#define STREAM_STATE_EOF -1\n#define STREAM_STATE_ERROR -2\n\n#define TOKEN_INVALID -1\n#define TOKEN_EOF 0\n#define TOKEN_STRING 256\n#define TOKEN_INTEGER 257\n#define TOKEN_REAL 258\n#define TOKEN_TRUE 259\n#define TOKEN_FALSE 260\n#define TOKEN_NULL 261\n\n/* Locale independent versions of isxxx() functions */\n#define l_isupper(c) ('A' <= (c) && (c) <= 'Z')\n#define l_islower(c) ('a' <= (c) && (c) <= 'z')\n#define l_isalpha(c) (l_isupper(c) || l_islower(c))\n#define l_isdigit(c) ('0' <= (c) && (c) <= '9')\n#define l_isxdigit(c) \\\n  (l_isdigit(c) || 'A' <= (c) || (c) <= 'F' || 'a' <= (c) || (c) <= 'f')\n\n/* Read one byte from stream, convert to unsigned char, then int, and\n   return. return EOF on end of file. This corresponds to the\n   behaviour of fgetc(). */\ntypedef int (*get_func)(void* data);\n\n/* When an get_func returns EOF, it can be end of file or an error. This\n   returns non-zero (1) when an error occurred. This corresponds to the\n   behaviour of ferror(). */\ntypedef int (*error_func)(void* data);\n\nnamespace {\n\n// We could write the JSON parser to use O(1) stack depth, but in the short term\n// let's limit container depth.\nconstexpr size_t kMaximumDepth = 1000;\n\ntypedef struct {\n  get_func get;\n  error_func error;\n  void* data;\n  char buffer[5];\n  size_t buffer_pos;\n  int state;\n  int line;\n  int column, last_column;\n  size_t position;\n} stream_t;\n\nstruct lex_t {\n  stream_t stream;\n  std::string saved_text;\n  int token;\n  struct {\n    std::string string;\n    json_int_t integer;\n    double real;\n  } value;\n\n  size_t depth = 0;\n};\n\nclass BumpDepth {\n public:\n  explicit BumpDepth(lex_t* lex) : lex_{lex} {\n    ++lex_->depth;\n  }\n  ~BumpDepth() {\n    --lex_->depth;\n  }\n\n  BumpDepth(const BumpDepth&) = delete;\n  BumpDepth(BumpDepth&&) = delete;\n  BumpDepth& operator=(const BumpDepth&) = delete;\n  BumpDepth& operator=(BumpDepth&&) = delete;\n\n private:\n  lex_t* lex_;\n};\n} // namespace\n\ninline lex_t* stream_to_lex(stream_t* stream) {\n  return reinterpret_cast<lex_t*>(stream);\n}\n\n/*** error reporting ***/\n\nstatic void\nerror_set(json_error_t* error, const lex_t* lex, const char* msg, ...) {\n  va_list ap;\n  char msg_text[JSON_ERROR_TEXT_LENGTH];\n  char msg_with_context[JSON_ERROR_TEXT_LENGTH];\n\n  int line = -1, col = -1;\n  size_t pos = 0;\n  const char* result = msg_text;\n\n  if (!error)\n    return;\n\n  va_start(ap, msg);\n  vsnprintf(msg_text, JSON_ERROR_TEXT_LENGTH, msg, ap);\n  msg_text[JSON_ERROR_TEXT_LENGTH - 1] = '\\0';\n  va_end(ap);\n\n  if (lex) {\n    line = lex->stream.line;\n    col = lex->stream.column;\n    pos = lex->stream.position;\n\n    if (!lex->saved_text.empty()) {\n      if (lex->saved_text.size() <= 20) {\n        auto* saved_text = lex->saved_text.c_str();\n        snprintf(\n            msg_with_context,\n            JSON_ERROR_TEXT_LENGTH,\n            \"%s near '%s'\",\n            msg_text,\n            saved_text);\n        msg_with_context[JSON_ERROR_TEXT_LENGTH - 1] = '\\0';\n        result = msg_with_context;\n      }\n    } else {\n      if (lex->stream.state == STREAM_STATE_ERROR) {\n        /* No context for UTF-8 decoding errors */\n        result = msg_text;\n      } else {\n        snprintf(\n            msg_with_context,\n            JSON_ERROR_TEXT_LENGTH,\n            \"%s near end of file\",\n            msg_text);\n        msg_with_context[JSON_ERROR_TEXT_LENGTH - 1] = '\\0';\n        result = msg_with_context;\n      }\n    }\n  }\n\n  jsonp_error_set(error, line, col, pos, \"%s\", result);\n}\n\n/*** lexical analyzer ***/\n\nstatic void stream_init(stream_t* stream, get_func get, error_func error, void* data) {\n  stream->get = get;\n  stream->error = error;\n  stream->data = data;\n  stream->buffer[0] = '\\0';\n  stream->buffer_pos = 0;\n\n  stream->state = STREAM_STATE_OK;\n  stream->line = 1;\n  stream->column = 0;\n  stream->position = 0;\n}\n\nstatic int stream_get(stream_t* stream, json_error_t* error) {\n  int c;\n\n  if (stream->state != STREAM_STATE_OK)\n    return stream->state;\n\n  if (!stream->buffer[stream->buffer_pos]) {\n    c = stream->get(stream->data);\n    if (c == EOF) {\n      if (stream->error(stream->data)) {\n        auto err = errno;\n        throw std::system_error(\n            err, std::generic_category(), \"error occurred when reading from stream\");\n      }\n\n      stream->state = STREAM_STATE_EOF;\n      return STREAM_STATE_EOF;\n    }\n\n    stream->buffer[0] = c;\n    stream->buffer_pos = 0;\n\n    if (0x80 <= c && c <= 0xFF) {\n      /* multi-byte UTF-8 sequence */\n      int i, count;\n\n      count = utf8_check_first(c);\n      if (!count)\n        goto out;\n\n      assert(count >= 2);\n\n      for (i = 1; i < count; i++)\n        stream->buffer[i] = stream->get(stream->data);\n\n      if (!utf8_check_full(stream->buffer, count, nullptr))\n        goto out;\n\n      stream->buffer[count] = '\\0';\n    } else\n      stream->buffer[1] = '\\0';\n  }\n\n  c = stream->buffer[stream->buffer_pos++];\n\n  stream->position++;\n  if (c == '\\n') {\n    stream->line++;\n    stream->last_column = stream->column;\n    stream->column = 0;\n  } else if (utf8_check_first(c)) {\n    /* track the Unicode character column, so increment only if\n       this is the first character of a UTF-8 sequence */\n    stream->column++;\n  }\n\n  return c;\n\nout:\n  stream->state = STREAM_STATE_ERROR;\n  error_set(error, stream_to_lex(stream), \"unable to decode byte 0x%x\", c);\n  return STREAM_STATE_ERROR;\n}\n\nstatic void stream_unget(stream_t* stream, int c) {\n  if (c == STREAM_STATE_EOF || c == STREAM_STATE_ERROR)\n    return;\n\n  stream->position--;\n  if (c == '\\n') {\n    stream->line--;\n    stream->column = stream->last_column;\n  } else if (utf8_check_first(c))\n    stream->column--;\n\n  assert(stream->buffer_pos > 0);\n  stream->buffer_pos--;\n  assert(stream->buffer[stream->buffer_pos] == c);\n}\n\nstatic int lex_get(lex_t* lex, json_error_t* error) {\n  return stream_get(&lex->stream, error);\n}\n\nstatic void lex_save(lex_t* lex, int c) {\n  lex->saved_text.push_back(c);\n}\n\nstatic int lex_get_save(lex_t* lex, json_error_t* error) {\n  int c = stream_get(&lex->stream, error);\n  if (c != STREAM_STATE_EOF && c != STREAM_STATE_ERROR)\n    lex_save(lex, c);\n  return c;\n}\n\nstatic void lex_unget(lex_t* lex, int c) {\n  stream_unget(&lex->stream, c);\n}\n\nstatic void lex_unget_unsave(lex_t* lex, int c) {\n  if (c != STREAM_STATE_EOF && c != STREAM_STATE_ERROR) {\n    stream_unget(&lex->stream, c);\n    auto d = lex->saved_text.back();\n    lex->saved_text.pop_back();\n    assert(c == d);\n    (void)d;\n  }\n}\n\nstatic void lex_save_cached(lex_t* lex) {\n  while (lex->stream.buffer[lex->stream.buffer_pos] != '\\0') {\n    lex_save(lex, lex->stream.buffer[lex->stream.buffer_pos]);\n    lex->stream.buffer_pos++;\n    lex->stream.position++;\n  }\n}\n\n/* assumes that str points to 'u' plus at least 4 valid hex digits */\nstatic int32_t decode_unicode_escape(const char* str) {\n  int i;\n  int32_t value = 0;\n\n  assert(str[0] == 'u');\n\n  for (i = 1; i <= 4; i++) {\n    char c = str[i];\n    value <<= 4;\n    if (l_isdigit(c))\n      value += c - '0';\n    else if (l_islower(c))\n      value += c - 'a' + 10;\n    else if (l_isupper(c))\n      value += c - 'A' + 10;\n    else\n      assert(0);\n  }\n\n  return value;\n}\n\nstatic void lex_scan_string(lex_t* lex, json_error_t* error) {\n  int c;\n  const char* p;\n  char* t;\n  int i;\n\n  lex->value.string.clear();\n  lex->token = TOKEN_INVALID;\n\n  c = lex_get_save(lex, error);\n\n  while (c != '\"') {\n    if (c == STREAM_STATE_ERROR)\n      goto out;\n\n    else if (c == STREAM_STATE_EOF) {\n      error_set(error, lex, \"premature end of input\");\n      goto out;\n    } else if (0 <= c && c <= 0x1F) {\n      /* control character */\n      lex_unget_unsave(lex, c);\n      if (c == '\\n')\n        error_set(error, lex, \"unexpected newline\", c);\n      else\n        error_set(error, lex, \"control character 0x%x\", c);\n      goto out;\n    } else if (c == '\\\\') {\n      c = lex_get_save(lex, error);\n      if (c == 'u') {\n        c = lex_get_save(lex, error);\n        for (i = 0; i < 4; i++) {\n          if (!l_isxdigit(c)) {\n            error_set(error, lex, \"invalid escape\");\n            goto out;\n          }\n          c = lex_get_save(lex, error);\n        }\n      } else if (\n          c == '\"' || c == '\\\\' || c == '/' || c == 'b' || c == 'f' ||\n          c == 'n' || c == 'r' || c == 't')\n        c = lex_get_save(lex, error);\n      else {\n        error_set(error, lex, \"invalid escape\");\n        goto out;\n      }\n    } else\n      c = lex_get_save(lex, error);\n  }\n\n  /* the actual value is at most of the same length as the source\n     string, because:\n       - shortcut escapes (e.g. \"\\t\") (length 2) are converted to 1 byte\n       - a single \\uXXXX escape (length 6) is converted to at most 3 bytes\n       - two \\uXXXX escapes (length 12) forming an UTF-16 surrogate pair\n         are converted to 4 bytes\n  */\n  lex->value.string.resize(lex->saved_text.size() + 1);\n\n  /* the target */\n  t = &lex->value.string[0];\n\n  /* + 1 to skip the \" */\n  p = lex->saved_text.c_str() + 1;\n\n  while (*p != '\"') {\n    if (*p == '\\\\') {\n      p++;\n      if (*p == 'u') {\n        char buffer[4];\n        int length;\n        int32_t value;\n\n        value = decode_unicode_escape(p);\n        p += 5;\n\n        if (0xD800 <= value && value <= 0xDBFF) {\n          /* surrogate pair */\n          if (*p == '\\\\' && *(p + 1) == 'u') {\n            int32_t value2 = decode_unicode_escape(++p);\n            p += 5;\n\n            if (0xDC00 <= value2 && value2 <= 0xDFFF) {\n              /* valid second surrogate */\n              value = ((value - 0xD800) << 10) + (value2 - 0xDC00) + 0x10000;\n            } else {\n              /* invalid second surrogate */\n              error_set(\n                  error,\n                  lex,\n                  \"invalid Unicode '\\\\u%04X\\\\u%04X'\",\n                  value,\n                  value2);\n              goto out;\n            }\n          } else {\n            /* no second surrogate */\n            error_set(error, lex, \"invalid Unicode '\\\\u%04X'\", value);\n            goto out;\n          }\n        } else if (0xDC00 <= value && value <= 0xDFFF) {\n          error_set(error, lex, \"invalid Unicode '\\\\u%04X'\", value);\n          goto out;\n        } else if (value == 0) {\n          error_set(error, lex, \"\\\\u0000 is not allowed\");\n          goto out;\n        }\n\n        if (utf8_encode(value, buffer, &length))\n          assert(0);\n\n        memcpy(t, buffer, length);\n        t += length;\n      } else {\n        switch (*p) {\n          case '\"':\n          case '\\\\':\n          case '/':\n            *t = *p;\n            break;\n          case 'b':\n            *t = '\\b';\n            break;\n          case 'f':\n            *t = '\\f';\n            break;\n          case 'n':\n            *t = '\\n';\n            break;\n          case 'r':\n            *t = '\\r';\n            break;\n          case 't':\n            *t = '\\t';\n            break;\n          default:\n            assert(0);\n        }\n        t++;\n        p++;\n      }\n    } else\n      *(t++) = *(p++);\n  }\n  *t = '\\0';\n  lex->token = TOKEN_STRING;\n  return;\n\nout:\n  lex->value.string.clear();\n}\n\n#ifdef _MSC_VER // Microsoft Visual Studio\n#define json_strtoint _strtoi64\n#else\n#define json_strtoint strtoll\n#endif\n\nstatic int lex_scan_number(lex_t* lex, int c, json_error_t* error) {\n  char* end;\n\n  lex->token = TOKEN_INVALID;\n\n  if (c == '-')\n    c = lex_get_save(lex, error);\n\n  if (c == '0') {\n    c = lex_get_save(lex, error);\n    if (l_isdigit(c)) {\n      lex_unget_unsave(lex, c);\n      goto out;\n    }\n  } else if (l_isdigit(c)) {\n    c = lex_get_save(lex, error);\n    while (l_isdigit(c))\n      c = lex_get_save(lex, error);\n  } else {\n    lex_unget_unsave(lex, c);\n    goto out;\n  }\n\n  if (c != '.' && c != 'E' && c != 'e') {\n    json_int_t value;\n\n    lex_unget_unsave(lex, c);\n\n    auto saved_text = lex->saved_text.c_str();\n\n    errno = 0;\n    value = json_strtoint(saved_text, &end, 10);\n    if (errno == ERANGE) {\n      if (value < 0)\n        error_set(error, lex, \"too big negative integer\");\n      else\n        error_set(error, lex, \"too big integer\");\n      goto out;\n    }\n\n    assert(end == saved_text + lex->saved_text.size());\n\n    lex->token = TOKEN_INTEGER;\n    lex->value.integer = value;\n    return 0;\n  }\n\n  if (c == '.') {\n    c = lex_get(lex, error);\n    if (!l_isdigit(c)) {\n      lex_unget(lex, c);\n      goto out;\n    }\n    lex_save(lex, c);\n\n    c = lex_get_save(lex, error);\n    while (l_isdigit(c))\n      c = lex_get_save(lex, error);\n  }\n\n  if (c == 'E' || c == 'e') {\n    c = lex_get_save(lex, error);\n    if (c == '+' || c == '-')\n      c = lex_get_save(lex, error);\n\n    if (!l_isdigit(c)) {\n      lex_unget_unsave(lex, c);\n      goto out;\n    }\n\n    c = lex_get_save(lex, error);\n    while (l_isdigit(c))\n      c = lex_get_save(lex, error);\n  }\n\n  lex_unget_unsave(lex, c);\n\n  double value;\n  if (jsonp_strtod(lex->saved_text, &value)) {\n    error_set(error, lex, \"real number overflow\");\n    goto out;\n  }\n\n  lex->token = TOKEN_REAL;\n  lex->value.real = value;\n  return 0;\n\nout:\n  return -1;\n}\n\nstatic int lex_scan(lex_t* lex, json_error_t* error) {\n  int c;\n\n  lex->saved_text.clear();\n\n  if (lex->token == TOKEN_STRING) {\n    lex->value.string.clear();\n  }\n\n  c = lex_get(lex, error);\n  while (c == ' ' || c == '\\t' || c == '\\n' || c == '\\r')\n    c = lex_get(lex, error);\n\n  if (c == STREAM_STATE_EOF) {\n    lex->token = TOKEN_EOF;\n    goto out;\n  }\n\n  if (c == STREAM_STATE_ERROR) {\n    lex->token = TOKEN_INVALID;\n    goto out;\n  }\n\n  lex_save(lex, c);\n\n  if (c == '{' || c == '}' || c == '[' || c == ']' || c == ':' || c == ',')\n    lex->token = c;\n\n  else if (c == '\"')\n    lex_scan_string(lex, error);\n\n  else if (l_isdigit(c) || c == '-') {\n    if (lex_scan_number(lex, c, error))\n      goto out;\n  }\n\n  else if (l_isalpha(c)) {\n    /* eat up the whole identifier for clearer error messages */\n\n    c = lex_get_save(lex, error);\n    while (l_isalpha(c))\n      c = lex_get_save(lex, error);\n    lex_unget_unsave(lex, c);\n\n    auto saved_text = lex->saved_text.c_str();\n\n    if (strcmp(saved_text, \"true\") == 0)\n      lex->token = TOKEN_TRUE;\n    else if (strcmp(saved_text, \"false\") == 0)\n      lex->token = TOKEN_FALSE;\n    else if (strcmp(saved_text, \"null\") == 0)\n      lex->token = TOKEN_NULL;\n    else\n      lex->token = TOKEN_INVALID;\n  }\n\n  else {\n    /* save the rest of the input UTF-8 sequence to get an error\n       message of valid UTF-8 */\n    lex_save_cached(lex);\n    lex->token = TOKEN_INVALID;\n  }\n\nout:\n  return lex->token;\n}\n\nstatic std::string lex_steal_string(lex_t* lex) {\n  std::string result;\n  if (lex->token == TOKEN_STRING) {\n    std::swap(result, lex->value.string);\n  }\n  return result;\n}\n\nstatic int lex_init(lex_t* lex, get_func get, error_func error, void* data) {\n  stream_init(&lex->stream, get, error, data);\n\n  lex->token = TOKEN_INVALID;\n  return 0;\n}\n\n/*** parser ***/\n\nstatic std::optional<json_ref>\nparse_value(lex_t* lex, size_t flags, json_error_t* error);\n\nstatic std::optional<json_ref>\nparse_object(lex_t* lex, size_t flags, json_error_t* error) {\n  auto object = json_object();\n\n  lex_scan(lex, error);\n  if (lex->token == '}')\n    return object;\n\n  while (1) {\n    if (lex->token != TOKEN_STRING) {\n      error_set(error, lex, \"string or '}' expected\");\n      return std::nullopt;\n    }\n\n    auto key = lex_steal_string(lex);\n    if (key.empty()) {\n      return std::nullopt;\n    }\n\n    if (flags & JSON_REJECT_DUPLICATES) {\n      if (json_object_get(object, key.c_str())) {\n        error_set(error, lex, \"duplicate object key\");\n        return std::nullopt;\n      }\n    }\n\n    lex_scan(lex, error);\n    if (lex->token != ':') {\n      error_set(error, lex, \"':' expected\");\n      return std::nullopt;\n    }\n\n    lex_scan(lex, error);\n    std::optional<json_ref> value = parse_value(lex, flags, error);\n    if (!value) {\n      return std::nullopt;\n    }\n\n    if (json_object_set_nocheck(object, key.c_str(), *value)) {\n      return std::nullopt;\n    }\n\n    lex_scan(lex, error);\n    if (lex->token != ',')\n      break;\n\n    lex_scan(lex, error);\n  }\n\n  if (lex->token != '}') {\n    error_set(error, lex, \"'}' expected\");\n    return std::nullopt;\n  }\n\n  return object;\n}\n\nstatic std::optional<json_ref>\nparse_array(lex_t* lex, size_t flags, json_error_t* error) {\n  std::vector<json_ref> array;\n\n  lex_scan(lex, error);\n  if (lex->token == ']')\n    return json_array(array);\n\n  while (lex->token) {\n    auto elem = parse_value(lex, flags, error);\n    if (!elem)\n      goto error;\n\n    array.push_back(std::move(*elem));\n\n    lex_scan(lex, error);\n    if (lex->token != ',')\n      break;\n\n    lex_scan(lex, error);\n  }\n\n  if (lex->token != ']') {\n    error_set(error, lex, \"']' expected\");\n    goto error;\n  }\n\n  return json_array(std::move(array));\n\nerror:\n  return std::nullopt;\n}\n\nstatic std::optional<json_ref>\nparse_value(lex_t* lex, size_t flags, json_error_t* error) {\n  switch (lex->token) {\n    case TOKEN_STRING:\n      return typed_string_to_json(lex->value.string.c_str(), W_STRING_BYTE);\n\n    case TOKEN_INTEGER:\n      return json_integer(lex->value.integer);\n\n    case TOKEN_REAL:\n      return json_real(lex->value.real);\n\n    case TOKEN_TRUE:\n      return json_true();\n\n    case TOKEN_FALSE:\n      return json_false();\n\n    case TOKEN_NULL:\n      return json_null();\n\n    case '{': {\n      if (lex->depth >= kMaximumDepth) {\n        error_set(error, lex, \"document too deep\");\n        return std::nullopt;\n      }\n      BumpDepth scope(lex);\n      return parse_object(lex, flags, error);\n    }\n\n    case '[': {\n      if (lex->depth >= kMaximumDepth) {\n        error_set(error, lex, \"document too deep\");\n        return std::nullopt;\n      }\n      BumpDepth scope(lex);\n      return parse_array(lex, flags, error);\n    }\n\n    case TOKEN_INVALID:\n      error_set(error, lex, \"invalid token\");\n      return std::nullopt;\n\n    default:\n      error_set(error, lex, \"unexpected token\");\n      return std::nullopt;\n  }\n}\n\nstatic std::optional<json_ref>\nparse_json(lex_t* lex, size_t flags, json_error_t* error) {\n  lex_scan(lex, error);\n  if (!(flags & JSON_DECODE_ANY)) {\n    if (lex->token != '[' && lex->token != '{') {\n      error_set(error, lex, \"'[' or '{' expected\");\n      return std::nullopt;\n    }\n  }\n\n  auto result = parse_value(lex, flags, error);\n  if (!result)\n    return std::nullopt;\n\n  if (!(flags & JSON_DISABLE_EOF_CHECK)) {\n    lex_scan(lex, error);\n    if (lex->token != TOKEN_EOF) {\n      error_set(error, lex, \"end of file expected\");\n      return std::nullopt;\n    }\n  }\n\n  if (error) {\n    /* Save the position even though there was no error */\n    error->position = lex->stream.position;\n  }\n\n  return result;\n}\n\ntypedef struct {\n  const char* data;\n  int pos;\n} string_data_t;\n\nstatic int string_get(void* data) {\n  char c;\n  string_data_t* stream = (string_data_t*)data;\n  c = stream->data[stream->pos];\n  if (c == '\\0')\n    return EOF;\n  else {\n    stream->pos++;\n    return (unsigned char)c;\n  }\n}\n\nstatic int string_error(void*) {\n  return 0;\n}\n\nstd::optional<json_ref>\njson_loads(const char* string, size_t flags, json_error_t* error) {\n  lex_t lex;\n  string_data_t stream_data;\n\n  jsonp_error_init(error, \"<string>\");\n\n  if (string == nullptr) {\n    error_set(error, nullptr, \"wrong arguments\");\n    return std::nullopt;\n  }\n\n  stream_data.data = string;\n  stream_data.pos = 0;\n\n  if (lex_init(&lex, string_get, string_error, (void*)&stream_data))\n    return std::nullopt;\n\n  return parse_json(&lex, flags, error);\n}\n\ntypedef struct {\n  const char* data;\n  size_t len;\n  size_t pos;\n} buffer_data_t;\n\nstatic int buffer_get(void* data) {\n  char c;\n  auto stream = (buffer_data_t*)data;\n  if (stream->pos >= stream->len)\n    return EOF;\n\n  c = stream->data[stream->pos];\n  stream->pos++;\n  return (unsigned char)c;\n}\n\nstatic int buffer_error(void*) {\n  return 0;\n}\n\nstd::optional<json_ref> json_loadb(\n    const char* buffer,\n    size_t buflen,\n    size_t flags,\n    json_error_t* error) {\n  lex_t lex;\n  buffer_data_t stream_data;\n\n  jsonp_error_init(error, \"<buffer>\");\n\n  if (buffer == nullptr) {\n    error_set(error, nullptr, \"wrong arguments\");\n    return std::nullopt;\n  }\n\n  stream_data.data = buffer;\n  stream_data.pos = 0;\n  stream_data.len = buflen;\n\n  if (lex_init(&lex, buffer_get, buffer_error, (void*)&stream_data))\n    return std::nullopt;\n\n  return parse_json(&lex, flags, error);\n}\n\nstd::optional<json_ref>\njson_loadf(FILE* input, size_t flags, json_error_t* error) {\n  lex_t lex;\n  const char* source;\n\n  if (input == stdin)\n    source = \"<stdin>\";\n  else\n    source = \"<stream>\";\n\n  jsonp_error_init(error, source);\n\n  if (input == nullptr) {\n    error_set(error, nullptr, \"wrong arguments\");\n    return std::nullopt;\n  }\n\n  if (lex_init(&lex, (get_func)fgetc, (error_func)ferror, input))\n    return std::nullopt;\n\n  return parse_json(&lex, flags, error);\n}\n\njson_ref json_load_file(const char* path, size_t flags) {\n  if (path == nullptr) {\n    throw std::runtime_error(\"invalid arguments to json_load_file\");\n  }\n\n  auto fp = fopen(path, \"rb\");\n  if (!fp) {\n    auto err = errno;\n    throw std::system_error(\n        err, std::generic_category(), fmt::format(\"unable to open {}\", path));\n  }\n\n  json_error_t error;\n  jsonp_error_init(&error, path);\n  auto result = json_loadf(fp, flags, &error);\n  fclose(fp);\n\n  if (!result) {\n    throw std::runtime_error(\n        fmt::format(\"failed to parse json from {}: {}\", path, error.text));\n  }\n\n  return *result;\n}\n"
  },
  {
    "path": "watchman/thirdparty/jansson/strconv.cpp",
    "content": "/*\n * Copyright (c) 2009-2012 Petri Lehtinen <petri@digip.org>\n *\n * Jansson is free software; you can redistribute it and/or modify\n * it under the terms of the MIT license. See LICENSE for details.\n */\n\n#include <assert.h>\n#include <errno.h>\n#include <fmt/compile.h>\n#include <locale.h>\n#include <stdio.h>\n#include <string.h>\n#include \"jansson_private.h\"\n\n#ifdef __APPLE__\n#include <xlocale.h>\n#endif\n\nnamespace {\n#ifdef _WIN32\n_locale_t getCLocale() {\n  static _locale_t c = _create_locale(LC_ALL, \"C\");\n  return c;\n}\n#else\nlocale_t getCLocale() {\n  static locale_t c = newlocale(LC_ALL_MASK, \"C\", (locale_t)0);\n  return c;\n}\n#endif\n} // namespace\n\nint jsonp_strtod(std::string& strbuffer, double* out) {\n#ifdef _WIN32\n  char* end;\n  double result = _strtod_l(strbuffer.c_str(), &end, getCLocale());\n  if (strbuffer.c_str() == end) {\n    return -1;\n  }\n  *out = result;\n  return 0;\n#else\n  char* end;\n  double result = strtod_l(strbuffer.c_str(), &end, getCLocale());\n  if (strbuffer.c_str() == end) {\n    return -1;\n  }\n\n  *out = result;\n  return 0;\n#endif\n}\n\nint jsonp_dtostr(char* buffer, size_t size, double value) {\n  auto result = fmt::format_to_n(buffer, size, FMT_COMPILE(\"{:.17g}\"), value);\n  if (result.size >= size) {\n    return -1;\n  }\n  // If `value` is integral, buffer may not contain a . or e, so add one. This\n  // avoids parsing a double as an integer, even though the JSON spec does not\n  // differentiate between types of numbers.\n  if (nullptr == memchr(buffer, '.', result.size) &&\n      nullptr == memchr(buffer, 'e', result.size)) {\n    if (result.size + 2 >= size) {\n      return -1;\n    }\n    buffer[result.size] = '.';\n    buffer[result.size + 1] = '0';\n    return result.size + 2;\n  }\n  return result.size;\n}\n"
  },
  {
    "path": "watchman/thirdparty/jansson/utf.cpp",
    "content": "/*\n * Copyright (c) 2009-2012 Petri Lehtinen <petri@digip.org>\n *\n * Jansson is free software; you can redistribute it and/or modify\n * it under the terms of the MIT license. See LICENSE for details.\n */\n\n#include \"utf.h\"\n#include <string.h>\n\nint utf8_encode(int32_t codepoint, char* buffer, int* size) {\n  if (codepoint < 0)\n    return -1;\n  else if (codepoint < 0x80) {\n    buffer[0] = (char)codepoint;\n    *size = 1;\n  } else if (codepoint < 0x800) {\n    buffer[0] = 0xC0 + ((codepoint & 0x7C0) >> 6);\n    buffer[1] = 0x80 + ((codepoint & 0x03F));\n    *size = 2;\n  } else if (codepoint < 0x10000) {\n    buffer[0] = 0xE0 + ((codepoint & 0xF000) >> 12);\n    buffer[1] = 0x80 + ((codepoint & 0x0FC0) >> 6);\n    buffer[2] = 0x80 + ((codepoint & 0x003F));\n    *size = 3;\n  } else if (codepoint <= 0x10FFFF) {\n    buffer[0] = 0xF0 + ((codepoint & 0x1C0000) >> 18);\n    buffer[1] = 0x80 + ((codepoint & 0x03F000) >> 12);\n    buffer[2] = 0x80 + ((codepoint & 0x000FC0) >> 6);\n    buffer[3] = 0x80 + ((codepoint & 0x00003F));\n    *size = 4;\n  } else\n    return -1;\n\n  return 0;\n}\n\nint utf8_check_first(char byte) {\n  unsigned char u = (unsigned char)byte;\n\n  if (u < 0x80)\n    return 1;\n\n  if (0x80 <= u && u <= 0xBF) {\n    /* second, third or fourth byte of a multi-byte\n       sequence, i.e. a \"continuation byte\" */\n    return 0;\n  } else if (u == 0xC0 || u == 0xC1) {\n    /* overlong encoding of an ASCII byte */\n    return 0;\n  } else if (0xC2 <= u && u <= 0xDF) {\n    /* 2-byte sequence */\n    return 2;\n  }\n\n  else if (0xE0 <= u && u <= 0xEF) {\n    /* 3-byte sequence */\n    return 3;\n  } else if (0xF0 <= u && u <= 0xF4) {\n    /* 4-byte sequence */\n    return 4;\n  } else { /* u >= 0xF5 */\n    /* Restricted (start of 4-, 5- or 6-byte sequence) or invalid\n       UTF-8 */\n    return 0;\n  }\n}\n\nint utf8_check_full(const char* buffer, int size, int32_t* codepoint) {\n  int i;\n  int32_t value = 0;\n  unsigned char u = (unsigned char)buffer[0];\n\n  if (size == 2) {\n    value = u & 0x1F;\n  } else if (size == 3) {\n    value = u & 0xF;\n  } else if (size == 4) {\n    value = u & 0x7;\n  } else\n    return 0;\n\n  for (i = 1; i < size; i++) {\n    u = (unsigned char)buffer[i];\n\n    if (u < 0x80 || u > 0xBF) {\n      /* not a continuation byte */\n      return 0;\n    }\n\n    value = (value << 6) + (u & 0x3F);\n  }\n\n  if (value > 0x10FFFF) {\n    /* not in Unicode range */\n    return 0;\n  }\n\n  else if (0xD800 <= value && value <= 0xDFFF) {\n    /* invalid code point (UTF-16 surrogate halves) */\n    return 0;\n  }\n\n  else if (\n      (size == 2 && value < 0x80) || (size == 3 && value < 0x800) ||\n      (size == 4 && value < 0x10000)) {\n    /* overlong encoding */\n    return 0;\n  }\n\n  if (codepoint)\n    *codepoint = value;\n\n  return 1;\n}\n\nconst char* utf8_iterate(const char* buffer, int32_t* codepoint) {\n  int count;\n  int32_t value;\n\n  if (!*buffer)\n    return buffer;\n\n  count = utf8_check_first(buffer[0]);\n  if (count <= 0)\n    return nullptr;\n\n  if (count == 1)\n    value = (unsigned char)buffer[0];\n  else {\n    if (!utf8_check_full(buffer, count, &value))\n      return nullptr;\n  }\n\n  if (codepoint)\n    *codepoint = value;\n\n  return buffer + count;\n}\n\nint utf8_check_string(const char* string, int length) {\n  int i;\n\n  if (length == -1)\n    length = strlen(string);\n\n  for (i = 0; i < length; i++) {\n    int count = utf8_check_first(string[i]);\n    if (count == 0)\n      return 0;\n    else if (count > 1) {\n      if (i + count > length)\n        return 0;\n\n      if (!utf8_check_full(&string[i], count, nullptr))\n        return 0;\n\n      i += count - 1;\n    }\n  }\n\n  return 1;\n}\n\nvoid utf8_fix_string(char* string, size_t length) {\n  auto end = string + length;\n\n  while (string < end) {\n    int count = utf8_check_first(*string);\n    if (count == 0) {\n      // Invalid\n      *string = '?';\n      string++;\n      continue;\n    }\n    if (count == 1) {\n      // Valid ASCII character\n      string++;\n      continue;\n    }\n\n    if (count > end - string) {\n      // UTF-8-encoded string claims to be longer than input. This means the\n      // rest of the string is garbage.\n      memset(string, '?', end - string);\n      return;\n    }\n\n    if (!utf8_check_full(string, count, nullptr)) {\n      // Invalid sequence\n      while (count-- > 0) {\n        *string = '?';\n        string++;\n      }\n    } else {\n      string += count;\n    }\n  }\n}\n"
  },
  {
    "path": "watchman/thirdparty/jansson/utf.h",
    "content": "/*\n * Copyright (c) 2009-2012 Petri Lehtinen <petri@digip.org>\n *\n * Jansson is free software; you can redistribute it and/or modify\n * it under the terms of the MIT license. See LICENSE for details.\n */\n\n#ifndef UTF_H\n#define UTF_H\n\n#ifdef HAVE_CONFIG_H\n#include <config.h> // @manual\n\n#ifdef HAVE_INTTYPES_H\n/* inttypes.h includes stdint.h in a standard environment, so there's\nno need to include stdint.h separately. If inttypes.h doesn't define\nint32_t, it's defined in config.h. */\n#include <inttypes.h>\n#endif /* HAVE_INTTYPES_H */\n\n#else /* !HAVE_CONFIG_H */\n#ifdef _WIN32\ntypedef int int32_t;\n#else /* !_WIN32 */\n/* Assume a standard environment */\n#include <inttypes.h>\n#endif /* _WIN32 */\n\n#endif /* HAVE_CONFIG_H */\n\n#include <cstdlib> /* for size_t */\n\nint utf8_encode(int codepoint, char* buffer, int* size);\n\nint utf8_check_first(char byte);\nint utf8_check_full(const char* buffer, int size, int32_t* codepoint);\nconst char* utf8_iterate(const char* buffer, int32_t* codepoint);\n\nint utf8_check_string(const char* string, int length);\nvoid utf8_fix_string(char* string, size_t length);\n\n#endif\n"
  },
  {
    "path": "watchman/thirdparty/jansson/value.cpp",
    "content": "/* Copyright (c) 2009-2012 Petri Lehtinen <petri@digip.org>\n *\n * Jansson is free software; you can redistribute it and/or modify\n * it under the terms of the MIT license. See LICENSE for details.\n */\n\n#ifndef _GNU_SOURCE\n#define _GNU_SOURCE\n#endif\n\n#include \"jansson.h\"\n#include \"jansson_private.h\"\n\n#include <algorithm>\n#include <cmath>\n#include <fmt/core.h>\n#include <string>\n#include <sstream>\n\n#include \"utf.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace {\n\nconst char* getTypeName(json_type t) {\n  switch (t) {\n    case JSON_OBJECT:\n      return \"object\";\n    case JSON_ARRAY:\n      return \"array\";\n    case JSON_STRING:\n      return \"string\";\n    case JSON_INTEGER:\n      return \"integer\";\n    case JSON_REAL:\n      return \"real\";\n    case JSON_TRUE:\n      return \"true\";\n    case JSON_FALSE:\n      return \"false\";\n    case JSON_NULL:\n      return \"null\";\n  }\n  return \"<unknown>\";\n}\n\nstatic json_t the_null{JSON_NULL, json_t::SingletonHack()};\nstatic json_t the_false{JSON_FALSE, json_t::SingletonHack()};\nstatic json_t the_true{JSON_TRUE, json_t::SingletonHack()};\n\n} // namespace\n\njson_ref::~json_ref() {\n  decref();\n}\n\nvoid json_ref::reset() {\n  decref();\n\n  ref_ = &the_null;\n\n  // No-op, but leave in for clarity. Shouldn't matter.\n  incref();\n}\n\njson_ref::json_ref(const json_ref& other) : ref_(other.ref_) {\n  incref();\n}\n\njson_ref& json_ref::operator=(const json_ref& other) {\n  if (ref_ != other.ref_) {\n    decref();\n    ref_ = other.ref_;\n    incref();\n  }\n  return *this;\n}\n\njson_ref::json_ref(json_ref&& other) noexcept : ref_(other.ref_) {\n  other.ref_ = &the_null;\n}\n\njson_ref& json_ref::operator=(json_ref&& other) noexcept {\n  if (ref_ != other.ref_) {\n    decref();\n    ref_ = std::exchange(other.ref_, &the_null);\n  }\n  return *this;\n}\n\njson_t::json_t(json_type type) : type(type), refcount(1) {}\n\njson_t::json_t(json_type type, json_t::SingletonHack&&)\n    : type(type), refcount(-1) {}\n\nconst w_string& json_ref::asString() const {\n  if (!isString()) {\n    throw std::domain_error(\n        fmt::format(\"json_ref expected string, got {}\", getTypeName(type())));\n  }\n  return json_to_string(ref_)->value;\n}\n\nstd::optional<w_string> json_ref::asOptionalString() const {\n  if (!isString()) {\n    return std::nullopt;\n  }\n  return json_to_string(ref_)->value;\n}\n\nstd::string json_ref::toString() const {\n  switch (this->type()) {\n    case JSON_OBJECT:\n    {\n      std::stringstream ss;\n      const auto& obj = this->object();\n      ss << \"{\";\n      for (auto itr = obj.begin(); itr != obj.end(); itr++) {\n        ss << itr->first.c_str() << \":\" << itr->second.toString() << \",\";\n      }\n      if (obj.size() > 0) {\n        // remove last comma\n        ss.seekp(-1, std::ios_base::end);\n      }\n      ss << \"}\";\n      return ss.str();\n    }\n    case JSON_ARRAY:\n    {\n      std::stringstream ss;\n      const auto& arr = this->array();\n      ss << \"[\";\n      for (const auto& elem: arr) {\n        ss << elem.toString() << \",\";\n      }\n      if (arr.size() > 0) {\n        // remove last comma\n        ss.seekp(-1, std::ios_base::end);\n      }\n      ss << \"]\";\n      return ss.str();\n    }\n    case JSON_STRING:\n      return fmt::format(\"\\\"{}\\\"\", json_string_value(*this));\n    case JSON_INTEGER:\n    case JSON_REAL:\n      return std::to_string(json_number_value(*this));\n    case JSON_TRUE:\n      return \"true\";\n    case JSON_FALSE:\n      return \"false\";\n    case JSON_NULL:\n      return \"null\";\n  }\n  return std::string();\n}\n\nconst char* json_ref::asCString() const {\n  return asString().c_str();\n}\n\nbool json_ref::asBool() const {\n  switch (type()) {\n    case JSON_TRUE:\n      return true;\n    case JSON_FALSE:\n      return false;\n    default:\n      throw std::domain_error(\n          fmt::format(\"asBool called on non-boolean: {}\", getTypeName(type())));\n  }\n}\n\n/*** object ***/\n\nconst std::unordered_map<w_string, json_ref>& json_ref::object() const {\n  if (type() != JSON_OBJECT) {\n    throw std::domain_error(\"json_ref::object() called for non-object\");\n  }\n  return json_to_object(ref_)->map;\n}\n\njson_object_t::json_object_t(std::unordered_map<w_string, json_ref> values)\n    : json_t{JSON_OBJECT}, map{std::move(values)} {}\n\njson_ref json_object(std::unordered_map<w_string, json_ref> values) {\n  return json_ref::takeOwnership(new json_object_t(std::move(values)));\n}\n\njson_ref json_object(\n    std::initializer_list<std::pair<const char*, json_ref>> values) {\n  std::unordered_map<w_string, json_ref> object;\n  object.reserve(values.size());\n\n  for (auto& it : values) {\n    object.emplace(w_string{it.first, W_STRING_UNICODE}, it.second);\n  }\n\n  return json_object(std::move(object));\n}\n\njson_ref json_object() {\n  return json_ref::takeOwnership(new json_object_t{{}});\n}\n\nsize_t json_object_size(const json_ref& json) {\n  if (!json.isObject()) {\n    return 0;\n  }\n\n  return json_to_object(json.get())->map.size();\n}\n\ntypename std::unordered_map<w_string, json_ref>::iterator\njson_object_t::findCString(const char* key) {\n  w_string key_string(key, W_STRING_BYTE);\n  return map.find(key_string);\n}\n\njson_ref json_ref::get_default(const char* key, json_ref defval) const {\n  if (type() != JSON_OBJECT) {\n    return defval;\n  }\n  auto object = json_to_object(ref_);\n  auto it = object->findCString(key);\n  if (it == object->map.end()) {\n    return defval;\n  }\n  return it->second;\n}\n\nconst json_ref& json_ref::get(const char* key) const {\n  if (type() != JSON_OBJECT) {\n    throw std::domain_error(\"json_ref::get called on a non object type\");\n  }\n  auto object = json_to_object(ref_);\n  auto it = object->findCString(key);\n  if (it == object->map.end()) {\n    throw std::range_error(\n        std::string(\"key '\") + key + \"' is not present in this json object\");\n  }\n  return it->second;\n}\n\nstd::optional<json_ref> json_ref::get_optional(const char* key) const {\n  if (type() != JSON_OBJECT) {\n    return std::nullopt;\n  }\n\n  auto object = json_to_object(ref_);\n  auto it = object->findCString(key);\n  if (it == object->map.end()) {\n    return std::nullopt;\n  }\n  return it->second;\n}\n\nstd::optional<json_ref> json_object_get(const json_ref& json, const char* key) {\n  if (!json.isObject()) {\n    return std::nullopt;\n  }\n\n  auto* object = json_to_object(json.get());\n  auto it = object->findCString(key);\n  if (it == object->map.end()) {\n    return std::nullopt;\n  }\n  return it->second;\n}\n\nint json_object_set_new_nocheck(\n    const json_ref& json,\n    const char* key,\n    json_ref&& value) {\n  if (!json.isObject()) {\n    return -1;\n  }\n\n  if (!key || json.get() == value.get()) {\n    return -1;\n  }\n  auto* object = json_to_object(json.get());\n\n  object->map.insert_or_assign(w_string{key}, std::move(value));\n  return 0;\n}\n\nvoid json_ref::set(const w_string& key, json_ref&& val) {\n  json_to_object(ref_)->map.insert_or_assign(key, std::move(val));\n}\n\nvoid json_ref::set(const char* key, json_ref&& val) {\n#if 0 // circular build dep\n  w_assert(key != nullptr, \"json_ref::set called with NULL key\");\n  w_assert(ref_ != nullptr, \"json_ref::set called NULL object\");\n  w_assert(val != ref_, \"json_ref::set cannot create cycle\");\n  w_assert(json_is_object(ref_), \"json_ref::set called for non object type\");\n#endif\n\n  json_to_object(ref_)->map.insert_or_assign(w_string{key}, std::move(val));\n}\n\nint json_object_set_new(\n    const json_ref& json,\n    const char* key,\n    json_ref&& value) {\n  if (!key || !utf8_check_string(key, -1)) {\n    return -1;\n  }\n\n  return json_object_set_new_nocheck(json, key, std::move(value));\n}\n\nstatic int json_object_equal(const json_ref& object1, const json_ref& object2) {\n  if (json_object_size(object1) != json_object_size(object2))\n    return 0;\n\n  auto target_obj = json_to_object(object2.get());\n  for (auto& it : json_to_object(object1.get())->map) {\n    auto other_it = target_obj->map.find(it.first);\n\n    if (other_it == target_obj->map.end()) {\n      return 0;\n    }\n\n    if (!json_equal(it.second, other_it->second)) {\n      return 0;\n    }\n  }\n\n  return 1;\n}\n\nstatic json_ref json_object_deep_copy(const json_ref& object) {\n  json_ref result = json_object();\n\n  auto target_obj = json_to_object(result.get());\n  for (auto& it : json_to_object(object.get())->map) {\n    target_obj->map.insert_or_assign(it.first, json_deep_copy(it.second));\n  }\n\n  return result;\n}\n\n/*** array ***/\n\njson_array_t::json_array_t(std::vector<json_ref> values)\n    : json_t(JSON_ARRAY), table{std::move(values)} {}\n\njson_array_t::json_array_t(std::initializer_list<json_ref> values)\n    : json_t(JSON_ARRAY), table(values) {}\n\nconst std::vector<json_ref>& json_ref::array() const {\n  if (!isArray()) {\n    throw std::domain_error(\"json_ref::array() called for non-array\");\n  }\n  return json_to_array(ref_)->table;\n}\n\njson_ref json_array(std::vector<json_ref> values) {\n  return json_ref::takeOwnership(new json_array_t(std::move(values)));\n}\n\njson_ref json_array(std::initializer_list<json_ref> values) {\n  return json_ref::takeOwnership(new json_array_t(std::move(values)));\n}\n\nint json_array_set_template(const json_ref& json, const json_ref& templ) {\n  return json_array_set_template_new(json, json_ref(templ));\n}\n\nint json_array_set_template_new(const json_ref& json, json_ref&& templ) {\n  if (!json.isArray()) {\n    return 0;\n  }\n  json_to_array(json.get())->templ = std::move(templ);\n  return 1;\n}\n\nstd::optional<json_ref> json_array_get_template(const json_ref& array) {\n  if (!array.isArray()) {\n    return std::nullopt;\n  }\n  return json_to_array(array.get())->templ;\n}\n\nsize_t json_array_size(const json_ref& json) {\n  if (!json.isArray()) {\n    return 0;\n  }\n\n  return json_to_array(json.get())->table.size();\n}\n\nstatic int json_array_equal(const json_ref& array1, const json_ref& array2) {\n  auto& arr1 = array1.array();\n  auto& arr2 = array2.array();\n\n  if (arr1.size() != arr2.size()) {\n    return 0;\n  }\n\n  for (size_t i = 0; i < arr1.size(); ++i) {\n    if (!json_equal(arr1[i], arr2[i])) {\n      return 0;\n    }\n  }\n\n  return 1;\n}\n\nstatic json_ref json_array_deep_copy(const json_ref& array) {\n  std::vector<json_ref> result;\n\n  for (auto& elem : array.array())\n    result.push_back(json_deep_copy(elem));\n\n  return json_array(std::move(result));\n}\n\n/*** string ***/\n\njson_string_t::json_string_t(w_string str)\n    : json_t(JSON_STRING), value(std::move(str)) {}\n\njson_ref w_string_to_json(w_string str) {\n  return json_ref::takeOwnership(new json_string_t(str));\n}\n\nconst char* json_string_value(const json_ref& json) {\n  if (!json.isString()) {\n    return nullptr;\n  }\n\n  return json_to_string(json.get())->value.c_str();\n}\n\nconst w_string& json_to_w_string(const json_ref& json) {\n  if (!json.isString()) {\n    throw std::runtime_error(\"expected json string object\");\n  }\n\n  return json_to_string(json.get())->value;\n}\n\nstatic int json_string_equal(const json_ref& string1, const json_ref& string2) {\n  return json_to_string(string1.get())->value ==\n      json_to_string(string2.get())->value;\n}\n\n/*** integer ***/\n\njson_integer_t::json_integer_t(json_int_t value)\n    : json_t(JSON_INTEGER), value(value) {}\n\njson_ref json_integer(json_int_t value) {\n  return json_ref::takeOwnership(new json_integer_t(value));\n}\n\njson_int_t json_integer_value(const json_ref& json) {\n  if (!json.isInt()) {\n    return 0;\n  }\n  return json_to_integer(json.get())->value;\n}\n\njson_int_t json_ref::asInt() const {\n  return json_integer_value(*this);\n}\n\nstatic int json_integer_equal(\n    const json_ref& integer1,\n    const json_ref& integer2) {\n  return json_integer_value(integer1) == json_integer_value(integer2);\n}\n\n/*** real ***/\n\njson_real_t::json_real_t(double value) : json_t(JSON_REAL), value(value) {}\n\njson_ref json_real(double value) {\n  if (!std::isfinite(value)) {\n    throw std::domain_error(\"Numeric JSON values must be finite\");\n  }\n  return json_ref::takeOwnership(new json_real_t(value));\n}\n\ndouble json_real_value(const json_ref& json) {\n  if (!json.isDouble()) {\n    return 0;\n  }\n\n  return json_to_real(json.get())->value;\n}\n\nstatic int json_real_equal(const json_ref& real1, const json_ref& real2) {\n  return json_real_value(real1) == json_real_value(real2);\n}\n\n/*** number ***/\n\ndouble json_number_value(const json_ref& json) {\n  if (json.isInt())\n    return (double)json_integer_value(json);\n  else if (json.isDouble())\n    return json_real_value(json);\n  else\n    return 0.0;\n}\n\n/*** simple values ***/\n\njson_ref json_true() {\n  return json_ref::takeOwnership(&the_true);\n}\n\njson_ref json_false() {\n  return json_ref::takeOwnership(&the_false);\n}\n\njson_ref json_null() {\n  return json_ref::takeOwnership(&the_null);\n}\n\n/*** deletion ***/\n\nvoid json_ref::json_delete(json_t* json) {\n  switch (json->type) {\n    case JSON_OBJECT:\n      delete (json_object_t*)json;\n      break;\n    case JSON_ARRAY:\n      delete (json_array_t*)json;\n      break;\n    case JSON_STRING:\n      delete (json_string_t*)json;\n      break;\n    case JSON_INTEGER:\n      delete (json_integer_t*)json;\n      break;\n    case JSON_REAL:\n      delete (json_real_t*)json;\n      break;\n    case JSON_TRUE:\n    case JSON_FALSE:\n    case JSON_NULL:\n      break;\n  }\n}\n\n/*** equality ***/\n\nint json_equal(const json_ref& json1, const json_ref& json2) {\n  if (json1.type() != json2.type())\n    return 0;\n\n  /* this covers true, false and null as they are singletons */\n  if (json1.get() == json2.get())\n    return 1;\n\n  if (json1.isObject())\n    return json_object_equal(json1, json2);\n\n  if (json1.isArray())\n    return json_array_equal(json1, json2);\n\n  if (json1.isString())\n    return json_string_equal(json1, json2);\n\n  if (json1.isInt())\n    return json_integer_equal(json1, json2);\n\n  if (json1.isDouble())\n    return json_real_equal(json1, json2);\n\n  return 0;\n}\n\n/*** copying ***/\n\njson_ref json_deep_copy(const json_ref& json) {\n  if (json.isObject())\n    return json_object_deep_copy(json);\n\n  if (json.isArray())\n    return json_array_deep_copy(json);\n\n  // For the rest of the types, the values are immutable, so just increment the\n  // reference count.\n\n  return json;\n}\n"
  },
  {
    "path": "watchman/thirdparty/libart/LICENSE",
    "content": "Copyright (c) 2012, Armon Dadgar\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright\n      notice, this list of conditions and the following disclaimer in the\n      documentation and/or other materials provided with the distribution.\n    * Neither the name of the organization nor the\n      names of its contributors may be used to endorse or promote products\n      derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL ARMON DADGAR BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n"
  },
  {
    "path": "watchman/thirdparty/libart/README.md",
    "content": "libart [![Build Status](https://travis-ci.org/armon/libart.png)](https://travis-ci.org/armon/libart)\n=========\n\nThis library provides a C99 implementation of the Adaptive Radix\nTree or ART. The ART operates similar to a traditional radix tree but\navoids the wasted space of internal nodes by changing the node size.\nIt makes use of 4 node sizes (4, 16, 48, 256), and can guarantee that\nthe overhead is no more than 52 bytes per key, though in practice it is\nmuch lower.\n\nAs a radix tree, it provides the following:\n * O(k) operations. In many cases, this can be faster than a hash table since\n   the hash function is an O(k) operation, and hash tables have very poor cache locality.\n * Minimum / Maximum value lookups\n * Prefix compression\n * Ordered iteration\n * Prefix based iteration\n\n\nUsage\n-------\n\nBuilding the test code will generate errors if libcheck is not available.\nTo build the test code successfully, do the following::\n\n    $ cd deps/check-0.9.8/\n    $ ./configure\n    $ make\n    # make install\n    # ldconfig (necessary on some Linux distros)\n    $ cd ../../\n    $ scons\n    $ ./test_runner\n\n\nReferences\n----------\n\nRelated works:\n\n* [The Adaptive Radix Tree: ARTful Indexing for Main-Memory Databases](http://www-db.in.tum.de/~leis/papers/ART.pdf)\n\n"
  },
  {
    "path": "watchman/thirdparty/libart/src/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"art\",\n    srcs = [],\n    headers = [\n        \"art.h\",\n        \"art-inl.h\",\n    ],\n)\n"
  },
  {
    "path": "watchman/thirdparty/libart/src/art-inl.h",
    "content": "#include <memory>\n\n#ifdef __SSE__\n#include <emmintrin.h>\n#endif\n#include <algorithm>\n#include <new>\n#include <cassert>\n#include <string.h>\n\n#if defined(__clang__)\n# if __has_feature(address_sanitizer)\n#  define ART_SANITIZE_ADDRESS 1\n# endif\n#elif defined (__GNUC__) && \\\n      (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || (__GNUC__ >= 5)) && \\\n      __SANITIZE_ADDRESS__\n# define ART_SANITIZE_ADDRESS 1\n#endif\n\nnamespace detail {\ntemplate <typename T, typename Deleter, typename... Args>\nstd::unique_ptr<T, Deleter> make_unique_with_deleter(Args&&... args) {\n  return std::unique_ptr<T, Deleter>(new T(std::forward<Args>(args)...));\n}\n}\n\n// The ART implementation requires that no key be a full prefix of an existing\n// key during insertion.  In practice this means that each key must have a\n// terminator character.  One approach is to ensure that the key and key_len\n// includes a physical trailing NUL terminator when inserting C-strings.\n// This doesn't help a great deal when working with binary strings that may be\n// a slice in the middle of a buffer that has no termination.\n//\n// To facilitate this the keyAt() function is used to look up the byte\n// value at a given index.  If that index is 1 byte after the end of the\n// key, we synthesize a fake NUL terminator byte.\n//\n// Note that if the keys contain NUL bytes earlier in the string this will\n// break down and won't have the correct results.\n//\n// If the index is out of bounds we will assert to trap the fatal coding\n// error inside this implementation.\n//\n// @param key pointer to the key bytes\n// @param key_len the size of the byte, in bytes\n// @param idx the index into the key\n// @return the value of the key at the supplied index.\ntemplate <typename ValueType, typename KeyType>\ninline unsigned char art_tree<ValueType, KeyType>::keyAt(\n    const unsigned char* key,\n    uint32_t key_len,\n    uint32_t idx) {\n  if (idx == key_len) {\n    // Implicit terminator\n    return 0;\n  }\n#if !ART_SANITIZE_ADDRESS\n    // If we were built with -fsanitize=address, let ASAN catch this,\n    // otherwise, make sure we blow up if the input depth is out of bounds.\n    assert(idx <= key_len);\n#endif\n    return key[idx];\n}\n\n// A helper to bridge the signed/unsigned differences; the tree implementation\n// really relies on the data being unsigned but everyone uses signed types\n// for strings.  This helps to avoid having so many reinterpret_casts.\ntemplate <typename ValueType, typename KeyType>\ninline unsigned char art_tree<ValueType, KeyType>::keyAt(\n    const char* key,\n    uint32_t key_len,\n    uint32_t idx) {\n  return keyAt(reinterpret_cast<const unsigned char*>(key), key_len, idx);\n}\n\n// A helper for looking at the key value at given index, in a leaf\ntemplate <typename ValueType, typename KeyType>\ninline unsigned char art_tree<ValueType, KeyType>::Leaf::keyAt(\n    uint32_t idx) const {\n  return art_tree<ValueType, KeyType>::keyAt(key.data(), key.size(), idx);\n}\n\n/**\n * Allocates a node of the given type,\n * initializes to zero and sets the type.\n */\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node::Node(Node_type type) : type(type) {}\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node::Node(Node_type type, const Node& other)\n    : type(type),\n      num_children(other.num_children),\n      partial_len(other.partial_len) {\n  memcpy(partial, other.partial, std::min(ART_MAX_PREFIX_LEN, partial_len));\n}\n\n// --------------------- Node4\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node4::Node4() : Node(NODE4) {\n  memset(keys, 0, sizeof(keys));\n}\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node4::Node4(Node16&& n16) : Node(NODE4, n16) {\n  memset(keys, 0, sizeof(keys));\n  memcpy(keys, n16.keys, n16.num_children * sizeof(keys[0]));\n  std::move(\n      n16.children.begin(),\n      n16.children.begin() + n16.num_children,\n      children.begin());\n\n  n16.num_children = 0;\n}\n\ntemplate <typename ValueType, typename KeyType>\nvoid art_tree<ValueType, KeyType>::Node4::addChild(\n    NodePtr& ref,\n    unsigned char c,\n    NodePtr&& child) {\n  if (this->num_children < 4) {\n    int idx;\n    for (idx = 0; idx < this->num_children; idx++) {\n      if (c < keys[idx]) {\n        break;\n      }\n    }\n\n    // Shift to make room\n    memmove(keys + idx + 1, keys + idx, this->num_children - idx);\n\n    std::move_backward(\n        children.begin() + idx,\n        children.begin() + this->num_children,\n        children.begin() + this->num_children + 1);\n\n    // Insert element\n    keys[idx] = c;\n    children[idx] = std::move(child);\n    this->num_children++;\n\n  } else {\n    ref = detail::make_unique_with_deleter<Node16, Deleter>(std::move(*this));\n    ref->addChild(ref, c, std::move(child));\n  }\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::NodePtr*\nart_tree<ValueType, KeyType>::Node4::findChild(unsigned char c) {\n  int i;\n  for (i = 0; i < this->num_children; i++) {\n    if (keys[i] == c) {\n      return &children[i];\n    }\n  }\n  return nullptr;\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::NodePtr\nart_tree<ValueType, KeyType>::Node4::removeChild(\n    NodePtr& ref,\n    unsigned char,\n    NodePtr* l) {\n  auto pos = l - children.data();\n  memmove(keys + pos, keys + pos + 1, this->num_children - 1 - pos);\n\n  NodePtr result = std::move(children[pos]);\n\n  std::move(\n      children.begin() + pos + 1,\n      children.begin() + this->num_children,\n      children.begin() + pos);\n\n  this->num_children--;\n\n  // Remove nodes with only a single child\n  if (this->num_children == 1) {\n    auto child = children[0].get();\n\n    if (!IS_LEAF(child)) {\n      // Concatenate the prefixes\n      auto prefix = this->partial_len;\n      if (prefix < ART_MAX_PREFIX_LEN) {\n        this->partial[prefix] = keys[0];\n        prefix++;\n      }\n      if (prefix < ART_MAX_PREFIX_LEN) {\n        auto sub_prefix =\n            std::min(child->partial_len, ART_MAX_PREFIX_LEN - prefix);\n        memcpy(this->partial + prefix, child->partial, sub_prefix);\n        prefix += sub_prefix;\n      }\n\n      // Store the prefix in the child\n      memcpy(\n          child->partial, this->partial, std::min(prefix, ART_MAX_PREFIX_LEN));\n      child->partial_len += this->partial_len + 1;\n    }\n\n    ref = std::move(children[0]);\n  }\n\n  return result;\n}\n\n// --------------------- Node16\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node16::Node16() : Node(NODE16) {\n  memset(keys, 0, sizeof(keys));\n}\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node16::Node16(Node4&& n4) : Node(NODE16, n4) {\n  memset(keys, 0, sizeof(keys));\n\n  std::move(\n      n4.children.begin(),\n      n4.children.begin() + this->num_children,\n      children.begin());\n  memcpy(keys, n4.keys, this->num_children * sizeof(keys[0]));\n\n  n4.num_children = 0;\n}\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node16::Node16(Node48&& n48) : Node(NODE16, n48) {\n  int i, child = 0;\n  memset(keys, 0, sizeof(keys));\n\n  for (i = 0; i < 256; i++) {\n    auto pos = n48.keys[i];\n    if (pos) {\n      keys[child] = i;\n      children[child] = std::move(n48.children[pos - 1]);\n      child++;\n    }\n  }\n\n  n48.num_children = 0;\n}\n\ntemplate <typename ValueType, typename KeyType>\nvoid art_tree<ValueType, KeyType>::Node16::addChild(\n    NodePtr& ref,\n    unsigned char c,\n    NodePtr&& child) {\n  if (this->num_children < 16) {\n    unsigned idx;\n#ifdef __SSE__\n    __m128i cmp;\n    unsigned mask, bitfield;\n\n    // Compare the key to all 16 stored keys\n    cmp = _mm_cmplt_epi8(_mm_set1_epi8(c), _mm_loadu_si128((__m128i*)keys));\n\n    // Use a mask to ignore children that don't exist\n    mask = (1 << this->num_children) - 1;\n    bitfield = _mm_movemask_epi8(cmp) & mask;\n\n    // Check if less than any\n    if (bitfield) {\n      idx = __builtin_ctz(bitfield);\n      memmove(keys + idx + 1, keys + idx, this->num_children - idx);\n      std::move_backward(\n          children.begin() + idx,\n          children.begin() + this->num_children,\n          children.begin() + this->num_children + 1);\n    } else {\n      idx = this->num_children;\n    }\n#else\n    for (idx = 0; idx < this->num_children; idx++) {\n      if (c < keys[idx]) {\n        memmove(keys + idx + 1, keys + idx, this->num_children - idx);\n        std::move_backward(\n            children.begin() + idx,\n            children.begin() + this->num_children,\n            children.begin() + this->num_children + 1);\n        break;\n      }\n    }\n#endif\n\n    // Set the child\n    keys[idx] = c;\n    children[idx] = std::move(child);\n    this->num_children++;\n\n  } else {\n    ref = detail::make_unique_with_deleter<Node48, Deleter>(std::move(*this));\n    ref->addChild(ref, c, std::move(child));\n  }\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::NodePtr*\nart_tree<ValueType, KeyType>::Node16::findChild(unsigned char c) {\n#ifdef __SSE__\n  __m128i cmp;\n  int mask, bitfield;\n\n  // Compare the key to all 16 stored keys\n  cmp = _mm_cmpeq_epi8(_mm_set1_epi8(c), _mm_loadu_si128((__m128i*)keys));\n\n  // Use a mask to ignore children that don't exist\n  mask = (1 << this->num_children) - 1;\n  bitfield = _mm_movemask_epi8(cmp) & mask;\n\n  /*\n   * If we have a match (any bit set) then we can\n   * return the pointer match using ctz to get\n   * the index.\n   */\n  if (bitfield) {\n    return &children[__builtin_ctz(bitfield)];\n  }\n#else\n  int i;\n  for (i = 0; i < this->num_children; i++) {\n    if (keys[i] == c) {\n      return &children[i];\n    }\n  }\n#endif\n  return nullptr;\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::NodePtr\nart_tree<ValueType, KeyType>::Node16::removeChild(\n    NodePtr& ref,\n    unsigned char,\n    NodePtr* l) {\n  auto pos = l - children.data();\n  memmove(keys + pos, keys + pos + 1, this->num_children - 1 - pos);\n\n  NodePtr result = std::move(children[pos]);\n\n  std::move(\n      children.begin() + pos + 1,\n      children.begin() + this->num_children,\n      children.begin() + pos);\n  this->num_children--;\n\n  if (this->num_children == 3) {\n    ref = detail::make_unique_with_deleter<Node4, Deleter>(std::move(*this));\n  }\n\n  return result;\n}\n\n// --------------------- Node48\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node48::Node48() : Node(NODE48) {\n  memset(keys, 0, sizeof(keys));\n}\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node48::Node48(Node16&& n16) : Node(NODE48, n16) {\n  int i;\n  memset(keys, 0, sizeof(keys));\n\n  std::move(\n      n16.children.begin(),\n      n16.children.begin() + n16.num_children,\n      children.begin());\n\n  for (i = 0; i < n16.num_children; i++) {\n    keys[n16.keys[i]] = i + 1;\n  }\n\n  n16.num_children = 0;\n}\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node48::Node48(Node256&& n256)\n    : art_tree::Node(NODE48, n256) {\n  int i, pos = 0;\n  memset(keys, 0, sizeof(keys));\n\n  for (i = 0; i < 256; i++) {\n    if (n256.children[i]) {\n      children[pos] = std::move(n256.children[i]);\n      keys[i] = pos + 1;\n      pos++;\n    }\n  }\n\n  n256.num_children = 0;\n}\n\ntemplate <typename ValueType, typename KeyType>\nvoid art_tree<ValueType, KeyType>::Node48::addChild(\n    NodePtr& ref,\n    unsigned char c,\n    NodePtr&& child) {\n  if (this->num_children < 48) {\n    int pos = 0;\n    while (children[pos]) {\n      pos++;\n    }\n    children[pos] = std::move(child);\n    keys[c] = pos + 1;\n    this->num_children++;\n  } else {\n    ref = detail::make_unique_with_deleter<Node256, Deleter>(std::move(*this));\n    ref->addChild(ref, c, std::move(child));\n  }\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::NodePtr*\nart_tree<ValueType, KeyType>::Node48::findChild(unsigned char c) {\n  auto i = keys[c];\n  if (i) {\n    return &children[i - 1];\n  }\n  return nullptr;\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::NodePtr\nart_tree<ValueType, KeyType>::Node48::removeChild(\n    NodePtr& ref,\n    unsigned char c,\n    NodePtr*) {\n  int pos = keys[c];\n  keys[c] = 0;\n\n  NodePtr result = std::move(children[pos - 1]);\n  this->num_children--;\n\n  if (this->num_children == 12) {\n    ref = detail::make_unique_with_deleter<Node16, Deleter>(std::move(*this));\n  }\n\n  return result;\n}\n\n// --------------------- Node256\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::Node256::Node256(Node48&& n48)\n    : Node(NODE256, n48) {\n  int i;\n  for (i = 0; i < 256; i++) {\n    if (n48.keys[i]) {\n      children[i] = std::move(n48.children[n48.keys[i] - 1]);\n    }\n  }\n\n  n48.num_children = 0;\n}\n\ntemplate <typename ValueType, typename KeyType>\nvoid art_tree<ValueType, KeyType>::Node256::addChild(\n    NodePtr&,\n    unsigned char c,\n    NodePtr&& child) {\n  this->num_children++;\n  children[c] = std::move(child);\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::NodePtr*\nart_tree<ValueType, KeyType>::Node256::findChild(unsigned char c) {\n  if (children[c]) {\n    return &children[c];\n  }\n  return nullptr;\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::NodePtr\nart_tree<ValueType, KeyType>::Node256::removeChild(\n    NodePtr& ref,\n    unsigned char c,\n    NodePtr*) {\n  NodePtr result = std::move(children[c]);\n  this->num_children--;\n\n  // Resize to a node48 on underflow, not immediately to prevent\n  // trashing if we sit on the 48/49 boundary\n  if (this->num_children == 37) {\n    ref = detail::make_unique_with_deleter<Node48, Deleter>(std::move(*this));\n  }\n\n  return result;\n}\n\n/**\n * Initializes an ART tree\n * @return 0 on success.\n */\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::art_tree() : root_(nullptr), size_(0) {}\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::art_tree(art_tree&& other) noexcept\n    : root_(std::move(other.root_)), size_(std::move(other.size_)) {}\n\ntemplate <typename ValueType, typename KeyType>\nvoid art_tree<ValueType, KeyType>::Deleter::operator()(Node* node) const {\n  // Break if null\n  if (!node) {\n    return;\n  }\n\n  // Special case leafs\n  if (IS_LEAF(node)) {\n    delete LEAF_RAW(node);\n    return;\n  }\n\n  delete node;\n}\n\ntemplate <typename ValueType, typename KeyType>\nart_tree<ValueType, KeyType>::~art_tree() {\n  clear();\n}\n\ntemplate <typename ValueType, typename KeyType>\nvoid art_tree<ValueType, KeyType>::clear() {\n  root_.reset();\n  size_ = 0;\n}\n\n/**\n * Returns the number of prefix characters shared between\n * the key and node.\n */\ntemplate <typename ValueType, typename KeyType>\nuint32_t art_tree<ValueType, KeyType>::Node::checkPrefix(\n    const unsigned char* key,\n    uint32_t key_len,\n    uint32_t depth) const {\n  auto max_cmp =\n      std::min(std::min(partial_len, ART_MAX_PREFIX_LEN), key_len - depth);\n  uint32_t idx;\n  for (idx = 0; idx < max_cmp; idx++) {\n    if (partial[idx] != key[depth + idx]) {\n      return idx;\n    }\n  }\n  return idx;\n}\n\n/**\n * Checks if a leaf matches\n * @return true if the key is an exact match.\n */\ntemplate <typename ValueType, typename KeyType>\nbool art_tree<ValueType, KeyType>::Leaf::matches(\n    const unsigned char* key,\n    uint32_t key_len) const {\n  // Fail if the key lengths are different\n  if (this->key.size() != key_len) {\n    return false;\n  }\n\n  return memcmp(this->key.data(), key, key_len) == 0;\n}\n\ntemplate <typename ValueType, typename KeyType>\nbool art_tree<ValueType, KeyType>::Leaf::matches(const KeyType& key) const {\n  return this->key == key;\n}\n\n/**\n * Searches for a value in the ART tree\n * @arg t The tree\n * @arg key The key\n * @arg key_len The length of the key\n * @return NULL if the item was not found, otherwise\n * the value pointer is returned.\n */\ntemplate <typename ValueType, typename KeyType>\nValueType* art_tree<ValueType, KeyType>::search(\n    const unsigned char* key,\n    uint32_t key_len) const {\n  auto n = root_.get();\n  uint32_t depth = 0;\n  while (n) {\n    // Might be a leaf\n    if (IS_LEAF(n)) {\n      auto leaf = LEAF_RAW(n);\n      // Check if the expanded path matches\n      if (leaf->matches(key, key_len)) {\n        return &leaf->value;\n      }\n      return nullptr;\n    }\n\n    // Bail if the prefix does not match\n    if (n->partial_len) {\n      auto prefix_len = n->checkPrefix(key, key_len, depth);\n      if (prefix_len != std::min(ART_MAX_PREFIX_LEN, n->partial_len)) {\n        return nullptr;\n      }\n      depth = depth + n->partial_len;\n    }\n\n    if (depth > key_len) {\n      // Stored key is longer than input key, can't be an exact match\n      return nullptr;\n    }\n\n    // Recursively search\n    auto child = n->findChild(keyAt(key, key_len, depth));\n    n = child ? child->get() : nullptr;\n    depth++;\n  }\n  return nullptr;\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::Leaf*\nart_tree<ValueType, KeyType>::longestMatch(\n    const unsigned char* key,\n    uint32_t key_len) const {\n  auto n = root_.get();\n  uint32_t depth = 0;\n  while (n) {\n    // Might be a leaf\n    if (IS_LEAF(n)) {\n      auto leaf = LEAF_RAW(n);\n      // Check if the prefix matches\n      auto prefix_len = std::min(leaf->key.size(), size_t(key_len));\n      if (prefix_len > 0 && memcmp(leaf->key.data(), key, prefix_len) == 0) {\n        // Shares the same prefix\n        return leaf;\n      }\n      return nullptr;\n    }\n\n    // Bail if the prefix does not match\n    if (n->partial_len) {\n      auto prefix_len = n->checkPrefix(key, key_len, depth);\n      if (prefix_len != std::min(ART_MAX_PREFIX_LEN, n->partial_len)) {\n        return nullptr;\n      }\n      depth = depth + n->partial_len;\n    }\n\n    if (depth > key_len) {\n      // Stored key is longer than input key, can't be an exact match\n      return nullptr;\n    }\n\n    // Recursively search\n    auto child = n->findChild(keyAt(key, key_len, depth));\n    n = child ? child->get() : nullptr;\n    depth++;\n  }\n  return nullptr;\n}\n\ntemplate <typename ValueType, typename KeyType>\nValueType* art_tree<ValueType, KeyType>::search(const KeyType& key) const {\n  return search(reinterpret_cast<const unsigned char*>(key.data()), key.size());\n}\n\n// Find the minimum leaf under a node\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::Leaf*\nart_tree<ValueType, KeyType>::Node::minimum() const {\n  uint32_t idx;\n  union cnode_ptr p = {this};\n\n  while (p.n) {\n    if (IS_LEAF(p.n)) {\n      return LEAF_RAW(p.n);\n    }\n\n    switch (p.n->type) {\n      case NODE4:\n        p.n = p.n4->children[0].get();\n        break;\n      case NODE16:\n        p.n = p.n16->children[0].get();\n        break;\n      case NODE48:\n        idx = 0;\n        while (!p.n48->keys[idx]) {\n          idx++;\n        }\n        idx = p.n48->keys[idx] - 1;\n        p.n = p.n48->children[idx].get();\n        break;\n      case NODE256:\n        idx = 0;\n        while (!p.n256->children[idx]) {\n          idx++;\n        }\n        p.n = p.n256->children[idx].get();\n        break;\n      default:\n        abort();\n        return nullptr;\n    }\n  }\n  return nullptr;\n}\n\n// Find the maximum leaf under a node\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::Leaf*\nart_tree<ValueType, KeyType>::Node::maximum() const {\n  uint32_t idx;\n  union cnode_ptr p = {this};\n\n  while (p.n) {\n    if (IS_LEAF(p.n)) {\n      return LEAF_RAW(p.n);\n    }\n\n    switch (p.n->type) {\n      case NODE4:\n        p.n = p.n4->children[p.n->num_children - 1].get();\n        break;\n      case NODE16:\n        p.n = p.n16->children[p.n->num_children - 1].get();\n        break;\n      case NODE48:\n        idx = 255;\n        while (!p.n48->keys[idx]) {\n          idx--;\n        }\n        idx = p.n48->keys[idx] - 1;\n        p.n = p.n48->children[idx].get();\n        break;\n      case NODE256:\n        idx = 255;\n        while (!p.n256->children[idx]) {\n          idx--;\n        }\n        p.n = p.n256->children[idx].get();\n        break;\n      default:\n        abort();\n        return nullptr;\n    }\n  }\n  return nullptr;\n}\n\n/**\n * Returns the minimum valued leaf\n */\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::Leaf*\nart_tree<ValueType, KeyType>::minimum() const {\n  return root_ ? root_->minimum() : nullptr;\n}\n\n/**\n * Returns the maximum valued leaf\n */\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::Leaf*\nart_tree<ValueType, KeyType>::maximum() const {\n  return root_ ? root_->maximum() : nullptr;\n}\n\ntemplate <typename ValueType, typename KeyType>\ntemplate <typename... Args>\nart_tree<ValueType, KeyType>::Leaf::Leaf(const KeyType& key, Args&&... args)\n    : key(key), value(std::forward<Args>(args)...) {}\n\ntemplate <typename ValueType, typename KeyType>\nuint32_t art_tree<ValueType, KeyType>::Leaf::longestCommonPrefix(\n    const Leaf* l2,\n    uint32_t depth) const {\n  auto max_cmp = std::min(key.size(), l2->key.size()) - depth;\n  uint32_t idx;\n  for (idx = 0; idx < max_cmp; idx++) {\n    if (key.data()[depth + idx] != l2->key.data()[depth + idx]) {\n      return idx;\n    }\n  }\n  return idx;\n}\n\n/**\n * Calculates the index at which the prefixes mismatch\n */\ntemplate <typename ValueType, typename KeyType>\nuint32_t art_tree<ValueType, KeyType>::Node::prefixMismatch(\n    const unsigned char* key,\n    uint32_t key_len,\n    uint32_t depth) const {\n  auto max_cmp =\n      std::min(std::min(ART_MAX_PREFIX_LEN, partial_len), key_len - depth);\n  uint32_t idx;\n  for (idx = 0; idx < max_cmp; idx++) {\n    if (partial[idx] != key[depth + idx]) {\n      return idx;\n    }\n  }\n\n  // If the prefix is short we can avoid finding a leaf\n  if (partial_len > ART_MAX_PREFIX_LEN) {\n    // Prefix is longer than what we've checked, find a leaf\n    auto l = minimum();\n    max_cmp = std::min(l->key.size(), size_t(key_len)) - depth;\n    for (; idx < max_cmp; idx++) {\n      if (reinterpret_cast<const unsigned char*>(l->key.data())[idx + depth] !=\n          key[depth + idx]) {\n        return idx;\n      }\n    }\n  }\n  return idx;\n}\n\ntemplate <typename ValueType, typename KeyType>\ntemplate <typename... Args>\nvoid art_tree<ValueType, KeyType>::recursiveInsert(\n    NodePtr& ref,\n    const KeyType& key,\n    uint32_t depth,\n    bool& replaced,\n    Args&&... args) {\n  // If we are at a NULL node, inject a leaf\n  if (!ref) {\n    ref = LeafToNode(\n        std::make_unique<Leaf>(key, std::forward<Args>(args)...));\n    return;\n  }\n\n  // If we are at a leaf, we need to replace it with a node\n  if (IS_LEAF(ref.get())) {\n    auto l = LEAF_RAW(ref.get());\n\n    // Check if we are updating an existing value\n    if (l->matches(key)) {\n      replaced = true;\n      l->value = ValueType(std::forward<Args>(args)...);\n      return;\n    }\n\n    // New value, we must split the leaf into a node4\n    NodePtr new_node = detail::make_unique_with_deleter<Node4, Deleter>();\n\n    // Create a new leaf\n    auto l2 = std::make_unique<Leaf>(key, std::forward<Args>(args)...);\n\n    // Determine longest prefix\n    auto longest_prefix = l->longestCommonPrefix(l2.get(), depth);\n    new_node->partial_len = longest_prefix;\n    memcpy(\n        new_node->partial,\n        l2->key.data() + depth,\n        std::min(ART_MAX_PREFIX_LEN, longest_prefix));\n\n    // Add the leafs to the new node4\n    new_node->addChild(\n        new_node, l->keyAt(depth + longest_prefix), std::move(ref));\n\n    auto leaf2Weak = l2.get();\n    new_node->addChild(\n        new_node,\n        leaf2Weak->keyAt(depth + longest_prefix),\n        LeafToNode(std::move(l2)));\n\n    ref = std::move(new_node);\n    return;\n  }\n\n  // Check if given node has a prefix\n  if (ref->partial_len) {\n    // Determine if the prefixes differ, since we need to split\n    auto prefix_diff = ref->prefixMismatch(\n        reinterpret_cast<const unsigned char*>(key.data()), key.size(), depth);\n    if (prefix_diff >= ref->partial_len) {\n      depth += ref->partial_len;\n      goto RECURSE_SEARCH;\n    }\n\n    // Weak ref to current node\n    auto origNode = ref.get();\n\n    // Create a new node\n    NodePtr new_node = detail::make_unique_with_deleter<Node4, Deleter>();\n    new_node->partial_len = prefix_diff;\n    memcpy(\n        new_node->partial,\n        origNode->partial,\n        std::min(ART_MAX_PREFIX_LEN, prefix_diff));\n\n    // Adjust the prefix of the old node\n    if (origNode->partial_len <= ART_MAX_PREFIX_LEN) {\n      new_node->addChild(\n          new_node, origNode->partial[prefix_diff], std::move(ref));\n      origNode->partial_len -= (prefix_diff + 1);\n      memmove(\n          origNode->partial,\n          origNode->partial + prefix_diff + 1,\n          std::min(ART_MAX_PREFIX_LEN, origNode->partial_len));\n    } else {\n      origNode->partial_len -= (prefix_diff + 1);\n      auto minLeaf = origNode->minimum();\n      new_node->addChild(\n          new_node, minLeaf->keyAt(depth + prefix_diff), std::move(ref));\n      memcpy(\n          origNode->partial,\n          minLeaf->key.data() + depth + prefix_diff + 1,\n          std::min(ART_MAX_PREFIX_LEN, origNode->partial_len));\n    }\n\n    // Insert the new leaf\n    auto l = std::make_unique<Leaf>(key, std::forward<Args>(args)...);\n    auto leafWeak = l.get();\n    new_node->addChild(\n        new_node,\n        leafWeak->keyAt(depth + prefix_diff),\n        LeafToNode(std::move(l)));\n\n    ref = std::move(new_node);\n    return;\n  }\n\nRECURSE_SEARCH:;\n  {\n    // Find a child to recurse to\n    auto child = ref->findChild(keyAt(key.data(), key.size(), depth));\n    if (child) {\n      recursiveInsert(\n          *child, key, depth + 1, replaced, std::forward<Args>(args)...);\n      return;\n    }\n\n    // No child, node goes within us\n    auto l = std::make_unique<Leaf>(key, std::forward<Args>(args)...);\n    auto leafWeak = l.get();\n    ref->addChild(ref, leafWeak->keyAt(depth), LeafToNode(std::move(l)));\n  }\n}\n\ntemplate <typename ValueType, typename KeyType>\ntemplate <typename... Args>\nvoid art_tree<ValueType, KeyType>::insert(const KeyType& key, Args&&... args) {\n  bool replaced = false;\n  recursiveInsert(root_, key, 0, replaced, std::forward<Args>(args)...);\n  if (!replaced) {\n    size_++;\n  }\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::NodePtr\nart_tree<ValueType, KeyType>::recursiveDelete(\n    NodePtr& ref,\n    const unsigned char* key,\n    uint32_t key_len,\n    uint32_t depth) {\n  // Search terminated\n  if (!ref) {\n    return nullptr;\n  }\n\n  // Handle hitting a leaf node\n  if (IS_LEAF(ref.get())) {\n    auto l = LEAF_RAW(ref.get());\n    if (l->matches(key, key_len)) {\n      NodePtr result;\n      std::swap(result, ref);\n      return result;\n    }\n    return nullptr;\n  }\n\n  // Bail if the prefix does not match\n  if (ref->partial_len) {\n    auto prefix_len = ref->checkPrefix(key, key_len, depth);\n    if (prefix_len != std::min(ART_MAX_PREFIX_LEN, ref->partial_len)) {\n      return nullptr;\n    }\n    depth = depth + ref->partial_len;\n  }\n\n  // Find child node\n  auto child = ref->findChild(keyAt(key, key_len, depth));\n  if (!child) {\n    return nullptr;\n  }\n\n  // If the child is leaf, delete from this node\n  if (IS_LEAF(child->get())) {\n    auto l = LEAF_RAW(child->get());\n    if (l->matches(key, key_len)) {\n      return ref->removeChild(ref, keyAt(key, key_len, depth), child);\n    }\n    return nullptr;\n  }\n  // Recurse\n  return recursiveDelete(*child, key, key_len, depth + 1);\n}\n\n/**\n * Deletes a value from the ART tree\n * @arg t The tree\n * @arg key The key\n * @arg key_len The length of the key\n * @return NULL if the item was not found, otherwise\n * the value pointer is returned.\n */\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::LeafPtr\nart_tree<ValueType, KeyType>::erase(\n    const unsigned char* key,\n    uint32_t key_len) {\n  auto l = recursiveDelete(root_, key, key_len, 0);\n  if (l) {\n    size_--;\n    return NodeToLeaf(std::move(l));\n  }\n  return nullptr;\n}\n\ntemplate <typename ValueType, typename KeyType>\ntypename art_tree<ValueType, KeyType>::LeafPtr\nart_tree<ValueType, KeyType>::erase(const KeyType& key) {\n  return erase(reinterpret_cast<const unsigned char*>(key.data()), key.size());\n}\n\n// Recursively iterates over the tree\ntemplate <typename ValueType, typename KeyType>\ntemplate <typename Func>\nint art_tree<ValueType, KeyType>::recursiveIter(Node* n, Func& func) {\n  int i, idx, res;\n  union node_ptr p = {n};\n\n  // Handle base cases\n  if (!n) {\n    return 0;\n  }\n  if (IS_LEAF(n)) {\n    auto l = LEAF_RAW(n);\n    return func(l->key, l->value);\n  }\n\n  switch (n->type) {\n    case Node_type::NODE4:\n      for (i = 0; i < n->num_children; i++) {\n        res = recursiveIter(p.n4->children[i].get(), func);\n        if (res) {\n          return res;\n        }\n      }\n      break;\n\n    case Node_type::NODE16:\n      for (i = 0; i < n->num_children; i++) {\n        res = recursiveIter(p.n16->children[i].get(), func);\n        if (res) {\n          return res;\n        }\n      }\n      break;\n\n    case Node_type::NODE48:\n      for (i = 0; i < 256; i++) {\n        idx = p.n48->keys[i];\n        if (!idx) {\n          continue;\n        }\n\n        res = recursiveIter(p.n48->children[idx - 1].get(), func);\n        if (res) {\n          return res;\n        }\n      }\n      break;\n\n    case Node_type::NODE256:\n      for (i = 0; i < 256; i++) {\n        if (!p.n256->children[i]) {\n          continue;\n        }\n        res = recursiveIter(p.n256->children[i].get(), func);\n        if (res) {\n          return res;\n        }\n      }\n      break;\n\n    default:\n      abort();\n  }\n  return 0;\n}\n\n/**\n * Iterates through the entries pairs in the map,\n * invoking a callback for each. The call back gets a\n * key, value for each and returns an integer stop value.\n * If the callback returns non-zero, then the iteration stops.\n * @arg t The tree to iterate over\n * @arg cb The callback function to invoke\n * @arg data Opaque handle passed to the callback\n * @return 0 on success, or the return of the callback.\n */\ntemplate <typename ValueType, typename KeyType>\ntemplate <typename Func>\nint art_tree<ValueType, KeyType>::iter(Func&& func) {\n  return recursiveIter(root_.get(), func);\n}\n\n/**\n * Checks if a leaf prefix matches\n */\ntemplate <typename ValueType, typename KeyType>\nbool art_tree<ValueType, KeyType>::Leaf::prefixMatches(\n    const unsigned char* prefix,\n    uint32_t prefix_len) const {\n  // Fail if the key length is too short\n  if (key.size() < prefix_len) {\n    return false;\n  }\n\n  // Compare the keys\n  return memcmp(key.data(), prefix, prefix_len) == 0;\n}\n\n/**\n * Iterates through the entries pairs in the map,\n * invoking a callback for each that matches a given prefix.\n * The call back gets a key, value for each and returns an integer stop value.\n * If the callback returns non-zero, then the iteration stops.\n * @arg t The tree to iterate over\n * @arg prefix The prefix of keys to read\n * @arg prefix_len The length of the prefix\n * @arg cb The callback function to invoke\n * @arg data Opaque handle passed to the callback\n * @return 0 on success, or the return of the callback.\n */\ntemplate <typename ValueType, typename KeyType>\ntemplate <typename Func>\nint art_tree<ValueType, KeyType>::iterPrefix(\n    const unsigned char* key,\n    uint32_t key_len,\n    Func&& func) {\n  auto n = root_.get();\n  uint32_t prefix_len, depth = 0;\n\n  auto prefix_key_len = key_len;\n  auto prefix_key = key;\n\n  auto prefixCallback = [prefix_key, prefix_key_len, &func](\n      const KeyType& key, ValueType& value) {\n    /**\n     * Helper function for prefix iteration.\n     * In some cases, such as when the relative key is longer than\n     * ART_MAX_PREFIX_LEN, and especially after a series of inserts and deletes\n     * has churned things up, the iterator locates a potential for matching\n     * within a sub-tree that has shorter prefixes than desired (it calls\n     * minimum() to find the candidate).  We need to filter these before\n     * calling the user supplied iterator callback or else risk incorrect\n     * results.  */\n\n    if (key.size() < prefix_key_len) {\n      // Can't match, keep iterating\n      return 0;\n    }\n\n    if (memcmp(key.data(), prefix_key, prefix_key_len) != 0) {\n      // Prefix doesn't match, keep iterating\n      return 0;\n    }\n\n    // Prefix matches, it is valid to call the user iterator callback\n    return func(key, value);\n  };\n\n  while (n) {\n    // Might be a leaf\n    if (IS_LEAF(n)) {\n      auto l = LEAF_RAW(n);\n      // Check if the expanded path matches\n      if (l->prefixMatches(key, key_len)) {\n        return func(l->key, l->value);\n      }\n      return 0;\n    }\n\n    // If the depth matches the prefix, we need to handle this node\n    if (depth == key_len) {\n      auto l = n->minimum();\n      if (l->prefixMatches(key, key_len)) {\n        return recursiveIter(n, prefixCallback);\n      }\n      return 0;\n    }\n\n    // Bail if the prefix does not match\n    if (n->partial_len) {\n      prefix_len = n->prefixMismatch(key, key_len, depth);\n\n      // If there is no match, search is terminated\n      if (!prefix_len) {\n        return 0;\n      }\n      // If we've matched the prefix, iterate on this node\n      else if (depth + prefix_len == key_len) {\n        return recursiveIter(n, prefixCallback);\n      }\n\n      // if there is a full match, go deeper\n      depth = depth + n->partial_len;\n    }\n\n    if (depth > key_len) {\n      return 0;\n    }\n\n    // Recursively search\n    auto child = n->findChild(keyAt(key, key_len, depth));\n    n = child ? child->get() : nullptr;\n    depth++;\n  }\n  return 0;\n}\n"
  },
  {
    "path": "watchman/thirdparty/libart/src/art.h",
    "content": "#ifndef ART_H\n#define ART_H\n#include <array>\n#include <cstdint>\n#include <functional>\n#include <memory>\n#include <string>\n\n#define ART_MAX_PREFIX_LEN 10u\n\n/**\n * Main struct, points to root.\n */\ntemplate <typename ValueType, typename KeyType = std::string>\nstruct art_tree {\n  struct Leaf;\n  struct Node;\n  enum Node_type : uint8_t { NODE4 = 1, NODE16, NODE48, NODE256 };\n\n  struct Deleter {\n    void operator()(Node* node) const;\n  };\n  using NodePtr = std::unique_ptr<Node, Deleter>;\n  using LeafPtr = std::unique_ptr<Leaf>;\n\n  /**\n   * This struct is included as part\n   * of all the various node sizes\n   */\n  struct Node {\n    Node_type type;\n    uint8_t num_children{0};\n    uint32_t partial_len{0};\n    unsigned char partial[ART_MAX_PREFIX_LEN];\n\n    virtual ~Node() = default;\n    explicit Node(Node_type type);\n    Node(Node_type type, const Node& other);\n    Node(const Node&) = delete;\n    Node& operator=(const Node&) = delete;\n\n    Leaf* maximum() const;\n    Leaf* minimum() const;\n    virtual NodePtr* findChild(unsigned char c) = 0;\n\n    // Returns the number of prefix characters shared between the key and node.\n    uint32_t checkPrefix(\n        const unsigned char* key,\n        uint32_t key_len,\n        uint32_t depth) const;\n    // Calculates the index at which the prefixes mismatch\n    uint32_t prefixMismatch(\n        const unsigned char* key,\n        uint32_t key_len,\n        uint32_t depth) const;\n\n    virtual void addChild(NodePtr& ref, unsigned char c, NodePtr&& child) = 0;\n    virtual NodePtr removeChild(NodePtr& ref, unsigned char c, NodePtr* l) = 0;\n  };\n\n  struct Node4;\n  struct Node16;\n  struct Node48;\n  struct Node256;\n\n  // Helper for dispatching to the correct node type\n  union node_ptr {\n    Node* n;\n    Node4* n4;\n    Node16* n16;\n    Node48* n48;\n    Node256* n256;\n  };\n\n  // const flavor of the above\n  union cnode_ptr {\n    const Node* n;\n    const Node4* n4;\n    const Node16* n16;\n    const Node48* n48;\n    const Node256* n256;\n  };\n\n  static inline bool IS_LEAF(const Node* x) {\n    return uintptr_t(x) & 1;\n  }\n\n  static inline Leaf* LEAF_RAW(const Node* x) {\n    return (Leaf*)((void*)((uintptr_t(x) & ~1)));\n  }\n\n  static inline NodePtr LeafToNode(LeafPtr&& leaf) {\n    return NodePtr((Node*)(uintptr_t(leaf.release()) | 1));\n  }\n\n  static inline LeafPtr NodeToLeaf(NodePtr&& node) {\n    return LeafPtr(LEAF_RAW(node.release()));\n  }\n\n  static inline unsigned char\n  keyAt(const unsigned char* key, uint32_t key_len, uint32_t idx);\n  static inline unsigned char\n  keyAt(const char* key, uint32_t key_len, uint32_t idx);\n\n  /**\n   * Small node with only 4 children\n   */\n  struct Node4 : public Node {\n    unsigned char keys[4];\n    std::array<NodePtr, 4> children;\n\n    Node4();\n    explicit Node4(Node16&& n16);\n    void addChild(NodePtr& ref, unsigned char c, NodePtr&& child) override;\n    NodePtr removeChild(NodePtr& ref, unsigned char c, NodePtr* l) override;\n    NodePtr* findChild(unsigned char c) override;\n  };\n\n  /**\n   * Node with 16 children\n   */\n  struct Node16 : public Node {\n    unsigned char keys[16];\n    std::array<NodePtr, 16> children;\n\n    Node16();\n    explicit Node16(Node4&& n4);\n    explicit Node16(Node48&& n48);\n    void addChild(NodePtr& ref, unsigned char c, NodePtr&& child) override;\n    NodePtr removeChild(NodePtr& ref, unsigned char c, NodePtr* l) override;\n    NodePtr* findChild(unsigned char c) override;\n  };\n\n  /**\n   * Node with 48 children, but\n   * a full 256 byte field.\n   */\n  struct Node48 : public Node {\n    unsigned char keys[256];\n    std::array<NodePtr, 48> children;\n\n    Node48();\n    explicit Node48(Node16&& n16);\n    explicit Node48(Node256&& n256);\n    void addChild(NodePtr& ref, unsigned char c, NodePtr&& child) override;\n    NodePtr removeChild(NodePtr& ref, unsigned char c, NodePtr* l) override;\n    NodePtr* findChild(unsigned char c) override;\n  };\n\n  /**\n   * Full node with 256 children\n   */\n  struct Node256 : public Node {\n    std::array<NodePtr, 256> children;\n\n    Node256();\n    explicit Node256(Node48&& n48);\n    void addChild(NodePtr& ref, unsigned char c, NodePtr&& child) override;\n    NodePtr removeChild(NodePtr& ref, unsigned char c, NodePtr* l) override;\n    NodePtr* findChild(unsigned char c) override;\n  };\n\n  /**\n   * Represents a leaf. These are\n   * of arbitrary size, as they include the key.\n   */\n  struct Leaf {\n    KeyType key;\n    ValueType value;\n\n    template <typename... Args>\n    Leaf(const KeyType& key, Args&&... args);\n\n    bool matches(const unsigned char* key, uint32_t key_len) const;\n    bool matches(const KeyType& key) const;\n\n    uint32_t longestCommonPrefix(const Leaf* other, uint32_t depth) const;\n    bool prefixMatches(const unsigned char* prefix, uint32_t prefix_len) const;\n    inline unsigned char keyAt(uint32_t idx) const;\n  };\n\n  art_tree();\n  ~art_tree();\n\n  art_tree(const art_tree&) = delete;\n  art_tree(art_tree&& other) noexcept;\n\n  inline uint64_t size() const {\n    return size_;\n  }\n\n  void clear();\n\n  /**\n   * Construct a new value in-place in the ART tree.\n   * The arguments are forwarded to the ValueType constructor\n   */\n  template <typename... Args>\n  void insert(const KeyType& key, Args&&... args);\n\n  /**\n   * Deletes a value from the ART tree\n   * @arg key The key\n   * @arg key_len The length of the key\n   * @return true if the item was erased, false otherwise.\n   */\n  LeafPtr erase(const unsigned char* key, uint32_t key_len);\n  LeafPtr erase(const KeyType& key);\n\n  /**\n   * Searches for a value in the ART tree\n   * @arg key The key\n   * @arg key_len The length of the key\n   * @return NULL if the item was not found, otherwise\n   * the value pointer is returned.\n   */\n  ValueType* search(const unsigned char* key, uint32_t key_len) const;\n  ValueType* search(const KeyType& key) const;\n\n  /**\n   * Searches for the longest prefix match for the input key.\n   * @arg key The key\n   * @arg key_len The length of the key\n   * @return NULL if no match was not found, otherwise\n   * the leaf node with the longest matching prefix is returned.\n   */\n  Leaf* longestMatch(const unsigned char* key, uint32_t key_len) const;\n\n  /**\n   * Returns the minimum valued leaf\n   * @return The minimum leaf or NULL\n   */\n  Leaf* minimum() const;\n\n  /**\n   * Returns the maximum valued leaf\n   * @return The maximum leaf or NULL\n   */\n  Leaf* maximum() const;\n\n  /**\n   * Iterates through the entries pairs in the map,\n   * invoking a callback for each. The call back gets a\n   * key, value for each and returns an integer stop value.\n   * If the callback returns non-zero, then the iteration stops.\n   * @arg cb The callback function to invoke\n   * @arg data Opaque handle passed to the callback\n   * @return 0 on success, or the return of the callback.\n   */\n  template <typename Func>\n  int iter(Func&& func);\n\n  /**\n   * Iterates through the entries pairs in the map,\n   * invoking a callback for each that matches a given prefix.\n   * The call back gets a key, value for each and returns an integer stop value.\n   * If the callback returns non-zero, then the iteration stops.\n   * @arg prefix The prefix of keys to read\n   * @arg prefix_len The length of the prefix\n   * @arg cb The callback function to invoke\n   * @arg data Opaque handle passed to the callback\n   * @return 0 on success, or the return of the callback.\n   */\n  template <typename Func>\n  int iterPrefix(const unsigned char* prefix, uint32_t prefix_len, Func&& func);\n\n private:\n  NodePtr root_;\n  uint64_t size_;\n\n  template <typename... Args>\n  void recursiveInsert(\n      NodePtr& ref,\n      const KeyType& key,\n      uint32_t depth,\n      bool& replaced,\n      Args&&... args);\n  NodePtr recursiveDelete(\n      NodePtr& ref,\n      const unsigned char* key,\n      uint32_t key_len,\n      uint32_t depth);\n\n  template <typename Func>\n  int recursiveIter(Node* n, Func& func);\n};\n\n#include \"art-inl.h\"\n#endif\n"
  },
  {
    "path": "watchman/thirdparty/libart/tests/runner.c",
    "content": "#include <check.h>\n#include <stdio.h>\n#include <syslog.h>\n#include \"test_art.c\"\n\nint main(void)\n{\n    setlogmask(LOG_UPTO(LOG_DEBUG));\n\n    Suite *s1 = suite_create(\"art\");\n    TCase *tc1 = tcase_create(\"art\");\n    SRunner *sr = srunner_create(s1);\n    int nf;\n\n    // Add the art tests\n    suite_add_tcase(s1, tc1);\n    tcase_add_test(tc1, test_art_init_and_destroy);\n    tcase_add_test(tc1, test_art_insert);\n    tcase_add_test(tc1, test_art_insert_verylong);\n    tcase_add_test(tc1, test_art_insert_search);\n    tcase_add_test(tc1, test_art_insert_delete);\n    tcase_add_test(tc1, test_art_insert_iter);\n    tcase_add_test(tc1, test_art_iter_prefix);\n    tcase_add_test(tc1, test_art_long_prefix);\n    tcase_add_test(tc1, test_art_insert_search_uuid);\n\n    srunner_run_all(sr, CK_ENV);\n    nf = srunner_ntests_failed(sr);\n    srunner_free(sr);\n    return nf == 0 ? 0 : 1;\n}\n\n"
  },
  {
    "path": "watchman/thirdparty/libart/tests/uuid.txt",
    "content": "eac6b78b-0c31-49a6-9c6d-e396e7dd7956\n5809c38a-4e46-4269-9eeb-97186229603f\nb099226b-8399-4bca-bd73-ca3a02c55201\nd853ac3e-e307-4e59-ba40-77bf7a7726f9\n77e8c236-6666-4cc8-948e-cb83c933ad66\n794fb019-1c47-4b9a-b887-4eefb7f18c1e\n5ab0b453-cb13-4300-afc9-f091052c2f3e\n9708ba05-11ec-445a-a085-b3fd75629e00\n8dcce6de-6d57-4931-9b23-ecf28d1a716a\n4109585c-f91b-4aa1-967d-a870fc82d4b8\nfcb87f7d-b768-4180-ba16-63d1d64051c2\n7d9935b0-8ad9-43cf-ac86-8d0c3ea4fedf\n41125dd5-c4c5-4e44-82b3-b1f3687c2739\n94b92175-a18d-45e8-a585-ad87399852b3\nd519ac07-1b10-4b61-b540-9b129c9ed465\n44ea6704-ec7b-434c-9349-34312b860404\n72218ecf-d981-44be-9001-bc9907db7d90\ne1a073e6-08ad-48a1-bc7a-0ee6021d8b38\ndd886eb4-718f-41f7-8df7-b21e8a0eb635\n733218f1-da16-4e99-b8d6-97ee1024b296\ndabbbc4b-fc5f-4351-96aa-222484a6ccf5\n0a668dde-6c1e-434f-b7ba-922fd07f6cd4\na3387356-2f84-4522-aa73-d75d21de2b70\n06e3bb78-e287-4a9d-8d98-3aeaf571abc2\n444e961f-0a00-4995-9527-db0cd1539acd\n7a2afa74-9e0d-4898-8074-60a8b1061c46\n3d28d53a-51f2-4584-a4b8-aa7d85e93d89\n9d35e2c3-0e81-4250-a435-3e9e3404578b\n608f008b-8217-4a5b-b366-1c9d581fd187\n1ac30a67-d950-450b-a8bc-b78393ad4cb8\n438b9849-15cd-466b-adec-ac51cfca7e55\n6a8584f2-d8f7-4c48-b5b0-bfd47e8efca5\n00ff2638-0d40-42a5-a63b-ed5c3d86cc6f\nd40c1d48-3fc4-4d92-9b89-587126354f2d\n76c9ec97-b4df-4772-af22-725c1cc62130\n6bf50bc9-709b-4dd3-af53-be49125155a0\n39173d8b-22ae-48c8-a620-2da6273bd392\nb542fdaa-92aa-4601-95e0-e665f011cf51\nc5ebea8f-1e74-44fc-95cb-1717e3796163\nc3d34c1b-d163-45ed-98bc-5466b5c01559\nad13a09e-4b38-40ab-83f8-bfc8f056e60d\n7ceb7a37-2d8e-4107-891f-644f3c0d09bb\nf77ea1bf-3b21-418a-aba9-0817f7618899\n0febfdb1-fb8c-480a-8523-faac17d4b6f0\n9f86ed89-34fa-42c6-861d-ba77751684fe\n44b63d2f-d6a7-4617-bd01-d275e541eeaa\ne21e9535-a676-4c67-83e4-b740e3d0e08a\nf3c88b9a-c5df-4f97-ae06-4317155f4447\nf6ff39a4-3c9b-4c2e-a3c2-1ffd53d85b14\n0bd9b90f-bb30-4ed0-87e4-fae6b86d9e99\n8cdf7865-ce6e-48d7-bfb6-f89d2e255b9c\n387a8b7a-ca9a-48b3-a055-f944b1d3ac90\nfdbb78c3-865f-4834-bd94-88c2254e0fba\n96e08406-78ae-4a19-8ea4-ac63fec1630f\nd0c7b33f-ba07-4a64-81e1-d257015e2856\nf0598343-8e77-4c44-9220-62e810e98ebe\n0596cafc-4b5e-41f0-9f3d-8465b5c83fd5\ne1f3adda-926c-4b2c-bc05-95a2b2aaad21\ncd9e1d9e-cc80-4597-9e75-5e43ce19f776\n8e26fcf9-7a29-499d-b8d7-c94eebb55bec\n7640231f-fd4e-47fe-aaa3-7dd2f8def771\n16f984a6-7f47-4a46-bc2e-a2540c665aa6\n2a94bac1-b486-45be-9d0d-61b89abfd935\n4617fe94-21af-4567-a27d-604737451158\n5ceea22d-5764-4a71-8e02-2199a5fe5cdf\n3de67c55-31f0-4ab3-a8ed-077e42b8b6af\nb3751018-24ed-4577-9b96-3b614acdae8a\n6cf7a6c5-9047-4ebc-bfb1-5faa5d8fa813\n057c332f-8d14-41ca-b56a-7207fe8c96fc\n88a56844-6437-431d-aacd-5e9746b41853\n63e0db87-0f5e-4be5-9bcc-07073bbd623c\na119638e-f320-4a49-afee-bf4aa46d464c\nb9658598-9df7-4190-9e2b-6c4801b4702a\n180244f5-0122-4197-9640-2dcfae9324d5\n03fe58f2-421a-4ee1-8338-7ae365eb28fc\nd547ceb8-51d1-48aa-8590-d0a17fce30e0\n1e24197d-f37a-4729-91c6-4fcb9667c8c7\n16c79e19-3e72-449d-9fa2-76a9d28ea2a6\n8cb12d52-c35b-49a7-beab-8b76b7e39bfe\ne5d33250-e16b-4356-86ff-87be63d13c3a\n0f98c16e-e036-4388-b425-821ead17473b\n20225639-8b36-431d-99f2-69fe56051999\nfd66243b-e3e3-4692-b330-48b5377cda72\n2d8d9ac4-2b2e-421d-b6d6-1820bc29e758\n85d12902-974b-4ad2-bb99-674b81f6f246\n413a6759-4281-442b-a94f-9aebc74e4d57\n7b2e29d7-ff20-4287-864a-d21e3dcc2b87\n1eda0ea1-d80e-42db-b76a-bdec168676cc\na8d3b550-be53-4eda-9f5f-e5394ac9d4d1\n4b838e3e-c27f-49dc-ba58-7f8112dda99d\ne9d823a9-e29a-4ad0-9b4a-228ef1bc2e5c\n02af4447-c7ad-4059-aa26-ce160efb63e8\n27ec7f7c-45b0-4f1b-88d6-3b898e4d32b9\n72fc9632-41cc-47c3-8772-d03c1b65dbd7\nef1cc34d-f721-4d76-8c3a-266f17fe6985\nf69c6f7b-78f1-4195-8391-e1a39f40a945\n0ea957ec-3e87-4acd-b100-54ff16fe28f2\n14be9582-67e4-4d1c-8407-41bb432256ef\ndd581310-e1f8-4404-9496-cbb753b4253d\n3124f91f-fd66-4734-a962-8addfa0105fe\na07eebf2-cc17-494e-b0bb-35a54910a2ef\nd4c99dfc-44b5-4a6c-9908-da618efc844e\n7a4f78fa-d8a7-4104-97f3-d5af921abb88\nf117db0c-0e3f-4b58-b79a-5e0409c8007e\nf4c7dfa2-49fb-463a-a7de-5d0e3ebca6e1\n421dc560-d21a-4f28-92cb-d3c36170a826\nf474c832-e029-4e86-b5ef-a93bf5093de8\na7f166cd-ef83-4448-82da-914407553378\n599e6edc-c8ba-467c-9517-69184c4b2ac1\n36f0e0ff-8a47-4466-877d-6c403df8dda3\nce7e45db-0576-4a49-bb04-e29f9b8c94e8\n7ccc131a-e41f-41eb-8011-ca07bac55425\nea12e726-fd7a-4a3f-a215-af559cc914d2\n182952c2-8535-4a75-a8fd-92d9d3b1e0f1\n31b23ce5-aa21-4fef-917c-caadd9947978\nfc08b9e2-e7a4-41a9-8a74-7efec7884515\nf458dbb0-7962-493a-bbd9-02b9dd1d4917\n08d37590-c736-4a88-8f80-3ef6d6d5a785\n003a6197-1416-42f3-8c7f-7cf0a09ada96\n80b030e4-241d-4cab-bff0-c7826b6af067\nee7554cb-ec1c-46ec-b473-a53938ef1841\ndcbec784-17c4-4f5c-8eff-04447a9444f7\n40641141-1818-4f77-a1cf-663c0d0dbe4a\nb78f5e3e-b31c-4839-8af8-ae6deda401c9\nca0b2376-2369-4506-b04a-b9502a0a5f64\nadb4b88c-0d22-4536-ad50-adf1aff7d4c3\n995af176-3bc6-4695-b550-fde3a2768eab\n354e2a6d-194f-41e6-a85a-08734fbfbbb0\n752c67a9-d817-4b42-b8c6-b6190d71319e\n524e2c0d-5105-46fb-a034-bb73aec2a3ee\n29e3721e-4c80-4ef2-b37d-efb7e1c59f4a\n7f9de414-9f37-4143-ba21-b9b8710c5e84\n4e6f47f8-cdea-453d-942d-595e961961a2\n38643c58-fc55-4944-9e9f-f70a402cc5d8\n202fc4e9-82eb-44ec-94aa-dbabc3ae30da\n68adbc80-ca68-41c7-831c-18821d2761c7\nf24ab593-9a79-47a5-950d-a79610e47996\nc17456a2-7779-4b0c-85ef-47c2b9e3e8ba\n4d335088-57cc-45b7-8cd2-53ba86a4b7c8\n0e9fc7b6-5dd6-4313-b288-8ed8e79c3050\n164611a2-3c31-448b-8a41-b7c111603681\nd2d97494-e68c-40c1-813f-962de82e1de5\n6c94f252-7066-44a7-8f9b-b059a13ff735\nd0eea877-e377-4436-bb95-fb8a7cdd5bd7\n030065d1-cfa9-4722-9918-efae0d5090ca\n4fba8c2c-d355-40f3-8c35-694dd300bd1c\n6c895d05-2125-4e51-9339-b96258d09fcb\ncce17e7b-71a7-4dcd-b212-5adb26b60699\nc1654ead-38fd-4b06-a8db-03c684d023dd\nc79f4dee-cfef-4631-a458-6645d2eacecc\n4c1105b6-275d-42c6-bdb0-a218ea7c7309\ndde32d37-abc6-4dd8-94e2-108a82322dca\n1d7d007c-eedc-4ba6-842d-c7936dbbf06a\n672fa8e2-4f89-45f8-b250-a9c10292b145\ne9487508-b522-4a9a-a899-df96d54e7ccc\n8a0ca18a-c0a5-4e98-a3dc-395a2a7a9704\n039a0a37-8ad8-44eb-9073-d28cef005778\nd351db68-7749-4464-9242-f8e7441a494e\n5a162010-566a-4ccb-981c-72baec7f888a\ncb7f9362-28d9-4da9-9833-c35a9e0dd093\n9a413f47-b8b5-47e2-95ac-2d8c368b3657\nd77c23de-6298-4286-8a72-520f66e06aaa\nbc8185d0-5251-44c8-b5d1-0f945365e6db\ne0b39a10-8e3b-4ab8-a412-899f419763ff\na66ed54d-65e2-41b3-a053-689df393cfe9\n3850a7c8-c853-437d-9d9b-c4dc26cf1077\nd88903fe-fba8-48b1-ad57-c51898552e0d\n9ab4c890-85e8-4d20-8217-98a82a8adcc0\n4f30bb6c-787a-4f7e-b46f-d62554e0f188\na7aaf11b-c313-4e8b-b3cc-59ec6881a409\n36f01eb0-b1b5-4873-bb9b-8807168ab221\ncfd0b6d4-0011-4cf2-b725-9bdf635816c5\n1f01fb13-25f4-4f57-8d87-27bf704786b9\na11b0504-0f6a-435e-a3be-97f3eed5507d\n723a7449-4fe6-48ea-8aa5-b3d95fae5747\n008bff11-f77c-4e1f-948a-719342992555\n3c8f7d19-4d62-49d2-b9f6-c42f6249c398\nc91e4bde-e905-40c1-8435-9effa9383f45\nba2674be-d25f-461b-8054-a7f0d087ab9e\n5d4432f6-5fd8-47bf-b502-b06caf0443bd\n4d4e8e52-6c92-43ff-baad-c89875e76949\nfbec54d1-78ae-4f9e-bf4c-1572f79b14d9\n6215521a-1d54-4f94-ba8d-f4969593d1fc\n6934c95b-b9f6-4622-ae59-18fbc3504e73\n7b691b85-c2d2-4eea-8710-02acbd7bf1d8\nf2c43f70-bf84-4df1-ac83-35492c392258\ne0921544-3eac-46c4-9f5d-58371acbd517\n2f7a19eb-e45d-4168-ada1-f818c3175f72\ne8837fb8-5fad-416a-b9d0-e7d19a3a354b\n92cb8a66-ab33-485e-ae87-d318142cbb69\n4ea29fe5-be45-453d-999a-20c788b03749\n6ebcdcc9-a564-4edd-a893-eae47ea3fe53\nf54ef80a-efbb-4da2-bc71-7988e01b1e67\n931fd079-79bd-487f-a17e-bd914f57b322\n74b43b10-a613-4c59-96e0-5a708c842a7c\n38950034-f729-4a8b-b761-c1584bb9b9f7\nadf5d91d-8a3c-4d80-ade0-2cccb9c2c1ed\n03dcfa44-4bad-4b36-8947-6efbc78abc77\n6f48b138-be21-412b-9b17-613b58baddb5\n53b1291e-93a4-4e7a-8e75-c623853cc106\n8211e5e6-cef0-4107-a755-daa235fc5151\nfe1e6017-3870-470d-95f8-7d68d3491349\n455ec986-04a4-4ee1-9e81-b25d3005eb9a\n398b9991-c1f1-4a81-afea-1287f1326ab3\n0061530c-036b-4f45-86d6-961fbe1da757\nda62b9c0-2c06-48eb-a3a6-844bfc3da725\nfd8f8d2c-f41f-4ccc-8905-61377e355330\nc80dbccf-51c1-4bff-a9c3-6106b02387ba\n0fe28fda-14d8-4948-9983-9d25992f3711\n243a4971-f8c1-4865-af4d-365038d6b864\na7dcffc1-2566-43e7-abba-a7443ddb38e4\n7f57a78b-f536-4de4-85a2-f449dac3f0c5\n81124737-a5c3-4319-97dd-ad8495e317f8\naa1ca482-b697-4bb4-a2d5-0ebb721a8c3b\n760f8686-0671-4974-9b46-b5691e6adaa6\nbeecdedd-0411-492b-a8d2-3c891d29becd\n3f79d7b5-d26d-42ec-8f49-26f8fae42ad4\n9a1af58b-8e90-456a-8217-7367c45e47c0\n0d85d120-f5f9-49dc-8dd0-9b736218ff4a\n748bd4e7-6c68-41c4-a705-4860cd192de7\nd0d5081c-5d67-41a8-a4ab-8327cf8c6d9b\n55f81814-3e7c-4246-adea-8d4f40949a53\n860bfe82-c4a7-4cb2-9417-575e022f1c2d\nab4300b8-6620-44ad-92b3-a0fb7e98ea1e\nde73e674-5e31-4269-86d7-8a775a2ac1bf\n18cc954d-aac8-4bc9-9c6f-873cdc3a3cff\n75984749-c0d8-4a40-9a82-526d9f8c06ad\nc2812ecc-d542-45f3-b4fb-b183d7da747d\ndc17377f-2816-4ecb-8f81-260df3efa638\n303e81bd-be5b-4798-8a9c-26141d7225ef\nf46d43e1-4259-4789-9c20-f63f22cd2886\n4e5ccc75-b5ec-4dbe-8e20-62a608989360\n6f9d9a65-0c57-4114-a472-c896a6cf7169\neff69007-b625-4763-b387-cf624a40eb64\n42e3aa4a-3656-4514-aaa5-a453737beee2\n03df95f1-970a-4967-b075-8ec1cfa70f59\nc0f0ff3b-9ba7-4b19-ab12-27619bea6ba2\n7f361620-92b0-4b81-b8ce-ae57b3ab291d\n4a54ed18-6d36-41f9-be7f-e3214527be91\nbbe16e12-142a-4a3a-ba6b-aed0734a4a10\nd4b164c3-f887-491f-9898-1b08d53e01cc\nab07ece6-b2bf-4e5a-8efb-c005b5274df7\n3ea5bd7a-ab77-4f9f-b8b7-612d2442bce9\ncb285913-5075-41fd-94a3-e2eab2f33be3\n9e9ed928-5042-4d6b-ab78-ed8963b92199\n71a2dfba-18de-437f-b79f-8fcc6bada708\ncaf62d94-78e4-4b22-b99b-66b5950ec3ad\n0fa825b3-c705-4f95-ad82-3afa0882fc68\n0f767176-6d87-4c0f-b4fe-09a64017391c\n48cae32c-3fb6-404c-ae8d-b6724a3f6eee\n2c1957db-ac0f-41dc-979f-ae8d1bf58a10\n39ebcd04-e514-4afc-b2ac-f154207fb9a4\n3761eaa3-97ac-4361-b71c-2237395d4a26\n0135e926-7eb5-4a3e-be97-f238eb69570a\n5c2c59c2-216a-4a59-aef9-9be742b39294\n207a6751-48ce-40ac-a47b-c087400451a3\nde834f24-f548-4e4b-b80a-2f2a20b7b95b\n88b1d40c-0fa1-47c8-8977-92795af90626\n95bb8235-cc65-4861-9b1b-e152c322a06c\n9c2752b3-97fc-4236-9a8b-76f754162931\n68c4ee11-a383-4176-9538-b4d3d08f4c6b\n382a72c8-861e-4425-88a7-f4686166a092\n29b67021-72f4-42f6-a498-df574f16bb8e\n01285c70-552d-4789-9c1d-a07f98390e13\n54f8688e-c3fa-4c41-b939-ca29c69ba59e\n666f9491-f821-495e-b8cf-f6c1310f3177\n7c07472b-66ef-4322-b17c-1fa7713286ce\n3a58d611-e0f7-4086-91ef-51e0cac40c9d\n5e54011e-d5c8-4a89-a853-9fd16117c592\n3dafd1d8-ff1f-4c77-b27c-0cafeb04db4b\nd1975b03-6d03-48f2-97ae-367aec2b70ca\nbb8134a3-2724-4bc8-b633-da01de60277d\n1ca2bc7c-e1dd-4eb3-a0e0-a2a47ac52a74\na61f5b59-5d03-44ad-af24-c99b4625030b\n57010b55-66db-4666-b844-0fb27e3df936\ndc4a4c96-9887-4e51-a890-94c5f5201ff6\n6b656a1c-e85a-4176-bec1-451e3e73d382\n5d0516b5-7dba-4790-ba62-e5e578e9cbb8\n55d0adb5-a5e3-45cd-8fe4-aede2111ab2d\n6bc1d052-0494-4c9e-84fd-8e31b1ecbfd8\n24bc8778-3052-45be-b7d8-9b67580ee688\nb32a662d-aae3-49ce-bf6b-4520a98e6a33\ncc5dd6bf-99df-45d0-a671-9f40db431b56\n8e3259c5-5361-4b0f-9106-79eafb1d8454\ndb89653b-d261-4103-94da-d0f8cdccdce5\nf3901386-43ff-4d59-8dfb-ee868d40e4ed\n4f7c5394-0efb-4c65-b18a-afb7136e94ce\na791417d-dc55-4974-88f4-2844e15d2c89\n1d09da1e-b527-4f28-99ff-ef99bfc0ca98\n9b229c94-8654-48c9-9fb7-e3e5e51ad564\n8e773926-02f0-49c5-bc92-f9f510070c97\n428b0e36-02f1-4589-a605-ddfe33682735\n3a60add4-7555-4144-bcc1-34559d2ecab2\n2fd5ba5f-5639-4098-abbb-8363685813ef\n95f705ae-1f30-4b25-ab5a-d7c269da5ce1\n6a7e5c27-a348-4a24-a649-16072556f671\n8fd8ec0d-e8b3-4e0f-a20f-5f4b68e5a2f6\n69eed0e0-7a33-4953-ba3a-eec45082103f\n16dc414f-0a25-4fed-ab1d-184e729d062f\na3f6b7cd-50f8-4e34-ae8d-52101590e578\ne7d26874-12da-403a-b9c4-aeb0d10e2c76\n9af49297-4e1a-41a0-9547-c293cee5f8ad\n2b7349aa-755e-4a7e-b203-222aca3e143e\n36ec5f65-681e-48d0-9fdd-7a663c1b802b\neecb976b-5267-436b-ab49-f91581216773\n28bee0d4-1f05-4327-949b-42fab85af961\nfc0c90e4-4006-430f-88cb-eefa6eafbe67\n9dbda988-b6bc-4cf0-8df3-204c8643d17c\n76594c01-6887-4260-b6af-a25faa25764e\n46342fef-4ab8-412f-bd1b-3540e0f9a9bb\n3e3b1a2b-0deb-4b5a-a5a0-9d264d23bb63\n799b23eb-8ff1-449f-917c-75d8e467777c\nb26ccf53-7571-4f71-8635-cdee25d0d453\n17fdc247-d653-4f57-bf20-114fbd2a0b4f\n84fcaff5-985a-4bcb-b4be-8c2c9bde3411\n43817f4c-9730-41b6-a162-aec74c4e7c7e\nc779fdb4-4d3d-431e-87ce-d4280551773c\n538ad433-06ab-4908-aba5-466993ad6c6c\n4c9a5666-a078-403c-9926-60f31845a2c3\n99677dc0-c771-411a-be9a-d33a248774e7\nb2175260-6203-4280-b014-ced447f18fcf\n84a41478-0ff2-49fd-9adb-9b77f8f7e11c\n171bd32f-2aa3-45ad-932b-ba7bdf3fe75b\n7ddd6aa8-374d-4253-99e6-080d2f06b906\nbcb01b7e-4e3d-4983-b8e1-e8d1fa5d875c\nfed7e182-c77e-4e0e-bafa-94c65fcda3f0\n0493fb33-c44c-4e55-8db4-68445c382213\nf08cd47c-1d87-4a06-94f3-2756cd23c774\nf3c970eb-197d-4d93-a429-139e4ef37e1f\n8727878d-a817-4de6-9d7c-eebba125f865\nf0b7aedd-ea6e-47b1-b5b4-71aed75ef2bb\n74c0203b-3a88-4275-88d0-3b8be693b4fa\nb9e80f98-ef95-44e9-88d8-5007c48ed27e\n14a0d56f-4f34-4482-9d1b-7ca2647309ed\nd5da8118-5592-4dce-8958-f283fac55a36\ne5318d74-0d65-4843-b363-5478b5bd2d67\nf401eeab-9325-45cc-a74d-57890c196072\nac6e2434-9c79-4c35-afcb-b1e39f7189ba\ne9db685a-973f-418a-8c28-164febd58db9\nf7a79dce-21d4-41ac-b614-8f3b5820b2cd\nf3367435-40a0-45c2-a296-99a3c4466334\n0d47ab8a-09a0-40cc-ae4d-0bdfa91cfdaf\n58908c0e-1c67-460b-a3a2-7e90e8a85c4b\nc4c6bb53-5bee-41f0-a1c8-02a947d837d1\n0519107d-5eb6-4a65-8cd4-777eb2c45734\n3a1e3896-cf86-4853-8cf9-e4427518d73a\n175b000e-016d-4c1b-8641-f105ade5e398\n9b4146ee-e025-4163-8c99-2ba21ab3f97a\nc303c591-39ef-4659-8db9-96d4ad3700fb\n3d750525-cece-435c-8384-503bbae5a66e\nc91f74b3-857c-4801-9420-1a18bca71824\nf6b472b2-6f61-4d15-90d9-cf5809f0006b\n9fda63cb-30a3-43d0-b49f-de07954852a7\n98cc0979-b921-4063-98d8-b218be2b0e1c\n292e86c6-e402-42f7-86c1-8727881037f5\n44854138-a1e3-4bb4-abec-fdf07ce3742a\n819fed1c-e550-42ad-b5f9-6dff94e35986\n45883488-5379-4f7d-b85d-6a2ea21f0bb5\n78e9e1d5-3cb4-4ca2-a193-1efcea3c17b4\na820911a-8b37-477f-b1f7-56cc794c65a3\n26b25d35-c323-43ac-9208-5d3c6c3af8b6\ne029b84e-b182-4aea-b96e-6a9a503ceedf\n887ec982-1b53-4e81-8a96-5ee1baf5979d\na7b1acd8-b594-4271-be19-206b009572a5\n1b5708c0-eca3-49ae-80a3-b4f76bfcf040\na3c2e9b3-aab9-471a-9aef-04f3dbf447bc\nd0e297ae-a9e4-4cdc-8de8-0b6b22dc243b\n0032ef32-4523-4ddf-8673-e5b7b4c0e87b\nf8b36f8a-8263-4bb2-a67e-94939b6aa28a\n7b963e4f-3c0c-462b-9f94-abd128e2e540\n4dbd2b4d-c895-4aa7-8589-e3958d364c71\nc8e092d8-5c61-4942-baab-f7de25689d42\nb290eb98-d74f-4ab1-a213-db38a4ed4241\n1a7fab29-4172-49ea-995d-57e29aa21a1a\n9735fd0d-4f9c-4ee8-9a6a-dfa292dd3072\nf57fff14-6d2b-4558-86bb-c51d8c42b286\n1194a6f7-9dfe-48c4-8657-f7bace1ea4ab\n891ce46c-c7b5-464f-a301-b56b963aff0b\ndba330a0-b53c-4cc0-bd83-2dae43b379ae\n7812c252-fef0-4817-bfc4-8c2a7b59b7be\n73ce1b57-e81b-4ddf-8c14-7a88a67866ed\nf34f64d7-f63d-4753-8e05-71aa5e71dc83\nbf1f84f5-2f83-4d42-9752-141fe51cc690\n2a5cce6b-07f8-4847-ac98-27832dc0a92f\nd5cc4081-8057-48a1-bac3-69fcb886ceea\n07ea53bb-cc05-44e0-badb-0bda2dca9e93\n501d3882-b5dc-4790-be7b-d0d1c9e632e3\n33f3ca90-af62-44ed-ab96-faadf7cec650\ne678ce3e-643a-4a43-901c-ab314ca9b7c2\nf6f38d3c-fb42-42c7-adc9-52508d550425\n63e9a416-c127-4bfe-b1c6-f5a31d918f72\n100fd410-ce09-4ca2-bace-33032b16b507\n2779244c-87be-4e5f-9926-98350c36d6b4\n8dd19999-2c42-4668-bf96-6f99713c2633\n41a415be-59ee-425e-a5eb-dd51da19b3b5\n367a2f78-a486-4b6b-9789-423f5f8062fb\n838e3e07-f414-4f6f-8f7d-c2064eb00598\nb1254f95-3274-4140-a57d-b8435416d145\n4c4ea984-27d4-44d1-b63e-990676d64b84\n4059b5f6-7fd9-4410-b1f4-e42e5723a34a\n9ebb6e55-97eb-4c47-94ed-acf245025936\n2047170d-de9e-4f05-8b8f-3d2ec471db85\n24094b9e-7f7f-4f2b-a967-9ec9057faf6e\nc00c3caa-d649-4dad-8e5b-6f14dccc1683\ne576580d-d73b-4f05-82fd-9fdfaa6ffaf7\n9823345f-64b0-42fc-a315-f3646f6d4d36\nc5ad85b6-7fd5-4a34-951b-68427a835b0c\nab085c0f-6967-430b-8f42-8613258ae7a9\nc2545968-bc51-4ef2-85dd-fea87e0a5a2a\n50769fa1-1cde-4a20-a16b-cad707e8684e\n853137ca-1e08-4693-ab53-fa2103b66949\n093d5880-a5fd-48da-91ef-ed8f3dd9ef7d\n4e0b701d-fb70-41f8-9bed-34b35e11797a\nee828f1c-e029-4968-ba08-c20d843d3477\n8580debe-4bf8-470f-b2d0-58f63f1c47bf\n9c15bc35-7cca-411b-a6c5-9b583ea58dc4\nf78de281-4dde-48cb-80c0-7573f59c472e\n35c16403-ea09-4014-bc1b-e65456634106\n95c1d533-1b8e-4560-9eab-6522ab29da63\n4195a96d-df6c-4051-9eaf-78311c493fbf\n11d252ce-6277-49bc-833d-83ded66bd46b\nc92df825-5a7b-4f3a-83dc-71b54fd65618\n1d662276-9339-4e78-946f-0d5ac2ff1514\n1365f1e1-ecfd-4692-b63f-9fce28cd564f\nb9422360-28f0-43a1-9ed8-14e5bbf96861\nf7d6339d-f0c9-4671-a602-9d6b75e68238\n90dc7538-f0b7-4275-9c06-987abfef6b5f\na1ff2b0d-2978-4cf4-b5bc-1994be9e9b3a\nb94e2d1d-e3e0-4bc6-abd7-beeadb6f6e04\nab98722d-93af-42ec-860a-097946e64adb\nc0b6a74e-a29d-4f3e-a8fe-4ba20c9dd5ca\nead4f392-c82c-4eaa-b5b6-0e09483ed45e\na86990c1-0bd5-43b3-995c-91c861b018be\na6b481df-0872-4059-933f-09e6e1b309fd\nb30eca6d-a24b-4e6d-9e8c-4e2c5c2eb6d5\nd7e0ebd4-3f7c-434d-8122-f685c5af86c3\nb8148bba-6560-4a5a-957d-4b3633083625\nfec36c0c-ccf9-4729-b02c-002d6a33618c\ndb954846-275b-4fc5-b507-bccb5d76a00f\ne9342df2-1a64-432b-82b5-e58221966bb4\n2868c1b3-a799-4c82-af9a-07b2d5305129\n6bde1b73-6537-4aaa-8ecb-ea4c9af33783\nd963d9e0-32e9-440b-9678-bb3d977c0aa8\n2a623733-c6f2-48cd-9995-0bae7a768357\na92c5736-be19-45d5-a089-bdfc9fbca5b9\n1a80ba5e-333f-4001-90a3-bfd7e971b695\n43f3f1dc-ab18-45ae-b7f2-63a3f9380327\n36a5c613-34c3-4413-85cf-d4e150671d81\n5031dc1e-61cf-4ddb-a711-2d633d18b8db\n94fa82ad-5b8e-4c44-9b9d-78c3809374e7\n8c686238-22be-45d1-9428-1e3f8a17ef0d\n2c2679ee-363d-448e-896a-3423855cc54d\n651e1ea6-bdee-422f-9e26-dcc2a0200898\n8795e9cb-2e5a-4406-ae84-af90b641301f\n29bec348-0fd1-41ce-b52f-f7e9a1574066\nc90a989e-d267-48b9-813c-e60935943708\n94a1d487-bd2b-46ac-a0a9-bed0da74aa02\n61bb1731-7f2f-4ef1-a1f4-236611f8176f\n849591c8-7aa2-4841-be1a-376c0b7bec6b\nb6732a6f-647d-4b92-8dd7-2cb28c4ab627\n9838b655-01b0-4091-9834-61d6710df08d\n8ac3af4d-11e4-4edb-9d1a-a0bbd0b3e5df\naf19a2eb-4b64-4837-a8a4-e598e03a8342\n5b2fcfa1-4a24-4d32-beb5-6001d4dd8d35\ne6efd15a-5de8-4faa-a450-904af3927ff6\n9c3ecc7e-9f61-4434-92dd-8fdb13e084ab\nc14c9a04-73cd-4120-a41f-2c7f359924db\n371fce67-304c-4cef-8d2e-da1cb5b1b9c4\n6d10a617-b48f-43d2-90b6-68f3a5ac3076\n725b1318-7ed5-4e25-aadf-1c293f64e22d\n59036a5d-520e-4518-938b-9084f9dd8b2c\nabb4e898-9715-4fe5-8575-e39406d0cbe8\na359efa6-24ba-41e8-a2a2-77f4f96e5c0e\n8d35c6a4-e3f0-40d8-8a98-77da95a35e2b\n711bb0cd-ad53-4a6c-93f7-6bdf8e89ab96\n1e5b0d89-b5c3-4709-bf25-d72b6c9f2903\n27be87bc-91a0-46f9-bad7-97dded67968b\n43a8525f-7ae7-48dc-b966-ca94ca2e956a\n6e813fbc-d430-4065-a09f-b6e9b2203781\nbe2ee741-4f13-4156-89a7-139f462c52b0\n420d5da6-a22d-4b15-b47d-ba85371afe87\n9b720c56-4381-4466-9928-4fd73cd7986d\n585917d4-12ff-4ccd-839d-e9b437318844\n34ba8317-11b5-4240-9a08-53a13f33f0ab\nf98687db-5172-4654-aa22-908333de3884\n65711702-ef2e-4399-8ce6-e77e92e1cda7\nd4c8ca40-0ff5-4278-9771-06b3876d011e\na082ed70-56e4-48f8-adfb-39b06dc2a83d\n36853152-51e4-492f-96e6-2730621f9cd6\neddd5aab-d6f4-46ed-afb8-25a1c18ac80a\n52799433-c939-42b2-8632-cbc2fb03e054\naf500b52-f720-49f3-adba-f9ffb5aa388a\nf55e0d52-3fa1-4eba-ae88-2b573cb459f7\n6bf9c35f-5bd4-4a13-8230-babd704c76b5\nfcfed6d6-ee1e-4fdb-8464-2d131e9f8c5c\n191744ef-0154-44e0-9d58-1d43cbf4d6aa\nf7664938-18f2-4dbb-b2d4-b37021c3a71c\n06c495af-7077-4df3-a17b-0aebb9ac5a85\n6b8d87f2-e898-4f4a-8f62-15aa02cb6c40\nd0f1a4d7-6c41-4597-827c-bb4631daec2a\ndb869f8c-e5f1-462b-9edd-52c5c43f9802\nc9e73d06-b890-43f2-950f-262e8ac920cd\nc42363be-d47a-432e-9cda-4317bc74feac\nc6f4825f-6f61-4f09-8748-a2f200986fd5\n55da3f03-43b0-4969-a285-d0e798030ddf\n0331adf5-ec39-4e4c-8b32-5d4367ab0455\n9ba02776-e460-4b66-a397-7cad2f43ed6a\n5f794a3b-6270-4921-aa22-f97cc03929b9\n92f27bda-bc1b-49e9-98bf-710b0f536dce\n548b1b77-7ba4-461c-a87c-eda09cffcd10\n7c366a61-7582-49ac-ad1d-3a71ccbb6faf\neb51121b-3241-435d-ae6d-751d75f5331b\nf75766b3-ead8-4b9c-a930-c6d4a9a9ce6b\n10641ab2-c0ec-43fe-b012-ebe11df092a0\n22d59a15-9cb4-46ff-98a7-521c3c0eea52\nb2c91102-eaf8-43f4-a651-85220a8a0cd0\n91d80e61-0e72-4c83-a48d-aa55caf75b89\n33136d14-ac99-4941-b5e3-6b7ff18d3170\n7da6acef-0f2f-4a8e-9056-97a90cdb1fcc\na9780653-0d40-4da6-aae5-64fbcd39e3d9\ne1c0151e-56f6-4af1-a151-3c1426c71d85\ned1fc58a-feb8-4551-8cc0-5eb986dc9cf0\n82ba6303-f692-4b33-8d2d-8f0d57b7b2fc\n2b3dabf7-9b7d-4368-a002-c366d7e55161\nadfc970e-a9b8-46d8-97d6-362c5a0d184a\n69783594-e70b-4cbc-819e-b6de214a81a2\ncc10d0b8-52dd-4fdc-adf8-22a5a0774bba\nfcf6c6e5-7def-4bc1-815f-27549d7c226a\n2d13bba0-f7d2-4ea8-b918-7d3716555e63\n4328fa06-62ff-4b5b-b4fa-4c26b8b40b2d\n28eee5e9-3f95-44c7-ac6b-ea5f4cb83f61\n7be50a44-a784-4052-b64a-937fa1555ea3\n36468233-0a04-4d61-854c-0ca870368e53\n76fc20e1-f796-419b-9a83-647ac259cbdd\n5fdb9cf6-4c6c-4acc-9301-564449707112\n88dc19f9-62ca-40eb-8bda-c3eb02e50c3c\n34792d6c-dc68-4b2e-a461-ac7887f5f47e\n65028577-f20d-4a27-8c19-b8b20db664f6\n57a4fbc7-5c9d-4a5a-83cd-54a0031ce67b\na9c3289d-aea8-4f6a-8f13-20cd511571cb\n3356f878-1c58-4bfe-8778-96309d68d16d\n64e70320-121c-4582-a05f-16fcac65bb57\nf0ad8930-dd92-450c-b7b1-8cccaab11fda\n264f4073-c411-419f-8535-d45d439ae8c8\n11bd57c6-d319-4db8-879a-ebdbd611bd9e\nb8cc4bfb-758c-4064-869f-b338863c8453\n65445c33-e5e1-4bec-99de-685371565e70\n25b0d91d-09d2-4c03-b6b9-8e5b132e8e8d\nb6ade7a7-feea-4134-8900-14e0e1e0d355\n56d9a1d3-e295-445f-b67b-64169ff9dd19\n1c8fc6a0-0365-47d7-9ed2-e377935b0186\n5e86bf24-0889-49e4-b626-93e51d8671db\n0d20081c-8c9a-4dc4-9969-bd21792cfc81\n7c516397-9fbd-4fe4-aae6-015f45b9435e\nd296348b-d738-427b-9e0a-75ce97c5ee4a\ne29ba3a9-fd7d-4ecb-a743-3de6b42dbd55\n25c1bd11-baed-4b5e-b6ff-5fd88f7603b4\nc2493c67-6f0e-4dbe-b5c7-59e754d881bd\n6f469a15-95ab-4026-b4e4-14143b86d466\nef090b7a-2ca7-4a64-b2ce-9959c6a7df82\nac118603-2760-4103-852d-f57e4c3fc38c\nfd9ae760-778c-4aa5-806c-ecf1cead9f4a\nf285aae9-687b-4a02-a5a0-7b588f92bc75\n6c6e9e4c-7fd8-4623-b30f-e8eab9f67760\n93dda4d2-336e-4dc3-8ddb-af2a49f21b73\n9c6b305e-4c9d-4187-ba49-0728c25d85d5\n9bf14d6d-7ee0-4d2a-add4-89c487cedb24\n66444ae6-9686-436e-8b9a-30cfa1259634\nb35ef38c-d894-4a04-818e-85583ea20a96\n596dce1a-f955-4881-afab-50c4f6623861\nbb59513b-f4dd-4db2-ab7f-3fb763cb8b95\nbbee5b85-0eb8-4aa7-9cdc-ae1359912315\n1241e5fc-a9ee-4e0b-9ce5-0c1ea7897d0d\n0d06112f-a9f3-4439-8f8d-298ad223390c\ne5f29b55-889b-477c-b764-c6dcb2432bef\n2688a421-2c04-4fa0-9b4a-6f2820c31ef5\n06d8c01e-af5a-4c2b-8b43-eb999d63f23d\n3c74faf2-3866-45d1-a048-93775c76570d\nfed10e4a-84df-4bb6-b81b-dbb44b1afb61\na2d8b279-78d8-4ff3-8097-6a691e60d2b7\n6a23171b-4e69-4997-9f46-a33757430b84\nce67d3ca-830a-4e74-8122-2587611f6600\n3dc6e7c9-47cc-4950-978f-baf3cd952f9d\n16a7be3b-320f-4b69-b367-247f732661e8\n4999babe-79b5-43f2-b8e7-ac5a1615377d\n5ab7ece0-9808-4535-8753-258897ecc650\n805cd969-2b2e-478f-a3a0-fafff5724364\n382bfc68-0f81-4152-8c9c-fde129f2610c\nd812d6f7-963d-4646-b2d6-227e92313b9c\na5e86aa2-03ca-4a99-884f-0dd939c64472\n258f6a94-7a9f-471d-b8e3-01343673ceb3\n0f2b9b93-bcb1-447d-8bce-a5c18ec0b77f\ne7a9a488-9fd3-4085-b263-a121c0d94db9\n8bcabfd7-880a-447b-85db-3615e6003476\n2d5eda00-0da3-4097-a10f-667bb0648c60\nc1fb4e10-835d-46a5-a7b8-1ab94ec747fe\n3f9ee309-a8f8-4896-8e88-5a5abb11025e\n3204a55f-1762-4482-8fea-d2b0de746da0\n7ee22fd0-d1be-4766-ae80-e04010c0fdef\n7b2f06f6-3146-4d7d-9e30-7c021454897f\nd5e2e7d1-9264-4f59-9b13-9cf3de1233a5\n17f1bf36-6e8d-4dd5-be60-456dcc4458ed\nb86dd10f-667b-4d26-a6d5-a53e62a56599\ndbc1bce8-9205-4807-b0e3-15c040d5547b\n10c4f343-a20e-491c-ae6e-5c56e03551be\nd30ba79b-0182-46b9-aa07-cc0bf3ee9aa4\nf830ffe0-5ebf-461d-ba83-64288aa4f3d2\n984af6a1-94a1-4540-8d59-152efc084bd9\n432893a6-2a9a-4c4b-96b8-f1ae91363dfd\n37ecf694-0ec5-4845-95b7-b429907f6364\n94a8bfad-f934-424d-980a-9f681f1bb632\nb32b6abd-aaee-49a2-826c-4ac5d93a8f5f\n6efc2bf2-82b2-4b93-8cba-8b1013afafbd\na3d38d2a-a576-4850-a558-c59fc751f4dd\nd5fb40aa-10c6-4e34-b4ce-6c9072415a09\nf61788ab-e594-4287-a8e1-03162874396e\nb945c03f-0597-4626-aeaa-0f725deb0e42\n9a918df2-5cf4-46db-9a28-bddfc32bd758\nc740f5ff-57ff-4f27-a62d-bfc381628ba1\n561b44ca-784f-456e-afb9-24a0388a6f3c\nb2c6dd01-503d-4cd5-b1d5-f385b75295b4\nafc6dc49-83ba-4599-b910-4772fedabc97\n97847ba2-db91-4409-87ae-4386bf951d20\n75607b05-855d-4813-be3e-3af363368d17\n28596100-528d-419f-be8a-e3baa39c846b\nf1fa4f61-42ad-4e59-ae92-4554463fd807\nc49dd631-5e22-4fe8-9601-ab6b059ecf40\n996d9e76-ee7d-4a09-bbfd-37fb6d3901eb\n699c143f-3011-4e2c-adce-f964fb6e0a7b\n0d58add2-f4ae-4b7a-aad0-edc2f5461f1b\nd1d88e66-36db-4a11-976b-8293f92b588d\n1e6e185c-ddc6-4ba1-9447-50fe66931551\n62363eb1-ac25-4286-b204-61c2d68e8bd9\n89404852-c3dc-4ccc-90da-4cfc90541e62\n85c240e4-7a99-4c98-b687-01c99c1f7768\n188916c5-44df-4dda-a49d-8795ca84ca86\n56741565-5f20-4f4b-a883-97d2db672916\nabd0183c-7949-495b-bbd4-14a41a673ac4\n32caa254-e86e-4d51-abce-a52a76d3af31\n38ff749b-2b68-4bd4-aacf-994007024d87\n6324d0e0-86f5-4e30-96d3-1be02d3b3738\n6b458879-285d-4b71-924c-0e851e7a49fa\n1c3b37ed-3d49-4591-b5f2-dcfbd05cb1a3\n09483499-e673-4f4c-ad1c-39ff7356e197\nb814c465-30eb-49ef-af2f-14b35d280ad0\na90dca5a-00bf-4b10-9605-e529f19eebfc\n728a8c44-b146-415e-8a52-1e26b9ca0e5d\n0fdb3c52-cb5a-4987-87e9-b8e7e5411409\n72d33d13-65c8-4d65-a926-8f89683a98d1\n12a4918a-50a9-436f-92fe-5dd9bae8b508\n193d107e-77e5-45e1-98cd-a972bc9e8e55\nf2ae29ac-de0f-4e47-8328-3c8d94d11ae9\n77203d6f-d02c-46b5-afd8-73dd5299e494\na992ba26-6b71-4756-ba7d-d91abee3f9b6\n7c18790e-8517-4e74-a3ca-d9fad5818445\nbeb93440-2862-4f6b-99be-67f5e9a4ed11\n1f262946-a5f6-48d5-897a-2febf08fe5e2\n157891ac-9f97-49dc-9927-ddac15ce5407\n4e6c67c8-85a9-4252-bfef-b177d2ecf127\n264e4058-a07f-4a38-8c89-2a8310454196\n0990cdd5-7f30-4a82-8cec-c03683aa3c8f\n780bc1d6-31a9-42ae-8873-486820224a2c\n83da9425-da67-4424-bdca-bdd191f1e91b\n2fc02a99-7c24-493a-acc0-3294888b08ea\n9523a49a-ece5-494c-9c61-d9b0933b500a\n744420eb-b8d1-4fb2-b34f-1fd797671426\n047545fd-e817-42d1-b57c-7cc3d813d448\nf0915dd9-bb19-46e1-848a-ba523f288a4a\n033da3e6-d1a3-4730-aa4d-70ff8c83bcd5\n946aaedf-ce55-4a37-adf8-4fe2b05cf77f\nbcbfbd48-16dd-4224-be2e-d3c5c8498045\n0c03fe0f-6b11-4693-9b99-9d7b0207ad75\nbf92c48e-301d-40c1-9b0e-324017679cc9\n0d3fbd46-3da0-4ba9-9fc8-a3129eb083a8\nc9bda2ab-f529-44c5-bd56-a8d7cba2afd7\ncfd76d26-c476-450a-a41c-13007d8c5ff1\n4de47361-2ee5-46dc-b14a-69ca3e2c3537\nc254e965-ce4b-40f1-ac96-352291ac8713\n715c324a-a47c-419a-83b4-cc5457f8dea3\nd7c62caf-2dc6-4282-970b-68cce9902873\n1602f6b6-7865-4d92-abb4-80541ce776f4\nc078f0f8-0c6c-4ea8-a2d0-92ca082dad9d\ndb014d7c-a052-466a-9fba-b1533d1df48b\n27583104-153f-4921-b856-200e96fac77f\ne90ed539-d737-49a2-84ec-e1ba139fd787\nb77ba07f-8780-4f1b-b93c-51be5ff5f91f\n8526fc58-a6a4-4541-bcad-6d0bbac4055d\nb1b26be4-246a-410f-adaf-00d79547f9fc\nb676f873-aad7-46a3-99b4-21f6f59401f0\ne3d569b4-e4b2-40da-a5fa-21ee8ebc033a\n5440f4e6-afa3-4dd0-b0fb-657de360dbe1\n82f0c582-571c-4099-b4fb-851a1d838873\n48bcbee0-dc4f-4849-8d0b-b376d9b68fcb\n54ab7c9a-e73b-4a7b-b874-73af4b0df282\n10627eed-522d-445e-a9f2-5cd9da6309c8\na4a926b1-84a1-4ef8-9186-91fa57373e8b\nc366f592-1a66-4648-b8a6-8f0952f351a6\n23ebd426-3166-4e03-ae6a-9d4e67a30609\n1d7fe416-4e0f-43ff-a42b-6d603c7397fd\n549b2ea6-03c4-4bf4-ab05-1ae8047d5371\n7d681a5a-387c-45e9-8176-9fd395cae1bb\n7546ecde-a2c9-427b-a2cc-e3fe4ac34838\n9e16b9c2-1135-4d58-80f4-ec3893357f4d\n21ad0d91-d55b-4a25-99e8-39c061b014cd\n5e0fd237-0cb4-4989-8875-70b283edf4f0\na8d2fd61-9949-4069-b1ac-86e526eb346c\n88fee701-9e8f-483f-b9f8-b19edc6d94a4\n66be2db1-f810-4d51-afe3-9b7f96db3752\n4a2758d9-e542-48ec-98c7-212041558ea7\n25e75237-c37a-436f-b4d5-4f52af78ebf3\n35234170-823f-4a0a-b15d-c2ca6d5c5272\nb654c798-b929-45c7-bcb9-59d548e32691\n9b18d3f8-81d7-4445-b1f1-0e8042d0203b\nd1d92c09-fcc1-4c23-aa55-4ee2aa4ab5f4\n47b44d7a-ca7c-4f2b-8732-9fe032c89524\n5a40351a-0d8f-44df-abf4-69f43775625d\ned999ffc-09f0-4df8-b025-eadaa830c608\n50ebda42-e488-430f-8f55-84d0be68ba32\n885fe4d1-161e-47c0-8701-b5eeda58cba3\na5db5eda-2169-45c4-bdf9-1129d7f594f3\nb24ae4c3-12a1-469f-8ac5-d86a760d113a\n1f037e6a-357a-4eda-9c8c-850878c9ae24\n75c6fb23-f905-436f-9ea6-d18c843d6912\n9aec77da-801c-49e2-bdc6-fd295121e854\n52cc4eee-06f4-444d-9bb2-7d8110c61dd1\n35038b53-1308-4449-b2f2-452d77564bf0\n09a93182-eb3e-4fb3-8cb9-a30708391e31\ne98e1c89-2ca4-4bda-955e-a60c4c163f48\n376a38ee-b29f-4ffa-ac2d-f6c0e62dc646\n7022ac2a-1f7f-46e8-9bd8-da58d54af56c\n87051a6c-99e1-4f8b-b65f-5e02529a5a0b\n14643db1-47b1-4b3a-9f84-277dbcaa33a4\n77a20d13-943e-4700-acf6-f306f2cb5cf1\n3d7527aa-f5a0-494d-97b1-b28a99e45b61\n17e2a2db-a665-4907-9e5e-c11a04a3d039\nff62bcf7-c0c0-462a-947a-83cc7643c3a4\na8322196-f423-4bd3-ad5f-47176dff2af9\n13aa5852-68ad-40a4-a4fa-66378ece1adf\n2d54dfb1-fd17-4b9d-98c7-23fc9ad6fa20\n4279f3da-8081-44c7-9f8c-fb25784df050\na9e3c8e4-00d1-4542-8240-c499868c4141\n6319cf02-c1f8-4036-a255-2ddc54c33d02\n082953a4-efab-4370-83ec-68a20246773d\n2cc4f180-5f40-4f6a-94a3-332e3c882300\n77e0abe5-b729-4a4e-acce-040c9d969cfe\n5bf42d2d-26a7-48df-a778-7a2af72c3e83\nca76b95b-76b9-467f-bb85-74a3065280f4\n5221f2be-3802-4fc9-a023-5bb78c170550\n32da3669-c044-498d-844a-d665d4a9f0ba\nb976588a-32dd-4a60-9a84-429068ce89b3\nf48955c5-f4d1-46fa-aa1c-824cee2e5ccc\n8fc368f4-3aaf-46ef-b924-9f13cf1abdd8\n07580e4f-7572-4929-9d9c-0205ddddfae4\nd9d75494-0fca-40aa-adc0-aaf743988d92\nf89b889a-02e0-4a13-9305-130230d9f4fd\nbb82a03e-7c1a-4390-9ea9-3ac80beb2633\n59f2a5d4-9020-4924-ad3e-da4f79afc424\n34ffb5a4-de6b-4797-aa0a-733c8079b9a0\nbcd10207-a5ae-47f6-8683-2481e40ad1bc\n8a1a147f-7a46-4a4d-9d84-a0c3ccfb3693\n236afd20-d381-43d5-9e3c-25d3b4bfb682\n8cd11273-e730-4b37-992c-902c7a8ff6ed\n00fc8616-60cb-43a7-a865-c98d6925f9c3\nc327d33a-d89a-45b2-b6bd-9bcd69c663bf\n9d7d6806-36ce-4ab4-ad05-1f08135f87de\n5e444e3d-5b89-413a-915e-2551d88ea9a8\nef57c57f-4396-4404-a277-5a2de0e28e71\n07052e25-3e47-453a-824e-551f04d4e64a\nb0d874b9-4c9d-48d6-97b5-f28836637c4d\n04bbd288-0324-4c9c-bcf6-9343ec41e5de\nc3a20f5a-8f53-43bf-9296-c61be0ee800c\n5e337981-36a4-4927-823e-57f3bf8a7997\n395082a1-9f94-4f25-9053-7c99a8c50340\n76bb0a11-6133-4942-affb-f42f61ef51b6\n84f942e5-443a-4c51-81a8-48d5bffa829a\n2576c779-acb2-4cfa-9b2f-9d72be32b3dd\n1882f853-bbf0-4207-a6c0-9426f26da4dc\ncded1956-2816-4409-89cf-18ba58d032b5\nbbfb3e98-2178-420e-97dc-f92f86f537cf\n94a6071d-e731-4846-a7d4-c74dff0db5ba\n8e049411-08fb-4844-9385-1f1a9419e2b2\n74441d3e-df4c-4a47-8d96-be085c52b6c6\n1ffd79d7-c70c-4fca-b607-ed0af93c0254\n1e0f7277-5a6a-4a15-902b-061f425e4ac0\n6eee0314-66ec-453d-b561-05bc29ed918c\n3241f968-6221-4c18-b5b2-815f8fc04ae7\nce14baa1-0d16-4c3a-8e56-a0193e3c8b94\na08b5d55-787a-4720-b949-98fe14c8e13e\ne7e81f10-546d-4aef-b3d8-6d72e3acac1d\n77cb5057-2b32-4f76-88f8-db29f0cb9e63\n62e031a8-0d72-4e67-82e4-4df435daa0ee\n9830e67b-b76e-42c9-b6e7-471eecf74891\n1ca3a904-0be5-4474-84e4-9d09ad7ce10b\n4a60f366-c5fa-462e-952b-365684ef4025\n5377d9e2-03a9-4c50-9420-48ad4b893c48\nd1370f31-ab6b-4058-95a8-984e2fed96c3\n8b1dd0ae-dd9b-44f3-9eec-3ae3768bdc72\n896e0293-f537-4a79-8db2-48374684ce94\nd5fc5ab5-57e0-40f0-9437-9515d7a5d9cb\n17b2ef02-f244-41a8-a3c6-fbf95f7685fa\n53d43a4b-7e00-4212-847b-fd3748fd5d0c\na6ff54b7-f48d-4136-9162-f7f0eb8702e9\n0067f33e-beb6-4101-a64d-c68c0d7090e4\ncb27e32e-bec2-4f08-91a3-beffda268dfd\n50f52f4e-a361-41b8-85a5-7b5e82dfc4be\nb07d274c-6e30-419f-b89a-402b69c373e2\n4c922902-d157-4b4a-a636-52ccc448dab8\n5f812a28-ba7f-4040-92fa-f9cad244c888\n71351f3c-d056-49f8-b869-36686a9a46d1\nea56bb0d-2111-4c8b-a63a-af2a07ad1b1f\n1c68b36f-9ffd-419d-a7f6-f2c0f60fc1e9\n0d9836d6-6f27-4e66-bd24-f050510adff2\nab309506-72a8-454c-bb9a-070df2a2616c\n9c0c1bce-c82b-46c1-a44a-e41fb805cda5\n18091bee-b7c0-4193-842b-27b5630ae525\n27aaa91f-84b2-48c6-b56d-2345fc0b1183\n181aa00c-7d16-4047-ab93-bce88ed8db40\nc320b7e5-7cec-4e66-b42b-1fa8ef6a5f05\n93445ebd-40e3-46af-ac49-4e296939fdb0\n028a029a-be51-4208-a5c2-e803f9ecf648\n5c747495-9c33-41d5-8d2e-5b9c4676e4fe\n5f301e6b-e8fd-4830-b5d7-c9e204955f4b\ndefa4b0a-8a97-4a0e-8025-374c6ce7069f\n4868e58f-d5f5-4554-95b2-37fdc501d196\n801313e0-ac2d-451a-bfdc-f138c892e735\n25ed23ef-6dca-4980-a9da-c4e4874053cc\n2671d04c-93b3-4578-b755-a95f715c43f5\ncbeed8e7-7ac6-4f01-adf8-a830ae841cb1\n8a03d1c1-485c-478a-987e-50b299fa0335\n7ebb4285-0bfc-4535-8865-7bd268415093\n9f4c2c8f-1885-431a-8822-7271e951e7d0\n912af5d8-edfe-4df6-b574-f070b17196c9\ne8e44426-8517-4ea2-acd3-d368c0332408\n58bd1f13-5e18-4362-b019-f935499c8877\n83a0ede8-0846-4bc2-b15a-2f63230a3cda\nb3ab444b-48e9-45ac-93f9-9afd33080546\nc1174f55-f4e9-48e0-9cd9-ac4f158e6c09\n8caa6529-101b-4063-a390-84e9cb22f135\n7add808c-557c-4b56-9c99-b661fac567a0\nadd265f3-fcbd-43a9-b7bc-1409ba36ba09\n39277992-9862-48f5-8478-ce2a23c57d19\nc890cc8f-1f75-4423-ae0b-9d7ca038f581\n52d4155d-8896-4dd9-8d00-251179e736c9\nc066d5e7-6b32-4b43-bc09-8b65369ea9f6\n94d4cd58-10ea-44e3-b981-dd50c202ee16\n1b15f6eb-afb9-46e0-8d58-27b27034f76e\n3c95e6ee-d816-410e-8a19-ed14bb312748\nc57071a6-6707-4de6-aff5-488d6f019f18\nba727efc-1b73-49fc-84cd-1cc3d4c1df22\n971062e0-6a52-4456-8b76-3483dd9646aa\n9c95c9ce-d8b7-42fa-9674-79577ea91032\nddadac4e-0aef-48a8-b16e-0d4c175d14b8\nc5ab3674-623a-41f1-883d-2a28008a32e2\nc3cd9474-e519-44c7-a297-8fa99563d861\n8752cd3f-b094-4c83-8864-c6ab5e3180b1\nb5b4a5ee-f6b5-4c4f-8110-efd9efa480c0\n3bc3d53e-a818-4e9c-8f0a-40852795caeb\n5cc81088-9d3e-4461-8878-3ce43b1a52b9\nf6fb56ce-3f3c-4109-ace3-020611031c13\ne01458f2-f9e5-4e39-8465-71d544634bd4\n558879f9-23ad-4740-bb13-c70eda8c692f\n086c8eb6-0d78-496d-83d0-d2b243e6d929\n6fa9b894-0dd0-45cf-97d5-f276278015e0\n2ed50216-02af-47cd-8c7b-9afd64e238a4\n1b7547a2-5c56-4825-b0d0-804316c2bc56\n64e6f236-b600-4292-8936-ddd9449e3113\n8959d3e2-8d12-4889-b4a8-5350bc2dcf1c\n438b9055-1202-4350-8724-f50c14157ed1\nf0ef0f38-3b4f-47b7-abe8-20d9a2281013\nef06875d-688e-465f-9451-4fb286d786f7\nae58d10b-7fa2-4f2f-8298-7dd870ecf0f8\nd261457e-b044-4d2c-9d79-2d525795c641\nad632dd8-d957-414a-92f9-4554b669f366\ne1c94536-2d77-474a-b395-ba0a5f41388c\nd01598c9-61dc-44a8-add9-626808a7df65\n5ab0272e-7cb0-44f1-b6c0-a584715f3e3f\nbc2285f7-1b68-4971-ac6d-549c124b93cc\ncc2fbfe0-6b1b-462d-8fb4-b92d4ec7c9f6\nc9149cd6-0c7d-489d-a52e-c62aed66db37\nfc5ca787-7096-4d72-b37c-85f375be43e9\n09d7ff0d-cc2f-4ae4-8447-3b5e37f03e49\n43d441a8-bf4c-49a0-aa64-175d0b96b093\nbe1d17e7-505a-4d04-8416-986fc9d76adc\n052f8255-d4b6-4033-b0f1-f5bcb7695303\nb962a47a-dd55-4e95-93a2-5528141b0e0c\ne92049f9-913b-43f0-9d57-79c023ef4d6d\nfe7cbd53-8ff4-4281-92a4-0d385479852d\n7a3a6a38-a23f-44b0-8c8f-97f59833b1f8\n901762bd-2b32-4e22-9adf-5d9a96e0dc4a\nb29c8bad-392c-45cc-b843-3a4080f90d3a\na7799ec1-2124-4479-96ee-202c87139378\nea55ff19-4f30-41b9-b687-71cbc39aee1f\n121b6942-a82a-4e1f-bd9c-6a110d62f2b1\n2606b299-c181-4a51-a554-aed4f63278ea\na5601787-db9d-4154-ae59-95534a755654\n59dbac73-b775-4f07-b6b7-8d482993fa53\n43e09884-ee59-4b9f-94bf-a2be9cae6f83\nd161764a-2f44-4c1b-b8a5-6fc00a49fabd\nf6625048-21ae-4e08-9191-8060708ea327\na3462004-35ed-40a3-95df-16efa88d84b2\n7acfd446-4a2e-4f29-b7ed-078165896ad0\n11ba3ab8-2385-4ed8-8e70-f8ff1b2b5c7d\n82e1a792-6464-4c29-b155-6353f13187a7\n85744bef-58de-4dda-b485-b6f6b81d8bc6\ne6a4c954-666f-4710-adad-a4da8e405a2e\ne005d388-353e-45c8-ac68-af3594a40a42\na8ef48ed-799a-4af8-a80e-91f258c38074\n3243c8d7-c18a-4c34-8dd3-404797d185e6\na1f2b111-6445-4d38-8885-ed0c41b79cfc\n0f5e286d-3771-43d4-b83b-13bf1b7bcf45\nced61af1-ada9-4ae2-bfad-677fa610fe02\ne29d2047-0ad0-430a-8ffc-e9a4ae47ae07\n51b14fd9-2457-4b5d-a662-a99130204e72\n16f32c39-0531-48f1-8d9a-07c6806acc57\n21982cb5-9f8c-4bc6-9c6a-c255028ba15e\n374ea004-7bfe-41a7-a838-9133a55a39be\n141dda91-d398-4d53-8bd0-949cdcf4577a\n691a5481-2c53-434f-9d96-0d80eab029c4\n52c6b4c0-2a46-4fc1-946c-39ba02f98db3\n1052e0d2-5e03-4677-a168-ccc8a89bb42f\nc8547254-e61f-4f8c-a6d2-18635978620c\nf0f00f51-1bde-44f6-bb90-803b9f0e1f9e\n3fd76300-3923-4894-a04f-5499c11e955f\nae5d5620-1a88-4f3f-866a-62d852aa795a\n1e27e3b7-6760-48e3-b8f4-6b69b5417c30\n499e34cc-0379-4f60-accd-935f82ce7cb7\n9ffb68fa-d491-4bae-9ac0-98014925a656\ndbb373bb-3d62-4d1f-995d-6f1e2eb95a24\n30ea0350-c06b-4208-a1e5-bec61c90d4fd\n10e17721-d0e2-4d4b-8d44-5ef2672b1293\nb8112d45-d1a0-4d98-ab3f-98e4697ae2fe\nc5356d12-cf73-47c7-ad26-0a4481bde510\n3ee83f03-d8c4-48ae-949c-397c22f10d13\n29ffec04-fc12-438a-aed0-80f335ce86f2\naa2be4c1-29d1-4d16-a569-1f392343be79\n734d2872-32db-48cd-92ef-492f664a640c\n7e92fd33-c906-454c-bd0d-607023f14e9d\n57db007d-22fa-4575-8659-36083520aae4\nb591b8ad-6301-4b6f-a3ff-bc424da7cc51\n05467dca-8511-48f0-8a14-ea0491df82e0\n57225a43-40f7-4922-9aa4-5a53b2d1dec9\naeb19921-eb25-4925-85db-d0f7d83fa2d3\na9e134cc-6b3c-4f2e-a9f4-0fc089e63c6e\n6daa9dd7-b75e-4b79-a65b-a677c0ab5a7b\nc6396725-2995-4b67-81f5-4ea7f3071669\n605ccfd3-af2b-4ed8-af52-4bd0c10a2ced\n2c536ed5-a4e9-476c-a21f-0282a8892882\ncc3b79df-731b-430e-b764-17387d971f71\n704015b8-7ff8-4fab-9310-200729142d15\n56d0bb2c-bf2d-4c99-b919-99d08ab134a6\ncc2c2558-ec43-437d-81ab-cfaca0c56c12\n5f10993f-cb9a-4af5-8570-56f223e43865\nc49ae726-21b3-4715-bb8d-f865754c5e85\n8ec35bf1-f1ad-48a9-990f-f037f2efdd8e\nf29d7225-2690-4aab-afcf-746181971aed\n92c2ecf1-2b6d-40d7-95cc-e6265c1df084\n1ed86756-ebd8-4355-a673-be75e07d1bf5\nb4a36590-6673-42b3-bebd-9d728fd20fe8\n77123b04-b2b6-4b68-b12d-5a6f6aaa7af6\n966c9253-60c7-4f45-b5ad-122e6b9c342f\n09f29862-f249-4d51-949d-3bb20fee39e4\n19dacc6e-fc40-4e56-bdb8-909e4cd01fc9\n6cf686dd-912c-4c10-aa88-e24a0c54d6a0\nc626792b-cc1c-466a-a373-164486ddc058\n72d01657-693b-4404-9dab-65a644878689\nfac1ee3c-0a0b-4b6a-bb0c-d55c0bb4e211\naca51f2e-9c59-4ea4-95ae-b670d5d360e5\n26139a03-0968-408d-8a6b-3ba5029ba5a4\n3aaa1cb4-a30b-4a4b-9f7c-a79b11b4e96f\nd640d313-30c3-4165-8a1d-30626403ea75\ne83f05c8-997a-42ef-a9f3-14b7276c6d7a\n53893baa-acb7-4c69-9809-a87cc9911730\nff7d9390-59f8-4d38-bfc5-0aac1de575d3\n7a78e72c-922d-4544-8c06-49d851514b68\n90bf53a6-ac37-41e4-bee4-d0d3a021a1b0\n7a4562d0-b20f-4421-a565-9424f01e2b3a\nf2e5ea09-af8a-4e85-ba0c-7495e95d8115\n6ef6147c-e4f0-407f-a06f-833749133b86\n44d94fc9-910f-4888-8744-7879e6d7ed47\n092643f4-c8d9-4f9c-9705-f3240da7b8b6\n3edde1d6-f02f-4ce0-887e-ad0aa4d1f9ea\nfe951452-4272-47be-a6e8-edf59effe47a\n740c24ec-cbf6-4a4f-a22d-fad1003a2915\n78eb2fdb-7ddb-4ece-8e89-940c76b77ec8\nc683c6de-d9f3-4a70-b1a5-a043c073dc6c\nddfe817e-1b3e-4fa9-891b-85bf5bec7d0f\n55dcb8a5-584f-44b5-9f84-31315431f1d9\nddb6358f-160c-4ca4-8c40-ffc8bf37e727\n1172f0c6-43f7-4e37-84b5-165e4718ce54\ncc8dcf09-157e-4244-93b6-171f1d5fd6fb\na52e4868-355b-4a07-9a53-b49acf339340\n031be833-79cc-4fa2-aa61-1185263821e4\n8a1c5d81-c72a-4eae-adec-886caca52fd3\n3d524128-4b71-4f62-93fb-be67eba082c9\n900a9219-cd04-4057-889e-92a1c07f5269\n55c26c25-c764-4b47-8a31-a8ed856300e5\n13676640-7899-4cbc-bdfa-a696b8e7a2dc\n79b2fc7b-f376-4454-bfb2-21d8ede0fc1c\ne782ca01-5e25-4b09-8e5f-081cecf9890b\n3ba378bd-ff5e-4049-b84b-58fafe428286\n33dfeae9-9bbb-4a95-9e8d-baff44e74cfa\nb2e6c094-b62b-464f-b772-3e83a1404934\n142722f9-4ce8-4a35-93c4-cebfb888c221\n33b7dfa4-f82a-4c73-9d65-736ac295a7b2\n21ecf689-6eaf-4255-b34c-02500da70d52\ncb6df347-98ec-4fe9-a816-115e2540b676\nea4a4080-a1af-4874-b6d2-0d7c71ebf737\n32ff18d9-72bd-42a0-bdad-6cde4a78ef4a\n2b9162e4-e08c-4692-a212-43f11ad5463e\n6a89d9c4-68ae-486d-86e0-b79aefdde92c\nb8f3796b-61ea-4acc-89cf-430cb691fa34\n1ee9d065-c9df-4afc-9ec4-5cfae83f9045\n1831d1ae-65a2-4a8e-a392-4102b4d2fe5b\n1d86e41c-8b49-4e28-95b8-49bb6f21f509\n75b0b99b-aa7d-4b26-98f0-0b08e44e3402\n1371b158-8d21-4fe1-86aa-32f0b717901d\n616aa7d3-660b-4128-a34d-3910c2db2bd3\n4c84670e-4484-4bd7-acf8-e5c33778ac1d\n2f952249-7b67-4421-8452-2587ef651f4b\nb6780657-bf74-4043-b0f4-272ea0c0ed4b\n32952598-3b00-4b21-893a-d1712d8f9299\nd5a1463c-d013-40fa-82f6-60e7c0d9986f\na3c066ac-33eb-41c7-bee2-9ce509e34886\n462f5517-21b4-4820-886f-670546e0ac74\n276f031d-d0f0-4c13-8c76-1128d0b63974\n1686ef2b-2167-43d8-a119-b562cfa585c4\n9b1fcbca-c57c-40d7-95b0-564a8fdb766d\nf2f99a5b-1857-4cb4-a618-2420e55e64a4\n8b8f9e2f-f48a-40ec-a538-44a9c86f7c86\n16ff900f-9b58-41f9-ae5d-eb9801038905\n27062913-9e52-4475-8572-9534b6df5842\neec4e290-cee7-4e8e-bc26-a18ac7ef146f\nc2503e94-6281-4f97-90d6-20aef07e8765\nd121a799-c991-47da-8d44-89b5b3eac002\n25ea9a3a-dd17-4ca0-9aab-ab8f845708cb\n4ab2a43f-f038-4bf8-aec2-a5fd97686cdf\n66f0b8dd-28b1-40a6-a68a-3fb5faa61f5d\nffff0782-42ae-45e1-bd59-9da394b11d08\nace243c8-9d19-42f1-962a-286485f4170a\nb8ae8e84-a463-47c4-b1ae-369201e9e098\n6d2aef1c-90cc-43fa-8cf4-3a97d7ee0e51\nd4e2f8f7-f165-4a66-8e1f-1300a343b5f3\n6ef8f556-1bf9-4120-8477-670d21baa11d\n45f960d0-6374-41ac-b371-49994dd712cb\nb9163ab0-61e7-4c2b-b850-76ff644132a9\n1389a745-cc6e-4032-be9b-30b29c518417\n2d4346fa-f96b-4244-8028-07df6a53b9b2\neb0e9511-520e-4428-8bf3-8dd5c34a7e29\n0f7643de-a85f-469a-b8d7-d3800caa6a7f\nbe25a59f-087a-428e-845e-d049089600b9\n7fbec608-c830-4e68-9bd3-f43d54d6ee8e\n04a49b74-e98a-4860-a806-caa4b0a4a01c\n3c907f46-be82-4df7-a871-d3c214c3304e\n123a6d3d-ce8e-4954-8d74-e9d5ceaaee3f\n7f19475a-7084-4930-aa09-2ff6f999a31d\n70ebb261-f6a7-4c62-ba3c-cad4c46cb76e\n12533827-deee-4496-9c4e-ff9864ee4793\n8d4785c1-043b-4e33-8825-8daa7fc042c1\n6bfe1aab-bae2-41ec-b156-3304a1a622a8\n830983fd-502b-40e7-8bf3-2602c0ba7b74\n16b6a082-5149-46c8-a603-6ac920d595d0\nfffb2774-e4aa-4756-ba57-a5d7070363da\n212f9e0f-6469-4ff4-8d2e-6d716c270624\n3be8659c-be22-4042-92ed-9c3587fd864e\n0473502c-a3e4-4ce1-ba6f-b3da351fc6b4\n63b9f355-4134-46ed-a6ae-232bfee7133e\n3421e247-7de7-4953-8f6b-047ddd7564d3\n78989981-4f96-44cb-976a-81649e6289a1\n12373322-0a8f-4658-9776-87f37b838b35\n2e8fb6d7-8531-43f5-84e1-cb9504e6970f\n6b2f1421-d585-48ab-9ea0-ce71a668edd1\n254e53bd-7dd8-4e2e-b447-8d94a8a615c0\na7fd6b94-c3af-439f-9b07-af7279a4f77b\ncea5a353-9b3b-46c9-b144-8ae371ca8acc\n4a60c0f8-60fb-42b4-a4aa-c14dfd2fa6e1\ne6763663-8e74-4e9a-a1cb-29e6ea5c2ca6\n5399e81c-b0bb-4167-9efa-b4cab6cf6472\na489564c-e4cc-41dd-83c9-6a203abf1742\n186acd54-8d27-43e8-b54e-8c1597cace77\n9f5d06c4-915b-4309-aa24-42a9c3584991\ne174671e-a3d8-4659-a2bb-e49ff92cbef3\n0262656d-c61a-4595-bb78-311b963dde4d\n045bc470-111e-45d3-9db6-568148c5f4d1\n52f7859a-f76b-43e7-8df6-94864d794988\ne03afafa-96d8-4a08-886c-db054857b787\n7c2cfad7-530a-4c49-b9b1-a0b98e7403e6\n9334e161-b232-4f06-b361-1f54b1b41129\n3619f40a-ae3b-402f-b75a-b87e8ede24ad\n04e1c0e1-ce24-4e69-ad5c-1230b922d59e\n08e0e97e-523d-4d26-a970-308eac567713\n2d575610-40d7-4abd-aab9-84158800a2c2\n376c515d-a472-40f2-876c-088b32d99895\n329d3a17-cc2f-4cd6-aaff-561b181e7512\ne49fbb67-83ba-4628-8a33-1f0ab46d4a00\n5ebc3a3b-5766-4a2f-aacc-3b98475e324a\n00cabfd6-e5d9-4385-800d-b835d81fa26a\n78a19ebc-3d20-468f-a3f2-93584ed4925f\n8b0a3bc2-8718-4b32-ba0c-3467d3130923\n25e50a1e-6c54-4741-8c04-55f4bcdcb6bd\nb0fc206f-76e5-4209-8afa-b1e49d07624a\n3c4d5d06-270c-4e88-af8b-141509786748\n6508c52a-bf27-4374-ab6d-4a749a79df54\n50fe2d6a-1de5-4f5d-92ad-363b32c32a99\n6ab83582-cca1-46cf-80d1-24643f2071f1\n135975c5-5911-496f-8f80-42620d42792a\nf5c0eed8-539c-4eee-9562-2431dae51484\na9c94926-22f6-4e34-9d30-2607d4b05f0f\nf0eadbf6-bf51-4a59-bc61-1fa84802a5dc\n54e2bae1-ef70-4aec-92b4-b283a27ffe59\n781a644b-f799-4090-b6e0-7ded2a096f00\na2817732-bc95-46d5-b9aa-f3cb8903fd35\na258ece3-6936-4923-b349-5dd7713ebdcd\n18642c7d-746e-480e-8fc5-3f09ef9bfbf9\nc3e97126-22d1-4f03-9219-8ef63be2648d\nca7f7e04-15d2-4f49-8a38-ec8f2ead725e\n549f274c-b33e-4572-b657-0231aaf3dc2c\nb44ca086-98d0-4848-bc28-1dc63525e5fb\n66267e01-75f3-4498-8dff-95bf82ee91c8\na9095141-6eea-4b62-bd24-c5c650f1bc26\nf8fd3ab3-452d-41a2-87a1-4e289c1f5c5f\naa98bd00-8161-49af-af7a-a6f12d8c14ec\n63f56d1a-812e-4dc4-a19b-317640a564c2\n20fc9354-094a-4a10-821e-2062a535bc0e\n021f03af-d922-4cef-a83f-02bd8857fe02\n0523f4c5-eb8c-4631-9bd0-a8b641afc92d\nf2e146e7-b051-403e-a1f8-d8b150db370b\nc5ed388c-1155-42de-95be-5fd736f833a7\nc004a7a8-a375-4af1-bb6d-b5ecd40d81aa\nbf4430fb-8ead-4375-987c-110f40aa0223\n18fa8014-ad68-4787-8bdf-cfde9436d3d2\nd936dbba-3b10-42e2-8f4c-724d6d2088b5\n23e45317-d444-4dba-94e9-4ecd8afc1a72\nff304e12-a7f5-4478-8638-b05b3b88240f\nc031549c-efd1-4eda-917c-5fa4d2dfb72a\nfc5694a1-4b71-4d3f-b304-00f9cb7ded97\nd3a489b4-01b9-42e4-98a9-be7d8a8e6d59\n3a2a66d0-4fb1-4c6f-8857-913017bb615c\n3ac0f785-ff62-4bb2-a0c8-2259cd596635\n3d55fbee-268d-434b-a5b4-de74b7e7cfca\ne9c7ab84-b700-4499-b79c-665853e7c14c\n581181b8-8d10-45ba-92d5-2be4dee65790\n6571dfe0-5834-4a9e-8801-5b93f986e191\n02d67449-72b9-4eaf-a5c6-2b3a570e2a49\n2d0c9f10-7c25-404d-8985-23bb017d2c6f\ne625a8a1-58e3-4011-9f64-3a5468ac83f2\n0b325464-9aab-465a-82af-e9a59f154790\n0d918902-c3dd-475f-867b-1c79421c2aaf\neb5076ef-476e-403e-96b6-b7cb389be9b7\nbbea68c8-e405-46dd-b520-c893548e91e6\n7eb5dab5-6a13-497b-a20d-d61a1d58d356\n8052e569-a7fb-4a5b-9a98-a2d2255f7a6e\n55abb32e-920e-47b2-8097-31c1f13390f5\n478206c7-2d0a-48c8-9ec4-c8027d7e1c84\ndb725219-df01-4015-a620-ad06bed64332\ne418828f-757a-4906-b647-22432b1254f4\n89971447-bf6b-4266-ac03-3cc09fc2c12a\n9d3fc72f-d483-4e9f-a5d3-9d16ccaddc17\n5e6d24e9-3658-4e2e-88a0-e45773449921\n4bb290f6-4241-4e9c-adb3-1eb4bea71a56\n3b419800-b50c-4985-8e92-ad6a4a6c2ceb\ne60f2c29-dfa8-4c2f-a714-a3baa0068ed0\n11c1e4b1-6111-4e38-be77-f7f945e6e741\n6fb273f4-0b50-4f01-8e35-bb52b918ef9d\n463e0e0c-7a5e-48a3-8ef7-7708992c5ce0\n9b89f54a-9d21-4afe-90e0-7fc5b39e5ba3\n2c199206-1c40-4118-a6f3-dc06b3508781\n43a6805d-fc46-44fc-91bf-61b63695c8b4\n36956dea-cf4a-4e27-845c-29d25e1c891d\n5a428220-8384-4f0c-8b21-99f5a0657679\ne68435de-ee6b-490e-8aa9-990c26d3ca7a\ne74d14be-673e-4715-9f2f-8eccbf5bb9f0\nfcfbcab8-696f-4569-8542-07c1355484c7\n2025b345-5448-42c7-b03f-3c0661cd9c99\n4b3d99d8-6b9f-4307-9489-e482a74a74f1\n1c02d7bc-6ecb-44f7-a06d-0f6c2f2db41e\n8bd2d476-165c-4766-834b-8ca32d32a4e2\neabc0eb0-436c-44c8-a83b-4f652b931654\n9aa9a5ee-8475-411f-a527-417364a4c695\nf52dd2ee-72c6-4bbd-8d21-63c7df9b49a4\nf182c666-e21d-40ce-a008-ce119bf32e30\n18dbf869-ed22-4863-82b1-183e99de3df0\ne98f8e01-6fce-425d-a925-1c31b27ea9f8\nc254ef6d-dfc5-4042-bdd1-8c560bdea917\na7826923-c254-45cc-bfff-8fd905124447\nc52aa944-f2e6-45f8-8616-f4a64b2b6719\nd2084923-927d-4d8b-97fd-154b657c4082\n2c00c284-358b-4412-aab6-330bf6cfce4c\n4ca0f1e3-220b-4e4a-a55f-29fd59b00aec\nd30fb332-fd22-47b6-920d-2c0a4bda584d\n999f31cf-1ea5-4af1-9db5-4d4ddb97ff3d\na33c75c4-eacc-43e2-bd2d-9cb20b1bf1e3\nf0318dd9-64fa-447f-8b76-97db43a9a692\nb4f3dd6a-e4d3-4b00-9e53-561cefd53892\n533b5d36-06ca-4d1e-b052-f8d4d0c5d064\n1fdaa4ae-2183-42fa-a885-dc6e661a21f9\na407c337-4865-488d-a1d7-58bbc71f1203\n698eebcd-7936-48fa-8852-01d8528d6ba1\n31e6b39b-4cae-4d94-8aa4-34f57d684508\n4ff9b8d0-cada-4ab0-80f4-4ee54fbc8c3e\n381c0df1-8af5-4acb-a439-ba47093034a7\n3bee106f-16ff-4090-8553-b4a322dec43c\neadd38de-08ee-4ed3-a221-c88f334e24f1\nb4b4a7bc-05d6-4223-a91b-2f85c762a2bb\n6200c793-8b9a-45a2-843e-1b755dca6078\n9205bfb8-bf30-4f83-b62e-408f9515d87e\naa5a64ba-a4b2-4e5d-8545-1f2bf8a5af63\n0ed64fc6-e9d2-4b1d-9e35-8a6c9b3ccef6\n21176bcc-6d75-4415-a6b0-1d97ab4d5eb4\n10e8f00d-3f1e-4495-a9a9-026cb3e3600e\nffd5d536-92c5-4de4-81e0-72cff1e7e97a\n07629485-58f7-41c5-b07f-f2304a42aa9a\n29bd46dd-7028-44ab-aa51-3a7f4e9f1181\n5dcc1295-da78-47de-b116-5141e410f807\n8a0251a2-4881-4e2c-93f0-896966d4a32d\nc5ec10e3-0006-4e09-a3fd-aeb81b74926e\ne5bafd0d-9b0e-4f2d-b481-fbb6e8676512\ne336ec08-5c3b-45b5-b1d9-dd3b1d63039c\n6dabdf44-5281-43ce-9e50-8cfff65280d7\n05037779-1060-4a6a-9097-6483b902e56e\nd12cd2cc-9b68-415a-97f8-375eac7ad791\ne70757aa-feae-453b-aa05-c8841093d7e0\nb5a45440-5cd2-4de0-96f6-274aa9c1286a\n889d7d40-8f6c-4a55-80fb-a32d993dac1f\n6d4c56c8-fd20-4035-b087-434b1bba8ce5\n8c2e15ea-1ac9-4e75-8f0f-e2656dbf321e\n8f4b2f95-009e-4463-ad5b-b1f28497417b\n3420c586-ba3f-4837-80a2-7ce98a8eb663\n210e3d2c-6341-46a2-960b-6c32c421bfa9\n58757a42-5f4a-4220-aa19-44bb62428ac3\n41f440ed-7bcb-451a-a857-c8830a43e6e2\nfd4a4c91-7c84-4607-a013-d38a4694bbcb\n8523981d-bc6a-4911-96ec-81f9c0e307bb\n084760f6-d686-4417-a241-7cb143d50379\ncbd42fc6-ef4b-4d74-9ce5-9b508eaa919d\n15042dcd-4fdd-41fc-b8ea-2a10bdeb8cb5\n4ba08093-ae15-4389-b28e-58a7b09fad01\n72356d89-7b9f-4131-ae7c-1fdc8741b8c7\nb5b33c60-cdc7-4fe8-a4f6-2de66a72b08c\n77b36745-8698-4384-b76a-e5d3c201fa43\n3652fea4-18f0-48ba-b882-1d0783a16ed6\nf1968b5d-23e9-4026-b62f-09bb159d4ce1\nec951c1c-b704-43ee-a239-524749f4ac9e\n79550146-7053-4378-b6f0-ef3496edc93f\nb5f1004e-ea8d-44d4-ab96-d760f4cd6a8b\n407dd70c-7664-4160-ac2f-cdd741f56ad9\nbee2e699-8c96-4fde-b3cb-c42fd939de0c\nfbeb2bca-aff1-4755-b448-b8bb5b4b4c2c\n76f28996-3b3c-4da9-a3d3-ff82bf4d0277\nb96d957e-04e3-48ea-bc71-c2a4dab23005\na2bb6681-b0b5-449a-bf9f-5c37854a088a\n53e0ccb4-61c5-4357-b763-79e434b58998\nccdb2c98-05e9-48e7-a8fe-568e21317a63\n21ca3b3b-6fb4-4989-a1dc-a78162f0df98\n9c08457b-db15-414d-9346-3838b81c5a3f\n1d910579-e758-418b-8b9c-0ba68bf61612\n70848429-0069-45a1-8e38-e144141af0c2\na509160e-8dbd-418e-8ddf-39e2c68373e1\n1b25aec9-b1e7-4bc8-8140-e747fe24145a\n6019f5bd-9504-4764-a22c-785f80db39b6\n09985a08-2ec4-415b-921d-ede5e0cae68c\n5ee9cb3c-d2e6-4d14-979c-5910fd9e4fa1\nae96ec19-ef71-4d4a-b902-8ee682396881\n1fb2a2a7-36eb-46cc-9b5d-77d5c924c595\na1590580-c98b-4a5b-9a9c-73fa5d8d51ad\nf3bd2374-b257-42ef-bba3-ee21f14d9b8e\n21efff90-b219-4f6b-a539-fe2daf5d7596\n51e1e404-9f12-47d4-958d-d96d208c9197\n05f53bff-e720-49c4-bf71-414d9e1bf99c\nbbe29350-3bc7-4083-8a65-f652cbba0872\n853d3697-e755-46bb-83e3-1176a3447245\nb1056b64-071d-436f-9752-c1f57fa77558\nbe6a3cc2-d244-47dd-a285-9f4859f40f93\n1009f89a-8d7c-4219-abb3-f5669193f18a\na0619077-c53b-4a57-b115-f22108253946\nc58c8e9e-76bc-4b42-aa5e-dc8dbe538ad3\n5d1fa3a5-28af-494f-b61d-94733863415a\n38c9bbf5-f396-4752-bdd4-54afa0e5bace\n17177030-abd9-4128-aefb-67f0fe4b90c5\nd32fc89e-239f-484f-96eb-cd05c536d03a\n7761f764-c719-4722-9e65-227e53a1899a\n433c8104-cf06-46eb-b01f-153d7ce857e9\n25cf3eca-08e8-40ae-8b5e-7edc03483459\n16ee416a-00b8-4804-a3cd-1e242ea8a353\n1eaac0ca-cf4c-4356-96da-7aa76be1c6a7\n2bee813c-c941-4dc7-ad9f-f59b5071d7ec\n59d0534d-33ac-446b-a105-16888e59811d\n3deef7f4-f106-4bbf-83aa-dd936bc9c058\ndeaf3acc-526e-4d71-9f3e-619c2d4a9a7c\nda5598c0-dc16-409d-b363-8c3a2e1c8949\n88a3a70f-a659-408b-9e06-4d5653209ef2\n4f27317c-0d4d-46c3-bfea-33d9aac6777f\n58b65d06-762b-47c1-a46f-677dd3da2012\n9cfc95ad-3fb7-4365-8308-0153f140e60e\n5415db57-1fe6-4ed2-a16b-8f77f4d01e54\n99be8a07-05e5-4ca2-82ed-910ace78e74e\ncc1423ef-1b25-461f-8bd4-77cef9b740bd\n3450c7ad-471a-4e65-9239-a1efdba74ac4\n41a97a6d-4d1f-4b06-bd2c-ddcabe51c408\n3b4084f6-ff60-4960-b2fe-46e534bb1b06\nb5a72d3e-23dd-4fb1-932c-e5cc74c065cc\n56b20c8e-3885-497d-a3cf-f5197781258b\nc2d8a7ea-005e-4824-96e9-d48e499b29c3\nb80a061f-cc8b-4769-9d23-a2d5e4e94700\nc09cd9da-cfc8-43ef-9a62-e5f13fba124f\n8fc1992d-db98-44d8-abf0-5ce370071244\n82920dee-ab9d-4709-8cda-2a2921e12d5d\n6f8f6e33-80e2-483a-94cb-925943f58aef\na2e4e542-d9cf-42d4-ad4c-81cf63fab2c8\n12088172-a6a6-4d1f-9ae4-d98d20f4c1ce\n3ce1ab99-777d-4947-93e6-f0a5ca98c4ef\n9b295593-810a-4451-a3a4-752a5a338bc2\n3aa5a0ba-0208-423f-bea5-f95eca39edf2\nf5862065-03f6-41aa-ae08-8c429048e7a1\na1ae58c7-3fa3-4650-b926-30eba99f1129\n576e872d-aa29-4103-8cc1-de6dd1be9211\n2b0475b2-f275-4bfc-9215-ca852f7601a8\n646c4a61-cae6-4a25-a477-9415b15d9188\n8983fbec-9d3a-44f4-92b5-f98f4525e47c\nb9bdf19e-4d1f-49c8-8e0a-cb04776ac970\nb566f118-f338-44fe-bde3-83b8bb985a88\nac2db0af-d9fa-4c6a-88f6-5d12b34f939e\na06a7d50-68e8-45a5-88f2-52d10f947da4\n9e5488d4-4a53-47dc-800b-bcf8d79ffa71\n76a0b09c-11ab-4c22-92f4-650f077de924\n3c844e17-efb6-4eec-91bf-b126717ee302\ne396a943-2f86-4a69-8d70-34c9fcf0feb3\na7ef628e-94e5-4559-a1aa-74c79b7524a4\n7e6eb9ec-5105-4413-92cb-1913171b94da\na8c4942c-26be-4682-a4bc-8329fd1ff5ac\n5ae6f70d-e99b-47d7-8919-a430d368da54\n5f8a78dd-fa50-4347-be22-624c465e2bdd\n293ed31d-3300-4178-b473-342569a27e57\nb427fdba-4e61-4d38-b355-1972c9ac670e\n36eaa080-5acd-46e6-bec1-bd2ff569bd9b\nde78268c-a9df-4a4b-b1ed-c3a1d6fbb24a\nab2d9ae8-5658-4202-b79a-5d2a25d89018\n5dc1bbc4-86a9-48f6-ac41-9668b362d749\n412061b1-f50d-4ea0-8810-e9979196311e\n0a702c11-78a3-4156-a963-c80d538700d2\n6565d269-ceb9-4e95-b087-f7b7edacc9e2\n2eb6a1b4-3fbf-4b13-8e17-cbdf2cffe957\n68a9ff80-3e76-48ea-8a0f-52da62fc4295\n9f8b56a0-5be8-4212-ad0e-63ef96de165d\n16270c42-005d-420a-bd06-2735b6d132fb\nf9053f37-b40b-4aec-941c-76eafbf857b5\n6e298864-2e08-4877-9c49-50a2dd40a35a\n2d1ad9eb-010a-4f19-b560-3627eea95c57\n25e9ae45-fda8-4b39-8645-51e3d691a88b\n922ed1e6-27de-40c8-bae7-07604a0cbde6\n98c8d56a-e73d-4801-9394-2c007eae746f\nb2562f6a-0eb5-4e7b-9f1a-e80cd608d2e6\n4794fe6b-3073-410c-a899-4d2bffe379dc\n1a6251d4-4bac-4286-9e06-5c74281cc4e1\nba999de3-bb6c-4153-b34a-ca67abe582ee\n4eee6870-d658-463b-acfd-eb3720a8133d\n12d36fbb-b99f-4652-806b-81d2d3c557f5\necc977ae-e141-4288-a516-d0396ab4beec\n9363f07e-ba02-4580-8327-ad9cd2faf4a2\nac56f552-cc17-4028-b81e-d1364c8a8c97\n5791b653-27d5-4d69-8f0c-584f9d67cd0e\n82483572-e5ce-435d-b138-edd6969e8a90\n808486b7-9a27-4164-b011-323b5bfa808a\nd2227958-6202-4bc3-ba7e-3042b2c08ea2\n9061c1df-5ea7-4901-92d0-2ddc6045af05\nd82b2f38-6648-4e04-a7de-d6230a0e2375\n76ca7e63-75ba-4678-b972-75aadccc83e3\nd56492fe-d9c0-4e1a-a0ba-78e4cbdcab7a\n54f6bbf9-3142-41c7-8d90-cd89dac1432e\n5929b1df-e791-4b39-8db3-7237f0c2a475\n72cbc850-dadd-4574-905d-b9f2bef8ae73\n187e67f5-eaec-41c4-80fa-7ac988f30a9e\naf922bd0-93b5-4caa-b7a6-912816987c75\n02f52e36-39d6-4a63-84af-49d3bb5796f7\nf1390d32-777d-4cef-9a53-4be6fcd25af5\n4caf967c-5a95-4760-b1c3-e67ff9415179\na7f48f55-3a1c-4e38-bafe-290a3c891f3f\na15fa498-711b-4125-9a4d-573eac98d673\n70c9e442-91ae-4aa1-9e17-1f0aeac30ca0\ncdce5faf-dfb4-4fae-a998-3fee8575e315\n18d5f0e6-c687-4ef2-8a0c-8d73419c4604\ncffffce2-2b53-4cd0-9cc2-d114e0344238\n3069c7ab-1430-4123-8c6e-65bde2bbf511\n64834a8b-d7e8-41a8-81a4-0d3282ad0cfb\nf9ea6b1d-bda4-40df-8f78-b783959e024d\n4aac9bd1-64f1-4eb2-8228-f7a9c20bead3\n049371a9-b1a5-45e5-a6ea-f1df0c43c0af\nadb962d8-5795-4c22-8943-564e77392a04\n800f9d4d-8dae-48dc-a97c-33685268fa5d\n06f3d09a-5be8-48be-bcd3-dd96221e1a46\nae84e063-939f-4172-b904-5cd16e570567\n922ab8d1-2093-467f-988b-2548063a0c1a\nbf4c413e-f986-4c60-820e-889494dc1050\n4a182a79-b85c-4069-954b-be871132c33d\n775c9db5-a997-4611-ae6a-4cc576a2ef3e\n550fc5ed-e0b0-451e-b3e2-8c7c71a34cba\n9d74ad43-fe87-47fa-b7e3-bb4ca9095583\nc12cf2c8-e422-4f7e-8d24-8aa29ad6d0b9\nbca9fb1e-8a51-4961-bdf6-294faf6da5d5\nd6117272-9295-4cc4-884c-f66c60f4fb61\nae268d81-7f14-4c07-8b2d-3969da0197f3\nc7d7cadb-70c2-4c34-8e72-d48179aaa6bb\nb5a5c966-86e6-4765-9b8f-55b6501c05fd\n032a4457-1571-4dbb-b33e-dfdd26b74bcf\ne96f917d-a29c-4ac6-9368-5d2cd2c754f1\nc8a420f7-985a-422d-ad9b-7ddae2d5756c\nbb09b476-5b54-43f9-b6c0-e5389a57f195\nf6807ec5-0a67-40a8-a7c9-1c15d5cd5d19\n953b49f4-af13-4cd1-b485-6a74596055ac\n083226cc-f6cc-4aee-ba49-f5db01f4d300\nccd91fb9-61e4-4b84-a53a-7fa7968c0c4b\na51d5dd9-f2fa-4956-9901-2107afd7e4d4\n13a366bf-eb25-4d7b-b221-6223e5d5b271\n66bd1096-44b7-4346-a776-ef4c773825ae\ne8fe0f22-af08-4190-aac5-363191e6fe0b\ne2924bd9-ef33-4713-9a64-c92a60e7c3d2\n0071f39f-8ea4-4355-8023-154fff3c7d68\nc8a97385-6392-4e40-b8c5-ad2aa3681700\n3033ade2-628b-49dc-a65b-36d2584bd6a8\na391b78c-05bd-4c16-a949-64979e885c49\n8e238ffa-71c7-49bf-b67b-1f406b8b3d2e\n8a113524-34e9-4656-94de-6df7e5748fe2\nd0182589-dd84-405b-b934-cf9499433591\nb3486082-e8bf-41b1-9d10-84d97ffb1428\n1d11cc32-fcda-41fe-8999-a8df38c1c576\nc95f5385-f9bc-45bb-a0eb-23698cc27442\nb4c36cdb-ba57-41df-818d-193fc2bccb2a\nd4a29941-472b-4e85-8b86-9cc51d9434d3\ncdc3ea2c-82f2-43c4-825c-109a7e1fa6cb\n49ae1947-f8c4-4546-97d6-4e0a64ba8532\n56b37b33-e6ca-478a-8dd4-39abd5d20393\n31558ab0-bafc-46dd-9944-5e099eb4e207\n83660ce7-6842-44fd-a3f4-5391bfc2bae5\n719f4eb2-afb7-4909-b5c6-ad944d46e4aa\nfc3ae763-eee6-4edb-9358-e25336872d67\nb9a471be-4d3f-4ff5-ab2e-5f00529bb94e\nfd42045c-493c-441b-be30-74b40eb1e309\n6f437d60-7c39-477b-946f-ae68c935bd40\n68155aec-e2e1-4cc8-aa7a-d71c8e0a3f8c\nce864e27-e81f-43c3-a47c-eeef70037651\n1976e463-16c1-4268-9e70-d3a98c2fb68d\n98bce622-7361-4980-ad8f-5ce817166a46\nd2937db6-9289-4d0c-acdc-3c29fe73b219\nfbf8c0c7-faf0-4fc0-a0b0-9dbe46926d45\n035a5745-d370-4a30-9501-cc4e2aaf8bc9\n5c204c5a-035e-485d-8590-172d763892a6\nee339c09-1573-4271-b6fe-a70d0e3e55c0\n22f3e68a-a980-4bb3-940b-991ed07c94a3\nbc675fe2-1ad0-44f2-b447-5f740f974707\n04623ce7-75a1-41e5-8444-974a8e11de54\ndabb4e8f-06ba-450b-b6f7-b2213a883ed6\na221350b-a876-4956-971e-12323274c572\n3dc666c5-2756-4a4f-afed-aaba578a1519\nbd979eaa-e164-4598-85b9-629b83380aea\n83d9553c-7ab8-4bd8-8bc2-76e8ddb0d0d3\nf0151084-0363-4ce2-af5b-bb0cea784895\na85395d5-12bc-4a2b-924f-ed727133d2dd\n97a78a35-08df-4ad5-9616-375f5c08945f\n48f14f89-2fd5-40ff-bf8d-d398d1748df0\nf3266aba-db6e-4eaa-8c27-8ea5f77ad364\ndda11bed-592c-4792-a1f7-3d7510491c9b\n409f8762-afae-4762-a542-f3f16f7199e0\n0766e50d-ff17-42f4-9fd5-14b38fcc9949\n9299f5fd-3160-4f88-a176-34ee52c152d1\n3db0f413-1c75-4eab-8d0a-81c3069e73be\n2e97eb79-c267-443b-9622-8f4fd8613e72\nf89f152d-8e96-43e7-813c-af96c8ab49d3\nacaf70ce-2f3f-42dd-8502-5f5086983f8d\n7a98cbd1-4c68-41e7-b815-883fe55df164\n44554d40-8b18-42dc-aaa0-dd6c358b4cd7\n2cc05b95-3d2b-40c8-a31b-825a22d26a71\nea9f37ab-655d-4520-8b4b-abaa53af9251\n08ef3bac-00b8-47e6-afcc-77c9d725fe6a\n768669a5-3f5e-4ef4-ab61-cfde1096d7b9\n9e3b5dcb-625c-4284-9f0f-bf87c8d9d21f\n7cbfdf9b-e7e2-4f5e-853d-8e09641139cf\ndaf1ea2a-fefc-4c3a-9da8-0a2024bceca7\n0452e76d-b7ff-4baa-905f-09d9fc815818\n6f95c49c-c350-4c4f-b0d8-5f5c08f28cc5\nccee8753-f556-4f35-b441-2e6b4928f1c9\n74b509c1-c96d-4d5a-8584-7b6703b0a36f\n40d6eb34-784e-44a2-9611-3fb55ef3965f\ne750143c-2179-4c06-9717-153fd5b9c2aa\n2067bd40-9fc7-4dab-9e99-4592ada51160\n1da1a341-716d-43fb-b161-05001880555b\nac3874d3-7410-4712-8875-85adf6ceee95\nbf04847c-e5f6-46ba-b8fb-e3ea61ef146c\n58acb014-27a9-4080-a9a7-08bd04300b6e\nb42d5449-57d7-4b4e-9f11-c31f878758db\n807c2b8f-528d-4ddf-a7ab-0e755d44b38f\n887c1f50-0585-4b01-8f3b-eae5ef9b887d\n4bc99438-c8cf-4e37-9ef0-45d58ead34fc\n3e337e1e-9f6e-42da-bf28-41d85224709e\n86288aaf-70d9-4251-895b-519083a198bf\nb01ca497-441d-4143-a579-b6b5f1a1fbed\n3408bead-e103-4eb1-be15-65202a9dfee3\neb1c33e8-d70c-4ccd-b731-2a5f0d52231c\n93fef5b1-74c7-4b85-998a-05a65d94863a\n7e289e81-a9ed-40ce-bf71-e9fcd9f6ce34\ne44b197a-f99a-4f0d-a41a-de3881ec7f94\n1bd8b634-7c4c-4a00-b5e6-d2addcbac384\nc30432c1-4f24-4bbb-86fd-658926312c4a\n08da28c7-99a1-497d-99c4-cf7d0df58fa3\n32f4456c-0aad-4a08-8842-23a72b0cf9e5\n90dc203e-3b8a-492e-a0d9-276e323aeaf3\n396f70ac-1a90-4152-9133-2934af3b8e3c\nfdeacff2-a4b9-4390-b71a-303e6eed8a80\n711d8a75-9d68-469e-b6a8-66e33a49864d\ne78b05f8-acd1-48a1-8a92-44ee4594be27\nd4e20a2d-a742-4f98-99e2-540589446454\n5110a26d-2d17-416f-8154-74aac1b88b0f\n1377b382-b2ae-4440-ba27-28ec72957650\nd6b66309-1a5d-45bd-aa4b-999dbf08799f\nbfcf5d12-e5c6-41ac-852d-c17ae7f15b10\nf75b5979-815d-48e8-a18c-5f9e606e4cfe\n8a94695e-12b7-4d6b-85f1-b3f14a7ed008\n85b0391f-a7d7-4312-9e70-ebd18aff9275\n69c5d1e1-4e97-4095-8a1f-a91a80e7c63c\n33f3c897-535d-461b-8acb-53159935284d\nf1f475c0-0f7e-4bd1-8c0d-31bea2f407e5\ne0548c46-f493-46e4-bc97-7a31d275df8a\n3bcd48b9-83c1-4798-b823-67372aa3d724\n867f7a9b-2cc1-4185-af3c-f89da81467d2\n3f055600-f87f-4c0d-bff1-5c6c58d3ef7f\n85f9f198-6bae-4c57-a61d-ee31be8dcec3\nfa0fac0f-974d-47bc-a1ff-a51c3621cc37\n6b38bdb9-c90a-41e0-9237-5be8402ef30f\nf807ba92-4d14-4704-ae8b-a579d2a3a8ac\n04e742e4-0b80-4b41-9a08-624051ab5536\n6eb1bed9-70fe-480f-aac2-7af742735871\n9b6f8128-8a15-4d58-b486-cf149993d5c2\n0eabf903-c7a7-4885-8ffe-0861df76d7f8\n41d48d60-7127-4857-8dd8-1d93d7392c11\n3919277b-e33f-4510-b07c-e371f1c74df9\n11b3e8a1-4412-42e4-a82c-af75987d2c4d\n661af507-beab-4d34-9e3e-afeb8ec2d1da\na3b18b1d-833d-4981-b17e-6cb545c87866\nbb433af8-82b6-4aa8-8df7-1c60e89955c7\nd176c101-5bd2-4f14-bf22-1ef8bf298a8d\n802b8d70-8c6c-45cc-b630-3bc975ff0d71\n4bc8cbbf-56b7-4cf8-9d0a-212b6c6b9ea9\nd80644b5-cf91-4903-b99d-3591e1d4ff14\na7cb3711-8b6f-4685-b37f-e95cf7d70384\n039663ad-228b-48ad-bfdf-39a7274eb61f\ndee4b1de-aaf8-45e5-a653-1e9e90cd69e8\n5b5b7700-5466-472a-b24d-8755515bb3c0\nd95cbe96-41ac-49e6-9216-aee6ecb32b60\n10d92429-12c0-42c2-9ffc-338b569b33b7\n48c17042-a454-4a47-8016-52c2440258cb\nfb00e1ef-0ab0-4a0c-93cb-c6052d066e2f\n66d66968-6ada-405b-bb9f-4100549f5d20\nac35a369-3f24-47ca-bcad-71b1503db3d1\na4ebf10c-5cd4-49f5-a790-ecefd311556a\n6ccc5fce-409f-4644-a041-d263716cffbf\nc4d31642-5443-4c84-8f3a-eab7cf635898\ndca3b797-caef-4520-a660-05caa0a96228\n378a8fb4-643a-476c-8371-05137146fcb5\na0ff45f1-824c-47d1-9404-2168b7aa9a59\na9239a5c-be05-41bc-9c92-6a3909051c92\n662179b2-3e72-4601-b16e-82e335576fd3\n60c009bc-8fad-4bf7-8d8a-54ef35ed3a19\n572fd5d6-2998-4dc0-ad62-cfc473bed814\n39c3686e-0b07-49da-9c3f-8071f116eb84\n73848d90-3565-4429-ac2a-1464f0eac65a\n65998ca1-62e8-4bd6-b6b5-2fc1eaae51c4\n10a40082-6426-43cb-9980-67787f6bef92\n2d121c16-aa46-4d7b-9d09-7d70e8d05ff1\n4795ddf6-da81-450d-94a6-372a8d26a9f8\nc96cb1a4-d183-412e-afbc-bf3bdc7e9a2a\nf2ae7a61-7123-43ea-b5f9-9557995d9ee1\naa21412a-b514-43a3-a79f-2a033508cdd0\nabd06056-1c21-4993-94d8-9d17691270d9\nd1fa8119-669e-405e-8c52-9632108a0542\nc44d08ba-b1b3-4d7a-aaf6-716e5c343e66\n8c07d261-55ee-41b5-87fb-a5d9bb022e74\nd73a4eac-9ef0-4d15-80df-751c10dfed5e\nc45be77d-f384-4926-b234-20d274188a82\nc27e88e0-d022-4ff9-bf59-3f9dd4050107\n0fa14887-b088-4840-9b0c-b68077be5b9a\n942eb939-9b2d-480c-8a8c-4c88f7b7315d\n5187b863-9386-49c0-811e-036eca99bbd8\n62121d80-4490-4ab6-9527-8fffef544c9e\n963de5e4-bbd4-4f00-bf82-6f1d0bf568e0\n4f6f90ed-62a6-4641-85c0-a30b01c832d9\nc13658dd-77f0-4c0f-8c0d-1270905ead99\n12cb7abd-df06-4aa5-8f3d-1b04e567ef89\na519911c-a07e-4740-b046-fbaf313ec8a4\n64d0f9f2-cc91-4914-a9ec-004bbba3c468\ne6b673ee-7d06-4137-9ce9-afd8eb4eddf4\n6dd64a42-b1ab-48b5-b08f-71f22d4e1e7d\nf756573a-7310-4cd7-9363-533894b8f5a1\nc9e7a52c-0ac8-46e0-8b02-2b3c23ba329a\ncaf2dfdf-d89d-46af-a552-b10b9e7b5d3b\nd5e937b7-2858-40a3-81ea-9bde664bfc35\n20759c58-595c-4def-bd23-17d24c3118ad\n46cda659-551d-46b1-9c5b-c1cd1783aaec\nfdfeae99-aa3d-4b94-b645-59a35a14511c\n2d302434-cee3-45f4-b33d-f65eb9c92551\n2b4f0b5e-01c0-4f5a-bb34-58fbc61a38ea\n44cc95e9-d1aa-4d55-af5c-ca4c0d845bfd\n4829a181-f6fd-49c5-9362-b40058495a96\n55d45c2a-af5a-40ec-af2f-3e3395662e1c\n1b740f3b-810e-4de0-b4b3-e6ef3d47d5ea\n0393256a-d248-45ef-b578-ac0aa5b4c6b2\nc5c28606-5e50-424c-8393-ccbb0fc81c09\n06de7497-6072-448c-963b-01069924fd1b\nb92795c7-63f4-4073-8d80-136537d64d47\nabcd2ef4-6d51-4b5a-9691-7eaa0e780f39\n069ec099-4551-4f25-aad5-cc5e04c8c62b\n7e4d7311-3c85-479e-9dfd-e3873c0c12f6\n2eb60624-5137-4170-90ba-16cd20e34858\n55197690-9e5e-4a87-a9c1-7bc891db7fea\n117ae775-a092-47b4-9922-dbd6e29c3dfe\ne1619201-6eaf-4fd8-b75c-c82a6b628bde\n42cc7d9e-024f-4e5d-92cc-5e0486aaa6d6\n5083b115-cf30-4fe0-9bf2-22ddd331e66e\n2de10d04-0524-4448-b106-45023b68f44b\n51dc9897-77b0-4a93-a51f-bb9e2e6ab0fd\nf58e9f8b-9a05-4447-8b53-2a0ff211d8c2\ne9fcee3f-a221-4350-93c9-7be2f6470dbb\n08359ae6-a60e-475d-8a88-7e4c91d7bfb5\n835f843d-22af-4f51-b036-5b5bfaa20e38\n20b9ac60-4b09-4eb0-a7a2-34dee1108ab1\n7260f012-5e7a-4eff-9289-a6ca26de11b2\n0b7870f5-ba92-4b8d-9684-2232b5d56a86\n10126fe3-a5de-46de-b528-ea5cbfbd47bb\nf7e09c64-89a3-4581-b44b-d461bc187d1e\n6d3c7677-ea82-4f82-8811-78267608da34\nf69c223e-5b0a-4347-8523-e96f86140fbe\ndfc36467-9a5e-415c-8765-be38eba7a9b7\nac4ed014-7082-48a4-a28d-5ecf9592c3fd\nf98e327b-2e71-4905-9584-a094ea3e0199\n634d06de-f192-44da-9d2c-168852a17e50\nd84246fb-d9b9-4844-9a46-0b7382ca5353\n037bdc63-2a49-4c2b-8865-23d5d6630f1e\n02e56264-1211-49a4-a4b4-b834c9eae49d\nec57a339-580c-41ab-a90b-5783e1e681dc\n25082e03-f49a-48a2-839c-def8b483c315\n585eaed0-ced3-41ce-862f-86324b281df4\naf97e152-3d80-4966-8781-ec9ed54ff2db\na36cea22-99af-40b5-8808-38576fdc970b\n43ceef5f-d331-4083-ab90-b5ac857086fd\n077f2a0b-9b8b-4961-aaca-097dae84eb4b\n894f0342-bb29-455b-a4c9-d1284e09fe79\n681ab23b-e3dd-4d0d-ae06-da3f83a9f196\nbad4057d-ff61-4c12-ad97-c594160a5ad7\nbd2f8a02-280c-4f02-a5b5-d230de5783f6\nb0963ca0-400a-4513-b7cc-a06908183180\n8af704fc-48d4-4ce0-bbb4-96e6936e8fb1\n6dc047e5-37e0-4d0a-a478-dbdc2db483a3\naecde4ec-5f61-4a69-9941-41ddf8dcc518\n02adeff0-e1a0-40da-a06d-02fdfcf73091\n9cae8dc3-49f8-4358-bb49-0d7c983768b6\n9c0fc3a8-9986-4faa-8a5d-bd4105d41f58\n82e3c53f-9f83-4299-a3d4-a862302edb56\n431601f4-5d6c-4269-9097-7411d82298cf\n64b9c6d3-f794-41ec-8ec3-3215bdbd3ab1\na0f68292-cc2b-47a9-bd81-dfcbdd5ebf03\nc5f063a4-dfd1-4196-ab4c-9504d7684bff\n84af75ad-c57e-464c-928e-fd14ec07bc62\nf81c4547-125d-488a-bd8d-7bd63aec87f6\n2fe087bf-4f6b-4251-9454-35099d823454\ndbd1e009-371d-4ed7-acec-b47415451e64\n90d6b782-5284-46d5-8bd0-11bba4a4863d\ne3fde7fc-fb38-455e-91e6-79ff30f21e4c\n6d672aed-d06f-464a-856f-707778fe8c49\n1bd1affa-848e-4521-a449-df454e1521d8\n4a59f16f-8431-49c8-b7c0-a4f0affd5147\nc118570e-216a-45f2-b0f8-99cdc3bbf242\n0568e67c-9a1b-42c5-88ac-9f4b1a16b5bb\n29b29359-9ee6-48ff-bd36-82902be2e02e\n9a4b1ac1-e103-4e20-a63d-3c9cc2384bf7\ncae90ec3-4e7d-47fd-9252-7e159c78913f\n5da629ed-8825-4e7b-95e0-6c8179964eeb\n3a113531-a4ce-480c-bb9b-f54a2f45afa8\n3aabc5bc-e33a-446f-a223-67b540116549\nf10f4dd1-9ca1-4d22-a992-54ae15c93766\n88412232-e5ef-42da-a3e5-ede0eb170940\n1f82245c-ff20-4b50-bd48-1e8b5fd002fa\n8f9b6ccf-91eb-4238-a7dd-ef9200047926\n1e2c5e91-e628-4397-a96a-7a09ec6afa43\n851e53bf-0a3d-48d7-bb54-1518d9e79f2d\n2716c9cd-f828-4721-a642-4a996e67870a\n8267ddac-475f-48aa-a520-34fb952dbc41\n26584e49-c627-4c9a-a1cf-5e4d6e6f8c04\n7f473f22-b33a-409e-800c-f5407b8c1808\ne70be26a-f1a5-4185-b270-1df2f32ed242\n928e0b73-db07-44d6-b624-96985676877a\n3a0d3797-4561-4474-84ed-41539eaeb9a6\n84d92017-ec68-4d1c-a9bd-5c5c860ad87e\n22c4d112-3ee5-487c-af1d-e48a26409d1f\ncb6d9d8a-a50b-49e0-a4b6-a1a7ee271df0\n9f70c8f9-f2a8-4dea-837f-d2ef32f5e65c\n59e9f02d-5f2c-4ec7-b13e-6f52b01e3828\nfba7f0c7-9851-4c2c-9411-6b4bba3f7d36\ndc80a515-3a3f-4e43-ba11-0793e75d45d4\n3b1298e4-bad2-4152-969c-b3b3bfe1ffc3\nf6bd0cf2-af69-4b6a-a8c6-5732d070ec00\n893857de-7bbb-4eb0-aec6-532c4f136b95\n4771ed5f-3979-43ce-83c4-3b406ef6ea3c\ne2a2605f-29f9-4412-b327-96d36640372e\nd50f243d-187a-4660-9410-66a06e26bf11\ncc1740f9-46cb-496d-8b47-431ef506b9ba\n3a2af06e-1b7f-40c5-9454-d97b0bce46e1\na6a54394-784b-417c-a411-3cb85bbdbc68\ncfe45eb4-cc9c-4205-8b92-661c6d372787\n78ca3bf8-a59d-4586-8d23-199764cc404a\n336cda90-12fd-47ee-9ee7-d69bfc540f76\nb34def07-a0e1-4bda-89b2-6f6207ea0e40\n344829b6-ec56-41be-a82d-317c416dd07e\ncb802265-50fe-4e12-8f07-2bceee4cc3e8\nc4af27fb-e874-4c68-90b8-d713111fe346\n24684918-7e6f-44cb-abe7-d056b3f9a9c2\na60b2180-0aa4-4f9f-9d69-2cb3ee5a0027\na3145290-0022-486e-b394-724312bb1719\n2ac7ec46-da00-4ad9-b2b4-27ea16b39706\ncf414285-19cd-40eb-9f21-c66a1dbcf3f9\n56b869d0-45b6-4af9-9829-fdc2e8e8787b\nc53a6225-ff00-4719-9b98-68d8eb5285ce\n51b2f87f-0444-4f90-b919-d4a0e40fc680\nde74a5b0-68ae-44a3-9f45-83e6761bb546\nb0cd77f5-0b44-4de7-9ca8-c1cb3e16aeda\n96718a07-a1cb-48f1-b6d3-34cf57a977b9\n292d8141-c519-4186-810c-1991c87052f1\n98dadfaa-732e-4952-a756-df9179cec430\n7ce1a962-170a-42ae-b822-d5002042ac83\n0ffb4fdb-882b-46bc-9523-b7322ca1f3d0\ncefcd6a9-f953-43f5-b8e2-03788848a197\na7699e87-8a06-4175-abfa-3781d20ad5de\na4adc283-7922-42fa-a9bb-b103ab2046fe\n46b9c783-7d26-4c6d-bcc7-798d263263be\na7a084e6-e0b0-4036-a532-a92a43871c90\n028c654d-948a-4335-9e9c-d2461b15f291\nf891d723-4b31-46e5-aa95-96dde31e91d9\n00404b88-9b89-48d2-b9cf-93b38f8310b0\nb3e6254a-87fa-413f-a0fb-6bb3442f4a26\n21ce15af-290e-4478-a732-6578c402eae6\n76ceaab3-7017-414a-9220-c574e44fb6c6\n4df21fed-05ea-4aab-b96a-fce30b6d7ddf\n00f82fd4-a83e-472d-9d11-b876ca572eef\nb8b66218-3645-427e-ad6c-b0ea8d5c6cb1\ne3e98181-90b4-4164-b13a-dfb064111543\n1460ee80-7538-4553-b375-3318370d3ca5\nbf4be570-88b2-4c1e-b6fd-1ab38a895708\nf0b495e4-df14-475e-a1e3-6374c5460388\nf6a071e6-789f-4832-802b-a6b992d191e5\nc2ac1198-9d93-4b62-976e-0da3a467bc6f\nfdc809e5-b9ef-4b9b-b8e9-83d9f0e7ecce\nb9825c50-0988-4480-ad6e-895917fb5270\n1a29be27-94e2-469d-a050-f8c0636444e0\ne4a00f6c-0423-4c28-8b6f-ad72fe137602\nb616d3df-be08-421c-b20f-6b3e0b5427fc\n8f9e8fca-c92a-4dc5-99a2-dc48ad2e8129\n0568c553-6bfb-48b5-bae9-42364efdb879\n9c931f2b-c6c0-4efe-aab0-1a7512a6aebe\n3ba0d2d0-7f2b-4338-8830-680f990b9494\ne1482dfb-65b2-4dcb-93b6-5d7444221ad4\nb25ddb65-feb7-4f04-b4bc-02084d8d3ada\n8cd3ee60-5f99-4861-b2e3-a8755d0ca9c3\n2315f060-ebd4-4d79-8270-d97d229ecb2c\n098f58d4-729e-4658-a70b-f1ffbb30b27a\nedbbb91e-34d2-400b-ba54-c6b24a422573\n5f3ca05b-69b6-4ff0-bed8-cc64a6feb0c4\n59217ad3-c38b-4845-bd63-cc38da77d19e\n5ce84fb4-588f-4063-8985-cc73d49ec882\nb27fcfba-bffa-493d-ac73-4fb1a6671498\n03e1a18b-1aec-4c0e-8290-aad64fe5f28e\n1e4e0af0-a96a-45bb-9ee7-eb5397cbec3b\n58dd093c-1151-4857-832f-a475b79dd771\nbb8fe54c-769f-431a-b83d-fad2eca79086\n2efec7a0-4c30-4fc6-bdc2-0b4678796ae0\na8d6e11f-c4c7-4854-81ff-9a103f5e696f\ndfd933fb-0c14-43f7-9c3f-6faf384317f0\nc6676d4b-dd6a-4a12-8d0c-a2d4cf5f4afb\nbbc55088-0489-482e-861c-74aa08b0c288\nfdfc8a25-2b67-4e79-a694-4f208e598ad6\ne2f3e6f2-a05c-4eab-834d-581b11b0bd29\n0a57d2cb-5122-4918-960a-a0a4f950788d\n42dea578-02b0-4973-8d26-6c81b823dffa\n64eb5f3f-e028-4ef5-94a6-020ddf597e3d\ned3f141e-40b8-4e9b-b603-ffa73ca50425\nc701c8c3-9575-4374-95f3-4d0f15d7d4a0\nf88e92ff-628d-45f3-8ac2-0f915a416f57\n5db0cbf8-5aff-4a99-87ec-c0a7885d1c0c\nd81f8457-1afc-4bcd-82fe-232b0adea3f1\n81fc18ec-4db7-43d2-8b48-21f2643ce38b\n77bc4d71-8ce4-423f-bd23-2b76a903ecf6\nd6fa982a-b5c0-49ac-9f3f-4ebd13449045\nf2966b04-3085-4de6-8025-56343302f9fb\n5e6c3969-9cad-4330-bb49-37f9c4d997f5\n0b064248-ab68-4fa5-9836-37f657af176b\n3f9526e9-c72c-4f4f-a366-857ce82971f4\n32e257c5-c4ac-4399-836e-bf92f0ccfeef\n046f709f-75fd-41e8-9908-d6d41a2d77f5\nea26de39-70d8-4460-8cf9-0da8c359cacf\ne9f0f2cc-b8f1-4f1f-8b75-95ff2e08af02\nfa248885-7f35-4bf2-9219-cd760abbfa93\ne1000d93-262a-4131-974b-aeadb1d7efe4\ne7e42c6a-a5dc-4ad9-9758-8d14541b0579\n7e6d5e61-3689-47c8-86eb-754a9054cea8\n01735ade-cb61-465a-a15c-49f905353b17\na0019d9a-394e-4200-8daa-5cb8be877af2\nb903d1ad-7908-44a6-ab8e-6ad42f994cf4\nf67c2c82-3b75-4177-99b2-58cb36a42139\nae4adb92-d2d4-41d8-828e-760711481a02\n3e9572c1-2744-4e64-80a9-327791007b4c\n3caf0e0b-6ea5-410b-b802-20d4d41c36c0\n953bc5aa-ea2f-41a1-8a8a-45340e6d6bac\n2fc3808a-1a8e-476f-adb1-f6e2151e432f\n8f0e9f09-dee0-4aa6-b5c8-08683ced58f3\n0bc16160-2594-4ad5-beb4-f0a226fbf1a9\n1b4ca27a-2c3e-4c26-a9e2-a8dd1248ed20\n48ee0ad6-a7c5-4e43-a532-7a3a89ea3263\n9f08b57b-07c3-43fa-b5cb-99f342fda9f5\n42bb8db5-3a68-4ff0-9ca9-95deac81e884\ne97310e4-5e38-4aa3-9af1-956a5bfe6cd2\nfc6561ff-c955-4063-8b64-c675341cfb66\n1e3945f6-cec3-429a-95ba-c6009323f50c\nc7d53211-3406-4d3b-96af-afaa686cedb4\n97fef551-34bd-4181-9250-5e894c45b957\nec4fda79-e7f3-40ca-a38f-457d864f78b6\ncf89454a-0a78-46b8-9111-ec65a623f3cc\n41c46455-a82c-4c9b-bed8-95562aac0f33\nec639d21-9095-4555-b814-eabd4561e156\nae295695-2d1f-412b-87f5-d8c85de02e76\na871a0d7-cd13-4837-b268-acacf105b498\n874dbc22-f1f5-40f0-ae7c-ed93825a49c4\n8ba345b0-53e1-41bb-b5d6-83b9c8af76c2\na79fba86-7a33-42a4-87c5-83841049116c\ned771a86-58ed-4b2b-a3ec-d2a7e4018408\na2038e71-6520-4f7b-ac3b-f3f2098bc6ee\n2c877447-a13b-4979-b65a-b6445e11e532\nfbb0b1e3-590c-4565-bac4-d7a57d5d7fc5\n11fcc950-0054-4b92-bc08-1a2b928d365d\n1e9000f5-7c48-4425-8893-a1694b9c2171\nb02266ff-7fdc-41de-830e-540d643d9122\nf69fa372-e7c9-4dc6-9d91-bc7df2464563\n4d329631-c88c-43bc-92d5-053afb003038\n585b2887-2fd9-4091-bfbd-bde4b0a136d6\n6d36d9e9-5eff-4e3a-8c63-02a017569a85\nbe6b66f6-2f68-491e-84fe-2c27367e4301\n5902fd47-4e34-4a26-b292-50f705b81ce9\n1fd640c7-4a0a-4b4a-b15c-9a6b1d9218e6\ndec48953-ae14-423c-9798-827c7897ee20\nd141695d-cf19-412b-8cb2-13fe38d3abed\nced48975-2599-40cb-80aa-3bd0491d5b32\n7993c935-713c-4fd9-8ddb-3530200f59a8\n9a164bc4-a1ba-4ac6-b39e-477d7bce7210\n0523f491-e320-4e31-b86e-eaec8b8157e7\n2475b6b4-c893-4b82-9807-c2d0b4f162eb\n95134d98-0723-471b-a92b-4a3c7b2402af\n5dce43f2-b2cc-4aa0-a73d-f870f9579283\n6dd34caf-929b-408a-9f0c-963a9f53ded1\n5b6361d6-a126-4528-ae82-417edd5ce1ef\nda80ab7f-a155-4d97-adcd-dee94ff3711e\nce588cc2-196f-4fc7-9cfd-a0b98c7e4cd6\n36a86340-24ba-4741-a85f-01ca102e6fb3\n6cc8e7c3-92c7-47d1-9df0-41d55540791b\n846aba5d-e91c-4329-a341-561d6da0aee5\n87a8b8ca-90b0-4590-8f55-5d40b3fb7878\nb94ece5e-3638-4809-8753-40b0b4851972\n81df938b-824c-410f-8f58-9c145ca6af47\nc56fdd3b-39e2-490d-b94a-c80f8d4fce89\n5b5a4dc2-3cdf-42f3-b486-6e1f094ec50d\n8487611b-dd24-4a7d-997d-ac243b4f96cc\nb0c3081e-a04d-42df-b793-2eb55698148f\nea600072-c6cb-4e84-a277-bd15fb116ffc\n065373e2-8d82-4094-b325-c9b26d7c2c02\n75b0d17a-3e2a-4675-ac61-b9a2f6f272cf\nb6f93901-3af2-46a5-b7ad-f35fff5fce4f\n619758b0-a3f2-4ca7-97fa-a24b60e77907\n8423a524-c086-4738-98aa-512fa54d0d90\na638bb07-5344-4e75-8435-436dc3bcb1db\nb3c8919c-2e04-4c13-b1b9-85bc87d98059\n486a371d-826b-4824-a9e9-60f653562b4c\nd77fa49a-3123-4510-bbe9-bf1902e9b738\n1b0b5161-6dc0-42a3-a2a7-90ed9447c955\nff60414f-5645-493b-9433-3ac8ddc032e4\nbe2bbf6f-00d4-4220-8136-3b0333be9e89\n2fbcd332-5e57-45c9-9f2a-0cfb78ca7668\n5a963ddb-1c91-46e6-8de6-db32fd957c03\ncbfa572c-cd5c-4903-892b-cfc4e313bcac\nd7888a6f-6adf-4a4b-9a29-736e6b657455\n3ffc9efd-237e-4266-ad0c-c83aa2a606d5\n894fe91a-e99d-42c2-847a-9c85a614d113\n987f63d8-0951-4374-8977-93873c8688be\n3d2818eb-5c1a-4d8e-93ce-a65ec2e5e943\n1086acdb-b914-4611-82aa-8d97b72ef4cc\ndba65eea-d0ba-4214-874a-faf35316dae1\n9a227080-348d-4975-8291-56ed79250903\ne62d4dd2-07cc-4241-918d-9cff018815cd\nc7e1f36d-4aa3-45c2-8a8c-3642d5af90fb\n84fa74cb-b55d-4f7b-8b54-82fe94dffb6c\ncd38ab48-6b6e-4323-b5d3-7de992e74bd7\n9631b38d-dcb3-4bfb-a478-13491dec4eef\n0b3f9b25-51f2-4ce4-9e5e-92acaa81e4e2\n730dc4ee-2a77-4b19-afdb-e132a0de4273\nd65a289c-7727-4bd5-b4b4-afe57ae67a8c\n327138b6-63f5-4ee4-88f4-806d9e320041\n0bfa1650-2bfa-4c5d-b8f0-e8a02740225a\nce85d91f-42f9-452b-92be-2dcb6b3d1077\n6460cb20-d3a3-46a9-84fb-a8f04319ad9c\n1feb75ed-3ee3-47ac-8359-80667445f263\n7814140e-43c9-4bc8-88d2-152775ac4c68\nd2c47769-c32d-4d86-9cd7-c6bb0d84bde4\nfd4beed8-f99e-4783-a0c8-21ce5b2880dc\ncdf233d7-8344-417e-bc6d-b2f471508a2f\nb18365b3-27c0-48b0-b344-50ae214224dc\n44bc5172-dc8d-4540-bfa8-68aa03ef1003\n57cf8e98-2f78-42fb-8ec8-dc4abb52689e\n6d91fb65-4ca8-45f4-bcda-f959b006f6a3\n2000a03b-b4a9-42f4-8e9b-690335cd46dd\n7cc193cd-c26a-47cd-b648-f7e902339996\nb79d69ad-134e-4661-ad54-7914b17c915b\n247c64e1-d89d-48f7-85f9-0a3ae7c5e8d7\n05dc2cb4-d8d1-413f-98ad-bb4d85559326\n69cd9f51-5267-43fb-8f6f-2645612b313b\n5d0f283d-1744-4ed5-94a3-f797619cc16e\n69948c81-ab5a-4ea2-b66e-a7996ebfad22\nfc6e1333-6b28-4a13-a07d-d4edcc2201c3\nc6865c1f-79fc-40e9-b49a-2f215afb5819\nbfa3580d-cf2f-4c91-ad97-289be1a67096\n6267df5d-b4da-46ee-8da7-0e243bd304e0\n9c24358c-9bbf-472b-8c45-ae0339f56072\n0633623d-c128-44a5-b972-8264faf01ce1\n8c1e79e3-3ab3-40d4-b122-82eefca117c9\nf16592d8-204d-4c5b-97d8-933c207d012d\n11b6d4d1-65a0-466b-854b-9f23b334fac1\n4a841907-84a1-4e86-a3a5-9ebce12c0cfe\n1fccf642-5d7f-425b-93c0-860412f6a779\nef886b71-b273-4c71-9880-1ac3793555a7\n693f9f75-45b9-4714-87c7-111f7ef04ab5\n37241aca-8f5b-4bc9-9da8-3c31872b1510\neb3c53e4-1167-4f6e-89a7-714851a46a21\ne701ee95-f810-4c5b-93b7-6facfccea1cd\n77c8a455-478d-46c0-9534-c34932caa63f\nd1ef6f89-5911-4cdf-9425-8dcdb70c0c49\na9001b61-7c06-4b09-ba71-0265099af704\n6cecdb28-191a-4a12-8030-f217e36be26c\n6fbd9a1a-4d6b-41fe-8ab8-28afe97ff57d\nf13b119a-5bbb-412f-aca6-7ba05f52afce\n99e1d203-9a28-4aea-9177-fac4b3e3e9c3\n70232cd9-689a-4bcf-b438-2abf3849c53b\nc9f0d0fa-86f9-427a-a21d-cb377712ad80\nf2c5bd3c-2cd8-4b31-9d04-faad3d175514\na5723cc9-a199-4232-bf88-1ff70cf65a9f\n977cf8c6-f7ca-4596-8551-031b28d8c700\nf9f83399-b408-4ca6-b1f7-a22eb3821a61\n546120a3-2025-47f7-b5d8-4f47c57a3205\nca6f3a56-aafb-4155-81c9-01432a93adf3\nabdc832b-a09e-4efa-8bcc-886c674d3cab\na6931dc4-009f-4db9-90b7-bd8c5200b390\n390fcd34-f033-4b2c-9eff-c93cb14a808a\nd2f0be53-347c-4064-808d-1ff2066f9893\nf3cb4811-da14-4213-8c8d-73876f0ef89a\nb90f376d-8fa4-4132-8d82-64194134ce9c\ndddc9050-6a35-4a0d-a001-9e7ee97c1df8\ndf411033-7f99-473a-a610-889075df3dd9\nbed153ee-aa6b-4779-b9dc-e602789ff011\nd63f9854-9188-4681-9e22-98e355d0191e\n92388997-c4c1-4c4b-be65-d45ca1ff005c\n8d7b510b-19bd-4f1b-912d-15942aa665d7\nb62f8123-e05c-4da8-a127-3b3f4090577e\n2c8d777f-2054-4675-b5c0-27b80671c14f\nae9a80ac-42c7-4de0-8c2e-0334dd062bac\nd93d8195-a1b1-42cf-9d78-34a8c57d9bee\na19a81b0-a11d-4141-a226-db7553d79454\n12202b6f-521e-4abe-bdba-2132a5619289\n410d8aa3-395b-41b5-9521-aff2c77ff784\n62770432-aa1c-4b1f-a2f5-34f74da83988\ncb9d57b6-9506-4c0f-a8eb-84caf20180b0\nb05979fb-1560-453a-9a1a-69f4987b12af\n2fad1b0a-524a-409c-911a-3906a1207698\n91629a2d-3586-45b1-a664-3065303d6366\n169cb2e9-5cdd-432c-bb0d-1a0b67dbe7f1\n16b93b44-0cc0-4783-9587-556b88bac1eb\n4ed6795d-8a2e-4ca0-aa16-356925f0ea1d\n68505821-8f97-451b-9424-761122db43d6\n7ac95cb0-e398-42d7-9cc9-4a77dde3fb47\n05416294-a3db-44cc-9c25-9418bb7e1ffb\n4312ad6f-28b8-4efa-a47d-9c29764512f9\ne03ead1c-e6c0-47f1-837d-a534c6a5f220\n1c205059-d188-4417-8eca-a649de18f931\n5463f8cc-f75e-45d8-917d-64a8323b4eef\nec41aa1f-02a4-427b-995f-a0cba79802ed\n617a51d1-92ed-4cc2-a787-c1c8c1fe58b7\nba89d1b6-f5d7-4616-8087-8616c36979b8\n98376883-4cdc-430e-8dab-c9b3a59474ba\nf6429b7b-dc7c-456e-a929-1cccd3cc09d1\nab44938a-52fa-4c85-bd81-57ed137e3393\n013aba42-2d23-48bf-97d9-9630876b802f\n8a6d9475-51b1-4335-a3c7-61b132703011\na6b568e1-d52d-49c1-bef1-1d8abb8e5a77\n35cf8a51-0703-4d81-94b4-3565014c69bf\nc5176cad-36c5-4757-803a-07a465b2fd29\ne5dd469d-ea64-4184-95e8-ea44ee29ced1\nf810a19f-fa2e-4f03-a84d-b3734e7e87c2\nd416705b-800f-4281-871f-b0e1707cf007\nbfbe9955-11d7-4035-9af1-1fbdb5691e7b\na1ffc62f-1640-4131-b417-58cc18cdd2c5\n35ac32a8-48b6-4ebb-90c7-287637a8fcca\n91d6949b-29fe-4a89-b7e2-8012829544da\ne97ec956-5b86-414b-813d-b2662a24fc74\n00037574-956a-4ff7-b1a7-8aa6e0ea64ed\n6f67c241-ec96-44fc-a51b-3c6bce4ef133\nadc88bd8-c5e0-462b-ab55-deb6a1403cc8\nedbb2768-f332-40a5-b770-b0520bb73d68\n9a93ff7c-7acf-4ea5-9497-9623180ef771\nff4778db-8073-4e2d-ac70-8d82693a18c2\n372cdde2-0fe8-4ce0-a5af-99c00c687ae9\n8165dfa9-8d4d-4d7b-9b7f-a233d463cf95\n1842f447-cac1-41fd-95f9-75122cbf8ecd\n79419733-92ff-41f0-b766-3c8021069746\n209a005f-7044-4d30-afe4-de4d5b133408\n80f33b47-7bb4-4615-a991-1b917c5c4d56\nae942644-6915-49d8-8653-50afa0915e6f\n37d613ed-1e6c-4cde-9779-5ff827dbeba2\nb992024a-5516-4418-910a-63f62e522607\n4e00ada3-88d8-4ef3-a694-4ce2cb835c33\ndcdfc02c-8b75-4e3f-963c-e6fc28b5ba54\n44b3b7dd-d7fa-4c34-9f06-247e75efb733\n5440c81b-bace-41fb-b65b-b23ff9eba5cd\n9e40e7be-59dd-46c4-9689-ac5d464b0162\nae76b274-62f5-4a40-97cf-55388f97e504\nfc426ac1-6ce9-4dc7-bc56-4eb2fae2ad6f\n6a815c5b-8d35-48c2-9a65-fadb403ba742\nd71edfda-a0a6-4d8f-a971-2131964cdebe\n41d9b44c-d63a-4089-b56d-31cf412d641e\n27246f7d-f639-4fca-b230-fda272f9e18c\nc9cfdc4b-76fc-4a84-960f-f767612e5a22\na6c2df65-86ab-42f7-9d98-86be0483215d\nec29b20c-5ea5-4fbf-a7db-8923f6757a8e\n8e8c5aae-25e0-4b11-a8ed-6e6ef27a379c\nf8d531b9-2dee-4eb4-b96c-2ea9d5ca776d\n388b12c9-bd3f-492e-9b27-0f0719369b43\n855e5832-bb3e-4f3c-8153-0b82dde50a26\n308d6dfe-d864-4423-96a0-77d181f08bd6\n7a137129-8ad0-4020-bf29-ea0377129666\n55d3a34b-0a7b-45ff-8a03-1ad1ad5a3ad8\n9cc3d67d-6658-47e8-8c2c-a886043d14ef\nb336afaa-1bb2-4b4f-99a3-8a7b720701b9\nd585d10b-e8dd-45d9-932c-831a6412375a\n3d906f27-a64f-40e4-a4e6-5fc897d3c3e5\nede0655d-8766-4517-a994-c472f9bb7316\n96aeebe3-4cf6-42c7-a17b-b43a8a3848d1\n82ea060a-e03a-493d-8eb4-9c131f662b58\n8771757f-8464-4ae8-ab46-635c9ab31a84\n62e2dce0-1b4a-470c-8dc4-b7f88c3f7a0f\nfa6ae510-0fa7-488e-adaa-1548a01b1578\n665f0255-ec55-47fb-bbdc-02e19095ff17\n1a098223-ef5d-4231-860c-977c83b6e564\n5693591c-d5b2-4f74-9046-61755c6277f5\nedb1214f-4fcf-47fc-99f5-241de264f5e4\necbc9573-e190-460d-a264-4d8e58a3089e\naf4c707c-ac6a-45e1-8f2c-17a8cfb4118c\nd3de86c3-4e13-4078-b3c9-0d1ab636082c\n67f614ab-9a9a-4de4-bea8-fb608aad677a\nc19ca2ca-18a6-4b2a-b4f9-14938d31432d\n73bc555b-67d0-48ba-995d-2283b620c594\n9fa75027-f9ca-4e3b-8aa8-b77e786ef22c\n8c577c1d-97b7-412c-93f6-d52ef3930787\n14deae07-ec8e-4640-b625-917094832621\ne921c8e9-74ed-4d7b-b19e-6e7860978675\n53a55a4e-fa42-482c-bcb9-9d9bb098c749\n56707147-701a-4652-b16e-3dd3979efd38\nbde91533-6233-4e64-a849-7020dc41e0be\nefc546c1-763d-4f83-83db-6d5bb2a8fb7b\n2b8c9f76-3a54-4920-b84a-3ca42eed4522\n6160e825-fd39-4ba4-a78e-665c9dd59282\nde9adce1-8439-4a1e-b873-608fa5fdde03\n1abf7fcb-3409-4a07-b510-ddf5367c9516\nf2771d3e-257e-4c27-8393-452d9953f77b\n2b8bf013-5804-4c99-ae8c-66a465085293\n45bb6c75-a432-40f4-8fe3-daded43672f7\n83c2584b-7f04-49f1-88ad-861cf080d921\nd073c1d5-c05c-4b7c-9394-75a413b7bc40\n62708f29-c34b-4418-b1fd-bb2e84534a24\n4115ca02-65b1-4ad9-9cba-091ccfcf1015\nb0b97348-b794-43a7-bac7-1f29f3ef70f8\nfcaccade-ff86-4446-93e2-9d6f02a952db\n3857dacb-6ca8-4abe-bf01-2ebe13fd134b\ndeb4fd1f-fb58-483f-9cae-771d38914ed7\n00f6cf9f-672e-45bc-813e-3baac6db80b1\ncac84f03-66ec-42b6-94fc-164271cec71d\n51f58d86-b739-4b23-8fcd-002f6fd38101\n9c3e5767-d610-4c77-bf9e-4ee34f6aa9c7\nc7aa85d0-16a2-4c96-88c0-db4e14839b8d\n829ff24c-4c17-48e0-a8ed-a582eac5c749\n02150d75-1f97-4bf7-9634-a77249ff4eb5\n1ce61509-8b51-43cd-88d7-2777d7f254e3\nc18a1535-aabc-4db3-adcd-30f9e90196ae\nd3029342-312a-466c-8c08-6d1278e63e8c\n6e8d7eb3-586a-48ca-8c91-8204b7dfe9ee\nc43bc9dc-5aeb-4be0-a88e-b8715fe3c05d\ne7640b15-dfc5-4ce0-96aa-f724a8df34de\n92d10913-b605-437e-83e4-d586138138a5\n08faaeec-0379-403d-9a4b-69aca74cc27e\n193967e7-7f87-46ed-8d06-00b8e379947f\n0c97af5b-09de-4f5f-ab46-312995579587\n74b552e4-ac2c-43db-a801-ed097808b671\nef49231b-33dc-48d5-a165-6845297d1c48\nd673c0a6-ae5b-4217-8891-759a2a6f0b29\n90fc94e2-499e-4a82-ad26-167bb86ec663\n4a0fa65e-85eb-4b65-821b-13f3ab9a3b29\n1a40a8cf-fb58-4b7f-9bbb-5b920f07e4ef\nd96247c9-4240-411b-8344-c20e7b8819fb\ncfc6d38e-a2c0-4e44-bb4b-2179685e7fac\n94878604-da6a-46ba-9ae7-f66e413c5954\na8256474-44c9-45b9-92e3-1ee6298aa8b3\ne62e2770-bce2-497b-929c-219359ed1257\nefa2261c-a8d9-4dc0-896a-0ce0fd6f0043\n21c3286d-125e-403b-8acb-9b88acce941c\nbbfbb09a-7f04-4e7c-b684-2b118904a6e2\n22942894-16cf-40b5-b4bf-c6c21f9c12ae\nb5301433-d763-4f12-88bd-a390b60c6046\nf064bc92-0337-41cb-8830-edef1f79af53\ne13e3b3f-d72c-44fb-92ce-af76957e031d\n159aab0a-41d9-43a8-a284-20465ebbe408\nb610175d-c079-424b-89f8-eedab24163f5\n9836d3c7-8b50-4884-a8d2-209390aa5a8f\nffa64012-1667-40c1-a190-3c378c84fc64\n4c39533d-35c7-436b-b029-04134529b107\n0334a66c-347e-4272-8d9c-009d71ad715b\n7b793b70-df18-4d05-9977-28171fe6e8e8\nc8b48570-b78b-41cb-8392-0725b30eff37\n81e80fa6-e08c-4c5a-a6d0-4ca34c5ecde3\neb0b7f41-8801-4d5c-8736-47837e5e7d7c\nb9203ffb-6bd6-4a22-877e-3f55b9e41249\n94b44c08-ae03-40e4-b356-f935071bbd9d\n411b3fe8-2863-48f1-a20d-cae7a4febe2d\ncb5984b8-e8f4-47e9-af83-62eb808fa307\n060937e0-0354-410f-af62-2674645d9e8d\n9f876b5f-b750-4590-b32f-e95ad9a6d76a\nd80f3456-3dfe-4938-aca7-eb8704744b94\n515b1314-9f84-4dfa-94e8-1da03ed19bea\n9dab1b2c-9a82-4565-a7ba-a069aa284744\ne7e942a9-6882-40e5-9e33-1b9f1ce17b65\n91532d6f-a319-4817-92eb-ca901fea76d5\n73646b5f-635a-407c-b36a-814de207ba75\n2721f2ad-5928-47c5-9f2c-ff17d8a68a02\n95e7c781-8b34-435f-8bbe-5f518693283c\n97100e8f-a372-4ec3-8418-d7d32aceceae\ndd8734a9-eeea-499c-8567-77bf1ab0a0b6\n0c3ab33b-8bcc-4976-b014-edce84956b20\na4e6be59-fbe7-41c3-a626-f3bc07684c95\n5a3db05a-ff34-4681-893d-a40e9e302214\ncdeafa83-e414-4bd1-b404-f742cafff1da\n169f907d-6dfb-4424-aa92-b45992b0fb69\n987b932b-d0db-4a3c-9fd8-4600c9816a26\n2180cc43-65a4-473b-a2e1-778c263a162b\nd3ec09a5-27ef-444b-9a5c-a9aa46678dd6\n77f0231a-47fe-4bdc-b5ec-0e84f6317f1a\n60842dce-7cf8-420d-b3f8-a960516c43ae\nb9b93013-c7ce-44d5-a2d0-88909d114473\n33042d6f-67f0-4a7b-8394-c9f35a92ef15\naea24976-528e-4c3c-81e8-81410108f8f0\n4a42d428-3ef3-4e13-afc5-8a44c7bf2a96\nb034ec07-4a62-4716-a82d-0c13f157bdae\n2c007a73-3de5-4975-80c0-dd199acfb36c\n2706bfda-e760-4a8d-808c-f1086c5a43d9\nef429c83-dc98-4aca-8550-c30bffea3876\nf4df402d-3256-4fd0-9112-27342ab561c1\n93a89535-fcdf-426a-8546-6d8ec9cf4288\nfd46a4f6-d4ab-4518-a6f3-9789fba600e3\n2b6ea10b-4d2d-4656-ae50-c79c8549396c\nf0301e74-03ac-4365-90d0-7e34f6caab3c\nfddea63c-726d-44fa-a4c0-05ca895728f7\nb86db2b4-eac2-4ef9-9c7f-d558982fefd3\ne593e870-dcfc-45e8-8c0a-8568a487c0a4\n386b2aa7-7941-4331-ba04-015ba6dd96dd\n9ef260ca-64bc-4bad-807d-cdc639e34f2a\n8e5cefda-4312-4133-8c3d-bf5ea6a21988\n1c3e410f-2869-4db5-b046-64dbc5dbc03b\n40e61a90-f4da-4178-bec6-95c70e83f615\nbada151a-f164-410c-bc99-9296264e6a95\n5b6952c2-7964-44b9-9636-169714f283c2\n6f26aa35-42ce-479f-8e15-074ead064e83\n2f4656ef-0efb-452c-baea-f7de2bc49b25\n790a9b72-d4d9-4a60-b773-1b0690f0e008\ne85189cb-bfab-453a-a83f-1aa4342c74d8\n5bb3b4a4-e0b8-472a-ba7c-5102dd6aed82\n70b894d7-9c1f-4874-984d-d7d0e8865926\n45ab6f25-4211-453d-9809-bc3799326b68\n4f33593a-99b0-4112-982c-0c7754d5267e\ne29ae777-dbed-4c36-bcba-7418e1c3cad6\nccdf111c-cd17-4e82-8c5a-f267ff12df3f\ndd5be798-3933-490b-b651-c569f6edc9f7\n6fa088da-e1d0-422f-bc53-58d6d8300fa9\n71e8fd03-0491-4784-bdd3-62b2090f5b30\ne599a4a3-5cc3-498a-9981-0751daa9b59b\n508057ba-3463-43ad-948f-d3e9dd12b4fd\n7f111696-eab9-4420-9ab4-2338a05e4ce5\n8fff784e-f3d7-40bb-8bfc-3f6c840c943c\n139b9334-5f8d-4391-92af-83e8d6e49bac\n29783427-e3bf-44d8-8804-c4aa360d0306\n0a5f7d9f-9aed-4aeb-9cdd-f0b4319b5bd2\n0770b820-61e3-40c1-a559-84411b93b984\n0a98f08b-6458-4ec4-8b17-e0afabb5f6bf\nc78cbc79-c410-4ac8-b9ad-5b0aee8b0caf\n38c8aede-f94d-4fc0-a688-c8d8b6b5a83f\n4739635a-d2a2-4e1c-a50a-50a8131228d7\n4163cd08-78c5-4a63-b250-4873e86979a3\nc7917756-bb45-492f-a79c-a04b907bed33\nadf01613-b194-4887-ad63-fcf43f20fa83\n91b62a5e-ac90-4f5a-b7a0-1cd4fd66d1a7\n78340322-82f9-4f8e-ac46-5d8e4db05695\n3ac6a0af-3625-472c-b8a1-2d1e48db0640\n0b7df6ba-7dc6-4f1e-b801-305f89bbfd48\nda49c15e-5e7e-4f7d-a624-9a781034864b\neb4e7652-8057-4e13-a7fc-d12ac542f1ff\n75d2da11-400a-499a-8930-b3fac5a394fe\n15fa3e3b-758b-4010-9016-dedaa56715eb\ndbc5e3e5-8ea1-42c6-b1a4-dda40333f029\n3ff3991b-ae2e-437d-8b5c-962228dff509\n2a6b0f96-882d-48bf-ae48-090be10b3a55\n005cfee6-81d4-4f55-9148-2d1d5b9f5c38\n9c8df5d3-9519-4c41-a189-3ff0c8af1491\n1f64d929-fcb9-4188-83e9-0a1c4c11f4c8\n3a883a45-29f5-4b58-bcc6-3c9bdf7c9dc7\neeed2284-c087-4777-9a1a-c1cedef6cc26\nff68742c-9b5f-4dfd-a79c-672ba3a06073\nffd83378-3d4d-47b3-8631-31c1cc66a01c\n64007162-a6a5-46ce-9779-3a0be7c231ca\nbe81ec1f-0910-44ec-82ee-fd82c32475ae\n7ed13d50-d92b-453c-bbf2-a6de6ab8fadd\n0726c5e3-737a-4140-8846-498b16271035\na437902b-1c8d-4cff-b9c1-8f8b7f3ca05a\nc950ddfe-7453-49e3-b2f6-1f452f5e0860\n33cffc12-60ff-4f38-bff7-19bbdb7a859c\ndf048b69-91f9-4944-be00-f5e952d67a4e\n3acaa789-e170-4ab2-9643-eb130e89f1f0\n5f47e1bf-8c5d-4989-8345-d229f422aadd\neab18af3-2867-4b6d-a36c-668aab06e8bb\nbf3854c6-f760-4472-aad7-b6c3adf105bf\n91d8d74a-26e4-4b6f-8e7d-662c40cb4003\n38795a8d-066b-4eec-a4a4-bfbf743bc07c\n60869860-974a-43a0-8967-7a3f4144d27e\naf3b1f81-ab5c-46b4-ace7-c62fdddb92a6\ncbb21e41-c03d-48f1-8d02-5d14f4ad40e7\n820db46e-0ddd-4c5b-b5d0-1360abfad5d9\nc59bf96a-e356-48a7-8251-95ccdb982eb0\n98cb4911-caaf-4d9c-9bfa-5ac2784d1d1b\n5cd01edc-bfc5-4224-a09d-1e3a9f7e842b\n5ce562fa-b870-4042-92e4-a7e46f493b11\nae08bec1-615b-4ee9-b48c-2730e8ce1bbb\nda54f9b0-959e-4bef-b928-ae1fe1180175\n4dc18c0b-a013-4023-a0d5-c79f70afc0f4\n2d07d5c3-c194-46c3-bb74-c7e21b6f0bbc\n2d195dfb-9ea0-4850-96b5-97dff13ac22d\n98a05b75-076d-4a56-b2c8-4ea2f9c2ca9a\n5f5ced4c-44c9-443f-9229-ba81a16b7b7f\neee89fd2-d238-4477-833b-ec00b81bca5b\n42f38e10-04af-4c01-9949-cf5b9fad0f94\n60f92ff0-1e11-4ca0-b5e6-54e9e79cd56a\nf55657bc-3a98-46bc-b917-9c07bcd87376\nd8d0d1e6-1063-4aaa-b6c6-6e053cc47b03\n5a6b9b63-f085-4108-8c18-1b54e66b3a4f\ncad5db5b-0905-4285-ad37-fb85180aa1e5\nb2f102a0-d38c-42fd-9ec6-3d0b4029496a\nc85465b1-d21a-4686-8f07-29c532892aed\n794f40e5-95ab-47c6-913b-5f70480e3b37\nd39e22cf-ed3d-49b8-82a4-7beec971c3fc\n4ba99502-ba87-4c1f-aa28-ccbe6e92eafd\n1c5e9871-0785-4da6-bc93-3de75750bd71\nad2932c0-b6d5-4806-ab3d-289d88315ab5\n1adcb011-0ae7-4e05-b8cb-5898e6cdb02d\n8db36163-42f8-4537-ab2b-3df9cc9b2c8e\n090c56ee-821b-4cc6-a097-460c9c1c3d81\n4d154f16-7886-4ed0-a9a4-99180ae0ba58\n9b9a03d9-004d-43b8-b9f9-e0fd4931b789\nb97169e0-fa5f-4c8f-811c-cc85e8ff98ac\n801b229f-51cc-483d-84b3-abace6ff4787\ned8c2f44-d99b-419d-957f-301480386313\n8b49e48c-1dea-40a3-b0d7-b59bdcfa2836\n3274953f-dbe7-4d12-ac3d-93cc7ebf3de5\n1e06045d-6e94-4de6-ad77-ca621a029589\n17bfdbc5-19cf-4536-9b52-80f488ba2bac\nbf8f1f05-a6f1-4ab5-ac0a-fa645bf3a78d\nd2f06a21-3564-41c2-9232-7b4c8d226e43\nced29133-ac32-4f6a-9e58-2cfd1058ff60\nbf7fb7cf-e07e-47a8-aa3e-2f5cace85be0\n52a380eb-fded-4f51-a6bf-1df2ee78e3a8\n7dbbc822-ef2c-41f8-b52e-a3d1cf00f30e\n09e3e8a4-d2cf-4aa2-a7d6-c30d1b8c3498\n5e2cdedd-661b-481c-92b1-831870ea9068\n587f6c5f-643f-4964-b63a-b04bfb710e75\nb9938054-d908-4aef-9083-b06c2c082233\n89024c89-6aa7-41d4-ae30-10807dc0e08c\n2899c3bc-05c1-4a89-b546-6c46650ce5cb\ncf022e7e-d522-44cf-aa11-af3a535c4c37\n2942fbb6-5da1-40d6-94ab-94811a5882b5\nc8c9e71d-2805-4201-abea-2cba5e5948ab\n52586931-9efa-4967-9cd7-c4f3df4ca321\nc72d5785-de14-4821-9d65-93a2e89184a9\ncb26b74e-fb76-4443-9a23-93b40bc731ae\n8230b1ba-e744-4c0d-8fbe-6ad0c1662e32\nfd3466fd-371a-45ec-b524-6eeb17998666\nbc63fcf5-8c38-4644-9436-6e1974cd0b5d\n41ae81db-2b81-4266-a9b8-fc250125b533\n12309d5b-86f0-4a3e-bb8a-177a64c2ebd4\n5d5356b7-7bed-4452-881b-e99f49578535\n03ffa144-be74-4de0-a2ac-e6880aad5c06\n44208797-31ff-486d-8e2e-c0e549aaf428\n28e5efb0-3989-4817-8366-2b15ed260afb\n92693c0e-0fce-40b6-9c51-3a71d65fd9ca\n133cc8c1-8da5-4405-bab9-9e628df96d32\nf3e4edeb-9074-45a5-901e-85a5fb2dc170\nb47bc7c6-9ea8-4c2c-b5f7-f93035d5b8fc\n6ac63c86-8fc7-4b68-adef-1a40911e70e1\n0963447f-e6d5-4247-acac-3f254ef557ff\nc5009b50-f18a-4d7c-a0b8-1183c41b9546\na939dace-0947-4899-9662-20c46ff77de5\n4bac6b38-587c-4a23-923b-3bd96a23269c\n9508b7de-b24b-4924-8b2e-0d237c90fec9\n281825b0-aa8e-4416-89be-f231bdf17bf1\n8b175089-f2c3-4cac-a86f-7175fd7ee392\na91d2374-2ce0-403b-b301-1501d8be3eea\nbe2f84b3-2df5-400e-a70a-a8029b4eee05\n76cb7658-3cf6-4fac-b73c-d7c1442caa74\n261718e5-c13f-40ec-a821-99ffd9c3c919\n26c26439-32c2-4f64-ba4f-a9aa590b0cfa\n664c8934-7777-4342-af0e-fb501cfc7fe9\n83a3c056-c806-46f3-ad49-3322b4a03bd3\n40a305bc-ae21-4dee-92ef-8e37e02944c4\n4b936fad-eb31-40b8-a842-9a2f35f89a41\n7ac69cb6-162a-4c4f-9bb4-1f817c8290b5\nb214ac8c-e5ef-4db2-a665-28e256611c68\n1edb71fe-deae-40a9-95b3-0a6e4ec7d6f0\na691abf0-4774-4f7f-9b7a-7bf158b9ec65\nce474d74-caf6-455d-92e1-ba10e24d2414\n1ca67367-9d51-4e4b-bb0f-d55a0f249ac3\nb80570bb-91f6-4b6f-bc54-9b0b3405c51a\ne35ddb31-a8ab-42c7-bc4c-316873e35b57\n472910a6-bbf4-4d04-8d7d-3626d5748cbb\n9af602e9-c8fe-4434-83e7-888eb12f0d46\n81e0ff5f-e6b5-4671-a85a-a9882451a8fd\n6622726a-66d2-43c8-a091-725aa81db217\n3df9550d-0546-4d39-9968-e252eec8e2a1\n9cb0a503-64bf-4b72-ba1d-1b7ac5c88513\n3df68163-fb86-4e7f-9b57-f3fbf916a0e9\n04a59ede-f682-4719-be82-99198a1f2368\n79cabefe-d084-4d88-b5d8-ab2f271f9ca3\ne0bcb044-e6d0-436f-a24c-4178cf9b6c7b\n003bb4f1-fd28-49c2-9625-34dcac4c3b0a\n54059cb0-4c32-4779-a91d-b9571b205ab1\n6d02a9d7-07b0-4123-88b0-0e24d49a9000\n12c0b36f-9758-4c38-9f18-90db696fe469\n0e240094-ded6-4478-acfd-28de52a44261\n0062fd92-8901-450b-967a-25f4d0d5f833\nb8b74242-3274-4e30-9934-e22894c09269\n78895622-1995-4c73-bba9-c4f5e761ef4f\ne2ae7cac-cd8e-4703-8db1-6727f24e9fa9\n1dcf3d7a-d824-4ff4-887f-0d3bb4b18b64\n642e461a-8344-40b7-864f-a8be3ff5e5c9\n2a1ab452-27a3-486b-9bb1-a1cefb92d830\nfd3ad056-6779-4835-b4cd-85698b81f09a\n1a69b409-bda0-4b0d-ab98-569ccb28c146\n54749ae2-be05-47c7-a6a7-31730bbcac1f\n58b3498f-0a5a-47e9-ac8d-2b8acbb0872d\n112c6a53-1ce4-49c9-a71c-3793fed802a9\n9bb8a22e-538c-4a55-904a-98474ac25191\n04bee1cd-e9ea-4502-90a9-d8aea17455ee\n4ec4ee99-db48-4e42-9573-d9aa657c985c\n3d43a1bf-b3a7-4c97-b05d-9ea4bfff642d\n2910dc20-ab77-43f0-8dd7-b4242e289434\na7905345-6d65-43ff-a5d1-f2ad4358e7b1\n088bf747-cc53-4f71-abdf-95df438cba92\nbe3e3f90-62f5-4076-ae0a-5b61e69e4424\ne2399b9c-de46-42ba-a799-ebdbe75ae21a\n32f6528d-3946-4612-bd6f-96686c6c69ef\nc9750465-bea9-4b9b-ae76-8b4aa067af6f\n7fa8ddf0-0e74-4786-acdc-9d9078b3b751\nf53ee46d-126f-418f-9ff2-c8308d024fb1\nc4dd5400-f8d0-4dd4-89d9-e047cb76d496\nb61eef38-c4c9-449d-8e95-653fce536942\nc9458eef-4307-4639-9dd8-965e22ec4a0c\n622aa757-d068-4492-abe5-73124a8b2cdf\na83a79dc-3ecd-47fa-9327-cd2682d84312\n27dbbac3-f271-46ac-89bf-d27535c34663\n44dcc3cb-b65e-4a38-bf8d-bb1187fbcbc4\n321e8c6f-1cde-4d0b-ac68-40d9c2f5fce6\na531d92c-5cda-4dd0-b817-4875f4f6508d\n22bb5c45-9e5c-4b44-8ee4-9995177b07e3\nfb14912d-be5c-4b24-8cca-8097a28ea22d\n88b1106c-0067-4eca-90e4-3c36e92a42c3\n01e7f353-85f4-4f16-9749-a22ad1bc5bcc\n31808343-46d7-43aa-a919-587026933e5a\n7c0c8b55-f8cf-457e-9323-dadf2f6b9433\nfdc40a8a-04c0-4bc5-8172-0cea513c5eb5\nfe3c6120-796b-4180-98f1-b7aea8494668\n53c49456-faee-4e26-88da-6db6243f85d8\n18c6da23-b2ab-4b1e-99f8-8cb79033cc45\n655155a3-fe16-4881-b619-85359924c768\n782112e0-bd0d-4d5e-a6f6-fb30aaf3578d\n046454f2-e6a6-4e60-b48e-270d28c77a2b\n7d6258dd-76d8-4acd-ae20-d6ab35e38568\n96d098a0-b2dd-46f0-a983-328c2c4a74d5\n6dc5db79-eb01-4985-bca0-8e99560a0836\n74cd8f2b-a851-47bd-9181-954a42abaad9\n1863cf5d-c1ba-42aa-84c3-a563ba68f224\n3e776047-e905-433e-81c6-f4089694c242\nb9e8b6e5-27cd-4645-9843-40c86877b17f\n781db35d-9e4a-49bc-ab94-26a25ec33724\n0f8de849-7305-42c0-9d5d-41a9b39697a4\naf1835c1-79cc-42c2-a896-2a25028feb07\n6dfff25e-541b-4c86-8dca-65ca1b1c5848\n339b5372-c623-41a8-a9be-69e589705ed7\nac106d41-5455-4555-bcf3-42b4c24fac02\n8ea3c27d-fa4d-4195-a321-57915a7ba61d\nb0456985-23e8-4c82-b655-f89ac494aab0\n8dbd0815-f032-43a7-8dc9-0e17af2309e8\ndf77716f-cd5b-4193-bc6c-859aa96e6d60\n3c78fb02-416a-45cf-b7f7-998a1617d29d\n489e0ae3-4979-4df4-8f99-44fdaebae1c1\n30320d73-ef27-4ae5-ad44-1fe2b2614ea7\ne426b156-ef80-4142-8909-6133d8e09c8d\n3e1e92df-71c3-4b37-ae0e-a8e6323472e9\nb27e72a6-067f-4a69-8752-0077fe1a63c3\n9170f46e-281a-4577-98dd-844c9801e0a3\n22878238-4afd-4d3c-8c1d-187b51d88a1c\nc01a61f8-3f5f-4fb0-aae6-6ee4f82aef68\n77c8d358-8107-47e7-bcfc-6704f8d2581d\n255fecd3-d07d-47bf-8f29-4d21ea98aeb4\n4beca675-198f-4bcc-9ebe-9bcb653aee3c\n5282d330-0ad3-49b8-8ba0-33d4180f53db\n00840c30-6203-4f8a-88c7-b22495541748\n1a911f09-5e1e-47c1-b256-e23d3c67c65f\n485a49a6-f7f4-4957-8e3a-a35399d41bc7\n5b3e0ec1-1403-4bfa-a0da-c366bc1096e0\n97acea49-ce0b-40ae-9cfd-4305d1134971\n04c03639-03ee-4ff4-a7d6-5a6b5f1412ec\n244747f9-da4a-4aea-9eac-e7d4dbd619da\n4952fed8-e417-4feb-9b07-57391dbe6c3f\n696b7325-6cbb-46cc-81a1-7f3356ad7a3a\n71fd72fa-9bef-4eb4-8645-94d6a532ed80\n9791f2d0-7136-468e-83a2-49265381293c\n05d2f944-d83f-40fd-afba-b5410f925372\nbe37f8f8-2480-4715-90bc-78ae2ec174a9\n0fb61cf5-1137-474c-b801-ca28afe76563\ne67d3b37-e5dc-44de-8b71-e8b8cf6426b7\n2598540c-d9e2-4c0a-aea4-62fa3dd592b4\n394b51d0-b596-4420-9938-f596e8b81171\n24aeda4f-d7a6-4209-a9f8-f0af3d26d3e8\n783ba647-a64e-4ec0-b780-b2e4d1d3816a\n9d9cc566-adbf-4cf8-a332-9b3ed299f370\nd34a9357-7882-4042-af91-c7e40d670b56\n77af8f24-24f4-4558-b65c-52cfdb0302c9\n5c0449fe-0133-4f11-a3b7-52b7f77ab4dc\ne7dfe5b8-3d90-41ae-8cfc-a16e4ca83d48\n547d762a-b66f-4f1e-9bdb-d9b87d3d58b3\n37671886-b878-4b71-b4de-2592d1c9608f\n4f956211-7c3a-4755-ae66-ee03f6953b32\n148a7c0b-9cd3-41da-9168-ff2df0c23555\n0b056c0e-d68d-4954-87b3-6a725af89798\n0510d9b9-4ac2-4827-bd01-a02cafba265c\n5f49f30c-9744-40c7-a379-d8c4c77425dc\n9ef1bab7-3bca-49a6-a809-e32bce4764ea\nf58ac004-31fc-4742-a1db-0deff648719d\n2175eb03-88c2-468a-98c0-a09ed5aa2182\n023347b0-b81f-43d0-8a77-4e9ef87e1658\n7c118ef9-2774-4625-9bbe-15608014619f\n44ac4de8-9874-4692-a583-a278fa5ef1bd\n96db2deb-a4ea-4e6b-af20-9ce95776b0f2\n924b94bc-821a-4105-9d2f-e3c2d6188413\n526db2af-845f-4f19-b5f8-24892a14fd82\n2ad69b12-1b53-4351-91cd-dc004d19655f\n3dfd0c40-7d21-4a50-b6f4-0fc6c2d957e2\neec5e4a5-b197-4115-b03c-c4ba11c62f45\n8b737f04-aafe-4a97-8773-bba4a641b2e2\nbc267bdb-56d1-4249-9d75-86b49112da7f\nd5619a9d-c958-4917-9c59-c1f59841367c\nd50f9a5d-ac00-44ff-a250-20bc8b430639\n8e3146de-bcb8-4959-b237-34c7c3fd4637\n294d888c-b1e4-40b0-b05f-9ebfc5953eb6\n65d6fb23-926f-4bcb-af45-cd66d924390c\n10b985f7-d6eb-4d99-ac82-be1c23f6e792\n11b2271a-b3da-467f-a885-91b1b63c57ea\n0bf5f8bf-1bd8-4e78-9f4d-6563bfaf87e4\naed72b0f-2448-428c-995d-6dcb6b80f755\n92727620-d2f6-4eef-a726-b71d497a3b42\n2201f539-5591-4be0-8ace-facd58194e62\nce63fd12-89d6-417c-89e7-10c9e192ee64\n74b599bb-dbc7-4efe-990d-793fd3dfa1b0\nb889c43c-89d8-42ff-9653-bd3a7b354e4e\nad90bee8-c117-4dfc-83db-6c3862de02a6\n0269622d-60ca-4fbf-81d1-1b32667e31f1\n9796912c-193a-4dbb-9abc-da6077223c1e\nf238dad8-e979-43b9-9fe7-129aab7cc794\n4fcf243e-9f63-4e7d-8b4b-fe56a7ba90ae\n8b79fd00-042d-4e6e-824a-d964d5202798\nb0dfe2dc-08fe-4d09-a91c-4dbe698dd20a\nf5336399-59e1-4cd9-9aa6-8d6b4175bee8\n37132688-9540-4868-bfaf-2f1fb6dd6b17\n8c2fa009-6a2c-4c0d-a914-c72330eab1d3\n827cc9f1-36c5-4b38-9c17-ae6d0dc9336c\n7223802f-64e5-474d-90c3-e0b9c922f4cd\nf186e3fd-d4be-452d-9471-11ca3967ff0b\n468bf2b4-dbc7-4514-abc2-a60b334a7632\n3115a1e6-3434-4ebd-9cc9-bf3c9b71f6ae\nde0f1592-7b1a-4657-9cf3-fc90cfe0d7a0\n2fa27fb2-a4cc-462f-8637-6cb897d24e6b\n00b6acbd-e23b-4d5d-b150-267f310d09ab\nd5331fea-d452-4498-855b-4d0fa2970c9e\n283214b3-b7ad-477a-8349-937cb9a7ca88\n9f65ecda-3fd3-41b3-bc62-1500f2d19d91\n0bb30175-b48b-4f5e-a767-847266fe6c7b\nc0281307-c07d-491c-93e4-990e2c1eadda\nfe6e6592-4db2-4c62-9898-031aec98006a\n31b462eb-d758-42b0-9a17-554671910bb2\n00b66b91-6eb2-401d-b3c4-6dc421d1601a\n47843a9d-818c-4f84-9edc-343103c99537\nf4983c27-ecb5-40fa-820a-d12e2fda53e3\nab4e651d-533b-45fb-8d22-74706be18d0e\n74b23b46-0164-4955-88cb-8b2e52e65abf\n4b649ca7-a6b1-4586-927e-082fa13695c5\ne659abeb-3046-43bc-ae87-b866a9b150ee\na47e6672-9706-424f-bc10-5cd6ae6c38f6\nad130991-e632-42c8-925a-6989f7578e8b\ncaa7d2d2-5570-41ec-9e72-a7b5c6ebad38\n8fa34809-b7d3-491a-93bc-54205f0f7a8c\n87bf4004-7562-4a54-a2c7-88dd3ad41d32\n655d72a0-c09b-4bc4-bec9-6c2a442aacfc\n210101e8-d0f3-4fe9-8784-7ee870441634\nea6a7195-828a-48f9-9df1-e85d8cd60df1\n70da6f73-cc8f-411a-a92c-17226a2d4cf3\n7b736f0a-2501-4978-85d2-02ac4f3f14f0\n29cfe092-6655-4adf-a09a-d91fb26bf844\n5b1707bf-d2c4-4d0f-8049-ecbb1a24c2a0\n37e0f942-cb68-4584-a0d3-31e4e9028ee8\nfb944285-04b4-49f8-bf9e-b1f61e5843d6\nc12815a1-0f3e-4020-9202-8ed9a973e1da\n5094d163-6441-45ff-990a-055e47140498\n26386c8c-18d3-4641-91cd-6c8572ffc586\n68c7ffdb-7c05-43e3-921e-43c3cf02b4ee\n8bc45bf1-26fb-4e2d-8a9e-6f50269b71f5\n8f020a8c-b044-470d-a8cc-42f6858db587\n83a3eaf6-fabb-4f4b-bfe7-845e7fe142ba\n89578d98-eb70-42cc-95a0-108d4d22121b\ne6d2c788-7d13-46a1-bdfa-0ab5e397c277\nbf0b99b6-2228-413b-88ad-bd85e8442055\n8928770a-70d3-45bb-b18b-4e1f51643578\n88dab0b4-eaef-4b5c-a5d1-f67bd408fbed\n7699600a-0123-43cd-8523-cd9ff59e278b\n939612ab-e67e-4f29-89d0-a8d806c3bf9d\n3dd29dd2-e755-403e-8a07-262061c7cd24\n1abd8710-2d12-4c25-8249-df16a9ae36fd\n84917ca6-bf2a-4965-9c9a-5c44ba352c79\nd54aa802-049b-4935-b305-3f77f6a41350\n57121175-0a86-4d63-ae8a-0176f1fdafff\n7b0be2dd-06f0-44ca-b100-83ffa3910de6\na6a49894-54ff-4618-bbd2-d408a10dfe1e\neb70cf9f-3dcb-4ee2-be68-6e14a94167b8\n1a08134a-a335-4592-a772-be4e48d10657\n3f75244d-966d-4307-904b-dc2ee74e7be3\n2d5462ff-cb48-45bd-b052-e9666a6a5e01\n712432d3-bdd1-4cce-9e78-4c688c6cf096\nd45f622a-f60a-4c20-a1f3-01985e8d3eb4\nf30b8a2d-a7ad-4fcf-a343-964dcecc4a2d\naa972a64-235a-482f-afb1-c9bd39152c7e\nee4e4a24-3ef6-4b7c-af35-af5b765325e6\nc2e06093-ba6e-4ddb-beb7-292cba3af7ca\nbc8c732a-8ac9-411d-a1a0-1924d1269f58\n95c3a43c-ce58-4478-be83-d8acc40434c1\n0d4b1838-f441-42a4-bb9f-6e027faf7071\nddebc8ac-4513-4b4c-886a-b7ff169c747b\nd0fff79a-53a0-41bc-b01c-a521063e47d7\n3a83c39f-98ef-4a0f-bfd2-861791628580\n28086e5a-75f2-45e9-9542-c0bf93d18249\nab540690-2dc0-465c-9d1a-083873ef099c\n78b1f605-bcf0-4af7-b94d-9c1fda4a9f52\n1f3fcc5b-ad1f-4e1c-8c7d-88b7b91c8507\n88aeabef-ba3f-4713-bd23-30772a5e8147\nc2732e42-0cdb-4756-af09-205674e40e30\nf22b57ab-f8f5-4964-9c19-95c0f5d22c21\n946db7bd-cf39-411e-a930-d2fd0f45b957\na43566f5-b829-4e3d-be31-bfb450a856b3\n2d64e93c-f2b2-4cc1-a862-a36fc809fb12\ne121a164-9f2b-4230-96ab-1cac7273d833\n39dd9c65-a4fc-4d9b-ad13-0f29ea143e53\n0b88f214-08eb-4f14-8586-abd3dc2fbcd2\ndf6dc3a0-ad97-49a7-934a-d7c96eff295d\n39005909-2856-4452-a685-4503a99a10ce\n8f267873-3298-4742-a9d4-9effe7a0ba21\n9f78b21f-bf7e-462c-a1ca-37e024f11981\na5dbc7f0-6a0b-480a-b603-a5219e05aaee\ncacb732b-a0cf-4e5e-8dd8-491e8cc30415\naff720fe-1e32-4ce5-a6c9-b99dceee95ac\nc932a8be-d8b8-4c41-9780-0cabd4a1be08\n9c3db6e2-27f9-4eda-b94d-3b3ab3139ed3\n9d03ee0f-b589-4c4c-ab34-8e8c23b1bbf4\nb529414b-4c4e-4edc-810a-9a5fc0ba16fe\n080ee166-02f4-43e4-bba1-d6954013a95d\nba59bb3a-ce96-453d-850d-1861a58b15bd\n0a6ab446-09e9-490f-979b-43619d7a1a56\n62e677c3-3aed-4e0e-93c9-34ea45ba38a6\n518c0139-806a-4b3c-9cca-54c139a1867a\n7ae77298-351a-414a-95ca-7f230b305f7b\ndca77878-e756-436e-b011-a33ca42203e1\n4a4040e7-5ea9-4ada-b72f-9b761ca24ab8\n49141dcc-87a9-4ca6-99aa-da170624c132\n06d2f6c0-ec91-4421-a3d5-7cad9586e01c\n092ae51c-8419-4a3f-a573-25f7dc3389eb\n9ba388dc-4bf5-4356-b6d8-dafd5bced931\n547af0de-b0ef-40fa-89a1-ff0a99507109\n1161762d-09e5-48f8-8794-9d8afa850cff\n231c13c8-0de0-4f8f-800b-d4d62cba5432\n27d46bfd-2035-49e5-9f8c-b0425f40a8f7\nc821248f-ab11-41cb-8baf-1273926f9a0f\nb96f785f-082a-495d-98fb-a253f9f8c5c8\ne7f7d178-ac3a-49b9-9399-28935b4d8404\nf7f6d576-e054-443f-8139-7ef6e2e032a9\n155b2f85-083b-4939-a04e-3fa4f1de16ea\n8af17fac-c2d2-40c6-96f4-daf24a302bc4\nc4eaf48b-944e-4122-80ae-d5c878fc421b\n2eb1613f-8a12-4c69-8b7d-2065812ce759\n83006ed8-7d33-489d-8d5a-36405869d1c3\n4593b35a-6be9-4399-8bac-3101a8b65b2c\n70f3c999-e719-431e-80bd-5e91e00379f9\n40beea16-6452-4938-adec-5f3b95a758c2\n40b5adb7-f6ed-4ff1-8c9a-4c459aa6ad73\n54e5071d-f091-453e-b36f-1bc27e4bafcf\n575cd504-c6ad-4f1d-ad40-a8d3d0a242f8\n24ec27c4-5ad9-43c6-a2a1-831284b77344\ne71a5a16-8d0f-4ef3-bbc6-8333580d2d75\n7b591ebb-de83-40c0-99a4-595c6bf3a1a7\n16e12c2f-0b1a-430c-9ed7-922c29269acd\nce8fe6f3-dfde-4430-9dac-bb9d690435a6\n35f0b893-cc73-4124-a2a7-b761029db2cd\nb44b10c1-c208-4039-a271-0060ea04f1c3\nc1985f0e-6053-46fa-b543-c323b6842fa5\nbc17ced7-3959-45cb-906f-6a74f5c895d6\n7d258419-5610-40d4-bf5a-c36f9657adc6\n5aa97ec2-d88a-48dc-8555-d8f4b983f78d\n66f3ad37-55a5-4cb0-b3ed-6415f16b8606\n4211dff9-7b04-46a3-bdb3-2f145a5e87f2\nd927c178-db32-4629-8aa5-4c37ffe1cfcc\n6868cb79-d688-4d5e-8403-90537ea94e4a\ne08dd108-a2a7-4ec7-a88f-045b9c407afb\n73aeb344-9066-4912-a817-ac02800e9266\nbf661b20-414f-4886-8f66-fd2c902728bf\n6fcd69af-99fb-4be3-af39-e4405fa6e0a6\n98cade8c-5c79-4b14-8202-cbc70fcf45a2\nd2ebb336-ee55-4dc5-b4c1-889339bff2b4\n868035cf-7a44-4ffc-8ec1-bbaefe10ee09\n57b8f7b1-da8c-4e99-a985-7bca6ca298e2\nb95624f8-b9ac-4465-985f-2c4fd394aa25\n47d9a7fa-77a5-4524-a9f8-85c4e0814779\n2498f042-2ca6-4ebf-91b5-edb6ce33910c\n8de57176-fd76-42dc-865c-7e16669885fb\n1ce929c6-bcff-49df-a05e-3b5fc7bc2ce2\nee2bc328-340e-4972-8639-e260c95e1081\n517cdb38-8c51-4436-bb66-5e2a0de3a123\nce16ee48-fc2e-420d-aa9d-cdb785a22e5b\n8f306c46-0a59-478e-b48e-b36177b1a579\n24c766a1-e468-434c-974c-7eb9a18b95d7\n6dcf9df3-dddb-4a4a-b553-6de96e934cab\n71c1b603-87d1-49e0-a6d6-0ea24c0907b5\ne8a74aeb-e76b-41bf-a8be-68a98a884d46\nf24d107f-bc76-47f5-8b57-5fb3cd6ba27e\n57002fb2-9a08-43e7-9929-526e4aaa69eb\nf430a182-291c-45e9-983d-142a6ae4c68d\n9de8a4ce-ff57-495e-a283-280a9b520c9b\nc5ff7b36-f726-4ebf-a946-dd92d84358df\n73db9759-3190-4ce2-9440-9f68ef6ac776\n312fe65c-ec1c-4820-aba8-841c656c7af2\n6151ad10-d32d-4aa1-b6fb-7ebc45355aea\ndd26f389-8121-49a0-a749-855b2a52febc\nd5625cb9-b476-4407-9c30-5ccfad64c384\nee924c26-6b01-4a4d-a812-b6d016556d62\n367c98f7-9f89-4963-86b1-00a0ce7cd8a1\n2688ada0-1b6e-4eb8-aee7-b84ecc620be5\n41c5c222-b415-4611-bd7b-1eabb08bba1f\n3ff76949-c2b6-40a5-9785-3dde9d185df9\n3b60dd63-60d0-44f5-af29-3aea8b410b56\n9a7ee9dd-b333-40fc-9efb-05c8c079d263\n735804c8-a4fe-42fa-a30d-67555bb27374\ndc6b0271-f52b-4f1b-bb75-717310445ca3\n973f35b7-1399-4220-a2a7-e459705b44be\n45fffafd-0bc9-4af3-a327-f465b2011e98\n3dae70ce-fc3f-41ff-a454-d0c18b88c668\ne95da7c5-8dd9-4bd1-8be7-0e9f7a8e1b80\n6cc8346d-018d-4a77-9172-a21a5a7e7ec0\n62c7a894-ed4c-4742-8b31-b5035471506a\nb5a9f977-624e-4245-b2ef-21cf699a1ce5\ne0766423-f44a-42e2-8227-511a2dfc511f\ncdeff6f1-4a7f-43e8-b622-207b096cf97b\n9f9be839-18bf-47f6-bef7-4f43e8cf6201\n4d0e5a6b-102a-45b9-8648-b7083836c56b\n160804c4-3fdf-41d8-bc6d-e67843291f50\nf2d8ea53-0bd2-4eec-8635-86f1ea048ed2\n11da27ae-c622-40a3-b60a-659eaeb58fae\n8ea378ba-d26a-4cf0-9f8b-2ea7db2eb4f9\n8ecb77b2-e2b8-4ab7-8fd8-1cc82a6fbd23\n0293b8f8-23b0-4091-96aa-2a8ab8224f12\n74c38f99-39b5-4a15-9166-0153e498c2f7\ncadf11b3-2902-49ee-98dc-03d3b94cd1e4\n04ce4cbd-a871-4e58-9ea6-74c0c06988b2\n547f9c75-f26b-4cea-a4d9-662ab6874c85\n5eb44228-0650-455f-a54f-b9198c1f4cc7\n56525620-feb8-4f08-a6b1-1d52f92b1754\n649b982b-e04a-4318-8889-1688b1cc0bd9\ne7e3e649-3dea-449c-acb5-5bf894f8ec4b\naffb4791-c12c-4d1c-ac56-f0b208810934\n8f374f7b-b3a1-4801-8703-e4f7b4d67c52\n1f379428-dc5c-49d4-8ec1-559f8a61137a\n5a55d2f5-c7ae-411f-9b9d-f90156f3ead0\n097644eb-c916-4153-bbf0-14717c984801\nc205d2f6-fbbb-4183-8377-7d67ea337c40\n6a7d9ca6-5afc-439b-8e0e-8642c4f10689\n0f98c385-3ec5-41e0-a70d-9827a41af930\n55f4b91a-1c75-4903-86c8-5b1cad3b82fb\n3450544b-5600-457a-a15d-1dd8b2114622\n640d7d09-5520-4ae7-b654-7e86bba62736\n48cf469d-9592-49a3-8f3c-fc890347324a\n03b78381-e4b4-44cc-bcad-6e3fac2b809a\na0147060-6ac7-4028-83d4-f37da61252fb\na28d7ec3-c1fe-4395-b987-3c018481cfb8\ne1703fd9-4e96-4c88-ba6f-a4cf640c54cc\n0c7ee5ba-96db-4202-a785-0b6cc39e1289\nc9035b75-ef4d-42c9-a8e7-5fead69272a2\n52fa1300-6776-4811-bd0d-6eb07fcbcec4\n74fa6134-3bf6-4444-842a-a1fbf290d76e\n500f13ea-5053-4a26-ae11-e1abdea23048\n9046b691-3b39-4114-8ace-ec34ed23e61f\naeca87ec-166a-43d1-9abe-a7a2d575af5b\n699e80f6-967e-46f0-821f-d6ac1ef001b1\n43851fad-a685-46c7-bfd8-ec47f2852113\n05bb3b1b-bed0-4692-8965-740516a506cb\nc54a6a07-9d7a-42ee-9c19-ea3f87b0a46c\n420db49c-30e1-4a64-8990-ebf631355f2d\n2d6b457e-45b6-4f57-b6b5-ddeb2c1e1a62\n5eb8695f-f737-45a8-af42-88e84504ec55\nca0bbcb6-6dd6-42d9-bf2b-bbee7f0a5aa4\n2b355d14-e653-4f17-b87d-ef99c6c8e686\nd336d827-c579-43ce-82fd-0d03888f7dfa\n0b991ca3-f153-4021-a40c-5daa60ca28ed\n22fa0bc3-549a-4d83-bc95-7667a6ba4722\n928d8104-8436-46be-9bbf-03e388d53527\n956a407d-18a0-434e-a18f-dfee92d30b6e\n7e7a0d66-6ba9-4e69-8895-4ee5b4f28b78\n03f9951c-a82f-4836-9c27-2a8e726a019b\n8aef42a9-c77a-42fe-9eca-ea57b5dbd5a3\n5ebd0112-2d6e-41ed-975a-33de9033605a\n376fd328-b62b-4b22-9fda-2c5b25eb016d\n20e286a5-5df3-4369-942c-0fee110e5358\ne1e46790-ddd4-4e5b-bed3-04b38f6ae9fa\n88df43bb-a685-4627-af14-5c5f9c78da9b\n19858959-4f4d-4b17-82da-80335310422d\nbd3bec78-c141-4d8c-80a4-c2142ff45a04\nf0fae38a-a83e-410f-86bc-898d2a25441c\n480a82ad-b419-4cee-a9f4-0badada524b1\n1902ffa1-61ae-4ac1-a49d-ad7bdfc8b584\n7db5ccd3-e4ff-4b10-8f2e-96a74e17a351\n84a88ab2-5521-46a9-b4a7-b60493ab5194\n651b1f9a-81e7-46ad-9588-cf0a93a47f24\n34c846ca-86ca-45a1-93ee-bc6c52f66466\n453151a3-5aef-4e2f-bd3f-1090bc3043e5\nd5a8d7a3-a5e2-49bb-a3e1-b1b78fae514b\n141e16a0-1a2c-43fd-8a66-e05d02ee84be\nab84142a-9498-47df-b629-a92ed1ee6d59\na5061705-a89c-418e-86e2-c8fa5f615143\n27d68f9c-0fa8-4a1f-8aed-8f63928e2c84\ne0b8a9f9-2360-4b2d-b482-8e72a4353ca8\n6ebf1786-c8bc-44a1-8f32-0084047c8899\nfa3d593e-4119-4a70-ae85-9eaa6433973f\n5b149eae-9a41-47ac-b3f8-bc18218a2020\n1e9f5ab6-a426-4d82-8589-e87358fd6463\nc6909e5e-654e-4130-b562-187dbaa152fb\nbec00d20-631b-4ac2-a0a3-24261048ac01\n3126a93d-5879-4ad5-821c-7d143c74aa7a\n6a1113b9-24a6-4ace-988d-d45e3071ce45\n8951668a-3c57-4b77-b13b-e6a34ba8e742\nf4b467bc-eb84-4978-a125-803d14cad967\n646dd43e-7a56-436c-a7a0-3d77c0060934\n1ed77658-fd6f-46b3-b645-f74d168a2faa\ne8fc5dd2-3bb7-4e85-998e-48a0a8115740\n2a30325c-5ea3-4368-91e6-bd9205680b56\n7271e6c5-2336-4192-a38a-ab3aaca455c4\nb0e8835d-3de0-416e-a3f0-51763158ec16\n8ee5a6bf-34c8-4c39-a4c2-5f92f322f786\n4a29439e-160e-4068-bd4a-d47740cd3bae\n2e4e57c2-9f07-4cd3-ac6e-923bdda905fd\nddb89c51-cb59-4e30-987b-b5f86adc9704\n3c21a18f-1333-45b0-800f-254196fcea64\n80182d18-4c21-42ef-a1f2-6c503c62b9fe\n0d39cb86-09d1-4e67-a1fa-779c3d860a0a\nbac0fc3f-c722-40fd-8bec-a798569d3078\nbbdf4cc9-0271-48c2-841b-d976eac28d42\nced6660b-5394-47b5-bb75-2b8cedf9562f\nc83d97de-187d-4905-9540-541330a75bbd\n7be6cd7c-65ec-4752-93fe-b6736966196f\n40eebd08-6e1f-4414-85f1-9047da86ab7e\n3bb53bf5-8210-4a06-a8e2-338bd3f4972c\nc98f675a-dd54-44f8-9965-7d6f732c91dd\ncc111fb6-5434-4be8-84ac-686b5ca5be0d\n01bf6a3d-a230-4a9b-8601-1b58d5bba5e6\n9c540d9e-3ad4-4397-8471-4883c1370280\nf0f62b5f-335e-4747-89b9-03cad7ae2798\nec329fc9-c56e-4435-b168-cbeea96e1cf2\nb18080c4-b68c-44e1-9191-47d97e0dd2ea\nea33ecb7-66f4-4a3a-a6af-5e28f6cf7564\n3231deb1-edd5-412e-b222-ead587f7092e\n319f59e2-75fd-4683-82ab-eebc9e49e794\n3e565590-36f7-4995-90db-a387750d3934\n564821c5-c7fd-4651-90b2-2f67c3753b43\n6e3cfce5-a69e-4a19-9bbc-fdcceb31c9ad\n6de44a43-6a5c-43c4-b991-bca788552c72\ndb0665c6-6204-46bb-aa88-72a2128b1ab2\nb51fc233-bd75-409a-a3df-980bf9682a8d\n162b7dad-6c61-46bd-9be1-c341c475a3bc\n3b6f5b45-8203-449d-a614-a06d2b17134b\n8309c185-1c21-4f5c-9af7-333abaeca29c\nb116f703-5788-4b6a-91bc-133c6decd404\n9f76f63d-d32a-4697-aff2-7c80515baa52\n7fdd9dea-12be-432a-8843-240d311e3f15\n94e8bc82-010e-492e-a35d-72dcf57b5908\ne579cf42-cb67-4815-9bc3-3afa329ed76d\ndfdb96de-863c-4080-aef3-e640adbbdcad\nbc6ea7e7-e023-4d57-835c-48ed75d042f3\n58ce1fd3-4128-44d6-8377-d58131ebc04b\n5be992bd-00f2-474b-b440-a0094c1dd85f\n204dfaf3-be81-400d-bcf4-5feb9fd2ba5b\n15bf9362-6834-4d07-86e5-4756d72baf62\n6de36eb0-b0cf-4bed-8f9d-772baa4955db\n94962d14-26e4-41b0-987e-4b95ae4790a2\n7783e923-d6d6-4e66-9fcc-2c19c4fce4cf\nb2632458-82fc-41f3-b5d8-fa0e1eca9515\nb4118446-f4fb-49cd-b7ff-2f792e6f02de\n19caf779-f3c2-4b1f-9667-55eca5cd4467\nd1bfacce-136e-4816-88b8-9b00e2001e17\n2399a628-0c92-4149-92f0-35fe57e853dd\n13683bab-2059-4c77-a274-5df00108f9fc\n71229bcf-0819-42fb-90c2-ae1490e0eaa7\nf9e965cc-33f3-4f90-87d8-f4591e5a1d01\n455723f0-d96c-4386-83ad-3277a9b28c9f\n389ad6b4-f837-4996-ae62-55e950258fb5\n6c44106f-2304-4ef0-b354-79f58b351a64\nd3753631-e840-4f19-b25d-00d0995ea114\ncdad5db1-6ccd-4d3f-b8f7-0c4587a253db\nac6798c5-cc8c-47e8-add3-096d1eedb698\n0316601a-fe8a-425e-89f1-da3fa53446bd\n2ba5ed36-f797-459c-a9d2-46e25c32e28b\n61e2614d-1867-4874-8b13-176842b33328\ncf6b10ef-2839-4f77-b556-33f10598c30b\n4a393f7e-45ac-429c-9935-08476d65ba09\n9bce9dac-2643-4057-b1c9-4978db63172f\n216680f3-b7e3-446b-ba57-72b8cd28afd6\n5b74ccfb-18c6-42b3-a1a2-37aaf36e4831\n6798dafa-7533-4849-b86c-110346a12d2a\nd2f7efd0-3145-48d3-882f-33553b00dddf\n6fbf2e5e-b01c-463a-95d7-abdca7955231\n7070babc-f61f-44d3-86c1-d6d7a3dfd512\ncbe4d99a-df89-4744-a536-50f53b00d0b6\n079392b1-3c69-40b4-a2ed-56a1e410efb7\n3bc88a43-2eed-434a-8c2e-4f80f2e2ebde\nfc35b8bc-5da3-49bd-a241-1110599655c8\n99d3a882-4f79-4143-b7cb-b8db84762ee5\n4f77c961-9b0c-4d57-b3dc-05441c9d3489\n564cb1a2-cb62-427c-b107-cf839b8c312f\na5031512-ef73-4586-9335-57f2e8a5bcf1\n70ad1bf8-d1ad-4285-a419-a3e4a6c0786b\n125a6ff4-55e0-4e7a-acba-fbfd24510794\n9df578f6-1634-421f-a145-75db79cd70cc\nf9282d6e-df97-40ce-8513-ee5fdee31fd9\nadb72e73-b3c0-43da-8db4-452fa4cd2aaa\nf39bc11e-10d8-42cc-b524-cbd95a7ea207\nfce14c4a-fc9b-4bdd-903e-aaf331a4c424\n2fde41b8-710d-4500-a220-aa746f53c2d5\n9d7b2dd6-edb3-471a-87d7-bad62e3d86e2\nad5d2d99-34ee-4fd5-b634-b002af33f903\n86a2128b-acd5-49e0-a8ad-24b127d0ca0f\ne794c956-c698-4ab3-9add-b52f46f79cc3\na317daa7-b6ec-48c8-8cad-268343cf39df\n68b2b2ea-2f77-4879-8901-9fa5a00bddc1\na24414ed-03a0-40cc-a67f-14b6aae19dcd\n5b2936c9-b697-4feb-ab9f-051ceea77eef\n18587820-47b9-42df-8013-53f4a5fbb71c\nd3db2577-aa8a-4e0c-ae47-09e75879a349\n1a414179-498c-4a13-9617-c725383bb573\nffe3c8ab-305d-4177-9233-6457e8e7c6e2\nc63931ca-c56c-4d11-bab3-2524d16333f7\naa1af110-0cdc-4484-bd1f-d629f70c16c2\ne0e24261-4fc4-427b-a23e-fe194f9e43c4\n085534d0-9ebb-473d-b4d6-aa3b30787a59\n29613d12-0fc3-4045-8fbc-fd88f18d158b\n45345b40-9904-4fea-bf79-7d144e643029\n3779711e-0080-4d78-90e2-5b66a6ad9f55\nd65f21d9-0822-4324-a4e4-2f1869f29fc4\ndf5a9d46-0033-418b-9808-8930f644d046\n830f92cf-6747-4016-8502-2ee66eb7061c\n3d40ad0c-1bbe-472d-985b-7bdf9e7f7d3e\n197e56ee-62bf-4c28-9e89-f88f5a850829\n326f7cbc-f019-4c39-a3b1-15bf9d26563c\n3e6aa8eb-5ec6-4e7d-852f-a263ca39ead8\nbe920410-e77b-45c6-a142-a2e1bfdb7ea9\ne1811b42-051b-478a-8a9a-717b99458926\n58a61bf8-48df-4e72-8142-233c30d3e104\n74a22d4d-d2b7-40ba-8c76-7f33eed59bc1\n4a3467d0-1333-40fe-868a-357d43bf7032\n0e455d84-6d5a-4d51-bcc9-286e78af62a4\nb2c793ae-3d4d-4c53-9a19-9de5cc22c82d\n38362469-9048-491b-9c57-b3a4aace4f61\nbd20b0af-c881-4663-a5bc-81a6f751a62d\n474dc1c0-6b9f-42b2-9278-76e7c2442db1\n2cf44636-847a-4985-bdf3-e45556027a67\n77bd577d-3cb2-40b7-8be2-2bdcced53fcd\nc3fae9d4-c614-42ae-a6f4-449fa2f1530c\n613d2bb6-5789-4066-a5a3-55bc603aa7a9\n878d147c-89ea-45a6-8df0-b988144de951\ne964a011-6136-48e8-8b3c-eca3d9a73dc1\nbc70ba39-fe4c-42d8-9639-023d024ba394\nac2c3e25-3adf-4da6-b00c-95077fbaee4c\n91704d83-c002-4938-82b6-972db90a0f43\n141e94fd-8dfa-42b2-8564-1a353def1670\nbf78fe65-c9c4-42dc-b0d4-9f6ba1935901\n05928525-b12e-4145-b5ea-802b4cc3de62\n7d39000e-4c8b-4fe4-ad4e-5bd70d282c1a\n6052f9be-4ee4-473f-9718-6110b2745f8f\nd60f082a-0ed5-4340-8af3-282c00982e9a\n8ce2b9d4-5932-4de1-8ff2-8d4687609ca3\nf7539055-5315-44e7-aa7b-637fdf3d30e6\n2e73bfb7-1271-47ad-91e8-70ac50115a5e\n9654dba2-44c8-4d07-9309-8c4c86fac6f7\na0273192-b783-4325-ae26-a5407276e30d\n4e6390cf-7ba8-41d3-a0c8-260b7a41fcde\n100be99b-289f-428d-b651-3b09c640d245\n2c787258-7e38-4b65-9398-6c1b7623253b\nc272bd30-6ac3-4de8-a6a4-83dda83ac2b4\ne83d9944-f40a-44d5-9bd0-928ae81bc04a\n748ea3d4-097e-43d0-8358-92cf8210aa09\nfff4c51f-4224-4bc9-b8b0-d9e3612a3aab\n8d7b356b-92f0-4ff5-9eb7-7e3119d80783\n743a5ca2-1499-4278-9eec-5972a28a3013\n2edb7898-334e-4395-bfbc-d70ab4be95df\n839fd1ad-0fa1-47d4-b1a8-a62596f9e26d\nac4c8000-b573-4307-a2a2-f5e3990e9bc6\ncb607ca1-4936-4047-be41-2c8095d7a8e9\n300f157c-8bfc-4bbc-b6b7-8569436760d1\nb00b92cf-c8f0-412b-8a27-d527ed618a79\nd639c051-352f-4e21-bb20-586346cb0a77\n44a069bf-6874-465c-9b41-4f6bcc841927\n8a2f1b3e-21c9-402e-a739-86c785a53e80\n54f92007-692f-4772-aa25-1175597637ce\n4ad3d417-56cc-43f9-ac49-6050420f4fee\n11731e69-1c46-4b15-bce1-44784b72322a\nc209274a-6ea3-4fa6-bc73-ee2c52297962\n4a4cc809-a9f9-4606-b929-e05b85fbf943\n4b5242a4-12ad-4fa0-a2a6-af98438429c6\n9b40c0de-747c-482e-a67a-82586dfd52a0\nbccb3bde-bb5b-477f-b5cc-32db77fd2e3d\n47136f4e-6e29-4717-9199-a99630b772dd\n25a8ee56-90d6-4eb5-bb81-b187c54580e5\ndf0cf3dd-445f-4e72-87d9-b9e95e42228d\n6457d611-a4e2-4460-bdad-b7da6e6db4ba\n1c65b3da-55ce-41bc-a10c-36119a2500b7\n14e375e0-7feb-4263-8eee-15f686dbaba4\na17669ff-257d-427f-9647-d02b1af10010\n03f893a4-8786-4a5c-b815-2763be7ea8b3\nfb00cba3-bda7-4394-abaa-92f3682a398c\nb6836ca5-25d6-477b-9f7f-4e819ce2efb8\n8ddfcba9-77f5-4b89-a48b-c41288d236fa\n3febc529-d477-492c-a39c-650ab06308ce\nc0157d75-5d1e-44b7-97b8-ce703b5346b4\n858a5d9f-9291-4503-9e2b-469c4c3ecb05\n278f2892-57f7-490d-a140-3a3b72d44f6a\nc2307f1d-4f9a-40b8-bcd8-80ae26580b2e\n3ad46232-4728-41a2-a6df-006ee35db304\nc312d223-142f-4efb-9742-cba30111ae87\n6827c8df-0b32-4bf7-9018-221b6971793d\n86694929-d72c-43a3-960e-13588223ef27\nd1b406a3-2ba1-452e-96ce-b2c1fdb0d7e5\nca5cdd6d-356f-471f-b749-964f5afcf8e1\n5dfbc64d-76bd-46f6-9d9f-21fd25f1a641\n0c3f4cb1-17f6-4dac-8e8b-741ef888c972\n6d291e1d-90e6-438e-ab00-033dadb5a602\n11e3567c-d3c5-47fe-bca8-a1e6c7c6220f\n44a31e6e-d279-4c26-ab6a-cbabab7c87ac\n892cc608-bcc5-4d1d-b9f2-a067fde124a3\nc431fb53-cb08-4d38-a6ca-52a688a3c212\n2f139c38-c640-412f-b0d7-8a868ea76205\n615eaacf-b7ee-4ade-8e8f-4a9dcb016a9f\nac095be6-03c3-4073-8f39-d96d55d3fc85\ndbed3d5d-06da-442a-b8a0-31e4dd226d1e\naa3e4162-8585-41a6-9bf9-a16ec457755b\n9806ca8a-e945-4a56-a9bf-563c34d4814d\nc1b1317f-4143-443d-8373-3d66cebb4a2b\n79c5006e-5ae0-4db3-ac34-59ed476988d8\n29b3ed22-2c0e-4322-888e-fd805974e33a\n6401986b-bc52-4251-a68d-f9a201a37388\ncc5856fb-2063-4326-9b17-4bded81ea246\n9774465b-94d4-46bf-8e59-5b0defc60d8a\n7f01cffb-b105-4ecb-956e-9379749b3175\n03facba5-1d78-45c3-9b58-c7ea76ad9de8\n487d7c49-85a7-4636-bf6e-98ff45e0ca7a\n1f5aa66d-d4b1-4f07-9674-3ad87dc31716\n550a553b-f59b-4374-af4b-2006c0bcacad\n19198c5f-a2f7-4917-b428-9b7acf6eefec\nb87b3492-c428-4634-bf9d-a1f02887fe44\n4b87f257-3129-4e1d-bd2a-394bde20986e\n6af0f0b7-404f-4927-8b77-840ba422f032\ncb7739f6-3c66-4c79-a285-8516ce75b9f2\nf3276042-fee0-489c-82bf-dd70fec5f466\nc7f4809d-f381-4be5-810f-dcb1aafe0a9a\n91699774-7f0c-413b-9737-c2f946258ee7\n442d910b-7bda-43bb-bce9-b8c875c2dab5\n5125fe0c-7cde-4e3d-a9b1-d51727c32d01\nb53e9206-ad4e-4370-a064-4661ec65c2f4\n609400ef-6bf5-4cb1-9da4-124eae3faf27\nd12bc527-2d55-4b73-8a9c-ca4f31a0fbbf\n888b6758-8cf1-4fe5-875c-810db1a2a290\n1819c502-6252-4e5e-abd4-0e11d67eb940\nabae8b3f-2724-49d9-ad0a-691e9b730a42\n5aea2f7e-a764-4be8-81e4-70fdf48f53e9\n36e4032b-942c-47c3-8d62-022ef8f8052a\neb966263-700f-4367-88d4-5c3830bd5cd3\n6ea8607f-f91e-499d-ba94-e14817130548\n21ea7a4e-d9de-4c69-8fc0-fb6d9aaab965\nfb015349-1d62-4149-98c6-78c43974651b\nb58e881d-b955-4cc4-a896-00784aab44f2\nf4afb95e-6ad6-4a65-b2e1-6f4e186f4ca3\nb7dc8acb-1110-43fc-8209-4da945281f19\ndeb4af70-de04-4447-8587-1cab333ae193\nb0924be3-ac04-470f-b83e-28905c991973\n260d3079-c370-45a5-9b64-90b30c0650a8\n2a6077e6-8a28-4aae-8904-156957331ce9\nff2bde2b-a615-426f-9258-6fbbae822e2c\n8ced1030-0384-4fb7-b87e-170494445290\n1c303273-f9c9-457c-b4e1-ad6ffe37e9d1\n3489c47d-bb3d-40f5-8880-a7ee6e2c8240\ndd90feb8-3ec1-4baf-bd03-e47c2e522e0f\n6a5b71c3-a08b-4937-9527-2584c3b2f88e\n99e4fe05-e5bc-4dd4-af80-4664fcce57a8\n3e544071-281d-4a26-abe3-3e23db4cd095\n2c205e9c-b121-4b21-95b8-c813cf27f3e1\ne9a47fc7-81b1-4ed4-a1cd-1d2e77a81506\naf062a08-5cdf-44fd-83a1-cb6119730c68\n0ab5588a-3651-4d13-8e0d-aafbcff65fc5\n029d8d88-2760-4e72-b6f7-73ec10e1c0cc\nf997135e-558b-49a2-a6af-5ab410f368cd\nd28e35ad-a17d-48f2-a971-179beb554424\n03cf947b-577b-4f18-ba4b-9c6d281dcbb3\n4c5b563c-9efd-45ee-ab43-9b51b22df046\nad7b0662-e563-40c4-819f-7f94d30848aa\n0e73310e-18c8-4669-a9b8-b9a45e163386\nec36f607-0310-4b40-980a-847ddd48114d\nb7355aef-3ad2-405b-a2e6-3c14cc0fe9f2\nef5a3278-7600-4996-a6dc-e011e5358edb\n98ee5d98-76a5-410c-adb6-df0b208e92ed\nbdcb246b-53c3-4b7d-93d9-aaff093c645f\n3b4cd102-bd15-4dd7-8d2d-03fd460f3aa9\nef5d3671-7f09-4c04-9af5-8f86d880892f\n135f5df5-47f4-4273-9f0f-8731657e32be\n9fa0b710-b729-4e70-b4b5-d8382dad70e4\nbdfa26d5-6fc5-43cb-9129-01517720c34a\n3bae99ba-481a-4365-a2f4-552112e2552c\n71492bcc-92fe-4c41-98cd-db7a97e78dae\nb050dbe5-f0ad-4569-97c8-a84c7b0a8eb2\n884b344a-0878-4dde-8e1a-ae6776fb5b9d\n9ac43611-5d8a-4473-b0a8-ee2e0fc92db4\n7a4ab531-4bf5-4e40-8ffa-b1b9880a3cf1\ne07c9461-ae97-4453-8889-0b2c5ea5d4ae\n1472feb1-0e60-4de0-9096-b79ff5861308\n4b835cd8-01c4-499d-b0cf-733b25956831\n189eb7f5-75e2-4930-aad2-85317e388174\na32ef4bb-17fc-4684-91f6-88feb9af2482\n731311ba-a87e-478d-acf5-3fe8c8adc8f2\n413e0259-da54-40dc-b1fa-8145a0e32941\n72b37c97-c9fd-4fd5-bbf2-7f6c6c4e3601\n8f7c80ee-8df9-47cc-854a-eefed804c674\naeadb737-ff09-44b8-bf65-4d78e10e1699\n82df889a-8040-4865-87ce-1d950b1597f9\n76636cfb-3a68-429b-b4c4-65fe1c1488be\n58af9728-9d43-47ea-bcda-f4bd82b3481d\nb86c5568-7f43-4222-826a-921fb6abe059\n49678da1-81da-47fa-889d-aef3331e2c9a\n5377e6af-5578-4b8e-a67a-314b0ec57596\n5c8f0a7f-a6df-4a7d-8c7f-4b325695702e\nd3e1d764-0188-42a9-969f-d12a28113563\n803675e4-6a49-42a0-b675-e17c791b6175\n2ff8421d-1a73-4eb7-936b-4d594fc61d35\nf712ed2d-ec8f-42a7-9317-f5df27e08038\n5a56bae8-e50b-464c-bfd7-3b7bfd918851\nc1614d1e-cced-4a94-ae10-7e64aece7c30\n5f1a37d4-2cd4-4e5e-9527-f794d8d2ac1a\nfe4a49ec-cf7c-463d-838f-e875791873bf\n6013e4df-0094-4aaa-a189-1224525fa788\n375dcefe-a08a-4f2e-9f9b-d873501668a2\naf24c4a0-229a-435e-a78f-dbb0c4612b5a\n42d6bbcb-c850-43bd-ba8e-93e007d07d24\n1d15b388-3c4e-4915-8053-ba66ad43d80b\na1c463e0-c184-4c17-b84f-a2e300394758\nb3f7f2e7-8448-4492-8acd-ea151b04ffa3\nf3c3d0f9-1270-4978-a2dd-de61044a990d\ned60a19c-a6ea-4d19-90f9-6a345b8404b9\nb2928558-a5d3-4846-931e-3a3845668a27\ne1ea5a7a-7485-449f-9b33-1460753f0ec6\n64efd6ec-06a9-4739-9b1a-edcd0ad26b15\n3efdb0cf-289d-46ca-973b-eb846b14b620\n3c8aeb59-eb6c-4002-9f08-9f35a6a18d61\nf7ff74f5-f5b3-4557-a00a-b7c399d33962\n31ce1a98-b9c5-482f-962c-233f1a835a69\nf153aa91-efca-4331-ac46-70c76dc67213\n9f272860-dd74-46a8-8a13-5b15487eb56b\ne21f4b0e-f3ed-4bee-a26e-3eba72c50463\n32f80486-8bef-4694-81b7-7827999761ae\n9f052e70-1f34-4b39-8166-180e298c1b94\n6e710b33-c1a1-47a3-98f9-b08745ebc2f4\n3fe1bbca-e1d2-43fc-a207-2944803d6adb\n05ed0e82-b9a4-45c7-9ca2-e29b1f6790c4\n311a530d-c279-4590-b2f2-041e935cfbaa\n7478c889-3429-400e-85d3-fb8032d29dd6\nf7566241-b67f-4280-8055-29b237c39306\n0a1cef92-4e7c-484b-902a-ac987d045378\nd292652a-7fd1-4f71-800a-d3c556caec55\nb2f00deb-79c9-4cd5-8da6-c543964c0bb3\n90378c05-5e04-411c-9ea9-d16bcb5c46a3\n7bc016ae-ea1d-4950-b91b-8683319d045e\n6b210f73-6768-4641-8e25-104229d42ef1\n583749f8-e66d-4296-bf81-76daab69785c\nc8f14bab-8269-4b57-90d7-4040ef55a9bb\ndec6b2bf-4b2e-451a-87b2-968f71e77f6d\ncf21fd18-5e44-4a40-97e1-906dcda8a918\n576379fd-6fd7-4c46-8afd-9a96d95c0ed9\n3429b7a8-3407-4b7b-b35b-6bce9d00db64\n60a7e5a8-81c8-4b32-9e6f-eadb196b473a\n6637066a-780f-48d3-b7a6-700ef716d83b\n17374cc7-be65-43a6-b760-7068b055c7a6\nfc123f19-f8d4-4767-af27-48663e735217\nd9c4f4a5-179d-4564-91a5-6d0f2978989e\n707eb63b-eb2c-48ad-a4a4-00eb74d227ea\n7b02b193-a8b3-465a-b1ff-36599f07728f\nbe500f4c-b51a-43ce-ae34-84fc34a6478f\n621bdb3d-e3ce-4ed2-af12-5fafffa28965\n087759b3-37f9-4cbf-bfdf-80b36caa06e9\neeb08207-fc8d-4fd8-a4af-e06b3d12dea7\n45634c43-7fcc-41d7-8b29-eaef4a0f73eb\n57263e61-1c51-4344-a229-25db083d69e5\n6139a7ab-8193-4ec4-b2ac-557b0bd8a6cc\nf028d87b-298c-48ea-b608-2248c29ab3f3\n8258cf8b-8c27-4a40-ad41-3f5a508d368c\nfc73ecc2-ffa3-4f72-88d9-1a6ddd667b7c\nd87037f7-3a93-4e83-af80-6f16e94434cd\n2a5958d4-4958-437f-91ec-d3a23dcdbbf6\n51bbc7d7-b4fa-4d1f-9752-ce71032693fe\ne4a0f80c-9e31-4f68-9f5f-93bfcebea219\nfbe48d8a-970f-4b86-ae27-9f6635aa8b0c\n3a2b92c1-0ca9-4d00-a304-dedf334522f2\naeea8353-d744-453e-97ac-07f841a8bbe1\n8c01977d-0258-4826-bd47-314df2a9d833\n9ecbc60e-900a-4bbd-aa66-dc75c50f3a0a\nff8d2379-abd7-4530-af5f-904430dda694\n5474670a-a0c0-40c6-b3da-a0fcb58e6b85\nd70026c0-cb04-4b32-8afb-bf49b0cd2561\n7edbc8e6-950f-4ab2-aace-91e073aae680\n873d3c85-7846-49ce-9ed3-861ec32df156\nddcabd22-bc75-44ca-ac73-9e7d9682d229\n007dda0a-a9cb-4562-a930-c81091ff2f54\nea2cd200-ad34-49e5-9e93-ebbbc5a028aa\n430a88de-2847-40be-9766-f2e3973ba706\n0f99e842-c4e7-4a36-ac03-68e1e8a344ea\n960bd88f-2885-488c-91ba-9fd7701590b3\n773f5f38-f97d-41fb-9610-10441ef4bba7\n9b8100e1-2104-4c0a-a957-bfc7478addd3\nc3bb717a-af67-4afc-9ff4-76375b1d7f56\ne4bfba6a-effb-4c58-abb2-1d4661dbd9c2\n89197d5e-95eb-4ad3-83d0-1f0dda30ae46\nb15fdbbc-64fb-4fe0-b14a-76b742001f0f\n521c1d59-9836-4901-aed6-b7b640265c30\n019196d0-d0a0-443f-90c2-162573b911e9\n55d04b18-4048-4793-8fbd-2002c3e26308\n266334c2-8772-4fed-97e9-771ef2bf6082\nae5b02d9-39f3-4fe2-a3b6-e5900b6c746c\n5f4d5dd8-337b-4032-a57e-f2b9a929f86e\n53c1b074-747d-4011-8cfa-6af174f184db\n9fd2d73e-ffe5-4cbd-975d-6eaffcbadffb\nb0021bf6-9931-4603-8a5b-8af04a6943c8\na5cf902f-e6b5-45ac-bb95-66fb357d7a5e\nd08a1b80-7aa0-4bef-83da-c18ba7846d71\nc0beffdd-125e-4a53-9995-34060430b590\ncad6b638-f928-40f1-bd77-4a9d335d4642\n0d78c644-a793-427c-9929-03e9d3ef1551\n400f2e0e-726e-4a44-8f2b-a74f4cc9197a\n0cf5de82-de26-438b-b969-99206ba2dc0a\nfe118d5f-a6f7-43af-8a76-f5974885c0b9\n2215023d-9812-4bce-b332-1afba184b289\ne8b1680c-0374-4f6a-ac9c-5ef8cde3ee66\ne1f265ae-9eca-4fb3-a8aa-d9f3b565f50c\nd5d53392-736c-45de-9760-03439503011d\n8a6d532a-7c9b-4cbb-b614-9ed96162acca\n93f766bd-7913-4469-b3b8-99b555647c3f\n11b48376-d441-4f77-b1ee-70348de95732\nad315b97-75b7-4b0e-a566-feb33479e6a8\nc5f1e7fe-517b-45ba-b51f-eaee16469d47\n5033e9ff-ce19-4398-91b7-8973d2729aef\n48cfe0ff-629e-481d-af49-147699b87ed5\n3675fed1-0395-4a52-ac37-33dc710d1542\n25a58ea9-bded-4361-a197-f49142966bb6\n0342c93c-1460-4ffa-9f3a-72adbf4a90bb\n256e0437-d8c1-4a68-9526-08988264e0d3\nea6691ed-da01-43aa-a820-f646499b536c\nc3fdb173-3a26-4bbb-888c-8f2a9adc35a6\n8b532c03-8b6f-4591-97a8-51ce5a0a491f\nef61ac11-3911-4604-89c9-b3c57e5b91dd\n9c2d0fed-f5d6-4695-942c-a72f1dfaa89f\n8462fc1e-2195-4644-961a-9a5a65671e4d\n1d817c46-3def-434e-b696-7dc10112c758\nf53429b8-502d-4f5e-8b43-6f7fae039b39\na9be95a1-4911-414a-a72e-25f9ff6b5c45\n1a4470cd-93ad-4e34-a5a2-ec442f0d39f4\n92cd5547-b9f1-45b4-9c40-5edb6e685778\n4bb8142e-8183-43b9-926f-60e960db9bf8\n0e188107-9daa-4e97-9608-787ea5fef4ee\nb545e0e2-cee6-45b8-a7e7-ed8cc0550958\nda808331-c27f-45d4-8807-121b45959c98\nf9b1d39c-5337-4a0e-9ae0-7622a9bd30dd\n24a2c055-0404-4fcc-98a7-f0a6490011e9\naba1c344-3c36-4f87-a475-4c5d5d300020\n97a58aed-a166-407a-8d30-d9a7b5ae730c\n4689afdb-1116-454a-a2d8-fe33ccdba130\n5610ab4d-8f36-4b9b-96fd-c30b606b82ca\nb11b2930-e905-44ad-9df0-03e6194db1aa\n28f15835-fa6e-4312-bf80-3ac5909a542c\n9b9ebe10-8795-49fb-8376-c453aad75204\ne683b0a9-39c7-4e55-b1ea-bf7b24c7e9d5\n0c2ce53c-685e-4ac1-ac94-d19c3c04f12a\neb1f103f-4467-44a2-9eed-424681dcf56e\n44069351-b5e4-448b-ab28-d157754cd2b3\ncb370218-ba64-45db-ab4b-b8572695905e\n63062bf7-9281-4873-85f2-79154d0326e0\nc05e09e1-debe-4202-94b7-269b3e3fb6e7\n576db5a5-22f4-422b-9e47-095e6e42c01e\n386948c8-016e-44f3-a434-ee21bf25ff29\n5e2f8981-3925-446e-b8fa-34140a585c3d\ned78a2f7-ede0-4da8-9fe3-259b488b6597\n953fc60a-ccc1-4a76-85ff-5dea3a9cb51e\n61aca274-704d-425c-948b-40299ee3ddc0\n7f87e224-cc99-4ef8-8ceb-5bcf36d856e6\nc04db668-6264-4d4f-92fa-d051ab1f9947\nf3641133-0556-44d8-9779-7b02085259d7\nf989512c-bd84-4495-ac1b-9c6a81eaf8bc\nb65ad01d-95b1-49b1-b0ff-f9df3bf87222\n254635e6-eb25-4660-9201-344337aa20db\nb625a040-6ef8-4c81-93e1-d0a5ecb98d3e\n0c51de33-2883-4784-be58-e6317b42eb94\nb92e8531-4728-43ae-856d-c1e85a35b8e5\n417eb342-2507-4a0d-ae4c-2ba071fd219c\n21a7d3ac-5422-4039-8cd7-d3ef1199c8ae\n19bf945d-8bcd-423a-be56-c3d9d61d1a79\n630dd213-2a78-4938-a21b-a4da7df82a94\n1a63c37b-60b3-4efe-8ec9-4e786b36a5aa\n433b2ac8-5ad4-493d-8cc5-0c4a9df6ccf6\n8a835331-cd59-4034-abc4-e0dc90f09a28\nfcb129c6-286a-438c-9a93-be4283e30f83\n2bef2c72-3e14-4201-aa5c-209320cdaa0c\n882d9a26-26ad-4c6a-a3e6-fa0b8b7c70ed\nf2f79edc-ecb0-4edf-ab14-a8252aae1094\nb4e3277b-48ac-432c-9921-60c72e6cdef6\n07e25f55-afcf-483b-8af9-1ac6d29cbe19\nccec6fdd-e5ac-49e0-9d4d-abd6df5fcb31\necb04ac4-bbbc-4371-961d-28626d345205\ndf79936f-1527-44e2-b17b-5cfe0be27378\nf0965913-c662-463e-a2aa-d6c6f0310a7c\n635dca0e-4f28-4ee8-989e-df1318307a9f\ne63327e4-5a44-4b50-a818-4380e0b49786\nd76db904-2e23-45a0-bf74-5df0b0e9870c\n71ee1120-272d-4ede-b0b8-d0a0917e0c98\n0b168cb8-6c1f-4a61-8704-0a7a714e152d\n469aeb0f-ec91-405a-888e-040b29d16fc1\nf0ab9965-97c3-45d8-96b1-255054f22eaf\n8d7b8442-d06b-4dbc-aa91-f8532c32f41f\n0b7198d5-07d9-4bdc-9469-97c047870910\ndf911012-9613-4183-bdf9-603541994b7c\n280126ce-ea15-43f7-a7a8-7dcd7e81375f\n276f5c96-e482-489f-8200-86fac6df0133\n8219f1e0-d1ce-4ce5-8346-a2ebf9cc789d\n8f856ea7-c2d5-4303-89c2-e312c1e6b021\n31b11ebd-db2b-41ec-83ac-4b80cc30364f\nae44ac83-5b91-4bca-9904-69f94ab4309f\n17ab6b05-aaad-4393-b8ac-d17f03940ea2\n7d48ae11-bed3-4d4b-931b-6719763c4e42\nd3895799-578b-43cf-939f-6070f0cb6a4c\ne0d93d2f-c1ae-4267-973b-022c6d825b88\ne18bce46-e09e-435e-96b5-84ad4ff5d17d\n57f2973c-9b84-4479-b3b9-9d2ab6b20bee\n950c7a80-599c-479b-ab73-cc6178a8d892\n9a661cc6-e2d9-41db-a357-e6610fb45032\n2ae9fde1-426e-4c2f-be77-d08be17fd94c\n76f4ab74-974a-4929-a52d-17b0356320eb\n46401ced-a14b-4d75-bc71-8bb674d456b1\n1b02e0c9-f6f8-411c-a15d-ede440dad2b3\n08facf6a-53de-45a9-bb3d-54dc0d7d45b2\ncd97f3d8-a6a3-4bf4-a300-2a68d4e5dcc4\ndf3687c3-a022-40af-a4e9-dc418e6051aa\neb468e1c-2ac8-417b-b452-64acb676024b\n3953aaac-c5a8-4bdb-8ce6-b869cdf18682\n44ed1e70-d047-4618-81f2-f82181105077\n07f4f401-faa4-4a6b-bfc6-b8a458f73314\n1e8497c9-50c3-4a6b-94ed-003c14983f62\n0f87b507-4994-4e1f-bd0a-768b6af813c2\nfc035ce4-2b95-4491-a4ae-5b3a8d0c06ff\n01260021-b898-442b-9ebd-a95c3a5c1eeb\n1f806533-3ccc-423a-974c-ae43f430346d\nf71a10ce-a0c2-4d11-8468-d163d007b515\nc15542bd-90af-4586-93f7-eb87807982d1\n0bbc38a0-a7bd-467b-a007-75a7fc15c923\nfd270c1f-feb9-44d9-89a0-4682ea11b632\ncf12f3cf-87ef-47ab-9e1d-16d18fe3a603\n3b2de20a-27a9-404e-b164-e5957bd9ae1e\n45f0b627-6fe6-4197-8a61-a5e16e83bf18\n9551f9fa-6ba1-45c1-8861-74ed9a21f0a2\n0d059bc0-6c86-4167-a536-224eca3c2a5e\nc7c19bfb-403d-47e3-9ef6-457e321acb8c\nd69fd579-0a45-463f-b718-b432f6aed33e\n043ebe66-3ea4-4395-9dcd-41e7a753a50c\n52b60ec6-b49a-4498-b5ac-a763bfbe92e9\nf424849c-f698-4d0c-8fa1-4ec73c3fe7de\ne2db3135-3b35-4543-81d0-4f4bfcd3f0cc\n2c1aa2da-6c44-4bf1-8b96-178abcc88d2e\n0e17624b-bda3-4d87-b27f-b5fbcf5519ab\n23cadeda-2cc7-4c6c-9af7-ba13b6a09a0b\n4c5491b9-2aa0-4e29-b27f-ff2df04a4319\n76cc6e9a-7c5d-4d33-b53a-717b06cb1b81\n3908fd4b-a98e-47d0-900a-a53138af4008\n3ea20c61-03f8-4d05-8e6b-12baa7bfec87\n23806dc5-a93d-41db-801c-0154db00ae5b\nd3deefab-a8b1-4a4b-8a93-34d001eecbb3\n5e24deee-2523-40a0-a7b2-b3819fbc8e93\n03561630-9736-4d24-84ad-df6b63cfde4f\n48a29ac4-3047-4be4-972e-440f4cea9425\n9c40a035-1ee7-4302-b46e-2b881ac968a0\n8c136bf5-91f8-4693-a135-1208b41a3368\n8253157b-1054-4d55-92f4-162005c7c66d\nf537aadf-60ef-42f6-a9e7-4264342ce413\nd8558de5-36d5-4ca9-a3d9-bde86a99efee\n730874b4-a3fe-4646-95d3-c5eb15dced94\na961d299-e2d6-435f-a0d4-15b35d987418\nfe583932-8a06-4f38-a0b4-d419ebcb0922\nfcbaac82-aef6-4a6b-960e-c79a5de89eec\nac965a6f-85e5-456d-82a9-6daa3329f03d\n15580ac1-eab4-45e0-99a5-c690dca5e0c8\n79ccb916-2dac-4ec5-942e-48246e2045ca\n4832bd50-5a09-4fd3-ab08-47420758c0cb\n9745f83e-a2b5-4dd3-8def-08dbb17a51cb\n6c6fb014-d3db-4fb2-bfa2-cee432f9754b\ne553d773-a3ae-4fdb-8b52-977efc64f814\n7d39dc2f-8624-4869-a5e7-eec4694d0cd4\n70b66a07-bc4c-4382-bd5f-7edb97803bfc\n6cce6c89-62ff-4db7-bce3-54de9af11ca5\nf0b466fb-5e37-4e3a-b3a6-f236b81078ae\n3acd125b-d97f-4903-8edc-67714d398131\n03bef98f-740c-4561-8014-3ad22c3ce89c\nda8e644b-2b36-4db4-9fcf-e67876e2c8c3\n228f73af-2864-4db9-bbd4-9bf3699c1dd4\n6e5d2b4f-fedf-40e4-9734-76030c560dab\n2edb8bc1-88f3-47f1-9d51-e84aaf7b3b52\n00ae9377-d343-429d-be6d-b2d0446de2e5\n45be0c58-f983-4f34-a906-93112b809425\n3ec12cd3-2352-4737-b0c5-8b97aab2c2ad\nf5ea344c-bfa7-45ab-bc6a-2c3e7d75deb2\nf3eaacc2-0832-4032-bcdb-462ec3207bc9\n96af26b5-85d7-4914-9a59-77b938711109\ne2bedc2f-d441-48b0-81ee-b72d33292a97\n4cc651bd-5ef5-4e85-920b-2dbda8dde288\n1aed9f3b-bf5c-438a-ae8d-74cd847e25cc\n3c7413a7-8eb4-4be5-a8e3-a906fb0ed375\n7efa72d4-8403-4b1d-ba80-5982507e12e5\n99f03da2-de23-42ce-9e86-e262c890dc32\nc87c40f6-5132-407b-93b3-0703bcfffe95\n3ca2d299-1d0e-4136-9d2f-069dd030db9d\nd06f3bbc-7376-4374-a27a-caef8da66718\nac6c3d68-fb46-4de5-a0b8-673b43933bd2\nb5f6250c-e94b-4fbf-80b7-f9636eea809a\n26ae7d6a-8e58-4906-a3fb-c298ecf3dbc6\n89b4e2af-b7e4-4405-b458-03615791b406\n9d70cb30-82a8-44d4-96a4-bbcc83af38ca\n8581342f-be5f-4c90-8b19-e0f40a3d4e03\ne83a6ab9-5ab1-4803-a720-6ecb062976cc\nf720d499-0ebc-4780-b326-8c5f52924391\n023893a8-b203-482f-8609-e5b5a14fae8f\n11e03d6c-00c9-4426-b45d-c58d63921004\ne93f9569-8b5c-4b9b-982d-bc57d2398561\n01372480-b48e-4250-b3a0-f98af25019b5\n70b94b75-d495-44fe-b74b-8d0122418c34\n6cd39472-2497-4f0d-80f0-c8a57ecada47\n4a2d9508-bf98-40f3-ae22-4bda647a0b9a\n8cd037cb-fc9f-4a8d-907b-ed51a6862e28\n7f1b531b-c310-42b6-bfd9-9a7a835ec028\n67322e40-a593-49c2-9176-b0a6aad8ac4d\na9c70490-3819-45d7-ace6-e6a0965ae14e\nfdce86b0-9b72-4168-8bb8-c92e6d1a241e\ndd3c0fa0-4d1d-4754-a70f-3ae466a37d95\nef605717-4038-4f19-a45c-c213e4fadc2b\n212f689f-bd55-4a84-971c-8a0d8f1bf9fd\nf315c94e-71df-48da-b542-d3dcaf30fd6b\n5a2d9910-40f0-4aad-92da-a91c802742f3\n79879398-5c43-40cb-ae6b-9fcb7e6f67c1\n72899657-3263-42be-b81b-68b3c401cf29\nd2233ca8-05b7-4449-88e1-c5441a935b6f\n4bf320f1-499d-40dc-adbe-62c8e181cce4\nb72c9eac-61bd-49e5-9586-723ca74e7b92\n57f5eb9c-884f-4c2e-a436-4a90622aba7e\n75cc1cf4-8c28-4be9-affe-dab4f38af83d\n294e718b-f5d9-4464-be0a-5e8392079eba\n67a10b4d-0704-40be-b24c-36d3a332c27a\nc79c22d4-cf43-48cc-a4ae-83bde5d3fbbc\n1304d2ff-b936-4e8a-bbb7-f589de9d3a66\n9bce09b5-8319-4949-a7c8-1744bbc364f7\n7d5568fa-009e-43a4-a1bf-bcd0f4923b69\n91479f87-66ab-458a-ade9-fe12a0a7f29a\n4bb3cb82-cca1-4e5a-ab8b-a421013c6d3f\n62dc9c4c-b951-444e-88d6-8bbf93b6c48e\n4b6f7e16-61d2-4097-abf6-eee2adfe0801\ndf7e46f4-aaf8-407c-bb81-0beebd22e54c\n30d45c0c-9eac-425e-bc73-c68d279b1498\nbe12dd87-4bb0-46cf-8055-afab84d32386\n9f035f22-c42e-49a2-b6bb-c23546ed575f\nd4e18494-b26c-4579-aabc-ba69110010e7\n08bcbcf3-14c7-413f-a664-dca3539b3fb7\n429f4307-e325-417c-8d43-00ed6b5ba726\n468fb609-b959-4459-a462-9a242449e890\nebf84223-969d-4382-abd4-4b813502f874\nae2cb9b7-2171-4741-8659-06f5103b6e90\n374c6ab1-8215-409d-ab17-8ca4bc1d66c2\nbf981080-dff9-4d00-b3e7-baba7d00a805\n9b88f859-85f3-4e56-9fc3-7149d2cd7bb7\n1c8496b8-7a05-4f35-b0c8-304c2b302d2c\ne78ada78-58db-4b75-b22e-15db6bf159cb\n3c199b06-9683-44d8-960d-7d279974547e\ncd705b40-c30c-4aa8-81ae-55545b6d0f07\n0cc8023a-1475-4033-ba75-7a4413350faa\n7ce6006f-114a-4221-b139-c00a87e1f971\ncc6eb129-e9a3-4620-a10f-5e7ed0b8cda4\n5d607538-3277-47a6-9504-782f6d56c3c0\n0d9b94e8-a00c-4fdd-954d-c422e981045a\n16570615-befd-4552-9ede-151353fc1379\nddb845e1-ec5c-4fb4-8640-9d0380a90e79\n41c60191-fa8e-493d-963c-1959425d7938\n0e26ac77-c960-4e7b-9a3b-a355765cb94f\n88b95028-b991-43ee-a768-3461521ad770\n7f34693a-d172-412a-8d4e-24b627ed622c\n81e7639a-3af4-469f-a4d6-b7b2430380cb\nb5b998e9-2436-47d6-baaa-05db85afc726\nd8e4d4b2-1e82-460f-888a-134fe5d724ba\n0d1182a3-4f42-4f11-8505-5613ceb152c1\ne4866e40-413f-4347-83f5-b8fb28d23e21\ndf8e4d8a-9c82-446c-8608-f79651c20c42\n7b980418-e78a-480f-9775-632708a12df6\n4d015a68-e85a-4520-b4b5-a1fc3e585d62\nf1b1af00-f5fa-4c5e-bb5c-bde0e94d2a3c\n1351effd-f50c-4159-ae4b-7ef8b7812306\n4e886b43-69ff-4abd-bda0-1e45f950bf2d\n035e8141-e3ab-41af-92d5-705e1dd34ac9\nd7e8f9ef-03d6-4de8-a742-34a73aa4a137\n167749ea-1e6a-4c0d-a1eb-c57f90092639\n7748c9da-71a8-44ae-9811-bef91f85be7b\n1f92f22b-760b-473f-9728-8c885fe65400\n5fa3fac8-2392-4204-b796-5ec3422739bc\n414349bd-1d70-4c62-9a7e-f70d89ad648c\n5410a4fd-6a72-451c-aa09-bf39065f13ce\nbb545969-0754-4451-a292-be102e04b70e\n16b65dbc-af60-449d-82fc-4bf06d12d510\n0cf4fcce-fc64-42b3-b730-70b798e3f64f\n2938cf4e-148a-42c5-9798-9c6d20473503\n473ac1f9-048e-444d-be01-1162bf67d096\n5e5371e1-d822-487e-b532-063b82e255e1\n142adc49-0f78-41b9-b537-63109a09bdf2\n7825189a-a1b0-404a-880d-6c3b2e307783\nd0a7cf19-b0e5-40a6-bd5a-4f3925d92fcb\nefbed400-fb06-4ad6-bb84-31ac1fb274b9\n55958eac-8b01-4ea8-9b3f-2a34b6893589\n6f7ce092-a1ef-4e64-88c9-63335ec9039a\nf8f2511c-a349-475b-821f-7563dd04f8ed\neb9c356b-05ad-45b5-9c29-9e82cee5bce1\n3f53de6b-d270-49b6-9268-18af7e154c8e\n33586400-bf60-489b-947e-9932ac16006d\n40875d13-4353-47a1-a805-e2678131646d\n613cf785-e4cd-40d1-b166-081f4c522987\n38f4f721-2528-4e29-98fc-00e845545156\nb49acfce-a40f-47b3-b834-7499bdf88862\n7f977053-046e-4400-ad80-2ed0d84e44fd\n3dbf0d94-1ddf-4804-82af-1fbda5522571\n88f90f1b-8f5b-4b05-9d72-d4bb3406d447\n162889ac-ca89-4b67-b6d6-abb79362f159\n268c7228-328b-4acc-988f-fb053a96171b\nf5057271-458e-4ec3-bf14-7ff53607810a\n895fd346-8473-4711-944d-526d4fb453c6\n9bb32d72-1d18-4912-818f-f5fb7689f493\n4faf22e1-b253-46f0-b5fc-02065ec1dffd\n1e756594-155d-4d45-a1e6-aab397c6e5dd\naae7d825-d181-40a2-bd77-916bffff5907\n790901c8-344e-479c-915b-a48df6aac570\na25fb269-5d61-4b6e-89ab-0d3e06465aa9\n99c7a992-9b35-4a05-b875-74b90c40d134\n8fcf99f9-3608-4be3-b715-372786700ac9\na84538a5-9c4e-4a3c-8f3c-c6b4e88c09e9\n86e4f6a4-84f4-4aa9-b195-4ef773b19218\n1cb886fd-5fec-407e-9835-41fc503babc4\n9133a89e-5354-4ea1-ac26-7edfaef6680c\n13afa4e4-fd1a-4d3e-853e-662b260bfbfb\n8ec987e7-4a01-4b4c-844a-9a892efaf498\nb483e72e-817c-4203-aef4-a827e26c1a36\n6baa747a-43b5-4d62-9352-6f2079f3ed53\nfba5c3a0-77ff-46aa-9103-14c731690918\n21ff65d2-facc-45c4-b1bd-757662de201a\n9e9c22a3-18aa-4fa3-aae9-34560d5f0994\n66b939ec-6c58-4d69-9f5f-849f0b6be39c\nd2dbcc40-187f-4b53-b9e7-cbbde1b77a86\nb4c6169b-e716-4dd7-8e62-567900d27871\n71c324aa-234f-49f3-9657-d07f1570a46c\nb6740999-b803-4358-bfc3-954fe8936438\n79af365a-b8eb-4621-b699-462bdabde25c\nbe498cd8-7706-4944-bd07-5d7862054600\n7754fdf7-98b0-4bf4-990f-477c27cf2528\nd494b83e-66ef-42bc-a240-d6d48a11df77\n1079973b-f50f-4702-8d3d-e2a2b295a9a6\n57b29821-ecac-4bad-847f-f06e4c51ae89\n510599b1-3ffd-4b60-baa2-5df205c36cd7\nd607e69b-634f-4a66-8631-63f842e16cc6\naf6b4f8f-1bcc-462c-9e35-d060efbec791\n49fb5f14-b890-4027-8eb3-6d6d9d4222f7\n7ee7461e-c910-483c-92c1-b1283829c739\n6843a872-968b-4bff-9207-540e164c06c5\n9c544a3e-9317-40ae-b580-7a0773d0610d\n6d0631c9-3700-4a21-b878-475b7f9abb6d\n7799e5aa-4ad9-44b6-877b-92e16ab7c4dc\nc774952d-648c-4c4c-a987-88c6d0b6b43a\nbe8bb5ca-0a99-422d-bce7-fff00cbf0670\n393581d6-cf64-4c7d-8181-6e7c686522c1\n104ca498-2c8a-4bd4-9750-d49ddd292970\n94bafea7-7fab-4505-b9f8-e82b048491ee\nd26523c7-fbd1-4f2d-942d-d947796a82bc\na6171dab-189d-4670-a027-9e7f9a162b74\nf1f0532a-eed8-4dd0-b202-6938b7d83b3b\n377c57fb-d453-4eb5-aadb-c517bc359d32\n1541a139-0eb5-4d93-95ba-cadbe2863b9c\n34052bea-75e3-4909-b009-4b13fe151d95\n8b20859c-2906-4fb4-9751-e0ea90f82567\n5516dba8-82e1-48e0-bd3e-6047c875613e\nb770ee09-891e-4438-acd2-a0ffcb950866\n4be5d16e-42d0-4c41-bcc7-f05b477d63f0\n81f571e8-7571-4991-a7ba-d280cc9704da\nf10953cf-0b09-4dc7-98b1-e8961de892ff\nefa1c185-0f4b-4912-9e3a-db33b760fe9e\n80e89523-7331-433b-a73a-d616b7b01417\nbd7e51b0-ceb4-47e3-a9e1-84cc6723ea63\n2e9c2c9c-c0e7-486d-bfe6-c4df4fe7df2c\n1d61c9bd-325a-4172-a7be-b98d65b9b9b2\n604d689e-922a-4e11-89e7-540298a240d4\n107a15b8-d283-4bf5-868c-0efa71ae56d5\n85693341-75a3-4a2e-ad1f-6512761f1709\nd0ef15da-26f5-4567-9def-be686be3bb50\n1e015ca1-0e91-4855-b6ed-edf21d4e7941\n2b16440b-5834-4587-98fd-7c50b23b33b8\n8c002b7c-9043-41c4-88af-6923ba9f69b4\n2181bd92-0a28-4cb7-b37c-e81a6303e4b4\n26d5389f-9646-44c7-a3b2-c7d04592b78b\n0d6ee883-1f3b-4a91-b1ac-92c7b5189c18\neef9d745-5bfa-4cc1-b079-26d34ede3f76\n9e44ac4f-3bb2-4e7c-b202-3b22180d5e7e\n67fa351e-b612-4d87-a8c0-6f858b293a0a\n969258da-4256-4991-ab88-f2a4e7510844\n9d19640e-c639-4af6-988d-1e73b0f96130\n75f1b82d-c8de-4313-ac64-579ee77b02e7\nab54a6fc-50ab-4105-8147-e679d54d7291\n57823fe7-3358-44db-a98c-65c4f68e3338\n0100afd1-54de-421f-837f-aa6082073564\nf3d79a4b-30d1-433e-a2c0-bc89f8d38f8a\nd4bf8408-6ad2-411c-8f72-83fda54d067f\n59830830-26f7-4ae5-91e8-e7d79b8d8010\n6a9ecb80-b4be-4279-9c9b-7791dcfa9e35\nbf08f363-9eaa-40a4-964b-677aa0378936\nf2503546-7d68-433c-8429-7da3f15df694\nd771cf3e-0801-47f7-a094-5766281ffbde\ne4e24f5b-c3e1-40c7-8fde-2ee972161f5d\n38cbe1e0-7ba5-4784-8259-cfb678d82fd8\nc29cc7e7-0e11-4902-8d42-cdaa96743934\n5961e990-bdf4-4f91-9327-a0eb75dfedd2\n7460a8a0-54eb-4908-b509-587d69fc75e1\n55fc4cdb-b9ac-4dc8-afc3-d5f5c332d2a9\nc022b298-5a47-43b5-b6ac-ff9e120869d4\n34d20d58-c538-4bf6-b1cf-20944588129c\n57d70296-29de-4526-a460-3b1eeb20b191\n1dbd2312-bfea-4ac0-a09c-bf6dc18bd006\n0b282079-9f40-457a-9a95-959b672bc9dc\na29afcb0-c84b-4b29-9828-bd44a2804059\n255a6484-dd1b-483c-9a44-8a6260af67d3\nc3867b72-00cf-4c64-aaea-cc14a750bc81\n41c53707-e1fa-4b42-afa5-93d1268e5455\n6140927b-1c69-48a7-b304-c7bfedac309a\n14773fc7-a6b5-4bd0-b836-8aaf0a3206ef\n25db65a3-3dbb-4053-b9c6-f579e5c6c6d6\n77149f9b-ead7-4a39-8c7a-b3dc891a788b\n79edd092-575f-415e-b614-47f66c709072\n81f3f48f-d649-4f4c-b5ab-c3a189c0eb61\n403e864f-f343-4517-8e79-a32ea1ba9142\n4c79ac93-bbf1-4078-b080-a4236d2516f3\nbc0bce4f-430e-4894-b8eb-968b6e46c918\n677791f8-24fc-4127-bbd3-235e42bcf342\n86e433e5-a0ec-4186-9bef-dd3356bb37f5\na62d03b2-deda-4b98-9672-f126276eb55e\nd2ffae3b-f048-4ce0-aa9d-1e759ddefeee\n543c8293-6590-467d-bb93-9d967282ecf6\nbc6ce253-a767-42a0-809d-a6809a2c70f5\n3da0686c-c3f5-488f-9f47-247dc09aa3bc\n7b591cce-827e-46ae-ac8a-4ecc27766003\n1f97c649-9b60-4913-b586-fa90903df2bb\nca112a68-a825-42b9-8404-320c03c26afb\ndb7f8877-1cc5-4336-ad85-8bc976cfbe52\n1ca127e2-cd54-4346-955e-fe543aa63043\ncf19faf0-727d-4c79-a0c8-7aae6043c542\nf4b7c21b-f998-4d8d-bb44-4ac5e554fb65\nad5402a4-4ec2-4b9b-908c-41434874b25b\n01a9ab4a-72c7-465b-8eaa-de8d8b0ed1db\n72c490e9-ebb6-47e4-891b-6d91d0126746\nd6361962-eea7-495b-ac43-8c4410963ca9\n81933403-8814-4f37-9ffe-1546628472ef\n010019d9-ed95-4e27-b973-0c0109c06bc7\n08d4c09f-50f5-48cf-86c9-971a01c3f702\n00fbe382-e8db-45b3-9967-edf8e80dc32c\n94159363-1090-46f2-9abe-1870201ef77c\n7f6906c1-064d-4d30-b043-e22327d1ada0\nf1c41d1a-cdf6-45e8-80d7-dbedcf8d1c89\n55ce964f-8520-4aa7-aaca-1d704359a124\nbe5780dd-d774-4fb0-82f1-6a5499d051ff\n3896ab9c-82fb-48ec-b670-5ae77f41897b\n12f73500-b135-45be-814e-b340b4b91d5c\na5b62a1d-bb49-4261-ad0e-b5d89c6dcda7\nb722b843-b459-4540-be5e-8aa7f7ea5034\n10b5bc6a-28bb-4696-91b0-89efde70cab8\n8f17a42f-8894-4e54-8152-52cd32d33988\n11fdc47a-df26-4dc2-a460-76e6e8a24398\nceed6477-047f-4cbb-817d-c7a40190bbd1\n170ee432-2dae-43ba-9828-ed116878e4e5\n2fc6d10d-51c3-4ee2-b0ae-d93577a98b8b\nb5030514-7f2f-408e-bbfd-e2628a5c620e\n86221d0f-35cb-4fd4-9996-99f5dd562a8d\n042206eb-0254-4f5a-b377-70579c14d448\n9b53e659-a897-46bc-9843-ad4debb9c5db\nfd6fc07e-c8dc-4b4c-80e2-0d753c0b0d4f\ne8aed59c-800c-43d7-adb2-8426829c3cd8\n0eac4f1d-0470-42ca-9a97-537ae418e04d\n70a77abb-fe5a-48a0-9baa-6f6a175ebb51\n8abcf24e-9737-4c0a-b9ef-e5aa101da638\n61e586d9-c17f-42b3-9b3c-9254de35c824\n7ce11409-73db-4a1b-8beb-ec7eeb5b9361\nc3d10387-5a04-431a-bc25-be943f459c5a\nc2ee075a-8c50-4ae1-a120-08adf9ef2381\ne0ad2163-ce7e-48cc-9646-fe6aa6ed86db\n5061b246-ae27-4aaa-9e58-18a5f1604084\n0c1a0b79-ca58-4988-92fa-c2d24bcada37\nad2e3468-756c-453d-92d3-389d04e338f0\n9b04a778-6cd3-4f92-a081-d5793eacdf2f\n3c4ee50b-5107-437f-b5b3-41fd1f70a4f9\n887b3578-9995-4fe4-b444-77660ddc94f3\n95f87b6d-79e2-4f79-9751-afff7a6f314a\n0d8d208f-0250-4498-b56c-61bf9c999296\n45388413-3b9c-4a73-8eac-5e1e836abbe7\n48c9c005-cd59-4113-9fe9-a993adc86d90\n108eb2d9-cbaa-445b-a206-22bc026bedec\n632bbaf4-da2e-4798-a290-4c64d5256eeb\ndabb0a54-5afc-4f18-8267-da371f942c38\n4eca4017-0461-44aa-ab16-18afbfe7e818\n2eb22391-6674-4442-b576-3a0b3fdd96cd\n79944d37-22fe-4bd4-81a8-35eb9935fba4\ncc3e88ab-7b74-4b61-9260-6a1d07ac3ab0\n3a613c5b-7520-49c2-ad57-c681412e9191\nc82914f0-9952-4535-938e-1e07f8646595\n9395516c-100b-4d9a-abc1-e0b42e421500\n8ff5b124-7650-446a-ad75-1f9605562663\ne731f0a3-056a-4a44-b074-52e2fbbaf134\n409f31bf-6436-4ec4-9d33-407cb55ab0d6\n7b95408d-2d28-406a-bfce-b2a7b321d5a1\na4d862a9-f780-4f94-837e-a0bf120ccffe\na27d6f33-6574-4aaa-ba6a-e6f86776ecab\n7827f8f5-6526-4c5b-8417-800062babf93\ne86963db-ec2b-4cfe-bc54-9eae515815cc\nd7237762-5c50-4702-870c-6558ca73726d\n67d17d1f-a76e-4cc0-8531-e56664974462\n90d0bac5-ca1c-4191-a15a-c5b5155ca62d\n340f56a0-f8e1-4437-9acf-bc62de0b2cbc\n7299e195-ecfc-42f9-9a10-95b7d4a3bf22\n7b600a97-ade4-4477-b95e-0a0ebfa4442a\n6cb38973-fd12-4921-ba71-f3504b7d468e\n26227dce-44ad-4818-992a-bfa2a40eb921\nd8212d35-4e24-4a83-904f-42996101cc28\n8e9cc26f-39c9-46c2-91b2-bf02a63c456b\n801b203d-1a1e-4a52-9f3e-ddaa628f7a4d\n548325af-7093-4150-95a5-d3a148eaf4c1\n5a1bdac1-87d1-4021-ac64-85666f0f9eea\n2cddb4bc-cb94-4a0a-8cf2-8bdc586dfcac\nbdb95013-f9cd-444e-b477-933194399d23\n2f743283-9bb8-42fd-b5f9-a26e89407ae8\nec776609-a724-4539-99c4-330ad32364c2\n57af600b-177c-4552-8daa-a0928cae91d3\n1186e85e-adca-4adc-9fc5-7776c253c09f\nd59084ee-edfc-45b9-becd-3ba4cc7729f0\nb9f0717b-956f-4f12-9f9f-1102c3b5b5aa\n7e4a8d4e-f385-4ae8-a03c-6dc366364f87\nef27cc9f-178b-4f62-a0ab-ac62db59b083\n82ce9f6a-e755-48ca-9aae-849c68f3712f\nac713755-45af-44f2-bd3e-73c3fa89a4e9\n67b10c6b-e865-41d6-9e71-a9cf747205ce\n0a1a32fa-621b-48a1-ad6a-407754d81794\n1364ffe7-ed7b-4ec2-847e-a033bb98ade8\n15b33074-3028-4842-9923-1e4422b1ece0\n77ae7dac-efb6-4325-b0b5-6d184acfc987\n689c82ad-e8b2-4be5-949a-681a0fc570ee\nb803512e-1140-4349-885b-226e0084d1ec\n1381ed52-f260-4afd-a565-5f800a268e57\ne626a89f-a1ca-42f6-8467-eb57751da5dd\n837f8e07-df6f-4196-8153-7a3fbdf65131\n9719e0ac-c5bc-41ca-b8fd-918eb9f16d83\n26d91c6d-3b54-4439-b55d-915a1dc5e1e5\n033187c5-0e75-41f0-a828-e632af863faa\nfe036228-8116-4a00-84f5-e04f4bf00281\n0cafeb74-9804-4ecf-b3b7-faabbd250a79\n3e8e88d0-ddf6-42ca-b578-f1aacba719cf\ned33aa74-f004-45e4-a68f-3676a200a296\n248983f8-6099-4402-a702-378fa9a618bf\nf0a7f4f0-accf-4ed6-8745-fef2067d0b70\n3a879c91-cf7e-467c-b301-c9e703863970\n6c5a1091-11f6-41dc-a6d5-6917d298ff57\n5e95da3b-091a-455f-8642-eb5ec17fcfaf\nb7b3a040-9f3b-4bc9-9913-16a97055a7e7\nd27d3651-9a2a-4a4c-855a-824678303a80\nf845be9a-a575-4577-a6f7-5d5f739445a0\n8a4ab0ce-68dc-462b-bba7-c0ad2d486c5d\n091ca1a3-ff39-46ee-9eed-1a2a82e68132\nc310e7cb-7091-4d8d-a666-095e61c55efb\n4d206aaa-fe66-404c-8eeb-6531fcc86e13\n9d60f69e-d075-45d0-89b2-d24511ef43f2\n950632c8-4c27-4b21-a254-caf93db251f8\n173a5a2c-66e7-441d-9d4c-b82254e57a2f\nd13b407d-39cd-43bb-8cb0-2c043464dbb7\n272b2e4e-683f-41a9-9ce4-5f6ffb41adc8\n166c2912-c9f3-466d-81ef-6c39bb8b12e0\n6ca1fa0d-661b-47d4-801e-edf16174fc76\nffa07860-6608-4330-adec-a0cb83a3c211\nb2f6392a-90e6-4d0f-8366-cdfac15b1af9\n4d298b3b-f4e1-4aed-bb6c-840a6716610f\ne8987839-acc4-453c-a6f8-d6c0287e2db2\nb29dafe2-3590-4a1e-9bdc-b1aa95e51274\n6cd9e3c8-2b19-4980-b5f7-e5f3654dec0b\n4ea41c4f-b6ef-4f1c-90d9-54f14ec4b076\n4d0956dd-9503-46e5-8fa9-ff3b4910ec29\n76ee89dc-94bb-4d0f-84fb-89ccf54be880\n31a95026-2d0e-49c1-9918-8e2683afc6a8\n52480206-bf0b-4da7-8817-0682600f7bc5\n4a6b01e1-a538-4b9e-861f-389ec328d606\n697b7761-f203-4763-be78-0a00e8e2709e\ndd8793b1-eb79-482d-b5df-2ecf0c05262c\nb0a912e0-90e3-404d-a4ea-f19732ac5db8\n3d61f6c1-d016-4f61-9a7c-314865ee9863\n822119d0-1658-4008-8253-cb5c63308bfb\n320f6595-2684-4dba-a271-cae13d810849\n66489bec-1b29-4d6c-a488-bcd9afebba2e\necba2ab4-139e-4185-8458-11d191696969\nc301f847-9abf-4d20-a215-3de2c3e96291\n53d0325c-e97e-4a33-bd3a-7f790e89de1d\nce362917-f29b-4faa-9014-040a92c5144d\n5b06bd75-8a7d-4e5f-869b-3f78ddbad02f\n9be53081-a4ec-483c-8e28-1263f605c695\ndfc7b8b5-8491-4e80-8b47-4c34fc60c144\n443100fc-7f4c-47bf-beb7-85ea5b47ec17\n4fdf5185-ed6c-455b-8755-88ad69c10ade\n80897071-cb64-4454-a1e9-f5a31e800375\n15c105d5-9a34-4694-bb4c-2e157fb33505\ne6700142-35da-4c96-a9f5-c834235aa5df\n18ca0249-f3db-4cd8-ab9d-bf26fb32564c\n9bc547bd-bfe0-4c14-bfdd-ab832677a883\n48f1fc30-767a-43b3-abb5-043aea8c6734\n93c8f143-60c7-4c0b-b817-e687f6c5b4ef\n5bfd348f-6902-4638-8144-732193413e56\nd6f02d13-5bda-451b-8887-1e163994bceb\nde3a0e3e-544a-46eb-b47b-b20db287df4d\n78ef2712-a07c-4bf1-98fb-21194b088fc2\nff42da92-c655-4db3-b547-d18db6272be0\ne74b53fe-6098-48ec-9a35-624874b84b53\na20acd32-b7d7-4656-bda2-0725fb2d29cf\ned4261e8-a72e-49ad-b933-dcc8ddafe027\n40ba3456-471a-4972-abee-eeadd81b050d\ne5e6dfcc-84d9-432d-81dc-fad9c0fccffe\n45a807a6-05ed-4ecc-936f-63b71cac4b7a\n5015f27c-4ce5-41d6-9782-9f8b082d7d08\naae45dd2-9989-4dab-97ca-b5fbad2ffe21\nb7df70dd-d82c-4ffd-9926-fcc21c10016f\n51d90752-c2f5-468c-993d-6ca315a23bb6\n0b9b101f-784a-4678-9b5c-e77bb9412fc9\n21a7993b-f330-4c9e-b72b-b43b79b82faf\nc6fde9c7-0049-4bac-8fc5-1f596ffcb1a7\nd09dfb43-db2b-4f8a-966d-cb0f4b453f2d\n75b78288-6c42-4f81-b2ae-44975838b390\na200f690-607a-4dd3-8ad2-f9fa03e4f80a\n164315c2-6ee1-4bc5-bdc8-44a1ba7bf41f\nb244344c-4461-4e0b-9ae2-2ac236632ecd\ne620fd66-4bb5-4206-aeac-631e306dbe86\n847d1599-4069-40ad-be12-92b91d3f6b06\n1e8aae5a-8d04-486b-a528-c25b65c03914\nc0f396ae-06be-4e0b-935d-cd429a3f6605\n7310e193-9784-45a1-80b9-e237fdba7cc5\n4cd5896d-9587-4e5d-86bb-108af61c3b27\n34dfa28b-39ca-4f10-80ce-fc5a5e930090\nef83e83f-4425-4b1d-9807-10f774d0ff24\nef5ece74-196c-454e-97e5-4655d7a283ff\n5c471cd2-781e-4ec8-8216-5dc47cbee32b\n0f25fbe8-40da-4a7f-9143-ee15a6fdf524\nc0b352b5-64a6-45fa-addf-44fb8b0ff4bf\n2337eb42-b08f-45a0-aaf1-56f4e17d890a\n6426180e-845c-41ee-a319-912c92feacda\nacf32b65-6965-40b1-bd2d-18835004ad95\n7dceb2bb-0c88-47c8-b106-7ade9a38c98a\n24714767-48c1-4fb4-b796-3edf5a016ccc\n164c3b30-dec7-4e08-9a81-aeecac6c4726\ncbed46b0-77f6-47f0-b401-d8b59e3c2a3c\n546900c0-0af9-4d10-b3ea-6c3d97d51ce7\n35c2cc2a-45f3-46f8-858e-30631b4e7ced\na79b372d-4a90-4647-b44a-c833aa4252a7\n21d90c92-894a-4518-9465-d1b733610554\n19f33274-7edc-454e-b251-f9515b0f831f\nb43eea80-8d70-42fd-b4c7-5d87afe1629e\n79bae4c7-17bb-47b9-bf99-2b0ec0bcc7c9\n217a22f3-e1dc-4218-91ac-f75d54e6f00c\n21527d3b-a16f-4442-b873-abddf670c1fa\nc84a8f13-7d02-405e-b4c7-ddf96eb2a53f\nb8f3658b-852e-4567-808e-b22a162d8e72\n1d712bf8-97b9-41d3-8d60-d310c78f2d89\nebcb01f8-5c1f-4765-929c-674d5a0a5aa8\nd1e65f64-48a4-4e35-b927-844acbb977af\n4ac65663-dd3e-456f-9c76-334c0bddbbb6\n7f153d26-b4ac-42bb-b038-63acc97ea2a2\n9ef89e9e-1c24-47c2-acb1-9f90600415d2\ne188ea97-51e9-4d09-92a7-6776e8b0500b\n84b4d1d9-0c48-4714-a58a-4062018a32d4\n4f773bd4-89b4-4fe2-8465-78f7a021ad55\n6b64575f-47ea-4dad-8194-63fc1844b9fe\n27884c5d-d3fe-4da5-923c-86d068e7a27d\n351072a8-5ae1-4a16-beac-c18b0c595786\nbbdf7ee5-35ac-4975-bd27-83114c7129c2\nb60dcd2b-6148-4d63-8cb6-ce5a15e08710\na59e9998-9e68-436b-b21c-0e5ab20ae856\n3d3b1816-3a23-4112-b090-852a6ea7e18e\n1e8df686-28b1-4280-9881-c85083ad58cf\ncda66d01-68e0-4147-9b86-37d0e656c743\n89479c43-adac-43ca-a8cb-15129e9de02f\n200dfecb-c5c7-4b7a-9b5d-08ef3aaafe7b\nb59095a9-46fb-4e4d-9b96-49fa6c300ef6\n38428d65-e481-4bc2-8fc9-7dc4acf7f3a4\ncb6374a2-9fc1-4348-8779-fced9f4646ba\nc32e37d7-75f7-4ab6-b104-ecf8cd3bb7d2\n5d529aeb-4bd8-42fa-b611-216e24db7453\na20d4a77-4b8d-4dfc-b997-9a6628065fe8\na06b093d-e675-4068-8258-3efb4cf87ff4\nbf5e9618-31f6-4170-9d45-ff16ea93c02f\nea2bb395-09d2-41d4-a943-cfd798754e91\nf3e11d81-33bb-4775-a3ec-4c924f140c58\nb51b8bbd-7c40-4dc5-aa42-990be01b6df5\n55e957cb-915c-4010-bd70-b0f56742770f\n7aa234a9-5370-4fe1-84f9-4277a3b134cf\nc2e8c3a3-e5fc-4922-ad33-af04045a7be9\n1dce15fe-f9e1-4d00-baa0-10c66ee4dffc\nc3692a68-4931-4d34-938c-35653fbdcd05\n0121ae04-ee25-47cd-9ae1-dbcd47c196f2\na0e99b59-b8ed-4ece-a670-b8ab7e68f150\n3fb6cf9e-5348-454c-8a7a-0df42e685fc9\na0d0dda3-f453-4583-875c-c44b0842808a\n57104808-bfa6-45d2-98b6-ce49c581ec41\nfb71429e-47ea-4aec-924e-cb60d027fa03\nee550525-5397-4907-b428-4802fc9328ed\n9199070c-f52a-429c-a856-c773e826bf8d\n5b07fe4d-f89c-4c3a-bdeb-232218e29edc\n2850992f-712f-470e-b335-6ebbb225856e\n46c9bb77-09ed-4b6f-b0e5-ddb9d4abe6c9\n454eb118-f1fa-4086-9ffe-3513f21af30c\n48c02948-dacd-4157-93c3-57685ab62ba1\na1def9b8-4cc1-452e-b3be-da19d14fec8c\n3ca77157-76dd-4969-882f-3fda7d267b61\n1034f071-6a16-46d6-a447-50431fffa72f\ndd5c5820-15aa-4342-8025-7557741ed046\n66942b52-9cce-440a-bbef-5b9595028f12\n79a99793-b697-4fc3-83d3-b859f03b37e7\n4a87539f-ec4b-4fbb-a4fc-2c5efea3f603\nefa31392-2c06-463c-ad4c-00959c7e86c6\nb9f089a9-3086-4db7-b3a7-e8f7b8a7f726\nad917607-1bfc-4d13-bfab-4a5a990dc939\n9d2671eb-0a68-4a3a-ad59-b2ed027c8770\n89cfe9a8-7e5f-43f6-aa75-44b06b51166e\nae7f6dae-2543-4d13-8eda-ffe40c4fcb23\n3ff8b88a-e6bf-4170-84f0-648ed6954152\n88452820-59c3-48a4-a4e1-394bf3e07c75\necd351be-0a8f-4ca8-9a5d-19eb66ffd879\nb0f63eae-aad6-4f0b-8eb9-eafa46d20f54\nc979a80a-09a5-4c4e-89d9-f626166ec4ef\n165b7ec0-1024-46c7-85f9-ee9034400bd2\nf5790bce-021a-46ef-a9ee-e07d6f228a66\n1a7d704c-a90f-48fe-adde-ea490d7f1497\nc50e6ae9-ff9f-4fd4-a180-aa6241952f55\n7649312c-dd0d-4d27-ba49-f88c3c16f1f3\n5fa22119-d321-4ebd-83d9-20c9bcdc6e0c\n1d5f6ddf-5fe9-48f5-81d9-353d4182679d\n70c91147-9149-4c28-b846-9f61b2ea075e\nfb01f27b-58e2-4199-90a6-4c939ab5434b\n5ce34a7b-966e-495d-a588-eb890c2326a2\n410cfec6-1946-4232-8da7-4f140263aa4b\n634e584b-9feb-4726-8822-2c4429784011\n7bbf3023-c8bd-4646-9be0-9e409c22de4a\n5d76faee-591a-45b6-acb6-37e2d8a083f9\nf67cff8d-f508-4c01-98f3-3a54e89e84e0\n224f721b-ebc5-4654-af21-d27962fb3e1d\n8a719835-5404-4c20-9f1f-dfe8b77fa32a\n3ddba538-69ea-468f-860b-5801d98e0365\n8d094802-ce69-45a5-9b75-17205c728a82\ne59571f4-19f5-458c-85a7-02e54c24663d\nec92ca12-d646-40bc-9743-559b844db64c\naac13311-045d-480b-b3b5-6aeec085d550\n62937920-e594-472d-9848-ba232fca358f\n85416836-e284-4a53-851f-749b18a6a6ab\n6e2e479c-c3af-4a30-860d-cdf3829b5987\ne4ec47c3-57c1-431d-878a-b3ebf2cffa80\n03808a3b-8eef-43b8-afab-9252d1fd460a\n173e8798-d296-44be-b322-e8ef4eb3f6dd\n8e0bd6df-6484-4456-b2a8-ae10ab483c0c\n8a9473a8-f159-481c-b91f-ba70520c1ebb\n86fda6aa-bbe6-4564-b041-1f04f7031852\ned3b2f04-38fa-44e6-89c5-dcd7ea8a720f\n258459ee-e98f-4e0a-b5c4-3e4611f7d756\nfa17e59e-975b-4101-8728-e5ecd550eb66\n5b6cc0af-4248-451d-9112-f4ccdc739a88\n0f5a62f6-7285-4a25-a518-72ac23c0d07d\nc3d403de-a42a-4378-a8e3-45cc9116ebe8\n82b753f9-9e70-4e7d-bfad-430e5e3c838c\n30d32a69-2bfe-4c3c-9faa-bb81a3b804ec\n9257521c-cdd0-460d-89ee-363e286cbd50\n758413fd-1abc-458c-9b45-bc5c39fd5df9\n523a2d29-2196-406f-a252-04d68b80f326\n25839868-0632-4b83-a2e1-4355faac9bb1\n8e69e4a8-a76a-4dd9-980e-a66f325dd74d\nbe4257ac-482e-4739-81b1-31963891127b\ne9d957f6-9aad-4f56-a3a6-2674728a90ce\n14dd2a9b-4529-479d-a8e4-62a9a37703b2\n3cb81115-0bb7-454c-a665-6f10db22dd34\n91878556-0b1f-468a-9c33-4f69dbb77d09\n3b074b9e-1d0e-445c-966e-3a1d27678e59\n66415a8b-afad-40ed-b7c8-738d8fa4f47a\n54d0dea1-2b7e-4437-a327-33ac79fe0f27\nf08d15ba-9900-4025-b71d-8246e8ab7a73\n3e375022-2bd9-4583-95ee-7bd7485b744a\n0936df55-93f8-4d58-a231-491078225c86\n94b67fdd-d790-4d9d-b8c0-3b41d2ec9aa3\n457eecc3-0a87-4452-95a2-5c96af223f8d\n99b49849-c8c6-410f-abe8-74b5fb457424\n87621418-2cf9-4910-bbf9-52fa313cec89\n14e9b45f-a27b-4b21-b76d-827d1bdb963c\n15b35874-ccca-482a-aa35-06c2d028222b\n65b04911-953e-429b-b503-3a4210e5f498\nbe16c924-2a4a-4546-9ac0-d321b53e26d7\n6af4b12b-ef66-483f-8b07-0c719739e38c\na9dad05a-ed8a-4ded-8991-8c08bdb6dd3e\n4bffd9d2-6110-46df-86d6-f8c030ed72bd\n310eaebe-7dfe-4784-b85a-a3f2db320414\n6c1d4ab5-8a6f-44c3-97f2-303738cec303\n4e69d5f6-82ec-415e-9b08-c8556895d3e4\ne8a14e4d-05e4-4026-b6db-8926455e30fe\n7ab4a395-a19a-48a2-8c40-8446a38d2b8a\n248dac7f-ac07-44fe-9c04-7e4743671cf7\nb10fdcb5-d596-4751-8c09-b143dcc5301b\nae357dbc-074c-447b-a290-602406013d3b\nc3ae1b33-b80a-423b-8ced-a72b149da9a5\n0cecf8e5-08ec-4bd8-9948-c476c324bada\ne3fa428a-703e-4ec6-afc4-95fa97770c6c\ne038279c-3e05-4d4b-91eb-11e7f442e062\na90ed764-9c7b-4d12-befc-e1bb3531b421\n5f57e041-6e9e-4c9e-acef-2990e0a84de2\nd99a92ea-7d49-4e51-83a7-a9530b2cfe5c\n587bc721-e25b-4f98-b95c-f513254f40f5\n51c330d3-4a77-4f84-a486-ad5155c2ad22\n7c37fcfd-2c55-4f19-80e7-f4d6a63041c9\na2f4365d-cfb6-4e30-b1e7-757df2d85f5c\na1318f6c-8e86-4c0c-a2cb-5cd78ddca000\n98e2df1c-42be-4a0f-b2ae-31cc038c7a4b\n2ce5fb68-6949-4d5b-8c1f-0acc79ae7ee4\nd9a95ea1-f331-4856-9876-b8ef58ed611c\n2f467252-1dad-4e20-abdf-e5c606d21228\n5cf0db89-8cef-4fdf-8809-32f60205b219\n619aeb9a-d72d-406b-a10a-ada6a6790f59\ne5c864be-fbca-4bea-8ab4-1772b2bd74dd\n26a87cd6-b334-4597-8f6c-2372f5333708\n13367f85-0b0a-4628-8621-36c5416c89a3\na48d629f-4c9e-4240-b1f0-9cc7e4063826\n6fc38b99-5172-4bd8-89c6-50620a974881\ncad7ac71-2b21-4e35-a2bd-1bb59fbdf939\n4d5edd67-6467-4ce3-9039-4c855c55770e\n35fd0f87-226f-46ea-be32-03205804927b\nf911c6b2-850a-4c2f-93c1-6b7225cc215c\n91161820-ad6b-431c-8030-c58f141959cb\n1298d9c3-d956-470c-8712-ee76f0a38914\n5dffac2c-c8b3-4570-992e-e2fd03eda6e1\n8b940761-2c37-4a99-b837-981bf1648dfb\n0bc4a28b-6903-4a24-ada6-ea399b5eea56\n464aca8f-d8e6-4acc-90af-bb616d53a6da\nf59342fe-a0c5-4f33-a34b-5deecd5e4cf5\n3aa4e1c1-f267-4114-9a0e-f47bbf53647e\na64aef7d-ad28-434d-a9e8-dbdc263353c4\nede33300-a90c-4739-ab45-d849b9584b65\n566e3b82-98c0-4692-ac24-d98aee0668c6\n811a5b75-0cc7-4935-b2f3-5edccc5a7e9a\n2efb18fe-80e5-4b1d-8043-edd597fde417\n5569be27-d306-4990-972e-d4a62529ddc9\n2da1691f-3970-4417-8268-bdb4f1c33a61\nb0bcd960-12b5-4038-bacb-683022241a9e\n3830eee2-be67-4a29-aa7e-f389517f29a4\nfea0e18c-7411-4f04-a47b-b7544132dd88\n4ec507e7-7ddb-4736-a7a6-f5b6ccec2bd6\n88290131-f18c-4597-89a7-72b35a7f2837\need3effa-0314-41a1-ad6c-ba83ace2b50f\n9c37a9a0-57d0-4527-9214-9d0542d6242f\n14e9789e-680a-4ce2-a927-78cb68a11b0f\nae709ea6-2dff-4243-aa3b-40acf9963116\n0404b76f-645c-45bd-ad0f-ae7b52106d0a\n33ba785b-6e38-4cf8-b9a3-0ab552649cc8\n9011c931-22b2-4be8-b77e-63c77c530f8a\n2df41605-3dad-4fd7-9ebb-ce7b34c359ed\nb937ec8b-8896-40ac-9d2f-2937bb06df82\n8f5dbd2c-a7fc-46d5-afa2-615a5462bbe3\n7e4a8c3b-8084-42a1-a9e6-db254328de35\n65b6bb6a-b74d-40bb-a493-66798a914386\na1735494-e003-4e33-84f2-65fcc0131665\nf37a4510-575e-43d2-b618-4be602b1b222\n2adb5ca8-e1d7-415a-8578-9ffcee3da0f2\n7607e175-0637-4834-8b83-4f4aacc05915\na8380c65-4111-44c9-b241-fa76a0e37764\nf44d82b8-af29-4cb1-a6c4-11fc41041779\n8de07667-73a1-4735-b283-d134230da228\n8d49e88c-a9f5-49f3-85cc-b8927bacb3b6\n91cbd171-e93e-4f42-b133-01f75a965c6a\n988467b3-0e00-4ab2-91c4-e8a662d371e6\n4e362b17-7dee-46c9-b84d-ec7e8b921adf\n4d0202a1-38ff-4cd0-9d36-fb77e498ea33\n02ea4502-5f99-4969-9236-a1174ca487f7\nf7d8d89a-a32a-4556-b98f-a3b29cb5c48a\nb288e665-6997-4d9e-b2ba-495732659563\n77f24414-07fe-4557-997c-7a7cc4d5aad4\nc7bc7bd6-51a6-45a2-83de-5e2734976788\n8b04f7a6-67a4-4f61-a579-9605db410138\nbf982bb1-30c1-409c-b48c-7423bad00c43\n1ce0197d-f38f-480f-a694-0729f573f428\nd3373f01-be9c-4321-af7a-f97924eae1f0\nc747be19-8c8c-4aba-a45f-37fe702879d5\n9810cb1e-3580-4b74-a2ce-812143613061\n96db1bc7-9567-4640-a67d-57e0da553f95\n730eef46-6eb2-4200-a634-b1320808d5ae\n8b10d815-44d0-4ed9-a634-30212d10c995\nfcb5e951-feed-4a54-98fb-281b6a3f175c\n094f2cfc-c0f4-43ad-8d8b-254e4ff2649b\n849f7ca8-e008-4363-9eb4-3db267f7b75a\n6b8fde73-4d15-464e-9f5b-985f3ad21df4\nc8139cd5-b77a-4e09-9659-3b86bd6c3430\n71f48328-2380-4bbc-98ad-201330279108\n5f5acf42-4c4b-4dfb-a600-e89440cdce6b\n11874f96-217e-4882-b443-a1b4cd4acce6\n3b79728a-4b86-4a36-bd0b-50765c878a02\nbdee151e-e2e9-43ad-8afe-53bd7df7807b\n8f3a1c96-0357-4748-a1ec-d6c44ff0608e\n2758b88a-7727-4c3e-9421-12dc11a69a4a\n5df511cc-39ef-41cd-8e61-e0ae85f06561\ncb29fa6d-30d1-4139-ae77-6f02c6b11d2c\n018abae1-7e22-44ea-ba0b-7f6096b4b712\n9ca96d6d-ab0a-4ff7-95a7-1edaf6dcbb29\n960df023-e287-4e90-82c9-f3d7f1588f11\n12ae7878-6dbe-4b38-bb0c-3e34eb01614f\n3296e8ec-3053-4c88-bcd8-aca4eb2f4ca2\ncaf42d5d-4867-4e77-80ec-297184a16ca3\n5bbd159c-b16c-4be2-b8e0-de8e0499a485\n2739288f-120f-4672-9f3d-faa4128080c1\n1d437a3f-600d-41ae-819d-088b93bf4879\n0406b361-e7f7-40a1-82b8-0c85cebee61c\nf86d824d-7b2c-433c-82da-7078e375903e\n70d6489c-d4c6-4ce1-a30a-f8b299d337ac\nfb7e5203-4390-41e1-b76f-c886f95b0132\n2c397b9d-ac58-45a3-af75-97faddaa7042\n85768235-a070-47da-a99e-d1f548f70cfe\n1c5e8a1c-64ee-4285-98a3-1b78a97ada4e\ndea79381-cd2d-49cb-a754-2927c34f3b65\n6502b8a0-6ecf-4bb9-952e-8aa26ec65920\nf9e5fa62-8458-42fd-bf3b-cb0458e22b81\nbf011980-ff88-48c6-a582-9e358c85ff8b\n18ea5c1d-368e-4aa5-945e-cce290c388d3\n19564419-8e86-4eea-b311-4e4ff94f9506\n17648217-c88c-412f-8ab7-663fcda7b87d\n058e82d8-56bf-4188-896d-214cb9bd034c\n6f423f86-e778-475f-9fea-f2e9cd2d9ba6\n503c5c7a-7dd9-4755-96f7-240800b276f8\n85f93b17-fb02-4541-95da-9adb1e0f9d9b\na1f8a1c5-5aac-4b12-b3c9-5bd28986e279\nfa5a0406-f55b-4ff5-8b2c-50af55c08f48\na74fdb7f-da16-4741-a57d-6ef0d7f5b7d9\nda9072f2-f99d-4fb3-9d0f-2d78add4126e\nbe598617-4339-4cec-8192-b1c34eb18cb7\n31349862-dccc-484f-8e44-6d03c9f32d70\n9da83830-a00d-4276-bb82-5ca32c9b09d1\n748755b4-b328-4e83-9314-de9b532790ce\nbcb5a125-eae1-49c8-b9c3-77e1016637de\n74ad2aee-d018-42ad-814b-ccb523bf4635\n8b56dce0-2456-4860-b995-3c5970db2ce4\n045dcf4c-b287-41bf-b9d9-6deca3797c72\n3e195932-5228-4b3c-98b9-17a62f4504dd\ndeceb2aa-9e8c-4424-a987-5a2b19a0851d\nc425fc6c-7a2d-4bd2-b962-229e8d863f1d\n0a9348d4-2d08-4848-80bb-fe096549cade\n8ab70956-a697-48fb-a315-909911dcbd58\ndafed39d-fcdb-4cd0-b6ff-f9f3991c775e\nc5909696-6723-4986-949c-fa018f27bf19\n2b5b8deb-86bc-48ca-bd60-b8152d9f871a\n22933676-15ac-4248-9811-f05c4d3c498e\n155aebe7-ad1d-4ff0-9ce3-d6738bbe83fc\nde52066d-ade3-42e7-9f52-d86a3f3d37d1\n28306639-ec87-4348-b829-692b143197d2\n2f828b9a-9c2e-4433-ab92-c0a6f5f9cf8c\nf64cada6-2de5-48b7-9dd6-9f70fe09674e\n4ce4971a-4dca-452c-9204-cb1560fad8f6\n706fd7de-7d8d-4ed2-8a57-b7c3128af99e\nb2def1f0-1b14-453b-a322-eab964c774bf\ndb0a8331-9145-4613-87d0-616e01bdea10\n0256eba6-570f-4b9c-9ef7-364aa5d0c07d\nfc38ed89-286b-4def-83dc-3ab3166b1ce9\n536342d9-10f1-4870-843e-b13fd1a5af2d\n9007d035-3107-4777-af09-32d447ba6fb9\naa195045-e609-430d-942a-c08ac1cc2ed3\n43d51326-19a8-45b6-934d-79852d809bf6\nd31e12b9-a4c3-4745-b41b-adca8815408b\nb055ced4-50a3-4c7c-be15-4ad0acd4ff34\n1160645a-b58d-49ff-b4f1-26a2c515ad6d\n05e820fc-d9a1-48fa-ba12-e03cdb0ae818\nef01fe73-c7a2-48eb-9b88-5674f684c646\n62acb179-f31d-416e-a7eb-1a9fbc22605c\n1b1bebb3-f781-477f-bee3-9f7ad52d34d0\n79ad6eac-dd79-456e-8795-8892ac283e1b\n5ee55bba-da67-4b60-842c-89e4c6a745c7\nedb521ae-833d-4c5c-9aa1-a9ea22ef5765\n4151e9de-2654-4c98-9f39-b93fb7fb9755\nedd66e70-fbdc-4c4f-bb71-2037bee0dc33\nac2f0cee-548a-46c8-9ca3-ed412ecf4a8b\n2e4d5c39-fd10-4b79-ae8a-70861e794ae1\n7cfaa130-bac1-4495-a1df-e0dda733fcae\nb67743a0-553d-4e69-9114-318cb4f6cdf8\n005be0fc-3b33-487b-a220-b440e0b2bc74\n09fe922a-a3aa-433f-aff0-0ea969412ff2\n61c5b1e4-6fa2-4189-9590-836f4a3db33c\n24d1f0f2-afe4-4c05-bdbb-11d94d37f055\ndecf70d9-bfbc-4530-a59b-f4ff8b94f0ef\n062dbe6c-33a5-45d4-8fcd-0cbcf61a5045\n4f772090-d28b-4934-a92b-c4b07ba5a634\neda01a27-523e-49f5-b7fa-a7977e104687\n39e21aee-e669-4db0-98ab-0e363c97b3c6\n28fa2de8-859f-4dc9-b8b5-86a7e81a8de3\n5102abb7-3d65-46b2-84b4-cde90d0044c3\nc5ca76bb-30c0-4d6e-aa4a-2c71868aef3c\n2e3f5b0a-fcf6-4ac6-9a65-c2a3e8715f7e\n10e7a202-7e97-448f-a40c-4dcb3a473853\n26984c34-e787-4a33-996a-49948c449ee4\na655672e-ef86-4014-bc37-b92d47161a25\n81858ed2-dd55-4d01-9729-bb081c5895c3\na8fd3a85-09ca-4d2b-b527-1777205ef9f4\nbfb75f56-3fc4-49e9-9908-1921fd5781ba\n4b73414a-887e-4f23-b792-9c2e8015a51c\nc59d1155-60e9-483e-bdde-c802307f6672\nfbe15683-d995-4814-b7e8-c09454028038\n91b83fef-aa8e-4c72-987d-faaac9eef633\n6ea01017-6aea-4aaa-b908-ab28a11b00a1\nc820d2da-ae7b-4c1b-aedf-f5ae126b0915\ncc02796c-fde9-48af-8fd9-08f65bc70b3d\n213d4a48-5291-4a2d-9d1f-89348ce54e2f\n3ff98202-cb88-4abd-a7e8-b2c56f5b88b2\n1a91b37d-3a67-4018-9782-8c1f5f57321b\nbbab856f-4388-4a30-a496-77b5cc13c51b\n997ce1b8-1ddc-4c31-b9e2-0808f57e5522\n40a5377d-d49c-4aec-a1a2-6c74d3d6f2cb\nd2b1a78c-bb12-4b1f-b83d-c08197b65203\nf0f9455f-2cce-4816-95bb-566b7df647fe\nfec81559-f607-40ba-9bc2-9d7344e2dedf\n01cb556d-17d1-4d73-b227-ec53933cec24\n01eb25f0-4953-4dc3-b397-e0b612b4e200\n812ddc77-5d09-487d-b8dd-f3fbd3c11b3c\n3005833f-8883-4141-89af-e49fe783414b\nd16a9cad-65d8-4a92-b8a3-0f9e0a6635e6\n17166e09-521a-4b32-b349-1b2e407f84cd\nddaae252-cce6-4fe2-a5a4-2db5b5c6a1ad\n9662a420-3bbd-40c7-9408-76167b8ab32b\n36f98ae7-21d9-4bdb-a7fc-f3c14947bf57\nf6db4046-8c90-43b5-ab81-c78386f5b1d7\n4c1ff67f-5c77-4f2e-b622-490cf5662361\n6b47d824-3d11-47cc-a474-049485639657\n07d61a73-a4e6-4819-8e8b-6c09e45667a1\nfe81e137-d6c0-4af8-bb40-71c979ba753d\n5a2d0713-1976-4052-82d5-73c3d8547a81\n3592f664-4fb9-4aa4-a40e-9e1f371fa983\n92eaec3e-5f4f-4d8b-a684-2cdf40ae7e8f\nd66deb00-7c96-4747-84c2-d87fb5816a7a\n79a894dd-46c7-497e-80f2-3b00f955d861\naacb285a-3092-4b02-934d-cb1c22230261\n5f1f4af4-1f22-4804-80ea-a4797a1168e2\nba02ebee-3d68-4637-8aa9-0936e782d9ba\n80a8462e-5873-43cc-9167-8e7b0b4751d7\n9bbed26d-1675-4fd6-a18d-1e824ba2a27e\neb751a05-ddb3-4363-8515-f0f808500322\n9a431296-1976-4b7e-9319-9a376f275365\n2ee3923c-78a2-40b2-8a02-934810395f6e\n23211f57-2359-406c-9fbd-a52c142ad2ec\n2b466a21-7542-4aa1-9fc6-be3653aa2e4b\nbe88f5ed-35be-4cde-a49b-29efa4873dff\n9a26eaf5-9ba3-4391-a35d-41d1a883cca1\n464a1703-eaed-4a11-ba17-4bc3b78573b8\n37eeaeb1-a019-417a-9272-cbd92c09f28a\nb1085600-3afe-409b-bfcb-24946c819224\nbb4647a9-b755-496e-9101-587df760bad3\n20d2d7a7-de62-4fde-9b1c-3efab85be57e\nb88170dd-e75b-4c62-b80c-68c44d2dc431\n43e722b0-4ca0-4391-880b-539a917d791e\n6df9316c-7cdc-4e81-a569-d76a890b0bd7\n6bb7535b-e7f9-4e3f-91b8-30e70e10a7a8\ne07f06d0-a0de-4acf-9445-107cb31e6736\n6fe6d7cf-cdb3-4ee5-bbd7-04789f7d00ac\n6577f7eb-a987-49a6-b6c5-f6d0869eaa0e\n2466353a-d1b0-46b9-a15f-2aa58ef65cd9\n030d7011-83bb-49d9-ba1d-8ccc8410c2c7\ne434f1f1-4657-4436-9344-9747420a0b83\n0afbea80-6add-4bb2-96a1-9adc09050ca2\n390802bf-cdd8-4233-a22f-4b5ed0520057\nb17c6f17-45a9-4ecc-b9f6-bf99b3ac25f3\n75fdbeb1-7bb8-476b-aa11-d11e951bc282\n7623d5ca-000e-4c94-aec0-a4c437eab201\nc5696d56-6e84-4c9e-9c86-421f65e8332f\nb972a35d-83fe-4e46-92eb-9a36f70d90b9\nf2ad2ebb-cb53-4f64-9eaa-3835eca784d6\n0fc1ea36-b6da-425d-9e2b-f61c5f7ddff1\n770fbbea-70e4-4cc5-af2d-14ab2e9a364a\nfad8711e-f8f0-4865-82b5-17d145acb496\n995d4bf5-deba-4e67-b5f1-7de8ae9c7a57\n14d927e8-9caa-42c4-8c6c-31ba2dafa453\n65c7d370-45e4-4ff9-b317-75c7cb62cfe8\na8379cd3-85fe-4209-84d6-546a3355f539\nf02941fd-2aa9-480c-8dda-ec8800dd284f\nb56704d4-beb9-4434-922b-1e8bb4682c51\nbbae43a5-3fae-4ed3-ba52-9faf47de817c\n8e77057f-dcc6-4ed0-9dfe-08687c4fda50\n1af8994f-402c-4468-8e37-7aa573745673\nc1d8bde4-9a3e-4d0e-9932-42f790c788fb\n76fc873f-dbdc-49c1-8a97-5d53b9fab4fe\n26db7d49-5057-48f8-8f14-30e25ad56c81\nce091605-f3ad-4cd4-b2df-1c818526d130\n092c0039-2f06-470c-9b75-142082334d22\ndd6d9ca2-5d00-4d3a-852c-3e9cc4ae06ef\ne00b619e-ee1f-4176-a566-1d836588bd39\nd48a0346-26e7-475e-8861-b05c8f5aee4f\n5bb7d6b4-ec93-444b-a57a-760630ca0f70\n676924ed-4bf9-4b56-810b-ff1b753dad41\nbd63fbda-28ea-48a8-877f-c04ed6ed7594\nb1c7845b-a26f-4de0-aa5c-381192114e33\na809070f-2d0f-4dfb-a3e5-f6c12945ad96\n38cb258e-49d6-4c72-a2db-628041a19aaf\n2265b824-43bf-4b96-bfd2-552c46c10fe0\n9895b45a-227d-46e9-8556-bcb7f791aa21\n06785519-ae6a-45ba-b07d-6ab79d60c6eb\nd1b1a965-97be-4516-b137-396a1560dca6\na7941e74-f563-424b-9c3e-c128bc90c1b9\nb676351d-1fda-436a-938e-38179ccda72a\n494faa6a-6140-49e8-9830-cb29bffa6ecd\n93ff660b-f75f-4510-97e4-9859ffa463be\n25159c8f-253a-4e3f-ac66-68f5ea30eddf\n3ec0226d-175b-482f-88fb-86b12cedbd46\n6e3c2bfb-36bc-4e29-a8a9-a87cebfdb658\n4159e763-f561-4d87-adf9-f8aa6e0c085d\ne3bf2bef-ff73-40ec-b6d8-6793093a7088\n2b9f680e-3e8a-4e98-990b-9651c2cdfce1\ne1ed7d9f-a955-4714-aeba-5dd67999399e\n714b7695-7c88-414b-b4ce-5a4a80853ba0\nc7dc07e6-4e97-4ccb-974d-8d30169ecc4a\nb96ca6f2-bf7d-4cfb-8fe6-a06c20735a7e\nab71baea-7604-4633-aeb3-89234dc14b9d\nb97c19b4-f47a-4d2c-b74a-3ec0ef8395f7\n52ef72c0-1621-46a5-b2b4-c8529cef1e17\ncb3cd871-a2ed-476a-a1d1-f0cfdb3b2e14\n30cc0c53-68bd-471a-8a0e-d5cc0045aff5\n930f6827-89b3-4adb-92c7-6f8e34b02391\nff8a19a0-7049-4b38-bfbd-03af7f8e3eb5\n480759f7-7b3c-4168-a1a8-68367160576f\n44e55c86-d678-4e0a-a552-7fc177a910f0\n9f4c5e5e-ede2-4f7b-8ab7-e4f4149a2d34\n2a3e9d41-15ff-4728-b2e5-b27c9336f096\nf3aeb204-8435-4f54-8202-ef46da58bc22\n64957b38-a264-4060-a7be-628cf30b273e\n84a8b3bd-7649-422d-9f81-06a6052b3288\n8d84e2f3-3d31-4747-88f9-bca5102009b9\nbbf41a0f-37c3-4b7e-9159-ca252ba83fee\nde29ab89-c944-4f99-8f6d-440d131148d2\na59d67ac-638e-4829-9ac2-7fc108a79148\neb36ce65-367a-4615-a833-e8b64729da39\n2cfe5a0d-12e0-45ca-9008-f108b11b0de1\n252bc2da-751d-4668-8907-508814b62ae7\nd0f264c6-0567-4ead-8146-b06a61183f42\nefc9cc36-b565-4417-be4c-afdf25767d88\n66104e06-bf00-4870-8349-174986b979d9\ncdfd9b9f-66c9-45dd-bd28-a64d5747e2ab\n00f13dc9-4029-4f9c-9fa2-ddb2e22a25aa\nfec65a2a-c1d3-40cf-9fdd-fc52e5b91d68\nf66d1f1c-02a9-4fe9-b0ba-719c6938f47e\n5c7c2d37-be8e-4a26-a7ff-3be07750c723\n16fcfc31-f44d-4b56-9676-f96a4255ee83\n79738e5b-db55-4396-a9b6-afc787475817\nfc166336-9205-4f7a-be51-2627df3c0c7e\n35923ba7-2dcb-4af2-8e22-824b99f91017\n419c6606-64bd-4acb-97a4-cee1e5b1193e\n0a104f9b-0600-4172-885c-5a983f758e63\ne32e7e8c-9cf5-4c7a-b567-f24773619d57\n0dc5694b-6cb8-4785-b19c-20a5adc9a8f3\nb7ad7492-b33c-479d-a380-1693bddea012\n6a5a7a6a-7e57-41b6-b1e3-58033bda6f6d\n5ace21b0-b387-40ce-8d4b-2cdbbe8e8e7e\n9b155fa6-6325-49ca-83b1-a299fefc8ca2\n974ae1b1-fac1-4db4-b703-b3a4a5358865\n2e2895c2-f733-4978-b562-18871d310cd6\n4ddacad0-3c8e-4fe6-a1f8-906baa59c878\n5e5311c0-45ce-452c-82b2-57517084c360\n0a887921-dab2-4df0-bd22-cb5c3b0fbf0e\nd51dfa16-90a6-4f1a-ad9f-43aac46c80a7\nee8b0f92-94f7-4533-a791-64ef752b3ad3\nc856cd6a-95f6-4792-b4b8-645f082aa34c\n0f5acd94-193f-4837-9a65-2d92bd8f3721\n2a135161-2dae-4fc0-b0a1-2a0d9b52e0d4\naeec585f-70f4-49bc-8865-03c6b445cc98\n6953b57b-612a-43ce-88d8-bf93e4b7a40b\nc3dafeff-9351-4839-84ca-1c9c421efeac\nfc6b18ab-6612-48a6-ad30-0e5051f1dc32\n670221e9-e6af-48e7-8bb8-3ad4ad13f4f9\n48870dfd-99a9-4692-bbec-3f718845c747\n21fdfcc7-9ba4-4a87-bd9a-8be7db847bd8\n1edba011-645a-4eb7-82f8-a191fa31385e\n843123fe-8dbb-472f-8099-7e47a0bb7f1d\nb10d73cf-2343-4c5a-8343-354842f1c9cb\ncd2c59bc-ed2b-4396-8980-5a8eb7395d5c\n1ca645fc-09c5-445e-a029-43fcfc2e1efd\n8dbde2ad-8a17-482d-86ee-1f9dc9bd380f\nbc7ef9c1-6769-48ae-934b-4cf1e143bb47\nf745a657-a64f-4173-acad-70976f382004\n08408c40-9aa3-4309-afb4-10e9cfb2e87b\n047383c1-d1b2-42fd-af93-fa34c0fa0408\nc3c32823-04d1-42e0-859b-7c0a47cc1c6e\n95d2494f-5fef-4b38-9c75-5804cf7e5156\n0cf8a4a5-5a4f-4040-b75c-d1c1dc619512\n6c0f72fe-f292-4169-8031-fd590ad42f1f\n2a0cb128-d6ff-4bf1-aa15-69514cacaa36\n58160198-6771-49dd-a6d5-9848a9a44fc6\n4bb28e67-ca68-4302-aec8-c14807a6dda6\n312108ec-1e37-47a9-8393-734be92661e3\nda0111f5-d845-4a81-8f36-adcd5518dcb8\nd9345e35-96df-4aff-aca6-0aa284fe2df2\n09884a32-96ed-4cf4-9d42-9b2900e95f49\n6764d871-6ed1-4fa0-b170-33fc64816c90\nea25bf6e-0b20-4a02-a5b6-c2ba5678fd30\ncaa3440a-be56-4a68-8882-22473a91337e\nccef271e-8a76-449d-ab01-afd693a6ad0a\n3b0fc31b-6ecd-49b4-ab53-ce9ccd3b37d7\nb182491a-9134-4dcb-9db2-eb1939360ca6\n69fdf767-f895-4bb9-a165-de5b4eefd0f2\nc83507f9-4bb4-428c-a3f8-c7d47b9b4739\nf2540cc7-e427-4d5f-89c4-cb3f030e492c\n4a99b6a2-2916-4bb3-8bf3-19c61288ea91\n6079f20b-02e6-4c7f-86a4-d24fda60061a\ne8c4236b-de10-4b50-a979-86cf58ac4a3f\nd7dbc74d-44e1-4d12-808e-f8a8d854cb93\n2413b59c-9152-4bca-8dbd-d32f1c447a9d\n5d6b2e6a-3243-426e-a1ac-7909328359a3\n9e566ca9-d1fb-4eb1-ba5c-a202b42a2f4a\nbd377ae2-29bd-45ad-b3ac-c87a2831afeb\nf7100ad6-8ad9-463e-97b2-313544eec8af\nd6443f02-83e4-423a-a663-57bebab1ab9c\n1bd5b37a-a3b1-4baa-b6c1-c4bbcce8757a\nf985a048-762a-494a-bae1-73ffd2283661\n360856b4-0bc6-4590-abc4-dd4c4421e919\n5df05bfe-a309-422d-9754-8f14d6b47d10\n8614f503-f2d3-4e3f-9a0a-b8a0b3a8d1d2\na0d82883-f368-47bf-84e6-0a79b188df58\nd2b43763-a4bd-488e-b6c7-9703745bc8f4\nb384ec56-2c70-4738-b2ad-85d050a9a8c7\n20e29637-1872-4055-bcef-e83349ae3afb\n293d98f9-5ea6-4647-98bc-07b10eb3b630\n386a4ab8-08f2-4271-8d31-7ad230439747\nbb244371-e03d-4b12-aba8-83a12c324673\nb0c5d344-95e2-4fa9-b5d0-5bf85fb46a87\na1151258-2ebf-44e4-aeae-48eb8800eaa7\n0b64187b-16c8-4aab-b26e-bdb2b20d680f\n14336d47-0c03-405c-ae80-ce35fcf95b18\na4e66fa2-30b1-4539-9f01-11d6c752a5f2\n1e8a21dd-685e-4923-8d78-c7d1e78c06ea\n1a0e9178-223f-4912-ac39-5923ddf372f5\n4d49f33c-ead6-4c72-8c16-b4d7552c628a\nde2db1ec-53a7-4e83-86dd-63acb5068ae3\n7d8d0e03-a8bc-4a1d-a7f0-5c1a424a1c39\ndc5d66a1-061c-4a66-8392-429333d230d1\n6ab62482-334c-40d5-9654-89b0cfd9c1c2\n1d6cb1a4-c63a-4216-8eed-e8dd765cd655\nf4c69806-fa98-4204-ab4e-ed89366a96f1\n0981cc85-6870-4138-a630-098ad10d635b\ndb8ec781-6bb5-4f5b-9d01-e9a6a78f9e2f\n4da6034a-6d90-4941-b1e9-229e3f1e2f7f\n36f39f2d-4c60-4b27-b2aa-9c02352a2aac\n0a5b9b3b-c973-4d08-b211-21d23a6af761\nef11b83c-68d2-400d-a716-2a050357e158\na5841103-f249-46a6-889a-c1b3dcb372b8\nf6574e16-55f1-430b-8c63-6e782126bd07\n43e2e44d-37d2-4ea6-b9c0-a0044105b47e\n9800a019-e620-49a7-a0c3-35dcff4b16db\n219ce630-78e5-4a8e-ba3c-c582f7f2a6ce\na2faf331-f89b-40ce-b291-01abfc31e438\nffbd4cf3-8798-4aef-8f8f-12872a62d536\nc1fe66e5-7d48-4e45-8f56-e55a565b6a12\n2befd7e5-fda9-414d-9460-884ffba5e27a\nd48a20fa-0315-47e3-b134-0407f8d06ad3\nbf7ae745-0aa0-41ae-bf18-1a6a93180007\nb052012c-f2f9-421f-988b-5187f3f4191a\nfecb1d7c-ad68-4f35-a53a-a3dd26d2a11e\n60c92c74-d97e-46d1-9afd-a2beb301df27\n3face865-0658-4262-8800-1da3b06d242e\n939a0061-b257-401b-8e2b-a72dfcdc2940\ne2c1abd4-4aa4-4e0c-9684-eb185b954441\n40f08cf5-9944-49e8-b0ee-472dc0eadecd\neaf7f0a9-f544-44a6-8660-0ddcb803de3a\n803e93d6-d226-4841-9f04-b08b274d32d6\n11fca78e-c2b3-4b22-a675-cf3a718388b5\n461536b6-d2c4-4518-8bfe-dc847f4f0be2\ne17bd2fc-5805-485d-a668-a81984fd4fb0\nf1ec2f67-2940-4aca-8a1b-1184248cc0a6\nc2930c9a-200c-4adc-abfe-8683334a0c82\n0b36e3ac-5645-402b-b254-12e9ed12f4b2\n6c523134-0ffd-439f-abee-fa19c14485ca\nfeb4f48c-b530-4200-a068-b6513ea32efc\n49a1458c-be0e-4405-a795-4b30b3704662\n3298618f-26eb-4a8e-a458-070295c2e94e\nc3de3c9e-64d1-4e30-b553-ffd0126e07c9\n6755b9dc-5d62-4930-8717-21560d3daf4c\nb2c57e6c-c19a-4d3f-9542-1b63a4ed92ee\nae0ef05e-425c-420a-a5c2-192bafda2d45\n946709bf-aa2f-429f-8128-f0e44e52eb76\nd0cd7aa8-4f74-4b61-839f-4edb53780e29\nc00edf03-eaeb-4ac1-9448-264a8f4ad28c\n7e5caba2-ea09-4485-b407-3d1b5aba696a\nb8f77c96-0577-4bda-b0b0-669d0e5294d3\n6d6f6644-6a40-47cb-b45d-3febb73b5d0c\n6a5a6dae-0d4e-4c4d-b8fc-034f00398190\ndf967122-0ba0-4cf5-85ce-d72bdd9e9640\nfe76c5b7-5b17-42fd-a8bf-4928d404b264\n26b92592-3ee7-487a-9a65-f1f42c40c5ee\n9afd681a-03f3-4fd3-84a2-6b2f7dafb82c\n65ff1399-3a36-4a61-9f92-f654e0332e47\n588490c7-b4d9-4645-9e2b-d71ff704949b\n47121dd0-8c77-45b2-acf2-278471b7a7d8\n32c247e8-4c2f-4945-9cc6-e5925876952a\n3ec23299-be73-4b64-872a-11ee52208ea9\nb5c82868-577e-48c8-a3bb-f49e7cc00788\n8117a45f-e0f4-44d9-bdc8-a704eb795be6\neec84fb5-feb3-4180-bca5-8587c53b52b6\n2729daa6-4a16-443a-b63b-1e74e19c69e2\n9ea28106-7e47-4c29-8074-36f6ce700ebb\n30ec3b03-cbf9-44fb-ae4d-155846e837c6\nda2b9bad-2bc5-469e-823d-d20525ca36bf\n7aa21e0d-4497-42cf-80a1-aa959ae01d4d\nef0c03e0-2f53-4d1b-9aa6-cecb5dee7b23\n8152c816-7f25-4005-b6ae-5d2a4301ed26\ne8dd40c2-1d2d-4254-965f-27bae325d322\nda8a3e5f-c6d0-493a-b884-23ac749871cb\nbe572fe3-3acb-4e76-aed0-21d11e43b423\n7cff11e8-a0ac-49b7-b035-8471d9d8461b\n6a340b08-c699-4b0e-9ba2-35b68abf4016\nad4a9ea8-8bdb-452b-9f91-a4b4ceda9b65\n2c258982-17a1-4f2d-ad57-965b4876461b\n62c3f53a-a49e-47e0-aee1-7475f7e54778\n271fc1fb-10a8-44c2-9325-c129b7cf37d7\n808ab084-2b34-4f89-a075-7a40809f36bb\nfd6bc484-c0ee-489a-9031-7c84a6298c9b\nd0c8e0a6-98ad-46fd-a28c-3ebd5c29e1a9\nb75d6861-0f2d-4408-80f7-7b0569c5d550\n45d34eee-773b-4646-9711-872acf8f1288\n115f6ab8-71db-45d5-bc00-3428ecb955a9\nda3e9c78-619b-4cc5-9b46-91186ef92e9b\n5f31160b-d526-43b4-9b2b-d42525a9b446\nb492f322-3693-4479-aa05-719e40426cda\n6446c11c-05af-4bf2-b235-3239e3d9924c\nba8e2b74-3f89-404f-8bd3-37387682cb3a\n32438edc-68c6-4bf4-88a0-2981760a2715\n60fc3c2a-6696-4da7-b637-111295186f16\n52b0be1f-42a2-4f61-8ca5-1d933b8aaad5\n8620a7fc-e882-4f8a-b159-6d1a2d2ae2d4\n7336d578-9c9c-4916-8985-eba133fc846d\n77344dd1-0534-4941-a05f-e6767cce6141\nd1644767-79e7-46e4-95b7-3e96dcc65f52\nc6ac1579-68d8-4959-b4e3-224687461fe2\nafe548b1-d261-4b7c-abd2-d0ba245080b1\naf057da6-0ed8-4f68-84d4-9bb664d4959d\n92593c6a-db75-45dd-bf96-ed26942b486a\n199f1a2a-9a2b-49e6-9928-32951006fe0e\nd3bc220c-2b17-45cb-95e5-fbf4239abd91\n1b3f1a3c-e58c-44cc-bc5b-50fee4a00f74\n939ba7ff-dc44-441e-b6df-9658bd6d9c2e\n7862a4cc-958e-4abf-a46a-942defa4462c\n681c0dfa-05f1-4a90-bf9d-eb511f28b41e\n1a43d684-bd4f-4a99-aaad-95e57d218a1a\n2c7b28ba-de64-4077-bc49-8ec0f7daaa52\n6523c5d1-d65c-4661-b2b1-3bb760c396bf\n90eea71a-6a84-43fe-ab38-8aaf2fa6a741\nebbec950-67ff-46fc-be75-1556ba8f384e\nd15e370d-6cbd-478f-9694-d8faf344b26c\nb484e4c9-c87d-4e2c-aa82-f454c5691c35\na5b884d7-b5a3-4d56-93a6-131803a02506\ne2e3fba9-627d-4a8e-a5d7-2ff041828fd0\n46ae773a-5db1-471c-a53c-d811b6dedaf7\n67d7b429-d55e-4a63-a447-5cf579981943\nee8f1f32-c23b-4df0-af74-480093083bb0\nbdaa1580-d81e-4b32-82c7-85c0499b8029\n246ead02-7b80-4058-b5cf-7d1c9eb82e50\n47bc2557-cda7-4ae5-8d04-b5797e654e68\ncfb31af6-b82d-44f7-a979-44afa929d561\ne9ce1404-1540-40f9-af36-1475b62a04d5\nc5e8c3e4-d3e7-4c75-a40b-c5c6e497c890\n08e54902-bc98-4f49-b463-367f81494cdb\naf24b0ac-e3cf-4fcb-8a7b-c78778621bef\n43fcdda7-ac68-43ab-8387-1469c623fae3\na1b00661-c490-4627-b1ef-eb6e0f92de30\n83f9555a-e2a9-4f3e-9bb1-6ac1cef59ad1\nc3fe2f90-2475-42e6-b701-141034910c06\n641e7624-511f-4b68-95f5-e2a528aaed20\n3d6d769d-640a-4ba8-81ba-d3a33c8cbe92\n1282f029-6a8e-4605-ab3b-bfa97570a5ce\n3f2631f5-1bd8-4a8f-a8d9-1e6b4b269030\n06ca9e93-1f31-4cae-b461-0d3119b80b3e\nd2a91361-d211-4d88-9ba8-d83c3848011d\n0030cc7b-a978-4224-a737-0efb83905550\nc899dc7f-a97d-40a2-99e8-f599d2055810\n81b33582-77f4-42b2-a073-1086105e132c\ndd53b2ba-1057-4c43-ab66-8078e92e876f\n26651b38-afec-48d0-9f6d-95d05fd0a6cf\n11e1dc84-5ded-4698-86b3-b2134cb96b9e\n308ab3e9-e3fd-41d9-8fb5-00e53c99ee7e\n96344bf7-1d50-4524-b858-d868e400879b\nb319eaf9-53ba-42a6-9eab-6f2850a7f6af\n46ba9d2a-1305-439e-83b6-1a88d28cd1a4\n9b7c78cd-17fa-498c-8217-27b71f9c5c6c\nead39c0d-1e2c-4462-9d6b-a108db1504c5\n79288a61-a947-4eda-b3c3-c68ec632399c\ncb4844ce-ce8f-47f8-89c9-bf34264884e0\n22e6c49a-82ce-4e02-afcc-5b00588d395c\nca244b0d-a96c-4f34-91ea-9cb7542573ba\n6b38baac-641b-4658-9151-4b945254aad8\nfd2bb0f0-f14e-41d5-8e76-b1a480ca7102\nb44d3409-1d8c-45b1-aa91-5de204038ae5\n453f4813-b5f8-4df6-90e0-26df296bd837\n416bdb5f-8716-4078-8bda-c9e4d3dcad2b\n5e8d5893-c561-422d-8785-f302e695b594\ndd782362-d0de-42be-b452-5cc6fcef7f61\n8c5a4728-7f34-4957-a3d6-b6739c42d0cc\ne120e307-c854-4857-a804-4e2abd6c2ae8\n1aed61b2-6085-45d7-a890-e84fdbb68f00\n5ac4bc53-1270-43c9-9f9d-9c320e23886a\ndec56413-6099-49e6-b0b9-a256b09cd1da\nd5daca22-3412-4413-9fc2-eb296c7b7000\nbe1949d1-8830-4f8a-b2d3-6cf7b342df32\naee78b5d-55f9-4704-a6ec-a5014a3fae03\n21990393-b103-4b8e-ab1b-51d77f549f08\nddb84688-152d-4c89-8011-0bfa83b1f2e8\n90ada572-dfcc-4150-b076-d484db6fc632\n9448e1da-0d16-4d04-ac26-1295e6fc51ab\ne099ea0f-277b-432c-901b-56aa8e142cb9\n459f14e9-ea84-4614-afa3-c016b38d98a6\nba3f2d1f-9adb-44d7-9131-91bf2b6ff4b5\n1a209762-de7c-40c9-8b28-cd2da4a1810d\n6d835e33-fb95-4c0a-a209-a6e67b14386f\n48983906-86d4-4b79-ab07-15f6396b4b20\n9326fd52-51eb-4bb9-916f-b741d46c65a5\n9df022b4-fc62-43e8-a7fe-71f50a7d2deb\n21e54d37-b4b7-4e22-913a-e4a82372e026\nf14af48d-aacb-47dd-9bda-c2bdef440c7a\n6b2dda55-9479-4e9b-99d8-92410da6d327\n5abdf171-0c72-454b-a4e0-99c66fb8e96f\n5f566800-22e0-42dd-9c9b-3c26503a4c22\n0dc89e82-c7e2-46c6-99ad-c97c57339e53\nc81c6978-d326-4104-8494-815b5bba41c8\n79c3cc7e-00b0-4f9c-9e60-bcb1ace36ee9\n03520e59-16d5-4ee1-8d56-95044daae1b3\nec89f4d4-9412-43f7-8b8d-d8f8f20f8ebb\n41935845-1146-4e22-9a95-aaa49ccf4ce2\nb98e4de1-f7d7-481a-8503-8d91db4376ed\n6ec289bf-7f95-40f3-9acf-8548d50aaa38\n5ef9ed93-2936-4512-97e3-a89c14bdbf30\n593a7bfe-62f9-4d0d-a283-f8f61ce3fe5d\n30d49fa0-9530-40de-8f38-dc8b4092a2d9\nff01935a-1c27-490e-830b-9f055adc5027\n0391e8d3-c149-4e0e-8f15-4edfc3517cd6\ncd186c29-6607-4c69-aab7-780ed3115f00\ncf6141d4-e135-436f-b172-46f8cdd66f6d\n64d3a183-3800-4aee-8753-e7aaebffec28\n2004aa21-8e42-4d4b-a15a-5369a5087cc0\nde67b0aa-9fde-403e-8b39-353b44f7bae0\n2d32a0e7-986a-4877-9dbc-60383f779c7e\n00111ff3-6e66-44af-819b-346e63d8b84c\n8fc35260-9654-4bed-8cf8-4ee7c9a401f0\n27ec27ee-5f90-427a-ba1d-3a6f8b9dd283\n53c39a2b-5112-43dd-990a-08992d0e9afb\na8e5c687-bb54-4a5b-beb6-5040a452d2ce\n3d56e57b-dc76-4524-928d-7dc9189ef853\n868b67b9-f319-45b2-8174-66de5b129f68\n183c91fe-0d2f-412a-970b-bb97a7e67fa4\n4f9d0d36-29e8-46f2-94a5-623847377cd7\n318be746-a34e-42d2-9944-29fedf088473\n00ab6a1e-7560-4a48-aa73-79d867bea4b8\naa21a2e4-2287-4b28-bac6-17474ed3645c\n8be7458e-8941-453b-a8cd-dc1d025f98b0\nf0864149-1b7d-46cb-99a1-06ee8eb6c760\n19cb4a74-eb55-44f2-bc22-05ebbb403047\n3d328230-7943-4c7e-af42-70a5f11bd046\n2df382e2-3811-441a-b58d-a2f70c424f5b\n04b556a5-b80d-4883-aa7c-a5aedc30ba6b\nc7586ce2-3595-4d94-ae90-d10f7acbaa49\n16d1d51f-56f0-437a-adb8-a8a1c60bbae9\n65f9f13f-7bab-46c2-b7ec-b5b95b8c8713\n5f1538af-eefa-4396-8d5e-8872b99f051d\n1e13964d-d253-43ce-91e4-5d076121f3ce\n1044b321-2763-4c84-b77c-6c49edfb36fe\nc0c28a5d-643a-4044-9a00-9d2240700859\n9d1d9b66-b1fa-4441-a65c-45997b9f0915\nd1da718f-9864-4cfb-b522-1af80609102e\n51f81683-78a0-4e3a-96d4-dc50c43ad4ba\nf0e432ec-2f30-419e-8700-243672b3a3e7\n38caf319-9b6b-41a9-ba0a-38133bd2e8cb\n25702614-b742-4124-90b3-9280566b4f2a\nc5456180-3556-4ec2-b493-e84e45522f99\na5e7ea14-23e8-43d2-9a36-44532e0c42f3\n11794112-061b-4a18-bbac-4ea628d11aac\nc627ea36-a4dc-4e0e-b55a-cc3de1c425e9\n13aa8c3f-1c11-4630-b238-4bc10259e5a3\n3c9b3076-181e-4a03-9610-3072e3d1f2a8\na7df1587-0dd4-4cdd-b4a2-a98e5f7bdccd\n3d80d137-dda8-4264-93f8-cdddc9b88eeb\nd848989e-f00b-4c7d-907b-42d4698ca5be\n85445826-6ed3-4eda-ae6d-caaffe142d66\nc0fb4291-0fe7-4cd6-9aa8-3703d511baad\n9f6e8990-b518-4f3f-8e8f-df7d835cd801\nb434b558-a505-40fc-b4a5-32a8742e9f15\n9e419645-e4a3-4127-a3bf-f2d068423f57\nd7f44823-8d71-491e-ac1d-14cc6df00316\nf087a9de-b031-4c02-a917-6a5b1050553b\n696b24a6-900e-497c-a34c-c9c9182b86c1\n11dff77f-8a5c-4851-b68b-739e30b48d84\nfd25a51c-cbb1-4967-a3e2-f92c97f9ead4\n81e78c72-1d67-428c-80f8-3b2c7947b9d0\ncaf56ff4-4360-44aa-8f41-cfa189eeb21c\n133314eb-e774-44ee-91ce-059868b1dc90\nf1502118-903f-4708-9212-dcb41963d41f\ne98b7071-c3c6-482e-a4a5-a245afd77d10\n7e8c5f5b-98b7-4106-9dc0-8f705356eca2\n2160e988-2aa2-4dd4-9764-019789f1fb63\n91ddaf19-5488-462a-98e2-eebb1fec8729\n0aaa1d98-4e11-4ac0-b23f-769cc93de3c1\n7520340c-464f-4753-b1de-dc948a305ba3\n8c2ea8d6-6a41-47d4-b699-26aaa3f2a5d4\n0351c41b-332e-45e0-84f0-e7b58d3763c2\n457ca6d6-5f25-41bf-be52-c269b9f33ae2\na4d49fa4-ab0c-4eec-85da-da5205559c1c\n3bd66c0b-6250-491c-a5a3-b42907bf2215\n7614859c-2ad3-4d0e-936a-a3649e2c3178\nca50dc86-69e9-42f7-9bec-7e1a9adce218\n9cc9c611-0d45-4534-a494-e45f028abb1b\neee2a305-cc26-4ccc-ab88-f1792f6e8448\nba9f71dc-7d57-4d47-aa5d-a8041ecfbda4\n1d69d9bd-ef4f-476b-a1da-0b3479ac3ec7\n40d3844a-d230-42a7-9c1d-cf3e63675c02\n0b0b58c0-d836-4f05-bd67-1cd73cd918fb\n73c553de-6308-4c61-9a51-4ac7258d7069\na191ffaf-dc02-4798-b594-bc183f95074c\n1df0b392-0c6f-415a-946b-61308888bd2f\ne6ebe286-fd3c-47e3-86af-5044a8b92524\n8f5dbea2-1d9e-49a2-832d-8008f9e9b703\n6ef11d19-c475-43b7-ac35-87f889f6dbee\nd8b36365-24be-4fa1-b4e7-d6e9eda97d05\n50651826-085d-4618-a19f-f580a31f4d5f\n9a7bfb36-84b0-4cc7-8702-587a5bb320b7\n7a3e83a3-6b4c-46c3-bbd3-476c1c111f96\n0d8ab9a1-a488-41e1-8ed7-c1728b6ff74a\nf06eb93a-d45d-4f1c-9814-fbaaaa2bdd98\n90f04410-dd58-491f-8204-230516de5ee0\n5e322e97-2b95-4333-ab71-2d77ee33b5f6\n07be8570-e0bb-4cfd-ba19-a01a67805732\n260b9466-38bf-448e-a8ba-f5e822fd1984\n8e4a18e9-68db-4ace-b6fb-20fb3cbc61fd\n26ee4254-389b-4aa1-8329-f9527dbedce0\n5b4f0463-879b-4161-afd1-4ee11dab6830\nb6ad5c17-ed09-42c6-aaf1-1480d4677d61\ncc73c7c7-bb3d-4526-8197-996d1a5caeef\n52b50311-73af-4401-9eed-2c634b2a0cdd\n1e782472-a5cc-4569-9c49-a72fec20fe88\nfa566201-f636-4aa4-8f1c-6e497275b20a\nf97d9f2e-ca14-4ea4-b978-17ba1f8d24e3\nec4b4ea9-86fe-47b3-82bb-8d3166ad057c\n6954943b-be85-44c8-8b2b-be3c19bdfd06\na69966cb-6721-468d-9d22-9d7f27d9fac8\n01099175-0af4-4b7b-b43a-2025ba670f5b\n31f69fdf-c95c-4b3e-be5f-a94200cc9efd\n19df5c6d-373a-4a96-a33b-f06498a45100\n71af62d1-cf21-4763-a72d-5c6b4b2d6145\n70f19f10-d629-4b90-8120-beb84cc3f180\n5a09b0c1-6541-4a98-aa39-859fde59f179\nf95cf50c-dcac-4060-95a1-5ce387df684d\n0ac35eb1-3a21-46d2-a1b0-07616a8450fb\n0b6f0d4c-df5a-41ea-bace-769ffcfa88f7\nb9bd3e5e-331e-4ecb-9896-9d1190f66b91\nfb2d92be-ddf2-48fa-8d00-989ff1d6d8a2\n5251bf84-31ad-49ac-a30a-9e1a0534e6f3\n83b0df69-d0c7-480b-aa98-ddf53e21fb82\n37577597-e412-41a4-b6df-82ce76a28a56\n16182dad-3323-4fb6-bbfd-af4027951d78\n7f0c5dc2-a35a-4443-ace7-76c09b394cf0\nef0e8595-04aa-4f09-8c42-056fd68ea4b8\n9f592baf-26b6-4a26-9dd3-82fd25a88803\ndd9ee4e4-b751-4ea0-9ab9-dcd1c4c03837\nf7069fba-b007-49ee-b38f-74386e8c3d7d\n15e52a4a-d0c5-4dc2-b1f0-9adbfcddc55d\n12877bc6-afb9-49f2-9261-b0b5d7d40b83\nec5d51c7-1577-48fe-a8e5-135d34760e25\naeb06d4f-f7ac-4b97-98ab-76015561ec32\na232b79e-8d18-4af7-8b3d-7584fa482d27\na0880cb9-f8f3-492b-b850-861fdd6903af\n320ec2f2-e0ed-4310-b745-94991a22bc65\nb50d6dee-5b84-4893-880d-6b80b6e43548\n479ba953-f82e-4234-8469-495be8a6b934\n2e25ba36-df3e-4396-9061-bd6ad1e760bc\nd7c9f6d8-8887-4867-b0fe-fe6c55426fd4\nbd7489b6-53c8-40c9-9666-ec7540c76a2f\nd8d58afd-4924-423b-8b29-d7ff595feaa8\n8cb57dcc-c5a7-4166-9e25-6b6687448cfd\n6819e06a-face-4098-8925-1906d8ba6dfc\n6c4f1cb1-3050-4581-8e8d-d1ab1c3bbc8b\n6b200d36-ae5a-4207-b69e-36635461f05d\nd9f74e15-555e-44c6-a4fc-01345b02a697\n7aec3a27-0fdc-4df3-bb2d-5e5549370a73\n7588403c-7176-43c9-8ca4-c5478fc04446\na8e17ac4-f731-4bd5-970f-e67fca114f15\ne4ddd1e3-5ff3-47f0-8c4f-815ca63650e5\n55076a23-0f13-4a16-ba80-c28c38f3d9a6\na6af2e7a-ad01-4954-ba1f-d329b567dfb0\n91e216ea-df20-436d-84a1-42fd3fa7f8a8\n84a30034-3cea-4b6f-97d4-3a32ee15e2ce\n601e8e79-38ab-483c-a4c4-5f451c4b38b8\n040f5004-f2cd-4702-b670-452c6b9d656e\nb64b9f2c-f014-43a6-9aac-583241659d2c\n5bba8000-06ae-4767-8c2d-bab28af44c78\nc415bb5a-12cc-4c5e-9c1d-2a5e2b7b0ff8\n797ae657-6484-4377-a193-79b6b4cee67b\n2f483de6-5ea7-4656-8ed6-e060f1d04f3c\nc69dcd3e-c13c-430a-afdb-7b4907a8cfae\nddf1c929-1ec3-4287-8a5a-7d3c721100f1\n951561a3-a4ed-4969-853b-831de3fa9320\n8963f01a-d074-4373-80ca-cbd493bddbe9\n1f792ea7-e9cd-4cdd-831b-29d4eb25a4fe\nd9a1791e-e925-4a10-acf4-5ac6c447cace\n947306ec-bbd0-40eb-aca9-68e89be92040\n2e703f21-98bc-40f1-a820-3d9c48765b7f\nec062416-548a-4c24-9547-201d6d3c64f7\n3dd8e3c3-ad58-44f6-985f-fe1cd4fd8fde\n48976bd8-6e91-422b-b5cd-39146d332f5b\nb897489a-610b-469f-bc41-68cb84ba5f97\n0b8daa74-d9a0-4deb-a08c-a4fc8049a1bd\n7cdcd71a-4057-4a3b-b8dd-ea75afd1a738\nc68ae205-f6bd-4479-b3de-73f86b8e3598\nb15b101b-71af-47cc-a3e0-75d6bd0e0e5b\n1262a692-7149-492a-886c-164ab05ee61f\n1be72b07-4458-4912-9382-e70420e09e3f\nf64118fc-8a3a-444c-80f9-f6cbd11b3739\n2a8f1790-5d2d-4e3d-8af9-3ea11063de6f\ne701cce1-d0bd-4016-afff-06df1a3bbaf9\n5a5fe899-e896-4462-a231-ddfa41da8be5\n11ef7d3e-9192-4d9d-a3ae-7481625accc2\n1f34e989-f84d-4a5a-a728-5c2b2e14ffa1\nd73358c3-9b1e-45fa-93a3-ee195d853bc2\n1069eb2c-240c-4659-942c-839381467f20\n3070794e-74cc-4d4d-8ed2-49106b2b37d1\n8cab3b85-229b-49fb-ac7a-a234a57c488a\nb257fe9a-3133-4b73-8745-26f9b88d319f\nc25ad1e5-d13f-4a68-a1e3-012ed032c237\n33e6da11-dd8b-4b0c-ba07-c7d81a9584b7\nfcb372a3-aee8-4583-89a9-db05ff4d4046\na57a6f14-bc8e-4ce0-8195-483e4ac539c7\na6167832-49a4-4149-aecc-a5059565694d\nba90be7e-69fa-4c43-80f9-615605508b63\na3896f46-76ed-49cd-9c73-d1e772340d71\n706fad56-249e-41b2-a3ef-95d3e1a85398\n629c40f9-b309-4c15-8df6-f5fb78252bd7\n9f8a0c92-8e82-4ca0-bac9-a8c5a75c28e3\nf6eb654d-368b-4c5a-9947-268ad1bfa23e\n706cf6b0-5307-4124-a92b-11d05132082e\n3add9e32-f0eb-4543-ba24-c3c3bfa78350\n5c266267-b02b-40a3-bce0-0141763264e9\ne33ccdc7-3335-49a5-9620-9bf281b39bc4\n2e6ed946-fbdc-4d13-99cb-795571308954\ncd03cf39-d091-47bc-8943-02fda4a39885\nb8e116bb-7ec7-48dc-bfc8-778f02ad3a0e\nd1f47e61-4679-4609-be2b-a45179d359ac\nd31433ee-aea9-4d31-a910-8aa1fefaa2b9\n898f8663-e249-41e7-8053-665cae2edec3\n614b3de6-164e-4509-9192-6849da03041c\nd07f88ba-a000-4c19-98f2-11ba2cbbe91c\n72a6be29-8676-435a-8a9e-626ae381be4b\nd56e628b-4aee-4b3b-8350-9fa7167c7891\n75beacf9-063f-48dc-917d-5f7533b9f602\n38a6f873-ae3e-4b16-ad27-e054aaa2cfed\n1f4dede1-b2c3-4141-83ee-b86dccefd0f2\n61516b27-65e1-44ab-9965-908b25b948d6\n56b991ed-31e8-4643-9a2e-d44b7a1edb1d\nd5909492-4ea8-4434-b089-3b9fa9a530fc\n8cb5abe1-695c-4a44-88b6-5e418582ff10\nfef8b3d1-b5fd-4472-8ea4-5df8a91c3c7b\n03db0b82-07dc-4081-b452-81d62502c344\nb8897b48-f8bb-4166-842f-ad2803a7bae8\n9fe030b8-4f3b-42a8-bafc-d9865c0357b9\n0608c304-64dc-45a1-a4c1-deaf8e9e2b46\n3cbb0648-9f0d-4f53-b4ef-107c8f2233ed\nfa34b042-907f-4e5f-bdbc-a9caa24b990b\nd9aac55f-f8f3-4f7f-9fc1-23c6e34e2a02\n91e08ec8-5089-463e-a7f6-0d7c13fb7c05\nb3594656-e72d-402f-8a45-fd965516eba0\n6d60351d-df3b-45b1-8f07-f638831185a4\n61a1607d-3d46-4bc9-9ac3-dc67e94eeef2\n108c2455-0fca-4081-8778-68d37b6865a7\n83d2e212-5dec-4505-9174-e18b5c0e4723\n4515bb55-41b9-408e-b3c2-396a10275fda\n0a9461df-d2a7-4b74-ba55-7bfda2f94d59\nc84b50fb-6dde-401f-af48-d4343673c294\n2e9ffa79-91d5-48dd-9262-89dd1aad5032\n389ed55c-45f6-474f-b46b-e41df72c92b3\n25e5ea12-b6e5-4bbc-a8c8-3f4680a70ea5\n6f53c832-1415-461f-8aa7-d20989af093a\n25aa80a4-86af-4fa5-8e7e-663a69108771\nb8f3fc9a-89a2-4905-ad9e-c9d9c9d41842\n56edfeb6-dbeb-4994-b77b-dbe838b22596\ndba887df-3e9c-44b0-9edc-4f1ba9f7d8f4\n25dcb752-88d7-47d5-9cff-1543d55fb39c\nb0975b77-7cf6-4e3e-90e1-c9d59b71206f\nb733a39d-bba2-4e23-bd18-5fa3da625447\n1793eded-28c1-4bb2-a324-b2058dc82d9c\n219b1f8a-e20f-4912-8ebe-970e63d78874\nb5435d08-dbd8-4192-816d-5943dd389848\nd322fbb1-2a2f-40fd-8355-01283d6c5cd5\nf7c96f5f-4719-4f0a-a5c4-208d668fa227\naefc9eaa-8b7e-44cf-bc77-7919858dd34b\n20b1e5c2-17db-4bd9-8d9b-226b9afea18f\n7c6d4d23-93da-4fb7-be34-cde759454379\n6017f73f-2643-4972-add7-5807fc5a1b3e\n0a032f1c-e129-41b3-ac53-937efebc8e7f\n375de7e3-72f4-4ed4-8bc2-a4ba240129fa\nb4b6b5d6-1590-4a39-a1dd-85f70a20bee1\n9c12b61b-f0b0-4966-9bf2-2cfa8d47f75f\n4cea8e9d-3301-4715-b3ab-6a57f08383e6\n4c57f984-f267-464f-b0a4-900420416e58\nd71ff697-8416-461d-a0ed-ccf79959e42b\n8a2f96a7-a002-44c0-8d9a-83015be937a9\nbdd5b09f-c8e5-4671-89fe-bc07ff01f160\n5fe51ec1-bebb-41cf-9a45-5fd97580f60b\nd098fbbf-d966-47d2-9a06-cd65aac20211\nc7e12181-92c9-4050-a723-26bd853d1568\n1c1096fc-f069-41fa-a16e-261c08a85466\n48898d34-3114-498d-ba6b-1df3cf0a06e3\n1a027b28-9c9c-41a6-ba5a-13660f319aa4\n6c83920a-a2bb-498c-b04b-660f067804ca\n5e8333a0-74a3-497f-8615-ab03bc23902e\nd2050882-4c8e-4137-9665-575b61d3ecb1\nedfc1948-9074-462d-af2e-601ec43fd6ec\nfe9c251f-a7a2-4176-a634-02ce25486a4e\ndab3de87-331c-4e35-bd5c-2fae3ddc88e8\n2bcb0b93-4238-4fe9-a81f-2762e5ae7a64\n991834bf-f9bb-431a-b495-1cc5dbac9d06\n1ddc34a3-2fea-410a-8e0a-bc9ee1383470\nfd499f64-bb12-426e-b363-4767a2d60104\n403d0901-f978-47ea-bd69-0bade57d7556\nfbc1390e-df52-4cea-a2e6-e53d65cecb51\n4c4fd20d-feca-4a05-a381-3c7121dc8ed4\n4b497326-fff5-4b63-a2f5-04ea33641e54\ncc2f5893-e96e-4368-b6fb-d891e97a1797\nd8b682c3-0f64-4e86-9617-3bd5d7126dfb\n87d4f8f8-79e6-47d2-b8de-db6a15f05325\n8285c59e-a99d-4fa5-8381-44febcc6dd4a\nf09d0b4d-4f1c-4823-b6ee-29e02315adea\n3cbaeccc-61d0-4d46-b7de-ffdc0bd65ecb\nd636fcef-c1d2-4001-91df-6cc58c837aa3\n702bcb74-1905-42af-9d15-e48d04766e7c\n2f730293-b89c-416a-be0a-3f6fe6c489f4\n12cba557-54ff-4358-b626-c1d6199517c8\nf395ba9c-a39e-48e6-a2b1-47d607f5b009\n5b7cd963-92a3-4baa-859a-ab9d0db94d80\ne83e0bb4-d094-4495-b7b6-fed676961cbc\n5c29bcad-e5ea-4595-9f2a-0a7331d180af\n98a1a9b1-b111-419b-b235-3b5efc59716b\n1295ee66-b1d7-4920-9a7a-f30dfba83724\n2361f1b2-b150-468c-bbc0-30060c77bfd0\ndb349a0e-72e6-4046-b899-8b14b0946eb4\n7633affb-6498-474b-ad79-5e7edc932765\nc3daa393-1bfb-4fd6-b84a-ce763a7cec0d\n9fe19172-0ea2-435e-9293-621ea071ad44\naa10ef87-8e69-4480-bb84-fcaa71235332\n2d54ebbd-a76f-4d0a-8609-0673bc168c93\n03c2249f-d845-46c3-afe2-d42e23a5f6ba\nbfa09a12-b668-49c0-a605-86376445d1c3\ncf0c9616-a77e-4318-a6b1-a93ce40e4608\n795bba93-3ff0-4ef5-ae12-26bdb07fdc85\nddaf39cf-a573-453f-b0e4-a518b238b16a\n53e1cd8d-cdc4-45bc-bc56-e5a83c131f4e\nea8d4250-bc8e-40d8-bd8f-174ffb46f8a2\ne8aa03ca-5faa-4b8a-b7a4-dea936d21b3d\nb1e42242-d69a-44b3-9e5e-aa3a0d8e9fd8\n05c12515-2ad9-476a-a945-fcc028e1c1e7\nb79146ad-8da1-497d-99fc-ca05a5da4258\ne14dec2e-efd9-4ef2-9af9-d721e13669ce\n3bfc3339-32ab-45f2-9b59-c17d99af2f6b\nf52f3033-4aa9-412a-95b6-81497769ce25\n20b9219d-9a06-4b78-869a-06c8fe9cc219\ncd41d3f1-5175-4ce5-84ce-3adc96af10f1\nec251fcd-67d5-4f23-bb78-a962b3708273\nf6b2d836-c2d6-4bbf-a0ed-9df0b7f726bd\n87817d35-7975-4602-970b-692f42a28d13\n2bac05a3-3df9-4aed-b6cd-57f956d90349\ne78a15c8-6c5d-471e-aad4-e678f07f4301\n163921e7-e627-4602-8906-a934ccc49f76\n2a5529d1-9c93-4d42-8c62-d0fc1cf1e6a9\nd2c545eb-fd09-4866-afb6-865f5fad1bd1\nb640ffe1-f5e1-4de7-9931-4d1bfbf8d117\n8ed5b0f0-cf37-4701-93f7-0c526efc045a\n42e8b45e-de2d-41d2-a09a-686806f6747a\n4d168a91-e578-4f7a-8bfe-f083d6ea8974\n1c2cfe04-2e78-4857-91c2-7e77d5b87cc6\nb99fe435-98da-4e38-bf0a-49a13d4836a2\na3779031-ac17-44bc-bea3-05c9057745a0\n2c81fe3b-ab7d-434a-bfda-eddf60d9f9b4\n9770d414-fffa-4912-9d78-c4d8d0ebef47\nd95c41b4-70ef-4e45-bfd8-46017ade462d\n0a93fa76-447e-4788-89b3-84a912adf132\na8a7e50f-59dd-4169-9453-05475a15ea0f\n612c3172-6781-477b-968f-83b458093048\n70fecfcd-470f-4613-880f-6421a41177bd\n604d1d33-178d-4238-91e0-ec3c856dce81\nb56fbff6-21ff-497e-8496-c8dd3dcd1f11\nb1bcc4e4-934c-4e02-b595-4f7a5f5fccaa\nad27161f-8cb7-4a82-a2f5-363bd4cac62e\nf86d3fbc-bf87-4aac-b4e5-21e69a07cf17\n9242da3b-ad43-43e2-b693-3de7b66fa326\nab1d1b1a-4b43-4375-a4bd-0bc2b2079a4d\n32bace33-e7d8-4204-a3d7-cace0e7469a6\n7c21b61f-a56e-4325-bcac-841441befb3e\n49ee91d1-d4ef-4788-8d76-43cf78d63c03\nbd48de04-b848-4a8c-bbb9-14c38f06dd0c\n80ac0c8e-5ef8-4236-9421-002b12aa3b1f\n39baa2e7-718a-4f61-acc6-0a2c3fb6fb59\nc156e4ae-6c3f-4959-813d-8445bc5285d3\nf5d0a267-91be-452c-aa79-5bd784525502\nb077d44b-b35b-48ba-b642-ee6a040e3ce4\nde152db6-ae18-4e1e-8b84-97aa7d289a6b\n3f2f2fee-bfa9-4558-8c94-ac60719ce9b3\n059d1137-0e80-4b6d-b5fe-11dea00d39f1\n03a61f09-62e3-49d0-9cf5-4d2550a894e4\n90e766ed-aa5c-4dcf-9536-28392eb23f7e\nafa656be-0368-4e94-98ae-372979a459b2\naf840444-4299-4455-8f98-46dd6886adc2\n1380d6f8-0e3c-476a-8875-fb8053b61f56\n6f277786-aa61-4572-bb05-049e310206bf\nc4982d9c-89aa-412e-a941-bc8f8cb7f5fe\nc2652515-020f-4298-836f-eda4f10e7f24\n7b2205a0-2878-4944-afb2-ba853fb8d60b\nd2af9f4b-1b64-4227-892b-e874c941e0f9\n54d267a9-2a89-492d-b1b1-0b3d1ee768c8\nbbd8ab22-53fc-4992-bc05-e1a494e13f49\n2fa23ba8-ed6c-4f05-9e2e-fc67dd5e1450\n4abcc6bc-e790-41ed-8d72-f6341047256d\n42e1e08a-b645-46d1-823c-bd040abb5be8\n3872f097-ccbc-4574-bdd7-b5ec65b5ea98\ne37c33d9-d807-48d8-9787-f9954055d48d\n2d06edef-f456-4fe7-a79b-730211800d5b\n15fd0cbe-5cdc-4072-ba70-7d6122b7e6b6\n37331745-e290-492e-b4dc-5f2e1ce98a0e\n14d6b439-f5f9-42b6-8517-29d6d5e01142\n601507a9-88fc-430d-9ed5-4305b0911870\naa566a0f-7d97-41fa-97ae-28079338cabf\ndcfabbfc-4db2-4cf7-8cc2-8bd750a156a1\n05e58071-fc7d-460e-81bc-929b370399dd\naeab97bc-c71d-48ae-9d70-0e455eccddb7\nea8558f5-30da-4c53-ab3f-ed2e2c8e8ffd\nb9fd08cb-e0b6-43b2-a500-344d43f8d888\naa9ee96f-a287-4ff2-9131-2cb05e053d18\n716b2089-87ef-410d-9163-6bf84ed0ff9b\ncea3cd10-8831-4d48-ae64-42847c9a0de5\n823266ed-d5f3-4d9c-8d00-45e9c64d61c0\necbc14c8-5a16-457d-9264-e7b5310f962a\n482aa074-695c-43d6-9031-f8b5a5b2168a\nbbf11636-7225-470e-9da7-baa2adea0bb0\n3e0a0865-5a66-4916-a01f-5dc8dbfc7a8f\ne73e9f11-295f-472f-be56-3d9551de3872\ne247a912-1bb2-4060-b7d4-48bb735a43b6\nc3a2d58f-755b-4e49-bf29-692c7603987d\na1941d3f-ea5e-424e-b5e0-7fce16602e50\n38bc86cb-ec50-4db1-8647-c4c51f0621af\ne1227221-0dfe-4024-a061-105364301ff6\ncec9cfcb-67f6-43ff-9d6c-f88b7f07bf30\n3911fd42-6195-44c2-86d0-585d696f188a\ndafef6f6-b943-479d-b213-61078aa27b57\nc7a83210-d926-46de-843b-619872d6aa94\n42fc4eda-9b19-4559-aa42-4db167ca5977\n0c1ca7f3-cfd3-4318-bae9-924d147da04a\n451a764d-a0b5-475c-be79-54c3165be0c9\n12dd80c7-c925-44bb-bc28-0b0d39b1c321\ne4d2c964-d91e-4b0a-a22d-2e673b353434\ncf1c53bb-380b-4019-ae69-ce574f910dca\n00cf578f-fd06-42a9-a3d2-362d7eb43b3b\n15fa8499-e3f3-4703-9b9a-23a95b639b11\n36efb74a-1cb8-48a5-9c27-5754271a0adf\nc75ced14-d492-4d1f-8da1-84a4c8b88bb2\n655bfe4d-52c7-4f94-8583-7c2398112336\neeeead23-1239-49a7-a161-50e552e96b01\ne37f3b5c-0faf-47e2-8b64-1ef3cbce4e25\n2eba4266-95d2-4985-ad31-dc25973434fb\nd0519d6b-89ef-473d-bf3d-584646ce66d5\n2dc4a3b4-fd9a-4537-a11e-81d78ec1de57\n8e77c83b-6d26-408c-a412-919494e0c418\n3549ef8d-c953-45af-a013-d3a25afd80e7\ne5f37568-612a-4296-9dba-1236da7e4c2c\n3689dde7-aebe-40ad-8ffc-4da606437d29\n2365a3cf-b143-43b0-b29e-d0758a49c8e4\na357ec6c-e61f-47c7-bfb6-7e0e27be9b08\n84eb0ddc-90f6-44a7-b2bc-df50d8713a7d\nb308b41b-7f08-489d-97cd-23597efefb9d\nf32c9caa-37bd-481f-8620-b4c2b8f40a99\nee5759d7-89a2-4912-8776-7ba723f8d76a\n2608a393-87e4-4423-b1a5-d4b5def063bf\n43190730-a255-4fbc-aded-4f107f89b173\nfc93f2da-ba3c-476d-8753-55df17578b3a\n142d4d9e-3084-464f-897a-b23d26cf9c1e\n39250002-ef31-492e-9045-38edabeee862\n504a93ad-4c02-4dba-ad45-c023e3fca918\nf8f7de69-72e2-4248-9f38-42a27f9afe12\n4889f0b4-57dc-4d55-8036-7d3b743d81c1\nd6b1c7cb-7b67-45fb-9bcf-c67950ec7503\n6f6b8b48-4fe5-406b-91c6-d885379cb355\nc5d4e125-e785-497f-99d6-7b6677735357\ne0b6ed6e-a8d8-47b8-8d5c-4439f81625f1\nae43a658-9333-44a0-92df-7e65ac4bd35b\n589dd241-2fa1-4c48-85cd-aac822402c23\n5a683f0a-9212-4ef0-91d7-1172365b0e27\n638a31ac-0bb9-42b3-a47f-b3d5ebb4948b\n9a554256-4624-469a-9f6f-09d528e491e4\nef5ebadd-b13a-4de1-8f0a-9b86b4ed0c15\n0a5fda79-ad17-4733-a9e7-094a0c21d40e\n4ce4b852-2e9b-431b-9672-db18a4e2ebc6\n080b5ef5-ef72-4152-bc0b-b8d39c156ea0\n2f6b6e22-e934-47cc-94cd-09abfe418824\ne9dc064f-12a5-4b5e-accb-3fa12414ecc8\n5d580d76-e773-49b5-b126-f2826582c99d\n101a6d1b-d433-4718-ac10-ade98d6ac9e8\n88b72798-4d18-4af6-b7e2-7b8f7fe7cf5d\n84877556-e479-4b0a-a80c-cf89ed321336\n5df9f8ee-bbe1-4d07-ac3f-e551dc08ed42\n749de58f-7371-4a90-8d83-c3cd2da66653\n9527dd01-583a-4627-a918-a9bde23ffd58\n57906b69-14a0-4ed4-87a2-313953c69850\n3e6c0143-e2e0-424d-9d0e-70efc8e67a41\nd5d42851-b67b-4b12-816e-7fd2a45249b3\nbad8c6ec-afee-4c47-ad39-1f6738417c5c\n228633f1-365b-418b-8d2b-86929cd7eaf7\nbe46739d-0518-431e-8abb-7ea2eef168ad\n0bbca49e-d343-4138-89ac-f435bd2f83fc\n0b1dc359-4565-4dd3-bda6-13f70af220b1\n08a20c5b-c7ea-46b8-8a21-eb71d1e76fef\n985908c2-ebbc-45dd-9f47-d3646ab191f7\n7307ae76-1c43-4133-b9c3-fe2e4351cc05\n768f0110-3a9c-498a-a813-ba7b7d2fcd6a\n1019f861-af40-4611-bedc-8470b07f6aed\n42da193d-d2e8-4cb2-9a0c-55daf6cb2bcf\n830245a4-1b10-4ff4-ae75-e5908c06bc45\n868eeed8-2754-4d64-942d-810796b8e23a\n9c0fbd94-72e6-44a4-893c-cf950dbb2694\n91d8bd50-68d1-43f5-969e-e5943e3b9511\nf9d6bd24-0f7b-4f05-a789-76c97864191f\n8d337e6c-d410-40ef-9901-6037e4fb6051\neb2d1e5c-bae9-45fa-93ba-188074a549f7\n35df526d-820f-4a78-8e10-5fac9fd6f235\n814e71a9-b9d5-4c95-a5c3-66fa1557452b\nffdd3fae-5f86-4a0c-b565-7dfbe1e8fad0\n7023a9bb-675a-4467-8326-7b7e5b9ca42d\n5682eebd-d210-4101-b145-a1fa7d3c0161\nadef4e0a-70dc-4494-8480-be31cd4360fe\n17d5eedd-7541-4525-ad03-a8d7eeb74380\n931e131c-4ad0-430e-8ae3-8ed700b317b3\nd7c01979-a42b-461f-ae43-aebb0e20fabc\n2384f25d-27c1-4155-a2d3-65f269c65a09\n55973354-7e61-4935-97b5-11e54014db19\n3e07b717-a70d-43bf-b8bc-d5d2b01f5ba2\n8f27380d-88a9-423f-b059-4d5796b2d410\n9b39d773-13f8-40b1-bedd-06f198ce8fad\n80995765-d194-4507-a0f6-77d90dcc2a53\nd85fff59-88cc-4efc-b2b6-7a0772bba53f\n0a553fdb-8a0c-4e3b-9b2a-2c5b8ad35425\n2fdb5504-f36d-4539-9462-44799ded6dcc\nc5ac6368-7bd7-4008-9d1c-445af471e4b4\nda0834ba-0e11-48fb-ac75-2745755c8ec1\n2d27b9f0-6590-49ee-abf2-c65a5153bd32\ne0795cbd-345f-4ae2-8eb6-25c72156b3a4\nddb4c92d-c846-4bfb-a3f1-1b0692fa3ba1\nd48ffafd-ec64-4bb2-8803-59772676fb57\naf0d235d-ab51-4675-a5a9-cfd0f5d263e8\n04e4d00f-50f4-4c63-ae44-0c475098180a\nbadf2384-e6b4-4fb8-b829-13fc9fa1e91d\na98e36ca-6985-4697-85b7-242fd608fb1a\n56dce1d0-63b9-4860-aba6-3df5014029f6\n2cb3fdf4-8795-4666-b338-eb54a8a43d95\n2f46e0f1-2b1c-4683-b104-eda5a9796cf6\n33e4d1ab-b174-40f1-a7be-73ff333c6dc3\neeab1b72-b392-4f87-a0a3-8482ac594a97\ndba9eade-1a25-4ecf-91df-d66accd9378f\nc328ea1a-bebf-47bb-babe-6bddb4e92e74\n88421cec-6820-4888-a7fd-e4f668e6c559\n03297cf4-e1e0-455b-a68b-5d9093f6ace4\n47c3c235-815b-4aa4-95f2-d11fb108ea8d\nae2abf2a-f8e6-4906-a921-e32d34b163de\ne8de5509-dd50-4035-887f-ee4ac7b7e94c\nb897691d-5592-4d01-9fa4-64c4cf7c64cc\nb626b5df-f037-455f-ab37-d157321819f4\n4139cb9c-d498-45ce-9bd5-8b1ffe7fc3a7\n703e6f76-148d-4ad7-897d-d7feba5fdc42\n4c043889-626e-4669-8cc0-8a2859bd1f88\n411ae321-1d26-4028-a5bc-bf80e8f84141\n2eb1fed4-1bb2-47da-accb-213b9b7d7515\nac3c741b-286d-47a2-949e-0a695bcf9d96\n09dc0017-3bd6-401d-80af-46fb07089ae0\n7d622638-db86-4e0c-807c-f603c29c8cc7\n524bd718-c4f8-4ae8-acab-75138c3c602d\n71473395-956b-4b02-9ccc-b16d9e457442\n8bab6f43-9d52-49c0-9467-6a7a016096ec\n8e67c346-35ce-426f-8f87-a5a259a1af17\na49aec95-0bbe-4afc-a6cf-2d154148e0d6\n84b78c15-3cba-438b-8254-edcb7108331e\ncc817059-7b84-411c-984d-7beb2a838f34\n4b54a7b2-1432-4169-85b5-ed3a05cce9cd\ne68e8b5c-5f95-46c7-9c9c-41ef50e99767\ndac77f0c-5035-4040-8812-2308c09fd72c\nc170e886-0280-4987-aa73-c698b788dfd2\n0a518296-0fba-4476-ab6d-153120762553\n124036b1-c93d-481f-be47-22ce51afb194\n01794476-1f9f-4fe0-9869-73a0e3575b43\n2bee398e-1958-4d74-8c94-990ba887c5ae\ncedf7124-8be8-46b0-bd9c-53909e1981b5\n7064cb1a-e1e9-4d71-b6c7-9ecfaac9590a\n03e45c4c-e5bc-4c0d-b2d5-d40fe281ac6a\n7925cd59-8ef6-4383-aeab-81377661158a\n278ff171-98e9-40b5-9f86-0f9ef298f15a\n7a60575c-40e8-4a15-a16e-e1f2597cba03\n4e3cdd77-102e-45c4-940b-75c643fccf66\nfc9aa2db-45cc-4e66-96a6-0ea031d9461c\na3120db4-b91b-463d-9966-ef2134fef539\n02c7cbc1-df0e-4174-b6fa-9d1395ab6669\n9355f0fe-e309-4e16-b78a-f56e0e576195\ne55e41f7-d939-4eb8-a272-96c15f18d772\n6ef55f7b-067f-4488-b43e-525b4357cf0a\nd9957bb0-49df-4fca-b8e4-9168541ca124\ndd84f35e-8d6a-4ffe-a116-47b1f7cdac72\n2c159664-320c-4dde-9bfe-cd76415aa7ae\n598d18e3-de97-44ed-b8c0-b30d3d1fb351\n5f7e9b3c-7af7-4844-96d2-01956f872c73\n02efd054-445e-4085-a342-0459cdef2ac9\n74059b10-bfe8-4a74-af9f-d36559f27b1a\nd5bba8ec-5d87-435a-991e-fd5486afcf76\nbc9e3a03-2901-4634-beaa-833789e51e4b\n4be5e5fa-cdac-495f-afaa-8378ed114f8e\nb4974d09-3f90-4bb7-982e-aba4c0089bfe\nd877a77e-ff18-4bd5-9bc8-63bda7df02b0\n4e6b255c-0315-448a-adf2-c197c0e70f50\n1930661c-7a75-42c8-a878-a0e6aea386cb\n92077a04-8f58-41fb-b78d-46cdd3c3df10\nbde140e9-1e5b-4823-a32f-50fe9e6415b5\n3e71892c-2579-4704-9a2f-886085400fb6\ndb60b257-d9de-47cc-b980-33d84dc771e5\nb82eda3c-791b-4ad0-9845-20cfc9cc7693\nba8a033d-7267-470d-9714-4f4d7a75e0d3\n4fe195b1-cfb2-4b89-b7af-3a7b5ff6e777\n5638c376-a0ad-4abd-ae6f-21a493ac4c4e\n4f5533ba-9261-46cd-94b4-714aee1c8c0c\n47f1e154-37d2-4485-8047-241f8c537228\n96d451cb-9afb-4d04-b138-446f929e15a0\n8d380187-d0e1-4b3b-8bbd-4851cd4b6c38\n5e4269a3-81c2-4dd5-ba24-d50707e21912\nfebd239a-380c-4141-81d9-2ac8b74dc5db\nf0a46c78-e5c5-4894-957a-0804fa7917f3\n6d57babe-15e5-417a-ac51-bc1cef1666ba\nc7d42323-b543-4452-b021-666ebdca69db\n1cbb13c8-1222-40f4-9411-7916a512b15c\n50c51add-25cf-494f-8daa-7300b3beab7e\nd50b6969-2244-4dc6-ac62-5a3efcbd0eb6\ncf9b2913-738a-48b0-bb81-e06c47527201\n01d23661-5fa1-4e61-a98f-97d6e4668064\n99bd7ab6-12b3-4710-84ff-d4859686d814\n0013a1eb-b317-4de2-b299-34ddbe5054df\n9c21fff2-afe8-4c84-96e4-7db4da7bc56a\nc470dfa4-92e2-41f9-afb0-2aec570e4130\n10b74e62-3fa0-4b10-b025-0844443c0f30\n6c59a2d7-8f20-4f68-9397-2e2e81f60ed1\nfb0689f2-1dc1-4a3e-9f45-adf60244a657\n6f77c76a-3e34-405f-8675-798fb4b3f19c\n9973069c-1bf8-4159-a6a5-5863aa7b09ac\n8ca75bd6-8893-49ed-b793-8e05e9aa7117\nf23c6070-dae1-4495-b817-cfff753f45e2\na1d63eed-dbbb-4f6e-b3bb-d637c5bc2773\n29353b2e-4519-487d-9d0a-0843b0de6a56\n9c4c018b-c25a-4527-80c1-13b6f19031df\n4060cfa3-35ff-4d39-a1fd-07c283152390\nb9b1bd84-0a51-4ac6-8086-9393cbd6b9d4\n69788ae8-ac90-41f3-b195-756c5132b6c0\n83c77e31-704b-4816-b42d-3957078d55af\n09af617e-9158-422a-b5a8-89d345772138\n464ce88e-f902-42e5-bed2-ebeaad0a8c86\n9d1ce9a4-4c3c-49dd-a898-c5abe982a348\n2448402f-1b4c-4251-a6a1-c91fcf081f3a\n965c4f09-4259-4639-9a39-4c82d786c8f9\n29bf9cba-7287-4ce1-afbf-ecd1ecb53a3c\n26d827cb-7a85-4adc-abd7-7aff87505352\nef2609ea-ce69-43b8-bd75-e4e2e832bd62\n4c712758-7d03-4079-9497-e7da536cd7e9\n39bd6288-6d28-46c0-b540-8ed6101e3dc4\nbc0e8046-7fc9-41fc-ab70-fb9703901d0b\n30ece213-a545-4d06-9804-4abac55c94c7\n477aecba-3bf1-46d3-b13e-62b5c8878f83\na8b4d98e-686b-4d82-ae51-4c20c80cdb12\n02fa6a2c-b0ee-431f-9711-2ca834462f6a\nba354d6d-3410-433f-b2a6-7784f53ee79a\n7cbd0539-d453-440f-8697-9c1ff9164841\n082e766f-ea9a-409b-b86e-01bf1afd759b\n83145887-2b79-43b9-b461-53322beb9cf6\nf327f030-000b-4410-86b3-edad63113a0d\n1f71f8e7-3ac7-4e79-8f41-e68bc7199c9e\n1bc7905b-38da-41b4-93cb-d4bba89effef\n4f240e85-a82a-4500-84a9-b3e4cf6f8a82\ne184c311-3bb9-4a50-a666-05e44f8f8d0a\n404e317f-649d-457b-936a-f1dcb54c3730\n02b4bd4d-f431-46ce-915a-ba1a5f18c71e\n0198a3b1-36aa-41c0-abd7-3b32ca8cf783\n12aa4a55-e353-4fce-ae95-101fe089f8ce\n4a10f27a-6224-4a53-a60d-b0d66ce96de9\naa38eb59-559d-445d-b329-f6a33a1bc041\n21942267-2973-4019-a154-3a9930bb90c1\ne417a8ee-e0b9-456f-b9d1-45061e08b403\nbda2a1d3-8290-4857-92c4-fdbf4552b5d2\n90c69e33-1eb7-4a00-9a6c-4f8a2659e560\n6051e424-7b6b-48a3-aa3a-c9854563c874\n3d5be561-b275-4275-bb29-f8900b969d15\na7e9eae1-5fa8-48f8-84c3-f3fa712a33f9\ncb954dfb-b98f-4742-8ea3-931249024b52\nd87d9dc2-1b2e-45eb-8437-ee66bd66038b\n8420da87-84b7-4ccb-a790-f093909dd0bb\n52dec1c7-1404-4c77-98f8-36f87f9ca7ff\n9c32ac73-eed1-4412-b237-f19ab35a1ce2\nd5acf5df-88bf-4b0f-af43-bd7786dab911\n4a9168cd-0471-4eab-baae-764c38281186\nf6ce8f9d-76cf-4286-9729-503853001216\n2d897be2-847e-4e87-9f64-73b570dcccc0\n69e59b27-f19a-47f1-aaac-3634cb52f97f\n27e09ffa-488c-4652-8220-7c0821136f8b\n5d285f4e-d67d-42af-8998-89ba8d003494\n7edcd8d5-d086-4e68-95d0-1982668ed223\n0ffcf738-4e82-41f5-9b5d-f717eab40814\n47ebb1a5-61ab-4794-9d30-82edbb980db4\n37f8e849-8d86-4319-a0d2-7a1f46030fc1\n19d0f5c8-9e95-48ea-906a-2f582a74fa1a\n5f70b2c3-2867-4b9e-8df9-8fef4ddbe000\nba7d1cc5-3251-4341-ac85-df124d3a3316\n3005b5e4-6463-4547-92c4-cc83fc584ac3\ne6c80cc6-9d33-45ac-98d4-7fcf421029a2\n6bb14e0e-0bb8-4fa1-9b5c-03fa3e290e4f\n4f1861bf-5815-4c1f-b7f8-2231afda44b7\n93373bd4-4e3d-4591-b496-cf41f2c45108\nf2cfa08d-6967-4fa3-bdb0-bfd2d595fc45\nd1dfa589-a606-4bda-be29-3515a36cf03c\n7218395b-27ee-4486-b261-5aa9acdba16d\n035bda4e-cdbe-4de0-b840-a47bafafa59b\n1684bb2f-c8d9-4ce7-8980-a0ca0924c924\nbd0adc70-1723-4e27-8f74-927d91091d41\nd53231e8-6526-4468-84a8-dc90a9607065\n9c37f594-48c9-4eae-9d0f-ecd3885e510b\nb231006b-a7dd-49bd-adf5-2f8f118f5db7\nc9f5f22a-e4e9-4cf5-aff0-d04c457706df\nc7f95a82-3707-45d7-9985-86e6fdd7ceb7\n1c03dbb0-dd0a-4cc5-831e-455d49d0948e\na7518a8f-69f0-41a0-9a8a-9781ec0509e6\nd9c6c292-2a9f-428d-8ea3-f1e795d2d53c\n0d1f86eb-83e0-4d0c-84cf-7f0300bf0b25\ne6083cce-4bdc-4861-9c00-ea1c1dc0fa67\n723fe34a-b03e-48ab-9be1-3d915fd77a7f\nb69f8fb8-a659-4a73-8977-5a4f7964336c\n831229c1-cffd-44e0-81c0-a73f888c7471\n976d72c1-62e7-47bb-b304-cc8042d32d13\n755ff7d1-8143-4067-b8a6-eb87528c184c\n7a444b4e-6658-4ce8-bb9d-c3cc24f03c51\ne6e22ae2-f440-4742-86a4-077eb4b73780\n4b86ab4b-8a1a-466d-9199-2be2f6dc6cc8\nf5b75f5f-fb35-44fe-94a4-b31642367397\nf27b230c-fb92-4922-a906-201727b75fcc\n40dcf19a-a7bf-40ba-ad51-2a64c7764c20\n5670ed7c-7f37-43c6-83a0-e9ff375a673d\n74499f91-7054-437d-b948-cba55e42c64e\n28af010d-c2dd-42d8-9c4b-86734b2aab00\n7c9fedc7-ffc9-4235-8fef-ef68c986b9e8\n4fe7d734-f867-4299-bd7e-1c36b2d789c4\ne4a9bb10-9064-4365-8b5a-14d6eb8e674a\n5c8f5869-7aa1-41a1-8f38-ca716a90fb6b\n95a6037a-c146-47e3-b19f-896938d226a8\nd5b2171e-df84-4cd4-a85e-e86ea9e28835\n2be07ef7-7e97-4e54-bd1a-4fb173089cf5\n0f206752-454f-4344-836d-3f85ca57f838\nc489a806-053c-40da-be87-00f4ce26f3a9\n3c23e8c6-e409-4262-b768-0b82eaf6fa62\n1ddfac2f-a65a-4fad-bcd1-ed933a522718\n7e0d7d91-b561-440e-8077-b2db68b8a6d0\n3269ba26-cebe-42fc-ba7f-fdb1bd5e886e\nb9694dea-1cc8-45fa-86dd-1777f041030c\nb3eb2567-9afa-4faa-af93-58a4778a8310\nc42eef10-2950-47b0-98f1-89c19f911f00\nd11913b0-0092-48c3-8fb1-8126a191d591\ncf91a269-edbe-40dd-be1a-3f81a5c51745\n06b3cd37-abf3-41e8-bbdd-fe21e9393ce1\n4ed8d2a8-ab4b-467e-8dd8-17675c86d3d0\na6039d4e-e59e-452e-8863-532919c7fb25\n84b8daa0-94be-459d-a198-be3324795d37\nd8f87ad5-45ea-458f-97df-1794265b2d81\n5e49f4a6-97f5-4d08-8abe-7a9b9f605b0b\nfa9b3c02-7d85-4075-a018-300252a91602\n9ff3d547-cf38-420f-89f1-4720b41a6179\n93b69614-15dc-4197-9623-5c58a90dc6c6\ndcb79406-3e01-497f-9cce-01379ee2775a\n54dc7943-4892-48cd-8670-e1d85e6957dc\n12914d90-9bd1-4f86-aac9-fb8fc7727c73\ne6ecdd2c-a5e3-4d0b-88ec-d9280ddd19ca\n38dbf7fd-9a3c-42c8-878b-4247a723a487\ne031a41a-7624-402b-b0c4-b66f2a04849c\nde8d0791-15d1-4d24-9196-698f839f0138\nd6f9b9fe-618c-47d6-a3cf-c16d48b35da4\n71cd507c-3999-43c1-b141-68391cb2c84b\n7a797b31-a9b0-4d3b-ae36-d8662fecb8c8\n75fc9f84-8be7-4921-8877-910e079a9c31\n8cc757c2-2f1d-48a2-b404-5bf35864346b\nb3f53caf-9bd5-4454-ab23-22808ab5328d\n892879aa-c0e4-4f95-bf54-ea99627411bc\n29cae1f3-0d81-44e8-a225-b5d7c775ac28\n45c6c736-3d60-4735-b3e4-dc9a60da8fcb\n98a743bb-ab4e-4e58-8a62-7d3c7f52fd0a\n0b1e8382-03ad-4a82-9f53-5c02d7b51714\n382099de-f0f3-448c-bd81-756dd335a960\n976e6937-6637-44d0-bc17-1d779d90a913\n12892463-76c9-4c5d-9d87-4b18cc3e6ec6\n9d94d76b-18cf-41d4-bf0e-7b766cf527eb\n47d42ff2-68bd-42f5-8883-61240d03aed9\n490c0025-c9dd-41be-9811-bd001e21407f\n04e017e1-5f83-4523-87c9-063e8ae8951a\n06f31a0e-ac78-40bf-ae04-9b5bcaf0f65d\nd2d38ebd-3824-44bf-bb41-6a7317d2f20b\nb9cf73ff-3c4c-43f4-99ab-e8e7ec483694\n60f39fcc-6a59-4938-b643-a14b9947f7c4\nfea4e92a-b6ad-4ced-97d0-694382e190b6\na2907f60-af45-43d2-b055-9c1c44fe8c6c\n6f4512a7-e15d-4089-a41f-743f49fe0b2a\n0215aa7a-aafd-44aa-a42c-23d92f6de889\n52a2a2f8-73ce-478c-a624-56f87e0652f0\n718e4db3-5780-4b92-b11c-0c7e54be78f5\nf9b253a2-64a0-4a80-817f-0f1416065206\n95780067-3413-4f0f-8531-f915eb944cfb\n8e084f78-afc0-46f8-aa04-9e16561094b6\n2149e273-6975-4d3e-9262-c289a689f2e8\n809429c2-6ece-4036-bca5-a46690346009\n0a557385-9b7c-481a-b7fd-ab14856d4346\n2f1ca747-62fa-43a6-9d9f-f7f62adc940f\n492e6eae-0cd7-455f-9821-ba67be0467cc\n1a71c050-66b3-429f-a459-e56d9576b761\n2b3541d8-30e6-4bf0-9e53-931a39abf15b\n5a94fadb-c08e-4a0f-9eef-aa9a2234d2af\n81b3c3ee-64fa-4eb4-a344-38f5cf25a9a7\n82f353ab-5030-4489-bfeb-737096ae3974\ncb82f792-3237-400e-b3bb-85538a37971d\n7f856493-2d1e-4c98-af4c-b8851a0eaee0\n24eb6e6b-a2cc-473c-9b63-3e177e7f2269\n838ab34d-9187-4d76-99f7-1a0dc02f70ae\n6e780a47-d6f3-4b87-9dab-6ce769d01215\n633d0c18-b4db-4076-9fde-da2b6f19f1b2\ne8abba71-c84e-4a7e-973b-3d5279f42699\n2331db18-c347-4559-8710-86dd5b2f478b\n15f5af79-3662-46cc-9050-0b8f88a352ec\n082a0393-fdb7-4704-b77e-0c198425fa46\n708a1f06-5ff3-4695-bf56-835b932f21c9\nad804766-bd89-4080-97df-afe8d2ad568c\n50c94841-b82e-4b2a-992d-a71cbe4b9602\n1b337179-d864-4ba0-abfb-f4e8e08cfc69\nfedce736-5ae2-40f8-a1cf-36e6b5e45a8c\n92981f7f-608b-4be2-944f-d64896fd9c10\n96351166-5daa-4547-a8ef-54f8f88f324b\nd6ea5c44-3189-45c8-a58d-819b1e6a923a\n2ba7dc1c-b53a-47ab-86c2-2c37a88cc8a8\nc891b0f5-b4b0-4b18-8a75-10d6d575a3fb\nbe235176-9dab-4420-92d8-00da3a7859d1\n6458abd2-f5dd-4888-834c-b5317c278686\nc4db99c2-514d-463f-99e1-b1918c9f5dd7\nf331685b-5504-4785-9ac2-bf8851521bc5\n0fdfbcdd-fe4e-4172-a27f-d0052f4277b8\n42c83bff-d3dc-4af2-b243-7188f774bfd1\n50902546-cbe6-4cb2-b03e-81d3128e0b93\n6cf75906-01c9-4c48-b3cf-ce5d17cb8cfc\nf4715309-e4e5-4717-ab0f-0ed9d6cc70ad\n45496440-5836-4399-8f56-3d8f0ea2c3f7\n478c78c6-5f51-4889-9ad8-40d915704511\n8c185a18-5565-4a5e-be06-7a61bac1cfa4\nbe644cb4-518c-4a66-ba39-b3858cdbb0f0\na1d27e42-1224-42a0-8331-c51481e4ae5e\n272191a4-d094-41ca-a3da-b7f997849273\n67909fa4-51d1-4f40-9973-0202c0554a5d\n00dfd741-2e20-4cda-8027-a347d0f9afc3\n95f1bafe-23a6-4be0-a677-366d4977d006\n1810223c-d524-4d72-8e87-16a117aabd8b\n2ad5200d-453a-40cd-81a5-e33cca4f6b7f\n52c13d74-de2d-4bbe-b0a1-6fc3399f87af\na54647f8-1bb6-41bd-a251-2b62931d43cd\n35f0a93c-d789-440e-aa25-5147b4f5e8c9\nd500ec89-6d5b-4cfd-bcfe-29235fa745ae\nd496567e-2582-4568-a0b4-c7b3800cca31\n697dfbca-b1bb-431c-a946-3406c7774af8\ne4b72ef1-68ac-4c3b-be57-2a61c94e676e\nc7855bd9-992c-4e82-86b1-600e072b94a9\n1d917223-bcce-45c5-9375-c97f8031b558\nf1fa0a1d-ef3a-4cbd-b3de-bfdfef17eae2\n9ae1663b-a50f-45b9-b95e-3de85c9d4908\n4539ae75-c097-4563-982e-1c128f15cf13\n0b0c5359-8157-4772-a70d-92a05706df63\n4b143034-b174-4b12-b749-26f07ee778b4\nd73b62e1-d0cb-454f-b87d-665558c1aa4d\nc49e5c02-c587-4c30-b764-6ec893681493\nad9ec7b0-ff64-46d7-aa87-9f731866e7f0\n14a27f8d-d86f-4b8d-9f53-32c60a5b2f02\n2191a724-d479-4659-8251-53522cc78cdc\n4663f7ee-14b9-4217-ba73-b0c8348ae027\n2da8789f-36e0-4892-9ee7-9379b5bfa34d\nca0bfa3e-35c2-48fc-8ac0-4f8c2234764c\n5c4db730-9080-4241-b9f2-0710a4dc2348\ndf88b8d3-1a2d-43e2-aa30-a2f8affd2c41\n73d0f460-7f97-4889-9734-dcbce8b93571\n745bf7d4-ba34-473a-be29-0aa24bfe73b3\n909718fe-30fc-4ba5-8e5a-d6c55ad2c532\nfaa0f720-7146-4ede-84e8-e58d91848672\nff3175b3-a715-4c42-9251-60abee33aeba\nc7a3d356-2d65-4a58-8d2e-8d03cd5daf7a\n09adb28a-b315-4bdb-af7e-d8d2ba2014d2\nec707666-b363-4262-a72c-4c7e1c2fb114\nd0db2611-b59e-4678-b0e1-2c6ec00b6206\n4596ff52-8911-434f-bb84-9469c1a4b04c\n6c5ed909-8fb4-4982-8f37-4735559635d0\nfa15a982-cea9-48fa-8686-8986cd104a34\n178aa944-9f12-4ec8-b681-11e828fa5364\nc3443991-7e6f-4b13-bea1-09a0fd3dbe5a\n50aa7d98-897a-41ec-ad4d-bfc927e9a512\na793d509-fac7-4a28-81b5-8cf01eae48d3\nd1cbcf17-6f78-46bb-98fe-a86d235e2faa\n3fc8d0f8-19e1-4352-995a-f74ed7ae3de4\ncaa48fc3-9cb8-4c2d-a504-3569f415f889\n41eedf95-2845-4677-ae72-2ebe1047b912\n7c691c5d-dcb8-411c-a7ea-9128fc4e3fd7\nb3cc4150-77fa-45ae-977f-131f9f928e2b\n02c737f6-856f-4c98-999d-83e3bb38445a\n4eb0d062-6a01-4408-b1ba-af0f255efe63\n4a7e22db-38cc-4422-9116-e1f93da69ef6\n50a44167-cbd0-4930-b962-fe2b010c23f7\n439f6cc3-31bc-4379-9258-e2755bc242c4\n0f1ba8d8-5a65-4f0f-b01f-59155d823645\nf454ce74-5d98-4e0b-8346-c574b57f2f95\n514f5baa-9e75-4dad-aa2b-02d86d52bb51\nae8e63b1-cc64-43ce-a078-49bd8a4a6d88\nfa8f1d60-51c0-4df9-a57d-fb8e722910d3\n7a01e231-1cb8-4c59-ba17-007be2387e01\nb9cd742e-54f9-4880-84e9-2e3dc49c5131\n79837403-ddd1-4d4c-b806-992552e5a26c\nc322d507-b78f-4bce-80da-78f12174d8a7\nfb1a15c0-a7b6-4b70-87d2-34bb3b092af7\nda669749-53f9-41ba-ac46-a381043955c0\ne3e5c34d-02f7-4db2-9fb4-b9bcedf3c991\necabdc75-5693-467e-b8b1-e04ccb3c4485\n10c0e8d3-0e51-4431-b6f0-cd3bc4338106\n6bec039d-45b2-4c17-9815-5694c210eea0\nc4198ec6-f689-4d89-9df0-692aa2184549\n635e7581-00c2-4d2d-a57a-7c8ff5573758\n2afc42d2-36a6-4347-8d80-09a231be7a4f\n82c80909-712a-4baa-ba19-861b03d92773\ncd6937a8-dd1c-433c-85ff-0478ba8fc1ef\n39b3c7cc-80cd-4fc6-ab50-613fafa6fbee\nbaff3f51-1f8a-4829-9902-59309c7e6ee1\nf2587c10-b306-4e74-be7e-03a0d8ca7d31\n22071dbd-ea44-4eb1-9c3f-48e79b6c6f72\n279cf1e5-445d-4e85-91d3-4401c85029dc\n998120fc-2437-49a9-8331-90b2f3f79325\n3e305a29-0c36-47d2-ae89-4a1d13ea9985\na06b2382-f2b8-4341-9b11-42c9fca6b488\nc7547013-3cb2-4bbe-b0ca-08396c755fb0\n58fa10a5-3c13-47f9-ae25-c3853f59ce8c\ndc51d06f-170e-447d-be71-0811fd803fdd\n24cf2fef-43ad-445a-9961-52548ce18e42\n00bcd79c-f9c6-4bde-a6c9-7acc06fcb744\nf5f0902b-efc8-44bf-95ed-5534c220b1e5\n00efb262-281b-4992-94e6-12d682336bc5\nc179c42c-a3c1-4d76-9a1b-5e5d80b8f00b\n05e678e4-fc4a-4e4f-a56b-e37019013336\n35f0f1b9-8e14-4d63-804f-490872c7b111\nc8575ba4-0566-49ec-a9e4-535a86b57233\ndabdd832-42fa-41a8-a5c3-8b385c94c0be\n39268d34-9b3a-4ff3-9ae9-1d8207a004c8\neaec7d05-34e6-44b1-a30e-b16838755aef\n620e4929-fc01-4837-bbd5-598c2cb8f3e9\n795076b9-7190-4d7d-a868-a629903f5e1e\n743fb578-098a-4d79-8987-524e54ee2a74\neeef31dd-e2e5-4027-99c8-b353ef136bcb\n0a60a52e-96ad-4c5a-8f98-a11b2fe7fd0b\n061c32b2-5461-4223-8e6f-adde3f343d83\ne445fa46-11b8-46fd-add3-d41a11712e5f\nc58991a9-d15f-4696-b848-46d46bf12a00\n8cb79e73-3d19-4e23-944d-0130b80b1859\n3e53c868-44b1-4064-81ab-3d3fc4e85e6d\n2ab16543-99e1-4939-b1e8-d385db7d5276\n14532d37-6df9-48db-9af2-c13c250059e5\ne06d1161-762e-4fc7-95bc-ac2e77fcae46\nebf5e1d9-c3a6-4ff3-b109-13d32dfb6966\n809f6884-7f84-4553-a166-97b73be6ae92\n522d6ca4-b4bd-4db4-9764-41788c6508ec\nf9869586-0466-47af-8295-a4d8fee36e85\n955a616d-46cd-4482-ba6c-99b77abb3de8\ncecc1623-c45e-48c4-a02a-53b33be72158\n609c4ac9-1ccb-4927-9e24-0efccddc77d5\n3de2ed41-22c4-4615-8421-3101023c57b9\n3c3dcbb1-cf40-4dbc-a7f6-1a9e7caa4c93\ne93f798b-d129-45d9-bcaf-8c72bd9dee75\nd8d09103-380b-439b-b8e4-b14597039889\n3dd2b334-311a-440a-b27b-1d073f19e3ae\n5b841038-ddf1-407e-9b2e-c98d023c7855\nbc24c9c0-1474-4faf-8727-73ecbde8f3cd\n59500a16-27ca-41ba-b4c9-ef7649be3416\nf456d59e-6ede-4256-966e-2eb7e804c49d\n957d097f-c2da-4a23-9bf4-89fcbd5ffb76\ndf6da47c-5607-4c55-9467-5d3af83d5b70\n999c02dc-a2d8-4486-98aa-cefd5577edcf\n77a15af5-6dae-41d7-8b9d-04a3c918f57d\n71a92479-d933-4768-becc-27989cb060ae\n62103bc6-0695-4658-bb60-a03a255d2cbe\nd08edd29-de2c-4cc6-8a64-8d96da36ef7a\nd8542ebb-00f5-4d25-a4b9-cd005641a093\n0583e338-2ef0-4972-bb54-d070cd9af4c9\n18609de9-f0d4-469d-9324-1f633a2b08f9\n00f43bdf-b5a7-4717-81f4-70dfeb9bfe2c\n30f262d7-67ef-487d-9c09-7da9a28e4222\n413e3659-a7f4-429c-90aa-8472bd22b09a\nb681f5fe-784b-4137-afc0-5c5db20b32e1\n440fed7a-2cff-414d-9547-835af3fd6abc\na957f9b1-4483-421c-b7f6-fafdf8802f91\n88a15a2d-9b53-4cbc-a11a-b33b3835a958\n2f6315e4-43c9-4e04-9588-628c12ec8d15\nee0df202-d261-41a5-a778-d42ccd9e46ea\ne5a26f5d-a042-40ac-ab95-6effe2e289fa\nfb645faa-944f-49d5-8cef-ea2b01d6fbae\n224518c8-bba8-43fe-a6cc-3b3dc7daad18\nb97e3363-6894-4f21-a740-a666e2927bc4\n77997313-c186-41fe-8b8c-aa13f9584c60\ne2614dde-8343-47d4-9db3-a0f11827fdde\n3bbf6d52-54d7-4f26-b0a0-82888a7e5368\nb90268f5-1c7a-4cd9-873f-1d84c9021119\n27021b52-ca54-48c4-9bdc-a5e2ffe0100a\n5770526d-d50b-44b2-8d97-d655242e207d\n2f342e13-d6f3-4928-a7ed-26be739c7b78\n20bae956-333a-4124-b1cc-a50533923305\n8c25f8a4-f7c1-4fac-9fb8-622ea48c063f\n3ff968f9-98f2-4a14-b2f3-cb3dd07acb0c\nee49b2f9-e1bd-467d-b994-68303b68c1b0\nd82577b8-2724-4bad-be20-19488bef3096\ndcd3b40a-d458-48ff-8a8b-88fd48deb3ad\n4bae1fe1-c4db-4c11-88f2-5e1183a79c89\n041667cf-c1c9-41f0-a023-3ed65c42490a\n3377b3c8-4eca-4751-8659-283c6a89f7f6\n28eda3a1-b741-43f4-a550-7beefa76f425\n41bcb9df-9b6d-4256-b8da-d4ef58e31feb\nf9031b7f-d36a-4966-b776-07dd66e5c009\neb37277c-62a9-4b80-82c2-302a7b62dca9\n0ce5e834-becc-4e14-b1d5-58c92c6716b7\ne67e83ba-1169-4275-bbef-4c4ec5d684c1\n1a3fb862-a836-4f0f-8335-cf9c5f44ce27\nfcc735d1-810b-4d6b-b9a9-9d83aff835c0\na88ae004-7424-4d8b-8eea-b30e3e8d67c8\ne3a2638e-09a6-4a05-847f-dc734706e2c1\ne68cf667-5aa6-406c-bce4-e7ce1c36447f\n8e6b0414-35e4-40c5-a3c0-bbd3c89b0e80\n07833fd7-f4ed-446c-a88e-337a60bc45bd\n4f6ce91f-b615-4f5f-a749-1f6321da9925\n74b8cfa1-2326-4c40-a490-4f2d1ec1d53a\n3f385304-0af7-4910-a5c2-f17337c9b000\nff7749b8-5429-421f-a8a2-9fba997d273c\n9d7976f4-ef3d-4f34-a557-205e1f439286\n52c92c26-cf05-48ff-a814-fc9a6550e9c2\n1508909b-951d-42dc-bee8-ca5a13b51312\n343b26b6-cb50-45e6-a2c9-f3d65813217e\n0928016d-c8c5-4d73-83cf-907983bbb0c7\n86b0c6a2-090c-4549-bc67-a84b06dcdf1b\ncaf8ee1b-bc20-423d-ad86-24330bf9cd61\neef745b3-92fe-4093-9f37-cc91f3cc9359\nee47cb0b-cd00-40ea-acb9-6bd1796dc9d1\nfe7ce921-e570-4763-af89-f16d3892b6bd\n9eb629cf-536d-4e45-894a-f14ec097d339\n13c16b47-e872-4c40-9aba-566a6f12677c\nf9f73489-fc95-4753-b85f-f635f851ec41\nd3473f21-a3ef-4ce1-b157-c53d3b97ced7\n8be62a03-79e9-4cd6-b99e-0188d3677ecf\n69d1708c-e9f6-43c9-8eed-047d6a215b40\ne1f0a6f3-1e12-4522-82c6-a262f7cc8d73\nbdf9c9c8-fa9b-48fe-b23a-56ace2773aed\n9cb0b958-3729-4b64-94b6-c6c5e84aab69\n4677f2f2-89e2-4643-9666-5847101127f2\n3d9bf318-2bce-4ece-b25d-8fb8daf64f2b\n8662b097-2c21-4e1a-a873-fe1d801f4efe\ne8450ff8-7513-4248-a316-1da5f4116866\nd4ad9685-afd7-4e7d-a4b0-75fb049a9d37\n49cabf31-c7f2-486c-8c7e-1296230f9dd3\na2aecf96-1524-4706-8655-07c43fd31368\n49413859-c8c1-4222-8683-1219058f3b3d\ne166769c-efa3-446f-8c04-73457aa0ea7a\n1315c0dc-cf88-46e4-b83c-0d8548c421cd\nb73e6d29-a99c-4ac6-a1a9-1e4341531d36\n31059a46-2027-4a46-8423-8314046b6874\n5ba8ef69-77da-4d89-a5be-aa9346b7e75d\nf5bcbaa9-0b33-47fe-9d33-6c78a8c78527\n43d2211b-aa81-48ba-8c70-746aa763e1e3\n09faf24a-313e-4207-9d18-8fdf49b009a1\n4109f993-8070-4918-8326-f118fe162185\n4335a2fc-9ef1-4c8f-b242-04561491936b\n363971b0-6f99-4212-993b-9909d9e87524\nb21aa339-944c-43ba-8bae-cfa97099fc86\n67105c5c-ac98-4fd5-b448-6ceabcac3799\nee06b518-7516-4155-97e0-db13f65b5dad\n9334fe5d-eb77-496d-b3f6-4c5cde2035e0\n5946b43a-f7d3-4c2e-b1cd-57ad481f1768\na92862e0-2cf9-4e4d-bdae-80210da5a535\n9578031e-6768-4982-87da-b2048945e44d\nf655375b-ac3a-4754-8c9c-612b55b8d728\n5a012a6e-1ca4-41a3-aeff-6c0d855a4e4a\n73764928-feb1-4e40-917f-29ce96436ea1\n75a10cf7-8844-46a5-9ad0-d1c9a5599313\n51e54d86-fad1-4d0b-b445-c539f7e6d8e5\n6beb90d6-99c7-4fc9-8435-27c1d0238946\n5f976ca0-a625-4dd4-a3ac-be2923de40cb\nf2333acb-43b5-4c8d-ad36-fb8cd88918dd\n20f26906-05c1-4589-9738-87f87b34b50d\n94aeec3b-d58f-468b-90af-d56a391d5438\nacbce81f-8f0d-4672-8c38-8a25c0c8806f\n8709540d-f4df-4377-827f-5123fd53d577\nac7133f4-62d1-498d-8bf1-e63913240bb1\n182ffb8a-14b9-4052-839b-4c3b69c672c1\nc337fe6f-e878-4c9f-9910-f9fe218efa83\ndb802248-df9d-46b8-bbe8-77a6c15d958c\n83991bd4-c920-4464-8f93-de65ab262cca\n73d06a1f-3002-4a00-8116-9be99c9896ac\nac3bb1b5-e766-451c-8f42-84340668cd09\na671f885-da7d-4529-a5b5-35ee28f71646\n8edc7845-f305-4e0c-902c-f78aedf09e2c\n9739ffee-8333-42e7-a5b4-dbada8af9728\n2303d882-99eb-40b7-8124-f95dbcdcd4ae\nb2855df3-64ca-420a-b52a-9ec5d75343ba\n26cbe0d5-173a-44f7-a13e-e12a3eb74121\nf819f88c-1c40-46fc-b24f-a368873f925e\nc041562e-a340-4766-8c7f-5376f7874e61\n728a8f43-0fe4-4536-96e1-90d6b52eccb0\ndaa7563f-03c3-43ff-b02a-0c6c2f40a42b\na4edcd68-ef45-4fdb-bfa4-42a52fcf6521\n11735931-cab9-4656-88de-1cd6f1f293b1\n4d1efc48-4614-4f37-8bbf-449afe43ce40\n51e181bf-2687-4dc9-bb25-749f886c5993\n3f18a739-d911-403f-bff3-753b9ba4184f\nb21ff2bf-76dc-4942-aab3-f36e0058d23d\n863e18f2-0930-44cd-a068-10e8032b06ef\n85188a40-541d-4b6f-9908-4d37ce505e1d\n944df319-467d-46f2-b778-e78445e33b2f\n4729866d-fdd9-4895-a6be-5a9a89094361\n0c863a31-a1c3-4c5a-8570-616fc9d72baf\n9878f2d4-b667-4b4e-ac29-2280f5f40127\n90d55696-caed-4fca-a6d3-d3e9a782a088\n29ab4078-7a83-4749-b1c8-f19f1d4a3ad5\n65ea49d7-eab1-40d6-a4b3-cab64101b77c\nc64d0067-0e85-46ca-830f-3d54635b1d8f\n901e5306-2cc9-42a2-82da-b04bda903356\n0f905214-276e-4f3f-8b03-593a50f4b35f\ne9b38114-0697-4d59-940c-07677dfa2244\n7f016980-f942-4794-8cf0-fbff0a5e4ce7\nd1ff560f-0e39-4af2-afa4-c2e43ca58db3\nf2a33689-1127-4a0a-b1cc-370e282c5807\n6aa8578a-60fe-4e16-a7ce-4698f253d2fe\n2f714dce-7769-42b9-84fe-8dbed86221f7\n72fa17e2-6318-41f1-bf76-7986297bc263\n7d12a5af-15f1-4858-84ec-cc4bf90d9d0b\n05cdff53-26d6-450c-8140-e04988347844\n8f1bdffb-526e-41a0-8abd-3b2b7eac6f59\n60d61336-01ae-422c-968b-5681c8b97e2d\nc19725ba-9662-4a51-823d-2c9908f7b3d2\n9957e3d0-a387-4cdc-8d91-9aa6f87caac1\n2081aa1f-7973-4343-9a5f-35eff3046eea\n8070d9e2-bd6f-4ad6-a29f-8324a60f8623\n5856b356-1a91-4a1b-95f3-99717fc209a7\n00a15200-f319-4945-b46c-89c05c72afc5\nf729345a-fd25-403b-abd9-68358002ba09\n83cb836c-e4de-4c82-baa7-0459989bf537\n5bba9770-5163-44a3-a8c0-79a0d6a62091\n2b4f8b1e-86dc-460f-8a16-4e9384199de9\nad21c44f-6a1d-41d4-aaa0-df5a4aae2bda\n6d99ea40-0e94-40d5-9aa7-10b5255b25e9\n3f399032-51e9-497a-8a86-9a09c284f376\n0294c984-6691-4af4-84a0-56ec34da7c2b\n25eade68-ec1a-46d5-93ab-178f70962012\n86328761-467e-434f-8fee-2e46c6992f68\n262adbaf-2afc-4e84-b696-18f23b81d710\n5994c6d5-8780-4f61-8be8-14b425e99af2\n0be697a9-4360-4da7-8243-b3b547014b17\ncc3c09e3-f0dc-407d-a954-bed52fa0c538\nb547fd3b-ad33-42dd-a935-34b7680f46b4\ncf4a8c4a-273e-4115-a81e-65cc3d44a5f1\n73c26029-76e6-45cd-acc3-ede620b99a30\n3be26d87-5650-4102-aef2-a196275bd7c0\n69a49add-473e-4835-90d5-63d4c4377a4c\n5d3def70-9b02-4971-bcfa-0d958a7e2e8b\n607b35bd-e29f-4ac5-8c5b-a3af0f00d91a\n679ddb28-eb8e-4bf3-9aeb-12fdb8aa3ca2\nb1435203-0167-48af-b019-24bf549f193b\n6c9367f7-f5e0-41b8-8d3a-12915d66c703\n43eb41e9-2cbd-427e-9771-4fa85f5f41b8\n4930fe6a-4d39-4122-bd57-af5514ce9c23\ne7660a7d-a0cb-41be-a96f-a40af431ceb4\n4e8b02a9-c46c-42b7-b7bc-43aadcaccc4f\n83808b06-b6ea-4d10-9c6e-2ad4d1c6108a\n8ca80493-07c2-482b-9021-94d9c45685b8\n05ee2ae2-205e-41d4-b61b-d14e738517cc\n37d3493f-8859-4d6c-b8e4-a31e7e0be625\n15cc949f-c8d1-41e7-8f68-b1b780d784b2\needc8bf4-c95b-4381-a222-13c0c47b91d9\n1a34828e-03c8-4e59-b9a9-725203e354c9\n8fb7e81a-b362-45e4-b5f9-0619debde399\nbc40b190-e6d5-4b88-9cb2-4c833795122c\n610e2520-d085-45c7-bc6e-5d9ab9b1cb07\nc00255c9-3ba9-4652-9200-6ac944ac94e7\n29e3ac6a-e84b-4ad0-979c-ecd491541eb4\n4f4c8dc4-b181-4b1b-8c3b-7e7bbb3e143c\nc226f939-5cb9-43ea-9644-46be9d1d0fe6\n1ca66e18-d4aa-4ea2-8621-426a28c9625a\n72a4cdb1-926d-47d8-bcd7-42a4992a1fe1\nd3a373e6-c2dc-4c53-9f0d-c833cad76bf7\n4fce72f6-c881-455c-b668-0867aa903081\n00d70d4e-e11c-4568-82fd-107242573785\nbe19d6f1-f3b6-4b82-85ad-b7c438fc0720\n020d5f9e-74e5-4812-88e7-b17d9175d1d5\nd3f8b6b7-4035-4181-b725-1ce8feb57c26\nae9223a7-ddc6-40d1-a8f5-9d11517dd65a\nb56fd80c-c229-44f8-b3d4-31ec8b82d0d4\nd2231e95-6e5b-4ccf-a757-d2ba8f45a9c4\n0ee4fe5c-1f2d-4237-aaef-66bc78e3a525\n76d0bc6c-5daa-4647-9aac-4c6a915d238b\nd006e0c9-0e37-4354-8f08-3bf7c96aa5ab\n93ec9744-8309-4c9b-935e-31bb2341d273\n5c82ceb8-9dc6-4174-bbd7-d38d74564950\n721aaeec-0088-449d-b6aa-5655461a0e7c\n3a6e372b-0f20-4f1f-9747-1071854cf08f\naf975ca0-6bc9-4add-b19f-873374f9be2f\ne7b3f42d-a2f9-43f6-8dce-eda700e1af26\n8318b188-084e-44ff-82e2-a06be734c55a\nd5634367-4935-4b03-b753-8821dddd8932\n896ef842-45de-47c8-be73-2e513dbaa275\n363ba8d9-fb54-4585-a50b-8a83417cd823\nb181cef2-a0c9-4db1-9205-fcc39d9809bb\ndad4945c-3b44-49f8-a4db-cc1aadcb21f3\nb9ee216e-1306-4ce3-9bbd-981e1a356319\n67049246-0518-40dc-87e5-7ec48fc414bc\n4eac83df-6c88-49bf-a881-77cec717a917\n588f94a8-c195-45ec-b2af-8458e2fb1f78\n28005e70-09ed-4d1f-8860-2bd2eafc5b3f\n7f0cacc5-faf3-46c5-9fe5-08891adcb909\nf5c8c240-52ba-4016-b6fe-b3bd50ad3a44\ne9cdfae0-0c7d-4241-bbc2-96a960e8e22a\n78d30e50-c2c4-4a03-aed3-4ba2626ceef3\n7c171061-ee78-4902-94dc-86f9fc1dc233\ne6cfc509-450b-42ca-8068-a31449b20aa8\n81cf9424-6aeb-4c6c-aa5a-0550ca4d8f5a\nec8f7ff3-c772-43c2-8ebd-4e4a75f57016\n481787d3-3664-45a1-b399-1ba91490c690\n7d3db59e-4ab8-471a-a216-a60d6d3e020c\nf745fb2a-7ca0-4381-8b11-fe53964fca69\nb0de9adc-3923-4885-bc87-5dbce24900f1\n306be355-18f3-4950-8c9a-e8e4fe78d4e8\nb84a5c77-d42b-48c5-8e1d-b70bc78392f8\n406c0546-2ad4-4415-86d7-8b9d2c71f5e1\n4856451b-db95-4eb2-974c-9073a97181c7\n101f2640-c27f-42fd-b20c-253546bda5bd\n55149d6d-c29b-4464-a5de-c1f4157913b4\n963f03a1-2121-45c1-b5e2-d14a46cf591b\n785c4f2e-8e62-44dd-89d0-3c2b60b9cef7\nb1be281d-ba5b-4779-9c2c-9ab0085fff5b\n8146fd68-04e4-4d9b-900d-2732d9b214f5\n0a827b8d-5d2a-4b55-a729-8f36265af012\n0b058f38-cbc7-493c-9add-3b73d9abd99f\n4b7fd24b-6af6-416b-9ba1-3375128f8188\nf61e3736-1a22-4265-8ce8-720db8067035\n8cdc091e-b63d-48ac-a71c-4eb636dce0f9\nb1e9dbc6-683e-4636-928d-143190ba8906\n54400b2c-a551-4b64-a741-da742952b19a\nd995113d-9750-4cb1-9bb4-d624cb8f150f\n17116345-0a5c-4f17-982e-7a53b16edbf2\n4457cbb8-a38a-4996-8e2e-881e1b3b19a8\nf03e2d7f-c5e4-49dc-9c5f-1f09720710dd\n64625d65-feca-4724-8879-e358f5789276\n221ad9fb-d3c8-49b2-98e2-f3a170b1c345\ne32785b1-204f-4da9-8817-af7ec3c229d3\n17eb8c54-2600-4434-9b10-05c601cc8aa4\nc5f9f83c-6577-4f36-a798-92b760cd59cd\nf5af3924-8249-47c6-979b-879ae004ab8a\n41f1aa65-86fe-4e54-9e82-08f509d32c53\n8d0f84e8-e247-427b-bd14-8c746643b70a\ndc47c729-7725-4d71-b789-2400746534da\n3be4f1fa-266e-4d51-a768-63672e11a727\n24b9dc1a-c680-4c24-af5f-b00c00c81224\n264e1a88-d98a-442a-8c72-3d8e9eb8fa23\n47b70dbb-a327-4806-b0cb-72c2d95b86d3\n1b3004cb-7652-48b3-9c38-15f2fbfe2724\n946aa4e5-14f9-4e52-8e6b-422f1d4efc3e\n616e7865-d642-432c-8770-6a0085d5b1cc\n452b6e82-0f9c-48fc-be32-8c618af9e418\n008eefe4-0170-4e1e-8c71-3f972a0cf3bb\n0490ff00-062e-4a41-99f2-e8a790eb0d13\n8adb0334-59d6-4824-9b73-1de51aedc603\nedcc82a8-6885-4794-b429-a1e63fe5528c\n750c7a71-dbfb-426d-b4c8-d3da007c0595\nf22a686a-8333-4ebf-90d4-d0004c110176\n2d8cf3c0-0e3f-4e99-8d00-0b902e98f938\n8dc53a29-dbb8-4436-9f69-63c864a0ff9e\n06509036-533b-47e9-b524-a868360181ba\n4a7d7a36-ba95-409a-9eff-51affecff022\nb7981327-37fc-4514-a7f7-2369fd5125ea\n7ca46dfb-5a6c-41aa-a7f1-61b6deffec78\nc1c285bc-3de9-4cd5-8736-b49780ce1435\na6ec15ba-ab63-4124-b388-6c7378e1350b\n2e2b6460-631b-4afb-8ccc-de0d116025c0\n2f24aa57-8392-45eb-81b1-0445431f3e1d\n3ed95a49-42cd-41d5-bbd7-c0cb0af0ed1d\nc999c2be-6b97-43ff-b6a7-e5b51c111917\ne2246bf3-000c-4f59-82a5-207a4128b06b\nce462e35-6e3a-4f66-b559-9b4349db222c\n5376ceb9-68d4-4364-b371-22e083eafc8f\na5a45ced-f306-4c04-9d72-dc5f9121a2fe\nf47b965f-8130-42ae-a624-177169b47d9d\n5441b56f-dcd1-46bb-b8d5-bcb10305ab58\n18b0dca2-4c05-47f4-acf0-b6d9c7a645e3\n1622a745-c4dc-441b-b76b-bdc9886f9768\n8ba864c8-30b5-4d40-a35f-755142bbe91c\nc98b6801-deb8-4d8b-8850-1ddef9204670\n24e8993c-f18e-4b33-9214-bc28867d7a81\nef39cacb-f81f-4f0d-9f53-2e234711a8ee\nda4173ce-7974-46be-b8a1-4f85ae464336\nf9606e2b-8782-44e1-af47-3e3734f7be62\na439762f-961b-45aa-aeb6-aaf356df0dcb\n33b16ecc-7971-4aa7-910b-47a0a577f777\ncc5dbf2a-cb9c-4aab-b45b-fa48fb25d03a\nb61bdabb-10e3-4b6a-b696-4aff952626a8\n787d0234-3daf-46c0-badf-10d9389a5c5c\n796a9089-e98b-457c-9268-1b2dd4387ab7\n37c1138a-6b48-48f5-9854-4b90eb320f39\n03a059b8-d149-4494-ac66-7c6756fab3d7\n57a1793c-5869-430a-b567-5dd5179aee7e\n3c5f32c1-851d-4389-a3b3-165e973be1a2\n73fff488-6fba-41c1-9fac-17a008b364f6\n5a4d03c5-9cf3-43dc-9fe2-31fdf2a9a04c\n22cece54-f05c-4fba-af31-b8b548010599\nad034a13-edb0-4af9-88ef-65428082a9ad\nad367850-d1e0-4c31-a9c3-1dc89b1e89c8\n2c6f9abf-225d-44f0-b873-7781c31ee75f\nbab5f7bf-d5f7-4a05-b40b-78172e358cd0\n7d4794b0-b809-440e-8cb2-5fa71fd3db6f\ne6efb6a8-cc1c-4b39-ae1f-05b6f134aa29\nd4f328be-11e7-48f9-aec1-d5e0374cd50d\n51db5140-e184-455b-b98a-6e43caff63d0\n9c844e1a-994e-4351-a1a7-4b979887eb11\n4df91892-3de1-4b6c-b911-8e6037ccc8e5\naf208237-54b4-4516-a688-754c86ef44bc\n83860c0a-f5a5-4ff6-8971-b31498d770b3\n5bede8df-5945-464f-9d9c-d3666e50efc4\ndfa94de0-1662-478d-9f7b-68773f7f17ff\n45c896d8-f0d5-4489-9ffe-55f2862d96d6\n8f0f2f4d-9456-4e35-99fb-9ff097badb57\nce6bfce4-17da-438b-a665-83f6d34e0f5e\n71e1d759-4213-4e1e-8f54-580e113a4d5c\nae2c86eb-e75c-4d13-a359-ec05098b6316\nfdfb7ae1-2d5f-4e22-b22b-e119b70f3854\n7358332d-6c48-4f89-9f8b-9947067d5ae5\nc71dca6a-9bb9-4b05-9c5b-bb045eada059\na3be1fd9-e54e-478e-b6c4-bd943fa05fcf\n29c63f9c-d491-4653-81d1-0e9bcce50447\n47155daf-d20e-4486-b739-d2eeae670000\n42781c74-132b-419c-8e3f-e72a4e4be97c\n77644285-006e-4127-a36c-f767650e2cb1\n2e718f52-c7fb-4d2a-b678-ef8e2ce0ffa8\n1d563f76-9574-44c5-964e-2d070ed2c26b\n5aa8d98e-b2d8-497b-b47c-8a44cd59ceb0\n8200aede-6b5a-4454-a14b-06e8436b8211\nd5f790d5-d3b3-4bef-9e92-ba2eed2b9b1a\ne04a92fc-5951-43a6-8178-257485b695c5\n47d28986-d69c-46ff-997a-726715ca0ab2\n8bf6fbec-a5ff-4e97-b5f7-ac5f26cc4d2f\n10c4bf20-0602-461f-8fda-606b1937fdbf\n5c4768f2-9d76-47a3-a5e8-2b951fafa24f\nc1f9b901-3e32-4a12-9430-184a84148dad\ncb4c8b7e-4650-4fda-ab1e-c09c3cdd46ed\n9399db9d-23d2-4ccb-aba2-dae603152a53\nba402fc9-e78f-4e50-a83e-dd130953e9fd\nc9668001-d63c-4780-b21c-fd070578d8e3\nf13d6980-464d-434c-8a0c-eae1dc86c120\n59ee2fa1-13fc-4056-91bf-3c54936f956b\n58052932-0873-4122-8f94-7c69e9e196aa\nad0522b6-88e3-4765-a60f-b575ca4de108\n898ac6f1-4fe3-4ee1-a4fd-6d6a48b847a2\n86afb972-7251-4679-8222-61338c5f1546\na8c4495b-3c23-4f0d-8b84-d4fe1f5b325a\n3414b6e1-d6a4-429e-8362-0e2a1e14c2c3\n9ff40ab7-ab80-4b7b-bf83-aec774756f83\n4ad57503-1090-4402-a39d-34f6b8d4789b\n764c3918-b8a9-42c4-b3e6-ffc60a1edf34\nc1b56390-5315-4fbe-ae31-e883eb3bbc2b\n0e20052e-c789-4e63-b286-a6f082805bbc\na4f4eb0f-89bd-47f2-b0e3-db19b8ff3d38\n5ce79d2a-ac3a-4db5-92e9-605328d7ba72\n6528a48b-0433-4666-9d8f-4909f19204a5\n8eb728c6-d3dd-43e0-99f6-464bec908764\n77c055f5-0d68-418e-ae1e-c7c066066fb3\n8413713a-f0b0-4b94-bb6f-1b8e5d826b80\n9073e205-43bb-41c3-8fa8-d196237c3f15\nc56a9dca-2eca-48b2-bd81-ad7447e9b6c0\n9a58991f-5783-4529-9615-f0b184ed1d5f\n55ad6425-7b01-425f-8d1e-a374d00a8ce7\nf4564077-598d-4c14-9c9b-cf85eccf8165\n1138d8cd-5af0-44db-94e7-c7c0e2626712\na6352f43-4fbd-41ab-a6a4-75c66da67a95\n17ee1aba-9afa-473d-a69e-4b410732cac0\n603f8c92-8261-4737-b0d6-2e92bf12fc62\nc1187119-8151-41dc-a42c-f988db0b5842\ned4d0c0c-4c58-4f3b-9a9f-76ac636e4c02\n896e252b-3190-4904-a271-265612fcb1ec\n44606288-7b3a-4926-818a-9d922ea41761\nd3f9abea-f02d-4a07-8b87-b5736ca1775d\n6b7344f2-afec-462c-90d1-67c6e3209ce1\ne27065f4-b006-4729-8823-4c18e364005b\nd7a1a4c5-cfe5-4fbf-b868-cbc2853d9587\n4bd1388b-fba3-4640-9621-03ad327183e4\n38dffc9a-33ca-4a8c-bdf9-81c22d67767b\n6740609a-83af-4739-b874-730171e042dd\nabdac657-34f3-4e1e-bcf0-108bed8b1ec8\ndea3e432-86f2-4848-a37e-64c496bf74db\n5ac76596-ec0a-4f8d-b024-782dd8ac1aea\n40d6d3d5-a5fb-44b9-9fc0-4c909cb8964e\ne93f953e-018b-4a39-9791-b10e59d2c021\nac8127f5-5e6d-4116-9e1d-6de5d0bd0f80\n075914fb-c814-4ea1-9bcd-b4b48daf4b00\n157d6042-e271-477b-b7ba-a3961804f77b\nb004d9f8-e752-4900-a9d6-b44291835b6f\nc57ca44b-3849-4c10-9f1f-b3225c124785\n549743c8-b14e-413d-9797-f33de9cbdd42\n0ed6707c-9fd0-4eb9-afc7-ab6c1b1f0646\n6944667d-7e07-480d-ae08-60d436a515ee\n89e81f5b-1270-40f7-8fcb-a3cda2586902\nb3f3faac-aa4f-465f-b2bb-c680cf4db531\nce9513d7-9c1f-42d2-ae18-66008ab0d244\nff2dd364-5965-4b8d-af7a-78aa79e2f724\n3d81d340-a51d-4fab-97de-4173a8127dcb\n639c7df4-bd53-4569-b201-f65aea3c99a8\n722c91a9-0541-4c07-aaef-cdc46f52339e\nf1cb2e2f-1561-4527-901b-5afbfd34ab46\ncb5af335-7cb5-4063-bbb4-53154a2a9c5d\nc8c7c229-c198-4437-9c5b-4d9cb02fb140\nadf59339-e524-41d4-b8a3-b541be23ed94\n512c1f82-45c2-4734-b290-0f6f170c48a5\n6bc67f94-9bdc-42d5-b67e-9d0f165655be\n34633eff-34f3-47c3-842d-556492ef850e\ndbb22efb-51d3-456a-bd88-b4cb81b1a377\n3fb7de2c-fea2-4733-bf5c-83aae961aaf8\n6c21665a-8613-42f7-ad1d-01c3be1feb6b\n7b43b4f4-1845-47db-bbcb-9f70ce50b6b7\n438284ca-fb0a-41f6-9f1b-40ac83f935b7\n19ddddff-69c0-4536-8bb4-bd443a6ceeb6\na8578eee-e583-4705-b3d1-0091905c6110\nfdecc9ae-c4bd-4d3f-b1ac-96442ac703a8\n1a94a798-1209-443f-b223-66cd562ba7fb\nca5cc9c6-9344-478e-84d2-5582e0c77bef\n69edd7e4-cd36-445f-b405-6312622c3cc4\na04e114b-7383-4a15-98a6-849806622f0a\n0a0da67c-2d0e-423d-a8c4-cb3f841b4cbc\n44474e90-53fe-46c8-82df-6a1aa4917ab7\ncd17f5d8-65bd-44e5-a391-c8aed213d9c3\nab7ddfa4-24c1-4a14-98b7-10c73a5586b4\n89e72ebf-6ad0-4d26-95fa-2ea4cf7426bf\n52c08a5b-931f-4b55-91ae-483a30b26a9e\nfe9b544b-e51d-4dd1-b9e9-ada40361e644\n521e6b03-2c2b-412d-8f59-8bae8a3bcb64\n7476a69f-8373-4276-bfca-7bc948de10af\n5b19d758-9f18-4f8f-89ce-1c7294f5be97\n345d6e1c-0b15-421c-a81d-087876c618e1\n46dcee36-b8f5-47af-bf3f-a04c7dabe0b7\ndc8d09f2-e744-4c74-8683-f9e0e6579e56\n7ac45f6e-193e-437e-9068-815af971839a\nbc4a4af2-b892-49a2-abdf-70326e79ae0e\n2e46fd4b-8e0f-4249-a064-3f2bead57749\n3c2f688c-e90b-4a60-b534-dc59894eb208\ne7e0e93c-d62a-47c7-b8e7-a26eec8e2594\ne953e6da-ed98-4760-a44b-85e5cd7bb5b8\ndf03be7d-93fd-4238-bf75-fa20e4751cc7\n34eebed6-9497-4389-b93c-1c36b5158c01\nb3989e38-76ba-4e89-8644-d2ce0871b3ce\n3100399c-b217-4b9e-aa05-5492f5300d25\n33b47553-0837-4608-a8ac-6b261993b033\nfc3a1e36-34be-4b8f-b692-843bf0149ecb\n3ea52201-9429-432f-88d2-b71985574c27\n5951509a-1884-4e7f-b148-94cba7da444d\ndb72396f-9180-4ef9-8ce3-71718c0e8225\nfbb00c1e-ce58-4120-aec9-6fd5d77afb28\n35d0c040-e95b-472c-8a7c-a35d9872a336\n32044866-aeae-462b-952e-d0347c8e141e\ndb2c9886-7818-462c-9e23-ff4efcb9bc77\ne1d74e8b-b18d-415d-b764-79ac84d68143\n3274919a-69f8-4258-83c4-a948150f1138\n3cb09ca0-c3ea-4a40-9f39-dcbfc4a31f4a\n6e0a86be-28c9-495c-9443-0f5a846237d3\n1d0a651e-7a34-4a9f-a50b-60bd752bc34d\n25e56aea-0b98-43e8-beca-bf3334115ab2\n7aaa4828-732c-408d-85d7-8e17254e4e1a\n5586cd82-2a4b-40aa-9ae7-3b46f0f0dfdd\n37e09fd9-0bbd-4c6d-8860-6ffaf8bd6e41\n7961b5d7-b61e-4516-aa7a-24f465e823f0\n4f0ab5ac-ff6e-44c8-9e8c-52acf98b4052\n344829f2-a931-47ce-a743-b7d98722b550\ne5be7998-20c4-4783-b380-7fa5a40a9058\n5e1414a0-a9b9-4603-ba4a-f6a75ac418c8\nb423a197-5aec-49ac-bba9-a2c418513330\nf02361a6-a481-4d7f-a9e4-c211deefa4ce\n225c7b85-b436-4a81-8acd-b91116fda818\n6a40f8c9-84ee-4dfd-b895-23e06ff6ec4a\n839acc2c-9a97-4f18-b4ef-f2e68ad286cb\nc9f78d57-870e-4366-8f80-6e7066322dc9\nf4f5e253-0c7a-496b-9b17-f3096d3516e4\ne6dbdffd-3656-441d-aebb-580bedfea838\nb7601b95-1e17-4a76-8759-2b353ed0f53c\ne12c1602-e913-443b-9c42-fd6fd54c0754\n6c2d09ab-5eb5-4ad8-8aaf-e5ee933436d8\n478bc260-1a65-42b8-a1ff-673f6eabb52c\n39abeac0-b361-483c-87e3-bd8a23171238\n48e9e7fe-9805-4a32-ab59-9687b0238b36\n33950708-1305-46a4-bdb8-b2bc9013ba6b\n226a88f2-24fa-4124-a0a2-39ac2db8994c\n5dd3d7ee-84f4-4a6d-8b5e-fc30979a1e4f\n17be7be9-c6bf-4069-9a68-b5450657b4c0\ne4596f33-65a9-4ae8-a30e-f5b390ad71d2\n6e5c27fd-31f0-4c1b-9227-e14ca783c467\n42cd2073-acf3-4ce2-b4ae-3f2dd3e73696\n473dbbf3-16e4-4068-9e6e-1036402a0354\n67ec18d7-f7e4-4594-97d8-6658e542b125\nfaa50681-5f1b-48e6-894c-b6d3e698b3e0\n99318dbc-43f7-4dfd-9804-4ef50aaf4d1f\n0b7201ab-092c-47ae-9097-74a01dbeda52\nde73bca9-d2be-47c6-ae04-e45f92f76353\n0c141573-4235-4e80-af73-00fccb743c69\nf010c6f4-f589-490c-a9ea-d4acfd7419c3\n1f88f9f2-1b64-4926-bc28-9b5f2741e4c4\nd8f027b8-d4fb-460e-9171-ddb2983dea61\ncc371d57-e5bd-4ed5-aedd-e441e5021964\n66e39c8d-716c-4f22-86f9-98a3cf1185f5\n6e233964-de64-42de-bc71-ca33bef7a14a\n273dff7e-4d8e-4bf3-be6e-7a1a1f646828\n7febc69d-72ca-49cb-90f3-46263c438696\n95ee9188-1b94-4226-bbae-f81096dabc1d\n0565c6f2-b70d-4946-90ae-276c6393e826\n69a7ddd3-8c1a-4211-bfd4-ceed0dbe971f\n9be11fbd-07a6-40df-83ca-84bc999ac90e\nbddeb63c-5e4b-4df3-b033-c6943982488b\n914b9807-be71-43af-8d9c-46b841c726c5\n18b16c7d-fc99-4301-9fe7-40f0f55d573f\ne03d4c58-9fe0-4f55-afe8-8c32d46372cb\ne36ee22f-be1e-421f-87bf-4376da47a093\n0002f764-fa2d-4cc4-bb6c-f79a5065451b\n749772b1-fa3d-4f43-8ef7-2f1f5ec2f236\n4a7beaf6-1783-4642-b193-30e7ffaccfe7\nb1a75955-a064-4907-b1f6-045ce3f3eac7\n07fb896a-0b81-47c5-b607-00c55a6aa752\nff427b22-30d3-4ce0-a47c-bd59eb898793\nf483162f-09cc-43ce-9f9c-4708afa27f8f\nc687762f-cfd5-47a6-b501-8abe72ecfe85\nf4690e45-cd21-4396-9db4-3a3f924e9279\n00611a29-84ca-4151-b62c-c9ee1f76eacf\n21d00465-0646-4484-ad93-66cb05ac7456\n05c66628-d0ad-43e3-9e99-80167cdf0b94\n2077be1c-5036-4bd0-a3cc-b40b73773035\n3aa3cac9-c845-46cb-8e77-c80aec59ccc9\ne8c95285-f7ee-4206-a301-e62a730e5ed5\nda4f81b7-e79e-43cc-ae8e-9fa7b3dac43c\n906b1da3-ff7a-4546-9dd7-01f095788fd5\n44627565-7b7a-4351-b360-bd8ebb86c62d\n0e677013-7bc0-450c-bd66-1ab837a378f6\n41863440-258f-4ec4-81c8-95dd3b3331c0\n67306335-afb1-4400-8cb7-72aa7078cf30\n4c679a96-46dd-4ca8-ad19-0ee3283b70bf\ncd155d07-1216-4cea-b248-808fcf975da5\nfecbbced-cfb6-41bd-a74f-f2bc25df5d6f\n2b083355-81c5-4d76-9a71-3ab37d95f1a5\n7b2d9e73-d7ed-4356-8b48-2e1fe6441b18\nb6410ace-26f3-4102-98bd-ad61a7143edc\n5aa61897-707a-4a5d-bfc9-9342466e82e2\n19bf9e8e-9a67-4aa2-b877-0609b7fa18af\n7616a620-f38e-45d8-b403-ea657fd5bb1e\n4898d778-9357-4a99-a84f-5541ca4344f5\n6b8bfe77-b5e5-4683-8179-fc16fb10317c\n9fab2fd2-8889-4dbb-92ca-3d4648e308e3\n18e8d042-c55a-4263-809e-596a68479de7\n6324fa69-1d26-4b5c-b501-fc709c6dcb6c\n886c1cef-f9e8-43d4-84b4-63042ab223dc\n02f02265-d3ab-475a-9502-6979aee87b98\n4eeefd77-4530-4e51-b8f9-b2e4928de174\n3485801c-35b6-4be4-8466-6c6ddceefe70\nfdc78a9d-645c-48a5-8099-ec9af71c92f4\n86988c3f-1f0f-4090-90fb-f5f57eb1f8f0\nce1dbce1-2fcb-4155-b8e1-e3b0546e3f45\n8aee3179-d520-46e8-9f72-1b351a9864a7\nb7392ba5-8308-4d14-bcc2-9bed14dd1218\ne4ffff5f-3afb-4ba1-bbf5-00a4a2f2023e\nc8aedc05-aa5a-4d46-a4fe-6b17540efd9e\nb7c8cbca-7115-4c29-8953-3ba14057a301\n8253da6f-204a-4ded-ba0c-d19b29f4f357\nd24fda26-44fe-4b5c-a6d1-d963c0543601\n1ca61240-af93-4b76-8fa5-77bc06dbba26\nbd275220-3637-439d-9931-f675cfb167e1\ndedc8fd6-443a-43ca-b864-3e784cfe3a09\nb34ecb85-a896-4b9f-998d-160d786b3137\nfa1a0ad0-e3aa-4644-80d9-096296d4a311\n3a9ef542-aa4c-4b06-b1ba-611eb2047b06\n15cb65c5-bde3-472e-8e8e-f72ec76c0085\n4f16a77e-d6f6-444a-9426-867b83bd9d0c\n2c81ce93-6d8d-48f3-aa0b-c49675c68b59\n92cb29b3-20b0-4a42-b441-7b80e9b2f78f\n5b2a3b98-57f3-4790-87d0-037e3a32de09\n5d0f1297-e905-4e0d-8d84-ab021b2c27ac\n4e7a82f5-407c-4ca8-9a4d-c3e682df459c\n306a25bd-59aa-4c86-ac12-f0408965d655\n683d9b69-823d-4fbf-9b81-6a76ec27cfa5\n2c513c79-bafd-49d5-ad5e-0ca0d525272c\n1c39b8b7-4f26-4858-8dbd-6590b21db496\n4a161fef-d0ae-4d8a-a279-51a911414934\n6ea819c9-0629-41d7-bc72-380175d3583a\ne9bdb43e-d706-489d-bec8-5e570b640b41\n256636e2-1355-4a05-9304-673254549d08\nd1267530-300c-40f3-8765-1df30bd0f8e7\n7f0ae5c1-7203-4503-bccf-1b3a1ae26ad6\nbf4bf6f3-35cc-4615-9afd-26dc3a40fbe6\n3c6396fd-bc3b-457b-bac7-d60bb3ca639f\nedb8dc04-c2bf-4e78-bf57-14d2780e00dd\n1a061cb5-2080-459c-9f17-2c2f83e7cf44\n34c510e6-cf16-4316-9aca-4dbab0f0246e\n0dfbb028-1b6a-4328-9292-df37a1a03808\nbd7b10d7-795d-4796-b6ca-7945812c04e6\nabd2b2c6-58ec-4dbd-bab5-75a5cafbef1a\n0624d838-6930-4de9-a15b-cede67d2f141\n9ef02c13-2c5c-4d1e-b188-c1e08238e750\n29323456-2772-4718-b496-4609df8526b3\n995f887a-cacf-4451-8974-88890205eb70\na19356cd-30b9-48f4-b13a-b9864c4042bc\n0c0162c2-ed90-40c9-91a9-b7a5e7b6bd38\n65759447-0d69-4503-a2bf-c398771a8187\n00d472d5-c8de-4138-9a43-0332041b8402\ncdee4c0b-9e7e-4f0b-9353-086b8c2418ad\nd2b880fa-6355-4025-94cb-e70a8577b375\nd500769e-c32f-4e63-8ac0-3f64b02f9cdf\n2a4df3de-1b04-48f3-a7de-0e0d4b0fcf1d\n087ad240-f142-49c9-ac19-b15433c2b1d2\nba53e4a0-3e76-4370-b714-cedf42d5c123\ncd478c2c-bdf0-43ed-9932-f8fecf97eb38\n2ddbbf70-9f25-45d1-8b13-89039bc0eb24\n830256cc-b363-4a82-851a-a36a50fc5fe2\n6b3a3b6c-49ad-4c3c-8786-00bfad2c22b3\n9df66359-0af7-42da-a8d6-e1ce50d31294\n61f023ac-9668-4e76-891f-605d384c47a6\n34981b7c-f582-4213-80b5-3e4e06aebfaf\nd2f28b91-04d8-422f-9249-9a97575a4656\nabed322d-903a-48e6-81c2-c495dd35f4d6\n18883bc8-8136-4c66-bf6a-3eedf8e6e8f2\nafb5cc65-c877-449f-b012-5cffd7eec567\ne4fe1ebf-51c6-4f2e-80d6-87aa308df7f4\n9e21de17-ab65-4975-8a57-add64132671d\n73271e1c-f738-455f-bc12-9a17d676faa6\nb2ebbfa6-9614-4cae-8b7a-f44e645e2c3f\n6d02741c-2557-44ee-8ab9-6e4954bc16ae\n37e1339b-4827-4650-891b-1bb16e2b2709\n74636f7c-065d-41a9-bb04-24e84d5786ea\nb1c2d158-5643-4b59-a418-149cfced1e9e\ndca19df0-4e91-46b3-a52c-7acffe4d2994\n612e6d48-3353-446d-b158-a1f0001c847f\n2b37bd46-fff5-426c-8745-912dbaffd766\n3e6e526c-87df-449d-bc29-5b70207de900\n9e5aaf59-9b79-488d-b3c6-a9effd25c98f\nda154567-027a-43ed-b9a9-b75a01757986\n8730d181-2992-4948-bf88-68a9617afd66\ne67dc001-704e-4989-81d1-d42b30bb5577\n679121e6-df1d-4ad8-a8bc-2b1ec1be8687\n39593203-16d2-406c-89f5-1de8dbbfde2c\nec6b5544-19e4-46ba-9ab5-b51caf407db0\nc17e6ddd-229f-4504-9301-f64487bed62d\nd6b0a847-9b55-4162-9067-d130c2de706a\na121a1f7-93b8-42b2-ba53-370f9b3b7097\n9cdc17d5-51e9-4ab8-a0a9-71d8acb75c29\n964c5015-86c0-433c-b7f8-908f20d48ba0\n199bc9b7-c669-45cb-b4e4-724418114f93\n080d56c0-e0ac-4c91-95d8-567cbf077be4\n3f67f9f8-1def-4405-9e8c-ba9e6503cd55\nb57d7ad6-c61a-49dd-883b-a5985b64b49e\n89212b1a-52c1-4df2-bedc-b06325af9036\nb9014d68-f662-4db8-b86c-dd42e16f5b3e\n983e68be-c2f6-42e0-88fe-e54c84369b2a\n3eac439b-1d0a-4dda-8b8b-5bc632bff7b4\naf223b1f-ce49-490e-a92e-4e2fbdad27fc\n2d7e0834-b506-4c8c-98fd-441f0b357bae\ne3d8d02b-ae93-475c-9df1-a70aed6632e4\n906206b6-8e00-4066-83a9-c621551d5bfc\nca6ad97f-8adb-47c6-9872-4cf6cc3b3b73\n985b0c9e-1149-49a5-a4ac-e5bcef18ec7c\n78e7e23e-a78b-4d56-a6fd-ad32ca4bc174\n4715b042-c97b-4151-a261-9e311f64b5f8\n8524023c-d5fe-415e-a6d1-26ddb82faac2\n6c4f8654-87a2-4f66-8b9a-f2172ac18a65\n217096c6-48b2-427b-b9a0-36c9c62bf2a0\n5cd01038-211f-488f-b121-94de0d0f0568\n72913d57-9c27-4367-8e58-24e45da4ed46\na2e2e6e0-20a4-4069-af78-b55d9b104246\n0877a4e1-d678-4e6e-b63f-479e0bf36108\n57b2857e-f911-4593-abf2-22c3419541fc\nd77f090b-eaa8-461e-a9aa-fe8ca0211d0a\n88a84186-5202-43c6-81fa-1970dd16b691\na8cc456e-97fc-4279-a7bc-72431476316d\n3bb523ac-c130-4f65-8a8d-bdbf3d88eb2e\ncb20cb28-1c38-42a8-a999-36c0c1c0e46e\n10b7f765-ad36-47eb-89cd-7cfc3b091031\n9bd3026e-c598-4d35-865a-3567a5db99a0\n416de5c1-267a-423a-8061-b064cb5b98ae\ndccb87e6-ede3-4b50-9ea9-40ccf3530491\n522acaea-e6fe-4778-9ba8-e826055f7e4f\n8f56ddf4-faa3-4c82-a721-858bd1e4288e\nf1042131-f27f-4cdd-95c1-d4504e6d2ea2\n2ac65e32-a167-4f5a-ae70-a757d73d9e57\nb90316d5-299e-4d57-8551-b7b90db3fc75\n7ed9fec7-a952-4871-af32-9ef9edd750e2\n9430cbf3-c011-41fb-bf19-b923bed61b78\n8b8d72e3-0330-49fa-bfb9-d8e1a5926ce5\n7d7fbb9c-b5df-472b-8905-5c1dc994f963\ne28c6982-d968-403c-a6ea-c972b51f957b\n38502bcc-1fae-4d37-9926-9e8357686820\n58b7eb6e-a00c-41ee-b683-2a091e6530c5\n5d529f5e-95d1-4905-8b28-b61be115e109\n10d770af-1dab-47c2-9e8f-7e4f1352df21\n2a702c21-413b-4ffd-98f9-00de2369c86a\n6808d9aa-a4c9-4fba-9848-6719f8dabeea\ne5960c51-3b27-4fbe-844b-47836f3438e6\n392520e3-4685-48b7-a8a5-6c00c47527d8\n911a63e3-9282-45fa-bfbf-60c43426897b\n35b61d69-ebcd-4e1f-9cd2-13e4c656cd02\n90090859-4a64-45cb-bb41-eb1258c8cc42\n5229a7cd-dd45-4da9-8f61-9dafca302818\nadf6b663-eaf4-435d-bc8d-453970d18387\nefe92130-3de7-408e-9224-34f2999b0f9d\n3a76b485-29dc-43b8-afd1-fc7f77407f33\n5cf60b47-1905-4bd6-9fc0-e29278095e89\n312a4edd-8e31-4197-89d5-149858cdf29e\n482f2a21-004f-4b6c-8e1c-a46451b76316\n72f4b64b-aa11-467d-9d6f-cdb46a915a95\n758e4de7-e858-4a0d-9ead-fe3447f383ed\nb4e2d317-eb32-482d-9651-c5872f222df9\n0e08859a-f7bd-47a0-bcc2-6a290ce719d2\n09e9b5d1-6dd3-4bc9-88a9-eceb8f079e4b\n5f2fc12b-9e3e-49bd-9c2a-282c65b12fa1\n19b50fee-6947-424c-9fb8-29b90ad4874f\n838ca9b6-7e93-4367-adf9-83c70c854b9a\n40094439-61e9-4f10-a3b4-62f671424d94\ne362b6fd-76a3-4671-9c5c-def2fe0c8a81\n48ff99e4-08b9-4d8d-9c3b-e09dcceb1567\na13ad0ea-1807-4591-a724-479bc51f0779\n8f22548a-4fd0-4cf9-8d23-c9eb21f13bd8\ndbdc6e7d-78c6-430c-abd2-f5f859412982\na9b7a0e7-afcc-43fe-9fc4-86debda48174\ne0c06c6a-604a-4cd1-aee7-c5c880561ecf\nb104719d-8e50-411d-8d6a-2199efa33133\ndb7df8b7-378b-4e3e-b895-a68739970e24\nfb14f407-7f36-42c2-bc63-53a54ef4f1a7\n7d017992-be2b-4286-a3a6-c47647a81fdb\nd3c9f8f5-cb46-4c6d-8859-74b8658020e7\nbadc1dc7-e320-4d5b-93ef-c745582672a2\n18174f98-c731-4763-8990-4ca871c82fd1\n2463fbaa-cb8e-4d0d-bcb4-a294c0c54128\n6af72798-2999-46f8-8693-f123fe574681\nb77dc1c4-2d9b-4b9f-9423-53bf58d6f736\ncccf2f6f-d1fe-475c-9b80-fed7a056e112\n197157aa-6471-4ab4-b480-4a41742a5ff1\n23eb3d8d-14bb-4d15-b87d-61b1c9b36e9c\n61b3a110-bce2-4867-af17-336f10155437\n8996e184-f7a6-4f3a-bb0b-9de0f415d357\nf78f284e-1b1c-46c1-944d-ff489cca1a21\ne12a1a39-0a17-4473-98da-5b278125ef51\necc985ca-0385-45a7-95b5-0d7501ab51c9\n861df2df-469d-4593-9de3-27b7c137a39d\nc1a9fa9b-6d4e-4014-8db5-b008fd5a907c\nb59d33b0-5ba6-4777-a536-f9a582e70805\n53a9f1b9-b194-4331-b4b3-beddd28cc510\neba7872b-d9d0-4617-b805-c574587899d5\ne05f01c4-d44d-4491-9580-21a3189f4ad2\n800f766f-fb1a-403f-b1b7-8ef31a78c7ce\ne819c541-c036-4b95-94d4-d063593eaf2d\n3563c8fe-31eb-46c0-bbf7-6d83f45c3d27\n7471d1bd-9398-420f-a44a-47c6bc7c0b7f\ned6a7c2e-763f-45fd-bd32-2f420145703b\n4fc6eb8a-abf2-4a19-a3e8-35c9578df915\nb67e1d25-79f4-42db-84b8-325989609790\nbe9222ce-5be6-4d97-8034-1a2292f586bf\ndacfdcac-2a09-412a-bd05-d49dbf7c2fcb\n64e3a12a-9a71-42b5-8f3d-ab8cf1e59089\n6a20962f-065d-4eed-8052-3eaf5d720187\n58fadeaa-ce17-41ad-affc-8301a9ba9ea7\n3d4cb02f-834f-454c-8608-c48575854e70\nc6ee5c4c-b6c9-46f0-905a-4751b3b760dd\nfc91052d-dc26-44c7-8c45-7a67006ca4d1\nb01826bb-17fc-4305-b33b-085b234c8e18\nd9edba38-9d68-4828-a3b2-918a4562794b\nee63542e-4a69-4392-99c4-2a75b766a0ff\n4b0df569-476e-4de6-ba51-bfe8a594e18c\nbd3c78d4-01db-47bf-b781-73fd4f17dce2\nca14fe61-4245-4e4e-a19e-e4bb70551dc9\n5c9d181b-5b20-4048-947a-299dc62782ce\n30e2d18f-a9a9-4ffa-9365-2afb4adb314a\n23b1c557-6fa8-49c0-b5ab-5f75dd21455e\n69057bdc-7994-43b5-89ee-7b4a83bada3f\n508af4f2-cb25-4df6-bf94-e6ce63ef17da\ndd9e3b72-3556-40ff-8551-a3651f10f8ac\n0a89cb56-bb18-4680-9f90-4f894f401252\nce2930e2-5384-453c-a9c5-47250ee808da\n421a2c6f-c317-4e27-8757-8b52dc63956f\n5e3f122c-6ef5-4a59-bd8f-f719b73977c3\n83d1cfde-9aed-42f7-aa63-4f74ca9f10b8\na9f8c63d-db3b-41d2-9657-43d2ca8db34c\n7b5b169f-5aaf-4568-a0ad-d0c52bac1d24\n34caea87-97d6-4cc5-a1ba-516db82cc3ed\n0767bdd3-6d67-450e-8cde-f66207f2f19e\n9ca51799-9472-4991-9bfd-33d9042df50c\nc307d990-f507-4d15-91a3-6316825c096c\n3232d99e-371b-4795-9bc3-dd99ed33453e\n373e1080-8e93-4056-99bb-625eb02cad70\nc754c903-6c06-410b-a044-41c67173f919\n7769faf4-23c3-451b-896c-a296f536f26a\n202935b9-8669-42be-aa9a-54ed78430afc\n7ede4c7e-b291-4cfc-87fd-49c01c2a6377\nec8baa8d-be5a-415d-bec7-eb45df593e6d\n9169815b-057b-4b81-a04a-8451d2096c45\ncdc1d292-c5d4-4b6e-917e-1c1771b9a9cf\na53cb6bd-6a50-461a-814d-f48ccecb3232\n54f51d00-a063-4b91-b081-a5e803b32f03\n3b18b046-f4a0-4535-b496-43ea9c7cd0b2\nf6092e5e-e328-42d8-81d2-0c2c26714371\n3b66e0e2-7d57-4090-b230-854c924009cc\nf0be2f55-41de-46f6-9812-f2bfe9e2d8ad\ncc1cc58f-fde4-4d41-b857-a48fc0972429\n3e2419bf-30f8-4f51-9c1b-b4341ad622dd\n3359c011-6732-4987-9932-28b9d6d0257c\n44cefc6c-b7d2-4c3c-9723-b8f0491b533f\n454b360b-ddc1-42b1-bae8-24da20e8f2d1\n2af37afa-029c-43c7-9c49-8aacafe8eb39\n58052c9e-c321-429d-896a-6d0ec06125b9\n107e7fd6-33e6-4987-9fb9-6add6c11de29\n94f71596-b406-4c18-8e09-1bdfd25b88b6\n9153bd08-df68-4f77-8313-180884511a9b\n995ffdcb-7cd8-4294-9e44-3ec7cd1a548f\nc2916e19-c1c5-41ee-b37a-9356220fa68a\nee3e590b-3fd0-486e-9891-6e8d90d05a88\n28aceae4-cde5-4a2e-b1b8-dd9635c36457\n8357efd5-4a77-4aae-b494-ae350a7f2444\nd4116547-4927-4c7f-9472-9d4c1617d66d\n58502889-0c75-42cc-ae27-c9cb06a0b7e1\nf5f2c576-43ff-4bce-81f2-723e4ef40637\nddd440e9-28d6-47df-84e3-eb5dc5c64587\n9ccae3d4-4655-44c2-aac7-df63996a6b66\n320326e0-3ead-4c78-b046-f65bd87c3826\n0492e438-2b15-469e-ada6-ef9394ba59aa\n5462c9b6-26c1-4ded-9a40-7a76ef5e4f4a\na407c791-f2a3-46b2-a93e-eefee0b6d83b\n34dfb3c0-4f00-4106-bc8a-a75eaffcb22d\nc46e2df3-433c-4e03-a771-75e469671e9b\n76097cdf-2180-4be6-930a-9c73ad2d93c3\nb9e1b750-914d-4bb6-9d94-4fad3a24a396\n54af14df-affa-4aae-b979-c934eb6309ac\n6b11982e-ac86-44e2-8170-092c632cb2de\n3c490ac2-2a0d-459e-93d8-e08099c91fb3\na7b5eeb0-c2a6-4151-b489-50d2891dac2e\n1e4221ef-890d-45db-9206-2f6fe71b9362\nc92c9932-d3fb-417f-94be-787b5b061d22\n65f41691-d529-4f18-af80-31c805354e53\n815f1f52-aff4-45da-b0f8-fc06165fd3dc\n0175a0b7-9d4d-4a35-ab60-b937122a4690\nc81cf1b5-c69d-4abd-a234-dd1f1b9a6cff\nc643ed9f-9519-4416-8572-c1d9f8b16e72\nbed7a8a5-c092-4ace-918f-b00655bafa6d\n0da3a5b8-3228-43e5-9fd4-9448a2eb9623\n94c03aef-5ed9-4ece-b700-0979bf5fc9d3\nf0feae63-71ee-4c0e-9086-f7434d6c8d6a\n03f51b3f-208f-4e62-9390-05e1aa2abf2f\n3817cc18-41cb-407a-b5ec-3f5f5d75cf68\n7cc70a35-378f-40de-8d1f-e32cc0c349a9\nf7b69230-781e-4dd5-ae4b-609fdf9c3173\nd0c16f99-19ac-4d73-8d70-068898d8dc4a\n2173a66b-fc47-436c-bb67-1cfdb73a746f\ndd6f35ef-800f-4d68-8fd2-7a45b419b75f\n0577c9f7-45c1-4d58-ba4a-d60d740e0e15\n6405f534-de41-4743-94ed-2045f87ffd1f\n1f99f721-6755-430a-97e7-5bbd869f9b1a\n80769edd-c825-4e83-9ff7-f5d4b7509ca2\nbb0009b9-b992-4e82-8b02-15f6a5138c85\nc848f744-2c88-43ba-8aba-c874fe3a72b9\n8f24e040-d2ad-49de-9e3a-2750e7603160\nff58310f-f621-4134-9739-fd9ee0f7b3fc\ne639bfb2-bb31-41b3-af6c-66fc5efa8312\n1eafe9b8-defb-445b-a9fa-901cee1e7d14\n02f30994-e79e-4c95-91be-1596cd221414\nb1175d40-ff89-499c-a7db-47e5699f6a7e\n7472c70c-951b-4a38-98f3-11e118811c59\ne3b61757-d87b-45b6-9db2-42772379b728\nfac2f1a1-9495-4228-b5c1-ade17c4326fe\n28472228-c0f1-46f9-99a0-bfc92d6a2e2d\n7ba1aa22-cfc2-410c-97a5-a634a6f98cab\n4331b66f-0f7a-4020-bf28-e3d8fca7b19e\na8f5e0ef-f6c3-402e-bb87-6b86e5c8f556\n6c82f3dc-d071-4cd6-94ea-b95b54c4ce4f\nef6b33a9-4202-45d8-83e5-1aa760785dc8\n0d0355f8-1721-4dbf-b7a9-fe241302b931\n99d28a62-db95-4029-b169-d569cbf160c7\n9b426bfa-3bf6-4299-a466-24742bb82f26\nfd2753b0-2211-4147-bc22-c293d7dd04a3\n5acef168-3066-4771-a323-02fc4771e903\n0d757556-0169-4205-be19-058a84ed6eaf\ndcb5dfb4-4f27-43f3-980a-bb9ccae46667\n53712dd5-a157-4742-874c-c035aa62884e\nca4a09a1-ff52-4312-abad-a91d8bb76785\nd962b8bf-6572-4488-9f6f-0a2024031960\nc18d8394-89aa-4567-ab26-b64a69aef132\n3f717136-84ae-4b0f-ac45-6b9be0e4d962\naf3ba741-1b04-4822-a375-f3f75195b486\n6d52d322-1cf7-4c7b-9943-fab3da488d1c\n5314cec1-dd1f-4314-89ce-a06a82493ac0\n6564b087-cc67-4a1e-9f7e-0c98595bba28\nedd8175e-b803-4f7e-9535-ac851353c0b5\n320492be-67fd-431c-82fa-c8b1b49c4ef1\ne84f4055-52d7-422c-b76d-02771049ccc7\n5a78a141-13a6-463e-b3b1-42eb65b245ce\n081efccd-db5a-4d76-9480-91ce64b4cfb9\n5c134808-fa68-4c19-849e-e47cbfa17666\ne47da1a4-9047-45be-a628-8586fd43670a\n6fe55e0b-05af-4ba4-9418-7f266e724027\nf1ecc763-5cd0-437a-b58f-788f96b99f83\nc6d3f779-2c47-410d-990f-e07f245890c2\n00c810c5-ad7a-4271-a766-33699a33d49b\n9e14b637-ae71-42a6-b153-898d2dc26aa5\n0688c492-4b01-4b3b-8948-07044ac37063\n9aab7a46-6058-4792-b10a-e385b61c045c\n67c8bd22-bb06-4c7f-8b07-ece45a1a00b4\nf0d91f26-ed5f-41ed-9731-4361260ed61a\ne06d6889-3b76-477e-8fac-bdfcecee5bd6\n31e435ab-f8d9-42ff-aee0-fd9e1cb93e88\n2c2ba177-fec5-426e-8aa9-45e0100e305d\n0b110fbe-0601-4e2a-ad91-66334ef1a7a8\n90b9f6e8-72e0-4e50-8061-5eef05f0dc2f\n4814e988-5246-444c-88f8-97ab81197dfd\n49c85058-423d-4560-9129-06a4ff1cb11c\n21807cad-5f2f-4c59-a788-e6044c0d6aba\nd70209f5-5b78-4e06-ae67-a0dd61307466\n0e0c67d0-5fd9-44eb-aa2e-d736105a34f0\n4ce94da1-2846-4795-8223-b9dfbd8ddd5f\nb4dc9b71-1dbb-4d1d-a9bd-2eff15caf37d\n8ca89c6f-4500-4dbb-91dd-3ee7f929bcde\n1c8546a4-9c58-4768-a159-45a1649c8181\n3db9c90d-7e3c-4f1c-8653-2cbba13a0f8d\nd1b153ba-ae43-4c49-85e1-3ac0dd0c9bc2\n301252a5-3063-4f12-98ba-eed4851b6446\n5b355f7d-9152-43b0-a1b8-b386343b0ea5\nad3151e1-c698-4c7f-83da-3a1c45370758\nee1c7c31-11eb-44fb-b95d-9e4abfd672e9\n1cebee9d-3c96-47cd-92e8-9b792c0ed6ae\nc9de8e86-c47e-425e-8782-b0b0d02b43df\n62b984e4-64bf-4dc0-89a7-ac4c5b51ec99\n4b3661bf-de0f-4b4c-ab79-1ccaf9d8892e\n6e3aa89f-923c-48f4-9fee-c9e7bf8e4922\ne90a321c-730d-4b96-85bc-16fa61c14be6\nee9c0782-75a3-474a-8a0a-6752a5f5b5bf\n093be07b-897f-401d-8d44-64788dbe5b60\n48288c22-db8c-4944-b1d3-9e2b8c059358\n5f28d591-09ea-456b-9d4e-41cbc1e4c106\n22d79e35-7fb5-4b4a-ae89-aeca98649438\nc5895b0d-3474-4606-bfda-af8a182dfbde\nfa1fdf0e-cd2f-42c9-b08f-f0fc7c280d69\naca9d3b1-64c0-4e11-85f5-41f5f7dc57d5\n6c43ce02-4458-45a3-bd10-a3ff4c6ecafa\n98db9d14-7f6f-42be-aebd-b17e691c1cdb\nb8f59639-b4b1-4b7f-bf94-88f2599a4bc4\ndf3c98ff-acd8-43cd-97d2-2db48c781b91\na6ed4a61-0b9f-4e6e-8905-1374a8eda890\n1f5ae9bf-2b5d-49cc-84bb-2356fb9ae252\nd167d29a-2f07-4e56-beab-f294ac24ca0b\nee8b5d44-aad8-4f79-8bb6-cbd67e194eef\n067d738b-a592-4b4d-bdc3-02dbc1c367af\n3b05e764-28a0-49fc-a0ee-3632a8859108\n3313dfc1-f6bc-4220-a387-231f1b2b4efd\n11092ad7-9ff1-4fe3-83a8-81c996a44181\nc70d869c-7743-4a84-a6a5-e731c66f34ca\n03e424ba-1df8-4059-b3cf-e5683fbcd026\nc1a0f56a-dd5b-4eea-a8ec-1f93307c5193\n23d9f20b-5f52-4e10-ac3a-5c09b8567fe6\ne5f9ae41-f84c-4c2a-b22a-9056bd3c70b0\n587a8b7c-8349-49a7-9042-aed905948fe4\n8274a172-2f3d-4f4e-a9b8-438341f54cf5\n312df978-0031-4608-b84e-188c1ff1fb59\n09730de0-1010-487e-9d6f-72124f920dee\n87065016-a65d-43d2-a7b9-3b6546d57365\neca9cbbe-ed03-4265-8db2-cb35de3271a2\n7bca06ad-0681-4dd3-9b75-66155cd24147\nbb1e066b-a462-479a-8a44-c0a0fa4d002b\n4273e414-ad30-46ed-b198-df6b3d53c7cd\n5374d2cc-dd72-40df-be8a-67a3a39591fd\nb02ded34-509c-47f9-b08f-1a47c667ff68\ne78b117d-3ffb-4b9f-9429-b9e82ad20153\n6368c28e-774a-4f26-9bb1-404425d678e8\n86df7175-8300-4291-856e-b2116904101d\n93314e2d-e353-404e-ae8a-94830da4e2e5\n6d25de7e-5066-4889-aead-a260a9364766\ne9b31f8a-1d43-45e7-9fa0-5d4eb15c7256\n7aa1ea93-dfec-4f29-8937-98893c82d2e3\n23c94a06-35d7-4dda-ac62-9169c3dd1d42\n7fcf7a99-56ea-4e16-94f7-95ac12c02b8e\n69c56f35-0f08-4823-8f58-00ec63f08d62\n3b15f41a-e6e2-40e8-911b-a7d09825f82c\n69ca0ac4-3ead-4085-9298-18604fbf5a8e\n9a9688f8-1b93-46f1-8859-cf9b1c2381b6\nac8cea4b-7e74-45f2-ba45-a5e6cf862d11\n78d2fc20-2da6-4bf1-bcff-e0a2d713b311\nda19cb03-eef2-4614-953a-3e3daa1ff0b8\n8b6b0bf0-e052-48e6-a0f9-4635431c3d45\nb57ce2fc-e756-4416-ba78-d73054b482c1\ne65be4ce-9e69-465a-833d-aebf2ff04ad8\n4605495e-e07d-427c-82a0-eee6a0e6c549\n564956da-a2db-4b6b-b166-0aac7c4d23fd\n84858438-88b8-4cde-8477-23bbb4730152\ne6eb5d32-980b-47b1-96a2-ec258f040cf2\nd2165aff-f2d3-418d-ba0e-780f6921b7f7\n1109c51f-e447-4fe6-9153-808763464d59\nfc5fd7ec-aa52-432f-b076-9141521038a3\nb4a74f2a-25c3-4851-982f-b5be153b4af0\nf2bd8fa1-2d21-474f-bb65-465c9ba95ff3\n503944a8-898e-499d-92dc-77952bf8089e\nc8fe7dfa-6746-43e0-8f8d-0a8b536fff9e\n32d9e484-833d-44d7-9179-1dec07e49dbe\n08a506a5-1b75-4252-a8ca-1eb7b2cbe15f\n5f301a3a-429c-4f20-b66c-65b86321103f\n0547050f-b622-41f6-84e6-e794c3303467\n27fc7368-d8a1-49cc-98eb-9cff32c08778\ne19dc1cf-33de-4554-8eaa-3f3c329707f6\n65a5fdad-e80b-4d41-b1de-db1ad2cb7374\na1fb6e0e-2282-47cd-90ec-4ac91616330b\nde19bf54-9648-40a4-ac97-d4785b87b3a3\n0317a91b-b5f7-4bfc-87b9-6fadfecf3049\nf94281a3-72c8-439b-ac88-ae5238af1878\ne86e5f41-606c-4e74-a5a2-a32a83941438\n4521a2f8-0415-4e0e-9ca4-75157ee1a7e8\n8a10d144-b83d-4a62-bb11-8ea5a43f85fb\n79cb6086-20a4-4434-b97c-289115ac51a6\n8da156c9-4a5a-4709-8a63-ef20d16e4e73\na2d981e6-995e-4500-b4f2-fb10ec6919b3\n84f43860-1a09-4563-8138-40a61cea8009\ncd4e3171-6e73-4c17-b27d-e946dd5e6a70\n9f7c8d76-d58a-4fba-9517-d0d9bc654632\nf627cc36-a5b7-4ba7-9607-0b141ef58249\n259105cd-0fc7-437a-9257-4fbd95d5c6f9\n9b789879-953f-47f0-8981-b9d3ad155219\nd97b06e0-a374-4d04-867f-171fe827817b\n6db07e00-aa09-452d-a20e-14923c527947\n50c91f7e-1050-4655-ab2d-dd96cee83425\nc45c5ec5-60c4-4785-96dd-1f199858728f\n77e181a1-9a73-4d6a-ac74-5f2b116052ab\n42db346d-3370-4562-b92c-c14f7f3df327\nfb6cb299-7e7e-48e0-8c3b-bcebb40fbe88\n45d2b89a-276f-424e-984a-411ab3368024\n1e6fa5bf-95cd-4905-b762-e48573c04f08\nf4194efc-8a55-4ee8-8cb0-4abc990c5e61\n94dfad12-1bef-40a0-9da0-b7ba15e1aebc\nde2c41e7-31f7-47d2-9ff8-1b585d2e74bb\n4dc19017-4094-4765-af8e-709efd80e3ac\nf6a35f39-03af-4ac3-926d-859333b50964\ne32e9069-2b5c-442a-b9e8-04d8dcaf1222\nfc9e68f3-18d0-4de7-a004-6f8f3d9ab53d\n3d865b0f-4e77-4ba6-a1cb-a30494fd0402\n633537e3-81bf-4ab4-9b08-f148f7906fa3\n55bbcac6-b696-41d4-84d7-1edf7de8354c\n4a0f078c-1f97-4657-b34c-7cc28c829068\nfb04e3b4-7167-47fb-9125-097c2681fd1a\n4b90d40f-75c3-4369-906c-9dd6df414b81\nb2043c11-705a-4334-94e5-29f692a454e4\n6b3e7934-7d6d-4f15-907f-ffab8c009611\n6f4d8fbc-4785-43c8-844d-bb4d67b53a09\nba9712df-d020-412a-b0c9-8afbd9384c76\nd1cff1db-f765-4700-b34e-bdbf8cf08e7f\n2f5bb011-c08d-4c45-b800-f3388101cd1c\nce82f46f-9c81-4de6-a4bf-a8baa8299511\n0378cdf6-6e7d-420c-8ab9-7ba225f73f9a\n27ddfe80-4893-41df-a815-b08ef909bc4f\n8b556e40-86ee-47ee-8af9-cc920bc76d78\n5e97bb0b-057b-45c0-83e8-e74dec92c44a\n62f6326e-6e9c-46af-8588-b8207156f41d\n01008c77-094b-4278-9b1c-7db8bdd34afd\n466a5466-e084-46c5-b95a-e0deeccb9129\n5abb0257-899a-4100-b714-9c306a2a983c\nf93cce97-ea16-415d-b7c6-a77bcd981fb3\n526f9f21-3ddd-4501-952f-cab10429ad17\na6ec3448-2579-4b63-ba21-9ed9f231b44b\n72b788d8-e565-4cd5-85b1-2d70e26d05bf\n8c256a34-9960-4c16-a8ea-879a2a560f14\n743c6263-2398-454e-8d7c-e5488a1bb619\n5a3a5ea9-37dd-4314-a5e5-c614e628d015\n943f74d3-f283-47b4-a090-180c28dbdcc5\nc651be4f-950b-4049-a524-005ff07f154e\n130507a8-5f85-4b2c-95ce-72cb0286b843\nc66c1e45-f6a5-4503-af5a-e958cc47a11a\n2058f294-1d15-44a3-8d79-d71263413be4\nad8ad631-7e4c-4394-81d3-093f50745736\n6e2b96b0-b9c4-4565-a681-64b41b7d4f66\n0f5a9afd-1a70-4252-b1f4-0a3594d1cc41\n7ce9bc2b-1df7-4a3b-9072-6cee98be2138\n7a2db27e-302e-4379-a79b-5c222669a538\n29422f13-a16a-41c6-b686-5b6d53be6447\n9fffb99d-c8e6-476d-8081-ccfb642cb786\nb0db1aba-2d4c-46c5-9400-7de5f3707c01\n14ed2791-666d-4df7-988f-681b992b157c\n3a931de6-2b95-425a-942a-b7c53f95c8bf\ne4ab63c9-f52d-44aa-85d1-8b5e267eb5f0\n851a544f-d341-4502-9a71-aba3b58346f7\n20dd8df1-cdb6-4e7d-b8b1-c4738fa7d77d\n855a62ac-802e-4995-b3bf-9ebf9f8f055f\n4bf21a29-eced-494d-a4e5-ab1e1cdeb582\n45eb0535-7b69-4c24-b0b5-f7ae741deb5a\n4deff312-8cf3-4d98-9e40-21ca9c6d6ca7\n78687719-30a1-442c-8e5f-00a0242c6342\n47e3ffdc-d658-4e13-b4ed-d3b7c3058209\nad0dd6c4-d046-404a-a790-45db52099d1d\na80e12d2-432e-4dd4-8e49-9c599eb22f4d\nab271d9f-e892-48b8-93be-fbdcad702782\nd5ac2bb4-0835-403c-b26b-0de5b1f1cc7f\n818de3a5-79e8-4393-9482-e4939834b278\naa7f5e6c-727c-4d6b-92e4-95af49a0caae\n2929c640-8e0b-4617-9ceb-16e1e440410c\ne9807493-ac3d-4e23-b5d5-6b8e05cda68f\n9d7524e1-e1b8-468b-9a81-921b29a87937\nb66956b2-7923-4470-9ed5-1b2d70bec8ef\n1c804515-996e-4989-b151-eb61d3cb129e\nd4949bf6-8a7c-4ab4-8d85-d99f203b5de9\n9ec4a7af-bfa2-4cd3-ba04-34998afe6bff\n81dd1d74-4a31-4d85-9155-71721975c407\n73f6c6d4-90b7-4b89-997c-4d8f4d09a705\n9446d779-130d-4c28-bf85-402d30e3eb7e\n4dbd7cc0-9d3b-48e0-9df0-c19abbf014fb\n35cd42c3-8d80-4553-a7ee-6ed3f9ae2ce4\nc5441fdf-dff3-4f4d-a307-f4e66c5745e7\nee915581-ad8c-4e1e-a504-21fe9bae3763\nc21677b3-470d-4888-a378-e135ff7df111\n0974253d-783d-4c8c-8c92-00e3cd08fc95\ne893b482-048e-40c6-a398-b7915f5cbb86\n16368796-92da-4fdd-ad33-385cd8cec538\nd4029ee9-be73-44d9-9e60-dbf49a59e29d\nd2ba7b47-ae5e-4edc-8a20-e03669198c1f\ncf729821-340e-4fe5-ad88-000530c891ed\n68697145-7d9b-4f40-a9fe-57b27f914d6b\ncab455df-bc74-4d51-bd0f-356d209a6b8a\n7e9475cc-a0c1-4aa0-bd99-119f75f513e8\n8a5ff5c3-3038-4dd5-876f-7339e48843c6\n25dbed73-dd85-4f3c-8ce6-dddcd63df7fe\nea2a42bb-a00d-4ffd-bd5e-cb7ba69eeadb\nd551bcbc-a338-4ebd-b55b-8a543f25a2b1\n1dee7d57-ce45-433e-872c-9484fb710242\n06d21def-130c-472b-a9dc-a2ab662a689a\n75dcee43-1f65-49c1-ba86-d29824e90676\n7b8c2e0a-e1f9-447d-b93b-138a4f9331d7\n434f9acd-ac99-4cd3-bd08-5c8b84c686de\n1d568494-8793-4221-9395-34194bf233cb\n8667c71f-a98a-4a6e-ac74-d36bb1bd374d\n6e2c618a-ef49-4d56-85fc-56608dd6789a\nabc0059e-106d-494a-8224-624ca722581a\nca42ab7e-d8b7-4e2e-ad6b-bbaca9dba9ec\n60aec811-28a0-4dc4-8406-424b487cd353\n4c49cfd7-ce3d-4eb6-9a1b-bd27c7a5f309\ne409b5ca-6cf8-4327-ad13-21c85905aaeb\ncf2ae795-df7b-484c-9f69-e7bae0b89200\n09fc78fd-d9eb-4c8e-a6bc-ec8a3bbc3c6a\nf2f19bf3-1402-497a-a8d1-7f8eddc83a15\n8e7fcc20-76d1-4497-a4a8-bb82e246b393\n117943de-3281-4566-b448-8cb935efb501\n8ce460f9-a58e-47f3-a1d2-f1feceeb5e1e\nb2128d92-89ea-452b-b6d8-8493cd23e47f\n66eba21d-1d02-4c2d-9b6b-984b42e182c1\ne152b5ea-2e6e-4683-8649-5eb20c7d1db7\nfa3a0ebc-079c-4370-a214-ba00e7f29742\nc2d16ff2-893d-495b-bfb4-78b3426446c6\n1827cb8c-8cdb-4e3a-92be-5c9ebb0bb202\n45eaa118-de17-4f4b-86de-6dd950253861\n969fab93-3608-4dd1-9f13-2e9016ea2810\n4330409b-ad85-49f3-867a-ee7412ec0405\n941f4433-3018-4cc8-9070-1bb960cab596\n2dbf7737-d812-4c94-991f-752883904827\n7aeb7795-f42e-48c4-a9bc-f3c36b16a558\n98394cce-de2a-42d1-a217-f8a108e42608\n66d84ccd-ba52-47f0-b132-ed83025172ea\ncea24c83-d7a0-4540-9d3f-d3ddb20b6336\n8aff05dc-a96b-4d17-b0d4-1cffab277975\nc2e1fbb8-79a5-48e1-99e3-3f71ecb8b514\n4f3cc074-1c8a-4330-a3b8-36ebd4f20a91\na6e7119b-217e-4b58-b859-c03ec6cd8dc1\nb6f4a4e4-5222-4130-8173-5528f6442fcd\n4a2a2e71-c986-4e86-bbab-a7ee90a579f9\nfe0d4103-b366-41bd-b0af-aeb5a17d2fc2\nbf3e7b8e-dfe8-4f55-ba30-a7ebba3ca7e0\n1ae33969-bc83-4667-9a45-44c43aeb5ad6\n33f6fb43-95a9-4121-a512-e45f2bf81a30\n2fe84aa9-d469-4a2f-a03e-7c953b1930bf\nb4451605-7d68-45b3-96c0-44b1a245e192\n4f65f530-3cba-42c3-b396-54e76471d04b\n496cf346-229a-4d85-929d-ee5850ab3a8e\n55bddfc0-7cc8-4bd6-9526-6ee173a9dee9\n35c5b0c0-5b70-4608-8856-83d4e6a4c82e\n9933ba0f-3d9d-4574-829c-d8146d2ed959\n75c2f649-89a3-48b5-86ae-8e665bd4b744\n24f53bbf-755d-4f7d-ad7a-794b6ff3c963\nfc89c393-8803-48fc-9915-7ecf0f9809e8\nc43aef64-9ea2-41f5-9f3f-2d0e7874183e\nf091176d-b37a-4dde-b358-82df27b60db0\ndacfb8e3-3509-4274-9925-79a26f3c6355\n63e75801-6f66-4fdf-9c5b-658baee8d2be\na94d7094-6381-4199-967b-c446d10e5958\n4e6c924c-922f-4006-b74e-32451512b669\n4f7da6a9-ebf3-41c4-bc98-27783002263b\ne8957f88-bd70-4687-89a7-f7b0eca85783\n260887ba-767f-4120-be5c-46c8095b03d5\nce385f66-774d-40a7-98ac-b48e5a70b5d0\n4796670b-3e29-4c15-bf85-387403c6ac6f\ne2ae6c8c-8005-41ea-bef8-45bab084772c\n488333f5-61a8-449c-b5f6-6e1fd368057e\n53ea817e-5e2d-4ccc-b4ef-3990cebfa05e\n5d999085-215f-4d23-a395-78bf2555c1f8\n3f32b5c0-ae25-4ff3-a382-668aa8e97d84\n3e0d9200-bef4-4942-834f-7efb65699755\n47116ec3-e05d-47bf-ad4d-8ea031381449\nc5813bd6-006c-4581-a89d-2864da8bef4a\nb3e05787-b01f-4c66-8b2b-15e473a92751\n532db8a1-67d7-4175-b69f-26b4faf4d554\ne67ae997-1e6b-4aa1-a00d-d3aa9ffd5795\nd43d0295-ab2f-4e7a-a30b-c5127bb9b9db\n833dc00d-4489-4a62-b387-c7ba3c40af74\ndd57ea6c-2736-4264-ba6e-5f7d135f707e\n2eb8b3f0-7bd4-490d-8da1-76b8a8ef900f\n7d449e18-3be4-4ca6-ac04-e367646d5baa\n234f4fad-8c36-4857-8d6d-e2298e7a47f5\n1eedae62-d7f1-4c05-ac02-add54233a818\n364565ad-fa04-47f2-ba63-0141110819b4\n14f088ea-0c4f-4393-b44c-1df046dad841\nabfc6bcd-4b30-4774-8292-08787559d64f\n15b25f35-9ece-4922-8fce-8f1208d692eb\nfc32efe4-4fab-41c2-88f1-0a66cc43f02b\n3c4563ff-7eb8-4978-90c3-150d76ac6983\nb7b0cc24-c109-413d-8f52-02e8d73d59d4\n17165500-c522-4951-8d9a-a6006f6e4ce7\n07f92986-32bf-4159-9126-ecbd0f9ea09a\nd4a51ee8-2a1d-4ff3-98c0-a2b571c936af\n02087f41-bf9d-49cf-b1f5-5a8ea89e3f6d\ndb8ce00d-f0f9-40eb-96e9-c99a54dac6aa\n27ff953e-50d8-4073-afef-94b2ba038f32\n679b9921-49e3-45bd-894e-135faa793820\nc3293712-a177-4399-a0a5-a7f710ce8e9e\nfc50ae58-3006-437c-96e3-165613fcd026\n6ec61199-86ae-4b5b-85be-13837352e5ec\na93e001a-4bd9-4d36-af4e-be5095eb5f4f\nc2de83da-c1c4-4e5e-9d76-926f492cfd6a\nb72b27d2-4ba0-4bb4-8c2c-fcf2c6dd04c0\n01351381-9fe4-4ccd-b39e-08c2b47096f1\n503b5024-222d-4b11-a2ad-0dbc85089352\n931f8d28-bc8f-4b7f-86bd-d4e5e4c62d49\n2795a9f6-e9a3-4843-87fa-79c8ab22daff\n0ff61e8f-8edd-47aa-8772-1c8de108aea7\n2bb5c2fe-9d3b-4906-b2aa-eae7c9d8042e\nd8edad24-800f-41a5-887b-c4021ec36b58\n70e6ec36-0e6c-48cd-8f1e-36233b9f09b4\nde813758-62e5-4a9d-919a-da3381cefde5\nd4718ffe-bdfd-4fe9-8c4a-82e0fa401ca8\n21d29997-d841-4873-836b-4d2c7a740011\nb7873e36-cf57-4da9-95e6-dc1def92c8b7\na69fb858-cdf3-471b-807d-ff608a036f1b\n0f91c3e9-331b-46c8-b86d-c1de0846c39f\nec40b095-9c1c-44e5-aab1-6718cd9fc876\ndbd415b8-ed70-4370-9d39-f15242a5b645\n08d2b923-24d5-4226-995b-d65d4feae87d\n7a98669a-c77b-4f43-b30e-6b07aa34b663\n51f4459e-7321-4493-9b9c-8fe1cbbf2c15\nfb0f2eac-a166-4360-88a7-1f5fd82ef265\n8b98c338-3c85-46df-a9ed-c110c1a680da\nc9849ddd-a7a1-4a4b-b4e0-1f09c9ddb308\nc997c5d4-4f2c-462d-b9b8-259a32647142\n4acb5e98-ff74-4f70-bd5b-f19d8c95aba0\nc495cee0-5983-4bd3-b8fc-6acfac754343\nee16703b-8da9-4d1c-adda-76353cad8e07\n5872dcc1-6d1f-4092-aaaa-f2bfce358ee2\n9dd62c26-c99e-4c69-8346-3cce395fe304\n22fd8e2c-aab4-4416-b246-c6ddba2e625c\n900a3342-7ac2-4d12-a8e5-6e2b5a290b4e\n9e9a349b-187c-4d9f-b035-7413e8ef8f30\n24f0074a-ac65-4670-9a4f-5997f5bf28d2\nef783ab8-b74a-488f-a5cd-1bf071148e2d\nad254fb4-2bff-4bf2-a33e-2e4759f4047a\n4e371a69-a358-4306-a87d-76c64785af74\nc53854ed-455c-4003-b746-196680c9b89d\n3f1356b7-0cef-4109-9f97-82fde5d20dba\nd556e778-1591-498f-b836-7e8359a6a387\ne8c1f54a-a263-4e36-b91f-14b2280cf060\na45c0e45-507d-4467-84af-98674b1a46b6\n3d33edc2-e9db-449d-b8f7-bd5f180617fa\n89db461c-4ae1-4d13-b59a-a603f9e25e7c\nf3b57d38-512e-474a-b47d-02a98a6b16c6\nf5971488-0712-4c39-a519-ad52276ab296\n98a68d6e-0add-42d2-a3ba-13e99bd466ae\ne8697e78-f03d-49d6-935e-486103d9474b\na49bd47c-53a7-48cc-8aa3-525509942c7b\n343b9709-c9e2-4704-bdc4-281b2e2452c7\n70ab5d7a-cd2a-43fd-9288-ab398f0fcaf9\n47098280-c018-4882-b7e4-a0bbda3881b7\nb332f01a-0b27-40bf-a124-98651ed2d7f3\n7dd62d8c-8afa-4dcb-9bcf-cb4aaff2599c\n0ed34bf4-4e5d-49ad-9d93-2c77cb64f5a4\nb3c9aaec-e955-4f4f-8803-cdef9471370a\n3d44dbb7-0343-4d47-a04f-eec1fa8dfc31\nb3a64770-da20-4bb7-9089-f97b71ee1a1c\n66e0561b-18a4-463c-8a36-f06dc98df3f8\n240750cb-5c0e-4416-a159-2e21e0bb89ce\n90e1cde0-bd37-451c-bb1c-42be5c470b16\nfaa5c5ca-9a65-4e73-ab6d-5c9c9f4ed8f3\n46a19570-a25a-4328-ac47-b9368edcae74\ndfff6b66-dc69-4094-acea-4999d2e64fea\n656ba236-2322-407b-869a-cb5ca50642fe\nb076e84d-5681-4c99-a3ac-22c9d16f0915\ncd740877-f5d4-412a-abf1-a5b7752e3d11\n3b0ed34d-84bd-4fa4-821d-cd903452339a\n85a5c785-c539-47c7-9bee-fd5d1ffc40f9\n336db668-fdc6-4c4d-baa0-6fe05b76771a\n8d7ccf8e-bc0c-4ee8-8523-288194334e22\n85a1b24f-e760-4718-88db-5d9f6a5113ca\n6c307486-376a-40d8-9b64-6f98c603ea08\n40d9c327-2a51-4030-bb8a-f3fb1c07f8d6\n8ea75522-ac4f-4c41-855a-c0b6361dea5e\nad40b0cc-ec30-4e8f-99e1-527edae45f42\n6df24992-5ccf-4128-a908-32137f2aff95\n602da089-7965-467c-b8a2-5e9df42ef95b\n9f4100bb-8d15-4477-9c21-24823cff244d\n24dce15b-65d7-42f9-9176-57d7b39760e0\n3b5cedb8-94c5-4e1a-a508-b503465ed091\nc72bcb15-f3ff-45a7-84ea-98adc8eb56bc\nc34cf1ba-beef-4587-961e-7a1c113edfc3\ne749316f-5b56-4ef6-90fc-757ee60f995e\n3bd17fe9-24f6-4aa4-b0d6-af4a9320525d\n6c26bf4e-c170-401f-bccb-6d79fdafe615\n52ae9e1d-d611-4108-a037-7dac40acb431\nd0bed3a4-6231-41b1-869b-8fa639036813\ne4f4809a-40ec-4b79-b8f0-dc1c42a77cc7\n332b8283-9bcc-45b6-b633-bcc4e8617547\ne889b4a2-f2bf-4034-a462-7969e675b258\n62e620d5-3aef-47a0-ac82-5e1dc657eb63\n8b4e2126-50bc-455c-a75b-27d458b72949\n9984c030-7303-421b-af38-f8ac35f2412f\n6a189d99-e136-44a7-a67c-e63fc3c459fd\n04d8c58f-a019-4e0d-98bb-8b08cf9e4ea2\n86560f49-2c3d-4506-8d15-3340c5446231\nf0392aed-e3ef-41c7-a8ec-00d5146ad90d\nff86c4d6-7e3b-47ba-828c-ead3ec833d65\nf9ab4df1-b8a6-40f6-bb29-0a00695ab3db\n45ec1d1a-5964-4fb5-a5b7-8d88566cc152\n56cb3762-0f13-436b-99da-f074645e8320\n873b13f5-676c-48f3-9eab-c3529dfb5b92\n1ac500b0-3bee-4eaa-b802-ac119a2cbede\n83faedf8-e326-4467-93da-ab4b01fe49e4\nffaea347-bf2f-454a-be84-d130aabb8173\n4aaa9572-2458-4541-be7a-77ebbe4ef47b\n26ca5056-80fc-455c-8b8b-4a569c2021d7\nda502aa6-de12-4577-9fa3-f87b0136d4cc\n96d4fd3d-3042-46e8-bf63-626eecc828e9\nb811f0e5-718a-42ca-b0b6-01c776ade5bc\n738b76f1-f234-4df4-a164-8db2e1cfc117\ne900a2b1-5d8f-4539-80ed-14453389c820\nd390fbd2-c893-4062-97a1-af55ff5cab1f\nacab9ff3-cbef-4671-8167-36cbb25f3924\ncd1b9e84-094e-42db-8864-4d000ef500fc\n14510e69-4ec8-4716-9960-e6a979a88214\ne9534163-00eb-41e8-8bc1-d82e5136cc42\na767951a-6982-45a2-93c7-3ea7307b1358\n041485f2-dfef-4698-bb31-18877a73b4e8\nd3beffdb-bf1f-48a7-a7c9-7a9695277f34\n5a86003a-6259-4b6a-b310-f14f2b5d2c6c\n61c12fbc-5da6-49b6-96b7-2b2587b87df5\nd61b2a45-8c91-43f0-8b6f-869a353e7130\n7f7e1c67-9911-41dc-b230-12ea95a55b67\nb9cb9b09-23d3-48ef-bfca-948553a006ca\ne297edca-90fe-4d2e-b861-06f20f5e94f9\ne1dc5c98-7d6e-47d3-b077-f87c37290335\n9794f843-0cd2-4b30-bd66-e519c30df10a\n474c0c7e-ddc0-41e8-b329-04c2491f6922\nbc7f3f27-a1da-4415-9938-22a12504baea\n984a5850-2ae0-46b8-9827-b109774e442a\n358a1c8e-8c3b-4940-a3c1-dd9721c9234b\n37313dcf-f9d8-4504-86a4-c50b64d55def\n27963fb8-d123-4e2d-a5c6-fa8ece7b9dfa\n9c722e9f-3046-4917-8fbf-a3ba48ea1f17\n7baa0481-bebd-42a1-a4d3-8ad9c9983d00\nc888d379-58b3-47d5-9cee-15670eda59f2\n59c472e4-4191-408c-9e79-8388331c202c\n66fbca79-ab3a-4130-bdde-ca874317e9bf\n6735dd78-e31f-44db-a381-1e8669bfb47e\n1be9906d-9b71-4d7a-9eee-c9412f1712ae\n43fd9abf-60da-4387-926e-aee638062dbc\n885ed3df-4ab0-4d74-85c6-74d828ed5240\nb9516774-036b-4a25-87e1-d945946bdc89\nd6bac3ac-baf4-403c-9a66-db632bab83f6\ne6f853c9-0753-4e0d-80e2-316e33f9918c\nd0d19063-0219-4fd2-af90-db862b22601f\n2c58f0f9-6b23-42e8-aea0-e20a1f4ffcc9\n37ddd112-7c4b-4911-a067-581b18fdf2da\ndec53665-881a-458b-a1fd-4eca5547c704\nc523b3c8-2b6e-430b-9aa6-4eec68b13f32\n78fb2c73-df25-4fa7-8c77-70ee5e6381f9\n3158abc7-1f57-47c6-9263-d2d7e97f97b4\n5d17b915-4829-4af0-bb9a-e1d9fc9ebe30\n60e509d1-b74e-45ea-81d5-e5ce2af07384\nc38df7db-6222-48df-a929-05964037c44e\n6ad721f6-70c9-45ce-ab52-ada95de26c17\n355fe7d7-0058-4b66-a134-25797479bd2e\na24ceb94-942e-418a-85aa-ee60024b2664\nd6c7e98c-8fe2-4310-b194-776d2de94b70\n0b6b9d3a-d294-4bc4-9fa9-838eae323cb6\n89572b9a-4114-43e6-9e9a-6628dc59c303\n95ba8d88-de5b-43b5-9638-149d85e09c6d\n4567db69-8065-493b-8b96-26c7f7ddd18f\n0a43fcd7-abea-48eb-a0df-717a421fee7f\na9da5df7-adef-4072-bf41-e125de0eba06\n95b7cf1f-75c7-4de5-8c7a-88f7d1800c51\n57c24d5b-7a6a-4568-8eee-c13855d89f51\n9efe1bff-e75c-416e-958e-3aa5b0b8cd4d\n1977e855-1de8-4ee2-ae2c-c1dcda351dc1\n2274ce76-6b41-4d6a-a2a7-ca1fdf6b6de0\n03d17a6c-f258-4dce-8bcb-bb094cf1b952\n3c84f909-7b44-424c-97be-aba7b03d1f25\ndc9c81ef-f434-465a-81b3-ae89524fcd55\nfb331ce5-fcf8-4e6f-a141-aeb19971c0f2\n48c94433-8643-4cda-ab84-11daf0d09d44\nf1898e6a-4d31-43b0-bc52-317af4bab1d5\ncb1a1253-47d6-4338-9d4e-4c71361b6a67\nb48d3a8f-aaab-4f23-8d11-2884d13fdc64\n7447e0f5-fbb4-4685-ab61-86b71f86ff77\nb6a011c3-1a87-4d7b-bd0c-d5c08b06f5a3\nb34715be-a970-4537-bdd2-092271944dab\n64f2a0f4-5ac3-4905-b435-94bbd6829298\n1146c8ef-b80a-4c17-9868-eccaa7f1c95b\nec2b1131-0e12-4c8e-bb7a-3fd61edf7af8\n8544a46e-18b1-4edf-9dca-cd5f3678f65b\nd364341e-5d18-41f2-9fad-f92dbfdd6c31\n7e5c07b8-fc69-4386-b076-e775c1c22ee9\ncc7745e2-0508-413b-9b63-bae372b49f8e\n48547536-e8aa-415d-82d8-3d02b86fa981\ne7364b04-b18e-40f4-b43b-0b376f7c5d51\nbbf9c006-72f6-4b17-bd2d-7b61d9f0cdf5\n5176b14c-85b4-4318-990c-d79e0538e54f\nb27c62e3-bb8c-42df-bb09-71674eb05d45\nc5ae9de6-5386-45db-b89e-6d0736683e70\n2c463e18-5798-453e-ab6e-2225a7de9b1a\na4be5e06-83f1-4c2a-b6e5-02e397194850\n1321f842-61a5-47b4-b578-274a7c3eb128\n4f5ec840-39e6-47b8-811b-b00f3114d5a8\nf0c76828-dcbe-47ab-af46-8ba04450a48e\nd5ebf13a-2cc0-44ba-914f-555651cb7be9\n72ab7260-d00f-4fde-b318-1355c30acfe4\na66eca96-900a-4614-9a5e-b79e923ccc52\n27609e40-7f85-49bf-a450-fe7959388944\n9a63e85d-14e0-451c-9198-19a1c301024b\n7fe53c99-3ab3-43ad-b9d5-f7aed048e9f0\n67f4df95-27ae-4f40-b150-9025963676f6\nbf9afe9b-ffcc-47e7-9af0-4c889603a42f\n08122709-3b07-464b-bf0a-1128c235bbcc\n18dd34a7-628a-4358-84ff-fc7cdb3f252f\n9c8453db-94ac-4377-8d9c-c1cbf81bb247\n79ddffec-fc75-491a-a051-9b832d519165\nef188e7e-656c-4877-acd1-5f300a9ae806\nede11d1b-5561-4ab2-8e44-4662cc319459\nd4cc7917-3d4a-4ec1-a051-65fbef4d4f35\n70ecf03a-7dc2-49b4-a31f-f297a411d0b5\n6bab9061-b8e4-4b87-b467-7f76bf61671c\n4b97041a-8f10-4923-ac25-91f7916f4421\nf53ad909-68e6-4be5-8d7f-3ce9635a3f98\na709f39d-9a44-41a2-8bf8-6eac6712652c\n140d9416-f9b4-43ef-84f9-6587e47f3789\n4451ee35-a473-4450-9af4-42e910d4cf0d\n48f233ea-20ff-41c4-9f59-cab0964b4393\nb3ff47bf-4a5c-4f17-afba-f4a588f41e78\n8011ba8b-6e7e-45bd-aef9-b09fb3dd2a79\n81d57a79-4b83-4814-b8fa-297dce5136cd\na062432c-c51a-4ab0-a55b-cebfc532dfab\nfed3a0a8-374d-4780-b48e-1c396cb8fa48\n612dfffc-8f0b-4384-ae15-fa2b0c8005b4\nfb64c4ad-ffd1-46a6-b91f-cadc257aaa02\nd0b3fd7b-40a0-414b-807e-c45ecf6dc1b3\nc6d78c50-98b8-4f8a-85d4-e7c67e7077a0\n018d7abc-8d5f-4427-bd28-6b1ea6e82fed\nacbe8516-f756-4ff2-92c7-1da735814515\nee1977d0-2ed9-4bae-ac09-e3897e80024b\n3d1348a1-60ea-4e21-84be-1f34ad5d0cc3\n6e1f68aa-0c51-4119-a8ce-1e6f961b63d0\n3e55a4d4-deeb-4473-be99-fcfa82277e1e\nae78bf44-68ed-4f4b-ab5c-a8f9c1124727\n750d175d-efdb-4126-92d0-de8899d77cf8\nd1724647-6afd-4a02-a1ba-395bffaa30c6\n20cae8b2-9fb8-485e-9804-d5a11ba95095\n4731536f-fb0a-4488-b0c6-717166f3ed83\n9fd96019-87f7-43ee-969a-e2b3c79aaefc\n4d22d796-1f14-416e-8c75-91bc79041a5f\n2eea5ec9-12ba-4857-a497-12b385278218\na346fb7d-9c2d-42a4-8b8f-a21f1bd0913a\nf6880feb-213a-4360-b305-3a90a7c68721\n39ff8be8-e2cb-4536-a4f8-369ce16413eb\n6224e190-e260-4f71-8902-8d6f1447eae2\n43a5f4df-011a-48a6-9307-2666a8240218\n5f5bbd11-352c-45f1-94a1-f7620015f318\nd61aa5f9-75b7-4b81-9b72-021ed909470a\n5651dce5-dffb-4d7c-85c7-5dc449ebdd0a\necb20c24-03ee-4de2-b299-e64608d4451d\n808861f5-c337-40b3-9dd8-ed37d3595163\n6fb90654-46cf-4a0e-81a2-3b271073c9a4\nf04156d1-db53-42f5-a43f-bef30c946d0a\ne133b8f8-3388-4f46-85e5-87569fccc52b\nfbe49a6c-65e8-4976-8d9b-884bd711a25b\n56f8817d-88ea-4971-8e34-4cf5af6fc438\n46b33ba4-ad2b-44c9-9ba9-0a4ee99991a3\nd84825bb-c7d4-46ff-82db-5293085292f1\nc0ae1b14-9304-4197-849e-27ae7a47b876\n78c44dd6-fd0d-4013-aa8d-482e7bdfc4c4\nc9e3f85e-b6b2-4e32-a41b-621899061045\nce7b1d37-c792-48d7-9f9a-c59ee4d48c27\n88d8766d-0f14-4782-96f9-6bd36964182f\n138c2b95-aa27-466a-96d4-629dc251abdd\nb58003bb-2fb5-45c2-932e-42b64c4c6f68\n0fb3347c-e267-4e01-b342-d9a06a10af6a\nb66b74e3-ff78-4ecc-8a8f-666f3f334fa6\n406373d2-789a-406c-8af3-dd55d1016cf6\n8ae07ab3-cf1c-4d96-a7fc-5f199622da43\n45a64bcd-6131-4ec8-bed4-a6d80bdeaf05\n25dceb38-96fc-49aa-893e-9553cc6e32b6\n9f1b9a66-8360-4bc3-a6cb-aabd4f29eea2\n535c1f89-36f3-4720-bfca-22fec3a77fb3\n035628f9-85a0-4328-95cb-339ba292e6f8\n91e188eb-fdf4-403a-b602-8cc020fbee25\n84b6ef66-0381-4e6b-8794-4c18542449b2\ne78b7854-a444-49bd-9bfd-9b19e2da6b00\naac05136-d818-4309-8529-09cc8e8e5e90\nda5e790b-6916-4f07-b180-a079e938eae2\nef210d4a-4ac5-4a2c-9ee1-9119c41f9e45\n8b214df3-b4f7-4ab9-9386-154688f4fbbf\n06c6bc4c-28f6-4785-b079-35df964a7e11\n67eec3cc-28c6-4544-bf9a-249199828466\nf99bcb65-a076-4bab-99a4-f045f73a666d\n5f142ca6-4e8f-4952-8025-fc7d125761a4\n2641a564-ce00-49d7-b6ce-5e96d6ffd38a\n6edae238-27f8-4c0a-adf4-a567bb8f153e\neebb1502-9910-453e-af4c-b285817096d4\n86b5ae02-e6a7-4de3-9fad-5d4550dac31a\n73893809-9b76-43c4-a5a3-b1f4240231d4\nda17fdfd-7269-4289-8b63-65148a57463e\nc4a23230-e199-4b81-810a-ed0d2fbc40df\n61a0e746-49aa-4b66-b354-856c2fab3a73\nadabce4d-d746-4500-88dd-80e3a47ef368\nd4325802-b7b7-4a78-8425-ca8e3f9eab5b\n212bcaef-3c8c-4b08-a250-1e5c96bcf969\n24dcf5f2-efc1-4875-9a90-e4541023481a\nffa7b0c0-85f2-4707-89ab-d0218593c662\n82ef175c-8bbe-46ff-8787-9318cec8fafc\n70d1eeed-d839-4065-bc73-99223e31505e\nbc444ab9-03e5-4f45-b4c5-48d5dec888ab\nf2b66922-ad9e-43aa-877f-194cd1a92e61\n3db9b010-2899-4975-a7bf-b58cf596ada3\nc8a7b717-c323-4276-82f7-8a3b460675fc\n24052b63-0869-4cc4-bfca-d7daf27221b3\n437a880b-6215-4229-9d1c-972696e82b19\nafc8911e-8b87-44f1-8b5b-44ea5d6702d5\n0c980aea-7665-4c83-beb3-b03f86bacd6d\n5de53fd7-56e3-4789-a0a8-0b680cbfcf86\n705d4826-a9ea-464d-9439-d7328b534249\n1cb61b50-a110-4f89-a563-5b4f726035e8\n3ac091bf-e3b4-4a70-9f85-6de7e69e87e4\nc57688e5-978d-45ba-9971-8332505d50db\ned3f287b-8967-44f3-9c40-f581753afde1\nc73548e9-3029-4062-be1d-b4f0f33a95ef\n6ee22e1c-8293-4b43-a92f-c0b5fde83217\n99141062-7a1f-401f-9f94-49059b96ed84\nb0840fb6-36fc-4f30-ba13-4bd9033da247\na1029593-23de-49d5-9fff-ce9136aa0af5\n0e17bd45-0111-4717-b653-86e5a0f20282\n16e30e21-c1c9-41d4-99e7-9115837d88c6\n7da5d3d5-817d-4975-8ef0-4589c0b1cc71\ncb03c905-74c1-4391-b316-2dcf3242ba6b\nd28a4208-eda3-4851-b269-d5bff2f350cc\n8e1ebe64-0fe8-486e-943d-2f9314b90508\n785b5011-7307-458e-bf3f-fec26158094b\nf6ab491c-6499-46ff-a46f-db2164f30107\n06aea98e-95c0-41a2-8131-e33092b957c9\n77bc5f77-f1be-4157-8937-427f1768ca52\n19760e88-c612-4acc-9bb2-2c93f158bb61\n40338026-7bdd-4e10-b9f3-b77a66ad4a8c\n1dc26134-da2e-40e7-836c-0c0cdde76248\n00527b3f-1e89-4686-b0fb-8d5f2c0689fc\n095e3a8d-cf20-416b-bcc6-f54efd3866f8\na735f034-2ea6-4cd2-887a-4042fa29d1d0\ne3099d2f-37f8-4706-be7f-8854ecc78a77\n1e6ceda5-a52c-4af9-a098-839e362e24eb\nf4314ce4-6295-4a0d-b18d-c34d60d83614\nf8896728-7936-4d4b-b5e0-6f2460e02a95\n7a98dc41-dbcb-4a1e-bcb9-841823b3ec2f\n34ac2219-b5df-4471-8ad5-e9b8dad79187\nb4970e0e-8283-4394-8acd-e6dfb753bdec\nd191cf56-a97b-43b2-8867-309f1c8660cc\n7661b0c9-80cc-4758-8e10-23503f063ee6\nb0a4c2a2-7126-4911-8f92-ab77ddd8e61f\n5f799f30-6755-43a7-8cad-cf9070e5477a\nb3238879-eedb-4f73-800c-d389c7d955a5\n778b3590-afb1-450d-944b-efa00188ecd0\nbd58095b-5829-4a15-9be1-16814e476de5\n57050d21-5f1b-4705-8015-8df397dc10bd\n9a617a0d-661c-4014-8930-be6ae6933235\nb02df8d5-91e7-41ce-b13e-c177b15b1faa\n6a63c9ff-fb35-405c-8710-a856250329db\n270c9fbf-fbc2-439e-8cd5-477426f0436e\n1081a0dc-27a7-4d1a-960b-d01c8d0b9990\ne1b5f961-4875-4c84-bd02-c7504df58ba4\nbc756723-69d0-4303-85f2-a68fbbdd5bda\na904e457-f175-49ee-9f1c-6b58bd1100b9\nd64a1999-64e7-4057-9989-e66431e9d7b1\na0c327aa-6e64-497f-babc-e190c9d3332d\nbae650fd-f631-47fe-9298-0bf88c89be10\nf855e0be-073a-46a5-adfc-c6d3bff74ae7\n21d20182-5ecd-4f15-af9e-b8edf9815aaf\nc6667b70-837b-4e35-9818-6db27d91f5ff\n24779e5b-4c06-4135-bb48-692691f59c70\n7a774d62-74b2-4cfb-8397-e215e0806d42\n3203005d-0e26-4c9b-a967-cde4401347a8\n708c968e-79cd-428b-abcb-fadce90c3819\n569f654e-70c5-4f6f-9b79-bd3217fa44a1\n60305bd5-7d58-4985-b799-33c672cd1045\n3f7d2dd6-c532-473b-90d6-92a4c0995aef\nf45ceb03-9f42-47c2-be49-2414bae750bb\n421170ec-d272-4777-9f32-365c5b393932\ne4c22789-af0e-4529-9516-c759d000d715\nbccbf5f1-a748-4d35-a214-392f7df5e86e\nefba84a4-77fc-43a7-8321-1994bf87f2f0\nbebadc13-2e34-4df1-a47e-f710d3fc91f2\nd50aec5f-11d6-4d57-92f2-8948913160dd\n8abbc66a-875a-4633-a716-a199c20f2c4f\n42bc679d-0009-46ca-96bc-e001313f6b55\n98827c66-b3a7-4df9-ad12-2777dea67e84\n4113a5f5-2c02-42ed-a79d-cf6c7a3d2f91\n3ff81fc7-300c-4f89-ab30-b6fc97673554\n171e382f-8001-4ff1-ab55-0cb228d31c3d\n28768710-3477-48ac-8d93-1b7af5a1cad8\nb0a16431-afa9-4622-8e05-ce35ee858962\nfe71a50c-91cc-4059-ab82-ecc9257b73b4\nc7720f6e-24b7-438b-86ec-309d8ea8d9cd\n7ecc6d01-d3c6-4e3a-9b5f-f21ad11c426e\n6cb82bb5-2930-4bef-a04f-bc91e4283ac3\n74c272ee-70ee-4417-8e95-150eb21db3b8\nbcba63ee-b7f3-4cfa-a546-14d4faee05ea\n1f26e9d5-dd19-4383-8c80-38d15637c1cc\na082ffe3-eded-4bf9-84e0-d3349b4735b9\n15a00002-219b-4bcd-8a40-36930d133524\n7304003a-fa9a-4ad5-bb12-2ded8408a24a\n93b85c32-2a99-4d9b-9c99-30cc043a85b6\n0b49dde7-15c9-4a05-84cf-509f6dff258f\n03171be5-d945-47e8-a31c-7450f496fe5c\n1c688e8a-cb14-4a9f-ac59-b23d82303f2c\nc84d985e-d036-4885-bc58-68e67287617b\n182a5684-501e-4297-bde2-610330c76fa2\n6b03a162-d3e3-4898-ad1b-eebd70d436ad\nb825c03c-8a8a-47ea-b94e-194f83c19fdf\n767b549e-8bf6-4c21-9fcb-8a2c2c1cb6eb\nb6b2326b-b29d-4b16-b354-433af5cadb93\n9d76a82b-147f-4a46-add9-e19d0ce8c0b0\n94860725-d2af-4f85-8941-4f0f1f1e9074\ne517b849-0ca6-48a2-961b-3adb7e7570fc\n56701fbe-bc15-4f7d-9915-b2f2562d0120\n48370a7a-3a56-4b31-a563-dd6e00432412\n342edb52-b12c-40dd-8ad6-a1f9d356ce39\n09370c68-db5e-4974-ace4-5868a81683af\n9ed8a129-56c9-4ceb-8311-55be7af2a493\ne7fde7e6-045a-446c-86e3-6f0eaaf7c3e3\n2c02708c-ff31-40ec-81bb-7afb4bd68cfd\n1dec0569-f3c1-40e5-9838-bea8a45efb68\nef5bd53f-572a-43dd-9012-7b0dd4b710cf\n36f770d6-41ff-4802-bf42-09ccd2b27b24\n9d626df5-57d7-49b5-ba3c-8d5491db2249\n821f14a1-bb26-4358-b11b-7d67fed28c74\n94d31ed4-60df-4323-a35b-c1d1a596d796\n67746860-ef39-4df2-9ed9-201b6c7bc2d8\na0748be6-a864-4bbc-8042-f4675cd281fd\n44cd6e1b-be73-4244-a799-bf19bcf1f028\na1d24949-7353-47ca-a63e-4c4f5eba651f\n1cde745e-6bcd-47b7-963f-a835df5a40ef\ne981187f-a087-4baf-8d76-71c7281406ef\n8c7b014c-9bca-4590-85cf-8299fe0514aa\n2a67e2ac-4349-4c70-b22a-2dc3b61778e4\nfc2d1db6-66ed-40b7-9abb-3203d6d722fd\n4b3886ef-feb7-450d-b0a8-184889e3fb18\nb6f1a651-f3b4-487f-b376-ef492f391987\nb5146eb7-1451-4714-a187-250121fb6c9d\ncb9c7ad1-aa0a-4af6-b5a0-5e04249b6ea2\ncb92f949-8da2-46a7-bebf-41f1d5789073\n08e1cc47-2247-48d0-bc0e-65984d234c1f\ndaf6dfe3-abae-48a0-a7fe-706c487ecfc4\n0c4ea944-411d-4f28-9486-ce7ed983ce33\n6eb6475a-70e9-46cb-8607-c2df77f29cfd\nefa3b22d-ed33-4e38-8726-33d363f0ec14\n391ecd2a-a023-4457-b336-3a4dd2c81612\n8fbf6f56-7a3f-4777-ab3f-57e4829d91ed\n31cbe726-b738-48eb-b5de-4c51a6fdd38e\n7a5406ea-acb2-4d65-a52f-f32c1b5a7dc1\n439c3f8f-dba8-42a0-b85e-3e2938286d5e\n11243b90-564c-4821-8a4d-fbcbdef0e09d\n218d561d-3092-4305-a348-d24d276508d4\nde60c4f5-0abd-4564-8244-aa7d911f9894\nb66b7fcf-cd89-45ec-acc8-39dd479a4e43\n77e55054-a55b-4307-b62f-8086305b2485\nce0cc6ba-bde0-492b-bc40-9093eea3b308\na10a6216-06b9-4d10-97a4-ec6655defd48\nb1a9dff9-4215-4103-88c0-f2b12934f167\nb63e73b7-53bb-4e9d-b135-e5a359b39eba\n30743be1-28b2-43d6-b6ed-61559260039f\n7511e0c4-b214-4c27-9959-f9d360506d87\nb5c97c05-626e-4402-b6a1-05c9e20887eb\n8163b0d5-c149-4585-8547-a2eddb505fcb\n9951179c-1b8d-4c17-81a0-fb2e2a889c69\n7e4bbd23-e23c-40bf-99e7-dae482f20f59\n1d8dbe1c-1ce9-4546-af96-16114681bbee\nab045550-b46c-4065-a253-2ccc4f7e88ce\n00bfdfc2-33a0-4ea9-a5c4-78298e033737\n73263479-5c52-43ff-8396-64864e78c0b8\n385953a4-baea-41f8-8422-5f3bdb4f0ca2\ne748cfee-bd3b-4257-835d-27c6b6a54508\nfc849193-e35a-4bc2-8f4d-7985be34d5f8\ne33dddd3-698f-4fec-87f9-b32ee1d343f0\n6d0a7911-0b87-4f0a-b6ae-07bbba551c07\nd2d01469-decc-4566-abe9-64ae6523ac61\n6ed9df28-228c-4ecc-a29f-6f968d7b8962\n26ccbaae-3fc0-4747-a102-5323219b99ab\n30974f9f-25b7-47f6-ba1b-a3b423d57b12\n08366625-6a41-4209-9536-d580b814dafb\n856ef695-91d8-4ab3-8c38-50771b29d93a\na201925f-57e9-43d4-ae02-77bea3ef9493\n321016a0-336f-4593-91cf-069076937575\n259e99d3-3cfb-4fa7-8b11-b5ba86c2a6c6\na249a3d6-89bb-4afa-ad3a-8d9ef4b7227f\n0a16b5fa-45b1-4017-a3ad-5c0f20438aa0\n641eaf96-d7d1-4479-8462-1f3be1115438\nf9fb36ff-a573-4c82-a351-bc9c4592e894\n1d6fc68d-fefc-4f31-9de4-36ce93ca7335\n76141e6e-43e0-415a-8cd2-f6d82fbafd75\nfc17dcf1-7d49-4613-a18d-40c67497950f\ncb2660b1-f538-47ab-bf17-d877f102d1b0\nd88c1ed3-792f-4197-8d51-079e8cf6d3c6\n547aff6d-c9e4-4afe-8895-c28d295015a1\n6d83e91e-6585-4408-887e-91a9820a4f60\nf0e6a098-8b2d-4d23-9b8a-9afb77b06aee\nc34dde68-543f-494b-a71e-f353f1ce68da\n89bc15db-2d83-4b75-9f2a-a0bd5cbe8bd0\n3e7aef19-cd19-4238-8c99-2aaab679ce02\n9b5c7474-f4eb-4784-8827-7755b2701da1\nb8640361-d05c-43f5-be82-bf0c10553b3e\n75ce4efd-d876-49af-a312-a7594399a23c\n9309554b-e669-449a-a7fd-5a968a9d8504\nfd761a9c-088b-45f0-bd4c-443b431c9b55\n4bc720d0-f5f1-4345-b005-5e5b4e05a687\n4df3927b-e472-4fca-b9f5-de076b75d428\n31effa92-d967-4091-9ead-29dbcfa49b1f\n7269bd12-f877-4cb4-8416-ffded598cf77\nca4334b9-b2d5-4c56-acdf-23a7429b5aeb\nc17c2c77-1f6f-4d15-b26d-518e6b506549\n6cfd90fb-4963-4fbc-92ef-1a4cc0c8a2e1\n25dc3ef8-018a-4546-9ea4-450da04da576\nc1c765f8-f954-428d-a3d7-cf6c1c8dfcd2\n96bad651-e157-47f6-b6ab-fe6d07550bde\n40a21127-1a29-42e0-89ab-cf0a74a74786\n3d2147d3-f9dc-4bb2-975b-2d081044eb98\n9a7083e8-1c8b-4452-a453-14f195f23c19\n82a6e464-329a-4fc7-9de8-da015f7af4e1\na190681b-2fda-4788-ac3c-16c38ededc1e\n1827a97c-ba91-45b2-af01-3b662930ad78\nba89f27d-ecc3-4629-9b8e-063fbafe8a85\n512ca9d9-b1df-4d21-9325-10b15bce2ac7\n5545266a-caef-4486-9de7-4a37caa9a7b8\nc2efee54-d733-4d74-bdd1-26db167f13e6\neb1bda95-42dc-4fd0-a41c-d40a9c2a404c\nb3b5c415-b985-48bb-b6b1-d0ce5a3291b5\n53303faa-27af-448f-b426-89f3bacf724e\n3f3b71cf-a451-4a36-8ae7-bee6ac2b1f7a\n50c14a6e-1714-4b7c-b3d7-be6afe7eb864\n609d1c50-f962-4deb-a437-5f03a12b3a7d\nf8bac412-c81c-4db3-80b9-a04f28b74142\n6fe2e0c5-04ae-4f16-a468-23eaf167e6ab\n44dfaf6c-2b9a-4a4f-8119-e0e52788177e\n51cc6e00-3767-4376-a435-6224b3bafe20\n7bcc0746-1ab3-4e0e-a497-b8c8aaa39450\n3544df65-e178-465a-acea-72557a2ef9de\n6a8a724b-8516-4256-bb33-5ff390656de2\n179ba1b0-b6e0-491d-91a3-243447ed409c\n6d207843-79ae-441e-a420-75776abab70a\n139b51d3-2c1d-46a4-802c-011f2278551f\na9553a9d-df1a-4f7b-b419-1e06fb54e8da\nd6417aae-8faa-4803-93bc-6348cbb1d8d5\n7de88397-8cb3-4bb0-84ae-548e49246659\n6e6075a5-af86-4304-b5c9-f3bff8b2f588\nb04f3bbe-95ed-4c56-8ddb-753afd7b415b\nde6157f8-5de6-4567-bdc7-05b9d4c3dd53\n3b2263a4-0561-46df-8cfd-aa55f440c9f7\n80696523-fb48-4687-9d70-505aa8fc7379\nb26142b5-0096-4b4e-8ae0-602c63b36baa\n5812d602-5e43-4a41-9a73-05af11e4f126\n94c2ed8e-6e5e-432d-a1c2-29252c72b1e6\n0c321b68-2920-44ca-a6f6-6a13954d7b36\n8f32fac2-6378-4570-bdd4-e9daff95e462\naadc1584-3d8c-4b55-b7b3-34779d9de5ad\n2cbde244-3e3c-4cc4-8e50-566d3fb29128\nbfe8c4b5-f8b5-4c4b-b328-94a5898ba33e\nb44039b3-51c5-4435-97ff-182256396474\n6ba647b0-754a-4c6e-8fdf-1dfc58681f42\n5de46a67-f16c-4396-a667-7c8851fd2a91\n06724433-e8a3-442c-b031-358d4d57ce4e\n6f252267-8884-4236-b357-6975578c5592\n9e9a05a2-0d79-45df-a278-c223e7d9507e\nbcf1264d-766b-4b91-a60a-c232d6e75896\n2388a77a-b115-4dab-8cba-5743316f341a\n0b0d40a7-1494-4dae-bc57-bf4fc055339a\n50e1d007-66df-495b-83da-ee0276df9269\n281279cf-e125-4a7c-9e81-ebfb15b9824d\ncdbaae74-5b41-41da-b1e0-d21809011776\nb300c2de-5385-4f36-b475-b8128c01980d\n909f5a58-20ba-4b25-890b-08ec8dc38fe1\n783c1297-7455-47d0-ad67-788cd998936f\n70dc4c79-daf9-4b16-aefd-511d9607ec4f\n0f4e1ad9-b6c1-4149-80e9-9eb684323022\n1ed9db13-f208-4a59-b82b-db52b8c84ada\n2a7af8dd-0c99-4a90-b853-e623ce195fc1\n0c72dfb7-0667-43c1-be18-1c798949215a\n32b21e60-a672-4bb3-9e2c-57c2aaf9531a\n4a9abfcf-b82f-4bba-acc8-6f646d06a9b0\n116d1897-3ed9-443d-be90-e6b7c8a12c7e\n30acf525-c7bf-4bca-ad63-65ee02f13f69\n3ed6fb98-261d-4ab7-81d1-85b5b4e029e2\n9783c5f8-2903-4530-b2a2-86ffc6fe1bb2\n46d4a238-4f2e-46b7-a786-315df8ec4101\n0257cb0d-32fc-479d-806d-03a80aaf48c6\na3ee620b-1432-4a5f-9475-991328c98181\n6b184263-827d-4006-a469-66325e27f9c0\na97b5c6b-b72a-471e-b7bb-e92e4aa50bcf\n6c0190ab-2f40-4b9a-bc7b-2bee7f05b452\n3346cda8-4666-4996-abb0-1edce1fe8f78\ncd7d0060-cf17-4fd7-a287-05d1a004222f\ncf058e0c-b77d-452b-a4ce-2a7e2161b447\n109478d8-faa4-4f14-8dcd-6ee4e8e541a9\nd63c6c9f-32a6-49fc-b935-6c662ce4eeb3\nb8427f4d-a004-49ea-96ea-567ed7421700\nbcbe1a3e-db0e-4f19-a1fe-8ef8b92254f2\n3fca0ab0-7b4e-43e4-a158-017888a747f7\n18d777e0-fc59-44c7-847f-b8aa8ba7b196\nb1038447-f0c2-4119-8633-b1ed1ad2b2cc\na5eb4b27-4da2-4ec0-b99f-cef11ce9005f\ncc5f4532-345e-42c3-bf77-b932aa78fd7c\n33d86866-01f4-4872-9e83-4f91a445b6e5\n58221334-b3e1-48b0-9db0-77174ca65f73\n6ff90662-2638-42f8-acc7-e545e529932b\nfbb9977e-6612-4e14-9f43-a642b39c2a78\na8da6127-268f-4a8b-8809-9e6877fe2b14\n2835424b-4795-485d-ba1d-0dbeab4128ea\n28ba3555-0066-4fd4-ba43-29e09552fa26\n53feb5cb-94e9-44a2-b1d9-d3bb69303616\nd7a7da1d-6f9b-4c0b-8c54-0d462842d584\n15b8c737-c8b7-4ffe-bcdc-c6c743ba840b\nac1803dc-373d-4bf9-9245-6427fedeb9ae\ndf0c78f8-f9f8-4370-a95f-b480be78a5b3\n5095b60a-a543-4bde-9720-f0846bd085d0\nde5b03de-919c-42ca-9841-f9a93bd347ea\n4b8ca970-11d2-4a9a-bf28-f8397c7a702f\n62d9af80-a7d6-44ba-9aa4-a6919d37bdec\nd0059386-1f39-422a-b33a-2effc99c88a1\n82b84f25-b3c3-4d3a-8278-b4a59577186f\ne64c82e2-a66b-46a3-a2c2-076b3a18803d\n39cda146-9e4a-45b7-95d5-70463314d86f\n1c5a8f63-3890-4e8f-a09a-4b6a2e9b661e\n347ce000-8247-4cd2-92fd-81fc8d2c4acc\n5c13033d-f9a4-432c-b3cf-9c3df8ad4878\na938a71f-b35a-489b-b235-09968540be90\n6a2dfbe3-2b27-450e-95fc-4827f6215b38\n645533d5-fe25-4517-bcdb-90efe37aa2fb\n89996e95-4903-4ca4-8238-77d553eac000\na77a2ff6-ca62-4eba-9323-1c44d5d322b2\n98473a07-875a-44b5-91f4-4bd998cd9bd5\naf5100b3-cc2f-46cc-9a4f-5ea2325f7268\n1b95f34a-4cb9-400d-a62e-3a57b97b141e\n73d61e2e-df79-4ba1-a8ac-35669c4425f5\n07fcd7d2-e111-440c-bcb0-50890276c826\nc5d8552a-3853-4852-be3a-26e2668234e4\n396b5397-7c4c-4743-91e7-3d2f2452313c\n32c4cfb4-5574-42f3-973d-fcd35013b85c\n38cae187-3149-4b69-ada3-d94d7c6cefb7\n698066a1-93a0-474a-b8a4-a97d6735dfda\nacf37bf9-f063-46a5-9487-b785b969f7cc\nd1e2f5d9-6721-4b42-9c18-3ed7b75f5bab\n8e6a5d30-8d7b-48aa-af2b-1391d244094b\nb75287d0-cf54-4894-900a-fadc6b28ca93\n1ab58120-91a3-4ab4-a14b-a37af3583ee8\nbbe552aa-511d-4f92-af68-7fb762a9e24a\nb09cdf83-4d87-42b1-8be1-c04cba9f4dff\n50d5aeb5-d908-4a8d-ba69-62623d97b503\n862d62f9-3801-435b-a83f-beba9a26de44\neac7644f-24b8-419b-b862-2981556e0f96\n9865e658-38bd-466d-bd9a-425e7bec1517\n4833229d-3d78-43b8-98b8-2eb36fac3fc8\n64943c0d-f176-4421-b971-424f0af2dad0\n32d0a2ad-a4e8-4ae4-a44c-bef32a4c1838\n25af32b7-b561-4eb4-81df-7f1fb2d4038c\naedd795e-cb63-4a0d-b946-ac78f9521257\n6cfa28fe-8465-4b96-a105-ee2b039b915c\n64db252a-60d5-4c74-8105-8aa1d9a60dad\nef6f819d-83f9-4160-9c15-3f06b4beaefb\n33c782bd-b67b-4449-b04e-dc6fa0c18403\nb0adcb93-93a3-476b-b817-52a7723a75b8\n6ee0179a-3a85-4728-8fbb-fb915363ddd2\ne511dd59-bd1c-46a5-bfcf-b63e9c0bd2eb\n1a5e8461-7318-48e9-aeaf-49ba9d8f6eb8\n4ab36e16-2c7d-4ca8-92c2-d8d27b7581ad\ncf44625d-a135-4e21-be36-eb3d983579d3\n3f6ce695-63a6-4227-a403-097e213c1f33\n807beae7-dab7-4027-a981-5d75211dfa5c\n25aa97cf-a9b7-45b7-b0e3-2f7750ee7b48\ne671ba30-6ab8-4613-97d9-56158be18d6c\n12dc3cda-791e-4dc8-9dfe-39d4f9b4b836\n2c3439c5-f9ac-4c97-9df5-2878f927a054\n1aa1caa5-5088-4b47-8d15-143f2ae45b09\n5bcbb4ff-de2a-4435-a5b3-d1772a876e9b\n5f6cbf73-2144-45be-a610-ae1cb4df31b4\n6933f218-cfd9-46c4-af64-6e3902f43e36\n2c7d644a-7486-44ae-83f7-34869b833ee8\n26a7e35d-e1e4-43c2-8fe5-4ce9b1151b6b\n755c253b-6cf0-4486-a72a-384c4a6a2588\n2d17b5b3-cb3b-46d2-88a7-71325e8434a4\na21ba482-82b4-4087-8c45-1d6c07e87455\nf306b066-9ffd-4a4d-bdac-f7c47c3e47fc\n608049d5-aef2-41e8-b74d-e75093eb60b0\na0b52be4-c097-4465-9929-dd7278080013\n6b58c2fe-f724-4660-a15a-0b64d903ed64\n5958666d-9e40-421d-b8b8-54e155d0bac3\n6458acc5-0225-4373-a1ac-ce118b79fc37\ne5e34194-3829-4929-943f-30d904741b88\n4dd909d6-06fb-49c7-b8ec-84e48a1eab6f\n140126f9-123a-49cb-9cf3-f3ef107febbe\nefaf03fe-06cc-4b92-99bf-5327beca492a\nf428c4c9-6d53-4a31-816d-ff3c6da83585\n49893f0c-966c-4611-b889-ba5ec9a15bd3\n13aa6932-6a05-414a-8c9a-82bef7bb68a0\n2fb9051d-068b-462b-ab50-9686da084486\na681d19e-7b81-4627-812c-4b12144275d0\nda7ead5b-1522-4170-8cde-85a6bd557fee\naef6b364-0065-4376-81db-1720a92fe115\n50238b2b-6c1a-4fdb-8490-9b2a9eec2b25\n76f4bb22-5c58-4ca5-a102-be70918ac9f3\nc4c7d2e1-3f8b-4a21-98ff-2604a1f1bfbc\n3808b594-7d32-4932-b929-f1e7f5037e34\n08355d39-e253-4327-81bb-42e9996ed6a8\n5cd8b481-6efc-4df7-8e7f-d2725fa14dd6\nef839924-4333-4017-b558-90fc9bd958a7\na77f62c5-5e12-42d8-856b-32d2902edaf3\n7e813c6e-f92c-4a6c-85dc-3d8213475771\n210beddc-c3bc-4323-a5dd-4464834eef06\n68b3bdd7-1c76-425e-afda-b1213edd14e1\nf62d66fc-388b-4b01-aa30-1ac2293c146f\n3c4a9511-70cd-4487-8282-2002b5adcfc4\nf9f49a6f-16de-4e94-9ba5-6403eb72d1e1\nc68b1d63-b164-4145-a585-3e7f7bb2d161\n3fc0bf65-baa0-42db-bfc0-a89095ea4eb7\nb29c45fa-fff0-46e4-b84b-6c5568ad8eb7\n280bd820-584f-49c1-99b9-dbdb355c4240\n5a49401e-184f-4982-a1e6-39b531fc50f9\n681053f6-e563-403b-950d-94fea6c7a53b\n36cceead-da80-4daf-a370-09ab40484de8\n2de983f2-ca3e-4e1c-a1a9-8a1547ee54a6\n8eb9ff6c-cdef-4445-b5cc-e7679840ddf9\n04fc6ac4-9af6-4e9d-b63a-31c0dc9f66a1\n197b3387-4d78-47eb-b2a8-74a3560e2cd7\n42d6daa0-a59e-4324-9646-aaba952e9c70\n3e1dea57-d227-4962-965f-7ad29c919fe2\nb7de8bcf-9970-4e8f-9919-04b0728c4e16\n8e1a8030-2de8-4410-a2d1-bae98d3a2002\ne783e0ec-0802-41ac-aeed-e35488e4d0ec\nfc4e31fd-0932-48d3-b300-ec5506fb3be4\nfbf008eb-6f6e-417a-afa9-7c545846892c\ne19af075-0d2b-47e1-bc2f-f3fa78500085\n5e156c6f-89e2-4db7-942b-22ef62c508a3\nd47f58af-79bc-4098-8886-8fc891818e11\n252b7dcb-f3fa-483a-9c9d-9c58387cc596\n59abc579-b94e-4423-b5e6-aa905bb395c2\nc8324f85-3c69-4b2b-ae39-7a6e60f94a4e\n8b57f311-1c51-4d9f-83b9-ca9959209033\n9db521e1-44d1-4a55-b7a3-eba46e4faf13\na47a06fa-dd48-43b6-9a72-e706590d34a9\n645f3b02-37aa-487b-b979-4499d53ec98f\n567e9b23-eadf-4ea9-a711-64768f2efaf9\n5c17d45c-9899-4917-9cfa-8c701c89e619\n9e18a14d-d664-460f-8d5c-728406100109\n81477e1d-4897-4a1c-a3f7-d77440cedc12\n2fa52145-6fc4-40a7-a639-f9f4c5ae103d\n508d07e2-1015-45b3-aa40-e7d11bf12d8e\nac8da11e-ff15-442e-a36b-24a0d8ed2aa3\n558edc84-01a5-40fb-99c8-57059211c74d\n4f505a34-cfa3-447b-b844-1e8480102ba0\n520e7d65-4fbb-499e-a336-ebc2b29b673f\n67f22eb5-8837-4542-acbb-6ad036bfe45f\n16aec42a-de08-4f2d-aea8-8d1f09bbfd86\n250c2a7c-c151-4f29-9528-2a84042f395c\n93b07023-dce6-4d6d-9e0e-fcaf35e66580\n232fed6b-de84-4696-839f-4f1017131e9b\n9f5cc913-64be-4ee7-81c6-b8536aec8087\n1ea8c895-c05f-4db2-9c31-2170af28b447\n392c1f4c-dbc8-4472-b46c-0eb87b930aad\nedd30e9b-c3e7-4eea-9d9b-05b3280ef9b6\n343ffdc2-fd07-46af-a5fc-cdf11300b295\na71829c7-e92b-4ec8-85a2-391a52eee771\nafa68179-abef-48af-a4c5-51a5d8dac952\nfe9dc09d-5e8c-4e9b-adde-09fa085d869b\n29e8ce1a-797d-420c-a8a0-8cea8baed2a3\n7595c67e-635e-4afa-b29e-de52256e265c\n97527f6e-4b50-49dc-8b9f-03fe16bfa404\n88f1282a-d824-42ff-b981-25d2ddede193\nd0d2663f-fac1-4237-a3fc-30bbdedf1eab\n28721e62-558d-4fa9-a4ec-c9f5b423c5bc\n5d260a88-ef6f-4374-905c-3e202d9d24f9\n4583281a-c795-474d-b76b-5faa2226b561\ndb82557d-c910-44a3-9dfe-409b5153a39d\ncde3a116-43e5-4c88-8ef5-99c8d89b528f\n347f44da-2b1d-42ea-a96b-f382ea4bec3c\n9c295cd6-81aa-4fe8-9614-cc086209e6aa\n8128b7a6-022f-4f71-9ade-00687ba43d3f\nbc550c44-ffec-4be9-91a4-7ffea11b7763\n2e38cc14-cce5-4da4-b65b-0700401bbc5a\n924b5a42-4567-4431-9987-0d36e1a923bc\ncc4cc81e-d65b-4051-8765-f403e4d44b35\n47768e3d-6f68-4444-8069-1dc35805c1e2\n6cadbe29-7c2a-4cea-8921-538c419fc745\ncdd8af3f-14fe-4230-8d30-c32e1b5c8f43\n7f558acb-9aa0-4556-9009-5a5731db726a\n78c81e91-f9d5-4895-b495-c369c13d3a77\n99a9e05f-18d2-4141-a1f2-aa3ea9827273\n826bbbbe-8a78-4778-a4f1-0bc0c3d43de7\ncafb0132-0dbd-45c8-852a-d5c045330359\na0101e28-95b8-4e6e-916b-f6aba1fc0e69\n4b0a74b5-d345-4ca1-82c3-76e02562d87b\n3ef71243-c906-4c69-bbbf-026d8ede0b44\n6cac142d-5efc-4599-b1ce-c6709180e881\nc5601a5e-21e8-47d6-ad59-679377abf7b6\ned64dd2d-f119-49cc-b889-aa97f13db333\nb2fde865-fcf5-400b-8de2-6c5c47304ce1\n918980a5-0958-433a-bd3c-9aba6e802349\n9713c7dc-4a1d-41bf-af2f-45b74acc9aa1\n1afc0a10-c27a-4316-aecd-68ddce2e7e2a\nd1d15cd0-131c-481c-95f6-e1be5060334e\ne1c4fd7f-15db-4a38-937e-05b5c078a842\na5fbcdff-649e-454e-9b4c-cba53aaad4d8\ne41730a0-5299-4fe7-ab1c-5bfadac0e94d\ne75f68f3-49ee-4418-beef-639cf01c6846\n16b6f86a-16c2-4e00-95f5-64467b4155be\nb28378ee-6a97-48ae-a178-efa99fb1194e\n479f9f78-5b16-485a-b0a0-b39b6d7f46e1\n1716ac72-187f-42d9-be23-11ba156101c9\n09e9bea6-b655-4077-8118-ee303ba6c6b6\nbe13f6d0-3b59-4af4-95b7-7fd796493258\n49ac9d92-fdad-4bf8-b8dc-ac1da1c26682\n945e2502-0e4f-4318-9291-a1701d90a9dd\ne38e4d88-a9fa-40dc-83d6-74720c30a234\n1d4b3bd7-b271-49b0-8db1-d5c0ad627276\nbc887c6a-606c-40e9-b017-22fa80842a3b\n93d00b69-c3df-4e78-bc60-9ac0a719997e\n1089b210-97ce-47f0-91f7-deabbd34027f\nc0999936-7385-4803-af07-d15cabf388e6\n6e596c45-209e-47a2-bdcb-a766f2a8387b\n31b8455e-946a-47e5-b4b7-f0dbb15828cc\nc70f4686-018f-46d0-bced-70b95f77d668\n8459eea2-1508-4ba0-8187-a4d1163dc5d3\n6cf21fc8-e35b-4518-a387-c7ae4f93ebd0\ne1ff713e-5047-4321-87d9-22ea7b72e599\nebadb916-cb1b-4374-81a1-5db9411b0cca\n8a5becd6-a566-4d04-9bc3-125f6cdac724\n03cb4476-c5f3-4d65-a6ab-df4d0fdad1e4\n04b0f8f2-184b-426f-bd12-47a945896db6\n47774136-f552-425a-b7b2-817e0b97e0f0\n7b76a28b-bb7a-4d40-a1ee-7203c647113f\n23ec00f7-d0f7-4b28-8db8-514f8cebb39c\n39eada6e-0a3b-49d1-8c7c-24b6cc80bb96\n05de345e-3de7-4567-aee3-2e41651f5db5\neb5f69fa-5b8c-46c0-a716-35e2cd8c3993\nf1f4e18c-39df-4e3b-9835-16b805e48eed\n541d46f6-0b64-4ff8-a78f-619f390694a7\n68dd3e5e-9cc5-4f97-a608-230708d9b328\n894af7c6-336e-4429-a0b5-1294dcc5a844\n5b2142e0-60d5-4cd2-a1ef-e09e5ea55edb\nab4708c0-cbb8-4fe6-a1a0-3015e8b759d8\n7983cd23-0bdc-496f-9e7e-edeb12051027\nf0b7d51f-6d69-41af-80e3-2428a7958c87\ne6cc22f6-2374-48d1-8f6c-40741032e05e\n6bedd9b1-825f-4b29-b528-7fac64063cef\n0a8bd783-5a7b-4884-9f2e-2884e1ed924e\nbb01c4bb-89f9-41b0-9bab-3620a63c4c6c\nf3d4aba4-2ce3-4300-b356-b5e97936fa30\ne29e15a4-c2fb-415a-b64b-295b164fd037\n879c0b90-f8e8-407c-8f84-0e89eef7a1fc\n144581af-994a-49ae-a375-78cd0a1f9a06\n59a8b339-cac5-4b45-8c0e-cecaeecc2ca0\n1e15d5b1-8bd1-4602-b020-670a99c9c369\n744c3163-7106-477d-b01b-62c1b991df3b\n801fae42-e986-4eda-8006-1fd4e9969a60\n0e9154c9-2824-4ca3-9123-7317204e6cb1\n42f289c5-2cae-479d-8534-4062268733bd\n2f44d761-e05b-45c5-91fd-562eeff5e1cf\n22ff8391-13d4-47b5-8d1c-d1fec55d2938\n28799eae-b500-4249-a6c4-405df14fe85a\nbdcd130a-db58-442e-8f4e-06594a05b3a1\nc7667892-9598-4060-ae83-f5929604e81e\n75fb94b2-22a0-4a83-b8c1-a1c172e1d198\nad433366-6fa3-472a-9746-338f2404602d\nbdfb1526-4f2a-4fd0-acf5-2f6a5ec52526\n342fcdf7-83ca-4ae7-892e-f62aaa20f2da\n03518d5f-1b67-43ed-9066-f9902a99d638\neacbc893-8467-448c-b851-d7117a35910d\nb784ca86-f635-47c1-ad74-82691a6c2594\nb2ed0f07-fb13-46c3-8e37-d24d71ca8150\n8913ca24-e8c7-4089-8d1f-1b1ad7d5289a\n02044aac-5ea6-4583-994f-c45c970eb7b3\n902f9a93-3e3d-49ad-a073-cb6642e3c208\ndd6d263a-5a7e-4c23-966e-0759d1453946\n7d449630-7a6a-4df0-a42c-ce3853564a77\n4362f309-6df4-44b8-9b1f-6686000b405d\n66f541a8-1258-4873-ae55-4857072e0810\n1f8e6905-9a65-445e-a0cc-c15c12b7f0f1\n7f8ba7dd-de0e-43d9-8124-c5753614b03c\n2c4a486a-d7a3-468c-9236-1af866b47bf4\ne01e9204-8d9a-45a7-8ea3-140e430ddd53\n961b7042-d128-4d67-ba57-4946bd141718\nfb06d7fc-789b-41b0-b5a2-c99cefaf63ce\n46ed2f16-f191-41d0-86d1-bfaa75bccd9d\ndcfaa184-de98-4cbc-9e14-8a878e5a94da\n1e4edc1d-0c52-4bf8-afdf-81a7d62d071b\nb10b0320-ac9e-4122-961c-637e5325765f\n58247c44-85da-4cc2-b558-d07889b2c16d\na0ee53a1-3a8e-43eb-9e3e-107334b0f777\na0599984-5cbd-420f-a12a-731f2400cdb5\nacf7a81e-5b39-4624-b5d8-36c04497ee90\nb9e443cf-eadd-4ca0-8ffc-19491710ac1e\ne7f59b95-b068-449a-a839-33e2e5f7e111\n81abcda4-7f5a-4f9d-8c99-8fe12a726510\n5469d44f-4b38-41fa-b193-3a0ab9cbc038\n241ccf69-82b2-4b47-8709-d162ef016105\nb6d2dc2d-b77b-412b-9091-c52d989f9b28\n24c0e093-4edf-458a-bdc8-4a77c3e24491\n24f955d9-9968-4099-b817-5478f41ca50b\ne6215522-6361-4c0c-9c2a-d5b8a6d865fb\n1eab63bd-9840-43ba-8296-7dab4c0d129a\n0dbb6ff5-042f-475c-9020-f1fcaef84e78\ndecba52d-1188-4754-8ad5-4d10a45b5443\nf4fe5e43-a6c5-41ef-9e86-e3085c1a0e7a\nf87398d3-2500-4f95-ae6a-d2ce0c59489b\nd9f1e0ae-8a6d-4bfb-a0d4-7e66bcadb195\nccbffb31-6ea8-432c-9d8b-35ba6841af20\n88a7d1a9-dfb2-4dfa-ba94-693ecfef271d\n9c07e7bf-e9ea-4ee3-a0d8-3903eaae79a1\n118dcda6-9d58-40e2-8047-f0fc3299cd97\nedc61c81-bb2d-48d0-a865-92d0cd0015a9\nd8f4c4fc-b523-43c4-8df9-2477cece2c9e\nd88d0743-dc4d-4128-af40-bb73a2eb866c\n2f57a375-dbd9-4c18-832c-e205a4d0c168\n632b8b26-91ed-44e0-9249-58433eeaf6ed\n4daa11a0-56e8-472f-bd9b-d9c892e88cae\na81c43ba-7a5b-431e-9e28-3f6a812f1eb8\n3bb54cda-94f1-4493-abfd-6ebb0c9f1141\n99eecfa0-bea4-446c-9ee7-cafd7a030f4c\nf863b5a3-571d-42d7-b703-92469f1f5bed\nea353301-287d-492a-8084-a2e48f330ed4\na60d62c9-01bf-465a-8d26-f39143d8b955\nf4523836-f156-4c25-8e75-d8b5cb5d7cd1\n89204bdf-096d-41d0-973c-4fd23e7aa45b\n6f79b015-bf8d-4423-9f80-0447fefa71ed\n8ac9f761-c1a2-4f88-911f-5975f91c80f5\n9ca96d5c-f788-4cb9-aef8-0c4008f450db\nff17255f-d4b6-4bb6-b0c9-92926d5d8899\n5bcbbe29-83c7-4089-bc03-c780c7742343\n596bf0f2-c627-4f37-aeca-b5a9681a4504\n30607769-513f-4889-a1da-9969b14ea63f\nb058cae7-f494-4db3-afeb-f335440357a9\nf8613436-754f-4b79-969e-f120e96227fd\ncc15680b-de7e-45cc-99f1-28c1678a6698\nc617717f-1d76-4bb9-9fc2-3a6dd9a84150\n500c770d-a7cb-4130-8946-3eba70300733\nf520d10d-19e6-4231-be10-e24c6f314f54\n257a8b83-8a18-46ba-83a0-12f95ff6d3a7\n21218f26-28e0-42f4-8eb3-044034fd9dcd\nadd17a97-ffa0-4157-8b92-ae7873e4aa27\n7638ad1f-f60e-4236-9c2c-57856d97b589\ne48b1fb2-2241-4e24-84d4-07819e4c4758\n2a74385e-5d09-40f3-add2-2d6e60f18bc9\n5217969e-e0a0-4a7e-a753-31196fa660fa\nca307260-f815-411a-a979-f64255e01ad6\nc1be04aa-568a-4dd8-a043-df41afc62242\n0f3f08d9-6041-435b-a9e9-a27dbd0890c2\nd3de3ac9-5fc2-4981-b1d2-69368c3c180a\n37460a76-4303-45d8-b110-c4dae84da8b4\n51a900b3-f148-4059-90f4-6d203f5021ed\n62ae7501-ab9b-49b4-adc0-dc1456f9e366\n91a9c138-2987-45ca-bab5-10b7926358e8\n1a24553f-ec80-4eb7-96bc-22215341d26a\na53ba5e7-4657-4670-b425-22ecc52f06b0\nb30a8776-8137-4340-91bb-42c54c586f62\n0219e2c0-265c-4280-849b-5df65660ea0f\n9e1ab6b2-4db6-4afb-a4e1-95890f937354\n5bdf21af-14d2-4923-a27f-d15da8abc189\ne51532e1-78db-4155-aaa5-5357afe7d030\n9bf1678a-b9b6-4e42-8e33-c0a5a6767695\n4bfb4894-dfc3-4d60-bdec-775025c3ab65\n38c6d253-fbde-4eed-a075-be8f45b6eb32\neaece045-cbd7-4566-8ff7-d5ec4fe53865\n95952336-7f64-4d5b-9c6c-01f8565676de\ndc37c639-e961-4cb0-9ac7-051a1b378aea\nef6c980f-5a81-461b-9933-8c29abe0ff66\n6c855175-eac8-4078-b8c6-a259a4af2885\n91fdc32f-8892-4022-8b6d-c2438062c2cb\n4bc00ed0-e9ee-4e30-af55-543fcf6cf46e\n53c6bc38-e6ae-487a-a4b2-2dbd3d2eaa91\n5bad8f5b-8eab-434a-8730-67f39569f469\n2c62d6d8-09f6-4efb-b0c2-88808cb1e4af\nbd0c937a-772f-480c-acc4-197e2421637c\nbd549bc3-8b48-435f-ac04-81ffadcdbf49\n901adb49-4800-4954-a94b-af230a7d5e33\nf3d62621-6a26-43ba-a092-2d55f4ae2ad2\n7f318316-68c9-4200-a7dd-5b61c3097d40\n122b3741-5de6-4ff3-92fd-83e9d65a3585\ndc43a5fc-f8d2-455a-ab0d-804a25e82c24\n62803798-2650-438d-8d1b-9ed9f18374eb\n5423dbf7-ccbe-4afb-8aa5-384e36d4d925\n7e553953-5552-4e4b-af23-6f0d43618604\nec953f0c-1e51-4be7-92f4-c0cc3ee69c0c\neb767958-e07a-41df-9aab-12ed64c7bcd4\n517e025a-520d-4fec-a2d9-6dd1ef91da6b\n3ddfc070-8759-4055-a759-7711c0e31ef2\n35cbd389-f81f-4149-9145-9cd6173988e0\n543f510d-03cb-4e2f-a8d4-b9ae2909321d\ndfab790c-038a-4679-a8bf-8f74806a8016\n96ff9fdb-ffbc-4e29-86ab-6226f27faec7\n1dc834c7-3bec-4c5a-ab8d-3f097d70a4ea\n3a59ed20-c01a-41d4-9d1c-ca0f9ccfe978\nb424453d-cccc-40fe-92b9-6ac6709482cf\n61237d3b-8120-46c5-a2a6-9e4878081360\n32144071-ba26-4a1c-9a07-0fe26dbf7743\n1d42a251-1726-4650-9921-0bdf2170775e\n1aac1a78-7116-479d-9bf2-5d2bbfe47488\nfa4d125e-ab4c-4bce-9412-cdccecfc4576\n70a9c114-98e8-4f7d-86fe-c0e80ed931e9\n1b75352e-8e3b-4460-b131-0eccd25cef88\nbbb72840-7d2b-48bd-a92a-426c87600c61\n1e3a2912-3816-4b72-8ba6-ffcb6490e1f1\ne1864c48-4df6-4e8a-a0d6-4c696403fbb8\n723ecae7-4491-4e23-a2b6-635dd43608cf\n4791ec50-ed47-415c-8a43-bd349a6280c9\nc19ce9de-412d-490c-989c-4117a011f985\nf7a98673-1f57-4661-841d-04516c94a612\ne1cd674f-1e44-477e-8675-a363f0977a9b\nc31058e8-4261-4865-ac0a-7fbd29b720e3\ne44c61b8-67dd-44e5-8cd9-a7edb368e76f\n58d74b2f-fd39-480b-a004-63a5aff81c56\nd82ec387-7b85-49bb-b107-bd8fa31baf80\n287f7e51-69c2-4e6b-af01-dacfb242d2b4\n58906210-3f0f-49ba-b235-3e37f9781198\n8ce33cc5-c7c3-4071-a911-5cdc4a03f303\nbb5fc147-d79f-4917-85cd-fb6bbbd4a9c2\nc775c9e5-00bd-4364-85ec-aa055e8154dc\ne8ff1f59-48e5-4c7f-885e-51ec78c30331\n7b00ff5e-9796-42ea-9a5a-bd9b650e8024\n9c84d80c-c57b-43aa-b1e2-392b8d43dfed\ne25ca721-8004-4500-b565-5e2d52276776\nbfe2bc2f-8b1f-498f-b5fd-915ac4d0fb42\n209226f3-0d5a-4a0a-a0f3-c533425ce33d\n950e1e43-6e45-4453-a439-c25a18f753f1\n8bfb2d83-5dcd-4522-bf60-1253a3d87b42\nb86a0d1c-a6db-4c34-9607-24c7ea2d89ff\nb62cf5a8-329d-4283-abf6-a6c60541b54b\na357d7e6-454b-424f-ab0d-425121abdd6f\n180d7895-fb7c-4ac0-bd47-d8d367fd9cbd\nffe2a699-57ae-4ffb-8bb4-219ffc091a4b\n4cdccbe1-765d-446b-9f34-9650646f83a0\nea1c7708-272f-4d93-b510-35d19222250f\n4e31833d-0afd-4214-a357-8cb3ff21e5f1\na2099af1-e303-4e18-8b36-302e66ae5704\n3bd218cb-de94-468d-b398-4bc972125340\ne20b13cf-d205-4d2a-9946-8ca4caf4941b\nf2ebb106-0f33-42d9-ae32-40823a013678\n2b5fd73a-3f01-4643-b453-bfb7c405d382\nfa70770f-62c7-4eb5-a25d-c0b247e4c177\n1ea56f00-aefa-47d4-a16c-998d4be802bd\n59dbfdc9-acab-4dda-b41d-8f3153d02cf1\n251d682c-c320-4267-ba35-787d7e55cbb1\n5b1a580e-8ab5-45fa-bbeb-1b65819ed6c9\n2a25daef-7d7f-4df4-8a41-09c9ab63e409\n06a5be5e-9234-4ae9-8733-518f155a37a5\nb5e21c30-d14e-48d5-8d6e-0119f15ce285\n37740096-71b5-4a44-a2aa-375d6e9ed31b\n1ff46baa-b511-4fcf-8846-31134d4b03ed\n44237913-744b-4481-91d6-5ae1bc19866a\n113eb451-8ec1-49b0-b468-00f7a2478298\nab414d56-1d64-40fe-bba0-ee7d324753cf\n622e5f97-4434-4f7d-887b-51073f7aeca6\n724d0ac9-c6ed-45cd-befe-47cace4add1a\n143f60a5-b560-4010-9417-b067fb7eb70c\n3944929f-dfd4-4b53-974f-3fe13f44e19e\ne463cbe7-b142-4c5d-aea6-9c4dc6591685\n40dbaa17-62de-429f-8623-1edfbaf6e182\n7d9614fe-6fe2-40cb-bfa1-b0072806f8a2\n99386890-c8f9-49a8-90af-5d4a50fcdc52\nf0590a7a-d1e8-432f-8cdb-2141bc4b22ab\n8c3e6134-bef9-4144-9cc0-d9e8ca8d4535\nd216473e-74bf-4462-91e0-83254e792c78\n69096bf5-2d2d-454a-b69a-aed50bf5eede\n98b27af5-30a2-43f9-9350-5a819d46c9d5\ne31abba5-5c6e-4cfb-a57c-54151debbf12\nc5136fd7-7b88-408f-a99d-bd0ede4713cf\nb7cb316d-e8da-4cab-8067-5cb9df0cf852\nd6bac751-914d-4c55-bc1b-5387a6be99a3\nbb761d47-f7fc-415f-83ed-66485ba92c48\n5ff51b2e-b47e-4300-ac99-deee8db85ce5\n4c71c4a9-b13e-48ab-9368-80f59063d5ec\n00833252-1f63-492c-9d21-bd4d34ad3aa3\nf5b1fb57-239d-4d5c-96b4-d98cc67e6c1e\n64b142b2-d11b-43ee-840e-40b1ea6bcaa1\na968b411-bb37-4547-ba23-07dc1c1116f4\n558de91d-f5c3-42ee-a0cf-fe753419a253\n7b18a9e0-c18e-45e0-9b4a-4c61a8443f21\nb385a5e0-7d67-4036-aeaa-d8e3d2da9a75\n160b29ae-d9a3-44cf-9e01-25cf13528024\n55bde180-2805-4303-b7cd-644105fd2b1e\n4b66b570-0bd5-4d60-87da-172434d43fd8\n41dec424-3a87-4b73-8fd9-b08aefb93be2\nee5001e0-8133-4c31-b0f5-49a78b3735d1\nab1526b5-096d-4e08-88d9-12481ff2383a\n01288d05-5346-4ef1-9706-4ac2164796bc\n82915a5e-7654-431b-a7cc-7fe1b3968231\n616c6f22-ed6f-4236-aa1f-a07c5590edbc\n54990428-4cfe-4925-a262-d4d157dec3a6\nf8d07edc-0955-4a34-9902-0f9ad0de04fb\na9d848ca-b890-465b-8699-82dc995a00a3\n460e963c-d19a-4291-9505-df0db9e235e3\nb9d213c9-2c92-41cf-9709-c429aea1e40e\nfab9461b-58a6-4ab2-a2f2-4c0f89a795da\na9246c36-f1c8-4930-98d7-1f4b2eb48bc9\n6e4359a8-c4f8-4662-b83b-f3298c9f5df4\n928e6b79-d966-4a6e-a063-2468d3064a66\n46fd1430-dbf1-48ce-bec0-2ef7c9d40639\nbd0e1edc-c109-4b2d-bf33-1239a54b5e26\n90ee4245-6d77-43f7-a4a9-a34852b4778a\nd63620d1-6c2d-463d-a63e-62d1fc5a421c\nfa55099e-c7ae-4255-9235-fac0e465f18a\n72be1180-ba1d-41ef-91cb-4e2528c97245\ne077ff62-60da-4d9d-870c-f8285103de37\n6bb52b71-4da0-489a-9a37-08a8dbc219eb\n14119e3c-acb6-4469-8a81-eeee63241334\n71c7de39-a911-46ba-883d-0a240a18961a\n6aea8e1b-8fae-4c41-9774-748b892179a2\n2eb6b81a-47e6-41c5-9139-84ba0e51031b\n8bbd709a-ba8a-4632-a192-70233af77ae2\n5851dcca-8cb0-4cd0-8fc0-d13c16778777\nd72955dc-281d-4118-b049-4bf3d458016b\nd4459c15-1e75-4c5b-8df7-262e4d474c35\n3c05f805-f834-4320-b853-99c652f7067b\n9b86009b-2c1d-4d3d-ab34-0f143a1c79a7\n2e640075-c1d5-4e35-89bf-9d862f06732e\n03178a9a-fcd7-46c6-9a6b-3966f87497b6\n4f1c9372-14fd-4444-9577-1f13f6d73528\n1521d7e2-708f-48cc-afcd-a81e3f6d97cc\n4d5c9589-540c-404b-a82b-36a5aacbf10d\n7587914f-9fbb-4f14-8358-ac47ff2991f2\n820b8a4a-dd22-43ad-ab65-f8f73585536e\ncdd9c184-4c73-4cc3-b41e-213e489604e8\nd383fcaa-3417-4ff4-a33f-16193e682fea\n7a76f368-ffc7-44e0-aa3f-3cf12b809c91\n70018531-4f49-4065-a3f3-e37ddb92db4c\n02dccb56-3b45-4e7a-b562-014ddc8c5d53\n2dd9d13d-bb84-4ecd-a28d-e0739aea1576\n97508166-d2ab-43bf-a583-d27afb7cfec1\nab5e29ff-1813-46e0-b337-afbc781dd210\nc4abcbbb-d1cc-4914-acfa-6a60123c7b43\n79155faf-234c-4ea2-89d2-b9ffceff4a47\n59be741c-4ef8-4649-91c2-627a785df04c\n812fd0a5-f390-47fd-9409-05f9f13bf7f6\n567f7d9c-1510-4eec-b30b-3cbf0da95c43\n1b79120c-82fd-47e9-b740-517cecb00c48\n28e40ee9-97f9-420d-b130-03b4d0cd6102\n15c000dc-4498-4b9d-95ec-02d0264bc207\nbbffd2ac-da21-45c6-8f92-5dea8f3aafd0\n92f38fa9-20da-41d9-96ac-9bca4fe133a1\n37f0d308-e739-4daf-a377-bd300ff57114\na015d40a-fc8e-4134-bc0b-ab83e69abf36\n17a5b4de-315b-4030-86b3-2a46b075411c\nef532e3c-38e9-424c-8a2c-bff89475f116\n9c980c8d-d8d2-4331-9170-287413816eca\nd924b23b-39b9-49c1-b4f7-4ea4a437e80b\n356bf785-bce9-44a7-a91c-f98ae1e78fd3\naaba9eea-d31c-4097-bf2b-f4ad43c76d0d\n28042814-cb03-4ee6-99a8-261662270ba9\ncfeb033a-d3b1-4835-95c5-5317f7470d57\n9e953b52-bd67-4674-a03b-2a13e6729bd8\n4295de8f-ef3c-421e-96d5-9e8a1b1af087\n2fb8b5b2-0cff-475c-ad30-983524fd3068\n7581c0d2-f0e8-4c18-aab0-db98249c8185\n6a606b65-97c8-43a1-87ae-b9cb17356f13\n043fc0f5-389e-4f69-a40b-6a331fcc992f\nd7a7b4e5-4192-47c1-a522-255812c39b6e\nbea94d38-a517-49dc-9514-2a345b1c73f8\n2dcace9c-f66e-4cfc-95ee-cdc19fc9f177\n9a0ecdc6-0b6b-454a-b03c-e6ccb6fb159c\n3621dcd8-5950-461b-a0f8-e9245c95c57c\n45dd82c6-e0f3-4946-9d9b-8d4e39d768c2\n0037dcf4-9e9b-4978-aa5e-37f5f925e8c7\na4939b5a-cd80-41ca-ab70-420de6eb4908\n402000c9-295d-4872-adb1-5c90adcac0c7\n545b84ba-f9da-4b94-968f-4def3c520d1d\na8f89a76-e0ea-403a-b2e6-13650130c2e9\n65df3929-0e98-4107-b663-869722c67432\n13a4745a-43ba-401b-828c-021de2dbe7cd\nbf14da73-e85d-4fcf-a468-b331992fdf05\na25b9726-d0ae-4e99-9a45-2b7ceaaa1cdb\n5bce38b0-7941-4637-80f3-c44a12577ef1\n01c3e2ee-f0c0-4c0f-bb99-a33226f67fe9\nee47a41e-5dbd-4f1f-a7dc-c759d7a6696e\n36407075-2557-4214-aacd-bd18258a43d4\n3200f1e4-0df4-49e5-8ea9-771ed124742f\n36c7cfd2-854e-42a7-88c5-556812746785\nc9ceafef-226d-4e4a-b6fc-183098def82f\nae14ab6a-96bf-42cd-b56c-8c1ec6ed109f\na4e9d1b4-dc7f-4bf3-8158-83fa7926f1dc\na561857b-10ac-461d-81f2-81ee92f9c018\nb943d9ca-9134-49ae-9351-3e59f1f66075\nb0a70082-7dfa-42d1-b5d7-54c66bc21fd7\n0c7744ec-3fdc-4961-9863-a2ccff3c1463\n95f526ca-e6b4-485e-b4a1-be44b390aa73\n689d53c3-a55e-4207-9f55-9e6a536bf583\n17187f62-e778-420f-b86a-3e36669fcebf\n77bebb03-71bc-4291-896b-446b6fddbb55\ndcf5c70c-9cf1-4b68-a5cc-fea10216419a\nf2da8028-d7d5-4531-8f5c-eb5d2cc9998d\nb9fa3c09-3ed9-40df-a9fb-b704c5b88a3d\nf24cf4aa-dd8f-4afb-a1f8-b31c0e1f6bc7\nf8615f5c-3527-47b6-9e94-f0f7244e7ce5\n835de4e2-9a66-48e5-a49d-09ba0ae25996\n8c4e1a63-d4f6-4aaa-b0a5-3162899e311d\n42b5530f-3e92-4a42-9d20-e27d6dae5dd7\nf49ff866-0dcb-4ff7-bbae-86aecaaf354d\nb160c795-f55a-4a4c-b0c4-e122520bf08c\n4d338a5a-2882-4290-a78a-6269cdd43ac9\n2625f842-67c7-4c53-860a-7eb71fb017f7\nf1f14884-872a-4fae-8304-3a67b7a88a7c\n34ea260f-1efa-41b0-8a02-756d57913e52\nfafa7025-b9f6-4835-bf12-dfb284f1c721\n29ec35c2-785e-4aa9-ba8e-d282958a124e\n32322753-8baf-4736-a630-7f52ba419431\n4964b224-1c6f-41c2-be09-f32a26a7974a\n5f471774-a9eb-4f6c-8fce-e1ef538347ed\n770e61be-1eac-46f9-aeb8-445ebff04d99\n1b95db75-8716-4d12-84fa-9ca9f1e48455\nb694ef07-a27f-4966-9538-64b90461df58\n73727858-b582-4ed1-bb36-87b47e473a2f\nd2bcb3dc-f41d-4f8f-a1c7-42251f666b1b\nfeaf0b20-e4f1-4581-ab1b-7f091851d117\n9e8b45f1-9a45-4efa-8a31-466984219c34\nb4be661a-040e-491d-a07d-d337a6c3673a\n752fd3a2-4f29-4870-bce9-f3a43320bd8e\ne1147ae2-cd9a-4be7-9952-42d480b4438a\n26e4d0e4-c671-4c23-8e92-8e5043919606\n5a3dc7bb-d50b-4990-a7d5-43ce89deae51\n565a06d2-ca7c-4881-bd8a-3a5a83e68d76\n9c273f2e-adce-4b0a-a247-60082c14de27\n888ca74c-7770-4072-b78c-396f0d3d12c2\n9144af85-0030-41de-bf82-8cae69b891fc\nec53e1f3-dacb-4382-a172-0571450f59f7\n0d59bfb5-9f9b-416d-8b25-7aa057a5fc7a\n28ad5b27-6a6a-4455-907b-91a1e71038bf\n3afa9f36-15fe-4ab7-87f3-61f4c54ced44\n408aec8f-67a1-4ead-ae05-3fe732198536\n00ee17d6-86d8-4391-b592-d1d3eb69bc10\n5d761a6f-3182-42ad-a9cf-a2c63d9a85be\n5d6cfcc6-cf2f-415b-8b65-60aa2264e764\n2e6e7dcb-57d5-4ebb-b4eb-4daceb3fa767\nef0cb3ba-3527-426e-8328-3a8d154c6951\nc10a033f-1a5f-4f92-a822-36cd5b65535d\nd76193a4-f2ac-43dc-a9e0-773a8e0ae2c4\n95e23cd4-0da0-4697-b631-20f21f97cf80\na87d76bb-3d04-4763-914a-efac304a26c8\ne4401b0d-27e1-4164-b7cd-682c9ee159d2\nee120d2b-62a9-4c50-b717-b64d1fe5a51e\n50508920-ac69-4b4c-bd19-2225f7adcd57\n21c49fc4-1f71-4ee6-b9e6-ca26aeeccf41\n24cf2e35-ae15-49a2-b82f-2643da258222\n3d6218ec-e751-4696-8a94-4cf193b0535d\nab64988e-78c0-4be9-ad63-dea4527c2cc7\n7f8b491d-d1c5-4567-87bc-a5016789eeda\n01243170-4060-4dc3-87da-024726b44ff3\n9ac5dd67-bcc9-47e7-a22c-44d6d4ea520c\n326e24aa-6b1f-4a1a-b19d-1a98f97df556\n933ae173-24dd-4c84-9b5f-0029d4fc46f3\ne53bf03d-af6e-43eb-a983-80effe204bdb\n72b59133-b44b-4feb-a6eb-8b8c09471934\n11d52253-4bb9-4125-87bb-c73e029c04eb\nede2ef52-c63b-4852-8c90-d149a9f39a90\nac5250d4-df16-4113-a64d-e7319b31d684\n0ce1a09c-1394-4ca8-9b97-c0576181e4de\n3e12d134-d65c-46af-9760-28d697438800\n01198188-3792-4ab9-8fee-4ebc337474d3\nc786d104-d983-4627-852d-1e2b8d863e25\neb6b1a41-c6a1-4118-a3b7-bb1e0f7ba02e\n4cc2334e-fdf2-4dcb-b7ba-166c11284875\nd348b429-01fc-41b8-9e21-dadc06d3fd21\n0b1264c5-5bd9-4fad-bb10-99a7f109a183\ne683be2e-51b8-4a8a-b121-8b60beb59fbf\n028cada8-6de6-4ca2-ba5c-06ff7bd463fa\nbd71340c-fc3f-4891-8ce4-8b80a5c2a480\nc4283acb-fcd5-4fa6-9045-05c9a965ba87\nbb2d5fbb-9343-43ab-93c5-d81adadf1de4\nef296ac0-2c7c-4a8a-a8ec-5199aaf22280\n0fa37b3d-825b-48e2-991e-4739aa90ce46\n89c47fe2-3fe5-4c5e-b8b8-2f4d91c013d1\n98065f6a-d8c5-48b8-88f8-e0b4a3a21c5f\n47182bae-74e9-45fb-af23-2c8607d0d935\na8c45640-687b-4960-be5b-271ddb80b0a9\n293b9685-3c23-4761-a6cf-c4c15a7a72cf\nb3cf0b32-bf2e-48c0-af4b-edb356473147\n1e9400d4-d28e-4e40-b9cf-73aba2fb90d8\nd9b11dfc-d737-4c23-801a-15a2a0e53bb8\n8e972a57-8ab7-4026-8769-a3bd638b8151\n9420efdc-6d5e-4bfc-88da-979634c0733c\n11ca4dca-8338-4ad6-b277-cbe6b60224eb\nc1316457-30ad-47f1-94c1-d96da4ccf04c\nd2bcb9b6-fab2-49a5-b4cb-b163ea35f883\nc64fd799-90ac-4097-8af2-3a548216fbb2\na012c0ba-f59e-47ee-84ce-8e339c90e75e\nd57f9979-6c43-43b7-a4f6-dbcc2da83d33\n30c1cf41-9fce-4751-900f-11ba58bb6d02\nbef5dc9b-425d-42ca-a797-a80af3a3abe9\n07bb497a-7d87-4e1e-9ca1-13596865a7cf\n1ed96394-05f6-46dc-a583-1131dec78ea6\n9969b431-cddf-4787-b967-a373cce95160\nd3907b00-1a39-4b99-a83d-bfadcc92425a\n4a9447eb-1b49-494d-b98f-6af93d6e5cff\n8f0f30a6-db83-4d6c-8310-3ff167fcb51c\n7a82efbf-3cdd-4a35-985e-178e9064373b\n68705abe-3756-4478-b589-4e1f5d48bfce\n2659da17-51ae-475d-90b3-7c741043d982\n32335691-cc3c-4213-8b3d-7feec60a6a14\nc08c911b-1691-4e01-a64d-bb44c92538f7\n2523290e-ec51-400f-b1f7-d3e871d33165\n8ef21e40-bd42-418f-b544-593955c87144\nc9d91e5a-20d9-4190-9a35-98f49070bf2f\nd3ca13e0-57db-4e2e-9d3d-0d45490fedda\na3249a19-2b8d-436c-8209-110dac215e15\nb3228557-7e49-4135-820a-3439a69ce3e6\na6d5a20b-c9c6-4bbe-a5ac-56573d5526dd\n454bcc42-3c0b-4878-92a7-5108c14c8417\n5b5a976a-4b02-4c65-ab97-f7c1bd872d2d\ndc842064-3d05-4c23-b360-567e64453173\n1e150418-8129-4c3f-90f3-d0eaf8d231dd\n43c3678b-4f81-4e53-adc9-5bc951334edc\n33695afb-27cc-4c00-9161-de84840f30e2\ndb564561-6a81-4e71-ba3e-117801ef971a\nb7069e10-7c39-440e-80e1-c886c3f237ca\n1f65aa5b-c1ef-46da-a307-15856339ee0f\nfd627fa4-8204-4f33-ab92-c6ab4543be8d\nc51eaff7-6f7b-46d2-88ee-0b823370aadf\nf1240074-dd1e-4e9a-a35e-2516e81ac108\n04d45f5c-e507-4300-924a-40dbc438a671\n0813c1af-13c5-4215-8d22-1006c6ae555d\n000681aa-062a-47aa-9c3d-7aa01b26998b\n691fe136-6541-4e21-b99d-a053eddb88a3\n45025041-292c-448e-b9d0-9f93dda2a163\n8bb9477d-1442-45f1-bd0b-3bd61c9de4dc\nec9d805f-5dd9-4adf-a417-f25e01968e81\nabc3a4c6-22ba-4b39-9ace-7ef43dbc3f5c\n6a896c77-f9b2-48ef-a9b5-3987d5d1abda\n1c447a8c-caa7-48c5-b238-a9032b55de64\n4e0c6289-9133-46eb-84ca-430abfa2d77d\n7e1b9386-507d-4f28-88ac-9702d10c056c\n18f227e0-4b3c-43d5-b875-35614df9c7d5\n38a99a78-458e-4776-b649-56aec5545013\n04f40b4a-e2ee-4444-bc4d-b006f9974124\nf74d512a-37ed-4986-b4fa-6be3f827d0f8\n8e0b675b-57d1-4ac8-b047-7e1bd19e22cb\n38a49b89-ac71-4a44-b551-2d658a66adbd\n50923653-e5c8-44c3-a7fb-1955fb69080e\nde8b3f50-2292-481e-aa30-33784d0315c6\n6231834f-5a68-4bf2-af04-b28dece37cd9\ne3f35eda-9cd9-4f3e-b64d-a31bd44e9265\n04dd1f9c-3bf5-4ffa-b0ea-1984177b02a5\n45aa4430-60db-420c-8385-64ea4d004314\n12e1bb36-4949-418a-93b0-9f651dc84ec1\nf41239fd-e8b3-41a2-997f-0ee2e3b9aa43\nbe594876-0964-4c73-aabe-2e6bf0029586\n0903257a-789a-43dc-8ad5-3301b8d6b5f0\nbe559219-421e-4661-bb81-8de564de8d09\n8b6f6f3a-7589-4609-b3a5-cc0571508922\na7e8734d-096d-492a-aaaa-330252a6a896\n21e2f669-7ac6-4eb3-91f2-42f46242a112\n5824955e-4404-4977-8a29-2e6318a563bc\n27a663a0-4fc1-4066-9c77-5ea3a958ed84\n621dd125-f6e9-4ac8-9e2e-60724024a5e7\nba68ef74-7814-4ff0-a3c0-090768566822\n61691624-df26-43eb-8430-72f9742179f9\n452b3595-93e4-429f-922d-e252aaf291b6\nd3a10d79-e37d-4c2f-a8ff-570ca7a7ffee\n4bee5d51-ef9d-4098-a97d-0eb38e8034a9\nea126a25-2322-4755-af16-a35247785088\n66e4c21e-4cf3-4297-9e0f-22067ab50695\n7b3cad29-2353-4834-bd5f-d9a54069307c\n3cd4ab57-fdc5-42e8-92b6-5e5e06be2d2f\n42a466c6-a005-4e5c-8e84-c2f37bb331f4\n1d057bf1-b4e5-4ba5-9ad0-09765f94ebc7\n4657d741-bdf0-4dcf-9685-6ca8b6b8dce7\n2512e149-d3ba-48ad-9709-6a873fab6170\nd7f736a0-1268-4930-bd2e-b91e65e7ab02\ne2c66b06-f628-426f-afc2-099ab451c7f3\n4cf516d6-b6e4-4d9a-a747-9a41fdbba3c5\n3e7a1822-3c61-4542-938e-aaa62a1d90f4\ndb530093-20a3-46df-b518-e083b3bd1204\n2564d86f-f351-457c-b372-d32ad27057db\n37a996a5-bf08-4e80-8d03-47c2d1c7a852\nda0624f5-d4e4-4084-aab5-b092081d19e5\n9f872239-fe00-433f-9d61-f9ca92dbb954\nb0b738ca-163b-4c52-a6a9-6efda5fe6937\nc6c98634-d5dc-4f4b-9ce4-774f58f4a941\na2125b8b-eb14-4db4-87f5-fa566aa67431\n18bcf202-46ad-4839-853f-3f0e9fc922f5\n2e33f506-f72f-4bd2-93a7-5367705b2862\n2707345d-ae8d-4f4b-8e06-e7d0f4f4a4a1\nbacef075-7de9-46b2-9f0c-fb2221a352e1\n7722c6c4-a61e-413e-ab5f-4e420a2a3222\n48ecb10d-9259-48c9-904b-150238e2fb29\ndab16f16-728a-4f20-8626-adda00e7521e\n65d8457b-4663-4828-834b-0739ea3afb0f\n168f7b69-a755-4bde-8c70-8cb499dabe6f\n377de727-72bc-49c9-947e-eec2b2fabf5c\n516a4787-5bb1-4f96-b8b5-41b2097f183a\n2c79d626-c275-4530-bc2d-c5e5dbd3ba2d\nab1af9b4-2842-467e-bee1-056544a47abf\nc6b87690-1bbf-46ee-8c09-155f6c1131bb\n3f2e35e8-8920-4781-8f88-066bbe60141b\nec3ba4eb-568d-49a8-a3ff-c301bca2cf40\n36423dbe-d447-42f6-b7bb-3cf78a4a1984\n000826b4-095d-45f1-9257-b04e10dcf0a0\n42dfe65e-dd22-4d73-a4fc-689fe630b25a\nf3ed4307-a6c7-44c0-bb77-59425f4862a2\ncdb90a05-5c17-4e6b-9d7e-bf4a22a7f4c7\n74b2160e-b1e1-4652-aea9-ddc26a0aa528\nad9a6bdc-8929-458f-9a9b-fef86459c985\nb6dd3dc0-6f3e-45fd-b869-fe188c20ce9b\n9a465c7e-b98a-4244-bdf5-ba77a3a69151\n916780b4-5390-44c7-bc9f-809b81a348bf\n2e4c4bd0-9549-4bca-abe6-48053359a6f3\nb109004b-98e1-4eef-b7f9-2e188fc17213\n5a27ef1b-133b-4684-ae03-240a0c037506\n69952975-f896-4d97-9259-49abdcd84c4b\n63bfd4b5-5c49-4db6-b76f-16e9fcd539c8\n79da8f11-8118-4344-97fb-07a729f2a856\n0f989754-d23a-483e-b633-e536b14e6af9\n51b50d21-97e6-4295-8ea4-d16e929b96c5\n01c0d2d4-f5d1-4572-813a-813cf8155deb\n2f4f82fa-e1e7-4bce-935d-9be59ace8bb1\na122e653-81af-48d0-ad94-1e6420cb286b\nffe07841-b029-480a-9951-903fc24757cf\n67cdae08-611c-4008-b7a1-f69a5c435a87\n25b68255-78bf-4f41-b12e-0b601f6a1e97\n07640315-2be7-45a2-85eb-782bce4602d2\n2de44bb5-5dd9-42e6-861d-0791d8fcadf2\n6a068e8d-fe40-4cde-923d-0356019800b1\n5300d5fd-1031-4fe1-8605-72445c8478bd\n33e7759f-3700-467d-b791-0320b50895fe\n998c16bf-74f8-418d-b14e-d663d00573a0\nb1295872-8472-41b1-9d1e-6df25e539ef8\n84e4fa97-68ef-4bd7-860e-cb7ecc53c30f\n76d29407-9f78-494b-9397-299bd57421d7\nd1ea407e-8333-4f53-b992-832c01a4a329\n80d1c6fb-56b0-420f-b9ed-a1c18b776609\n40fa6a0e-a353-440e-9223-f6c90025b52f\nb27bdbbf-6c80-43ab-96e0-40147def274c\n944614ee-5762-4436-85a0-60e33a6c8374\na9a5f42c-7412-486f-91e4-6961aa8c22c2\n482a9248-1cf7-482c-a98e-dca3bdeb41be\n6741efc7-f8f9-4d3d-9801-a03d353687ee\n86130ca0-d8c5-4d0e-96b8-e7e986630c1a\n8b810f56-1f25-429c-bb5d-03cc9ab6740a\n34e0e36d-a375-4af0-88e0-2c7ad633ef0e\n3aaacff2-82bb-4aeb-9d2a-c560ddd7e1ee\ne6590725-0ed7-4b7d-9ee0-32ab8df7e5ba\n956e80ec-d9cb-4125-97ab-065f5c374e30\nf520c206-0ff6-47f7-864c-70537e9a644b\n290c6cf9-2136-42d6-9781-475d183c9c3c\n6c0abc85-dd70-4988-9ab1-43c643c34c29\n1e1887b4-7e39-47e0-93b1-e977d08e670e\nf06a3332-be7d-49bd-b4dd-2001d95e10ce\n42aff278-e6f3-4ac1-a452-54bab141b577\n3987e9c0-ce30-4759-9023-93123d352088\nd5cd1b89-ed36-45c4-8a64-4180047af690\nf65fb5bc-623a-4d0c-9970-e986b1e8a906\n1b98ef57-d469-45bc-8940-fde8b8e2edf0\n69580267-0f46-4554-80b8-449e6e9caf00\nf5df5ca6-a1e3-46cd-ac00-6aaa026c803c\nda7bf98e-cb88-42ec-b7fe-02e85b2db326\n8855dd3c-6feb-4275-a68d-4c9896b52fee\n679af9bf-6a09-483a-a056-d4ccbd114dfc\n65a968b1-4f3a-425e-a510-ca3a3727743c\n7b7934e7-e043-430c-8f81-34a44bf0b604\n16edddfc-ab11-4327-b555-31e18ba4e6b1\nfa8a6e8e-597e-45b4-9e3f-e0dfee0b7e78\n73c7bbc2-765d-486d-b2a3-d32dc682686e\n61bab2d9-9d46-4d5c-bf4c-02c75a750afd\ndf8ac206-ee24-4747-8c4c-7acfaba1ea51\n0b15ad08-31f2-4198-92f2-d912998fe782\nf417197c-2396-445f-a0fe-2ac27a142f1a\n9c7bd09d-1f3e-47f4-85a9-d5c2ed429c11\n4f2702bd-6f0e-4d55-970d-687c46610cb8\n6f959943-1bd5-48fa-af77-cde09e6fe9c6\ne2070c20-ebeb-4439-ab4e-6138a56536a2\n7700f939-4b92-4366-ab57-daf7cfb8803a\n00dea085-3f70-45a1-8972-03681590a59b\n556f5d69-8c5a-468a-9316-5cd01b4cc37b\n904d7f77-784b-4498-b9c8-f16350c1788b\nb7c697ff-811f-4b3b-bf64-361185d685c8\n695fbfe4-2e9e-4060-8b7e-238c0443aaf4\n2fc49cae-3133-4dbd-9d19-595428c25222\nc7b2a6bd-0b96-4ff3-a5f8-a605a6b8f24c\n019457fb-f939-4dd3-833c-04ff77539ce7\ne42080ad-1f6d-49e2-9411-b9ac80bf13c5\n90aeb117-8dee-4882-a91a-8e97688d3a9d\n0ca5adf9-c63c-46b8-910e-b06ca3c126ab\n74dddfbe-381d-43d7-bb53-ea64e384017f\n203b721a-741b-4022-a032-c491f973bba2\n1c079bf6-d976-4ca2-98f0-f96fc6f078f3\n04c253ae-bba5-4f3a-9eff-be3c4ad991b2\n66802729-23e1-4f26-b560-cf18f534edac\nd9b6ecfd-5081-494c-8588-ecd607df00ee\n7f9079ee-caf5-427a-ab2f-cd3fc78fd905\nae922745-69cb-4fdb-89e9-6d237ed557aa\nc6d54abd-88ee-41f3-9914-d929204d09b6\n0452d8fa-4495-4ce7-ad8d-b4e470c4950a\nb0fe452e-f191-4847-b2c7-1a65feb3aa5c\n85996368-1aa1-45bf-8c46-5d9f5b553f62\nfbb48a4c-71dd-4ee7-be54-bd3cf6d04b4a\n1677fc6a-6fe0-466f-9b14-922a3030a1fa\n165d4a5f-7be5-44e1-acae-9c56fce2739f\n818817d8-6533-4cce-ad71-27a250871624\n8d411eaa-c346-41e9-9a13-fee9d788539c\n54c4ff65-0aee-4939-81d7-d6652bcc947b\n5c75c55e-6a28-44bf-a234-d4bedff30bb7\n5a443580-4ac6-4e6a-bfe7-6e65b58d4d00\neb1962fb-b7ff-43b5-8733-e10e0f1dcd9f\n2c69dbf7-125c-46b9-be07-5396b4b23902\n16604c8b-4db0-4a1e-9511-c451ad2aa514\n247bbdcd-0a41-43ab-8df0-c7c228723ad0\n36c6c504-b3f9-4050-b622-e49b6bbf8379\ne0264f03-3a29-4db7-80a2-0fdda7c563c5\n9b2d0ba3-f716-4fde-a546-ce4f45949223\na4b66620-1343-4eb4-86dd-e0c3d4b5aec2\nc92d6748-9a14-411c-bb0d-1a8cca53784d\n935369db-f4cf-4d4b-955c-fe9b682f8ee7\n5f4970d2-46b2-46c1-ba37-997e6865eee1\na05553d8-415c-4b09-8680-f60507d65419\n4a4c6715-de43-4c51-b503-95b4a2829d60\n779754df-05eb-462d-8d3f-8721889bfcae\nbc8ea12a-8fae-4126-bcb1-6ae39ed64e78\nf88a1237-f09a-44a0-b143-827d76beea6b\n61435ff4-e4f5-49c3-be33-61b9701b8251\n939b8077-b2c8-41d7-b4ba-2d5ca088a14e\n7482e95d-0935-46a2-a274-9113fb990a62\na88e1ac2-6edd-4f1f-825b-af35f995ad4a\n1543d48c-442c-43d6-948a-58b6f9d4f546\n809b99f6-ce27-4540-a37f-ea0e6c914d9c\nb450ded8-9182-4add-ab58-edaa42e27d97\naf1eb280-6a08-4e1c-98db-2bc1cebbf4a6\nb5b640f7-b3d9-47dc-853c-22982c7699b5\n99be48c8-e16c-4eb5-87ef-3b26a3b97c91\nf98f8a04-0abf-4196-9a3b-ad40886c46f1\nd2834532-35f3-44cf-9ae4-44017e08bc0d\n30b822aa-d72d-4c49-b9bb-9a3315a95df5\n2ae5e888-7f42-4c38-bf06-f1d89c533c45\n5a426e9f-2a13-4b00-a493-bd5c49e32008\n3a04b561-4951-47da-88a8-a90cbdbdfc20\n8acfeaf5-b7a1-46df-ac0e-682cda57ab63\n83d919a8-5627-4ddc-9a64-ee4239ea9ee1\n7b392ca8-1971-4ca3-aae8-616c2a2f734f\n89ce1148-3756-474c-a3ca-60b60ebe9804\nc0e325ec-3059-49b4-b38d-6a18951b3d94\naa053148-e842-4ad4-950c-cbdd824aa735\n658c111e-8630-43a6-ae5f-a2c1cd89f50d\n308ce808-ccc9-43bc-a391-21019f7b02ab\n76e6e60e-33b6-4277-a813-c4c03c5df119\n1189b4f0-d906-4ff1-8e70-f6f58e2f9cba\nc2fb1f4a-9172-4eb0-a8ba-106fb52594b8\n745971d2-b1ce-4a59-961c-7e35dc53c7a7\n999dbcff-f2bb-45c9-8f58-d576a7ad9401\n8b4d24b9-4f25-4706-bceb-0375c73d97a9\n564a422d-0c78-40ed-94f2-e1b61926984e\n5765aa14-3b08-4665-9c6a-42ac99511659\naf910381-c231-41f6-9b0f-d0a2c6c4dfb6\n910f3d0f-2a8e-4df8-a04a-48965d03f954\nf26a3ed2-6e99-4dc4-965a-0546d39e8f01\n19f279e5-53d4-4abe-a759-3e00b1fb8f80\nc6465ed0-37ce-4d5f-917a-129d063d721a\nb8affebd-7ea4-40c7-b114-3e3e9a4cd562\neef7c66c-2d4a-490a-be03-7a0b30bbed1b\na30626b1-d76c-4592-ac94-de9c628d0f0c\n066ce775-4f8e-4b2a-b54d-c07bf371da61\n2c6cbb79-1f32-40cb-a022-3699187b6408\nf389236d-476e-43bf-bc45-afa762b16ef3\n9d91477d-91f1-4631-a935-e6c8ed8d6ec7\n3232af43-9052-4d03-a680-4acb8b18f6fa\n00cbe847-26d8-410e-aa3d-b4749f13e2bf\nd4e50dfe-4b0f-486b-ac42-00f2b51c910f\n45d6127e-72d0-4a0c-8a16-dc8f96c25c87\n37630770-67c5-4d06-b4da-0e0ef1eba4db\nc331ee06-b139-43a0-b4f3-d5b26d3d5f40\n2a72940b-7a45-4ff7-9d54-82d2a1332cd5\nea16a9f3-d356-4b60-b2f1-68062b7b8c3d\n87f59395-9c35-45aa-9ec6-0b4c812677bd\nccb4f0a4-fa27-4ee2-a8e5-c635efaf8ed7\nb6c4d754-1226-4515-8a15-c7a09e67737d\n9550345a-e32c-4719-bce5-17dc75a1a9f5\nb7db8e96-e3a1-4f01-8bc6-bd4e55e257a4\nd9467312-5cda-4ce5-8eaf-4c6cbb57f144\n21d44d02-8455-4f11-9fb2-ce7456bbf08e\n876fb2f7-530c-4c13-b731-c1c3c2f680df\n0343876d-714b-4a5b-9f12-b58a5930733b\nbd11422d-cddf-48e7-a1c0-122effc85c10\n65879738-abea-498c-86e5-a76403d99a21\n9679642a-b853-4ea5-9923-e3e4b8866583\nfe69fee2-845a-4588-b28d-c708b15dd91b\n37b9e39e-d9b0-4e9c-b844-39cf0cb6879b\nc6366940-3c31-4e4f-8700-361c0bc8ce87\nf197c4fe-c747-4b65-875b-0122c1cd594a\n29fd01e8-0fe5-43d0-aa68-c04e088a5f27\nac67531d-3b66-422e-a8dd-c729a59dbf49\n961360c8-4c98-4d74-be01-e5f260f30b84\n861b9a08-c9b4-4c7c-86aa-a42dced26c97\nfc1c09e9-9928-4004-a76b-9faeace0143f\na6f1d20c-c0e3-492a-839e-fd4e8528a3be\nd0017c09-b42d-43ec-aaa9-54091e658bbd\n198a7c57-b27f-4967-a059-d5d20e09f062\ne1166486-54d7-4a96-9dd9-bc68dab53c27\n29a09d07-17ab-4f07-aa82-17a27f88f204\n1115a0e2-cdeb-4358-8a5b-777c50e38ca4\nc6eccdd9-4a33-4f1a-9d8a-a60e738af18f\n121bb90a-1ddb-48e3-9bb8-af4460f56236\n84bc7ccd-17e3-4e41-9709-72bf182ebcdb\nfdeaf698-f7d8-497c-babb-6eaadd7068a4\na77da0a7-49a1-463e-9f48-1e870a0d9c44\n4662cdf6-81cf-4c41-9d8d-7430b96a054f\n714d0733-59fe-46df-9cb3-215f4837ed51\n0a2dad9e-3da9-4a27-93ee-6dbf80390f28\nbf0560be-adf6-4671-94c1-6b9570dec24a\n34b36c41-1da6-4bf3-9cfc-07d7fd4600e1\n2abdd3ce-c946-468d-b403-70d53dc63eeb\n72e99c0a-2dc5-4e7f-b88b-88eb27064019\ne6ce5136-3b3e-4208-96d9-6533a7d1bb90\n4a25eff5-2a26-450e-9230-0fa996a534b7\n0a9d8622-25fe-47bc-9281-40767c64e92f\n7dc5276d-cfca-4539-97a5-66b75b3429e8\n929b361d-dadb-4f0f-ab6e-398359acb4b6\n62d0b7a5-8e10-4b5c-8ae9-58cfab4dc757\n62435b35-3987-4d5d-96a5-3c6c01fa00bc\n902ef764-3bdf-41f9-b406-b3a0943352b1\n625e1546-4434-4d54-9656-1c1d2a167643\nb990c044-e3b9-4b1d-a445-a550f3da0c16\n3195d7d4-388c-4756-9f33-ebab5be2d346\n4fab1fa1-b577-425f-a1d6-d224689d3bdd\nb0026acb-9e98-460f-9fb8-9c8be629539b\n8e8c7294-fc6a-4405-8bee-ac3cdd0cc924\na35bfe2c-dde8-4197-be4e-93dccaef0658\n4c92dbec-42b1-4cb6-a23a-7e087abafc4c\na2be65db-fba5-437a-b0c6-ac4482481724\n8b8cb6ef-a221-4958-b3d6-12bb9b9ef0d2\naa4cec32-fc2a-4f34-95c2-77cdd11f626e\n6cf2c24f-eed8-43bd-8c47-d2c56212aaa5\na4a461cd-2dd6-44ce-b064-42036536d900\neae89336-597b-48ab-9d59-2f7dced31ebf\n5f1ed525-5862-414e-a5ec-130e4a9ee493\nbcdbb693-4166-4d76-9b77-d10336c2e17d\n35aa1a35-19c1-4384-9d8e-aa56dbb37e31\nf8981f2b-53c3-4e3e-ac0c-1429b9bdfbfc\n2d9133fc-8ca8-48cc-b490-13e1a52189d6\nd70eb2ed-f4b1-438a-be21-eafba3d48ada\n87bc4aee-234e-4034-b854-fe604cc7c2e5\nce0b3399-fe05-4538-b7a9-ffcdfcbc86d4\na4482137-d870-4460-9ee1-d5fde3bacec4\n011874b9-735b-4c48-8851-1ba59399a2c1\n0cf7a747-e9c4-4268-a973-e15b4a024c8f\n034b9189-d08d-4fa2-94f3-e1b2b8a13ae5\nbdb4fda1-3f56-497f-bba7-1b3bd29dc5d9\n4aa173a1-51ce-4cff-b3cc-93a0c7167960\n333abf02-f1cb-4695-80c6-bde52ceb1c63\n4734de19-ea87-40ba-b6ab-b9680904bfdd\ncce0ae02-96e9-4a94-966e-4171a0d9eed8\ne094e416-e186-4ea1-99f1-203556dad5e9\nc18c5c35-f7ad-4343-a096-17d20f134e3b\n4fd20906-de0c-4bc2-afbe-922dbddbdf56\n0adca074-c0a9-4e35-a50f-280b3a2ec108\n593d0450-8a27-4c69-aaa5-1b96c6eaafd7\nde5273e3-153d-4c1f-b3bc-26d4554cddfd\nb868764c-d796-4ee3-a0c8-68bae8eeca21\nd11e7aa6-de48-41e6-9bff-bd398f7dc65e\nd07e01e1-0347-480d-b258-fd354b8bedd0\nc31d7593-0e0e-4d22-ad62-34af4ce48423\n0d3719b6-adcf-4c12-8569-ec6b0ad7d060\n3a0e4d3f-11f9-40f0-bb11-f8ffa77f0c19\n45f05f1e-9369-40ae-b3f6-642268823e64\n49ec28bc-8071-43e4-9905-ee305c42537b\n7499d1cb-4a86-4395-9d40-288ab838714e\n4f1255e8-83e9-4221-8176-fcd32360aaf1\n0f659a5c-dc60-4770-81dc-e76fae5c9d17\n812e58b2-0831-4ca0-8df6-ab3845ec10f4\nc5cad286-a08d-47a8-b290-16f1eb5cd235\nb5e95da2-08ee-4a06-88c9-dc9d4fb730f2\nbf8710d3-9983-46f1-9a4c-a58681be6382\n1dcd57d7-3f5d-4a7b-9322-12547cddc4ba\na6119d7a-e40f-4f08-b334-d24190007f89\na1f3a1c0-5275-4517-8712-b530b6d94c25\n4863cdd6-37ea-4631-b984-3a829b0c64e1\ne3632589-49f9-4fa6-8c98-c93b12312ffb\n24232ab1-587d-44a2-87d7-12bcb18dc92d\n5635f1f2-456a-47b9-95c3-11d987c37fc5\n22bb42b0-f3c6-424f-bfc0-daba71354bfe\nfdab0a6c-6260-4f1c-8de4-05a682847a71\nad3ffba1-2397-4475-8642-aa21369ec4b7\n5f83faf3-e47c-4471-9f38-6bb8db42e04a\nf84cafa7-eee1-4d28-abfb-89da40f153a0\n259691d3-ab94-4511-9a03-0b601cec4908\n09ec3bde-ea4e-4933-99c7-3f4839dc361d\n41734008-b410-4ec4-8aa3-d982d7e137a5\nac13d122-3265-46cc-a812-0e93b097fff0\n3a1be28e-2fc9-4b9c-bea9-7563b6898310\nabde3a19-4a23-44f6-9219-4328652870da\n62aa1c6e-f079-4044-9361-77d1c031d301\n40284f64-a38e-46c3-b814-aa61780a6655\n04c43eb7-ffcb-4de4-8940-b42411279b6a\nbc8be4d0-f9de-412f-b963-4d8a6f65a55d\n82928fa0-0873-4145-9a9a-0a56ba5f4e1f\n383d8747-7219-4e89-ace9-fc0bacce7f11\n7ca58244-7382-4bee-bf77-0d20edf6f128\ne77dfbe6-f207-4777-8c61-d1d3d938233b\n03f364c2-288f-4709-b056-1597dc6dec48\n4de9e646-38f7-4c2b-9b63-a476f40ad889\n06924e2e-32d0-4ee0-8771-37abdc006544\ne2cc0582-3e46-49d3-b2fb-627f88f5f31b\n558e3273-1083-401b-b5e8-b3ec48940e3c\nf08c6456-047b-4302-80b9-b03097f0149c\nae7687d3-d66b-44db-99cf-a398b9be1c41\n4a28f062-a1aa-4e38-893c-6ecbc7e26226\n8433aecb-2c3c-4827-8539-cb207363bb76\n20571d39-298f-4847-b4b3-c827792f1b24\n153c30ff-0023-452a-a8c0-bf4554fdcfee\nff251d23-d2ac-401f-bcc2-676c0351e08b\n943331dd-f5a5-49af-960e-f42beb3dce82\n467202e7-d1e4-492f-bb50-a6a4efcaf762\nbe0cb0bf-2f16-4f63-9500-b45b0bbd2c12\n8462c186-a71d-44c5-b9a9-8a315a791ef9\nefae39d9-791b-4571-9462-457bc60c0f61\n674387f3-1ada-49b9-a795-e9674624810d\nb97f86af-f473-4f82-85d3-e16368c12c2e\n958c81dd-a9a8-4592-8271-63ef4f153674\na5cb1f60-1e31-4e49-bd73-1a4e215119db\n388b52ee-4359-465e-a283-e775ae74fcfc\n1a33e40b-4b25-4d07-9c04-5b1174a46e0d\nfb184c83-c4ba-439e-b0ac-590093e03fdc\n89daf9eb-24ce-4209-8b8c-c6e2ec6494b4\n2a3a1053-ce81-457e-b426-74996689f3ab\na67a94d7-9d44-45d0-b51f-126dcee92970\n0eeb994d-213b-4679-9f6b-48f625ab813c\ne7a0b322-8c9d-4b0a-9c18-d1f8124830da\ne9c2bd5a-ed3b-4123-b52c-7a02c220ba0b\n356aeaa9-386b-49c3-bbf2-397179b1eb9f\n0b29ccb5-a3f7-4730-b41f-829b0ba95a9f\ndcbc9644-d85a-436c-891b-77293ff52485\naf5b9f58-9f2b-42da-8c73-849bccaa8f8e\naa498b63-ffc3-4b1d-b2d0-6773e8428b51\naa1ee0a5-c80e-4704-9423-f4e64a6f0049\n7849e6aa-941d-43b0-b9cf-a6bfed2b78c6\ne6ed7e2c-2563-405e-96fa-effcf27a1844\nf46227c8-2bbb-4cd0-b407-85f2bbd3b228\n37c0d87c-1743-4310-a2da-cc98fc04750e\ndbc75033-ac6e-4b54-b7a8-7778eff86f2e\n30d8a9ec-aa09-4261-aff2-213c6d39d72d\ne1b78df9-2d3c-40c7-a5ef-7a991f13d432\n8742570f-51cc-4137-bcb7-4467eed08de8\n0f3b4267-e7d5-44a0-b6b2-1b3cfbcded10\nf786db8c-0647-4e03-b42c-571d1f01b6c5\n2dd57a3c-e1e2-41e5-8847-6a22e018446d\n91b3dad1-f4b5-4750-b51c-21057b2944ce\n1da5cf47-bb3b-4fa2-a14f-bfa78817fe8b\nd6378d37-3a21-445d-9214-3b0ac5712dcc\n136ad941-69db-4a95-9ce2-fc2025741972\ndda66e58-0479-4b4f-a976-25985d1fb74c\n2c16f49e-dc77-42b8-83df-59941297e079\n64395a55-ab0c-4abd-8e22-9a33a1634075\n4991325e-6fb5-45da-aabe-db2f691fd10b\n3dc71f3f-1771-4f08-9683-1f6d00f01f27\n5ffe9d14-9f89-4e41-a98a-c301024124db\n293c341c-6d25-466d-975f-540e816f2553\n0a5dadda-f1d5-4afa-818e-1839fbaa9b28\n0f78ff69-9384-4441-a5f6-3069479459b1\na455d360-59ea-4a92-b791-d2ee5ffcaa49\ncc9f6a6a-1955-42b3-9387-b5841122c9f5\n0755d80e-804e-40d4-a0a9-5ce9c875b0f6\nd7f2b2ac-7f59-4405-8e52-230bd7c879c0\naf3cfe71-bac7-4c61-b075-a9956e8517fe\nf8af0c9b-3efe-425a-914b-dd82bd166777\nf77e71f6-b98f-4b0e-a898-28286307f221\n0470138e-91f1-42f5-bd50-db6a5a5b6cec\n1ebd8956-11ff-437b-bdbc-54067954a333\n4d93ff87-7089-430d-8ffd-2d02caac929e\n1d47044b-f3dd-4867-b45f-1a97bbcc1749\n17d33839-eb25-42ad-a44b-16de957ca11d\ndedaadf5-1a30-4a14-9856-906df4e5d2e5\n2d8ed2cf-e022-458c-b6e9-9516944cb003\nc2d15c9f-c977-45df-9227-01f304c46238\nd6ecc3f7-59f4-4d48-a97d-7abfde5c0ee7\ncb5783fa-b0e6-441d-b3ca-e5055a3a1f40\n6b5f4912-470b-4c80-bce2-86f8b87ca611\na9df98cb-2c66-45f5-921e-451255b66e4d\n150bedb2-acb9-4191-9442-36bc9970e404\nca304c01-c3f9-4711-9f84-60ee2338cf1a\n8ba86d2a-f1c4-405e-bd67-f432811578a9\nc899de7f-8208-49f7-b965-459217be4fe2\n8b4ba3a6-caf4-47f4-87ef-a0f0235a14ad\n689e0a7a-569d-4644-bbb9-a1736126deb2\nd444cb4b-07da-437a-9eaf-2c996b8a27d6\n1be90e66-70f3-4dcb-b177-50d78c09cca3\n5962ad4e-57f1-433c-9df2-58b4713961b0\nb4b0de7a-a8d7-4925-96fd-9d1528efd497\n1be345c9-36a9-419e-a716-912774339884\ne4108e39-4df7-4338-9627-624abf68456c\n1f476381-c0ed-463c-9106-e51452d56660\n39c75dfd-7fd6-4b2a-b3bc-5f17c744b1ed\n677d76f0-c593-4827-a92d-635a01bbf953\nd895dcf0-c3b7-44ac-b109-eb66f193cc18\n9b902b5f-267d-4636-ba75-879978dd388d\nf3499f32-3672-428c-9302-4f3737f285be\nf8e396cb-ae0b-4e46-9daa-bd0eaf7e3daf\n8361e288-ceac-471b-ae95-c98b9df3654b\n72b45bee-5da3-495a-806d-c2f1be1ab5e1\ne4a96b0e-c53a-4f32-addc-68360d622889\n67ed6bc0-0c48-4cba-a82b-534044135f5d\nd41079b8-90d6-4e4e-b658-782bedcd82f7\na8a61ff9-718a-4351-88ca-066d2835a5e8\n937d6433-b771-46f5-b6ad-95a725d54df8\ndfd1547e-5437-4bd8-91f8-5433ef4df796\n78f51535-9c90-45b7-b6a9-554e852b6413\n454d8d97-b05c-45b9-91cc-12ab98af136b\nbd0ae1a2-c18f-4f55-b29f-a9fbceb13bec\n4a85a661-bdb2-475a-8caf-f52b77871665\n7edeee73-9287-452d-8988-35ad1c9eba30\nd8df7fed-ac58-4177-8ae0-e5e7ba6e5515\n640958c7-8d7b-4550-97cc-526f8271f75d\n6e823c01-af7e-4539-840e-2762fbaaf92a\n6fe6fd18-06a9-45b7-9284-c1d52b4ad750\n5b673ef2-8e1b-45bc-b006-6d7dab5ec60f\n4cd1ad8e-df9f-4f6f-8003-209bc997b47f\n4496565b-767a-48ec-9a81-d50f2e3af88d\n83631662-b15c-4311-a05b-4a42341b72f1\nb6c201f2-0702-485d-920a-1c63c0df6e88\nb010b415-42aa-4d4a-8af9-99afd77dd5c7\ne10687a0-1a50-4e19-b15e-74ebac09a4ad\n1b7f0cb6-d376-40a5-9af0-c349f7e6a474\n3cc85f8c-a55a-4822-a5d2-25b33c754f94\nd47e9041-e6f5-4795-b211-e71ca0ff162a\na03a4548-8271-4aba-9e7e-893732001740\nd38c5111-8cb9-4164-852a-a0c168731b9f\nd4e286c8-7b68-4200-8e26-a9091b37e8da\n1ff6e1ed-8f79-4746-b561-b7c397880323\n0492b820-907d-4324-92eb-b5d83d61e00b\n7793f3e4-2b2b-40af-b339-f66d0d2ed5ed\n3c18003a-7952-455c-bc0b-3256da71f28f\n309d858d-dcbe-4f90-afae-3cef76e7a9f7\n9887f703-178a-497a-bf47-25c959b9a578\n500bdcd2-06b1-4ae8-b078-fce30fe877ad\nbca62894-571c-4bba-9075-55317625a1ac\n030be453-f3ea-44b2-be5d-14bd51be1275\n4d78c3d8-8275-4c0a-8175-18c1ba94458e\n68790c8c-a18a-4c42-9c25-4127096881c7\n42f808f1-429f-4f51-ab9c-dd55334c05e3\n333bdfb9-d9ec-4662-a2fd-dd3f5e00b362\na70d0369-b9ec-42a6-be71-78e8c3e662f3\na7f496aa-9c4e-4792-a3d2-8d71a7dfe6ed\n116b432b-7a40-4c20-8b09-1f7827b24cd4\nda545b85-e8f7-4a49-9a9c-f21d8f8aa496\n0c7decd6-1163-4e0e-b9f6-185d6687bc35\n14debf22-5178-49c6-abe4-af9d17f5c1f6\n8353192d-7cf5-4aa9-9deb-a43d3e6efa76\n633675df-d2a4-43bb-af7a-8ed62a220fdb\na38d57e9-bc3a-4210-998a-2f18889e7b94\n7c768e6d-e5f6-4b9a-b12d-fe20fba31792\n55029912-bd58-42a6-91b2-5ebe32eaf478\n4298ca49-41de-4376-9ec8-cfa4c961955a\n0ff788ef-e25b-4c79-913b-23bd1dcee6b8\n2c6b0590-23c4-4e0d-895d-4ed28421f6fc\naa1d130a-4409-4bf8-b333-1e52f82022cb\ncd05f1c3-9ccb-4e80-80ec-b26ba475502f\n1bd67838-e1a7-42e0-9407-9c4e3f7cdf12\n6a621341-48de-4562-afa8-a4a36991e298\na32e0d36-efa9-44b9-b46d-0ff1da782ff6\n4e98f7d4-2be5-43a3-9b29-610addb11688\nb1981eb4-0fd9-4e4f-99a5-038905bb8f93\nf0774062-ceac-4a8b-876b-d61768f2b53c\nc63f558c-39fa-4f11-ad88-bce1198ecb68\n7a56be5c-8fe1-48ee-b9d1-8d96eeefcf6a\n7db92533-bde3-470c-9669-e26dcfd630ba\nbec5a6b1-5345-427c-90ac-5c3e2ccb3e7e\n57728cb6-ab43-41f1-8f56-014559213628\nbfa09b7d-942a-4b71-89d5-1b90c043e290\n0656d558-23f0-4f97-9453-ce9ae3ba1193\necbc1864-9a37-4e50-b6bf-ff1db2f31d76\ndce935a5-6138-49ef-9a91-c6c62e4157ac\n302871eb-114a-4385-8548-ce722871d189\n11876407-0518-4a11-8703-3521c2ef1544\ne0dc25c5-df3a-4b0d-9bae-b29f5a764f43\n2db9e15e-5e4f-4eb5-a6cc-c2349e174320\n5eabdbf7-6145-4eb7-94d0-1ffde2caa663\n58dfad7b-564a-4ffd-9f40-092b94b45ce4\n668afd86-e2c8-4f86-9838-811be35143cb\n5e6e164f-f476-4f46-a881-154e86530fcb\n07cef046-09ed-4f3d-8cce-12acef2b84ac\ne7ea7c3e-3749-4d93-9934-4086f23b5af2\n01380d17-4c52-4976-9e1d-5ee78f69c73f\nab8cdd09-7801-41b6-9dd8-cfccc7026b42\neaa942df-c427-489e-93a8-baa20e30d5fe\n8b06d595-9dad-4731-ac9a-dbec097a5acd\n6fc2b3c2-c646-4cd0-93f8-bc5c75d83f80\n4c37018f-b125-41b1-b18a-4233521a43b1\n3d2a9c65-c957-4eed-bc1b-45ca8762fdd0\n1a96a64f-a75e-40af-b592-a822b712354f\nee6a7375-98a0-4b5f-91f5-59134de81eed\n8c4be75a-7595-4c5d-9688-d1fb40889ecf\n399da95d-6572-4190-b4dc-2819e682b7cb\n18e6f047-d627-488a-abe9-773b21caf749\nc33fbe6a-53cd-45d3-bdf7-1877eddf249e\na54e6ed0-257e-4b07-b5ef-2d005a644cf4\nc8cbb49e-5597-43c0-8b65-e0f215d08269\na4a2e4e2-98a5-4d96-b2d2-8bbbcaeee3a2\na93a7c78-07be-4938-b329-7443a5511e04\n6a64c65d-a98f-4d9f-b446-da439ee446a7\n7211da01-0999-4757-81b8-24a341771fc4\n99094ce5-a6d5-420d-b5f2-79a76e1e6f2f\n4d71a2a0-75d8-496d-a85b-3cd907dee451\na4808454-d667-4e50-af33-8d561effb62e\n9a3ee8ea-1ca8-4b67-8c7c-8b75df756e04\na7e75741-8ff6-40c0-913d-1cfb26c8b050\n856d7fcf-2271-46fa-a5b0-3b1087d5202a\n4f5a9bff-b681-4817-8b03-390553ec5828\n6d79caff-8cee-41d2-bcae-b0fed6009c56\n0bd6ef7b-2662-46e1-9d14-c7969bb92356\n7e031d2a-3db7-43aa-9f03-6d92eb8631ab\n5081b2a4-a75d-4860-bb9f-d4cc791f5cc0\n0e35602c-eb05-4041-a40d-7ea853aab611\n863865d5-743a-407c-a7d7-8b5670beae2a\n3fea0a14-cb43-4c06-b612-cabc6b1d0717\n5c5c46ee-a108-453f-b7b1-14e42762e74a\nf72c169f-0d15-4959-b0c9-128802bed77c\nb9e6a1b4-82b4-468a-9f0a-721e12071926\n680d2e2e-d090-408b-8c85-7966b72540c9\n2a46669c-d8e1-4644-b663-87aeaa800218\n2c75aee4-22f7-4270-be9e-99a8fe9e1992\n55f81e59-ac3f-4fc5-9de0-5876ddc33e38\nc24c4b3c-b4bc-42a0-aa4b-5b919276ea86\n08765777-f08b-4d96-be5d-f66b9c40d262\n4fd31580-6f55-4e9c-8086-de7fe5c05ff8\naaf83ee7-3ef5-45db-a83e-6994aa1697a6\nbf88472a-a0f0-46df-b01e-166bd6914687\ne7f3127b-d099-47db-868c-a2009eb3608b\n546fc1d8-99a9-4c18-b845-e963f5752f3e\n7f2a5c85-5271-49d8-98d1-ce7c1683aac1\n4f39d753-a22e-441f-aae3-5ad60036603e\nf2ddadb8-ccdf-4b79-aefc-ebd21581a7cb\nff1855d8-15b6-4419-867b-b1ea44abb885\n57f2e802-0085-4640-9a77-86727ab02f5a\ncb98a08c-7f0f-4dcc-b58f-98a88730e04a\n9d462451-4104-4ea8-9cc4-d518bfed7431\n3fb467a5-c557-486e-8c9e-e8e151d0e611\n616b0505-22f5-412c-95b1-b37290b1e9da\ne3db00e4-8f4a-4613-9e7e-ae7a9c1faa20\ne71520a3-5bfc-42c6-8b37-1beea1348b16\nfc797a62-ca1f-4b59-9eae-3831e5d1488a\n5e139d39-7898-4671-b26d-c76dd7f68049\n60a9d0fb-d4f1-4f82-b961-456e9a540de6\n14425811-3e52-419d-89f0-93084cd3f590\n94d84b32-f0a3-4a06-a392-c1599d3e15d7\n243bc13e-62eb-45ea-8cb5-277479c44a21\n3044dc37-5aec-4cd9-9b15-da51fca90585\nda3bfbfc-baeb-40be-b750-69d812581b7f\na1f83b4b-eb58-4e63-a117-db654effabf6\na646aa43-0295-4d63-9714-a0908dee4008\nac523236-7a0b-4761-9bcb-24524dd16adb\n7ab6edfd-f9a1-4b34-8472-be0865cb91f2\n4a7c7586-1335-46ac-8f17-b4adea54ad4a\n23ebb3bd-335f-44ec-8096-ba763b57f411\n624dbd05-5714-490b-b5cb-366319760d0a\n5ae2e035-850c-4c2b-a47a-0fcaa05d5125\n980f6cf6-f1ad-43e7-931f-f536372b56a9\na0136238-114d-4d59-a843-672aa1681ebe\n6ac116cf-ce7c-4ae6-a1ee-d891999ab620\n839a998d-83b0-4fa0-84d2-788da1e1b23a\n835c654e-3125-40fd-92cd-ed36c37c8c83\ndd2198a0-2e75-40a4-9045-7950811e8626\n90441aa1-104a-4323-bba3-8052dcc4fe69\n6fe5f271-4a4f-4fb1-9587-3d9637c56659\nce8d8b02-ae91-4e6f-b32d-f756870c71fe\n9e7043ee-659c-4eec-9d75-ab04fce93094\naef00c63-2ef7-4632-ab4d-a0aa21d7674d\n310b5167-6305-4180-bc2b-1ac2b46a635f\nc003725b-9cad-4b6a-aa41-57257cda3bfb\n4655ea9d-9c95-4268-a0ab-5d02dcddb1b7\nf2667c44-a193-4a3c-b7b2-d0d7786665d9\n81b318ff-fbe2-40d1-a05b-bdb2b87e969d\n930e2d55-4221-440a-917f-df38fd179274\n4d93ab4d-63d5-43a8-ad46-fb39e2cc8485\n039d129f-9c75-4dea-ae1f-51b5f3e03a20\n4b5e1841-8254-442e-b2de-e1e1de118644\ncdc9a2e8-8e6b-47e8-b0d3-2d472d007802\n11a4fef9-9e8f-45c4-a567-e2e680f3765c\na95dbcbf-3415-4087-b7b8-bb092784c88e\n11210abe-572f-429d-8be3-0a996d804fa0\n589c98fd-0b29-4c6c-af31-e8f3b53ed6ce\ne9eee3ee-aac7-41c3-b4a8-85244e26f1b2\n75e7a9c6-14f8-4807-8d78-37b35e4d8dd3\n45f22c07-bee6-4cbd-8dbb-9e4667309d23\nd1489ac5-2402-4559-8b1d-8047b701bd16\n56ddb3f9-4c4d-4b69-bf2d-fd383f7123ad\n2e0157a0-7905-401c-93a1-1df37d543f8b\ncfcff007-97ae-4ab8-8667-fe8937e1811c\nb77dfe37-5f94-4d83-b89d-2c0dc602e79d\n6ee3647c-1436-45ce-92da-05b2ed0b8cd4\n320d0cf7-a18c-4860-99b5-9ea021f36b27\n43e34665-b3b4-4605-abdc-93b3317697ed\na2abca0c-cba4-465e-895c-745e70327861\n9467af28-4230-4cf2-97c9-d47be9e7e226\n0cc86ada-600b-4103-9ffb-ecec793de91d\n99cf7b10-ce52-4894-9694-3a7dbaaaf4a3\nd4592614-2b48-46f7-b77e-1ffd345b3ec4\nbb2f32f0-2e92-40f1-a302-29dfcd781d08\ncf9bf7ed-2e57-452d-82c7-1623eb172a3d\n4a5bf63e-0a87-4a9f-8b3d-a70007ec885c\n5641dd04-359f-4321-991e-fe87053a3773\nf6cd6c17-c3b2-41b1-9658-973ac8526219\n83a645f2-b158-43bd-b5f9-fd50be753c2c\n5635cb28-424e-4f0d-9d5f-2e2be6a50093\ndc6dd349-3e05-49a9-ac38-a95c6300c2ff\na143f457-0610-4657-9b5a-929489092fc5\n47121739-21f8-4344-b819-46fe2a21f0d4\nfbe1975a-7d6b-456b-b1b8-e7a863c75a5c\n4e6f58d6-2af2-4f9a-a172-1dbd6a18b9ed\n8eb43cf6-4c47-43c7-bac7-b06ce79ac53e\n1a718b09-898c-45cc-8edb-95054c8e138d\n707c295c-b100-4d06-b60a-6be13d5acd46\nb8751126-b408-4b83-9fc5-4b432a0897a3\n39fca5bc-48dd-486a-a7b4-96523ec6622e\nfd2beba1-b7e6-4ad5-94d8-6c7163e37c10\na509db4f-8025-45a7-a827-8eb604fedeb0\na6151a4b-8dec-476c-a015-14a1e4e4e821\n0a3e87eb-9c25-4e65-9333-c99ee6dd2424\n7a4e7b3f-e65e-403f-b480-d8cad975328b\na9f20bc3-ac98-4ad0-b7df-4e0d7204e436\n7b1d1a35-0744-4d57-8d3b-1f5a39273b74\nf46732ba-7e49-4552-94ca-68ffaa8e50c6\ndc38ea45-5075-4a9f-bb10-49a47052cee6\n4c8f62e7-2d30-47b6-916f-639b639dcb3d\na8d2c397-f691-44fa-aa73-f56ea40d5797\n16f51b8a-77c3-40ff-9897-7008879e3e18\n437245e0-f45a-47b3-a08e-f595c1ea71cc\na165c6b1-4b4e-4f4c-9671-c92c1f66627c\n637b4d10-919a-4d3f-9740-608bce7ee2ad\n337d3d98-1e9c-4bae-b6ac-fa7367080e9a\n9edb0f6b-2ffa-4832-b162-fa71bb644d7f\n3c348a6d-6c5d-4a33-8c06-467968b9f157\nd1635cc3-6584-43f6-9088-1688bf5e3fd8\n31fc722a-d7f4-4af7-9947-6345fd4b62cd\n364a3fc9-6e3a-486e-bfff-8aadacb982f4\nc04d94ec-9a60-4a86-bf61-0ca906338f9a\nad47d3ff-76d4-46c3-b78c-f583d81e4b7d\nee2a2bbe-2d1c-4aa3-b68e-be91767b3ff2\n3cf81e85-aaf3-415e-a0f5-fcd6166e4cca\n609ededb-7000-4b1c-8c1e-64ec1158ac37\nf1ebbbc9-b02c-41e8-81d4-c70c3879d304\nfa9a6c9f-e908-4822-9042-d47a77017ecc\n7565a923-77b2-45ae-9bc5-5b9a17339b3c\nc9cbf433-cc8b-40ce-95a3-eba2f88bc56e\n96341b09-646d-4a81-8da7-39e4d72a58f0\ndadce235-4749-40ae-b8cb-e2188c66c229\n44aeeae6-df31-44d6-b6be-e0e88c2fbef6\n12130cae-e39d-4b94-b1fd-9f33f477f1bc\n972d8f49-8f55-4cef-8b4b-0035dff790be\n02979b4e-765b-4d3e-8538-4f93831b27e5\n45a7d8d1-efbf-48ce-a8f6-b5985e8c2182\n8452dfaf-5af7-4e6a-b83a-dc7c12639bac\n297e4101-8891-41cc-93bf-47c6ad65374b\n87aee3fc-d2e1-4f19-b82e-d42fa88a5663\n93de5ea9-b32c-42a2-9257-2067a75e51b4\n688d3270-ed6f-4ea4-ad88-2e8c8927f9ff\n9a015157-a5b6-4b8e-8df1-9dfd9cf5acfd\n17ff6348-d285-431f-9554-c38894402c36\n9dcb5307-52f3-421b-95fc-4bb946f82ce4\nf68ee9d9-9af2-4c76-b1c2-537eb9bc0706\nf7935944-f98a-4fa5-aee4-c5c6541d1b72\n864ff604-8260-43fa-bec8-cbc3b62cc976\nbdca9dce-9716-420d-970a-f065055d21f7\na1c6b80b-3f7a-4daf-a86a-673bc20b1d08\n926a3193-02aa-44b3-a324-6b231cef29e3\ncf1dc7e1-2418-40d5-974e-a5974b3e7270\n1496b643-b7bc-4f37-948c-354fb27a54e2\nbdc0a199-bfad-48b6-8cb5-90e2ec315c88\n92f2e258-d501-4923-b7b9-4a9037f2ee74\nae029ca0-dad2-43df-b2ca-5756d631c388\n7fc0c0c0-d4b5-48c9-9292-54c9dfb27f22\nf21a0099-f263-44b0-8507-28b8f5e45532\n45bbd701-8751-47ac-b832-0c63aefd679c\n07ada7c7-7d58-4ac6-acae-049a55a32052\n19252863-6738-4b8b-a9ec-15cf1f6df10e\nfd0174f7-13ad-494a-a77b-f2120b99b0f3\n477d353e-fb46-4bec-bd93-9ca6eb034b67\na5ec8e5a-2df8-4a9c-ad9c-482915291646\na3e37bdf-5806-44c7-837d-e6eac4168233\necd9c742-2b42-4976-ae13-3b7a8187c784\ndd9cbed6-f34b-48dd-bb72-f62675e0f080\na89ee07a-19f7-463c-8ac8-95338cec1c70\n0de4eb3f-293c-4b10-bfa5-ffb8367ccf8b\n78ec6e14-7226-4eab-9c8d-accd385eb9fb\n2f28adda-a760-4430-900d-28df2ba1a724\ne67022d1-050f-4408-97a2-6cf3153b1d09\n9ad988c0-d49c-4fb1-9581-e2a3ea60f978\nd9dfaacd-5df7-4dab-934b-8d85068e6cbc\ne6e759cc-8df9-4626-81a7-828fe5e4ae48\n81b38af8-5e17-4258-847c-4f759287c136\nea613fbf-504a-42a4-a41f-fad8241816c2\ne476ef52-90ba-44e8-8f59-36996bb8750b\nf8f99fdb-6634-47bc-8083-07f39ee75642\n71cfabdf-f39d-4227-9e9b-84b284a6b63f\nbdd05420-633f-4466-a8e5-9081cefb64d7\n8ffde31d-aa9a-47ad-910a-4689dbb8f93c\n35926660-533c-422d-9a9d-9ba47a159342\n0efa8c82-9856-4921-a20f-97a7093bdd4e\n739cded4-e8bd-4e4b-bf6a-44a0f1018483\n7282970d-6631-4b1a-82b8-8da6b4d83546\n005223f7-57bd-47f3-929e-47a0d96c47fb\n5e9fbc64-75db-4ee4-b157-6b0e7dadf44a\n842024f1-339d-4e70-bd3a-003996953574\n177c3fac-be4c-4cc3-9e81-0588d6b7bfc4\n77bc6e7b-aa50-49e8-ac4e-39e63c34e9b3\ncc11bb55-d3c0-4c9b-bf14-c427f0b4df68\nacc83843-ff95-44eb-862e-119e6271ecae\n76170665-dacf-45c1-b937-4b3f1fe95bea\n869169e2-edbb-422f-a5dd-b4e92793ad5a\n60682602-2c02-4522-a569-3199f991d7f5\n6f939e40-c27d-4fe7-b4f2-66bc014d8cf6\nae8ed831-816f-478c-a069-f2773e40a963\ndad994a6-a219-4a94-bbcc-00fe1936b25b\ndccbd26b-9bf2-4ba5-8b8b-c693c2710012\nd4b4227a-5c77-41c4-941c-c2406c285768\ndd33b337-1926-478b-bd09-48091848df2a\n5ff5d3e1-3799-4748-8b3c-26c37942eea9\n79a090e9-8417-4043-b5e9-b36e381ad19a\nd60b5131-011c-4eda-bb8e-31bada026be6\n475ff3b1-571d-4160-9ea2-dbfa5834da1c\nbb2c8aee-4b3d-4762-9b52-aade05a758c0\n69ac7c71-2134-4971-a4e8-a69bc0d631ff\n07de4265-c696-4963-b0bb-ca5b53f0ea93\n70799a6e-6fd3-473d-bf9d-ff98247a8d1e\nd0eebea5-ab6f-42b0-aa05-ba9391e5e564\n1c0d56db-0fc1-4dad-8877-69bb3b035ed9\nd40b1188-6a5a-4416-a682-0c5c8e1c3e30\n11722874-0d22-44d1-94ee-a50a5d312cf4\n9f2065e9-c868-4c3d-bf65-ef2aff1f2bcc\n88ecab2b-b058-430e-987e-3a2bddd884ef\n8e82cf31-b4bc-47ac-83e1-26c68ce06844\na47a7f59-d686-477f-8d66-2f270904de88\n52525373-08c4-42a4-a7ee-41118411dcd6\n6f897c88-7349-4914-b213-5e53058ab277\ne803951f-7a0e-49b1-8670-b11b1a9c9e21\n7ac68891-48ac-4714-bbeb-637be18046f2\neac0e37e-a25f-4dd2-882b-73073514418d\n9698bad4-e19a-41cf-bd38-01f6b191498b\n6f99e7d7-819b-4a64-a99a-82e1ce5268b6\nb132847e-e598-45e9-889f-d60aac5a56a1\n3550087a-91d0-4be1-8898-493d93cc92b0\nf324dbb3-5453-4f72-9450-dc1f87f0e21d\n14253a5a-3ac1-4e67-97ff-045ee2d06807\n208ff999-2bc8-4551-9d54-9daca3825e9f\nd471aecf-c71e-4a70-a485-f916b0a3817a\nafd660c8-aa23-466b-ad69-ec900241634b\n7860735f-d482-458d-962a-c8d1dc473863\n04d9a08d-b803-43c7-bf44-1f4115ef651e\n6ca80635-76f6-46df-b130-a5c148bb9ac4\nd85efa8d-cf9d-4299-b967-37c9ce50e6ad\n79003488-0f9f-4b5d-bdb6-3cfab1579197\n78ef1130-de08-42f7-86e7-932d35dffda4\n23c39bcf-1108-47d7-a34e-1df114b89deb\n435b10f0-06cc-45cd-bb0b-4273cbe64706\n46e80006-3e16-479e-84fb-a3ab09e13a24\n5d779a70-ac93-4f17-a504-3b6d2bfea522\n050fc27b-48e7-4fe0-b296-bd1f3fffe647\n3665e37b-ef41-4a2c-8bd4-899b3dd489c2\n4f5b6047-722f-4403-a427-787377e4b269\n8acfb0a0-996f-4ee5-8aab-c6c2a47ec79b\nf7b8b74b-4624-48ca-baf2-283caa1c9f4b\n0e921aee-d0f4-4ec8-8608-5482a71fc004\n169b5f6f-5d30-45f7-94fd-59bccb5d698e\n9293f63c-5b6a-4fd9-ab4f-d244182f48a8\nc754d44f-1846-40f8-a3a6-132fe2b5b8cc\n747266dd-3e89-4e60-9eab-35b63ce2e751\n18b6a3aa-51d4-450b-842c-c72a0bc5f599\n24961c7e-4fd4-48b9-a9cf-1ea51706da5b\n1ddc72aa-5f6b-4c95-bb35-6ac1d3f37e8a\nf5eea0cf-b4b7-4477-a131-176c58194204\nabf370f9-b252-4533-a007-68f730c0c446\n053ea09f-7a45-4697-a59c-6c47ae6f4e8a\n72f52452-05f4-4501-a13f-9bee28280499\nd0ac74eb-f319-4142-a6c8-18952d42e8e6\n44201873-4fbd-419c-9d57-4987531802e9\nd2966c9b-d388-43a0-8823-16b469b11060\naa5d96d1-5805-4df5-85a6-aecc1fdf5b19\n869072b3-6427-4096-a5bc-2deb7c3dddb3\n4064101d-ab21-42b5-898a-9afe3c22b91f\n8ea66ff2-0dcf-4619-b9b8-f3739126d8eb\n13a87ae9-4bc6-443e-b211-acc44e67d6af\n772bae53-94ee-4700-ab17-fe66aca0c495\ndbcbaf2a-d890-42d6-ad75-915836b16f3b\n2b882152-6a05-4ec4-ae18-66c850f5eb26\n0d033ee2-f2e6-409e-a624-c7391570e36c\n3c9b7093-60c1-477b-84bc-cc7301c157c5\nfa12d108-3864-4ccb-b080-a7e353179f80\n7b008dd0-78e8-4b0e-8984-80cba7f6959c\n3a11a5a7-7700-41b5-bfc3-ec00bfecdc26\n7c283cf0-d307-434f-bf61-c96268a45f98\n4d4246b2-9317-4efc-80a9-2f12d83ceb1f\ne45440d9-6314-46bc-bd98-205804051115\n3ce47d17-38be-4f36-9477-7bc858d3fa9f\n57410966-115c-467d-a5a9-e0508f028e6b\nf4e3ff35-f03c-454e-8c12-70baccd76509\n67d48f7d-6939-41e8-b4bc-bc1731fa867b\n6d8f7acc-3add-4882-86bf-d3dce48b6a25\n5ad5f35b-ae2b-4efd-afdf-e41f9b23a910\nb486f4c7-a5fb-4bef-8f44-26abf38d5633\n3db22b39-9444-46e1-bd73-226654b06eaa\n8fdc780f-a279-4cda-99ce-10e2e61be83e\n661ede70-eaba-45b2-8c27-cdb47f9344b6\n9e6d4bea-4864-46ce-951d-613d7fa742a0\nac1c7154-0004-43fb-a85d-842e7abcf06b\n1fe74ed8-468f-4f28-b83d-63b29a57b061\nc9e911d6-2654-413e-b4ab-348ad73851a0\n0718db49-3c2b-40b6-b7a5-328469135d59\n0b72a494-a2f8-4a8a-9a2e-a2b0528472f9\nd04d8937-d45d-46e0-880a-ff0151de84e1\nd70c7936-65b7-4f8a-b81a-3872cd4e53cd\nfc313ca9-3dc4-4371-9f50-74c62af102fd\nde5e3280-b3e0-4970-9d96-37cad7988582\n3e45ec60-e50f-4c60-8e99-9369e3a2151f\nb518376f-c046-4d67-bd85-c3d79ba0e2a4\nb4d77ea3-6d7a-4747-ae07-a45ce64ed1eb\n76e00067-542b-4448-8003-b5f609e8d48b\n7225aa86-a1d2-4308-b72e-0db47fc43c22\ndaf97492-b24a-4c70-9809-8297acb17009\nac4bed96-fcfe-44a8-a23a-c4f1b77a04b2\n9da9d200-97c6-4948-85f8-a1d13026346f\n9941de6d-4358-4187-9987-b5d97bb50270\n7f181adf-9d6e-4300-ad10-e519ee62913c\n7d5f4a3e-c076-4915-af66-6c0debb990dd\naa55ff76-e7d4-48dd-8a54-3294d538df1d\n6b681dba-2ec0-4eb7-927f-32b424e7f343\nabc11e50-a9ed-494a-9a23-5f2a94783040\na4c6195f-da1f-474c-9a7a-f5e12b9f7aa9\n1f085b84-51a5-4847-b85f-b96788aab90b\nd182019d-b3c6-4d80-b534-dd9e1c7295fc\na228c272-0545-470e-970d-625e3db1dda6\n119a32ba-3426-417d-b8a6-ca63db68b217\n33c8cd67-b418-4b12-ac8b-f45a6fe011c4\nb8e63458-d667-4bb0-90a3-a80bd5496902\n1569be6d-eff6-4445-8cef-2b869a63bae4\n0af4ed87-4a4c-41c6-8386-3c95f457d26a\nc8caf8ad-4d4a-4bdb-8840-fba800d0af4f\n60e1527d-8452-461b-9346-e6b046e1aa00\nc3c49e60-ddcd-430d-acca-f96c43bfad0f\n57a7fe61-18b9-4a60-93a1-28bad249c57c\n395f266e-457c-40dc-baf6-f8927a748b87\n4b35a53e-208e-4dfb-8521-15601956f385\n5ee19b32-ce79-47ca-bdfa-f3d87defb989\n59fbe07b-9263-4741-b184-49cc20c453ac\nf6ceac70-d66b-43aa-8f57-03634604f6fd\n2e2f11e1-b92a-44ac-a657-d644d98ed953\nee3e8d03-3b21-4b48-bc79-4ea79bf755c0\n188a89f1-15f6-40bb-8f31-66654969c642\n2fa00bbd-9001-404c-ac15-36e2754fb274\n05449371-51e3-4e90-a1d8-7861721f9970\n0dd31503-9490-4eea-981a-1f7a326218e8\na3670562-7151-49a2-aa94-409df9a5da9a\n10e7e8db-739b-423a-a894-a489ce1aa552\ndf060951-c19e-40a0-af3c-3e08374f756c\nd86fcd75-74db-4d1e-aeec-b3d63850d767\n57e2335e-2b65-4018-befe-121aae16ea99\n43a09a30-2610-4be5-a155-142ec2ca32d6\na32ec6bf-b643-4d7a-9f8e-a301281e4d9e\n0598a69f-62dc-47b2-92d7-56a6118e6d9a\n27d214a3-3384-4cc9-a2bf-9a3ba4ff425d\n4234e67e-429f-449d-947c-f9c0216cbe19\n53712bdc-ae82-45b2-a281-52802d5079eb\nf087429a-cf42-48dc-a1ee-84bf8b8047fc\ne5cbf15e-d82b-4e3a-9338-aa3e0892c005\n33251c13-c50e-4788-b452-ec347ce9a6c5\n5cb05dff-60d9-4ce8-a095-f11fea8f18ce\na83a0fc5-b7a3-4538-813b-ec41d912f53e\n776d4a0e-b240-49fb-8f23-f687da5c7cd0\nd11758a7-33e8-4b49-9295-bb725ecf4900\n06c19ecf-aba2-413a-9424-1ad95a0e78b4\nf827684c-8c23-442d-8d60-3191a98bb07a\n0c682632-29bb-4174-a9d2-6b3e11dd5601\ndb9698de-4af0-4cd0-80a3-3321c5673e56\n662b2b52-1605-4eda-a843-dfa396e1df4b\na517ce90-c805-4e5e-ab24-dc1788d6b206\n83aa1b81-9dad-4604-88e7-51df5b3994e0\n8c7787a8-b47e-44e4-9790-ad48a1909466\n5716442c-e492-498a-9fe7-dcec89860699\n6a60417a-e300-4690-b033-69a9ceca4c10\n12e76939-6990-4ebe-958e-207289fabc87\n76da9222-6328-4537-ba28-bb0813772be9\nbe8c74d5-aad4-42a3-85d5-158131720c43\naacfdae1-ad4f-41a1-b9bc-0347fafcfaaa\n388c82d0-8838-42e8-9a3a-57ad2442749d\nfcb3546d-8732-4e79-ba66-629efbd22b3b\n709e02b8-c082-4fa5-8a1f-21f319a101be\nc6490638-a382-445b-92f2-d88ae79471d6\n73f9eeb6-8b6f-4df7-a266-07b7d816d470\n91c1d6c5-3dba-4e1a-9b48-9eec9633ff79\n27950064-3bec-4376-9edd-ed1b2f24e5da\n470f8804-7880-4c89-bf85-40b5183554dc\n8304fd0b-1e75-42ae-b592-d7feb7bcf776\n56737ae8-1c25-4702-a774-7ca66d571c7a\nbe21e086-f7dd-46cd-9392-8da238e351cb\n4b7b0cf8-c866-4bf2-b079-093561a25052\n2c378edd-448e-4204-9468-c30db17548c8\n41f4d2f1-c68e-4cc2-83d8-0f7e6c744f83\nc4f12949-916d-447f-a390-9129baca2b48\nc32ed3e6-0cef-437f-a124-c59da8dd4ded\nf152a002-0155-4fb1-b37c-f043676d90a6\nf15680bf-47ab-46da-8ad8-b24ddc8786e0\n7e46ed55-e688-462b-9a3d-fafe5252ca56\n2c7d92a2-0013-41c4-a94e-a9a9521c8f4d\n9a85bce1-6faf-484d-9a34-6b3236bda0aa\nd22ec3e5-8442-4a1d-bbb9-76997cc63e00\n7c1b796f-e364-42a3-b143-5f70b3bf3e29\n0ab9fc96-9b7a-45cd-92af-072aa535ef78\n95e791a4-8431-4c54-bd5b-93b8cbd58a1b\n0163b1ec-a214-4e1c-b4db-952d0e66195e\nb2f9561f-7ab8-4e97-81a7-b55fea035e1e\n0021ee50-9145-46cf-a60b-8253b26d7ea2\n7a107d0c-f559-44aa-b3d6-130a9dcf177a\n6941b0e1-d798-444f-9ebd-9d096048616d\n6c126fb1-2e61-4de3-bf2e-275d6f776824\n7657583c-dae8-430c-a05c-7222e1e79f6c\n50833ed4-8979-4f43-a833-eafd2b932ea0\na43d62ca-dd2e-4a66-8092-60adb37a56cc\nb2b9eedc-9e22-473d-b9e3-c0ebe8eefd42\nbc8de007-a9dd-446f-8dfd-e467b74f4e22\n7ad72dc5-784d-462c-b6ae-7587fc16002b\n1bc595f0-893a-4b84-aa09-20718bbe8716\nf47abe53-6401-443a-ba35-92e1eeede89f\nf2a31b5a-74da-42df-a53f-70c8bc8fcfb9\n031a6d20-9ec3-41a8-9afa-f33e2a25676f\n0a5d868b-cdad-49b1-b9d8-797b58ee6926\n0e9a7f6e-cedf-459a-9de1-0dc60c92003a\n7ec067bd-7c07-4219-a695-720796ed28d8\n15befb6c-c750-410f-97e6-5af0c41f65e4\n2fab8e05-f930-4608-9f60-192af8fed303\nec08e799-028e-4f60-b7c0-6a40e7d79d94\n13b40c52-743c-4d79-9da0-f2c2d3ae8c1b\n9c028350-af1d-4a60-8056-36f8e3055bb9\n81e9fe43-1edb-485f-8761-c45af9a6b80f\nf5fd598a-fcee-4794-8788-fff9dc5b7a8d\nbb6971f5-8321-48ad-aaf3-d325b2b1451c\n125e8e11-2034-41a3-bdfe-d4f3b9f37330\n88da9f49-1847-484f-aeca-5548163c39ea\na5c51699-7621-437d-ba81-b541cbf67dbc\ne772e17a-e64d-43fb-8149-cb17009751bf\n22f589e2-7cb7-430d-8555-5f71b60686eb\n55c656e9-addd-4eb9-9707-3dcaf9ef8f49\n6d7a65b0-b3b3-430d-b5a7-89f7cc70bf65\n41d06bb9-79e6-4d13-be8f-5752b67cb485\na03c8af3-b6f0-46ce-babd-705232e30ea4\nc78e91e8-9c87-4e8e-94ac-cc6d61ef4b03\n0fba450e-eb25-4775-842b-ad24db260db0\nc3f4b9ef-0822-4cb9-ad0b-ffcf6672af54\n2f624cd6-10d6-4f2c-83df-39a4c6d78ba0\nf2838781-17c2-4630-918b-ba2ac0bd26f7\nd76071b8-329c-40bd-bc55-af23c7449084\nbfe6d711-b27e-4f7c-9413-f330909d991c\n63cd7232-b622-49c1-8ba5-ed79ab6b2ca3\ne5b291ea-adae-4fe1-8a53-391beeb18b7f\nc8e6621a-ca48-490f-9094-59c6f66fb531\nc118524a-3a41-41bf-b64f-e6a995db9146\n07af72b6-2a0e-4af4-be37-5a56e669be53\n8263b5fb-feea-4bed-81cb-2612557631c0\nd218ed3c-1358-441f-8def-3c4ca7def5d9\n095cd873-a56e-43ae-b745-b1f6c9a67812\nd39f3341-b750-425c-be52-12af540fba9b\ndac00eea-8f04-4de7-a0d8-f35e911df4be\n44e68fa6-6386-4850-8d3d-e1ba51c10990\n7d0773ac-477e-42f7-8f75-fbedf2fb5c25\nf929c3e4-4193-427e-941a-0147fd9fbfb6\n66396b60-4fc0-48eb-9e2a-eea0c188b378\n23ee1b5c-4d30-464a-850f-d837a5aa826c\n59fcdca3-5d64-4256-a123-5cd4af309939\nd9ab2b70-1eb5-4814-8476-32ecb5928161\nbfabf181-e2d7-42ed-9914-50a3b0477ff1\n95513f6a-7b0b-4af0-b81c-ca3085704717\n4471c12d-a02c-4b86-a3b3-9cb7e8b46f55\na21ef1d0-a8a4-44cf-9849-1fe53c4125b2\nce3506dc-9303-4d87-a554-74d5cf43542a\nb40e67b5-18a8-458c-a82f-95cee3d81f0d\ne747c35c-da9a-4694-beeb-baa89ec78753\n3c17cfb5-b1e2-4f68-8c7e-6f58aaad6f34\n70e76a20-e1a8-46d8-89e9-f60ae996ee5c\n3a1ed065-7c5c-490c-8ee0-0387b59d4d78\n02f241c8-21a1-4343-b412-53fc84eec8d3\n6d6c6106-24c7-4cac-af43-28195a5f2aaf\n9511c5f6-5069-44f0-a0a6-3cd1cfdfca78\n8303380b-4d08-4763-b4e1-e14b81599552\nebc7087d-6eff-40f9-b0a9-076aa0a2ef02\n811a3f56-5621-4a0c-95bb-9f293d019661\n4651f1d2-5edf-49a2-8d72-c9410c3d01c2\nd5c34836-39e8-4f2f-9c88-5596fa88bbf8\n30b13fcb-0449-4356-9059-7060a83b2c27\n755595b6-a9e3-4acc-9886-24d5363f4240\n3547e27c-01b6-4fa6-b0c8-89df3464f38f\n2e37e00c-83cf-42e8-bab7-67057bb89b35\n25c2a395-8e0e-4da8-97b3-eaf46566d195\n29abf833-2365-4d8e-91ff-aac747846fed\n719144cb-2517-484e-84fc-422aa4e047ad\n7c20b6ae-f383-4d44-81b4-7ef7be804141\n3d7ba81a-2a66-46e8-a208-31e103475c04\n4dcdd6bf-71b2-43fd-acc9-8ad49dda8c31\n31e61f8f-a56c-4800-b2b9-ed5e720d5f05\n06eb7b09-3662-4260-8002-bbec835190b5\n4f69349e-e15e-403c-aef0-8fa05db42cd5\n569986a9-e904-4099-9b09-88d8603bb60d\n084d68b0-2ee7-48c7-a08e-c3742953d373\nf3427962-289b-4490-9688-9d0a4761ec2f\n937aa107-eeed-4c7b-b7b2-78b4871c3c56\n2e7aaa86-0d45-4613-ad39-17ad37572297\n68b04bfc-958d-4a7e-b43c-cb729ce5c545\nd5771d12-f51e-49c8-9b3d-24e279e450c7\n73a78174-ceaa-43af-a3e9-11fd6d1678cc\n046aeaf6-e589-4632-b4e5-a2975e5a3a32\ncfce61f4-d4d6-4690-9a1c-7c9a7be9363f\nf302b14c-ad68-4172-b98f-4f4d5ad997d2\n67d92adc-e7c5-47b2-bbe1-eef2b69e8a0a\nf53da688-01fe-484d-9cb0-10cf5033050d\n12fbaa3d-bb50-4837-a79e-02baad8abb53\n8f9bc632-ce2d-479d-af6a-4b06c75affa2\nae1c4fc7-baa2-4086-8e27-71bc1a69a480\n1de15423-9348-410e-9552-9d741ef3c680\n3d9bb44a-386c-4b11-af2a-c0015fff7103\n93311d35-7780-4601-a450-9403ce31afdb\nc8d810ba-db0d-4c5b-9b1a-f3a6426ecb50\nb2dadbcf-ef6c-4004-8f86-23971fa63ff6\n6805fa5f-c93b-4589-b153-841210196d6a\nd15a7cfd-8dfb-4311-a154-f4cb871c8e03\nd4246a5f-5363-4f12-9eef-cef31c4d7280\nea33212b-bb6c-410a-a9b2-b676af6c9f3b\nabb8951f-482d-49f1-9e39-14ea3ffe8055\nefb22192-8107-4ada-9981-5b37a52f1f41\n622b2b2a-b220-4b17-ba47-5cef5a23fc5c\n07307621-9f70-43b1-8339-5f5f4b40b762\n291c7523-4cb5-4909-83c6-fe7233184ef0\n38e75c5b-c840-43fc-a23a-f5c4e903605a\n6ec72678-dd95-49db-b3da-d65b39c605a8\n02329579-371e-45b7-b97b-e7bd125208ab\nb74e927b-0334-4ddc-a17e-83b8d889634c\n0e2ac0ab-89a6-473f-bfbb-4ae91ff31da1\n3247d38d-cc9a-43bb-956a-b59b46f9b270\n58665011-353e-46f9-8b86-1d86127b6543\n7104b3f2-4e68-421b-8aff-14c94d2c2063\n47585775-b8c4-4d0e-9933-e013b588281a\nf23e6804-f291-45bd-adc7-57f2915681a0\n9822a520-8743-41e4-893e-416332f25e09\na177bb16-ea68-42e1-9b74-12ddd94c4edb\n88c45110-f15e-4dcf-853e-bd83b580d3e7\nfc9f79ff-eaaf-41bd-80ec-71a8a39e848a\nfa607a9d-2998-4b12-868e-d339a499ae46\n44f79710-a149-43b2-9b11-3d08c2c8babd\n48c49f8e-b8c8-4c11-bfbe-6d6e6e49c7c5\n8cb1a840-69be-4e85-bcf9-c3e87728ab3e\n7fa3b5f4-8287-493b-9cd2-31a46ee30a32\n4b7d3510-92d8-4689-85c8-66bcbe4befa4\n26556f1e-e517-42b1-a3f9-2d4b2e8e065b\ne3beb0bb-cb22-4e16-ac8f-c2e6197199fc\nf074500c-9536-4708-ad66-662022818e19\nec4afb2a-558b-4153-8fcd-c9c521133216\n8acdc8c1-67a1-4b60-96a4-35f0a3dbc651\n4fe891ef-b6ae-4cff-b9e8-20abc52d8f53\n1ea327a6-c5b7-488c-ad90-c4467bcd9402\n91ea7775-5f81-4ec6-ab45-628568d55970\n819415bf-2111-4430-a214-a14410e6407e\na0be5ce8-ab26-45e6-a26c-0eefd2e6f72a\nace0991b-00c2-4d5b-800f-ac23be14adff\n4cbfb543-d501-4d89-9e14-b8c9578bc548\nac80a0bc-99d9-46f2-bb7b-9710914c1206\nf65bf7cc-4f2b-4e0e-837d-4c8597c27153\n20fa8ceb-f3f8-4181-829d-a4bb4418e31f\n0bc4cf9f-4114-4363-8c59-f7736234742b\nabbbdcd1-8692-4c67-b1e0-914cc74898c1\ne6b908b2-a1c9-4e25-88ee-7cb0dc362d16\nbbee40d0-8483-4786-a12d-3d5887740563\n2b527e3a-39fe-4604-9abc-b69874dfadb6\n58325eff-648c-4399-b0db-4be825ded3ed\n351441f7-7237-4d43-95bd-8b966dae4575\nb7dd44f2-5581-429b-9361-7fb746ca571f\n36a20990-5c9c-40fa-aca2-ce1f992a8e7b\n642191c1-c6fd-41c5-b3ef-f8468420d3f2\nae29af1f-6498-43d1-b96a-9ebc55118868\n25b5bb93-b9fb-4c78-8809-3b7843a0ee61\n8a02b2c3-8a12-4005-9b63-d7bd14b8d9fb\n64f52ade-8696-48f5-9e52-2db0ec450b36\ne85a75af-b19e-4cc4-9f0b-a8c3f330a95c\n7e9d90a3-e30c-499d-97ec-90b1aadc62b7\n58491657-eee4-4c1f-95b8-1fd284a9ce7c\nf85bd040-51b7-44d7-a92a-51fd7afaa025\n91bc9a23-33b1-4eb6-8e25-a53d49a41ec7\n280f95d5-a327-48db-a5e9-4f97e6fcf17a\ne20a2193-ac28-49a7-9fe3-67167f1f15fa\nf2a9aa1e-ebae-4c9d-97ab-c58dd87de262\n3e105724-4113-4f99-9545-8ef87f9423a4\n183c04ce-0434-4f1b-bdde-d90daf4771ec\n1a0dd6af-f46a-45fa-a331-70fe7bc8d4da\n905b9da4-2e7e-4b68-9cf7-406003583f28\n869192f3-ecf8-4a1e-88f0-a6f9c6afb7d3\n16bc200f-32dd-4890-87aa-69dc16b69182\nc14ecea2-7460-4560-962b-00ca91a39eaa\nb54714eb-0871-415e-9782-7e61eb56780d\nb6a453a0-22ef-4810-bbef-d15ca5e9f8ea\n22a02a6e-bae5-4420-be8c-a9fc074b4a70\n6c0690f5-4684-4b42-9f7d-dbe269f56710\n01747f9a-1874-4d2b-805b-a2f716410568\n8e7ced95-7d5e-45d0-9b2c-b75af11a7e70\n56a3c786-02c1-4602-9be3-d078cbd0a4f6\nbb11adc0-e240-4afc-a3f8-a6c0919161a7\n277230e2-1248-4be2-a5e5-5d3583564bc9\n3eb4260d-1747-48f4-a7ee-214acc3654d6\ned3afa22-0a0c-4020-8066-28db0175b873\n2636b7d2-2140-4ffe-b9d9-641969e966d4\naf36182a-3a5d-4887-a7e4-9685d9a4b8a7\n00e485de-2b9e-4bd6-b23b-adc7cc45bdca\n1f04f3ff-64c5-4904-a1e3-4a38cce823fd\n20a987fc-b03d-4246-8842-c4c36c43e177\n40aa46d4-c9ef-4f2a-b05f-6beb8b51929d\nc8b94fc9-0ff7-48ec-b5f1-61451c6a8adb\n57545e65-755e-43ec-b8e8-3a6f0a176b5b\n3b9e9322-b7ef-4727-8de8-6bb3b9b10e71\n723b218d-407d-43fe-8c1a-d336e5fdec10\n012ce0a9-a3cb-447b-9ac9-b61194a537d4\n69353b4a-9171-4ef7-b133-d5558bab38f5\ndf8bdfb0-7b5f-4052-baeb-b200b80cf13f\nd664166c-3319-4350-8755-6a04089b96e5\n29823b1f-ec81-4fd0-9921-0a7c58711756\n11d1f37d-f43a-4bc6-a412-b6683f826b3c\na9f3bd10-34fb-47c7-9488-9c887ffcdeac\nd4beb199-b5d2-4efd-b3c9-efe0f15b4eea\ne8bbe599-00db-4330-92cd-ce75691db827\n4d0595b2-c292-4f39-b18b-bd745f1001c1\n2948d124-b962-45c9-94ff-91c4b253e500\nd2e89004-50de-4eec-9ce8-67da620a9ad7\n07eb1691-b063-49bd-8eb9-97f5a0c4f634\n9cbedb0a-2790-492c-a222-9e1c12edf5d8\n11fb7062-82ea-4e0e-b808-3d965d0d04ff\n699c8ddb-91ea-43e6-852f-50f32241eb30\n4439591d-0d39-427c-a205-920d05ff7385\nc87739f6-b718-406c-8bd8-46fe534fcb47\n32395c18-8395-4e17-9fa1-0de8ffb0eb83\nea09ae8b-e03f-4934-b634-c11c1ad284db\nd67cc840-06e9-4af5-8728-06ddd576c367\n4aab74d2-edc0-4de6-a629-cd58f19d5092\n93dfb27a-523c-4c95-bb70-215e534ee7aa\ndf60470c-cbdf-4bcb-933c-18c5db7a3716\n3a300c8e-0580-4fa8-8ac1-888a91b83963\nc49d9bc3-6172-4220-8fa0-7831c04bc0d3\na3e1e9b3-1b2f-47ea-a742-7b56b83c6881\n58dd122d-3877-4b84-a68e-b2108c72cd2e\nbbf99702-f999-47ac-b22e-9b504799aeb1\nee52ce11-3db2-47a5-9348-6c86fdbabfd6\n4398f9b0-650b-472b-828d-3382fdfc7f7e\ncb884c1a-6b22-4ae6-b13b-aa372615b21f\n611db9f2-5294-4bb2-b5ff-94b7b4a49cde\n764abc6f-900f-4eea-bf3f-de2972c5f89a\n7fe92539-9bf9-488a-bdd7-2b5c4b954735\n5046db3f-039e-4c56-9be1-7813a6a335b8\n10c1d8bc-54c5-43e2-83f5-6b7f3eb7d3e6\n335f3cda-536b-4e3a-a167-445f3169b7f6\naf57d38c-6e33-415b-9e1a-a2729a11b071\nd7cd4a97-778c-4827-a505-e97a1e33e239\n477b5d60-6599-43a0-9804-1033188b4998\n0cef3376-1e7f-4b70-be0c-ded14ff01b7a\n12883be5-280f-4a0b-a3d3-6e9957399696\nde2daf3b-7fb5-4c8a-923e-a85cfeb38029\n387666f4-6018-4790-bfc6-dead3acfca2c\n47fd7772-e343-4088-92d7-18db2332fc2d\n5498c366-390f-4d08-88be-b8ff40d9453c\na265bbcb-f6c8-4b6e-a80f-a988e8bd3e66\n815177ed-4361-450f-b3aa-429c05757f07\nebdb3ff7-75a9-4df3-8d1a-fa827e6ad797\n55ef8c66-44a1-41ac-a7ae-58a8ede0e2e5\n38054cd6-6413-46bb-bfa0-4d963624b7cb\n2220247d-cf48-4803-95bb-8c714535c19f\nd7145860-fe3a-485d-b2de-29c7e36f7a24\nbc961136-a684-479a-ba25-b15256ce98d5\n6419da53-7f12-4da9-a997-a5b1f4eb94d3\nccbfb4bd-31cd-4510-aa1f-81b09768d0b0\na725dd4d-51e8-4eb1-aa72-c33719b3e42e\nf56a6fb3-7a9b-4a1e-ae95-fc0fce3aee46\n89d093e2-da34-4c24-9efb-c1f95a8e7fa5\nedfc981f-dfa6-4a18-946b-fc1376dafb61\n7216cd48-5e33-4aad-a66f-d2404f88c203\n30223944-960b-43c9-bf36-65aea2fb0785\ne693b56f-7ed8-4ba5-8447-34902ce4e072\n46d626d1-6dd5-4bb6-a1c5-171cceb1544f\n66ccd30e-cf10-4fed-b784-a9a02cc9fedc\n02ff7761-3836-46de-8585-f4ded502e93a\n2a3e8da6-0db2-49ed-b3af-915894e91f92\n09aab563-3b9f-42ab-b788-dd7c2cf588fb\nb2911ecf-d548-4163-9f85-dae1788a7454\n97c42359-71df-405b-bcb4-7b7e69dc6b0c\n4309884d-d1f6-40f0-bd86-3d9a3fa06c09\n6099f20c-64df-4b97-8835-a0449464834f\n32351e15-b430-465c-ba55-6f87b7e2bc60\n9a018422-eddc-4e95-89a3-82d08f537cc5\n3bfc4bf6-347e-4591-b3e9-3cd36b145e3b\ndccac02d-04ed-465b-8983-8415cdfafdda\n05a381bd-25ac-4951-bd56-35758a093803\n24df8f70-3e75-477c-b279-bf6e7dcdb98c\n4779a241-ff72-4639-861f-f10b2342c8fa\nf28963df-ad82-4abd-87ae-4255c009067c\nf27ddda8-6c03-4df4-8d34-34f5e2002793\nfc937d51-fd3c-41ef-b771-c5a07700b97e\n2b4f0ec1-95d6-47e0-8e1e-4e77ddb5d65c\nc04e653c-5a5e-4765-aea0-a9919efd4126\n7cc32d20-a828-4157-af62-7114eb2ea7ba\n0135f2dc-f886-4aa4-b1fc-5e2c0dbead33\ndb3c610c-e5db-4b4a-a205-ca9500edd0d5\nefc94068-a2ca-42c9-a1f9-2ba03a99d0b8\naf15ff3b-93d0-4f08-9722-3549d1d08e93\nb7145cec-622f-4dd5-8f77-85712aa217ad\n77420163-6709-452b-9032-6e4f9cb54c3c\n5f9a6c0d-faef-49c3-ac2a-a9ec54d31e85\n1a060a42-e434-43d7-9c59-14c3d4d44b38\n60d0969a-9284-4e86-b61c-e1745ae03ce0\ne9fbbbb7-be2e-41db-b9dc-989482bb8be8\n1599e9c3-839e-4f52-a9c9-f82a7d397b1a\n5fb9fa0e-51a5-4367-941d-ad45d58290a8\n883ade78-015a-4b30-8760-fd691f6649ce\ndea1ed7a-22ee-4538-83a0-0063ad0688a8\n3a40035b-5dd8-44f5-9d5b-ef26f83f8fdf\n4ed76484-3e34-4379-9d07-e573bc1d4990\nadf22bd2-6b2d-42a7-af53-cfe2cb654062\na433d83e-b697-4ab8-9b03-86790e0b4b64\nbb03d88d-1b49-47bb-9a5c-b81e92757031\nb4e80f9c-1882-4ad9-94c9-3ff33f837959\nf675228a-c0e7-4535-96f0-c4cc37f0e11f\n61ef9818-d344-40d8-8885-9c0e5c23635e\n573ef7f5-c229-459c-a1d2-b0a09035a9c5\n8aca4766-6a30-4b2f-9585-f29a1739d0b1\nfff4b85c-4ed1-4044-8faf-c2ce547f6f5d\n3b0c6f59-2c40-4015-ad95-43b76501ac09\ncfb2ee08-2da4-468c-bd95-09b579efe1f2\n20d3fb11-4f37-4704-8903-7e33eb49c623\n88333924-bb80-43d4-a372-3638d6278e9e\n3652d13d-09c7-4795-8792-4cf2322b07ac\n326bde62-7697-4597-a8cb-7ca7fd9e18fb\nfa3cd705-0fb1-42b9-b745-e3afb2a20dd9\n88300171-4ed4-4b50-b9e0-4d72528d25d6\n70be711a-e76e-41d4-bccc-684601d782be\n8e87e2f7-cf37-442a-888f-a35e30a7987a\nf39a0282-8c36-4592-bc91-164927f6198b\na48f8419-4ed4-4eba-bdbd-3c47040f987a\nf03d8efe-81e6-4316-bc2f-01e9b3c1117b\n75f3144b-2ebf-4df7-8b2e-5dc568a9d438\na206ab83-8b29-42be-824e-c1c119615c9d\n174b225e-c060-4502-9412-97b3850c53c8\n8e3d64c4-e97c-46e5-958c-f87ef18ebe4e\n9794c773-0bb2-4bb8-8f5b-1e131a569a01\na6560ae5-4e09-40bb-97e8-5bb68e803a12\nc8f01b4d-5ce9-456b-87e0-2d962ed2b7b0\n91229e28-89a0-4c5b-b0bc-99cfd106b384\nfe68ecb9-0447-4a01-ad52-c1fdf2c2ec84\nff6776f0-aeb0-47eb-8711-1f20f96fae2e\nda6b1257-79f8-47bc-9ce1-7a6fad58da25\n5bf49559-deaf-4e1a-b8ca-b2f54c161466\n0165b316-f14a-4cad-8fc4-1f5ef608ec5c\nf9e521a4-c5f0-463a-ad01-ee1d02825cab\nabaf2deb-1d3e-450d-977b-ee5a5cd85962\na23cbecf-2843-4200-ad19-d9d680d13c69\n79a247c3-60bf-422f-99f8-d62febba01b3\n74532aae-04d6-4705-adad-eff3df921e34\n4485182d-f0da-4dea-a0f7-515a892dcb54\ncc8764ad-c9f4-4fcd-9e85-4ec59604b15b\n285a91c1-44b8-45d9-9c5f-a7850aac2f32\n0cd0e4fc-e8f1-4e96-a02a-8ef104579ab8\n286d0125-ca57-4aa9-bac2-a7036b114961\nd040edc8-3832-4e13-bd53-bf1078952a5f\n8d39f376-f631-4510-b37d-72c2d7e93309\nf3ecb9fb-0028-414d-8d6e-0befb08b804f\n2ed102eb-2e7f-465e-b5e0-aae61720c607\n252147c2-4c00-4d37-82c2-c49320dddb08\n206a7948-1a20-4057-a71f-1632e5fd7b08\n76177475-0761-4a42-a79e-67297787d1b5\n58748437-6ba3-40f9-8e19-37cb89c8efea\nf0de1022-3027-41b2-8443-7c5a395e2570\ncb1f7107-4a57-433b-89df-9c5906120af7\nddbe2164-03cb-4fdc-b58c-01c96248cfc3\n06ff8c5b-9b7b-4096-a82c-533d0c91c1e2\n1b8a8ea2-2a98-471f-90c1-a5319c3120f4\nafb6665e-eaa7-4e23-978b-63275f96beba\n24f0749c-9c7f-4f81-beab-26736119974c\n1fdacaa1-9ee1-4ca0-b236-60edc662f686\nf15ef551-bea2-4710-b129-03575230cb18\n2434db87-050f-42bf-99d0-4684a1926a41\ncfc72d86-423a-4c86-912f-d8c94b5053e5\n05b1cb3f-5f54-4cb6-adfa-e4281a349c4f\na2ca0cdd-cbff-4f64-b476-b1c09efbd1aa\n9142de49-6837-4a63-9a45-fcd3751f8f33\nb3f00a87-8054-4c8f-8900-10ba29204497\n6f62c8be-0e8c-41f2-ae44-82aa321538d2\nf8d0bdf2-2463-4653-ac02-8c7c43a90baa\nd0f1315f-077a-492b-a189-0b558d9c724a\ncf6bff12-fc4d-49cd-8c61-bad2ac016282\ne89c33b7-f717-4570-9156-83425860e9d4\n88196679-a2bf-4f93-8160-697276e903e3\n6ce26d16-d90f-4c6b-8333-5dfda9edeae9\n4255e14d-83ea-4906-81b3-a722e62e8bdb\n3e303a26-d776-4be8-a4a9-a43713584a0c\nab19975a-f4e3-4992-9f22-0ae4edf1d9f5\n4344e871-6d13-4bf1-9059-1f3f8f5808c5\nf8e228ae-b11f-4fc0-a487-130d62ffe6fb\n87ecbf23-8781-4aa9-8df7-75a5d5ee9711\n02d2b1b5-a9a6-44db-a1d1-8616dd0b9bdb\n8079531b-e884-4054-9bc6-322f3c66e69c\n7647e570-1843-4ce9-a2c3-b236ce5acc22\n91340d40-0c46-473b-aad3-a5f86e156136\n6c4007b2-dbde-4a18-b29f-76c8706060e4\n71375fec-d70a-47b9-a2e9-6a5e5453bb07\n7b964c59-2daa-4c81-b848-061100a324f7\n2f68f48b-9e22-43c3-b107-dca47ebfa59c\nb4abd303-fb2c-45bb-9453-364e5125c2c0\ne85b7638-0fce-42c8-b8ab-44b8f1fa6bea\n1601707e-e346-4007-8b74-8b5443ffa01f\n7fe97542-ba87-494c-b991-3e1351a6c1f8\n9dc1eff2-a89a-4ca2-ab90-15f13d143d7f\n824659ef-2ac2-4399-8c9c-8c95458354c2\nab837e53-db48-42f7-b9ba-e43c9636a3a5\nc2d159cd-7250-4636-bba6-a8a8c411cafc\n31188d33-d4c0-4262-8f3a-adf3a788e362\n908d1d40-e620-424e-9c54-2644bc82fbf6\n1210a2f7-5317-4c81-9674-76eaac917540\n34356f76-4eda-4e04-bfcf-9cc9579d6558\n8e6dc349-0e8a-461d-b578-f1eb2fbecb92\n6697f713-e9e5-49c4-bc69-290f29f4518b\nbd72be59-9441-4841-ad9c-1faab2a1b2d9\n6ffc7b0a-bfb1-4ebc-b4bf-4b113a0628fc\na615bbf1-ddfd-47f1-836b-dbda33d6752b\n32f9292c-a54d-4a76-be58-2d81e78031fc\nbe5e9338-82b2-4f9a-a93f-e085ea15d5f8\ndfe09bae-a98b-405a-a04d-f1996cadcadb\n551c6fb5-3b37-4d9f-94aa-71eea258fbfd\n9943cecb-5f4a-424f-8a9e-55dc2eaaa689\n8abcdd6c-fcab-402f-9e69-c05e766e9b78\n9ff8353c-18f0-4743-b1f6-42fb6c90ca5c\nfcc1a40a-31a9-46bb-945e-6611e7b825df\n604ccfd3-b4cc-4a0b-b137-bd826a6aae37\n2a3d1bd6-fd09-43fa-a362-cb98997ecdcc\nae64c76a-e5a4-4fe5-9951-bdf936ca39cc\nc44721e9-0c07-4565-9343-36870a660a11\n40c71adf-d9dd-4a50-9dc5-8200dc955f89\n6de3f7c4-0856-4913-9f57-578795dabf6b\n9271f85d-1a96-4c89-b45c-fa4da9b54dea\n24f7337d-a39e-4a84-9a6b-411d94cd78bd\n8dba064e-2e3e-4fb3-ac73-635fb357118e\n6868b63a-ffea-4ddc-85e4-4c82206fd527\n58299926-4b72-42fc-ba02-cc41d7313cf3\n055c0c30-3f5e-4fc2-a138-c6d3fd22010c\n0c5d2ed8-1374-4fd5-ba4f-857c7c2a21a0\nb7bc063e-59e3-4ef6-a44e-3c4d4cb6f8ff\n1babaf53-cebe-425d-b20b-145c80fd5193\nced502ae-d1c8-4a6b-b3e7-d3d5d4f169ae\n29a4c8b3-dda6-49b8-93ba-49aace7f2080\nc6b624df-7ecf-4c77-823b-2761515ba2e7\n7d08e671-ad81-4e6b-8726-ba481476963c\n09ab3080-fe99-43af-997a-c5214ae17f46\n7647c0c6-e612-4814-b08a-34ffe7427c4f\nb48d9922-6e6d-48e1-b80d-a0f32b146f09\n26902f4d-391d-4c3e-aadd-c2f9bc26903d\nd15d8019-4fdf-4449-b155-466091971d5f\nb4509bc4-6f03-48dd-a2a8-96c4591c1fef\nb6cd6d46-a9f5-4a87-a7c5-ae9448e2452d\n66b7ce40-f68b-42f3-950c-f70afc78e206\n422d0f60-56d0-4891-ac2d-a539d0411270\nee87f943-f7c4-4093-8945-a69d3c41f68b\nbaf60665-51ce-4354-b560-6dbc6f94a23f\n17d81779-0635-48eb-96a4-e12f1396e790\n0a9af4cd-bb12-4d7a-b409-14e6184bc103\nca4bc29b-52ed-4cd9-acf2-86fa732655f3\n31168134-7ab3-4e95-aa1a-1ed8a6380c1f\n690129a4-fc7b-4947-aee8-355833f09a69\n261b56c4-36d2-45fa-adbb-40400d5dd6ba\n65e5909a-be6f-406a-bc74-24644c7dda1c\n8ef7f22f-dd27-4466-bc0c-86011c63d9e4\n749b949f-3a82-40dc-9bd8-53967602fa92\ndf0ad06c-25de-4eaf-bf9f-09a5524aecef\n3fb312de-bdc0-4bb8-8fed-dc6fba99ed3f\nc30c295c-ba05-41eb-974b-4750450b944b\nf0b2cb01-b2e8-4b59-8628-65a1cdf79b38\n07192613-4eca-447c-9ad6-891b6773e31a\n84e17102-4649-4c52-8c6c-44a1a44bb86f\n8ff6271d-01c1-41a8-a8a0-b32ebc84e6b2\nb2c48440-014a-4434-a522-047ba027029f\n1a3c9d2d-e770-4d8f-84fb-92b75b0ad30c\nb4d8ed3b-0109-4841-843c-080fe93efe4a\nbdd40c8d-5597-4e52-8d73-3ceaf0c5d75f\n54df45e0-34ba-4528-8bd5-130254fac473\n0693b884-40e6-4691-a1ef-e8dad0e27965\n5f4145eb-d5c6-4cfe-a13a-d03009a32d2c\n4f314485-f75f-4b5f-9961-c9b0a5c868eb\n46048ac9-8b80-4853-b067-cee02b7210c8\n26bd4f7b-91f1-40b0-b053-c24e9785b544\ne6cff4b4-6636-4164-b936-5be48f449494\ne81506fb-3fe1-4999-806f-675f2a38b755\nda42a838-b62f-4516-bf14-04801522711a\nec79fba4-5468-44c8-b39a-0fe2113bb5b6\na9865fd8-be4b-414c-8307-f5971ad4af3f\n33085023-0019-499b-b30a-f5d0e2416960\n811b7ec1-3c37-46af-8055-723900923f53\n95104f10-3d4d-4181-bc59-7ce4b972c659\na147169c-6b3b-4f95-abac-d2fc70c8b487\nca3fc249-ae0a-4eaf-8fe6-e47fc9a60721\nb0830132-027c-4a86-aac1-e135e58c05d4\ncef88385-6549-475d-8b95-fcbffafcba6b\nc5483dba-7aca-48ab-9bf7-138274233ef4\nf44ac940-4c15-42d1-8bd6-18b0001bb42a\n3530e9b0-b5f0-4a86-b61b-c2aa39dc0021\ncbd71a70-8f34-4ac9-9da0-24ec13f64917\n7f67e897-fefd-4a10-a346-c9a073aa2680\n1676c369-726a-4e0b-827f-cc8d9d730fa9\nf45973a5-5a64-4b09-8be3-91e0a56b47d9\naa93fff7-90d9-4ffd-ab0a-65019bb73b5b\n07a3fa41-d659-4591-b341-2795546ea5ae\n6ddcd2e5-fa97-481a-bff6-78656211baac\na0c1f16f-13e3-47b3-a1c1-5e1d50bb5c4a\n8145cbac-6df0-43dc-b67f-e5fde77c84e1\n915f22fe-4682-47dd-a2a7-265e6d846bbd\n574febcc-fcd7-43c2-9697-6fe06047c2ed\n062799c3-7612-4c7a-be42-274a110c972d\n621a159b-f1d4-4b42-a56d-c7faa197f4ed\n1ff7b409-824c-408d-b531-5d94974b0761\n07166ef4-1e6b-446b-9b3e-4049030cdbd1\nf51afda3-d437-4ce4-93dd-658ce4f0e604\n60a52602-482d-41cf-bbb3-389b87276b70\n4a9cf89d-4896-41fe-86e7-f6820d803186\n3b59e845-d571-407c-b6fc-2c9e60311248\n36827cae-0bc1-4d41-9565-e43a3b5444ed\n8361140f-fb34-40c0-9dfd-7e4a0835b3c4\nb24fca68-08ea-4e8a-806d-644beda02633\n2c9cb237-fc1f-4790-bff6-51cbe196a368\na524f682-2bc6-46b7-ab2d-3378c020c852\n8c5841a3-62b9-4a5a-b982-4a96baffab87\n6788a8cb-3e49-48a9-9447-b22963799bdf\n284afb9f-ae05-4198-bade-b47f6d38f2a1\n87c80033-7438-4edf-9002-4f126b0284eb\n1c663a5d-6f87-4dec-8cb4-3c955241d69a\nd7acc137-787e-413f-af21-2e868b8bd78e\n90a0a851-3190-4665-b9c2-b9a684bfc434\nfac96c63-f36b-4962-bd57-7f9231ae3aa3\n5a24556d-6d43-49e5-8c6e-ade15e61593d\n8aa498eb-15b4-42f8-8bf1-4cafbc3fcfd7\n1c248da2-4faa-48ef-a330-7224870157e8\n0736e696-b9fb-4d4b-ae8b-ba3cf251f7ad\ne2b7ed85-298d-472c-bd5f-8afd0a6931ec\n599e7bbf-745b-4f6f-a38b-7f8125498c30\n061c0598-b6bf-480c-9216-9cd5f23ac1e2\nc0f252f0-0455-4877-8469-752045c50dac\n561112c9-65a8-46ff-92ec-e94a276a96c5\n69e18929-7604-4ce4-9db0-9fa78e92b438\n97e6561d-f1f2-49f0-a597-b24840aac6a9\n6ea2c317-aaf8-43bf-b535-4acec0e9828e\nea309313-52df-4abd-9375-ca7389d11450\ne6f27f55-237e-4e17-b4be-c1df2c1b2616\nf78fa512-dc0f-47ee-80ed-56c23d5ebf55\ne3e01f17-78dc-4114-8524-61a861cc1c77\n1bef7d4b-6165-478f-a7b0-6bc3cada562d\ne6df519a-88a5-4ac8-8716-1d2a56fd0bb6\ncccfccae-ad2d-4f39-95a2-64bb2e76b07b\n7303073c-34a3-44af-a358-b7a8b4f6d505\nfe9af8a6-7a9e-4dcd-90c5-c716b639fcde\n6b236ec1-3b6c-409a-8c45-06ff0b4515c9\n7d2664be-2354-4f43-b5de-31c7502e5b9e\nc1e8215d-99f9-4406-b1e4-9ede80c048ca\n41548f33-612e-45c7-8ce3-40093b2ed441\n42ca339f-1e44-4b55-90fd-0d343c6bc3a5\n5df0c0d2-3f3e-4672-b75d-b0c5d93046b6\na2113aa2-0886-4cfb-804d-488a35d1a98b\n1f1c9e5e-8634-402f-9d83-5aef972393ca\nbe33b7ae-4474-4379-905b-faccfb59bc35\nda2cab9c-13a9-40a0-abcb-e53b8fa0ed8b\n3923780c-7792-48a3-b5c8-698b4ad3ac83\ne5becb10-82cc-4b9d-8804-717becaa073e\n73233968-aace-405d-9ef9-56e18dcb5d07\n150dad59-c4fa-4afe-acf7-d341dad2cd0f\n1f1709fe-a092-4590-9f85-2d4783d1a1c7\n723cbcf9-64b5-41b8-a052-bb5750a5de3e\n13990f60-34c3-4865-9934-aaf457f26f8f\n923436b4-127a-4c88-8ce6-7ef0da76ed53\n97082f11-7f23-41a3-92e4-d5b31219e2ba\nb8a2eb52-f4a3-486b-861a-ad6c84e7fcb0\n2ab6a83c-5a62-4b4a-9d71-4fa375a05a65\n419ed192-5497-4c3c-a50a-f1d2280dce84\na988f0eb-525b-4b75-9721-712913ebe24d\n3b5cf8f7-6d6a-4a44-a21b-539a82bcf4cf\n85a9c4bd-2ff3-4110-a1f7-208c99abe070\n5e2eb5b1-30b4-475c-b2a1-3d480ef5c14b\n623ce73e-83aa-47e5-8ec7-02a42426c2f2\n5768e7f2-3693-442d-887b-98f6847136f9\na2b8485a-af9f-4e02-a648-cacc57c00524\n14f9d497-94f7-4aa1-8a4e-a2bdab6da081\n57c9f931-f1ba-4799-bb56-590df0632626\n0c3c9c02-005d-4229-a753-910e8ffd9f6d\n406b79fd-1f54-46c6-ba38-c23624f8c563\na13d0beb-1dce-449c-a35b-a0bedffeea6b\n294b9599-931a-42a5-bcd5-b83e6d34fb1c\nb9503ed5-bd56-451b-9473-1d0f76cd44bf\n0b200669-f234-409a-b69d-ed6da4b8a64c\n971f0b49-d43f-4997-adf5-125f12da4623\n931e5811-5229-4b8f-b8cd-a3b2f266efc2\n8be48599-cc34-4466-bae9-6b8a16a6e938\n111cce69-0efa-4fcc-8b67-78799587999e\n180b9aaf-0a15-401f-984c-1e4096e7f311\n60887d8e-8639-4649-a0cb-593d64b01fe5\n91f2e9b3-52f5-4105-b392-1748d3ca22e0\n73d82158-a8c8-46a3-b97c-8b00c00d9458\n79e995d4-4aad-4feb-b660-c3e0774e18f4\n933e6b05-a2b9-4d05-b9a8-898bd2fb2228\nec4c13dd-40df-4bae-aae2-5d3b418916d2\nb85ae755-b70f-4f4c-9c66-7d9db54d0e62\ncf8c9e15-acfb-4fb7-b22a-4fe501facfa5\n3acd22bd-0f21-48b0-8c10-767730a85e1e\n69970e1f-857a-44f0-a68a-ddd7874ee23c\n361de45b-87b0-479a-a78e-d849338fdf1f\n91787ad1-9d4a-4750-b764-4fc69b9eb0dc\naf7fdfcd-bff4-4408-b071-4f90020019ab\naf1ea1ba-ceb4-467d-9ded-0fa08923e859\n74674639-a253-4f93-8110-462c3150d7fa\n345ab11b-7b22-4e11-a4ca-0afd83be0e72\n18a2a09a-2a07-4c30-9103-e9796a677618\na7466f12-2fac-4b7e-974a-b9fdae64ec11\n10b85afb-b349-44ec-bde3-b7b8cecd7914\nec1678f1-1da2-4d9c-869f-ebee59fa595a\necf3816c-506e-4e37-8ebf-aa831de42096\n2f7102b9-fce9-453b-9d8e-9adb1aa24124\ndb242f31-2954-46af-a34c-dbfe0af76a1e\n0c6b02e5-8d2c-4148-b575-b27dfce56202\naac7b4e1-0dec-4afc-9854-ea397e0aedcc\ncc0bc413-ead4-4242-a464-686337e3277c\n11a8c287-f04a-41d7-8d77-8cafd0c948de\nf1f209fe-c0fd-4781-ab87-9b4054072f73\n1d503c3d-07b6-451a-9ed4-88c4d8c14c39\n65d1bd11-afdc-49fb-8103-fa636dc8ab07\n88eb12d7-9dba-4df4-889e-9e12805ae20c\nf16db373-1c02-411f-8041-852338bc1a89\ncd3d4988-e7d6-4c49-9a51-c464a41c663c\n141955ef-f0e8-4078-bcbd-dbf718498bb0\ne8fcbbaa-31a8-40ec-81be-2b4ff947510c\ncf146423-cfb9-4105-966d-02559ba140b0\n0606f9ac-6047-4e35-abb2-7b441adf7141\n34248750-841b-4a67-b476-0f1090f8f764\n709b1e59-9a08-400c-9987-6d4b9f2badc7\n6a6da4bf-d7a4-4117-b43c-a9c820b78be2\nb0978a73-6e2d-4bb0-b9e1-09106ec957da\nf3319350-45ba-44c8-a9e7-52371a42abfd\n1393eefc-a0de-4296-804b-964558ed7281\n59915ce0-3166-44da-b2ed-6692ea109347\nb7d224dd-ce75-4a7a-a7e3-e9ab522e41bd\nb6900c7c-0309-4857-a9c2-be5b51703df8\n249866ac-8b5d-4a40-a582-72033c4b3fa4\n6abec080-8dfc-4eae-842b-4f15a79a6af0\n70e21156-05fe-4590-b3e4-94ea87244294\n970e29a4-8423-4b86-bc82-03c786e56798\n28307812-6475-4d7d-b09f-46f9c93f0d2d\n042d6366-9a30-422a-82d6-0a26644c7fcf\n05a23d7f-a661-4d9e-9d43-8716b91975a3\n8165ce9b-c2a0-488f-8724-9d8add671d6f\n7b876e6f-54ed-44f8-9bcc-d840da0f9ca5\n3a5b9ff2-294f-4e0b-bb29-2cb9badc1fea\n3045aa10-ac1b-4e87-8cb1-eedf97beb5ae\n1186afe9-89f3-4d22-bc2e-6f8c01524fe1\n1898dcf2-9e9b-4739-ba30-15927f6e0e9e\n8074cbb7-6b98-4f49-a9b7-759e8a455801\n090ceeae-651d-4c14-b393-20cfc1188d66\nf19edb4e-40bb-44dd-a210-bc4646e39560\n68389c39-e974-47af-9a6b-99b9a6032c22\nfc2af4bd-2a61-4f01-a6b2-23e7bfd4ce13\n5878da6e-bb61-486e-a53e-e49f755174dd\nc55f27d7-78cc-4634-bd51-47848c500415\n2ebfc466-7c0b-4a85-bf6f-313d24bdb9dd\n59bd1245-6615-42ae-ad6e-fc6ab108c4b4\n2c259e77-a1f0-45d0-98e4-add515433482\n1dd2d8d9-44b7-4b48-bd06-3458c5f03109\nb3727ade-0220-459e-81af-8e475ecefe44\n315c8530-5908-4e0e-99fa-b4854ffa58e0\n2fa03f29-4f0c-4288-a014-aefa9215262b\nc829b652-3e68-40c1-b128-ca95c246cf2a\nd03843fc-24ac-4d42-bd42-8bdb59f4aebd\nc2dfeb59-c720-4431-a035-6c1eea57b65b\nc59e54a2-1795-4673-b3f6-db78ecea83f5\n9e6b4f68-7984-472e-a052-b486b2fe2080\nc947016e-5689-4195-b7ef-7e7bc7afed74\n7bc80499-32fe-4cc5-a1f7-8ed156860bcd\na0575b91-dc84-4f90-bb5f-2ba2c3459231\nebcc0740-aba5-49b1-8a4e-36049bbf99d8\n1b9d6435-1035-4633-8e82-a2b21e1f94e9\nf190c865-601a-433d-9b47-c554ca736837\n0e4d29e8-2670-4cd8-917e-431649d1d5c5\n659ab8e6-a2f4-4014-9448-0fa42677dddc\nd0223273-ae04-4eb6-b59d-943bcfc70dc4\nbdc7c156-1bb9-4edf-b051-ae4c5b89a91e\nbb462418-10b9-4b1c-b16d-a23414dae241\nc601d871-745a-4b79-b056-a5e8d6a0def2\nbb2b2bb7-4533-40e8-93cf-3f02d2145219\nb694ac57-0399-43c2-b7a6-2d25a7491a4a\n39593459-f48d-408f-b5ac-ac977a4a63e4\n27313931-5e73-41b1-b386-5ad186146eca\n75624d15-4160-4a8d-94a7-d96426d92207\n6262f67f-60aa-4500-b9ed-d12759b12d06\necf54cc8-3897-4bb5-a621-6358e92f4b79\n4c96ad4e-e2ef-4e49-b8e2-c3c0d7bb7491\n72816d24-c7da-49b9-aba2-6d284474d94f\n8f1f0c41-2a3e-4efa-ab6b-cb4845252be4\n0efec243-f26e-464e-b470-759aff470806\n53be93a3-bd1d-4960-a902-b1640ac5c828\n9f8d9b55-706f-4509-9e79-cf2724fc556a\n56261e38-7b2a-47e4-8e33-69c5b3b51cab\nb7b28413-e406-470c-be46-a80bf886debc\n03a3f6f1-395d-4de0-a4af-2658c270070b\ncd6d5ffc-2f1e-4732-afb4-55ddc5476396\n0ae196c9-0d6b-4f79-aebc-de7edc3de703\n67b4fd7b-bc7e-4eff-b253-9be379c31bf7\n071415c6-755d-48f0-9f9e-0cd7956f619f\n8539135e-ae12-4f20-8c32-1fbac2b6e837\n769e115e-525c-4714-b097-ad75fc242f42\n8861cb4c-dcb3-48f6-b245-39d4160c6809\n11f893f8-fc3e-4e87-8eab-599ac4ba12cd\na99069cb-0a3a-48d1-b442-5d80b9600298\n6ac97e8c-4a32-4003-84a7-7ca81278cbe9\n8a069abf-1332-4d81-9077-88cb48f1471c\n31929e25-c1fa-4e5c-b96c-df85fa196947\nf2bb0035-1727-4c7b-a5c4-3632fc445018\n5aa1f80f-83fd-42b6-8f8f-d8fd275555a7\n41187cfc-7d76-40b8-9ec3-ef16261a5bfd\nbb9dc602-6dde-4e16-8817-f35bd0db1588\n5c4ba640-3d05-4fcc-8710-64f12142f1f4\n8cb10819-e57c-420c-99db-677992d56c4c\nfddeaf0f-ce5f-4f15-9b84-0012125a11eb\n58558cea-eced-4839-a067-ffe053e408bd\n308cec6b-343a-4b72-9648-76eb3365fb41\n5871120e-7659-4a19-829e-bb407ec7fc6b\na615edbb-6920-4fdd-9627-a5992b2de54f\n9a474598-ecd8-410f-8738-881dbe0c51f7\ne33cbeae-6d58-4b42-8e28-5a0d548562a1\n766906db-2160-47e0-8673-af85b84edafe\nf39f8861-feec-40dd-9a74-5855484da157\nf452c514-eb3f-4f98-a68b-c7737979b9f7\n5fbb1328-fea2-42a3-9d2b-8817eaa351e0\ndd1e1d8e-64d6-4ed0-ae8a-9901df6e3dd5\n9c80f6c0-2b1e-4d4e-b1ae-086c22e1dcec\n946f0390-1726-4093-8a7c-df80cabd6f5b\nb760e921-8d59-49b4-ab91-d38217ca4d29\n45a0cc93-36be-4fbc-9230-a6b997d51d6d\n9b6eafa5-ae3f-4fe1-b2cf-59913f0aeaff\n723d995f-a07c-4be3-87cd-9cdc4e38f055\nb27a744f-6bb7-42d1-9d44-c2ee5816827e\n0bb1b98a-8fb7-41a7-a5a5-adc30f593346\n02242c35-902e-4792-a41e-481351778162\n1d21b63a-83ce-43eb-ac2d-2ec0cfe6b01d\nad9df0fc-c64e-43e9-b280-26879454fb7c\n56584924-34ac-4680-b937-ea587f671817\ncddf730e-5147-496d-9e68-55a98ca6ff91\n671dba79-ad68-40ad-ba4c-b98a8b7795e5\n5bdc02db-85cd-495c-8a1b-bda8ff170fe2\ncf860e79-4825-4a71-bb84-2fbfe1d8f406\n0a4fb3be-221d-4953-ae8a-8a5e0b3a9f31\na2dd6bb7-50e3-467c-915e-de9eed482e6c\nc43374a5-43d5-450e-8e3d-eed9e752fee3\nccab4f34-d91b-48e7-bff3-0cec9dbaaf6f\n8f82fabd-7f4d-43d0-a521-ffc3ed6d40b3\nb35e4b93-8002-40a9-9397-90a9493e9382\n97d5c426-1d6a-46ad-99dc-71e152c14cc7\n1075c959-47e8-4e62-8a46-b588f576fedd\n083ec086-750c-4c71-86ad-d6572fdb35ff\n6206d52b-1bb2-4b1d-a623-73e38e7c01a5\n7c2d0d5c-e418-4053-86e4-50a3a0bbd71e\ne0634a96-69d6-430f-8213-9af197a5da2f\nc7edd93f-9fef-4254-aec5-84b050ea55ab\n1cd8d8b1-0347-443e-a7df-4b5d6164cb71\n8fd750a7-e36d-418b-872c-6cbf5aa81add\n1e8d70c4-52e3-43ed-a1c5-908e48cc9071\n8827d36f-55eb-4d5e-b07f-93019b7ac737\n57cc4b70-7b4a-4961-bf0a-250f677703fe\n65119108-bafe-4589-a170-b714489f2edc\n24ae6ff4-6530-4ce4-a970-3048b09e7e56\nb6dda45e-452a-4a4e-942d-3c13e4ae3f25\n6ecb0610-8fe2-4529-b8d4-f2d6c4a0d352\nca9f34ac-f27f-4684-995c-dc734fd9762b\n53e0c510-6742-4a51-8006-0c314f03cda9\n9ccae6d8-30ec-414c-b221-9baafcebd482\ne9b32cbe-8b77-4650-ba4d-b316aabcc513\n722af3cf-ba59-4dc0-a909-d985e0fae16f\na0195508-236b-4db3-a269-1088ac8403ec\n32aefa49-a472-4580-bc02-e1b754167f16\ncc4e5af7-1cd3-40a9-a926-153226fe5bbf\ne2b418a8-b7be-4252-b1e5-22d4aff1144b\n4c745e13-e94b-4fa0-a62a-fb0e3b558147\n4e89405c-dc2a-4481-a4d3-d832571e833a\n67fec01a-3ff5-4644-bbc9-128c8879d133\n25938669-5443-4991-a0d3-ca2c1bab6b5b\n78e86ada-2152-4ee8-aef3-bab040b3dc02\n0608204b-bb4c-450b-8619-61b2ad48b66c\n3755e3d3-f574-47bd-bb27-9f095c97b088\n82010394-6ad4-4009-a1e4-74129e1fc20a\nd2325854-860e-4056-9afc-454d94007ba9\n7abd5c30-7ffa-4f4d-8ebb-77f1bbea6cf1\nb539879a-8b2f-4d6a-bc07-a67a26b3b6d1\n4b4a8905-7246-4b57-b27e-7fe4a45af23f\ndec0af31-295f-4bc4-a285-e271d76a4d03\nb714911c-3e0d-4c22-b712-fc8578f8ba1d\n35a9066c-cbdd-461e-8c2e-f9961bbe8e96\n635f9247-0730-4058-82ad-1f709807abae\n9c219031-730d-49e5-bde0-00005260419c\n2e5df95b-5434-4ebc-b6cc-9cb35257c08c\ncd77e253-f1ae-40e6-aace-4388bc0fe013\n3be184d8-b8d8-4931-94d8-a842548e0a10\nf5e66527-630e-409a-9c13-1927cbd22de4\nec7784a4-58e8-4bb5-a2b6-3abee8879990\n659886c7-5b5f-47bc-acb3-43d4d52aa2b8\nae992465-372e-45fb-9c05-28782883aef9\nb51c9262-0807-4e29-820e-a81cae108756\n581d820f-a05d-4398-90b6-dd3911c6f3e0\n09b2d351-a4f9-4e3b-8cd8-5e118a216b28\n6caea079-99ec-449c-a4ce-8c6149a8dd6a\n75517a84-cc6f-4692-98d8-35eaa7f5303c\n716ebb54-9e67-460d-9eef-1ba1809ee554\n1cfb558f-693f-4fcd-9761-1b3942194f18\nec35cea2-0914-4b5c-9133-b3e14f205705\ne1eda018-fc6b-45d9-b196-09ccd79e1b9d\n8c6d9c20-eb9f-4245-a907-ce6f1f25124a\n5b1d751b-9014-413a-98cd-85b06def7867\n5b47963c-b221-40fb-9ff2-f8952b5e3054\n20ee082e-75ce-4c2f-a3b6-b2550ced0d09\na6b7901a-689b-447b-863d-a7c734ce4faf\n702a40c2-0b0e-43c0-b0ed-25c35cb1a9f1\n77bc7b6d-768a-4306-846e-dfcb75439301\n868003b4-e8bd-4e9e-8553-5b0c03318648\n5b5ce3a5-9de1-4f3c-89f5-b6091bd53bce\n128b60ee-973f-4637-86f3-3175d407359a\n56f36913-ff45-40e5-b2e9-85564058a418\n8cdbdfe9-eaad-4405-b3bb-48ff74441903\ne16b88c7-abbd-4269-afe3-48ed20364527\n32757703-990f-4061-be23-1fda9ebd0f72\nefbc40a5-c3a3-449d-a75d-9d04041e8b6b\n707a286a-f634-41d3-9262-afbc796a96d1\neb3ae737-f816-4c8e-8e4f-99e342bb1cdc\n9367995f-23fa-49a4-bb60-446ea3288bc3\n6524cd56-10cc-478e-ad3b-f6978e62a973\n51013df8-dc52-46e4-a949-5ae336ba724b\n5ed8fa71-6bfb-401a-a11c-afdcfa21c89e\n94e5afe9-b8df-4faa-9d2b-e127894646d6\n5843ecf6-6bda-4bc4-8461-f3a57caa8ed2\n30ef0798-77d1-42c7-b195-7aa0f986bed0\n96322fdf-6a5d-4a67-a878-c578f341c90a\n9c7442b2-12d6-4337-9135-a7109bcda562\n34bf722f-6b94-45a4-ae7d-853558706869\n3a89d00e-f5b5-4fd6-ae01-b08f41b4bb66\n56c6eb7d-8306-4089-b7f7-231e8a88e807\n5d228bbd-f86e-4f15-8650-148ae6d5b982\n4d27adc4-420b-4107-b0cd-d28ce2510b3a\n0042a887-b35a-49bc-9a9d-06539d2b5b04\n23cabec6-3f43-40d0-9db0-118233f39164\n61e360fc-5fc3-490b-b427-ba04538aad2e\nfec0b414-4c68-4efe-8680-8317817d0f28\na6678794-e103-42cd-b691-665c9be329a3\nf4873da2-dbee-43ea-abc1-0a234da9c3ad\n52beeeb5-10eb-443b-9b90-3dc4c1493af7\n1acaf2c0-89e7-4efb-9e4a-ef45a1c7969c\nde1a958a-23cd-4517-b1bc-5245a5f519a2\nb9f677a0-bf20-4e6d-9401-67fee38aae82\n24f71c1a-670b-46a4-97f6-ba43c55b7baa\n6f741afb-14da-400a-83ee-e7dd51343c2b\n87779e00-a190-4799-b0ac-fa4744951cd7\nd2434d8f-6f7e-4b1d-99a7-970a209cce24\nc1be9a11-d342-43c5-9b8c-800af21f3126\n5597c746-f76f-4e82-ba53-782da06ed925\nc90e3977-2bcd-4b57-8568-01b9a049841c\n57f49c1c-20f9-4d25-accb-ebb33b8599e2\nf8340693-9c8e-4216-87fc-f2ac2bad71ef\n0647c3dc-447f-44f3-b8ee-4ea94cb420a4\n02d130b8-3993-4936-be97-63a2819331d4\n15bcf8df-e0b1-47eb-8e86-6838da0ae221\n11c7198e-6aff-46ed-bda3-30733ab82e9b\n69e067f1-1c54-423b-98d3-25a16e9133ed\nbbf94de1-88cf-48c5-acb4-e4a1ef952362\n865d0121-a39d-42df-97ad-42a70dd2632f\nb8a80513-1073-428d-b422-288d9211a29c\n7105895d-43fb-4925-b808-c8c7f7d0bfc6\n5f4d13b6-04e8-4ee2-b9ce-5b325b73fb00\n5d856966-d512-4b04-95c8-2bb3ba0e3da8\n16cef044-96be-46bc-8d2f-55af9a472889\n197b8447-9b6b-4392-8724-b1b35b1c9082\n8f5b041c-b5b0-45e2-a5c2-aedf5f7e6b20\naed5cb0e-0967-4bbd-a93a-075370b9c257\n44556c39-cab4-4b70-992c-d0812dd32942\n524c7898-b046-47c1-9ed2-4d10b7e2d0a5\nccc738e3-86a6-444c-9c97-70855c7115dd\n556a746d-bbac-4e4f-ad51-a0f45477c795\n44d8ed32-2d12-4e25-bf79-2e549e0ed210\nc02f7ca7-9d62-4801-951a-0d5dfcd865ae\nd50cd38f-192c-48c5-a4ce-099f1293f4a0\n465b3db0-38b0-4e09-a561-c29b0a723d0a\n11c91680-bc6c-406e-945a-5900f5dbf2b7\n61f67baa-7ed9-491f-bd37-a272ca15345e\n141a3e28-995b-429c-8622-4c62e08ff3a2\n5268a5ca-3522-4b9e-addb-80c451eeacb0\n6796916d-daea-40e5-bbb5-f5b8566f634f\n96ec3690-2b0b-48c9-acaa-b4931919b8ea\nb692d0cc-ccd3-4def-aa1f-cce174b5fe21\n63ec64d1-acb6-4391-baa9-2f39b3a39dcf\n0ec5871d-55b1-4c00-8d7e-00264a1c7725\nf876bed9-c2fc-424d-b897-d0c0218402cc\n784c7174-8557-413d-9f97-1cf5a0e5443c\n66de1d16-d81e-4db2-9cd1-6f6c969acaa8\n309b6e07-8688-419b-9b2c-ca932116364e\n01a3388a-a2a2-43cd-ad89-b4968875fd4d\nabd89682-cd43-426b-9264-fa8314106c08\n42f572a1-d2bd-40b1-ae89-e0757e763dfb\n02e86102-90dd-40b0-aa8f-9bb8c87c842d\n035a5ff4-8eb4-4962-b331-9e6c502126b0\n21e5fbbf-640c-456e-80dd-4e8f070a1e32\nfb6196d6-39a9-4e0a-9ce8-a976cf05e2ca\n134688b2-5f3f-43e0-85d1-5db1f402746e\n36fdb549-570e-414a-b9df-9e8d49c690a6\n120c1871-957a-48b4-8038-ccc6bf527e76\nce0e3fff-7683-4db0-81d5-74caf1cda4bf\nadf5a61c-1eaa-4922-8925-0a0da825ad26\n778431b0-cb0a-4573-b398-c16c95bf8f48\n165b5148-b1be-4796-ba65-29e9b612d368\n592fda3d-40a2-4331-82d1-e3464f864b75\n98c9d2a1-7df9-44d5-990e-7f2510cacbdd\n2607b344-7d38-42d8-9c9d-8c19ee3578db\n3b84a9c0-01b2-4123-8b87-b30a2e295761\n4a4953c0-d6d9-4fd7-940b-b33fd31aef7c\n414c18ed-9496-49a6-876a-d9f1a87ee20e\n14f9f61b-34c8-4fcd-b861-46186bae869f\nb1f47089-ff2b-4960-9899-c5a07ba1ab69\n9dcd678b-59cd-4a3e-ab19-23d7730b436c\n077ad5b7-641b-48c7-9288-aa834c8fb474\n34c102d2-00db-44d6-82b6-967c8a8932d1\na04713b9-da06-4fd5-b50b-78e1af43de91\n73879739-8272-44d1-aed3-a3bed7390d52\n22912d05-2696-496c-90ae-6e52222214ce\na6752aee-6dbe-4995-a25b-385f9cb20fa2\n330720d7-533e-49a4-9efe-c2989971cc3d\n90b0acc7-6f0b-4a00-84a7-d22986c66c8d\n537e6696-4422-4935-8de4-3762a9f6be25\nd2e44093-ba41-4486-8346-3a92416d9373\n2591f7f1-37e1-4987-8b1e-66eebd85dd1b\nfb0ab913-93b0-4e9b-9c53-30869bf0c9f6\nfea7a473-3e10-4423-a1be-e2c456c94182\ndc005cc9-6602-474f-bbb8-39aaea7f1f37\nce0bb6bf-21a9-4a7f-940b-af21c2ab8863\n15a4cdb4-0aa4-4136-afb3-0249d747dacd\n3249f59c-786e-4ddd-9520-0f35b015081f\ncf392156-9b3a-4e07-8315-be2ca610005b\n85280dd7-c713-4492-9d4a-b4a195111080\nf292c1d0-6ce2-4443-a5e3-538285ad8588\n12fd6642-0970-4211-a67a-6b6e7c8181f4\n40e0e489-9864-4c2a-be27-ddb70ca1b6b2\n1f722c75-7ee4-46b7-be22-f40d4db5cc09\nf9a3f971-d880-455b-a2f1-534982f1a37e\n95465612-c87e-4337-8bd6-0a76c109f07d\n7a4d6b7d-c766-4f16-9a5d-cdd0da98fe81\n52dc42b6-991b-4176-bf21-959fdaac72f2\n307dfd23-3bdd-42c5-bddb-bbe8d5c0880e\n699cea49-6b2c-4d77-b1ee-fe3aa17c2bf1\n292fb946-eee6-4290-9db1-c36a25cc76be\n4bc406c6-9350-412e-a58e-a2aebc0a8ef8\ncfd97b9a-c1d2-4837-9f9e-52ff4ec5b23f\nf4af0d1d-086e-4c67-a2f4-6436dac1768d\n2e62fb36-7901-41b7-9344-069fac56db14\nc7bd6f66-6e5a-45d9-930f-b4c53d64e2be\nd3e975a3-d777-43bf-ae2b-dab234a56dd9\n8ec4e8c5-ccaa-4d63-ba9d-016daee3a7fd\n9f66b39f-29d6-4ae1-8de1-edda6d4c3748\n21e42a31-656a-4b35-9d5b-5b6c5a939c78\n16b00bc7-b539-45bf-be71-eb12c96a22ed\nc2a82097-9840-44c3-8568-33280ee0f95f\n852aa348-8034-4f4f-888d-024bcf2fe8ad\na0e1a510-b599-450d-8927-5894ee9147e1\ne35524b8-274e-474e-9b27-7b64b17f56e8\nb1ca0a5d-5f00-44f2-b8dc-d6e2e1fbc263\n186415aa-f2c1-4ab2-953d-3f7651b52d93\nb2b395ad-f720-4db8-b796-2a60e5e21b78\na43eadf0-ed64-4814-89fd-cf2a716815e2\nde05715f-af21-48df-bf58-ac66e85280f3\n457a6385-739d-426e-9541-109b02ebd8e7\n14d94f61-8e60-482b-a10c-69ed8db4405e\n083b7ed9-7105-489c-b531-ea9af31f32a4\n643fce51-acbd-46c1-a704-97306b45d34f\ncd0ee921-8886-4503-8a02-48b8b1237bc2\nc70fbd64-ae41-45fc-95fe-78dc9caaa9c0\n6be8ebac-7d4b-47ee-b5c9-5e4690d51fd6\n365b1512-e5da-434a-9887-e74ab6ae961c\n89ab73aa-937a-41e3-8ada-b71e9c22e93d\n159d9d3f-41ac-420d-9bf8-507d0ebb1413\n9db09beb-2e7f-4d52-9cdb-f43558a2b7ae\n2c300090-fd5a-44fc-ae3e-611e88fcdcf4\n3e63deb3-ddf6-4ee1-8345-166404f9691e\nbdb3cad6-a89e-41b7-9532-f9bb7e034c5b\nbfa512a8-0b9c-460b-964b-df780c28acfc\n2397cfc9-b6d3-44dd-ba5a-7b5a3ec644d3\n886ddc54-fa61-4590-ba32-ba5682665db3\nac5eb9bb-ef47-43fe-9c85-5d50c0adf1af\n1dcc2376-586e-4a51-afb4-9d1043ab94ef\n5861e933-61ee-4b72-9623-b96d46858952\n4dcdccd6-7bba-4caa-9de9-ed047ac618fa\nc0574d30-0f85-4b2b-9298-a1d546c8b892\n8996bfc2-228d-4c19-abbc-0b5abd7330e8\ncd7773e9-e2ee-4361-8671-00dd8b8333ba\n145bb2e8-3efd-43ea-a346-6ecd3f2c761a\nb8eb4798-ca43-4e13-9f82-b2f46c45fb21\n57406db0-db96-4131-99da-96885996bf71\n0a26b2ac-99cc-4c5f-8fe3-a8b85e440c6a\nef67fc76-66ed-4dcd-94fe-ba8ce1be7735\n583783b5-7fd4-42c7-bb08-8e3292e29edd\n2470469d-655e-41d4-9ba0-dc5701caf9b9\n3aac452a-988d-42e3-8533-1c73e2f43834\n5274eb75-4e63-4ed3-812c-9b5ddf759391\n8f68d70e-cb57-4e5e-96fa-89128498c5c7\nab77ec20-9af2-4e6f-b651-9d5992677f07\n57f621b9-187a-4e54-a841-dbf8d78b1cf3\nd82ab927-7bf4-44a0-8b6a-3a7fbc97d5c6\n9bc7ded9-3434-40ee-aafd-f88d71631ece\n3e21946b-2801-4ffe-9122-24f08dea317e\n7a7627aa-8351-426e-9aa7-264dd7372b93\n6110afcc-5ca9-44cd-be01-6d30aaef767b\ne22f913b-44aa-4291-aaeb-43981e472e51\nfdd01f0f-09ee-4ff1-9f81-3ba82ed20c2d\n4a48e1e1-e366-4902-92c7-f3a2467d4972\nc5b242ae-5e4b-43fc-b3a7-64ea7496bbc6\n6347036f-d89d-4dae-ab20-8c3cbe6893a6\nbc4cb294-adf6-49a9-8f5f-59ee1b174795\n0b2ae43b-a1bd-4889-b8fc-08d8d478bca7\n32764cc6-4f0a-4f8a-a732-c10cda4b331a\nd49961ae-3f56-4238-b9f9-40b85481116f\n021ba022-8267-4aae-bb0b-8529c54be555\nf78ce398-b7e4-41e2-9206-30fc6ec8967d\nb47a6fcb-4399-47c9-94c2-a09e19aac85b\n9b230fdf-94e1-4438-b7ba-28c325ff5192\n39bc8fc9-2d7d-4153-9a51-aa39031d7d31\nc979d70c-f93a-4c2e-a4c4-5fb9610b5ab0\ncba63c3c-1af9-4056-9fa6-2f72157570b1\ncd5ed139-a822-48b6-918b-a2c2f74600ba\n65b31610-20df-4abf-a528-3ae94e341c98\ne28bad0e-94aa-4c74-aa74-8ccbc2a82c72\n39314ef9-6f56-458e-975b-43781b96bfa9\n9ec68d9b-25d4-4a9d-a8b3-858c9665d2b6\ne31b60f3-dac0-4c71-9e1f-a3ed10ce4b67\nfcf82000-4fc2-4e28-b25f-cc398759992e\n4ca67e22-a4cd-4294-9378-f19b12dc12f1\n85469241-3143-4d77-b7a5-3fecb3d56a90\n09567d92-28d7-4b1b-a196-ce4ff62d78dc\n70c0913a-59cb-4cd3-8d92-8fc439c00248\n0128af6e-821e-4ccf-a1b8-213d09a8be1c\n85d9ac6f-0a7c-494b-b694-dbccea59d023\n78b2e2b7-2b45-46b7-bd14-9ff5e25bdaec\nd547b27e-f274-44cf-9bb1-f72c7a2621a0\n1e007be9-28cf-447b-b37a-549ea0d2ea58\n0f782f93-3b5b-4e79-a7bd-a65a8e6bf96e\ne14b9043-98ca-4e6e-b611-b801170d53ea\nba48f6f7-426c-44ad-98ea-a6db37db934b\nb8dc257c-95e6-41a5-bed4-59deed878c06\n99bed360-5a72-478c-9dfb-b693f2283f18\necf2164c-32d3-448c-b314-ac4a385c0edf\n78d62503-d28e-4c93-8bc1-ded2e2303ad3\n86abc808-4d07-435b-8a58-7ca8c7ca77a3\na8a26cd4-ebbf-4b78-9b36-eecb267e8934\n8214ebb3-6dc3-4dd2-81fb-11deafde7202\n664ecfd8-0aea-419c-8388-1357042cbefa\n27f3a5e7-79d1-4416-a336-e0c95b07bc9e\nd5c6ca78-065b-48c5-bc00-0c27224f9641\n3f8226bd-0815-46a1-acc8-851d735677ab\n8062f906-1ad8-440a-b3c0-7d21d88a459f\n76fe27ce-ced2-4439-9bd9-7c171d553e72\n56bcbe23-58a2-4195-833b-146291251b6a\n28224a14-e60d-49f7-9a33-919db37f61e8\n77f3e087-0003-4c94-a1ed-f9245ac8915c\n8025a95d-0ba2-4522-8fc7-313cd9f07d15\nc2e41d1f-82cf-421c-8b8b-711f80bdb996\n423b5ee9-fae9-477e-9499-bfa39bbcf851\n87af797d-b06b-44be-8fb7-882facac9482\nc5aaf88b-da12-4779-9257-eaa9d3f01b17\nbecc6911-cec3-4d6d-a2f3-95e9e31df19d\n5b7cadb4-ab03-4460-9784-b2913b2406f9\n31175a45-3db7-44e7-9d4a-3f97a5e1c426\n8f30df12-c577-4c9a-961e-d3d65ee7b306\nb05faf5a-9846-409e-8099-edbb31447819\n0e2e192f-dd87-464a-bf0b-29ca5021eb31\nf4d80524-2b8a-445c-9749-1c7f08a9dd58\n8cf22d33-4f24-4788-adb1-5e5faedff0fd\n654f3a35-97de-4fa6-bee7-06feab3f6218\n5986174a-c0f8-4460-8336-1a2b36d5c716\n9c1d5294-0084-4edd-a42a-072c13a14f70\n1f930416-fd75-4eba-8958-8691ab3e43f2\nb475e2cf-38e1-42a7-8b09-33f163f1c65f\nbcbff061-2913-46ca-8d54-56d1c5d41682\nc00fe4e9-fc53-42e8-9bae-7f144f11a7a4\naf14514f-5990-42dd-9dd2-31320548b410\n2fd0c974-49f4-4831-8d91-8a866df82cd5\n0ef0d41b-8c89-4af8-92ee-458f29a42827\nb802eda1-90bd-4cd0-8870-6e3e5e4442ec\n04ed7aaa-aa10-4bac-be9c-089d93193fa9\n1e3d2e69-0212-46e0-b13e-bcb4c5d98d4f\n840ad689-df1f-495d-afb8-0452b199c890\n73230d89-c108-4cfb-9804-8ccce6924ebc\n4c100d19-19fe-41b6-9379-d37f8d3fe886\n5bd1c6d1-cf1c-40a4-80d1-b6f91c63fbbc\nb3216252-1905-4883-8b8a-fa96c51475d6\ndb004eee-189c-4564-aca3-f556477454b9\nb5a6bb72-d8c8-4d50-9f47-57bdc2d5d4d7\n7538bdf4-39e5-4307-aab4-5d7c6093e06f\n6a453f89-9f2b-4538-a09f-caa611d01696\n5adbbdd3-e5ae-41cb-a514-44ad9160e3ba\nc0b32e82-1990-439e-a41b-26da183ac5cb\n1c86273e-ee44-4c79-95a9-aa209d7f8375\ndd6995ef-3834-4970-8e7c-63bafaca7b7f\n941252fd-dad8-4caf-a281-ef8976760a6e\n297620dc-e4ae-4ed8-99ff-eb0f201652eb\n89663924-6f4a-4d62-960e-b41080d98fdd\n84306d8e-8bc6-4fc7-b9f4-7094a00021e9\n694bb226-057a-45f2-9116-569ced6db2a1\n306fc004-98ed-458d-a264-29869407519d\nf001bbf2-a571-4711-b080-c8e2c5dd71a3\n1708efec-7d8f-408e-9b3c-8bc9c3dd7879\na2501acb-179c-405c-910c-bfe16615ccd6\ne5d06abc-2000-4891-8b0b-4c8678a0bdeb\ne8d8524f-82f7-4644-a097-beff1db8d7e6\n8f2c4214-082d-420e-bf0c-cabf3ba01d2c\n185154fa-15d5-4dff-ac4e-b3638a97de0a\nb60d187a-8162-4b2a-a227-fa3bcafa13ee\nf646913f-83f1-4f0c-be07-7df02dac342c\nea765b06-2825-4fbf-a155-cc9754e5777c\n4c5d5b47-a2b0-4451-9ded-d878be007dc1\n4f1090e9-3915-4a03-bd1e-21015ae190e8\ne1ce953e-1dab-4059-bf5e-41855432a1d1\n51c58b79-75ab-4c32-a625-9e32f34da256\n7484cbb5-a87f-44f5-a7f1-7afe55e01428\na67dcdfb-f4bb-481c-ab7e-18a1bac7a238\nfe2d7201-e238-4593-a11b-e9899efe190b\nc67403cd-ccc0-4f33-b7fb-a89764b580b0\nf6653178-575a-40d8-a063-a7d10c053a22\ncb0ddf2f-32b2-49ac-9735-fde8aab8b511\n9cbca807-cd68-40a7-9e4c-9be9efe4c61a\nf7410b3d-aa53-4760-82d4-9f6abdcbea26\n65594ae5-0c58-47c0-8a61-252c92540a13\n74945f19-ed4e-49cd-9cb0-8e467e3e2255\na5190096-1850-4c12-9824-4a12676943d1\n7974a3ad-2496-4ca3-a968-e13430fa2d01\n6c2e9bbe-e872-4171-9e20-3f3dcad8f5b9\n8a4fe666-47e4-432c-b172-86926a6bb475\n53e03feb-8555-4d62-aee0-6cf5582bd077\n52ddd47a-9b1e-47cf-a63a-a30aa2054645\n74def527-e95a-4c65-9afb-eac87bd93d81\n2bb5bcf1-fab0-4fd8-8a11-91b811f7e8fc\n2464e830-5365-4efa-84db-2afb8d79924f\nc7623932-efcb-4a4a-aff2-e3d1e217dcd8\n964acad6-f17a-4857-a3d3-46216feee766\n203e67ec-a8fa-4d29-bf72-be2ed16e6c46\nd8c7ea46-787b-4b5b-a980-0331f787573e\n8c70529e-a29f-40f8-8bf1-d41fd9ccc06e\n69789a03-808b-45d0-a9b6-368f5466e7cf\n3a20f0c8-8a4a-4002-b833-a3287b352a8f\n4606db37-0b31-4f98-8768-733178754846\nd1b2d9ea-9209-4876-8a2d-688863d98940\n32053205-9b42-4025-b96a-e1369a6541ca\n7a83026e-5fdf-41e2-a659-d4092e3194b5\n34f120a5-394d-483c-a9df-c641d73fe6e1\n4b52a619-f717-4009-a8fe-4d0959f1d27a\nf428d12e-0cc8-4885-a564-789a4c4d0113\n8ba0bf57-6d7f-443c-957d-5146adb5a519\n4c19c5dc-1bcf-433f-b06d-087661bcefd5\n35f40fc1-ee1d-4381-8876-9e6f2aad43c0\n2b069fbb-91d5-4fa5-ade4-77ca37221741\nb615247e-47ac-4141-8685-3929175a9c92\n41dbc901-51f2-47cd-bd51-2fb7728c1151\n9cf91bcb-5e35-472c-b8b3-f3d336698e14\n56b09c64-9e36-4c26-b003-61ea71c675b1\n3fc14fc8-d349-4410-aac0-b15e4b4ae7ef\nf8a3ddab-b527-4470-97c1-1c10d00daf0e\n7b105b22-a85a-4424-8797-54df9aab9280\n5696ad0b-66fa-414c-ac4f-c722673fc859\nd3da921a-22c2-482a-ba98-3bcab4283340\n98d0e0bc-3b02-46c7-be0f-c76f3f08acd5\na6b0d499-aa37-470b-90df-d7c0acd81dda\n79d78881-5e9f-4768-8b93-c1d846c4662a\nfd9e07ff-d963-40ce-8bc7-aaad3fb920d8\n6000792d-dabe-40c5-bc73-7c6d94c95efe\n62d60957-01ba-4094-ac5b-7863739ab7ee\nf512ae3e-9a39-45c4-946e-c287488497a8\n9c332ab8-8319-49c7-ae47-94f6326897e9\n59cad9f8-fe37-490d-9a6e-2c3455a6e6dd\nf86a5be4-bc47-4347-b675-1d1c07d02c2a\n8226f711-76ec-4715-a23b-7fca8a5ab9dd\nd2ba5b4b-7dec-4032-9fa6-aa7e283f2cf9\n7d5c8170-4434-488c-97b9-1b71ccda312e\n968de879-9e51-4613-8c7f-fac57e20ec21\n51bc0826-4651-4767-a6d8-f377001625c2\nb590018c-9024-4a45-b1eb-2dca373c35e4\n7cdb0df4-8b0e-4e8f-a616-ee7a0d9a2686\n851c9517-f926-4573-aac9-62f561793459\n3248e66b-2363-461b-9093-c3be196ea8a7\n9f1d582c-c1d4-4baf-b310-a00c5dfb3dcc\n63ccdd25-0c7b-47b3-938f-fc70664de92e\na816990e-1e6b-4042-adbb-3d8282c43201\n82e41800-08dc-41f6-83e5-843c6775d718\nb12468b2-70aa-4725-9e4f-ce5efe41ccd7\n3983d45e-d87d-46c5-9f1c-fd75c4e3eef0\n1c17d9b1-b740-4990-9975-69371eb9aab8\n3db8dd3a-a457-495f-89d5-d292dab432c0\nff6629af-b52d-4b1a-beae-3fc0108e4889\na047a3d7-49ae-4290-9f12-0976a0f2661e\ne0119273-1463-44b2-862e-2723b23df907\ndda10f95-8db9-4293-a554-cf4bca0e5f4c\na7bcde3c-21f5-4e06-b229-4ea11892ac22\n1e1c0e1e-2528-4704-b85f-93245e55a010\na78197ee-21d3-4c93-9bf9-d7742d9f6d92\n90760aa5-1ccb-4a4c-bd17-b074a35e25f9\n5db2ab1b-fb60-44d4-8157-1a04961b88d3\ne21e5a57-1458-4abf-bb0b-69dd021bbd4b\n4f1a9970-84c2-4237-9035-6e09916d1e65\ncb2eb21e-29b9-4842-ae11-a5583825eca5\nd0f38385-5eef-4446-abd9-7bf3b21c74e2\n69030f1d-3f1b-4d69-a5cd-085f951aaf5b\nd17553fd-719c-4e12-8073-778249fff85c\n805e17a1-c714-4476-97e5-8704d086531b\n473eb305-aaa9-46a1-bf6d-695dc861e4eb\neba27417-081e-407c-a06d-a1704b350104\n10e8a31d-4fa0-4306-962a-256d75ea87e6\n7ae80d37-57ad-41ca-aae6-3b1f4a0cc88c\n5605cce0-9daa-4617-9728-e1fa910fe2df\n6cb61349-f10c-4a13-8591-3b0ff79d5d54\n1275b02d-519a-461b-8385-5cbf1a35b911\n690fbaa1-764b-417d-b80e-f8deeb5e9954\n23a905a8-8b4c-45c0-b2d2-434a59ded514\n4f565fec-8e98-4dd9-92a6-685faef87de8\ned53118c-a1d6-4a8f-862f-69c2a0cfc56c\n2cdb7dc9-7a8e-49cb-a6b5-164f4820e775\n13e47f93-e9ec-4953-ab6c-c0d8538f9927\n346226e8-0b7f-4b49-8447-8a739d3e84f7\nc30282ed-1d8c-428b-9ca1-2a86534b8711\nff0675bf-9bff-43c6-b742-51b96b4b394b\n4704fa1f-c0f1-47e1-9107-a67c1cf1d011\nfa8156ec-f207-4574-b176-2d5da60c5c94\n931b71ee-6e49-4c3b-a473-2177e34418a9\n45845df4-b884-429c-b08b-125634fee0e9\n53cfaaec-37b9-45ba-ae3a-c700de597692\n6c0584f0-6df7-441b-808b-a7da91b9b79d\n7718087a-7245-4619-b9ea-47036368230e\nda8af9f6-7870-4f71-b548-021b434a1440\nfd6a77d1-9867-41e7-b02b-a227c41a9d6a\n4a578d89-6331-457c-a071-f9199f292dcf\na917ba76-30e7-4707-8af9-da6a515c696e\n23db8a8e-75c8-40a1-9640-9c792fd148cd\nd731d080-29ee-421c-ab13-87fd17d1cebb\n03eb487d-c5b5-418f-be5e-b6cbc6c70a02\n8455134c-b30a-4c7f-b03f-34c10c84a222\nef1b5e93-53c9-49e6-9fdd-9157283e3432\nfe9f7d5e-c146-4bfa-aec1-28ff4e404341\naf1bd8e7-f3eb-4940-ae34-379d54bd525c\n90ea1bfe-eecc-4d89-a04b-f00cd788d0dd\n53b4122d-d78b-4417-9325-f703bda3cf7b\nead66b74-7bb8-4d46-a9c7-2443d62c2b7f\nbde2afac-f1d9-42ea-9c42-1339764ce50c\n285ee8ad-dbb4-4195-b9a7-527d01695777\n3216d4ff-9aae-41e7-ac5d-e67a7b4a3275\n895271bf-8252-4bbc-b67d-341ecae62a8d\n5179ff57-4f6a-43ef-80e1-ed586f000d56\nb564b2b3-8136-4312-9162-b7314ffd8b43\n25b62f18-0d00-4ba1-b99f-44e776655230\n65d5eac5-11af-4965-89c7-c23c14f29029\n20f2014c-b756-48a3-9f4a-0b02d57eb8e2\n55a0a737-c69b-41b1-a7ef-1751a4fda103\ncc2adee8-3ac6-4723-b2d7-56fcd4969943\nf937d881-ac34-43be-ae16-d95ef58ed767\n591fc89e-44cf-4db8-b19f-76bab452d693\n9edb9af9-9e70-44f6-ac5d-127659a2a7db\n688fb504-a71c-45ed-bd8c-6a3ba6956a16\nb6253e14-15ba-421e-8602-feb807bffb32\n78719426-e41e-46db-98ca-611067b762c5\n6c0065ef-7a5e-411e-8cd6-df4f89353b44\nf3a6df00-c1ae-4717-bad0-22ca618f71ca\nb44435f6-f8fa-4691-8593-58f57acc577a\n5d7d0a53-9f24-4dbb-92d1-962f52391ead\n6352afa3-9289-4645-9262-a51d068b06f0\n4e5f2e06-f65e-49dc-a81f-9d35b19654fb\ndf5b56e4-c8ad-492b-8b63-9a1d2cb5b543\n32a8cd9a-9207-42d0-9230-fe2fdfa06c6a\n86fb2fe6-e4b4-44e0-bb54-0270f601b976\n96131897-a2e6-4deb-aa3e-9378e2ca95f7\nf8e6d838-8bf9-4899-a827-f6f811705729\n57cdd6c7-0f5b-4cb3-92e5-438d93d21fdd\n54687593-8744-422d-8231-1f1433d4471b\nec2a93ea-4682-4757-8094-6ea7d0518f38\nccf7f715-a2dc-4e07-8886-844d1a1e1d4d\n2d570bc2-bf69-4bf9-9b2b-b6c924bbe058\na22019fd-02a6-4e1f-a0bd-54f9c45b76db\n589e425d-57ca-49d8-9b9d-da3fcda79178\n1a048e2d-0661-44b0-9cb6-4a4c0b5b2c5a\n144e924b-d3b9-45c6-b4aa-e2ec21e89d36\nf6ab08a9-296e-4f0b-82cf-f36bb41009bd\nb1732ed0-ad29-4509-9b57-9c9e802d4abc\n47119e10-bb68-4c85-a2fb-0477917bef16\n3d43ac8c-6e48-4fcb-800d-950d03d6fcb5\neac13551-7895-4e95-8400-42720e0069cf\nd29e3b41-05ca-4b6b-92a4-300cea9ff2fe\n28a8fcfe-36cb-415b-8e56-1b2dd0311de4\ne92e95ca-b60b-4b2d-8056-1851050881f4\nf3ca725e-519f-496d-8e0e-b9324c408808\ne65b41c5-0521-4117-8c60-1470d296b3fb\n38417bbc-e939-4868-b40f-68f5c2e324e6\nd2fe8714-556b-4be8-b80b-1aa993e369d8\n0224ee9a-796a-4ca1-8f01-5160681dc146\n779712dc-8972-4c06-b30c-b1c73d0a79ee\n2996386c-f5ce-41d0-83dc-9b36d28eb871\nbdeaa579-6d3e-4c21-82db-b6c9900a3d2e\n6dc17747-a4d6-49bb-918b-b3507d44eefb\n6adf5398-e6cc-495a-a6b6-9c9ed8ae334b\n05b377e2-de62-411b-a269-c240116c407e\n9f62db48-a9da-4c76-8a03-334dab484374\n81052951-be29-4385-845e-255563e5c05f\nab96fad1-2f48-4a17-9cbd-3554e433f65d\n615108f1-8498-4082-81f5-7ab13f2a65a4\nf2c033cf-3a26-495e-a563-4579abb14f31\nf99455dd-9156-4e59-83e4-73e844e34126\n87d63df5-5df8-41bc-9670-d731d71f6585\n38bae737-ffd4-4b6b-aaba-5da562334309\n3c0ab932-e316-495b-bd02-84ef4390de58\n56123a55-9f9c-4cc4-94a5-32c33d464c86\n19d69846-0df4-417c-9fa9-d9bab2264af8\nd1d6faef-1705-46f9-a771-ea32587fcde0\n4ab9d721-2b43-455f-9eb7-97d53d49752a\n09a37316-f8a0-4cc3-b94e-9b1826543bb5\n00dece49-bd15-424c-9f3f-89f18f999d14\n8477a70f-6130-4585-9b48-39269bc63e2f\n93171486-8e4a-4e5f-8f97-283ce0404782\n3f120e1a-da06-4747-b430-ffbe7a16a276\n22538fcd-332f-45c8-86f8-1cb2da312d36\ndb5062a4-2780-4505-bc40-bd939e3f066c\n9d3c31de-dd59-4ea0-8d0e-3af749ee31e2\n54c04aee-f233-44e2-8ac1-b74261f1743f\ncce3f356-d4bd-4f7a-a2aa-6e2a2b61d399\nf0d936c2-c0f9-4025-b0d9-7c93b278fa93\n3bb64135-bc81-47d6-b6ea-6ba902371d22\n107ff89a-ea21-4ad3-9137-b2ff0f3ead2f\n6c875dc4-e0c3-4d73-b85f-f4c3e594a9ff\na813cbf9-2335-49f9-9bde-db63da5c3579\n1478c1a5-06e7-4da7-a3f2-b821de0534dd\nd878dd1f-e73b-402b-8218-5d940adeab9f\n18054981-3177-41e6-b6cc-842fb40edded\n0a44fd27-8097-4475-8054-c0b8478be904\nceac55f1-cd33-4e0b-b3b5-a48a960ad36b\ne4c6211f-8f8a-41cf-8661-5e8bcff7014c\n30959c6d-415f-4798-be7b-4c2285631f3d\n096b5c52-761f-4a1d-9a85-1a19c0b3e1fd\n0675f767-182b-41e2-a2a1-42496d1bdc08\n3140ff0f-5cf3-4b61-9eb9-6f24e114896c\n0f3fb68f-cc75-4f9c-b9a3-81bba80ba082\n69b56132-f3d2-4676-8c2a-315b5159d864\n449fbb01-6ea7-4e15-9dec-06afb27f0145\na9a3dbf3-e2d5-4b79-a430-b324a7f2ff97\n547d3e0a-bbe4-493f-976c-61e0859f724e\n37827c06-9f9f-40e3-8577-7536dc31f2fe\nd2c84379-47d5-4502-9417-59545be0dd7e\n117d87d5-ae4b-4592-b570-d818528fa63b\ncd7bae60-72de-4168-9a94-3d2d6e6caf5b\n6f914417-a63e-4c98-9796-0693f28d2b6b\n0fa72b99-d9e2-47f9-8c21-7e0192149bec\n6c530784-c027-4b33-ad2c-fc85c1bdeaf2\nad0841c1-f992-40fd-8af9-c080ff5e0dbe\n351386e7-560e-429d-ad7e-41b17e0be89c\nb60405d4-f3ee-456b-acb5-d2b447db4b23\nb0dd0c8d-1285-49e2-9504-28b6ca9b731c\nfa98a2a8-45e8-400c-9f27-5f2831c24e87\n9ded6735-f1df-4e04-a8e5-da2128f9469f\nda006359-6682-403e-8c9d-b37e44b5a2bb\nd15730dd-6c67-4942-8a2d-04e7d0287008\na9626bd6-9a2e-467e-9d5d-3d2f0756f78d\n77ae0fe0-3912-4d04-acf8-535ef6a4b6e8\n0fb3c8a3-1ecd-4cb2-8a1c-dd91aedb4c07\nfba20f3a-8000-4997-8717-932383087c97\n332b0f27-d9e4-435b-8055-6fd81707ff3d\n62695b0d-d275-4673-b8c3-61168973e07f\n2b00f6ce-7b7f-4c57-b38a-43975d7b268f\ncd51746d-c3aa-438d-8dd0-360406e84ef3\neb3af9bf-9bef-4164-9727-cda57acc57e3\n1fceeca2-cecf-4ed6-a40a-9572bf26d86f\nc56be425-b97e-4df1-b26f-191cb1d7b61e\nf9ca9360-05f8-4e2b-a5bd-258bec452772\n97ba7568-9bcf-4eee-acad-64e94947ddf0\n16e661b6-36e5-4b2b-8f1a-5d368354210b\n41ad12e7-a4e2-4f3b-ad89-11b6883d752e\n6845ab75-f26a-4b89-956e-27bdb60f375f\nf568cba5-73c4-4987-8080-7ae78ff77331\n221676df-270c-4c1e-8b64-e370e00fadd4\n37c237fa-ab5b-46c8-9bde-a6ea74103945\ne4e49d6c-229a-4b51-b389-6f1d3a035c80\nd0def357-d6a7-48ed-b12c-86d8a20c3164\ne95481fd-5d2f-4f20-8ede-169a5075a9c4\nca90d70f-4b3c-4efd-976b-886e65a80a1c\nd2450e11-44ce-4a40-95a6-71f037f89558\n64d52624-164b-423a-8df4-b93801f5ebc9\nb3ff9207-5613-433d-bdb2-355baecd5303\nfbfaf4bd-ea66-4a32-a967-11f116eacdeb\n776e3689-3d4f-4376-82c1-de4b3cdb012c\na6d50965-8daf-4dbd-ac03-20a5424627d5\n9712199d-6656-486c-9992-54fd5471b021\n3b18e8b9-f94e-498f-9ab4-aca8567e7427\nfa0cca40-18d1-4f6c-b5a8-21e0d6ef00f3\n0b0bae3d-a18a-4a05-9380-9645df31687b\n37cc8615-439e-4c05-8921-11786d700161\na310a12f-d276-4e84-b997-4bc5c366ffee\na4c94e11-5727-42bb-b0af-07a7e2b45b35\n035d74dd-5810-4cda-9771-6388e59a9cbb\nd14ca4e1-2464-4565-b6f1-925a9a1dd379\nf3486dc0-fe7b-4869-903f-15a4dd05bcc3\n7f988c2d-b56b-43c9-8a7b-ffb0c0d535fe\n53116fa8-fbf0-479b-92e6-b2d18b512dc9\n87c691d5-1d5b-49fc-b7cf-4b1c88f60e93\n870d835d-2a19-4bc1-ad65-35d309c26da6\n65da3746-533c-4570-9a81-436389a2084e\n21643752-fc11-4ef4-990e-228a61c9b61e\nacc360c5-79d3-4ec9-b248-30c0196a0db4\n5fffcc36-fb3d-43a6-8d47-fecf8199c92a\n9f5b738b-405c-40ed-9bd2-24cdb29276bc\n0209c0d3-32cd-4c24-ae14-1f1d0efdd935\nc9fd1794-7ee2-4cc5-ae1b-56fbd961cb88\n8610f5bf-40e8-4daa-ae53-3c5a02d6c290\n96808503-cdac-4f6c-9aed-d1a22d615650\n1b7c78bd-224c-4837-951d-ce79ae7152ff\nb4f1dfcd-27e4-41bb-9024-65df4d3aa4a5\nc250441a-39bb-4e05-84c3-a103dc820839\nd5c5af89-d3e7-48c3-bfb2-f3174175dbfe\n1c8682f3-8211-47ea-ba33-a78508aa6f6c\nd2ec4c41-6014-4d60-93bb-5a6bea4d3ea9\n38db5bff-71ce-4396-8c4c-2bc95aecfcbb\n332bf597-f6ac-4b54-83cd-37c9bcea7fa7\n3502e890-6af9-4645-b6f1-c1ef73f6c4cc\nf871a9ed-f7b9-4300-a2d1-ff559bc6f83c\ndfec58d0-6ed3-40cd-bbf1-69d8a93927d6\needf6e9e-d9ed-453e-b399-880728250a37\nf45556c7-216d-4488-a704-a4903931ee49\nbc204e42-9dba-48bb-b6b3-4a527568870b\nab4f2160-5855-4989-a7bc-3dc957f216c7\nc9b7621f-4040-4acc-b848-4243af1b3563\nc1721970-7801-47d4-81d9-24d6de304452\n09c47cf5-19e5-49a9-95b0-aaf0c31fb3d9\n21c685c8-50d5-47ed-85f6-43003dd6ded8\nb8eb1b3f-8f22-41d7-8bbd-8485e168aa43\n2ecd7b60-92ac-41de-acdc-db0f84476a5d\n7a2d26a8-cd26-4c1a-946f-21c704a6d367\ne4c9b244-6966-40d3-b65f-7b66542dd2ec\nffdc727e-9748-4a7b-a182-c7214bfa28e4\n2f24e794-4da6-429a-b0cb-ec0bf229e835\nd7e2b70c-6e4a-4ff1-a6cd-7a57a47aad33\nb45041bf-b8ce-4764-923f-cbb10f4502cb\n0d621f0a-2366-4063-9ad6-63813e789398\nc5808b5c-08da-42dc-a58a-a72beed72156\nca542703-f5ab-47cf-9163-c5a8c41433f7\n0a5ce4c1-099c-4afd-a570-bdb1279745ee\n5fb49bbc-12a5-43b8-b723-118609ff8d9f\n15004d11-2cdc-4ccd-834c-e4a9c8826cbb\nfc472bd7-f351-4231-8fea-67f960ea6f0d\n8281d6a1-eb3e-40cd-aacb-6fa453326f34\n0fb8bb70-de34-4ba8-afc5-4ece13649eb5\n6a210682-664f-40c0-8b34-078dc60b06dd\n05ad220a-3889-443f-a67f-bef3200e8ceb\n652f0712-cd93-46e5-9655-9fd93ec8c06f\na18a50c3-bee8-4060-b4d7-c796ccd7f822\n37e69b69-f082-4651-b5e2-7ab072f755e8\n4c5f2b2e-87c5-42ed-878e-d015c915f904\nf561e17e-d023-4137-a57e-eead6daa108c\n74c9f86d-ce58-440f-9ec6-4977b7171a55\n38ff9e92-ed0f-4048-8500-1cca120f129f\ne61207c9-78b4-4404-a135-ee9ae15717cf\n58c233ee-95e4-4201-91cc-64072199cc4b\na612b15a-2a17-4a7f-93cc-274b5082cdef\n05f283aa-70d0-4a5e-bcbb-c7c23a3ec23a\n94966e2c-d415-4bfa-8219-b5dfba54bebf\n9d468bdc-7920-4589-9b26-f761393658d9\n602f29a7-7450-471e-b8bb-e12ca0794ae8\n38ceaf38-113c-4bb0-a7b1-43f1b51157e6\nfeecbff9-c239-4507-bbfc-e3de81a413a8\n8a7e8d3f-e33b-4a10-9f7d-c9c9ecb5ebaa\n1299f2da-a0b4-42b0-bc5e-932bb04e5eab\ne89976b9-1518-468e-9cd7-1ae93db90108\n7b629740-b4d4-4cbb-9bd3-830146302e08\nf0e9d073-8293-4524-82ee-6a2005f59aa3\n53397252-a514-4d9f-ae12-383eb6f95e50\n1e4a82c0-1f54-4c4f-ac05-f7c16c4c9ec8\n93b58ded-f4ee-4cb5-a865-43dbdb5c7ac0\n85b81c17-9990-4b1a-b267-6ac5a7c28e11\n5b9a1977-d8fa-43c3-a6ca-1eea9eea1823\na4805443-9e0c-44a2-9562-a6bc437b7e34\n054ff3e1-cbfa-40a2-991d-16f63114bbd2\nd514c4f2-8690-4b54-892f-8dfcef655dd2\n2c8bc851-2f86-4863-a336-7028e1436eda\nf10b1739-e818-40f0-91a8-81bf50ba0f30\n71c0928a-03f6-425c-b68e-6f02614b5fc3\nfe913206-3f07-42a4-96ac-c5933029387a\n87ab21ed-4d0d-408a-8d42-0e0294413cb5\na9227bf8-67e2-4c79-b796-a0319b60dd83\nca786461-3ea5-44fd-ab0a-11f29cbfa979\n1319a767-2802-42d5-90c2-4eefd927ed11\n3bf0fa9a-c074-41b9-ae70-dc0d71af4ca9\nc0bb754e-dd8e-4de9-81a0-4c84b60434a3\ncae3ade0-d2a0-4553-b936-36739a8cc13f\nae226c6d-5185-471c-98ea-e8ca25d48a32\n8a680568-72cd-4367-86dc-5dece31c6e88\nf8aff445-bbaa-4bcc-92a2-af22ba6976d2\n1eab9595-a3a8-418b-88e3-b773366d301f\nd4d3ff5b-de8a-447a-9e93-ad872f3add38\n67766779-b02b-4bf6-bcc6-a0471e8ae80c\n9fa1e6ff-6038-4cc9-8bf9-9e71f3ebda7a\n0332ebb6-e473-4f7a-8924-2ac79ec88471\n52fcd15c-216e-4551-ad47-f4c26b0c762f\nf29f4175-3af6-4e10-9055-4860ecac2303\n576bb97e-d5d4-4c27-a6dd-03e5bf59a093\n36c16e7d-f603-4786-ac3f-c04311037111\n9adc0353-484d-4fb0-9b7c-1c8cece5722b\n8f3e254c-9ae0-476b-9552-3e7a90a95ed1\nc1f7a907-f663-408e-b2da-924c77d693a6\n525e8f45-0e6c-4912-8004-cfe7c7c03f38\n4101b7d0-6517-47b8-b6a0-e827b4eda93a\need8aa02-4b78-42b3-a002-a95a89c3d847\nde1b73a9-cf8c-456c-964d-6bb0e94a91f3\nc2c3a0dd-f1e7-4b33-a7d1-7f56f3b999ac\n7a520b86-0e62-44fe-9ed4-4027527cbc0e\n43743012-d513-4370-b1e1-ed0e43b053f4\n193107e7-fc08-4398-884d-149722545c80\n9f2c8fde-64cd-4c31-9858-48abb0caebe4\n5bed4368-3d0a-49ea-9c50-1feca8304f29\n05d1259f-bc90-4de2-8625-6a81196286b8\nd3c2dd6e-6bb1-4d53-ab88-436de6833415\ndb32b785-f0e7-4796-a6cd-b395da23dd3b\n9b308b6c-aa2f-4d00-bafa-594c20134b76\naf2f55bf-d5d3-4f49-9a09-b9c7e0972361\n11ed692b-3417-45c8-855c-67614f9f02ac\nce98a10c-1f9f-49f0-b3b4-d3a7c7d21275\nb653ce13-85ac-4f58-b144-10d869341526\na3118885-eb45-4b1d-8de2-df1a8adbc9a9\n59fc96da-7887-4ef3-bd28-ae76860dfecb\nc2d6b8da-7ac9-4f5c-841f-ba51fa641cbc\n957be607-920f-497d-9f96-89a74c8866db\nce76809b-3ea3-4325-9d4d-4dfd63ddfe30\n53f00f48-8681-49c4-9fe1-8e8b9612b96f\nc7bae53e-c75d-4c89-aeaf-1a266e0525cd\nd4b2f648-3f50-4f99-a09a-d3e6d265d344\n68bdf384-88c2-4f7b-9fb1-5d6369802498\n9981e5ca-f589-4166-9487-8735d8a96413\naa6de880-6ec3-4778-b2e7-a08149d1e87c\nec4ebfc1-25cf-44d3-9fcc-ef1fb6c4943b\n88dd2d05-c21e-4df0-b669-7e166a0a6ce1\na2da7c40-bfcc-41d6-9263-8808efd66715\nf29a749a-ba82-4634-bb1b-d8516099388f\n05a7df4d-144b-4465-a541-156b46e2e319\nf9c7d273-2c0b-4952-88d8-bb532a641a37\n9a926be4-9be5-4dbe-a051-e43e391aa88e\n5f4a476d-dee2-45dc-9778-1595168bd0ce\n7bd92f29-5882-43a4-b883-d047f6c3b6f3\n0795e333-6763-46cd-9715-aef6c344de25\n758e6e13-a14d-476f-819b-9e0f5b646c44\nbf61d5f3-61a7-4fd7-833f-1944d3e2df34\n530cec8a-72c9-4891-acf1-4b0718652800\nee916572-d9e5-43f5-82d3-4b7ff37817df\n25fb71e7-9597-4ce2-a3db-5da68876fc5d\n8f0192b9-0eac-4db1-9cd1-987ff06b88a2\n56438df2-7886-4421-aac3-e28ccc4cbd98\n709eeb57-2202-44fd-9de5-3d3ff2950fb1\n75573aa5-408b-4f7d-b400-4460e98248b4\n0dac54d5-3b4e-4cf3-ba6b-be1688a5f3bb\n55e35f6f-e59c-4cde-b77a-347e80b2658d\n3d7f00ef-8ed9-4b88-b4b4-2a3719a93de7\nf36e1688-f2e6-4562-83fc-733586b7399a\n51a3050f-fa4d-4690-aee9-f1d9fdb3343c\n8c792f91-8522-421e-883d-24c639bbebee\n3ebda99b-52d3-40ec-81b7-8c3607376288\n4e6765ee-5aed-4203-b6b4-5f597d5dacca\nd963efb2-2b39-41f4-8ea3-ded2d7bc0baf\n6e3fa852-1b41-4e9b-889a-b28ff8d18673\n302c8153-6df8-4c21-80f0-9511fa7676e0\nb84811be-013e-4e79-8a40-1b97aebe13a9\n7a028ff7-3a66-40bb-94b2-b26e751e7a4d\n4292bd0e-3d1e-495e-a608-e636396012a0\n6f8c080b-1155-461e-9d3b-43fff58a6304\na181aecc-2528-41fa-a712-5eb7285a0fcb\ne980103c-01f4-4cde-a884-da91af1c489c\na61b727d-ec30-43ff-b795-e9c371247fa5\n83eccce6-edf0-4a65-abb8-c67cb99a2536\nff0070e6-ea7f-42ed-8b80-f15f4a6cabe7\nad584f6a-44c7-4030-8319-67e653640aa2\nc045c0b7-fa11-49f5-8eea-9e36c03a3022\nbc4c44ed-c9b2-4722-81e8-80df22c2cfc9\n39e5268a-3c73-4b98-b880-58419a01db0e\ncbec1ac7-c63d-4c03-9ee7-343cd39dec1a\ndb8a4240-7a1a-4b47-8d03-4df0c105f590\naf0c621d-cb08-4133-97e2-bfe797996848\nd2b77c00-a0c4-43cb-bb77-a80bcfb25e9f\n3f6a642f-324b-4181-88d4-1412536a18db\nba154ac0-7a28-4377-8104-df0c4c71df99\n3cd224d2-f512-4a29-81e1-4acd037aa35a\n5b1b0149-f061-4d8f-b7b7-26b378641230\ne2ca406f-8f99-4598-a5af-8cfdc179bc25\n7608ee46-25d5-4590-b0a0-9a7091696f5e\nbdeaddd4-5f6f-466a-9e04-7c43821bbb01\n47622652-236f-4602-b1c8-fe7696af50fa\n61e50bfd-3669-469d-8c8c-cdd74982ba9d\n8a02ca68-4f43-43b2-9271-9202d3b76a57\n4d2bde36-61b2-4cdb-8152-595f50f3e6fa\n3925910a-7254-43ee-b467-f054326aab4a\n7d27081a-3d3d-4e7b-8b40-0f45eaec4eea\n5e8dac68-53c5-43f4-a94f-4547de5dc6c8\n6a6b536b-e678-406c-b8a0-5bd1e835e4de\n84ed42e0-026e-43c5-b6f5-160cfb2eb0fa\n281d1864-9bd2-46c4-bdba-fa8c92c07e3d\n48823ab2-1282-4abe-815f-9c889b871303\n07f33e16-8114-4c20-8b5b-2c5c0fcdef1f\nbad46761-dd16-41f1-afec-be485fba3a72\ne5798604-cd43-4675-bfc5-1f41351269da\n5ba9663a-4e38-4dea-9790-5f1c2a7f3854\n28d78434-fbb6-493d-a509-bf1286e792d1\n5916db7b-8d3e-41b8-9f9c-ad2f3f07c999\n476238ea-0fcc-403f-add2-4cf6aa379004\n5f1de5a4-5bc0-411b-856c-9d74e6e0db5d\n087dee18-36b6-4058-9948-946bd37328bd\nbfd1a204-4211-44d6-8761-cbb19057ddb9\n88fa233e-96af-447d-90d6-3e2d434e9714\nac939541-8c16-4f16-8488-8c2f5d119181\n99b235ea-0448-436b-a305-4ecc2c01499e\n175de7e4-f82b-4021-a5f9-7d55f3566430\n1aff1854-1caa-487b-9521-a6f49523211e\n83a2f233-7ffa-4905-aa87-67067c318763\n521db5ca-5d3f-448d-9671-a521b52f1eda\n85982c83-f2b3-4de1-9b61-01e6f1cb4030\n93ee10dd-05d2-454c-8688-0d5e63af79c3\n9b6babfd-e84a-4257-bf36-18469005d9d1\n894b25b2-fa44-469e-a7ff-28b19f0837a1\n686a8b0f-0919-4891-9995-8248c785024b\n284e9b10-ff7d-4453-9160-4afe6c4e8a96\nf90f0348-2bc6-45cf-932d-475f048fc39e\nc46dca1a-867f-4ce5-be0b-ec22d0bd8e0c\nf34e33fd-e5d1-45a0-a547-23afdfdde301\nb879e548-a68f-4b94-8378-38f20ef5cd10\n54fd16a4-b936-4215-8e06-8423929d0023\n7a834d21-c113-4861-95df-d1ddd8d4b42e\ne3bda224-57be-4c65-8e03-45535bc92b2a\nd92ac16a-79da-4840-9b97-a03e011592c6\n45949f62-ca87-480b-83aa-e0a15592128c\na6e267a0-3462-4d57-ae2d-52dedd590585\n70d40467-aa63-4a2e-9bf5-af6a250c7020\n5303dd77-d597-4c39-b856-58fac035f118\n497c9f62-5870-4432-ab73-8966d43cc95d\n101ad945-576b-4cb6-926a-74def2888061\n0a048931-28ce-4efe-8e48-11e909c849c4\n351f4607-bf9b-4b08-aa62-82851235b19b\n9afab0fe-634e-4efd-bcc7-4845a07070a9\n0ebfcb16-d268-4c47-9146-7698abfabf9f\n2399d343-508e-4d63-89ac-e9135eaec9b5\n559fa016-ad7a-4b6a-a7e1-c2e200107a7e\n799b8dc8-e11d-4354-bfd3-a3b481c71ed2\n81a0eaf4-754f-4945-8265-6de35e0a5514\n077500de-db1b-4039-a6ce-fab441e67566\n0473ced3-7d65-4ee4-b765-4a2e8f54b654\nab114fa2-589d-4baf-9e6b-5a39bb15bde3\n2604a859-c2c8-4779-b9f3-bce85a8fcfdb\n54dc78a2-ab96-41e0-8250-c3346d2af41f\nc7632409-a695-45c8-a8de-a3bf56427f7c\n28ab879c-24a8-4f8b-aa9f-634aa90305b4\ndf8c0319-f117-45a0-b164-705e89b578c9\n25263fac-57f7-462e-b6af-94dd562f5533\n0151b138-1ec3-4323-b8a2-ce67d6469d18\n1f0c2f82-d45e-43d5-b261-d979fee0eaf3\nd76e1e44-7868-43c8-8c36-a38119db4395\n4460a34b-ccde-483b-9cf2-d7fdf21631bb\nfe856e5e-534e-4cc7-9e51-d211f72c3e62\n27ee3072-4a2f-421a-83b5-cc23cbf2e41e\n74429d15-7c26-4e72-812f-52bf0cde693a\n8744ab7b-63cc-4a89-ac6a-e1dfd530998c\n23e443c3-29da-4fbb-b273-ae1039501913\n88f9d68f-4aaf-4bd1-b522-ff131b973ba8\nd603b5ba-19c5-4c02-8bcd-6b79aebd1ef3\n7472a4b7-f019-4085-abb7-ac7b25397089\n57941106-6ab1-48d4-8de9-b362dc61cee6\n05ac2656-17ef-4fe9-859b-f774e13adb34\n7acb78ad-a55f-4f67-a22b-a6c3eda6ed58\n908e7c69-88ea-4ea3-8d18-f28f81a12b2d\n08243cea-96c6-41d2-9a10-69884c5e64b5\n10a99eb1-0d3f-4ac5-b4d1-b9748fb5dd61\n50263392-2d38-4aa5-9017-176b6f9e100d\nffb733f7-c8d7-4632-810f-21e4baae7b59\n3f9a7822-3b66-4549-8b54-433ae1eb8d91\n633dde45-cb49-4efe-9483-e12a21146503\n01a6ce8a-01a7-4617-9cc3-fa6e4e79e74c\n1d4c2547-4696-4a01-9928-bb47aca56149\n825ed3f9-cfc1-49cb-b25e-0854e7fa93f3\n5f80105f-6638-4d70-9b1e-9fd8bb15d614\n0b25ba1f-9f7b-4c63-9062-e38b3d3d03a9\n0c157e6b-6211-4632-8907-05486691422a\n8d2bc0cc-43a6-4ad4-abe9-2177ccb9933e\ncbe1760f-4bcb-4b9b-bc1b-5b39f4af5c8a\n507a3f42-4835-48b3-b79a-8e3f06b2848d\n65ac2ebd-68f2-44b3-b11a-2007359427ae\n297c5564-46ef-4e95-9110-8aeb238d91f1\n015309af-7426-43f7-b48b-837273864455\n9e8f8019-3279-40c5-83b2-a7e4284d6b0b\n2b9ff5e7-9c7c-4889-a028-6e12de4edf2a\nbec43974-1e92-4051-9ef4-c7bde47672b7\n29f30b8f-8366-4f34-baa2-5d2e8677617f\n0225107e-c62b-4fdd-aa6a-2d28c0ea77c5\n30f7c513-25c7-4862-9c85-9c537af4da65\nef2d7f70-8d7f-48c6-b43a-cd10fb5872c3\n9f75483d-e557-4b7d-8b3a-e1b81a997085\n515a6b55-b564-4d7a-85a4-1baaad1892ed\n06ca3517-3110-455c-a156-9d980713e86d\nd225bb60-8648-40de-86bc-1ae9f49a203c\nce01fa77-6cbc-4992-90c3-e60cc246eb6c\nb8470d67-447f-43c3-bc8f-46939737d04d\n1f00185c-e301-4ffe-a327-e6f6915deca1\nd491379d-a731-4e95-9df2-5b342a3b69bc\n46342395-379b-4f6a-ae6c-feecfb79c5da\ndd0813e9-c3a6-429c-9808-4f39f57d1c97\n35195ba0-e30a-486e-8ad2-32d9c460490d\nb4be457d-5099-41a7-bb71-d8b94c194faa\n39dfbc9e-b20c-40f5-8d59-7b2cfae3f275\nc150f767-5b0c-4ec4-b0dc-926f4415d611\n791758b3-2c61-46c6-b74a-dcfc84ea2e28\nf2ee26c0-837e-4a61-b90a-3c088564fd7c\nb20702f1-3aeb-4227-bd83-87fbff2eb3ce\ncfc64b6a-72d7-4998-a417-68810bcc4814\n8873ad67-1755-4eef-81ec-a2d0af7ce0b3\n792766bd-e129-4325-bbe1-ee7c3e57ae97\nb558b4f9-2643-4d7d-921b-ba9fb0fa005e\n499e52e5-9cf7-4c17-9ca5-aac8e141f5d1\n9d5b332f-85a7-40d3-8b96-49b9047b5cd5\nfe0b97a0-082f-4c68-9ab4-7d0a6d8c1e8d\n9e6d6c43-4b38-4ffc-afa4-d31a0815a0c5\n44286319-6b1f-48b5-9919-6027e3e8858c\nc262fe00-bef8-4504-b2d2-cd37cc134a7f\n3e4d85e0-e392-4fd8-b111-dcecc566c55d\n3511099c-9f83-4137-9570-d4f0187d868f\n9ec8aa53-ebc4-486d-9f35-1213a75394cb\n040d071a-46c0-43a7-93b2-bfb34a00e345\n7831b189-0783-4767-9ea8-90eb3989a6c7\nc65454ff-23bd-4540-9b71-915bb554114d\n4a4559ce-4ed0-43b9-908f-486b052f2928\nb6b290a0-0012-4c32-aaba-79adaf65aa30\n2ca52fc1-a9d0-4f87-a9d2-bdbf788b1352\n853aa4fe-c91f-45ca-9eb7-de977f77a93e\nf96bcd78-497c-41d6-92f7-95573c4e11d5\n255128fc-d1f1-4c3a-872d-60ccfd73c32b\n8c0184a9-8bcd-4c15-9aab-24745aecc863\nc689c67a-66b8-4de0-bfda-54af0513f438\nc3992f19-e947-4dee-91ce-e9ade02723a2\n7ee6a992-d912-447e-a718-24da90e047c5\n6232e139-f861-4000-b339-ac018442a24a\n009a1632-2976-4256-b2e2-b80da0b320b9\n049e6efa-2b2c-42db-b695-b0061ed359d0\ne20c01b9-4fae-4616-b5ab-db5f06645fcf\n87beef4e-cd32-49a9-a849-8f629c5d08f6\n4e42fe57-7ede-4284-a423-c76c25c2445f\nf307a171-d5f4-49c2-bcf2-3c851202d6cf\n2c62ebed-dfdd-4d42-9597-395aa7e5b73e\n3a974fa6-9f99-450b-a52d-0ded12741b7e\nc24cda64-779e-470e-af60-2b6cbb9e5bd2\nee7bbd99-8cc3-47b3-83e6-eeb1c6c507c8\n8294f2a0-e078-460a-92b3-899bba2bcdc3\nb856a0f6-ba10-4275-b5fc-09675a3e27da\nc4e75fdf-7e00-4d47-871e-8c4d493ab412\n701661e4-3ba9-4a6f-95d3-03d21c94625e\n13d5c3e4-6dfb-4ec1-9152-5969c60bcb93\nf7e83b00-a356-4917-a96a-22940d25aba6\ncca184c8-ad2a-488e-b8ae-fa6b77fb13ac\ne1b1a4b4-9b1b-457e-8812-ef5fbde79577\nc713d188-0657-4f60-acea-2f3a332377be\na7c27fdf-3855-4983-aa05-b4a6719ad73b\ned7a25e9-7406-4119-b0c1-ae76c2a95e90\n96e398b9-0ca6-4108-ac7a-956b244777c2\n63c19ea9-db3e-40c5-9af2-283b2d029d7a\n0c823379-0610-4f06-b036-96830d5b939c\ncdd6b936-a70e-402b-90b3-5a13bae5d099\nff813b64-c247-4123-831a-679ad5bee13f\nf7fb7e65-7e9a-43bd-9fbe-35d0e317303c\ndbed6903-0032-4b35-a7ad-c3b9ccf33e28\n9eff8749-fbbc-483d-a16d-8c00cc5c72bb\n693aaf37-0d7b-4cd1-b465-9183d8df6d55\n4c0c427e-d80f-4783-9e8b-f20d25f3289a\n545ffb2c-0ff9-4ca6-81f4-e7316fd4d885\n67f6c6c4-b801-4a9e-9574-ac2e0c6f2c6b\nfbfefbec-3ac9-4003-88ad-bbc8f13b9bdc\nfa58a29f-b993-4152-8bf9-9f6760fe899e\n7e68f421-99dc-4c77-90c8-32dc864dfdf4\nd7e32023-4156-4a16-bebc-b3b7c916b58c\n0c96d230-b68f-42bd-9eca-f18f7e518c21\n4c2277c1-5d05-4cd1-a798-5e8e584ce123\nbeea3f8d-1e68-402d-8eff-a690651fc18f\n9269428b-1986-49b6-8131-1a60cd2c460a\n29290166-2c8b-4538-99e3-a4279161d99c\n1c480b64-a4f1-45ca-b3af-4af8ca376a61\n6ef4e923-4470-47e5-be84-6f4895dfedfb\n1f659990-5289-41b8-a835-0cea5c054bb8\n004115e4-8585-4aa5-bbf6-d7e10ee4ce57\n2a87d2b0-c973-40d8-9dad-4a10611f704d\n87d489a0-02fb-441f-87d3-0ba6d29f9c6f\na78b9494-d453-465f-896d-8f37aa3acc81\nbdb3ce35-b3c7-48dd-984d-de65705fc2f6\n83e28f7f-ee89-4368-92f2-166315987144\n3f389c24-9bac-4c57-b90e-ca753b2ce9b3\nbb5638e4-de03-47ca-8bab-a1a06c9ca4fc\nbd85192b-57aa-4af7-bc3b-98c5c16843f1\n167d38d5-3868-4f82-aad2-91499af231e6\na8c1c7af-618d-4a61-8ea6-78b8d5964bc8\n8c2fedbd-a5d4-492d-8d65-4f0c0e9c060a\n7821e828-0526-4627-9524-f6d11dfee49c\nd708ade3-90bf-4192-bf2c-b42a225cb256\nce09cb88-a95f-4309-980d-bebc636e2bd6\ned77c0cf-93dc-4e25-96a9-4ba9fb941c18\nb8230ecc-50cb-48d1-805a-4074a08f32e9\n1fbec7ca-927d-4e98-afbe-3ac2448db181\n6a915c6e-e506-4f4b-8806-2864dbc33120\n13c84fe7-2718-41ec-9eeb-0938b1988041\n8914625b-86a2-4d27-b5b4-5d1faa84ac5d\na1e386fb-3645-415a-8011-8fcfd5e64fd8\ne91d167c-e6cf-4305-be99-22da9a552638\nc952c194-81bf-4bbe-a7f0-6b2075cd104f\n400134af-629d-4455-a165-f776da8cf3ac\n60edefcf-0193-4827-9ff7-8fad7dd72b8b\n33a34ae3-4ef0-4b84-bdeb-b674919d3d5a\n7a0cacfc-916f-4e9b-a6eb-f86414502ce1\ne9b4e449-bab3-4244-8d07-7b6538ebe119\n8aea4f2a-2d25-443e-b05f-1f5516fd2551\nb1cef4e6-bc03-413d-a913-15028d8dc3cb\nb14e26b8-29e9-41dc-b2f1-e8db25acbedd\ne8621f3b-5211-4b0d-83cd-000a93318599\n37d979f9-68ee-44bd-b7b2-8270207f12e8\n9afa714f-4dfc-455c-8e0d-71268400d850\n9a7b7051-d71e-407d-acef-85ae2f55774b\nf7a1ca36-c523-4913-aa97-f584175c74ac\n0d04a180-922f-42f9-a074-a3e5a16085b2\nf9bc1295-e204-4029-8b1a-9df1f03ec94e\n43612028-93cb-4045-bbdd-08c59fd0674a\n1ed7d8da-cce1-4556-b804-4f23c8121e49\n8b11e185-2135-4f87-a902-25fb6442f4b4\nc39d6d12-1e22-4f44-8f7c-75fa22f3cd29\n16abff6a-9026-4a7b-b2ed-bc68a285df5d\n2a1666a4-1988-4ba3-875d-6ac01f74622e\n02f525dd-2673-4679-b404-bff847fbf547\nc277e860-27e5-4ea4-8129-687fe13ef861\n4e35c81e-3e33-4325-a74b-377a05d1407c\nbf181bdc-21a1-4e0f-96fc-02dd2e1cce9c\n2d240fbe-b916-4848-be7d-b3a058b96b13\n07a55ca2-b2ee-48d1-ab22-2ee0c51dd3a8\n0978629f-7b35-45ab-a68f-2473b032b70c\n38bd97fd-3957-4bf8-9604-bbd2e3ead3c3\nd9df7ddd-4aa7-4a8d-83a2-3375e38843fe\ne97667a3-6de9-48c9-93f3-ffe924f39dd1\nf55cf62a-2dfd-447d-978b-950d9df6c584\n1dcb0676-ea11-4ebc-9a56-e64ed46fe3a6\ne0db9c55-83c4-44bd-bc1d-6fbbce629d3d\n43314ef5-8ffb-4eb3-9bae-96f3d11c33c4\nd2844961-f79b-4764-87f8-13efb5457ffa\n35a54b51-0ccd-4962-b28a-b1f82809ca83\n4b451187-0329-4d7b-8332-c9a5bb97e419\na7aa4234-c332-4f8a-9854-f2c28ecb1127\n209117af-295e-42c5-95ca-373e72e6295f\ne97885ed-5002-4880-88a2-0788548eaf34\n909ecc53-35fa-4551-bf11-987a81994177\ncbf17922-8062-4336-8472-cfd68e2b2262\nb88f426e-34b1-4112-a3e6-d65a1850d8c0\n9c34c044-dad2-4554-a54e-0f47fa6eb87c\nf31d7a9e-5255-45aa-86d8-953347f95d50\n79d706a2-c794-420d-a760-0f6b74f2d061\nb9421aa1-3c78-488e-9af3-8882b20b097d\ncd4fae71-eef2-49d2-81a4-50825c96c30a\n3d32b0dd-36c1-4398-b552-b290630495f5\n38bfc49a-8a0a-4c63-b883-1eaaa0b5e4ac\na9e9ed09-d296-4e97-b2d4-757f03f8bab3\ne68b9d89-0fea-497f-a8df-425939cb3527\n8b33d633-b02a-4cbd-887a-204561de0d6d\n24495ccd-95c0-4440-8fa4-247a0be6adc5\n7692e32a-a44f-43f3-99e3-2f110b149e83\n69570652-54d4-4f1b-ad7e-e11964cafa59\n4c53377c-d018-4ef3-a13e-0a4d2b2c3080\naa70d024-5daf-4b1d-b485-96338c5137ee\n3570d836-ed43-49a8-af42-45811b5a8a0f\n9c43eb40-4e88-4cfd-93c1-9f3ad9e655df\ne2bf7fba-44eb-4dff-975e-fe3cd1983d35\nf31f6a85-1853-411a-b86e-cfca01a9b20b\n325f7719-4e3b-4fcc-9d4a-aa2383ee0914\n9a904e32-0a9c-425e-bca6-6d8b78308786\n8c38f0e9-1879-4821-a07e-5f83cbab8e92\ne72fef83-3a54-4f18-9bef-04a7c13112d2\n4f2cab1e-a76d-4025-b220-1a086d1a291d\n52c55d1b-b163-46ab-b803-ada7c6f84fba\n01537073-c13b-4f54-be45-4a829e845d97\ne4cae1ef-7239-4dcc-bddd-79fca9f33c98\n552477c0-8df4-4456-9e72-7c4f5363f22c\ne9f263d8-333d-4b10-be7b-e319cf0017ee\nd3f9add4-29ff-4de4-8552-c1f776fca736\n14838f3b-3f67-4e97-b8c0-7fabb0aac7d8\n289b6b68-69c5-4a00-a6c9-fecdfe464f69\n50547c2d-c248-436d-aee0-cad9f74d6957\nee9013cd-0ba9-47ad-a544-816051f55fa8\ne78f33d9-6734-4fc2-a2d0-92af1839b96c\n998e4e36-9d2b-41e6-8d76-04a9fe0d4cfe\n6c853545-bb63-47ca-82ac-10d46818659c\n043b6cc5-9c3e-4fd9-b8f1-2c54da3a1051\n564c2c5d-d634-461d-b934-0a1caba11f15\ncb23b2ca-4631-4699-aac9-697ca5edabd0\n44d31545-f783-494e-8902-389af61e92f7\n14ae09d3-3a74-4db0-af26-f5c94850fcf5\n2dee9c72-bd25-43c0-809d-bad603df0447\neb5c15db-df28-48e9-adcd-d3ad4faa1b54\n5d4c4db3-59c5-4a2b-a717-d81f12cbaff6\n0cbb4e1a-f172-4702-93ae-6119b678ce95\n39634180-74b8-4a82-b921-51c5c9f434e1\nfd50d3a1-4c8c-4fdb-a42b-281a4e8b3924\n229ce692-e020-43c3-a1f7-407191714545\na4dc9aa1-88bc-4e3c-b82d-567b6a21f156\n8a071f65-2cbd-47b2-b405-9b513d4ad112\n8d6724e3-8d80-44ec-a884-1f9d7980a190\n48299fef-da5e-4001-9a8d-8aedae8b04e3\nafc08710-75bc-427b-af68-5cbace80eea8\n0287e221-8527-47c8-bdeb-7b8cfb01b2b7\nac91dc1b-311e-4d42-8dd7-920644a2a00d\na27fc4ad-46cb-47b4-8da7-938cb3549953\nd065d2b5-ee63-4f7d-9cd6-5010aef86245\n466ddd82-524a-4d93-b1d1-fecfb703481a\nf48a635a-bd97-4505-bda9-fb5c3fb87734\nba22b5cb-cb83-4b5d-a122-08e30a6471df\nd0c96442-3966-4b03-ace0-a634f2ec37d3\n2712e296-ac00-4323-8d7f-5dc091f31ee4\n34795d00-dc60-4012-9c04-1a8b4c12e897\n668d3681-5761-4f27-9e8a-5d98dd2b51b1\n8ecbd905-153d-44ed-aadc-252bae871165\n9e173606-f1ba-40ac-b3a0-a23f59a65511\n1b33af58-d663-47eb-8b5f-cea035dfd4a0\n0b61d5c6-dc73-418e-95c0-017d8e9a53ef\n9e75cbcf-56a0-4f21-a3d7-fb8ad15187ec\n8dc9c201-c1d7-41bb-9fef-fce69512094c\nb38c4768-0145-4962-952c-a73c0c008424\naec4d98d-f8af-4372-8ac4-f2880fceb3d4\na408a090-eca6-4dd0-b363-7c5f26e90c06\n862e056c-677c-4ab8-8daf-936fa8835737\n68bd3d6a-d9aa-44f8-94ab-3bbc53f328a0\n9e2bcb2c-5e68-4024-90a1-8253219d2fa3\n180df2a1-7366-4486-8641-f963942edfd3\n9200c414-7510-4a63-840d-32534df7a239\n9bbfb179-f09d-4f69-aa3a-498942d6ca78\n3e345ec2-85d4-4ea5-9c58-bb9e80d694cf\n4370d6c3-18c9-43ce-943f-345b748b6ba1\n2997c9a3-e1a9-4c2a-82ad-e4c374327785\n3a755e5a-55d1-417d-86ae-c4ebb500165f\n36d0f9bc-a011-4ffa-ac62-b23eb16ba256\nc28c292b-761a-42f6-99f4-0c193becd53c\n37159550-cfa0-4e67-96de-54be4ff821ff\nb695415f-6693-4dc3-8f02-7ec987dd6662\nf209bab5-ac2c-4ea8-ae4e-e201b3e13be7\na163109c-3025-44db-a948-e5b594354374\n8e990aa0-3e59-4c13-b0ba-03c91f4a5fed\n0cfcd085-3240-42ce-b1f3-d4f5134ae5cd\n82f17c28-4a82-4979-9b6b-132cbf0ba56d\nc61f99b3-adc1-4fad-bcf7-239fca89b8a9\n7db4f760-ea1d-41fb-b141-0b93bb5feb4f\n821f01d1-146e-4222-be2f-cfc72f02989f\n720fde42-f10f-45eb-8501-a032f1728961\nc7ea5842-4d9f-4450-81f3-ea86d2db6ef6\n5849055f-0e82-4781-a62e-7bd34da42879\neaea78c3-6640-4e2a-a2ed-be5a1abc1e86\nd6fe7a3b-f5a2-406b-a1b3-817b59b501bf\ne7dc0c30-4cfe-442f-bac0-a6995de16d95\nf97a0327-4551-4608-a2be-09ea59466685\n77692b48-ab26-4745-903c-eceb4b81bf24\n59ac52d6-fdec-4874-b0bb-daee511f3cff\nf330d9f0-5bb5-42d2-a6d6-d79500a0169c\n5a0316c8-4c29-477b-89d7-26a93fd3cc78\n019bda48-5f59-44a1-bf14-92c762a1e5b6\n23e121c9-8161-4083-83ca-c569bf9d7579\n6c55b397-fbd2-467e-88ad-4663195527d3\n7352e8ad-1d78-4743-9469-db8ef9c84fcb\ncc5cf9ca-fb23-4533-bd00-77265d0d873d\nd9903feb-201a-40d9-a3e8-dfa13059718e\ne9287fb7-e495-496a-8193-80a6ab26ff29\n6a8e4c7c-5e42-4d6e-b998-24ef77d021f0\n30d37ecb-80ae-4208-bd09-d66ca2f24481\nbd273b66-bcb6-4c48-b091-67f56e9aafb4\n76795cc4-006d-4b1d-9177-a84d2b71a7fa\n1a059f71-3b9e-4cbe-b46d-b8efe6b75231\nff6bf4f6-d078-4358-80f8-e424b927b241\n333289ce-21d5-4d73-bece-810136deb2c4\nc88cdf96-7331-48b7-89ea-b9ef79f68702\n830ca99b-3517-4e42-bdf5-5d59e8b29789\nf389b142-fc29-4523-a9bb-68efe067fae8\n40fa640e-9940-438e-903a-9faa3e3cf509\ndb4f64e2-eddf-474c-80ac-3cb9215ace68\n0b72c324-d892-414f-bb3e-53b4c48cbc48\nbd937e48-e91a-400a-ad08-c4a637dac35f\ndd5e7a13-6747-4bb7-b086-f7e4bdf09463\nebe1464b-4e89-4a54-8e75-20fd1ca93afc\ndeb355b6-5b8f-4f36-a479-0ff8c76ad7d4\n4619174c-efe9-4165-b1f4-390b9b86d9ed\ned63d050-1fa9-4979-8232-3160443b763c\n574abd57-9959-42ee-9614-c705564f183a\n0850139c-b97a-4ccd-a82a-019034fdaf80\ncd909bf8-9f4d-4dab-8c31-2ec27eb858e9\nae89a1b4-3159-4f7c-9462-86916f8ae5e5\n07901255-0543-470f-bd37-6df7d863361b\n3d59cecc-4269-4a64-98d2-35680c752015\n6fba06f6-a9d1-47f7-a935-a09ffba2350f\n32333297-0a57-4e0a-bfcf-dad3faffbd40\nb967436d-9003-45b1-8539-c0d13f8a245e\nddbb73cc-e497-4b58-b667-92caac7bf427\nb1836031-9768-4ade-a216-84236f03a616\n40d4e847-cc23-4f13-b02e-d365b58a7505\n4cce8954-e320-4538-b74e-a10995a53850\n70052bc3-4a9a-423f-a6ce-fb84c9efda21\nc5d3b6fc-ab37-4e8b-b474-41d7a861b0f9\nc61a5408-5c78-4375-9e08-dd803754672f\n6f4885b0-c335-4934-a5dd-917f5fc245cc\n03a1b222-1a7e-4e6e-a6ab-d733680448f0\n6ff6a60b-8cbc-40ab-82f3-a3380cbfe88f\n9fcbea14-ad17-494e-a596-b471013793f6\n3a40ff58-0cf1-45c7-bdb3-e34e270694df\n62f9ca1d-6e57-4d8d-936d-9fbacdd289f4\ndf4f733a-0da7-4d16-97f1-ae70dc455ab4\n46b35141-8ba5-4955-aafc-b9d2c75dc5ac\n25b83e92-b295-46c3-a993-766ff3fb38f3\n7d3ba5e8-c923-42d1-a5dc-7de1ec6db40c\ne01360fa-4865-4584-90fa-2ec92e77d5ea\n86524f94-3e37-45a4-9887-d42240949ab0\nf41bd739-6b56-41f6-8549-47e460f1c1b2\n350442b8-c3f2-43bd-b601-d000685a588e\nd6f4ce15-f38b-4a4f-a047-1ffd38c094a5\ndae1fd67-3b03-4273-b8d3-83a78df66934\nbdbaff73-bde6-447f-b210-2a551ee916af\ndd4a0e97-2e48-40b5-9a86-b56523cde0db\n155cc44f-b951-49c5-81d9-9eb333854847\nbb3effb2-d36b-4440-9f48-86129353a9ab\ne71dac44-4a6f-4e46-904b-8b7e09d31083\ne6e6bb0f-d4c1-42d5-93c2-47e94aa8efb6\n52f3f105-9183-40c6-8641-269c4c69dc24\n136f1e60-8da6-4429-a48d-85cd3736b1d6\nd4671f6b-6d8a-4ecb-a9a6-c019d14faca1\n02bdc1c2-bb7e-44b3-af73-c60f5bf99b21\n50e51a06-a696-4314-a478-decfbde1b46a\n7fb03005-c55b-4bda-904f-3825672bced8\n460b2b85-b63b-4a0f-9845-f212a545de3f\n58f5d337-4621-4c02-820d-98f602670a63\nefda821f-bf3f-4ed7-8e24-9c2d9426d9c5\nc02622e1-1516-4461-ba99-3bd799bf9617\n56bc455a-b545-49e2-a2d4-b0041446fb9c\n976df240-d5af-4de4-a5ca-ff5a712ffb5a\nfa25493b-1e35-4e55-a1a1-c8ff6636906b\n86833c6d-6fb4-4519-add3-864f67959cc7\n57e86311-8787-4736-a47e-302aaacabed5\n3c3ca50c-68cc-46e5-84b9-6e4e2943ec93\ndf4576d2-b6fa-4b62-b5f3-b1467fa6dae0\n31771f2d-b39d-49f5-851c-bed8efe48863\n445189f5-9c58-4c0e-af50-86490a71ddc0\nd2ce2e24-5182-4131-bc67-383929bddb6f\n2e54aed2-74b5-4251-aa8e-93db9dc12241\n5e6cd036-4d8a-4939-a9cc-fa5332e337c9\n573ec003-7e79-4aaa-afbf-34e87305cd99\n82e23da2-69bf-4d49-b48e-faef94ff4962\ndc1cccfa-86bc-4b9d-adef-b9f9ea9522ef\n04e27928-7c28-4cd6-b01b-f3c2a8ec74cd\nc218aee4-4c0f-4cee-b2fa-6b2505163289\n34a23cfc-061f-43c8-9f7e-a1c0c7347438\n682bff40-ef94-420c-aebc-390a5955de30\nb0cb0ce5-d810-4076-a2cd-745b36fe35bd\nd331e6dc-aa77-4c91-a954-34ab6b16e3cb\n4f10cab8-32d9-4c78-9b7f-c513274fef98\ne320ea86-eca3-4410-9832-cffe0921bc8a\n387e3f75-9b8c-4ac6-b996-6dd7238168f3\nb9b1ee53-6f7a-468c-b248-1345d617d1cb\nebf092ef-c7aa-44da-8ee8-617da00d4066\nf7ee5dc7-48be-4278-820e-ffbde81e757b\n75b3322c-e3eb-4645-813e-eb52af57c47a\n0a710b2f-9eda-4e50-a8f8-281a4363d990\nd0eab8b5-34ef-4d70-8b69-2054694a2254\ncb8d20d5-07f5-444a-adb8-cd76f0f4d225\n6a5fa722-3ed4-4a9a-936d-e12d1b26e756\na4b4b96d-7604-4464-b8e4-78526c4cea4f\n2df22f8e-49db-48a9-b521-4c53d9690706\nfb9305ad-92e2-42fd-9f7d-9f085ed8c92d\nbf92bac0-ba89-45ae-847e-635cd6c83e0f\n9a921857-e6d4-4acb-a9cc-6150ba3eaa8f\n4a577566-ba35-4e5e-b036-7a44c4710674\nb6edc918-464c-470a-9b3a-571370ef0d6c\n5a3cb34c-0a7c-4159-828e-7dce390368bb\neaf30846-b1a6-45d4-8394-f813fe8b14f9\n01eeeb92-0dd7-4b45-aacd-5bf2cbcd5d5e\n0f7b0b57-f36a-4c54-b8bb-2e01d5e233a3\naddf0e06-4d48-4d5a-93bf-d049f7b884c8\n559efe36-87fb-49be-9872-7f1bc189ab5f\nd624a79d-0cfa-49f1-9f23-214ceb51a8cf\n93d30f36-8bcd-4c68-b872-da5dab22df75\nc43a7518-dfaa-4fe6-ac41-88870f5b1321\n888e499b-f048-403a-a1c1-4c08416e5592\na366ab29-2028-4a92-8bda-42fb02f0c82d\nc4db6c75-6213-4d81-a7fc-81d0adde8fe5\nd55f09c2-58d2-4e1a-b42f-f5c3c0e2e7fd\naef3765b-7f5d-4b16-9c7e-300c0a0ba36c\n0fd2f2d0-6c72-47e6-b88f-f079e6f9c84a\nddf542bc-ddac-4a21-9ee5-5ecfd26d494c\nf1064584-b9c1-48fe-8fe5-f382e2a7e344\ncfceaaff-0e17-4912-b918-d0c4fa66d128\n38173bae-4738-41b6-8ff4-49bce1b56f77\n8ba8ce12-a0fb-48db-8d90-0d879b1be2bd\n17c546ea-9377-4daa-9934-87c04cab4b0e\n4c44fa4d-af74-4638-a952-ee3f2c278ca1\na048cd9e-8dd2-4663-92f6-ef5256c121c7\n654be267-2b04-448d-b451-d2b2efa58f96\n60b2d315-8247-4508-959f-a5d5e63bffd5\n04e80750-43b4-4e56-84b7-101cf5fe793c\n25158896-c807-42a0-96a0-d62fd71a3aac\n652720a2-16cb-48c3-b1b9-701b65976f91\n487ece9a-3a9e-44c8-af66-e268edc7dabf\n0b1df9aa-5ec6-4763-8dc7-2713be4a7fe6\nbaa96ebd-3aab-4af8-9301-98cfdf6889b4\ndbf4cb2b-319e-4297-ac8e-7eb97d1a36eb\nf91ff5da-2f06-4126-999a-05e6c33c1976\n695b0913-ed6c-4404-94c7-4db666ba472e\n26b4c399-5c77-4e76-80f7-e4a20f70747a\nc7085809-b73b-4019-bb0b-f6f69d8f2475\n9f20f638-90eb-4529-8a23-c6eb40bea2d9\ncf73f3be-53fb-403a-8e00-9a7b4df2cbee\n4c8d68c0-dba0-4d35-95d6-494cdd81d2b3\n168b80c9-cd15-49b4-ba04-fc537dfbad4f\n0f8718ba-21f8-4cbc-9fd8-8a1d31be4f56\n1f634c4a-e66b-467a-aee4-0c310fb75503\nb11ccd0a-0d74-4547-8f80-4027b84c9716\n2baa0422-350b-4555-a801-956e22a02130\n1ea260ec-e21f-4496-89cd-79b1e712e4e7\n46b9c6b0-dc4a-4917-920e-51fdca2731d7\nb89fc363-4190-46d7-82ff-bf7257f040a9\n688d8349-7771-4dde-81ed-58ee7c782776\n5ab481fc-8d2f-4b5e-8595-91ff69baf82d\n13a90577-115f-4549-9697-6837977f5553\n01998d80-3580-4444-b7d2-0901f45529f8\n8bf4c355-82bc-4e95-9720-2e5e137e1dc9\nbe2b681d-c592-4910-ae70-050da9ad12a4\n09da96b2-18cc-4796-94e4-64ad9164f18d\nbe12140d-efb0-4ab1-b78f-358956b4fb4e\n9a3f48b9-5ee6-4945-8deb-36534aab2003\n3a68ea84-e30e-4097-a2af-880afd313952\ne8917be4-1eb6-4e24-8ffe-fc995048ddce\n8887adb2-2cc6-49b0-b575-74df663c2d87\n6c12b0c3-9591-4916-bffa-f4bab2af4065\n4b8d5b56-039a-42cc-91a7-7ada71a00456\n0fa4e156-7241-488d-a91b-118b7ff85c43\nb4f9c159-dceb-46b6-8b86-bc968e68215e\n6c1d3cff-8ae3-41c7-8077-97f29a87128b\n034de2cc-ee71-451e-b107-94e78be446f6\n78f1255d-e971-424d-b778-be2759032bc6\n1232461f-d9e0-4691-a68a-f48d7c97c228\n7f32d5eb-de02-46ce-adac-b9561b23e6a2\ndb99884d-101c-4267-84a2-ca90db83ea66\n3242e2c5-5753-4791-9b9b-ff8678ec0f0f\n7489315a-559f-4ebc-878e-7e5d2c0abc1c\n936a6f7c-92fb-44ea-8d89-3c2cac3669bd\n89d9b362-38f4-4e04-90de-48444d07d76a\n91f59895-a390-47e6-b638-7545c487ab5d\n4eaba352-2f90-4119-a2c9-d2646532fe40\n239d5235-e351-4fab-8eb5-56f09f883ff4\nd3ba6052-5753-4f8a-8973-9cb3c24f6f2c\nc9ad3a2d-2387-4e49-8891-65854aa2eddc\n2d25192c-007f-458a-91e1-3ab7879b5a40\n8a418225-e0d0-4b04-ba40-9eb6ac1e313b\n5eaece07-8f9a-4f6c-b3e6-4f2b083b3730\n5ead46e7-c5bc-4cd3-b3ed-c3395b240c77\ne64d78df-c7d9-4c29-84bf-0d637893c7c7\n94af3c97-728c-4067-91c5-c17e79f6e823\na8213248-9463-42d4-86da-c15d6d534628\n156b1b68-5ace-4422-9b17-31b33edc6380\n18bd864c-ae96-4fc2-b093-09a7599d1132\n608b07b9-952d-4d2e-ac71-4d155b63cf53\n5dd883ab-0f70-41aa-8a3b-4b9ec379acb6\nb6214228-1ba4-44a2-b0ea-77cfe88f939b\n8d2ba64e-6c4f-4fb1-bc71-d18fb0c8e8a7\n55f2ecd3-3397-491b-bc07-c5bc848eebf0\n8200a598-f6f9-4592-99c7-00960d9366cf\ne715536a-954b-46e0-b7e5-7093f0c574b2\n250573db-b8a2-4720-bd7b-5a324e568919\nae97035e-bfb4-4bfd-bc07-405edf42f6ac\nc5dbc257-745a-45f2-8b7b-91078f36a8e2\n546f1561-fd25-476f-99eb-f8be10309069\n3cc12b9d-5da2-4ba3-8cd6-1322c9e3911a\n525842ce-1206-4870-83e4-ea1acda7976a\n3ba648a9-cba4-49a7-baa1-452ffaa7cab0\n16e073cc-1bea-4c01-817d-9b5a4c171f90\ned23f5f6-5607-44a5-b839-e73196957840\n6cab18d8-e803-43fa-b226-c3d056aa15a3\n0ec6505b-c2cb-47e4-b16c-4b0ddc1952a1\nf56cd6fc-3a8f-4c3b-b64c-29451d801242\n543d2ec7-c2c7-48ea-94ce-1130b841680f\nc7ea5f00-b17e-410d-82a2-001a0cbdd068\naa3a19f8-aec6-447f-9b83-143d46ff7a28\n3cc2df41-90e5-4e86-9420-227c8f87397c\n92a73988-ea1f-42f4-aa41-f47654d0ed77\n9541438f-6e82-4b61-b6aa-7b09bb5d0eea\n1ef8bc92-17e6-43da-942e-7547607c85f2\n60cf2df5-2627-4295-8c5f-e04b3de35836\n0b589c6f-dd28-4037-9abd-6c0d086b9c84\n341ef35d-cb78-4dad-9743-26d0a2a9ed03\na19c54a7-c52b-4b05-9561-06b4924c9214\n7ff760a4-38c3-4b93-8ade-88736e7d78b0\n980facf5-fd0b-44dc-b76f-1c3093244260\nfed9da91-3434-4107-b89e-d576bae32559\n15bc1728-ba40-475a-854a-cf1bac7a0f71\n42d98f58-f202-4fa9-b71a-75b955a91db5\nd9d25e59-7aeb-4db6-8649-f8eb6660dc1e\n6152b931-93a8-4999-849e-ab889011abcd\n991b10e3-498f-4f32-9f18-18c78dc4ba6d\n4326c140-ca2b-45dd-abd1-0ad9f6932db1\n4135e297-26de-4640-9e50-e39751cfef0e\n9a0e9a17-9e8f-4fda-9f24-b3f35d08d35b\nb038995c-a009-47a9-881d-9c1b58add0d0\n63451c42-bb76-4ce3-9d99-88773c32b5d4\na674d31b-4194-453d-9eaa-4d891cf9b44f\n84b1c668-c387-48f1-95f4-14c7cea44a00\n30ddb6bd-f385-41ff-a998-7a7439112c8f\n1ec7475c-5f44-41a7-9df5-84297055551b\na2415793-81bd-4797-8e7d-b9548b216ac1\n6c99aecc-ebf4-4a9b-90d5-7f0c2cf368b9\n2d71b4fe-f2de-4320-8f6a-d892df8e3138\n52db93c9-8a77-460b-8acc-9917cd5df353\n2a934a0a-8200-4f6a-a3f9-64ec340fcb31\n09a99d5a-2dbf-41a1-bd4c-a4a3851e1f53\nfc3683fe-0360-436e-806c-d3fa23b9755f\n7d314997-0fd1-46ec-a51f-6c4ed79e516a\nc65db5a2-f891-4d43-8743-7ba0e2bb08e3\n7a8f95c2-beee-4d7d-ab9d-86b14482aff6\nc67f7dcc-bcac-42db-9ba8-7b6ddda5b0b9\n31d2aa50-655a-495c-a54f-0d5c2bf3f81c\n9803ab92-b219-423a-9bda-d7b635fa2301\n4bad73fb-cc9f-4718-9b48-8e78970e549f\nc5dd0576-a02e-410b-be66-56c961e9478c\n87676b86-0a2a-4a4f-88be-beab136d55a8\n8a8231d9-9f7f-4b5f-af72-bcc8b5ae4d10\n6586f6dd-ea1f-4323-8029-90d139d02ed9\nff11b47e-3fe2-4c93-9e1b-93cab25a9ae8\n7303f09a-2b95-4d01-99ec-3775ce0059fb\nf352ae17-67f6-4501-9dc2-484334dc51df\n306f5c05-bfa8-43e8-8160-a2a1d7352cdb\n608e03f3-16c9-405f-9973-d45ecdc245f3\ndbcfc312-05eb-4530-b351-7b09808360aa\n7c001fac-ee14-4d42-bae9-b5cf90fd9e78\n6b9028de-1f0d-4056-aba8-4a2b31ff2aad\n2c7830de-1f8e-42e3-9248-70f0670ccc15\n74f94d02-d7a7-44cb-b642-dd266cffbbc4\n6e89e020-a8ad-4ed8-b70d-37d90ef6f677\n4c5c7199-6f1f-4f14-8f8a-89ecb06eb3c1\nb0df240a-0245-47a1-a917-8a2f712035d3\nfaa904a3-031f-47d2-833d-014636acca21\nb5379fc0-7d12-4c9c-b9d3-78d86aa1d1c0\n689b23bc-d3ae-4945-92e1-6908bbc4deea\ndff8af09-d3c7-4872-9dae-8a6869eaac47\n6d4dfba8-7d4f-4cf5-915b-105ae63dc8e0\nef29bdec-9a43-4479-8576-9d751ab6f342\nf28e9e3e-ed32-44da-9d31-cd32bc9edaba\ndcdb02c6-a921-4613-8f3a-fb33c5652b7d\n0ade7ea1-6665-4a8a-ba75-8caebb3a6f0c\n4c99054d-8299-4c8c-8280-35c1eb4529ee\nf3dea985-de63-45cf-8477-507ff4594f13\nf1981637-f7dc-4ce0-a1a0-260311a3867f\n251f5e6a-cd69-422f-a8ee-2415bff72eac\n650b30dd-5eb5-4199-910b-2bade3d0ce16\n30b39b06-6c7c-4ea0-b8e0-eab3190a710c\n7e418fd5-dbac-41f7-8941-7f1a391d2a99\nbb2a9092-ccbb-48be-a808-b11c071ff4b5\n4e89f19a-e41d-4c5e-a122-c5a6e586da83\n49247607-9151-4042-8429-c459024621dd\n0ef47a92-2bd3-44c0-a262-48e423f8277e\n8cc0ba04-1d36-406e-99bf-8b29bbb39a20\n7883b296-169f-45db-b311-0b2c24f3dde1\n9549aae7-d2e6-44c6-8d9f-6b45074bb7ed\n0e8537db-55f4-4aaa-9265-1742e8f0b75b\n66969ffe-1070-46d5-925f-48376cf811d1\nfef2f369-4f87-4313-a81c-65b27d879af0\n6d5b2c6d-2e2e-4040-9e67-be5b17c59f75\n81a6f003-104c-4586-8cd4-53f40a1a6d80\nc96ded87-657c-4338-983a-444aace46ccd\nc2b0571c-595c-4fdd-b92d-df58145ef639\nf87cedd2-3175-41c0-a4aa-bd5e0f918a17\n19ad60e3-2a5e-4cf3-bb5e-4d2fbf4b1304\nd7c8719b-fc1c-4b86-9247-fbbc7142c596\n2c979b79-10d5-4988-b9ad-ead6e3354f97\nc81887eb-e667-4bdd-b68f-3ddcd9778719\n85914bb9-4f9b-4e75-abf9-17c0d280a4b1\n651f769e-fba3-4839-87b6-e924344abb84\nce0e5b09-b801-4252-a1ba-8319560be85d\n4e99a210-c982-455e-abe0-dc31aaaa1c21\n1211322c-66ac-4862-9181-9f4a01967a24\n5f669d38-403c-4367-847d-1a64605f3b84\nfba6126c-5e45-4179-9035-eb4c574832ab\n234a7e80-7d24-4b37-a3d2-0376bf2888f3\n464f76b0-7ede-4e47-b441-cf25b60fc8ff\nbf53f7da-b1e7-4dac-bcc5-f012dc659ee2\n61777108-72d6-48ee-9742-7d1a072a6b77\n08fb6558-ecc3-489d-8068-a103099f7f57\n6f54ee88-9b91-46b7-8517-1b49b3480dc0\nd4d920ad-adee-4c83-88cf-6fcfd4279613\n58c6f758-7263-41f2-8c59-1d242a9552a1\na97abad1-e3fb-49f7-b685-b8d6e916d0c9\n6fb88bc2-171e-4fde-8a72-ebc4e23cf435\n1aaf00c9-8363-4bef-bd36-e50d6c1609ad\n4bc03961-a987-42af-a05c-3c3f0a680449\nc679610d-4d64-44df-8fd4-63518538b10e\ncfe93e56-7529-4f29-80f8-16962f15bc54\na998862e-795c-402d-bc45-e6b371b6cee3\n11a0ed4f-b564-4b9d-a648-42bab0f7b6f2\naf7c5fff-96c6-4527-aad4-2a48587f513a\nb557525e-8a4b-470c-9f94-7fa3fd815251\nb2b85abd-7f7d-4532-9241-b4367e37a454\n73c41db7-28a3-485b-89c6-dda25f6e991e\n5382f664-45d1-4464-aa62-67b89f81f51a\n9497a4d0-1e6b-4e34-8507-d5c85d8d79e2\nf57afde0-7f4a-42d7-a4e9-2ec9aeebdbb7\naacc4961-de4b-49e0-8e4b-612cd13ff5e1\n7236e3cc-6c4f-4a78-bd3b-25b628a661b6\n4b8731ab-06d9-4818-a0df-c3989beb9b83\n0ed839ee-8d5a-49cd-9e35-15e7ef0d2b03\n2659d257-be44-4075-93b0-569a37eb5d0a\n0d099690-2462-49e3-9e18-d5c62fb15412\n1edfc93f-632b-43c9-9e85-74e70c10bbb2\n6410adf8-ff48-4c4f-982c-7e2491be7283\nfd9d89be-f47b-4618-827f-9eaba90481cd\n3eb53f39-4eea-4cd5-9764-f4ff6c6722f6\n19cf0696-c298-43b1-971b-9d453cabd605\naf5fee66-81f9-4f89-bd09-922f6971ee0e\n5faadda1-2b88-42c5-a4ce-739868809469\n5e5b4ba4-d766-4f0b-8f9d-626ab6161c3a\n36916368-f85d-463e-9158-7092f587c3a6\n13df292e-b0fe-4df2-a25f-3021d5bac6fd\ndfa06214-222e-4a3b-ac02-7c8ede24b660\n765d9849-e0f2-4dcd-a99f-6c720457ebb8\nf61ce5bc-8721-408d-a059-8016367c404c\ndf7b517c-7417-4051-9a5e-023aa4e7138b\nc1588535-02c0-40ba-9152-0c0f7bda67c6\nb65357d6-d8f8-4184-91e2-da3c845d12fa\n37c3dab6-5615-4e29-8020-700cbf97b4f8\n34e97cd3-d86c-4198-a38c-f7b21c4b131f\ne5426f02-3a6d-45be-992d-2401e888051b\neda2d737-d2ef-4ca2-8207-22ca085c0f4a\n11454d0d-ac80-4606-8981-093e05d83fc2\nead0abad-dc8b-47ce-bc0b-36080c5bab9e\nf9450549-b5d3-4285-b3ff-33248d42b4af\nf86c2aea-2411-405a-825d-3a53bd31663e\n74b65b15-3ff3-44cc-8a56-22914471526b\n339daef6-e1c5-46a6-8b5c-4d8367729b65\nffe277ed-3e47-46b7-b7ba-ea125f515244\n961b672b-fcbf-4b17-951d-b218704d0c19\nfbc51594-0bc9-4c7c-9782-528443cecfae\nd84fe25a-c00f-41f4-9526-8cacefe5828e\nbdd5a8d6-1b97-4801-a1bb-bbe051152c22\n6d2d5d59-0409-4884-abc4-e572754ef490\n57fc9151-5bc1-4acb-b99d-9d8d4328ec00\ne4107a91-5976-42b0-a991-9ccffccdebd9\n46de78fe-6818-474a-85c3-8dc603e7b082\ndc24a0ef-8e10-4e93-86d0-5430d624deb9\nc7e9675f-f4d3-40fb-87ad-240a8e0d74f4\n28d1bb1f-d462-458d-88cf-7e806940853c\nef493841-4c6e-46a8-b4d9-42b9fdde7e03\n067c4305-0f35-42c4-a5a9-b62998b3940a\ne70f49e4-9790-4a65-9c6a-dba8d01278a9\n98d30cb9-ddc5-46b5-be02-5503293471fa\n83081e4b-0d85-4613-9d46-88e3029ee80e\n8d642adf-f6c7-4464-aeb4-2d2cbbb1b6bf\n5d7d0740-688a-4e66-9428-e07f9fcadf48\n2d6d7dac-cd74-462a-8ef3-b0c8aa7e8b8a\nfff56fc4-0f6e-402e-b3ef-0cace36c4595\ncf5da2c8-7c7d-4239-a953-6f7cd0a60eb4\n6b49b818-5e70-46cf-bde2-d0a0eab4b8b6\nb2cc6492-9e3d-4284-b5a4-ac0a17714332\n7b4c2d3b-30eb-4b02-9373-222e1f97761e\n367958bc-b789-4ae0-afaf-0bd8d91cde7c\n4d80b869-7188-42b0-8d5d-61561d02487e\ne8ba2f61-7414-48d9-9e79-fc537b71693a\nc900a31d-c1df-450e-9d8c-1e1e1aa524e7\nf7a231f4-5f42-4d4b-9672-047ddf47361b\nedef43c0-3b00-45a5-841b-e0ed34833b09\n47f1ef40-c52d-4163-b302-4088675e5675\n37a9b822-6b08-464b-8693-14b5a83488f3\n8fc59538-3fa5-4319-abb4-b686a38a0c53\n19164171-7761-4c20-a6f5-49bed2ce0e67\n909e501d-11ff-4fe0-a706-0d59dde1a843\nc1c0ce45-7a9e-43ba-9c9a-76a45ccd513f\n93f3efba-cea6-4fab-9f42-dc4c8f3c7d9b\n8b1ff7fa-969a-4bd7-ad69-86e27c018544\nd37eb3bb-7ae0-41af-9b21-a9800e6551ec\n0ab5f70f-ffc5-4ff2-8b0c-ca6bb26ad09c\nec820a8a-f148-4f4e-8885-3a49d304ff33\n161a2000-dd09-4bdf-9e71-76b052624582\na979a2f4-1619-4714-a0b1-f1e40b249ea1\ncd145536-65cf-4fd4-9bec-1b1cbce8bd1f\n6f9a91cc-c233-45ae-907d-10fc173bed49\n4656b7ae-2f37-4cbb-8a8d-51ff8f273bdb\nab792417-ba51-428d-a7da-9dcf74621efb\n8c8b201e-14f7-4925-9aba-ebb30081d3b4\n7610143a-a34f-42d2-ad7a-b87fccc66486\naa633ea5-6bf6-40c6-960b-6039fdb3a4a5\n0e28a89b-05b2-441a-804f-0bd02fea687f\ne865303e-2814-4110-85e4-fc6e240b375d\n58ac8b16-672f-4fb5-920f-c273fc6c3a0e\nc627874f-ee0e-4e01-bd0e-51bb970dff48\nbe51d4a8-6b75-4c21-a156-6d8433bab71b\nc3f97053-a37c-43cf-88c2-a0eddcbde6ef\nc7c5ee97-9035-47a8-b8c8-0a85b8d9a75a\n8dc66ada-f5e8-4370-ae29-97ea7b72b4bd\n0149fbf4-cee8-4b44-884c-021689b544c6\nd7c76a89-4ca0-4e4a-ae59-b96beda8fed2\n9fcddb14-d7af-4adc-90eb-d385dc09d0b8\n71b858a3-7eae-42c9-b882-1c6671bfe283\n08399123-dfa3-483d-8f99-4f7fca567327\n85c73358-06e7-4c62-ab5e-86b7af5ffe0f\n6597e4c5-832c-425f-a387-57d0c8b86021\n7e264efb-59b7-4130-ba8d-543b5c4376d7\ndc76aa0d-5799-4f8c-9d17-d1c3483c3db2\n0959c502-0df1-40a0-9391-e9dac402a9b6\n6f34ab93-9fb9-411b-80bc-ce5c5c0fa672\ne2fcb7f9-6c96-4bf9-a943-1a3e2a532ce1\ne0d3bd46-9188-46c0-9430-c4abc2e0cdba\n4c18c22c-8f54-4a15-90ec-204e2fc6b8d5\n6c84707b-f441-43cc-b110-ea6c0e17362d\n3690697a-200f-4db9-8f33-e23e0c07c458\n219b70c5-f897-4b29-a82f-633a1e1bdba7\n9c94c59a-6704-46f6-ae67-0732f82217c7\n033614b2-fc5e-4c36-8e8a-cf3bcedb8562\nb2bf62b2-a3c0-4362-829a-c44f220d94d6\na68ec3eb-4485-43bc-8be7-e7a35b9474da\n3c72909b-d104-4ab0-9ef6-7b7c7c47a511\n92838df4-7d31-4c84-a107-7db6753f38c3\n953a3a77-31a4-4552-bb7a-7c49b18453d3\n5e633e5b-61b4-4e88-9067-3fb7e89b7472\nb5bbc7db-e9ef-4f87-a81d-a9cd5fa97671\nd9eb75e3-5933-4cb1-83be-1943289301c9\n8f9109a5-fccc-4ca2-98c0-931b970dab0d\n742a0aa7-c95e-4deb-ad03-0e7c769b4496\n60bfd6bb-9f6a-4d69-9d0e-e1d408ee5491\n084e7368-f173-4304-8942-66529b2416cc\n6476992e-c0bd-4ab6-ade0-218d355f31d7\n200d0d52-99c7-4ff9-b0ab-309bdc5188a0\n0609d5b3-45e6-411d-9077-034649cb68e0\ncea76762-5d54-4bfb-918f-110d8b533350\nba3c5385-be27-4071-a924-c13f09272300\n40256205-1140-40c2-9980-84f05ece4651\n70173cfd-dcbc-4952-8205-16d8dbc8ec98\n07b6aea1-1ed1-4a7d-af15-b965a7933f3d\n880cb8f0-03ca-4e8e-8bd6-a0b471b9c2ae\nbd2cd377-178a-4357-81a4-7f4f1ab74f3a\nbfe745f0-65f0-4e8c-9db1-d9f5deb89caa\n16441775-457a-41ae-8f24-040eaa265a98\n833c26d9-4701-4af0-ab91-d17998117097\n3190ca65-9f9e-4aad-92e5-ebe1183973be\na46d43da-cba3-4091-9483-d8509e31e137\n17f5d17a-8ba9-4a79-ad50-a77b333ad499\n5a4ed087-7cd5-4508-be2f-45296d501107\na387849d-9d7a-4dcd-bac6-8b56cfbf3044\ne8fe3561-1ab6-4113-8457-eab0f7eb4c1b\n4dc9bc78-483b-4822-a5e4-c8bff41ef18c\ncbb8cd2b-9631-4fd2-a3be-4dcc0a66739a\n172c75a1-f266-4959-b363-94c2bd7eafcb\nb2042ab7-e4df-4b1e-b17c-617040f60638\n45a420a2-4a5e-4650-9308-887396b277aa\n46f325b8-6eb3-43d2-abb9-fa68a768bbe3\n6edc05d2-c7b6-458f-a942-f3440d28b030\n9c63d778-4afc-4e40-af7c-c21497a6cb3c\n9585346e-5f73-4fbc-a9cb-be868a27beca\n3a4ab5ea-79e5-4a72-bfb2-4e079d795218\nfa2551b9-db65-4522-ad1e-e5411a941012\n3773104b-d173-455a-aef7-53da500c11d8\n234072ab-1fba-4348-848f-7adff9b49383\n50a456f4-0338-4618-bfd1-435e0e4f8a17\n6c03ac86-23dc-47e7-8be5-047396259408\n7f803f80-f5ae-4324-b845-e0606e508a03\n61f65e2b-5713-4aa6-af9c-e349d73d4be1\n912647b0-de5d-4c37-abec-045f17553528\n9a81c9d6-5484-4bbd-869d-e1e45a1816c6\nfa27bcee-975c-43e6-a15c-758daa1e9edd\n6fe4120e-6cdf-4c2a-adf9-2fef2d8cb6e7\n5844c0ee-40a7-425d-80fd-1ef056d2db92\n81bc207e-2eac-42ee-bc73-7b4292e93af4\n45bc3aab-0201-47ad-a6e7-e95bc8e5accf\na2969e8c-cf3c-46e4-b5ba-6eff32e783b8\n661dcc01-3f14-42ef-8374-59cfe680815a\nd0ef635d-3f89-4f79-97c6-36e27e9f2f7b\ncbeb6272-1822-46cf-b8b8-5c2c4cbb44d5\nc060ab96-0ca4-4afe-a85a-cb43d0cb3435\n7fe5d7ed-7e97-4cd7-9ee4-8e500713fcd2\n458a8f6b-2509-4ff0-9548-efaf9b6dbe6e\n31954ccf-8743-4556-a060-e3083eebfaf4\nd8126ddc-1f44-4821-a039-c5d666763c7a\n87b48bb3-9a0d-4305-9944-33398ac722f2\nea2c8f24-aa0d-46e3-aea1-94c241ac8452\n92c1656b-b3da-4502-94af-5bcd853775ab\n35241bf0-7651-44ee-9357-ffd26ab3872a\n3caa206b-83b7-4e5d-abc0-67e5583262cf\naae9c844-ce36-43e5-bff9-3f2f5d7dd27f\n8c46b143-16db-4d51-83ef-f5c844fb9dcf\n5bdfe0aa-678f-41ab-a337-6408221b3234\n187e808b-97ce-4cbf-8b4b-a60c35dbe424\nbbb30803-1bbb-49c5-b565-be45552fdf28\n697ff724-ffab-44f1-b9d1-8a2f8fefd015\nf4bdc3c0-3fe2-49d1-a4c0-571360e8a739\nfbd885c2-b811-4cf8-afb4-b1f78a243266\n247d2cb7-c144-4a2f-a6aa-cafbdb09ddea\n09659b0e-8c7a-4c20-989d-8d8ac02f0cc8\nfc71e79f-62ed-4875-8195-f403afa3df31\n1336d930-563a-4063-b712-a4ca8cd7f654\n7c1828f7-88af-4eee-9d6f-a09259b0c625\n117d9faf-a462-43c3-ab94-83d5666bb94a\ncc28a665-3385-4819-bf69-4ccd27c39f97\naa05364e-db1a-4f82-8bdb-47b1106d4889\n3a1c1845-9475-4127-96be-298dfbd2ac78\n83d97d55-cde7-4d3f-b91a-9c3d8d09143b\n76572bb6-4b95-4ee5-8130-35d3a60b979b\n9fcc2f05-9060-4517-984f-20c28586c908\naf30f501-d62d-4860-8a7d-09ae26ad057a\nca84dd83-0c27-4323-a112-68d6c3190a55\n552314b2-f6d8-4e91-9544-17530bc223f6\n40c3f94f-4cf7-4d9a-bc35-130bfef71142\n1f879849-e3c0-41a9-975a-db879125ba6d\n5689f9de-6d6a-4fca-924e-0324367a9d6d\n7c5d09a5-5885-4a7c-9ec5-5c5c37daaa43\nf5316926-0d21-4662-85c3-cd1adc33ef6b\n722d1aec-1ecb-454c-92e4-9dd5d2cb1792\n3e12c2b2-6880-43dd-be10-17012d4b4f65\n15a9007b-4c8c-4621-8889-5753c024a28d\n47f29c4f-0996-46cf-b272-9b05e381527b\nf7e5519a-e732-4503-b224-da738ba435ef\na30ac4e6-f74e-4531-984f-475a60858340\n9dc9c534-782d-40bb-b58e-ad0b32ba2d39\n9bba1768-e090-4cf4-9cfe-09384906a1b5\nd4b07657-8c5c-4bea-8224-2ffc1ae4c901\n09f94e77-17f6-44b0-96cf-5fd592f103c1\nd9ca0f43-2616-4b6a-904b-98c761d8a907\n69d0d127-8f6a-420a-a197-b46e7b13f01f\n7de5350d-8dce-4588-9f97-d550d4e38d32\nd1c82940-9ed3-469d-8b17-4fb793ca14f6\nca2ab1f5-a796-4e34-b793-5a325dff13f4\nb2ea8f85-a385-4e8f-8d7e-29d650cc8d09\ne1c80a39-08be-4ebe-bd7b-d834946caf9d\n82c30c4b-36ce-4bc0-b61e-6bb20066f60b\n4bc8a746-481d-4eac-bfe3-b21cf9440f2f\nfaac7f9a-60d3-421f-9556-f0508fa10635\nb96bf7ff-df71-4998-b5cd-1260321ebbf2\na355d47d-cae8-428b-b466-ce2cac9a9926\nfbe4f4fc-bc51-4db9-91b8-af9a5088d652\nca8f172e-4b79-4000-890e-b8e49363e093\nd37c2958-767b-4923-9c12-5c3ff66ef5ae\n3f8d7b9e-28ab-4afa-bf3f-fb3ecc50df02\nbd9425eb-e566-41ce-a03e-3430996955a4\nbcf83a0d-586a-42ae-918c-e6c5edbd0525\ncd9d686e-8444-485f-ab5f-b71fcc139ea2\n6be49a52-82f7-46c1-9678-f0410bca3ed4\na299830b-21a3-4287-9329-612ffdcbae57\n932a614a-757d-4b30-91cb-9dfe7832d1be\nc3250810-c151-4aad-8e8d-b8655a24546d\n6dee23a5-8780-4846-b026-67c2baf737cf\nd4964756-0b21-4613-b3d4-3219a5093a59\n17c1e3f2-b2f0-4221-8274-74d406ac27dd\nde914b2a-7fa6-4379-87cb-df67ad58f080\nb95a2aea-d2fb-486f-bcea-9912df4ad00d\nb60f9453-965a-44f3-94a2-c3a595e0f62e\n7e8f3b46-a929-45f4-a8da-4e79ba308079\n1a859a02-1b4f-47b0-8c7f-0f28bb4ca8b0\n51b0b4b4-f397-42fa-98aa-c5b8198256d3\nc5c266a4-7ec7-4a70-bd8a-0f7f52a5fc8e\n2e551515-760d-4d22-8972-ebc654463262\n80dbb90a-d537-4913-9d3b-94a4d8299f80\na7f9b701-1d90-45fa-bf37-8cdebb5a23bc\n5d9e6047-3a0a-49b6-96ce-06877cd57d4c\n0f83751d-97cf-4816-8958-c2828b7ddcf0\n8c7ecc16-8c26-439c-81ac-27584cf7bbf7\n3b504bdb-5d7b-41b0-b640-cfab0d3b3aea\n73866038-92ab-4bd7-a718-a636da8ad99b\n5d14c89c-b9af-4d0a-85a9-69e4a3a04e63\n0d0357c5-289d-4987-b52e-692f5dee2a80\n3b1f76f2-90de-48e1-b843-fb8176e4ca3a\n8c5d823d-9ee8-4924-8257-8aa70c226083\n14c903e8-0b7f-4547-9133-7e5d66a260a6\n0e1177bc-7af6-4def-b4ac-bf3d9d81c7b8\nd4796568-9902-4d6a-b9fc-d152a92b4689\n03caea5b-e9bd-4160-a318-97723efc327b\n70d54374-a89f-4239-ab92-b76a61c1d06a\n941c34cf-ebe3-4c22-85c6-794f0c3de3b8\naac1dcfd-2a5f-4faa-82fa-b707f1727c85\n60c881bb-0a73-4a61-bafb-4de50bbd891a\nb1f9e237-2a92-4b9c-b701-75e3acc1ca93\n45138827-80df-4bc6-839e-021dc6a4c652\n84d4bff2-43f3-45e2-b538-d6b74ba14179\n07473afe-96b2-45bc-b500-ddbbc5275dfe\n3a996a3c-e86c-42ba-aa34-e9bc857a2690\n71cae2b0-e910-4e13-960b-2d4631cd0d2e\n97abcd30-ab08-4ac0-802d-97260c25b12e\n62a0569c-7ecb-4ad8-b13b-6baf67a15b38\n8943d47d-eb7c-45a2-a852-66264266d6cf\n9bd9ca89-ded9-41c5-a1d6-3ccc8e59e6ac\n4a8acc0b-045c-43f5-9b85-9cf91ec175da\nf7dd3444-1482-49fc-a8a7-214a1352f4e7\n34c3569a-4966-45d6-9d85-2f87a46d4cba\ne4db8558-58c6-4026-af91-dd9671cb0e93\n235ac308-23b4-4c0a-968e-d16acf04a8b5\n7b507619-b035-425b-b4d6-262c654d95a9\n60d5ba09-f7a3-4591-af77-1421dff6d46f\nf47927d4-9232-44a9-b87d-e93d9bfdd88e\n9f38fc4d-dcf5-4e66-9877-43fd4eaf8f26\n96fbf2ad-73a1-4bd3-92e0-843b01318a4e\n673200d1-4000-4771-9ebd-a5e176fe10e8\nb36b3221-0d1d-41fb-bd0b-b1d235891293\ne2195fab-9c8c-41e4-8817-2b538216b41c\nba4e40b9-408a-4c59-98f0-a98d8bc1bea9\nead4a248-38fb-410c-8e7d-91ea38e478c3\n0250a09b-6a06-4d59-8066-973847cbf665\n95978762-021a-4654-a1e9-484ed27e673e\nd9a040dd-c0c7-4b49-b1d2-026d3ce1d8b6\nc8dba541-b1e8-4d9a-beb5-51a7508f12ae\n2d3f4499-4c7e-41c2-a436-eb90726160b2\n9895f357-daa1-4fe0-8021-c403549e6d90\nc72038f3-9d70-4674-832b-adf83974c4b2\n6c4aadc3-e94b-40d4-aa93-47cf5bfb75ed\n094da74b-2cd2-4686-9d3a-bc74d9c1a15d\n0f8267d0-9f4d-429d-b1a7-3f739343c79d\n3ac68958-ba64-41ac-b62d-a2f474c9ca1e\n16ddd055-4e62-4ed8-afe9-2f684895e59a\n671b10d2-b54f-4c6a-9bb2-7cb745407ff1\n11db7d62-571f-4b40-8fa4-9daeb548142a\n9a918306-3f54-4705-a336-9c2766a6a1c3\nfd82dd7e-a672-47d0-b7ae-6e86a84430e4\n0a714b68-5381-409b-9e6f-390beb1fc4d8\nb5f416c6-982a-4ad9-856e-2e76b1d2348b\n689aec32-a473-4b8c-a75b-a60953f998b4\n2134539b-06b6-4c6b-b383-342db000e5da\n5577cffd-1178-405d-992c-b569403f09cf\n6b67b8c5-10af-4c40-b8d0-e150fd0003c0\ndfa310b7-a9fb-4cea-aa7a-429793d1760a\n35093c72-67ac-42cb-895d-0fe0358f9a91\n25ff94c8-74de-4491-9185-c8496834393d\ne1b13c43-3172-4fe6-bdc1-6f8d4245176c\n1de12c51-e24b-4f3a-a98c-1ae25be56612\n7ee0d6fb-30a1-4828-9b42-98667377d65b\n21a90a44-5687-46f7-b2f4-55e8b770983f\n1f2ca431-4c9b-4754-949a-4141ac1764b0\n8a835761-f283-400a-b1bb-1a8ed2b0bc95\nb54dfe40-042b-4b03-bef0-a276f47cec73\n3f9d59cd-cf86-4516-bc1f-8668ba430529\n817d3238-48ad-4e75-a842-976c3ba951f5\n2d775e04-2e1f-4c85-81c7-b8d05eeea928\n643b3228-b890-4171-a06c-ec9179a69664\n6a271af7-8085-4c65-b50b-127c601c955e\n7a7a22ec-62ef-445f-ad76-891c108c719f\nb75d0bb2-973f-4776-aa3d-e25734527591\nf07355ca-4eb3-4712-9b8e-a9d7bd03371c\n81aab8e1-27b4-4044-9e4a-7c4666e81740\n234b0589-c51c-4990-81e8-1d434df5a1b5\n5831b57e-322f-4ba5-b551-61a7cd827eda\n0e405289-8839-4ee0-9a3d-211182f310c0\n4ae9a406-9611-4f65-a241-0f84de3a4cbc\n22a7785b-e70a-43d9-a87f-60d3e629f09f\nef9e5b0e-eb55-4dab-ac32-7b3e7195cf09\n45a5ebf0-255f-4811-b7b3-02108fd6647d\n9c054c60-3407-46b0-8d41-95e5756dcfe7\n906bda9c-6f60-40f9-95f9-db15efa0e634\nfb06c3a0-6717-4ca0-86df-dca3a61fcebe\nbed73c18-7f31-46ae-90f6-8e1dafc970bf\nb0e9a764-723d-45cc-bb30-c95b6f3903c5\nff5e17d3-453a-4e6f-8326-b59e2301ccaa\n39cea114-613c-4bb1-bd8b-4087522f6da5\nda1cf58f-8aed-48ec-8239-79bc9eb2d492\neb56d56c-6b74-4039-bebe-d28610b8891b\nd40a459c-c4c4-491a-82c0-ab0c6ada0207\n5f140737-8952-415c-a53e-90c4c8e6dcac\nbe6aed9a-e7f9-4ab2-8330-e59c89a64c09\n6a78bbde-6514-44fd-bd74-b0fd021fb370\n4bef2d18-1cb7-44af-a3ae-311ed17bd0b8\n06d7496c-b8db-4a99-a98c-35efebc05112\n91f7d17e-bffa-4b40-8e4e-ee647dbab120\na33c80bb-9eba-4323-96f7-6c4d51a22690\n11185daf-b4d8-48e3-ba78-5b8a016b4b67\n8b38c42b-658a-4b41-811d-719e6a4a84e8\nedd8d589-38b3-4e5a-b822-c8a6eaa7086d\n9603a02b-899d-4192-b056-6c0d300a3f68\n89bcff86-49c2-4b87-a876-ef00194e7b24\nea7103a3-5ceb-4ad8-9eb5-2f48ebcb5170\n73647a73-5d19-493f-b554-0180ab462bfa\n9d560d0b-9069-4ec6-8cb2-c09e8523333f\nd9048dd6-de00-4e46-a4f9-7d297da40b1a\neececb95-cb55-4657-a68a-502d619b26c1\ne749bf37-eff7-4c01-8b9b-30429ff3947a\n7fbbdc69-818a-403b-a18f-0aa625b09d3b\n46b41912-1c67-4b81-8f6f-9668f51aaeac\nc5d25197-670d-43a4-a4d9-b7cc4438023d\n94827f76-106e-4096-9b91-ba1f59f15040\n93d3e211-61fb-4df5-a50e-9252a850b9ef\nacc4775b-2e05-46d1-aa2f-dd5f5e7ba9a6\ne531c5fe-8e40-4cfd-99ca-8076c95bd3cc\nbda3b243-0c10-4db5-a8e0-054e167c68b4\nb6feac6c-2d11-45f6-bf28-ebae2c348c15\n5a186756-b073-4944-9965-3ecfd8614790\n068a4993-481a-4e5c-a2f2-8d37eefd6fc9\n49166ff4-a410-4bff-bcc4-b254eda7dd58\n0e1d802a-ec47-4647-a28b-870357665a3f\n3cde70e2-8fd4-400e-a7d7-9d11f0a021d4\nba47754f-b7c0-4086-9c43-d47e6713e45c\n797ac61a-77a4-469a-b388-5b24540fecca\n75ac2b8a-0f40-4eab-9510-8ba8531b9612\n2d3447c5-40c7-4c1b-b218-2bf7aec98297\n149d6202-335a-43e2-af5e-45d7582dc700\n9486e504-7585-4331-8800-a6129c758591\n657a0694-22a4-4328-9142-9b5128de5408\n2705d745-4d6f-4a22-b765-bc27e683f017\n8ee050cd-2994-4889-9d96-7738cba9e7d4\n3f22da84-994d-41a7-a04f-579deedd3bae\n08915c6b-9baa-4d03-9760-859cbf6e2e0f\nc8d7612d-c1f5-446b-ac33-a9e17a5e3a51\na2e94009-cbb4-4bc6-9d75-72a64e06b0f1\n1684f3ad-1728-4e1a-867c-53cf2f0061b1\n77eec424-ef60-4ff5-add2-edaa0bef98cf\n89a45dff-0d99-41e2-b391-61395efe6ca0\nc6f5351a-c98f-45f0-9ee3-42db6fe1642e\na42685b4-c43c-42d9-81de-b59b099ae533\n82a81a0d-d899-4c2a-91cb-12198f11b335\nc54855c7-9e8b-4b3a-b6fa-e786b18dc7e3\nbf10d75c-178c-44d7-ab25-6c94e7473452\n29897fc8-a9b4-4ede-bc28-9477647a06ca\n3e7a05fb-09f5-495b-99c9-edd85c4e351f\n3b063903-71d4-45f3-9cd4-bc050c6fb59d\na10828b5-486b-4486-ba30-11e05c521248\n51d70d5c-93ab-4e7a-bd2a-9a5bd6034962\n18a10212-6aeb-4f1a-865f-3ccf9b856bcc\n309c0d0c-8c83-4ede-971d-580e563f9e0b\ndd809733-d626-47df-97b6-57013e4e8570\n2e82fbb1-9a4c-48d2-8fcf-7eeb84b1eeb1\nbffe6d9a-6a17-4417-99fa-0fc779fd55e5\na1b7831d-564c-4919-878f-9f33d92f47b4\n99a2b2d0-ab4d-47a4-bd1a-6f7887c791b6\n4465842b-84e0-47f1-9ac1-175fcd6dd7cf\nddacc4a1-0c22-43de-a4b1-29c726cf93a1\nfaaa492f-32bc-42c1-bacd-24f0a79be2f0\n4434979a-c38a-43da-ba5f-6e73eb7017dc\n9e0e9410-77a8-4ddb-ae9f-012c8e80d15f\n9097f0a8-f8fd-4af5-bf9c-0adbe26a21e4\nbddbb92c-fc88-4ae4-843d-17a385e77023\n073e1868-5584-42fa-871d-74830f5e4798\n17c9591b-e84e-4d1b-8b70-d5b313a877a7\n69b1cb95-9c32-4890-b4df-757b808abc21\n7b44dae4-2e9c-4dc7-abb6-d8dc041c4997\nb1e0f518-5994-45da-86a8-4b166536fb61\n55ff66bb-b8dc-421c-910d-ec8a4cb5ba4b\ne574fddc-8df6-476a-9423-286d468ad9ad\n85283f8b-b1cf-4dc4-857b-1a9b57120c87\n7ab49c34-c2f9-41f1-88b0-c979a0ba030d\nb1f544e1-a4ee-4e44-81e6-e8eb43fb7d97\n3aac63c7-45ee-41d0-8cd9-5be16c01deea\n8bd20249-15e8-4249-981b-b64efcd72f41\n64fd990a-c88d-4d17-9420-9c2d9c508ee4\n020b9bd9-3aea-4666-b197-10bb553f685c\n3fe7d1e8-948a-427d-bf7d-5e4f88b81af5\na51c5095-270b-483c-83d7-98c6706c9e48\nc660a6ef-acd1-4ceb-8937-c118f8cd6c8b\nf08c25f6-c9bb-4316-ac00-9e2640db14d4\n9ede7c44-80c1-4843-b750-4729fa6b0e05\nc046513e-624d-465f-b31b-952583e0cf2c\na6916c26-80ae-47c9-8bdb-812db8ff9482\ne26215c2-3582-484f-9696-f3183d21059c\nf67f0ac2-7659-42fe-bd3e-837e009547ae\n5fd8ad2b-f625-4e83-8f8e-6b0fbb4f9b7a\n31900437-773c-4746-8463-6910ddbe2f5d\nf892e5d1-a841-47a5-af43-6dd81de82bc0\na35d675f-fa2d-4800-a1b6-b51dc23a72bb\n6c48dc53-3580-4490-917b-cb7edf1a6cba\nc4c760f3-ef8e-4ff2-b012-a558a8beb2f6\nbe05ec81-daaf-4d93-b896-452834b1bf6b\n6593b09d-2304-4069-8f2a-051c4aec9557\ne645f7f1-9c76-44b6-b537-bb79002b4433\n46a728d8-02e1-4c6a-bf37-ff555f38efc1\nbdfb4739-d076-4a91-a4f5-2d9da40e472a\nc46ef8be-a91f-4330-9ce8-9bdf95f3485f\n274af6e0-6755-4b0f-83ae-dda3fc5bfd5a\n4eec88c6-d5d7-45eb-9d19-51a25fcadcac\nd0358583-65a1-4790-b1d4-144662c3159e\n89d44c08-9e0a-4f8c-b697-1528afc337e1\n5c9d476b-8ad1-4278-a863-307f9e8f3472\nea618bad-85e8-4f6b-8842-b3e4de0ca6f6\n58b67295-df12-4b05-86a9-99ef408af9dc\n2cc246dd-e8b1-4280-9f46-e749bd223046\n31964f47-9e24-4302-beee-fef250909b97\n245595d1-0eba-4f64-bf3b-3f768365840a\nc2f7a1b8-ddf3-426b-84ac-90412553204f\n9bfbdfbb-c69b-4b8a-8ba1-89f6e8090eda\n6cfabc4e-c2f3-469d-a469-d0161f520f76\n49eda010-4339-4af6-bae2-c6dad2cf587d\n3c30db7c-55f7-40d4-af6e-1d625d09038e\n835d381b-98ba-4cc5-978d-b2e286dd811b\n60bab75a-b647-4a0c-b95f-9c753eabe075\n437c4bc0-7758-450d-aa21-dab2f824b012\nbb2a52c3-970e-416c-958d-86746440c70b\nc9f523f5-1e14-4b56-8a1a-c5dc0a4594ae\ne77dd870-8913-4b06-9aa2-28f8ff566e06\nae2e43df-dea5-4e62-906a-0a371d8a64ee\nfddf4eb4-4e7a-49e6-b506-9032c7bf7dc7\n741f4ee2-a77f-47d3-a442-670859757c8a\nfce08dad-1268-4105-9ce3-c7cf30e36569\n6608fe25-c13a-4277-a979-279b33006dfa\n62f1bf2c-6c29-4e82-b0e3-8cd2b5522450\n101c261e-1926-4fd5-b494-6da9bef00467\n7aac25b2-121b-4ad6-8340-360ac40c9146\n08218516-c98f-45af-83b7-0f38f4b439d9\n90022043-564c-4229-af24-c395e1ec5e56\n1cb85339-0ac6-42a0-aeac-2906df0cf226\n52a29e82-4505-4969-a3e2-fa481e98271e\n120121c6-e85d-43f6-aabc-3c067145a94c\n22091cee-0c57-4cab-a1e5-1136a96fadf1\ne8789d46-a972-4118-a0da-5cccd1bb9669\n332d1ab7-7ae2-4784-b5dd-1aa4dece57ec\n18f865a9-eb25-4e4a-ac24-ef80a85223ce\n5464f6d2-520c-4bbc-afa9-af37e7d5add2\n6efdd672-f841-4047-bea7-39e1e297b0d0\n1595ea20-e4ea-44f3-a54b-43350041801a\nba184a34-b244-414e-a1d2-f25a504e5941\nf240b5f3-145c-4576-8fb7-1aa83dafba38\n0871d96e-e028-4476-aef5-be84739b86ad\n58ced633-39a2-428c-9d02-497fadc6dd99\nb955c9f7-441d-48c9-b797-263bf5519485\ncec7f111-faf5-4f3c-b6e6-6cbbdaf4605b\n5b237520-539f-4a76-8266-5cd79b13066a\n240ffc7a-094c-4cb4-9011-4f0fa356f12e\n0e665d26-6787-4230-a686-e0a75476b9b7\n37a77d6f-e4f2-413b-8935-d945b176087f\n9615c7c9-d2b9-4a7f-a20c-db4477eaaea9\na5fb419b-f659-4b17-90f6-dec023e10ca7\nac7f6965-9732-413f-8b4a-18bd8020a3b4\nb49ae8de-0186-4581-8530-16372cb4f2f5\n3e1719fb-ccb7-462f-9d91-6ac349dce5d6\nb30adcb2-8777-4458-a617-4b748f580916\n619b1cc1-23b7-4470-b3d1-cf5ee518cb95\nc4c3441d-4079-4609-8b27-0559e678db7f\n56961af5-0ba6-4cab-8de4-f03b9655c8d0\n5356ce3a-540a-46f8-9aa5-84dbd1f046bc\n25b8dd44-5921-411a-aeda-04e6e030d996\nb8b75636-7e07-4bf8-8462-7fbc8f8fd602\nac42ba3e-fd47-4d36-b5ae-edacba672139\n8d89167f-98cd-462b-816b-954e4383a4de\n37cbb5d4-2978-4dae-ac35-ce2467a7e476\n37f20488-fa80-4f2b-8bdf-1d875f0cdaa8\n85eda00b-0911-4634-8673-e1c20b283b73\n703285c8-9081-4bd1-99eb-917efec587d1\n6d072b48-16c0-4185-b5b6-ed6eee6f87fe\n1c014e42-19a8-4451-8aca-b92191a27c00\n2f38b158-c8c2-433b-bebd-afca30f714d4\n9feb9960-66b8-4bb5-817a-29e1084d0700\n41110eff-4732-41e7-89b8-e0db8d83fac4\nadcdd3a9-7ceb-4ea9-8286-108c4f66325a\nf75c428c-0db6-4aa6-b958-0b2f554d0876\n8bea2a88-64b4-4395-9bc8-604deb9e3ff9\n40501b2b-ece5-41d1-adb1-46a703b9f966\nba7cde86-3b08-4914-ab29-49cf2a971001\n28dccfcb-9dfb-472a-9f5e-e21454b5bfdb\nf9dec156-4e47-4256-98f4-6b46e8f67a3f\nd0695ce0-9982-448a-813f-e0016062dd59\n0f577259-0661-4031-b564-0ed325e0aaf5\ncf6bbd20-76eb-4c77-850a-9cc579864113\n06feb025-66ec-4fe5-b00a-4981de193656\nd75354b0-0935-49ef-a519-a3fd5ee3a421\n798f6eeb-a952-4071-ada7-9ce08c1a0e6d\n1c1b1a05-e995-4b32-a12f-b00fc64127f5\n88c78bcd-001c-4e97-a203-b4bad09487e8\nf7f6c37b-6714-466a-8e6c-bc98c91d5fcb\nfa630da5-9b65-40e9-a114-9274e52f7af1\n0323fe23-68c6-4cfa-b199-13829e2a7cb8\ncb5ee7b0-5634-4a68-b7c5-3b25178ff402\n3da647d4-ae74-42c1-bf5b-098e20117016\nb1b71922-6f68-4af8-9087-0098f09b458c\nc9b27854-058e-426b-bfa6-9099ab98ad03\n3c6cf7e5-5c3d-4c18-9586-fd5b50bcd812\nf6a48903-9beb-4c20-94db-9d7c81375958\n29a68931-19c5-4a13-b701-6e67416d8114\n2fb9f30b-9c56-44dc-8d96-5337686e0f15\n66f5e747-feb9-4787-9fac-3a1a2178a9b1\n05b651ff-f79a-4b38-938d-de25dd5f475c\n3739d0c5-6aa6-4c67-a537-5385d67472c1\n9231bcce-fa58-467c-ad16-8447414521db\n1bf1ec9f-1350-437e-8fe4-e0c07f689668\nbe72199b-4492-4bb8-803d-ff5b17c62844\ncb4d8ea5-9a26-40a0-b44b-7345e6c9d1b8\n47e0c0c3-9c9d-4338-8f84-c44cbae74d04\n3bf6f47e-2969-4124-a934-3a80e2f1718b\ne236fd60-a2c3-42d9-b180-2c1e620fdca2\n49cc74b0-fbe6-402d-a823-e215e2d8f00b\n9c760c1c-24fa-4a10-a580-2954e1bc1adf\n7fa7a2c0-19e7-420d-ba9e-25c1bf40fd92\n712624b0-6a7f-4ebd-adea-62c4773e1bcf\n6747dabc-2a43-4378-acd3-9c6b43cb5149\neeaa88fa-578d-4d8b-b349-88290c60b3c6\nff815626-6a8e-4d1d-be13-0ab476bbb466\nb2d11e45-2fad-42f4-96aa-813078e5df95\ne5fb6a92-3cb7-490b-aea0-b7dc14510fae\n564d0d98-0d76-40de-ae69-db5a27774fa7\n7d3e62bd-db7b-4c1a-b479-35a6a71ca6d9\nf8b1139e-c79d-4b16-838e-d6a5f4641a0f\nfcbffc6d-24da-447d-81b2-96cd8fe5722f\n21a7a018-adfe-460f-80f8-a90c1c74d4bb\n317d7269-c78e-49be-a472-73eefa662e58\nec603f65-84c9-4eaa-aca6-22239f361471\n62eccda1-813a-43ad-b845-1357d57e1bb5\na7f39f03-4626-43c2-b6cd-b075be4d2583\n745479df-2017-42e6-aa3d-005b2faecd81\n5498e25b-acd7-4a5d-9118-54dde7f1d064\nbf2b48d0-2e8b-45b3-aaa3-3258a169705d\n0a23d3a4-be18-4760-848f-59375c48c17b\n7f3a9751-6324-44ca-931d-d7b4e5f95f37\nc6623c71-5ea3-4303-b6cd-89c2a9e7dacc\naa0fe3c6-ea16-41a4-b9ea-fdb127cec2de\n5b28f3cd-7bf2-4f65-aded-7fe4de4f9e33\na8faf2bb-6e1e-4a79-ae52-8e790915b118\nd2b4170e-7208-444b-b0f8-733ce5ada9db\nff89d5d1-d0df-4ac8-b96e-c1f1d0111f0a\n111f7fe9-1258-42d1-8aac-fdeaed26907c\n5db005b9-d336-444a-8dac-ad56ee3e3d70\n844d2407-28ed-44fd-86b6-1b54f4f845a5\n2677c019-c16c-4797-963b-b533c2a584be\n5cf6773e-c1d0-487d-a691-459cc2ae5886\nf268cc94-2f92-4edf-b8a2-82f75cf30468\n2576cc0e-2351-42b8-a9e3-583b8af1dba5\n9a1c24da-3742-4ec0-afc5-f048edd2299d\n7ac19970-e879-4b2d-92ec-8d45455fcd4e\n9341984f-e2c4-4a74-8fd2-e069105ddf7a\ne2b3ac98-44f4-4c96-b923-eda84a3d4b73\n4b051dac-12a6-4834-bbdc-f16840ae5bc2\n0ece71db-f087-4fec-8ad8-af7fe272e75b\nf5ef32a4-bab0-486e-87bb-83c203fb43a1\ncad39573-edd3-4655-a8f4-46432a98fced\nb8ca83a1-238b-4986-b71d-410ef991b348\n0b7f649c-df5f-4dc2-afbc-02c39a2a0ade\n7481d236-2b16-4765-9f21-497d9bc524cd\n67f4e6fc-e6d7-40c8-a9dd-0cbe25ff1aa5\nfa34fef7-55ea-4a6a-89ef-0d237baac651\n00047d98-b91f-448f-aeb1-b62e64e26a6b\na3ed2cab-e748-45b4-9ec3-063b0708112b\nb1fe851c-55e3-485d-a526-4c34a5b94a3f\n5480dee7-a22d-4557-bd32-c9c17ea163eb\n34006f13-e890-4360-a9f8-851984a0394b\n98dafdb4-b8dc-451a-896a-b47060472bd2\n7bc0745e-0eed-4996-af6b-6052bd7ec31f\ne8d33ef3-9718-4117-b096-76c52d577ec6\n7a96c3e7-53a9-497d-872c-6a7c08088bf6\n1a2dc780-fabd-4d81-9fdc-1eee8d32bfbe\n267690ba-2a4d-41ec-8875-2c7da2fefd07\n09dd476d-a83b-4248-95f8-764d78539ecd\nd69b9064-32db-4ab5-8a2c-6635391dfe47\n2f5317b3-e2b5-4a04-8683-bf00a9c44919\naa4d0413-5291-4a8d-8c6e-eabd14948fea\n79b097cd-14fc-4f06-8eaa-d50d320dde5a\ne0df613f-af65-44cc-802b-9ea2e5cfcf24\n86dd0389-3911-4103-9415-1a1446ce3632\n555639d5-d48a-4b25-8322-a60898c3f36e\n570c6d15-abd1-4353-ba87-02b9b0eb8450\na6913cde-2375-4d82-8d56-f09ecab63d02\ne39db37e-b5e1-4cf3-8f63-e3b87d4fa53d\n43fd2e80-46f0-4735-a279-9bfd865cd334\n044c4781-8d99-49b1-ba6e-d84dcb3413ce\n69877136-4d96-48b4-a14a-273ad19c3a24\n4eb57c77-b4f7-414b-8aa8-c21185917bef\nea2c7128-d288-4538-86ac-f78092481b07\n9b94b8cb-ba0e-4381-b6d9-c9b72f15debe\n999b4409-194e-4806-aea6-44fe357bf1f2\nf601de68-28c6-44ee-b943-8dd60097e91c\n79ad27c5-0cf7-4564-b9b4-2086604f8298\n3c6ef828-7484-41de-b7fc-9812a9ec8b97\nb469df24-79f7-4108-8738-a485b1581abd\nf9311d41-a03f-496e-a23c-b55bffc51953\n1439221c-9c8a-4ec3-bfb9-07c55fbe991a\na1cf29be-4d18-43a6-acf1-29d8de02da9f\nfa5f6988-e6b3-4d96-a524-1e4f3ce34cbc\n152f1c06-a274-4c93-833b-f7564b3b7e8c\nf6ebfea6-c145-4904-85ef-39ae1f661a25\nc4755458-6f84-4538-94ac-d28b96ffb8be\n3258d559-eeb1-430f-9cea-7b37ef967fd8\nbe175389-bd92-4f6b-b3db-5c564505b4ad\n98d04cdc-65fa-40fe-8a8d-4907110239d4\nb4294bc7-f1a4-4ead-82bc-b59b8c9fa25b\n260f0fb3-1444-4a62-a10f-118d8362f026\ne099d943-63bc-41b2-9ee7-351ae0dca8a3\n5fecf616-fa74-4cf5-b782-a1c1d88703b8\nddaf948c-e471-4649-83ce-a9a278753564\n0d6686a3-c074-494f-9770-c8224f00a76e\n768f44d9-c5dd-4337-924e-930187d1b4e1\n67eb000c-315b-41ad-891a-d748f4287e0d\n6994a6d7-7468-4a72-a740-22a2f8475f88\na9bb5d9c-3431-4b74-9b2c-5f0e1c2e48ec\ne1cbc689-6ba1-4a5d-a27a-4707ba9bb666\nd871375b-2097-4f22-8c48-fe4c348c402c\n1b9a0961-875e-4d8a-9e84-bd23123aa393\n5cf76a18-32a4-4255-8418-9add600f7f16\na3ed0980-4668-49f8-b2d1-08ef2eb199fd\n22490310-7f4d-4b25-8f59-db9d3abf9f3d\n533d6e19-8f19-43e1-bd8c-8b72432f8969\n0a325afe-8d95-406b-82a5-f2433c7971d3\n9d831cc1-9522-41d4-8fd2-7469466ecae4\n8e602cd9-301d-4207-85e6-f138b5bd0c70\n01a032d3-aae7-4d52-8cea-0b6677195c73\n0dff5d87-9998-4415-a819-672b359ea16a\n4364afd7-b53f-4c44-887b-1efbb3639aa7\nfe25188a-56c5-460a-a359-ac52834ff127\n593aba1b-ebd4-47ee-afd6-1adb1e9d4e1b\n1d76639c-852a-4806-9eb6-ba918d9e33f0\nde18f752-e77d-44b8-ac1c-4e38a86dc54d\na5957702-bf7f-42f5-b964-63a89cde87f7\n9b2c439d-48fb-411e-9733-39d028be9d1f\ndebd5955-8565-425f-bc8f-61441f0be93d\n643dea48-f40d-4541-9067-10935353c7b4\n93eef555-5746-4dbd-843d-412bbe49b8b6\n23a0e58a-f048-4ff8-b2ef-eff856e0678e\n12ea9e93-56c1-456b-bc8d-32828b7668c3\n5efe22b3-76c3-4401-803f-d81f0fc9d492\n67e18906-6711-4bce-9240-063f4ad0de07\n0bbf76a0-551a-41aa-89e7-4424cd1c382f\n7627b46b-918a-454d-9bc9-8be4f47876e3\nf7820956-03d8-42e1-a8b5-06476a180e64\nb03774aa-a185-437e-85f8-13c6e0cf14f0\nc42e900f-8db3-43d1-988d-2ccf121e32a4\n41bc44a8-8f67-4a79-b0fb-97c105dd91cd\ne17e6126-7551-4012-86ca-7c9576d0d070\nbccd5465-bc88-4105-83be-11f1b2dd5ec9\ne8e2e107-1cac-447f-bc6b-a2158051828e\n452eac71-009c-4208-b1f2-236d118882d5\n35b0a60d-5464-4342-b4e8-fd9d01cae5ed\n144d909d-0e5b-4479-86db-da5acf509f44\nf6b11536-34f2-4e31-9350-1e50fec7d73e\n95d16619-f847-4057-a6ec-2b7682d957f2\n6057ae19-2eb4-4174-8382-69eaf40e3eb6\n6b212f5a-c896-4fcc-8f3c-9ac9f888889f\n9f11f1e1-94dc-468a-bcd1-494a0f2f2ca7\n1f1ba557-ee1b-430a-b448-ff96021aa900\n2e71dda2-b5f4-4f43-b82e-162f650af318\n3070c72a-bdfe-4f36-969d-f03260e5f426\naeda59e0-59b4-455c-ae53-9820f4da2b33\nd2609795-551d-4290-94ef-0a3942f89b92\nf57be99f-bca5-4e99-bec1-259e34eedd32\n9a9812e0-a0e3-43f9-a30f-75ae5af9e420\n877bd7c2-db37-4134-a32d-61ac2383ad47\ne86b67ed-69c0-41cc-9ff5-625828c17585\ncddb1fc6-c578-44ad-a43f-7e4022d35535\nf70bfa85-8018-44cd-b2c1-68049096527d\nb2dd8741-0821-4efe-89e3-f12d633c08b7\n3b92a88e-8e54-4335-809e-f77e136960d0\n93e64645-ef83-4697-996b-f68235e58a69\n08d2942c-bcbc-4475-8d1f-e6e468319724\n133c298e-6f23-48f1-a9f8-cc065b96b4e7\nc0acf14c-a67d-4b7f-89cb-46d4f279a955\nbc737365-2c88-409b-9a17-72941a58e6d1\n638edbcc-dd8a-475d-b150-91fef2c03d73\n66e8af25-e01a-469f-9301-4e82431bd3e8\n2e206262-d471-4513-a9c7-88da753f7e3b\n7c743069-4a85-4da5-8411-96307380692a\n93fea77b-c30e-4e69-b661-f052f40fa0ee\n632fdc5d-f72d-4bc7-b007-ad66b9582b9b\nc114b55a-5ee7-4e1d-a4a9-62a85aba5168\na3b57adf-aadd-49cb-8629-01b74f121add\nff7ac946-a021-417f-8e59-85ab08fb541c\n31e872d0-4e8d-40d4-83fc-a668e73fd152\n702568b1-4d23-4733-ae37-ef118d834188\n72f03bb2-fa98-4cd7-b581-d9c79ff3cffa\n67aa373a-b96e-4110-a160-e5861b9629f0\n4c697608-ff83-41cc-9db9-13082ed08755\n6633149f-09f1-4b19-bb7f-da42b6a5d078\n21b90eb0-ceef-490b-9243-9f2c0ba7ee5d\n52e83b17-fbda-4e42-9029-b6b9b920ea08\nc72dadf8-b14b-4a07-a4e4-553fab578ffb\n3595b8dd-c992-415e-9f57-6e377f7c3728\n9f97ed0a-4abd-4f5f-b58b-7f56fc721bf7\n7c6ce2d3-5c5d-45d2-a8ad-37d5e36b3787\n8ee711b4-1ffa-41d9-8085-ac2f362459a5\n3e2b5af6-847a-4ea5-ba02-c2ab78e0e49f\nbb0bb620-9d48-4e51-a897-460ef79a7800\n9739bcf6-a491-401a-bb5a-291ade67723f\nd0e46d53-fb2c-42c9-80c7-45ee505da4ed\n24302182-72e3-47e4-80ab-86d615273a6f\n136e9e21-d6a1-4a06-bb22-1c9c2118572d\n8a726ba0-dbcb-4bc9-9311-56c4174048b1\n70718faa-1e46-4d4a-850c-f79af650850f\nc1e39e27-b1a6-4f8d-8d16-7c288ad61454\n325d45ed-b523-437c-bc6b-67555acb075f\n3f0105b1-1a55-4da2-a6b0-10ec5bee0003\na947b6a0-c1e1-4533-8468-3ea490a08a5b\n6dc0169f-e045-4121-a797-9437d984039e\n147eb9d3-a028-45b3-bace-5a8e2c146a58\n4b04d4cf-9d19-4129-a681-97754ff95a66\n59129f69-4be2-4dd4-8d06-2188299d593e\n2f0d83bc-e2b6-4b65-9f3a-79ce8e75d75b\n5451d805-3799-43c6-bcf2-948e9b331db5\n0c8948aa-ef64-43c3-baac-670cbea9f311\nd9325924-9d09-4b36-8e95-a9fa6fd9622c\n77147c94-626b-4d2f-a34a-239919d7f9d4\nebf9632d-a5c9-46a5-ab8c-b48e5e26762a\n55991265-71e1-418e-990b-72002cc29657\n9f03e191-3c68-4e50-ae66-8737e0aafde5\n9b213d32-3aa6-47a0-bf0d-9cebf2c6665d\n40bc182f-1ba9-4966-b5fb-476524de33c4\n0dcebbf3-c1ed-4531-8ffc-6a101814f22b\n1a6b0cf2-361b-4e34-ae5d-5ecd2c1cf5c9\n524a48dc-4fc9-4228-ab40-5da530469293\n5ae0d17a-654f-43cf-ba70-6a678508af00\n72cb6a6e-c794-40fb-b636-3dbe1b564093\n210debc2-2ac7-481d-a1fc-5715f2cb74fb\ndeb56abd-ee9c-4b7d-8617-96704c907c7f\nd16b8e4a-6776-47ce-93fc-6cc4cbec0e85\n968b270b-974b-4959-9622-56621cec6a24\n80da288e-9745-43f7-ab59-aef2aa9c0f14\nfa5326b3-2eff-4c14-8030-5294ce52522f\nf467be56-b82b-4ddd-99bc-bedffe13df4b\ncb241a0c-2661-4223-af80-d8a9826f54b0\n7d9d8113-1408-43b1-9d99-d035c969c592\ne14dff3e-dd3e-4caa-b10b-343995374aa7\n042623dd-e299-4fbc-903d-41ccfc2f0df1\ne366ae01-63d0-451a-a607-6b294beb654f\n7868824f-d850-4724-8c45-c8ac911755d0\nb06cf34f-1dd7-4269-aac9-bbbbbcc6313d\n4bec91e0-7ef2-4194-8f14-a7a429097da5\n9d6bdc12-1acd-41c1-a6c8-28065d048900\nf225a7de-2911-4e45-90b6-85e253619236\n4f862e31-018e-46cc-a07a-16838deafba7\n073ed86c-5378-4a80-a02a-b2916baed940\n008e8249-3650-4353-be5a-a418c8f49856\n93f15e73-244c-487f-9f36-ee920c71854d\nf01e3166-90e5-45a9-8737-52d0155486b8\n1afee8e7-bcfd-4921-a3d1-d763c670b04f\n6a39cf66-f65f-4384-9bbf-09794386da72\n016c4fe6-55c1-46d6-b10d-2cad7bec4ff7\n586c33d9-1236-40b1-89c0-fcc9127ae626\n1afd08ad-c988-4c95-bcda-7f82d299d181\nf6ab5a58-b5c8-4cf8-83b3-e87cf477a505\nddf10158-dd28-4ac8-a147-5159fc3f5e3b\n8256ac8a-723d-4586-8b5b-4d25fabb041c\n47ca92fd-1211-48ab-b35d-0bcd29522234\nfe84d5fd-6bbf-4ee3-8c40-59e4d693e4ac\ndc2c3fe7-e1c5-4caa-8555-cd4b13e3eaea\nd21b3d75-f84e-4ef9-97d9-ed85ad447149\nf8be9da2-2991-4202-9b55-aeb04ea2f463\n0734e17a-46ce-4e0a-8733-d1cadc129a40\n670d3241-1da8-427f-ba79-ef178eeaa4d7\n34e06a12-a677-41c5-b76a-de150efa3716\n47ccbd66-71c7-4ec3-a318-06ba8b7262d4\nf677fb23-72af-4503-9c18-a8c07c8ca89b\n748af810-0480-4f06-95a5-b2cf5b95566b\ncbf00283-4382-4f0f-87b2-871324f35872\n32aa8eac-09a5-401d-acf5-61dc87e15bd3\n44ceb27c-c6ba-419e-ad29-18528f3a013c\n20ff5bcd-cc80-4b65-8287-6d1e932acf91\n8b18e1f4-f75b-4915-baae-7af043ecfa8f\n22bb9a6c-6352-4bf0-9aae-db55dbbdcb45\n1f6404e0-0423-4817-834d-53630bbcc2bd\n25b3e598-63ea-4080-9ac0-8ff97cf4ff82\n0304e2a4-f8d9-43e3-98b1-eb251c5cc73c\nb40016c0-0720-464a-8a63-e35969a3d9a6\n962672d1-88cc-4574-bcfc-027ff32cb29d\na8fd89d8-f867-4038-aded-9af50db21918\n3a06721c-6ce8-43cc-9906-0cf3f711a185\n57582cef-7ae1-4ee2-b7d0-1e83b28b7a84\n8406d527-6cc0-42cf-8761-9b6348e4b67f\n21eae5ad-6f22-4064-a74c-208f54d9eff4\n1b22c76e-2ede-403a-9584-1f68f1522fd8\n0b325cc1-8ae1-4e70-ba84-cdbf6e7dc2df\nae9e89a4-35a5-4d02-a082-4e8c860c5ede\n3516160e-327b-4ee4-ae4e-3a1247036959\n9909b9f8-d45f-44b4-bf86-8c3c701c51f5\n33c3ae52-73ea-48ca-af3a-b045cf4c2dba\n483d6a73-91df-4a27-b399-337e1e03583d\nad159b60-949d-40b7-b7ee-619b35830d0d\n5d8ec2d2-8b55-47ce-99f0-7e34921596dc\n9fe95b83-0f49-4880-8c70-96a9e6351cbc\n2154ae9e-ef08-4ac2-b7cd-5e49ad15ef9d\n69112773-753b-4409-957c-5d0947f04b31\nc5092d2e-a31f-433a-9573-4d108e12b1b1\nfcbd6079-c8fe-41cf-a4d0-627f5304304e\n665af933-1171-4951-af43-23add0b11341\nd8e84aba-1e62-4662-929a-e83ac996da9b\nd88cef95-5e17-4e7b-83f9-318d625b5893\naa928673-c19f-4431-a3cd-74432907d89f\nb3865724-f9f0-47f2-888e-f4981654bafe\n4d731957-0342-445a-ac19-5c9796250977\n03599837-5a91-45a6-8bf4-fa5d5c4ca133\n090e4c39-a442-42d3-b533-ce8e53456893\ndaebb941-15d9-482f-90a0-fadf052edae8\n7d815afc-e115-491e-8ebd-0ebb91ad3caf\n60199a5e-c311-46c4-88f6-75626a62e2af\n1110cd09-2d76-488e-b01a-c11cf71d5703\n1081e7f8-c941-4704-88e2-56eb80dd035c\n08d98949-845c-45a4-b109-7fb5bba89405\nb64b80f9-e127-446f-82aa-204fe71a3503\n469ca29a-0bb4-4a74-8ee1-4be9a1388d02\n7b76f0f6-6c09-4fd0-805e-4c2b62eda7fd\n6ffe0f68-f73a-4072-905e-da9a5fe22ff1\n7c972cc0-5b12-44e4-bd2c-2d011630d9f2\nb417dd09-94c1-44c0-9714-14d5331a02c5\n51f3dbf0-b4ce-4a94-be9a-af46fc2bbcf6\n688eab9a-f247-4288-a72d-7f309082ac85\n9c1d3a9c-3e58-4184-bcc3-834932749454\n7a1f0bbc-f795-4a3c-88e5-dd878e98dbe5\nf141d39f-4594-477a-a8fd-162627cdc395\nf0447964-77a0-4564-b438-a6419f28d4d1\n3f64f9db-d700-4697-ad92-d25d7e799be8\n14fb07d0-ac93-4722-bb97-af4e7bdbadb3\ne6b57703-b79c-490d-8735-5a27c42f3d3b\n59623def-7c3c-4bec-a303-0a3020ae2ae5\n9d23f840-d019-4ceb-91ef-d71c7235bcbe\n69d7fbef-e664-4301-9c36-c174f28b5193\nce511b5f-782c-49c9-b725-d6b9a3e53438\naa2bc099-167b-4094-ad18-e8caf0f9acdc\n7fb61ba5-d5d2-4625-a660-9ff339fb7c86\n43ccd268-ff14-4eee-9229-a224b24978db\n02533872-2289-406e-b478-1750ba276472\nf7f6465f-36fa-4cab-8f2a-220414fb8d82\n3ede1ad9-f075-4659-8508-06a568032b66\n1c21f235-1988-4159-99d6-70dd07b4c65e\n0b75ead8-fb5e-41ad-b8d0-ed64a888120f\nf2e476c5-f02c-4329-a8d6-eb0098e48f68\ne6bd6fec-dfe2-4da6-9a8d-35d2f5c93ac5\n8933f3e1-444e-40f5-8d1d-15de3050269c\n7ef01aa8-6e0f-4353-af90-083747517b7b\nf5332421-603f-48a1-92e1-969598edf728\nabe1f936-dca5-4802-91da-07080fa596b3\nb614e93e-46c7-40e3-85a4-c03a19aca70e\n06b45f4d-bcb3-46fb-bd4d-061692497f19\nd7d9bd2a-9b38-4228-940d-08f05dab9ade\n411352d9-53f0-4cb8-8b0c-18f061e26367\nb6ab3b09-0582-4262-8b13-718e78885d15\nfc37224f-55bd-4025-9402-4266c1625e36\nb87b5cad-d061-4527-ab46-3d8fc805f913\n86b5bf6f-a641-4c84-a54f-99786161071b\ndf8eebd2-c93e-465b-8605-ecab56139c6e\n55e34429-8cf3-4f40-a786-ab286cd68bd4\n66d79ca9-cf9a-40a8-81b8-e10e14d2af6a\n55a06098-f7f1-41b1-bcb0-3fde4496e87d\ne771d507-bab5-45bc-bf3f-8ac49285c683\n64aa2bf5-2dbf-48dd-8e50-52894964585e\n06e964a5-d56f-40c5-ab70-9a60af5f60ed\n320ea39a-b661-41d5-bf3a-81294519f508\n73697395-750b-4a99-a143-f09d3382fe0c\n00288ae4-5799-46e9-b581-fc7413e20d67\nef8b8310-ca93-4192-bff0-a1a48da4e995\nbe90c649-e54d-44a6-9d39-553ab802a310\nffe510fe-87ab-431a-acb4-77b633380fbd\nf4dc8dfd-00e8-449e-a3bf-f5caad4a4d8c\n10e64a8b-2821-483f-8d2f-550b16469e7f\n5313f9f3-9693-4ad4-a230-a02bfe245146\nc4745c32-1237-4a65-a89d-c977eec8b745\n58ed319b-bde0-42eb-a72c-c23d9eb08068\n67c6d032-127e-40d8-95d7-06c4972b1b6e\n9f200a59-17ae-4aeb-8b2b-0b8a4a7393d3\nb3855657-3884-4dc9-9e4a-cd2ad334a657\nd42634f4-db7c-4efe-9331-2f7d0b5ff0d8\n4e67a0b2-bb2f-4b92-a1f7-14d08c85bcd0\n5bf5c71d-76ed-48c9-809b-246b1a6b24a9\n4d972f74-64ec-4740-9c7a-1eddaf06af4a\nc828d85a-0b1d-4cb9-808b-87696f0a5721\nfac42c78-b9f9-4e9f-b7d7-bac379b4d353\n75ca9bef-3589-4e18-83d3-ee70b9d6bc00\n2af42ac6-c6be-4028-a1e4-7fb987fcc17a\n9986b95a-fdbb-4073-8242-c3632b9393e1\nd8a70988-532f-4bd2-be61-65a1fc6f640e\nec1e7aed-8fae-41dd-95e7-d54f39f205de\ncdae9225-03a9-4891-948c-f5473fc2c8d8\n7272b5da-9cae-4ca7-9abd-a9c270bd77b5\n453750db-6fc1-4a2e-966b-0c38163d9b0d\n578c3295-8c01-4c85-bb19-e0d1f55583e0\n3555e8a6-c80e-4d6d-ae83-74caa968c6dd\neaa35c6d-923e-436b-a334-2a75d5565d36\n81e96ef9-643c-4621-8451-68f171969c07\n01244464-1d38-46f5-8b70-685594c35c75\nd2254e2d-8315-4bf7-a32e-24de1dc007c8\n82cd0d71-51fe-49f3-922b-b0d0bac01e38\na4a50da8-8432-4065-96cf-f6df5f4b9928\n6944b428-ff5f-443f-8b8b-481bf5025703\n1b1e545b-b4fb-43c1-b45e-7e5b6755a874\ne1bbce8d-214a-426d-8af2-3de331e07401\ndfba7f51-ece9-4fe7-b413-d1f19cca4088\n687f4910-e80b-469a-9fe9-7dbc861b8abb\n5ccc4aba-57ad-41c4-af50-2e53c0288351\nfb64856e-c901-410d-af92-ab951881947c\n6490a24a-967e-488f-a9a8-ce87edf8cef7\nb45e24e4-2999-4338-bc46-393599995656\n179c8e4e-844e-424e-a18c-23f9079b8962\n08b5c7a7-454b-467c-a31e-f0b844fa96b0\n7cb31406-9928-4143-869f-c177daf6d6d8\n96d892b9-ff33-4223-9a26-215e4cddf652\nde0ef5fe-163b-4f0d-9b15-d349edc4afb6\n9600dbd4-5156-4bec-aa63-c9d13bfbe4e8\n5fa4d524-3517-4456-b5a9-d1dc52b3e166\n79ad9e99-adb9-4cf1-979a-01e2ef9f51e3\n6ae3aa2e-22e3-44e5-806f-28f3a0849633\neaca513e-e9d1-41a4-b2a3-d91b3f1e0649\n63ae2c1e-b70c-44f4-81cd-b7f7477ef85a\nbd98ab8e-0d27-488b-b689-881b466b6576\nf93f98e2-3025-41fe-a275-0509a639ddd2\nb1b0f2fa-c26c-4633-b129-0fb72cc6cb00\na7130131-843b-40a4-8db8-24dd2e758f8b\n1cad32ae-273f-46f6-9231-2a093364fed8\n88145700-402a-48a0-8ab0-d5c8d0e3c664\n3d727107-190b-41d9-8728-9f73d879638f\nf2252707-45be-441c-bf8b-fff2f6184d56\n52701095-9089-436c-82a2-bdb059aea6bb\n696bab87-767b-4235-868b-2280fe4f6229\n8529189f-14c0-45c6-8676-382aebb4356e\n480220c8-869f-45f9-b5b3-09a74a17e547\nd279675b-7aa8-4303-803f-9ff9c8b00e23\n97ba2212-49a2-4758-81df-ed065370d9c0\ne0fdd6cf-570f-4351-820c-43f3afeb6d69\nc6688b63-60ff-4e30-a194-be9223b84cc3\n619f449c-bab4-44ab-9904-421cddd21323\n23ae7e13-c254-44e1-82f2-099c2cd3dac6\ncd53429d-8132-40c9-97b7-c321e5314d46\n85233332-7e74-4f38-8b51-c83f279203b6\nfe550bf6-88b7-4ae0-87f3-4970e438c0f1\n65e45540-6a78-47bf-9d86-a24613da3f98\nc078aecd-f870-41eb-8f45-6f1094d3688a\n3b816e3c-1110-4378-863b-ffbba5e48030\n77dc4438-0b46-470b-ac02-e4af02b035df\n6a8e1d20-46a7-4fdb-af97-d4ec859c0fef\n34f0598f-0909-4ed3-8d0d-fdb3a67d72ec\n41ee0d10-5e72-473e-b885-2fc9422df4c9\nbb9477c8-1a17-4718-99a5-fa8092912cf7\ndafff8c5-d7aa-4cbe-a976-f4bfad2d4182\n813a829e-c77d-4461-a60e-34cd147655ec\n8e1c087d-8ebe-4efd-826d-dc5231517a5c\nacf70630-e283-4961-a2a8-4280e478ca88\nf17fd4f8-0de2-439a-b5bd-2cd95f8ce7aa\n2b2dc6dd-637b-4f22-ab86-365e38965f83\n9488dfaf-3c6c-4d8e-941b-9e9fb6b37f80\nf7211aff-41b6-430b-8b38-5d57582e2901\nde388003-5dcc-4982-99c5-b9ce3b551f3c\n5d58ba45-680e-4cb9-abb7-e0ffe92abeba\n3e31b9b2-72e8-42ec-9905-7ef3d18ef00b\nb1cfee74-b7e3-4854-95ab-740fb1f14588\n76b0a04c-7077-4934-a4bc-73822693dc62\n99c4997e-e763-4175-9669-4d10bfaaf807\nc05561de-e6dd-40af-953a-ca0be6b3326f\n84d6d768-c614-4cc4-9459-2f1d30e9ebc6\ne384ed1e-d89e-468c-8c49-5b9f82e67b97\nbed08163-c9d3-4ea3-bc7a-8140a43a6adc\n2f708d70-89d3-420c-b18b-2dfa52979f5d\nae1f5eb3-260c-4fa1-8b3e-a9138185a978\na4d9835e-2b89-45c7-871f-9bf24bf8867a\n3d37e37f-447e-4e79-b9e0-196cad83ff30\nba97624c-81d2-4ae3-8748-5b9084acb7ab\na9f9e8d6-e047-4c02-b98d-5c6b3be825cb\nd034dc53-762b-4558-a634-4bc64620cb9c\na1faf960-d62c-4ffc-be7f-16708c6b466b\n300e363f-5441-4e35-b2bb-934f0adae787\n2b732a9a-8cf1-4275-a443-fd50f2853509\n05a67b48-da9d-40ad-94da-2733e36e1923\n88a2876b-2e0a-42bf-8bdc-a80d73672109\nd2371194-9c8b-459e-8811-511d041ab08c\n33744c00-3e26-4ced-b961-4437af380c21\nd41a1604-faaa-4f07-ad96-e266c86eae1e\nef151043-272c-4caf-a086-1c4ca05e568a\n27522c5a-8bc8-4130-a999-b59652078ce4\n5f9b080f-a332-4117-b82e-afdaef8bc543\n652941a8-0d12-4bf3-a25b-d358ebb2b4e2\nd2ad6c59-91b9-4c8d-b04c-1980540ea7bc\nc973a776-97e9-4aa8-8e3c-d74f2b909d00\n3c5fb0bc-d99e-493e-b1ee-90a88e89a3f4\nd78ab0e4-1a28-4c98-a280-7a7521ea8bb5\na4fbcfcb-41a9-4c98-bcbf-f6698bb4c376\n180aa8d6-20c8-4778-a838-13be346b4752\n594156f7-f578-4346-b5fd-ade7dc1c92db\n7873dde2-6d40-4abf-a314-dbc87d6b1fc2\ne49e76a3-f038-40ba-adaf-23525d311a10\n01578f3f-41c0-453a-9051-27d12420c96e\n370ab860-57d2-4fb7-a05d-391855225f0f\n57d969e4-490f-41b1-8f9f-0c386258dd0b\n9e38a824-b6d7-42a5-a465-0b04dfe45e60\n0935d5c3-ecd6-4a8a-bccb-b5b6d585d159\nc7f33f98-804b-4499-bc71-192bd53ce2d1\nb963d4ce-3e78-4c9a-985a-df32782e1e80\ndf80937c-f9e0-421b-98fe-980ec21fe59a\na421cac3-9cfb-4f92-a708-ee601d90f40b\nd6c9a834-d6e4-49c2-944b-adf50975acc7\nbd379c30-e241-4bd9-938c-3ed5c167f852\n5301c517-e7b7-488f-a14b-7c3920ec3911\nf4dcbc3d-b424-4760-841c-a6c2ad2c1213\n371cb4c5-01e1-4269-8e13-1974b3c7e00f\n79f8c360-48ef-470d-85bc-3762696b278b\nf6185b78-39de-446a-8f50-600ca2d83a9f\n189a524f-c90a-45e7-b36a-5ef7dbe00f64\n0e447d21-1fcb-4b11-ae71-84cb6d1f49d5\n4e979507-cb38-41a5-af68-49787dfd13ec\n2fad83b3-d57a-4e6c-ae2c-73a9a5847015\n937d23c1-5d14-4932-a0ce-0c663ca401e7\n04e42279-0144-48f5-811f-efbd97792c9f\n51c1f233-e997-4a52-8cd8-9d4c323ecf8c\nef847b89-ab0e-496f-bf04-ae58d5103136\ne7df18b3-8d97-4210-a1cb-b988679c8c67\n7aa21892-e77c-409e-8943-16c871a9c382\n3e0b0e30-8f92-4d2f-ab02-cbe73eef11b7\n2d250514-a76f-4545-9bbe-3728eec32a46\ne9386309-84f1-461d-8cdd-39f400d749c0\n941e4dcd-fbbd-457a-b8af-12eb52b00ffe\nc5b7760c-ada3-433d-851f-131ec0454ec1\nefeb5ec7-cbd1-4bc3-9ab6-9ee820cf8b77\n405c0ea1-0183-400c-8f49-f8fb562318d8\n03fa0cc5-aa5c-4277-a133-85f66ed8eb62\n677847a4-7bc4-4268-be7f-113ec017a8b5\n2abb5156-c3a5-4e82-afaf-02ec1a31eb96\n6b14c703-aa3c-451b-907a-ad36ec974e4d\n80a068dd-3410-4f97-8d89-cca5d4b83b9e\n6b1e4597-ec0b-41c9-8bd5-961eec9089d4\n8ed47e16-eefa-4794-bd91-c090ddcf443b\n41e549c3-b5b4-4221-85e5-97371b379044\necb24d04-ac23-48e4-a20c-40356c742827\n1db7c128-7868-461f-a894-985b6134a423\nc285c428-9eb8-426a-8659-390209ac7a41\n953eadda-b8b8-43a5-a110-23792c1bb7da\n92416313-dd9e-4583-9246-4812128329f3\nbb64f6ec-e54b-4adb-93ce-6746b1dff171\n16862d5f-bfd2-490a-a0c5-baf5590193b0\nfcb2a309-f21a-4f9b-9986-5f036b6d7bf5\ne4e79ad5-0e21-4ef8-ac56-99633cf71f64\n4e935a18-2609-42e5-acf1-80b8d79ec5cd\n3db9d83c-b503-42fd-b136-4a691715e4d4\ne9392a23-54ee-4fd4-a5c1-5ef37f134c0c\n384856c3-e6e2-4a96-a676-7dc484bd224b\n478e06b9-2d9d-478d-a066-9240e875387f\n016597f7-6b1e-42a2-bf8d-11be2ad925a4\nab36e483-d8c8-4cbe-b87e-8ca0c2911d02\n4e0f2820-bb0c-4b69-ae7d-17a98b7466e7\na6ac13e1-079e-466c-9adb-fd3a63df802e\n39dba90f-a837-4081-a433-e387ba29f5d4\n42c5bc1a-527d-4bde-be50-a2e0b427a05b\nc849263f-7e2f-48d7-a28c-4dbe5db08ea7\nb2b3aecf-fb0e-458e-8b85-f72a73ad9a08\na4f8aa94-19b1-4824-8161-b2bbff763545\nb39b9cda-e364-4378-a43a-0c2441902bb1\n75933509-2a9a-4be4-b6ee-b62214346453\n2ca54075-1ce2-4aae-84a9-f631023ba465\n1dae44cb-2909-40b6-9b2b-2dd732a040e4\nb289438c-df13-4691-b1d9-bcc5d111cf38\n5e97aff6-00a4-45e4-944e-e564e2256ebf\nef59642f-e7c7-4eb5-9f4f-4ba25af8eeec\n01f87cc0-b1a0-4f70-a798-6f153a2e6422\nb960d9ed-dd3a-46ec-97de-bc12f1ba60a2\n4f3ac768-a7cf-4833-86d1-2cf6a99b2610\ncf35a331-711b-4e94-871b-8592ea40746c\n601878c4-dbbc-4a92-b8c9-6e2586027f6b\n18d2a8b8-4bef-4e0b-9698-815dbc50b8b5\nc8adbc55-db8e-440f-8114-cce6033d9130\nba123f9c-e0e6-48e4-a8f8-84cc6633b809\n5bd4af52-8a5b-4757-a8f5-b54607c7e1a3\ne47267cd-166f-4840-b341-9dbd3cb8065f\nc8631043-8a22-4a06-b213-9fc882aa9721\n45525e77-cc94-4152-a0af-17d0df9121a7\ncf2ac0a8-5b42-4967-898c-a1515295b2b5\n20f81bae-ca77-4e94-9848-6e507578bfbd\n1ab44e83-4422-44c6-a906-58686ab84714\n49cce979-8f7d-4821-acf5-a198157cd355\nf3de03e0-2987-4f35-8a64-9d06f187cef2\n3ad0c740-ee5a-470c-9637-9560c9b9781c\n63318442-cf49-406e-927c-f8dd22e6a82e\nf8b67049-d799-489a-883c-cb1640a06946\n54b72f9c-171e-4c1d-97a9-eb4a9ef9967c\ndc928a01-a12c-492b-882a-10a06b2ae121\nb26284ba-92f2-4c3a-a087-f7e1ccfd038b\nba877e78-ac4d-4531-801d-63b99aa7d8e7\n270fabb7-7d1a-40b4-ae58-ce71cd800dbe\n383f43f3-674a-4252-828c-27790fcfc266\n8093f639-5de3-4d3f-93bb-338ad9193378\nf512ccad-86c2-4125-bb28-9653c8fcb16c\na83fce95-221f-43d8-9f70-f370c8504cd3\n55822c07-41a2-430f-8ec0-6eac60c50380\n0328b82e-bab7-4d61-898c-a99a613dc60e\n319da46f-ae7e-4481-90e0-208c97106c8b\n66d78b22-0cb5-443e-b63a-43d1afbe161f\ndc2d6ac8-973f-4da7-b7ca-4d3485356c49\n1b1d6d57-57a6-44c9-afad-d76efe8f1879\nba3df843-7b5c-4bff-af2c-4d9f294e124a\nb990e587-f8fb-43dc-a56c-f7b3a57d825e\n92544cbe-0b19-4f55-b40a-edb14cddebf4\nec0c113d-092d-4008-8f78-c1066e0e2ccd\n79e7f5f6-399b-4102-b924-2f5ec4101221\ne7fbd993-44c0-4b8f-a00e-276726a39c11\n3d9b8d7e-6361-4a5b-a2f4-54279ddb7589\n2d65ec51-4d92-4eef-bea2-707e6c889f26\nf5c4261e-d306-4c75-9738-d4feddba63d8\n3e8b9b46-db19-4482-baca-39aaa5ad7e0d\n040cf8d7-12c5-4e7f-a6cb-e20d0dbc529b\nd417005d-d254-43e7-b4af-98d6a7a917d0\n45d2de33-0440-4786-af17-1981404f8eb5\n13f58863-72c8-4056-8b77-3399eb0a89d2\na373b634-69b8-47e7-b464-faaac6590b84\nba117533-533f-4ab5-a0de-a1f919cc694e\n74d5ce85-ed95-483c-999a-9983ba701a91\n216c2003-adf5-40c0-a364-e7c201443407\n1732e61a-75d1-41e6-86e9-ae3b49611ca2\nfd1a3d36-9508-4240-99bf-e953b6f04704\nc27b7e57-bf47-48ac-8516-dc7e60f3595b\n86957058-1b60-485a-b223-b84ac3423087\nee67c7b0-22c0-4c27-85e3-9c799e880b59\n4b039b1d-05c5-46e3-bd79-b988808e94fa\n151cbccc-9334-46f7-8385-8f697c6b865c\nb4f0bbd0-a9b9-4710-9364-f105c670634f\n043e08b5-a19e-4606-a8f3-1c4cf74ccbd5\n041fb94d-7120-4d20-a71f-980bb6f4dbf3\n51d0660c-449d-4911-963a-b2fcd37b88a9\n5054b909-f394-429c-9adb-94eb7cd7249a\n4e64aab7-ee7f-4b31-a66b-fe4abc1609ab\n4ccf9ebb-2c95-486e-9e6d-2f42f066ca88\n293d295b-d16e-40aa-93e4-2867fb6b8229\n92cbc303-d045-4659-8b30-13c0bb6c3c5e\nf3508551-cb3f-487d-8eff-46740853c00f\n83910f66-f033-4b5f-b333-816726d7d84b\nb452b5da-9f38-4f4c-a30d-5830e796eae1\ne6db5dc7-02c0-4b6a-a810-3f29f8381148\n106f2fc7-5044-49a1-aba2-c4bb7d450ebf\nb36ab9f8-e3e0-4e2b-9a08-362fae5e7102\n28fccafc-af98-4daf-ace8-84bdea59c386\n63bfad2d-497f-4c70-8b6f-8866cdf8122b\n85ed90ad-0332-4864-938f-c0274aabcfd7\nc17efbb6-cc78-4c60-a1ff-073b2fc19582\n11dd6ae8-3a62-4dcc-b871-4e3979c39ea1\n5261216c-7cda-4777-bbaf-4ea8ad99a06b\n0590e1b3-d49f-4675-87e8-7480e1c9cda4\n4e6a9e33-76a5-4c2c-a655-79d042f3d242\n71034403-9230-4d8b-b6d9-09a485df0eaa\n7bb1812f-0430-4a34-bdab-b2ef7d0c75c6\n901a411d-8024-4122-b4cc-d901f3c5e410\nb949cb8f-4a9f-4376-ad65-6a5d49808f12\ne5626772-8d75-45e2-9b05-77be4dc1e5f9\ne9a06ed9-a389-46e3-8dda-a44ed8863482\nf74010c8-dddc-4cbf-b595-dcf86d7fe43e\n1119df9c-25c9-43c4-b893-4169b206cb87\n13f818b2-8a35-40e4-8ceb-2de9da76c994\n470d77ab-105f-4802-a018-be08e1ffd49c\nc6d14d8b-f6f8-4b8a-aab2-acaa6badc57a\n7063d534-7019-4194-a11c-07b68ee4eebd\na0aac7e9-7622-4741-8d9a-678fe2106615\n68b7555d-9584-47b9-b8cd-f7ff2098e8fa\nc613f401-aaef-4e29-946e-5aa15b6c3efe\n88bda72a-7725-45dd-9b9c-3a7188f252d0\ncaee34f6-fa96-44d1-af0c-aa4b3ac2ca46\n81d5d3cb-fc14-4e2e-a455-f21a8ff47612\n8f930b85-138d-410e-a201-7df25bbd46b4\n3146a60e-5cea-4e18-951a-b01d08f0d6b6\nac201c75-c8d0-44d7-bee3-58bf584800ec\n6ec4f6a0-3348-4367-96a7-3f6cf8f68cc7\nc9c1ae26-68bd-4f43-ae4a-c601086d383f\n7aa97932-b798-4f07-8c9d-35e7cb143b57\n3f91126d-884a-4267-9668-062aa21d5131\n43179827-3fa7-4913-94b1-e6b96923f3bc\nf01e6c8e-8e09-462b-85d6-587595d69f8a\n5a5c3510-5e3b-4af3-b71f-f7075a7e40b5\n931ed557-3e64-40d3-b1f1-d634cd19b249\n670e0b0b-450f-43a0-996d-2d5c1220cdbc\nbcc57ed2-0770-4892-920b-a6fbacee7b91\n0353d316-80f3-4627-8791-7f7d3d191dd8\n8fccda8a-6616-4481-9db3-37ea8d7dd3bc\n1c1c94b4-0681-42b4-bc94-08dd7669922b\nbe277970-5c0b-4fbd-bfd7-dc2eb3523ea4\n65ea1b1d-ca9f-47df-8d03-696e745be434\nda0737f0-fe20-43bf-b7a5-847497df8291\n5bdb9e73-fb82-4940-b2d0-894b921265a3\nd64db3f0-271b-4fb1-bf9e-089ea57bd204\nd0c50575-488d-49ee-b150-7f6d517d81b7\n0d7f86d2-5065-489c-89a0-795ebe728f61\nc94bd9f8-dae6-40fc-9ba1-3f47a42579ac\n45a6e1f7-34b1-4fd7-9bfd-8f0faedc64a2\n782b6602-43af-422d-9b79-7aebd63647a3\n2052ab42-a5b3-41ad-9777-775fd5dea80a\nf4b80808-9900-4239-99c3-ebfe62aadc7e\n4792df61-7001-4787-8572-f7dcab77ea0f\nea828dbb-7e4d-4db0-bc52-40d9a9bc91d8\nab65267e-006d-4363-b977-78ca48847332\n30c1e752-9bc0-4bd6-8a80-84f879f132e3\nd06c0519-d4d4-4069-9018-2bd9e03c31b5\n76abf0a7-f6af-474b-b319-7b56664ed7a8\nd8e5434b-72cc-4719-8d73-630dd70bc2d0\n617561bb-60c7-4473-aaea-fd678be91cbf\n5057b402-4166-482e-a4f8-9c4d436eafec\nb7995388-4efb-4478-b983-ac2d674f8982\n496022ff-2662-425e-b048-713dc457fb38\nd1323393-a50d-4616-b386-60fa7016eaa9\n169be11a-e24d-478f-ad6a-7288d88f182b\n9d5508e0-9203-42f5-85f5-3144db2f1ea9\n90ebbd9a-8882-46d5-b0f5-c6ec3e791277\n970f2536-b309-4f32-a3cc-1215a77ee057\nf436cf0c-c480-4d0c-8acb-0db14687f7bc\neec49dae-8a78-4413-be79-a61df441b406\n1d872bdd-5c6e-4106-b4db-7f74a6ac55ed\naee11131-3150-4262-84fb-1917267e392e\n1e971b6d-f0e7-4857-a621-25318133ae47\n556b8675-63be-4df2-a24b-b015edab4f77\n2889b954-70e1-43a3-b283-4ace960585ac\n995e349e-3969-4ced-aa37-5fe85405f8a9\nb67ed9e5-926a-4920-ad27-82061617a0c2\nf79cd19b-c41b-430c-88b3-3dba84c0c1b5\ndd151145-d431-4cf3-ba99-976dae4d272d\n99d9d57c-692f-4a7e-8eb9-2adb50744564\na138ea70-2a5b-4541-80e3-ac3757f601cb\nc5cbb621-11a0-48e9-82ca-fc645a30b7f6\n41fc3050-38c9-4b3d-b3fd-65a79edb88a1\n6e765b14-fcc7-4b1d-a14f-b701006857b3\nd4443393-8b0c-4de0-aa06-f8ab8b578915\n94ff1119-6030-4214-8957-9ae207127be1\n3a6fce4e-ee8a-4f6b-9415-3048a577192f\n73b8904b-431e-42b7-bcf3-99173b1f936f\nd3140704-dba3-4535-8ba1-99949c8ba9ed\na153ce08-5986-49c0-ac9a-6540fea60bf4\n41dff5b1-28c1-4440-9b79-3a211acad1be\n826508cf-9e79-4170-96ef-ee736869c10d\n923ce468-5f21-47a1-ba98-a3c04be92b40\nf18b611f-3e60-4b39-8f21-c1efc5a56bae\n2973a499-2075-467a-9ae4-cb8a8ef5ef15\n44387613-8250-4dae-9429-a664f2e5d4e2\n80966c12-d0ae-445f-ba56-12e93af3e69d\n5d206ff6-2029-41f1-9683-3f2f8537520b\nbac8ac28-339a-45e0-8fd2-e23b56270049\n9a6fb50d-707c-474a-ae03-e38142361c3e\n5c0b2f4b-cd32-499c-b9a3-707c4f4e702a\nd071e1c2-199b-40bf-a7d4-ab91fe0d100b\nda3d0f30-27e2-49ff-88a5-f3a444c809a4\n39d1f521-3a91-4715-b399-d74609a95c73\n640d03f5-cb00-426f-a2b5-6b1cd6760068\n5a0888c3-f0fc-4eba-8fff-66661f016bc1\ndbcbf747-c5ef-4972-872d-cb1867db5400\n17de60f9-8e80-4ea8-9314-7c4060fddfa9\naaaff99c-c140-468c-80c0-e789a8eade03\naf92a2c8-772e-41e3-bbe5-9259e60e3774\nff5c6af4-12b5-4531-ab51-071c204aa8f5\na197d29e-21f9-4016-9f86-80b716a8ae43\ndd27cd33-9679-489d-8d29-242aa063ab58\nf8f9ac78-168d-4ab3-8e54-2468dc90bb43\nddce159f-3650-4c6c-990a-97751f7ee2e9\n9ec93898-d8cf-4d97-9133-0e30fef5475c\nd5878fbe-b4a0-420f-8444-f9f097c7bd17\nbf77bfaa-60a1-4f9c-a748-468f41822372\n00120d6d-74a0-4f91-85b5-9bd29bf2c045\n17606201-1026-4070-baf5-3e153a9de6e1\n001be924-a690-4416-863a-44cf0906b0d6\n860ac429-2697-4fdf-9894-403fed69d078\nef77b3f3-865c-4b9b-ae02-e13010455b6c\nadfaeca2-4f0d-4e54-8b01-e677206d8843\nd69f4277-66b3-44fd-92a8-f43040ac495c\nf78d3c93-4c99-4257-953e-7d656edf49ed\n41252918-f15a-4989-adec-d65619663086\n0bd5c51b-ed9d-450e-b3b1-f97869abdf56\n36cb0d5c-6a75-4374-a696-0da1a800f278\n237cfcda-1f6d-4930-a41f-22fca149b01d\nb9681dab-12cf-4366-af62-7e54a0b4169b\nad8de210-1f8d-44a5-a89f-90d10fa310c9\n49b1d31f-0cca-4949-812c-ccff04176633\n11fd4fa4-1a13-4f0e-96fc-225e6e9b51d6\nba43469f-a7f9-4ad0-9e21-f27b3c0f5f61\n1c13b261-1bf7-4b7d-88f5-bf420cf06b8e\n553fa2c3-7c00-4841-9607-0c6407f1e3cf\nbc4f400c-d5e4-456b-8bbc-dc044d17e445\nfca21ac7-6bd7-4310-b861-3dbd870a1636\nc0da71c2-3d1e-492b-a91b-b1ab44d8d2a8\n34c1156f-68fb-4878-b47e-e751e8f0ea6f\n4c99f5b0-f888-41b9-a4b4-051ba6ae0b14\n72573d20-373f-4703-a301-77d0b9bcee7c\ncc127f48-1d97-4a39-8b0d-757f1638e93b\nc1655f24-c250-446e-a4d3-dbe300ff44b9\ne2707029-0bda-48a6-9cba-63252750d2d1\n94c9ddc6-1568-44fa-beca-912c2a80e95b\n6e6b63b0-025d-4f0b-aa79-1c065a92a898\n48622164-4d0a-44e6-91c9-652cc6749098\n2eb93e15-00b1-4036-a4cf-3a8a6db69709\n501b4c84-3119-42d0-8f4d-8711481898e9\n35e37c1c-14d2-48c2-be4d-ed88255e7b6e\n0964ec65-ebe8-4f19-a19a-36729bb852b7\nd1825ebe-ced1-420c-9f25-6deb6e2b8ff1\nd6bcc70a-b5ef-4224-a7bf-0fa782489480\n434ccf06-9340-48da-8af2-eea239579c55\n19a1a9af-5fa6-43b0-9029-02afe089fde9\n01d15ab4-ca9f-41ec-97df-c887d57f9603\nddb91a99-a3b8-4f9f-9398-5052e09ecfac\n07cbec0b-b21c-4b6e-bae8-c9629fb12295\n8e744eac-039d-4589-b268-4f5313128af8\nf1253eb4-3066-4541-adc6-c7c323effdf2\nfda09e8e-1721-44b6-ac6e-c6ea8e4a7e80\n4925a9d7-cd97-4294-b038-44a3bedfe160\nb8d78b8f-36db-40d6-bdc6-4e8c9cd8f69b\n5b03b28f-0269-43d5-8ca4-2de13bcd42d2\n103d38a7-a587-4e2f-b27f-f1c755c3fe0f\nac21ead7-dc9b-4d6f-b2d6-1a97ec911394\nfb7ae789-b10e-4f78-ac0c-44a5935c9a5d\nac7bf8ff-e8c4-4233-85ed-2832f8cae374\nb619e7dc-555d-45ee-9db2-55b63093c07d\n6572f140-b1a9-43eb-a308-af1c7b9f8b3c\na9564124-1578-45ad-852e-07706b0972aa\n76197023-4205-4fd0-8791-53e50ac407ca\nd1dfc136-d93b-42cb-a3d2-e89d11c51903\n32a433a1-9433-4813-a43a-3e8a3d2a1bf1\need86ed4-6795-42e1-8db6-4ad33e9da9d7\n9ca39de4-9dc4-4607-9f1a-0367dcccf1c7\na8c275bf-985c-498e-b82d-7f3ebb8b1db6\n590603c7-2af3-4512-acc8-259f324f54a1\n14a75c21-ab14-4204-ae8b-a6aea398f368\na2b45803-f884-4102-af66-2372615a416a\n40fdc37e-83af-480b-8609-cac1dc2ba92d\neea3cde3-289e-4ca3-b392-32e0410d6aa4\nf7a21adf-577c-4e41-93b8-5cc0e62c55cc\nbad9f3ae-f90e-42a0-a4cd-317d8bd8103b\nc70ca312-0181-473f-ad0e-7bc8350c5fa0\n5cb2a9c3-9867-4ed7-86e0-cee03bbac44c\nc7cb6e8f-f03d-498f-9423-144ed4111368\n06a7206d-4b6c-4081-82c9-5472e63a2f2b\n924d428c-7999-4e9e-82e2-3050470547dc\nb2f3c45e-3b5e-4091-9d7f-6a085d0a6e54\n66649399-4940-40e1-bf57-83b35dc729b4\n6db3e22e-b99d-47cf-a5a6-3857b1848d62\n99b07997-a782-4a27-8b7b-c2c364265b08\nb0d8989f-091b-4fee-ba86-f621f49bee95\nb507b851-254c-4265-851d-1b5fa292f4f4\nd5b4376b-ae8f-4af2-8285-99f813d044d7\nde2be967-4712-4545-83b0-840cbfabc36a\n26911a2c-66d7-4fbf-b404-02a0d74e9892\nc75a31db-39dc-4e8e-a0a0-44cb4e32d241\ne68985f4-df35-4db7-b722-a364ece3a198\nd024207a-d864-4743-9c10-f75a3387fe5a\n19e394fc-bdc0-42f5-8e16-688b503972a9\n69889fa9-e77f-426f-8f6f-757b33cafbbd\n2e10e6dd-6a7e-4d86-8f8d-107647a9b59c\n6b5fd0bc-7fd1-4045-8fa5-a43df7918584\ncd8771a0-b21a-4653-9f6b-bab397864e67\nb9a02cc9-6713-4aa8-954f-937bbe6af8f0\n538618a7-6ff6-4f05-bc1b-2c77da29cffa\n705071cc-9de8-4d8f-9ce4-50101d5e4590\n8ee227df-e2a8-46d4-a10a-b5d24b103c53\n40ac28a7-d97c-4bc2-a4fa-7c5afa1dabd0\na5b9c22a-1dba-4d32-8fad-8288f193f74d\n7f137adb-6e61-44c3-8e43-ec1626881b74\n198783ab-b56c-4169-86d0-09fcc2b61840\nb2ec948c-9338-4834-bf29-9c4b6a504775\n079a233a-9167-4f41-8211-abd12770fb46\n0ca73345-85c5-4915-8b1d-c19b7630e24d\n8a35c0f5-7ec6-478d-b129-44510ec34ea3\nbb16a2bd-e9d3-4b01-9c68-7954559ada99\nba92dc3e-b784-4056-9332-f595254bfeee\n1b1310af-6d95-47f2-8e7d-13dc8bc42db7\n7d02b1f9-414f-47e9-a25e-a5c2373db43d\n0d5e1a55-564a-46e2-a7c8-c0103184e938\nb34812d4-09b5-4587-bdea-54dd3fb0754c\n67832ab7-d57f-4eda-b3b6-68b4956c8257\n2fb7d383-b2e4-4ee4-b7ab-5b999e0a3432\ne4661ce4-2cf9-4707-9551-a283d84c0c9c\n8f63a762-c755-4197-ae01-2bb45e942e7b\n92e79631-96df-4446-a9bf-147da1fc98b8\n7d4b657b-2284-42c4-940b-21ef17437393\n0f0d0b8b-420e-4b13-b202-0c74e6251d4b\naf612908-6c05-4a6c-83fb-35663f06d287\ndc155fe6-278a-49ec-90e7-27e624807416\nd973f87b-fcae-45e1-b421-0ac37c587e68\n0150ba1a-87cb-47f4-8f23-ca3f81c45c24\n4612f984-16f9-4ae6-87a6-42699a4a0288\n08d64f67-323f-4e7d-bf8a-6ca5f8c6f506\n685dca62-9e82-4df2-9e48-44707f2546f8\n47116db5-a304-479e-91ee-5443213db570\nbe3821d3-a9d0-41d0-870b-eb67e1b6cae6\n94da84b8-b782-43b8-8aeb-5ea440e57732\nba95583f-4f9a-4313-8436-48fbc8dbb3e1\n44e9cc77-c1e6-4e18-bbe2-8d0c892afd4e\nf15ee685-a1bd-4ebc-b2f5-2e0b13b5e9de\ncee58b24-3baa-49b3-9669-291dbb5f417c\ne114de73-d426-499d-967a-a2bc3e23b1eb\nc3e3a645-91f8-46a3-93dc-ea98b1287095\n7e61b95b-7074-46be-94aa-6d45641f4ef7\n73d43032-fd07-411e-a2db-485137d4c902\n0a9bc182-a355-4cf1-bb2f-1bdd34f5cfd8\n127cfad3-5ad5-4b97-b0ac-1fd85de00661\n0326b317-22d1-4ea9-a4c7-c4fe7209f46c\nbebb44ba-d2c6-48eb-83f5-54fc01600c5f\nf960db26-d0da-402a-b392-d76be64a3e98\n6aa4ba95-b2a4-48be-9712-0796940be106\n5ab48269-3971-4d06-ac53-0e962c02614a\n883bb811-5907-4406-8958-2b614514d032\n6670e198-2acc-4bd2-951f-efaf661e85c1\n75880970-ff4b-40fb-b019-00ff7d282047\n8be34c93-d194-47cc-abcf-baca31033440\n1a00866b-9c2b-4585-8fd1-7eff581b2a37\n9ac61e35-1264-4d82-87b7-078be32a16e7\n1c2dc5e8-9da3-47f3-8ee7-154636f9f7bf\n93bb9d74-4b78-4264-9866-42130b48da0c\n1ea2df5e-0deb-44a5-bb5b-f48b748c015b\na51efd35-9627-41bc-8e57-4e635821abe6\nedc103a2-c54e-4d2b-8e4a-0c1e2bfb2aa9\nc5535663-f725-45ee-8852-18e2435f1c29\n652cdec0-c69d-40a6-9c4b-94f87229f455\n8c2863e7-2a3d-437e-95ae-30f2442f1dbb\nd70c2d82-ff2b-4b44-bb1f-54c9221d54f0\neab6781d-8e87-4f17-8951-b23888b8eb2c\nd26cda55-9d78-43f5-8c6d-80f223744721\n2f9021c8-da89-4d22-a597-609a0583cb66\ndd44b828-42fd-419d-a2d2-f9bcaf23c2db\n4d61945b-b274-4716-8abf-44b45a5d404f\n902341cf-9475-46e4-93e6-bd67e7c01cb7\nc6586bfd-dee1-4902-a4ae-7d7902587ba3\ne3080087-2831-497f-9e35-bc93b34cca56\n194021d9-24dd-4e79-a205-7d62b582e725\n8c82d072-09e3-4413-8022-135b5fcf1a4e\n2f5dd609-5847-453a-8510-ad60cab4139c\n1bdb75dd-8f44-4a66-9542-0600975db0fc\ne556aa4d-1dab-4766-b627-c0fe5c10f50d\n7438f199-b2f0-46d6-894b-aad5b9bfc9c8\na27bc2e5-fbff-4d87-b1b4-11124a49acb3\n68749199-b3e3-43d8-8a64-815bc10eb0fc\n43626b90-436b-4826-8cca-f6cd197f320e\n27b72ee1-d324-462b-8ebd-c3b243c8dbbc\nf7f9f5cf-0ccf-4d6c-8f1a-d23cba01a34f\n1e85f36b-f4fa-42cc-a32e-26bc34f03ecd\na46eb324-d136-4cb2-a7f8-d3269e5665df\n59cae048-0ddc-479d-a456-06f9df541d4f\ndb8a7ad7-890c-448a-879e-ed59977b8a89\n8e503629-81e6-44cb-8d23-d232102f07e0\n0871ee9a-1349-4144-ae81-b8e522fc3e95\n2f6a935a-7595-47e9-9427-347be1cc6e94\n8bac0948-b7be-43b3-b092-6ca73afb336d\nc7262083-e6fd-48e4-a06b-420a3716caec\n415016f6-35f2-45a7-9feb-95ee5289212f\n2a6b3d95-ac34-4983-b2fe-3ddc390f8b82\n0c57d8ab-dcf2-4cfa-bf11-3c72b98226c2\n3e3e0768-9790-4f34-896a-a423432f6a05\n4209066f-1501-44d0-bfe2-f3601aaae0f1\n7b9fc936-b63e-4107-bd50-34b3c951ddba\nf0f8121c-c3ce-425a-bad7-122987339674\n7d1c2a94-726a-4eb8-9adb-80d752af0aa1\nfa433e4b-dc27-4104-b431-f14daf3a373b\n1a3488c5-b427-4c6d-905a-f5ccfed61474\n23a01fc3-5f09-49d6-8380-c9f0a6c5d79e\n7c3de0a3-3dcf-4bd4-a978-0a1b042fb4c6\ne7acb049-157e-414e-ada3-691f1e6f9720\ne189cc44-5f39-428a-9651-fea6b4cf492a\n86318edf-3b66-4680-803f-61ed81ac7dbd\nc0d29d02-2b26-4444-8004-ef97714c1bb2\nd03a194f-7d21-4529-be95-32b673f70578\nd35bf6aa-acb0-455d-a9c1-d914be7177cb\n3b0108f5-5ad7-4d04-9f3c-18556703fae5\n9cfc6bb3-d3c9-4a0f-809b-81e856d4e1d3\n1f2b1876-de9b-4b5c-a580-f7082323bae0\n4f2a8901-2b68-406c-a3df-da864c507266\na8b063da-2be9-453c-8aa3-92d75ebff236\nc07d4786-23c0-4648-8c8a-3178dd31dd77\na21bd8de-5339-4be9-9796-838ccf8fb0f5\n5d5b00f9-e874-4c70-86b2-775f087a6c8d\na841b94b-4811-458b-895b-16f993f78be0\n36ae3ee0-e5f5-4324-8e92-6822259d353b\n30314538-0f8e-4f48-89b2-3e425a31e31d\n7d1956fd-ec96-42cd-b137-ed6e6467c020\n26a5268c-5b87-4fc1-947a-d87fee6fa584\n63ab40ff-d45a-4eb8-8268-887b4396da6a\nb69384c2-34fc-4d00-8e77-690ec69a5fec\n3272e851-6dd6-4868-b887-7d673c971e29\n2831492d-e5e2-4c82-9f06-2aa8f9e3a52a\n8a1aa62b-54e6-4efc-84d6-031eba11531e\n0cc53e3c-cadf-4e34-a0c9-b9510bc0c2b0\n76d304fb-a39e-48e6-8481-e7b5ab59bb8a\n24c5f089-00ba-4ff8-bce1-2e1119a8b985\ncef950fc-dd7a-44db-9774-0fe7d5054990\ncfc2e143-154f-4f32-a571-ed338ec51e39\nfa4b8591-590d-4a93-9b6c-00bebdae6aca\n5981db80-e663-4bcf-a8ac-20818acc4da1\n5618596f-8a05-406a-ba21-182a3ec97222\n198199f9-2d9f-4efe-992e-15292e73e0a4\n15c47049-b747-46ce-8e64-7b042f13e025\n706b93d4-947c-45ba-9919-6bd505b35110\n2caa6120-7628-48e9-80cd-c9a239e31d54\n0159ebe7-759f-4e35-a825-ec21eb758715\na7124255-18eb-4662-9b93-cd173dea8f2b\n60737fba-88c3-4a84-a440-87f6d9999962\n6ad87de0-81cb-436f-9138-a21e6910adaa\n11a4664a-f0bd-4d8c-90fc-00704094c161\n48273470-264f-46ce-9d1f-373e45021fb8\n1343a471-f908-48f9-b279-d5169d8591f8\n522ed906-b0a0-40a7-b799-c54bd614d126\n373b2047-c677-4268-89e9-048eac9acc71\n0447a9cf-c431-4ec1-9e42-bb6941a29800\na98ee7fe-f1b3-4997-8b05-e1d8bdba4d80\ndaafcb50-9cd5-4d64-a209-cf1083775d8f\n35948a06-2421-4c52-b38a-e69aaa5a6234\ne2c75e63-9475-44bf-8adc-2f7b12ca4bed\n47b991db-9a6a-42bb-9edd-ce04609f0971\n1b4dff91-bb02-4b4f-b1c2-abf4a1bbbe3d\n89e4ab4a-a122-4412-876a-0198f4fba35c\n72bbda75-bf54-4ff3-b17b-93f960235d2b\n83a44ed0-0152-4d01-bb0c-84493b602fa8\na5b831d7-79b1-45dd-828b-7fb838999497\nbf06686a-1a3e-434c-86e1-4dd6b35515e6\ne6197064-1446-42a1-a676-c8e959c69d2d\ne333f12a-18ed-466b-bd81-9f4c7ae8bdc9\n8cda2917-8ce6-4a6f-bd4c-7b90890b5cb0\nb0b86630-ffad-4364-9aef-4967fdf7455e\n33ebf8de-ab3c-40a3-84e8-4bd72dffe18b\n5e045f81-9f4d-4ce5-9f9a-cc5ba4b364f0\n7d929f9b-5142-4eb6-89c8-1002f5f7b055\n24a3abea-ded3-4652-9ac3-d9dfd938ee97\nca453ce2-7994-44ed-a11f-38c4d5ab9e03\n34ef0a5b-37d3-481a-8b9c-37560342af59\ncc8836f0-19fb-4f69-83f7-ae09fd08c68e\nbb1226e4-e041-43de-98ea-2729973cbd36\nd2a44b5e-4178-4780-8e16-469ba6685911\n3497f895-6b54-4d0b-984b-88cacba6f83b\na3ac836a-b8d1-49db-a92b-6958b69a7292\nc1ed3955-5c56-4709-9955-1541265f0b9d\na024b992-d097-4340-919f-28db35025b4f\nb387911e-4e8f-4d90-bd80-9e91b7afd6a0\n09870af1-24bb-4b06-bdd5-03c105e0763a\n6ad8df16-f307-4fbc-8b41-a5fa25fed01a\nb19fbf4c-52d3-4642-81df-de5780d95933\nfbf3be0e-a391-44b0-9993-537fc0ef169b\naaa472dc-e671-49b1-af08-86a610ea0a27\n2c67a062-e8c9-40f0-8764-fb939d50677c\ndf4f1fee-5f44-44c8-92ca-1d19f06c1c04\n7e4766c1-8d16-4149-a2cf-97e91ae918f9\nc39ee50c-3e24-4700-a449-1d95b058fac0\nf64d696b-b8c8-4649-8b72-57b5be6f7d8d\n85a51c32-0164-4e8e-91b6-581367f8553d\ndb59a3eb-f365-48e3-b823-56464c4bbb06\n8ef2991d-cf8a-4448-977d-51a6ef012360\nf30bee87-ab3d-4ab1-b12d-055fcf2f9935\n384a32af-9b24-46fb-81c5-2faa0690343c\n42764fa6-789a-4e12-8505-a21a71ebccd0\n2a6c0a7a-defe-4207-b3f7-516975966cec\nbd54d62e-32e8-402d-935a-34fe264ce7a6\n117fde48-91d5-4ed6-b36f-9b8e71c5943b\n1bb96ec5-8aba-473f-a5f8-239b85e5bb97\n4f4a5615-ef10-436e-ae73-98c8c2a9f35c\n4f5548ea-191b-45e8-85fa-14d3f2e9ba01\n95d0b507-c151-4ec3-85b0-47adc8abab10\n3e691fa4-4bc4-409e-9dd8-d328673211b5\nc6f7c69c-9291-47f8-95c6-4555fb90bac8\n365e5f2e-9815-4d21-a5e2-6bb06eadad92\ne82c805c-c518-4bc3-acdf-5eb76ea3f202\nd023c76f-2ebb-40bd-a08e-bdeb2a35d358\nb5136589-36ec-497e-ab85-6b77fccc5446\nb84b1030-f175-45e2-8162-465beb5218b2\n19e19c02-7d9b-48f0-9561-47831b365090\n6f216775-6d55-48e1-b623-b6770be20a97\n45f8a0a9-eb17-44ca-bdbb-6dcb4073ac74\n2404fa34-1801-4695-bcad-bdb47fb2ffd8\n4a7720da-a9f4-4cf4-a831-e1731fa0a79d\n388e841a-9c3a-4e84-8d61-81c327243ffc\n1c1e9d8f-fb0f-408e-a186-a5582cd2113a\n94c3afc7-4ef8-40f7-8b3c-e412fe7bfe37\n98dacb0a-365e-413e-9b3c-0737404746d3\n491949f1-84d7-4fc4-8aa4-c8f5922adb28\n24a4127b-2a5f-4897-912a-2f659492d558\nb7b153e6-743f-4450-8b07-8c6ed9e8a5a7\n270eb362-d6f6-4f86-8270-c1fa1bfd018e\n87982c8b-24d8-41dd-b194-c8ea10260ca2\nf79f85f0-4cb4-46a7-a1aa-3ed9bf10b1fa\nb79b802a-0e2c-45f0-a4f0-438ed446aeb1\n2ca30aa6-c285-48e0-a25d-6932e4306b0b\n5af0dd78-3f47-448c-bab6-6ed1a3417317\ne7aa419f-81e5-47cb-86dc-2ce522d0f68a\n13eb63dc-57bd-439f-9583-985a91eacd9d\nb7e74a51-1f9e-41f8-9bbb-b0af2f27bbf3\n241c98f6-28a0-486d-bef4-edc8249027b0\nd5b2b88c-e5dc-41b3-9062-33478e954e33\n2da22885-7533-471e-b988-e127333df19f\n8f229f44-e1d8-4c52-ad67-04ff075d5539\n20674140-62ff-4dbc-bd85-479ee46d8398\n6910b075-280d-4288-8bab-e287d5c8af68\n792fdd32-1df7-4b2e-96e1-a9fa1f5d3a5a\nb73b7c48-babb-4011-9c71-330eaedce55f\n8df1132a-e4b7-4c88-9c80-51510606441a\n46fb41a1-07ac-4a0a-b53b-98a6c762c23f\nbf0bd486-8642-4df0-8ff0-ce36037d6fa3\n3413ad70-841f-4d2a-86eb-e72b5e9db1dc\n899c718c-115a-492e-8201-0c8f10b28d81\n05c6a96f-d65f-438f-92b6-dc359cdc27dc\n05ba8c33-139b-433f-b0e6-2572e0f837d7\n36ed9127-00d5-460b-81e8-fe7392af0bcf\n29ee6996-19ac-4f54-9671-40577fa27894\nca349f29-b0be-4cc6-9c41-139bf9323a92\n8ade0760-9019-45d7-b719-b8f25ba3f3f5\nba4b89e3-668f-48a4-81b1-9cda393b922e\n43b2bf7f-dc33-47d4-a06a-7c2ef9ccc986\n0f825eab-5876-4ef4-ac01-297e535cda27\n9a8576b0-a61c-4b30-8205-3e078e11cb8d\n662b6121-cc67-4145-9adb-562d8d101d86\nd34010d1-15f7-407d-9eab-8bd0fb75476a\n04e17c2b-5a9f-4fab-aebc-0f049f2d3fd0\n9347428a-f833-496e-b14e-421a2adf6c59\n867d58fc-92f5-41ea-9d5d-a09c3d4abcc5\nbdf63eef-96fd-4707-9344-dc69c272e5da\n1ac874e5-395f-4f99-9788-1e989b5823f0\n83de81b7-9811-4bca-9137-c3da1f779f5b\n67f7d6b0-6921-4f5d-a0a1-99dbe668d12f\nbfe95e11-5813-4c2b-98d3-2af15f8e90b9\nb64dc2ef-8dab-47c6-90af-0bccc35f5f51\n6166d79c-839c-478a-858d-a779caa3ddd5\n41d2c5d7-547a-4a3d-bf03-da982f6a7496\n2ca0b448-e721-4b88-976c-42fee7e89b84\n6177d9be-cb1d-476d-8b2a-24565ad50daa\n625ef148-68d2-439b-9614-0ea1f1ddadf0\n69c270cf-08d5-4278-b9ce-c10bc411b7df\nc8c02bd1-8922-4d43-9ca6-7d7ad2b64cfd\n33b4330b-99c7-46de-9e1e-1bab0bc76cfb\nc57fb462-ff6c-45d0-83e1-bd5b290531ad\nf3ff3f5e-32cf-436d-bbb6-9495a533fa78\n3de82c89-2718-4eae-90b1-d4462ad3d9ff\n20f3ac27-9a51-401a-ad6b-dcded8d8c55c\n39279893-fb0a-4e4e-bf65-760db92bb448\n27df772a-b1c8-4bb3-acd4-dc4e42bebf20\n3d8717b9-0e1e-4b04-8a50-fbe516f3f28a\n73885f6e-e617-4f9a-9c68-18bdb1136f31\n0b501ca0-0e6d-4df7-bc94-320ab6de32db\n8eed84ac-439f-433b-b16c-f8bbcd721ae9\n58f47e11-126c-4a6a-b748-6c454eb9e73a\ndb2ad642-b54f-40ec-b8d5-812124e2bafb\n5b0e9f09-eca9-4b0c-a1b3-02d9a648a106\ne1ff21f6-b0e6-4ee8-ad64-044697314dab\nf4ecc93a-ac7e-4fb5-8a0e-9a8d6d0da5d4\n873082fb-ba3b-4b9d-859d-9562c68a3df3\n3a0ab979-cbb2-4802-952e-a2c066dbbddd\nde3dc761-d9ce-422d-a7a5-257c1ca976a9\n02c8ee49-d24d-4692-9619-7e9cd692d59d\n2a0cc03c-25ae-464a-88be-2b354ae30f62\n3c3df7ce-1f9c-4133-aa78-31c769626493\ncb7188c1-1e49-40ae-a6b2-fb62876a1cf1\n0ff39b79-cd45-4fb4-9aab-0aaa2c789e8e\n0ad02ef4-6f6c-4874-9351-04cc3b0f9384\n9c7a444c-e4b8-4efe-bf37-36df7d7ab047\naa4c7ce1-2c1f-4fa1-8409-6fd33655cf1a\n7961e45b-9541-4920-a5e4-94ca7bbb2294\n973c5e6d-c6af-478f-a3e1-d8009b47928f\n5440cc1c-d19c-4721-be67-de43f7b93144\na3059536-9c14-4dd4-9f70-1d1ad98ff641\n09ecda74-3992-447b-9677-299a4e1da738\na1b551fc-4ec3-46c8-8ee3-1e59b3628fc6\n2ec46356-b6d8-40f9-a4a2-d5c63b969b03\n3317743b-df19-428b-a661-d6bd403c1c14\n8bff4cbc-9f54-41aa-8103-bd6266461c68\n470616ca-4ee8-43bb-81d0-d330e442edce\nf9f6a0b4-92a0-4195-8ff2-549deff03306\n7550f9dd-a25c-42f5-86d2-4df74108d01d\n536ceab2-bdae-4a5c-a2d0-10e6c65a4201\na16ffdb3-eb86-4e72-9086-81823bf33877\n8c32524e-ccbc-4fce-a6fb-fddfb80e6ab3\n5ec1b61d-446d-4075-a0ca-ceb7ea21469e\n98bf3c0c-49bb-4ab7-af50-e3e0a9de0eec\nde0beac0-813a-4883-9cb4-cec8bd112abe\n52130242-5aeb-4d11-b180-9e88636dcfbd\nd7faa8a3-5e00-474a-adac-968882b9e14c\n182a97df-aaec-495a-a08c-9ef6381ba6cf\n76919ec1-50a9-4cb0-b6a2-16b5f58fe355\n1f8e6c93-732c-4b8b-b508-d9ebc0dbd925\n905b82a6-9448-490f-8efb-72a1a14cd35a\n362497b0-637b-4bdd-b5d4-5ec34c0fd575\ne3462e92-00b8-4af1-8bd2-b77e0b9cb412\neaae9bba-be04-4ab7-a241-b409cbbb96d1\n927b2b0b-cc84-4820-bf0e-f78042c27e5a\n5837c53e-eb37-4fd3-8e92-850e93d22489\n177a9947-5c50-42f4-b51b-a8ef6dcbc8d1\nf0c4dbc7-78c8-4009-8a89-ae536cbb41cb\n0627d18e-6527-43b4-bd1f-b3c47e87fce9\n51962001-f670-453a-8a7d-40db1668930a\nde2a4b95-37a0-44e4-82dd-0e3784f654af\n1341acf4-b68a-4b8b-94a9-2eb30d21c330\n8fb6a7c4-2d5b-40bd-993c-7bbc26bb35e4\ne0acf4b7-d40e-4674-b746-0fb04c87b091\n42dc317a-6318-4eee-90a2-dc4da412d458\n63a8ef8d-9988-48b9-9cb4-203976bd5a69\n22570249-9038-4749-b6d2-a2d417c4f76c\n00095c0c-09f4-48a2-8c29-8890177028fa\n1184544c-4112-45bb-94c7-9128ef50756c\nef8bca83-3fe2-4552-b740-bef6578ec900\n81a6e9e7-2adb-414f-82cc-81e9eaa48b18\n1e03ce5e-11a1-4389-8ce7-f1b90c2cebe8\n20dc4e42-5036-4525-8e19-e22b54ce4927\nf82ba5a8-e7f2-43a4-879d-f394f0655ffb\n38f57507-0126-47eb-abc6-659a49843699\nbe200667-e127-433f-877d-bb37c438f6f0\ncc1dc463-8ceb-4eaf-9852-7b0acb8650e3\n359c9546-c5f0-4c50-8391-069e50006cf1\n01237c7a-c2f6-4be2-9c64-76620c0b55b7\na64ce591-9117-4645-8a1d-39f3a9eb4ca4\n005895a9-4733-4c7e-942a-3716b31489f4\n6f404dd4-6b7d-4bad-9538-b323e0836ad9\n892ca530-53bb-44c2-bd6a-fbc269217e83\n8cb057e5-68fd-4a40-88f8-800db1c3bf39\n21ed822b-75a5-40cc-8a07-07e9f0f2f72a\ndb621ece-eabe-42eb-add4-482cdf8a16e2\n88363763-482a-4eac-9920-34e99851bbd4\na41a5cad-56d3-4dca-8054-5898dd0a92dc\n50e0fdfb-b834-4319-8966-4c80908dbcd7\n7cfd3074-041e-4ba8-82ef-3438b1eb8f7b\n3ec26f47-69a7-4c15-a502-bd56ff3ac7bd\n6308d8e7-794b-450a-95b3-0d01807487ad\n9b1930c9-9f34-42f3-999e-263631b4d60a\nf33efaac-4d6d-45e4-ad42-9ba1e2393ab5\nbe371994-80d9-42a7-ad8b-38f42801b963\n4fb27f16-b1d0-4464-a0f0-8210eae28487\n5b74cadb-8e1c-42d1-bf9d-c2f6e578efda\n372d4f79-081b-4b95-bdea-0c3a27632e5c\n25e33faf-091f-43fd-958c-a87555264d55\nefc3f177-3848-4fab-b37d-835559296c78\n4c56d61a-3159-4227-ab45-3308b3a7f489\nccc3e60d-fe63-4f2d-bf75-8d4b908ba5b9\n925f7716-adb5-433a-a720-f2c5adecfd60\n2b6788d4-0a76-4fc5-a418-6b11a66447d2\n8409e1a2-a428-4ea6-9753-1bbcf733e55b\n1bd55e11-55c6-4e19-b282-4c45f3ff2fac\n91fb2fc4-5074-41b9-a12a-b03dd1dd57a0\nda0ef151-c090-43c6-b0a9-553cd0042cb8\n3a1645d6-6160-42ea-953d-fdd0353aafa3\n1064f34f-80e2-4b91-b462-db20cac6a2ca\n5458ca90-2bfa-4737-b8cb-36d6db825553\n045306b2-6cdd-4704-b4ff-d2047ddd449b\n50a006df-17b6-421a-bd1c-1d967d20d541\n9f182b21-bae4-4f17-9c61-29f5ae1a990d\na0f6e261-27e5-4041-9955-5f006d6ee7dd\n78b73102-d264-42b9-b6ba-d7060017324c\nac897915-3ce1-4cea-af77-ba0d1666316b\ndf3e4082-cdab-45a0-9b75-87d41f808228\n8c834d34-d191-48b2-9b2a-c68347b3e133\n567e3e55-0436-47d0-a2e7-beeb12120d26\nd15d955e-8731-469d-941d-9ced40b4dbe7\n24e29896-2948-4ad5-b538-369433145f9e\n2741e782-53b9-4f0e-847a-9ed309bdacb8\n6a290ee4-23fc-46e9-bd36-b9b276c76a90\n1300b2cc-53e2-4656-952b-e579b9c144cc\n79440485-f72a-4802-8dc6-ad44e00634d9\n2995b0c1-687f-48b5-9f07-f7afe4c89102\n64a1fc62-dac3-4272-a896-b12afb46797e\n76f6dfa9-476c-4265-8767-e52a9c91a53c\n8a3cb414-f01f-43db-882d-046d5e12be92\n69f59c10-a091-47e7-b954-45bc3d96e7fb\n9cda03a6-2c21-4e8f-8ee5-42a66b1f8927\n8dfb4b21-443f-4cba-ba80-418019e1c7f3\n4258a7e4-3799-4571-8604-89cbf9cbca2d\n2ee730ca-7dc4-461d-951c-900061a51b2a\nbf829830-f636-4a46-b811-b1adeb7f06e2\n1701cbd4-5ab5-4ad0-8acb-9e81aca0a016\n10c4548f-68af-4c14-8dfa-8180d752dc92\n9897f68a-6c46-4fa8-989b-09c2130a60df\n1e281e76-f597-4422-91a5-c7a742381c35\ne007e572-69fe-4a0d-bf14-a21378f988df\nd933c0fc-24fb-4545-9375-ff1bb701a1aa\n093b79fb-bcba-440d-96ea-11ca658781f8\n3945e856-1f8f-41a8-ba9e-212e6460bbad\n0a72dfab-30e5-4e4f-9105-97893abcb2a9\n2e1a5c3a-340d-49d6-a5c9-e17c206e361f\n00bbc1f2-6493-4914-b744-3335803667eb\ne0ce9815-174a-4963-a8ce-f379f7aa2eb1\ne2e89b3d-3710-4380-a38c-e9a5acd1e2cd\n6afae170-c1ca-4cab-8936-2246e3efd4b4\n78cad8c7-2a62-4cb5-ae31-75ee80094cd3\nad9a03fb-0ce6-4642-9c28-8581586e80f8\n3dfdbd16-8c11-47ca-bb7b-e49148a6d250\n3573e23a-10ec-4759-a53d-cdf21d245e03\n3fb4d2d1-278c-4ead-8300-9d6119d9e90e\n38f01f34-7137-4064-99ec-cfb84bb79a1c\nd71e969c-69d5-4f04-ae73-e27b9b813b09\nf09dd2af-1876-42f5-84a4-bfde490e6516\n0868e310-7171-4af4-bc5d-a480afacf9d2\nad280b08-8693-4e72-ad68-f277018c20d8\n14c71321-2bc4-446d-9df0-59b552457a92\n099403eb-631c-4b45-9cbf-4fdd367858d9\nddd759ed-a589-4d27-bae8-901c38c46971\n0637b694-b87c-4fae-8e33-517baadabd3d\ne002a25a-913a-49bb-aff2-077259140ce5\n24459dce-1ef3-4dfd-a9b6-dcb31ece27de\n9a3de8ea-9fe5-4d88-8977-62e4dab7c509\n58a8ec68-6671-4e71-947c-ad06237b2583\n49cd8a8d-6f77-4dcb-85dd-da655436431d\n738bac32-7a33-4c85-baa5-2ac826acd4bb\n75859593-6e51-4a44-9b75-7d443064e708\ne582e053-1f66-4cf7-952d-6294144f85dd\ncb5fdd5b-1b27-4f84-b4b0-e720691323c3\n922ad9f3-e393-4d1b-bb6f-2811709bf173\nb2a47325-519e-48ac-8b8a-efca3b926da0\n7be544b5-51f3-42d0-a617-95302e8cfed1\n5be4292e-c7eb-4c88-8e32-094f7a802132\nab232ffa-d119-407f-a242-b057f8eef5cb\n3eb0fef6-33c2-4ca7-ab98-7cc0c48188f6\n72720755-77f1-470e-9b95-0e666e667ebb\n1fbf1392-513d-408b-8b95-9985a565a791\n596aaf85-74f5-46c7-999b-cb3d22f33229\nc8f9d5db-25e0-44fc-8ae4-5965f8aab6c7\n5cc6e794-3ad3-4c02-999e-442235a5e596\nfc4a7731-ef85-424c-889b-3232adaa9ce2\n2c01cb22-1c27-4bc4-9a41-96d9e9236ffe\nffaca4f0-8233-4d4d-8c3f-660cbbf12930\na2435601-ca9a-43f6-a43b-2ed8e181651f\n7c3f0101-6962-4b3d-befe-8088d208d4ce\nfd409f1a-dde2-4346-b15a-3cf4866f233a\n968a3257-eb78-48fa-98a4-25bad581f612\n5261a9f1-51ba-4cdd-95c2-4b7b27b9b0e2\n9b984d83-abb2-4c2a-82a2-6bb9505547fe\n83602c02-09f3-4e6e-b235-e5154cb552ba\n03f30676-2ecc-45fc-80b1-7ebd1f0c0b85\n7afb2a0e-7c24-417a-94cf-5d46dd13c23e\ned9ce0e0-d50e-463c-b2b0-50b41186dea6\nc71d6095-bf36-4e63-a15d-44937f19fa23\n3008c1bb-bc55-49d8-a90f-e137719a19ad\nfc95e19b-c417-48c3-ac21-a9f078052570\n97effab5-bbc6-4b45-be7a-4ae2acbbdfe7\n69d8c889-9fe6-4f65-a0f6-373f46dd50c6\n7b1dbe1a-3c81-4e2a-9a4a-56f9a451a3f5\nf7459fdf-078d-4127-b575-cb74fc98fb87\n6cf86ac0-ae2f-4450-8940-d2ac910c73ae\n609c441c-6a44-4050-898d-5c2d7852e78b\ne3c31394-b03e-4c2a-8a0d-72ee6a44e592\na86f3b86-abb0-4af3-838b-51766192c6f7\n838072a9-3792-4c1e-b25e-7e6b5776f48f\na4910a60-b86f-400c-b524-96ac17e737c4\n25e4ab1e-1b8d-4241-a267-68fdd7d659c1\n0ad47604-eaba-4576-a6c3-66fec6677fad\ndab4e371-331b-4021-9659-cff6512fec89\n078fa1ea-bb9d-4b07-b932-20ab5858b1e1\nebea0e88-dd29-4fd4-b804-d962258c9b29\n6b563722-a212-4f72-b830-b4780ed89da4\n237afb38-6497-4277-aac1-488817992b80\nbadd29bb-aa98-4ffe-93d8-51bec91e012c\n8bb04e60-f854-47bb-801e-025cb9e427c6\nc026af10-4d71-493b-a1d7-a2260a0b21dc\n69ce0a0e-870e-47db-b122-15c66a3be6bf\nabdfaf7d-44a5-4552-ac32-4da8e39e6643\n1c173440-61c0-409b-9ddb-268d65fbbf61\n3afe5a21-c646-4ece-a66e-2f95b5c9290f\n23b5aad5-8b8a-4bfc-b180-756181e96b87\n254d0ca4-d4a9-4bf1-82b0-aed8af96fc29\n139738ef-9320-4046-b190-8c21b841b047\n9521c6c3-7969-4294-868c-f16902b0379d\n5fcd755d-5a7f-46bc-8697-f72a04f38436\nb8b2578d-aff3-4acd-9a11-6d9566a58da0\nca879d89-13bb-4a13-9444-f11045f690ee\n0a017f18-4975-41a8-895e-41cfcfe27080\n75a01d77-2360-469c-8e6c-e9d19715714c\na2e1be92-5c20-4203-9f78-6aa197502948\n6ef1f7d2-2163-402f-98e4-c4cf23a22cd3\n3211ed17-1362-433c-b00b-27e8dc348d0c\n76b5c3d0-5ac9-4813-b89c-03903c511527\ndd00c5d6-5eb4-4d85-afb0-ccabf6fae017\n671ee292-640f-4195-8dc7-fbe4946deb56\n106a87db-8c74-4705-bcb8-a9e594efd286\n19dac2d5-6ad2-4603-9971-80d1f355924b\n501c85be-8157-4fcd-a155-1379a5cead73\na3a800c5-a7df-4657-abb2-9781376c17d2\ne64b9ca3-559e-40b2-b1f8-9529f75e46dd\ne14ab4e3-dcad-45b7-9b6f-937d6eda5403\n00d96fda-083c-4166-9f1b-8ca14fdf00af\ne6245aa2-04b4-4e2a-abc6-6be3bf77a9ff\ndc948c7c-776f-42f5-a979-1ee206cb64f5\n3445201b-5c0d-4e92-aa35-55c648ed7954\ncb37dc72-3d5b-4210-80ab-33d0f97dd0e7\n56a5ae51-bb0f-4b22-be4b-08a367f4596c\nd400bd4d-e20d-4e65-ba57-a620864fb37c\n16d39a44-dc0b-485a-a735-8fa2b6b4bebe\n2eccc771-cca4-4bc2-9389-188153384c74\n4dc2ddac-a8f9-43ef-a707-53acc1761acb\n05b1c782-328e-492a-88ac-352892958546\n086579a8-46aa-4fa1-8629-cac034f7c55d\nd66c6f61-d276-46d2-a943-b161f188f2ca\nd7847981-8171-40ea-b13e-750f5aaf2992\n4014f1eb-4455-40c9-81fb-95c4e7569d13\n6ee90706-11e9-4ca6-bc11-a9b46a803914\ne12080bd-3448-420b-92de-55c2642a9054\n86d14495-766a-407c-bc76-673d2ad6a957\nd69d2cba-8b62-4217-a1ed-ae397634186c\n058c6f7d-abd9-4cfc-b003-d0b582ee8cc8\n4f4c4512-312f-4b96-b368-4621e95c1e2e\nc2738671-ce2d-46be-aead-113a1d9250a6\n0f84584a-958a-4c65-82bd-35f15043c878\ne231626c-964e-4bc2-842a-c5e22b01a264\n7d95cb30-df91-4ec8-af32-d3e970188427\nfc0e8bf9-8820-42a0-8384-000278305777\n8ea149da-2209-4843-adff-f0b44b14cd3f\n8e792952-2964-42fb-b403-0ad06b450954\n4d8a69fc-6dfb-4167-9a88-06eaa686ad7a\n1eefaa74-1165-4af9-a44e-6817ccf2e4b6\n406c158e-6e9f-49aa-a09d-d416ac9ad0aa\nd474cf66-7233-4641-b13e-a12acb28f798\n06c82f94-3c05-48f0-86c5-8d0bb91e8b40\n5213239b-fb50-401e-81e5-8d3361cddd1f\n9cc21e77-48b7-4abb-a2f9-650faf843eda\n66a939cf-0e5d-4b1b-8129-6fa28ec11d7b\nbebd6dc6-b44f-4efd-9a92-84a25325f267\nd8348335-4174-4a24-bd0f-5ed058bab0c7\n4311a987-6314-4778-b92f-0e80bbc08f65\n39dcb5ab-32ba-4182-b398-3dd7c73452cc\n02bc7bdf-7d05-4a04-a468-bc297574cc0d\n9c8ce34d-3818-48e7-aeae-9b7147ad5dc6\nad175004-7628-4f07-8292-27d660e8c8cd\n76a7933a-5912-447d-91d0-75286baaaf0c\nb4454247-48a0-4c7b-add9-d0474055958a\nfaed60fa-4eef-4bc0-8dd9-7eb28dc9b5c2\nb617ae99-d040-4a07-87f4-bd5034483716\n8b4ab624-dcd0-4eab-beb4-9869e9a76253\n66a15de9-aac2-4597-9fd0-fe0dbd2a30e8\n015c2921-5245-4ead-8b19-cc1c65bb7b64\n3a810b3c-a7bd-4f52-951b-0d704c0aa374\n2cb87066-9fef-4e2f-b11b-aae990e9a3ff\n76015624-3ad6-46ed-bce0-918031bd9e45\n56ffdde3-b4ea-4973-ba35-304f7baf7583\n613a1bda-221c-4079-96e2-967448c63acb\n9e8ef7a6-be1f-4a4d-9abc-4ca178d4f32e\nb5cd0908-6755-42ce-b6d4-b7abfb479004\nbd3c0d9a-2e9c-4b3e-bc70-f73795b7242a\n5e3dfd48-90aa-4148-972b-fdb7c4e79808\n5a778fb1-ef12-48bc-9f07-2958c83edc80\n315efd4c-501a-480a-abf2-434978cd4216\n5db273ff-cf30-470b-a7c0-8724a0a9efbe\ncf11df2f-394d-4411-85fa-394be6108971\nd27676e9-1676-4182-a938-a24aaa19fea5\nc19048dc-f065-45fc-b395-cc81d811719e\n1e279061-cc80-4d36-a49a-71695a32bb22\n41a963d1-81ab-40f6-8aa5-860f51fa364d\n7b13a14c-9fe9-414a-93e0-832502e31212\n70c3b07c-3603-4768-8202-482efcc8ec98\naa5a25b2-19dc-4e94-b00f-a3cf26eb7b99\ned66a69c-76b1-4b81-bd5a-86b73c1065a9\n922d61c2-6536-473a-8ab2-a872a63b1840\n240dd30f-105f-45d4-af19-d0a7eb63b30e\n87bb26cc-cec8-43b7-810b-e6e4379d6cf5\n6e263a29-81b8-4461-82f4-7dcecbeb2e8b\n88641176-0957-4500-a992-d1bf8b7b1152\nc33eea38-0782-4e8d-b0a7-7301c57322f2\n5d338ff0-1914-4737-9dca-0cead0c71e33\n74ac1b13-9abb-4f0e-a034-21dcc3810b1c\n6c400724-92af-4c5c-a3c1-48327198402d\nf3ea9563-0f27-47bf-aeca-11ccd874cd89\n38d1f73b-7bee-4d97-8406-3843bd3bb8ca\nacef35f3-9cde-48b7-81d5-50ca88052d6b\n5a98f458-76e1-463a-becb-d8a004ec813c\n1af39842-bd04-4fd1-8511-cd4ad2a040fb\n6e1c0691-f527-49df-8d8f-9c3dd24e19ec\n8cfe4826-d28b-4b07-8e6b-b22528226143\n5c5629d0-79f4-41b1-a414-1fcb242ecd92\n321a7803-6ca5-4932-90a3-2f036e9da629\na07853d0-2839-4f64-bba9-8b7704f1358a\n874c3d76-7535-47d7-8f91-133aaa966ba7\n5d4b8940-4acc-4d24-b5c6-cf3509315ee0\nc3b41a51-3c5c-40f5-8a53-d2dbb1ffd58d\n78a70823-0abb-4758-bd09-23215137da48\nafba5743-d5dd-4096-9e23-1c9c02ea4485\n7249bc65-c6de-4905-a536-6f94e4bacbff\n0bd3a2c4-c28d-42e8-bb6a-4566fe36d723\n4ecf549a-512b-48c5-bd0f-584f8d6d5fb6\n7ec9cec8-e418-48f6-908a-cf79cca5bcac\nc33d7bf9-de07-4011-8526-34ed714d381d\n8942d09c-cec4-4dc6-b162-3a6b4ed070cc\n822e9f27-d91f-4d8c-b65d-c46a5179cc22\nea6d659b-8fe2-47c3-9175-c63a20334fff\n1d68592c-20d8-44c3-8b44-08a3bae61215\n2aacf4e3-9972-4894-bd35-1c40ff8688fe\n0a4e0326-40fa-4ec4-9691-3389936edc1c\n1895af70-a7e0-4f4e-996d-b3a871866fe7\n5bb0fd1b-db76-4150-858f-86ad662625aa\n48f386d3-5d08-41fc-8b6d-ba8270faa00b\n1d8a6458-77cb-4808-a106-f1c527b8f505\n4a6388dd-4772-4eab-87f5-425ab8268e82\n02b99a85-fdc4-4bba-90c2-598796562cea\ne8d3a87b-58fb-4a43-8d35-c1347a671711\n10a6f1ee-fcc7-41dd-90cd-25a732a9e497\n3d7ee418-a29c-4918-9d13-572fc9bb4b48\ncb488f0b-de08-4618-8366-e58e045c1217\nfb39dd74-745f-4e23-85ca-26296bb3e87e\ne59e951f-690c-46d2-bdaf-7da8f2135814\nbc91c9dc-1a27-4250-b6b7-a2d53d8d8ef1\n1e82e551-99e8-402a-9553-4ce124a343c6\na38380a5-20a1-4c32-9a51-b3226fbd6016\n78c57dce-110e-4eb7-bed8-ebb7899231ed\ne4c81cad-1553-45a8-9568-501ca17bbc80\n41f1fd96-37ee-4698-9726-484e46abb8de\n1c3acbf8-77d4-4f44-a562-74228c2b06a9\n2d1e7c4c-1b8a-44d3-a444-687f27c14179\n114ba388-9fb6-44a0-bd82-7669c081eff7\n38a3bb3c-034d-42e7-9e3c-45688439515a\nb9bb23c1-bb39-4c1d-a84b-57ad0c671d44\nd499da77-5327-49cf-9194-9dd804cf11aa\ne1c7a435-79e8-4923-a6a7-8c9e8fac0420\na1760219-5670-4988-a733-23e0c3d17d52\n0b8a177a-9fb7-483b-ac91-cec5c6f48a83\n784aa6a3-2f62-4aee-aa5b-240384188f62\nd2dfbed6-dde2-451c-80a8-f5a20ed3dd18\n730a9ea0-da89-42e1-a1e3-2d7dc9751da8\ndc583989-137d-4b43-a508-70c890d7a48c\ndeac61be-fa13-4b6f-8e21-5eea0e273387\n09a4c275-1ccb-49db-ad54-622ccb1cef5d\n7e31dce4-53ff-49cf-ad67-fa73383d0a09\n0bb087eb-698a-4db4-a36d-79cf97b63fc5\ndcb33735-cff7-44d6-a97c-d951d5c366ca\nb1748a46-46e2-4321-93ee-b24ea310e435\n26b2d3f8-553b-4fe1-ba03-c0138f9c0fc7\nf0784594-1874-4b30-ab3a-e2228eabe3fb\n34a359fe-2dfa-4cfb-ad7f-b240424dc37f\nab74e1e6-0e21-4f32-ae58-b763acb8d360\nc9641d9e-553e-4077-a3a4-0ea84e05421c\nfea23a3f-4547-4338-b624-c682fd5dec88\n024b69d0-4b35-406b-b35a-8a0827cae720\ne5efd8a8-ac01-46c1-8827-40f48fb0569e\n08cf0c49-a47f-40ca-8064-f62ffd0ce1fd\ne5f89113-2d04-4486-a17e-4346120336ba\nba1e9e45-a290-4579-af71-5edd6b637b7d\n389a69cc-48e8-4fa1-9c3b-f571c8830115\nbe92170c-58d0-4333-9a39-dbd5b8778f0b\nd37c55f9-eb6b-4aea-8615-b36eddca7c48\ne3ac5231-ca26-4c97-86cd-13e5dd3da43e\n6fbe728a-1ee9-4f83-aff7-dad51a2f22c9\nc52d09cc-2964-4375-8c11-5868f9f0c2cc\n27643efa-26ae-4799-bf74-69f7071f2308\n69f2d73b-298b-4c3b-927d-a23b982e98eb\ncb1f7d11-51a5-4a38-be19-c650dfcee73f\n838a4b2d-0770-4c35-b50b-cc29684f9f99\ne6bf2598-d3a9-4519-92da-d8f5b22fb495\nb879cf77-eb10-4202-8439-3092c02bb2e5\n664b5852-07e2-4d1f-a639-f5639f145b97\n78a35853-4611-4828-9167-9e5b7d329f00\n5b7bef58-a950-4ea9-8827-b77f19cbd340\n38e07f66-cb84-4060-870d-91d37b699f04\nbcd3816f-8510-4654-8f92-a7a1eed8ebaf\n73bfbe95-7f12-449b-a29b-c4f1f673f2d4\n142de725-c8a7-427a-97ad-e333ad2eef95\n828d9448-8e27-479b-a660-da02287caf60\nb7150429-762c-4706-be32-7b69b986e2bf\nef38b0a7-6916-449e-a086-771cb9166a43\n029fc2e0-9b27-44f1-a262-0d18ef49790d\na8154ec5-155a-4f31-8e1a-ffeea5d3d9b4\n86d79016-72a9-4894-bbf7-f6ef41374055\nd0a356a1-0c52-46af-b218-b73a54d8d620\n1c545a27-61cf-4ea6-80b8-ba898db0b07a\nfff604c8-13e9-46c2-b9ad-6fb60f1938c3\n573b4d56-b52b-4b05-a1f9-5dabb4ddb801\n4a9b7e93-b8af-48ce-96f1-4359afd2acb8\ne2b19550-302c-44af-9b96-95f06ca1bf61\nb5ac7c97-bcbc-453c-8784-fba53199a8a9\ndff93bc7-1f65-4fe9-b31f-d86945e47545\nfdfca027-0a3c-431d-932e-25bfb6a77bfa\n32a88476-50eb-44f3-8ab5-570e1ba43861\n27d688c3-bbb1-4b27-836c-e9f7dd65b66e\na329f7f9-fff8-48bd-98d6-a6ba5463c8a9\n2b625dcf-4f32-4116-8739-2e0974e85c97\nff96da49-2897-45af-b6af-542517ea3158\n8d2357e7-2f59-4569-909c-a060695ff7a3\n51811a4b-ad64-49df-8e64-efbbc0c43cc7\nd7bbe5d4-da13-4b9c-be4e-7ba1323379b4\na58d8f43-9900-4664-847b-5659b6fa4003\n6326af0a-4ec8-4adc-a55f-b016dc0c5179\n82af9ae2-8b09-4c7a-94aa-70eb4af9a850\n270d7f22-7fa0-46b6-b604-fd1b5b056b2e\nba6bf9f1-57ca-4925-b4cf-49cdf0c3cdff\n50216358-20ad-4a55-8a1d-6b5aa724087b\n752dfd5e-0b3c-47df-a85b-dd07a5817199\n93c4e1c1-8201-4528-9209-0d686dafe979\n82dd4d7e-2524-46d9-b935-bbd02f536a36\na8980a24-983e-4019-9fff-4ce1e6b93b58\nd38f1c54-ed0a-4918-92f8-2e543fe42187\nd6cd89f4-b967-47cf-96ba-14ef3b0b4cf9\n4cc8524e-7aa2-4d4f-85ca-3f8dab5ac043\n2b1cde6b-f7ab-4380-9300-c2f1de507c75\n08e170e5-4ed6-45f8-8a52-4b26377b40bf\nb6c64ea6-9a9a-496c-a3e7-b906f9ac81fc\n75b66776-7350-4516-8928-b5cf3de245bd\n071a976e-d22d-4e40-9379-5291e4dae190\n2b1b27a0-6100-4fc8-8ec6-3a010b1cf083\n051190d0-bc20-44e2-bb7f-f9cd4597555d\n93faae18-ccec-4582-8abc-d812b77e94ba\n6c9b9b7b-e33c-4063-9f66-3d60faa3e1d7\n19296b62-a031-4b1e-bf42-900a87cebb17\n09499251-2726-4163-9c0f-37075bf31bf9\nfa52f3e2-9445-485e-ab85-7ee4beb02114\n486d6655-0888-43b2-a1ab-eaae9d41ba15\nce94fd0e-f94a-43ba-9d16-0991590e6bcc\nc819d85e-21b3-4dc9-8a4b-e9db46d81d67\n05c4fa25-4010-4a68-bca0-369c3d5043ee\n011c3d96-6597-4457-9ccb-bb4e719c6020\ncba78749-399c-4db1-b84c-e1262549451b\n7061c6c8-171f-47d6-97f5-bd43b5751e69\ne76458c3-28c0-4e8c-b0f1-9a6104feda26\n7cb1995d-a131-4540-b3a2-f55d5350af2d\n7b6e6533-eeff-4869-9c1f-83a203d819f2\nd6e30686-a6b5-4fb7-aab8-e45b222800f6\na0edc126-b646-439f-865d-07d0361d1c7d\nf9ef994e-964f-47ba-bc73-77a0f471819c\nba9d5c16-2405-47ff-a9c2-77d704a8d1e7\n7949b5ea-9151-45a0-b3b0-e7330612c26e\nb1d2a21f-7582-43b8-bdd3-a45ddf5a3f3e\n27e2302a-ca26-4dc4-b28a-e0d9d154e427\n33719c62-faa8-4e4c-ab84-61aab837b704\n0a980e86-f50c-4049-b85c-f0fc77bf733c\n9bf1089f-77fc-48e7-92f9-633261b468c4\n6d058ff4-16b9-4f3b-ab7d-aff4f04542c6\n328a13b9-eb1b-4c2b-8899-d146130fe66c\n4ce1b1c6-a934-47fd-9e36-881d61c41129\n79e8815f-395c-4b6c-b518-7ad74a77d523\n9359e6ca-9f47-4ded-a14a-22c26e3f2a09\n057856b7-25db-419f-8582-c66f3efb0edd\n9814180c-6b3d-43f1-b5cc-e94a182ab9ca\na37157aa-da8f-4b69-b51f-5c1c0a78fe37\n841a1ab7-5ff1-43d2-ab4e-6a13e67e2278\nae4a1b91-c4b6-4901-b862-be5da6058504\n3f264e89-fcc4-4a9c-ac4f-7b1ce1d5df6e\n3470f02b-22fa-4918-aaf4-be78500de254\nc44fa3a6-4587-4f6a-bb11-a4aefbf274c0\nbe905aba-36a2-4de9-9b19-50f9caec1720\n6745f943-92b1-4e78-9527-53d8fbdcac40\nd7e20e07-4df8-465b-bea4-a04f6cd24a9e\nfbd26544-5d18-4faa-945d-0f686e63ada8\n0cc548f6-8ff1-4a24-ae5e-0e2d4f68b5b8\n6ced10cd-156a-4301-9af2-c34113815e97\n5579180a-8ff4-481a-b718-25706ceea39e\n4d6a74d3-72bd-4739-9247-7f595136285e\n6cf3ec9e-f0fa-4ecd-9ba2-5f188e019bbe\n35eef5a4-bca4-40c8-89eb-57b0802892d8\nf2939856-2dff-4795-bf0d-26e156042ce8\n9e3c04d2-48b2-4c6c-a87c-24c661446f70\nfb2a4228-0fa7-451b-97b9-8b981175b14a\n683690f7-4cea-4689-8a8f-c1b18125e7a0\nb7d24cac-e4ea-4244-a590-26a70578cc55\n5d32a2a8-45ea-4668-984f-a8a71b4aae9c\nc1fedb58-3bc7-49a3-8007-c8c6e61074a4\nb9ad2b5c-cb9b-47ef-be26-caf86b775cde\n2c3f67ca-f760-4ec7-8b42-7b7e59c37ce9\n2009db69-a339-437c-bad7-041355b07498\ne38c12ad-6b95-4d69-8e57-f98780bf5f7d\nf33009a1-fd29-42bd-aeda-655c9b169f73\n7ad82c7a-9b94-4025-9901-da4b083f1b36\n52425f48-7033-4970-b3c4-45d95cfb8dfc\n7f84dc9f-4dc9-48ca-aff8-d37c8a17e042\nfcfb104f-65ce-4169-85b9-daa1fe82a9c3\nb18bc59a-342a-48be-a61c-3adde3b84565\n7ba8a4f3-162e-47c6-8b26-2fca6f4cf9b6\nf809181b-ac4b-476e-bee8-4c75c5a5b2b7\n4fb7e384-6003-43c6-a50f-1a0de4283bd0\n6ac5a4fb-8e94-4664-8b6c-7ce43112bae7\n847c3c67-3b80-4b37-a68d-80900b8aef9b\n77c0855e-fadf-4052-9fb1-f1b8c1c8cc2d\n5a9eb882-c046-4fbb-8419-7475a2f20c61\nfc2fd88f-e9d8-4d26-bb1d-91be58ca2814\ne047afe1-f51e-4fbf-bc1f-d3f214634eca\n529428c2-9ff8-42c0-a5f5-e386e6e0565e\nda3c9c9b-77d1-470d-a628-3f945f2394bb\n24ec30dc-f010-4e19-97f0-8aa82656e707\nff8cd5ea-206b-47eb-bc97-b93cbfce105f\n4669962a-7edb-4cea-a911-6cc63b2b45b4\n9f172c2e-18bd-4365-999f-dbf0f4f7722a\n3647369a-44c1-47d4-a0c1-bcbe2af7e3be\n4e79f572-2024-4d4d-a86a-4dad51a5961d\n9b209e61-bfa8-4ae1-9c0c-7b3e71ba094b\n56d27398-438e-4699-ae9e-1b914de4a15e\n8b8d3462-1220-4812-892f-9fbb9bfaa241\nb5a6ed9c-3f25-4c23-9977-b261d3fdac2c\n6b2c1ec7-821b-4cc4-a7fb-158ef681bf93\n7522cb53-16fb-4a2a-8e79-809ef370bfc9\n391a43ac-2cc7-4b7d-a6c9-a584f044f747\n2f4ad682-8a8b-4f27-a0cf-26eb4dcc1668\nc1d18b8d-5d1a-4ab4-82c7-186d37647ce2\n7e914b22-e953-42c2-8ed7-78b54b46430f\n9bed089f-af0b-47b4-ad08-a4e3fb01f459\n29e30c02-b512-40b4-89d3-1ed9a56e66df\nabacf739-4587-4855-b789-49935444b486\n8670fd37-384b-4918-8e1b-19a63fc8c44f\ndd6a3588-e8b9-4e23-9b80-67b31319a31a\n5af31854-e06b-430a-af30-d4f53816cd65\na4036e4b-6602-4151-bc4d-d8e36933a1ff\n0d3136a2-f513-40f7-b974-1265215c53ed\n63bba4fb-7543-463d-8706-7fe022e3505b\n1fe9a08e-c479-4d35-835b-e14c06cf9ed8\n0de38eca-6f6c-4de1-a154-f5c5888ba8bb\n77c4fa1d-e921-4512-8a26-19e1daee352e\n809ce040-4087-4e7a-a02f-7cb439846cdc\nd8043f59-3770-48bd-a915-98102679a063\n7f07bab7-76ef-41c6-92d5-4100f2dd068a\n29bf7b15-1420-42a2-b2d0-86cdc9024810\n9e54dda5-ecfd-4227-b676-22120d13fbd8\n66483cea-16cc-41a4-bc99-bc6634866457\n66e822a6-50b2-4eb3-b86f-83176ede50fd\ncd1b5d9b-3892-4ee3-a6d1-6b0fb8a5273d\nd2583ab1-e48f-4186-8ec1-177fc42f87e8\n25baff2a-58ca-477e-9df6-114be56782a4\n1a4f2565-b3c5-4658-b26d-a0076f8f93f1\n69aeee88-0d07-4fed-b245-daffc5d2c062\n5bb1fc82-6c81-40d2-bcd0-56a3d2127233\ndbc8a349-6c73-4d49-8767-ed2518e842fd\n83320f16-d344-419c-bb54-3dab2e978b61\n6dfb0e24-76f2-4699-94e4-fbfe3a1f88de\n8bf431a9-66ea-438c-99f7-ebb6c98f7e3f\n0617bb58-8bbe-4d2c-be0c-6c23595feb70\n7aba448b-00da-41f0-a0ca-1d75e0545739\n0ff37610-2424-48dd-937d-258ba026030d\n126126c5-4c79-4077-ac38-da40c8ad315b\n42b4a491-c3f2-4a8a-b9a6-55d1a0ad3d83\n31b2ca81-c92e-45f5-8ee0-f168516a84fb\n15313453-7862-4143-8136-018e6d186306\n1e81c45e-d1b8-4ddd-800e-e840ba49d41d\n37191462-4f62-451f-8d2f-10cb78991989\n878b3fbf-ed16-40e3-bc0a-43cc51ebc089\ncc325457-dd80-4930-9980-bee9892a53d3\n4727faf5-cf5d-465d-83db-152b2d46cfd7\n93ed3b4d-c2da-4057-955d-aa5f190e6854\ne0c92aac-27fe-4a90-b88b-c7b3492cb434\n189e6091-75de-44ee-a5f4-8db5ab838c82\n608e633e-22b2-4e45-adc8-6c8ed8c3ad15\nae6ccc5f-cc1d-49dd-abeb-b20fb51c2833\n12c5d6f1-82ae-4fef-85d7-962041eeb8bd\n81b3bf97-e024-4a44-94fe-b418d4464a05\n1dedc71a-af94-4737-aa7c-838099a11923\nc1a7eeea-1169-4e64-bf3c-8abab6436787\n0fe89faf-8bee-44bd-ab98-b20d744e9ba6\n3a67e8d2-f27b-42e0-a897-85e5bdf91fa8\nf4f85404-91eb-4855-83ec-d526ca4a3622\nd361196c-f44b-4376-98f8-e93d8817c403\n09342a5d-b458-49e1-befe-ef731d88cf88\n88061ba5-86f1-4ccb-9ec4-bf7d285f3d32\nb4e7750f-345b-440b-8616-d5f5185f2f3f\n6cfe9772-e27f-4882-a303-3941f3b955fe\n596035cb-1c84-4843-9416-b9bfd66a9ab3\n01addd1a-2217-40cb-8a31-dbb06fe3548b\n36df8604-8480-4a4d-a7cd-2b4ba86d10a1\n5d514b54-64b4-48ae-86b6-00043757ee94\na0e41396-81c4-4252-8688-0bf868dd6cf1\n51c71ea0-032a-4ca9-b9f7-b64720a83210\n17f1cfc3-e8de-45c8-87d1-40d9c483557a\n6d97d8c9-45ca-43ee-8871-656550c0da64\nf6f5ab68-eb76-4c17-abff-a31969348116\n77da323d-971f-49a2-a6b9-a7637bf64a7d\n2a8ab20f-6c8a-41fa-a6d8-7d896c1b4bdd\n9a4b2c8a-ed3c-4cd3-b6f9-7647354d997f\n82f9998b-3ecc-48be-972b-3150a7ce0f72\n9b102d03-aaee-4d1e-a7fe-851dd0ffa80a\n5da62caa-ce79-4162-ac8a-20e353b733ec\nf52ee199-7729-4942-9f1d-72c3281e6b6b\nb0e3f04d-96a6-4dd7-9ec0-1db01d785333\n87ab2b69-8f37-452e-a0ba-5a49f594aab3\n5daa45ef-4354-4dcd-9c63-2fa1d086fcc0\n789a4588-e0da-4fd8-8d9c-8f5c330cb683\n20c33a55-e723-4d65-b09e-337654891e92\n2bb416a4-99fb-4c21-90ed-d030e3fbdd0e\n96f79edf-141b-487f-8419-52a5677b528b\n1089af40-b8d7-42f8-8d2a-709bf097832d\ne63b77d3-9547-4b84-ae6a-2a97fc2be45d\ne6960db5-c9b3-4dc4-9101-b842ab60159a\n3a12f221-bdfa-40c1-a160-b2e7d3a6f077\n6f6dd104-b5da-4ed8-9540-d8c142b948c4\nb1d12fdc-9a23-4750-af6e-8c212f6b1b40\n3d428a14-ae25-4318-88b4-288b75d3eea7\n61cdde89-5f9a-47c5-9774-4af3c8fe3c53\ncee0d8fc-1b46-42ad-8712-d968cdefddb0\nef27d58b-6a91-4ef0-8bd8-68386fb7e4ec\n679b2ef1-d3d4-4db2-9b31-f4bc564597c6\n23d3f85d-a439-43b7-8f06-0808086d2b12\nc071e6c2-0cf6-4da6-861e-5a75c92868d0\n7eebec78-aea5-46c0-a3b1-f366fa4055f3\n900766c8-cf24-4a3d-b04e-5d2af8219464\nfbc84038-6df5-4812-980e-9534c6b16177\n323c7153-15b8-4644-a3e0-854a6c060ebd\n7331a01a-3519-4f9d-9d05-758e8c08f312\n55c561e8-2b6c-4a43-ab53-a7a1fe6909be\n7aca4253-4a6f-4d70-8068-ae5269d92e23\n13fde344-2877-43c3-8e0f-44c3bfe998fb\nf24c2a45-bcd2-463b-8b7e-e8fc5e2115d6\n94b5e2e6-47c2-411c-bb70-0e6cf85f46e9\n3c7659bc-bc2b-47e9-88a3-082cbe725fc1\nfdfb427f-b129-4beb-b9d4-5e2f93a75090\n034f895d-a7b6-4ced-9e4d-f763b8bf7138\n6614a2ef-e7c3-4c50-a62b-54216f6c1ab2\ne39f87ad-7270-4a25-88da-d120fa8ba2c6\n8bbcf0c4-dbd1-4eec-b064-f470092552a0\n91a7485a-b74f-446a-8b47-03b1f75f09cb\n97fefeba-bf3c-4d09-a821-680b12137d6e\nd480730b-8708-41af-a229-760d80bf5a5e\n4105715a-99ab-4510-897a-1d6792414cde\nc3545dc4-784c-44da-9872-f34f2320536b\n4b8654ae-20e5-4e56-9a65-ecc1308058bf\n0674827a-5e58-4995-a7bf-b2307158de06\n45bba254-7a9b-4f10-8021-dce84239e03b\n15dce73f-8a2a-4d3d-9dea-964e6a8cffb3\n0cd3e439-062c-4bc8-8887-0cb86ff6b15d\n9d48f6d5-aa81-41ae-9112-9b227108b3cc\nd1e13b35-bbc1-4461-bc80-89a908000977\n2c662f2d-c3db-4d8b-a386-5fd5673d28dc\n11b75f68-0bc8-47f0-a87c-0895ddc151f5\n5914dd02-9088-4e1b-8f14-cae11bd547c1\nf67a818f-1796-495b-88b0-fff9e9e3a2cc\n58d1da2b-c062-4041-bd67-9673f2ffe3c0\ncf098567-7236-45a1-b5aa-3cb4434d8c22\n3da039be-9379-4b8f-ae15-3a914a95e90a\n98d75495-873f-487b-a1e3-408f8a1d7bc4\n2591f0cf-9921-4a14-8f72-72a2d5be492c\nc682a241-4c1d-461b-a6b3-43a0d4d9f2a0\n8a024035-1acb-468c-9a9b-a265628a306e\n20f60ab6-c3af-446d-b60b-5d343ca64936\n8d0aff38-956a-4c0d-b233-06c1f4c63df0\n3232a4dd-a0ef-4eb6-b7f1-4f50fa22f1a9\nb0359142-463b-49d9-8a86-089f86562fa0\n532e7329-98f7-4451-8480-1c72badcc26c\nc4535142-3926-4182-8d55-d54071108ead\nab5706f8-098a-4979-9f5e-3ea922f411a1\n13485fae-7fd7-4a99-8298-e49007219165\n36c3955b-46f0-4c3d-a404-dfafc676f00e\n47a5bf70-a667-4ec8-a470-133aea1ca08c\n18002b6a-c1ef-4ca0-969d-fcd03dc0cd32\n45dba7b5-01cd-4366-ae85-a541cea52563\n08498da6-ba07-4cf7-bf4a-8cec773882e1\n205e82dd-30e6-49e1-98c6-ec9f5c4f0c35\nc9b1d1d6-b6ae-4001-923c-0f6c2b0633c2\nc9afda75-4fba-4358-b11e-c5bc4c071944\nffd18436-8f69-43cd-8b39-0e76585af3cb\nefb58159-01dc-4b97-8384-e2c1285e558f\n5890d0ae-2417-40c3-8df6-c848bf5e2690\n4b317bbc-268e-44e5-bd71-e84806349668\n6eca9866-efc0-4d9a-ab2f-33da28f2ba65\n4e83d0a4-43bd-4a94-8237-7fe66a956766\nef2286e7-a6a0-435a-a773-b1e690f4fc0c\ne3c3d013-059d-43d5-9db2-8f999180f367\n73615149-af52-47b9-a10c-33ad16ed05df\ne5494258-4471-47c3-8b94-72228fc5efd2\n44df5a9c-8049-4a51-a55e-de77e540abc4\nd0c37ffc-2ea3-49ca-aa62-2873ab32f859\n2b785c24-c77b-473a-b228-25ca5725be12\n2e18897a-4c0b-4dca-8fce-5c3c3ede9375\naa9d86f3-1fd1-4667-99a1-d2bac9fc280c\n9ae0357e-fae9-4b6f-9118-dc6466be7188\na303a874-cda0-41e5-b327-0e9e0ab52529\ne6f54e6b-22ea-4f17-8b01-20e796805065\n59106f43-d86a-4c8c-a6a8-24635da02617\n67fe8043-fea3-4022-94c2-7425474921fa\na7df875a-7789-4ebd-91fe-1c1d7b23f335\n0003c9ac-85a9-45ec-8804-962acc1b71e6\n2fedd9bb-4f89-4476-be08-ecfdb71e0220\n54be2a4e-bb96-494c-81d8-4d8953b6d56c\n624be748-f10e-45b3-b9b1-507bd7d10bbb\n660d3c29-4c53-40e6-b1e2-af76c28ae229\n99e6f614-7625-457a-9e89-2e335bc9cd5a\n08d9c0b6-1c4b-4547-a86e-b4f638787164\n8cdb9adb-5830-44fd-9bb1-adfa2fb9aed6\nb1e0e606-e597-4fae-b220-ba049bfa84fe\n6a7e1561-6841-41c1-bc6a-6dda264ed815\n932b00fd-812d-4262-9b1d-6659cc0d6a27\n35011859-fead-4b86-b8d4-5c35fb9bca8b\n4bf109ce-0ff3-49fd-ad68-0bae547e6728\n1079acc6-01df-4038-a6b7-52636002f8ae\n6d58d4dd-7435-4992-a63b-4d7ef5943e00\nb276f05a-e753-44b7-924e-996c2df4de85\nfb8d0bc4-abb9-4f7f-8151-f61b22080a93\nd39b931b-533f-4685-812b-3313e93911b0\n1fad5907-d367-4809-9b1e-e16707c0182d\n828dd061-99ba-4851-b9e7-df3b020efa3a\nb8bf1508-d84e-4d53-b842-4f6251946c99\n79e9d00d-18d7-4ddb-b6d0-0759afd18e5a\n72051ab1-36bb-4de4-85f7-07628bf1ceb8\neb9b0ccc-af1c-4c4c-a451-1ca3b961d649\nf1cfe6f9-658b-4125-a85d-57e7eb452259\nc066f175-9906-45dc-a95e-a5f92f62108e\n54e5c41e-415c-44ea-bab6-f53a839ca39d\n88d67837-e9a9-4236-9e40-b60205e557de\n0dc23d23-67db-408a-81ec-7e1858a6fc31\na7dc32c1-3717-4d2f-b748-65cd480ace8e\nbb4a17df-de3b-46d7-877f-a38401ecb96c\ne5fc7f98-891e-4975-ae04-f3bac01ffdc4\nbf203e87-3b80-44cc-9181-de4a22afffe6\n69a8f055-adcd-43df-995e-d070666b9ed6\n7ab1518c-36d0-4713-b267-b6cde4edcfe7\nd0a73621-346b-422a-bdb5-3e1d061a484a\ne3c11c9f-27a4-4761-9523-c2a57b94a017\n7683932b-d87e-4908-bc3a-90a8d30ba673\n3780f3d3-a028-4d9c-b95f-d8bac02f5ec9\n0efde009-da98-4aba-958c-14aeb3512a86\n543930c3-81aa-431d-b804-de72dfcf8e54\nc12557a4-87c9-4c78-9598-58155d5c9e78\na67d7be0-7ee2-46a4-96f9-3e9de68cabf3\n4ca86f18-8337-449f-b87f-867ba4986712\nd8916a85-b6b6-4d72-a302-df2e096a33ec\n067f1ec2-c96c-4544-8b8f-51e0e1a3bcf4\n6769e485-5ced-4d0e-8f79-13ee0c8c6f1c\n7ee090f6-c7c3-4891-a2bc-4956d24a34be\nc3058ee6-8053-4c8c-8135-e3c084a1c652\naa7b230d-bd56-43d2-94c9-a053a6176871\naf434511-b8db-4efa-9a6a-5632358602a0\n6b31ccaf-32bd-49eb-8ccb-beccfedb79e9\n877f99dc-2d68-4802-8120-b9c18fbcff2e\n71a72805-e41f-47d7-ac0a-98a71c8e2f0f\n30a18488-1733-461a-a7fb-de48e14211e1\nefb52271-e23f-4b42-b11f-6eb15d5999ed\nc55f7875-8a0d-46c1-914c-c25b31ca6f41\n1fdb3982-5228-4eac-95a7-2cae986f6434\na7ae0d15-c1b4-486d-9e46-0f73efbb93c1\nff103375-0d99-4d7a-bdfe-14a8f968d4d4\n8f3ad231-a6da-4e0d-a238-a6220f12be64\nebb542d7-8010-4b0b-b298-322c405e3179\nad9106f3-e934-4cbc-8cf9-111d28d0b99d\naf82307e-4082-4e9f-9ea6-f9c0a8c460df\n26b711f5-238e-4406-80ef-2ee51e25d81d\nccb83657-28f5-45ed-beee-c23aa90bfd47\n358a940a-6ad8-4eeb-a851-9c70618da73a\n18b1e7d8-5a4f-4713-a0bd-f52d654c033d\n274dda7f-d0f5-465c-a0dd-f378d3d46041\nedfe43c8-98a3-42cc-a948-695fd65d2b0a\na53beec0-f358-45ee-b65f-089ccf6bdf29\n9d3d466f-8024-46cd-95f0-c09e39b2573d\nd482eaff-9f3c-4216-81c0-c7d0b54b0d9c\n4fe49411-623a-41c7-96ce-e50ff777d51d\nde71fbec-db68-47e0-8c67-d3b868cc7120\ncf1601e5-af87-413a-a14f-300714f2045c\n7dafc396-3354-4437-a64b-ff8721702f9c\n7aea37e4-38c2-46fe-8e99-c70f10c25ee6\ne9bdaa57-431d-4d1b-bce7-0dcf051680fd\n7c176064-394d-4181-8adf-28439de6fe2a\n8610fc07-aa8c-438c-bca7-498069b0a423\n705395c1-0311-4aa7-bbb5-72f6c4dd644f\ne0265d59-ffb0-49d9-bae4-4b18404d1ef6\n5e425406-7ea6-4f07-b88d-f658983616be\n7e458d3a-4c53-4d56-a14b-8ae7ad349c0f\n17586399-52c5-46ab-97c9-7434de1261e3\ndeca6e99-9c53-4dc3-bed4-2b860ee78a4e\n0b2f74a1-8683-4686-bd74-adcf80231ea4\n27996ad9-f476-48a9-952b-c7014f9ea95f\nb47248bf-4839-4666-ab7d-22015eb9ce9c\nc9597fa8-4944-4d4a-9ca5-9a73114b0df6\naebd6157-18ef-4617-981f-91217ae759c4\nb4149c33-198b-45f8-aad9-a49a795645cf\n442090e4-1769-45c7-b3d3-891af3018e63\n81c8864c-63d7-453c-beda-ffbb96fa47e5\nbd762d9e-0c8d-4549-9b40-ca4e369d7fa7\n99dd9987-d38d-4619-8240-d32e32f9d23a\n1a78e42a-b71e-4943-961c-a2b2450c3f62\nf4f2fae9-cd8f-4a62-acf6-ad1c9cc20057\nd7ae3431-b24c-410a-ab77-c35a11f34428\n0dd8e207-1e9c-461e-b393-d0a86e2741c4\n380ab413-4abd-4095-bde8-38ac14db87b9\nf1b50951-e356-491d-99c3-4d7bd2c766a4\n0b7059fc-eb7a-41e7-8bc7-1768138de3b6\n0c32bad2-5b57-47c7-a17e-57986b6410e4\n3325b80d-b427-47b1-9949-27ce044112b8\ndaed7372-2984-4b86-8f29-e5fa7890f961\nfb001c45-9e72-4d7e-8b6d-4fd0abd58092\nbdad9d03-c358-425c-b6d3-fcf588361bf0\n8542554f-5267-4d95-b263-0c3377ac85fc\ne2ec5d92-ae7a-4402-8143-8eade71985e5\nea9b309b-3c9b-4491-92d4-8ba05903a073\n29c6ff64-9dcc-4fe6-a3a6-3bfba373c05f\nad98a61f-fac2-4acb-8d6f-ff969d067ce2\n903ffb53-2345-43c8-b385-827b8c4f1970\n0575fe6d-19ca-4e40-862b-a94337179e5a\n427a56d4-0c3f-471b-b91e-2e84516f4675\nd24a970f-295e-4790-b318-10654e5974f2\n7421c611-6ae8-43c1-b70e-7e3f264ebbd1\ne9601e0d-c31c-48e9-8a34-34c4dc63de95\nedb7b65d-e138-4a60-b780-557cd482470a\n865a300f-afe6-4334-8872-dcf4c3bfbc87\n35272e27-0bdc-44ab-8c4c-78b4d71a69a3\n69e37543-e122-496d-b60d-314ace4bae9e\nc52e2d79-091b-4227-9305-04511e0ada1a\nfae4ebe3-4ca6-4746-a843-42ce87eab10c\nc3147a58-9beb-454d-86cc-912e2f91af87\n3cd901d3-1530-4ea6-b128-39dbb7ab96ff\nee3c5203-c15f-4bb3-a7ea-92725a2824d8\n391c8e7d-99e2-48fb-9891-a03d6404ba72\n3df62bb8-8351-424c-8f8d-00e17f50fed6\n79dc1d43-d50d-4565-b621-d7d2a1d55a5b\n17aed4f4-485d-4920-8ed8-0f8229a02a58\n8f6ce465-2212-4a86-8521-ae54ab47bbb7\n16cf5407-3234-4665-b65b-ac723b224493\nd7b96823-b6b6-4980-aead-5f3ca652bffd\nb0677bd5-986d-47ea-8be3-b7f09351cb88\n014084bd-0acf-4f25-b313-0f58fcaf1e37\n31d00d78-439e-46fc-b82b-ca54ca93881e\neba8e7f4-3615-40eb-bf36-b43eb71da73b\n6ff606c1-74c1-4af5-a1b9-cc3d58ad94bb\ndaeef692-4481-429d-842c-0d7621941853\nf0666fba-0c45-44ad-930b-231f0ef4e15b\n47b96cc1-bfc9-44d4-a2f8-1def38bf4b81\n49e706fa-f6e8-4295-8141-1661b121e1a4\n71be77ef-03b5-4790-abe6-f7969cccfe2d\n539d1e2d-0a15-47a8-8759-b2c4a24cdf94\nfea3b24c-2204-4e70-8383-c4c19106b8c0\n09ce98e1-8c16-45a8-8512-35784ba19c02\ne4488e42-914a-4614-a770-13393a16c1e5\nb88ffb7f-ed48-4f94-9367-ebaec681864e\n9ad6c22e-efba-4951-9b43-67604d1c45c7\nceb64260-3c20-46a9-9497-df6380f259e8\n11efc8d7-9cb8-4cc5-a365-da7dad321d69\nc1f4c6dc-9c75-4e61-b2cf-ee0b73256769\n055087a5-e3c2-4ba8-87ff-c7bded6ac0d1\nfe3f1977-6247-4fef-ae16-a8ec6e8d0054\n54648a6a-af99-41ba-a043-89cbcb99ba88\nc2dac34a-5189-43bf-9501-637d40ca9eea\n74290396-3c99-4ecf-9e39-a769180ed833\n24a5a6c7-5009-4286-8d4c-5995435a6b5c\n2a91179f-76af-4fb4-99da-91f3fb5df4b7\n7a22ff11-7406-45aa-b417-7cd4937050ea\n21ad96bd-bbff-4a0c-bd99-6ce98df18344\nfa1a330f-559a-4bb7-b4cb-f5efc9ee43f0\nfa57fee7-d45f-441d-a4f3-c70bba80078c\n4840b452-516b-4b8d-9926-ab5dd77704a9\ne8c8c8a7-c728-4293-8a21-07499e25d742\n6339ed12-bfbd-4039-9acf-06eb9e3fcc66\n2a549fdb-035a-4338-9d8d-9f2df99a6a92\n9bfccdaf-553e-41a5-a356-8980eb8958c5\nffd5d773-7a55-48f1-a3f2-4391af58db5f\n1b4b5459-bd42-47c2-a455-8249c69b592d\n9a15f323-7b64-4ac8-b30a-8a3ea6b31857\n1ebe9fbf-e772-4473-beef-789bdd36b13d\ne405f073-ffc8-4153-8ce2-0d383f683729\n1526fd13-2f66-4544-8698-ea1180d091c3\n32ed6523-a266-405c-9592-174104277d20\n28ef28fc-3612-444b-9c31-63d55e731a4d\nd65367fa-b98b-4308-97ce-64b35e9add1d\n1158580e-faa4-46a4-8077-6f47c048d373\nc46d5893-f7a3-4b01-9b97-6879b3ec1229\n195eb482-8dc5-4b70-9f5d-701fd3081245\n9ae79054-cc9a-4846-952a-126f492f01f5\n4061cff2-98e8-4347-9432-b06bff65d6f3\n0e29597e-895f-4fe8-8530-d76964ecf9fe\nf6f756c6-0af2-410f-bd99-9e5d806e0e25\n96e950d8-2880-4fdd-9227-22ef2fe83e31\n35326ed4-ba82-49fe-9931-da0e1bae2659\n730992e9-85a1-4ae9-ac3a-2b6544fd18c7\nc8fc0943-7948-4e31-8119-320f6d9ad08c\nc8069941-3e5b-4eab-bfa0-7b889580b782\nd9d8fead-a5c6-411a-b247-99bf972f329d\n207a349b-7d45-4e6b-b82e-db330fd1714b\nc783923a-25a0-4121-ba6a-e890ffb40563\nb8b74238-0c88-4953-8f21-43d4b68489ae\n1f24f971-8619-48d7-b36b-822a88f57f4e\n41ac8f60-6b46-4e62-a414-04d3d8579b32\nc7b2ee57-e3a9-47dc-8e0c-e9703c5fc5d5\n1b26f09c-a258-467e-8190-6da4c4e442c9\nfb56eaee-2a91-45ff-8a7c-1c1dc23166ef\n193744aa-a35b-4811-b091-e71b93159ec0\n8cda7281-2972-4918-9014-803398c5904d\n7b37128f-7fb7-4b34-ac71-4d5d4425dc04\n2da65090-7127-4b68-8272-ec4932371728\n377319dc-413a-44c5-879a-021199baef54\n3435c471-1667-4641-834f-83a835974404\na2dd82e2-896e-4cb8-b55f-64cc53b4ff53\ncae4b553-58c9-4ef8-84fc-c2c3d7d2ed54\n02fd48e7-e612-46d2-9871-9a4b26c7d705\nca8c32d4-6fd1-42b2-b5bc-fd86bfd0233f\n5a4665c9-33ca-4458-905a-150445ea2040\n73eeee65-39dd-4294-8a7a-ef1ebbf552a5\n7775abee-2c40-4bc2-8c29-ee30bfcb9f83\n88f6de99-e8fa-4b17-887a-0f1dee1d7610\nf8c97a68-2828-4ad2-a829-a5590bae3a50\ne818e0f2-58e1-48fc-b022-a02fb432b195\n3b94d7bd-63f0-497a-a24a-82de1fe2cca5\n676ff4a3-a490-4be4-a6d1-ddea73500fc3\nb65cdbd1-41ac-45e8-93df-47695e657956\n67b5844e-bfe2-48b7-8797-f8060cbe364c\nf4f043ce-0653-4144-b92b-48a93e8d1b8f\ne62c968b-067c-4936-9094-5a1e68c8813b\n4c75198e-f98c-4e23-b3e3-5af3c0e25114\nbb6ad912-f083-463e-884a-8d3ff6ab00f5\n0b136bc6-2366-4232-a88e-508b785e897d\nc3f3863e-e4d8-4cec-98e7-536e207c50a7\naea47544-0e95-4c8d-adfe-9759bda42335\n58e2a17d-50e3-41b1-aa68-e91b54065b48\nda81f42d-d7fe-43e8-98bf-5868462bf381\nc0dee236-1e41-49a4-ad16-d95351da95fd\n6ae28400-0049-4c85-a5d2-ab57001f1171\n92df20c6-ee14-452c-bae5-c1b5826303f1\ne5a407ed-9c46-4306-8475-41bbf588ef12\n7d607da9-c806-42e0-8f16-f0b45948b27d\n82fa6e37-9d43-4bc2-8bbc-2c5308f31f4d\n5109672b-1eb4-4ab0-a6e6-e433ad58278e\n72c1824a-2001-4cc1-91ba-7cf56573e76a\nd2b688a3-5c03-4f50-87ef-264942f49617\nc231bd8a-8fcc-4150-a18d-497f25347823\n0e58edda-cf61-4c85-807a-7f87942eca4d\nbdc37f48-ffad-4034-a579-4dbac2d38be9\n8bab63f2-a572-473d-a7e9-a82e21b51a5e\na30372a3-4126-4a8f-a67a-434a298475df\ne1e32e5c-0314-4a16-a98e-74a719fb25b6\n97f8383d-f0ac-45f8-8394-932e8a9924bb\ne70dab3d-0cb0-490c-8387-aee199c0452f\n06a71fa9-e85d-4d51-961e-379306867037\nb9edb125-63e3-4ffb-a53f-16f7d394f5a8\n69908ef1-02c9-4245-90a9-50bf8ebac44a\n9efde4ce-966b-4b82-afe8-dd0a8638e9f1\n07a0826e-1813-4cd8-a60e-c4db24a21b68\n8e3ec46e-8d49-4ca8-8250-a505e17c2009\n63610736-b629-40c2-91fa-2272cacb0466\n57c420ab-3f54-44e2-952e-68740079f5f3\n46306f8b-4d31-4e3e-ba6a-2f4d7a997a9e\n2e3d8628-12ee-4c28-8266-e8d0eb485f1e\n2ef8be73-43d2-4129-9796-36668dcd9b81\n2e1b88b5-48d9-4c54-a111-5314cd0c0e0e\n5110f271-0bd0-4505-8241-f45ac7c228c9\nce56bac0-8a1c-412e-9f1d-23352891a2c5\naacf12d6-a777-4cea-8332-274b9a599ec0\n6e42aebe-b83e-4769-82a7-cc25a0b517f1\ncf5f77ef-1375-45ee-a4e4-b5dafe61d92d\n6390543f-e20f-4015-8440-80e681c14db8\n19bc8932-36ed-4881-856c-a8bb8abf74f8\n3a7a514c-c192-437d-b01b-c974f1f0f0d3\n4e8f0b27-f478-47cf-b6f5-822095d40cca\n238ff421-3f30-44ea-aabd-3770dee9ba72\n8f6b4e38-7567-40e8-b615-3b5b6f3b77ad\ncbecf49f-501f-45e5-92ca-c8e2ed773334\n468847cc-fdc2-4d9f-a5fb-330a95d30fce\n7d271743-d9d0-462e-9315-4b43ce94c3d3\n33cb866f-04be-46d0-8450-c7c1227ec5aa\n683735d9-e95d-4fa1-b445-a7b26897adaf\n32549038-1eb5-4aee-828e-44e646b51457\n606130de-38a6-4dd3-91f4-31b433a45a5f\nb59b1193-04cc-4657-9c39-0b8115466005\nba5c5310-64ea-430c-8e73-30a2c2dfd332\n987363a8-3e0a-4d7c-a279-5bd657909bfe\n97324324-d979-4234-8424-e82401437249\n1f1cc760-2b43-4dd2-92eb-4b8cf8b0d416\n289a03da-1cda-4963-b61d-b7924af46972\nc917a168-4c26-4931-a391-9297bafd4a03\ndf5b88c9-4629-4729-b584-d2b9ef81832c\n2646dfe8-1bad-42c3-83d6-ff0225e0b49b\n90784449-bcb9-4afc-b143-48753106bdc6\n84485146-a2c4-4180-9ebd-cc3943e42994\n234846ad-1e7a-4a80-b1f6-adce3382da31\n4b09a546-446e-4e37-9f6c-f2978a28a746\nce8e6521-9915-4ba2-a482-ec2b80132846\ncccbc2c3-7d20-430f-b1af-dd76e4d0f86b\nb2a227e8-fcd4-4f66-8e3b-30f7ebf74f8f\n94b6b8c2-81e5-49de-8e82-753bcfe73f91\ndcbc6fbb-1598-4730-9ce6-8830a6bbd921\n514d05eb-3b33-4c0e-8ad1-c03499dc6262\nd147e4b7-b93d-4447-acc7-22a5678a4456\n468aa967-1a8c-47b7-aef6-7af71c8dff1c\n46ea864a-6e06-46c6-b400-6eb52ad82c4e\n66e5bada-b5aa-4651-813f-11dfb27a30c2\n78f7fd45-480e-4669-92c2-cbeaa449d22c\nd3c350e0-c7f3-4f9e-9d54-84c21ffbadf3\n14d76397-43e2-49e3-af90-f6df11e2e6ed\nfe8c691d-7cd6-4b04-ab7b-79f369959f2e\nce51d9c3-fe69-47cf-b512-8e2b38fadc3e\n5582c6b6-13a2-4cac-b07b-7984d673c1e0\n8107f386-3018-4412-8977-bd5404e2fd61\n327e2381-16b9-4281-b007-555afafeacb9\n34de7d5b-e5ca-4cb2-b91d-b5ec7aaea900\n0ff0f32e-99e7-4edf-89ca-4e2ddc80169f\ndc40f768-14d6-48c9-9519-a8a8965b99ca\na31bc422-2e82-455f-bf53-73ee0af1c711\naa57761d-2adb-41ce-bb4d-4d8893ce67f8\nf36ae739-210d-4981-a604-ece693ead64b\n84c48b89-6b99-47bc-ab38-bab12be892ce\n653b4dcc-1c8a-4e1a-b449-776deb2fbd5c\n194249ee-0b1e-47be-a9be-64bd6d46b862\n72ed0ac4-a454-4474-b21f-248d58359dc9\nf7e4edd4-55f1-4575-bd3e-db114e19acff\n28ae25d6-09e7-4350-a0fc-555f618155cf\n864b340f-eb5f-44e7-a48e-b87b749bb204\n269d1123-03f8-4472-9768-b331e87df21a\nb67ebf5e-a473-41b4-8c49-d23fd31b0b88\n48f61e7f-43a7-4205-aca0-6946b341adfd\nbeb56642-6ee9-435c-9782-00c7aa45e918\n22fb5209-bc29-4944-ac91-df8156235341\n8e60a6ef-32f7-4533-aac2-1283b00ae7a1\nf4c8804d-0930-43d4-98fc-ecb8ddea74e2\n26f167e2-7583-4117-80f7-121458c536c3\n3a97c2b3-6072-446e-86c4-c67b53071fce\nd27cbefe-8a1d-47d2-8fcc-02022cec4a76\n0d011434-40e8-43e1-aa44-ba3e47892678\n5b38b0a3-7a54-430c-9e4c-32bd2f1c93bc\n090cdbaf-45e4-4169-895c-a068e3e7ab9e\n07390331-3a28-4a3f-b2d9-0e88158a77fe\n9f3d1e9f-390c-468b-86b1-44a537178f4a\ne7d06f29-ad37-4a7e-ae29-94239b274935\n98337162-b99f-409a-a773-1bc0464655fa\ne0105489-18f4-4fe1-a6e5-61fc620a0891\n275a0661-d6b8-470b-93d0-12fd18989acc\nfc765836-bb1f-40f2-9c4c-36892c52a71c\n45b1ca89-0136-4027-b435-4c3410eaa04c\n8b2d06f8-6834-4fce-86f2-8698dc8d8451\n3c9feb05-9ea2-43cf-b319-87d9f06255e6\n00a06663-56a8-4010-933b-fac244d3722a\n0b8c6195-e968-45f2-996b-6a4fc13d0284\n90a791cd-d0dc-4818-9b34-a9f4daf761d8\n4f207a0b-7c45-4f31-b32b-700d9fa7d5bf\n760ae77d-1971-431c-bd2b-d08fbed590c3\n7b068a82-28fb-4c78-ad87-6451a25dd2a9\n67709c06-92de-4348-b42c-97aa1bee1bb4\ne24133f7-d110-4b19-b1bb-adaf03ebd190\nb97da5f2-a6d7-4db2-851c-e761175d7abf\n1663f4f4-66dd-465f-a5b3-df44effff73b\nabff44b0-1152-47fc-9b37-3bd6342ca9ab\n22f8aa23-4570-4043-b29a-541335ed405c\n17b0f06f-3e5c-4454-88c4-a44f107190f1\nf14f6b69-2a54-40b4-a4cd-b27be95f63d5\n430920b6-e03d-4818-b9b9-c200504f4b6a\n30feefd2-6602-41ad-be69-e520b12d27aa\n2cf9d148-bba8-42ff-bbf3-9030523c8e48\ne843bdfd-b5cd-42a4-9176-f33c64b190df\nd7702081-22de-406b-9aa0-bebb4b5fc5c3\n39a0c57e-3fe2-45c7-910b-28a2af1d3ce7\n9edeea61-a004-4171-96b2-a2709105454d\n45dfa8b1-ed9e-4cf2-a427-00e2d49c04c9\n6fe54c39-f2f3-49e4-8b48-4ba10bb1c756\n9f8e97e5-4440-48d2-9600-3bd8a1a3fac2\n446d3b58-d93b-46a7-92a9-2a66a7f885e8\ndb696e06-e482-4301-851b-0abf4e390a2c\n8cd12ae7-f0b9-4e9e-a9a9-b8890642914a\n7af50784-0bec-45ae-913a-3eaa01b2ba5a\nd7617190-45bf-47b3-8c69-f73e26d7d3fb\n838a077e-3dc2-4869-91ab-27e5207c8363\n9b9954a1-e583-451c-b4d2-6de197d4745c\nd9e6011d-4af3-49cc-b84e-c35910cb9265\nb5aea32e-21a5-40a2-b191-e0300b73d7b6\n80d6a567-75c0-4713-901e-184750356521\n199dad64-33cb-41a1-963f-f973cb08f398\n8ea7c817-477a-4549-a4ef-c5e8340ccd48\nc5d0ec02-cf5c-42a9-aebd-9508babd0b8a\n65f7ced9-7b9d-41ab-a678-6660815e3b07\n47623f62-fe18-46ac-8ff0-6eed15c5fdad\n1d99d8be-8623-457c-943d-d6bbefd60038\ne7201f64-0d48-476e-83ca-bbb895f7cd43\n3e3347f9-e424-4083-beac-aa9bfce0fb7d\neafe612e-7918-4a6f-a375-4d54e2335d4c\n1a0d3b24-e844-43bc-b3b6-050671088110\n7497f37c-6171-4f35-b940-42989ed0b996\n71a15975-dd15-49f0-a639-9f8c423f5063\n51ab8a8c-d6ce-480e-a515-c34d8a3b91ff\n48630345-d76a-4f94-8f2e-c0a098816dfb\n8e7e09dd-85b5-42f2-a267-16a59c635c5e\n4116a0f3-8618-446e-88f3-94c8c78cbc04\n350b679f-5538-4138-b3a6-0a891a9b11dc\n49f73df1-bf4b-40b9-b6bb-0e0eb3f6a21d\n2129b10d-2b26-4a08-afad-8e85eda66376\n67f9c3d4-0a4b-4807-a854-4998d6b625d9\naa99398f-3efd-44cb-b5af-2aa2cf06bd3a\n39ca6b1a-c72b-4f6f-82b8-192a436cd974\n1dd3d890-d438-4496-bce7-4d4a6c8d7687\n070e09c9-7d5f-4103-8bf0-a7b19e0e96f4\n5a5ef424-cf9a-4209-8cb4-e11e2eb383f2\n95d72d6c-0c2b-42bb-9cae-37b438469e2b\nb5484801-2e8b-4432-8ac6-94b82b65c363\nb659649d-70ee-4735-9224-b2808d1b0ae0\nff0d91b7-438d-4e3e-af1d-c5f5f85d8707\n62a27639-0708-4489-9e52-d10fae1adede\nf458dade-a539-4fc1-bb17-bfe43e5c10b3\n2f6136b6-271d-442d-96b3-32cba5ba9d69\n6fe28c4b-ef56-4d51-a8bd-361fbdae75d9\na9f2ab0b-14c1-4c16-9f57-331ca20c521d\nbad34120-f63f-40a0-97b4-19e851800b4d\nbac57610-fea8-41bb-9bb3-d4ff47deb80e\n4491ca25-8eb0-4abb-a8a9-e39f2e15032c\nfce382cc-ecfb-4d4c-ac01-c1d6335f7896\ne4ab649f-2155-4828-b2e1-f6ce4612fd2b\ne2a783ef-69ae-47cd-9098-4261d0ec202d\n348c7ffc-b1f0-49f2-9380-36b087bfdc77\na74f8699-026f-4d8c-8fc4-6652127eced0\n17ea69c7-eced-42c0-910c-c5dfb0bd9ae8\n2ef224ca-3381-4d2c-8416-c3bc03d30abe\n95877a45-f127-4faf-a291-7fc39d2b6652\n0e20d94a-3d93-4429-a529-820a28c40f1d\ne2716d85-6eef-4b23-a364-64c858a4dd3c\n8dc813bb-2806-4f16-a1e2-86b6f0929805\n299479bd-31c8-4c42-a6f1-f4d1caf4c090\n7994f4d0-94ab-4481-b2b4-d0b83129464b\n2a278db0-26bf-412a-bf67-cc2656f63bee\n8110f8be-f793-421c-9633-0235e682dba2\neb88fc96-2308-41e6-aa72-27dada219b13\n2b9c7f0f-d9ab-4f23-97b1-7a2f7baafe79\n1379ba4e-791f-4173-a0ae-37c0d608c1ba\ne83adad5-ec02-420e-8a60-c6cd2334fdf2\n1eb6025f-a6ec-499b-bc58-4a14b2dbcbb5\n9db6ef14-b326-4e2a-981b-20742ca2d6b7\n5ff5566e-a10c-4a1f-a3e4-ba8012efd17d\nf9bbbca4-675d-49ae-94a4-dc9ec70fbb5e\n892119d6-3353-4500-9bdf-14a40542fa34\n7bb81e4a-c117-40cb-a767-92f7efe17eab\n37be5cb0-3a74-40c9-95be-695700220a06\n1c7399f5-f7ec-4388-bcf0-e7c5171dfcd3\na0864b85-c411-4ca4-bc83-33e78347cdb1\n15ac298e-ac09-4da2-b7e3-d4674edb81a7\nf9b2cce9-d902-4b0d-be1e-c83df80a3516\nf68c0893-fac5-421f-8282-115e3ba7be56\nf2ce058f-801f-4614-bce6-9cc21ba21ada\n4dfccaa3-11ef-4bc9-a0a8-6744a34390b6\ndf5f43c7-29ab-45a2-96d6-ba7daacf462d\nb0415baf-0b7a-41e0-8dd6-2e2e471bde5d\n4b37aa36-1a49-4413-86bb-9a388205fcd4\nf765662c-6167-4d4b-854e-5cd788ee6ae3\ndb41c4af-2701-4930-a835-a1caf088fae1\n5aa11c1f-f53f-4ef0-a997-4543b8be1996\nf625cde8-120d-4403-8e31-9c8d41fa3bb7\na88294af-320b-4047-bf09-7aef6ef82afc\nc4346a89-e818-441a-a69c-5def08e948c3\nb1cc61cb-b510-4e6c-adb7-97387d256d23\n6515be75-6386-4dc2-8552-8f8d6e2b35aa\nc86fe6aa-9736-43ba-b6c8-3df1df5e1777\n5a17bbd5-ec65-4d4f-83b4-f45059b5a554\nf6160807-b119-4b93-a916-ed0fabe94815\n73fb5545-58d1-46c0-966c-0fef5fc4b5f6\nba4a3d16-2bbd-4efe-bf3f-a9308b15f886\n47d16619-4bd5-4216-95b2-a2b5dfc87026\n860f02e9-17cd-41a4-94b0-857b7d3f7ec0\n69d214d1-2c0a-400b-bf5f-2dbe676fd75b\n503a8565-995e-4106-bb64-c441024a0372\n78cd5cad-e9bd-4ead-ab3e-e0ad65e9964e\n2e21f241-9314-472c-bd87-b291cd57fd05\n8f4bc0b7-82da-4ff2-8781-2e101ad4fda0\n8370a8de-6dbd-4be7-b52b-632ca8ced508\nd544525d-af25-4a05-9cf1-5ad6d7beccb0\nacb26f7f-4783-456f-872f-a1f6c75dcab6\n833178b7-cbd1-4581-9b49-1087140518cd\n6696172f-4fca-4ee3-9aeb-d87925ad7eb6\n9ebf2ba3-5f25-40ad-aec0-26e3e2b2dbad\n7bf6d10e-f5d5-4993-a3a4-d60c3de3439a\n9d4d1083-686e-489b-9789-85d772aa1df0\n837b2c59-6ec9-4242-85ed-d55a52478b9a\n28663b39-ff39-49eb-8cbf-c60f5f12f250\ncadf103d-71a7-42a5-a744-76b12e20a7ed\n2fb2044e-a01b-4b07-b449-71cb3b4f77f9\n2fd11af7-bee4-4d98-82fd-bf56f43e68d5\na7bbdea7-da6d-40af-87a5-e5bfc77055bb\n59eb385d-93d9-4d7b-b9c9-c12dea524367\n7ce72856-3ecd-41de-b561-35e307b94ba2\nc3eaf740-b37b-4c7d-a88d-db8efa59343e\ndd5b05fd-b1ab-4245-b000-c6d537afffd2\nc9fcc731-bc5d-4d6f-a9fe-9b2eb75cffc8\n40475074-7e9e-45f3-bc5c-680a5f3d9769\nbe81a786-b7f9-4307-be3f-80b899366ee3\naa434e7d-499f-41ac-8426-57565549f315\nb26188ed-0725-4843-a081-ae6646669794\n098cc826-6845-4d91-b10c-b940e3646202\na579647e-ca08-4e96-8808-71aa8adb576e\ncea8048e-b621-419a-9293-bb8e0e51b8a7\ndf02871f-a6b3-4fdc-82f8-66c331edcfe1\n2ccb878b-93d3-49bd-bd61-9538236335b7\n647e2478-e7e8-4142-97d2-b5f51309a322\n33f0f2cd-4389-4e06-9283-6a495d1dd63e\ned7f4b59-9b0d-4438-8584-1f801c3baec3\n6eceb95b-7db5-4984-bc43-2aa8a15d92be\ne8a4771e-3a4f-440e-a3ea-f2d51f00c828\nede59d46-2f62-4ff6-8c97-81a68b833743\n1ddf5537-aa7b-456d-a100-ab792d9339c7\n4ec25aec-792a-46c7-a800-8c45ce72d6a0\nac791e91-bce0-4df9-b13f-914bea746084\n64d8bbd9-7403-4509-9e66-3fa108b0affd\n47c1cbc5-4933-4069-b105-f63376b66561\nd0ab70e4-a975-41da-b6c9-3abfecd4f489\n1bcb9e64-4837-4bf4-bb67-0fb62afc9720\ne79d03fe-7f77-4455-9b4f-9bd18402dc05\nf3396a8d-b9c4-43df-93ab-d40a388b7d3a\n53c870b9-bd2d-4596-adfa-14e34b5259ef\n076797c7-6cff-42f4-8231-dc7b86c5aeea\nb957729f-8899-44e3-81d7-1b223b60a65a\nb66d9410-885d-422e-974d-b631808144d6\n74d98839-a894-433a-9a89-cf6f7bbee65b\n2d0f3e42-be67-42b9-9928-6eae72c931b1\neaade2a2-3aca-4893-afc8-43e8260b05ac\n5b4b3bd5-b1ee-4c2f-b1a1-a2e39333d7ba\nf8fe76ea-7ca8-4657-a3b8-d615636a6092\n181c6949-cfca-4f6b-972a-9a38aa8b7a46\nf1bd6115-f596-45ba-8c9b-e587670f975a\n89dd86d5-a1fb-4b3e-8a36-ae4f7c43df56\n4818f212-0dc3-4c85-b8f8-676bc6267db7\nbb485137-ecc8-4b9b-9c93-1e6fcb4ebeb4\n79f592a6-bc33-4e19-970e-447c4e75da08\nba1cb775-31fc-4825-9d57-7eaf0337175e\na3ed9e27-8ed8-41f6-99cd-cfea3e067bde\n622e2c32-47ab-428f-b6fe-5b99ca14afaa\n71a7cbfc-7f4f-4737-9639-742596e87f3a\n0cc7c445-e6df-45f9-a1dc-84eb477c30e0\nf0a6c186-3855-4915-939f-971ed9078097\n0acbc1ae-3f13-4a9e-af74-6c45244e2938\nac38c3f5-b231-4e4a-b01e-e3abdf614ee9\n021d010c-70d4-4e99-9257-26aafbd8fa48\n9d0a256a-b4f6-4bcc-bb0b-3e3e8248dde3\nf69a6398-31fa-4de0-899e-f8b2783e1e0c\n0c104b51-56c0-4c08-a239-e4d0aec3fefb\n1c3a35c5-1022-49be-af8a-1885a6d385b3\nc2ca9d00-0010-4dcd-b347-41e1e9176079\n3b350f13-b2c0-40a5-90c1-197a7f9b8843\n76e26b83-4e67-4868-965a-ac97e243928f\nca9ad599-9274-4bdb-b993-589c9185a14d\n2ecfd73b-0fe0-412f-9dd0-7df7fb164abc\ne255ce65-985e-4230-8def-3505471874d9\n5c7c9051-d4b2-46b8-b877-640a2450264f\n11d288a1-6809-49e6-bcaa-2141d790cfb1\n72435aad-2d1c-4b22-b5b8-f62c887a0e3e\n3a42c4a1-6c81-44f8-ad6a-647d812aa0ee\n9689aeec-511e-420f-9744-935b6913d8f5\ne0ce1992-c248-425c-b72a-edb9de30439d\n1c00f8e7-93d0-4515-b45a-121bc6580411\n4a41a386-b511-4d66-9c52-079bc8cf3f1d\nba610152-7900-4861-afae-15701e931c00\n29384796-bc16-49d8-a920-465eb34628a5\n033dcf85-3f64-49c1-8401-070944e06462\n72d43222-4365-4496-8171-ad2ae4eaf79c\n975bcdfb-cd2d-4e4c-a43f-15bae08a4051\naf3b3f2b-76d8-4b38-b54e-98ebc3721f63\n2e46abfb-70da-4fd8-b467-0faabff796d7\nb2bead60-94bf-42d5-a5e7-ceef0f0396b6\n2d9da041-4164-4054-8eaf-f5d33a01b4a8\nfced2be6-23e2-4409-a890-ef984724e12c\nfe86f96b-0b20-4654-9334-04cd441fd67e\nce83e663-cb19-4fc5-a0f1-4669823c5ad1\n0a7c6ac6-c745-49ed-9f6a-f95d3b9ad5e8\nb6cbee9c-0ee1-4a61-8277-765436cd1acc\n3b617aa8-a75e-4257-8150-cbd9d5ddcae0\n51b056a4-1ffb-40e3-9a38-1a5de58d9309\n838670e0-c9fe-4698-b57b-359e598e25e3\n0fec303c-4acf-4d33-9b94-08077fb0d9f2\na2348a68-b9d8-4f92-98b3-a5e783141240\n160ced55-d487-4cd2-b86c-6aedc822074a\n847e948c-2790-48f0-b9cc-51de4a83e0a8\nabf17f1e-ac19-47bf-9a5b-37dd198df9c9\n68fd0ca4-c02b-4879-a2e2-092887519282\nb24e9dfd-62c8-4e64-8f1d-3c429da5082d\n68baaf3e-c0aa-4917-b1ae-0df9c969e35f\nb000e47e-544d-41bf-934d-ab61f790dc3e\nd465c2fc-e7cf-4302-b3e9-dcb7cef2c422\n163ba6a3-59ae-4d58-81f9-dd05ee9d1ef5\n95684da5-ecac-4a16-b698-d54c8cc4d3a6\n7c9b785d-8fd3-46fd-9798-c9641ac5a997\nc813eb6c-32ba-47c9-903a-4110d06037bb\nb68fdaa3-f6a6-4242-8f39-5b042dde9afa\n88f98517-c0d0-4567-82f1-bb6778942fba\n14752130-6ea3-44d4-a0ac-6bd488e86512\nbcc4ad6d-decb-4313-be46-199512d5b706\nf36be5af-c453-4185-8f1b-cf664e632659\ne7c82cbe-0e40-4720-be82-d1961c33737c\n23fbcaf1-3ab0-47ae-9d46-b58dc6e8131d\n5c83d0fc-ec48-4c87-be75-6ef275da19d1\n5327be68-7dd9-4fd0-b35f-e725f6276bfa\n67756aae-9dd5-483f-aa7a-aa9ee3684d4f\n49fbcab6-bb37-4147-9f9b-000843013dec\nfaf6398c-2082-46ee-9312-1de01470a134\nc30ede10-9ead-4377-a759-6977734a2b04\n5e75df48-48cd-4809-a78b-b5540fc9bb15\nc1b8dc4b-4987-4edf-acf0-cdd1081eae94\n75e545cc-0f39-4a3e-a422-82d6d32e5804\n1b129252-88ad-40d7-8298-332ea133900d\n3da996dd-deb4-4948-8416-8115140067ee\ndfc11fd5-6a94-4feb-8420-6289ce15f383\na739df3e-4499-4fa9-8f9f-d7dac5950bc6\n13ab1acf-d211-4ffc-8e79-221a5efe55cb\n7f0afe9f-5a8a-4a9f-a9f6-87069c700f0d\n4efd2403-906f-4b38-b4eb-eeafc7127478\ndd5d8ca0-deb1-484f-bbd7-d40f5e937929\ndfb8cb18-a698-42ad-b5d7-57769454a4e1\n3108f44f-86b7-4b44-b96c-27849b0f6cd0\n56b0c9e6-b148-4b7e-a481-219d6168a17e\nb9287aa0-f5c1-43ea-89ba-f648b050d8c4\n1ee337cc-8281-45f0-82cd-8d035935cb09\nfce8209c-a587-496e-a550-fd98fcd950fc\nc2097352-b905-43a1-a706-e6d6fa6c0f07\n7cb5aa09-0607-4958-af16-0bf9bd80980e\nacb3f3d7-8742-4456-8198-33903b1e8dac\n1681c8cc-0661-4605-b516-f04889558de2\n1ef20e97-8ce8-44a1-b94e-7c53866a6523\n4c02d428-3184-4cd4-b7b9-789e6f71b5f1\n8e2514aa-2cd2-4557-a427-626de208e7bc\nf5fb00fd-8f7d-48cb-b4ee-a568c2035126\nbeaeb6cd-bb83-480d-a0a8-80d29fe929fe\ne424cf4c-cfa8-490a-ac58-51c52e44716f\n75f3800e-9b55-4e9e-9e69-351100a09879\nccdbe73a-dfca-4213-81e3-08044c71de4b\nba18dbf9-b4c2-4d36-ba56-c2d83b5f2126\n02f1c982-eeda-4ad1-b549-29d09ea4b84b\nfc55faaa-e7e1-4077-a8e4-9c62e7aa5d09\n8c9d9e74-0a36-4883-8c51-ff396a2de501\n7b2393f7-31da-4d89-a267-b1042ccffd07\n90336511-d3c8-4bcf-9ced-54668f519a69\na5ce6215-36a8-428b-8a75-d6433cfb801f\n6d9029eb-2628-4d3a-9412-772a2aa24406\n2cb0b002-a542-49d2-bd36-76a896a5e50a\n8b2443ee-9103-47b8-af5f-ffbb4934613d\n6cbf602e-eb69-4d55-a4c6-b0b48086738b\ne9faa5bb-e0ad-4c52-bd73-7b338d31d9de\nc262929c-fc1b-4c7f-a14c-dfae84cd6410\n1a535b50-3bfb-4dcb-8803-54a77b71f24e\n1886f7b6-934f-47da-b257-0520aaacdaee\n1a410eaa-76e8-4f79-b3fc-fb00111aa2fe\n8c8dd817-d499-4a63-970e-27aaa35716ad\n707be601-1ee9-4f12-bc12-3a4abe568ac0\n4cb1d721-14ea-4e5c-95f6-7ee08c3a51af\n5fee53f1-39a4-487c-aac6-237c9316ac07\n15f4f8bf-4ae4-4791-9947-e5770da921d9\nc44dd870-cac2-49b7-b8f7-9965c396e352\n75582328-9362-4b54-b389-40c7e5a6b9de\n0e4c1ab5-11be-4f2f-bb7d-cdb1687a176d\n39904900-de0f-4554-adda-e8d018166f42\ndfaa816d-9c55-4e87-9a3a-769c1fd5608f\nf0eeee8b-859f-455e-9ae6-b299fe755f4c\n1717d4e4-7aa5-4bc4-b7ca-7ab2a7b6f162\n1110b19a-19f8-4c40-8d49-fefb467db3ee\n3884013f-1452-4ec3-b89a-4e69923f8141\n44389131-cac7-4ff7-be5d-510cf72a425d\nab3b69d7-e597-43da-be78-fa44ba1ffb0b\n991eb343-8ea8-4279-930d-d4d41d999f49\na9f114fa-d22e-4c3b-b2b1-2d4bc6b1bf31\na28e3a41-6bea-471a-b68d-d27bc4765dd1\na7b973d6-36ef-498c-a226-9e5fa4420cca\n4b0aba53-4c1d-4592-be41-5e7c343cde47\nad8a04b8-fda3-40bf-909e-6ffad66fc5cb\ncf7f6b20-fa32-4e61-b21d-c058408adc06\n8fbe5910-3636-447e-be6f-ec7b6ae886a6\nd80fc21c-30ef-4183-a180-1e4f13d211e0\n98adb98f-d55d-428c-a415-23a4ad153947\n8c17d55c-9118-42f1-bc27-6a1ec7085146\n3d6276f3-b403-448b-8fdc-2fb6212122e4\n04164e38-9a8a-46cf-9b0a-e85c639d9cc6\n046aadd0-bdd8-42c5-9191-a808da450122\n9ec74110-acbd-4b93-8652-b7cf62407ec0\nd34837a8-4f4f-4e6e-880b-c2dd1d86fa2a\n2b60f5ad-0b4c-48ce-8879-b2b0b482f566\n5db11e17-e1c1-42d6-912e-561cc5999ae0\ne6b58788-2e26-4585-a875-ab17bd514c14\n86646124-3403-4454-84f4-b62b8105ca20\na5a82a94-f4d2-463d-a171-eb7d9010011e\n41a23103-0dc5-406a-a040-66f784b89453\n99d40314-2e8c-4143-926a-e7fc966d492d\ndc040888-e125-4780-9683-cbdd8ee5f150\nb5e325b6-ba31-4eba-8023-2394247389f9\na77ad8d4-5614-4dcd-ba02-c1dd16d2301a\nc2566729-0736-4a66-89a1-8f47ce98137c\n07464b9b-112c-4034-9132-6da8991d5c48\ndc16be80-5521-429a-a77a-00a3b00ddaa2\n5f495e5c-5350-4a78-b787-272ee93f3400\n4c7305b0-08c6-4330-a8c3-e204f214144a\n290453b5-daf4-499f-82e6-8f48ca1761b8\n5dde6f96-3210-4530-978e-512e2e7eae36\nc14724d0-1471-42bf-8ab7-c41751a82177\ncb50412b-895a-42f2-b9fa-adc05b12c89c\nb08f5115-9984-47d1-afda-55072bd1c834\n46e4ae55-4fcc-4844-ae3c-6d49bf969866\n66c8fed4-21fb-48ca-ac62-120bb85c8703\n4292ca9c-d439-4ca2-9c34-197d48606b2a\n6402abe8-beb6-4149-8d0d-065fb090cf30\n5a399744-b9e2-4e70-b82c-31b1ad22eefa\n05fc2f9a-35e3-4b77-a697-9baabf066b96\nf09d1a61-3451-45bd-82d5-69b06a4a7ccb\n23e19443-010c-4b62-a927-c14a93018639\n71575036-22a4-4445-ac91-45e8debdaf3d\n19e620f6-e974-454a-b105-6ce3189f4f1b\n04afdc9f-70ba-403e-9af8-7c390fedadfd\nf8df6370-50ec-4da6-be41-8db0b228ce62\n7cc5d6d7-a849-4c58-8638-8b1822e0bbb6\nbb69597b-9477-44e7-ac6c-f36f8d373bdb\n5be149d6-149f-4732-9b77-5d119c682a8d\n071d84f6-d6b3-4cb0-b03a-61044a4f77c6\nc6170c36-435c-4d15-95fb-7d764987e746\na5ce701f-6c1a-426c-bb91-28f369c3b113\nae3daf02-8602-4c47-b62e-5f466bb27167\nbf22879d-e17e-49d7-9b6b-4a4d60b7cf5a\n4281da8b-9ae4-472f-9fff-45fa8280d457\nfe9c9cfd-b370-4b45-9be4-fb277c3f8a61\n5746fd35-d4c1-493d-b63e-b119791e8a6e\nb7e2fcc8-cab3-4b9b-bff6-362baf2c30a5\nd59bc6e0-4b53-4de4-a3c5-e02916c7f82a\nf7cc828e-c5df-4d18-a760-87995e7151c0\n8cbda2c9-b7aa-402d-a015-be682a65e6e2\n08111ad9-2701-41af-a742-d91be2c8bd7c\n0f984d73-9afb-45b3-a44e-5b3a58316b5a\ne1ffe237-8858-4851-84e1-9dea4d81886a\n6fd68752-528d-4ed6-9782-cc769ab4c6f1\n8dbbedbe-2733-4cef-a81f-c5209d6eb1c5\n16e641f9-c5ba-407a-977c-e313dcaa0c03\na92d62f9-c971-49e2-9e34-9d47c0d5a28e\nd4abbb9e-89aa-42eb-b986-21634a5cc5e2\n03e3cd02-811f-4043-9143-cb144de4a984\n25a75c41-13ff-4550-bc97-1cc6c4395282\n33bddf76-94cd-447b-aa97-65a117dfdc70\nf5f05e12-4d23-4fca-9c5a-cbee3964c73a\nd918b233-3c8a-4f59-b716-483143e16933\n7d127a3c-02d2-448d-b2ea-d473863ad3a1\n29705f55-6afc-4c2b-b28f-40f0384822de\n88ede2b5-3318-4342-a447-036fe502db70\nc34f7760-1f16-4a53-b2d2-286a9fc88586\n3ef25271-47d1-48cc-ab71-5c9b988273b1\n5529a6cb-7f73-4caf-b102-166dd321fb71\n1aceab77-162f-4aef-bf39-6737c27462ab\nb1851bb4-3d02-47c6-a386-34fdc0d32115\n76bc2290-0561-4eac-8b54-57d897dd3fac\ne8d3e8ef-eaed-41bb-97f3-050ea8f1f5ab\n8521e6fd-afee-4e9a-835e-615d7a2cdf81\nfdd76f0a-29bf-4208-ab15-022a008638c1\na080f14f-7cf1-4876-a407-21585c63b661\nabc883e9-b804-437c-a0cd-c6af3543aff5\nceaf1dad-32c4-4a70-9cf1-db8b7a036dd7\na648b0b6-b89c-429e-9d6d-1c31406b265d\n622709ae-a1bd-451c-8294-652eda920b86\ne2c83d49-c57c-444b-ab89-37c2606756e3\nb7334c36-3eba-4f10-9bcc-3a46f8c7e63a\n064f0ad9-ff49-4f00-b7f3-c6091685dc71\nf022760d-dfed-46d1-8301-53f5c33e38aa\n2fddcfaa-7173-4ffa-acf6-067ba76005c2\nb5ca18f0-bbdf-43c5-818e-fa05a56e6cf9\nfe1011c7-c8ab-449e-b5d7-7dd3a0fa2647\nf194b228-7c58-4db0-b0bc-056d1f3136aa\n312647a7-2f87-45a7-addf-f8e3e370b4ee\n0e352ab7-86e5-4785-8205-57f6857ae781\n4a874d9f-c8c2-4774-97c0-f3d76b929ade\n5bb53e1e-3596-4d81-af12-25c017f49519\nbbe857b4-c4eb-45be-a08a-a7c43398d340\n682f15db-4639-4a3a-91c3-7cb754176367\n083458f3-5bae-4684-905b-208d8332042d\n05d312cb-4ede-4253-a757-f0edb0688fd7\n457c2c1f-2400-4951-b60a-49b6bf5e0336\n723f34fd-ae03-47f1-9c77-da54168b87d2\n8c473fc9-d879-46e2-9693-5e95915909fd\n8522847e-dca0-42be-ba39-b9e64e3a1feb\n8b70f6c7-6b8d-4887-a906-dbd9bbc51534\nc7a9c003-4f38-4550-93ee-c1d0f64ec2d5\nd5dbab5f-1475-4cf9-a482-08da71bffd30\n8c7d7bf1-5974-4c3f-b22e-ae54c0f78910\ndd00fae5-520a-4469-a1ff-ad9af6921e74\nb35c3258-6093-42bc-a868-f759c3bf7c09\nd2e59950-d521-4bbc-9855-e5f307fe37d2\nead93742-db1f-4e84-8cc0-dcf0791a632d\n97443284-22a5-4fd2-935f-15a1ef600046\na2a116ae-016d-4aa3-a496-7b5b71f2a9f1\n1a2205cf-9f1e-48cf-ad92-a611b79818fb\n4a7e5d0c-9604-4c60-817d-a8876b4ad054\n3f12c5d8-3598-41db-813d-0db166622069\nd76b49f4-e55c-4005-b1ac-5260046c8d0a\naea9eacb-a695-4825-9b49-89c3b0f52d5e\n9bae2ed6-4594-4916-bf18-dbcedcd09a50\n9206127d-a942-427e-a4ae-7da3314ddbed\n828fb2a8-82d6-49cc-aa84-66bea5b2a1cd\n475b76b3-ab4e-412a-85ba-edf8dc8b94e1\n90e604ca-9dbf-4d83-8f06-8ea1f9411a82\nbae1c900-265c-45a7-a8a5-3163d698573c\n35a98f78-2ba5-425d-9d44-19877f0e5136\nc2574310-5309-41d5-815d-d8d8d4f888ba\n7dd499d5-4882-44b1-93fc-22b5ca7b85b1\n1552284f-c0a1-42d5-a554-634940f8f64b\ne9484746-a022-4d78-a103-53da63b80a08\nd1892527-2266-4385-b844-5960fc8e40d7\n69ec1973-e20f-491f-a670-fb9b53c92cbc\n7a38e3e7-da22-4eb2-84a7-194344b58a96\n06a0ff4a-3757-4005-afc2-5a645c30fbd6\na4f9d37a-92b6-4b55-83cd-d0aca85e4cdd\ne6e0b1bf-df9a-4645-b264-fbb00b15bb63\n9a4458be-737b-4c27-b396-dd9b6968c1d5\n87963af2-1d42-4ffe-a47c-874cf37c6cdb\ncf399441-ec2b-40d4-9dd1-94b1a54507d1\nf8e14cde-b784-436f-8faf-bcc0c0b3ba8e\n4cc8604c-3a0d-48cf-9c76-d4f24b47a93d\n6d5691b3-1a4e-48b6-b91b-3ef9dbd81394\nc04259d1-268b-4c53-9563-5fb1243a9894\nf90e0bf0-4246-4c9a-81fd-9fbd23a48823\neca49e3e-098f-437a-9161-b5e3a6bf06c4\nef0163ef-95bd-40fb-a651-dadc77cf1d24\n51d69c57-5ca6-4a48-929e-d445c7b8e959\nbd0f32cf-dba0-4346-8cd3-b54e62bb3af6\n5a05d96e-0608-4c63-8a45-962b5edd3224\nb7e9733e-95f6-4ccb-88fe-4fe4c7bcd16c\nd6622cc9-615b-422a-a584-2f17ac8758d0\n49aa6f5f-c2e1-46b2-9244-6c360c7dbb1a\n9addb7af-de37-4b60-b766-ab751a5f1392\n44e8fdbc-0f2d-495c-86d0-8bc1a31f1b11\n5e34b3a7-16e3-4d80-8e65-4bad9a58f6f0\nb88a3abf-d9f3-4ac8-91d3-bd552a15feca\nf4e2fb90-871a-482b-8a85-09c3c9de48bf\n15c64d2b-e94b-4b1c-86d5-a5ebc06d7494\n9b72c55f-f5f4-441b-9e37-cdde11b041d0\n06741e73-c0c1-4b87-bc22-0eff9cd87f05\n52a1e96b-ab8c-4710-9015-62d1749c43ee\nf8af1685-813c-45ac-aa96-b25caf0107e3\nb3dabcd2-7fce-4b6d-a066-580e197716cc\nff2e38da-c98d-43ab-837c-49c709d67f58\n02e77c2c-fa26-48f4-b1ab-4543d996b4a9\n775b2976-c9a6-497e-90b7-1b6e65ae853e\nc7f30624-8247-4453-93ed-923cb3f1e410\n57d413c8-5fcc-4970-8835-81b86c635ebf\n7f875747-4751-4981-bfd3-0b001fbfc09a\nf57ab460-f696-4a04-b1bb-482122a2b1ec\ne56dcdd6-54a8-4083-bf54-0dfbec32cdc4\ndfdfe7cf-1140-4338-b1bf-6dcc1d7f36dc\n0d5d98eb-f1e8-4889-9118-e620aaa6d8d1\nf53a23cf-436f-481b-ac38-6f53a3332bae\n5f689c41-c0f7-4fde-a032-f1a8f201ffdb\na49686ea-8d27-4508-819d-f191c4a415d4\ncde56b3c-98d3-4568-be62-f9e1fa2fd9f3\n2d946579-d0c9-4a99-94a5-63262f65ce7d\n42e9d7ba-7c4f-4340-baa1-37941e18b31a\n815c05b5-c3ca-4d25-97b2-2305a6b2b751\n04b112aa-b382-4dfa-a89f-36673474a38e\nbfc299e4-6bc0-40f8-8d10-5c3e1367ed48\nb01b1e58-445a-4120-8c67-a5d02a91fff5\n4ba565e1-d113-49c8-adb3-5abbec7e0be8\n5d23e683-74f5-4782-bbc8-4f97bb17351d\nbba6a285-24e0-4540-932e-b357cb3dac13\n22bd598e-1c30-4849-b59d-0c4d6a4c2c74\ne6dbc62b-bb2e-4b02-92e1-f1d28493ff16\ne6de03c4-0e07-4656-b7ad-0a82ab3fc4bf\ndba31382-2337-4f90-bcb5-f113da32f0f9\nde53721c-44ce-4ad9-89e9-cc883c8d8762\nf1591810-fa4a-4243-b3a1-bc815ba1204f\n176667b8-cb8e-4023-88e3-a8da794de8c9\nf0872e40-c8cf-4600-a002-1c6a90e7f9f1\nc571fa27-59f2-4a92-96c5-8ef7c7ab6723\n54744897-1ea7-4a8b-bce7-6b576f31a45a\n5be22262-c320-471b-9239-21213f3447e5\n728a8176-10bd-44ae-96d5-04a4f0ef4f91\n75ebea4e-a789-4525-8a2c-4c5a261fdd34\nf14e5753-59a5-4b98-9110-0d216c87b58f\ncf2d9487-03bd-49ab-8a6a-456c3efb0459\nd8c81a93-c416-4ca6-8f6f-02a3dcc479a0\n2ac346d1-aa19-4a28-9d20-197aa2da2f87\n69f18b07-35aa-43d9-8fa5-2d115a99ffae\nb0f4b321-b6a5-4a87-8d94-e6b8b751e2e0\nbcb2d723-20f4-4328-83eb-57b2af274df4\nc4b76bcf-3d7b-47aa-993a-e6bab3c56d0a\n4ef0b190-ccc3-44b2-90a4-c0a9cacf50a0\n63d7eb9d-b54b-4f0c-94a8-6282ad62cd0f\n5b124af3-fd15-48a8-a5b1-a7c92a4db1e4\nde05ac88-79d7-43e3-bb95-afc7d0a61ea5\n37359abb-239d-4b46-8374-0995695451d8\n39bef570-efec-4f6a-b614-460d3bce2407\n9b4aa908-763e-43be-93ce-6bee51062006\n76ac4523-0dff-46ad-a536-6a988b803562\n25f8f70f-4208-4b56-85d4-08848805bd93\na4ce611a-96d0-468d-b622-47dd7a4149a1\n84016039-b47d-4573-87a4-aec2e93690a1\n9c9d8571-6296-433d-b25f-c4c7423daf9e\n8a5b226d-835b-420e-b69e-f6f12ab25136\nff83a2d2-d198-4bdb-a014-b18eda98b85b\n98c56940-d085-4bf3-b9a3-7f5bf7923d44\ncc4ad66c-51bd-44ec-8d42-e91d53c128ed\n0bd437f6-0015-4002-912d-c8272036d86a\n214b8a91-4f7b-4d45-9d3a-1f635899be81\n4754f493-2d50-4e75-bbd0-396dd61b97df\n12ebca38-0170-44f9-9d83-471e8f98d078\nd5f83f9a-a82e-49dd-ab69-28da883261d1\ndf5cea45-bb53-4722-bca0-2969c9e1f488\n0007173b-f69f-4573-b990-d09bf7b1a5f8\ne51ed2b0-4d45-4a39-b7e0-1a0c1be955f0\nd1111930-dc37-423c-89d0-7d9db56b4c6b\ndd56ecbf-86c8-40d4-a5de-aa1d6b5a553c\neea0d757-a8a7-4a68-a9ea-488b0fc1b0ce\n8ff9f21d-6fab-4c08-9f65-a90405d1409c\n3ae825f9-8275-4727-b859-d6519f10beb7\nf043c3eb-76bd-43e4-a538-a409d31d58bc\n5c1fe47d-7373-48de-b847-1ea885630911\ne7d8e76e-98a5-4171-b02a-541f8f7fbd58\ne5adc07f-4356-4443-9298-4b2d69a2cab3\n5996b1d3-cbdb-4fe2-bb72-45a48df74701\n4ea2fa66-a293-4217-a2f3-45ad0a698725\n4321bcda-6cdb-4bf3-94c6-2505630352ba\n201018bb-3a24-4bb7-b1f9-f09bd76c8a02\ne150b789-cf41-4d40-a6bc-291a627ef2af\ncc22e5dc-5f9f-4517-b1dc-572cef67662f\ncc78603f-eab3-463c-8818-f4b6f7cf06d6\n4ce1638d-73ca-47c6-bb61-61a8dcdfae81\nc6b64816-cb84-4987-825f-01d4f4e0254b\n70878b0a-3b27-411a-ab41-f75fa0004506\n860d19ca-64cd-42d9-a4e2-2236ec1b86ca\nf223813c-a983-4e40-885b-7bcb53d67005\nb6b3cf89-86c1-4f33-957a-74e087e0868c\n89432bb4-0b49-4cf6-a990-5908f1e7cf53\nb5e63cd6-612d-4e21-a626-f1718d05c614\n881d4cf1-3431-4836-850b-f3374f05c24c\nd92407bf-e23a-443e-a440-0e2aafb19312\n51ffe5f5-ad67-40b0-8823-d31e71f3d9e0\nab9186de-c5c9-4aa6-8d9c-e0cca68fc44c\n5ef4692c-e1dd-4b0e-bc32-4c5481da9dce\n7c555041-065d-47bc-9bd1-f62f932c5b04\nfb097313-6015-4fdf-9139-88ce1fa6866f\nfd4186da-4d7a-4b52-881d-34455cab3ce2\n03c0761f-c3b1-4a02-a608-2b65b15da3df\nb3d5accd-6e03-4e99-9d6b-d4d8fccea806\n758d6e71-5300-4372-85b5-d0db070b2348\nbcedbd19-db32-4a7a-8d1c-8fb7e2c48ecf\nd3da5222-6df1-4d89-b988-b9fcb421a105\n798fbc7b-a2fd-4d50-9bb2-7a8e2e2e8295\ne7989af7-5abb-42c0-9d5f-1bc15f1f5da4\n0d137c8b-6fdd-4a54-9316-57b826f97dc5\nc679efaf-1773-4e91-812b-62767853ee92\n98755a77-5709-4050-b85a-93f0f88d9ad7\n09c784ef-74c6-48f7-97be-7f5a0df67ac4\nf933c414-481d-4643-84b8-d90745c11dc1\ne9927d5d-5b68-4442-9097-ce7ea1928d14\ndefac3fc-d63c-4423-9c14-168afa141a3b\n03382570-6f44-4cfd-a37c-1870c55e6aa1\na2b2887c-288b-4e04-9f1c-1f65515ea745\n060e4bfa-aee1-4f65-afd1-8bb4b6d2eb82\n092996e3-611f-4018-9916-4c95c83083bb\nc560fbe0-b342-4ea6-9e41-05d6f47957bd\n76070a31-2b8c-42a4-9a85-a9fc317b3b10\n91367a29-8f93-4d65-a784-526d733520e0\n8512710c-113e-49f8-899f-8f3e41642505\nee266e66-c17f-4817-aa47-a77ba463b0dc\n99c410e5-dbe7-4f93-822b-ea3a1cb29fb2\n1ad16bad-142b-4748-99d9-53a27436b734\naa49245d-9d16-4edd-b9c1-415a21556e0d\n5fe329e1-1aca-4e89-87b1-827fcbe8daa3\nb16ffdd8-8e3c-473c-aa0b-f3baad4383b5\n60b02f0f-a3df-48bd-b488-a01c1193c1b3\n6367030f-fe35-4701-8ac7-8c72da40b81a\nb13df715-efcd-413e-85f3-24ce13208713\n732b66a7-770c-49d7-a7f8-d036a873b7d8\n4e97a772-366c-401d-aa9d-123ac52789e6\nf1dd6245-c47d-41e6-9bb4-7895de85577e\n33ff32be-0871-401d-be76-903bc5a8749b\n4b27cef2-29cc-47a6-9c93-ddfafc7e63cd\nad1a90e3-e400-4368-b6f2-9d4254c9b48f\n0737b2e7-31f5-4e67-8562-d735d56ed6df\n1d637bcb-a649-44f3-b013-4d9e90975878\ncb069921-1c5d-42b6-a9ad-b8c97222851a\n866ccf13-3dd3-402d-8ad6-2652fa7704c3\n13532088-0732-405a-bcb4-48e2a05c6378\n7809a02b-7b6f-4a57-bae4-3913eef95448\n3d7ed3d4-55f1-4596-b718-397fac51f6ea\n472093b3-78f1-47da-bd49-d19ef64bf63e\n760648f1-67a2-4b59-90f6-393bdc71b27c\nf1bdf840-2610-4e3e-a362-a9382e202606\n86ea0a35-ee27-4fa6-9936-b68b97468300\nd6504ec8-8821-49d2-aff3-7f7fbbbf24a5\n7fc68470-5e6f-47f7-9441-b0ec0fe8c81f\n176f7493-3d96-45f1-971a-afbf12c92d91\n13577ab0-0595-4295-8cfe-c749bdf41f98\na624d4f3-18a4-4db2-a7eb-91593a955eb4\n15eca56a-8103-4476-8686-b81afae9a7c3\n137893d9-d36f-475e-8848-57826d8aa051\n44a29547-6044-4c7c-848a-6dd278877657\n7e61a2d7-f884-49ac-b33e-053f145a42b4\nb88271d8-93ba-49bc-aef8-589dc70d3e08\n355e4fa5-a1df-4f18-ac57-cf2459f32c9b\nab3b410d-2921-41c1-a071-5d8baeeb91be\n1e8fbf5c-6079-4aac-8d36-3533d0742950\n35592c5e-4b07-411f-8408-f6d0ce738030\nec661820-458d-48e0-a6ac-1d9bba5f18c2\nafc761b0-6d6c-4c70-a756-820aea6945a3\nef1d4401-b466-4ee8-ad90-14157d14d996\na67d233f-5f17-4cf2-b295-5b7b8be58467\n6b220019-f0a4-4bdb-8a5b-e03a68602607\n51421509-92a2-4e0f-8df1-f92c1d0c229b\n8a838d1c-b0b2-4019-b880-daa9f5478a9f\nef300a31-3607-4431-b24c-96de8e02fde9\nae5777d7-e228-45d6-b694-d867c0c92f02\nb605bbd3-7c1a-4992-9861-d72cb84828ba\n89268cb9-c0f8-4638-913f-10fe069f0801\n5d34ade7-427b-49b4-9db8-4ce4fabccdda\n1751b77e-174c-4cb8-9913-36668b086ce0\n8fd9a4aa-47c0-4e4f-b3f4-17446e88f173\nfd22b024-d5d3-4d58-addd-04456b8cfdc2\n42231f0e-5975-4acd-a234-388a72842b44\n128d2513-f984-42e0-b7ff-a99117165507\nf1af94c1-e0df-4d72-ba74-853d101342ca\n4bce43b5-3a9a-4506-a3e3-62adf4db2212\n25879a37-cba7-48b4-8cdd-8fe801372d45\nc2cc5b65-347b-4200-901c-2c5b8ca199d9\n37999da8-f3cb-4257-a006-813712fa1517\nc9a49096-e20d-442e-84d9-54c65c0cd5d5\naeaebf61-17bb-4bc4-b88f-1a0835c9b065\n598ece83-2e6c-4fa9-be9f-d833e9a63f2f\n4b76029d-0b58-454e-a745-1716a49ff75f\n1f74ff97-5603-4b15-8ad3-9f88f13dac8c\ncbdf5447-0fe6-4e4b-a33c-68f63eb09958\n6a0a1ee9-4c83-4b6a-93e6-ce5d24072fa5\nf42e953b-481f-46e7-86b1-10fc924ff680\n69b13bc0-6bfd-4cde-ac56-5dc4f81e67f6\n55485f30-3d28-487b-8926-f18b61b2cf42\n76062e41-5d1f-46ad-b0cc-8cd43a4a57ef\ne2c695a6-305a-4696-8b80-4c6e80e53693\n87384459-8b77-4d4f-b875-7564836130d7\n03176dd5-26c3-40d5-a4de-24eebb73c572\n45ca0308-05c1-461c-925d-aee2cab5d175\nd8737387-437e-4397-9e39-7370fddaa538\nabd2e9e7-41ab-4c5b-b670-78cb097c54d8\n1baf4d8c-2a43-4bd2-b46c-65bb6bc2c235\ncda792f2-d9c9-4750-a357-c8804466cfd1\n807aaa25-c004-4c76-838e-0b360bf73002\nf7907c93-3303-446c-9a8d-1c18b342074b\n46bf5010-b8d7-4e28-8a95-a1967afbbc58\n760efe92-4077-46f5-ae00-cc7a61e0aa4c\nf11e7d9b-bc65-440d-829c-a17ec940693d\n2e446abc-7308-48ec-a9c4-fbed5b52a4bc\nfaecd4bb-6e59-476d-8f30-ccdce841ca5c\n40a989a7-1cb7-4306-b0e8-35eca99578cf\naa94976f-9e94-414e-9eeb-8b0292ea3e9d\nb77480af-dec1-4a59-aa9c-a2e9248dbf36\n45d09b3b-a746-4990-a4a6-e4d70f841a0d\n04adf6f1-01fd-46e7-bd1c-788f1b8cddf2\n21f0cfcc-0a70-4e0c-8831-2d1d5e34418e\n50ac32af-bbb3-4010-bcd3-91ac6baa56a8\n934cb531-fa96-42b4-ba55-a526a2ec7699\n20e2f73c-5779-484b-ba52-9f49616dcbec\nd6d44290-2e70-43fe-b025-455ec818dba1\n70c1336c-3a77-4103-9e55-3cbb3454dc58\n1fb993dc-74d6-4f26-965e-ec27be8e6452\ncbaef62a-a189-4b05-8817-f3cb6caa7d2c\n992a1eb1-769b-427e-96f1-3b498f7e7248\n48765ffc-a9c3-48ca-9299-bddb9f8740c6\na17a0061-d032-400f-83ee-d074c46c3da1\nb3598258-6643-4a2d-b6d6-61608e48e378\nf0f394a8-e296-4368-bc20-52a6a47f67bc\ne57085a0-fe75-46c8-891d-476dc1574e06\n5be38d01-e82d-444b-85a9-447cfd127368\nb9acd2fd-0bd8-4fb1-882b-436c026b5b08\n782601aa-34a7-4a0a-a5ab-b2fbf8534ac6\n42679e75-e3be-4d9b-b640-54db645ed2de\n9f3049aa-f6e8-4365-b23d-cb1f2739458c\nbd43aeb8-5e4b-408f-8f85-5201f0304b99\n4c8d448a-9879-4cb0-82f6-3b48168998e5\nb744fb0a-c708-4ce6-8c73-8ca787a2daf2\n0301dcd5-7df0-47fd-a356-fd3d2169b78e\n41b78112-10ba-4b70-a2cc-85e48d64ae22\n6d177bb7-cc7c-494d-b66b-bd934960a1b4\n6e10fe41-5d2c-4856-a32e-38bac1a61c2a\n6d3cf28c-2a44-493c-9f85-1f53fb06594b\n38520bf9-5845-4ebd-ba3e-45b2666ed2c4\n7820b660-7195-485a-9be4-0cf3447ba93f\ne3f6bbf2-56e6-4ca6-a3ab-26726218218b\n5c8f8480-003a-427c-ab6d-ec1bc2418e98\ndba87a33-c98d-4740-8d49-f4a9a668f639\n5211ab61-233e-4cee-95c8-bdf5927a2d0b\nafccac67-9b1b-4790-a6e3-80e0653c3c76\n13d601f6-b376-4315-92d9-d69fdb53c7aa\n197bc109-a274-40df-a16a-34ad5c4295db\n7a71cda1-33d5-4fda-99aa-26ae02974789\nd0c9f859-bb2f-4f66-99db-670ca6d4e2f8\ne44438c4-7a42-4630-97b1-6a1d6e6f829f\nee3bbef0-c4f6-41fb-85d0-dfd2c37387d4\n093f9fd8-d033-422f-9ef2-68bcf542cab6\n1c1deeeb-201d-4f36-b158-492f034a23c4\n1113c3ac-5697-4088-b72d-cd8f605e3aa8\n1db1dba5-4c9b-4710-940b-31f37da33bd6\n28433d74-2f90-4d05-bbb7-da2f7748edf9\n2797bbea-dd63-4c89-9007-afb5ac09c30c\n9bf01a6e-6d43-4a3e-8605-e4798408e7eb\nf6c8889c-e8c5-4eaf-8bd9-6a170340a2be\n074a6cd6-3404-4ba4-9cdf-758aa25f67ec\n488e1683-6c5c-4ed0-8caf-a8e8046976ef\nc950bb43-1f22-47d3-b13b-c74919d43903\n54bdf501-95a7-403b-bac4-89210406b996\na78c4850-9360-4be9-b891-4a5b229dfe10\nf3d8bb72-22ae-4fdb-a1cc-3ed64d413101\n8ac0abfe-88c2-4058-8950-e149e5a50857\n9edc0d3d-42ea-4249-ab79-1947975318c9\nfda9ea80-7a40-4101-a50f-59409573e0f5\n889c053d-530a-4f3e-897b-d7de034520bb\naeba45db-733e-42ee-b700-a0068b3338a5\nb54531d2-26ea-4b3f-933e-784093f1117e\nc90ec870-4a4e-4730-bf51-8359d7fb15ea\na9355fc5-1182-4959-83b6-556ebdd72afe\nbdd58115-3693-473c-874f-791c01b7bfaa\n81fae686-555d-4a8f-bcc8-b10632a81c01\nc4d8875f-f0d4-47e7-90a6-5d0d31f6b9bf\n31e60ea5-548c-441e-94d9-bf2a4cb1a65c\n33a1605c-ea12-4128-9f91-55f9158750b5\nc3deae43-f902-44bb-a346-0e756427ef9b\n0c79236d-af90-4b7e-954e-3e8f9a0219cd\nfc2ba3e8-e934-4ed3-8271-64bcb952c795\nd43ba43e-fe69-44f6-9d17-04d9440bc5aa\naf6007eb-21a6-45bf-8b02-02b4b3924133\n24c2e9fd-657b-4a23-b30c-83ec2d4f4518\n9e1e94be-1c8e-41d9-8962-bfa1986aebe3\n167de3ab-b7e0-4428-84fc-36acd8aa7425\n8184b03f-037e-4a90-80f3-eca5338b7ae2\n97793764-a721-4887-b358-6c0f5957af13\n50a4446e-524f-41ff-b37b-b8068a193ddb\nb38287f1-e93d-47df-98be-cbc650aa9ef2\nf000b626-2067-4af6-b12d-2e589a7e31a1\nfc548e0f-13bd-4d58-b47d-4e4ef53dbd0a\nef19a2c0-6e19-477b-aa33-c53c9e38cb12\n18430585-cfa5-4a6e-8128-6f9559541a9a\n330db7b1-e756-4a50-bdac-f62d94a9722c\n58fc1075-d186-4b53-a6d2-48feb4a4c038\n74481f7b-2e18-442a-9384-96dce29018db\n218a6909-337d-4e8f-9b90-57ff5307cf69\n7918c0c5-4651-413e-b2d3-03d0da8f007f\n7d34106d-34fc-418e-9af4-cd464fdf97de\n38fc214a-5a3f-440e-b429-fd840a25f58a\nf6b12a7c-61d8-4095-af90-2641cf12512f\na120de72-2cae-44d7-ac31-388a1c9ff24c\ncd839ae1-ba49-4088-bed8-b27510af15b7\nfd4bc12d-2211-4eb6-a225-462f2d45dc7d\n1b4038ba-3b5f-4114-b491-aaf1848975a0\n0393d695-cd14-4f69-a02e-a46b74ec8659\n94ce6434-da42-408b-a942-b87ab2f5bafb\n9c7b35e3-1977-4e55-940c-f18a5021be09\nf8d62513-909f-4eb5-8667-c98a5ff5b708\neb9e06e1-a269-4618-9462-2755890cf864\nd3ad34aa-3292-4da8-8d4c-0ee2073155cd\n23923063-4f6d-4291-87e7-860080f1a760\nbcbcc2f4-5b1f-4e67-aabd-35d2cafaaa5a\n05499880-7e66-4a91-ad6a-a8a323cd9d2f\n25480839-f4b7-417e-a0c7-89bec0c99fbc\n67c49252-3c7d-4c7a-b420-ee7823308da0\n098e73ba-57f3-4b72-8d60-f336c1a86a47\n49dca58a-c5e4-45f9-97ea-05e6f801da37\na7882b77-a9ce-48b8-9ef9-9b20975ce580\nf0f70ac1-20c7-4da2-a450-ef0d82cbf883\ncdd3c623-59e4-47c8-9735-c947aa0a6177\n3371b5a0-0aa1-49cb-b847-56d7805e06c3\na5411e29-772a-4696-aff1-927f6008b9ad\n9df3f901-ca81-4e68-b59a-8f75d06cce18\n1ad870a4-4f4b-4dc2-abd9-614f2f1b3ac7\n0bf0d4d2-870e-4eca-8ad4-70ab3942d9d2\n1c702dd7-3c8c-4888-a701-195db0c98163\n38a8ef36-fa78-4461-9c11-e363c13f693f\na18e9719-0f15-4159-9035-a75f57cbad60\n6ee9f619-ad5b-4597-8988-29529ed92358\n1ae052be-2282-42a5-bb0c-b90d7a147905\n456edc44-6f68-4535-b2b6-2736ac513490\nd3458e14-9864-4849-ac3f-c573c53aceb9\nd6c465f4-178e-4b09-9b7b-114c2e6862b6\n1df84679-b22a-4880-b74e-eacab00689d7\n8fef7dc5-e63f-4932-96d1-435effdffc8c\nd0afb7c9-35b6-4471-85fa-8e08c90bdcd4\nf915ae26-a239-485b-825c-e09bc8dff2c6\nf11a51fb-bfde-4054-9900-9f01322e2935\n5dfe4938-6d0a-4c58-a0fd-bd68ed2896a7\ndc4b4940-4dd0-4b56-8613-821b65599a35\n3370b410-6038-4b63-952c-10ec60328e1b\ne032ca10-b60e-4c74-b35a-630e32a114b2\nc1708aca-b85a-4b95-8106-4b80204a7f37\na1f6f3f2-c4cd-42e5-a8cf-04233ead2dba\ncc38b95c-34b2-4c68-83cf-d62b339ac30d\ned6d4f2e-1d59-4b71-83bc-5bc86a842775\n7a5fc453-2e5f-48a0-90ac-a06eb1eb30d0\n1c6a1518-7478-45bd-8fb7-2d0acd6f2057\nbc000552-e151-4c93-a831-61b78740c7d0\na0d23132-3a46-42a9-88b6-602c84f73d14\na542ba5d-a322-4fed-ae7a-5fab317f2bcf\nd6e04b7e-0c0f-4371-8892-44da36e830bf\nd7c4bd6c-3958-4fc8-97a4-75c42e9218fd\n8edde69d-96e3-4917-8383-ff25b01f6c0c\nc21bd6ad-723d-4e26-ba44-98f416e10fde\n6ea16c2c-1ad1-4629-bed4-83ae2bd223f4\ncfb7c2dc-af6d-493e-92f1-9427ff7e89e8\ne48e809f-2acf-4c12-93ca-30b5e37978b1\nefb25233-0f0d-4cfa-a51d-8c4681da8000\ndfa0b890-6bfb-44cd-bc5c-72271f8a5437\n373d0981-71f5-4e38-a1dd-f51327f2ced0\nee4b113c-ac21-4715-afed-83b44b31e697\ndaab224d-9dc9-48cf-a4aa-c71751e10665\nfe3a5349-5af9-4060-81d9-8de135e01b72\ne1cdaf0b-da1f-42bd-81af-caa54e306994\n68dbdcc2-0d49-404c-baf2-d59e95bd5563\nb7090741-e82f-4b2b-8e76-4348da3f4052\ne98787a7-b7dc-4313-a1bb-5361f7c5b655\ne21326d7-20c1-423e-8d25-d086fb8fe540\n19bfdfeb-9767-4662-8782-ad699b64a786\n4ee93f18-c283-43be-941d-e8632efb2244\nffb1e584-134b-42ec-be83-f610979d575c\n11345e65-d6af-45b5-a780-084821d59421\ne146a347-c82c-41e2-9780-27444b548422\ne59c3d4a-b2c3-4f1f-9777-85f5e937805a\n807b46d6-5f35-4b71-8777-3ee4b7f9e99a\n025c9def-5533-4788-869b-49c9cfe8476b\n329041ea-b805-4946-9b68-b0f518e701fd\n5badf5c2-954d-4806-adc1-4448c05b6242\n68c8a932-2a12-4990-a7ab-10d0e66cbc4a\na114f5ee-ba7a-46fc-9450-6e6d86e54644\nfadd5790-312b-4148-95e2-76d747539add\n6eaef3c5-a2e6-455e-ad69-60a6cfae74d3\n9a1b408e-496c-4e23-b598-6e0d3777dab6\n502da4b8-3a68-4ba0-94a0-2b8ad544f5f9\nd89562cf-f425-44df-89d4-3bba9a595d73\n9de98f32-b05f-44a9-bfd2-662df8263c37\ne2ba31f3-94db-434f-8140-9bee17a3be85\n2ec2ce69-61b7-4881-b37c-fb1210bc2b56\n8eacea3b-9cb1-4e88-b34a-e2dbcc67ffe4\n0f8e2a05-e39c-4e42-b595-984f3cf36bcb\ne9c2591e-fe2a-4134-98b0-4a4457076142\n2f5e39d1-e8fd-4c53-8ad6-ef5e2a0de574\n9874a03d-6e46-413a-acbf-f9ae5d16ceb5\nf80cf362-85bd-4aa9-a6e8-afd5a5991df6\n306c3a81-6dbb-4e88-aa4b-2146e1db6372\n653b7a95-82bf-4243-9b14-3bf2e3920830\nf5b7b098-37b7-423b-b85b-22dc38ee7829\nb2e67f10-f11b-4f05-a4d0-116cf89210f6\naf4e9b9b-6334-4117-b30c-466e387e65d6\n05ef97d3-0dfe-4ea8-aa2d-087a1663b7b7\nd917699d-3d6a-47e3-a77f-9fca39774201\nde9d208a-c2a2-4333-ba23-179023d3e2be\ndf52ef4e-d631-49c7-a3a6-c4e9744d0ff7\n8b4d7f74-71a8-4bb1-9b32-88f24fc4cc83\n539374c0-6eff-4c51-8504-4a746b341de4\n99e07c18-3db3-42b1-92aa-bf9123dcbe59\n16849ea9-7621-4415-b191-d15ef453559e\nb4234349-8a57-4d9c-aec8-a4f5707617a0\n929e9fa9-95ba-4600-b2d0-0fde717ab901\n5fed9752-d8b4-4610-b766-066fb60bbcb4\n035ffe60-873b-482f-ab87-e73d0233f43c\n70e04206-d5ea-46aa-a48b-b287b7122c2e\n7eaf9bc8-582f-40fd-8589-8aad3daba886\n76a4037d-fab8-400a-8d2c-71270c0f1d01\n76edfdd5-96a1-43b2-af68-79ae09d24ba1\n17c9d005-0e33-4d24-ac50-566e941e8af9\nb4c18182-68b1-4be2-98d2-5aa83b6bacfc\n5056a9ce-d922-4770-a993-b72e7ef99263\n0068603c-baf3-4467-9b11-086fa6626149\n715f9351-55c4-4ef0-8475-e9b394e3f096\n0c9118de-3d76-4b2e-b15f-de2544e71fa0\n148a7d19-9293-47f9-aec9-649356a21422\ned9511c3-8859-4473-8f7f-e90fb3f5627b\n1c3878a0-010a-4d13-9820-38e8c2a49a1c\n2af5cbc7-98f6-40f5-afcf-9746cf6361d0\n0cf5b64b-cf2d-424b-b160-cf6f52dcebb6\n9370dd94-46f5-48b2-8750-de03b543b18b\n0124ee15-5a16-42a4-bf6e-16f246d8b364\n842ebbca-9979-4ca8-970e-2427f06627e6\n22049474-3cc6-4638-80c7-b4ed4a0139bb\ncf5f6f11-39ca-4cfd-a16a-60abc8432c2d\n64046e9e-f705-4ff7-bdcc-22c692b009c0\ne22d5846-345b-4716-8542-55c3ad97f223\nd9696744-d52b-41c0-aa1c-2ac1d0f1888f\ne57230d9-dd0f-429e-ada7-10c1f5839c71\nb17e8b23-e586-48e5-a784-eb85a66fdcc1\n377ce682-12b5-454f-961b-b2092bad8154\nb3671550-9a9e-4099-a7f4-098151977b31\n71da52e0-d849-4ad7-8662-3d097cdb5bbf\n823bb0a6-1fb3-4804-b3b3-1d4bf2dd51ae\n1c05f0b1-9506-412f-bb09-36a1bead7f4d\n2b2418a6-b7e7-4233-b493-ee1cdb52fd28\n148b700f-036a-4399-94d6-5ca7fffcd534\n4a830fa6-cc11-4773-9c82-c7ff57de70d9\n0bc9f34e-11af-4c2b-a91b-de44d0895723\n04809e9b-6864-4015-a23c-212d5884a82b\nadcdb19c-df72-47cc-bd28-5c36f9801349\n6663a804-6b1e-46b4-930a-ca5bb55d3f6d\n6254ea5d-9b62-4d95-aa58-14f52b44978c\n30cf130d-c5a3-43b8-90fd-4ca2cb015ccd\ndf8405c3-5f58-4be0-99e9-baa051d2b190\n3023a1a7-d702-4800-aeec-61f09350577a\n57747e33-3374-4122-a2cf-3bb7cde6ebac\n535261f2-0ba6-45de-b686-0366c8455d9b\nb15830eb-79de-4f43-877c-92791c0ecdab\nd290fa1a-e1d5-4e65-8703-8766b84c234c\na0d5a550-2e16-4378-be9d-10acb5ff76fd\n3b8825dd-32cc-4a7b-8e7b-7f3477c3e4f6\nf7682f1f-0d18-4137-addd-9b1aa2630f15\n9f51a80a-6970-4d0e-9354-49f1ba1cb8ff\n83451ac2-d38d-4b23-9aa3-03fadf57ef66\n7d77cdad-e252-40e5-922a-487085f31812\n1a016a11-ed82-4c05-a729-91f0a932bd88\n064eaf0f-86d3-41c7-8bf0-66e44e344d00\ne9102e42-e041-4473-b2e6-c2439a3f4bd1\n545dac0b-08c9-4e2a-8025-7e7d2a578666\nfed7fa0e-a6d3-42d8-af78-020e5f2812d8\n2746306e-630d-45e7-bafd-4325eb1c75ba\n96714e3e-292c-40c6-b18f-8f2dea17b1f2\n13b5189d-a715-4b83-82e4-beb73649540b\nde61ab51-0f25-46ab-9268-02c8f0144fe7\nf684640e-3f00-4299-8021-00e0e6181b4e\n26615a12-986d-4d0c-b22c-fc0cbc77e929\n3ea1b9d3-3528-49cd-9aee-7f51226df655\n34b4a01e-995a-4e2b-bc5a-7240645aa67b\n4069cdf2-bd3e-43a9-86da-f643e858553f\n51ad762f-7f82-4abe-b91b-94339b64d620\nd808af79-dc22-43c3-8e5b-edcbc54e0f15\n08a4d6fb-21e4-40e0-bd38-01fa10517789\n9b485c3c-70ec-4aa2-96f3-df9aac895031\n1ad2a389-b228-4198-bc15-436c709371b3\n4eb6b3da-5c04-46d1-94b1-66453fea081b\n06c8fc28-7696-461d-8df0-3019bf126811\n82750bde-ff9c-472a-ad53-26c445280a91\nf21d50a7-3f2d-4ddc-af44-5b68ce1ff640\n715dbd91-ef4f-464d-90bc-7d84549f27b9\na14f454c-e473-4519-a4bd-6b0bdeee682a\n193fa389-212a-4b7a-8201-a7a6daeecf71\n8d3c1a1b-21e4-459e-8b11-196b9e5e1bc5\n0e3d79e8-448c-483b-9131-fea12be973fb\n1843f2ca-d1f1-4ca9-b960-f12f34902c3a\nc0715a7e-148f-42f1-846c-a1f204764307\n8b8bc2a2-33b2-4730-b530-26d49bac4dd1\nad4dba97-9416-4ac8-a713-6c91074767aa\n1bb749c1-dedd-43b5-b57b-38ea2bce3ba0\n400aab3a-eefb-4594-a7d8-b156dc4ee680\na9032491-7253-4bb9-8dc6-819908acba91\n528b346b-0b5a-4f71-9f11-dafbc39705fa\n63b73200-b364-4162-aed1-0ab6532cc7ae\n93a35504-0761-4dad-a851-c5e63a6cad45\n08fdd400-89bd-4f39-ad99-08d969edaa55\n2422d13b-1632-4a1b-8f7f-3a53275d501e\nfa214f61-1735-48e0-8be7-3347b6ddcb46\n277190e9-e197-4822-ad43-7d2aff456fe0\n550bf45c-f462-4870-9934-7d1708f3ecfa\n40270625-0dbd-42a9-915e-d5074992edd1\n5b2f9a9e-3f63-409a-97f9-d261263b8d40\ndf4d0d1b-2832-490d-b67e-df72e629fb02\n511c8f4b-c815-4262-b60c-27d8ce4e5c75\nd8c89284-4dd6-4f56-807a-81c9987f15f6\n423543ab-d423-41c8-ab2f-465ec7dd7370\n8b2f095a-27c2-46cc-86eb-7f9d76bfc115\n19b5296d-585b-41a2-a5c6-3ab8fe278d3a\n27ae319b-1ce5-4c99-abad-d2cac56ef5a2\n50a130b3-fa4d-4339-9092-6938cc9498bc\n9c887602-0cc5-445d-9632-6d62c448d352\n596f0e72-b9b4-435c-bd9a-cd0f06dfce8d\n37008105-c31d-4197-b954-8a4dae443528\n21fa3f2a-3c62-4718-8eea-bf687bf2a579\n48d74798-7300-41cd-9b3d-2cab760766e7\na1eacfc6-0ea2-407a-b389-6a2582b65024\n2f12dbd9-be09-4b5f-998f-2046885a8a98\n78e5b57f-a9b1-49ce-9160-2f32fe62570f\n87d3f0dd-df57-402e-a3e2-02db953f53fb\n09c3ed66-4659-429d-b57b-9f211fd06655\nc238fddf-a7f4-4194-b9a1-f08b3a15ba8e\n2f3c5d3c-93ba-473c-a9dd-738b77cc14d1\nf799ad1b-8bfb-4090-a40e-6bbd5a9b4a27\na9de459b-60ff-48bf-9261-0b27edefd94e\n2ae45b16-6d3b-41a6-b37a-ce36732b63fb\n86aa131d-fa5e-441f-83dc-532ec66251f8\n21976776-f276-4421-8247-dba755956a0b\n972c047d-ab48-4e13-bbdf-964795685407\n5df755b3-9822-4426-825f-2189e2517398\n9cc53500-d458-4150-aa42-9b12351a8d81\ne1d40171-2221-4506-b7c3-f52e0f6f7a3d\n99bebb7f-05a1-4798-bd8e-d930cea2f468\nb3b96717-9181-4de6-aba3-f688132cd28f\n1b3e6203-eff8-4af6-9783-6ef88ead6df3\n7098e273-9080-441f-a6cb-cb48d7580778\nb0a1cb4b-74bc-4a09-b41a-50eca7636278\n87b558c4-4e36-4818-b31b-677dc7798ffc\nc271bcb6-c78b-43d5-a3b2-e32e6063a86c\n8dc963f7-f53a-4d03-870e-65081d6276e4\n8aa9cb5b-a7ea-4fae-8510-d399eecbe80d\n75888a49-04d3-4d90-83af-4cd486907df8\n33c9641e-d6f2-450d-9368-d659441f23da\nefe2302f-5315-40ac-863b-748623435e49\n9c6ef027-2ee8-4211-8c6e-65b867097399\n8f28850b-60ae-4203-b415-9f14b6472644\n2e11db25-e968-440a-b66c-1fc0fd797939\n4ff64c72-8c3d-4d06-9a00-500669c7e0b7\n1349f0df-78fa-455c-b95a-507db28c457d\nf1fafe7c-836d-4102-85d4-ae75f1477a27\n3131ed1f-e9df-4a36-962e-c0a09b8e8c1c\n8c078f32-8313-458c-ac08-d769ba04ebae\nf6601b85-8f29-45fb-83be-2c8557d91f4e\n851e414f-134e-4158-841d-6e9983986bd3\na2044cf6-c3a0-4620-b1f5-4be091fc46f8\nab2e1874-3364-4077-80de-d4d3f2864a14\nb7953fa1-a87e-48ea-8727-fb14f5e6a8b4\n1d0a3e95-9212-4af2-98c7-964344aca9f3\n1f3321ef-fcce-4e54-b482-e53d3af20d23\nd8a4b539-4b54-4ed1-b89b-21d79763d9fd\n55e5a875-9458-4b34-b57e-5b1b72d39dce\n1c9ba84f-b0ca-4396-b1b1-32c24e4dc3ea\n6ae0baf5-2135-4db7-b342-986807e886e4\n4ba21596-0155-4037-82df-28960792b2c9\n37f596a4-de72-4e57-82f3-91d442de27ef\n635c583f-3a9f-4302-8f61-bdd8b6819dba\n74148790-f334-40aa-ab32-6390f8b0051a\nd0d26c85-e6a2-4abf-ad6a-e7991cf56724\n193e89be-6af8-4cc9-b983-7f997ba375d4\nb56a0bf1-be6c-419c-98de-cdfc0cc06c61\n36473ce1-c4e2-4a23-bef5-87d86ba9e637\n2ed05ba6-f465-44fe-bf64-d4e63b86552d\n2cc33379-d07e-4e30-94ab-8f1411404194\n7579a33a-3deb-4807-8830-77a7d5bca531\n4225926c-0672-49bc-8bf0-93a1041934d9\n02d14eb2-aada-4066-a9e9-9fb44815ae8a\n6553c401-bcb3-4032-ad12-b25b7d6238b8\n0dd81239-3bbe-43f9-8790-c063bb609ea8\n39efaa71-bb71-42a8-98ec-ab8575f7ae96\nc77cece3-273c-4513-a671-98fdf339e2b7\naa28cd66-c35b-4d97-9fc3-d3f33a172d73\n2e87665d-9b70-4f57-a33b-9266937a1d02\n1ed21268-7f79-45d3-99ac-5f84ca98d936\n6c4c26ba-5588-4894-ba0d-c8c6c9278aa1\n2fd3b05f-3ee9-494b-aaf9-755587fa414d\n1aaa903e-5630-4725-9b36-b588a2265361\n37e73b29-90d1-4378-baf7-18d23938877f\n571e4b38-4513-4445-91ac-6ccdc7089fd0\n8d8a305f-7af1-4f4c-aa4e-680738666e50\n5bd8921c-3e86-4eeb-947b-a7311c90e09b\nfe4b96dd-298b-4d7d-9777-55e3f2a3fc2b\n8478faec-99fd-45d6-88b8-3e99fe6ce525\nea48ddc6-c39c-4563-91bd-0bfc1b3e77d9\na603938d-b687-470b-8808-50a4f4491b4e\ne99d5774-266c-45c5-a6c0-6c72129084c0\nf50a1bd4-3d75-4fb6-aa76-de6c51612f63\n9d2bcec6-bfed-475f-9e67-fcde00e4d9b0\n8f8b924e-9bc4-4aa8-926a-532ce5c2e837\n85ddbce2-0d90-46f2-b22c-e17c87b84fde\n14437bf3-560c-4cda-9dcb-91ed611a6f49\n8fa21ec9-1597-4782-86be-e25f77f5bdea\n35bc9f4d-f099-401a-aa41-3f30cb060110\n0adf5d94-d8dd-44d8-bd6c-03cfd3e80766\n15b1476b-c201-440c-9c03-74b603c564ec\nf2b10616-9901-42b6-936c-11b3635a4f1e\ncba2c9e9-8b53-431a-b779-d18c20baf574\n3f71a3ad-b3ae-4592-a3c7-5a97ac985cc4\n7ed85243-e517-4b7a-966e-1510816145e0\n246b4872-49e6-42ae-9723-9efce0bcae53\n011f471a-e51f-4773-a37b-d794aef5f2ad\n71e15b74-cf6e-4410-a482-721489afd1f9\nbbe5434f-6ec5-489f-96d7-f969be8c7cb0\nd7135c1d-8bbd-45f7-94eb-4b96b6067bed\n4a12f871-9549-4176-bbe1-36ca845c480e\n7360a493-5b00-4f9d-9181-6a730284601a\na6042b56-11f7-48f2-920d-0e1be7cbbfef\ne677a505-7cab-444b-a0e6-b9dda1845f46\n2d332e90-a9d7-4087-805f-e8f5648346f6\n328f556d-4724-4648-aecf-d8b8f0f1444c\n29a090d0-6a65-401f-b51e-35494e5a1a5f\n24d4bf39-ebdb-4640-90d5-0ee8a0071bae\nd8353d6a-9737-475c-b695-2b3c315bfd27\n1a5f07d5-4764-4720-b7c9-45d4c34b7680\ne5feb72a-6001-4210-a50c-ce5511f0217f\n54be968b-790c-43aa-b58f-440267d9611f\n4cb1b37c-02c9-46d5-a250-f8b7bf5006d4\n80e2ffee-dcb3-435f-add3-b71dae9335bd\n90f1f706-9649-4a84-b84d-ebe7e54b3559\n23e5eb26-1fbf-46ce-9835-1cf9ed847436\n1aba0942-f5fc-4cd5-b4d4-2e7d8eae66b1\n67749bb1-a284-48a5-b46b-b830c6d41285\n0ce160fc-96f1-4d35-abad-8ed23230193b\nfa3ce3e7-1001-4ee8-a387-e2cfe5660cd2\n758dc855-7bbe-4828-bf89-5eea3e9cef8b\n77d19f12-cda0-4696-b0bc-576f64ff0f98\nf88cb8dd-ed72-490f-b7c5-20e9a5a55348\ndb6324cb-ecd7-47c0-beee-7a3166e9e95a\n13cc54b0-e152-4cc8-a5d5-0e1a38dd1cee\ncae014cb-3c18-4e62-b29e-de27d6378626\n11928ac1-d37b-4709-883a-2563c1a8a8d7\nd3446345-1c44-47fc-b290-40e60e308688\nead442ad-df45-4187-874f-194dc53ee63b\ne3e162dc-8e87-40a1-96e8-d34ef7bcb3a6\n58376d09-5460-418b-ae63-6ddb15e0d4fe\n52245762-30f0-45ad-af0c-d93e8b722cb6\n8bd18171-c4c0-45e1-8787-fdcd1805167c\n08afff56-ad66-4f9c-95d0-15caf8f10138\nad603b9f-b18f-4c4c-87b3-d0601371f8c3\nc179f5f9-f9db-46e1-9cc3-376c66ed28cb\ne7384178-07ae-4908-8d78-961e110088a7\nc3440bcc-ce1b-4c0d-a17b-68e54e5659c6\n6a1fcb53-dcab-4aa6-a61d-8f9fb5139e6c\n0f40b882-d812-4e17-aec0-688d2c967fd3\n3c08d320-32fd-4e35-bbb6-75d696e4939b\n8a248593-7158-492b-8f7d-9a73974cb9b5\nc8b5c676-8bad-4110-af75-6563813d3114\nbca696b7-550f-4086-98b6-79dabdbeda58\n338e93ad-c8bc-4c12-996d-3dab5a59e523\n3ec3b11e-72f5-4e2e-b3d6-ca479b7b7400\nabdf9904-b272-4ccc-b866-603ae6c83166\nec57bcd8-4455-4358-8da6-81898a776d9f\n70419175-8238-4676-afb6-60be44d73188\n74e018da-dabc-476d-a2aa-e81605f03da9\n563c3a0f-089d-45a8-a2fb-22849a8d9846\nb70082dd-66fa-49f2-910d-5d153b03440d\nf59fd0ff-f0d3-4073-bb0b-f497e9f05f13\n47542c33-524d-4646-86f4-1c41d8425f5d\na755e8f6-e93d-4c92-96bc-9c3366c22b3d\n1fb9c470-ae01-4662-920c-aa2adc32dcb3\n1e328e7e-d411-4fed-8d32-2a59aa8ae24a\nf810ce2a-5d04-4a5d-b15e-b0cca5165542\n4ed209ff-02c6-44d3-a21f-009ad731f488\n1b3ee6e1-39e2-4b38-92ec-469a0d8315f0\n88283ab5-0bf7-4df3-93b6-28ced6f97bcd\na906ab14-0bba-4f68-a49e-9386e72bdfe8\ne55998cd-734b-49be-8e60-a66d2d93cc50\ne9b84423-d0c6-4330-b3ec-7da7fd3c1b64\n48f5e36f-794f-47a8-9d49-0b3bfc4cb52e\nb3cec539-0b74-40ef-9c82-02cd2fd766c9\nbeacf619-63bc-410b-95d4-e2335aebef0f\nef96c20c-b399-4e68-9193-59ed6e764f94\nfc0992af-b61a-46e7-85ce-7ec58a4af515\n5e39eb70-d29e-471c-9217-44dbecfc3348\n7d7ad131-df01-4cec-92b7-2dc2773c4ef1\ncee5f35d-b011-45ad-ad68-50b1575ca260\nc57775a4-2791-4dee-a33f-436e723811d9\n498d8536-5df3-4b73-b609-be98bf0bdeda\n64687e61-7d65-4b86-8b7a-311d4e008ba7\n2962b3d1-b7a9-4a2b-be51-527a76282980\na18f9c0c-e198-4f55-b37d-5e7607643320\n1da0f0e2-f362-411a-8d49-9057116e6a82\n89266ca1-80ee-45f8-9b18-160a226d636b\neb64127a-76e4-427e-8670-1e9b83f71ef2\n5ccff07a-8f3a-44cf-b72e-391da88c8d18\nd489c6fc-7dcd-4a46-aab5-6c470b21a3f0\n0cb1189f-a0c9-4a34-881a-ddaf37847a8a\n80607667-e943-4869-aa59-6a5927cc0f2f\n060b6410-30a5-478f-ab43-522b9eb746a7\nc121adcc-be7c-436a-9a0b-61baa09179d8\n6958e8fb-4b15-4d84-baeb-80ef6bb5ce9f\nd73c3994-2aaf-42fc-b83a-444b9ecf88f4\naa777c17-21a8-4647-9928-003984ee43e8\n506da300-93f5-490b-9675-10d5e9d745f3\nfe64d3d5-e3ce-44a7-98f9-c480148b20f5\na2aad205-805e-4c5d-adf6-725a8ad995c5\n00e3c383-8ba3-43a3-9dc0-381f28fd4bcf\n0fef2e54-2f2d-4500-b549-219ba36f3e37\n5983bb6e-10cc-4c5b-b85a-53f72cf5d99f\n01c01172-e68f-4ba0-b7e1-9e6f825ef4ab\nc521b4ad-c9f0-4222-a5e9-739ac1785670\n2a810d90-8f8d-4c37-8adc-01993304ae8a\n32720a19-252e-48c1-88fd-debbdb66eded\n7a00a9ad-0828-41a8-b391-95593ca845be\n5880354c-a702-421a-ba36-08c3d3809473\n49eaccb1-6093-4d50-a08a-186bd21086d1\n5d1391fb-fe2b-4d5f-8824-848c060f00a9\n44df49cd-e00b-479e-b3c4-c460c85f09eb\nc43257d6-3cfa-4ec8-89ac-c5eec3685a08\n02c9688f-4178-405e-82cd-ce3311b3242f\nd8e95321-5c12-4f3e-b8e3-558094cf2f89\n7d1aae5c-9e24-44d9-a70f-aa04bac7cb00\n2fbfe808-19d2-44e0-a3ac-5396455c3719\n1014a571-7c30-4535-b8e0-e85ab347bc03\ne7cccbf1-813c-43e7-85d7-6741577406f6\na3669c33-b630-4194-a4ee-4abc29e9668f\nc5c147d0-09a8-4800-89d8-3d81331b049a\n9b169224-847a-4f12-b9c9-dea1a51b118a\n901cd96d-c506-4a52-9841-951f1c8ed0e0\ne0750125-ca53-4835-933c-f6258d7882ee\nca6dbb24-21c4-4a18-af42-8635bfce3ffb\n8d7c8959-1fb4-4718-8242-deeef7699aae\n9f56fc6e-4a7d-46e0-b766-c2c434b4484d\nd86c8a4d-6fb1-41be-8fc1-421ce8fffea8\nd1bb7c95-fba5-47bb-9205-641af1314102\n10ea7c39-8ffc-4657-bfc1-45cc813f9913\ncbead40d-a9d6-41da-8fd3-6e743b8a0aed\ne9a9414e-1596-42ac-9d98-f3a3e1319784\nbda7983a-c52b-4f13-a381-594d3cedf7e4\n5860301a-6be6-47d3-a27d-18ad01e0c766\n2a45906c-b67f-468e-aa41-59fe7709dcf5\n72f7b790-57ad-4257-bc0a-91ae61eb92d8\nf655da57-4d68-41f5-afcb-c3c16890139b\n255ed2ab-455f-473c-a02a-ec7ab0c869b5\n58b4bbb2-cad9-4948-b61d-cccf05110744\nf330560e-33dd-4e00-8163-50a87a82fdf7\n1474e749-af17-4e6c-abed-7483c99ded61\nd1c282dc-ae19-4a54-b82c-ee4617449a41\nc0a37173-7d59-4334-b3a1-dbf5f75064f6\n2906009f-6eeb-40c3-8f58-8ea93b02ec86\n6ec5e873-1f79-44c5-bf55-98886b280b8c\n0ee4d896-b17a-4120-902f-24658d352bb0\n9112ce9f-2afa-4b59-92f9-233357dab1d8\nde8becef-0ea8-4254-a34c-f7731778d06e\nbdabc881-9116-430b-996c-f0be36fcfe46\n06c69959-022f-4b0d-9246-a08969879029\n1379cff3-8551-4071-958a-dd6156ba561c\n289a62d7-0537-4d79-9d3e-1a1a38e4da7d\n2ccfd551-3ab6-4786-8202-ecfd8468807b\n52e95597-5e89-4c1f-b313-01491ef958d3\n556ecedd-0b44-4fcd-b223-2a9bc3e2cbeb\n7cc67259-812b-43f2-905b-1fdf2e28d8ba\n97085438-146e-4394-a093-0909244390ad\n41f0e642-243b-4070-ab87-e7ad2a688d3d\ndc6c583a-9e9b-498e-90e9-7daed0df48dd\n49614f64-f0cf-4a9a-877f-c107dacd51df\nb4180451-62e5-4620-b25a-e544ec5f6bc7\nfd546fd5-6c11-4ff5-93ad-bcc0826bede7\n3b66fc2c-4013-45c4-8af9-0b84c305f267\ne37bbef1-b038-45dc-a643-d6956a2b9fb3\naa6df897-3406-4702-904a-21b971aaf89c\n93ba6e57-4367-4567-a6c1-843de2653edd\n640a276f-6eaa-4929-9771-fe3abf38c5ac\n6bc5faac-10ba-492c-a15d-c005bd453bb5\ncf8e122a-8d4b-4ef0-bcba-c6976347bbd4\n07574d5c-f5da-4344-ac3e-b20d011bcf5d\n6da07609-cbfd-4c1b-9cb1-adb4bf462738\nb9bac46c-d930-4955-ad3c-02c3ad316e01\nb73026d7-8c5c-47a8-b750-18c5bbca3bd4\na5615961-6987-4049-aaae-964f0ee50f6f\nd71cace2-a60f-416e-b140-6553449de947\n008a247a-04cb-49fb-96c9-5e2f213a13ef\n653e3658-4590-462f-9917-8bece0fc8dc6\nd2a06375-7f43-4999-baab-30d0f128fa3c\na2334d56-1f79-4475-9015-9c5be869fb59\n5c0b4742-fe6c-4403-bfee-05ac1818b6dc\nee295b43-1131-49c6-af71-12c4af6698c2\n1fa12c40-7edb-49ff-ab38-59b13bd97949\n73a182d7-ba8b-4886-9296-ea0737567e08\n03d81c39-20a7-4bfc-8b25-bc105b327f59\n601a239d-2894-4227-8d27-0a08fb0c76ac\nbd92246e-55b4-48ef-ad4e-c2b3edfc5e31\na564ed01-337b-447f-8ac3-060514e2313f\na9a57fd1-cb9d-4c83-99c9-642e402f6904\n9c9e79c9-5aad-4c2a-8a0e-f7d20ffc7934\nd1e51ee7-e1e2-46e0-974f-9b4110486707\ncfa85cdd-cfc3-4644-83c1-f988088a2354\nac597331-313c-4bc4-8301-9b1870f32f50\nb5e05085-8586-4bea-aecc-1cfdddcd23a1\nde816c45-5708-4f40-8990-ced55ffe0c16\n81787d48-ed43-441f-bd30-1be845aefa1d\n7a933187-c9f5-44f5-b977-4f231de17118\n7125be02-92f0-4490-a2c2-6e05fec2cd9d\nb5a5f082-1a0f-4d01-8c46-30a5f634406e\nf05f0f51-f7da-4ac1-870a-bafd1a7f8acb\n7e4d771e-c313-4824-b702-1e9339050a7b\n2e022593-f345-46af-9526-eeca284de3f5\na0239f57-c8c4-4e78-8fb8-317fe95570c0\ndf707202-5152-4603-b5b7-52063dccbcd7\n804792b1-b66d-4b22-95b1-41649478ffd3\na227e1ac-0ef9-43aa-905d-fccf1283d2dc\n4b5760c7-69b3-48f0-a67c-32a64be592fd\n0ea71e3c-73a5-4634-8dfb-a75e82321e8b\n349c0cf7-b561-4758-8155-915d324f4afe\nd2f11af6-7464-46ba-82cb-ba3b5ceacdc0\nfa4774ff-2f69-4714-ac0c-34ffc5fd87a3\nbd42bcdd-cb33-4c1a-b92c-10c8952f8461\n92657f81-358d-4332-abb9-c3a975350973\nfda8f518-3a8a-403b-8b2b-396ae6e25f5a\nd3ac0698-719a-4ce9-b138-4820cd515437\n19e7287b-7838-4087-aa89-17a3dfa0956c\nc92fc6e1-2a99-4f0c-8c7c-47b229a4c3d2\n9c283e33-3cf7-4c48-b523-f7a36528b6c8\na616875d-cc1e-4f53-87af-5443507792ee\nc3e230d8-6acd-4f50-a05a-a55fbb837580\n1606d929-fba3-4d22-ad70-3545b0d7c071\nfc141c76-56e2-461f-9a9a-433a06f1d171\n681c0c15-eab9-4a26-bd8a-6ce6db85837d\nd48594cb-7372-4ff7-aed0-c3de223bc5e7\nb730207a-4582-47a1-9806-34857afffdba\nc1542dec-5020-4f1e-9854-f72e8c40117f\n8afa9155-342e-4ef6-947c-d1cf162a1302\n3803bb01-d8a2-44a7-9adf-29a426ddb485\nbed93493-4f5d-4943-b6d6-1b8930ecf2bb\n1e15bbc6-4f13-4aec-98f9-d3800404983c\n2883a67f-9562-4308-a68d-fd11e53e6029\n3170914b-8e2b-4ed6-b592-45307cfb3622\n60d14264-0f36-46b1-b1dc-318bf7cc9872\na0d1ee87-3133-4e91-ba66-a5c7e572c846\n48cf16e2-1082-42e7-8c26-0074e3e665c6\n787aad7b-2d9f-4c57-bb66-e211d00bb327\n2e559021-b78e-438b-a3ae-5adc206e37e7\nd80f5f4f-e49a-43e3-8aca-2423330f3ab0\ne17188f7-e963-49f6-9483-f7b085d6d29e\ncdb2ec98-c148-4599-80e8-ec0e0466c4b7\nb2a77e36-b967-404b-9473-e8652cc1ca4e\n7b57e403-a2d0-428f-91f2-9528d7251595\n4c90355c-96a5-4253-8b38-512ba2fa1c67\ne2b61891-e7f5-4b4b-b443-56bc13b1adea\n875b7409-99d1-4b80-ab54-e13b9c3352d6\nd1a48f39-7755-40f4-bab1-931ce07dde1e\n71d8aaf7-24d1-4742-9878-5e2b75a284c3\na66d4e3b-e6b6-48cf-9a34-37c004a83133\n805eb9fe-cde5-421e-9987-4c68b5b973cb\n1bca00fe-e181-4a41-86c1-12970654cdac\nef00e673-5391-4f02-8bc0-afc219e9001f\n8d8af42a-a69c-4c3e-b466-9ab0bfc39252\n7ed0d423-4906-4a67-a4f1-0327af3fe778\n739b5406-d69a-44c0-855f-019b0a2d4fe4\ncdbab911-65e6-42cf-a00c-ae6b075e1dfc\nd39cca67-7cad-42fe-bd74-d8ecf796aada\n4b9de717-d1b0-4d19-ba34-a302b03c68f9\n1fb75950-aef6-4ae1-9436-4021d4b6585a\n6939c8d7-15ec-4483-a35e-318257a7ee7b\n6e934c0a-881d-4c93-b493-496386b12f60\n81713216-1cf1-494d-8bc2-f358b5f02f7a\n7b44bc2a-cc02-4c8f-9386-5d389b626a1d\ne9b444fa-30c9-41a9-b487-da5009f93fa3\nc810f430-a0a7-4131-ba57-84385cbabf10\n7db96df5-ac1d-424e-9195-d21ad7444bd9\ncf71124f-457b-4899-8eb6-489329bb02b1\nd837bcea-4cfb-4466-b89d-e6180fe57ead\n71c2af72-faa0-4959-b471-0cc82892efa0\n1398fc73-d07b-4441-a6d2-5083bb4ae9e3\n32af7231-6c99-4e4c-bd82-b68f6ce8a138\n3ad32745-d4c5-401a-b296-b886b3773f60\n3cb7430e-24d0-4049-b182-a3ad3447dde6\n72fabc96-e50a-47ca-ac1e-351d1db94e42\n073734ab-cf07-4dea-9a55-1370297a7fc6\n0f4cd8c9-2fec-45dd-9caa-050e7a6b653b\n9883b3c8-4734-4747-9034-ebf3347b9b9c\n87bb5de8-b978-4119-a6d5-a09864dc7703\n44db1d59-aec6-4836-bab5-fb3c80a802e6\nab3024db-22e3-4aa5-81d9-8bb4740eeed1\n1068789f-b64d-43fb-821f-d16a491eed56\n885884fd-d9a5-4f06-888e-3d49928fdddb\nd8bb0d84-6415-4875-88af-61fe02d8e03e\n93d0a6e7-e80a-4d55-be7a-6ed9e53a7d7a\n19672d56-d32d-4440-9576-75ced7660b81\nfb32a3e3-a3ee-43a1-a022-16f310d57b62\n2c311b35-55c3-465a-b531-72b909913c55\n339e348d-ee84-42a3-8b70-23a60accaf69\nad99eaa3-54d8-4247-9d9a-7190f313d3a9\n1e1f0a52-b8b0-4d35-a80c-8f4232849407\n84e5866f-27d3-4d96-9e0c-ea605f1b5213\n37e64030-904e-478e-a4fa-077ebd276a63\n1759dba6-5a39-41e3-bc8c-1fdbe853c6c0\n5a67ad79-11c5-4397-b395-5fd33bcc1ec2\n7b5e662c-6abe-4e90-89be-0a1482431b07\n061246db-80e7-48a0-b008-33c801dfbea0\n3265eb73-6aec-43e7-ae78-981d7dd6535e\n70c5748e-fc16-48f2-a620-2d8e4ffca9af\ne335c35d-3b38-4b9d-ad2b-6929250fa4c0\n38b762c1-2c12-4c86-8369-0ca13e0cfdaf\n48a5f615-e2f5-4a74-94da-66660b9a860a\n0697dea5-a5a4-46eb-ae4d-63c9615abde2\n1dbbfce1-e6bb-41e3-915e-43fc0eee793a\n3acc4d23-9807-4b89-89ca-062776068689\n5415cd1a-b1bd-4c6e-b28e-e106e3fd68b7\n70c01005-6e12-44c6-9fee-bd5a89e1aa00\n9f8b4a90-c878-4c5d-8926-a313e4f90636\n3c64bac7-6ed4-4473-a28c-874884da75f9\n0b86eee6-a30e-460f-8248-4a3d4d618f26\n6cb28935-d75f-498d-b3ad-f773a2a7905b\n21fce887-2c1d-446e-a00e-0d5916d5c5c5\n1e662f2b-f92f-4db1-bb8b-2d94b5c24d5c\nca0a973b-c780-4fd8-8e16-ea0f573d495b\n9af41552-bae1-45f6-940b-5653bcf0c829\ne6f60881-6789-4224-aa35-26d87f36eecd\n670ac740-7059-43bc-954a-d33695c2fa1a\n18871852-19f2-490a-862b-fc50529263f7\n6b060c1a-4d5c-4e9b-a303-b619da488f88\n5bf5e8ac-9387-41a5-8cc5-a8c66a66de7a\n5e6f243c-d057-4d11-b364-79b344881415\naf83e574-051c-4aa3-8259-7e8f2b3064bf\na0217ae5-1e22-488f-afa7-3f8895efce74\n65150b1a-f9dd-4af5-9063-25cfaaf71fd8\n76f6ff8a-4ee3-4a3b-8174-6d23795fd013\nd5bae149-681f-4dad-853b-607a4dc32607\n8149dffa-a8a5-44f1-b15b-9bc815a36681\n7aa0c155-2880-480d-bb76-f192853384ad\nc0ba1443-e997-4cf3-90e7-9b86544049ac\nfe26633b-f4b0-4f24-b71b-d239d5e697c0\nfd637adb-dcb6-4df9-bdf7-ce2444c6c391\n9bdf84c4-a740-45c0-8815-c99ff5b8990e\n81d8bb1c-05d3-4b7d-9fc0-a111961a512c\n591c28d5-a565-4e8d-9209-dba4cd96c723\na89613e2-9995-48f7-8fe1-e0642422bc30\n93dfbf13-66c6-4c65-80da-c5ec6ff863ac\nc15e4efc-9462-4f10-9295-aca341ba5470\n91299e91-f6a1-4079-9a35-08fa76d2176c\n96e08567-e140-447b-a7a1-a6a0c1f7c9a0\n0ac0552b-d296-4bd4-9e57-75e97889ca20\nfa293086-6e79-44ca-bb8f-017e81d789c4\n8dd22e3e-ec18-4a63-83e3-92641c85ceb2\nda11fedf-cdb9-4bf5-a9d6-d0b2120d7cda\n11e8a8a4-daee-42c3-8f76-05a52558ef58\n0fee8798-e807-4f48-a8cc-88d8babf6b7d\n4815c70f-389b-4be5-8db4-6f2e1976f277\nd451ab14-4cc9-4784-b013-e539fec66133\nebab5dac-da33-4aa1-8593-7750c1f06452\n9b91449c-63d9-4fd8-b2c4-57ee44760330\n34aec4bb-ce56-4e41-9294-bdfa00b4ddd7\n8d59d28a-4d16-4873-9def-fdc007b196ec\n0a266e52-bd26-47fb-9228-2c3c7281dc68\ne4ad2826-ec0c-4c9d-8ae7-35cb2890e836\na9d762c6-8ba7-4b2f-971e-417004cf5fcc\n690bf412-545f-4454-81b0-cb764a6fc629\nc9c87621-b473-4480-a293-2fae26dc182b\n5ab3e99b-8cee-4985-9033-7b4a7a852c95\ne2640467-0496-44c1-b8b2-5cbaf922776b\n3d9944a5-90ff-4749-b8c0-2a9010c829f1\n65bac640-2bd8-475e-8ca0-2da7da8b974e\n1c865fea-ab52-42af-bd44-21a9fc2eb46e\n63d2ac20-1bc3-4dc4-bd24-a0d49c988f4d\nc599b657-3f80-4f87-8563-a47b993d6538\na5aaebb7-e12b-4663-9bf4-29db46958ae0\nc23e0d18-5380-4505-872d-2ba82f850464\nee8c70e8-d3f9-473a-b3eb-81f8c9c8059e\nd9838d50-de9e-4e7f-81b3-0b828b9e81fa\n4d77a3ad-31f4-47ab-9b73-4f27ff46cfaa\nf0ecd583-9d91-404f-b8f7-ecb04bc9e0a3\n0d614c65-863b-4186-b01c-84487d5c0582\nad77b532-15bc-4aee-adfe-e80ef74652c0\n71e11302-809d-4f6e-a544-15a55cf52780\nb6afd838-ec74-46d5-b3eb-3c1d63dbc700\n2be03a8c-3659-4e35-8acd-e9c75a0c2995\nae443e5f-99fb-42de-8229-288f148adfd8\n015d9091-404f-4a09-977e-6daace676566\n8bafcc1a-c806-4c0c-8a2c-67fdf442e16a\n537b190e-b3a3-44bd-8ff5-2e61eb879953\n7d9e46c7-efb3-437a-9a69-512d972f25c7\nfc347c32-1b7f-4817-ad4e-9c65e5d10d69\n42151d07-a5e9-42de-ab6b-04c6f779c2ea\n5afcd8bc-8edd-4c02-ae50-5369791cc164\n3367f4a9-1af4-495f-a4ee-74f43940d5dd\n06a85686-7210-4ba7-95c7-7eff84fa540a\n0add511f-102e-4014-b5c0-5c6deb6b7386\n1b05e1a7-2c5f-4739-8dea-f81c01de920d\n15c865c5-7d4f-4a27-9474-34c9ffd2a8ed\n9403d037-0126-49bc-ab75-d5c236d62b55\n3e78d200-edb7-4b25-81f2-6d7b55b9d273\n9774ee7d-6264-4649-a5ee-8c55318be363\n7807b842-6370-48ae-b34c-42b6ba8e9874\n2c25d77f-d258-48b5-89d7-ab5dfbd33b70\n2c37750c-537f-4f7c-9bff-c23b016a2a67\n9a9cc8d9-7213-482f-a0e7-b2251d2cbde5\n40789361-6ad5-4fa1-a99f-b4789fac0063\nf8700830-c971-4508-9068-dbb61bdca605\na19c7068-69a5-436b-b3e1-00715d61f412\n0cf1d7a1-0693-477f-9297-efdb101d9ad3\n2ebfcec9-9606-4e5a-9dac-161ef049e61c\n3481ff7c-213c-4936-83c3-5f5d4b78efb6\n3c42373e-871e-4f6f-8bcb-0e41a77ba935\nb15c2c2c-2e6e-4396-a2a3-f0bada187748\n65151b8c-43c3-44ca-b7c7-35fcb986eef7\nd5f12ab2-0a6b-433a-bca5-f79587392ae7\n5fe4c48b-20e8-44e0-9e9a-515caaccacfd\n4b32c137-178d-4eb8-993b-efb08f2f0048\n4fb1a5ec-149f-4d31-ab34-0dafdc9e7ff4\n6d4803ce-063b-41c3-b861-3e7f362768db\n12b585d1-474c-41ed-b891-dfc57501d317\n38186af3-2416-4160-b03d-c726d5ba8691\nf4852b45-88de-4824-9596-066f389d0361\nb83da90d-e971-4c13-8853-4fb2334dab63\nea17c426-f401-4b99-8183-37a55cb6cf9f\n67bb6c40-1cd5-43c8-b2c5-de7e90667ddd\n6bf91e62-0cb9-4bbb-9cf8-46e8618359f7\nfbc75a3a-5dbe-427f-b1ec-12882eb01e49\n50622809-4c56-4fd3-91c2-160d31e12606\na7d1cce8-6079-4afc-835d-2e21eb30529d\nbb1dc7ac-2a9d-4b94-8ae6-7f548f94044c\nf2a01582-e04d-4082-b868-7aab081070c7\na812e714-ee2f-4c5d-b31d-caaa8f1f9a0f\ncc3c9568-a78e-49d3-bccb-0dec18187444\n96630398-6bf8-494a-9e2d-a8955bfa08de\n770ac3a2-7f1a-47c4-a186-86ee65225dcc\nb7b86f6c-9aa9-4e38-ad43-363511991fdd\nd50d274a-7e00-4ba4-ac03-f4feee25a096\ndd72a826-7985-436f-8fb3-525e51d7ec04\n61d9504f-e8f4-49f3-813f-92bc122cf6e5\nf1a73c27-ebd3-4b68-80ee-b4c279f97113\n4efc7460-d4f7-4fd3-9c4e-08ffb3131974\na0c4d8a3-0caf-42ff-9adc-b7710592900d\ndedbb212-f7d7-4aec-bc90-1bd1364ef3bb\n775d269c-b855-4ff1-8013-9a757644ace0\ne20cb014-2856-421f-8404-5861c71f1676\nbea66b22-a116-44c6-a178-bacfa40e43c5\na7ca5e55-3ae4-4285-9068-ad10e7195aa3\ne7400354-c4c3-4ddf-bead-bb1de4bd344f\n413b510c-b43a-48fd-ac1b-ab8576a3e53a\n7a4e82a7-27a8-4f84-8c2e-fd747955bc70\n9e858143-8990-43cc-8ff3-022ce45d5b00\n8c67b0ae-7602-441f-be32-762367a32503\n3652e76f-54da-480c-8e0f-a75b4ce8f160\n8de38128-403a-42cc-b51e-74eb18743ac2\ne9ed59fb-5f78-4fe2-bf3a-cbc2cbf91b40\n15b79bfb-ae85-4f54-9acd-f82b922139a8\nd2bc2290-e5cf-42ea-8374-4dabfde0d892\n17056904-aca5-4229-89cb-050936340bfb\n0183f5fc-10dd-42d1-98e3-95f91fbe83ce\ne39b1caf-288b-47e3-acd4-a5030800178a\nead77d74-6614-4b80-931f-9a7b9821de96\n523f9acb-b9e3-4297-8753-077e883d5b62\n0a3bd084-71da-4bf3-92cc-2ec54ef25d29\n9e6ef062-3e00-40d2-8a7f-7add21a14742\n661cbe06-88af-4e57-98ea-decf9a5f3543\n573d62ac-e74c-46ba-aebd-ac75f4f104e3\n6f9f6795-06c6-4dea-b684-954c533ef707\n61b7cf7e-a8e8-41f1-b459-0adcf4c8a604\naf10dfa6-64af-44a5-9cfb-607e46337b7b\n5673d7a5-8562-4673-98be-9908da0fc949\ncff062ce-3ccb-416d-b78a-e3c7da2683c8\nea1fbfa0-2203-40e3-90ba-152b6b711123\n7429dc0b-b21a-46c0-9beb-c03a4f40f8a3\n723cfed0-76bc-494b-bf1e-6169f15bcd3b\n3055a7d9-f57d-4248-90d9-e0e9d613c7c5\n9b41a3e8-3b74-41f3-9adb-9d9224433324\n0179df9e-8380-4818-b749-4229175f9ecc\ne8694c65-7327-4560-adab-65b2d3503661\n49f84515-8b6c-4917-a33e-9737cc9bc236\nf29bb833-8290-462c-8808-d3166ac9c6af\n5f1ee311-163e-444f-b370-7b792dd32a3f\n75c9cb5b-bc37-43bb-83d2-83163a6fb061\n717d6698-11ab-488c-aad6-1b918bc7d77b\nd1e8673d-180f-47b7-9eef-ec9e197dc00c\n7c8252a4-6dd0-493b-b693-1e5c48baef4b\n45635009-d918-4e6b-9ae5-068f3156ef1e\nff98f5fe-01fc-448e-93da-0b899fd82c33\ne28664da-cff5-45b9-8f00-ebc107f2e4a6\nf1156c11-2cdc-4dab-a80e-b19887d548a8\n35d151f2-ff6d-452e-af41-02b29533d1da\n508163db-1027-4b34-89d9-47619ab8f4af\n19016524-0597-4e0b-9046-a19648a8dcbc\nbd07d75c-4ca4-4f11-934b-c63dd67a8fc7\n0dea3003-41fa-4c20-ac89-edc87b4d693e\n77d996bd-32a2-401f-9389-d276e94fe7c6\n6aa39131-0af4-4bfc-8152-87821d5dcd57\ne2665d63-e48b-4d15-a255-78903f08de5f\n4242b885-4c81-4a64-8659-81bbb6e887d5\nf73caf44-c5d9-44bb-aa0c-7d61acc0a1d3\nf6eb43dc-7702-47a2-a99b-dbe20b4cc760\n2d037d53-2102-4cec-b8af-fe8eccc0b266\n10775c58-83b5-4834-9954-8204760127e3\nfb8d7e35-77da-4426-9e9f-5ae7db9f1d0c\n319cca35-50b6-4766-b13c-3c34d721c6e2\n976fb015-5b5e-413c-8a23-db8bbe5d1cf1\n88aaa0ff-f9b1-4bd8-a5c1-df9fbccc26f1\nf2508870-421c-4178-a8a3-356f64858697\n4ad1f471-86d6-439e-9cb1-0e41c98f15f0\n1e26e4f8-74e0-42af-b006-eaf6a65b95fb\na866b8cc-b773-4aa5-9868-f23164b6f265\n4a826a79-d366-4bee-8b56-2a687e4c18a2\nabe1751b-0051-4bb5-9008-9f46b80a3f90\n5f56744f-4614-4c65-b14a-5973464035f8\n3a2b6e94-d2bd-480a-9b91-f6ea84c0f672\nc394908c-7ebe-43b2-896c-36b9a5397200\n441c3c34-2dbf-42ef-9618-b8144c5af949\n54b780f2-ba9e-40ad-afb0-d05ce1717633\n8d318da0-17f1-466a-870e-9199c6ac848b\n0da29a09-b8e3-4993-9e34-a40be7730a83\nc76f0c7b-acb3-4fd1-835f-a2588c084339\na93731ea-f2aa-46a8-8330-fcf7fc568931\n5c48f11e-9dd7-4f9f-8fa9-84dad326b10b\n48c66a84-d181-4b64-9afd-e60e459af0fd\neb76fa4d-32d2-4d84-b71b-5d8d94a1a184\n1d6e9154-69e3-418e-b3ed-8e473ed94ce0\n2441657d-9ac0-4b7d-ad10-c8b91c05c996\n89ac1d6b-ca1e-4a42-b087-f40401639a0b\n3c88e97f-b4ac-4ffd-b9b5-7445de5eed06\n127cb661-85ed-4e4b-ae29-34d45b213150\nb437a741-9c97-451e-9084-2461d9c046ef\ne4107799-f9b4-418c-8e39-5df1f48b797d\n88a7d69d-ec9e-4b50-a965-763796b1c7d4\n913ca546-e618-4b0e-858c-c69e3b9eccdf\nf6147b4c-f91f-46b9-8b5f-d87737b1cff2\nfca4fcfa-4c32-41bd-acc7-9e399e3a1e89\ne1c84574-cea5-40e3-83ed-f670761b29a8\n3325c684-c0d5-4c3b-8c37-f9f585aeb6f0\nfa4c5641-93b4-43c0-97dd-4f7229d509d4\n9c28f943-87b8-4878-a83e-32a0776ff493\nd088602b-cec5-45ff-9c4e-876bdc14dfb0\nd634dab2-c051-4963-8e31-4bb29a9f7c35\nae0fff12-86d9-42fa-bfaf-cbe0a1929850\nb71a3b7d-9f3f-493d-b6c2-a7c3b5ef23b4\n88fc3718-1a95-42e2-b0fe-0b0b99120c81\n4c7ab2af-c84d-46c5-a05e-da1d4077c49a\n1f71d0b7-d259-4e1c-924e-1572557c8b32\n538a9dc8-56b7-4c9d-a258-ee04dffdf7e9\n17486604-8e4a-4a95-887e-0ede183d7ac5\n2ca32c3e-2970-4b2d-97e5-8c187ef1f5e9\n19ed7952-82dc-47b2-b5cd-aaa9375b41dc\n270970b1-3402-42e8-b963-c709a98f4a86\nf114d879-c807-4c28-b274-971f1a5457ee\n8cd6ccb5-fa94-433e-abc6-cd424adc4f06\n446def83-bb78-4f3e-8a0b-a33f3834e175\n6e11213e-b18d-47e9-95a0-941bb6c5eba2\n52e4d76e-0e2a-4a3d-a115-498a15b1cc1f\n53334577-81a6-45af-9220-4058311adeca\n9c58d786-795d-4ba0-b670-fe89eb342828\nf6002eb5-1ac1-4698-84fc-b9c431ff799f\n3720d695-3538-4624-9d1f-094e5af435a6\naf0230c1-6839-4688-9b1e-71f64642e418\na1a2cfc6-1848-4692-9983-784cb001d2e0\nbe864e0b-dfb8-45b5-9427-a7950b736178\nf61bdfd2-9838-4b08-bab7-ed5345e85906\n105b3a39-8cd2-41d7-ae85-6e4698b71de5\n317ba704-6fc8-47fc-9593-9b57c71cca17\nba05813f-be01-4a3f-84df-98b0dc0761c1\n674067fe-9d97-4aaa-ad50-41d07c496df6\n1a7638cc-2a33-4980-b76e-f694273bc216\ne7bf896f-693b-4c34-a274-1948547e247a\n06adcc3c-20da-4d79-ad44-145d2007d88d\n6e093359-7c76-486e-b0b4-ee36a43cf5e7\ned067ad9-52a5-4194-af71-7909b99a1a0e\n7281e824-4842-45e8-bc36-c80189effd0e\naca0b5a1-48c5-4b86-898b-199ae17b07f9\n1cc45f04-f217-4f7e-b1e9-525ba0085d02\n88773420-b790-412a-b9b8-0df0f03b1e2e\n278b496d-e6ec-4115-bb08-242b6d7002e7\n029875ba-4807-4ba3-bfe0-3e126afe62bf\nb5bd0d22-ce7f-4b08-93bd-add5192b9e2c\n7e2412d8-6f76-46ed-8188-5cae1465ddec\n91ec79f9-485a-464e-b186-836914f3cb6e\n7c228bd5-ac8a-4678-a9a0-67bc2de479a9\nc38c4aeb-8470-415f-9438-9d777ec9a623\nf47d25f0-edc2-477b-bc34-a392514c2b15\n61753f87-7b58-47c4-8b0b-478f4b313386\nbdcfef9c-9c55-4ba8-b7a2-4ab716823675\nd879c524-6071-48b8-9bf2-8310a897e0f4\n0030c6fb-eafc-4f2a-97f9-dac0afccfb7a\n20c6b137-e946-4c93-ab4a-96f6f366e48a\nbe8572f0-e460-4b29-9be9-251e414f449c\n1f872ea0-c10d-413e-964a-11e39746e557\n0ebc0581-ae20-4303-b880-55c574e2e292\n287d2703-d548-4625-bf44-56dab93ca351\n04c1cb91-cf64-4a1a-9384-afbf94f32c0b\n351aa4e6-6011-43a4-aaa5-c12665712c55\nd00eb972-44a3-423c-8aa5-06f621d2bceb\n3c50046e-45de-4e0f-9984-9e20b04cff18\nb11dc082-311e-4976-b2ca-6566edd96bcc\ne9582a6e-c523-4162-a795-e05d5d3da429\na0506313-c1c7-46e9-8e9e-39c1148396a8\nafed4d61-043c-44df-b9dd-bbcd9acd5550\nb90a0671-a199-43aa-87a6-559a1850854e\n4bfe0b55-6e86-4d9e-ab9a-8663fd6694ef\nc13afccb-2ed7-4ba8-988f-6c98cf65bcff\n66ffdf0d-ad41-453a-ab06-6fe81e5a01ba\n83c20c84-3cb8-460e-b54e-2b224e5b963b\n81108f33-00c1-4f99-bfa6-d25eb76fb850\nca882928-36b4-4343-b9dc-61e1ac9f6a84\n743a44e2-6f53-42a6-bfc6-6fe3c68cf127\n0d690253-9d38-47e8-a7d4-3eaa57d89c3c\n3d89a50f-f4cf-4cf8-9a84-6f6b4f24873b\n443669ec-02df-4c82-8e27-14ca15a84167\n2e2b8fa7-dee8-494e-8c08-9544285d7ad5\n3b7a313e-f723-4700-bedc-3b9b40c38572\n1423cc75-503e-499b-8120-8b32a8fcb3da\nf30e9f69-0e21-4e03-be66-b74a5cf9e56f\n79ba80b5-3e7e-4f40-afff-b55cf67e6a1d\nd60d4630-5498-4f06-9e9e-2dbc364ed32b\nb7c353d1-3e3e-4752-bd64-eefaa5eb712f\ne2d165fa-5574-41f8-9187-1496daee2842\n6fb146d5-57d0-499a-9a93-933abae59a7a\ndaeea550-9838-4581-af71-b1161d37a1ca\n938f3f84-d6b5-422c-b1e7-74dbb7ba03ea\n2500c600-4e9a-4d63-81fd-27ef392795cb\n46b6810e-422e-4fad-b71f-b76fe25cddf1\n537b82fd-0ac3-4eb3-9bd3-73fc6a4fd1e2\n9a524ca2-d3f7-4001-b19c-49a4a6a3823c\n4e40b655-9acd-4c6c-b4e0-58a26322b8bc\n3ba875e9-ce21-4aa1-a494-864f1e34a45f\n6ebe690d-c811-46ab-8950-242e3cb5362b\n89f44c32-58de-4bbe-bcb0-cdbc52e314f5\nf564ba6e-b9cb-4159-9ea7-0b25a96f4d66\n91358b78-81ff-4566-80fb-304f54d3b8ec\n59597b1c-167b-4245-b168-c091b0840d49\n9b35ef06-96af-4642-8c1b-3c032b5c39ab\n978fbd58-a4ee-4ec2-89ae-3ea888d5d86c\nc052aca5-1a64-4cb1-bbff-484726a7e25f\nb018dd7c-c6e2-4712-9803-b2ec628eb927\n4ada8d3b-6736-483b-ab90-469c5b06e8cb\nb9190008-cefe-454e-bd46-c914b3568c99\n9d65ec32-a2ac-4250-b4ea-3e3e652d818f\n580b79c0-33a6-4020-acfe-c238ea87c097\n6b2e9677-422d-4acc-af2d-db0700b33147\n661aebff-5fe0-4986-8f27-56ba281b28ba\n645641f3-8883-4e1e-bf0e-e5e2c9023f5c\nd986fe38-4c35-49db-8218-7921a603b22b\n19ed9552-6d5c-4f81-88c5-31bfcdfefa0d\nfedf53ef-1c97-4b7f-b47c-57da5b11a2c9\n9b5f0c1d-9754-4dd9-ab51-1581542c7271\n7f5e762b-981b-4ebe-bf97-6c6deb6d6746\n9e494bab-1d89-459d-9bf4-15aa7b589941\n9d086583-c884-49bd-b9af-59729db36511\n226c0cd7-4dd7-47ce-a248-e678d0eaa27f\ndf4fa811-28ac-4529-b809-3be8f7e3f9b3\na9537412-d7c2-4d29-ad15-a749682c6511\n8033d9ee-977e-4276-ba15-e981c8ea66f9\n47659e01-299e-4328-9280-50f24448f597\nc7f3bd6b-2ba8-4118-8eaf-f65732232fbe\n56c87a42-f07a-42c4-818a-5778b9b500d7\n2bbcf241-bfa5-4406-ad2f-653184205f73\n220a86b5-cabf-4002-94ae-a6edcee1d8da\n0a4c84ba-e1aa-4940-b1bc-6460a2016ff2\n6058b52f-5e72-4720-abde-78025c0e5ad8\na5e942bf-311f-4dbb-8cb6-e93310095826\n0420244b-b666-49eb-ba74-10952221047c\n9966b8d4-fddc-4665-b9e3-c93aeaafb1a1\naf8acbe7-064a-45ad-a898-7987fa995f37\n15db3c33-499d-47b2-9863-e11d0b793c3d\n3cb24f6e-9449-4d09-bc86-069cfd95a64d\n44c4f631-cc48-4118-a63f-b100a467f597\nb7162eb3-c4e2-4fc6-ba99-87bb2bd75d3d\nb3c053fb-e974-4898-aed1-efc50e5770ab\nc925e60f-8f46-4902-922b-fe64a6741043\n76dbd585-1a42-4fed-92e4-3359ac6624ed\ne6e12000-6cd5-456f-8b63-1f3c8a3c4c70\n67e5dcb8-74d8-4f76-a288-9990b7880e01\n22cf0efb-97b3-40b4-81ec-ba87a0388fa1\n807fb196-1872-4409-b905-6a72ecb001ac\ne55bc903-6594-4d72-9a45-b5226dc7fe85\n01e31ec5-60fb-4d70-9d86-8adf3feb9f3a\n3b7593fd-cfcf-4fcf-a30f-f857ba21b2f1\nf7e030dc-2cb9-4ded-a4e7-c20b274b77b7\n21e53102-a100-45bd-8114-710264f6a3f1\n9902b287-5cf7-483a-8c38-a8be210d2964\n2b78c112-1792-4ffc-a3bb-deb52ef14390\nc786c820-83c6-4d3b-8f4d-06ea1f5489ab\n5f12ef53-d43d-4291-844a-1cbdfd2117e6\nc4799633-72a8-4cf0-af5c-c17b84e568c3\n1c5ebbf3-6120-4368-85a2-640b601812fa\nbc17a2cd-8c75-4adf-99a2-e2fceae49fe8\ne730aa58-773a-4f9b-8d98-2ad6a20b43f3\ncfde0a27-567a-44e3-bd02-787ba27ee8b0\n53be2aa1-1c2c-41a4-affc-60861c811a1f\nc298da5b-d082-47d8-81e5-d8e4542611e7\n929206dc-6495-41a0-ae72-a0205be1d63e\n795e12bc-8841-430e-ac89-3647b9b19da0\n93a88fbd-9d5b-4431-bd0f-96d542cade25\na4526bf8-65af-424b-8338-c6b9d73ba611\nc5970ae8-b657-4199-80d3-e5e428f0b219\n01bb6888-cec6-4043-aaf2-50e301bcd749\n702e65ef-2835-4260-9079-ba64f25f9bb6\n9a0c093b-4908-4726-a2eb-0960d95a7e2a\n404f55de-ed06-4ce2-9fc2-dc60b1c978b3\na8ba29b8-96f4-439a-98cb-4f2314d4bd82\n0baaac30-9a44-4e12-ad1f-d9a63f26ae84\ne3ead61c-dd52-44cc-89d9-b71ad3bfc2e1\n257d2cc2-bbcd-4102-9e88-2afaa3d5e7cb\n2b85cd01-f9a7-4df7-af18-3edb1ab05ed3\n7b40a698-fe27-4898-b6ba-94ed25fdc664\nc3ea2eab-02f0-42ff-ba94-3f80080d499b\nd75f5232-1345-48ff-a87d-11b6879b099f\n8d0175db-6146-45a3-ab47-c5374646e03e\nb4baa42f-a6af-43d3-9260-f71eab6107ab\n9055432a-5621-46d5-a410-dd886b294513\nbe09903b-964a-4b9c-978f-8cd95f9a4f9f\n0f9afc95-ba53-4064-85a9-2d15e9e22cc3\naeadc368-6fbe-475b-be8a-437ea7a9e223\nc50702fd-9038-43e3-9d92-f5f501458117\na80f4b97-617e-48d5-b64c-170b53b036c1\nf0debcce-66c8-4779-a593-ba0d5a829b15\nef644722-7c9f-462c-a71f-7a8f72f6c6b2\ndee11386-ad8b-4e9b-96bc-950afa4b39b7\nd51549e7-8fa1-4f03-aea0-cf6ee48d7695\n0d25015c-ba61-4c41-9668-7f52c528d09a\n41254e53-143a-48cc-9ddc-926c154603f7\ncea8f40a-a363-4613-b2bf-37b37eccd4a8\ndde3d0ac-7085-4cfd-abcf-888293a2bee4\n55d723a2-4802-468b-a092-d5d01b677439\na0295f49-c06d-468d-bac2-119e2b6b8c98\ne0714f61-7579-4146-b507-a9cd109b19c7\ncedc7d0d-9e00-400c-869a-4994a27c73aa\n9ea083c6-d651-4c40-ad46-42dedc2cc485\n81818597-2bff-42d9-af25-fc0a6857545d\nb72557dc-83f4-4c3a-8a35-c326b130dbca\n3f2c40cf-7da2-4ce6-9ab9-45ffcabb1984\n662c2166-d303-4ebe-b011-91bcf96ac99c\nb0201919-c5fd-409f-9eed-ca57124fe014\na99d4e0a-c0c4-4136-8415-4992f8e511df\ne7120aa4-d3be-4f94-bb06-39a2a79943b6\ndcfea967-9fe5-45be-aafd-0b7aeb2e4507\n504d9d72-e248-4e65-8abb-acc302227c89\ne8768124-3dd2-420e-978a-b71ff5671bb0\nb1fed36a-ee20-45fd-8714-98907e99e331\n00681785-ddc8-43a7-822e-ac6b8ffa2738\n91481aca-459c-4f06-ac2f-be24d50d5b0e\n57575e2b-2635-4c7c-ad43-9a63fffeaca6\n55d505d2-1bbd-4032-91cf-84d822905d0c\n03f0bf3f-233a-4971-b5b6-9fff023e8535\n5e997a14-86ba-48c3-988e-79a1e7d436f3\nbb1adefb-ce9b-4174-9322-568ddaac202b\n341c6c98-d830-4401-8050-05cf7e3dd65a\nb923a8c3-4c9a-40fa-9ffe-d2312c835463\nbd3ad311-a501-4a94-a313-d58727b87013\n684fcf44-5024-4b9f-90dc-38e3f93c45e7\nf2de2da9-659c-4826-8bf3-7052fcadd9f6\nf58ed9f3-ef81-4263-9de6-232996ec8e6d\n3aa9695c-578a-469c-94b7-8d378c8e4a83\n2f56d104-07d2-4e99-a2b7-3ca9d44fc63e\n61976fb7-2adf-4068-8995-dfe9e869f081\nfa3a686f-e116-4855-9241-42ea1df7bb41\n1035d301-8a76-4319-963b-7418b55e2372\n9bcd5382-2cb5-4104-be87-a43d062e6a6b\nd63aedf0-6d95-446d-9f15-0313abe51e5b\n72db9247-6f91-433c-aa13-70911920b4f2\n30f51c59-9708-4d97-9531-4b31c0bc7921\n35a72947-d8eb-4fd6-9a9a-575b8061e8c8\n8e21dd20-b1f5-4bc4-85f3-b80a21e93c40\nbe0bcd14-b009-4fda-9c93-4a2112d25bdb\ne5aedb9a-811b-483a-aaea-c21b88d06d51\n2ef488d1-8554-4bff-b241-0fd0fc9e2035\ndfb3c4e6-47f0-4655-b352-8bb6b5240b98\n4f28a8a8-ac16-4a3b-8df9-e696a83ce4ef\n466b794c-af9c-40d7-a84c-796da371f5b3\n6a45618b-11c4-4c57-bcf9-bbbadc7ca2ae\n1236f9cb-4496-4337-b6ff-907ad598e279\n945fc8cd-67e2-4ef1-89f3-8de3c515b53e\n6a95bc30-3438-4cfd-8336-c12883fff36d\nb5642906-d344-4f17-b4a6-4a0982ae3b1a\n14dd4b02-cb43-494a-a74f-3fc77e00ff5c\n34c5f0f8-2d1c-42be-aa8b-decdd687f1ab\n6336d4f0-292b-4874-b8f1-3148bdc52c23\n94650a46-38af-42a5-b772-bdfafb3771a2\n2740786b-7939-4fd5-b12a-3879a10c4738\nbf436bc7-d3f5-4c67-af12-c76c3f059f6c\naaa724a1-185f-4510-b6bf-5092aa85b601\n0fd46db6-aa6e-4381-9b38-f79064700cfb\n042e06ad-b6d7-4cdd-a4af-e67e10b29291\n37f359ce-a572-4e47-8599-973ff3f6d6be\nd55562d7-0363-45b2-a1d4-0e3a53ef59aa\n007c7647-0895-4285-ba02-0228b4a6df10\n82223ee8-e0aa-4f89-9eb0-1650321bf454\ndd7bdced-6e3d-4570-a0eb-6c0d6d9ff163\n4907f433-19a7-4711-bed1-6d35b231888e\n2f8cc418-22fe-48dd-8b9d-904f3d0f65fe\n0170de89-c515-4b8e-be3d-e070b7d341e5\n487e200d-9b2c-43eb-b290-ac672f887b69\nbceadc14-596b-4b55-baec-a11e9047cf02\n9045fa9a-010a-4def-ab81-7bd95f80c207\n2aff22b7-688e-4b29-87a4-a32cabd0a40e\n51fbef43-4ab1-4c33-8eb9-c94f3eb31f29\n014944ef-9f0d-44a7-8a9d-995758d53fed\n38025f10-de92-4c96-a36b-64afc372ac87\n4a2b6ea9-13f7-481c-89bf-a66eabf90467\n663ac533-d22b-46a3-af6b-ebc5b973f118\n6f28ee79-4956-48cd-a102-5306b0b205c8\n1f96042c-9799-416a-93d8-97b4170a4591\n7869c6b0-5df9-470e-b956-b790378e559c\n7f282954-350b-4c0f-8b24-37a2f6b2fe36\n6c24192a-8eea-4f66-8764-204d2018fff7\n2eea80d9-2c09-411a-8c41-4d2592d572cc\n8efa969f-9db0-4465-9482-5ad679121b56\n1c23c416-cedb-4bd0-a0b2-92e6a2239f1b\nedfd0ded-ee4f-44f6-988c-f76fb5e47263\n8dda566a-f12a-422b-951b-cdce7ebaad17\n315e26fe-7deb-4efc-b99a-a99bf9b423a5\n27421b0e-06ca-4186-bfb5-f288694f3c6e\na6ad2179-3035-4205-8099-517f83eb710b\nf0065b58-73b0-441e-8380-5470830413ea\n22464cc7-2282-433b-93ee-0440a5024f08\n6f085384-1db0-4878-93a3-86172fb2e57f\n9bb51746-9c2d-44d1-92d1-1f362b262794\n792bcb0e-c82f-4e27-b15d-c1b5f2e4d3c2\ne870fa52-d318-493b-8e16-a20255a5f3d6\nddf54241-a8d7-4843-95a8-2de204b54043\n29a54996-2060-465d-9634-f6ac5d18fce1\n4faf0487-58f1-48f8-80a4-c4a6f9fb9be1\n41e7bf21-d304-4f07-8cbe-32efd04a23f2\n54e1e639-33bd-4121-9dcd-4f9c5e6fe8a5\n3cc030c3-ecb0-4794-a172-2953f82559bb\nb95ae0d9-b1b4-4134-b11a-8ef068641ba0\n00aeaa4c-d8ea-44d5-ae6c-02c8d4d031e8\nb0c4280b-70dc-45b4-b22f-27b75450170c\n6fa42c1e-bd2c-41b2-94da-1d37abb630f9\n8ec4d528-478c-47e1-9bc6-aa2dfc516e1f\na5dbd025-88f7-43b4-aa42-44d1b5895650\n2f8e1ee5-2934-4705-a0e2-ebe4405e6358\na10f1893-5143-46b7-9d76-3819a3fdf50d\n1190dbd0-d67d-4e8f-bea1-4990811b706d\n73dec457-704f-4d89-af50-e293fd3803d5\n93662109-b679-4a3a-820f-dd4c4ef3f16f\nc55db99d-a316-4f95-850f-1311d7b75c48\nfc256450-aea3-4dec-a50b-83ef74fe9495\nec2fe04a-2343-40a5-84ea-ed48332d4711\n555d6937-febb-4e98-8f8f-d8063a36a094\nedf574cc-76b8-40a9-8e5e-ea48cc5cec2b\n3d5ab78b-6f91-48cf-b943-b411d8a15454\n64853eb7-7b34-41d4-a31e-34a877c4e8eb\n3f00367d-c5fe-44b3-92a4-b0f32c79ded1\nfb8375f5-1884-4ad7-bdac-18a5bb81efdf\n11b28203-b247-4c4c-9958-054510b7a820\n96d1f6de-682f-4795-8f81-09fa8d24dc3a\ne1da0a35-97e7-4473-b20c-3f92934cb306\n8775546c-c8c5-45a1-8e18-3cf27210b86b\nbb393b57-d7fb-4180-9f58-97da5548f7db\n8e2f4aa7-94a1-47ab-ab86-8843446b0488\na04320dc-9129-4753-bda6-ed778147ca0f\n8620593f-473e-42b3-b469-bfc65dbb18d8\n31e14805-f5e9-4a6b-895a-6c03978231d8\nec1260c4-37b8-40b1-9771-d125608f17ae\n2ea60368-5304-47cb-b63f-109048bf4b18\na7b10b53-622c-4a6d-a5fc-dda7828ba40f\n6f227ae8-40f5-455d-8580-35eaf67d6e68\n49e52080-0298-46d4-b90e-aad6d50b4d8c\n3d8a6860-5777-4a27-8a7e-bc28633ecce3\ne313e436-069b-4f00-bf6c-f4e52e80ac1c\n3b10e941-1b72-405f-ad8e-6fa5f781bf56\n859331b5-e443-4358-a046-576dfc7e3157\nd48b5a12-c980-432d-9e46-31b316027018\n82e69c9a-480a-4d93-aeec-2e76fc622fd1\ne59185c6-f257-4505-a01c-4b5ee4bbd666\ne6698673-681e-44bd-8d88-bd9fe7424746\n757525cf-9628-4a4e-acb1-196753d593eb\n3220b981-4a20-44f2-bb85-3ff80d343094\n0e178e85-48ac-4a1a-ad01-e8bebb5d887a\nb9e66191-30e3-4ad8-8b4d-2fc3b10f77c7\n75ed78ca-57ca-4056-a454-6ee5c91d358d\n7263d82e-c675-468a-87eb-fa0340f645ae\n938221d6-12c9-4d21-a2a9-be3515007534\n7e3a0003-8e04-4719-8858-aeed49d8ec70\n0bbf7ce6-d4ae-44ee-8251-a94c170eb599\na5426a0d-ea6e-46e4-9a2c-beb631f4476e\n729774ec-4c03-4487-910d-1692e859c0b1\ndc4a60d5-8a05-4d19-b687-1dcfdd081a4f\n274d0880-46d8-408f-8cfa-37486e3cf6b2\n94fc7388-ab8d-4c2e-9ef7-d8ccf0cbe5af\n370f7a8d-eb99-4e8f-a416-2d871b61705d\ne6dfe6aa-4da0-4e46-817c-7313c31db16e\n1a3d3017-700b-47dc-8c03-eb7f4b808488\nae4e85a0-4201-49ae-ac14-aa9673a69cf2\n232d7f17-6206-45ee-8236-18642e53c69f\n95b05ccf-8039-4b0d-827c-a1d90373a8b6\n5062f192-5b1f-4c21-acbe-53f696870f34\n2c8d0c01-4d43-40bf-a491-a9eb8a767f66\nd552c15b-b397-4b83-9c4a-0d6f4d2b1e16\n2eff4229-a9b6-402d-b682-67a28d9d10ae\na61cbe51-0034-4e30-bcde-3e9a07acf532\ne7b78ff5-16ad-4375-9407-e6938e634c28\n5654c78d-e4fc-4292-878c-4730e732ddad\nef19185a-0de8-4770-84b3-7a2c011d3135\n9a952b98-80c2-4154-a45d-e7a8abefcc75\n02d3e630-0da0-4346-a280-990e4405c6d9\n3295a258-cd6f-4f1b-954f-62bf9607d101\n134dad8c-8035-4ba2-a4e2-d5c6a4dbddeb\n921dbc9c-57cf-4a92-85dc-110e06aa411b\n7ae28711-35ee-4bc4-8772-1054ab882387\n718fe67c-4b47-4e79-8237-f12e580f6cc2\nb8bf6d45-a91f-408f-84eb-358a409b5eb2\ncdc38e5e-3f54-48b0-af48-ffa6dfa9ab59\na1ae5c4d-65a8-4ca1-80ef-ffb83809c702\n81beb19f-c218-44a5-bbd0-6a0d767801d6\n2b43fbf4-9196-4561-9139-eedab5123093\nfdb7cc31-a7fa-4bab-8f8e-3b07dce77062\n767aed96-c3e4-40cd-acb4-e9f7f58f8d2c\n19d19a29-d610-4153-bac9-a1d0b3aa358d\nc0cd8456-a819-40f5-8d6b-3b9f3904d73d\nbb3fb59d-24b6-442d-a701-f54caf147633\n572de814-5558-44fb-908a-cf7f1eb971ab\n5f282e23-e596-4a32-9603-0a723e163560\nb7017fd5-5248-4733-b490-40392c9e95d1\nb6c0c88e-2684-4f05-aa91-4d09e9f06c79\n92873870-5844-46af-868a-dd5b8ea8094d\n146a0fe0-e47b-4885-a3b2-57f6bb5a2707\nf600898c-0d8f-47d9-af13-950ea5344995\n0c68438f-2a8b-4e83-be92-6819110d12a2\n02ad3025-51a2-4fb7-8f9a-15e276476651\nc7348a98-f8c5-4bc2-9a73-673278ab3d1a\n0b6c6f28-f5d0-457b-a675-66323dcf27f7\n7878a58c-75d3-4e7c-85fe-f70758c95da7\n1b5c467e-54e0-4ca9-a722-be91567f0e9f\ned62e8a0-3e47-4ed0-b6d6-0a2d92bc3050\ncc355b66-9419-4fa4-b5d3-9f4fdae81b60\n600d1127-9bc8-4c8b-8cb0-bdbef7422c99\n8866cc94-2ad9-42ec-bdfd-6ee66a8f2c3a\nf0e466be-6937-40f7-a834-e3cabc1edfb4\nbf59abf1-833a-44e2-bbbf-3918d374635b\n44c5a205-f02f-4d35-b6d7-a2c0f4e006bc\n4bdfd6de-21ce-41d6-a3fc-753120e2e237\n55a621bf-59ec-4482-98cd-9c6029602518\n2f1dd39f-7a63-4e57-9d40-dcbbf6044594\n9f51cc8f-9201-4e90-84c8-c0affc809e64\n869b03ff-9aba-4a03-828b-49e5f7890ef3\nb697ba61-fdca-4a7f-98f6-80de0a10266f\nac591268-6802-40ba-9870-8f0cf29bd683\nd20fdb36-d353-4da5-808e-e284ff0861ac\n30f92109-b88c-41c4-ade9-da858f933afd\nda5006a0-61e6-448f-9cac-04ec2f1e7e45\n4f09dcaf-f205-4d23-a4b5-a0e971d90590\na4868b70-0cfd-4d37-9fac-b257f3e8c61a\n738c1ee3-8731-429b-9c63-0b06bb3a6b9d\nd7177eef-32c2-4327-aa00-510601b0f954\ndaa8972e-8876-47d6-a9cd-8cdd7b7d419d\nbef91594-876b-4287-9c51-12577cae0510\n06f9a0cb-78ad-4b9f-9ed5-41432c698f8d\na868cb44-5f58-489f-8434-bf3bbb988c60\n7f0d9921-404f-4225-a92f-f4806e27b2db\n0d7379eb-0fbe-4e1c-8d5a-8ea592cb36eb\nc275a81b-ca5d-4ac8-a476-4e266042a6bc\n2da5d802-f075-40a6-aa0c-a5f86ed95823\n44c8d7ea-e797-4799-8647-4750074aca5a\naa43364b-30b6-4b37-9551-cddbe1581d9b\n59336563-92b1-4b7e-be5b-720b431c139d\ne92c0755-9fb8-4f72-add6-d88abe42cfd1\n63042edb-788c-4607-b7d5-05ddf32d8647\nfd49d5dd-225b-45a1-beb4-dc349061285f\n2c544d09-a425-430f-a7b1-a069cb62ab90\na0b7f6f4-a66b-48d8-adca-a6c51fa2c71c\n29e2174f-8d84-41c4-8260-f91f03e79444\na2866b9e-1c6a-40a2-85a0-84fbae6ae3ca\n2d88bc46-9769-40fe-bdc3-37435a81129b\nd1ac1881-527b-4c76-bc4e-9abd56026c09\na942152a-7a66-489b-9d78-afe096bcec7b\n04e9ae87-1edc-4a52-a846-a62ad03b713e\n7589be1e-d268-4406-aa92-f3185f4aaf3f\na88262d6-db27-4195-ab5d-178e872387f4\na1842067-e9d5-4e3c-acea-15dd445e6375\n5cee2a5d-fad3-4d80-855c-2299be3306f2\n58fc73a5-3db2-41e5-b052-f8984b46dc2f\n2cf88dd1-13af-4334-b256-0ea8949e212e\n557fed2a-ca29-490f-949f-97bcd7f6bce5\nbf443828-f3b7-435f-90e8-0caf61d6322b\n501a03e0-7faa-4dd0-b2a7-b01afc36e9d1\nd6da462f-3754-4aad-8ebe-4223e992644b\n9894143f-a125-4c4a-a906-161335b0d2aa\n57e94fa7-b526-43df-8f5d-53aa4cd88c79\n18722f28-abcc-4892-af8b-ce21770eb593\n80f752af-d198-4c51-b7bb-4717d97e4a8c\n0ef9a690-a20f-46a4-b7e4-0b8205305494\nccfe3370-9113-4cd7-8988-b6385db5e46e\n9685b058-12b5-40aa-9470-7793bb0f4aa9\nec28c020-f351-4147-b12e-aae3f4612a2b\n11362259-5516-4a48-a651-197e76b438df\n3af49ff7-74ab-4a07-a32e-7e209c9e5d41\na685b683-5eda-4c07-b1e3-68aca92d9af8\nc13f56b7-4859-4201-af77-2e32127cbd21\n8454314d-cba0-45d6-acb6-058a67411f90\nae5940a6-e88b-4bcf-a1fd-7fde1bbd7fef\n3ceab27f-b8c2-4ce8-b1da-16e477687657\nd97c71c3-c934-4c4e-a295-0fbf4003bc35\n9a005a63-ef27-4894-9073-d198cba8a389\na055da12-0075-4b54-9152-2eec88694f00\nb1abc77d-0c40-47bf-9cf7-c2f3e3383929\n061e710f-9d6b-4616-9688-521e6fb69f2e\n08b75bd8-93d9-4911-b271-b83e9f6edafa\n6b363817-3e45-42b4-b367-5920c6744a92\n18265793-e570-42ae-b434-f2d6eb35722a\nc91d8b32-ffe0-42ec-b676-b39119b05462\n1eef0bf7-fca0-4f5c-85c7-21be3725c84b\ncc41e391-b71a-4893-8284-e141ace33b04\nbc09c17f-3971-4ad2-a6ce-e32fd65183b3\nd1edc80f-a81b-44e6-bc7f-95c2e4780b77\ncad12e1a-8fa7-47b0-bd21-fe69e6e11e4e\n2e38c224-3ef0-42d1-99f7-cc2657bcb1df\nf734f0f8-d795-4ecf-bacc-2b747464049e\nd0f051f4-ab29-48ec-a906-d5adca8548f0\n222de957-8c36-4413-903c-3fbdc705f863\n13d2e63b-f08d-4dec-a6a9-92554a489d97\n4b51982d-ae48-4799-8f6a-54b4fce1aae9\n28bf5f91-2125-4e40-aa84-9158484ae536\n219041f2-8c06-42ac-9b7a-8933fcc6a8d6\n3a84a12a-c0ea-4de6-b4a3-adba98699e7a\nde38a4c6-bd69-401f-ae46-36d582fa2fad\n866d403a-9c6f-497e-b4ae-2cdbac50f532\n08654c56-c535-419a-b15c-d4b491ad3218\ne2adcc30-c519-4dcc-bf5a-e6b324488bef\n13028c1c-a71b-4b26-91e2-abf339120df1\n47882c8a-efba-42c4-b71f-247a62d4df75\n42617c97-0fba-47cc-b835-68b88896fc7c\nb88f5ab1-df05-4413-85ab-58049483c08d\n5d9e914e-263c-4fe0-bd49-163c06d2b78d\n8a6dd3a3-4166-4681-b83f-9e582cbfe462\nfa274009-c676-4436-8cf7-89368ef263e0\n2eb9a693-6810-45c3-bb19-be6ea502c858\ndaeaf962-e046-41c4-ba94-702b7da9aeac\nbe5ccb33-2de2-4c6b-9978-497df41c662a\na94eb042-7dd2-441d-a1c8-4e7abdb40945\n922bb220-d453-472a-95c6-7dae5675ab4c\ne2df50f6-11bf-4fa4-926f-6f93877fc32a\n1e60dc6b-6eed-490f-bdcf-0504da081812\n1eb64300-39b3-4b42-b4d6-9a35b3903e6a\nd2b8fbd4-5ac0-4117-b272-d9ffa043dbca\n1c7b0850-4bf6-4fed-bd05-f14d3daeea00\n78241ee9-6dad-4f71-9f79-2d812eaa95da\nedf367f7-23a1-4509-9227-3a72fddb96f4\nb59be6cf-1b23-4834-95d5-dfbfa6cf2297\n56e3364c-a871-4fef-ab1a-42d25fe86151\ncf346bc0-cd02-4f98-858d-082426099a01\n80700416-6ae6-411c-aa51-53ef861f0f62\ne4809fef-cf43-4e36-b4a7-b85ff121f101\n3e2be644-d0ef-4b79-bcad-f53ea761dd82\n5341198b-146f-4449-bdf0-cdfc805948a8\n50f8155e-3407-4d02-a76f-e9c9038858f4\n37c714f7-c670-4be3-b9a3-ae0092d67164\n81588cb3-4c54-4b17-a9ad-c74be43b12fc\nd5657a4a-ad27-4afc-b65f-b5737ce8d0c6\n13675076-6323-431b-bf9f-24f846ac0003\nb0c259cc-622f-4cd3-90e0-4149cf63cee7\ndd2fee0e-2153-49ba-8606-1bd4a0c51125\nb3995315-2575-428a-807e-99e7aac7e8e2\ne34114e4-1379-4d25-ad0b-54272e54005c\nd7105cc5-07cc-4f16-a256-ee845b94a4f8\nee90e50d-156b-4475-8e66-c011fad94ca6\n5a6ae933-ec35-42eb-8df8-bbe3dc25f755\n797847b5-769a-4250-83a3-bdfa75c6f7d2\nb0dc4b20-4ae8-4a25-9582-ce497657a877\nfd0620d6-c9df-4647-bb55-b2d0911d8448\n326daa76-8514-4d79-9680-a8aab20bad96\nf8ec9b8b-d10b-4d7d-a143-39af9c0a7dd5\n1c86d9e8-908d-4815-a04a-e673a3907c7d\naff3c859-b148-42f5-8c01-a38c1ca775e0\n4e72ac64-7f52-43ee-af21-6ef46414d3ac\n31d17de1-879a-4683-8056-f79fc79fb1c5\n4ad99a12-4997-4907-af3f-47b7d72b3264\n7f0f84ba-2a30-4c59-adf1-7f176a1acd79\n04ec23d3-271d-4295-bf53-cfcd4b1f2d5d\n7a4977c1-1df6-4c7f-9da7-0ee9905ea61d\n0648f5d5-e687-4174-b8c1-e6ad620ec09a\n01c08ef5-153b-4c58-afa9-49c16655613f\nff213628-f472-4adc-b985-8a24371f1ff9\n483c2ea2-bcfb-4696-a699-39c8994d9f93\n1178d1ad-37a3-4636-aa21-3a8b5d765972\n4785af51-56e4-4e73-8fdb-18360ab3debb\nfe4fed36-0bcd-423d-a91a-2c3346ad6a26\nf967ff2e-ce6c-4d54-98b5-df72d304072a\n8386cafb-34d4-495e-9e1f-53d0db7795b3\ndab22f35-80fd-4d61-9118-2eac096cb974\n82033083-d1df-4ffe-acff-224a0be2c92b\n0d534b71-0c81-4327-b10a-5af9281e777b\n034f1c19-1b4a-49eb-b9c0-dd81d4886c2d\nee74133f-6215-4870-82c7-8d4d913c6eb1\n2a11b0c4-89d5-49c5-af86-bb37bca41bfc\nb7db042e-8d06-402e-8d72-f82b57dc4b3c\na006d307-756a-4c43-a579-c26fa6c0bbd6\n0397d189-9be7-4741-879c-7bc6cc4c9e26\n58c4d086-8305-486a-bcef-ae572071dbc1\nacfb7d71-22a4-4fa3-9e3d-53b8b959be8b\n46732633-bb9f-4235-a546-5104619f297b\n9c5026b1-9577-4a20-8f3e-20cb30eb5095\ne517b924-309d-434d-ba49-80e07fca4112\nfa325a4d-8442-4ec6-b02f-65bb1c07c143\n4a99dfe0-3f8b-4f43-a91f-f2299a7c1732\na2a036ed-a395-463c-a148-6c703fa482a8\nfd1ee02c-cc91-4399-ba0d-479538ed4f95\n90b133e0-7e15-4598-9317-a8fe660a69ef\n5238eadf-a1fa-474b-997e-099c1985a3aa\nb61126ed-71b1-44cb-bd28-d54031fb8467\n4149b731-feb5-4116-99c7-3b33ae7b452f\n79babb6b-08bd-4ada-ae89-1120445945c2\nf13bf96d-a2d2-4f2a-bbd1-58dc1eda880d\n142e11c7-89d4-4959-b52d-74a84ea11374\n9d614964-e647-41c2-9055-603ecda5ab34\n0a77a683-81b1-42ee-8102-5d03dbfee3b7\n090a511c-21df-49dc-8a01-ade822388c5f\n20edb594-3a21-4c4a-a562-5d3d036348fe\n91a91d21-3dfa-40c7-8dfa-88815eada3bc\n09becb02-59e8-4712-ac0d-01c42541e3b9\n55edfa41-e76c-46b9-a7c9-9f30a6e95864\na0c34d7e-d702-47fc-a50e-f1eaf6ead80a\nd067b9d6-7467-4cfc-9eee-57e881ae87fb\n1cf999b9-040a-48be-a02c-605c6b36822b\n4dca5846-224d-4386-9d56-3c8ff95919b6\n3fa5d85b-32b7-45ec-a4e9-77c76447cc4f\nb329d1b0-bebf-4e95-8d6b-7289b206a889\n40181a34-79f3-4421-ab43-3748843cc2f2\ne6edf6eb-761d-49df-906d-b9c3febdf315\n853cc875-53a6-48ec-ba2e-7a3dde189fe0\na990ea16-b305-4c6c-99a9-dc72eebf70ff\nc91f70dd-5f7a-4186-ab70-31c434a64098\n0b61b72d-5cdf-4010-a1c5-f0c6c26c9c8f\n54b3074c-9564-4f68-9495-c52763e37846\nbae7c8a4-6842-40d7-bf69-902e10aee138\nc30194b8-5f89-4ed6-9b84-70e41d3be8d1\nafcc3d5e-b6eb-423a-bf6e-46b126d7a699\ncce76c2d-1f79-4b22-b122-da603095bf08\nbbc0337b-1b69-4a63-86bd-50bd7127293b\n553f1be0-1df4-45df-b9a6-b1f360f659cc\n840deea7-b09a-4980-a1d6-34f8a32228f0\n538744b7-a772-485e-8212-6eb970ac4f62\n545026c1-3684-49a2-ac1d-978ac52e35ad\nfb787835-88db-4f7a-b670-d88fa8340fab\nd09113a1-b1f2-4ea4-8fc5-26a9dce5a476\nd94b7cf9-d641-4e29-bf85-f96c184a1f6c\n156b911b-9299-4265-b488-15fc9b984856\n2ab641fc-84a3-4c6c-a4a2-e494e90ee12c\n16643bf0-e134-4c16-a764-3183c40840b1\nf499a494-52a0-46c2-9461-4b824d2c44f7\n72f5c2ff-4eeb-4e65-9b2c-d4c3298a5cfe\n48b71073-3912-4d74-90a4-01b70f1647a6\n6825c2de-b842-43eb-bde2-0fed6f2f125e\n2ace2496-8998-46ae-99f0-a2abe8baa6f9\nc30cab7e-d7f8-4e72-8d6b-7c8bef177bab\n024f4b9d-bc0b-481e-acb3-eb45024be45c\n39b51576-572d-4aec-906c-9b105233b081\n265d1eea-e5d8-43a5-8855-1e5948a9b1d5\n92ea52a7-6624-4e9f-aac0-498da2413a6d\nc1bb6093-96dd-43e0-b0a1-2b1a8afe7e09\n40c666ed-cc05-45f2-8cfc-85d3abe518ad\ncf008d5d-80dc-4992-ab99-598370eb3774\ndb8e75d1-4275-4a23-8f3b-bfbde5d26fa6\nf575499d-f21b-432b-9b3f-7ece848885cd\na73fa865-a099-4b86-b12b-97b066f3d9af\nb401010f-b88d-4e0b-a507-74f8e340c13c\n2853a68d-400b-4d29-bcf5-7ddf0189163a\n9ec963af-a5d5-4819-a417-c67e77be556e\n3b421f15-6a33-4f2c-be11-9810198a87b8\n392f1188-5a5a-4e8e-9618-769555c9438a\n84501158-3d9b-4b0c-a7c0-57435ba54543\nf763fddc-2f61-4bf2-b28a-ad853ea6850e\nc4648e27-8beb-4a82-b3b9-1992bfc0f7ed\n511689bf-a337-4d9a-8743-317e6383a038\nc0b02ad3-34a2-4450-b185-0cf6ef6ccdb1\nf56818f0-aa0d-4566-9af3-acb8d9bb0762\nadb3c4b9-d54c-4471-af8f-ac7f2e205446\nebb2eae8-3702-48e3-9409-cbccd0ec58e5\n3027163b-b642-48c7-a871-b1f951c0ee4b\na88eadb6-de0d-4192-acb8-31db9aa58b10\n5d3d3962-0564-4661-9f5b-a3dc9be18946\na7dc73a7-b5ec-4422-af1b-83c477927598\n7e60f0f6-4160-407a-8ef0-bfa8bfcb2a95\n9d06b3be-cf96-4821-9f6b-713028230acf\n4a06bc45-cb6f-4c7c-a7d3-bc9e9265313c\n0814240f-ab8e-483d-83f7-6e6b867f3c6b\n3ad07680-d9d7-4718-b2ce-67dd5e2aed08\ne6f26c55-7256-4954-bcb8-375bfe0dc9ab\n3c8de58d-7a1e-4ed5-887f-f5939a0e9ddb\n68223cb9-3b86-4c6a-905d-0db90326385b\n051e90ad-3c99-4cc7-ac88-90f7033d1b7c\n62ffdb7e-b4a1-435a-87d9-b941e8556178\nc5749f96-c827-4b58-baf4-2884cde17705\ndd24bfc6-439e-46c9-a391-02aed9c05c69\na553e491-f14b-4dc2-974a-aedd494ce6aa\n68346bf3-65d4-4a1e-a853-73b5ee53a0dc\n151d1239-69f6-4225-bca0-a57f86f88ef9\n8dddb357-b9ab-41ad-90c0-c984ede71df3\n1182cd0c-a82a-4f93-8b8c-a14ec669afdf\nf3e4ffa8-e41f-4074-befc-d65239349e41\nba575043-8345-4e2d-9310-46d5faea25e0\n4bb8910b-78e0-4541-9666-f90c3362c5a6\ne246cb7c-a48a-4965-8979-804f7475e6c6\n18c35ae2-285e-4b6c-9907-a015c57bb865\nf22ed69b-3d7d-4669-aafb-dfd1441737d5\n5228026b-8965-4ff2-b3b3-8ed97586144d\nfaaae6d4-38c3-4ca0-99f7-3b5a0aa8c894\n7cba407c-dcb2-4917-9ac0-9e66b51f21c3\ndbce14ef-0510-41da-835b-e23b5e93784a\nb8674361-c9f2-4e04-8746-6ebb08891a0e\n5afcfe45-bb20-40cc-a3ca-15a9b2b4b935\n75847772-60b5-4a4e-8e60-0293098685e5\n39ff90c8-b8e0-40ae-ad80-de3c446fce49\n924ccf8d-dad1-4ad0-8b5f-33c8111a3d50\n6b91482d-8e7d-4dc1-859e-7f8af2ea2854\n4b27d83d-1dd1-4461-9470-4c1e38781158\na24cb6ac-d0f5-4a58-ae6a-a57901c9b6b9\n4ddb36a5-ecd3-4f15-add1-17aede5e0492\nda770f60-38f1-4dfd-881e-db80e47a2745\n2d5dba12-b00a-4a61-a957-5e82bc50d10c\n2243f3d0-fa5d-437f-b3c3-1fa602b97044\n8df24089-ff11-42b5-8687-80b06c3007ab\nfce79ae2-545f-47f7-b90c-f24919ee30e9\n6f8fe487-570b-4c80-91da-c5c93b2ed537\n57b210c4-98de-46a2-880a-cb1e872b5a84\n09004181-7c3a-4d9b-8633-18b71d14d527\na22118ed-35d0-41b9-98be-0696806c1b51\n22026d76-f269-4934-bfde-4af0069f11d4\n2da7e6e1-dfe6-494b-bbac-f1b152f5b877\n1018c27c-d448-47b2-8918-0c16b7803c47\ncb820f75-b452-4a52-8153-740545581221\n53dd2177-66a8-4691-9254-8fa476169118\n012ec592-0b2c-4179-962e-79ec757faacf\n3c6f5105-5e15-422b-b224-229cbc9927a8\n2abec262-968e-47b4-b80f-c7b54e8988a7\n7bc7e191-727d-4bf5-b678-cd647b3202ee\ne339e667-c141-4377-9992-7a203f749ba5\n7c287a61-4669-4ef4-a614-3d9fc35efa72\n28f7eab0-f3d9-4359-91ab-1b302c5a0483\ne603452b-0c50-42ae-b9cc-2ca8e80fe725\n3f8653d8-8106-4d09-a485-790912d7aea3\n8520dacb-8393-4a32-8ca3-987f0d970c54\n7e7fd4c8-e740-4d2b-bf13-d1f41bdd13b2\n3b6499c8-f3e9-47b7-9f0b-fdef79a86fff\n71e50373-d085-41e5-ae47-27a2dffa7dc8\nb2cfb825-49bc-45a9-b1b0-bccf88956988\ne72ac760-67a1-407d-b1dc-ef0597d9d957\nc3a381b4-a4cb-4c75-8e7e-4493f453840f\nd032c645-0808-4cfd-a029-834feec799b9\n4ebdd1af-e71b-4f4d-80a0-d364109477a9\nbc3f6a59-1dad-4f36-b5a3-50db66ebd1fc\n3574444d-5a87-471c-b8f6-e482c03694e0\nfdd344ee-80f3-4ff0-9f11-1e894573f8f8\ne04c8947-305a-4a47-8aa8-f8235f8307df\n996269ca-3c2f-44d3-83a9-6fc8f5a91384\n3f2c4073-4254-4d19-a47f-dfc80cdb8acf\n106f2806-0005-4d16-8e9d-afca7308c124\n9050af0c-385e-4e59-919c-9037264d6d52\nb1ad2041-46f3-4309-8380-6dd83e658d9a\nb61f5215-763b-4dc6-ad12-d03eab4842ff\n4d9dc96f-375e-4c23-9ffa-59c42b44692c\n61fc9b1e-2abf-4873-887e-6e86f4534867\n5bece5cb-ab80-494e-9911-6014f59d331f\n313a3e65-71be-4f4b-a7a8-6d7b999f3c27\nc6767ef3-8a56-46eb-a46a-8ec3b7fa150f\n6cc363be-ff04-41ff-ba6d-31cdfe51e5a3\nc13277cb-2a72-4fb4-a7d0-2747b7c805ca\neaab220d-6551-48b5-bf1d-d7e3894d5a65\n8a69cfa9-f160-4b85-9b02-ebbe2aadf702\na260dcc3-7551-47a8-8424-1ad63df47d91\nd1325a72-b0b2-4066-b917-86c26868694c\ne4f11a02-1b38-4306-bbdf-3552b0c52930\n08a72990-58f6-4b96-b30e-179f78b335d2\n69bdd045-da50-4c46-a639-424cd0caf30e\n60aa9ebe-ed7d-4c92-9d63-479e4fdb7be5\n2871cd2c-073c-4043-9405-d3f6750c459a\n3396d0d4-dbe4-4608-aa21-e83da1f75d0e\n62073e1d-b0c6-4510-9f8e-731966ed0ed3\ncebcf581-2aca-4a7e-b0e2-a71d276331ab\nb549ee17-95b7-43ff-b2f4-2b19921a7abe\n12767310-1010-409a-9965-5cc08df55d0c\n7d42f4fc-d8e2-43f9-881d-26378403be0b\n3b176f97-ed5c-4e54-8dc8-d6ab65240eb4\n0f9f94a4-40d6-433f-9c2c-2428312615d3\nec25395a-4a7b-4fbb-8ce4-a7ad5d9e7a0a\nb21f14c5-c2ed-4ddc-a5e8-f737af50c414\na23a5d2f-6014-4562-b50a-7664c4aeee2e\n0d9d225a-96bd-46da-9909-b5603aa3e47b\n8ead497e-1e2c-4f7f-ac62-63b9d396170e\nffecc6f8-6f53-4772-ab1a-a1ee9fc43f7f\n4a7355cb-0c7f-4e5d-9f8c-9e56a0b42dc3\n7e0d5b57-8caf-41c2-a008-249c1e754485\nfb06808f-46fd-4ce9-adab-42f7652d4aec\nfffbae0b-8569-40b6-a08b-121ab938308b\n460dde42-9a9a-4446-a283-7bc2f3897a3e\nd1d1cf77-3b8d-4180-9d36-f829a13bd682\n8d681d29-c69f-45d4-8b6a-e69a7d896839\n98da0bf9-d0b6-496d-bf57-617c3cd4becd\nd391c4e9-b163-46b9-92ee-7ac8f8fcdeae\nb24a56f0-bd05-4096-8423-71638f2c2bf5\n80f45e87-aef8-4a76-9c40-7d7144757feb\naee54e9b-c676-4525-a3a8-d8f75b0420ca\n9ad27212-9d4a-4218-8e08-f8c8547f2459\n72ec4dc1-cfd0-4d7b-a589-68fda61311c0\n1c882775-3502-4330-8894-a4b90ce04785\n1bc90664-1868-461e-a8b7-ff5acbe5ac29\n255fde5e-f979-4f86-a4a2-dc4984c51f09\n562de053-3889-49b8-a255-c919014fd592\n7c667b4d-96e2-4d85-8609-0806cea55595\n6fb211fe-be7e-46f6-beb4-e52b79eca882\n5fe7e9c9-eb61-4bec-9d05-247def12f6d8\n9e36ac9b-c10c-4244-a377-a0684d8ce67b\n0e0721eb-f3d7-4dfa-8a76-4222cb739c54\nbb994f44-7d45-48e8-b766-14d5d484b2d8\n47c87e57-90db-4e5c-877a-f2ef6ef84616\n2f97daa7-6fc1-4a17-84c1-825481c67be0\n06460564-f493-496b-b5aa-e9dcf0b8ff1d\n8d4b52f9-cf75-4702-bedb-351445828184\n248a3390-5d12-49ea-8e1b-3ce39ae13c62\ne60db52c-e6ae-4ab8-aa9f-273bda28ce2b\n5ad5d165-e99d-43ee-b34c-8c20ee419547\n457222d2-6ff6-4408-be3e-6b89944e89e3\ncd93248a-4a23-4123-b6b2-57bba416628e\nd93a5875-0b6f-4106-9281-0d1a90d1db69\nf5a2df10-f299-4917-bb34-6f68e38df301\n8b45447d-6169-4e49-9464-baf86b13afbe\n26d68cea-9ae0-4f9c-892d-53f15a09b5b5\n9146afc3-a11f-420a-81d2-2a6290dd32e2\n2a432ab4-aea0-4d54-9c52-bd93a77105f5\n763c615e-c507-4e01-85ba-11ad71be9f20\nc1769b57-d249-4ef3-9468-4e21a026c98a\n4c31b335-2a74-48d7-8f86-fbe00a987d73\nae598665-7407-4fe4-bace-f6febfce4dd3\n4a66b380-e441-4f05-8e64-c36d2b4ba10a\nccab9d68-2368-4c38-bcee-28097d0dd868\nf2667710-2b99-4c78-ab5a-402b28d725e0\nbcb4f359-f827-4bbf-95c5-ab3aaa532af0\n01174bc1-b058-4779-8fbd-3c05b0a85d79\nd5b5c081-228f-4be4-a325-33f55509af66\n765c0606-127e-48be-96de-00b1023405d6\n18897344-4a3a-4422-8b19-f2c2907e7e34\n8c3d4d3c-3967-4eea-9b8d-7e83d246400c\ndd192f1f-3563-4565-94dd-6b526188814f\na1efbe8e-9f94-468f-ad18-293835ff99a0\nc4d7feec-39a1-41e5-8b79-6016beb07b53\ndec1a118-cb86-4445-bbbd-b31553f46651\n9df9f6b0-8c19-433c-a7bc-aaf1d84449c3\n90c1fe43-e200-4db0-ae06-4f3bb68c3fea\n1b04801e-8562-4ecb-a09c-47859473542d\n5dc55235-6c7e-4a83-9e83-b29e3f65b157\n43e5392b-acc8-48e7-b436-c2adc5d63d0e\n435c3e6a-53d8-436f-a95e-73612c0af37d\nbb186acc-c845-424c-a5d2-6666d631c95c\nd1d77d1d-420b-45ba-a61a-12049cb17328\n7a85e159-27a8-4891-933c-96243ea40c88\n6421a8a1-be5c-4ddb-b48d-1ac301b31217\ne54f5d49-da6a-4584-8dea-f9676d9cdf56\n8083abf9-4f73-490a-a7cc-ff8c19bd383f\n326863bd-72ee-44ea-b0e0-d44b3d878dc9\nc5f67625-6419-4651-9bbe-7837d88b668f\n1b556809-4d2c-4238-98fd-5c6045e92575\nb1f184f6-fbf0-4477-b247-b52594611285\nc6176e9b-d987-4cb6-b663-7c057a53ab75\naf143957-e5ca-4a63-bc2d-1266dbd4f744\n60b9d918-eb23-4375-b488-00c59be609e7\nf8ee82e7-a4f2-4ee7-b37d-ca2a71514933\n4f6bf1b9-58f9-4f87-9406-34088fb9123d\n24ff91e7-dcac-468d-9569-4e141929d32a\n6c373597-6379-42d5-9d26-d5210ab7aa59\n4f25a908-5c35-4322-b779-3f35d5225ac8\n28bb06eb-b962-40a9-8f13-b622f862ad5f\n6567c163-a910-403a-b1cd-f92061eeea73\neeb2b87d-e13d-4063-9240-e34a51cae6ff\nd8860f04-58d5-4674-a853-9f91d97761e3\ned81809e-de38-4886-b4d8-d240ec3ce09f\n0e340dfc-3f6d-4aae-90c4-fb206426839f\n0aed1782-bdf1-4610-89d9-4695ce98c502\n2fe464b6-80b2-4c29-8df5-23baf009751b\n3bf07142-b5f9-4434-b8c5-ee198ec0ea63\nf122f4c2-8171-4e7c-98e4-2bfe5ba90cb9\n1a178d10-4d6e-4fe4-a9c0-78e825d62552\n40671aa3-59a7-41c2-8eaf-c8d7996222b3\n36297eae-66f9-4a7c-a226-21dc274fc5cf\n04071cc1-c10e-4865-9194-498707507434\nbe493ec1-8658-4ec9-955e-2a2eccd36a5b\nb8bfe02d-9a53-417c-9834-1cd5c4d43cc3\nab75dede-305d-4351-b4a2-ab7c1db20a7a\n2c195deb-fbb0-4944-b51c-6ab6464b521e\nb5993597-efb3-4090-aa9c-9e248ad06850\n34a66547-d121-49cb-8dc9-f922cb189dc4\nf9cdcc91-c496-4cbe-bfd2-99ff0544e69e\nb8a41fcd-243d-45ac-b4cc-ee9cef005184\n83755874-020d-47cc-8301-5943e17e375c\n0fc0e692-9844-48e8-8093-f143731a4de9\na5055e21-3e64-4a36-b239-c86ff4d4d62f\nd1e5a916-ba21-4f53-a9b7-dd7cd4f07164\ndc35896e-5084-4b81-9ebb-42a2cd89e936\ned365d54-a469-4139-b417-c49e4467f784\nc877ef7b-faf6-4a0b-bb5c-cc38b8685821\n39baf915-0696-4478-83f2-19829230215f\n1f9f228c-b900-4568-bd62-f34564c237af\n55f70f53-185b-4e35-9c3b-065580f87b0a\n52c07f38-324a-478a-bd1a-9ab83f0d0ff1\n63ed5d5b-f0d4-4dbf-82f1-b3cd64799a47\nbe95dc63-e8a5-4d9f-9067-6c1311590b1b\n1d3898db-472f-461f-a458-baa1c601a287\nf41c46bc-ca74-4170-8452-92d2d4ca7424\nce17c75e-c590-44bb-9aa0-a8effd8a12e1\nae957351-fcc9-487d-b913-24262a7f4a75\n9c0d1c89-a6e6-4edd-a486-a8a126fbf826\na66b3499-6038-4634-9df4-0c17a1d83c9d\n7d574a84-6e00-45c0-936b-f6b358121ea9\n20271221-0dc9-47f7-a2b9-86ab5a991f6d\n495c690a-1d12-4618-a60b-be6b539d9d1e\n7856fdd2-a86f-44e9-85a9-5be710ed6150\na1a841e8-0d12-4e63-b0b5-c9288f4daf3e\ne3c84fef-9ef9-44d0-b571-4e60cfb4785b\nac980693-c542-413f-b086-e3b5678c93ac\nc93a445a-150c-4d51-8c76-9c3308c64fa6\n58352d25-dc48-4a28-9a55-cf28b74ecec3\n52d1c5c9-f910-4de2-8b40-08c0bce9ff1f\n75edead6-2beb-4103-a8b7-f3296bbe9296\na36bbacf-6edd-4b8e-b58f-6a36ac09dcdc\n85062477-616c-480b-a570-406123a4740f\n856ccc18-91e4-4859-8cab-218a43a269d6\nc33744e2-ee14-4f31-9fed-b3d6bc60709d\nad9d6db7-3be7-4d15-8656-e3c2a5bd215b\n0131b7cd-e98b-434d-93af-2f06ccea42ca\n96af0243-e387-459f-8e16-52a3cabb8ee3\n3e165765-da6f-434c-8a33-cd068f563270\n6f40da25-48df-422a-a3b9-80ee828cdfb3\ne84e7725-52e0-48da-83d4-8a76a48dabef\n8b184b1f-404b-49fa-812b-5049f6d7dd9f\nba951d86-fff0-4e27-b8b5-e29083c70ffb\nb191c5bc-4ad7-451e-96bb-c43d63723747\n90344a18-fd61-4fd5-b142-3876a77bd70e\n47c62848-bd6c-41f7-84bb-5d9646098415\ndb319ec0-a729-4575-9a60-630cbe01b941\n7e7b4260-a0cf-4467-a78b-edcec303b433\n5dd3f8d0-d825-4ec8-89a4-1ae7c2d1f38d\n4f27aea6-14ec-412a-b0e9-1e4a80de97a1\nd0beb0b3-df40-428e-a0f9-36bd2938152f\n52ec7bae-533d-427a-998a-5b35fd4b3c09\n8809add1-5a15-4e8f-abeb-610934a0d051\nd9a622f9-3aa0-4e9d-97b7-37d55e1eb625\n09b6ae7a-f54b-4fc4-bc34-04206785db1c\n098df3c5-fb8e-445e-8cd2-1813365b7fdd\n9436e044-17b2-408c-8d13-b31f0d5b1445\n7d26dd17-d439-4fca-ad1b-ef005a73f038\n2dc24b49-7eac-4d19-8548-f804e1ebe960\ne2aa3bf8-db91-4231-b06d-3a69d553e3c0\n388a9fbd-df0c-45e4-bd44-74b4ce8777d0\n16bcef05-d057-43dc-89e7-2eaf2e8d0b5d\n1926cce6-8026-4c02-8743-f750be7d8eeb\ne64c73a2-84ef-447b-9b99-306ae1f2a6ea\n74af6d07-d269-48fd-bc71-8b4b24e98bb6\n8745fc68-cd61-4fc5-aac0-688224a2cdc3\n4823bcd4-3c80-44c7-b88a-cb3fe703013e\nba395a33-e493-4ebb-8519-030a19652ba6\nf32ea7ac-b684-47da-b64f-8ce3b98149ad\n71c89f14-fad9-43c5-ba0e-d26c2ba84a4e\n0874f9d2-a631-4ebd-b09a-bc7aa5cc3c01\n38b9b933-997a-4b00-a5bb-b0ca5430ac1f\n11d68d48-faad-40e7-a5f6-3348326f03ff\n3d75d111-7ae0-4036-acc4-efd6127296da\n9927ca0c-9329-4f07-8c89-12b3545648f3\n038746ff-eec5-4ace-b533-cd6d008e3704\n8b57e041-972f-4814-b3d4-653565bdb778\nb0b1b799-023c-4076-a65f-42aa0f011f35\nda5f2f79-ca46-4e09-bf05-0c44f997f038\n488847b2-7b9f-4205-8140-bc35a08879f3\nbd5f9afb-2655-4fc4-b418-b648d0fb99cc\neebbecf3-2832-4483-a515-92be6169f37d\nfd56c0c1-5088-4d3b-91c9-185bae4b1d02\n57e4dcd3-edbe-495f-9d12-dba9d19782df\naba24de0-4c2e-47d8-a8dd-3f7565733ed2\nc2a46324-3d74-453d-84a4-48ff7db71c0b\n0e9205ba-4e39-49e5-8c15-8614bdba2ca6\nf4241581-7d49-4cb3-baee-79c5394a8549\ndd7c645a-f971-4201-b944-ab0d0caa1ce5\n80453195-061b-4cec-bf2f-1f0f7f4d7141\n4f4b5504-31d9-47b9-a1ec-1524eb9f9d56\n71e478cb-6063-4198-8b71-8625110b0e72\n1fd1f9eb-efc4-467f-b9ae-5fd88eb4e7ec\nb8d8cc43-2c26-4be4-9c29-c6868361c342\nce353fd7-33ea-4f5f-8029-a60d38c6d8cb\na3a90ad5-b4e9-422b-81c3-363fa9f41c5b\n03677ffe-27cb-48b3-8aa1-c8d7e79645ee\n0cbdcead-6029-46ea-a1ae-1a0e7b4cc786\nace2c584-991e-4553-9b76-65466cdcc2b3\nd8a523fe-0f6a-458c-806a-7ee69972434e\n7c1005d0-051b-4c72-b4b0-83bb8a8dc842\ncffa55d8-49ed-4163-bae4-709a4ea54472\nf5c83b14-4727-404f-929b-7aa6945d233c\nd3730b44-f7c5-4287-955e-623ecb10ce02\n47bf641a-3f4e-4266-9fc8-953dbe7e5619\n8f8e9dce-294f-4e8f-a466-f32fee43120e\n2fd27c78-1f18-40de-b092-2b8faabc7e94\na228ea43-59e8-4349-8d37-c9263850d225\ncc9a75f7-d23e-4424-bbb7-3e33d61a0d99\nc2989f95-7891-4092-a227-18dd3c997607\n7f4f9ab4-94fd-4f4b-b649-e98a7c734b61\nd50590cb-114c-488b-9565-b456ac9dae8b\n0a958c9c-5f6e-47fc-8420-7a528517e0ac\n805b3b2b-1c44-473d-a4ab-eb77b88ecc88\nd6c369d0-fd98-416a-9d63-777b39ce5d05\nc4bf07bc-98c2-4bb8-a180-3b3661ee3bb0\n3b963ee1-49b3-4dc8-aaa8-669b158c965d\n9aab0a7d-f507-4c47-acdd-3ca29f8f466a\nd6c97a3e-fc7f-4ee2-967f-3e9883d47dc4\n41928493-c9b1-4d28-a9e2-cf91307084ef\n35729501-984b-4f4a-9509-500d509b2b76\n48dea80f-cbdb-4fab-8244-c36ce72fd4f3\n453deff4-8c6e-445e-8fb9-02316ff9a558\ne4bb75d1-4fa9-44e4-92f8-ef1f44a1f8da\n85028444-704b-4db2-a4c7-4b62a8e755ac\n32fb5e59-b0ac-499e-a4fe-0195d082bd43\ne4d22ac2-cc76-4772-84fb-ef2bf49bd123\nb46db5d9-a696-48e3-90ae-7c37739cbf57\na8c1efa5-e201-499b-abf8-9878f24d193e\ndabc8a41-2e9c-409a-9ec6-7b89633f98b4\na0cddffb-b4fd-4dea-b6d7-5b3d64492dcb\neb9ce691-cb2c-49ae-b5b7-aaf542492cc3\n4d923ed2-64c0-4f17-8e1c-1f8a58eaf191\nf7b12126-0133-4e3f-a253-2b014dc367aa\nf2300146-8f02-40bb-b81f-08cf29524028\n7e4e5577-f58b-4bf9-9daa-b992c59f4894\n9675cb9d-ea20-47cf-818d-e8efb5c5cc8c\ne889ade7-fad4-421c-ae34-655e322bfbe2\n1586810d-df5e-41fd-85be-0cffb7d49d6c\nb0293df1-03e1-4da2-9e8b-f91cc257da6e\n9c5103cf-e279-4dfc-9883-7c97e2e0aac4\nc1c5baf1-21db-47e9-89db-5cbca84ed265\n853d5fd7-6db1-4f88-b138-f4ccb0164d57\n4ac0645a-481e-4653-b3cb-3b33347f595c\n16964721-1bb5-4806-b0d2-ad2bb89a1454\n35d2eb39-036f-428f-b36b-7c3479c66167\n8c14cf76-f96a-480c-8360-70554ed9f6e1\n1de40e96-6347-4844-b5ba-da8382a3167c\n68bce760-a13a-4d42-8d77-5548c5b8685f\n33bc8051-5191-4e96-ae74-e14999108665\na3fdd668-bcf2-476f-8f1f-fc27ba849350\n7ddaa3d4-8089-4c3a-a1e4-59caffa22e2c\n06ebc0c2-fc1d-4d3d-9517-037dcf06aa70\n100971cc-c801-41f6-b918-ec48b5da40e6\n774c58e8-2de8-4c6a-b656-d28f039a9083\na5e611e5-7340-4b24-a1dc-2a2c36e67b3b\nf6b8615a-96c5-43c2-b19e-6d4378478a3d\nbb89c946-29fb-4183-ac31-1056c7c2faaa\nde81e039-0e45-4bb1-8d68-022877664508\n035abb67-7429-4b6a-b43e-8606594f62d5\ne23376ab-b7af-410e-88b4-04b777c19058\n9b3271a2-f8c0-4847-b0d4-31933c65fa15\n01378174-ed4e-4f2f-b3c4-87344a3df70f\ne647bc5a-5a17-48c7-837f-7b8f806fcb31\n939a1d82-2aca-4b6b-8b4f-154062169ded\n96e52a54-b5b7-415d-9e89-dd933eac4a29\n62e32721-d4f1-49df-8190-cca7d117cb79\n64452513-b1d7-4740-9d7b-292a6718f388\nd635884f-2924-4a9c-8835-b807c07ffcaa\n87c4bbc7-2ab9-4d35-aded-de96a15c7282\n70b9c01d-edda-4766-9ad6-e0206dec1bfa\n4c8bbc6f-24bc-4695-b354-a8cc8e20a8f4\n46d3775b-c84e-4911-b03a-b96c5f3eff26\ndec2ee39-d253-46d9-b62d-7ee87f3fcb2a\n0082e1d7-16a6-4f8e-807b-33c9c2b6e617\ndf64d56e-9ad8-417a-a5bd-2cb0b9b8f2fe\nb9bf1e11-f535-4c0d-9c8f-57331dd2e012\n2c5e0098-f33e-4fca-830a-b33d4b1ac46d\n683073dd-2a7c-43b0-b882-7844b915c6fb\n241f3dec-8f65-4468-959a-09d3e88f6358\nf63fd1ce-953b-40c3-b845-4951cd150783\n62cbf326-25a4-42a7-87dd-513ae5b3a934\ncd42a1a3-7630-4cbf-8e95-9d5bcc87ff9a\n31bae3e3-4e31-48df-b53d-0a5362d7a76b\nf838894e-5725-4fbe-a091-3829cf347fc9\nd5b82a15-b713-405b-b04d-f4dc5778217c\n9b3f79da-900c-454b-9cf5-85742e240ad0\na96c3703-12fc-45a1-8ac6-edd16c0612a2\n71f301e0-f3cc-4842-8443-8a6b7da127c9\nd4e9c9a0-2fb4-4d90-af44-0484f0f20952\nc08b623e-2fe5-467a-bc6e-17b5a935088b\n31b9445f-8e5a-461f-8926-2742ee830487\ndc08bd19-d5c6-46de-a6ee-ebbb7a447974\nb61ae6f0-f8e0-43fe-ab94-950f53829243\n653e70b8-50e6-44eb-aa13-2569012e7ab3\n1f576bf2-f1c6-4da0-aedb-ad077f0896f4\nb282c26a-8a61-485d-9423-167026e83529\n96daf3c7-001d-48ed-9e9b-9632bb572c4e\ne57d5cc9-fd29-4b31-98bb-4c816d8d3ff8\nf3539ad9-dd89-4de6-acf2-00d2932ed71c\n3abf9862-eb4f-4c5a-b13a-b6e42c76e666\n00ea294b-efc3-4975-b2d3-188b86177b6a\n13edc2e0-30f5-4d17-a02f-e8789d083a83\n402d44f1-9346-4fa5-9942-e7b130e1305c\nc5c65d5d-e399-43d6-9d67-0e7da763fa53\n81cc84c7-7fac-40db-abd8-400f6ac87ee5\n6c855daf-9270-466a-abd2-ea4e90df4ec5\n41e4a5be-fb2b-498b-8bed-1e7e6ae3e2bb\n3beb9e6c-3f7c-46ce-9164-0cf3b562772c\na071d942-66ee-4216-9cf6-ce0e045bbee7\n86b03001-6ad5-4534-aa15-4b5eb50c6c12\n7a58a0ba-faef-4ab1-8972-c476363fcdf1\n08969145-6df2-489f-a762-ee1811b268f4\n27a9ea03-cc9f-474b-b9c2-f4dd9ade29ac\nbead5b06-997d-4e32-bfb9-c9d2b5ea6274\n995a3b6b-313b-4e81-954e-658798919df9\nab8f40ff-2ccd-449a-b199-61dc9bbbc799\n61dae784-c224-4343-b40f-3de49d1a31b0\n13fa776e-0438-4d06-8687-2908ff9bce75\na4e32d9a-0c94-4759-bb44-df2585fe8ef7\nf4e0efa6-2b55-4cbd-97f5-2ba80d8d7573\ndcf67921-12ef-4cc3-ae94-681f70ec715a\n58cba7d5-1a9a-442a-8021-74742622bb80\n70af35b2-feb6-4fdf-9706-43a3c1ed0adb\n98297a6e-45f9-49ed-8f04-7b94dfe3dd62\nae1cd1a0-c8c9-4157-a871-717441ace924\nc3d7d1f4-8090-48c6-abd3-2075f3f75a9e\n090a99b0-afe8-4e33-adea-5ebea9d62b47\n38d036fb-afe5-4be4-ab10-5a1423d67e99\nf9429db6-d8f2-4786-8343-9f89fdccf93f\n00fe91ce-6bf3-4966-81eb-f184a0f43f72\na4d52190-c0be-4a4a-9d57-e98592636fd2\n27899060-053c-4328-96c4-94b9977b65df\n35a2f6ad-83b3-4cf6-a13e-3ee7d64009e0\nc8653741-b405-49f2-9b5c-f78b587b6d66\ndb51b8f1-99c4-4e25-9deb-ebe040acf9eb\nedd0d5da-e53c-489e-8452-962abc547fb8\nb02a362b-a903-4ad2-bd7b-46bbed33dc9f\n71fa22e0-9dfc-486d-8361-bf86aa206c0a\n566d7cbc-a92c-4c46-b45b-a6ad2eaeaa63\nd0c5f64c-04fe-4d90-814c-552ff5f1d089\na4cf2237-a100-4849-ba3b-53cd9b8e6cfa\n22af3f27-c90f-413e-b252-612350085db2\n58d76557-2014-4ec1-ab97-f0ec955b1098\n5591fcfe-ba21-4fc5-bf78-d1bff0f707be\n4cbf42d2-b5aa-4485-add6-ca8a428bab93\ndbc10d49-5772-4bf8-a5a9-7e987a7f3bcc\n025b7a64-a796-42b4-b52d-c9450d234904\nca17338a-c6e4-495e-b98a-e386c63d935a\n73cfbc11-eb3f-4f3e-a42b-4179887d41c3\n0dc10828-6e58-4341-90cd-542ab7b05926\nb57df5dc-25b5-4f49-9276-eeaa917184ba\n55393f82-2678-4be9-b80f-542beeadf0cc\n57af97a7-1d1b-468b-8ae7-d7a454285206\nca460b4d-c9e4-4cfd-af17-03455c776cfb\n2f07d773-7899-40b1-a37a-5eed8be447bf\nc51344fa-890d-499b-ad8b-34adcd4781a3\na63177e3-0607-4437-bf4f-b50203d34b81\n11cc9295-76d9-4cf1-acf7-0642b67910ce\n80281185-47ac-4a5f-a446-443af0a10041\n44734afd-504e-43fe-9ebf-e6a026c53ec7\n186d535a-b4e0-4234-9892-8177083bbfb2\nfcb13d5f-087c-4c99-90b4-397428b07768\ne24f60df-969c-4b3f-85a8-9e9d77ebdee1\nd13437e9-6190-4a03-8ebc-33954a0a7b0c\nf481641c-23e1-4b6f-83b6-26df6902df51\n3fb59759-766e-4700-b932-de822e359ae0\n7014aff7-c4d0-4d6a-afb4-ea769369c91a\ncf91aa21-af87-4af9-8aa1-6abda8118e5d\n5bbf8875-d79c-443e-b1e5-fd59afab6b6b\n559354b9-eefe-412d-9a3d-9589e4c060c1\n758b9ce8-628a-4c05-b628-93d8fa7eb69f\na6f3dabb-82d8-4c93-83d2-14e086eb502a\nf8720927-a4f7-4b0b-bb5e-5af045a00ef3\na4cbb44a-79a9-4997-a11a-3a53f8e8465f\nac390ae7-7bfa-47fe-b422-24ca0037bcb6\n1f75225b-5c1c-4df3-b191-f44baa683b87\n6ed41410-fcdf-4d32-9e5f-9c2f87d1712e\n5739f989-227b-48f1-909f-7a364d407a7b\n5b8f55c6-f7a5-4046-aa3f-2e7b0cac4cde\naca3bf76-7650-41e6-acc7-48c8030baff1\n80b7a33b-8ab8-4f49-8da1-f2a7b3ae15b4\ne909241b-24ff-4c20-8ddb-610f38185652\nd8ac1677-639e-4882-8127-553f283e3391\n0bacbb5c-e95a-4c48-98d3-850428fbb714\n4e382c9e-099c-4be2-b211-fbbfe70f9a42\nb4d7b135-16ee-4d09-9a3d-6303fb5d6f9d\n333c8404-fc7d-4fc3-b45a-1f85adf1f7d5\n22ab59e6-3739-4d14-897a-e6c0e8d3cad6\n72bf0960-f73a-4d7c-aec9-f7a602968798\n21b28e44-baf2-4a89-90aa-494af8dcc089\n5d880ee5-c3e8-4544-93b2-1c1ecc6f5a6c\n81c09128-5efa-4967-873b-07b2b9e83cdd\n24c43ae1-c903-4665-a520-bbaabf353748\n6a6bd14e-ea8e-4c67-96e8-91a479f2761b\n0e9c3256-13ae-4e50-a846-00dac2a42047\n1bfe891c-b0b7-4faf-9b73-0da4e9b9b6e1\ne4462c56-7b31-4468-9bc8-291a25fef917\n38e6a1af-b38b-4cb0-b1bc-5b897a1f86ba\n343494c2-fee6-411a-817c-ca4574a1063d\nfb659ce2-bc79-4d64-b624-7a9353ffb470\n856dd157-a1ad-48bb-916c-01f1ed8fe2a5\naefde074-543f-49af-97dc-cec621d85147\n536a17d5-29ce-450c-af16-d7e48141e911\n7fd0c3f9-e787-4f08-b620-6150ffd56796\n6efeb5df-c788-40fb-a648-dce0ed091bf2\n677590ab-6829-4604-954a-d1c875717ff6\na88f30af-8c6f-4b2f-b023-05ab40d27b3f\n5c3f5446-417f-4e0a-bedc-cf963a29a21b\nbe7da517-3bfc-4c7f-b89f-a0c56b025afd\nc8c78482-0d2f-4c83-a060-c096f65b71aa\n6366b2c7-da58-4b11-b0cc-00741a3c8985\n4b4dd66b-af62-4518-b7aa-eefb232d2750\ne2cacdc8-2f8c-4d91-af67-ec3f30a1496e\n5f7c8a53-391f-4481-b2ad-29fccbee9315\n170c4616-54d5-4179-bdf5-09cfd30a0ed7\nd541b36f-867b-4e3e-a68c-70d9b14ce088\n0e474d78-bb57-4222-b34f-b14277c7a284\n4d3ca39b-9977-44ad-aee2-41e829f57f44\n9c3133ca-2da2-49bc-88f9-e73a2872a0e4\nb1f29417-7c47-4804-903b-ee892957d1a1\n976263a2-ec3a-4fd4-a619-09b6a7782ca1\n78e4d16a-a2e1-4ddb-bd87-7df50a6e0fc1\n9c4a88c5-b135-466d-85b5-679182f072dd\n33deebb9-1be0-4f03-ab7c-bca7a73da8b4\n2e0f0ad7-36bd-4d79-ad20-803dbd50120e\n75fcca86-f330-4d23-9654-6cf18540d2e1\nb100719c-d4f3-4b43-a567-a6b3c718b659\ne6e93cd2-4761-40ee-aaf8-9fda691a90f5\ne830248b-68d7-4ef4-911d-9ef518e11597\n6f20ca16-b3bb-4670-aa92-7349da83a83c\na10570e8-fe0e-4d07-b97b-688804d36ab1\n6a000c47-f3f7-4dd3-b0ba-f5b73a690218\nfebb2f20-f809-404b-aa13-2d56091b8fa3\na2da5cd8-3e05-4f36-909c-b53581e829f9\ne96785f3-722a-418d-99eb-ca8844457264\n26ecc58d-e365-489c-b1be-19375fddd89c\n7cd9cd61-153d-450b-9b42-512c9f561428\n700328a2-2130-485f-91cd-24452c590538\n70e3b24f-69c5-4632-876f-235e14d5414f\n6873679e-b84e-4e9c-ad12-cc19f0ee1b5b\nb0de0366-2b28-4c25-80d7-3420093ed098\n73a22d29-5f8b-4b10-a940-5aee8bbdce24\ncef1037e-f7ef-4cb0-ba49-1938a1997852\n07e2993b-ea34-4fcb-a03f-ce5973c3426f\nbf6f95a5-79e7-4ef8-8183-72522d0fb454\n6df463be-f160-4de6-b65c-a43aa307b21a\n4c96012c-3695-492e-8b6f-a5ff872f9e86\n25333b2a-d616-4d8d-bfd6-c4d5f8179aa6\nbfc03d22-f5bd-407d-bd11-21b87e7c1004\n8a7756d6-8dec-462f-9d0a-b6a8c85220ca\na8561bf4-728f-4c31-9fde-ce561cc45a6d\nd7f6f210-d24f-4ef9-b39b-8523ef6eb6a1\n922b1d24-ec74-4a6f-b060-730fbb345520\nf2312c13-256b-4635-a65f-8a0660cb00cf\n738f6220-243b-4e57-a57b-1b01f7a98503\n2dd8756d-d258-4ad1-9aad-22a0fb124c9d\n660af30f-483d-41af-b894-71ab94faadb8\nf7b38223-cb6f-4aa9-8e31-4c54b677abf8\nff5f2c6a-2637-41d6-a198-ef12f4b19fb7\n3a890457-8506-49e7-b712-4e05e6adde0e\n22a9dda5-7290-460e-bc07-d2a1f4b8ad96\na25a4f53-b9a9-484a-a8ae-a83de73a42a2\n6e46fc5b-79dc-44bb-b0b0-c8e029c1a06e\n20b50b5c-3301-4acb-a6c2-287c0876d2ad\nd468b0e1-e43d-4e7b-885e-0fdd05c6403a\n8c603f27-6f84-4079-b472-710de4579837\nff54ebe2-1194-402b-b19b-39f2bb1fa615\n7a5ae394-cad0-426f-a29d-89fdc56e0be5\n1109a0e7-d117-45bf-9409-d18909cf6477\n2f2c55a5-a3f5-4c55-b904-fa76fe304146\n3b8b2d3e-40a5-4e8f-826c-439cfa339f2b\nd1f45578-d54e-4632-90f2-2c624e09f204\nf3b9089d-c8b2-495a-94a4-82869e9a5354\ne935c1c8-562a-4fbb-b952-870988a11f35\n5f14c736-1c86-4952-b7d8-b4d893d96c65\nfd792990-0cbc-4871-914c-e42ecb0269f6\n09347243-fc8b-439c-9d4c-dd4e5135bb44\n0c8dd937-d75f-4332-a1e5-05c6074495c7\n7b1a2ebb-d13b-4229-81d7-82f86593b503\n4252af68-8b4c-4dd4-a3cf-6f552e23c2c8\n200f8629-ca3c-4383-b151-b7d648472891\nca059df6-c754-4309-825c-809b760ecdd4\n5aea8859-6364-4e1c-b336-e3cb8376256d\n7b4e4c91-e9fe-45fd-aba6-64a134a40b18\nedc589c1-7934-4c5b-9701-1045188abf74\ne0ef8230-f2a3-4c1b-b22c-ab5def26e86f\n8a3ca54c-17df-4e84-acbc-c23b546da634\n1c92c7b2-caad-4f2d-bf5c-7d954cde0fc3\n5d9b5b3d-1b9b-4241-a52f-3ec30da1fea0\na78c371b-4309-428f-be2e-446eebdbef09\n13c978c5-29b4-4c35-b7c0-6734307d7994\nae035273-b71e-424e-a977-b0625dfaa28a\nfd4905b7-93d3-4479-b296-a0ca44192e73\n39547515-7c50-486c-bc79-0d0277025cbd\n5ec1d7ca-3e10-44e1-bc5b-bd4b3acee48a\ndfa709c5-4498-4892-91b2-186f2315798a\naba95299-5446-4151-8f60-a3c9a9eeac96\ne1885590-a751-4b8c-97c5-2744b783c7ef\n7e10c3bc-6b18-4af3-af07-a78fc095da2c\n61fb25a2-86bd-4362-822b-0fef8f7b462f\n483ebb3d-e001-4de2-8c35-89f15594668b\nde4657e1-2c23-42a9-b5f5-8cf35d1de1a5\nab8e2a10-eecb-4019-84b2-6235ababe59a\nc4828568-fa0b-4959-a2cc-6a36ab7800f1\n278d77ce-c273-404d-9b27-0d563feadd75\n0aceb070-20cb-4427-bae1-bc4feff12d9c\n44a1b410-83a0-42c2-aef6-3ed2ddfe4810\nbf272d2f-e829-4545-ae49-a99592613441\n5b6f7417-5ffc-4fbb-97cd-83ebbc5da42b\nf95e4012-f2c5-4f29-bbb9-ef9cee1342db\n4eaab41f-1d07-471d-a8ea-a84631a1a35f\n1062c2e8-8b72-4b91-b742-6ef6e50cb7e7\nce55a5b0-adc1-48a5-9e23-5fa062685fca\na5b8886e-4cbe-4571-a527-8c654303a19c\n277e1a96-f2e8-48b9-b5b1-2e843b3d2b3b\n999b4758-43ed-4b51-860f-ffdebca85789\n3c2620e2-783f-48a3-bb51-89325386de0d\ne22d2218-8b35-4816-be1a-2f6e942be239\nc3161c56-c6c2-4632-83fa-17991cf41e30\nae95d60f-6aeb-4ffb-988e-6b85b096843b\nd8544e3a-77e3-4ae8-b8cb-6a95cbb474ae\n2e03a6f5-67c3-40f2-ba3d-43551585aafb\nc10ff797-e9c7-4f1c-b94c-721383580baa\n14259ac1-486a-496f-b1a3-22666c7d39c5\n87e2e781-3661-4d32-8d37-8440c1812d38\nf0e2004f-d4b9-4fce-a00d-70356fb177f8\n49d5b43a-bf93-4848-80df-3f3d19beb664\n8fa20ea3-2ec9-4f7f-baf3-e57bc7a0b82d\n385dd405-1e1c-4a88-9303-e7f5d78f9513\n488d2c57-0d68-4296-9fcd-3ec115ccbb3e\n7b1eada7-e53d-47fa-b899-3e6f3eed7e2b\nb43425ac-6848-4216-a220-862800f69fa0\n51500015-dbf4-4578-b578-ac0752c516d0\n9c991c9b-50f4-450f-a4af-a39d97040feb\n350225c1-a672-4d70-b5af-629a4b74a2ae\nc54ca0ec-58d2-4369-b275-831ccd98e6ec\n14ff6eae-dc4d-401a-af87-75567007ed1e\naab2fee5-aca8-4653-aef0-7c41f8d34fc1\n4c7bb808-dd42-4f82-94a1-b2c8ee38db57\n70063109-f0cf-4a17-b12d-cf26d32072c6\n772982cf-fab1-486b-a62c-64bbe9a1a761\n6da004c7-32f6-4e50-9f5a-11a0e2633c06\ndc4423d7-69ac-4160-93a0-44135194db5d\n8a83b3ae-dd14-4799-b221-44a496d15747\nfdcfc18b-bb4c-4ce3-973b-6beb3c511868\nacaa2ee8-965e-4050-ac11-b92970aa82a3\n240e4360-9513-4faa-a035-ddec4b19b806\n72877297-2ff2-45e6-b8e6-14a32549fe18\n4e3a0f6f-c8f7-4ac1-ac36-da61ee3c8f86\ndae564e3-6235-4a29-a40c-46933ce882be\n210bf7c9-bdfc-4f49-b7b2-83b961f4126c\nd99eedd0-7daf-4f1e-9095-6ee999d20e4b\n7a9bd59e-fc47-4435-86bf-0b3808a1194f\ncad3b6e7-8d3a-4ae5-b37a-2f718eec99fc\ne3866a20-3bbd-4db1-9a2d-0b88a889693d\nc5916326-c6a8-4b2a-9bae-7390491c9b8c\n0bfaa717-88ce-4dfa-b9f9-d7ef3e401c05\n2a66a1c8-108a-400c-890c-e1855b2e713d\n6329ec1e-283c-4088-9a25-77dce10e18be\n7f7296d2-9aaf-48e7-a729-6795a59d19c2\n31374772-f903-4fe1-b874-25e3a50b2a71\n289525f4-a204-4979-90b8-59994f2905c3\n4010c233-d310-4c58-90bc-c9fffd1f17d8\n98c70776-6c9e-42ca-8cbf-125eb9b2c8f2\n20c5dcec-0dcb-48e9-a244-e763fcd67590\n1267e061-3f71-4af4-a1ea-0c6027d0ad39\n10411756-01a0-4ae7-bf22-4f7aba94c366\n3f3b1d78-f2e8-48c2-a65a-1e07b34735f1\ndd2add63-c9ad-4540-afcf-e6ab9100c9b9\na3876245-962e-45d4-92bd-fcb71dd66a73\n2bc44263-759e-43ee-88b6-92b805025386\n526ac6f8-b241-4f85-921d-c9d853fc6a0f\n6bfb9b6e-05a4-4740-bc3d-66d551ecd406\na6639cc6-e126-4959-8a82-22953c24e1c0\n53a38b2f-1f50-4177-9bd4-dbe4a5bd7e32\n55ddf9c1-3da9-4a96-9921-7c81472ccff8\n29150d67-17a6-4bf9-aa69-0f80563fbaa4\nf9b504e9-d888-4590-90cb-630a198aaac3\n05bbbafe-4067-4362-b3f0-9d8005a68d9c\nc1b046f3-dd9e-4ce2-94d6-39d3429899a5\n16dce011-187b-4164-b3f0-bb1cba90cec4\n57a798c7-e295-4aff-9170-54dbe90fa2b6\n88836518-0231-48ed-a486-bb515606e0b7\n2e1d74e0-02fa-4237-924e-de9122aafce5\n4f40233f-b046-42f4-ad16-843514c5849c\nc3242439-ffff-400e-befe-efd7c84c407f\n2f65f7ab-ef85-4785-9bd1-49fe42d87c44\ne2c932ea-37d2-48a1-a36c-2df77a2c2216\ne6ef4362-fbc4-440f-8a7e-3d88b6e1a555\n477da294-e8f3-4768-8011-ca4ca3abdb46\nb4e24334-1c87-49db-8749-48203eb12079\n287dec1e-098e-4956-86bc-9a893e0a19b8\n6cca4a60-a254-47d0-8a2e-ca5edb139985\nc15d82bb-e4e7-4fa1-ab4b-2b15ba45fecf\n98f05bd2-cd07-4ecb-90db-199c4288640a\n1f8b1f3e-a2bd-4f22-a687-02852c3f49e3\n0352c7bb-fea6-4b3f-b011-facc4d925608\n48d686ae-ba47-4482-8b5a-52e14d400da5\n966fd6f1-8468-408c-a537-b29f7e64bbb5\nebafe36c-eeef-48f7-8275-d3da97ba1775\nc6279c72-483e-4c8d-b96a-150617b5fa38\n471c20ee-c6fd-4d99-8622-8797d5f16ab9\nf46fc46b-22d6-47d2-850e-ee3a383011a5\nb2badb25-0535-45e8-bb3a-d3096fabdb0f\n3face8b1-d866-482d-9300-e07e21646553\nb5a5a804-091c-432d-a788-007d61119ff6\nb273f3b0-817d-4bc5-b4c7-5330af404c96\n81a6c969-c653-4865-989c-28cc3a71b58b\nd2eb04ba-270f-46ef-a6c8-936c0beb10e2\ne93cc8c9-68fd-44dc-b086-636fd9829f58\nb39eeb6a-2fe2-4177-a7e5-c8e10e36e31f\ne8e88e37-c3e0-4f1d-93e3-6cecb334f9e4\ne9a12787-6eae-462c-af5b-eafbcec64a4b\necc54b24-2213-4a01-9d36-e40c7478adcb\ne09fb2e4-2718-4fd6-9ab6-799efc563c69\n94e3c86e-3a71-41e5-8946-55a6c5d67de1\n5abf2724-0aec-413b-8e65-fefba4232fce\n05175d21-a2cf-4422-9228-6e85e4e29eb5\n7ea09421-0c09-488d-b346-32cf9604f9ca\n96379387-c5f6-4c1d-bd34-609702031a9d\n355d0953-cc54-4925-b624-c9b59604dc3c\nc9b4b959-157e-43f5-a8d0-629621e64d6a\n269c9130-cb04-49d6-8c0c-e4275dd23c83\n867cb1ed-cc24-4855-9369-2283e636a284\n5592e1e6-94c4-4fbf-b785-5086e049f04f\nebe1a5fe-afe1-48ca-be16-2be5fcac9dbb\nfb8bb9bf-2904-46c1-9d48-0edec7632af1\n50b24143-fc0a-486e-95ec-bd04ded654f8\nbd0b8e9f-3a1b-4bef-88f1-2e2d843cfde4\n31785d1b-b681-439b-a5ef-150c50f73c9f\n6d6ea78f-450c-4989-a840-294bb6d20bbb\ncfb7ff97-1c74-4f5d-91bc-29e3621a2b62\neb8eda8a-6d68-488f-b0bb-4f80b00c13a1\n287b57d2-b316-45c8-b118-872183aaae00\ne366e484-53d7-46aa-81e8-6cc4f37eefee\n425da27e-8623-44f1-811c-c7aec4048daf\n37c6afe7-2a0d-4146-ac19-574e2ac06082\n2b298db6-b0a0-4501-a469-8f622b2baaee\neaa29db2-465e-427b-a55d-be7172959d6c\n768a1b08-715f-4d03-bd23-ef2f3d183ff0\n61c98cb0-855f-4d6a-9d9b-53b7929085a9\n0ebca71a-9016-4467-b4a0-1ea23c4eb516\n54da9476-be25-4db9-bd53-e1005778605b\n9e773269-70c8-40f8-b68e-804d606eaa50\n9283680f-59ba-4edf-ac21-6f2d0702bb3f\n3df85e86-f8e6-44b7-a3d2-91c40fda4ba5\n592e6c49-b7bf-41ba-89fc-e114a1d46c01\n6a7b657f-4d81-45fa-8c2c-e66a33671dc1\na6cd65ed-c43a-4876-80d8-c9b1a04e0c53\ncf95d628-9630-4562-add1-1a4be819042d\nd1493892-4b9d-4df7-af8b-fb26fb36caa3\n48fd09cc-528d-4fbe-8f66-20911e7613b3\ne32756c6-cc34-4849-92be-ce3b59f0cabd\n10974edd-aaae-4cab-8ddb-a4fd017733af\ncf60cc2f-be90-4f10-bf98-23ae1ba01243\n6d13057f-8df0-4ef1-a7a2-fc08ba9442a2\n6d3c46da-81ca-46c8-843e-9ff718e2a6f3\naa271b02-407a-4f13-a7ae-e8095b52459d\ne4f994bf-351e-4cc9-bab2-504f6a1a96da\nbb18f887-cdc4-402e-97cf-9dd3d651aac2\na0a63856-b880-40d1-90e0-87fac8237cb4\n59464a1f-5cb1-417b-bb83-323bb2d752d3\ncf9926e7-bcbe-4b6f-b2e5-80bb3d154706\nbbb893f8-9108-4100-9452-63abb37c129e\n776f33d7-9b93-43bf-a2b0-c24b07c0df96\n0f76f99a-16f2-43a2-86df-26723a97d20b\n882f9fa5-0a53-4a7d-bcb7-6d3c5c35d60d\n06ec14bb-d024-46e8-8cf3-6f68f8fa1cac\n44d1d377-750b-4f42-8c1c-6712073e8c41\naf851fec-edd0-45ba-a584-86cfbc94e4c0\nc12605e5-9e64-4fa7-a583-8b68ac07b363\n4f59f49c-2ec4-4c18-b6ba-06c38c1f894d\naf10a2b5-a399-436c-a150-98412eb18a62\n2abf6453-5216-40bc-a187-75923a990c9c\n415b3686-21bd-4e6f-b4d4-5489078a3ae4\na9628a95-a666-4d45-b171-5b6c8e7e06ab\nabceaf92-7c91-4d68-983d-0ba419b1e223\n2d3cf2e3-6aaa-45c1-9fb7-352e8109846d\n6ac24a78-2cc4-4009-94be-44f2f74df56c\nc4ce605e-d269-4e65-aa9c-90d62d6359e0\n252dc8e8-f4d1-4e8a-b27b-296ebbe36364\n5b99f352-b2c7-4a35-875f-9a19e7497b73\n2a57568b-3f58-46c6-9169-7d49aa3cc22a\n24511885-29b6-4f2b-b64d-990fd53c8ca0\nd1b09891-ef58-4f16-9192-56c43030de86\n6abb42cc-1f47-4f8b-91a9-4281abf512f1\n6e5c2711-c7c7-4836-bdd4-dd0c9ce92a6c\n074d95c8-4f41-4d01-b1cf-1fed9b40f4b6\n0191c829-063f-4f90-a5b9-1e1cb2ff8392\n9bcbe0ac-5730-419c-ad99-87d293456e79\n9afb3cf9-6c08-4f33-9aa2-66de6adbba48\nf400ec60-4e71-4356-9ce8-c0e2c09f7155\n6daf1651-2944-4186-8505-d713248d2d1c\n8e9aaa73-e9ff-4bde-b7b9-6ffd76d99028\n4143a910-9ab0-47db-aa9e-1d380be48837\n3585ca7e-8599-4a92-b6a5-2b7951cf8727\n801d28e2-1a84-40c6-b79b-1eb40c57c7b8\nf2026ea2-24a2-406e-afe1-0aeb9fb390f3\n5910906c-24f8-44be-87be-54e54fb2a28e\na9d2393f-881b-49b9-9f06-94397ee57689\n85ff066d-90f6-47e0-bdcd-34068f3dc60b\n7377db37-c9bd-4813-91c1-b45f4fbf615d\nf47ef1c6-bd40-4060-bc6d-1dd00447a738\nffb41af4-cc19-47e2-bffb-249d803f9db1\n4869036c-adfe-4fa3-8843-3942a0dbc856\n5ea72352-7e18-4e11-9e73-0e4c9796ad4b\n1932f85b-fbc4-4737-ada1-9fb6004e7726\n2be3a61f-6c4f-4cfb-aabb-258f562653cf\n4438d88d-6aaa-4261-bc99-6cd0679b0bf2\n065ec9d0-0cfd-42a4-bcb0-01ad4dc8f413\nad40501e-4770-4e69-8e25-eade4eddda03\n5c0647f9-b4e4-4b2f-836a-6a13c26e1a50\nc0cffbbb-4f4a-48a3-821a-379502319905\ne0f7c438-b090-4a08-9831-09a0872e2eab\n183d7656-32ea-4f7b-8ecd-dc9fbb4b8b1e\n8bd7d37e-cda9-4f1e-8ce7-e544686d9451\n1fea169a-8adc-4943-9a06-708667f5ba7c\nc31df0f0-575a-4593-a10c-c73cb562cebf\n15d25f0d-0ff7-42b3-8308-a73228ab96ce\n61e22c09-c364-44fe-b8a3-19b1d9f72f73\n3427acf3-e839-4a12-a00f-70942e5db0c0\n7184cfab-e251-4156-a78e-d8576a88d3e7\n24df8e9f-982b-40c5-8970-48465c201279\n213811f2-aae5-4e85-ad14-e42ec398392c\nbeec85bd-79d8-47e4-ba7f-aa10ba8f2788\nbcb3037f-312f-48b0-b9f5-1b32d76049c2\n896b229b-77ad-421d-a328-1f3195f2ed05\ndc47b541-d02c-4fef-9e23-1af2e6f140ce\nb996d78e-39fd-4a79-a167-a4a9cf525db4\n8b8fdd52-3721-4d1f-8dec-4d7b439b01bd\na9afcc9b-f407-4bf3-89e3-928e6368347d\nb69eded7-e1e2-4a5b-b89f-2f8484228271\n12b1ce36-b0f2-4269-a2e3-14b27d2feaa2\n4e536d09-cad6-456d-a01e-7627939f51f4\nfa0251e2-5b6c-4305-99fe-e0e2b53e2aeb\n361a1b55-4d9e-4a5e-880a-43f2b906551d\n0be4ad0c-16e0-4451-b1f2-d77bee631d48\n17e83809-a42f-4bfb-9bd4-0724c8843b08\nc07d1e7a-ad45-4cb8-8544-e6bfa287e97f\n21831d02-b718-470e-9f87-15fb03ec71da\na561610d-8875-4e4e-abfd-876864fc7dcb\n33de510c-5073-4f34-a962-16fd43a064f9\n5e813f97-69dc-4c07-8dcd-cb4974a1995e\ne95c0c2f-cd9f-4ee7-8770-fa529964bae7\ndceb1736-8295-4c47-becd-6ca6a8f218ae\n9c82452b-a56b-42c3-bbd9-ae8295e3759c\n4876370c-3f22-4a74-ab07-a7058a19e5ed\ncf988373-e960-4782-89c7-7d2f3f9aa309\n1435d4ae-3e7e-449d-888b-38486b62d70d\nddb2ae96-05e9-46f0-9b50-5e4c0f67f087\n263aa886-3478-4a15-a747-9d12a729acfa\ndd72a447-c378-4300-a7ef-ceca54fe280a\n247bea0a-846c-4388-a1b7-847adfe22f55\n1ce6f8ca-8d9f-4c35-972a-7a417697cf3e\n7e7b1e5b-f8fd-468f-9887-f02442fee266\n4bbf9a2a-bc3c-415c-a514-e959c19b5b6b\ned5a5b11-a864-4b6f-9127-0b554a267bf2\ncf9a3707-552a-495b-b293-0c3d75b97601\n10e4fbd9-1efc-4232-a720-fbfc272b3456\nec8a9969-a085-44f5-ab12-0098943e432e\n9466997e-0c0c-4706-938f-4367398afad7\n99b95df3-b57b-461b-8927-b9665869f446\n8cc88fef-5ca4-4dc0-9ef0-73e4b992b78c\n49db8260-eacd-4f97-9919-5521232be79c\n74845f9f-25ae-4393-8e9e-b7db33ec1d7f\nee9e6e85-3a7e-4f90-bb73-55ab3c8f8808\nc2018480-ee85-4580-985a-02b29bda4c3a\nc6a92bfd-b0bb-463e-b4fd-1009c2501414\n0657d7ad-d81b-4fc7-86d1-49ec32839ae1\na12d5a8b-9fe8-4231-880f-16d87d479942\na5b3908f-ee15-4614-bd02-530614a102f7\ndc9dac55-e5fa-4d94-b8a4-607cb1d13486\ncf4631d7-4fc6-43c8-9a2f-361f5ace4baf\n6f4b3bc2-c55c-4952-a7d7-d16ea291508c\nd92e2ecb-6150-417e-a447-1c7b400f0621\ne560b662-d9b7-4302-bd1f-b32e352160f3\nc0aebb9a-5dbd-41e1-8b4c-01849c9ed3a9\n99a20358-c739-4fe5-bb88-094c0f62ad48\n4f79d984-7a1e-4504-9b9e-9da6905ce8de\n8059c85a-0e93-4449-8d1a-f584b75b001a\n3c79c3ca-3946-4c77-acef-c138f985b02e\nd3d6db1e-f2ab-4418-9e3f-9e4457a0d47f\n40be521c-7b0a-4444-9180-259eca2b9087\nede532c4-65d9-47b6-84fc-1869632b0bac\n4f075068-9791-4dce-b423-6423fd363180\n9aa67551-7a1c-4937-97fd-88af17c4e927\n0f32abcb-a61d-4abb-bab2-c93d1b361843\n73f4c863-6294-401c-9381-2ea472a3226b\na3d2f184-77ff-4814-aa60-ddd1e385753f\n0f676139-5a28-4386-8f4c-fdf741585d2a\n59d3c6b4-a0db-4a5e-97c0-7b1d3ba59609\ndc2ea7d2-d3cc-4bf0-8665-c8a197236b7b\n19e8c3cb-44a0-4c57-a33c-4486f782ae6b\n3dcf1a5f-ed5d-4f04-b096-d7ae0aec48da\n2c19319d-7f0e-41a2-9821-d9c3d32f3c8b\n1c444600-aa46-4f69-969b-57a56e2f480f\nd56117cf-829d-45e6-b408-8ce6f81d3264\n14e1b8ae-1264-43f8-b077-d3a185c87b3e\n5c7da179-28ce-4522-b56c-9caab34e7edb\ncd757698-7551-4f45-9a96-bf10cd8c3f22\n24891c23-ed3c-496c-9fef-3061cf7d3e97\n8a5ee8f6-af8d-42f3-926c-82ec97090507\n7885848a-50d8-416c-afbc-50a4abc658b3\n23776e71-3f59-4b13-99ab-904147030421\n76730c28-b733-412a-8cf1-138520f08d9d\ndceac3f2-672e-4267-8b6d-9e42063aadc8\n5723eb44-d9b1-49da-ba6e-74b97edd6053\n8be4cdc2-e18e-4518-9dd1-3549b2b0916d\n90a527a7-edc7-447f-be78-b50b0dff8a12\n45b7409d-ab20-410b-a1c2-c2fa068f9b4c\nd9240f5d-b8bf-41a2-807c-a800519abc88\n8a8e400d-2238-4480-bd16-34868f547964\n02111b5b-9270-46dc-bdb4-abca2d4833d5\n82d2c7ee-684c-4653-9abe-65de26a64be7\n6e4590d8-f4e8-4a72-a8a0-8ef4e4dd89dc\n50db3694-2154-4ec1-b716-2da7b4fc49f1\n08ace19f-744e-4cef-8676-858f2060fa29\n4790246d-46f2-4924-92c7-3c1ec14abb2e\n960cd742-1252-4a39-a806-68abfa769b85\n29ab47a7-7d93-484e-b5f1-a977ca206713\n318f1307-b849-4de7-a3d4-fd56977a237b\n8de42bf1-ee17-409e-90f7-f03385ca2be8\n3941bb02-1def-4013-a759-1dae9880219d\nd01b7413-3fb0-41e1-8f0f-e5bc7b0cef58\n4d60ef07-65b8-4c41-a1a9-719f086db7ac\n8e775b91-f01e-4fc5-be6f-674ccd6c6ea3\n65aa94f3-8e7d-4ca0-8e3e-adcd4edbd4c9\nf76c222a-ce7c-46c0-8c8c-b632b06ab8ba\na5ed2a22-2bae-4f20-9b6c-fe8b90639dd8\na3a4b1be-f26f-48d4-bbdb-7900db306c67\naddf30ea-ad7d-4b8f-b5dc-68cb7c11af0c\n48106594-58ec-47d9-bd53-6a8b73ce8c42\ndd3ac26d-b0eb-4c8f-adb9-e0b5d64b2b66\n5d97b951-5573-465d-a249-7b3bf552fd70\nb410f04a-a867-4b68-919d-5e1d7f79c2b5\n42913c88-f165-4edb-864b-6df73297ee02\nf0bad0e9-37ca-4533-954f-b8d23d718b9e\nf3d32b58-4418-4806-bd3e-9af6c85bdc6c\nfb0298d8-8549-4e9b-9402-b818804321bf\ne67fc188-42cb-41f1-b0d5-ddfd8afef13c\n820c693f-6a35-41c5-831c-50edf1f40765\n71cae5b9-b98d-47bb-aa74-4fd5ebbb83ec\neb8caee3-59f7-442d-9d35-3b2c6bb556fd\n4a7162d5-05cf-47b7-8c09-8c8be84a9be5\n455a9f21-d2c4-4ef9-9681-826c0b1de1fd\n5ef6c321-0e97-4acb-8188-24cf9df70309\n990fc646-ff56-4583-aae9-7bbd1147b78c\n5822d071-c933-4cd0-8442-d5e4c355b8bd\n3e11785a-76c6-416c-a92f-90a2a020bff3\n96677ca5-ebf8-4adb-bcf1-9e84b91d5eae\n7aee6a2f-8eef-4c7f-8a15-83407c0d2c75\ne43ebe98-ad09-4de6-a8b7-dc160e16a423\n7e9ad3f7-7983-4bb0-ae7b-1e607089ca9f\n747f19ff-9d60-4af8-bf87-984fbd058061\n9203badd-6999-445d-8c74-f68559d816d3\nc05fd556-57d6-4297-a395-4c9e1dc7a18b\n4cf14ca0-e5af-4853-9c4f-b907872765c4\nee0dc5ae-dce1-4da0-8b87-0cd7a21627b7\nd8a7f2ff-4d86-4894-bdca-1084578a4795\n24cc501c-b444-4ed7-a527-5b0fe45c87f0\n8bdda93e-e56e-4b9a-91b4-950c916f9863\nc19fed5a-b800-4287-95b1-0bf5a2af76c4\nd3d0d433-4eed-4c59-903e-451f888d3261\nb6f25a85-611b-46fc-a118-f86c3a7e4c79\n03b28f85-feaa-4ad7-8e26-4363c267ee48\n6d819d09-a102-4523-bbbe-ada627ac38f4\n4e27f299-8668-49e3-8516-71b7751942a8\n68bb29c6-d4e2-46f2-babd-864b812208f5\nee88d390-955d-4ce4-a9ba-c673d9984de3\na63ea98f-9107-4c4f-80c5-a636a3fe2117\n309e201a-2bf2-4c36-af62-bde06acac23a\n7382d428-a66e-4eff-8566-b1b05a5d72dd\n80875c47-1809-40df-a042-40fca11bcce3\nb75ef7a9-fbeb-487b-bbde-18e371484afd\n62097f54-8fe7-4a4c-aa9f-29cbb6ca1e4b\nb1b4ca57-7590-486a-86b0-1775d4f10fa9\n600203c3-7e6e-45c5-8a7c-e9646b853ff1\n8a0edb51-133d-48a2-a887-51b4efda393e\n96b104d7-7114-473f-8ab4-5aeb67dd333e\nab549606-5b75-49df-bc68-776434016974\nffe4cc73-dc70-407d-ba89-9880785f724b\n6664fd6a-029d-4cf1-871d-7ac9bbb7754f\necb2f847-ef67-479f-a982-fba67df53332\n7a9dc6bd-30dd-4040-b396-5f42406e8efa\n53642357-98c2-4d3d-86f2-a2f9aa317e8c\nbd7e1e1a-79ac-4745-99a7-93f7e0a8ca58\n7781a060-2786-4499-b7ce-20b98e87425e\n56ec495a-db92-4589-ac9f-3b6c6eb3cc52\ndb068c61-c95c-4b92-a894-6a8348c86f43\ndc0d31e3-7dd9-4f04-aabd-736d21a2c4a6\n8d0ef6b1-ae0f-4caf-9714-3fad3eea6f11\n0ce1f989-6685-4501-8d10-7622288bfe25\n2545aaba-5dd6-4ff4-833e-c7622db50673\nc473ffa2-8ea3-4e7b-bd83-af244e84c419\nbc60c455-d6a5-4775-958f-306df485cecd\n4f034268-b076-49ac-94b6-c2c1bfd8d494\n35affbf8-bc40-46ba-815d-99fe415ff6fb\n9d36b86d-407c-4034-a154-f6951a764ff3\ne67e176f-80de-4e9e-b9d5-abb0252219dc\nb5722518-a05c-48d8-b7e5-75ef46d93a30\n08a6302f-4da2-4507-8d7e-f777c98093a9\n151d278b-b1cd-47a2-b2f1-dc79fdb07106\n9af39de7-f011-467b-b4a2-cd927bf43698\n68af8bf6-f069-4893-8f07-24dc0b37a66c\n6d211779-41af-442e-b875-8f335d8dfd81\n5acb4e43-8b51-470a-a8be-af6453f2ef19\neb74885b-cfe5-4114-a0ce-f474c5775d1c\nb43d445e-6baa-43a0-8c5a-2e9aea9d4a84\n9c39e7b5-4eea-4f30-8ab8-85798fe37420\na30fc3f2-8600-41e6-a339-753ba4d3fde1\nbc3a6904-5594-4435-b942-7363aab72312\n9d99fb18-af8e-43ff-8d03-c285ca1e1ee1\ne8bce003-ccb8-48ab-b89b-4801490b3743\n3b25f5bd-298b-469d-831e-8addfcd90d12\n47d15116-864c-4262-85bc-128d6df254b1\na4d16b9d-b606-4c1f-a508-5bec846089d7\n2e9aaf76-d7f2-4047-b467-e79c697d676e\nccb74748-d90a-4dd7-b070-1e01c7bf7720\n9d830196-c024-4707-8520-56795c1b6200\n986fb29c-3cf0-4c51-b213-657caf73c130\n5ed4b67a-e4f2-4907-818d-c2c235ffee7a\na4e1f7ac-0593-47e7-97b1-8531a3b40d86\nb657133f-1cf5-4998-9495-bc50d5aa7436\n85926692-bf5e-4c30-bea3-7296a545842f\na961c5a0-d6f7-4b31-997d-20937b68d3e9\n07036196-3682-4e8f-a593-2db397c7011c\n7fa3e749-6213-483f-b9f3-911ee4ea4ade\nc291dd91-872a-4eed-b1e2-a2606672059b\n0219529a-967a-4514-8813-39e5fbab077d\n8e84877e-b05a-4f21-af7a-d75e629e3824\n925e4e07-a90f-4baa-a0f0-bb03b1ac180e\n90fb1acd-d61e-49f7-8528-99060766608c\n204f3da1-a082-49df-b118-1d6e11301c52\n27bdcedb-d146-41a1-ace8-a243dc33f4b7\ndd903377-dd58-4df9-90a7-83ece7cfcde3\ndd3c20ef-0551-42d6-8653-e67fb6b9635e\n4c664213-65c8-4fa5-9bad-22091b3f1f8a\ne479c87b-5261-426a-a863-5f89b553e95d\n1762f3d7-2b0a-4b17-9318-d1e13fc25ddc\n595faa3a-0421-4a06-864d-6925fa767d0f\n103ec232-d8d3-4bab-a070-81ce5631d098\n9acdf296-3927-479f-99f3-43dec55fe919\n40f0609c-a70d-41b5-98eb-15ab483de77f\n6fe8d12b-8120-4f98-8754-3d176900ae33\nfb080a4c-6097-4566-9e96-e37f338757b6\nd2a411d4-b92e-4549-976f-5e2c0ba563c4\nac5bd285-8127-47a4-a8bb-54a37020012e\n6dc94a81-8eac-4b2c-8e80-63fda5beedcd\nd223956c-3cca-4da1-a88c-a382aebac74d\n0037d163-5019-42d6-9215-bbe8d49e6e02\n2a7d7bb0-f916-4928-bcc7-2d5a9fb67a85\n07f75fc4-db68-4a8a-83c7-038f7d70156d\n4f677771-66fe-4626-a051-1a837505f33a\n16b39950-938b-4dfe-885f-579cb13487c8\n2a9e012b-5f09-422c-a7b1-02991b4b3067\n901582f5-2119-4bad-8e67-2110ce081bf8\n8af8df78-717c-4b66-beff-ec68ccece038\n1a09843e-9566-4b2b-a358-d422507b21e8\ne3e5d9e5-5755-42b4-bc4f-8157c8b89ef7\nd96fdfa7-6841-4229-b530-017142714b64\n5c4f6989-ea9c-4cfb-9626-64cc780858b2\n7aa80dc7-cdb6-4cd4-92e9-242a197a8a65\nb8a146d2-710e-4ca8-bb2f-3b2438e5b23c\nd8ee7b27-086a-4f08-8088-846fbaf09fe7\n9ffe3627-90b5-4c71-a995-8215cdf7e3ca\n6861df4f-d3c9-432b-b6d8-992deb40ffa9\n86130b01-7292-4594-9997-f5d4d927d1fe\n5b9ac0ac-43d9-49f3-95e5-89f59219c079\na899552b-61ba-4431-a220-74ab27128c5f\nee2f6eca-c32a-4d75-b706-96ef96a73769\n451818e9-5688-4b45-bacd-5f23c115c187\n48249cf9-87e3-459f-b9d4-19144e8f809a\n9fc40102-cc92-4e55-9511-7637dfc10918\n6a95cc54-ce71-4a5d-aafe-afb26a4892f4\naa464f7a-5d95-423d-9286-2b1eb0f7231d\n441c52c7-0718-45ac-8ccb-460b7b07d648\n2ede6a21-de90-4313-bca0-b1c0927ff7e1\nfae5ae7e-e586-42b7-a5b7-766ba7cfdd80\na9a91305-e8b8-450a-b292-a2e742b808fe\n0d7e2d4b-195f-4583-8dc6-857c8e169e5e\nbef0a22e-472c-43c6-a2fe-1cef61c4da86\n70848115-face-4fc4-b580-22b24dccd82b\n019382ae-355b-4fa4-b473-8a5c05f93aee\n2c03fd1f-86a5-4737-bafb-c15e5fdc8463\ndd975614-56ce-4a93-8881-d1069031e935\n8d638c6e-aff9-475a-a29f-3f3a787596f5\nf6a443f0-6d84-4c05-9306-98e52a041ae8\n48f0b040-95fd-470c-a7dd-3392759c92a7\ndd0664f3-d3fa-4dfa-a01b-23030bb8126d\ne794f06e-0cca-47e3-a0f8-8980257ae434\nd34a373a-82db-44eb-968d-37b3f93dd7ca\n14331b44-c723-4c09-a03e-1dc6e3a51ef9\n78cae09f-93eb-4483-bbfd-2c884d5441f8\nd7ba72a9-d85f-4ca3-91f1-a9e0c4ae924a\n921edbff-4c0b-416a-9556-acbb6b84c05d\n5dc9a071-121d-426e-93ba-2f4d6d7eb7ff\n1bb0c8cd-5091-4d58-8fa2-6bb39d3850a1\n27338319-0214-488a-afe7-aa4150a9edc0\nebee95f3-f1fc-4f36-89a1-9c5611fe77ef\n8867551a-0ae9-4cac-827a-81276f6e0855\n5b9c0ea1-08bf-4463-b088-0cdaa96e557b\ne9234fbf-822d-4439-ab92-7c569b144f77\n84464183-97ed-4a68-964f-eb41fe9b174f\nbf6a2407-21ef-48ce-abe6-0aa46e7d255b\nf9fa95cf-d490-4b09-b00a-ac9bf6f93f03\nafc9b7c0-ab43-4bb6-9614-ef7f30b2e5e9\nc12c9d0f-4fcb-41b4-95d3-bdeaab0d24be\n6604d03d-fa17-4c7a-b076-cec3c660f0e4\n72f6a06c-6e1a-4afc-a006-9a381dc31330\nccb5a29f-112d-40cf-80ad-67a2cb2db6af\n8cb462e0-eefa-498c-a153-31cbfe251ac6\nd1d88bdb-068d-4500-ada7-27985b10ffb7\n98468807-461f-43a6-89d5-ebdd6ee0e1b3\n2df854da-95c9-4a30-96c2-126ceca2d56a\n3bbdd0c5-a3a7-4a52-9ee0-5a88965fb694\nc8b2ea41-0cb4-4b4a-a129-f5ec70b86cc9\nf7cbb7f1-32f6-4534-98b1-c0c02f3cd097\n0d479dda-7993-4ac7-91ae-40e60c8d5946\n0e793d59-64e1-46e7-8300-e4386b37b984\nbf363558-0a1e-4a48-bbba-da0903d08259\nb468c80d-3f22-46b3-bbab-f26033fb187c\n1888b8f8-5f84-42ee-943a-08db09caff17\n509f7c06-2bea-410c-9864-5e9920e3e218\n7fee3a96-b7c3-441d-922e-94b0b7040ef4\nfc20ccc8-1fab-4478-8366-cb0fdcd9ffac\n6abd79d0-69e7-4205-b4b2-d4e74ecdbf89\n7161e604-a7e7-4516-b559-c7bff2081be2\n829f172d-7990-4d09-9831-2a8f895d330d\ne7ba5a99-fa32-45f6-b12b-caf43c537ce4\nb45d7192-5b9d-4a58-8417-5cc83df5086a\n65e5926d-7ae1-4f01-a6e6-dc1dd180982a\n75b457a8-5e17-4873-bac6-64017b466a49\n07878722-1ee9-42f5-b75a-8b17e464130f\n416b0554-9549-418e-a272-81a236a2c143\nb536380c-0885-476f-8df4-350f60bc2fa7\n663beb26-1a10-47d8-a492-9d1d7f589e51\na79d51f5-f9ad-49a0-baf5-e4db77cf394b\nc3d3377b-2fc4-49d3-b9f9-c2a1c23a058b\n354e6953-601c-4a92-a675-347ea6bca679\nfbf14f66-1a8b-49b0-ab73-24ac777a4bbe\n6e73d8ec-0160-4e60-9a16-2e32b67b1c20\n141bcea3-752a-4b7f-8633-81b682d0a4af\na9898e7a-e5f8-40ae-9dbf-e35d68f7b96f\nac161c20-d69f-4aa4-ad50-c8dd1c34bc75\ned5de29d-2e76-4aec-bf79-4b5cb9034a30\n33c00400-25eb-4282-b74b-1e7674e12ad2\n0163cca3-9076-4a01-a7d7-5d0a2f5bca93\n6d17f7bb-0b07-45f6-a45a-b609c038b8f8\n65078bca-944d-437a-88dc-3321ca0e3373\n0017b1b2-0806-44d6-8a7c-0600ddd1fa8e\n867fc3aa-1071-4ce5-abd1-de4e6c2892f6\n39e987c6-900f-47a1-8907-ddce4eaddc89\nc1f3f6a5-a95a-417b-8622-13c40a327c12\n69294110-baa2-4dc1-a1e5-ab92e5cf4bc9\n1c11b1b7-79c8-4fb5-b782-dfad4f34fc6f\nd09d7a4e-4a26-47e9-9cd8-10b90383a786\n90807c25-e875-4037-bd1f-c108d3b624de\nddba849a-5c25-4c20-aba3-c5ded74e20f8\na46ad559-5da3-45e4-9cef-37a3afa60dca\n9228613e-fa07-46fa-adb6-7778a3a87b6d\n39fe117d-e8f0-4081-bddd-b480e7b8a13b\n14336c14-74ce-47dc-8010-8148c6f53ad1\n74bfeb7b-9bfa-4e54-9189-56aa444f1437\n9577e205-2dcb-4ed3-a5a4-f250dea6eedb\n6b69b346-ec63-4750-85e2-02b76dc59649\n8b38fe04-fc3a-4f60-b98e-d3e42da97a26\nc67b55f1-f938-4943-b907-e331a1c50161\n2d4a48fd-60dd-4b6c-a0a0-17be911aa7c9\ne0fcca70-1e04-4d13-bc17-ed76d6db3931\n465df268-7eec-42b3-96e4-ff16431ac879\n0eef2cd7-4750-48e7-8a25-6fdeb8b26d8c\ndca73c78-9acf-4225-8d35-9f031df333ce\n787ee18c-da2a-45c7-8e89-3e696dd58c03\n0e4c37f5-22cb-4fb2-b963-a5b1f4becb48\n5ba9afc5-f3e4-43c8-9c16-a7ff314cb2af\nc76fab50-4ea2-4da8-bf69-ee0dc851f609\na07f3603-7880-4ddd-b702-89d863b7be3d\nb2385893-108d-41be-a3a9-e5cbcea57d87\n9cc4bb73-f680-4129-a8e1-26acf213a893\n4d49c5af-2999-47fb-879e-842032dc6a60\ne419f1dc-0ed4-4874-acef-60c3b753939a\n92e8af14-f7ed-47fc-bc25-c7c0cbade90c\nf43b3e52-482a-4fe9-b7aa-c4b3da045349\ne860ad24-f951-47cd-a040-d8465a91a4d9\n7727809a-8703-44a7-b4a2-9ba3749bec81\n051d512a-4e85-4e4f-9427-b5df01cd319b\n4653ceaa-d98c-4dd5-9aaf-208ef03b8d84\n897d7052-6872-4490-86d2-a6047117c832\n2c0acdc0-ec0f-4a6d-923f-90114990af4b\n39dd1706-21df-42ed-9491-2221a9010498\nf28b271c-69c8-497c-8f63-f0608afdb62c\n96d20197-91a6-40dc-b9d1-860ac331bc07\n23a17b88-79ca-4740-8129-b18ce477ea18\ne50e9598-1273-4445-bb6a-0c66a2ef7134\n45e0ec03-b78b-468e-8e25-4ca181c16001\n73c6fc9a-7305-447b-b600-bd0f0eaa9548\ne7be8e3d-944d-40a6-9111-bb57a82ff7f6\necdeb95d-40f4-4ae0-b05f-55105b425bc4\n4d70cee5-ace4-4fb6-adce-856a09f40a1a\nff14f55a-1501-4744-aa90-95f66e711e33\n2b0a6b21-c7b4-484b-9cc4-958b34522a6e\n073ad992-ca45-4cba-ac0b-d8e2bf759102\nef881517-c571-40fe-a1cf-2bbb52fc8724\na773aa4c-189e-4722-9113-486918bcf4a1\n27fc9ecc-4405-4406-a405-51d8846f42f3\nb2c4e30d-25b0-4093-a0bf-666455ed9884\nccdad58b-d47d-46a2-a9d2-4a07cd1f3584\n8984cf98-14d4-47be-8532-fdcf8a729bb5\n6455aed8-571b-4b55-89e8-c7ec202ebd67\n9d397f6c-19f0-45c3-a091-37ce4250b07a\n6dc7d137-fbd1-45d6-b2d8-3fa8d660c7b4\na361f496-319f-462d-8ff3-f84759403600\n3c87fbe3-3a82-449c-a829-5b20f09535bf\na13a68e3-3943-47e6-933b-98bd684ea832\nbff82173-2c69-4274-aa79-88717a67effc\nd0425d07-f22b-4e98-916c-087b5d1381ac\n1fabb512-4895-4b67-b82a-a0aa24b141f3\n59c9382a-7141-4c6b-ae9e-a64f4b2b0f08\n75796c09-3fbf-4c90-9232-a253d7d27267\n1f20f473-3e23-4a71-b68e-207abcb8c4c1\n414774ec-9de7-4187-8dfe-77ea1e49c17c\n57c6f07a-ab7f-4cbe-838d-278488fea052\n5d8993d2-ef83-47f7-a164-726d264b1fbd\n2b3fa6c9-8f05-4df5-8c91-484e941badbd\ne035ace0-d907-4f02-a29c-d35dca9c1402\n499b180c-d4e7-45e1-b9d9-ef103c104e36\n7a69d23f-45fc-4cc6-b968-f1113ed844ed\ne73c1eef-0fd1-4400-84a1-6372e246444d\n51de088b-f0a4-4559-b384-b05ef7122e20\nc38b24b9-266b-4de6-8687-1665e03e9ef3\n2524c920-38fd-478c-b0fd-0ebefc3a12c9\n5db2c7cf-db8f-4a23-b9d2-d462779dd401\n7ea47596-8576-4ec2-bdeb-fe5f668c86ab\n328c757e-83d3-4885-afad-3fa8e30639ce\n8eda99de-7057-4bf5-a4b3-652533e88dbd\n6d6672e2-b6fe-4df0-9aec-26854f7078a2\ne9cae504-81d8-4aae-bf53-c7dc23a5d301\nab87258c-35c3-4b25-92ab-8b19ef7fb1ea\n4a0c7695-f3ec-4779-96cb-ae65a5ccabe4\n63216528-891f-4d75-b34c-e16dffceb761\nf9dfd686-2a10-48d7-9a95-62efa99e4122\n32823b17-9771-4499-a94c-42e2fcb8ac04\n347b4b9e-3671-4e41-8430-1495e0d35b13\n04d694d0-fafc-4789-a03c-88020ec51534\na8d7aafb-3ed4-416b-a3fc-2f7dc0c34f3e\n4f240b90-34b3-41c6-8206-a187df542242\n0bb689fb-8ab8-4038-8e41-6b98250362ae\nbb7c71cd-ccbc-41b3-858b-e37c7071fed4\n5e8a17f0-42ca-43b5-96fc-2307c2722d99\nc68582e7-2579-4fae-ab86-473db66142e0\n0c992449-3a77-41c2-8299-da744449f045\naefd5c66-85af-40db-930c-627e6b4e153d\n785edcac-1dc3-444c-9993-5ab9a8fb486e\n05c7fff7-3ded-47c2-bee4-9e3071536f94\n0e7087e4-53a3-4647-a285-381571b4d183\nd7795fc7-71cc-4c39-b690-0a2328b9c152\nb7668f23-81ac-4192-ae92-bca5cde62ef3\ndf443efd-72b4-49b8-9a50-06750b6cab9c\na55f60e0-74ac-451a-8027-a5c31b13bfe7\nc60ee292-659b-4438-a750-c79e49494fe1\nc46c8b2b-9fd6-43b7-956d-a2ce3728b3a3\n4ef02489-e364-4d71-91b4-080e7e81b70a\nf0c1294f-58b8-4d0f-9c7a-7749d6834e80\n3eb2be32-3dd4-4b52-ae76-1303a66866b5\n0b654429-3841-4921-9ae8-c0914d3fb8c4\nf760eaf2-01c6-4a9e-98b8-da149df339a2\ne71a1a91-1348-42dd-83e5-4d23e6ae080b\n1084c8ae-e62a-4621-994a-b3b3aa06014e\n47a0f63e-3396-48a0-9d0e-c319c8f4dcb1\na4f03f36-b3aa-42f4-9dbb-36fbf90ea878\n8a8f3552-0b15-4375-9787-4cb8e859b90d\n7ac754af-df45-4643-8ea8-574331d39d43\n6f481eeb-29a8-4957-b7c8-cdf77985d6b4\n2c97eb5d-a818-4170-9417-54d86104c204\n6072187c-d3dd-4311-8904-c0ab821d470f\n49c1cedd-07d7-40c5-b1bd-e5873419e167\n85e90794-8e7f-4e39-aaf5-f4fc602d7eaf\n48b4d89b-63b9-4b44-b28d-bcbfb008e8f6\nc83442f5-621f-47fa-9c12-0c8d4747a12f\nce6cf94e-f8e7-40ec-9325-743dc770a481\n9dab0475-fb3d-465e-b023-90d302164d66\nc3c8565b-b7b0-43e7-8d11-0d9e1550cd0e\ne931ad6f-0524-4852-9cca-09f7299c6dd6\n41304c35-af05-4cfd-912d-34f68830f189\n54f02a20-b702-4e8f-9223-8ea91d8cd99b\n232ec7d7-9ef1-4742-83c2-0fe8f172eee5\n87f6f0a0-b6fd-46ab-b9db-e69c41284f06\naec3a817-6394-4ec7-ad65-829fc250c722\nde12bea2-17f7-4223-99e0-5fb72a9a0982\na18f902b-7715-4fbd-93c9-33fc2470a4d3\n7946d187-eaf8-415d-897f-d2277f60ac64\nfbb84f05-3cbe-48f4-8cf9-534ceefd0488\n93466e3c-8e57-4f02-b86b-154b693a3ceb\n9178ceed-c2d6-4b25-816a-fc9ef473b888\nb17d93aa-ffc0-4dbe-bb8c-de45bc2cafd6\n94e6d916-4c27-4387-ad9c-559a04890467\nccd5efc4-f202-44ea-ba73-2d6829c1268f\n415083f7-1234-473a-b475-06d81278dbff\n3aace6d2-2609-4b83-b906-cdb0ba6dca54\naac789ba-9df8-4d29-a373-21487d56b30c\na67cc177-5d16-4687-87bb-1bfa879767d5\nb5221e8b-bdbb-4846-8e32-e7ea4cc5932d\n2d9b7c71-1e54-4aa0-b2b3-1294bc58750d\n614e6ad2-9fd4-4f97-a69c-cfc1051b701a\n3cd1f202-c33a-40fd-b703-427615abd4f8\nc7ff8be5-1398-49a6-9264-1a7f5ae8ab96\na573c0d6-5494-4cd0-9b59-76177f35603d\nef0b1396-622c-421d-8050-379e84a7c47a\n5762bb51-0f3e-4b0c-baab-e73b82e7bc50\n0e998dbf-6c3c-4fd3-884e-603ae7afe174\n50768ce6-c302-4e16-b180-0f40c0292a22\n7c54f47c-a2fd-4611-a650-442e3d6b144f\nb86f28c9-37d9-4787-8d7f-468644ab96b7\n9c088790-9db2-410b-a2bf-93784d196659\n855e5184-5105-45cb-8010-e8c2ce4b140c\n98ab9d16-5342-48fb-a3e7-0d53a8d85366\n91ae2a98-3c06-4963-b5dc-c56930214ac3\n17385b47-8218-4391-8e72-201d5da1f015\n2be15596-d8f5-4ed4-bb76-cfc8846adb1b\n96a823cc-197d-4ae9-bd5b-35fad1af9c5b\n8ce3b922-8222-43ee-9d8e-62df0dc5aa41\n2d35f89e-b654-4827-9a9d-34e167b9f2da\n8193877f-c07c-4fea-9d23-44d4d7bc8100\nebf9f11b-1737-4b86-a10e-a81dc4dd7dd2\n97c690c3-de2c-4e13-b430-764f0c8065f5\n04c71d2f-ada1-4175-9320-ebedd1f0cf6b\n15d6a1ba-39b5-42d9-899f-8f3528dd9370\ndf937305-8d8c-45ff-b265-9619d7f66cfa\n825f6e19-af14-4184-b997-603bf2c6db4d\na5b8a957-bb23-4700-b423-363e097e8d45\n12579041-a478-44a3-915b-4fbde796edfc\n7792dea0-592b-41a7-8696-705460cda8b0\n2fbea74f-1ea5-4373-9d25-a04f46b825a2\nfa8665c2-bf83-4aad-92f2-b95dc233eeff\nb8c68977-e684-4ba8-b78b-8e3a545b3264\n5bd99fec-ba42-4faa-bbb0-6947ebb3f6c6\nf041e39e-7041-46ab-9a60-8bf1b141bf2f\n777dfb08-d01d-4730-9660-f295a7d8e281\n10155695-e866-42a7-b2ee-f1c8b9e0bf02\n2b56f86c-e921-4478-9f27-57f2007d0559\n6098478d-7947-474c-a060-39bbdf3339e9\na6586d62-e347-4133-9e71-2860923f5c71\nf2a2aedf-3e2f-47b8-80ed-2cfa2f952d6f\n4507d4c8-0d07-4396-a520-0e3b5ad0d9c2\na912ba69-4f19-4439-9527-b469a27f5682\ne5a86239-3ad8-4d52-abe8-15dcb5159732\n2dae75a7-a8d3-480a-93a0-edd90996d605\nfa258a45-89d1-4eec-872b-c83ed884a4c2\n4db55034-dfc5-4224-bab1-20f0bb389d6a\na8b59926-a48b-44b9-a7c0-39f85b8a5f14\n9d1c38fa-b924-4b64-9dcd-3d31dba9ca73\naa6da9ee-4a55-421d-8bac-190af65016a6\n5a86ffe8-66a7-4565-9bcd-f199fd523ba4\ncd6a4772-0f79-4a8c-8140-b6d71d7bfabb\n23cffd15-b11f-4104-81f2-5c08ec6193ed\n1e3e7d34-b61f-48ce-8574-1f8960446e22\n89e0f9fc-a5d9-4c37-8cc5-70b6dd827780\n5eaf73fd-3e5c-44a0-bfa9-5fd611aacd7f\n0ea99a4c-1e5f-466b-842c-762486641c14\n79904d5c-30f1-4173-9d76-ff9323ddeb39\n8d895bcd-4251-452f-ae12-a3ee8aec528c\ne32415e9-695f-41dc-b925-a21925c6590e\n195a60ca-db4f-4ebb-9a0c-033e0ae52bc0\n884b5328-07c2-4d6b-80ab-1f1212ab59a6\n12ec06d4-e5c7-4701-936c-84e4fdfbfebb\n99df6ec8-c27b-40e0-87b1-0bcdca211c22\nd08f672f-391a-45fc-8fc6-57fb6848af78\nd279021e-320d-4b65-97ef-b11ca3cfe9ff\n858db035-1c96-44e6-a81c-b3662b797cbd\n695ded70-e947-45aa-80a9-cfc910e18361\n93678886-92cb-45bc-919d-b274a47a34c1\n64fec9fc-debd-4f7b-a839-c61d3f356c1f\nec72576f-24c4-48bb-b559-38f64b5e506f\n341b18a5-7b03-4484-a2c7-0d7628252cad\n720951e4-e7c1-4879-b505-5aa4f51ed724\na563da10-d6d0-4384-ac64-4ae4d2e6f55a\n1a612d41-f4ff-4145-8e49-3e360b66393d\n3482b493-c0bc-483d-b0af-3e98993676a8\ncacfd6f0-8624-4612-86f0-9ab0191117e4\nc468cc49-bc48-410d-ac69-c4ceb036340e\n7fa499dd-36f7-431e-a589-d69fca5d3308\n62f94579-f579-41c9-83d4-21b6a396ed6a\n2ba4e173-9f43-4f51-8803-0cbba7b08a46\nda91cb0a-b592-464b-92c7-ab235782c7b9\n1bc590b0-4990-4114-bfa0-e033180760f7\n8e123009-5baa-468a-afd5-5a944fba1c3d\n6915c7e5-2729-4554-9828-9413359820f0\n0edf73c4-80f5-4e3c-b14e-947456f59e3e\n9bf1ab1d-53d2-418d-b268-d1fe34410267\n32430c22-1d19-423a-8bfd-8aaa68514f8c\nc03c2bb2-70e0-4819-9736-7c7284fa910a\nfbf14a36-2495-4091-96d5-aec2c05df236\ncd21dc5e-6f41-440a-b3c3-d62efc3b8857\ncfeeeaae-45fd-4b01-913c-7bc697824ff7\n4a6ea84e-421c-4057-8053-05fc8902a58f\n5824a3b2-43ff-4e18-93f6-c6569a98ea5e\n2028f02b-4d65-4619-b98f-12678d285fc5\na6699b02-887f-4870-8f2d-9d6acb3eca4f\ncd8db7e8-86c4-428b-ad8e-8dffdfd079fa\n57e937d2-eda5-4423-8d0f-0ba2f6ac6291\ndb3f9c66-0125-417d-a1de-ed5f9ff0d1eb\n839d5196-ea88-455b-976f-91c2dfbfe511\n690c2020-c777-462b-b057-e262d8377792\nf1c34e45-d550-4117-9882-96fb1a2d5ee8\n1922f093-ef96-40f1-b7e6-5ca11e347ffe\n663edab8-dded-4357-8223-fed99b0ea9ad\nd63175b6-86e6-4614-927f-533a53fec163\n6eae42dd-149b-41c1-91d7-c14ed902abdd\n2d052948-55c1-49df-9a1e-0af14e5f0fb1\n075bd452-70f8-415a-a59e-9f2b594dc096\n8a745bad-3da3-4cf4-b98a-37cb592b7ae4\n3573e5cd-0717-4b86-938c-489209c2a192\n49df5e66-efac-4cc2-8bda-39f91d0daa0d\na663f7dd-78eb-4a4e-b06b-9410d46c4ade\n76922714-9d9f-487d-94fc-5121c62bbf63\nb8ea8b67-836e-45f9-97b1-ee261c7b3637\n1b2a236e-d7f8-41af-9c3b-627ff1f14c2d\n13a85db8-051e-4ca1-9a7b-e4346261bac2\n998f85ea-afa9-41b4-ac84-15df05f6c919\nd57be297-c0bf-4e0e-8cc5-95c05d2ea22d\nd9f55ba7-dd8a-48fe-a073-aa0e2dd1a86b\n0aadad26-a64d-49f3-8247-ff733fbb7364\ndd91e485-f6b2-4815-a3cd-55cd8094208a\n2f6a75e9-22b8-4c11-b0f0-cf4ecdb38a52\ned6d2e1f-2c41-4a34-8c4f-4c3fb108c045\n322ae0b0-5999-4f5d-a318-48ccc2b80643\n6d082994-6d1d-48ee-8248-52f0d8e06d78\nd421d7be-2abf-48d9-8964-3449de466e43\n43ed9a48-cdb7-4eae-b156-c6fba9dad69d\n3867ac65-20e2-4599-bd2d-1c1dfb752edb\n3546ab42-2537-4e69-867b-130590c7cf6c\n76c198b3-dbb3-4903-9b2d-f1fda6f65097\n7e6064db-bf0f-4614-805b-23e96d6c82c9\nc1c77c14-ddac-49c9-be56-711619631b96\n120ae64e-68b8-4460-8b10-d228c41b33e8\n134404ca-93cb-4d4a-833c-6891765ac19c\n4f16ff9e-b3f6-489e-b812-dc2702b41ed4\ndeb350c7-5441-4811-b43b-36534b552014\n3d9d37fb-8309-4d51-9ede-d6f838bb7bef\nb39a814f-5ed5-483c-b47a-0640832ccec8\n054664bb-6cfb-457e-ba77-aef4d7b47a7b\nb482d61b-2195-481e-8e3a-cf21113dfcfc\n20c64ff3-99ab-48f8-954c-1e415cf1e8b8\n4fe22207-6a74-40fb-830a-bfd31ee95dd0\n92d9bb7a-f2ef-4aab-b67d-49116e6d3409\n4044d757-eb22-4678-8caa-b21846264eb7\nd3c18c18-1fe7-4957-bc25-65a73aa66ceb\na6457a0a-4c28-4102-a7a0-4f9ac50c59ff\n577bd6ea-5874-47f4-bdbd-44f26bb42a4c\n4479da68-3058-4d39-8db5-25b54e09fdad\ne1354b4f-5534-4db9-8f44-7ae4b5ddbc68\n59096602-63f4-4750-ba99-0d3154a69340\ncff5ce35-0472-4d4b-ab22-08e0ab3f2da9\n2f151760-4fb5-4ac7-8da2-45a8a164306b\nef1a41f5-4242-44de-b2ff-205734d34a20\nec2d05d0-1caa-4b8a-b232-3ad16d9329d3\n11483634-6257-46bb-a655-b0bb859b2c4d\n1bda8b20-e886-4c7c-a850-bf732cae7d66\ne50630ed-d045-4493-a226-78758fa09076\neda1c25f-ba5c-40e5-8c13-98afbebf61c7\ndf993bd6-6220-45ad-bf4b-e432f1836437\n5877d6a2-d35b-487d-8833-c84639b25af0\n519f57d5-eae8-4e3f-a9b1-77923e1f7198\n8ca9898f-3566-43b8-bab9-ab80ce29374d\nd87c0c2b-3b17-4176-9e3d-8ba58e156e7e\n90d30bb0-1efa-4ff6-8bff-83ae0b3fa27a\n13638fe9-ce5f-4a1d-8f94-0d4160d4121d\n99c4bef5-3642-4129-bc0c-da49b2b8912f\n06d90360-c6ee-492c-97bb-7d2ae9d9446d\nc4c919a0-9412-4384-a6f3-60201e11ae16\n609cac3e-1d1e-4a7c-9c5e-719b6cbeb3d2\n3cda5b41-a4f0-4841-85bf-0b8e36e8e7b1\nd2da65df-197f-4009-9489-01cd0bf77348\n44cba5a5-ffad-4f01-8ccb-412ace6a2f98\n4e3a6dea-d750-4470-9797-8cb94c10ed50\nbaa52c2b-1892-4e18-88f7-9310d81464c1\n20b15431-4f9e-4f6f-b672-c522933b00dc\n4f4ebca6-dbb8-4998-93b2-325dc9983917\neaf34095-7083-4502-9c2c-c81ed41028b3\nff139bb6-8c38-4668-ab3b-8001976b6407\n2852be35-2501-4226-a39b-9dcdc069ec0e\na7efa3de-b5b4-4ec8-94ab-813f18d2af32\n85e0ddd1-08eb-4ea6-a2d5-5d649f64493b\n5198198c-859c-4406-81a3-7b216456570e\n8e376283-cf9d-4c9d-bdf6-484bfdd481cb\necf95953-4fb6-418d-ac32-a7fa6e6c90c9\ndb94c993-7dac-4d23-a439-aa14cac340be\n3fbf54ae-ad0b-4944-908e-0c3c3cfa855d\n6d9db878-d76d-49b5-9471-3f61520e6f71\n3aa2edb4-301b-49cf-b20b-3873c8b0cd66\n82310784-a587-474d-bf1b-293d5145e811\n8c6d4cff-c5e1-48df-a8d9-0fb76a88b86a\n6d3f2352-4bb0-45b4-b4c5-11e9bddfa104\n9ca82f23-5ce3-442b-9bab-b53edb5029ea\n9ff28627-6bf3-416b-8878-41dcd10b12f6\n20327732-3a55-4e6e-bdde-787be3d8ffb0\nf1bbbeb0-4210-4002-9584-533cbe7d35cb\n7482b60d-a850-4508-b98f-5042ee712647\nb6e2fb86-b434-4a58-ab36-17492f466f83\nadc17685-3d9c-42fa-aedb-392dc01fb7dd\n2f4e33df-96cc-4f00-a710-8c0f710590b4\nc8798984-d894-4ef0-95dc-0d299591b4ec\n03b925f6-913f-431f-a66c-282a767cb699\nd437c87c-2169-4eea-a961-88c5eb5ce7e5\n98e3f69f-f076-4b25-89b6-8e86f8cc97a6\ne006cb3d-2172-4219-9711-58d8028b7c0d\ndb6ce1cf-927b-4dd6-b122-0119fe43d431\nba16bae4-4155-4ffb-88ea-a72409191557\nefa67ea6-dd03-449b-9c23-eb84aa4fe1f5\nf50675f4-3495-4e1a-b1a0-656ed8082ed2\n8d009256-c805-4f37-b7b3-392a12b2a80e\n7360db75-8ba1-4f85-b647-9fd103c66379\n2ccea5bc-325a-4fb9-bb13-367e2870fc70\na939fa78-20e3-4d26-8cca-2deffd9231ff\n0bfc0fb1-f54d-4e6f-86d3-d2e9e02aa4e4\nac7c3cfd-63ab-4c37-976c-290ecdccaaba\n65ea7154-bd67-4324-8afa-4f13fa40710f\n9e83c221-e6f9-400a-aa76-8f84ff48493b\n891c0650-9884-4a53-9423-e5b809a8fa79\na100cdc2-6fc1-43a0-be3a-1e6dd3f8063f\na67a1c52-e1f3-451d-8c12-b6186dbc4663\n6473b227-b868-48cf-a2d5-9c817ce60ba7\nc70c7a93-5480-48b7-a6fe-a339fe3d6bab\n33d6f5ae-1922-495c-b104-3890350680ba\nc646acdc-ce62-4775-b720-29d1be6d2ffd\nf7e5e0d5-26f8-4195-ba0a-a0c36285b106\n4cfcfa63-9ed4-4510-946a-cd1616bfa292\ne9929696-4656-4791-b309-7f5bdb960dd0\n194c2782-d3d0-41f7-ae15-c13e6abb50ed\nad046181-b8b8-482b-8f83-cc76460131c6\nba749921-79f9-4a82-b67d-46adae602f5b\n6a238ecb-a0ce-4444-88bc-d19b089c1ce1\n1717f987-6092-4ee7-b03a-7278e94016c0\n776d23a4-0e7e-4ab8-9a10-709b39f54a60\n236aeb28-ee64-4357-901e-2c092d7f8181\n23c7a5a0-5db6-411d-8a87-ca00c76b625f\ncf55f89c-38c6-4d9e-b0a0-4ce479de38ca\nbbc4c293-33a2-4a59-abf3-ae9bb7eacfdc\neb8e65dd-d766-4d3f-9eed-b8925e001a3d\n369a24ef-f2d2-4f00-94fc-318b165ef621\n8a14d2e2-5a47-4db5-82de-766059e768c4\n32a8ff89-ac3b-4a0b-89c9-2d0580c6da2b\n23244abd-6a61-446a-abbe-d5f47b0fd864\n99912f7f-c649-4f65-9af0-977b77507b45\n394b6604-fe43-40e6-a113-00a7ff11f9bc\n039a7a07-b1c2-4029-a61d-df5c12a4874b\nf4aa313c-3bb5-4179-9b8b-8f3225ea1c43\n881c8861-e8be-47e5-8fbc-3c3ac78cfc1f\nb69a1141-afeb-44cd-9465-b0c259fd664c\n71960fa1-9e40-4cce-9da3-23258dd7e477\n8fc92bd8-b5a8-41f5-b96e-186f68910cfb\n3ceb52ad-f588-4dfa-9480-dbf5435bce9f\n78da47de-a490-4848-be06-8e78fd24d008\nb8ff32d1-7cc9-4dc4-833e-7e3921ad74fd\nadfd20fb-717e-43d9-a65b-b9522865d924\n2da514ff-c1c6-4f2a-a169-89c5ee360301\n3bb02a9e-9a74-48d8-abe9-b66104de22cd\na9468d87-c94f-4fbf-bf1e-f42df6be08d8\n8565ae6d-1b40-4462-b1dd-bd49554d50e5\nf874297a-2f11-449e-9bfd-b449d68b70a9\nf6a68d74-7295-4ba6-aa26-0924849a6edd\n1bb54af4-fe41-43e1-8560-9b80652d5880\n0b573d50-6d21-49e3-a716-2fa1ec929b9f\n757a903f-40a6-4fd7-afb4-530133c50eba\n922872ec-2d6e-4c1d-a1c7-a2f9b24f8cb1\n5c0d8d4e-477f-4ef8-b3d5-6fdac01bc6e3\na45cd4ae-66d7-472f-9a54-1896682fc354\n57aeb9e2-60d9-4ec3-8d67-e54ecb15c00a\ndf373b4d-5e99-4583-a114-715fb5641c90\n6f228af1-21cc-4908-82f3-0503fb2cbe7e\n1aabfa1b-12dc-463f-ab5c-04418ac49765\n9b0f3a3b-c1ab-4ea4-af18-f7c6db84fb27\n004a3a26-4f43-4dca-b1ae-bbfaf9da4da3\n4314abe4-d511-4997-93b3-efd33dcdf877\n92f458a8-c5cc-4ece-a305-986d1ae5d9c9\n22981387-e6ba-4ba0-b7a7-c4fbf480e299\n1808674d-1960-47c3-b245-a1eedfc87563\na42cb62f-1445-4bbe-810d-612149bc2efc\n37d6a219-ef98-4e9f-9f80-a5e927204b68\n7241262f-6286-4a57-b246-57ecae6fc928\n228eed56-a599-4598-9908-01f924460df9\ndce672f1-522d-4f4e-896d-2082cacef34a\n5bbce872-8e44-48e6-ad43-f1e056159f6e\ne3fb3c33-014a-4a6f-8f32-7b69392821bc\n9e48c953-f8d8-47d8-963d-042e820d51ab\n50e86799-f7a7-4e20-8641-a05a0d94fdfc\n1bb60f2a-e752-41e3-9ece-aa6a6d767a61\ne87646c8-267e-4d00-95fe-21069cce34dd\nc668c1f1-d71b-4cc1-9c84-c7c8b699e79e\nfe5f9d48-93f7-4a52-91a7-a921251f7785\n1a2ccd7c-2833-4f9e-8406-77cd4abdb5d7\n3065615c-cde5-4aae-8199-fb9fbb57abca\n3e1f32d4-bbb2-43d6-bc5e-519b143b30d9\n522ff6b0-0435-4869-b211-e39d82ebd9da\nc04331e7-3489-4ba4-af65-67ee4bba5556\nee34591a-a04e-4943-935c-799585650141\ncd5c3f41-bb56-4977-9db4-1e02403ed29f\nf6b57694-e26f-4997-88fc-3eb58df7bf9a\nb76a7418-e920-4527-9067-afd1906f0048\n9f7719bf-9c4b-4458-94c3-1eadf8333297\n63fd02c0-7b73-4e12-b348-3a0d71724654\naacda823-0c22-4732-8da4-ea65a3bbde79\nf7f264ad-f1c7-48a5-917d-c0066837c44e\n1bc6716f-d314-437d-bdf2-c33e5d366d31\n53e8df3f-31dc-453c-ac33-ece04f7f6b8c\n010eeaa8-8fd3-4d21-9b4f-09508561c366\n1afff089-9baa-49fe-a150-29f42f2e9ba2\n7defbf97-8076-4c09-b6c6-dda15147366b\ne2a8aa7b-e9dd-4211-9fa9-e45cc4a727ac\n0371886f-e425-4f6e-bcf7-99bc77ac526c\ne2bb6a47-f311-4647-ae4e-d0238afdbe54\n9eff17f0-fcdc-4895-b714-57ee8a64bcaf\n960521b5-17e3-4878-879b-214404ea22f1\n2061464a-89f9-4672-bf1b-f1896df29098\nc917f8c4-793b-47ce-a3e8-03a0308e62b9\n25e95462-d368-4e20-b6f8-11f75c45abf8\nd6bca7f6-3f44-4080-a360-ce02480bbc9e\n896ef3bf-405f-4f11-90a8-f4ba2d0a3b2d\nc8771d25-1510-4c07-bfad-49b41c4c8b09\nec588461-87e9-4a0d-81c7-085ae3be8b10\n1c9eb3ad-217d-4e72-ab18-2cd7104e5f8d\nebb7dca7-962d-4853-8eaf-caef9b98918e\nfadc173e-ab1a-4b6a-813c-2b7808ade07a\n180d61ca-0dc8-46d8-87ca-32b76853237d\n8369970c-c0f9-45ed-aad9-88e908faa23d\n5346f482-f54e-4762-8d85-d33f475c8386\nf650f8eb-473d-4733-9b38-964f85779494\nd1a1172e-bedb-4770-b5be-b7456e584968\n3014eb06-4c46-45dc-9339-45765b286c8d\ndf9d38f2-a2ad-46b8-8d79-e09fb568229b\n82a399a0-ec6c-4f3e-9aea-aa599cbfd530\n2157367d-ad6e-4431-8db0-a8c9d6f492e2\n8a291265-4406-4462-82cc-5135bd972c55\n39eee98c-88c8-4b49-ad5a-6db7cd129d3a\n940a1d16-bdac-41cf-8d11-be96d684319d\nb240ab79-1f88-4cd2-9069-e60e3f4eaff0\nfbf2383f-074e-4266-bc7c-9583f564b327\n7140301c-133d-47f4-8e63-3b2086b88084\n80aca08e-96e3-4b55-b16d-32f658a79753\n56ea1a8b-9bc9-48c6-878f-ecdc9a31cc8a\n6cd04388-70f1-4f77-88fd-8380fdac1e5b\n11543736-f575-435e-a56e-2dd3482bb548\n31c1b309-7357-4619-a7d2-dbac71933f00\n4ce8520f-3835-4804-b482-53650be1e14d\n1b344c47-3fcc-4dd0-a125-8d2d86829d24\ncf5c1230-1231-438c-bb35-bcb3ee01a7a9\nc04895d4-6e51-47fa-9334-4244d76a8d94\n357ca9e9-8761-4cfa-b852-e27cef75b52b\n7b3c7c99-ccd6-470f-9e25-286e0efa9102\n5e574793-fc30-40f7-9607-9ebe9065dbaa\n9b1698f2-dd7d-4c89-b886-1e8ad9c07d74\n514d07c8-abd9-437c-b4c1-e587a00cf3ea\n1ad1a632-b0e4-4f4d-a814-b0596878881b\n32faaf9b-e72a-410f-b6b2-43cb63854e28\n5cf53918-0c80-4f09-811f-97a9159b10a6\neb4a43a8-36b8-4382-a7fd-d591797ad02a\nbf94d467-0e5f-4679-92a9-f12212789151\nb3df730d-7903-4cd4-9ecb-9209ab61f03d\nbf2a2ff8-be52-4b18-9aeb-69fd02e31ec9\n81467e03-5c32-4b3e-b0d9-74aeb3569134\nb51de62a-9684-4003-8a79-2611d3a3f3ad\n147d1240-d981-4fa7-935e-4d5e8fe5aed6\n40d9e42d-e466-426a-9e17-6e6e329f04f5\nfb1780ba-86c2-4451-a00d-3d70b77e271f\n90706960-561f-41ce-9f74-21d41c3628af\n5b4a559e-2449-4033-9cb5-99e63a48611c\nef7566f7-200d-47dc-acce-55945c9ca195\n4af9f5fd-99ec-4485-96ab-d6ecae5f6798\n29a7ff65-1ccf-452b-8add-4b40e5ad066b\n8bf425d9-58b9-40d2-967b-7194864bbb4a\n738800ab-9c77-43d4-8e2f-25ae2eaf669b\n64af0d47-1ad4-4ce7-8a63-80b12b73855e\n17bc20b9-897f-453f-89fa-17fbbb0d7a2e\n0196cac5-2dbb-4dd1-9456-09a5f03e1a1c\nc7ad7da4-e621-4a5f-82a1-5c171ff1bb50\nc0696222-e63c-473b-b18f-c69591ed9cd0\n4f6a04e4-64e9-459b-8c42-c12920d5b73f\nd3ba84d0-f140-4bfa-aa4e-9b005c565584\nf541c072-8b36-4303-b1c4-a32298c4fc24\n466a3f9f-404c-4aec-bd84-694549a0a29a\nbedca37b-3ffe-4358-ba0d-2bef651d49bd\n4ddef5f3-3512-489f-abbe-809d7ce0fa54\n2f604570-22fa-4279-9fbe-14c607a0bb30\n4b178d9a-85f3-4e2d-823b-835b20e90edb\nf5528766-e72e-4e1f-b424-2e6e64368b13\nd0b7262b-aee6-4409-b727-c021fd11089e\nd8cfbb28-2ec6-4175-8edc-cc1447812e79\n276b9cdd-b528-49b1-bb15-c642681c1c62\nb464df28-43e3-4a9c-9d16-e0289a5943a0\n0703b16b-38ba-4209-8fb1-b68f0e3c49be\n36bceebe-21c3-4ae0-9849-609578b12973\ncdfae132-1e45-4581-af84-fc40f74daf4f\nc9d49f31-ed93-474b-baff-636bca344a68\n722e0f1a-d711-434a-b7cd-16e356d2abdf\nc9445618-ebf7-4f16-8dd9-f403ac31ecbe\n16934e25-bd0a-4ac7-8e84-05317b9bf8fc\n94a8b335-cdda-4ea9-8be7-3e73c9316e05\n7d14e0c6-6394-4150-9013-5c0814e14b0a\n8440c158-2ee4-424f-ba44-db1dadfd70e7\n036bb163-7e57-4831-8899-847445c1c0c5\n5a481cf8-8c24-439d-a7c6-1a41eb39e1a0\n671840a4-bf9e-4e49-b0fb-f85e7e065cc3\n64368c4e-99f5-4323-b3ab-2f99d926f840\n946f53d5-11a3-44d1-94ed-7fe8c34dfdf4\nbc0ecec2-557e-4b6f-b15f-e7db1507280e\n675bda3b-a4a5-4e2d-bc63-a85f274e661f\n89a3b0c5-b738-493c-ae26-2710d2e92559\naf95be59-983d-47b3-81da-70b4597fa2a2\n55143d8f-1d08-4114-90a6-5ac038ccae82\n705f648e-d53e-42eb-bf58-1b4c93360d2b\n48a283ac-54bb-4d2b-a3a0-59592180e412\n723463ff-8c3d-46dd-94d2-42a9df3dbf0b\n19181937-0301-4650-90b6-d2c6ce5e6777\na9dbb046-7159-417f-9c85-c222f381740d\nb0efb53e-b715-47b2-8fc4-1fab379337c1\n563f461e-141e-465f-91a7-5c3b63252ef9\n7b6cf7d4-6bd5-4e54-9208-1483fe382531\ndfb3a34a-eacb-4313-9def-4a5c92d40beb\n2121bc2f-2db8-4416-82d4-bf43e3f14a34\neddf5a9d-28a1-4ffd-aa2d-e4eb3753b80b\nc63033ea-9776-41d6-b28a-17d915d0d49e\n00544c2b-7282-4bfb-96f5-74e8212cb735\n3843ef99-ea7c-4238-8939-e150bb315c06\n8306adb2-1332-4244-a7bd-30973d2d4436\n525a5dad-286c-47fd-8145-2340d030dc94\n8184ff0d-5279-45fe-8bd9-ff7e19fb83ff\na19fa896-45b2-44aa-8304-c153b8a9ce5c\n7f5279f2-9316-4328-88eb-52bfbcaec7ee\n1c01bb4c-ed5d-4445-8aa4-1031b6c95e5e\nc077c16c-bc55-4f7b-a762-212a417f0925\n1f961060-7c6f-4eed-bde6-0b2c08c85141\n22cc54d0-40dd-4b87-a329-dc907db71f6d\n09610a15-ff99-458e-b755-a4eff6721768\n3c1ad15f-cec7-411e-9f99-3972ce4620a1\n700c1621-70f2-48ce-ac3a-945cd23ef7b8\n23843289-f04e-44ef-907f-423ea155d918\nc324593e-c714-4d6a-9c2f-472e0b52e355\nda896aac-3c0d-49a5-b50c-f37e574a9f65\n36a25a71-652a-4fbf-bd06-98bfe090f3fc\n203f1f15-6901-409a-bfae-2aec4ae434de\n81871a32-ec47-49ae-9e7a-68659b83979d\ncd2c5799-4086-40ba-94b9-09f313844955\n5c843431-68b8-46db-890f-9e740addbd0c\n2b29da1a-06d5-4bab-b63b-e61e763f3bca\nc28326df-cd72-4dc2-bd87-a22dfee011c7\na7e11ee3-2699-40be-b0bb-889944f2946b\n4db5ef7e-6bda-4a03-aef1-5ca31a887ed4\n3564e322-0c36-4982-9f8a-4cf3f8ffada0\n0a366c03-7057-4974-9cdf-3a72b58a7c06\nf95b4825-61a5-422e-8ff7-5d71afbcf583\n97909da3-fd7e-4c63-b6a2-df053de61b2f\n0030eb88-8505-4aa5-8529-31c7a4437a60\neff78590-67b3-4ab3-9711-a2bbd3c04145\n46644b30-43d7-49ac-ac99-664c8f674308\n7f0ff6d9-85df-402b-99b9-62f18b114190\n6266ab45-e1c3-41d7-b282-f82b7934d9ba\n4980f16c-32c8-4938-aaeb-266a1439fba2\n7e80ce72-f11c-4825-9491-bed6c0c9b86f\n035812d9-4551-49be-91a1-8827099f88cb\n8f1be227-4b8e-4309-ae08-cec35c3fcc67\n7f699f34-2017-4107-81f6-b04430d40a60\naf0f0c48-d110-4415-a8b5-801db67e008e\n7bcdcb7a-0712-4c59-96cc-961b19f0a245\n94337363-4cf6-472f-8087-1d0edee35621\n85364947-e2a5-4a13-b595-f914bc8da013\n2eebbcd3-9864-4b2e-aadd-1c76420fbea5\ne6726e25-4c3c-4cac-ab80-e9829c9d02ef\n0949de7c-e495-4561-81ca-e4714a29af40\n520764b3-f86e-4fe9-992a-79389263a66a\na4c6afee-2e41-4d7d-b31a-a025efde6314\n079e121f-e762-4535-a692-2517df3c7bd1\n87a05ed1-17e8-4a32-bb6f-87859bbd9873\n01adbe25-0152-4dce-b810-d6f541ae2a4a\n768dbd7d-7314-46e2-823f-e5a491a69668\ne9d79310-ca35-40a5-85f5-0930355f2861\nfeb1b048-4806-4afd-a9fe-4df94a18d4c0\n4c5613ae-9712-4111-aa1f-7002e3bd8dd7\n3f59a374-7cd0-4e2c-89aa-ae43d08362ae\ncdc46d4f-465d-4c56-af46-1cf6e70567bd\n491cd5ed-8367-4e7c-9bd0-1c7c9c13b52c\n3127619b-d0a9-4e7a-84c2-5b6436f60dca\n38602a19-4b2f-4969-9134-67c4d68bc182\n2a4a864c-8b48-4d1f-bde4-82c87a81148f\ne7ee35ec-d2cb-4766-b10e-dc965aa40fa0\n64dc9091-1c60-4b89-aa76-b33c5f38e4e4\nb7dca50b-b682-4f90-a0e3-494a3c51ca53\nbd591ddc-501e-4566-81b1-8847b3ae4a1f\n0ff9eec0-1388-4571-9c47-a976f485c443\n9cdcd156-2360-4904-be7a-68a7511f50bd\nb8dd6da1-8c55-474f-81bf-03d7a01cd0ed\nede0df2c-13a0-40b1-8a87-93269be3a1d6\nff25d460-b248-4191-8058-f0a23bb3aee5\n01a5d38e-8fa0-478d-ada5-371b0a4bec16\n84bb5dac-64be-439d-8da0-881757fedb4d\nf87f3a14-93d6-4a74-987e-2f3e6bada8f4\n2c3609db-e01e-461e-9c7b-cf1ca22865cb\n1988f71f-ba8b-443a-837d-9f42e6f28e0d\n6ea026d6-b285-49e1-9713-de686207f415\n6910656f-a0d6-4d54-96b4-841167a8f1fd\n2aae3a1c-96e0-46a0-b939-40722d0c62c4\nadabbea2-0bf8-49d1-baf5-40e6031df151\nb9ff8d3f-218d-47f5-99ca-720f116b081c\n470b87c8-a087-4478-9a68-59034ae03084\nafe0cd07-bb13-423a-92a5-c405a7826b12\n4bf0dc0f-fa01-461f-9f54-cb2fba9954b6\n2232e290-77f9-480c-866a-41d6dd70ee5a\nb9621cbe-4679-4482-89a3-ccb2eb2acdc6\n32ca7557-33db-4bfb-82c8-b7552b549c5c\nc3b5c65d-aa0a-488b-af24-b7adfa81b328\nb61180cf-3d24-4053-af69-9b16b410838d\n40840853-2b94-4965-a84f-8ec8507895ec\n701529d4-534a-478b-a898-f877c6757149\n07d4a9b5-583a-4813-b788-ce9489aebb86\n3b340013-6b29-4631-a40f-14216d8c18f9\nd559fed7-0b76-41c6-aaa6-9ed5425a237e\n64d7db01-60c1-4b44-938d-881e65435f58\n63ce7a82-7d9f-41b7-8f7d-c8dc2ed35cf4\ne6c5a3ff-5e20-4c55-92fd-bdbfa27f219a\n006e96c2-82c4-494a-a309-2de7b80ef420\ne08a3c53-964a-4d4c-993f-8531c9fae7ac\nc41a6c7e-b55d-4b8c-9d78-f72b99a3ed7b\n6372d913-ddde-49b9-8698-35e4802081be\n66284303-f7dd-443b-ac4e-be0cb007ab21\n93863a34-8b03-45b9-9653-12d990f96a79\ne90cc955-27aa-42d3-84a3-60de3bea10b6\nce6eed49-b508-472f-af40-be34b8e9dbf2\n0fb05672-e931-4ae3-a461-b6ab5b98b356\n8319826c-0b85-43ec-9230-f9e3d46bc822\n40b9aee1-a4ba-4154-9e31-25d907ed0a24\nc04019d3-e104-4515-8b61-1ec2196adc25\n2126b591-1fce-4f73-9e1e-b4ff8aeccf0c\n5d03dd43-0341-46d1-bc9e-8b997c180eb5\na33df15c-ef70-414d-92e8-a9f2cc0f6282\nca2bbf75-27b8-48f4-8fc0-7f13dd156842\ndc03d15d-8cd6-439b-9148-e2472ac7bea9\n69bd11ae-e8f2-46d7-8c43-b687b8639c47\n2e15ac67-bb5a-4cef-aa0d-91562fef9055\n37ff2c80-cd92-448f-9c2b-3fee4703870e\n3d872965-e846-4cc4-86bd-97ccc6eb3a79\n109c0c3a-6741-49e2-a3ba-9455bcb93ca7\n08993c4e-b97b-405e-9182-b13120cdf0c5\nfca6cacf-898f-4121-8e04-764c6a765adc\n43fea8ff-a67c-407b-9bda-214b9329cd22\neea3f48d-21fa-4048-abde-374f74ce6fdb\nba5fb38d-7656-4240-a61d-cf5ca3e5240a\na9eb92e8-898a-4c6a-ba7a-663dc5337de4\n5dd42e8c-b870-487a-ae9e-1f3e3d844b16\n8dc53b4e-7659-493a-990d-b7286a46eb48\n4583abf5-0221-4681-a628-acd06212f1f6\n18854ebd-c8c1-4c8e-b1b2-308b341f2b8e\n006b6ec2-9ad9-4f8f-b8b8-9c7708b8239c\naa16189c-95b7-4c65-956b-759128413508\n0353d1ba-c0a2-431c-a594-25b163d38df5\ndffd8ee2-4f3f-444f-bccb-9b4042393c29\ne95c5526-36f7-4d86-bcc7-7489c30c70d4\n6a96e9a4-3546-4074-8afc-2d95b2342f99\n26958dc1-6f91-4142-9272-f4d1903b788c\nb568ab9c-eb6b-416b-ad66-df7330cb82a6\n8bfa3eb6-3d11-4c4b-970c-643ce8b9494e\n8d39c5b9-dd75-4d08-bf27-0d72cd8b654c\n94e8ecf6-270f-4b0c-858d-aff1e4443dc8\nb3ebcaa8-0a31-46e9-8966-f61993c17b09\nae33e890-c039-4a6b-8560-97891671675c\n2cc4ff3d-5053-4045-9767-5652c6ee64fe\n6ace1b11-bc88-4d02-9d05-1f79f58e9bf3\nf6d7c75b-fc6d-48d5-a1dc-df55bddfba87\n931a8b2a-a281-4f39-a69e-b7f512a0e18f\nd91efb9a-8573-434d-8d3d-84690a36849c\ne8332b1c-d16f-4fa3-b35b-653b9b7c2245\n890da45a-0534-44c8-b172-8bd5752457e8\nb9f9d98b-b57f-45a7-a306-d45475634597\nf6d7cf69-f051-4d15-8873-c39fc8644601\n6d85767e-a619-4f7c-88c0-1fe4adc5435f\nc3cc85fd-7be9-4aca-a1a6-5040f0b91294\nd4bbb224-f94f-4139-b744-a6db166b7807\n3321bf8c-1110-48b5-8f4e-814fb3dc9646\n537f416b-58d7-4234-b3ae-3960d276ce70\n1630f1f1-587e-4f63-be16-bf9d202a083c\nfd06b3fe-85fe-4015-952a-978690776549\n9a4d967a-957f-4f67-862c-c10c671a853a\neb9ccbfb-d94a-4b03-9b5d-4aaa14012549\n0980da2a-9304-4d65-be4e-620a02a4825c\n7a810624-1731-41dc-ac24-34d25334f3b4\n160ccda1-0926-43f1-8e2e-69110b965184\n57aaac9f-8acf-4124-9371-1750e9685b4b\n80928388-0715-4634-9a1d-61de99d6453e\n5280fa8a-c171-4a01-81ed-6409c0d213ae\n1385af9e-e5f2-4082-9d59-2c3e45e3b9a8\nfdc3070f-dd0b-4949-bb7b-505f0007cc2e\nb70db2b2-7175-4726-81a1-557a172e3cc5\n23d1d729-dc6a-40a6-9091-0ddadc567e76\n9bd8c264-d86e-402a-ab6c-d43a54173e0d\n16d5e4d2-a4c7-45bb-ba54-d0ea1b483315\n867293e9-d00c-4e46-8c3d-0a4e79c64687\nd45c656a-d612-43e0-84f3-9c841a583b95\n5ca331b1-f076-465f-ac20-fda810a59e14\ne1d7667d-714d-476d-bf49-fdb37dadc99a\naa8acc72-d3d6-4c56-92b0-e69347923980\nb3223a35-1d38-4c73-ab0f-942e7d6ad35c\n2ad85d75-8f37-47bf-9428-5ddbcabc237c\n77d9fc47-0fd9-429b-878e-2272daaecf80\n4cd5bba7-8645-482a-8485-43e2d2e83983\nab57aea2-24b8-4cfe-a4db-de7632baf07d\n120b7500-e61a-43df-8ff3-06a2a3d75c78\n91f97abe-b2e5-4542-8622-b1dd78bf8f44\n79ed3cb2-89d4-453b-8853-76797f4cd9a6\n4818ab1d-a847-4f47-860f-d9fd17cac686\n3049a06a-5752-4380-9371-55573ee61420\n9456c789-ce32-4d2a-a668-068d2d2b658b\n1ec5d91a-8f8b-49b0-9f1c-f02fec342801\nbc1ec3be-a8b8-4b2b-ba41-4e5bd3b3e1ab\n9f597752-9cdc-4a5b-94c8-ff152274a8d1\nabb8befd-c78a-49d2-b919-ede0038339a2\nd4615d52-f8eb-4cbd-a103-d31a51e53dd4\nceb705d2-9c12-4c09-8306-27caac61fe6b\n9c574aa0-7c5d-409a-956c-18642d26cca5\n53c881e5-402f-4bad-9f4d-e8470b3ee2fd\n188a98d6-d674-4247-aa0f-dcf2195dcf53\n38e1a6ff-6e42-4f9f-b94a-3335fc36e8e2\n1d428208-5be2-4c73-b432-55358dd2a835\nf04bb762-cadf-40f5-86ac-2a1ef7db7173\n941ce7d3-ccb7-4275-b5a2-7577e6839c64\n216f2803-ae93-4feb-9aee-2a03c167112b\nd096b962-1260-4c1f-85b3-f6c1be5b83e8\ne469687d-120d-40dc-996e-cbdcc6d2185a\nda444210-9c44-46c0-bdd7-ff43f8eca055\nf83ecbe4-431b-41ca-9927-ee22aefa11b9\nae2cdd7c-b4d0-4b91-b3a0-347661bc9afc\nc1f14c53-3be5-460c-b775-88d66c777fae\nba3f66a1-7835-4e31-a34e-f768ab7e23c0\n1bf579b3-a7f4-4421-b55d-87f38604720f\na0f2af32-9820-4574-bbf5-cba4d76f2d2a\na9d653ee-96bc-4df6-b750-d2dade14d5ed\n0a3156e2-06e1-4634-90ae-a1e1b1106c34\nad4951d2-530b-4942-8511-39fc4057eac1\na2263f26-8fdc-4a51-8e43-5a53ea4186e5\nc2caf3e9-06c3-4bb6-982e-611130a9596a\n463c7f88-fe3d-41ab-b2a7-f5abd038d6b6\n11aa29f9-ba32-448c-a249-d6311fc29cf6\n98c22dcf-f744-4287-a08e-919155035eba\nce676a89-c881-41b3-8494-a95e51d7f88e\nebb91239-8be4-4de3-a5d7-07c71b5d0ffb\n820fdbd2-70f5-4a74-a27e-be58a72a14bd\nf38a291c-cf1c-447f-953f-6867aa9076f8\n032dd2c3-d5ae-4771-99a7-8e542ea57dff\nbb9538a2-0344-4830-9102-e6c45f36301a\n9cbbe08c-843d-443d-b454-6aa886c1f07c\nc83754b7-a22f-4f9a-a527-ec197d3089f5\nd4463f78-8a9e-417e-bd29-334fcc7dc586\n7899fed3-2071-467d-b916-57a5280e64eb\n023b2d21-0a24-442e-90ae-e027f6b836b7\n6758fa53-ff31-45fb-aa05-4e6a0eec96c3\n92eecad8-bf93-4103-9fd5-c68b6d1686b3\n53796a95-cb8a-4c04-b7f5-8fdc64340172\n8a322562-9705-4904-857a-fd5be5158032\nb5c96fd9-b0c8-4411-9635-49d414342cb6\nae43b786-6675-4766-a5a6-665578cf120e\nae2a31b7-7ad5-44e2-98ae-8679b98de90e\n8a2a6ac3-cd01-4bdf-b8ff-1d703a49e0de\nf4763b4d-d0be-466a-ae2f-6ed511140afa\nda1d3706-840e-42e5-a88c-f95614dfa861\nfe12fe04-c411-43cb-9afd-961f9b685cd7\na10304e5-be33-4e51-81f2-d6cba6cc7f5d\n6328689a-f289-49db-8a83-334b21351093\n03ffaafb-3deb-455d-9ac6-b4d7fda5ffb7\n54300806-7d57-4afc-9b40-d4e92baa6708\nac8f37de-6a42-4966-81a2-ff6d48e0cc07\n1d3e0b35-69fd-4bad-b2bc-4bd9bb9a82ff\n8a7abffb-4209-4e25-ad8e-8ac8e44e9dfa\n4c79111f-4d6b-4c4e-a80b-a82b370d4386\n58cd9e4b-1c60-49bd-8b5d-d1b1af0a6f00\n0318df3c-23b5-49f3-ad0d-610c91ecdaa7\n0983068a-060e-4ccc-b536-027b58a0fa63\n81e70245-314e-4bc4-ada2-47b412375d1d\n53516f51-873b-4fc0-9b63-c6c9242c892e\n80856951-a817-4c00-8a56-2216bfd4696b\nfa4d63b5-b5c2-4999-a063-c22e08d11994\n88827fec-1c98-4577-a137-18d8e84a7209\na4bbb0f3-b792-4908-9812-12e76facd2ba\n2b0af919-2301-4445-8d27-b5a64b71fa79\n0968a663-c576-4b44-b238-1b8c5b9a61db\n89c3c969-bd02-4a35-ba21-d1a8f11beb98\nd9935452-c876-470a-b9a6-b46cbb7b73da\nfbd15193-3557-4143-9507-b97ac71a6ad8\nac8aa2e2-1fc7-4773-8b6e-b99b373e0ffe\n67ec5493-4945-4794-9a78-274f088b75ef\n69f17f27-7832-44f2-a52e-aab27c7ce5b4\ncd9fb9d6-90de-45c5-a707-45b200357b08\ncd018499-359c-4973-9c50-500fe9550795\nb1f808a9-ada0-4279-a4d2-c5d45403596b\n95f5827b-dcc0-49f0-9705-4e792d10e795\ne4171a9b-c500-4b8c-9e00-a958f97e9bb0\n125ddef8-7649-42a6-b546-56d14755acc1\nb87193ea-edef-45cb-b2f7-6dc593d9721d\n7a643b18-5e75-45bb-9310-bbb244273b8b\nfdefdcb3-24c9-4579-ac1c-e4b4821b0372\n4583231f-ce51-4ccd-af15-91b40606a9e8\nf1c0cba3-9212-43d2-816a-61d751bc0307\n3195c128-68a8-4d10-9292-10399c3c151c\nf6cd6472-cad0-4a0c-8c93-f2e7836ab24c\nfbedb9b7-1450-4ce9-88fc-e5301a514251\n4746775f-73e8-4b92-b91d-12e5d6023d86\n13795b05-07c6-4e0e-9341-d116e9701046\n88b124e6-2818-4770-8f2f-1cee8690126a\n3dd4df0d-8612-4fae-bd66-7a57dd8c81e7\ne900ab41-b274-4c77-9695-d2ec7d292649\na093e47a-3a2a-4022-9a35-d3e4c150b481\n93159127-2c27-4530-aa70-2f5ef1deab3e\n051adafa-56d2-4cdc-9686-41254f92bcaf\n34e0ab6e-d8b6-4752-aeda-aeb987f913f7\n06657828-eb18-405e-a2b2-7faa31a67540\ncebefe63-ab7d-4df5-a8c2-97f3fb32cdb9\n05b3b4cf-c497-40ce-a3bf-217d309575b1\n47e2103a-3ecc-4444-8894-4b4ddccc304d\n292d6f69-60e5-4768-bce2-d7dba67f5429\n14894018-2b6f-48c6-83d1-14dae10c85ba\nab82a8ca-bea1-4f75-8d63-0b9ecfac9785\ne7fa6d4d-ba78-4310-9128-c0c0f03c103d\n91dacf1b-6593-4816-9178-677d999a0805\n18c7296d-e3a7-4d38-b61f-ce23bc7623af\nc6068b10-d990-4e74-8b41-a77b019c86a7\na0985cd0-4021-4fac-aa43-639eb5bc99f6\nf0218ba3-053e-4b7e-813a-6d39a7d60ef6\ndc5fee76-4b34-406c-8dcb-0a51ba765fb9\n55830ae2-42e6-4e5c-bef9-b796f6dc73a9\n65133173-f978-49d2-9f18-da03ec434699\n65b307bf-5cb5-44f4-bafe-290af36635bc\ne1682851-c2ee-4861-ab20-68f7df5cd084\n6ce2ce00-65c4-4157-b068-69d3c52a658b\n8b39884c-8129-4b73-a64b-fadd81d57716\nf21c70c8-eda4-4750-8430-732cce545ec5\n671a17c8-60df-4fdc-9a4a-6c040263e46f\n68331b64-9617-4726-b28f-a08a82d28db2\ne511c978-f7b4-4757-9593-715c23551e8f\n4f274861-cdd6-4f9c-b7a4-3412879250b9\neb2b37f5-fdbd-4e20-83d5-173b2347460e\nb8d6a5d8-b255-4e27-9cc0-d868f78a9fa4\n7f1e38f3-591a-4253-829d-3bc984a3ca81\nd7c374c2-662c-4684-85e1-eebcfb215956\nb11ae7cd-c44f-4d9a-bac4-a7667b45c9a6\n2310bc53-7aed-44ef-93df-004681df950b\nff7089a8-b5d9-4ea8-9611-6ee7ff5bb73e\n678ae53c-646f-4ca5-9971-503b01028609\n84bcac9f-3bc9-4254-91cf-bc1e6b9b772d\nff87d340-ef6c-4bb4-a0f7-eeef0249a31a\na8981a5e-296b-492a-a988-feb8560474c4\n4246d68e-d824-43bc-ab4c-fc69205cc175\n73e561fc-75ac-4770-8233-a699fc28ae65\n7224b6b9-056e-4faa-bf62-43fe5a08c53c\n8fd62e0a-3894-4412-aa47-f1b5604ea861\ne041ba5e-a92e-4f62-9a16-f2c7dfe53280\n23968bf4-65d8-4dc5-b135-bd531e3e60e9\nc16a6095-00e6-4b8b-897a-1a8a3d8f36b6\n79af4d2d-1768-473f-afa2-37b13ad7b428\n6488e123-2317-44cf-be46-841d5fd66242\ncd883443-ed6f-4028-9942-d316b95ca6f0\n08275478-6587-407b-8bf6-90128d0630a0\n0ac78c47-73e1-4d72-bfd8-7432e9d71ad4\nf0c4dd67-db1c-4279-999c-7ae328b29532\n0c83461c-c404-4c16-be1e-c3cbcb35f194\nc4720e69-4d79-4d04-8553-1cc0c10e783c\n5707d760-13ce-482b-83a8-2e452fc8efc0\n969ea5bb-3c82-49b8-b2ed-d20be27d6950\n5bf97b76-2e0a-4d3c-b69b-030d4a272a79\n93eeb9b1-b013-4d83-9f03-4c7e3d9aeddc\n8245c190-37eb-4bee-8c89-21a20d0af307\ncd7ca62e-9bbf-4936-9a98-be0ac58fd05c\n6e1940bd-bea2-4c6f-ac66-f4ec9d364cae\nab313862-84b9-4b7e-9ebc-45be2e225e8c\ncb9658f5-3575-4845-ac5e-ad6defa6e188\ne5a9284e-c782-4923-a2b2-547abda7af0e\n21355303-c6d6-42ba-8110-9c9d6a7fb101\n368f0e4d-2022-4d32-993d-37607df1bf4c\n06eff95d-2702-4e3d-b7f4-839e96f61aed\n1977e3ea-4a11-4cf0-81f1-015db3e68e47\n56cc09d9-e969-4e2e-8071-60523be91d17\nb9ca1f5f-31d8-4f83-b377-0d116f9a564a\n11c563a7-df2f-4bb8-a3a1-f11641659531\n745214c6-8790-4127-af98-c9b57d733845\ne77ed013-58d7-4728-a201-d92aad60994b\n6df06710-b7ad-4432-8b7e-27ee0be50be6\n95ff9133-f695-4101-b3e4-349d687f9b77\n7bbfbef6-5832-4150-8806-18eb62de9ea7\nf25d19e8-525f-46d9-a84e-e2b54d19f8bf\n93ae5d1f-b384-4a46-9ad2-fa5bb1dacc73\n163c1256-bf03-4810-b4fa-e9c806d693cf\n7cb59bcc-e63a-4af5-bfb8-d97b76f7e22b\nfbf2d924-5016-4700-9b55-4685934217c2\n9a360bab-4082-4bfa-9782-294499b5a0c3\n3a2f46f7-773c-495f-acb2-589ea5a79efd\nec8eab3b-f349-4c3d-8150-701b68d971c6\n28579c72-1757-450d-94b1-8ed03bc5180d\na8e6de4c-09d5-45bb-95da-42511ccb9417\n05add3db-2db1-4649-8e57-8f29b6c5c080\n067026f4-f83b-4c00-959c-5a66b46feeba\n854b1b12-5d17-4a29-ad31-d987e50a89e0\na6e473fe-a554-454f-8e05-8dab768867ab\n1fe4e836-8679-4f29-b11c-983f981a369f\n0e01f63e-7fbc-474b-97bb-eb15a999aa51\n045de0e8-dab0-4df9-b4cb-b56de7eb7536\ndbe9db2b-f808-4467-bc55-6c5298a71d0e\ncf598afa-cf3c-458d-b222-54d0e8d4cfda\n0618384e-81d9-4f81-beed-7aa05ca9a09c\n1077695b-2b82-4f40-84a0-be6ec5a74a40\nda4804a1-76f2-4111-a163-c1f89e4e70a0\n935182dc-507c-4347-a81a-0578798c1629\ncb9fd817-fbb1-4ce0-8f48-c943d6aee560\n75cbb47b-9cf9-4bec-9e9d-24eed4666591\n6a57cdaf-755a-49b6-bf61-9d5baef600e8\n5e161dc4-d786-48e6-ade6-8258fab7178f\nbdfb93e3-8525-4a67-b8be-b3c09998fa02\ndcaf4040-e031-4211-8f95-d348de89c833\n82890c33-3531-42ec-b24f-f503f2fdbaf1\nb463f914-dae1-4926-83c1-702609e788fb\n1afb290d-0c3b-4258-a6b4-cf45fb9e1c60\n9601b19c-ac15-409e-9dda-801bcccbf81a\n30a556fc-3d13-44af-9df7-f7d33991a916\nb1f9a064-e3bb-40b5-9f76-6542aa7bf826\n292cc383-3f44-4ce3-bd58-9f904d88afa8\nffcc64f9-6957-489c-b631-711a8f6dcd5c\n02b68fb1-8a1b-47e1-ac39-0d5a238a835f\n2a2e69eb-9b04-4e7b-a3b5-50385657c3bb\na94eb9f7-2aab-46ea-bd5b-cd30347a9803\n918ea904-1a36-40d0-b8c1-8d05c4e35bd5\ne3f8a7db-9d2c-43e3-91a8-e5891bd88c7e\n9f1cf052-dd58-4c90-97a7-88834abfffd1\n90c9cbc4-6d71-472f-901a-b40205231816\n1b37ad7c-b846-49ab-8abf-ef77c6d0c9ed\ne76653ba-0854-4632-9e4c-b8fcfa61d2b3\nebce44a6-6037-4bc3-be21-2b6edb34329e\n60e13d0b-428d-4d4c-9f14-ff951354dc90\nfd3c59c3-c41e-4abf-b99d-5877c6468b77\n29a75b54-e1c0-4264-bd46-f723b63e5835\n9ddd7406-539c-4a69-ab76-1f29c059d4bb\nb049c412-510e-4669-9644-30199627a298\nbb50e265-1f45-4c66-b9f0-23f292925bd7\n2f8da1e4-77cc-4085-9739-0ae74d565cdb\ne98ea7e9-8d56-4069-aa52-7f8f3ca30cba\n577194b1-a4df-42de-8af2-bdcec9b428ee\nbc3daa1d-a13c-44bf-81b1-51f05b15adc6\n86b83e5a-088d-40f7-bd66-5f8500dde0f9\n2dde0d79-a780-4a43-8baf-ead0e140701e\nafa76a6c-8f1f-4ca7-84d6-259183931848\n29ffd8ca-2ee1-44d6-b891-53de6caa6066\n50596e13-0f8e-4bcc-b0fa-9a8bb2498b91\n872462ff-9237-4e45-ba50-5521f513e419\nddb2a2fa-b4fc-4f77-9703-665fd6023c8a\n32b28494-9d5f-4e1d-914f-b92e09f51851\n9a772da8-733a-4494-b14c-5c743e9aea06\nef811012-7bc7-4587-9ea1-4795e918162e\nc3ed1ff7-77fc-463d-90a9-e22edcd3d9b1\n144d2831-6b08-4f69-a2e6-eada93f78250\n3f1510ad-e79f-493a-870c-d33f8f4dd5cf\n072c7f3f-6b75-4044-90f6-8dc648fe4e03\necd2a491-d197-49a6-8fdc-61b873c04279\na1ca3914-6ab8-4476-aab6-ec3c0078d5ab\n243b125d-aa99-426e-98cb-46c7fad7d7ae\n6ae96b71-2d3f-4a5a-b296-516d555d8593\n16adc6fb-6695-4737-936d-96b049f94c32\n267d6d99-7047-4652-9a75-31e568fe0d04\n89de009e-f53c-4bd4-a42b-f1c2606cd1c5\n91876f23-309e-45c1-b0f6-cf714f9bc0cb\n32905311-aa80-4667-bb87-8b0ce19c0aea\nd25dad46-5e08-4885-8efe-5e1c0f0f9aca\nea3efee9-a369-441a-8b1b-745613fe712c\nfd823e58-85f4-4ff4-bcb0-db430b639ba9\nc430f429-0c4c-4720-89bf-79d0cf818056\n1623fd57-1b57-4f36-9619-a6d6ca7cb75b\n9ab3b503-aca0-4d2c-94bc-2cb364bc3a36\n4e8ed79f-0fb4-4fa3-b843-6742ba28d1c5\n6b0f51e7-938c-4910-9e1a-0ceb762eb3ed\n3205288f-1627-4ce6-ae1b-e0bf918f677a\na12560bb-d3e6-4289-a5d1-03779580eef9\n822f1dc4-07ab-499e-8d52-9ab7b0f14146\n25ed5b24-808f-43d9-ab8d-6e41647c596d\n484fa770-5c55-44af-b16b-53ce965fb2bf\nf05ffc4d-9210-4a31-abba-f03963726f27\n7db0b54a-2f67-470d-9a62-7e083e511ccd\n0d55262b-af16-4b2f-b437-3e406e6f842d\nb585c281-eef2-442a-ba00-3ed6b83ecda3\n60723cc7-5cc4-492e-a880-6761403412af\n934ba8e3-083e-4288-b9bd-409da922e543\nd90af31e-afe4-45c9-bf60-86d40a01a332\n8fb432c0-05cc-4023-b331-4cb54febeeb9\nae425d16-7659-40eb-b268-d75fa99f2626\n6831d021-dfdd-42a2-9721-4346dae933b1\nc7d743d4-fd01-4ee4-a22d-74c99e8bc588\n701c2af6-74cc-4432-85d3-19c4ab1245f9\nf9850fd7-9e2c-4766-9c6c-5cea674bc540\n2c703266-2d15-4e92-9986-7a8b56ef4050\n85fbb416-c4f0-4b22-a857-db0bd1e5f59e\n3d19f041-4842-4cb0-9189-1f47f33ab1cd\nb9693171-2f86-4253-a6d7-46c26016fa80\n4f15d9d8-b1cc-4e4d-8bf5-adba86ba5a0b\nee4f903f-4b4c-41d7-abbb-2a4b1579b9b9\nb961bbf5-4772-4e91-8526-1b6b16371246\n9f8535d5-05d7-41da-bb21-d86e61049dbb\n5630a754-72a1-40ca-b820-8007bb33725f\nd2b70449-caae-4082-b263-a03c53d9922b\n83f6d4d8-d7f2-47ee-9db2-9e9f0d9514a8\ndd8f46e1-0afa-4941-8113-dc76445665b9\n6160fd34-2ebd-4a96-924a-f38c4f5c50c9\n197d8655-2853-4d64-936e-6faed66a06b4\n18aee960-f2ec-47fb-8f70-f4a36ca2abe7\n5830ce7a-3c89-4140-8166-89ab6ec1f7c9\nabfb8442-a81d-4cfb-a644-4208738c71a2\n89cdfafd-b34b-447f-9130-e3ef2bf5613f\naa159a75-45f0-4121-aa8e-3b3cd5ce0205\nf25abca3-f5ed-436a-82fe-e4d354e35cbd\nef4bd585-10ec-4bc7-93fe-734db8318b01\nd3148aec-3fda-4e06-bd38-7ca9f75d902f\n4dcb9e94-c9da-44ca-a61c-0d301b919d3f\n0edad822-db84-4591-84ff-90eefe1b836c\nf064d187-f191-4a0b-9c0d-047a34b9e3b8\n42a4a428-d036-4552-b51b-0d9a93fff1e7\n11a00a22-07af-4a33-9677-ff9fceed0a96\ncb69a5e9-8972-4e03-be52-fc0a84530a15\n116ba542-d8a5-4a68-ba40-21f9b0b1798b\n2c0e07ad-2151-477c-b048-bb0852f69f13\n03a46415-fbbc-4f2c-be33-3567e21f82e8\ne7bbaf12-98c4-4613-a9de-4fbb3a5a5305\n8b9cd70e-0f27-42c9-b938-bbc101fe6b02\n7a5fecdb-695a-42f9-aaf6-c53f5f4fc3be\ndbe9e036-4f23-4f04-8868-baecd14f35eb\n36b1e9ff-bcf8-4e88-a129-b494ea8b623e\nc9796dbf-d16e-449a-868e-a5abf6594ab9\nddb3e00c-80b5-4ceb-b778-9db136854298\n03e34645-fb63-4596-a4a5-70a29a671203\n5a558e6c-3a77-48a3-81ed-ddd78cb35804\na9a5ee09-f351-4761-854a-e2265d7bda5a\n63011f68-83ab-4377-b641-65f62dedabe8\nd840fe0d-9802-44f8-9c7a-2be8292a3429\nc5a89d45-325a-492c-856a-cda58f09f854\n9cfd6575-a7f8-4d67-b08b-d8e7b597e0c2\n06601080-b9bf-4bc6-9a9d-fdddca88ca9c\nb55c1f44-bb95-4e59-a4bd-da3fff3fa9e5\n26f88cb1-decd-41c0-812d-d257578da91a\nce061981-fe89-4aea-a68e-d4a49e49259b\n0b1017b8-c4c1-4163-9cde-6dc654ebdd94\n46266064-fd57-497b-870e-2a6744c1513e\nc8d0f655-983c-42c1-b986-72dfd77d7e5b\nb0745685-a5d4-4f4a-8e3a-72af28c2b6c4\nca149f83-bd52-4686-81b5-f9f6807a17f5\n4c2ea92c-e11e-4c7d-99f2-d82e5070a8fd\n41c1ce7f-c298-4927-afe4-a24606688c43\n1149ef81-1eb3-4e42-b12b-6f791c057bd3\na09b1e12-b197-4e83-83ac-0a2a115e920c\n37e1cda7-f912-4572-a001-1a13fd94e932\nb2522bfc-5eba-47ca-a4a3-df5de7a3ecb9\n0a577820-6baa-4e98-b422-01436b645e27\nee8afad0-f7cb-4aa3-9c17-2c431d61402e\n6724c154-cb57-4aef-a70b-914cfb4ed830\n801b7673-605c-4798-967c-2def9c564ae4\n4046e78e-bb1a-41f6-8d40-9dd209e73243\n6127829c-b7cf-4662-a58d-5fe6db574e04\nfdd83c37-1900-45a0-8821-e56e1ef79d80\ndf9bc2c4-b083-427e-a659-cf9baa343293\n8cece43f-a06c-4e12-903d-48a725d77a45\n47b9ebf2-6714-4176-9e46-8220e37652af\n3109681a-4e12-48b5-b9fc-a9323df49931\nd2c1ad7a-b611-4e12-80d6-77d7e878b769\na476b1d1-a09c-42c6-b851-0be5cd02b0b0\n387a234e-9c4e-444e-bd4d-e544c69abe95\n17bf5107-6d76-4f22-8b0c-d853247f9635\n5e5ea3ba-6c01-4ab0-bf78-d12c2b1cb779\n11802c25-969a-4d58-a2b8-9f881d2a24af\n5c711024-27c7-4772-9e4d-50cec3b1645d\n79211643-d076-4297-9232-77c02625574a\ndd6a2928-42f1-4cfe-aa2b-00e57142eb04\n1bbc0888-3b5f-445d-97d1-1cbb603ff2fb\n9da2c221-baf1-44ea-b3f2-3884303c053f\n74b593f2-a993-4a7c-9cf2-6a340122a04c\n780f26c9-646d-46d3-a65a-87abf185d810\n42941e49-aaaa-43e1-87b2-7c1327f05d95\n349b6b0d-ee50-4157-b5cc-662a3608e1a5\nffb9f9aa-ec17-4c96-a434-185df14eb933\n9967d958-a205-49ec-bc7d-9b5ef7ce05f2\na428c81e-99a8-4e0e-81b9-e03cd96f1da6\ne4a5ce01-43d0-4c4c-8586-c4a7c9f3647f\n1e649e41-5aa2-4df6-a175-30bfa8be6717\n47bbc229-a903-4fe4-b646-65d38ea56285\n2dda1f6c-dd84-4247-a263-7ca94f80088b\nc2900023-b814-482f-8038-3b54c5f283ad\n86006e8d-8ed7-4804-aa50-65341f653c21\n52733379-3d21-49d4-a3a8-52b0576f54d8\n556726e5-6e8b-4973-8f05-f7800e602b81\n30e2d1ec-f2a8-494f-a8e9-5e8beec3a67c\n73d0ebdf-bdb5-43d2-9154-760e8f6bb58e\nacc1982d-73e0-41fd-876b-16246e315d19\nd7988efb-ac0a-4140-b167-f07a18af85f5\naafec4d9-9a63-4bec-9ba2-41046f3252f7\nacf784a9-eaf0-4157-8fc9-980b96b1c7b9\n33c288f5-55a2-4049-b96e-d786d95dbdb0\nfc4f16fd-de99-4b98-bd30-2bf0a548a6ee\na773a510-52c4-4a9f-823d-a62ea18f4c18\n764e7d92-6fa7-4306-bf8f-1367bde934a6\nd8ecf18d-b95b-43e6-b125-ea5dbadd4fda\n1708c95a-1e22-480d-9860-da1cee4995d3\naccc9f65-dbbc-4028-8a85-155367c3f069\n5593e59f-7b61-4663-b665-32c96b41605e\n9bdd369e-c1e4-42d4-b1e1-cb82ed8ed165\n88018ca6-b53b-4f86-a9ba-f951f5894b00\nedd9dbf0-75d3-4bd9-bae1-2d6a5a5d10d2\n00c529a3-4d36-47b0-bbfb-ba6c848ad773\n20899f10-9722-4348-9448-e444a7ae6238\n5c61833b-03d7-4c72-9f57-35d0c269614e\nc1071b92-8dac-42e5-8c69-0d67b8e74af7\n43128f76-aae8-426d-979b-6599d7e159ba\nddbc1287-2669-4c8c-99b2-48be3beeaca3\n7a37c79b-6134-4f5b-980f-23d70b6b8932\n933ecf93-846b-4570-ac94-5a5467132b53\n36e703a8-39ab-47b4-b2da-515d68d0d3db\n45611cef-6cb6-4071-a6e3-8c383d9dea3b\n401e7fb3-b55a-4c89-a2a8-1f0e0ab0fc44\nd4e12cbc-549c-4f91-81f9-ba62634106f6\nda7daeb4-b2d9-4a5a-90df-4eb8e2ab1eed\nf1bc6328-5759-4b43-9fb5-909e1bc77089\ndae74250-d32c-4ba9-a27c-d7d339248f38\nf5b4ca6e-36e4-4f6a-b935-a60d28a23930\nb8cd8b55-2ed6-4f97-a308-b41250b3e29b\n3c2ce27e-6579-41a2-8421-b543a609738e\n96cdab27-4cba-4e91-818e-6d557b495b7e\na4cb56fb-f057-4dec-958a-83ad52033d56\n905bbf90-1ed4-4b21-98a5-d6b886e61b42\n0938e442-52c0-4aad-943c-526577397c3f\n37158455-d80c-4197-a2cd-8d20f77f79a4\n763367c5-2611-4092-b30b-e1c0059befea\ncfb8f1cc-ab10-42d9-8911-54cfb35fbb89\na218b651-4a23-4112-81c3-7cd4268ecf61\n756c2c93-d4ee-4cf9-a709-874feccf2323\n0c109455-9ea4-4aa3-b353-0ba2f2458462\n02c2d860-7d57-4b7c-890f-1fec68cb806a\nb4506728-d156-4b38-a9de-599dfb1f1ef1\nfabff140-dbea-4169-a4a0-cf8c19809f53\n87f14d59-3805-4c03-8a6e-86b76dfe882e\nadaf2fd4-bc16-401f-9379-5e338af97e5b\n395fc7d0-3fe6-4943-bcff-e0ef7866e201\n88dd5074-ac32-4c39-9145-59d63a6939aa\n1e884cb0-e207-4dea-a91c-bfd57b0cecfc\n69aba5d4-3866-4a11-b821-14462855bca1\nb572593e-6f5f-4280-89d0-e44aed19c836\n6b8ae3ba-9423-4b17-87e9-8f617677c11c\n453ace39-72e0-4b4c-91ba-5d31e5c98c78\n0e08fcf1-5c41-4c9f-8acb-92abe67723d9\ne75a67ab-bf69-4523-bb8a-73fd9c4e599b\n8d58c418-3f14-40b1-8b3b-3bc50cb12692\n9c598e64-f31c-4c64-aa58-eab052d4f030\n289de93d-9c67-4cfd-b26e-5f61929d0c52\nc2b8ca60-2abe-4415-8fa0-4d1e9b37dff4\n88ee8eb2-abc1-4205-aff1-3ee57227e2c0\n7b7b8c2e-9549-46c1-96c8-899df0112c75\ne41c6404-62af-4a89-a851-40e6e5bf8333\n456716a3-e67d-44a2-8db0-d541c80742ee\n78715e7f-b016-43b1-bac6-406f483ef35a\ncd5da8ce-b4ea-4a33-bf16-4b2dce123401\n21763fb6-64c5-417c-9d6f-d976a89b41cc\na16f6294-b3b9-4dd8-89e5-0c4611019cd3\nb2ec1e6f-f1a4-46db-b84b-1b627756c4a7\nbefe0c1a-706a-4655-a0e0-a66839eb8039\n82d7082f-4486-416a-83fd-bcaee93739a4\n0d0319d4-7147-43a8-84a2-53917f4737b2\n1ecc0728-48b2-4cf8-80f7-b640df830fce\naf9def5f-f12b-4ac1-8987-d3cb66b6f994\n537bf570-fb2a-4790-8352-9783a3a3df29\n1b775869-67ac-47d2-86a2-0e02659af3d3\ned72063b-acf5-4ae8-a7fb-21692e237092\n5bacc577-790b-42f8-8b05-ad7ca0361e57\ne4105795-cdd0-42fc-9df6-0b3f773556dc\nc40500b3-344b-4434-94be-f3e5aa19df1a\n202cfdbf-1e83-491f-9b49-ebea2c933a64\n713da37d-043d-4f60-802b-10580369f7cd\n1d9c6061-e5da-4581-8c40-6ca326e62448\n05a09eee-1304-4dd2-b312-1ad5c7c61645\nd820918b-9159-41a0-96c7-5bfaf7833967\ned0f660c-17dc-4139-9782-9b4c46f44fd4\n8f486557-c35f-4fe8-adf6-ffc6ed42d324\n54f889e5-8656-4f66-95f3-7d9f90188eea\n8288eb9f-18af-418e-a944-de4a7490ce03\n0f8797ac-04b4-4c20-9677-6eff75f0d932\n27104851-abe2-4962-9a04-300f26f3ca72\n54e85ec5-3c0c-4e10-a034-aa8a85c97c65\n36ec9e66-ac8f-4fa4-a1d4-835adfa989a1\n5ec38893-0f16-4bb2-9511-f6596133d387\n57b181a4-0e8c-42d6-810a-cbd638fa11e0\nd3861765-d41c-411a-a14e-cdbe4e6000fb\naf6476f3-9fc7-49e7-8644-cd65c9589729\ne63d73f2-e556-4088-952d-b20a6c4350d7\n595d1a08-5a0c-4b4a-a926-705af707d455\n5bf52410-113a-4ffe-adb1-6368cf32cbad\nd6c7e354-ddf0-4671-b897-ee44db1a2552\nfc291f2a-1241-4f42-81bd-995eabde8668\n5d45f74c-ce1d-434f-ac1b-723d24ae0563\nfd52bff4-0620-4d07-9e51-b118bf049eb0\n5688df2e-47d2-461e-a2da-094f773bb949\n952b3deb-a473-4d1c-95ff-2731e044b4f1\n57544e3e-8435-49e6-a885-ae6b1e4ea28b\n3cb083ea-0ea2-4911-9022-9a38556e8ae9\na067bfd8-296b-4467-8457-ddf991d5d8c2\ne784bb75-d640-4283-be82-5c63708640fc\n0ac42a06-e6a6-4256-a8f7-fb810c0d7a58\n98d8c789-c8d0-484f-95be-fd42be1c0c78\n76ed3351-85a5-459b-ab2b-73677f6f10ce\n3d077c65-7ee3-4987-aec1-f04409e07e73\n1e52515d-15ac-4068-9e3f-63539a62f708\n27c89aea-9f11-4b77-9dc4-569219ed84a2\n86558fa9-0574-4904-b552-1511b65d5a46\n737bd52f-6fe6-47b1-aec3-776e0ce11244\n5104a0cb-e7cb-4448-964d-f8d0ed524daf\nbaf90a2d-9f3b-4cd0-b841-3ea9d1edffe6\n020c0830-d49e-44cd-ad89-872b282abd3b\n72bb603b-d901-44f4-99f9-9156bb6921fc\n8e396082-b4f1-4283-9c67-c50563b978c3\n48e40d1f-a3b0-4f73-a37e-2616827d0250\n99423d5f-073f-43f7-a9f2-dfdce813e570\n1de2186d-6d1c-42af-b109-34981c011c99\n173d4419-2d18-4e0d-a371-c340500e1f20\n01bd62ea-6748-461d-8cfe-090491cf3c6c\n2c5694b2-7a57-484b-8a6b-e44c55518d74\n3752f432-0ccb-41f7-ad31-9a6d9f0d2758\nb47aa25d-1170-4612-9dfd-5b14efe02fa0\n4f804a4c-8664-4327-be46-a41737b6cc07\n876a68be-b60b-43cc-a20c-00ef09fdf60a\n6538feda-8f54-4bb8-80c6-34e7b8bd7a04\n2072f2a7-0693-4a70-8fab-efcbf14f951d\nf2f60da6-7268-4bc4-b2df-8770842660d0\n6938c1dc-fb27-492b-95c0-9c9d2cc321ea\nf04f6274-585e-427d-9f18-aa0f966aca94\n6c4a1919-3a01-47c6-835a-df0781bcc121\n11eacc9e-e75f-498c-93ce-8759f7f2abf4\nf02670f0-d0ca-488a-8249-d12ecc6e50dc\n8a79540d-e867-4bc9-b3cc-0dcd7b236d03\n6424662d-64b2-484c-9bc1-67add075f1fc\n3d82f137-9d26-46e5-b8e3-c8ce60175b73\n1952de37-76a6-4b4f-99c7-f2157ac360a6\n9781dc34-7929-42b0-958e-564f272ff083\n43d840e3-bfbf-47fd-a64c-d6e7e7cbe37f\n8c290f7b-e1b8-4c03-9bbf-90a74080855a\nbce6a950-2726-4da9-8520-3d4f6c36a89e\n58844b93-82de-4d4a-a4b2-e9959fabf322\n3f2c3548-cab2-46ef-b0f2-a878458491e3\n272e879d-6be9-4fff-8127-8dc8d284f315\n07cb3e96-dd45-40f6-a0c9-dc5d7ae1d053\n44d1a0ca-ea1b-49b4-9e65-4e7094401f7f\n7cb1c4de-a8da-43d9-b3fc-989264815e96\n73ad09b6-5dfe-4fb5-ab90-d9bd66faaac5\n53996065-dd4e-4de6-825d-18ec39f15585\nad7f7daa-b7e9-46f9-b7a3-d70debe4a917\na8a52a3b-2422-4edb-838b-2db090c9d1a2\n59658cf7-7994-497e-93eb-e6d7c4fcac49\nf9193bef-a587-4ba8-af7b-f8af2787b720\nc3910ef9-6ead-4711-9a63-7acb09f27310\ne6f0fd96-8f2d-4e94-b25b-e6fedd051f16\n96e3699e-001d-4a8d-a9f6-18e0347ba63a\n107d072c-4b1e-457f-91e0-71b29ca40bab\n051b372f-ca43-4b98-93e4-65591b281da8\n030e80d6-7894-4366-b7ad-e0b40ebcbade\ne1a6c7aa-871f-4523-ad4b-50c05d0af680\nc51f2227-2d32-4135-9cff-0c89945ca710\nab226681-7273-4494-8721-85c2e275e7f5\nc7f10965-7193-4c34-ad6e-e0be51891a2e\n33a15d0d-57c1-452f-915f-7f099467f5ff\n1a4fe947-4947-4841-bdb9-85e104f3c630\n4c37601a-6bf7-47f9-b639-8cc15620547b\ncf5bf1fb-5be5-489e-b2c3-ff7e1767621d\n60dfcf71-d18c-4ae6-9f88-5b14ac27e472\ne05cd9cd-d89c-411c-b8cd-dc5abfdd15e6\n25d13a34-781d-4337-9f69-7fa92367e2d6\n462418f7-9935-48b8-bc4f-d7ec612c4207\n8769db1e-aa95-40bb-b8ca-2aa2a6249e94\n9067ca1a-e1b2-416b-a86a-d1d76cf1cea9\n84f1721b-f2cf-4aae-849d-fdc14f1506c6\n5ee3424d-1d42-4728-80e1-d27420e64204\n9729ad01-935b-46de-987e-65f32d9f4fcd\nc8e14e34-5b01-4b1b-8283-05074202bb77\ne1bf2f35-f65f-4ddd-960d-3aadfdcbc5d8\n86f44cb7-0ca0-4433-81c3-52004e475325\na431c485-34a7-48b8-9bab-a1d72d568b85\nbf8a00e6-443a-44eb-8e5a-04ae46d0e344\nb70a569a-3074-4859-a9df-33a08cd62cac\n751d5d8d-e91c-4cd8-81e8-76291b55773d\n96d43182-1713-416d-ad04-e01375f70855\n416ef82d-82b9-421c-9bbb-5af89d9f714a\n88682d64-3495-4b74-af8d-db60fce9c8cc\ncbad3e50-fa2d-40f4-b921-6f9e170d13ef\n36120773-88b8-48df-90ff-db05182b219d\n0dd2a5c2-9576-48fa-8f4d-156d20548b6d\n9bba41aa-6b3a-4d23-a011-5205cf8be3f7\n00caa977-a3b1-492c-a8b5-4425f5f7e46d\na1a775f5-4f6c-494a-b1c4-1426e4eac81d\na5257507-a127-4569-9e03-eec6bce9cf0a\ne5652577-eaa9-4d75-902b-da0ea3425934\nf5526d6d-047c-439a-9753-26f3d139d29f\neaf11ac1-ca05-4271-9acc-0f216f5d4e39\n976d15f9-bd5a-4447-a253-15e6dd6be6fb\n36a94fe7-9b33-4d20-bf8a-97853a5f3a0c\n7bbfa8a7-8915-4a25-856b-92c1c4cdf634\n4a623196-46e5-4907-899e-ebd25fb760b2\n114aa05d-e538-4a17-9a6e-78ac7a4b958d\n1432b04e-4cbc-472f-a2cb-ece3c08663ed\n95316446-c5a7-469f-af21-5bed6cb5d91f\nfd8b82c4-87e3-48b8-9dfb-38c5c729033b\nf801a4de-9208-4026-a906-bbe20cd16d75\n803dad81-49ba-4071-ba4f-f342b06fef88\n9421ee83-ee70-4e1f-ab61-5c222a0de791\n9bf9912c-5897-4345-a260-057fa2d8066d\nc53297e6-0e90-46d7-ad23-7771f37992e8\n46c22c60-7325-46a5-9f07-fb38f3744ada\n7c67ffc1-73b4-463b-8d76-aaa63f658a27\nd436221a-ade7-4f5b-9a48-8f46599e0956\nc05c0c01-19c4-4c83-804f-6dda428ab670\nd15927e5-8197-4531-b3e4-56775fc655da\nb3acc5ae-39de-4206-b882-9e0bd9028ff9\n6d880200-e2b6-433e-a0f8-7db6ef8673e5\n5f92125d-1264-4100-b97f-ba86aebcad2b\n4f5fc0f3-f594-4615-9d2b-41c82a34a196\n947e2e68-1619-41b2-85e3-c2627ee70b56\n68d85c76-5ab2-444f-9501-ccaa79fd9e62\nce833829-24bc-4b1f-bdc1-25a1b6e3f14d\n95a98d67-616b-4c47-869f-012680493277\ne86073cc-0ff3-4380-8e7e-632d1a8822bf\nca2d7ac5-111f-444c-9b95-eba1f49debc2\n4925ffb7-e204-4817-bd12-2fcf4d37b0fd\nd2c2abad-2921-43d7-a89c-bce0ee228900\n0fa84afe-2f19-4f03-9749-2874225af73e\n2305de8c-2acd-4e47-87ae-acb6207d4a2f\n659059a7-a23f-43b5-a8b1-05cb221c17a4\n1ad45c92-3ba6-4924-a08c-6c5dc03ae0c6\nc5d7556e-1ce8-42ff-8c07-092d5b1395b5\n649676ae-fe44-4d32-8956-a9745795188f\nbaa66226-cfb9-40ff-8b1f-1fdcaa3edef3\n79251640-6bd7-48ab-97ab-7bc72dc546ff\n5565e294-5487-4e99-afab-97198cfa541d\nfa312394-c70f-49e0-9baf-2edb27a1ec7e\nd9d03b72-46da-444c-858a-5709afdb543d\nea53cfa8-b947-4185-9ae8-2d81d9fad92a\nb33dfb23-e74f-4e68-b91c-a2b54b15aa84\n2f805946-3bce-40a9-9639-88f80cda5def\n50f85257-7939-48cd-88bb-556377fa27ee\nb4f70c15-82ce-4929-9c58-a217b9f2ef45\n241de9e5-a2fc-4542-b80b-3b50605437c1\n22ef6c49-5cff-4b5a-b4ee-4fe7da99f832\nb8946fd4-19d9-4717-84c2-a0d6a79d350c\na39bdbfc-efdd-45a2-afbf-d8dff83e66a1\n7661fbe5-e458-4434-a8f0-f6882279549b\n4496cb62-11ce-4277-aed6-d4694ad8b93a\n58388577-e95e-4dfa-b722-66e590a57214\n38072f59-9f01-4ac2-b693-07d8805e55fe\nfc16fd28-f124-457f-8e49-a35cf6e1d4b4\n55d8d2e0-769c-420d-8beb-91e50cacf4db\n2addec61-9f0c-477a-84c4-ad1228961afb\n2034ec83-8ea8-4056-9269-108a28d7fc1d\nb6626168-42f8-4b58-ba5f-8f9869ab0b65\ndc914883-a5e1-4ff0-9384-fdfed91be486\n4de2874f-7bde-4656-a799-ffd640dd4050\n19e2de52-2ffd-4e51-9366-2d61f25b1d4b\nd526c5ac-6f3c-43c4-9237-0ff33b11f400\nc4df1115-8b2b-474a-8606-288e8aa7c746\n06f7753b-0e6f-48e2-b8f5-d0b3a4dd0fda\nc76f7110-220a-4561-b1f9-553bf6c1847e\n0aa31e90-6140-4e39-8e99-685ea203c1d4\nbac24994-d8de-492f-b7cc-cf6488d1913b\n4e98156e-85a6-48e5-85bc-0698ebb2ef91\n1c5ad554-d9fb-4bcc-9336-14a5810fbb09\n7fd02ed4-bfc2-4f0f-8171-84d5bc3ecb92\n70e34242-1942-4fad-b1ff-6f9cda1d5296\n16b41aab-e3a2-4b73-8865-fecd8b36d78e\n297beb97-0607-4fb5-bada-1da25f8acae0\nc98044ae-3a36-4dcc-908e-655472b0e3b8\n7f2815ad-4805-40eb-9ca4-e96dbb1caec9\nfdda383d-986a-4547-a6d8-ac924efc8aa5\nf8b680c9-b4a2-4b1b-8bff-5cfc69d9e236\nf82efe87-9234-4db9-98b5-2ff868a8eb62\ne41b96fc-f91d-457c-901f-9f1e0215b883\ne8399145-cae4-46d9-ba6e-cbd267ec4498\n38c4cdc2-0e87-44db-9729-ad3dec862008\n4826d100-f236-498e-ba19-4b023e50c2ed\n4370aa57-446e-4a47-95aa-cd31da0b542e\nd66006ab-07f5-4d5a-919c-2a139fca8b02\na66e81de-b1df-4e9b-be06-2a85eba21da0\n0809805f-6464-4a5d-bfea-101e533bad50\nfa209665-b4ea-41ee-9a6f-b71ea0e3264b\nba0ee1f4-6714-4a7a-be52-9cb121d0984d\n8da2cb59-4dd8-4d83-9a72-90b418ddf74c\n6ae7fe94-098a-45d8-b396-161f7b65a4a4\nad6add36-c99b-4fa8-bed9-3b4b148e5747\n0db30180-bf2a-493a-9a5e-a9863dd24961\nb954bf68-c6b1-41b5-b300-b141ac476d9f\ndb234fe5-f525-4c7d-9eef-1d1d40d7cdda\n36c2aff7-23f6-427b-beec-f71923cb7d16\n6ba525ef-73ca-4773-bd1e-e7fa6a28a98e\nee71dbe7-6ae6-411a-b29e-b08a8629a1b3\ncd406532-ec0f-4d36-aded-1f4ed006e615\nc0763cca-5330-4745-8fa9-03462de87b5c\n1f7c468d-000d-4d68-838c-ef98d10fe190\n8b8aed19-3027-4611-976f-bb0cf812b8a8\naf16355f-6de9-4a08-827e-2ba987c060bd\nac0ba15f-99ae-4788-857d-428b16759108\n0cbaec2c-0587-4f57-a543-da37f576cb34\ne98b65ec-dfb4-4af1-8d76-53d8b17c20b0\nc53c792f-66b6-4c54-aeae-d63eda6ab854\nbee6aea7-ad90-40ab-9d8e-8f4e8e824ff8\n4c94c76c-e7b5-4796-b2cc-24ea8a17a9ae\nae007925-b43f-49db-85ce-2215f53a5dde\n6cb4bf23-c2c4-4051-94e1-1d506e7decd1\nfcbea460-e8f9-41d3-9992-3af0799b1857\n1b723eac-f5c1-4c5f-9d2c-341accce88c7\nd106f75d-faa1-4319-acd6-891c31e9bb35\nc0c7983c-43bf-4419-8704-041932d796e7\nf64af013-ad9e-489e-bf32-8b2fd86e6a08\n392b3318-f6a5-4c0c-b570-647d328e5c97\n8588396c-97ae-422f-80b1-f644bc65871a\n51a254be-d585-4f85-976d-9dea6c34339f\n88c7f0cd-d934-4686-a372-2081c6f3e4cd\n86b9b640-692e-4463-bf2c-1317e10e9820\nee16cb0d-2d83-4b96-a694-4af833282b1a\n6f1a029e-8e4d-4fcc-81f0-39ce610c8253\n26fb3cd9-d77d-48fb-ae73-bd8d72052ae4\n76154382-20bd-437c-9c40-48b0d5eb2497\n347c8b8b-20e6-426c-b2d6-0202af1918da\nfc2ab08e-e04c-4132-abcd-2518016e6547\n13188bf1-da58-449c-979f-3a93c0e98e82\n56983f29-18d9-423e-90e3-37c476d1195c\nefdf0755-c14d-4ed8-be83-efc63932bcc5\n1ae6ed06-2315-4466-a09c-24be9471be67\n89ce13ef-30b5-4311-9be0-14f1a5d63610\n6fbc579a-b14c-4a88-b1b9-ff99e163fdad\n2288c8d7-15ee-4cc3-8b05-483b7198d023\n77706086-0043-4b1c-809e-5fcaa9a4f3b2\nb38beeb4-5931-4f32-88d4-211c902a17e9\n26e38362-93cf-4738-abac-19d46aaddb00\n5b349645-9f06-4cb6-9268-02c565fd87da\n33b68cee-5fb3-4b36-9556-a3b3d775fea1\n891cec63-4ea3-4edb-bc54-07851cc313d4\n54e31f7b-1acc-4410-9620-ab9ab648d62f\n07e02dc5-338c-49ec-8c89-3b5a581f449f\n7f1b3ae8-4a6b-4ed1-aff7-77d164dec660\nf9f8c123-8661-499a-a8b8-b2d00164fb9a\nec76661b-8f52-4d0e-9c10-e557b97adfb2\n42634f2a-0d72-4489-a098-ac50b977f614\n184ab745-be67-4c9a-9582-3af080fc46f9\n7bad5618-df75-4c27-8153-c9a4f857e281\n5425cfc1-45cc-4567-81ef-f1dae689a474\n2c2e4f9c-a9ae-4e84-9fdf-1150fdfaea74\n21ae4222-924e-49ad-99d9-f9b4e609cc44\nba0d8041-4dd5-4e22-9652-08b677ecd287\ne2dc993b-b74f-4e47-98d8-0d0eb0d24e86\n19515585-4c18-447e-8553-a1bd65a25754\n32d408ce-5b2d-4b11-b52a-7799ad392dc0\n5c67d768-2b2b-4288-b0c7-5ee4111ebf9d\nb32c0970-76dd-46bd-a5d9-21954d6572d1\nef256820-2528-4f59-bb55-704ed8d40204\naea84eab-70dc-409c-879a-1ec0a72123b2\n957385ad-8c35-4bac-bae3-975b4f88cc04\n71083d16-cc74-47ed-98d8-95f6f4e3d68c\nc353e65e-53a7-499b-91fa-6b5dbc6f2ed0\n45e37fef-9fac-4855-a922-e02dc305d657\n1fa806ee-97df-467f-9ca7-75cda828ece7\n13d1f823-1170-443a-bcac-cf54f9b9ca98\nfb4aab7b-aaaa-471f-ae20-99995833942d\nc5a6f853-2f19-4306-b42c-e0c588e79b1f\na70c675e-1e2d-4d77-a40e-04fdcbbf4795\na574771f-3dcb-4118-83cd-78e12b6e5bb3\n6ffbad99-dd07-43a2-8d04-5702e744c821\nb61faacd-057e-4b49-a4bd-1943ac765d18\na7656e14-c3ed-4ae9-ad1d-3db3304b7839\n2c19fc62-6c52-4c30-87c0-af003f03f3d5\nab72f13b-d790-42a1-9abf-492def9ff64a\n8393ebbc-b8bb-43f0-8b74-a07c9f25a190\nfdf3b6bf-6067-42cd-8033-2a19ffe611c3\n8ac2551f-2ec2-468a-a635-bd2a9b4c3e00\n252c2480-913b-4a91-823a-c2e2d90eee0a\nbade0503-6da0-45bb-b24d-28a2914a1dca\nd4b06f44-1d96-4fe0-bf38-549928018d17\nead66110-f73a-46b6-91c1-01ecaa1fa3c8\n19f29275-9f33-4465-9a9a-5d97c4ee848d\nc3397957-1dc2-491e-9cd0-2ae044972bc4\n79f9d2cc-8dd1-42c8-9525-dea3ae5e6773\n954009da-4d1b-4721-b328-21f701992a64\n4496b135-4349-4269-8dc7-8ccb6be17eb2\nbb6e51db-2923-4742-80da-93f2d91b7269\nc1be5d24-ca8e-47c0-ad0d-70c36a8a9880\ne9104766-9cbd-4b37-8aff-4ce9dc22fd9e\nf0aa5637-28e4-4220-a368-cb5c3256f678\n26c9386b-0f00-4a1f-bb97-62baaab426f0\naa3d0b2d-1670-4366-81c9-2de577bda9aa\n58fe6120-2a7a-402e-8695-872c597ccf79\n93c05887-cd6c-4321-a87b-678611759758\ne6cbdd52-1429-4c07-8835-e424e6f4c7fe\n9bdf9170-5998-4e62-ab4f-c76a5d21d224\n4dbb5480-9de3-4325-b69a-b2eea6862861\nc2d22cbe-1c37-424a-8a4d-021020cad2c6\n556d2215-f1fb-458f-aee2-1ca8779c6c29\n39609696-a041-4c1e-b525-3207430cd4d1\ne2d1b59f-d055-4811-879d-00c0fdda327e\n1e7defb0-52e4-4f0d-9608-cd2d65fe80e8\n554d1925-00bb-4c84-b3dd-065607ff21ac\n96309cba-c183-47fd-b341-b1662513c552\nd3cb452a-dd50-462a-a3fd-be8f9f16d04f\n38ee8c6d-f941-4470-acda-b8a2d267c823\n82664ebb-ad0c-4ea0-81b8-b64124395fbc\nb771c3f7-09f8-4c39-a9a6-a12d8148ef5c\n3bb50a95-6014-4fa9-b935-197e4114187c\n2fbfef20-db12-4830-8ed0-ae15cff7893d\nd9e40fcd-2c4c-4109-9729-0f6599fd9c37\n14583064-1d53-4163-a15d-cafbebe75975\ndb31052e-50a9-412a-bfe9-7a8e7b286c14\n6f67ea30-e8ca-4b72-9d59-709bbce15c18\n0dc49a6c-5c34-4ff1-93af-c76607f8fbb8\nb0c2b7f9-1403-4bbd-98c0-82f283afede2\ne46dc693-265d-4447-954b-e4ad82bf6310\n5a5cc2a1-c208-4fc1-a3cb-fe29470e89ee\nda8bdc10-9011-452e-bd10-a587d9ccd844\ne0229521-41ce-486d-9d49-c793e646c9a4\n0e864114-98eb-479c-af8f-564580da41de\nc925c30a-41d9-4ea6-9125-fa4feac3dbce\ne399b7cb-2bf2-4109-93d6-a4cc32afe166\ne95515cf-4035-4498-a1d1-7bf5d59a6c88\nb2694a47-0022-4dc1-8b29-31bb62181a31\n02c71b50-20ed-4fa6-98fe-35805bb85405\nb4981457-9fbd-417e-b783-14bd59cb97c8\n2f9ad43f-059d-4ca2-b37c-6dd80ca1c4b7\n5c256dbb-d5db-4de9-87ef-08da384d043c\n91e09a89-360f-4d87-bae0-38f1898d3ff7\n952075d6-b55a-42ed-a465-ee9c0e479da3\n14b0e172-6dce-4991-a0af-5d07d3fabfd5\n5d3cc384-4215-4c4f-aa77-12b6dbdc87c4\n1057fbd3-3992-4d10-9a5a-e949092c478d\n6a4c2c6e-30b8-45db-8ccb-6f768c949ef4\n562c5c59-a03e-4485-8399-c2ec95888c23\nbcf17f66-5e40-4abd-94fc-a104ec1e5557\nf9056634-1f25-46e9-b3ed-82dbfc5b634a\n58827ff6-da15-43c2-ade3-b641803fa67d\n77c88602-ceb1-4bef-a075-e5cdc50c25b5\n92980406-58be-4392-b24c-9e9f6b49a226\n3f75d4c7-545b-47ca-be17-5ab05df05e65\n07ab4a80-479e-4435-b494-201262a017f4\na22905e1-6148-4fef-ab52-2275f645026a\n64f17dcd-45b3-4a01-9511-7cd9289e01ea\nf15f092c-ee89-499c-ab60-45d1732553cc\n390dad0d-4270-481d-a638-19571cdd2d8e\n4cdc0179-5cae-4bbe-8ac2-8a5ea33d7ca1\n507d574b-9a48-4c0a-9ed5-71ea2fb53ad1\n89fc823d-007b-410e-b507-4cd4151b189e\nf58a4f4f-ce5b-4ab6-a9fb-ffb84c1d4898\n0f495c17-6142-436d-9353-04317fc9d27a\nb4a88537-2d96-4e6d-89e0-5ea663f09d67\n3adfb206-6be9-4cf2-a1d1-ff2e9de6ae09\n24f07961-de53-400b-b26c-964c09b3544e\n65f73b42-c91d-4c01-b3b5-6b794158d178\n99347c37-b2d1-4488-ab80-87f6af418c3b\nc72247bb-ebaf-442b-8b08-3a33e0a193a2\nfe5721bd-d35b-4b7a-b0b9-a9b6b92a06e9\n09c2e8ec-a68f-4565-a532-ea257870d811\n4270234b-371d-4c92-a60f-a9026a35947f\n9968ec32-f26c-4174-b553-72720feba2f7\n3161286a-d338-4728-98b5-c6ec93ee33f2\n305123c3-d6bf-42cd-aadb-e5349af2e4d1\n636e2948-098e-46b1-893e-ee858f4f681a\ncb7c36fd-f20a-48ee-81a4-a62301e375d6\n5a54b0a1-d156-42db-bcda-d16f83e4ebae\nd53068ff-1bd5-4fa3-923b-a69c1e77473f\nee786f07-70d5-4c5e-bd66-7d9956309231\n3339a8c9-9e8f-467d-bc5c-273e83a422f8\nf7ce04ad-c2d6-43ca-aa47-40a8c986b3a8\ndaeb18f9-bf75-48df-be8f-c494241eb759\n6797e80c-5551-48b0-8258-fe85bf9b5cb7\n563dd5cc-1472-453e-9065-ba959ba50bbd\na5ea4030-77c8-4eb2-ba30-e4a1dd6a9741\nddca40d1-8d20-495e-934a-dbe3aa9b4bc4\n917b1129-e35a-403e-9ef7-a1ddf76602dc\n8589b2ba-f96f-4f4e-b1d1-663feed02fd1\n1f4f3d1f-868c-4047-b2e5-2b9a6d2d85cd\n5b51b81d-62d1-48b6-a0e3-a790256220fd\n0874e866-3843-4bdb-8b1f-19f823233cf8\n9679d565-f571-4431-91c4-7615016d66ce\nf79cfe5e-d710-4659-a375-4cfe9f5b7a1d\n2a5b8485-7f24-4584-825f-ec3fc853225c\n3f0545a7-6ac7-40de-8439-77917a52aa8b\nf1142f23-a7a7-44b7-9935-28333064a8f3\ned1a95c2-3856-49c9-9499-9c483da6c85e\n4534e339-108d-40a8-aafe-b8f157204650\n678e79dc-d009-41dc-9a29-2a7542a2fec6\n04e26bb0-b5bb-4549-a774-59258af59360\n8adb7d40-07be-4321-b9a3-18edaa79aeb4\nc09c4f95-e428-421b-b0a7-b74ca3b24f8f\n9705c224-253d-457a-840d-e2d37374d1c3\n8443c388-647f-4091-9ca1-d42dfeafd50a\n54213539-030d-412e-987a-886875e2ac64\n4c5ac8a5-a1c7-4c0f-abe1-9bfd982b7ec5\ndd15d204-3c02-4a6d-b390-ecd964e3ddd8\n125e7cf1-515d-475b-9276-61905969e6a7\n8de3b07a-b644-493a-b0f2-aa7ea1951975\nf9315762-9de8-4e44-ac91-3faaeed9c409\n347ad6ff-791b-48a6-8d10-d1f54c3121ea\n1ce8d2af-61df-43a5-8a53-c5b1633f2fba\n9420f6eb-69a1-48cd-bcd5-31dd0356e5cf\n8f34ba5d-3bcd-4ff5-bae4-1bd44e1e8564\n687d78dd-66fc-4298-8eb0-77cc83566246\n78fdb60b-d5d3-4c52-845a-643d284023bd\n3817b7aa-e6bc-4646-b61d-591e105bd671\n40b9933f-9e84-4360-8ed4-c60e16bba230\n6fc5bb9d-a0ff-4b26-af79-6d76b13301b6\n5f532efa-3d5d-48f8-a76d-dc8d6435087f\n2e277af9-b48b-478b-ab36-9fffdd871377\n36db1b49-29d6-42bb-b0e7-88382a393b42\nf2ff0bec-8318-42fb-87e8-fde855a142a4\n568b9847-71e6-4f46-b704-4275615472af\n394eb350-a811-4fc5-a1ca-38b59e381bfb\nb2f99cf9-b72b-4345-9b58-e5aead76233a\nf2c7447e-0b12-4999-a8d4-363a9b2c55ae\n8043ff10-fd10-4771-8c58-7712d2c7a0f6\ne6be44a1-2a06-486b-afd3-21e04f91dffb\nb0de7900-b85e-4a71-ac37-66090aaad512\nb5fd156b-f70b-45e5-aff0-83fa6ddd0ce5\nb29a2550-d5a4-43f9-bcec-a90291d97f62\nac06fa6a-290c-4fe9-a470-fe213ec65506\n8367ce7d-b2ea-4caf-a3ff-a016b60390b8\n596aa663-74f8-4449-923b-f085e468fe4b\n699188fc-9a3f-4390-8f76-86dd4ab10f69\na94fc916-c3f6-4e2a-9f81-1e6b323efbf7\nad281ff7-8b2f-4651-9fcc-23cf8c1f5285\ned503dd4-c089-4117-bdc7-211d60079b14\nf29b96ca-5abb-4276-9292-34e01cce5bd6\ne27fff97-cf6e-42be-a2e0-509448acc7ae\n1e11cdd1-0f5c-4efd-b9f6-02d77e9c47a9\n0ae5959d-1193-4de0-8431-8722b1a8366c\n9c485c36-fd89-49a4-a99a-43195784cdca\nb2379b0a-1afc-4334-97fd-838d63ca8a05\n9c512967-3874-4d25-bafd-859f73c27c05\n44773d86-3c47-426c-b068-e122c8bd2309\ndc4e6de9-0529-43e2-a0f6-31917a22b7cc\n16ed3a1e-4b45-4763-af3c-f6a26a938ddd\n32a341ad-fabe-4a22-ac32-f0b3aadae1dc\n43276e7a-131d-411f-b024-94e00c4c5a02\nad08308e-5157-44bf-b3cd-6a11684e43b7\n8cd96a5d-31c0-49e6-ab9b-07953fbb4e45\na9566846-a8da-44d8-a2df-0b4d09db7c48\nb5739d8e-d77f-4024-859c-bd83ca517e42\nc76f696f-8365-4b99-b3f9-b18bb2f689c6\n2b929c61-6287-4784-a365-6b34deb2ecbe\n6a053a03-ca8c-453f-8d82-f031b426868c\n073cd26a-264d-4b40-9ae3-5d171d9fd064\nb1de97f0-91b1-411f-9433-1ca8f213ef91\neb288f93-9e2b-499f-9636-4d3b54321b89\nd948d486-1d56-4b39-a1f9-121ea21e3f8f\n3f58962d-541b-46ba-8d5a-2391fd3b63f9\n7e9d2326-2ed3-4ef8-8066-d2336f6e7a60\n2951c432-2908-4b09-a5e1-6e103083e77f\n5a864559-79a4-4e7e-ad2e-157cbfce267b\n49365454-2f9a-4acb-80e5-8c3009ed4e59\n18ce65f2-05f7-4c5c-a6c0-bc6676df8e55\n190c0571-867d-4665-939f-06dbe1ad68e4\n4b867d99-b06d-4b58-b8e9-7faefe58359d\n0b7aba2a-c440-48c2-ac78-6577b20cee4a\n2d0bada1-e98c-4c6c-868b-2002918ec5b9\n972547a3-2135-4808-983f-eba3654d8e21\n639d29a8-8244-4844-8fb8-f2b1ccbca895\nc05d9af8-2d20-416f-9d57-d0723ab74af3\n7cf312a2-bd7c-4b66-8af6-039eeae0acaf\nfdfd56ac-7e3e-4a32-8c1a-8301929ef2e5\naf00ad94-e28d-48fe-87a9-f61254d86abf\n03eeccc8-49d7-48da-9479-9e61808dc769\n76776096-40c9-4239-9d80-1b4d2d274f2d\n7cfdc7dd-a398-4ec8-997e-c4d095b955a3\n791813cd-b467-439d-a4d6-e346322af2fc\nc6f09c90-42e1-4d7e-96d6-667d44ed0ad0\n79e3ef95-14a0-448f-bd73-1c9feec229c6\n3bdcf8f0-eeab-43c2-99b8-d0442f12d30f\n9d56db2f-0bf1-4bf8-9ed0-288c87e35169\n32fbe3d6-05f7-4026-93d2-158365d53ef7\na311f752-a355-4d7d-aa0c-a161bfee476a\nb82d13f7-7976-45b6-8fe4-d3f8ff051572\na1a14e07-cb66-4ff9-929b-b716cc4f28cc\n635f90f3-944a-48e5-8727-08589803d737\nf9bec1ba-e62f-4b9f-97be-2077a77cbb1d\n18133591-1927-42f6-91dc-50c00e4920f6\n2eef6ecf-3668-407a-b199-9ea1e7cb1c09\ned1a01c8-8116-4224-adce-04d9cfc1b794\n39ad3b50-a1a2-464e-9719-e70705199cab\na55f9e7d-9fc4-4e83-a5dd-29b02f73b52d\nd5c162f0-5dc9-45c2-a28c-c9db36348ecd\n7c052fd9-5316-4f5b-ab70-faa875bbfe86\nc7f39ba8-05cd-4b66-be56-d8f99cfd6f9f\n12073531-8fce-497a-a7b7-b710bc5fb3bb\n6851fe4a-6357-4966-a919-f7aff8607ffe\n1e7357ae-7284-40c3-8159-bf57b636d19c\n4878a600-7927-40ca-8ded-2dec2c898a88\n14573053-f982-42a8-9702-93d8658eb9d7\n08ebaeef-72a6-4d0b-8ee5-20359df4eb84\n5c39e2cd-3dfa-46f9-a488-83c72a91c621\nf541b10b-e71d-4e61-9589-b33d1a5bce59\n4ff80d79-0c5d-4cea-9002-cf8c64133983\nbb782067-cda2-4ccc-a2fb-2ef839be6488\n6f8482a5-db15-4cff-baf5-e5c4351c501d\nd7b3a516-7d80-4592-be3e-31daddc2fc8e\n95868028-cb6f-43b2-8fd4-641aa48b6ff9\na4c47fda-13c9-46d9-aee1-59aac0cb1bd3\n7467b74a-10e8-41ea-a70d-3621d391ea52\ne719e134-59d9-4ed8-ab57-6a347ec5799c\na7c339eb-4616-4bcc-bd65-4fd1f69e206b\n68217e53-9963-41e7-81e1-6d2c03853a14\ncd24e1f1-0cc6-4c99-ad5d-3b085d3db6a5\n16f7316f-1adf-4642-9430-0c4f10fc6bf8\n600f2feb-ce27-4d1d-a10b-0f041a81ec8e\n31847b4d-3b50-4b1b-b73d-0a48afc2a281\n7150c7f0-2b3b-4e90-8a37-a6dbf2cd9054\n96f31ccb-b557-43f0-b2f9-e3ce62be2e3a\na1607276-817d-4971-89b3-277c8abdde6b\nd7741dc1-3261-4082-8afc-42f4974b4928\n0fab8d9b-a05f-4d62-a4f4-9dac5ee43fe8\n8bb94e9a-8050-40e5-9878-df4aa0b9a660\nfa4e25be-fa60-461f-a872-00495334bc5f\n9ff4a84f-68b5-4078-a89a-bdb5e357421e\n288ca8b8-7b99-448e-b64c-eda01f32968d\na5c5a12f-ab98-4d80-a79e-f9c29390c11b\ncfdd5e72-2e27-4948-9ba1-08797f1cc078\ne08fb146-c3ba-44bc-9cea-d33735567363\na569b62d-795c-49e7-a675-b630aaaa0511\nd839782c-fd71-45ed-b27b-ecfa35ac8f84\n3e7b9b18-f514-4ce2-9f33-b0c191e107fb\nd2b1b666-9126-4550-8b81-5287e53ce5aa\n92ce7162-6501-4b4e-995c-47a72204ed8b\n91674606-2493-42b9-b042-3a84306b3a1d\n8dfd067c-3964-483c-b59b-347b4b9956e2\n0a9277d7-6d4c-44d3-a81c-2328f13a47d5\n45f87a78-343f-406d-8d10-f5cf99fdf6c2\neae75cb7-7bcd-4ab7-ace9-d95efa12fdb7\nd2a52ff8-b356-4963-a751-8df5f5c3ee56\n87f96b9c-8d96-484c-b80a-7dfb18d0df03\n4e2d64b1-6360-411f-8c43-28bf49cd28cf\nd2f11ca2-4c51-4575-90ac-51b965d69659\n1ec8ee35-b5a2-423c-b275-4efa6230e72a\n19e9b016-7d1a-4375-bb1e-70bf35053330\n6f68d3fe-a5a7-4f5b-93b1-36cc266fec44\ncaef35d3-1300-4f65-baac-7321b2fee34b\nb26dcb9f-bebf-43c8-999c-f3887c4136f4\n12084109-56dd-4152-9044-c3dc8204090b\ncd82aec6-5b78-449f-8443-8924ff2a426b\n036d31b0-16a7-4dfc-90f4-e093243ac733\n5bdb3115-01a3-4d29-bdd2-0fdbe4461a19\n7493d36e-d30c-4bde-9d87-8c0bba1b413f\nc1119b27-4872-4725-b356-0e5dfbafcb4f\n63de9035-4da9-431f-9756-5aad3776f405\n4e45f46e-eba3-4239-ae9e-4d96d981cf22\n9a79dd0f-7b99-4866-8d57-3cddec60a833\ne270265a-30b2-452c-951f-42a68d2145ed\n955689f0-99b2-429d-a090-d64fa4ad2eb6\n4a6e0a18-e26f-4484-921a-9730635f88c8\n6ef13547-7382-4e17-977f-dac23462cfbd\n70da4654-b960-4dd6-abf0-5ae04e95bc55\nd1858daf-ce70-404e-89ec-862f5b3ad4df\n31d45c31-0004-4849-8ae8-62e3cf706709\n0681c4c4-db22-49a9-9bda-b95b34b740f4\nf0dfe54d-e4e8-4348-8670-c190148b9f49\n544e495a-1518-4bc2-a17d-92d41982ff83\nff7b8b0c-aac0-4803-be07-2b682772cfc5\n259fd322-96a6-4f2e-b3df-3ed61d37419f\nc3ff096e-ca0f-4bed-bcf8-96e9529a2bee\n34851411-3dc4-48bc-b583-d980724f6555\n25779ad3-5cc2-4a70-bd88-eecd9f0276d5\n6976926c-8d3f-45b8-8d50-c9ac8261c63d\n625fd98a-1d60-4e96-b117-c24518df8f69\n40f00781-873d-4b81-9824-0a0a8bb13e80\n7dcee86f-9754-46cb-adc5-850acdc15fc2\n312f0502-4b35-4415-b86f-13e3105ccaaf\n53cde040-e377-464c-b561-b80dc3a9d57a\ne341fdb9-1f6e-4bc3-bdde-a278fc9d7029\n55ee8eae-4c48-4b78-a463-1979334bb72f\ne6111bea-be89-4276-a5fb-3a214c0d5486\n0bc38e0a-28aa-4206-9cd8-830d365e7d1c\n442be796-e424-4a7d-bea0-2962cc6e30d3\nd2d75a95-f1a6-47c5-8a5c-d5971cc7eec4\n823ac220-8c6a-4183-8301-01d9615013a0\n80c50b0d-4ce1-4fc6-abf9-f4b2149743e6\n694e5ef4-6313-4154-8d5f-62c6b6037d27\n604cca3c-23b5-41a9-a258-49a40124acff\nf6aae15a-4d98-4fb0-b0c4-927fb4e3fd9a\n76e06b9e-168b-45d1-aa5f-958daea20c64\nd06e2c98-faf6-4a0c-af53-f30473f3711b\n05d891af-f65d-4529-99ff-aac0d74cccf3\ndd84309f-c593-48e4-92d4-fbdb608649af\n6b00f804-b5fd-40a3-a089-dd3605683bc5\na58645d5-0677-42c8-9066-17225d213d1a\n5ea59d95-1f30-48cc-a104-ca0a0e02ae2c\ncadd506e-b843-4659-8d8f-1d6cf1f17354\nfb068307-c16e-4645-b787-271c726cea6c\nddad815e-e5c0-45de-8391-8b8ed34f324b\ne43f763a-f7e3-4ade-be85-b25b4a5524c4\nba25c1a6-a67e-46d2-b073-98139ed74406\n91bc1eba-68c9-4575-abc9-738e6a6e0ee4\n956d690a-a6c2-421b-936b-4bca0252a05b\n4caa0a8d-07df-43f3-91cd-ba0428d3b75f\nfd84f1a1-1b0c-4562-8d4e-c953f82d65f3\n31e5602c-27ea-48a9-bf2b-ec4a3fdb43fc\n5aeff2d2-0470-4740-b197-58105b942d94\n9d4c9f31-7b3e-4740-9464-38f214d2848a\n43494f33-d10c-42f2-924c-6ac66b0266e5\n931f8d6a-1431-4434-af55-a8826df35a45\ne7848f3b-e180-48a1-882f-0dff296b1be2\n00e9b346-6a05-4e96-8ae3-4c71855b05b4\na70398fc-fdc6-442a-a2f5-52b15235b731\n0d49f54a-6e27-4d3b-be0b-e53643720317\n0658a623-f30c-4a80-98c8-9e83b148c60b\ne0c08720-3f95-4493-bb46-a1bc74989cbe\n38b06111-5845-4ace-bd2e-97af0a797a99\nac7e95ac-cd75-4c75-9823-88105464d677\nff309f17-2736-4b94-9d3e-3aaf624c870a\nd5a96c42-9b43-487b-af62-15ff32c80a0d\n42ec73ac-d3cf-42d7-9ad0-41273b277b9f\nc628dfcb-1b23-4712-927e-0416344f29df\ne29d556c-0e60-4db3-a555-a696956fd448\n91c72ac2-6820-49d6-82a1-08d667b1ec8e\nf2068e88-be3f-4e72-b934-1d3c0547f95c\nbdf159bc-6523-4bd8-af8e-a9fe52d1f430\n6215d77c-ca65-4339-9945-979b918b3bf7\nfd17b1fb-faa0-45a2-838a-8bfab9ce9bd8\ne00b797f-fde2-41d3-8647-9de0d967bdf9\n201c44ee-2d59-4167-a4cb-36f9ddbdf302\n2c29b581-ca74-4d70-8565-57751799eb61\n1d468862-8b1c-44d0-b899-ee856a26b491\n800dbf2f-6582-4723-a568-cecd21512db6\nadc54c8e-bbb7-4718-9ae8-dacdc88f4a7e\na37e70a2-67fe-41df-b261-939ffbd5842e\nde31a63f-1745-43a1-b9d2-31c07882e864\n490448f9-6864-4266-ae6e-78bd772b62f2\n298b514c-6e6b-44b6-ac9b-34a6856f4c6b\n1f9caa54-7d53-47b1-ac53-dbaac7254d23\n28f8c502-9cfb-4164-abcb-7abaf1865a33\n3cb21b18-4510-4406-8a92-2b6920a94fad\n373b5cdb-5811-482d-b790-2d82e7c16e02\ne4b385b3-e5db-4aca-9798-171bacac026a\n5e263b2e-6a03-4320-8eec-36da1dffb24f\nb7aaf0d1-e30c-4270-930b-f4a24b9aaf7b\nc14e656d-b577-4beb-bdd5-0d52a4533ca4\n5563bf77-373b-40f0-a431-7a8841c1dbb6\n8d513d1b-6577-4283-af04-ac6459c6a3c4\n67b4f6eb-8428-44ad-98cd-2b53294053c7\n678ffc30-d6f7-4c31-8632-60c860d3bed6\n61a737a4-e310-45cf-948b-28f103347d1c\nd7d99805-e3fd-4161-a482-0bc3cd4e848a\n147865ff-6b18-435d-83a4-fc45104838ad\n6bc9498e-1927-42bd-b345-9dfc9ff0c8c3\n787bd5ab-97c0-4627-9de6-395d7dc6a37d\n53465b12-cc5f-4af3-aae4-9ad496fc4b56\ncd6b531c-d7a0-43a6-bf7e-1db1d35b7850\n739e8fc2-8a16-4958-9be4-3ed3a3586ff6\nffa21df0-9607-49aa-ae27-b74d3eb2a441\n11dbaf93-61e3-402b-8847-c2d1d88280f2\neb369760-61c7-473c-b020-514a02d1f650\n4a88945d-ad15-497a-bc41-df1756f60d67\ne7f02ea2-bb88-4aba-822e-e3b32d62cdab\na35298fb-0d0f-4a6c-bd74-fced4cc92e11\n4f8fce65-73eb-4a6f-8d50-902b26feef55\n41d9987f-03a7-48cb-b154-323dd76de29e\ne1a1981c-8f34-418f-b3cb-d43a985cc971\neb47adce-ffe1-462f-962a-940ca36608f5\n51ab7771-1bf4-4c58-bfaf-e01224381193\nc2eac556-69a2-4631-a574-3ca4261b9ae1\nfd2bb684-1c4e-422b-ba25-22010a5a6116\n3433e0e0-2b33-450a-be3a-d50b3ff97569\nb423d2f8-ea3c-486f-ae45-ad506120499b\n528d08b7-d205-4d5d-bd9f-be950ebccef2\n147773a4-0e22-47c1-b500-8b4b0021fb76\nfb9b4f60-a970-4666-85ad-2358be808024\na146a447-2153-4f61-b7b0-0e1352ef7c69\n1df78876-c2f6-46db-bd8d-028d09dfea55\n57472ba1-e3dd-408e-b46a-613a251bd468\na33a10c9-9f79-4f32-b8db-11a88375a8a3\ne67256fe-94bc-468c-990e-a93568d6564c\nc6880bee-8602-4424-8290-c271508cbc1c\n0c2db3d6-6a26-4c5e-b357-1ebfac358a70\n5ff559f5-d316-403c-87d2-71eb5c731aee\n5157ac79-929a-4ff1-a4ff-4bda57d702c6\n2fc035d0-a60d-407d-8ad4-d1d2e9b67091\nc1518462-442f-4926-8591-652cf87a3a0e\n89caf4c7-41d8-4daa-aef1-72aa45851ba9\n2e233535-3a10-4ab0-9ded-0a1ee748e589\n4bd24b8f-b1ba-4cd6-a12a-68966d651336\naebdfe66-9c57-4da3-86d8-e37f6eff1d17\nd38e70be-8707-415d-be2b-6dac6ca70de8\n3029db46-b0e1-4a33-b26a-fa6f0df874d6\nf51c40ca-2b48-4c8f-97c9-46ea668129f8\nbb2cca5e-c8de-461c-8cc7-7f47fe3782a3\n39b923c7-cb21-4ccd-8961-10f7a9450bae\nc2d10d89-4099-4bbb-8122-d58a546fbf66\n7abc5516-b61c-4ff6-8715-dc43d706d6cb\nf6f3b46a-28f5-4098-9e46-e9f7a21dfbb4\nd51c47cc-d4e6-473f-9f33-b9835c9bbcb5\n528b1bae-41ea-41d3-8166-ad9be2b5d6bd\n3d370288-69fc-48ce-ba76-aa1dd1caaba1\nf3cb65ea-5dc3-458d-8993-438a188e56eb\n03d4aa4e-9a2d-49ca-8eb7-f047b9e555d8\n251e4e04-f1a4-4de4-9fe8-1f46acd597e0\nb13c2ffb-9232-4479-82dc-5da2810eed7e\n6e53da19-b255-48df-89b7-7d55a057bd75\nab4cb9e9-f4e8-4e4e-b7b8-69e535e62839\n9f430e22-cf07-400c-a387-4fa0961efc80\n39ad702a-0785-4583-8fa8-2a6a3b2c4ab0\nbcbca507-581c-47e0-88fc-3a9b508092c8\n92f92d8c-5f21-4ba2-a512-078c05c09d00\n58a89905-170d-450a-b822-c9dab3e24c0c\n77db4b02-894d-410f-9c2e-0fab4467a7d7\nd9403e44-d64f-4bc0-ba5e-1b805d327549\n3bde743b-bc40-44d9-9712-1e014d07366d\nc08870f3-c220-4a38-8ea4-e5c8cafa83c4\n853c75b5-31ea-48c5-9dcf-defa57031ad8\n87e35bc2-6da0-4d0d-958b-e11539417d44\n23a687f7-8fff-42ed-89aa-1deffff89343\nacf70d72-000b-4c87-b64b-63efef495bcd\n59d4b65d-7050-4d0e-99b4-30b3dffda031\n677a1ab7-f271-4a62-9b81-0c96065d8f65\na7b8218e-e1ea-40d4-ac54-ebb29cc7c640\n58c4bc8e-5107-4612-a9db-df76b26d9b7a\nfa425ad3-92d1-49c1-b8b4-2cf80c277481\n85c0befe-8733-4441-a151-4898ccfc8d5f\ne29ea48c-12e8-45da-8cac-cb7acf6a7c1e\n7397d879-d749-4805-93ef-01c449321bc7\n68d2a444-40ce-485f-ad05-c0956697bf09\n866d2f7b-5b11-452d-a847-bfc6cb41c91a\n1a40bc7e-e663-473c-9190-7ae451cdf71c\n01b8b8fb-adc9-4c18-a021-ab1ca6f58222\na631a731-2f90-4750-8bc8-bf573c4f99b4\n1a624133-a5b8-45f0-9402-b27bbfc5c412\n5105d3b8-1856-42af-968e-a1dcaface628\n58e6edeb-a9e5-4435-a1e4-1453109b2933\n4fc693d4-c995-4ebf-a847-19a1f5afbe08\na53f321e-e9cd-45f3-aec6-ceddc8d569ac\n2fab4de8-076b-4ea7-b3b4-92a26701db31\nbee4e0bf-4438-47e9-ab03-74fbc10ee9b6\n2cdebb97-e4fd-44b8-9ae3-23bcac24c996\nbc749599-d7e2-42e0-9c01-b99a3c2c9be9\n67a4b0ca-0215-4bfc-9881-17e2bcb4d095\n658d80c6-9039-4bb7-9831-5018e949d726\nca8aad91-b0b1-4546-8d90-63812ce6d194\n1be4650f-011f-4f73-921e-b946240bec4d\nb0a4ce0d-4de7-4252-b714-c9d0c3809376\n4c0f0ec1-4519-43ec-897e-5cac954af778\ndc66920a-f109-49fc-953e-901f11865f85\n5e1ff881-9c81-41b9-b1a5-1d482b2dda12\n1eedd190-4989-401e-bb91-82add0da1e4b\n857771cf-189e-4138-b103-1e3f40dbc58e\ndb73e56f-4160-4b01-bc91-08c1755cb3f5\nc111936e-3e9e-4f58-9123-b69e8c4b7c7e\n4d89519d-dadc-48b5-899a-f332615e20d8\n48d4ec59-7fa6-44f0-8156-6e4116c24f09\n132db860-c85b-40b5-b8c8-f2f7ba9ac853\n7286a396-4504-4652-a1b9-8fa09f136e98\n3e7121fc-2832-4f16-ba6a-4ffb5fe375cc\n75def150-ef81-4082-ada1-315b159c218e\ne13902f8-1133-42ae-9fbf-1798efd14b1d\n83de81ce-8518-4388-8ff0-17516711eaa0\n70f5b8ea-1d0e-43c7-8db9-bd1da869180a\n4d1e48e0-72a0-4593-b9ac-a0e7506f63ee\n70c543a7-587e-4e16-aa41-d730aa99b27a\n71ed5097-87a0-4bbd-9501-635b7bf5a8b1\nd85888bf-6147-4654-91cc-7acc29e23e3d\nf4c0dac7-ff07-4b07-aa01-7ed5e66e5cd8\n1bae6296-445d-42fb-bd83-28f1d8b900f9\n4a4d332a-b8b0-4b59-89f1-0fc03e317e12\ndc1dbb4f-47d2-4cfb-9dbf-2331ffdd219c\n73a80eee-c2b0-44c3-a6a0-d76f5df72a18\nb7a23a66-4304-4f47-a40f-c78f53ce60c2\n0023b084-9833-4253-9f4c-98fa17880f68\ne68420cb-8fd2-4b10-8478-6029c7682955\nf90d8d58-893b-46ad-9a98-aac2d1d0f23e\nd013bdda-c781-4df1-946d-d791df0fcc2d\nd60f6703-1bd0-421c-8417-1f0d2ab7b28f\n79efea69-de05-4a98-8848-444d8c43e535\nd71d07c4-cfd1-4ac3-9136-32d5e104ffb2\nabd5e03f-c6a7-46cd-95e9-74f0b93ea8d0\ncc5b543f-6083-4c50-818e-68b36748b4b3\na1440f57-1344-472b-9ea8-847a65858d35\ne11396d8-c1ba-44f3-81b0-74c8cb672056\ndedd8913-16fc-454a-bf32-25abb5e9bf6d\n77919eb9-1d1f-4f24-a18a-ac45218cfa07\n44dea646-f0ae-4bbd-93f4-26a8e6d719fc\n577df81e-9854-4f9a-a4d8-ed30d2be3e21\n89ab1da4-22d8-4e92-bbed-ccf5f2ed6b30\nb5cb9bb8-ee78-4eba-9dcd-acd94411f20f\n290dc06e-2a21-4936-9bc9-7d7e79ee23ff\nb28393b3-ee9e-4b10-9fdc-938525e67059\n48dfc1d6-2701-49d5-9801-3f2d807219dc\nd4065d28-f7b4-4a3a-b289-803546ec4bd5\n6f43e9d4-330a-4735-bd2e-9f0aa194cc1f\n534152b4-17d3-4540-999b-a32d894ee686\n91d4fefc-bed3-4008-93ef-7597f0e214f8\nfbb18fe6-f316-4be4-9665-d86c1e13df45\n82387326-7d08-4c27-b978-f23e8a17af09\n7e181c8b-bcff-42a8-8530-8838e917319b\nd51a757b-0534-43a9-b876-6dbd6eb95bff\n8d240664-01e1-47c7-9b9f-2ddde5b7bc16\ne55086cb-fcda-4218-8247-4ae5d7535959\n5c73d9d6-76c5-4ae7-baa0-804aa6defbdb\ne0134f67-e680-44fe-95f2-d4a94f8c84f8\n288599fb-e85d-4113-a3c2-61d727d52a0c\n7c006518-1d9c-4434-93ba-4bfa84276266\n3fcd1a2a-934d-40be-97e3-09ba3508df52\nbb574ca6-318b-489c-9658-341bd66e33a2\n51bd8e33-1197-495f-8f88-caa22a41203e\n4e1f6400-35d0-498a-81ab-bb10c8c9095c\n3e5a81d9-9edf-4faa-be28-f95b89d7916a\nb684ee67-09ef-4a00-af14-7015e59eae53\n33233623-2425-4fe6-89a9-148cade221df\n38d1315a-8fe0-4c97-903f-3659eace9cea\n41af34ee-b155-491a-89d8-f2004df64ae3\nc1a5463c-f905-4840-9d12-cf688a539937\n8df8b3f6-d8c0-4b52-86af-d57a7230602c\n56dec043-a4f0-4acd-a007-3de6ab8cf26f\n0bcbc838-a503-44f1-b055-a84df5cc4a74\n9c322f8e-438e-426c-aa73-7704987decc6\n78056f48-1dd9-49d8-b739-2de7d4f9f350\n21307f8e-e6f0-4c55-9335-47d752c16397\n95c5d2f5-5f1a-4fa9-b892-cefc2fcd3667\n19336abb-4e0f-414f-b5a5-2341f28b4d6e\ncf499fdb-b832-4ae0-a705-835b0edca045\n99a1a963-1645-4ce4-8607-ce3d75e8f7f1\na674f3c6-7bec-4975-bc74-5b0b9f7ebf92\n4c0ffab3-519f-4182-bdae-559acb40198f\n361f1a20-078d-4fb9-a689-3bed85d43760\n6b75bded-8252-4fdb-b4ed-2f3c62ce6b0b\ndd58e87c-1d1e-4dfa-9669-dd77526b2a34\n2479db45-7027-484e-8a3f-6c288614a83c\n164ab8ee-8799-4ad9-b9b0-9e0479c5f2d8\n8039913c-3fcb-4186-a62c-02b589afe4c8\nb710a76f-5909-4a97-8f04-1b99406b9fad\n4da8377b-a8ec-4986-881d-d43db1bcf90a\nd0a863a7-cb7b-42fb-9248-1a240e412b4f\n434ecf91-a8c1-4c0e-8d57-ebc7d6b17ca2\n5bb0a3dd-b53f-4efb-965a-2d9e47ffb45a\nefae2f1a-f218-4fcb-8118-e667eabfac51\n8089df77-3089-4af7-a9a9-b01169fa2b22\nd6869eeb-850c-40d1-8692-543f35db9d33\nfc8264aa-2f7e-4a92-88b5-ecb415393372\na4b5fed8-b19d-4c11-b993-7ca90c63747c\ndffb3511-05bf-4a98-81ea-12de2cdf754f\n0e62dc24-6957-49dc-b268-12082ec2d7ea\n2f515283-8f5d-4f83-873b-8bd3353f7633\n7305feac-7253-47f1-aeaa-741c93a35783\n73094068-0913-49b4-a1a1-2914046d60de\nfb540d32-d4be-4c52-80ec-934f5f40fe20\nd67f63c4-6b42-45d4-8279-598a59039cfb\n33f85776-78fc-4007-acff-a9791686c0b1\n970eb967-082a-47df-8996-1b7f5709bee1\na73c68db-d562-4e4a-a880-aef461db4098\n25b2adfc-08ae-415f-a8cb-1fe8c02edfcb\ne13966f1-8070-42cc-bf79-2db29d82fe2a\n92bab404-a951-488f-ae50-6cb5b6a0f986\nef4ca531-78cd-4709-bca4-810a6e3cc8b1\nbce4699e-a304-4b71-9977-8ec9a83defe7\n18c6adf2-ded3-4172-94dd-3f15afffa19d\ne28d743d-dfe3-4281-beb5-663d82e5ff33\n87d4b084-266f-4341-a71e-007848c0f1f0\n0b39fee7-b5e9-4309-92e3-241bc4a2b692\nbca62b75-d9a3-4726-a9cc-f1ba495f11e8\na1672225-76f7-4744-afa8-39528573d435\nc207afe4-fe8d-4c37-87af-2507be5f847f\nee1fc5a2-e77c-4a1d-8c90-69d0af6200bf\n429e5015-96ef-45ab-ab6b-2f6dec7db95b\nfc611b27-2791-4a4a-b4f9-e0e52014c7c7\n2c7bf0e2-a088-4d9c-9747-622655cb406b\n4948ddd9-f5e4-4c1e-a03f-8bb0bb88d4c1\n43796624-f6ce-4c31-a351-8f0dc080066c\n9cc5d891-e654-4ea6-a27d-97d5dc8a1689\n2280a3e7-0695-4284-b9a9-5758bd1a6708\n3228b0c8-89ec-4292-a34c-9d018e7c2d42\n0a9710a8-68f7-4097-a545-b2ae4c64319c\n91082139-9fad-4267-88f3-92870d0bd769\n13a8234a-62f7-4413-ae12-fc63ea171f28\na283eb49-1385-46ce-ad72-884a86aadc5c\nbc85f01e-3838-4d48-a559-e3bb77774a26\n4456bde3-7d2a-4117-a300-a1544386db78\n45a85145-4614-4fdd-a2ee-aec38e90e74d\ndac6c938-e79b-434b-802b-7e7b4d0d9d51\nfbb34968-eafb-46dc-bce2-d218f48974d4\nad6f45af-f95b-4359-a52d-342c960ec619\ndbc69b71-8c86-431a-a8c8-7fe997ec0177\ne06081ee-4bf0-423f-bd82-8d79a8ff3d34\nb08b2b55-b1c6-442a-b6fa-bf101fe5a4df\n59627f5e-40ee-4d61-8191-376b5f07abef\n5522488a-786d-492e-8c09-53eeb55d3de7\n06de426c-c7d4-4924-b402-c1284be376c0\n813fda4f-828a-43e1-9994-523c6265bf0f\n9228cf51-6de4-47c0-9050-84c47fc3ef1f\n6e2c1098-1637-4f19-9c08-242b2fe5aa6b\n9165c7f1-78b4-48e1-942d-094db363b120\n4c776688-174f-4e73-b9d3-2b3b86ac66b6\n301ae322-aade-49b2-8208-91ee19dcb3e3\n1b2bd48d-71e9-47c4-8c4f-0914047109b1\n9c7d96b2-534b-45c0-93b5-ca51963efff8\n77777bb8-aad7-4778-8514-b77952a29595\n0e19068c-7b1c-49f0-913a-42fa07d4900a\n1266751d-415e-489d-90a4-46e7eef5e528\n2b633f9f-1491-41bb-b175-9b4d11ee44cb\n7a9b6ca2-2d12-4e2c-aff5-40f6570138c8\n98cbd262-402f-4e0e-ac0f-100c4977b906\n5a14cf1f-3c82-4baf-a063-0b6d6b54e020\n30526e63-21cb-4515-99c5-5376b1081cff\n457f16e4-7afb-4069-8c33-b1498dc3b94d\n4c39338d-9871-430f-84f5-2defa8075579\n04a2a621-b0b2-4c7e-9e03-2c1f284d10f1\n4bbb98c0-5d02-4d47-b50b-4008fff97438\ndbbbc9b0-01a0-47ff-801e-835f9ca95a53\n580ddbf5-5548-47b0-83c1-57d6657dd87b\nf8a5ca9e-a729-4e9f-a77a-7f2c88de89d4\ndfe576e1-e2d8-495a-b43c-c4faf4505d8c\n8dc5b2d3-80ee-48cf-bdbe-047972f22f8a\n949aa2b3-96a5-4fac-b440-a0de56be2ec5\nfd2ac297-0c3a-439e-9294-c5e5783cf7c1\n8dee340f-45c8-4e9d-a29e-28c93c42ac9e\n1635e04d-5a58-4b98-930e-b2a0a92fe38f\n6a6b33a7-05d2-422b-9cc8-33652f6129d4\nbe0052cb-e98b-4b21-950b-9148254acfb1\n517b49dc-43ba-4e82-94a7-1f4e7f8b1050\nd074dee9-79cc-4dc6-a051-e1544eb0e56d\n1517d628-2458-4299-84d2-c75ce77ca0e7\n6e36bdcf-984f-4c03-9ed7-428ac470c323\n4a0891ae-cbf5-47a2-87d4-275dc9d1ab4c\n2070c553-e6e0-4a79-b12f-6f5478eb235d\n28168f2b-a9a2-47f0-a5d6-64b7bbdd666e\nb481d9bf-099d-4078-bedd-3934862276b2\n2f60a15f-3877-4ba0-b261-f1dc97825fdf\n42b0d5af-9c19-4d08-88b4-89c1772966a4\nfa8bcf88-d195-4bb1-a8c3-3204be6abbe8\nc58fe55f-2e16-478a-a7b6-34b57e85d14c\n23863899-6b28-4172-84f0-8459db00c291\n49a5f9c0-9b2c-4366-bd45-bc776fccce24\ne5f8e861-4271-4a95-bfef-45c405ba1435\nc9461eb2-5a50-404e-8f98-bc3ae26941dd\n3456cbef-c8f5-41af-b0b7-6c3cc868805c\nfdf657bd-40b2-45db-8867-edc2ffc0d92c\na9121b1b-8e9d-4a30-8df1-320a025c17f1\n58c0bd19-05af-4943-9361-eba7b9cb2a70\n1f242be5-4da0-46a8-9857-705d72a8084d\n30f4dd23-b5f8-487b-b305-1bb69e32e9f5\n6145c6b4-8d76-4160-9f2a-d410eda4793d\ne1025172-55fb-4ec3-8afc-90a051d18596\n2b9b8f25-c1b7-4636-8917-7e87cc1b6c2b\nd75c9b78-365f-4d7e-b21b-b433e4eb375f\ncff8aa2d-c778-45e1-aa36-2881e9a28151\n0cbdaaa3-82f4-4db5-8ba6-4dff5908af44\n1ce8ee95-4172-4b2f-b93a-b00c64b71b7f\n5ec572a7-dc5b-4afb-9601-9b5104489dee\n55c89dd0-e31d-4465-8ed2-96605abd2b3b\n2589dd09-27f3-4bc8-87cf-81f4f819c53e\n86e1502e-dace-4142-b9bc-a35669e5ab5f\n4bde5218-d01c-4d6d-b818-3bd42b14b819\n310d9e2b-972c-4d31-8799-f48c093a10e2\n12cfc39d-bb5a-4ccc-abc9-36c7af8ad629\ne97a3b8d-77ad-4455-adb7-71c31cd4ce86\n72795bdf-9f2e-4513-8889-27766168ecfa\n857d58bc-4e92-4563-a6eb-5def0290bd64\ne26646f0-6456-4018-9a96-8994b9e3e51b\n0e37f2c8-0699-4e29-a17b-27bc184cf317\ndf04d4a6-cdb8-4f4c-908b-88fb00e2bb9b\n1e3028cd-e466-4b6b-8151-fde00812146d\nda0c8762-5317-49e2-ae1a-385d779b92b1\n4ef66d57-c67e-45fc-963d-26ccc9cecb73\n1407b259-96f4-4e05-aa12-ecdf12647c3e\na492dac0-2d3e-4bec-b634-dc0faefbeb6f\n6c7d48fb-15e3-44f3-a810-81f175c73028\na452abed-9ad7-4b8d-b1c6-daae3d6217fb\n16850055-3376-4868-91da-58ef4164066a\n0e167e52-c7f0-41a6-ab5b-829b8fc52ea9\n6491ee7c-7a55-4135-8f41-99b0f2dad659\n6771ac2c-c97e-4a0b-a012-b7072e5fc5e4\n1ab3dfa8-5bbe-4432-a054-fe1ef29ada67\n83f0da61-352b-4dd6-8a4d-7506c28f3cbb\n2f3629a7-6ed8-4f97-a9e2-f4e0b28e776a\nf65bb3f2-7f8c-4c1e-b97b-decfefa858d2\ndbbf9590-7df9-4e52-a119-cb25dcfdc049\nde2efac2-a7d0-4096-9d96-2a55c7d99f02\n78e84626-cd98-43dc-b3ca-9721e82936d7\ncc0eaa46-8f23-4e07-bf72-7efd4158f1f2\n1b2901e8-63d8-447c-baa9-f780bbea51b7\nded5249d-928b-4a48-8081-e2bf65408151\n6407fe90-84c4-4692-bdc9-5ab40f02d85f\n1ab1f9e7-4d16-4af5-9316-af2795be4b7f\n24ac2178-e696-4f51-8212-aff0dce2a8e0\nb279bc97-1abe-4474-b1ba-e42e24462871\n4f13e6fe-da77-4521-aca8-38a2d29b3d7e\n0fbc790a-ef49-434a-96fd-7c2086b154be\nf2ddb7b1-8d80-4101-a9c5-15d730898081\nbb2e25ef-509f-4d86-9d7d-428cbc04b9ab\na1f555c4-8ee4-41a3-bac3-f352ac77f700\n7a7e5f1c-11d9-44c2-afcb-e32806524f05\n1e20420f-c1fe-48f8-a26b-b962776ca9a1\n7bfbc52e-f758-42ab-82a6-f7be77a2083e\n3df1d0e0-5012-4def-a84d-772461c7bd99\n42420f5e-cd22-4c60-844d-82da974ac5fe\ne4cbc0bb-60f8-4d00-b40f-7f5ee4558152\n79e2d75a-ef18-45f9-ad61-64dab208a0df\nc4ed7029-1826-4409-ba5a-56487f52b58c\n74b818d4-faf9-4b56-8e06-ed613027830d\n6203c69e-adb2-4cdc-b1d9-864854e56581\n2ae2dfec-0d66-42c6-a150-14ba792df229\ne457b311-4737-4ecd-8387-20c6049366ef\n7934e3fc-9591-4cd8-9565-850de4e5249c\n6b999872-008d-4cdf-8fc6-2888e14329f7\nb728c812-4fd6-4faa-b6fd-83b2ba9ff17a\n385b7558-d007-4b4e-acbb-d4fbcd556099\n32fee0b0-7cb2-4d8d-b34e-c26cbe50d9d4\n6e3e9917-b263-4d29-9770-8d590130527d\n63eb6b2a-084f-4bbf-bda4-0d0b2200aac1\n7ad49e5c-b57c-4fd1-b9ea-9d8f6df2e762\n20ad9d80-114e-4a66-91bc-58295677a001\ncea03a77-e1c9-4f72-aea7-43137fef9304\n4fe0fa8e-3461-47b4-a8f5-ec557a61daf3\n74a7d586-523f-4e6f-8f0d-7fcdac158cd1\nc42e9b88-d0a3-4c52-a02e-b9df8947b1e0\n371b0017-5c85-456c-97f0-f1acab5db707\n80078758-7d4d-458a-a897-b17b5f832901\n9733fcf8-d150-4c93-9bd2-2bc18bc7623e\nbfa66456-df76-45f3-8b6d-ac98122cf766\n6cf6efd1-97c4-4446-a5cd-b6932121199e\n01bc7f77-0e2b-4d49-958e-31a5e2f4d385\n8a13ecf8-a57d-4544-8381-4e86406f6408\n2816868f-9cc2-4535-af1d-541b2b1c381a\n64c3061c-1e98-4ef1-a23d-baecb4378830\nec5f50f7-6421-4b5a-845c-b4d45635e335\n4577aae5-279c-4fb2-84bd-35a11b387ecc\ndcaf8470-07a4-49e0-8b2b-53f2a34598f0\nadf13504-841c-4a37-bfaa-4b4417b7456a\n66dc203f-b9ad-46a4-886c-496a76b50604\n4a954e2d-7c24-43ec-90a7-54cdc2cae031\nafad2a13-fce6-44e8-bd2d-8b3ef2f569ca\n592c5bef-e754-4ab2-b985-d05f5a35a4df\n8cdc5f86-a3c2-46ef-8088-bd0d76fd2f0f\n2eeef31f-ee2d-4e76-acd3-d4e4fb72f9b9\n6d7821f1-6996-4dd7-97d9-3b0b5cce435c\na739ca9e-bf2a-424b-a402-2f1cd0750446\nf7101806-2c72-4bde-afa3-588841c4ba8e\n159629fc-beef-4129-8b1d-970eb4d91923\ne0e98365-e4cd-4d8b-a5fb-f8f973ac3645\nc8abd615-6337-40c4-a229-04971f9c492e\nca720cf3-fe30-435d-957a-351974b8217f\nd9164a9b-f931-4cba-83ba-56bff67af85d\n65f103f5-f233-4fc0-ac02-297ada0af754\n1384a062-876c-480f-b810-07f9b2eb4d3c\ncdd24fe7-2f8a-484f-837b-f7aca74fdf9a\n0e6aec76-5f28-48a9-af95-a5a7f2b8d248\n17c02ebb-816e-48df-ba4f-02a767048452\n7d47eb31-7e5f-43e0-b68e-148598c38c60\n50f25c04-e53f-4ce3-9edb-dcdc235eb1fc\n05c10630-6f5b-4872-bdc4-0cc5af4b64d9\n912e0ff5-62fa-41db-81e6-b10e6c03de0a\n84621cea-cd95-4027-b2be-47216ff6c838\n4ac57fb1-1933-493d-8a15-d7169b50e8a1\nf10e5c3b-b52d-4f76-bef8-7bc8982cce76\ndc8634d2-cc15-41f9-8d7a-d7c5c3e9987a\na5de023b-42fe-4926-84b6-29b7f9227202\n400718af-73a9-4070-80f9-f8c8b6171d85\nc05485c1-d0fd-4bfe-9ffc-b63b91419a69\n6c0ad97e-f1e9-46c8-8ea4-ab317c2666a9\n51ddf5d9-ebb9-456e-953c-d2210b375f62\n99a5ad4a-ec17-463f-9bbc-9fb5cd7ecdfd\n2278c854-3d3a-4a66-9970-d39ab5d4cb7c\ne78df903-1589-4e94-9bd8-765ee07c63d0\n6480e7d4-2188-436b-9e5c-f30bb94371d3\nca2a3e23-fa0d-49fe-ab83-baaac7aa651b\nafbd8c39-f813-4c42-b2d9-f25612dd4364\nd9e6649d-d583-4115-9829-af709bfab4f2\nf7477941-1dda-4f20-ba09-1d42d18d9863\ncae0a9b0-b454-4759-93cf-60fa3355e2b1\n136fa6d1-d2c0-4eb5-bdb5-fc8e6f7907d7\n5a84f08c-252e-4cca-8601-15fe174b9185\n4f718540-c88c-4d34-96b1-b53a42c75a7a\n75ef0ae1-cc51-4a36-96da-a6cfc19793bd\nbf351852-56cb-44c0-bf03-6e1e40300a7d\n7c12965b-7cad-4889-aa98-d0fab729d361\na7ac88a6-4876-482a-b29e-b12c94a0abdf\n2652501e-c223-410b-87e7-c3a4fa9c9db8\n0008bc60-e560-4f8d-bd58-f7188fcf678d\n1ef56609-40da-4fed-88a3-619374806afa\n9dcb36d1-a145-425d-9ecd-2afb48de3dce\n676c88ce-71d8-458a-94a4-31eb2350665c\nb3dff082-62f0-444e-919f-8f3e805f8854\nf6beae88-4b7c-4707-a694-f8a5f14597f9\nd9be1f61-2bd2-4e2f-9d9a-ebd96ebdf226\nc3a28646-2cb3-4409-afe2-59d9482e0053\n2367e042-0c4c-4c9c-a6fb-0dd391526ff3\n63621daf-c3b2-4d05-9f48-d74ef783d42f\n07685367-e1df-4a87-b9d2-7a7d96806e28\nbffd3f9e-2530-4d6c-a76b-7d8cfbc0c210\n9692300c-7640-45dc-8e6b-7f848d76ec48\na0dab4f2-72ea-4c93-ae62-e22df3fcf775\n5e6e3887-d2de-418b-80ba-811000ace5ca\n5bebf114-f3b6-4772-ac48-1d670366cf11\n7b331941-fbfb-4cb5-b784-234fe2c6d891\na1892610-f435-42b2-93bb-23903e1ab722\nf1565d8a-4951-47b2-bb1f-df2b04ebd8cd\nbae17518-c60e-4fdf-8181-2e12cb18e86b\n34ccc434-c99c-41a6-9cbc-144514974c40\n8fb8c6b0-77d6-4937-a5a4-f2a881fb0a10\nf0d35ec9-5309-4767-a00a-41fd9a1a3057\n5fc167da-e615-4134-9c9e-cda4ea2182a6\nde35b08d-6f5d-4022-9e10-10dd043f5c3c\nb16262c6-7abf-43ad-a000-1e661dbecdcc\n87ab709f-d3f1-4192-a644-d87fb069bcb9\n7ca2b8a3-1f14-4a4b-9021-8892d13893f4\n3d116505-fb5f-42d0-8f38-d9d4398c2dd9\n157cf0f7-95bc-424a-92ef-5cbd7f4db73d\n11bc3a47-689a-4932-8e64-b2a27cbe6338\nf7311754-a1fe-459d-abfa-743a2d3e24b5\nfc6a5989-4316-4ba1-bf1b-5fec5154320e\ndcfc7abe-778d-4180-8e75-88567ea814de\n12ef5ec3-c16b-4f93-b637-f3b728f422e2\n6847ba2c-81af-46a3-97d4-e347dc8c59c6\n171485cb-6680-449b-9180-f7e2c2b1134e\n2e2159c8-dfb7-4f76-bee5-1335088f786c\n1be168c0-0e09-452c-b89a-038b78faf5f4\n1880ae73-5b19-49be-a399-7989bb271481\n6e1760dc-eb51-47f5-9c32-e9033941b1c1\nf7c3af03-cc1e-45d9-a2d5-9636ea0b5375\n265da503-e5fe-4a1e-b77f-8dc89a716e70\nc3762488-7b59-406c-8a4d-e4171692aaae\n00416036-125e-4719-855f-bc16940fa4a2\nf68ca341-da19-48e8-aaf6-30568ea19bf7\n733d4eb2-7947-4961-8ad2-f555cb083011\n450a20d5-2ce5-40c1-ab4e-a0e1adda5378\nc0d74909-63f5-4551-ab41-0acfcbeb1b1f\n03634715-35f0-4f49-b195-af56e84a4da8\n14cfc267-d842-40ef-b4af-7f8d72cd53b3\nb4a5095a-77ee-4e24-9264-85694f2fd1f8\n4a64eeed-c19b-4e74-9086-eac50e1b760a\nc055b816-e07b-4e8f-ad66-821c9167f805\n0bfe864b-e191-49e7-8a28-7d3bb6fee73d\nee73b930-fde5-4162-b85b-bcbf8282bb2d\n18bf4e3d-37b0-4588-bb4d-bd2f8e9cca76\ne4acdc24-6517-43d7-a8b0-4ee139bc5f42\na56cfb55-4edb-41a4-b0a8-d45cbea93df7\n2504c4f4-599d-4626-9a0e-0e51b046dc3e\n81283930-aed8-4267-af4a-df79c98eecb6\nbf354fc8-9c5d-48ba-88ec-9341f817abe8\n60989d6d-cfd3-421a-94fd-8dc5f0d4f73d\nfe9e760d-9d9b-4cc1-8599-0dd0ed53d929\nd4ac53c5-94d8-4036-a549-428a7bbcf67b\n2692f4ba-ea67-40da-b3be-a6875c010e0f\n049c6503-f123-4cbd-b7a8-c491aea1c9f8\n786b6460-a95d-4a18-9bd7-ddacf6a8bb4d\nc778ba56-52af-4b5a-aa85-6a26eabdd0c6\n49e5b23a-f9f7-4068-adba-a89fb70e30d4\nbbce05c5-36dc-440a-bc68-518c111d37b5\nacb52b6b-b6a1-4cf1-82fe-15b72c271f8c\n369ff062-8f63-44cc-ab91-0104f98ad630\n2d4a0bf5-e783-4bcb-9611-d1ff573508cd\nd4b179b3-475c-4f18-a5d1-e3dd73da38ac\necc1c9f2-b827-4581-9902-ff248ce098b4\nf27419af-28c0-42f9-bc33-89053ad9555c\ne5b4e791-4a33-414a-b5ad-f19a929d19ee\n04651897-6631-4d47-84d0-817227c3ac5e\n839f9b9f-31be-4d36-b1d0-ba098616ac08\n4558bf12-0914-4824-ac80-6cc8a29919f1\ne560c71d-f4fd-48fb-87a6-828d33be447c\n1ebdde26-94d5-48cb-b1d5-1011e89ab2ef\nf3227b63-8c03-4c2b-a2d6-3f032c8dcdcc\nd2f07885-2c54-401a-8b03-e8b5582107cf\ne63d8f37-c1f3-47ad-b008-5e2035eeba9a\nfce9e789-050f-4a3c-9640-655fbc02042c\n4d15967f-7920-4379-a337-e8956d80a788\n8c9321f4-63f9-46a5-84b2-d1e23d9082bb\na52bf1e0-41bc-44e2-a259-186a4bf3caf6\n35247cd5-a1d1-476b-9cd3-b6b2f1f4a453\ne5c4c865-367a-40d1-a080-7a63ead59d64\n9b20d09e-146d-40d4-87b0-2232c316b924\n17cd6b79-62dc-4c5f-a321-4bc637933802\nda6f2fab-ad2c-46f2-b040-bc06c8e4d778\n5a654cc0-37ee-4b49-8259-45eaf2b648ee\neb148bf2-2277-414b-aa64-521e787d3ba1\n0a8a29f3-cca0-461a-9e74-0f7d9dbcbe48\nf143fac8-6706-4615-8859-5f0c9503939c\nbcd35a7f-7016-4b75-996b-cb8cc969d7ae\nf27ef617-2c8d-4f69-97a2-b56d22444545\nd58df05c-46c4-4ab0-a669-dd0a4314fb2c\n65c5dc27-1da8-451b-ad6c-ae1aa56abf4b\nc355ca90-ae47-44cc-90d2-1c3ce516ae72\ncf8648dc-2609-4566-9308-6cd15f3066b2\n1309a1e7-4bcc-4c1e-b731-d933f491db71\n58b552c9-c14f-426b-98f6-ce46cbc15801\n35656211-4f86-497b-89dc-1d3440c129e3\na88d39e9-d2e6-4fee-88f3-54265a5191a6\n91dfe17e-5763-4aa1-b6b1-7c7326df19eb\n5b3ae6cf-bc7d-4472-b7fd-19eeee5b75a7\n7ece0acd-4c51-4c5f-a59d-6c4408b85a29\n5d4c8624-602a-4f19-a779-697a46d7bfb5\ne1e343e2-9979-43a3-bce6-e0d190a301d8\n0517d8d0-ed7e-449b-af5c-35e214dcbeeb\n86830bd2-3cd5-4745-b42f-2a3b1fab291d\n28bc5303-205e-4f09-8ae7-4342bc0ce90d\nc01c2da9-d357-48cd-b443-d0645164ca9b\na4456a14-caf6-4501-a9e3-d1de2fb60419\n8286c592-78e0-44b0-81c6-a332881b9fac\naa4be90c-3615-4f73-b271-1c94be56d6c7\n6082d5f4-8ac5-4c42-a641-5ffa82cf17ea\nd62969c2-c2e5-455e-a292-3885a9a396f3\nee158e8a-a762-4826-86c7-b5e0c3624e46\n0bceddbf-e6b5-4767-b9f2-9ad7e37811b7\n17db8fa0-1312-4558-acd0-6b9729dee7a1\n8ded801f-708d-4c70-85de-3f05b09e7ba1\n588570c0-5b76-4de2-8a6e-9934e92a8373\n52c6892c-26a0-4b32-bd7c-61c2068a7780\n54a49053-a4b0-478b-9d32-3a777d5abbe6\n8b8f0028-0dc9-4c9d-9b10-bce7a8912689\naf1b1783-f39e-47ff-84f4-0c2818655a2d\n57d422fd-f2b4-452e-953a-9f58e156ca5a\n6ebb6a5e-1d5a-4ba1-8223-c9dc4c82bc19\nf71fa284-6dca-4be5-b5f4-17d68aebcb65\n99cec65d-aba0-4253-8b52-e9026231d2b3\nca9066c1-0e56-48a4-8931-f3c429ab148c\n5a5aa622-91f1-4b9b-bf1c-60ad9fda2039\necdc3f5c-9a15-47a5-9c4a-0222c0678d43\n0078d1d5-be37-4856-afc6-3dec90afe1d1\n38bcf8d3-7954-41c5-907d-221eb990322d\n39b74ce4-e32d-4468-91e1-54858b2d4e25\na07fc5fa-860f-4d36-bd55-a24dd0b240c5\n96fdc1a5-090e-4d4a-be1d-3d7990985606\na775c3c3-ef4a-451f-8a4d-8e38efb388d1\n07cc8fa1-8e86-4e22-b23e-25992626d848\n9222e89a-13e0-4646-8ec0-e744f9b26490\n3f8f5a23-ba3e-4015-a931-cd1547ccaf28\nc91dd3fb-86e8-455f-8682-bf747febdb22\n248c45a7-ac0b-4ca8-b363-55c9bb5053f7\n855432e4-0d3a-4a06-ab00-c4c362025d76\n82fe7189-ac7f-4371-b103-67126338bf0d\n46d9fe76-701d-4eb2-b56b-0b9ea100e327\n72ad997a-2756-4d6b-9e27-3fdf100d6dd4\n073af0e8-95ac-4ab8-8d4a-b64205732582\nc6f9862e-399b-45fa-94f8-6f06e989bba6\n9d3f1918-55bf-4f25-aec7-eabbd866e200\nad5153ce-2c76-4baa-a711-1cb61ea10e86\nf26663fa-3de7-41b1-9364-606461cb6616\n04680eae-e34d-4f1c-ae33-01d63a72a781\nd454ecbc-55a2-4200-a9f9-fea0426134b4\n10dc3589-b0c6-4385-80f2-3e6a50a497fc\nd253fea3-cee9-4d5e-8998-90758bcc76ac\nb0b0e61d-10bc-4882-9fc1-81a324b26756\n25fc17b1-5ad4-460e-a23d-2ccd31b3c49e\nf1f9904e-fd18-42a6-9cf6-5536a47df1d9\n755910af-7281-48b9-8520-0b135f28e234\nbe70c013-5f9d-438c-ab00-9f9463f8cb9f\nd17d4fe2-a6ff-4637-ae39-3afbcefa5509\nc2af97b6-949a-42eb-bf2f-e10d417d3501\neac02d62-7eaa-4bec-8525-b118f1f585f2\n0bbc0679-9c86-469d-a2c0-1ccb349f740f\n119b7c5b-a2cd-4e6f-a1b2-523fcc54ad58\ne4c44d52-55e2-4670-8a4c-57b80ec849ba\n9fb98fc6-dea3-44f7-bc5a-e9bccb91666d\n95ef04b2-550b-4a83-a22d-936e115d7fbb\ndb8c6a11-83bb-4e40-b168-b6dcaaf22610\n45b64257-e6ba-42e4-b895-efed3608d912\n2bdc03f0-d1cf-4eac-962c-fb0aef208977\nd8c126e1-2835-46fa-aa04-3f3621a60faa\ne3a45ff8-8677-46e7-9025-fedcd1d7d6d2\nc9f9b196-e2d9-4277-bb61-4757d7a58a92\n371aff06-fe7e-4030-928c-486664ab102d\n448824d2-af78-4f96-beb2-48a4ec6e29c7\nc3252e4c-dbaa-4e74-bf7a-07da697b01c3\n0e36e455-92bf-459c-a7e8-897b9a6f2b56\n90c8c467-26af-454f-8112-f7e2a1ec3f65\n266cafb5-4ffc-4564-b09a-85c306df4056\ncb1dc2c8-ea98-4518-ae7a-8e870af50e7d\n1654cd12-dc40-4e34-95ee-60604ad08256\n588aa367-e860-4a18-ae4f-9c265f6ea0d6\nd9677f45-decf-420e-8371-8c7a7b758250\n51321d01-6549-4604-9a68-ecc1e1691e80\n5fffe3d7-9160-457d-9395-1bf5ed253936\n77235477-2e61-4a37-9b90-b4b3367ed274\n25ebbd14-0f61-4a83-880a-3a79178e2fcb\n5ac2d3d0-405b-4777-8257-18d4b2b1fc85\na9914e56-a25d-40c4-b1f6-274f823a08ed\n59ddcbda-d8e6-440e-bde5-e4569dab70b9\n650a619d-46cc-4474-8252-d5cd96d55289\n8eb27601-859d-4c3c-a49a-846f1be1f5fe\n0e1e6a5a-1be7-453d-a74d-890a4d4cdd72\n136f4a3f-4ecf-4217-96bc-7b3ae8dfe726\nad7a895c-c76d-4ef3-9c62-3735122549d4\n8bd5a246-e878-4da0-a08a-5c90943100ee\n7e3fd8ba-62a4-49cd-9832-9d0c26887c40\n2a296734-d307-4d69-a103-8e0d88672066\n92ca6ec7-3749-4e5d-834a-da8c9c294ce9\n20a6e3a2-91f4-40f5-b545-52429779f6fb\n579e9d77-84e2-4f3c-b47e-b58d990c44fb\n4280596b-23dd-4265-bb6d-f30b7cae0a88\n6999aedb-3834-4c65-9eee-0d1ad92b305f\n1a0e4453-16dd-4b17-8a28-16420fa272ca\n3e889299-a176-471b-bbfa-5bd45fbf5e95\n46fd6db2-19ea-44eb-b916-56d8aba1fbd8\n7ec6d770-971e-4ff1-8950-5f718f0f53f1\nb9308043-2985-41b7-8042-2dce63c3f586\n0d1a088e-073a-44de-91e5-a6a961ea585e\nc671c3c1-0a8a-4dd4-a3d8-b394c64d0a1b\naffc34d0-a8e5-486c-9872-d4913a73922f\nb9863822-23a8-428b-847f-f02143efb1e9\n06e241bb-9aba-49f5-b058-ac03e8957001\n501bd113-82d3-4a2b-bad8-73ace3d0032b\n666ef17c-e525-4633-84c9-9865bfb2ac3c\n6bff9609-676d-41c7-91cc-1c685f0a07cf\n411f8d7e-ac93-471d-86c9-ca5136d3bec2\n9042d909-67a0-4e39-8a53-01e0b7176731\nb232f13e-66be-46c5-9f2c-c9e927b0955e\neb419dfb-8a98-4dfc-8e57-9e5dba86bd1d\nc1a962a7-115b-4a6b-9ce8-3d5e039042e9\n7443e6d7-3884-4bfc-8431-0c741e6d4f17\n7f0aa55e-b79b-4c48-acc6-1a69e260a99d\n44412fb9-291f-42da-a66a-d7aba116a418\ndbf19233-7ec2-4b27-9577-16b680eeadcf\ne23c4acb-8eee-4bd7-9bb2-9d9457e9cb4a\n294af9c5-c6a6-41c0-a8ca-6f4a053439f4\na8a84daa-a98e-49fc-922b-789164367047\naa61432d-b98f-476c-a168-b5b13a726b44\n4f561a9e-4583-483b-8b84-b96817e27f7b\n78ba5b77-cc01-4008-96ea-0101b04860ca\n20c319b7-8754-4e74-a1b3-5d974e631eab\nb4357f35-980e-4830-b3b7-813d9eb74454\nf4fb249f-4886-4a5a-95a9-0ba024113fe4\n1db8805e-fc04-4eb1-a150-168dcf2034db\n4030afef-65cd-4c32-ab9e-fa452f0fcfd2\n7c6ab35b-9d8b-4132-9d93-a9fc1a505128\n02acb542-4c6d-4e5c-9b32-ca14a4cc2b7b\ne8a3e6b6-4746-48ee-8bc1-545786e06134\n3b83fef6-cd41-4c22-9119-9032f27d75e0\n73e4c2fc-aa97-4bd6-ae5e-a03d918d046a\nb808e47e-210d-4ac3-ba4e-40ff1d60906c\nc6d4fdb0-4bf1-4d59-94a4-bc41c78afa39\nca3dca45-843a-4941-83a5-e34970ce061a\nbd409d2c-294f-4b20-8d46-c497579a1ebb\n07cf6358-7de3-41c8-bcd3-472cc1d99a4f\n688c27c3-c79d-40b5-bec7-6c3f05c3a269\na2a9c0c4-82c9-4a15-bb14-3de54b96e3c8\n3979ed23-fed1-40aa-bbba-daee5a5c9a7f\n0064f235-734e-41a5-b2a4-bcbe20ec0d8b\n82ae2b3a-ccef-46ca-82be-1c50f20de7e7\n6aeff770-c461-4ff4-9fd7-76c189f2d397\ne70dd44b-065d-4b8b-9a50-0a50ff669919\n8d3b14d8-43a0-4686-89bf-49ec968c1963\n1075c169-c7e6-4f7c-9c14-be34bbed8f16\na1faf02b-56b1-43ad-ac28-e6d59048c8b2\n7d0f71f3-e0c6-4893-b054-119341d79d85\n26b950ca-fde0-458c-a6ec-56775bfa66b4\n07988fbf-f7b6-47ef-bcf5-84f4fd38575e\n976a6196-91c2-4bf1-aa88-97adc35f9247\nb7196c7a-23c7-4f81-8fea-6b36ded5620e\n0a43b8b4-82a0-478e-97e0-a5fd4e8cb86e\n7548f3a9-c508-43c2-a1ac-cf885188027f\n0b7928b2-80c8-4c72-9fa7-e520c9e92c76\n12c80b29-6f68-48b1-beb5-8b4531c312b7\nd1b72ed5-137d-4c9f-a424-adf6d5c79a84\neb086c00-94a6-4eae-a91c-db6ef39d3c3e\n45280401-68c9-447d-b772-4295c2f17e1e\n97650de0-a6f7-43e0-89fb-41fa7e649b7a\n0830eb09-c3b1-46b4-be09-1a225d96f3d1\n03fb73b5-c6e0-4978-864a-f36ff24f0c72\n78166e61-1bc7-4ca4-9139-1577b5c6ff0b\ne6690063-8952-44ff-9e8e-c131fbb998b7\nf4ebf173-c543-47bb-acd5-99a814a3b5ee\n015a6fad-789f-4ba7-8072-90f5183af995\nf6a2d643-bff0-45e8-9b15-968c30dbee7f\n506f72b3-d1a4-45dc-b615-5d76637750c1\nc3a61b20-0a6d-4729-9cc9-30a138502585\na75e6c7f-fb05-4f53-993d-88e5d7b5c1fe\n2bdac81c-0f00-4826-8a25-3ed990103685\n1757cd91-fc5b-4e3f-a060-12f708761f2b\n77961641-1357-4189-9b63-2dbe41c54d80\nba30e5c5-a1e0-41e6-9665-7d3fadc4c7e6\nbefc6845-36d5-4b59-ab8d-e1282a9badde\n904f7e87-fc21-454f-8438-74bd8dc465e7\ndde3b87f-b065-489b-bd24-478a067ae044\n7beb7da0-0fb4-4391-af68-13aa5892bcb6\n5bb7ee5f-3a3c-47e5-8de9-f84cc106550f\n7b26522a-f869-4431-995b-f48f62810557\n96afdf32-fba0-4628-98c0-f96801f5f1a1\n6414379e-e75e-4d9b-a5e0-2d96dab8dedd\n0d1811c4-2790-4cc4-a4c2-64bec08d5b06\n33f58ad0-a0e0-491e-ae38-703ef8ba657b\n4ea0d1e0-5eb6-4301-877f-2d3cafc83826\n2f1de889-d871-46fd-8bd7-68882856b095\n51179696-5479-4593-8a25-465ed80b2a5a\n1d9f34b7-a329-4669-85bf-0372f625292b\n54a55a18-5095-41e6-8cf9-758140532919\nf3b058ae-11b5-48d4-9ee9-30adccb75b7a\nd379bcad-9ebb-44a3-bc8c-8e74e8ad8445\n4bf880bc-1937-47f0-b3dc-a11afb8fbe95\n1aa7953b-787f-4a1d-9724-d5cb56ae8176\n0cc21301-9a2b-4b5b-ae3e-86c8baacae32\nc1628a9d-18df-40e1-abb8-5257fd77f399\n22cdf240-2265-4c64-9975-a7ee474b3b89\n6771af22-5638-4d9b-b253-d1b86ed159a8\n66cc17ae-208e-4508-8de6-663d6de489fe\nb7976d05-b6e6-4304-8715-ab3e940e7d9a\n3966b65b-db0c-4b85-9335-ce75c54131c0\n7006c1e2-2c3f-4ef0-ad2c-661120f82721\na42326da-df88-4f9a-8004-6b6a36aa8e88\nc3d2df9b-0dbb-4457-8d69-06e44c8c3b0d\n6da48be8-4dfb-40dd-9d07-95fa5b367786\n41a7cf14-fb89-4cbf-bddf-2d0f9f2d8b3d\n47310fb3-bf6c-4d85-9d0b-1e7762a27d06\n02569d1b-64ed-4084-b092-b5cd5055d097\nd4e8a183-5a32-42ca-b1ff-8ab461110643\n5b37c879-a24d-4210-8dd0-78f99e60d076\n01e8aaa9-dae0-4a22-88f4-d2d41fcc50e1\n011677e0-faef-43cc-961c-fd1059735653\n87d01290-31a5-4904-ac1f-94007dfc8762\n303fa7bb-037f-4f18-82be-fc81e9e152bf\n408c850b-9c5a-4099-87fb-20cc98073d0c\nfa27069b-c411-4379-8758-d7f8cc7589ab\n26200b72-69f8-446b-91d8-6aa3edaf1a41\n7f2f90e1-26da-4f01-9b74-5d1d9e92e815\nf37fc23d-c82b-4e9f-963a-e5b06fe75439\n7884d078-e79a-4e35-9550-a06d49ac5a0f\nbe37f34e-3022-4f07-859e-0184832853fd\n31fc9da5-e718-418d-b588-025af4d462f7\n5a20d749-7af4-4360-b45f-3b62899d45e2\nc5aa60ef-136a-46c4-af3e-94b22465c4e7\n3548d012-4e4c-4c7d-88cc-39f12ba5c786\n56d77b3d-4d92-4590-ae56-7ba9e9d7fa77\n1e3f5c64-1cd9-49cf-a5e3-4ceaefcce388\ne96a31de-88f0-437f-84ea-a797dfacf81f\nac480eba-316d-44a3-a84b-bcec02717032\n23a1d6d6-a412-4bf2-8897-7fd23628b01d\ne0d305d7-c169-4024-9eaa-b1da6dee0ef2\n83698a3e-b445-4276-904f-d0917a7e0cf7\n67f0701d-fa12-4cfb-8a8e-41711f22d480\nacbbe3ac-1f3a-4394-b44e-e89af9b53634\n1735e4ce-9f5e-4dc3-87b6-5f3c2a86f206\n9ae0c548-be9a-4e00-8b52-83e00bbeb182\nd63a3443-62ec-409e-a397-989f45d8e187\n0046f690-73f2-4803-8cb8-e7de6298e2f1\nd2ed88e9-0b86-4d9a-85cb-f344027be014\n79708ca8-8ea2-4b85-a4ee-9a39c3ced2b1\n50d2c7dc-01c2-4a3c-aec7-8cacaf272552\n5f462da1-06a2-426e-a6b4-b0cc067a7585\n1425d8f5-f0fb-4a5c-83f7-85915757841d\na8de8b06-bf77-4a6b-b7ec-aabec4ae3d32\nec5b1a3a-fbad-41cc-8763-729a8ca68241\n3686764f-c859-4a2f-b1ec-8f878d1d7fe5\n712910a9-005b-41fb-9d1c-e2cc9165b506\ne4cb2c53-e6f2-41dd-811b-ae787c459bf6\n6c26ea14-6383-48f1-9b6f-112f2ed94899\nafd077b5-7f08-4902-8713-3ad4bd131eb0\n6a3ff23b-6fa8-40d8-9725-9bb754a01b0e\n10e3a80b-5c2d-424e-bf8a-c3a87345f69a\n481e6019-cc90-4ec2-a9fb-acabc65d1f3d\n3c57b383-ad1b-47d9-8119-dcf8a3efe2f1\nd77062b7-885b-4e87-b455-b9b1ad2d0f12\na822f89f-3602-4b8a-bcb1-e3f591323761\n9b42f2f5-194c-4629-acd1-6fb53d71cee1\n98bbf3b5-9cbe-46fe-a5b4-40902dc62b2a\n97194ea3-e03c-4ce4-981c-8fc756aa4c84\n7d75ed33-8984-49c4-90d2-9bb4b8e30409\ne1522f0a-23b4-4440-8a3f-51be6c6318fd\n18ad1f53-294b-4836-8d85-6aa3d1b9a0eb\nfdd603d6-30e6-482c-90d0-de29d4ff15f3\nf0295b6b-4557-450a-b6b3-b952c2430267\n9d56695a-80c7-44f0-902f-5138905bf37f\n728928e0-fc1c-4c64-8a43-98409ede9e42\neacf5e3b-47f8-4807-84d6-c0a0a102c272\na9e4f489-40c6-4215-9b9a-1438acc2da3d\n0734652f-914f-4306-8b2d-e8929f5ec6bb\n0d94442d-74cb-4bf5-be2c-684574ff028a\n4f6b7f01-a411-4e2f-8979-a7799b63fd11\n01ac0c81-d535-425a-bede-42e221f1ae6e\ne1f67e86-2453-4b6c-b13f-ddcc821441bc\ndb33ad57-66a8-4875-bec7-cf5e99c23398\na3f7f4ed-df45-4234-ba35-c1829e2650fb\n1b1d75aa-f33e-44a1-81ff-8a700c919b83\nd9a15792-b76a-4c1b-a54d-8304d20158b8\n4bc48866-da44-4d3c-8b70-4bd85e2839a9\na3de0935-819f-4c50-a6ea-545881bf3fe0\nffde88b8-dfe6-4920-a5ff-3e6996ba3d55\n2f078ba0-5806-4d5f-98a0-50d082f81fdb\ne690e767-8311-4b1c-b52b-075eb9ae5a03\n8d3f8043-6346-4bc1-b392-05a4a9ff2f93\n69eb00b1-2527-43b1-b923-a5209380b0af\nd8eabb4f-112c-41b8-88f1-ecb9ec3fd17a\nd4e51d46-c712-42e3-a664-75ce3301d400\n3708ca82-1f9c-45a2-aad6-c90052b46183\nc696da0e-4d9a-4a29-bcc1-578566c85542\n052d18a0-7bb4-4efc-8d67-a467a32c9436\n48cdccfb-26c6-4894-81ef-022cc0470137\n5564f005-764f-4a7e-bd96-3ebc6159d49d\n93f25306-6062-4cfb-970e-5568ab78389a\nb845251e-4e3e-4012-9b14-b6515856c094\n5a26459d-d2b6-4677-b55d-57213a246a88\n9975f3c3-0f7a-4c06-87fc-75fa07314e6b\n4568bddb-714a-4c6c-ab59-12eb16da9c57\nca576915-541a-48d0-95f2-025406885d0a\n3c89d274-ca6c-43b2-abb7-cb851cf6362c\n9965e86b-8851-4cae-b1df-853e7312162e\nfc71dd16-a804-4fb3-b3f6-a44ecd540ae4\nf6c2287b-4005-4fc2-a9b3-ccd68d854903\n79bc432f-0b4a-491a-a029-beb10746d495\nb69458a2-4ff6-474d-871c-db1977a54c24\n5b9a5694-a064-4daf-b9aa-b143f8f34d81\ncf7d42bf-7336-4338-96f6-2bfee5a28988\na17fc608-089d-4994-b6ea-c14468c1991b\n607b9ee7-ce84-4c26-808f-bb8dc29219f1\nb12ef720-c2b5-44a4-824c-d63e2907b56c\nf4979142-dda8-4d38-829e-00afc4d81641\n454911e0-f55e-4902-97c4-24cc8b0d0798\n2fd144b3-c3dd-4083-99ed-fa4766363c87\n1f89cb7e-c8ff-47a9-b8b6-0b708dc9098b\n69da050f-a17e-435e-8b5d-dba554040402\n3bbd3cac-ae97-4008-bb43-42ed41bc384d\n0fd33dfb-4056-463b-aecd-6f5edf13ec82\nabada7b8-5d20-4ffe-a78c-07afe542fd72\nd47c5fb2-026c-426a-aaa1-318727874213\n3cacbeb6-99cd-4fb1-b190-790c3d591ad2\n14b4e1d1-e00d-46a9-b349-cbaedccf6579\n5ca46fe6-9dcb-42a9-a68d-5b269465f94f\nb0e3d9cc-4d2c-4f7f-a457-e59297ffe499\n00a7fd74-b76b-46d7-9aab-f3405efa70fb\n0a1c4609-6e38-425b-a145-a076f650b4dd\n7d2e83b1-a77f-4d3a-adea-fc778a077bdc\nefcdb0cc-7edd-4340-b0e0-90d648b1ace4\n042665ff-74ed-46c2-b82d-438d81208c08\n54a36cb6-1fc1-4b86-a40e-c427411af8b7\n0ff531ee-56c8-47a0-ac06-df94f37d5f3b\n9e162036-360a-4bc1-9c75-ba5058943f97\n41863fae-6ffb-41d9-9577-2047b889214a\n13f3aa19-d48e-4617-a8e2-84400e7f5ade\n07a9412f-95b4-4839-a540-90b9801352c2\n6ff59f5b-d886-4a68-be57-8f39775ea4cc\nf73128c3-4dea-43f1-9e0f-1c7d2a477142\n20e6f674-42aa-441f-bd74-03362d9ec7cf\na3a74bf8-609a-428c-b087-103906d51b83\n630ef360-8b4c-4c39-becd-37d4349991b2\n154f4298-6038-4daf-8eab-23a02b8a100c\n8f0e3dbc-5c20-4d0e-801f-550c44cec9b6\n2dbd6a1b-a524-46fa-917b-065454f9c221\n69d203b9-3807-443b-b765-16ea2604947e\n4824cded-46b7-405d-b9e5-efe0d06062ef\n6f451457-34d2-4eec-9842-aefa1a58d141\n40134b05-71a0-4a6d-b420-a092c9544351\n17481524-7c93-4629-8615-c3a2a1725c27\n1cc76e44-8ea7-4798-bf87-7da289b19df3\n6f7f26d8-9dcd-47f4-82eb-d2ae90d99c50\n01b677e1-b98c-4976-a2cf-9caea920bb8d\n85461ce4-3bf4-41aa-9f6e-d1c1ac4107ad\n3d429037-bd97-4483-9731-abe1d16f53d2\n5c2ca4ad-7896-4550-ac07-bd82d0509ce1\nef7e7293-9899-437b-be83-e05cbbe35207\n19756656-9cce-4126-a417-200ee62cb03c\n9aa8becf-7547-49d1-911c-0ac5a9379675\ncd903bfe-13f6-4236-a83a-4648aee3f909\n5df093d4-54c6-45e6-99a4-4d9191df4e44\ncd0631e1-35df-43e1-82f6-27fecf9dafc9\n4a2c2df8-8198-4d0c-bf53-8256f27530e0\n6b4497b1-36ce-4e86-852e-c03c0992acd8\n8d7b3323-778c-4ace-8bc5-be335e23895e\na9e73d1d-d0e3-4827-924e-e82f875a774c\n0b4ddb89-d87e-4615-be5e-0ca0a3f3febe\nfbb3edce-ad91-4921-96f9-9f4b8ff16188\n6ded6ea8-1b00-4f31-a7dd-269fc9f274a7\n7b19a3b6-3de9-4d05-84de-7912934c863c\nec5a06fe-f353-45e2-a5dd-80f7f7b17e68\n254d94ef-f070-458a-95b1-a915b70107a7\ned4906d5-e979-4da7-9432-0477632512cd\n1cc5f356-22db-408a-882c-600d638d581b\n452fccb6-2b95-4333-91df-86b78c4f20b2\n5f914ad0-36e3-4a44-b8f2-36e172a87d0b\n4900738b-a7c6-4385-a987-97a5ecaa12a9\n67194bcc-4604-4ea2-806f-6ef7e0765131\nc2d0e37e-13f6-44c8-9b3c-eb0304073e30\nadddb0c5-17e0-48b1-9699-c3eed76fe9f5\n6a8eddc4-0207-4485-8513-79c135e40182\n8358c5c3-4192-4280-96e6-053a1f521908\nb00d1772-0a98-44b5-8b54-8be55126da6f\n1d1ee8d9-0312-472b-8363-19fa99076392\n41f4c08d-ba2a-4bf1-b09d-9bc68bea18df\n0c3a84dc-f785-4f5f-9fc5-f04d2ac2b1fb\n0bfefb24-1353-4bf4-b3b1-ac75f4c33331\n03951dbf-8e24-4258-9c76-6f4b92e9902a\n8df63398-e26b-437c-a841-7543bbd874ce\ne41e4fe6-ccc3-43d0-b537-c29452fb7a63\nd8e41a4a-e6b3-437c-9735-a4a223455976\n70b50169-dcf9-45de-8eaf-65d4397d0792\nd7c598f6-3807-4605-89b7-738e822f2784\n9f6445a5-26d1-4ab4-9214-dea54c16b1c3\n1ff56f4a-1528-4be4-9a2c-ffee134821d2\n3b862e8d-cf40-44d1-92b0-69fa3ece29b9\n03c57d30-f595-483d-b2f7-682892316f31\n9859e751-e1e0-4414-a780-aee7f4d0464d\n61f18949-1c99-424a-8eeb-f48ae46e2836\n7c474978-e2d8-4841-86ac-19314978c695\nc379ee13-556c-4d7d-a400-d113a4b79b5f\n787cd492-6b44-4efe-bec8-2fdcd96fbe09\n707e5c60-d9db-460d-a491-73651e2b9da3\n978d1144-ed77-4b4c-8fea-013f7038514b\n6fee602b-8423-49d4-a701-937a3a93d054\n30d95415-3e74-4601-8a89-0ff1fb8aded6\ncb9d6b38-d9d6-4dd9-b22a-29504f278368\n7029e7c6-5730-4690-9e28-d541a071730d\nd344897b-9053-47fd-8c94-7143bc78acb9\n8e987422-0296-46d8-84d3-00e83b9dbf16\n5b74d9d9-a010-4958-8260-f9703d59ea4b\n2cba3e50-9b28-47a6-8e16-cee79a1c486c\n37cd4b21-5cb2-48fe-85c3-1d2c76b62ea6\nbb7cc19d-5393-417a-971b-138ad400e24b\n2c54e978-b4f9-49df-8360-67e6c4c91ba0\ne2b7b800-0394-4f61-b6f3-9b3c1224458e\nb473641c-f36b-46a5-927f-63dcdeff1a07\n0988b909-a939-45e9-8f05-e472a95f4ac8\n9c931414-1e54-4b20-97d2-2df90fc5f6e8\n916e0da1-cd16-4b09-b609-363864161216\n9bd400e7-d1bb-4826-bb49-409c76c33c7a\n37114298-7d3d-4942-bbe8-d6c8ce03d6a9\n2dc960a6-b444-4475-be55-1954b4148001\n002a455e-5d08-4f47-ac37-dc9d5390f618\n0f5e69ec-7f6c-4145-a5a8-0ba9481c514f\nf0b6a747-efe1-4b48-b25b-2a8c7d769210\n425a5cf3-8493-441c-931d-ccd1b090d7c4\n2bf11a2b-019b-40ad-a27a-aa334800fc09\nff9c6a12-921d-47dc-a062-aa2001ad09e0\n9ce5a553-20cb-4f26-9698-46af13e4ec0c\n92d66bce-c373-4064-8b14-fb2d1437d9fe\n82e26772-7ce9-4e87-b0ce-e6167a89c640\ne80c8fd1-a194-4bb5-9696-3ccb35b19d5b\n87c6371d-0339-4719-a5ad-d7c8d238bf95\n95403448-f319-47d7-8197-5c9f2554d2de\n6ab3fb94-41f5-47dd-82a2-52bd8c47e593\nb5ff6285-af04-44a0-948a-8b4b6bb78772\nf039510f-9efa-469f-a125-3264c4d8f794\n6133e814-a4ac-4128-8af8-d9c1562f0d93\n6a9f0a45-2a5d-49bd-a7b4-447bfaf0403c\n75169c62-1c71-4941-8864-1b6b68631f33\nd8f734a2-697e-4c72-856f-0ae2034fb719\n895d6484-70cf-41d7-b9a2-f26ed35887bb\n0fb9298a-6ff1-4ad9-b1e7-23c78bd5dde1\n348e7638-b95d-4db1-9775-8c4196eee542\n6d7ccd41-21c0-4b9a-b5a7-367c6db2c79d\nb9145e81-4125-43c1-8ae0-5f5ed3d4e72b\nd061baba-4aa0-4033-b635-d0903f1676e8\n6dea4ac9-4dd3-4267-9b8d-85e94057a8a7\nd2ce89a4-8b82-454e-9a80-3e4cf58197a9\n0893d800-7e19-4600-aebb-9c30b842a61e\n784246c4-622e-45d8-a278-c60502f2d584\n64d648fb-8d9f-4eee-b9a6-43a30a263d08\nc0fae0c3-91ae-4480-8b3f-5f9e2078f928\n1a213291-97d7-4a29-86f8-e5916e6ad6ea\n3fed8d31-25a4-465e-9b06-f8d7eafe2d18\ndc7dcc76-59a7-4d9e-9cde-9518cb61992f\naac93ad7-3277-4944-8dbe-6e0a8088d9df\n05f797a4-87ad-41d3-88e7-4169a49443cf\nbd2ce8da-89f4-4d9f-ab31-d0a1ff70eb85\nac2624e1-92c2-4bdb-b7ce-cde4f0a11267\n3728a539-3624-45af-a882-da00747945c8\na963c74d-81a9-4d6d-aac4-741cb3452304\n94fcca19-a5bf-4523-ba5c-639aeb6123d3\n3da358c1-e3e5-4162-91cb-70deddc47b52\nbb3901d8-7761-4c4b-a458-37055458daf8\n571dbf37-74ca-4895-8417-342395830937\n83d9a239-701e-4629-a19a-0e045b12b8ac\n0b4e27ae-30e2-40c0-a7ac-9db3396784cb\ne20e3bb3-e7af-4752-aebb-91b849ce1a15\ne0ea82e4-ec21-436f-aac2-61089e2d2fc9\nc9880104-aa79-4ba7-8bb9-076c43272f00\nb1f50021-51a7-47f9-85ff-7b2c7c2386b4\n357c508e-d490-484a-a07b-495f240712cf\ne7b93b64-944e-4110-b16e-0ed9c1e15b3b\n743615dd-ed5f-456e-90c6-fc64b7254989\na503b1a0-a79d-4c73-8b3e-48bc6bab771f\n76201350-8cb0-4f88-9f5d-8f14d1c25c18\n5168dd8f-675b-4e31-993d-630311ef4714\n7b19ba7e-6b28-4de4-8138-279156704192\n02962f00-8c24-4750-9036-461d656c6f74\n9c6867e1-dc74-444e-86b6-818ceac80dbb\n0b2f208e-d51d-485d-bf23-1cd23d6af39a\nce2d393e-8df7-4fe5-9156-1d4f196e4ffc\n7ea3143f-ca9b-489f-be9b-717b3b6004cd\n3dd19368-ed5a-4e92-a2ec-8dc9cf32e511\n44f9232b-39a8-46cc-b330-f7a7b355dac2\n898e84c6-c870-482a-85ed-3fedfdd2ebe5\n833ec632-881a-4f70-8229-57d9db6d7ad8\n6852c3b9-0037-4ac1-a28d-fc08fa3655ed\n79774ce7-3c8b-406c-a0f3-f1f33730bfb0\ne32ffa39-78fe-4e7e-b6d0-c4c1417f4e4c\nf10a1a24-80fc-4b97-ad27-c4f0058ff6a3\n39946287-fb86-4823-a8ee-7328299314b4\n331eaafd-4b33-49e6-87fe-6a46d6465955\na8eaa221-9b23-4d92-a6f1-51f0f18ff2ed\neef46da1-c201-4f50-8f61-750e82c3a3d4\n83bd0eba-7c50-4f5c-bd01-d340dd858eb4\na95cef39-005c-4b70-8195-a219f7d97792\n59099935-2e17-4b53-9f49-299f45c3c1eb\n0a1f7343-af52-4b51-89f1-01d7dc0baac4\nef3b99ea-1e05-431c-b58d-edbf8d669851\nbce1b242-8149-4df7-b264-da35ecf05931\n4f126a23-1d7d-4990-83a8-05e633775bbb\ndc65ca05-4de6-442f-891c-091da4289ee6\n1cf1703a-d98b-4dac-a871-4d7e12ac2328\n08d9383a-5fa2-4fad-bcb1-cc5e76df6422\nf16bcc79-803c-40f0-a954-7dd62e6dd520\ndeaf2a65-65c8-429a-97d3-5c93a004c06d\n24750acd-3758-4f68-8f3b-0cde33cc6db1\n11ad9b9d-d827-4b8f-abe0-cced3eac2bd4\n9968d748-0081-4c80-b154-7ad37e1b2dae\nca8e29b9-b0b2-40ee-8e47-ff12746ae249\nd4546e11-78bc-4d59-afaa-89941c4b4995\n920d810d-b842-494b-a42d-8417540576a0\n0a7aea22-67ed-4afd-8792-1896f11c2315\n03cecf8d-e7de-4f76-9eab-8bb469d8826f\n50fe73fb-98a1-45e7-b28e-fd303c74a023\ncde0fd33-468f-4b83-b70e-bbdde5e61fe7\nf15bce6a-d88b-49c0-aa99-06f9744770f2\n6c5724b4-7e6f-4d0a-ba9d-d88ce657b926\n8244e917-555a-435d-94e9-ad519487457e\n40711140-6f67-412a-9a3c-07e22d04f8e3\n76decc4a-7448-41f7-9523-0bbc60d89f11\n42700272-4a7f-4340-8343-e407889ca50a\n9f3c97a5-b2ae-417b-8935-db232997af9a\n0907f2dd-6360-404b-92bf-17ac5663d9d4\n79c0efdc-88be-4d67-a9ec-a924255fa62e\n983c460d-5f91-486d-ae44-fa44bec695d7\n59baab37-5f8a-49c0-8fde-99d3ae0f29b3\nec837f00-1ed3-4695-b975-a973bb5a82c3\n31c62efc-d585-4be5-8484-fc63d5aa223b\n9ab8f89d-f870-40ef-ad56-3ff26804e4d7\nd4ef5b2d-0c93-4627-96f3-3c70f6633407\nf1ea2606-7692-44b6-af7f-8cc2dffed9d3\ne1085b59-7227-4eed-be4f-66fbe154c766\n54498500-c137-437e-884b-547ab2b2fd89\nfbeb10e8-25f6-4866-afe5-22d827c1e17e\n9d351e1e-8c4d-45c8-8b83-e4c53df4d11c\ne6d7538f-2147-4bf8-8a4f-be6251c96f55\n7e408b92-1e85-428f-959d-2d4d5d1d58f5\n022ef6cf-2679-44f5-8e30-b406a9894963\n84d04f8c-ad1c-4b55-8ef8-0ccecb05d096\n00f1d9e6-8ec3-401c-a2f1-c1d8b2efcee9\n024aedc2-ef8d-4866-ab36-1ca71ef48979\nee6e98c2-3e71-4014-9bd3-b0baa954b81a\na3606718-1f7c-4916-990f-6dfcc781c290\n223b0f92-b080-4845-a07c-fd0ddd8c7b80\n879af1cb-7030-421d-a3f7-ba59b55f1094\nbc0fe2af-a6e3-4319-8eff-e86109f22110\n78014d23-10f7-4e56-be1b-04a02f09065f\nf0590ad7-99ae-4932-84d2-f41233950b9c\n5caf2cd0-b987-4cc2-9b6c-52baa16716e0\nfd67c3a1-04dd-456b-baf1-26e97b36ec82\nd05146a6-df87-4f9d-88cb-6634d2c10a1a\n5732e4c7-26be-44ba-bd0b-9681731a0fca\n2a04c641-826f-4e9f-8688-112761d23ff2\nb57bb8b4-918e-4c1d-8878-faf628218383\n8402620a-ad7b-4621-a621-17dff85196ea\nb5efd690-60d9-434e-90e8-68d56f1fa037\nc046a39a-d8ab-4f36-8947-a5c4af365c74\n5501c772-552a-4eac-b6cb-000c92976902\n9e39e40b-7005-4872-978c-9863eb581e3c\n91953871-f36c-4807-8b86-b806a49553dc\n884786d7-83db-4434-82bf-502038fc30ce\n48137a24-90dc-46b5-ac79-a3197766cfa8\n38c6fc67-27ac-40c6-9572-b386f64ae7c4\n501317fa-1aec-46c0-bed3-12c56ebd6d3f\n7654a7ce-1a2b-4613-857b-f774db356adc\n14d9a9dd-cf52-4124-9176-a0fb9dbd63f5\nbc6f89d1-e98d-4b5e-a11c-2b0e70ac6f7a\n252df808-a41d-43b9-9e07-9a71a4ada55a\nc4a6c1ec-f969-4b1c-b2b2-1767129a560c\n3bbfdff6-6a98-45b9-9a00-03d2537868b8\n7e169ac6-2412-4f4e-b6d6-60bd36936fbe\n740d89f4-180c-480d-8b08-6ac87e0b3cb1\n74a73771-52d7-42b7-9b9b-314d4c9f6cd9\nf28fef93-24d5-479b-bdd9-c534e89fe413\ncf66aecf-b677-4f46-852e-9b4b34f60de3\nbe0040a4-a9f8-46df-83f0-9c3e3b9f5e8b\n6b6fd81b-b941-404d-837d-7921810112a8\n59108ec7-edf4-4b03-97dc-cf2b8791d158\n221fe96d-2137-47af-a80e-d7f569fa2351\neaa32553-ec93-4ca6-bf1c-f375034fd683\nb2311624-db76-4fb3-86cf-9b73219090b3\n1f024ffa-3105-4a21-a5ee-e64258bf04f8\n8e7a541c-529e-4d47-8097-5b52b5f3a9b6\ncd6e405a-ba21-473f-bb80-43b2b437a390\n13458206-d82d-44a2-8ae2-440f2618b957\ne56ccdba-c0b0-4ed9-8cff-c9ac5e722023\nbc369de1-fecc-498b-b296-eaf81a02e9df\n9992f23e-7e3f-4a2a-97b9-e1fd710a9ab9\n08d7024c-4018-4174-b8a8-954d508c40ca\nb68a3061-bce3-4bb1-ae35-d4c7f47db4fd\n9085518a-0235-4e82-b852-35bb1056d5a2\n7c870874-af57-4979-beb1-a7d0197667a4\n05a2d160-29af-43cc-9d8e-1fbf0875e92e\n738e4715-ea18-4791-8d51-1d3ba84087d1\nf9feaa1c-60b8-4bab-a8f7-f96ac867385a\nc913e91d-4a53-4d29-b037-7370ebb6f13f\nafba30aa-cf62-46a0-8088-f64be1e90ce2\n743ffe45-0028-4dcc-bda9-daa531436666\n3772a5c0-dd37-4318-ac3a-6bfaff5350bc\nc71b3ed6-964c-4c3c-af59-8072f18308f6\n62361ce8-53b8-4639-bdd1-1ffc7697092c\nac4e5f6b-0c7a-4bdf-a623-d8e6c791831d\nf7db4e42-a652-481d-902c-b382edabc233\n3ab56039-a700-44f4-b38c-466688482979\nbade9d6c-58a6-4c8d-9022-baa0dda5b047\n47c90529-60b7-4300-abe6-03629c0b40f4\n7889975c-1b0f-437e-8719-28cec860819e\n2efd1bc0-1066-4409-9f30-e1b7dcedec68\n6e4e7420-12b1-4506-9b74-fa22a7d8e130\n7018d165-aed3-47ce-9555-6cdc7af001cb\n7ab8e2df-a25f-4546-b87a-4d56ece09721\n6e529401-9579-4398-928e-f4b5a28f6464\n12437d4c-e0d4-4131-b6e5-a2660d513f4c\nc849880c-dd22-4d27-bb31-e5387cb35e6c\n6de5953d-5353-4c2c-b170-0f35f1925361\n8dd4b63a-4749-4c15-bfd6-a8527408ddfb\n018d5849-0633-4a89-87a2-d4a03a1bb671\nb85e8617-53bd-4a08-93f1-1440b3d7fed4\n274f72a6-c718-4cba-b22f-414689e6c0c9\n678927ab-e7f8-42f5-a774-46e1f6a14411\n507bc250-5457-4ab5-abe7-631433edd545\ne2be6939-93e8-4506-a845-3376c52ca078\naa87453a-e464-4910-bcc7-4f52d8dfc21c\n3f1fd706-86f7-415f-8345-0126552d511e\ndd124231-67af-4648-8797-3a2f7242d1a1\nc6d52be8-93a1-4999-9a29-3942230e3601\n042a1d98-2848-4bd0-b3bb-0c1d072add58\n63144df1-6a0c-4f15-b322-60a144319942\n27e3f099-670c-460a-bcbf-a22e4d07593c\nf5bc7bed-a386-4393-a1f1-ba06048d5416\n067c9741-36ef-4fab-a2f7-38efb8edfca9\nffc37611-3a06-4ca1-a101-dab26a32d0e0\n4370c7ef-a42d-499a-902c-e1783ce04150\nde828904-5020-4f32-985e-ff0040f58056\naf5ba419-4331-444e-8108-75914d047909\nf575cb4e-613c-4751-b3a1-14ed72db3c5e\nf582c264-7eab-4e4a-b72e-32eefe8e7571\n242b7428-9ac3-4b6a-a182-97c0d10b01e0\naf540d5e-abf3-4715-8871-fa5ed27f4e93\n9d008c85-44e8-4ea7-94f0-eb6b87e69fbe\nd38ed6c0-547a-4474-bbf6-fa356e10672c\n2827dd62-e156-4d2d-b26e-d1183d70e231\n89b6b339-9b90-4092-9ee8-6f09699ca985\n1a9ec033-7c4d-4263-bf22-9ea49a2f8bfe\n58322ad2-6596-45c6-b40d-b9b0666e9139\n971e2f4f-0514-4b3f-913c-b4213399b3fe\n654c7aee-86e2-46a7-bda0-868a3ee2fe26\n8db2e0d5-bcda-4763-b180-f32eb54c4e7d\n0e1ed1f7-313b-42ea-8be3-4ce06e9d4148\nf207b070-d63a-4266-8169-8ec0b1db66d9\n61b5ae33-5e63-4b3c-9696-700648e58504\n0301165e-45eb-423c-b875-a0e1bbd86b90\nc280b066-3a79-4cb3-b842-255e18845b86\n36a30809-b976-4e3f-97fa-15b4d5a8f722\nccaf0e9a-1d93-4c8e-8834-74ed19fa9352\n398de59f-8b6c-4c9e-b2dd-02107a824a6a\n794d3918-8cc4-44f5-895f-722bcd3d3e2e\n5265c262-66a4-46d6-a0a6-6fd5de099fa9\n6a4f2236-4261-4965-accc-d50679b912d5\n247bb520-a4ff-47dd-9dc7-6332eaacd8e6\ndc9cc653-0365-467a-b914-d3d2e03b6d71\nbe24e183-8169-4359-b3d7-dae3f15fc316\n549f6e9c-a367-4b35-bfbf-042aff63235a\nd2d489e7-d19f-480d-b145-0a8f2054b771\n0e9165d8-897f-4ab5-95a1-f5eecb413024\n994824c7-189d-4bf7-9d10-c3f140453678\n9a590b8c-26cb-4e04-b305-c5ef442c8676\n74e4f65c-7b18-4818-9cbb-2fcbc0bb9084\ne8cdaf9f-faf3-4a8f-9ead-85a169aa75e6\nd7c372f0-43e3-4deb-b6fd-ff24e71a00c7\nab39aa9a-5dd3-418b-9c89-833870714f9c\n9a196407-6471-4d79-8048-b12f6f61e0cd\ned36feb1-9c5f-4154-abb1-79567d0f2fc2\n5a85d48f-fa96-4c5f-a022-5a17cd49282a\nfaa9b052-cdfd-40cb-ab39-1c4104ea2d97\ndd461ef2-2c3a-4a46-a264-74bbd7d24283\n5fbbc9ac-f495-438b-9ef0-1a6a57d8cde1\n19371bf9-f28e-4259-9480-3b7762b7cf86\ne64eb69c-c780-4c68-9f38-fc1e20fe212b\n91085821-a130-4179-a44e-427e2af6b3b3\n32778c43-dcc0-4965-9eec-80026a482817\na614fe43-f33e-41c4-b4a6-7ccbd4faf5e5\n4ae4b763-9caa-4a79-8c2c-0ef5294ddb65\n7d9b9e90-6a4a-4b45-a003-05019184c6cc\na3c5c553-f968-4bee-8392-654026b7ed9a\n726ef135-2505-4fac-b4c8-87c280cbd907\n4b687ac6-2f14-42c0-a889-bd3d248871d1\ned6bfd7b-05ca-4b73-b95b-0ee873dc86cb\n3d7d2fb1-92b5-48be-b458-333b10eb7ffd\nb4ac2b24-c048-4ca0-854b-5da60061dcb8\ncf47fe2e-def9-4149-b841-c90122da5f82\na0febe10-8b4f-43b7-87e4-24a857949031\nbf0a480c-06c9-4a83-a987-874283ee00fa\n28424db4-8f9f-42f7-b284-72fa54db7374\nd30ad009-6ee2-444e-a71d-8af9d5f8c44a\n48cdd02d-65ff-4378-a677-63a9c98fc53b\nb45fe8e1-8c1a-4862-8d1d-fc45163e1dcb\n16bd9535-a596-4839-8cd9-9d4782e44a91\nf868134e-acc6-487b-98ff-e0ad5c0862f3\nc6a3e469-a0ca-4afd-b68d-6a7723c0e5a5\n3eb03ca4-adee-4590-ba84-25c6b7d896e4\n5ccc89aa-3945-4aa5-9c80-21cfecb696b8\ncd3d5737-df38-4a22-8863-6853f6b9f127\n3533355b-922f-4bd7-a405-a09a6e6f189a\n002e6a5c-0c41-4eb7-a33f-3491fa5e4934\naf0c8fb3-963a-4ed7-8aa0-dc7e90e35ff2\n5806a3b2-f1ed-4bdb-828b-94f96e6f2b1d\n671df4f5-ef9f-43c4-be3f-dfc31e9f3099\n03104156-a2c8-4f32-b113-c05ef2906ce4\na1057761-ccb1-428b-b234-0505785b99b8\n9caa08e2-ccd3-4136-9a2d-139dc3632dad\na87b7c93-a75f-418a-b3d5-d370d944634a\n124b5c9f-2305-4ad8-91b4-31f6602c4c87\n7b83257e-d2ed-4245-9644-5a632f4cec35\n6b9e7398-20d8-4c08-888a-491599e311d2\nb1d66415-bdd9-4f15-ba8a-9fd6ffde2d74\n0595fdcd-d4ce-4d27-afe3-be311dc66a6e\n7e1d037f-fd29-4577-8a86-72bc82ba7964\nbbe7e120-eaa5-48dd-8773-7dbc39d26a01\n0642c22e-9f27-4553-b2a3-78474f09bcf5\nfa6a3cc1-f6bd-4878-a943-8b148c4cbf48\ncbb6909e-909e-405d-ad67-b4c58e0058dd\ne8005814-bfd8-4e5a-b243-05c061afbece\nb18b88a9-db51-494b-adeb-17944d8abaa6\n719e8cd3-ecb6-472b-a3ba-6698c1136fb0\na80f53aa-70da-4640-93cf-dd7ea1e34870\n789709af-c2a8-4fa7-aebc-79258ac7c9b1\ne6a4a5ca-cbbb-4aa0-a744-f1640026b65a\n76633bf2-7fe6-4082-a7e9-67ae3c12c96b\n74ab65b2-c300-4d47-8b32-ae292d108ed9\n5405943e-08b0-47f3-8ec0-1d48f80914ea\n5d9b6876-2c4f-4daa-810f-0b8d7f43c76a\nded85980-8bd8-4345-9829-aba1a6f9b681\n114395bc-fcb8-4e99-a5b7-b80a16afd916\n054dce2d-34af-45ef-8885-0cb7532cca5b\nf07164ad-d175-4855-92ba-d725a090df87\n80fa628a-8289-461a-a3d0-c48987933e23\na647af04-6ace-45e6-84fb-0ff0f2cbcdd8\nae385b4e-8d5f-4879-846f-163d98ff2beb\nd3b7d9a3-8e3b-4051-85c0-b195a312eb16\n408124e2-376c-4806-b0b0-3af56c80cbdb\nd2eb4e86-d3f6-492e-be68-72a0ce732f4e\n6f3ba989-d681-4694-902e-23f9b164b686\n5a77076b-90f5-427c-b5df-d4d5ddca4557\n44f0e091-cc0b-4bb2-a215-5b73fb6f858a\n2f25ee9e-4751-4cf0-af63-a3db0f3b11b7\n48ed2f0c-5a73-45f5-998d-a689200a9ccc\n4c459b8e-a63a-4ff6-8cb5-6cc12c180365\nb9f4bdea-78c0-4fa2-9a02-9a04a09e86a5\n3486aba1-e4a6-4d3b-9836-3c8d6b42ddb1\n1ef5e039-f403-4ce4-9ae7-1bb3073eb83a\nef128d54-65e6-4aa3-b5d1-65e2898481dc\na4244718-2fc9-4076-9b9a-f4d324888cbf\ne20e0c2a-9516-4163-bba2-4eab72b0510b\n787c725b-6d63-49a9-b758-383e4d1b2585\ndf50c5eb-3903-40be-bbb3-fd8518d21e36\n71278148-5aae-42a1-95b1-3589df2a42a9\ne10e0a4c-cee7-405a-94a5-79fb83b774df\n96263112-b650-4425-a2cd-c25080e17011\n70ebce9f-45a9-4169-8993-4b625b760a57\n18f2def4-015f-42ad-9726-ff31d21c534a\n2ec30cd9-2f6d-425d-b4c2-49a9bdde18bb\n155ea679-7e48-438d-93b1-334524da9b32\n545a9c34-8b30-4d87-b424-cec3352935ca\n90266730-50c6-476d-a291-333076867a21\neec9c672-3e77-42ca-bd85-479f253744c0\n462065a2-7e12-4f88-b26d-d357e8286db1\n40998ba3-746f-40f6-a381-02838684f6d6\na02751b4-cf21-456d-8067-886de4e39a78\n9f8732bf-43ea-4bc2-8844-c502771d2b75\n75de8999-22cc-478a-a277-0af03c20b73d\n3626e4b0-c921-415f-b34e-5155374e8020\n766c5df6-605f-425f-af51-493a27e47460\na029027e-ab58-49fe-af0a-414176675f9e\nafdd8d78-ed41-4514-becc-9e5bbf4221c1\n49cd91d4-3840-4129-9747-9965d46eddb2\n91e33ddc-c7c1-4d5e-9667-7297e8a68601\nef5cee10-0470-4a84-b14b-9e1b119b1e4b\nc4fe6a14-553f-4415-9838-7242ef2f0355\n11ba7081-5a0f-4880-81e5-5f3c1c445dbc\n579820b8-a915-4d2a-8afc-db08273c3c08\nd461f876-3b5b-4cf5-aa05-bf2ff9d45ff2\n1c0a0b18-66e0-4fdf-bcbe-da608583f15a\ndfe9a080-12cd-4d3e-a297-7418975fb9f0\nec05f3c2-17be-4a6a-b499-40fb9820724a\nfa8bef3b-3227-46be-934c-c7b317bba979\nf12d71d2-5fa2-4989-84c8-98a265bdc184\n4013ecdc-71d3-4e19-81a4-3c5c0729298e\n90a508b2-0fa7-46f8-888d-60888ff1abb2\na184831c-f4c9-43d3-bf65-d38d90026c55\n35650ed6-fe2d-4d6c-af1c-93950510c981\ne4095de4-37ab-4375-9c71-de91d9562f2f\n0a9f14cc-4476-4e21-80c2-9e054238e37f\nad0f3919-c807-4d84-b002-9b2a81f71583\n3ab033cb-831b-4b7b-9314-dc8e21504b85\nef7e6e4b-426e-4802-8a12-6f431d04175f\n9cfafc8a-d499-4dd2-bd8c-9e3327cffb26\n9702c441-bce5-471e-a47a-fc80ce080a06\neb76b488-f5ab-4acf-be7f-af50030848b3\n643d991e-adfc-4dab-a277-e43141784b80\n38e51b70-b532-4eca-98f0-ae09d86bba47\n8cbb7ffe-f495-4aa4-8d98-187641dcecd9\n6daf3170-e47a-40b1-abee-f840244b04fc\nc45cc61b-de30-4e68-a1ef-fbea286fe353\n31e892ab-7ace-4275-aa71-d18e7af2d2b4\na23719dc-d3ba-48e5-b3ba-ab4cece1ebaa\nd4af668b-1b2e-4dc8-a8f6-a423b3dae59d\n0b4ce638-5f85-4653-9df6-388c2e338bd2\ndb2328a4-bc33-42b5-b754-b1e2505c50e9\n773ecfc4-2749-41cd-99c3-7c4729f681b0\na5de00f6-afeb-4dbf-ae26-adf81a65970f\n0ab17f96-5dc3-468a-8976-a4443f94b23f\n14cb7cbe-d349-4e33-9601-c930eed9b4af\n64d1c373-987b-4815-9817-6211508a335a\nba7fb9ba-7b3d-4ab6-81e7-2be10e8dafbf\n02442a1e-6795-4d59-91a3-ef73306e2a6e\n500cb08b-e8bd-419a-959f-4d097323aac3\n2eff51b1-c592-47fa-bc3e-e42320f9861e\nfc33e8f3-0f6b-47c6-be3d-8f5a3f49938a\nfd4220f1-81de-4f60-a28c-178c48bff8c6\n269dc505-54c4-49ac-a7ad-4f4612b33e09\n6d8c595e-82f1-42ce-8f21-25b40c904674\nbc5569df-2543-4bee-9305-eb35f5cec4c4\n92a38a17-370e-42b9-a6bd-385f668c613f\na3099839-d1bb-4bc2-9ecb-da597d2f5a31\n90811dd9-7b05-4b0b-80f6-c01bf5bdcdea\n3e55f3d7-5f8f-443b-a844-d50cff512817\ndd7e97aa-525a-4418-9bb0-c29db64efcb8\n08901914-0912-4f4e-9102-4a8d83c3d51b\nbb358991-bed3-469f-a1dd-6a9dff81534c\n71a31d60-c71b-4407-8317-6f237cd430c4\n1b526d24-2f0f-4c94-ae91-a34f6b8f76e7\n7b89d3e9-b0fd-44f2-adc4-f83252349956\nef68b4ea-93f7-434f-863a-b18bfebd6e77\n7c769681-e787-4449-aa42-ee295dbd7539\n778a2569-8769-43fb-a150-a23d740fda2f\ncdadf33a-5c0c-4099-bcc8-1b93e62dfc03\n6976ccea-22c8-4bf4-99bb-a033e52e8f85\n0f7eaec0-444b-4e82-b025-0633838887a3\n1bdf8a12-24a1-4b45-9512-943b77c8d708\n44e8a0d7-ad90-43cb-8ca7-6898e7afc7fb\ne7dc241c-b26e-4a2a-a711-1a184591458e\n5253979f-95d7-466a-be76-c96ee535b7e6\n7f3796ee-b88c-4918-9d7a-ecae10238ab4\n67a18c89-c34c-40b4-91e8-611d636e37d4\n5ab7410b-6fac-4c99-a7d8-1fb55557f66e\n16c5e989-a675-4504-a41f-baa964bc504d\nc6ef33aa-5487-40c5-8a30-6b6aee6ab05b\n1aeac78b-d6bf-4d8f-a8d1-e7245ddca678\n1b529fff-9027-4dfe-85f0-87d8ce8fbf46\n8ba3d3e1-25aa-4f05-aae9-1d15c7607b95\n9501f73e-345f-4811-9e79-fae61fe74455\ne53280db-1ece-47ca-afd4-c62af4ff17b3\n2d2b1720-16ee-47ae-ad7f-d6dd8dfe08d5\n0cd70a14-397a-414c-912b-d32a53f3c56d\n7577f23e-c983-445b-bc80-f684efff372b\nf573df57-d91b-4c78-bb7f-5ee409b4c782\nad90b75a-59da-42c9-a651-0e61f43c449d\na82e0a8b-2a49-4025-b486-b4b09b29f84e\n91cbb93d-27dd-4f47-964e-e9bf21160663\nd3628e08-b4fe-4771-b8c4-1d2bd6150e77\n60e00f88-9b1d-438a-b63e-ae75683d2636\n5b2ce224-e8f2-48bf-8367-747a6a070382\n7635e93b-b594-4bfb-b03c-72ee3f3a0f8b\ned8b6a50-ca65-4003-a950-efb36e3877a0\n106d46e1-62c9-4169-8923-c90b31f51fdf\n5f726bdb-275e-4168-b00c-ccb9c82f3ade\n24ddb7ce-2f2d-443a-995e-235a9efa640e\n7e49adc2-84b1-4f59-95fd-1ccff2c7c0c1\n8ca2ab0d-0396-4cac-94f4-830e1a93af94\n61a0057d-26b9-4856-83b5-705b2be56519\nf2e895a2-ffcf-4c18-b693-f454091c6fab\n9a2f0879-b40a-4e75-ad29-348f19c27bec\nf3e0bfc2-2630-4433-9524-b1324f014a9c\n1b4dc462-40b3-47f7-8ff3-14dd3a147e7a\nde8cb9e8-56c8-41d4-ae87-8b092a9971ff\n1b0ca2f9-bd58-4df2-a4d3-7b8210116ba3\n2a726b0f-c4dd-42d2-b941-de7a470e0c4a\n11874f78-b836-48aa-a398-7c555bf98290\nd1623f11-4362-4ecb-a6ee-9a2499987b86\n8c7e0797-7fad-42b1-9a57-fb7c427d13f0\nfbe55d58-7685-43cb-9b5e-e2b45c2f7b15\n9c99e0a2-625a-4c9e-8024-9c79b9b0fd2a\ncf00c318-2c9d-4f63-abc9-3865c888baaf\n7d3c8d67-f03f-466d-a5fb-ae069921afd5\nf08cdf46-41b8-4443-807a-4391032b966b\n904f2dd5-0892-401b-b04f-e86dab9b0a8f\n93f216d6-11a1-459f-b8d1-a0be7eacfb43\n65f19992-f136-48fd-b090-ca54ae55a037\n2a68cee5-23fb-45ac-91a4-a2e7ec4bc1f9\ne53d0589-c8e0-4e12-b82c-d8c08918f167\n63e34f37-6c48-4fbd-93d8-15733de3c9c8\n00b78ecf-c8bd-4a31-b6c6-b5e5e0ff350c\na55582fe-fa24-4e6d-ab28-81411558c1f8\n1cb4e9e5-94af-4c97-81f4-ca942fdeaca4\ne8159175-cc87-4ef4-9e14-78036ffdc0bf\n6f47bc06-acb5-4a70-a49c-8766a8453e85\naf46b3b4-5e99-4d37-99c5-291c78301cf3\ne95e729b-d104-4e92-a1c1-f90a89f66fdb\n10cd687f-89fe-4190-b89e-7f7dcd54dad0\n04bdd9a2-c6c6-44ee-975b-bffe74b5968c\n38381ae3-edf6-4ead-a1a8-7c1f40a0edcf\n6116f38e-1088-4724-b1b4-e95a5bc86d29\nf7554da3-e555-4872-a8bc-2d8dcb235f56\n695bd6fc-000f-4470-a54f-e0481c09d685\na809af2e-8b79-4a2f-8367-d9a5c23c11a0\n5d51c9c9-3dcf-4f19-bc8d-9c2812a3bca9\n2aed64e3-f923-4d80-a44f-5d27fb800834\na2ba5365-460e-4cca-8b2d-f7cc242bdfc8\n307aa368-1a8c-4ac6-8b30-1b9c5383a231\nc4ac6388-d793-4fef-a91b-8c5b716cf905\n341023be-c13e-4df9-925e-159908bf88cb\n9ac9ab83-0567-406d-b8ad-31142ead4f98\n6d968d74-6a74-4a81-bb75-a27b78df94a8\nfdf30327-8d07-4114-8ad3-82517838a0d0\na7aa3773-79ac-4b66-b19f-a31a5cbb2df5\n6da34891-99d4-44de-9bed-31502299ad11\nbbc97d9e-b837-45ea-ae9a-04f44b6aba59\nc0980ceb-7e6c-48a0-88e3-341c872613c6\n2fbf1f28-2665-4d0a-8e30-11bc1246e40f\n55367d2e-84a7-4e5f-a6a9-a744ad55737b\n46fc7c0b-f645-4589-9704-2a6cf5ea71fc\nc2ba404e-df50-4894-aa58-14396ba7a5d7\nb7e8d439-31be-44d7-b308-b9f12ee52095\n66577fa7-e45a-4f69-ae09-cfe5c6bdf0fe\nbf78c803-3390-42c4-8c42-41ea014f90cb\na10b46cb-4a4f-4713-a8ac-477ee96b9176\n8cd85bb8-d57e-412b-8e19-7f91ec818179\n59b53dda-261e-47d2-8d34-42fe59e4942c\n5e1d0b68-d69e-4001-ab30-65fc3cc0ae23\n6bd54b81-432d-432b-97ba-d15cfeb10060\n19798450-a43b-43f8-a3e6-81ea2de5deb2\nd35c9a73-e092-4eca-abf0-a2c49b1f2b3b\n67251680-767c-4e57-81a5-bf6910ee00a9\n972f719f-bd9c-4790-ae7e-5a82f533918c\ncfcbbd7b-043b-4210-9a99-e1378d3233aa\nab1c056a-7b76-44de-8664-06f6b1e49de8\nf082e4c8-3a0b-44c5-92d1-7d274914322d\n0a793372-60a2-45e1-b783-9b4e09a28602\nc33406d2-c233-4fc8-ac77-744b29b28298\na52e00ce-381f-47fb-9c97-85256fb9b4f8\n3a01b37b-d993-4a75-8b07-5c4dbee372b4\n6bad5146-1ef5-4e34-b5d8-b6fef2141bc7\n97116fac-a745-4d89-b066-ce67583a4cd6\nf410bd2e-6580-4096-a317-b4f53cbc1ef0\n41d8d2c9-d960-458b-be6a-1fd3fa10df9f\nb61545d7-ebb4-444b-8e04-ca129a0315c7\nae8e7733-56c3-4650-a138-1c14fb961df6\neae795fa-bd07-4e7e-88ba-8083c1ca28b2\n8299e371-6dcb-43bf-99fb-6ddaf9352f7e\nb27211d0-5f35-4e99-a9ac-54334ce5d8c5\ne3e000b7-337b-4e87-a2f9-7d70d4d1412b\n877e3c97-e10d-43e4-b7af-624a49f6a23b\ne898f559-a672-4a85-b901-103013f133e0\nfaef9099-2dfd-4b93-b1b6-93ba0c6f0c35\n71451471-82bc-4811-8f62-1a015c5bf2b4\n5d16ed5b-624c-455e-9d17-77acba8dae82\nbf4674d6-0e70-41a7-ac0a-eac3a67036e1\na73e0bac-f0f6-4762-a258-94757c5d9012\n650315ed-3901-4bcd-85d8-e8d532ff9d55\na0108b9a-d909-4fcc-a673-705d3fcbc3d0\n0b5536e3-8b90-4b4e-aade-27f12fe26aa9\n87da0b41-acbf-457e-9206-22235834898b\n2ea5b9a8-a2f5-406b-a82d-4962ae8dbf9b\n7a83abd2-906c-4779-affd-6edfea97959b\nfa10a596-0231-42ca-81f1-999d0e3017d5\n5801b3c0-e4ea-4ce2-8663-ef2d4cbf4596\n940f1bd6-0d63-441d-b9aa-fe2e6578ad9f\n847a531e-13c8-465e-bf08-b6f0b2ba14e0\nb512b0dc-c42c-42e8-ba58-2eb42adf2354\nb1b51c4f-68d9-4d5d-9666-5d6d0b4c3ead\ncd132bce-9808-4367-97f7-e95691c69c02\nf06c5b04-7f3d-409a-b2c2-78d2207ca8f9\ndb3897ba-ccc4-440b-ba4b-3a9eb06a3c93\n29e5d6f2-35b3-4e44-998f-43969cbda5dc\n118215e8-6009-4d63-a3e2-4624c77ef11b\na0f9c346-8960-4071-98f1-227e2fef5401\n2cdf1fe2-366b-4bcd-94e8-b2304395c729\n9f95b93a-44b9-432c-96ad-8e5a362e4e3b\n45fbec04-80c8-4a5d-a045-420b26bcb896\nc55a7349-f84f-41f8-96d3-60c03ef5e83a\n7a02f38b-b605-4216-8cd3-005a8d39202d\nd8e8fef4-6f3f-4196-85b5-cd96fccb919b\ndda9769c-97e1-4dc3-b2dc-a60d1dd3497c\n88022da0-2d44-4568-bfe6-728d64523310\nd53899fe-fafb-419f-86f4-fb68030219fb\na980bc31-5008-49e8-958a-d836407e194e\na92210d0-7d50-406b-b16b-01e4658516bd\n5bb62401-132c-4cd2-923d-44ccca1f004e\n2ed50a1c-d6bf-442e-b32a-5d07b636b987\n97c810c1-ba6d-42dd-8bf6-b3b111ebd652\n7b6845c7-4015-4630-8b52-567056ef3adf\na0323896-0fe0-41f1-b8fa-cda8a4bebe4d\n44ff6984-8ff0-4e71-afef-a358e6f9ae50\n432227d4-bdd5-4e34-8747-cd2d4aeea738\n6b22cbfe-6a95-4a5d-a356-6516da4240bc\n3c672383-bd40-4d3c-aed0-af666274531d\naf659864-53ba-4269-a6c2-48a05097790d\n59e2b994-e93c-4846-90b0-34949cc9aa82\n08463a5f-5deb-4f3f-93a8-1485a045938e\n2f0b1db8-0273-45c9-a2db-3d60842aab8c\n8ff1b500-2304-4dfa-a8fb-ab54bec3d4dd\n18f62325-0abd-4154-89c8-e0c3a7028624\n77b518d5-926f-4693-bf68-9640bf3eb116\n417b1f2a-43b3-42f7-8f74-6bf43418964c\n9c443c13-6273-4644-8363-f68b7333426b\ne2588b01-94f3-48f5-b486-2035321a4cac\ne2a48dd0-ecb4-4ac0-8d2c-a26ca664bb70\ndf5c1bc9-9b12-4d60-b4fa-1fd6d0e2c7d4\nfdeaba8f-c6f0-403b-aa86-aac395c85dea\nce7bda4a-039c-457c-95fa-f44256fe43b0\n6cd284be-6a02-4b25-b7e8-3d02f4708295\n362397e6-3fd6-4fc9-9936-895b5e64a721\n6cf6ce22-158c-48cd-8c29-be8fb03ec4ff\n06e2a612-e4ea-4d10-9bcf-dd4b9d9b97cd\n169d0675-efb9-4cbb-b3bf-32424067a741\n1f358d54-7051-46a3-b56c-591f4e0b33db\na8f4e5f3-8bbc-4df5-83b2-02c577db68da\nd4aba258-026e-4ae4-b72c-04212f07b7fc\n24cd8531-3fcb-44c1-a50a-7119ac7de2ed\n0d65870c-6ce6-4e50-b114-b08030358863\n745f4aa3-cf47-42fa-8d62-995cd0d0f968\n7e143bc2-ce27-4159-9a21-049598054859\n143df244-a982-4998-b07e-6384abde2fd1\nd764f9ce-af6f-41d5-8ea1-18a1105c823b\n40a64fae-56e5-40e9-a45d-1d75dc3a597a\nbc1f1a36-0672-433b-8f56-e9fc9e4804c7\nd985a5a5-883a-45ff-96ca-802832160340\n16b6c70b-6bf1-4186-80de-30b5602a3a52\n7f484764-8518-454c-b775-40173b4a4200\n50cfa62e-76d9-463c-a6d8-ee406eda8947\n38deffd7-84ba-4de0-bdb8-64fb8f309193\nc226124a-fc82-4d42-80da-88356eca4c5f\nb0c2987e-bf69-40f0-a313-80daf29d6e3a\ne6ed0a98-0713-4bca-b625-4010e8bfe5ee\nb8883bdd-da24-4ae0-bb72-b432c115a1af\nc17f4bdb-27b4-4e6e-863a-cf4a4a293f32\n3a701489-2003-4488-9136-7f723eb837a8\nfc573e7a-feb2-4d49-b304-8837ec03c11b\n2e7d0f3a-368e-4fc8-a5e7-1eaf290514d4\n77abdf34-7ea3-4fef-9910-0204d7d4d29c\n9742f3f5-c9d8-41e9-be5f-dbc25d288a39\n8bd86a42-52b5-4645-94a7-8604c81d29e2\n05a99fd9-bfb7-4e43-b8bf-52e97c17fe77\n1f7faf48-c33c-495c-bab3-2bcd96e5f3e5\n546be879-4050-4e92-9a1a-0d3f7dec1925\nf111ca00-2570-4ef5-9c64-acc51e566e91\n0e2abc5d-ac02-49e0-bb97-54f679b382dd\nb8f65409-6f1c-415a-9401-ee12e73e1d23\n320fa64a-7537-4944-b6e2-344564502ab2\n5d4dffa7-1c7c-468c-b190-a5e00f616230\ne3cb8a60-c8b4-46d2-b39e-66a11bdb442e\n30bc5bbf-f1f6-4cf4-aeaf-bf2f0a71124d\n54831519-e18c-4e31-8fe4-c1fa28234918\ne973cfdf-6048-4aa6-8063-3b7bcddc8168\nc04794ee-4097-4273-a7f3-1d6ea749fce0\nc651e3c1-6b03-4345-8c90-1cf7637aab08\n39e50ee6-1f2b-42ff-9508-774786028a95\na1847851-d376-448e-80e2-316793224d3b\nef5fb02f-fcad-40c5-892f-f7c78f88fe60\nb38ecf93-ae15-455f-8e25-17f03201746a\nf50b4c10-617f-4b7d-8dd3-a49094abb407\n810dc213-f73c-45c4-bec5-87f71aee22d5\na825e153-0f5a-45ce-bda6-0e3e6481fb9a\n1a2b98f8-e305-4843-bbb7-803a36c89d92\n50e50ce5-fa6a-4c02-b2d2-856932fd8d18\nb698663b-fdea-47ff-a439-5b1c4056908a\n7e700df7-e6d0-469f-93e8-2bce5b73c8bc\n5303648e-fd24-41dd-8901-cb5d95b669ab\ne8882573-efe6-44fb-b992-ce6c22bc385c\na58bc38d-1366-4834-af2a-398f9644b0f9\n36d1c0b9-26de-430c-bb61-f9bfcf91b98f\ncbeb64cb-ad15-4efb-a73c-e17b5b1a3fc5\n346a4dc4-ad76-47b3-b9e0-9c983636cf26\ne5b9e48f-1488-4fbd-8f23-6712d4a8b850\n978b5229-3dc9-45c2-b853-c8777cfc6a22\na5b51965-9056-4620-a0f0-7fc651938098\nbe9b9034-e1e2-4fad-b20c-58c11837aedb\na8667efb-cc25-4f55-aa58-141d4bfb941c\ndb6da59a-752a-4b56-9764-c1b53764b46e\n6920787c-b06b-4c46-9a5a-f2971b4a0393\n5033b717-5d22-4a5e-af88-a26a4748908a\n78c4b5e5-0783-48a5-a2e3-c95b89861c3e\n772aa7fd-179b-4a06-98c1-dd0c7d8b70da\nf0153bb3-8ba9-45b9-8706-b0c5e90e53d2\n58b2cc49-9541-4e51-93b2-15cb057f3deb\n2a605d0a-cff5-401f-a560-11f6327d8108\nf7cf738d-7919-4244-b4cf-c2893bce41e0\n32f79cf7-d48f-41ae-ab8c-4ba038ffdee1\n62c4d7f5-3c3d-484b-93e2-a140817c816e\naef33d14-299b-4d1e-8fc3-b422c1bf6592\n3a5f26a0-645f-4c33-85c6-0e8a31202fdf\nf518a910-bb86-4f82-b6a6-60886d4a3f00\n42e78c02-62bd-4d16-85ca-67beca173604\n49228c96-d0d9-4fdb-9da4-5561d7e43264\n972fce73-25fd-496a-b040-f934c3e2b197\nbb0ebe80-cb20-468c-b4e8-035cb232b54f\nb555775d-e3dd-4ab1-8fc1-ae86e39d6c9f\nff42400d-75b4-4057-a6ed-639c85ab7678\naa047dde-a7a2-4b23-8ffa-6ddd3f40f50a\n49d6e055-873d-451f-865c-40e792628552\n7b308b4d-e56e-479c-8cae-d2d7c5547f8b\n880025ed-5b8f-438f-810d-bd20795ee042\n9f670202-9327-4c14-a9c5-0232e23b178c\nd64bf64d-2528-4c27-af17-8c7c46c8f026\ne8f460bc-f591-4a8d-88db-36f630b60734\nb2752c8e-9463-4aed-a4cc-4bb8b985840b\nca795c7b-6c22-4adb-b7a0-dffa10e15cc9\nb4488c7e-22e8-4c17-9a55-c591c5d84cb2\nd45e5e8e-efe2-4d20-8e51-f2b5acf4256d\n39d1d454-19de-4061-beed-7097fcea3bf9\na4700370-c03b-41b2-a387-cb739f3d14f4\na319b827-c34a-4966-b106-dd585c8638ba\n682be529-520b-4c52-9221-4c0cef92cb32\nd6833790-ec18-4d6d-9164-ded6a7b5b3f2\n31b8a0da-19aa-4a73-8c31-29e31b1b3de5\n5989aaea-258a-43fa-8991-076b448afe7c\n51a62529-0565-4235-9c97-5313f032b707\n5449d3fd-15f7-4b9d-a32b-b607a943cdb7\n33e7aa96-82a2-46c6-9e5d-61c07b46724f\n6967299a-478a-46e0-b5fb-0a64bef63c31\n4e67c572-25fa-4792-baaa-d91d9ae37691\n24b74b26-97a4-4cda-bd1c-c6beee3913db\n4cabf218-176c-409e-9a26-951b05d3e4f4\n6ce7327f-6c42-4f78-ac67-563cb097e86e\nffe47c41-cd20-4e46-ad7f-4d50a98b8af9\n92bcdc5a-f38c-4cb8-b9bd-b3b28ba051d2\nee5b6c3f-23f3-42de-ad85-95d0e3687383\nc30a7be8-5069-4a8b-83b4-3775c3b93aba\nd6cf590c-1e84-4c44-af61-5f3e051d4828\n861f3e67-5a01-459b-a114-cc2d39fc36d4\ne1dee839-7b2c-40ae-838c-c4713c29d956\n6a290671-dccf-4c05-a29a-c8225993cbbf\nc6b71c58-179d-42c1-b4a5-2397382a2b62\n59caf71b-7287-4279-95e6-95bfd584c026\nd30ec6a0-6bed-40f5-897c-2779831d6e6e\n3dabd850-b13c-4f09-bf90-67b228432147\n7582ecb0-e9b5-4e67-8416-1e37b24cd3d1\n7ef760d1-5956-46c8-8db7-ef3d0ae11c89\n60d7ea2c-806a-4c69-802c-11ed3bc0f780\n444bab5d-efb0-4e79-baaa-4927df6ca7a0\n109e9819-9f7d-4d0f-b5be-7fa86002461f\nc7a6c17b-1450-4fc4-ac04-f13d05c5b311\n77764be4-e84d-4c75-8377-dab1a6a8d7a8\ne5979ab3-bdba-40be-9882-4599721c74bb\n11d638d3-956d-4b07-9faf-fdc091cad590\n236b6138-f0ce-49ca-a211-9740ccfc1ed3\n9b527331-8158-4889-b115-47714377828d\n9c0213cf-9fb0-4ffd-8dd3-210a1e65aab0\n07f027a4-77cf-4f44-99d2-5c812485ec31\nce4e2c1a-3570-42e9-a43d-f57090b05540\n53766090-383b-4a64-a06f-d5c8baa924ff\n2c1b3548-1cbb-4338-b06a-10765d91d378\nb6a417aa-6e64-47a0-983e-e011c399036a\n06d0519a-f210-46cd-9c4f-701ab3a4e073\n4b3814fd-9419-4b27-ba05-0c0f017a77ef\n555bff8f-c724-4d21-8ef2-e58479785eba\ne9b0c8fc-96a8-45e9-bcad-4f95057f2713\n12cc9b22-2ea4-4055-979b-cda802241e6f\n8cb5f006-74ef-4004-a127-2d39242efeac\n3400a42a-1e0d-45c3-8d99-0d39b37f571f\n841e46be-1a74-4691-9195-c482a0b701ad\nc1bc7a23-0a21-4324-bb89-f19d65c48e67\nd0e9415b-0b3a-4148-961d-c88258c272d1\n19b70c16-286b-4c14-92ab-4f9f794eb218\nf6266f5d-f8c1-41db-a9c8-9e6ae15abf2d\nd19812a9-0c4a-48a2-ab00-de7ba71bf502\n4e69c7ea-93b4-45ca-9fd1-ccff2f23de73\n14f6540f-93ea-47c6-b351-3d758e20dbc3\n328cbd80-36f9-4fcd-996b-af4f8725f059\n5e7cfc63-6e6a-48f5-9ae3-ea5b8c0024d9\n3b1224cb-173e-4f8c-8da7-60938d0d0ba3\n6c2cd815-0f2d-4717-8b5c-fa5db2885ea3\n61e2a4a3-e523-47c7-a5b2-eacac884e773\n8bd36ce0-2dce-4341-8129-db204575abb7\ne6e53e5f-3fd2-4a83-9544-da0bb3614a96\na38f797c-134e-4cd4-81e8-1718e8b2edbf\ncc38b1a4-b654-4a40-92ba-acdc09ac7e08\nc45bd834-f16e-4d0a-96ac-d7b9de22d8e2\n55d06d10-ff28-4ed8-9fb7-c7337982fbfc\nbd8af14c-6caf-4076-8b02-0f39a7b8d45d\nb75b6254-677c-49b7-b01a-1624d9cdfbee\ne5aea73f-80fb-46e3-93ee-63a3bab7da46\n9d0a27bb-21ce-40bb-bac2-ea1404f1138e\n3abcddec-c0f4-4e5c-a5de-4c6c1d771cc0\n106084bf-0378-4710-a384-85360d7c9309\n1318e6ce-be3f-4ca7-ba1f-d0d49fc335e8\n4f2dd2f0-b172-49d5-b510-d1e09bc9fa4f\n7498ff57-821c-4ad0-b601-ff17f3a00836\nd989e6bc-df47-4e4b-8445-564c566b2818\n5d9a070a-9e1c-4c66-9ffe-413523605a0e\n82a6cac3-438e-4931-aa96-fd3157406827\ne021887a-e0fc-4205-9294-d62d097db939\n938eda72-1d5d-40dc-8036-97625a25454c\n1db7b1ec-fe4e-4d0c-a62b-729ec3c99eaf\n7620bcb4-b038-4437-9ba3-23cbd61ba050\nad9e58d5-0680-4358-8493-91058e09de47\ne73a773e-1f22-4caa-aec2-f63e52f5863e\nfb96d200-8a67-4bdd-b5d9-7203ae273010\n37fd4c6c-9d4a-4288-94ff-e97c0e9fdbaa\n268a96b5-7e41-4eb8-a556-6cd1dfe6d1a5\n08f26fc0-1de7-4959-a090-d05c1ef6c81c\n26d1878a-381e-43d3-8f71-be2f28485e4e\nabb7af29-645f-4e5f-bf75-0b4f3c8fa992\nea0ca6ff-d3c0-4349-8942-c666553e0a00\nd6f7d2ad-5ece-4c3f-b61d-32b8d79d2f55\n85f72e99-d579-4bd6-8589-01f20a4fe11f\nb5b64c08-17ba-4a43-9d20-669be852fc6b\n1a6e3113-bef2-42cb-9cc3-4db5b0dd1ce6\n8fb4afc6-17a0-49b7-849f-a1514a56d9e9\n70bcf4bf-c94f-45a9-a631-462eef24c755\nf6304515-fa6d-4ea3-ab42-4831c11c9c90\n695f14a2-944c-4483-826f-2527e2152505\ne6f3ef09-eb0a-4a59-8f38-c14dc6ff9031\ne7b001cc-4942-4d23-ac64-2677dbf43e2a\nccc151f3-3855-48e3-a125-21d79ab45912\n9935a967-c423-42dc-83e7-4d989041cc3f\n804b5e0f-357d-47c9-b796-7756967d3089\n8a9e445e-6796-4525-a5e5-a724985f2049\na1461409-273b-4354-b04b-04be9e08ac93\nb7945592-2d7f-432b-bba1-86a6870bb1fb\n75c18831-3036-4a4b-99f1-9ccc0cc25c00\n0f9c643a-682b-44d3-839c-2cdec00d1c58\nb6b8ea78-1765-446d-88a8-06be039fa6e3\na3985f5d-75d4-42bf-8e35-1616fb771210\nfcfe87dd-d740-407c-a0ae-67aa7c2b00cd\nfd3bff4e-eb5c-4456-9cad-ecc804430a0b\n16e6a574-7797-4740-8444-69b2d75ae0d5\n64d16e84-5f48-4c95-87b0-f89b5abf10fc\n0315836b-36ba-4d51-ac37-26906ebb3caa\nb36d6285-7472-45e7-a73f-75bf0c6f9cf6\n151ebd90-baaa-4402-805a-255b9b8bbdb4\nec05a61c-633a-4584-beab-4b11b60cf5d4\n7c2a786e-0ac2-4b2a-b824-0b299f8db038\n99016714-7553-4646-8e1a-a7935e85f04d\ndae25430-5358-4490-9156-b2209610b534\n2475cdb3-da7a-4632-9572-3eac85ac8103\nde20812d-3ec6-41b1-89e8-8ec3cfc70189\n986ebf05-df97-4e5d-bbfb-120461ee179d\n013894a1-778d-4c05-80c5-262584b2affc\nc6b34496-86e8-46df-99c6-f4a316a73396\nf53035a6-339c-4386-a354-b152adb9be1d\ne1884b90-a397-44a1-aadd-53638353c2f0\ne0f270f7-af2f-4d50-9254-3b93bc0f2834\nfd87e243-3628-445d-853d-3ef4aaad95e7\n9d89d833-b24d-44dc-9495-87c90078dbb9\n13c3fe62-621c-4b3b-b88c-3ed620d8170d\nbaf11bc5-0595-4748-adf0-e7456736fc32\n4698e4c5-ebd0-42fb-b6f6-ec7f54653376\n8fdc1460-d790-4de3-b909-f2469903cb6c\n63c0af58-c0df-4ecb-870a-774a9d0d8f00\na7b73612-b8b9-464d-827c-a94baf103678\ncb3fad97-6415-43a6-8bf4-63a6100306b7\nbb0e4774-7765-4bb6-8a38-b2bedebbc995\nc92a596c-4bf8-4c24-888c-6b351b2f1679\n00883c7e-2179-4cd0-9e1a-8895f7821f25\n3738f72a-2488-4456-8f7e-45b89f31898a\n81f903d6-0c71-4d99-b492-94804a97bafb\nafcee848-6770-4a49-9ddc-6d7fcc2b4245\n023c2511-9e7f-45f7-b392-718da4aa64cc\nc8badb93-0d91-4b80-957e-79f9b8ead934\na0d186d8-a0be-444f-af66-a7fd60783275\n6d8e3001-28e4-48c1-a332-2a5ad1dd9882\n7af2e87e-1e5d-4927-8f1b-5a36e57b6517\n4ab956a0-d459-4e02-a604-f14a02e79c72\ndfd62015-ba9e-4a30-aa1c-da5588684f50\n1d8e6086-abdf-45a7-9f53-17a376d2769b\n849d5d4b-2481-4447-9848-a1f0d8331444\n6239b091-8ebb-4763-82cd-4bfc42d57e8d\n179a2324-7478-4ea9-aa59-bd65121158fc\n125eaa19-ca7a-441f-8ef7-94bc11706e7d\nbc703232-1ddf-463a-a23b-83309de32ccb\ncf577e4f-4639-4732-9d89-dcb3a74d82a6\nb34ac209-8192-49b4-a677-ff71b0590de2\nfad1c01e-1e7b-492e-b15b-758820f1b8b2\n6e4be1f1-a95d-4b21-9926-4317c39a0d45\ne442faac-1c0b-4fdd-b2d4-f543679a12ff\n76216788-32c3-4974-90f4-d0768ece2584\n372eb13f-bc96-4b81-8096-bbe45af22062\nba42aabd-5798-4647-a0cb-614f1b278298\n1fe087e9-c833-4431-92c8-49d6caec05cd\n8994970f-3750-4f0d-be1d-2548fc830463\n1983aaed-76b3-45c4-9bb0-eac564b90f43\n914785f2-7eaa-4b8c-b324-4f0532ccc696\n99dcb9d9-8465-4d79-aa5a-85346463255b\n3707a3b7-7e1b-4f41-b2cb-215cb98b2264\n5cf129f7-89f3-4a73-b398-dce0950ffe2c\nb8240e6b-61ee-4ca7-acea-885253652601\n742883ea-395e-411b-936a-964b935f99b4\ne753ba44-b4d4-4c51-bb06-18cc2332677d\n8432774b-fa84-4265-be05-f945a978246f\n538ad657-9258-482c-80e6-0b1b0f7434c7\nf7d99e92-5ee7-40d0-96eb-d07134e1bff1\n3d50e6e9-6a50-4274-9e71-6424d6b53e52\n44a9db8c-659b-4d2e-ba78-5b7b924b0e13\nbfaf6296-2b9d-4edc-9fbd-7012ef1e3bfd\nb46be054-8c6a-4620-8a20-601cd0f38983\n23adcbfb-55d8-4d27-8f31-b8cc76458670\n41e56da1-952b-4ab8-9319-3d47ed5ca7e8\n2826252f-a124-40e1-9484-b8ff63a32c3d\n645ad96d-c458-4fbf-9416-82bc834a0de2\nd0baf533-c7a6-4a9c-b0ef-357d759b0b3a\naacb50cb-7b76-4545-97ec-e156dfc976ca\n5b56e34f-9bc9-42cc-bcf0-fea6979634b8\ne6506622-8280-4923-975e-43a689200498\n2271ce32-0c4c-4a7b-a86f-8e8173ec1c3b\ndb11449a-4322-4dc7-ac6d-4255098206c4\n00a3e796-6425-4e0b-9659-859474bb688e\n1c0defb8-bbe5-4bb0-80b0-fad0e36194fe\nf1b22a8b-eea6-4a51-90fa-72831cd35143\ne681a80f-929f-4b58-878f-2719fdb2b6de\n57d2fd46-36f1-43b1-a984-0ceedb22dfbf\n104bfb59-b623-404f-bebd-385f05da3b28\nda76114c-86f2-47ef-8678-f098618498c8\ncc7b2fc7-0538-4c9a-a732-66e33c3d3059\n5df48758-df73-4261-a025-2aaf6dd6ffb9\nc6768957-953b-42dd-8018-c35205ddaa5c\n8c5d8760-82e4-48e3-bdb3-ac55280975f7\n6569ab46-52f2-48a0-bbe0-567bd5547f8c\nb126da9a-334b-423e-a750-491006c69abb\n3569548a-411a-48a4-a1e6-4ba44501b06a\nb0bff049-c0c4-4aec-b3ea-709b473d7082\nf7254fbe-088a-4c03-9764-74fb3f3cbd2f\n59c44875-c903-4047-af28-5f44bea375a6\n45885a5f-3660-4a90-a0d0-39e67c5ef107\n046e95df-ae01-42f1-a4eb-695c58531f86\n14eb161f-d79f-47cf-9e71-ef2d4db1eb8f\n42c33a05-fda3-4a1d-b4d2-d064de95fb5b\n67f2abd3-30d3-4f05-9d20-4582e4eb4d7d\n6a726cdc-1e9b-4a6d-adae-506a7e3f6e95\n904faf22-6b3e-4be7-ab50-bdf4e7ce3ce2\n3a4a0519-4536-4480-ba98-49b04ffef25c\n98788959-8a7e-4da4-81d5-c5f2586495b9\nf2540091-beae-4cde-a1e0-b2ee2f1475f1\n730d02d8-55c8-4738-b611-bc3da682fa05\n6385f5de-aa4b-4158-a9cf-565109a01503\nf53d4fdd-9e5c-443f-b45f-f6b93c0ca91b\n08b2cfed-5427-4e1b-8864-d94d1af5826b\nd2dad677-4184-4487-85b6-0dc9cfad4787\n92c8825d-5cae-4470-b21a-1ca0bba17060\n4f58e894-63c3-463b-9dd6-6032f49df9b3\nda035201-ab58-4c26-9da5-10f97238749b\nbb9d78d4-5c2e-4760-988a-22d19774d399\n40bf576a-618c-4134-9847-7075e975bc7a\nc6f9faf8-1257-4b99-813a-0dc10e2a794c\ncadac338-f216-4621-ad6c-51916a4b1012\n1a552618-c41d-4b59-8925-8485233ed99b\n932cc258-c09a-4888-b3ef-f8e129e46b8b\ncff1bbeb-2fd1-4bcf-bbe6-31c6867f6151\n4f854781-33fa-403a-8e65-952966e457fe\n7b1dbfac-20e0-4c09-b4f6-07140c3b12b8\ncc21f991-f597-43e1-a982-c6809a1008d1\n96590ad1-0835-4ed4-b6e2-2e7d726b9d21\nc542c340-c048-4937-8957-8a101720e088\n7c5b457c-48d2-4d40-9c52-2f81b61725e4\n4516b534-7bd8-46fd-bdc2-023c70197bee\ne36e15e3-f06a-4475-8242-1993b7a017ee\nb4a37097-0783-4733-971d-092302b21b4a\naccfa9f2-669c-4e1c-b8bc-14428a5cde2c\nf7692cb7-cf56-4881-ac25-2518db63a0ae\n80a55293-0953-47aa-8cc0-5aa381642b10\n1ff4048a-57b3-4db8-96b5-25356449fd33\nf0b1ec83-5805-4e83-b7dd-03a3f503fb4b\n803e15c8-4149-4141-be94-0d88f235a001\nf902d3c2-30a9-40b0-9e2f-a0bb0f9f2faf\n4bf0221f-04c5-42c6-bd26-8ca3ec6fc324\nea80d38c-a6c0-48b5-8cea-bd00d8d6c073\nbb07b1da-2c88-4baa-83c6-1fcd6627b37c\n39ca5582-6e77-4a01-84b9-74d6972fb61c\n287bcc51-3439-446c-98ea-3513ba0064af\n25f2de0a-d050-4737-b88f-3a0fb8b4b72b\n3f32ec44-48b3-4c34-ba89-1670a3d91415\n0a279dda-d5d4-4f25-b30c-456d8ae115f6\n970ebf38-7ddb-4671-bb8d-7693861879ae\n8bd40c86-a03f-4c5f-aa9d-2c10717baec9\na3f9e1f3-e9f6-4576-99bc-d9255fcf59c9\n6847ffff-b026-4076-b394-029dccc4e662\n5bf30323-6f94-474d-b5b5-66dff21222b6\n581a9f79-84f0-47a1-833d-8aedea5955d9\nfad0116c-4619-4497-b8a0-190a4da26041\n6a3ae259-b003-42c5-b6b4-40e3ca731c62\n6d1bbde4-3f7c-407f-a853-3341492441a0\nbcbe1c59-3fb1-4f48-87c9-ee400f7526b4\n09022c68-7485-43e4-9c12-209e20fb6c91\n85b9023e-e9f4-47e3-8b33-8207910413c0\ncf9d179c-5278-45f0-a587-9e47d42b8e3e\nacb7c133-c930-4316-a485-bb3c9404355c\n9e8203f2-ab40-4e77-ae8d-b3835be2f911\n10c77005-4a05-46b8-a6bc-457c27c333b9\n810dbf4e-1837-48e7-8403-31ba358b9008\nceabb8c4-6e15-4ed4-9d09-d00390dd5f4a\n5bc06218-efe4-4dde-ad21-7fbe3ab37a10\n7194f8ee-26ac-44c1-a878-e4ae1008fa8b\n5bdf8039-ed0a-4226-bd69-11b877bc612a\n4f7754a5-08ed-4e2a-85b7-cc0e07b05a56\n6dcbdd03-b1d8-423a-aebf-cd419d3e0f3d\nb92bbd46-4be1-499e-a39d-59f8eb9ce3e7\neda5a3ed-d70b-4900-bd5c-3afaedf44b33\n807a2e11-f776-4315-962f-f3e5781cf7af\n59e50213-6481-4dd4-a85e-ec1204022e85\ne1a3d132-fe4f-49d3-a3c2-a8b9957b141a\n49f552b6-66ad-466d-b2cd-fc51c8d2df6e\n3a58b31c-4b85-4365-9f56-7c9942458f2a\n13b4c0a6-8aef-4546-a3fc-4dccc2cddc64\n3068b73a-6f2b-4925-8fe5-c0fa3892fb1b\n51c689f7-ff13-43d6-8f35-21ae6063f8be\ne455d375-f306-4ee1-a793-bf82a83b63ab\n3049d15f-8e4e-4d6a-81d6-0a5f617ff2cd\nb69370a4-3a39-487b-ab3e-b94e5dad8ced\nb4a94edf-1c8d-420a-9211-693410b1fcd1\nd6e52ebf-089c-4961-a629-5b29af612145\n961fe13c-0b5c-479f-aecf-889a19c821de\n2d4403a4-964f-40a0-9f75-4f42bf433075\na733a4f9-2169-47e5-a607-aff8116aa9e1\n695ea93f-59f2-4ea7-a8a0-3419a565cf35\n71b30479-b6d1-48af-8a8b-61cf9af58597\nca8c5c11-c7d6-47a9-ac37-ee006c01d777\nc246ca89-ed06-4aba-b70c-6cf0c6c6e1b4\n2b2bbdbc-df70-4245-ae2d-c9b0da185876\n2c070dba-564a-4861-8ff7-2274a8884a3b\nf88716d4-0bf9-4c7f-acb0-767c7712790e\nc14efeb6-f2e3-40a8-b2c6-ee76fb3b7eb4\n180cb119-3c1b-4bc9-80a1-b7073eb8dcfe\n5f6e00f8-36ec-40ec-b57a-ee4352bf385f\n552f4d37-6ffb-4166-82c3-94f243f94fec\n910c5fc7-1e77-4803-895f-3f2122b518e3\nd3456bd3-1624-4f78-b3a2-dbfcf61f8ad2\n003a3061-e110-4457-a1a6-f2c4834475cf\n578462e5-7f70-4105-bf72-165acb97b751\nc4fba921-7939-410f-a3ee-22fcd69ec91a\n9e36b96a-597f-49fa-b6b7-3bdc4640e70e\n98736e07-c3ac-43f3-9579-f7f7031a1c4b\n40248649-82be-434a-b694-64764101d57a\n44e3b4c8-44ff-4b0c-a541-b01abd7a6d03\nf5ac607f-b59d-4953-b5eb-4b1b344a5e7a\n6a2f4df4-47f9-4e11-8745-d910072d79bb\nd254e6a5-1572-4a48-80d3-fa3985de7576\n46785363-31b7-4ca1-9796-5e0459854f77\ne8950d0e-3a95-4d4c-820f-9c0c74e566b0\n2f08e31b-1df8-43cc-bbb8-af2a6b01816f\n992cede3-319e-4c0d-a054-25736cc1450b\n0cb28804-fc86-4353-9c6d-c77f0f6684fa\n797c2357-da00-4364-a4d1-a353f9c33a91\n453c36b9-9867-4d2a-8903-c0f3f406ccab\nd9151e59-982f-47a1-a611-87e3d4589115\n8e1d0a89-564f-4620-9cd3-c3e07a7fdff1\nd28b7775-56e0-49dd-933f-c5176c7b6e5e\nca8a74da-8777-4e8f-866c-2211e15e9ebe\n57500031-3b5e-4391-b766-2032e91c93bd\n0a369cdf-dbbe-4964-b36d-12a8cb5b5782\n68cc1efb-d9fc-4b7e-86ac-057774b71594\n5a1e9222-d329-4dd2-ac34-1663bed0b221\n82a00f35-45de-44e8-9f90-f277ce7c505f\ne172649c-23a8-46d1-ad7d-9406d4bad6ba\n27090a14-dc09-4436-96a7-facae362f71a\ncf338d3e-298b-4900-859b-125482c8fb74\n4a09a63d-a9e4-4407-9e4f-f3276e23a4cd\nbf96f248-9c2a-46fe-9fbe-91fdce9461f7\n14544141-4bdc-4298-8b44-68b015924de5\n308fe708-27be-4776-bb73-eb6b835e2a92\n5883f11f-4191-49d0-9f14-2ce29a17d564\n9be7057b-6e13-4157-82f4-cb2ef4b59157\n3199d273-789b-4de3-8c28-f7ed580e9cb5\nc1d8fdda-9f0e-48cb-a698-b0f763fefe58\ncc5b4ea2-d644-4295-ba64-8ea6c3ac9d84\n108be21c-f136-427a-908c-94e9860aada6\n04003134-0fd6-48de-8ec1-f172b9995ed8\n18286a2f-107f-4dd2-88e7-4ded4a109d20\nd6446389-2192-4b83-a4b4-b467d59b4812\n93ff4aea-ddc7-4563-85c9-5afdcb60e5b2\n0e2438ec-e01e-426a-b7d7-bf8ffd4b6082\nd8b90fee-c58f-4b85-a19d-7f3af80fde31\nd75bd7d0-066c-4777-b24b-e36111e39165\n3cae4b95-b8eb-4a42-8f01-ec7899132552\nb5228ae1-7b98-4564-b573-def48d23c43e\nf5000c16-d8fc-4c03-a94c-641112a63ec6\nf3aaf127-743a-4a9b-880a-ea420661277d\n152f40e1-ccf5-421e-8b92-c7af55478336\nd10e0c92-3026-4917-b727-e678c272fba8\nbc33277e-88db-407f-b965-b9fe88903c6b\nf22c01c4-8391-493d-9b31-e2c8751ac002\n7d137977-9806-488f-ba72-bf206e1cbc3d\n1d45e6c7-8c34-4888-8f3f-b9815994bb92\nf04158c1-65e9-48ef-b39a-dde132017656\n9c5a5b35-99af-423d-a352-7dfef55caffe\ne2db5dec-124f-489c-83a3-6b7059d3c9b6\n26c9337d-6419-4e60-9d55-e74585d6ca86\n695c9a94-ad01-4303-985a-0df675a6646e\n29d9bac4-d0c7-4e3e-9bd1-8754bd151f93\neebab22d-28c4-4667-b56e-0c1299ae9dd2\nfcec5474-c94e-408e-b66d-6ce646aa7f70\n783e23bb-4dbf-4695-a847-14f05e04c5ed\nfe84bb34-01e0-4e35-a7e6-ac04c620ecdb\nb2e3eee4-9a76-4574-a8b6-810fab3fa8f1\n47e8c6f4-ba01-44f9-a9ee-82ce9e0f87c7\nc9bfbabe-7800-4867-9f88-a6c2717845d6\nc76b16de-aa6f-49ca-b7c3-606e487914a7\n65c68c6f-e5e3-4f5c-aa58-5ea3f20c807b\n7c280a52-e33e-4acd-801b-b5df89e6ee3f\nb891180d-0fe8-48cc-a801-c7bf144450a9\nd2cd9d1d-e6c4-4a2b-990b-8917c93970e1\n72efed67-0d54-40d5-8877-9bdc2f1259a2\n612769a5-7d34-4aba-8b3a-f44495aa5c78\ne51372a8-12c9-433f-a6ef-764f86e80b3f\ne3e9fbec-6d7b-409a-a55c-6d4e1de56331\n9e7b5608-b7ef-4053-8d71-09c1d6298fae\n7aab3b4a-a5d5-4f66-81c3-975cbb7177fc\nfac4b123-fb75-4ae5-a679-f6fc9a581186\n5d190175-f201-4a3e-9617-632f381f1419\n5f621bdc-d970-4d31-9ed0-174558947efe\n7157491a-93c0-49c7-87d6-f10c255ee5fe\ndccff58b-3d3d-48b4-bdf0-9faa73f5500c\n915a8eda-4658-436f-9814-c9119e3ae88a\n36ebdfa6-4d35-4693-909d-414d73b5b741\n3b9c5f71-57e3-433f-b59a-7e480d16aaa7\n06afcf2c-b0b3-4c1a-8e3a-12862b17bd41\n4ef81814-c786-4761-b48c-76bd869c234e\nd0caf083-f5d5-4a6a-8662-6c158560b2fc\nbe088adb-453f-4f07-8660-723f9558e7cd\n06a2335a-114a-46e9-b785-1b3c4dcbd352\n6d162c9d-a5ec-49e0-a10d-1366905c5b43\n57c2623e-9b3c-44eb-97fe-9c76dd2f7fa1\nfb7457ce-9c24-4853-beff-5dff2b668864\n804de939-eb0d-4096-8349-9e392d924132\n22fefb52-f21e-447b-a2f3-1ce01d5b09c8\neec6554a-aa84-48ed-b8ad-3242274127ea\n17545638-0c68-40dd-bdde-024c0feb9d9b\n6387ba32-9534-4209-b967-d15d52209392\nd8761bb9-c67e-4026-bcac-39f5b6d35408\n8a48b6be-5217-4c4d-9e48-3648cf3c601c\n7633e736-fbab-452c-954c-01c7e5e2578c\n930c4f13-4d15-46dd-825a-248a083bcbc4\n766734e4-61f7-4625-92bb-6c6ba266aa8f\n9414a7f7-e3b6-4936-b3e2-a640c1681539\n4378ff8e-48f3-4b19-ab3b-2210275979f5\n0538cf6f-807f-4f27-9de8-56fca18517d1\naf750791-7390-4010-ba38-f3f047c5e51e\n70a8296a-a43a-47c9-8880-65af2c3012b6\n125d4276-a20b-4071-82dc-4b77899af32c\n333b8fd9-d228-4a3f-9b17-e6caec809c15\n08d5ccc5-a2ed-4d14-a265-e81832af2a06\neccb724d-cf3b-4ea4-bf5c-403a8cb31737\nadada943-8ab1-4a17-857b-96619c072493\nf05eeab4-9353-4319-883a-a46fba61d80e\nb72d1541-c1a5-45dc-89a6-e7dcd1df497b\nc156d3e1-89ed-460a-90f2-9f35917d95d5\n84f3f747-bea8-457e-b7d7-74a8d9cbb2c3\n9ac0a3a6-f396-44ff-9474-405fab033342\n5a3b47db-d98b-4b30-8f5d-6f9b58948319\nd73590b3-a761-41c5-ba9f-373d963c9e9e\nde9e4b21-6dae-4673-9dae-1ff94b2dfad6\nc24fe19c-6066-4164-8e29-965b7e4113fc\nea1f9879-2b59-4890-84d6-6fbafea20fc9\ne87d7c11-48ca-4a55-9f04-6707998ac3f5\n6138b8fc-bc54-4373-b9a5-ca6bb6673413\nea5709eb-f0aa-4f5f-903a-7dba8c8c74ab\n9a9286c9-3cad-44f8-b821-43b578dfbda1\n8703adea-b8e1-4b69-9fd5-e9fbfa91038e\n965ff125-c9a5-4bed-9b6a-67b11522c1b1\nc261f8c1-aaa8-4cba-992a-319a8a0393a1\n2977b340-6dba-4858-a472-1c85acd2be44\nb5477034-ed4e-4972-8425-38f137f6ac14\n469af7b4-cd7b-4054-8aef-1e81f8c134ca\n0aa62439-90c1-4caf-b1ea-68870d4da7cf\nade81045-49f6-405a-85cc-ab499bc00c8c\n0b97a296-3729-480f-9f69-f8a42ba4dd34\n260d2a0d-fdab-4aa8-a384-b9cc61377c9b\nd6b9fd15-535a-49f7-a809-cbf30aaedf77\n06c19e40-4997-4d31-b790-97575f5a5388\n023d2cd7-f1f6-41d7-aae4-c0748089ab4b\n63b6fa11-3738-4a16-8062-1e0cd6f99bf1\n1c2caffa-ed6a-45bf-9eb1-16dbcec66157\nd35ad14d-ff3a-4d6f-9f2d-2ee6f93949c3\n4c46ed21-6a82-4b0c-9724-122496c5bd6e\nfc31843b-6d7d-4cba-8cce-907d69c1f6e7\n5b2c75b9-f15e-4746-9c79-c095bf91df9c\n5afda9bd-bd27-4372-a83a-82abb4c11fa8\nd6b83229-9a72-4988-81a7-b634c6c6efbb\n10f32adc-3ad5-4fcb-8bcf-19acce2e9e19\ne5b8d46e-3b1f-4081-8d61-cfc6b031a2ca\n131bfc9e-353d-4607-98da-0460d5d21f8b\n76a56bc0-0e30-491b-b521-f2f1539595f9\ndc94c30b-f03d-4bb3-b8ea-c648389a154c\nb99ebbff-6008-4c3b-baaa-3cb6b57268d2\na0c9930e-9d56-49ba-b7ca-6d10ec44d990\n14ab0261-9872-49a1-a9fe-e16840e3525a\ne02811f9-d313-46c2-aa3e-4767152602ba\n09410c3e-d5d4-49ee-a5b2-4e274401e7b3\na05c316e-6d16-4999-9511-d7a30bb5dde5\n00c7e5f2-a787-4ad7-9685-8cc98c67004b\n198dc9d0-fb3b-4f72-b95d-bbac90b7fa91\nbbcf2ace-b471-4362-b7fa-40f0d7f5a1ad\n320b7708-6338-4ced-abda-44169e4d4b39\n2a9bcbf6-1b84-4f43-bac1-c07df84c3146\n58eaab40-0259-49e3-aba2-88fff2a46534\nd155d5ba-212c-4993-a4e3-8d3e0b256668\n570a2428-cc33-4fba-a84e-af644e6b8d0a\n27395ae6-7226-481a-a16e-62e337f2a587\nb6d85d33-068d-418d-bc48-5db8e6785aa6\n46ffd5ec-540f-4ce3-a116-3021abc66b79\n661f4873-25ff-4c72-96f4-78c1ba35a0ea\na5f43f91-39b0-4b21-b1a7-ede1eea445d1\neb6e8f62-bb11-4834-b90b-ea6843b21326\n3370ad26-5410-42dd-9728-808c3598621c\n80bb6ddf-eae4-4f49-a662-03ceb15c23ad\n169071af-b277-41fb-bec9-126a8425fb5e\n03f4d1a7-f22d-4354-9162-ddca2e8d265a\n1c97a7f6-9607-455e-a0f7-c853bb11365d\n3f39dd23-86ee-4b00-8da9-f7a65998909b\n9a5cc1b1-081f-4d3e-8217-0ee70352c949\n3922d91e-df8b-42f2-8079-ccfa1f3c4946\n331f0385-49f7-4e62-b945-17c5fd52fe2a\n1b5fae54-95f1-424d-84af-8fd5a667f8a6\ne31fd3d9-510f-49ef-be12-a3ab753da116\nada4ac50-0c60-4e12-8028-f27fc9b98273\nf78b2b67-e54d-482a-9993-beecaebcaf88\n9a80b0ba-6aa8-4898-983e-d744939224f7\n38d442f7-6991-4fe6-bcd6-3e6c4b11b6f3\n83a45ca6-9098-415c-bcd3-334edc77bcca\nb3b57ce9-3a63-4e44-a24a-6d5bd64f6cd2\nadecf977-d8bd-44c9-9e4a-cb4f5533fae0\nea792719-d928-4230-9f4a-86648bc6bae7\n415c28ab-7166-4dbd-a1e8-e446e9f876e6\n6b681861-ae4f-4e8e-9a26-20f3bd527c15\n17f748af-5e24-4125-a3a1-82929658834c\n7f77e24d-2eb3-4c16-a09c-0bf7a08b53b3\n9e2ebe3d-ca30-4d05-adf2-c8f7e4920a60\n80c07d45-abee-41ee-af7a-89c24ec6277c\n116f84b2-9afe-4e81-aa26-044cf384cbfd\nf95673f6-c358-42f8-84d7-9c731d1a2ecd\n358fa853-db8e-4935-9105-9cc0e51a6222\n611c2701-3049-468a-bf9d-83fc3399f71d\nc87b659a-e3d7-4cb4-9b15-78e013bfb763\n96b26f2b-d77c-415a-b212-4b5c4ce95386\n979637db-4807-4bfc-b63e-9d8405d57f95\nb018e6f3-f46c-4ee0-a7d9-a3a310dd394b\n1ed3b8b3-a5c1-4aa0-bee0-a65105596fd6\n97eea683-eab7-48f5-976b-fe4b808f9fa5\n30ad6340-6240-4b9d-ba89-292a9cbec493\nd03f66f0-544c-455e-9c3b-c613135a6830\nc7337305-d1ad-42a3-ae45-5cb4adf257ac\n871acb4d-8fa8-4d5d-8db6-97e8a5c16851\n924eeaa5-1a40-40de-9e95-a00f628dfc33\n25074ff3-d8a7-45b3-b0ac-03f0885b9794\ncb1bd141-eb16-4adc-8f6e-1e26c67f5d43\nef1e7763-d219-4cfc-8e86-111ceccfd206\n239d03f2-4ff0-4ec7-94eb-ef23e755041c\n6f4e9f10-3ca8-45d6-9bfb-74727f61f213\ndef49bf9-9967-4685-9492-80fc31376788\n94a48aed-9ec8-4c6a-a59b-f3e018136a15\n3d84c98c-5006-459c-89ca-3335ac60c2be\n457455c8-6c38-44b4-951c-a318902b9ab9\n4a049c96-1f1c-4c45-a337-7d8d5f1eb478\n54b2cce6-4c33-4ab5-a72f-019b5eebbba6\nc2aca666-6a44-4583-b41c-f87c661c76e2\n13ff0a40-a641-4e6a-9c52-64623e77107a\n7ab374f4-a638-4813-9f09-ef0e58d782bc\na9e8cf31-d246-45bb-96e6-74428ff35e0c\ncb41f775-a495-486b-8e77-a7c8d6ff6593\nd71d6c22-66a4-4e4a-8535-33c1b76e4a4f\n234c026a-26d8-4e6d-8a7e-aa72d4dc0ca5\n1dbe7152-8761-49e1-a801-7d559fb5f0cc\n683bb84e-06d6-4df7-8c21-15e15f28c664\n81e402ec-0b24-4458-9602-e86d0bc3ef40\n80fb566d-f19b-4c6f-8c72-443223817fe0\n26eeac87-8cb3-41f2-94db-06abb87670c4\n79c78e86-87ac-4579-bb0b-3218dcbd0fee\n7a8ba782-9797-431d-b7b8-16ab6531257b\nf9c60dc0-d054-46f1-95d8-5a1dc9caa2ea\n20918f26-78a7-4b0c-ad3d-1657d59d7a90\nf1c4ebe7-8e49-4ba7-a3f1-3d0bcba54b90\n1dd07b8d-255d-4925-8d4e-c2d2c0e36d7b\n892f48be-442c-48af-8a14-aa2e46aec34b\n835e6b36-7ce9-4e76-a6d4-bf3f89f942a1\n45aa96c4-0fc2-45c1-964a-2027a64ef2b7\n88b25e08-d260-4b0e-ad42-242dd646d4c2\na215c2ad-77f1-4fca-b56e-10aab53e4a76\na7b2a317-b6f6-4dc9-9c88-ff252321d72e\n7f36cc5e-47a6-4d03-9c61-0bb3c1a2d841\n72e6cd26-a18c-4084-955f-f8be1f92e003\n19872eb9-7af4-4f89-8633-230d5dd22df4\n0ce476e6-2f07-44d3-bc18-97f5871fd479\nf13add78-fabb-4a86-ab5e-d83925fd3c62\n4732626e-70a4-4532-ab2e-8d9701744807\n07de49df-d07d-4b87-acf2-c1c40ff5b446\n5bed973b-ddf8-47da-ba6c-fa0262e37f6d\n3e70c6cc-e065-4790-97f5-3740ed0f0a17\nc62417d6-6532-4386-b027-abb2f9bceda3\nca16062c-7f1d-4c26-ab31-db2282cf194a\n69c7fdf4-32f7-474f-854e-de95254b5ab2\ne12b0dea-ac41-47e6-b285-90f4a33c780e\n360c3e77-d972-4b6b-9864-82cde830c47a\n3a72b6aa-bfe9-438d-818e-fb2cc2144bdf\nc7b62195-4e8d-4973-a487-4b4bd2f0210f\n3e92bbcf-b303-4c3d-aa58-d837ba9e23cc\n2998cfbd-95f3-4048-95f3-124df5739803\n757c323e-ed97-4ef4-bff0-1b998ca52361\nabb4449b-dd37-4581-80b3-b3409d738a75\n62028dc7-598e-4f0a-b0c0-5c17f9f52847\n1c819e6b-584d-4d8d-b18a-d77e99c5cfb9\n00dd6902-4554-41d5-9e78-11a6644752ed\n428d3cf8-feb2-4d55-8315-7f86392da744\nbb59036a-9f7c-43a0-9c44-4a3ba32909dd\n131bb9f3-2b0e-4a7f-9fc3-cdf7a844aa28\n847742d5-8b43-4637-8241-2e20250bb647\n09809d9e-8e67-4fb0-b6af-98532de45d1e\n1a79a614-a40f-4939-8306-293ed3ab5afc\nc3a1febb-f60b-4bcb-b97f-2e11a0ee0f7a\n0c0d4637-9878-4072-a2a2-3d8de978a83d\ne2f198be-e757-4fe2-b9d8-3762085174bc\n4de71bd1-84cd-47a8-abc5-4e7c1535d2de\nce7b9bea-6a69-4627-9c81-9ac7ff0fec30\nd445c710-7f54-4853-a0e9-092ab5a38932\n6e8362a1-835a-46ee-9f39-f764b7aa90ed\na0c71491-f4af-4d31-b542-09a67fa3fcde\ned5fa977-61f1-47c2-bb45-321a2afa1276\n76effc6b-d8c8-479d-81d5-da781ae63678\n690bac67-3015-49ba-8a47-598600f447f8\nd9b9a3d6-6467-4ee2-80c2-67820d2a612f\n8ab27668-161f-470e-b47d-0ae728647830\n237cb409-f2fd-46a2-b388-f1e09b9a2ae9\n81075207-05da-489b-b6c7-a978a05abc12\n3d0e03f0-3177-45fc-9396-74d0c875c9b0\n889793a4-92a1-4c14-a390-63aa5de3c85a\nc58ea7c5-bec7-4686-ae9c-9bb9450cf135\nd8da12c0-2ea1-4664-b89e-e45c126f4aba\n158ef0cf-2512-42b4-bdfe-b3d1c08aecef\n28d88e19-4be8-4a62-a930-78005a141191\nf1c45909-d3ee-4c94-8de0-5973ad1e7bf8\n97f2a6f7-f147-4a67-8d04-6971ec12ea78\nda37eb89-6d99-4983-aac1-9c52ca2e62ef\n04e433eb-7b4c-4e0b-9396-1956f744c435\n0d4fff34-e442-4a61-b6f6-ccfc57e77ac9\n3deb7ce8-e5f4-4db2-b89a-1ff86bebc640\na86bf71f-36a8-4a13-b262-e05d4b1c69ad\nf84bc87d-1a1f-4196-8e37-ba80a7c16ae4\nec483b01-bc46-42a6-8b0c-fd537a216999\nee9a639c-99ed-429f-8ef5-4400dc166b36\n6217a136-6b48-4673-9d7e-881aa71d495e\ndf6f2b36-174c-4142-9345-ff2ea970895a\neb26143f-1b08-47b9-a337-296ccbd9c8c7\n43751ef9-b42f-4f6e-b0d4-e34138e5499f\nb1fa4a84-aa50-4c11-813a-fe44a0ed6783\n5b9b34f1-0724-4e39-a32d-c89d605e830b\n20a4e9ea-1015-4d16-8a3a-4ef93b145676\n3550c1fd-5190-4126-8179-b37404ba386c\n3d464c5c-a1df-4f17-9fec-7fd7e1755e63\n43e974d3-d6a5-46aa-bcfc-5d4cd13f607c\n802643e5-32af-49b0-b968-71520951e3e2\ne711fcfd-3da4-4f32-ba2a-0c0e6135d7c5\neda7e3fa-89f6-4d9a-9238-6da744298ba4\n8b0251d8-1bac-4537-839a-9f84706fbb76\na3104698-ba94-4e90-9a65-e42399b02f41\nb69c1587-58d4-4ac6-bfee-4a2637e0358b\n3313d4b1-dd7e-4ccc-a6a5-1373d19076b2\ne5ef029c-36cf-4f54-89b7-00aadadbe78a\n52855fc1-83af-44c0-b84c-bc425809becd\n9b0de376-6416-4b8a-b012-cde8903bc825\n419a9e0d-ddec-48a8-806e-4f63efa28729\n3421b5ea-d24f-413f-8170-fb6afa035ebd\nc9874547-c355-4c5c-852c-b215e7879d57\n1cbfd37d-29cd-4eea-92aa-8a55c82aa88e\n15148363-9247-4028-85fa-e37c8538449a\n32ed0a1a-1814-4a54-b51a-dc8ceb718522\nd9a97fa9-18bd-4301-b714-a6aeee64bcf3\n420a353b-7e97-4889-8d3d-421cd4f7aab9\n216201ff-bb27-49cf-95ae-4d2a777adc76\n6489e226-900d-48a3-8caa-c90f76efe3e1\n5a8a2873-02fb-4f64-a1d0-88bfe3471095\n26962d06-7bb9-4fa2-a670-0e062a3b6ac3\ndce087a1-7255-4eae-883e-70a5c6301212\n195c8f1d-6d33-41c1-a834-5f14eee82541\nc1286f63-4965-45af-81c2-0bdccc4fd21f\nd3210692-8c08-4d18-81e9-fd7195d51e25\n6dcad299-6b89-4540-89ff-fb13d919a269\n3b85c977-762a-40e8-9a83-d05a82a65132\nadc36341-726c-40e1-9d58-9c1e3913dfeb\n4602e995-8d47-454b-89dc-80402e9dfe0f\n3ae3c36d-ce2e-4f51-8436-c2098b61796b\ne4f65097-714a-48e0-80e6-41ee48566e81\nfd2caaed-09fc-4fad-a12b-f93ac6b3a6e4\n107ab359-695e-4a41-b19f-7ad7091db321\nbae01b7e-ff2d-4675-9d76-ad320851caed\n8001ede1-efca-4684-924e-e221b2d65e73\ne11431ce-8536-4e31-ad1e-45fd93842099\nc7987751-e8f1-49e6-828c-c1df187f08d4\nc90912aa-5531-4e82-8626-deb76ad011ef\nd5da7c8b-4a0b-411e-80cb-244a2613f907\n166110e4-6a62-41ae-8756-d17fe8af521e\n1f7995f2-5bdd-4ecd-994b-37162a9bd48e\nadcb96e2-77a2-41d0-98f1-7dcd19625a92\n6fe7c3d8-f382-444c-a585-8a5a3683d7c0\naaaf8823-d7b9-4865-a7ef-83d92e2072a1\ne4a9081d-870c-415e-80ed-1522a9cdfa11\nf38de082-ccc5-4af7-86fa-3639d3a07eff\n0bc23905-58d8-4ce3-99da-b4d95a5800da\n334cba26-ca1c-4e36-9be5-0b2380c11ab2\ne7564bdd-811a-4c15-9a5f-c06d0b134f4a\ncca1f6a6-4895-4b86-9674-0aa8cde87c32\nf126e13c-e4d5-4cfb-aa25-5c3362709ad2\nbe734ffa-82ae-4fff-9168-ddc1e1265b4d\n40d49000-ef10-4d56-9dc1-b9a18f4a7731\n1d02dc8e-8f18-451e-8e45-724b56311238\na583ee9b-cb95-4190-b26b-b4758a28e8d1\nd5edad56-ac94-449e-959a-14fe6e608deb\n73dff54d-6423-41fa-8c20-0de0da82ba04\nf302c758-630a-46ec-a5bb-8117cd901ac3\n0ed220d5-87df-414e-9c89-795ff9ebd7b3\n43d29bc2-9ea4-4a15-b758-371dcee4514d\nf298b7af-f63f-4848-aa8d-fe323f95e9ea\n31c074f2-6061-45cb-8368-8e6056fdf190\n2a45da0f-5609-4ed4-88bd-dca8d01d9ae3\n5a498da2-ab65-4ad0-9bf6-e944c9d84bba\nb5bebf64-ddce-4b13-a728-bdbe8e956ca2\n04ff5f52-efe6-4b15-94f7-042243d71c4f\n63b443af-9010-454e-a293-508dab058122\nbaf7f4ad-7a3f-4215-8ce6-fe1d2b4b22d0\n83e2060e-ea20-4704-9e09-709cb379e8e3\nb0b842cf-5488-499c-8872-206ea57a0f31\n64399617-b300-4408-b027-3d90d87d1eef\nae66abcd-78b3-47e7-8273-61c304cd86ab\n1acbabf8-7e9f-4f6c-9d45-1366a5446473\nbe9fba6d-9ac7-45a5-be7d-51fdfbdb0d50\n6fe73589-8fe6-4d0e-9e37-b7064f40bebb\n715c86bc-c0e4-4ab2-9c6b-6ba719f6a217\n1efbdbf6-258d-406a-a31e-bd540efe4bac\n9a9150ca-5c4d-4daa-ac65-82eb3a50da8f\naa86549c-b69d-44e8-b147-13d26b30e076\ne5e8bea6-91e6-4770-a70e-bafbf0212f6d\n1e341c18-966f-46b3-9bb8-42f28efd0ba4\n0bedcb20-9608-40b7-a5af-0d8e7f08e2dc\n8fe12d9f-8063-455e-ba7d-9a0ebe7aaaf4\n3529c411-74e7-47a5-91ca-57043d0682d4\nc903c938-947b-4f2c-9600-9497f9a673de\n12b50516-b6f7-4048-a655-732066945828\n9f86c66f-712e-41a1-84d3-12fb95a1a5b7\nfed695aa-fb72-4772-9057-6f072b615695\ncabbe953-dd48-43cd-8c6a-52ce3d94193e\nbbf4748e-73c2-432d-85cc-da3d5dde798d\n5b94878c-a83d-4460-a436-dfcc44324681\nb78ddc6f-eeef-4577-ab5c-9296f58b4041\ne856d14e-8ea6-4f33-a90f-c25339f12014\ne3b3c999-a8eb-4489-9d86-5a4ede2e42d5\n046af8af-6858-41b5-b604-4127d5688865\nd20ab987-e0f5-4db7-8b00-46e21d1d7b18\n19e9e417-7352-475e-b166-cc15acd61dee\n5397e88c-ad5c-4fe6-b104-a1898975c0a4\n006b6242-473e-4249-8565-1a6470ba628c\nb2b4ebfe-a799-43c6-9c83-8bc21d563bd9\n7b7aee25-6c19-45cd-85b4-4e24b35542f5\nea64400e-0dde-461c-9813-6b3bd9297873\ne6f0e56a-ba1c-48ed-a9ef-d72371eeb2f5\nd582a2b5-7ba1-4ed4-8080-24f41f42d781\nf2904d22-a486-4d0b-827c-7ec8e8f64a18\n6dae91c5-0164-4598-ac0d-49a3f981637c\nf8ef8999-512f-4e35-93fb-81fbf4273a0f\n0f64a73c-fb17-429f-9665-940ed3cf8cc7\n2cd7988c-1939-449e-903e-fa3b51b42e3a\n2db982db-0c9a-49a7-9956-072155a791fa\n268461df-e347-402f-a640-2066ca355fda\n6ed1044c-6325-42cb-8143-448278e3726a\n48015f01-807b-4c16-8284-757b3af7caae\n15543ebb-18a8-4065-a59c-6788d64fb2f6\n7d5e499f-1c25-4b18-b181-d329999be022\n6b6593c7-4e0a-458e-9050-299b1c1021a6\n559a05bb-ab2e-4dfd-902c-d21b09f18088\n267ebbb9-5fb9-46a8-938a-96de47e7c555\nc9ef9273-9b3f-4d7e-9c9f-f77038bbc638\n25ef4f49-d8f5-4f57-85b6-5ef86f0686a4\n039baf48-0b61-4d49-8a13-43a08b6fadee\n254c0899-aef8-4480-91a9-945b62631a69\n6b55ede1-ec22-45b5-9d85-852d61690c96\n2f213182-5619-49f5-b824-c82dc123188d\nff9a6cc7-fef2-4aca-97e6-262d8f2b5fd6\n9d9c9dca-c687-4842-a3eb-d92bcc0e5d8b\n9e1bfd63-29a3-4cc1-8abb-aab0287964f9\n6a7b9489-e3dd-4dc1-9096-aee01158de11\n62e99466-470f-4a4b-af3f-92b6661e0ce9\n51387617-16e8-473a-bb74-d2c4654c5e6e\ndbeddd91-ff8f-403a-be68-2fca0d5c8dc6\nffc2838a-cdb6-4e27-a6c5-6ba7a4f5b152\nf7d956f3-3ff8-4e08-a8c3-85b1f05a85df\n2a67ce9e-467e-4626-87da-42cd739e974a\n013182dd-c551-45cd-97b5-d40137661010\n9c74ae2e-540d-4675-b8cd-eb261250c202\n567b0d04-1e1b-4e40-896c-3ed847b0db24\n2d1a392b-0512-4f9d-a04a-9806e3979821\nc989596a-8a8f-4b83-b875-8cf4bf887dde\n001b0fcc-255b-48a3-b441-140b7305cdba\nbf0cca1d-6d09-4314-8432-1da6c2b3ac73\n2d8ad663-83dc-4fba-b9bd-8a5ed129f4fb\n38e0f072-e820-4854-aa77-79719545aa64\na73df95c-9873-49ef-bcf2-c3cc7781bee8\nd05e4a58-196d-402c-add8-a3b421d39b20\n74c7c50e-6cfe-42ae-a3e0-edf863afa752\n34d8d762-eb4a-4a0f-b2f6-d38fa063fa53\nb4d0c87d-4d71-4393-abf3-da59ab2dc00d\nb85c4b0c-2c73-4fe2-ba9a-4044f5f8e8d8\nbe6d40db-d02f-4c33-8f71-439150e3af2d\n8eccc1f8-9bc9-4cf1-9851-80030c31c884\n42a8b6ed-e317-4d0a-b6a4-ab146fe7c268\n8bdcc4da-b8b4-4996-b48d-6867913ca29c\n7e9b27e4-b2fd-4287-8c1d-9ecb8a56eeab\n8fa5acf9-28d9-4246-a2c6-25dade17074f\n45e69af2-a764-4712-958f-4ba56f95fd9a\n1b3279fe-532a-40cd-8ea2-0e644e8e79f8\nd7c0ff40-9bef-4d57-a39d-3c898380c933\nf61a132c-c33a-4d3d-9074-1ab437062ee6\n7578b471-c637-4f16-bef6-9a6e46503ea8\neebe3ecc-ac86-4a06-8131-319cb2b060b4\n75879977-5a45-43e3-a4a3-246429db3e88\n606f2df2-a38c-49d6-b1cc-3691833b5e02\n46db45f3-5108-41b4-b1cc-0249f45d3a93\ne23a2ce5-4e2e-4c2d-b575-59c304d2d7f6\n76ba4b5d-536f-4d13-be37-414c88df90da\nb8cc1a02-3d9c-4625-a55d-c78c327e874b\n64337228-36ec-41b1-b63c-dbc4d6f44234\ncf5a4f44-57b0-40e6-9078-da0be9b21678\n878c4c94-9d7d-4956-91b2-a5b750e218fe\ndf35d2fa-a5e3-4c0d-924c-3ba462749c29\ndc848f39-7704-4125-8e88-84e4c0d78856\nf380d193-b37d-4e95-af5f-eb359ef977fb\n9f163386-b0f6-4e13-ad8b-72b7ab77ea06\n938d7eee-38f5-4714-a893-42366a772232\n23e5fb55-21d7-4fdc-8c81-56e226b2cc61\n61992f9c-3a4a-4c96-b933-9b434bd100c4\ndccc3964-882a-4a0e-990f-d2fa1cd6e6cc\n1afe0d0a-343d-483c-9b4a-568bd9130939\n35da4c52-9dd7-4d75-9f11-d87ce1407fa2\nd1aaa753-097c-4d20-ac13-3837a7eb9ea7\n391738fe-c4ad-4641-bfb1-a558b0ad71ba\n27a7c22b-0663-45c5-851c-9522c7263b22\nac89ae7e-5f27-4c26-9eff-bd31ea5dd86b\n61ba1933-63b1-4e8e-a051-058524779f3f\n13f7a03a-f625-456c-8ecc-4d91deffac40\n14bfb0d7-5250-44c5-997b-710de61e0e58\na539a533-10bd-45f0-ae90-ceac380ede7c\n4dd0214e-cc6e-47bb-bcb7-ddeb78be71cc\n4ef9adb9-d9f9-4f0e-a3b2-28c6f53b022a\na7f66307-eda3-491d-bc4b-b8aa592079ee\n078daebb-85c3-4c26-b02d-8864ddaf8574\n6ace58fc-15ea-40c8-9c48-8bace874ece2\ndd9afb87-c0fb-4c87-bc98-d2239ef57512\nb7051d30-8aaa-493a-9bf0-bec05ad61dde\n55bcf422-c7d7-4c13-8ccd-6c7362ba650e\ndead35c6-21a0-40b2-83c8-7fd200706143\n095f8300-bacc-4922-8894-abde55062367\n8d78cc54-f1c6-4022-8f48-999c76f5590b\na804fa70-4c7a-4fe4-a8cc-7d72a65ec45e\n3bb8b435-2bc8-43f0-81c2-2b158103f28a\nf2ac9f0b-4b98-4bf5-9be6-ccdd89a33f34\nb29d4cbd-e6c3-40ca-b304-ed194cdbf66d\ndc8bed17-86e2-4c6b-9b3d-5f96d50832b1\naeabae90-23e1-4800-ad16-fc97c43816c0\n4273c2bf-8ac7-40e7-87c9-9559c1475620\n19eeab99-d4c8-4aee-a717-3f96fb2ca85d\nd2566144-aec0-4de3-908b-04e1c263ef0d\n86193799-814f-4239-908c-9a845a3f7806\n9118f4b3-c224-439c-8572-b71490b58795\n22c1caeb-7587-41d9-aee0-956cc705fb8a\n97e12cf9-804e-4bdd-bd87-328678917068\n464165cd-9cb7-4e35-8fde-a2acb1488b06\n69040345-6b43-4599-8281-2494fe574bbf\nbe368fd0-02d8-4b8e-b7fe-c5fdb2b9da4e\n770926b0-30d7-49cc-bac0-237239467670\n26fc2c24-664c-4413-a7a3-14643b5827cd\n05070055-7204-40df-8f30-d6d38845214a\n6e93b4c7-2e4b-4d38-8d78-126912960c5c\n97136b55-cb43-4602-9cb2-affdf1705716\n5e2d3277-b77e-4961-af42-275c8b87d5bb\na0465fcd-acd5-44a4-a6a2-7d369570fac5\n459c2cdf-4cd1-4adb-85b7-58b815d4d170\nfd60c3d6-c080-4339-88c6-76a2844531b3\n51e5569e-0dd8-4762-957f-74bb352dd131\n8c6819ef-6275-447d-80fd-5d95131ab2c9\n82424c4b-720b-45cf-be11-7dafb6138482\n4e2c849b-f004-4181-8b88-24ccdeea6eea\n84b4a090-1233-439f-b103-2d78a518ff32\nba242323-8b63-4054-bfc5-227297664681\n020d1df6-2799-4724-9404-76c314c825e3\n5398c7e7-d613-4e42-b596-3228c3ed9ead\n5b770cc6-ea4e-4277-a9f1-a8bd85eaf840\na51d1c8b-d802-4d47-9912-20c08a792da3\n6ba500b2-f1ce-4f39-b7f7-9d3466a003f2\n6b18e9cc-dd59-4717-8f76-0b2dd8856c6e\nbde0edc0-6ec3-4317-9da8-e8da346d3d6e\nc29ba8b3-5150-4b99-b365-83ba016275bf\n9777ec00-7767-4f9f-bb39-6493177c1e16\ncf41f53f-1974-4a5a-9ff8-5febfe821aa4\n146c3247-5361-4d69-ae1e-b4d0c906804c\n62bc96b3-e6b6-41dd-849a-9251cc9e8be5\ne8a08e8e-bc8b-45c7-9b6c-ace189f4f218\n6f3d31fc-c547-482b-be37-2e965497fa18\nddd98fd0-b9a3-4ea8-ba82-7261a7847a08\nf1661d81-c995-4dee-bcf4-3576beb9e92a\n8dc1951d-fcfc-4970-8ea5-94706c8f49c2\n562aeb2e-4510-43d6-9321-6af54f160127\n89e4741b-daea-4f45-8ffb-64ef761339d6\n5e1d061f-2e4e-491f-a6d2-8e47e31e6e9a\nafef85a4-ad8b-4e1c-97ad-97f8d2b6c33e\nc77b1d63-ad3b-4a92-83ef-1c91c322003b\ncc56ea36-51d0-4672-942c-c126e5e072ac\nd8f3801c-d3de-478f-bfae-0673cfe60722\n2dd9106c-1cc4-4818-9533-2db454359eb7\n08140d39-2f8b-465d-93d3-8bce8d801fc0\n48f90710-91d3-4081-a012-6017b255f4dd\n693a4e90-28db-456b-ab40-34d973dec237\n6d6cd473-f414-4671-91ac-02dd2b58b2a6\nf766ea75-2a42-4d2c-9f46-c8ce12e00a14\n6f56e217-3e4d-4511-bb13-259544b44521\n8b5fb641-6bdc-4a79-8b20-c9eb3704af90\ne5c5241c-f1c2-4da4-a162-acd0bb3296ac\n06f73bea-1910-4671-b172-6fe0e20f2c88\n09365c20-7572-4114-a61c-f8f0f02c3a9e\nf2438cfd-ebfb-4d56-88b3-b51bcf7a1d3f\n223b335e-a290-4d5a-a8f1-77bdb549c0b3\nfe389563-1c38-4c5a-937b-4bcc0f608fc0\n98bebdea-7e4e-4de6-b878-21c1fffc5a25\nabc95e5a-0517-4cf1-9633-18d90beb3896\n952f0b13-5a69-4c7b-a21d-2ee4de88abe7\n384873d4-1c7f-408f-86ce-30e0fe995b10\n3053643c-0ca8-485f-8695-27a6326cd4b3\n61c63c72-5a1c-4e18-81ec-3459316f79f9\nb6c76baf-9424-4909-82f8-6cdb4b44aa13\nd97c4aae-8bbf-4837-b921-ba7f1915ccea\n2258f172-0b8b-4ff8-b4aa-6c00f0ddb723\nda1af03c-1069-47c0-b119-377205a92158\nf60e8bbd-bbf3-4b65-a32d-a0f7adc129e2\nf0ff3979-825e-45eb-bf25-addebb85848a\n658fc199-f98f-4837-929a-c0212fbe88e5\nf1cc1b4a-ead8-4d8e-a86a-7e6a81a82b91\n69a02b9b-df94-48fb-a0f0-825632d5cecf\ndc2c311c-060c-484a-9e24-58f855e67f33\n7e6d43a5-f50f-4ebc-8d57-cf16b6a538a7\n142599a6-52c5-4e68-86ce-82184ee6fc05\n946a5950-b2a5-4a5a-af3d-67ca3043b9c6\na59f1c9f-21f4-4893-82e3-d051881cdd17\nf9abeac3-beea-45c7-8781-4b49dc4905d8\nfc19ed96-3f5e-4c5a-a1a6-baf0c18ec9f6\n790d254a-91d4-4d27-a74a-2cfeeab16b9e\n38750022-1490-4cc4-8869-a3c7d5300ccb\nd5939358-5a34-40f5-8572-8eefe88548ab\n9d2d9ee6-4cd8-4d64-9428-6b4717b04527\n89a8d5d5-644c-4332-a10b-f48f5f7f0a03\n394ff157-7683-4721-bcbd-7f4f6345bd12\n139db12d-f741-4c60-8f15-f3035c8ad904\nb586a61c-4385-4496-931e-446b33f22219\n6921d250-7e10-4e6c-989e-ef6378c532a5\n5274a847-d7a2-4bb7-9c36-280c5613afa6\n67ffe424-e2ba-41bf-902c-a3e8216fe5c1\n049115b9-70a5-4230-8fc5-ae9f3161dad5\nff1b5528-f181-4c41-b457-dff528c346a7\n1ee05966-41f1-4805-95b2-2fdd7821a8d4\ncf509c96-393e-41ec-b307-c4518791e811\ncd1dd8a1-5314-45b4-89c0-95a80c8ea485\n44100eaa-110b-49ef-94a1-ca85b678f29e\nc987bb59-a705-4cd8-9eac-e0823c149c69\ne3f6a174-d486-481d-a948-a5b9facb1fef\n5b5b9766-5a59-4b15-adb3-dbf30dd4402e\n59b4346e-2c22-4a5c-a799-329909e4f644\n2897a23c-3bd0-4dc4-82c5-5ed8d7d07514\n6bddfe77-762f-4799-b889-409c55413023\n07fb1901-5b99-4fed-b7d2-dc894726e361\n5202bf96-dc24-4685-bcaf-7c28e3d26d5c\n476dfd3c-4f3b-4cfb-bee2-b25762d7b54b\n2fc1f970-1a6e-4bae-a606-fb9ccdcf928e\n607327d4-c307-480e-ab84-58b2aea14be0\na579c206-1325-40de-9a1c-2f5a96730704\naf0f2817-d669-4989-bd49-af79cab94fdb\ne972fc06-9a1c-415c-becb-291dc14b2a0c\ne7a58f40-b25c-444f-836c-91edd44740f9\n79fcec5d-3656-43d2-9f13-52b01a723aca\n153301ea-fa72-4530-8480-9078788521a9\n8d1bb8a5-a1f7-4088-8273-15985a4fcc00\nacf7d4c6-36b1-4739-9016-43763f52955b\nbf509df1-d046-4646-9317-1ddc30e78668\nb7b00222-6a17-4f92-a182-96da30525f25\nc93c5ea0-1d47-4acb-bf80-35f3cc3570cc\nf3aaef46-c423-45a6-be45-2ff2518880df\n63914709-1faa-40b8-a6d1-a4ba9e57de4e\neb73c004-2495-4106-8321-b32c12a8affe\n1f40d179-c074-4a2f-8d82-b6c126bae5e6\nba80dd05-4803-4bf6-b23d-d73e74813bb8\nb5016170-71a7-4d86-b6e0-2f887da427fe\n4c6b6098-1ce1-4995-b28c-d54917ad7cd4\n7b9f35d0-b40b-45ba-b22b-c3480f3c4a81\ne1359e55-ca46-4840-901d-f5f29168c1f3\nef367af0-769a-4c41-9b97-1a58a8371ef6\nc3f1fc4d-e94d-4fd7-8136-2251cd68581d\n81423526-d579-4c91-9534-bf66f5d2b4ea\nce49ccaf-3bf7-4209-a73f-3a9d102ce3e0\n7bd9f7a4-70ab-4f62-bae2-1ed518b08153\n1d24acb2-38e9-4919-b7f4-7a9b561d0f65\nec18f634-e82d-44b2-b01a-565bca4d7540\n70a49391-c595-4399-9ccf-b4c286147f31\n8a582c7d-744a-4bbf-bd06-d722152c7b4b\nb051c841-2635-40fa-bd80-2784758b6500\nc8e9a42e-96ab-4dc8-9dc7-bd0b89da0542\n7d180b11-dff1-43ec-add1-5c36dd3cacfa\nd720cbf4-6d9c-4c37-a12f-4cfa1b167a7e\nd918ec72-8d50-4d54-b43f-705e34f0fc10\n3bbb22b2-85b8-4dba-b584-2ab99b3521af\n848e6e7d-3292-4822-8842-c950a0dd7d0d\n704084b3-f529-4cd1-b50a-df04b0fda309\nc0ca51b1-a1e6-4087-aea9-526a39a1dd27\n220eafb0-c6a5-48b2-b9fd-a1272a09c1a7\n198c9790-1290-4b58-bf77-c31b10bd8d9b\n5e011d75-0a04-4647-b3e6-5e0a7b7a2b54\nbaf316b8-fef8-4909-b225-04032219002d\n6225d559-201d-4289-b066-9b580ba6283b\nd75a2e6d-0e31-43a7-ac49-f1b968fbe6b3\n3cd83f52-5af4-4675-a219-7470a9f92343\n9e9f5e34-b6cf-4294-b7de-859d7d1a012a\n5e1b1f9c-c146-43b5-a9ff-b5f34013f931\ne83faded-9340-4a5d-9b42-c8e09fedcb30\n895f2fd4-f7fb-4388-a321-1dbc3e7e038e\n834833f9-c35a-48ec-9934-db520bd0e984\na3a44dff-769f-451e-ad15-2070474ca693\n8edbe16c-3e4c-48b6-8da2-9598f73da47a\na60b157d-ef58-4abd-ac1f-cb423b3587f2\n76c86a60-48ea-45d9-bf50-055390bb1dc9\nac64e3ef-0a23-4f62-b9c4-a32356895e27\n3679561e-5daa-43af-8846-3794c185e777\n5bb21af4-31e4-4cba-a1b8-0001b3d5d7da\n545950fe-e08c-4511-893d-7390fedd6dab\nf1f4a7a9-3f4c-43a0-9a1a-66930d4da1b5\ne4c548c3-45ef-4379-bdf0-2bd39bcb5928\n27903523-6d33-4ec4-b5d5-cf5fd82e1095\n8aae5b8b-d18f-4f1f-9e4e-52330cc0d792\n1228f464-e183-4b96-b99f-792b0077b297\nd89a73b2-8a0a-443e-848e-ea487a06f17d\n6984843d-2617-479c-8752-acbf10a2d86c\n22321b2d-b9ef-47e2-a86b-b5becee7d70b\nb748cfa8-ebf6-4265-a6d3-0a24d876085b\n3582eeff-2d90-457d-9e4b-6ff1cadd4b32\nfb75d832-2637-4ebc-b45a-698246fd08ac\nb130c9e8-5fdb-4b96-a081-4500c4709fc9\nb0e7ce42-df81-49e8-a63a-425aa6a66696\n2bd44b99-82ba-4836-8414-045bcf5a2ccc\nae7281fa-5280-4838-970a-2c50f2b5ee5d\n19c9e3a1-3ff6-4319-8237-1134c0bf4f7a\nf0398af4-5f37-41c4-88c7-ffd040fb4f1f\n70e4aef5-89ac-49b2-a8c1-9187b9f8f69a\n7ff096a4-fea4-4407-9983-5adf50c0a61b\ne09f9905-04de-4f35-b6d6-02af4c8c819c\n84538ac8-13c1-4b02-8e17-1def372d28b4\n13f0e942-bb45-4fb4-b3a8-42200847a3d7\ndd77f7ae-a595-4a31-a2a8-674aed530b8b\n28fc393b-1293-47d8-81d5-92c184f16272\n0034d6f4-afdd-4b3c-9e3c-f61881ce53cb\n1611a23f-099f-4559-adaf-21d32d1e41c7\n2c6a1e09-c241-48ba-bc04-9c1723ea2441\n90e3f425-d01f-4c1a-8412-a0472d2f6248\n1ce7d83a-c701-4de7-84de-d3e36d4b699b\n0994d59b-23c3-440c-b1cf-e3dd4c43aaf1\ndfbf90c7-d47f-4530-9228-99dbb435f78d\nab759da4-dde1-44a4-9929-7d6c219e1044\n150139f7-fb43-411e-8d62-36bd750884c8\na7caace8-0311-4dd5-af1c-9cc3526b8520\n9407a75d-5c56-4c1c-8fe2-8ec4b37d002a\n3dab2847-f09b-4427-bbf6-d3b794ef196d\n136e531f-57b6-4abb-9a1d-6c48489a5b5f\n342e2a1b-4c05-4179-b280-46f8d29ec624\n1034e168-b876-45a7-ab7e-1455bbf9b10d\n2632c4a9-8ebc-4f1b-ba63-500a830967ad\n65a847d6-e9d0-4132-b762-843e817412dc\n962eb4d1-ccb5-4b23-9e0b-287b24d16d8d\n0878188f-7e51-40a7-87c3-48ab4c7986f2\n974d008d-3ff1-4f42-9b78-f443bffe28d1\ne42b39c2-ad48-44c5-b151-7ea4cc10a984\nb49ee749-d99c-4377-a15c-1b84925b681e\nd908daf8-9bf5-4ce6-90da-e455ecc8dc42\n03b2f1db-aeaf-4498-ac0b-3515257cee08\n0e402eca-4c09-4616-8524-83622c25c696\n5fbd2473-cead-43cf-8930-795f06c2a9db\n221e869a-29e0-43dd-92e7-23eaf322ebeb\n12c803a4-1cdc-4075-b5fb-7f72038da6b2\ne204a2cf-edc6-4597-9c2c-46e3f2ed21c5\n20e6e87e-29b2-4679-a74a-c6ce32f4e6f0\n898554cb-3acc-4952-a9bf-dc81b4ee5250\n5d97d063-1417-4a97-87dd-2df14d0b9d96\naa4be88f-f029-4e26-bb9c-07f1dc727ae9\ncb514b2f-0d7c-4922-b9d0-f06f3f73e4da\n6c9bf28e-0eb8-4ad8-97af-28af10780d9c\na742d487-dcfa-4e80-9641-7f9213eae6a8\n8b6b052d-d882-4514-a066-38d4848f8bd3\n01083a62-20ef-4bc0-bd32-4edd58def890\n4c731503-d305-474d-9130-89fba6be5560\n85e5b788-bb1c-4b1d-8d52-86235a45cb4a\n4c0ac8e5-c556-4efc-bcf5-fb715db15ffc\n54d9b6c8-60ec-4de3-9660-c555b8046d95\n58f9161f-b7b4-4841-bf7b-337e14417065\ndf0d0b72-6ca8-4769-8f33-a84b5884413f\n0d42ce92-a9a3-4c76-afe2-e59520aba76b\n5d3c2c56-e129-4ad1-8f4b-167709197908\nee714394-2dd8-410a-bc86-dd111211829f\ne2009c89-35e2-4135-80c6-d95a3879b8ae\n0a3ec655-88f7-4991-a6e8-762448869ed6\n7b79ecee-7842-4da2-97a5-302f94753ebf\n41161a77-1f6b-48be-9f96-cbabcc3f2c3f\n188dfe21-f364-45e3-abdd-a2e2954027ac\n83108b21-9db5-464d-a9ba-b289f1ff4a13\ned356acd-c8df-40c9-96ba-f524538206d1\nacaf066b-bac2-4a1c-abcf-60851bc97b2e\n7f4c5bb8-c9c3-4600-aaa3-c0c6b2a5dbd8\ne24a334c-ace4-4d5f-adc9-642e5f610628\nce076a9e-dc43-46f0-90e8-c21f3ae9820a\n62e95cbd-a922-4a0f-a1b0-d970b6390431\n664b42ad-e794-4756-8940-6d42eda0104d\n1b6d80a4-848a-4918-9ac5-514845c35172\nfda77aac-0512-4d53-9a80-bd5bfa431ec7\n0cdb4c91-1600-4e91-8809-d0a2cc19a952\nbeeefd3c-a518-43c3-89bd-a1b98929a21b\na831fa63-3961-4ced-9128-fdcb0988a53a\n49619e21-a821-42cf-8123-2fd63806beb9\n3667bc04-1a2d-433c-8bc2-d85a9b092298\n14fe2383-76ef-4282-bbc6-dc29835240eb\n97173135-7551-4a45-9c64-884fe3d94593\nd0ebe4e0-5018-4cfd-ba93-653ad63ad040\n60ffd9dd-0e26-4598-a4c9-5221e9900177\ncbceecd9-0e62-446f-836a-c04f690b565c\n3f198f02-3af5-41c4-8f68-0047e354faef\n4251a674-5870-4a65-bf96-4c792db0887a\n6863fc1b-a809-43fd-9cc4-fef67b255899\n50824a86-1b98-4ab2-a0bd-31b5fac62dde\ne8e0f209-85e7-4e8c-8adc-8ec1dee2d2be\nd893d625-174b-4d50-9ad0-405bfd60f7f2\n227b042f-9c17-426a-bbca-08e306dbe0dc\nc459d8d0-047e-4752-9156-8410953e1c56\nf3615453-0929-4ab7-b553-ceb660cadde6\n230371e5-8c07-40e1-b51b-57273eef7f19\n89c27aea-7cc0-4e07-b2fd-76d6576b0f21\nd4d59663-8a91-49e9-a005-6cd9555cf16a\ne621993a-8574-4c56-8bbb-875277e09756\nd24b6fb6-7e89-4ab3-b137-4c0758959dc1\n2ee32774-1cb3-46f6-8075-06a274a5d34c\nfa3ee971-6e2d-4f75-8456-089c2d896b3d\na7658ce9-91a3-4fba-951b-8b0093d2f11c\nc7d54749-4198-4e00-98af-4a39d6331f34\n2a647e9b-d601-4fd8-a901-f94ef97eab8c\n40a62c7c-113f-465c-a491-ced13f3f8152\n243cef91-1d61-4e08-8614-f5151fb0fd21\nb28fc2f9-c614-484b-85f9-52b052500a27\n29952c19-0651-4233-87be-3cfed88e3943\n5be56b1e-cfec-48cb-bf58-5751e7437e6a\n5c807eb7-768f-48b6-bcae-56c9df9ab7e1\nff754926-2bd4-44a1-8112-174c5e9970e3\nda76f911-7f1b-47c0-83fd-dea0d8581835\nc1a71847-5b40-4572-b4d3-fdfde091e9aa\na72e4677-3e37-4dc9-8f9a-c032aa856954\naefaba45-f79c-4e4b-a279-b1cd1ae7e176\n5b5d6b88-4c8d-4f1d-8bb5-0515be3f58b8\nd24db008-91d8-484c-8148-e5a242cef955\nbea763d6-5b35-4b9b-9e62-89e2da45bfa6\n828b7230-0760-4f97-b853-d5b96cb578c4\nb9803bd5-d12c-4b46-a70a-11464b1a92e3\nabe4114d-d94f-42ec-875e-b63a8fd0416f\n53f44ffa-0765-4be7-b06d-e02995d2dea4\nc8d499b8-cf05-4350-9e9c-7daa32e1d57c\n686250ba-4a6b-4bb8-b460-12a04148a929\n08d1d016-e126-4b7c-be99-71a3fe304c75\n56884950-9d73-43fe-a50a-86a0aa7859f6\n228c8173-fb96-4039-8dde-54f28111a9fd\nedff729c-d704-4a21-97f0-762f9fc21ada\nca9cd64e-eac3-42ea-b45b-4ad70dea1bf9\nc46877e7-670a-48da-a21c-1389dad773c4\nad0e70f8-01f6-4c2d-8ad2-f4789f22af8e\n136777e4-a414-474f-b5ef-1c3259edcf6e\n3adc393a-c070-4a9e-a8e5-778861d71a64\ne2bddece-c700-44ef-9ea7-8bb2b52b2975\n67800983-2e32-4c40-b9a5-ea8004f965de\nf9679168-d6b9-49ad-8fb5-a3a43f400590\nac1b593d-745a-426f-a6fb-8d76f00339c4\nd41b5788-bf8a-4c09-b41e-674166594bfb\n6a293736-a38e-4ee7-9f08-fc8a21e08030\n497cf702-c0b2-4de4-88f4-421b33f1e53d\nc70ce350-ec0f-4c4e-8e07-cfb3f43da673\n534d9766-c149-4d3d-a840-8ad48352db76\n5c9f25fb-361c-4379-984b-322ceab01c9e\nd9c3a068-b4a5-4607-972e-c829028dcaa0\n1803ad41-8a92-4578-82b9-b4c8e341afa6\n561bde41-8fea-49d0-91cc-d56831ba9eb0\n665c296f-2952-4476-a6c9-4c3405a80cbd\ncb5dd472-9d3c-412a-bc2a-a700358dc187\n237b1e03-424e-490f-94f0-1daffde75d74\nf08f4a0e-a5b3-441a-93cd-abc83fc6347b\n54e0d355-0c87-467d-ba73-53866191571f\n5df57988-befc-4665-92f2-6f75051ef04e\n1d6bd59b-b6f8-48cd-bd17-b78c6c431a2a\n6423a27a-396c-4cd7-ba21-bbea8fca20e7\n1d95b2b2-218c-442d-b1ca-1536f3248bc2\ncd737f52-6642-4f49-9c48-50ba07bde41d\n27509983-828b-4c24-9a60-a93575e566a3\n650e3d8f-a5cb-4271-9cb4-a70ceb52b7b5\nacecf1d3-1095-4a2e-9a18-392930d8fdd2\n7c8f644e-955a-4b99-943b-0140b02308f2\n45283956-c8e3-42f5-b3c6-d09da4bca63a\nbae0bca5-0793-472e-a920-1e939f0135cf\ndcfcbb48-e09f-416b-8f31-5da4ae347179\n4e250faa-a3ef-42ce-9bcd-c1bce6a6fbeb\nb2662ec6-4e76-40e6-97d8-6f543e1f3bd6\nac6ade29-c3ef-4bb6-8b24-9d66d8301f23\neebddf86-398d-40a9-874c-ae9378c66138\na83c2898-0e62-410b-8d17-45f21d2a38e3\n2b09ed15-3703-4f62-8bab-cb5f54706c60\n12176350-2885-41b0-bd45-5e24a61e0952\na5dafe0d-fd2c-4cf8-9190-c391f7e12a0b\n6a97f231-3490-4388-9b55-3985d78ae591\nd2b508a4-8ddc-420c-960e-18ea6084261e\n1f371fe8-297f-455a-87ce-3bd59db19968\n60112a53-46f1-4b20-abe7-222ef509e61b\nd739d766-2219-4988-aa8b-67d12773ee2a\n017f0713-28ec-4481-99ab-7b1d4e8ade95\n5be98737-4b67-4849-9ae9-e6b0abe0b5ca\n883b2eb3-05ca-4b39-9fbb-e4aeccc8191d\n5f0c4e60-fc9b-4aa7-91a8-66eee8ba7692\nc5fae4e1-5687-44ea-bf44-58e0c23a0dd6\n7aa407ca-929f-4492-995f-7268899ed675\n8214a77e-963c-47a2-80b6-a55fc17ce272\nc3fd7f11-70e6-48fd-acde-aa6b9c9970ea\n0feca146-2a41-4472-8d1b-81736dcaa91e\n5a9e090f-90ad-46b6-ba3b-518485a59c94\ncdde27f7-c538-49bc-a798-f02bd85082b8\n2ed9f3da-f183-4b73-9b58-20bd97f14004\n3bc4b357-265a-4fe3-b338-4939c23a260a\naead7722-fddb-471c-a793-49282f95f826\nd3c797d8-8863-4c82-ab91-d1ba36972023\n16c7b6c7-316d-49be-911f-2a6e8bab2a3e\nc077334c-8db6-4791-a674-85a0af974295\n187a61ce-97eb-41d6-bfc1-eaa1fa99838f\n747cb16d-748a-4b9e-a904-d66b08667bbd\nc337a1d9-8f1c-4063-83ec-83ebe1c5f578\nf123be66-5d01-43f9-a2b3-c0c6d1d3dd03\n7f24de87-1aad-4989-a0d3-57629a638ce6\n91fea986-9482-4bb0-8dd3-12875c9f067c\n0ebd2895-685e-4a48-80fb-ada2ea6347c5\n66b64d04-4d13-4b0e-96e2-d7b5d3048f9f\n1ad78b95-0fa1-4d0c-9db3-fdf69f2499a0\nad0212b4-86e1-4644-a172-5889d047d455\ne63c2594-f1ac-4c65-b857-cb863da35503\nc8d08510-0fe1-4fbe-b0d4-a783fcf35080\n1774c27a-8761-42dd-8768-4b2ab6089e94\n28ebc0c3-1933-4388-adac-35e9c13e11b2\na31bb9a5-d05a-4dcc-ac9f-7bcbded20b5e\n772a389f-d9ce-4cf9-b1e7-5a49491e27bc\n79feb78f-7344-42b8-9347-2e6174bad9a2\n98df1381-68f4-45ea-a7e5-fae48c5e91b9\ne0bfb26c-28b4-49e0-819c-039cbbda1ffa\nc5a162aa-7bd8-4899-ab72-257f877dbd93\n82105962-7958-4720-8c59-a24525c318a3\n96f99da4-940f-4636-9c93-14ca1f86db02\n2f90f5ba-03b4-4322-92bd-63c5384371b6\nb3588594-1eef-4dad-ac81-2bed29528e77\n228b0124-09f1-45fe-bcb0-99e113ed0544\n144a0d3d-e5ae-46b1-8401-e5eb629bba44\nbf7d51f4-8c7e-46ca-965c-c49a7c7e3b9b\ne6d972b7-f026-42f6-9022-a24cb6584531\nce5fde14-8c26-439b-a21c-fdc28e214a5d\n039ab840-d7aa-4227-ab8a-9e9f36592c1b\nbec1baeb-b8c1-4315-a7f5-d674ce93678f\nccd29bbb-2dc1-48c2-bb55-b728e3f49c85\nea3decf8-cc90-4a65-9424-4790a729ba8e\n9203b19a-5a41-4911-9d1a-c8aca8abac21\n7a482ad3-8dfb-4018-8660-e037c5c18452\n1fab4092-b3a8-4837-9560-e6b1f9c72b7c\n474f74ad-be35-4ad3-be76-6801c8597d0b\n3a4852ff-10a0-47d7-ae1b-ce1f3f441586\n252b84f8-f506-4ce7-b083-0cfc8d96cccf\nb7f707bc-7d20-4595-b3d4-fe4dc8b8f8e9\n3a3a8f0d-0d11-48d9-a954-c4bc9bccb7b8\n95dca6a3-65a1-4133-9c0f-ede110aa204e\n9ec3ac38-6cf9-4a3f-ba45-c492b62ec943\n8b40f1cc-5d15-47e3-a142-ed50c73add24\nbd9119c8-2898-47b7-a4a9-7369d6acdef7\n2ff786de-008e-4018-b64e-8e8d50bd588f\ne21f5cf0-bbd1-41ef-be6f-81ecd0c6d8e9\nf8489054-e447-40ae-a034-ae0d0d4349ba\n14d862c9-d095-4a60-867b-de6aa92da780\n91cd59a6-94a2-4741-90eb-e9658b3ceb2c\n705e71da-e732-4612-83e3-83f9dcc808b5\nae15db17-f354-4b74-bc44-d6babe72c1f2\n52da3845-b4e9-4eb3-8b70-7120fe92cd26\ne864ed51-dfa2-444a-bf99-d52188a8be15\nc8dfc352-8f6f-4139-8e33-00ca0cd5adc7\n50a18458-e043-462c-83f5-9aa4da7461aa\n1f9e3005-5bdf-4752-a378-c0a4200360f9\n57b3b4c1-65d5-461d-a0cb-6aa9d22385d3\n9408bc34-9a51-4133-884a-af40224f2cf0\nd06f11ae-d293-4731-9a57-d5e8b6dab9eb\n824da8ef-c382-43ff-bde3-930272292d7c\n7a76ad76-d24c-4d54-9824-a17bca64cb9d\n996dd72e-3475-48e3-8e14-bb6b5dc364fa\n878cf32f-9ad5-44c4-ac1c-6ae38f2f5eb5\n736b3a92-19e1-4c3a-aa8f-5c406dc58f88\n626545bd-8a1d-4257-8c43-cce46641babe\nb24b0cff-3e08-41f2-a8b7-b2453237517e\n9de1c495-019d-4a73-86c5-cfb37b924df4\nb092e59b-9872-49dd-979a-043a6e042211\n9a977cbe-7770-439d-8d5f-023f6e3a315b\nf1a6c75e-34b5-46f1-83c4-b9dc17990b7b\n4dbd2eed-0454-4966-83a5-0d41c7fa8d3a\n2bf51ea8-1da2-4bda-885a-688dfbe4e78c\n475df840-39cf-4591-9279-8b523293d251\n14680986-5fcf-400c-ac99-5811a4017893\nbf436b16-a1e5-4726-ac65-fe7394eb12db\n1470247d-77ed-426d-81c2-007b5d5db3d1\nc3d2fde5-0435-464a-8776-400861749206\n09d58005-4534-4d72-a965-5afc47611263\n922a686d-bba7-4f83-8f87-885e9c0721d7\n2debacdb-aafe-4c03-a754-aaffb0bbb0a6\nd3970843-8ac4-42c3-a3ee-7d41d013d7cf\n894a30b0-958a-429c-aaff-c3daa851f4de\nd95f13e0-8602-4f68-a923-07d4dd59b966\n4c42b4be-67c6-4506-91d3-68096aacad4c\n848b765e-39ba-4be2-bcca-885ca659eea6\n4660b877-263c-4295-a72c-2b4a28f8a56b\n3f014236-587d-4eb6-afa6-8b45327454b8\nf2d9a3a4-c6c4-457c-82f8-a5becb1e66d8\nd9f82fcb-56a3-487f-9cd0-62be16965e14\n7f3daf05-a8fc-4394-a872-bf15396fd4d6\nd94f4e88-604e-4534-bdbd-11d0ff186c51\n9eb01bca-1d4f-41d8-a35b-d365c6c5b7d3\n8b457b14-614d-4550-b9fa-f9873b35ccf9\n7659289c-ec93-47ea-b17d-e62ba9854283\n21be04f0-87ec-40a0-9f30-3f34beeb20b6\n1ac26abe-cdae-4ab5-854d-458be4eb76e3\ndf1ce5c6-4a13-4e89-9bb3-3cb22d510668\n1160eaed-4e30-4b23-a888-b7f4e6e4adec\n85691f62-dec1-4955-8fcc-8b613992ac4b\ncaf3b15e-bf75-4f09-84d2-47b1560d1737\n050c7e63-c6e5-4c09-82f6-d5070b7c7cb8\n1b44a435-9ebc-44ea-9477-6b3fd70963f1\n45e70290-8e04-469e-9425-2b5c903e104f\n004203cd-1b38-4c50-b786-3b042fe6ab21\na5c9bdc2-5775-42bb-9ff8-726fa209162e\n9175c180-afc7-489a-af9e-6242cd3f2b29\nf72e0aff-0f9b-490d-a545-b0f63e2b6d7a\nd810d5a1-2501-48c2-a483-e513d4e6c062\n905940a9-fc2f-4421-9b97-00bcf6fbdfd0\n1cfd1155-828e-4141-a5de-462ba30a0815\nc1ef8854-0058-4da0-b2a0-c82db2d88957\n200e027d-2215-479f-afd1-352c15950923\ncd985f6b-3fb5-4bb2-a0f5-0ba43f1f1b1d\n8224bd0e-c38f-4698-bb83-ef27e0b8fa7f\n956d48f8-e7de-4926-8367-746c7bbf6a89\n5388a45f-0642-44fa-9c17-c5eeee471174\nefb2c4d3-786b-44ca-a629-88952819bd2d\n7ba568a1-b349-4f70-bc26-2948c353d4b3\n0bd5e076-fca8-4eb6-9e58-1d15436c325b\nff479fae-2928-4dc3-80d9-436281b8d187\n93913124-d7e9-48c5-9eeb-964999b4b40f\ne8cda5d2-da66-4ff7-ad3d-9fa21bd1d14a\nfa1d6e1a-678a-4cc7-9069-62410f7fe4ee\n2a789544-6240-4811-a36c-5edaa3c37c9b\n32bdfd0b-5c63-4df5-86d2-e9ee721ae9b0\n68cc0d14-2ae2-4703-8373-f00c2581b113\n3192c2f4-7951-47c3-bd2a-4adebec4039d\na74aa214-9cc9-4bb5-8a03-8bf51ff77512\n453db06e-ee67-4b3a-8764-182180746277\n1269eda8-b6d6-46da-a5b8-acf95de4bf7a\n75f82d96-04bc-4eb6-962a-f5656f7b6e2d\na833662c-2113-48b5-b8fc-8c66848eefd0\nbb8fcabf-83b1-4f31-99b7-b17d2cb68f89\nb82c3b3c-e49e-49e1-b7ee-ba674ba29779\ndad94f2b-03c3-4066-b5b3-57c49a03a9a1\n3a06361d-a041-41e3-93c7-32a247b5e78a\nf2ab411d-73cd-4877-bbf7-131f2b7c97d0\n91965e00-6845-44ee-97d1-803d53194fc9\n569146ae-7ab5-41ad-a3a2-fd0837e35775\nf4bcc5fb-e3e2-4763-a4d9-b45bd9669aac\nd6bc2297-848a-418b-a5ce-743f76a006de\n1bc116d0-a5a0-4bbe-a2cd-13b0d0acbee2\n6407add0-1680-4438-af08-83f24d800b6e\n0c37ffbd-78ad-47f5-b03a-583e4581542c\n9f751721-c69e-4aa7-aa0a-797c4259376c\nf61dd4a6-14b5-4632-a5c8-08bf9ea7c996\n71d5cc78-04c8-45a3-90ee-f373d17dcaa8\n44753a30-8679-497a-944b-1ab87cc85831\n26d3db21-7329-40aa-a99b-dbb74589ad23\nb7ffa98e-64c8-4a28-979d-fda3115cb2c3\n1a118f32-0943-4957-a4d9-82b96f109bef\n740b3bda-eaff-4360-ac05-281daf2a6137\n9e661934-6a7a-4eed-b67c-3ed5518ba11c\nf78a19d1-a0a1-441c-8618-4b0be0b6540b\n620c62e5-83a9-4e72-9154-f2e3be783dad\n79aeac0b-d6b5-49c0-8e20-2cf49d93aea7\n762a3d3d-afb3-49c0-978a-115dbb58f0d0\nce2a29cb-9ec9-473c-abf6-3e0d2d3d2110\n54946333-b5a6-4d8f-82e3-1cffd9a2ea43\na12491f5-0086-4418-80ea-a79bbabd1f16\n5bf60830-b132-4de4-b4f8-7ff4f9b7faef\na26523eb-6237-4dd2-8053-689c234e5cc1\nd05d68d7-695a-447f-9774-96886ad35e39\n40cc6752-4729-4d4f-9287-196baab22ebd\n8527da76-c631-43f3-84f8-ba62609f7d94\nd7627c7b-bd8a-43db-8078-cca1eb130024\nfd93d0a0-6169-4e0f-8470-30cfab131aea\n81c069ea-f638-4b57-b223-6d0cc552357e\n41bc1d38-6769-40a1-9fda-ce74793760cb\n3af394e5-0747-4694-ba82-138d79964566\n0fa2eda6-260e-423f-8440-86f27054ad3f\na36b6af0-25ea-4a25-9469-84c28d6666d9\n574e8551-1ebb-4223-a85d-634d9ae7ca27\n6a729af7-aeea-43db-af53-56176fceca04\n5e80828f-6330-4d9f-ae42-283ed06cc6ca\nc6d3a0f7-643b-48d0-96c2-160d9623fb31\n2f4e191b-4d18-44e1-adeb-fc2cfd1cea4c\n84e06f18-95d6-4ef5-a648-546ab8b7f78d\nfe390298-4a8b-4ce4-a4de-2a571e4799c5\necf6341e-dcff-4546-b2a6-facce3c259f5\n6415b5c6-c28c-4e2c-8ccb-21c103dc9bfc\n005ed999-4903-4bf7-a335-7fb85eccbe44\n0d946942-ba99-44c5-9ad0-3298ae5d2754\n10dec4c3-5a39-4793-8ee6-3b18d24668e9\ndb3c8ced-0c46-4843-b7c7-23cd66c2c804\nee97bd01-4374-48ba-b504-3c8563ca6c29\n71628ea8-6072-48c0-9ac4-fcddad8c1dc0\nfabd3a3c-c46b-48a1-852b-fbc24fe5ef77\n5d4646aa-809c-4215-b0c0-e415c045f2eb\n33a84c8b-3823-445b-a37e-32b8ab65d0ef\n4c399d26-506c-4641-98a7-febf8cd237a7\n5e102238-3399-453c-bea7-afab40a7b41b\n458d04eb-7ebf-41b5-8c31-02f1fca0f9ac\n823550e7-4a12-4b8d-a7f9-d15306450f86\n7225ddaa-655b-41f7-8cd8-45ce3769b321\n065aba83-9f29-4923-b48f-a854b976391a\n9696ce2c-adc5-4b98-a3a6-687d745ada17\n9c9e4054-9ab3-471a-b014-1354b0cf15b5\n1ba6a984-1bb1-4ffe-b0e6-92bf6012cf20\nad4a0b29-150d-4f24-b94f-3d7e0fbfb327\n7982e8fc-ac66-4841-942c-be36c58b3a3c\ndc650470-2484-4e2c-9981-5207f63abc3a\n3ce2bbad-198b-4975-9e44-711393ad0612\n34c1c810-949e-4780-8177-cec5d6efd857\n3ff84e48-2f92-4671-94d9-fcc5b8a9af25\n6d9b0ebd-3fb8-4643-98e3-acc3723f1509\n426cb380-ff20-4f4b-b854-1d8273751a12\n4fc1977d-adb2-4f26-beff-2025db43d714\n0e53e140-a3d6-49d2-b1d5-8842003602e7\n730278dd-6a9c-4362-b618-682466be9378\n6be8bbc7-0b35-4789-822c-ea67a43fc8eb\n90a0ff63-5af4-4248-bae4-4584470e4bcc\n816a621a-f5bd-442f-b955-aa8514fa2914\n3d200d4a-5cdd-4f3c-af8b-befb47278fc9\n7696696d-7ea3-4941-bea8-7bb5be538fc3\n9ce705a4-6dae-4c5d-b1bc-e278a2cd16a4\ne6b1eefe-85a0-4904-a2e2-bf63b0acf965\n05cd47e7-c65c-42d8-8c0b-f34671777091\nb76eec3c-e19e-41a7-b4fa-45c23f20656a\n50a645fd-c329-462a-8976-44c5c1052c13\nda507ce0-b3ab-48db-b032-05ebb56677f1\n293a2458-0e19-4f24-b053-02c4b03ea64b\nadc0c2e3-c664-41f2-9d39-e401fc2d0e01\nc5ac2e8a-8ef1-46d2-b4c9-105f3828ab99\n07e92a50-bf8a-4498-84e1-fd45b2f44cd9\n68189859-86f6-4691-8f0b-df23b2fd796c\ncd1701df-2c8f-4216-96b6-b38f66c503ea\ncaaa8b77-1796-4e51-8cdd-135e80aacfef\n6d664531-9058-46f6-8316-d5b5f6d47618\n4fd59920-8414-4eb2-af7d-81fc3a710b1f\n0af56aea-b7a6-4aa2-b1f9-e86394775416\ne14af3b2-ac2b-4c30-bac4-e30901932575\n00e908c3-0414-4f73-b447-376e8a208fc1\n63dbf6be-cfbc-465d-879e-c0e5fb388d19\n5a2c4ebf-3538-4889-9e54-55fbfc63ca59\n036bdcb6-eca4-49c1-800d-6355e9bd9ca4\nc5b00f53-4e6f-43fc-a7a7-8efd545cb223\n82717a1f-1a3e-4cc2-818f-db5fc468a201\n44bb5cce-2cbf-451a-a34b-0bae470a1ea4\n175967ad-2940-421c-ae7d-b69adb44e07d\n0985bd38-3f25-4b27-aa58-667c33ecbbe6\n7a8cf54c-34bd-47dd-a201-c7b32910304d\nc8a72d50-8f6f-4565-818a-bed22bb73850\nae2212da-cc48-4dea-a79c-569283d8b721\n9ff67b69-f89c-4f34-8e77-f0c1c6b30f33\na0cae21a-aead-40ec-b563-8c8f9122d48f\nb80baf5e-fc63-4593-9dfb-5f5e1780658d\n570cadd9-37e5-4040-8d1b-f9efa3fbdced\n4ec7b762-0306-49c0-86ab-ec280eaccc0b\n9cf64f66-b731-4caa-8e51-2a3cda496639\n9d66edf8-4275-472d-b065-9fe0c5bee131\n15d93b1d-651f-4c3b-abdd-83026227aeb8\n92cd66c8-e21d-4155-ae07-566cd1d3c594\n1bb7ec50-1baa-43b1-bcbb-3a294d91b77d\n527a6eee-e089-47d9-ae47-ad9b8d3d8264\n953afa5d-f11d-4bed-a78c-97976bfa9b3d\nc2e1156f-1a7e-4d04-bdd3-2fb02d4866ad\n9983ada1-0776-4fe9-bdd1-5ce052fa78f6\na1c9f3a7-b496-4e4b-8c51-e16ad2d52392\ndb3392d5-bbf6-403d-95cd-5ec65e0694c3\nec7738c6-b3d9-4e41-81fd-b4fd89b6ce49\ncdb8d50b-b96d-48bb-94c6-1dc31f7df088\n3a0a7bfd-accf-4dad-9a37-30be346cfeee\n40078070-bdae-4b6a-95a6-5ecee05dc21c\n6677564f-0633-46c7-bf0a-3601d11a3358\n4d3e90be-6772-40a6-8564-ec50be6a941e\na2b797ee-48a2-48a8-9279-0a3c744e7a42\n2032dc42-8c01-4ec5-86cf-7cb7831bfdb0\n98f83f63-a4f8-426d-bd59-d31c75b0abc9\nfc6c4a52-4752-4d9d-8a07-7a71c6465567\n3f161dd0-b481-4bda-bdc4-e884c8438fa3\n755abb4b-6bb2-4b57-8cf3-0e6e7adf7c99\n0959456d-d789-4f49-884a-514ce9ba3ba3\n375e765e-2a15-46fb-a9a4-67a49ce0d4da\n2aa07c62-7009-4106-9218-ff46cc76d04b\n947c5e64-a4f1-422c-bd93-7590cc7dcb94\n34bccdc6-244a-4fbc-bd0f-2c3f300a297f\ne83df09f-b3e1-455c-948e-ff408f5c0752\n1f27dc99-598f-4c40-99ca-e4ecb075a422\n5da197be-f525-4db5-8c04-cc3effda9e2b\nfe3d83b4-b0f7-4153-8f9f-2d09e710d7a8\n9ea3ee56-537b-4eb2-8161-f4898b3c6b99\nde5ab664-8782-44b9-b31c-29814dde97fe\n931f71bb-8f94-4d4e-90f1-b77450644c65\n3b1b358e-929a-444a-afea-dd7353d1da3a\n89f03e35-43ad-4276-b0df-f3e191eb95c8\n76607747-c713-4599-b867-6c53d11af703\n5ac9481d-305e-4797-9860-d15029552b93\ne064a1d6-87f9-4e44-96f5-797f146d4bb4\nabbfcfa1-f88e-45e1-8ad5-20cfafab6d2e\n6eab7ae8-13d8-45b3-bd22-c6ee35a3f645\na2f25544-6a12-4dee-8990-22eb4c2caf82\nb7debf30-8ce6-47ff-b47c-937f19553f5f\n0b55770a-8e75-4e18-992e-f675723240d3\n4a486c68-fe89-4913-b430-22f9c4ef8465\nefced174-7fdb-4669-980d-83229bf85853\n4e08db43-ae6c-40b9-b894-9ed8ddf0f07c\nd857551d-5fd4-4291-831d-b4b5d0e02c63\n6a21b04e-2c25-40d8-aa2e-7c62ded9c976\na845eba9-b5a8-4ff8-b93f-a4e917c3dec6\n1f6c3f68-0a0b-4703-a05b-f2a1896e9a54\nae2a63eb-f03f-4cd5-83a0-314ec013de65\neabeec49-5aaf-4b3e-9608-eab279ae9a87\n33c713c2-7ed1-4238-adff-e340fb046dab\n539d379c-7449-4967-9599-21d018839c14\na6f6b6fa-d24f-49f0-a05f-4265e51ec9d6\n6d021006-68f4-4791-afd1-0c0bca376d52\n98d8a147-5c00-42a0-8cf7-0dd851440ff5\n64b2f443-5d40-4b0f-9265-fa06cb48fce5\ne85b3c5e-ab04-463b-a685-bf958dd43617\n2bbbe9d4-f6e2-4ee1-8e13-e1d972cc8076\n01eb48ea-eb87-4f1f-9987-0add47d6123e\n8cc7ec38-9c48-4cf2-bc39-3927fb0fc697\n69c75379-a2dc-475d-92ac-14a13235b065\n45725a9a-92b6-466d-9c88-2299e53022c6\n9bd575e7-78e9-4707-98e8-c169eea4b872\n75cf3088-2487-4175-aa3a-bfbc82f4e3ee\n309ed64e-b320-4507-a7b7-06676650d1f8\n5d9aca03-51cd-469e-b578-c79c362bc1d3\nb1d51a99-9918-4fae-96d5-c27e1d257c7c\nde80359c-084d-49ed-a15c-0949ef212985\na30af27a-4891-46c3-99b4-629e48c57e7f\n88629b9d-3096-4417-988a-2575e90ca908\na3792b4a-29e1-460c-8652-3b1ec0f631b6\n8be7ba2d-2f4f-47a7-9d31-78db29569f48\nd7edeb74-eec5-4908-9c27-066d364c3140\n6424d022-36bb-45d3-8eeb-f639d6a5ec58\n1a5d5c1c-697e-4a8d-8192-4a005fc27647\n9d240d67-e8de-41f1-b297-8a5289efb400\n8c363f69-6ee7-40bb-989f-2a5b008ab363\nf9979f7b-eb32-46e6-bd3c-551e8c6d4bfb\n268a894c-3ee0-4f1d-8aad-4fb972fa9edf\n53861296-b59e-461c-a8ff-01a5a72de610\nc447a058-724b-44da-b018-ab8541c8f4c0\ndae2ccf0-112c-410d-8827-ec726c84502d\n7d65630a-1a3e-41c8-94a2-47fad8a52fc1\n62b7bcb3-9b1f-491d-bce5-311771a93c91\n7d2af415-2fdf-46a6-a9e5-593b4990bb0c\nb6414228-90db-46c3-af3d-268757297ef4\na8006a5b-8f77-4f2c-8ac1-588b6f497b94\n003f2bea-c5e4-48a7-8595-7720820da46f\n1669f2a8-e504-4ad4-8cfb-f936cf20746d\n31e96d82-deb8-48fc-998b-2d7e11d904b4\n44789c98-c265-4d47-8c9e-f1cd2ad27502\nb16ffa1d-d34b-46cd-8cd6-31ea8ae24071\n234f7c81-ba2d-4672-bf6b-63e012979cf5\n3061223a-89e8-4769-bb40-6242759578a4\n749079fa-a09a-4fe9-90ad-00d9985d56df\ne6b8c857-2ad2-4246-a364-4d76d7cc0298\n2212c16f-1116-450d-bcbb-e9759b1b4943\n9b31be68-ac9b-4821-a2dd-6964fdc8578d\n42fa51c7-ab2d-4134-9bab-61e2d5082a9e\nd232e8b2-70ec-423b-808b-dc731840faef\n2ec1da2a-d382-450a-846d-427b7f4ea55e\na9fa0eaf-b75b-4370-bf11-11e303331498\n63c858be-557d-4c81-a846-7eea9995e29a\nefa1523f-45ba-48be-8a62-5d72111572f3\n56218fd9-6688-47d4-ab1e-59ed03b2ae81\nb2839dc4-9b66-4698-a030-df87c139ec49\nd21b4453-9a3d-4a5f-8384-e7e565c71887\nc6cd561b-7963-47c7-beb1-1b829a63ea39\nddbc57f1-b3da-4bfa-afbb-40099d134501\n8550f962-9194-41bb-b743-18b214471805\ndd3285e2-29c4-43c2-96a4-4b56c0b62d69\n8bbdbdca-f04e-4a4b-acf5-997fc9e0dd29\n9262f213-9919-4ee1-ac27-3918abd19270\nee6eba0e-f10d-418e-8c55-badbef28bd5b\n2e5383a8-f5b0-4e39-ae2e-ebfec0c24cb5\na8de0a25-11a0-4a6a-8661-d6ea0a5ad283\naa7e7486-afb6-4442-854d-843edd418b6e\ncd3fee29-253c-4c81-88c0-b7a8d6d1450f\na6d4ffcb-b0d0-483c-b021-707c5f09b2dd\nc300db97-d9f0-467c-a526-84ee9af2e8dd\n4889b5d0-b726-484b-a437-06ea191c60c2\n20eab7e9-70ef-4e7c-beca-e10c7f4939d5\n5f08b163-42a2-469c-9166-e7f4099cd786\n167b4add-2a25-4409-a8dc-91d92161537e\n455d6146-e4eb-4773-9643-0ddbf3f3a59e\n37c08ac1-f589-40c7-a7bb-31603aeeb571\n7e24674a-a432-4e48-aa52-afe474b5a487\na17834aa-c1b8-4f5a-8926-ff2375a2c684\n323cd18b-c749-4cf1-ac03-c8daadd9c2b2\n61b28bfe-6179-408a-897d-4f0097fa68c2\n6ba07277-392a-41d8-8505-f06cef1e0ae2\n1df90867-8a15-409a-9fa6-e95d2f5d5beb\n06e98748-8024-481e-bf08-0da026ef11d9\n864611cf-6771-4255-81a3-e5a4aad469dd\n3479ebe6-5654-4e83-9bfb-c1510396323c\n5f74a599-a4f7-4d08-9774-cd80317cb892\nc728305d-87d1-4a22-95c9-334f7fd43eeb\nc7435818-5dcf-4461-ab38-d4fa2e8766f0\n530b5473-55df-41b0-84e0-3f24361dc2e4\nc507f356-16f6-4bae-b0ac-7d3ad543a8ef\n71c0b9cb-fbaf-49eb-b0d3-08ee8aa7eaf7\ndbf3bfe2-ccf1-40f2-93aa-4bc32d1f5d4f\n191e23e7-f9bb-4293-aab6-f0996b7d022a\nb7da6e30-ce4c-40f9-822d-b9ce6b8528e3\n5e698c8f-a127-4235-8860-e8de6712c73a\n87805b1e-c75e-40f9-9168-78e7746d5db5\n2e11f113-d17a-4aee-a69b-130ae3a0a3b8\neb22ce29-e073-44f5-bf5d-9c9e0a7f8e81\neae4308c-75bf-4325-9ff6-ee316a8fbcc8\n23741c2a-26a5-4da4-9904-862c3b8288ed\nd722d2e4-5a9c-4b2d-8d49-77867e4b4f3f\n89a944b1-e81f-42a7-9ce2-481377906a53\n139afe9e-827f-4704-bf8e-bf77977b1172\n3881449a-a035-47ff-ab0c-4bca0d22909a\n1eee883f-1e46-4a54-9bcf-6c2c16cca17e\n85e96a59-fba5-4d07-9099-d78559db0336\n53cef79b-c13f-4a61-91f7-648d9c08ab0e\n19d07325-9863-42be-a43d-f0672259d818\nf3946b9e-37b0-4056-9239-1a6105a5f614\n190309f9-7df7-4fdf-99a4-e5f474f552ee\n7f2cb0f7-e90b-4ee2-847d-ea33fe9191bd\nf2306f19-f142-43ef-b90b-980dde64a361\n36e5b155-9f9d-45d2-ae24-c376fdafdb51\nf24f2828-d332-443a-b26b-daf5d018a222\n13eece13-dd37-46cd-b948-47f344c1807a\n5c64838f-937f-4b58-b357-b5172cd81def\n7ed9f2d7-b82e-426c-8d55-2baae438874f\n1be7448a-9f46-4ddc-be04-51e9fe17e5f5\na6fe58d8-362b-46b9-b4a9-b7946e796696\n468cd487-001d-46f7-8e2a-b00e21a8b97c\n1cc84eb7-934a-48ea-a41f-51060bab2b26\naebde424-92b9-4dc7-b94d-58c02583f085\n0aed72a5-4e87-4b25-adec-4b8686ecda99\n84933a99-20f6-4a0a-a4a7-b81b9f76a7e4\n578904ea-2630-4d51-892d-557fb712dd80\naad8e77a-fc8c-4a02-8544-da0e81b48e5b\n4bcfb9a1-adba-49e0-8149-0c8d8a84c429\n2694fc97-968f-4042-92d4-293dad514924\nfdbb5a89-71b7-4125-8144-78d69d695f40\nb13249cf-56ac-4452-b125-92dd7ece6836\nb677a8a5-93ed-4c3c-8cf6-7e2fb5806ef1\n8d801d5a-35f4-4b4d-bcf6-35b7edd4aed7\n6cf6e8fd-8b64-4270-a6a8-aceb51f26e90\n2a502dbe-f596-4829-8bb8-7180e227e0af\n848ea8b8-5550-4c2a-9377-c416ad64943c\na2dc6ae8-8362-4d42-a8dd-e082663f75e7\nd3c7bcdb-b3ed-4504-84b1-869f8d0ea141\n59a6858b-c708-4f47-af0e-8c4d4dc002ef\n784ead98-8e3e-4a5d-a6a5-03d60bd53968\ndcbbcaf5-47d9-4d17-af80-732f83bd1152\n6b7fc2a1-d9bc-4a6d-a2b5-e7efc59a0429\n874d4a76-2d2e-4d91-ac39-68ecd82b1704\na34a6e45-2bfc-4b6a-b329-bd82cc1f58d1\nec97d64a-6e1f-4e36-9057-869b047ddd5f\n5261561f-a787-4c2f-8671-e2eadd25f737\nbfe637a1-bbb7-4e3c-acfc-f3299b9f2ab2\n1df5900e-0c76-4790-8a6e-aef90161239f\n65367da9-6c94-41c6-a260-53b752e16868\n3eae8346-77c1-4e29-9216-7cc31b928ad4\nb59b76ca-1142-4b08-ac85-6625506635be\n574d8d68-00d4-4b34-b333-1398b44d16f7\nd4808db6-7761-4dda-99e2-f54b3c1c2d04\nc9329d62-99a5-4aeb-b314-155972eeec78\n43aa527d-1cec-42ae-87be-978b182fca9d\n58256f36-87a4-430e-959a-3a8daabdd5dd\n610b2138-d1a6-43a2-b4da-3790c5066764\n7abf9efd-7693-4808-bcb5-e75774ed7ec2\nb28bf792-d993-4720-88b9-deda6b6b5489\n28797421-20d3-4c68-a450-51fe0a6ec1c2\nc4af0745-852b-4833-a66a-821c1cb0e4c9\n310d6fd1-937e-4e2c-a5bd-befd1c99e654\n107b538c-383e-45d4-81d2-d83a6bfbee0a\n25609582-8ccc-41d4-8148-8d05c53ffee6\ne30bba4f-0eb6-463a-9015-a89d84cf6353\n7cbdf838-957b-498a-9c91-aecaeb58b32e\n6a5e51d6-350d-49fb-bcb7-e3284b8500e4\ndb78fc31-066e-4b04-b829-595b5de74433\n68eab574-67b2-47b6-999e-dee6bfa7d115\n0c007613-0720-431d-a239-b0a8915baad5\ncf7fd464-7a13-4ca8-9f1d-ccf73d3b835f\n6b419ed7-90dd-46f8-a033-011d9f1f7e09\na735ff86-c33c-4bf7-8471-7f153a8f83bf\nbcce6252-847c-45e7-9081-97715afdcf73\n68a2c13f-5e3f-41a1-b00e-5118687cb4e3\n5969693a-cb71-4166-a79c-e11a21ea80dd\n0b5f0c88-9584-47e7-b2f5-d00da4dffad0\nb4a7713c-5e67-4c43-a1e3-52f0d049c7ce\nd66906ff-94e0-40dc-8e25-554438f8321e\nb1329f2c-671e-45ff-86e9-9eef3f6fcd3b\nc90e33b4-d0b3-4d34-966a-a3f3e5867869\nce18baef-3407-48ef-9b30-feec70b7a34a\n675c2607-02fb-4b19-8050-f17ee88cdf82\n5f5351e1-0e8f-4ea0-b0fe-cb9295fa2c06\nd09d57ad-f72a-4fab-8201-3967511dda03\n0d0cde72-895c-403f-9f36-46b826d2b8f6\nefc355f5-9e80-407d-8973-cbf5b1f26c3c\n16958ec9-64f6-4f25-927f-d9fec9944eee\n83061966-1a43-471d-8516-77820059e099\n3a0077b5-51a7-437e-8efc-1577d57635df\nb9dcf1f1-9477-44d5-a896-5082c0d114ca\n0227a0e1-46e7-48df-8278-e9f6f3c05a18\n894ce700-97e1-4db7-b02d-2f306b9a163e\n1d7d2c1e-55e8-4f3c-bd8e-e5e8d5e3e5f6\n21dfd30c-2f96-405d-b11e-73780c45d951\n3549c20c-d079-4a50-9b6d-6971ae5834df\n396895cb-c83a-41b2-8849-29ec335c0688\nd8b63214-7e51-4251-8e85-5a01e9017003\n890a8b82-3c07-4e46-b6a7-0a214592315d\n3a49d135-ea16-4cf1-9191-7db3e0c90630\nfdf112b3-bea8-47a3-bea5-80b95f83bcbb\n5edba10b-3d55-4fc6-baa2-616233d358e1\nd0da0549-f21f-46e0-ba3b-316dab68a686\n284d5a86-9e41-4ad7-88a7-e0e77a6b6323\nc4d7dae1-39bc-4f14-ae89-94c792ca3e20\ne45b7529-5833-4b59-93d2-d863a4029c59\n7b7669f3-f48a-4998-bbbe-18f4aef6b367\nf7eea543-a904-4fba-baff-d019495bf004\n693de15e-1b47-4a44-9159-497c82b0dc37\n257b68be-7b06-42c5-ba1f-ca5717cf8f69\n8fbc2754-5f38-4810-8712-fedc0df24100\nc1455e41-fc21-4e12-8a8c-2aed87144001\n2c9b4329-7156-4905-bfc1-86e16763daeb\ne5366d65-4b5d-47bf-ac4f-def673bf8a34\na9b2bdd0-efa8-4d39-b4d2-aa7a3c88f34f\ne192528d-e75d-4804-925e-21dbd4aa7d02\nbb61c6e0-748f-42a8-ac0c-5ac89a19b7c8\nc7d1fe66-6b2f-4eb9-bd4a-41d9c1d334ef\nb282d4f9-e21b-4082-8fcc-339bb7359ba4\n7eba9a7c-11c5-4a1a-b7d7-638618c1c7d8\n856ef089-c249-4077-a3df-a35622b61e5b\n4077e0dc-d68b-43f3-8a2e-8fb160bb1792\n163d8950-87ac-454f-a17a-1988f2c352e1\n6bdf103b-69bd-48f0-9e49-1aa97166abbb\n3cfac574-4cb4-45be-a5ef-f08544d8a108\n1604dbcd-05eb-4e6e-8e51-c05052843d61\n48aee481-714d-4ff3-8f2c-1db0e5832bfe\ncda6848d-1bf7-4014-bbd0-32c71fb9c7d7\n508a0c72-2a8b-4636-bcf9-cb0d228f69d9\n372dc662-ead3-4539-a8cd-f22442eb049f\n3f7071f3-368e-4e01-9ec7-ce45fb902527\nb19b6246-4a1d-448b-bc29-ed05bc4eda87\nc96b64fd-df65-4d4c-b05d-f8680a5ea019\ne1edf004-3597-4128-9152-1f2ffee7302a\n58767759-00b4-4a0f-bf84-b0effa0c8efb\n38b4f6d8-e4e8-4e19-a06a-88be0a963656\nb879fbfa-d5a3-4489-9137-2adfd565b18f\n66e4b281-c76c-44dd-b22f-60b5a77436c7\n9b083506-1032-4872-be01-13aaf6a5ac80\nb16443fc-7f36-43f2-a6d1-05fe6b5ba6ff\n25d887a1-3d62-4977-8b98-21b38072df1c\na501739b-0e3c-4615-b152-63546f87408f\nf09e7260-1731-490c-a4ec-6f806a953281\nb1188444-092c-4d56-b25b-13cb260d2116\nf2c32f24-1ff0-4a18-8fea-8d0d18aaffee\nea293842-05a0-40c6-b364-27da85c5b2fa\nbe4ce00f-ce9c-45db-affc-aa5ceaebdf6b\n90474ce9-8590-4b7d-a8e7-842ea9969bbb\ne065530f-2142-4cb1-9c31-743dd7e02bb7\ne2cb1da6-61db-419f-abbc-6c6ba3c932a4\n99dd9edb-0b39-4605-a58a-fefe5ad9b0cb\n9e30cafb-6fce-47a0-a5a1-4548a69975f0\ne1440119-df92-4241-914c-852124398f99\n80078b75-c0ec-4036-bfa8-0309223aaf53\n8cd838d6-86aa-4d49-9bf6-23547dd2252c\n965651ec-9314-49e4-958a-3b62263e35e5\nbcc6c254-a1b0-45a9-9c1d-301a32bb3de5\nfaa75aa0-3561-4783-b89c-ed09e371a9f8\na0c39fd8-b6ee-47e7-bcf6-27fb6e7d8d2e\n57551002-41e6-42d1-b818-3605c5e6d759\n7fa91a18-12cc-4bf8-8ab1-bb6ae4080c06\nfbba1f75-2838-45bb-9a60-e24efebe74ab\nb30942ed-fd73-45da-8c3c-e64b43bdf2a7\n8d3f2893-ef37-4076-ae1f-0286fccdc0e4\n5bfe1dfc-75fd-440c-bae0-4181994f30c0\ne4a6cd36-63f5-4e27-aa2b-c91f0810729a\n0c65c446-c465-4af8-a9ff-410cd8ac3271\n45bfd036-aa68-4b29-bb02-ffcaec0be966\nd0eb0649-8cc1-453d-babf-454ec2e6336f\n0b6ccc48-e51d-4a5b-9671-69a03cc65d25\n821c2526-7231-40d0-a95e-abb72b0c082b\ncb150331-5e3b-49c4-998f-7ee480dcf921\n1f71be9e-822b-444a-902a-af107697e777\ne156d25b-5a6a-433e-9ec3-b0f67871a32f\n9cc517bf-ab2b-4c8f-8293-eb7cfa1310ff\n5c6a83b4-43c4-4fe3-bd24-db696d2d9cd8\n19314220-0ea2-4239-b51a-0d95ff73f426\n69da1e92-f39e-4d85-9d56-4b452b9eafdc\n292c8fc5-238b-48f2-b754-65ded0a881c5\n76085ddc-481c-4b43-ac54-eadbc7a15667\n25030764-a851-4ede-8419-d8d704a798df\n926af388-84e5-41d3-aa22-41b7db331b4b\n71d45fc2-89a4-445a-aafa-0393e0e41ce1\ndd9a344a-fea3-4895-9ed5-b690c631f9aa\ne534e9f0-5386-42e4-a6c0-e8d742ae2ea0\n470287f2-1086-4491-83ff-cbc4de06bdef\ncb2d1851-0018-4597-916a-961c8c29cf78\n6c9c26e9-36f6-491c-a822-938ab970ca59\nbb510a9e-651d-4f9b-af6f-8c72f99e28f3\nde9afbfa-8f25-428c-8989-6c84b2590365\n66efecd1-c361-4f8d-9ec2-ac7e3209f557\nd0a161ad-8e86-4752-9061-2c77fec7bcef\nfbd1b56a-1ced-4092-b279-43dcbe1f4a33\ndc821a0d-aa86-40ee-85a6-902dc14eefe1\n1ba2607c-dab2-4a03-bbe6-8ef3aad27049\n909a48aa-2088-4204-9167-51afaaabbdeb\n6f920605-5a8f-436e-81fa-72527bd22505\n663ef1b5-2293-42a0-91ac-75bd2ddce025\na8cd6bae-14b1-4837-82bc-25275cfdd5f7\na1a2cae1-9d7b-418c-aa0c-13f0bbe6b181\n8489ea1d-1941-4be8-93c2-0c86ad2596d9\n9a59f8cb-b102-4916-848c-ec84b0d5d69c\nf6026221-8430-4948-9599-f9856238080d\n16c133a4-b73a-49b2-9089-de3f260db991\n2020af53-1634-48e1-8707-b964698d25c6\n0e101781-4036-4488-b1f2-76163cad146d\n931d54b3-503b-4a70-a788-022d4d256442\n8218c389-6d73-4313-8865-172adcf50994\n733f35da-f9c3-4674-9682-10fc4a5a7ed6\nf0c0be33-d6be-4455-9f0d-2836ea784108\n20345b98-90ad-468d-a6f3-36807fbd8a1d\nc88c40b3-c0f6-48b8-b018-66e6cbf5f26c\n54e967c3-5095-4231-ade9-beca4e9d4112\n95cb188f-dfca-42f9-822d-41b531d3dfc7\n903bf775-668d-4702-a4ef-9088b4fdfb02\n701ae0e3-1cb7-4764-ac18-3a735a5028f7\nc023616f-8f37-42cc-b667-ff0ae8e6fe0a\n2d673b2d-4e50-4712-9b91-e60066888810\nc7f40ccb-794e-45e0-a021-f4b84b97f949\n6ce6f9d0-0754-44d9-8f43-c12099d2dde1\n5b213133-3942-4525-9e59-263452232fb7\nccc8dc70-1940-4807-a06e-cf3808f49f57\n248969e6-1ec8-43d5-99ee-96ed6ce529c8\nd9f68556-01ee-4bf0-8c0a-9d06b3c5522d\n95216498-f4e6-49aa-9218-79c126a4f7f7\na3781e54-cc32-46ac-a8e8-a4313e3d38d6\nec41b0ba-536d-455d-9ef9-119b8c605daf\ne9d04158-18f2-455a-92aa-c09bb25ef6f1\ne42d6e80-3077-4a2b-a514-fa0f3b3d261e\nad8e822d-61ea-42db-8d65-d54b98887d37\nf4bc67cc-d473-4ded-961f-e2415319f7a2\n8391e46f-673f-469e-8125-2864a6401600\nf7602133-92a2-44c6-aca2-ebdaea716260\n30a79aed-8da5-4e15-8b64-cdb62e2bbe2b\n4229324d-8405-4304-be49-58772386986a\n14a7c911-b61e-4559-aee2-941545d0f118\n2f3ae6d7-f779-4d0e-819e-dc48379403cd\n1bfa656e-5f3e-46a5-bcc8-7ac03bada2b6\n1db229ce-abfa-4d72-82ac-df9c157dc5b2\n9cc54494-e1b7-4e9a-82e8-9e7de8484ece\n79540b52-d678-4b5b-89c0-0ef258c5043c\n823fb86e-85e1-4143-8627-9a6b6662c84e\nda1f8f9c-82f8-4871-afe2-1f9f761768ef\nc9418ff8-649d-4093-a659-adab9ecc7376\n89345db8-5f61-4836-869d-ded544e03dc1\n744c2110-d91e-4b73-b175-c97ef6904d8f\n6ae3479d-97f8-49c5-8270-a851109630c8\n0abdc8ce-7239-4394-b219-f79139f15dbf\nd7894d4b-bd62-40bd-a5e5-168821093c55\nc23d0c64-0c71-4f21-80c3-cd8bbd5bef0f\n5f4969d2-2260-454c-aa3d-470a34b2b8a4\n481b97c3-1e56-4878-a0a5-a50ef7b0d76a\n8bda8d88-708f-434f-b52a-c8e4acebfd06\ne85ef145-c3b4-48ac-ac0c-369d6f32bb34\n23728a0e-d208-4501-809f-c40948fd6a13\n00c2615b-38d6-4166-a7d7-311b6ad1454d\n94717d30-f2cf-45b1-901b-75e556dc8aad\nedc5b154-8c85-4f4a-bf7d-7c4e51a59d41\n994b3326-bf86-41b3-9706-1518efeec6a6\ne6d51acf-dd6f-430a-8d54-4c3fbf63ab83\n248f3f18-4b59-4580-9cec-386ec5245b49\n371e10cf-c2f4-4e50-b4a6-76f24c9ca616\n3d8c35c6-dfb0-436b-aaad-b3f261931af5\n6406246f-e5ec-4b94-ab98-c60509787eee\ne6009c52-a8b0-465a-8008-cfcafa2c9f84\n836ed9b4-5e6c-40ee-ab55-b8446f805e26\nf4e7e5c5-0723-4cfb-871a-a503e414b130\nbb0f5fe4-b406-4718-9337-3c205136bea8\n72417c1c-9d6e-4110-abc1-b507ae6f257b\neb769cde-ca37-4444-a072-ab87e82dd8cd\n7a4ef202-d9f4-42d5-b8b4-7d98721f36d6\n99b560b8-7197-430c-ab23-ef54cf8a3484\n4698850c-cc31-4ae1-9413-1c864111a82e\n37e8300c-4281-4a9e-b8fd-97f0797e1728\nb0834d49-afdf-46c7-9759-c3dc3b973ed5\nd75c4d3e-baab-4dbc-812b-83fe05730d25\nb3566f87-4e72-4341-ba34-8e9f4205b81b\n6a807f96-0409-4bc7-a188-71f35fe05668\nbb2cf6b5-6722-4121-aaf0-cf0dd9a145d9\n7b5739ff-97b3-4021-b637-d97eeb4c0445\n27bb8494-694f-432e-b081-d18e4cf4cd2d\nb32dd717-abf9-459f-9cfc-c84bbf199049\nf7d49c2f-4bda-4f91-8395-a95e4a34b067\n0b3ad428-94be-4ab5-b761-307872674d5a\nada5d239-e073-4879-824d-bc7bf605a0b5\nd6cad6a1-4fac-4c87-ad94-8d4e9fd7acf2\nd84ea08c-0b9a-40f8-a88a-3405ed4a6dae\nafa67586-ab94-45f4-a46c-ad75fee8326d\n45d2a1dd-54aa-4212-bf0f-9a1d8898c83e\n3f9d4c9b-268f-4dea-8c38-877c02e6c1a0\ndabd6b5c-35d1-4f72-b89e-debff2df742f\na1cb98a6-3b86-4ade-a55d-618432e12222\n18cf5bb6-2a95-489b-812f-71302a997dad\n980725b2-4ab8-4cad-ae0d-edaee1b2eb29\n3c44feaa-4725-44f6-8815-f9c9cfea0934\n8a406d16-a61c-4787-88ab-61931c29f974\n6abfd7c9-dbc0-45ee-9665-cd9a2c2ffae7\n5797e96f-0a9b-4edc-87fd-137051266b92\nbf917dee-e2c2-48b8-a4db-790218cd5e3f\n7af52751-ce18-47a8-87fa-30dd61a01c6c\nb75f764b-87a0-4701-b208-5f16902b3896\nfd3aa1ba-a9b3-41f4-814a-b3708ed3f381\nbfe79c4f-acdf-435e-b34d-c816b5fd8e2e\nd3a8195b-8273-43e8-91f3-607dd973c47a\n17218577-60ac-402d-8792-8bfb269c5dd7\n97b14607-06e1-45bd-b0b2-f35facf679ae\ndd0646cd-84d5-4e81-af3b-748980cefb4c\n6d1d5c3d-13d7-4484-9385-66c25e20cb5a\n0f134cbb-3a49-4dc9-b09b-9c20e01b552a\na3a0de50-44e6-4563-869c-745074f950f8\n107bf254-256e-407e-a723-c3f94feb47e8\n8e5c94d2-0cbd-4dd0-a211-85b2b5fc0955\n4ca03bd5-22f6-4070-a291-bfc9cf23153d\n2bbe6cac-7fa3-4a00-94d6-3d5217226615\n94fef1ed-b9a7-48b5-a622-6c8ac636c14f\nbaa66aa8-8f88-4929-8c20-60ddcc362655\n2f654866-705a-43ae-bcce-09e4703c4cfd\nf389a7da-8535-437c-bd7e-520b69688389\n19b34e86-5720-45db-a1c7-9afc37b88fe7\nfeefcd0e-370d-4a3c-ad7c-c827975af701\n2aa40de6-2c2a-4ee4-b241-d64c22387255\na2550a74-4bc6-432a-8f8d-94054d5ade66\n288560a9-8d2f-4d6c-a958-e49c3f8221ff\n860969e6-2d1e-4c24-82c7-86fd0e9a109f\n69b4ff65-3315-423e-be5b-f5837a76c131\nace9ef13-9b9e-4df7-a5f8-406522fd22b7\nc0c3b0f4-e30d-4448-9b38-75ef02837c28\nc4dd6b82-726a-4778-a820-576708d11cf9\nd0d10947-2299-457d-8d6d-5b8cbb96a259\n45889ca3-e6cd-4fc8-a103-66745d681e30\nf68c2512-65c1-4c6a-ae45-b347eb090ea9\n8f5c7ffd-8266-414a-837f-ab79c9f7943c\n96d0cdc3-9ded-4f71-bed2-fd60c61c9e10\n52f05634-63e1-40ec-8c7f-6a20198b6df3\nd36f8eda-bc24-4048-a64e-95e4ac4f10ce\n025f8409-004b-4f4b-98de-0215ac333afa\nbbabd57c-e7b6-4597-9088-d251a5e23492\n2ac661bb-5a8b-4b7f-bdec-0a8d5fe81ece\n996731cf-1711-4983-a36c-7103bfda2563\n850d4c3f-884c-4176-a172-f35ad73ba41b\nce0afc23-e9c0-4294-bf13-a6dc9f7dafe0\ndd4c7ed2-6081-407d-873c-5de50e35a35c\nebfb7329-920d-4a0b-9ff6-0c28cc5cfeb3\n6abb16ea-8c96-4f52-994d-a14267fa8d8d\n5837944a-d6d6-46c9-a406-9bd840491d51\nea52d5ec-f388-41f6-848c-0638693fa36b\n049d0f7f-1941-4981-b7d1-d75625f9dcb9\n0fc48fff-9591-4234-ba37-77e0b3a3f871\n55309f5b-a75f-4d41-8fba-1d364307547c\nc3efb3dd-8424-44b2-847c-a58f7ca6134d\n079d6165-e832-4be9-a67d-e167fd78ab40\na49d348c-a246-4206-baea-c01203a21048\nff3c3b90-d963-41fe-b9db-138f3f930c87\n10133a31-0fb4-4bf0-8768-b6b1d68a5e36\n8cd877ec-89b4-4755-9ce9-06946fe8cb3a\n45043ad3-5e42-4d4f-8c7d-e3acf8120abe\n226db8e9-a5ce-41bf-b3ac-6e1e2fddfda8\n7b650e2a-54f5-466a-9172-a05db5ad0d64\n20f472b7-4523-46b6-aa7f-600220bbb771\ne594e759-f2af-417d-95c3-287457a2b8d2\n9eea5803-293e-4ec0-b84d-8a45e0932fa6\n38fafa1a-0fda-498e-b46b-e7e26b3373c4\n3b1faf3e-01b5-4671-922c-420288c84794\nd08a3acc-4914-440c-82b0-4f3f4a8687c5\nc27bcfad-1972-4411-a606-584c118a6f17\n23111ce6-5972-4912-9737-a35cbdb0f9aa\nf36754ba-95be-461d-9458-f4acbf0c03f4\nd808d332-75f3-404c-99ef-ffb760ca77e6\naca56956-438e-474f-b64f-d4fd05d86ee9\n74f0c001-fe1d-4d5a-8047-6ed488cfaedd\n3a11c726-7d7e-4db0-8702-db3d02091842\nf170e90f-d480-48a8-b3ed-f48f2050ca01\n0b35877b-fdf7-4eb3-a84f-da28f4c3b001\nc4ae9876-9b3e-4dc3-926c-c0a50a5c7dc6\n650b8238-5bd9-4224-a2cd-d352e3f838f1\nf39a7380-44a5-4e50-aac5-f6ab1706c696\n489f83d8-7cda-40a3-8438-4cfe12a5fb83\n38f8f5e8-e15c-4bb8-8888-cd06d827d91d\ne89039c1-1c7d-4640-be66-4a06b711dcac\n3a26e242-b974-4400-95d1-41108b679d01\n08208f16-804f-4cd4-9c9b-20e45782ed98\na7b81a28-ae21-4caa-8297-195c3bb1003d\n365d899d-c679-491b-b0fd-eb1e8e7aca93\nf86b901c-d7d8-4113-ae53-f02af1ed9fae\n682cd129-b94f-417f-adce-5378a4b1b461\n962bbf3d-4eca-4e92-910a-40ca8591ae97\nc58d700e-09c7-4a75-8227-47bb679c3aed\nfc70afd2-1bce-4651-89b0-47aa6d633d85\n54b86118-30f2-41e6-85b5-22e2f21c85b0\nb756fb9c-a816-4b10-b585-5376518c493b\n845e39a9-89f3-47d0-ae66-f5917af3caaa\nc656e4b0-34c6-4593-a0b0-9e0910e7f5c5\nc9b05a65-7efd-4512-a5dd-4385d64c96d1\n1d35319d-4095-48e9-a508-8ddb8ec8393c\n2c068119-c9ca-45a7-9b00-c075d5bff1d9\neb53b111-5bf3-499f-888c-5c67458c8c1c\need7bf90-b787-48e1-8833-a041d75838ad\n7703622b-566e-452e-8314-9706b4a36c92\nf4bf6871-4f02-46ff-acbd-571d14945e28\n147a5d07-c61e-4129-b5bf-3ec0b5969453\n4beae7ff-db44-47c0-8a3e-6069d66f3668\n2440ef79-c827-43d5-9c27-c72a6ee500fb\nc3dbabe2-7c97-4ba0-b194-423e7241a559\n81bdebc7-be26-49a2-a437-e560f08d39be\n16aa7f9c-2b4b-4264-ac5e-96bdda5e5ebb\n26c7fc2f-986a-4b27-a870-86e20c01cf97\n6e779a95-b42a-4dd4-96db-6ff2946ee9b9\ndcb010e4-a56c-4463-8bf4-84a6802ef756\n6a6a0d24-e18f-4525-bfea-b88a8b0d44d3\n74edfba2-de6f-4c9b-8c4a-442bd821c501\nba2d714a-ae33-4c85-bb53-77cd96dde4b1\n1a2cd152-8bde-47e6-b5b7-e5357450ad71\n72b103a9-ce43-44ec-a2e8-afaed68f031c\nd7652172-2db6-479b-80eb-565d0510ded9\n05ed0867-243e-4dc0-86c1-e07761cd1b7a\n44487150-747f-4001-a74f-3f6f4ddd1678\nf96fb3c0-a5af-4d32-9b40-f5ecbc03d8ac\nb95e6aa6-a759-410e-951b-8ac923094de9\n89e90675-0409-461d-825e-4c7d0c825ca1\n2a55c2ad-a2b6-41fa-af6e-1142b3efc9e0\nac7942ea-10c0-4264-8fb2-4c1ebfde88ca\nc251768c-ffbd-44e0-aca3-f57f969b9fdd\na3ebfda1-047b-42db-8ee1-67066ed8f733\n9ce61087-73ba-46e5-8f98-46659581d6fe\n7a4cf008-eb20-4b8e-8645-041efdf6e28f\n5cb57ad6-94b0-4070-9f01-3ca9fddb6925\n2436d194-2bf3-475f-9649-6769867ad47b\n738d4c2d-8d57-4ccd-b9c1-06a388e43e48\nc82db810-81da-4927-b36b-93d09e27b624\n24fd16ff-f649-47d1-b8b0-7c80ecfd6bed\n4482de5c-83ed-499e-893b-2148169d2b7d\n378286a3-ec4e-4f08-83a0-cf8c12e7c763\n0056430f-24cd-4726-b8e0-7f04962495e1\nbceb034d-2f6d-426a-9e9e-b869cfd2617a\n5479d6bf-931d-4940-9dbe-e55cf9ad24ac\n2a7256ba-1fd1-4126-a1f3-9e8e593e7578\nfe662496-9d60-47b2-960e-bc69c61a45a7\nf6bbdd84-bc48-49aa-bfd4-7c431d51739d\naf09e30c-70e8-4425-beef-814155bced2e\n2bdd3f45-89b8-431c-9432-98b635dd7a7e\n5d2b72fb-16e8-4c58-99c1-f7a06b5a659b\n4aaa1720-2531-4d58-973b-79f67072d011\n485c9c50-f565-4133-8b36-a8119301a02e\n01af5d21-cd83-41b4-9243-bb7a76def511\nfe6aa443-9b75-4bf4-9241-1d13bd225de7\n71cb6e8c-b928-4873-a632-8b010fa82f6f\nd38fc4cd-8f2a-4204-9a09-a04a4fb0f7eb\nda7cd287-0276-4de8-b8e5-5a8a52e09214\n8137c7cc-c861-4ee3-b147-ef9f9f3ec8f9\ne20ad81b-2ee2-4728-aef1-4c3e329540fc\n5533973e-6e9d-4f78-b74b-b3ad0bef6608\ne371b846-161a-4fc9-b4ab-156d2450b47f\n96c630d9-b564-4156-a855-03a6787fc813\n42b82d45-9576-4a82-a3fe-60e7135792bf\n5a03f485-dc89-4f0e-8185-c4a7c6597598\n25976519-c8c3-4df6-af0d-addf3705af4a\n7c23bec3-9722-46f1-8a38-23bbf91ca0bb\n0e9ca7c8-a275-41f2-a5e8-16b49f8aac47\n7755b80d-4503-4041-b0a0-342c21bb22e4\n25661278-5475-44be-a5c8-f3e30858cb13\n1eac7371-00ae-4c68-927e-118801909f82\n3ff20def-fe13-4c68-bbf9-4c4f8a0e26fc\naeee3167-3488-421f-a1c6-45c815576b52\n980d86d2-002f-42e5-8d04-56535d389147\n456bef3c-7a02-4b31-aedf-d36ca69566c6\nfcfdbf9d-25b6-4574-b301-9463d616113a\n6c5f1a91-c9f6-4d06-b9f7-7922520d8694\n31d74ec5-f19d-4837-ade6-4cd0f2f094e3\n9b796e8f-356c-4028-97be-2e604e2bf1ac\ndbf59158-55d0-4d03-b9af-9053520df446\n4741e73d-65d6-4b39-b96a-a352710a4359\na06173d8-03ea-419a-93f3-cc84116d942a\nea03e5de-120c-4617-a5bf-f8abcef57b68\ncda94e50-555b-463c-b320-23281b930b04\nafdbee5a-3df7-48cc-99a6-14c033e91e87\n61f519bb-4238-40e2-b325-e4fd3969e41d\n603861d3-7661-41e0-a393-ba54d7b5237d\nffbd2183-ab5d-4d6b-a92e-6ab92d59d151\nfef0c4e2-be2f-474e-bd4f-677379dc9443\ne2548d59-c548-4dd5-9b9c-6328720daa46\nca2c80e1-a4a5-427e-a05a-1dd404a0add7\n0fc2d2e0-c061-4aef-83f3-e42afe4311d4\n4c2e02f4-914d-41d0-9e1a-ff7ff2f1ed60\nf767da20-6d75-4086-aaf0-f7af05ab13f5\nae85f88c-75ca-4e6e-8d08-0ae17ed12e0d\n31e26531-b61f-40a0-a03f-d3c1be00c1a4\nf00ca8ab-a1dd-40e3-b847-95af07db4165\n492d2f27-e1bc-4bb3-a294-3ebc9771f373\n815b9367-ed26-4d95-b2e9-e4aa2294eb53\n25618a34-3f91-48cb-a5f0-fd0d86a5496d\n8cedcd38-14e0-40ce-a26a-33091095f7aa\n88b12eb9-17a0-4f54-bf98-319aa1162ec1\n811cecd0-a257-4705-9ebf-8485902b910c\ndd038db8-a706-425d-b023-c0907cc82fe9\n0e6bda51-17bc-497e-a324-81e20fe4de25\n14c29e5b-1fc3-4c6a-9407-4b9bdec769e2\n987780da-1f50-4a54-b6be-4e5b98da2293\n67d6a00a-10f3-4fdc-b03b-dd66dca11bb2\n10982044-11f9-4b21-98ce-f1b7bd6e58e1\n355efef7-edd2-4fa4-a6b6-8b1c8f022281\n50a61044-cd4f-4c05-a25e-91a965cf96b2\n9d19a2dd-4a6a-4acc-9347-ba89b54775fc\nf03a6f29-bf2a-47a2-a4b6-92762f1de0c6\nda56e7be-7c5d-487b-b374-41af9bb1aa64\nea65beb4-5244-43c1-a0dc-24ccb232d6bf\naab9888f-ff8e-4a25-a60e-79ea86694a89\n5f0df66d-f978-451c-8bfd-cff1f1bb1497\n1211a3c2-27c7-4169-a4fc-2adbaccb3f32\n10dedc25-e598-4c1c-8322-7e32d6d4c49e\naad42a0c-e25c-4328-8b33-0938db47b6ce\n4de6fc79-1d58-4b9d-ad8c-645ca3c137d8\n505f1db8-d23f-4fb1-98f3-cfc3781d58b4\n216aeee5-60bf-4394-add2-1164ac8e9d7b\n90b32a76-e61f-4358-8231-2f54cb9c0d6e\n7908feb6-bfab-413a-a2c7-c66365b06f9d\ndabf2c83-e4a7-4793-a788-7982a965303c\n03ae9a00-bb09-4477-b5a2-83ec806927d2\nab54811c-d6ff-4b28-b3dd-ce2df8105cc0\n5ce51bc2-67aa-41e3-ab4b-00342fafff25\n99a59b8e-577e-498d-a8c6-6e88ee42ed6f\n6aac1e45-0f8c-4033-88c2-2577d7b82a64\n20d70fa7-07f8-43ff-9228-d0c6787b43a2\nac159596-6a40-4778-b605-381e1fa1cd0d\n55a9cad9-4a51-42a9-9e2e-c7a7e12f6b46\nd5d8d07f-78f2-4fa9-85be-0aa529eac777\n2980cc06-171f-4fd4-8300-56027c047064\n7a150051-0af3-4061-9879-ca5cdbbed646\nb95b4b8d-f3f1-4ac5-993f-52ae9a956a14\n5180a4c1-ee9b-4c92-b014-ca01bbc70987\n1bdbce37-d619-4fbe-9468-a834ca5e802a\ne39f1280-4f67-4e49-aa5d-dc768afa073c\n8dd169fd-5ff8-4946-8dcc-8b9ff9ee32fb\n40430c54-648c-4ebe-8bb4-db8c64bfdb3e\n8d5efad2-ab3c-4c59-8b87-700c86a80052\n92910ce0-e380-4bba-a110-edb979401abb\nb61e8b61-67bc-4336-92ed-25b0c4f90378\ndb9fcd7b-7643-4441-99ac-f56617ab5275\ndc3017b7-bc24-4452-9d63-7f60f3e82764\n9a16b34b-c292-4748-a723-55a4a06d0f2b\nfcae34bf-a1c7-4056-9b7c-19e4cae7cd61\n4bfcab84-ed32-4aa2-971d-5f931b2a538d\nc46db9ae-5734-4430-b273-45a567786a13\n54ee9cbe-c219-46f6-85e2-fccb2ebe90c7\nfed44b26-100b-4eb1-a337-9a19bf235d41\n3cf52688-5e68-435a-9769-268a9641c80b\n2055a67e-4af7-45c0-acb2-047dc7f5b30a\n523854d3-02e9-4ad6-8b69-2afdf7f2e8b7\n73ef6e67-036a-43af-a10d-cd7434bf4f0d\na79168f9-4cf1-437c-8033-7064f6c3f040\nfa5cebd7-8d5d-487a-9556-eb033124aad5\n7c7eab2d-35e3-4221-b5aa-5fe88a712c33\nc9969ded-e8d0-4412-a2d5-27a31be6a4fc\n66032c67-1d3e-4bf0-8323-21004fc66977\nf8bb205b-8aac-4e53-8aab-e141c3a6acee\nb00db948-4480-4211-b0e5-85725a9d9118\nea201744-6fab-43df-be1d-3815fc82e7ab\n721f7a8f-34b7-4885-b490-5ad74a95295a\nf608395e-ad3f-4fe9-a767-88a578ea1cd0\nd4f44363-a95f-41cd-acef-e38629ecec14\n8df82d47-f3c3-4511-905f-a35a0318791d\ne525acd0-ade5-4936-89b3-cb81fd1da045\n6883af1c-bd31-494f-9448-b86a2a79e690\n78299766-5862-48f5-8206-812a2176a365\na516c985-0a11-4d8b-b6d3-11818ab1e211\nd7b1be12-5e39-465c-a6cc-beb3ce54e051\nf2be03bb-c80e-42f4-b58e-2981f270033c\nd412b4c7-e4d2-4756-9bf8-33069907e4d2\n4ec908c6-ec43-45c9-ad51-52ae3ef6beae\n0264f8d5-6cdd-4c8c-9eba-7c659e6e93ed\nd19a257b-2bff-4eb6-919c-dc56205c43f6\n7562a829-a854-46c8-a62b-e1b3e8a5ba60\n4f86b7be-8fed-48b0-9d92-0bebcdece4b8\n25e0a415-f513-4f56-b6d8-b676dcdfae3d\ne80e94d4-8539-4cb7-8a6f-96ce0760f423\nfd3f9e60-5168-4def-9b6e-4f950976df11\n290e684b-9056-43d3-b8f4-fe4df2f54144\n7689be8e-838c-4967-b704-4d4fabd813d9\nc158db46-2694-452e-80dd-66be5d3576ba\n183b98e8-f691-48e6-a096-eae0b0f24eaa\n60677438-8cdb-4757-b5cf-54a81d1a1ef8\nd547714a-26ae-4adc-bcb7-7c01e4288b57\n6abdb131-53c3-4379-9936-88726f4993f0\nfd7c95ce-a83c-473f-bc02-184c71a7c537\na0a7d33b-038d-476c-aa17-823a3e328dd3\n2d99801d-5fac-44a7-9d66-2ae0b5729d72\ne65fb7ae-3b64-4890-a14a-07e598b7c063\n1b3033cb-3b67-420c-b854-21528fe14591\n118a70da-3b06-4071-8073-42045c401865\n6fc2680d-4c6b-44fb-8943-5bb1b7b1a31d\n02aa9522-a963-44c0-b373-3b285a5ed0e1\n6bc50308-ad41-49d9-8800-8d21ebd30b99\ndb101383-e953-46e2-9cf0-527bdd01cf12\n75cc16fc-6e42-4ce2-8d2b-722eab1d9c11\n46127d7c-bd91-4321-bb52-c21034208723\n102db2af-09f5-4624-b5e6-797489e8892e\na004e79d-658f-44c8-90e6-26e2805abecc\n5357f372-78dc-4c5a-aece-096113765d4a\n46e2508d-d800-445e-af60-85cb42adb11b\n5c961806-97fd-43a2-8650-89a18fec5e1e\nea37b0ea-28c6-47dc-9dfc-927441658493\nb390b398-9e7a-4cda-9f54-be1fe7a136f2\n968da5a4-f092-41cd-8478-0e42ae82fcbe\n8e9d1c17-274b-456b-a135-62c817c7776e\n24a7d7cc-0b38-48c2-a35b-0edf81de9ff3\n28dca5b7-20b5-4847-b1a8-2d10f14f365c\n9890eb9f-c7c2-4420-876a-e57babcb9f17\n90426ea7-72d5-432d-b314-16ee1ccd6081\nbb58c263-597f-448d-b166-43633b03274d\n97bf8320-ffb8-413a-9cf5-2dc1e9de71b7\nc8b7414d-6a5f-49f5-b8cb-dca07a556d87\nda8c07f3-7979-4e14-be76-56ff16a2c7a9\n0e02999d-966a-4e1c-8a58-e33b4a7a5648\n0a643a22-0dff-40f3-b473-11c87a186e81\n6577b1db-33ad-4a0c-962c-779c7b37889c\n7ff57560-f195-4891-9e9f-c037d170146a\nf6926435-9408-4d90-9e9f-20ef59b48f44\nfa28a886-505a-4f67-8859-408d959f512e\n2699c565-5589-434b-952d-c7bd5576b87e\n1c66898e-a3ff-4413-874a-e0f8283782aa\nf20cb3c8-65bb-441b-8fd5-2a82a3c35e0a\n4672cc42-3e9b-4444-ae54-e8c6cbf12603\n794f679e-1f3f-4fe9-ada7-79b247b6f623\n29d5cecf-e4c3-4b68-b62b-e403ae8beca9\n451bdd69-66d5-4afa-9ed3-575fd465e6df\n2d5e0108-2cd3-4bdc-aab1-6af4a1d926e3\n89fb0e74-118b-4768-9c45-78c47169298a\n36dff60e-7b3c-4455-973b-fb92db6165e2\nbaccbae0-149d-420a-a1ab-dc7b9d83fa73\nf9e2acfa-a16f-4e80-accf-eceb9d20fd8b\n31761110-840b-43d6-b5bc-5787078e7afc\nce6af4da-586c-4a51-8541-2243dc9a56c9\n6800c7bb-c5bd-454d-aedf-e2fe907e84a2\n253f2c99-faa9-4839-907b-30b9223f76ae\n004d7a30-a84d-4616-bb1d-833cfb41a066\n7d93fe6d-ec60-4c3e-82a8-7eca6975c06d\n0a758f4a-62d9-4fba-bec3-65faa57acf77\nd19810c5-39fd-472f-8cf4-4c9b3222d870\n4d2404d6-9c55-4f51-b5f3-0a613b0d65ba\n06dd2975-cf6e-403d-a545-34b1f8830ee5\n64f3da88-0746-4a25-8026-54de9c3aaeff\n8faa2f8f-f439-435b-9014-2aa6e196964b\na684c884-5b72-4fce-b193-85170e95891b\n551d2dea-3420-4ec4-a92e-9086423b52b9\n50c50493-d4f0-4813-be38-3ed3b825c0d7\nef7fd8b9-4a35-4315-a037-e5d466695e0f\na14338e0-a093-494d-8dff-64dbd757802b\naaf0b446-8502-43b9-9a75-4010ef6322a3\n87fb2eb5-d5e6-4225-9b21-2e647b6cbaad\nab0b3843-0b80-481f-ab0f-29d55c0e4bee\nab6302d7-1025-495d-86f2-56fc6cf8f2f7\na176c90a-0638-424f-b166-6bd75a66f82f\n352e6132-b530-455b-a6c8-9b4b99b53e7b\nc06499b9-22ed-4f28-bcad-a1b271bbf03a\ndf4b07d0-8bf3-4c22-9cf8-4b8ddf8959ea\n236e537d-66ad-45f4-98ff-a3b0d386c040\n2667dc00-ce1f-40be-9ba5-9a71144d6adf\n99fe1b5c-ac9e-4126-a730-ad215185b8e9\n57a5d971-f6d7-47c3-a9ec-6cc72589176b\ne6ac3edf-24aa-4746-8179-3f5315d00407\n9f005eb9-a2fa-4b36-985b-1a07bef6357d\n1b508e18-a217-4b43-8f23-a0437d090c28\n7ef5c8bb-9a81-47d2-8f39-3d70770e2933\n30cf348c-89a6-42b6-a3be-40763243427b\n3e554379-4c14-4ae8-be6a-c3330a1f5013\n54cc2069-7b2e-4baf-9ef0-621e2d764c65\n4ad9d49b-1887-4839-b352-8dad883676ad\neddaaf12-5b98-4cd5-9d69-02b207ca30d4\n250a52c2-dca6-4622-9eb0-deefdc61460d\n43fc6f31-2af4-46d1-8bc4-089cccc498f8\n69bdb4c9-63e5-4189-98f4-caad594dce40\nae454cea-ba9c-42d0-a430-cecbb71b2276\naa5a4921-86a7-4863-b880-2ec06d9469b8\n0ac55b45-e203-4ee5-9c0b-2347e4cdc581\n52ec88b1-7eb4-4934-973a-00edf5294bc0\naa5cbfd5-53e2-487d-be9c-bd40b8073fd4\ne4bf8d8d-89a1-4fcc-9b05-5e4962c6c603\n6c0e3ad7-6496-4a36-a0f0-5998671a5a16\n9ed4b5c6-c5c9-4f5d-993c-e39de5472e0c\n43095d0d-081a-4618-ad78-5eeeda8fdab8\n9187e206-97cf-4fc0-9f74-576055df0f1f\n7745f4df-7618-4812-a64b-8892a66b3622\n89efb88e-9f2f-46ab-a443-abbff600ded3\n11d6c804-eea0-4cd0-ae19-e8bbb5fbff40\n093547e3-8826-46d9-8beb-e5e40c09ed30\nc18fed28-b285-4a18-893f-e6d707d4a318\n0ed83f60-9ec6-47e0-a9c6-1f750c66ba66\n05c261b4-4771-4832-845d-943d06fa026c\n61bbc788-91f0-4de8-9fa2-ed4ed6c13f57\ne7fe1dbc-8874-4380-8853-cb8d9cf55f07\n0c6b2ca0-18dd-4b76-ae94-d78652b61630\n69f2acaf-4ee0-4182-adf8-e4b423db7888\nb7eaa89c-2245-4cef-b955-42a40f7b2cb0\nbc116c36-439d-430d-9c37-e38db665e69c\n25988950-146b-4774-bbf2-69511c35565e\na77d0047-1d5b-4cce-87f8-d80d34e04fb3\n97d3bc55-3dfc-42e4-ab4f-26a96aa23bd3\na772e622-526a-4891-9a6a-760bb5fe3738\n76e4b180-6d75-484b-9267-b38a6a46c5ff\n97c61e66-983e-4caf-9756-251dc1ffd7c9\nb2b3f881-a8e6-434f-9c67-8243e98a26e1\n42776ede-e719-4566-8cb1-d22ca191b02e\n28fffcc2-5885-4db9-af51-0a8e04ff675e\n8c6bd0f0-4eb9-4c52-a239-ab403b961b55\ne8e1e7de-a5f7-4b44-8400-811a058e940d\n50361995-5b62-49b9-9e7c-05a1eeaf000e\n5fe699de-30d7-4566-9406-8663eb00fd7b\n3aea3b22-b252-46d3-ad61-2a6a9f6b2564\n6b47560e-acda-47d1-9c32-d18988a6595d\n3526b19b-1211-4428-9dbd-41dfbf500a92\nb17eba7f-ad18-41b7-ad03-b1726d8c1dfe\n3798ac65-c4d0-4997-9d15-c697c68d68b2\n6646819a-149e-4480-aff1-8502b807a73a\nc5940dcf-4a4f-4e32-af23-f083d4e207e9\n7427c7bf-c4c5-46da-96d0-4a3c1163a31f\n77f1fc23-ef65-4a5d-be2b-34bd837a5086\nccf68628-f468-4b10-92eb-828fdd4447b2\nfe2bf2f9-680a-4136-9c61-ab403b06c76c\n4c271e29-4c41-49a2-8f48-4eeda4ac310c\n2c6af2e4-d878-46e7-a874-021ca38f7a4b\n901cacd1-ad34-4fd9-83e0-3d3c8ee8223e\nf653e312-4f6f-409a-9161-29c970339a26\naed0b800-10a7-4f04-bb3d-42a90425e017\n5c5966c3-e6db-42b7-b460-6201c650916d\n6df8bb3d-2573-4b97-810a-37832986d3a3\n5868eea7-41ef-47a7-8f6a-916ceb4e0598\n06af1775-d19b-476a-8025-bbbb2b6d822b\nd503e238-0719-4fdd-8438-fd9f273da2ce\n5a963e58-1f28-4571-8fd8-aa0f25040d08\n82753152-2819-4798-89ef-aecb89a26f12\n30a4247f-9c07-460e-a1f7-79169369d143\n5182e476-de8b-4a9e-a62f-835d98c72e16\n82472661-25f0-4602-ab49-8a85730b8eb7\ncfe3fe25-11eb-449f-bb0c-47a57ee77e80\nb7a2174b-30ad-4247-b062-dd83a3c81470\ned7be615-61ae-43be-acc9-6fdb78a5c9d0\ncda2b7da-1a08-4196-a36e-faa9f1c7f628\n21151ca6-37a7-4567-855b-cab114e6df6c\n23169e7f-5190-4471-bef9-29ee96edef42\nc505a5cd-0239-417e-9524-e09c8c957549\n67cc6617-fba0-44bd-87e8-8ce7e25e7b2b\n060f86e3-0377-4ad7-8e6f-bbcdac533112\nbf138be2-b424-419e-8f15-f5820c29d6ef\n2d3f4062-587b-410c-8360-ae50d3b2b25a\n52d38077-01b6-42cb-a97d-21ce88c019a2\n8b75af0d-217d-4030-8464-cb8859484bbc\nf496e685-3970-4d05-b77f-e19c5021fe74\n615fd421-1a0d-4c64-8cc1-a86542d75616\ne2f74830-3c8d-4c0c-a06e-39d9fbe686ea\nb62d8e7b-1f96-4930-b152-542224536849\nacee4bdc-0970-446d-9478-41cb969770fb\nf5a6e27d-3b6f-48b3-b92b-11d9c7a1b248\n4ac0a846-b515-4f47-b707-4ba5b09d7ec9\n4d2a57df-a7ad-4d11-a293-dcdc9fd3d5ce\n9277ec9f-24d2-4a07-b6a4-64bee4b4bf18\n14728f8a-e17e-4490-97a8-00444514da6b\n4f9bfb55-45c0-4c73-ba1f-677e9ceceae6\n21b8f3cf-26aa-4082-8590-2af041a96acd\n2de70bb5-fa08-4437-b12e-16447d98e834\n22c986d9-e3e7-4adc-8c2e-ec44be09539d\n13a0d94e-eed2-4963-93f3-fc2bd65cb896\naa6adc9e-4f6f-49a1-ab4e-0ec68f4f6aaa\n6678ee2e-af4a-4189-8014-578efd7aaeb1\ne18105bb-f96a-46eb-8de6-03961d7a9cc1\n3f51b9f2-0905-46bd-b7f0-a592320e279c\n5a2c7bb2-c02a-4074-b6e5-2f6303b06095\n821913d2-c061-47ea-a2b2-c985467a2840\n54d9efa1-6f82-4859-b50e-20b706ef2f65\n3b98f333-813d-4623-b5ce-00fcec6e05c2\n22d07be0-b649-4eaa-a9dd-07a67008483a\n5cea0cfe-89b9-432a-a7ea-49d4365ea5ef\n4fdeba7a-6cef-4b8f-814b-0279edbb1165\n26fe46c3-309d-4f80-be7f-33a10c104fd1\n4c00265a-4119-4f00-931c-7b0bebd114a0\nf8beeedd-3163-4f4e-b64c-91cae2b3576d\n85f9a468-3540-456a-8156-b30c2e72dd84\n3b82e6e1-6005-4c1a-8ab0-ea0956b8d444\n5c817425-a89f-4695-9d34-651d92b9f613\nc6149697-29f5-4db7-a544-9ca50b1e67ee\na7c84465-81dc-4b6f-b05e-ef991be73301\n55cd879a-5f55-4aa6-b706-3b66e97b8ec1\n7c90825e-7746-41de-987f-6c34192a1ce2\n987d58b4-c70c-4243-a2c5-9301827b1580\n68371ed3-2fc0-4e56-85cb-a310fd8d5f65\nb83dd2b9-f569-4cc0-9dd5-440f91080265\n04528fa7-5871-44c2-87b9-61d57b863881\n27ab64e1-4a26-4783-93b9-e0457c22b9e4\n36259d45-e57b-4064-87d1-44f6be0c8a7a\n562662cb-1cb1-4c95-8c16-190dd83c205c\nc65bcf3d-4906-418e-9261-9b175faa94dc\nbb3a0259-a69c-4813-afed-b7a88e66953e\n01123b53-4d30-4175-ba53-bd9ca204b00a\ne39ef8e3-0329-4886-8f5c-eb8ae265fc43\ne9e66f95-f5fd-465a-85f6-ea59ca4ba091\n667401b0-8ef2-4e61-99b9-414113f758c1\n90d22956-926e-484f-bd10-9675ab6fe5af\nf5e92bb1-ad9c-4d92-adee-8e09ed69521c\n8350d602-7a38-42fa-946f-a713ef5adb39\nd82a6f25-c0e5-4a26-ac70-9188bfb33d43\n2142535e-71c5-45ce-a59f-70b496b3d8f6\n104712fb-f575-4832-966c-821c5482ee59\nb50554f1-be9e-4b1d-9476-bb5c3fd1eabd\n627568c9-9986-4314-899e-8be9f24b7683\nfc1a36ab-d5a9-4b8b-8381-e24ece5be9e9\n7dceeaf1-364e-4f5b-85dd-895cfd785585\ne85270aa-aa9a-42ba-a813-e74f819c4770\n72a9ad8b-0664-417a-ab78-78bd5c437dbb\n21300a49-6ec1-49f4-b8b9-5c2d25670d09\n1a952c63-9994-4a9e-b48c-ca3f427bc4d9\naebbc2b8-eaa2-464d-8c09-56871219e46f\nbf7267d1-b93b-401a-a5a9-d13ad79bedaa\nd976ce5e-1b9d-4f83-9584-b2bc6e7cebcb\nd75f08f8-0dda-4ace-91ca-8779f0cdc267\n2a719fe4-f0e0-45bd-bd74-c36e29eaf451\n88e18a0f-68fe-4896-81cb-f00e188b660e\n9d9def40-81ed-4e06-8ba8-9860f80c2169\n79a24f7d-3e69-4b2c-af7e-02233b658be2\n90b5592f-243c-4dd1-b309-4853b300b331\n645afbed-fe02-432a-b319-6e700cf747ed\n1e0cb9aa-678d-4326-ac41-df65b33ddf64\n04ee807c-0f29-4f16-a0ed-daad2e200f78\n44c82a3b-26a9-4eee-acd1-32b4b7ca5bab\n549c5376-f6f1-44e8-b396-f4b875bae06a\n0af304a9-8321-4cd0-9f84-0a8f885cc060\n00242ce1-801e-4cac-ac13-fbfd7a36af22\n1630c05d-7f7e-4a56-9942-b2cf5558b37b\n9cf3fdfa-71ac-4aae-ad32-816283038749\n7fbd5f00-c564-49a2-8a15-d4a7bf8f09ea\n601cca5f-bc0c-4d33-96d6-b00fb4b17c21\n8510c680-936f-450e-adab-1a101fbf0015\n5a4bc542-c014-4f48-9ee4-c0aa43e497fd\nc695cf32-d400-40e6-a16c-6ba490051fb5\n369dd4e8-5bb9-48aa-96f7-40e46019f125\na8ad9b00-3faf-45d6-b8d9-3428d74bf346\n6b8f21f3-6c62-4a85-933d-338f4ea4b211\n09855708-10ea-4664-8ad5-77925cfe43f8\n048d4218-62dd-4f7c-9e8e-97e4fc7d2565\n1dfe1e30-6464-44f1-bfbf-651e533ab397\n606f725c-089e-4621-b360-7aeda4978ecc\nc431910c-eeb6-4b62-8f3d-8d8f03af233e\nac666942-46a8-4914-89c1-0d57f4411721\n8e45fbf4-b158-4971-aa68-c257001dfc9c\nbdf5bf33-0f24-45a3-85bf-84b1238f9cd7\n7e119aca-f783-4dfc-ad7a-f05f62b5348a\nd32a81ab-729e-48e1-9195-958211ac74a7\n9bd54ff2-00ee-4aba-b8b3-fea3a6dff2b5\n4314a4d8-a618-4cfb-a1a6-79007606fb73\nac3ef16e-9092-4a73-a7b5-22cca6068c3d\n95518a40-940a-44d7-b516-42710d0f2c77\n2a66a642-9bb0-4ff7-a4bb-f0f46f4b0745\n9cd2e75f-a233-4989-9d73-af0691802192\nb3a322dc-1b65-4052-bed6-25e51861d616\n3b67d378-baf7-46f5-89a5-12c5861295bb\n5c0c49e6-20cb-4d5e-9e89-a92addac81ec\nc06d90a8-640e-442b-9007-95dc9f1e0beb\n56ec63bc-121f-4f3e-8fcc-8ed3f57f32f4\nf31912fb-df8c-49c3-aee7-d11b5bd7c556\nfc494f0f-6e51-4bc5-980f-5bef996fba86\na4de63a5-e9a0-418b-9cc8-914033c5ca1a\n380a3ed2-c9d0-4789-b5b8-9cb7ff79840d\n22abe5dd-734b-4ad9-b4df-ff6a1b530a98\n13d9f40d-6558-4fd2-9a73-136e6c62d091\n8397c680-8815-4bb8-9540-ebb8c3a52738\n4f974bfe-ba97-4b7f-a8fd-fc531bf8e390\n1d3fc711-e419-44f4-bcaa-b2ee9a4dd91a\n5d2fc043-9353-4eb0-be93-51f6b08a6e62\n0cd57605-7765-4ef9-be7c-9528854fbaa2\n9f7b385a-ca16-4cf4-8921-3ce940ed32c6\nc670ff80-ac96-4d1c-a05e-7463251b9ce6\n475d2edc-ae6f-4ee5-91ce-2467b1beadde\n38903c75-57c7-495b-98e6-6166f17c1d7d\n81dca277-46ad-4ce3-8cb3-759365a32181\n622ff4af-3005-41b6-9bed-83cc0c5fbcd5\n97dfbda7-6801-464e-acf2-055ed0ad580a\n1a1bd0b7-6083-4982-ad57-223d70178441\n2f3c471a-2566-402a-a0e5-e94f5fe5073d\n9b6d1d66-c815-4de1-8b53-c2657e104edc\nb4405d37-0648-4723-8b85-776929d09e9c\nc8a4a7b4-f0ba-4fed-8b13-0d24bab3aade\nc8a7d14f-2369-4efb-83e0-b7c709397d6e\n1f719962-80a8-4608-bf1b-01b2b3906b98\nd4aa7546-3d07-4bd9-b5a4-f79e832a01fb\nc1901993-9ec8-463a-ba1d-68cc51d41cc5\ndec31ad4-664a-409b-9d49-daf3b4f414cd\n72c74be4-faf5-41c3-b256-82456f23a613\n2c78eaa7-f3a3-4d42-99d8-c2890e614916\n94884ba5-4db0-4844-8624-59b5d866a993\na7bab270-9aa9-4445-9f9e-80749f65fd7c\n700e4605-30ca-46d4-990b-26e40fe4aa17\n9e0e5d6a-41f8-4898-9aeb-1d720559afae\n02081e95-7ad1-416a-8e43-9d9ce33ed353\n4f0301e3-fd98-4001-a951-e1492ed8836d\n1a27f85d-2adb-451e-8a72-1c8b6ac809d7\n142aff00-ee9e-4f45-a9d3-25e4ed7c38cd\n070e2fad-5d07-4149-9a9f-5a0a904ae26c\n73ee6f2b-f4df-4ea8-9c21-85f096f0a0df\n6c230f68-2cec-4ba3-bb61-3e1667b3a559\ne11c0e4f-8876-4959-8669-a046e6b96caa\nd5d07c73-f8ce-4d38-914c-94ea316b3886\na4a85412-e2bd-4f6c-8f9e-dd911d5484f0\nd8f061ac-c4d4-438b-9622-3aa64348cb1c\n574c2f20-672c-4e10-8de5-2fb2ee7742c9\n246ee242-7a97-4cc7-82a5-4b454f38c01a\n365c6246-dd0f-4cb5-9663-b8971a831b72\nee9db9e3-d133-4353-a213-e9a20104cf01\n464a96b5-a8cb-43b6-a11a-d06f2872ed9b\n7ceeee93-af47-4673-87a4-ea48eafd1618\n9c2b9961-c365-4344-b718-2cf064fbd076\ne1dffc58-3ff7-432f-85c0-9f3e25bcfbaf\n24565264-9e05-4afb-a647-ffd97dcbf62b\naf11e686-4f45-4177-849f-25cc009ea7a5\nb60a7dd0-9c58-46a5-8755-ff145ed5bd20\n296c37ad-5e18-47f3-926f-79b1713a0e0e\n9f81a07d-54b0-4218-a383-0cc96008478e\na724fab5-f13b-4b81-821e-cecea7869bbf\n741792f1-5cfe-4f3e-829d-2d5f038b4b6d\nfed0df39-c72e-4794-a7fc-25d49776e09a\n6c0f8369-00e1-4ae0-93f8-bba8a1eeeaad\n8503e23a-6c6a-4e15-9e7c-e80ff2bb7ae3\ne103639c-8046-40e1-824a-b7c242023c89\n806d7369-dde8-4fd3-8fb2-52f3082bad88\nd7823a2e-a53b-4e7f-b446-d5af4025ecf1\nd7f8c705-5e42-408a-90fe-384b66dd0c20\n393801c8-9c1d-45eb-8010-b1584465d134\ncdfa82fd-42a2-4a2a-9622-a8d0bd39cbbd\n01433554-8c1b-40de-9416-8392ec167935\n16b86d53-8c30-475f-9e0a-6bb95321ac10\n6f54eca9-78e8-481a-b46b-ca330ac41d7f\n151247f7-9b2b-4e5d-bfa2-62a744f4c7ba\ndae40274-889c-4626-b61b-a6bb2d1df0c0\n7e03f4fa-523a-46c5-a192-0314ea58c010\nfb29dd97-b18b-4a3a-a42b-67de652f0005\n80b5b063-9265-40da-8b60-98cad55dfb5d\n4a3258bb-9c9a-4065-8d59-83a72d87c638\n5fcf49e9-e77f-4d72-b507-eb95595f0870\nac370e17-f095-493a-b815-413ab645e3d1\nf78747bf-b672-4207-ac64-9c9f4ab3bb30\n9e4d270b-6181-45c8-a393-9966d8ac8989\n70c5537f-fd7a-431b-b524-ed81467f0ae7\ncc2ecc9e-418c-44eb-90c4-ffead9d0df07\na12883ad-5215-465c-80e7-38d34f9482d9\n8283259e-bfcb-45f3-a6b5-7a2886a6b7de\n3cc0a991-dea8-4e74-81b3-260e743153dd\n6bbdae9b-30e2-499c-aea8-bb4259df9fcf\neb8658e7-9bbf-476c-97a5-bdb1e097c075\na7d8972e-ca25-4b42-aab4-c01e807b91c1\n6d2dc8ea-1f8a-40ec-a5d9-2a7d7266b250\neda766b6-97cb-4bcd-9fa3-b84e7ba8cc12\n04ac94fd-17f6-44b6-b0d0-455a8a96cb8c\nd517fd2a-9d6e-4c6f-8a48-a1e8a3701ffe\n1ad94d48-2ac2-434a-b9c8-7d485cd52070\n6300058b-ac55-4efa-9a4e-4496d2714488\n38b09d9f-c448-4cfd-83e4-4870ed499a76\n174c3664-b407-4b3f-9b08-0fca81739ecb\n99b97a0d-cf37-4568-9c58-089585058eda\nc38981e9-da07-4870-a620-eb8f2988f2f3\ne006a1ce-e8d6-4711-bba4-2bd9a5e72775\n21ac393c-87ca-42f9-a8ff-f2185889d03e\n40a698a3-c098-429c-b8b1-db7838e543c2\n7f8ea06f-4c59-432e-b512-9c49a8bda56b\nc69ef441-10d6-4bd0-8af0-13d4df5e7036\n5e163db8-112b-4bb3-849e-233e9a788d61\n35b72199-4914-4000-aa0a-2307786f8bc1\n099adcb2-5537-4d97-b26a-4b52443666aa\ne292eab2-1bf9-4ff6-ac92-e117d9696cf9\n1b22b16c-5839-4ac7-963e-ae0f3d1adda3\naf89b536-66dd-4576-8a5e-af8d21f8b8d3\n0cb14675-bb15-4a94-9762-f78be7e2e538\n0853b3c3-ae0a-497d-a9b3-e5014ce1cb0a\nabb5a6eb-c121-4a3c-9588-3ef6026c530f\n2e7af904-aea2-416c-b3c0-795186cde4f9\n1bcceafa-b32d-4204-9373-727903cad311\nd76173c8-9964-4f87-9b86-4078220bb363\n406362f7-5b81-47ad-bddb-19850428ec4f\ne10dac92-fb2d-4ee5-9476-a14928c1ee89\n4eaba59b-ce3d-4181-88e9-570b11498909\n3177c24b-d0c4-477e-930e-637a7499a59c\ned4b6171-0a6f-4718-846b-b60b5c6e04ba\n999e3f49-bfc4-40d7-b6c9-2703c5a6af21\n5adb63af-151e-4581-a29b-2d07f77fbc2d\nc11a5135-c539-433b-bd8c-9e5d2ff41ea0\n43ba7420-a1a6-4b3b-9ee6-417adf4e74e3\ndeaa69b2-2246-4c4e-94e8-b4f6df5f02f4\na8be3c28-f56f-472f-8a91-91d5bb02e08f\nad0b0a05-5ca1-4c1f-ae47-5eb7a332939f\nc123c694-f093-4f87-9c47-2cac93fee1a6\n31191831-589b-4b39-afa1-22ed0ea30a1e\n62e8f0ad-ab95-484d-a1b2-96dca2d5adc9\n150b6b03-9a70-4254-aaaa-4dff5f16b3c0\n6815772d-ddff-42f4-926b-ed35c960c613\nba0ea7f1-c507-46d8-9fa1-954250a95782\nf987401a-fe70-4d5d-a047-d2411e5dd913\na4f85e9f-9ec5-45c9-b8ad-4163b723e16b\n0185353f-be6f-46a5-8069-5fc10647a36a\n2a571e18-9802-4f8d-9952-8f8c0e007a2b\nc6e74be8-0321-49a3-b590-a6813a9b5279\n83973b4c-fdca-466c-af58-6923b722ba4e\nbc630dd8-bc66-4cb7-94cd-69c9ab255bdb\n4f21f6bf-b92d-415e-9873-abfda69eaed7\nd831d997-a5e9-4f0f-8833-c0f2991d0fa1\n1ca03577-4296-484f-821f-47ba420808d7\n44b8c7ed-92f3-494a-b7cd-c1de0f3584c5\n9504e861-e88c-4eca-9fab-2e8d583522a5\n51439e91-ad1a-4eaa-a75c-f70c6270ca03\nb100604e-ca57-448a-a521-e57c279d9df6\n59881c0a-1243-4de9-8a61-40e0b4e3e417\n9aab5823-727b-4952-a0f2-76f4544f4916\n4accdb24-f65e-47d9-9037-4c4f5947ee13\nad72e942-16e1-47fd-9c6a-725ba2d91b6e\n8c5dd0e1-7ae2-401a-9b16-c579f9054837\n109541db-0287-442c-8065-5c7549865115\nab359986-46df-4a97-be0f-bb436c0d91f9\nad8bfcff-c167-4880-8171-dc22a8b74e03\n5f2bd680-6b0e-4219-85bd-766a2e3826dd\n838c43ca-226c-4b14-aa91-533849275de0\n561562e7-64c5-4f7e-b23f-e25a8e810045\nf946bb98-a8d9-4652-956e-092e9f6fd581\ncb88d400-2430-47df-8b80-db324b5f3e8a\na52c72ec-e5b4-485f-9cff-b963ae7d14f2\n5bc1c6b1-3c51-48d9-af2c-6bf217303f51\n0b28ca1d-03ec-4767-8d32-3d3ed09fd7c5\n9b15a634-33da-48a6-9c23-c40e886275de\n8dc4690f-203f-4ddc-ab28-51070785367f\n3fd721ee-5331-4aa5-970e-17f4450e5f53\nc24a974e-5a67-4815-92dc-8ff3fec64149\n4cf5a7bc-b5e7-4ee0-8de1-d9853d1e961e\nc0605b75-ccef-4d10-a975-9f75d340bddf\n0e1a8da5-ee03-433f-8dec-0be3a5869cc8\n5479f642-2c7e-43be-96a2-ce0deaecabf9\n72166033-5aee-4e38-9f27-ba48331621d3\n2d925b53-efe7-4c6e-b6fc-2620f9e1b92f\n4c1ab11d-089d-4afb-b570-178ff3e056d6\n77de1f58-026e-4ccd-8699-9209b787f71e\n385fb25a-c5a5-4077-9691-7b4a1e03481c\n93e2ffaa-e8c9-4410-ae1e-0e92e038db4c\n963201eb-e782-466e-9a21-6b8f8ec154f6\n705488f8-bca8-43e1-8d62-4c0aa25423bc\n8b8aad23-4969-4b9f-82d8-f67c0bb9ee74\n4c02b441-9413-46c0-8d60-44f86d3d5880\nd1620efd-18e1-47e5-8999-b7743607afc2\n416ef0ba-e671-4ec6-a204-0ca0d4d6f972\nacf86d4d-9d1a-4b44-9cb8-af34bdb65a9b\n9bfe9fce-aa5a-49e1-b016-2cfc226f49c8\n688262b1-2eb5-46ed-a7f4-03e79bd36abe\n0477f68d-5bd8-437c-83e5-16aef12f6345\n1196e2bf-e570-4d1a-a4d1-fc68a457a8d9\n2f0b3fee-5b1e-4f50-a6c2-670010e270b5\n91a95988-88cd-48f1-9ff9-97a2989c061e\naca2cf15-9f39-4690-b0f7-e76601d111a3\n4e353888-05cf-4bc5-b201-4a4ccee78dcb\n70c75482-e516-44fa-b376-0f22e0a754f8\n641206f0-c921-4d45-8bb5-2e9dd1351b02\n47807775-2632-48e5-a81b-2bed5d235141\n2e3d0ad2-7054-4495-8319-2d161bab64d2\nadf6f47f-9879-42cc-9779-d03dfafa16d2\n0b2bc338-689b-4b31-b545-2eceaf5feaba\n34d60cd5-4854-4cb1-b21a-75d485f77c20\nd8b72dff-476a-4211-a0f1-e8dd218a94fd\n2e7363fd-879f-40f4-8cc3-b086b2dcdf44\nb6566636-fbb6-4a25-a0b7-58e01bf218f2\ne2838693-e07b-4126-a4d1-8b5bbb4cd7b9\nc30674e7-b774-4deb-b6a8-6b8306884fa0\nb2d7d98c-b79a-4f6b-89be-dc7c3b47aafb\nff0bdc83-dc17-4d83-8b3a-a5d3ca8eb292\n3ef9ec4a-04ab-4d91-867f-cca0dce176ff\n34fb0381-c2d3-4f41-ba8c-d1a430eb3458\n58a8638b-b3f8-4627-9a13-fa91ba4c276e\nc9f40b45-dd2a-464d-ab12-9c603445620c\n98df3ee2-7628-4722-85d5-828ae9de3fdd\n69526030-7344-437b-9b48-7345df00be12\n6b2471b9-a472-45b6-a69e-837dda26ba10\na8edf60c-c5aa-452b-8fb0-f4c1d89707ef\n118ccc04-cd34-4fab-91c9-7f3f69bef8d6\n1af95548-babe-403f-a186-c90c316b648c\n5d6f53f2-aee7-4b98-a128-b09b1ff24939\nc747abee-e3fe-4bc6-a969-2e1a82d1ab0b\nf9b23475-2e6e-4704-98a7-48be74eb9f51\nab58d7e7-6108-4478-a5d1-9e17e3fdf48d\ne94742ee-f3ca-4947-a520-e6f4097215fd\ncfcc75d1-f2fc-48a0-b2e5-acd034178f13\n1d37ddf2-95c7-4673-8cd2-6c22ec632d06\n5ab8b0cf-0f7f-4b64-b511-af74f4ca6ded\ncbee2a06-a5df-461f-b661-699c54e8c088\n6b5f09f3-a642-4b53-a3df-c3cdae92eeb2\nffffcb46-a92e-4822-82af-a7190f9c1ec5\n0485bd9b-c011-473f-96b6-ca9966ee6c34\nf2043a5c-2630-414d-95b2-114717828e61\n32d88e34-f727-42e1-ba12-f06a210b0056\nfddeb6cd-0ae3-49af-b764-f2819a440aee\n2d160456-0d93-4d10-a295-7bd6ceb1084e\ndd1fbf97-1be3-4ef2-889f-b8163084820f\n276dfeb4-a910-4c96-8fa4-36f4164bd8b0\na92905a6-6611-4ebe-b220-38f066ea75be\n105c752e-4550-4b10-a725-ebfad4420753\n5ad89a0b-6344-4314-9a82-8bb023b7b732\n30f00423-96e4-4224-a0c8-45af79e24778\ne193fe12-1748-4bab-87b2-80415b071d35\n1061e916-ce33-4580-b286-3a957ffb40a4\n7ea966c1-049e-4485-88b5-e49eff7802b9\n37ab7b9f-ec42-4d6e-bb2c-071a8be440cc\n963191cb-5288-4fb9-9ccc-aa11e89c97e8\nb706ff66-ae5b-4f29-a62d-495609484c54\n6dd01cc6-4fb7-4dc4-a42f-45859216598e\nf4f31f16-89e8-4289-becb-3cd1fbd55c05\n1ce422cc-e9ab-433a-ad63-791d1154d410\ned5cf596-c88e-46a0-95b8-1f93e5e545ec\n0e529efa-856b-43d1-a0a6-91e4e2af60dd\n5f75129d-af74-4b7a-88eb-066feead73b3\nf62a3c7f-2f1a-4d4d-b3ce-4241394f9b60\n7ba59f4c-c534-4856-ad86-9414b6dff04d\n94855feb-e095-4cda-90f6-f1f59ae68aeb\n9b52dfc6-ea9d-4860-89d7-e0cc71e11616\n32716f62-48ad-48b6-a0a6-57231b87bb4d\n9e79eb45-b298-493f-9819-d36a37b4eb03\nc324e7b0-b047-478b-8033-7f5bceeb5c00\n82046543-5fd7-400c-a74d-d24840e1a0d1\n66907f06-3b92-4257-ae18-3759dd988692\nc7ec172a-7e93-4079-b941-cb90983ee58a\nf71d2093-350b-4864-9afe-aa580822a9a8\n040ad297-d6fd-4cf0-9187-f06c87cf93d6\nb15f577d-1b7f-4568-916e-a73d8807b4b4\n813a0ea7-ae67-428a-a831-df66aff416a4\n73e4fbc2-f5b8-4b86-a9f7-12f824747a76\n5d02cc09-73b7-449a-abe6-def6d630c6d4\n06aa2b73-2e86-4f1e-ad2e-a5d7a896ca97\n5226d521-ab75-4f08-a7f7-cc51bebabb78\n4063ec3a-e3d6-4914-83cb-e0f0d23dc80d\n1bdb7f3e-2760-4ee8-abfe-13820a9fdfd7\n7214c343-95b8-487e-a156-608012a55433\n123d6347-e4d4-431e-ab4c-b83f2db82737\n90afa449-4707-466e-99f7-1465250c83bf\n037a78d7-bda2-49a8-b82e-313cac9690bb\nf5ae782f-5de8-4410-b1ff-00e552c48b7f\n9e302d15-1e21-4c4a-93eb-19770d48d234\nfc110ac0-d46e-49e1-a221-87940aaf1e01\n2faff48e-e98f-4923-b518-d66e577e2f7b\n0a8cb301-30b9-4bf8-9058-b6a923de14e0\nca1cc908-0dd7-47ed-97f0-d72eff8b1bdc\n7acfb65a-231d-4115-adc7-895f46aac1fe\n3f48af6f-413f-406a-aad5-df64a22d5c6c\n854f0364-88c2-4b54-8f9b-2a5804e81fcf\n303e1ca6-f099-4245-ba87-35aa06d89f4a\nf8657a23-0405-44fe-bf40-c2e0a266ca1d\n23e03d1e-5265-4992-a05f-017cb17bf697\nc8f29f56-bc2b-4def-9f6d-3ddab94b7832\n748f1ddd-43b0-4ba9-a53d-082df0c29d9d\n7824cedc-5903-4a48-af32-710cfac179e5\n2bec1d55-cdf4-42d6-89fd-312681c78756\ne426a78f-2a57-4666-a980-c2c2c1ad586c\nf3e8713f-1be7-4bae-a129-4e31686087da\n6d35f7d5-078e-4809-8b8b-e48482120d7c\n0f741756-b130-4135-9574-f3d046f8b0b8\nd475fc18-b23f-411c-aade-2756dafec9dd\nad48c710-0f9b-48bb-ac3a-1060fe91ad33\ncbcbd709-f018-4e89-b75a-b05f474504dd\n03c8759d-ed54-4a6e-9e8b-8b51e63e6575\n0e6917dd-2cf7-4525-9cdc-4bb658765b5b\n3e04e16f-7274-4ce1-a444-5f544607fb58\n23598685-a910-4ddf-bffb-89c31d558b26\nd7fb3237-1ed7-4ad3-b1cc-3631fd224570\n3597e6c3-4af0-41aa-8f30-ba2e9e87de25\n41ffa214-90e2-4143-9592-240aa2f068e0\n0f346950-6889-4843-bd44-b7eed323fe5f\nd9ef4a38-94dd-431c-b922-467a0c4076b7\n1303c21c-95c9-4e28-bf11-955d2064e6af\n5393e0a5-c365-4ee0-ab44-b1b979816148\n39dc0dc3-acf7-4066-9d00-8cad0a7a56ab\nc14562f4-5e09-4b2a-9178-d939aef023a2\n982ac6e1-ae89-4305-83b8-b3bb2079324c\n2e5ab080-6ace-4aaf-9c42-c1625756bdcd\n1214d79d-3e1e-449d-960d-f0e76036b8e7\nfb296ea7-bb19-4679-ba38-af9b029dd0d4\n3fecc43d-2357-4284-b39b-558deccf4662\ne026b607-20d8-4b37-a734-caf659961035\n32b385c1-75d0-4edc-8a8a-5ca68cfd3cb3\n81b2cb22-6088-42f7-8c6b-2cb0c5f6fa9f\n754615b0-ec68-4100-89c7-f4a56dcda7ec\ned33e8cc-4486-40da-8d57-910439b9ec9e\n42e9ce31-acc1-4e39-8f80-16db952c9b2a\n54650fb9-aa58-48ea-889c-f8f80b87c8db\nae9f0563-2aa1-49c7-8afd-e6d7c3cecae3\n7a7ec7c7-90ee-4a8a-9851-614fa2ffc3be\n254dfc2d-a999-413b-a46e-8986ddd72cfd\na3398b0e-e0bf-41a5-b102-59f3609a7e5e\nea743289-1bd6-4a22-b576-035a5c3016c7\n59554fd2-354c-44dc-9207-661add3adaf5\nf1b0246e-16a2-4c6e-a97b-1bfdddcecddd\ne3aac2b9-d768-48cb-ad64-6f09b0783044\n76f86d94-0b7a-4983-9bbd-0ca8d1bbe0df\n86a22336-595b-42d1-b3cd-497faed5611e\n4ba17048-8d7b-46d0-b278-b1ab2805dce1\n440f30cf-85c2-4497-a662-e9bf551c802d\n7d503cbe-87c7-4378-890f-dd18fd08dfcd\n365653ac-7f27-402b-8576-a9e5a8120eb1\nd2b6313c-ddf5-40cb-8182-4138036cb0de\n5439eb23-d7df-4d47-8953-9c4cfb29fd70\nc49cec4c-94cf-4088-be4c-e81356e84b0d\n2c38f9c4-ab1d-4ba2-b858-454248cc8c43\nfa2bacfd-110e-4853-b9e3-402c0a0c04c2\nc10bc78d-61b7-4b7e-86fd-12f238588961\n782658cc-e1e2-4cb3-a94e-a4344dc12232\n6b3db740-ff2f-4c3b-b64f-62228ad36fb2\n5d38b67e-fa1e-40ec-865e-a77648ef2dee\n08254215-6966-4f91-9974-7aaec05469af\n32177775-73ba-4ae3-abbf-af2c00b6f256\ne95d78b7-c052-494c-ad0c-5dfa17e0b0c8\n1d1f3a2b-f445-43f9-82a7-958fbcf05c7b\n2891294a-a1a8-4133-816c-dec32eb57a4b\ncbf98521-7eb9-406f-b7b4-ce3e182d3613\n5ba6be9e-4ca0-4b05-8ce4-e2f2017b2c9e\n14b25d67-7ece-4383-bb62-5d97ee3604b2\n21a6fdaf-0906-4892-a620-0661bfdda50d\n7d9fc358-4756-4b11-b55b-59a85f4c1aad\n2141e1de-9f66-448e-8c89-37c7dbd3a2cd\n491294dc-0c3c-4719-854a-fe253a055de2\n66e8b2f6-918c-47c0-9929-65e4b7beb035\n0de888bd-b807-4f8f-9d23-39c693152fed\n2c7800f3-f050-4773-8d77-5ffd5e69697b\n72d78827-ce49-4ac6-b2a7-68ef7f94b2d8\nea049ee1-cea5-42e3-9262-d07889465514\nf122e485-7d8c-489a-a6e4-6af22fc82877\n03b4beb6-c8a2-4411-b335-7c98439c6f93\na215392d-9b0e-4bce-8d38-95975664d439\n9b11dbe2-f83f-4bae-989a-c7c15ab9531b\na5f3081a-aae4-4139-8fba-78a901f0d6b2\n3c0e98ff-f968-4d45-b676-1937b2575405\n9212ccc3-7b8e-4647-9a07-bb5a256ae986\n0f33073f-19a4-49cd-8da5-7e5aaa4428db\n8de20cce-43fa-423e-b092-99f03dd00a34\n4b8412be-00f8-43f9-86c1-abb93560d459\n222c1476-22e8-423c-9746-ce4e07ca7bc2\n4b35aef8-e94f-4b71-9d47-68f159f984b5\ne6f24c05-2e92-4a0d-bf00-e84bfe18b60f\nd9678102-e475-4bcb-8aae-967342852929\nfbd1ad50-0b6d-454d-af4a-a25c5693f186\na12128ad-1f38-4251-bef8-74d7b44c940a\ne14ba9cf-b90b-469f-84fd-3a28342c9e41\nc4e5a693-57e3-48aa-9eb0-91567258080f\n4643d7cd-9496-484b-8b1f-7f46fa368f75\nd410b1b8-2903-4833-9e43-ee46f95f1de9\n6efaa850-1b05-400e-a8c2-b729272c321a\n0061d03a-ed22-4a83-b1ba-8e771383e6df\n47c9c697-5adb-49f1-8390-fdfe4d749a16\n5ca04f0d-c728-4378-86e1-75eea779213c\nbcb4e4ec-b760-4bb3-8880-430ed48b35cd\n68f47a10-d2ca-435e-a776-688a1059eb92\n6923cd01-9ef5-4755-b233-3e498216db02\nba987bb0-c469-4f05-a5de-83fef7243b73\n60a5242d-bc4c-4812-a1fd-adda027c713b\n10ea1c8f-a8b6-4fd1-a72e-b5b8c64ddb74\n7ef3564c-75d7-4e19-9b05-4570231f2f8b\na7dc2d30-ccf4-47b2-bf46-8ba48866d60f\n7a2e2a91-aea4-4c5e-898e-2207f856a8e4\n30c71e45-7f83-4756-b619-8771a9fc0079\nac4d0b36-2b7f-49e9-a0e5-d2c8344e47bb\nd5c41829-d925-4b4e-93de-7c78acea9c79\nd84ce3fe-9279-497c-b860-ebb2cd269486\na5ab40d1-91cb-4e23-a825-47b1768b12ce\n3ebdb8a0-b025-4c44-8eb1-2f0fd45b535b\n3042b7ed-12db-46b1-bea7-1ae19c085dcf\n020ad471-3a9f-452e-9026-1ffcba34658a\n44b41c65-9d6e-40f4-951a-eae51005e25c\n2a757f7c-8b82-4fae-bf77-e06274f1b368\n03deb01b-0d9c-4fed-8872-b4f26e90ec25\ncfe55cfd-ef3c-4fc6-ab86-2fbf59129269\nbc8f1d25-e9b2-4fce-9203-8af13ffb058f\n8d18cbdd-ac37-4e25-ab26-23276228fb9a\nef58af54-3e67-4e21-9339-9bc3dd5b454d\ncf3519fb-42c0-4210-8f89-a1b5a8429bd5\nbe26b992-c7d3-4f50-9046-79b650f790e1\nb1f07532-25af-4209-b77f-9ef16d853815\nf5cfb8ce-28f4-4287-a49d-16d79408ef39\n3ff3e184-7499-41c6-98f5-0f7cc167a473\ne170d40d-191f-40e7-9c56-ce021a8772b8\n2526d29d-869f-4969-a9c7-64f68afa14e9\n235bfd75-045b-4cd8-b14b-1fcf7cb80229\n41bfedfa-773a-4d6a-85a0-d6ba1ce26d97\n94c57c3a-6fb3-4f3c-ac64-03d21b46f0db\n8329124a-c581-4811-ac23-d11c916cccca\n1964b947-e6e3-4dd2-bf50-74cc488cc744\n1686a3dd-c96b-45b2-a0af-7e0e276f24f9\n302e7cfe-3f85-4878-ac82-c774fd4767ee\n8b8b97e9-23dd-4a5d-a7ac-fc00b9077995\n0500f502-f5b2-4f1f-944f-1712c14fe830\n11a4248a-f22e-4c72-a310-977bab205953\n9f67f143-aee9-4749-a398-3f5d3730ffcf\nfa75d471-1961-41ef-823a-66d6b373ecd3\n5523fe09-d036-4c72-81b3-8b250205add4\n61172281-0bb2-4dff-8329-59aa73fd1c99\n9ef87502-1699-40ce-be48-d0deac5cfb39\n40411263-da06-4469-9c60-d5dfcab139de\n28eae123-f9a5-4e0b-9bf8-ed7564c62a0b\n427aa666-6d5a-4a3f-adff-96e267784c5f\n2e20bfce-3e75-4500-9d76-c21740b2631c\na4e4ac36-4404-4dab-b846-b005eaf478d1\n682031ce-a2a1-46b1-9fbc-af1a7c8b0c11\na17e7b29-9be3-4c7a-82a6-2a218bddc6bc\n0a37ec2d-2254-4b8e-95ed-f871ad22ffa7\nc53082a7-491b-46a4-b3b4-f9c1c008901a\n2ca60e6c-4f9a-4e08-b66a-5d970b20189f\n514207d9-e3d4-4814-bdd8-2469044984a6\n67c94dc3-d835-4149-a2ed-fb2f36f789b9\nf9f54d9b-9922-4ca0-a175-d352e89f7ad0\nd78991a8-e3c3-4563-bc41-3d40db3fba24\n3a903a6c-0263-49b5-b16d-2b6493520c93\n857f1c54-878a-4033-aec4-bce528733037\n914793c5-9116-4593-8040-3cc047a0cc2e\nf4b2b07b-ce35-4fdd-b8f7-ea7174cdf862\nbe05b6fb-60e6-4e4c-a49f-eb3dd1b0b708\n35ad3586-ea3f-454e-9434-3e19850f0857\n8e7ae981-4901-4a82-872e-a1cc65a9b28b\n3e3b9bb9-e616-4739-823b-0aa7a24214a8\n225826ed-e922-42dd-8b80-bf301b2fd3c7\na65056d6-f21f-4c73-b8d5-41b0e9e996bd\n6f7e3193-1093-4bcb-bc02-e8084a23516c\n612ed510-db66-4408-8794-37be4bb63b46\nf3947319-c7c6-4c4b-aa1e-b6f1f171b13f\n11ee5a11-eca0-487b-ada4-597418ea5534\nebf24f47-27c9-40c1-8a01-50ff8418d715\n9e8787c4-134c-4d8a-8952-44d497157955\nec9dad80-0203-4456-b4ba-e9199d0204e5\n1870eb64-bad4-4bb4-a6f2-1697a5b80fee\nfd0ddd8e-d743-49b2-ac09-b9293181e212\n925c77ef-aa24-400f-b19e-ccb7ead3fec9\n9aa62e4f-a9c1-461b-ab29-9df225e97a46\n84d0836f-b70b-4022-b28e-0e5504070dfc\nd67ceba2-dd33-4901-a222-8f20c4409675\n251dac1d-032e-4054-ad79-ec939c03e30a\nc11df491-a271-4bc4-a82c-78ea59914325\n2a1c4382-39a2-48fa-b4fa-38fd7151e1e6\nb5a94dae-40f8-405b-9eb1-bc72d78af12d\n5091f534-61a2-4440-9f72-4f4f42282628\nd61be9c9-4e87-49cf-9241-9fe73c348de7\n1458a134-b61e-45fc-a6db-44122c4176fb\nd250750a-3b3f-4a64-be6c-8386c4908699\n8422b8a1-f80f-463c-8e85-9fa09e8d5449\n05d90a41-72d3-48fa-9232-fdf463939df3\n1aec16c0-35f6-44df-b50e-d068754f3347\n89773d93-6249-4f32-9faf-ec3f6f519626\nb17f66ff-994c-45d3-928a-487c669f3fbe\n8470679d-9d00-420c-866b-c36049d6be09\n29b35dda-3b4c-427c-8622-34d4d311003a\na2439aa2-736b-47e5-973a-98daf988f22c\n8c2d0a67-0ec0-4990-87b5-5be5cb0b2070\neadd7d39-02d3-44af-89c4-da951512ab96\n586e9086-61ea-4abd-917f-63e6a1335498\n428d662b-6696-42f8-8d16-e265aab0733f\nc17df11b-20b2-4e6b-8a38-ae8c5faa4495\n25733c59-a359-44cd-b153-a891e941fa96\ndf29adf2-8609-4121-bea8-4aca0ff2375e\na6e03e41-627a-4bd6-9302-45955b138cb2\n24da92f7-3607-4a93-9dd2-4872c1d99fc2\n0c8d9ae1-2a53-4774-97c8-3df1fd61b41f\nc0cec1d9-5bbe-4b9b-8b8c-ae29efb9701c\na5e52dce-dda4-4b96-8f27-59575856b6f4\n6ecccf00-d700-4228-beda-232589acac3f\n961fad89-c676-48d5-ab9d-f25153aad631\na657c275-9e2d-4bca-96a7-560c4f60945a\n077d7766-d3f3-465c-a46b-e4577d4dcfed\n86b5f820-80b0-411d-9063-0bd8819198d0\n5427fdd0-e8cb-4d92-9867-85cc499ed5f9\na0597b36-cf08-4f16-944c-3908209afd62\ned65a5e1-2b95-4b08-91ed-f63cc04ff0c6\n0bd39537-4399-4532-80d5-68d142e82cd2\nee3d0aef-57b2-4963-92ca-5cb3936a1f52\n99128783-f6dc-42a0-b4d5-32fe0feae534\n99df074f-2306-454c-afeb-4e2f6d36afec\n2c9e9146-e08a-41ea-b13c-2096c0210d6f\ne6727a89-91f8-4806-9b51-add8582c0992\nba451735-2be9-4f1f-bf96-3e8ccda86160\n5ffc2f9c-3d1e-4255-9bff-ab8a0dfb5e68\ne3190d98-aa0a-422f-89a1-8e3b7d0da8be\na8c11cbd-bdde-4aef-b041-6d23522f5d8c\n56c63ae3-b276-4c48-844d-fe2dcfd7f83b\n6e17c21d-8774-4d65-a194-2d711054990d\n2e8e9ba6-04b8-4c90-8a2d-38afb78589a2\n72ace77e-51ba-4bc6-9e42-57312e413e3b\n80e28b2e-3f29-40c9-a901-82f3960f8b35\n330a8967-a60a-4433-925d-4472be4e4e55\n7f1c1112-7796-4de5-a198-21f2096a6c99\n9ff33ecd-2cfb-48c0-9404-e21c7afa0fab\n5a993549-3d0e-4026-9de5-13701eb730cd\n8aef7a71-3259-438c-ac86-1a14427d60bb\n6cf00b05-f585-41e0-95e0-8df1c2323852\n7e7850c2-bc58-499f-bab8-33db9e3a013b\n4bb68a65-b9ce-4e6e-9607-3c183cfa790f\n34189b6e-7b87-4a20-8923-e879d084d956\n3893d008-e382-4f6f-8953-9b1e35a54004\n669dc103-72db-4e71-bdcb-52eeaae91c9f\na0ba847f-2707-4b0b-a93b-a4f88dd55e7e\nd03f3eeb-7c9f-4997-b8c6-cb0536fb3b74\nb14faa90-a450-4aa0-9791-975181e0dfaf\nd600cfeb-fdb0-436b-96bc-1e70c5c1d533\nd4c9e994-bfa3-4dbb-8c5e-a2dae167b11a\nd6e4945e-c86b-4cd8-be43-03cc008ace79\n6724c1bd-517c-4c14-ac00-76470596896a\n328be652-73d5-4575-a0ee-adb55ee22639\n7f6c1a00-96ca-4606-84b3-bc6236a8419e\n52f78712-7edd-4654-a1f2-3f049bd1a5c0\na47fcae0-94e1-438e-942a-ad24f1bc887e\nd8ec9421-1aa0-4772-809e-c0cff4775c3f\nf7beb95c-47c5-47b4-b149-58ff3ef36ac2\nf26e1e54-e31c-42a4-8ed9-a74824dca1cb\n657918f3-d1c4-41dd-a4e9-ceba79f674bd\ndf883ab3-0ed0-431f-99ea-5b6ab749aeb0\nd9793e3d-7315-4ac0-a73b-66856021e1d1\n8517b12a-5e57-41d6-8e55-a858cd17aa2e\n2276dfbb-8622-4bb5-87aa-035715538c36\n1fafdda3-0a29-4c29-a038-942daff1b1d8\n2bfcdc02-9297-4a4b-96e2-6aee28801dd4\nd2df4865-c955-4542-8075-18ac9dcf7df9\n602bdc3a-8199-4e86-a040-828264d84e69\n2b5b5f2e-04d7-4e1f-8dc1-89c0cfed931f\neb849639-daa3-476b-9f72-e3faa55a78b4\n04ce50c1-714a-4473-b174-65cea48a85cd\nb8ad5ff9-241f-4595-a5dd-af69fd014fbc\n67f15fe3-bc85-4475-856f-6e809b59e4a5\nf610bae1-a6e2-430a-977e-654ab13b6ca4\ne1abfe1a-db0b-467b-9283-e934b18ff127\nc3063b7b-8510-4195-847a-fdd21b103658\n0e30e3ef-e9d5-46c4-bd3f-47d1b70a6ad1\n65528e7f-fb91-49f9-885f-46f71e4bc628\nedfb18f9-e49d-4bbe-b77f-663fbe8675be\n90f557ae-d91c-4560-8393-c551f263b95b\nf0fba6cc-6bfd-4068-81c0-5943b6b62694\nd81fc9b3-86bb-4bba-a486-77fbcf5d90f9\n4203c482-4b94-4b92-a9de-aab461a6ec47\ne21d558e-765c-4bdb-bd33-41e70357dddd\nb7a3d4cc-cf54-4553-8da6-7d1400034f47\n6c882cb1-9bb9-4976-9bc3-e1f05895cf36\nbc1c3f54-11f6-4396-a6fc-b1427bad557e\nef6538fd-feec-4705-bb9b-e91ce7502867\n6e11c726-5299-4a8b-b4b0-3afdc25a6c49\n0c000412-ebc5-4bda-8128-c4df26553dec\n6b0c5113-aeeb-462d-885b-f5449c1d01c7\n3a07dae3-34d9-46ea-a113-7de4c61de346\nbcf1cdf5-3086-4c8c-b635-2923550ba1b3\n8daee61a-687b-49cd-8d2a-1988e83a921a\n34d29af8-4971-4082-8315-6e6b126523c6\n35fba401-4e4f-4124-b329-b68077e99722\n2f54ffca-8e3d-495e-8e28-8f29a1e5e093\ncc7880f8-c933-419c-9bdd-0a5cee7562d8\n7bcef7ca-43af-4c89-902d-07024658c296\n52f583fe-7111-4499-ad90-91509d9edb80\nd0b85255-0705-46c4-9ce2-b3d3355f256b\n76a07e6a-2f60-4d2d-8670-37b1b5b053c3\n90e4a627-be14-4438-9740-9315e995d0d4\n32500495-3f7d-42f7-9ff4-594dd53c9389\n083b4e0d-02c9-47b4-bafb-ee16d325748e\n798a2a5d-ee1b-46c7-82e1-676ff35f6b6c\n2f681f65-6d5a-43da-b7a6-01010f06bef8\nc18375dc-eeda-4372-a47c-09c8340459da\n0adbf429-88e4-41f0-9b75-49e68af0f0b6\nfc451dd4-29c1-4bec-88c7-a32afe5ddd00\nc06ff3ff-391b-4516-80f3-cd6957054de8\n4ae2311a-6357-4df4-bf9a-ef41812c6538\n4b88b115-cdc6-42ef-8ccc-65548514a4fc\n11babb46-4631-4c46-868e-2e353d2404e8\nb139b4c8-d441-455e-b8c2-11520689b9f6\n60fa8b96-095f-49de-9ec0-39f003109786\ndbcdd023-4cc7-47a6-b976-a591b5db86fe\n32bb0172-a0c5-4921-8d36-3ae81b2d9b51\n822d24fb-3ad0-4c41-b65e-9fe1ce3d5019\na927908c-7ed9-4eff-9f54-8c61c99f4fa4\ncfc7b222-eccc-4433-ab6b-41c124248e6b\n2fa9e98e-917e-4aeb-b57f-0bc5d8368cc6\n42a755a4-8661-4ba4-94c6-0e7603134e39\n8d02a124-d6cc-41e3-99b0-5ec85e0be62c\n759c3c93-42d9-4d4f-ba59-b77d78b79b3f\ne5b2eda2-7b9c-4671-8d0e-d33bd147889f\nda409f6d-419e-4386-94a6-b7c3c2ec5d8f\n374e2f9f-9f76-484b-89d6-7296370ac60e\n249fe4a6-12fc-482d-a941-3e9f4d351178\nc4345064-93df-442f-9181-6bd40ee9fea2\nc384736a-3d0b-464d-8693-dd0b83374231\n41f10930-98d6-4480-811d-8fd0d8c9683a\n9da218f4-7577-4fe8-b2cb-477066055c39\n1b61d202-76e6-4100-8676-c0cedafd7e4c\n16fa0bc1-df53-4b2d-b099-c2103b285c27\n31d3a449-9c0b-4326-bab7-1ad13e32b127\n245d278a-a993-405e-9d84-45706d80c079\nd6c65edd-b03e-4fcb-8bad-2e7ec283d240\n2e70690b-75ad-489c-abda-468a28da456b\n6f80a2c0-191e-41aa-91e4-b30c251bb469\nf84b32b1-5d71-4e56-a9b1-862d41d90c7e\nf52e03ee-1ec2-4590-8a48-4708e1cc2aa3\n719d9a04-a4b5-488f-9ec7-aa1d02fe5945\n4f5d57fc-5b9e-4121-a62b-6554abe2038f\nf288f9bb-24c0-44d8-a2ce-58ef80006168\n14d58f07-9805-4d28-ab9e-4aed0150ba8c\nec9843a9-c228-4435-83dc-05bd40e4cff7\nf9a9309e-9f7e-4336-bc9d-d42b283d465d\neda24dd3-8ec6-4bf4-bd2c-785dc515c6f1\n901f705d-d163-4b8f-a473-9031e08abe15\nedb0d1d4-1794-4e00-9290-5cda445cd7a7\n7a33f2b7-a489-44a8-8534-36605f5b8639\n1f23ff95-b974-4a23-b4fc-7140033b5af4\nc3afb490-990d-4e65-9e90-86bbc38b3b2f\nbd9f31ab-5b56-4292-9fa6-66f32d016625\nfa3fac03-9c58-4ce6-8b35-adaf537553c6\n8ed82412-720b-4038-b4af-17d50ed73ce9\n4d4ecb74-9bb6-4648-8015-c49b55675a7c\n84a94186-c570-4a20-8c6f-cee4e0b1867b\nd677646c-5b92-49df-9dc4-7f778f1bac98\n7a1d7ded-dc45-4787-96b0-61d715fad66b\n788c223b-890a-4aee-9b2c-d6c6731fbb35\n62910df8-0d47-49cf-b18f-4db8ba048395\n25360238-c69c-49b8-8c33-4253d608d0da\na191d197-76ee-49ec-b740-a8af8f70fca7\n4e686fac-2ae1-440e-b090-838ffeeaf293\n84f87a0b-53b6-4fca-a0a3-6fd5f50ce0cb\nc022252c-149d-47cc-884c-c3b19d111db2\n62253923-afcd-42b3-8f67-d67f6cec912f\nf491a44d-6a1a-481a-9064-be52e3605ac9\n06c2a4a0-4cf0-4d81-bf7d-b536176a3b84\nd2f8c9e0-4166-48a4-a13d-fc9d1fb3b039\n0e29b4fc-d531-4938-90ea-5fc4cdee5315\n49eeb41e-b98c-4a39-b87b-b8387ec028d8\nc3203ab6-e1a9-4cb5-a859-0b478cffad8d\n56706116-5795-4301-b7f8-9e6a4246370d\n5758d2d6-ab5d-4e62-baa0-15109facac81\n4b641dc3-dafc-4393-af9b-bde995e03df3\neaf43f87-a70d-409e-a9c9-fbc81fe53d81\n33726c26-3789-4179-ad06-f27e1bf90252\n09bb72d2-d74c-4c69-bfae-e83ff1a89e73\n04a62f46-a9aa-4459-9621-1f9b3e0a682d\n9d8315ae-3d1b-435c-960e-180b864933cf\na58b39d5-b0b5-452b-9735-e081d263a80c\n1f38afc6-6601-45d0-ab24-623f2a0c5923\n963b16fa-0cee-41f1-9b30-773bc10e08d2\nf23ad851-78a7-4018-84a0-f50909248740\nf6114004-b157-48a6-bfe4-43691ec6ba0b\ne22c145c-7ce6-43c2-9aeb-023976376824\n443524d3-f01c-471c-99ce-b9cf6060df20\n04672c4e-0ab9-4a89-931e-4f4edcd8d40d\na571c077-e910-4a06-b7e9-9e385d5ba415\nab40be59-86ba-488e-ad49-07b811efee71\n7f175e67-8895-4a8a-9372-288b0c15a781\n03426d93-c971-4820-8a3f-ad002ab80558\n45ab5e12-16e2-4e6f-8c4d-b4a519bf703c\n57d99fc3-850f-41b6-b473-86a97c43c432\n466e16a0-b8c1-4e77-814e-6c3d36a0bdb8\n371e8016-99f0-492f-9f82-7d7da39ae0eb\n780c07fd-aa8b-4a0a-80e3-2c4ee3ba811b\n0c6afee9-bca3-4979-8fdc-fcb759ef0ce8\n3f9e815d-0dd7-43d4-9102-2288cb4a85d8\ne550b0d8-1acd-42bf-bf44-c5695d32590c\n4b53f666-0ed8-4f49-82da-9fcf251582bc\nb9cb4820-a41b-4f97-9b4c-3e021492f060\n964a496a-f2ff-4f3b-beb2-bc270ff11f4a\n3b2b3f0c-51ad-4a37-b4b9-e6b3ab0a817c\n8650cfd2-0fae-4d82-9778-2c829d93b054\ncaa8913d-4936-434d-9788-f980634b8b86\n8484e493-d89a-4daa-8c52-5efc1bd72d87\n9654b1c6-e965-411d-bf8c-09a3c8f7c554\n40825900-db76-4fca-9794-9b367f314ecc\ne2770e11-c2a3-4c6c-8b3e-f4163847014f\n8f1c7a03-4938-4f0c-800b-d8f6a8223281\nf4d382fd-6535-461b-86a7-97576e7ff4c0\n3b2e83c3-fbc7-4198-b6e7-af5862887ed1\nb3a3dac6-d0fb-4e7a-9b36-fc41948b2998\nac302eff-b31f-423d-9bfd-3603b05a9d53\nb4c9b818-a507-4be6-804b-a0980ac42041\n1fc9f5f2-77c3-4476-ab16-a2cab69146e2\nf5c57149-c1bc-43b0-8c8c-9e0767462f30\n822fc47c-c8ea-4369-8df1-62c0952ec994\n4cb706e1-1e0e-4540-a908-59e4a2968653\nb806b3e1-d8bb-450d-8961-f608a5ae3dd3\n7e87771c-4cc7-43b0-98f1-6ad8336451f7\n09d381da-22fc-43da-af7b-ea7e3836bc74\nbc075f44-facb-4a3b-8826-206b74931b8d\n1a6ae76d-f781-4401-afe5-f4d08bdf711a\n617b4ca5-46e1-4eda-a83f-89e87c41e85e\nbaa06a4b-b80d-42ba-a930-db004b0e2e70\nd1c519c2-6898-43f2-80f6-a4dbe1625db7\ndf1b5985-fdf2-4caf-bb27-0ca30aa9b4fb\n55bba75c-8adb-4c00-b8a5-c07c2d244ceb\n6c53e805-b36e-41ae-9319-ebbf6c93d0df\n2bac5c6e-a660-420d-b0de-6ab35d7882fa\n7eb3db94-d3f7-42ca-be9d-7e8551fbb63c\ncd25fd65-8e22-49fa-ab03-27e813bfc0dc\n2f9999e2-536d-4b44-80f3-a469f4cf2a4d\nc142600d-d6d4-4e78-9084-c998afed1ebf\n50d23618-d11c-4b16-9bd3-d3dfb474619a\ne59d4536-2fdf-48c1-8a07-2070f693f046\n024f9ced-8909-4f11-b497-17d7e2ac4415\nb7e973b2-a14f-44c7-b675-08ac99800f28\n79c564a7-16f8-4741-8523-e8b39ae47398\ncb282ffd-d64c-46d6-8e29-69d258123cd6\n026d9535-fcdc-4816-8cf6-248c1393633d\nf2363a5c-b8d4-47d2-8544-df6ec61b5352\n4d6014f1-96e4-487e-97d7-92aa309166a3\n7f308901-69eb-4f12-839f-653ee8516d6f\na2ea7eb6-df84-4e21-baa9-6c8b4c3197ff\n1246495a-d6ac-4fad-ae19-b4cec67fea64\ne0a2b1f5-6ee6-49bc-be67-ac33d29146b9\n7cf60d94-dd4c-4a63-9696-50439d608768\nb07b8a10-79d2-4bdc-885f-1ae6820f6e7e\nc84bc018-c4e1-4726-880b-eed12f5976de\necc8b225-3162-4957-8e6a-3420bcfc8c4d\n8b403e6f-f415-4090-947b-0b1d1eb43758\nb4090bd6-e7f8-4838-8262-f9f60cf8bdb8\n99157889-775e-40dc-a1f1-780673003ffb\n838af92f-b956-48a9-b74f-838c93c48b18\n1ee400a7-b1eb-4443-9b08-66c084dbc010\n95131d03-e57b-4c07-ac89-533e302a9c91\nfcd5323b-d3f9-437f-b84c-68d5aaac1414\n09fd7cd5-dbc0-4037-9b5b-56fc9f303696\nb1eeee25-82cd-4d2f-a316-f156ecfcc11a\n820f79b2-6f47-484a-a1e7-788afbddf456\n06eb78bc-320d-4307-8353-dc5f3131efb1\n5956c586-401d-4ace-a485-57de0c2d8711\n0cfc5d4e-0a4c-4309-8817-d845c4dfd3df\n10aa69bf-b226-4502-958c-54648058c06a\n9e191383-8331-4cd8-b5d8-7919c82390ef\ncff6f81f-c98a-4711-b944-ed14c4d9d4e2\nfe34426a-0c3e-4e19-88c9-c6ec6a623fb6\n44a63465-0217-42a6-91c5-a79fab35f34c\n57bccaad-116f-4832-93e9-1ac421917740\n2c9118ab-dac0-4139-8fc7-8ca17e2b6cf1\ne8006814-7f25-42f3-a475-c6b19438402c\n3346b357-bd24-4410-9c44-26fe053c94fc\nc4804d9a-cedc-4271-b89e-dc79976c14dc\nb1e91c39-ccae-412e-9c87-3c897f95b79a\n7a78888a-f35f-4ab6-840b-f6ac7403b6b5\na0fbd74f-e238-4f77-a2a5-6c1924998dce\nc66fa7e8-7a75-4972-bfc0-6ea5233d7c24\nf3754d96-0570-49ec-8fac-d66e18bc5fe3\nf3353204-a707-49be-89be-e05e3bdf287b\nce9bf453-fea2-4478-9215-fcc3c893be93\n02c9395f-8c19-4bb6-971f-faad28b99afa\n8fe35f7b-c5be-4988-86a7-bebb7da15700\n607e38cc-c524-4c35-b090-6fc2f67998e4\nc16a57a0-06f7-47a0-b9e2-17801b313f3f\nb29d37db-d1d8-48b7-906f-a57472294d83\n5d76c5c8-c07e-4d44-ba13-85e31e8c56bc\n8ec3be22-a0c8-477c-ac4d-2f17344fffb6\n895566b8-f9df-4b5a-8320-f154c9cd5307\n56aa6c4f-72d7-4058-82a6-ea4df7095cdb\n621c9630-d0f0-40c6-86ea-7806cc37e6d6\na2b8043e-9848-4f61-b252-493e3ad887e6\n875a6370-770e-4ea3-8d7b-7a50310cafa5\nb12656b3-e758-4629-835c-26f18c8ce17d\n127e4ade-b8f7-4695-bb79-dc5c9dc5a82f\n6af98f7c-7b56-418d-bd47-5c6258c2509d\na8df1595-1beb-4911-8515-79fb21489ec9\nc2c2bbe5-1349-436c-855e-3b8f41292248\n78d4479f-c50e-437c-8b56-8a8b1f6107ee\n17addc0a-d8c6-4d2b-a235-e2ce8388df78\n97027d29-98e3-4be2-809c-4ae8977e69d4\n055249f9-50d5-4335-a1da-24798ebf9ae1\nb69560af-dcc8-4165-8902-8aebbef904dc\n1a7b5309-aa19-48da-8b70-cc7885ca7e44\n6b1b4343-368c-4e8c-bd61-27afe0c06623\n0e8c448f-39ae-4e77-b5b3-bfa49c09a144\n64073dbe-2756-4250-8020-e396ebfa0458\ncf26649b-3270-452e-b131-03583ca44e62\nd8e9017e-fd81-49a9-802f-2475b1ccbbae\n63593baf-0ac8-4fe8-9f37-cfad3d960014\n62ff055a-217a-42af-8d2e-2701fa8aae6c\na423680a-e656-4c16-b2f7-d1bb68fe5b03\nb5c4e9dc-8a66-4d3a-9330-44ae928caab1\ne06642a8-0cfc-448c-9207-384fd8021000\n3eef13d7-9f3a-41d4-bc2a-06b3120a14d0\n0debb750-de4b-4aa9-a14a-bd77437583db\n8c5d668b-e340-44d6-8595-a9d75d5f353d\n64fcf047-4c8a-44eb-9f81-a50d7afbae0f\n13912e7e-468c-482b-84d8-a0df5cd3bb48\n4921e9d8-9544-446f-bcf2-7aa1e7c2d7b7\nff393f01-f752-4307-a1a1-2bf4293387eb\n8db6dfed-c786-4cf8-bfee-ca7141fcc269\nb7145f81-6be9-46cf-8c1c-e67a1fc2cac4\n5da7e627-d5dc-4c32-a62b-55fcc71d2962\n9c24ec7b-4eb1-4e93-84fd-af523be51f33\n4b235eb0-a56d-4807-82ab-64d56b5571e6\nbc33e39e-bf2e-4c04-9409-78f2f0384910\n212eb32e-2ab9-4f6c-9f38-62f1bfc067db\n3a78b0b9-e6d4-40c2-aee4-dd1c51b7c770\n61f406f1-03d8-49f3-9a61-b20c1d1180ff\n3c5d9ebd-9a8b-4070-87b0-feba63ce1fc8\nbada2fd2-5cd6-4bd6-be22-c71143a41640\n6f70df58-b2ac-4e0b-ab3c-ddfb72a253b8\ncb5960d7-6b6b-4eed-a077-9f4aa6d4c1ad\n9c9c6732-6178-484c-9ef0-204dadf18443\n18091f9d-7735-497e-9b32-1440c1826784\n1793b3d5-33ce-4435-ab75-55ca50b1b928\nd0dccea1-8148-4f85-8717-64b9a793f558\n1503042d-521f-4b79-81af-7ed5029be352\n5e2da8c3-eec3-4530-8395-b3bb2353b4f8\n3fe8d02d-0145-48e3-989d-38d368f35db8\n1e65a527-f5f0-4a12-83a1-7c72613ec34c\nb76a8642-fdfc-4672-82e6-3cb497293695\nebfad41f-c1f1-4331-95d2-ee6d5c88ca43\nadc46aeb-730d-414e-8998-c47eff4391f8\n4b5e5578-86f3-4937-87ba-33df244ed8a2\nba9cd2ae-c5c7-4154-a608-2b67c0798c5f\na3466854-45f0-465e-85b3-2474fe8b919f\n511fb54e-51f9-4776-853c-8ea18ecafb05\na0c41c15-d169-4c08-a326-effebdd74a1b\n88a10319-3ba0-455a-a59e-2ec2b2f0770f\n0bc49e93-d444-458d-9a15-5ca3d46443f7\n8819e6b1-b994-484d-981c-df2fb17a456d\n3f1cefa6-0605-4cf2-ba59-d2477e596a30\nff4a3218-a291-498a-a612-be10d7d57a3a\n43afccd5-476e-43c2-8353-437dd3074658\n12d6eddf-0cd1-4fd7-9d89-bb4fdb30709a\n3982f382-f213-4c00-b168-484d8532ccf0\n2ba05b5a-5199-40d9-9247-41570c1b81ed\n40649378-c408-4464-8e54-99128150e03d\n25130f75-b8fb-4263-bfb5-e6337e5901f4\n78265cd8-efd3-44be-a698-3fc33637b30b\n36f20ed4-8ae6-42ee-aa32-a43c16b22c71\n138dc2c2-4921-4cb0-a917-6f4e837d4e6e\na6de40bc-872b-466a-abc9-6a6226045d67\n0aba0c67-7374-4288-8fb8-b519cb26bd21\n1daf4e35-848d-4ace-b06d-9d9d07dfabea\n9ce1e738-8419-4b28-9702-53ee3fdfc671\nc0d3ec12-83ce-410f-bb96-a4824845525a\nc6b6f806-b9ed-4042-8423-8483c9d8c3b9\nf361b7e6-fd61-45ec-b4c2-3ac65c4a36a1\n6a3f3295-b451-4515-934f-8415f61f1482\n3c33bf00-4fc2-4063-ac91-6b51f3e8d929\n07b59120-b4ba-4946-8126-6ac1b1620e48\n3366cae7-eb61-48fe-8209-cd45196a78b1\n422d0c80-ff54-4f02-bd1f-6bcf5ff260ab\n17ddf05a-a517-43a6-bb24-85f4eb9ca1c8\ndcb60ac4-e397-444e-b81a-7959c4e0956a\n5906a768-17d2-4335-be45-365cc4182be8\n72d4007f-133d-4710-a2d0-ccc00ad15f75\nef34ab1c-ddf0-458b-8574-d390a32fcd86\n454557c1-57de-4dcf-b721-065a55844ce1\nd0ffbf7a-857a-49f3-914b-e74eb31cc3a1\n65e373f2-8179-4f2b-b5f0-e5a72a0c480d\n4e254e27-2599-4e88-835e-a259b004e40c\n00fe88fd-3f97-4451-a6f4-1acea255d31e\n8f10f256-d812-42da-a797-366861d6b197\nbf123d1e-99b9-4d4c-ba4b-bf5eafa0c424\n727e1dfb-f224-4689-ae83-23f62f1bb2eb\n0b846c2f-dc22-49fc-89e8-110284c68db6\n68c7f215-8ff6-43d3-a6a5-e9e53d625c7e\n2cf28274-209a-419e-b488-10d8a599adc3\ne7cf0d36-2480-4e63-a3bf-f86e41c65861\nf4f1ea48-b321-4443-9891-f55d21940907\n1d8d9bd8-3505-4eee-8f7a-5f337e198fa7\n6c9b5c96-0d3a-4e64-8446-328b69c49cd9\nd63c0482-d511-494f-a07c-51787b81a34d\n94cccabe-7364-45de-af28-35e99c1a9f8c\n7e7573a2-6112-4f24-8225-445877ec3c04\n03ef97f9-bbab-4d3e-9dd4-d9edf3d46040\nf6684009-dd7a-4ec9-9010-0218b972fef3\n07322852-9501-49e0-b0e9-9f1591617471\na86d6d02-2493-40d2-a890-8f024a1037e3\n86c6bfbf-5b83-4cd4-8047-948ff268cd74\n9149c116-9939-4067-99e2-3c9b19805e21\n2c729413-9d97-400e-8f2d-50ac2e9d3fd9\n49914bad-4d99-443e-8e56-52d159506100\n8868aa64-f894-441c-9fc4-2df3af816220\nb4f50f2c-d6cd-46c9-be80-bc267d298f30\nd4459db2-4230-4019-a33f-a5e06c304b48\nf8a7fdb1-1c63-486d-bcde-d47a49ef3d48\n9f1df650-fe42-41df-b0ed-92543980de58\n7bb776f7-ab9e-4bfc-82dc-f1d8a52a1876\n549d7c9e-f696-4c09-8311-6699f7b3e4f6\n2fb33660-cb25-4fc4-8eea-4960832fa17e\n93914c30-de3d-4637-b524-9c71f6613d0a\n2740366b-45bd-4382-8b5a-3eb2ae3676c8\n464a32dc-38c7-4d62-9af2-7c4249a834bc\n26fd3f0c-ea59-4697-858f-46e7b92a9209\na55289c4-c811-46d7-805f-92cea1992fb4\n884e0211-7846-4359-bd95-0c5f9b34d299\n1c18a609-6050-4e0b-b0c7-1602c017b946\n0277affb-008c-4482-ab7d-fb83616e433c\naff1f7eb-0d1e-4280-b8ef-d8dd55478e4f\n55d6fe38-4421-4d55-8a9c-c83e2853f5cf\nd38f5f2c-5adc-45dc-91ef-e26f590bf063\n2a34febe-ab87-42d1-924a-1fad10dca7c1\n6c20058c-c585-44ab-8183-7ba995177945\nc76cdac6-2475-449e-9c46-8c80e85c2798\n1eb5d5a4-c78c-4eb1-9bce-cf18d711e630\n776d3d8a-4486-4c17-8c22-226b3a384bb4\n1ff7d2b0-13a8-4b6b-9663-392395c0c18c\n8ab40caf-644b-489b-9f3b-a1c3f085648f\n08e447f2-7fbf-48b9-a61d-54b2ab87f082\na56c4444-5182-4262-bf5f-eb1d00505aeb\n912b2ba3-962b-424e-9c05-934083d48d83\nd0f81615-8955-42ec-bd19-4fd79fcb7af4\n424c3ccb-299f-4ec1-bb53-ff87135e18e3\n261f620f-2427-4963-b593-a65dfc452886\n9c5970bb-7843-4d35-b0c6-fec3cecb64d4\n84f4ac9b-90f1-4fe8-adfc-0d72539a0863\n2bd1472d-f0e4-418a-a2df-7ef1a7492c45\n3fd970b1-958e-4b60-ba27-683eb3b5c2e8\nd92b4249-7b87-4b82-bb92-c9361cf07eba\n704829ac-154b-4efd-8508-4a3f44947e09\n5aafd967-fdf4-4b1c-a023-75a25f12c63a\nda2d553c-1dad-460a-95d8-2cde22294176\n368fa6ec-0eca-47e0-b739-7e2792be699b\n29ea0ba4-387b-429a-8d4e-2320950e6b19\nc62d728f-d67d-4b15-8b90-449f97c944c7\nf529b078-708c-406f-9089-0080160af236\na9b70e6c-8c86-465b-b98c-1dd6544c0f9e\nf0480fcc-7283-48f7-8674-efcb6d779cc5\nfdbf9a14-76bd-426c-9364-50aafd7adac7\n7d1e3798-53ae-4d22-a743-f82023b5ee61\n71628aab-dc0c-473e-ab01-9563bc469a3e\ne961f6e9-d3e0-4a64-bb67-6774aae96d96\n029e161d-6ff1-4ce0-9cec-307996ed5a85\n958a8432-5864-4c46-9bd6-096cae40a3d1\nd9eaf25a-9821-4294-bed9-547148133b8b\n4c0ac32a-f189-4772-89ab-158bbcb21c2b\n94ce97d0-5acd-485e-ab83-f8f6b4d4afc9\n9b47c91a-ec7f-4427-ba1f-4375d8c73552\n25d803d1-a39f-449f-bc41-c012671d8284\n3fc926af-f324-425c-8faf-8a0e19afdded\n79339f32-0def-48e2-b2cb-2d7b0a10d4ca\n5504383c-80c1-46aa-8ce9-d66a411903f7\n2c6faee9-9633-4a17-948c-2a01f26fe01b\n7124b2af-0b1c-412c-af55-dc847a08ec4e\n28815f58-ceb6-44f2-9d87-b53f4b334df5\nb4a24429-39ed-4ed3-968c-65ba222c3f73\n51a619c6-ba08-4b29-90b8-d31d6990014b\n7a7057f2-6793-4257-adf4-6dbdb6f9bdac\n4a473192-c3e8-4889-b259-713b0975d54b\na68be860-950c-4ab4-8dc8-d056013455bf\n9a154091-4eb4-428b-9daf-0e0bec1fd6a7\nae75cf74-d695-42fd-8582-68303789025b\n986a9a15-b08e-4a69-ac46-a4f1498f9fe5\nbaeaea0e-66b4-43eb-aa80-aaa216055396\n76653c58-1200-4503-b2e5-9ce939567292\n1e12c6df-01e7-41bd-8825-e1a9461a9b4c\ndd24d23e-596a-4b29-858c-dbb28202c45e\n7400a538-9c89-4d8b-b5d9-28843934a109\ne5239734-6762-48d0-9ee0-a93bd195ed84\n3934ee88-36bd-4b54-871f-d657a54b8716\ndddd9ae4-57c3-4a8e-adda-7a5dd3fb9769\n1286a39b-03c0-4fbb-851e-f9d8a3730470\nf1c9eb32-1dfc-4af9-af21-0f22aa8fc64c\n305bf457-efc2-48c3-b057-ffc29ae5383c\nafa44017-9b11-4da0-a7b8-d09ec313e2e6\n55b32054-2e7b-4d90-8c45-ebb2e590d1ff\na2abac95-41d7-4e0d-b161-323b88724d5d\n357fe22d-e917-462f-ac7c-3f7d4887eaf3\n34404956-a24e-4296-9e95-7bba443d6f33\nf3753d1f-6251-4456-9ecb-23f0d0569739\nc242f766-e688-49d8-b643-c7a848cd7d54\na3b12556-00c3-46ff-a907-ce3e3284a37d\n42b6dff8-10e1-465c-be71-2e2f782a1f88\necfc80d0-0a73-4cf3-855f-149f71911240\n6bb72626-8e6a-4e91-99d1-c212ef07dd9c\n1d046eae-1532-44e3-82b7-e66edf2582f3\nd061f30f-36f1-45c7-9a5a-9bc9d6cbeb01\n39c8dab6-0480-4411-b088-c60094cea2b1\n81db3cd2-681f-427c-b362-0841507b4c6f\n2b2e0a69-6adc-4a03-b71c-7280fb0960f8\n41f46e2d-79d8-44a1-9c74-c0640aad80ce\n174b6933-4cb7-4f65-b1e7-027c7bdf21f3\n8688f4b2-6a3b-4cdd-a36a-3a955b972ac9\n4b91edb9-3710-42cf-a0d0-057a75eaf44a\n2322e3e0-64cf-4892-bd9b-edf3253e1ba6\nf943963e-6b4b-4d33-93f9-ef46928c55fe\n74ca7b10-138f-427b-b9b0-86ef6e8efcee\nef3fd224-f376-4dac-a7df-b3a63bac4e22\n8d3f7345-c003-4285-a29c-92dd5dc29eea\na0031449-e976-4b2a-a025-79e3dd8a0182\nb8b2e6de-c2a3-4f15-85d8-f834fe6da518\n28778165-2eec-439f-b35f-e738bb154d6d\naa07b39a-00fe-4bee-a225-bdf30c23e461\n80c02633-3b57-4082-8062-8fccaac5fa93\n093f967d-e232-46c9-8721-9fb2b4ca8573\ne5467335-efef-4162-b747-322d0657939c\n4ee6f53e-ea80-4524-ae8a-ea621220833a\ndcc83912-037f-4cc8-8f8c-3145cf3cac1d\n706d95dd-03fe-4060-9924-03057abab1a0\nc2fffc03-5eb7-4a6a-a47b-0dac7f82f139\n22231695-d0dc-4d02-9257-18a876282ea1\n996cc8e1-c5d6-482a-af93-7b1b72f7d080\ndcb7665b-8dcc-4211-a3c3-0096b6c3621b\na863ff72-57a7-4f78-8d42-d51c18a6dcf5\n54c52a83-e5c7-4c13-9bcf-f7999b7e3f70\n9d6fcc9f-2cf7-487c-b36d-3d417da4f1e7\n215a0f5b-3e60-4ba1-b5c4-df07b9b47672\ndaa0f352-2d65-404a-b590-f2c79aecfac8\nca64d1ec-6d41-46d8-9c71-7acf96ee1f57\nc787f1ea-5976-449b-93db-8543891a24d7\n5217ca2a-e18b-4711-9d91-faf80f8eea1a\n0809e42d-515b-4f23-8de5-2ea5e7863936\nbc6004b4-b644-438c-8596-6804308df2b1\n821dc53b-3e55-4756-a82c-52cf6c353cf9\ned281be1-2b96-4066-ba61-f56793cef684\n38bc9098-fd7f-431c-9715-3deb2bc200d1\ne57c4416-a81e-4025-a489-a522cc5303a4\na7c9851f-930a-4764-8a3c-89abd642e9de\neb07e71f-5e68-463f-a1cf-cda9f544fcc7\n0532ee99-c22a-4676-a957-f6abc1bb284d\n6e930c35-9362-41aa-bd25-d997825e6426\na7a4cd88-afe8-4dd2-888c-4a2c61e6a803\n5298ab8c-5190-4b7d-9b6a-93f0d726da86\nb3cd2263-b36c-4068-b934-5abdcfd63595\n6d0457b8-c4cc-4dbe-aeb4-cb50c9e9c81e\nc8f82839-7a8c-4589-a642-1ca8f0706ade\n72518507-f51f-44b3-bbdf-8aeaefaab71b\n98d26347-93de-4afe-bd6b-ec08ae1de68d\n89dd6365-aedf-442c-9ea7-c1204733bfaf\n22c3b222-7f27-424e-8beb-4bfa88088d1f\n85cde558-a2d6-4e01-80b5-4338916ff140\n717aee1e-a2c4-478b-8005-189fbc24027b\n965c3447-384b-4352-9e51-de00a10e8f1b\n1ea2bf12-7b5a-4732-ac6e-db18a585d0e9\n4e5b5104-a43f-4720-b3c1-15562211c13e\nbe644764-817f-4229-91e1-3edff906f6c3\n53bad6da-9975-4ec8-b9b7-b3d55430f579\n1f2650d2-1025-43cf-a797-b568471398fb\naf9ace19-a135-41f4-820f-ab7b2553dc05\nbb6daccd-9236-4458-b5bd-f9200fb8e852\n5851b3da-c865-4e2b-9c2a-dad5490d0067\n5e7a916d-db04-47e4-9a3c-36b2a435feb6\n148e55a4-467a-4a36-a1b1-330fbb9818d1\n2fe85f1f-a7a0-4186-b100-9a3b7ab1aea9\na46ba57e-b110-4e96-9ae8-cc83323cbcbf\n427d07f7-409e-436e-9ec9-4fc372655d31\n7c423e7d-cdd0-4d4b-a06b-3cffb1ea7a15\n1fb2da9d-9128-4ff3-a6de-3ccd09d949ca\n3868bb4b-ba00-44a4-afc5-3b71499a96e4\n290f4e70-2d1f-4efe-9a1b-e8139a32443d\n25a92e46-47e8-47d0-b835-cedcaee04137\n9c4ebdb1-24bd-45ed-ac32-c18cfccd5a90\n842c1f5c-e7c7-4215-8a25-85ad4186402e\n5dd689c9-aa7a-400f-872c-3a220fc7e73d\nb7e04bcd-b6b6-4794-a1a4-9897c80b6b27\nb91afbba-b9cc-4078-b6e7-c224321efeda\n1d641394-8cb5-4174-8431-1b8223d50984\nc7669f55-658d-4cdd-9af5-17c9dfd7597e\nc6d1e0cd-a1ce-4a46-bd2a-9de9c84c3698\n82f4ecf3-60bd-477f-8406-01a84e1092ef\n272e7dc6-0746-4c3c-b758-ede7cd5e325c\n3a91d178-1bc0-424a-abb8-3b029091b0ad\n9d06c0b1-9a27-457b-a3d0-d80fb19ed5f2\nd27cc1c5-263e-407e-ae85-880956aff1ee\n28b24ebd-1995-49be-8a23-2244cb000384\n4bf88352-c98f-455e-bc88-71b2ca09a6de\n6d6d3828-4879-4716-af3c-2f0218f284b1\n3e062883-d4b3-45fc-832c-3c69d87f29d7\n420351d3-cb4b-426a-9ab8-340819bd7e96\n47d49017-733f-49fb-acca-15654df884c3\n0ad7eccb-510f-4e26-a71d-2e61684d8cc5\n82c4f917-5f98-4eb7-85b3-4ca5931abd07\nd027a2de-076e-4854-a282-6418cac64328\n26695c51-fa61-48bd-a33c-2e754533bacf\n5a0c9c27-d775-4aec-a325-163ee921a770\n3354eb66-4c59-43f4-8e1c-5378e79e38ef\n2716356e-d4b8-4781-8927-c9665c591f51\neb0a09e6-b62f-4215-a30d-061ad598144f\nd481bb90-1896-4e9e-aa62-b34a863f3a50\n7779f969-b069-45bf-b628-4aacdbb7ba5e\n9a83537d-258c-45e4-abaa-a3a4e741ab29\n8c7f5787-0d99-4afa-82c2-94fdc09f26a6\ncb28fa3f-e263-483f-a472-01fa416b402f\n58251b87-eb8b-495d-ac35-83802101aebc\nbe241b74-63fe-453c-bb81-b33375c9a9d1\ne3eede2b-16f2-4b5a-897f-abdcfdd3793e\na25e3f20-7785-4495-a56a-b8b5288d3e85\naa2d9c89-2c2b-4a40-8cb4-920c54afc247\n8ba9064a-c77a-48d0-baa5-9079a25493ff\n7ce0ab2c-a217-4847-a451-8ef1a59108c1\n5ac7b70a-c786-41c0-95b9-1d81dbea1b6c\n15abf199-cdae-4d0e-8933-5d7a7e3974c4\naefcd904-cb25-4598-ad20-ae496f8b51c9\n57f43cfc-a9f5-4feb-9834-c511672f30a0\nf243cbdf-30dc-4381-8959-d372d4cea973\n17fca837-e5b2-48b0-9105-74006a7e7ad8\ne9ce2246-1bde-4c4d-aa8e-49e0bab5d3fb\n9fbe8898-4464-4940-9aaa-c440aa5532a3\n8e643c88-4971-4977-8571-e6498028e934\neb551930-04bf-4ed1-be0f-62ea04505129\n7a7aa462-4a72-491f-946e-8f3ee47d744d\n00ff6017-576d-4398-bc5c-214981fdb728\n54288115-0b59-4a3f-b8be-78a8dc09d245\n8833b528-4334-4eeb-8b12-76e9cfe1b80c\n93546b3a-1aec-4a76-923d-1686151e1760\n31a92315-740f-49cd-bd41-cbe0ac81d779\n682618d0-423b-414a-ad74-60e33f53ddd6\nf7f0fea0-67f3-4378-97a7-a8198ae7b11e\na9b19e5f-20e2-4c06-af26-a48a547a851b\n172c8061-2834-4b4d-beef-abe1233a4cce\n16ce0f65-669d-4b7f-9e4d-7da9b3188a5a\n7097962d-cff4-4b04-91e2-01d7a0ec62fc\n8472283f-0fb0-4b09-95d2-7037f6ed0da4\ncaf7b2c6-843a-45c7-afb0-1a1c0c80810f\n1250979a-7cb7-4e2c-8c57-3a1c6df87566\na7a8ee9f-99a8-4e31-b7db-8294bdc0dfdb\n695ec011-fca1-415d-a0d3-8e9fb2a0f8ee\n458c0df3-7f4a-429a-ad2e-00cd69a982fb\n62daaca3-2744-43ac-9019-05e02e8ca17e\n6b49c431-10bd-4a5e-88d3-b8931a58bac2\n119fe091-2f4c-459e-a221-ef5887397910\nc53e38a5-c6ad-4f79-8ba1-bce5259e639d\nbaddf407-3e98-4148-9e95-ee728d4cc164\nad778481-7b78-4dd2-bc20-25d13e48f0a1\nf9e4244e-1c72-473b-8359-69c45a726994\n7591291e-3777-43d1-be10-8e7deaafa005\n870adfd1-55b7-4a62-9fbe-866970148698\nabcd980c-f55e-46eb-a7e6-9de89ad660e1\n6082fde1-fe83-4a63-9592-832ce3dabd7d\n09f9f209-2957-4645-ac7a-bb0ab87024c3\n7b2da1f2-19cc-4c7c-b3e2-cd50c3e80dd6\n6321892a-f51f-4803-a41d-0fef706056f0\n439b2b51-0df7-463d-90ef-674f17ca7306\n61c1d947-6823-451e-960d-db4a85f721ce\n7e05f286-9ba1-484d-99a0-d596dce194a1\ndd39c5df-2394-4821-8d8c-141aaf518927\n4351786a-8bed-4973-bed5-f361926d2651\nd4db2741-2953-4bad-bdec-b5db31a30a2c\n509e583e-9a1d-40e3-98da-3787004c647a\nd7313ed8-e42c-4f80-8ea2-7d321e0ec566\nfe84e608-f3c8-4281-bcd8-2a9e37afe220\n79da6e01-a89c-4292-b57b-d1971ae26db3\naff86db0-8a01-494a-8a8e-4619718f307c\nf69a89d0-8e31-45a4-a643-67db5a3969c0\n777dd99a-5335-4dc1-a3b7-2f6943d67255\n2130b533-de2c-45a3-bff4-eda342b3d252\n4f4baf72-735d-488f-aab1-ae27d21e2099\ncc542d6a-f310-43f3-990c-efb9614659fe\n0c50bf29-c17d-4b8d-9a35-6ebe77e30943\nfb85c189-41e0-4a74-9924-9d905c2d2213\ndfd61c2e-f122-4e69-bb89-dd27960fb891\nd83046ed-f045-4c79-aad9-0b58abedfdc6\nccc16959-7580-4877-bff2-bc169d0db85f\n494fe60d-be6c-4c9f-993a-58e73144947d\na107acda-1e63-4ed2-b2cb-0f7809aaa2b9\n9af12087-0edf-461c-9d9d-0197d8459d45\neafb94db-cb6e-46aa-8e2c-b2bfd18dff7b\nd2d2a365-e67e-40d3-bcc7-0a5de1a9dffd\n11a1a518-6954-4028-8e2d-a84137b729ab\n071dc2a6-314e-439a-8a01-0e43c4a0de77\n0d5538c9-4e7b-4267-a9fc-d61521bef8c7\n9f393997-e26f-4934-9371-3fa8ada890f4\nd48d2d72-c311-476c-bb9f-7e125cccb8fd\nf9acb8f0-e089-46f0-b0c3-8bb231961902\n85c46d3b-2d26-4f64-8e48-59c808035d91\n125ba813-31ec-4411-8edc-a8df77d0df94\nbff305cd-6edc-4eed-ad1c-73d2d153e452\n3b0be01e-343c-48ee-bf8e-3d17504f86c9\n8d9d196e-005d-448d-af8f-50573fabb9cf\n046d9fc2-0df8-45ca-84af-de9c425b96c3\n186f6d70-51f4-4ffb-b06e-3aa561976305\n2b307448-42a0-4a79-8e2b-9805902ff7a1\n856cbb48-f9dc-47c5-af21-53c27b3baf48\n0fdb996a-0b7b-4abb-b68e-566e0825709c\n93dd0c89-b98c-47e9-9397-c7efe225712d\n56e1fac7-6150-415f-8348-a5c31a9ca360\n33847e47-710c-4650-b3dd-60e92f6fe0cd\nc9c618e9-ec40-4029-8baa-fa394b74f40b\n71849faf-26f8-46c1-8bcd-d46541931bf6\n7616209a-d541-4037-9d5f-fd1a2ecf52da\n26f93e78-160b-40c2-905d-457321cdf0b9\na4d446ef-24f0-47bf-bb32-6f8afbffe13f\nd3551ae0-639b-4793-94ca-4b05a144b918\n80a0b1d1-0938-45e6-a659-234775c064f9\n940a5e3e-63ed-402f-aee3-f34b8d78a596\n6e633991-d2cc-44ad-8f1d-75aff53220d4\n0573dc1d-9d28-4c2c-a4f7-c74bcd6a9e97\nd1478a32-608c-4a1b-b5a9-72b0c68fd979\n6fb79ae8-99cc-4fe3-a3e8-d5a9e8eda068\neacf7253-59e7-4876-b3a8-e90fd8ed926a\n40cde969-ca88-437e-b7c0-d544eb9a6b21\nc296638e-822a-4148-b65b-dbdf3964c377\ne5b7474a-9570-4318-83ae-2a157938b7dd\n9d4c668b-2ac1-4e2e-b9f4-71dbb39d11dc\n53b480f5-b74d-468b-891e-44e598ccafa2\nf1cb8e02-0d4e-4e3d-861b-416884bb4a7f\n7bfe83c3-8ae8-4002-9885-6bb34c9a7fda\n75417062-a039-4dc0-9ea0-9a656daa9ead\nd0f335d0-157d-4d3a-ab0f-cfcaab989b3e\n3d442d4b-a3c5-4003-b59c-019d8b92ade3\na69974d4-ddc3-4879-824f-82c70973dad7\n0103b1b8-6da2-4960-aec3-6ddf66e18447\n88fe6064-6c19-4798-a609-29217e42885d\nec55c84a-1385-4b1b-9ed2-814c868fa6ba\ned7265d6-f1c1-4b60-827f-4e89e2add386\n8744089f-e231-4187-9e28-849233ef2e01\n57607422-dadd-4c34-9e57-84cbd4da5cee\n536ec430-c07a-48d7-8cf4-ee28914799cf\n76f30864-68fd-4c37-9fdc-0ca22d627111\na84d5f5f-85cb-4cb8-9d12-d83f76fb7ffc\nd23e413c-52b0-413e-9f2c-3f62e61a84b7\n8d06c8b0-cdf2-4d5a-af23-06c4fc5d883f\nb1fb35b8-2418-49d6-b370-dd1fa45609eb\nbd749853-3e40-4ff1-8dbe-6c408ee69dcd\n169f7c8b-f034-4ebc-945f-a6c8d566c06e\ne6546d9a-cf5e-4c47-a919-b12495a7eaad\n541e30e2-bd80-4642-9633-e7384e11b43b\ndcb1b30d-c823-4fac-9f7d-2e1558442a77\n51c51a8c-e88c-48d6-bcf8-d136e0575cb0\n8b56e666-2a3d-461d-a2a4-cba752580426\nf367e656-52ad-48ce-bea6-7cbeeef1e089\n1673eae1-0e50-4de6-85fd-8f45ff930fa7\n3dc803cc-63a6-43c1-8e24-c9e02f4b5a7b\n869d98b7-fab4-45c6-966d-171e1363c2c4\n1f01141e-734d-4fa9-a3e0-f8a2cea9a03e\n4fcf0e2d-ee90-4b05-865e-98a9fcd007aa\n61edbb7e-dfe5-463b-bb59-36a2dd1db8b8\ncd637820-025b-48dc-91f2-738a48bfa644\n9c022e8c-5dd0-4d4e-bf80-2c52313a14c4\n3df26fa7-3e5a-4a7d-9818-dcb214ac404a\n073b6cb3-4132-4bb1-8f51-ba1267357ba6\n293cdd91-f8f1-47c1-bbd9-2090c86263c2\nbac0ef61-02e0-4935-a59d-02bf3b064f4c\nd82eae1b-5d41-44b2-a0c7-e6e365fa9158\n64101557-a373-4ef8-84fd-5efb9c79836e\n8ed00ce0-f396-40c9-8b52-c480e0b6c2d2\n155d5433-0c9d-429a-8e30-fd9894328156\n51275eaf-cb76-49aa-afa8-ced291032666\nd0d7f972-bc12-4bb3-9861-aef01beebb4b\n457263a3-46bb-440c-8ebe-a1eb53363e7d\n3971e0e4-afa6-40f8-b49e-2bd6653c3df7\n64cc2ffb-1c46-44a6-b3e1-bfc043f22268\n23ea3dee-667a-45a1-b143-7f7102f6be6e\nf74de5e9-128c-425d-9539-1f3e2700defb\nae51d560-0ab0-4bac-a0c9-cac2bd55b2cf\n9a2c8543-2744-4832-937a-08dec2752e71\nb6320477-abc4-4719-9d4b-230b7374deb3\n221fdc1f-9ea6-42d4-a484-4a7608798b1e\na31eedc1-acf0-4313-bc2d-7c4bc68d3a93\n8edd8863-e45a-4a0b-a65e-21d17e3e9d48\n4fa44364-ebed-42da-88d5-e39e73fa0ec3\n9060316c-cc16-4911-9e21-c0341e8cae21\n95adae6a-fd11-4f7b-8f3f-40ce7932e9a9\n4132ee7e-fcf6-4f2c-a1f5-ed0a11e1fc20\n6f40de1e-994a-4b17-86ff-9404cd480f75\nf57c0011-30b3-4cbc-aea2-3375aebec281\n123b257c-c0e0-4577-8f88-12711548d1de\n5e0e036b-6eae-4e7d-a100-7dad58d63984\n89006157-4729-418f-b37c-be61bdde1488\ne044828b-39ed-4064-a03f-b71e61ebb2a2\nc24d6a61-df98-4ac7-8537-074b20b6800e\nb7e1205e-3a66-42b5-9774-6cdef5db3f62\n1d34a19e-bd40-4dbe-9d69-c8d2f564a144\n130544e5-c794-42cd-8402-c041f3481558\n5801931c-f891-448e-9919-28ae091ad6ea\n6cfde965-648e-4085-96e1-62c6e030e688\na1f34c14-7a6a-4604-abe1-9b7c2b5a21b5\n35f21151-27c1-4b7b-a1b4-93ac18cc40a4\n18dd0562-605d-4554-ad31-db07adde75ce\n8a9a76aa-3cdd-4f80-a1e1-0ef3d9c3bbcb\n392daf75-cdc6-4822-8911-f4e48abcc980\n0206d11f-4476-48ff-a5a3-623697fb09e3\nb212927b-d8b6-4918-847a-42a0e681c825\n7f21b260-154a-4864-97f3-506b41992dbb\n26d1d2ce-b997-47b7-8db2-e9bd6ec88c71\nee7b360e-045c-4d34-8f5d-4c8161209f59\nc02a79ff-7ce7-455c-8389-9af8bfb31eb0\n275a74b9-687e-4ff8-ac8c-37155d0aadd9\n9b3e8620-5973-4ffe-a7d8-2ea08e6fd4d2\n890e21d7-745d-4ee6-88b1-96ce78495c5a\n88704c59-894b-4b6d-bf22-b6c5e2f3d16d\n02f91cc0-2786-4b09-ac30-b4aab0ea0459\n5237894e-0202-4c4e-9fa8-2038ed4fbc91\ne51d5b19-39f1-4593-88ef-7839e657143a\nf5ead3dc-b971-49f2-8cbf-406e0d8e0220\n0d377395-eaff-4e62-8fdc-aa6fb571c609\n1e6e491d-3f4a-4853-913f-07ea0afd88d5\nff1a989e-32bc-4c69-9c0a-0c2eebecf86f\na00b7f23-a0d1-41e5-afa9-53943349e4b1\n40eb9c34-994f-4bb6-ad8c-48c93cd3b2e7\n55d837a5-a354-493c-98bf-3adf3b238239\n0f78de53-401f-44cb-b427-e611eefc2561\n7e18517d-4c64-4f87-8665-ea157eec053b\n27edcc7f-88e1-4d67-a686-909ae204881e\n186cdc77-b299-4a1f-9861-ebb292679b50\n939a7a52-3f3d-4b4c-81b0-948e6566fd62\n80e87e83-496e-4df7-83f3-e89aec26fee2\n6f3c9b32-c673-46c9-9f41-15a47ddc90d3\n06c7cf41-6d57-41d5-a5cb-b91d533c4c87\n129522bd-f70d-467e-afbe-72b5b4637cd4\n2ddf3e5a-ee20-40e7-afe0-1400c67dccf8\nb8414d35-3385-42c0-a3ec-3582341f32f2\nb1ee4857-1482-4396-9974-1ecfe7987181\nf86d3ad8-7686-4588-92ad-3590d6432b0a\n6019238f-d45c-4e86-9f72-6f4e216eed28\n280ed56f-4409-44b4-a336-9298c31f4937\n637c959d-99e8-4b51-8ed9-5dfaf0b3db86\nf02cf38f-1924-43d3-82cc-6c12ee6d638d\n71aa349f-13e7-488b-9084-74b1d95d34a1\nde2d7ea1-05e9-49ff-9bcf-cb2b3f671928\n3611433f-90b3-44a0-9a68-c0e1401f562f\n2dc2cea5-ca0b-49ad-b996-98a59b8859a0\n4cc7112e-2c50-4171-89d2-6b2ad9f82e31\n79fb6224-3bf1-464c-a637-68d396959c6e\n764721ab-d9e0-43e6-84e9-7eb1d8dd8ba1\n3aa65eb8-2edb-41dd-b017-a7a7ecd01f7f\n9c8668c2-bbe3-461d-978f-846d62de47a8\n6c329d9f-74fd-4b07-bb3c-6a1788846ba5\n2759faa7-4f98-492d-9290-cdb2bfe0bc88\n9cbff607-483b-4ab2-a9ed-159b728b80d6\n83fcc426-924a-44f9-b2b2-e2612c27d899\ne9d84101-6c60-4b3c-8002-1034881ff07e\n5452af1a-0e46-4d4b-8f81-cb351582b729\nc1fb1280-86c4-48cb-b1c8-b77e48882187\ne735de1a-8407-4930-bc40-2616fd383f46\n769f6b36-ef03-49a6-826f-04b4995a7a0e\n30a8043e-0c5c-4c3b-8f43-2fab5cbc159c\nd61f0915-4cbb-4549-9efd-6017893b43af\ned120505-5aaf-4d89-a742-331bc2187d20\ne5cccd2a-e123-411a-837d-86da8253b6f4\n5cf31355-5afe-4e76-8063-1d80a8915b70\n0b93e109-b781-420b-b65c-e194f9cd75f2\n05f07c68-5aec-4b75-b352-381e2b8850ae\n21f5b8a3-603e-43ff-adea-a6273ac62ecd\nc2fdc08a-998d-4e23-9239-4c40601a86c2\nc319f04d-b803-4d34-bf82-06fe190637f5\n7faf529f-27d4-485c-b60a-0738a4aa63cf\n2d7fe226-4db9-40aa-a3a9-ee855d6eddfd\n8163d0e8-9fb8-4fa6-9df1-ba1cba3418b3\n38820671-c644-416e-ae61-f5ed6ee7e1d2\nde393a6a-4b04-45eb-90b1-8379db23d92d\nf7fbe1f5-27f4-46e0-87c9-1e13c9e4deee\n86d1e2cb-7aa2-4e77-a8fd-46834a8cb114\n65cb5b33-9097-4f36-9a9d-c9991c88cde8\n91600f8c-822a-4a7e-9df8-476601e1e648\n099ba1ed-b4ca-4701-b8cc-b618a7ef0219\n3774040d-4593-4761-aa47-404380e5ff27\n9a30a5ee-41de-4b28-8400-4b3f9f6c9b57\ndaeda5e8-6889-4312-a241-be1e3c21d2ee\n98de2a0b-29c7-4bed-9f6a-0fba72f29a50\n6818ba89-a1c7-411c-b840-219ed3fb5bd0\n38d7b32b-b3a6-4b16-85ac-54b022aaf05f\n65b92ab2-ae24-4125-af56-8f83ea02f92a\n2749d9d9-d925-4d80-a786-83a55ae019ba\nb876e2f5-2e7b-4675-bbd8-3762cd617651\n692b8f27-518e-4ad9-b8b9-ea28b2452729\n8444dd93-5ec4-4a90-9914-1cf4123116d4\n71d6189f-d813-4987-94f3-86db8e32b958\n4345a7bd-2c3c-46b6-bdbd-da025746510d\nf0bb1c20-60e4-4394-86bb-7dd90d861d28\nee9d5591-ec9c-4839-abf0-48a2b74aca3e\nd66b625e-b2c5-4a82-8a14-654acb37bf82\nd5be6294-0953-4a73-a00e-4b0d7f29dbd3\nd04c98cf-d157-46f5-8237-d4747411f412\n06abd524-55ae-4b2c-b862-7aa736edb1c9\n5c9e51d9-093a-4814-9711-d08a3b295af4\n724ba5ee-c4fa-40ed-b414-634aaeabd8fd\ncfb1fd46-ba0f-4861-8efb-61638d175218\n7126fe85-64cd-492f-874b-1e996c212019\n0b90506e-6c86-4126-9f97-2f2bdb72ec9b\n87041400-e6f1-4dfa-bc81-86c200c2cbe3\n68ccbf97-77f6-412a-83d1-50532c892c1e\nfd44c293-6800-4ffc-b192-7657f5827d8c\ne2e76e90-ecee-4411-bba9-8388c95d2278\nd97450bb-5090-4e1b-a056-4c22d0dfa7d8\n02baa9d8-c5c5-4c80-a0c0-1d7fd6621892\nd7cccad1-3d2d-4318-a475-d11ac31b92ae\n7c80ffb5-eaa5-45ff-ac14-4971348e63f9\n5c1f704a-4553-43c9-8b48-01b8e70d13ab\ne4053192-d9a2-4fff-bf00-336108c277d0\n03332b67-31fa-4a86-97ee-547650b75365\n0130e43f-9dbc-4d3c-83aa-42c306793e16\nf15051d8-c367-4731-811d-0dd9730c0028\nba1e01d8-e315-4339-b3a5-48e826777d0b\n1fc6183f-287c-4e35-87ba-fcf98fe28756\nf48eeced-ff4c-4004-8aa6-7d6b346b11ad\n767ba794-2c60-4faa-9415-652d8b9f7842\n415c4801-3f1d-4181-9903-25e0f696f8a1\nee192e0c-c331-4692-b0c6-e832c669d106\ne9362cc2-ed08-4405-a195-afc913c7e58e\n14a4b5e8-5963-4d88-b3ed-995d87e7ca5d\n75a71ba9-e8c8-4ce1-8045-07ee9d875e34\nba8209db-bbf0-4a36-8462-1fbc6aa36d97\n970f105f-fa0d-47db-bcd2-1f45769a9732\nea151e2f-69a7-4153-949c-4d8ccefe57d7\n77d36f7f-71be-4318-b021-e563351981c5\n7fd1c00c-2402-4a52-a50b-147420741c3d\n559b977d-10e6-425f-804b-f45c7be2c889\nf750ac7a-4e05-4a79-bbc9-bccd909a3aac\nb7133eca-959c-4eef-bba6-f7491bd6ec59\n0e2e2e24-7856-43dc-b274-89bc2314de9a\n956542fa-966b-47c6-ba19-4096a56ad4f2\n46b88ada-1f62-4586-a04b-6509dfe4dbdc\n41bb09fd-c708-4de6-bcf9-43f2bba9c25e\n23f4a0c7-3b8a-4b5a-88fa-6b1044a54249\n72f94aef-b8f9-4f5c-a036-c54623785e60\n656dfe23-8b49-4449-b738-98a97ef59d11\n607659a7-125c-468a-a6ab-3672825fab16\n3c0b5648-bd06-4576-8dd8-87cfdfd5c8a2\n8fc85e3b-cd67-458c-b1d0-d76410bc1df8\n97228bc0-6607-4bb4-af2c-86248438543b\n332b4e27-0eaf-4898-aa7a-1fead17df180\nbd86ebf0-e597-4309-b7d1-92917e80b2d4\n9bf99c4e-bfbb-47e8-8a92-6e515ff9f4da\n2b83c5ed-d8ae-48be-9f48-eee74767d2ee\nf79a30bf-b39e-43e5-b9af-6aa9983ca9c6\nb9dc4667-0f21-4ecf-bedf-1aae44793491\n02c2bc7c-c68e-4f82-9570-7f731541d882\n541ab33d-5378-49f1-85fb-8d70fc1bc12b\n6403e6e9-1e5b-4fc7-b100-0b8a02f51307\n83a78c43-9be7-4abc-81aa-488dfd3ce921\n976e85d5-627d-4bd2-a114-3510c0b967fd\nbe9a4d35-f14c-4505-a005-7e3ca2f6e5a0\n4cd0a7ef-e2b7-421f-92fa-c1d50db589fe\nd1b284a9-a785-4966-8e23-e48a5e6e5982\n079d964e-8e48-40c9-bf30-87a3f3416e2c\n07ab92b3-eebd-4ae0-8f42-0f60b73cb08f\n31f99ddb-3140-4980-a173-236f2cd37e72\n9811680a-e859-4d40-bc02-316c34e7acc9\n402bd170-58e8-4f38-8358-330eb69de0e5\n2868dd85-a347-499e-8339-f22e8e0841ab\n35721704-a87a-4d7c-8520-5fac62576228\ncda58262-bd2a-4f7b-b93c-a8bf9062fccb\neccc5c6e-e2fb-4c9a-b772-14715ac1fc15\ncff3fdda-7145-431e-9857-c22ca9f3976b\nf31346f1-bb7a-40a1-a608-b50fa8d712e0\n6b235fe7-fbfc-4c50-b9ee-e40904ea067e\n7b2346c6-0efd-4f16-a445-5b6a81643643\na5ba13d6-e52e-4b07-9cdd-71e7a74d6161\nb1df2ac1-6e40-4dda-90db-95cd78e9958a\nc5fc89ab-bbc4-4199-a9bf-fb9f5a3c8103\nfa1dd9dd-41de-44b6-8ee3-909c1257689b\n574af46d-c600-429c-bc03-c9859cda95d4\nc9c84105-9334-4416-a596-8112fea79b8f\n3cbaf64c-c26e-4396-80a1-177a98511fe0\n787e17b1-8fa9-42e4-bf75-ea586ef425d4\n796e6714-1b9f-4ac4-9784-a5a1fe13bc6f\n64f7dc89-7ba9-4e75-a0ba-bdc5e16ff58f\n83e33cb3-91ba-4298-aa65-498aa6a408d1\ncdedff08-bce4-46f7-bb2a-2b60fd46b79e\n18a077e7-b480-4158-90fd-45ac3d1bf01a\n51168eab-6cb5-4cbf-b38b-ae88db3b7e2c\n248bdc39-cc11-48e8-80de-fac955a48e5e\na97377ac-a342-488e-bd3b-30c4897b2d36\n202998b2-5f8b-45e7-a571-cbf6b90c20b9\n00344144-84dd-411d-8f3e-e6088996b18a\nf900cd85-de98-4187-948f-bd1ed81c7a01\nc7a14c11-47f1-4c06-9a6e-5de7e3ae4805\n8d805c08-a8ed-47cb-8a95-262ef58d93bd\n79880e3d-f41a-4e6c-9c56-37504f0e4299\n41ff1791-d675-4cd7-80d9-199a42926506\nccc8a853-1b54-41ad-962d-05a5fcf62a83\na69fcfea-487b-4b75-bf02-9bd3ea09a60d\n5345b47e-eca1-4a27-8187-8df7bfe3775e\n814a18e5-5954-46e9-938f-567a2ff4fbfe\n4f802281-3692-4671-bff1-118fc3bc84c5\nf1082bde-60cd-44f5-b7ed-bc80c8ceb49f\nacfa42ad-dc06-46cb-a689-f8ee024ec1e6\ncbb11c75-6942-4842-a836-930d229435f5\ndb413455-12f6-4abf-b8ea-7a9f08ae1d5c\n1791198d-f290-451f-9b64-a33fde15c1cb\ne9c55193-61a6-439c-a7cf-05448a1466e9\n96b81194-2c2f-4292-9547-fe590e1b8132\nce268fbe-ad50-41a8-9171-28d7c7d64271\nc888ac10-6f9a-4cee-abc9-a62237931354\nd23f756e-7b5b-4472-8122-d0cc332c9a7f\nd944edf4-bfee-4dc4-8ecd-a65b65252f5d\nb9a385c4-872c-4459-8bdd-325da1fce007\ne3802673-2b78-42e4-97d3-e2e681efc6dd\nb1487d50-9165-4b6d-ac0e-4d1588083b53\nfce1c28f-f3fd-4470-83ee-9d492ca6ba71\n5866662c-ff4e-4154-98f8-6af40e1f536e\nac664baf-ebd6-4063-bbf0-78e9abd0c5d9\n74f4a19b-4abd-445f-a0bc-423390180e03\ne19f68a5-e2ce-44d2-98c1-7a0d3cc12a37\n31223c68-234c-467d-9d53-4377b1b2ffec\nd6af7363-1706-41ce-ad31-5222c5829877\n3b24c7c8-e711-4d35-b2e7-e94a691813da\nfeaedc73-818b-4d76-ab47-3e5926452e3d\n3e43fa93-49d7-4df2-ac9c-bdf971d64285\ne11a0037-6a6f-42e0-85a8-f33170f0d5ac\n272d3943-292e-4996-9f46-adfad591b777\n7766f020-d976-4a03-b6b3-be76d38c67e4\n2fe83a9f-1be7-491e-be77-4c57aad5295d\nb19116e1-85bf-4e6a-83d1-df61c1e17aa1\n90f37399-da4b-4e77-a7dc-80b6f148fb20\nb3b3bfda-e295-468c-85a9-180301a49d10\nb2007411-fb89-4ba3-afe4-fe87048d8bd2\na62a72ea-3824-4c84-b126-61580b7cd7f0\n9b27b9f3-2b49-43c7-8946-815122a55bf5\n96ecd5b8-c08e-49ca-b8c3-e18d9e53c4e4\n39cc349f-1970-483a-9830-81c3ff4b914d\nad819e8e-c418-4706-984c-7891466642ba\nf530cc98-a254-4e98-a5b8-2a65e7b999c3\naec6be11-6e8d-4514-9af5-b22a0c178468\nc6974e14-34d3-4fb3-a0b5-59f4d101e135\n35544a21-f318-434b-a731-7ef60487e2d2\ndade76c4-e1db-45e4-b619-c016a9b39f18\ne3a31f8e-7962-46c3-a2b3-3cdcc21a0b14\nbcc397a4-435c-43e7-80f3-744160daace6\n8fb163c0-d6fb-4cb2-8b7c-8945e95932cb\n7b2c0d09-36ec-4e63-ba88-f218801fd1da\n6939036f-bdaf-4c88-83af-5132e78a132d\n56e60d1c-a475-49bd-a2fa-04eb941c434e\nf9c0df9b-7644-46d4-99ca-c388e5b9e2a2\n47906464-4f74-4e8d-ae36-b3f7fa5749fc\n981667d1-6495-4574-a065-b5e506377859\nc3857982-cf21-4f09-bec6-f92cbeda4254\n31eb4ac2-9292-4adb-950a-288d43d1f0fa\nf9e75f55-8873-4864-ad01-d3570b55d369\n7330dc55-78cd-4f9a-8014-aaa2910348c6\n03b7572d-5a00-4be4-a2cd-91b16d1830b7\n3c39b96e-d4d0-41cd-b179-fbc7ce0310f0\n095be242-fc87-4338-803a-fc9f831449d6\n35316846-d093-49e8-8787-bf67f4b51c6a\nbf6f9b0b-a1b5-44d9-8e88-17731924e291\n44a1bf86-c4bc-40af-b596-8d251de90831\n34aa3f57-85dd-489d-913b-bb84554e0baf\n4bcde202-d846-4b73-9d3a-f0560b657901\n84ec8de3-5525-4153-b1c3-71412b534acd\ndd19adae-0900-47a4-b9b8-3022b053a8cc\n4a5a9717-25f6-4100-be3b-f9523dbbcb0d\nf83bd486-d6bf-4c21-ae0d-21b77803e566\nb152944a-55ef-45a1-9bd4-5355165d512a\ned4916d8-c439-4dbd-8ee6-087b1a6a798c\nc19eb14d-4d01-4a94-814d-225b059a3371\n82f96e8c-28b0-4179-94a2-4e239ec6dd1f\n685f2b84-6dfe-4e13-86eb-01ed132e699c\nfee19fba-9ad4-47ed-bf6a-9d0530b247a3\nea75346f-8b08-4063-ba19-a35df4bfbf33\n2015196d-6c77-4277-b35d-6983a83973a7\n05921c10-03e6-4ab7-919e-564e5c7e33b7\nd4ec7ae7-1e19-47cf-a9a0-54b6d93d0c59\n656ee991-e741-45d6-8a49-33c7326273fb\na1c6fbb2-5c14-4eab-a58c-6c41c98e353c\n096d5ac6-4cc5-4a80-b086-a41b23b7c5dc\ncca89a7b-855e-4c0e-be86-30e413cecd2a\n044bc658-0b6c-47c2-9b7d-350a5acec84a\n3323c7e1-121f-4647-81e7-ae2005b92d67\n2c666288-7c22-4bb2-a7f5-f78f0996bec6\n55afc374-faf7-46c8-99b0-99955d149485\n6403700a-eb6b-4191-bdeb-a6dd8d59e6f4\n57b4d479-9bb9-46e1-b6e7-ccbaa8be109a\nd3e29c49-209e-4d51-b79a-742d19cd65e6\n43a22b05-6420-4fd1-a9da-00af48ec08f7\n59fd9ebc-b0d5-409d-9fd2-5b520c4516f6\n44419d05-5fb1-4ad4-8682-bc397b555b99\n9f70307d-ff01-4de3-bf72-9ae3df3946bc\n2f508504-ad13-428c-a96b-52a62442977a\n7cceb23e-2a49-4c7c-96dc-53524ed8e0b9\n0e059ef4-2108-4a28-a37a-d3c7ce1091a0\n7027f00d-e23d-46c3-a990-b9bceb2d0eea\n63e325e6-1fb6-4fc2-b381-2e306d364f06\n4f60de29-6531-4d30-b94d-7ba55e9fb26d\n2b511c8d-b37e-4fb0-82e4-b754f4287397\n38f113c9-acd7-4fc0-a0af-67db7a522718\n8ad2b11c-7d9f-4744-a0fc-d9ca6eb556ef\n7935e506-2c13-49ee-8583-d31b2e275541\n506cedac-d648-42e5-9289-27d092c7023b\ncb8169f3-712c-41b5-b37d-fc4e29323b58\n19a75b80-261e-4260-aeac-07637f388fdf\n5a8f0d47-66aa-4a2e-a04b-5647444a8a9d\n38e69439-4572-454a-a2b5-f264a7559e5d\n835dedac-226a-49bc-89fb-9ee34e998d58\n6cd3e54a-c7f8-40b9-9477-56000fc35260\nb703713d-4a9b-40b1-ae2d-1f4f50d8a9d7\nf4eedb0f-82a1-43cc-8290-1a7c9421bc2e\n5858c741-b7ac-46a0-a992-4d8603dfe3d0\n757028fb-1f6d-44c7-9481-5fca7b0590a1\ndd8f33d0-82ca-44fe-892e-87970b69c272\n5437a236-59f4-4b54-9ed7-d615a04990b3\n10f908ec-adb7-43b5-8e78-bbc7215a58a3\n149225e2-d71d-45b8-8cbe-0067cc898ceb\n9b47409c-d49c-49e2-be5c-1cf622fd1577\n8b97f7bc-b18f-4ee6-ba5f-5747cf18e47f\n1412425f-1261-4a99-a2b1-6d422b44d8c5\nd0eb4f7a-9a5c-40b6-b11e-5aacf7cb4db0\n663b1fc2-cca6-4ed2-8e09-288bd40434b4\n277322b3-8fa0-4ea7-b9b7-a1f8c38ddf9c\n6e3f63c4-7954-4a5d-b536-87412457076f\n442a9bc2-0c2f-45e5-b84b-269f0adf26b6\n0c7e5278-488f-4ed3-be9c-f69f6948e20c\n56c9d20e-cc56-44d2-bf7d-0bf4994f496e\nf2fb1ffa-e59e-40a3-a6fa-f088a350ba11\n79debeda-aaaa-417d-a524-4a8443b5ab0f\n32fd1b93-4e4d-4689-92c2-688603d2701b\nc3a58df9-d3df-4127-bf04-102b1bc2441c\n65ff3fe4-fb4b-4a1b-ad59-116b97c9a390\ne2d02fff-a177-43f5-bf3f-3b6e5268a2fa\nf7c9b0ff-5d03-44ec-9adf-f5c24bfc0ae7\n7d24d01f-cc47-457d-b0e3-80616f259003\nd52fd8ea-04a1-4ecc-8949-56463a5bcdf1\n87ab0db7-8a1b-4780-97fd-a586cd1ab802\n7bfc0d36-ffc8-4b3a-9bae-e40adc2b634c\n1d7b0a92-6847-443c-9438-7d9e7110d146\n4b54b944-6694-4701-8531-6fde3e8b4b2f\n26380706-0261-43c5-8c69-f7dbccb3f40d\n2215a8ae-8f2f-4c5a-8044-2430a198d5af\n7037a598-75ba-41b2-88ff-d8a7eabe463b\n30dbb057-bbe2-4ed4-9fde-b1030b9bd7e1\n0d0cd986-e86b-4079-812e-5281bc00bb95\n21f698e0-aabb-40e9-970a-1b6744ebb93a\ne4208291-d6cc-42ab-bf81-2aefdfb64d64\n163497eb-3d96-42bd-8cc7-ab87eb290d18\na15d2cbe-b003-4a85-81cc-fb4e2e8f13f2\nd37fd749-ac29-4413-9104-f7fa725814bd\n11e13910-b4dd-4db3-b4cf-6f8b90f0fe7e\n43857cf0-cbe6-419a-b201-def698771e03\nd8e17bc8-0eab-4acc-91bc-863f2df2b9e2\nb0e9d245-0ad1-403a-ab5d-afdc607ecd10\n9685b329-7c35-4779-9b10-a799801bb01e\n9714b7ff-96b9-4eb4-9642-64da57a9b697\n5ca51428-2669-4595-b174-f9dcf97e06ff\nd3e68d34-d8d8-4b92-bb32-3f2492dd9f4b\nf1851b01-1fc5-4d31-826c-e28dbab14134\n36918b33-48f1-4537-9f82-855f7770957b\nf13ae989-7ac3-45b3-8a76-6322065a1e5d\n0c6d9428-98f8-4b95-b7f9-dc4c876e458d\n0aa1d1ff-3a27-414f-828a-2cf09899a2b6\n9bc66721-6e90-4912-b151-528e901bddf3\na2210dbf-f078-4673-bb20-4ea9fa7e75a7\n3f61231e-d025-4531-b17e-39992b0a37a9\n110af13b-01b9-41a8-9e45-8deeb240246f\n04fd2a53-a62b-4dcd-ac1e-5b42201fb81f\nd33c4883-3ddd-401e-a94b-e2c2a329c233\n18402d01-403f-465c-a6dd-fb96733bbea5\n85c2ba62-939f-4eba-b598-fa58287e843b\n14b32297-5e26-49c4-af31-7992c1590585\nf732023e-d7e6-4667-8277-97c5b8cb831c\nd42f621d-674d-4614-961d-156074c54480\n1fda719e-733b-4d94-8072-b7a309b2b381\n2adae49d-6ce6-4dbe-b8ec-1519e1f89a85\nfa18e243-d6ca-4e5b-a7cf-d30092f3c8f7\n959a37c8-71c0-4a08-a1ab-9f78a5b1cfdd\ncfafe99b-078e-4acd-8d1a-812ad6fe7490\n466318c3-adb2-4ea2-9825-ee5fe4f52133\n31856cb3-0dcd-420b-a359-787e8f2d7183\n55c9f78a-748f-4736-aeb9-35d363b06ac4\n1e17cf4d-5445-4d27-bef3-74a8d3e478c2\n1fabf512-dd6c-4ea3-bc28-04893fbab4f5\n66ca3314-20ba-48b1-be14-5601a236482c\n9c3cdb2c-4935-4c16-9418-7a83012f1cb8\n2c8c4f35-fc6e-4cc9-b9ad-caf37c0f7f7e\nabb31f13-b05f-476b-9589-88b3fae23589\n46458c39-cd4c-4be2-af44-b29d7e4663af\ndd0ef237-235c-4caf-a897-3cf2f115acf8\na62efa51-e758-4fe4-a557-218b3324a1aa\nd9958244-bccc-42ef-af06-c5d4acd43dd5\n2d354eb9-17fe-4c52-a349-6cd99b3234a8\n6d45128e-556f-4d8e-ac75-516897e24b66\nab2f5c6b-2c28-4f53-ac14-8fdee1a1bed0\na4462b79-1251-49ef-8f52-d464c151ecd9\n943fb9a7-685f-49f7-92db-39e08ba994c3\nea0dd74b-7a49-4b7a-ab20-091aa29ae43c\nf7442b23-3f01-4a4d-b5d0-1762208b39a9\ne264cda1-5016-468f-9dea-8ad8da675539\n04aaa9f2-d4da-430f-9e2a-c80c9f14f3bd\n7dd4dae7-8f92-495f-b361-3de16909f79e\n0ae2d3a9-4c21-4b48-a383-48f42b5f3448\nad057897-9b16-4485-b018-e35871ebcfb3\n112727e7-b9bd-43d4-9331-5ea78ce38927\n5f94e5c8-d360-41fc-9231-051222e6edda\n8cb57a73-d928-493e-b07c-e9f8f651cdd5\nd14ab803-8d82-46f4-9821-6127228227e7\n7efb4c90-e9ee-4ece-85f6-1f6fde6c6b85\ncadf2ab2-18d7-4dd1-b039-f9039a07f2c0\n96ee94cf-1bcd-4842-a203-9226b945c9ce\n8cae8dd9-901a-4622-b78f-cc66a2674863\n0925bf62-e7db-4a28-81aa-7f117a243b82\n35f66a3f-7af6-4b68-ba2c-498fd6f5a1a3\n879a085f-93c2-48e7-8b33-75949bf384d7\n41c18352-46d1-4024-b369-275cbdb79fae\n1eed7252-ca77-4a36-bd99-e099e6f20a2c\nccf305a1-51d1-464c-879c-b836ef40c2f7\n031dc499-ffb7-42d2-8186-02947bfc855b\n9588a7c0-64d9-442f-8ef1-3b808150982c\n91e20e7d-4d18-4448-b293-934e61465bae\n07d2a816-e81b-463f-8662-5e69c386dc92\nd6e4eaba-b243-4a4b-99fe-66a894aa6e9e\n632d76f1-da51-44fb-9208-d92fed382cc1\n5c97ef47-38b7-4078-88eb-08e2fed9355f\n6805cdbb-2e43-4be3-a459-3593490d0838\n202a314e-5f8c-40c8-8220-bd27b314f86f\n58245d0f-34d5-4caa-81ca-f5261855af2f\n1528ec99-b724-40d2-a937-97f08000e353\nb8aa72fd-482b-4841-b467-2aab9b261223\n89c494d5-ac36-409d-9fac-70d3fa53d9ed\ndbb7bde9-d3b8-41fc-93d6-7e30d4f803ac\nb4f02ac5-764b-4e6c-802b-342c71cc5632\nf952ecde-b4fa-41f1-a601-dc8172ff9af0\nd8f1395a-e7cc-49c0-8359-eaa13bb8f71e\n59f113e1-0069-4541-b1f1-40b345004dbb\ncee478f9-9e62-4624-87d7-e3e61b63d098\nbf59681e-d9bd-4083-b5c9-d3cddad9d66c\n3ad00a22-b35f-42fd-9621-7c0102578543\nd643deb8-37b7-435b-8c53-e77744ad0add\n6f155fd3-f817-4181-a5cf-c914761e08ab\n239d4817-a291-468d-aff3-4b6296bfdcd9\nfc57230a-ea96-4220-8f47-3bdb871a1c0b\na5cf20ab-d4b7-4f32-a276-02692ebe26c8\nd1947861-6437-4a16-8a9b-e04d3bd058e2\n8ba9a2b2-e411-42ba-be13-56c606f66a85\ne6157e30-e597-4b03-a48a-5eabab4addea\na4a3ffcc-c8bb-452a-a22f-41b693942354\nd9cf43d5-2841-48ca-946d-75704001b498\ned9fae9a-b105-419e-86e8-66d2359c31dd\n05b9ce7c-e72a-4443-a8aa-e5f3aeaaff5a\n6b8a32c9-3cd6-4973-94c3-114151b0d8d5\n68bbd8f6-13ac-4a67-b43e-08eb63a2edb0\nb4efcfdf-59ab-4f65-bef8-42f1f667114d\n4c80a3db-7435-4414-85ee-f5b74b17fb49\ne069624c-5a61-4183-bffb-eec6f14a0abe\ne4aa8215-0ec9-4a25-8d85-c82eb25f7600\n0d9ce35d-66ed-4aae-b37d-9d6cd1681700\nafb5ef82-7fa3-4fec-b601-06bc1d5c4481\n90d277e4-e696-4744-9908-b1c73b1cfd85\n94bc454b-4d69-4d50-8cca-d42b6d27cf50\n1cfffbff-032f-4442-8530-1274bbc57230\n7a13127d-1eee-47e9-b041-061407466b77\n62e15f25-c831-47c4-9b2b-a0abc533a91a\n5961123c-ad88-4ec1-b110-7af5bae24b73\n5df473ce-e46d-4c4b-9744-6b62de9b34ee\nb6d414b2-5724-4749-a06e-db18721ce78a\n52152d84-3fab-4df3-9b62-0cfba99d5921\n80413ae0-df36-4746-9e16-c2a3be49b097\n583579e9-0b1b-4e88-a6c0-656116bc82c0\n398c7d4d-dda5-43e5-8e6e-193eef6358ac\n2577a000-8822-44f4-825f-fa2beb7cfbfd\nd159a0d1-20c6-4411-903b-d34654e71ce0\nfac74d33-73f8-4a89-bcfc-1e5bb991e506\n961df504-1002-4bce-9fc3-ca8938b25d19\n15da435f-ba2c-43f3-a4a7-a4852788299d\n5dc5b272-6a87-4804-924f-6a4863035699\n5223b912-982e-426b-900c-ed55aed227e1\n0a3a7293-9f24-4618-bc94-ef4f4a5fa761\n4fc5452e-17a6-4685-b35a-22f9e94f18e5\nfb8a8bc2-3a92-488e-ac54-2c3f7d144f0c\n823f0f49-9d4a-45f2-a437-95a078239f64\n4ecb4b75-56bb-4c7d-944a-e57bad177269\n8f1a67a5-4c4c-4cca-9412-e35790208b8e\n5f6358e2-5370-4954-ba8e-9bc1244bf6f0\nc5a4e983-4c7a-4249-bfab-65000d375442\n4f2619fc-af66-4050-af9a-be3c888a1e7f\n42d20c0e-f874-4efb-a599-13b98628a231\ne9283bce-c34f-47c9-832b-b19700d315c0\n96c3b68b-ce34-4d74-8e8a-715707a248f3\n68fee913-87f5-4099-8748-a5a1d621392c\n8ae26f2c-9d11-4715-849a-ce21adc41bf7\nb46cabe6-2915-4a29-9fc4-4fdcb39f6bdd\n04d3da4a-bc86-441a-b9b2-00951c1e57bd\nda399ebd-2f07-4c34-9f91-ebebc79d3d92\nf4ccf1f7-03ba-44c3-bc8b-cbbbd0840314\n2d98e034-915e-43dd-81b0-d2b498ce3186\ne1c45f50-553c-4e9e-96d9-bee58f038549\n849cab58-e961-4fb8-98f7-bcfa404c4af5\n3771021d-65ad-403e-9b45-542210bf7de6\n408fd72e-e3db-4e47-9d35-8cadfc0a13a9\n5bc822f1-3c6b-43e8-ba7a-8eadac7858ed\nc26f6b5c-1254-4543-9291-9c20e567d0ca\n511ed9c5-c3c5-4d4a-8a44-92f20e6b5eb9\n15de74e0-fc4f-4cb8-a604-616f32e6a801\ndf78696d-4360-41be-8f0c-edf1378996c7\n3bd3a51e-fb4f-496e-b4d7-24d83dcee9e5\n05952b2b-b99b-440f-bf7c-455459968a04\n347d7fe4-a954-45fa-9ee5-3a8c1b3fb0b6\n94cb1699-766d-4db2-9699-24f921c232f1\nc08cefe6-4445-4dca-915b-acd3e5d01d56\nd1e8da16-726a-4a2b-9149-28ffb212035e\n69866b6d-75bb-4d25-bbd8-98f2146f8456\n330731b1-3667-4ee5-8015-7d53f1fe492f\n30c78fd6-6011-426f-8c73-b36a0e3fdebc\n39e8e24f-6542-4c8e-baac-03c334d51162\nd613708b-78c8-4d4a-a113-9ca3cc674a0e\n67a3aada-0eda-48ae-a4a6-9e39f2650757\nee909876-02b5-42b7-b856-f9db331a5fe4\n15b5b118-dd93-4add-87d7-7549f47cbb3d\n7e08f958-eb95-4c79-8c9f-4ddcde0515ee\n2a88d030-0e05-4eab-b27e-3fb817f19158\ndbc3f149-1568-4e0d-9e51-9beb1e2c413d\n3c01d5ce-cba8-4994-8be4-65c6a5ab82b9\nd4ed138a-58fe-406e-b92a-377a1f6a2470\n169599b1-bcf6-46cb-8210-9620b4cdcf0e\na93f0108-8d0d-4023-b409-81a9758c2969\nb28c62ad-ee87-471f-8535-0463a630cf44\nd1baa198-d5d5-4f44-bc48-b2eef389d4a1\n6a1c99f1-44c2-4ecc-bc85-7e63a2428991\n3867d2f6-6588-4a39-9ffe-85b660f43bfd\n6ece4172-2822-4434-bd7d-d13939e74e6b\n93b293d1-45a1-40ba-896a-00fd9f8539a6\n151495b1-88e1-4ec2-9d06-29e398cf7ef4\n58ef095e-e324-4bfa-b01a-c7a174089a42\n5b6cda62-9348-46bb-b141-78bdfcf987c5\n58d7d53a-d7c7-43b1-8a2f-fdd647f5e9bb\n8864eeea-a2e6-4dc2-ace6-07b925cbcd2f\nafd6bd34-9a03-40b2-9355-f1f19622798c\n4c129868-9661-4442-b313-3546fb53a479\n762759d2-0c13-4b6b-ad50-e7fc38c8f287\nbf56164c-f79e-4366-8f5a-a6b860e197da\na2cbbfad-cfcb-4083-bfaa-ceb5bcf28857\n0ce6474d-10ea-41b1-ba0e-2e9c7eeef02d\n833449af-b464-4b75-a8e4-fec8b2af08e6\n448526c4-4e1d-4612-90e3-287eeb64e2d7\n3fda3289-c3bf-46ae-93b9-75d74a7d62c3\nd047a7f8-34f6-41d4-8cfd-96c0ad20a64b\n8ecd64c9-09eb-4b5b-a3a4-f0de4bfb6f06\n1f344019-8203-4ce6-882f-a22ab0795f76\n40c8b55d-a399-4ca9-b293-9047455e5a11\nec8a29d1-dfd3-4059-b59e-f593a980119d\ne4d92b76-b0bf-49c1-ad94-923ada718352\n171d0148-9613-42c6-aaf3-7b7e6ecd68fb\nf17c0407-7ba4-4149-b216-15aa10ac1e05\n4bfc85e8-47e3-4ec2-96e1-e4b596f6e769\n8550a21f-0aa9-41e2-ad6d-999e85f63b1f\n8ea9c2a8-b418-484a-bba0-f636e3572e3a\nfe9824da-50c8-416c-a040-18ceee683cec\nd1bc9029-8316-4c3c-9c46-2f6fa0c1750a\n06d58e5a-4d62-4ac6-bb5c-3bb3e0103d03\n9b0f9632-02a3-4256-8ff8-bdd1361d03ab\nc0025700-8192-4dd0-939f-20b067a841b8\n52e89950-25f5-4d9e-ba5a-610ae1c295c6\nb67be60b-068d-4ece-ab72-c4aa8ba5dfc0\nf7c38445-2253-4b9d-b0dd-5108edee4bc8\n644c5696-99a6-434f-b8a1-977dcea6a73f\n2922b416-8ead-4a56-bdd8-13d37de6efd1\n1f473fb9-3154-41ec-840c-b9ecc46693cd\n8b816f08-c572-4e67-ad61-ab2200f3f6f3\n90d0e38e-6e96-4cff-95b1-cdf88fc4658b\ncf1ebf8e-925d-4cd1-893a-24c4f29e474f\n78f39d90-f20b-40c2-9039-27602a349249\ned71e45d-3506-41fd-83ed-4977a92c4ca1\na915e260-3a0b-41d1-a5b5-722ff8f21f7f\n0616d207-fbf0-49b4-a38a-59c7e2f80b58\n6e683ca2-bb34-401e-a20a-9ddda2fef0c7\n5bc47334-cd13-4382-a00c-322217819e82\ncc4e7e3f-1644-45e0-be39-82926676e48a\n6647e05a-bff3-415c-bcde-ac7a48084c8d\n443cfb9a-246a-417a-9eb5-67ca3b6d0106\nd5ddc538-e42b-48c5-b070-2fc297e04544\nd2f9f57f-70f1-4068-b03e-c5861c75f9e5\ncfd9ffe9-31ea-48b5-8f89-0d4bf2554020\n290d8df6-7bec-4274-88e4-1e10d0f8e170\n4f1d8d49-b4d4-4d3e-8869-c1ed2afe8d16\n8c772049-54dc-4c23-bd94-f12d0df26b16\nc5ce97de-499f-4f73-a734-a54abed3490e\n9dd29086-ec30-47c8-b380-96f8174e0007\n5110894f-d629-40f2-8608-2a8bec5b78bc\n651dbac0-2be0-40fc-9ff7-88dac1bcab0f\n2c4875b9-b690-4039-80ed-c777b477c7bb\nfcc5c3ef-db7e-420c-b89a-83db28b35b01\nff071fac-f30a-487b-abed-3f1072aee6b0\n506619cc-a58e-4f7b-8a00-fbfda1160fbc\ndce8a3fd-a0bd-4ebc-9f88-1f20181a1195\naca3c436-7e55-401d-824f-b6963ee04a04\na3f227d4-b94b-410d-84ce-c156653207f1\n55465dd6-ade8-4a75-97f4-7c050157e5ab\ne5455623-5d8d-4e23-8f66-383b4c78ade8\nc5dbb9c3-8418-42d8-b300-994f1760694d\nabd10804-9810-4cba-a4d9-214b6f09a7ba\nfbdad49e-b767-4125-b7a8-1d492bb812f6\ne27b885a-6b6c-40d0-a1c0-6e26a62a5776\ndf04ca3c-e573-4baa-b15c-245120dc4312\nb3712598-9414-41ff-9d51-c0d6c0eb0385\nd453d2c8-0ba7-4e47-b33e-fe07c196352e\n5ebbdcd7-7e98-4e38-ad53-c9a6fc9e10e5\n2a187efb-893f-4157-a6f2-3067673b1739\n41d6dbd0-7145-47fb-9b31-0bf4e9e47ae8\n56bd7a11-b8a2-4f20-b259-431d98c7bf18\n586e6ea1-7131-4569-8900-5ae50960772e\n16bd3b49-81bc-4698-a956-c752a58049c6\n682e43db-bd93-4a2a-8738-513c2d8a71d0\n590b35ef-87d2-4a5e-a426-bf3b59e30a4d\n9811b85a-33c0-47c2-b445-b779a30b1222\n8905cce8-af95-44b5-9e0c-7287190baba4\nc6dcd0a9-9e1e-47ee-a512-0aaed7ebdb80\n87bb6422-6387-43c2-89b1-c6cc6f847507\n5f366b13-9c73-4364-af9c-0784879f859d\n7f485a10-07f1-4d0b-b491-83af2ab47406\n57c1b783-c2e8-4528-b6b9-d8a3b93106eb\n5ec0be02-44f9-4d76-918a-fc6a0872ef87\n80657b29-a440-445c-8d8d-5b4a8d74187b\n469ccc25-b12d-473f-8573-3c760f445fb7\nd389286d-4ff5-41e0-baa3-766adaf6aee3\n74f10015-78d1-4b49-9e8d-4b257a9f37d5\nca7c798e-2ccc-4282-8010-d76c3add3318\na9923f37-2ed9-44cd-98df-3892ab85eb8a\nc5a6f975-c199-4817-8b2e-7e8592030f74\nf2d7b002-2dd5-4852-b2a6-736cb13e6047\na7367200-094b-47fc-bb9b-fa4ef45b9d62\neb2ac497-cd69-423e-b382-3ace1eee0857\n5641e5bd-cc3f-4b96-9428-cea4cf0122f9\n893a3568-5fb2-4bd2-9992-0193a7860337\nec2775dd-cec5-4c0b-afe0-0c59df41f9dd\nc61aff04-4029-44a2-b0fb-4ea6f448ace2\n8540fcd5-4dae-4b8b-8765-395a9e2f870b\n9992d644-95d8-405f-97f8-46700b786c94\n8627a721-47e0-47dc-9235-ea77bd1042b9\ncd6f139c-3b6a-4f41-8f21-f3f0629cad19\n171e0847-2648-45e4-ac7b-69861dde2653\nff47c82f-e4e7-48b2-9b34-f1c9db4affcc\nef7e53cb-8e1f-4807-9475-526f724cc993\neb71139a-5fb0-4ddf-a839-4955ff7d9016\n0472a331-48ed-4b2b-ac62-c74c4d7939a9\ndb5dad08-7575-4570-81ae-fd3172b151ee\nf6bf81ec-11f4-4f1f-a50d-6772d5d0cdb5\n0971f173-3eb3-4e8e-b89f-b04343c52977\n2721ea02-f29b-4b7f-9b41-dd23c31b8be7\n43d73c9e-38bb-4b9f-b17f-b878d014481c\n685976cb-6106-460d-a423-08818aced11c\n0a3900f4-c1f9-4b33-8e57-c71d1ae4b49c\na2df10b4-281c-472e-b35f-559597ff5f99\nca0b71e5-696b-48a2-9cd7-4b80bb3c8a0d\n29ba1461-1222-4d19-92ce-9ecc669646ca\n7d6bd085-3b4f-4024-9747-eba97e9a632d\n855ff75f-21d1-40fd-a8b0-43729631e1b5\nc0425661-9b60-482c-a7f3-71b57f5ba662\ndd2a5aad-013d-4a2e-b577-1ac42826f422\ndcb42407-bd50-48e6-b3ff-02200eb58565\n8b46aac3-6ce3-4373-bfa3-a0cfd9940ba6\n4ced9b1f-05c6-4546-8807-64840e902d3d\nf442bc4e-4f09-4160-a26c-9a6ddababbe7\n8813ba93-5e8f-4cdc-8709-37e0771c9673\nc39fc537-80fa-497b-8bc2-271fe4335f10\n72dfd4a6-f2fa-406a-bed9-12e195b6574a\nc6c9ea66-f13c-40f5-a551-ca886153e313\nc5b638f7-95f8-4ae5-ac22-d5a36e9cb66f\n92c2b771-5416-482d-bb43-6f4ddb5c2318\n2d390585-94d0-48ae-8cdc-dcfc72505b09\n24efc9ba-f527-4ca8-90b8-fb82091ebad6\ne4dc943d-8196-43b3-90de-d36e36183034\n5f54bb84-2d6d-4edf-8f85-84dfdddca13f\nd1506397-0915-4b17-8884-c793ec851e02\nfaada647-2ba5-4df7-a6cf-f1ae909044d6\n7c1d0371-a15c-4943-8660-2646f2da73f1\n5a476de6-3a5c-4039-a815-07db0f167823\n6d906718-688d-4769-a435-022b1153553a\nabf34993-d8e8-47f4-aece-9dda691326a4\n7cb49441-4e6f-4bc8-9b9f-3267f0d622be\n8d5197b8-2108-43ba-ab65-6396338ce949\n4dd28054-76fa-4254-9a6b-1bbeaadbafd5\n0dc4ff74-2cae-42d4-961a-2989ad66a65e\ncfc24e7b-92f1-4e8e-b3c9-4b6af48b5755\na3d7367c-44f3-41f2-819e-18238c0cbe3c\n13501ec6-52e1-4459-b439-ff78ccac70b1\n68e935d5-f363-44c7-b654-e56b5c58efe7\n7d6a5027-b4b2-40c4-80ac-21682ca64c35\n71e30403-717b-42f9-9688-2f8280913d20\nda17aee8-6d70-42a8-8a68-8ebea94fee1b\n67d4f5b5-763f-46f4-acda-6f2f5906988f\n6202dba7-6d0f-4fb5-83d4-4b087246cc69\nb99a3c25-f2d5-4b96-9b38-53fcf6ec6879\n234b0054-4f58-493a-b6b6-8f9526820312\n171d3217-a673-4c2b-8c7d-5af9e7f4df57\n21c08010-8597-485e-b9c8-fc93cc5508b1\n59a573bf-dac5-4e14-898b-f2d03ba43e67\n6ed28c81-795e-4bd2-b370-ad7c21ba389a\n717be92b-f6c5-4a1d-9375-39b8fcebb38c\n67a5a7bc-9b66-4652-992b-9a323015ebdb\nf3869c35-0df6-4dd3-b34e-c48ac3f22020\n38a7791c-1569-42b7-af68-0099ea459200\na5888639-f179-4dee-ba76-3c918195ad73\nd68f73c2-c510-48aa-b8f4-477b3766e774\n5f984067-7bbc-4629-a9c4-3a2d52b3b4ae\n699fe035-f8c1-427b-b2c2-10d49f6552b4\n9211678d-4bc6-4e4a-a5e4-c74b7fb11396\nf142e1bb-8daf-418e-b145-6ac30f890e67\n0a1e5ef2-73c4-4bf7-a8d2-eba39e5258ae\n970b2f09-65d3-450a-b349-8079c54d4896\n1c2a0e62-98a5-4bea-9db7-886390350090\n3cfa3e0d-9777-4196-a806-263a85ec6d96\nc489f81b-a97f-4bf6-abe0-a79354c4804a\n27ef089c-518c-4b74-bfbb-643cac0070ff\n7491a902-43f5-437f-859d-c6d994a68539\n00faf227-6a44-4dda-99d0-c55ec70e422f\n8e7df346-68c3-41d8-8edb-bd39a1408290\n7b5096af-75ef-4f99-954b-7a725a6683e0\n652133ea-3a48-4767-aa98-b80039a69016\n2b7e9fc7-0f9d-429f-8719-cadd3020a320\nc4c947ab-4ce3-4cf0-ab99-a7dff4c9213c\ne9c272af-6109-48c7-9a70-e1f697b125af\nb1e4b0a8-bb9a-4fa9-a7e9-8e59bd6fbe27\na6110dd7-6f96-45fb-8dfa-6d582f1c3e61\ned09a8a2-cf02-4157-b836-337845704be9\necd611a0-ac4f-43f3-a3b4-d2f07fa5120d\nffbe790e-f69c-4cd3-8003-9ad70858acc2\n230ac2e0-dc8f-4224-8350-4b331fbedba9\na0766951-1703-4189-88a3-90bc21d6d03b\nd8acd6a0-7008-4b76-99e6-4d2bdb7b510d\n987755dd-a5fe-4e8c-a81d-098a7c029333\n82bef42c-243e-472a-80ea-550d3075faa2\ne6f1a0b4-c5b7-49aa-acbb-9f2e4e9e637e\nc8e4c2ae-e514-4b9e-85e4-a88bfbd2b3e1\nd2e71b3a-46f3-4ba5-9c70-d9280b116e46\n87234815-212f-4adc-86a7-c9037fedaa46\nf039c514-2f39-42b3-94c5-4345a11aa988\na54e2da0-e0cd-4db9-bf0a-3072228f4794\n0379ef10-8ba2-4bb5-b446-b2bbaa3b637d\n39eab70b-545e-4364-949a-35b401417af4\n789c4cab-4a8d-4c2e-a037-447c0df12e2f\n4fa70f3c-a216-4deb-929b-16f728e496a6\n3f4deccf-4747-4c32-ba98-8f7bd1244849\n2b0f5eba-eb5d-402a-870b-9618a76f0765\n554a96d4-ab84-4e0b-8382-bfa722162a25\n410c077c-c5da-405c-b41d-b611b2961a3e\n643420ef-ec73-4e03-8395-66c1f89b025e\n7e659664-702b-4a10-8d35-932c2bf4e4d6\nfa7bf2aa-9bbf-40a7-b062-1319b37a19c4\nc6549cc2-95e6-4f35-88fc-06af3e7da9fb\nbdbb2a3f-3f05-4ffd-904f-7c6492b1ee72\n46fe4592-0579-41dd-8ec4-ceb12b5b58e7\n29fcd4dc-fc37-4148-89b0-9eebbb4c3f8d\n66b992f8-e527-4db5-b494-e662d0b35748\n9da8482c-410b-4fa7-9853-c254a1037c50\ned15352a-0ab0-430b-921b-32ee0e55357c\n9989e2fb-6919-45cd-ae0a-21818d515ac9\n041fa089-8893-4560-9f8d-febc3b9c64b0\nc92bb057-3b31-46f9-922e-58111f48cc11\n11b91eb1-df0f-429c-b64b-067d837f6cfb\ne58e98e3-73c8-4bd0-9c89-dbbe93e6c345\n155b6d8b-9d16-4287-902b-e9964bd65a28\n183c02a6-6e6f-4560-b133-93c5b54c0962\nf50ee156-e220-4e03-8e08-c78f12ae366c\nbdbe2d12-b11c-4299-b2b7-a5f805e21899\n1e2ef2e8-f6b1-4148-8b11-b4f16658c209\n086fd6d0-4061-4a43-bf45-021a47d0852e\na27745bf-a405-431e-b684-85229ff54261\n5b62a47b-1457-4ff9-8e11-ee382ecd4edb\n8035217f-731b-4ee0-b25e-94fa8f35d6ec\nf144d7fc-a317-4bc0-b73b-3822cc93859f\n382f63cb-bc6b-4b55-8375-4ebfde1cbe5a\n2f72f7ad-6261-4666-9ef1-831fd3401af4\n299a8da3-671d-4379-8f31-a3de173e7567\nc77ac332-359c-40ce-b069-556c9a8e9bc7\nb6810f2a-4609-49d1-8fe6-c8ff21fefd39\n32ae0648-8f0d-4423-b4dc-c45265aa2b3e\n954f8d11-e3bd-49c1-bc37-af47666c4845\nde7e1ed6-0696-472e-9f65-8715c74b8125\n91f77c31-604e-4c89-8d96-5a983a2f8d8f\n7964e921-9219-4388-b910-a5143304058d\nd2b1b42c-2ff7-4fd1-9e76-66eb5921ca02\n1dfab9bd-bd1b-4ae7-9e74-8cca095b6f3b\na3971cee-2617-4d9a-8bcb-a63409f229e7\n799661da-f6b9-4911-9273-bee6b9efe76c\nfdc77c60-b2d5-4634-96fb-5e27cb1dd23f\n5873295a-3ba1-4606-af98-0153d0a61da3\n97885d64-cfab-47cb-8b8b-b1d127b7b636\nb0cd1ed7-69f7-4413-81c0-304a611e23a6\n8356e319-2cf9-415a-96ea-15bc9d783f38\n7be3410a-d20a-4d27-b14f-33070bd694ee\n110e2b50-7126-4325-9d9a-06922f4225da\naa3d57c5-7dce-4f77-a816-ba768f187dab\n94a55290-b276-459b-b3ac-b99450c34d62\n29a54380-eb54-49f7-93d5-4960ca78571e\n0bfec91d-006b-4f90-bb46-cdb9192bd455\ncf45e58d-a3cd-4947-84f3-e6d36e34c31c\n73df62d8-640c-4cee-a761-50e95d8055ae\n89cc0e3d-8486-475e-b749-949284253068\n7b14819d-822b-4e84-9476-db6309784dc6\n3ff5e715-b121-4045-b589-d886ffd51b07\n16c81350-24da-4636-b8c5-cba348610860\n296ddfe8-0789-4a6c-86f4-1af6513db08b\nbf8223cb-56d3-44be-a7cd-ed2df032e150\n251fd584-407c-48a9-873a-eeb7933c1608\n905cb9d3-8f21-4760-93a2-f0a8f5c61b5e\nde6c74a6-178b-4eb4-a262-fd689e3b1a07\n1f9b1999-27bb-486e-a7e4-0a1de36618cb\n5d436c32-9957-4fe6-81d4-00ac7e2c00a4\nb227d444-3fb0-43f1-ba7a-83f1d4b5514e\n480abc92-f222-4163-bfd9-398bc46402c3\n83ba7f8a-0449-4b9d-b547-ff50a522a190\n191ed82e-62a7-4896-a52e-e7b830b22e79\nd2dc7837-ba86-4bf5-8948-f9a5b4d39c45\n8098a577-ca66-4d8c-afec-12edc5fa0cc8\n362f0f20-0fc7-4192-beee-85e6e039779d\n0bf94cb1-df5f-4425-89cc-4f3711a54f8f\n4244e752-9a08-4c36-b7a5-1c6a3e4a5381\nb0c35060-e3bb-4191-a7aa-cc3ac05788a7\n291eba5e-dbad-4340-afa8-6fd7854dba85\n3dcf6752-0eeb-4bb1-bb2b-a021073fb4f7\n14e59829-8332-4982-9eeb-e26ef24107f4\n62721a4e-9c9b-44b9-95da-a80b2118578c\n88091542-594c-49ec-aab6-f034787bd410\n4a8d5fe3-3efd-4a82-aaed-526a5fa030a2\n3eb05488-297a-472f-a490-e60486f0b2ea\nf0cf6153-0c55-42ff-8a6b-55567ac2d293\n6edd9345-c621-4c73-abf2-b64b5b823790\n921df5e2-8840-479e-b27a-1ab7b3bb7ad1\n823a4c40-887c-4175-bd9b-22a46d074677\n6e905111-f741-45b3-990a-44e2a8070c56\n5034e619-f1cb-4041-adfd-2ec3926cd345\n254a8eff-075a-48bb-ab39-4f852e7d815e\n03676028-53e4-4c2f-ac99-1300ddb75dfc\nd05d53bb-6d79-4f29-abfc-37afaa18d1d1\ne0b9daca-db0c-4dff-a61d-4386d04cc2c9\ne57e0153-00c9-4a9c-a821-04286bc9059a\n7bcbc91c-4c0d-4777-978b-49da91f061ae\nea756704-c5f4-4677-8a17-941d641c9010\n19ef2f94-0cd2-4927-830e-697a8665d713\n21d448a0-ef6c-42f2-9718-3345865be798\n67b78362-31aa-4d8c-b24e-74151bc93a45\n9705d461-d40a-40b6-8f66-cf6dc92de61e\n1ec2df67-beab-43b1-855a-0897ea3a275e\n2cc1ebb6-2e3b-44a6-9786-ed9df5ed5b11\n61ecbc32-12df-484d-b824-21da0b0e708e\nd6ed76a0-cb81-4b67-8f45-77efe30ef0b7\n11ed0a29-f86c-4f36-9257-824bfcbcaaf7\n14c3ea62-c4fc-4321-957b-0da93352f7ef\nae71d767-2c5b-444f-97bc-301e949e0b89\na5e7ac89-01b5-49fd-8a5b-d92875ae76d9\n157f087a-f33d-4ce3-a546-3417e9d53336\nfb0ed4cb-7cf2-4a11-9ebd-39c246441886\nabf76b59-8695-48ae-97a3-d94316edda42\nf60d8229-0c58-4be2-9f82-18801ee92a3a\nfdb22f51-15d7-4fd6-85a0-9fbfeeacd4d3\n87073d9b-9ef6-4498-b0ed-15045372ae8d\n3117f5b5-71d3-4c78-9ed2-656f910f7d3f\n1bf7ebc0-5385-4b42-9e95-882fd195340b\n27d3b60d-46e4-4fea-abc2-defb557c20ba\n19b0a532-542b-4ee6-a83d-76c626c8dbbe\n58d3d1dc-1ee5-47d7-9ef5-c8b87d4f1e6d\na10d9a15-a95c-4f1b-842f-33b2ae19c7eb\nc1fabe53-1342-4a25-bf7f-8a5ae3a27700\n59c1a142-d9d4-4734-bb73-e9cb5c63c4f9\nc9ada799-a03a-4329-b701-521ae98ca15e\n9bcd0e61-d845-4fd4-8a49-c82657bc0e19\n3968f42c-1e8d-4c83-b71e-0fd770e3e045\n9166adf0-df82-42d6-89da-8138b880076f\ne5788c9c-3677-44a8-ac11-34d668766088\nd2c9848b-c81a-4fb2-aafb-efff1d6018a6\nfa447693-3876-49c2-8557-d5ed37ce341a\n13902770-278b-4b36-833f-f3694bdda358\n615facec-d938-4481-9bb3-1a0fec4c96d8\na53b8d55-d819-4dd6-949b-8aff6ce492bb\nda48d83d-4d84-44d3-a3b7-d1f5116a5ef5\nf38ce24a-2338-49e9-9644-be30ed71da62\n4ebc82a1-2c2b-4ef1-a5e5-d940555faa1a\ne8c16308-29ed-46b5-8f97-19a3cb2b300f\n94b1faac-3891-4d8b-be59-ef85cb240df1\nb1ddf284-3d7d-4ef1-a70d-587c7e03126c\n81e6a192-4605-40ef-9cb9-9db54e9a8918\n2f8c8a31-d4a2-460f-ab11-908211ab23e5\n75790b90-4d05-4e37-9686-376b7cb50839\n7cd5a8c1-596d-44bb-a4a5-c782610c70d0\nd3585d6d-6a7c-4aaa-b216-5f79e3f4810f\na1072708-c72a-49d5-9f84-561f57b5f888\nc1da157d-eeb8-453a-b7e1-641950d899c3\nc5b9d077-ef86-4520-a366-2667919e978b\nc514e336-0554-4b6d-baa1-27a3ff6d6a68\ne4c29dc2-e3eb-403c-8184-67f3df51058e\n38b5038b-7e0e-432c-a6e7-af92f4bdd900\n02f283ca-46b5-4fe0-bdc2-c577185ab825\n3a741d32-88b2-4acd-ba3d-57c72c0a2bf9\nf6c6677b-55d6-4d90-82bb-742ea141f25d\n92f1b1ee-8745-4627-adaf-3087f86df677\nb1bc0237-2f1f-480a-9f0a-c5f5541b58cb\neae65fac-5423-476e-9a2a-db7a32ba22ef\nb68bd2d7-60e7-47e7-b81d-07650cb0eda9\nc228d8d3-b82d-4257-ba34-e3d49a6f1317\nc95865b7-1496-4e6b-bcb5-860f132c5f91\n54f2c4d7-f665-449a-b94a-764bd1ef84b2\n8119c6d1-b2b1-42c6-9d8b-f496c473b91d\ndb836a2d-c353-4808-b358-464fa8c1d96b\n4cb2e80f-cc0e-41ca-bad9-1646ba3e2209\n14076d88-4f65-4fe6-b167-33782df24e31\n7bd4e4f9-f648-4d73-8d26-f98ad9b30663\n2b586a01-51f7-43f4-a399-32371dc9b739\n97d78dcc-5d23-45ac-b085-77254bb45013\nd6527ba8-ba9a-4524-af69-e428efb0d020\n1232a5aa-c1c0-4f31-8946-476e3a421f7f\n560fc215-1a95-4876-a1d2-fa38b155db0d\ne1bb1d3c-6bb1-4184-83bd-a7d4ab4ee189\nb6c1df97-673b-4698-80c8-a3ee79a532e6\n16f0d272-4264-482b-abb5-82f5f0f597c7\n441dd476-edde-4d34-a901-4907af7679b9\n67cae38c-9832-4cac-9f81-5f8f89f71367\nd9fb8913-84d3-4180-8521-80a04c860c5d\n978e7f49-64b9-47fb-a66c-ff74354963a1\n9e9c0612-4f0c-49e1-a731-d2239d9118da\n82cd2df2-fb5b-43ed-9d9e-3c352e188ee1\ne1975001-2988-4fe7-a64d-a1d4e51969ca\n99dd9bc9-b5a1-496c-bedd-7b4f13dde83e\n942afab1-e004-45d1-a36c-80ad701fbb2a\n6991cb6d-096c-44a9-bb3f-2e20a0421452\nd86b12a4-0af0-492a-98bf-bc560ef66de9\n52432b00-7ee6-454d-92ae-0ac5e5be190c\n7b62c606-e9f8-49ca-924f-798622864e57\n97134aaa-5117-49d8-977f-2cf31df25497\n0280c871-e569-4f2b-b478-4f6e4b20ab94\n40720487-c4b7-4aa3-96c0-d0f430366c4e\nc863c9fc-ea44-4e1a-9b4f-abeac5d720f4\nb4893a2b-737f-4c93-9475-aa9326e3bce0\nfb23b304-c3bf-4f2d-bc1d-78647a7b8d1d\n947f9762-3d8b-4221-8710-3aeab24af324\n1bee086c-afd0-4cdc-b7e4-ca1275b04272\nabf66821-571c-4b17-9ac3-8fd9b1c503e7\n3ebc26c4-7439-48a9-922b-da502016f585\n433eefb1-0f6c-4bad-91d2-e114ff6acc01\nb75bb464-72e6-4f91-9046-85653c94e4f3\nf6264b2b-e3ab-4626-900e-716a65d8fbc7\n8526e239-9c43-4a02-9e41-931d530de138\n627bef82-5ab9-4b74-b184-1cd01af91e67\ndf5a7b5f-b290-424b-8175-5811784a8a9f\n7db8a6a7-41cb-47c3-afd2-54aaf03f718a\n2395812b-c14b-4d88-9cb1-c3b1bbcc8ba5\nb405bf4e-2904-4344-ac31-d0056e587e0c\n8cf535d9-c622-44f1-b8ff-b9299982cb81\n803cd2b7-1658-4694-8135-f7ac4d33ac2a\nfd47ee70-15a7-4b77-98cc-f9e3a5929759\ndf0319dd-9638-494c-90d0-7296c19e550e\n088a568b-e0dc-4743-80c3-80a13c683591\ne9fd48e6-3a02-4848-ad94-75f682b9497b\n4c0e7640-961c-4a85-9766-79f28eb59900\n27f7d30c-843d-4cff-8cad-9f4640cb6d00\n82d4c1f4-243a-4f06-949e-86f39620548b\n262cc625-8ab8-421f-93e1-27d5ed6a768f\n74a4d00a-799d-4d33-81fd-6e882b3706dd\nbe70a91e-f65a-401e-8d15-bc873901d3e9\nf9948c07-a60d-496d-9d15-386c787c3ecf\n5382af92-39b0-41a4-94b5-6c3ae1e85fc3\n2d4a95d5-41be-4233-8595-6a9f242fffb6\n9b9368b5-a1bd-4225-a18d-a0e5258c2bd1\n954bf977-3d41-4e1c-9e95-09b628745e0d\ned9aa613-a1f2-4898-be41-c612aee45404\n95a0e0ca-95f1-4089-89f4-544c42099ca9\ne8b6267a-0577-4204-968d-63f68980fe25\nb9aa84e4-42b4-45a6-b173-865ab03d6696\nfdd7b91e-05df-42f4-b88f-0f4a4d7733a3\ndbd4e46e-39fb-45b1-a789-acffe69b0ab9\n56974269-be33-49b2-ab3a-783fa77a8dd7\n438ac2b7-eadd-4e80-b957-b400dd3cf11a\n92fd0f09-30fb-4053-b3d5-04585e7e9c9f\na262cff2-0e18-43ac-92fb-c1f275d5940d\n4a008200-c2eb-4ce2-869b-e6e2f91d4f82\ne31e2e90-1f28-432f-bfe9-a7515524033a\n045a2db0-6d10-4af1-97b7-b2fb0ac62231\n19cfa2da-2ac4-4a24-a510-42b9f89967a5\nc166eff3-a6d1-45e1-9103-866bf0a50087\n129fb8d5-07f5-4b8f-b0b9-ec7e33a1f593\n763d753f-9a5f-4bc5-82a8-39f62cbc46a5\nba14ff39-3990-4711-82d3-406205b7b12e\n2a04372f-101d-42d9-b8e3-d3cd73c34d29\nfc58fe2f-126c-40dc-85cc-7c9e6227f74b\n603d6360-f2f7-4fe6-804a-55423364a02a\ne1853309-f7a8-45ca-a00f-313138f4398d\n33913cc0-3808-4e85-9e3e-ca79f866a41c\n1a5c1b39-8586-4f1b-82c1-7de81afe3bf6\ne2c7a05e-d685-4eed-94c4-ebf5df70bb57\n4f629d00-4a8e-4393-9bff-507656c0eda1\nf5a38175-b5ea-4bd3-983f-676e29c135dd\n8ea242e1-6f03-4e38-9171-fd56b955fd3f\ne223239a-f6c3-40e5-849a-cfe7ec8b77ed\n77ab1ed6-261c-4a40-9280-c3d55a7a117d\n3d3bdce0-bc1f-4e25-a5a0-3da801160a6e\ncd4be736-571a-4c0c-9c8b-a95824997108\nd1deeeee-9f2b-4ce2-9941-ca92af505281\ne890688d-3bd7-4b42-ba33-f110c16a61a1\n366e7b9d-c6ca-4b95-a47e-23c55779082d\n709d3264-0c5d-4e13-95d7-196365bfabde\n0f41db86-ce56-4b19-b741-b79e20e2a3f4\naec0d6b6-6dd0-4696-8f8e-010f111577b5\nd458f238-d910-4940-a96b-a2da6fe42bc1\n65f3cf59-e12c-4e86-a507-608625fc65ef\na7c2045d-7cf1-4751-a414-e073fca989ca\n49797ff0-440d-4f17-8063-007cb187291a\n5ae89394-6797-4357-8bee-4d0cd73312fc\n4d2ad5d3-8905-4000-912d-e93a0834cc1a\n593df622-5221-4f58-aa92-0e46574e3731\n87a7329a-9e4f-464f-bb87-94bb38884282\n6b9494e1-9701-4464-bcf8-a5b174aa030f\n3d7adc55-30f8-433b-902f-bc826da61ffa\n054bebe7-7ab9-406a-b7f6-749a4fca7e76\nc589d8fe-23e0-40df-af8a-343eeacfae71\n10f0d778-218a-4214-82e7-93bcbe9e8c72\nce879ff1-cce0-45a7-8bcb-ff793b6497df\n6df94969-d6b4-4859-ae3d-7ef03186043f\n902c32fb-01e7-43a8-ac6c-af3bc19e8a1d\nde155538-24e6-476a-a89c-1af0128f5aba\n60dba684-e5ea-4bc4-92c6-515bdf36a271\n9b9d9beb-d2e6-41a7-b49f-05d4f2b97053\ncb27d097-3820-4b5d-b720-ef7953a334a1\n830e4744-23ef-4444-9438-34099b8dc8db\n8dcda148-75f1-4326-9566-1cb25ece5dd1\n659a28ee-90c3-49fb-b297-6fe7b1c5e8b8\n741023d7-f105-4f86-895c-883cc382d917\n14c33909-29c0-4e63-8e3b-bace85098773\n570d6b57-46c3-41c4-b8ac-3c0fe108bd7c\na5a319b5-85b1-445a-82d8-59f4eb8d426b\n388a60d0-7170-438f-ba4a-e85ad5134ef3\n982ae636-e150-44cd-bb15-dddc7bfdaab6\n5fbad5eb-f611-4dc9-ab4f-9e033e30f169\nbe8f4877-0140-4fc4-be05-ed8e9d546f22\nfdc63424-d554-4e1e-9d8b-1fd89d9d31f1\ne82c8d63-fb33-4496-8002-13cd48b66157\n61518706-dc66-4e49-aab8-45d0c15dd99e\n651033c3-384f-43e7-b820-5653b705908d\n2b2afc62-4067-4d3e-a9cb-19e41d27e9a0\na07d236a-904b-46bf-a9ce-ef6c7f099759\nddf51ffa-6df7-4a1a-bd50-59b452718e9b\n9920cff3-e141-4011-8c53-7a7168f4364c\n64299cc2-2965-4b34-b2d3-d0a05123f3da\na78b786a-f5dc-422a-ba1d-e9f8a95e3b5a\n8c4c06b0-8691-4ed9-8210-d4c107080516\n290e6ccc-c9ac-4b62-8c04-407972d8138a\nb80b1ee8-a7cd-4933-9618-c7eb93f4651f\nc7649cd7-48bc-4076-840b-6d5b318f9ad5\n0ad8cac4-590d-41b6-9c22-10e35b57d18e\n7ecb2c09-3146-45c1-a30c-5b700337143a\n3ed251cf-a8ca-41ec-a67d-06c2c324ab8a\n3d7c7221-fe6f-43a6-b623-c99d03053d9e\n1df8571d-c2c1-4bc1-bf73-a2cae32e5d06\nbaaea906-c086-445d-9959-616583f83631\n093e3166-1586-4684-982b-72491e946c8c\n3d3d4819-f87a-42f5-93dc-e04b8d254d14\n2d957759-a503-4d39-80a0-735076d24eaf\na97ddf33-0d0c-471e-ad55-524c616cc27c\n78bec00c-d38b-41a2-af4f-f6496935b843\naece0b44-928b-4040-9b1f-38065e458f30\nf1a6968c-4443-49fb-8cdc-23c87fd62cb8\nfd85ba58-b604-42f8-91e2-3b1661503a26\nf55a5cf9-fb2a-4acb-be8c-ed56b2f72966\nb8a6ce6b-7864-4e79-883e-074fb91164a6\n1c91233c-537e-4936-9975-ddcf4d8ed661\n1a5f2332-09b9-4143-9a5d-8db26867e76b\nf7243c9d-dd1f-4d45-ae35-5971261dc5c7\n8a1ac650-a218-4027-84a6-f9f6242e5443\ncb1dbc30-8712-4bae-911b-d89d8dd6ea53\nc856a761-8e10-4a4f-a241-8a0405c92d1b\n57fe6b73-0d8e-4d56-af93-a330bf88a2b3\n07bdfcb8-c4dc-4169-8362-5ed04ab49032\n97834990-b9fe-42bb-bc13-e2c0419a983e\n5ef361ae-1c5b-4e27-b99a-afea3aa66114\n0542e8b4-76e0-4e1b-a50b-d729e3fd4bfa\nb74e84a3-fa7b-4ab3-9773-8f8aca44b5d3\n759af495-13e9-4c12-9bbf-e7461911a5bb\n6f6334b5-a137-4c1e-8eb8-c1706039af93\nb893bdd8-c8ff-42b8-b2cc-a55e6b3c72fb\nc97cad17-5a24-41cb-ba8d-6da9eb2c91ed\n47ed6485-50bb-4a48-a71c-1e7fbb77af6f\n93efafdd-e469-48d3-a0da-60c1f0aac93d\n83e0cb68-bc91-4071-abed-96f59b80fb8e\n6385dc17-2d6c-4695-959c-dd2131b673cd\n1a4761ae-e687-4b19-a060-e4730a360df6\nbf5495cc-a4cf-4534-918f-4e23a605d201\nfc18a6d3-a2e7-4936-8c6c-a6cdb23bb2b7\n3bbf3059-19ca-4ca8-9e8d-4de23fe5efc9\n98edd33f-c1a5-464c-a15b-be7ef8a6f3fb\ne5f74559-6eff-4827-83d5-7474b0f80b5a\nd98fab56-65cc-42c1-8ef6-b5d2bf8264cd\n72e5a58e-d527-4957-ad8a-093f6c31371a\n1a57b827-98c7-46ff-8765-d57515d0532e\nc5363797-db48-451b-97d9-24f2b747deb2\nb9165aef-2698-4af7-b0d0-af281d1520f4\n4b8fff16-8eed-46d7-8d9d-64c451835d41\n95a222bf-b16d-4b5f-855d-6ba497f344f8\n74fd79fe-1d7b-478e-99f9-c2b9d2d3276f\n4e4650bb-851b-456b-845c-b9299c76f845\n2c278229-d361-4627-8bec-1061b06b5b79\nda5bc6ef-be6a-47ce-93f9-e5870f1e9ca1\n5a6e39b3-5b95-4d3e-83cb-118e3669c0a3\n9303e9c0-7830-4e23-826a-8904b49a021e\n18b9ecb9-df66-4613-a5cd-13524752d167\n95c9630c-9a9a-49d1-b0e4-56f918b40175\n798c0bfa-aa05-410b-a536-d7949d60d05c\nb385bca7-c47f-4ac2-b0bc-da89890d21c3\nff3dbcfd-bd81-4f24-b8e5-2abeefa90b49\n6584adc4-11e4-459e-9ea9-60759dd5548c\nd016e3da-b51c-4322-a89a-bdad4b040a45\n93cfc11e-1fee-40f2-9b71-763a5627125c\nd9271c87-a720-4131-b5d7-c2893d5a1e27\n56196ba3-08cd-4728-b60e-9e816b971f91\nfaa9ac96-d6de-418d-b8c2-ea8874b3f9e4\n7affe13c-334f-49d5-9ee2-460c07d84456\n75fc83ef-8b95-46d5-bd3e-1889be203762\n34757409-94c8-4fde-ac65-84b0cd4a2b7c\n68711bbf-5502-40b1-b710-9344fae2cb22\n3f39d9c6-1e1b-400a-83de-75d7de1d20e9\n27558618-8cc1-478b-a502-1827947fb4c4\nef187168-fddb-458b-a1c3-0e66843e90a4\n129942e6-ac85-4b4a-9c53-0341ceb3210c\n31b7d56f-cb11-4db5-aca2-12607b4a3219\n2c5e435b-808a-43a2-a49f-2a355a740449\n7dfafe64-a622-4e2b-99b2-4237920b9874\n5b72e70f-7397-4594-8a55-0abc6ab0cb22\n47d078b9-7428-4c6d-b5bc-df74cece012f\nd1d05350-fa21-40aa-bece-b81478473c94\ne2da31f0-aad1-46dc-811a-3cea180e3b4f\n5d130bae-1b9a-40f2-9bb0-e0fd7dd033b6\na7054ae4-c24b-440b-97fb-338fdcafce21\nd5a603ff-fbec-40f4-86f1-ea5a6e060690\n04e3f037-8ad2-4570-9758-e3b89ec299ee\n4084c7d6-26aa-4b0d-ab60-0bedb7c27103\n81d1b1ae-3629-474e-b35d-8736d99dea82\ncaccd5db-1ff8-4d70-8337-7c1c1a8e6d39\nb4b95a70-d321-4004-88c4-41a4a1a27ee9\n7fb6fa36-71d9-4159-9fe4-2f0183960cdc\n6f6af748-2113-463d-9e08-5446bce27c25\nee0efdca-f202-4af7-8c97-1238a350c358\n8150a964-6b40-469a-a70d-159f9032e2a0\n27f6a9f1-826d-48a4-acc1-76f21e84b8b2\ncc62e44a-e7a3-4934-8ae1-87b73ed7ab43\n8b13db33-1ac8-4a1f-a251-093fc4beafc5\nd901cb11-f83b-4813-b751-a5be8ce2ad36\ndcbcd35a-6011-460d-a6ed-8c072f09b44e\n654fe1e4-8665-4208-94c0-28313c63a6cd\n7f686c0b-085e-49bf-8637-63734b0b1a40\n6a82ea48-b7a4-4fc4-9446-9840c2d1fe57\n22e2a4a1-aaf0-4193-a2f7-b13d82e2b2ff\n3d143d63-8d86-4d1a-b9e9-537127472884\ne519e41c-f9d1-4cfc-b830-12d805520567\n3e19a4b0-e54b-4b76-8813-9f20defefd16\n8c2f3011-a723-43a4-b58d-1a2d0fe7b2f4\n760e3142-be9c-47c1-bd56-d31d528eac70\nc7f3c397-7fae-41d3-86aa-a6c15e51dc74\ne5d3f5fc-69e7-4b36-aad0-319c4c003b8d\na2475852-763f-498d-bfe6-d811135ff3c9\n6801ffe1-1495-49e6-8e67-3ffd553b4201\n76a46ef7-f42f-460c-90e2-a3b7b8ca427c\neaa0bcf0-0a56-4a19-a872-1f01d34c555a\n242107c2-6a62-4042-ab8c-dfbc657d2c3e\nc51a0042-3ae9-4803-9db7-4c8e0c1f9b50\n3ee0b1c7-fcf0-4a3c-8951-528915a572a9\n0f81913c-cbb1-4e89-bc87-954b8b7cb08d\nf3800c94-1212-483c-94f7-7261d870d0a0\nc09b6bcd-40b0-4687-bdc5-cec2d22f4265\nc286fe75-33fa-407c-94e0-748036d0d565\n809d1438-2e29-49cb-b39f-5c01f5fd82f3\n3e2bd57d-5932-4e42-9b3b-cb1b1d610aa3\nc715806d-b42d-4200-a12b-45092dcfc23b\n644dfe36-52c4-4fb8-9326-4145016b42dd\n295e16ec-5a79-454f-80c1-a169530b90ce\n3bc4af39-dee0-450e-878e-3c4a4368aa54\n34e268c3-bf62-4fb6-82a2-7e4eebd5f888\n6c33e641-6956-40f1-b519-c75eb047a9c7\n343c1779-020a-439c-bce9-5d237f5ea6d2\n0ec57a2f-3d87-4959-83d0-7b642d4b157c\n5ca628dd-f854-4cc8-a2e9-cf8164b1cd9c\nc36da6d1-a310-4fc8-a185-287d1455247b\n61ceae93-5687-43cc-903b-dbf2b0efdcdd\ne377d9eb-023e-44ef-b7b2-9484dd7dbd40\n8597f02b-b9c1-4b1c-a1e3-7bb5d630d686\nebd18ec3-9545-4fb5-be34-a20cbb6906f7\n6acb35fd-85db-4d89-831f-51e5965d42a8\n6c37e028-ad25-4a39-9bd6-809528b858d4\na6e3cacf-e165-4122-8104-69db9f770060\n711c5b65-69a5-4671-8993-fd2e4094162d\nee2b34ab-acae-4c05-99eb-ae0a762d5ae2\n1f0917ba-c6fa-4aa5-b4a8-84140a9f2de9\nb50b62c8-5825-4139-b4e1-9af308930d67\nc816d466-d4ed-4d56-8f4f-90ec977d1219\n2e925fc3-550e-45c2-9ed1-29c640992135\nb92e4365-d9bb-43e4-a5fa-1b8cf9410f32\n447a0343-923c-4d1b-9a39-134e8e899731\n5037b020-b9fd-46ba-ac8b-b71905216b01\n64f273fb-87c8-4094-947b-64deb0725bbe\nad06e6f9-213d-4d9b-9b1f-3848a37011a1\ne9cd9dc3-406b-4c91-bd4b-6dc6c2536c66\n9fc4680d-363d-42f3-b768-bb8d6c55ff47\nfc26773c-2134-4d69-9c77-370931c129f5\nc5117985-1398-4aae-a02f-420db915fa6d\n0b8aebaf-a887-47ee-98c9-29a2d4241a43\n78400b6b-55c5-40d2-b864-ada4e18616cd\n42654c99-7972-459a-aa41-202f48e30537\na5ccaf64-1993-44e0-a8c6-716f4b32e9cb\ne5aee258-cfc9-42e7-8db8-ee821db477d3\nf623b1d0-cf65-466c-9c1f-32651b68d925\n4dc3fc7a-6919-4eec-8254-eae28b327a1e\ne0b834c6-bc0e-401f-baf0-9666d2fabcf1\n89d70f3c-a4ad-4aac-9736-9db1bd420a84\n7bda813f-8809-4c4b-b76f-facafb9244b9\n3b58e178-b223-4ee4-a617-b75c1873128f\n39316404-5f74-4534-bf10-a34aea212dee\n55e7b5f0-ab51-4c2e-bd51-cea45a0b386d\n22cd83ba-c1a0-4910-aca1-7911b87486ab\n4a4ff6e0-a7c1-4d2d-b889-e7c539204a89\nd9bd132d-ee63-4e2f-9808-6521bd8f9c42\n9f6b818b-e573-4fad-a1f6-2cb05646ff32\nff72609a-0e16-4a1c-8fd6-008dbce7b36d\n37426ba4-c1b1-44c5-b355-c35befee9f22\n5f3fa51e-ec62-4f30-b45a-965c745867e7\n187206b9-c675-4012-9e9f-2ecd00440650\n66a4a691-e86d-49e2-85b0-e869674532ae\n6b85ce2d-941b-4a16-9d81-f878caf221cd\n58a450fa-8564-4828-bedc-7df1ef57db1d\n5171ee8c-2d87-42f7-995b-439b687d1ade\n20a18365-644c-4475-8421-2aabab21a079\ndc783ee2-b126-436a-af94-eb6482df6a10\nd3eaa91a-9ed5-4e41-ad5e-8cab79024d39\n9c904f94-c1eb-4dc9-b47b-218965edae4c\n739ab902-ccd9-4425-b334-fee05e7b653a\n68248745-3328-4531-8c25-6e6ba92669b8\n606fb214-df6e-4bb1-b14e-edbf5b6ce1cb\nbe6c550d-8898-453c-b51d-9e5063d4146a\n963c5b20-6135-41c5-a0a2-0fb4406a832d\n21f7bdaf-836f-4199-8b75-d356f8fcdcf1\n8d09882b-eaa4-4428-b6ce-3323425647de\nbcb881ca-b86c-468d-baf1-134c3a4782d4\n0a801c6d-06e5-4c28-bbe4-8f2b0bf8f626\n23ad5270-9bd7-4b00-8041-12f341875410\n1f0cfb65-b259-4300-93e8-0d47548e3aea\ndefe221d-f87c-454f-95d1-69d68ba9824b\ndeff463c-9b4e-4387-a29e-616d5b8971a0\nd9202947-e6a2-4c9f-916c-a729d2bc00db\n936ffa5a-bade-4b41-923a-351167fe50ce\n7e8d8913-1e4c-4a42-83b9-7924563525cc\n08ee2bc0-cb4b-4769-91a9-8d83a0e6ec4a\n81cfcf98-b7e5-401b-b062-679b50624542\n8836332a-1503-4f8d-bbfd-c6a15c13f5ba\n5ef5c9a1-bc68-4f9f-9393-a20117fcd1c3\n6b93810f-e7ed-4395-b35c-4cc6fe98482f\nb086b514-b5ee-4c5c-b925-7c740dae78a4\n850b2bf0-6752-4bd1-b371-f8a9e3df57b3\ne54c32dd-7c4b-4b45-9105-c46eb9ccb831\n1fb426af-941b-4386-8831-72b2b72ab4df\n435e1f5c-5dbe-4561-a3b9-b830f18e7405\nb8102262-1b8a-4e9c-b825-edc7e759b682\n9750b41a-4843-4bd7-ae39-f176817f580a\n8c7f4604-6e7c-498c-8c50-c446247ce6ea\n0530a722-c3de-4451-a2bd-966e1595049e\nc13f7d75-c334-4e00-9d3f-f655c4a4c901\n1adef3d6-69fc-4560-84c4-f0d2d147e769\n28530696-9810-4503-8627-fb48b26ab98d\ned9c4102-8a53-4f95-911d-165a3f30162b\n0c78805a-8fc1-4e43-b5f9-278d14604c36\n1b63e4cb-13dd-40eb-a4e5-629a817c0f8f\ned3945a3-2972-415d-91dd-ddd4df49433f\n533dcb31-a0e1-48bc-b729-b65920606869\n8cfc0281-7e28-4e3f-9d12-88aec89ad6f2\n17ce51c8-24cf-4e56-a72e-6b47c5c48135\n5d5cbb44-9017-4dd1-878b-dc23fd5683b9\n3d1927bc-8bfa-4ee9-a908-950d89cb3d2d\n5bbf2917-1d0a-440d-beea-36b27b09b0aa\ncfaafcad-a410-4f19-ab71-87bb40673394\n95f3be33-af65-4b26-8d48-517a1cce77da\n256160e5-f508-40da-9ca2-4b41063abbf7\n3cae7e0d-78b9-4a68-89ed-afbc3afce9ec\n33920abb-b5eb-497d-be9c-47cf745a0e33\n1bde553b-6fa4-478b-8223-a872973e016f\n971c2521-f7be-4295-a233-c439ab9111ee\n4bcd80a2-5bf3-4f62-9169-9a6a93a51717\n5daecd6f-a280-4312-b7ae-47767914d773\n1151ca6b-c456-4ec4-8598-24ee8fe85302\n8b5b162c-42ed-490d-aff8-d63a3b89f202\n8bd17d66-0b9a-4230-9990-d2fc881a03ac\n0769047a-f2b8-4a53-9720-b85a69a512b5\n601b6385-00af-470c-a9c8-9dadee92f45c\nff835956-2e94-4469-ab69-4b6b1615d50a\na8be187e-cc47-4154-a865-278c04d88945\n3ae0192f-d28a-4c6f-9e09-62fbd8870651\n57bb9af3-113e-4478-a847-7d7e18c7b850\nf6fb069f-2fc9-4890-9cec-2fe8a7a705f3\n8682b286-d8c8-4461-890d-1f86c7b33c04\n5a089c26-f6a8-4cc3-b2ec-3b695f33e99a\n499e21d9-90dd-47ce-994b-fbcc6d100382\na321a3ad-fa5e-4203-8f6c-2a3982e2be42\n329a7e0c-6699-4b93-929a-93934b794085\nbe479180-0806-4e48-821b-d1b42c2bb1c1\n031549a5-74e0-4110-bad5-63bcb756aba3\nd906e83d-65c1-4789-9100-9c93e6c41470\n3b6690da-3369-45a3-bbb7-935adabc7bc7\ncaf96c70-40d1-4d71-be8f-01aa22e1770a\n6faa3ef5-fdb1-432f-9f47-89c70c0d1a1d\nc80e099e-cb0c-4440-b10b-87a9837546df\nbfaa89b3-fd62-484b-bb4d-0cf69227656d\n97811642-1ab9-4795-ab3c-90b930ab28f8\n579c911a-6fa7-40a9-930e-a13ca83e4867\n8cf51c8f-8791-48db-aaf9-e2016982aedb\naec97e20-7d0b-4990-8bc1-ec8dda799431\na06ec9d9-999f-4ae2-8b0f-86ed76255ea9\nfda42550-69cf-4b5a-9573-2111cfb91693\ncfb7f544-61d2-4e8d-a557-07a8ae27d5de\nfe71d7f9-194b-48da-b97c-945c1404f50b\na9f133e7-950d-45c1-9d51-ff0fbb98c97f\n71ef1627-f620-4e90-8511-5f7fa1d693bf\n40a16aed-1ac0-46f4-92fa-4fe3629b2011\nfe075d8e-9d75-44cb-9a4d-6bfeb6494b0e\nfce733ac-2807-419c-be9d-1431ada9692e\n5dea0be9-b715-42ff-9c4a-f2d00a8191f4\n1390cde1-b0a5-4883-a323-99d35d443a0f\n9043ef7e-5e0b-4818-a1da-9ca1271e644c\nfbfcaf7b-9d36-4912-a1fd-a4542c8283b8\n9356f96b-8b70-440f-939c-270f43a06906\na661bba3-125a-49ad-afb9-bb3f8695ac92\nef025814-2d35-476d-a223-37b6c5923386\nfa520e62-4d7a-4a5f-9902-a8df865233cd\nfc871afe-a20b-45b4-a094-4177fa8e24d3\n808e161d-8df6-49ed-b83c-1e57102c19d5\n9fe5d22d-3d4d-46fe-9e49-87f9e40347f0\nd306b0b4-0891-4018-a7da-da6aa815a357\n94c40221-8b96-4b06-99fd-dd348f67cc3d\n30f8acf7-2e93-41ba-9116-8dc0c8800fc1\ne0e9c796-ef63-4ef2-8bb5-70391a75f0f8\ne908c94b-e29f-46d2-8002-0f77ff17f842\n04e36bf4-d5e5-4b87-854a-387dbe7d9516\n42414e2e-1f19-4106-baff-542c8774fca0\n6c7c90eb-8148-477b-843d-26c9c47004c9\n2328efb2-f286-437e-99b8-46dd51fc2aba\n60a097bb-e411-4866-81bb-d10d9e0d17e9\n93a7cc99-9099-4e30-bde2-7f0a00555d4c\n242e82dc-98d5-4dba-8110-6846ad49c1c0\n24d8bbf5-5699-439f-bf87-08616df00ac0\nb66120ba-5d0e-42fa-9a4e-d6bd1ebea22b\na695a622-54f7-4346-aa51-3733581a8ab2\n02daed9d-fad6-4f71-8a9e-ddcc956fb574\n1e785523-15af-45c7-a1e7-1660058fa313\nbc273bcd-3212-40b4-9a0c-58bef300f56d\n52184550-ae25-4044-995f-8c11c9f7997f\n7f11ebaf-3877-4d4b-81fd-48c1e80f7cc0\n7ee839ec-2b15-45b7-bb91-7b6f765bb88d\nad544785-2f7b-4717-af18-c650faa902a0\n0d244d44-c05d-490b-8de8-66f7c9164541\n7bb4798c-7930-4e6d-9f73-c074ed578493\n3956f3bf-9a15-415b-95ac-379abb14df25\ncf790636-232d-4af4-9758-82364ef1cd23\n1c5b600d-1a86-4fe6-8ece-6f04c68ebe46\n8f634721-0119-48bd-bb05-e8cc599537e6\n85f73e56-793f-4b0e-982e-3a8b06fbf5fe\n0c27683f-acd5-4bbf-8e8d-337c2cf1be0c\n40e14db1-2603-4349-b45a-55e4d210dbf0\n743ef236-6ee3-4050-8bf0-ff08c54a19b1\n21dd0a88-926e-4fcd-bb85-ae003aa9527c\n11677a16-a13c-4537-956a-ce16fd59347d\nc453f20c-1302-4bc8-a230-6c43b349e195\na0a18abb-4efd-4cb6-a4f3-9c1033185efb\n3dae89ce-b567-44f9-88a1-1bc0b5f43be6\nb774838e-2a17-4b16-b8c1-4d74ff32c43b\n736efee8-87f9-448b-9467-9c4590b972a5\n6d7bba1a-4af7-452b-8090-905fec268a71\n36d5892b-c0b1-4ed6-ad69-23c0b72efdda\nffce1139-b1e9-4c2e-99a0-2081713a098c\n6eeb4d61-845e-4191-90cf-b3445d4216a5\n535047e2-9988-4cfb-a37d-a4cc8aa8ec56\n9a85d7ae-cbf7-4e3a-a80f-6282018833aa\n84e9077a-d975-4e71-88b4-0924bc2edd2d\n48e81259-4deb-4fd6-a59b-9d56e0988ac0\ndabf08b5-139f-4eaf-b42e-6a53b2a085e8\nd07889ae-2cd8-45ca-8616-a609739c594e\ndc397b3f-7b37-421a-a1f4-b76030be3048\naf86e897-aef3-45d9-bac6-7382d042ded6\nf6d53026-1b76-4ae8-a7cf-296b1ec4a02c\na5ae2404-e8da-4db7-9698-116a7e400885\n8adb84fb-1ee6-48d5-89db-ed73f25891fe\nb03f12a0-71d7-4b85-88f5-bc842f6fb1ca\nba2052f3-acb9-4cb4-8168-8d7f6fbdf826\n8319eb0a-a1f7-44ca-8f26-653076a3c262\nb32f68f4-e870-4d49-a5e9-4a07ab4ee861\n4254cb1c-759c-4692-b3f3-d531ee3fa979\na7a0862c-f584-4e89-b939-d65334408ff8\n82f00461-ea24-4343-a3e0-b889c75d53c0\nab45f02c-fd60-4c16-aa55-b2ccc6b73d1e\nb8303afe-3ba8-45bc-b546-e6ac67bacc96\n3d9c96de-1955-4234-99b6-b33017726ad9\nf9ed851c-0eca-495a-8857-02a81fb15dbd\nb6fa0d35-a314-44ee-9c3f-a8187589306e\nf96e1f1e-0903-4c5a-a1d7-b1dab26fc210\n13372c4a-a550-425b-b252-ef63eb22dc27\n7d774095-b928-4728-9888-ef398ad62993\nfaaabf6d-b71c-4a99-b448-718594b5e6b0\nee659976-efd3-47e9-acb8-ce51b65d22d6\n6366e9f4-95af-42ee-87d8-5656451bc418\n4b0e7534-1d40-40c6-a50e-64b4447b4f8b\nbdbbae64-b4b0-4af3-8487-48e38bb5aaac\n98cd4f29-a4d6-44f2-b2e2-620d16a467aa\n374b8011-6619-40ac-bef9-d698a42341ae\ncae42c11-afd1-4f35-871c-b96fc4724c25\nc9134c05-7020-43d4-b4a8-67bda0d129f0\n9d7b0235-1676-4207-8149-15e80f7dcae1\n1a9aab20-bf65-460a-a2c6-83d46d443a57\n1ef89bea-d293-4d5f-a728-f1f4c4ab0874\na18891a0-9fa7-4986-8001-f4bb5c73d764\nbbac369c-01c5-41ab-be13-298234748759\n3819d571-55a4-4430-a6d8-444dafc65a54\n03e13458-7f91-4c35-a105-dbf1d3f683e5\n828a1502-3c6f-4f61-82b5-6cfc76b59a89\n64d9e601-4c53-4147-89f4-96875a43faff\n74d18891-5e72-4279-96b3-4fa84a01ac3a\n0c59731a-7ea9-46fd-99fc-4822bd664288\ne116d830-51e5-44c1-856f-13f0a49a359d\neba55090-6ce5-4f6e-ac73-d96b63a13c67\n5fe5d22a-f888-4358-bd2f-f736099f1989\n90d23a86-8a38-465c-80ca-d87855bc4726\n8c1b6b82-11d2-421b-97f8-00333d4b316e\nf8c63203-404e-4c7b-941f-fe7c93e930e4\nfd2904d1-a8e3-48a1-aade-1a96515c9681\n27e5469d-1ae8-439f-b6d2-67b70b09fd75\nbf6d488a-7d58-45d4-823e-f1b326563114\ne330dc50-236f-4886-8c74-d9273a7faa7d\n3200a758-d86d-46fc-a023-77be8b560b5d\n6934aa2d-8ed5-42be-bf61-ad41098f9da3\na87b81f4-530f-446b-91cf-44cb64d66f6f\n8e140158-ea8a-438a-963f-e9f5fc6e11a7\n224c25d4-b2b8-4a28-a2a1-49cf50d3468f\n141abd22-d3dc-4a70-8e17-1b798a16aa77\nf93bc859-adc3-407c-8fe1-b0e9a2606511\na4f108a5-6394-45a4-bf9f-56f999bda69e\n15f69bb9-cb04-4b77-aec3-c95ebe22134a\na3716fb1-27bb-465a-9b34-3742a4887c58\n697b6857-4436-4edd-9765-4ae6db0d998f\n97c1e5a2-d91c-4f05-b646-033699f55df9\nac59a6c2-8ca1-45f7-a5e0-f8b5dd7bd07f\n71765875-9254-422e-bf35-be7d79f65316\n29201270-8fa6-4f34-bb2f-4b8ef2de6631\n0c9deff8-4e53-4383-8db3-f96514f75b7d\n44e67d67-0be3-46fb-841d-703f40ba7760\n6f4f281c-fee0-4756-a1d6-fc518ba5efbf\nc1013edc-3d28-4186-9037-088690de5175\n3737970d-0ea4-4ba9-98fb-9e8a7047e5d9\nf7fdb064-e099-44c7-a4ec-2ae0fd1df046\nce27a682-1425-4164-850b-d880f7372556\ne3958b03-02b6-467a-8f33-cc7bc5da55f3\nbb1ed5e6-7e1e-483a-8b46-173c5392c322\n59538c44-c325-4ec0-a1ed-ca01858cfc08\n73b853b8-9eb7-41d5-a8b3-598a325c567a\n6ebeebbe-9943-4695-92bb-7a14f6ecd87d\nd788d843-806e-4f8b-871b-1b7703760e62\ncd325954-7483-4adb-8a62-cf2352d55ccf\n6e3c3bd5-917e-4320-ab88-4b2f6d263db6\n5a13c763-c5f0-48bb-9389-81df7ec776f2\n96a8de04-b8c8-4a62-8d94-0da6a50dd7c2\n85eda472-2236-44f9-8016-8c2f7da99978\na595f6b7-e81d-4317-a176-b439de6808cd\n49b6b682-5ecf-4b46-828e-b91406f27db8\n60a18a90-af25-46e6-8ae7-2cb97455abe4\n696f9f1d-78af-43e8-a906-25f9ad2bd48e\n02ad97ec-a6f4-4690-afeb-d2805ffcac6e\n0eed7a43-6a1c-4205-90fc-7a2e1be3c555\nd2536466-28b7-45b3-94eb-246541262d6f\nc589b112-82b1-4647-bad8-40129e52c32e\nbdbd5af1-9280-4c72-8acb-fb735e0905b0\n05868d1c-35c4-45bb-9287-e90de11b1a44\nd79240ce-5c93-4c92-bfeb-ab4a06aafad5\ne486230e-3a8b-46cc-8b96-e53b0932e41e\n25199535-f07a-4d5b-8a95-229a1b7bc9b8\n774dcb58-5338-4464-beb4-d19db320e306\n7e58e2ee-3a10-4390-afa5-3e0bb36502fe\nf86b36ef-aacc-4f62-85ac-6fce7994f412\nd9574fe6-796a-4dc2-9b51-659727d2fb13\nf20210b9-9057-42ce-8a38-b92fa8a85b58\n03fbdf15-a2c4-47dc-9918-753a936b7919\ne96f62e3-0ef2-40c2-b411-215b1ea71733\nc53599ea-8afa-46fa-ae12-b88a28572c97\n9665f972-d60b-463d-825d-776b4b87c14c\ne7a2f47b-35b4-48f2-9a27-2946af2debd8\nd68c1cc2-549e-4abb-a72d-3eef598ea76a\n5a0730f7-972f-4b79-aec1-d5e2236eec58\n64a61e93-0577-464c-a5cf-472159ef4d38\nebe91bbf-b57b-49df-ac76-1440e45739e1\ncb4d076c-4df1-4514-9a49-f1aab2639c86\ndacaacb9-7c47-487b-891b-9e0bef4d04d5\nd7261ca9-444e-47cc-8092-c7758e6ef4ea\nd52773db-eae3-48d6-b5fe-e5728e18597a\n04fa5184-0867-40fd-8f47-a2571e251060\n50413e85-36da-4af9-a48c-2c36eb37c96d\n7215caf7-b8a2-49a0-b81e-0368d091c8b0\nf8e58644-9461-4b66-aa89-487e9328e7a6\n09d8d15d-c717-479f-a4d1-0fc2dcf67185\nc85acb92-22a5-42f9-aeed-f79e4ae533cc\ndef0de46-615d-45d5-a3b3-81d29ff8f55b\n8a0ab5fb-cf2d-4184-b04a-879922e56b3d\n0f42f83e-486e-4ca1-a686-2fc816aa4189\nd32c81ae-f2dc-4aa2-aaf5-7099035613cc\nf8e3fffa-974c-423b-95c6-67951252074a\n22045a1b-a3de-4e71-8609-f3d322d475da\n5b71829e-2025-48b0-aab1-cdd8b78b3903\ndf8be998-047d-4e5e-ae37-da9c7214d67f\n40bf3f29-3042-42d1-b522-d3745fb4cff2\n305d8300-83dc-4d1e-ae81-5f4fa3622036\nf5c6f932-7855-4939-865e-c9bcaef50eeb\ne1b87c61-4239-437a-8cf0-a305a36e183e\nacc94cc0-a0ef-4867-9a83-e0fb53568cd8\n542fc5f5-cbd7-428c-a22d-0205c2d0a1c5\nd4b7e705-cde5-43a5-9147-94b82906fcdc\n2ef59678-3037-49ad-91d9-c2a2850d1e47\nb9d0b25e-c246-4c20-940c-9fbc1441ae71\n9bf99067-82eb-4abb-ba3f-a8cc79b072b1\n1bda7dc7-703c-4af7-b3a9-fdac7722b778\n2b4494e7-4f92-4fbc-aab4-507a7c27dbc7\n66049faf-c2ac-40bb-a6c3-2cebad4bd23a\ned364433-75be-4029-8b25-7f857023a575\n198d597a-2564-4eae-a2b4-e419472b20ce\n83e33163-27fa-407f-9c8b-ec1567862a7e\nea482d89-1df4-4761-9392-8836d8eadd9b\necc56bbb-48c4-4ceb-b6a6-a41c85c4aaf6\n18e2189b-a2a7-4816-99be-0a1581821b8e\nc5cc87c6-b00f-4726-9527-4d0e4cd7a5e3\n5e04c3e8-0083-47b4-861f-1bed13899ff5\nafd8a6f8-2433-4301-8ed7-6ce30196b82f\nc7c1f5b8-5344-467c-85a1-94e846f75fa8\n3fb1aeba-30bb-4f8e-bc7e-44dbf23eb73a\n3c74c7c1-00a6-4323-b1b1-75c5b500423b\nccf95010-e0e3-4c32-8ea1-d4d773c0b13f\ne8b795b2-56e9-4657-8b35-cd06abfe5d2f\n0137aad8-a916-4115-b1c8-aead7b427898\n49408c40-c0ee-4f95-9d2f-8c91e74f2bf4\n25ae214f-1833-4096-bbd2-8d053890a9f7\n91d35e50-c791-4b46-81aa-dd13eff08473\ndf69ca03-d68e-421d-8f83-341e6bd1f9ee\n290b31df-3a24-4c05-bf2d-4a290f942009\n40ead3f8-3e45-48e9-b0c1-0d2c37ea67d1\n49759720-56e3-45af-8715-6ec55ac8d385\n82f2d6d2-af7f-4b05-8119-78bd0f336598\n3f91a329-833b-4570-87f4-59edc5373cd4\nf9e6787e-a2c6-4156-9ac1-fd67f0709987\n4c87124d-a1fc-44f5-a563-a6ae7e98bb48\n3a4f6178-0bb1-485e-b7ce-d7275d2f89d7\n9d469908-c60a-4363-a1c0-113549ec35fb\nb4514cc5-7007-4b71-bd53-8b432534fc98\nee7b977c-740b-452c-b724-87951cccdebf\n3f7a32a3-4a15-4249-b153-396397738ca1\nfe284b39-6a67-4e81-92bf-0718c7dc954d\n865eb102-6edc-460b-aab2-f968e3655cff\n30c8aa2f-87a1-4198-a978-1ab121c7b0c7\n8999ed4d-f082-4db7-bbf1-98a96fafeca1\na591f3c3-df6f-47cf-82b0-c1acffd199b5\n7c6c2f99-45b2-4b8c-894a-21a370b8605f\n0e9328e5-13de-4528-adb6-b2e3f3a9098b\n4e5f0c2e-a416-4930-bca6-e9060be335a0\n4066a9cf-fb13-4d24-9c47-1e6b9b803cc6\nfc0e4704-2fcc-4a7c-a018-637bca6f45d7\na8ee2c3c-1d61-4c60-ae97-bf7c138261f0\n290c6dbb-63c6-40f3-9726-4ace36eb530e\n2c8c9c0a-865a-4ae5-b0d6-4cea02a821c1\n3e2365ed-169c-44b2-b14f-2c2b044ebaef\nd51b2e13-0b9e-4090-a21c-ea2721e21b18\n27c0560e-ad56-4eb2-a478-8e7d8ff2d86c\n283f7168-82fd-42c2-8db0-347831cce519\n4643fbc2-8297-41c3-bf36-b3be7a9f5093\nc0c6e7c7-879b-439e-9ed3-af11611547da\nbbc21999-3466-4b3a-9570-799d550d4882\ne09f644c-3be9-49ed-861d-f08dd3294118\n10844de7-9a35-4f14-b9da-dff2e3238fd0\n50798144-98ee-48dd-8760-44a4d0bab6b2\n4e491a0e-af60-431b-8b2b-06e330cb5953\n2ce2e605-2679-476e-a7ef-47bb007624d0\ncccd3660-e616-4aa1-b7dc-9abde3c738bf\n82d71eff-9e01-4a97-9e6e-8b60a6fa686e\nf58fdce3-8f48-4df7-b812-d0a29694af3b\n32f3b34a-5f72-414f-9778-5a985ac0ebf8\nfc60c6d7-4984-40ef-bdd2-4ae517923bcd\n7e1fe57f-7d86-4fea-9af4-5a6e31ed8c45\n32e96393-9b59-46b7-998f-afce3abb8aab\n1478353f-7e9d-44ea-99ca-4e46073cdbe5\nf6c90180-4b93-414e-b0e6-4d36acdc33a0\nbe7584d8-b148-4d53-8d68-4566600da16a\n727b538d-7f65-485b-9af6-7aa3f595db58\n34906c06-09b4-4a96-ab9d-e17cea3159a1\n474f5e8a-6014-4f6a-b1df-1d02fdd1d0df\n2f2fcc8a-553b-4c0f-bafc-6a22b94b5b74\nd0788711-9685-47f8-a1e4-3f82800d8518\n5ca583bf-7a9a-4981-b1e3-ca55ae273b9a\ne1b1799d-8aea-43cc-a852-aa5cc38333db\n867dfe80-4122-4c23-b0fb-13470a9a08f2\n8e014355-c3df-447c-acc8-1b8df44760ac\ndd3ded18-cc20-449b-a087-c8de0250d340\n18396ca5-aa61-4a07-a109-63eed7e4d057\n3b87fe0d-10ae-44a4-a69b-6b0e825fe178\n0351102d-2a96-4d4c-a1f4-a24e9b9e9856\n72463524-d47a-445d-8659-0902ce24d3bf\n0986fde5-4fd9-4ffb-a3c2-6771c347c9bf\n6d28ba1d-5815-4e0b-bc64-4e5fb62b9b45\n5c8f6e2f-e946-4118-a159-d424ae8e96b4\nb3bd654d-90a3-473c-88d5-96e8ebecd202\ne42469fd-1ba8-470c-b07a-79fde70deba1\nbf8ac3bf-4de0-45fe-9ef1-dab9249c3994\n85eb4b1f-b09e-49b4-a409-e0e7216f96a3\n2d9e1248-4f2d-4ef3-bbe3-a6c70a1a192a\na6b151d3-8a9b-4380-9ac2-95b7a5ca2593\nbea01047-77da-4552-8f04-66d36438f896\n93d52381-3d24-433c-8179-ee3b577cd0b7\n5bd440e0-0c2b-4ea1-a10e-30f2e5285316\ne1603217-b57d-42d3-a341-b03fd6271f13\nc563f4c8-cb55-40d1-92c3-8e33758157f5\ne4b9e1a4-f8d4-4079-a2ec-82dfab63c68a\nd94f2db3-2158-4ba4-82f2-96e97966812e\nae9bbc4a-82a2-4206-8511-4898bb96f63e\n2881e560-e7f2-44cb-b19c-69fc374f14b9\n8d607fb0-0d73-4e65-bff5-44c00aca271f\n2d7bfd73-cd0b-4fc8-ad49-e90598de309a\n48673e8c-8079-40b1-8b90-1310a81114a0\n41683fec-1498-41fb-b1fa-253e3290868b\n974cc7da-a002-410f-96ce-a22840185d0b\n4885f7e7-cbd8-4d0a-bac8-e6a4833defa2\n1c617030-fae3-4d6c-bb87-7ca47aee08df\nb2d938de-5b3d-4f47-88bd-06b479936214\n60ad5e17-d1f2-48ca-830a-bf30e28a1eb7\ncc740f2d-0d27-493a-8498-f87c39de43e8\n48412da1-66e8-49d1-ac91-75d809dde6ca\n6cd7c27f-70e2-4238-b5ff-4fe08f0e41ae\nd66559b9-8e14-419a-9882-6cbfa86fe8db\nc408e4a1-cee6-43fa-aff5-84d2356197bc\ndd30545e-0147-4ac8-bab8-98af9e653400\n5a357530-6c25-45f2-acbc-7148fae25cf9\ncca255a0-51f0-4a44-a274-b8e291d94c5c\n76ef56f1-7959-47d2-88d3-90785af58065\ne1fe389e-8a0b-4814-b816-8c29d1720c46\ndd39da91-c8fd-4a35-b6c5-aff5c173e545\na0d6d3d3-d7f0-43aa-b95b-354e3f5b3ab1\n99516836-15f7-4c79-b0fd-64ce592cad16\nf9ef8910-4f9e-46fb-90e3-011df767acff\n9bfd0a83-8ad0-4915-9720-649f728db859\n951341ed-9e4c-4f4f-b45c-aaedc68745fb\n293c7949-ecc9-4c70-88a8-badea0b6e8d2\n4f81f72a-44d9-4b12-b182-28c04e4c4553\n6e8b2289-53b3-421f-b5ad-fd096ae5a359\nf7186379-0132-4ee2-a849-ad0d39ba0821\n5254b16f-eb89-49f2-8632-e88b2c4ba5b9\n134568ad-89da-480c-8a5b-2e2f719c1f61\naabab89b-67b3-4c79-83ad-4fa4085845fd\n56fa25aa-b1fb-4b89-8ea9-78c213666bac\n8c39e935-d527-401b-8a10-21d7fbe4b493\n2305be00-8f93-4734-aa05-5088be0dace2\n169435be-ef2d-4bde-924a-967f87aa1f44\nb79d3e26-8f59-429b-8548-fda000b69310\nf7f1323f-4253-4435-bd00-0882059ed5aa\n6dcf970f-dd4d-4f18-a9a1-d859ee9c52ac\n77625b8a-619d-48f4-ad47-ffb006c20ff6\n3c487c26-3e13-44c7-8ef1-4519b4c277c4\nd24408de-5b47-4412-a5d5-4f9c4a9fa7e8\n6f1259e1-e758-407f-a7cb-c7492dfd4e55\n3cd28838-883b-4310-b1a5-ce0d86b5d4fd\nf5fb4de4-915d-4795-a761-ff9d756eddc4\nb886becc-ad98-47d9-8320-605821b2bf9e\nf974b2b9-5d42-4ae3-9f53-0987386df243\naf446f88-3fe4-46b3-917b-0b62bb1fb58c\n07cf2502-244c-48e2-a5c9-5fc56f9d0cef\nc1df8580-d25a-4a4a-a72d-e8f847509f2d\n69a22ac8-f3b9-4676-b26d-6709810167ca\naf5c43f1-beee-4bdd-be0a-8f8e58db98a1\n0a34c9d2-3fa8-4f5e-ba56-784dc8836779\n62798c41-727c-46f0-8502-9876d8754373\n2100bbba-9b29-4af7-a194-b8bd11ff3f8d\n7b39592b-cf29-40d3-9317-0c9c6bc64042\nc9f39563-bf2c-4f0a-b4fc-1993fbd2f1b8\nc8027967-59b9-4abd-a8f5-074459f7f435\n1b6f101b-a85c-486e-8156-dc06489936c5\nce98493b-e561-42eb-8690-b280c5170626\n80c63351-3909-471c-b0c4-69b9b57bdd46\n072da6db-e6fa-476c-ab60-a02e5315f2bd\n182b5068-bddb-46ad-a2a6-e4c7ee4867b1\nbbf512c1-1996-440f-b8e3-42d6c2866313\n6f496638-8405-4a0e-85fc-2af4ae45ad1e\n9c9cf9fc-2691-4821-b8cd-59f9e9aa6972\n037fc86c-b4c1-4235-a6da-3760a03d9f49\n66ab464f-903b-4110-b3ca-f3e9f31a4757\n7a146ce6-5637-4271-ab02-cc0a5671d0a3\n9e56904e-7703-46a4-974a-cc1fbfac1d38\n17eee190-14bf-48fb-84f8-aa104ba3c032\n4bf1d63b-ddf9-40db-8527-8e7a7bfa75de\ndaf5ef09-1630-4274-b28b-b39e7e496779\nf60a650f-c820-4d0b-9964-c0e88fd7e7a5\n1e95c3ff-05db-42a0-84fa-465bed916754\na75f4c29-95a8-4b34-a013-da6d05af339c\n61d85065-82c1-4be3-9478-2ab2fcf54842\n380c32ff-21e7-4d1f-8820-98b0808bf534\n37f0c753-9f49-4620-92f5-d5db439246d5\n3201b4f7-3a02-466f-96fe-65902616942b\na4d534ac-fe05-4163-aeab-f3b50ce7a05c\ne53000c1-bc06-4983-bfa9-1336ce597216\n5c3da420-8b49-45e9-873f-3a892ad3b931\nc41d61d9-fd5b-4517-b552-04c5752aff9a\n41610832-e1e8-4e95-9266-0df50f8a4b3e\nabce03da-6826-4b7f-a4af-a13ce8c95cb9\n4ea28d85-ec50-4706-b88d-2367680f8a5a\nad9b9ba9-a0d6-4a04-9cfb-04756641a5fd\n724e6307-df0b-4036-8fb8-537971094ff1\n3bc20b51-c7ee-423d-ad6f-94ec51cb0bdd\n384f32ba-d441-4631-bd45-9c37fcbf5628\n7c61680f-e544-4fa0-a5df-2496dbf5735c\n8116be90-3c5a-4b77-811c-9677785f9216\n7f9e12bc-be47-4a5d-8452-e77b9441896f\n2cfe646b-76f7-4b37-8491-a3550e1d12fd\n51950578-fadf-4c40-9385-307feb8e81ea\n58365272-a2df-4ffc-9b92-bd19b613a228\n5c9ea5ae-8743-44a1-b11b-1e989cb3c94f\n52d38727-82a3-4667-83be-0d8df32e0414\n94655e03-9960-4746-add6-e869b501b9df\n9a5e1a67-7268-49be-9cb3-6aef686b7255\n620154a0-3ed0-4b69-a955-f0b33dae3b21\na05ecbcf-c4b5-47ff-b9e2-187b5c9594d8\na95c056c-75f8-466f-a2d9-8993e7033a05\n50c44b5f-8320-4856-bcb4-1cde4a943e8b\n6f071c4e-4afc-45eb-bc03-92571beef0ef\nf3611e75-2424-4ce1-a2b9-1a058972dba4\n0a982d15-875a-458c-9f6e-eb71d113fdd5\n7c9f53fd-8a91-4483-ad7c-b7e045bb7feb\n539a8b7b-a16d-411e-a890-e3ad4b09566a\n7993ba59-ad4c-43cc-97f3-6085aa17fbdf\n7683a19f-712c-4984-a17f-4797a0a66a2c\n8f4120b3-2385-473d-879d-7b44f04af07f\n4a2ca392-0e59-4763-a4d6-e028f41bd6ab\n3744b6de-4b41-4f8a-8c7a-dd5d0aafdae4\n9b63c7b5-ee5c-46e8-8bfd-b974dbf9c4b4\n4683c35c-9b14-47d4-a779-4dee5444828d\n52ac6d68-0891-497f-a2fa-cdb45ef56924\n0370df21-4b85-47f4-9a04-6d74210d20be\nf0a11846-837d-4fba-9028-2f58dacda212\n7771276e-f5ef-417a-a68e-2514d5e79c2e\n9261a092-07ac-4125-b01d-8c5610007213\ne4248f1e-9e44-4241-96a9-5f5d018cd7bc\n5b5b7371-a3db-427a-990a-7eb502e1d4da\nd6f00b79-4f3f-4bf5-9c02-20aa83476094\n62e4f463-c8e3-4c09-a36f-4c6c7d4c19d3\nadb85d56-0fc6-452c-aaff-bbde22f16fdc\n906328e4-6e9e-4abc-a8a9-4ab0ea8ac389\nea456490-8610-4fc4-9307-53a6c3c795f8\nc38458a3-dbf2-4d29-86c6-308a3702a241\ne3253343-676c-4e1d-9e9a-d78f633e99b5\ndbb8ee66-44da-4e84-9ef2-421c5ec94c81\n44bcb7e9-bfc9-4cb2-ab4b-f1e211c15785\n87bc81c3-a0ac-4f6e-8046-79df015615d1\nbfc0eff4-0fd6-4827-aba5-8d5ad3a44120\nb2e0179f-46c9-4eba-aaeb-dc5f698593d6\n121c649e-d64a-43a4-a96f-7699eee0f269\n9f88b36c-4368-4613-ac04-dfabaf8924dc\nc1902e7e-69e2-4623-8c91-a4ee76e73cd4\n1a8ea0a2-0047-40b2-af25-64d5f07f80a4\n74a4e1b1-4011-4d29-8fa0-cf8050c36138\nbb536c4b-ad2e-433b-b80e-61824a80b704\n815f0f91-b0da-4ec7-a562-6fe7b1ee3e05\n3b1a2741-4b85-4132-b813-960f6f7d01d8\n987f1905-6074-45f8-af31-f417e7d35095\n3c4588f0-775c-4f1d-80f7-fb65edbd8105\n56707817-591d-4670-954a-a507163e692b\nd5908afc-4432-4ef8-b82d-944c422501d4\neecfc37f-9553-4e64-bab4-4cd6caa6e082\n7b512a1a-ab7e-4c4a-8a05-6f5be00f8a70\n48ee1eba-9dad-476b-9501-4f218ec3959b\n2770b133-6d1d-4cef-bee2-fc8d75228c03\n14cfd30a-852e-4b4a-b606-753d22867ff3\n40c790d3-ecf2-4122-8ab5-9ddbf26d544c\n0a16d8ba-1c60-4428-a17c-896a42de9cc5\n9803acf9-e96d-40f3-b698-ee85cf0be35f\n98b28d0c-8a91-4cc5-b8a2-df891bd17f29\n539c760b-275a-40b7-a678-60589784430d\n2a402833-a4df-4edb-90a9-d6cf452de87b\n87feba71-c1bf-4886-ace0-f3a65fbec28b\n18d04167-026b-4e9c-a8aa-b9065bde2e2a\n697b04a5-c18e-476e-882c-e60e58012c72\n10cbcf12-23fa-41ee-af5b-0f26736ef229\n8ea35e55-ae55-4d98-b469-86f5961e78ae\n56a572d0-5db6-42a1-85b9-ea76939b4ea1\n78a6aefc-56d6-4345-a248-52ef75133f1b\n6e8a301d-e908-48a1-a55e-dd3e5cfd45f5\n4c7b562f-ead4-4880-bd53-6a6e1e82684c\n7c9e8d43-39ee-408d-bb9f-789a413af847\n325d59fa-4f56-4b51-8eaf-61bc5979bf38\n03192b6a-8986-4750-856a-be04b9b8e3fb\n43bb1524-b390-45f8-a108-e09f31a8467d\n181bd391-361f-4f1b-a698-dbf3528aae7e\ndae02ade-da9b-4f37-961e-e72cc1df204f\nc17a71c7-0358-4448-ac08-5b1a85dc8ae6\n5b58aa84-20d7-4247-a1b2-e50794404761\n567be9e0-f975-4b07-a399-de8d79a8b777\n670b9bd0-dba1-4218-a8aa-8e0567e68440\nea1188ab-0800-45ba-8ab1-d39463889aa3\n0d9320f6-5555-4cc2-99a8-89773d236ebd\n917543c5-ce31-46d6-92d6-277a00e6cb7c\n292c2a55-f610-40ca-9fe9-a1b8950a7211\nb922454d-3d49-422f-b97e-8cbb3640f92e\n5fc0843c-093a-4e91-a709-70ca59b01902\nf6cbcbe9-22a2-4948-9ae9-25d48ace0f36\nfa1b4e81-c53b-442e-8fe6-ed06da1e45be\n9780201e-29d7-4951-89a0-01008e774c02\n20b01e93-0cb1-4b4e-8755-9d7681ae8bb1\n786ba225-0daf-4c24-9896-8b72972ae208\nc37a581a-fda5-40af-9c13-972287ece2b0\n91b14171-e8b3-4b89-9e0b-b68bbf8430b5\n13965470-991b-4f5a-a0e6-604fd4f2c5bd\nf2f959e1-f447-42f3-b616-efd4a76d3232\n03314ff0-cbe2-4a3b-a2a5-ddfdef0b145f\na454834c-a169-4621-97bc-312cd6303343\nbd9b8d79-5575-4865-9c40-6f0b14459c46\nd60423ad-af89-41c6-8c2c-52d951269bdb\n3ebcfe7f-cbfa-40b1-af9d-38fe7388b659\n7d3603d7-fa20-48a6-a168-d443c20942c5\n7a477fc5-c2d0-4459-9af8-ba756e5e97ae\n16c67153-04c4-4107-8cae-fdff7f30e15d\n9b967a4d-a4b8-43e9-acda-8fd716f404d2\nce2fac00-4208-489b-850f-4726c8833124\nf22ba05c-8aa3-4e38-be4a-0f900f602604\nb30f7e79-e709-42e1-bb51-0f681c58e57b\n8c8f555b-154b-406c-b520-cfd8a73e4cfd\n8fc885d3-8d09-42b7-bea4-18804ed18fb8\nbeb098de-9eac-46c2-a62f-38de26e0bee2\ndf33e03d-bbf5-4ced-a5d1-53b3f1ef1e2e\n6db19d9b-85c8-40b1-9c17-8e6deb0a3d1a\n87c618ae-4553-4ade-92a3-92beaef86454\na39a8e7f-8769-44ff-9f84-701315095009\ncaf24257-f4c6-41d2-ac5e-e30d1d278d23\nad981137-ab94-4f70-8855-d9145a8f5067\n0f3a5619-b0dc-42bd-8b5f-9bafd32db77a\n3923211d-5b31-43e4-9a65-474f6121404d\nfab63d12-6206-42e6-b656-41859b522f40\na30cbc91-ee8a-4e28-9ea9-91f4f8b89110\n7fbb1590-62a5-4175-b670-0c390b6f8281\n830bffcc-8f04-488d-805e-f69b6b6f46b0\n77097ecd-da92-4b92-8e93-da8c79ca7e77\neddf3c5c-1a62-4cfb-938d-4a64c4b1a773\n30cfbe8e-faaf-4161-a96f-1973207ef559\n200f65ff-7d49-4fa1-84d3-11313edf9916\n93827b7e-c2ae-4304-9058-b2cfdf17ef04\nbd6f0c74-009b-4031-9b56-a3a8c7afdd46\nac3a541b-6449-4d76-8321-e552eaaf7e9f\neb39b649-5e3a-441c-90b4-db43efccd5b4\n635d9a3a-132a-420d-9140-633214464385\n77a5d553-e4cc-4712-a8ee-80929b946d0c\nfe636b3f-b546-46be-8264-651afe7eed6f\nd0839f4a-c2a8-4314-8eae-fb60f33db319\n3350288c-8122-420d-9ef3-a5ae1c58486a\n4d3bba91-525d-460e-a0a9-aec5992a4d8c\n5b6a9ebd-ec57-43a4-a267-9a910a90e676\n737493e9-f573-40b8-b331-5afa844f5dc7\n1573717d-9145-44cf-8e5b-8f4decd131fe\n88932c0c-5f3b-4ca5-9d3c-7ccbec8747ef\ncf412b9b-43e8-4ad5-b945-cbd50ed141c8\n9d632e0a-9760-4f45-867a-749cbd9ab23f\nee8f8d83-ddcf-4f8f-aea7-c11d76f9a6c2\ndbb7d7fb-9f17-4a95-b60c-55156563a327\n74a05d5f-5f3d-42af-8090-e88fc6e79848\n5b19ce4a-2634-4c87-bf0c-a4a814eea593\n05593ecb-390b-4251-b150-aa0fb879db31\n5ee479f3-b7e0-48dc-87a9-148e9109d789\nf12aa30e-0197-4fdd-ab30-4da6321c8c2b\n0107330a-9e43-467c-84a4-b7508b48df6b\nffa2333e-517d-469d-8fc8-b8e048355581\n7e0cafd8-b1a4-41dd-80a5-1d54b5298b6d\ne355c64c-fe09-48f5-9f72-399314f23cc1\n6d783081-bfb3-4d49-ae5f-14671afc4ccc\nd0ab5d59-2869-4586-9286-b99c9d3d31d3\nc42f2ae3-2bfa-4ce6-a5ab-a971aa2519a4\nb1e26d89-a4f0-4127-9075-df62467b449a\ne1b96538-e1a4-4f9c-8723-27eb64329c55\n66dd61b1-bbee-4887-9397-ea5c1544ec66\nea3ad390-b056-4320-9f18-38b2ba1fe926\nfc7a6031-c7b1-406a-ac12-b0e862afbacc\n9344163e-6791-4763-a220-c35f13472f98\n66ef0d87-ac50-4ca1-8a06-ed8072d9f62a\n7568bff9-76fd-410b-af12-6968abfb32ad\n71fb088d-a66e-4605-9987-df96d7cf7002\ndcba587b-2f5f-48ef-a789-dc97cde58201\n3ba244bd-5625-4479-94c3-ed6521bf9bd7\nf72465bd-a2db-4a0c-a7b9-505b29ad2359\na8c4227c-3cf3-4f17-b01e-ba5a4ee7eb3c\ncb2481c7-e1b2-4619-9604-b558a3aa2d99\nc0b44fdb-4efd-4e7a-a3e2-4d95174810cf\n63215e23-7a24-4c11-a238-29e5ddd61090\n258ca8d7-21da-4ace-bcf7-332ff7948179\n69a34ad8-608b-4287-b466-7901e242a9b9\nca8b25bb-2033-4c30-853d-dc8aecdbb51a\n32df04c2-2f85-4d35-98df-64c4ddbd6c41\n3c981f16-c572-4c62-83d7-569237565a22\n713c4491-6c24-418c-9e03-a8d32c2ab6e0\n4f24ab15-2478-4cea-b198-44ec1620730b\n101c929f-c09c-4a18-84a3-948d5d6f75e0\n1829270b-ef3d-4e9c-9d08-a222201ddb28\n0de02209-4ef6-4b50-b803-53e81de8678b\ndc6a8979-c215-4284-9c4a-c4490c70a5c7\n7cdffbde-3cf1-45f5-90f0-ab65eccc529e\n54c6bfb7-1c9f-4102-8f9d-8461fd7ac70c\ncb822a8e-998c-44cf-b209-dc74571133fb\n2d8cbbbd-0d5d-46e7-ad73-9ef515ac5e73\n08c08219-07b3-4d4d-bdeb-bc67118f5d5b\n354b808c-39cc-48b2-8fa4-7596e45946d6\nf9c09231-dd1a-48c7-b96a-eeae40217ff4\n00026bda-e0ea-4cda-8245-522764e9f325\n7b01ccaa-6e50-460c-9018-aefaa5e79e31\n1d5df832-f565-4a30-af72-a65706e8cd63\n89fd26c7-d2f9-403a-97dd-e6b144ef6865\nbe14091a-d9eb-49d3-a991-9ad4b0eb5430\n05f0da92-574c-4052-99b7-0aab96180007\n3508f244-9f51-4e38-9a9c-0d5b602b7bd7\na232262d-7fb0-40cd-aa57-7aa6233b48ae\naef2b3fd-4e73-46f1-bed3-5c23f0c40822\n1506946e-c5a4-4765-9cee-bbb72dba18f5\nb4606091-7692-4326-a39d-654c175fe76c\na8590fab-f80d-40f8-b37d-a4e6ee601298\n184ee145-1dfd-43f7-a6d7-e5fecf047204\n68041bab-4092-4696-94dc-02064480ea02\n92816df1-a50a-4349-81b9-70467643f83b\n24368cc2-ba57-4bd6-8adc-b43f1f3002bc\n334c2007-2c33-4cff-8189-a7af6c8d15a7\nfb77ea8c-8b94-4458-81f0-b834493e3fa0\na24f0dec-fddf-41d7-a25a-e522b1783e4f\n02e8634f-243a-4516-ab2d-dbe8eb5a100c\na8341dec-0868-4074-918b-a538659627ef\n574a9530-371c-4611-b380-7b19a6f3e2f4\n1db47b42-bc26-4807-b4ab-317ba21af7be\nd685441a-e399-48c0-ab2d-19df4bad4a2f\nb6381e5f-16f8-4b37-857a-afbbb3cabf3f\nec951370-2323-46f8-9468-3b1998448991\ndc002b4d-4619-45c2-bd36-896a83e94fe5\n48875f36-e58a-4e04-b116-3ed4301922a1\n40c522de-fdcb-4a3e-b1ee-4fbb9a4d9e71\n1165b02e-c0ff-474b-9bf3-3622923df042\nd83ba399-7ea5-4f7b-aa8b-c3d935a16cff\na41d2af3-78d2-4d83-953f-b30a12d560de\nba2221d4-987d-4ab9-bb3d-3d7f074e31a2\n9f8c1340-3188-4499-8c7e-4c8c5d30bb31\n1caa7ff3-9f78-495e-8393-0e00761d0433\ne2a5d9b5-22e4-4110-83bc-61d91ddb8897\n52941373-4bc4-40e7-8b2a-5373c6dbc79f\n2726db0a-70d9-4243-9e47-65bc315aeda8\n61bdaef5-bf98-406b-b577-52945ed5553b\n28b81034-e377-407b-95dc-289cdcbaccf7\nbcddc318-0291-48d8-a734-11572fbdc6f9\n0908cb79-1a0f-428a-b81b-e20396349653\nd09bbe9b-484c-48eb-83b5-75ae2b04576c\nacccee96-290c-4771-a919-0036da09512d\n98757e4c-1198-4194-9fac-e0efe1134aa8\n72f3321c-c297-4c6b-9171-25fdc846e051\n2f156651-c1d8-41ff-b470-363c55f0d910\ncfacc3cc-c599-450f-90cd-ff9d148000a3\nf85b702f-6ecf-42b5-a683-a5ade9e0bfe4\n8ae24115-19a2-4a77-b260-28cc9948f5cb\na9897531-15fc-4569-94b5-5d94c3ca23f9\n069e6838-7fc6-4ba8-8138-9b10da1ff5ed\n3ccf85b4-a582-4963-bb9b-091aad9cb87c\nfa175b1a-3c39-4af6-bd51-0da2293c341d\n4c2bc380-d0d9-428a-9926-4c076eee8eac\n239dd08b-1a64-4476-9baa-4860d8bad61b\n0039e168-bf62-40b7-a25f-3fd3ade17d58\nf17ed374-3d87-42c8-b962-c451756741f8\n4e409989-bc1e-4376-b1ec-12483a529b38\nfa19afda-84de-4cb4-8b8e-a4aa4a2fa321\ne27b7afb-1a86-46bc-aa34-7a1606d06756\n45f39951-9db4-4ef9-a95d-3477432d2530\n44b700cc-b073-41ba-842e-47a0ef005690\nd0dd7505-4603-4f7b-a6ae-dde06e246cff\n0845f469-d982-42b0-89f8-3458124824c3\n9c86625a-8e96-45a1-b822-cf568267bc03\n5f2dc607-8dd7-4b7d-86ab-049ada32d4ff\n753fc5ad-c9dd-49c0-bdbb-012771c827cc\nd3446f7f-bc73-4615-98cb-0ddd4bd5879e\n49b6db0f-1691-4483-b493-94110e90d32b\n196fe437-cb69-4f7d-9b6e-3f7f741c8fd9\nd26131f4-336b-46ef-aa54-819dd6c49821\n66f5dc84-0ebb-4849-bd4a-6ba3478f2fa8\na01050fa-8d21-447b-9ed6-83a523da0c9d\n0bf31d4e-bbb3-4046-8505-22f355a88361\ndbb0b794-7786-4b1a-90e1-3f527754441d\n58da74d3-8cdd-43fe-abe6-556698dbff8a\nee66a7c7-589e-4bbf-b4fc-05fedd972d5e\n304f6b39-8cfa-48f4-be7b-b2a68bfedbe5\n015ecf97-046e-4db5-827f-f2628a83695a\n4c7b0908-72b5-46dc-9ddb-5ddea554b306\n7f60ea43-3cb8-4ec1-a74a-5e96045af53b\ne4178cab-56e8-4b0c-bb8b-ee125b09a5e1\n67b94402-b79b-4a79-802d-1da48f26b733\na2b79b5c-ba0d-4a7e-b82f-512ff3705bfe\n017198ec-83db-4bd7-9d7f-9ab29b5f7d2e\n30c7f681-8d9b-4e72-8798-939d8a256c9b\n9a179cdd-c3f5-41bd-a1b5-c033fe52119f\n3ce71b3f-62ac-470c-ad2f-7c9e658e7894\na4d0b039-bcb4-4846-90ab-2cc76f380444\n58507f07-fd80-4d93-a7d9-289bfe23c0d5\nf729dc8c-a839-4286-97fa-32a75ca340c6\nccad68cc-8cb4-4373-b8c7-8f08d2a41df0\nb89445ee-1eb3-4b94-b4ad-14f77fdaa376\n24fd617e-fd21-44e2-bbbf-de432b9cf6b7\nad3a31c6-2c30-4996-b49c-a939497a6ad7\n25930a5a-4468-41ef-9aaa-5b0393b12ecb\n93ca0507-539c-4a02-8bbf-45f116aa0352\n23e44f6f-cc72-4de3-8505-5facaa54a985\n7da32596-df0e-4cdb-94e6-6f01fa296e07\na2c54052-d009-4ab5-8b1d-c0f95955eab2\n500e65a0-fd6b-4e17-aeac-8e5cd7be0add\nf7c421b0-5036-4b75-9205-5d902b15d3f2\nf72b3df1-68c5-47fe-b3e5-16e3655cc7a0\nbc2c947d-0fd2-4ea8-a399-abfd88b3c863\n7aedc1fe-bcb6-45ba-8058-6c6e14873bbb\n4bd8d516-2918-4b7f-af4f-b6415dc42e93\nf582dffb-44e9-465e-8f0a-94b9e797355c\n0ce1245b-c491-4e1f-9783-9fa3a3d3fa96\ne5347403-21c5-4842-b1bf-3bef103d984a\nf5e31bd7-30a8-40d1-97d6-0116d68bfe21\nb449278c-a1ad-49ed-b6ab-1769bffef7aa\n8f4d43e0-f30e-4971-86d5-95af0e367c3a\n8bbf9920-559f-4fe2-9fa1-825181fdb136\n2bc2f8cb-03b0-4120-9b4b-dc61b4138dae\n934bb0da-7fbd-44a9-bd9c-3cece1d934c1\nc0c4da10-4607-4fa4-b4b9-6b4c3916c907\n351b68bc-e5c0-49f6-b618-d89ecb7d76b0\n143330d3-d7ec-47b6-9a1d-e485781cb83d\nb604051f-0364-429b-9235-6acb4978bc3d\n57e1018d-2005-4305-9d1b-d92d8e361163\ne53cb0e0-fe8c-4d8f-a5f6-b91680bc5cb8\nef5474fb-2aff-45c7-a6c1-83ac3d611968\n455acb65-de51-42d2-b39f-351dfde9e2da\nd8bf04d0-0a9b-4669-8eaa-881301c9d479\n633e8902-8e7b-42df-b6da-4caf46b8b69c\n93265afa-a648-4289-8c00-1a7d37d86247\nc08adcae-871d-4e6b-9d26-dc3b4b5d0f36\n09b01b70-d175-4b2b-b92d-2ac0337a054a\n7e8c3e37-01ab-4378-a7a3-7e50964c61ea\n60f7618c-d05f-4510-b269-57bb1a5e29f6\n920f6232-34d4-44d9-8c07-27f69ca107bc\nc3ab135c-944d-49cb-9d24-8a0e6b0cb32d\na34f73a5-c3fc-4142-ae51-47f7326d7b42\nd0f6f606-7a18-4911-a586-539bdc12e13d\n5278e7c6-5e3d-40ba-a6b9-88b2ffc9dd3a\n9e8f5188-462e-4820-8a38-7e695b59efc9\n6aea63d1-677e-45f7-9e46-f2f392c059b5\n30834b54-c99d-4f43-b232-e786bcfd8c38\ne578dd04-f12a-4f4b-865b-1876fed56aed\n46aeba69-ba3e-4d1b-a2e4-0d194957b812\n788d29d1-f8cf-4aed-80bf-1a93e545ea34\nbc793d0c-a2a3-4dcb-b346-fb719ccd7166\n8492f7a3-dd30-467a-a6d5-b1012ce48285\nfb1fdb17-bb8d-408a-840b-ecf6ce30929a\n7d96d5b5-fca4-426b-a6bd-69f5e4376e53\na0e8fb9b-ff41-4b4d-99bf-d2d99c3acae0\nf36ec96f-e1c0-4c7e-9c8a-cf1447c13032\nb6466d18-29d4-4e2d-a6f8-9a5e3657345d\n2bb9d549-a2ff-4678-8bb5-c80fb77a2fa6\n8e3ff6f4-985d-4c96-b14b-2bcc051b9a83\n5e8ce9ac-8f4e-4915-a165-e0a5cbffdc35\n05a761d7-32df-43e0-9818-6ea9de8409f4\n2fb7bde6-0dfc-4178-ac9c-41d71b1e5479\nc24edd9d-da66-41bc-8c5b-b3d891b503e5\nd97026b2-673b-4b09-866d-842d04ab89d8\n137ecc82-7ec1-485b-85ef-d0d075197b19\nc5606595-c9e6-4d5d-89d7-47dd7282769e\n5235f24b-a6c2-4cda-8c14-c0fd8b5ac589\n4f3b66d4-8ec2-4661-a573-82d2b4c103db\n29325dd4-a952-4d3a-8c4c-708774b24924\n41815979-83c0-49d5-b6b0-20434eb73fa1\n7d2fb27c-abbb-49c3-b424-3aa6813d4d7d\n777ae557-ac51-4ce4-afb1-fd7488fe0eb5\n5b5323b2-9994-4c00-9f47-44d640d6f788\n41bb5f84-6a7d-4921-9570-2ce1f25d8511\na5c6bc48-e551-46b8-aec8-dbd76097c5f7\n548bf9ce-5257-408e-9d28-70e3724edeeb\n16995e42-26f1-4bca-a42c-a63cfc56d6a9\na514d012-6c11-47c7-9c71-7bf0d78e12a3\n9e23de8c-6ea6-4e14-aa3d-3f8d84ea6e71\n7de51b10-b4d9-4ed3-bb4e-280aaa1482b1\nd697a672-f576-4ddc-98ed-c35c227b6f83\n8dd2e9f1-d52c-4746-bb7f-227b17ddfa50\nf1a1a6ba-d298-4dca-969a-ee1d5d6b14b0\n9907cbb9-8e96-466e-8a01-dd4dc63d979d\n48ce5276-e40e-4e45-aeb7-8669b1b890cf\nd3872f0d-0aa9-4650-ba50-9d64a61c4e31\n8b92c2f2-1949-4c64-9df0-2e94d41bfe5e\n95789409-6ff1-4140-8fef-7adffdb869c9\n0852f53f-587b-41b3-9c3b-e1c4210db584\n8f47c81f-19ca-400d-8707-95d25b505a78\n5d6a52dc-347c-4e76-b3e1-6061dedae30d\n8c80e968-8e7e-4402-876e-465e65178c05\n6df08d62-e797-4a03-8d8a-49fced675fbf\nad882932-55de-42f6-92fe-361f33fee391\nd2ff598c-a735-4eb5-afd5-d37be9a2471a\n2262a374-aeb0-45d9-b3c5-3c770736f6ea\n631ec953-5c8b-4291-9379-b496f3871feb\n9eda9cb9-6b60-42c6-9d03-e7ef916c7ef0\n7a07faad-960b-48b9-bae6-6297a84a9f5f\n40fd4b96-679a-4395-8daa-4b55a8a32084\n098d682c-0280-449b-98c1-a7380c76da5a\nf96a19d1-24ee-4b98-9b00-f5a09f5ce50f\n8b0accd1-590b-4dc8-b85e-9a55e92225a2\n84594c9c-a821-4481-8bca-d5231d7f8e5f\n9ec046a6-6156-4307-86c0-2c0b4a25ebd6\n2080279e-609c-4ec3-9fb6-bf3c592cdffc\n6a990632-1214-4241-94a8-b56bddc6be04\n1252e789-1ed2-4bf5-b8eb-5023f6ddfff2\na7bfc32e-7f21-4630-888a-3ba57a94273f\n897c4435-550c-4b6f-9b44-caff491067c1\nc44daac0-df10-4149-8b21-abd18395908f\n79cada13-cdac-4573-92da-d0a634b72675\n87b441bd-6062-44b4-a96a-27f9d93a6c9c\n964c8184-77a2-4627-b7ec-c25c25e29f82\nf9d8e265-bab5-455a-b0a6-296fb0001de2\n282bed71-bf90-4c93-a57a-b5f3177922df\na2f7f95f-df84-4ebc-88f9-22d32f8145fc\nd9bf16f4-4d5d-409b-901b-242d59615438\n0134f63a-c932-45ee-b926-d52eac99884c\n1a4e1e83-21a8-4653-b0f2-ef80b79f993a\nbc3e99f2-9469-4b2b-b97c-13ce557d510f\ne36cc51c-50f4-4687-9a24-3fa47812562e\ne896d897-5a0c-42ab-8aca-c6e92d0d26ae\n6af98560-93d8-4ecb-92aa-f5f39962c0ec\n66a4aebe-e49b-482f-9da2-46b9697d0d65\n5867c564-3b4f-4972-ba90-e442e5e24c5a\ne1f76f63-7837-4c3b-b7ad-df3f937afef6\ne0b04075-6b40-4edb-92da-67e60b070bd3\nec5d00d6-53a2-43d7-abc3-ff0447de1f08\nfdd62eb8-3d93-4455-9cde-332234dc7612\na7aab64d-832b-4aab-b037-ffaa554e35d4\n660f474a-1c09-4886-9134-d2d2fac71462\nf5fbf031-8919-4c42-87e4-351b6dc61dc8\ne2aa1e8b-cffa-4cf8-8ea5-fc383ffe991e\n881834d2-61fd-44d8-ae29-13ee92ff77f3\n72673e07-1329-4286-b2cd-8482052bbab9\n980d0f9a-1600-4286-82e1-b5d5283679d7\n499007f9-4c11-442e-9280-991c0c017998\n373cc1f8-1f60-4bb7-aa4f-a6eac2b1c952\n7bc1af79-f3a7-48aa-84b3-744de0d5e9dc\ne41b2ed5-f9c6-442d-955e-9c45f3fbc942\n3909a7e0-11d0-43ba-a103-3368ba185d7e\n5bacf0a3-a6c5-44e1-b48e-416ee4ce122c\n1cefa2e9-2ea6-4382-bd26-9a0dad5f681c\n68a2d92e-1842-4bf1-ae82-0402d9947cae\n27979105-b7ec-4886-8b24-b0ba1a04a17d\nbb7a21e3-7b4c-40d7-b94f-b63e78c9ea44\nbe76a3b9-afe3-4b6f-bc69-38b75bee4904\nb9b4ec02-fc76-4c0f-ad33-d7be0f590a8f\n654cd9ea-e859-4f72-861c-022101c52c78\nf97d8239-7649-40cd-b8a2-adc0ad76b368\n25ae8d22-00b1-4e1c-9bab-1c43cfd50871\n5fe9a09b-dbf7-4a73-b535-32e59a878c8a\ne96a3a9d-11a8-4941-af85-27f258fdb6a2\n1f07c855-dea1-40f6-97ff-fe467ada19bd\n9c539f28-6296-4303-8d6a-1ad7644b0a33\n214b99e3-0bc9-4469-94bf-2db443fe8ae4\ndbda44e5-43a3-444a-9138-bdf76d01b74d\n8d50637b-6adb-45b1-af15-89b71aa2d811\n265c07b3-cfe6-40ae-afa2-0fd9718174fe\n34c41001-c7ab-4c42-b2cc-8651cfd8f66e\n732bb967-b594-42a7-8f1c-96334ffce682\n1579d030-3871-4883-8128-cecad2955472\n00d272dc-897a-4bf6-a8fa-0d45985c1f0b\nca5414e8-f626-4da8-9460-a4e6023c4a36\n4f31d1b4-0ee4-4121-b7c7-98f6aed54599\n67f243f7-6060-49d5-83d6-322f5f83d91b\n1f176383-c2a1-42fb-af99-77a3a0d07ad2\n47211050-a614-4c0d-9339-f63351e63733\n4143f253-65ea-4210-a9d5-9da8e28d173f\n16b10200-a41f-43e3-b261-6aa50cc080e0\ne6b91150-6ddd-4b0a-b334-29ace6b7a826\n631a6ffe-8e8c-4977-a0dd-f0719826d32b\n0669ffb1-089a-4962-8c21-d5cf2de24387\n4aa554e8-6101-42dd-b97e-d00c782b077f\n5266762b-779f-4fc6-b3f8-33a97591badd\n1540e07d-f835-47b1-baf8-0ebd96102699\na5e8a300-8f18-4882-a6a7-b76dafafc3ab\nb390fda9-831b-4738-a7c4-11406b0025c5\nea582e42-b6ac-4964-8d41-ace9876fe56e\nd4761f42-72fe-4a96-85f2-6421aa0add4c\ncf73505c-515c-40a4-a5d8-7c97e49f85a3\nf3cc9032-7782-4f54-a107-c9ca026ebd29\n7245d80e-5bb7-411d-9360-4ce2dd2c529a\n15cbe15e-7661-4fab-824a-8943ff0318e2\na141efe2-6314-4074-a1de-b5b8209e5df3\n2f44a223-f99e-47d8-a795-32695a544c1b\nb249bb48-3c98-4a6b-a359-f1cf21e9e996\n8dfb008d-0ef7-4112-bd0f-1e68ec3947d0\n3cc2d009-4dec-48de-8ca6-d78c1af94379\nc9a35f03-8642-4a72-9d67-d48bd69a8204\n023a8624-35dc-415f-8586-a8c527188fa5\nce53240e-bdb3-4308-9091-1d2346da1e4c\n1ee17059-7294-45db-bce7-b95f54c958d4\n49b999e6-9322-4002-aab2-2f9f29733a4a\nc932adf2-32be-4aa3-b2a1-0c0ad6db82b7\n50fdc03c-bc28-45a9-a5a4-ab8f86fcb17d\nb99d6512-16b5-4554-9c48-091cdfa78278\ne787af67-2c61-46eb-8d81-773767acc927\n8feebeae-13b5-492d-a850-0e35e1e0461e\n3b06b68b-084f-4391-ae66-f43cb3c63a92\nda576b42-6067-44ee-9376-b7c432cdb54e\nbd3c1cd6-07b4-4b99-954d-6c4dfea6b37a\n6705e288-0666-4d7b-a771-d598501ca4f6\n5b71b15d-d473-4265-ac87-38aa18ce2598\n820a8b09-7a4f-4c3f-888a-a024c9bb9aae\n115d8be4-6302-4f99-9f7e-ed87cce5d073\nd0a6aa4a-05c8-4ff3-879e-a00230218db0\n2f97b3d5-29d1-4f57-aaea-2ac7aeff4954\nfc904eca-834a-4b52-b660-6815d8146702\n4783f9cb-a7f7-46c4-8512-f77c5726e0eb\nb6a9e34e-eb91-4172-a975-f38fca6b7a21\n95357dc5-2eb4-43cd-90f6-a9b41bb0c679\n82a77728-3804-4966-a91e-6debebcc6b6f\n2db4ea9b-9b0f-4527-84a9-8c2d4221d6d7\n3a4eeb12-64cf-483e-bd5b-1d09c3746356\na984b759-fdaf-41af-bfb9-e3739e94af9a\n8b9a2ec0-2d00-4ad7-a97e-fb7f66eb0bf9\n61e4b912-d34f-4aea-830d-bb38d60463e3\n7f095147-33b2-46d8-8310-93ecf85baa86\n4ba18e82-f560-4105-b98c-5e462309cb0a\n654b4ab7-d756-47f7-9bfd-d09263261391\n6cb2f058-bf86-4d2b-9684-81b26fa85fb0\n433af5ed-d24c-45db-ac61-e9cd5daadfdd\n1c1a1ff1-5350-44a6-84c7-286e84c7f600\n254f9844-5043-488d-9d47-ea1cc57007a6\nc565e3e7-b2ea-4087-ad51-9b250403b08a\nefef7a9d-87dc-4ff4-b79b-a54ffa1d6917\nc1fb41b0-ac1d-45b3-aae8-63e9c53c26bb\na3e0334b-6a34-4219-9213-434f59e745dd\n76ad5199-226b-4154-9029-fd7cbd9c8434\n7b95337d-47f9-499b-9436-604c02802dfe\n56602c74-73af-4b9f-b97d-23b35ad6b392\n5b7709bb-8687-4cbc-aaab-22a553236f79\n003277df-58e1-4124-bd7e-d2ac1d4acbd0\n4db3e813-058d-4325-abac-c453beff7e13\n96e779ec-1f55-443a-ae68-c117e380de38\n0b9cb254-3213-48c4-b300-22bfd1c75a1a\nc5963f20-b8a4-4f79-abce-604f9649c2c4\n8e210c6e-48b6-40ce-ae58-0ac0b36acb58\n50fe0f50-c642-4e06-b73d-69a2f6f1ed8e\n52b4b40d-9762-4a71-a6be-9388c796f5bf\nff655fc2-09bb-4653-befe-abd0b42e4d7e\nda2410d4-83b6-4715-9e3a-48670d567d9b\n8c3018f8-67e3-48a8-82a4-c6fab2ff5970\n2bf6bce2-00fd-40d2-8905-501cee03785f\n1c813b84-0b33-4e3b-87c6-ca9a7222c700\n0bdf76cf-31d7-4dd5-9625-261a799f4604\n75be6c36-3117-48fa-8943-ebffe58b39f4\nf79a572d-b446-4d67-8acc-6ba42a9490ff\n364ce9e3-b5bc-4672-8db0-b11de99440a9\n394e8f86-da7f-4fd9-a6e6-5546e7ed7bd4\nef167c71-d11d-49f6-be4b-22d3a8f4325a\n4d1b7261-38d3-440c-b13f-6c5d224ea617\n3df88fa3-e531-4009-9e1e-0b19d31a2345\nbaebc9e8-92c0-4a8b-92b1-c28f6da6b93f\n444b5c0e-3f42-4adb-8340-aec6cf6c90bb\nbfea7174-fd20-4353-9ca3-2c0f591eb3ac\n23cbaece-0f83-40f6-b270-9f1b69781fd8\n626eb9ef-105b-420d-bed4-2a7fe8cc0587\ndd5e4cd2-6212-40fd-96ae-c076cebd7810\n600e28c9-f085-42b0-a673-bc07d3ba0669\ne6dbba6a-4e0e-4358-88b1-ed74407e809b\n7bee64d7-3c24-45d5-828c-542b82bc76ee\n16ba4d74-5f53-4ba2-8fe2-d6a49010e5f1\na181d82b-0298-4a82-861a-b5c9eb978355\n7eda04bc-8ae3-47bb-9281-e8e3f5966f87\n3ab048b2-0a2b-4f3b-97dd-c233231b9459\n8a8ec42f-ca00-4262-9f75-a968285e115a\nb6672c7a-1409-4799-b25a-cdc948e248dd\nf373e7b6-4681-40ea-8ca6-8eadea6d0533\n6ed961b2-2f6f-4790-9b1d-1fa51b232865\n93724824-a8be-41e5-ba41-a6ac6f4eeaab\n5e0e99f5-2dc5-4762-9e6d-c2720bf56613\n6db19b80-eb6c-4287-8235-6131c6ba96de\ne85b1f89-da41-44e0-82f3-864d3f2b2251\n140b36a3-972f-4146-9152-926c78f9b944\n2b2abc98-6e42-4461-b300-66104d9ebfde\na0e11db6-58d3-4135-9269-6e4e724044ec\n5c7f7250-9310-4823-a6fe-0d656c087521\n7d515335-16af-49e8-9803-00f94d399c62\n68987c91-402b-4cd4-abfb-03341410b89a\n78367d3c-a847-49c1-b42f-ac11cd6fbc2f\n293728bb-020b-4758-a652-f9b382a4ab58\n2aa8cb1e-82ac-4653-ac49-4e42fda603c6\nd735e7b6-20fc-4b66-aa5b-0eeafc996928\n6652ce55-85c4-41cd-94b4-1020dcf5e18f\nd05577e3-db7a-48df-8776-438add3ce87d\n7e51a8a5-b208-447a-a5dc-baa1d77e61fe\n8548ba61-0f78-4495-a3d6-4739072b41fa\n3ed62081-be6d-4404-9972-0b46ea65505a\n742fb7ee-5215-417b-8a10-50f0e5b68ced\n0550d72b-151a-441e-a460-c32bf2e0b0de\n5ec8366e-d2c5-4d52-accd-1df273bcd6c5\nfa477eea-8564-4b46-8867-1f88c0d3f579\n35550fc5-1ea0-4825-8e3f-faaea8bc4701\n4a89ec33-f304-4eb3-9463-e9a5c15d9831\n76afa806-7758-4a9e-a722-26e7f88e702f\n5f9105c1-8a64-4e4a-869b-27f6e287b180\n727396aa-3b96-4e0f-8f66-417e0403cda7\nfe5fbb09-e06c-4ccd-b3bc-04cbc7e4b980\n2d6262c3-d11c-4eea-8ff8-306328a80610\nd4499a5a-9f63-4cad-bd24-583c0f69c085\n7ce63b13-7856-42e9-91cd-f2a0dd7fc28e\n28ddb6f4-2995-4aee-b21b-0496af8e1892\n9cf37f24-5530-439c-bc16-12472bc54d8c\nbba481de-3752-4afc-a85c-953dbcac78f0\n71e0f618-1360-4a26-a79d-6f4c2e11e840\n00d4de7e-bbb1-4cf0-ba08-2acd18e0735b\nd1c75e75-768f-4c1b-afac-c60484d66ddc\n49c42de0-048a-46d6-a122-a011d954b255\n0d088f2a-9219-4574-b28a-1d7906ad3dd7\ne8eb368f-490b-4da5-99d8-16d8c267756a\n2848dc05-8c97-404b-a361-07bb1c85d3ad\nc05c1e57-21e9-4b77-89b8-bcce04297be1\n830168d0-fec3-4b45-b6de-2ba470c608d6\n6fcb136a-f34d-4fdb-b2cc-897da4263e18\n90895955-1f5b-494a-afc6-808760027684\n809b6f87-fef5-44e0-87aa-80bb82148569\n295b2d97-e25d-4293-92f9-90fd37154648\nd1dee251-9dd4-46a9-bed3-b664b063dd4d\n79da7f7f-19ca-40f7-b38d-87b01a0584b4\n21188ec2-9442-45e2-8c41-582f1e3e20e1\n16d5a6ac-c1e7-4977-af64-292b2fc9562b\n84ff9db8-56f3-4b66-8a38-a64b335481a3\n2e112933-1f71-4dd8-bf58-be77ea59f899\nebd420be-0823-49ae-a702-8d09048da577\n28627f9e-1d5a-4e1b-8a12-810d2edf01a6\n6ff9fbe7-a532-478f-b13d-4a37df06573e\nfda31ed0-b9d3-40d3-83a8-b04c980e4bbb\n307e68fb-659b-4ad9-97d5-742d73f51b25\n2c699cd3-e6c1-4d99-bbcc-38e2fa09c55b\ne8910f53-062b-408d-927b-e746a12dfd89\n82f4bc84-6736-4aaf-bfb8-359c5b6631f9\n88826981-cec6-4b29-af48-ccf872b0c082\ne0eb025d-f577-4f71-ab9d-c4f3d7d9cd32\n43fa3d6c-07d4-4dc5-a9b9-f52817cfdedb\n8ae12040-da81-42ba-90c2-0ae20b4e3755\n718505a6-0e4e-4d2b-acb5-5c01da7808bb\n4e66778a-1a55-4f0b-8775-b80b1115c927\n35030ba8-a596-4548-bc8b-0bfc1ae07011\n71a5b343-2aac-4544-a647-c050cf5273bd\n98d91dc9-f04d-4c18-b63b-b38d864fb70c\n05b20744-2e54-44c8-b404-57f3b1ac6277\n089eae84-ef20-4d35-b525-f166424d51f1\n8f1c2229-6589-406c-bda9-bfcbd2738538\n802046e2-0a85-4fb0-8a45-bd5f59e976a2\n7d74a350-5158-4d82-846e-a62f5edd4abf\nc574edb3-bba1-41ed-a93c-518be84a389d\n0bca27e1-30b0-4e8f-a651-ba626da07f0b\n26245bcb-88fa-4104-9a37-92e221aa4b92\n27338dae-51b9-456e-ba2b-271d272fef85\n77d239ef-3e84-4348-9253-53904735b1a8\nc602c5f7-7547-4892-9255-19ed7ad6c37c\n69592b76-5d2e-4db7-bdfc-cb5743cb6c67\n63c50d9e-eb8c-4739-81f2-3a2539cb2eaf\ncb48a787-be90-4434-b590-1f68284037b4\nff3f718a-49b3-4660-a348-d01d7b0059ac\n01b5109a-0f71-4267-a9b4-27956cb389f9\ne27aa5ef-173d-40fd-b3c1-950d69a027e0\n3fb56883-b1a3-4ad8-acc7-454a87a65435\nd3249325-de7b-4e26-ab9d-8d7b4999c8ce\n5e24604e-650e-4691-9901-f55d8791d1f6\n4738c3d4-7a7d-4590-9d9a-c3c39da90760\nfca25e36-776c-4f49-b5e2-b763c0d4c859\n51f4bb49-9387-47a6-8213-75f181b99a88\nac3322c5-9886-4da3-95ad-ce267da2a651\n8cc7d6ef-f529-49b3-a7bb-2d08df378644\n73a58dce-1329-490b-93aa-59e11393dcfc\n6aaf20fd-97ef-4e61-8ff8-dc095fb98e7b\n39390470-95c1-48ee-bb6b-aaff1459cfd8\n68ce31e4-8636-4af8-a3af-de02f32ef46c\ndddd354c-026e-47f4-9fce-343b80e087b3\nf8779ea6-8422-433c-bee4-d43920f30f41\n476b6daf-e6dd-4915-a417-4d554b2560ce\n9713dc4a-2cf3-4642-8704-d8e3b4cfaec9\n56afee78-1463-40d4-931c-4a4f78dd6653\n14c5f292-167f-441f-af7b-78163d880a12\n7b56c3b9-a6d2-4194-bc2f-4bbcfa9d2ff5\nb92559d5-87b5-4f8c-a98c-84ac1d08db8a\n0eb4b926-ad68-46ef-b067-9c95117d8fd0\n426d597c-7c02-43b7-b297-34735239b0f6\nd57794da-8342-46f4-8e35-1cd619a2da3f\n6c752b49-175b-4c6c-ad2e-fbff3b95c0fd\n34d03c6d-5421-4b3c-a253-23384e7e65cc\n34066eab-7960-403d-a3ed-064bbf0a9307\n6dc7daa4-4bc3-45f2-93e9-f392a0de86ac\n4241e27a-037c-4adf-a29b-fea97de59ce4\n416ff653-1d70-462b-95f1-5a29c2ce0d50\nb55f13ee-b9d7-4658-8ee8-3b296ad13a2d\n08db3d8c-317d-41b0-bd7e-8d15b6426833\n8e2a5ac8-be70-4835-a7f3-da3fb3d252c2\n50490b6d-4f70-446b-9026-3d620fca0a21\ndfd6c387-491d-47f1-9cc5-b64f281cd46f\n2a421efe-f1ff-4759-b0c4-9b271a4ba62f\n8fc25bb3-4402-4a5b-bf4f-72a68bddf610\na709dda2-a257-4405-90de-019b1006fe76\ncb399ddd-c0b1-4b55-9a8b-2c0652a0f4ca\nf3886725-ea7e-4b28-8e6e-eb4637bb8ced\n7ac4c747-9f23-445b-b186-71e18f8ce339\n7def239e-00f1-47ae-9668-1aea0f23144c\na71e81bf-dde9-4577-8f76-c085b5685c37\nab1157d1-92b4-4595-98cb-506416a3031b\n1a101f5a-5c08-4c17-95af-db0a086c38bb\n480f8bec-ce70-4bb0-85ce-b270c1fc7c4c\na1a3ae4d-b89f-482f-84f6-29e5d9accbbe\n5325d5a5-3198-4336-8c6d-0d78eaf25e7d\nd132e9fd-dd5a-4179-bfdf-8c6e66c52e9a\ndbd08c1e-08ae-4260-8251-72c75b97f37d\n19e6674e-22ca-4534-9d63-daa52b86b594\nc86717f8-bf11-4ae2-9c90-40ce96a0fcc6\nb1d116a1-9bc3-4e8a-9135-8f9108931044\ne1893fd5-2620-4aa4-b007-5b279a1a9b3e\n2f13a10b-3aa3-425e-ba7b-a4d623d69fd1\n427b1024-2e07-454f-9538-bd1da1976f52\n07236fda-95c7-4b53-a1d8-aac553048462\n3293d224-c8a4-4511-85d5-1a704eece683\nb92d215f-9e59-41b8-978c-943aed9bd820\n05b13985-8ec4-4bde-9442-5898330eaeb9\nbc4a6363-d990-4243-9ac3-a932f9139493\nbd09480b-043b-439e-8ce8-dc91420e3dc0\n0b5475fc-1876-4452-8b94-01accb3c7d2d\n39e46a0e-1892-4ee7-aa3a-f03e9f97774d\n47b1dde9-635c-47b6-a9a7-1cb2ff10de26\na486bb7f-e223-4339-9aba-8de0ee921386\n297b62d3-9e14-4fc3-81ff-16c3a91fc71e\n5c8c03c3-62ac-46bf-9218-524e8113c055\n3f4b7ac8-6e4a-4298-b1ad-faa04b3d1710\n2746a0b8-8ee3-4b18-96c5-07a3ef2d5366\n61f813e0-bbcb-41e3-93fe-e763eca356d1\n3acca55b-34d0-48b9-a77d-ad2afe1d2c8d\n603484e2-7cf2-4d17-9764-78f4195eb26c\nfcaecf8c-6fca-4891-ab4b-912f119827f2\n1b713531-adef-47c3-aaff-54abe02b3f40\n6f8bee8d-8cd6-4fae-aa00-1be44489bdab\n0010f4ce-1180-4dff-9e63-6f6e1dc40815\n3f2a4a74-ddf2-43e8-9a96-8b1025f2cae1\n25e9974a-9bb2-488f-8e1a-6ab0ad0967d0\nbea2e7f8-8e07-4fa3-9b9e-978c6151e947\n5fb22d3b-b8c0-4e42-b5eb-a5faaf70e385\neb497ab1-1c05-4ea3-855a-cbc755002fd4\n48252b1d-a090-4080-b5f8-c20f7d47ffe0\n34a81c7f-2f58-4d97-80c7-8fc88b498cd9\ndd4acfc7-d1a0-4346-b73a-5f3f22bc9096\nae79e32d-64f4-40c7-a48b-9da2c25dcee6\n4c4b8171-0195-468d-be1e-9e4951ad927f\n2173a7bb-1b2e-4f7c-a18e-641ef3cccca0\nf58ccb5f-effb-4284-a61b-31176bba9c86\n2ad92346-b216-45ca-9a55-7d99c4caab95\na437e261-ed3d-4409-a8e5-d2c4d39fb994\n1368bff3-84b3-4643-b78b-2b67e3eb4b0d\n6dce9a12-abb5-4aaa-add2-ede57d328739\n56b26eaf-6ead-4452-b47c-2186990833b8\n699983b7-172f-494e-b365-a7ba30bc9b61\n2d1414b1-bffa-4934-88d9-e03221450a32\n7a4162f6-3230-4053-94f3-8093a48d8450\nada565b8-8b9c-44e7-aa7c-c9117fc4fb80\nc4eb899c-6bd3-4c93-9619-0b9083c2fbc0\nedcc40b2-bece-487b-8b40-bfcd1b070673\n06d80af5-d309-44b1-9928-39da72a99ac1\nc2f1a910-e0eb-4007-84c4-8096c2037a52\n797d32c6-6eb0-42ca-96ab-77dfe5832b50\nef4c1cf2-81bf-4a09-8749-9eb2cf7d499d\n0258736d-497d-4139-b39e-fb54a76b1a0b\na358f85e-26ad-4053-aa73-e63d98584cd5\nc5b476b3-1d65-40b1-b17f-320865d73f37\nad52f32b-e4a7-47bf-b902-35984f5ebc55\nee5ee0f3-fa1c-420d-b220-9d8752f7b7a5\n024e3946-3df8-40b6-810b-5e6073e7691e\n4a991f9d-7470-4b86-98e5-7b30273bc4eb\ndcb7a280-ee7c-4c69-9c51-47cffed321aa\n93f4fe48-2d73-4c6c-bb09-e5d05642898d\nb9314684-e850-4299-b41a-e67a0b2dc176\nf2eece01-b660-45b7-8d71-de0735684acd\nb3a572e8-26ca-4911-a2b0-8c37c71fa237\nfd9d0f98-8dc8-4868-ab4f-1e95d637773b\n57e92896-b21f-46ca-a15f-a8ec85a881ba\ncdeca514-2366-4e5f-ae6f-00e1bd60a092\n60a830e5-0502-47e9-806b-eec4eb5c925d\n6a5aaa66-353b-4e70-a904-b33ec2120e0b\n75002c16-6421-4ca3-94c4-d60711124ef6\n5fcf74ee-e47b-4eae-869f-e27d7684d831\n9123ed9a-15d8-4d1b-a5d7-abfbf805d623\n89d9cf76-6d1c-44ad-9b9d-27375a980b8e\nc07e294e-426d-450e-b249-62c01b934b94\n64273ab7-b4c9-4ad8-a784-6498c769f306\n344818ba-9c10-4b37-85e8-cd0ee487d557\n5b594f5f-846b-45ba-8c54-2af52042d00a\n23fa38d6-5b28-4305-8f6e-fc09dde7b71c\n224712d3-78a5-4597-8d8f-ceffb940faaf\nce31a5be-51a2-42aa-a401-7323c0e2053e\nd3b02182-eb43-438b-ac24-780b8c41e387\n6ca041d1-5b33-459a-8ba9-3a70284adda2\nf640881e-8500-4d35-83b9-0a6971ed59b7\n6fa27142-1eb0-47b2-897c-5b3c5bd57888\naa07d31b-c5e2-4ce2-92a5-be7b01d06305\n5384555b-7d68-43f3-a1bc-8f242f3a0dd9\n1ea2443f-0e6c-4066-aaec-0874e55d63f2\neeb11767-1f8a-48b3-9faf-9802df65363e\nb026805f-27f0-474e-8165-b531ec2ba9bb\n58f029ef-7939-41d7-a6d8-9a52e60e3c32\ne752deeb-d354-4906-baaa-4d4a79205d25\n126b9c17-e48d-418e-98ba-1b1f102967d3\nbbf91c0d-9a4f-4c5d-800a-ca36e2b1cf74\nfed4e916-4461-4de4-a213-80831b633922\nf593d96d-94f1-4322-9da1-a9a334154562\na7ad7496-6ddf-4917-9fd0-dbf3ebcced34\n5d96e36c-a475-4815-9076-94934b21374a\n15c8a0a7-aaec-4755-aa68-f9070fde3328\n71a006a6-b8f1-400d-8ba7-03e613e28c5b\n7cce9f43-9057-4b2a-94a5-df41bb891747\nba31a650-662f-43d4-a36c-a55da67073b3\n94a09cb3-78a3-4a7f-851c-3c2a47d3fad7\nbad06fb4-9260-42e1-8fa3-4d91b2722801\na08f4a86-ac70-4df2-99c5-42172d958db7\n93143255-f450-4306-acfb-64e2cab35e07\nad96d8df-c15f-4e76-8fce-05f2bf09174c\nf6e5fce4-61c6-408f-a042-2da90929a66b\n451321d5-3539-4e91-8b4c-0326afea7e8a\nebd7ccc3-6c2c-46e0-b17d-ec4a5a1c271b\n37210a83-30c2-48e2-974f-11504ff15b3f\nc1b36bf4-4e6a-46ac-beb1-d4e8f2089a70\n6f2324c0-3036-45eb-b00e-072923546b3c\n6d7d1500-35cb-4590-8fd1-f3ed91afa83a\n3deecd60-f5f2-4dd5-927a-7836e0f64336\ndc3d10bf-e24c-434b-b7d3-6aa9b00c026d\nbb61a8fc-a546-43e6-b497-b1fcda8a72c8\n28ea0451-bd97-4116-8dac-04a7acb1628b\nd2f801e2-904b-4512-b282-93d42a9ad378\na40ce9c5-aaad-47d7-9eb3-a8b9c0bc7619\n49e9bc8d-13af-4387-8c7f-4d3dbc4a723f\nf885a5f9-f15b-401f-98da-84f1a4f85fae\n7f212249-b971-4d9f-8c86-c1bfd26fdede\n77ca2ef4-731a-4f19-9f13-c1977485805d\n6e0ce066-d98d-4310-b069-9a17fefcbc73\n17aff441-1729-46d0-a699-f39729668d6a\n9e3869be-15be-450e-8c1b-7a3c5546b662\nbf502ce9-a079-4a78-b0d2-64a52c3bb5c2\n2178870a-c19b-472d-a6e5-e3b2d363db97\n0230cd31-67a5-48de-9868-9ff25afc3a11\ne8e68935-3822-4f08-b8b5-68de626bfbc7\neb7d3abe-f58e-462b-9f60-f336096cc2f2\n1d1293c0-5327-441c-8c4c-148ee07a28ab\n7858eaeb-bb90-41e1-85b5-4292cd030563\n2bda79c6-12e7-4266-9d43-9ae34be6454e\nb3d77c69-32cd-4751-90ad-0eef8a534388\ncc8093f4-c6ec-4762-9282-12fa66a3de30\nf104c055-f2b4-4056-bfac-2d98cf987a10\n439ac6b8-35b3-4d47-ae88-03fc2120d27b\n6f0ea370-2d8c-40c4-93c5-ca55160863ae\nc5e07d42-4b77-4123-9268-0351960411ac\n21534c41-b2db-429e-a3d5-73d0cdcf20ff\n378eeaf5-3817-4969-b948-99b4e33838f5\n7b13565c-3884-4fa3-8185-257a4d1f85cd\n1c4cbc88-cfad-4c10-96ec-8aa0e79dd22c\nf276f3dc-e724-4b8a-8a73-5bc41c653989\ncd0c3b50-62fb-4a7e-a13f-1089b60d8a22\n19ae1998-4825-4a14-bc7c-8be2669782c4\n4b33c9ea-d15e-4f4d-89c5-8c653468d9c1\ne003f84f-8bbb-477f-8cdb-93ff42d1e29c\nd1e0cae3-147d-4586-862d-f440ef3f5024\n95efcc4f-4f90-4e49-9795-7866be288558\n3387fd04-b24e-4c44-9236-bc1ec0af9ec4\n4e2d2e50-6b21-4e66-ae7c-b74c216e5e23\n8bf77ce2-cc1e-404a-91e8-58428d0d4492\n9e6fe0a2-e1a4-48b3-a441-e5ae6801219b\nf74731fb-9090-4305-b02c-2e73ffb903b1\n758a32dd-acd1-48b8-9ce8-5aa9e5c86e2e\n73fb4d05-92e1-4164-80a3-e46f70f14fd9\nc63cbd28-2b13-42c1-9437-3364c83f0181\n38bbc9fa-64a5-4889-b831-9da15b66e829\n5ebd3cde-fb71-4f20-9ffc-43d723ca7329\ndae737f8-b28f-4444-a794-fcdfc8fc0dca\nea193513-1644-4a44-93ae-d68a86f778c0\n11b7b2f6-0e4d-4e94-a03e-88111ef5301e\nbdb5f489-eac9-4c45-852f-3b33cbd7e2bb\n5c4a187a-4d0b-4043-a670-3890a242d374\nf2e4fd42-f399-41b2-b1b5-e26bdc19e5a4\nc9bb78cc-ea6b-41b2-96a0-1fe894b2e8e3\n3adea05d-d86b-488b-9d48-a26950bf14db\n8f0d907c-65e7-42b1-af15-e612055ae000\n6b94f315-6204-4822-82ca-e660e0ab5521\n1a7b9327-e6e3-4c3d-b4f9-d86206e7e75a\n48157ce5-a4bf-4d49-a914-aa85fd32373e\n688777fa-955a-47fe-82d6-b9a02b6fd99a\nbf62bb6b-fd05-4618-a74d-c29427cbfb87\nc377deaa-8700-423c-94c4-384afc4e370a\n0988c845-0b09-4fdb-8372-81642acdcd2b\ne3722378-ba7c-4e2c-949c-3352a499b24c\n17972fed-5669-4fdd-8673-28be628e77b5\n2efe7566-fe3e-4dd1-b649-c73db8e3661d\n49cd8311-aebb-4f68-a4b4-789103f52937\n91c274f0-77e7-4469-bbc8-6fe35980164b\n5e6d866b-1667-464f-b659-4ab436e30fda\ncf5bbb11-e7e4-4e65-8024-7b0fa6132fe9\nfabf5bf6-b648-4449-b823-da14b53e7aec\nb470e714-a754-4491-a7df-b68c4fa6a94d\nec1b3d65-1c2f-43fb-bce7-5d128e0f3afb\n036e95c2-6bd4-48f7-b59a-9bb4cdd89c19\nced9214e-de25-47b8-a6d3-739b3653f2b1\n84908b46-d683-44d4-bb3c-ea9f9bac41fb\n608a60a4-bff1-4ca5-983f-89b7c89f70f3\n2fb6bfa5-c317-42e8-812d-646bb16e9d2d\n5765a653-c451-44f9-be7a-61c1d60ce6cf\nb653dcc9-edd2-4cac-81d8-4ca48d1da5dc\n41800086-005d-469c-bcc4-106c6ae13ba3\n77e6180c-c92c-4ce5-a57b-7e01b78c0a06\ncaebfb4d-c58a-4fc7-9926-637627486cfd\na21a4284-dc5d-4a40-84cd-0052ff52157a\neb8f0087-c506-4eea-896f-da908e255ff7\na57aa906-19fb-4212-9454-3c39b396d871\n0d6ade6e-a565-4c0c-b621-c74441b83e00\nfbef068b-7412-4fee-adc3-0cc6756da908\n22d546f4-4981-4e16-8000-a9d60d954337\n65c647e1-5c00-436f-9eb8-403abc8b278f\n4bade2b6-d95e-4b05-bc21-f76cffbaa8f4\nf3fdf874-8f14-4d6f-adec-5552e38006c3\n77e45f9d-25a3-45d3-9f12-9213e0cb92cc\n136c04f3-19b3-467c-926e-b36b2472ae80\n2810574c-2c26-401f-911f-c73fcc0111b4\nbc6215f6-d119-4983-9eff-ece52de88121\nf2af45c7-78e9-4755-bc7c-b06adb1f1454\n4415e280-6fe9-4f49-9518-7dbb08420c7a\n32ec9d20-b378-406c-997a-bf36db6450c5\n67a6d188-8f66-4c8a-a746-be59c016b288\n2e97e859-7a7d-441f-a9af-118eef304cae\nd3753670-08c8-4b6e-8819-55bbb89db685\n5732d90d-c793-4a3e-847f-d64879d91c02\nad9c6035-fd35-497b-a068-2802fc3f1da1\nbc54615d-6c2d-4c9f-a15a-4d80847beac4\n166e4b21-549f-4110-a92c-2fd9c42ea590\n310d99be-a948-4f58-98d9-830b6a5b005f\nc1e5b811-60b9-45e2-a9da-7851172dc22f\ndbb9fc1e-a868-4bf3-9aa1-77ca5fbecf1a\na6614837-9d64-4a5f-a37a-f4db412d11fc\n85d810c0-efff-4542-82b1-65235d456e00\n7a6c31a7-2992-460a-a324-4798404290c3\n4dba272f-8152-48ec-8f4d-384050745167\nc248bf0b-20a2-4e2f-8d43-059861e02b36\n4330f2d7-f4f0-4ac6-9e57-31401e858100\n36b03bc5-04ee-4831-a44d-41f64007d51b\nb81193cc-58a0-4bf2-8be7-4dbbd7e5491c\n82c10d71-3941-4bf4-b967-fcc9c010d2d4\n2f594db3-de2a-4995-b9ac-b6856b068f87\n975319b9-5635-482a-9c31-48635247cf22\n43aeaaa6-4cbf-4d10-9603-2f7e0bb308a1\n0dd97af2-9ce3-4f12-855d-635598bb7243\n465edcfa-01e3-4f57-bfbc-52b6804bd2c6\n183688de-463a-4243-8f89-649eef66d0b6\n8cd007fd-592f-404e-abae-004c4a882cfa\na3b176fc-e64c-40bb-8fab-45db780355aa\n2e37fc63-3b97-4b9f-ae7d-402ea600f0a1\n3aaa6462-8f40-4783-96b3-8af38ded509a\n848a1c52-ade5-4172-88a9-6aa9af45b2ca\nb2b39fb2-80ae-41fa-b2af-68182b9e771d\n82018236-693e-4c4e-9b73-29e08f566e81\n54432015-160d-46ef-aea9-e5f068de70f7\na3c0da27-1b8a-4d72-b26d-b4a5d94ee0e6\n382184c0-c9ad-4cdd-bebd-366644438ad9\n2b8026d2-de7f-464f-b433-8aafd0de8123\nc610416d-87c7-466d-8f14-0d7c48103b0a\n747ecbbc-024a-44b2-89fe-d162a7f7685d\n3089feb6-72da-4ab1-9d80-9464a3ca3e51\n9fdb4989-8629-47e5-ba53-1cd83215c5e1\n02f5c7d3-0a57-4efe-a800-8e4f0c09de8c\n0bcda209-8107-477a-acd9-b02523ca7c56\n026e408d-6c4e-47f9-9c7d-1913a6a999db\n3964f2ac-9fb6-4076-b369-64a2b2c03449\n58619fee-f37a-4ea1-a05e-6e42e2e9cde7\ncf285f42-803d-4a5d-aa80-0e405728e0e3\n78b74e50-bc53-4200-a5bc-49c554de62e0\nb469cff5-02fa-4a7e-ac99-42d7b010b0a2\n3cba17bf-8dbd-4e31-83a7-d0e17a345a9a\n78f1b1d3-5f0d-475b-9179-5602a705ccae\neebeee4d-f507-4458-81e4-f012ea5ccf4e\n250fa2d5-f2f0-4f18-a483-1c01d1bb5d8a\n2610755f-36a2-4da2-8af1-2bab18e35df4\n5b591bd7-0643-4587-a9ba-abc771eaf14c\n80716d42-7f9b-4cf8-bbfa-c8bc859898d9\na44a22c8-4123-475b-b63c-07adc60fb2fc\n21d71f26-27e5-4b03-a78c-cbdf5682930f\n95efe922-ef42-4efc-ae02-ccb51ac48535\n81101e25-7a85-4069-a6b4-95e0a54ca63e\n100f82aa-3d67-4146-bfa8-f437c8f1ee73\n1e25ea23-4a2b-4ffb-a972-8d7454c70e36\nf72dfebe-ab8a-46b7-8a75-cfb0e468bc4c\n93520b5c-e270-49ad-9d96-6e9ea93998a0\nc50dcb9b-7649-4334-a9e0-7fe86acb06e4\n69fcf258-6231-4d97-96ea-a0e628c9ae6a\n2cd40f0c-1a5d-409c-9c8c-5b63babe189f\n06f1ca90-065d-412d-9612-4268f9c17b5b\n7c4a2839-d68c-43a5-aa32-364770d26bfe\nf10bf317-a544-43c4-a8e5-252ae986968f\n27538969-9184-4f01-b59e-f26770da8cef\n8cd825b6-6075-472f-9977-d15b766ba8ec\n25caa62e-7c46-4fab-b25a-fe533002b75d\n3306106e-6a72-4bc8-adb3-e0c7ac890165\nd18e80f6-0fe8-415b-9f84-ebc76fad3c36\ne577ea77-76f4-4689-96cb-96d628938cf0\nfa81bd17-d198-42bb-ba98-165f4f76f06f\n6b834a67-9801-4fb7-b704-0ab7872f4db0\nd85ac882-0ef1-45d6-a39c-fc1b75d418cc\nc57102b3-be8f-4274-aada-817db94c42cc\n2071af5e-6e05-4092-b4b8-13dd9fee423d\nd1b85f12-8834-4e6f-aa44-cc44130499f7\nf78448bf-9d4e-45a8-8b12-1d65068acbc2\nb747695d-ee7c-45ad-a08e-72a582cfa5bd\n10b8b565-5f1c-46a6-81e8-bc748796f6d0\n602234bf-bdae-42ae-8bc0-805f8d305ef9\na39ab52c-0628-42b6-b08d-de0c7daa3586\n85ce8bdd-81f1-4f19-b576-fdcf8fa1e76d\n6a9d5bcb-64d7-4c2e-a775-bccfb5be5d33\n675db460-e892-44cb-831c-203de630ec37\n4b6107a4-b3ca-43ea-97d2-2b286ada3853\na4018894-1b2b-4ddc-b5e9-4ff9a8e05191\n13ea9114-b2fe-4ce7-9577-90289768f4ac\n4ca19c5b-815c-4299-a36f-0ff0febf9c4e\n088c993f-78ba-4944-82bd-f6b234d5bef2\n78857483-80ef-488d-ae0f-b5f697fee038\n8018ecc3-47b8-435d-ada7-c25b66c4b94d\nbe9d9840-0031-464e-bc76-d476d1016cc2\n2d4a83b5-901b-4b97-9ec4-4448e67bc3ec\n2c47196a-76af-4b78-ab50-c97f383a266f\n4f05edbe-3bbc-46bf-8b49-bd5d374c53d7\n645addd4-2cad-43c9-b06d-364745c8ceea\nbb5fb8ba-0689-4659-9be5-4c9655bd13ce\n63827d69-c27e-4818-90a5-1f969a989c67\n4aea8d67-c0dc-4c38-8387-ae86064b76ef\n92acba82-3cd6-4d07-be0d-1ce355cd1fa1\n07088159-8d6c-46e8-9920-619380f23086\n31f687cd-83c6-4559-b7a4-f9edb8b2f74f\n871c74f8-6810-4ebd-b689-97e527672e6b\nac022d6a-7c93-4e95-af18-855045c5059b\n5971f031-8316-4c54-b853-6d1b1462eac2\naeb0e4f7-0114-4310-9ba1-bca5b6b9613c\n3cfdf8b9-c0d3-4d01-b9bb-78564e106d43\n8a33b592-44d1-4157-b5a4-82473019696d\ne4737afd-fd6b-4eec-95de-f1ca05a56cb9\n10dbd04f-f1ec-4605-a769-e2031981b55f\n6ebd3a8f-9ed0-46c6-9311-480ef8cdb45f\n78c6840a-669f-4e1d-890e-d7d574b05f9f\n98864736-b3ed-46c2-9f97-7f9bfc98e1e4\n9c7ea5ce-a045-4ebb-8352-b5222bc7e135\n53d55ce4-3dea-457b-a58c-f2e18921b0a8\nc0aac18b-7f33-4a20-8123-0128862c1379\na984bb90-81ea-47b6-832d-85c2efe185bf\neb432ff8-b5a7-4ff2-bd8e-c705725b7d27\n06b75e3d-0655-4469-9faa-200b25888b33\nbb51644e-4c52-4916-ad5c-edcfb5599113\n189a02ee-4b7f-4d8d-95be-bccac196be7f\n5497649c-fe26-4e79-b823-afc6a1237d0b\nc62e5538-2ac6-46fc-baaf-24466be76ec6\ne893f726-d18a-4d67-b169-37181be81883\n7485e1eb-bf37-43b5-bfe5-7f92bac19f1b\n61467e4e-fcbc-48d0-903a-8fe9063e1db1\nc36d6c7e-edc6-413b-8865-bb7f4e589640\nd61e1ce6-df7f-4732-be2c-464e83df13da\nfe70b85d-56b7-4dca-b964-d7e91f29b9b2\na074f0a9-a9e0-4fb5-b719-4e091261794a\n095b3091-7d75-47d8-82b4-b4ae9e940052\n142906c1-263f-4145-8985-5e4f28213ec3\n3681c41f-31da-49dd-998e-cd3e08fb07cd\na8089f85-4817-449b-bd75-50e34fce52b2\n35c0eca3-7ad8-43f4-bf12-ef223b95de69\n79af3202-a00c-4c7d-9729-9524a5907c36\n82cced7d-ccd5-4150-b504-57b6b57c7977\nd34c6511-8fe5-4b73-bc52-eeb3727c0c00\n201fb2f2-bb97-4e08-805f-de7ae1af8302\n84e38a49-f330-44e9-99d7-485bdd7431d8\n0aa574a6-dcc4-4409-8fed-6dcd1c3c4516\nd473ab0b-00d5-48cb-8b46-a6cb3b63154b\n04068d4a-5b16-41a1-bedb-0997ae4eea19\nd2d7e358-6e12-41ab-abf2-1b5cd4e5ae6e\n8f6de9aa-518c-44b0-ad84-5e693f074c28\n8d7e9556-245b-48d7-a175-5ff8a518a905\n64439735-1710-4fb5-a340-9bb297093f8d\nc10d7f50-3b94-4771-997c-acebfe10e8e2\nafe7c3df-5d70-4217-976e-a1562a95b5fc\nc8fb7d47-d3a5-465b-a459-493f3669071c\n5227dff8-bee0-4291-8a73-eba00baecc74\n8ec7eb7b-a79d-465d-9f7f-5a791ec4e20d\nb4e5e5e5-80f7-466c-afc5-fca44e9bc0d5\n1cd9210e-ef3f-48e0-876e-a26171bd78d0\nfb534702-5135-4287-aa31-8d129ede5fd4\n15be911b-be41-420a-b579-a6a6a2e6bb85\nf38ed1b8-d4a7-4063-8777-6fb1698c5569\n4406e85d-9464-4823-bb23-2765433ed927\n14bd099f-57dd-4156-81a7-0737b884a9fd\nbf3a5fab-a150-4c6d-a8c8-eba598bc1d1a\n40766bd9-c509-4cb6-8047-80330447d9ac\nfc873d1a-532b-4f01-91e2-b7109b39aabf\n284696d6-8b1c-4c94-9736-ee070cb3b666\n6cad16a6-c7b9-46ab-9ceb-0c65a4ddcf1a\n89f533a5-2123-4f54-bc76-11e14951dd56\n0d70f0d0-c167-417f-8832-93f1af390f9a\n20ea5281-b89c-4262-aed7-355224423867\n16249a3a-6d05-4128-be72-8976b0020920\nb07de496-c5b9-4a25-ad85-722b4048502d\n72a16f03-233a-41a2-bdfe-d0444fd0a258\n154dca56-2bce-4d3f-92c4-67980cfa7249\nbfe97b6c-56cc-4a44-9c24-66999361ca04\n59355887-89dd-44d8-b5b2-9b14c779b90e\nde0b7408-6bef-4854-aa14-e9d11875959f\n0bf7c230-63ea-435d-b979-5bfab0694a5e\nc8de36b9-e0c8-489f-ac91-ab299de04c39\nbceaff82-d387-4ae8-8d31-3007e2f8fc6a\n8bd9c9c2-97a1-45bd-9a7c-d9e3e713925d\ne4c6c71a-4dda-4ef6-8a59-86085987ac54\n72647fdb-f2a1-4f4c-b857-573ebd8084e8\ncdf2fb65-10fe-44b4-b7c7-1811db11174a\n79baa5c6-8047-408a-ba58-fc7bc1f9fa69\na0a0671a-cb99-4b02-ac35-8a142c9fb3f3\n500ddbb8-86eb-4bf7-ba6d-410da01fb37b\na9528977-842d-405b-8179-a873a0af57ec\nd0016bcc-96bb-4ebd-900c-8ac0a6b34ded\ne9eee9dd-b7c3-4872-9fae-60e64d8292e5\necef56c2-4a2c-4ceb-b94e-b69968e78a1f\n07f0e2da-cb21-4857-9086-1436271bfbcf\na31df4b7-535f-4527-a1cd-38d27e66b248\n17ff7908-446d-4301-9942-fc5d893ed532\n62c9d1f9-a09b-4783-9bbf-95b83d21d4c0\n6cd83316-f1e8-4eb3-ab2d-ffe700da32a5\na7b923d4-8047-42c2-b73a-7aaab3856a94\n7d8b1f62-8bdf-40e4-b674-8cc7109f065a\n163dab92-6f0e-4b67-8cbb-118b7b9808c4\ne2053c8f-3a3b-45d8-9472-7e264714466f\n8c36e6bb-6ab3-4991-8c42-3bb507c047e0\nb387111f-40c1-4645-9310-2f3c188727bc\n85010734-c3f6-489a-802d-c10136b2242a\na0738457-588f-4995-b21b-0b78291c3e64\n3a28c5ca-1440-455c-af7f-35e3c2c2af5f\n65ac1063-c745-48e0-bdd8-243973ebcb18\ndf334a65-63fc-43ef-a14e-d2a44a1579d6\ndce5f7c2-8f87-4741-a9d7-2af1ecafc89e\n4f839a05-0d73-4c89-9857-30b7bc58907d\n607a40a2-7f74-43d4-8a64-806a8477cd2e\nfd2956f9-13ef-49af-8a7b-c983720d177e\n9f82d2e1-fc55-4735-89c0-9d095f92093b\naf8f75d9-9e0b-4cc3-b7f2-8405b9935fe0\nfa44b211-4f21-4eb7-9a39-c4b8c8b91293\n0475c30a-1652-444f-83f1-a0695505c1b3\n688959ff-1bf9-4786-b7fc-0030b7830aaa\n2b9de8ac-6bd7-4eb3-b967-7801556339cb\n2d1a576c-5e4c-485e-b4e1-0d175b2efef6\n83a340fc-e5f3-4a16-8e13-dceec9d8cd46\n391fc312-bd6c-40be-8f9e-0384cee6ecb6\n3d47715f-9cc6-4c04-88ab-abfa05862fa1\n978f1666-a6df-475b-821b-905c112b5c0b\n7169c812-ccc0-43e5-807c-78ef8eb017de\n8c5d3f24-d774-4caf-a5eb-6d5dda8015ff\n85e6a889-bf42-433d-ac00-6bf68bd6f0c0\n0a895483-1959-4879-892b-6d2c3ecc212d\nda823e33-4abd-4075-96a7-24869bc15e3f\nf6940bf2-e451-4f5e-a290-2176019494c8\n02250b67-aa83-4b0e-ba66-c34b513015b4\nb7ba497c-664b-4f29-8a91-e6b7d494893c\nbaff251e-74dd-48c3-8678-b71d9ca3a8dc\n714a24ed-f8e7-4250-89da-dc5a8cb0067f\n40e2a672-d1a7-4832-8ff9-9e9355b8a69d\naa41e236-040c-4f95-afa5-e94844bba451\ne2168d2a-5236-4b0d-b846-213be731ca9b\n1cf9987d-7765-40b5-a714-7541d0430a2c\nfa9327dc-6e50-4376-8506-06d434181c6e\nb22c1e58-2205-41ec-8758-5340eda4a31d\n016f14ae-d0b5-4422-9173-017f8471994c\n0123d339-6a1e-457d-a10a-44f87bb55025\n83826c89-382e-46b6-8306-265cf2868515\n9bfee58e-324f-4c64-84a4-5888738f62e2\na731fb92-e3e0-4b86-858a-807b68f0049c\n0819ff72-b626-4bc2-82b4-483bc1243fd8\nc1906305-38de-4bff-8863-1bc558dad3cb\n554af535-c353-4119-aa24-98d9e7d5dabb\n1696f3e5-47c7-461a-9ec5-9d6cf9330ed8\n8d83e608-85ec-4636-b7ce-6aa2bb3bb9b6\n3834060f-dbf6-4e93-8239-774666342115\nc6dbf3ad-4259-4376-883d-f4649bb3976f\ndb895897-d8ae-4722-80f8-9d5857775c18\n427a412a-b470-4c1b-8779-34fd648507c2\na95e1594-8906-4a8b-acf3-617545df0913\nc8622df6-6831-4b5a-9161-8bbb7a16f283\n030485ac-b1c1-48ef-8bb0-e705bf80e4ff\nad4ae2af-3a1b-45b0-9bb1-766c4b3d85c0\nb624108c-d74c-477a-92a9-0cf6d206c50a\nace03335-b070-4697-923c-e57ad35091eb\n4f2a2d6a-3509-437e-a5b1-0944e93f16cb\n7c9672df-9712-4b71-99d2-764f14737dcb\nede1d475-46df-4835-830a-b3903c53dc47\n1681329e-483d-421c-b0ed-e7ae93c27b01\ndc676354-e530-4df2-a687-9729c34f04da\n8d53e72a-c591-49ca-b920-350cf3d2d9dc\n62a9bbd0-277c-4075-a92a-e7d298586332\n7fcba52f-941b-4606-8f47-7d94aa100069\n341108da-728f-43ec-bee0-6635e97f9c1a\n04d496d9-ebc8-444d-9dee-bf76ced6367d\n27a3ceba-65f6-4255-8e49-8def98eeda6c\nf118a7b6-4e2b-4d51-9339-d9bdd565262d\n6699964f-2606-490d-b31a-53c4aa5a9a1e\n1c5f9f16-cbeb-4794-b733-e0473d821707\n1e1703bf-dbcf-4332-b54f-7208a8f4c1a1\na160e993-9d42-4b2e-94e5-1a40d1d68a22\n50e7a39f-72b5-4258-a474-59f6395ac4c9\ndfdcc24a-1be0-44ae-9468-f86511e59ed4\n3b5a0770-1333-4b78-ba4f-c033de29c666\n9e663c5b-2f04-481d-b97e-477b6711c082\n5c7321b9-0de3-4e59-a084-61da16a0fdbb\n36ece638-1a8e-432e-b2c7-f726e6bc900c\n94ec18d6-5e9e-4370-8568-e0849b81c51b\n9bf8dfa2-291e-4e3d-a299-986bdce25d01\n2de13c62-b750-48f8-9aed-fd330ba887cf\n9fa6fed3-a0df-4422-87bc-2696f847805e\n5853b09b-7777-46f9-bfca-9aa55313d5f9\neb4c4dab-93b0-46d3-8416-df656b139f8a\na5f9ccb5-bebe-46ab-87d7-5d40f7fe05a8\n29a5a2ee-dd27-48c7-a6e9-9af9ca8a920a\n1655f800-b2af-46ab-b87a-035771e80221\n883ce72c-58fd-4d05-998b-da6c0bfd6ccc\n2257ec89-04db-47ad-aa4d-bc4565688426\n7c512675-95fe-463e-9e46-2a20a688ed47\nfe89ac51-6c07-4b94-b76b-dbe459d19cc3\n34f93870-5e41-40d1-a229-b2a802a764ee\n195ff02c-011d-4947-9bb1-8bfd5a5f46d4\n1f8c0a37-a564-42e2-9c82-c2deb454a4cb\n83d90628-ddd4-4f8c-bc23-6bed5986ca53\n6dd53628-24df-4213-96e1-2f674e0bf839\n3537b70c-af97-4a1d-aa92-f905ca0b9cdb\n97622675-ea2d-47ad-9148-4ff15cc415c4\n753e320e-415b-461d-88ea-502ff33e11a4\nfc41840b-5fed-42a6-8bf2-2efd7473ad97\n905c00a2-1db6-4b63-9584-18652c2beb6e\ne2bfa541-18b5-4d0a-8ee2-23502082724a\n42a4bfc0-6fd5-49c4-b6d0-0fc3c824938f\n46ae149d-df73-4f46-8471-aede3220b026\n5c947052-d615-46c8-8137-f8bb5a3e24e1\nfa4e58e6-9a40-4609-9ee5-2a30b96d4b42\n801ab6ac-36b9-4737-8ea2-393cf9c8023a\nd6e2dd45-2157-42b7-90be-7e00aca67fc4\na4b5ce20-0dc2-4986-9dca-f79fd69a8dc0\n18848385-e6fe-4e25-8c07-e01ccb95cdc2\n38d63602-882d-4195-94a8-d639586b76bb\n993d9f06-b924-45a1-b893-074010dd2bd0\n211a7542-8b76-4619-b360-9ccbb4678d8f\na381f3e8-b446-4b67-9ebb-36d8ffdca625\neb05e138-8368-41cb-a7dd-f7b530a2d398\n9f6157c5-3178-4c1e-90a9-943517fc62d5\n4ea2a5d6-72c3-4abf-a6e2-bbc9c6fdd703\n9b530e70-ac22-408b-bf45-a4f49fdd3c50\nd0c5c85b-6f81-4370-afbf-27e970920db0\n0039cc04-50c1-464c-a8ce-0c290dc2a38f\n0d9ba877-5ad0-4656-a603-3f0000a9311b\nc660399a-2bf9-42b5-93af-40138aaf692a\n20800fc4-c092-4340-94cd-cc4205f9af2e\n05c39336-c77c-4699-85b6-ee5fc6eace77\n6888d9eb-8250-40dd-a3d7-7fa30b2541d7\n899b8333-1709-450a-85c4-0ae301c42338\n320f4369-65f7-440b-a3d7-2e20ed5e8e66\nb24e44df-388c-4f90-a91b-6cb42bfbb7b2\nc50735b3-b0f1-475c-ab66-fbf8517610a1\nc89cbf91-1099-4662-ab24-6cf7a12efa7e\nc1a8ca83-8046-4c43-a3de-a85cecbf46b1\nff54e54b-08dd-425f-b3dc-ba82ee40b6af\n0469ce7e-a12f-480d-9be2-c1a5f8ff9d37\ne4f2b0a3-d03c-4dbc-9dc4-905814452528\ndfb60ae7-cc18-4523-a04d-9e5df3281ab8\n5be26f34-8afa-418d-aa17-70815a0530af\n8d1ef381-195d-4b1a-bb68-5e6bfc987124\nfcce4b01-2ed5-4e7b-b117-0ec75fce08d7\n0d822297-521c-4290-8520-cd0e9a38ac33\n49a4c3bc-0ac4-4051-90e3-5094170cd039\n3918329f-b290-4e25-84c8-98b10824fe23\nfd928bd7-7e33-418c-9ffb-3cd6461dadd9\n1488abbb-72a1-4ff5-a65f-1447344fb634\nb28fd542-6eb9-401d-9183-bbdddeba54f8\nc6f78dc5-fcb5-4f34-8bd5-6a46ce6d0459\n7a42ec9d-014f-4bbc-9253-6edfa1c9e5b3\n64489663-a653-4563-9314-5f118465d2df\n7b256768-ad0a-48e8-93de-1eae8be29326\ne7d19fbb-8bbe-485a-8617-75faf9400bf4\n06dd4423-ef70-478f-83a1-0523ea3ee1f3\n3b43bca0-7026-4d5e-ac98-959178178cc2\n306a9d84-8bca-42cf-8c97-981e06ce7728\nacab1794-7c9e-41ad-8f1d-ced677d26172\n263b9084-5a04-49aa-9e84-66b67b50518c\n346f5d87-ae43-4f13-875c-c37e5cc8f17f\n28a46ebb-fa95-4e80-9162-f18f7ac11c85\n76cab6c4-7a34-466d-adaa-692d160835ec\n6636a292-bfcc-4d89-98f1-b814a0552702\nbdf7d2aa-0346-499a-9788-eebbbc398f54\nd56500a3-afe5-4a65-b116-f7c4c0468b8b\n9d918329-66cd-4d3b-a559-bba2edb696e2\nba434975-d1ce-4da0-b4e1-4d56f18c0a70\ndaecf4c2-4933-4184-99e5-85c221bb172e\n0dfd3526-f154-48db-9078-545af53f0af7\nd56b1e17-cb0b-46c1-8e8d-676b899d1093\n22a78fc7-ec40-4a95-83ac-7476ac28f574\nd59a4744-b6b7-4082-b699-c8f01d4f6b21\ne35735b3-ac75-4dd0-a31f-e5c09d7080e5\n11635f18-a05b-46e7-b8c7-a6ff8a3b0928\n59456209-a9a1-4f30-bd74-6a1ccdd87871\n95198378-4929-4e18-8a20-18b09f16a9c9\n19036d68-4619-496d-9fe4-a9f9a8ab0117\n91f080e2-6679-4378-bc9d-5a0fb015a6f3\n4cf30447-0fce-4900-8681-05a45e58aba7\nba4a8d8f-4da5-4a64-9464-a193905a036e\n7a61e60b-094e-4436-b391-ccf87f2e1a8c\n5d01709f-08a1-42b1-a481-604fdb3ba922\nb5a8bb14-8489-49d9-a15b-426b524e808b\ne3411dde-be87-4223-a19c-a68dd3f9f647\n22e683df-4198-4fbc-976c-58085a7f27d0\n1b3716b7-a45a-4c4c-b939-5d911d16561a\n0422ba17-26a4-48fd-8459-3689669e3e75\n17af3cf6-ccad-44ae-80fe-c3c6593cc520\n8070edcd-068b-45b4-92b5-fcfe05833b6f\nd247bba3-58dc-4974-8d73-1204ead2369b\n653e78e3-cd05-4c6c-9f6c-25815a7615d7\nc23cf7d7-2835-40ac-aa1c-bba315f2793d\n4af2e640-f88f-4c01-b51f-0a8964cad1a8\n7dfc2c33-e9a3-4afd-9c64-904e1a891b23\n52a7938e-4932-4754-9e16-a0356b07ab4a\n4a852c4d-8a67-44a1-a85a-22475e1eaeff\n66b7f1fd-61bd-45bb-b01b-d3dc83b11c91\ndb7ce7cd-8e13-4311-8f32-8a123688e134\nd42098b6-4638-4e22-91b7-6802f35cc733\nb94b7a04-e5c1-44d4-8374-b5408b61a6c2\n7858ae0d-5a64-46bd-b271-6310a3926f2e\n29dccc4e-d213-45c0-8471-d69972b81cc9\nf8fa71e2-c2b2-4666-9178-80889fed7070\n2bd1cacf-4b9f-40ec-81ad-c2af56f6775a\nd5899253-0e55-437a-b216-4278ccb1a467\n3db54608-ea92-476c-8a98-214151892056\n43e52745-fa38-4762-8ae0-4dc984cde857\n13d412ce-19f2-4eb1-8c94-d3032458a98a\n140789aa-7b36-4203-b3f8-8bf8f49181c7\nea96c77c-f320-44f1-b742-f40882c0b550\n080859e0-2b69-4825-950e-9ab191b5711d\na0993e2f-826e-4a3e-8156-92c63516402f\n01f7add6-300a-4bde-a73b-56578c710064\n496eceb4-0e4e-4682-9d18-d2508b617e2e\naca3baa0-09df-41a1-813b-09094cffeea3\n26b89711-f496-47fb-aca3-5af7cd212ca6\nde3e00f1-08b6-42e8-978a-8e6bda3f9b6a\n129823ff-4b95-4bbc-94dc-9c7cc06cf1bc\ne313ad91-82e8-43e1-8232-8a1f489ea324\ncdc283e8-0597-47ea-ab58-f80c84ef89c2\nbccae63c-f16f-4a0c-aefd-81dd69efe1f5\n78b2e932-a79c-489b-bcfc-0a884b39391f\nbd26a7a8-db53-4987-943a-8305e9351636\n2f814749-770b-4769-b5d3-61068ae5c12a\n2de0d610-f9d3-4742-b2c7-a12ad1c863c1\nbd5bc9a2-df2b-47f7-97d2-1d2ba73014f2\n600355b1-7711-404a-8c84-d1add6c09b9f\n8c6253aa-1a36-46a0-a158-20815d036b5e\nb7f66bec-4d30-46c0-af9d-edb90d31dfef\n074720f7-f977-4e40-8c83-3f3c90cd8b35\na0f030e6-cb56-4b73-a14c-f6474928fd18\nef78a2ab-bedc-402c-ae7b-70743f0e1191\n5fc9a134-05b2-4125-a351-04fdec85474a\n32189dc7-6087-4030-b77d-56913326495e\n00bbdb30-500e-48ae-8d2e-251ccd7c6822\n4dbe66b9-fd4e-480f-946e-68b86fcfd7c7\n29697c13-b46a-480c-a51c-fd4f9fe8ca63\n3bac44fb-dfdb-4804-b7e3-67dd1131d563\n29661e58-9b62-4e5b-93a2-61d261a901ab\n45c11f7c-9ac6-467f-a8fe-1d15c9d9dbdc\n953355e5-a238-465b-9410-cb108a962b82\ne7cf2781-3561-409b-ba15-9118999e459c\neda6705d-86a0-41e0-a731-1ae42fb8d0a1\n8c94a88e-468a-4b7c-a69f-1696ee5b7e94\n2203023a-0bf7-4ed9-937a-d11781990624\n016f13b2-c0b2-4289-b2c9-aac5c2777a2a\n0309b88d-040c-4ae3-bcdb-3d99bc46f80d\n36260c42-ec43-4588-916a-663db1642575\n2f521ae2-b41f-45b2-b63a-4ee3ae224e81\n9eaba18e-9062-40ab-b587-07c68d4690ab\n0b816da6-67f2-45c7-a9ba-f81dd65cacb6\nb890aec0-7af1-4e7a-af85-e2d12beccb41\ndf4b36f0-be09-4461-b8ab-da66635e585c\n1d6e43c1-e181-461c-8d07-afb8f2fbf88c\nf0ae3460-edfa-4834-8413-bf9e123d55aa\n0a043e59-0b51-448e-8367-8dfba96463f5\n90471504-3041-433c-8ed7-1b9a9a48bbc9\n23fa634e-2aae-4ec0-8c76-4470c4c8cc0f\n0166067a-18fb-429c-85c4-f506ccc44e52\ne619484e-b7c4-47f6-b455-a376027b9a47\n555a6c80-bbad-4e61-ad5e-047a59fff6b4\n5793fae9-6667-4b9b-a73c-6e3517d07319\na0ece829-5951-432c-9d48-8101ad03836b\nc4b7520c-c56c-4084-8e4c-3fd02b028b44\ne63bfad4-887d-4645-b274-aa01f4380aff\nd82f268e-a4f3-4737-8ed7-b182f74ff232\n45930b5c-050f-4f9f-98f8-5148df940409\nc6020a07-1e99-4274-a54b-410b5195f088\n1a145770-3f72-44f5-906a-90c43a33254c\n001aec71-1e07-467b-85fe-8c95b5875c8f\n938622ab-90b9-4d16-87bc-4ee956fe2852\ndd128f0a-6b7c-40dd-b04b-546d634c460a\n259bf680-fcdc-4874-a27c-a7e4804d3bf7\n39d56123-7217-459f-967e-29ed04c34233\n7ccf93e2-b166-4358-ba5b-64059f695bcf\n5b79b978-c23b-45c3-b3fb-9bb8f680a30a\n54825fa5-940d-4708-8be0-ff0b754a228d\ncfaf5715-9306-4c21-867a-ba542c057cab\n8ac9d70e-9dda-49eb-8733-9107ecd9d5b2\nea34f967-b3f6-400f-b09b-435b81d5942a\n9621bc2e-38c5-47b0-a6da-59581cda4859\n67a7d045-3838-42ac-a911-bad988e95512\n6f6282e6-8332-4f99-9966-6141b11a0eb4\n4aee2ecd-ff98-400b-ab18-45d898dcdd58\nad3d6ae0-783f-4ee0-9025-01a6e3359446\nfb6b9a5b-daef-46be-99e4-ad71c3b3dcc7\n1d799e02-32d7-46ab-b2e3-878a9905d694\n6de61e77-6fc5-41f5-8287-63d387304d1e\nd2946f1b-0b80-4a1a-9458-eed41f153028\n2bf94b8c-0ea0-46fa-a570-587496140934\n504e9eed-dc15-45b8-8482-77d8d9fafba9\n086220ac-9833-48c7-b891-8d571f3d7a61\n74882084-f21d-4e95-8a48-7ec39952ea86\ne4614b7c-a69d-47b2-bd26-5d4c7e155c8a\n0c14f91b-529c-4519-9ad3-438e120b91e9\n8233c839-4d3b-42b4-b061-5dfa2ee899f5\ndb284727-7f05-44ba-b4f5-efbd26635dcd\n5a062a06-32da-4d00-aa9e-ac56ad48467e\nda16a3fb-a3aa-4c4d-a1ec-029b90951035\n04657f9d-cd79-4f9f-9faf-7e267856cb0d\nab4c22db-d19f-450e-92fb-ecaf40cb4f30\naef01a63-eb34-4b4e-9e43-efa9019fec42\n2cb43342-c73e-4384-9371-87492797a3f2\nccb0e340-28d0-43de-b7d6-a6d7f1ec79aa\n723af60c-db6c-41dd-aaf3-4b3976120dcb\n98963363-c590-447c-9f72-281386ae7dd8\nca58aa3e-2a91-47d1-a6d0-b2c73fad7554\n4e302f77-a091-473d-9a02-1f0d4f0a65b4\n4670b188-4537-4d33-bb3e-8dba154d7d5e\nf0c7fcca-95e7-485e-8963-4bb57578903a\n813464c3-6ad9-42d3-8fc7-dd34fbfca468\n17c5d853-2986-4a77-8d16-d017726493a6\nadfe21ae-6125-4c38-a609-ac39558e52d7\nba18f550-f6c1-4ba9-a60f-a85e1f50e594\n3485ed87-82e9-4371-9b6c-fc9fdd0da2e7\n1aeff3c6-04d4-4fc1-990c-1355d2ee0328\n9bff9e7b-140b-475f-89df-cedc53e6eae2\ne8dc9bde-0fd4-466c-8103-ca0d03b50412\nb753531e-d5eb-4b17-a046-b480356d7434\n3c25ffe5-e134-48e3-a7ba-8b9ad24ddb7d\n8d1beeb6-5079-439b-b475-8765f3e84883\n052f39d5-c262-4efe-affb-06af037b358f\n9994019e-5ed4-4252-a214-0947456f6f81\n1aa9e69e-575a-490e-aa96-8adc7ed5a48e\nd38b8688-151d-4699-9c86-ce8ba3d0d686\n79fca639-9461-4ddd-a925-93bb8002d42f\n2cd2ad97-e698-459f-b594-0811217438b1\n83e3e5a8-ea6f-4337-a7d5-bf214fb80065\n7234cefd-f296-40b8-bc8b-2c4b455ddf99\n92c3df90-23c4-438d-9aac-1e800566905c\n7102cdda-affb-4822-80f9-4aa65cfff6cc\n4781c0fe-173d-45d1-8d8a-44cc229e6f8e\n3d1d0cfc-c079-4805-bca3-909f161fd7eb\n5bd2026d-cc08-44b4-8e7c-9ac9021ceaf1\n43b55f0c-e9a4-4397-ad01-5da6f31fe8e2\n18bc4a0a-13fc-44de-bbbb-f4e02a411542\nf4ca4ab4-6272-4813-af9f-7f7ae499c1e6\nba4fd785-44c5-484b-a1ee-26bfc0b95ca3\n208a160a-3592-4bcf-8de4-2e4f4ffdf20c\n3dc9b908-0172-44e2-a746-c9100030743f\n0b200791-29fa-4ffb-a483-3a85e36e6598\n11b22160-f7ff-46f6-95a0-8ad76557280a\nd015ac32-70bb-46e7-9b42-33ffb2fda678\n9f5edd92-f5a3-4ce5-8781-4af2cb38bf25\nb7a45ecd-b1d3-4411-a44c-a6449fdc9958\n27e18f09-c6dd-4d18-8646-db8042bd63f5\nb4033e19-b281-4411-8552-3d8166df3339\nf53ddc68-7b19-48d5-81e7-d4e31a6484d7\n71947c2c-3b1c-4eb4-833f-a8e616740a6c\nb8e847f3-affd-441c-9ce8-b4254d6074eb\na8b34f2a-291d-48ed-bb7a-1a7b7b65fd94\ncf326367-9030-4664-9242-5da633a7dd3e\ndb76731e-0219-4a33-b7fd-5d31cb93b0a4\n7a2d0efd-6d56-474d-9eb0-7abdedec8fea\n4fc32fdc-4802-4a1e-8b98-0a7e784a7c00\n5f960bc0-5f76-4c45-995e-94fa6ce84990\n4fe88074-38e4-410c-b42e-90dcd2d327ed\n3ae1f9cf-dc8f-4450-a740-ae4895a9a2a1\ncd886d1f-4ec5-4b39-9ab6-44f132ec0992\n965be71f-ce7e-458f-9dcb-5ef0a05418e4\n811905e5-e089-4528-84be-68a1e98771f2\n15dd1b2f-c393-4959-98e8-e051a76be607\ne62279fb-ab3f-462e-b400-df6688225297\n58c5a0ac-b6d3-4aee-96d2-03341f76bc9b\n8655207d-2dfc-45cd-89c4-99ef80b48345\n2938b7c1-239c-4778-91be-b707c684138e\ne220e94c-9b7a-45a7-a28c-de8dfbff5009\n79c60d25-316d-433d-9ba1-e738d80b005d\na8ed11e3-28db-486b-abfa-f5f7dafe52a0\nbcc1e99c-3816-4d02-8316-403001226304\nbb77bd42-439c-43d6-971a-a51be233ccf2\n70742eb9-121d-4c05-a153-21bbc8b825f3\n1606e97f-d154-4682-81c4-3837d7285aed\nf731acc3-ab89-4044-b167-b250adc26077\n635bd38c-d94e-477f-9517-e9a42ec70208\n0b427b2d-3c8d-4941-bf31-0757d0328f9a\n0539fc3b-be7a-4af0-a563-5c0066b76c58\n4fb77553-a5b6-418d-98c8-415fffdfc733\nfaec0102-1245-48d9-a51d-b866e83947ab\n042baef6-2158-4ef3-b8a5-75f1a5b55bc3\ne13a6b95-401e-4a79-9734-dd7c82b9e1ab\n4f6fb37e-a2bd-4b63-8d51-01f08a3821cb\n442c2b09-db92-41a7-9d23-74ec0a2bb0bd\ne5ec316b-e52c-4037-8114-35f4c632d9d2\n03d9bad9-228d-4b97-acde-79a10794126b\n5a4f3e15-f8d4-4df5-89b7-9b142d136a08\ncff111aa-53df-4e16-9472-fdc0be2057db\n96f7286a-ebb6-4b61-a082-18200e320df9\n671d16c3-352d-4569-8d1b-4f9e61a81b93\ne9ee9504-b5a2-4c8c-be66-8708381708a7\n4db78a33-ea46-4eea-8de8-2e072eeccb33\n759d4d80-a276-43cf-a270-6409a909d2b1\na2588a05-f168-4482-b14f-02a0d6850eae\n706dd5a1-5e55-42a9-9318-c32422f3f279\n5f7043fa-b5e0-42f1-9e01-e2771efb2203\nb14d7f7b-ee84-4f5d-aeff-8005c807a7b4\n3af540d2-2f40-4f88-9ad0-df84c5b40c45\n04886b47-da09-4634-b8ab-de3691c221fb\n00ac5d29-9059-47a4-95ae-367636cee814\n0056d2aa-064c-4fa4-bc09-ce62c01a8bc3\ncd1eca26-3369-4ef7-a19a-e17a15c9f1a1\nd2b2139d-10a7-46ba-98ab-59b543467497\nf7b75c86-dc28-4d96-ac5a-7109cf30e5a1\ncff2d815-07a0-47d3-aec4-c02584873d1f\n3af7b19a-ce6c-49c6-ae64-e618686a6b54\n23fb042f-5f24-4de9-8e58-dcd7f870472e\n0baa2938-7ec4-4308-b237-b51e8b7e3df2\n292c3639-52e7-420a-8540-82e5c462e29a\na0049c97-a342-48ec-a6a5-9a4ec948551b\nd68f9976-9456-49ab-a6b8-55633f8e285e\nf0db158a-63f0-4bd2-9c00-5ce79d0886ab\nec861eb2-cf0c-44eb-8efa-e7f86d490d06\nd6814664-bb0c-44e8-adcc-1f98a66a7b85\n5f63b5a7-98b7-4289-a08a-979948a2f075\n01bb7484-50be-4572-96fe-980b179b60a5\n32437120-e82c-47c0-9768-ed764c1657c1\n57e0fe44-2aab-4737-8625-5986ca7baf0d\n9da1dd42-c618-4db4-80af-39c6b66af31f\n912d0df9-9d77-4269-8a94-9fd3e93eb613\naaf0bcf0-9a3b-418c-83dc-3684c6e806a7\nde180ffe-dead-4905-8c23-36e6d43ef1a4\nab16c8c8-8143-446e-98a2-9985e6b7f5cb\n02ace542-9b36-4c46-af95-8e5515a1a001\n378d87b7-8f7e-4265-8d85-46d3bf22b1ef\n3c9e2963-29a7-4172-9d6c-4710c7e2c631\n7f629e6e-78b6-4934-9b50-689349817389\n144a1607-1f20-43ef-a973-27363e70ceb6\naa8120f1-6b02-46d3-b262-ab1c004a2a88\n26278f73-3fa2-444e-a8cb-5dce2888714b\n3acedf3d-e438-4161-94ba-7d959c388bb2\n4861ac87-56ad-45fd-b183-b7bc24bcfaeb\n708fd583-2315-44f4-8dbf-1d8170fe96bf\neb43a233-6da7-4dcf-b549-52aa854af4ab\n171a77df-dfbc-4346-9bc0-6eb61f0deb8e\n45556e58-e35f-42dc-81ab-76accf77006a\n7245684e-adfd-4889-9c9b-5ee23a9fb655\n102c4511-d280-49eb-a2f7-19dda4be907c\n0306241b-a8e6-4e48-98ab-c8fc9594ba28\n505df198-233a-4b98-88f7-f539c1134bba\nefed15bb-7dc6-4bf3-b13f-d1b462e7c368\n3724504c-fbbc-4973-abff-32377b6e421e\n2f194cf6-968d-40b9-9304-8469b3721edd\nb471d1ba-f12c-4d6b-ae34-fea1e30d7587\n10adb43a-813d-4433-b0ed-00bd848d8e7d\n98789ba2-c482-43dc-afa2-426f89357586\ne1630b9d-a394-4604-994b-c317e8d1992e\n842c4106-c470-4e2c-a680-062fde98e367\n0d4620bf-e785-4d43-b13c-3f387bb79649\nab0d62b3-76b3-4cb9-b26b-ce7f5098a029\nbd68884d-e6f1-4a73-abe9-9d2efd502b52\n3e83efbe-5325-4f64-9003-92aa3fe6f7e0\n101e1e26-3603-4761-94a4-a6936ccf296a\n83d2d37c-56ba-4fb5-9a90-c8b567a512a3\n2304d203-3fcb-4ae8-a069-d14b6843ae34\n5bdf8b0d-d1c9-42b5-ad3b-57f9c34b9cb8\n10b36363-cf3f-4ff8-b4a1-3b00f487c45e\nb09b889f-ccd7-4804-a644-d6e8a3364403\neab369fc-4305-4d34-a89f-cf68091d0561\ne5f1593e-d5f1-4505-84e1-dcfabc665742\n19731729-29e0-41d8-84c5-321992794047\n2ba61c4c-b928-41bf-87d5-a87188daffcd\n8d67d59a-3a12-4510-807a-9f5d0f51cf19\n9b4780b8-c8b2-47cc-9c50-ec16f3ebdec0\n28a265c4-f129-4d05-8e66-f6db49c5d7c1\n6152f962-0bce-4992-bc71-d90e76e126f8\n8b99eb67-1657-4aa2-b7a0-08e9c8e20e39\n6afe792b-c7d5-4f88-9cd5-e19cd3dc90e2\n5f737086-7837-4cbc-aeed-73036749ae95\n5a96e60d-a3dd-40bd-980e-14fe58ac3245\na5fd9e94-2827-4f75-aea6-53dffaa5d2e6\n51c04053-2b1b-4be8-b0c1-77a2c492f843\nf853a962-157f-49cf-b13c-4643c9f3dbd1\nc34bd2d4-dab0-49b2-a799-d095a7e2bfae\n9e629991-9c61-473a-820d-24365cfe4b11\n3b873cae-3f01-4acf-80ae-4e289780506d\n9bd31d4b-d579-457a-8536-d26ff16b5dbe\n2a0bd93b-9aee-4f06-8015-c950e906b614\ndf9fb90f-a93a-4d06-9499-63acf798f626\ne5dfce94-ce56-4ea5-ad70-72bced7782e5\n0a0490b6-99e1-48e4-9165-a2a8a17078bc\nb7b12288-50c0-4a11-bbf4-d9edf1458227\nddfcb23e-d2d0-42c4-9474-d415d6463922\ne8fa4e6d-e15f-4a59-80cb-93acb94755d9\n8729a36c-470d-4db8-8f89-be82cce0f98e\n4b0fd738-9d94-46d3-b49a-0942b5041b61\n3bd31780-9a2d-4737-af0f-37f7c3e412fa\n47e57fe0-09f5-448e-bc6c-966cbdd97a1c\n6304752b-c042-4fe2-8f2e-57d3b1ca52e8\n95daf563-e15c-479b-8b1e-75bfdbe2ae45\nfd34644b-cbd4-4e9c-8537-48aa2152cc3e\nb17b030f-2b8e-4218-9937-7aec7c46aea3\n55909927-3cd6-4a7a-86e5-03ce890a2845\n05cfbac3-f90d-4a5c-a7cf-1d249a418d24\nf23f9540-4710-4bf7-b10a-63dfd888371a\ndf7f1d3f-1e12-4992-a43b-0c2e54b07895\n61710ea1-1c94-4247-80b6-26de59036107\n9fae116c-4187-4471-b8a5-e3bf5d188bc9\n5637a2c2-3d7f-4663-af8e-b9a971bdd391\n0459a2a6-a63a-4d4c-a2af-799287e34127\n0c1462e2-c0a0-45f6-b840-fc34b2c18d03\ne0223f3c-d49f-445f-994f-8cf4e099e4a5\n23ed1e5c-62da-4803-9343-aedd71922f68\nb6be7841-9a6f-4967-bc70-b2993310bde8\n6ab81835-34dd-400a-9bbb-c4f08c453eb2\nbc6edb5b-c987-4b9b-97d8-ab83db7d372e\nbfe3879d-5c2b-4633-bf27-cbbe7a422681\nf4e4bdab-1971-4e68-9438-72cd203b37c4\n35019e50-a6b5-4f91-8f6a-e706f55119a6\nb9704803-f0c9-4cbf-af92-ec01935235ad\n4e6ea6f9-feb1-4751-a40f-372b08458b8f\na71a274d-cd78-4b21-a4e1-f0d6faeaa568\nbbd49c2f-0be6-4e4e-9a02-226dd1fba996\n33382f2d-f8f6-49fb-8e22-8c0eae5eb12d\n4146af4a-1c3e-4206-ae86-ecb028ed9be1\nefe67a1f-8e50-405e-8106-49a32863d546\n51b724bc-eb5b-4861-a115-94fd1ff7a766\n3efcdf49-3996-4c89-8a78-00f65bdc348c\nb6c80cb5-0716-4710-bf73-08bc29db0e10\n2c88db15-cf9f-4466-bb80-8726ab02d366\n559be8d3-bf29-4b04-a067-2fa46164d117\na5681c1b-47e6-493b-b3ae-39fb0e047161\n2b1b0916-8fdd-484f-86f6-96049b1ea721\n635e9533-4a2c-4be0-9134-7b84f7b13a76\n82b45b91-77e4-4cd3-a7c8-7cbcf07da725\n7d6bb996-57b4-450c-8205-8a4c06518640\n50287b4b-2d88-4f44-bc3b-a776c9ab2e93\nd4b67440-c057-4e0f-84d7-7030f0a76877\n9a03866f-db2a-48db-ba8e-471e0f06b7b2\ncade6fad-00a7-4c26-a938-1ae414c6a8dc\nb6e490f3-e770-46a2-bb5d-d26412e85361\nce1eaa98-38a4-4aef-bf01-0af3eadc9478\n88091dde-0bf6-49e2-93b4-be1fbd83b585\n83f865d0-4b34-4a82-b32e-8b510058a9a8\ne9018bf8-c5a9-42ba-8557-383d33d2f74b\n6370646b-004f-4c86-8cd4-4e203e88f6c2\n5b610a6b-70c0-455b-be3e-2132a700ea02\nef90804d-ddc8-4035-be35-1f035278ff9c\n208cb388-b36e-47ce-9079-6c2799aa3348\n1352daf2-ce5c-4a2b-a825-f0fb03f607c2\n7cb19fce-adb4-4b6b-811d-42bdf95b0da7\n9b80aa49-18b6-429c-8240-e01b3c26940b\n86a76a04-9264-4b67-9986-f094a57e5516\n2d01d427-7708-49d1-98b8-d68ff1d4ce1d\n1836e169-73c2-4d62-afe9-40b0d4f0b9c4\n328f84ae-b6f0-4949-ab47-37134474b753\ncb0bc3c9-4b05-4944-8e68-2dbd05afc9ab\n77a14b2e-8dfa-40a8-93e3-60265fda2820\n9e7d000b-a683-4b11-bcc9-4c3b383edd21\n1a1360ee-e2f0-4be5-a4ae-fccbd619694e\nf245c8c3-4c4b-45c3-8d53-2916049b01a0\nac8fe59c-6ed8-48c8-ba82-3de88b6c8eb4\n20d6afa2-7765-4d73-b1ec-cfb7181e13b2\na4869e2a-6065-4a7a-b391-8bed8f2ff7b9\n42913e35-714b-4d30-adeb-46d594791df7\nfca2e85b-cbc4-4586-bab7-b4515e9c3310\n9361cd44-3ca6-448e-b954-358516adee0e\na07dc82c-f80b-4717-83db-59e785a24841\n462d8d1e-b9f5-45bd-9b54-423c18648efc\n1e2280d6-f9be-408e-a78f-67336d87c404\n216dd4bd-e36a-4a7f-ab1a-8318953546fc\nbc3da9a9-785a-4bac-8460-4ef9971f58a1\n5356e080-9f07-4c62-934f-371980f30fa7\n01a98e96-6e2c-48f5-a4a7-038d505a385f\nc619b37b-b94e-450c-b9c7-ec2b8114ccd3\nfc1101f8-7c6d-4556-b7bd-8958be515e76\n6c645421-94ce-4c2d-a39b-5e09ba816909\n1b1252ea-e1be-4f56-bf5e-84dd2abff25a\n8246edc0-8fb9-451c-85ac-1ab579bb48dc\ne3418ceb-0209-43f9-a112-d2c81fc4cbf2\ne3f5216f-b679-427c-9173-7ba359886f28\nbfe00063-134a-4221-aeeb-5b112d7ef8b7\n2e0b14b8-ff0f-44e1-b53d-9130e70b1893\nd083c569-1a76-4b8f-8cdc-552d69f81cdc\na488001a-8984-4b59-84cb-5abb5a180d7d\n8ad6687c-efa4-4209-b8e1-f39af08d5141\n05e9634e-7c47-4173-a332-3447db59078a\n41f9bac2-77dd-4b1b-9d85-5b898d9fa460\n6d361902-987e-49a8-96dd-71f1819721d5\n0cf33186-d551-4167-828a-b09aa8cb5db5\n1130d181-cd43-4811-a9b1-60722c808397\n16b6ec23-f19f-4928-85d1-fc5dbe88cd73\nee722ed0-9e5e-4775-885e-2081de15d803\nacb096e7-b39e-4e6b-9c52-2547d5f291f8\ne2a1448a-8d08-46f1-bb68-da34b6c305e3\nd6cd7e28-0828-44a1-bf9a-0fa70fe18b0b\nb0466ed4-93fe-456a-b272-b6a645540240\n492ffa97-a375-4e5d-be15-d5e833d7d673\n0e293319-8d2e-4f6f-80f6-db92f72fc981\nd4a222e2-d9df-4d77-a2b8-c8d57e5ef87f\n263fbbb4-85d3-4701-a45d-c4747a216aa8\n0cb698f5-e5ca-4c06-b515-d060f440d949\n3908643c-8bad-404b-aa20-c83b3cf4c56d\n6f194f4e-3cd9-4c95-a157-07d8815f0694\n9612fdbb-f63e-4318-ba41-4b6058ec7e48\n851d40dd-267d-4d96-aafe-85db5fdb8f8f\nbaaa48f5-c8f3-4619-b858-a1100da46e43\n5a406db9-72fe-48db-a44b-83a10c312574\ncbcb909d-2edb-4068-9550-0b77318d87ae\n97fa94e4-489a-4801-b718-5eee9b1c7601\n1fe1a4f8-df37-40a1-9452-ee0cd7dac721\n24a16552-819a-48ee-8eb8-2a5121f8fcb2\n4744c593-80f3-4dd1-9176-a194a9181278\nc1fa7a1d-cbd6-4939-9339-5eeb477ccbb0\n917e40e3-b33f-4c48-a985-39c9fa329030\n7ac8fab6-2857-41b6-92c2-b17b18a7b11d\n2d7f335b-4865-4cb3-bc5b-ab548fc36c08\nef0b8c29-aa1f-401b-8499-4d7a75e048ff\n8255b663-a0d9-4cf5-b39f-22c449a223ce\nca6dfab0-fcbc-4cee-98df-4edd78bb9e89\nee501dd0-6495-4c0a-a06a-3ae42be9b4b9\n55c52499-a9a6-4b65-89a4-a21146088896\n31844a4b-c067-4a05-ab03-e6f9b0666e30\nf52f8a97-52d6-4264-b428-008be360ce68\naad607ae-1b73-499c-ad4a-5b06035842a7\n598df408-793e-44b7-b2ae-197028c584b7\n01816811-6742-4d5b-96b4-a8f72e978daf\n868fe0f5-9916-4fff-ae86-b449570da40d\nb6ef171b-7af5-4d1e-922c-bfd56875585e\n1493f754-0f5c-4f57-a0fa-70d08a8ec266\nc25db0ad-a3ed-43db-80af-718d448bc5f2\na7aa3cb1-537e-4c92-8b88-ec209b521c01\n32268fcf-9f77-4278-8685-2e3424df3c04\n5316897a-4025-4f3f-9d22-c82162e8e0c0\n53cd4f6e-68d6-462b-a145-05eec93bb339\nb3a31bcd-b05e-465a-81ee-68f13f82f480\n407c49b8-f565-4eef-b86a-0cd1c7550921\n7b821d17-4169-4fbc-826c-bcdf129e8e36\na50044ca-2ad9-4add-b9f2-291f0da70136\na565a310-a7e1-41a9-aec1-a4062da7656f\nd1b02c94-ea2c-4309-9d82-0ef8f4187f8d\n109b0270-2567-4501-8e9e-f355aceb2d19\ne12d3b76-f361-4769-84f6-e9c5f73557f2\nc00a94c2-ce2a-48e2-817c-2b552945dbab\n79c2c209-1a2e-4a50-8eab-42c3bc9338c2\n8d5494f7-f7ef-4e73-889f-b1fcbea40b2d\na85169f5-b9e1-4111-abab-5cded60d8f8b\n32b03c41-5416-4e7f-8751-91215e846080\n80162468-3bdd-4a5b-921c-8472829053be\n5457e2b5-7000-4219-ab23-a3821c84fe65\n589f1e19-5cf9-417c-9226-8619188bc95f\ndd4e3288-3350-4be5-8a5f-097a9d12471e\n7e63f269-3b31-47ac-bb85-b76aedcf3259\n12f97184-7863-4e53-8a11-d550789a102c\nb1b8f051-9589-4f0d-aa61-1a73da29c3e1\ne64a2d0c-4e22-4cd6-b3b3-6780efbe32cb\nbf122934-a49c-448c-b3ed-7a51390ce813\n13012464-ed23-4d1d-8b60-d1f14795f6ba\nf7c930f0-2054-4c4e-9946-55f02ce4f153\n1ef766b9-ba04-4e80-9022-fbe1fe2418a8\n050f7e75-9b5d-49a2-b958-426a6733a3d5\nd6b8c858-78a3-46a4-b696-144d65774125\n5e0aebf0-2f70-49b3-b982-b3b4d4789eb0\n1a4096e1-e171-417b-9fdb-fd23ee30e4d3\na7196011-85ba-431b-b191-9c0f588f18cc\n5eceabe3-809a-4195-aaf5-304dd532fb10\n0dc3ea19-f02e-4635-8302-8bba6fd5ece4\n97fa1cd3-1620-43bc-b763-5ac015dcf746\naa7e81c8-6d34-42df-8ef6-4d87f447130e\nd388ba8e-1b88-4bf2-84c0-d05ad4f6d61e\n45612a39-8f99-4723-a92c-b764d6bd2eb4\n288b47c2-a97f-4257-87a0-0c96bd1ca93a\n62d95f0c-a5a3-43da-85d4-c19e74936b84\n5837322f-d5fb-45eb-9d43-2e8e5ec5a109\n928bf86a-c87b-4b2b-9fd0-09da89a403ef\n1463be54-d490-4e99-988c-129aff1cf848\na0a5b420-c3cd-418b-8a82-aed208aae63f\nd7ec81e8-ca39-4092-9a5d-642137978cde\n51fe5119-8360-49b4-af89-97ef94feb210\n7eadb521-848d-4c9c-85b7-c8dccdbc17c6\n08048d58-fd46-42f2-95fd-51b3208ebc56\n4762d2c7-892d-4b4c-a352-479a768509e5\ne856063f-d44a-4382-9268-3b3a59e9dc4c\n6eb7aefb-58d6-46fb-86e5-29e405b0d939\n1f533fee-8299-47f7-8d59-d528baa8179e\nb1098f68-a126-46a9-8173-882eb27278ee\ne43e8312-40e0-4871-a0ed-7f94e4769c23\nb7cf53dc-4b62-4821-ae34-60cbf392f702\nb9e8de5b-5451-4cc6-b907-4d2f6c299d58\nabf8863e-327f-4edc-b091-9d545f86053a\nd31ddc74-f544-4764-b893-49901bba4c7f\nbe9a76cb-1c5c-4dcd-ad90-7a1ddb59dda7\n967ff883-bd01-4011-bb96-6ea0338950b5\n09cc9a59-6fef-4e74-bf90-8d7385e371d5\nf8e419c5-a57b-4a05-9f85-730b1458026f\n680013c5-2d52-4a43-9059-5195c0ea2506\n610c4d10-cb18-4d2f-92fa-e2dc960e659e\n5606453e-511c-4d61-895a-e2d17050b5cd\n8d549c17-b89d-451e-8e79-a4dcae9415ac\n106c07bd-2927-4e7d-a3bf-8e0652ceb353\n92ec1d2d-ed11-4418-b919-7a4a1ad24ed9\n98a0f410-0f43-4255-a4b9-28941b4c398f\ne1f38ad9-9bdd-4da1-960e-621257d616b6\n4b3e6541-5fbc-4f47-9985-84f53bd9484a\nec7f2f1e-de4f-497a-94b0-27bd3f00b7a1\n3806e78f-1b86-41eb-a610-81d885da2d5f\ne70c52e6-dda3-41c5-8441-cb7f289c8c29\n47c611d6-81fd-45ae-8697-7392e3bcf117\na2b37ee3-d0a0-4f5f-8947-e4661ddb5199\nca27ba5e-c3c0-44f9-84e3-63d9a94ccf99\n6d71aeb7-89df-4ee4-ad1b-79c3e603a7f1\n7df0a7b9-6302-424b-b07b-e04df05528c9\n49d51cb1-ebfd-4e47-ab6e-f0197d84e915\n4a598bdf-d6f4-412b-a081-ad4d7204ac11\n0d84bbfb-c841-44b9-8a2e-343f77eca25a\n03908160-6380-4488-910a-1ae9e811cecd\n51aac1a6-7755-45d9-bcc7-aca24486ee8a\n72bab0dc-95a4-47fc-893a-9df3ff9c2c6f\na26ce6e1-71c7-4bc0-a6a7-cc08a82d1841\n2796ad93-8a38-4573-ac4c-e89990d4d03f\n74032267-1cd4-428f-b526-f53dc48acb41\nd5856700-5278-4f4d-a207-eee34e1301e7\n5df51f1f-8c01-46ab-825d-2cc49609b004\n53db5439-9870-4318-9b21-5454ca676692\n9d437b8b-2ee0-4c0f-a961-3b5aac09542b\n30dc1a5d-6cce-4794-b276-8a240543e70e\n01200f78-1ed0-4444-a4f3-6e6d8a2b0a39\n7d7d8360-ff71-4e0b-bb57-02ad0211bc8d\nf5aea200-1cf1-49ef-b6ca-a09b0349704a\n6f8b1a00-4e71-4d3a-a91b-a4e2b7456bc7\n633040fc-c828-45af-b17c-a2eb705f1e02\n65ae13f1-378b-4fd1-bf1c-56787c35e072\n538e5a7e-4d4d-46d6-9b1c-8c6a2133314a\ncaa964e2-454f-4072-9cd1-b114285c7d03\n632449ee-9d0c-4b9a-8a8d-bfcaf48538f8\nb9911e50-9183-440e-8d37-4f945442fea7\n7f8c9d17-f4d0-4b0b-96ad-7b785f784725\n05e97e36-4dbc-4eb1-a5d4-1a8a1f424038\n3b19fa0d-e4e3-4924-a6f6-cb6581828010\n0bf082b4-e678-4c9a-84af-0ec3fe7f3e9f\n5b55bc78-f4c7-4668-8e04-fe9193dfb057\n77207eac-73b4-4c76-9e21-c42d53d01766\n105f6253-56e6-4e85-aa6d-4bc2622417ca\n14afa4b5-dfb6-4014-87ba-d5a483a097f5\n392e7f69-27a0-4061-9ad2-dbbc9de6619f\ndf615d16-ad09-4a7a-96e1-1f468fe34e11\na9523225-1dd8-453d-847b-03d0d2dd23db\ndcc02ea2-3456-49e7-84a0-63dd607750d4\nb4508b2f-d2df-4372-afb6-3b3b9d591b69\nd76d1414-df19-4ca0-851b-63bb7060235b\n2e83aef6-ab5c-427d-a4c5-84b71981dd83\nc5d6a560-6ed1-4efd-9beb-08dfd53cba22\ne6d282c2-9020-4c89-a4e7-cce8ed3f953a\n6a23d4c8-7fac-422d-b797-642b66628d4b\nab8120b1-5dc8-43c9-bec7-f44a084d22f6\nad2f0bb4-5f25-4ee9-9bbd-0433061f343e\ncc27e532-a2ec-41f8-a468-76079544c60f\n6558d825-1779-43e4-8fe2-2bc719b3bf35\ndffb8b05-24bd-4f92-8454-ef99ce10a953\nd149dec1-8866-4a0d-a163-b70a1357a309\na7d1a200-69e0-484d-b554-cb14d9f45e63\ned47e4a8-66e9-4a9b-948e-f4306729e190\n22582960-a360-474c-ab08-93d42e827617\n01cef9b8-3f95-4839-b99e-f7e94a5eee82\n918b4ad4-a0c2-4753-879d-b2c82aec293e\n7417bb27-a69e-4bc5-b50a-cfc6fb77e98d\n261ca127-142c-461e-af89-f39bbdbc66f9\n6f1f0775-a2ee-451a-8237-0b7b970c6583\n1b743cd4-9532-4b81-9b15-fe119089b927\n01ca0c52-6f99-43d1-9b2a-2b4a2621b077\n1b070ccb-26c3-4eb6-803c-70873bc347ff\n1c95e845-fe91-4b8f-b2f6-89abc461f32c\n157d85f9-6932-4b34-bfda-54cc82290655\nb13cc850-74c8-444d-b6ea-a3e890cc1baf\nbf8d083f-4a5c-4c2b-8fa2-2399b030df23\n68ae9941-2257-476a-8616-ef5f2fb01c03\n84f02157-2dfc-4bd4-b5f0-439e1313aef5\n74878935-2b5f-4d7e-89de-ade86c066652\n81b2bc08-5a66-449a-9c7f-7c6bc4cae25a\n6af25f06-0e8a-426f-9e63-92de80adea85\n3a5f5366-5e05-4d3a-8f9c-464a2f435d74\ne6ec4d52-ae3f-436a-9d24-8fa539b99c88\n0c1eefaf-e1ba-4558-812a-fa9a6474640a\n85efb142-42a1-4651-8f2c-057572991129\n38fdef57-b3aa-4ef8-92da-bae4abcd14d0\na0dda9e9-3d06-494f-b8f0-5358ea0fbf43\ne9ade98e-7b27-4d9c-9f2d-539178d421ef\ncfdd7be8-37e2-47ae-8401-5b0e776a077a\neaffabcf-4656-4290-a899-5adb769389a3\ne4be33d3-e10a-4ebd-8877-9c590300c956\n21f80708-0084-4a4e-813c-cddf7de6f2c9\nb3b161d0-0511-4146-a903-e55f45226033\n7f431244-6e60-4a5d-987d-096010e8aebc\nad76f11b-36a2-489a-b27f-99ad3098e757\nb08e3839-734b-4770-98d4-cd8c9b013309\na058ed1c-51de-45b9-9e67-099b34d69640\n8445d3b1-c509-4c8d-8238-9d019f69fd1f\nd7acebf0-7e4a-4384-8077-fb7a177093ca\n91c8437d-3b33-457c-8ad2-7035f6a027f7\n87fb2e95-64bc-4169-ab2a-5d758f909596\nbed87599-91af-4e34-9649-01fe2dc41e29\nc7b1cb2f-2e2e-4ca6-a2d0-c79f4f4fa5a8\neb6a3dd3-6511-4e1a-b335-f198e0585eaf\nb970a08c-651d-46b1-87bc-4555c102e460\nf141b5de-823c-4204-b3ef-152a35c79072\n0ed2ac6a-6412-47ad-a252-c18a363a7522\nde145c0d-06a8-4457-9365-b70d724cb0dc\n8606c057-6823-4b06-9c7a-60d8d98a8a4a\n9fbf3fbc-1adf-4a8e-8360-b2108e291a4d\nfaf12861-c050-48ad-9486-c765db533667\n6eecaf50-f6f0-4b3a-8948-d92f7f7cb1f8\n1220abe0-4645-46ba-82e3-a7e0c71c82d9\nb35d5612-cd17-4ddf-865c-982d281f6c74\n39927397-8a77-412c-800f-31ebb9d9bf3d\n223bd83e-5d88-4b69-8342-e13e83fc379f\n30bc682d-ebfb-46b3-91a2-077222bf4e7d\n286756c0-d429-4665-90a7-dafc19f05705\ne0b023cf-f1f1-47b0-b050-4abc7b21dc77\nbf6be33d-ba46-4308-972c-58bfb3a58282\nd9931e4c-6ccb-478e-aead-76295b0d571c\n2203bdaa-357f-466f-b4a9-b734813dc998\nb30827f3-dc48-45f6-ae17-ebfb98c951ff\n27addbd2-3e86-48e4-871f-0922e3ab1d33\n825ce0b9-804b-410f-9ac5-57b47a316bb2\n413cd4ae-6a93-4d71-82d4-4b768a0cabe5\n8756880e-972a-4c0a-9145-e46c2d0f49b6\n93e59ff6-f02b-40f5-8f0c-73485eb302a3\n17a8e4db-c1f4-414d-b7ca-f5e67f2f9af7\n72bc4666-9a27-451c-bbe8-9d75e17e9895\n11200d71-b211-4cdf-b1c7-5a22855cb013\na325e417-4ca3-4699-a838-e641f99d3a04\na67d48b3-238f-4a99-859b-56509aca552a\ne25e8475-7bb1-403a-bdd2-91967a33cb48\n3cc73604-89c2-4490-8b67-e77424336f6e\n2733348c-b7bc-44ba-b09b-91d1ca96da34\n116fd2b5-aae4-4071-bb7f-1d199e241868\ne513a771-1b5b-45ab-8f83-c39e1d8ab716\n649dcd9f-39e2-475b-b68d-b51037ddbef0\n7ea1219b-aa4f-4bf9-8b6d-1be4f12b2c81\n57941b91-d5bd-4fc3-8782-edc5179367ad\nc1b1307b-76e1-411a-91d8-9ebb2e38169d\n2abaa357-0b23-4259-b180-44ed1ef94940\n9d75ce19-07e1-44fc-92f7-19e3e6af1caa\neeff5668-b15b-47eb-87e4-b6a220243a28\n08ea8ae9-324e-4e8d-983c-adc19d9da05b\n09571fbc-7d37-4484-a5e0-9c123727f2ea\nf65a6b9c-a8be-4611-9651-aa2af984f268\nb061dc98-87d4-4f7e-85fd-1c3fc72b2746\nc0284773-faf6-43e7-9927-31113a36fdda\ndbcde88d-8bbb-4e09-bf93-4b582e0ac3b6\n1e7c5052-157e-4dc9-827b-c0cc967aeba3\nedb50dd7-35cd-487d-887a-0dda2bd4b711\n820c0cae-43e9-44b9-a58a-e93774ff87f7\nd6f4d880-28dc-40c8-bf6e-c1c0e8214bb5\nddf2912a-6418-42f7-9389-81d253d96334\n94b26aa0-34f3-46f8-a8f0-07bfba4c894a\nb78705c0-5d36-483e-a5ed-32a38219497d\n5b1e4da3-a847-4f12-aa6d-6d091dbba7a5\n9b59b384-6a20-4f45-b10c-dd144d233702\n8b2b97f3-c47b-4afd-925d-ef17f26db62a\n6c2eb7b5-5700-412c-a0df-578be1830181\n60b094b3-bf52-4739-bcce-6a1b3e5ce743\ndb666532-b0e2-4a4c-9699-0938dc628099\n5deef18d-0f84-4f39-af95-7b3e788405eb\n99a717bf-6af2-4124-ae3f-bac3e2a321f8\nfb425bf0-0479-4a9c-bd9d-054152530f82\nb10072c6-a93d-4742-9501-433510376f62\n70f1a51c-2353-409e-9ce9-c1bd6fcccee2\n85216bc7-269a-464b-96e8-d9d337bd1d1d\n13176c49-efce-4ac6-8294-3a5cc131b84e\n5d15dcae-fe41-487a-ba45-71640e9013e4\n36477d67-9331-4ec4-8443-6e911d0a4e22\nbbe2f828-8288-4c08-9696-b3c33fcb6e88\n4d90abc1-7526-448b-a2f2-ca07a6708bd6\n920faad4-cbd5-4f5b-9798-0ca8b80f5ceb\nc8985af2-a883-4229-9028-c1d326c43331\n146a6fc8-b225-43f3-bf2b-ed9601aa8fd7\nedfe963f-912b-4573-8fcc-d6c88efe3962\n8dabb10e-8bd3-4a50-aec6-32dbe2caaf3b\nfc9aa2ea-cfe7-4096-9ccd-a66083d848af\n77c3ee93-af3a-4d6b-a241-3c091156bf80\n6c33d5ed-56b8-41ea-9eae-fff165214da1\ne5560112-bdd3-436c-a837-84575ce1fbc9\nb0af72d7-8884-41a4-9cef-e814faf76e01\n3f80e0a4-85dc-4abf-9b67-c6845d1ef320\nd4a00d84-7ed8-4ba4-935a-a8c9262f174a\na0658fd7-632e-4fb6-94aa-9b507d2610f9\n60341052-08d6-41d6-af2e-fe82919bbc6c\n9e422dba-eebb-4f91-b2a3-63e0fa9b8495\n9953893a-84c9-4247-80f4-cadc89d0aa7c\nf0556536-5b87-4db3-afac-b5e0f5f32654\n77080a47-ee87-4a29-8882-412030a84ea2\n5e319521-35f8-47f7-85d1-c0dfc0583a0f\n1b60c299-a5ad-45d0-bc9a-724a1e5f1bf0\n176b3150-7335-42f3-9297-86661b7ae9da\n32ad9988-8de4-49f0-8465-32886532d68f\n7020aae5-08e8-4076-b443-27e26d1f3ce5\nbf027c28-ed0b-43cc-a8ac-84b751796fd7\n3862d935-7b7a-45ef-8f2c-079b59c32e15\n83b52db0-4c2a-4c3c-82b0-1d168214c6b4\n6f3296af-9ff6-4e28-ab00-8fb44ea9021d\n9dcdf15c-89ce-4d77-8f06-5c76aa756d20\n75f3b6d0-df7a-4533-b4b3-ca7cc3f00fa1\n5e484a6b-2cba-48a9-b2cb-ccb31b798dd1\n8ba1ed79-264d-4769-92f2-ff1d6f841bab\nb700d7c3-d932-4d30-8ad3-bc1a735cbf7f\n9cb82d3a-c047-4bf9-b3b4-8baae7bf454f\nd5cf82b8-d3ee-4190-87eb-7dd8fefefb6b\n3b9863a1-3f33-44a6-a4bc-ffef8f9e4cc7\n531f5a8a-696e-49e0-a256-e6cdd1697f2a\n24bb8efc-e451-4433-9419-ad8e25df62e8\n1d710db3-e4c0-443a-8576-d8709b0b21cd\nc2c66a3d-cfea-44bd-b152-147d6857bd88\ncf9e5174-8faa-43d7-bbde-f7c0cb89c1e1\n2c35293e-7dbe-4cd7-914d-4714ca338dff\n9e889307-2e18-481d-8a7a-7d066b92b651\nb76d76c1-1252-4e97-a6b3-cccb0f0aa830\ne81c178c-efee-4978-a755-12e387075b5e\n8a9f50a2-6bd3-492f-a4cb-b1ac767ec859\n083f8b16-d3ed-4925-9b3c-36af14276423\n82459a1a-64da-4680-806e-2ce5d862c098\n2d75ac4c-51ef-4e39-a105-d99d5c7bbd66\n79f41a8e-9d9f-4dcd-97c5-53b06d8274da\n5efdf60d-d86b-4a0e-b750-1cd4c100e084\ne85590de-ec95-42e9-86ad-4d0a33cb82d3\n8055e7de-5818-4bf7-9656-c8751fd7a344\nc07436d8-0aa4-4031-938f-4ea9ac89b5b3\n9d9df249-8d19-493e-a3b1-f81e12ffe33b\nfec7c266-f6ca-46fb-8f06-f8c6f5b81a21\n122c082f-1695-44ac-9e66-8796cc936c5a\n494b887b-520c-4159-b196-e643adc2ea77\nf11d7504-d4a4-42d2-a520-82b744bb1846\nef7b2b19-4cbd-4f2d-a101-f370e31ff76d\n4439c9d4-180a-4ebc-a394-a03a704907c4\nb61f77b5-4111-4583-9bdb-bd20796b575c\n82e39060-d57e-4a69-b687-2a139bae9c47\n72890800-0c7e-4761-82ef-fa852646594d\n1330b0b5-97be-4c96-92a7-189c03bf6858\n194f6628-c167-474d-88df-7b09fdd54f4c\n17c84faa-3a52-415f-a7d1-d1ddab04d106\ncd592505-2d6e-492f-8a29-fa19c9573172\nc47440f1-8e79-4723-bf74-e495fdb1ea05\nd0a0f371-91fd-434c-b939-fe49d3868238\n02638545-40d1-437b-99f9-21ed488720b7\n7b6f5eab-0f29-4c43-acda-f8c2d5d730a0\nd29e70a5-a8d6-405f-bcec-c42a3c8903eb\nb4494e9e-4065-4ce4-aced-47e8d5acb269\nf7b068d4-a58c-497f-bfd2-70fade992f3d\nee3629f6-a7a7-4892-b7f4-7d53b630fed4\n1052c05d-4894-423d-b6a2-a93b0e06026d\ncd6c8686-5e13-4cfe-83d3-4a54887f7111\n4b986f17-7f0c-4c41-b260-2cca798f77b6\n215bbaf2-8062-499f-a72f-5310f2722f50\n8b7dd287-ad34-45ad-ace8-60753bb74483\nef3024ee-c077-4a76-ae72-0ffa9d060f18\nac313046-92aa-45ae-b3e3-d1a0634dec25\n3f12d739-a142-49d1-a801-d24467fa1622\n9601c051-bca5-480f-9b1b-60442c4d21bb\na9a078a0-3469-4abd-9868-6096ff49925b\n28a03e19-e9e4-4a2e-a7a9-2866a2764ee7\n0bb3ed85-f2f1-4de9-a531-9907bf362182\n6452518b-b5bd-44e3-a866-6b9bcd543328\n7b7945ac-906e-4a6b-99aa-1b5c04ae56d0\n29ff70c0-84e3-4879-8a1f-d807a51e83b7\nbff092fe-0628-4fb1-885e-7e0832f82bce\n4e825a80-10ce-4cae-a649-71edd8b7a423\nc68645da-53ac-4eac-bb82-37cbd252e78a\na629cdca-45d8-4051-8f49-b90a2eeb0579\n3eaa8c36-e3ec-47b5-8838-f3a44c5de204\n4015c515-027a-4515-9d9e-a7b9460f6ec2\nac97b574-1031-4749-9f32-225346bce8a2\nbbf5aed7-5795-4f6a-bfba-73937ba6899c\n45ff6e74-dc7a-450c-841e-71f0cf843e1d\n833cfb92-1ae6-4a6b-aeb4-4d15629614aa\n57b129c8-cf7e-4daf-a68a-4c62192f80db\neb5e4902-cc9d-44b7-8045-0185e1b0c9a8\n76cc48ee-65f1-452c-bbf2-3d52204b8209\n7a8894f5-5a02-45cb-a639-319e91bf50b4\n06db1adf-ba11-4a66-a9b0-4ad6b776aa8b\n56933a3b-3ddf-4575-bccf-7216df4c867f\nd6190f61-1b1e-4f5c-b4f8-982a47d5ea34\nf520a777-f5f8-40c1-b75e-242d02eadd5c\ne5999f80-9873-424c-8764-8c2e221bb6d3\n196c3414-b067-4d00-8673-e748da78323b\naedc9064-ffae-4a4f-a441-4e2c8542a30b\n6cabca40-e9fd-4015-9453-a26f3722e537\nb280115a-8342-4343-a3a0-fdedb8b011d2\n6cbfee33-4f8c-4877-a422-00db8af90d82\n193ecd0b-a2f0-4d48-947d-7923a4db0c4b\ne2095dff-d63d-465f-80a2-6dbdc7dcead2\nce27e105-5087-48a5-920f-265d236b21e5\n78e475d1-4785-4d78-bef2-bb1f2e04faca\nace924af-c0c2-4497-a66a-e678f4508490\n61a816f0-c216-4f35-819b-8fe62b4af11c\n08adf2a4-b055-47d9-96f2-517b985afc73\ndadd4ff8-1892-481c-97b0-27f3cd3745f5\n30d09139-d063-4266-b907-f1fdf3553e9c\n19b000dd-52fc-43ae-996c-ae149b262b25\n9c6c0718-1e44-41fe-9672-6180b12d7f0d\nbec7e2d3-46e4-45a4-961e-45c479e2a414\na4a326eb-817b-4483-8f17-ef91abaee56e\n671895be-b87d-48b0-9bf2-baa2cdcfaf78\nc31de25e-7f25-4df2-8984-9356a5c0e2c9\n14703ff7-947b-47ee-b3aa-e8cc991c7225\n57abdf15-b9b8-4fa9-88c1-bd4b5ea2e37a\ne97abbb3-9f62-4c79-bc09-6a519fc959ce\nc33ad49f-69b9-4c55-bd8a-ba42763bbba5\n4ca21e5e-8b44-49b1-a212-b07046ae9da2\n701a57bc-edc2-4db9-86b5-412b7531861d\n9cdea9c0-a251-4999-b452-32257a3ab866\nf0852ff1-614a-4074-a584-f9e5e3e71594\na3acc592-b7c3-4922-9c99-701f5b082f22\n2f673981-ea60-4f6c-b6bb-4fdbeb421c6b\nd6d041d2-25d3-45fe-9192-ce3bcfc8b615\ndbb5bb28-bdba-4e11-b051-73818b18ebd3\n6653ed2a-bd4e-4261-918a-84db26756fb3\n5b8d397f-f06a-4ca0-a046-93078eb96a6e\nd96287f2-b53d-41df-afd1-e388cbf7a5b6\n07921d04-a95a-43dd-8df7-f2ddf3bb2aa4\ne9b639f0-5787-4d72-b42c-8c92f992110b\nf35e1515-d082-4731-adf0-094324292f0e\n3fda0a60-3dfa-4175-a503-9d49c108d2e1\n670fb6e8-e215-4ba4-9a61-b0480ec51e6f\n2d2a352b-9461-46d1-bf36-d8986da03b9c\na6076991-4dbf-474c-b2ad-d74709cff29b\na0baedc8-b5e4-4bc2-a54e-248cc259989a\n11f5568f-aa59-4fe2-bd10-58e7fc4f2433\nca66b586-4aa8-40e3-8880-2fc204368c54\naf48651b-27c6-47b7-b407-7bae11b51c3b\n913e0c34-7004-4255-9e87-933b8a33a732\n118b59d5-db79-4749-a9c8-560fe82241e8\n6f7a529b-8abb-4e5c-8447-b176c760b71b\n9865e63e-9946-445d-ae75-1e8b774a2da8\n719a266d-9477-4f79-a4da-4d10c5b24a2a\n196b7450-736a-4dd9-bb9c-65ba2bcb13d9\n76d6c430-c929-4b9c-95b8-b271c3c0174e\n2a4e234b-6c25-4aa5-b4c1-fb4e255c32ea\n6d50e8d9-4d79-485d-ba68-deece729f420\n2c88dc1e-9a48-49c3-99f4-5c32c9932a5b\ncb0a7e24-801f-406c-9e97-15cd3beb97a8\n68e69bca-e304-45a1-8fb5-9f41a2478474\nb6b2bc9c-1c31-47cb-9c74-cc5936a21759\nf114615b-a8c1-4878-8020-23fb29e6022a\nc2aed18b-5f3b-4804-ab6d-ef41d1149156\n849f6d2d-ac63-4f10-98b6-6356dbb9a612\n7cb22eb8-aa28-4adb-b23a-7fab2d4ef3bd\n4a489f18-64a5-443f-9b00-9769a188d4ce\n31e12903-6628-405e-acb8-c6bb5647821b\ne70709fe-eb5d-4e57-9411-5f42d67e4df7\n50cc5fc8-f9b9-4853-880c-02dcec543b43\n308f625f-2211-48bd-a26a-0359d9d832c4\n2ed1bf91-92fd-4c03-95a2-3fb35c4ee896\nf853d147-5b97-4088-a408-33097f872d8c\n97450440-cb86-4872-a646-2cb5b8b7e115\n0d183535-a7b9-4978-8274-f637242f5ec3\n6b5f61a3-925b-4d9d-91fe-346040b23d09\ne98c0abb-f5be-49f9-8808-d72592002368\n7878140f-2463-4178-abb6-7ff9c278d0e8\nf723eb80-6297-4560-9ff7-e0643b381b1f\n51b225c3-a468-4240-bee1-bdbe1e656d7a\ndd5548d9-62aa-4149-b303-d7b63541275a\n94637ddb-c32f-4ce6-8735-90f32b8d7553\ne19e7396-aa31-476a-8da1-25d7ee53b50f\n8fcaf3fb-40c8-414a-9238-cf811b03f7bc\nf4fb9b52-47a1-41bd-ab4a-85ed6f37336e\nc06171e9-8149-468e-a014-bb99a5d52ca4\nc3a817b0-75ea-422d-b1a8-54a467fc47a4\nffa7a266-d932-4cf6-bbe4-8ceebf58f27d\n261c5fd0-3e79-43a7-a49a-cd952fef8b17\nd33d90ef-c9ad-4cd9-b57c-eb36b7cfd49a\n3704958f-78d7-41cc-8b70-746b7e4b2477\nccd851a1-bba8-498a-b8c8-f7405cd795fc\nd6b3531e-d6b1-439d-80fc-f55ed5ac98e2\nc4b206e8-4164-4295-ba7f-0201b2383bd2\n2c3818e3-578c-40c4-ada4-278a39929cbc\na47b3183-bd8d-4bd6-9696-c84ee16952bb\n38da37aa-03db-4619-9ea1-28492bf1543a\n3fe6a9da-dcf9-4db2-a123-6c02e4d05e01\n775be8ba-dc34-4673-8e76-1767957051b8\nff27accc-2725-47c4-8a89-36074d87560a\n7d660c54-7f89-43c4-90c7-07b2a67c46e2\n23df624c-f519-4fe6-b4a1-cd5127cb0758\n623a4624-fb3b-4073-87b3-e71dafd19429\n3808754c-8654-4a95-b6fa-9857f6599c52\n93796fca-2fc2-42fb-a1f7-98e2043325e3\nafe9fbc1-157b-42a9-aa47-00249125d087\n5639031f-cde9-403c-8da7-665b3ff8de89\n36687cee-cf1d-4305-832e-89aec437c032\n8a7385e2-1c6f-4adc-a3db-11bc06ea6e86\n8f1382e1-ba31-4d35-aff2-451fd6676919\n3d0c20f6-2c4d-44e4-a9cd-e91bfc18a596\nd48da592-c364-44e8-bf8c-9bc2edbcb407\n2e9040cb-1b5a-4a89-84cc-dce3dadea8f4\n23308d96-539d-494a-8e91-d7e1ba54ee26\n0d44510d-b66b-44ab-bbee-28bc2573a31c\nd58e83dd-6e31-4013-b8cc-fc92fecf2554\n53fe6267-f02b-419d-a4f2-5753a638d386\n942a94d2-8a65-4b3f-9495-7fbb8e7b7169\nb21926cb-abc2-4538-851a-47254d8127c9\n3a343edf-0f13-4026-97b7-3e675ef59184\n21113f9a-3838-4bea-b801-0950f46100c7\n50a76dcc-4797-4054-875b-9b94f27212e2\ncc6ca5df-1d0d-4964-aac7-90f60289cfac\na617d5bf-e711-44f6-bdd2-ebec314b96f4\n8e6f8182-8a5b-4f30-882b-c75bb38ed81f\n676e6caf-5b8a-4678-ade0-2352d6280a68\n7503d341-ade3-4dc8-87f2-b25e71235f58\nf48f4acb-1cac-4b9e-98d8-c51483ba5cdd\nab459a0c-ddac-49ec-bc2b-68b7a2b04846\neb6dc55f-6d58-432b-886c-06fde69db906\n879b8e82-11ea-422d-819c-5494ed6564bf\nbda1181e-05be-4859-bf42-37e8800a4c38\n9b3c87a2-6545-4e5f-9ff3-8332d8b7d42a\nbaf52f90-5763-4ce9-93f4-5024907930d4\n3ba7bbc5-1cf5-445e-a319-2f0c5c2ca2fc\na62bfbe8-f245-4fb6-a460-4961b5c0a32c\n695636a8-828a-42c6-b4f2-2d505b0e3d45\nf83b1e63-aafc-4b38-bd36-b2ac0237eb6e\n266d40bc-325f-4dc2-8467-3e357b6d7553\nf2a8bd0f-82a2-4365-aaaa-a4106e187e07\n2ec1959e-2774-42f9-9878-6a26f2095527\n3de48303-773b-46e4-a84b-74a3dcef68a3\n9c9be26b-c882-4064-913d-1a10e4b0349e\na85d9d94-0f27-470e-bf83-892138b058f6\n10760892-4933-4728-9b60-2d2491cc6155\n126c0f4e-37ec-4b22-b4ca-d41593996239\n1930d802-d841-46d1-88ee-4d73d2754682\n9539a6ac-b270-40ab-817c-89ffab7ae9a5\n2937bdd0-7cbc-4f97-b2f8-1e38e686f0d7\nd4619e8b-919c-40c7-9c86-4d124e21f79b\n17234380-5ac4-4bfa-87b7-aa735756d1d2\n2ec91835-5422-4fa6-94e2-028bc6be6bd5\n5f17b2dc-d7db-4ea7-b610-e8b7440e4098\n08649dfd-82ab-45c5-b444-2c888b3f42a0\n88872aae-6dd6-484c-bd59-3f0812f50075\nee6368f5-a307-45e2-8eea-b25fe800102b\n6375dae0-2a11-47a1-a8a2-118fda2dc82e\n0da7e038-ecb8-4115-9785-6cc0fa4241e9\nd3744ace-a931-4eea-9138-022de408e8c4\n2e9a7fab-33b6-495b-8b9d-e525819cd302\n1414d167-aa03-40fd-b92d-4a6ed54d7843\n809d842f-f8e6-4f57-a361-8cd603aad7a3\n1854dc92-6e83-4b42-9a34-872f0c048d7f\n7ebc902d-8184-49bd-b82d-a415e83718fb\n51bf5b0a-2160-4c5e-a0ba-c16e5d9c657b\nffd47f37-9ad8-4f7b-962e-f40b556c8975\n99109b41-1343-4d94-a488-6214cf2c73b2\n76f64a87-1540-4b20-b19c-ba100c276260\nb741ffee-9511-4032-afa9-0df09d6fc2b2\n5b37f099-082d-4e81-947f-c6f100d4c50f\n76d92c7e-3961-465c-a30a-20c04f21ae17\n459ab442-9a2f-4dd4-afca-c8cdf0329ff0\n2a3143e3-f055-4f3d-9093-4d096575265d\nd51873b3-8720-4f86-9460-03d9f9cfaaf6\n7e6eb000-a09b-464e-a240-23a3189588b6\n019ccbcb-a23e-420f-b8ed-5372aba3bfef\n3db26c71-ccd8-4ec4-b8e0-7b96ab12d171\n33ee1dc1-1494-4e66-a19e-5fb80a1c88bc\ncc7de0d7-2530-4fba-9180-1bde9f7891fd\n735540b8-4808-4dd6-a295-5851a9beaeba\ne32f8473-8447-49d2-9736-f2c9528f0a91\n6ecbcc26-1d4b-4c03-a03a-2c2cb5ad2b91\n2f1b6de6-05e9-4bbc-858d-ea89e56b4fe3\n04518938-a7ed-4346-b00b-96715e53278a\n43909bd4-7bd1-4785-9a0f-671f4d5ccecf\n67ed2d4e-22bc-4f70-809d-bf5d8146faab\n5aa63521-5d5a-41a3-a524-e5174aae8932\ncdbf7231-491e-42a3-afb2-cbc312a1e947\n0784b14e-af4f-4b79-9ee4-000443e96855\n1a286e43-c3e5-4788-b51b-be9903f5edc5\n5d1651cb-6a19-43a6-b9bd-b56f946dd8a5\n424fe81d-c0bc-4f94-a803-ae7c3641050e\n135d0c66-2d4a-413d-8cec-ce1163cc286f\nde392f3d-352b-4926-8281-f3274a1cfbfd\n79f2fccf-5782-448b-a54d-3b4eee6c51ec\ne40a46e9-ffc1-4921-93e6-e26c0917ea9b\n19653548-d93b-4dbc-b8fe-c11feeb83aa1\n519230d5-1c2b-4152-a947-b6d11d50ad82\n7cf0bc08-db3d-4c4c-b2c5-43807baebe25\n61164768-94a6-42c1-843e-50e56c7f82ec\n944df5e1-50c1-4a2b-824a-3d04fc012f7d\n64aef445-b10f-4d99-8721-a7781e48b444\nb6919a75-345c-4dcc-949d-7431e2d964bf\n34527f29-46b0-4a56-9328-22e9b9b192d7\n8e52e3ef-ddab-4a12-8247-19d7ae5e6f8f\n1fdaa2e4-b38c-4ae9-abda-cb796e8d2d04\n5bdb090c-24b9-4ed7-b4dd-0229e73a8ed6\nfb56f2db-687c-45cc-a094-5e62ff531d56\n67f57b36-1814-4c8b-b182-1fdf15385cce\na6330126-f000-4175-b940-8b044cb1ee70\n7ce4b6e8-da91-49d5-9301-f774e23e454f\n06f06313-6987-4b9b-93a1-01dbdadf3a1b\n8de4ebd2-e61a-4d30-85ef-7b6214b33659\na582a9e4-18c3-4475-8081-14028e8d7658\n08dc250e-a8b8-453a-9fd0-44445c975e55\n902c3ff7-782e-42b0-bcaa-8881d188a992\n42f263b4-825d-4266-ba51-2e478e32d00d\n5244d704-f8c7-4f1b-9b67-0b208dcf422f\nf35b73e2-a846-4348-aca8-a2674ffe99c8\n88a3143a-07f0-4310-b543-2145fabdbb3d\ncaf9a58b-9757-43eb-b352-14d2f2233e1e\n13490a77-ce36-435b-bae7-2334c274c22f\nc8064a4a-18a7-4206-ad83-49b8a2902a8b\n2d5df145-0dae-469b-9cbf-6dc390303b49\n70c83af6-68e9-4324-8a9b-e90c1083ad8c\n8c583f6b-23e5-4e6c-a749-d171ef0dc666\ndb0bc82b-caae-4cf4-a599-cc9b513c33f3\n893bb3fb-0fba-4e75-9612-7c7390aa244f\n450dddb5-e7c9-465b-9a2c-5a71867f0654\ne7e45e55-eb62-4763-acbc-32bb800e3868\nf54e0b80-4180-4523-8996-0957b57957f4\nfeea0212-4080-41d2-9bd7-0b4d8c5584cb\na1c6e5b6-c755-467f-9882-514ae96740c0\nc9190f2a-d1e3-4cb8-8577-bac4e39e2dca\n8551ea56-8fec-41cf-9be0-d0a068fda576\nea463cc0-7c74-4716-a232-7283217f092d\na4787da1-9790-4e69-8c4d-54dc707b0275\n6f554257-6021-42bd-9e61-f5c05accddb5\n52f3fba1-70f3-4378-a68f-089c2d071a95\ne13667a5-c0c6-4bcc-9ddc-960431613777\n17c48d52-9e82-4e25-8fbf-430bac8fbcac\nd143d7b3-eccb-4993-ac79-66e60523096e\n5157ea44-49b8-4f5a-b840-531d6acb497f\nc2222ee5-70ef-48f8-80a6-ea6fac78cf63\n1e4cd44e-238b-456f-b019-0509078665e2\n0497027a-6eac-41fc-92ea-5873fcb48888\n0dd0b9bd-974c-486c-83e2-a393ff413bea\ned8b1aca-a92e-4237-8d45-f4d36eb33798\nd53e1869-be00-4c5b-bbde-f4d256b90243\n885cd247-1032-4e0e-9a53-d9115c6964ea\n68a34978-1b4b-4c6a-839e-5b2c19be1df9\nf6a7b543-d7e6-4d3b-b792-47a3185b376e\nd7c75ef9-f038-4966-a23a-2ef6597fd983\n5bafe98d-33cd-4510-a497-e06f744168fe\ne0ee1b2d-6cf9-4097-b0e5-8bdce8375747\n1643e00c-25f8-4fe5-993f-132ef6784c67\n11684fea-00c0-445d-889c-e2e68c5a9bb0\n702ee46e-a453-4470-a11e-6c8996e653cf\n9b3e9095-8d6e-412d-b378-1e75b1ebf458\n70da86a0-6bb8-4af4-94ff-14a799fe6078\n3ee3481f-9f33-4d40-b30f-a942e13c4eae\n3564e2a3-8f93-4654-b3b0-80ebd8626285\nc943f5f2-67a7-498a-9eaf-a2b4d5050e49\n47f34aa4-5e4f-418c-acde-54dbe87d6dfb\n1c18f431-9353-486f-b5b6-581918e0f7e3\n1d95666d-f4f5-4265-ab0f-74c9ddb159b6\n1534154d-0135-4c7b-b590-374ae17a87bd\n6af36be4-ebc7-458f-a221-9ff243d6e505\nf72f2ebf-46ae-4584-9b23-164625fa9359\n152bda32-89ae-4d80-b60b-6e6d1985c511\nc0a92f44-3d84-4cbd-9a02-c6dab99f6d0a\naf9b45a4-2e22-4deb-bad9-4a45fcde78fd\n571df80d-750f-49c2-adfc-6f16fed0c12c\n0a4461d8-12e7-452b-96e5-0407609e1ec8\n2b0cb36f-65fb-4acc-8fe8-99b7cf4e1002\n5b90189f-5303-4e2d-8a4d-8ab0ccb82ba4\nae7b6e6b-3796-425c-84ee-4c9e5231ff89\n83ac4162-64cc-405a-b782-d8f3d0c1ca69\n5024b38e-b922-4d24-8a8b-dcaecabc59c2\n5adfa43d-b784-45a7-ae06-5d30a92a32f4\n47893402-2e79-48f9-9a84-ce5718e38e81\n265144a6-74f3-40e6-9ff4-b83dae876116\n9261262d-8924-444c-94f2-967a5eed1caa\n7883cdf7-8471-42f5-bdc2-7972343b0fd5\n272af88d-8ad2-48cb-a0c7-35d69dcfcaed\n9debdf59-5e20-45e4-87ac-1145e189528b\nbcb0422d-aaa3-4c5b-8d4d-418ec96c1581\n19c47c44-c6be-4ce0-95e6-b4ff234265f3\na0b0b382-7a3d-455e-aaa4-ac3e61bfcbc3\na7c2ee01-bf09-443c-8771-0354c8a7833a\n121fddd9-503b-4307-bb47-8036105f8df9\n6776938f-2e7f-4a05-a290-fdc8a8000f1e\n2d709ad1-3092-44c3-99e5-ec027f82f6f6\n0f993bb5-4ce6-48e9-90f2-7db1239b86f5\n0d8674a9-1165-4a00-a405-81627bf88d61\n3b2ca8ef-1d12-485f-b0b9-5d414660f1ec\n2013e791-add7-49a6-8bbd-6e87168392ea\na73c56a4-55b1-44f2-bb0c-0c70c4cbd071\n5c0038e8-859d-408e-9bb5-e64181608af2\n29cb4f7b-e701-4521-80cf-30f948b6cc98\ne81e75b2-0e90-46e2-99f4-28bd467f6ba8\nfe9bea4a-0ecc-4e67-bf7f-e64861136fc9\n7a845a66-6ab5-45d2-8703-a231f1c56680\na86e06e4-9cdd-47ec-bb90-42053208b980\n4afacbab-141e-47a9-b7e4-2b1bb22d5d45\n5ba47f03-c74c-4513-a4d2-21181fffb0a9\nd8ee0567-babd-469b-820a-2268c412a708\n0aae43dd-cf28-4377-b9d8-84100858356e\n11a4a062-5fbc-46c2-8dba-76a4a9664aaa\n1f4a1e7d-d5fe-4bd0-9a1a-be74e0460e12\nb0ada28c-2d8a-430f-b14b-2324912907d5\nf7c42c1b-555a-4041-a001-bb9d085531a1\n4dbaf6bf-31a2-4587-8efa-b131bdbc2653\neee7e2ad-b8dc-4885-a9d4-f128e7ba85e8\nc8d7cc36-e957-4ef1-b010-cfed8ad70734\n5665aa6f-fbfb-4020-961f-75ea55499d5a\n96506041-40fb-4d4f-a035-27c792b8fd9b\n0861cedf-a78d-4919-afa6-f5d3acb8e3e4\nb7d40a0e-ad17-4926-bc83-f911a1f654a3\n118d2c6f-bca8-4ac8-9de3-c5bf342a3937\nf00134b8-a76f-4b6c-b168-653b5f62e116\n2bafc137-5638-4537-86ff-1dcf53261c76\n9679ce85-b246-41ed-9e42-996238bdc11b\nbe6aaf9e-509b-475f-81d5-b0dd455aca09\n6de41ff4-6168-469d-bf43-fb6a358cd22a\n3cd34d8d-c911-4906-84b1-a200f0fd4528\nae4d54fd-0a79-4e88-880f-9c6263006233\nc0ec97bd-7c6f-49d9-bbce-611ad76ae72e\n2f7630b6-c64b-42b9-bd31-17655fd0e173\n6da2ea03-8645-448a-a678-47391abad820\ne91d739e-da44-45fa-8f67-a3538afa9fa2\n0002b509-2145-435b-a3d4-c795b9762ae5\nb2391169-3bca-4369-9b61-fefcacd279a3\n2012b01e-2d59-498f-bb99-cd6301388830\ne942371e-8cd0-4cc4-9bd2-e26fc8a82d69\n1f6d0eb1-af73-4bd0-8241-8ee7d02990cd\n97cd4d7a-cc0f-46ac-9cc6-bdaabe4a705b\nd6bae5c0-3fd1-4ed3-b11f-084213500764\nb0f5c5a4-7f62-4ff2-9e2b-c3f308eb8fab\n9b4eb611-55d7-41dd-a181-fae3519cd27c\nbc45a0c7-9726-45fc-ab95-ebfecd607eab\n7557b072-a1ce-4412-9800-fb289d3c2d01\n40966ab8-d01f-4ad6-bbb7-4054d91fe1f8\nc249435f-0cc8-43e9-b719-248723e46500\nae888bec-8710-4ed3-9324-816e48987086\n88e470a0-a5cd-46d8-af79-a3a59bc1f572\ndd1415b6-96e2-45e4-b2aa-271870eb3cca\n8ae46185-90b9-4f40-81be-ffa03c3c8e7d\n07566959-d3a7-482d-b6ee-82099d4bae30\n5d6350d1-dc15-4469-889c-0b2d681bce79\n1dea2416-c3a1-4cff-b648-f637fa14aeda\nafb1fb6a-eba6-4edf-b9eb-fdef01a516f1\n66cf9b94-c9bb-4a27-8154-65e4c6d7c663\ncefb7667-c0aa-4eb3-a65f-9eeaddb13325\n14fb6867-6ea5-4a36-82de-868e25e401ac\ne044327f-c6f1-4fa7-9b41-649244cac88d\n2f0fab8d-f01a-44bc-9770-32480483253f\ne7d9d987-3ff7-47d0-85bf-aaea64d45a0d\n28134e39-a856-45a6-bb45-1815a08ba344\n2fa726b0-6ae6-46a2-8c33-329d1dcf1c5c\n9ea2b882-95cb-49d2-95c1-d3a258f93246\n2c32a15c-aa3f-4d19-a8e9-01c6a86b3adb\n4727ea9e-d8ac-4029-84bf-6249a0fa5e83\n059ae2eb-8c41-4f2d-88fa-ee42dc7cb06e\nac5d9251-01a2-4637-910a-869186b3a732\n33ed1c01-927f-46e0-84fd-14b0574e2158\n4daf3e92-5c59-4be2-bd18-6f1710adf9ad\n71eab74c-b482-41b0-b1c9-e932fd7f9243\nfd4602be-ab38-4f04-9a81-8f0e8d9d3c35\n3b604986-0507-4ac2-9ff8-a3717ac0985e\n29bc2c5f-b991-47ee-bb53-da8fdc470fca\n660ebc05-0c59-47b5-90c8-5f1ee09d6dae\n58e708a2-9f0b-4b4e-aa59-c6c617c6106f\n94b2541b-ea45-4a38-8bfc-496b42792eec\nd3198f39-4893-43c7-be61-2d6b146844a7\n8f7dc88a-b8b7-4a70-bf79-d162c4bde69b\n32ecdf49-a85c-4d55-8544-8a8b31a2a375\n315e8875-6f07-4dad-9957-9ccc817e7378\n71bba3e5-42d7-49bf-bab5-3566b88e8384\nc6babcd5-5c43-43e9-bb9f-bacc8dacabb9\n3db07990-0af6-4377-8eea-3f38269eda59\n4ca14a54-eb38-4126-865b-e3be94bbc117\nd3859d18-dd62-49e9-b084-072ade666c3e\n6a7a4e7b-9457-4e59-96da-38be9d2394e9\n2fdec206-41f0-44f9-8c1b-089e5df9a9a2\nfc493a1a-1fe1-4d35-aea3-8b23bba65a8a\n750bf0af-44ae-4575-97f9-caf818228441\n84964af9-1834-4072-8378-54205e4b2354\n8dd1d7ed-4ec5-49bf-8cec-63760e0978c3\n493bfaad-d635-41fd-a3d5-91532128da83\n929e1ab4-98ab-4bc3-8b5a-3c8a9eba4441\n9d8a7f44-2ac1-4b9a-a72f-e7ea6257eaa7\nf313cd59-caf1-4dd3-80b6-d09d337e3cd4\n0def7cf0-3633-4a9e-8e0f-b9554eec4d11\nb049eda1-9979-4ee9-afef-c348ae560844\nc7a27530-b277-4865-879c-a46925021cf1\na98fdc3a-2fc3-4f65-936e-68b9a84728eb\n6165e9c5-02a5-4792-8132-def8318dedef\n4c98e9f7-e35f-4cb2-a180-cd0903bba5b8\n44737104-bce4-4378-a1bc-815006836630\nd64d1e48-7e27-404b-b00a-1de8a4e73f90\n61f09e53-f224-484a-b5b3-1904d0bc50e1\n7679d831-0159-4dce-9f20-d263f26467b0\nfd0e8a2f-1695-4bcf-9721-35524f228919\n9a5be989-0986-452d-b67c-a7cdaf2ab133\nea6359e1-a482-4a3f-8db6-a4b0eb707001\n329fcea9-41fb-498e-ae71-70e90dda4c3f\n39005c49-1333-4f19-8812-0faa82fafe91\nc5f80b7f-460d-4dbb-8272-31dbcc9cc121\n952f2354-cfbe-4259-aace-2cf19e4f4e7e\n1ea79236-c913-450a-acb5-d231604c7737\n0066cb26-c98c-4598-9bcc-ddbd5ec8ab18\n1ad0f272-c8a1-4aaa-877c-065e103565eb\n3993839b-149f-4a5f-a70c-b77ce7c60988\n91a60a48-0125-4d5c-98f6-d431ee24452d\nd2e41d4e-6758-4c01-90ba-141a8736bf3d\n6b9add07-4729-414b-9ffb-4dc3d426d5a5\n0c6ad059-ca3a-47a8-818c-182fa280c236\n11aa8603-a1be-416d-ba2c-f1ba8bfc5408\n2ef78d07-a386-4d27-a484-f3de9185800d\ne49b2695-9dea-4c66-ac35-c5aea6ea3575\ne4fa805f-8100-49f8-b6ec-f0d2897cd835\nbdee56e6-39c9-424e-aebe-290e66eef4f1\n0dd00bed-2f59-4420-89e1-4dde6b3e7a87\na1a1c440-d334-4a81-af5e-43a49386f667\n3d5636ae-14c4-424b-a24f-0d7f8207e148\n37f1b115-8cba-4846-ba25-e1bf3f5c4dd3\n79b8dafe-d771-4c32-b800-18526560e21b\nd2df8c87-606a-4070-9998-7a06ffa477ef\n3affb065-4f34-424f-9e49-da617b25e904\nd13a824b-cdfd-4b30-ae37-6431a728a4fe\nd8d24aa5-a7b8-4056-bc2c-0a90ef7f80d6\nc3ddbec1-07dd-4692-8b66-2d9999bd6966\n452e2795-f9a3-4c2a-86b3-ecc2e3a1f554\n8faa4bbc-5462-40ea-b84a-a9048cd7748f\ne3e17fd9-2b74-453a-aad6-b08cc6ab8463\n42df2bc4-49db-466b-ad0c-001b8990efea\n99029707-7a04-4a87-aee2-4110fcab5ad1\ncc7530e5-fa72-4254-9597-7ee04ce3c76a\nace2680e-a552-4564-bfb9-3441d0d570a6\nd15dad79-e0ad-4e8e-81c8-f1a96adc09d7\n4ff8ec66-0ff1-460b-90b2-f3fdbced32d9\n90238b24-4f3a-426f-abbb-37bef957bfa2\n6bde9b34-af04-4344-aa05-ea13a20d372e\n2cf96b79-f577-4820-b3fe-8e71a8a246af\ndb1e1f8d-973e-4520-ba48-444b4033a419\n0ffdee6e-e0e8-4853-a309-287d01eec4e4\n6c759ae3-d0a5-4f22-a8c1-4db61b7ba332\ne03c8468-b7c7-4809-874b-714fbfdee362\nbb82d36e-6b9b-40fc-b358-c136178a8556\na827b98e-3a9d-4ff1-9f23-6ea42df9b5c7\n7fffe65f-d2bc-4673-bfb8-0b96ddc4fd29\n98cdb8bb-b328-4295-a2e9-d1b6371681d4\na16e3ed8-1902-463b-b03e-31d2b7bae6ec\n1c8a888f-14c5-4d96-b4db-fc4cf52da08c\nf1987042-af46-4001-acf6-ffe93fecd3a9\nb646e314-7d39-4a21-9991-7ec565d9ef88\n5ffe09e4-aac4-4a65-8dc1-11700f792d90\n10943ce6-86b9-40c1-a7ee-280ad0b16dc3\n96baf034-3289-444e-9e89-879d9b0667d6\n1dd284a6-1e2a-4eb3-8e08-42155e774b52\nd6a7578c-10eb-4e83-87e8-a5d430e9bea5\n8138202b-5970-4c6f-83cb-68961e24187d\n4077489b-506c-4516-94e3-c27760ab9f42\n220a690f-6e4b-4d55-a744-a3d1f3c83c90\n0e543aae-0866-4677-b0c0-ca2b4a2c720f\n1d29fd5f-7d56-48c6-8b46-990656c7009b\na20c0500-2656-45e4-a4e9-54536338f32c\n52649fef-21ab-4f8b-a253-9ce323a6addf\n377fa427-d0be-44eb-8168-2258b7128b6b\ncc6baaaa-a5d8-4a0d-a9c3-267aed6c4772\n2dd7dcf6-8490-4883-aeb7-5fa1dda4c72e\n1d72d211-5417-4caf-b081-ec83c88fdb7d\n926cc251-7f77-4520-9e1b-bb5f3f5a25bb\n219a4b14-f10d-4c91-8d89-d49fd289e3ca\n803f428d-2d10-44ec-9cd5-2b4b91698343\na9a645e5-cd05-41d6-8482-4f3daad8b50e\n42d930b7-c2b9-4f9c-8ecb-6ff2868850ca\n6c113eb7-23ef-42fc-b166-69dd2dd73f28\n5ce961d8-7b89-463e-805c-dd99dd5b35a3\n9a33ffbe-824d-4608-b7e1-bcc9e8e8861a\na6402a61-48ca-42c8-8703-6de9b983fede\n51ec4a0b-5f9c-423d-bfa3-0eda4fa6ed69\n4a9d5e39-c388-4fc8-80b1-32f78a7d898b\n6419861f-44dc-4c3b-bd04-8a9ed63bf300\n213c1e14-b795-4930-a3c0-641689a79494\n9d511479-65fc-4adb-b9d1-960bfa7ee9f9\nfa933eed-bf28-4f7c-9294-ea89dab83aba\n8a69f6e3-dcb4-4263-8874-8d17432c5aa3\na0f693f1-7547-41fa-9f1f-6fcab052dfb2\n15602413-6957-4802-bb85-a9ad49e2c334\n0344fffd-0bcb-4326-b076-0f52cd963b74\n14e04c01-08d8-4b36-8be8-d00cfea5fa1d\n9f8e81c0-49b5-4ed8-9877-26202f4b2e52\nb1e07a90-d197-4103-a64d-3af9bd701fdf\n1b88b615-6373-4350-b2c7-5a103a3582bb\n12346a2d-1631-4486-bb7e-af62ea7e0b08\n8afbcb60-bcbd-4c18-82cd-1485cfc68190\n28e09cea-9f6e-4eef-973f-ce84b6451527\nd1f4f1fc-efe9-4ab1-975b-fdf5e55233ae\n1276adee-d115-48e3-b6b9-cd5f03639e4d\n475a838a-8865-412d-b553-0bb60afe3151\n1e63f82d-0ee9-4c44-9180-7f46aae0d9a4\ne005ff77-9455-4fb0-87bc-e237c6b8e9b4\nfc380de2-02a6-4ffa-b9d3-65eb13e781b1\n7d7a6ed2-603d-45ee-a6cf-fae15fa2f2f2\n945d9841-3f30-452b-bea0-c8bebf100083\n51afb1f8-1acf-405c-9852-0b6444bca2de\nd5d895f1-2d05-47b8-89b9-d3cab637927b\n52f79bfe-72f6-43a6-af01-660abb34b724\ne9364d69-e1fd-4559-a7a2-091ba4230069\nd1601416-0ffb-48c0-aa19-8bb21d2af12a\n52f9e0be-c0a2-4a3a-a87a-dcf5017bbaed\nc5c499ad-ac2f-4d1e-9ba7-a365c3644c46\ncd772f23-6114-438b-adb5-f0618e1f96a4\n370a8235-2a7d-42be-9813-09e9cf54531d\n03edfd81-4832-4186-b621-5b7e4fab42f0\n8bb9e0d8-5b1b-4d8f-8c4b-c0d415e1769f\n2f48f673-1d29-4d41-beb1-6ba109b25c15\nf8ffd197-53d5-491c-b19e-9e13459b011b\ncd5598e6-b0c0-480f-9455-54f077c2e2b7\n06e6c5dc-e08f-4426-8c91-828e0701a381\nc0fc44f5-51f8-43ad-b4e2-8b4250f04024\n74cd3647-47ac-4c59-8f77-6ca9e8bfe7e3\nd087d7b3-b5ed-46c7-aeb5-9eb26e1299f4\nca559f41-0d43-4324-8fab-51f5ed986368\nd8173851-0e76-4f69-8549-e10f405cf621\nc5feb0a7-98c5-4caf-84d5-baa543212c90\n61347677-4c0c-4c65-80df-b39f9f42555c\n40255d2d-d186-4984-9249-d594df0cd099\nea677e29-3657-4ba8-ab3c-4366e8fc7c23\ndff62220-7810-4881-8cac-f412b7a8a594\n012d7472-90b6-4e38-8ca9-42b4f634869c\n4bd0884a-3586-4617-93a2-1b03e1329ea9\n06827124-07f0-4d5c-ac75-fcf62c34dedc\n31ff0345-bfdd-4026-835e-23abfecfef16\nfdbf34fc-8407-40de-be52-db210657e524\n6f36e3cd-887b-44b9-bbbd-85d7f434923a\nbd4fabef-995b-451e-a472-b5a6590d7d69\ne5e5b9e0-4054-444e-bdd8-3f52fe0e0afd\n81b06c67-bb8f-4355-83db-eb7934e1de88\n0412ee5f-0612-4fd4-b260-0a8c27e577dc\n948a7ad7-6dd5-4097-b3e1-8089c1fc87b0\n49f3eec9-5086-49ec-b2f7-84a4e1ac98b3\nebfe74ed-fe7c-4d3a-8e5f-b1caab645c8d\n95e3d33b-2f54-4414-992e-ac93109dbdd6\n95f676b6-ecbc-4e9b-95d8-acd1712ba81c\n90c403e8-4ce6-4384-8f9f-46163a8be88d\n541a0f6b-307c-4036-bb57-4987613be4b8\ne4a329bc-a85a-4f41-86bc-e7a1dd92a496\ncbf70acd-2383-4f3c-9942-9e4c50f20de0\n550324f5-8467-4a71-9cf2-2795d2b52964\n4fdcaa73-2087-4062-8608-0870f59629fc\ncf981ffc-aa80-47c4-ba93-8636e4607fc6\n7442fbeb-fabd-4ea3-8856-1e0836f14bb2\n85bf5716-57a1-4c1b-b385-462d565d6775\n11d0462c-9b5b-4af1-b851-d3e56c542ba7\n3f1a9a35-2872-4e4b-b813-0b00d0a2f3b4\n849e9e70-55d4-49fb-82de-70e11358988d\n9e4ae93c-80a8-4a4a-9720-be33eccf0afb\nef20fb39-1b13-46fd-a921-15d8ad1e8728\n4321749f-ce46-4eb8-91d2-1dc050d2d4df\na629b5ed-fd72-4a73-a0bf-d45f42f6e846\n1463f023-1e06-4171-8b12-066271395af8\n3789e25a-d98a-437c-904d-200012ce6f50\n2b70c287-f600-44fe-9c86-115b88895704\nd3d7dcd7-ace3-4a22-a3db-7eb529ff8c56\n12579db2-bf02-454e-ac66-eb3122cb8246\n33c43a93-2034-49af-b572-ccb8398bc8c4\ncca58798-4110-4bbe-95b7-89926576672e\n22dd54a1-ef71-4a2d-88cc-42332d1f727c\n940fc608-98a2-466a-8cbc-33a7c17674dd\n95c3f59a-4ed2-4d67-87b7-7788b9bb5399\nd4836c7b-84f3-4d34-821c-73aae813b59a\n9957fd47-1168-4887-8c4c-d3ce50cb92d1\n6d3086be-e783-4f81-8358-629d4dc5fa5a\n36bb7171-2873-457c-b4dc-9f00f3fb6672\nf5a096b5-0a0b-4c9c-b449-1a66a5bba1bb\n5e102e95-be1c-40fa-b36c-269503aedb6c\n370d1e98-a748-4bc7-9ba2-0711249ae8bc\na798c7f9-c2dc-467e-af14-95c7bff79a0e\n7513b2f2-2431-4586-b0ea-73a66399ec02\na9f3f153-fcde-41db-8a39-4747f1107f54\n91077f30-78de-4154-857a-fdcc2a6f5081\nc0df3ca1-1166-4f80-8810-7193679f5d52\n8a3cfadd-bbed-4c4c-9523-524fcd25fb4b\n79cadb4f-fa1e-4771-8c5b-791a3a6c656f\n91c062d2-7187-4c75-892b-54aeeca8836f\nccde095f-c38a-430a-8111-ce940b87762e\n88a2c22a-e76d-4705-9615-1e278dc7f17c\nbd8b71c9-af70-48cd-a9f7-f544c67b6793\n4932532b-2adf-4ac6-b61c-2b6b286fbeae\n385b9620-5ef0-4fe0-b4f0-ed713417b2d3\n5cae78c4-f374-43f4-81a8-de8a2f81c59f\n0a645431-d264-478f-81fb-a6bb49b6a6a1\n3ea98991-d324-4077-9340-d297fcf627ef\nf357d110-c283-4421-ba15-188c8d3bcb12\ne3042b08-ed3c-4dbe-8a9c-ab0d570a739c\ndb1f8c77-8de6-4ef2-ad11-eb88ed3a89d4\n7d20b6ab-914f-4839-a116-938447acf93a\n11edb372-c214-4b5a-9712-e28e63d99eae\n2224c3a3-fa7b-40ce-bc75-083e44febcbd\n33726884-5c18-4b9e-a44d-cd5db4bb1901\n0b721a09-2069-48be-a7bd-bb0c0e136788\n09dd170c-8ecf-4636-bc63-b32f553aecd6\nd6f420eb-29ef-4f49-ade8-7df0553017e0\n241bbb1b-7012-43c7-a5b3-c0fbc2665c54\n00200cdd-0939-4b26-a6f3-e182b3715e31\n010fc072-769a-41b1-b6de-8545ab8f19a9\n95c5afc1-d9f6-4522-9ff9-0a851c238f42\nbc211795-8348-4450-a625-a91b7e2c9730\n671d7781-29ca-4139-a468-239dac5101cd\nf64af391-5e59-4a19-a71a-e05a7f242f33\naeeec1aa-7c71-4801-a64f-20337436b0c5\n5b6aa81e-b5ee-4fde-92fa-70201218dfd7\nb9e87fc9-55c6-4844-b230-e83c0ac98220\n94b5a702-1776-4448-be27-b6b4cb38f5b8\n630bfa38-5ecb-486a-bdbf-9331e5fc472f\n72a8a23c-96e6-4161-a097-f42226e17353\n91653722-adea-4286-a00e-3f349fec39d4\n19e4db71-75c4-4e7c-8556-cb7608ae4dfd\ne266c947-65fa-445f-be90-787fa55c8f00\n3409649f-6fbe-428b-ba80-cc280b2c45c1\ncfcbe779-53b6-41db-870e-73db36fe65ee\ndc46f551-2da4-4eba-a360-1da88db37d8e\nce372365-0b6b-4d71-ae6a-d6a7a3c742e2\nbaf261c9-5b38-425b-943a-c8739707233e\n97a9b975-59e4-4cdb-a3ae-4fa0b9c3661d\n7172af68-474f-40bf-9e54-33979dde6f77\nb9af05df-37a6-4339-9ba3-b20bdba4deb9\ne9416773-fba3-4670-ad4c-a52d4b7335ba\ne52b5c69-f636-4e88-9dae-c4009b437875\n65c9e93e-5652-43a3-94b5-0ad2f0f6859a\nb566b3f3-34cb-458c-bfba-c4161b4b4a2e\n14221849-fcbe-4261-b7eb-17e0c24aa53b\n211f8e15-babf-4d8c-8f30-189b6bd111be\n1d5bf7fd-34b7-4e93-9b11-8be8145f2e0c\na0d6cb81-baea-4a8b-b50e-ab720828298d\n41b016d4-b86e-4b9c-b5eb-10de5c4cebe1\n04b11956-1d49-4412-b33c-5287e3852118\nbadde0ba-9e41-48d6-b8aa-ebaa6b44e36c\nf3abaf5c-5489-499d-86f4-9f5908d4eed4\n74026de6-4abc-4d20-999f-7328544b0fa8\ne0b21ec0-8839-4fad-ab9b-0a447db919a7\n11f573dd-eeb3-4b34-8b1d-e22e32f3e18d\n3927e810-f072-40b4-8f6a-8e223ad8ae6d\nc4ef36a1-d59f-4e1e-9c6c-d226d59e1766\n6192f85a-a044-4e4c-92a1-88a78b03a06d\n448f466d-58e3-4842-9f4a-7243faa0cbbe\n342f8384-69e2-407d-b262-7afb7d6625c2\n6534c522-868a-4baa-8fa3-a30de72c1599\nb892d2d3-e6d8-4484-8e57-f185925f525e\n8a9dd20e-7af0-413b-ad5a-d742fcc748ad\n6bbaddda-b9c1-45f3-9182-624d86d4898c\n75585791-777f-4c20-893f-4db5a3492c33\n54af624c-f491-4430-a80a-a82b3b0b16bd\n323cde0d-7359-4290-a99f-6dc64eebb3f1\n5232fa4c-1ebe-48ac-8ca9-726b92ae9753\ne82a12fd-b9f2-46f7-a0b9-726f7ad5cef7\n5c41628d-352a-45fc-9895-853f95a3c85a\ne7799f47-43a4-4b09-ba82-ff4edf0471e6\n378291c0-0c3a-4aae-9e4f-f5c9f8411550\ne0e67c30-1aca-449c-a328-ded015b6a825\na235ab3b-f170-48b5-95c5-04c888444f07\nca516889-fa7b-4e6f-b562-2625e03e803e\nf7117fa4-2603-49e2-a47f-ac6ee44aa61e\n514ef68b-b0b7-4128-8a8e-f887aadb4824\n4bb011ea-f1bd-4034-b0cf-79a8fdd12dcf\n05aeec29-231b-46ef-b440-d3d556ada0df\nd9f7cb55-e690-4191-a7ec-6608994c96c8\nb1b03cc2-5911-402f-96b5-fda618ccc504\n2cef62da-b670-4f48-961c-8521f2cec4f4\n94c97a65-6602-42a5-9653-dbd91cdad125\n546fee0d-da90-43a3-834b-e3fc54dce515\nd4d6379a-b0a5-4d1a-aa3a-4205b80f467b\nbc81490e-30ab-4dc7-980e-61acfedb6d9c\n0fbdd96f-00f6-4660-b901-6f9d7cfcfbd0\n4d2ea017-4b28-4637-87b3-8aec85840675\nb63d57bb-272e-4d1c-9d55-91d8b3fb48d1\ne90d2c35-a2e6-4136-a01e-20972c5254c9\n6d1ad897-f249-4abc-9551-ec93b77f9e6a\ncfc6bb02-1ced-4955-a2f6-8e42dd9dd9cf\n7beb1fbf-c28c-4145-907b-d5aa2e6fd704\nbd3981b3-cee9-4ffc-994b-159fa5d26b16\n04410546-e800-4d63-80a8-520c64ef7f07\nff1ec0dc-9ef3-484b-9795-55d54cb71778\n536a1c02-830a-416f-83b8-d3831898bfc6\n7ab400a1-7ea7-44e9-965e-b3763147c1de\n231a9bc6-a382-45fe-b4d0-dcb15b16a5b8\nac242e66-7bd6-4c02-9392-62e379a68297\nb102f6f2-f481-4c01-a9a5-5b1d76e12858\nc75e7ee2-f9a8-4c34-a55a-f283b2ad4688\n4987bb96-652f-4b16-a66f-b59c93b0bb91\n87c1543c-3c8c-47a3-add2-f6866f27a075\n684dc137-667b-40d2-ac86-7984b410802f\n954d2f3c-d430-45ae-b54c-c40184e5aa7d\nd2b948ea-69ce-41f2-960b-75b9c98cde76\na2a9f5c1-5166-45c8-8a8b-ac93d725fce1\n709784cc-06fc-49c2-8116-cdb1bc92cc59\ncfefb7f6-78b3-4fe4-b8b5-e484a3a691f7\n9678ef6a-a83e-44da-8587-58b4b14bb02b\n54d8776a-a362-41ea-911a-c28bdc793570\nbbfafaa7-646b-4308-b347-3af0d7b0a28a\nd97d2130-3732-4657-86ce-5a58a57175c1\n2d9ab4bc-1011-4d2c-b9f8-01a5f1e12f8c\n586889ca-ca3b-493d-b5aa-de58d1c5ab55\nbdaffd01-2cc1-4c33-a830-9b467d88c5ff\n36034628-44ef-4362-be88-cdc02c9cc200\n768a6197-fd16-40bb-ab57-48b9c772c9a7\ne6d4d471-0fee-499c-a620-a2606036b8c1\n2cf01c48-213e-4c61-a511-21450100c860\n892c76ce-2cad-4ae8-a1cf-374466d31039\ne474d9e3-3af1-445c-9761-91fa4d73bc4b\n0025bb54-14af-4bd1-806e-b8ad5d6ef9d9\ne0a2403b-1024-42d8-afd3-d8d57372f983\nb106584e-f589-4fc8-8243-ffc3148a9029\n676f3595-5bda-4cc9-9eb2-4c7ee88699fa\n0c9ea358-5cdb-463a-ac56-620c40842c4b\n22de9930-b431-4c5a-9c59-a70bc58b3a40\nff932dd4-f385-4fda-9daa-817f805b193e\n571a8c7e-ea2f-48b9-928a-9358b841f935\n80bb90e6-69a8-44a2-9c26-2940f9f065d9\ne671567f-8010-484e-a10d-e1a2e08981e0\nbb7cd311-3399-4d54-8744-f02b5f6d05cd\nd3d081e0-0d5d-4896-bc2f-e2bd98155232\n0052878c-11e8-4480-b4fd-4fbf9bb2d633\naaeb5b34-ecd4-45c7-963c-fd6081630caf\na4594ab7-0b22-459f-8f84-04465cc3c24f\n589e3036-638e-402b-9aef-7be3508b6f60\n34e4e757-c353-4aae-8b32-414379056af1\n65ba09ed-2743-4dd4-b374-5573eb690510\n1ac0249a-b243-41ce-8802-60098dbd02fd\n69a27086-108a-4c07-bef0-1bda6de64a96\nf8e7afa4-90ae-48e3-bd5f-2932c0622151\nc22bb289-3c15-42db-876e-0e3172ed8e94\n69388b08-7f0b-4b2b-a50b-3f85b7ec2a86\nb0c8b83d-1f5b-4f75-9dcc-c4486518c479\n3640689b-97db-47d3-9b3d-52275613d9b9\n379703c5-4e35-448b-aaf0-c3ba6aaa17ff\n77b2ea07-5e29-4280-95c3-6bf5bd65926a\n80e501ab-9647-4202-b0ce-9979c6ddc7c9\n52bbb79a-2e64-4485-be68-032f49aa8ad1\nd3de6af0-eaa7-4f64-9985-f9fe8a98b99d\n834e0fb3-6361-4888-b10a-bf1ebefcb582\nf99ffc6a-3aee-4604-bff8-4d40409bb9eb\n12e6dee5-0ff4-4707-ac24-e0f4174c5004\n7c117a84-3482-4d1b-8cd2-2db2c32496de\n60270dec-92c5-46cb-ae39-7b43028b4648\n464b0831-b555-4ea1-aa16-3bdb7d5ec50f\na0d36281-d09e-4105-ba90-aa0ef4338013\n2f0188ec-02ad-425f-a98b-6fd618d25ffc\naec0a1c0-d442-4904-bd79-926624f8403e\nb42fda30-7184-48a0-9fe2-993b92933a0a\nd8ef0605-bab9-44f3-a962-7febf863dcdb\nd5493e09-4487-44d0-93ed-fd60ce2a9eaf\nc1c4dceb-338f-4791-873f-88330a50d653\n2fb421d5-ac30-44a2-8d06-991939b74cf5\n8ce158f4-6ff9-4e36-a062-f07fb2d47c7b\naaccb71a-d637-4799-b802-672ee5b312d3\nf3f66d1c-97cb-4ce2-9f9c-26e774379e80\nc1b5ebe3-adc5-4430-b109-9a0cda85296c\n74184f21-be23-4313-b68a-f761313cec50\n322a2d26-ac75-45e9-8da0-bf4c52269f50\n08f5b200-a89c-4892-bec6-41430d6827b5\n9c8f3c24-8551-4142-b2b5-a500524e3f81\nd1a9272d-78bf-4d42-a70b-8fcc72d97392\n7d4b9dde-6f3d-4d06-ab48-03ce646dd0b0\n3a3f287e-bf02-4fba-b577-8bebf9580a81\n5ceae267-8f2d-411c-b5de-0f62e13d3eb5\nf8e7b7e8-a354-4d6c-87af-30e180a63962\nfe993037-594d-439b-aff6-77ad82ae2829\n91de2b18-3d72-4259-a0f6-39438922ba26\n8790dec8-a992-49c2-9adc-5609bb674c33\nce3e3ee3-ef2e-4da8-beab-4701ce4f76eb\n5ae1ff29-5556-4538-907f-34e94a511676\n0234715d-6523-43dc-9ad4-6ce125b7d311\nec2453e6-22ae-4bf7-b0cc-6ac0ec79defe\nc0705fed-bac4-4cd3-94a3-c677494aa87a\n35bd691c-d4a9-4714-8978-082a296a98b1\n88cc5bf8-b779-48c6-908a-631bb86246a0\na7d54ef7-2747-49b3-9dee-107c8d16ee93\n98883fbd-d5d4-4e34-8f43-81ffbe3f9bc4\n76ce69aa-8260-4491-9163-da223767de1d\n09660831-6737-4e7b-b864-d285f2824ceb\n611c73f6-976d-44fa-a4fe-ffeb42ed46e8\nc717e8be-2d8e-40e5-8217-0d5e91b63de8\nc055ccf4-de95-4ca0-bbb5-2d73cbd6eb1b\nbabd64f8-bc43-4282-9263-14fb221b9be2\nf09fc984-7afd-46a8-a123-a99b98c4f10d\ne5695ced-eabe-45f2-a22c-218387090456\n3b8f4dae-2586-4d20-aab8-894b0fa5bd0c\n393415a9-2cbb-48ed-a842-ee53781d3188\na5f58b95-2cd0-49ff-a868-c7158488b221\n382f580c-852d-46e9-ac6b-ae9b4af21c78\ne611fb57-60b8-46d4-8ee0-c3f83f1f4041\n30386a10-a41b-491c-b3a6-999389290b50\n8d042c2a-3393-4e38-820d-10094ccf9747\n5578b821-88ee-46a6-b44e-2e7a94521ae8\nd8f4ff85-cf75-40ed-820f-23517ebe9a25\n06ddb590-ddac-4801-b303-995893cef379\nb3697d3a-4465-4aa7-84bb-6efeb6aa9401\n6d242ba1-dbf2-4116-990f-e76e807833ad\nb558f334-171f-41b3-b11a-caf6413fec0c\n7da1736d-7b1c-44d5-9a35-ab54b7aba433\nd1395fa9-c80b-45b2-bb32-144c2ad17ba2\nb78369ed-4c85-4059-bcd8-1bbbf61e3a62\na8a9b61e-0b59-4908-9978-8edf0f2b4511\n9976e693-7063-4b5e-9a47-de5911d38970\n80da93ab-aca8-4082-9fde-11c7289ce6cd\n6183f297-58a7-41ee-bf80-a9ffb077485b\n75b3d5d9-3665-4e1e-ae34-76e961714393\n4b0667ee-0fc1-444e-b08f-84b0afc3bcee\n7e68ec83-5da8-4081-8a13-272f354c0a3f\n487799e9-b324-49e3-960c-b2d579b32f5d\n585ab55d-3d15-4520-8f08-aa7ebce8a230\n478896ae-2fe0-4dc1-aaa3-10c3ba6cf276\n5364e16c-e266-4702-a48c-4d608b29d5de\nd5585a30-73f6-44c0-ba2c-03428b362d48\n80a2c406-9f57-4559-a80f-e44c4928b234\nf45e9665-0e91-467d-8b5f-5a6f895894ab\nf951423e-190d-4f0f-8e99-620d4b0a25da\n637bc518-42f2-4668-891b-80c5e42c8eb8\nb98e59ed-09fd-4738-84ed-0b8146cc791a\n6b40411a-a7c7-4647-b445-b52f38741f5d\n54815caf-aca3-49d3-84cb-22b4da677e7f\n3e3d9e1e-48e2-4acd-bd6d-3d82c301201c\n7dd022f8-2530-460d-9358-69698742b600\n86358677-bfff-4140-9fc9-484388d3c340\na5c7bf8f-2831-48ea-9b01-edd8f731a380\n504e1209-99c5-4c50-a4f9-3ece280cb393\n4b985d4d-58bf-4bed-b67e-0330dfba6603\n706599f6-0857-4a3a-bef0-6e74956a8624\n32f51b8a-55b6-4755-aeef-f867b98f907e\n700e5cc2-94d6-4e90-b4fb-263aeb344e28\nd0c5b96a-3fb4-46a0-a084-401ff65acac6\n4b54d592-ec13-40be-afb2-4f217d70f4dc\n46456ed0-3d86-48ba-8b37-4ecefe4dc458\nb1877caa-3f02-4227-beb6-c092a3725783\n90972f5e-010d-4a81-9a43-dfc582279127\n933ff782-8df9-435c-aa3d-bf2c959a0090\n9ffdd1b1-45d1-4d34-8a8c-37586a493822\n08a61910-1da8-44d6-8976-8e2344632541\nfe8d54d5-a01e-40dc-b102-fedd7bc3693f\na5076254-5171-42ec-a6c0-ddf6008ce459\na744c0f5-0b26-456f-8d89-582f4d82b171\nec35ba8e-8ae0-4241-8abb-543a63df1000\n19ad0219-bb90-4800-a357-9d117ec1c32d\n25c7d4b7-71b3-4789-af53-a0be16655144\n33e1fffe-5baa-4621-b1f5-60880f6f7a24\nf0123876-12e7-4e19-a5b0-8c05625d2b20\nccaf1cc4-6b3c-40b3-8ab1-13b15ed31971\nf5ea8059-316c-4a10-934a-cadb3c3f4e9e\n2b86f14d-6ed4-4287-8c0c-be37e0812203\na0fcf862-2c82-4f0c-b5ec-54560b445e6d\n9bf4df6b-321e-46ae-a74a-44cd27fa681b\n67d7a942-d827-40fe-934f-568c46f1d4ec\n9208cf94-938d-458c-a4c4-791b41a1cb79\n0515d341-9d01-4b7c-97a0-0057353c2574\n2fdf20e9-dd58-4c9c-9e5b-dd3052a0d6a0\nba8598d1-afe4-4ca6-a40f-9d04ef50c7c6\ncc796dfe-3ecb-41bc-bcbd-f21a6707e3f1\n498da537-7960-40e5-a0f1-819d4ccd01e2\nc24920c7-3830-474d-8ede-22b9eb231aea\n057ce750-fa3a-4132-b170-4f88d407f973\nb27ceafc-9f43-4f73-8afa-56e25bf1ab48\n4e818ad6-de0e-4858-9082-23f811c79eb8\nf8559614-67e1-494e-97db-6310358d6692\nd5932061-f957-4440-9c49-25d22f56391b\ndc8c5620-dcaa-43b3-afda-c62e31f6d4ed\n1b335214-c063-48d1-83fa-b14dcf2de1c6\n8f1fe1be-e41e-4111-ac5a-6cc92bf2d170\ncd13b352-5e0b-4122-86c9-98b994a94b60\n7c961452-d337-43fc-8ed8-3d3f9d4124cf\ne88172d0-3db3-4e81-8fb8-fc449e0be9c4\n3b19005e-ccd0-4773-b7c1-eeab307778ec\n736349b4-5345-49a1-b9b3-c11b48e6e631\n5de8ce72-535d-4c93-a3e2-28beb6f78847\n9b1ea0eb-eba9-46df-ba5f-79c4bb062ee8\nf818e2f4-428e-4933-8170-59b3207eadb4\n0205e2dd-6ce0-4645-bab9-10c2030cf9a3\n6e795c6c-6bdd-43b3-8884-113a690e26c7\n0b341d6f-fafc-469f-bc40-d0ccbef4ac91\ne4e1e21c-351b-4359-91dc-b9b69c015df2\n67e25adf-1796-4ab8-bafa-1cb3b3fd376c\n3ee0a684-5e5c-414f-9bd7-0ee5916d08f5\n44bd2b64-34df-4b98-b57b-11846e139704\n893783d6-e592-4ae3-abdc-665f9f67bf08\n84b0ef52-fb2b-468c-884c-35c293d6e141\n55c3c0ff-bbc6-4723-8989-271f68e12939\nfd390f69-b409-4c9e-89b1-b34990bd7f4f\nec2cf2b1-6f40-4e90-a895-1309c462fc27\nc140906f-0e43-473d-ba38-24b58a6300c7\nf61a45cf-4641-4186-845a-61287fa7daa8\ncb3cea2d-1374-4042-a715-13bd76e50524\n60c11227-2119-4720-808b-0ee95ba43232\n87df9208-1eab-44ba-a366-05cdf461411b\n2d80ac7f-c23a-4878-9209-b8aa21fc1333\nec6c801c-575c-459a-95a6-c4074bca611f\ndacc0fa3-119d-4922-a013-dcb882efc1bf\n4b437d7e-19c3-4a91-bd7a-e704238d644c\n2658c230-4e77-4d07-98ab-d13ab16b6909\nf1b8e436-239a-4f9f-92c0-21c723eda27a\n5f949a4f-6275-4cd2-ae1d-903328370159\n8b29409c-c465-4507-a8b2-ad080eac40b4\ndf37cc53-f429-49ad-a6a0-6d70b2238ffd\n5edb421d-00aa-4cdd-b780-34a5f2b01208\nc1f9ffff-d058-40fc-9531-0259bc784f9e\n136dcc20-efb6-4762-809d-b4569240840e\nfb0859ac-7b6e-46d0-b77f-e37ff6afbb26\ne1db5fc4-9984-4733-910f-f5cd5324913b\n69085b2e-4e49-493c-a84a-ae9d6e76b1b3\n25bb5bea-cee5-4eec-bc47-56356bda5286\n2fa55dfe-02bf-4e97-a624-06aefb9d1eb7\n167f0f10-a532-4d79-9b2f-460f595c896a\nc9936576-aafc-42dc-be47-7d462c28a74f\n82ce8657-69ae-4c33-8513-ca0f3a1c7682\n8b1a6387-4720-4968-baa2-983365ca7ef2\n02340711-08c9-4aaf-a5d7-3df56c5cdcdf\n70d67296-11d4-4fac-954b-6656aedbc8c7\n7bc590cd-6ba5-4704-804e-344527d512c3\nf3bd38c0-9505-420f-aef7-930e5e37fa29\nd5e714db-f781-4951-bed4-4f2e35b9e3f6\na2be854f-f2b2-4b34-a494-e69ecda5cabb\nc2ad6519-69a5-4540-a801-86ee4620db4e\nd968fd5c-c8fc-4a37-a0c4-8725153ccdeb\nc334ebdd-7116-40de-815a-5309d1044c96\nef17b464-a74b-4a66-aeea-145a57a024ce\n146a6680-e39e-46ec-ab97-5d4e7ff05944\n71433f60-cdf0-4fe9-83cf-21b65a74425e\n417b4852-d653-4108-87e2-d169ea5afc71\nc38a567a-8f50-476f-8a8e-8c7f22479f32\n3ac2bea4-aa56-4fc3-a499-c9f63d2634a3\nb9e21ef4-69b3-4e1c-ac98-3e25b631c285\ndc5b445f-2e66-4e56-8f4b-224b6c3a18eb\nf66f9365-cfe6-4c1f-aceb-7fde8c989f2e\n96e47a99-a191-48e0-b469-6ef1b086d312\n9be4e52d-f5c1-4d49-8118-32d091787253\n04492ac7-887f-4d92-afa9-29428bea67b6\n67b9c478-768d-40f6-83ce-21ab9e8ded68\nc931845a-e453-4dbc-ac8e-6ab6fcdfb0b5\n27ff9c9d-02cf-4b1d-bbe2-38c253409116\n781f789e-2b8c-4d17-abb1-ec5290b7ac88\n05ed1ca4-3099-426f-941b-160e3d72be24\n67c92b09-779a-4d92-bc8f-f30cad731fe1\n2d8d1dd1-d5af-470d-b55c-6a3358352fc7\ncad8753b-1b32-40c2-893f-5e1f83e92f9a\nccad34c4-82b4-4e6c-a86f-8bbb82f61b83\n16b20b1c-b6e2-4896-aa7b-21f86cce9df1\n119cf2d6-0cf0-4675-9868-f3ba2795a10f\n9d0135bc-7137-46c8-9a0a-a1adcaef64b7\nf3e9a71e-c949-4d1c-b4e8-29fe8886b578\n862e61fd-1695-4208-adba-f27b60214645\nb9ed367f-6137-4724-b088-58cc7914955e\nac93ec7a-13fe-4a1c-9568-679686f95301\n064f8b98-bc87-4bf3-833c-fd3408d5e9cd\ndc50245d-e484-4d9e-868a-23086896b2dc\n2e836497-90fb-4f80-bd73-7103a3812c4d\n0fc8ed05-93de-4c7d-b6c2-2c765f029da7\ncf8a3db4-a7c7-4fae-a26b-f2d19bbb6daf\n670a140c-a2fb-40d9-9b11-aab1893f2699\n931fbac8-5634-4055-8d90-c9647d87b389\n4731abc9-d766-4cd7-9361-ed4e09552196\ndb241b94-86b2-4c9e-8309-d76044af20dd\n4978fdb1-38ab-4c17-9f7f-1819ac18ae46\na7af178e-c63b-4f2e-8b1c-4c2b00fbc1c7\nec3e2f87-6ee0-4a37-9912-762ad2b7cbb8\nd047f655-a851-442c-8e56-0927d7851a67\n2a1215da-130c-4115-a717-48f36acb9010\n131fda33-1fb7-4755-a991-0403196a9b46\n3ebd7cd8-d0cf-4b1a-abfa-607ce5cbccf9\n6d8e6fb1-5951-4411-be77-9559d0d12059\n4c77fd94-52c6-4381-8973-b6e657080f24\nb38c3634-02c5-468f-9405-b1f63617b70b\n892ae944-ad07-45ef-b9bd-a52280df356b\na0a9b554-cbde-4763-9754-16477ac6bf68\n8f7947e6-2975-439a-b96f-b26d4ed30384\ne8ef73dd-0ffa-4142-8746-73beadfd3c4b\nce441999-4ae1-49a2-b592-456f3116ed29\n9e6bc96c-fbe3-4331-bf03-96529feeb673\n5ab859a8-895c-4a95-abeb-300170f70af0\nde35747b-5dc2-4ad2-ac94-98c222894f01\nee076efe-dea3-4ac0-8b10-4f119cee476d\n1cf95e14-3f60-4541-ba14-5d712a6228d1\n4a26df57-e461-43a7-855e-5f16938f54bb\n215eadd3-a9bd-45e1-a693-bfc60cb65623\n2cbc5536-cc73-439d-8e91-88ba984f747a\n6ccc6267-1919-4d72-b277-51542f9b8f6e\nb1361956-21d9-4319-bafd-84176e42e03c\nffac81b0-2b08-44b4-a2dc-ea53666ad25c\n49ec277f-1494-4e1c-ab6c-9e57c67a86ad\nec7c8793-75a3-4e0c-9501-a1addec1173a\nfdbb48cb-dbf3-4092-96bf-1dbb98591666\ndf4d5dc8-a86e-429e-9b1e-99a7c0e60904\na33d0509-7ddd-46b2-b230-ec607b791c77\n4f603df0-1971-43a4-b3ff-12f4c65c4112\nd3e9707e-1dff-4533-93da-76185e44b15d\n47caa320-c2b8-4e8f-9431-1b437afeec0b\nde4f83ea-25ad-4efe-95cc-d2f17a8e4f6a\nd82c2afd-a5a0-46dc-b17a-f1096680f5b8\n01e9ed6f-c389-4ae2-b4ba-ce7a7b9033b7\ne463cf44-7601-414a-9038-640e97a55c27\n549ab1ae-dfa9-4365-b914-f6a9a18dcc5b\n5544d7a0-bd75-4bc4-a915-836048175764\n3d4d2099-3757-4b3c-8f45-b6e9f220cdf3\na9e5de89-121a-477e-9bd0-98857c64de28\n05237be3-4f4a-4364-b56e-41cb7ebccdf6\n5f5e3545-434e-493d-80b6-2ddf43b0bae8\n83e03f5e-f7ac-4cfb-bc35-a6d5a18c022e\n39ec8769-1a94-4921-86a9-a96a1cd4b03b\n304114e3-0bc4-49b8-8aa3-51be1511a1d9\n1b4bffcb-5b15-421d-a3fa-72a563cf1096\nedfd37b7-3719-4b05-8979-0a43877d567f\nc9afb6de-31e1-4e00-aa20-88dd64a20d05\ne2bceb6a-539b-4bf9-97b4-b40f26286db0\n844b51bb-17c7-4941-b559-eafbbf6a4f25\ne155f397-cbf2-414e-92ee-8256b9c85f74\n23b1762f-5b6d-41b8-b93f-c01d2040763c\nc0d1fbee-a6e5-4948-a2c2-4624dea3ddb3\n35e7a3e7-5613-443b-8b0f-72e60516ac31\n77b2961a-e847-41ef-81a0-88070e8ab044\nd304d895-cfd3-41bd-bef3-69f83331e9cb\n978ccc64-f464-407e-8712-e4021d52efaa\ncbb0bc7b-e5c3-47ba-98a5-b8b1fd2e58ad\n8d3f67c2-1bb0-4cb9-a900-0333b10efc63\n36ad1593-5648-4cc3-8170-d4ce6bf84bf4\n34e36ca2-40d9-4058-bd8b-dfac7f812bc4\nf9511ba0-4f08-48aa-8ba9-01df6cb99792\n5ca16585-cba5-4cfa-93e9-87fd0972489b\nf5a916ad-c465-4d38-82f0-e4aadaff7b0d\n8df85bf9-f9c4-4c9c-aa2a-5512ce4706bc\n3e0ae3b9-63e4-468b-b57c-fea1a2a46edf\n67003c7b-00ec-4e44-bb93-dbcb1a37e747\n9113c630-43c9-4da3-972a-aa51b43afa58\n51dffd1c-89c7-4e14-9112-b4e70414eca7\ne576ad60-9da0-4471-a187-205701a1a94d\n8657e2c9-d02b-462a-9e33-0b19bbbc5dbe\na5603622-676b-402d-a9d5-529dd458a52c\nab7a75bc-7bf3-4a05-9507-b34c7877d099\nf7ea164b-3ff2-45da-9d8b-2c8b295d3edb\nc4e0bbcc-533c-432e-a353-f1ec96202d69\nd2a9b84a-be5a-48d4-9400-467deaf6c882\n2e7c230c-92e0-46f2-b68a-70bd7fe30aa0\n3a48f415-ed2a-433f-b927-92645a419574\n1634ab8c-08c9-4424-a4d0-fae37c1477a1\n1788849f-20f1-4aa4-916b-aa6ad2296bb3\n6749a70d-12f3-478b-9b88-1b7ba396ef99\n202e8e3b-aaac-4340-872b-1b711f0104aa\n69e02953-8cd4-4dd1-8472-c230ef076846\n87c2c846-b3b9-4f1f-bdc7-e43c7fd2d8a5\ncf627fa6-9cfc-46d8-b8ec-a23f58afee80\nf6c9a2a6-df89-49ba-b562-ac96a2732da2\n22b162b8-e0dd-44ee-aabe-2871d20494b2\n9955cf1f-ff93-45b4-a997-f159335b7e99\nc42f3040-2902-4bd9-ad90-955511b6c60a\nd0faa928-c55e-4940-becf-5a9afad528c3\n6cf666e2-53b0-45cc-8ca2-d91db829b822\neccc443a-f36a-4812-8182-9b3282498bfa\nf8900503-c1fc-4ac0-bc2c-4d7a72db8ba2\na4d5b81b-007d-4eea-8cc8-80d7a12edc50\n09ac9230-dc11-4576-ad41-94c10547ecb9\n347d0ce1-6a19-44fb-91f2-0868cfcc6755\nb75e2ff5-c943-479d-803a-8317c4ef513b\n85822a77-5bea-41f8-bd0f-cda20ea7667d\n2e8e91b6-6117-47b7-9802-bcca141e3cc1\nc6c07477-f0b4-4b7c-aadd-b453900f3e0e\naa5774ea-97f2-41e9-a336-baabe0a48817\nb0ad677e-8b1b-4257-b8a2-fa548f8451e7\n394c88af-14f5-4380-a109-55b223f96b94\n6b50beab-3b28-43d9-8848-d4a5e1debecd\ne45dda02-0a8c-44a5-a914-0f46a317ad5e\nd222a48f-097d-46b4-902c-9c70a07ab622\n9e714f71-c8b6-4af3-82dd-52a7759c1cb8\nf6eddf43-d912-4801-a5fb-4d46f01cdb00\nef28f80f-34f4-4fb6-8015-7107886f51c7\n37c430b3-100d-4179-9a08-29c212d26cbd\n60a9e82d-e172-49c0-9419-345800b26c32\n0aaec77e-ef52-481c-9e30-2ad1a4ffbe9e\n3c054bf9-1bd0-4316-9cb5-664f6ccb173a\n321b4fa4-8cff-473f-9311-e604726a8768\n3660bdbc-2008-4550-97f8-36e177a68519\n27f83f7c-03b2-42b4-a6ec-af8683232415\n6de0a74f-a976-49d4-8a13-074b90f51ee6\ne9e3ce4d-3c4c-4c84-9f02-2a66b43b670d\nf42d71fc-ca7e-443a-b28c-d2155ac1080f\nd26c41ae-4014-46ed-848d-88e75c36bdf7\ndc83376d-6485-4f0d-8840-751a24a99050\n0e96cbd5-07a6-4bbd-8615-670746b4d570\n186a3fbd-c463-4033-a357-b9dc9b6f5a9f\n162b6fa3-36ad-4278-8dc9-2028ce61bc34\n5b3ad103-0e89-4517-b181-32b2fd2db090\ne8909958-b4b4-4568-a8a9-01cb27609acc\nc897b57e-359d-4bf4-b36b-8d5a5c5f2325\n99ad71ca-fbd8-4bae-90dc-d0824f038085\n6885f72c-af5a-4724-816f-f63e4244e0a9\n87f61fed-bb7c-42fe-9ad3-1b5a039df9e8\nea27103e-80be-4a48-b832-22b4f53fb379\nb904369e-ee36-4397-8f29-4b1b687e7638\n76b5f77e-b168-4a0b-b3bf-707f747a7206\nc9c3e851-d663-41ca-abe9-46da1f1e47f3\ndc5baeb6-0ffa-4122-8bf5-2b00dafa5952\n077abb92-60dc-486c-8c6c-629027334317\n7db0b2dc-1cd3-484c-ad06-0729a73a61a1\n38f27390-379b-4d5f-8429-6b79bb66d647\n323d5bd0-8b06-4d82-a03d-b23673912079\n59901adc-ad33-49e0-abcb-fc170ee1a22e\nfbf8dd62-c71b-4146-9f76-4a434495911e\n10ce44e0-4cb6-460d-a852-94ae8a4230c8\n66385bc3-ce85-4c5b-8b3f-f41a95ffabfd\nc391658c-9ff4-4f9c-a5f8-4a181065734f\n72dae7e6-2697-418d-b5d2-1242186c1553\n82147810-8bcb-4ab1-9bbf-50acdd744fde\n05c842b4-07eb-4fd2-8c89-b3ed0efb97bd\n2058ea8a-b477-4ca0-96ab-fa893c7ae41d\nac32275c-8d32-4eab-a2c2-9f3f11ca5543\nbd8c788d-29b3-4026-b087-6cbb5837ae2a\n25a3005d-7a53-46eb-8697-05c9a3cbb222\n91eb7022-ccba-40c5-ab9c-fefbb6468909\ncb2439a5-9faa-46fe-b946-c21a7460cee6\nff8f5e9d-4c84-463f-9a28-bbb0329c488c\n107220c8-53dd-44b7-8a8d-a019070a8c4f\n0a8fc344-9260-49b0-92b1-2dc271e175ed\n68089302-d865-42d0-97c4-cd2a5c7f7c4e\nd69d6651-725f-4385-ba9a-7c3a938dba8e\nf905164f-a422-4e84-9d8f-34c379350258\nbaec3031-657a-4e49-b209-7952457797da\n52dec233-8c58-4120-9a14-de50bfa220f6\naf6faa34-1de3-44da-9b4b-1e9ed51217f1\n16a702e3-fea3-498a-a730-9b1fcd3eb2ce\nf9d59742-2580-458c-a38d-4c078c6440e5\n1b2b1667-29af-473e-a207-06dee81a8df7\n19ce24a5-7a8b-40f5-bc7c-980ea19e5c4c\n0c832b97-4e55-43cd-bd32-ecc0a3459e71\n1a3e43d3-b8c7-4972-8a6e-c2ee29867b96\n0e4cbe21-841a-4b46-872f-5a694b05e874\nf38812f7-5c3c-4af9-a39e-f35697b5770c\na7f1fc98-a90c-48ce-9767-71dd662ffe24\ne0f85d27-798b-4ed1-8696-371173ec81dd\nf8c6c7c6-0315-428c-a9c9-eab60be00d88\n615c3b89-2c92-4325-b49f-29ce6e21b2e6\n44eb3d17-6c89-41bf-aa57-db0b36c30e65\nff018d28-0d57-4f37-b387-2c1c914777b6\n2673fb61-06f0-4d56-80d0-fe55a044bd7a\na479e2f4-cebc-428d-bcbf-1b36e58f45de\nb084b9bb-a6e8-4431-b871-b15bf21240f8\n68bf9050-d04f-4155-9bfd-f3a1c30ab749\nee170f3b-b867-4a0b-9111-1c3bcbaa4ad6\n176a4567-cb12-40db-a56a-d6b9cc15a17b\n19d79477-b3b0-4331-ac3e-83c9dfaba385\n33e1e1f7-4dc5-47ab-af22-ab393fc9a476\nbae5b7ef-f9c5-476f-b4a2-4e406487afe9\nb9c203bd-dd01-405b-9be9-5c02bb4ee406\n407f9ae4-4f1a-4719-95c3-33208b945d3c\n67566095-e239-4610-a7ca-0c2d1d97340d\nff040cf2-5361-4641-b742-0465b757c019\nda4597c7-8777-4d8d-a532-e580d384c87f\nf54ecc15-5a8c-47ef-86be-db6c96c78d9e\n27c4775e-60f3-482a-8406-1ec6fce341d7\ne11017dc-24de-4896-a299-1837e58ca175\n7c576a4d-bae6-4cbd-a589-8283a581bfe2\n12865ffc-79ca-42ca-a6eb-2a0033311c0d\nb87121f3-4033-4207-ac8c-53119b76c1f0\n20a35253-f17c-447b-9b97-8add6ee64966\n268ae818-1561-4645-bc2f-bc341d90a076\n4a490480-a773-4096-9b46-3a58b66b6375\n6eabfc62-acc6-40fd-996d-b68ef3a47c85\na213c579-6918-47e6-8ed6-8188c01d9ead\nbfad9030-9a46-4742-8fbd-04965665e723\n58ce5518-7e0b-4c4b-ac1c-b11f523e09cc\nbea22263-8dc9-4ab2-9b1b-e322c1eb8f16\n5a638959-9e51-44d0-92aa-e7de367b5b9d\n167cce54-46ff-4ec5-92ea-a50fd0fc629f\n93a1d7c4-77a1-4274-bdbf-5ab33111fb94\nf61605a9-af4f-4f63-9a45-ea49b7ced69b\n8c56afd2-9cdb-4ecc-9832-bcf98114a5ee\n261c6d93-9e5a-45b5-944c-7af2bbc10fad\n0e2a923a-5c75-48d7-afc4-33e996854514\n7dc14b33-7417-426b-84fd-8fd30e0adbf2\n36a96b0f-fe7f-4c4f-931a-e54ed30aad60\n24fcb177-dd8f-440e-b2be-104a298a1e84\ne48a6988-8bc5-4a59-81d9-7f935a142fe3\n6f4f3880-d104-4236-bffd-03d2565dfeed\n8f7c733d-ee3b-495d-bd21-cb55281adff1\n97965659-0dac-460b-8120-2bc2e6a34af5\n5188a86b-26fa-42de-a318-483a02fe1a1c\n5a32f443-7963-470f-9d98-346326ff4e39\n893b87a0-73bc-4c8a-b700-9641778bf167\ncf070c09-1c3c-4b10-aeec-b964ecd1c045\nd145869d-ba7d-4259-9f49-520472acd308\nbe4e8b81-ed2a-4b29-ba51-ec13724da1d1\n9ee543f0-a7b9-4998-a333-dce808c1c2cf\nac5a0907-5d6c-45a6-8ca5-f9ea21482d09\n3a013946-6013-4bce-8dc1-be1be5525fee\n20bb3a48-d9f7-49c4-ae72-e421c99a1f0d\n9ea8553b-fd22-45f8-83b6-eab6ad959ceb\n38ca009c-f1fc-46b4-9b9c-035607bb1d51\n747b33e5-79fd-4eab-9f03-d42579054fab\n83685c9c-c419-4f6d-a879-47c509ea4f22\n17ba2b8a-e6d9-4848-aff3-f478eb90d7f0\n76f72249-3e63-4cdd-bddf-f2c4f3271cec\n655fce82-aaeb-405a-b7b9-8f458f6e45da\n74655f01-6575-402c-b6c1-4d651a37e263\n72a87d49-5b8e-49c1-a9d9-8364b9fb754c\nd441ce51-af49-4d1f-a32b-9735c0c8c673\n4b5d68a3-146d-4f6b-a4a1-ad29bdd6a1a1\naf53f714-0dad-44bc-8a8d-b7af9d42c4e9\n1ea8f5a1-54b3-4786-9915-15781f29b30d\nb6d2672f-225d-43e4-95fb-da5269c09330\neffc30b4-2f3d-4256-8dfa-457f7401a94c\n5ae07aba-22a0-49ae-ae0c-f2b6053c79ef\ned244513-e447-4e8a-8ba1-9fdba87bfab6\n53d3a07e-65f8-46e0-b2b6-f797f3ab5a4e\ne2f344a2-50a7-4557-981a-097104d80310\n5e493faf-e7ea-4607-b8c8-49a4d55a515d\nb74e25f7-f47b-4735-811d-49d468abfcb2\n1b45a692-067e-45bc-a6ae-e81648c34387\nb956bcfa-be98-4a81-8460-2bf721c627fa\n657f381f-7dff-491f-8ba6-91e3b5aaf3b7\na06f20f8-368a-40ab-8919-9fa998d51170\ncd4ded6d-857c-44b8-a364-0882cb3843bf\na2304779-3421-4d4c-9e56-e4522cd30e19\n5bd21059-3d7b-4d11-ab18-ffb3a3c6140d\n9a20c952-8234-472d-962a-58ff1605be42\n2f312d0c-b97d-4ae6-9987-fac5d15a9f70\n651f4ceb-9a91-422c-a06e-19980a95e88a\n0e736a71-7cca-4571-b559-d4b6d638310c\n42b92229-ec8b-47bd-86e1-8007ff4c46b1\nbbdb3727-2b2f-4cf1-be1a-1ea9617f8f37\n8e8921b0-d4c8-47bf-9e54-f2c84dbafc9c\neae640e4-01b5-4b04-ab23-e876071ff6d9\n9523f254-aeaf-47ba-b9c0-6215c9170135\na6c20b4a-45b1-4729-ad88-6da3e56735a2\n2bcc8d39-b58d-4df9-a22d-7534cdbe2f30\n97640e67-6ea0-4db0-9eee-9ece61db1644\n578c26d2-921b-4f79-b1d1-caa01a43dd76\n6bb6fe65-d5a0-408a-8b9e-1c20252a6bd2\n44c1d0dc-8cd2-4050-807d-6b1fb4aa729c\n15ed6a34-8f4f-42cd-b36d-ea2e590a12bb\n7c8b7bf3-ef21-4437-a215-1175c98e7d54\n5167ef14-e165-4fbd-afd6-2cfc351a68c7\n61fcf270-dd9c-4711-a44c-797aca7d887a\nd0385ac2-7387-442e-a401-99792ebb86af\ne92c5ae6-1b20-48b2-97c1-bb35c0998e86\n7784c1f5-3234-4d91-b1f8-f6038bd5c650\n72e1c141-acf8-43d4-8c63-a15ed85ab8e0\n4de6bfe0-5b96-446a-b826-bc10a8d05c59\n76004556-5416-4605-807b-7cbc69339863\n16bc119e-19be-46c1-91cd-d0d3b924966d\nb49003fe-1621-4212-a5c8-160e461f6641\n54cd31fa-9a6e-4022-9eb0-2a00848c6fe8\nbdf9bd43-c94e-495c-88cc-6483881cc2e8\n269f29bb-3fbf-4a5b-a9f5-d7b273bafd8f\n92dd9823-e83a-4066-b6e6-202b6ebe82c0\n79c4e2d7-0653-47e0-9e54-fa59b8024a04\n6d6ca5e3-2123-4f5a-9d91-f32cbb4f268b\n431327a0-b132-4b02-badd-de8511b70864\nb10c47bf-eb43-47a7-87c3-0ce5ad3bf909\nf703c2c8-9854-4340-b6ce-3bf078f1c755\nc97e2a07-07f7-447f-9ddb-fa6bddab5360\n65de9978-37cb-4c3f-bf3a-e7b55d58200a\ncb3f6b00-812a-4d78-b36b-4a3720812e03\n6204b0be-a00d-412f-8dba-dac84fcdf108\nadb1d77e-f664-4cac-a1ee-360761b72958\n9b4a70f6-28fb-406d-8615-881c7908d988\n35694570-f410-4e2d-bb68-256b986e1bd9\n009766fe-37a0-44cb-86e0-f60ee16a2de6\nc1f08a92-ea2d-4c0e-8aa8-1f637b3c799e\n7422e99f-8765-41e9-b000-77b44ec70fb3\n7ae7c1a3-1920-4ade-9534-4bf4981ab34d\nb1d05415-40ba-4355-8c4b-ad9a147e707a\n0e4e4216-b165-427e-8ddb-fcf4b3aa318a\nd90e8bb9-d1ac-46b1-b47c-f360e8fe97d3\n44a2457e-670b-45a0-b498-22d7f2b1366f\nd3c4200a-50fc-4b69-8256-f04986ace33f\n2dcaa98c-90ab-46af-ae4e-0ea921a8c96a\n28c0d376-897c-4da2-8bda-4068602cc7af\nd0864a1c-9d66-4156-81e4-8dc1a6c29d36\nb4a11d3b-8307-4661-a628-cc3372ff0f26\n4aa6f8b5-a26b-4146-8c18-d172b8c5fa2e\n6924976c-cedb-4ec5-a975-12ed7ed58e87\n8f1f9974-fa94-4ae3-a120-b4049eae51ed\n371d8652-bd97-4e0a-98f5-01b982a9591d\nc850b86f-8ce3-42b9-b265-86573ea650fc\naef305cd-ca99-4976-b53c-966a6422fec3\n2176ee58-3d09-4d65-a7b8-00b5b3e9d53c\n42ae5962-d0db-48b3-b914-a95b93464cdf\n93ef19a3-70f6-4cc1-a54a-3810b57de7c9\n02986051-b9e8-47f8-834b-5631ebd974f4\n2d29ab5a-b609-4628-8890-269329882f88\nbe16bc87-0ace-4aa1-aa25-f6a731feb01a\n3a89414e-fabf-4872-9b33-8b183a5a710a\n49d32bb6-b666-4160-96d4-b53c3803ab73\n9059657c-467a-49ce-b252-b7a94a56c047\n053b618b-cd13-4578-9ade-01f5c16ac2df\n64ec5caf-d9b2-46ef-bc81-cbf418fd7416\nda953e1a-63be-4949-9bdd-73cf85760399\n757f8172-054b-4dcb-8f8d-c746da2df22a\n54d397f7-277d-4141-9747-d5b523c901d2\n08b8beaa-aa1c-4c78-b9e7-08b8628e512f\n2478e2fb-b567-40b7-9585-eddcf31248fa\nf84d7aa3-13b2-41a4-82e5-f47b9447dd50\nfe60ec97-fb4d-478b-ad59-9857deaa91f3\nac53852b-0423-4a32-9524-bceab5ebaa3d\n9a9ae572-d94a-4d57-a29d-4eb2761f2baa\ndc1010f3-4d98-42e7-95c7-7eb267524e1e\nac18f86e-92ed-41ed-a390-23c489f7cb30\n355833f0-de08-4649-ab6a-81cd125e4064\n3a646e57-7957-4055-bf72-1f02422c4432\nd3969d85-ad21-4c66-86ab-a5a55b1f5ebe\n87b3f460-6dd3-4026-b082-a3de6332520f\n58d7f22a-4912-44ee-9692-135fa9ce9bfc\n5dd09603-1ff4-44be-b84e-7fe52887d32a\nfa29356e-6949-44a0-a71f-a7710ee5cfbc\nccb9f988-1ae3-4dd2-845b-3d7668c0f54d\n4ef7ba4b-cbd8-4136-8779-4801ecbe4a5e\n12c5fe6f-8aa2-4b05-9aab-aeaf4f9d6268\ne15bf7f4-2816-4096-92da-de9673b57da8\nbd93d7d0-98fa-423a-a2e2-869b4bb139d1\n13dfe598-6349-4abe-b2a0-14d8e231cf60\neabc1d36-deb3-444f-879e-0c87a148e950\n47525539-6838-4514-a3b0-7076667acef8\ncc6f2128-d39b-4e30-9f21-3f89d2a1d481\nad41f735-ebad-4a07-84d4-1c28990b1c0d\nd41aaa2c-3348-41e4-af77-d661500d4990\nfd4fc57e-7376-4c0a-968e-c30e5e98eea3\n442dc209-ff03-401b-80a4-2d8f0c85d03a\nf7ec2729-168a-469e-9ab3-dc2805e323eb\n948c7a4d-aecd-47e9-8063-0b144bd0b296\n72584092-d3c4-492b-945a-d23f134b4dcf\n244227c6-6414-4998-b83f-af665ee88fea\nca8dda06-26a4-4a0f-973f-6b6cd90b17a7\n407fb9d3-b373-4adf-b936-35b69d1cb633\nf541c49d-10b1-4f54-aebf-7d241b213471\nf40d787d-2c8e-490f-8abf-026903a78823\ndd62039c-7a41-44ed-a47a-691da4a06ae7\nddf93ba6-7d53-4033-8e8a-63c84cee7c6a\nab10ee41-7a47-4ea5-8f9f-121e5ab3a544\n92c8941a-ba2a-41b9-8535-07af2dc0745c\n68f8a1bb-3155-46df-aad0-f31bb8867aee\n8396668a-3927-4b3c-905c-5ea7728002d8\n51a2f03f-ca55-486e-9fc2-fef0e12ef375\nae1b6f53-559c-4911-acc5-d6fd7f69fdfc\ne5ec015b-0cf3-4f4d-9acc-deb82624b03f\nd696bb5d-d4af-437e-b7ee-5542cc2b1380\nc4d7f1dd-bf49-444a-bafb-56e0a8c8fd9f\n83e077d0-6106-45ce-acb9-c4a193f38a6d\nb0cb87e3-6ccb-47c7-b569-7649c8738b58\n18616d98-84ea-4bfd-9b76-e22aadbeb013\n50a89004-347c-40b5-91d0-28033480ceff\na8da2c29-56ef-4983-a83c-5e4bc2fce1f2\n904855a4-eea1-4de5-bc3f-4d8415228aa6\ne91ef10d-9aeb-4edf-9e3c-c0dec1a4875e\n04450fa3-9ef9-4350-a666-4bfd99f5cc9a\nbf49bcd4-4616-4dc3-861b-be27cdd907da\ncb888330-12da-4349-b1f1-4a39dea37341\na87f7066-b1cd-4857-a7cb-d4148c39e099\n6d46a18f-e722-4961-83fe-88731d36164a\nfca30d5c-53e8-494c-99c6-db22b33fbee4\n7852df9a-8590-4869-b452-de266b78e34d\n8cf5578f-80e4-45c8-8879-65db5b3c1d4b\ndfc6724b-0123-480a-a1d0-6f2b92f7e013\ne4b006f6-2cf9-4427-a6e4-ea1371edf836\nf4f450ba-24b7-4301-acb9-d92e3f0dda67\ndcfa092b-8e36-4efc-a5ea-ac0d5f0d704a\n4b1b4a90-2df8-4041-8e39-082fb4875936\n92ab1628-551c-4a12-9ae1-a9bd74b8ddcb\n9dd66533-291f-4db5-93c8-f77377ab3d3f\n05516f4f-1ce0-4cfb-84b4-22d5e2bb8e0c\nbdc390c6-1f3d-4a95-a563-4cdb57025ac6\nc9c568c8-e076-4f60-89f2-4237aa6c2872\nd6a52c4c-4aea-43f5-b866-772635ae42be\n86986a23-d466-44ae-9e13-8534e9cd3254\n13639f98-750a-420d-a325-319e067565b8\n4c6c4d10-229d-4ff2-b24b-5640f4eaed0f\neb58fc50-5859-44ea-89ca-97f7da139498\n73c57396-d7de-4916-8a3f-40c7f5c5cfb7\nad3e4f78-4d3e-485a-8cbd-6e43d5def904\n4e5782f7-56e2-43ac-b0e6-e9343049e7aa\n05659499-05ba-4c8d-83b3-e0e54f16808d\n9f05718b-bef8-474f-89a6-38896fddd512\nbf3062e0-a3ba-4791-9762-41bce173e814\n42cc1470-0da0-49ec-81be-dd4268bc2176\neded81e3-a4b5-4346-b3d5-6cd507a1d485\n809332fb-8ce3-4717-9f0a-e97cee11266f\nb53af4c3-52f2-4827-990b-8211bb42774a\n77c5dc48-3c15-4444-9bf8-0426a5f09afe\n184bd7fe-99f1-42a5-8c79-a2496504f855\n6c681f9a-0d6d-4cc7-8a10-d6da6c869131\n7cfb8249-085f-4919-a8f8-c2d4eba9447d\n68c0e534-058c-4395-8709-c1c3eb23554d\nab402778-1320-4ba5-a29f-a23c1ba60bf0\n4ea1a861-440f-4e95-9bb6-b900d3f4093d\n17b81cc4-690d-400a-8c4c-4de382c97b01\n8a465e25-1b2d-4ab4-80d7-e770ea9049bf\n39f7c245-38b2-4572-9d1e-5dc1f6fd69c7\ne7ecdfb9-5dba-4fee-9c44-a6619f05a6a0\n8ec82f56-7b0b-445a-97f3-3537b0c8aa0c\n9495792b-3a5a-41a7-9eac-17e7d32308f1\n4452c48e-05c7-46c7-90d5-209111030640\n234d853b-9d3b-43ee-96b9-b28f9617e7ad\n55bd29e4-526d-4c86-bc4b-c3ebb756cc7f\n1f3a04df-a681-4e30-b453-9d28f1501b1a\n3c1bfe3e-865f-418a-8634-cf065c3b4004\n82d7f87b-1db9-4cc6-a606-c93d77e73378\n4b2b09e6-5096-4b1d-aa5b-2d67776e71bc\n284a4d80-5d33-43c1-8204-90ba88243854\nf732ebd8-6e90-442a-bc50-2a54037ea777\n9f15a0d8-9f5a-4052-8933-8db35631cf2e\n2795e0d0-864b-4e32-86d8-49153690a735\nca4ba97b-9233-4500-9a2c-9206a4de1340\n57c9fa1b-e380-42d7-b0c1-978350d1ab08\n88587660-f81d-4311-8cef-f3badce636f6\ne7cf9bcb-cbf5-43b6-86bd-67bf74b2cb20\n5cef17b7-d04a-4e21-9024-3adfb0d19523\n609333ea-3679-4d1c-88ae-92d5aa1d849e\n54d2213b-369c-4af2-a009-b61be0ef2eea\nd9dc754f-ba70-49e1-8443-ef6b44d3652e\n1c1210f1-cd7c-4e69-9611-b0763c1e3157\n1ff0e412-207a-4785-8077-9a2475ef6978\n206ce3d7-05b8-4859-bc6f-81331733f13b\n9ad94499-956d-4ed6-9d5d-1581e6a47fa0\nfb149eb4-46b2-4412-81b1-d091b0f86a31\nd0417651-4f69-4b41-bf60-363ec176477b\n76f0ca5d-f680-4dc3-824d-04f84d686355\n1ac1f12a-75a2-4014-9e9a-472845014e02\ncc68edbc-8951-41ce-856e-46a5c8c68887\n2ee3a7d1-34b5-44ec-a01b-9a6ed31969c0\nf74b3032-67e9-4b0a-b8ed-96a2877426e0\nbdca9c2e-dce5-46fd-8d7f-245b4865782b\n4d043f3d-72c0-4195-9ea8-6189114655bf\n5065f20f-0893-44d2-a4ff-1c24d3a44f32\n2be93fee-0dc5-4631-88f5-797c2205f2ab\nd949f9eb-1559-4c10-bfcb-00f31b96f0c2\n12e58a97-180e-4258-a637-131114217a21\n3c55fd40-3adf-4ec9-ace5-e2690ffc8ca2\naf52675e-b77d-4701-8cc3-446c36b5cf38\ne6ac9364-c539-4704-8024-90fcb8ff69aa\nf6f3b4db-d03a-4cd2-82ff-4d10b1ffb293\nd3021fd4-7804-409c-8118-fd8e0631d172\n8353f6cb-6c84-493b-86d1-7acdbd36f0ad\n5c334aef-f0d8-48de-a777-94535711f3f7\n87372f81-4b70-42cd-9522-013bd8a23739\ndd18d87d-5923-461f-8c63-b88b587f97a1\n249d6be1-56c2-4af8-bdb7-3935c49edcbe\ne2ad16ea-f3f9-466d-9e9d-62ce58d6f7f8\nb5446da0-3d37-4268-889c-2fe0f3b72f43\nbad7e1e0-51bf-4afe-8165-5148b1beca39\neff281b6-6ed6-4a33-8907-86efbc49fd3d\n16147aae-509b-4be8-80c6-3cda968fb263\ne2fbb51c-9999-4ce7-a9b7-46a005b57ea9\n33d572f8-3224-40d5-b151-5630f0f89e2a\n9d4b688f-460b-4f8a-a61c-9ad75ea9de88\n037a554b-cb09-4f7f-a503-5b8d2e5493bf\n8440200c-fbc9-4b04-84e6-aa91bc3b9ff9\nbe4ba0f4-8eaf-4417-aef6-7b57c5184396\n2caa2de1-fa68-4739-96bd-efe51b8cdb6b\nd32acaab-1ac1-4fc2-9c0e-648c2ffb18cd\n55d28419-6008-43d7-87bd-86e457f41e3b\n86b30919-6fc5-4dc5-9c01-4b4820a9c565\nc95c3299-b878-4428-8f53-0eeafd327664\n185df8c8-0982-4d51-a534-c77e35d5e25b\n5738fe72-07d8-4336-a6e5-a1e2389d7391\n653f7acc-953e-41b7-9a56-6691cdc0a912\n2128c028-1ff7-425f-8cd8-0b1e6e63536b\nfbd3891a-d6db-42f8-9015-77877462229c\neb145974-cf83-4532-a833-1a4db645797d\naf534e96-d620-40e2-9a21-635f0a11108d\n36dc21ca-5af5-4781-aaac-e7e2d35b7f5a\nea5a8aad-7266-43a4-a085-323e6fd8acff\n9d62ce6d-ae5c-4b3c-a6aa-3093b165f79e\n2c87dab2-6519-4506-a4fb-06dc3d468e29\n94d28770-fb30-4ad1-9a7e-7dc6be76a1bf\n356c25f2-ea1d-4325-a3b1-9e1c790ba211\nbe625184-6d42-4298-a30e-b02f4b791f42\n1eda765b-2d8e-4387-b678-cf78386d5a31\n28f1d685-33d0-485f-8792-6a941fec2e4c\nb634bb1e-8315-4f21-8d0d-80ad9f635ca4\n4b8d76e9-9e1b-49a7-b0fa-6857a4001c3f\n5d015019-0d15-49cd-ac9e-e7b0215b8175\n326d6a61-70a9-466f-8848-42b5da04b330\n93f3823f-2d54-482e-833d-2eefb007e96e\n917f3697-fe9a-4817-a7f1-633be8ee53d9\nfb467a71-1ae6-4fec-8682-0e6c67ffb815\n3fa76789-2665-47c7-9c03-28be885ff66f\nfaf18b5a-c335-40e6-848b-cc06d6d58f43\n39ff262e-8d81-4026-a15d-02a5c069cd14\nf0d791f2-6dd6-471a-93b2-1cefaeb05336\nf3385b78-25a0-4baf-a4bd-11b8a00a4c3d\n5ff70233-701b-4077-b272-3fed34c06b75\n1174ad4c-0e57-4ec8-b3a1-b6db3b0c0b9a\n78fe78f4-e231-4768-ac70-e9d1d662316c\nf8c62877-b890-4961-8454-62d942ae6231\ne61abe09-b08f-48b3-aebd-ec94e9870023\nb827b772-c286-4ef1-8897-7816ef8a9c60\n17993e29-5169-4ef9-a720-8f1540eb8206\nb5c64a27-17ac-49a2-bc07-4f249412b5a2\n29a8c019-04e4-4c15-bf67-48b6a573f980\n2715403a-7216-4795-b76f-6583aebdacee\nb653d5cb-9475-444d-accc-ab86f9694a77\n404cca5e-6389-4c8d-9e09-1a1789126ede\n7ab286f2-d199-435f-b88f-3a006a6fb2ce\n4ff556cf-5203-4c93-acc7-debdb915cc6f\n95fb2298-cde2-4531-a32d-cb4dacf6a042\nbc5ad8d0-71bb-4f67-a8f0-6efde566c59e\neef4403f-5745-44ab-b473-ae2a0dba59ad\n1d70bbe9-b4c6-4ae8-bef0-e3fb56d5ad85\n3d44b314-6a5f-46be-9548-49be4c7537b6\n00fdc856-1e48-41c7-acf4-c321d68738c4\nc61e15dc-9f19-4374-8586-6462fbb95398\neea198db-64e9-4469-9342-ef52e5e960ee\n1c9d687b-41a4-42bb-a200-0fb2dee68c89\ne6f45d4f-f0e0-4e9d-ac65-af1b0dfb3dd0\n31eb00da-1013-4a99-8853-cb66651df794\n7f1d9dc0-09ec-43f7-93e9-f81f9c9128e3\n6103c4bc-52cc-4d74-9ca4-58fbfb2663bf\n0711e27d-424e-4f83-9fe5-d994abee3bf2\n05fc1bda-28c4-4e91-8d08-1a3b97f3b6f0\ncbddf7ae-ade9-4316-8234-14ef4deb5119\n0d277a21-d9bd-45c3-9e26-11fb7ba06eec\ndf414dcb-a849-4c48-b71b-b22f2900a2b1\n3d76499b-2dd0-47dc-b84e-c72d6e2098ff\n743b9017-e931-433a-9808-2400af22473d\n56084a27-db15-45b8-bf55-48533fe0a74a\n1b854f3d-2e97-446f-9b08-5ffd1d69ab06\n3fb2def5-58c7-45f9-b198-c212e33b1d65\nd21fccc5-d5e5-4576-8e5a-9d59ad7c79a9\nb414c287-640f-412e-99c1-2df8b3f43456\n01cf62ca-57c8-496e-ad8c-258fa8aa8a4c\n7134c27a-e5ce-477c-97bb-a36d5d49dcd7\n63646c7b-6378-4a3a-b3bb-327b78a6cceb\n1318430f-bb68-4d6a-9a6c-bc9c4ba0e919\n6adb67fb-2fb9-4f86-9b33-962c03e47cef\n5b850dd2-709c-4e14-88de-c988b28f3d4b\n15ff94a9-27b3-4c1b-ac72-4017067e9c67\n740c2ba4-40da-4acb-8e5e-4f6d19336870\nd639c51c-2c2b-4cbf-b7ec-1f1dce47263b\n623da959-ceaa-4fcd-b0b2-31002b107c63\n8164006d-a5ef-4f61-9621-3eb693a0d0d2\n9b139ebd-797f-4c5a-8bf2-c502eea25fdc\n8ab2ad86-8938-46fd-bafc-6746d557172f\nda495de3-5f44-4fa2-8aac-8c2fac2362de\n0a70fed1-30ff-4c39-9578-05b05e50a331\n955128e6-dc11-4d21-8aea-fc42de7c74d7\n5fac27c8-8f63-478e-8ec1-5d331b561739\n9ad42f97-4f66-49ec-9c9c-e14cb292d111\n83a61e6e-0ee3-419b-b6e9-ceffcfb17e8b\nfde85b7f-76c8-4d3b-92c9-023fc7115dcc\n1a07d9cc-a5c7-4e0d-a632-6f05f6e061e0\n91db8866-a397-4dc2-959f-8f46b6ac9fd2\n663eb404-5f82-4ecf-971e-aac1e8c4b4a1\n837ec7d1-7a86-4f25-a924-9088424caeb6\n840def6a-1c5b-4721-8e78-19e05bb31370\n11ff1e5b-0738-403d-afd7-b7b6467cb0ab\nfed30e17-67aa-4e2b-b70b-260d219f4cc4\n5429cffe-5fcf-46b0-810b-9717f96957ca\nca45a3ac-3859-498f-823f-33a8686b64da\nf38bac7d-679b-4c48-a078-f3c5b413c662\n5d6a6cb4-fc44-4ef2-842c-4a131646c616\n2c3549fa-2d84-4c4b-b5ee-24d07c627f35\n15cee986-0882-40f1-af86-21b5428d8890\n3d92ea3c-4bf7-4bef-8283-8afa85a70c83\nf7818075-916e-454e-beea-67c9e9538823\nd41c1784-6aeb-47d4-8e38-d2f26e9c38f4\n67bfbfc7-b5dc-470a-b15d-48f750502ab2\nbc585e30-c477-4fe3-ab21-9e0747494841\n36d11fd7-5ece-4184-b622-87a77247ca88\nba3fc4b0-a97b-42ab-a7a2-36d06620109a\n5b5616d5-f202-4c06-92ca-542aad6d3ed2\nb56e7aa9-44e6-4dae-befc-96888d071a5a\nbe5fcbdf-a0df-408a-86ff-5c245498b36a\n03251fca-8d06-445a-a9d6-66fc2052f3a8\n6390a70d-5f7e-426e-b0b9-92e55d684075\n2b6fb5f3-7319-49f9-a442-af7dbff8570b\nd7d9eaf7-7ecf-437e-b92d-38598fb429b1\nf57d65d7-34e8-4705-9f21-d68cd7b0709d\n88d68571-e566-4cbe-9965-c9a009b99732\n1890b105-9fb3-4fec-a1f4-bc0e125a88bb\nf49aab8f-49a8-4ac8-8aeb-c3be58025c73\nbcb12bae-d976-455c-9117-8e21a6a70d8a\n09a86697-01bd-40e6-9613-16378ecfbcff\necda0d95-9b29-41ef-8e3c-d3a9982e093b\ncca5242b-fe38-4e57-9c46-f5e569abab1d\nb057ee52-83da-4cba-b3e6-d612f0daa326\n7c8a87a0-befb-4271-be5c-a089fbd625ea\n83ee68a1-e512-476c-b170-8fb009441fea\nef23c53d-af1a-4639-a4e1-a70d9616189f\n336480b8-91a4-458d-8631-1db3029f840f\nf0969ec0-fddf-46aa-80cb-44ec0eb3dec2\n0c4717c5-a749-4ad5-9aa7-209758b87c55\n84563eac-c8ef-4b30-9d03-69dde5b2fdf1\n52051fae-6910-470d-8b35-7a5e317bde3f\n665c428f-255d-4215-927c-1ee599d65ffb\ndf948362-b9e4-4881-ace2-30a8171148c9\n058e54fa-6525-4492-ba49-6dfad1aead24\nb4f12f31-b326-4e46-b25a-725ff9429e31\nb3e116ee-2412-4f9a-b63b-a31d77297d62\n6ff02ddb-bf73-43c0-9a47-800b78bf2592\n48cf6417-f6c2-4255-89ae-66727791dcbd\ne55e9a29-8a36-44fc-80fe-d602f268a5f0\n0440b308-b223-4231-ba53-5b809916bcd8\ndd5cb702-aa9f-473d-b0f8-314c86c6121d\n2e70da28-a093-4fce-980f-9f01da30ed22\n5a090db4-5210-4325-9e5f-8b51db966df3\n174089b0-2a3d-4c31-95a1-ac37544dd72a\nf006f8ff-c588-4ee4-abbd-7fdb456a6c4a\n3a80560b-a226-459c-9597-48d76d7af3a1\n9851ff99-3251-44d5-a266-fc57c53a0f0e\ndb5a42e6-f9ae-436a-a220-75d6274acbf2\n21dc4042-ae8d-49ee-8177-d4b57ec03417\n2483f94d-432d-40c8-bcae-b138c5c8420e\n681d000d-7e23-4af7-9025-aec45813aed5\ne352fb32-591a-42b4-9b3b-5bb0b0a71cf2\nc983b7ca-3bad-4c74-a613-e7a82324794a\n0df3237f-9dd2-46e2-8f48-551db1801f6b\nfb22e86d-9553-4f39-abb3-bd7debff73a6\n210912c4-0d11-4e92-86b3-4d03202ae208\n1b6770fe-ea2e-4216-9f22-112d7cc2d0c2\n59a70b50-6403-46f0-b4ec-a15c0fa94032\nac783e55-bdc5-4b36-9437-121e04503148\n750c2110-d876-4b61-a1a7-6f9779917612\ne99ae58b-72af-4fa0-9a7c-e47467ac0fba\n8b846f64-899c-4955-90a9-05039552f196\nfecdd4f0-a1d3-4573-a6ff-9192b716dba9\n40bb8790-567c-4ba4-b12f-d85993046a13\nd4412d2d-937a-4319-bc87-f9a31f26cadd\n1463bef1-125e-454a-a3a5-c028fd345cba\n3c1cff64-c399-40ab-81fe-571d502d8879\ne25b2ac3-32e3-4ede-b985-460139ead9c0\nedca7cdb-bf71-4a54-b296-44b688bb4e4b\n311d3ae1-9666-47f7-bacc-c4976c938828\n2a291dab-2c9d-4da6-9956-355abce14ab3\na9d96ab6-4f6f-4b15-b997-880476190e98\n7313ae9e-f41d-4199-b383-6cbf88b8b5d2\n89dddfdc-5f44-435d-970c-4202ae906a7f\nb7a03a31-9fdf-4049-ae88-f0547c4c504e\n9e601efb-6699-4af9-94f9-60b2a16402df\n39dbdd23-8000-4e4c-bd14-df02e6dce30d\n19c4d414-0aef-4be5-a85a-87ba1b8f9442\ne30e6fed-1fe4-4650-aa4d-328e4d9927c6\n7b8caafe-56e6-46ee-95e3-8fc527edf510\ne9c5455d-ad30-41be-9b73-bf5012894fe7\n57871a67-7358-4921-bc09-9bdcf80c4177\nc447a965-3c89-4f65-a087-de4b8aed9a54\n39315017-9bf0-4f1f-b402-d6f5f1ce649a\nba5f1a93-9ee9-4903-94fb-4c3e66107df6\n9db0862f-397b-461c-81e8-7ac3a15af911\ne5960c6d-4334-4b31-b287-f221be412636\n644cba28-1f4d-4854-a9bf-4a66d0289976\ne2e9fc44-5650-4aa6-b0c0-de60752b786c\n6900b717-a7f9-4e9a-9296-143bfc341617\n0a01eb25-c681-4b79-b036-3a52e5ad6f2e\n5d4ca00c-69c6-497a-bbf4-1baec39be69f\n18d2cf8e-4c5e-402c-b3f0-a7688b7099c4\n0564ebd0-2dc0-4dc4-96c6-2d5878626133\n2e313359-d866-4276-8fb8-6498ce2525a6\ne2bfb9b5-6a60-4ef0-9330-7846c4a51241\n608af779-df96-4b4f-9e16-08f90d08f079\ne8294d25-36ff-40d1-ab49-7f6471d25401\n0a1280aa-3d85-4ebb-835c-37ce539ac7c7\nedbc737d-1585-4d25-80fa-18510dd501f7\nc4cb2924-e8f8-4240-aab3-ff941db514d1\nc588907a-9f57-4b64-97a7-4cd5aaec3cbc\na2ad1204-00a4-4eed-9827-16d40e796a7e\n76933e05-8bb9-42bd-a6a1-e7f21da6cf2b\n93363dab-e2ad-41b2-8e38-4ee6fe3dffd5\nf77b80ad-47e7-4c4d-a944-19e5922354ba\n3d9f3d0c-0e25-45c4-8f23-adeb3f7114b3\n2bbb2a15-04e3-47bb-97cc-f04b814dfd74\n92ae15f3-0bde-4ecf-9cd9-bc182f27950d\nfdb4da98-abde-44bd-8aca-c13a168acc22\n024cebd6-c507-406e-b455-a24b8def99a7\na7e560c3-f7ba-41c2-97b8-5d8d4973cecf\n35ef6cf7-92b3-4be5-a92b-4cf3bfdf1852\n9c085390-df7a-47f7-9073-b2382cd68e57\n3cf33e32-415a-4c02-8806-f1ffcc1db6cf\n89bccda8-7bc4-4861-a92d-ba883ffbbde5\n9cca1948-540f-4722-892d-d85fddc85193\n3808b95e-9352-4f87-b03d-39bf014fbf48\n64ce9070-eda9-4bcd-85a3-27969d0cf2fb\n3b20600e-d3c5-424a-9b95-bcb90227b550\n884705e7-f6fd-42fb-94c0-5ff9d93ec343\n1524ae60-0180-447a-9611-8c0b6f05dbd3\n5e245276-4cff-499c-978e-8572c58338b6\n072a1b9f-f04d-4ad6-9c69-f9c9e396a2ed\n5fd7c692-80d8-41be-b3a7-dd55e6472315\n348bfb56-8d88-4041-80ce-6c07f635a758\n6aef10b5-f639-4eea-96b7-11c8e0db1ab8\n196c88c4-c903-447d-9e11-b4449575ae84\n655514ff-3c6b-4b54-bdc9-3178932f73e7\n3615dca7-52dc-48e1-b8e0-e2755f422d35\n07af2edd-a736-4799-8e9a-c52aa863f7f1\ne7d2bd90-ff2f-4161-a73a-ffb0bd5056e7\ne2c12360-c2e0-4f81-9fef-3ce425fec613\n12482217-94f0-4100-a8db-ee71be7e3a74\n0f3469d3-7642-4681-b68f-fe572777d9d3\n9a528f47-6945-49bb-9e8f-f8b7eae838f6\n2005f904-6d96-48cb-8e01-ba1bc0b5f426\n5674a8d0-3b97-45fe-93c2-e99c58493621\n72d780fc-c056-40e9-93a4-9c3ce0527886\n8844abd5-ffe9-48c4-b358-58e9e6cd7f84\n1cb23aee-1aba-4c9e-b78a-fcb6b103ac3f\n094324f8-7ccb-48d6-930f-e78f7b8b984d\n0100a34f-a73b-4db4-9720-2c18dcbbee9f\nfc1c9524-09cb-4092-91ea-bd37359f7f54\n5cad5ac2-0a34-4aac-bc24-8c4c7c75c458\n5237950b-fc52-445e-a553-d37f0611ff26\n163bca46-8d78-4e11-bbbd-bc8952a84c03\nfaf6be39-bf84-46f1-9747-4264b555e12f\ncda7add0-de0a-4c65-b0ba-7f7fffbaf19c\n13087716-5f1f-4b92-9534-89e9231deb61\n0c3fcf36-60f2-4a7a-8727-2944b0fe58a3\nd30b360a-8a84-4eb7-8ba2-5a3b84924c3d\nd3dc8396-2911-4041-875f-bc6e72a8e53b\n8c5c2309-8a6d-4acb-bba6-0f649fa3ae00\n280aadc5-2175-4e3c-bfd6-7749d6501e70\n494eba23-8bc2-4237-a1d7-5111912b91e3\nd97e57e3-eccb-4590-8c15-2ba5f89b1ac1\n58dbdbb5-b132-43cb-8da7-37b5de56a355\n6765f70c-f754-41b1-90f0-afbc64ced941\n4f3d2317-f688-4166-b56d-cc9c03f03ce0\n9b7e4725-ee4f-4e46-801a-ba84a08c80ed\n3a0977c9-1bc6-4773-86ab-a6b45822df8a\n23ae18d6-3a35-43cc-a791-366843427373\n79749867-5a1b-48ff-9ac5-c56db493f2ba\na7cda22e-a5c3-4610-914e-cab874b063fe\n126cdb24-b39d-4a49-a291-02c2fbc391c6\n669681a3-3134-4590-b538-129746f2d5e9\ncabb28c2-4dbe-4265-be4d-593f142a76fd\nb7faff27-b44b-4a95-99b9-64a31f29a45f\n6b8e8ca4-77f5-47a6-ba83-93d4f28f5317\ncf2107a1-a7ed-4198-a2fc-1998bcff2121\n179511d9-c9dd-4e66-a234-c1ee9963e066\n0eba1d95-3b3f-4b2e-b9a7-90256df3f109\n2d0d3bfe-9b9e-4be5-97ce-d2963c733057\n3f04e455-a56c-4774-bb79-550eb1d0d7ce\n20837cad-ff35-4e15-bb11-e5160fae6747\nadeec6a7-b61b-4a33-b9ec-dfa664b9e841\n28e4cfa9-adc7-41a7-81b7-a6662a74684c\n7a1f0e82-8162-496a-adbb-edde72762bc4\n6ab24a5d-617f-4e14-89c1-1cf406bcd95d\nc3564a04-22ba-49ea-86a5-ba1ed77edee5\nc7416c6e-ae37-4c0e-81e8-7b7ce08704c4\n5fb0a53d-4ba8-43ff-9b36-e4e4b6a1b151\n16629648-826d-4976-8f74-3810adeac0ae\n73a778c7-ed78-4e4f-a674-28f05244c724\n2740e7ff-4427-43ab-a655-c6aeb1cbd553\na9f60b53-8891-4590-9902-c33ae9966e20\na356aad7-27c1-4511-aeb5-d3d83a9de8a7\nf9d8d94f-16e7-470a-b199-601322930aba\nf0242dfe-62a3-4486-bfb4-e849248fe090\n95257253-9ab5-4a6a-84e3-f9c3d7d6ae6a\ndcb8f2cb-2c5f-4429-875c-aaa4f1143e82\n3cbba850-dd4b-41b0-b8cd-2ad7a3f07d93\nae817d98-22d9-4892-8733-2e2e0aec9999\ne42a8b7c-d1e9-4d20-9aad-4728deb5e05c\n6b511d01-d79e-425a-b94e-202366499c28\nc97071ac-6609-4b0b-b5d6-fcbf3db0cac8\n8c677566-8b4e-4ea1-ba8a-db0845da2961\nb910ec71-940f-4a4a-bb10-e42be4f9e5a9\n0d86d587-9d91-4ea1-961f-51f1f53b72b5\n27ca51b0-ee34-45b9-a2a7-deedb8ff0610\n09ed578a-4e43-4fa6-b0c4-6349542016a7\nd88c3dd8-198c-4031-92c4-542d62efc840\ndd74be33-6521-4022-830d-ac3db886053a\ne7ab13c6-300a-4a59-be1a-e68d7769cdbf\na907b32b-fffa-4a7e-a04f-988f3a9db3d9\nc2e66005-a45d-4498-b4d1-e012a0143e26\nde038c01-e83a-4abd-830f-19499cf4815e\ne3f29bc5-bfa3-41aa-a752-d08075dcf46d\n5c27e585-d75a-4cec-b3e4-85d74ff90b9a\n8510cbf0-081f-4b71-83f0-bd63247377b7\n2ca3e413-0ba4-47b1-b7a1-d22464fcb5bf\n5c2095ae-a212-4697-b50f-de5d083af9f1\nafe7b9f7-f837-4821-b913-8e2b64d5f14c\nd2c79354-4070-405b-a88d-b7b1ce20383a\n08235a4c-318d-40f9-af2e-d8c575abaa61\n5d5874d5-3668-4630-a2bf-c84926db52e0\n9f87e541-9303-4748-b033-11d1d4146353\n14d570bf-7bdd-483d-b856-210b8230b55d\n129a106d-7286-43d3-9a79-cab3b1a6449e\n1e5a4d60-e6a4-4012-9b51-b5aef77dfde1\nb28c46d2-d360-487d-b7f9-e62a2fb82fd2\n7657df42-1476-42bd-a42e-16a662b3ae2a\n1848f67b-ac34-4142-92d6-c1e820e88669\n215b7a8c-318f-4c6a-8842-eef2fee1e6ba\n41c12217-ad1c-4d69-a405-ca04ae87899a\n7786a616-d1b6-4651-846e-00324f1cff36\nc975e1c6-67f2-4d51-8328-8f8d26b8e26f\n27976489-a601-451c-92b7-cb44553b7d43\n582e5dbc-2474-4622-ab25-519bb9d21389\nd569197a-6730-4048-8378-050a4752750f\n26afe4b1-abb4-4efa-bf9f-bb54a386ddbb\nffcf7cdf-7f64-48b2-8dd4-1fa1473165c9\n2f9934d5-b146-4eb4-9c08-dcc7af767a83\ne28f2842-ab48-405a-b87f-6b8b37188131\n43525654-e76c-418d-a6ae-73f66441d9de\nabecbf18-5e0c-491e-b362-4496b1d9cbe5\ne73a22aa-25ad-4d22-afab-f85746fa36f4\nd59badcf-d243-48cd-a4cd-7b1cde047bf2\n5b93c6dc-59a7-4049-8b26-5d98632daf93\na4c3324c-768c-4335-a339-428eff158328\n9924837d-1365-4ed2-8568-c0b2f0d92aa7\n79f3ffea-1618-409b-b2be-43fe5cfb9520\ncd2f1115-38ff-49db-9125-3bd680ce432a\n4cb16790-dd54-4149-b495-21fb7f702067\n8a584ce1-14c7-4f79-a48d-e3e8bf9adbd8\n458d587b-1b94-4459-9530-6ee7dec4f6cb\n37b50e82-4c31-4a5f-a074-f375ae158845\nfa83044c-7030-4e8e-b2f1-cc58125a8cfc\n7639b83e-fbaa-4d2e-a0b8-f22199000995\n040a6c3d-3d6f-4346-a258-c1a8f3241032\n9cdea9f9-e310-4789-becc-0699922195fc\n84b70b5a-c2c9-449f-bf13-7860dfafd91f\n15a9d021-a3ed-4a91-a67a-6362bac32f66\n41ebef44-9319-48ea-a29a-a2d9abbf2bb6\n598cf919-ccb1-4766-8fee-4f4c4d38e271\nfbf48506-29af-4b71-90f5-3f062261e0f5\n97e51215-c30d-4963-bb87-bd7a72a49c63\n46b44898-4ecc-47d0-a76b-532e4bb20b94\n5d521f00-bc2b-4f96-b629-e76b68514a5a\n8566a647-4248-4c74-aa36-c81db27681c5\nc3ad71e7-b628-48fb-9bf7-f718c561b6aa\nda2be55c-feca-425e-912c-69a574b95071\na65fc7c6-5f87-46d0-8517-efe25291b11e\ne5064bcd-7d50-4b45-86bf-37cb3f777c36\n86174da3-a4c6-4395-8360-45fac36f0f16\n7b5964aa-e92f-44aa-9f50-06422f31a609\n693c6bf8-9edd-48e4-8930-86932b189222\n794763e1-96e6-4280-9375-ae9683bd1c17\n247cc1dc-cc22-4801-a5d3-42992e7add3a\n6a0c2cd1-e2e0-4b69-9013-1bc6c7fe630b\ne89e13dd-94b5-4b86-b8fb-bbea957eca8a\n81fb3c88-407a-446a-b286-b50dbaadce50\nddffa2f8-2ea0-443d-bf05-84aa21a79ae6\n1c068a5f-24d3-4c03-a950-294f762f5994\n46b81335-934f-41c5-ae2b-dd384f80282c\nc75a7f78-f633-4db3-a3ee-63465f478998\n3d6fd8fe-1def-4673-8de9-8e32308ed592\n7b81b8b2-cbf8-4105-8d7a-6bc2bd328cf7\ne02b9ecd-f0c9-49d4-b403-2e1dd6bbce7f\n41f874b0-59f8-4114-8d31-e67e6813aa33\n651eced4-e973-4685-a711-a5276e7abbdd\n51955e83-0179-4cd6-986d-5b732c026904\n5e86e6ba-b6c7-4b11-810e-8fbd45531a8f\nbaf2ce9b-e944-43bc-8a46-ed479400dc4b\n96548097-ae96-4335-b8d4-061d62e56efd\na9f336b0-2c7d-4283-aee5-cca6eee644df\nf9e54186-ed7a-41aa-87a7-7fead124f2a7\nd0907bcc-ba0d-4227-a0e1-180eb04b198e\nf22ab5b3-0cf8-4c45-8fba-3597ceb75d91\n1219a04c-ec59-4a4d-89c6-36b56504ef7b\ne36c9d7b-6951-4bcf-b57a-a085b777be2d\n0f151613-d1ca-4ef1-acce-ddd4f1c39bc9\n95040526-afcd-4b7b-98e6-ef6c1f7c29b1\n3a18ccaf-c1c3-4ac6-b806-ca0b94314d56\n1a3520e7-d555-45cc-b405-e57ee3d209bb\n9011bed4-7c49-4ec2-ba1c-ffebd47b3dab\n43716204-35bc-451c-ae73-b10b9e399bd2\n0b4d894b-bbd2-4244-b9a9-9280924e6be3\nf936092b-b215-4f0b-bdcb-9f5032265476\n88c3a141-7243-475e-a9b2-fa425a513989\n8cc2137b-48aa-4150-b485-4713c3d7a123\nef18de66-c624-4a87-adab-c4fd6caa66f5\ndf0f475f-c48c-44e2-8a82-205abdc48e03\n0886e5eb-39ef-4b70-9133-c164c1b19e78\n4dbafcc4-a056-4526-85da-65e6b4070628\n11abcfb4-45c2-4bc7-9fe2-b6c3a74165d1\n1e3d5fd9-741c-4aa2-9398-aa830feecd44\ncda39d55-faae-4cf9-ac33-45a3358c2942\n2690ccfe-9e0f-4258-a9ae-88c215f3e982\ncfc0664a-3fff-449a-8e72-cd6b2569ab58\n66a7ba1f-9f2a-4e6d-82e8-f95112b9cbf6\n1af6017f-cd6e-4c37-9860-750e063d3fcb\n92c96bd2-8e18-4cf7-b7a2-6790f2970287\na8bb8328-40db-4a4e-a313-8fc07ce3cd52\n94b4fb7d-a4d9-4c2a-91ff-d3151b45180b\na3276622-4b68-43fa-9d96-256f71628739\ncb10e5b0-94e8-431d-a099-47a620384cc4\n1ce0cd94-0115-476a-97c0-43ca7638fbcb\nf0ec0443-2abe-4144-a032-231297ce84b7\nfc21bfc3-1cc7-4a00-87d0-8fca3514350a\n1f44c42f-03da-4d00-abdb-c5950133feec\n3f03c96e-8d6c-44c8-ae30-d15e47b49b44\n75fefe0f-3c22-4422-8eaa-9e8532f36c84\na3e4b81d-a7a2-4c33-a2d3-f3ccdfe75eb6\nf4ec94e4-0f78-4a7c-bc75-0fa992a9e668\n7e5b091b-656d-42af-8e51-103583557abf\nab29f821-aaa7-4cf0-82ed-e2cc35842449\ncc133e60-d3fb-46ab-8da1-55e694b5efb1\n6a1c9790-7c4e-4ee1-8337-f0b2ddb31251\n7c9bb6b2-1fec-4290-9fbc-26c44e888660\n13ac120b-ad1b-4c80-8267-07026fa17cbf\n17a49bcf-b42d-4367-9375-9757416cc5ba\ne116dbd9-1dca-43a1-8721-98659f653c9e\nc8c3634a-684d-4c8d-9f48-67894b6d5d07\n8aabdf76-77fc-42f4-9c8f-5f4e5cb567f1\n3430b420-177f-4d75-b2c2-033b8893cd5b\n9bc35026-13c1-42f0-899e-dd80b41a407a\n6a4c66d1-f5d9-4cc9-bba1-fc63bc2ad7a4\nac36c25b-5b64-4824-ab1d-cd349aeca381\n215b463c-4d8b-4dd6-aaba-b1a78aa0486d\nb51b93c2-2445-44f3-b350-38d84b4e3925\n055a0349-a0a9-4e40-9a4f-851b1c3686a7\na7ed272d-00b2-41fd-b3b3-5e632b3a4929\n60831872-fd85-46c8-b97b-70adf42715c8\n14ae9917-0355-4f4e-bf87-9fbfc8af330c\nb38ea027-5e08-444f-abfc-22425e4b19ba\n1f39844a-7c95-4df2-b550-79989269024f\n20d873ba-59ea-4ea3-a887-dec0f9f77974\n7b5dc221-b4bf-4ec9-b6b4-753f75283325\n9bdfb93a-eb34-4601-8e64-0a99d44ea33e\n4804e916-cd31-4925-b149-660e120d4b32\ne11789ac-6c08-4a6a-a6e7-0fc1d68ff64d\n9ab68ecc-005f-43d9-bc7a-211db173846b\nd2d5eb83-e823-4c71-aa80-f4921e36bab9\nf4a2ad64-1a8b-4bcf-85ce-b869bc3d2445\nc1ba96c2-dc1f-4f2c-89b0-2dbd334acfe4\nfe664d7d-0ec4-4039-bdcd-c700576cac06\ndfbd8263-228a-4f39-966e-59f32e4fda71\n820e6f5b-cea8-4f3d-8c6c-89348be1d618\n2a60e9d8-a459-40b2-9b49-ffa7a3a21dbc\nc5cafd16-a575-4ed7-bb87-46cfdd2cb5ed\n7c5198f7-80ff-4cae-94b0-4422db9f1da9\nb97b616b-dc62-44b3-bd0e-fefbda32574d\n63b4c9b5-2cdd-46c9-8e6e-1207752698e0\n853f718d-408f-4c7e-bec9-47dbe53c8cb1\ne010fac9-2e8a-4980-adb7-8847039e489d\nf728f4f3-e32e-42c8-9946-8a88b2b46ca2\nb5c601ae-1eb9-44b9-aea7-224c6967023e\nfad5ab8a-39e7-42a9-8432-a68fc4eb50f3\n0b2091ac-de3d-4036-bb29-e72e17d6fb8e\ndb280e55-fcb3-4283-8af1-fb39e18842ec\n0df66f7a-bbd2-441b-8301-044eccdfdd4d\na325ab32-43c0-4f89-ae29-fed645e78d82\n8b58f874-57f3-464e-8b62-65ad1f5404f0\ne8e619af-3152-40e4-a3c2-e4266081bfa7\n80202ac4-ed92-4ec3-8373-e0ba53fd701c\n31da5a4c-1a87-48cc-9299-a047af43a7f5\n214eb8c3-cb44-49de-a455-2528fc6e7bfa\ne5a8464f-1bb3-494d-97ca-990263089216\nbf2620c5-2fe5-4ea7-bab4-e7fdc6ddd54b\n6638652f-946b-4cbd-a6d4-1e0ccf88e5e5\n5d2aa117-eec6-4acd-83fc-f5b3320f5a81\n09e44d04-41a4-45ae-80c6-b1943285715c\n57c4ae80-d3be-4289-8f07-eac14f46fabb\neb3ae508-6053-40b4-8156-4aed8f8029ea\n042244e2-2ece-440e-8d18-449cbbb1cdfb\nab0401fa-10f1-4d15-a1ba-bff558f79cdc\n2f71377a-b362-4829-a89a-9ea09b070ded\ncb9be03a-94ee-4b73-825a-9fce939d4285\n3c6eee21-1811-4030-b907-bc0be5820622\n15bf2211-f4e5-497f-b263-f00e6f1bc296\n2cd93b7f-69ed-4189-ba00-ab212d07f2f0\n07690cbf-df40-4fa0-a8e2-972467e0c0de\ndec39f50-77e8-4f3b-a0ca-3c1b8338d396\n16925160-fde1-4514-b498-d99ddc6bd7e6\ndad385bd-0c91-47fb-b496-4845687f1cb9\n7ba5051b-d1dd-49ee-80fd-f4d9e8ad2ba6\n6892f036-070d-43e4-aaf3-5f2fc1602d90\nda525e3e-2f1d-47bf-9672-b38bb8e679cc\nddf58b38-3552-449a-88e0-c0fb1781aa2c\nf0343fc9-2223-4336-b4cb-6a1dd98321bc\n49967d78-e3f7-4ecd-a619-746c55c044ca\naad33ccf-d4dc-46ac-aa5e-c8d871da61a5\nf5bca04c-0c17-4899-99ac-fcc3b1745211\nea216142-495e-4e9c-881b-b21c967b20ba\n0f95a3b8-4bca-4f80-9c4e-92df0698ec7d\nc0e0d7df-2f5b-4bf5-8b85-698c45ee9db9\n8efb326c-8bb1-49b0-97a1-7e58627cae1a\n219552a2-ac98-45d2-8d88-014ed33798c2\n4486f1f6-95cd-488f-bbcd-e0f5428cecba\ndbf5f18d-9c9f-43b0-8ebc-3cb16816b5d9\n19437d78-4b1a-4b75-9e00-2aaa8334a65e\ne780f118-c8d3-4745-be3c-2a7dff036052\nec7e6c82-80ce-41f9-983c-0fa6e43be08e\nce976a87-3975-4c70-b713-035e471ad3f6\nd7600882-a42d-4ba1-bb12-76e05a63466d\n8c4493cc-81ad-4102-9265-2108a2b3cdba\ndf5f850c-bc41-4167-a2c7-f205d0d879d6\n3fe887cd-3cee-4819-8db1-4a5092e2b393\n21494188-8c9d-4965-8131-c6490b20074a\n8fce7f62-14b3-4a60-92e8-72c08b2244c9\n52a7810f-3e2d-424e-9592-035241f1401f\ne0b3ffe4-d858-4ca3-ac58-5cb4716b10e2\nb6782e3a-be01-48fa-92b7-919ac7df3012\n30a83b36-252e-4708-b35f-d0e96c7f6698\n3ff1b326-3d54-4751-b762-5ac66108d008\n08012018-6ace-43b8-907e-78826c8c1716\n1adeba53-016a-4e7c-973b-7cc44bfdd547\ne69120d9-8373-451c-b414-f12d1fb9d977\nb4a941f2-8e2e-4576-a7c9-3e190d61c8ed\n0c4f3058-49a5-4ad8-ab4a-aa259f391855\nd2b07263-34b6-40c9-90e6-6bb288c2fa9a\n6d42c929-dcab-4c9b-85bc-dabe50ab5618\nd332a3af-8a76-43b2-acce-86e6be1f4f70\n67c6c789-5556-47df-b702-7345528e768e\n25febef2-b463-4329-bab1-2655d9a9f863\n7bb27bf9-e83e-4bb3-ba50-31500009321d\nab1a943f-21e4-4289-bb12-4d273c60d2fa\ndb85bd52-d93f-4b1a-b181-7458f8b91206\n2be546c8-7aab-4edf-99ca-057de5948ace\n272a9abf-0f3d-4a07-a9ab-aeb9e04dcded\n83c43036-d39c-4ee6-972b-5f95594892b8\n6b3a83ed-198a-41e5-9bf3-bdfc7ac88ee2\n03eeae30-fe22-446a-b15f-d98b5fffd7a1\n6a45c1af-5ef0-4e6f-a8d7-e8ad03c60caf\n6df099ee-66aa-4c7a-a8ee-88bb6344e558\n54201f08-0b6b-49e8-9500-e634e3d4c5a2\n98c51ce0-1908-46c2-beb9-77cc6c5f87a6\n6caba1e2-47db-4da9-a147-3a6ca0b354d4\nfcaacceb-f83f-42cb-bde5-85095b7a8ba8\nc34c45cf-29cd-42c5-abe4-a796d5737995\n73345797-e25e-4d7b-88f6-f66213ceaed9\n674764a4-64a7-4b46-bdc0-bfc51b6eeca4\n45cd942d-00d1-4001-8c0a-042da460da79\na96a6ae3-2a62-42f2-a627-c97a44ce1a0b\ne8fa720a-0559-41ec-8ff4-7a9020e23567\n292fe7e0-a5d0-4e69-8c92-f688e675fe60\nad946e76-5976-4dd2-85a9-c8f644648bad\ne7de51eb-444b-44a6-b20e-21da2cf50165\n31755d32-4efb-4a61-8bba-0ebc5d7c3cff\n8365380a-466c-4086-82e1-369b36bfaf9d\n2c2e4ee8-10ff-483d-82a2-289e1bc88756\n547904b2-bbc3-42b2-a0fe-fa2f22b0f4ef\n48eedd32-a82c-4da6-9aea-204ea6ddd812\n49cadbf3-6b31-4f70-9daa-b8cc5f5a1389\nb90b6d22-60ea-43fb-8a69-c6e148f69f0e\n524c924d-f059-474c-994f-6cce195adb4f\nd4213157-517e-4c6f-97aa-dbc7fbdc2597\n86de48e7-bdaf-400c-bd36-e41c36ad14af\na5ab243f-d8e7-4734-a29f-f8371b52923d\n2cdf05eb-d3d6-43ad-8ee1-853403b4d6b1\ne6cf6bd2-877e-492a-8b3c-0b24818fa2a6\nff14b5f3-6a09-46e0-9343-7961531d8cf7\n2a37cc8c-dc76-4dc2-bd91-d1e18e71bc55\nebcbf9d0-f0fd-43a8-9d30-475e7f96f224\nbbe8a3cc-a2b9-49c1-942c-56deb39f6409\n9419de85-26a6-485a-b1b6-f465fd36c6eb\n859d967b-8839-4b50-9661-d4722bb0341f\nc85be53e-e250-461a-8ff0-e26b7659057a\nb86dd0d0-07c8-41c9-b3a4-620e54f28248\n4ab819ff-f909-4d6a-ab15-087ab1e3b9ee\n0b7d66b2-c91d-42b2-98d7-ddd0a62d9c4f\ne10e1284-f39a-406b-89f5-93cba94591c0\nf0d61f56-3e79-429d-ae09-cf66ecc53861\nf6f7eb01-e915-49e1-bcc8-a36e143ffecf\n6b718d5c-d144-40fe-891c-a61723a1e6d8\nd0b03594-cb97-4e59-9065-7a462a36ddb7\n62482198-f283-4b9c-bc36-88bc9d151ab3\n7c8335a1-cbd2-42d4-a9d0-9ba365bc0b98\n9f2bd5fc-d88a-42b2-a3ec-1d2718541e5c\n1484eddc-9988-4223-9ff1-0d00d682d4dc\nfbaa8953-d3cb-4b0f-9cf8-435e68f6f9fa\n05da8fd4-dd00-4bc9-a14b-f97ae04c6b91\na28692f7-45df-4dcb-a9e7-2de48ec6a859\n13c37273-03e4-4140-846e-897bb5691c63\nbcfe8e91-8e60-4f8f-81f0-d66a077b0652\n71c13473-a1d1-45af-b492-8267fe3a3121\nac80deef-a371-4381-84e9-1b38424ddb23\n48f4296f-3219-4c89-b6f1-0c65c76e4b8c\nc6258eea-c969-4e5c-8c57-6c6cc9cf6620\ne313425a-c3eb-4e73-94df-78c433a8075b\n04e8a796-ba8b-4ee8-b490-513b834d5ff5\n316de993-cf98-4fa8-bfc7-07ab196f14ba\n1d429f54-8e4d-4ddf-83c0-96cd22584f42\n02d81285-dd4a-4f11-a2ee-62e934d9cad3\n50e42e3a-f932-47ea-b38a-3daed371d3fd\n2e1cbd49-8b25-435f-8e77-f522c62ece49\n847db9af-6c3b-4607-b76f-283fd67c5087\n7a4c471c-c6f7-4569-a597-27e8b8ebcd1a\ne7b58db3-78c7-4fef-b0ec-2bbd5d524efc\n390f6999-5608-46d7-9e1b-757850f2fcd2\n647d7b82-1266-4469-8d96-fe857cd9db26\nf9a18580-6e0b-4352-b415-b7d87d167e33\nbce7a04f-280d-400d-84b1-ac5863441adb\n31ce6453-4f64-4e8f-b534-b58e8a0433e3\n712a6d5e-e4df-4c0d-a194-9b7d207fe661\n647cf53a-69d5-4c16-ae89-ae31b842b5ea\n21143004-9ea6-493d-8083-b6aca5ca6815\n47ef87d3-436a-4526-b7f9-d024dac87f7b\ne463f61e-f8bf-4edf-8a3a-e1e84eacfa02\n2d6df8c3-2cf8-4311-864f-2724cac9ea4b\nb9c4a4f0-862f-4b6b-9bae-b6c2814a1cbb\n99ebe034-3939-4d45-969f-699d80c7b0c2\n20eb0536-9179-4150-8ba8-4307d769d28d\n0f67ca48-0a98-416b-ad71-e5671e1ca603\nd0722c34-0f9c-431d-bb96-d4a36c802206\nf86e5a3b-2d6f-4aa7-94c6-9ba76950ac0a\n27047b6d-3f9e-407d-a14f-7dcaf790a00e\nee1af84d-0485-4d75-9d52-33b71df7ac8f\n34bb4fb8-7495-405b-8574-b2894a0eb89d\ncba1da85-10ec-43b0-a4c9-d699b53abc2f\n306ca999-0bbb-4ae1-b002-5121a19e4d1d\n219e61b8-7446-4fab-9e2e-beb0ba5e0636\nf625ee30-b880-452a-ab28-e27b5ced0ea0\nfd4edb94-cfd1-43f3-b5bb-fc70642b0a57\nbf6c0f75-540d-4e0a-bdd4-45ebb418b514\na36da6c8-b30c-48d5-af5b-39fa775dbf8c\ne5c6340e-4cc0-415a-b56e-c3dd0e2ec500\n199e90d5-0eb5-4ecb-9409-0c23b5ff25ad\n5f4cddad-8844-4c58-a5db-1345c91470ca\n8772f867-0196-45cf-b59f-e8b912644f65\na2e35617-4344-481d-b9ec-e9bc21384130\n35151fca-521c-40b6-b958-a0804ec3f84b\n7d56b168-f31d-47ac-987d-7dd672d63b72\ncc098031-386f-410a-b3de-58a4d85f9d5e\nffd77a1d-76e8-47fa-8163-4bb92e73c08a\nbc78b269-e297-4c36-a722-130254bae02c\n5cafa1f6-583c-4c75-8139-0c75b3b4d291\n62e907e1-81d0-435c-8df9-55e7e85a1e56\n7e8f1741-50fb-4bcc-85f3-74d0a0334e59\n7dd6941e-fd88-432e-b0a4-6e074be566ec\n57883752-bb54-4cea-bc2b-9275031d0a1b\na01910ba-6d54-41ba-933b-c635cc54e90a\n535ea547-e42f-4c6b-9958-5a27b3cfed47\n090d74fb-bf0c-4288-8951-8b7e4bf6f39a\n5df6651f-fd4d-422f-b363-c6d45fe2940f\n0c0a5710-e6d4-400e-97c7-51221ff03ba1\n8aebc451-0caf-4bdc-ac37-25cbb1103401\n8b27cbd2-cc93-4112-ba4b-4f0b38e9ece6\n99fa0e0e-1e68-4cde-aba4-2e2d0ee8b55e\n25193ae6-2915-4926-b64e-a04d184cec0e\n52eb1005-6279-4e55-9963-07f8ebb69007\n2b17202a-f39e-47e6-ae13-0f4c9b2a84aa\n01fc251e-f3ae-4a73-ba7a-362ea78148fe\n124960e1-8bac-4ca3-b12a-afbb552def17\nf2c8acc7-c174-4a44-8671-2335855d9ea1\nd9e8e850-03eb-4b26-97ac-5c9cf006d987\nfeb6b268-e3e6-4dec-9d1a-4b52d18116cc\nd7672ae7-4772-49de-8787-83b7c1278a7e\n57693021-0982-4772-b6bc-cc7ee4632d1a\n1a62e0ef-a126-430e-a8f5-73adf5fe52ba\n34b98e11-34a0-4528-b2a0-f9712082b220\n4895f74d-41bd-4b77-9d23-9b11436ff93b\n9ce2dd3b-1807-4397-80ef-11e37c40cb0d\n6c5ae292-acbf-492e-ba7a-d60c52ce2f24\n273c2ed0-5c6e-4213-8b85-11d86157270a\nd7f05205-3b2f-4c4c-9c77-47dd5494222a\n6e2e3f60-7dc1-4e53-96aa-05c604b4847d\n59a6de00-9e4a-4815-9d2b-aa865f41f51e\nf13b4879-aed1-4d66-9a95-d8580f19a16a\n884bfce1-ef2d-42b2-9ec0-0a6fe2dbadf0\nc0a75561-7713-42ee-9f43-f234ab4d164d\nd622b94d-0ac8-4cf3-896f-daf5062b01b0\nd0a5722e-2dba-41e9-b96e-4f15da763bd4\n1ddf1cfe-8d91-4564-94d1-ab23726c9377\nd537b6f8-b0c9-43ea-a0a4-c57353acde52\nca67083f-7d29-4815-b200-0e5a7b6fb3ad\n4ad19f7d-ae9b-4e5f-89f5-27851f78e519\naf970d65-e1c7-45c9-a9ec-94adc3aa4835\neee36157-7e14-4849-8b1b-151d8af31a10\n1e8cf8f2-916c-4dae-85a8-f7071ea2cdea\nfefb921e-1382-4254-b32c-9de54210e24a\na830c49e-c5ee-46b7-b1fc-e115bcebd1bb\n1cd0e9bf-c6df-4f8b-bd39-aa845d187404\n65da4d8a-65ad-495d-a197-725fa09ac34d\n2793bb58-80ad-46ba-8f7a-6334824cdb9b\nf09e72ad-a495-4a33-92ed-861b8783c7c0\ne2476b4e-3ab1-49a2-b255-3a45786192a6\n27c2b403-3aaa-4027-8cc6-19bd187937c2\n4b9c4f00-dc4d-4389-8ebc-b34d29433b5b\ncd0b8c99-3307-45ef-aae9-fc2c1e78cb6b\n7e3c02d0-5c20-49a1-93cd-cde2d8beda3c\n231c7074-b779-43b7-bef4-c5dc8e6059a9\n4f0f0c60-6030-42fb-ade9-e651007b12dd\ne8fae242-31ac-46f9-bd4d-10418259dfc9\na9a0ee04-c7c0-4aa0-a63b-edf55b899218\n6547ee9d-97f2-41d0-a5ea-c6521afefd81\naec3ae8d-9c34-4c17-bb4c-a8edb1b76fda\ne6640cff-23bb-454e-8b95-4e2a1c05e00c\nbb719bdf-4671-4377-b8f3-674b9d868c40\n2829ec76-b65b-4600-96d3-e269810a8580\n89b4d459-43f9-40eb-a900-c2092268d61c\necf6a935-ef2d-442c-af1f-64bf85a3bef0\nfc30a013-00bc-4fe8-8614-b46601b0fcd7\n0851bebb-ad9c-4372-8eef-0a885fe7742a\n408fbfca-5736-42d4-9960-2b045341b309\nae570a70-700f-4529-9530-53e4e60479d8\n132eacc8-aa9e-414e-b52d-cb5485f7340c\n1fd50480-4b79-4674-bb0a-809a51d20151\n2d52109e-a6c7-49fa-8130-3e50812e3d9e\ne328b678-c484-47a2-8afb-d46066650393\n1cbe4aa7-a637-4d43-bb9c-c44c587b9247\n74437c66-7389-4aef-9af6-7202dd20c697\nd766ab79-ace3-43c4-b153-ce4c7244f741\n8096d126-66a9-45d7-9e48-b9f6f330bd3c\nc699bd0f-aa1a-4727-8478-50d33275d0a9\n05b41e73-009b-4527-ad4e-cf6fa95ee591\na8554bab-f161-442c-a176-d1e2e4417f35\nf4ddf1cf-1fc9-4cab-87ca-ce7f74502bfe\na9a9bdfe-77f2-4d9e-9108-89a5eefa12be\n490868f2-c1aa-4ea6-986f-3084c5cc74fe\nb5003d3f-f0e5-4bf8-8167-3d0684bd3f2f\nb3dbe0aa-4d1c-4f5f-98c5-ac5fdaf50820\n956c721b-88cb-4d03-a7a8-bc78920e1d27\n3bc8ec11-64fd-42db-8b78-5c9f21bb28e9\n1a77cbe5-3ff0-4da3-8187-8153a7019191\n2d094d50-3a44-4ed0-bc25-2fee0bdb0b8d\nc0164922-be2f-47c6-b57b-686e36b7b665\n4ab322b1-d9a3-464c-b722-552e3345418f\n76d5bade-8275-4cd0-b48d-eba063b3bb93\n5d4a6383-c820-419c-8e17-73a2419ff867\nd71e926f-7f17-468b-8bdd-004f1c609c76\n97ea5162-7a36-4c91-a151-7de8e2ed1a1a\nbbb64699-0caf-4f42-83f6-3e7bfa8eaba4\na6c795b1-e791-4b84-8373-592ad5053086\nb3a53740-c3f8-42c9-98aa-fd6698787e07\n65896cd0-d843-4680-8731-b3ed96f1be8e\na1f9a421-f2fc-4b35-b6b0-0247ac055d02\n942bb83d-640a-44b0-abd8-a161f14d2fba\n50dc38c3-a20b-4308-a970-54fcf083165a\nfd5cf2ed-f62e-4c14-b144-561870e822c7\n2b8b5a43-e55a-4db3-b01b-7f50524660a2\n19ab2b7e-2f54-473f-80ec-ab2bfa431db1\n00aa9739-6657-426d-8e76-7e128156b3ce\nb0f885e3-f266-47d2-86e1-cadef4c969df\n8f8c016b-e11a-4608-bb57-6cbd80f2f08c\n85f0ec49-c75f-436a-814f-6e2c9e2832ba\n92451551-4440-4870-8a5b-767c8582e9d7\n55ff674c-32bd-450a-80cb-5a964005f8ff\n5a17d5a6-f564-402d-b669-d00ccdfde701\n7498375b-3f3b-44e7-8762-5f27e5c333a8\n8a5d3355-6c2f-499b-b0b5-1bdc69c72db9\nf5dc82b6-9690-4ed5-8707-8980cdf5cd2c\nffa42db3-4878-47e7-9a60-7f16413d1908\n8e52dd41-82ce-4f46-82c0-ac5926179fec\n417ba858-283e-421a-a180-3d2ebcf56064\n28201732-8981-42ca-9524-321dc2099f5d\n25a11ea9-7432-4de4-b70b-1547b4e733e0\n08e9c64e-84f2-44d8-8ae1-e4a4cb722014\n79303f65-85f4-4142-b094-86fe1b4649cb\n6ce4075c-7a1f-4cf1-90e2-872a22782f13\nca5d620e-d6ce-4223-8cb1-ab0dddd463b8\n5fce2c3d-5178-47c9-9cdc-4a21c4a0258e\n43717d9e-f0aa-4df4-9703-099c228fe315\n95e29505-aa61-4f2e-a2fd-4902e80939b2\nf3f3e595-8ff8-48f9-bc34-5862cc93a1a0\n1c9e3e4d-cf0a-447d-9487-f97893cc5462\ne299e820-1d39-4fbc-9298-da5ac52ecf4b\nb379975e-0895-4d4e-8a12-a8c29c6b9b96\n1557e39d-2f8a-405b-b89e-89ae5f24da53\n1cd58ea6-903b-49e7-8e77-0e553cc18df5\nd09aa606-e7e7-4a4a-a301-7e9fe8d29f3a\n08417581-a9e0-4e24-b095-470050c524c4\naf5a41cd-eeca-4916-9f1c-9e4d70ff9c3f\n978c9239-45d6-4ef0-9680-e1d656a8029b\n1e34bd6c-e96b-4775-aee6-7436735ea8f1\nfc818c61-b507-4ade-98f1-2a210a318b92\n7ea70196-338e-4a06-b323-e61e177a30ef\nf3d71d83-50f1-465a-a376-52152fd0a9da\n93a84442-e465-47c3-8f09-dd66a2cb946f\n3fc9b9cf-79a9-4df7-af65-2613e1addb8f\na80130f3-6f61-408d-be2c-4887ef58af61\ne5cf375e-dff7-440b-a75b-23e02b6057d1\nc11ee7ef-3148-4d11-87e3-fb0e734d128f\ncb89f315-ba2b-468c-80c3-7d3efdf9b9fd\n75e59464-b651-4a66-afb7-a441e0b3bee4\naab7372d-3c7e-4816-b2a8-a2485035a074\n19930a57-568e-4cb3-a22d-db8ff44b7713\n77901a3e-b7a8-4eb4-b5c2-6d3aa493c449\n7c47ee96-ee8b-4692-b641-5f812dc91460\n93043f5a-0215-4c6c-9b96-83057c8e5850\n2b5bfdd2-9d72-4ee3-9b2c-1590365baf2c\nc248d548-b50d-42be-90a7-248894634e45\n98b9aad5-f0c1-4b90-947b-2e1bec8ec7f3\nca8bab3f-a2f4-460c-8ba7-6f1d5bf131e9\n0da8b92c-e40c-4aec-b500-028188249ce2\n67f3f996-a2f1-45e7-ab0e-105fd1cd9bec\nead75158-94fe-4a39-82a2-053e7aed1fd6\na4a73f9f-4102-4166-b0c5-367f928b55ac\nbb91be24-7fa4-481b-991d-d0993c54ccf2\n6acda975-ac35-4d53-9c04-552958eabc23\n5c352b91-f306-41bb-826d-88fd15b2cf38\nec6b1ce9-63bf-4fc8-9773-efe47fc717bc\ne4d8fe9f-0575-4e26-935e-e6b512022cd3\nf10e9e97-f4a9-4a5b-8aec-112110551b81\n0d5e9611-1ed5-4f6c-8677-20148d84510f\n5b285519-42e0-48f5-aa11-68be7670badd\n0d7680bf-825f-43df-84b6-ded9abef5560\nd362ecfe-1060-4107-bcdc-28092d791c42\nb320986c-c14f-40cd-9fa5-f9343744c7f2\n9ccbac53-581e-47ef-8b5e-ea010f72ca4b\nadfb178b-69cc-4caf-b4c4-7fc2a41c94c1\nbd2c03fa-ac05-48c8-a042-8ff347962f25\nde7bb137-97b3-49e7-85a8-9cdd925c59cb\n44d4e14b-9a57-4f05-b39c-c0bbc92bba3b\n85f182ec-4792-48bd-b656-dc4023fc8cc5\nee9a0ae8-a8ff-438a-ab98-73bc84f3ef96\nbe07cacd-1896-414c-9ff5-11827a1d4559\ne5256c0d-6c09-4b4e-b71b-8d54cd34c6da\ne311e898-9595-4238-8bd2-a0c286b12435\nf77b96d9-d447-4afc-9565-883919f6da36\nc2c2ba20-e96e-4324-a982-daec528c5377\n86399e6e-857f-4337-9836-82341228ce75\n9f8738b2-2016-4c45-80e7-4509ede9e1c4\n20b2f377-58e8-4e10-bd9a-8385511d50f9\n3d24e490-14e6-4eab-806d-0edddfd7b140\nfd7c0ecd-e0fa-41a4-a370-c688db286e75\n2221ef1e-b3f6-4dd8-8ea1-9ca8ce820891\n474d48ee-432d-4826-a63f-e6a08d2e4ad6\n84b7a7f4-f76d-4a9b-8b26-7c418e65b208\nf3059c2c-b193-46c5-b0d8-f001195ff0f4\n7a3a0fba-86b1-4acc-a90c-5fbc5aabf800\na36fd4b5-e0af-4ba3-a3a3-52262d1bf13d\n2304aa14-887e-4a4c-b6f7-2f9eeaa4bdb6\n38bbe670-3fa9-4fb8-967b-a2ae5a690d85\nc336f70b-0a87-435a-bfcd-71a04083d0fb\n8331f5d2-79ee-4b34-9fae-ea3cde150ed0\ne7957a42-086f-417d-830c-36b19a75d1d2\n6fb41e41-2706-446a-95cb-eb07e947f532\n51d8dc63-8ef4-4a7b-a809-bfbce1ff74af\nc63caff6-14e6-4a95-bf39-248b3ec1de93\n0e568f5f-8306-4a85-ab24-113b7615f1c2\n3a46bc53-3b8f-4135-9648-218f440c55f0\nb6063f51-d569-448e-b259-c71dc189c46f\nd9e766b7-4f47-4c73-ada5-a7d956a2646e\nd304c840-ae41-435c-9812-b7b3197b416e\nf448a6e9-f0d9-4e18-9d0b-36bab6a3da82\ndd02dc53-e625-4481-aaf5-4b519a668cd0\n22d99c90-f868-4db3-bcc4-46d231f45aa8\n97a5d017-4807-4a6c-bb27-d7b2aac1a527\n11dd43b7-832e-4924-a3b5-1e702b7f966f\n17004250-515a-4ea0-82db-15aabc65383b\na59b215e-e199-4fb5-beb5-9d9964e153f2\n989961c9-9d8e-4edd-99b4-4ea34e4433ed\nfe9ae5a4-0c99-4602-ab66-ebd0b6b26b24\n2371c937-289e-4ce8-bfe5-8d4495495b16\n64c554dc-8ce3-4de6-9695-76ef73e52156\n9155207a-c2ea-41d2-8cc2-de5d205d8a99\nd7985b15-3307-45b5-b298-492f4e0d4a1b\n0b644edc-1acc-440a-b88b-807111bb73ca\n23e65dfd-4197-44fb-b7f3-b2667eb4630d\n7b011de0-97ec-4aca-ae24-65816f52c0e8\na7a585ca-57a4-407f-817e-8f692f70187e\n36927b90-0947-4988-8b1c-179a71a145ea\nd68ba71c-2c91-43e7-9d59-a25af9c6ca03\nd0391a2b-bd0c-4e8b-a0a5-72bc4db75d14\n216654b4-9d8c-4913-b69c-a37a4cfa9338\n5d1d57c9-78f6-4769-a346-329da5aa2b02\nfaa316d4-5a4a-48e2-ba29-baac740fc32c\nad570dba-3751-4ecb-91dd-396ec37a6dc3\n78c8f1c0-8da9-4586-b031-b6796a254cdf\n42975510-efb1-4543-a17a-025f4b21bc48\n9d1f4b20-8122-4726-9da1-feb47c39a175\n895f3771-bc4b-478f-8b30-5deeaf02e67c\n4fdbe1f0-e79a-44a5-868b-09bcc44d367e\n0161969e-920f-4a17-a406-e34435a6bf4a\nd087c0a2-781a-417b-9bf4-64379db1cdd5\n58a01fa3-b8e0-4545-a37e-d8c4379cd620\n4ae0ecec-159b-482a-9e85-d808b1dc42c0\n7bc8ce17-80f4-4454-92f3-b43f43435523\n10992a88-e330-411e-a81b-63d470d15312\n9ba2e622-a769-43b4-a767-1a6fac681229\n318ddc6e-1391-4059-9b5a-e4aca56079bf\n3df27010-673c-4436-a530-d934823a0644\n0bbb3640-4dc9-49a0-902e-00573f58f60c\n67b8966e-c28b-4dfa-b09a-c10febf22d07\nb6672d33-25a7-4627-851a-3d9316399ad8\n0404cc69-1af7-47bd-9504-a00b9068b37c\nfe4933d0-5cbf-4c35-9d37-50f603828b95\n9484bae2-2a08-4765-a49f-d78d05515dad\n485714bb-09ea-4c58-9557-d127d1c1d2a7\ne57f0c58-4cc5-445e-8988-e608087b4ffa\n7cd48d91-3db2-456c-9521-65d850b9f061\nd61e7a86-cd76-4051-9bb3-161967009ead\n9b4ef20b-7205-4d37-a1b7-e45b4b85e518\n02f6337e-0c68-4379-9a33-7c9e64d7cc14\necc5e3e4-918d-4bc6-9c75-1a3ed220185c\nb412a1ea-0dc4-48f9-8019-70e09c27d0e3\nebc82422-7996-4604-92b2-b77a43084469\n24f9807d-f0ce-4fd4-b8be-492df6a79c76\n9682b5f6-eaef-44b5-a4c3-07b1bc458dce\nde256690-4b83-43a0-bff1-ee3e0f6d0fd8\n5ed750a9-cd40-4b77-ba09-26fd0f213cbe\n4e222195-6812-4ba3-a4a6-6855bbcf4cc3\nb3e0fa1b-d779-4dc9-b58d-e22a43af55d9\nd4b6e594-0a47-4754-b01b-2aff3c3d8ad5\ne4b8fbeb-9c80-474f-97d1-dc75c8084b03\n9ad1ea65-b30a-489a-9513-f00b7aeaf773\nf2075ec1-586d-4fd8-b9ab-97ed81742b3a\n5f01270a-d08e-4dca-afbd-2f8420b41872\n6fd3625a-595d-4c10-afc2-162a0544ac7d\n72d9f9ac-8002-4225-a7ea-7af416575f38\n3239e18c-80a1-43de-bbd3-d55dd4b36eca\n655a39d3-4c05-4942-b435-0a01f3d2a697\nfabbbf6c-b69b-4abd-b31a-035c0f27e060\n3480c223-41e6-48d4-9d1a-f79d20525edf\n8f50fcb9-be87-4f06-9726-2a4f68949027\ndd361de7-0cc2-46b2-a742-f26538946229\n6fa0de65-cba1-4153-a099-ab473e36c8a0\n1da01625-7197-4a9f-93cb-6e12d54c0c11\n1bd93d65-2f68-4155-9743-f9637e035772\n6828ad62-0115-4532-87be-d514264c7644\n1d742f8c-f647-4821-977c-7d3320cea611\nb016c373-3b8b-48a8-bcf3-28989d8a9379\nb0620f52-b2aa-4540-90a0-332e1a30f242\n54f8c37d-9c1e-47ed-91f5-2caad4536e67\nd9be6684-c461-4ed2-a72b-140c4c041c46\ne986d203-a438-461c-9e7e-b31691824527\n0865401d-23c1-4701-9f3c-825866152cf2\nf9fcc1df-a09f-46ea-82e3-ad6a6430b33b\n48f52e75-0e6f-4f7c-be99-0d9e50d79e67\n68844d36-245c-4d7b-b2f8-627995d910c0\n20647533-7295-4af0-be4f-8f559be0973c\nc42dea83-ff6a-4d3b-9688-3c54c11222d5\n114bd65f-2d76-4e2d-8d8e-513140549f6d\n1cdf7612-0f0c-4020-bbe2-8a20a9d68e88\n555e7068-f816-41cd-b26c-76b99ed86afc\n2b9a4e69-c2c2-4a3e-a978-f955893c6911\n78b8a80b-832b-4232-ad94-b59b572902c3\n6f033b48-d380-4377-be30-53ef21dccc1e\nc55feac0-404f-4784-a1b6-02efde744fe1\n5734af67-f93b-453a-a068-ba58aa84817c\na096dc7d-fbb5-462b-b3e3-94620c126c18\nffd94275-6d17-4be6-8824-d78d8645fb2c\n53ae2125-4d65-4a62-a440-5d5d8b54ea3a\nb540b75c-1c6b-4881-8690-9a56b5db4127\n8aea58dc-d145-4c3a-8ccb-9446e229e963\n664cf3fe-7d6a-4222-b61f-5760dd45533c\nac74e08d-55cc-49d5-86e0-04b352b2b158\n9f761d89-1009-4def-8c63-65b044271db6\n571825b3-c5ad-42c4-a3d5-0113b23c923a\n3746d103-ada4-42d8-88e3-86bd97fc3579\nbf2651bc-6c0b-4243-8037-012a902ffcfa\n02fb6ad8-58cd-4683-bc58-ff7ebd1257ac\n82764735-6fe7-4a97-a4d0-ad4596e45433\n227a1947-6735-40df-b8aa-8860db88cd5e\n990e04d7-c474-43c5-b8f7-df16beff553e\n9436bd3d-ad78-4f11-a430-5e6d293e7494\n5e424a20-5631-4e90-a9f5-3d1f3652a062\nc10ad20a-9bff-472d-9ab7-d4755026ad9d\n18d25cf5-9ee9-41e9-844c-7d8a4f0bdab0\n54d0c5ae-e990-4087-a6d8-18124c6a4037\naea047a7-c638-4344-91bc-7644863a3710\n4c54b256-2738-4066-a387-8da36c9fb439\n23de71e3-fbf9-4e39-988e-6cd59b6c5247\nea1ffe02-7eec-4d23-8efb-898e56d19315\nbbd0506e-c57c-4f2a-883b-0b53e8868235\n6df4630c-755d-4a7a-a9fd-afca3b8c4e88\nc28d1e91-4109-4f51-b38c-7312639ec130\n21c99263-cd67-42fb-bf96-5816342c24ba\ncba39fb9-e86b-49b8-9276-8a1b636de477\na5fcfff9-1ad0-46fd-ab50-2bc68b415486\n14da1b37-8638-4112-bd3c-39064b371ced\n7cee943c-bf16-4cce-8208-fcdf393b91e0\n57329356-fa8f-484f-b4b6-7931e91222eb\nfc312a61-3d64-479a-b9b7-97a0374b8c94\n3bacdf19-92ea-4459-a7c5-f83197d6f7b2\nbcd065d4-2f46-4c78-adba-2377f25714cd\n9a3397d9-09b2-4b47-bf91-8b84ab0bdb7a\n646c6988-d4e3-4b57-8d61-418b124a2250\n8faa59a1-b149-48b4-ac0f-5474f72cd015\n065f69c5-16b9-4a16-a71d-8a51dd1d82f6\n08bd5ce6-e569-40d7-9455-ceae972accc9\nf41f81a1-15f3-460b-96ca-f3e8a679ec27\n672fff3c-f06c-4475-bb79-7a27fe6a4227\n3706371d-e4ab-4bca-9ca9-062d1063ddd6\nf0957e31-fb0d-4771-b4fe-e4480313c767\n83ba31f8-ba9a-4d92-bd83-bf108d2f7061\n48f98860-d4b5-4067-8279-e35b364764a3\n6f146237-100b-4005-ab63-99175c8d17b2\n6a679e0b-0272-4cba-9971-27554e725da4\ncd40016e-b88c-4de7-a1ba-0f84f827ff7c\n6ae0fc2a-a1c9-4150-aab4-d055bf2af175\n0e2e2778-5e59-416a-89c1-8d15ced55c83\n05a122ce-d6cc-49b9-8285-4c62fd265494\n95992162-0011-4a80-bcce-f0f8970aa91b\n1fcbc7c9-5cee-4d18-8a13-630ecf35543a\n2600df8a-2213-4a8a-adf8-03f246866cf9\ne6f84c31-66dd-41ac-b7b0-ac48461dfaf7\n60979677-39a9-464c-b696-ee899633bd27\nffb60161-8c07-40ec-b222-e25089ad5eb7\na0e4ff61-c76b-40bf-ad83-4c2b0471b53a\n2f007b78-7cf1-4be1-b862-a55ae5d7ee32\n2cbc7bd5-aba8-441b-a454-70f4abea38e3\na51b489d-c613-4ca1-a93f-c00062dfdfc5\n4f123ebe-2413-4f8a-8c55-735d74c1482f\nb0be642e-4cfc-4d5c-bca8-2395552fc3ff\n73cbe8bf-0ca6-41cc-ab7c-0818c3d1bef0\n9dae69ba-eb67-4fcb-a267-bfd1c5164cb7\n265098d0-9848-405c-b0fd-3ee8a4d4b41e\n4ceee385-0827-4ba8-9667-15ae624a35e0\n2907f4da-317c-4e7a-bdfe-f7c6827a256d\naedbd014-bf0a-40e7-8931-271fad6b2ac6\n951f2dd7-dc8a-42d8-9aec-b397a90fd2e1\n6ced8544-422d-4dcf-a755-78e7667b19af\n43c8f781-b0f8-4762-a526-6b247fde1f4a\n01562225-e663-4dcb-9052-f61a5cde2aa4\n4308bcb0-c2c3-4b6e-b064-e61e4746dd3d\nbf4aa572-b810-4e73-9227-31b619a3c510\ndde90c98-7236-4819-8574-6374c70ca2fb\n99e0dce9-d9cf-4a80-9c73-d658ff456a2d\n8c6a472a-8124-4eb0-aeeb-696014dc9f72\n046a7184-e505-4411-8c32-b057f06c13da\n553300ae-86db-4cca-a54f-f708673a05ee\n501dc3a1-562b-4778-b39d-ebc1f6f9ede8\nab3b927c-d70d-4fd5-9d41-ca57f114cc79\n351fabe5-3fb8-46e3-a12c-6a5722282890\n3d8ed62f-2e38-4b37-9b3e-0e07ace1c80d\n1247cc19-5ca1-409e-b951-c0db42e56005\n382df578-6d94-418c-97ff-298fa8cfb3cb\n4594c73f-70da-42d3-842b-a843bdeb2201\n6f4d2fde-81f0-4998-926d-b238636dc4ef\na442c6c9-452c-4dc9-9b69-29bd804d6a15\nd2dd3002-ffc3-4342-8af7-46514971f3ec\n72568fb5-1592-4014-ac68-af219889a043\n820f5f33-46a4-4964-9feb-441372a1a5dd\nd924512a-901b-45d3-a2d6-49a44382203d\n4d3389fd-e649-4091-a6ed-8cf1ced34a86\nd6a41520-11d2-43d7-809e-1994d2045f71\n51a0fe74-7a52-4f81-9aef-853e5122cddb\n8ea4069a-166d-4942-b34d-e1649d3aaade\ndae81af3-de63-42f3-a86a-e29513b4e735\n8114f379-ced4-4e8f-b8c1-ab61d97bdb9f\n05aba642-77dd-4052-a020-b5ea2ae0b488\na719f8c9-5c04-4e8f-8d97-e58d7f12ae51\nb27afe17-b90a-418e-9a8c-5e51f70a2a93\n517b7050-5376-4a31-acad-92694bcb4214\n5ad457b3-f208-48a4-a548-13154be783c9\nf74664e6-5841-460f-a746-3c3535cb6ccd\n4c467946-8927-46ce-bcc8-5edaa49a8e8f\n4b39c159-5bbe-4952-a3ef-35521ebd19d9\ncc07ec91-96c6-4e9c-9e1e-d132e31403bb\n95837eec-de63-44c8-a72b-926a3a745ca3\nd3109205-079c-4161-8009-717fd8615ff5\na1437625-8a79-4bbb-9c1a-2747b4fe09de\n75416c88-5ec8-4217-9360-99c357f87679\n59dac473-9d85-42d2-a92d-ddb4327a967c\n01ccee7f-c384-4252-beca-96594f71b599\naa113874-602f-428e-8405-e35c1ed254af\n43c4df98-f7e5-4111-950b-38859c6994f8\n973750ed-83b1-447f-8ecb-49dc16de6876\n2f5243d1-4079-49f6-842f-96454ffa05b1\ndb1fde7d-8cf0-45d4-934d-e0f5112dd97d\nf929e8fc-ef7a-4d3e-be6d-b2ccf08aa415\n8bbebc29-0e6f-4be6-ab59-4689804034fb\n6bc2847c-9e58-4b55-9378-ac25b2ad5130\nc1e1f910-5d5d-4eab-96ae-60d6b569ad43\n935daa60-136a-4087-99d7-976ddee91577\neece5ad7-77bc-4910-bbff-ab6c0a684487\nc5b0f4b7-ba92-4009-bab3-ac94fbe070e6\nfc878c3b-cf8d-4dcd-a619-5d2f178d4e99\nef9e8d68-76c5-41a9-bbf4-dcbdc56aeb17\n23a4e57a-6fb6-4c85-846e-c97077988834\nb706221e-680b-45b0-a049-c796166720de\nc25fb18d-627e-4960-9955-ffa1bac14de2\n763925ab-9090-4edf-99c4-96519b96abdb\n88970918-a478-4d46-85be-09201d692b48\nc7a72daf-8d3d-42b5-88e9-aaa12fa3168a\neb4ec611-595c-4596-bdb0-9c2816c30d3b\n732e2a6b-f5ba-4fba-a426-f3f7d7c68bea\n9e092ee3-1680-4e39-a61f-fb30ff4a59d6\n12f25540-a305-4684-80a4-c45faaf0eac7\n97f96baf-c947-47af-9af7-0fc3334cfd59\n16914e46-d09b-43a6-8991-c4b750f5471e\n58ba7bd5-e6f5-4ba9-a852-a191038cc914\na34d8e12-9d25-4255-9dfe-3ffc1b732577\nd3eac661-c241-4a97-a5a5-43d87c4d2292\n185f60ce-e796-4ffa-aab8-f75f0a6d8612\n032aca73-a149-4b03-9890-dc45608d6389\n57f8c4fa-76b3-4835-b632-0caa300bbe7e\n2b00c029-b23d-4683-b469-755950d555cf\n45dd7b07-026c-4c61-9245-59361096515f\n0883acbb-fcb1-4d27-acdb-ed92c3d5fd24\na4de1273-7b7f-4115-94e4-82d65f2f0061\n3aa18138-79a8-49ce-a051-1b1232bc603f\nddbe273c-4ba8-4a52-aa69-a599c2ff27d4\n13e97911-f1aa-4ec6-bf6c-81d54a769edd\n83e894be-1bf3-49e6-afaa-e04d173fba4e\n05cacf15-6731-4355-b559-e4c3848fad03\n46ec0766-a47f-4ec3-9454-05e983517493\na8fbb6e5-8e1a-46c8-ad03-fd41036f510d\n5cb7fafd-aa4e-43fb-9675-6d12578b0634\nda7b620d-e9d3-4e52-b12b-1f9b2b549719\n5995c47e-c2ec-4b11-8ce9-fbed05c614fe\na2526a5e-f95b-49e2-a95c-6b952e264b0d\n07d49b0b-76cb-467f-aa2e-2fc474085174\na30ebc08-3839-4633-8437-936acec7b295\n80d30e3c-1781-4ca2-aa8d-a7b3c1d99faa\n95a30940-c13c-471b-9189-36cf8fc9f8b9\n1fea9ce6-e137-49a1-9461-d6f023ba32e0\n28f25fc3-ea09-40b2-9fb7-1102f956a5b1\n95e94bb8-5ab4-4a11-b625-ba7d33bda4ea\n287e88e2-5d17-4e68-a298-6fde8be3973a\nb3d4748f-d2f6-418d-9dbe-862fec4d9d18\nb51623a2-8a01-45c4-8967-51feb8c09c4d\nfaefe357-8943-473f-8db2-37f591ab4461\n72197a64-bc50-4eef-9291-464e6b42fae0\ndead7103-9eed-4134-be3e-17a0e9991e43\nfcf14387-4eea-4f48-b2a5-3e2f95bde894\ncb41bd70-2d48-4a87-8ba9-dd504074fdda\nee762ced-12ae-4c2f-8a28-4a75dc511b50\nb85d8c71-acde-4146-a821-ea83e006a65c\n8414ec69-5fa8-4e93-ba98-51952ff8f272\n364b3fc6-f400-48db-8cf7-42eafccb4e36\nafa5b9bb-ffbe-4c68-bea1-7f8361f8a98f\n9fc93393-9069-4b3c-83da-9b5d26536bf7\n63404ff2-d618-4142-9ff9-e31d1953f36c\nac8ac9d6-175e-43a3-b7ea-b8ec157f1479\n852242f6-26c4-4af1-bddf-ec14e3d50d0a\nfa3c3c02-a10c-4daa-a5a8-c1cd0cecff57\n6218d927-6c44-4d68-bcd0-ba74595ce412\n090bbf0c-2fd7-4922-a217-133164e24f6b\nc069f6e3-59d6-4299-89f3-c3b56a33df59\nbfbfb9fe-46c1-45b3-8818-6686d9c040ab\n5932fb72-3956-4194-a280-37a0cee69024\n19766b06-13f1-4a62-bd74-f59f32e7c042\n25630c80-dbaa-4302-9cdc-91ead2530200\n4a76d2f2-7967-42b0-92b2-2a149e7878c9\n81a7d880-5b21-4131-94cf-46bdab2d8466\n7aedac30-e8ef-49db-812d-2e0304b95eb8\n9b01c9b7-26cd-4543-bbe5-06cccfe9339e\nc5e554a2-da0c-433f-879e-e7b145adc355\n330665aa-06b0-4753-93fe-863f8beb9bac\n3d4c4940-fd07-4b76-b958-4ad2df151eec\n99647161-5ec0-4e6a-ab64-9a02132569ac\n43cae6c6-aac5-4c6f-b36c-963e8cc57644\nb24a2b1c-3a70-4ab8-8905-34880b2b203f\n7f41d7af-e3f0-4edf-afc4-d0259537e0b9\nece8d58a-242e-4221-ba54-e3e398c302b9\naa6e3bc2-f8f6-4477-8786-bcd90fd04be0\n2ab24c1f-34bc-4995-be6b-b74aa963d977\ndd7808a8-d6b4-452f-9af4-5f7686ec9bc1\n9922bf49-ca26-441c-84b2-80f52ff936bc\nd47b84a1-64e3-4357-8aeb-3522187e1879\n0f0bb924-9c68-4f08-aa54-a9cdaeb8cbd4\nb3791309-6e56-469b-ae02-930b8a03940c\nd52c8973-499c-4736-9637-e28af54d9ee6\n3ace8e4b-d242-4677-bbbc-9999cb857f57\nf8810e07-9468-4e5f-845b-d0445905e5cc\nd95fc796-332b-451d-8d5c-b6f3161d6c50\n0c33c15b-21ee-4e78-a6b9-b2385da9982a\n15d2efce-bd9b-46cf-9e32-b36d85ab88d1\nf598d8ad-9a6b-499d-bdc1-0c4d9d9c901e\n76614421-a32a-4a35-b21d-40434ce55055\nd21fb4f0-dd5b-4577-8fe2-c2006e68a78f\n17dd5d7e-6854-4863-8685-059ebe6dff2a\nc531e9ec-6737-4174-a54e-55c1bac578f7\n6b06e9f7-d83d-418f-9b10-8473c8056926\nff6ba24f-7d03-4355-8f6f-3da251678a31\n2eee6b8a-f87c-4b1c-bd74-8b11b3b4e1e6\n05361e16-e328-4391-9f22-a397e6f1e327\nc4f45ea1-0373-4704-9407-143dfb1c795b\n9a840fad-f6cb-47bf-8ba1-43a6e836849c\n887a3f25-ab7e-470d-bf5e-dd624582b36e\n3d98be38-2f5a-4c93-9b6c-9d3f66d2cb0d\n8abde1fa-9988-46d4-b450-019710020d87\nd4bf811e-bcbc-4e96-993b-499624472472\nb3435634-f0f3-4565-b64f-d2c9ae403a07\n02c87f30-0a04-425d-b6a8-bc84cfe30ba1\n99b4993a-4288-4536-a302-2cf9123396e2\ncba5e2d7-1e12-4559-8652-32dc9f73ecbd\n6b5a8b61-36d7-4d10-8ae4-c8a5867c633b\nb6c5bd2e-bcff-42cc-bf74-450f59151969\n16e50823-dc3f-4f78-ba55-bc701a03de57\ne3f27dc6-8e45-4d09-8f77-5fc71d23f80d\n0ea955d0-1d80-4e24-b13f-4203a03586da\nf5f2595e-e861-4a01-a4f7-7c3ce2a9f4c3\n4a1fa32a-581a-4cbd-9b98-89eb74039090\nf31803b9-50c6-4cd9-bda5-9ca9f331b9ce\n3ef38103-27e7-4ffb-9ca9-6b3257231861\nac2a6243-713d-487d-a07d-5b291ad13b7f\n4e313656-6862-4233-8cf6-60b19a85bf58\nff016980-2e86-47d3-96ce-776bb6adca60\n08004592-f351-46ae-ac0d-bfacac0ed6dd\n853a2d7e-4b8e-4976-b6e8-57b79b86ef2a\n8e5fcf7d-6c0e-4bcb-af7f-11e0e0bd2a4e\n7161db3a-7b08-445f-8bc0-b64397d6836c\n268d8eed-ca54-459c-9313-9f86847315f6\ncb62471b-3f42-4352-b996-2af738528e98\n11da89e0-fdde-400d-be64-1cdc9e4dc89d\n49b37956-1995-42ca-a710-23387157d920\na21cc243-267c-49d6-910e-1a37b129b5d0\n96f20ce3-4c21-4c29-ba0e-a8f7127400f4\n66de4ee1-296b-4a07-9df7-fdb93f0189ff\ne4b95209-c73c-4039-b32d-30be698bb48b\n7028cce0-b5f0-4da2-be3c-637fb3ba8d37\nccba54fb-f4c4-4e3d-a876-4739181a91c3\n69ebf4e7-2845-4aad-9766-cd70c1240478\n6c1e6707-e397-4321-8879-b527e8e21890\n1ae0edc0-59c3-4299-abf6-4d9e780cd534\n178c4aa7-eef8-4ea5-9b52-ccd1fb0b25de\n4792dd0c-a34b-465c-a243-aee44bc7a5cc\nc5e02883-34e8-4ae1-9bc1-3d593768fa6a\n7c2fe5f3-1df5-4335-b749-180f67f50551\n963dd292-18b2-4588-a884-58a6c237abe7\nc94a636f-6cd5-4cff-858a-4be4e23913db\nf04ccb74-c48e-4de1-bede-4986c196f35e\n42831306-741c-4591-ba61-afd1820e8724\n932d491e-1bf4-4eea-a38d-0ed362ae02dd\n3a644337-4e14-46eb-a911-2c40111b0587\ne3caa383-3a97-4e0e-a8eb-fae62ef6b854\nb108a8f6-a99e-46e7-984a-0ddd43141c69\nb0b97027-f3c5-470c-b91e-3301486de1bf\n2918b913-d3a6-4dc7-a0f0-24d37ff38f82\n67645a59-4fe8-461a-98a9-20870450cfa0\nb991f801-0134-4339-946a-99a09aed8215\nfb5ed7da-23a6-4c3f-b391-cfcef945e415\nc1e48ff4-ccab-4d70-aa4e-45d260563e3c\nfc26f8e1-44d3-4215-a8d5-aa2fadf03a6c\n8dae5943-c0c6-445d-bded-206a2e181e92\ne6522233-e256-4530-88d2-f5a38caad663\n55dbc796-9af3-4586-8cb4-f01c1e36f310\n64304120-3387-4941-9a2f-1ebe66da3d67\n693a0267-d12a-42c5-b66c-48c387bcd224\n1feb5caf-8dbb-4cd1-a125-d85644353bbb\n87d6d511-da08-42c3-9d9c-5d28ebcd283c\na8ce7f61-646e-4fde-9dbe-c5bdd620106e\nc221cc3f-c325-4baf-8a0a-ac506ab24c17\nc9f7559d-1363-4820-a61a-261a13acfd39\nf7f71102-6778-43cd-bae0-31ac87d30f7f\ncb686433-c31d-49d8-b606-ac979952d76c\nff82cfe4-d0d4-4bc6-8dc4-2e2a69dadbec\ncc9e7d9a-97da-46ff-b112-389d958da3ee\ne7ffee77-20b2-4cb9-a7db-87c5a0c77076\n274fdd9c-2ca2-4f27-be0f-1fd67e77edc2\n898369ab-24cd-4db3-a8aa-51f3a0e571c7\n346583c2-3314-42d6-b283-05dd0b8b7918\n12aceb4e-da27-4c3b-b770-7824d5e0c6bc\nb73c3bec-fc76-4be3-9345-4a599cae101a\n1fa8f3fb-913d-451c-9859-71ec4b850c43\nc94d088a-93ef-4e11-9e7d-444405b25a84\nb12b7f30-c648-45d5-9455-277f2a9e1478\n73b5a819-90cf-4dc3-a98e-8244086447c4\n94058363-a18f-42e0-b0d5-78e473ddc885\na8fbeab2-6939-47c6-919d-8ec35cd140d8\ne84f9dcc-7047-4291-99b5-35b384261d30\nc5bde034-3c96-418d-8cb1-2c28dfdb8ef6\n6471e0c0-b6a8-46c4-9b91-1924eae6bec3\na4000a6b-f18e-4dfc-84a4-ad75820c5166\n32a16c7b-d4fa-4b85-8d54-0e405f55a1e6\n1b809df6-cf08-4fd9-b1e8-5f95620c4b72\nf455a018-3036-4da2-b76f-dc1b8e2a3626\nb4c7b51e-54b0-485c-844f-c148eb754940\nd9d0ff5b-f82f-4273-acc8-c77fcb707155\n370a474f-fde4-427e-9ea4-0b4df99cde52\n72b25fb3-b3bc-4596-87f2-01fb54f2f6a7\ncc1b9667-705e-4b7b-aa42-38a07b480ae4\n026eebe6-5b93-428d-89e0-33b2ef2b0a12\n32d22f81-84fc-48e2-a3ad-2555131bb57b\n5082f154-afa9-4b91-b2c4-9b49d6d492bd\n8aecc012-0640-412c-9929-f834e5298555\n940ada09-be93-4a09-adb0-a23024161e70\n44e41254-5c06-4217-8016-921b9742b48c\n55a7bf52-4078-4dfa-8ce4-963d964ba6ce\nc9eec46d-5c0d-4d70-911f-3a8c3bf10a4b\nda771004-0236-4301-8507-ebbec30affda\n853c421f-6afb-4a84-91d5-08393c2bba37\n7dc07d84-0ff9-4bf8-be4c-b5eae3579f0e\n22d258a3-04f9-4075-90ab-a012a9c96e31\nf08e7ca8-1805-4748-92be-a413098cbf78\nfb1ad79f-a6ab-4510-a6f4-40a479ad052b\nca8f456f-3bc7-4bda-a93d-bacfe19a1abf\nbafe339a-4446-4f3f-9cfd-9c0a4c5f4fb2\n8bdfed13-b4cc-4bce-b93f-05d2ea9ed414\n6496e628-83cb-46c4-baa5-a8dd766f82ca\nc8b1f33d-23cf-4b60-b393-ecdca5c59940\n2d69f827-a08b-487d-b7ba-b51be3c4123b\n4df4f302-6a6b-48a3-909e-3aac8ffcb9e8\n9bb66df5-5206-4e76-83c0-2d17aa2a8c39\n5266cdd8-e694-4354-96a4-99a70b581164\n2176fbf3-af6b-47a8-ae9c-2330879c5590\nd9ae2457-3864-4e32-ac7a-73880f9a6b67\nf0f390b6-c3a8-4e7a-bc8b-df37866ea882\n8f3f1676-de81-4b6c-96b4-eef5e243d037\n66d4e4cd-4ac8-42e1-844d-4689ad3d0b46\n49a6ef85-94b7-43eb-b535-3fe7c388b436\n347e9a83-928a-4db6-8ffa-4879e497efcc\n537698e6-14ab-4e0c-9fee-caeb8b8ccec6\n03522a81-92c3-4005-bb5a-bb43e3deb842\nb531e7ee-da61-4aaa-9b90-b1bf6681c81f\nd893cabc-2382-4971-bac7-c0855d1d41e2\n2448061a-d8bb-44df-9d0d-b075ff23d122\nbe7fa09c-f82a-4309-a970-0eb9bf7436a1\nb18315ad-3f4e-4d1d-b7e6-ea54fc0b9c26\nbbe48e41-6d25-436f-bd11-1f09b0224b0d\n29daec0e-a5fe-402a-95cf-8959a638c964\nb1498aab-5265-4a51-8100-9369c978165f\n71e96d3c-d071-4a23-b2ad-6ef011270ac2\n40414281-7973-4cbb-95e9-45dd12411fe3\ndcae10fa-70f1-4376-86bb-3887d0ed2d4c\nc402a100-f56f-4251-b86a-aa897f05ea85\n13df3684-573b-459e-944f-da4083a291dc\nf2a8bda2-008b-4733-8aa0-9d16c261f29a\na623ce7b-4633-4e22-a2c3-603430370b2b\n95071d7c-8465-4de3-8f83-391ab9aa8ef8\nd7fe5fd7-0852-40af-b1b8-4bb29d69ba12\na3e2807b-bb15-41fe-a51d-e0ac7d383222\nc157b0da-07e1-4189-b209-4c66896d65ae\n71d1e18c-9ea8-4ac4-9847-144e1f6c9944\n0593c9d5-1634-44f2-bfe9-515c1a11279a\n656ae874-a04a-4bbc-8cfe-c177cd5fa388\nf810630f-bc9a-424a-a52c-eb9685f4a6c7\n22bd8d6c-3477-4bc9-98e5-f6677df184ad\nab75601e-f71e-4c39-be1f-974738c5cad2\n93b4c805-d9ba-4d7c-9feb-601cbfbfec34\neef5ce38-0a3b-49e7-aeb2-c9d1be8bbb9e\n025ad360-e993-4866-bd84-1668ccf311cb\na1afad56-47f6-4684-ba9a-0e96a89ca5b5\n7df71e0a-9cd4-47e6-b413-462dfcbb57cb\n70c40c72-f2a7-403f-90e1-c9e986d8f3ec\nef3152c7-65bf-4142-bc92-b73aef326ab1\nd9c6922f-4fe9-4e8d-9045-29885782ec3c\n32df4d8d-def3-4df3-bf1d-9e9a76abf90f\n55a2bbf4-45a5-4707-9383-dd0abdf41804\n6ba5d615-f883-41a3-9ca0-25e5194947b6\n4c4f4e6c-2f55-49d1-be16-e57a69b25cf1\n2abf0e4f-4e19-438d-969f-a412a68fd301\nf9d1ae0e-b19a-4566-bd2f-4e46359cd3ea\n869b50ba-d5b2-4cd7-9c83-bcb2c401f01e\n4fb51cda-354b-4039-91e5-01bd968a6340\n7c701fe9-e415-4de3-b6db-eddc093ac85c\nbae999a0-53fc-4310-800f-3607a9103f82\nfec806a5-1577-4ce1-957a-27e50d409199\n2cddbef5-1c29-4206-ba12-abc8d273e933\n00bde372-1b59-480b-81f8-a6511fe9ba5d\n46f1aef3-05b5-4145-9517-0bb74dd86f46\nba697ae3-5f47-4e5c-b6e4-fdcf7b6662cb\n43504e39-9482-41f7-922c-48f1d1ecd730\n5567e14b-ebb0-435d-b549-6d386b875611\n8942c8f0-1bc6-4daf-8570-2c2aec488b19\n29f36612-02d0-4be5-a149-35d5aed5728b\nebb71208-4c5a-48fb-b063-e8bca970a042\n0e356d76-d587-4883-8cf1-4cb241cbed04\n1e75c648-5a51-472e-b25a-161c19d44e48\n036baeb0-f7a8-4757-b5c9-a291778972bb\n70b114a1-bf31-479a-a500-9adf9860e2da\n54a82cee-5e1b-45b1-907d-3b8d936a1cc8\n1ef77490-a9c6-4c82-8dd3-3d5956855b0b\n07be05af-9ffa-4dd8-a040-de57902b750f\nb23d02b8-6e73-4585-a2f8-fe9a47445d44\n4e8c8a55-7f6a-4b8f-af16-50678f35e66a\n251b551c-9003-4d0b-abb7-38703411952d\n7d2df1af-8d27-4188-8ba8-6b91d59dbd37\nfa83e4f1-22ac-474f-b484-8ff0ccdd05d4\n3116dc7a-4a3d-4096-a7ae-6e3b779f139e\n6983a30d-adfd-4a9c-a051-d5a9633e1fc6\n5c01cd05-5c82-4136-a7c5-5989f20ca1bb\n636328fa-61a1-4624-98fa-54bfb3da1265\nb5f86f0b-affa-4127-9cce-b098a9b880b7\n29038de2-c3a7-4e81-9318-d23b9b7c6c71\n2d19e49f-aff7-475f-8323-7cd8912c88be\n9c94244a-e9f8-462d-a6d2-46f7a77178ae\na5f6e16a-b4fd-4948-b5a8-394f1c8f85ed\n37c53ce7-04f0-4b55-a054-0a5060f9815a\n8862d5ca-9bb7-4edb-be08-902e20df50e7\nc2b5fa70-364d-4b78-8eee-e40154d5ee85\n62b59c38-944b-415b-aeab-dccdb95ecd9e\n2bd2fa23-afda-42fd-bf70-2e2e4980c377\n7aeffbdb-d6be-4dde-8e60-5f217d75bfa7\n24b0dbe6-6598-4afc-a515-1d074107b5ea\n046b6deb-5016-4674-8fb2-df1c4d79a04a\n6e5fd7ae-98e0-4b53-928f-496ffd609a95\n7cfc22d4-2408-40dd-bc6d-6623d6ae025f\n2b1d796c-62c4-42f5-80e6-791d44295bae\nb6c8082f-4794-4ba9-86f6-712085211e90\n8d745caf-ece6-4105-9927-81dcf7728b47\n4b20763b-ffd4-4ae1-bdfe-f247262ad47b\n91f58a69-de51-4ba7-8d7b-dfd5ff8e9826\n09d571c9-2f08-4d36-a8ab-8451ae32e205\n4f3d5dad-8bdc-4b88-a5c7-ea3e2fa9b0e2\n9b113463-3f5f-4eec-9e0b-68a3d13a32d9\n25469917-ff70-4d90-a700-6561a811cc7c\n1055a225-bb46-4875-baec-89f2ef299ecb\n940897f3-7423-452c-8725-8410eddd658e\nf1875b16-bef2-4676-88af-1b37aaed9916\nc4a74124-5552-4d95-9dfe-23f42488bedd\n7423d276-459b-47b8-9640-8816429c290a\n23aaa73c-0dd8-4d0e-9cf2-9e003f064d20\n4a81cd11-bbcd-4ad3-acd2-abb78e3e0675\n06ff7b9a-d7a9-4851-8b4a-ffbeea865ae2\n6b695855-2a03-4240-a8e2-c84b4333eade\n1283cbef-f99b-4690-9c4a-c29dcaab8456\n52b52b37-198f-4849-8d28-70f18ba393ba\nb8578142-dd62-4123-8eb7-1b79beee9969\n0d8c8e84-dafe-41e7-a3d6-9bb76f4aff66\n3cd327f6-1c11-490f-b6a9-e04dcc4c5865\n069a32c6-b6c0-4b3f-a1d7-186b7aa9aa08\n038a0862-fbf3-4155-9c2b-425b1570aaec\n72ab1c75-00bc-47ea-9a94-38a9a8cfa99d\na30a9335-7d4f-4e64-aaa4-f2d3166ea3b9\ne1614714-fe21-4a85-bdba-5e7e4c48393d\ncdfd0c54-0deb-4077-9758-4e9badec0b25\n2f40db27-df94-4bbe-87a2-c6e5db27bdf3\n0d4f8777-eb7c-4061-95de-9d6a73e0e7af\n640008d0-8ca5-44c3-bb88-253f9b66d06d\n4e0846a1-6cfa-4c80-986c-8087fe0bef50\nfa9285d0-064f-44d1-bb45-85255dec0d6c\n89f0a155-d38c-4af2-9542-1dff2d40d52a\n6d93a4f0-7a18-4519-83d3-b47101bcc4f5\n9a5137bf-e36e-462d-bd5f-78b37df6c588\nbe71b8e6-cf09-4f83-9229-d0b77fa98989\ncbcc30ea-c3fc-4449-8965-daacf1cadf1e\nd612122a-202c-45cd-bc5e-48b82343fe1c\nbd4a03f3-fc45-43fe-9a8c-c10c827da9bf\n9d454c3b-33c7-4eee-bce8-6eef58806ce3\n0fa7d3dd-60ef-47c3-8a3b-9f5bfdaadf09\n328ca128-4181-418b-ab13-bdf4c918f3a8\n99ff438a-3b88-47df-b365-c76d23c035a7\n87f27884-b625-4e44-84b3-565195315a80\nb26d9f1f-5609-4428-b5af-4c6161cc57f6\n2a1d25ea-3c8d-4e39-b0cf-8bab7c476651\nf66863b2-5339-4f31-9c36-5b9c92819096\na6b4607d-bf70-456a-8772-18185e3372b1\nc94e1cb1-3e2f-4288-995e-489e338402c6\ned97da7d-1b85-4278-8eb7-866f193dd47d\nd17516c9-6176-4b5c-a1a4-e7bb2197cd92\n61ee2fe9-4f9e-47ea-ac3c-8f8e34916245\n7dab83c1-7b3d-491d-b1b3-3c3c3d148939\nba29fce1-db72-45fa-b50f-81e7ffa41a34\n914c8241-e196-4eb1-a9ac-5f125584b508\nf6f32a17-c9a4-44a4-a201-79986e7fefe1\n47b6ef87-fe7b-4abb-9217-1f8a792b185b\nae942925-e11d-4a82-a461-5dfbc4d7d4ed\n6d821bbe-ed87-4f32-8e96-98ca5dc60cc1\n54b72b91-7cec-4f81-92ff-bb0d3edf1fcb\n456acc4f-d08c-4a73-9a1d-2573b1262789\nbcd9e31a-7622-4072-94f0-b817529c0dc5\ncd4d1385-6ea3-48ca-9079-a713aa753c02\nadb71fa9-2985-4df6-859b-a80c03f62a79\n2ca9a913-cf7b-465d-af80-7b394e834ea9\na8c2c77d-a50c-45ed-9950-feabc062a838\n86e3fca8-cb29-49ad-a615-9c19dfa8cf1e\n40c48673-6ae9-4f66-871a-aaac214cf220\n800249aa-357d-4fdc-8a80-6de58d96a2ab\ne1a4e295-6c18-43c3-b739-7f29de84202d\n0982788b-8515-4106-a4a9-517dedfa9c16\n51ced89b-c2af-4625-b52b-f70ce86232aa\n9baae06f-cadd-4c6a-9640-1af9e1112634\nbba867cd-2eb5-4ee0-8ced-28abe9d2861c\ndc058dfb-61db-492f-92a8-0472b7a5f7f4\nc57e1920-654b-49b8-a1d7-58785d1038a1\n1775d4f9-33aa-4a34-a45f-889a3a371388\n34a77b9f-e173-4c62-a459-af878697fbe7\na345927f-3bf5-4fca-b981-aeb0f37afac3\n1acf299e-55f3-479e-bfd7-2e56c7894d71\nb2e9fd68-531f-4d9b-90cb-629e562357ed\n88837e96-caf2-4730-ba20-5e64f68fd4c6\n3c1e387f-4c2e-47a5-bc02-927863e8161c\nd31a4bc2-1bbb-4eca-8447-97b0d740885d\ndbb1a5f4-a166-4aec-be1c-1f42acc9846e\nccc61bc9-dea0-4b9c-b876-7d1f95c46c8c\n8afc0993-213f-40c4-9a56-663bbb381f2f\na36cd385-3044-4738-ba93-7936554153a8\nbe4098ad-eedb-42d1-8fc4-a63a78307a07\n300a2577-d749-4c04-936f-41034d8930f4\n2c0c7db8-abd9-419d-a01c-72c2e1fcb6f4\n8f2dbdc1-c7c2-4adc-90db-43b1358c8484\n21eb672f-a225-4028-b42c-74b5389a7d5d\nf343461e-7ec6-472b-8620-16ae9871aeb3\nc5198c74-b596-4fa7-910b-1214471dcf61\ne153e869-a66c-495e-8479-2f7aa5267398\n13b21544-468f-4c92-84e7-c2e1fe327b44\n25a9d8dc-d49b-4248-9b95-9c46f9b0bffd\n72198164-c08d-4fb9-94f7-e9659b2588f9\naee7930a-4698-4661-9a18-b337a2c38d97\n8e54567c-15ba-423b-abea-37a0c819ef1c\n68280d5c-55e3-49fe-80ad-fd6e3123ab4d\ne86fce16-deeb-47d1-8ae0-fbea0e4ec2cc\n676c0700-60a9-463b-97e0-9b7e49520c3a\nb64d9c6e-0934-49f3-911e-eee1027beb26\n0c68bcaf-4c9e-402e-bb4d-575588956c62\nb0380d85-8b00-4fed-b59c-ebd9e6d305ec\n9cf22bdf-db9e-4425-9501-6624e6c174e0\n6a4e904d-c983-4112-95d6-aa75b239f3d4\n6740231b-d265-4a45-8b06-49b4da3627f5\ne58c36dc-3d7e-4bbe-85c1-7a79a0c2dae0\n47fa3d36-5f25-42e7-a998-5635902c1956\n652c3181-69bd-4a52-858b-bbb6d8e004c3\n2be77a35-1092-41a2-920a-563f5ff2aaf5\n0af68fd3-fe5a-43b3-946a-e7ba72e355e9\n5625c51e-e442-4e36-89a6-db6fd529a94d\nce14c6d7-72b2-490e-8e26-d6ded1d25872\ne43d294f-b06b-4a7f-800f-51876f7ea913\n7a6f3636-3097-4d53-a31f-62f3eee96aa2\n5c030716-b87f-4ed6-9a00-872acbc8a7af\n7485f130-ccc7-41b8-90f5-957843e0fdaa\n5247cb0e-19e0-4fc4-b30d-705a1d80ecc9\n03d96287-7c22-429d-9eff-64f5552d0645\n5e59e725-d1ea-4eed-b4ce-fcd49171d26b\n943a936e-c82c-4898-8898-7519f84c278c\nc13201cc-8872-4ee0-95b7-d6e3d34ddf4e\nd9f17f4e-4ac4-4aed-b4aa-c7ca367bb8bd\n7a568f69-24e3-4511-a906-d1d36458ab20\naf245eb0-acdf-482b-8122-6f0125f03fd4\n415171f0-1279-4f1f-9229-fc491fb8531e\n617ee8b0-a877-4fba-a642-3c3a81acd85a\nd1df839f-e461-4f5a-b313-82d8a3ae22e1\n201f7d6e-56e5-4d5d-9815-1b4eef66269b\ncba67de5-680e-462f-90ba-3ad2e4f065d4\n88e65e15-c0c7-4a95-8a14-c155ebb8b913\n44643c0a-93cc-4f17-b54f-8a7a5568774e\nf2ddc781-7784-4612-9d2c-8c41e7e5a3d1\ndba48e6b-905d-486d-946c-c0a323f7e4bd\nb247caa1-902a-46ac-9a2b-2b1369931110\nd2740490-7ef0-4f32-baf4-8637da5fc2ad\nda40248c-6cc7-46a8-b39a-319301583e1f\n32f6e064-5deb-474a-a772-3847bb6bec45\nc26a842d-f041-4494-b0c4-cd88d63e70fb\n2752b070-879d-40fe-b2ba-f893b2d8c0c4\n3e615c4b-0244-4e27-8fa1-3266aa5ed881\nc74f2e76-e700-4fa0-85de-28f0cababde8\n6adb41f2-bd31-4aeb-921b-fab6d7098aba\ndfbe3918-13dd-4c26-8a73-d2ee5c79f78d\n11bff45d-044a-43b3-bc56-6378a2a4bad4\n3067c5df-73df-487a-94ef-309e107e9418\n762703b4-cf03-4c12-abda-b2b6d2697509\n42411a9d-9e0d-45c8-9a19-528a8810c130\n45c21e30-8053-4d13-8ca0-4aa273a21510\naae7c054-bfd1-443f-9044-f469e5b3dadc\n81ce9bd4-994e-4d9f-b372-e7cbeb0e00f9\n8317af9b-e9da-4186-9738-51dd04c74894\n301012bd-7c12-43bb-a3b7-b48b35000289\n9d43e0b8-bae6-4658-83f2-789ebcece9fa\ncf36334c-a504-40ba-8034-5c93bb8ce696\n09b1c791-d400-4a9e-9d27-37370f2f8c30\nd9cbf93e-22f8-4929-8c6e-042e6ae94ad0\nd2ffa617-8c51-4aef-b170-9fea61c4e03a\n454cc16c-ddbf-4fab-94ed-1f8c2effbb2e\nd5fe0977-1a4b-4922-8692-949acbfc8a33\ne8765ff1-6cfa-44a3-8a84-89b040c2cf59\n4402eaa1-1a16-4181-878f-fa56eda34b42\n14b9ed10-0f59-4cbb-9121-10f55b38f243\n43774475-76f7-4934-938b-84edf8634086\nffda19ac-9243-43ea-a944-3d8d55f0e937\ndd3c3984-9d95-44ec-a92c-45b8f2e9b226\n7b345398-ffc2-4a1c-af3a-c6d6c2b43a97\n494774df-c0f3-49ef-87b6-c703bc6e2fa6\n24a3c1b9-d0ae-4241-a0f0-2b4c157fbc4e\ne9a04ede-2121-4c8c-b169-8e9d3420971b\nc7286280-b3ab-4dc7-a0a7-e89cd991dcb6\n4a27cacf-5757-4a9e-b598-b5fe467a6699\n3b16ec7d-34ce-4c18-9581-7ebda7ca15a3\n9acea9b8-2e1b-48a8-a024-8fb3e5901803\n7a315834-222d-47e2-a3c8-f5d9ae3c5a1f\n3ad445b1-0f70-4774-8ce5-b69c92831c7e\n48073c15-8e21-40f9-a2bc-5a4d05b160ab\n455a7823-c8a3-46c4-9d35-f13b7d26fdc2\n0a695026-04cd-4249-a62f-f5036adb72ab\n9f3fab8f-bdd4-4051-b23b-d122b087e85c\nd52e48b7-47f5-4a93-b0a3-6247b65dbfc2\nf94aa3ec-bdf5-4d5b-b70d-8128ed8d9244\n81026212-97ed-4912-88a5-3a67555d520b\n933530c9-ef0f-4cdc-ad81-59534db56ef0\n7ed12f30-0189-4b88-869b-f22a8c0f6aef\n9f2341e4-3c32-49f5-9239-fe52062d0d47\n2bde75fb-f370-4378-9d88-9c4a8978ec8c\nb655a0c1-7c88-4d65-8012-87d3c779968f\n1bc28f27-6509-40d1-82da-170f817a05f5\n896582dc-bdca-499f-a065-d496c9cc48cf\nbd372316-d07f-41db-a36e-16ab15c47ecc\n26f93c73-c777-46db-9fa7-e460ceda704d\ndb871442-7dad-4e74-9c58-a7dc7b5c3d4d\n93748690-9a48-48fc-8e78-f5c5110f5406\n87ded7a9-1b83-4d91-98c8-733525fc0a50\nef5b40bf-5243-43c0-bf34-7f0fb7e12139\n77b0b91d-e4e7-4fcc-8998-829b95989763\n47a9a28b-1275-4935-8763-3e0b5b404119\nbdc6091d-76f2-41a6-989f-617ea523308c\n9a22b9a6-840c-45f7-8c95-d536b3a2c012\n08d7ef7c-b10e-4642-be71-476e5cb6de2a\nae99266c-8d17-4a67-92bd-73460c56cbc9\na68fa14e-45e1-4e22-887b-478786d5eb55\n3bf5214e-526d-4e14-9eb8-6c7743416a78\n939b46d9-e53e-4100-bee6-0da8c26de5c9\n47e14a16-bd83-44fb-9e28-faf9a148b869\n6683703a-0027-493b-b374-7a70e7bc0992\n195b4bae-3362-494c-98f8-125471340960\n4100a513-0442-4334-80eb-668646121d4f\n5ab4b577-e256-44a2-8f74-b3af05f5dcd8\n75fa6e7a-803e-4057-ac4d-7f2b53943143\n7bdb18b8-317c-4c47-bd1e-33301cf73a71\nacced79f-fdb7-44c9-ae53-d4a6288ec384\nf9742ff9-f42d-4402-9d4a-4807f52f4614\n125dd4ee-b1fc-42b6-820e-b5a830a6649a\n29a236d9-4589-45f4-864d-417ce54b74dd\n5811cc8a-5e4e-4f4f-91fa-8bae6d7bbcee\n9f5f1fd2-fe83-4d49-b88e-c7d4c94abbfa\nc31d857a-17c9-48ac-8871-30da10fc3547\n42b0c297-6b25-41e0-8173-3a76fdb2660c\nd4ccad9d-696b-4b5d-8ef8-e1059a0a8183\n0b80b557-fb9d-4a31-910a-c87f52389f79\n486fd274-6a43-4c7b-86a5-14dabc869393\n7c17274c-5f46-4974-8670-f2d1915c2693\n12a6a15c-e25c-4a0b-846d-993f8e12b84f\ncb8bfc8e-592c-4c6d-b995-47e3ec064b9a\n3cf572a5-1f4e-47d7-8ab6-729a82b3464e\n8c7de741-1c11-4353-90cf-26676aa0b650\n0b92c809-3679-4e9c-bab9-d501447e626e\n8f59c090-6099-4a0f-af5c-1ee21a5727a9\ne1ceeffd-a0de-457a-90b5-4950d24919a3\n254cd813-46ea-43ca-9633-7207f42fdacd\n8457604c-b90c-4740-81ee-091df4693028\ne456eb18-8f41-483c-9326-9e33d6c9ed1d\n7f31e3a4-f23b-494d-829e-00c13e83b849\nfea75cc6-759e-48e6-bdf1-e59598e3cbd0\n6c297f19-cddd-4027-a76e-6bab871014a5\n383e561c-e9b3-4ffd-8131-5ebbc18999e5\nb7a9b1b8-b236-4971-bb3a-6b5a17698865\n1d378a2d-50a3-4c22-b933-bba4f79d171b\n5657500a-db14-4da0-9407-765ca9071dd7\n2265c251-82aa-44b6-a9d2-5b05b96ffaef\n241d4baa-0fd4-47c0-b13b-23254c0f3556\n522ef9f0-4884-4313-aa38-6bb353f2524d\nf3f8fc80-51cf-46d6-8fec-4a81f411ae72\n4d371c5b-13ca-4a2b-8953-c753780c1eaa\nd7ab7438-0216-4e6f-8fd0-e4f3e8c350f9\nc2c078d3-3ed1-482d-8f69-3369648e552a\nec5cc619-b88f-4bd3-85ea-dc17c0acfc6e\nd0a272d1-0488-4504-b1f2-78cc2de88a86\n1094250f-1562-4f7b-9d8b-af73c0398d6c\nb541e5f6-1a99-4708-8c17-8f7287676929\n963459a6-817d-4a10-8b24-830687d180f7\n1dc41f89-03a8-4671-98ef-1980b1368356\n15dc21b4-d82a-448e-b04f-4432727dc92e\ndd607a48-4f87-4c65-b7c7-290041f90593\n144bd08b-efbc-4d60-9702-cf09bc343e99\n67da2d7b-96d2-4862-9ed0-9517365401e0\n7c25f619-2c2e-447b-9c2c-cf062c69b5e7\neefeabda-0f58-4ed0-be1e-a83e22ec6436\n293ef89e-def3-4ed9-a9b9-8efb7234430e\nc2739e86-b04b-4af9-8f58-add2c2cb501c\n9b403f68-7daa-47a4-ac34-dc4f6ab6e69f\n7e979cdb-f0b6-4bc2-8f9a-bff17962743c\n8f063613-c9d8-4c2c-bffd-dcab748d2536\nec3783a8-7dd0-41f1-afd0-9115b7c3f854\nbe20c324-4fbe-4df9-8a95-46f443fb9a67\n1bd05de2-3cc7-458e-beac-59cd8d88666e\n2ca9abd9-b2b5-4158-8019-53fb8ea0c76b\n1819ab49-0676-4b58-a1ce-7b6f608869ae\n56a2ebde-b587-4d06-8846-8b118d0eb06c\n5e438657-eb9c-4317-8680-36eaa1cb393e\n5ee9215e-e675-49fa-b6e9-646699a8c5ac\n07c88d31-6804-4a2a-8983-1001fb0c0768\nd026a4e8-3c98-4ca5-9021-be48587142f2\ncc61718a-d748-4dae-a213-8f08c1214936\ne68ba44f-4920-4e18-8d08-0f19c5abebe0\n5007021a-8963-4449-bf5d-312a613d47a4\na1a2d8be-6917-4831-9089-60f4e5bcd421\ncc7d58b3-8512-4751-bfa7-d946a5a00764\n3480f615-0e17-4c05-9f91-1c98cb208c99\n15fccd22-5f0c-41fc-9788-3d6ad65cbbf0\neb39565e-5516-437b-892d-2cca9d8b946e\n07e801b0-b5dd-41b7-b4cc-1b2814e4d331\n031fc9ad-cf66-4302-8b4e-3fee962e96ec\n51e687f5-f49b-4c6f-b1fd-3df350b5ca71\ne71debb8-c359-452e-9d1a-9059813631be\n3efaf25c-5dcf-484d-84b0-2eb97b57466c\nc1ad9fbe-c08f-4aef-99fc-733c615239e7\nc9b8d845-0491-4bba-a692-2462266df060\n78cf6f53-06a8-467b-bfeb-09cbc06a0747\ne1808df2-470e-4477-ad0a-d45b4e68de3f\nce292839-6e62-491b-9977-ed6cbec59fe4\n62756136-4b0e-4883-961a-d05bb4b03a07\n448d4852-9864-444e-bf62-da3802a35d42\nd210577f-969b-4cf6-ac63-e7fb6e040acb\n5b6eb6e4-b205-406f-b711-b9c970dc908b\n1296e3cc-10fd-4aad-b0ae-83fa792edaff\n4ce3dacf-afaf-4103-a137-608adfc4e02d\nc791bd10-f31e-4f2b-a4e5-5a12c8946305\n2b7893a8-5f69-4e2f-85a3-32990f549026\nfeb5db1a-5023-4c57-b000-84116c0df7fa\n3fd89142-98f6-47fd-896a-7e4a0301c5fb\nb511ec64-1ecf-40aa-a836-1ecd6e5f6d29\ndfd22378-c3b0-40ce-ba05-701d15dfb5f6\n3c0d2e20-4a8a-4f86-885e-59289e10efd4\n958939c1-1232-4f0a-8f25-26429bf07463\ndfb73dae-9c8a-4e26-9a96-06c0c5a01959\ncd68d6dc-60a9-451a-9668-a6a46145df0c\nb0e60ef4-9a0c-49a8-b23c-bbd5a475d79c\n6ddd3298-fa98-475c-9f4c-945f7216955e\n35263b66-72c4-428b-ad3f-3b3de4b06516\n1208d5a0-1aca-4b73-b862-e1d0ac3149ce\n30ee4114-f86e-4c51-b896-769c27c256a6\nfc6b1cf2-c592-4e30-a24c-3a9b0fad9165\n2822c49d-52e3-4ff0-bb05-a9830cf544d3\n4e5ae584-f83b-45fe-a2c0-7afc5bd206f2\n789c2a21-4774-4369-acba-dbd50df81ef1\n4052d78f-0b8e-4857-972c-2476e5df6a77\n57f064a1-21bf-4a9e-8dc3-28297885f385\n6ee42656-567a-42e8-bde8-22731892dfb0\n54812685-39ba-47b0-950b-7227f691028e\nc8a34bf1-48d2-4baa-a54a-cbe906be525b\n9ec87ba7-9749-412f-a6bb-08b22699c0f6\n08ea0dc9-e886-44dd-84d5-4feb7f9e8d9c\n6cd89a74-5209-48dd-8dbe-3dac97f7838e\n26cdfc6f-ee24-4de2-88a7-ebd599c50de0\nf77d18d7-14dc-4ae7-a595-cd23013b1a40\nba573a9a-8024-44c1-9ccf-56fd8e5d07ee\n2fc35e6c-6c5f-4203-9d9a-7d8f3837aeab\n2a934b17-ae5c-4868-9abe-399919fc2403\nbd4baa1d-ec2e-4a30-b066-15e0425cff12\ndd39ed21-aa96-43e6-85e2-2cc3bcce8336\n6e221ab6-f837-4dc7-ab9f-8c9e1bbc6ac9\n80dcbf04-ba99-4cff-a232-e36b24776dfd\n654b9957-05e9-45ea-bf50-183b1dd15347\n73b8cde2-c624-4bb3-bd37-dcdf7bf4ab8a\n6cb8597e-22d0-42c8-9ec9-6277d901ebfd\n3211a540-504f-4b78-86e1-bc9f58755ebf\n57fb8e03-708c-4da2-97bc-bbcf0746e52e\n27e3ccfd-44dd-483e-aaa8-8771493c69de\nca95aa85-36f4-4c49-b893-d5358f5c389c\n38a6c25e-20eb-4a23-a621-5c219708d08e\n6a48d95a-0996-456e-b7da-8ca62c1d562d\n3bbe480b-e26b-47c5-b723-0cf3737cca35\n8ad8e6bc-27f9-4362-a729-3416a1428db1\nb27693ae-daa9-42bc-a36a-e3ae38534d6a\nf6dc86e4-6715-47af-8b24-11e557baabc6\n86821ec0-3721-41c4-8ca2-b34e1fbe9df0\nfd943c2e-bf2e-432a-8725-0a9a1821eb16\nab660334-0c8b-447f-af89-26ead05817b5\n11dc74eb-beaa-443a-814c-9b87277a9658\n62dc95bf-d085-4255-844f-3c66aefca445\na8ebfd9d-4349-4947-9311-b1d4c3e18296\ndc48466c-ad1b-4f91-bc4d-0933592d475e\ndedef3ba-ef63-49fa-8768-288e90c8c21c\na24107a6-f497-4b48-890d-6502a9785dc9\n8c4ec8f0-272b-4a57-84e7-bdfb81186e58\n9651a9b4-e86b-4115-aae5-dff3997da9cb\na589acc9-cdec-4672-864f-f6eea70608c6\n61765a56-85d6-4577-93c4-e4a50dd7f75d\n3f831567-c4f6-4608-b017-6187d887c468\na7258f29-b555-486c-9bf6-037febbe7265\nc41961cd-35f8-466b-abf0-f6cb24b9b3cf\n19a5305f-4237-45d4-b130-a3afc383ec15\n8f0c2dbf-3160-4cde-94b9-3c8243d7e047\n4982b699-c513-4a1e-9e74-83adf2f6a7f7\nb9c6d2d4-e043-4061-82e0-ea23f4d8a660\nee3b6fc0-4e9d-4c6c-97e9-c64d39a83365\nd3686b4c-5968-47e8-96e0-7b3c49159003\nb03e0c64-4901-4d06-875c-37e7723d49b4\nb1ce2398-f5fd-4df0-947b-d8b1e2c5fbf1\n0f1178b5-30f1-457d-ab8d-2617d65da596\nfe2456ae-c543-45d7-81bc-fcbc8eaf73a3\n5972f1f8-004c-4f32-be55-2e1cad506fc8\nd872f51e-2517-4efc-8087-af45fccdee1a\n7cb5f4c8-26e7-4f77-9a52-7aced45d5d24\n28dc015a-9c62-410e-840e-656ebdcae206\n547c9dbe-9686-4744-b338-096d4d46c178\n04254a7b-fad0-41fa-bece-5cf3c1f783ad\n63e635f6-bcf9-4a60-bc16-c00e44d014ee\nfe0d84df-0c79-4c48-8f45-422f415a35e8\n9000c0b0-c431-4294-a2dd-d42ad0403989\n94fc1318-5be4-440c-b6e2-59ed93758d2c\n90e199eb-5d3f-408c-9b7f-517adbbcea94\n6fd47f1c-802d-4729-90d2-d60af81f9f93\nfb981239-591f-4db6-9384-fd999542c24b\ndafb1346-9fb5-49a9-9193-d2f93f67a4cc\n608f15e0-3ffa-49b2-af31-1d725e757593\n1e1de41f-bb90-4cee-99fc-a36af500e6a6\n4410e59a-ff4d-4349-8f76-454aa395712e\n09d0fbd3-e953-4acc-8c19-eba6bd3593dd\nb606c86f-8dce-4405-b487-47fd7c4ab3a0\n261e77c8-ff8e-41e7-96fe-2bca2d885b51\n6720e8c6-fbab-43dc-9b21-0b3acc124579\nb2617f21-bd88-45ed-b942-dc0e128a8e38\n0bb4b993-9c16-4bb1-825b-3d634a319fdf\nbc423373-d3d3-4964-8d71-e7feb186c78b\n2923745d-3573-4bb6-8203-90045f9b734e\nacf78759-6479-4349-a9cc-71dd1907dc50\n52b36f81-a887-4a4a-8afa-711c7bc043d7\n4c791c62-6999-4739-8575-4f49d641774f\n958faf88-07f8-4a04-a52a-d211a46d92b8\n7c23705c-8da4-4056-addc-247223b51a8f\n461cefec-366d-4d73-8a23-d6513b5abb16\n3b00464e-57b3-4a68-a9b4-71902a5ac727\nd77171cf-01cc-4e2e-b589-5168c1d7745f\n5d0b0fa3-acc9-42ad-b82f-b588b4b3a335\na23a0146-02cf-4022-93a6-a5e56e6d80f4\ne9866f2e-4e91-471c-9575-a2468f6a2dfb\n9eb57ee9-a306-4722-a0a1-d1712596916e\na536c41c-d8fa-4184-a76c-71f102106a42\n31fe638f-4911-4b7b-993d-5147ee79f39c\n342370d1-78d1-4cbe-9e72-c07ea5ff9bc9\na570b04b-e668-4adc-8790-50fc137906cb\ncac895f8-07ab-4f1a-af62-f216bb9feb17\n17212ebc-c970-4423-bd98-1d54c16acd7e\n40285c6d-44c6-4ccb-a03e-08f5d74224ab\n271f1d07-4fbc-4d86-83db-979df7cb18ac\n0c659963-5e6e-48f8-bc5e-9069e910cf42\n3ec4315f-7b23-4106-84e3-dbc701c2852a\nbff90b2a-cb46-4605-9f8a-9e0f8c397a59\n406cf40f-c6db-4238-808a-1d2c836236f9\n7b21520e-fb50-469b-8002-1a65d9c533b6\n8b63e748-7850-4f76-ae6c-c201804f9c3d\n4d4171fd-d22b-4399-b3e5-5ecb390cee5d\nb7d7dc19-4a59-4f28-bbb5-7ca104536492\n349e44bb-47e4-47fe-ae11-a5c7e0e18fb5\n8397a54a-1e25-4108-bcf7-81f90a830f6d\n79b2f592-f6ee-4187-992d-76a03ea919f6\n5dd21989-c836-40bc-aad6-be3cce572f81\nba238fbb-9225-4fea-a0ab-caa783acc8f3\n8af562cf-db25-439e-97f0-2af446c56c20\n8b8cd884-dd0e-4534-b92c-52dd8e9ae327\n9cd9fa73-a0d6-413e-98f9-2c57c11d96de\nb350048d-c7b1-4d8d-8b26-0c74118fb6f9\na25498fa-5015-476b-875d-2373436f4d83\na4d2b315-4c95-4acd-90a0-19244ebe80ad\n6b1cb13e-8410-4faa-baac-a2b15ae053ea\nb9b092f0-fd98-4b82-a032-acb54b466af1\n7ecccc4f-841b-4f08-8c90-1b464f0dff6b\ne4846918-f144-41c4-95c2-655020eeee24\n994ec039-6d5d-4d43-8204-bb17f38ec126\n9732106e-633e-47a1-be4a-bb6014000e06\n2d027834-d399-4bd8-8e0a-adaf69e8a2d4\nf2b51340-8834-4e38-bc22-933fd15ae2f9\nefd2817b-9337-4eeb-8da2-8b9d497ba75e\n8b944d83-77c1-4905-a087-f06171ad4ec0\n3959ac77-1e5a-4615-9aee-81e2b7457af8\n14ba5df3-4830-4cc8-8c3d-d165df99a992\nbe348ff5-0b24-42d8-a369-14622db87607\n33ab9c80-592c-4a1d-86cc-9d49548644ac\n8c162bba-9a29-4d42-a745-644587a59ff3\n167efba9-0c60-4efd-8562-93e1ef618295\nd186401f-1632-4c42-b119-2543526eb9ba\nee4bf659-e092-4eab-a308-c0fa6e22bb0b\n4115c751-724f-450b-9f1c-70dd30b68275\nd66a8f6f-48ac-4adc-8675-5b56bad60046\n2c89c871-4ff8-4c0d-8476-4ffad61a32fb\n0c6ec0e3-56e6-4753-b6bb-0751a0b6a128\na658d32a-9d87-4f40-86aa-5c8bd20fe037\n62b8d11f-9981-4fc6-bc6a-637371491e6e\n5137f2c7-9995-4eee-b256-73e79522a95c\n58dac73d-81dd-4bad-8ea7-7e10291feda2\n9b8f6f95-fc26-43c4-808d-7fd7f9cd46e3\n408089fc-b05e-4a10-bb28-9d142d4fa8fa\nd309c30f-e86e-43eb-8450-95650610f0e5\na8c5f64f-801e-4eb5-a260-38717e35bed2\nc0ac2322-c5aa-45e5-b0dc-482ced20bcda\n9dd765cd-1f51-4e3e-b4c1-28878920009f\n0dc89173-3380-41d7-8aca-d1d79bd18c31\nc2078082-c9e9-473d-8f86-b8ba1d0eaa9e\n9fcd7714-5601-468b-bbfa-951080bac1b2\n2dfec8e8-c094-4e7b-8c77-2b65a4ec8b12\na5a837d6-7acb-4f80-bd19-de5a6e24b8ac\n5d7b81bb-ad45-4e54-ad32-75a7f6b1b3a2\na1b5e9ae-74d6-4186-9378-a4d097ae6467\nc0a3b57e-46e6-47c8-b1e1-524f14321254\ndffb1e7f-950d-4eef-9409-da00bf63301d\ne8355b75-1225-45a4-a0f6-e00bd15d1e1e\n0ed6f965-1a31-45ee-b6c5-e02f02753f8a\n0e599f5b-4f58-44d7-8541-7aa4184a717e\n9d75b3eb-7e93-4a05-9075-47077ffd562e\nfca36fba-47ca-4ca4-834f-55c305c3cb08\nbb9f24f3-47fe-458f-b97b-c8bb3d765985\nfa33d480-df79-4a93-9f7b-6619f3c4d72a\n0e4e9bbd-8ba7-4f23-adbe-c07af90f3d4d\n3ff5d1b5-bb59-4fb0-b5b4-8806747cda9a\n5995ca9e-c375-40c1-8786-0d9ec901b3f7\nb80bd75f-6378-4385-9008-8974224279a5\nec51df62-6be5-40f8-9eef-46665478b77c\n644796a5-2620-49e8-922f-372056fcb0fe\n729de87b-3e64-4336-baf9-f7ce3068d1d0\n5e6e671f-a5ae-403b-8f6b-8c51ffeb2424\nf086ff66-d3c5-4c66-a375-fcd67a47e37e\n8fda0806-f9a5-494f-b3af-4ac16e7fd067\n763335be-e9c6-4227-838f-4bc33044ef45\n1cacf7d4-3781-458c-adf7-d5180e45ceba\n183a7b97-4cf2-4065-99f8-c88f86269971\nc2b47685-27b9-4eac-b84e-95e9af6b864e\n3ec45998-b9fa-4a4c-b84c-1290fb97ef88\n54c5fbf5-82b5-4982-9bb0-8eb86286b132\nacbf74f9-bdf2-4077-9e08-18008855002e\n48b34c98-2cff-4884-bb5f-0a790c4b3a2d\na2534459-2264-4518-b35f-d39c442a2ab5\n5081a29b-5532-4c08-b9cc-a5298c4359dc\na5ba4634-6689-4512-8a0a-3f8f504f5606\ned5f736f-d70d-4f48-9e46-ab6fea7666dc\nb4e9cf91-1279-4326-9256-166459612819\nc368a729-48c5-4a24-ac0f-f14d78995c36\n9a2c70f0-396a-4d6b-ae91-6055245a0f3f\nce0c3a41-e6be-4480-aa3c-224d51f231d6\n5aef1e30-5b8c-4e7e-8c27-f98a452dd7f6\n7cf7b1df-92f4-43ec-ad79-1866358ed0a6\nc8580471-46fd-4ed9-a587-1575312ebbe2\n5af5c6cf-f793-4ba1-9a2e-692c4ae07600\nbf7ecb6e-2478-40bf-8707-c2c72f24fbc6\ncbadb6c1-4c8c-4fed-9f13-3de62843d8da\n531ec13f-d630-4c20-9f49-47293295d426\n0801f7cc-2fd3-4359-a60e-25059a28b419\n3e42dfcd-320f-481f-a176-66356749e024\n5fe1ec64-ead3-43a1-ac58-8d76d722d5b2\n268d6e1a-aa2c-49f3-b0da-1906aee1cde2\n58254fcc-068d-4fef-b5d2-2806ec7ae94e\nb810b4d4-6a41-485d-8737-946a9a121e98\n15cd8866-e0ec-4a11-a511-104bf0a7c915\n8c6bb3ad-76c5-458d-a8a9-fb230fe47575\n3809fcaa-af78-4638-93db-a260b1e09a08\n9a332e96-732b-4bce-b37b-38c22b3e5417\n6d32a9a2-086b-472f-b502-caba205ed050\n95290ea0-d1ef-4508-b40b-2ead6e1cb09e\n4ee9da38-9d85-4af9-bdc0-8c52fc9a4214\n49520f99-8aad-4ce4-8a8b-e9df04af406e\n7e4ed57b-11e6-43a5-bdb1-c63e9982c5e6\n60829549-076c-40a8-b586-7c6f35516095\nfec8999d-68a8-431d-9567-72a5c8248c9d\ndef30355-074f-4879-b47e-f977e01d13f2\n53a710cc-5fc5-45ba-8be6-f9e34aad4e6c\ne2c6ccb8-947c-4a76-a68a-3c3e528a1da1\n7d03a219-2535-4969-b242-a64f182c5bad\n3275e0af-6058-476b-9943-c7e7de2f0a40\n78d7daaf-5e6c-4013-88ae-a0cc6d3c5484\nf497f3c1-6f91-45e7-abbe-b7d685209124\n0c941535-7314-4c73-b3b6-27bd51fca38a\ndb0e1e03-0123-4436-98ed-d0eaa0d04766\ne27826a7-879e-49ed-b71e-fe0f4e676b20\nad22afad-71b7-4f1c-8c12-5d371c42a463\n2da4d07c-a279-4041-81ae-6491dfab2035\ndfb315dc-8907-4978-bacd-5bd00b0a130d\n48965571-78d5-4c53-8ea0-a0cb949c494a\n84493b15-f045-47eb-9c22-a04a580a80d0\n51fe5766-bb26-4557-a9d4-b8fbda19e07c\nbd31ed3d-b5b5-4e84-87b1-6c32dfe427d2\n211e2c9e-83d4-43fb-a6c7-b2f40b8c1337\n56ef8f56-66fe-49a9-b06b-1b279bb1758c\n7267d129-ab20-47e8-a7e0-e4ae2f5b8866\nc65eba65-0653-4518-a3e2-2b2c9aaaf1e0\n97fb19d9-4f51-40cc-8016-f1ec31bf3d9d\nd0bab79b-6d9a-4243-9b0e-addb3b3851b5\n111ff940-9b43-4439-bed6-0e910804f807\n15e31508-24c7-4b15-b7b2-efd30bffea52\n23aa3fc8-b634-4266-b574-60c33f11df12\nd35b8978-2e6e-474e-8117-1bfc84a4bf2c\nfbd42d1e-11fb-4911-a750-9e0373518666\nc7da723a-4fea-4c1d-96dd-3a1fc9358139\na66b6dbb-2ece-44c2-b3b2-98567e4846ce\n2797dd71-65b7-42f3-a272-0f07d34bfa73\nf170addf-b422-4845-a62a-1c61aee6dd29\ncddfc6ff-c137-4e72-8c6a-bf3460df11d9\n294e8145-b90a-46bf-a38f-e87c22b284c2\n43695267-5a6a-4230-914c-dff173d6df9d\na229b705-b3db-4dd1-b308-c374a20ad05a\n2345117d-3e16-4d9c-9171-771932ca3dd1\n5e3f3102-bbdf-4b8d-afec-aa77b239ea12\na972cc1f-6c37-450d-8d9a-4c0a4b2b62f5\n7e0aedb0-82c4-40bf-981f-0ea6474ea09e\n7724f41f-2070-4421-8bd7-12e0720b0804\ne84cf7ad-1d23-4d3e-8ae7-3462f8c9e54d\nce867556-749c-4a63-86df-9edccd7f37d3\n2d57b7f5-8735-4da4-9238-047312135e9b\n1586b3df-2176-45f9-9294-a3be1689509f\n43394ed9-2e70-41ac-9a5b-7ff370acc575\n438416cb-66c6-4700-ac05-7aa1c7522bf1\nac2fa63a-512b-4358-aeb3-6bd232d360b4\n8228ec1f-41d5-41e1-b050-5d19520e8db5\n475635b9-da3e-4e4c-8aa1-1391ad17c532\n4b1dc4a5-4b43-43d0-91b9-62dee613f15a\n1e48a6e0-f327-4f3a-9bfb-0b4509a5eadd\na7e12987-4321-4de9-8bd6-5f2e3fcd7d02\nf476b8c7-d662-4ea0-bda8-7b1e3c309e53\n01b1b112-35fe-4a3d-8f87-7e255be83746\nb11009f0-af0f-434c-94c9-06a30525641c\n306bbc70-3b30-4f89-b69b-d4763333aac0\nfc7faff4-5006-4ee4-8e10-f02aa13d98c9\ndaeae108-3ff8-494b-9cae-94761dd8b73c\n03cdc1b9-1ebe-45cb-b9b8-f894e6e1fad8\n40726be7-9c18-4ba5-8567-b04270419996\n4c86fed4-a5d9-4f07-815a-bf292f199bfb\n0ce2cf29-2027-4fa9-8efa-d8fd04b38383\n837bceff-e8dc-4b38-892c-2992e57d0a5c\nf9c78830-b56d-4b8d-a625-18b6d88213e0\n891b98b7-8ca2-4f60-9501-f391f3a62175\n200a29a0-2e6a-4c4f-9910-93a2816ead5c\nab40d9bb-7745-4267-b82d-6a917b790b09\n06ce61d3-6bdf-4244-b267-16e461ee3732\nd9a47210-5fd0-438e-9c9b-8d11e0689e65\n4df9330a-ddeb-4c1e-9a95-ea16b23f8017\nda12ba04-c839-4d39-8c63-0a007f760d84\n4ec759ee-608b-458e-89d1-ae81bc37220f\n180c9d48-45c1-4d0c-83e1-025c7a96cd80\ne84279b2-54fd-47f9-a2fd-7e283cbfeee3\n8131ebb3-c6cb-40a0-8fb3-717f15e3311b\n34a426ca-83f3-4165-896b-f690c704976c\n7b594ce6-7013-4e14-a7b5-beee45a221f4\n4013173b-6270-4fb2-808f-50cc69051395\nc1d7ecca-62e7-4297-9c17-dc835a6e6d4f\n3488aa03-cbe4-4f5c-b424-5a824c8cab18\nffc4c3a6-9109-472e-9153-3b60b79d2790\nbaafb023-e058-41ba-8839-628f24b05672\n8ad467eb-2bd0-4d3f-964d-afdcbce4e9ba\n1df470d6-2ac6-44df-955d-49f63ab4efd0\nf769bc6b-5dd6-4219-9040-8ef4ccaab850\n3e1f22ae-1cc3-495f-a05e-45811808ddbf\nc6b9ceb2-7bf9-4731-b9ec-33e4ec705b81\n20d09aef-c8e8-4975-8821-b77390272c9d\ne90f9a4f-762b-4572-9e0b-52aa25944e09\n876f0e13-167b-444c-95c3-e38b06bad820\n6397d055-a3c4-44f7-aa8b-dde2891aaa4b\n27f0ba00-e939-4f22-9e6e-10140766b27f\nf0d61f86-5e2c-44da-8c49-8f274664f02c\n37c6ce10-b72b-44ca-b38c-61cb7b859812\nbd3b8799-8df8-42c7-bf07-6df9ea18917c\n871264b7-cfce-4c22-9465-9dedcd1af936\n7d0925ca-bf9e-4fa8-a22f-f26dd538038f\n5e00e929-f968-4aae-aad6-9faad4632858\n2eb83826-c41e-4489-8145-8b6dae33326d\nc61c79fb-23f2-4c48-aa55-091b012b9240\n5df4cc1d-507d-4881-afbf-3ad639510c0b\n873f350e-55f9-4dd1-8e42-7456d8062244\n2cc92604-9610-46fa-b693-313f7302ae78\n8fa99851-c123-4aa8-949d-8fc05a35935e\n98af7357-922b-4240-90d0-14e30ff4b25b\nb316647f-1602-4b8d-ae8e-2c9b9aaca0d6\ncee2cbf8-43fb-42c4-a816-408e62955c8a\na2bce4eb-a9b9-476d-8377-9f33aeb20e5f\ncee0ba75-988d-4404-a556-7e3c5384843c\ncedf860a-d7c4-4e27-aeae-577c7aff6bc8\n7f7c31f1-53d8-4725-9c79-cb1af3e1b5a5\n8b948e66-23f8-4064-8f9a-51ec5db15b84\ncffb25c3-118e-4e2a-bf62-b53ea38bf76b\n95927eb9-f557-478e-9f98-c10c143e5e52\n6106aa4b-7165-4cf6-8ecb-7900f26c6e44\nfe7ac601-436c-42f1-adf3-ae9f81cc9576\n71b86095-c82d-4906-b551-42ada07bb3b1\n681df49c-cf22-4216-a67f-430567fedced\n47b1cf7a-f144-4353-b48c-525f369e547e\n5c2bb03c-4595-446f-9798-17955f8ade90\ne719041a-a458-4a4e-bb7b-65f30177136b\n5dd029b6-3713-4416-b123-375804d13d89\n4e5a56f5-7748-4ce4-82f1-ae1742a4144c\nb339d4bc-0a1d-4f9f-993f-e4cf0e7c0a8a\nb1935ae9-0748-4945-a24f-d11d0ba3170f\n432d54c3-c725-401d-8c11-4564e933e484\n5d356657-a332-4fd5-9637-239c975ffcb1\n4bf3fc2d-02ee-47b1-b836-1445914c48fe\n96ae89e3-5f10-4ce8-b90c-a96c639689fd\n295f01dc-0fb6-4117-816e-f7df17d6b812\n63e7ccbe-8831-470d-817d-7aec8ea7dbf8\n2d582803-b3c5-4b00-ab56-3127226c7e96\n7903362f-3218-4f5e-b503-87be9f51e9f6\n4a49e27d-c9f9-4dde-8db0-c2265c6fed5a\nf419f939-e031-428d-b360-9112ef912def\n29e93bcb-26c8-4836-87a7-1baa77bebd86\n88bbc313-1618-4c91-bf0d-43595b86fb21\n3b2fa7a2-5563-448b-9193-4ab911ddc13d\na86952f1-8d0b-4913-94fd-1d5ef551137e\n56bf81bb-3c15-41bd-aaf2-24941a136322\n7aed6fd9-0f25-4b74-ac0b-259f9ff9d1b9\n6ac2994c-0230-47ac-a121-ed9619db4075\na625c7c2-ccc2-430f-9721-17442de0f0f8\ne5dea4d9-1c41-4e00-88c6-bb0575391ded\n7c31e780-96d8-42bd-8cf7-724eae9bec00\n8acb8dc1-839c-40a7-8baa-492a7aa23f44\nf3142488-194b-4dc7-9822-8365b9ef53cc\nd58b0d85-a712-40ef-a369-e010f115c5c5\nb8daa9af-bc1d-4ccc-9451-51ca43561495\nee58f2bd-1fe5-452a-b806-4e168fa32dd0\nef5a1014-fc7b-44fa-8138-a2b1c978dbd3\n97ea7b74-7abe-4fb6-a85b-2772d1f592f1\n0461eff3-d24e-4e95-ada5-2cb9c667b8ff\n5c88adef-d2ea-4102-b73e-7852444e5477\n90b05e56-de12-44da-843a-a0f9573df54a\n9c62fed5-3c31-438f-972d-3f01ca6bf33a\n4299fe69-a18b-424c-855b-5bc6d0e786fe\n13805488-903c-4ca4-926f-1190c35e82c0\nfa1c0260-6ae3-4461-9222-3bfb385256bc\n6762a48f-20fd-4789-a1de-afad43512201\nc3648b7e-b249-47b6-8a91-9c83c8be7d0d\n6c70ed60-d523-4769-ab0a-ead19e8968d3\nbe983aa1-095e-4f6d-8a79-07d0dd8b0198\n32e97bd5-bc80-4927-9271-1d04e1257cee\nec00bfef-3b01-44ba-b391-c910d15cb8ad\n76d34e9c-190b-4ce1-a9e1-43ba0a471fa2\n20faf037-9d93-4886-98c5-386ddba91b96\n4ed4ffa0-b832-4cac-afc9-6e9a1f65466c\n277cc5b6-4900-40fe-95ef-bf92f000e244\n9c0c6ced-23f7-4543-946d-9dbe999832c3\nd5fff24b-024d-44a8-b7f6-bd5e70f814b6\nbb5181b0-bd00-41df-85ab-31895c46b4e4\n1e3d978f-79c1-4341-9071-62088bdbb6d2\n4774b27d-bf2f-44f1-ba6f-e84e9710f893\n536e3a33-38ea-4e9d-9e7b-78594af32e99\n5622564b-30c0-41f3-b0fe-94b434d7a14c\nd053be50-a4d3-4b8a-9853-f8321ee6a0fa\n41c263ed-f12a-4d13-b917-a9c64494bb9b\ncc914d65-ccc8-4565-8dad-9ff4033c5b4e\n48af1111-e312-43e5-bab3-84688239ddab\nd0e311ab-920d-4a96-8894-9cf71c2faafb\n88c0d84f-3877-4147-a72d-bad3e3f0889d\n587a5da3-0dbd-4901-8237-3cbb870da812\n80b576a2-c520-4e42-a49c-904378f15c53\nc25decac-f956-4ada-b24f-7084ff1a9172\nd022ca38-4ad8-446e-a86f-c92a7bdd24c9\na073675b-571e-4246-bfce-50237bb7c99b\ne6db1235-358f-44e0-8db0-47bba0ca7da7\ndae8d081-244d-4a37-b35f-fa92956062a9\nef68eb8d-4374-4c5a-9cb6-d07d26bd0ca1\n0c9e63ad-56c9-4e18-8623-46fadd44eda3\n014d8892-b4d3-46a1-84de-1a54a4e40b9e\n48bda287-5f51-4441-b191-30558f4342bb\n12b55620-e8ca-42c6-b02e-4d6a11091a67\n9fc5cd6e-eaa1-4074-aefe-e02f0291a089\n5ce53f77-4822-4ab9-8e7b-49328cafd088\n958c7427-0d88-4cc3-bf78-4b378a7dee79\n3d46a12d-9c43-4d93-a00d-ecfc36bc2682\n8295d2f9-d5fa-42f0-a96b-ffffe1447f90\n95c7080c-1bde-4ae4-9875-cc24f7387c17\n61a0b801-1aa6-459a-8e8b-3da274837be8\ncf2adf56-04c7-4d71-9809-d0ff2500443f\ne4310bd2-9b80-4aca-aa78-e0b473912e3e\nc3835faa-5edf-4b9c-9725-bac296e00bef\n0b327932-cb29-40e7-b410-05d5dcb45417\n0ecb2362-d262-418a-b140-5b7fa5a44053\n246c2a11-3af0-4595-8018-415d703819ad\n471af9de-a51b-4045-a3ad-02103f2aaa68\ndada1a13-2208-4618-912c-c3831d30aa95\nf161e117-a84f-439c-a4a5-9303e2656d04\nc7b96fc4-540b-45b2-963a-74b9af0a8788\n6b1b2252-1add-471a-bce1-395d0d60e483\n590d545d-4c61-4a18-aaba-57a854eca764\nf39bf743-851e-4965-8207-a718f1e5bb52\n1e9be76f-11be-420b-8184-085e7b53f45a\n3a57930d-be2d-4bbe-9f14-c3c1b00d8899\n94f09df0-1d9c-4763-a4a8-796cf0be07a0\n219f90bb-f7ba-462d-92f5-7d0d189a223f\nb2056eb3-3583-460f-bb9d-4397d1e6d85e\nabbac357-3270-41dc-8cf7-584a83bbe78c\nb45dee9e-d8af-43be-b65a-9bfeb4e37990\na551e8bb-d0c1-4cd9-883f-d5b7a48721e5\n6ce4a866-ec3a-45f0-91b2-fda8aaa15389\ne0274b0c-ca8d-48af-ba77-c4d03eededba\nb7c58897-2d6f-46fd-bdae-d450b39d3bdd\n12e80727-874f-4c2f-bdec-9ec107d85418\ncac77e7a-fc6c-4543-8dd0-a7133e7199c5\n010c66b0-b3ff-489c-93cd-5b57cec2b2b5\na20f8e42-a86f-4a9f-8b32-830fb7725f1d\nc30bba6f-30fe-4bdf-acc4-88d5ba1b524a\n7680f2a8-d1e0-4a7c-8fd4-95d4b9afa746\n0c0c980c-a3d4-44b8-b9ee-c226c3c41d8b\nbf87b63b-34a5-4a4d-94b3-245c080efb2a\nfd4c463d-f230-4cd2-b4be-45f9716f42bf\neef57ac8-12bb-4dd5-bc94-66f570f436ac\nbe6b37ab-6534-4fc3-8993-a4fd09724f1a\n5f780830-c336-47a6-8567-f2e636a65a2e\n0593c0dd-ec6c-4c2e-a0af-90b62765b349\n77690e44-21d6-4a4e-ac95-ae5a54e598ce\nc2b2dc31-e1a1-4083-922d-4523e8545bda\n3b28cbcc-145c-4073-9e4a-a7a1a5832c07\nc7a31cd4-5384-4c27-843b-a2beedac37b9\nfc1eb856-eab7-43cf-b69a-109c25b774d4\n95aa1877-99f9-4007-8c68-907da81f0dd3\nb99ead4c-5658-40cb-b6a2-979b012f3540\ned428030-83e7-4154-9dd4-88d9ea2c1f57\nd522b608-0628-45d8-ad51-2a1d711f2b83\nfc511a84-6852-4e99-8f84-4b5e94cb56a0\n81b4bd04-7f5a-4a43-98b2-53cd89cd389d\n14276836-b42e-470d-a3f9-8ba7bef7d97b\n9d74d171-5dae-48c2-aef6-eb4969c9bece\nff5597a4-b36c-405a-8150-eae6de14a583\n766ad212-a8aa-4fe2-a971-9e6d633ed2a8\n0dddb08f-5290-4350-bfd4-8806b0601a89\nc5cb8005-3bf0-457e-8b6d-6dc02a965595\nb00fca79-4584-41b2-9cb7-e4611a33645b\n0b4136b9-8747-4abc-82cd-089ca7b5c815\n3e49ac4c-cb77-4a02-9033-95f7c1d6a450\n2e7cab44-c92e-4922-8bba-3587294ef7f8\n4269e402-aad4-441f-abdd-28dad1487792\na0824206-f29d-4150-9fd6-6e63b4545765\na99c5f78-d59f-4aa4-9580-a3ca3b923290\ne701f060-8387-4800-b67c-bb4156acc78d\n1d29fb4a-3042-46b6-ab39-361c2b74be79\n308d5735-3c6a-4119-b203-cd70fb611329\n22770849-7ff3-42b0-85a4-216205f74c58\n1f614234-1244-4ca2-b829-b3372cb0dbd7\n9e684db1-5f20-4ad0-8c9a-68f5c87ac38d\nf2cd1963-9270-4ca7-bca6-f05835c0d29c\n906d5527-5ef7-447b-a30d-b3693abd50f9\n03a9d8da-67dc-4f62-9060-a256c13fa508\n3522867c-daa6-4c67-b50d-6b4f1e490c34\n91cdf444-2bb4-4c5f-a367-a9c089c27d46\ndb64489a-d18f-4960-b3ca-c0cccd406b72\n26e8f82e-9a86-4f0b-88ba-7847d8a4c387\n71bcf9b4-1688-4b09-96b0-4a3d1c0199da\n4ba33841-ccbd-4bfb-942b-f40b1bc5c1e4\n9e76f824-9450-44e4-a46d-927aa21c25ba\n34e01a63-2c44-4970-9c89-a4bafeff7274\n38811025-0fa9-4b5f-9db9-8aff752fc4b3\n460355ff-3ec5-4cbd-89e9-d8f14c78656d\n893cff63-b193-4aec-9c84-139c5a74b587\ne9d74bb9-caf3-4933-929d-5a8f6ac7c368\n68db831f-a529-4cba-8151-3f8b6594ab6f\ne68e7315-fc9c-4ec8-b12b-b6b5bae49f9a\n47e0659c-0cfe-4fbe-ae09-9cbc3cf5303f\n9c3be256-6c94-4f43-b4c1-cdee10f68ece\nff708a8f-027f-47e9-b615-facf4dbabbc7\nc6de5712-8f2a-41d1-90ac-1d24c248db23\nf1f973e3-032d-4e32-bfc2-f835dc57a1f1\na3c045a2-4b0b-453e-a076-0e4a5c0b638a\nea68e352-7778-4d72-9794-bf6c002c232a\na94645dd-6ab3-41c6-8acc-a03a5d487205\nae3841ca-93c7-4c99-b873-229adae00b55\n5c2ed7b0-c080-422c-ba6f-248d3ce8c695\ndd69492d-0e9c-4daa-bd23-11bf2a4717fa\na9089f24-d3ab-4a11-8467-c582f85a86ca\n4afa62e7-cd31-492d-9ada-16c27ea1a7c1\n69d7e17d-d25c-4ee7-b0da-831b30070c25\n0e326f22-9374-4488-baef-56c7ded042f7\na95aff56-05f9-4b17-8815-4b37ddad4043\na78bd4d2-25bc-4f7d-9839-4f7fb020fb0f\nc4cf7e26-2ae2-4435-a8be-f236358d6edd\n353e29c7-4149-41af-b433-019c80e7a9c9\n90f263da-5140-4a00-8213-aead3f8d9f49\n2a2f8d26-8746-401e-93e1-912784bb8fe8\n0e316176-7565-487b-8971-c6693e562a1f\nd8928873-f8e3-4f19-a342-52262f652c72\n9c5a4486-57eb-42a5-9207-6445d365778e\n8b3ff6b7-9fc0-44ed-a432-2121f8ba190d\n67e2b609-4778-4a3c-9723-372346e72aec\na46bcd83-c342-4c75-8f15-8234f4064e99\n0f61bf6c-eccc-4e85-9204-a2179951e673\ne43231e6-de22-4ae1-b347-05bd36f2de35\n7651be51-3e93-4c54-8788-54150a12a9f6\n5d5907ed-c9bc-4782-8d89-716247628e26\n386fd730-88d8-4f4a-a81c-c5d51a916684\n394cada1-916c-430d-bb8c-04d7c8649e86\n3f0f25b2-ad91-4673-9e81-625d0d138750\n99540905-1fe9-4414-9cfe-584add734cc4\nebff7c08-7c4c-4839-b54c-1a2bccba6517\na614711e-5c93-4606-aef0-103d1d2ca45d\n88de4fba-5210-44e8-a1ad-5e0e12e53de3\n63ebfa27-f3ec-4897-b9f6-e0de1b9cf816\n85b8cd78-4229-4220-8f0c-415001505c7d\n0acba81d-d35d-4f14-98bd-43fc881f9f0d\n6b0260eb-3965-4f17-ba26-a07bb4ccd3b4\n5feccac4-acb3-40e5-ab19-d1bf6dc91ee7\n34e71253-e7cd-4859-96a1-0040866f8ffe\nf0e203ad-e84d-4331-ba45-f83d325b1cdf\n7a815c70-a3e4-4cc4-8b9c-0d4cece32887\nd0901283-64a9-4f52-b13c-d0f5b1288ff2\nedcf7697-04a1-44e3-b3d3-ec69cb52419b\n0d1630b1-cc7e-4664-95b9-3ec52a10e54a\n04b9a55e-7c29-43b5-aedf-cb1e0bd15190\nf8322625-147b-44b9-a641-cb62ec4969e3\nf91e3a8f-a5f2-4c5c-8bb6-8b2c10c31fa3\n5c123d5d-8de2-4528-97f0-5b25956ae7c2\n12dd8b27-c652-4556-87f1-5de48cb39d24\n1328dac8-5448-412c-bf4f-c8514d42b829\n09008116-17cd-4f00-b6fc-2066dadb313e\na019482a-578c-437e-8637-0b8d59b7620d\nc0932bae-0bf5-4d3f-a8ba-96366acb4f2a\nec753e70-62e7-445a-ab7e-b4f6519b307c\n9fcfe1be-6aaa-4642-9645-5bd9356c6643\n942420c8-4c79-4f5a-8f64-5b2a94680c6d\n4c9e0a1b-4365-4696-b888-c13dbed771cd\nda7c4b0c-d9b8-4a52-83fa-3e8d0abae1a9\n039c769d-fa36-4d86-aecc-3d3f594884b4\n8d7becc7-8e14-4e37-b261-534eab0595b7\n54e32a88-01f6-4c3a-8e53-8aad2faa657a\n5fb7fcb8-98e2-461b-9b09-4600b787e40d\nee9d8ffb-cbae-4387-97a4-8af8a91a8c4f\neb27225b-eee5-4d02-8e80-086d35181dd3\n67bfbced-c3cf-4e70-97da-d4a6211ba46a\nd2a111bb-4e1b-4293-baa8-32187bd1bf52\ne82fdb60-c3ad-47df-a3c6-6fa97fbe71a8\n0902309a-0704-462c-b619-ba800e2fe5a8\nf15cf583-ada2-453e-8662-2469a93e021b\n50cc134f-309e-4feb-b9b8-d4544a4489ad\n935d144b-273f-4571-9312-80f616666ffe\n347d1b04-5bc4-43f1-9357-c1b7047c80e5\nd481e7a1-e0f8-4d8b-b3e4-e6213bc45597\n966303e0-9fcf-4a10-bf70-afa7c1660fe4\n978a2f45-a988-4597-aa00-3d7b63967b55\n818ace7a-1b84-477e-b276-2927ffe323ee\ne9db8317-b52f-4716-a8db-bbe2a4a4c1ed\nace22267-9789-4286-b00d-bcd137a85a11\n4ea0dad9-3105-4edc-83fe-4b19106277c1\nc7f1f534-7d67-4f89-b3b2-6031abda5194\n32089e40-435a-4907-a0bc-44eb477f8195\n87d1e76b-8867-4271-9219-c6ccb3a9c6f5\ndb464234-cff3-4124-b123-9de7442a203d\n54e65407-be8b-4790-81b1-b44547c763ae\n36161744-6339-424f-b63f-a0696a8e6c9d\n9270eac3-6ec9-4ab8-9de7-7c3fd94d951e\n23b7b754-cd13-43a8-8b14-002576bce224\na85e8840-0901-46f6-8c2e-5b454f7035d6\n95e3fb8f-5a3b-4c8c-b48f-2ad3c120eb0e\n3dc14430-7d59-4892-967f-c903b95ff04c\naf3d3902-4ff6-4d69-9169-cdd602956895\n61efbf87-06ba-4724-9d54-ca2b63e78ebe\nf732b3b3-4f3f-4f92-a2c2-e75895a22b51\n636e9eda-0ba7-4261-b316-3fef5d2cb04e\nbb864000-8e0f-4c11-949f-8f72746a8587\nebe9c766-768f-4c26-b896-6fe52c0618cd\nf9493ac2-00e1-448b-811f-61251d684fea\nfe6fd1c8-9868-484c-ac12-1a85abc17a87\nf27d2df0-ec91-44f0-b46a-53b623a2d410\n680ffe65-39c3-4aba-aa47-b5029989863f\n0b20d659-c5c8-41fa-9641-6fff153b2308\n0dbcc14d-14f1-44ec-a1b4-870cad1bcc6f\n3b18b780-9d84-421e-a665-0a51bd0fafb3\n0d59902b-c536-4255-865a-c2e93b168c4d\nd94f27f9-9a31-41cb-b138-ddb5f15bef0e\n2d9a45d6-25ee-4bf1-8a71-4c64e4959943\n0e0b59b9-d17e-4afe-8737-6697a9dcef66\n7415fb0c-14ab-4ec4-acf2-ca34ec11a9bd\n2b894e6a-6565-4bca-a516-55dee03e7f55\n5c9cf8eb-c437-41bd-9278-6dcd0bcc1099\n6a6a39a3-5e28-4998-a841-29678527596b\n77755989-6807-423d-b5fb-8b3f9df135b0\n1110e77c-31af-400f-9879-458502a0eacf\ne89f1718-5c95-448e-9e7b-0a419f3dc296\n3d1c3647-108a-4627-8060-8557835b568e\n4e53b286-c889-4978-9bc6-1fab4b262e45\nb750507d-a0d0-4af0-84dc-9f83a509868e\n6d5f1e17-0c5f-4186-acde-2f6c43de0f8f\n2877d45c-bd3a-45f3-8eae-dcf44c47dbec\n7c6d7189-f1da-400c-adaa-1eb338be624d\ne749d173-1e03-4b55-aa66-3f8a7a9f12bd\n7efd3c95-dad5-4cb0-8c91-aeeb69755aa1\na8d85548-6e7e-4084-88c2-c9a83f7f0611\n167379e4-18aa-43ea-9e6e-45fd757218af\n8a43fc58-f374-43ed-8128-2f7ccef74608\n09329c76-5962-4692-9a31-101dad9dc071\n86c4991f-aa71-4423-be39-98bcead79fb1\n9b4bc1c8-a273-4720-9d3d-5f87f5e82085\n44f5e9aa-a423-4791-9e5e-94a6e7330b1a\n9320446e-7422-4e33-9b2d-942ec1845ef4\n03f1f1f6-9c53-4ae8-83c2-75ef54e22f29\n65d2bfd0-aa44-4733-9a57-4dc0870fb3d1\nbf69c8c5-e2a5-41ae-9488-9d43985b4d10\n6281c0f0-cdf4-4388-84ad-f71524a74945\naa7a80e6-5191-4d7d-b345-4e4a1a05b36d\n60f35e17-f099-4e21-bf35-f7d27673984f\n268abcd9-4df0-4e7a-92a5-d912055defe3\n8d2442e6-f182-46db-94c2-63b0f422abc0\n11218444-1d7d-494d-a79a-438b2593d465\n2c557dff-0140-4402-b7f3-3b59de777af7\n759e889e-6a07-4edc-abc6-16caf9a6d8f1\n2e7af801-10ec-4142-bcff-4b5f3a511131\nd63862e2-806d-4309-b1a3-5f63397e6158\n8aebb0b8-3509-4d11-a9b0-fc514023d266\ncc05d61d-8195-41a7-813f-39687f3b47b1\nf14bfee4-0396-4ea7-abaf-55710d6992ec\n46c37f90-1740-4b34-b9c6-989706d8af71\n55a37777-e748-49e1-b706-1db830757e72\n0770c5a1-5aad-4b5b-9708-6ba122f44d9f\nd0a4ff54-6581-4ef6-bd73-e42811bf264d\nd26003e6-9e43-4b85-9ccd-c2bae6c351c6\nc2db9dca-ec2b-429a-80c9-1c6c93f41bd4\nb8960a60-92fe-4001-9e11-cd41f66f5ea1\na0c3a7fb-0610-407f-96d5-92c7b76eed6a\naabf2759-115a-42f3-bd65-651fbccfffc3\nfa3626fa-b0e5-4986-8c2f-d59cac41c896\ncec3063c-2da6-4449-a121-2bf32faade39\n95b1d7e7-03a5-42d8-9a58-3f0e46fb2e5b\ncb10d708-327f-463b-9c73-4ddc40ebcd12\nfabc20a9-4342-44fa-a373-974a575d1b00\n156b3d92-8b82-4f68-adc2-13f595e9347f\nc4a037cc-d9f4-4826-b918-c04518246c1a\n530ab64f-145c-47ff-960d-6d6959323e35\ne9c333a2-4f0f-43e8-b7ba-e14ff2ebbbdc\nccb0dc03-afe0-43b6-a4bc-72b4eb4f95b1\nf7238f76-56cd-4901-9fa0-015b3a7d9c8b\n46c9efd1-3ecb-4265-a271-d4faa18c84e7\na1dfe567-1ca9-4fa4-a350-32254dc192fb\n3699b580-437a-45d5-a7b7-30eceb2d6b15\na854a344-62ae-4807-85c8-c95035254223\n59bd1a22-e8e0-4651-b305-ec0d5657b2f2\nfc8789e0-104d-4a5a-aa6c-fe5c5042b3cc\n9cbaad97-0b48-4186-b074-957b8a9d961f\naef6a542-8339-49a3-ad22-7dc35d77057c\n494d2d5e-6354-4096-9a57-300e5c5653d6\n88358cb4-1dd8-43ba-a736-533e3b893126\ncc4376d2-f92b-49eb-a4bd-9ce80d59140c\n877dfc80-3dc4-4448-a99c-924b7b4e6879\nc49b582b-7e15-4e0c-aa9b-3de86d282f2e\nd44d02a3-4af4-4732-ab49-cbe84b20282d\nc8be3081-22c7-4668-ac50-e3765f74e4da\n5c9aa74e-f12e-413a-b5fa-3bf6439be826\ndfd9c30b-a19e-4c8b-b8a5-5d5555df7658\n3c642d43-03f2-463a-9906-b3e106fc8645\n2a5d0343-b4f1-4e58-ae2c-15c57036941a\nfdf5c8c1-c867-4c0a-accf-c30480c8e4d3\n5d71c48b-e1e8-44c7-8a68-bf5ae8b8ccd4\n0d0a0073-2b0c-4fd3-9e2f-c146e406362a\n446513a0-8da2-41d6-b740-e0422c0e8c61\n9db37b3b-c288-4c3d-9d62-c85b1b3a2a63\n73ee7c71-fd8d-42ea-a37a-6b9f243e0244\n5fd8fc4a-e441-4a64-85f6-06dbdd9a7f2b\n080a0661-81ea-4161-930f-6e98cedb2cd2\n770d6d0c-6e8f-461b-bb38-097b5bdb925f\necfba3f9-b8ba-4d92-b827-a537d6e09a4d\n286cac8c-f22b-4a55-a51d-b79a94f07255\n6a4dc451-43da-461f-be27-ae546f69cad2\n53be9eea-001a-4293-a018-e4950cdf6514\nfb14f3ec-26ed-4d3e-893a-ec37625ac403\ndcb1702b-c996-4c18-a19e-e0bd4b00bd1c\n544e9def-29ce-4dcb-82d8-5a2a575db38b\nb8ce3363-2186-43fc-bb69-99c40681cc3a\n05734bd9-4864-460e-a4ec-ee9918070c6c\ne480c7ad-e9a2-4eb2-9dc8-fd94c7ff3934\nb5715fd7-9b74-46f6-86b8-2a5bcc9f8318\n8ee1d52e-bbd3-4e1b-94c8-cfe627053e92\nc1e9fdae-3a03-43c0-aeef-588952923db0\n0acd3eb2-ab41-45e8-91e5-793e668fdb5c\n1d86ec56-ecde-4e69-b881-6dd6d77e45aa\n699aca3a-b398-4da0-949a-9bf2ddbdc3ab\n112a2e22-a1f3-42cd-b0dc-b73513249aee\n275413aa-cac1-446e-8ac8-e8e0e8b43e25\nfecf4a5a-2fb4-4dd0-9990-d11dc654fd93\n578f1fa0-47ce-4568-a986-af7c27dccd56\n2a2d3cac-c881-45f3-921f-2008bd0bf44e\na6f9fed3-edd9-4c0e-a749-b2df43c0ca8f\n2b0474df-f9e8-4b53-9be1-539b2f7db505\n02086ec1-e745-4829-bb2f-ef3c851c1c95\n8dd3cd9a-13f0-4dc9-ab93-24f721ebd8f6\nd48b310f-0b24-45e5-b776-4513ad89519e\n2ed6d47d-6b12-4f3f-b963-06d1cdf32bdb\n9b9889de-e163-4503-8cf3-630bddf43be2\n47ef412c-e83b-4b99-9fef-f6965b61e318\n8aee61cc-ed28-40e8-b1c2-498d7ca8e2f1\nb9769d2a-5125-4236-9bcb-f94745df1b9f\ne74091c5-bcb3-4cc9-80a5-7250a72cf1fd\nf042d6b9-6d37-4961-9dbb-dfdf6532edd7\ncce03bf3-a258-4f39-810a-8b7977c0d216\n17df6741-81a8-4873-8920-4d4e3f87f275\nd2d91173-ae12-468a-8cb3-cd79dd8e2eb7\na48f241b-9725-4b8b-b273-2131646cadb2\n52e9fcd6-a8e9-4111-b5be-8baf43d3ba48\nbcae8235-7cac-4588-81bc-b3c7193e3448\n336eed70-08ef-4bb8-b07b-02a06fb4ffff\n81117ed3-c7ad-42ed-a601-f641215a7c54\nda054822-824b-4478-b32e-f25f652e72b5\n5c7a7e7a-6290-4f03-94ea-8b0390d95d26\n6107403e-b1cf-4fef-9a4d-0d2e307cd734\n4689e6fc-aaaa-410a-b32a-f173a7a5aa77\n5b077335-d855-4d2a-af55-0afc1a3d0e36\naaa84b65-e974-4b9a-8360-fd20c7dee40b\n2c722d9f-2e0d-49dd-b017-1f95d7c64647\n1b0da58d-653b-4c72-a9fd-e9271bdbd28c\na79c46d9-176d-4e59-8a2a-d33d0abfe47f\n68528d51-0aa4-4359-9b8b-4eb515ced7ae\n81362248-1a2a-42c2-9aae-2b307998b519\ncc4cf4d4-f048-4634-81c9-1af5d847a7a8\nd155f0b4-402d-4c32-a3ff-72ccfb891434\n9686e70f-371e-4d58-bb50-e79202f13c38\n6327990b-8d69-4f8e-9e31-2b45a2e74f2b\n9a3bdea4-f371-4f2b-9c1e-cdef1f1ed7a2\n007d812d-3d8e-4fbc-955c-8bc217df36cc\n0ab34860-4fe6-4c2f-941e-7c2fe796b75b\n997c4926-c325-42d5-9b7b-eb3ec922d248\n67c358f7-648b-4ab4-b4cd-3169fbc90b63\n3e5749a3-3d7f-45b2-9d55-bee7ce1085bf\nafbd6dff-8d3b-4686-8a52-505d3ce6686a\n3f532288-c0e8-4eac-9940-2c1cdaf612c7\n56a4f3e4-2b5a-4853-afe2-03a657d9dae3\n06f24757-d307-48b6-97d1-4446faa56061\nd2bb2c0c-e063-46b1-9213-57116d149ee7\n0062564a-8dce-48e8-923c-7ee630a97d3a\n5318bc97-df40-40cf-b7c1-4fd36a152ec5\n8e7dd27b-2861-466c-ab88-415148c2a5c3\n4ccf0fe9-6c17-4480-a928-671887083444\nb0b35b42-d553-415a-9ca5-eae327e1e8a5\n635a7f0f-2ffc-432a-98f2-801bdfdad2db\n8e539a6a-f8cb-4d95-93a1-ab594521f7a4\n40a4a44d-f5fa-41f9-b696-2dc87c040735\nea82be12-5bd6-4290-a8c4-9653df650518\n92f6a0ad-4c6d-4b52-9d12-777f8381296f\n300300d1-5fb3-4936-a7e6-63459df7a5e7\nf94398e2-b34a-40bb-87d6-3b28edcad120\n95a76441-5002-4655-a534-4123520f6452\nf15c86c3-2d19-4cf3-b811-89a9c66b270f\n5a907362-bd89-4607-9b88-57876e114a66\n43a1095b-b95c-4ae2-8c69-b79fab438acf\nd2268d8b-49d5-4ae9-b89d-dc49c97ea916\n912b98f4-4887-4590-9ac3-0470f5f2c442\n767b0d25-13db-473b-b767-773a2de43430\n381790ec-5d4c-4c96-929e-b2960655707e\n67f063eb-d27f-447d-9b38-609ff26f679c\nd567eeb8-1d80-4a50-87f1-4155cec6282a\n929928c1-4a34-403b-98a6-562ba46408bb\n1c608daf-c305-489f-a4db-05f4a7d387d0\n51a3bad4-f599-4cec-9cfe-fddbc3e33c2d\n081773ee-5454-4e27-9ffe-67be0a2b2c64\naa21d014-7181-46e3-be0e-77cc0cc3a12c\n2e44e598-1112-400e-b72a-4365c7afa119\n0e03d019-2592-4306-832b-fcbf544d56fa\n0888d1bd-2b6f-4527-9eb8-5a852f091265\n11f37356-9db8-4f00-b7b2-d346f67f2848\nce85717d-0676-40cd-95e8-c7a635111c78\ncad9d910-4e83-40a1-b95c-318872eb2405\n5babf4ed-6c80-4b50-89c7-d65f883dabd8\n37e68b08-8bf5-4b64-8176-7d8437cb6729\n7e84252a-a1ba-46fe-ba69-2ff3ac600454\n94819c5c-d95f-48c2-be29-e492fa58cb86\n5d13f985-8bf4-417c-b493-ec807eab7d1d\na161e752-506a-4ed2-ae85-2a4939098325\nc9d53ceb-af12-4cb4-be43-655561b98d3a\n4fcc4839-3754-45fc-bf62-aee73df8e5e7\n290ee283-d5ec-42b1-b1d2-210e87b96077\n30a10657-a7c9-48a5-9743-d7d35858654a\n0ff78e42-9923-4168-8619-407056442ae2\na255bd13-8657-44a3-b03e-6120f04029c8\nffebf3af-7638-4c0e-948b-5a5d8dcf2e08\n3f478c4f-6a2c-4d2c-9611-d005a2150c69\n3dcabc42-299d-4628-9974-5913dafe2ff0\n06cea0d3-dac6-485e-bd60-e65a4c1416a1\n31ba5e76-8173-42c7-8e72-1b20c2340301\n6e1e03b1-3bf2-4bc7-9aaa-b9b06e527361\ndf407cd3-f3b1-47b8-afc3-5355835512b6\n8ad52cae-2194-4202-8a35-c042800d7e34\n4dc42a80-13ba-4e13-9185-29492735d9bc\nee813203-4526-47d2-9d82-16c0b9101354\naef950d7-db66-42fb-975a-39920a1c7736\nf6eff6bb-1fde-41a1-8e40-3e7e4c04a851\nffb1013e-e867-41a7-9882-99a0e511fd47\n348e9433-2e7b-4873-8197-dbb79589fff9\n8f6585ae-236c-4b04-981e-9db0fc1ffb3d\n47c1f73d-4c85-41ec-a238-3bcf7f6d1f73\n7d1b96f8-4142-4e33-968d-19aa11bc838b\n13e58b63-f93d-4a73-8560-08d804b85bfb\n6478952d-e8ef-4a0f-abd9-91689453919b\n2284a2b0-3f5e-4821-80cf-eeb6178686af\nb8fb7394-833e-4baa-96fd-6f92f2fc20fe\ne28fe12f-fe2d-4a63-908e-7cce45fe5bea\n9eace93a-0b9f-4c58-87c7-97d7a801cd4e\n92ff58ec-1af2-4b5c-81e4-3dc7117b397d\n8e8008cf-e24b-4baf-bb16-7f0e44549f24\n39ed78f5-3c2a-4af9-b470-034a29650cd9\n7cd7a10e-1bb5-4c6f-bd1a-4d5db5868545\n674fa337-a5e9-42cd-b413-be2bd51c73bd\na20da321-0fba-4780-9a93-ce0bba58b8f9\nb15265b1-b8a8-4d76-981d-22e57b234e92\nc742a0a1-98a7-43ed-9a36-88e299e7be07\n19600902-188f-4548-b139-dd4c8c9b92db\n2c06cd4b-0585-4859-aa41-98d95f360f08\nb9590801-9370-4780-a67a-8d3aa1b777d6\n31873ee3-c60b-4ca4-957e-4bddf07277f9\nbefb9439-37ad-4568-a564-e1d1434ff5cf\n6c8ee0dc-6fbb-4ff3-885e-1af51e30ef87\n296f98e2-b8b8-47a2-8c98-6e7d7633bb46\n004b1093-b0cd-426d-9c50-1cd665009ca5\nbb35e114-f9da-4d96-b370-f75a974873e0\ndc847071-248f-439d-9c6f-b06af9e623ff\na7d3d671-90be-4c5c-b756-a89d5b533f1a\nabbb0b9d-4d19-4fc3-8a3d-e273394dace8\nb8f9817e-8434-43b7-8973-4395f6e217bd\ncc06f285-3080-48c6-830c-6e714abea7ac\na9fcba49-d1a2-436e-b1e6-612a26d8ab25\n5f0fcfcd-2a1a-4c5a-b356-77cf1e54bb32\nd878880c-83a8-431a-ac10-9f7fba551cd9\nfc22f334-d9cc-4a6a-810a-2ebabec59bf4\n7b7be1a2-a00e-4e60-b2a0-b18bbe59ffeb\n6e6b845b-4d93-49a1-83b1-c3d90edd7079\nb1ee26e6-2bf9-4e72-97b7-4c340cfe390d\nd17ac6a6-a28e-49c8-b9d7-07c46d7f9d02\n2832922d-82d1-4dd2-a52e-07332cb340d4\n5a8aabfd-15ee-49c3-abc7-78f17a476e42\n4627e114-c892-4000-a4e4-aae8912bf78b\n233b01d2-d4b3-419b-820d-57b63bb1d940\n0b1db1de-8959-4825-9bda-7b74c019d7a6\nd5e89e72-b501-42ef-a791-e93897eb9ccb\n7a729499-85e4-49ee-b2fc-c597e9ff276f\n7d54459f-02c1-4ddd-8d8a-4289a2f2aec8\na5830906-ecf9-48c0-bfb6-99a44fa7e1aa\nee20532a-d7f2-4b1b-bf89-a512cfb9a996\n2269faab-df38-47ed-b113-464df06c44ff\nb5e4daa3-ec69-43fe-8600-a26535f180a7\n6926b672-c728-4f2d-9052-0d83d80c62d6\n8aedb192-6e37-4593-b194-ab924da3d867\n44fbb82f-b9a2-424c-9286-71d438f5d085\nbff6b0f8-af80-469d-bcef-9b47e5a6b735\n27bd1649-cdd8-4165-9088-34f11c7ffb64\nb377bf96-0d11-4ea6-a5eb-ae120de1a8d3\ne5c3796b-70a5-4e66-95ce-774ee910f348\na3c28fe0-6278-4188-93f0-a28967212f56\nfe77a1d1-5fc0-4444-a9e4-80e2c64cd75f\n115fcf8f-3608-4093-8096-a77e07859f2c\n5359b91c-dc97-4e8d-ab38-d911c37a85d5\nf7ebadf3-7348-4bad-91d9-434bf7dd48d5\n35da81ae-42ee-4cc7-bcf6-ef4197c09aca\n975787d0-d54a-4327-b24c-d32fdf6ee1ed\nf8992e10-9cf5-4466-86c4-8b1f1d22d070\n882a56a1-91c3-4791-bedb-f79eca2f7cb2\na77df3f2-d36d-47b9-ad5a-3c72d9e396e7\na567ae14-356e-4988-b09d-2aa493004085\n2b328456-c8a6-428d-ac9c-1b2d92fc41f6\nd8b64786-c0cb-4709-a203-80fd7ec073d2\nd6b20405-f578-4290-b830-87d95ad6276c\ne30472fb-1d39-463f-a5df-9e0107dc9d30\n2a63a5b0-fb7a-41f3-80f6-e8f27eed772e\nee0c340e-63bc-46d3-8339-40b16c7a253f\n28838312-4eae-4446-a948-1096875036c8\nac61eaa0-f095-46e2-aefd-a2c2f142715e\n929ac9b6-325f-4bb7-bac1-6a016cfcc07c\na0ed9204-3a3a-47e4-9d52-28402138eab2\nefe36a81-47a6-4c94-8c92-6c6976911753\n1e1c3a38-7add-4cc2-877d-26a8eec910b1\nf21d2156-d196-4a06-b47a-d55f4b48c861\nef7d9f4a-d61e-4d8b-9dc9-9224fd1d6834\n00d591c0-863c-4d5a-9b82-b98e8e40bbc6\ne84d3560-7218-4b38-9370-5fdd19f0f1df\n5de8f647-ebab-45b5-9ac3-74eaa434da58\n5ca038ea-9df7-4cf6-a8b4-5d5a0bdcb187\na20cb4cc-215c-4fad-b3a4-313210565179\ne54a8cd4-a1a2-4388-a267-cf424fe34ca4\ne98086e3-df2e-454a-9510-9db58749749d\n3f27bc42-2c80-4cf5-9e51-0d8f60b9fe61\nb669ef79-05bc-47cc-80a3-431ea0a43a7b\nf6505cf5-462a-4d2e-a20c-cda2188e282f\n4a8554b6-69af-4fc5-b5ba-1b4195891ab2\nec2374e5-43d9-48f3-88c8-74a529ec6e59\nf0f19e52-73cb-41bd-b0bd-f7dce2679ff9\n2dc7ec79-7209-4e39-8c6d-3877855cad41\nc2782d04-21c4-4343-bd75-4c5c2b5a40a9\n957294ed-a8d0-422a-b53f-fad1224bbb75\n2f4fe7bc-3e82-4e94-8070-2bcadc1c6a7d\n2ba0df0d-48ec-4578-8e91-9ccb30ac00e0\n86c90268-01fe-4770-89ab-50822ead13fa\n1ca39ac2-ff3d-4f22-b29c-1790846af00e\nf2994da0-e500-4981-bd17-b8a8e8815e69\ndc7fb81d-ed43-48c0-b054-cdf8bcf6d985\n66e259c8-15cb-411c-9a81-8189f21d5834\n1d11129a-d061-4cee-8177-474f30d97424\n4380abc4-9c76-4945-b227-d42e7ae26164\ne47cd74f-d6e5-4cfd-822c-8ea5edd2ab4c\na5802b9a-56fd-4b87-a62f-12a93969a183\n21eda935-f252-44da-aaa4-e799e8ca5a5b\n781d988f-6afc-4d22-a557-87cd50a6d6cd\n03eeb18e-833c-45ff-9872-2bea33da1a1e\n0ae21777-9118-4299-836a-172fbde2b73e\n8be9dd9e-d2fe-4a8b-8db7-bf319039ff73\nd0a6cc48-d42a-4a7c-9ca6-e4f67d402098\n6443c65b-84e8-48f0-9be6-807d86f67ae0\ne22d5c5e-f082-40be-82d8-9511a8fa8bbc\n37cc6ad6-871f-4395-bc7d-0939642e27a3\n72fba741-9455-4ffd-a0f9-b3f573cb7509\n1e51fa88-3945-430a-80cb-822435aa39e5\n7514da36-d703-4230-9f10-e0791bb0066f\n4ff4e472-f94e-480b-a8cc-0512c8ed3caf\nb074d8df-27d6-416a-b9ee-086fe97b5737\n69edc32b-2fd2-4aa1-adf0-fd35c033c06d\nd3ecd751-2ab0-433b-a184-b3d7b8286a62\n6036e8e0-8398-4828-8d5e-1661f60514ee\n521e9558-3875-4963-b23d-743431584b1a\n90b7eb10-41f8-4833-9a26-d35e0e6db794\nf4a5708d-ac06-421a-b9f7-23ba99843606\n771af6e5-2468-4e56-9226-fd115df61321\na5eda27a-9d82-468c-aac2-b9a5678e542d\nd09b6462-eedc-416c-bbad-babff35c202b\nf9904348-7083-4c1b-820b-d5b239fb55ce\na0600538-d230-4dd7-8242-a7b527b883f1\n14dab610-8555-44b9-acb4-c1e603ce8981\n92498469-6f8e-4b1e-9b6d-04de9b376280\n2fcbf57c-9515-448c-8090-b7f044530341\n7cf111b5-874a-412b-a2b7-5c9813ea4bd6\nf0d533b6-f1fb-471a-823d-ff4371cfa93f\n8a001796-7ffe-4d44-af6d-cc62527fedfb\n6b06c8f4-93a7-4722-965a-120a30cf5ec1\n84ed7a16-f18f-42cc-9972-db002b3a04d5\n3da3d816-0bb2-4ab9-a8ae-73bd8861f94a\n71e43095-7e18-4ae7-9b2e-e69c9008d2f1\n9b93749c-3d36-462a-8da3-2bd49be803f0\nb8818a71-8192-4464-be4a-80132628cb78\nffcd1999-57d5-4ac7-9450-5caeb07630de\n6e7cf29b-7a35-47dc-880c-e92975a59e7d\n0f566abb-76f8-4459-96ef-f0c493a09fc6\nfb826063-5022-47aa-a2c7-e0c60ebfbcaf\n2499d4db-d2cf-49c9-8f37-0d34a1d4ca7f\na0d40f59-99a3-47aa-98de-14786a5e5e3d\n662a395d-95d0-41c5-a000-8210dae5b9f1\ndb80e003-49f3-4328-9833-ecf68400b18f\n3ce2882e-32f5-4d08-8077-2915985180e5\n1de11f73-2516-493a-b813-10ea1b55712e\n5dbb0a98-f0ea-4f3e-bd05-a696bc47ff1d\n723b486d-708f-4cd3-93a0-4054f611fe97\n8b798699-9a72-4c5c-890a-9510ffdc951a\n9ef10746-2031-4269-bac0-e18a8fe2710e\n1f545723-92ad-495d-993e-96c2cf2b31ba\n18daef91-0d75-42aa-97e1-de258375b696\n363f5afd-2dea-4600-9f22-2a9dfab5162f\nae3c742f-883d-43e2-8ba3-662c440dd298\n20a5eee2-a842-4adf-8f9a-fd5eae5f1df1\n36716cf4-128a-4379-9745-35e151c0eefe\n6cb52971-8af4-4ef5-8634-1563f3412b95\n7df98084-82f9-4a9b-b99d-359bc53b92ba\nc4891f5d-90c6-434e-8ef6-adb75d93027c\naf70f5c9-e5ae-4a0e-ab79-e387c74893b5\nacff3c13-3893-4528-8f54-73915599830d\n27cb6669-c07b-4be4-987b-e5803676fb0f\n60e11fbe-d6a1-4d07-8dc5-e07f561a69af\n74808acf-a65f-4292-8b0c-a165038a1aa6\n28a64eb4-82ea-4081-b00f-6537b1e5c4f5\n6ae237d2-5542-48d2-b263-3ab14390b647\nd0e18e56-c9e2-4aaf-b46d-b9674c9b94ac\n19ddb4c2-b6b9-4f6a-8c5c-eefcf09c6762\nca77cec0-e1f3-4696-a83a-f0777fe44a97\n0cb7b7f2-a564-42bb-87e5-166b45f7f5b7\n7583f1c1-d93d-4156-9485-0af4ad7152dc\ndc0ed97f-1a3b-4899-8ddc-5da53757ab92\nd3dcf0b6-760e-4f1a-bce4-3c1bccdb30f2\n1cc3767d-770e-4cc3-b278-a72ff04a7878\n77c4e415-a7f6-47e3-8518-2905d874ffb4\nb005912e-84e6-4ec5-8c3b-82c826579b36\ne7d553df-a8d9-4b69-9e3e-2aae749a6c60\n28dbfc75-c10f-4394-a037-e52acd1d9767\nd382a877-6598-472c-b89c-7e3ca4ee19d4\n2e78620e-1d8e-4031-89e5-9dcdd0483733\n19b102c4-0da8-4138-9ae4-0a07d4366d21\ne9e8bd22-7657-4111-b7d0-d1802e5246af\n05020c6c-d417-4806-8870-0f2f74bf9293\nc38376f2-d51a-436c-9dfe-60138a9ea191\n49956627-f3ca-452b-8a93-f2cdbdd4d984\ncaa57862-3b0b-4407-9dc7-98eca92438c1\n7065e717-85c6-476c-a9a4-97ac058c933a\n3bb44fe6-2c6e-459b-b2e2-0a98e0226633\n5e7124cc-addc-48e7-8e30-52763b2636d7\n3828e808-af06-45be-b889-12014f93c880\n574a8559-40b1-49f1-b3c7-107917fecea8\nebfae05c-7173-439d-838c-1ad8bcd02796\n01f7f701-790a-4e0e-9c21-09e86a5aca73\n1f1f07da-a1a8-4067-8b74-63217a36da56\ne1608147-54a5-40c0-9a5b-72734b09635b\na997c636-c07c-486d-ba32-a01a61597d6d\nbf667b10-c7e5-447a-84d9-90e20507edbc\n6f25ab06-c29b-4b6a-9132-6bf51aa4c967\n16e38f6c-5f0e-441a-8a08-d5991942e79b\na2ee8dbd-f92a-4fd3-b6aa-4e29f5d0cbbd\n5c6d7224-81d4-45bd-8802-a449c9bec985\n531444ea-ba27-44f7-8a5d-76065b32fde8\n66e3f924-6140-4713-86e1-ed0aff40f3d1\n657cfe55-1cc4-4f6a-9536-6ca84e15dd63\nc409f262-0546-4ca1-b8db-c0bd05120d62\n83999514-9703-4581-9016-e897cb8fde5c\nfc0420d5-557a-4b46-bc22-18e2ebf0d216\n4d8b69cb-508f-4920-9789-c3bced32a5ad\n2ea920fd-4dcf-486d-9afa-d6069cf09d2d\naf2c9219-2ea6-48f0-8d6c-034e73fac665\n342a52df-3ae9-4077-a4e6-16e1ae8628ad\n431719d7-d3ed-4d4f-901d-e0b9d95106c2\n79aaa082-17ab-4ef5-ac02-42c8c0c74a45\n32089565-a4ae-4fe7-b399-6051e8025d2a\ne7d9769a-17f1-4b28-bf4c-1704ad306ee3\n70730839-1f8e-4aa0-9355-917c8c13403e\nc40a54f6-0ce7-488d-b95d-87ed04450fdc\n2007d475-1d4b-4b03-a166-9a6ec5b71c39\n4ee88288-db81-47a6-b4f4-3078b9ac36cc\n1e303e4c-bdd6-4fc2-a404-cad00d86bba1\n67a7f234-cce3-49a2-b12b-505ef7a3fadc\n5695ef33-005b-43b3-94e5-8cb37cfdd85e\n5c00f7cd-9bf7-4ab3-bcd6-c1e1671650ae\n2fa3595c-8834-47c4-a7da-289422488bcb\n608fe38b-f66b-42ae-bdc8-05dedcbbf263\necd2c147-f4cb-4882-ae1e-c3e6b9d5df47\n07002e77-e363-4170-b720-53c6a2d251d3\n6aff4234-40af-4543-bc1a-facaa12e9b6f\nf2c8d9b9-f978-4136-9ab6-4931fc9bf765\nc85f2b8f-769e-4d0b-a9d3-c349235087bb\na21478fc-ef27-4ae7-862c-ad98855b44e4\n5ed7c5c3-b356-4c96-9005-50c3827690b7\n3edbfa97-0d9f-4261-a841-7d90ddbd8ae2\n13787a65-629a-4e87-b35c-d8d56cb272e1\nf0541825-bcc1-47d9-82af-fb3afe581505\n0db725ce-fdad-4f04-acc2-1b86bb0428e4\ncf1c341b-ec82-4691-858b-21df89f92e34\n80bb3ddf-176a-4968-9a8d-b90dc5887e95\nce42c287-3657-46df-af5c-12f0eb3ecee2\ndf3cd72a-0cf2-471b-a46b-a22b343c82f0\n35a0154c-4fe2-4f08-a936-628dd941b78c\n5213b8d6-b725-4e61-909e-7340f72125e4\n7e1209cc-480d-423a-9478-db31a801009d\n1f464092-bbc4-48d9-bb5a-2fdacf68f2f5\n6dd93c9e-fc16-460d-a053-214673814785\n3778ec52-42ae-4b73-8bae-a393dea88e62\n0208b2da-e032-44fe-baa8-30fd4baebed0\n196449a3-c5bc-48d2-b169-c5c91c9ade6d\n28a410f0-494f-46cf-a163-103a289a14cd\n8d86cee3-70e9-46f9-96c8-5861d5c11948\nbeab84f1-bea1-4e74-aaac-c5bc2416a637\ndb96d17e-ea10-4609-9069-934d508d4809\n8a05924c-617b-4883-af22-ad3fe30a4e4f\nb0c5c698-d26a-43db-8383-c6db81792ada\n588b0bda-38f4-4bca-a63c-9f384900754d\n880d7949-07e7-4a25-8ee5-dbc5eee0fdbf\n0cd78198-0a76-449f-853f-f5742d954f79\n541ada60-e9f9-4fc9-a5f7-516b8eaed6f6\n1dd40d61-a2a5-455b-961b-fd64d14852e9\n335965c5-18fb-44ea-a0a2-b6add623e085\ne4ce7984-93ae-4ed9-a203-9f41e3ef3f8a\n5b3a7273-f8e9-47df-8c10-55cf2ef2e61e\n59f039b1-ef99-478b-8544-21552e757b5d\na2d46857-b8fb-46de-8668-c7f7aaa99acb\n038ca338-0a61-4ca7-b66a-5627a1760d01\n6c3e681d-1dba-4e73-9286-03e2a44fc9f0\n9da47b0e-b1b4-41fe-b4cc-b60e519aa4d4\n461327d6-f316-49b2-b972-03bd664a9d26\n8dc45081-0f26-4c90-9311-7dde91008fdd\naad6950d-7737-4edd-bc94-3d510618b5e8\n43a5d3f4-2d8c-47e5-9eef-52097bbb2929\ndacd74a5-017b-4322-9a7b-c9b1373c8fb0\n07d64605-9537-4d3e-92d1-735047933a7c\nf78f5410-28bd-4c07-919f-4e4acfe0c957\n946d13e8-8e69-4fc1-bf5e-baebad952675\n4ce6985b-7c95-4b7f-91b1-f9efb7ef6cbd\n039afaf3-0b4b-4126-8b47-75277d00dbcc\nbab28d86-bc81-4161-a344-702f7c600042\ne10e4632-b252-4fba-b445-8481944e46b8\n824b1843-46e3-4854-a5ad-ef5301119b98\n7af60aca-7d8a-4c2b-9691-c3124ebf1ae5\ne45f1b72-0b40-452c-8205-841e7503fd6e\n973fe168-1140-4fa0-b9a5-a8f8729a6f8f\n470d5f9d-aa6c-4163-95f8-9d9cc1e1513e\n1becee90-12cc-4333-9170-47d0dfc4e4ad\n5652a1a6-544d-4499-8c51-e452f5293c8b\n3d6bf76d-dc5e-4e27-9467-72fb38ce257f\n0af41e47-7eb0-4bde-94fc-598787e76888\ndf256e79-be6d-4201-ba2b-879251104a7d\ne1732576-bfc0-44f5-9089-2408118a74b1\n82c0ac4b-a4fb-4376-9339-21167ed5a5e1\n88ef3019-b267-44f9-a1a9-24f98795e5a5\n616def73-df3d-4ca5-b202-44f3deb5ff9b\n10459dd2-8f51-4537-8c85-f7b608e66336\ne72699d0-3395-4a4b-bdf1-12c01ae9f64d\n09d1f8ec-33af-4f9a-9e06-1cac10caa4bd\nc40c2a98-d4bb-4e9f-b268-65e197fc100e\naa7175ed-0645-4a86-b221-b91e25449c07\nb113d34e-c686-4d07-8c1c-8fe5e6f31ae3\n80b1032e-cf31-4a16-b846-129e02122722\n7615e21c-2b4e-45d0-9990-e03155cb3bb1\naa4e0045-bce9-4e6b-8619-6ac6424652a3\n090ab159-d222-4fc1-886d-a239dff8b17d\n7056637b-17b3-468d-aebd-d3eb1b20f5d9\nab3f30b7-486f-4812-bc57-5971a810827b\nc248ac7e-4e7e-42aa-ad83-3d993dca78fa\n0cf0d4f3-8205-4916-b8ed-ddd73752b08c\n251502f2-125b-459b-8d3a-4aea9ec11327\nf49838d0-d5cd-4b5a-bbac-3e480c6df4e3\n04f8664d-496d-454b-be50-6423b27e9464\ndbc66c58-6d8d-4813-addd-63239ac3e720\n3ac81c33-cc9b-4f6d-8b7b-cf02576f888d\nf0e0f767-ed1b-4d2e-814d-797a7d3039fa\n7202028a-7451-481d-8850-6a4a8ddc2538\n7437469e-a937-441e-b85a-7110e5878cd6\n80deaa0c-187f-4a69-8355-7958d6c04c4c\nf77afa21-98d0-4d88-84d8-ce62bd07dc23\nb97a05db-5e25-4d3e-941e-3895c6818965\nbc1d8bf9-b82d-4cb0-a882-4c7ae17f4d0c\n8ca8cd0a-68ee-4e7b-b469-9846abc4ba73\n22e610b9-980a-4c2b-a219-90f835bd1034\n2b1bd85b-aeb8-4902-bb7c-40bfdd3965d6\n56aa07fe-0257-40a7-8752-76aec1045baa\nc9518c2f-6676-46ea-8ea0-512b9a7cea5d\ncf822bd6-60e3-49b6-b288-f8b264993148\n60b7c3f7-fc7b-4f1d-90bc-ebe9774988ea\n1a80abd4-2dd1-440d-a8ce-057a5b46bd72\n4d627524-1ed4-44df-9f18-6eb2459c4cde\nfc703c20-ef8c-4dd6-b3e8-d6653f9ec256\naab1d543-75e0-4e7c-bfd2-20b8a9a3e7e3\nd7b8821a-0569-4f18-a432-e1afcf6bff32\n8f0e8791-3c76-4a47-be5e-9a6a3e66a35b\n7a25eb12-f903-4f44-a0b8-92636813d6a9\n557359af-58b3-4db3-b7f8-3d75aba57ea9\nac02c38a-6fb6-4ae9-9b24-93b46b80efe0\n32d90ddc-2937-42b2-9196-9efad3ec4588\ndf2f183a-0e54-44ff-b5bc-5f99ac99297b\n83aa56a5-cdad-4082-aca5-16eb16b39143\n647021ff-b56a-4cfb-a05d-faf132a507c6\n8749d7d9-f687-433f-baf6-9f0e32de190c\nd5309ccc-b832-40cc-a958-ccf02975e278\nde8d3244-eee0-4c68-931f-c08472e80ae5\n5d633e7d-c8fe-436c-8df9-bb3b8432e757\n0b4761e7-0d85-490c-a93e-6f17973b5915\na6ab06e8-e8a0-41f0-9475-aec48c6451a1\nc967dd12-a10b-4cf1-b7df-949b024ec7be\n4b04d3b9-c7c5-4c44-9fe1-c982f206dd0d\nb5554b1b-5891-4960-8412-e6175e4385e0\nca2b8e77-ef24-4dec-954c-81c81593eaa1\n402469e1-7c53-41c4-8720-4bd190fcaa9a\neacb2dd8-f6c4-43df-b6c2-3495b69aed38\n303edb52-5d4b-4007-9201-0e3c7fcc33d5\n08b9a9a3-1160-432b-a29f-0bb15b396e2c\nf392ac19-e4a3-4f43-9d4b-03f1f58fa019\nb83c4033-f5df-49ba-b1bc-125e0634c545\n5e4c1b7a-7e59-4a50-8dcd-b13d417ad0b1\nb0c1d925-509d-410f-bdbb-a436c657c5d0\n73d5892e-b948-4af2-8a1f-31f2c98eefae\nf254b9c7-38eb-46ed-b2c0-540bdeb7a532\n03b719f3-64ae-448c-8af6-8bf73e2b76cf\nc9f9b913-3663-42d9-a8b4-e7c114764615\n4b47d181-7f65-4f2a-a10c-6ee51fb3f1a5\n6bd6fc49-7fbe-4454-a7b1-09c2dc97e3ec\n602dd25a-4ed1-4347-b05d-ab4a6db067d3\n4d6dc24b-adc2-4f5d-9fff-cfedd7c95731\n455d2acc-26ec-47c8-a4ba-f4d6b74933cf\n690311a4-78f6-40ca-a940-e8b45eea3881\nb7cb56af-8aff-482a-81f8-5792b4de62cb\n8aacc6d6-6ace-4b2c-8305-601667e2310a\n2c6ea9a1-8afd-46c1-8a4d-85588a4414ba\n588baa2f-5a57-43c0-9bbb-703d5d513821\nd4a1e0e9-6ca4-4b31-9bde-8dca0e0885b4\nc8cb6c94-3b34-4a3f-8b8b-e9b4dcd77def\nb56867da-9919-4ccb-aea2-604ccb4c2387\n074b45fe-56e4-4096-879f-7543073c60d2\n92b1ee31-d73a-48f2-846c-b46a9effdbac\n163b97a2-65f8-4497-bdd4-70cf6cc9368f\n80fb4cae-cc80-49c4-afd7-4df83a03fc99\n7d7fcbb6-fb94-4e14-b480-eab056573a31\nb73de493-6451-41ad-9ff9-4ed2eb15d4d3\n03d30a65-15e6-486b-ad44-be9fdbd86001\n336996ba-cf8a-42b8-9fdf-2c71cfd6076b\na473f7ef-ebf4-413f-8f97-1cdb84d29969\nf438f452-688a-4a90-b184-5287703671ff\nde7a07e9-5341-4a96-a514-a62d9102fc24\nd9c149f2-468d-4aa0-9764-a35b3560ddb6\n73d93798-818f-4507-88f5-3d60ec7db26a\n715f56e0-cd0f-4154-b141-0a2810d1a306\ndb4ab5d6-e923-4f48-b00d-13aa2330085a\n74dc7818-f5f2-4326-b28d-b377023285be\n6490b08c-da57-4be2-8477-863141f3323c\n4f4253e6-5225-4cc1-afbb-e3fee681661b\n0dddf17c-b756-41b1-8045-e6fa39e3e4f3\n871d6031-09e2-4953-9ad7-5d677f73089d\n477b31f2-53cb-415f-8b5b-3400777341c7\n42e06c90-84d9-4d51-a397-ceaa659021a9\n3e954272-0100-4a31-8605-f5735baa1b9e\nca104c70-a428-460a-bb57-6914fbcaa764\n4435138e-12fd-4a63-adc5-1739616a00d3\n17e77da6-d847-4422-9479-0663b164cd69\n2728ea65-d640-4c55-8cb9-9e113f3772aa\na8022dd7-764f-4214-8134-71203cd98f7c\nfe287e38-2971-4b9f-a34b-25e5a50640f7\n25e33eea-ccc5-423d-94d7-c44d5a34a27a\n58a5a6eb-d4f5-4dee-8eb1-3a2f694cbe90\naa1e99cc-fd58-4ebb-b401-f539edcfe9fc\ne8a43af0-85b2-49f5-8d71-4231d6b2ed57\n1ed054d0-64f7-4ebd-a1de-f01fb5f75a1f\ne021d7d2-a67c-4737-ac0b-b8568640e33b\n2a66a1f9-6f56-46b5-b60d-3d466424adaa\n66a98c14-b0ec-450e-9048-887ccc83b4dc\nbc56fff2-84a3-4cd0-869e-a4856008c9ca\n5e285fc7-3f50-4028-90fe-054fb0ee1070\n64c822af-64ce-428d-a876-4a62899db32d\nab6071b4-b700-431f-b481-67c73d300979\na0cf04af-793a-4711-b69c-b632d9cd6885\n43216bab-7676-40db-aeda-1af122f30e3c\nc741190b-e939-4b32-985d-b4df2f74a467\n8652c90d-22ed-4799-9e2b-144ea1df2709\nd2b13a56-70fe-4525-be16-5a071c01011f\n6e08e67f-f9d2-45c4-b559-c6a9545ae2b1\ne10239b7-90f3-4956-8445-85cf73533001\n32c1fbb3-9a8b-4c07-a9d9-c7e934050070\naed71bd0-1261-47e4-948e-b034b7b5d4c1\n3508add8-487c-4eee-ba46-0755ebdd9a47\n5f02fa63-be28-4613-83d9-88fa18d9fce2\n68d5b474-0f53-4b6b-a635-0c5ea684c397\nb320d549-80e9-4393-bcf7-6995fdca4ca8\n02deebf1-7a3c-4b22-bd21-4a5d0f497200\n90208c05-f87e-498e-b4ec-c21207978082\n6677a669-3375-4f45-b65c-70f982171a2f\n60d4a5b5-bced-4c22-ab2f-8ee05076ceed\n0829138a-f06f-4bf0-9ebd-92fb66ccb5d9\nce0cf6a3-65a5-40ec-a166-c3847c988c5b\n5273c29a-0e16-4abf-b331-8527af2abbd5\n926c9d09-3835-4f9f-a359-289a35e3b008\n8d76488f-6c88-4d9b-a848-af66b58275f5\nb3df1b3f-152b-4994-88c0-eb8bd2573f7e\n8da897f9-6727-4e64-8a54-59fa1f3e0d5d\na9a29a50-6852-468e-a500-a25b27b37af8\neb970dca-6fbb-4542-a792-2d6d1f3972df\n0eb48ecc-7d5c-410c-a294-7c9d8616fa80\nb070c584-8c9e-424f-9917-809f715abc3e\n3aef533f-22e6-44fb-b9a5-c3a73ecc3b70\n5f68c74f-dbd4-44ce-956a-e9c783045d9e\n853f1bea-e10c-4773-bd09-fa2106565349\n989dc258-04de-4a63-9d58-34aaa8735fc5\n2e232210-7ece-486b-a27c-6f221b7587bd\ne10da5e1-2288-4431-8af7-2a84753ffc71\ne9e7eb25-2903-4f7b-8e01-45dc3d4e4e5d\n9f68034a-ebd5-4677-ba4e-40680bf2a65e\n96c2515c-8173-4fd6-8a3d-c821ce670586\n6a6dec81-df4d-4289-b036-1a74948fae8b\nb43c9862-3333-42ff-902b-0ca4b10776bc\nb4f2f17b-e2ea-4259-899c-a36d09483299\nae9c1bed-23fe-47e5-806a-792073557acf\ndc3c8cad-0086-4682-a7e9-1209f6616e9f\ne2eecd30-a43c-4266-aec8-d15581c7a14d\n496f6578-e87f-4f99-9416-620b0dea5481\nd065bf46-e2ea-4d0e-ad9a-a1a76606f9fd\n3b4281d6-330c-4b5e-8f47-847590b76924\n85bbfae5-d689-4cac-bef9-f98c800d2b0b\n85ee215f-825e-4aa6-95d2-e0e5e40082e8\nac4858f2-7194-4c5c-8e92-4ca34d83c448\n47fef6ef-9e4e-46aa-b2a4-aefdb2dcf021\n6593ffb5-625f-4a05-b9dd-6e5c37c8b17a\na114c663-7242-47d9-8468-b71d1b83e4f6\n027b355e-0e0d-4ef0-ac6e-672a867766b0\na4248b4f-0b08-429c-a4ed-632b9e2357e7\nee4b7c3c-f360-4d4e-a049-6b4ea8fd7267\n23620155-c8bd-4e5f-a592-13d7ccd81093\n88295524-f383-449d-90c8-443764ae3996\n7e64eb58-4cd9-4f2b-bd81-005226bb55d5\n8046ae9d-4c0a-495e-a168-9c49a50c7047\n05e6c176-46bd-4b1a-8f37-0ccf0a8e5ccf\n62fa11f2-74ee-45f9-bc9a-1d8b49e2d705\ne0a876c5-d102-41bd-baae-61578ad507e9\neb1288a5-24d1-4403-a7fc-89d8af05f14a\nfea47fed-45a7-4967-a045-7e3eb987b22c\n1fa13284-c4fc-41f8-98ee-bae559c3e3ee\ncebac757-810c-4fae-83e3-75119de5e107\n298bf380-d59c-4c3f-a419-a0413db34072\n9e8973a0-6a49-45cb-9457-7b67f05ad292\n356cbe07-4bc2-4656-a321-904cb220132b\naa83b29e-a02a-4a13-9f1a-6a06ebce8b80\n98a54fb8-3d86-4701-a446-0a867ddf67e3\nad6ebe11-0d2e-494c-99c4-51a8622e8d59\ne63adc2f-e5f2-4b44-ae6c-dbf1f55ccb6d\n9fe7e1c7-0c0b-4822-a79c-8e838a6d042b\nc9164f6e-f751-4400-8217-b9b955bdb179\n9221555f-7eba-4aeb-94db-064b11a8b167\n55e98da8-0bf3-4dad-81cc-5ee2a6e9cdee\n5d9be992-a3eb-4b59-a66a-155679a4de5c\na1f1963e-e819-48f6-9f1f-0f3f72c03cac\nbe0ecfe1-bf01-4d32-b727-f85214de08f8\n9fdae880-f75e-4c14-9d23-8e5fce3e326c\nf2eba8f1-f828-43bc-9841-c1b2c8e9207a\n79afced4-827d-4556-92aa-223545aaa744\n650378a5-7657-4896-bdae-044272db80d0\n261bfd88-f9df-4b70-994c-cff9fceaea2d\nd3220e29-1f66-429c-a529-4d6536c80b2a\na46f157e-2988-4fa0-b636-c523f30fb2b9\n8b0f46de-696b-4614-8efe-da2b8b1cace7\n53ebb34c-adb6-4f8b-b5d6-06ab3647173f\n2aca4330-c7a8-42c3-8382-b7dd2cc25817\n849ec044-b1fb-42e0-9713-fa76dc1e4187\n061e1bec-9930-4dd2-9815-74f13b71f903\nbad96a2f-efd5-4ac9-bc22-45e533ee728a\n5ce20455-f4f9-45cc-8984-c116fa4f24e8\n0a00346b-c9b4-460c-9fcc-1335490c16d0\nfdbaaabe-e7ee-4264-8e7a-808614bb1d47\n5dcad11b-49a0-4667-883b-83928615f5e7\ne416698f-a65d-46c7-9a5b-b2c18c1373f1\n8ebc74ef-1e35-4213-99ba-9db5d0025f2f\n20ebe854-0999-4277-989e-bb720777cb17\nd62ab594-d7e1-49cb-95ae-3774c5bbb7bb\n1ed669ca-b329-4658-8a8a-ef66fda518a8\n7faeead0-8bdd-467b-8f96-814a8bccfcb8\n7685027f-a3c3-4430-a788-938dd201d549\n0535a6fa-1d0e-480b-a4f4-e3fd8087a33a\n704583dd-4253-4575-9af0-483f1f50098f\n641b59bb-88f6-4302-a5fa-085811fb21c3\n8994cd08-322c-4a1e-8d64-a0aa99c9edb8\n05958aad-0380-438a-bd13-e1a669904f5c\n415e5f8e-f82a-4668-be2c-6fe81a1dc4f3\n94c347d1-00f3-45b0-bad3-51df0a8a7f4c\n4c38df24-0dcf-4ee1-8c56-76908424359d\n092abcb9-f4a6-4443-b2f1-132283513155\n634a7f25-2491-4473-9293-d20279bf60c7\n369dfb78-cfde-4547-ae48-d1c68405d578\nfe4ff6f2-baf6-42c4-898c-7a24b1708cb0\n0b9d6ba8-aa92-4e56-afd9-c07cb68fbd67\n0da59c02-ff74-4d35-a590-94d58b3a5123\ne2384cab-a655-4152-88a7-a94ca146a250\nb30a460c-d642-4c26-b0c2-ed9fcb0c14b8\nf8ace30c-d095-48ac-a514-11b84fa39271\neb742fd8-b2aa-4f1a-9d5d-4ad0beb7cec4\nc11650d3-7afd-419f-bb45-418d3324319d\ncfbaed9f-350e-4eee-82f1-16c2764bd6e4\n01151fe7-a953-4548-91b6-3dd816f480c7\nb5603a10-1f74-496b-952e-63093f56be68\n84a5a325-0fc3-4d0b-a8ae-9fefd616562c\nc0ce6e7f-455f-4ce6-9c2a-404eaa88456b\n23622be1-ce2c-4215-a4c9-599aca2846b1\nad0cc3fa-23a3-4d9f-a6d2-44276164bda8\n26e4e2cb-855a-49f7-b6f1-63ee16584abe\n5f59dc4d-b3f5-4906-af7a-d86f03fda97e\nb08b5e19-6b34-4a99-ba70-456c6954d893\na7836560-397d-4682-b6ff-4a65e8c10081\n91298006-cece-4301-82ae-819b412ec37e\n848c698c-90dd-483d-9999-6952e72d885d\ne7729b89-ca8e-4af6-a9d2-a89cfcf0ace6\n07346efe-1ec1-4895-985c-2e0df3da990c\n25c16e92-a3c8-4a42-a5e7-ed20495d7862\n8a49eb5f-a65a-4797-9273-ce492b6dddf7\n192636e9-24e6-4479-90a8-032578cb9289\nf38d5f5b-4657-4a47-bc2c-ca4eebf1dd43\nb09e6449-9be7-49a4-abb9-09b66790f7fb\n9fba1fda-3006-4f4d-b9ff-bd267e888a1c\nf4536da6-af7f-4d8f-9ef1-fd873c6a23cd\n178f546b-bdbf-4608-89f0-d38d137df56f\n5a0a951b-64de-4eb0-961b-d3445e898745\n6bee79c9-21a6-4c97-998a-b203c6a9f6a4\n5d85b543-b59e-433d-b3f2-b8f22a7a6708\n58330381-c0ec-44ff-86f5-7b4f6681233f\n6c2eb44b-8b45-4e71-893a-d756c995b1ee\n9dd7d268-1905-4f2e-ba11-cd01ff3bbeac\nad00e9fd-4b32-432a-bb38-3716a0277d36\nbec68ee8-bad0-41b2-bb9d-b011860833dd\na3905ad3-6bdd-4843-a6e0-a48f971d972b\nc01e6391-65b3-48fa-a5a4-d7b1d791c31f\nd3a5fbd9-cce3-4e83-8702-ec55fa2aa76a\n26d12cb9-29ec-40a6-90d0-a9916ab7d71f\ne1542d95-baa1-45f2-81f4-ccf605c2a1ca\n29f64d2e-e856-43c0-9bc3-6019be167edd\nea17b0f0-2b3a-4df2-a8c0-777a2f906026\n2293efaa-3864-4356-a338-2404c45fb140\nb712554c-b6b0-4328-83c4-ab76b195fc40\n1c92b777-7daa-432b-b871-1de4051ebc73\nd285628b-469d-49be-bf2e-bd8afe3ea3ef\n6f34acad-31a1-448f-8fe0-abac7837cd3c\n36310bdd-6abf-4269-8c40-f18f2d406bdf\n08c52cf8-2400-4d7e-8c95-02ecd1d88413\n904bedbf-c8aa-4923-9e00-c24327343c37\n3990110f-3bd0-4224-99f2-d3176105b980\n716f672d-5a75-4d51-91e8-d4ce0a923631\n591779a0-5437-495e-942d-6ff0055579cf\n7acc021f-57ec-47e0-aeb9-473e73e8c755\n5b9035a1-2f87-4f40-b058-29907c676752\n676ad174-df27-4a31-8ab0-354d1a4e4dc6\n013f5b54-78aa-4a99-b185-4d814830d02a\na035d320-1a08-4774-8743-ef8e104fae03\n24bac5e8-494c-4614-8929-0250ed3799c2\nedd41b72-a812-4f42-877e-a3d99bd17d9a\n0ed263d2-8b4f-46f2-921f-48babb929e07\n085c377f-af65-4d10-9ae9-64f9144b7d69\n2e427bd9-ff28-45b5-98f2-b627d50f823a\ne50ea25a-6599-46c0-bc87-98d08ba863fe\n9c6cd7e5-ea1e-4b2b-94c5-28a51d0b965c\n7ecf740d-27ce-42f3-8a2f-7c064faf0901\nc94b5306-a124-4de9-9343-12b9aa97beb2\n73f39348-79fb-499e-bb91-432b0fca22db\nc46ac9a1-679d-4812-ba5c-cc293b21a9be\nb1c916c6-08e4-4576-b326-8ced9ac0a531\nb39fd319-6bcb-4a87-94ca-5157577a4a6b\n572ac440-4236-4269-a43c-441ff0534809\ne2701c0d-350d-4283-8064-c02cfd26ea22\na5c6a98e-134f-4857-b7ec-4b7b4861bcdd\n8ea507e2-58ae-439a-b452-07705521f474\ne78d300d-1012-4078-a82b-3b4b904cf936\n61847b29-4073-4edd-afb3-57896ba81620\n64356673-5dfd-4e4f-b04f-f780b8498363\n234c03df-4cc2-4a83-b268-350a1ec0d595\n1300cb6c-b24a-4d48-94df-919edb03dbc4\n8e6beb44-c913-4e36-b986-989a262f0269\n42619929-c1e0-42bc-9936-a3c9638a323a\n05573f42-1c21-4098-9584-448d1564c693\n8131b074-e34f-4f86-9c19-5cf96fac4bc9\n19cee09a-fc19-48c9-911a-300426538255\n92f55e2d-a4ba-40b0-a5ef-32198d616612\n215c949b-e486-4b2f-8679-7c80a63574a5\nf95b4acd-805f-4ea0-993f-c20bd5a8d19b\nad642b1c-a0c8-463b-ab19-98815bc158a4\n5bf77b67-97af-47c5-930c-2483882d9127\n4b73b82b-9e64-4a38-bff8-776a6473249b\n1f5372e6-c19c-45ba-b35b-aaa51246504b\n3277ef9a-4c1d-44dc-b76c-98e6b33fe949\nb07f39dc-569a-4c26-85a4-4b1f8f969b87\n43c37e7a-7d81-487b-a682-ad9b5d3b37b6\n8a206d3d-7f56-459d-ae90-52b2aa0ac7c4\nbc4a36a2-809c-4a30-b13d-789940c728a7\n11136fba-7d80-4195-99a1-6a7dff300ad2\na29987de-f1c4-4ad4-9b4e-c6484afd0f5e\nd476d713-6e04-43e9-86d8-a3ced0dbd864\n46c6857f-f153-4ee6-8c59-80603de86cec\nb825d994-566e-401d-8a72-7159ae246553\nd0de242e-5485-495d-821a-b309206b1068\n0362d649-5469-4983-af4e-627ee22794e3\n458d65f1-f688-4d34-9c49-691cf8faec68\n03933b61-d7b1-4cf3-b801-7b21ed4ea44f\nd8612906-25ce-4523-b536-c4142d7ffbf3\n935d97a5-5816-477f-b142-cc90efb1a4df\n0445ee99-5855-49d2-89a9-6efbad4332e7\n0b2c594d-4f81-4ce6-b716-97ee9b0295af\nb1b8c1e5-5788-4b85-904c-bd90b4a11ecc\nce0c3ebc-7d99-453c-ba9b-d3cec40b3b8e\n5b0f8065-45c6-4927-b6dd-a0559fa0f444\n3087af72-2bd6-43bf-ab97-b80fc77e8736\n16cb5e21-1420-4717-b2f9-d9138e9a88d8\n22d4bd45-35f1-4445-9fbf-7c90f984e6ad\n57a5ce53-6836-4c27-893a-ad86aba578a0\nd5fcb493-58e1-44b5-ac00-fd05a74d08a8\n05b166bd-b33d-4948-9b69-76e1bb873272\n75b77b7d-bd28-4a29-a519-5758d77ce964\na4c4df50-08e0-40c9-8285-65c61d47f3f9\n7f74bf27-8074-4880-9f7d-df78c533a9f6\n4452d56c-97cd-40d1-9a47-50bbda9c6d1a\nda34ecc2-b3c6-46ff-b7e6-79d9acfde2e1\n63ec2a62-58d7-4d16-94e0-7b52529d3797\n81b55fc5-fa50-4eea-9139-89b87cb10a9a\n36cbf6fc-330f-42ff-83aa-17e8751d983c\na938a9c7-35c6-4480-86d1-64f6e55581e1\n74885965-fce0-4ba4-b7fc-52e37fe99600\ncb3613ea-10df-4455-bed4-37c08cf8f615\nf2e7cd19-1a4a-4cef-b78c-5a25bba9bdac\ncd25f5b1-1a92-49d4-b5c8-1357e187e591\nf4afb42f-0cff-4dfb-8d6e-71342ff95392\ne10bc004-3b88-4e94-8aff-c6a282af9168\n4947859d-8041-4760-80f6-01673266635d\nfb930383-c256-46a5-8d83-ed3ecf90080e\n5b055938-e088-41da-bce8-93f266371d31\n92f80584-2dff-423e-8ba0-277905746b2c\nbdf84911-33e3-4a12-a1d9-df23a4971e67\n5d9dd5b1-39b8-4529-b489-dcf94715606a\n285b406e-d92f-443d-ab3c-b9a3496db4d0\n0813b72d-3889-48bb-98ad-d80d7e03f81d\n97dc0034-e02a-4bad-8f33-38b5bf05fdd5\nfd3a8ac5-bd06-4591-a87f-d4302bf555c2\n1885a710-1d3f-444a-9e38-f286a627d590\n2688f093-6993-42e7-b649-a6906bff7db1\n1c3ba206-be7a-46ba-b9fd-28b2fa31f12d\nc057bb51-7aeb-411a-83dd-67506a2eea41\n65b3b715-af9e-4d36-9d58-73470bc2a9cb\n1e7ebab7-124f-4d2a-ae5f-e9e000997d1f\n076c04a0-4a2c-42db-91dd-150c767d4dc0\n769a43ed-d7e7-4200-8bca-c803accd8f16\n7fae1102-998c-4359-adf0-402e72604ff0\n4aeb2910-cafd-4d14-a5bc-93299689a506\nc9f30652-dfaa-42fc-8458-2f0e090da2be\nca4e216c-61ed-45e0-9d70-3c64211aaa94\n0baf0516-0e1b-4b42-bf9a-208d5023ce2b\n3b5bb14e-b613-4e80-818a-686f5bfb565c\n7b30c7a2-cdc4-42ab-ac42-45befdbf8c67\n80d60d91-4cc9-4723-ab1e-d1d45c6c4ce9\nc1040367-1ba5-4dfa-b7a5-bc1c406a0796\n09e8f87d-1609-4bf5-a74b-ac3fe8793c07\n1cc74003-b52f-4e51-bc47-b4b53e0ef950\n6e1a9278-934e-47e4-a85d-de10f45c3540\n84ad347c-c688-45bc-b86a-da204748ca79\nbdc2f665-48d9-4c02-a32d-db4debce877e\n9f7dea02-73d2-4375-83c8-9aca74a553d4\n799f5b3a-f6ea-4506-bfbc-e90ca91031f2\n927d65f4-e42a-4d3a-ab48-4701e2119989\n8ae04c49-1e81-4f4b-9c82-2f34c1454c04\n63041f2f-2167-4537-8f5e-7865307274e1\n190008a6-8778-43d1-8ab2-643e26119e05\n89538834-3368-4934-b96b-8de0d2b61eca\nc0559651-66f0-4237-85e1-8a02719517c5\n045cffbd-7742-43f6-9e0f-943ce185753c\nf263c241-4034-4a71-b704-29233d775bfc\n7b12eb95-0333-48c6-9958-d566281a0f54\n651c40c0-b148-4c5b-9ea0-a0637ef695fe\n90e0bd8e-abaa-4060-879a-1a0c3ed5f996\n6656825c-780a-43de-8b1e-63c3d56b736a\n6d1a6ebc-2749-41c2-99d5-0aa6b998d329\n65396fdc-27a7-4256-99db-e7804891c6a7\n6e4a6a31-856d-4ce5-b9ba-b085ea2ac5e4\n89c21895-1f02-4b0b-9836-d36c02a60f38\n9cc2fb0b-6779-4838-a478-b387c4df20b3\n386885d8-223f-44cd-b9c0-526ec4484b8f\n4a63b1b6-3520-478b-a820-20bd1c11000b\ncf1ffe9f-3d80-40d3-b4ff-69484bdc8cbb\n4c86b5f1-91f1-4767-8adf-fbd52ffe160a\na14ef850-6a7e-495f-bf1e-8842d4b81994\n100443ce-d512-4adc-b73e-3051f085ffde\n19c8cf66-a763-423e-b60a-8cf181c82bd0\n8b08fbff-05cb-4e2e-9ff8-2a4b4ced4d60\n7146de03-16b6-4795-bfc7-8bb2a3893749\n2a000bb8-06d4-4828-bf41-fdefb7e2df84\n4306fe26-279d-49d2-83e0-711b4ed14418\n09b3c9e1-d231-4a2c-8f69-1d55b72e31a5\n45a2bd0f-4d0a-40c8-9eb3-2278fca9b7c2\n4c1c6e9b-04d5-48a7-bfe3-06a931d7d93a\n52c7d260-da22-4ac4-b990-a544c3218811\n51691c9c-d6fb-4e83-87bc-5c2472ed9b9f\n15b92ccd-4342-4783-88fd-c9ed2c5351af\n6232a4ef-1e94-469c-9c8b-2e87615a6d8d\na941e9d3-5c5c-4aa9-89f9-2efe23049066\n02c418c5-790c-45d1-9b55-e840c809cb7a\n1d0fa5d9-35d3-49f9-bfdf-ee5826d60560\n4ef633c6-f1b8-49ee-b08f-eb5181661818\n5536fd1f-7102-473d-92a0-65adc11b76ea\n0f92f6cd-d42a-4522-9583-51a8ed65025f\n22457003-7c62-4823-b5aa-2fa32f4e4309\n681b4d23-092f-41b5-ab37-6283a7f119f5\nacadccb2-eef3-4aed-9f16-36badb82a0eb\ncfa44761-2e57-41da-943e-d016647ab8a4\n46719b68-1b6c-42b8-8b26-f0a7a00d2a7e\n7fc04633-6435-4e11-bff9-50f495447a18\n1bcc9cf4-82b9-4599-8cb6-9c0c6cb70ca0\n013ce620-35c2-49cb-a08a-e3c428bcb8dd\ne9c39611-bc44-41d3-953c-0e3219852b6c\n89c2f53d-2266-41a4-990e-bc55f12acec2\nde9ec2bc-a9fe-4b72-8849-4701d9ca8bee\n5019b233-62a8-43b0-bb0b-e6b415d711cb\n15607b8b-486a-4d24-b26c-454e09d4e034\n7de9ab26-4e37-47ad-bd17-ca77ee21e71d\n666e73c8-ca89-405e-9cfc-61e30ed75329\nb7c1cbc2-c7b5-4bad-91ea-89c727cbf8a9\n62f2c4c6-044b-4537-a4fb-9bf8d8caf152\n9453177c-ef39-49e5-8ba3-4092483d7ddc\n356ba491-2d50-4c03-9824-320dbc4680b4\n88c1cb67-1274-4af5-922e-fc641132a500\na37c29cb-167b-48ab-bb86-80ff0dcfe0c4\nc73f86ee-e73b-44d0-ae1d-85edaef6dab0\n67b7d4b2-b800-4935-91e1-16720903fa50\n746b7524-d3fb-4536-a91d-93a0f63d5089\n6c8c2035-1792-4549-9cbf-d722664f8b97\n5b2079a8-7360-41ec-ad73-e2ded259b490\nfdc0ef3f-d523-4bf2-ac66-974d89536b69\n754f58c8-312c-41c4-83a9-5744c216bed7\nbac2644f-2780-48b7-90ea-5ed3c814ff92\ne33db577-0a16-4f68-af1a-5b5f8eacde18\nac179946-c19f-486c-ac1a-642c051ce144\n8d0af804-8089-48f9-8210-8c79fef38b63\n8a40c09a-84cf-4a56-8764-72fdf04434cf\nfddd712e-aeda-4613-a345-82ca2d8aca15\na5fcaadb-f170-49e3-8d39-9fa73956c93d\nd5ce958f-d043-43d2-8a11-51445e46671a\n409a2cdf-9841-4476-87d7-5008a8e386cc\naf678610-b933-4d46-854f-9dd06974ef92\nb8ef6ce4-428d-4dd6-9228-adc23fbd71f3\nbaa2b9c9-bd3f-49f0-bd19-43b7b8e87ded\n597e8bd6-e001-416d-b62e-9977727849c5\nc446f4bc-a74c-4ca8-ad23-6b807012a094\n79acf878-98be-4295-8490-edc67010b8fa\ne9461405-ac94-4f61-be89-6a15a8292c86\n90fc61ed-99c7-4a3b-ba89-bbb7012f2bbb\n82c7f5cf-1696-4d44-9320-c1d3ef77518c\n73f7fbf1-5bd4-4a28-ae77-cfc02345df9d\ndb9f1068-a4a8-46f8-a500-78bec97d1c0f\n3d4524d3-a6d5-46a5-8989-731efd267fb3\n739414dc-4e78-4cc3-8e61-42224945dd89\n37c1df3d-7490-4001-89c7-ad288261b80c\n97e523fd-271d-4917-9fea-8e365561599e\ndb0b2149-e640-40c2-88e8-d0da673c6b9c\nf8f35863-8ddb-4ea1-ba20-7429b3af2e9f\n13dab8c3-b293-44a7-960a-811a6818caf2\n6fefc3a9-70b1-4246-aec2-b8ca303614ba\na62f30d2-b255-4eff-9e3b-05652f74ba36\n2dfdf22e-53ec-474b-a378-db697b9d233a\n2d6c01b0-a9f1-49a0-b426-df3d61c87f02\n6d523c05-4640-4325-9ca7-c6b7b957e650\nbbc43f80-7dfd-4c1f-8f6c-eddb28afbd78\n75ab9163-6792-4006-8e10-47f98e5319b5\na72f219f-3d7c-40a0-8993-976f62b8772c\n1ffa05c9-3230-4446-bda5-dda977aed4b1\n9a98cf62-59b7-4039-9ecd-b4889f4979b3\n85051429-617d-4337-983b-42d3af7f1f9f\nbbf71488-6f7f-4aae-8062-6542c7517171\n28d03b6a-c99b-4f0a-9834-bd6d42ab71fb\n74fa512c-1773-4c16-aae5-ccc1e53cfeb2\n754fd5f6-5864-44e6-8d5d-6721f7ab52b4\nb171d144-407b-4b37-97b4-d6706d6689eb\n9cf7f65c-e9d2-4e8c-a0b5-b3525f51955b\nda7c4916-08fd-4fe8-bcd3-99e0d31af011\n9f14f03b-7b50-42d9-adc7-2a5cdf7da89a\na6d28332-33fa-4b9b-88b2-368cd3306376\nb00369a9-6b96-4d71-99a4-4b0dc33c1163\n379a6503-5c00-418e-9b8b-d6d4ca02d4bb\na6a42366-60d6-4b27-8a02-d78f15023ff1\n90c6d871-6ebc-46bb-beb4-7a162006a141\n2b2cd6d3-3093-45e7-93ce-4e1ad4a49f3b\nef8d88a1-c513-42db-90f2-dc1e5fac27fd\nc6a4b3c1-6230-4a1d-a363-5494b6eca5d9\n999970be-b985-46b3-9468-87279be772dc\n3ea0157d-4795-4431-9c56-671838feab40\n77eeb96a-a65e-4758-bc31-1c63cd3de23a\nb56a040b-b587-4a24-9863-7f707d8b1336\n14db8b2a-dd9e-4163-828d-e1d399a8c04b\n20fcb2c0-72a3-490d-b0e5-e523c83d294e\n6d08f848-bf36-4d2d-8fa5-aface5d6c328\n39560df8-d254-4179-82c8-3e5ecd311319\ne09ebaae-f224-4b21-965d-7233465f489d\na689f438-c79f-4cb1-ab5b-cc44c048ae41\na6c8f9ce-82c5-4667-8a90-5867ea0f99c0\n239b7a5c-534d-4a6c-9cb4-50cc57dc0a3d\n1c407e62-1e2d-494c-9986-952566777ce8\n157e51b1-8496-4ee0-a956-fc332c2531ff\na0c94abb-d6f9-4ae3-866e-ff4c5f99eacd\ne440ee6d-f66f-4cab-9521-9737dca7713c\n457ddd36-249f-4899-a2eb-ed14b3122c8b\n6635b10f-b57c-48f8-9d6b-bf526c2397ea\na2d65968-deba-4eb1-aa47-a7b53e86703f\n4f67abb4-fd69-4057-994f-5e50861115ed\n507c0ed1-21ee-4314-8002-68da362cebd2\naac34018-87a0-4655-a6a6-1da093b2844f\ne873ca8c-9e52-4478-92dd-dc32c8631b05\nd6502837-10ea-48d7-baf3-7d729920f99e\n8c1cbf54-aa1c-41e2-96e8-d2c844dbc4a5\n7e7283b7-42fb-46c9-b9cc-ae188bd44f47\nbf5d5664-d7e9-42a3-aeb5-55058cc01284\n92212d79-9870-426b-a1fa-1b7a00445821\n2687995f-f767-49df-b0f0-1500f0a8dab8\n3dc13a66-93e4-422b-a680-b7711ef71120\n5d8a0f0c-9f44-4e03-9e91-e537ff0d6b0b\ne5473efc-a417-433f-9659-2dc6524eb4c7\nda2ecd19-66d8-47cf-bd23-51a1c6caaffe\nbdb4776a-f3b9-4f99-996d-313a77e44824\n2ffdc797-57fc-443e-8aba-01285cde802b\nef1c7cbd-276c-4e4b-804b-c05248c18781\n0c8d850c-12f9-4ea9-b375-2fe584f6b10d\n8e489587-5908-4d21-a134-9d2a8526da8f\n3d97c98c-2a56-455c-b743-f163ab2d742f\nc6000b52-c490-49ff-88ab-a7d453207416\n45e20713-c17e-4c91-af3c-a16b7d019fc6\ne6d42250-cec0-484e-b090-f6d995dd3887\n5f364527-a301-4380-abb4-58422b260ecb\n132ad5d5-12cd-44c3-8642-40129bed48f3\n38f01439-66d3-4039-b6ce-b43d572b8ba0\n057ab2bd-02ca-404e-86de-34d94df57e38\n0676c387-85cd-4f10-a107-0fd841194936\n244aadb1-f5c2-4db7-a0d1-1a4821774deb\necdda12c-662e-4e65-a591-a9f1d9f6361e\nff588a49-26e2-4bae-94a5-d9eba9c46b4d\n798d2be3-6d8f-4b13-9dac-f6eece53b323\n5d8e4b6a-8b19-4505-be3c-6e0f15990312\nc34da258-2166-4d9d-9cd3-89d114cc3071\n5ea127e7-7033-46d8-a827-06692fe7aceb\n89f70000-fa61-432e-933a-087b18e48d05\n64922997-6c46-4fe4-8ac9-9cda0be84087\n0d9f05ff-f4d8-4cc3-b300-8d9f7ca30c93\n539cfc2d-f6a6-4e80-8e32-29f4734a01f9\n6d2e9606-1d1c-4e1e-83f1-117154f50835\n546c7c01-3a06-42c1-9079-5b1b399b49ab\n85c78b14-0458-4aee-a8d3-99b2a4650933\na594d64a-edcd-47ee-b256-fa877919de7b\n3683d35b-bce5-4ac1-b154-81d0e49368a8\nb4502df3-492d-4084-87f5-066ef8668dc5\na368480e-931f-4416-bf29-f320cfdf803e\ne93ed532-2290-4495-9c71-6248abc3bfc9\n468382ad-097e-42b1-b060-475bb7bf16f6\n556f048f-404b-4753-943f-6f835b915c46\ncbeb850b-62e0-43ff-99dd-eb1c3f67ae29\neb4059f9-9d05-486c-90f6-f90c6f67b49c\nf6b0bc35-1790-44c5-aa67-0f7b696dea38\nb2069e04-5802-4d68-b07a-2cab5971f9a5\nb79f7957-2407-4b2c-96d3-15b334c0b606\nede1912a-93b0-4a96-bea7-78651c10200e\n2e213b8d-4845-484c-ba81-c5de90177552\nad943c1c-8e35-413d-bfc8-6b62b77b81b1\n0ca0c937-ddbd-4a38-8d85-aa64bd4a1577\n7860a377-e7bb-454b-8916-48c336b18863\n1088239e-cfcd-46b0-bf78-8edee3dca3ee\nd6d941ac-d2d6-47f5-b221-8a837c0bc090\nd0ac046c-30c5-447d-82c1-ec900a0ba589\n1fa3a2ab-34a0-4f11-b028-24ae0c8bf2ea\n6ee7ddf2-6901-4ce5-8a05-3051fc82df0e\n74e2a414-d63c-479d-8201-e9a7ddb1c7ac\nebab544d-c5dc-4d9e-b225-ee63621cc8d1\nf48a68dc-a4b7-417b-a92d-0afb55c1ffc3\n32b128d2-89b9-4802-be70-20186b485954\n932a32e9-5ed8-4238-8273-603371697775\n53048ee5-81aa-46fd-bd6b-05585f48980f\nb41a87d4-2795-420e-a88e-18fd2c1cd316\nd38585b1-8e25-4456-b315-bfa7b4e7c6d3\n8c94ff6d-bcf8-4e8b-b482-490216dd40bf\ne21bf68f-ebe6-4b55-9227-3c3347632341\nc86ef41b-dac2-4593-9fd8-f64d2652ed43\n36870f25-452d-4e63-ab14-42df05bb880c\n9302c94f-f61b-4ac6-82e4-17be144838c4\ne1b9cb7b-b423-43db-9ae1-b94d455c4960\n02655120-abf5-480c-8bac-714e764eed06\ne8d10886-b1af-4055-8bbc-d63ffac4044e\ndf3d59a1-763c-414f-a596-a1ecc9cdf06a\n9961f4f9-b5b4-4778-b9c0-9a5878ce99ea\n68ecaab9-a18b-4b9c-8ff9-2ddf2ffeb825\nd025e986-2ef1-4f47-b6b5-b822984dbf39\n76f6d0cc-c53c-4525-8cec-561009fe9472\n06c33d20-adcd-4088-9640-4326aaeddb15\n039c52f8-bc48-4c62-b890-2261fe84fab1\na8cc7c44-08be-4edc-9c3a-9c3529516d43\n9e218b6f-1cea-4841-913c-24a95737febb\n76d9c5f7-9564-43a2-94e0-11a27a26e0c6\n707e9f3a-9ec2-44c6-9b8f-679d59d41040\n27f389f0-aa12-4192-b1d8-2ae82eea2ef3\n428ebc64-5d68-4d1c-847e-0130269de536\n362ed99a-0cb2-45af-a70e-ae97f7d5cd58\ncb626c11-b7bf-40a3-bfe6-a84c3486f7d6\n8aa08b18-a37d-4df2-bb3d-79f0778b7894\nd6859c32-7c86-4ecf-9143-e73ab01385e1\nfe2b9f1f-3e9b-496b-bf6f-f057cbc4c287\n75381564-c471-4893-a0b9-40949cbf5593\n7f103ce4-e839-4163-9530-1f6b96c02c9b\na56d4efc-4397-4cba-b986-18cabefe83bc\n422e6583-7b07-4a24-bc08-dcc0918a9607\n1b49a274-4ae3-4a36-a9d7-38d982653c46\n29769f63-ef05-4aa4-92dd-4f62de6a8497\nfc3537ae-7775-4cd3-b872-d92f4abf1ade\n2f778a95-ba60-49dd-b971-eac4f6d75ff7\n71c6e6cb-d590-4f7d-9bed-f57d16cb7824\n92cbd265-67f5-4203-8860-2ecebc2f88d5\n6014fa2c-8691-445f-8517-c84a45da9fa9\n5fc27f4d-0b69-455f-a0c6-acc05405b05b\nc19ab94a-265c-4218-bdba-576811e26f13\n4d65ea61-e0da-4599-8923-3bee77ba980e\nb08ba291-11e6-4100-95b6-dd84aebe0bc9\n8b764720-ab8a-4e56-bc6a-82a11d5c5ee3\n87ec2ae2-79cd-43f8-9218-7a8c81957319\nb3aa9028-9732-4805-a675-994c490934b9\nf8aabf6c-eeb3-4b54-9a95-1eaad853f359\ncda6a14f-6ce5-4bf4-b154-04b04637b41b\nb0145c9a-a503-4fdc-8eea-0bb952e3f81f\nfaa7a2bc-316b-4209-aafc-eddad3fb7d55\nca995f63-ddb2-4bf7-9d67-4d4faef1668a\n93740933-f09d-4a68-8b41-5f24ef26afd9\n085e095b-ff3a-4a05-a532-df39568815a1\nfe2abb4a-26fb-4326-97f6-a557f2e40c22\n6307a30a-be5c-4892-a2e4-2771d87e98d5\nedf039ca-1b71-4bdf-9214-91bc9b31a93d\nb45c02f2-91da-46c2-9891-465f3cb5823e\nf32ddb22-fad7-48b9-b102-26497243a27f\ne96dd769-5e50-440c-a407-88119e25326a\n82ec6b74-da6f-41c3-b8ad-2d1deb376a98\n15804171-43fd-4dd9-8768-bd483e93a50f\n4dc2a55c-938f-4774-b02a-9abbeb6e37ee\n4856926d-85a1-4c86-b3e9-11476913f5c8\nd4b1f0df-490e-41e0-9be7-f3cd152bcbcd\n383000b4-22b9-4bf5-83f4-d50b3c907f62\n816e2403-a4ae-42ed-b75b-2a78fb12772c\n3ba23396-15ee-40b8-9010-22dcde66962b\n9103a237-a534-4d28-b914-6abb70fae2c5\ne63c1e8b-8ea5-4c8a-9855-28ffa7df4b21\n93be5a8a-1423-4c41-86aa-139adde13be8\n3580a7e3-9574-43f6-a98a-ea8e8aaaa1a5\nc12372b7-9753-4102-9eb8-54f436bd80e4\n3e82db00-0db1-43d4-a4b4-8fe72506a8ac\n0fdb9370-ddde-421c-893b-67a997082f73\n4d0b115a-04cc-4253-a598-7e6bdc7c665d\nffe08a31-a162-48ce-8239-8e3bfd4dac32\n327a2017-10bf-4e4d-8a2d-bdc6064a86a0\n81ea44ed-f652-415c-b65b-04a2370948b6\n6d3a26c8-72ff-4b83-b93f-3d71b2cd562b\n9b374352-7858-42a6-8f47-4cedeb1dc66b\na16d5a9f-f96e-4c6f-bc40-392ee98ef424\nb19e0984-9e1b-4825-9538-9ea58fbc1b27\nc03fd87d-97ac-4813-b959-0c3dd06618e0\ncd409c7b-27b9-4766-821d-0f72b65ee9f8\n86f39952-4edd-4fe3-8d5f-b1ffdcfbba6c\n0ea9d16b-a8e5-4201-b74b-079afd76a297\n76325ae1-dbd6-425a-851c-2e8b97b0f26f\n9a5e1d5c-0ba9-4b3e-b077-450ffd96a486\n0a81216b-e5e8-4cf1-8892-3c1710cdb5ff\n09719d8e-1bda-47cd-839c-0bc90ae82d2a\ncdf340a1-3b5e-4a62-8e56-5408a0a466e8\nd24b398b-a32a-490a-b250-112b9f00c01a\na105b22f-d487-45f8-806b-3d8e4da36cc6\nd638b2ae-2521-418f-a39e-f2faa834aea2\nc9179e24-2b53-4360-bd53-ac6b0071f214\n4a739641-e800-428b-97a6-502d4750bb00\n3121fa39-b3d7-4417-acb0-fe2f85ef910f\n123b2099-4d90-45a8-becc-a8bb06258f82\n2fd00475-7694-4f2a-8a41-17e01f416d1b\n7a60c883-6d12-48b9-a8c0-bd5f148bc778\nd5eaf09f-8507-478e-af9d-1a15449d9c2d\ne4694e32-7018-4093-a66e-42882aee3eef\n8f8902ef-4c7b-49d3-ab55-f9e738dfe4f6\nb6f46dd3-8e9f-497d-a5d0-f538b20356e5\n918fc283-03e5-44e9-85a9-c7c1760558f4\n90e08921-e5ca-4912-8715-7e21131bb5bc\n54e7dbef-0600-4833-b04d-251a2bbbf472\n9607ffe5-1fd2-45a6-ac92-296ebea36b23\n838b70e8-d63d-436f-947e-7bc2cea8a2d5\n056c613a-35c5-4781-ac09-fb706b92c328\n830fad69-dd22-41a1-9fa6-6889c9e38e6f\n9429a839-6a0c-4dfe-87c6-82b7cc65b25a\nc3b385be-e6f2-4c9c-a34e-6ae6f649539e\n9ef59550-e7cb-48c5-a486-d96ddebbe4be\n86489d33-939f-4469-8f49-fe060f2dce3e\n6a960ac3-d1aa-4e5c-babb-520c3be9aa99\n3c3e42e4-350d-4b28-bdbd-8764b87e5018\ne4eecd5f-26c0-4dfa-b268-1fa2be3959ea\nb4538d29-344b-4e89-8bfe-3b9e550ab86f\n9c45c7b5-c2c3-4bde-8da0-284d73e2138d\ned8a3ab9-0948-46e3-a70d-49a692b218c3\n7bfa3c62-83ee-48eb-8195-a0ee7355e760\n22c9b12f-3b77-4a78-8ce9-ebb99259c133\n34b752e5-0efb-4aaa-941b-eeb0dc359b17\n4fc9b132-3b55-4f32-9ed0-529e67d17e7a\ne9d8e833-2c49-4230-b83a-9fd6756b260d\n545d2ae3-03c8-4c1e-b2b7-fa26cc7c63f9\n55458d50-861e-4f93-916a-d22fcaab1475\n6e5e2e4a-637c-4904-97e3-b0d322f42310\n0c4ba5bb-ca24-48d2-a4f8-b587fd91f8cf\n784795a8-793a-403d-acf5-4791459f251d\n29c0fec5-4add-4615-852e-4be4ad19a468\ne85d1328-fffa-46dc-8c44-93940c6b9b4b\na4212774-0f7f-49be-80e7-f7ad7d2c7a37\n193b0ed6-64fc-4fe4-985b-6091ccb2d659\n6e79517e-50dc-41fb-8f09-381e9decb33f\n3e7731d6-3660-41a3-8762-7262d981e944\ne2a21cfd-352a-4607-b747-8bcf81d9d00c\n91429d9c-2af3-4ebc-8caa-e08f561e1af1\n328316c6-56f9-448e-92bc-a7a99252b0eb\nb978f0e1-568f-4d6b-b49b-713ee212ea8c\na80f1f33-18df-49c3-ada0-99e982264071\n979932c2-3575-4013-ac54-7ba6396007cd\n046b05f1-4984-4880-9e31-2d86b1789cc0\n6397b2bc-1184-40ce-8468-663cbb03afcb\n4c9f1067-f5fb-48bc-9bc1-f9f15184dd1e\n9f9a1562-5dfc-49f7-ba4c-d85867594e77\na2e2e862-43b9-40f0-b928-2e1087919696\n41668d84-c467-49b8-bb9a-916b625ae1fe\na4eef42a-4e97-4dec-8604-0a397d55f2a5\n464e8943-0297-4192-98b6-e444d1abfc90\nafdf31ca-df51-4ec7-9ed7-e640a084bd0c\n07e3d6ed-bc10-4948-b453-58e8b1367af4\n447950a8-cc7b-44cd-a463-5e4a7c355845\n7c9b0178-88bb-4228-8a08-5cc59c2d048b\n4f7296ad-d197-461f-9b99-27939228d9b6\ne97ed06b-f415-4938-8681-d128f253dfa5\n112116b2-221a-4600-b28b-c28acb02c3ee\n098c03fc-8fec-42c2-99c9-7413f1c1c29b\nb45d4998-d477-4197-aa45-86bbe72331c7\nc5c79963-114d-4af2-90f9-0fe23b2fd757\n68202636-d727-4b5d-818c-1ba05be727b4\n951b69da-7887-4fc3-b1e1-98c1e9f90f26\nbfb4b198-eb10-40b3-a6f0-d1c315b87b01\nd88735cb-b6b4-4a0c-a679-96860c814e89\n4783711d-09e6-47ce-b519-948c6d94fd56\n5b008e6c-4441-4069-bbd6-09462235d707\n7e75f390-9727-4d44-951c-09267be838d0\n1a6e2086-6406-4e88-93a5-faedb2042c15\n9b6aa290-a78b-4eb3-8442-d4e019b2402b\n87b1d6ba-36ea-48b5-a61e-2300934a4fce\n45436a5d-8066-464f-8b3c-9e00575cd9b3\n9f3633b7-7259-4212-856f-3d20ea120b4e\nd07f9ad3-5943-4f2f-a396-b02e082641e0\nbbfd78b9-c33e-4204-861c-286868ff8e21\nedf57f81-055f-4463-8f88-b36318ace12e\ne390b0a1-faa5-4334-9964-2aa81a061013\nd166af59-8092-4433-8990-f3fb4b0954fd\n6e5aba10-88c4-4b67-8731-b5f1f6a0309a\nbf389910-bed3-4f72-a565-41fb7d05b63e\n1ab5715d-f72b-4660-90ef-6b9f89fd1fde\n121b71d1-adf8-42e6-a999-f6635772be78\n7226f8a6-3066-4fa1-8ea7-9244a96d5c52\n898af535-8690-48f9-885b-e2695df4d867\nd08e2b2d-ccd6-498f-b58f-d891581557a3\n2f25c1b0-b8e8-4a8f-abb4-d173147fa264\n57425f0b-cf8b-409b-bd6d-f601d8184652\n547d6249-9867-42a1-890e-2947ede09828\n7c71bbdc-ca2c-46b2-8dfd-7684c313321a\neb548929-d14c-46b0-9112-cc047d0ee8e7\n2accdc69-ecb9-48ac-b48c-012de954a2ab\n43887fae-48ad-4f94-be65-749b8274837e\n96c1b47b-d3c0-4575-9b04-3bc9ea928617\n9381813c-9a0c-4e36-8c00-b848134795ec\n62427b03-f1e0-48b1-b538-d969dc85edc9\nc0b42ea0-f31b-47b1-a737-4ab0fba6dc07\n94b34d12-6039-4332-aed2-4d823b4078c0\n7793b4da-a6dd-4464-82f8-a423959860a6\n5090893d-62d9-4e1d-8948-3e6c4f6fb088\nc4307371-3c3d-4371-8c3a-0c2514df8794\n71842ed3-687e-4ccd-aeba-366cb8d6b242\ne7686e7c-7d15-4801-ab5a-27c3493bf2ab\n2b9c849f-57c1-409e-b935-44d58452bf42\nc4738f35-4682-4ed0-a6ca-3a9e621462c7\n89865f87-014a-4764-b5e6-5766fddf0f6b\na0f17ce9-cac3-4bc8-a66a-ba551d42ba74\n1746fe9f-8616-4779-a530-7d20a3b7959e\naf9eb693-a5e9-4962-9a23-7d04005913ce\n2352a35e-f62d-4734-8e30-d4a6ef229e41\ne97febf9-af70-4158-a804-c446776a01a8\n5dec696f-325f-49eb-ba99-47f17184f470\n873200de-d240-43ce-9b07-8b058ffccace\nc52a3ecb-907a-4c78-8919-8fa54222e660\n7eeee44e-ac23-4bc1-9f22-80ce9c21df53\n46cad835-2b82-4de7-8fa5-949fc977b855\n9b00c066-c1e4-43cf-b8ff-bf60a380a68c\n727e29a8-12bd-4785-b533-6ac1198558a7\n49e245a2-3cf1-4f30-afbb-2ea39303ab91\n55cfbeab-6f6d-42c8-b83f-aea87d0a1637\n952888dc-fff3-48f9-85ff-335ea68910b2\n92b6f842-4444-45a0-97c2-445f00679093\n240a8b4e-c974-4908-a57c-da48529edd59\n2a1288fb-69fd-4b05-a949-d80a9320aae6\n20f243ec-f310-4cc0-a437-86f3a5f1dd74\n2e661261-c1ff-4b91-bd1e-2516e80449a0\nacd98b46-8b52-4baa-9c52-d043aab7502f\n07b7bbd9-a404-4503-89ab-18ae888c62db\nb6f6edbd-a5e4-48a8-b338-38ff265de2d3\nbee7593d-81f0-4a2f-bde8-9f2d1aa7eb64\nd5dcd0a9-1f73-45cb-8eeb-d3637e98b7bc\ne1460afc-e486-4e79-876a-53f063772fc5\nb27531de-d15e-41b4-86c7-6a731b2238ea\ne688d735-de26-45d4-82a2-af35fd9b4c1a\nd9973dcc-7d09-4a79-a801-058c250ee1d3\n32355e30-bcfa-4eeb-929c-528f34a3c05c\n9657dbc8-98a5-4156-b00a-cc293b6130e1\n3c4e67d9-7287-4dc4-84b5-99a6d63ff42c\n38f16735-cecc-4bad-8528-e0c1716ca355\nc2912905-f2c6-4d3b-92ee-9dfaa2d5170b\nbc3f9a43-cba3-47fa-8cbb-e50aaadcd0de\nc6443c34-b511-4526-8955-1ddc0f5c320c\n1cafd63b-9930-4305-8824-f4fc12268370\nfc20b8d2-93ac-4557-b96e-a6f2da34c5a0\n6f2dee51-f275-494a-aa5e-dd4e9fc0df9b\n2445fb5f-d54a-4f94-a816-04b03a73190c\n59465a44-df9f-44f0-8065-472bfdb4d9a3\ne070cad9-bf74-43e0-b929-31b17459b9c8\n64ccf911-809c-4506-bf8b-7596d3270d1b\n512e7e94-226a-49dd-8b7d-804faacd4fbe\n2ae2d467-1528-4b15-a660-de650c8ad2ad\n8af9897b-a1fc-4a18-98f2-ad0be6104feb\n2f2ec610-1b6c-4691-8fd3-09425f2d6db4\n117a43f0-0ce4-44c8-9c61-5d3add0a0a32\nd38b6576-8b23-4e63-882d-f5de5322625c\n34b23120-633e-434c-8b5a-d8f471176cee\n825e0398-71b1-4f46-bda2-da4ddbe01a41\nf79f15b9-fe5c-4648-9c07-8c268b293ed6\n11025cb7-2533-4a64-b292-9d30b7de67b9\n419233cd-aec4-49fa-a459-31f263509c11\n3eea34ee-c77b-4ae1-99e2-0e136ff8ce46\nffb96902-6366-492a-950d-8202629adb01\n3dc28d8f-60cf-4ba4-8de5-26121149cf79\n4c7e349a-6016-4e41-a230-8c82a9e82320\n84bca5ed-578d-4ffd-9074-1d472426993a\nf3c82af5-060f-4ea8-abb0-5413eeaca5ec\nb2cf5f81-e80b-4c8a-b9ad-d82183cfdf14\nce48a7d6-41aa-459b-8ce9-47d8f3bdf36c\na730a678-a65e-4ab1-8ea8-0f6e586aa9c1\n9c680f5c-b46e-4720-bb92-14b4f62dd450\n798be48b-a6cd-4c3c-999c-8387337d2edf\n350d2d11-8ee8-4bc3-aef2-79f07f0f33fe\nc02b3fc4-679c-4a72-929c-ca07e1597543\n39d2fd9a-cf96-4a17-882c-b41abb1e4bd4\n1f421e0b-fb38-4e02-99ba-cd2fb9f8e54b\na9ce28e9-b5e8-46ae-acc9-c263dc3f1f15\ne2c372a0-32d6-4950-ba11-890b59fe6e9d\n4e7bcec2-d219-4468-bd7b-fdd5d5f2c648\n78d0f902-27b9-4853-a25b-f579e85ddab3\n33017ca4-b33d-4021-afab-684586bbb441\n11da2b5b-b429-48b1-a57e-9edac67554de\n9d6f90ce-608c-4e4b-8147-a39d113f9d45\n09c3c74a-70ce-431e-a92d-ae0d8b878c3a\ne9a6e136-53a3-4151-bc1b-533eda6e07a8\n5361a2ec-8760-4753-887e-454365e0df0b\nd3cc5de7-187c-4d02-8be7-48cac52cc991\n85817054-d2df-4480-8a0f-fe68863d7da4\n04a35ad8-e5e5-412a-9ec5-b44b7faae99e\n1827ccc6-9dd6-46ec-8f92-366494b0f694\n4cf3a573-624a-4151-a1a2-abccb2b9832f\nbfe00c1f-0a30-4105-85b9-957ad8d8bce8\n2223f528-6a81-4cba-848c-f921a696455f\n1dc777e0-6879-453d-9739-df6cfe4c4470\nbea2d430-dd67-4201-afa1-652484b6ca7f\n2351aa42-b7ab-4c1c-9724-eb1b3b4d32a2\n857737a6-332f-41d7-be08-958a70e6a893\n3bdc0c68-b38b-49d1-8587-f2bbcacb7e6c\nc1325009-c14b-453a-8d60-fa43d6bdc67b\n5f797133-4db1-4da3-8eb4-cf7837806b55\n3a06e8ef-0bbd-4ac3-a5e0-07709832af94\n6d9aff16-4f30-40c0-9c88-6a0cf217d556\nc64dba89-1b42-4e4b-9164-4b6b7872681e\na5a7692a-733a-4b77-9d57-d8248846ab68\n3406b3a3-3de4-4556-a6df-c8710bbbc4bc\nb07e0d0a-a52c-4852-a149-d5f7053ede0d\nde4053fc-dc93-4e57-a403-70a668c6e8b5\n3fa3c7b1-2b9c-40c9-86ee-1e657959857f\ncddca91b-19d0-45a0-835e-4587370187ac\n1c281fd5-cee3-4b13-a0c3-0a6708795bb9\nc7d7e0aa-b91a-4224-bba4-c20790f9bb94\n0a838421-ea0f-4494-82ab-e8ac7cb690ac\nc7e49923-c18b-496f-b93a-de1d0d6e1347\n36b70455-bb78-4f5b-a09b-dd6e4ee6b46a\n44e87df3-8ff2-430f-b415-9787ab7ac12c\n3a98055e-469d-416a-9950-c4229268c663\nf6474ab8-aa41-4d08-a8aa-91616e3e57c3\n9739516b-2d91-48f9-bd38-303a50bbe2d0\n2dd9dfbb-478a-4b64-a30a-9f8ec4d536c6\nc917bdf1-9261-467f-89b3-0c779a466db1\n876f2ee0-9b18-44a5-9ccf-d0212ca5d540\nf1c45875-1369-47d3-91a8-a312ec2ee426\ncca076c4-0a76-43b7-8954-c30954fb943f\n7a4c099e-da6b-4df9-a76b-b43745a09b07\n2745a04b-bfe0-40ae-930d-a79b61622520\na20acdfe-53e7-4334-889a-3f3f090a220b\n8af03c0a-9438-4a8f-b588-cbb704defbd6\n87abdc5d-f686-4cb9-bbea-20863fdbfc54\n158081f6-a562-4f16-87c5-deb83c757e72\n79e891c6-d799-4d39-b817-5252cbe63c0b\n0fe5a957-6519-40e7-b8f3-94c90b6c76d0\n4ca3ccec-acd3-43dd-912b-c0c9e4510d71\ne23f3b41-d4fd-433b-a5c3-8a6dc00593c4\n567d55a7-038e-427d-96c4-1b383e3796c4\nba203fca-96d8-4e63-a157-c818987a9de4\n41805aee-f11d-410a-a9d1-348610ce73e9\n9829ae01-efb1-4e52-a80d-26fde6ba86b5\n5d1ab81b-2337-41e0-bfa0-779720503ee5\n46bb1943-d067-42c3-a987-9a1ad27fb4ba\n1c51cde3-bb56-49de-a065-c9bc1417deb0\ndf8f81a1-fbf9-4b40-a1db-5a34a45a94c9\n2690e914-4bfe-4477-8992-c109992a75ff\n06b9e2ad-8e17-45a0-aff2-b2f580a6484e\n1d211817-27de-4cef-a25d-14a7c7923d4b\n753bf699-2b52-483e-989f-fe2949bbfbd1\n5931c8ce-994d-483d-bf6c-7c78031a1a8c\n0cf30632-f7f5-4b86-825c-63b8fbff985e\n9a6fb452-b898-420a-968a-f4a65c1b9034\n0d5c528b-b47f-48fa-a29a-bab815e45b45\nf199fdbb-5647-4f6b-809f-4a83fc27f6bb\ne0df3c6c-ab07-4fc4-af77-0a3558d26aaa\nb7b0a145-8790-4457-8631-ce7e5b05a070\n29444269-d3b8-4edb-85b3-a3da58ae0d5c\nb672097c-d063-41c1-b706-8e78fcb7d78c\n9fc76df7-f7e2-4d57-8f71-a9c6afc8bc62\n99ab50dd-1158-4581-aa0b-a30871965eed\n4e54e216-e8cb-42d7-8f89-11996bb80b93\nabf3e52b-0ac9-4a0a-935c-7f43b42f00b0\nb58810ec-17e7-45e4-9c5e-7ec5f7afb690\n4afc7595-7255-41c4-9362-dbd9a88d008d\n07c5152e-5b3a-4fd7-87f0-92039bb7b520\n6f60604f-5418-4274-bd50-454fb3a96805\n4fe682ea-69b2-4ac4-9092-cf73e44ea09e\n4a89e4c3-1555-4cdb-b3da-c29433022598\nb71a270a-67f0-4ded-ad76-da4df81c6b25\n850e589a-84c8-4394-91bc-44a4f70eb379\n35c1e721-e20e-40f6-9ad2-d3c1f96a2cef\nae3480fe-d5ac-4474-a5f5-56fc62c5eaf0\ne32744d1-ad5b-4c68-a03c-272431e5ac54\n2950ba90-a684-429d-9ded-d84ffc318b0d\n27a535a0-3039-4ca1-884a-0c15bf81dc97\nc53a3a2a-55cd-48c6-8721-c6be3aef1152\ne93486a5-b9be-42f2-a9d2-88c4b8c2dfae\n6ae63936-37c0-4321-bcd9-836b7999921e\n24f593ff-88bc-4af7-b0b9-f850aaa479a5\nc6c5907f-284f-4c47-807b-00326d3a8b14\ne1f4227b-c91b-4823-9c7a-9df6560464dc\n266125c6-9c70-4b80-9327-4752ec581cc3\n6f37b4a2-fb06-480d-94ad-e659738ffbdb\ne58dae3e-d4dc-41ba-970c-53ae265817fa\n83383ca9-8d27-4d5a-a14b-576133592879\n79fd852d-a3f4-4105-a06c-5708851eb6a4\n760bfadd-026d-43fb-81cb-1b6a2064529e\n7ba1f5a3-f29b-47a3-a35c-bbd885684b97\nd0aaf4a2-581b-49ec-a2b7-fdb853eba43b\nbc60641e-4508-4737-b2f1-154fa70bff41\n559a91e8-f5c2-45e1-bbf2-6fd235c8b2c2\nefae4471-da4e-4159-8d99-29946c4ec44e\nd73213a0-5487-4317-8b12-186c2e22da0c\nca61f294-d7e8-48f7-bf42-671c3ebdf2bb\n27ab5891-fc13-4241-823d-6c1724e84d4e\nc843ecfc-a44a-441d-958b-0a4666aae0d9\nf5ac7421-227d-4372-9d20-c4193d9b96b7\nab122443-7299-408e-9dc9-cf86a1119782\n347d20de-ab79-4315-a317-05e95c600055\nd5285764-4b32-43ee-9315-c27213c920ce\n5332118d-75db-4254-b948-c9e3b264d36e\n71b02ec1-ec60-4627-839c-c66435d48dd9\nf25c7cf4-be01-4d9c-8214-d8eb3badd185\n3671dc40-2812-4499-b222-db673e8a3e18\n188e23c8-4622-464f-8794-4f0bf1dc569f\n50277c7e-2801-4c3d-a81e-09524fddd95a\n7ee7b405-9841-45a6-97af-3f76962122fb\n5bc5370c-0746-43f4-80d5-580eeb61a33f\n6856373c-9edd-424a-960c-21ab36729c2b\n3bf6d48f-adf1-4eb1-82be-6c93a4ca2601\na8a72a09-9f1f-4188-bc62-1881dc71f4e7\n10b4535b-cd16-4d0c-9cc5-78cfc7d482dd\n2167c455-6b1f-4332-aae0-cbddb871b625\ncb789885-1088-4301-a680-2e0248079e33\nbe48e67f-f3dc-40b3-aa9d-404ec0d55e01\nf528ea63-4fa6-4ffe-ba57-fa270dfb2530\n7f8a97fc-6b9c-4e8f-8579-ba1289369554\n58dbeb5e-6e14-4566-b3c5-bb8a7e8a9f4b\nbbb50f6c-b7f7-459d-9dcc-e1437103a135\n3b13edc4-5955-4037-937b-cfd51af68087\nfa8ff847-c3f0-4a91-a1eb-be4b868029ed\n5a86b5f6-4616-41fd-aad3-18884edd05de\n03277172-b14d-4592-9547-1949127e9962\nf0bdd5e8-501b-4e2a-8cd8-2d5b703efa06\na081e708-fc42-412e-854d-935418d9666b\nc8fafb7a-900c-4f71-a04d-5d4c5fc72e7e\n612e7b4a-74f2-4e8e-a4a1-a3e35cf7bf6c\nb0b90c44-c02f-4557-8083-a596a0432997\n737dbe66-5cd6-4244-8126-53ba9e40b760\n5d568966-b086-4727-a07c-9ddaeda70f34\n5d2d16e4-5b5c-4da6-ab65-e27144abc46a\nea882cd6-364c-4966-b193-05116bc2d41b\n35de9804-420c-4b94-8f2b-51e776599b63\ncdc0e72a-5b03-4c7d-a366-8182152ce458\na73a7e67-b092-445e-bbe1-e169b1e308a5\n640f5004-deaa-4667-8d6b-d195dfae74f0\nf752c332-9bb3-409e-90fd-f7b6e66f77be\ndeee55ee-308f-42db-bffa-7c0d0299d60b\n9cc9e18b-0d46-4443-b8a3-fc2a1239af8e\n4587b2b2-f262-4dbd-b6b5-8727b5dde5d6\neef2873b-78ec-4eec-8ee2-2a77fb804b85\n0339143e-f2a8-435c-b719-bba249076cc4\n2df92704-5486-4d78-b83e-d6af4ccc26ee\nc9103fd9-182a-4219-a1db-84ea8a096095\n932548b3-3a0f-4e4d-87c8-aed2ea9a1d21\n21c63e7d-7010-4a7c-aa69-96e09e4222c9\n788462df-31be-4a67-ae04-d4444cdb0368\n01058e6f-1c83-4474-a983-61289d181adc\n9e8c31e2-5f6b-499a-9647-9efebd234d14\nf6894453-95dc-4ad1-b600-63d5cbfff350\ne9a6859f-8e22-4ede-86b8-4508388777c1\na2659780-a1e7-43a6-bbbf-37ec2819621f\n67d97850-0e4e-4ae1-beb8-91007cc1c178\neecca3f2-54d8-4abd-9da5-cd912ebaac18\n8a2f6822-13c5-4888-ae46-5e88fecf81ca\n439041c8-fecc-441c-9b80-6aeabbd88994\n2100aaba-c8ed-4098-bb79-0712c045d941\ncb7ced1b-6a04-4df9-905a-8396a5cec2bc\nc677d231-2143-4176-81ee-b168df5a389c\n1c200727-2430-4e63-9869-9c1c80950889\n6fd8c0b3-c6ae-44f5-977b-6a331cf700fe\n6c198f57-c911-4f70-83a0-333ceaf9ab9e\n5a75f924-77db-4eed-a4f6-74be2f2d36d6\nf47d0998-e6d6-41a4-a726-51cbf8722961\n2bf10b50-bc43-456c-9bae-43a98d9a3c1e\n7cf00243-9e19-45dc-a884-1ca52bddad33\n5114b724-1ba4-428b-a9e1-8819dafd9ed4\n1c1ec1ae-e389-4abc-aa3a-7cff54045361\ndbfa5f12-7cc0-4751-baa5-983842478004\n162f5d04-5f1a-4635-9784-218da06db344\nfd47f349-dff8-4fe5-a297-024bb8b95b81\nebb6f39c-ee5c-4d81-a10a-19f0a55fde4c\n89fa269d-2b7a-4206-9713-1b3f4b956b03\n0f91ed8a-31eb-4db0-947e-d07a1a6945a6\na9dfa632-e927-4bcd-8185-0f16d670f2d2\n3c61867a-8383-460b-bbbf-cd5b1c78f9cd\nf9e69153-75da-4094-88d2-e6c1d0a8bbf8\n9f31744e-a9da-4f41-840b-e1850adde921\nd8009cb4-a4f3-4f37-8e16-484f0541fd67\nf4e2ab7f-3979-459d-87ba-44dba9e0b3fe\n91876838-2977-447a-b513-8901a3b86890\nbcfc0942-2b6e-4ba4-890e-7aec3864bbe6\n05cfd71d-5906-4abe-b054-923bdac909fc\n523e6805-4799-4496-b3d1-2fedb088a18d\n52777cfc-6b7c-460f-8267-93989a96486f\n622f5e83-05c4-4e64-93cb-b55a24f775bf\n22d48207-2a9f-4f9a-a794-da9741432cb5\nde5f98a5-2a8b-45ef-921c-b6a22fdd2752\nbf05cc93-fee5-455f-bbb3-120c8c289eb9\n87056411-cd38-46ef-947a-75bf14db399f\nd05010ed-6d81-4905-a969-633340006aed\n8f67ee88-4ff5-4d4a-95b1-b7e1def40d2f\n5e2fc4f2-7a6e-4b8f-9f8c-d8c1f34ab704\nd276669a-89bf-4e60-b9ae-3355f0537bb4\n686ea09b-a7fd-4630-bedf-29c506f19205\n2576e55e-22a1-40f2-88dd-f526f732ae3d\ne486555c-0dee-4247-b2e1-e019c294f4bb\n330a5f78-ee33-4905-b8b3-50b60add5a24\ne3fe8e17-0392-445f-a3b8-518e90f0b226\n529878db-38a6-48f3-870f-c0f44cdd2eba\n73c32c38-164e-49bb-82c1-0c562a8ba1f3\n320b5b6a-7901-4030-97d0-efc6f26be5ed\nc1ca67da-4339-4fcd-8e45-d2d9dff623ba\n9eaeba12-83f5-4b80-a5de-e62cc82a3bec\ne430046f-0ecb-4fb2-ae93-c9adb33afbb9\n0e896634-07fd-458a-882c-f59afcffd66a\ndc75c603-75a0-4bf7-bff1-0236896ca997\n114b2213-7b48-47cd-9d8a-767d0bd72b63\nb1596986-8b7d-48ce-9d09-4a9e98d6e586\nd75a5ef7-5a5b-4c4b-9f28-300dac8c3b38\n7e1ccc10-a61e-45eb-8ed8-b0be2ad663a7\n7fb82573-5f6d-48ab-8990-aa31d8133751\nca9eec5f-f257-4085-88dc-02343995bfde\ne7b75874-bc75-4628-a98f-970d6ab04b66\n346b08b3-9196-45c7-a7fb-d7be29c858dc\n3f76cdd2-4dcf-4075-8789-e0e3b3f76245\ne3ffdbcf-d956-4d81-9849-0c72cffec4e0\ndb74629b-445c-4f0f-9dc7-f34703ff7d8b\nb440650e-71d6-4def-be73-2055db9f2ea8\n478fc3c0-9a15-4c7f-8529-bc3888647b80\n8603feb2-d842-4445-9e95-4886fd312f33\ne8a530ee-41b6-45d5-beb6-d629833fa310\n1c269108-1647-4b30-b633-d5f9f05f471a\n7f3f8b67-993d-4abb-bff8-a74ad7a1a858\n89936f89-adeb-4ff5-813d-abc46ecc0ef6\nb7d465eb-31fe-4486-8619-2b439cea8be3\n42a75b9c-b843-4bed-8840-5b20a1c484e0\n766a163c-dde4-4eb4-843c-16513522decf\n9c429444-0db4-47ff-b689-3df726429cd3\n0e4a868f-fbf2-45c7-a0bb-5b01ca143882\n9559e9ae-0130-4e82-b43d-a7d732aa8559\n982a9f28-cee0-452b-ae9e-63ec82d706d6\nd3c85463-652a-488a-8349-46773accf393\n09520997-052d-4d89-a13c-0ab5ad62bf7e\n82591618-611e-4683-ac76-85fcfa78a6de\nce43b394-f432-4f29-a49a-b98a246c49d2\n40500ec6-7207-476c-ab0e-663a5be72da2\na31de61f-6740-4e3b-abe5-02b145b7150f\n39d1630c-149c-4434-a6b3-ec1a8f85c03d\n8215e34b-65b1-4275-82f9-9e5e3888b95d\n16491896-4771-42fb-8ba4-9c64491a70e9\n43c078f1-e1e4-4401-95a6-1d120028b9d6\nfa5f2c78-2ab4-4632-81fc-0766e98fa78d\nc673513f-372a-4a4d-bb15-bb99f4bb48eb\n4ed793a8-ddb6-46ec-9219-efd91133a1a2\n420b79f2-4c9d-42f7-896e-94f1037f13a2\n4df2325b-1375-4e59-8c63-5be2b43974ba\n01457840-ba39-4c95-9e0b-4fb7f906b128\nc0a90f17-3afd-4117-8284-9367be270fa3\n820df462-eaa3-4490-9d34-1a09376f7caf\nc4e26d96-780b-4fdb-a5f4-60a16ad6c812\nc4c21672-2ab8-4958-8608-aad71fff1d7b\n7c2d0957-b8df-47e0-a955-dfffa35485c9\nfb9945cc-1329-409b-8ec0-85755b91a4a0\n217c27c1-61de-47b8-9834-96cea19de17a\n97051542-61b4-420b-af75-d91787c43577\n62c5a399-cbff-4e26-b0fc-72474b16b92c\n774922b6-c3cb-4214-b148-4703043f2dcc\n1d719ea0-12b4-4af0-98b8-572320f82e02\n4748b9db-330d-4f23-8c75-4d23bf784274\ndd8f15ef-d04a-4ac5-b8e8-5a6fad85b06d\n05d65c42-b37b-44d0-8672-7bc690551108\nfe9e9170-834b-4685-9c88-7afe6d237d11\ne7b867cf-1b2d-46c2-9416-8b04fbff29ea\nf10e0d52-d652-49e3-8e39-3f7330c6c265\n193cde01-4497-4d11-86ce-25f0e1ad2892\nc9ff7d6f-0ae5-46d1-9234-2552c070082b\n43d1b2ab-5f0b-4638-8229-bbcc5a23f9b4\nb93e1663-e8c5-4808-961e-54d752ce4a61\n14119bc8-06e3-4f41-8e96-69b912981c1b\n536a97ac-4f41-40c7-b6e3-558f67eeb073\n88315548-7ff2-4d22-ae50-fd62afeeaa58\n2c05adda-9cbe-440f-a879-2f6bd6c4c818\n3c4135fb-08e6-43cf-a612-9fa8fb4d5192\n4eb6567b-3e11-4495-8ac3-98df12b0220c\nc9a2f6b3-e937-407d-b102-f6d208fd301b\n08a85ead-0e58-40ff-9520-7e601f730545\n4a5a89a7-6152-460d-9478-500aaafce916\nd5f4be7b-96ce-40c9-a5ea-5c275c7ef606\nae4af6ea-98ac-4606-9d3d-69d9e3efe7f2\nab1f3c7e-22fd-42fc-bebc-e6bf213e45ea\nb3ea7001-34d6-44c5-9f6b-02be0e2dc5ac\n367454ba-a6e2-4ec1-a8c3-a527879df052\n1ab6ab74-821f-4572-b1d6-f60eac0a1ee2\nc5224c19-44ae-413b-b54c-a7dfb3e9dd0a\ndec4f628-8e7b-4799-99e4-e089b12e0866\n43c2e1ce-749d-4a3f-af39-95b5a76edc9c\nf678fe3d-349b-46d6-8e4e-424f5de0562e\n69abd2a6-04d9-4d5e-bccf-47df85a65223\ne6d9a438-6781-403c-90ab-a30283c9aaaa\n82841289-af83-4841-8032-62f8be827cf2\nf40b004e-b632-4e39-ada4-4c31d7ab6a86\n121dd7f8-0106-4716-adec-941571cee70c\n14bf32d2-9436-41e7-9df3-a42aac28a366\necd51eda-cb49-43cd-95fc-ca875969e801\n359b9ea2-ee2a-484d-a5a5-695432b50888\nffa4b840-0e7f-4f92-8016-d7879abe773f\n27f25df5-da1e-4160-bbe7-dbc01a329bbd\n629818d4-c930-44ee-a43f-b8b3eaf961e7\n3d0a7c52-4abd-4142-950d-914c7f60e582\n7716a3b6-9f70-483d-a6b8-cc4200976010\nfac4d5d1-f16e-4dea-9979-ef3bfb07dd3f\n6c24bc08-9dae-4ad7-8c4b-07102f04f909\nf31e5c2f-bcac-4755-86b9-8fb37e29442e\n2bc6c3b6-06b3-4cff-bf25-34bbe96fe6b5\n1aaf81a9-6f1a-41a3-a111-ad2e08ae00c5\n8d18295e-a6ff-44ba-9670-6b45a95a2e16\n0377ed72-f504-4291-adcd-1044d6696873\n97d4743c-4a70-4651-b1a8-9079aacb247f\n9852d47b-0d2f-4905-a160-6c7553649809\nbc1be856-a00c-4c99-84de-a5991266925c\n8cf10a4d-dc7d-4ee1-8359-ccc265f8b643\nc3d75cd6-fc38-4d9a-b158-560ed4d6c558\nd56188c2-6335-4780-8e0d-84110bf69de7\nc0467850-165c-4e8f-b743-6579a570cfd1\n9df235e9-e9c0-400a-81e1-0798162f5fac\n9fb222f9-ca6c-4d45-8c02-eb278567348e\n6704d48c-4d36-4c7b-bf90-8e4a804cdef6\n64249487-ba39-4d57-ac48-d01df93fe30e\n447d719a-a4d0-4e53-8fce-bc2aebc20262\n6fd7befe-96fe-4db2-ad17-b6a6e073044d\nf0e08e93-6910-49d8-87e3-3e6e7814b39e\nfff26647-0159-4173-864c-5fe91894326c\n0e6217ab-c555-4630-b6c9-15ca40d58259\n38d689b9-908e-4e5b-b673-24efc0ba3e1e\n616bf220-71a2-48fb-931b-5870d8068af6\nd3bb8d44-ef9c-41a8-8758-50bf0d8c9207\nb7a5d6d2-81be-4d2d-a614-fb736a0df851\na14b07a6-b3eb-42b6-8061-468336370dcb\n82f78f1c-646c-43e6-bbed-99722eb00472\n4521b813-7cf1-499b-9430-7d3141450065\n50b69b03-3450-4e14-bdff-4dc6f65a3f63\n8255a03c-1e7a-4a9b-86ec-26bdf82c081f\nf03d16e3-c2f2-4626-b8eb-a672fb81c1d2\nf82995b2-5408-40c0-abb7-5193cef09a24\nd5dc17a6-fe34-450e-9ce3-ea7b41fa1392\nfd401da8-26c5-4013-85bf-ebd439239966\n01e55d81-cc47-4935-b743-20eab7ee8392\n4f7c59a2-bc5f-49e5-a39d-7296cadd9e87\nb23c7d21-4978-457c-a74b-9beddcf077bb\n5f04a6f9-822f-4fe8-89bb-d24fa32b7274\n497b7b64-63c0-4594-89f1-cf9974f01cd4\ndb8cd597-51a2-47c6-9f98-bbf2bd6c823d\n63b24aaf-a3e7-4ab4-8ee9-7d6769eebdab\n9838d2f7-d619-4482-b3e8-5538a6a4cdf1\n602b5191-7878-43e6-ab48-1c02816b0c51\n73746bcf-e771-4d5b-bfac-6a391a4ef2ef\nf7a14941-3b9a-4293-8c9b-65c02b9a3a2d\ne20ed8f0-e895-4b40-887b-31eca1ca534b\n08a47632-c0cc-45d4-901a-e7114581d984\n707696a7-561e-48eb-ae26-faf4a1049686\n26fe18cf-aa97-456d-acaf-ef2548542e91\n584c2645-a7b2-4341-9255-770a94bbb732\ncb039d3b-665e-4635-b8e2-e12be9bb3bb7\n0cf80564-3a0b-40be-8978-05ed2f3b5d82\ne80dadd7-6635-4d22-95f9-51fdb62ccbcb\n9bf32d89-d03c-42ab-9d81-fe100bc0887b\n3adf29ad-2c9d-4c88-bd23-254d5caf8c7e\n0eae7e1b-4d2d-4cae-9c38-3760bade0fbd\n62c5f733-d770-4fa0-9e32-3b952da88f5a\n230c5f47-cbc6-4b22-90fb-c6fdcdb784cb\n057fb62b-9a0f-4c20-9412-4fa6e064c76b\n4fa3dbe8-2fb4-48de-96a8-5f2d597800c8\n034362de-2df5-4d7c-b75a-8859ec62f955\nc74b62cd-544f-4a1a-8f24-8e136d19bab2\nd48f03c1-660a-4eb9-a15d-a02fd753b80b\n93290c2d-c2ee-4d76-8751-9529f97f91e7\n86629659-ac29-4b93-b576-83523d4a5816\n433aaf5c-f821-4dc2-b4f4-847fadcdcf4f\ndf3af233-4428-4eeb-828a-cb8732c8c8f4\n17384914-b77c-459e-8d17-073f53a48801\n6fec6650-155a-450c-9295-1f9f66a98925\nea9484b9-3b75-4873-a510-f58fd133246e\n09f52c59-1bf8-44a9-b41d-b2893bffc8e6\nf7cb1ab8-dc1d-4723-940d-71a80f26ed72\nbe2b48f8-0ce0-4050-a4b0-40b67a89753f\n24ad130e-6fdf-47b4-b285-2467f61ed8a2\n26a7f47d-eac8-452f-9e86-dbe6e7d32400\n75227301-09c2-48ef-98df-a6f3481aa4d1\n526aa2e5-c6bf-4e54-bf74-325343994a81\n4b232eb6-a3d0-42d6-be72-50346fa53e0b\nf79ea902-3a35-47e5-a557-2ca95a8f128b\nbb91c51c-4e91-48f7-b6d8-3f077d79ac72\n9bc84070-a13b-4a88-8cdd-62badb34a5e0\n7d36cbd1-7110-4091-81fc-d442a6edc70e\n4d384daa-e181-4731-93c1-a65e637a6ee7\ne2ef62f9-4d89-4734-b904-d7359991f351\nd3e8eeb6-db56-4e1d-b323-457a50273c03\nfca9f813-0d89-43ea-b5f6-01267fd7f2f2\n0a9a6ca8-54dc-476d-8293-ed7774500416\nbc4c970e-9b28-4f44-8ca6-42d6cc212ece\nb12de261-1067-47d8-9167-77599edc55d0\nc7e3df21-1335-4f2d-93cd-4b71b09eb0e6\n32bc0689-8a0a-4a1f-a0a7-7bda3b40e652\nca4c2309-b891-4b72-a468-daee8002b227\n59f0ede7-0484-41fc-90eb-d86d4c268bf9\n2e3e1505-5bdf-4bf4-8d6e-825135ddb294\nd404eee2-2c56-4eeb-8c91-babb52539778\nfb03bda4-14b7-4406-8f26-fc787d7fe817\neaa03847-8ccd-44c4-bcf8-c8e12ce25766\ne136b3dc-b4b1-4017-a177-b4867bd593aa\nc0d16664-683a-4615-bc4b-85eb9f58fdb2\n05feeac2-a566-4c53-bff7-f82b0d847fab\nc5537c78-ef96-4815-a806-79ee8cd519e0\n5f7021f0-5b4d-4ebf-8863-b5f60633fe97\ndf6fe722-caec-43ed-afbe-68081a72f92f\n5c7fc805-72cf-4ad1-9cd0-3e06d039dcca\n12ba2dcf-dab1-4d49-ad9a-f96a53f18201\n74e8d197-1986-45f6-a4cb-3e77a836eafa\ne426bbeb-fdbd-46ed-8cc7-af6a7b4fd948\nf56d5ec2-5afa-4fd4-bc53-c35145bb9242\n48763d7a-b6de-4735-8739-ad5194a98266\n0a8ff6b8-20c7-4a16-8fd6-04e05775e3c1\n384d292c-456f-4ee9-a826-d4a74b8d0d4a\n0f536278-3030-4119-b299-2c5160c05ea7\n98ae8056-0fa8-4ef1-b69f-eac26e9f6238\n8881be24-a625-4dcc-9981-38e6834780fc\n125bfc28-afce-4674-bb9f-851e6b7d65c8\ndb68c82c-3533-4a43-af7f-71f0d7ad7697\nff105fec-a800-4385-8128-06c92b20c959\nd9bb940d-aac1-441a-a30f-b3eccfdc96fc\na70c511d-ba55-4379-94c9-ecdfd8204ce7\n5a548200-57ae-46c2-8d63-2c7ab0bf4fe4\nb34000e2-be5f-4e9e-932b-498313f029a6\n46cf37aa-4988-49d9-9fd8-d3156b54c2ef\n641aad43-f048-41bb-b897-45eff2ac3990\n01032910-612f-49e9-9928-f0bfe957b53a\n78ee0f0f-f8d5-48b4-a003-5dfa210398c3\n51d5797f-52b8-4828-9447-238cdfc087d6\nef2d7139-b0d9-42ff-b495-f8f0b142506f\n35dc12f8-125b-4302-9103-4a33898da6b2\n8aa98367-9c27-4ddf-94d2-9b1437c14160\n267331a9-35da-4cb4-9a4e-d7bac2619f8a\nec27d72f-4d8e-45c8-9be3-201fb7b423f2\nb4fa323b-0483-482b-9d48-ccff1101ecd7\ncd4d53a5-1f4d-456f-8fff-47b6c35f4ddc\n5508a9ad-0dc8-44b0-94de-fdb69f7d6ccb\n6205c92b-aee1-4363-9496-05c1de24639e\n434767f8-f9b4-4b22-90d6-ee93286876b9\ndd5515e3-1d87-4808-ae87-4f26c8956582\na9fb8efb-f7e3-496e-859d-bf9055ee9967\n39a1dbd2-feb5-4819-a4f3-c48b7ec4bf23\n8c788897-669c-4436-9494-065fee9f5fcc\n0fe4b138-ecd5-43e6-9d4b-9ea34e36badb\n6c38e1db-cd39-41c4-851a-e705961792d5\n9e326cc5-2a20-4a9c-a30f-71f777e17462\n724502fa-bcea-4718-8a1e-27227c2d9838\ne9d38634-5010-4d9a-b8a0-b6f9cfb0e458\nabad317b-e329-4853-846e-be66163c0c0d\n682f6c66-8d07-4e59-9f88-b05767aefc61\nc8370c30-9136-44a4-93db-433130c3ac34\nf7ffc39e-efe8-41bf-8cb7-6c55d04fd57d\n37400012-5c92-4ddf-b45d-a81f6a41b63d\n99d8721a-4ab0-46d2-a05a-1a8cb87178d5\n22554ffe-a0e2-449e-bdd5-28af5c4825a8\nc8e13273-51c5-47a5-9565-0a68946cc9bc\nd7dbd282-68d5-4208-9f52-920c72941e6a\ncbc0b263-0618-42eb-8c7f-c5ac090ee586\n461e405a-e15c-443b-8a96-b47998389153\neaa8d803-1e0c-456f-863f-c00e4fc9e6ea\n29c7b0f4-94e5-455d-9d2c-6757eb656fec\n380fc4ca-f1a2-44bc-8ac0-b4dd3b203d94\nd55181c3-a7e2-4233-8f03-3456635e6ba4\ncc3f789f-b6e6-4262-817d-1cea2428e597\ne54fab4e-a3c5-400c-94f0-8d824ec7d613\n69815f89-556e-45a7-8422-9de678056d17\nebe636ff-e89f-41f1-8558-f9bdd3eac1a8\n650f3b7d-98bf-45c5-9d94-c33899d1b45f\nd08e6edf-c9e9-424d-9376-997d71ad331a\ne8fc3354-c9fa-4c37-91f3-f6074ea129d9\n7913954d-cf4d-41c1-aea1-6c4601915593\ne47d962b-218d-4420-975a-e80578f51d43\n5ff91c26-14d4-4f5e-9a60-56bce69527e4\n812ec24a-fbcb-454d-8f37-a23eefa23d0c\nd426bfb2-0407-48bd-b789-fbc9ef008ced\ncfc53181-20ae-45ae-97d9-d6c14695a46b\n907f7b46-58ce-49f8-a7cd-b30a24f85869\nd199928f-3aed-40fd-89fc-bd296e83ef63\n21903134-204e-4f62-9f9a-e5d7b542a5d3\n0cdefe5b-aaf6-4f28-b843-128a0dac62d5\nd5e20ccc-3dde-4b92-a19b-2163ebebbd21\n61adaa84-1101-4c0f-b0a0-f7f8ae5899de\n9f102606-cf31-4ea6-8347-11a4f5f0ac2f\n4e0e5fa1-3e41-44b7-881b-55c1f0a3f77c\n516eed10-2b55-42ba-b018-c1fff750da75\na6a1603b-fef5-42e1-bc8b-c48465540ca8\n3ff65c8a-91e5-4a1e-90bb-082a6d4591a0\n8cdc6c13-2a92-4bae-9b71-e6613288d2ea\nb5e01e14-8cf5-4958-9cab-1ab8936b83dc\n03dc2560-96a5-4597-8268-0c867300ae3b\n00ae6357-b4b2-40ee-8b3d-5f23b5e07d5d\n493a63cf-aa2f-4a8f-b439-a409d601177d\n382359c4-d8a0-45c3-a34b-fc2c1f73e670\n421e669a-ea1a-4956-91a9-61194fe4dbad\ne75d170c-ecf8-40f0-b453-8c89913e4455\nc91284f6-ab15-42c1-8af6-5aa591a81328\n389c0467-9736-40e8-baf4-c2e71f4a5178\n37dc9021-18e3-4241-8af1-2f9b11752650\n14b1c26a-2007-4569-972b-77dc2e16931f\n2510b790-834d-4ae8-a530-59a2fc4470a6\n94665dbc-78d9-4094-bedf-f2eaa8884f33\n2cf70069-c10c-44bd-b67e-436119c37b2f\n94f2b165-3651-4bd7-839c-1f9cfc5dcb26\n18ef4d06-149b-48dd-9223-a9fbdd1bcd89\n654cf798-7235-45ad-a668-e79bef1b025f\n55c6fabe-d8af-4e2c-bd41-b78c1ffeb011\n4923328a-538d-4b86-bb14-443d41a727c2\ndb7754ed-3cb1-4a09-8e00-64c4406bb437\n807bf0f5-4a12-4ca5-a5a9-2bec80e1c777\ne88aeed5-eb75-427d-97e4-eab35c1e5fc1\n96373515-2107-4857-bb0a-01edfc63ebc2\ne25f9a39-f6c9-4b3b-93b4-87e5d733bf51\n72e98746-9478-4fe9-9837-9c1847e4b0c9\nf3e1a472-d7b5-4065-ba89-99e4b09d2043\nc8657ef7-cb04-43f2-9a33-97a1fa33be22\n6d015c23-10ba-4b36-bea4-89433362b9ea\n202dab61-1df5-4920-94e8-18cedc614b9f\n64593999-be0b-4db1-ade3-a0bcfbfe714d\n10fd206f-bcca-4c96-be6f-cab479fa2981\n860b5ff3-0e8a-4768-8afc-91a88071163c\n6661eced-6388-4ae5-a4a8-c73c8815e7b1\n8a9626ca-a340-4854-a38e-a490c1526b9f\nf284a77d-1a6e-4238-8dee-21af32a2914e\ne5b4f572-0195-42c0-8d1f-ba961a9b72b3\n7fcc44a0-228c-4984-9511-eede66c7e2af\n32419086-54d7-440f-8210-da760b9f5174\ne5e5b16a-3f8e-4d79-8a5c-761bef1856e1\n1ed4c599-ea10-4b25-b41f-1ba95f7a671f\nb1df3456-b13a-4120-91c2-e51dcf71ee85\nb4b41e1e-79eb-423f-929d-f551584d01d8\nf9ec09a1-fb93-4f61-bfa2-7c86532f9066\n2fc2dc7b-b227-4e2d-af0b-654f9ca98513\nc2af9317-096e-469d-8a0c-664f68a4b656\na35af2b6-f6bb-49b4-b6aa-1e6d530f7cbc\nc084c178-4d89-434d-9269-3414ecdfc3dd\nff759a2a-2d0b-4f2b-832a-2bdeb7c38cdd\nb86e7fad-6955-4891-a486-03860ec16199\n4dd38796-3647-4407-8741-52c0c26b518f\nf2df6af7-d1b5-48e9-b397-ec260df4f05d\n304af0ac-c018-4fc8-805f-53c056ab922b\na8f3192f-03a4-4f5e-9ab7-523778c52060\n16bff9d3-757c-43d9-bc0d-bbdd50b4263e\nd730a084-5e86-4ae7-9b78-575cad0529fd\nf4418e01-7849-4d53-b978-1681a0d5c781\n24b464fd-a930-4afa-a1e4-f17772ba0f38\nc731c619-8aa1-4b80-833d-56deafb03c55\n136ab5c2-5783-478d-bbbb-9d40b1749fd8\ned23eff0-5f2b-4337-a2fa-06248e266f7d\na9d3b4a9-013b-4fb0-ae1b-d1c625398870\nf57fd8a9-b04e-4001-a003-409f7d11bb4c\n4949b5f0-c7d7-4e93-8bd1-d8fc770e2127\n32d3407d-4f37-4e37-9d38-3cae60250550\n54754a6a-d87b-4d19-a108-753164e74479\n30dce6e7-ceae-4ba8-9dd9-24e4550e53b0\nc909cfc0-b78e-4071-8bde-0f8868356f8d\n0d69a02a-4a19-4a4d-a8a6-255854898c10\n9ac9d733-4e5e-4a61-84ec-16c3b1b13ec6\n02fe612a-1f76-4f22-a3cd-3157cf775d22\na15cd91a-d228-4dc3-bb05-447850ad1426\n741c1720-aeeb-4238-805d-d1da4964c38d\n6c1fbd07-cfdd-4376-a4eb-3bd461ba9fe3\nd97d6eda-754d-4fd1-b5da-8977cdde53dc\na4804149-2f32-48a2-9327-a59e904cd962\n687f26c5-6682-4ef0-9877-04b1fd8a7e7c\n3eab6e67-2fda-47a9-8754-a12dabda1743\ndb216dcf-0063-4562-83c5-5650183b171b\nf822aa3c-83db-4803-828b-2de85b83b327\na59ec3bb-eed8-4c88-8318-5821901853da\nbd6b3ebb-5289-435c-bb31-3f68c10b83d1\n99d505f2-9458-4f4d-9bf0-844a4e73eff6\n6d5ea4f1-4f88-4566-92a2-3ede6190c9de\n4f713d22-96da-4e5f-a2e1-41c6e905e264\n6a7ec6db-a165-45c8-8753-dc2d4fa878c8\n8ba89798-d744-4235-a9b7-86b464cb5959\nb54af3c3-a105-46cd-a757-ecfb00179471\nd4eb111a-cfb4-4a89-9def-47cd55a43f4f\n982f0d85-fcab-406b-a8d0-9c6da955dddc\n43dbb725-405f-4386-b16f-4ab3c4dd0b66\n250936d1-dfb6-4c73-9a1d-2c3eafddc8ff\n6db32ad7-26be-4ebd-9b75-25df09f458df\n38ce556a-a9f8-4fe8-87a1-bf3f3500f5f8\n9733d2ee-02dd-481a-a2c9-f96bfcfaaffb\nf9b184b7-ba14-4aa5-9f33-4bd761da3c7a\n21004aa7-90a8-4404-9b66-096c16711343\n33aa2721-2742-4b20-a054-47cc9ba1b2ab\nc6dc1d17-d79c-4ef9-9305-f1afe2faed05\n7cf6414e-f636-4230-9831-a85421862e88\nea81f543-34e4-4ab9-b825-8d6a1bc50bd6\ndfe9b782-fed1-4fe9-bb51-2b281ab55d3f\n8fe8e1ff-da1b-4d4d-8447-f9ce1ffc630f\nbde5b1c2-1809-4ebc-b6a6-acca9b6e074e\nda47a94b-984d-487f-bb4e-59a59703806e\nd1981a63-b56c-4722-b49b-1dce6ea9c2c0\n713dec46-a272-4b9b-8664-f96fa5a3e933\n714dd040-840a-401a-a8d8-2e5392f8d036\n2778edfc-6b58-4231-b03c-d491b5615d24\ne0177960-6eb1-4310-842c-e6d34413bc4b\nc3f2c151-05ba-4449-bf24-d21bb2e0e306\n6a0f5ae0-d7c0-4c61-b03e-5643d2c190b1\neaae9296-4f4f-4f25-bfca-323c0c9a61d9\n32614750-71df-4af6-8590-034b7dc4d892\nfa0a5a3e-92b5-4c22-8b38-05e7b6ed67b9\n22500262-5c01-4b73-9420-4539e97d62ec\ne7044e51-448b-42ca-8bf6-f2e89a6e4866\n8ae8c655-6007-4c44-82de-5cda7925c967\n9fc661e2-efab-4d2a-95b2-e5208ebed591\nfb48b2a4-4830-4df9-8eaf-791e083df807\n6baf2e17-8cd6-479a-9bf3-3f83fd9a3474\nb82b4134-4ceb-4379-81c5-7c26b9049815\nd8d64ac1-5814-40ca-a3dc-fbceb1aad156\n8981f783-8b09-4114-983b-87e27a4a7a8f\n59e2dd92-110f-4d9b-968b-a010d3253ad2\ne6b8684a-ab22-4d06-84ac-9c57f535777f\n058463f1-85bb-498b-a74d-9623b26e4a38\n5b60122e-8f81-4326-aaae-d24fee39b259\n30ba7873-d0c2-4a6b-9a1c-db0ce126f66d\n82aab256-2134-4b20-96a6-0689731033d4\nc130d9ea-d7eb-4fa5-b9b1-b183b07535a9\nb924d690-84d4-4b42-af03-953e8fa841c9\nec72bd73-7d22-4315-987f-01cc183908f1\nbe891ddd-717b-42cd-82ec-bfd1e3ae63b3\n8b9b46c2-1ab1-4a06-95b4-930a879470a0\n61af0de5-1fb4-4965-bd69-97e9f30bad9a\nc883ef7d-62e7-4cc6-be78-77cfd356f26c\na42c691a-9434-49a9-9414-b1fd95450d88\naaa26af6-6361-4af1-acdb-5bbc0502a903\n0724c6f2-1df5-48ce-a81d-e4a1d6ddaf43\ne7d4ab9a-c746-4b9e-8015-736bc078817f\n66d4fe7b-ec13-4c4f-a58f-c87662e5e139\nf4c4da54-f9a4-4a9d-a512-0dc85f356378\n5cbfcf9a-2215-477f-b959-b739f997180f\n0a430a2b-9eb7-42d8-aa29-9cecadda9b35\n471f1833-b8dc-4efd-bc00-fb009c851f7e\ned4d685d-e10b-4390-9751-68a3865f036f\nb8660ffa-dd8c-4d8a-bca0-8e57cac67240\n0d3f5dd4-9fbd-4a88-a921-6e28833f6708\n24f8cc8b-6607-4eef-88fc-afb046182993\nd39e4baf-b919-4c56-8b00-04f237e6d61e\nb0f1152f-d1ef-4b50-8329-38cfb91f6a21\nccc32227-613c-4d42-81ba-00eecc9aa976\n5f7f32da-e6fb-433a-a810-5f172928dd94\nb13ca104-08f4-4619-b88e-becf65afd05b\n0733d794-0b08-4a86-b13f-4f4bba60602d\n8ff6faf8-893d-4ecf-803c-f32942ee2525\n5d0f87d9-081d-4d3b-a6d3-3509469c0f0f\nb1415aba-8041-479a-bd5b-95b3ea0714b2\n73a53f18-b307-4ec3-800f-7fc14bb06d8a\n6f5f782a-8456-4bc8-9a5a-68f26639aff2\nd5507c8c-6fe5-4971-8133-6d7ab9d59f08\n3fd2755e-78f4-4fcc-9e92-420f54d0ea93\n2cae092a-3d23-40b2-8dc4-e1cff0efe710\na7833a06-4122-4d93-a6cc-1588decb9354\nfd571d87-a8b6-490b-89d5-b4a11c19361f\n65d9c8ac-4a0e-4cd5-8d85-bc2a916c8416\n43455cf8-2e98-4128-9143-1a872170be02\n52db1071-f141-4001-9313-31b550dfce83\nf1bd9a5c-9f7f-46a8-90d1-c7f680cb11d9\nb6e41050-2f62-4f99-b3ff-fbcf080436bf\n0946533a-8c7d-4852-acea-2457b5c56486\nbe969aeb-80a2-4ece-b736-ca5d3ba16b22\n7bfa48a9-2e13-40f5-89ba-991b6d2bb191\nd301faa0-ff4e-445f-b809-21f2d9772dce\nf699dce8-7248-47a2-a615-6907fb718e2f\na7edc5e2-5be3-43a9-8374-b83c0137e0aa\n105bc5ec-84f9-412e-9ce7-a479ac101e41\n2559503b-3e1a-4f02-b059-517b20d89928\nea6f17ca-6b9a-4a14-8bf4-1929c24ca190\neb6b308f-570a-41b7-99fa-36ff279323ca\n6ae3e54a-e0c3-4206-a025-bf666eca855b\n2137a7b5-8526-4631-b056-57208a41a84c\n66b65853-47b3-4c99-b321-e7d9e8dd7186\n25f7e71c-2e88-4ddc-bead-2adac4c1c56d\n2ae87ca1-4727-4f28-a9d5-c4ecb05daa33\nf07b7308-d9ea-4603-8bea-57302a9eeed5\n891cfd22-ed3e-4404-8a25-2f15fca1bf3a\n8aa7bf62-02a3-4488-9f60-20c518d38ea1\n2df2bc89-9a27-4245-9994-6a9d688625d5\n3f2c3bab-d468-4823-9572-810261d5da23\n5d10e4ed-fcff-470a-adca-a45269c1330b\n54f3ebc7-c0e5-46e2-b424-9554df02fac0\n4de8006b-ac75-49f1-9950-2d200ba5ba24\n7d809051-198c-4af3-806f-0b2d9bf6ad66\nfb3ec70a-351b-4137-90fa-9cff37639286\ndc35a25f-05ab-48c0-a5c3-e7379d7f393c\ne21430d3-946a-4fd0-bebb-9d56ff351a50\nb65938d8-1644-4274-b95c-81346146b828\n93fffece-c5da-4f31-a5ac-e29f6218bcdd\ncedfd189-6410-4f5d-aad5-14f6b387d738\nc8934629-5af9-4ac7-a36b-9fa2fe5bcf0e\n518cc3f8-a5a7-4e96-8e60-d7950ef15ad1\na6fff9b7-be41-4c30-9a6a-0d94cdf2fc83\n9f67883a-24af-4f66-a0a1-c50409d4da50\n3ead0ca3-7852-4198-b6ed-2ce7ec737ceb\n15a3dfb4-f5f3-46db-95d3-828992a000f5\n81e3516b-3cdf-4b7d-92c9-e7c6401dc102\nb179b507-df61-45d7-b3f7-f20b7e79500d\n95f5ac37-f159-4370-97f8-526402460fef\na0dcd885-d748-40c4-adbb-96308bb0ef6b\n3f3bc3a6-f228-4a0c-9157-f011938ed40a\n483218c4-b054-480d-a65a-abca289c79d3\n7d8a34a6-abe6-4cfe-a350-edf26af344cd\n1b24dfee-1893-4259-b6ec-36fa497cdd86\nb23903a9-5a21-438a-9cc4-e4a6858991eb\n0e044c0e-ea9e-49f1-8f6d-d7bed851fba3\n0a811ce1-5193-48cf-9ad2-5e5b6bb43e68\nb218717d-7b04-4ab8-8ef7-92f23f177417\nde24b386-d138-4144-af48-616966e19cd2\n1cb8c2de-6666-4712-a119-010ae651e5f8\n93e30bcb-fdac-468b-aed3-1528c6bfd766\nf57b2c56-b007-41ea-bbf3-fee50adb9cc8\n8f827828-b16c-4150-9950-b8bd3abe9442\n56f06da9-412f-4669-8d51-78f4a141926b\n0391b26d-2811-42fb-9b6f-08a73b3a4ec9\nea2b08e0-7514-4821-81e3-b981869857b0\n9f05e4ee-12ca-4776-8543-b0c3c3abf5c8\n56de6025-4075-4a34-8ce4-0f04023d051d\nb2015e0b-cd50-4efa-8e99-4ab7be00ed9f\n1f3df584-ea84-46ab-bcaf-813262e6eb54\n6dfadeee-4994-4b19-8276-a0a610680c4c\n67cd1664-eb84-426d-95a9-b63e31c7e368\n0b60a719-64b8-49e5-bb8a-813deab7b86c\nd3a8c16b-3d14-41b0-b39c-500723b88422\nccb1389c-262e-44f6-8383-db098f710472\na5306322-46cd-4ee8-ac9e-b1b2ea50152c\nfdeb5dc3-d707-4938-9b24-264a537b2b41\n4cdf11e8-1262-41ef-999e-10b127dace5d\n2979bd58-26c9-4935-8086-8b6292e01a53\n3727e634-45b8-4cdf-a8b8-2e97eae6ff1a\nc14599a8-db85-40bc-b2a6-3a629cb037de\nd70f51f3-54cc-4f75-b6df-ba451b564e35\n08993d50-dc4c-4ef8-98b6-ff87f4098289\nb3aa61d8-79f2-4b68-8760-e6da9ffa4ca0\n34fede0f-8dc0-4984-90d5-468fd358aca3\n1f79c064-b956-47f0-95d1-28c3bae49e40\n920a270f-fe6a-486c-88af-132864ae2dce\n8cfc103e-74e9-4e94-b8de-b49a6ed2816d\n33aaa640-3bb6-4291-b5a6-9d0bf501e978\nf1d7cd78-d86f-4fb1-94bc-847ed4661b3c\ncf1e22bf-3b00-426a-9e83-7a0d3ae6ba4e\n6a6176d4-583e-4849-b9a2-5399d8a92ca0\n5cda2c97-9a89-471c-9160-1928d2fdfa1a\n971b97f1-83e1-4687-8ef7-fe3c9d4ff07a\nb511f82c-3704-431f-bf8d-9b6bf4008373\nfef65204-8908-46b9-a79c-f11b2114e02b\nfed04a0e-5426-4ee7-b823-5d2f9bfb6732\neb3a7958-509e-4fb3-a90a-3e89150a12ff\n747d4f15-353f-4648-a21f-cbfffff73c90\n286f173c-7407-4e9a-9d4a-9b64bda4126c\n01ab548e-47e8-4b21-b5d7-0848a1a9193c\n19cb60c9-3d2a-4abc-b487-2d07c8a7b403\nd07afbd1-bb14-48c4-b10a-d7ad42f7b90e\na33d5c7a-26b5-486d-b1fa-3c519fb2409c\na4d7485b-079f-46de-ab75-2c408d77f8c9\n230baa44-9017-4efe-8970-b888530eae27\n51837025-846d-4936-906f-4fc50a9ac8fe\na64b662c-a427-4e59-b5b8-ec8376b6fb2a\ne1e74956-7e8a-43b0-ad7c-9b75296b7dee\n2e722d3c-7be2-427f-ae00-c4f2e51df113\n66641b0e-a070-4ea1-b582-369ce5e4ec31\na0ccc18b-cc74-417a-9eed-b9b4af3e883b\nc8bcbc81-4dc7-4a82-97e4-d380c8bcc494\n2c967c50-8837-48b2-9f29-fd8dcec9545c\nf09f3954-b649-48f3-81a1-7ab89c5dc653\n7ea48e27-2de8-4cf8-81b5-bed7e26bfbea\n98cf0374-dc61-4c08-939a-8154f6404886\n32a2190a-7b3d-400d-ab85-3c1913b037dd\n795a99e4-ef64-47e3-80d9-7dc4082114c1\n23dcab0d-f909-42f6-b73a-2f7adfd40497\n92aaf132-973e-4164-8db1-4f86fbf2db8e\n45d45e39-fe3d-4a19-a6b7-edce5f8f074f\n512b6a89-75ab-41a1-9a3d-7fc3590a708d\ncd46803f-3625-4b24-aaad-f2ca526b1c77\nabd114e7-7f4f-42c4-b391-963b21a79c65\n47191292-d7f0-4f13-8d21-58dd04ec17a3\n6bb1cc74-7ad6-4939-8697-583f17fc3239\nf9b8864e-a645-4fc8-add4-e0e076411d0d\nd673720c-816d-4ff4-8390-39dab227bc17\nd05f2153-43bd-4469-8751-b4a030a3c06e\nf17af253-2f08-4d59-ba12-bc9a44cb2476\n223fc091-0738-4505-af94-dcdfb7c58a97\n97d309e5-809d-4fa4-901f-f1151bd9299f\nf5fc2de9-1b21-40e3-ba48-d3cda4c62282\n9c659e48-02e8-49f0-b876-5049ea115bee\n0f44d5be-16de-4e0f-a2a8-c9658a7edd69\n9be7ca83-1aba-4649-a0b6-d371a580c995\n228edc7e-0554-4fc9-b73b-3950d837a38d\nada65620-d443-4000-8b65-e02e485c21c0\ne878cb99-e57f-4d87-8eff-045e2dda526b\nae0cce09-1d5f-4af9-808a-985c7fbea872\n2ced919d-fd73-47df-a438-d2088bbed645\nc0b5fdbc-60d5-48a0-982c-f1ab2113fa0e\n49f86443-93a9-416e-bd94-857963020a5a\ndd871b38-6492-44bf-bee9-ab827b23c7fa\nfd696366-7aed-41ed-8386-9c1fee3b3aa5\nfa045439-b7ef-4b70-9b82-0d3a56fc4609\n062c2730-20b7-4243-b04b-31ae4044a266\ne575f024-9b26-4b0c-a13d-df52b3487bbd\n5ab77209-c829-4bac-a7a3-36d21930db87\n9c44ea8e-e7d7-4a3d-a8e4-69cc142616a3\naf23222f-8aa8-4368-b8d7-5c90c7320f14\n75a10517-df81-4ce1-a663-9b8723f51638\n2fc39f30-d7ca-4991-8b63-5f5496fa390e\n17165dea-85f7-4443-9450-b143045ac1a8\n485b5cec-b30a-438b-a927-15ec6beba9f4\n2375d76b-af23-4b28-870d-7b320a6edee1\n4a72965d-9bba-4fd7-b64a-3129015ab272\nf110b4bb-8eea-4f85-8f2e-26d07224d022\n00382acb-0d47-4a60-a5ab-156124bf40a8\n806557c4-c640-4e04-9d9c-facaf09e1661\na2021756-4dfc-44fd-bfd3-ede8809d3e8e\nb852cb2d-a53e-4a85-8ab4-d420d272bc55\n91996e96-3a6c-412d-95f0-0fcef065567d\n522a9b8c-cbbf-4ded-b809-a11d64b8a5f3\nba06b06b-9fdc-46f1-8581-0b819687db08\nda1e0d74-0bdb-42d1-8624-148bff911da3\n5b923bd6-7962-4502-aa3c-2452035268f2\ncaca7c2b-f678-4599-b6dc-912b79b6fcab\n1cdfdc8f-4920-4237-897c-69627a7164d0\n6fcb8bd2-6571-439f-aea9-80ad4942626b\n0a8b8cc7-e75d-43c4-a4ee-c6151f36b011\n87357adf-ea8b-495c-bde4-405ffbb75bd0\n35c169ee-d4da-4f48-9f6c-130ebf39bb3c\n609c75b9-c3a2-47eb-8513-9afd528e1395\n4351f04a-acd3-462f-a855-5e4347597a5f\n3ea63289-48b0-4c71-9693-e54f67a878a7\n088ee068-692a-4daf-b32b-1895c27bb2a7\n9f97c146-eaea-4262-9769-a2bf139f703a\n89d2d1fa-fd12-439e-b633-3c1a88ecae27\necb5e12f-183f-448f-b5da-a1dfbdc9632e\n88aba9e1-b86c-453b-9fd9-2bbd5a58aa81\ndf04b917-6fd9-499e-8b10-7fec92804325\nb26e416b-c753-455d-b9f0-ccd9025352ed\nba10a0d6-6029-4a5a-8d69-7b3e4b3902ad\n2048b787-90f4-48e3-b57f-185b6b515eaa\n6e6a2f72-4d73-458a-9668-1d5efa6295a7\n801f4234-6a93-4082-8365-5387c2eeeb2d\n17adbb12-a3bb-479b-b13d-a4ca25bf6321\nb6ba43e9-b02a-4a9f-b70a-9e915bfcde4a\n9a59e47a-66d6-477c-8985-50b01785bfbb\nfc8f3a30-e5eb-46dd-9bd6-538457e9b5dc\n41adc3fb-0a6a-400c-b316-ce64a2f03452\n55c71a7c-6cd1-4789-9ba2-5250f5ddf8f6\n266c7535-9766-4bef-b981-23ae56acba39\n324b4c36-fc0e-4d23-bd1a-925a9f257685\ne1e48d1b-f8ad-470d-9c0d-4475ec0d6de9\n8768615f-3c48-45ca-97b8-36d59492fdac\n2add7271-d71e-4b34-94f3-dc4c61a4475b\na3d480c4-01f3-48a8-90c6-761c2885efdc\n4d12cc73-e429-4bdb-ac8c-ee44fd32cd6a\n429afded-0110-4a64-8007-7b2073489546\nba27eef6-d73f-4e1f-b746-df44c81e61fa\n84ea7f13-f86a-45fd-8673-c149beb2a903\n85f2e689-76da-4910-baab-bbc5c86859ff\nb40e4f37-09e4-459b-9a58-eba87b8bf958\n4cfa6840-4546-4296-8d7b-d4f8621cc03e\n069efdf9-7acc-473f-bc60-73fb5ca2b38f\n5b4824f8-269e-4e23-8dd6-b9a30c77df87\nb47cff8e-7cf2-4494-9e71-6c91b3351380\n733f356d-82ee-47d3-a7be-8a978f940f4c\n7a6c94a1-7cf8-4ced-b322-51230c77d80a\ndda0def1-de4f-4660-b5fe-f5ef2e9ffd62\n78580520-2736-47f5-92ac-5d6b596a140d\nd137034d-4092-4a34-9893-8f5aec4d3193\nb725ece8-0d95-42ee-8350-54eafbc76548\n2b03071f-cb62-4d95-adca-b1c8a8d523b7\n2782b1ae-50eb-45d3-bf9f-5572cf286f0f\n42f2c212-78c4-4ea2-ae21-f3ef7f056059\nad74ceb6-f2f6-440d-b311-661571211813\n79616ae8-af98-48a1-b927-a9fe9bfc48ff\n4255e8ae-982c-41f5-b83b-64ee7b327b2c\nf9b64962-7d02-430d-855c-04803228ef76\n5bc2c287-2dc4-44ba-ab4e-13f87c96413d\n598fb24f-984e-4607-8510-5ed2bebeb40b\ncb09fe76-bab2-4c03-9eb8-443c0bd9926d\n40c01348-ebe7-4734-beb0-b42b56927ed8\n69073ac2-1983-4010-93ff-9cf40f02f85a\nadfaf258-92c7-438f-850f-d739b3a7e4b5\n66723fd3-adb5-41df-a3be-1a95ffe8b482\nfd1948e8-ab72-4ebb-bc89-5837586e2bc6\n6ff57445-bc89-471b-9a55-8a250f76683a\n6152372c-134d-40b7-b3a7-eaa43960b244\n83cc64e7-d173-4f32-aa3f-29f30db6e154\n3b1f65ce-9beb-4952-ac30-edc240c09bd4\nb8dffb91-f595-46e2-b813-65656ae81bb4\nba22b88c-0b79-4327-ae04-c8c685feca80\n4028dfa4-6c48-4fa2-971c-295bf2e6f6c9\naadd1fbc-f803-4abc-b1dd-bff883483559\n717b50f7-f53c-4ca3-98d0-ec96a123cc39\n5483a07e-01c6-4fe5-b66f-9dff77bfa4df\n9a3867f5-d4a2-41bd-ba97-cfd7a81ae06f\nbb3fce7a-85e7-48c3-8d1e-85d4af5e1407\n0fabcbe0-a7a7-4419-bc6f-cb183681750d\nc5a3d1c4-0079-4c73-a9b6-58a0901062df\nb9fe8be2-6176-4935-ab41-f88f5aede94c\nfa793a95-146a-4151-82ac-92bb52ae39a5\n4ba865fb-7589-4f25-a3ac-07f74969ac1c\nb7a11a8c-7d64-4358-8f2b-65e8a874ad09\n5d22d891-2dd3-4df0-a120-0a7208e7d2f9\n0cfc5aac-dbcf-4a3b-8dfb-34bb83473b23\nb76536c1-2023-4eac-a193-305bbfbbb8dc\n4b866501-a245-499f-8988-13c3fc5378c1\nd776cc56-40ca-4247-b8d8-e077ad5c30ac\n5019ed9d-f980-4888-baab-3f44e01b4106\nd9117d2a-e473-469b-ac75-1553254ec13d\n48159d1d-f4ca-46c2-b0a1-d620cb3ce75a\nd2c1ce14-2a60-4cd2-92f5-0e3712e82611\nc0ba586c-0b93-485d-8034-15cf9c4e1969\n4861e4c4-6760-4c85-bfda-5190be28d3df\nce415268-9b6b-4076-abf7-d637f0a7f31a\ndb83576e-af15-41ca-9590-724e2e24bf4f\ne918b02c-7064-4aa9-882d-512d3eb7894c\n8bd1845c-51f3-4b3b-b265-758dcb4a12e6\ne8fe8e1c-bb2f-4d16-92a8-f301d18aebf5\n93a64501-e3f2-4339-afad-90f53b628a9b\n501f93fb-8232-4742-8ba4-d3fc02d28238\naedba3ee-9201-4dd3-9f48-ab20300380f5\na3e576ca-0e52-4798-98d1-60ddcca66376\n1466c0a3-4c06-4752-8480-6d319174829b\n714eea83-f9ad-4895-a700-e8b9e3cdaa78\n81f07e68-9b18-4840-9f47-10f6d9d5a102\nac02efce-0de5-41e7-9fd2-352dc7417541\n899f8539-1f21-4a25-ba06-e0a042e1e1e4\n62e96054-4361-4162-b5e1-17bd37976b3f\n7bceab57-5db3-47ca-9d3d-8dfb3ef2bce7\naaa7f235-f28a-4aa9-af47-10d3702f7e6e\n254a33b0-9fe3-45d7-877a-ba6572f7976a\n6e0e6877-98e3-4955-9834-687ce502bf4a\ne0ec4dd2-a9c9-4d11-8db7-3befdf483aa1\n1f447e29-a49b-4089-ab42-32d00fc8c67e\n3143786d-cf99-4486-a05a-2e5ef9f367a3\ned1246a6-27c0-4caf-b4a4-2aea7eea45ea\nf350762e-9b14-4aa7-a2ef-f16e2160e3d5\n9ce5d068-2a81-4ef8-a142-a88a8ce20248\n8a12b676-ff90-4260-a46a-6032b4fd95a9\n49faa561-47cd-4bcb-9e85-fd874c2f28e1\n12c9c58a-95ad-4a4e-84c7-5afc823f1af8\n8a0dd7cc-9e90-4c7c-9a37-20ad78a7c160\n93e5a13d-3ca2-4f1e-afd5-dbde3500adf7\n0ad14d6f-6027-40c4-9467-e0962fa599bf\n66b0e35b-985c-4507-9a8e-55c75baaa551\n0b41957a-e57e-4c56-b83b-e1c4b290e078\n9c02403e-93ca-4459-8a5b-9489481017db\n7e5c9015-3db9-4151-892e-68b1a64649b2\n6336cdd7-42bc-4067-831e-172206d668e9\n1656172a-bf8a-4db8-a8c4-03fae3af3128\n27c37153-1abe-4189-b421-7af47b5298ee\nd4e976ee-53b1-497b-b8ab-cf9056988c26\neac5254c-d316-4389-9590-d20ad051d4a7\n95092da6-8ae3-4e13-9a02-c210e2abf902\n0b41c9dd-806a-4a98-9f0b-64a05781cd7d\nf7e300c8-8353-4525-94ba-c1b20f9d026b\n64a93996-b196-4d1a-964a-4edf825d8326\nc11282d2-7c7e-4de6-9b44-90d5f63865ee\n91912adf-4599-486b-ae1d-1a6a91da761b\na87afe01-89b5-4292-8240-c3943d0a2709\neb40f94d-e9b8-45e9-a21b-861e70b5120a\n8160e70f-c5dd-44ad-84ac-9c34941e9d10\ne01b047c-a4c8-4c08-906c-fb9478b81fca\nfe3d548e-991b-4e67-907c-ac84b70fa929\n01853a3c-f167-42b7-9a82-741414ab0d8b\n49e67a53-807e-4fb6-aed3-fd6c56d6b5f5\n157216c2-7eab-4ea0-8b15-f76ab1c30d72\n61fac8b5-1617-465b-bb68-81a17cbd4f46\n31496b2f-aac6-4e97-9e58-7decb2b4e102\ncc27b2eb-9365-4823-a9fe-f935ba43ea8f\n21e2309b-1321-4346-b4df-39412cb5c401\n1f2cff5e-75c9-4b1c-8b28-76eb2ecfe897\n81f72790-4d33-4163-a5a1-67dbedb48cb6\nd964af08-7800-44b0-88d4-f0da2adc9c38\n6a2bb6ef-17c0-4ce8-b611-14ddc3446e17\n7153e94a-cd1d-409d-ab24-2420da7f2dc5\n1a14692a-0b56-40b8-91f8-6d33cd490141\n59b808e8-a600-4ef8-85b6-dfbf2fad28a9\n929d88b4-67e4-4561-a57f-5ca4d4f4e315\n0d56c2ed-0b1e-4b43-ad8d-882a8659c52a\n80bfe050-3c96-4a7e-8431-70027cca892a\na614c42f-066f-4bf6-8a9c-dccc9df4b213\ne6a2fc05-9275-4560-93e0-2065f6aabec9\n5a255835-2ae8-4e09-8359-537b0c321283\nc8fd8007-5c32-4073-94a7-c72b34d6530d\n5a88cc8c-0e83-4a0c-86d4-27e785beb956\n84fccce2-8bc4-43a0-8191-a51d53ce02c9\nd2801c2a-e431-434d-a1f6-942cd3d4a3f3\n2948ccf7-81b6-4a3d-8896-cf13fc63d8c1\n4475dbd3-d9fb-4762-aa43-c10529805afe\n2cec1a6e-f47e-44d4-b7ff-6a2ad5f21302\n79a35d21-bb23-4f47-9b10-8801b7305f05\n798f41af-fd8f-4615-9fda-8ebedb1f0c13\nf9487727-e1aa-4084-a29c-82b4e716f0dd\nd23c00b6-08dc-4323-a2aa-613b83b145be\n5e7b4941-edf7-4539-9be1-3791441f1255\n4af6f350-5e1a-4fdf-8b2a-4abf9c42d458\n1670f564-414d-4469-aa74-28475f98bc44\n387f04af-6347-4d24-83e4-206c18aeb32d\n8830b833-2e4e-4432-8de6-acb1cfc2d8bc\nc64d85b3-0128-40c8-bc15-4bc99d7c9150\nf75ae5cc-5a63-4e42-b9ec-120bafc1e83e\n6ab01a1f-7e5d-4a9f-a339-e4a7d32ce155\n7d468cca-0d18-4159-8286-dd548da4e149\n831a0c28-c084-49cb-ad97-28ea70bbb653\ne2a3e21f-b07d-4217-82c2-c1decd8085a9\n3dfc5db3-6b42-4cda-aecb-9216cc788d43\nb10a4a66-5d5d-4093-ad1f-447b4bbb848e\nc125da3f-2342-4c32-8f17-a890e683b547\n1db42029-38b0-448a-b243-356ef7376ad3\naeef8fa4-c698-41f6-83ff-a9916bcf8f3a\na94c5270-0ba6-4475-a88b-251c8b4551db\n4ee510a1-0120-4930-bcea-a80ed3f9151e\n0dc3f4ca-f3f2-4cbb-9f95-f19b3f01cd86\n9ceb1b65-92bc-4069-a12d-69a14d69aaad\na8738e5f-7049-4d8f-9a13-9fb992b746ac\nc0612ab6-5030-4491-8ef7-077b10b7cb93\n3417c1d2-0ee3-432f-8c36-fa3b29c1d84e\n35a55344-c3bd-488d-b792-26eee749a204\nc586db98-a102-48bb-b600-3ca123b22d33\ncbdaa40a-1b9c-4c90-9800-bb566ae44117\nafe98973-3627-4f86-8235-aa193006aef0\n5cc7bd4d-5d12-4081-a4b5-02393108a91b\n28be5b7f-f763-4237-b7b8-875624677fb8\n930cd27d-0af1-4d20-af8e-e404a6ce15d3\n47726a07-d981-46c7-87aa-59d506fe474a\n5af1c460-72c1-418b-86f4-99ae952fd71d\ncf0b37f8-b989-43f7-9b9c-c20e3b62aaca\nec2ad652-bbb8-48fa-a688-093e9fc451ce\n31fd15a5-53b2-44bc-9510-dbdba2d4953f\n44b42afc-9dd0-4c0d-a398-745977701828\n91c7939d-af64-4d52-b2f9-8dc94c3d96b4\nb40dec85-3f87-44b7-8b74-ecbfd473fdbc\ne55e85f9-a196-447f-aae9-06320e11514e\nf2117fd8-3026-4d07-97a1-3795fd6200dd\nce0fe7c6-7ab4-40b3-86d3-4abbbdaed067\ncdc22297-6654-4b9c-81da-174955b0d1b0\nd782935a-aa43-447b-8787-85a451f7b021\n3b333193-5e61-405e-8705-bae2041268c4\nf3f99611-52f4-436d-b5b2-e0d0e8c11653\n460fe73b-1ebd-4cb5-9e16-308325bf5d39\ndc80778a-a877-4c07-8f3d-e6769bdaf2b3\n9589c69a-e674-4774-9f3e-1bb5f7fa5abf\nd1f13bd6-abae-4e10-a56b-b33c66746ce6\n26cfb04c-4bce-4540-b38b-655d292166c0\nfef6a0a0-ee42-47cc-a1c8-5400939d6f95\n14663588-1e91-406f-8f1d-e1be2705c3dc\n23764017-a3d9-438d-82d9-9e1d2467b8a8\nb42e58b4-e974-4c2e-a197-5a05b9b3173c\n0118bf51-c5b4-4c94-b9e6-dc19a4c0506f\nb0913363-e0d7-4b52-b118-f2f9242b50a6\n082050f3-b5c7-433d-b09a-4fc3572e6ffd\n28805d28-b35a-4825-8ba9-8399cf44823b\n4738ff8e-2230-4af8-bbaa-32a208b31ac7\n992e8ebc-52c2-4c14-b4b6-224871e54199\nc6f65e03-5ab5-47d1-b23f-694e9d629138\n5ee35131-169a-4755-8256-26d3eef39547\na1aa481e-c579-4df7-9b0a-c3f099b9271b\nde39b6e0-672e-43a0-a0ad-e24e2fe54130\n1a2bc8a2-d909-4e96-8975-1453bc172a72\n00b38ef1-d52b-44b5-8823-6be72dc783f8\n64de7ace-b714-46f7-9342-59bd8930f703\nb90dd843-5495-40df-9ad6-dd30b1076df0\n07342ad5-482a-497b-818e-b807a15dffe4\nf747e6b9-7b84-497d-bb17-8b28693c60f7\nffc57497-e977-4814-9242-028605e9506f\n5e61e82c-8b29-4f95-abfe-5de4e5ede1c6\n8614f000-579f-4efd-9bec-5fe6786fa625\nbbfe9540-6274-4a65-8445-874ecb3013bf\nd605f007-378a-4e34-ac46-6d41051b5843\n176b5a95-7655-419e-bf17-a9f0950b9167\nc67f749b-ce0b-4cec-b13c-fa19dda446cf\nc9d33939-35c0-4804-80ae-c1ea716ce8f5\n59fe8881-4aa7-40ec-9305-2cbd6be4f9ab\n57580f27-4c2a-4245-8d19-c1f289431765\n2a4269a4-89ff-40ea-8461-4609f271505e\n730d011d-634a-474d-9834-61d106b19981\n03c257fe-9b89-4254-8ca3-8f9d9eac9cdc\n27e4f0b2-13b5-4214-a8ab-cc7c19cec0f8\nd730c614-359c-4100-bd9c-63b8879646b2\n61da6ef2-0242-4745-84ca-edee221f1524\n766a4732-9929-4c3f-a08c-9c03a9bb6769\n56bd8a2e-3f59-4b86-8b1b-096770fafe68\nf86c15aa-1b06-4cf8-9d79-7f450c292d70\n9f076f28-e91e-4106-bcdf-5a7131fb6e12\n71eba529-97de-4a45-917c-3b984603d12e\nfe55c708-3609-487b-b048-1d4c05ef7941\nf470430a-8c75-4fd1-8806-5c3a847ea77c\n6e3956f8-8110-4b80-b02d-369a8b84c8cb\n1f997eab-3e78-41b0-8622-84a2ef38d5fa\n3b2c01d7-77a2-4c20-aa56-66c43a855245\n36bbd730-e730-4fde-97fa-68efb7308996\na4d63c8c-b384-4161-ab34-5ad47744877d\nc3d735ac-1e4c-42ff-a7c0-f4a92ee27dc7\neee7bebd-d5df-46b2-b405-7da1b56622dc\ncdc90051-d834-4e55-9ff4-11f6d7715317\n6a69e1f5-478e-40ac-936a-783e31a9bde5\n27864110-97e9-49b9-8424-8d6a856c2e31\nbdbea862-a2f3-4763-8c34-762f410bab44\nf4fab7a4-3403-4ed7-b54b-3152a3435f2c\n0ac20ef2-1cae-486e-9064-c24950027192\n9dc305ff-4b5f-4456-9dbb-36d8d5f4d55a\n118f621f-4504-46f8-8cea-35d05469fcce\n9e5b4ec4-3135-4247-9a10-edcd438e54dd\n7977ebd1-f371-4539-b7dd-807f94ae141f\n65cdb639-fea6-48d6-943b-92f4b6eef111\n82705730-fed6-4ddd-944b-a0b61a8ca523\nb122c5ad-19ff-4f1b-8201-7dc2a170abb2\nb09b7472-3f65-4712-a8f3-036d626c99a5\n35af92e5-69cd-4599-b72d-8fa8778d14b2\n88baa16f-d48c-421c-9f34-dd6a760e1b07\neef5352b-eaee-4688-85c2-9594890c668a\n2c7a23ba-0e83-48cc-98b3-53fd8df5486a\n0edbd159-df0f-4118-843c-33ab36b46ba7\nd8d1892c-412a-42aa-8739-440fc0ff1a07\nfb39354a-4829-4a26-99e4-a0d24d12afde\n16d50234-3e34-45ca-b4ed-5617fdc521e6\n0c0a8470-d504-4af8-9d0c-46773e5721f2\nbc977933-7093-44b6-807e-b0994c14c5cb\n8ad5bdb3-0966-45e0-8ba7-81f6c8f7ed5e\ndeccba76-9bf2-4ae2-972a-058c948675e7\n52f7e03f-43c5-4536-a288-06193b24ad15\n087e46fe-fa1c-4e48-b17d-ed84aaf249c6\nf69bc8ec-b29d-4c34-8986-07653eb76388\nfa9a6a71-b4f7-44f2-8293-cf5fb15b16a4\n56159339-5510-4170-86d7-924233b99768\n740cfd92-e055-4c26-a60a-3adf63843015\nbf68ad33-a00c-48b0-9ce8-d9c806c60f74\na7d888f5-2592-497d-a9c9-3b7820c1f063\n56e0ee32-b59a-4b72-859e-3460833a25aa\nb184bf81-3423-4add-bf59-36d26f82d9e4\n2fb45b64-866e-43a2-8fc6-54407fb62830\nffe6b4e1-b583-4527-97fa-75f9d403e305\n764f81b9-aa51-4643-a2b1-d88fccf1fb1a\ne3ce1758-9513-439e-a02a-5b6e94bca2c6\n75270602-a9b5-4ea1-a96e-9c2440d7af97\n1e513c02-006c-43ad-9a77-d435b411ff40\n5c68f7ab-d44f-47f6-ab33-81f30af69ec1\nc0757e49-6b3c-43fd-adbc-98664115c884\n14c41492-3ff5-43a8-b658-4a63e391e39c\ne6fb1dae-4bf0-4846-a5b3-6c16db64ef89\ne0f12991-ce1c-402d-873a-346b36debd92\n58ae8137-9708-4d02-9399-de6e33dbdd95\n8d28d17a-bf73-4182-aeb3-652a6dd7629e\n91b67935-002a-4a63-a026-53cb830d0dd4\ndca3e186-a73c-4064-9ac5-47b04f6b99c8\n340f00b9-1d33-4e0b-836a-c62e5a07a03c\n65f18465-9b98-47a9-b285-b52345a613a7\n9f6a77ae-a6e7-4eb9-8228-75893023ef47\ne71ba9e6-521f-4de2-b29d-6a66f1250a87\nf0e91b40-1620-4ad7-8cf4-e380ff2b77d7\nb049f191-213d-4f55-9572-22262f66940c\nfd2245d2-e54d-4ee4-ba8b-c5978f465c31\nbe2926b9-5ec7-48a3-8b5e-531832c654f5\nbd26ad64-4742-462a-8bdf-8f673cfa141d\n81a421cb-749a-470c-9b1d-d3d55534aceb\nd6ab4e0f-8c68-4e7f-900f-e13d76897117\n702c26a3-83f5-447d-a72b-a2b0520df8ca\nb8b87890-6b27-45a8-889d-ef8c6077c215\n989fb75f-4996-4e0b-b741-261e380d57bf\n8920829c-60b2-445c-bbe6-4de7f6b1b5a2\n5462f2ab-4dcb-4fd3-8220-75fc5400d103\n7803f9e7-475a-467d-af72-a6afc6a081c9\ncd082ba9-85fe-41da-81d0-5c64c004d731\n69b48361-2fd6-4bb7-a4d8-5d3b05d661f2\n33228f76-b7b6-4c90-b8ba-32e7064a7a57\ncb2c363f-a884-4047-94d8-105b715e02d1\n39fc11ca-814e-493e-9025-18a2f31a932e\nf93d2737-beb3-4c71-b87a-604e3fe820b3\n9d156787-1238-4ca1-821f-cca7fad61122\ne0e0d790-7a54-4409-9290-90379d04bee2\n336bed58-6e53-477b-a68e-6548ca48b41f\n25eed0c2-b103-4f3f-8a37-6d640e5ede01\n790209ea-d45f-41ce-94f8-76f5d1986fca\n970b89c3-c91b-49c2-abe5-32990dd1a880\ndae15b35-8fd7-450e-859b-9cf33125af9e\n4ab560ef-5d98-4e6d-9e9b-db4b809c3794\n632c4a97-5049-4a6c-9e2c-cf84212e1a5e\nc15a74a2-6ee3-47d1-ad73-8c173404719d\n2a8f108a-a57e-4afd-a221-2814b7228e11\n5e987771-e006-4a65-94b7-79853afd25c2\n84b1b349-ae01-4394-bc70-87f09e5a05bc\n19dc6673-63e1-44db-9ba7-7721541c4d19\n17594f0c-8751-404e-bb49-64f93a301108\n4b80cbf8-579e-4a6f-8f1e-3451a9d3f12e\n5bf9bb9c-2e7f-4d59-9ca0-ac9c19db208b\nf48af2bb-3365-4a8f-bebe-5710895f542b\n37c35957-7d71-40be-ac49-cb5b0608f116\n8ec5aa77-d090-47a6-8999-8be7306df9d3\n76e64ce5-de6d-44ce-8c77-f10c5789f76d\nccdd23c5-2c52-40e5-9623-f527c70358b3\n8fdedc26-da2f-441d-944b-bb8adfc47bcd\ne7ca0d96-b164-4c4a-8dcf-b4dc4970ef09\na6dfc3c4-92cc-466b-9826-dc0a22e60a8a\n127ebb77-d2eb-423d-844e-57d49d9ff2fc\n71c2d5cd-e869-4b3e-9720-a74b9187a98b\nd1e9c01f-677f-4c52-9d2e-ce5ded5d0a8a\nd85af760-f011-4393-b2ed-aca05dce456f\nf65566cf-adee-4f66-901e-974018a2e07f\nfd3537c1-4448-4c39-bea9-3adc2694591b\n7f4ad36a-d74e-4fc9-90cd-41304c65c01e\nb8e61aef-ec0a-42b5-80a5-71f3a17f52a0\na58f1beb-ee01-4733-81a4-f7cdd14c35a4\n254cc17c-f513-4b80-9633-bf0a8facc582\n46c6387a-b447-4276-b52f-7deab21c068f\n71f8e73d-a6f4-4eeb-89ae-3b6a26c4f4f0\n01afd7d6-4e59-4831-bd73-1f54c91c3bd1\na38bb92e-b27f-44ad-8e42-4ab2dcca57ca\na0796adc-a803-40ec-90dd-6f022f292018\n9bc75bb6-8fa7-4b85-ae8b-6a3facb408cb\nd0ccc5f4-8965-4e54-ae2c-8242039d153b\n647d3755-b4a7-4f8f-9bc4-1b94b6067436\nc783868e-1250-40a1-ab6b-e6a8a21210da\n2ff8e7d9-c7a9-4576-90ec-79a45b3c56a6\n316da82d-5515-4d9f-860a-62e2de6c5972\n13552d1f-48bf-4dc6-b78c-46cc3e69de0f\nddc6b413-306a-4b0d-aa8e-6178407fc926\n672cf276-8f98-4f8d-b296-cc6d32ae4d20\ncb8f0a80-6cb4-4929-b629-fd2c8c6eae68\n67509e23-d570-4eda-98d1-194a72a5a5bf\n969c2a84-7da5-4d0c-a3c0-26b97ae1e9d4\n7f13f114-75ef-4058-a939-1a2647acf8d8\n10428322-8c53-4c4b-bbd0-6389774b3542\n353201d4-75c4-46a0-a2cd-2cc5d5fafb75\n4e66158a-d4e5-419c-b473-e21fabd41f30\n3583606c-991f-4d8c-b198-cb8ad91ed746\nafe7f428-bd77-4668-9fca-14ea453831bd\naf286c67-f89f-46b9-96e8-6870f1202254\n066dedf6-2f09-4bf3-8b60-4a9f6c5f40bd\na03d6a20-cea5-4541-993d-051bc195d618\n3b4bce86-5d8c-4fa3-b13a-8322771d391a\ndc7f620a-5649-4c82-bebd-c866911baa32\n2c1db13b-20b1-46ef-86e6-355cb1aba589\n1abe9462-2951-441b-b775-46360aaf5a9e\n4e01a8fc-b345-4bde-b429-0ea1bed1a950\n621b60f5-fb13-4e06-a5e9-e41f47475080\n5f20057c-1ae3-4083-9d97-a213c5090589\nc7886871-8637-4fa9-881f-0f682b0a0321\n0108e515-2c32-471b-b87c-81257cd35068\n2a43a358-101d-4583-9783-7f5aa5117c56\n5eb6edbc-f6c8-47e1-b3fd-69833e7b60db\nddb1688f-a8c4-4148-ba3b-d55b93413fcc\n78955c75-5d22-4fca-b457-052cd3f365a9\n69bf053e-0a3f-4125-a9e4-7a77af44604f\n8d55ec2b-852f-47c0-9dd9-f368a2864cd5\n4bcf95d3-bc9a-4cf4-9355-a0a0e287feb8\n3dd698ae-41c1-4f60-9277-0252a1c6f37b\n2fab9d28-7d38-4737-91d8-162dbd8e4c3a\neaba1ad4-5c65-40a7-99a9-44b142d1967b\n78a9dfcd-2b78-4492-8756-0b6fdbbc3fb8\n1363431e-b213-4323-9344-ce2e3cac080d\nefe50ed3-d9a8-4b75-9cc3-2b264e328910\nb50044b5-eafa-47b6-a8c9-036d6f064c90\n0dd4a64b-23cb-4851-a080-3c301f9fc349\n2dc7079f-57f1-4971-b8f5-3e9d5a1dfe46\n0c0f4c13-eb35-4d83-b21b-3d984598d66e\na168773b-3b93-4fad-b985-a8b91af588be\nc760b3cc-c4d7-417d-afce-3e0b3ee1d307\nbcc9133d-6691-4e61-b94d-2c33d914afd9\n3f046c3b-1963-4fdd-86ef-35d06db01c49\nbe96fbe2-7eeb-4d6e-8c4a-886761c3b5f7\n9c338158-ac16-4fad-a757-8dbcdf7a5cea\neb504c95-ff7b-4185-85a3-169ecfe5953a\ne4102fc0-a71c-4178-8484-454c38ce04af\n96322337-e611-413b-911f-2c1cee5e63f8\n144e844e-adc0-4219-ba31-a6f20a10908b\n7bdfa9f8-789a-440a-8221-11fdc720b7ec\n74cb569d-660f-4df7-95f7-9be1d4dff86f\n0e35920e-b61d-4785-9f5f-810957b1c436\ncd7afb7c-8022-4c7e-89dc-beb3497409d2\n75b41f70-bcb8-46c3-b1c2-20e07e15a7be\n3fab69fc-f438-4bff-b4e6-2e4e3bc6262d\nd198bbd1-f163-41b5-82a2-b5d5ad62a18b\n6f0ce6d9-819c-4dd6-801d-1a0bbeffc2fa\n342d9e3f-cad6-4ba8-b07e-ad8779ccdaae\n46873e43-f551-4f92-9931-381002a180ab\n46dc8bac-edba-43a5-a105-53b78b19f9dd\n5d14c7f5-ea65-4c82-bf5d-6b2a521cc775\nf09a9248-1f20-4a04-94a7-743547c51ef3\neffe976e-6995-45cd-82b6-8ca3f40b05b8\n4030f227-484a-4f7a-8568-20e62e0b3d62\n910790c1-814e-46cd-97ca-adb112f26253\n6045d24e-68c5-49ea-9ad9-36e6ce63b9f1\nd66e87ea-58f9-47a2-b709-36c964efa3aa\nbf67481e-f103-4722-841e-bef39d5f0f8f\n0a322640-b8b6-4419-857d-1f7f834bfba5\n4bead369-abf3-4443-8975-8d722e89f0f8\ndabfb053-b497-4906-88b6-d6d5c4f97fcf\n6cfef513-0d96-4b6c-922d-7e8352bddf67\nca5dd564-7068-4b83-8782-e2daa176d37f\na2461509-6c16-404a-a7f9-dcf6e44c064b\n48ab673b-652b-4daf-83cd-10d8398acd6a\n6267f60d-3fdb-45cd-9089-79e03e715a12\n0b63ec88-62e8-4075-8294-df1a494e60ee\n6c28bbb2-dee6-462a-9b57-ebe04e99c860\n089f1cf4-64d3-4927-9b1b-9af20b9c480c\nc3db0412-e119-42cc-9ef0-04024664cfcc\n1ff00bee-2286-4f90-9b92-b90405d0ca4c\nab7fa1ef-9f16-44e4-bd01-447756340a81\nc009f966-ed73-4e24-a024-fb684e6bbd18\ncd33b203-d050-4c9b-9457-bd7107e53c26\ne8a7942a-46db-443e-bb9c-0613d6a1ae99\n199ebb51-3f3c-41b5-8250-b4f24bc1b5ce\n20dba0c3-9307-47e3-913d-c8c38500cf95\n22a832bd-e683-4f4f-b630-eaadb740900c\n51c6c85c-a398-479b-aa77-be08811b7126\nf8b25ed1-26ca-4389-a6f6-03f10d41a3d6\nc551fb80-3d65-42d2-9237-ad42984e350d\nfefea18f-32d9-4132-8faa-1aedf7150989\ne0eb64ae-fab2-4068-a229-d60ab8cf30ee\nb0c4b4e2-aef3-4033-abb2-7c78c79fb35d\n4bdd9125-21b4-441d-9b09-c97e5ccf3710\n29302650-ecec-48ca-90f8-71d86d8b232b\n781087a9-865e-464f-aa82-5ad310172a28\nde91f3ca-a72a-4876-8c1a-1f08e511e951\nb8b0e173-daef-4abd-bc68-7f5971cd96e0\n35a79b2f-289f-4780-b495-a95c3d5a6946\n7632c988-06e3-436a-89c9-2c9726f692a4\n03f8db48-bc43-48e7-9fe9-c6f02e994c1c\nd31f1866-d818-4793-bfcf-4a3807d7e980\n427b699b-9e58-4a90-b30c-808d78a6c69b\n92c85e3c-8cb2-471c-9652-938465444c88\n99bee72e-8788-41f5-ae00-fa84a0ce3d6b\nb96ab523-7b46-491f-98dd-67a253a033e8\nb7b1412d-64d4-4c20-bc0e-66b3f70274c9\n82e1f9ef-e118-4f6e-9d26-7d7611f50694\n0fd326da-35ca-4e4d-a828-039f36b64581\n343b83a1-79c7-4365-88c9-b08f2beb294e\n38d167f5-ddf6-45b3-a0c0-a05146d49eea\n09f522db-06cb-4eaf-a5db-b34abad7bace\n6ab5ad37-5bbf-427d-8f6a-8fc4fbeedde9\neaff7544-4412-44b0-8d82-a9b5417945c6\ndf235d7b-870e-4f82-a817-b2adab4605c7\nbd69e958-6746-4909-adf3-cae1fe5aaa5b\nc3a70ee7-0813-4e30-bdd3-33a57b612eca\nac7f4aa4-ad61-4fba-a839-5b55376e6e97\na34ebca8-54b0-4f2d-b850-3cb4ba98462c\n5c341f34-443d-4940-baa5-28f053f42a52\n67be72c5-95ad-423a-b5d4-d94569db648f\n5103678e-926a-4944-a34b-a865db7fe48f\n7bb9c431-91ef-4f5f-9784-cf5c851ee218\n4c63de58-8fa9-4e1d-8cdc-d2c92cbab38c\ne130e39a-19b7-40e1-8ba5-43464ac99aec\n732f1d2e-0ab2-4a44-8518-044ae8ada07e\nbaae7d28-324d-4e61-a87a-f580656ae1c5\n4482984b-53f2-450b-92d5-da5c8afb41f3\n85aeaf78-8109-4a98-a079-5572f97cce0f\nb4685976-0bf7-47f1-90b6-f241fa3c1c1f\n591564ac-9433-4ddf-bb9d-8d41015be270\n2a5abca1-8216-4569-83ef-3032f6ddf01f\ne6a9e645-fdbd-4ee1-966b-ab1063a69150\n0260f9f8-c4b4-41fe-a901-b5bfe50e5237\nb7da9ff6-5efb-440c-a696-a36003a5b303\n953fc0b2-4e69-456e-bba3-28a3c026cf39\n8b2c4337-172d-4874-9e48-35cf0cd93db0\nc23378e8-473c-477e-b54c-ca95c4f85a87\n2d81c9a6-9ff5-4805-b7de-8cf41b33fa8e\n108fde77-615f-4dee-9cf2-4be47deccafa\n8e34c402-79b2-411e-b9de-c652d60ee738\n2b404238-d23b-4214-a561-4d55250eb091\nf0dec296-b241-4178-97b2-5e54541565a2\n6204d3dc-3466-43a7-8487-a0f12bb6f96b\nb56b8af8-630c-4e28-8578-0a72d2791a76\ndd74c466-2369-4c27-9f92-d6edb6f1671c\n6ffec8a9-c5c7-409c-bc57-6c5bedc1e161\n060dd9b0-cd13-41b7-9e68-a09ced4b0366\n860d02d6-5721-4448-ae95-f6d25513cb59\nae48f447-0b50-4431-af7e-4a62d2a19d14\ne3f168b3-517f-48b0-bb90-bf5f595886b1\n7e2dce98-8bd2-41aa-995a-64f08c8fb267\n456dbee7-1e7c-475f-8eaf-0e1ae33d19ce\n69f4a592-508a-4f50-936e-eced9d488f2e\n077acd4d-9b3e-4a55-af30-138cc2a800c7\nd97c382b-ab68-4ce8-a459-41ae68fc0e8f\nbc4695c5-2808-4086-b855-30a3f249ba9a\n1ec3ed21-5780-48e5-a050-6271e7dde2ad\n6d62f568-8915-4fa7-afaa-801989f5d79a\nb9ec2f72-9f2b-47da-80c6-b61c85eee1b4\nfc5b6928-3894-4c3d-b619-10aceea6f82e\nf9a29588-14cc-473c-94bc-282b3cb05d93\n62ca4335-ffde-4c14-9e8b-29b4b9dc516c\n65cbcedf-c092-489c-a52c-05f9f617178f\n9f36f70c-6edb-40b4-8bff-b1b70fa5b688\n688f4231-2c14-4f05-b790-f8828c2c474c\n3ebc6fc9-fdf4-4a0b-b870-8b36856b2ca1\n5ad02c6c-9f7a-45c5-863e-41560d82f814\nffd9f0f7-ca26-4167-b25f-3e16bf43e23a\nc67fe046-e82c-4a48-8486-2874e6ae71c7\n9fda6259-b00a-494d-a9bb-358d00e24072\ne4c9c685-f430-4a51-9e3e-70315496c86d\n82a531d0-9224-47a3-9290-ee8a14ea4913\n035c4e00-094a-4852-b340-aa8a9983b424\n7aaf1c03-feaf-49c2-aa07-11f5a67bed09\nd091fab0-33ce-4bcb-ad76-cdd341395a61\n36716930-76ac-4b1b-93ff-df04a0fa5155\na26eff1e-1636-49ef-a7a4-91b8e41a8563\n28f00d1f-d572-4b09-ab03-0cd27029d389\n4fe2adf4-6dab-438a-9f1d-6a95bbacfc35\n22f92f25-8656-4a82-b2f1-805c6d540fc9\nab9d38b9-31d5-49bb-9ece-c35e5e804dae\n4416abdd-759b-47c4-afc9-9ca0e260c3c6\n42ff3762-e322-4cf1-b79e-2c931969ca26\nd29c85e7-8b45-4914-991a-675fcef67fda\n8ce8237b-f18a-497a-a71d-03345d10728b\ne810838b-f672-4022-a93e-48da854c6ef2\nf31aea99-6bcd-4d8c-9883-2d0bb14b6cc4\n9122ec88-8fb0-47b1-84b5-0d1ebe7f39fa\ndb6e1d22-1996-4448-a155-1cda6fdf46a3\n3ac98d62-5f55-4c6c-aa13-1a872e8c07b7\n1443b1bd-5add-4d72-9695-5eb6786d9224\n9a5be08a-f68a-4b75-ac12-7737c9503a3c\nf1460cb7-6411-4cec-bf19-e6e0cc620097\n1b612148-d707-4652-9e0d-218473c9c6dd\n4c9ae2de-b887-4d6c-a2f6-d0d544f33ff6\n9f5fdca3-e415-4ea4-9a01-a8783310f2c9\n4e65393b-4912-47cb-b9d0-5c010e67dac2\na1991d39-3446-49ca-a0d7-d37e5c1f07b0\n24431983-23fc-402d-9a7c-476f3dab9e3f\n11142d30-3cd8-4a94-8b6d-4723c6819c24\n1b6b4954-fdf1-47af-8cde-b0bac702b45b\n9037278a-99cc-4482-b242-d104139e3852\nb0656b1b-c6e9-49bf-a92a-babd6c0de50a\n4a8c7fe6-81bf-450f-8631-501938baf0ea\n456940c6-173c-4572-aead-fcfe5bda0d6f\n3375f851-218d-483f-80a2-cfb47f4970e1\n2575b353-e9d1-4f02-9d6a-fef0ccfc6842\nbceed0f6-704d-4e5b-becf-8fa004a7d373\n19a91a0d-fded-4e6d-a882-754706f35775\n4240a28d-9efa-4b3d-888f-2f7946019850\n407737cf-00db-4204-8474-bed5faff2217\n73c757b6-7a46-462a-8b31-bf442c520156\nfad848c5-f446-48d6-b18e-abd25f218efc\n49978572-e3d9-4cb1-8045-c98d0acbde6d\nec7e213b-d7b1-4e07-a8d5-aac2bdabc9f6\nf86d1660-028f-4dcf-87c4-bc9daddc1f8a\nc65c3f97-9463-4838-bbb8-7aa81070e8c1\n2b352e60-8267-4901-97c2-c9c735a98af1\n6326b518-c6e7-413b-b631-690aef874005\nd0d3a623-0fd7-4e35-b09d-e8acd0dc03a4\naa229e49-7403-48b3-85a0-5ef8f3047f44\n17015d9f-ec0c-4e19-ae71-e3e41b314e5b\n99e91026-77c4-4d55-b5b3-bcdf7000942b\n5c396c17-85c4-4a22-9848-943d85f6a77d\n82475fdb-35a0-4fb6-ad81-6b70e4665626\nf5fcb4ae-1a90-4526-b43a-5f0310af0be7\n8bae05be-7d60-4a2a-a735-565eedbde3a2\n81f6e656-24e8-4046-9d8f-769ea6997a0c\n5a9049c6-e1d8-4066-b0b3-34d1878ade21\nb24d9b4b-9302-42bb-8627-7c74bf377624\nd643dcfa-6e32-4ebe-b007-b1befe646ca5\nc5ec0bec-4efc-4a63-8d59-2e4d5d957107\n40783053-a7b8-41ba-a1c2-36dab38a345d\n9e96b32d-3ec1-47d8-b12e-fcf118e2ab17\n3bbe7f36-bcc9-40be-8bf9-2cd35ad1b968\nddc81657-30ac-4b87-8ab1-dd12f97df1d0\ndb06de76-908e-4bf3-ae1f-49c8e0e5d016\ncbfc6ead-dfbf-411e-9925-451c8bccbe9c\n544af052-47b1-4fce-9e8f-8d208e0f179d\ne43e2615-cf7f-4a09-97df-d93aafa81c6b\n28c189a5-41d0-44a7-9392-a0ecb5032289\n27e1a974-1e29-492c-a1c7-71e155e0df79\n4685949d-d769-44d2-8450-b6ad422beb9e\n13330120-6fad-4224-aa40-b9b648586e34\n8c6e8309-48e4-4c37-9919-b6ddf92ab8cf\nc0fb1c3b-fa69-4011-9782-a149675d9b57\n89c3f390-a86d-4e6f-9135-31808137df75\nbc34691b-350f-42c2-9986-fe02bd79f208\ncd0ea33c-24d8-4a0b-af33-032d4a4792b6\ndae320ff-4076-4e7c-8199-0d63e318e0ef\n77dbaf20-df5d-4656-a205-2a4d90b7353f\n209f35ab-f862-45a9-aaa7-88eb73edc06f\na5851601-dfaa-4557-b682-e50b158add26\n0799f177-fc00-45e7-b89c-67726503d0ad\n26df2f64-1769-4962-9469-9e7aff55d2c1\nbe6d4acc-5a1f-4051-b886-538ccdffef33\n30bab9df-9a4b-4246-b8e6-27d299413141\n289f8f04-8e92-46b4-8d02-3a60a52821db\n1619dfed-9d1d-4741-90ad-29309ff47b55\n4da7c63f-656c-4e74-8acf-ecb7f075dbbc\n455842db-f892-4887-85be-2dec0bfdfce3\n615d4a3c-5013-47fb-9d49-cf59691418a9\n2c928c66-580a-4273-a02f-148105ac3cff\n5854ab5f-9d53-4702-9179-d888e79248d7\n198c8310-5e49-4bd7-867b-f069eebcc9bb\ncd40d487-e959-4f38-91f4-3aa79f879ee3\na81f5ccd-493a-4f59-a6f1-7b8abb6891d7\nc763909d-6177-477d-96c7-af55b75495c2\n42c820f0-3edd-4d7a-a1cb-88826d1cc4a6\nf00e5ac7-928a-46d0-8f08-9ca435507e64\n04380971-aadc-4e5d-a295-b392a9b43d86\n9e9c879a-8e18-42f9-82a1-91f37a894901\n30a08aaa-a995-404b-b32b-8dea93c31898\n82ede99f-a882-40c3-b66c-2c5e35ec560f\nd457592b-81c7-47b5-bc95-e290c20d8766\nc0c6a870-479a-43e8-9cc2-e085c5d925de\n0c3d5579-b9ef-4790-ae86-7cb8498c7825\n2b3462de-cdd5-4ddd-99e8-8cc154fb17fc\n4c80408e-7371-4ac1-aff5-e801b56ff029\n0363663a-57a9-4136-a005-96f0c3179494\n36201403-4f51-4021-9ac3-58cc62cf69d4\n0e6a5354-5431-4001-8cf8-79653fbe2422\n046cf7c0-fe2a-4508-a354-09a4200f9752\n03b8a257-0f65-418c-ad70-ad2516d63205\n63754fea-ceea-494e-b553-a61b4973eec2\n1b11c0da-5648-49f8-8436-dd39b0edccd8\n8664c31d-c0a9-44a8-af53-d896aead44b4\n06accfd7-39ed-4894-87cd-e6e1ca55997c\n277cf024-d76c-4c6f-b9a0-60fb87b28675\nd8efc430-b731-4e28-9cc3-58c79e9f979a\nc53b9eb9-c17d-4020-89a2-33a0dbc1020a\n852cc6ec-861a-4130-88c7-0af098aa6302\n57084c4b-e927-4fff-bc6e-97ce3f8b0a2c\n0137d102-cf93-4d6c-94f9-992b6c994df4\na006b12d-ef86-4d0c-80e4-55ec53eb00b9\nee071aba-165a-41d0-af67-451853352ba8\n8dcabccf-ca88-4425-88ed-7eb004c88211\n962ce1df-0a20-480a-9adf-be4c3692d87b\n32659931-185b-49eb-be25-72b35dcb9da3\n06288fb7-e914-4cd0-9b23-e99db398fb3b\n1af2b033-c83b-4a28-a3bc-5de8eff32297\nd9940ce1-5259-43bd-94b4-2dfa600262c1\n49a611da-0e2f-4760-b196-7cd52461b948\n58e4a0a6-f9fd-431e-bd4b-f14f43edb1b1\nb8996c71-7690-4714-8b88-e714a1f0d30c\n1906462c-9475-42a6-9e1a-4bed59fc2250\n07f2dc8e-78b6-43e0-82f4-908f7082470c\nfc3a63b0-51b6-45c7-a151-eee7e76e5fa7\nd325262d-34b4-416c-af1b-fbd292ffd5f2\nfbe3d8e1-945c-4952-af65-da7bfdaa9429\n2c95d3e4-1efb-4c27-9827-43febccb730a\n5db5b411-de04-44c7-b29f-9acbd05d7de0\n233637cf-3435-4566-994c-2c3fe8b8c362\n613f215d-0549-41b6-b88c-4a9b51196528\ne1b18ce7-ac6e-418a-a55c-441eec9edbf2\ned2c75c0-6be1-45ab-a417-7f0b57713014\nd1393354-9821-4b0b-999d-3500461b29f2\n3d2611df-8699-4b79-bc04-d36c0f395abe\n9f33e015-de58-4cdc-b660-336e526e9bba\naa1a06d2-a3bb-47f2-8647-3b83060287ec\n936f982e-d2ab-4b10-b9b0-c95e2fdcbf59\n733da6bd-e5da-4814-8fbc-912a9c8e2a03\n26eeaa2d-d54e-4f5d-9eb1-48362b443703\nae6d0f08-5e9f-4b7e-97d2-5e67686a7307\nb0d8d73b-f90e-4fe1-9546-f0f3f44dee74\n82a72e4a-845b-45ab-b9b2-53d0a342af89\ndf05d72c-9acc-4d00-8251-d51e800f40cd\nb0b564a4-23a2-4135-a63d-29efcad23825\n525dad6e-d520-434b-93c4-28c62c8a52a1\n54a89bb2-e0c9-49fa-b60b-5f39ccb0125e\n072107f1-4e17-49fd-9bf3-867b5e07adb0\n6f8515f0-81c9-4037-a06a-abd60dea53e7\n9cf9e1ae-0b75-4485-9a53-2a5c30ee7123\n754af39c-2f9b-42d4-94c7-100be3312730\nc0e6a0c1-8ba4-4e51-97ed-88d1b5a2c779\n2093ac72-f9f6-4224-9f46-98cc2bb11350\n5d7586c1-8e57-4615-947f-7509e339cfac\n37113ab7-a2b8-4938-8be9-676addf2d4aa\n3936934c-819e-4d80-8505-05065952aca8\n75039b7e-59cf-46f6-801d-cf641e8191bb\n0cd0ec01-c851-4cad-8e3d-e1ba1ac890a3\n99fb2aba-2167-41c2-afeb-50ef29145db8\n87dd90a5-9bf1-4016-8eae-00dd02eac81a\n37b62b58-0446-4676-ad96-bd7d04cad6eb\ne0a1ff93-6d2a-4ba9-90e9-7c556275e79e\n33779d3f-16df-4235-8e55-7eacc6842476\ncb65f77f-75e6-49c0-9fb7-4c02f2558fb5\n450f09de-60c9-4030-af7e-8d711b047138\na068a29e-3de4-4f10-9d72-677c73a8fb78\n7af0fb99-f88c-4cb9-bb7f-91d9d4730a9a\n0c5250a2-90a6-4670-9de9-f7b78e4cb3b9\n1aa69947-2bab-4841-aed1-ac1e0b2d5fcd\ne09809a4-3295-416d-bec1-a85f0fedfbe1\n59a19fa8-c416-4126-be6c-faa441fee6e0\n2966161c-ca96-45e3-b55b-53d143f477d0\n784402e8-06d4-4642-843c-4f4597af92ab\n475bb976-208b-4798-8f83-6228f18309bb\n9a87ab87-b3b5-4bf6-8a70-2563998ec4f7\n4dbaca97-7b42-4b52-8533-1b201054348e\nd507e261-1df6-4e5a-8a69-cf78edbe5e27\n64f94e38-c2b9-42bb-81d1-6a990b49f283\n4868ecd8-be97-4af5-a88d-22e350012da0\n17130b74-851f-4179-a81f-dca4cea97f22\n0a7003cf-39f2-4ffc-92c8-4714405f545d\nab43e2cb-4183-4862-a164-ecc9ae37dcfc\n09d41553-f553-40f0-b5c6-3a75c7dc31a2\n34615208-79ef-40f5-99e4-333fdc256261\n992fb7c8-e92f-4f1d-89d4-7f4b0772a7fa\n7247b252-72b9-41ba-8d65-a1283b950313\n4e95d6f3-5fdd-4cd9-86a7-bb8585a4aa8d\n510a1caf-d6db-4408-bcb5-fa7f6726d6f7\nec681e45-dc71-4417-beb6-e5c684e1b2a9\n138d3682-ed00-46be-8399-dfc3ef3472ca\n65b94c2d-10d7-4fcb-b995-6dece0d57ff7\n03fdd077-6a30-41b2-8292-53b473f0859a\nf46b9e94-95e7-44b4-ae68-26f39f771e71\n1e910b6d-f267-413a-96ff-efa1dc9fd9c8\nef2f6aff-c58b-45ab-8937-3470bb6048b8\n41735d4d-69f6-483e-8c21-26808a4d8ef6\n0f892833-9baa-49c9-9b28-93423d74de01\n8cba614e-f963-4a76-b0b2-48beff83ff49\n6c146b77-fa46-471d-aa27-54de6a03715d\n624b2acd-b491-4cc7-bc07-97b674f074ec\n88bbffa7-0c81-410a-b404-9d714398651d\n0db36c65-6a08-4e12-9866-d3238d254b49\n04a42c81-2d94-4196-891d-2523c3aaf316\n3613ae56-7334-4d9e-bfca-f922fc518987\neacb07db-23dc-41d0-9dfa-ad137154179d\ncd441489-e5d4-4120-8988-9bf9fa31cf60\nfe6d0798-7e21-40f0-bed9-70e3a4254f14\nf349b310-d365-4a6d-bbbd-37b7b5c09295\na9719cc0-ffef-47c0-8ae4-13a95295d42d\n31cb0d76-b22a-41e2-9786-98bcc8b4af83\na87aaa3a-16b2-443b-b5e9-82e8c8a4cd55\n110cc5f7-4998-42ba-894b-bdaedf4ed7bb\n17c7cfb5-6a5e-4808-aff8-2aca6e3786d6\nf42d5194-e199-4333-a5f7-f5faf2f61955\n050efea3-e2a8-423b-adfa-0bb1ee0ae059\n0e096a2f-5a0c-4c00-b88f-ebce8097fcbe\na102cb96-cccc-4ac4-8262-6c69d50936cc\n71eaf25c-8331-4c29-bc2f-4ac17ccc4c1f\n2a859024-0c3d-4ca0-a10b-082aba75fc6c\nd45135ba-3e92-4288-855f-eeb35ff8ce7f\ne1e9bd72-956a-4510-af43-98c05120ebab\nacedcbb6-0c39-4b9a-b333-350b2c309435\nb395ec92-06d8-4511-ba17-ca2983ae523b\n72d31122-0f8a-4242-be01-6948844df2b5\n61205533-b232-4e4a-bbb7-560d73a467df\n1cb62c13-dccc-4e84-9b27-932d2201dc2c\nb3aa952c-45de-4377-9cc4-9b52507f7aac\nf2757f24-daeb-4771-9c08-4b03ce56a941\n08b065ab-d1a1-4f90-a141-48cae74110bb\n8db079cf-f3da-4af2-87db-b9ab73309a86\n745e196d-96a7-4a89-a57a-7c1063ffb974\n11342c54-31a9-4af3-a9b9-2bff72715bf2\ne2afdd25-0dfa-413b-a7d9-ce180d2258b2\n9fcd5deb-a6d8-43fb-aa71-244ad0fa16a1\n24559270-1b66-44b7-9afa-72cecdf824da\n9069caf2-4e8c-42e7-bb35-e7a1e97cf82b\n8c5d5930-77d2-45e8-99f9-810dc03dd4c6\n21a29a0d-e2c1-4845-862b-5567270c2576\nd0f0f604-0850-497d-9ba9-425012a3b3b3\n92186950-0903-4296-b771-a6c3830ef6f8\nabd063cf-bc3b-43cb-9f84-4954274e287f\n4f9aa07f-6fc9-40f4-8100-35a8f58f9cc6\nd1afaedf-72bd-4e2f-9853-84a59a6d6046\nd2ad3ca9-7165-480f-bdec-bf572872234c\nba51c901-8c99-4c29-adce-c721a5e3156a\n00dde34e-2ee7-45f0-9bd8-2d7998eecaa8\nacae7e6d-2cab-4b9c-a3e0-448838f1164d\n72e816dd-64dd-45eb-96be-61cf04e5aebc\n80346295-1a2f-4356-8739-d7e37de1b915\n110fb340-e790-4ec7-b21b-0e306ad1b31c\nd2158a95-9348-4559-9e2b-7f593332c3f1\ned91584e-e96b-48e3-b7e0-b7d867929c7a\nfb519f98-b6af-440a-8ed2-99cb17095a15\n1135a58e-2eee-45da-b864-4d0bcc9de0aa\n3517162f-a553-4d8b-9a14-f05aefb2dc5c\nd5aff42f-3e99-4803-b689-a54e7e78430d\nb1b3d4b8-8110-47a9-a381-1e7cbacb67e2\n9448c380-c2c4-48ce-b340-ca80dc7f04e3\nc10a22b9-52af-403a-bf07-a38ef0d7a193\n70d133a4-2b52-4165-b2a0-acf6166e5b1d\n69248a82-27da-4e79-ab84-22d6580dc9e6\n8cdadcfd-0e6b-4989-85d1-029db1299c43\n448c0297-01ea-4c2f-8b6b-066ca19156d0\nd301c2d1-5d60-487f-95d4-9b61a945430f\n3b67c30f-d5cb-406d-88d7-b8f71d283a95\n8a4b69b3-df87-464a-a340-f0209856a3b1\n42d4f8b2-3e27-4178-8acb-656ff914527a\n648949d5-fecf-4635-85bc-dd309677e3c2\n94249018-3d99-4d4f-ba04-5fec453410d7\n4d016386-2c41-4c40-b98c-ecce27756714\n9df9d76c-f441-4ecc-b9a7-805704b6d2f6\nf3927b03-d5db-4fca-ad52-cf31dc628a44\ne8261892-56f3-439a-bcf8-42960a66fbae\n1dd164c6-5aef-40d8-9ef4-d17d37755a2c\n3d74867f-0411-4ce1-97da-550f3a0dc583\n158a9b67-35fb-4fe4-b9d0-d5d23a86d3f9\n55b251ba-168f-46dc-8953-f4c1a90d169a\n60def65c-82a2-4b57-9c3e-8a1d75fb93e5\nfc15513a-b33d-416d-831f-a24e31a67015\nade40210-bb2d-4594-b14c-d622c5d115a9\n74fafbbb-c00e-4918-98f6-4f8e04576221\nfd5d0b2e-f7a7-4e55-98e1-24128172e5a4\n9e9ed4f7-705f-49db-b6de-53f62dc3d59b\na1430227-6f96-4db5-95eb-54c602889f30\n1c4dac7e-baad-4a27-b5b5-debf303db7a7\n442bf8d3-5229-4b62-85be-0b478e142e87\nf2af567c-dc54-423c-916f-51dcc2ba8624\n2f040cce-2999-4b99-a755-61a21b303aa1\n39e1f72d-1051-4809-a626-77e422fbeab2\n62151243-9aed-42c3-96a4-d0614b50f6b8\n48143227-64a0-4c26-a528-d90df810da61\naa86d2f7-3a2a-480d-884d-31c139f19a12\ndb47f7fd-aed3-4e6a-8f18-169f5a6cba69\n3cfaf886-dec4-4180-83cd-b49f12a28be8\n0122fcf9-c4db-4e0f-a07d-4ee78257867d\n11ec38e6-e31b-4a29-b460-1f838ccaa047\n79185455-8373-43df-bff7-2951742201db\n7c24f509-597b-45ea-9ffc-48367afd9a95\n59505b92-e799-4ecb-b2fb-38d24c1f5953\ne5f5a750-168b-415a-bd2d-2cb30786026f\n6918e7ea-ebde-47e3-96e2-445a378863a2\n91cc632c-d60b-4a13-ac22-361c24fb9612\nf6210c4a-68ab-4d14-b49d-acf08892cb88\nc90ddc13-9465-4466-ad68-332cfb5cfb2a\nfd2ded42-9d9c-4672-91f0-abaa92da388f\nd0a349f3-01f2-4807-8391-a8d2510da073\n0129496e-1a75-4169-97ef-d2e0f997d786\n36987963-152d-475b-81b3-2680f57a3668\n9c317ebd-9d71-43cf-beb7-a5dc5669fd19\n9d7ad290-8533-4789-b40b-caa531fa609d\ne60dd8b8-d856-4212-88e9-2ab4cef3ef4c\n76185877-6321-4773-a42f-47347ba094d2\n4f2cc780-7a3c-4b10-aaa3-0b551fae424d\n229baab0-0f83-4519-99a0-c0a651e71bb8\nf3b05545-1948-4f66-863b-28246b2b0694\n10d13f5c-c074-4df3-ae92-701928c0368b\ncac8cfe4-cdb9-46c0-90d3-4119b979b172\ncd06df9d-79fa-4e01-813d-620d90d459e1\nf269cb70-c092-4aa7-9e3c-848f6d106fda\n123a48f7-d273-4a95-89a6-0120082a15e6\nbd22fc27-5658-4912-bd2b-9333de57c507\n831e8cfd-0876-490a-b222-4c0a13bb49b5\n46ac658e-486d-4833-a71b-efabd4bd53dd\naad98a49-ed12-4101-9396-36c81417f220\n07329730-3d88-4c51-951c-c5dec219c7d9\n376275c7-ee28-43ea-8b4a-92f9d1b5234a\nc310c386-cf4b-4a79-8d0b-468c9d11aa45\n1548c851-b18b-4ae3-a736-52cb8c679443\n75d9f5c5-86cb-4701-8bf7-429d07fb2c5a\n77cfeb84-ac04-41cd-b135-134d189da46b\n363b435f-2dc2-4893-a749-2a8800523d89\n8d70aa24-5685-42b3-8f82-46f2a1ddfc41\n46e9bf26-7642-44e4-be4f-992cbe888d64\n386558db-1749-47fd-a56a-9615b269de59\n49a7557c-9759-456f-9051-0cdf755634a5\na041c3a9-511c-4e0b-b09b-7b083249cd01\n213de020-0bfa-4e8d-800f-b0e02d03f635\n2964d458-6fd0-4cd5-ac4e-1c9112af8abf\n1affeca3-bb50-4930-bf32-23f77b0c202c\n13b255ac-f83d-41ab-a8d7-1ceb4e4d0398\n33fc82dd-98a0-4f5f-88e4-4587101abdfe\nbff29e3c-7d2f-4c79-a263-707c1ebd6151\nc560d0e8-902d-416e-92d2-59919090837b\n4297f8fd-074c-415d-874e-bd26f71ccbe7\n853e37ee-b998-4936-b22a-9b6ff4972a87\nf5083c4e-21d6-44f5-8138-59ed372abc26\n25fe91ee-ebd5-46ff-be13-90328f62e3b7\ndb7ccbb4-5196-48d6-a70a-f959109a4af9\nadeb22ba-94be-4a89-9f5b-d78fe0a0f237\n7fb6cba9-73f8-4421-8b68-dee7ae4bf079\n55abc2ad-0bc1-40b8-9725-3bdba338a4e0\n88817742-2677-410f-acef-46783b2b96e6\n75329953-a9e0-4f78-81bb-c573c3836d31\nefb6ba24-e9e2-4152-82f4-0f1699b2d8b8\n6d13a711-4abc-44a6-86db-89fee61cc4fd\nf674819d-5424-4fa0-b8da-9ac5492e0793\n6f34ce7d-4c06-4836-91d4-3b2934423f68\n77fce2cf-eb6e-432f-a4f5-c298d94ec5b3\nb858fe15-a4b3-4edd-9d47-eeaa2a4c8f9b\nc9f1ebda-1e0c-49e8-856b-4af64b182fa9\n54fe38c7-19d5-4ed2-847b-b5c19aa60d57\n295132cd-63b5-43d6-a029-f738d9378bcb\n2a2c88ca-5e01-44f2-8f0a-dec412bd1ceb\n56bc54e7-38ef-4e80-a0e7-9c3fb47acba7\n32c2f2b7-88b7-4669-9ae3-2ed73c87de05\n5ff5f000-b4fe-4170-90b8-01f3561ac99e\n6ab4fe19-37f4-4713-b237-12bfb4250fc0\ncb042b29-0bb2-4ed9-a075-eea32300c37c\n00947742-1c1c-41c5-aa09-92ac6a899c80\nba42213e-296c-486c-91ed-567199add373\nc6995d82-31c6-4a9a-9bc8-1f5fe8f45515\n7705bdf7-cbae-48eb-96c4-95f96430f121\n7d20ba31-add6-4136-8550-b44a63079a40\nc6319749-ce2c-4cc7-ba0e-748b6f003039\nde3a541f-e08c-48fd-a0f0-ac3c8e4dfc73\n2e4548b6-3320-4667-b533-baa66178b722\n1dbdac16-1dfe-4bd0-99e1-6858de43ec83\n1423a41f-609c-47eb-821d-a3dea2a9b554\n761ed2f3-05af-4c16-b3f7-73d33df6227b\n9ac704d4-6477-40c3-a1e8-a6da7d607054\n66cac18c-c032-4fc0-ad77-a3b0c0864fef\n60cbcde2-3d5b-4bbb-9fc4-58f20e83624e\n94175b04-34e0-46db-8e68-1a213664b60d\nf3c1dd12-3f7b-4480-b12e-0abb25a8b969\n8d8e7953-35eb-41e8-bf4a-dbf1921f2719\n541b0edb-556a-4118-879c-a1f029504ff2\n1f36d854-2e5f-47b0-a6ef-ed449c00bab2\n66315c9d-588d-4009-845f-923e17942d20\nc05c738c-4b4b-4826-a1f4-bee90938bf10\nc4c1d911-47fa-4a8d-b780-1789ade2bfab\na11f749b-6e81-4a5b-8c2d-ebdadbb02e47\n9cdc8712-61ec-4665-a8c0-71ea52343f9e\n432be3c5-fb59-4421-9a58-ad942501d419\nef35aa67-2aa1-47dc-af9c-d3c3e6009312\nf3711856-18ce-4263-8118-3c12b2e58b2d\ne2d27f52-5468-4ff4-9c3e-3391b768b4b1\n151e112b-ee38-425d-9632-7106370f1018\n0d055298-035d-4a9c-b1a4-808f0b94ca47\n6e6e2cf7-0a1c-4bbd-b229-4e793620a28c\n7403b03e-66a0-4a52-95ab-4b066462dc40\nfd9eb08f-7f43-4e92-bd92-672dd3e9d357\n7661bd58-895e-4167-a172-fb15f1ef4fd6\n4a94f666-1e57-423e-948c-0de8c2bde256\nda46c136-d184-4d30-9c6e-cf8c97534f3c\n2221faf7-2e86-4d73-a41c-c0b51c0b30f9\nf768ca58-dc0a-4452-9e36-9336124e114b\nc20c7c64-fbf0-4569-9efb-b19b5c37a723\n4107cd05-146e-4fee-867d-387c81e897e6\nc15f3b77-6586-47b1-bd41-82fdb315a5a2\nf324c507-bb96-46fe-be30-5cbf6b845570\n2d9e44ee-237a-4186-acb5-a53567ba1ce5\n6fed4b4f-9732-42e6-be46-097452f414e8\nd7ba774c-6497-481b-8461-e8e68ebba84c\ne685e9c0-4cfb-4cfa-aba8-d605239a8cc4\nc4ebd389-5931-4f92-a700-080cf1a74826\n0e4d58b5-07af-4276-9c94-597579c59fb0\nd8b423a2-3d2a-4342-85dd-5b7d0167fc0a\nc282ed71-42bb-4396-b21a-152ab58c9ab0\n43a228ce-6d3c-4a32-a45b-164437ba150b\na3947deb-df27-4588-b35d-537cb2896fd8\nfa90c6ca-2d38-4252-ac36-476847e3c92d\nea3674d8-7774-4729-a89b-21da708a40fd\n2e4a3867-9647-4344-90d0-31c3495309fa\n4ab0760b-bc85-4893-93a3-02387aee6bbc\n0e6d25d2-edaa-4bb3-90cf-600c2899949e\n4f1e1961-4825-4df6-b217-64e9eda7beb0\n79e01813-ba6b-4d74-86d8-26495acc5aba\nd73cec32-ae15-4d6b-8ab6-10ea95190da4\n5002fdc9-48e9-4bd4-940c-b0bc3dd5d3e9\n8baa683a-7bc0-4d6d-8513-aef9ad4a86cd\n7744f35a-801f-4b2d-aba2-7418e3761749\ne80fa23c-8a75-42da-b8c1-16a9cd8b8951\n4e3941cb-6666-4011-98a0-df5201b77709\n6d190711-7d17-434d-893b-69e38882d1ba\nb9ffcd65-98f6-46f6-a831-a9f064752212\n0d64a823-ae06-49ae-ad16-9906fd9184ae\n94158994-78a3-4300-9f70-2e0368ee4feb\nb57e4e27-2e14-4601-ba29-9d85084fc908\n35479232-dfa6-4533-9605-12363dfc4de2\n00dab50d-95d6-4220-947e-31975c0d8404\n5b88a785-7b74-4241-befd-90d7ac278dd7\n9f5b2fb0-cbeb-43cc-8a17-56c5c1bbeafb\nc7eb369f-2f4c-4a2c-b853-1b1817aa1011\nec24f42d-f090-48c7-950f-0f6a16714d09\n4aade078-54b8-4bba-9add-6e74c4a89803\n706da40e-0c72-4ae7-b15f-70e995c257b2\n85f41918-e029-4e3a-ab40-1649642ef021\nad11252d-3a98-42bc-b38e-b5f0e476f363\naa0c182d-1534-4610-ab8a-096d73407116\nf65bf281-156d-48b7-87ca-51b92e3e2f3b\na40b799f-82ae-48fa-8403-ba7511448668\nbe595f13-d7ec-4e85-a194-6659a74e2736\n192d07a0-60b8-4bcb-bd08-33a645637b95\n72e757dc-c0d6-41bf-ac43-9d05edc70933\n7926ced6-c799-4710-b937-1e7afc6418b9\n13cc8838-d793-4d50-b321-b9c5fa298eab\nddd4dab6-bfd3-4d24-880b-7cc75bf31238\n30eb70c3-59eb-4ea3-83d0-05b1ec842642\neb0ad8f5-ac47-47cf-b6c0-d7c85f806fe8\n7c8ef81c-9e46-432b-9e7e-f27b7a2f42ad\n543369e2-cb41-46d5-99a7-89d0699a080e\n4769b0ac-33d7-43e9-b7e5-9234324f90e9\n2acc5a50-bb96-4579-b33e-ca0b6beeaab3\n8e9b83b4-e2ad-480c-8801-8193b4f495d4\ne9c85603-7796-4d68-9cca-cf9fae71daaf\nfb2f478e-9f58-43c5-9d77-de248ca2ddb0\n6e12e941-02fc-459b-bfd2-df7b227a2854\neb243421-1155-4d4d-b21d-d6f97afe119e\nad6d8ffd-e345-476d-be38-1681e005a3a6\n3a7b27fd-fded-4f96-a7e7-4810513d5fab\ne9c47035-6dda-4239-aebf-42fb5d69b942\n6536155d-f7ca-462d-9e79-72cdb8517125\nebf964f2-d941-483c-8a6c-7d79d86dacc0\n5b29f3e2-caeb-4ac1-b005-9acdb570a474\nf20404a5-68bc-4463-9d93-df1634a5db53\nda3c5e03-3766-420f-a10b-1369191a83d7\n76d183c8-ad4d-4f2d-b0ce-76355b1bffc9\n9fa9b590-3a64-4f87-8716-0517a0d6cc93\n6139f1d1-c858-4494-835e-1887524a1cec\n826a1a46-e3bf-440d-a3d5-b60d2a9242e0\n6ccf6056-92e0-4612-8839-ee4c04b1f8fe\n3a3ade1d-7ca8-4771-ac13-08fefdda0393\n38c36c21-da21-4e38-b98b-35d3fd12ff8d\n26e306c9-d833-4eea-b625-36184c1e880c\n995bf449-7186-41c0-8867-b2e7579541f9\ne1fb3c76-a333-42a1-887d-c5602c5fb399\ne9bd8855-de78-4532-bf0e-ce94b4420cd2\n8070da4b-46f9-4b51-842d-1f5bcbe0cffd\n1f2274d5-98b4-4b3b-961e-7f7b5a1c71f7\n8a589cb3-687f-4a0d-b4e5-a5f02612502b\n5fe33edc-a7f6-428e-981c-386f64161c52\n6076d2dd-6084-4240-b569-a85879563701\n678af534-53b9-417c-8b71-62a930503404\n642ac0ad-8991-4e3c-a894-8fd85ecbc3df\nfc0cccbd-aac0-4e9f-ad15-8f36b4da5f31\n74c02936-ad3d-4be8-a8f3-d4348f65ad70\n34e2ef7e-d197-43bd-aac2-424d8104c718\n5c3a3260-748b-431b-875c-f619e033b049\n0367b749-760e-469c-97e8-0222bc97f242\n4fb39be4-57d8-41d8-9994-db4c22064400\nfda8755a-6cfb-4f1c-822d-b1017cdef7c0\nc0800055-3b29-48d7-836f-59be21111afa\n1ab9862b-7ed3-48ed-ade1-b394e74033bf\n0b015e4d-7733-4261-aadb-5d41cd630edb\nc293c10f-4943-459f-8753-3144fb39a0ba\n3315e42b-7a1d-492b-b3ba-ef21f5a3129f\n257b924d-65c1-45b2-bbe0-ae7a896476b4\nc821f6c3-b766-41d6-940f-78d72bca1667\nd1115523-7bd7-4b77-a9b5-084ba9b94b39\n9d501a89-56ef-44c6-8762-15a88afdafb3\n84bd73fc-0311-4684-8412-37e980b21490\n1053de87-e5b9-4bc4-8b07-2d3fb5ce9399\nf3146a2a-a717-4ffc-9823-3452b353cee3\nba043a2d-ae7a-4e27-b8b5-8e5d8af7730b\nd1908fe7-5fb2-46a6-bf39-b5cf000bb426\n4ea170ed-262f-4fd6-b3bc-23867ec6057f\nd62550d5-cd05-43f4-ba1f-9f32efc014bd\nb6b5e08e-3497-485b-aa5b-abc61f95a707\n75339d8c-281b-469a-b334-012cf4a56467\n83acf5d9-8375-45bb-905c-337221beb72b\n6411ac49-e453-4515-9763-7e0672fe81d8\n1bfe3bed-544f-49b4-878b-2092d52590fe\n1e44e106-9280-464e-a552-a9208bdf903c\ne86788b8-6829-46a3-9d3c-f6a50b420e4a\nf614451f-e8e6-4d41-be3f-4455c1ec9ca2\ndd914ef3-9114-41a6-b429-f6e1f85dd1b1\n919a4dd0-652e-418f-a9f4-3caa97d60cc1\nd1f8417b-106a-44e6-a982-fd9d40e22042\n365a1eb5-2c36-43b5-82e9-066b604d043c\nfbcd908e-7864-4660-ae80-c32f985cef81\n6d013a1a-c93c-434b-99c1-e9e46c5c8e92\nca7bc862-19a8-43d2-a92b-9ca2162b55cb\n6970daeb-a718-4f00-a8d0-62a317aee5f3\n2111bc32-0d66-4b77-a51d-6256bbd53b16\n7e9cd18b-cf15-4aec-a49a-f456df585d8b\n15cacfb5-c9a7-4fed-bed8-d4ae393c0065\nde8a2b57-ff26-476c-8815-64e30225ec53\nb7e734f1-6184-4dca-94f6-acc14a928c25\n0a1ffdc3-9916-40c6-a299-453c288dc6a6\nda905bda-b827-4b5e-bb4f-8c29d2a625b1\n8beb4ade-ce67-49ec-8a77-fa356db5865c\n73b09438-195d-4e8d-adfd-95d45938afb1\nbf3897c7-acdb-462a-9c9e-7142dc0eb41c\na5b08c6e-891d-4d49-8d2a-f3982ad6635e\n430e0564-2b37-44f3-8788-cc513540da8f\naa0a03c5-047b-4d60-b38a-e39fd6006b1f\nf6ed5694-b760-403f-aae9-145ee0aa3083\nf4fa7921-f6db-43c7-b6c3-ac7639baf1c0\nf902b2d0-d5ae-45f4-b6a9-76c314faf286\na6cae441-5238-4f22-9478-3b99528fc620\n0a241445-0c71-47dd-a84f-54741e4622bf\nf85b18ac-26e0-4746-912c-003a0351b859\n8781e86c-5586-4fc2-b90c-56933d1ee4a8\n21e26261-5a26-49e7-b469-58e85eda9f98\n2dceb087-1f8b-475e-ac5a-87c3fca54d8e\n1f21477a-7ed2-4ec5-9dd9-3784added8b7\nbeba8873-5e6d-45be-997e-9356dca52b35\nfc4e2805-0246-4451-a2a8-2e8ac9207a51\n7789dd45-0678-40e9-84b1-8cd74b4c9311\n76557f9c-2638-4785-ad2e-14f091596e65\n704714a9-4507-4162-95e4-5af4e1f5c4c7\n4615dc96-72e1-4501-a93b-335d015826c8\nc8dc11a4-97c3-443e-b932-c94599689d1a\n52412cec-fb35-4d1d-b604-c8e7993d54bb\nfff5f046-d881-45fd-a625-06dbb97cd7c8\n33ee8c23-56d0-45bc-952c-fbfeb285364e\n954c5ffe-e5d5-4424-9da8-7140f68eb3c5\n956c7145-fd5d-4191-8d74-35c1664dc6b3\n8ae0ae2f-43d4-48a0-a00e-a521ed4cac67\ne56ca4cd-70c8-4d51-a8cd-45923d9dd731\n9d3d87f3-05df-43c3-81eb-464aaa0fbc37\n94fbd6ea-9e6c-4647-9396-b1f0abb1fb92\n864c9584-407f-428e-9cdc-7b509ae3f857\n904e3386-de8e-4a3e-8b71-8b108be3ea24\na048dc32-78a3-41b1-b4f6-a66af089aa3b\n77819273-78ff-42ac-8dfc-7ef8f678ea3e\n8959431f-5dc7-4724-8fe3-c6c8e5c260f4\n77a6e877-bc71-486e-baef-1dfada5c9d9b\ncff8bf70-3941-4390-b037-a12d9e02f2f7\nc2f833c9-8298-433c-a1c8-4e287abdd4ce\n6ec221c4-7fe1-4a3c-9088-5475cb60c87b\n01d0bd4d-a484-495c-8f55-c8cb3040100e\nc1ff1584-d5b2-47c0-867a-abb0b50d008a\n7bff1466-8ab4-4fb8-8735-8004c943436b\n310b3f5f-141e-4934-9371-4781d4b05e0c\n0259eefd-7ed7-40aa-a0b6-d51a9f549d06\n69658ddd-c455-4fcd-97ab-0aeeea0614db\nd0fa6e5b-d168-42ab-96ed-29cb254622a6\n2b564577-a84b-4ef6-b390-90a51a14f470\n5014988e-80c6-485e-a69c-661b87fe5f74\nfe4a73e6-202e-46b7-b8e5-0bfb9ce4a849\nc4876224-35e8-4e66-bee3-3180708932c4\ne8c5d74d-1c4e-49c0-8376-9ebdb1db7395\n00cb5891-4098-49ea-8a50-f63b8c3ac24d\nc77d3770-22cb-4dc5-b0ce-64d620e71a6a\n3c42c6db-ecf1-4d9c-a983-b97d3f4c3b76\n84868970-202a-4f40-ba65-fbc8c0caa9f0\ne805bb2a-8f68-46a4-9e99-31fa8d21b0b6\nc59757c6-3f10-487a-b1d9-77c3f8905058\n24fe3f14-eee4-4eb3-9259-6a64c69944bb\n3923191b-3ca5-4cbf-b012-c9325db5ac58\na19360df-6bb5-414d-8d51-6ee419c2d0d8\n3e52b372-728a-4ea0-81d0-c2dcb4bdf3f8\n4539f0b2-ee11-4384-b25c-0ee18e37014c\n19bfc578-6413-48fd-b8fd-fb169d7be36f\n5fc98360-4d0f-47b5-bd0d-04e4e3e1eb26\n44c0fb7c-3026-406b-880a-cb4c9d9e9b11\n4d2b4c5a-c4b4-45c8-b227-eea4751faa0e\naef9474e-c8a3-42f5-8243-90e2ae07154c\nc44289de-2e28-4e8c-a50c-94b4ffc0a3ab\n6b343c03-13b2-4de9-8b03-71a092389c9d\nfe18f067-8f7d-481c-9028-6dc25be01a75\nffe0cbec-cd74-4d99-9b42-0b0011884d64\ncf180fa6-e256-4dd0-9a9c-2909fafba774\nf70a0b61-6d7d-455e-aaf8-1b4b29723ff9\n5e09206f-3d0e-44ed-b867-89d3f442a9c5\n0b51a42f-d808-4e95-bfe3-56aa24241d49\nab65f574-c2e3-41c6-aacb-52c62fd3a9fc\neec2b8dc-2063-4f62-8faa-6a3877aed42e\nf4fa595a-5eaf-4866-9f10-98eac09eeb57\n9d62d99e-ba6f-40d8-b1b2-336c0804956f\n4ad98684-6285-427c-a90b-227e70e50e56\n4dd30e2a-4b3d-457e-8d0e-8419245e5b4f\na9043dc6-f040-4019-9dd2-89740d351ca8\ne2dad074-f2bb-4eba-b4a0-c87c9a8004b2\n57fdd155-0d44-406e-8a9b-72e78c7fe092\n36086f3b-1966-4b1a-8eec-5f0b8ad6aacc\n7a3507c9-853b-4972-836f-af4523d9db03\nbf45e027-1607-4a2f-9ba3-4a09c4e36f4b\nd18b204f-0577-44de-90d6-c227f33db8ad\n4d6f99ef-ea28-4e57-8cb6-e25f9769a969\nadbf9962-8380-4b99-be3d-0e9101319593\n2004b6d2-0c7b-46ca-aad0-9b6ab650c1aa\n89f1dc83-62bb-4312-ba69-2b41f09be2ce\ne7326185-5e3f-481d-ad29-5b0cf82101e9\nf226e351-bc3b-4bac-b595-3772ba405848\n2aa24f75-c7db-40fa-9667-8758892435bd\n818bb52b-d619-4299-a729-6c62d6e31b53\nc634f322-a59b-450f-a21e-9d721b347d8c\n259321b9-14d1-4f70-a32e-e2a9c0cb4440\n43c9c82b-7fee-4767-b8ad-6c1c86250b16\nc9a64999-d452-41f1-93a5-86f51db3fbcf\n20a6130d-cde1-431f-8c80-db9e56949491\n6a1fe48f-4883-4988-b10f-d85f24cee585\n8ddad32b-755a-43d1-a047-5ddf07025db2\nf8728732-0005-4951-8b6f-819f69fd46bf\n10b46985-2891-42e2-ab89-1a651528f30f\n92ff5433-78f0-4460-9b9b-52273ded15f1\nfc9abaf1-b8ea-4c00-ba7c-243f3bd6b57c\n9c746d12-2917-4b86-8a42-b4403c19df2f\n84d62c22-3b7e-4529-ad2b-c134494b72bc\n21489699-822d-4101-8885-92a63d6f0906\nb758d690-1d5e-4122-a371-945cfe6ae58a\n7610c789-305a-4c02-8c2c-186a547d4cf3\n75236357-65b2-4d00-af08-3c95e51a6857\ncc0eba83-c7cd-4a0d-94a6-323fa2a872b7\n025b1732-2714-4ca2-a3e2-9a10625745ce\n801f8166-804d-47f7-a7ae-ca9ed594933b\n3a3d8cc4-d006-467f-848b-7c02153fd69b\n901973a1-f7e4-4751-9450-e7ec19fa6b74\n3a7c0db8-4e5c-40fd-b952-713d275991ae\n0f32435f-d5c6-4a10-a81b-54cac968e81f\n6b3e3346-f2c7-4526-a179-eb18803a07b0\nad348c65-bb39-4c83-bea9-0ac482ea85c0\ncb44f5f4-9218-4919-af12-953770002b1b\n312af3c8-616d-4d76-ab01-215b283702c4\n57f860c3-be30-4368-b7ec-685936ff4251\n7a472ba5-4d38-45ad-810e-c98410eda8af\n97f1b1c2-e98a-4bc8-84a0-257ecf79fc7a\n69bf26d5-8145-4413-9418-f314ad05c625\n9470b606-76e4-490a-be4e-e323e63b2934\n065d269f-968c-4d04-b341-73f84b02af0c\ne935af75-a97f-48dd-a7d5-79c3ae3442cc\nd73c35fb-6d60-4ef3-a34c-02ce8cdf7d09\n8b722345-733f-4097-98da-1a490b569317\ncba940bb-e0fe-4e46-bd9e-a9a3f94c9d7c\nf5a1c9a6-e447-435a-b644-f96fd6d175df\n6a73a9b9-a10a-4e38-a1b5-58610025c3bd\n8c0035bd-3899-4994-839e-69f3f922f10a\n1ed2d720-5f22-4963-a6d3-bb248daa3459\n6877a2a1-6fe3-4df5-9b0d-933cb2ce4379\nc47c221b-dc7e-4072-a313-f86e8c445151\n4a329b72-9696-4287-992b-70ff4989dbb2\nd4b2bbe0-cf62-4c89-8806-2a6f8f0e3060\n8dee4ed5-6d87-40bd-bda2-dbb965c785d2\n8f6480dc-43b5-4027-a11c-340acd5d7c51\n80ff8d1c-80ce-45aa-86f5-e2a6f7098257\n554be057-7eb8-4506-ba87-c787f16308f1\n0da2fd0b-2420-4cfb-a160-3d71d9317404\n666b2f97-1528-49cb-962d-b02abf9766b6\n695ef1f9-3ae3-4fa7-ba8a-cec7966fcd41\nf61467e4-9a62-4044-9856-fd1d1f5bcbe7\nf5175497-950d-442e-b650-a02f212997d9\n90524d35-05c9-4716-8989-917f0216eebe\n6be4e74c-4d17-456b-90bb-7c1018131522\n7fd9324a-1468-4cad-ba05-0b93c1504022\n5dd437e9-8255-48ba-b59e-a52f87189941\n1edb504d-7678-4040-a123-8a7170d028e2\n5108abdb-43cc-42ae-95a9-c7c785090f00\n7d39a121-bd33-4d85-9604-dfa295bdac6b\nf92c6a7b-9921-4353-96e0-6c58d85190f8\nd470bebe-421a-4ca1-9354-4c22c42fff34\n6bee3202-dfc5-4d8a-8df3-2cc6a88e8872\n68d6f652-cb42-4eb0-8bb9-1b86b3705da7\nd3ed0afc-4771-45cc-a913-e6a30504b815\n09f77af3-0c13-4c20-91cb-992caafdcf5e\n941a0be4-b741-41b4-8d8a-26505c0e405f\n379d92ca-b966-40bf-b54d-f8b22f6ae86e\n1f0776d1-bbbb-41f6-8d79-9ca3eed6b947\n5ac75419-f235-4146-aa7b-e905fdd5a161\n70701eed-5f10-4f44-b71e-25aa0935b337\n58f77562-1d9f-42ca-8a5a-805dcab25344\neac0db0c-0c5a-4649-909e-17efe8a3163b\nc3f77983-b0a8-4f9e-ae90-b4dbf8c5f94f\n9e4bfe87-6534-4ee3-b115-0fe71fcfe033\n5d431ab7-3292-4616-bc9a-9f3cd3f5ee44\nce180762-20b6-4e17-8e40-fb95489c48d6\n59cdc6b2-b055-4a62-a08f-fab5a866f52e\n5e130f6e-ec88-4248-ad2e-82a0bf1f25e3\na5d0caed-a13a-468b-858f-74b31d682142\n894797c7-0a73-4587-be44-9dee03b0f821\ne5ede4d2-771e-4b55-890f-5f95e18d9f4c\n9580e791-d239-4fd6-b978-e58fa9a5ecf9\n30de89ce-32d5-44b2-b577-5b85da7ecc2d\n86df9dc9-5003-42d0-9d23-0e223218f075\nb3ebfb2d-c81d-40c3-b1c7-3b8d37e23a9b\n15c3faec-efb8-47ff-b73f-40424afff7c8\n38d634b8-f8b6-4028-8645-9b5e845ab10d\ne0f3e24b-8f61-4e15-a687-0b696c0fd62d\n351a6c1b-aed9-497e-99ed-11a47a359b87\n5b5b9361-fd8f-4066-99ab-7d898d2d73a5\nef1c38f2-f1bf-4388-b95f-287900d8accd\n18e0f2c2-f1b0-46f1-97e8-2179524a12b9\nacb451c7-3670-4e0e-93c2-f934920537f9\n0b19cca5-46e2-4ead-ba09-cb7866acb2a2\nad5c4303-4ede-4076-9927-d234ba302923\ncf1aba22-27bf-4a20-9260-e511a8d49ac6\n928451fd-5623-447d-a47a-471c56051973\n6b3775d1-fd67-4498-b4dd-06970f6ca083\nb9136c0d-111b-4971-8af4-27f0e0663b47\n70129422-01f1-4d47-b7cf-2bc3d84d7609\nf7d77484-dfd3-4e48-b764-9a502be535f5\n96e4a0ce-8d21-4be3-b92e-ad07864010c9\nc52c0757-aaab-4f21-a250-dbe7bc35821a\ne1b55cf5-ead2-4617-bcc6-976e3543068a\nae88bdcf-ed3c-4582-b0f9-3dacf8db1d0d\n57c47c43-6c42-4e4c-a4ba-4acd4b7e596c\n71111f09-7cb6-4ea9-b978-68e9253bc156\n7572f7b0-782b-4ce7-a0d3-5d038827e86d\n4735f77a-743b-4e7a-a331-e65222369f56\n41330fc5-339d-4cbb-8de0-630df86870e6\ne2601752-0320-4855-bd75-df59285d1b3b\n3468c474-ac97-4205-b66b-48b8d67d335b\n9b70c1d3-b006-4708-9a85-50d8033e2107\n18b2367c-b911-4e1d-9c67-279f44b5e03a\n5726870e-e94c-44eb-99a5-20e50f3b0b76\n9a3176b4-1c59-4c81-b443-3ceb9cb7bf97\n8a679c43-35cd-412f-9aa6-290b5c81b678\n03637b2e-f3b0-4b05-8aa9-37d0d0b51595\n4f80dc60-03dd-4aae-885f-58c69403d494\nb5892de6-12ed-423e-945d-05eb5eb27de0\n6059b98e-7f77-4f63-9816-1e8ab6999233\n6300ed2a-0d8a-4705-a8ec-2b268c5e9218\n02ec63e3-0f12-4c88-9151-c719c914284a\nd8c5bd37-be91-40cd-a99e-36b10d0e79ef\n9d3841c8-4480-430d-8864-4ea983864675\n37fb625a-7f9e-4cc7-ae05-b574e0b997a6\nc6ae5327-d1c1-409c-a08b-7d0433d328ab\nc5f7f622-3948-4d32-ab4b-4d12567f0c87\na4e2bfe5-4628-45c1-a74a-cd3ea555cc06\ndfb8f278-8fb3-4b00-8725-7bfe1b9d112b\nf49b00fc-e933-42d6-86c2-34e23e0c22d1\n822dcb17-c439-45c1-be4e-16be3c4f7f3a\n971866f9-9f01-446e-9485-0f9e1e4b9085\nd0e25d0e-8b8a-4c7e-8fab-228e87984c58\n46fad25e-0a74-4cb7-bab5-944292e28f57\nf82d6651-6009-4a7f-907d-00b20df03a3b\n81d65511-4e16-49b5-889a-6dff8b0c43fa\n62fee5db-d2bc-4e55-95bf-1ad72f9dea11\n6a6f780c-0027-445c-a573-cf3260114062\n3d5ca243-c43c-4ef5-98fc-d9b685fb5940\n4902dc8d-1991-4a82-bc6f-b43d9195b65c\nb6c293b0-d1cc-476c-85ee-7a552843e88b\ncb94abea-1518-4d6f-ae31-8a80d7beb206\n3a2c9227-cbfd-444b-8c0b-c797cc73ff20\n9d3934d0-c5d7-4d7f-be3f-3d01c30391c5\n00af94ec-33bd-4ac7-80b5-3dea6e95b0ac\nbea6961b-9145-42a7-9445-ba0f2eaae1a2\n4a59bd38-ec62-4d91-96ef-a616458e7200\na856b7d2-86ee-442d-b7af-e5ace3211c33\n2c25f2fd-d898-4cef-8f14-ecc2b738b333\n10678b9c-1f4d-4470-8f2e-851acf86709b\n3299be17-03f7-4a79-b37e-cf80023a20db\na4142349-698e-4432-ac52-f231316b8add\nce493f30-3b86-4700-93ab-e6c1b2c5c7b0\ne7ff3270-ce8e-46ef-9aef-13efb769a69b\n5a5fa0f3-a756-4b56-973c-ae942c5b5cd0\na35fa720-9b18-4484-b55e-4ec859a9e08b\n51ee4cf2-3f00-4e73-83b9-3bfae8c8e296\n33df801d-7172-4912-8a1d-424ea4cbcbd4\na66d0edf-4150-4e25-9ddb-8fbb2bb60608\n2467c559-8d6d-4402-8fcf-59ea42f064f9\nb9545c3d-51f5-4aa3-800e-af0bc17b43f9\n1febba1a-f90d-4096-926c-8df7bc179b62\n8b5c1455-727d-49ef-a091-a34f880a0d36\nc1ae66fc-f7cd-4d0d-9e84-72e61e7a8ead\n52bf2762-4359-4266-9793-ddf5599ddaef\n9608da57-8fa1-43c0-9801-8c2adaa8bba7\n2c46a93d-ff78-408f-936d-c23d90b70c05\n46764fd6-fdb3-4ae8-bc9d-c2978f0b6c09\n8ae243ef-ab59-4f0d-a48c-904df063eadc\n1f71f2e7-b23b-476d-8a90-d02ab98c8999\n8a39d4bb-46e1-43ff-a5e1-b9b813936047\nb376fda0-aa02-4451-85e2-f8a7d1fe23d4\nfd84e8ee-5ff6-47be-a8ff-cf4855f53c28\nf51f74f0-59c7-46fd-9cfa-fd18b7522339\nce7adc0f-3aa8-4cf0-b4ea-f9aafcbaaa06\n753c9c4d-8925-47a7-b6b7-270af990c0e1\naf0288e3-43c0-431b-86b4-5b784b660af5\n7abcc94d-2e83-4b05-a4c5-38f89bc12996\n8a0c2ade-30a9-453f-847b-6fb54ee5bb62\ncb665a46-f459-4ffb-b913-f5a8bc0eab29\n251eef31-22f3-4082-bbea-eb591da8ca72\ncc0c9b7e-98f4-4de2-aab3-50159861c1f2\nd64a7efa-33f5-4ec9-a2e5-8cdbfdeaa563\nb6a2950e-7822-4620-b79c-3dbbb3432447\n570fe851-cffa-4d53-b9e4-cdc62581ea4f\nf7641f1e-b501-4563-a1f1-6411fa497904\ne34b72c0-062a-4242-acba-d8aac7ac945b\n588b3192-754b-4177-b26e-d118b194fa8d\n369a7ab9-9ab5-4608-a773-887b6527e3f3\n823bc717-3a10-48c4-ac98-452d6483b083\n13ebef70-ba8b-4316-a51a-347100b427aa\n7875f885-6452-44da-b524-07efb827ea80\nc51253ce-1912-4fb0-af86-7ca3a205bd27\nc2eec1a0-5eb4-4576-b420-df234032a5d6\nb9719566-a047-4356-bbaa-54cf0f2a7eaa\ne36e8d76-e8c7-465d-b3f5-3da781a04c8c\n1ee0aea4-2cf3-4116-9fe6-7db237676f2a\n244cdb20-5d13-4108-b0dc-037b436bd6c9\nce288993-577b-4f36-9dab-bba7729aae43\nccd158c7-dae6-4eea-bc79-03cf2e5725f2\n56eeb95a-daeb-4ef7-9e8d-75a20e0d1e1a\na1e04452-5b4d-483e-935d-6a9c44922549\n600faced-2121-46a3-9607-7ce36c91d6b9\n2c3e16da-6335-4d4b-a737-eab7c819ca1e\n953f4f2e-5fef-4334-82b9-6eeee16baf22\nc1bb911b-d5c2-4d91-851d-02085f4babc9\n057ecc9a-fcfb-42ff-9fcd-df98b5c911f0\n0e49db8a-bf2a-459d-a425-ea7e68909a41\nb3bb8cc5-75ba-413e-ac57-0d31ac16c93f\n195860ae-5455-4618-b005-9ae0bcb56da5\nd7adf737-9a12-452b-b378-107335fac64a\nf8d71b18-0a2b-4fbe-9cc5-a99a9dc71da8\n407ee42f-cd0e-468d-9cb6-0a68a5b17421\n9f48b3f3-d850-4d3e-8651-5e750d58582c\n50176dba-eb70-4c04-865c-b81f969c7dfa\na32b0bce-81f3-425a-923c-227d1875a372\na109eeb1-15bd-4543-95b6-7deb0cd5e42c\n710604f3-afa9-4a94-8566-3a61adae2712\nf8ea86aa-ca88-48b2-a623-7403a7a31480\n3143e8b2-43ac-4389-a92c-1c8aeeca18a2\n7fadbc30-6291-4636-8f6f-12e34af0944c\nc1e8d5b9-bfc1-4b48-87d1-05e1cd5d0538\n89be1c8f-ad1a-4216-8ac5-5938975bbc58\n77065738-2dd0-4e9d-8099-a9d6ebdf353d\n2aba08e2-68fe-4d5e-91b8-8b4770eb96e0\nbf6e302e-497f-4d9e-92ef-a9d4e80e81ae\n4115b45f-1e45-4ff3-b183-07ef61bff7d7\n51f8b2cb-7d09-492a-8b3f-ff2e4f4b3191\n31fb3a4b-844e-4511-af3e-3530b622cfe7\nd1cd50f8-9fc4-4997-a2ba-9c82d285f740\nf85a76dd-def0-4dc0-9d95-6af12d4e1cad\n2fb304d2-c448-494b-8187-b81f3d1fc202\nf141192d-1536-4c75-9f5a-4b25e0d271fe\n6ef512d7-3103-43c6-b3e0-4dc5c63fa136\n1f5931bc-31f7-49f8-ac02-867b6cc4c24a\n4f26066e-062c-48d4-b5b8-63c515fd69da\n46caf149-3158-4533-966b-3cd1964d2aaa\n6db7c6c1-e875-44f3-b1ae-94de17f83f8d\nb763a63a-a354-449a-b7c2-ac6522a75777\ne904f761-d78f-4006-9e62-c2a30e3a59ed\n86114433-6b2c-4262-88a0-dba59862583e\n2137631a-64b1-4224-ad71-5bfb8942d49d\n2afb8dc5-b159-4c21-aaee-a43e0a4e69aa\n2fc0e3c9-4691-4e21-a69e-b31f9ecb0f50\n30972907-5d62-4ddd-9947-9edadd4e0357\n0bee8cca-f387-4570-a853-197a03050270\nce53ea18-7334-40af-8012-8bb4e1231f15\n55bf92c3-a0eb-4d25-b014-1f1d6ca5b9c4\n917b582f-ad89-4f5f-a1d1-055278e13a86\n49762ccd-4289-41fb-8bc5-2c6170e332a3\n913c7e16-bd8c-4bae-9643-f6fdaae0ad1f\n122cd9fd-3930-432f-b588-9274c1e0ce98\ncd76bede-72b6-4b96-b028-bc3a41e2d01c\n2a58d8f4-06d6-4ef0-a1f1-9e1b0106764b\ndd42b9a5-387d-415d-84b2-312064dbb932\nf0da9146-cd24-4898-a6e4-96a49b31a233\n4522fee8-f8af-4240-ac67-c661c8620224\n460eafc3-52ea-4de4-85d1-0e7b1575dec4\ncc04e2af-0fca-47ae-9fe5-e88e5c049aec\ndd05a025-032c-4f5e-b650-48a70fea6a4a\nb2208396-19d1-4ddf-880f-27d3f624fad5\n94716309-5047-4d53-8522-a80dfdfc1d63\n630198e6-5860-43c2-a782-0f849b8b15bb\n6a02ef3b-622a-426f-ab92-5a998a566c42\n2d4c965c-610c-409a-a9d7-42b4aff24c5d\n90d703f6-859a-4e03-893f-eb43d18f2931\n30d823e8-e969-460c-80df-047d63620e28\n6e318796-685a-414e-928c-f20d8b145dbf\nf7f0f260-6d17-412d-a44c-8a34f249e581\n2df105f3-f3de-4942-b9e1-3d94d4a9bec9\n4132b679-a90f-4b86-a689-1abc045f1068\n5414bbf2-1b54-43e8-9b7b-08fc3c93388d\n9f73de00-e52c-44c5-9fab-08e01cbd4a16\n9c74b7a5-03b4-4963-a6d5-29a2800992a6\n3190feb5-c02a-4d33-899f-f2a5edbba9b7\nea16c577-6208-416d-a4d3-060a31f40490\n4d32dfa8-9ceb-4ce6-a062-fb6096ceb896\n1e392867-0203-4745-9780-41ffbd0ef3f4\n971e25dc-470e-4ac6-b54e-4620475c8d72\na63e64f1-bbbd-4d0d-aa6b-bfae6a0ddb1e\n5a9f18e0-4f3c-4015-b1fa-9acbbf07e871\n4ddb0a0b-e088-4b50-92a7-624ce818d612\n6baf1b94-a902-457a-8bc2-41edd8981dc7\n1382745f-64fe-479b-a96a-89d88edbcc17\nc62526f4-f9d1-4cf1-aea1-11742a209041\nc379b77b-6d84-4bc2-8c78-dc130223ac78\n5335c433-b7f6-4b9c-9df8-49cc6f9cd270\n6d6af34e-36fc-4726-9ddb-956240e0dc0c\n87bfc440-a883-41bf-96d1-fbbcf09f4b83\n93be2a02-53e1-4f12-bf31-885f28283fe9\n6c298334-74de-4421-aca4-798db5ecce6f\nf8409340-7c21-42ac-85b2-f802f9aab45e\na98d6735-b38c-4f9a-9b4d-acc466a5872d\n5a57dae1-9e8a-414c-8812-e943db98c473\n0464a5d8-7b4e-4abf-bb50-3b975bff7627\naea2ed2a-12cf-4aab-949b-7142cf25ea2d\n14c8f42a-39b2-4d13-bba9-cc3a3c7554e4\n54bbebf8-704d-4404-9bae-c101b5526fb9\n0b83abe9-dbc7-48fe-b3b5-3d6d58b4a056\n438603be-e624-47e7-b106-b80d1122c33b\neb357008-ebc5-4bd1-ac02-51cf72c5cd17\n818b9a13-1b87-409c-aac7-4c6e8c734af8\nd1edc314-5f3f-4939-aac0-ce3fcc77c45b\n5aa8d034-cfaf-4b71-a505-ad6751a7614c\n43e00458-50f3-4238-bd04-c9bff2088454\neeaab677-35d3-4ab1-a315-af8d9ad0aa0a\n5b12cb7c-a3cb-49fb-8059-3de30c5eb50f\n12ca832a-4a30-4644-9219-cc08f6c13152\n746e9405-3fce-4641-b159-522e6cb145aa\nfbae5c8c-3738-4179-b448-7e4c56c68583\n4c380733-b87a-4888-96a4-61791d4727fb\n125b173a-6b0c-4669-b049-5f2a428b58d1\n5427dacd-949c-4cdd-bd87-a648a2fee748\n9d1bb578-489b-4c97-82e2-9d051625df8d\n9df81094-9298-456d-a365-e7d535b40b4f\n09d6a244-08c4-4f31-bea2-e7d250aff6e7\n378fe791-45ff-4ee0-a229-8f3950d2d3d8\ndb3de581-d2d0-4ba8-ae1c-f28f779612ab\n8d58b813-6186-429f-9240-969c041954aa\n2ebab774-bb09-4e1d-b0af-cd77b7b9707e\nb3dd5373-0973-4e47-ba85-0b6aef5adf4a\n1a1c5cae-a9fa-4db9-a7b8-f573f5fae149\n25507aa7-87f4-4f56-9cef-415ad9276a8a\n68fc77d3-9cb2-43e0-a138-11ab4f63903c\n31c7e611-db3d-47db-8216-eb63d18691c8\n6d288e16-f1c6-4dc8-b904-36d22548ac00\ne127a686-8d8b-4f02-8306-a4eff3b68cdd\ne43c7cc4-4328-4cf3-b437-bf3340ee2786\n21c20700-6b70-485d-a7c8-d78fa2c12f1b\n084e2ed7-be6e-4324-b7f0-4592968ae299\n9c4c7aa5-7145-4be2-9680-f5a7fe76ee85\nd255cb14-892b-4c6c-b8f1-49a8400f6734\n2eda2858-730d-4190-b59b-b218102a6a27\n24fa6c31-961b-4efc-9a6c-15fbff1b1032\n2dd5adba-5877-4899-b199-7b29550e2872\n8aaff207-e745-4bfc-beea-a3bbb5620092\n11f94400-e55b-432f-94a1-12c9077ac3df\n4bc3bcd7-2d1a-4fd8-8e3f-c95ed15ab2ba\n269d6e94-bc0b-4fa9-b32d-90de3044504b\n071b3655-ba99-4882-a892-22dde70014ee\n088a58f3-436b-4548-9ca1-7c95c8ea026f\nd2dcf730-d015-4d77-bc05-a0eae4638f8d\n6d252716-bf88-4709-bdd2-f1a03770b49d\n38df7dba-96b0-4895-a471-f82a8989db45\na4a1b48b-7462-48db-a97e-4cafdd9de598\n8e346bac-4c42-48b6-b6b9-9d837e1bb3d2\n0d5997e8-76b0-4d9e-a7dc-ccd80b0bb150\nebd6db55-4671-45d9-9603-42594c36b610\n617800c9-e141-4033-8c0e-0cfe1740801e\n201a66f8-30af-417c-8076-eac5de1d6491\n6ac2f6e4-4fb7-42e9-91a0-3d255bafafbe\ncde52687-571c-46d2-ab59-dc0f3672e3d0\nf384b2ce-7ef3-4127-9a17-f785c33b5ce7\n01ac42f6-7466-46ec-9462-340067e84f8a\nf573f9f8-948d-42ff-9279-28e505d471bb\nf784abae-25f9-434d-87ad-3bdcb1502a8e\n068c5e27-57bc-4a8a-b965-b1dc26332ca9\na6007acf-6860-43c5-9fbc-24414ff33154\n5048c2e0-672b-4ac5-94a6-cedb068a1e46\n5d7a02e6-1d76-4f71-afc4-979440b1b2d2\n87a8a5ff-6f7d-456f-a08c-7bddd01f5ef7\n685fbbc9-0026-4b31-80f8-88116bc64701\n105e6ec2-1f2c-4051-8b64-3c694699b538\ne9e5b4b1-813d-4d1d-8239-194646e993cd\n1c64e216-62bf-4f36-be2a-75f4fb6e000b\n2d73b581-50ea-462a-a8b4-22c0d88624b0\nf0f2c78d-0ce8-4d4a-866c-7eed74dd1d64\n534cfe36-bb56-42a9-988a-ab83b8227264\nbf6e0caf-b949-4df9-b0f9-e63ba0da33dd\nce8e7719-2388-4269-8c06-6c01a03293ed\nd04751c0-2b3b-48e0-b283-b0095e8d1401\ndb25cf9f-ae6c-4708-9bc9-0c093ccf02f0\nda254c31-f7a2-4a80-b93d-a429d5ecc7b5\ne528d4af-12ee-4abd-aefe-1072ba1120f8\nd633772f-13c6-4d37-b8d3-53943d72c0ea\n5c5e6694-605a-46d8-a548-db62a13db0ce\nbb9d240e-6a16-4e25-a013-f977b349113e\nc615d5c3-f4b1-4a8d-9ff4-200dfe424a9f\n08cf3100-a146-4a28-8344-876588a206b2\n375caa52-8b46-4223-85e3-5970b82d79c4\n0d84443d-f623-40ff-b926-96c8abec07cf\nffc388a5-995f-4fcd-ab62-05962767b886\n879e7169-0c19-4c7f-96dc-175fd8b0fd43\nb6787332-b9d9-4332-bdce-a9ec2bec532d\n5382d82c-f9b9-44b5-9bbe-4d637b13bc45\n198ae136-3f76-4dd7-b1bf-9f350b018239\n0820befc-4415-4f66-96ab-f8c9aa5682e2\nbbfc7696-1b14-4c2e-81ba-80bf98adc23e\n1681033b-c2a8-4c6e-bc06-971e2601bb67\n5082c3a7-665e-4bb9-92df-6125c7f327fb\n5e9b1a4a-ce61-424b-8cc0-1061e5a9d35b\n986c3c8c-eab2-4d5f-aefa-fdd805e438dd\n40c58f50-56e8-4810-978f-431a85e9653b\n36949588-48c3-4f65-9604-d7d1bf4ca31e\n93a4e8ba-9b54-4ccb-a5dc-073018b2b464\ndf40cd2a-1d31-4a03-91b1-11147b623c1a\n16817d18-3767-406f-81b9-0aa0e51a47d3\nc9121ab9-b2cd-4ef3-99a0-5b799aa0c87e\nd4377060-6bfa-4d6c-8589-f8a7c8145e1e\n28be0fb6-5612-4cbd-a7ad-7d46883dc135\n6d599599-759e-4fe9-985d-2f07e149b9d2\na2508514-4d15-4436-a573-9bb83cb6dc29\n3fe76a3b-ef45-4540-86af-db92052ba672\nd89c925d-bf4b-45a9-9d51-c305942c29b0\na6a0acb1-fb48-4503-8ec7-2e36b00192c3\n398979aa-4c16-4eab-aa03-c57b5e53d24c\ne8287fca-1212-417e-ab7a-38804d69b0cc\n021aa180-f226-4b7f-b930-70b8373fc038\n4f1fa592-1e52-4d35-a4da-cf107ccf34f4\ncc255996-cb95-491d-837f-c9d337f85a39\nf1a13d12-9806-495c-acfc-3e91a7e7943b\n0b5e179c-3fa8-4f0f-aa1e-e52bc2a26e9f\n9613647b-5e25-415a-883c-62756f854634\nfc7a196f-62c5-4245-9893-22ae85c19b68\n49901b52-fa31-46e2-94c1-21bd60aed9c1\nfd91eb64-e407-4378-a59d-a9b7de4f5f22\n7ffc0227-e0fe-43bb-a7ec-1dca04f04549\n899ecab2-d484-4a54-88a2-810cdf4d8235\n86991980-c9bc-4243-abe5-eedbfc6aa92d\nb3e9a950-d665-4240-a6f1-04e3dbdf672b\n2d882289-5b07-4126-8e8a-f5b1ddbe23f8\nac37e99e-bf00-4b81-aec9-f8411a54f615\n9924e6bc-3172-4eea-97fd-dc257a9febe2\n5aeecd02-a103-4ff6-8a87-6caeff4541a6\n5f52da69-dd4d-4cba-beab-2f0e03a038ce\n401a07c0-99db-40f6-8741-26a5b56ee09c\nd80c9cc1-cdc7-43b8-9a89-75e4fce62e62\n6efa7d2f-9c54-4c94-a87c-2d010b0bd358\nf0680090-d7b2-4f7c-8888-ee048877f7da\ne76da65b-3d53-441f-9271-3483d9d56dfe\n94414d56-b946-46df-b7b4-de7f37778a06\nc831538a-ad1c-4bfb-b880-640be874a080\nc7fe914e-8653-4c61-adbc-4555e5a03e60\ne6c9334f-efb8-4411-82cc-69ee5a045bba\n365545e8-e2e5-44ea-9832-dcc86395f163\ne76f4d50-c2c2-4081-80df-d99c03cc7c28\n71a05557-9dd7-4bf4-a519-7909c7ecfb9f\ne3cf8e9c-4266-48dc-ac16-467fca3eabdb\n838e8407-5b3f-429a-8eee-90360f462e8a\nb17c23de-8178-4d8b-8c62-770b0f8a16a2\n1746cadf-4e47-4315-b1d6-60a6527603d3\ne035c0fa-6a01-44f2-878a-40838fe19b04\nb70b30ec-4767-4ee3-a2ec-5a885bc22fc3\n69caba7d-2439-4cfd-952b-71db269057cf\n8a92b34a-d4c7-4dc3-b782-aa92d1729efc\n2baaadd0-8b1f-4602-8b37-613657691644\n3ff1f806-59e5-4145-86a1-53e482f17b2e\na49898e1-5891-41f3-bf20-eb6a1f586d80\nc115dabb-f42d-40a5-b48c-314d8fece280\ne6df2fab-69da-478d-be95-d697814b87ee\nc28a53bc-1925-4d56-ab83-0908613870de\nb791dc61-14aa-457b-9a08-b03fca9055a7\n72aa265e-b006-415d-a63d-0c75fa4cb6ed\n518d59ce-2b30-4c02-82b7-b7aec7f3634b\nf816fad4-2a28-415d-8bba-efaa1eb90082\nf3dd3982-1445-41cd-829a-52cc0b2284e6\n1c68c002-e006-41e9-8682-107b27f1d01e\nc129c9b2-f61e-44c3-a372-8e899f828475\nc5bf6462-9242-4490-befb-e5150f8a45b5\n4a9aac97-7e43-453d-9aea-98761a95963e\nb8f1ac6a-eb1b-4748-b71d-63e7aba95497\n515b3bf0-fb1c-4e39-b225-39106c47e847\ne6b25d76-f202-4939-9770-70a6cbd27cc4\nc80c969c-72fe-44d2-bf8d-f7ff75dd52a8\na1fa1324-b8e2-4714-ad6f-4759dc6be879\n64758e84-9c9b-4c67-bbf4-5047698a2b13\n9229b442-5cd5-4104-847e-2f29c83ebf7e\n9eb3ea32-82a4-4454-99a3-380b612d17cc\nd6170514-b03d-4b24-a058-e7238d9d0b92\neca6b0d4-7fc1-4fca-988e-e8035da0b81d\ne7a85894-214f-437e-91d8-d1a65eef91ef\nde35b960-6bb8-42dd-91ed-a8c48c20b29e\nca77ce1c-2b63-451e-b733-38a606f01c85\nbf71375b-72cf-4147-a314-346758611725\nb433e016-d367-4b60-a482-f1e2b17b200e\n7b232e3e-8f52-4331-a4f7-a33cbf949d49\n7a7b7ac9-e4c9-44f9-88ba-e10736d72564\n56aad848-21e1-4529-9e77-0014b8fb81c7\nac921052-7473-4707-a8d3-cd95724a8024\nfbab9c55-74c1-49f4-9fbc-5b663d826335\na7c57ffe-fe15-4998-a127-9508f35af4b5\nfe159516-43f4-4b66-aaa7-d4241eb21a61\n39e434eb-33fb-4998-8fd2-cba37115c9b6\n7c6e80b2-4991-40cd-977d-89382bf8a2ff\na154a53e-9849-43b2-92cb-b2dbbf171548\ne52f7426-a755-4c6c-a3b4-e3c11675e0d3\n78d49e76-30d3-4a96-8236-3a11ac579229\n53692385-6ba8-4afd-b861-1de8adc5279f\nffba08b7-ec98-480f-b37b-f7ca3ce163a5\na8fdbe34-e751-434f-a322-bfae5efc13e4\nd72152aa-664b-4c18-b85e-52f6cde2f187\n7adf2361-dbb0-46ca-8fb5-8d38e4a4ad8b\na087ce61-bb9a-4384-ab83-57a42ae141c5\n5e140515-8bc0-47c4-9f8a-9d038ba1a2b1\n28a84ff3-d063-4b3d-9b5d-8fbe63d878d9\n302aca7f-1877-406c-8664-4fc847eb2b51\nf4e0a7b7-7a0a-44f8-afc8-07ecd9b21b7c\nfd6a7403-bcae-46c1-a436-a869eeee9bc3\n920ca0f9-85d2-4c78-b5e3-5b33e033f88b\nd0c6f6e9-8702-4922-9e6a-263577a7cb2a\n870625a4-6d23-407c-af1c-149c995b6819\n2ad12900-7b45-41ba-9b46-f43e628d7496\nb5de5042-78ed-4108-b1dd-56cb7bee6630\na7ac0d8a-3eb5-4c0b-bf90-adc517320f07\ned95760b-26d4-4b99-8a42-b7628dbaf846\na8dfc7ad-f005-4822-a9ee-41a0e3ccc5a3\n7504e385-e568-467f-b3e1-b515cee27afb\n72a57e1f-b0fd-4548-80fc-235a716eee1e\n56610997-768a-4556-89e9-be7915229f12\n243780ea-6f50-483c-8bc7-6e76960b2bf2\nf30bf035-51c9-4489-bcf7-c0ad129ce12c\ncef48c5b-91e2-4261-b820-0b8abf0d1f9d\na55e4f46-1051-43f5-86da-ff6749422a12\n28efb0e2-fda8-4e2f-956d-014d0c5d2ce6\nb4cef053-c28f-4294-8c24-27ec1a9ed79c\n0b78b68c-5950-4abb-ad01-6a5edf666678\n8e0ba6ca-ea87-4def-9e78-d2b85f29e27c\n23cc4fa0-e2f6-4039-b3ae-14911419fea0\n8342b382-914e-40fa-abac-e55a36e3cb5d\n8dba5728-0076-4835-9b43-3d28ccc3c587\ndf1fa63d-04d5-49de-9dc5-b607a7c27989\n68380fb7-eed8-4e4a-b8e0-32410d174431\nb55a735f-b8f4-4f39-91bf-19b5685dde07\nf598cc45-ad24-4a52-bfcb-1187690314b9\n31027c10-30f9-46a5-b637-874b5b18abb0\n292983b9-68a0-438e-ad3f-04d2b0c3ffb0\n68e42cdd-c7ab-4b96-96de-cc42f7dd1d5b\nc81b84ca-cd01-4448-88cb-1e50cd749e7a\nbabc78af-2c91-4982-af0b-c8e7978d1560\n4a9e45fb-0772-4a79-a8a0-6b1b101e5889\n5ff8894c-dee1-4d0a-93f6-ed2cf80cbb4e\ndb85403f-4200-486d-8c7e-b3dde83a9cad\n514d76e9-c917-4ae5-8744-7bda52bd5552\n0109246b-1fc7-4db8-859b-bae624947eee\n9a42a3fd-c124-47dc-b255-847f6f2d4760\n5cc0ea27-68b5-45bc-97a9-1ae2d8ddb042\n74d53bee-4f5d-40ee-920f-7d4c5fef458e\nef0e6e0c-cc39-4801-becf-4e0cc6895ea5\n0d39b0d5-9a20-41ba-a259-948ca3cd3630\n546c087e-1126-4136-8ada-c8159007251a\n2570a82d-30df-4bd3-8090-b679fed0d6cf\n0aa1e6ac-121e-4f90-9b57-bf856fd0ed6c\n9a12f331-3af3-4ec5-ba36-3a3728d37d3e\n23d381b2-080a-4c6f-86ac-b218bb5ebd87\n609301b0-b205-45dc-8f4b-f0708d4ef57d\n792bc204-b568-41de-87f0-b16e2ad8dbbf\n921f2904-219d-4eb1-9a1c-da83db17d872\n18f6ead8-da07-410e-805f-c33bcbaf84bf\n65e65ca7-b42c-4119-95c9-5236ce74a5a1\n3199db1d-3413-43de-95d3-cef51bc47bba\nd1f1f261-5ab8-4b02-a9b3-03c939e33f7e\nae0a3151-aa64-4d49-8e06-c4375ef94368\nf525c44d-a4c8-4b7b-a9ff-519ca85f0e07\n8d163779-0a68-4d29-bc29-5756d19dd7bf\nce523b81-f2e0-4776-959a-367e905c770b\n7d3fea71-784d-4890-958d-973b542deeed\n1c3e6c19-f723-457b-9cf5-4fce0bb31cb6\nd3f45a32-06e5-4bc4-b064-b9edebcb85a8\n7bc1efba-f88d-4789-9aec-63d8f7469e04\n11c7ddd8-70cb-43dd-8f1e-f7f79b3638e0\n15bf6ccb-d57f-430a-91a1-8854e87012c4\n6fad05a4-eb51-4431-b2b5-8ac02a49c9fc\n3087c150-5a08-4d88-8d5c-c9c947421ce3\nb3d74e8d-f619-4d49-be20-28acae82f940\ncbbc349f-4b1f-4a07-a5f4-f806d5bf9ffa\n3189259e-8bcf-47b8-b234-2f046a001f10\nce421a1c-3455-4cb4-8d4c-1f97ee44eca3\nb8cddf79-17f5-4ca1-80f8-92875a07ab9b\n215aaf84-c706-4984-a8e4-5478a87224b9\nf6e2b9b6-293a-4591-9dac-704796d01051\nbbdf2b94-0520-4588-ac4c-57597cfb750a\nd19545be-1a85-403f-b945-0b7332f6a122\nc52c413f-443d-4109-a630-95106c0a5bcb\n5d7776ed-a91f-4c2f-9c49-de650e64086a\na6054a64-e890-4fd5-943c-efdc0f77dc81\nbd887073-8dba-4772-a3b3-6c4008d44b36\ne81237ae-45c7-40ad-9f62-2c55aa38aaab\ne855a49d-e9a4-410b-a78c-5fe8fd3bf28e\nc4f055ba-8e7d-43d8-90f1-ab1a9835a855\nfd8e281a-0f37-46e8-915b-b379d12ab724\nb4c53ce9-663d-4935-981b-b133bbf600c6\n9a00366b-7c80-4943-a796-e7d7849c7e7f\n75d1c6aa-e293-45ed-ac61-50f6a809c32c\nfa7d2d8e-2c42-4558-87a1-22f2bce6d130\n52608c53-fce2-4957-bdd5-78b72003a37f\n65ede9ae-9aac-45ac-afd6-07502ba4a43a\n6290d5bd-bb63-48d7-8217-b61aec51d82c\nfbcb1fbe-a4c6-4679-b215-c74a927b02b9\nfbcfdc9e-5b7f-4dfe-8ee0-a019975b4401\nd97cb096-1154-47bc-8777-da8b6b50d8ad\nc4ada0b7-5720-4e65-b4df-d7a4d311f80f\n78de5b9c-f5ee-4a82-affc-21306c7b7003\n280a7faa-29fb-422e-a3a6-8edae6db4e61\ne1e8c8ad-ad31-4a08-afba-0b1ad0820282\n142fc3b0-fad9-4386-a4ea-e1b0dc03a455\nf67d6dac-dd8d-4893-82d8-29c4f028908a\nac3d4edd-f89d-435b-8182-f7d0c4f0a90c\nd9a8808d-ddf6-4b11-8d7d-7c0fe5c3513e\n8c7208e8-a99c-4da8-ac1f-3100a78e550f\nb34d8371-bd41-4655-b86d-14a9d1fe6451\n8ba85a4f-05db-44c0-a7dd-36bd492e1650\nf41912d7-5e0b-4200-b204-9f3f47bcf7d3\n7b92b661-a8b4-40c7-8e92-a9100cd75beb\nc48b5031-4f59-4ed5-9f1d-70827fb43e82\na60b85c6-e7de-4770-ac2e-68606e250a16\nc26d9543-63c2-48c6-9327-5c99a14572d7\n3d1a0ef1-2d7b-48a5-9352-0ddee46448d0\n85f3c701-4be6-4211-acc6-074b043b87d8\n4c30d642-fe5e-4332-ace9-a3e7acef3a32\n07a5ec1a-30d1-430a-b9df-e27bf2fe7443\nb854b1bb-98ce-48a5-af42-3bddf25b73e0\n6cc96a8b-08cd-4284-82d6-5fdb40f71d76\nf3e6a3df-73e4-477d-aa30-852eb2b15356\nf0f1b12d-f72c-4bcb-b560-ad5805496a0e\n1ad88b1b-be3e-45fc-beea-5ea299190b18\ndc1ebcf7-1575-4fbd-a0ab-0721f266374e\n04f0d5cc-66d9-4681-b56e-9fd0cacdd693\nbd7cb506-d6f4-43a7-b9f8-de4a503bb1b5\n7aad8086-ed9c-439c-843a-628200ca88d5\n679d2533-23c8-4d23-9e9f-50b6ee07a871\n4546ec5e-c9d2-497e-820d-b78dc558b6a1\n80518645-7771-4cf1-873f-523f6f289745\n35c5bad3-31dc-4622-b8cf-7ba949bf6c14\n83b01d22-eaa3-4966-9188-126e39fee88c\n26df2dce-25bc-4956-9e47-6a3e9e2eca89\nbfdecccf-487a-4be3-aeda-cda06a016eb4\n58883ffd-7f7c-4bf2-8dc5-19ed3d568dc2\naeddafa1-cf8d-4ff6-a9eb-119de41f3c89\n432bed24-40bd-4b7c-b667-751aaaf6da36\nfb51d36c-e2ed-48b9-a00c-07a3594c5f79\nd1ae6739-ebd4-46c7-96a0-49ef8d14309f\nb2d17993-9b6c-4e67-8479-c980a1188aa6\n450eab42-c15a-4a98-8f2f-74d8f60acf73\nae02c0bc-02f8-451e-bc92-2429ec50d80f\nf1df7300-ef8a-4b2d-8aac-870d6df341a0\n412898aa-111f-49f9-8259-ce53d16aaf2f\nca67c6fa-1a43-4ec3-8141-b0e921c3378f\n2b76d600-d919-436c-b3d1-71f964dda38c\na9cee66f-9690-44b8-a6b5-57ede9f240db\n5f0d61e2-efbe-419e-9d95-66e43b995e28\ne24b0f47-4d81-4d44-8b69-f8eb361c8337\n2f708882-ec95-484f-81dc-91e0260cc7e1\n919049d9-0de5-4248-801f-dfa0d7b424df\nfe7b44d2-07dc-4941-b0e6-7e7dfc3eaa64\nb5e3a4bd-f061-4f2f-bfbf-98a0ff571d85\n9827cfe1-ce68-4ee9-8607-a542fd951048\nefd0af4d-e0cc-41fc-bd0e-77bd1cec9eb8\n72741efd-9d65-4f09-812f-476967a70dbc\n552c32fd-bee9-487e-a79b-7cecea101988\n456b6cd4-348a-46ea-bde1-fd4f31bd185e\n83d5a982-e2dc-4d11-8cf3-6538b9d2c2a3\nd443787d-d05d-4b6f-9e9c-9cd3ce57ccd6\nce8cea7f-0fee-42d6-b641-31c21ddfe573\n6e5da1f7-ee0d-4667-8bbd-9ff971e5199f\n61bacb60-d26d-4f33-8ce4-59634a2e49f0\n50adc185-7d7a-44ce-85ea-4b4db8d792cb\n9ec718e6-c2f3-4281-ba19-a6219ad7673c\nf509a6ae-3c51-4ee3-9be1-6b27ce4fb2c5\n3b43577e-3388-4256-9b3a-2c1a96a239bc\n8c8a6a88-fc27-47ee-a4aa-062e67778be5\nb666d3ef-6c45-495d-9809-efcea78cd4e1\n2f9c3517-4981-4e3f-8896-98c33bf6020d\nc35b5adf-797e-4d31-8fbf-d6c8ae4d60ba\n313b91f5-6075-4a3d-8285-e95d6e1b0de2\n31de4387-1391-4257-9777-c1a4949010ff\n97a5325f-d497-4990-8ef0-e2e1df89f01f\n0d9ee11b-cf86-479e-b792-bbd1a4a8ea84\n4e0514fe-c243-4de7-99a3-3029a8509140\n4b176b3d-e497-4a14-945f-909c7b4d4fc8\nf3f35568-e760-4586-a464-cd143e29a983\n65ac38e1-161e-4113-b1b0-43d6e5c7adb0\nad18f54b-ecf8-4c21-890f-b7db5d8acf8d\nd0fef674-fe35-4b30-afb8-c483c9715117\n1e390493-a253-48cd-91f1-3cb54e7a513a\naac00f45-bbc3-4b68-8586-97fe8173fb61\nb0415829-dba8-4f56-a55d-eed43abdd125\n3e96d50a-2f3a-4410-8806-20d70563694f\n44e45e31-8fed-4841-97df-9ceabf2dfacb\ncd65a56d-e1d2-469a-b704-0713847f9cee\nd23049ac-c457-4b04-8abd-b810fe3c5f9e\nbc603e61-cc1e-47d1-be7d-164e5d1f5675\n0f1f8bcd-5206-4b5d-98fe-2c07b1880331\n6292810f-9897-4f4e-a99a-10f4b2b65bf9\n61cd6944-8f1f-4a78-8ac8-b296180295ae\n2a239656-97ea-4fbe-b9ae-cd82cbc9dc7d\ne39e2f30-fac6-4d99-a0b0-4da20497b4c9\n8339af29-5974-40e1-bedb-727c1af35b0e\n7dfb18af-8b02-4728-a277-f8d406247db3\n62d16264-7c5f-41be-bd20-ecc4f3121844\n605a3149-6d98-48fd-862f-07952bdf64b1\n77bccfb4-f18c-4b62-8580-009894e766c0\n8687df77-e145-4403-ac69-d3c2717ae63f\nfa147ef0-067b-4e32-975b-6fe3e8527e1e\n17433ec5-27d3-4957-a152-d018e6f60a52\nb79a57d0-2504-4eaa-a40a-91f8dac79dee\nd50de793-6218-45ea-8ce2-6b19af09dc91\nafccde64-f73c-44eb-8abf-06dcd89ff004\nad550d6b-b00d-4e04-8200-35a7683dfcdc\n744d8fa9-e8e5-477e-a8a1-792d1b08a0b4\n280ae6c2-1833-4dcf-ab18-dd6b8a8eac87\nb1b19bc6-1ab3-4f5b-8db7-8dfa2ca374ca\n6ce685ce-97b0-47db-bea0-06a5c649994b\n03c220bb-eea0-4a91-a773-7268dc08ca89\n213eccbe-1889-4bb6-af5a-0481ade64f71\n77ec56a8-da9d-40ad-afb6-c6a079950325\n01b0647f-f69a-46b2-a926-bbcd40a35351\n9f3e2510-3bc6-47ff-a3ab-afbe8dedbc37\n3403ef60-92e7-4cce-b1f9-05f72962b5fb\n9aaa73cd-4ce5-4126-aff0-bc9bb25e8ec0\n723b3986-a55b-4a30-b55f-0a9695804a81\n7a623b36-89cb-44ca-90f9-3a2124727ae7\n4f50d66f-779a-4ad3-89a9-c8eb2281ed2d\n70dfc4d6-ad9f-4c4d-9bf8-20606a8ea5d5\n6c49b071-1c9e-47bc-b3f5-37cf309d208d\ndb32e8aa-adc4-4c9f-8851-647bf14e5b86\ndf379568-557a-4381-9fc5-f241dc328bd6\n8137847d-de36-4935-abad-587e8decc365\n0c00739d-37e6-4f45-9fc9-ad566b9efdc2\n4c65b7e9-5ed1-4988-86e0-1427cbcad74c\n0a6fd60d-670d-494d-a2f4-39c9ce90e189\ndba866e1-3d71-41ec-ad83-c2992a2ddd1a\na48f2ee5-caf1-4853-8f83-615b785e3592\n362812a8-f5cf-4279-82bf-cef8382371e2\n486ee779-643c-428b-8043-0b5ce1a97205\n22a7212e-ac16-43f5-9a68-512a41fcf141\nebe67407-6966-4a2b-9970-943f3daf4602\na04a85a4-79bc-4ceb-8f00-f28100d63027\nf9d952e9-c162-4147-9a09-e0775685f714\n3de00d24-b473-4638-a236-19ca393b169f\ne401e332-24eb-499a-bf53-5cc833cf9503\nbe051ec8-706f-4e4e-b17d-98b656d83d32\n4c67e784-8210-472f-a408-8a6c048b4a21\n79379b55-8a68-47ad-a25f-ba0896d4b356\n56c74642-06b6-4b6b-96af-8bb4b1dce7c3\nf523baeb-aa73-42dd-9471-1ddcc52761b0\n485f0e94-3e05-4321-9c48-4ad95de909f3\n8e18f7de-8b8e-418f-b106-44727d148e86\n007d57f1-2410-477c-b7f5-dc36414655e1\nde0d9a17-89e8-46e5-99d5-0e538b434854\nd634fa9f-99ad-4b52-b7c7-ac9ff660dbaa\n7b1ce4e1-45fe-41a9-a954-f564d1b58913\n9d072cf9-26a3-4103-ba9e-bcb30fbbc7b3\n20b84896-4361-4c39-9b7b-11592b000dd4\n53e24801-8a5e-456f-9eab-8bd69421cff3\na99d1b24-3388-4b4a-a859-c63cb9663931\n1950b5ef-6eaa-48fc-bb4b-9fbe86e134ed\n48e1f7ad-374d-46fe-926f-a3058b02ece3\n3116784e-9c22-42f9-8bb6-1f55ea48bfff\n3ac80074-1206-49b5-9c94-331275116b87\n8f5adc48-5304-4f25-bb7e-ec5be7b42ff6\n6b2303ca-e64e-47e4-865e-eb48c521b6ce\nc3a1bb6a-8835-4c1a-9425-18fdf4ecf6f4\ndf846abc-f6cf-4689-8412-438d302221f6\n6cd37e94-2ef6-437b-9976-0afd2e045c6d\nd066b5a8-e72c-4cea-8959-8e27b25a1f82\n31a90f60-1b2d-4dd0-b06a-058c1f4a4ca6\n37b821e7-f4a2-48f2-8dfe-010ad25e56ce\nb970babd-8d5f-4c34-a397-0075fd025d81\n0528f72c-e965-49ee-b14c-5180b191c4eb\n709f539b-89e7-4257-99aa-426f0caaa10d\n335502e6-1d71-4562-a809-f8544563a07f\nfd68c0b4-45d0-431c-b8e9-07e689d58d21\ncb9461ee-d3d4-429e-a58a-5074dc50e82f\n9f875c7a-bb32-4871-802f-683de1f8381e\n8ed05317-03a6-4410-a333-04e41f486021\nbeee40d7-0f2b-4ef0-8572-9d5b6f740fb0\n3df60683-77a0-4e38-bc6d-7f80345429f0\n74a9a0a2-3edb-4f3b-a14f-3554b56e25ea\n4a68f0f7-3d51-40c0-9962-7f29d1a5a9a0\n707bc277-2cb6-4476-8420-77b3173cd3b9\n488ece06-a37a-4292-a76f-523f3d91af52\n0d0e2d44-75f6-41c2-ba4d-4898c776ebfa\n427fd16d-86d7-4867-861f-b42a1246621f\n47a90e11-967b-4f53-b2e1-8d1f7df7e54c\n8cd6f8c5-fa0a-4f4c-bd77-084705ef9269\nc8d5172c-4c34-4c11-a044-62d27de2278e\n6340f2bd-9599-459c-88de-593dd836d247\n1bb28372-7152-4a16-adb1-a0768ff3b82c\n52ff3e99-2ef4-47b7-9eba-4e96de37958a\nfa4681bb-dbd9-432b-bf4a-6353de49e928\n015b62d2-9520-4a0d-af93-9013eae1f7cd\n0faee844-e6d3-4bdc-bdc5-aa4252d502a2\ned033612-ec0f-489c-8070-ef9a66a4b4a9\n7eb632b4-299d-4d65-9b07-e081183aa9b4\n4931eb44-fa4c-421f-8f13-259f5aad68d0\n72ff1a03-785a-48fa-9c57-9cf7ab0f96a3\nfa5b70d4-ed3e-4d58-8c14-c2768b469e1f\nd3641a97-0505-4961-9234-6b8a61d2f779\nc1f0b1de-0a63-46a4-88e6-b16c01be43e1\ncd11dfb7-5338-4393-aaca-9f1039050e08\nf5158e83-b7f8-4072-9da1-0eb0c421d781\nb06bab87-899d-4686-b8c2-2afeb2f52d2c\n11b138e5-c0ee-462a-b086-6534300556dc\n660bde55-163e-4970-ad81-e1d4408b52ce\n2bda8e27-3d6c-4e94-99ff-6b9f30b5558f\n772f6244-68f1-4271-b54a-3f8f8f93a12a\n677dbe29-2fe5-4853-add2-c7d163907e11\n485b2aae-a3dd-42b7-9808-b5bc49235721\nf3be33ff-2d47-435c-ad75-f2517b8b3526\n77442dab-8e56-4e3c-9b2e-0ee5545158fb\ncaaf6da2-65b6-4778-9f27-093dead82340\nd72d08f7-880a-42c0-a0d4-68bcee285664\n40379871-e6e6-4b8b-8015-fd26e6877698\nf84cb382-12de-40f1-909e-23c0664a5eb6\nb2991e2a-a428-43f5-b5ca-b4fe7fe2f9f4\n8c330ebc-c48c-40a6-933d-65e6b883e215\n7d48e158-fc21-42bb-858e-0fa73fb02d30\ncde0644e-dec9-43f1-ad9d-e68cc090cf51\n92269b84-571e-4592-928d-1cbaec71c262\n7c58b685-de6b-435d-a3e8-f2428539c4a8\nf9c6a7a4-cfbb-44ac-9565-8241b7a29c98\n630abc05-48d8-4146-b93f-8705c889e484\na1be9be4-8f70-4d90-aa5f-c2790ed90320\ndeda68fe-72c6-4bc7-a3e4-01d672a2bdaf\n1689df6d-1627-4074-bafa-5998ad9aceff\n647e4caf-68d5-4554-9468-aa0ef067cc32\n59637745-eefc-4e72-8a61-e38e342ab6d8\ndc6683c5-9e1f-40c7-a6d0-4081afec27ca\neb6ab506-d8ad-467d-a381-2a0956673e8a\n112b9a0a-4c1a-42e7-8b0e-ab24e3634e31\n5fb296c0-8e5d-46c2-aeb3-762667a71717\na56462ba-25ef-42f3-9a04-1c80eafc88c4\n1a9b7973-8098-45fd-b700-db18456269b6\n3ffb393b-8edf-4c52-b7d2-f13dc96034db\nb7809d14-b9a9-4ede-b39f-f37ecc112d02\nd2c0ba76-7725-44f5-9f0f-752bd3ae2e83\n2fe17012-abb5-482d-8f38-a9a2d7c9f58e\nd23da5d3-26a5-4df5-853d-9c33e9370872\ncc3a5950-bc05-46cb-8cab-5c9b3bf7cd45\n10418d3f-c113-4964-a29a-8a5e3d54b5cd\nd08df0b9-8e65-45b8-b12c-c8a8859a06f1\n54fb4851-c01a-4d49-9ab1-2ab42e68be9f\n40aa060d-cad7-42e9-ade9-b24ec00c8c40\na9c6376c-aed0-4ca3-86a8-53d1de3d94cd\n3b212bec-568c-4440-bee5-db9288de515e\nb92b5784-a3c5-43c5-a0ad-f175a7835ad7\n57984571-34ae-4aa1-84ee-bc795f8634cd\n33da8012-7f97-48fd-b52c-e27b612abf09\n2e5dd5b1-ebf8-431c-a7ae-245431bb2b6d\nb734fd73-647c-4841-8950-c03c80d51a6b\n5fb5ab07-2ea6-45a7-a478-66ff0482b21a\n0c13874f-2957-43c0-99dc-c5696da4288b\n9b69e9cd-0337-4566-b97f-c4f45db28d7a\n268be28a-d7af-422d-8a89-c4bccf32c478\n0949d0f5-cf43-42be-a235-754f5b56f66d\nde04724e-6b25-486f-9c62-4a15ab1875f3\n7bbc2f3e-adc4-427a-8215-3c374a477884\n9a2eb34f-d03d-4546-a0dd-328ce489ae87\nb10f207c-9467-4187-ad72-8e07bad83f3f\n6698dad8-b4f5-4d5b-ba43-195a57a833a8\n966b502c-07f4-4101-8ca4-0ebd885e8955\n39456441-dc31-4c5b-9921-9d177a260518\nd4da874d-9e5f-40e2-95c3-cb5007ca94eb\ne31e1fdf-3bfa-4e86-9fcd-c7995783228e\ne14e4842-e945-490c-9d2e-e2fc59c52b7b\n0a6a876d-f16c-4c27-a577-d171742e5365\n237a7c2f-8705-4ab6-875b-87d8b703a5d6\n950b231b-1e70-431d-9b4d-dd4f90b63261\nee4398dd-8aca-4171-a645-6d780663751e\neb5c6763-bd7e-4635-b612-7cbccea258c0\nf4867ace-5c48-4352-bd23-40467fa00baf\n42789aaa-730e-41f1-aafc-0bef80ec37ce\nceb5846c-a95b-40b3-a45b-6d965f4a6a46\n834b71a4-bbd6-46d8-86f4-dfd6d2528e03\nc0b2acaf-dd82-4bd6-855c-f53aaa7f0498\n16d6f750-2aa5-4b27-a0eb-42f75c556c79\n21271df3-c085-4719-9334-0ba98885bae9\n10787a2b-a320-4cef-8644-ed0fb9ebe287\nc33d7c7e-4d81-4119-83d2-48e3077f77a7\n4d69ba9c-949b-4f2b-a1f0-be55e169a498\nab3d94e9-3dd9-453c-aef0-91c9f59d5e94\n17d7708a-415a-4a44-92bc-dbde83238563\n79eb6317-bd96-4d48-83b7-30958c977f65\n82b7ca4d-98c6-470a-a9dd-e7aeeedfd3df\n355287ee-85e1-4ac4-808c-9b39c6d03513\n8ce1ef9f-efdd-4d4a-a86d-e3ad94f2d5e7\naa62c470-b89a-4d8a-ae2f-f5cd03dd3fd6\nfc2d98e2-a7a0-4c3f-a2ea-c59a2f9fd11d\n8d2ada86-babf-4525-88d5-44d46c082778\nc9558966-68c2-4cff-b7ef-37d312f847af\nfb5b372e-375f-46fc-abda-f25e9fdb6d97\n82ee3235-a006-422c-bb79-f06600439b36\n3e8cb0c7-c30c-4c12-9dab-5270d7b32658\n1c8d7e39-8f5c-4e99-ac1f-7d9571795990\n0c03ca29-f5bc-4f03-9de5-cfe9e3ef3163\ncb49716c-7c92-47d4-a3f7-7cd2012bc0a3\n0fd528fd-0ea2-4214-b044-083799cf0220\na245c269-0f4f-4b83-a94b-337f10c87876\nb828d0a9-7e41-4054-a607-1f40c8a2aaaf\n6eab7b9d-f3c4-4bd9-88a1-497327263644\n4f1c0629-d987-44f4-a76e-6d4dc1b1850b\na84fe73c-e47d-4ba5-93ae-151c5bd5784f\ne246f39d-bc6a-407e-b825-4dcc113a80f3\n71d4bfca-b67a-437e-9460-c458e8e127b9\n639d8184-194d-4aff-93cf-4ddfef799b52\n02402bfe-2393-4425-a8fb-b25536cce420\n2dd96e20-d5db-44f1-b8fc-14d928a02c3d\nd05fb36c-4a4d-403d-b88e-6fbdccf34119\nf695dc72-82eb-4e85-b6da-5fd1b9938330\n780bc0bd-7b61-4867-a827-10d4d6ebbcf6\n88655a67-b776-4834-91e1-13cbf3bd400b\n20c997b7-a2b9-4c0f-812c-f8eef9a15da8\n6fd635f4-b0e0-41c7-8f14-f74c2108ba5d\n07f310bf-d5f7-4ad1-ba3c-ece8c97ccd00\n805d2da5-49d3-4fef-ae22-abfe1eb27c00\n8c98b59d-71d2-4af6-9b73-4822f9b124ae\n35c3aab0-9f37-4005-be0c-c83fabc5bb98\nac0b6fb0-5a86-408d-8e6d-eaa386a017ee\n55dc8ac4-7c50-4d0d-8bb8-e64406fbd22b\n60e95a56-09a1-49b0-9a16-5f5dca6af6d7\nfc76b4c9-9efc-492f-ab49-89b1456d8db9\ne8d35869-e794-4a18-92f3-aea119c8ba9d\nc3c669a4-a376-4d8f-8d57-b301800b4ef5\n448fa7ae-4f4c-416e-a3c6-fc39650a35fa\n6d8fc312-1d85-4b6f-b9e6-d8ef4a59280b\n613d727d-03dd-4fc9-8bb3-08b8be7ba0d9\na2561563-fa80-4e5c-9dc1-e42bdc5f99ec\nedaa66be-89bd-446a-9aa4-c4e130c8a701\na38ed61f-0326-4f4d-9893-97a689e64092\n11e77ac3-4b28-43e9-9edd-4cdecaee97e9\n9a906c1a-3f12-44e4-a159-540be84175ca\n1e7bb134-993a-4b0c-9861-eb744630af04\nd89cc551-6917-4be2-a046-1e72badc86ca\n08a9c59f-1dbd-4f58-9281-0abca644a7b5\nfc23f338-7570-4baf-bd12-55bec3ba353b\nd4971427-5077-430e-b34b-2736dfa1a77c\n7bd76d4a-b309-43f4-b111-cf3198d29a72\n84f252fa-1ab0-497c-9439-28edf9c5302c\nb84af075-8551-4f75-bc5b-039315231b02\ncee2aac3-0d85-4ddd-aa27-0d86aeac1eb1\n80342bc2-edcb-4b15-b3b5-a97a200eab38\nef6f5aa6-d841-421a-8b34-0f6199c3c505\n0c5c6399-02e0-4dff-8d55-0f14b936f333\n27380f06-805f-4b53-ba61-9940afa6d74c\nc13261bb-fa45-4c3a-96f9-e1fc7cf8b866\ne6f5ace2-8e6d-461f-b00a-9c0d41909546\n4a6c3911-c0b3-42ab-96b3-47873577dbe8\ne26750e5-3456-420b-8227-be19e4576296\ncdf30531-81ee-4325-82b1-8087745811d3\nfa42004a-f8fd-4b9d-9ffe-1fa709bfc505\n9d005b65-6442-457a-8588-4cf7fae4f407\nc620d758-4d28-4e12-8ac8-b36f2bfda440\nbe502184-6e81-494a-b236-061cbf9d45d2\n8776194a-43bf-4bee-a666-8564f64d8110\n6f3a1164-d330-4816-9677-123d57c9b2c1\n463c0964-fd73-4659-9a59-b5e8372f97d7\nafbf5d22-736c-4ba8-93fc-b9d05756adb5\n7763948a-7eb7-403b-91c8-e1ec1b61ed9a\n21679aa7-db89-4820-9d59-7c7df26636b7\ned5cec0d-cca6-462a-939d-5539630d9f0c\n3c8ac785-8af1-4229-816e-d0265ddf73e4\nd2aa725e-63c8-4970-918a-fc0b5c30761a\n76b4d3be-dc7b-4097-a0f0-e9b5b87f99bd\n1f5d2efc-ba42-4fda-bc1a-9a2cbd20e9d4\n83982eb3-b9fa-4f1e-b3f5-f0a328fe087c\n127ceab6-0b41-4943-9f6b-84c68021f8eb\n659a832f-f5bb-48d3-8038-4803a41d5308\n194964fd-1681-42ee-940d-b8ec46f0d42e\n137d7f03-e836-485f-9b11-237e4622cbb8\n0978fb99-37e1-407a-aae3-98c1dcd205c3\n72bb6748-ee5d-4b52-bf40-8bf72ba473e7\n208b01e2-f0b6-4581-9602-29252515e062\ne9825263-3003-4308-bc48-a95612a5639e\na607b63a-9b22-49e6-b42f-749adf239250\n2e2e4546-d74c-466c-bca0-c5d7cb3655d1\na8ca6fca-1787-4bec-914c-b3b0358400c0\n7a02798a-5311-4b5b-b7ac-ebf6e282df9a\n17534ee5-98fc-4176-91ff-62fb9a223cff\n6b839025-c36c-42ae-b7bb-4156a50d86e4\n952f87f7-5c5f-4738-a64e-5c2fc3fafaff\n2f5674ef-5677-43dd-bcf7-070b8f24ff7b\n7fda78ae-c188-429e-86bb-5b66b83a7e26\n1457e361-9def-4cca-b53e-2831abcacaa0\n202dfc6e-9d91-4a76-bc81-ed3c5cf6481b\nf2841863-43ab-45b7-9047-ce57ee5247e5\n4be7873f-c228-40a2-a0cd-699b4fed9cc2\ncb7cec56-ee21-4545-9770-e9c1cfba390d\n0f993c81-dc3f-49d6-8225-bd119782edb6\ndcee0ca4-7adb-4a00-8e6d-c7a6abf79e63\n797aaf4a-0248-4367-9126-a25433dac4d8\nc447c2fe-21a6-4a05-bfa1-270788f4a654\n06347c04-e729-429b-be05-427c50281a14\n8660a0ae-23fa-4d34-adfc-ee18988455c0\nda3f31cf-ad23-43dd-8d45-e82a6578efea\n83c2c8df-70d6-4127-b409-f73c562b09a2\nc8fae4a4-c659-469e-95a1-853ba54468f5\n6fb04f2b-eb5f-4f3b-978e-5b54530eb579\nce096538-49f6-4b98-b491-b809294325d2\n2e91e96b-d777-42cd-af8a-ca3334a90a96\n5f4b80cf-a8b9-434b-87f8-01bed8858146\n12077c20-a570-4bec-9eb2-4a863af025ac\n60af4655-a836-4143-8692-7d468d9126a1\nb1041705-af48-4512-82d9-a3bd071a9466\n88a87d7f-ef9d-4bfb-a273-7b83f659fd98\n1e3a684e-e9cb-4e68-8825-a725ceb60bc7\n4d0fefbc-3cf9-441b-a328-88f98a50dc7b\n364ebe4c-b553-48aa-bd8b-facd52304e86\n456a452f-0cbc-4ce1-b283-6f9e3774cbf3\n3a8cda2f-0f89-48a7-b029-1e3c6e47282c\n1893c8e8-f74a-4951-804f-1878c6c5351c\n79cdcac0-af44-4375-90d3-82912f5c501e\n6e5ca387-4b15-412b-9105-1ac2be4b31c7\n1912d88b-8cf6-4217-afe3-cca39f58d655\n514a8ecf-76e8-4db7-a1cb-4eaa53ea89db\ne0e8dbee-57f6-4230-9da2-36ceb9a4136c\nbd299f61-ab03-4529-9301-4d142697a058\n8044faf4-e251-44cc-84c6-ca2125275f99\nea6f81c5-3a7d-451e-8333-265cffd81038\n9b5a6ad0-24e8-4985-97c9-c441bb8418b3\nc7b10e00-3d66-4bb9-a537-ac44aa128dd4\ndb36a2f2-1b9f-427a-9a96-59f90a5b5e83\n6441b845-6718-4fa3-9938-b166104df968\nd6159d79-290a-4007-b7b6-50e20e17d942\nc8151f05-325a-4214-92b4-481170daa42b\n7788c201-a973-48ae-acc8-92913e38b13f\ne51238e0-87a1-408a-b696-5cc34e87c1b8\nde499f90-2ff3-496b-88f5-40c16cd5fbb6\n0dfef45e-d95e-42ba-8f93-3f69324a74ab\n22590ad9-3b5f-434a-8f7a-e65ae94efe34\n1bbf0f8f-3bb3-48a6-86ae-d774a6b1a1bd\ncb7ea00a-679c-4d82-818b-6798bb66acd6\n2d06eb10-5a9d-46af-aa26-f815b09acdd6\nd18109b9-094b-45f4-b229-a1088d62f2c5\n699bdd91-c290-441a-a504-22b48484dccd\nc563ab79-9dd5-4f4a-b97e-5afc7485c1a4\n59fa77bd-d013-48ae-add6-70076c0eab07\n8829a60a-a38d-4061-b6c7-e79c1aa415ea\neabf5abd-3ad7-4460-b614-3eca9bc62230\ne395d792-875b-4e02-ab54-ef0619652edd\n36b8d1d9-0438-406f-86ae-6689a62c1bc2\ne7477ae2-498d-4b8d-b1f6-876116272c04\nf4ba5206-0a38-4f96-bff4-f1e9d93def6d\n78f10437-fcb4-4080-98b7-41599ae994c2\nfbc481b9-af3e-4d75-8e01-131d6a2bf9f4\n47115f30-6fc2-4c57-9a75-2d6c6c0a084b\n104b67c7-1703-45ad-ac11-a1035025b8fa\ndaf3ad5a-2b00-4298-ae0e-606d956fee1d\nfcbb7470-60f7-484f-b37d-2f5a5faa6d34\nc9d9b1c2-b4e9-4915-b6c5-200fc20ef388\n2085a4d2-e256-4534-b9ce-e0b2bdfbfec5\n3053615d-0a6e-43a1-831b-5733690b64c4\n0f89a65c-6bca-4353-8a5c-e8f47ee5804d\n8abaf8e3-b4de-4be7-b788-b2759d8bad33\nce958aa6-fecd-4653-bfaf-0be06ce94c96\nadc65151-c9a7-4870-952a-3f7f268e313f\n4bd47a6b-bdbc-42d1-91ce-e883f20985e0\n515e72a0-7901-4ba9-9200-50200f112182\nff5ade1f-c528-4143-9a76-766c33cf3913\n6c343603-26ca-4c2c-9e89-e7bc52d8b0d0\nfdd28137-481d-42d8-a744-97ab777d427b\naad1996a-d000-408a-a38b-e63582b6e004\n87ad63a1-21fd-4768-b22c-5caf16df2879\nf8cc7d91-55c6-4b6e-a4f0-cd54d02db4c9\n5a2d2377-b7d5-464a-8216-3deffae313a7\nc215c2f1-6f3f-4330-a7d9-6a50a20af278\n85b68ee4-78f6-4f4e-a20e-f5059b9bf3a7\nbd20dbf4-ad04-4b96-a5f7-1adb30cb4242\n2b818887-ba99-45bf-83d8-91bd370da191\n387307aa-3dfd-4e12-b969-24ac44e80050\n5a96bc77-7eb9-47fd-a2d0-8b1abd9863fb\n61f4b96a-e6e6-4863-a881-2a295544ad31\n168e3e90-3a6b-4274-9523-9251b676b8eb\n1b41f656-f206-4e47-83c3-bad8e80c306a\nb7322123-ba09-4692-9ac6-9cbeccd94544\n5e27927d-c1a0-4a47-a482-4bbd50e8e806\n4bce2430-ccff-4986-b286-35462508f70f\nfbd5ea40-c450-449d-9f2d-e5991c4af0c1\n3c7142e1-6805-48ad-8f7f-16e9b7bd9a5d\n40aabbb3-ca92-4bae-9bb7-6b51fe77016c\na7f50ee7-f080-4759-9cb0-0d2a60c38ec0\nc4cb5e4a-ca88-48d9-af56-d6c8705e9357\n272d50cd-0978-4cc8-be74-1083d877a946\nc24035ef-3c5c-4297-b724-9a9c6fce1b90\nb2cd8083-0e9f-4fc0-a1df-10e0a50ddefb\n2015ff1a-5e25-466f-bfe6-2cf42b68f4f9\n99b68f77-46be-4659-8ca2-ead54b7172c6\n450687c9-3162-48f8-89e2-7181f1a3d49c\n2d7f6653-fe40-425a-a0e8-63f49f7b6688\n58806e25-2f80-4e33-b82d-042d1ef2df04\nc520870c-6d32-4a66-a0ca-d470042b1900\nd04d4330-b36b-42cc-97ed-110366b39d41\n6756b8f1-2ca4-4e01-aaad-3db19fda78b9\n90664627-d04e-4b73-b1ae-57a822998033\n7f87a97e-c5ed-4c11-8f52-a4364c532c54\nd6c3ad7e-21c5-40a6-ac9d-4bd47a5a9ee6\ne409c813-66c7-40f9-b7fe-c05b2d0114f4\n2c962264-8ee8-4d94-b57a-c4038b60fae5\nd1ef3c0e-baeb-4521-a176-90c38af632ef\n45e6600c-8213-418b-9fc1-30ad9c6bf5ae\nf3c666b8-053a-4025-a552-325eb5bf61af\n96267585-d00d-4d1a-8d71-8c8ea153a43d\n93924be4-5980-491f-975a-e4e15a184c57\n47ef5ca0-dfac-41a6-8d89-c487590e61c0\n6fd369be-1ca3-40b9-8b03-d89ce1c0dc51\n41009d2f-03c8-4d16-b95a-5ad82f7c63fe\n013402f8-4dda-42ae-9ffc-92f9db0216eb\n00950bed-2daa-463a-9f8d-c493767beeed\nc3b50c33-662e-406e-8862-e172ba3ba2d3\n79ece7bc-38fa-4d06-95dd-13dbdf4dbd48\ndc570bf9-12e0-47fb-9437-a5db6e451cc9\nd6257cda-e30a-431b-9364-6e325ac280ae\n7ed7f23e-256b-4a1a-97fc-cde5558b4ba8\n0622a609-3e20-426f-95a7-d20683e4a15b\n33990325-b1fb-42da-ac15-0a21aad11b60\n3fd0bb9a-6c82-4d53-9258-ce7a1f4df9c5\n171a6524-b4f2-4159-93a1-9ffe658a87d6\n5da63c33-f58e-418c-a6d4-36443ad07994\n2066474e-fbe7-431f-bf43-b2885c02372b\n8fef1f61-ade2-45f3-9409-7f966308a2c2\n65089a82-2769-4466-a779-32cfc92c82b2\n65d2d91b-57d6-451b-8544-835fc8fa08d6\nca3eaa90-a612-4220-92a7-b2f7dae3c456\n67a28502-3783-472e-a9fd-9b35457286b3\n6e0b1edd-ad4a-4fb8-9edf-0a685912ab53\n078bb57d-7f36-4bd0-bc1d-39c62ebaf016\n833a891c-892b-48c6-9a91-52f41dc557f9\n94e70b6c-3f91-4d75-8d7e-b3e41f9591e8\nd3b571d2-aa41-4e9a-b005-dc6fb37b8a22\n111d6907-cd06-490f-ac60-de39e761f13c\n3918ff67-9b98-4ff1-845b-8508bbbf3f84\nab454a22-263e-4f81-8180-674fe9db95a3\n2fdbedaf-43d3-4823-a737-0cddd908e911\n04216eef-7f25-44ef-81db-b30304023aef\nf94e4c30-5e11-4f8a-b7f8-9e819d27f717\n22cf52ea-f7c4-4e49-b6b7-e4a47b70b285\nf57a7d61-af27-4773-b62d-c87fb03dfd1c\n060199e1-a02f-4776-b521-8745ce616922\nba0acbd6-7b27-41bd-9ecc-e3263500c404\nc5675ede-b90f-4e2a-a4c0-c361a9bc4dcd\n0072942d-157f-4fb8-a516-50b44297bbb1\n1f8ed30b-faf1-4b4c-8f3b-36b0a9519b64\n27ea09f1-703a-4f48-be9b-467cbfe2c683\n203de515-c705-4ff6-ac4a-5266cd07af9f\n66950109-3a53-4c36-8554-fefde2f350b6\n24d2edd1-0e7f-4718-841f-1bbde12a19a1\nb1e7fe6e-7b48-4478-8aa4-e11a0ca5df64\n94f2b661-db6a-4440-a5c8-de20499c54ff\n2f23f69a-86f4-45db-8da7-a4a51d983030\ne2249cee-4f56-4027-a501-1af1d71983b7\nc172ac77-0968-43df-bfd0-1f770b22ca32\n56e7445c-eadf-4dd3-9dbb-fb2259ac60a6\n7e91a47d-fd44-40fd-a63a-5abf31965fad\nda444b52-b8e1-4029-913d-c2579d62cbc6\n84ba685d-14a2-45a6-9396-0d1b124ccd6d\nedd6936f-4b74-488e-9359-31d0e4117fa1\n0ffa0572-5049-4d45-ab68-97082bba3cdf\n91bbb158-65e4-4684-b60e-0af6ba1c49c5\na62c8255-4504-479c-b89f-eaf427c87a6c\nae133529-b879-4733-9a8d-dded91fcc890\n6275219f-d993-4441-a532-154e5eb487ce\nfb5daf29-ac0a-48e8-b92e-2ad85ed3fac1\n46da57eb-afcc-4ace-b816-64746c425e36\n04f5bed7-eab2-4719-9dd3-0c46d51cd688\ne9374d58-ee76-43df-acf7-0a659a6352be\n7100587d-733a-49a9-aec0-704efa081ecb\n56b4bc1d-840d-4948-9dae-e5f90d2f3fc7\n76ea8773-5e91-485b-b271-06fc9b3f4e0f\na815bd0b-0398-4fa4-8d6a-692a7cfe2a6b\nfb67e478-f7f8-421b-bd8c-422b09f6cd4e\n37c5b476-6a7c-4127-b149-73af31383df5\n066c3c26-82e0-40bf-a6da-1401fbca71d5\n07cb96b3-6f00-4927-8ee6-d98377d0a140\n926f064e-d132-4621-9451-456386824bd7\ndddda20f-914d-4fd8-89ce-9adedebffa3f\ne35af44f-fa5b-4022-b785-adb0120fe0d9\nd05a3c0b-a8d9-4695-af72-657af333e96f\n8f1e1bac-6bec-4367-8d8d-471d6ba47b35\n7e0eab25-dfc0-44b6-baa9-41dca6781bf9\n087cac66-46e4-4097-a2ab-658d677c7f98\nf28c45f1-2a59-4287-86e7-f7b81a2eeb9c\n1c4501cc-8b12-4104-8e0a-188176b42b3f\n200815cf-3418-4c52-9781-51e3476f7b00\ncf1a2548-39f2-4a31-981b-7bed88b91c49\n676864ac-9d43-4fa5-8372-55ce95f7bca8\nbfcd8b3c-125f-4bcf-99ca-9b49650e2a82\nf1960e47-762a-4352-8bc5-09dab7ce4343\nd237ac1b-aa3c-4f66-8d8d-7a9e972bfef9\nb6fef039-a266-4b2c-9295-8d0df1780d0c\nbb171cc3-9f0a-4e70-9c1c-f485b40da7c7\n541d41bf-935a-472e-99a2-a14121f4f336\nd65c8007-9e6b-46c3-b45a-2f1852f1f5b8\n2d84897d-aab5-497c-bb7c-b7cf75d9cce2\n455fe7a0-f73b-422c-bfbd-992f32788b56\n1bc96c1e-b2af-487f-b499-8e3902552226\n73d2bd5d-537b-491d-ad7f-dc9013dc95cb\n9ca14999-65b7-442b-ab0d-e26e7386085d\n5e35c418-672a-4a18-8310-8b185e1600ae\n35d993ff-e4ba-4002-8309-28870850d8e8\n7dbe6a69-e9d7-4e7b-a178-9900c608a519\ndde2dc5c-c568-475e-836f-5981549dc5ef\n91664661-05c5-4e63-bed7-b3e537b64168\n1f9d21ab-6eb5-4a6c-95c2-3ff93c9acdba\nd765ded9-dc0a-4b9a-b8a3-300f711d5e7c\n10b0336f-118f-4a01-83cd-f6a9b5754388\n64012816-29d2-42a1-b422-922d7882043c\n66e795d1-01e5-4e14-a6dd-2c425738a062\nd780cda3-6aac-4061-8a69-aa0729aadb73\n3017422d-0d42-428d-beb4-963f481d9e02\nd8dc4191-2b66-4bef-82b2-4a9a7b0495dd\ncbdfe072-e40f-4b74-9e43-8d55a913df5f\n36f86b40-37aa-4ae6-9208-1d87408ede4b\n89ebac7d-1eae-41ae-be71-ca9312579265\n50c91d5b-8fd2-4520-9823-92a4f377f20f\n823c2072-2e6c-44f7-b665-0fde92a3914b\nd556a4d0-3be1-4752-947d-6e1564a2c7e8\n644c08e7-6300-4dbe-9ba2-af71936a6ed9\nf2df6dc2-bf8f-418c-9752-304729176302\na936bafd-7d5a-4498-a467-10b004889e32\nc54c1fb3-7846-44b1-a59f-6a4ea496b770\n689fce33-7786-4c91-921b-3265b8f5d9de\nfdb6a4f1-9885-4c81-8a53-b2a7eba4fe3c\nd6dd2428-7e74-4c71-b3d5-c157c4ae0202\n42bb5d59-5caf-4f77-ad2e-b6da962aa005\n19f6ac9e-ffc8-40d3-bbb4-117035ebcbcb\n9232ba80-3eac-46c8-b69b-3a0905bc71cf\nc3832acf-9006-429b-9fb4-2fae6a33c0fc\n8ea398e8-d898-4fd8-8734-605c11620c47\n82adc9df-4e00-4b3b-b10e-0def633f270d\nc0e43d70-2ed5-4b9c-955a-42794860923e\n7b7d4482-69d0-4ead-90a1-cecb8366b901\ne94ea0c5-41b9-46ee-9ef6-6bbfd1ecc8ea\n4dc34a85-138a-4ef0-815b-0bd3647ff28e\n71bd4e5f-5869-4497-9c2e-79405b35d38d\naebdc54c-35a0-4e28-8a8c-3b201f1b7a63\na58fa6d5-a6d4-46e5-8d9e-d00f3346d0df\nc34a8969-d3ae-4c7d-95af-fbd5bdb44e93\nefaec864-f26c-48d3-802e-b36e8d34d849\n9df745e2-56d3-460b-84d1-d1bd7e065a30\n4acfc00b-86df-4683-bb14-a6d8e892243c\n5e8b1e1b-5432-40f4-8d5d-6ec0429d164c\nca22d2dc-d015-46a3-a83d-6b0e88895206\nc83809c5-d758-4226-ab0a-a0c90aff1417\n516a4183-d927-408e-b0df-2413a1e850aa\n7af0547e-7f68-498a-a97b-664552b284a3\nac93baac-75b0-4aee-b5fe-732c68885920\n878555c4-0169-4573-9970-e39041a21c09\n91810a77-3c17-4550-918d-1f104851d1fe\n30026583-2e4f-451e-aaf0-bf5013186c7e\n5a7b3ce9-82d2-41cf-9f3d-705ea0141df4\n60b684de-3116-4dd7-bbf7-b79eeae786a7\n1b649c77-bea1-4f4d-ad4f-b925cb7a1320\nfe906050-b9df-4558-867c-a70b788fc281\n642ff2f4-8f19-4157-a6ab-65c7474e06c0\n75eff250-4043-4762-98c6-9876a10d9606\n2ea387c7-b11a-407e-81d1-9f1fd9c3f0c9\n0fba3b58-882d-4e7b-b1de-518bd42696cc\n516fc4ef-e22f-4289-8949-530f3f712288\n3262c27a-d399-4627-aa2a-76b7818f0fcc\n683e3d41-82b0-4953-a264-43207527289c\nff4bbb56-edb0-45b1-9991-ef40e7b421c4\n4bcceee1-6648-4de8-9035-498685c4d316\nb17ed1a3-ba2b-48c5-9083-10e4c4fdc957\n8beb0732-3891-4f0e-954d-be3e146c3468\nece72189-e2cf-46a6-b3b8-311b55de8286\n5632d49f-e89c-4767-b4e1-704329262f2e\na9dd0c6d-3968-4d32-91a8-ae7d969c1294\n89e0e128-6db0-4361-a2a2-44f624e5209f\n2862b1b7-b901-4853-837f-a9deb3fc6b64\n8084c9a0-bf15-42bc-be8b-cbf811399b06\ne38c76eb-8469-42ac-8164-5690bc9ee525\n00db1f4f-a1a7-4a45-8d11-ad9f1c9e3590\n64c719c6-c23e-4d7c-beaf-3e2c992c346d\nf2ea18cf-3e7f-4486-acb8-999822c84d70\nac66425d-8c54-4ba3-84f1-b4d5a409eaf7\n3de0ed86-a2d8-4b38-8f1d-03c6191fb796\nbe5e96e6-ec3e-443e-819e-afc656e9f9bb\na75e70f3-a16f-4d50-aae3-9624c091899b\n5bfbdfa7-99c9-4814-aabc-49fe8b773524\nffe33db9-2af0-486b-918f-51eee7f19c25\nc67bd623-0f73-4526-8a4f-1376156ab9c6\ncf2aad33-174f-4e92-8924-7bad9a7f026b\n65724a19-d09b-4d6e-97cc-0996717876c7\nee06988e-d020-43eb-b03b-3bb7952f22d8\n1f282d77-3491-48e8-9b59-6e3ef5add60d\nad4eea0a-c09a-4c39-9b4a-a59b64e5c793\n168fffce-2235-4764-9ead-41c85db42a23\n3160be6b-6e7c-46d9-bd5e-bfc7f31786f0\n0c85a0e7-d122-497c-872d-47343b4a2794\nac4c90c7-bef5-4613-a2d5-084f860ac3d2\n48878a12-b562-44c8-ab9e-cb2b7ef7e68d\nf870aa4a-ba16-456a-aa4f-47ee9b79c841\n1499b7bb-6430-4ddd-924f-bd4f2dc15c7a\nd868d2f3-38ff-4518-a7a2-9d090f85578c\n750ce7b4-cfec-4331-997d-7ad3d06fe057\n614c690f-72dd-46ec-a871-711c829fbc4f\nc3f73870-0293-433c-b41f-340c90a84883\nd1f8d7c9-fa3c-4f62-b34f-819b76f10e38\n643d1f86-b348-4045-980f-ead782b58831\nd879d5e4-5b66-4c6c-bac0-f6081c6956d3\n376f286d-1577-4270-a281-bbffc90ee63c\n405961e2-6ae2-48e4-a711-312d4dc6d025\n8267dad0-cdc8-410e-accb-6eeeaf7a0a31\n6f23f61d-cebc-40af-b676-117adb543b92\n42728256-13e5-4550-bc52-e630e679a74e\n071ab342-f9b9-4c1d-afdb-d915854dda09\nb36d4dcb-e838-4add-8c15-dff00f64580c\nea8ca680-aaf7-4062-93e2-552f97ebf67b\n00c2de13-a6d8-4f9d-9dea-84b22d73b53e\n7463a6a7-4de9-4fb0-ad35-cb8aebb9ccca\n3143f140-3203-4547-91f9-feea53717eea\n2545a675-bfce-4b7b-a47a-95ee69d66c8a\n542ba50c-16ac-47fc-882c-f426add65b38\n58113a5d-5f59-415c-ad1b-f76c7947bf39\n9781e133-a180-488e-bdd9-6798d6f9eb80\n44fe391a-b05d-4bb0-b0cb-53ae59726b7b\n25b61bba-11a7-420e-b7ff-24ec1032df5c\n86198206-f5dd-4a8d-a114-45ad4982418d\n22f3d33f-7cd5-4b5d-bb4b-687d4e6551f9\n6398c945-586b-4ca9-a996-80900f3eed7b\na64c68a0-76e8-457c-b15e-230b258d143b\n495ff85b-4f90-4a9f-975f-86a2341ec71d\nae312308-df9e-42f2-b278-0a73d7d965cf\nfba81e4c-926e-4c72-879e-64ca81480c40\ne3b41bf8-e9b0-466e-a1b4-797141cae7e1\nbf8d4d28-228d-49c0-aebd-e8f67f0e5caa\ne080d40c-fdc8-443b-b0e5-c90b53e331f2\ned720290-44a3-4334-8d7a-49a92e40a807\n35fcb4ac-36cc-42e2-b4e9-2e1b8e56f912\nc9882aa6-20dc-45ed-9d30-1e3286f7b084\n291ffdf8-9943-43de-a4cf-b376a4a0327f\n7f5763f2-26da-482f-b843-fe943780d45e\nef67abe3-b584-4872-8825-f9d3af8e0a38\n74752bbe-7b45-4cff-a372-b7c307b0bb7a\n1b24b7b2-c1e8-4ce0-a1b2-293ea5ce092d\n2537f2c9-cae9-471e-84fd-f805a52ff83d\n5f18842a-52ec-4729-92ab-23d8836b3582\n0d4f7943-953e-4447-b2ed-695cfd102642\n32fa7f56-44f1-4294-8359-19d9884fe13d\n9db028dd-1d7c-4765-acbd-dd7bbeec8f3a\n5c02b8eb-f9b3-433b-b768-63941f246b5e\n2f301bdd-08f2-4c4c-8fe5-dae8a2e634ed\n382706a2-9543-4d4e-b008-339c11ba3d85\ne82bb1d5-a1c8-4259-9970-39634b107fa4\n749df9f9-aedb-443a-aad9-8617c3263b81\n6bc7e943-83df-45a7-bd3d-cf4c511ca77d\n8b4098e0-8180-4898-9e15-1bcde4254e2d\n75c1a452-61df-40f3-8da5-1e424ab58d39\n76ae523a-9eb1-4b93-b4b0-ca75924ab2d4\n9dfd10ef-0a88-4bed-8f20-c7558c5f1e41\n12ff926c-9f44-40db-866c-208ea760f69c\nd33afb31-c9a5-4cfe-b43b-1b9670ef10e1\nce9a731a-821b-41be-b7ef-ff892092005a\n74f40710-f056-45ff-b94e-97e6d998d0ee\n8702d7d7-c48f-4ce4-a625-ee2aada68ca0\n1832e579-0a0c-424c-b6e4-9189609d61a8\n13c16c1a-5a23-4a55-b405-d3339afd7888\n1a113beb-d9f3-46e3-804f-d3312c0c92d4\n30cd4a45-2244-47dc-bc5f-995ac6deb518\n9a9084d6-0802-4d84-bd0f-c580b994c84b\n876e3ca7-1979-4115-9729-76f9046a24be\ne90d1ef3-dbf7-4418-bfc1-5f49fb319193\ne3f18aac-ae0d-4151-a6bc-df525f30b87c\n36a19e5a-a8b0-4f80-a4cb-471b398a0bb2\nc19d3d9b-a15a-4193-99d5-0ac6839c0582\n6ddc50eb-e1fb-4cef-b46a-0cb76cdd3f23\n168a27d3-297b-41d7-94f7-04dc35aa1194\na3c7965b-cdf9-4d3b-b78a-81c66368c9b7\n7239722e-27d1-492d-9fd1-57bb20d5f19d\n18cf1534-11d0-44b8-ae5b-8508d2e2b9bb\n25834688-96ce-4214-8606-74a6f99f7c7b\n20957c3f-3b99-46ca-8be9-687a87b48bc7\ne4cf24e1-58b1-4985-9d9c-fc243bee6279\n78b216e8-3c53-4305-98b3-dcd8bd7ac0c7\nc6e93f97-a9ba-4280-9ed9-8a3a54428e5a\nab1cb083-1d8a-44ae-b5cf-e745acd92ae7\n2bd39fdf-ec83-433f-ba29-036813faf13e\n43e34b87-b40d-4793-a2af-41a15344581a\n6171a466-fa91-4185-a60e-4d58e5b0050a\n64336ff9-5028-4e93-8df7-55c62dce063a\n32fdc17e-4432-4e67-9643-e7da72b0ee1e\nc0d6fd52-5cbe-46ed-875e-5303a90d2f65\nec393b30-e014-49b9-9133-255095aebf52\n8c1facfb-6fbd-4a07-995d-26aa7b2b5517\nc6e2b7a5-4569-42a1-8682-474fe627faf2\ndbeb1699-b2e2-4f12-a064-9d756eb955b1\nd1c20e33-6397-44f1-adca-7d07a24a3a99\necfdd7dc-3024-42db-8daa-a54b85c5e0ae\n8a9880d0-88a1-4edf-ab44-a8038becb681\nf31b31ac-3f84-4b13-8f36-d182ff6e366d\nb16aaafa-1b18-4944-bf67-8a094c6f6c9d\n547dd68c-b785-4e95-9a36-75cf26c22cf1\n78c1ea4c-c456-490c-b112-c4276a653982\n912aa891-6458-4701-afc1-254821195f39\n1bab95b3-1c02-4de4-b450-224b247190e3\n58cfb05c-ae43-43d2-b2b5-e1212a0d672a\nf8feed0e-101d-413d-94d3-281a7778bfed\n56de4aea-0026-4bfc-8c43-9ea23bf39359\n4896000b-7db0-4273-9e54-e118f5809dfb\nb0ce626d-9ba7-4bc3-9d88-c6ca36b92a34\n893a37df-a3dc-474d-a537-37b96d9ae571\nfc0a581a-ff65-4cce-bce7-a494ab432423\nbda8d270-7c3f-4d53-aef7-ab817a000e36\n9346cbcd-f55f-47f3-ab12-9f2174373052\nc53357b4-59e9-4e5a-8e60-302d654b06ad\na78aba6e-0fc6-4d49-afec-602151242577\nec6815dd-a8d1-4ce0-b67a-4c4d1f9f6060\n873342cf-ca89-4b00-be0b-71edfac07a41\neff236e2-db88-49f8-afc2-5d79456d186b\n31d20252-5564-42de-85a3-ca3ac031ca73\ncd67cc63-c68d-42ec-86e5-4baafe9d91ce\na5305aef-bbc2-4672-88cc-c4e1e83a82fc\n1f78f904-67d1-4a5e-b8b8-e917b0b99ec1\n30ef1399-6877-4cde-b0bf-901878fddc3c\n52dd3c4b-ce4d-4d19-b3df-9b96b26d23a4\n0bc8dd67-966d-4336-96eb-3ac15d35e355\n9c0065f3-982a-4fb5-80ba-e6ab02365847\n394be73c-f30d-4b9b-99d8-371eb8bcedf4\ne02fa7f2-55b6-4be0-a0b8-e1d132a1eb09\nb4a67ff0-6d3e-4ed3-8c06-7c0d32f90dbb\nb4509257-415a-4ce5-83a8-3b687c102274\ne7d7d31f-64ca-4da3-a34e-26bd2c48776f\n40071ae7-ad0d-40a9-88b7-7e4b8e7fd153\n787349de-6c43-489b-b6de-56c6df6f4117\nae09593c-0b2d-45a3-8fed-d05dd911ed8a\n55fee1bb-26ea-4af5-9449-34078e96ec6a\nd3a402ca-656c-4fad-bc69-8d112ee9164a\n3c43d003-a546-4973-a9ae-140cc92ef8d2\n7cd91e08-66db-4a74-ab58-f3e25a6ad50e\n12f1d975-8938-41a6-b9b5-67499cefc23d\nb7fd6881-8d29-41f4-9758-f725d53a1ed9\nd3e61bcc-ddf3-4746-a870-7375556377df\n88e0c623-f667-4b17-bf77-fd2aa5e82adf\na3c0bec7-a6b5-42e1-8e17-21001fe4237a\ncbd0f636-b3f2-468f-8aee-aeaf1a5024d9\n162cfda8-d93a-48e2-84a9-d473647f4c8f\n9914cfc1-6848-4229-9fac-aded9f46b234\nd2f2b555-3ed4-4fd4-89fa-3923a17e0b64\ne33fd9a2-167f-47e0-b774-b2b2c0dfc5d0\n0434b747-796f-4681-8f6d-86c3d5fedfb5\nb57bb73a-72f9-4346-9930-805c55ed72c5\n30616c6b-fc9d-4cb7-abcc-f1724c973d57\nb50a0d31-2180-4d6d-966f-5941a07bbe67\n4d02429f-057b-46d7-b33a-5ca2884d3d31\nbd6a3105-fd72-41c1-99fa-caf4c0c5f958\n25d39c1e-3693-4136-850b-deae8310de62\n8cf4bd2b-f3a7-40f8-b903-3c6f5d1919c3\ne9445eca-f2b0-425e-b86e-7c37d4195bc2\nd99239d9-e6a4-4c82-a4e7-7df79a4da64c\n79bb9790-a705-45ed-a851-bc06760b599f\nce1d3f6f-6b67-43db-ad44-ffbb5343b9e6\nc7676352-db59-4dda-ba37-1193462e992d\n5e681633-bded-4585-af12-ac37a1d13eb7\n472daa62-c7ac-4bb1-90d9-1e44dc8235f0\nd3815627-fe6f-466b-9048-936f0f2d7c68\ncdf35b0b-4239-44ad-b530-4f6d3ef75144\nd66ed7db-b274-4d49-bad3-293bb91bdc33\n95608e38-f6c2-4f1f-ab9f-3608cb0b5ede\n51c04ea8-995b-4e62-90bb-fa540afd4eb0\n9b3ddc2e-43cf-4aa3-aebb-a5b2feb80b69\n208768ea-a026-4147-9f8d-80947b1ad88e\n1d14f6ff-0d26-4b7c-bae4-4dcceba96a99\nb6a263fa-9b7b-4527-a390-ebf03349aa97\n1be4a727-2f88-46c6-ad3e-a05152c4caea\naa47cc20-5485-4c08-a003-0a2180cc2baf\nf1bb03ba-e70a-4ce4-98e9-742f490e400a\nd83eeff3-3be1-4127-b910-d0b7fc2577ed\n89add72c-6dfc-4c43-a95c-3fbedd33d9bf\n7135c334-ec63-4f2b-8883-6456b2faacf5\n102e5295-8274-4ffb-afc2-4a5c05971826\ne4bca559-d87e-48f3-bf94-ba93f23d5128\n494ae494-e205-442f-babe-0ed4b0148e2e\n902a9f27-50e7-4561-9403-78e2c55c6760\ncbe1fb81-3484-4d8a-989a-9e5f4d95aed6\ncb995a54-55ae-4dd5-9e68-f9215463af64\nf52f2913-bfa0-4e9d-beb1-439b55036581\n9c03d71c-b79d-4ba4-b5cc-7e7f187e4aa7\n84693a3b-5a34-4d97-838f-6ee36bb5395f\n0458430d-12bf-4f90-88c1-cd2fb2bfc10f\n5f187e0d-cf5c-406d-a3ed-6dea71b918d0\nd4fd3ca2-9146-49b9-9f24-1cf351927673\n2a57fa07-e39a-49f5-b4c8-72b310ffc7a4\nb1eaa659-c4c1-404f-88ea-cfa8da4fac04\n429da201-0dcc-4c60-9b8e-556b5ec03380\n644f4c00-d215-48a9-8470-275260200a86\ne3540f4e-b724-4d04-8ad1-8390e6e2d2f7\na85c1261-64ae-47d2-b726-2a92acd14e44\n97ec3e74-cdbd-402f-a1c5-3b7e5a69e17a\nb1b75145-c5ba-435f-ae30-b83f89bb21be\nc1696759-5894-4357-b79d-955b87493095\n5dfc2339-3c15-47c9-bde9-ef8bb4d45b26\n7a10e7e6-cdee-4676-8d13-63f83a608595\n3c446f5f-4133-43cd-9463-e6108ab97b34\n23c62a07-0d78-47b2-9280-318928538f65\n73ed333e-e963-4b2c-80d6-2ea34ea08d7b\n284b8f2a-67f2-49a9-80ef-2d4d1bc254e7\n0a62ed37-8e6f-4ec7-bf82-cf63933a48f1\n30672176-a9a7-42ef-a996-0a4592033323\n6066f180-8711-4dd7-8fc4-a24cfdfd1a17\n4d179768-1909-43a5-9709-af1098dfaecb\n0a836c76-824f-47cf-9c29-22b93bc475dd\n5d80a0ce-90d6-4473-8ead-803773df0ede\n156a4893-a1d8-4fe8-97db-15c21fb67fb4\n33077d67-238e-447e-91db-66e2c8db7928\nd5e24c5e-a1a0-49db-9774-09d0c26bc6d5\nd490ba97-0d4d-421a-b52c-12a874d34172\n3e5e4a29-3f52-4b42-a61a-0fcff91d2593\n87c397ff-7410-4634-9618-2008c1844ebb\n3e0923b0-6f43-485d-9837-af2ec3387002\n47397586-91b0-49dd-92d7-dc6525e34ee1\nc5e6b2d4-6ab4-4cf2-8368-44be0b7cbd95\n8fe0e9aa-6c6f-4036-808d-3ab8767384b3\n4803ca86-0858-4168-aa01-6326c4a5769d\nd47b5b5e-2969-45d3-9475-053dd9607d86\n8fcc5b71-dfb7-4cbe-8b4a-d40839061588\n15a51970-02ef-4625-a7d2-ab2681c0e679\n9fb88701-c8b1-46d7-ad4b-d9f34a9c49bd\naf0747d6-0337-417b-b6d0-553248bf3288\n3b38f974-0678-47a9-b3ca-19a2cf06db16\n54f00e99-4da8-4744-affc-548360e59393\nc3e4667d-fa04-47f6-9452-80ff00fd9fd8\nb6437497-9c8a-4087-84c6-2a0ce6415100\n1172811b-ac0e-45e2-8857-d8b4331004d7\na1be09db-4ae7-4148-a9eb-90309da27339\nc0f4c9df-0b19-4117-8554-52ae3d315812\n2efd0483-dc43-41fd-ac82-3d3cb30458dc\nd3e510c2-bf7b-4549-93ea-8ca00a1c0b90\ncd16fb53-982c-45d2-9337-a14fc76da96a\nb09c513e-424d-437b-a779-f37d2155b90c\ndec96e96-2ec9-403c-9f3e-e784169f81a6\n115cd466-b285-479c-949b-d36bfab2b2f8\n146b2900-8332-4a1d-8385-fb9aade5e6aa\n992dddaa-4c68-497c-907f-96db9636dc24\n537d420d-e789-4e4f-9381-cc2204db2083\n7bdfbff7-a29b-4fb6-be6b-0ca7803f3a68\n7813aed9-dfdb-4458-b793-640540123e8f\n60e171b3-dcdb-48d9-be2b-eb4ad3348df1\n44232542-9a02-40db-81f1-01d9f25efb02\na9b991f8-b376-494d-8e26-3465a63ef3fc\n8b8e35c0-3094-426a-b3a3-27347d7babc7\na13c268c-b22b-49ec-bb7b-be5139644298\n3925bab4-9750-406b-a520-6e2d5a100ac9\n34849cfd-446b-41ce-8d9c-83f6b4001af4\n0ae41fe8-aeb0-4d07-b51a-131e3b3eb0a9\ncefee7c7-e267-4f97-99e7-b3ce7dc3288f\n848f9cd4-cc4a-4da6-ba24-a773e2a66261\nd5cd4e61-5d99-4ce4-bd35-3cfbdadcd9b3\n3a98baac-71c3-43d4-8e68-5b53de7187b4\n48763677-5c82-4338-a9eb-9dbea7e96eaa\nce9ee6d1-45f2-4290-8e04-98cbcf4b0e8a\n7e25bce4-c45b-45cf-9730-41195fcb722e\n6d1a4d4f-aba9-48cb-b222-7c259e5cb238\nd690db1b-c2c8-4151-b298-3a48a6eb7b1f\ne7a4e0f9-339b-4c35-8fcb-b9ae055eb700\n935cdce3-0371-4f75-8a70-8c836ace4185\n616ae6d1-00d4-4cce-a0bc-6e3f48559a13\n1d780ce6-9f05-4ac6-af99-79a3adbbf3b1\nc845522e-53ce-4f34-a513-96c85393dc1b\n58ab9fea-fd82-46e6-a7df-6d6a2e10cd25\nf1b1194e-d8fb-40d1-b0c4-2fc664a5fdcb\n325f0b18-7161-47bd-bef5-5af56ba45d4d\nb6746755-537b-46f2-acb9-e20ddb13ff40\nbaac4dde-c257-471b-a5c6-9aa5dd318bfd\n680fd341-df2a-4390-b06a-e6f3d451d1e8\nf9820ada-38e1-4893-ae96-bcac7d4fcdb8\n2e7fefe5-4f53-4690-a632-cc0628f07eb8\n77ff3eac-6527-44c5-a91c-78c1dfb848f4\n3b755e53-4da8-47da-9786-dbb6b82c209d\nd1fcdc1f-9114-4901-ae90-74c4a4ea5082\nb06d24f4-e625-4e16-81b5-c44dd3528aa4\n68160db9-32f1-4249-a8e2-2d3c7996b17d\n914c4b1f-c588-4cf5-98fb-92a4b5b1127b\nad6fdb1f-e027-4338-93d9-6f919a4b6dda\na4ba8493-8568-4347-8fb3-566d95b123e5\n965bd4ee-cfab-4902-8bfd-cbc6193f6eab\n27983710-4d0a-4355-8709-568784c0a612\nd9a9dc89-4742-47e3-828b-e8859f59cad7\n7b733e75-fecd-4c7b-a1a3-e46d7861399f\n7c95a5e3-a066-445a-84ed-b6f6659d2b96\n7db03235-e65e-4f7e-aab5-9c457e98683b\n552477f9-46fc-4a47-a177-5c93018a628c\nda7c930f-4c38-4615-823b-1d19b32db3bb\n0b84d83f-1cc7-4427-b2d7-228b6fd4104b\n161fd646-146d-4821-b146-9624764b0ab3\nb77ee39b-2d0f-41a0-a6d7-aef2ee44f3d7\n7e77ebd6-a120-4c72-8f17-652e2a3431e0\nfd56af41-d51a-4b49-841c-dd82d468fcad\n48b851a3-c653-4951-bcfd-2c3e9e396690\n6ad256a6-9482-4f8e-9790-6ae82338d476\n8d1247ae-564e-4c1c-a7ff-f834d69f3726\n1cb64803-4bce-43c7-bc33-3e90f5bf8989\n37f43e82-18b5-4bca-826a-8b9376b17ac8\n6ff3f71b-a06d-48c9-a7e1-7a51d0d7a38a\n71e7300e-d7d9-48f2-8d2b-dc09db8e5370\n5355e307-52ea-499c-883a-2c51a30eecef\n8643582a-c1e7-4167-bc13-c321c4a5d6e7\n61da3811-0035-4fc8-b299-3d324d3c4658\nbfc5f26d-8649-48ec-a0ca-2acf6a245c29\nd509ce74-5595-4427-949c-eeb14ad6160f\n8c2a737f-7bb8-49c7-916a-068d6843d0a8\n976b1a01-57f5-4c7b-aae5-188db246ba7c\n2cdcbf93-394d-4bb7-8652-d857f65c62f6\n7021eddb-42b9-4356-8d71-23676a55fa4d\n779bfc33-f196-402b-b189-c104a39face5\n63423f02-aecd-482d-8ce4-8919f14d9817\n657e5821-e145-4186-bf1f-1867e43955a6\nd6de3a28-8dc6-44d8-bb31-49313e9bd79c\n79111440-2e68-4223-9d72-87d59a3ae462\n64e6d68b-2964-4005-954f-1f38eb2dbd49\nae193ac1-41b1-42e8-8c61-9b94fb92ad46\na2048522-91eb-4660-85cc-906c1fba3608\n67647814-2346-4124-85d3-35e8e42e1da8\n3ae297ea-c04b-4eb2-97bd-b72cea125e09\n4502db95-50ff-4462-aa97-da47d5a7179a\n8df7991c-edea-4452-9418-1132b2e5ecfa\n2bf142f6-8983-4614-bf7d-9f5b9e8c9115\nfb84ddb7-44ce-4bb7-b499-05e2adf4640d\n1fde0f9e-43f1-429e-9d25-819d15bdd9b7\n0f9bd22f-08d3-4e07-8995-ab38d139b8bf\ncd4a2261-eb00-4999-8bf1-dd21beb7f42e\ne5190941-de05-4bec-91fe-05e16ad3e14c\na5a35d15-146a-4d54-ad7b-d9cac686154f\n4f37c411-acb9-4686-8948-f034c00c823d\n3d98c837-5d5f-4085-b58b-af5face8cd67\n3c9823a1-a109-4e22-be73-f251f8f9ede0\n2c3e94c8-eb7f-4d90-b2d3-1b232558aac6\n5add0fe7-6cce-48cd-b687-1625e8f12afb\n3b847706-b0f4-4f51-a29e-a9c37f014402\n4e9c3fda-0cc4-4738-afaa-937283e0d111\nc6f71753-8310-400a-8004-65931ec76871\n099fe655-7f39-49a6-95f0-563f9043a4b1\nf39bdf71-2055-487f-bca0-e08adb71656d\n66493eb6-8e5b-4767-ac6c-624866f1710b\nddbcc469-70eb-4971-bfb0-d2f702a9fdee\n1b0ad263-f25d-460f-ac0c-675673a2b906\nd608a5d2-fa6a-4537-8ba4-b073858f39f8\nd930c256-9461-40ee-acd8-a47e35cece07\nf18596ee-1f05-4b89-917b-ebd57e76061d\n1d0fa4a8-98bb-4099-8ffb-3d1eca00c15e\n6d3ca42e-7966-4fe6-992f-3fc232be72b6\n96b0d2fd-afa9-409f-855e-2c7d1630475f\n8b601d54-c350-4392-b07a-1af47c04fbad\nf7bf5c24-e1d7-4de9-ab08-b8a1150c6361\nc4f1b0e6-0ab4-479b-b15b-0b860285840e\nff4160d9-97e6-43f9-9561-cfb9169eaf64\n10df63ed-73a7-4ad1-aea3-80949d79c2b2\nb081fbd1-ef8c-4c3f-8d1b-3380bc8760ad\nd48a4582-911a-4494-a0b7-b34e78f3d17b\n33a69f39-04c8-476e-8c2d-f522494b3c82\n1bfcb482-9229-4125-9ce4-e1e1403e685c\n7f987073-1407-420a-a5c6-433065d45944\n187d44cd-54ff-47a0-83e1-0bb4435ba2f3\n88a8999a-d33b-4337-be03-7496f18784cc\n450f03cf-cfab-4d6e-a9eb-e307affa7470\nbf8a7cc9-3d1c-4884-9e4b-15dffcfcf298\n62922908-aa50-4e3b-93d3-6096305971f2\n5ceab507-54eb-4350-80e8-4c348a6ffd0f\ncb2fd655-bde6-4903-bb37-fd3c07bdd605\nb2d72703-3383-4566-b6d1-3758da411554\nb7d59a17-a1db-4439-9187-b873c1dd9348\n5aeb93d4-8b24-40f6-8edd-eb17a66d373a\n27010f38-4c85-4676-8b9c-f083cc524de8\nef26d2f8-ed69-4ba4-84e4-a6b4697ff8f3\nd441f3a4-92c8-44ba-98de-50b4c6a709e2\ne6c9f0c6-342c-496f-aee5-4e031d3b4065\n2c2d8598-1a31-4370-bbb2-7c7f837d0ded\n0b0d6e8d-91f2-41c7-8c04-30697ffc60fc\n3b70efc8-16fe-4c9d-8c43-85d4eb663c73\n30d64306-4980-4074-bdef-b6d24b01c29d\ndb8cc2dc-66e0-4767-a5ac-4cd76ba1ffe2\n8f1e0d10-a0e7-4465-9347-318009bb545d\n7a02e563-6192-4085-b15b-40c11baacefe\ne804f5c3-df46-4812-88b2-3074300de403\ncb2047d4-deb2-4ccc-aa46-9654bcc03a1a\ndd9259bf-bf6e-42c9-8e49-6ced65361436\ndccf5499-2dad-4b9d-a42a-cbe7cf7ffadb\n1588411d-78bc-43bf-95f0-638c6b997606\n3ddcf8d8-1283-4a5e-a31f-aea83a1f5ff6\n62d3b47b-390f-4ed0-b79f-3ab39bf70963\n5bfe0d84-54bc-47f0-8d81-458a5fd97d92\n24aa9d38-80b9-45f1-8dc1-e77d41f40f27\n02de411f-b7a7-41de-bf60-9c122c11d476\ndb8ac5f7-7e88-4b11-96aa-468d5b8d8584\n54f1acd4-efdf-4bc4-aee3-e67ff5042abf\n74cd568e-9fbf-40f8-853b-6620d6460402\nd10366d2-ac2b-4308-89ee-29c678c6fd26\necd90d93-60a2-465c-8a4e-9d83dfbe9e71\n25adf17b-b387-4639-90b0-aa3f787b9e45\n0438147b-8345-45c4-947f-8582e303f2f9\n294126b8-7745-4104-8f8c-f8049cb2fd0e\n53ac169c-a655-4df5-8a9b-da3a6c6bacaa\nda869f2a-1f2b-4b8c-a988-4b154b801711\ncdc6820c-d5e4-4707-bbe0-8cddbf4147d3\n2bb2afc5-8977-4148-89c4-4eac32abc2da\n0f11cc9f-4ddf-4101-ae04-ac10b7ce3103\n7f5bf7f5-1fbc-4cf8-a37a-c5ac9848324b\n8c82e5d5-67dc-4537-aae8-649cb21f8b38\n3f5fed89-daed-4c0e-b126-6cabfa06af7b\n063fb900-fbf0-490c-ae40-8f79beb0844b\nbb6593ea-dba1-4700-a757-8df5ccb2fa7f\n0ba7f7b5-3cc1-422f-bbc2-fa7e370fc8fc\n858262f1-f3f4-43df-9f13-66c680562016\n26a13ba5-c883-417a-9bf9-e6944db54bc0\n873fda62-82b7-4546-8b76-a29ef73102b8\n2373e6d4-d307-4189-a60d-b09239c97c88\n3b68cd92-813d-4478-ac23-4c28124db706\n1f1e2364-80f9-43cd-8cf4-44c0d8d2ab59\nbf1fcfa9-d4a1-4698-b842-8e847cf023e0\na7ee7a77-a1d6-487e-8a4e-bc0169be7ccb\n6d720eeb-0c71-4fb5-afc8-50b8a23c7006\n2c5aa5eb-73ad-4484-bac9-e8bb62703484\nab09bc5e-1af4-48a5-af9a-037509f61d3d\n5abedfc6-59fb-4f28-a53e-aac10445cdb7\nfe0f8b61-f18f-4d9b-88d5-a47cfb4142fd\nbeeb9237-3c65-424c-9700-8fff714772d5\n3a53ebbb-2c38-4985-864c-e5fb4b9de898\nb88f9aa7-7fa7-4d43-8f17-7a8096b29e4e\n98034aac-a999-48b5-9b6d-701cc830b6e3\n74c379fd-ae4f-4e58-b2b1-8a41c9a16c6a\n0f487159-3658-49a6-a26e-5ad1d70e8e89\n1bd76b01-e5e2-4cfd-a6bc-c3f276b2f6d7\n56ba5005-9039-40ea-a25a-792682cba2b3\nefbb6364-f00d-45e8-90dc-6a43b80dfdbe\n5aff3b9c-7eae-4686-ac1f-792df2cf258c\na94e8eac-2c0b-47ab-9efa-e6e98c42e824\n56f4171f-2926-4bb4-9486-6b567d83d8d8\nd1ab0447-c60b-44f7-86c2-a0fa57ee64d0\nc1f20b96-801c-4fe6-a8d3-58ace9bff5a6\n57d6668f-c56a-4a2b-9e97-de8d9e0343d5\n574636f9-9ca7-43ef-89a6-845321cb41f7\nc603b376-1baa-4061-b9ee-1b34decdedf5\n5f8493bf-c433-45fe-b8b6-3347adc16cc9\n8efe1a8d-f1cf-42d0-a027-41270f37f79b\n18c15874-ba7a-43ff-a22e-9640a986c2c0\n74f344af-4e75-4bec-aba1-7aa677f0bde2\n1044556c-3973-413c-99ff-6b6a6e649ac2\n14b5a144-b59f-4f7e-91d8-a7141ab5d31e\n30471306-001c-49a1-a549-a34cc2d416c0\n6c41ac5b-ab1f-456c-be38-42a22dc311ba\n45649591-9d34-4760-8b7e-666ac1d4f6fb\n28bf65e4-6b56-4763-b81f-b9726a9a7263\nf4defec9-4bc4-40ea-b068-cf7ecc74bf67\n59fd0999-efda-48ff-bbef-49ce796c895f\nbb5d39cd-817f-49a7-8023-679232327e73\n5cd4f300-24cb-4a36-96b5-d3b37fd2f70b\n6e0891ef-7c9e-41de-b119-7c195ba8f999\ne6b045f8-a8ce-4767-b6ab-94a9daae0d09\nc3d945f4-1b4e-4ee5-9ac6-a74525030dcc\naac01375-fb8e-4dfd-afa5-bc8c187e5992\nba99c359-c5d0-4ebe-8c0f-91f1b29c1ff2\n0366760e-0362-4cb1-b947-bdbfd12fede2\n65d048d3-656f-41c3-86fb-07465a257edb\nf868ef22-1542-4ce0-831a-e5ce9be95e87\nc5d2ede3-74d9-4897-b40e-b25d7781f2a4\n625eb5b4-2588-4734-8ea1-c7c076fa679b\n241f8064-40f9-4db1-a1ab-37fe9e3d6ad2\n3733516d-a1d2-4bc9-8d4a-fdb2f6e0d617\n9791558a-7103-46a8-bc77-805b623b04c1\n00edee27-ad67-4a40-90df-1f441b93f2eb\n2788af7f-0bb3-49df-8f1e-a25b2650cbba\n019c2fcd-4a1d-4b46-b499-e717572eaea9\na264c672-200e-4c8c-93e4-9236f02be626\ne052a641-02a5-49ea-8d88-1c14a2efce9b\n00a5cd90-24d3-45de-a107-71bd0150ce62\n31e82ff0-89f6-432b-889b-2e813be6c2c3\n5bb95d0f-6ba2-4a85-9842-73ad38a49a3a\nb6e97240-92e6-481e-b3f6-1aa81cd6b3f8\n75e78ba0-a205-4fad-af80-49000a24f0d3\n7c62750e-a097-4e8a-b19f-4f011f6ec919\n3c85522e-a4d7-4bb8-9640-b3d2f407af91\n76e54b26-6be8-4596-8623-26df85d49eb9\na194b222-13a8-4d72-af13-9c1b7c4f42dd\n8dfc4506-44f4-4fae-8c8b-5b55d3859bba\n8365bc6c-369f-403a-b08d-1cea8bbb466a\ncf751f75-6c35-4f3d-ab4c-5e77de497b65\n03dc087e-d728-448b-bc88-c406b88d931d\n999b8f5f-b0a9-47b9-88f3-7ba5b0aa0956\nc103e53a-ebd9-4c05-822a-12516cfd8ff8\n93bc390c-4e81-4169-8264-a41571ce8410\ne5a6a7fc-caf0-487b-a5f6-619b9bd154fe\nbdb545a9-be28-4f72-9c0c-993f3a8e85a1\n73e3bbaf-74a5-46eb-88fa-09a882b9b9e4\n1f38bd9f-67a7-46fc-96d6-cce062339c9b\n1d991f84-c1d2-4970-b481-d77cbbf1a995\ne517c1f1-2514-4084-b23c-ec1bd5e087bd\n8cbba306-7411-44c1-910d-9d019c6fb963\ne51ee90b-a569-45df-ad39-4966d9ae8153\nfe7a89e0-0d3a-419e-8c56-6a10a4378676\ne8d21352-db19-4c73-8c7a-4e76676edace\nd920e3ee-df86-49d9-966f-3d70f435727a\n105e6ab4-16c4-4db2-86fb-7653d0299455\ne1f7f682-632a-4928-8126-5156b32ad825\n2ab36de6-3d32-457b-8bca-89f2634702eb\n0784761c-936b-4da3-b5d3-0f76bd9f732a\ne94785d3-f126-4c2e-b2a8-1e6722872c43\n89027680-59fe-44cd-a872-98fdc3615083\na7aa04fd-496f-4d04-ae6b-efa78308fde4\n2c297cf0-5fe6-488d-8fcc-5f63251058a0\ncb583791-dc8d-46f7-921a-c91526186731\n8bb02488-2db1-43cd-946a-9f16099c25bd\n181c371b-6216-4a83-9dce-b8fb585bc4d0\n2dbc65f6-57c6-4d4a-ac1b-67f04950f06d\na38a77cd-eac7-4253-813f-f86411508952\n3cab40fd-9f4d-4c64-9a3b-cc0eacd27957\nd1540537-2165-4c19-973f-92e15143f687\nadb78a3c-3c18-4cf9-acb4-3016eb1819f0\nfd33ca19-6605-4367-8ab6-6b4fc1ba3b72\n80ce55f1-94c0-45d2-8d23-880a16426b2c\n1d5940af-7de1-42a3-bafc-a86f0064a5f2\ndd56e590-eb69-4375-a031-95abc113172a\nf22906a1-2454-438b-adc6-15dce2294b66\ne22ea732-b4db-4dba-b561-2b14c5bb59d6\n9b89c695-c002-42e6-a3df-164ca37a3bfc\nbcb61a77-1e0a-461a-8a74-d517007525c9\n049f1f3d-9c38-4a14-9c20-a04c011839ba\n81b43823-8f32-489a-bcaf-0e31bc98abe9\n312832dc-ad2a-451e-9a33-7ca0ffe65030\n37d4b571-e765-492f-bb68-f1c888677706\neb2603ce-9622-463a-9491-75403aeb6b96\n2746e73d-95c8-42fa-8749-93c4dc2f8c9a\nd01b7c90-86fc-49d6-abdf-496833780d9a\n53abccb4-d6b9-45c9-a2a5-300d144bbfb5\nf53f1510-b7fd-4aff-a87b-9fa2f7da091f\nfd0c4336-f6a9-4323-8edb-40c3c536e432\n9038e57c-ad3e-4878-afa2-3c889a2671e4\n7b764205-368e-4aa2-bce1-d26d60e16e00\nd7481a34-30ac-4eac-83fc-5047f965d689\n9a478fc6-811f-479f-8c32-1e57d9176e86\nb130bd04-5db3-46c0-8dd6-6103d9f25785\n99697810-8ee1-4541-b959-6c9bf2f63bf8\n80a530fc-1e47-4933-a044-fc03baebe82c\n5540fce4-3579-4ce8-a861-2002038508bf\nb4dbda03-8301-4cf6-a706-bc2f7d7d9ce2\n43220216-f589-4538-bae9-cfd911a228ec\nc1cd99b9-92b1-4485-9b3f-64cd09ca23fb\n410537b5-94f9-4ba7-9e74-ecdb14bbb1ba\nbde82e0f-663f-43db-80c2-6c044b8d43f5\nb94f7581-0c6d-41ba-837b-7e748f0a820f\nc0fa1b3e-a452-471d-8a7d-87192bfc8bee\na91f4f8b-d139-40b6-9889-8985ca85376e\ne6bc7ea5-7cc4-46b6-aa7a-a39cebba0e34\nc48a3754-7dfd-4964-8968-0a77f270d0ca\n05dadd52-5b71-4dce-8bc8-fabc7eb1e34f\ncc0d47e3-2afb-4a83-a77d-b2d899c4c63c\n03d6bb8e-2141-44f1-a3f1-b1f4a984befc\n65fb6282-ce88-498e-8ced-7d061122a1f6\n75559a1c-0f15-4e8a-a2d5-5c3564a1019c\nef328c8b-b0b4-43db-993e-b8d319981fe2\n10c1f6b8-bf18-4220-8853-d33751b3c789\n10c8df17-fa4f-4706-b127-68a6729cd3b7\n07c610ea-7a4f-4496-a9cd-d6e6056e01e9\n289c9219-9b61-464e-8daf-a7ccdbfc6990\nb91a0e37-5f4a-4609-938a-925092d46b49\n5e3b8e25-afac-4b27-9baf-825c35e69e93\n221a24b1-4b18-4d4d-b225-0cb483eeb03b\nac087c01-f4aa-4c6b-9106-e73b5ea0919b\n163ff349-0403-42c1-bc2e-df0a7051602d\n8de261bd-a178-4bb4-aa04-6d1c3d71fc5b\n23ffc970-011d-44cc-b851-c2dadaaf7caa\nefe681a4-8d1f-49fb-b8be-b28ffe2dd223\nf0c7e3e6-4a01-47e1-bef2-aba9dd245e57\ndfdf5dcc-afe1-4054-b5c9-13fe8948acce\n749e2214-ce09-4774-a399-b18b1ada7699\nb3e230ac-8c88-4a6e-9639-710db7e08e3a\n5e0d2e6b-95d8-4c74-bc4b-46ff02cad401\n36d050e7-7d82-4fb9-bcc6-85cf4f4859ba\nf31c1d33-bbd9-4273-a05f-beb9673402e8\n5115a235-15c7-4779-8ce6-0edb58ea5205\na6ac9905-6975-4d9e-a983-ab341eacf6cc\n0fcf6801-a444-499d-9405-e9e977a25862\n2c506cd9-b08c-46ac-ab8c-3b8566843a7e\n0b843fe1-f688-4824-aa33-4b9a15c57faf\n90c2e9a6-6bd0-4ffb-959f-433a626453ae\n5e3417ac-9875-4afe-8f47-e4c193fb327d\n9e68bedd-d0a9-4f46-b944-37b91fa6a262\n77051ebb-5a3f-4a3b-a765-7b5a7947c2cb\n4e980470-7e11-4eff-b193-639b52cc002f\nf3009250-4c69-49d6-9be7-e65e70832193\n58d5a546-50b1-473c-b6ad-ee7a94452973\nb1132f72-5e7c-453c-862c-a43b9ad4b5c8\n5db4b691-e379-42f6-b10c-ffac0cb0f891\nea4fb737-0366-4d40-8915-bb5b7352f685\n63343623-c3a6-4a53-ad0f-3ba643f86712\n19b104fd-5756-4761-9213-037b4fbd37a2\n33ac64bc-6a60-49a3-9e23-a67368147703\nafbaf158-a57a-48e0-93b1-a2d13fb42a77\n1bd0dfbb-0a52-437e-b968-f148235710b0\n9777ffae-7be8-4b6b-a82a-4c4cc134df2f\n1a3ae86c-7f30-46d2-86d2-696d032450c6\n9eff5a51-79bd-4cb6-b7bc-a3dc008af86b\ne91f59b2-8f0a-4040-8665-5ebe963d168e\n9eb9ff68-a2af-4170-b170-033ba32f7f25\n6765829f-60ec-4be6-afe7-7e2cff5aafe6\nec7cae4f-24a5-4977-a259-829a8aae2672\n0a77051b-a35b-4b01-bfe7-859739697907\ne1d6054c-269b-47d0-995e-807e8acc5eab\n0a31ddf2-cec1-45ae-adcb-3a54897eb47f\n9449cd52-532a-47c4-a31d-ef2b7d0b9252\nae97aab1-23fe-4e29-bdf7-92bab1f11f32\n2aea47bc-4006-4ac6-8b0a-59de35e81637\n3ff19614-0abd-4408-81c9-06cfb53e33a1\n298c30bd-7717-41f4-b5da-f92436d9e4a3\ne7e37fe0-df67-4306-a780-4a340df8cce8\n83af4248-c575-4a11-b749-4e623722bee9\n3e4849ca-82b8-4062-b490-eac9583f34b1\n20da7eae-cfbd-4129-a723-ba882a93978f\n45dcce93-d673-49bf-b6d2-2eaa276c8a2e\nfe7e110b-16b0-4d28-9401-6f8d6b0b12de\nf0664029-f759-4128-86d5-4ccadd9d2523\n0d249fac-ff06-4cc1-bb7b-a8a914559f5c\nab6af2c8-aebc-4483-a8c3-44fe94609865\na77a9ab5-ce10-4993-9d18-a87cae2ec0e7\n18c7dd7f-6116-4b6d-86e8-8084293cf856\n0c1999fa-061a-45b2-b0f2-8d52ffb75a11\n2e2c4db8-97a2-4880-a6ef-449031696629\ncad6655e-4ccc-48b2-9fda-1a6d8f52623c\nc41ec354-18c2-4f6c-ac8a-09ca427cc434\n7ad8ff02-1950-44e8-a899-1a406e44243f\nf81600fe-d659-4d17-8f0a-0a84678e4440\nffa21186-d2d0-4507-b880-28430450d8b7\nbe2736de-e6f3-4434-a84e-3c8bf9d390f8\nf51b0679-440f-4efd-888a-800703e8d572\nc92de3cd-34d8-4852-9e13-974aff5beec3\n7ea33102-5efe-4470-b575-12f99ccdfb31\n2e35c96d-f353-4bee-ab95-50e89c7afbe7\n94062e85-9012-4e7e-af33-a2761d358b87\na849191e-2a39-49cf-bebf-3f4fe4190ba5\n0c77669b-47ce-4f41-9eef-7d5102dea6ca\n8b545b5d-8afb-4e0e-a407-a8a8c1875a87\n890b189f-1711-4c7b-9407-1feca51c720a\n6a5a1d51-2817-42bd-a3e0-07e4fb4918bf\nb3a8dd78-0f90-42e9-95a9-514f7b684eb4\nae3ac049-41a8-454a-bf66-587e7eb989a4\ne21f1b51-2737-45e3-8ae7-235d058c2e01\n25439808-98d1-4a8e-a49f-3de90d264556\n975a1ac1-0208-4991-8801-e845fd31149b\n479c21bd-ae51-4f97-bddf-3287e5b8f8a2\n59d92167-182c-4b7a-8f68-c50b4d5d0282\nefdb0454-b683-4f67-bf23-e3c81ca6a524\n072b5418-bff7-43be-a151-ff0d57834f0a\nce4e6f00-471a-4263-b624-264b0c70a7be\ned42fcc6-c8b9-4f37-ba82-ecd44cd01abf\n617873db-1017-477c-96a8-d6296554f410\n196f4743-a387-4535-9fb2-e68bdc7c3088\nb9cc0822-b1f1-4b3c-8347-4eaf8e9518f7\n38fb7a3a-2f7c-4731-ae2b-17dfdc36da23\n3c274227-c277-4ab7-aa0e-f77b1a4e8d49\n34267b66-2475-4d9c-aee0-90e3264d0742\n14956d8f-fe4a-4e60-8c99-8041666072f9\n223c85d3-cbb2-44b4-bcff-4f9e8a66485e\n34b8a447-60fb-4152-ab1c-0ced7d60b61d\ne466d7e2-04c4-49e7-8a9d-6426cb0e3ed4\n80b5648c-ab35-48c4-9702-104d6bc82bf3\n92d927ed-579e-4464-8501-80fb99dd9737\n520620ea-57f3-408f-a222-99314d3f692b\n78afc50e-3d5b-4c4d-a03a-8cfb91e2d4ab\n0aa9a4eb-99ca-4f22-a676-718b6c87cc35\n90f6307a-4e68-4168-b119-2a501b300d84\n34c35def-bae9-4980-8c01-8b8b1336de72\n6a7d403e-0643-4953-a2b0-abbec903fef3\nd4cc19cf-f8bd-435e-8180-2e791ec2796d\n5dfea04a-6879-4950-aa72-e2690cf40522\n56962bf0-a791-4964-b186-901cbee0d139\n6a0ad203-693d-4cee-a624-9a3f7d570920\n13f4f6c7-cf48-4398-8f8a-c8b9a1ca8f59\n7b43819a-d7e0-44d3-9413-7717dda23b8d\n5db8c9f7-52bf-4eae-b33b-10085a8632b7\na814b56e-1773-4aba-a48c-42a529631423\n2fb028e3-9d88-47d1-8a99-a583f248f02e\nc13d0291-8053-4e0e-896d-cfdd8074804d\n67272816-d81b-4eeb-a3f2-b8f54fe900ab\nc02556b9-e206-4a2b-83c3-1146b67af701\n4b4872c5-bc11-4ff8-810a-bd569d0e75f5\nc1d7d59f-4df8-466f-82f2-95f66110a7fa\n200c6b9f-bb0e-4dc2-972e-c26b0d02c18d\nbbd527b6-5102-413d-8841-d87f615cbddd\n33ab52ae-6537-4f07-b5f5-0d5c8b07ce9d\n3367b673-b04a-4da3-b4db-d886d3582dc3\n8f6d0d3b-4a66-4f00-b553-e421e04e3d24\n5b6c68b7-1cd4-4827-b5fe-e138617387af\n678670a2-422c-4ac5-8ea6-057af0400601\n904357bf-d773-4e13-bce9-e23124f48e64\n3e85c045-7601-4eaf-99da-c1fa458029da\n61fac69a-bc3e-4200-9a58-cfd4434d2b99\n2df568da-6e34-4907-9d8d-8414788b737e\n1d027705-9d8a-483b-adf2-00c81e30c232\ndd72ffcd-db7d-473f-99b2-75b561b884d6\n20e37793-d939-405a-8fb9-84673947fe24\n01985b37-1f08-4dae-b41e-c183aefc7473\n02f4424f-0ddf-4e4b-908a-730409f59eee\ndb58e30c-ef31-46c3-b4ab-cff11f88a069\n196c4b4b-f7f8-45be-86b5-c4be25948b13\n2b6bf15e-c8c0-4fbf-b9be-672ba70858fd\ndec76764-5697-4a0d-a451-ca4f071b3447\n2eca090a-15c3-4bca-8734-156ab06fc9cf\n2218cbf8-3bf2-4086-8ee0-ed5c9eb68c49\nc6d71359-6c7c-4c75-a23f-93f56762db8f\n01e4e07b-34de-49b9-9891-f3d3c2a8d96a\n565d0752-c3d1-47b8-9a70-0332d428e340\n31f0f6b7-ddbb-47e6-b532-47f5a395306b\n0fe84195-c9c2-4c82-9bf9-c3eb94610b5c\n91f59f8c-b53f-4ce3-ac9b-048991fcbcd7\n9e124240-92d3-4a2f-b87c-c79c901da544\n98678197-6f28-4835-b7bb-1ba3e517bdcd\nc22508f1-c48b-42e4-a8d6-f9669f7fd470\n9eb9a6f4-2435-4d7d-b01e-3950efca74e6\n700e71ef-7aab-4dd3-8052-31b42286cb68\n1fe621bd-03ce-4088-a29b-dbc69f274c29\ncfbe5cda-e3bb-4d7c-9c64-96eb34da4162\ndaa2b47e-773f-41d9-91dd-23a83b108a59\n560a2f5b-764e-46f7-a2e8-50e0032c94c7\n53b8ec67-7942-42fa-888b-d6767de67aee\nc3aec57b-c2ab-435c-89ff-0ffa3e6beee2\n58de7c66-bdfe-45d4-a59a-af2cd086bf6f\n2d7e6039-0244-4209-be2e-3bb91600b282\n0d0b6400-d956-440e-91b2-b338dbb0f06b\n12c8d7c8-207e-48b6-a0bf-c8a5915ff440\nfa0fb11b-5cb6-4b1b-a4e8-1e53ee5583c1\n0198417d-b942-4495-8592-e157f5bfe6ee\ne8ac0cdf-c2c6-483a-bfca-3922ab896347\nf9e35ae9-39b7-42bb-8f9f-969fd39fc7f8\nbc0d805c-bc0b-4af3-aa5a-9113568809be\n5a975751-d19c-4a5f-9a6d-db53d22bd685\n4342ddd9-3013-4dbc-a7fb-614b0e22ac8e\n3103582d-0b38-4a2b-840a-49194a15242b\ne800155f-35fd-4e66-9549-d3d1362afafc\n32bc25e6-6991-4f2b-8ff1-e4bbb792d509\n5e5120d6-1465-4132-bcc9-63d387f4ed20\n2ffc7456-494a-437c-b58b-2681193085d9\na9d15d52-c2fe-40ed-97af-7a939d7af299\n44e47e96-f020-4a0a-8b9c-09990a6791e8\nf0f9bcee-97c7-426e-8560-9b34221bb8c9\n21d86a5a-f2bb-4948-b43c-16c905b5ec15\nfeca4071-3c1f-4d64-a926-a50d2ead59f9\nc13130d0-c3e9-4697-bb2a-36f0b71db67c\n991b54fa-b90c-4e7c-8545-0c5d2946f9d8\n1a3da79c-63d1-4420-a0ff-d6ef689d3876\n1c158dad-acd6-47d2-9501-4182e02f53d5\ncb87c348-fcfd-463d-9a10-f7d22b579875\n84c6d582-b8f1-422c-90e6-e93bd3a8e474\n7d790055-1a07-4bc1-8c6b-b3218cd84abf\ncfbbf3c4-e093-407b-947a-14e581217c79\n0b94d505-878b-4c3c-b9a4-67fe87b5adc2\n7b2fa95e-35b0-4110-84ed-656c08efc55d\nddc4446c-fd9d-4150-a7e7-aa001c860558\nb0dc00e2-c694-4c70-a7c3-5c54e1885e70\nb2e43142-8d5a-4797-9f8f-be785890866c\n394d52ff-9237-4247-9076-38ce373a1e7a\na2ca26b9-2461-4e3a-9eb2-15de78e53d20\ndc231df4-7b1f-45db-952d-3dd4e5c7fd32\nd5b00933-15be-4942-a524-70f38a0df5c5\n7faccdfa-9e3e-4ed0-954e-517289debe52\n7f6a8ef5-e288-4d60-8fbf-3376489185a5\n4db86d7d-ac4d-4ef4-8e1f-e92463a9b41d\n3b3e6254-32e6-421b-ba70-6a0a4b03e5ca\necef8e1c-ec4e-4d2d-bcd2-1fe69c3daf8a\na6c6c370-70cc-4c3f-924c-882a40e9b564\n3e06ca0e-0bc8-421e-8db4-241f7f3c7ac3\n7717196c-aa4a-4271-ad25-6cb1a72c3456\nd156e5e6-0b5a-460c-8bcc-a36b75f62294\n83f64f37-33be-461c-bb10-f16a2c23ecd6\n048ddb98-d2cb-4b37-8e4c-83fe9eeb5831\naf8dc610-f58c-4e94-8221-7861d95e9fa0\n96242bd0-8293-41cc-9a37-3bcb23b20e42\n9817917d-76e2-4dd9-a013-581565f64556\nfe37cabb-4c0a-48d6-9a45-14a19d6a1151\nf833655a-e7fd-4fe4-879c-68c8b5ee1fa7\nce39e1f7-b8a3-4d04-b4ca-7505b70e9f2d\na4ac0613-665d-4b92-b449-ed5dd4b5d53a\n6a50fdce-769b-457b-ac9f-011a5c4ae36d\nee8b4c68-997d-4d4e-8b76-49ac12162b8d\nc57b6b2f-b5cb-4ccb-b2f1-232a43be7437\n7b78a55a-e3c3-43d6-9409-92140e223b7f\nfaf452a6-b974-412c-90c4-3199a286bc79\n6590f78e-a6ce-4cf5-90a6-edbafa9af937\n33577f24-57d6-4e87-8fe4-9dba24d05438\n1eb884f7-c4a7-4fed-a2bc-53db8912226f\n86b02101-9df0-4761-8c44-717cfe203d7a\n61d8c3cd-3b27-404b-baae-04939310ac72\n19bab941-830e-4628-8ddf-8396608ae6fe\nc2d25073-42a5-4e74-808f-2e80a6dcb4e0\n58179966-8201-456c-b417-90226e5abf02\ne944ec7f-27ca-40a9-8675-5bec51b54c4e\n854b0c52-d13e-4641-9040-15e88a27833a\n65639ea9-97ba-45f5-83bd-73198d2c2e1d\n9b5403a9-dae5-4cbc-935c-27979f600b30\n973d2f35-a36d-4cca-8364-ade3f5017aa9\n635c500b-a1df-40c8-8c9b-4fdfc3678d0d\n6e4cf4b9-5af6-45b2-8ee7-06c4addc9c0a\nf96f8bbc-e1a5-4778-8ab0-d6da0c2ea905\n1b95640b-2108-4f1f-9dc6-cd787100b6b6\n6e409543-330b-4194-ad83-ec52fdcce1f1\n91ecbc66-fc41-43c9-8c6b-d24527615521\n6402c4d4-881e-43a7-a5d8-c58ba777c986\n8425a09a-ca11-46b5-8c68-e8885037e480\ncdf289c2-22f1-45be-bed9-b378e4fa9361\n477316b7-ca3b-4aab-89cc-3196207f44a5\n96b6d96d-f861-494b-8805-aabcfbf4cb59\n5c75dca4-e606-4e20-9051-39900c3c320b\nb16b10c3-0317-4bb7-9b5c-8dcb3fc75a44\nd1af5a02-78f5-471a-8d26-0ed33321d296\n45665aed-f8ea-4fd2-9f23-4e28c5e4602b\ne709ed2a-eae9-4d99-b471-738128f62cd1\n9a6041c1-7112-4cd6-bc6c-d79bb1cb6d69\nf94a5944-db64-453b-b2e5-aca97cb70c8d\n65f3fb2d-7d61-4d03-8fd4-26f2433ef0b0\nb335d5e2-c5e3-4386-b576-3aff97725cbb\ncaaf5cea-cad9-461a-8bdd-f69a6e7dcdd5\nc00bf7d4-0c1e-464e-be87-0125479a4ec2\nd20f49be-1ea3-4f0e-9e2f-1decf03ab15f\nbe4ffb9f-43be-4b2d-a970-a714d3ee895b\n429242f6-af4d-47af-817f-36952ef7f245\ne2814488-de28-4784-8f72-d1225f6da891\n7b4d688b-ba0e-4b1a-956a-36599ea7ab06\nd5d35aba-a130-475c-9509-a8b8dbfecafe\n698386e1-c680-4676-96b8-7f422640a56b\n35f5a6e2-e1dd-47be-8cae-8dd3c032ccc8\nfefb7c20-ca46-4cb2-82d0-9862982ac19b\n7c5a1709-e7fe-4564-b1d7-553a74916d51\n6fb19b28-32ff-47c7-89b1-7dcb41e45989\nc059ccfc-0cba-4d06-b03f-0b98d08aabb6\na6783dee-8ef2-4785-b372-dcd0414adedf\n69ae94ad-aaf2-4b7a-a2d3-72b3786e88aa\n24ca6771-adc0-42f9-bb67-607cbb4f7833\n6d84e03a-9658-42ab-8f17-849a6bab5df2\n2332bb6e-f68a-4023-90df-5bac1ab33c29\n9d64145b-e681-43c7-9f60-90dfa55aa71a\n4b66935c-b15b-4b99-889f-c5d305f0b817\n7e98d432-29ab-4fc9-a061-2ad550ec5d38\ne2ef00e4-b430-462a-8079-fc58f8bdc398\ne3ea7eae-35f6-4d06-8323-173afa493dd9\n3ad57bfd-3921-45c7-8b68-3765aeac677a\na90571ce-03d0-44c3-8a9f-a778491de3f0\n7a69b8d9-0dbe-4702-b7fc-7b92876e31b7\nd677679e-d5a3-4010-80a5-7e57a5afd30e\n92665494-5eea-4edd-8758-bc98403e1ae3\na8cdb97c-9177-4eb0-b381-98ab8b3ce781\nd4824d3d-1c06-4971-897b-f63dda7aa8ed\n44bc06c5-349e-49c4-bd53-1388c8e710eb\nacdc8188-5592-4b9c-b094-a4b7d466286b\n731146d5-10b0-4064-85d3-d1af6508824d\n8c3dcfcd-1d52-4bc2-afa9-c903410ef1b4\n84630aca-119b-4e19-8b43-aa37842dfcd2\n99830c47-8e4b-4a48-ae81-0799802752ad\n2b825107-8c13-45ed-9dc5-d32ffa30f2fa\ne8092086-dfea-4bbe-8bfa-1a8659dc2ff2\n38a9bc10-539b-486b-8e8b-27ebec4607d1\n508e2e30-063b-476c-bc7d-03949ba68fdc\ncb68ccbe-cc84-4289-b24b-e2f13590d28b\n81e1c990-d7eb-40a7-aba8-a15beeb7c4d8\n4d8efc53-b1a9-4717-9e9c-80e224eaff68\n0d66c34f-721f-4f33-bd6d-571bb93e85b6\nf3217658-7941-49de-9327-e2b617851640\n164f9ce5-1df6-4663-97f4-6b5f4d4b7ce9\n873dbb0c-68ee-443e-a9b3-5c05e41d10ad\n3a172141-882f-4194-8707-a5224ff9fefe\n6ac6998e-0a53-45e1-8dc4-8a818706b6eb\nc9794b7a-5c5c-4c75-ade7-d1ac7005df96\n3a13ad9c-eea0-43f8-bc8e-edd601493c8d\nbbd5e535-028e-4dc5-8c99-68ef198d9420\n0196300d-a2bc-4174-8c2f-033752c68f2f\n91681531-f9ca-4e5d-b857-709937cc7438\n3dd076b5-9836-4cbc-b926-348ee95ce82c\n39c22e00-e9b6-4614-b64d-02e596f37a0b\n9b52aefe-fdea-45f0-92d3-cd795e80aeae\n8c517275-dc14-45a5-b7cb-f441b3511987\n6ac23397-a587-4432-b583-9391c263d5e7\n98d24763-daff-4d39-93ee-3c09ccc287b4\n5e842956-41f8-4b15-adf8-a2b12166a077\n36c0ecad-1df8-4669-8e50-c321a3bd1692\nc42cb861-ec77-4072-9e42-81bbc04ee0a2\na6b2dc72-2886-4c82-9b8b-4aaf22885116\ndb22a2af-5211-4edb-bae8-a678b0a957c1\n8bb77244-3012-45db-a36e-2bb54a766b18\nc4d9f899-fa6f-4a54-bd0b-b278ce725e9a\n53292a3d-970d-4391-a056-04b91957b1c7\ne2efa673-5028-426f-8481-6882034eedf8\ndbebe2c7-6cde-46eb-9280-d6c35393e2a9\ncbb96b3e-52e9-46dc-9fee-66e73aaf726d\ne18bbd44-2b9d-4f38-818d-e692b1c8440f\n42448cf8-d830-432c-af8b-849886612e37\n6a29742f-478b-4c59-963f-2c666f9eb517\nc11d7768-9d4f-4189-bc27-d31a745f5413\ne0bd8a04-c9fc-4c0f-91f3-80457ea12605\nf7b38f9e-369f-4f5c-9846-ba47131c88fd\n9b0283be-9704-4cda-884f-e8461762db3a\na2e39103-1dc4-4212-b403-10ae5546ac6e\n17b17f8f-6061-42f5-b1b3-7ae84febf5e1\n251db26d-2a3f-4226-8b60-e7beed18c78a\n10bd188f-87ae-4812-86f2-1069d67e11db\ncdab070f-d582-450e-8c29-aa048ea1fe3c\n12f6199d-f4d1-495d-93a2-5de92aa36240\nd26ebe89-996b-4ee3-9ff2-f3ae1146f98b\nafef63de-020e-4d18-b6e8-830f075b42d0\n46cc3861-5ca7-4809-a45a-a241f8d25f93\n99b03bd0-7bca-44da-9860-1dd2ead955bd\nab9b5d73-cc26-4134-bc5a-e9a75f2fb864\ndd1ace34-dfbb-4197-a2d2-14d332046678\n4ec1e629-1325-47f1-a313-09842d08197d\nd9518369-1fb5-4f5e-8abe-9fd9380c538b\n54f234d9-309d-43ff-b7d5-97f9fa324807\n513c7790-a75c-460f-8719-e9a94efa5347\nfc6df1b0-81f4-4676-8334-fb89a07133da\nf9425eb4-846b-423e-b893-d4bebab0c93a\naa6f441e-9a03-475f-ac3a-08460b9e6505\n5fbe8189-a4dc-42ed-bffe-efc05b971462\n4dfa45c8-f5c9-415d-b3a6-f5a0becbc502\n37ec1b0c-130b-46d0-a5de-25deab62c232\n58b4baa9-bf8c-4baa-90c5-dfae65216242\nf1c8e4cf-d2cb-4925-88dd-5655e40ab29e\n31f77dec-9e05-4888-903f-134c0b948a36\n2b6b0650-4059-4bbf-8270-6597626059bd\n470f18cb-f250-4eef-bc9c-31115235cc52\na4a8e429-e85e-47ad-9feb-43d00d33af2b\ndaf8d9bc-d27c-4c61-855f-bb60d8e232ec\n866f9208-5147-4382-98c1-c427f9135604\n3255a04a-a95f-4f43-99d6-a5c7ffc93313\n1911affc-c1bc-4bb8-aa7a-5374108a2f82\ncc45925c-66ef-47ac-a681-a7c2b953ec8a\na0f33fce-0b20-44b9-a863-dcf6b428a42f\nd21c8544-1793-493e-bc1f-75b0ae9a6b61\nc594772a-ff95-400c-81e4-f08bfc98aea1\n99ac9e50-ea97-4b2a-9bf0-dfd8f195b283\na76d5954-fbf3-43f8-a639-f51d67469f2d\n68bc2414-7bee-4a1b-a701-e9ea810d431a\n81f5f246-8068-4f42-85ab-32fdef5b1152\n25bbea0e-40d4-45ca-90a9-7a9d4998ebf6\n276c10f8-5def-4bdd-83f2-189f970cb7df\n8ab98504-25c6-4232-a140-a90187b5a54d\n6dd5eaee-8872-4b7c-a862-6bbfb0621429\nc151d71d-a3aa-46f7-ae7c-087076c20e60\nc111ec7e-56fc-4faf-b0b5-cc7302523708\n24361cda-ec12-4949-b358-eac71755bef7\n48376301-9038-4ddf-bf3f-93f4fa4fdbe6\n1463c0b6-1e4c-485c-94a3-2d373f9d9f70\nd7254e94-16b8-4f4a-80ad-52c6abf4625b\nc268e435-adc0-4bcc-9b57-a9f35620aa54\na52018ba-d20e-4d9d-a277-f670b4388ed8\n6e076443-86da-496f-bc77-d8735510bf02\ne83f04d3-3566-4ee4-b2fc-8ca55be8bdef\n6dc5f19a-1b28-40cf-86bb-ffabcd1d95c7\n295e97ae-6add-4600-962d-7507a49a8c74\n6716aa4e-be1e-4adc-a0e7-d79586ec5e9a\n6d66079c-feb5-42b2-b075-2d30d1388805\nd5b98dbd-354f-4207-a429-d301adf0443e\n2117baaa-6fa4-4739-bcea-2c990049b2f1\n0098daef-0f59-43e8-9723-82d5b4ad67e7\n0a865442-2955-4497-945b-1e100319ef64\n9172fff7-9b17-479a-bdaa-3bddb5b768a0\n9a87d8f1-1724-468f-9f6f-0a914c46c90b\nf589e73a-3a4e-4bf2-8f2e-18a39f360490\n3c491656-f6d3-4bc7-982e-180c9e98bcef\n9b8a7e91-a7bf-48a6-8da9-aed816582868\n0c3b67af-d888-4d14-9706-37a4e77391df\n7c7bb49e-5d7f-41f9-b5f2-a6e8a9159207\n99dcb534-f33c-447e-aa33-111165756c0a\nb9dd8d96-1b75-47be-9342-0cd22cc52612\n078bb1cc-1782-42aa-bd53-258186beea5e\n20fc60fa-0cb9-494f-bd61-dc2e386bf001\nd8e482b7-b793-4c74-be30-8f3e6040df96\n4671c190-aa5a-4802-80fb-8fe35a7787bf\n000cb09d-76e0-4993-bc77-eca2be4c9aec\na1bba4bd-2a02-478c-ae89-bc644dc7fe98\nfdc95024-17bc-40be-a5d9-79d06a094607\nca34e827-0928-4a59-bd26-0ec4f60acf45\ndabc5d3a-7abf-4087-8c50-8750f26c95d8\n3fad0e26-58b4-412e-ba84-a1b8850c2507\n843f91c1-be99-464c-8b5b-51bfbec6aa88\n916be975-9702-48ff-9289-57a0343a5d03\n26cc77ce-b0db-4aae-be2c-3a7c6398d904\n7d4d0c58-7222-4252-b330-8c07b3e0d4bc\ne17e1b3c-0562-4fa5-b974-628266229956\ned0f8f06-6ebb-45c1-93db-f5b428637d95\nba40925f-f80b-4510-bfa3-bef4e074b54b\n1eb1fa7d-7a47-4a6e-9745-2f54d6a99dc1\n699dec30-6c4d-4e54-8e5b-084713889fe8\n3f871aab-490e-473e-8fd7-2dc0774e46f0\nf1029cce-b384-4eb9-81e1-2129c6b7d3f6\n56c34d1b-6afa-4c3a-9589-6213123fa1d6\n4e79670b-023b-49b7-a9bc-75ec306a4bfe\n1f75dd2a-83e8-48b7-a330-8f804852e3be\nfccaddb7-150d-480d-b367-6319eeebe536\n7b8b424a-1481-4b11-ad99-37d2d19c3718\n88d3ec82-91de-4ef8-9eeb-242288308162\nefec5fc7-3daa-4b20-af07-68b8f0fb6d2c\n8201d673-9363-4aa3-b5cc-fed9b926232e\nb89703f5-a365-4a72-a399-409c60279576\nc1ee87a9-0438-4f24-ab6b-7d0a416969a4\n44126187-b0d1-4be3-a486-927187199325\n267e53a9-10ec-441b-8a61-9e4d2fa63901\n6380e52a-1263-4397-a6ac-c99e6397927d\n1833754d-7d25-4f3b-b693-a70ff929933e\n393dc7c4-675e-47b3-b5ae-a5c19f60c348\n1f93ca26-6c94-43b2-8888-8775f0587b2b\n7216fe08-2e95-48b1-a1cb-e34cb4f13dd5\ncc13a54e-5065-4d9c-bf50-ab90eb58323a\nfc2891dd-2f6e-451d-a975-f48889098e88\ne8967f4b-7a8c-43c0-b3b5-21ca42217141\n339d1778-ce0f-419c-a38c-abcd47f9f0ce\n8fa8b47b-3bc3-42ca-9b0d-115158907391\n4e09b3ff-3ba1-4e6c-97c1-b26bcccbe740\n4443d158-1926-4eef-a1f6-0f09c164fd76\n2addac38-c49d-4f96-87cb-e30b429532be\nbea53c3d-4be8-43d2-a15d-2546a29267c5\nfabe7b1e-f11b-4463-8731-a6c239382c7c\nb3dc1a55-ad63-40d1-a96a-1334437c1c7c\nc01b854a-6af4-4640-81ae-97df330d9253\nde34347e-6a5b-4c01-bed6-17c91cf66881\nc8ad8e3c-b883-43fd-8e87-826ed4630c84\nb7c4aee5-a60e-46de-b9d0-e992493daab4\n5055d517-a6f7-493a-a010-ee2e30d49d74\nba4041a4-b2f3-4ad8-9477-483f127c3d76\nfb200032-fa23-4117-acc3-18972add4d3b\nb714438a-afeb-4379-82a3-c8e6d8d27d89\na7ba02e9-eec1-42e2-9b3e-2d35e91590ab\n5f1165be-b31b-4289-a2ed-395d165f79d5\n2ee02c65-15d1-45f7-bc0f-6f8870c9ea0f\nc7e31966-e22f-4120-87ea-5388fac1b834\n25dfb265-b69f-4c98-985b-c3570450b6eb\n373d35e0-bc6d-4077-9647-1263d0bf0725\n4f406642-0627-45a9-96b2-5235262e9ad2\nee7b66ab-f89b-4496-a05e-ede67199a2d0\n35910e00-48a5-434b-a9b4-58bba2d99a52\ncab41a7c-a23a-45b2-89ec-351cdfabbd19\nbd684aca-54c3-4ccc-b36a-a3204c580ed4\ne43a356d-fd0c-4a9a-ab21-681ea9d72459\n0e72f326-881a-41ac-9aba-f7e042856196\n61069a5e-0daf-4631-a5c4-f6a7de0d972d\n3e9020f2-92c6-4d82-b239-d8985bba582c\n8249c00d-3e27-4f06-b902-00e931852780\ncccdb92a-01f5-409a-85d9-06a74640aae1\nfde0bc53-ca5b-4b50-85c2-141857161f43\n4d8e33f4-04b8-4002-9be9-319111f1d7f8\n9491feea-feb4-41e1-a831-25670e23b0d8\ndbe4dad6-b274-477d-9e7f-5c21a8858e13\nb75f2599-7099-4c70-8969-3cf2ad551467\nda593d25-3431-4dd7-942e-25179a7692d5\n90ca8d39-7bce-47a3-b637-2626d22118b6\n96cfcd6c-f653-4552-aa2f-c8d6ac54e855\nc3ddb83c-d2e7-4a38-970f-ca8cf4068c70\n536d2b71-751c-430d-bc63-8fdee6890aa2\n5abddf12-ce37-4669-be07-ee5cfc3d6288\n464ddc91-040a-439e-84da-46d03664c592\nc4f5fcf2-e98d-473c-a14d-172e329f3aef\nb1862e2a-5c60-4d47-b515-e82b9fec8a3e\na2e8dca2-ab87-4774-b2fc-a163376a5060\nfc4653f6-ad77-43c1-a4dc-0a5c334802e5\n826f7ff3-b2c7-4ab9-ab1b-38794916a3e4\n4f8839d8-c5b6-4c24-83e3-5cb87bc40cd2\n05eedf5e-82f8-472d-975f-7cbafdf89af6\n170b87ec-3f33-4bce-be75-59bcf3d62731\n0b3ce4d4-7b69-4ff3-a236-986900c76923\nd0b4fa8e-e362-4ce2-b628-933c0865c097\nee80a0c7-d4f9-4346-a009-9dfdd95b816d\nc467e275-6b7b-44d3-8cf4-3e372a6e141d\n44c8da36-3d40-4dcb-bca6-39ed332fc269\n4b6e01c6-e080-45bc-be99-3c31996a14bf\ndc18da4f-378b-41fd-a0de-5c9270d66642\n5d93567c-c4c0-431a-8717-e4161f4b807b\nf2cf7e6d-2082-4df2-83a1-c1dc5f5286f9\n9e15a7ef-2623-4377-a37e-e0e8fcf0d0da\nf6b73579-f1db-4365-8d3a-7c7013953926\n77419735-2964-4de8-9378-36c68d54bdc7\na6d2a6f2-5808-4c79-b83a-145ffa760f68\n8997d36b-fa2c-40b0-8d73-0808be5a344c\nda0d668c-64d7-469d-ba1c-9a4271c85b5a\n6d6d573e-9f33-46ca-9fc1-b46e8f9267a7\na1d9ebef-2375-4906-9717-9349979871f3\nd769d76f-1dd1-496e-af94-6d532f8286ee\n119f630a-5df3-4e5e-a618-f01125b657ac\n5d6e3fe3-c100-455e-b058-88a4028a2169\n0cddc5c3-95dd-44ad-b7df-2190e70be598\ne14cdad7-7b0d-41b7-9c7f-61f87c0784e4\n35b68d32-efd3-4675-9292-79c3a695d293\n52a12db9-b664-4b11-9453-622b16c2e28f\nc0496a6c-123d-4c7e-b9de-7acd1df66eda\n141a54a3-7c70-41e5-8581-8b42643204b2\n7152a889-6594-454a-b688-0ecf2897a28c\na9069f36-8627-40af-9a99-2a7660e4f1e8\nebbf39b1-21cb-496c-86b9-d062cce9d185\n1feed0a1-3f69-4726-ba25-4c309cfcb66c\nd9cdc487-c2aa-48af-ae51-003d2b5fcdbd\n705e32cb-fd47-4411-9158-237ac344878f\n4e3bd581-0435-444d-9f01-2b1fd2ecbe54\n055dd561-a539-4ba1-bc78-ffaf27f5320b\na56097ab-0c7c-4bf2-bc6d-08ca6417818a\na5b47ce4-8033-40e7-b736-4479d6f40208\n51a8a1fd-454e-4b79-93cb-547901ed186a\n46248a52-b355-4d12-a381-48eeb768ac09\n06ddc37e-ae8c-4c7e-a13d-17d25c9d5c04\nbe4d8aaf-84c8-4bd8-8e4e-d6b8a5a54451\nba98918d-d66b-49c9-9069-3bae77da420f\nee66020f-3e7c-471c-91b6-1b61b60bdf64\n68f5b9ee-e4ed-4ba7-9947-3b9c9372360e\n522a9e56-8219-40d0-aa61-f1ebe4bb718a\n501974a4-4abd-471b-b720-16757a18092a\n03bae108-9905-450f-b351-c7abae9d4c8b\nbdc3b9c7-1bd1-4132-85a9-0a6aae55afd2\n4c17d671-b3d6-4c9a-b452-5873ace25312\n989add0d-1894-4dd6-8f86-227cda9611c1\n30bd05d3-8125-493f-8465-9f12e2ace54e\n7a969b55-e99f-4635-866e-977d3b5fa2ae\nd5c64b83-9b67-410a-980f-b607218ebeb4\n617cd2e8-b238-4a6f-85e1-d8aeda784dd1\n30d353c2-166e-4cc9-8bcf-bcf00799c36a\n2862fd08-3d43-4cdd-a84e-f6726c4ca8cf\naf24ca15-588c-4aee-a0e6-fa959ee1a67a\n89083d27-55c1-4979-97dd-f2d6290c93c9\nf3ff8d1a-d542-41dc-b7b5-b44ba26377d2\n585d19f3-7942-405d-b9b6-cd9c7910363f\n5d7efa8d-c30b-403c-b4db-8ace476cb7ca\n5de8847d-2b24-45fb-b744-9a85dc1a7695\n1e095c0d-cb83-4999-a620-250c9f9f6715\n59e28a95-1b60-4588-9239-d646d09c0473\n08f8e89e-18ce-453e-b2fc-4b80d27f0822\n37a80250-8ae6-4ee4-8c97-c3712c9137ff\n011dfe66-5fc8-4939-bc20-b25c3c27c8ff\n1b6d4942-7392-4891-bc19-ae2f0fbc81ae\n74ef0c69-b92d-4098-ba17-9f6017aa39c9\ndf39d9ad-a36e-4f3d-a2e9-791c087373df\n557894ed-7c8c-4363-b398-0509dd82f618\ncd0e49ce-afed-4038-af30-0e7565bdd1ad\nfb58590b-d5ab-413b-8647-d6841de8ab05\n612d2462-39df-439c-98af-443ea40fe16e\n5a0e0512-75bd-43c9-94c1-bacf80fd63cd\n514d9216-e253-45db-b6cc-6e83cb067cfc\n3150eb58-634a-4cba-bfb0-72a19d7e1d6c\nebe76949-b927-4f94-a6f4-da999c2f0d88\n6ed39ce8-123b-4a7d-abcd-4518e45327a0\n0eb74e0a-6dd2-42af-a62d-cfeda2bea7df\nfe82e336-9e1f-495b-bdb6-f087ce117f6a\n68f39e31-3b9b-4d39-bca5-5e0ba6cb771c\nf27d2a80-ebeb-45dc-bd36-06494a8b1337\nf4960b2e-aad2-4c00-b364-7c13fc50d891\nbe9329cd-8b66-4398-9e07-0f8ec2f7ad39\n87ddfd1b-ad54-4f54-bc7c-2d3b2221b626\na517c4ca-524a-43ce-a902-bb489d90bc60\nd65a2160-929a-4e6d-a0ab-dea800790e0a\ne192c343-c6ef-460d-9b2e-0b3c6c7e38cc\n8cec464b-402b-4951-b251-7f369b4c023e\neaed41a3-1f3d-4728-ba4e-b8d79606861c\nf6fefcbc-3d11-4912-b3a4-792f8463da15\nfe34836f-f45f-4677-8469-c1180554564e\n24b09ea7-ff09-4352-9a10-9f7f1786a946\n9e5a143a-821f-4c84-8b9d-e366c7a3e8d6\n24eb9330-e6ad-402d-8ad7-4975b360d9a3\n4a07a0a4-34a9-43d4-95c3-968aae4c72c5\n6616a16b-b2cb-46d7-b2a9-bf6cf34628db\n44df2d6a-b027-4596-abc4-d0c1ba9d97bf\n5824d453-1bca-41d9-a6f5-41255f16fd96\n0bba2705-d20c-49ff-a9ea-99ec29fe4510\nfdd880ca-1997-42b0-9ab4-9aa7ce0bce06\n709a2728-c834-4128-8bbf-3df0cd17edca\n23b47aed-d142-4f88-a142-f734ed6891aa\n23be96dc-2fae-46fe-911f-e148d488d724\n29660d58-7db8-4714-bea2-fb83da384f16\n0b601abb-7ea1-4aad-9242-38e2f4809930\na8038d0f-2e1d-4a0f-8ea3-344c49fcf34d\n45f3e43e-1ea2-4976-8098-53c0a0e2c08a\nd079a2b3-d4cb-4bf9-a7fc-0173438c4712\n6e1adcfa-6342-4f4f-ae6d-4c88e3fb0db0\n27a569f5-2c16-4dcc-84b3-16a3e4491a6d\nda9eeefa-30c1-4d60-84f8-4b18d8ac9584\nc18a2497-c2d0-41c2-8059-97edd7694491\ne002f0d4-beb2-43b1-9b58-72a962907149\n2af4f2de-dd32-4399-8612-e3a00dc7fb11\ne152b6da-f191-4a0f-9db8-8f7657e154d6\n46928be9-8123-44a8-87f1-1f0b6cb62f4a\n2d17e20f-8ecc-41c4-a361-8a5a4a5b4a23\necf54d41-2f8c-4ec1-b568-a993a44f7bc4\n0164f449-ce67-4e3b-b85b-7b5c9a4c9476\n8df77937-c38c-47be-ac09-239680e18ce9\nd2d2a6b6-4c8b-4e72-9a79-768a7cb09d6c\n5eba914b-cb37-481f-aeb7-2425d4b9ff00\ne6d0fd10-e798-4e43-9376-3ad9cf7b09e3\n5843afef-c424-45e1-911f-6500cf9a6b78\nc18b8409-5285-4d09-810a-33723128acb1\n82e126a0-ce2d-44f1-bdfc-281699bfd5ff\n868bee39-e840-4742-a25c-ccbc38fd6660\nb8b3597e-283f-4dc8-af6f-da5f6d2cd68b\n6030af9c-2748-4942-89ac-1950598a6c65\n7881fcfb-0335-42d0-a8ad-a44c7dd81b99\n596e1522-cf01-42b7-bf54-527908ab3b90\n0d3381c2-8560-4554-a721-07fb38868b93\nd9e41b35-3a20-4f42-982b-93c59f6716cc\n321facd1-147e-491b-a1bc-2cbfd07b6a35\n0ef293c6-189b-4d57-a987-c4d9e3f25096\n8a836fc2-d6e5-4260-994f-0d3912468e7f\ndbb16b0e-f730-486e-9ca2-c85cce1249f3\n4fb64feb-808e-4a54-aea9-d6fc45fc504a\nb5454f1f-7a01-4e3d-ac25-4a4e9e96f7b8\n2059389e-d030-422b-ae66-3208908a2fb8\na8c4b11e-9d85-43cc-8142-34000194d3ec\n4ec60e7e-6562-4829-973a-1422c2b53fa9\na81ddfe3-bafd-4b60-b65f-5d8991e4cb82\nbb210994-f520-4bbd-946c-bc70b4cd50da\nde7c01f5-cd37-4d74-8599-d21ca9d4acfd\n9e832aaf-1dd9-4c53-8e34-8fbbd2d8a07a\n2fde0976-138a-4b5f-b896-6f6a3f3915d1\n716e28e8-b1b9-48c8-9c60-22afd3bcbead\nc46d3eae-9ec4-4e57-9af7-43ec4b12aae4\n3036af5b-d6ba-44f5-a874-9b522cdf2816\n7a02e0b2-05ee-429f-b849-e38ae1292376\n218beb4c-b94e-4466-a9bd-b313e9f43797\n78177129-d080-416d-9465-83befcf5adc3\n7904f206-e7a4-49c0-aebc-572cb4aa9247\n15aca19a-4647-4250-8199-a698f78ef121\na14e3415-8ff4-4b07-a0ca-0456d4124457\n847ee564-55b4-45ca-8b46-bd90bdb44455\n59e58699-d125-451a-a977-296526a70e70\nc9532424-0f03-4c30-9c2c-0beb8183533f\n8695642e-41db-42f2-a5bd-4a25e3b56954\ncc7a00ac-b790-48fe-80bc-c7de96081463\n0669e962-5e15-4a84-a5e3-0e5ea100e6d1\nbb8ce4e8-06eb-496c-8305-da7f6f902121\n34bee8e9-46e2-43b8-9521-c1c06ed7464f\n3eadb41a-1eb2-40e9-adcc-ff38297aa98b\n2770f147-39ff-4961-9d5b-c75af616bfd2\nffb8a412-ed99-4991-b96d-dfcdb6708a20\n3a973f4b-f240-4f4e-9c1e-2a41c259a47e\nca153fb7-73b3-4488-aa30-51042d13ea1f\nb61c8c08-59c3-472f-8211-43e27d59e9e8\nbbb25b9b-87ca-498d-8651-6b5d691d945e\n0f8e703f-69b1-4682-b1d9-e13b15aa64ab\n31bc468a-1d2f-4d3f-bfc1-b19aa05ee714\n4cdc0178-5abd-40c4-9642-c95f3b190e98\n94ace269-c90f-40cd-847b-9ad3f0bcb919\ncc541b44-036c-4449-90bb-403e4d2ee40d\n0620073e-febf-454c-86ee-543051f7f4d8\nb218e0e1-1dea-4455-8166-3eeedfbffc4f\n317f14dd-ac1f-4926-ac68-90811164c036\n81c420a8-e366-4c76-8329-6a7d4f600834\n9be08a46-cf68-4490-97ff-292dbd4266ba\n46fa5b48-45a0-4472-b4a4-f25d90923ce3\na97c5349-33d3-41a8-ba39-ec8109abf6eb\na62b1375-82c9-4246-8b6e-8825af9080f2\n885da953-6493-4084-9106-b8d34b8028e5\n6cc9ff67-7eea-4b20-8ca1-ad1c450907b5\n5810166d-9e61-41f4-ae8d-e767604d03c4\n531f5695-e6dd-4f05-a282-9699e8bc08f8\n2685ffb2-d60e-4f96-9cfe-8fc1c83a440b\n0f35a7d3-969f-47fc-9d78-15c9b3288dd7\n63b4f87b-ab8d-42b4-88de-2f073e90913b\n61a01e73-51a2-4ae8-8bc4-ff2d10a9ae4d\nb0a9c7d6-6138-4c4e-a0e3-41a2eb421eb3\ne30ad52f-ddae-4d59-982b-32876e1db176\n9cd3f2d0-71da-4552-b525-59562f9b203a\nb6e6a36e-db5d-4ce4-8620-2a75c471d4c7\ndfd336cc-f77d-4352-be6e-be542ef188bc\nfea36147-cec9-47f0-97b3-a35b12bb356a\n2eefae57-7859-4516-99b4-e58f40619369\nc83a6378-78ef-411e-a8aa-9288c9104fee\n80855eae-49f8-407d-8d4c-7b94ee129cbd\n6f5bd56f-2566-4804-867c-a9b2a425cb3f\nddcd22dc-b2e2-4c93-876c-b0c1570fc001\n6c60c364-b7ee-48f4-81e8-47a47e096bfb\n59db3d82-db23-4640-9761-a37312d32217\nab94c8f3-bb3e-4c10-9200-44d2dc3b00c8\n3c2c9bfc-7aa0-4588-a42f-74a15d69dfa5\n3b7136ee-47a3-4793-abd1-2ced7146667a\n11626629-7d3e-43c2-bdd7-7472be0d30ec\n1842c073-63d2-4565-ab33-182c8430056d\n5d4839df-3115-4729-be27-0092e9d4346d\n52807669-cf24-4027-a1a7-4ab44b470646\nf4ff6a51-ad86-4024-87ea-254fa3c3d03f\n3727f144-698b-4ebc-b631-e5f6a081b275\nb1ccea0d-d493-4d5a-a3ce-ee8810c2fedd\n2d4fe8fd-3691-4377-8916-90d414721483\n7bd77bdf-9901-4c55-aa20-d60955d97cee\n5c33ba34-ce44-41aa-bf81-ba3711401c87\n69f0df8f-c603-47a2-891f-48bba06dcc5e\n90914914-f8c5-4a3b-b235-93b99fba53b7\na35f4aea-de87-401f-9932-290a651c3578\ncb50debb-da77-4d44-8021-2a07ba78348c\naa646139-aebb-4a01-a6fe-3ff6cc49d8d7\n2a79d5d1-ca8e-42b1-8a7e-7c7b9ad35a1f\nb93b4016-fe05-420c-b3b3-a55bd1661781\n8d7093f5-b7af-4b66-99d8-be26622877d7\nde84f653-bb9f-4734-893b-c114944d8f86\n5de3e77c-7e19-402f-8606-6c4b365e845a\ncdc21622-e575-47f5-89bd-7f5d459a3dd8\n28edd545-90d4-4d19-a6e9-2d07051d66af\n884f010d-2c20-4085-949a-aac3ee3c412b\n227a1cda-efbf-42ba-9f39-771bec014f9d\n48f63719-f61f-413f-9cf5-3ec458ab8d38\nae9980d3-d297-49b7-882c-6bb08e14a442\n4b00b971-5dc8-4180-a316-8c7efdf2d99a\n97702770-a3a0-4f96-a8a4-c4390e6a3e00\n552f6e34-e52c-41c8-86c6-18b9436663b1\n7749e926-c7da-4693-b201-6dc8943bef33\n4712a1c1-2679-4da1-a2a9-c1e91a37abe6\ne1faad41-6a2a-41cb-b879-0f02e6100c2f\n5c45d967-aa2a-4012-be43-df94339a49c4\n5b31fe21-7ce6-4ed4-9ee7-adf1222e2762\n10786e7b-db29-408a-8ee5-204713eb8e30\n44c647e0-274b-4aa4-a7e6-71217be56f83\n72d494c5-cf42-4b5c-94a3-a7d74f6c663a\n61f9f7fb-698a-4972-97dd-872a216f0732\n337d23ef-e8c6-4d5f-bf2b-cd579c4cd417\n8ded66c6-9d10-4bc3-9ea6-dd53f5ffdded\n432640ac-6406-4fb3-990e-006055fa1758\n2d2eece6-b740-4832-98f2-5e2ed68d0b15\ncf084c63-651c-4506-8b99-06a0fb431ab9\nd4fee794-45cd-4714-b92f-184049b5304a\n0f85489c-a2c5-42f2-9570-f5d5c352b368\n5b9d71ff-15bd-4863-b53f-eb54d528b12a\n06b4bba6-f456-4abd-b5c2-eebd35fc2257\nd3724b5b-c642-4754-a69f-d8c6dbd19e51\n46916d1d-c783-4236-9391-50fb2dbf7527\n8d84efbc-1fb0-4a3f-9713-fa3f17a1553a\na0633d8c-a619-463b-a0c6-aa93e832029a\n5f970c45-9084-4e69-a931-f236ee86c03c\nb049b9d0-b781-4c86-933e-044920bd167c\na9d3a50c-7caa-45fc-a3e1-eb4effe97b24\n43397037-6f7f-43ed-8a6e-74a0cdf20cae\n82db7ed1-9a3b-4182-80a7-eff91eeaa213\nf60f6c96-9d59-43fa-96c9-209cb8e36749\nc0bb11a2-ff40-4811-917c-86ac634debc0\n80814a2d-217c-42ad-9a8d-3febbbed5d9a\n6d03fc74-a5fd-48ae-b5cc-4b571310d5a0\na1ad7e40-dcae-430b-826c-78367bafe615\n9fc1177f-e189-491b-bd6a-d67cc1f061f5\n07767a71-1464-4ecf-9962-56883db7d4c2\n8e00f275-40f1-4ca7-920e-11e61b842109\n1ced7e90-e23f-4755-b87e-7b3c9d0169a5\n0deb7dcc-6eb7-4b71-88bb-aed92994022f\nfd3ea3a5-d6ef-45f1-b381-87788a778b09\n39a636b1-d82a-43f8-be04-1199301119ee\n6676f94f-e1d6-419e-8e57-f33a6c68eb92\nb6cd61f9-9cd8-447c-bd0b-5adac547bf69\nfac743ad-552b-4a31-8308-b6f011ef61ce\n2adedc9f-a8b2-4d8a-809e-c805cdd66064\n23bd9bbb-192e-481d-8464-970f996b901e\n7d5e88ab-6e4e-4713-9743-dd953dc85c5c\n09312e0f-8bd0-4e89-abba-fe1d95a5136d\nb9e6337a-d531-438e-b9bd-b01ebffb90af\n569e2341-f91d-4dc1-86d5-ee5448340177\n4c3fc5ef-5733-44cc-b323-a2b71b9fa51c\n8209f6b7-1f85-4df5-9655-80776ae54f51\nc920c454-4629-4cf9-b663-3a6bb5cf70e8\n8ea119ee-bb45-4c17-b967-5d50b3707566\nb8f0a61d-bac0-4329-82cd-5a1c1130c497\n6ea91984-668c-4dec-9656-b9408d07e696\n574fbb2b-e432-4d42-8d69-a44d7834479c\n8150504a-3394-4a3c-9b6a-6c59e67dc1f3\ncc7078b4-0427-4fad-8c0f-d6b137d1d98f\na821c789-0981-46dc-b5e6-2d10aa7e95f4\n782b9b42-e77c-4a06-b916-7be3686476cb\nb033369c-7afa-4c62-9ec1-c418f7c46fbf\na4f21558-a9e6-4f3d-8986-9744168b5353\n5b9d90f7-012a-474f-b111-5a1e78e5c357\ndd17b32f-9d9c-4448-9175-b01a5018e7f2\n0adff703-89d6-49fe-8ecf-ddd05922ffed\ne10709ed-ceb5-481a-bb1e-60ec59a74fc0\n6a00b24c-98b8-49ce-9ebc-9768951beaa6\n53bc776f-969a-4f76-8e6b-fbf9f7d5c10c\ncfa09d2e-dc5f-463b-b209-1c716dd3bef8\n515e84f1-b990-4273-817d-d8f025f773ea\nac317535-f52b-48c0-b40f-af05b0177c7a\n799c8e19-636d-49d0-b644-e2f4a3d698f0\n99e50321-84bf-471d-b755-a50c1fa14668\n8b386699-bd5a-4b28-851d-283fa65142ce\n5d8f6cca-deaa-4c93-b9af-3530021fdb7e\na69b2354-f21f-42fd-8855-e091f0f64f34\n8a7ec28a-d391-472b-9fb9-3e69cdad38b5\ne7067685-4615-4257-8974-973dd4b838b1\nae7203f2-6c74-4d12-9da1-25c38f60ff3b\n2f34aeee-e9e6-4ad2-9b3d-ce275e59a4f7\n6dd46e9c-3f40-4c55-8b3d-e07e8ef59a55\n38312d1d-14a4-4bee-93b2-4a961bb24a68\n7236c890-9ad7-411c-82ff-9c4b8b0217f5\na742c39b-b7ac-4252-8257-86a165a0975d\ndd60f21d-9788-4471-b921-bbf2762779d8\nbe73bdd2-faeb-4e9e-a7ae-ff4f7001a8ed\n81a57dbf-e6e2-4126-a5ae-ce57a6ba3b31\n94bec185-1113-492b-aea8-41973abd00ba\n3d72c016-944b-4eb8-907b-998741f68235\n6ab2f87d-6691-4b58-8520-181b223243e0\na22c6a7e-ee9c-4561-bab3-6c7ebb38ec17\nf03393ed-278a-463e-ab48-3c6a621588df\n4d52e12d-f67f-42cd-99f2-fbdb0db6f7e3\ne5266ed7-ce0c-468f-a18e-78f651f659a8\na88b5f2a-740c-4b6e-8c05-1c5920932a88\n49c779e0-11c4-4993-ac55-beebc7d0754f\n52d0b6e5-9662-4029-b3e5-ef6e7f5820a6\n0978ecb7-8e62-4239-bf19-23296aa2943e\na4859a00-ee18-4d96-95a8-27b7664e66db\ne651c2f2-c212-434f-9e11-2309898e2205\nabd0ebc0-cf0b-4a1f-81ea-ecd7a125cfc1\ne20141e2-aafc-4091-bd14-556db895da3c\n8da1df80-3921-47bb-b3d4-a030a786b3ee\n7a6f8fee-5c71-4f28-9ee6-882e5aa6059b\n064f07a1-7ed9-4cfc-8a9a-d2969a08d3c4\nd2ca0724-9b9e-4902-8616-199863e34f82\n388c37ce-c313-4e17-8e22-acf26def6e99\nf0eb2d09-e2be-4d6d-b016-d2e341f33b1e\n09654387-437f-4d0e-9637-4115af12089a\n4196fdcf-1bf6-4274-9dce-97e09b9398ea\n70be4f64-25ba-4888-8f36-396baf883177\n460681f5-c16b-44a7-abd5-a5b0e37d448f\n57c9fd4a-e093-443c-941e-cb7f44a57333\n699bd82e-d72a-4322-aeed-adec1dcce49c\nc0b1f1c6-247b-4511-8347-3dd881fd1a29\nc96f394c-134d-42d3-9964-970f0ad25818\n654ddb80-39e9-4697-9360-e8cd6a08cd3b\naa82624b-006f-4ec6-b879-4e566dd35339\n339fba99-ffef-490d-bab4-4021fb8023e2\n36adb747-24e6-4be7-9b96-50badeff0217\n0a21b1b3-38a8-4cfa-b33f-7bb38ac20e1a\n68965bc3-39db-4189-b617-88c0e9696466\n7571fcae-9227-4f73-af94-fb2946eb6893\n3720dd1e-54e0-4d30-925c-7d96e8e325f9\nc6835e6b-11da-438c-88b5-64bd31554646\n2c0485db-24a3-4cbf-bfa7-303074c3d175\n7abe4614-68c8-475c-a4be-2e41d86a09fc\n2a2a9bb6-0bec-475c-ae38-960d7dec6a91\nf94284e6-bcaf-47dc-9c79-4ebcabd75c96\n1a38bbb0-2987-477b-bb30-fccfeef5b236\ne0f5cdf8-6e7f-4a50-889a-f97dc0017434\n69383263-d17e-434e-b807-3c35d560aea4\nba6fb0c9-8cf7-4383-bf81-aafe08a9aecc\ne39fcffb-59cc-48eb-a2ed-a07a4c401783\n2c62d94b-d6c5-4d4f-8a88-615130c9d122\n1b5f8195-88da-4cc8-975c-afc4bab3a217\ndbd3c141-c733-4ba2-836f-e07e1f5d8652\n517b0572-b10b-4ec1-aebf-98532158cd0c\nff7a757a-1a8c-45a6-861a-e59bba31509c\n084d6985-a17c-4ecf-bb9c-c4cc2bee9573\n9081bd46-6345-410b-a099-8f8aff26e609\n1acdc1fa-3d14-40a3-84fa-7db0a167c4a8\n2dabbfa8-5fd9-4414-8bd7-b83ad9ffd531\n54d716fa-c847-4676-a44b-b10638bf6dfc\n8ecfdc30-b8a8-41d5-b2a3-0446d607164b\n43366a8c-5fd1-418a-b1c9-8a92062bde55\n42928491-037b-4b9d-9ee1-e1c853cf6910\n78e221b4-eb8e-4876-8857-3ef7724f242f\n91a869de-6d27-4a0a-9bbc-40aeee3d8163\n14e5aece-de0c-45ba-94b5-4c66bf9dc596\nbb889b80-8f3e-4068-b2d5-a4138d7b309a\nbfd5738b-2b16-4387-a61b-6d3fedefcbb4\na9464e26-0bad-4c81-9a10-7e8387f64281\ne698bb3c-cab7-4bbb-8a7b-aa9ab6dc814e\n34456c47-3783-4a24-a2d5-cda4bf5de752\n2c0072d1-e028-48d7-96f6-3a3a5c4c8339\n615969e5-bdf7-4a8e-b45c-39cbdec0ac54\na4123c64-cbd2-4461-9c69-9d2cbe5a925d\nd2478736-d732-4af8-b6e9-5287d37b18b8\n9830e675-891d-4dab-920d-c977edf5ca89\n3b121779-103f-48db-9c90-d129889f0552\nc2f8e4e2-dbef-44a0-9c1b-4dd47b4aa86d\ne15bfe41-0015-422a-b497-054812ad872d\nb900f1dc-101d-4532-9056-aa863a4d23e9\n79d7feaa-bc34-4dcc-b39f-5440c9d1df47\n53869c49-10ab-493c-b13c-2a573651dd3a\n65292b92-cc5a-4df4-a043-ebde1812d3bb\n6e7bdf00-9c46-4a70-9a40-53fee82d25eb\n113ae854-400c-4ddc-8b80-132c483ec551\n98826015-31c9-4987-bd7a-405833e8190a\n3bb47d68-8f25-423f-bc3c-b980a84b3004\n7cf408f0-d966-46a7-bb47-44755ccddb8b\n11ab0abf-ef2c-4a7d-9a58-17ed668713fa\n7f759b67-c8fd-4eb3-ada5-d2b1d78fd388\n217ace58-e3d3-48e2-8e9a-7752955bdadb\n171e577b-0873-49e1-8281-c8f2a90db092\n8342e4f7-a183-4658-bceb-d69998996229\ndcefcc02-e8ad-46ac-8406-dcbf3df845e8\nbb7da1e7-669e-4680-86f1-b55eef424007\nd172e884-0dfe-4632-82dc-af8e2a5a9d77\n8f5e13af-1f48-499d-8fd4-4951b4fca0f8\ndef1e0bf-3a9e-4457-a18b-6d19acce38d4\nb2c68260-c354-4a04-b983-7137a23d6de3\n281d83b2-9b53-4057-9f7e-450841c9aaee\n374c41f5-1615-480c-bec0-0b35bf56dc98\ne63ac618-9176-4167-8283-59653d21fa3c\n755d5d4a-c177-463f-8c99-baacf77262ab\n8e905358-9ac8-4d35-92e3-0f9894811164\n03c07853-4110-4a17-b25e-54154102bb78\nf9272977-1c6b-4cc3-919f-1b872631cdbc\n936732ec-f9c8-4c00-bb96-14f8dca8ce6c\n5fd9906a-86d5-45fb-98aa-94dc13a5ac4a\n483ce3b1-a343-407a-94ea-937fd9d0e40f\n2e93cd0e-8dbf-47d1-bd2d-cc957d607f10\ne3e64b37-fd7b-4518-b7d6-3bfca412c8b8\n0dc92639-92d1-4c1e-af07-310e39c9d414\n2b5db34e-de2f-4f0b-8d18-6284fa43d0f2\n1281475a-71fd-4ff2-8fac-23e8a5b854f7\n45bb38a3-5989-4d4b-9fdd-806173eb106e\na460b80e-b532-4670-8bac-58f5e92c3773\nf4e32762-c3b2-4d8d-b7f3-57c8fe907c7e\n180a66db-9a64-470c-8d3d-604e26b825c4\ndff2e5dc-e31d-476e-82a1-87ca04d1453d\n5a258565-ea33-4a10-8298-549c64d8a078\nd24e25a0-ed8a-439e-95ea-21f30620e422\ncf5dec18-7bfd-4a70-b2c5-cca8b44b469a\nd3130565-0206-4b35-9a59-73541bab366f\na972b392-78b2-4390-85c9-7c2e2787a34f\n5434a9d3-9a34-4cbb-b6c6-ff65aaf71e4b\n41eea244-8358-4934-9d69-bc31fabf1cfd\n786f034b-725d-462f-ba0e-91822e035ea9\n22554c66-a83a-4296-a724-208e0d18c7fe\n7ee6b73c-6fab-410a-a640-aa6d41cc8050\n7139e77d-9132-4884-a616-e230d2be99a6\n8d46d83d-e71d-44be-ad1d-a4edbfba1aa2\na78e3f60-557f-4735-9fc4-0dc8ba6ae6ac\nc3a30dee-d5aa-4619-8355-1410c862575e\nff3d50b3-43ed-434d-b92b-f79959296f61\ndb0d654b-2d43-4711-81fd-77e0ce8aee1f\n89e67179-f35d-4949-b83b-b6ff8d7d90a5\n01a09e62-2aaf-4953-adb2-d7b253487a9a\ncb8f3d18-f256-44b8-a541-276b29f8aa4a\n1c32cca5-5e8f-4044-b9bf-121ec472f62b\n69bee11d-a7aa-41cb-aad3-3367c5be628b\n9b703074-608f-40a7-b05b-701256469103\nacf55e37-188e-41fc-8838-58457634de5e\nb4671405-4121-4a70-9731-4d0718c41fb5\n08deac9b-339e-4bd0-961d-7dfce5b5c035\n4f066cd1-5386-4241-9914-4bdf2ce0f7da\n9f4ad636-a06b-4932-bef4-bac77f3c7844\n22da365e-eb81-4e99-b504-6f3a223e96a5\n97e2599f-fe7f-463b-99ea-b048b97a4cd9\n9d5c4671-324d-4458-ae1b-2cd233d6dbaf\nebd26237-38c5-4660-8974-620dff254141\nca2dc39f-72aa-4852-b7fd-f4c328941dd8\na3b0c881-1c5d-40a4-82c3-fc421c711e9c\n600651b9-3308-430c-a004-2eac99f5c140\nbc01200d-b6e4-4aeb-af74-f5ad91a89f95\nb4488878-e5f3-46a6-8171-41319b473960\ne86dddb6-468f-4ec5-95fd-70b5b87a0ec4\n9021457d-4a2f-48f0-83c0-06b9c3f0cdf8\n46293bd1-ea27-420f-ae47-eb5a621a19db\nce748fbe-66d8-4a67-8926-08311b33264c\na7666947-9301-4fe6-8ce9-207f32e6dd2b\n4c9519c9-c786-4d30-9fb7-766b83cdec6a\nb168ed3b-2e73-4c9a-9665-0065ae24c422\n0fe30173-a08d-4bb2-8165-525cb9b25c8d\nabb37e55-222b-4ab6-9db9-71e106a2f10f\n50e0acd0-0516-4a58-b0d5-1a874ba61bfa\n34aa3905-0e56-4ed4-8a50-38641a49d5e3\n75f1fe4a-f210-449f-ad74-d0a9d7a11b1e\n28fbaecd-0fa6-4655-ace0-d3ca129386ae\ne853572d-b449-400a-af4c-dbb14b001dc0\n0c4a8d04-cbe4-415a-b9e0-8b554e147066\nd446f2bb-642a-4f4e-90f3-72d29cf09dfa\n701d1da1-e3a6-47e1-96cc-e711d8c47519\n6e4bc7a8-e953-40a8-9377-47e049b1d4a2\n3059656b-b8dc-48fe-bb1f-aee794e3440a\n5c6acef4-d238-43d4-a5ba-bbe582393540\n4db14803-3138-41d7-9d91-ad1cc5923f62\n9ed1fef3-1dc4-4d6c-acee-8407cea6ddda\ndfe47208-c859-423d-98f1-af18b2926544\n4c3042cd-c67d-4b8b-be3a-3e7978882da1\n9f49613c-fdbd-412c-b4f1-3d4c016c06f8\nd054feca-ca59-4e97-a3c0-69bc32367777\n3236fbea-c83c-4de1-82fb-0571d6b67478\n75961157-9b2d-445d-9bd8-7267189f9a4f\n7c276f1f-9408-4dfe-b502-16a78a7e8225\ncca26c80-20e8-4e21-a8c2-b1bfeb1647d9\nc17d8f19-dea8-4de4-a4d3-6f2b8384589d\n8399bb32-8d74-47df-8321-7ff5c4631fc7\n2f07b416-f78f-4b8f-a6ff-9f465cd65fe7\nb24b3388-5203-48a3-aaa9-1fcceef332e6\nb1ad2486-70f9-4c76-bb55-24ee7556f0cd\nad4ec5dd-371e-47be-ae90-6ec810fa8996\n0e17a96f-e0a6-42f5-8591-290fb88f77d6\nfddb97ba-30af-4210-a8e3-c9e2d1e33ed4\n876a24a0-e49d-4865-9a52-ec05da65a2d0\n633a6929-5178-4348-ac55-50bab68bd10c\n9cbca15e-1970-43e4-b92f-0ccecf0f7288\nc239d68a-1f81-4300-95dd-b0f573c7ffc5\n68cbc5a9-5582-4b5e-885e-5383dc548bcf\nfd921962-9c7e-4eb4-b314-a8485dfd21f6\n8d617ee3-6996-40e3-b0f4-f1d6ecefaf1d\n147c9aea-01de-475c-9244-9cacc0e50407\n8639baad-c2b7-4f3c-bfb6-b9d7deb33f25\n32d5eac5-b4a4-4a6a-aa1f-c61d8791a515\nd49f55a9-c05b-41cc-9031-bc9e0cad2e47\na74c7b6b-4e2c-4174-b35a-ae308cb8911a\n2560277a-37fe-4db1-ac24-7fb7c8710232\n30e2edb0-1c4c-4fe2-94f4-22a3c83a15c6\nc43ab801-5309-46c1-b0cf-47ef9cc11038\n8e8809ae-d01d-4901-92d3-b09d01c1634a\n30dfb384-e00c-4126-9642-5b6b02233615\n7c309cb8-ac79-49fb-8a41-99dedd2e5ce9\n27d74b3a-3452-450a-9826-e214c5ca176a\n6d47ec2f-5b5e-49e1-bf7e-b28b243e4410\n039ebb33-6790-4e17-88e7-a86ac4c4121b\n15d4c682-6a1a-4ddf-8c3b-e12bb8861539\n6edd6420-2beb-4764-a09d-ab0f38075b8b\n2f797495-90be-4d24-b013-1f7f843b07c7\n8d6dcb2a-4f12-42ad-9ae5-6f1ec07b3bc5\n8add2cb9-851d-4c72-ace7-2e0ffd9b205b\nbd7ecbdd-293f-49dd-9d20-570b9570b059\na140218f-fa0b-4a5d-a0a6-3843ae35f059\n98ebfa0a-edeb-4bc2-83c5-bda93ef090c7\nad2f7f8e-9649-489a-a8c7-3ae70d05b0ca\n7fadfcc8-a886-45db-bf7b-2a5351cf3f1b\ncdf88d35-709d-41fd-a117-fd58e80aacd9\ndeba1f8b-b935-418f-95e7-dba7239403b9\ned019dac-ae8c-40ac-afab-c98633b78b53\nd9117b2a-1b24-4521-a804-94e8506ceaaf\ne54a1d5e-a543-4579-bd39-6d67db902831\n9085345d-72e5-44a9-92ed-538bb9e1463b\n88f1a69c-bdfa-40a1-a662-b63f28dd34d4\nfe65ae77-63f7-42dd-8ee8-e1fbe1f402b6\n491487c2-4df9-4b2a-89cb-0ceb5e27bd2f\n0da7a97c-75e6-41ff-8a6b-defe9856438e\nef2c5f84-443c-44b9-8b68-43f0d4904cd7\ndefa4e8f-2d33-474f-8f22-c849a667613c\n545c6087-5e32-417c-b529-1551cc8c02b5\ne5a5303f-f1c5-4208-8867-4f6fe08933e5\n04296205-af6b-4477-b9f6-0190e8e0949b\ne7716c61-e921-433c-a33e-5536a2b739d5\n5fcaa72a-49f0-4978-905f-de1851a0babd\n016f36c7-0fc4-4cd6-b008-ee185d701ed0\n15ec618b-d24f-4b89-aa3f-fb93b90244aa\n63929065-6993-47cd-bf5a-1f984f238ae2\nc2970c0f-7855-4c96-a101-23bcd7e1d59b\na1e64fc1-b557-4672-a064-6f7e9e769f8f\n8ca57956-40b7-406a-b9fe-d828488c05ae\n8e95bc9f-6f71-4fd6-b09d-9a5015240210\n5203d855-57e7-4402-aa72-6f20c84705b0\n5d4f38db-158c-4aad-9f63-290fa7939eeb\n9444e3c2-7a86-447e-8558-bb7774211896\n21bde4ca-20f4-4a80-9a8f-5ad39fb4ec7f\n7e1004a4-60a9-476e-bd92-5dee875a39b7\ne2bb0a15-6f31-41ec-a0dd-eee42c89f7c9\na4884564-5fe6-47ef-a281-f7b70ce6314a\n8da6de59-72ca-4af2-b121-b596b111d459\n0f42c7de-08fc-45b9-8eba-2dfda8a0d401\n9725a885-c5f0-43b0-901d-3aff9b00a070\ncdd8769c-1595-4ee8-a2a2-0678199952c6\n93071d1c-11db-4ecc-939b-62638cf28d96\nc8350810-a633-488a-8820-0203f312ed13\n7ff03390-0194-47c6-8f84-56b13864ac29\n2353cf1f-1bab-45fb-b39b-3261a1d5b78b\n2351f0ed-6c95-4bd4-b16d-08acbab8d491\n84f34af0-2c0a-4632-825a-4f1d1388cb3e\n7e7430b7-b023-4f4b-bba2-7b6eeadaabf4\n745dbcb9-863a-4dd4-aff7-8e7607504aa5\na6182f4f-80fc-48a9-a720-19d1fcc67ee7\nb2a2559c-b972-4116-850e-0faf30b5fe45\nb2acf347-cc1a-4a2c-a6e5-417bf054cdcf\n2afdc4f7-f088-4e69-b211-385023413996\n6242ead5-7cbe-425c-868f-b5ab862ed742\n1d690bf5-c378-4c49-9035-cdcba9f2be8e\n84a7bad3-ab9b-45c9-83ec-747b5fc02c1b\n4dfbfd5d-0059-4a65-9246-4a816b734b47\n7bfcd84e-d86e-4883-aa76-8298a012a085\n2a4bc817-c416-4c1c-a9ae-a9cac9121983\nf57f3413-b137-4a6d-89e9-cdce86a78791\nc6a94261-7e90-4f3d-a11a-963d3ea53eae\na80ff724-fa1f-414d-b2ab-3661b4362f69\n58e142d7-02e8-4868-ab3c-ca4024d8b548\n7f42d55e-01a7-424f-848a-c35c8cc30fbc\nec004c4a-dab2-413e-83c7-85863825e615\n5119e6f7-bff1-4ba6-8265-e1a650f87662\n1fda0dce-4fcd-4bfe-9f21-222309eb3a8c\nbf674c19-01bc-430a-b592-ffe18cfff553\n12208aca-b38f-450e-bcf2-dc512ae24578\n89072f96-f60d-4b59-b743-24fee65b4b61\nc8d45f38-af5b-44ab-b52b-029dda85108a\n4b6743e8-0ae6-47ed-ae21-3b17d6d0f89c\n40f8d02e-1543-4451-9e60-27db1313b841\n356df1db-d672-46fa-a672-9b6fe24718c0\n7cdc9628-c6be-4a92-b53c-e525d8e52041\n33ff8232-8f7c-4ec6-accc-54cefa52fd1c\n528f9bde-eec3-47a0-88bc-0b3cfdc692af\n20f11dc4-7fe1-4a85-8d35-3ff25333a251\n13b5a780-c38e-477a-9650-0a666400821c\nf982341b-561e-4583-95a8-6b49d95585cb\n77ea3a24-0b66-4f68-b327-90850bf5b68a\n3d657ee3-6f93-42c7-9af0-4d12118a6605\n5253a825-59dc-492b-8405-ed5acf9a69cb\n809e1448-09ad-4eaa-b875-043e02fb689b\nc964765c-03c3-4366-9838-bf80596f0057\n66c4e483-f5a9-4b47-8abe-2ee2d5884bfb\ncda67bdb-ed5a-43e2-b149-5f9347d13ebe\nc103526a-70f3-4c11-b1ef-05df213f7d8b\n1e51c9ff-b19a-4bbc-9126-897ac93662dd\n03fa4421-f3f2-40d9-b582-8810731b8304\n0f9f064e-b77e-4c8e-8e77-38d2ec3b79e3\ncbb5f696-1058-48fc-80e1-5305a7e274f4\n67146650-4c84-4fad-bbd2-7ef84e1276e3\n19a30bcb-7179-4b3d-a9c6-bd5d0ab40673\n6f32266a-af0e-4805-860a-4ca1c25d3eb9\nebb403cd-4937-4888-b6d0-828709d86c5d\n9dbb88a1-7eb0-47c9-9b87-3af9dac2d9f2\nd331f5e4-f55b-4d1e-b11a-54e16ce3774a\ndd764399-5909-4940-a1b7-0073bfe4501f\n02d9204a-ce0c-4629-bfb4-cc485e252110\nad051c5a-e528-4710-9e2c-47d07d9278cc\nd0a07864-0c58-4afb-9aae-46b796313ced\nddab172f-dc22-44d5-abd9-a6fa3e06cd27\naa3bc3fa-404d-4751-8d62-048abdec2f83\nc42ec8c7-07a7-4416-8dae-d40f9a7e11d2\nf967728b-2802-4c49-9be5-611a3dcf9e7b\n584cd89b-02cf-4d0a-9732-ebb688592c7c\nf1784037-eddd-4ff6-80bd-716d5c4ae583\ne7c2d4fe-a58e-42f8-938a-8c08d207dba1\na4bdbc23-a8aa-4bf2-bc3c-611097de9fa6\na1ac84b0-8274-425b-acb6-5a2bd1976ab9\nac1e8741-5ba1-4b89-98cc-4c5b5f3c77c3\n90f81ea4-c6b8-4c2c-a916-b712074fbb7c\nb4629acf-e81a-4f4d-a49b-3da1523d0476\n3de6b120-ac8b-4dc1-a798-33f95bc1cd80\n546f4992-8135-4d57-aefa-920135b89abe\n6420c916-6ca3-4ad7-bf06-aa3cbc62f644\nb5ee4f5e-ffa3-4f72-9cbc-d9ed2cbc646b\n8fa060d6-13dd-4354-aeeb-ff0fbb2c4591\n2f58a9e3-c510-48b2-b080-886f1d0648d2\n097ec758-340c-4d57-9b0e-d36eecbc9f89\n8292036b-df4d-4ce4-b2ed-06396af5f013\nf8da0e23-1496-49fa-a7f4-7c243bf92737\n9fb8006d-3f55-42aa-8d5b-d72ddcbd40cc\nd51269c7-ca8f-490b-9571-6f863852eef9\n8133e803-85b9-4956-a411-0c0c92d3b90a\n28fe5478-c858-4c66-92b6-17b229627c03\n9c4a1955-52ea-478a-a9fd-294beb9f8a2b\n8916de7a-346a-4339-8fb9-16f0354ef0f1\ne0416915-81f4-4f55-93ef-1a6af88beaf8\nb87ed7d6-99a1-4500-9a11-beba016eae90\n919141e9-3a37-466f-aaff-9a472686b275\neec2ea75-46d8-40e2-bf8c-f133ea5b59d0\nc1478ada-5c70-4227-a2c5-0d080cb1eaf1\n66c0537f-c53b-4eb5-9504-1a607f19f26a\nb4a5f371-1054-453d-8d79-cf901c7f10db\nb12368fa-41e2-49af-84e9-9aac919dcc34\n326fecfc-bb67-4754-9e0b-0445444c280b\n205a5ebf-519d-48d1-902c-167603b9fc46\n85c81210-fd95-45a8-b5af-8a8a2fb8e323\n6e9df64f-9f99-40c9-b731-235780935838\n83cc7440-3601-4d57-a964-a4b7bb32a92f\nba32e2c7-4631-4758-91f4-2838755b05a0\n41486626-299f-4aef-a8c8-acbd4a90e767\nb362a645-3a44-47d1-bd14-d8c74181e895\nbb60f16b-172f-4664-815d-2f0bb0e3abad\n5c81c02f-9b9e-43e1-8125-c3435adce7ca\ne938ea73-e6b7-4791-9382-78a6cbf65f83\n8867c37d-c96b-4ff7-bd29-92f71df3c249\na7fe2767-70ef-4869-8cfa-0b1a61d2b6c3\n24fd2b8d-7958-4cde-a324-d8dfe0f3794b\na0a7a16f-4f6c-4eef-b70a-f079b75b24bd\nef712c68-9749-413d-b049-d5234e9ae023\nca703a99-7863-486a-b16a-04d5a396ea5d\n4679f16b-3170-401b-bd53-95859b494566\n1c2e0e4f-ecb7-4bfb-9d15-a302420b15ed\na9002fd6-8e08-45a7-b064-80c9094b0719\na06af877-048a-471b-8fc4-4b902487bfc0\n74b3cf16-c84a-4c0b-80e7-aacd4686636b\ne94ca9b1-60db-4586-a2af-2a57ab68c325\ndfb4511a-aeb8-46d6-ae79-41226ca7aca6\n624e764b-034b-44d6-8da2-14e651aa8fcc\n6fa7a18c-ef56-4d67-b190-45241edf315d\n90e10a58-d77a-4a50-8c08-bc9293b2fbe7\n5f6f0fde-24bf-4736-a3cc-6e6713b391e6\nc647b779-619f-4394-8a12-a97c5b0ae969\n71e5ecd4-711c-40bc-9e61-6f529401ced8\n53f6dde5-df0e-497f-b70b-fd3eda7e3fbc\n1d0d0738-0d4b-43bc-b577-1691943b05ab\nb8340f7c-0fff-44a4-9512-d9b97a2033e3\n4ad37e36-14a1-49f1-a30e-013055dbdb64\n1840b4d2-1170-4e9b-840c-8cd1cd5162cf\naa0cba50-a8ed-4516-89ff-54dde6735e50\n1ac0c4ea-d36e-4aa4-907f-cd238cba78de\n259255fc-0129-4b66-81b0-5c9611462644\n7e2c0e4f-7d48-437d-97f4-06fdf8591fc9\n5066674d-643a-4da1-b5fd-dd684c5ed8ee\n819649ac-c8c2-4691-977f-4cd524c74d2b\n65ffb85f-9164-4323-8573-ae5004b91ed3\n951e3d71-8be1-4015-ae95-3c8bd1b95487\n46bd7f7e-7a16-4c5b-841d-294e8b12f149\n6bf31ad4-702e-4883-bbd6-70f7705cdc81\na10c6a0e-275a-4ede-b092-f18b73125076\n30607f05-66a0-4439-a4c1-f10d0d727391\n1d73119a-cdde-4364-a620-fb02dbf05e1c\n7b10fe16-14b3-4086-b1ea-276a84c52026\n6565a914-a32f-44ff-9c35-c0b9430c9103\nb5929a11-abb7-4355-9e08-75af69870c05\n783152e1-15f1-4495-ab9e-19c7305bbef6\n13d3f52a-fae3-4be5-acfc-9efe6bc8c388\n14f2bffa-daed-4519-893d-9c30442eb485\n00e5026e-e0c8-4a6b-b476-47f83604ffe3\nfbec4896-13fd-4da5-9a4f-19133b050e1f\nf731b2b8-6f79-437b-a995-5a1a2ae41832\nd1bae475-9f92-4537-8fca-e1640c2c1537\n54905198-408e-458e-b96c-b8b548a63f3d\n84cfa858-da7a-4a6b-85ac-f9a60877d092\n2506eae5-2527-4b98-9157-d29fe9377c82\nab91c6c5-eb99-4df0-9d07-44b1c7fca6c8\ndf040f81-111e-42ef-bbe6-41a7f96050e9\nd31e4500-7ef6-412f-b835-18a66b061c04\nc9e819e4-7443-49eb-96f3-0644d06167ad\n4e6204be-36cf-4307-b7b5-4de5b8ff6daf\ne5ea87a6-ae47-4f55-90ff-7a3e141c3fa2\n0e73d728-9d82-4832-9201-960c861fbe4c\n22c94f6b-6c74-4350-a82c-0dd2efd325d0\n5fbb4577-4f02-45f8-93f6-d726300bceb4\nfef1fc78-d166-4c6b-b10d-447661c25bd5\nbc5ae712-43fd-436a-9229-4038e781cdab\n7d8afb60-b520-4678-a6c1-a51d1b6041b4\n43121378-9e74-41a8-a7a7-675099b54341\ne0705e34-4dbc-44ad-b17f-5152fc019cb3\n3abc4459-9062-4b43-a0f1-432f949d83d6\n5c4d2fca-5ccd-45d9-831d-b0e1b9a5086c\n0906d704-7aa9-4ed1-a280-2009d4fb053c\nd50d62fb-c12c-488c-ad41-438d2a52a9bb\n205e785b-dfc6-4d69-8f55-80c84c0436d8\n439b4712-09f0-4479-a95e-cbab74095e8d\n3f6440cc-7377-46e4-90c7-4bdbb099e341\n667ea932-161e-48b4-b63a-06c5b67f8b79\n2cebde36-a18b-4c0b-90ae-aac1204b47db\n8cbb56b1-2b90-46d1-b552-00c532e7ceed\n12e899eb-41e3-4057-bbe2-078d2bf85dec\nf03fd39d-1e5e-45a5-9a39-f0638bbdc822\n6c30746d-a247-4312-b440-6e4194618d44\nf85cddcf-9e52-41e5-8a74-c673b620eaf7\n8074e895-1061-4cd4-9102-c75fe3d30f2e\n5a9167a6-374b-4d0b-9f82-6427ee7c3475\n00c23711-1ea6-471d-bee3-89826bea1895\nef9f9f45-fbd1-4ab7-b538-9a9b06b0600c\nfa8afd57-6921-43b7-9276-ee2c6bc4201b\n4bdbad89-ef9c-41e9-abfb-7cfe205e5915\n23924682-a6b3-48f6-94e9-b2f85618096f\n7dc89898-d1a7-4403-887c-642935798e60\n12c6ce39-1443-4417-bcad-f76987df299d\nb2e1b0fa-271f-4560-80f5-f36ae33f1641\n6de4049d-f86a-40a1-985e-74f983f51d03\n2fce3e22-ddeb-4a8f-9a57-5a8606d87d7a\nf0f25f95-56c7-4d9a-838b-b18698da0b05\ne4823c88-989c-405e-a5e6-8de68bf4c174\nf256c2a7-5e9a-4478-9b04-c9f1d52389f3\nb2baeb05-6f43-43e9-97b7-575baf1fb5ac\n0a9b5920-9391-46f6-a37f-f668a2978dbe\n372bd9f1-a8c6-401c-8b85-be169b228fe8\nbdb6fe86-a24e-4fe1-bd8d-6834b333ba93\n923f98bb-dc02-4b28-a4ae-e45e8c6b35b9\n388cc677-f401-4bf6-9fa2-9ffd9b1a06c9\n6c8cb76f-41b2-4d39-9c24-46599e320307\n8cb8e672-344c-456d-b373-76d3c8e29d76\nd5a68ce6-5d16-48cf-93f3-0be194e0813d\n8a7f6023-b8e6-489a-874f-32785a680d99\n9833b1e5-a447-4df0-ba40-497af5b9a228\nd863de51-5711-4ad6-b088-aa555838b785\n5e666970-fa69-4a93-9082-a3071fb56fbd\n7700af18-38a4-40b1-a40a-69e4c04c1b1f\n65c439b4-89c5-4bcb-9535-5d6127235c41\nf2626004-91cb-4694-9cc2-5f76e3570659\nf099e453-d40a-4a8f-b88b-6de6da980017\na8617874-1f21-4000-9b8e-c92571f7d643\ndbfcce2e-783b-4a17-8049-c93fa786bdd5\nb9a02449-8628-4e85-b88f-2fccabf416f1\n0dee2f4d-eafe-4fb5-b774-3038efd68985\nacd09be8-cb35-4460-ab7a-e65dc51897a9\nf3d6b273-3b71-4073-83c5-9be3d814e7b9\n9e9c9744-ba1a-456b-9c3a-0c988767bfcf\n88e0f397-d996-4ed4-befa-fc2cdd0b786a\n2ae3ef3b-f48c-4de6-9799-40c847bf7932\nf7e2ffcf-15c7-4862-b990-d62adc15fac3\n098a527e-773b-4bd7-a146-0955ced47826\n3ed9e530-d895-47ba-8caf-822b8bdab7c5\n41e355e3-0752-4a6f-bfbe-5946b8e93f19\nb8062e1f-1b3e-43ae-a33b-20cb7f821e09\n66ca437f-a847-4b89-8201-5ee3aa043e3a\nfbdaae17-2da0-448c-ad55-5e032f23dff6\n34c8cb7a-4c94-4da4-ba4b-a127d766ee31\n1ca1d4de-8623-411e-ac88-964c1d025309\n12e34b26-98a3-4153-b540-3bff877f90af\nb93d6d09-06ae-4148-8280-5f3f1e5544c1\n243ab4c0-d499-4b54-84d2-13265b54abd9\n434b5af8-e8c2-42ad-8b22-82044dd3b979\ncafa378a-c1c5-4a34-b175-1c3c4a5ed878\ndaf78ec6-ffb4-4271-92ee-024666bca31b\n7ec64489-bdee-4ffe-a01a-0bb76c6a669e\n6ed04e55-2a7e-4556-8b57-c050a5070028\nb615f4b0-5f41-4ded-af55-997d988bbe27\neadeefcb-f5d2-4638-8264-d50d766e9c19\n0cb1faf0-dd36-4ea3-bbda-5ba2a1d4412c\n0b2a8d49-0700-43cf-94a1-7e33026cb955\n4f1b9655-5e1b-442a-88df-3a4f8775291f\nb8b23110-e916-4345-bb7e-9a02f70d0fc0\n9e568a0f-ea9b-42ff-9c83-209c4d46907b\n9860aa60-6102-4faa-801b-eb33ab916ce9\n20085823-245d-4b3b-8ef4-bebd6cc5fdb6\n4df4927f-8407-4bdd-b8c2-62bbc7a6c49e\n0dcfe340-f6e2-4eaa-9d61-fde124e6bd54\n69944b8b-9d3a-482a-8ecb-dad93460df8e\n489b86ad-3a49-40af-9975-f910fe5b51f4\n89faf9b3-4176-44ef-a41c-917ff23989de\nb2bf0f16-6ad0-4f1a-8d6b-3e9b2b7bd4fa\n566a8fd9-2faa-446b-8c6f-858ff02dc996\n2d5d6e76-27d1-4458-9fdf-4fa976242d16\nb4a29a1d-c10e-404e-b272-3be77e508dbd\nbeae3128-5cff-4996-afdf-8932a84783e3\nc18dfeba-b1ee-459f-9b0c-ec010389a54e\n8f286225-f927-4476-81d8-a4ef796306b0\n5c8698f1-62eb-446f-8307-b6aa8c64b475\n79b2b2d2-9293-4262-bd26-e02c5c09c27e\na26951d6-51a2-422d-b6d0-664f70515460\n2c752e06-7343-4d0e-b503-87f4a6fe8ef7\nca806be1-45d8-42ac-9e4b-8a5df9d45003\n8a052d5f-a39b-43be-90ed-ec9f4f82f84b\ne70c3386-87c2-40d1-9d28-2bb8ca780b39\n80a052dd-f9d6-4b82-87b4-d9ef95294101\n21ebc94e-d6b3-4c39-a471-711b49456344\n21b71424-06e6-4be6-b44f-bb9e03ea0892\n374fe855-5f67-4799-ab75-04fce63558ef\na197f496-db43-40f9-b0a0-03e41ffde8cc\n77f917a1-4a57-46e0-8a86-ee98660daa53\na2ca1a60-3ffe-4ef9-b850-c9f98a217035\n3e31ca9a-146c-4c61-a13f-c2b771c9e3fe\neb75e1c4-8936-4572-986b-de513b7b2c2b\n0861e1a1-39a4-44ed-bb97-d940a2d39ba8\ne1cb0235-c64c-40c5-9aa3-07d76380f14f\n7933ac77-31e4-4648-ac49-666aab49c59b\nca494006-2faa-411f-b5bf-91ee6e9fe079\naf311959-4c54-4d8a-81fe-35eaf3d70e5b\n9e666644-a5f4-403b-bd6f-394d2548ecdc\n2d2c1497-a5b1-4a17-9eb8-cadfac21d3ef\n1a3b3cb7-2ab4-4a81-a2c8-63cbafaee3fe\naebacd81-6977-4066-b57a-5badc4108b64\nb6171fa2-eebe-413a-b67f-5b4a6dfa9b63\nfd07e710-cc24-4c1d-9fb6-2ac583741e60\n04a17119-d099-41fb-b420-b9f8c40a92ba\n39d0d512-8824-4393-a446-3ba7d835a580\n88a70dcb-101f-481e-aa9e-b2a5adfe271d\na94d6c4d-471d-4719-8464-c4bc48505910\nd6238597-94d7-4420-86a1-9716ec61a849\nc6aab605-c252-44e1-b60c-e6a4e1ad9bdd\n8a87540f-d59b-4660-9c56-f66f8e427b3e\n3e3f9331-8d10-4564-89bf-f1ef02150f1c\n020752f6-aa07-4415-9334-8581f5acc467\ne143bf98-5e0b-4183-bf62-72bfa88e7e1b\na46d6be2-f4a1-4467-a1a1-711a48c93a51\n2edba0e1-a102-4e21-a191-7c7c729654d0\n5ac35899-2b18-4c74-8e6c-aee86be89c06\n6823167c-d497-4f34-9bac-837a9737a8aa\n30ef2549-ccbe-4bf1-a033-6fdeea600705\neabe87f9-3a3a-4e1e-a919-3820d3d3ecae\n19e81ee6-ac72-4259-8e35-e2dad3dd53c9\n3caa9d4a-33a0-40b7-b167-d34c161558db\n73f4b1e5-b6ea-43d9-be51-de87f359a574\nfd08e82a-3d5d-4025-b6f5-4c02b0c0cb72\n1371e4fd-ccde-400e-b653-5e33cb0ce1ac\nc7d49897-c218-4a24-89f6-dc0be37fbec9\n839ab4cc-b5ec-4f56-8459-a93fbe76ef5b\n52723bd9-c220-4e85-8ffc-ea7ae13d333c\n80a7d0e3-8891-42fe-8901-34efcb815906\nc9a2c352-2b13-4863-a98d-32046130cfcf\n70881892-d2c6-4b3b-917b-c35e18fe7841\n6eb37302-9698-401d-b78e-a6dd47e24eef\na34c0982-ec7b-4765-a32d-b8050dcb6add\ne46ceef3-4384-40b0-bc0c-1e44b7c79439\nd70ebefa-d923-4b6e-8087-95ea375bd94d\n4c8bc33c-8026-4469-9ee9-e59fc3df6834\n6fe96779-b95f-4b76-8c1e-f987b1aefb7d\n5aeb0cd7-9dbf-4504-8bd5-ee3c313fce2b\nd3a85534-7dae-44bc-9597-2ab9768a5880\n8df4ea0b-bf1a-488f-a4c0-26cac1103940\nd380cff4-b436-4893-8053-352c7f04cde5\nfd12097f-5bae-4f0b-a8e0-65bfc843ac6f\n56a88cdb-9aab-49e7-9b6e-6cb3dafe71ec\nb27cc53e-d5b1-4ada-a7a1-21700fb23bd4\n15b54ae0-3e8c-4b76-b73b-d5ecb5147c7f\nd0818fea-9bdf-487c-9a1f-28c153965c93\nfed79801-e2f6-4117-9ea7-4593a956423f\nbc9cc4fc-9224-4868-9968-e826ec35915e\ne7fcb8e2-01eb-44d4-8f5a-c47500a84f79\n7d18ab42-3a43-4b0d-b952-d442126061a7\nac6abb7d-f36f-4995-8d26-8c2b73a307cf\n34ab5e42-e337-4fa7-8148-b9a06dd19363\n8b1f9f65-14cc-4882-a318-c60186526db0\nb97dda6d-3220-40ce-b779-b8067853d98c\n1dad7b86-efa0-4911-90e4-e4ac167f7502\n61cd311b-f02f-4fb1-8635-3ac98198c9f7\nd2840941-a9dd-4409-ae32-39370d40e5a0\ne007454e-dd95-45b3-8093-4c4b90f34345\nc8a50442-95f8-46bb-858c-1c698c73202d\n6a2f75bd-abb9-4251-9f3a-57e94f5fe5fa\n03d529fc-47e0-4af0-a991-7afe52e03167\nc095d2f0-0e16-488b-ad9b-fe6b802f82b9\n94e805f1-bcf0-423c-a2c3-ca163e621583\n0c36d5d6-0dc5-461e-a113-4fd48bb99350\nc23dd834-570d-4bc4-b8e5-012794713d48\n7431aded-caef-44fd-862a-533926b60d32\nda53f9ce-483c-4f29-b087-58fdd6799438\n6898ade1-b541-4962-b0c1-7f003373a5eb\naeb80be8-2d48-4d2d-b362-898ce724a506\nbf0eef6a-7e32-44bc-b688-df320323002a\n9979505d-8d92-4615-8cbd-0ccbaf1cd7dc\n82aa416d-0262-409d-9635-16031ed98d23\n8acddde1-ed47-4615-8149-39c411b83a10\ne181f8ae-67cf-40c4-8d98-b3304a36e909\n8ba504e1-d125-4402-bf60-24672d1b652f\n2e8ce5d1-1856-4d1a-bed5-ebb7c4eb4e33\nd26d8a05-3f25-4e6a-83b4-f7b7059a8bf0\nf0279645-1dc4-4e45-b758-eb156d13a369\n91908c31-bf64-4498-bef9-4276226b10ac\n0429b25d-ed17-4420-bbbc-20fcc9667bd5\nde01666c-c5f3-4662-ba0e-5579ba7dc917\n765b46d0-d6ad-4c11-b34d-54c3689c91e7\nd1d2066a-a88d-4c04-b0a2-2a9010c2309c\n76882016-2a45-4970-8111-740f426fb105\n8eaa913c-e5f1-44c6-bd9c-bb7b5bcf8be5\n26409246-9abb-4574-b40e-2c1e2b6be9ba\nd4666fcf-9677-4a18-bf3e-8e2c67f13a03\n7f0bde03-7807-41bd-83cf-580104f461bf\n73471898-d4a8-4b86-92cc-eebb80de5d8b\neab7f01a-78a8-4e84-827f-356288a4970d\nd642c76f-c846-4555-8ff2-5803a6c08494\ne5ce04ef-6192-4810-b5a9-cc1cf1b61eb2\nc01c106b-a50e-40ab-ac04-02c0e9a25e83\nc945c064-e5b6-4c6f-a13f-7beee13ea781\nb25bdbf9-0b31-48d8-b25d-266322511cee\ncbc35b76-705c-4718-90f2-bd74b1107e5f\nb7156b83-5d84-4cca-8f77-0fd5e62233a7\n84038967-eb0c-434c-a769-fd3de7645d0b\nf357bb38-4b87-4fa6-8ec1-51e3ce7d0dc6\n30bea1e1-df7a-4491-a34c-2188c488dead\n2086fb67-5bb9-4587-aaf0-e1f54115c395\nface003d-3aaf-41d8-a050-d0a563f44900\n290f6cdb-5fdb-4967-8448-bf73c5966c31\n580f9595-e291-440c-993c-b0df938bbc51\n6e3376ed-2ce7-4db5-8f2d-c36eb64ffa72\n2ef835e9-4a1b-4b44-8190-bb62a009e764\n598cfe72-87a2-4a6a-978c-dd442493fb88\ne4acdf1c-d0c3-4738-bb2a-848ca946748a\ncea75f1d-a1b5-46e6-868d-ce4972361a6d\n568334d8-8fe1-4602-9e54-5d543b16cdaf\n2281b5e4-6795-4a76-8637-73bfcb794d4c\nb085ca16-727e-4a8a-a5b9-5271b6b8fae1\n44d81e65-f789-487a-8c9f-bea4c6ba8e3a\n0889fcf6-67e3-44cd-9f77-de384c307db8\n47614b5d-8905-4614-96b4-7c71ea291f97\n14f28674-8746-4cc1-962c-dfb7cd89a61e\n6f65c5de-9920-477c-ae31-c0ac0ef16d18\ndcbb7ebc-7f59-4e3a-b390-762a623ecfa6\nd10db441-05d9-4ea8-be47-8ee46740ddea\n934c1a92-b536-4136-813e-78a2bce07f3b\n05755656-7689-4b71-8b43-3dd6b6a79138\n829f6bfb-21ca-485c-a5a4-74b54f3036d2\n719e6302-3f7b-4c4c-9bbf-ab392a617857\n646c7f63-de8c-4568-80de-0427aa8b5846\ncec7e5b0-4826-4be9-8cb1-d07c06f30642\nfce16118-15ae-4eca-aef0-1d922e611cf7\n091be0e7-6654-4c48-83d5-68d58e986e67\n03dd1fb0-47c0-4cee-b196-fd967536e8f3\n4be91b92-14b5-423b-9f70-02d1faaa3f65\ncf8b73b5-3e5f-401f-954e-f3c81f11c92c\na132a692-1991-4fe7-aae0-ef256c97e4d0\n367b111d-5ceb-4c16-ae17-490540405bae\ned239aa7-919a-40ea-8c9b-73669477464c\n65b291a9-aa02-406b-9f7a-e9e1b134c906\n16877f5b-fa36-460c-ba4b-a45a94ab6e6e\n7457fffa-8322-433f-adce-16157b26f99b\n33970212-cafb-45b2-94b5-15d8d8e6fede\n15cc3147-49b6-4157-b618-504111f39dae\n46de2e36-203b-4e7e-8085-330425cdde47\n572cd436-cc10-492c-9d55-90f05a231063\n40503370-47c8-4dd7-a09a-fc0f64a77919\n007c8958-63a9-40a4-a016-cf1cedb6c202\n335bd324-0ea7-4cc4-9958-9c48df7cfaae\ncd06b26f-1f2c-4688-90cd-962a153a552b\n5882375c-2369-40c8-805b-032285dfd36d\nb8c81fc2-2d11-431f-ace1-5df26ab31f55\n115b351a-8962-4dbd-b659-aac4af19c98c\n35365cc1-6c97-46ba-8b90-000ebf16a8e1\n7f07d4a8-149e-403b-a54e-f9c49a6694a4\n8fb3f095-5199-4f64-9e76-e66d32d80543\n2a57d584-f5d8-41ad-89bf-c33249c5473c\n29367232-094c-4643-8900-5b6403862789\n6f108f14-a2f1-4c8b-9b33-4138f8379607\n6bad8a56-fccc-4f7b-86a3-668f25321663\nd0d08dd7-5f43-44ac-beb5-11b0fa9cbeaa\n682906b1-11d1-40b6-9ef9-7a67ae89f3d5\n8b208ee0-fc64-43ec-a287-08f518840b70\n808f959f-9e5f-4bdd-89d2-e711b3e89bc2\n52054076-6b77-469d-a172-1f814e6128d0\ne53ff376-fa4c-4938-bb84-23fcebb80288\nd835bfa0-8f8a-4471-86b6-5a6f2645a5eb\n2dea1624-d4a2-4276-89cb-e29ac7c64f25\ne16f68b9-2fe6-476c-a677-621119a5df9f\na697e40e-8919-4b65-bd70-8eac0734c616\n2cb7cd4d-6c96-4765-bf3a-99827a122ecd\n33537bed-e962-450f-8208-36841699af4d\nf560647b-412b-4a24-87ea-7e1cc9e5cf30\n3f05a0a4-a2ba-48f5-bb6f-e4a0ed12627d\n5d740893-0629-450f-bb11-e7227ec292b7\n5ec45769-5510-4dc3-a44c-fad5522c28d6\ne702aa56-2c96-4068-a774-270f42bec1b2\na3a75b5c-c3d4-45d9-acf8-2d1302f6b381\n40b45a74-b191-4f57-adc5-5703d59aca66\n7d1f426b-1052-4989-8ea9-9cc316b119e5\naec6e8e9-66fb-48dc-a21c-24d98342830d\n13f389e7-29f4-46c3-a0b4-57b975df9177\n65c4316f-9d3a-4af4-9cbd-6e4f9f261084\ncc0981b2-b5a6-4edd-87cd-4c4ca2fa226f\n0861b7c4-ee57-4c61-86fd-c1e80d31ed8f\n9b568ad6-7e6f-432a-9590-e3d696816224\n13469483-2a0a-4afe-9dc3-918b4081fb32\n51c74a50-63b5-451d-856b-9b86bca38a1c\nbeda86b4-ada4-4e29-8ee5-0a0f125722ec\n895ac89e-d5c2-49f1-82bc-3eebd8fa1a41\ndf04f368-8f83-431a-a4d4-888bfe911022\n32c6347e-b178-475b-ae05-4c039a686c0d\ne2815c2e-58cd-4d07-848c-fd802e18a7a3\n35e5ff3f-3486-43e2-98ee-09f3c5ca7c12\n1eba7d84-74d5-4cbb-bfef-f9a3fc4a0691\ne6a07897-0617-4193-ae8d-92bb0d644935\n13854079-9374-447b-9293-66b5bbd7a4aa\n9db129d2-02e9-4c61-a39d-257990fd6e86\n3ec8a9d4-0cb1-49c4-85be-e5e69d244fdc\n02158d45-2b0e-489a-80eb-406a806fdfa0\n5a0a0f01-2087-4251-bfe6-a13e2b575ca5\nab5af90b-08a4-4253-92e2-8bf508d89aa2\nbc87193a-7aed-47c8-be3e-0dee196a79d7\n2bddb582-dad5-448f-af64-56bbe186f5db\n76920768-068c-4543-8674-258c11328cc7\n0a594d6a-3d26-475f-8c7c-c72eeaba74f7\ne775c365-f8d1-4492-92e5-5acfa3bd77fb\n139d1e8e-cbc8-4dd8-8d25-aefac7953c04\nc69e7165-c700-484c-bc7d-16484a50a2d8\n391f1207-a122-4548-9acd-9ab11900b9ee\n86682edc-2935-4c6b-8b60-8c722a9b4323\n443f5211-0823-42f9-bb3e-a26c0972b68e\ncd30e530-5caf-4aa7-8e5a-b71a9b7ce80a\n2d75a512-d52a-4a83-b69f-2909f8a33120\n5f2eae3d-4f7c-4441-ba09-d83975f175d5\n2d034d63-1efc-4cb9-9b11-c958b829c036\n432c2a1a-f77c-4c1b-b8c1-68b34fdd4ad0\n67b18a1f-40f4-4db1-9179-b42a9956e8d2\nddb5ba94-ccd1-4f6c-98de-43fb8e32f97f\n90e690f8-2f33-49bc-b158-c6f0c77b2e90\n50191f4c-0cce-404a-879d-242a698321b2\n5be7e9bc-1e86-4705-ab21-0bf893f4537c\nad09c5cc-02be-49a2-8bf2-20121d772c96\n82126466-a6cb-49fa-99c0-75e63c546433\n60f71116-610e-40c8-a3e4-7d6204b24a9f\n60c52827-a5ed-432c-9dfc-79516179559a\nc86b0921-8b44-43aa-8778-d15ed4be46f2\n2da91022-44d2-48d6-9636-f8218c46b448\n0508b2ce-239c-424c-ba6b-b5721bcebf38\n3e02664f-f0af-4255-b742-a23612620ac9\nf38ff57c-cbc6-4d27-b38f-7b5d2363a60f\n5372c3cb-4626-4ec8-aea5-9e50ef2eaa64\n1ee76b69-4712-46c0-a98f-7b2e71d103a8\nb78bda26-6d57-4716-bf77-07b703ae882a\n196caef7-5055-4b5d-b8c2-4d8a9847251a\n78fc5476-ea4c-45ef-9a5d-892ef5bd51f7\nce501ef7-cc26-4ab1-b967-14fe997bad62\n14f72937-fde5-46e2-a27b-362b78c0b6e2\n7de686f6-d03f-45e4-bbf4-0a4ec961eb95\n2d4defe3-38dd-43cd-be4b-43a6ae5a3bc9\nf6675097-ed43-4892-947f-74d779dbfaaa\n65ebd695-c1ea-4fab-b634-8afb1ad4e59b\nc687a9cb-7b10-41c3-907f-98a792ebc290\n4f0f6af4-29dc-4a2b-b395-edc931f713c7\n5070561e-ef90-4ddc-9fac-6f7697878664\nb9bdcfd0-fa25-42eb-8d37-fc6b4b40f07f\nb00bfcba-39d0-4e72-9c02-177cd2f3d6f1\n98de09e5-a336-4fb7-a715-1f02da14302c\n2426691e-6975-4873-8df9-b29be7ad992a\ncfee0955-2e3c-4b90-9da4-f044ebc33877\na7a54d1d-e0d4-4995-97ec-686ce966bb1b\nda20734f-8b80-42b6-a606-2857a8b2d573\ndfc834ef-1cfb-4d2a-bcee-efb00c2d6f7e\n8b601975-1f63-4686-9b75-ddd4ba9f1f25\neba575d1-9ae5-4663-98df-9feca151c7c4\nfad4942d-ff55-467f-8199-3703b81fc6ff\n1c8a1862-4a6f-43d9-8a87-c7a9c4b1c2bc\n0e7bffe6-3771-4f3b-9361-2ac4f3412fc6\nbab2262d-afd7-4b4a-b685-0f8b5a759d6a\n26c3764f-6085-4f45-b637-7448129a236e\n7bb3bff3-0648-4f84-9612-941ac0ee0a84\n43c7153b-144e-4bf8-ac54-270cf2b31b84\n887a9c0d-4573-4a5f-af88-92e1b6f8853a\nd37cd100-9aa6-43a4-badd-8a7f153a663c\n7fc544b3-c034-4a91-b759-02099a94253b\n421f4f83-f8ba-43cb-96be-bcb97a71c731\n4b707e37-9499-4fa1-b388-e428612b1fad\necce6810-42c0-4daa-bf69-0d3da47e5706\n7f36fd07-56f8-441e-9d30-a390523c7bdf\n297744e9-d76c-4377-a51c-0c31cee707af\n073afa6d-1bed-474f-b2e9-2c4e01fb1016\nf5ab7aee-ebb8-4c87-9994-0e70732f2677\naba96882-5153-4347-a1a9-07033977cfe1\na3479c08-9d5c-4c14-80e9-24620119af4e\ndee32f1e-c788-49d5-91ab-fec72ca574cc\nf1be147a-4e4c-47a1-a6f3-dd569ae9d037\n41bda23a-5f30-4929-b861-9c6021349ee3\n94abc6f6-10b0-4a2e-9609-dcb4129b88d2\ncb27b653-2dc2-4eca-a230-13295cefe151\nf5f229a1-e7c1-4e62-9d42-10ecd9aa4ac4\n4d39ed69-f04f-481e-b7bc-d0b0c553d03f\nb075e32f-ca0d-49a1-b2c3-a70b5ceb9780\naaf63e39-6838-4e01-9a44-61dce38ad828\n86dcfa05-3cdf-46f1-80b9-d2da3d1fcd5a\n3613e5ee-cf51-4d9f-96c2-45f348319742\n8b096c5d-2af9-47a2-8774-faa3e7322433\n86e538bd-fd25-436d-9122-22799fcbf362\n86fa00bc-c234-49e9-8f20-90daa63a66db\nb8ce41d2-be28-40ca-90a4-34aff0060e3c\n6a2e8918-9bcc-4c8f-af1a-5bdfeb9a6751\n75be0b0a-79bd-4072-9f82-093932d67fdd\n2d8608a2-5b59-4937-a81b-810b43dbaa91\n7236813d-b40b-43ab-ae14-e9c91f1f896d\ncb9f9cb5-f32c-448a-bddd-e082dc12676a\n6105981d-77fc-40b8-be7a-e08ddf8cc8ef\naf1ab9ed-ec0b-46b0-b3eb-2464e157aac9\nda129826-9e5b-4831-8eab-092a14c56712\nbd59c5aa-da65-43ea-8f1a-1b84d771ddc5\nbbbff518-571e-4539-a468-2b5ee67c3919\n1b35e4a6-b797-445a-99cd-856201217b96\nd9678ad5-746d-43f9-925a-ab6d0b0a96a3\n297b9915-db04-461d-bad5-5ba3a7a5cf97\n147dc456-5cbb-4a84-a6e0-789b8a462ee8\nbad986ee-0993-44fe-8954-c386321ea418\nadd57d4f-09ca-449e-85d4-bdd8a24d36b8\n570630b4-0fe6-44bf-9db3-fe1357902657\nca589adc-e59e-482d-b1fa-d61c94777d53\nc83a9819-299c-4067-8026-0320c8b15ec7\na84d04c9-26a1-49b6-8134-b5e034fb0b00\nfc8c989d-011a-4f86-960d-69946d2727ac\ne9803090-9e37-49f9-a126-506c0f2c32fb\n52bb51cb-cc45-4628-b079-aa34bb310f19\n07ede818-b143-4a06-919b-4ddbc2b45ff3\nb3272a44-abdf-4762-9979-bc587f224c4d\n12413aca-8fd6-4de8-9b26-74466de31133\n63fa624b-2d2b-40f5-b326-fbab368fe1d5\nf2029ad2-6474-4e79-91d2-888fcac8dc70\n73de38ee-7d67-4580-8821-1a63e3238196\nf0e0a47f-b431-414f-b1cf-7273c3fa48b2\nce9408a7-6a15-4195-b6d4-ed165f22875a\n086faa2e-a50d-48f8-a093-21e54e015620\n818a78e5-03ce-4c4c-86c3-ff43f3016d3b\n96ba7e1b-928b-48d6-981b-82d609f1b151\n77430523-5ccb-4648-8b75-9d12806934d0\nb37eba32-1a66-48c9-9bb7-5ac0a6ec5955\n0c564804-c641-4a4d-9499-b7859fb7a74a\n5854547c-6ae4-4c06-a6e3-0e922d8d1651\n477dd6fd-6eec-4f98-b37e-7acbaf7c7695\n620063ac-ad14-4be8-b8eb-0eb3f325d68f\n68bb505d-5b8d-4cfc-aa49-e6e254c4ddac\n233ce905-433d-4df9-b758-dcd1dc81846e\n743ecf86-cc6d-46d8-b1a3-c5e87be83330\n75245c0a-c085-483b-9a55-a57539ffd823\n05652cc0-fa6e-48b7-b705-f8386fa5f4ef\n2132462e-0be9-4c47-b539-67eb176b0573\n7317449f-7bc3-46cd-8785-cd03b078791a\n2010671e-f5ed-4d38-9a10-bb2b90f017c5\n84aca191-71ac-4043-b65f-33cec82960bd\n7ac347a1-f999-441b-b538-777c8d433b3b\n10b5ebda-57af-43a5-bca4-e6e90c6d3a7b\nae0c94f6-09f5-4d79-acf4-f8bae8f46210\nf524690b-8a67-479a-9b3d-cf6e94b6e585\n807d5eeb-1dea-4765-969d-ecea15dbb392\nc799654e-acc7-44d9-b46d-7ad3b933bf2f\n1f9c16a2-b2c1-471e-ab6d-a056961e8c79\nd3f3d983-2e9c-436c-92d1-a150865236dd\n6a5ecc2b-22b0-47a8-b7ec-7bc09f1b47fd\nad7e7c36-6e88-411d-bc02-a43b63a6956e\n9fa536af-f051-42ac-81b2-dae1e1826a26\n9f303747-0662-438b-b00f-cec20bc7c5be\n5004ebba-8030-41d2-a4ca-9013ac0c59b7\n08fd48c9-4962-45f1-8a20-e6ff9e34b527\n5afbad8e-1d1e-4fef-83b6-addd2dfc4a63\n9fa9ce95-419d-4e7d-b3ef-fa9b10a3adfe\nf85a360b-b7e8-4085-9c1c-43443e33106c\n7c2b4de9-f84a-4529-bb05-b54f7f1cae43\n22c29814-9d37-4721-8576-8aa0803e84e3\n96abf407-2768-43f6-87e4-27f598f7fa63\n349e3d0d-fff6-4036-a1d3-c853be7611dc\n1ccd32c8-7471-4b16-a642-52100e55333a\n3c3f5375-50c0-48a3-956a-5e0d36b48a28\na4600132-d3c0-4fae-8471-25f9c2938b39\n2537012a-d7b3-41da-935d-99bf50d7fe40\n036e7c4a-6d70-459d-b9e9-64edfc15944c\nd8d0a88f-4d59-4139-851a-2cc705cc8c37\nca8d320c-f515-42ce-ba3c-82325172cf12\ndc44c313-c595-4b65-a31c-1d941afdda8c\n5e26f0f8-0638-4230-97ea-408c411e439f\n6121aab5-be75-49e3-8ac6-ef0411f2071d\n51f50f77-a42c-4aa4-a731-e4cba6de2385\n68315c9f-3917-41e8-a332-d8144e15adee\nbc37d8eb-b9c5-454c-af13-2b47bd1add2e\n1067b5fa-a4d5-4b13-bd7a-4cefcd7030e8\n8a7ca076-88b2-43ca-825a-96026b0f0899\n3779cca2-9fc9-445d-8d1d-1b1c7638c83a\nc9c14044-d1a5-4172-9b9f-cf9f1da8ec1b\na04008ca-8c1f-42fc-99f9-5afdba6740c8\n872bcd57-4648-4224-a2c8-e2380481dd85\n717a443b-a22c-47d5-9ed4-d29b1a59ffe6\ne2cf85c1-c89b-4265-9abf-0620cb180fb5\n62db6f2f-e2ff-4f46-85e0-688cb07b055b\n7ac9e379-0b3c-41b2-8abf-f59b9c89bd5a\n35c6ab66-fe0d-4d32-8676-793198ebfdcb\naf833c69-88b9-4f7d-a5e6-8c984b191277\n85922d0d-9ac1-4549-8c82-866843aea66c\n2c718c8f-7fa3-46fc-a17d-a2cdfab2f6eb\n5cdfbda5-ca50-421f-9030-963cb7339580\n748f543e-dc8d-4334-a84d-77af7b8fbb20\n73f848ea-7d3d-4b37-996a-70da6e324843\ne0637320-1357-478a-9140-4f98825d7401\n8d6e7a70-13db-46c6-adf8-73601f849ab4\na1973b22-0d85-4aca-9064-cb0a201407d6\n4a56cbf5-651c-46c1-8f0a-c9c3329ab042\nc9a02eaa-31f8-47e1-9f5a-9afdee1e984c\n2b550440-2460-4911-bf0f-065fe7c33e1f\n8f21db07-04e1-47af-a276-fa1909a6235f\nf6fba8d6-2210-475c-933e-7cba93a6648d\nca38d44e-d0db-4809-8e12-b22768bc029d\ne4bdf0f5-bc1b-44cb-882c-02582902bdd1\na4f6f5de-f6e6-47f6-8648-f3c5562fa8e3\na9b32fb0-941a-4b6b-8ec5-972750fef8db\n8bd51f97-e882-423f-b300-972a2b6dfa8b\nb1f4b811-b863-43df-a7db-d536df3855a0\n1509d3f6-9b4f-40f0-8f02-422324a1c686\nc5671b09-7dc3-4bd8-82d1-44c888c9da09\n3c31e66d-0dba-458b-9b30-421c14cac06b\n6c648e96-f20d-45a2-9387-04dab7a10dd1\n26ed1309-1628-46a6-8cec-69c975dabb88\nbcff30fc-53f7-488a-aa03-f4f5dd88d185\n5a318624-2f2a-4625-85d3-ce30d4b924bf\n0ad9ab9f-300c-407a-8725-8ad64c481f2e\n2752ebb6-2fb0-4fde-a527-519e42c62cdf\n1dde2304-415d-4979-b045-e074e5239973\ne7c24042-5665-4591-a79b-92f10d7858c6\n74e00939-7ab6-4f01-a7a8-f4605ce14d3a\n60eaa564-6ee5-4515-bbe2-7f9bf6048e15\n66f3109d-ab38-42ac-8a16-fd26008220f8\n36809971-e5ae-4c3a-a8cd-f1629b440885\n68e44d00-32a2-499c-9b75-68e4a3e33e88\n3ef5a668-300c-44b4-9314-84063ba4f956\nc6bdc764-3991-4425-a09b-469cd5760070\nb0125717-f5d9-4bc8-80e0-daa2b29f4d61\n9aea899e-f4f2-4d6e-b240-679334adf660\n2c39d215-5b44-4a71-aac2-db7e59641343\nd791cd81-198b-4fcc-ae5e-76dae281c65d\ne81c586f-497e-4bc8-b755-ec62a8815fa9\nd936d2aa-6d16-4ed7-8178-0bb15473d581\n5cb3f292-4e9b-4ff0-9209-010a32944b2b\n825e56ef-1003-4caf-b88b-7097902ae6dd\na837ae82-21a9-4325-85ce-cc0b24921fcb\nae5e3f26-dc50-4d1a-8b4f-4f1e8586fc56\n91132bdc-9fe2-4489-b4f3-87c0582e8c99\n4ef2d101-bd5e-4593-b7d7-fe29143cfbaf\n0f0e7540-f87a-4fb8-97e0-0a9d87e070d7\nc1145d51-24c1-4fe8-8436-f74f447319fd\n0608b0cb-6575-44f0-947c-e6e5218775d5\n34f88a7e-f7cb-41fd-855f-78cd78b38334\n039427d4-55d1-4789-b3f9-c375367b0666\n7caee842-deb8-416c-bfdf-6942aaaf2f71\nf33e24fb-4282-4d53-89d0-ba0f71647d2f\nf37f59c6-385b-4117-838e-8799798be1b1\nb973d70c-fb16-455d-ab5e-3e6332b3a65e\nadc091d6-c738-49c3-9dcd-b78cc0cd642f\n5bac1faf-fda7-44ad-902b-23b9fd9f274d\n270d3015-e889-4369-ba8d-3b25441b1f92\ndec52807-0598-4662-9323-fac8a37234c3\ncc80b67e-d35b-4c8f-9bec-28ae08750cc6\ncc54d1a1-ef59-453b-9c4e-08c382c38d6a\n91476171-9754-446f-abb6-be31065dd1c0\nd9d45aea-e074-48a4-b56f-01b40d2b6bbd\n8b36fa2f-d594-4012-bd82-736a4dd80238\n631c577b-8100-44b7-ad9e-3ca0dc90cfc3\n9e96e315-a0e0-4de3-a871-415fabd0ca20\nf702ed9a-0a3f-413b-87c6-5454a8381d17\n8fb07e81-927f-4396-b1c9-502551c86a9b\nef26f0aa-7fce-401f-a961-6179addd3902\nae95d7ae-3ec8-44a5-9326-32c0eef1cb3b\nce25a540-c72b-4083-b9c0-7907e1bbe31a\n100eb8e1-5d9a-48c9-95e6-87215f9fafa3\nfd8966f7-708d-4678-982d-1c9835334cec\n3ebca3fb-5b81-48a8-ba29-d6ebed90e763\n5237c0ac-4704-45b5-8f58-872973598a12\n90e975b0-4631-4153-9f12-b90335db90eb\nabe88c86-4f2e-4cb2-ac78-70cb74e71998\n04ef687b-7ae2-4039-8c46-59ae12cd0534\n113ed997-630a-4546-b960-2024d03e9cbd\nd7c6c877-b268-4f1b-b419-2fee567a1b7c\n79cfda38-3073-4f83-a3cd-31b854905575\n3bf24b7e-9e8d-4bd6-b343-dd5a613f63b5\nd000cdad-028d-418b-9119-a0d56e70bd22\n87e1e55d-b106-4c7a-89a8-b90c4bd52ffe\ne9b76662-3970-40b6-b9e7-ca9f9eaa5644\n1e5c4392-3307-4267-811d-17ba3e99d07b\n06f76166-28ca-4d58-b9e3-b6905fdde7dc\nf5463688-ed18-44d2-99ff-412742ba2917\n6aca8724-f53e-46a4-8bc6-2280d1981da1\n10c5b81e-9a51-4ecd-9ff3-e72fb186a30c\n0b7eb364-d978-4943-9877-25eef6f134a8\n37129f4d-bab6-4c33-a0d6-624b79ab3803\ned3b418a-8559-459a-a07e-e19b0577d2ff\n57066f68-0c26-4185-aa00-bbb9acdd4c67\n9c377aa4-1ccb-4c4b-8746-604ae3231b7b\nc0a6a85a-fe7f-45df-b4fd-2bc4dc4429b9\nda29c6e4-feb4-42ee-9932-6e6adffcf88f\n181b6342-d93a-4afc-b749-608b786abd47\na3fa22a7-e44f-46c1-bc5b-f3e543c38430\n3f3b6f9c-5395-4890-9b3d-c45a944e075c\ne5e77b05-4174-40b5-b4f5-dc5969374ed4\n99ca34bd-c399-4e55-b8eb-4f311962b8d0\n9ff763c4-7b64-43f6-8542-2d493efae265\n8e386c8d-3677-4b12-8aa6-c770c66a23f7\nd39a3b99-27af-4926-b005-622d38aaafe8\n3283ad38-cacf-47a1-92f2-b7d93970f909\n25bf037d-a9cd-47d0-8d7e-49965f66c8cc\n1fcbc91b-d8d2-42fc-b4ef-78e7e1d7f1df\nb0c1827c-f6ad-4d7e-ad89-8d71799be437\ne03630c1-502f-4695-9177-fc8a53ab16ed\n2be38b52-9c9a-44f5-bea9-0067298003dc\n7725ee41-b1cf-4e8a-a397-a68a815a57dd\nfdd54592-034c-4cb5-959e-b1c66717a337\n110c0133-c806-4586-a217-8f41e4142f2e\na63ea11e-6e4d-45e7-8881-3bd3bba2fe0a\n2cc66e05-0c07-4cfd-a90d-ed5e4a0ea776\n5de3ab7c-53ee-4b09-b6c5-f8c708f3729e\naa172ebc-2487-41d7-ac32-8c98e7134e6a\nfed18676-5ab2-4558-bbd5-8f6c9a3281b3\n9447d704-83e2-4e78-aebd-c004ee490dbe\nb3c9a5d7-d3de-43b3-a56a-2d7125505c13\n619f4bc5-87ef-445c-9702-46618b3c97b8\n4b85219c-c5cf-4d7b-81b6-02efe6740c40\n76724835-dbc2-4083-ad3e-156fc6accda4\n15dada8b-ea35-4504-8f55-4f13922dba87\n84c3e800-a1e0-442e-894a-ec0ce8c4052d\n5f1db6dc-61b0-4236-ace4-f889133dffca\nbf66fb15-bb62-4038-a756-529468db372e\n4d10328d-da3e-46f8-ae07-7417fef4afc4\n54e45d33-cffa-464f-a227-6de2dd051f02\n7d210e70-32d9-431c-9987-67c418727132\nfc08812f-263c-4f3a-929a-cca62654e531\nf50d6625-3a72-400e-afa4-82aa690a4c93\n35e2084d-6dec-4bb1-8408-2c3545db7156\nab9c9a8d-a314-4fd6-9dc9-45e41ea42e16\n8ef9af24-e104-48f9-ae56-e96d55853481\ne11c5110-5c53-4437-85f2-bec846c3befc\n937acc68-5e79-463c-970c-4c45e769256b\ned152c29-188d-4749-ae36-6e096dc13970\nd1f3a4c0-9c33-47ec-8728-2b0539d75ce0\n92598744-874d-44c0-977d-f5a42ca91698\ne54fc951-3b66-4c08-bcd0-1e9a735ebe60\n29ccd775-02b7-4fbc-aaca-3da4ebf84c20\nfa5c2ac1-329f-46c8-875e-af6038e735e6\n64c8603b-fb29-4ad4-b5b5-2e593a0951f4\n20192f01-9ad3-452b-ab8d-48fd1c4886b1\n4c24087b-e46c-4820-9af5-3f4a7ab172b5\nd507bf45-33db-43fc-8045-f23bf9c1786a\n6130d2cd-b365-48b0-ae19-830c25897203\n0d7e7d04-63a5-4a9f-b6bf-d8a2909289ab\nf2d31f26-5f67-43fa-8a3a-637d4e2dedaf\nd5a00031-4d56-4c7c-8cb7-21bece76830a\n85e713bb-c78d-48c5-9dca-3fa143f7a0c8\nc4b9e797-8893-4130-b1d5-03bac4c394c9\nfd7de753-e23d-46ec-b8d4-d366a8189c80\n5e36d031-4c79-40ee-9701-b593fdaa24fe\n2d152d82-42bf-4e94-94d4-35c0ba65f023\n7c8f4be8-dd36-4d4c-9324-91e87121c0e2\ncd497ad2-9815-4be0-b8d2-0c8abe36503d\n1b41ace9-76c3-4e2d-9c4c-1f3330cacbf6\n289cee98-24d8-4907-93da-e954d912b607\n81ef3653-3e9f-4289-8ee0-e8b6068741c9\ncd9bead1-ed08-4ed1-8cc5-3cd4416f6e0a\n0fd11aca-6b55-4ef8-9429-e7d7e5e387eb\n6c357425-300e-4fd0-a164-2deafe20c004\n916cd932-0de3-463f-ba23-d2c9abb9e818\n7f53451f-e802-419c-b2d6-d29d4ac69daa\n16d2bbcd-bb45-4816-9db9-bc0048515b6a\n9e9bdcf0-52c4-4d28-84b0-07fa8f95f361\n49a11990-bfe3-44d5-a29b-9851ec4d0ecb\n8fa6d7b9-0d10-4f81-b323-5da432c70b1a\n9cc96eba-7573-4f88-b57e-88d093a8a7b8\n35d3b0b1-84a9-42f1-9454-e68339c9b302\n4a18a83c-8df6-437a-b3ed-2aad170c5bca\n857e5b09-d8c3-4524-8e5f-183e3d1ef57e\ncd8cc779-3af0-4af3-8bee-db9a0dce8eea\nd52744ef-99bc-408a-9246-92d4f7e5747f\nc211369f-f378-48e5-8d12-fabcad5c0df4\nde8595ae-7735-4172-a0e5-b820527089fe\n27ea8a04-7c90-43d9-86d3-00ea435f8fee\n4e6cb9b6-f094-40a0-955f-c063f65a58e1\n49f6be97-976e-4956-97c3-dd98d458124d\n710837f8-c80b-443c-8a45-6751ab6a38d5\nd0a99189-cfbf-4a67-b9dc-91e3c207a347\ndffa8772-5e5e-4542-bbab-4191fb377582\nb2df25ac-e18d-4fb2-abc4-1c8e0bc0bfa6\nb6a4680e-4e7e-4127-906a-00ae93ede9d4\n720a4b1d-731f-4812-9e5f-3baaa03577e9\ne0e1d2c4-53b6-46dd-a30e-08dfc112f3b5\n7fe0c4d5-c6ab-41ac-87e4-b9401ee972dd\nfe749286-c23a-4c36-8f8b-3c8447416cac\n63461386-6a5a-413a-ac02-0a0621e0c431\n0be81cbd-5757-4107-b1de-e8b0d406c521\n6d1ae2ce-14da-4814-86f6-ba608b944146\n2b934d3b-50e4-4a96-a6d8-a69cee63d00e\na5629acb-23ad-4caf-adb6-0433eb5d654d\nb4b3920f-b356-47db-8819-11e66b25feba\n01a6f506-3052-4a3b-a28d-3155cfc21309\ne7c9fbe0-b33f-4e12-bd5f-a7debef20b02\n32785133-1831-4054-a1ad-e0444ef5b7f5\n3b83a2b3-3261-4d00-ae5a-0bdd82db4b76\n8d54e7d2-9731-454e-bfe0-32b82c6bfbd2\nb04cea9a-2dc3-4f9e-8893-7b205107e8b3\nbe45ced2-eea1-44bb-bc71-09e3f7938f09\n076701c0-5cad-4e57-998c-18f5a61f2ca6\nfd8f4324-c2d3-4a25-b52c-9bc851209111\n36bdae40-9b0a-4488-b7ae-05b187fad65c\n8040d121-d04e-4ca9-be38-446a684887a9\n2d4b3393-e39e-4c8d-a24a-a5fc0ddfb478\ncc44f6f2-826a-4d20-bd03-166db26ae1b6\n39767595-2ff0-40cd-b71d-5b7f75f17629\nf4a38562-e7ec-4446-9a7d-02e32eab5f7b\ne88ea527-4ae0-4f51-a10c-e1af7766764f\nb26d8d9b-e69b-4d47-926d-5d3b25ca8421\n00f9cde6-a0f3-422a-885a-f5466615c8af\n9682c5bb-d02b-403e-af89-c28009c4caca\na869cedc-bbf0-4713-804d-c3c410ea3f0b\n0f87cfa7-f83b-437a-9465-7ea10628a595\ndf370248-255d-417e-bb08-bd3c6032f377\n6dfc6e62-a16e-4601-a823-d5ec67ab270e\naf14402d-ca6c-4499-b59b-06b84d245f0b\nc3389a11-c08c-41f5-bb0c-83d3fe2c4128\n8939a8b4-3f10-48e5-9e83-c96d1f804d9d\n8ee9c4cc-361b-45ca-ad8f-ea687fb2eb72\ne8e43a40-baa7-42ef-8039-a08c9d8bc456\n903bfa32-c945-43f4-990e-f5c81c736e40\n655f0d0c-8825-4950-813c-d93e6ff032db\n5f575820-cca5-4d8e-a77a-c3c545703d8e\ndc599a1d-47aa-4cf8-9c0c-d39e52e44c84\n144febd8-eaff-4f25-8bc8-9a32d9265d3f\nc8948647-1a32-40e8-8763-a4251c8812fe\n68b48ff3-329f-4ef9-ae56-4f251bea0858\n7b5db670-060d-4f4c-964d-0ad3be2bebc7\naaef7e9e-86a2-4d1f-9333-ee7bebc37b85\n16685a6d-123f-4a2e-8102-12c61d1f501d\n58edac54-4351-4e62-afb6-35805c238279\n9169b18f-5932-424b-b723-2a10a18dafa9\nbccdca9a-c07f-45c5-8c7c-b55ea7b8202f\n008f554b-2bd4-4bab-982d-5f43623078b3\n37f07c85-54da-4994-8512-2617b1ec00f0\n860e6710-7c97-474f-b3b6-2ce420f2f125\nd40b0d74-82f0-429b-94ef-285e0eaa3e8b\n1c604040-c350-423f-9dee-4e86831d1818\n9fbf1c3b-7887-46cc-a78d-d0c7d2284c4e\n80591c15-da6b-4525-90ed-cdd3e4dbcf8f\ne739d18d-b192-4782-af66-b1d3d8f08bc1\n28ef239c-9abf-425e-9073-261c05a0513b\nc1325a21-b4b9-4db1-9c75-cd773dfa0974\n74ecc25b-7e81-4c36-9deb-f0e058a154d6\nb190ea1e-2ce1-478b-8dc9-e6efaa7a84f4\nbe8425a4-5cb0-449c-bc4a-6dbf8ac8c9cd\n37bf2f6b-97e1-4cc4-a659-5660045362bf\n0f87558c-373b-4745-b504-710ec2d5a2c8\nf1ad11d4-bd87-4690-b7a0-4c6603e25f58\n6b8e3d2e-decc-43d1-b60a-6b47d101669c\n2ec43967-323a-427e-9de0-8e4035e1e3cc\n6c0b6037-1603-48dc-bb35-00885a1b300c\n3e5fe847-c816-4143-92c1-75689fad55d5\na8811a0b-663f-460a-9d1a-80b3242ba48f\nf0143fa0-8a99-45b8-bc88-9a901add2f2d\nad962a4d-0b79-4ce7-a7ba-247425b32933\nb6231bc9-5b34-4aa2-b6df-4b5027933c58\n8e035ded-9a10-438c-ab14-ba653ce89091\n916f6709-7422-4cfd-a60e-2476492e4b5b\n489fe964-e6b0-4194-84b2-a15f8a0bd28d\n96e68e98-d433-44a2-ab66-58e5d776debd\n27646a01-d4fa-4192-95fc-910e58f1ff08\ne2b0447f-d24b-4816-8906-c55d8c765535\n044a097f-393a-44cd-a909-d19388af6ef2\n596f1ef1-f798-4e82-b3f9-24d7306c0a62\ne27466d0-fd60-4d4e-9abe-5603cfef3966\nfe6dc5b2-54a5-4bd2-a358-44a8a241fd05\ne2283291-a1da-4fbf-ab66-650b1af9e892\ncf3db91d-d600-4708-a146-729382f0e80a\ne595f2b6-e426-471a-af91-9cd43a18587f\nc43b88a5-0c3e-477f-95ce-664cd2e701e0\ndc35ed91-9bab-4b81-8155-2eff216b2819\n4b80db2b-bb71-4832-b78e-86018a2ce53c\ne281f04f-51b3-4157-b9d6-078b624cecb0\n0da5437b-44d2-4e5c-814d-6cd32b1a3af8\n1b850033-5239-4611-8518-20bdcb0e5cc9\n89388c8c-1b99-4dfb-be1f-a33a63264582\nd0c716e7-dc3f-4fde-8315-f339aaffe0eb\n693ab5fa-24e1-4ef2-80ba-3aa5feb787b2\n1dac7847-7dfe-4378-b37d-e2a980c966ea\nae6ad232-2fa0-4935-936e-89775789bf60\n7c37d1af-c8bd-4985-a8e3-f44dca10e5cf\ndd42645f-ea35-4049-a3d4-aaf8144e0147\n286a197a-32aa-4aa2-bbc8-95ee4f8d7215\n31e9ee08-e64a-4b15-a50d-4e98a17ebccd\n3fc3eb40-9d56-4655-92b2-bc1410c1a9a6\n299aa76e-0738-4d71-b844-628efe63dba3\nafa1bc60-2aa4-466a-9c0d-f661cd8342ff\n2ded7858-1c89-46d8-9464-095c0bb28f84\n1ccd2dc4-6462-43cb-982c-e4138d54ec1c\ne4e39ef6-cac8-48f0-8124-466258b2ee4b\n540e7dad-94dc-4e7d-a2de-cdd56b8f5b35\n4c3fa3b6-0fbb-49db-96cb-827b92cf7b1f\nf1d29a80-09f8-4996-8df1-2d41dd4dc9ec\n45ee7bcd-323b-4335-a2e7-0bdefa24ce8b\nefe97cc2-df34-44c3-9163-3f2c13658cc9\n41574b15-0a07-47e6-b620-b82695d95562\nebe26852-e652-4b8e-8f56-ae4a0b619356\nb2c31f88-ddc0-4187-adbb-3a7212516680\n480e6fca-8735-4203-a3b9-51d6fda26a82\n4f174db8-b7a0-472f-bb5e-d68c2360cade\na9ef6be2-3644-4396-8888-a23c5bdfb51c\n227560c1-4922-442e-a990-a396a7d2a842\n4806af13-1c9e-4fe6-8322-6810aa936427\nfe8866bc-1e08-408a-bc9b-1854b08e2b18\ncf9b3189-0f14-4fd4-b2d1-7b1a86a4a7f8\n06d323b9-0de6-4af8-b510-b87f954f67c6\nc98f47f7-37db-4520-a3de-714386e3084b\nddda9724-6294-4c0c-97a7-4a7d400f628f\n9965661a-e8e7-4b0f-a739-5f354c084962\n00f4f1b9-2b11-4659-8648-4e1d5d463f0e\nc827bc3b-4a05-4929-b102-fd95c411726c\ncb253242-595c-463d-b5cd-6934b3c339bb\nac368fec-fb38-4159-b86a-c55a5971bd4d\nc16633eb-c9db-4458-8f6f-23343949b7e0\nfab1607e-d08f-498f-b9ca-f6f5a62359ff\nc80d1f44-0d07-4c66-8333-df5c5a3400bf\ne1ebb0d0-030c-4f8d-acfa-dab845770b02\nf5ce7159-8929-4e21-9af6-c28cc44b4d05\n8aa0487f-1f29-4604-ad9d-42b1d161c30d\ncd451f23-4fe5-4955-be13-81dab830fe75\na700d9b1-12f4-4edf-8a5f-d174c2b025de\n78e646b0-76e6-432e-9f7e-ff959ce34cbb\n8c192200-c736-4d92-973f-a7cc5d037aee\n54013d6a-936c-40ce-a9da-2813a615d403\n65903b7f-d958-4b90-8f31-aea7087ebfbb\nac6f1e33-d70b-46a0-8f7a-8572413c5316\n6132304a-6083-45cf-938e-cb133348d3bf\nc6d1134a-f12f-4a3d-ba3a-4e25f4d340e2\n2772b49b-8a56-4948-90b8-5f71cdcf7953\n5a7c38d8-7ab2-46d9-b2cd-61a1cdd20d9d\n175b3a24-d070-4cfb-935a-a824c541e84f\na1b808d3-d1ec-4c1a-953f-05c9d4111496\ncb80857f-b538-4cf9-9b4b-ed3cadde5c41\nd9faf36a-10e0-412d-999b-ec79369c1989\n4bd071c3-9eb7-4caf-8517-7c114b92c979\nf97a8ad0-839e-4343-a5b8-bd8e14623a6a\n7aa01620-cda3-4880-8007-bd0e3335f197\n1179e055-4427-4342-b7a1-a78ee87a47d2\n08408f93-1633-4fc5-9b02-60cc6a460061\n3ceb3924-48c1-425d-b268-9e67ae2469ee\n3f2e6a94-7b9f-4faf-89e2-5385b6ae4780\n0a62d0b1-0f55-4000-8499-5e955bbf558f\nef3390b7-8096-4c6a-8808-ec390f3e4806\nc3e0b55d-4769-44a2-8f65-21f1702a11da\nc18bedc1-3ee4-4285-aead-519364021b1e\n6785ed45-6469-471d-b0fd-748abafa01bb\necd5ffe7-5386-450a-8a58-c185ffc8b4ec\n176f17a6-a16b-4df8-9a85-f48a79a9db63\nd819ee68-5de3-4f92-b7d3-7e4370389dbd\n58430fc6-6135-41ed-8aaa-dfedde37cc9f\n05dace4e-4142-4a3d-b55b-27c024ef3260\n2c18ae77-a14f-49e6-9059-f148a01b9cc3\nfdb82b86-cee2-4001-bc02-1071889d2029\n4a370e3f-1eed-444e-a8e1-db5164c596fc\n996aba68-7ae9-4a40-b5a2-d747ae1186e0\n8a22aed8-ef33-42a7-9392-59fd1d0a196d\n76f6179d-c122-4304-8825-a9a47bb8790f\n8b8aaf4f-c57d-4908-bda9-e58e2077b633\nc3907183-2259-433c-bfdb-4a200d5b5ba0\na66c672f-b385-4cf0-b237-367f66ec5838\nba38583f-3322-4b23-b255-d77cf430dd2b\n3e0df753-b159-4d9f-adf7-b53a551516ee\nc3f39d93-b0cf-4b63-9c4e-23f0fbad98da\neec42941-27dd-4dcd-8cc7-b8e02fc5fd74\n4c00e70d-4d9d-4700-903c-49b290995abd\n5dc845e1-714d-45d8-b543-1798a1ad58a1\n20782762-9ebc-4b98-b308-8c3d41676980\n93dd8fb0-6e24-4166-878a-5e4b2acd1244\nb7b46023-958e-4744-8006-6dbfd3954aa9\n3da5869f-a424-4b73-8bdd-3884f699f41c\n82792cdb-86c8-43f3-bac1-a80dfe43aa8e\nb84af53e-2d32-4ce1-88c0-596a0c1967fe\nf1c517f3-5512-4c8d-8925-7608885b62b8\nb0ada44e-3fa1-46a7-8d04-7725cbd5728f\n375417dd-3cad-4e8f-908e-64ee463965e5\nf627b054-013e-4c69-b2e1-3b1c6a84e93d\n2233c0cc-f271-4324-a5c2-4560f90ea930\n4c7e442c-3a03-499c-82ab-2d7421996f58\n63c88500-30ae-4a2d-86a7-f1e6a7ca8ae0\neadd01c5-e3ed-41aa-bca4-03abda3b81bf\n4c5b529c-70e3-47de-8697-953a95610419\n5a46ce61-2371-447f-a967-0f4398453d1b\n7f6ab148-07b3-4970-8ad6-9d405c0ef5f1\nfed96a4d-2d9a-4b00-8a17-e43d42c0e80c\nfee31185-faef-4998-8523-136d149c1bda\ncec5d874-3a79-401a-b31c-b4d22719532c\n64844f38-5c14-4b16-b5fa-db4594c19638\nd8aeb949-de29-46a4-ae7e-9198c1870569\n0a688320-be5d-476a-a63e-d0e5cce4e448\n627532d7-b3f3-4359-adec-eb286b2e11b2\nb2f9d546-7dd9-4536-94a3-f01697f7423f\n5e4f3594-e6b7-4907-bfba-a9d3e876e6b2\nf257a4be-0469-4802-9a4c-a60082ecdeb9\n727952d4-07a0-4861-b84a-13897901f07e\n8568e29e-a03f-4329-b481-03c7064b745e\nc7294e02-fa19-47b0-b8b2-dc60f44f14e8\n05d16e2d-f665-48e3-a559-2f635fb4be7f\n3e2c1d52-3e36-4949-848e-3188e8007d3b\nd9ceff0c-db4f-45a2-ab5e-b3fdceda763f\n406477ef-d675-419a-a543-d3dd8c2e3c8e\n54f6a414-4d4a-48d1-91cc-1d6f90af40b0\nb06d6e66-2680-428a-8ca5-b1e3d31c7507\n16cc13a8-d3b6-4a40-b7f4-fe88349e8e0d\nb8437a71-2439-4f31-b92a-f265304efb13\nc838e5a8-1b5f-4e59-ae4a-bd7243fb816f\na673d254-dd05-46cf-8c15-4f73d3f76f17\n861f4894-66aa-4086-9158-77d1acd75d3f\nb2a08d48-219f-4a38-9f53-097d721511c0\n9f1d6f65-66e6-49ee-b570-644e6c5f5851\n9834d144-92e0-40d3-a002-4b969622a4d2\n7ae95eb8-f6e7-4621-b07a-6bcc1eff07cd\n49c8129e-fea3-4614-9dba-dbc77aa5ce6e\n7a30ce8c-61ca-471b-ab2d-29800c57188d\n24c6a8ad-030a-4742-ae54-f27b30713a98\nfdec27dd-c481-46f4-ad32-ae4a0c4d5244\n5cabb38e-9ff6-4d49-ab9c-87a1951fa598\nb2c71754-39da-45c0-ac1c-6ea1c6399316\n1d8a0296-2958-425e-97b1-e28ff1db34b6\n547f3fe9-3958-4b3f-ba6c-d583e3f5c64c\n9b068eab-5046-4b5f-be8d-cb07ff380296\n751ea082-aba8-4d26-80f1-6ab06dafe573\n76eb7d0a-8ed4-457b-a8dc-4d09eb742afa\n85051f6d-bde8-4c25-9287-75e45f621c7a\n9543be1c-2280-4b3a-8f40-3eef87182429\nf2b07beb-878b-4f9f-802c-37ee558349db\n85aba36e-e31f-4750-97a4-e29c631ea8b9\n31ac5019-2a35-4873-a082-f409a4e17fea\n8a6cdfe6-1ca0-437c-ab93-14fcbadbf75f\nec118646-6a67-4be8-8716-deb57eb38006\n46166a99-8364-42fd-8b1a-0dd4f520ed7f\n871ae73d-9d55-4076-ae41-bca6f51564f1\nbd4ad24c-63b3-4101-8d26-eca82bad85e4\n17cab6c9-a13a-4a5f-be18-bbc87d1314c9\n343b5fdd-d837-4b9c-bb18-5179aac11a78\ncf572527-1398-4f3d-bd26-36c728a8d152\n70878a36-e9c8-4f1f-9e3a-268930421ade\n4ba6e356-bbbf-463d-a5f2-4278f53742bd\n1fedc7a7-3604-4722-a7fc-3a5bef49119b\n172e8458-3c22-49eb-9b86-c13df5b08aa9\n70455709-790f-4f7a-b1ff-ef9b5ec93cce\n484b1a2e-af51-4123-a69e-c21816a83455\n1831a86a-b7b9-4696-b872-641653cb532c\n7874e06d-9067-43b7-90bb-4bebd8cb47ae\n4b8147c9-9789-4faa-be81-5f7cfd92393b\n32f937db-da8b-494f-8f05-818981e1fb55\nfe2e1a72-4239-4d64-aaa6-40d6d678eb18\n221ab7f7-53e1-4cfe-a0f9-13d12e545955\n20267065-31d6-4a49-ac9c-4ce6d583f168\n7ad51aac-9061-41bf-8610-2d2f8cbf45e4\ndd18a8db-b81b-44d2-aa41-f45a86e5a58a\n11a77368-2804-4b6c-810c-97e5859e2be7\n2f13a052-d38f-4fe5-9414-69114ae2a2b5\nc97bffc0-cd9b-4e17-82bf-6c196392597a\n42916274-4311-4a4c-9436-650e3861b743\nd2a44046-2dd4-4a0a-8548-942b0301b36a\n80a04f48-9d26-4cbc-83a2-10115bf6d4c2\nad91df27-925d-4835-bb51-bb4b974f421d\ne078a7dd-0149-433f-93b5-c3392698f390\n37f107f0-4519-4daf-8670-85dea88792c4\n78ef8d49-0da2-4881-81e7-3eadb56734d1\n3cf19998-25b3-4d0a-a992-943b338fb930\n0d50cb16-39f6-4129-bab4-905518fbc880\nc7334c3f-8ca2-4134-b3bb-952c7767b8a1\n89b264ff-43ea-44e5-a055-05d9c8315803\nfd458490-efed-4b79-bc88-5e8b66fd4df9\n28067d29-42fc-4598-8b7c-92ac86dd9324\nce91a744-4178-4a90-bbe0-3cd53908f9c6\nd35f8442-f052-467b-9f7d-7d4449d671c7\n683c01ef-0bcc-488d-a236-df7c332e3da7\n69979c1e-e3c7-461a-b6a5-a520f9a0441e\n7eb4aa63-a92a-4aba-8875-2d5d80859f5d\nda285545-8fed-4f5b-93d6-8a98891e1390\n34ee31f9-29a9-4897-a435-00ee9dfadab3\n665823ef-2040-458e-a748-9bbcd093f8b9\n4ba5fd91-3563-4cdd-a1bf-dc8f21539881\n8e2188c7-14c4-4a63-b549-a08a8628dad6\nb6e14fdb-3ad5-4d6d-820c-59c3dac38d59\ncc69c08b-11d3-46d8-a225-f5426f4a2c1e\na036fa03-36b3-4895-a7fe-75b683376770\n446018f3-5480-4c94-8d84-2f2d253ca517\n8747d8e3-1f36-4a49-87bc-af7aeec2e0fe\ndd963a52-deb6-4bf5-823e-f3f1cd8a00ec\n94cffcb3-b788-429d-b2bf-1743712373b5\n7756e75b-7db5-4f11-9482-b66a47ad4a25\n58dfd9ef-61bc-4cd5-81e8-cabca6bc1e6a\n6394f02b-4335-464d-a6fa-2faaaeb81b87\nff75f89a-0cec-45b5-8e21-a67a8ea3e0c8\n741094ad-2d32-4504-bd3a-475b024b140c\nfe71c753-fc7c-44a5-913e-abbb7b8d1c2c\n5125cf5a-60c0-4827-a587-7066f026eeaa\nf9f07e48-406a-46c2-95f3-1a796d05fb32\nc5659acf-be56-40b8-883a-3c82e455eb07\nfdb2cab9-14f0-4dfc-a8e6-774b1e181efc\n0738c9e8-a86e-4b45-875e-92157a199abd\n8f774166-e263-4cbc-89ba-f5681272364b\ndbc5fed8-2fbb-4222-9b53-02a9be64bb70\nb299527c-e4c4-497b-8c07-0c1585140e31\ncb16e436-837a-461a-afa5-278655c257e7\n212a7725-5635-4b7a-b4e9-2ae8c6acee21\n32ba35ae-5495-4e87-b863-95eee4bd3a73\n0e0f838b-94e8-4d15-850d-27164517cddd\n1c769282-c658-44d1-b2a2-01bfd9567f00\n0d143049-565c-450e-933d-19e60ed53efb\nffc73895-7d91-4e78-8b6d-4bea5999c392\n5ec12d4a-b515-41f5-b0e7-d9cc328f15f2\n02d37959-b690-4fce-946a-ef42e836bc36\nb25a9d3a-4050-4541-8947-c25252303f74\na2c83c65-79ea-4ec9-9432-3811a84c3acb\n23026513-f770-4ec4-bdba-5925f0cb0424\n93b10068-6be3-4373-a297-8cda0b737ce9\n92c27cc5-922b-4cd4-8fe3-347eb8d7622c\ndd143719-4a65-4019-b465-a11c3e3534fd\ndcd39c43-85ca-4cff-a5af-8f0cab9dc8f9\nca02088d-1c66-47bc-9564-2d3b41e54ce1\n731f39c2-dffd-45b6-93fb-fe51047e8ae7\nd4223784-8925-4d72-9699-cc91af4a7ebd\n8f915f1c-0e96-4bc5-9d40-8f80498f51c7\n113f17e2-d6aa-4c7e-ba85-3690e276e7e9\n40e41d10-efe7-464d-ac95-70fec26b2aca\n98cdee6f-b441-429f-a9d2-de16b63d6b51\n7abd8a8e-e5cc-4853-b689-0b6cbd40fcd4\n9f26e8d1-d4a3-4eb6-b909-a4c1ad8dd022\n064301aa-760f-44e8-b660-059c3b2f3674\nb4c68a47-5af9-4422-88e9-df54fc15ab28\naf562730-1e9e-475d-a3ee-8ef921732671\nc5e07087-a260-43ae-8cdf-bcdc5871d86b\n0f1e13e0-1b8d-4f03-9bab-06ae35a659b4\n2d5c7eff-2adf-4895-ab87-55ef2df952d9\n798a3ff7-1324-44e0-a712-7cce5c0ee5ea\nb675aef0-aa14-4f35-b363-6042399b1d68\n0307f467-6c1d-4339-ba84-7ff72b205d82\n343c9f5f-69f7-4b81-bf84-22b9489d6ea1\n729275bb-f41e-46af-bad1-e0267bb31177\nb9ca26da-91ec-41ab-ade4-118abed1c085\n176f420c-8d91-4c53-ae1f-948848f0f170\naa19aae1-bfdc-42bf-8332-c1f0e0f72921\n567c9345-33b5-49ef-af04-2a76038e96f8\n713aee58-baa0-4729-9a07-a19b910158c7\n47a19515-9a95-401e-b02c-e925dce42739\nd9d8f316-a8b3-4b0b-a67f-a565615c6f31\nffb8a9a2-cf60-4d84-9027-9a1e303d93c7\n02e1a215-39f8-41d7-b1f2-721d1b78fd6d\n4dc0e48f-9133-4fd7-93ff-3bf17ab56b8f\n7e551e50-5083-4849-a2c5-e4d7098d59f6\n59ab1a33-c386-49a0-ab44-3f3c57e024c9\n801ea1b8-24e9-4aff-83c9-6574fdf4a4ba\na84ee974-5e2d-4739-9830-9df66d5eb4d6\n4ba7d431-321d-4dae-b793-5400d25de7c8\n5121d3d7-d6a6-4eb0-bbb6-541c3b575db2\n51173f2c-ec3f-4800-80ae-b3b84be057f2\nc9c0da05-0212-4860-98a8-dfdfb66008e4\n6d2bb5bb-c03b-4564-8202-af9142bcfb05\n1af5f589-ef54-4921-8b87-4368abc6b885\n26f2e20c-20d8-4b05-9635-88bd8ad5c4f7\n115a34dd-2081-4fda-a0b4-038082b9af3b\n03a90939-6080-448f-9567-41614682ae59\n4f033986-afb3-449c-b55f-41dcd5283328\n21ffda85-671f-45d5-a565-7f550775583a\n1593000f-6852-4a7d-bc93-2b7105f2846f\n80d6f49a-c6e1-427d-8f7a-71c5f70e4013\n6dd6f9f2-9dd2-48f1-b331-1e37ab808065\n29d44e6b-7f13-436d-a64b-15cec3f56523\nd5a2aeab-de61-44e3-8082-7e773152683b\n8f2b85db-af6e-4a3a-b890-28bbe469e7e4\nc2f860d4-db72-4cb4-a96b-2a64a41e2ec6\na925a032-a814-4e95-a8b0-2bad3eb9577f\nec2b276d-24bc-4c28-aa60-47d973ce134e\nf871119f-7eae-4af4-9cfe-1a873f1925ba\n8702436b-0961-4d2b-8082-8f2bcb71b9c7\n91d1f2d8-2c17-44d1-bb1a-07d4a7ad9b75\nda7f34b2-489d-4bce-a042-5e7287796bc8\n5de79a55-2a8a-48a0-80ba-00403963dfe8\n74afcdb4-3972-4450-836d-d50572ba9d8b\ne1cf9d59-4851-4d4d-9f4e-31babe87e6e9\n41f7abfb-aec5-4e52-b5b8-e5aba3ac0c7e\nd3b2393c-c8a1-4858-a5d1-443ad199017e\nb8c904b3-547c-4f51-8968-cd7272e3a152\n13bfe4dc-1616-4cca-b1cb-24c5bc7454e5\nbe20e84c-9132-43c2-879c-8482d12b31f0\n5fecd853-4ff3-4b5e-9695-58102cdba2fa\neb0baa9a-de47-42a2-bb2d-c0bf753fe1ee\n3324e79e-1163-400b-9ae1-b9e3ba8e6b2c\n7040306b-24e7-48d3-b307-63874591fddb\nd2f2a364-362f-424e-8dbd-c1e6b0aba2fb\nc00c53ff-1f0d-4aa7-892f-0509f51a50ae\nd37d03bb-2e31-4b4b-bceb-bc93e6ba791c\ndd252614-5a55-45bf-a629-a502d111395f\n6d187044-c131-412b-bccc-5dcc70507aee\n92987f8e-6d58-4466-9396-a6a480d887ec\n0ae91033-f886-4a05-b0b3-a6aacecbab3a\n6d6097ba-c5ad-4296-9088-3bb8045e6423\nd68bfd30-c521-415a-a303-e8ddff045e5b\na8615526-89be-489d-84e8-cf1cb2cc829c\nde06b065-bb53-48f0-97de-c297101cfc5d\n42053773-9f51-475b-a930-cce4fcc29c95\nf6edf2e3-0a54-402b-a9f4-135c199f4134\n3aa422ce-a933-4552-813c-a58efaa567c0\nb092343a-b4a9-4999-b537-8779a2560545\n68c88538-dfc0-462d-a5af-d95e161d0fa4\nd009803e-311e-41ad-b174-6498d1e29351\nc5dd0ff8-487c-45c2-8885-63ded44081d0\n0de078f2-d625-41c5-8ce2-4db599df7625\n76697042-14c3-44c4-8439-9a315b980fdc\n3bada129-dcbf-48c5-9797-15c1932b23df\n9fb5fe1d-6dc0-4f19-9801-e4108175ab32\neff3376c-9161-41e8-a3d4-fe4835988e4b\n6cdc0891-1bac-4a7c-afa9-2b2aac62defe\n8659eac9-2407-41e9-9f89-4cb3d7c360e5\n7bb9a45d-fd5d-4b26-8956-2fdf92298b39\nc1406061-16cb-49ed-898f-a84a91827ea1\n6aa4c275-31fc-482e-b6b9-18022023fc82\n9a8d357a-e633-48df-9276-76c1ea9d7251\n3367ffe4-fe8e-4bc0-813b-969af8c6dec1\n385168e5-496b-4d2b-99cf-077f08b1b5fb\n8e567f5b-c757-4928-8e06-8d1679989e30\n3b855331-e0d7-4cfe-a36c-c7bc7960b7ff\nb15e7ee2-431b-4238-98b3-76e7c2fc094d\n7a7629fe-a82f-4cc0-84f2-dd0b82472403\n6f5f1e56-d6c9-447c-8abe-1da510e22e4b\n888ac485-9f99-4d9d-aa78-dc695464390f\nfe78b461-5c5e-4b8f-a7f1-bb90056eaea3\n2ec64719-7521-479b-9d09-6734fec2b0a9\n63fe1894-76a8-4d52-bf04-cd6cf01f4146\n46508c8e-c199-48e8-9d4b-7046ad3c3bd6\n3e1cac02-8d0b-432e-ab60-b6b344e5e446\n9b690288-63c2-48cd-a627-66ca5710de0a\n077ba768-bde8-4021-9c9b-ab621093d9f4\n3670ff37-0ccf-430d-af73-66d3f5dae7f6\n879cbf85-cd9c-4aff-896f-acf3a32765ae\nd63ea206-0d23-46a5-a5ee-4ee09377c38c\na058a0f1-adeb-4fdd-9d92-74ad6e5df632\na2845a55-95af-4c75-98da-8554ccb7d033\nafab17b7-7677-4f06-9c26-832f5f102948\n54345cbb-5b8b-4c92-b948-fcd7fa34187e\ndde479c0-1ada-46c5-865b-4d2e48ecfd3c\na7886436-fa03-4b7f-a051-f4ead06a37f0\n139c00cf-b9ba-414f-b3df-670dbf94109c\naac90119-5767-4f10-9d3a-6360d906f3db\neef01aa7-337d-49ad-ac7a-c867c87e3325\n20d07641-3062-4a23-bccd-7916a9e4e14b\nefed88a4-1fef-43b8-888e-de56c4058636\n8a7ece81-4085-4790-a6f7-3fcbd02578f5\n6358389a-796f-458f-adf9-97f210f5616b\n8833a020-d2b7-4dc6-99d5-db2e97864319\n5cc65fc5-730c-4a85-8818-bceae3ac047d\nd38f3abb-fc80-4a07-94ce-7f86fcc1dac5\n55fc55ce-332a-41c5-a653-1959eaa03c79\na133322c-21b9-45d2-8f2b-29997608ec18\n67ed063d-b4e2-42d2-9e79-c10d0bc9ee45\n65405c2c-7e02-4897-82e9-94ac81213d8c\ndb6cf616-7554-4174-842e-9d3c36dd8c3e\naded6ca9-2ee1-4420-86f8-a05b6c83021b\nd6db5dd5-343e-4baa-88a2-fdecbebab7c0\n9d9afa26-ac83-4cc1-ab58-c61506f8e113\na5e5192a-93ea-4ee5-9a95-88bd67f951b9\n13dfe699-5980-4ad0-93ea-571d647683a7\ne02e0ee6-ece8-44e4-9fab-096512789cf4\n40cff6d7-0f62-4ef5-ace6-1ca23117e307\n2736b4a6-82d4-402b-a817-d6d186174e90\n74872233-4f64-43ca-9a23-0b7b14710ff9\na89a59f9-1024-4171-b2db-a59f9241aa6d\ne3ba2667-0d43-448c-89ea-cc9d2e29d923\n71fdae6d-1ec2-458d-b438-29a766ff8d01\nf13c4b3f-c9b1-45c1-876a-e7581ea54f09\nb5241802-e9a4-4ad3-b11e-47196df41f43\n0c30c0c5-0d90-47f5-abb1-0e3c8df3caae\n057f91ac-21ec-436f-8eec-060f6438aab7\n7656f5ce-879c-42aa-bf25-517542949516\n09ee3040-2c30-46ee-baa9-8f80718d450e\n11bf63a3-2f40-40cb-a21f-83fec0bb1a6b\n15779961-ee7f-4289-9cb9-e86f5b9857e6\n36222e99-bdd5-4ed7-9757-721f1c739560\n36829c7c-e38c-46f9-8ed9-3eedba354ffb\nfa8cbea8-5e84-4d7f-aad2-7419c90d4b59\n91ba24de-b970-4978-a1f7-c571d43b84b8\nf4446ee0-928f-4be3-816e-2d43592089e1\nd4b94c19-bf89-414b-9c0e-dddb956d54df\nbc64e40c-097a-49ad-83bd-0b7c0873a467\ne10c1f94-6da2-4c9b-8e03-588d991d58b9\n50bfef43-3c0e-4449-ac70-4616049238de\n52e4a890-8440-45ac-80b9-df63befaf756\nb7ce04c2-ae9c-45cd-8a8c-353c60bbcfc5\n7b978441-a121-4dc8-9f2e-5a895f2ebfe7\n79e0a2e8-20a8-41a6-ba88-25b0e4f6b22f\nc57ea569-11f5-4da0-b0aa-81df89e58d57\n08933867-3e9b-462b-aef4-5c41ec8a5dd7\n339ddd7a-3d55-4502-9060-ccbbe77e3077\nf99d6ac0-237e-495c-b79d-4940685c6026\nc4885596-bb97-49bc-ba18-b33c4f8be658\nb4c745da-ab0e-4530-8482-3995bbe5fed9\nc09bc9ef-bdb5-4340-9b8f-2ff55951a7b7\n9ba9b1f9-3c7e-4a94-99ed-e5baa0ddec44\nbe0a5439-4562-4832-ac30-9d1c2c1144c1\nd62429fa-abd9-4737-bff5-13b0e0ee4e4a\ncf995dd7-85f1-4cc6-8e62-93ff556227b9\ne73a16c3-3105-4259-9820-dcd39b647a8a\nc167720f-8431-4db9-be73-282ff7e25e4b\n1d0aff83-699e-4c1b-a827-c68c904905e2\na2f69f39-4c75-46b7-8599-926c38729cd5\na1346922-c6fb-4531-9637-e69b1046bb63\n689ddc1c-3872-4022-8a37-c37be514c926\nfdb614d0-f181-41d1-999e-7fb13b1ebe62\n09d46fdb-096d-408d-a809-76993c247594\ne5c70b50-5801-4be6-9210-94830572daf4\n681a6a82-0688-4d66-96c9-73bea1257115\nf1f2592a-5b17-416b-b282-2e2bf3d87e60\nc7d96b1a-81ba-4291-813d-b848f5f0d9e5\n860c3c70-cedd-4e8d-8978-a2514ed8d505\n43c56e7e-0536-4409-b217-5ad0f6e9ab59\ne78b897b-9c7f-4c3b-a16c-2b1a7e0b7f3e\nc50b4703-37a3-46f5-a742-b74a64d9790f\n36bf0f93-1274-4e67-a49b-3000413a4117\na9c50611-0aec-4076-b0e3-9374983d0256\n222838dc-2843-4773-9748-9876800138a3\n7fa36a19-ffd5-4555-a277-aa1e8acbd3be\nd2c5d797-cc94-4ce1-ade2-c9140b071769\n7ea212e7-61c4-4d39-8891-b352ef87ba81\n58becedc-9310-4583-afc1-5f4ba0c131f6\n37985408-bf1a-40c4-870a-bc3553e3bbd3\n5937e933-277b-49b3-900f-098a39f40571\n17440bd6-13ba-47c6-9234-2b17d9d76542\n6d8ae816-cc0c-4d4d-922f-e5f8fb535421\n1b3f0ed1-4953-4119-a14c-37cfe8dd8904\nbc52c04e-82c6-4cf4-bf82-5ac4d36f01d8\naff993bb-178f-424f-bc22-e29aba005100\n2e341d18-8ef3-4f95-a0e4-0964ddb411b1\n73aeda4b-6a46-47cb-94d4-705c10d17e96\n9624f0a2-6d44-44a7-8851-ba5835bb5678\n4f17f60a-e536-47c5-9647-c7d25ae6e84e\n1ac06083-1e29-4ed2-8b76-3946092ab711\n9a27ae65-7fb2-431f-98fd-6bae652bf4d1\n05067aea-33da-434a-bead-ef42db06b993\n613db4a8-60ee-49c6-a517-423a9e9c2c30\n12a1624b-c6ee-45d3-abaf-07851c5c82e0\n8213e1e8-2ce9-4f0f-bd65-32663a0dfe64\nde1ece47-8a95-4388-9696-b25e05eca1a8\n02d49306-ad2f-4fac-bcfc-72a074be378e\n2d1e1f12-5f64-4ffb-b6d2-dab0edca8a46\n4fa808c3-4126-41b9-b1c9-79f9a6ae4e97\n9868ba55-21ae-4cae-88eb-1d2f8299d842\n88ddf2b5-5826-4754-9bb4-ff377cbb8021\n0f219e69-9286-44dc-8df5-2d022a31e3e1\nc03eef6f-675f-4127-a558-2ea0548b85e1\nde57e30c-7861-4342-93e0-9a80135ed1f2\n3997d7b6-99a6-4b0e-8d6b-677daa256edf\n924f8f7b-2341-483f-9dda-96a3aa050733\nf2eeb380-9d80-4057-be79-e6245449bcac\n35364bbd-3352-4acc-91bc-b3a5b0702433\n3370e912-916a-4619-8298-cf8dabc3e3b5\n13ca5136-d723-4121-b368-c1f4bde1353b\nd9b745a4-202e-4f6b-89e7-95fcd9cdb0d8\n0906f1d4-dc4c-4d6a-a2c6-3519b4397e0e\nb4ccb9c9-548d-4b8d-84bb-ec43a036d872\nd324e78c-8ec0-4a3b-bb31-d345dbc6c29b\n8ee05b17-6378-46c6-886b-6b05830c5549\n99b80b14-2c47-494b-bf16-4fadd6c4538c\nd2e015f4-6891-4974-ab62-1db4b1f4af7e\na83e3c51-d4b7-4401-ac53-efaa31a2f647\n8cffcbe5-801b-45f8-a4e3-c76db64098f8\n2f04e469-3387-4480-9c11-0fed5ade1599\nbbb67744-9ea5-4866-ab36-bb6c629040b6\n79cf1556-baca-48aa-9cfd-225ba01905ac\nf3120aa5-34b8-42bb-bd1c-0dfcea3c818b\n508b69e8-35a8-421c-9ea6-59756c1adb22\n5666ee24-4386-4434-950a-ed2ef16ab768\n46a52b07-bd34-4474-a13c-ebabb3941461\n09247a50-de51-4b95-8a70-ca5ac07d0462\ncdb34abb-f607-4a32-8dd9-e62cde6803db\n5aaa4fa5-51d0-4733-b2fb-50e12ec1c1aa\nb33e87fd-ac4f-4422-be93-3e5c1deb6f8b\n309a1049-2d17-412e-8186-d523a12880c4\n136ef487-0f19-4068-9317-143a6d7ce2fb\nc8010c47-5069-4ec5-afca-e35e6216c7da\n552cebd8-2fdd-429c-ae83-20bdc6d782f4\ne10cc156-4818-4b20-846f-a74fbe8d455c\n7f359b14-0240-4905-ace4-d75d7745ec78\n127f1f1e-85e2-44b6-8ae2-be6e901a0f97\n4fb74b0f-86eb-48c2-8f29-872d77f365d2\nea2e0c00-bdf4-4a9b-a50e-dc76709fac4c\nf6c76aab-e52b-401b-9297-ef4f5f335a0e\n748e32eb-b583-479e-962a-a8ab9ec7b211\na079e3e7-97e7-4002-9bcf-0dc73ede3929\n8c3473d8-c4d7-4f3f-9542-a080bd422515\n06845927-93db-42b0-91d9-486fc90d5d20\n13edab62-98ec-4b27-a703-8eae1fb50f49\n9c0c1786-0a34-4409-91f0-a05fc9b05100\n5c49ac60-7b28-40e6-b25d-ce3140d2e95b\na788ad1c-610a-47ea-a515-1174da47dfcc\nf5a202a7-2e7a-4599-8422-397618777b5a\n1c813504-3c8d-445a-930f-965de5628900\nfc20199d-3e13-4f65-be10-278c639944dc\n73054bfc-30b1-4b2a-a7a0-c87d258d42f8\n4f741fae-33a4-411c-8008-52214eda13d1\nd9595302-24ea-4033-881e-5815aa0d500c\n4e7f1332-0751-4af5-847e-2e774521e333\nca4dc848-61d3-4bfa-bcc4-9c18eea02923\n7f0a29eb-e1ff-4c20-8594-d6594fccf336\n5dbd3549-655d-42a9-bdd7-7fc26956f2b1\ne21df8ef-a441-4a29-b370-910b36b7cd03\n8d66f82e-d848-4fae-af72-46a17aacaafd\n31750f79-b18d-4439-a919-6a12dcd01cb7\nb7f3673d-20a5-40d1-956e-8942956406c5\nb63b3b86-1935-4d67-9ac1-b7d4c1018023\n9fd7c27c-f3de-474f-98e3-195c87bd9889\n486f99aa-8b29-4670-b757-274c873e2665\n14eed95c-eaa0-4d2c-bcab-7974a4593c03\n8974d7a6-e2d3-4850-9a5d-11aacc8695f6\n0d241d41-1793-4e58-9322-4219d52ea566\nf8c7357d-9132-4077-9531-8ad6f013a892\n83686d8b-d000-4952-a00b-6382df200b78\na7b4b317-3e92-4837-8af5-2b7fa407b952\nbf6b87fd-9225-4a32-ba38-89c8c22f7f97\n94b09099-4e61-4fff-93a7-a35ad79246ff\n8c895aff-5441-40cd-9824-76f3e514be5e\n8a359094-3850-406c-b333-3aee5b875ae3\nc23907f8-527b-4c41-a070-722a6c26b5c8\n5aa01ca4-f074-43b2-b047-14d1626544e6\n5b1f9286-a574-4fc2-a25d-aedd50a3454d\n45823aa6-f086-4f0c-8ea0-e11e258958bb\n0dbd75ad-82fb-4270-be0b-68e14f6b72a6\n04e32765-3444-438e-a59b-7f8c75b85060\n8bdc902b-d94c-4ce7-81f6-eca48ff773ea\n4f3d729a-1ec4-4730-8b8c-189f8db0acf6\n4d116649-064f-46ab-bd0b-870a87afa9c9\n68aa7439-f911-4870-970b-e23fcd0de08b\n4cabde13-7a48-4e52-b65c-6f7a1df5ec88\n6abcfe7c-ccff-41e9-9090-1ffc9a1286d4\nb636d4ea-1b47-41a8-9a18-e51c8a27b216\na91e0d8f-3a00-4d6d-b012-c7d91a3d21a3\n9e593363-6bd6-42a4-9fbd-74170249fe55\n19a80caf-167d-4e70-953c-a183504b6225\nd18e54d9-ee3d-41ca-97e8-0a90aabe0c85\nd14826c9-34b9-4f1b-8623-be5bcb73f1a1\n92664b1d-57a4-43cc-9d0f-4b2698286a03\ne2ae7bdf-9526-4632-a126-348b3bc2d019\nc4eca48b-2f19-4571-bbb1-b1741477f6af\na153d928-bb67-4fb0-9eaf-92d7cd7dbb60\ndf3df93b-c2a3-46e2-a1ec-b5b510fd75e8\n59d9355a-414d-4f83-af2d-6270365ecd8d\ne891706c-0b64-4399-b506-a2fc0cf00c4e\n6e38d36d-7c63-421f-a059-3963292ba75c\n07df85e7-be45-40bd-b508-61d36d780e64\nd7dd89ae-9831-4cb1-9432-4d115aa25d3c\n94b7971e-04e8-4c7c-93bf-3e8fc90f46f5\nee76d183-f621-4493-8743-60e927c3a65b\n27ea0646-d6d0-4128-955e-e657da005221\n6495f8e1-24b1-4726-a77b-660d1fa7c282\n94813a95-2ebd-4819-bc06-2710b1ff5b49\nf289d303-4b61-4bed-b357-09699939623c\n8c4b0190-7893-4122-aa0e-8435c8856b45\n075bf17b-ce1c-46f4-aa50-62237b60b7ff\nbda1abcf-d182-4d89-a9be-96a12bbf0af9\nec45ce01-fe9b-4125-a992-e5a5f4acbfac\nc33e5f93-1626-4e9d-b8c0-454b4de91a80\nbb96045b-9d68-4c4e-a27b-bedc6f7a76f3\n856e88de-00f7-4f17-a075-170402c8f7e3\n100e3cfc-7cfb-48db-b0ef-267d6ba3859a\n4f291584-c852-40a6-85ac-f7494be273f4\n81ca6869-22bb-4a61-a484-2e4964e84335\nb00b3be4-06ec-46c8-992a-e19f4b2c973a\n220d9b99-d086-4160-9626-b49d82121c75\nd12d0a67-5c3f-447a-ac98-94769c003fc3\nadd7c6e6-e194-4d83-9ff6-a16d35acf806\ne348c9f8-29c4-49ce-9fe1-d610f51e88eb\ne4b26bcf-1a73-4ded-81a6-7399b3820d23\n90a2df48-508d-4d39-b80a-b2e948c12b15\nbaf489bf-2bbe-44fe-9c4b-6f5aacad894e\n6f9f9634-67eb-43ac-81ab-c23f029ceedd\nf50e7860-117d-4825-9606-2e95f1edb1ac\n9d0edf28-e2e2-46e5-babd-0d0184156ce1\n980c9297-77e7-4ef0-b31a-704b695f76b5\nf6bb8583-7108-42a5-8387-07ca30550586\n03f1f6b8-6d3b-4ad9-8aef-570ab051805c\n37807b1c-93e4-42b6-9ca2-a8479f5960e2\n5db806b4-17bc-438c-8437-fa47194e3cf6\n8fc71907-5201-4c5a-9904-3cbc058d6bb8\nbf8f3f0b-b6e8-4427-809a-cc54dd8be600\n6e3d270d-074b-45a6-9ae8-ca6927b1d071\ne577673d-00c5-4358-8e73-a70c937128d2\n344e77e6-1670-422c-b4bf-2dcb94db949b\nc4770adf-3a91-4385-a351-11c699316ed4\n4f7f6cf6-0d37-4f77-91eb-8b57147770de\ncf12e8cf-8aee-406f-8bea-2b831267d8ed\nae9dfffb-2060-42e3-a5ef-000ce7fd330a\n0813689c-7214-46ba-8daa-d39f1bc6cb91\n64c5564f-68d9-4812-a16e-a3b3f0416faf\nd237e76a-7d9f-4a83-a351-b219f1949ee6\n5b9b43f5-5af8-4935-b854-115f9f361b9b\n0350d591-3418-4989-b3a1-475286ed2d01\n315ebce9-5b65-4e5a-8f5a-f4327b6deb04\nbdd612ea-04e4-40ed-a9bf-e8cff1ae78ad\n1deb9ba8-2276-445c-a5ac-9df3891cdaa2\n03685e78-bd44-401d-a709-8f36d430577f\nc6bbcaf4-ebdc-4cc2-8993-fdcc3435b61d\nc965a28c-18c5-4856-a7db-c04266b51f48\ned1a1ac0-959c-4de6-84b3-9db7f3f9be49\n9c7eaf54-65f7-4287-ab35-ac4427b9e446\ne9e0ecc1-c518-4537-a3d6-2510073bd9fe\n0f0f1ef7-003b-4bd1-8a40-704a6c50b3c7\nafe44d21-7ee9-45a1-bb74-d646424c12aa\n56fe8600-f454-454f-a416-848b8df78d85\nfaddfe89-eff5-4fdd-911a-4fc82ee4a1ed\ne880efc1-00b1-421a-962d-274cb393c50d\na4911b6c-93bc-4501-b45e-d5e555007fa9\nc815d4a6-1461-493a-9959-5fa6aee03229\ndadedf34-3257-4226-8a60-d6dd2622248e\n4fe1eccc-dc2a-44b5-bee2-d54d38938004\ne576f6eb-ef16-4413-a951-4569bed07f0e\nff173ede-0366-4717-b9df-ea09ac1197e9\n99399d67-427d-4d72-8c2d-46cdb2157e14\ned5d8fcb-ca2f-4dcc-9f26-1a4feda9c0f0\n0e12704c-6312-4409-9358-4bc64814dc71\ne9e70770-26e0-4ead-9bf8-1566e28fd052\nca4db20b-5fd8-4a1c-9b04-7a1f8658482f\ndd1449c3-2d16-4b85-998a-62941321ca3b\n4eb95fd8-a2b1-488f-9a72-702ce159b299\n39b96933-9037-4361-aecf-42b5d56e07be\n2b328287-dde5-4508-be23-3b1e6c6ab4fd\n67d70363-0eb2-4617-abe1-ab19c5f1fbff\n24792c87-c359-493e-a9c4-4be495d3c4b9\nc987c661-cff7-4e9c-b9b7-a4dff7fb82a1\n87900459-a81d-41a6-9ef3-95bb1fc0a84b\na38e1add-e037-44f5-b1b3-701039174edf\n109195b8-3ac1-4bd0-a7ea-d7e273dbef11\nfae16159-ff66-4608-ac47-a9b07fde21e0\n220a00e3-35b8-42dd-bae4-c73b99146e79\n9a19228f-c533-479b-9045-d9f0bbe7c9bb\nf73c25fe-d774-44b0-b8fb-cdbe42f699ea\n9ee19956-4a37-4120-b372-1ea7801fd427\nf9fa92a9-be22-4015-b533-3e0af5d5f490\n808dcb61-84af-487e-b5db-4ac35a9f5f13\nd2ead510-9bf0-4cbb-9f06-8a0c30d01099\n1792cce6-cfbe-41a0-9446-06b0f091b878\n52f04b3b-36ba-45ae-b921-94e2c87363d6\nc40cf668-49a2-4622-ab38-30ddabce1eb9\n143cd1ec-88dc-44e1-9987-5aff22161619\na5b9b24e-4822-4e26-a3bf-b1ecf26fc083\n05e868dc-0c09-45ac-8b58-704bae2b2639\n454c62c0-48c6-40cc-97ca-2c36c91841da\n9a4715e8-0132-4c70-b260-1b28f0d25794\n813fbc74-221d-4c98-b955-8562ba8ab089\nfe9b7097-6d51-4926-aa49-963c1e726948\n8877eded-77d3-4678-967f-f6b942c57dbf\n6d70d7df-a575-4401-ba44-289fbb825293\nd70ab7ba-8bdb-4d4a-a1d2-cfd0061df1f2\nf1f34027-f457-4bb2-82bd-ec07fd1ace85\n348cc64a-de0b-44d5-b4fb-e768021a6d02\n8dffc6c6-e1ad-4cb0-9889-c3b3c3c798b2\n9207aefc-891d-4e98-80b5-3a33a662073f\n35695496-5708-4663-8747-1ac3b773985f\n1fb638c6-ed53-4351-8c22-6b889d419aa6\ndd2302ca-182b-4269-b6b7-67eeefbe0a32\n10093d7d-3d69-4c1b-b553-e7ed36b7b012\nb64c6793-4d36-4ca4-ad41-b06f1e785207\n25e64e18-b58f-4ff1-a228-d221b54a0464\n5f08b5da-2cbe-4c22-924a-b64b517c42ef\n818b2191-2bcd-4475-8656-1cb69ebb1085\nf24c4ca7-1a52-4cba-86fb-07cead4c3673\n8faf449e-c80e-47b4-bd9e-7337f50d3794\n52e4c8e2-72e7-4ae0-9fa5-d50b04d64b4f\n8fcba9bc-e394-449b-8ea6-0227772cc9e8\neb012587-cd83-4f18-9625-11b80ac19d73\n44cb7a62-1865-430c-90ff-1e7348e26f4c\n800257fb-3ec2-4fda-b283-2dcbd497fc1a\n903a2ef6-dcd0-4849-b449-ccf593f3c135\nc963fc9c-a363-445c-9949-83cb14b84c77\n60ab5eaa-d108-4e23-ae2f-201774e6d417\n4057b45b-3d43-424c-8c32-037039587bb5\n3d531ada-1949-4fc0-8c20-d1c73ed0c665\n2981f686-8a4b-4fb5-81f0-2a4ca216a932\n86975dd1-3bc9-4514-abd8-facf17a4608b\n71d6f366-5422-4f63-9eb6-8d4ad63080f3\n529ff5fb-e69e-40dc-9808-1a1c43bdedc6\nd6fe3dd4-54dc-458e-b6ab-f7f302b2003f\nef979633-63a7-4838-806b-51a888f492e4\n30f4c599-155e-4061-8ae1-60c2c229d8a8\n3c102acc-546f-475a-b9d3-d52498c64a84\n78742e81-4027-4a2b-bf1b-310d4e45ec06\nbc95550b-1b9a-4155-b16c-4fe185f73844\nf162f6b4-6756-47da-996f-5f95a7064960\nac27efd4-83b7-4c59-8540-de5ef6770299\n49866cf9-5428-4f8e-b5fb-9040173e99c8\nae144989-91f6-458a-b5e7-36c7f4067b6a\n828cc71d-08e9-4c5a-9745-8a73af8973db\nf5bfbf56-516b-4a0b-9f4e-49e74eacc7ae\na6e84a16-45e6-472e-aaae-64f52b62ffff\nc55e2936-5f66-421f-bdb3-917e0c59d586\nac4cd97c-8319-4b30-b4a1-abf872802f78\n5e797472-014f-4a15-ade5-3851973758b5\n16a27dfc-2545-427b-ade8-bf7cd5e6d0e8\n513b1f2c-742b-4208-9e75-7715e959e5ec\n83c58fce-4fea-43bb-9860-5cb69545fec9\nc8a0311b-5456-48cd-9788-48ccf7c54a68\n25f44f19-eab2-4c45-af8b-e84fc5aff26b\n31632dd9-d795-480c-93dc-34ee4355074b\n7d59cf49-e4d4-4bcc-a2ab-8e60fdf6646f\n63f9fbe8-1825-4a91-a7d0-45e19622ba44\n98bb8410-0bbe-44b3-8ac6-9befb7e315bd\n402f9c23-7838-4e12-8e99-fb04763fc0f6\n6e592e72-d196-4b6c-9731-690e98c5693f\n47dc06f4-6ecc-417b-a8d2-665978dfc5a5\n7ce33ca7-7702-4ad3-8990-41d55d05ec2b\n4e26858f-21a7-47b7-ba28-1367c15bf058\n7e01c85b-1a93-4b6f-b627-275eb812d8b1\ncd04b41b-5e13-485e-b13f-f9f6594dca61\nabf95f99-f640-4976-8357-b1acf57ac23a\n4ed7da82-e9d8-4c2d-8ae2-8fa0ade1a763\n7c945db9-2338-4fa3-8bc2-b3dbb209f90e\n53b78108-7c89-4348-8964-c0e98558e05c\n72a3095a-f6d1-43f3-86b5-1db6c8853d7a\na1bcf4f1-efbb-45f6-bc54-86e96156629d\n083518db-281b-4f31-9174-ee25da31d5aa\n43b9be1e-4b4e-4cce-ad06-39f70892cae1\n9ad46b7d-22b8-403d-afbb-c8301aa0b8ce\n8c3389bc-b5a4-4ac2-80ba-895e1d284f17\nca669f6c-80c1-4c17-b260-d8f0c5121d87\n46b13c4f-af4d-405d-a224-70376ed431b5\n7e7588e0-552f-446d-84d9-5da4dfecf6e1\naaad0fe3-79ca-4462-85f4-6e0a70683c37\n3b0d8b70-19f1-4a88-a6a4-c4b493ea98ed\n772c4261-f7ec-4ffb-92e9-6cbf8ef3bdc8\nf51a8c86-ad60-4ac5-b431-dea802f93072\n66b95f39-84d9-4731-a6ae-a67d6590062d\ncf0333e3-801c-4b9d-b0ea-c8ee00978522\n01f3862c-de76-44f3-a46c-dbc45df6fb7c\ne2730d84-14db-4e99-85e4-8860a223d44c\n1db15c3c-f32c-4f37-bb11-aaf75d4d3c6f\n22166cb8-0b1a-4040-a01f-58bc759a392c\n9150cc6f-7181-4e62-bd77-a5938677302b\nc35174c1-4568-42ab-a34c-6999c3338119\n0ad1bd92-dd30-4089-9f2b-439f789dfacf\n28bdcdcb-0525-424e-92f4-32d4fc27adbf\n4c8f47c3-b624-40e6-bc12-d761c5b10362\n515ba1cd-04ec-4cd1-994a-f9c93c2a710f\n03d82ff2-bc15-4303-929d-09eb71bc6496\n17221067-9a44-42bf-8581-51a6a4f58973\nc25453fb-4cf5-4b8e-bca6-8a9c31b672f4\n7c5f08fe-877a-4523-bf74-24772f50d097\n91111c32-09fe-40a7-8fef-daa960df72d3\nfc94155d-b732-4d7d-b0cb-567cb231cf2c\n0260b8d5-3364-4a00-ac90-ee7df3a9d482\nb7cbe8b3-d1a3-4b91-8332-28b84db84d5b\n26d0d8ef-f0bf-4766-a641-d10eb0f9dea6\nc1ce797b-9c63-441b-96cf-71ce771eec5b\n8d582b25-1b1b-41ce-abf3-7a2eb24c9088\n40182316-2de4-4808-8a4b-840cf6032df4\naf72cc72-92a3-4b62-a8f1-d6f27605c033\n60a252a1-d6ee-4932-9a65-22e500b78fb2\n93815341-fe56-4eaf-b373-b33aac961617\nfdd572e2-db12-4d5b-9862-eab4faf6dfb4\n5396cf72-6833-45db-9a4f-239f74f1d163\n62488d6c-8bc6-48a9-ab91-546b3f82a73b\n7fe33045-ad16-47ef-8707-fe33c204eee3\nfbf34abc-f425-47ad-bf16-3b64d909fe91\nda3dbb49-2214-42fe-afc5-b5ad966cc4de\n1fe19cb1-d89d-45cc-a8ce-4c6e0b02bc5c\n26d6dd96-5a8b-400b-98df-dab2b1edbc34\n40412f3b-4261-48fa-b77d-b7c4573bbc42\n86618d5c-7a37-4c31-8bef-8aad74f76ea1\nbe9dd2fc-9d5b-4cc8-84ce-3b2bcb5d38a5\n5862e3ba-0c33-4d7d-91ad-464e5ec1f729\nd777a470-7a3c-432a-aa77-332318642f91\nfc95cd6c-fbfb-4d88-8c2f-ead700071976\n3ef0b27d-7a1b-471f-9b1c-edd87dc6ded0\n6e58302b-fd2c-42fc-beba-4391d6502efa\nf79a4609-b4d2-4c58-9e70-365d82a06ed8\n360b3fd2-1f84-4fc7-9d35-fdc651bd48d8\n6f6d96f0-5cde-4bf1-869a-1edd19978d0f\n42da8eae-b73a-478b-9296-19aa08922ea4\n5e1c0bbf-eee9-4a3d-bb8c-f2f6b8a8a437\n742c5864-e824-49fb-b467-db80b71e8320\n5b42aa73-443e-4854-88ce-e6d82664b8e1\n4ea12816-8676-48be-865a-58c58e7314e9\n70763b6c-0dd4-496a-a2d3-41df1311bec4\na0e1f5e5-5c53-4c01-a5cd-553797cc31a8\ne58bc569-111a-47f5-b244-07f28dd189cd\nad301702-6a94-4d04-9245-5fcb5a1899e4\n709b61d3-31d5-477a-9982-8742eeb94e37\na7dd3b16-dac0-451c-93cc-89fe8676bed9\nff743200-6299-4bdb-875c-d4710efb7f8c\n0392fba6-aa97-45b2-a139-ab11c0e58087\n1f965b39-8b00-49af-a367-97b55d15ef8f\nb3fc3e6e-ea53-44dd-9641-9b3b7e5ab072\n40190ada-a774-499a-bb95-9a66ff81f1d0\n48754ba2-ec58-4352-9698-1d1686b9d637\nb701045f-0f33-4e6d-acc3-92b32b325259\nbc6189b1-2b8e-4ca2-878a-36558e35a5b1\n04edf068-491b-4653-9553-5d6dd350b17b\n7faf45c4-d41d-4bf5-b418-9cbaf87685db\n9924d183-140a-43b8-a2a9-5fae550c5c9b\n0bf4ba84-dcc7-4ab5-b448-973336512574\n68c89978-87c3-4d07-98c3-b5a437b54f35\n119cf868-dd91-4a7a-8d70-0a80804be448\n333b7e25-9cf1-452f-8ad2-2faf933e0026\nb8c96d55-572f-4504-8b5b-cdd804849159\n11b491b4-1f8f-436e-8481-cd909e3d3c37\n216bdca0-bf8e-45a5-8481-28abb77970cc\n98881d54-39cc-43ac-8961-73a1f4ef69ef\n4cea773e-6be5-45a3-ac0f-a20f384dcd08\n0b8bf885-a613-4b32-a9e8-78a6ae3c6b2d\n82a79729-57e4-4b39-9466-b4fa9d00307a\n16a58413-8ad5-421e-9828-6dd4990176bb\n68c49cc3-3f08-4d33-b13b-12de4cfbe6f8\n21b52028-0171-421a-b1dd-7b99654ce214\ne8918aa3-145c-4e6c-92ef-9ef8317cce54\n928e2e91-38ce-40d2-972a-0c35edaa6706\nda0ed69a-5af2-4bed-a379-52fcb4cb3220\n5c227634-f49a-4b95-99f2-5be6ddba430b\nbc48bc26-2ce8-4011-acc2-8a82c16e08f4\n36f47f46-a5bd-4953-8410-52acf79e7e81\nf2c7c25b-5faa-40dc-a6a9-46629bde46a9\n147c6225-6d2e-4188-b122-d532b992534c\n82db7cb1-5b95-4ae8-978f-3e5a1163d255\nb9b5ff8b-039c-4f4b-8ea6-0f0b786cad5c\n132b4822-c226-4e09-acbf-f9e4240a6b9f\n47d70271-a605-453d-a895-35c1110ce0cb\n2a13875f-99f6-4cb7-b7e3-10014a426ebc\n8ee5eb6d-67f3-40b7-9087-eb898e5fb436\nc9bfb9df-fed5-4586-8bc4-7482f2c55540\ne74d3cc9-1391-43c2-a515-f8c0e43642e0\nfc19167c-d12d-4be0-ac97-e03dba119c13\n93190679-402a-42f6-89a5-e8d9ab7f948f\nc1be2676-405d-4d19-8302-6ff3aba78266\na3928437-2cc9-4eea-86e1-55424e11a0e8\n4f025c76-2d20-404d-8c7f-66994c3cd815\nff6c5b16-2e9f-45d5-993d-31c13d063c63\n0dc0d8a9-0b42-4cb0-9c0c-d8e899e5916c\n5b78fa20-db7c-478f-8fbf-9875437aa895\n93601bc8-1bbe-406a-8b9c-94d4df4e1b1e\n93efac8e-f594-4207-afb6-d7c85756f3f9\n307a9772-b9e7-43b5-ba2e-9b253e32b9a6\nb7fce23a-7b48-43ba-9fa0-fe0d43fbfee6\n06979edc-a0e8-49c0-a90e-8b6c3789c412\nd20a2ad9-2e50-42d7-9ba1-dabaca70c34f\n86ae6dfe-87ba-4f39-9896-f43d25e7aa91\n5ae115db-e75a-49d9-ba7a-d0ac9d39e537\n3cd3f0ad-1f02-4183-a182-5d7c061d6486\nce600072-9e20-4e92-bc6c-0c87b1803167\ncc0871c7-2979-40a2-ae2b-cf254e982ed8\nbf240bfc-5cc1-4187-b584-68640df92749\n65545991-465a-44ac-8dca-47fa49798da8\nd9a30d0d-ecbd-47a0-a319-bc251678a51c\n032f0070-881e-407f-96c7-2e3509788421\n14027203-6547-4895-be50-67caf3a2fc4d\n0beae65d-981c-4b06-b103-9f8662a7ade3\nb5a48f2d-90f4-4cf8-86ad-9d5e9b73bd32\n0a7ac979-cccd-4f9c-a5ec-2d9e8ce4374b\n9fe1d80d-609c-44a4-9561-32bf0b50ac1a\nf96a050d-d7bd-41f9-bbe3-e36a3926ef47\n0770364b-6f69-4593-b37e-d8e077d93cda\n7e522fa2-cec3-4887-9efc-4cc5c47e007a\nc95cb302-5bdb-4ff0-a572-ebd2537db23d\n00fd1246-68a4-44dc-a9cc-d21e2c592dde\n0e6c89d3-9b7c-46ab-9462-8ed07672e4e9\nd987b395-acfa-4db2-82f8-194e70c3e136\n6d3e68fd-f505-49ca-857c-08c9ebcb5e81\nc43d4249-33f2-4ddd-9e3e-927261b0d74d\n8e939a6d-553f-4324-a5e4-5b28e84ac390\n16a17d83-3b60-4f13-bce9-46d4529ddea5\n51b6b778-9783-4b4e-923e-b10846637cca\nd04b3cc9-c1aa-4baa-b842-470785ce12ce\n3097ed81-2043-4432-a63a-bb589bd8c91d\n77936b5a-ccc3-4f80-a043-84fa65b6fcce\n08818511-bb84-4d14-a4ff-c2d1ce0bb633\n4fe3fa4d-f4f3-41a5-b83b-db01bb8c2a88\n271b0f70-9fe3-4fee-98d1-3b00e764d38b\nc8087cd2-5ad3-4a4a-a2e2-fa28a12a9680\nffb75a06-4b64-4053-925d-04cad7172aff\nd63ae1cf-3cce-4499-82b1-4e06f39409f8\n04aa73c2-8e31-481e-899e-d3ef3e37d09b\n7425e9cf-298c-46ae-a055-88346c43a41c\n39b385c2-44cd-44e9-9a20-a2af4652f9e8\n42503418-18d0-4d20-9a5e-0c2850e9493d\nd949070f-5e75-48aa-99d8-bb99dcc6b5a8\nd8d5639d-3c68-4cdd-acdd-d0392c290355\ne0e08e52-4b7a-4301-b603-0f2550cdd7a1\n77e88f8b-0f82-4a70-a656-19a9624291dc\na9bd5a50-4ad5-4cda-b117-2a36921f5504\nbc010697-d3c1-41b9-8a54-0ec7a22a0f7c\n913e95a2-87ef-45fb-b715-35d4446ed2ba\n330bfb33-9bea-4275-8b7c-b343ff664f18\ne843a524-c34a-4831-8f6d-3536a16c9dd0\n08c21060-f708-47d0-9525-5b410b185070\n3537beb4-5cfe-47a6-b900-89da21794b01\n66797e73-ce6f-47b2-9298-6c6f84f99415\nb85162ad-c8c4-41ab-82f9-42c61a483abc\nddd6a932-0893-47b5-8169-00ba792bfcd5\naf1e0943-a7a1-4220-ae1f-9244909bfdcb\ncb08f7b0-700d-4b2b-806b-f270e43b982b\nead409d9-8c65-4e56-ad5c-fafe51b1d19f\n326ab0d1-23c7-44c1-b5fd-515e09189b53\n5df9be01-a4e9-4747-bf57-3253923c1b9e\n54e102f7-84d4-4bf2-bf04-c6657539eb0a\ncddbee64-12c2-4789-bb47-6bbff577c1f7\n04c20da6-ecda-426e-9c5e-dba621338c78\n7405094b-64f6-415d-952d-a4c0191ea0ab\nd24bdc1d-8b45-4ecd-a780-606cd81838e7\nb0672051-eb8f-473f-ae1e-f28c00ebbae1\n956e6c6f-33e6-46a7-bfc1-c7eb923febff\n2abe13f9-80c3-4860-903f-58d3bd86c031\n9c07afe4-7706-445a-bb82-59194d399ad1\nda4e813a-6ead-4776-b098-b14c75600a4e\n4c5b460c-c1ce-4d28-8459-225e32a9ccdf\ndcc0933c-e9e6-4573-8b0a-7caae3519a88\n5a1dfd0b-3b1c-45be-b64d-7c5ca83d5a5a\n5fda33c2-82a4-43f4-b2f2-cd66c047c9e8\n0b0372e8-4fbf-411c-9653-5258cce44992\n1a789437-cfb8-4914-bfca-26507299aadf\n0864bfd5-1424-4816-b89e-aefd25abc775\nd4a2caea-4ecf-41d3-90a8-bfd74ac5d969\n877e70c7-93d4-42be-885a-b55bb963ea24\nde6bfa87-2f1b-451b-9775-f25014bc31ea\nde904818-97d9-4b65-8767-24bb0c37f7a8\ne124cb43-b6cb-4b2a-abb8-8c4b1493ac38\n65b3b25c-3813-4884-aa16-a6892a2f4d58\n7ec7a5fa-b8e5-4203-b9e7-b1b573cc51de\n634ed9cb-7455-40ba-b18e-6e37e5949e57\nad1d956b-65a7-48b1-9f1c-f6e862a2e69a\nd999f21c-df9b-49e8-939b-c932f6c45aab\n2919a8ed-0297-4c1a-8d79-c20b22384c78\n8935382d-7893-4e59-974d-31a366b817e2\n73359ba2-68ea-4dd3-8091-3fdc1070dabb\nfd66facb-535a-4760-b9ce-b615b951975f\n04b5a184-7fac-4689-ac99-6233ed97ffd0\nef9364be-2b26-4571-8730-74f7d86e2bdc\n0805f347-96bc-4457-94be-6be9b3beb1d7\n451e826e-0fbd-492a-a381-4f58146aa9d6\nea43a5d8-fd10-438e-ac60-7ea9471f90f8\na2f49b75-768a-4cc0-bbb1-d944ae64ad57\n8a755842-df33-4102-9fbb-20347be1d74f\nb87aee1c-e674-4b24-a030-b674a93ae4fe\n76be313f-aba5-4ee4-a471-b9717a7ed59a\n12b6552c-5576-4cd1-90b3-6622908a8065\n558c6e33-0d38-4440-889e-9833bbc9f270\n37ffd823-5ff4-453f-9e0f-7df5e272620c\n293fbde5-ff00-4300-b9b9-afc455a81c1b\ne0565dbe-951b-496d-bece-2b0884d625e8\nefacf5e7-3a54-46f8-bae5-07bf21bc7573\nf6c65242-ed1d-40e9-81e1-7df2fb97ace6\n51693045-5083-402a-983d-fe202df5f224\n9e4c090a-a974-46a1-8fdb-c4319ed69910\n447754b7-7e9e-49bb-9eb6-72e1cf2ec080\n9abe5c4b-2cb7-47e6-84ca-88a96585a381\nd7351478-52dd-4747-be0d-67888b316775\n37725a07-daa3-487b-8598-ba584f725920\nb433d708-c301-4746-9ae7-e5bd95512d1d\n0a38e722-8ad4-4798-9915-9e2ff111efd4\nd8942fee-4673-48c9-ac5a-b4dfb5b519ac\ne0bdc337-395f-45bc-804e-111a960f661b\n7d06dea2-54c6-41ae-a890-846085ccd606\n90e1df1a-27d3-4486-8bf1-5e46ba084d1a\nf3714e66-1001-45b5-9fd4-6bc1f6210ecc\n4b1b7089-11d7-42a1-9001-a51088e81e3e\n3d4985f7-4361-4b79-af2a-59642387b42a\n10daf001-7c82-4469-896e-2456920d4fb0\nbe258ece-0f5f-4762-9619-8fa5161e7139\n1e43113a-60a0-4e57-9cde-6d8d5a1d8fbf\n1a79f346-b333-4990-acb5-8c018b8c1ecf\n4d6a004a-f94e-4225-8056-681e2fdad3ef\n59654768-79f4-4958-a787-4680286fe44f\nc226fa51-39f7-4775-b3f8-0f639c230551\nd8474718-095d-4d39-8c73-f07922b5952f\nfee4148e-c225-45c0-8314-c5aa3102357a\ned26d143-2bcc-433b-a20b-fe6c0382b8b6\na09fed58-03a4-4001-aecd-12455ce85e10\n26365a39-47df-4d9f-a040-e87fd2682ce6\ne30cb916-79a2-4aa8-bff1-4aac14544c43\n55ae4aa5-c759-4884-888b-c975c1a6c9ea\ncdbb92cf-fa53-4c45-ba80-57ab4b2256ea\ncb823501-b40a-4ee6-8df9-14ba6f0f1a92\nc9fb3310-e4e9-4ac1-86fe-3d0a49617aba\n59beee13-db44-4787-8e30-22f3be3191ff\n3d770c5e-e317-4f2a-969f-adecdef1db5f\nbcb8cfa2-4f2f-4b17-b341-16160790e300\n04a56623-f616-4ae0-872b-183c951164fa\nca463e6d-d4ef-4244-8c55-e639e4612cc0\n8e2a3bad-a9ed-4906-b0cf-f9f4555f63e2\n50e51934-6e86-4b8b-982b-58128ce331e2\n8dc5c643-13fd-48f2-b057-8287b934dcdc\n45473cc9-f599-4b2c-9234-26413be47938\n23d1eaf9-1fe0-4d3d-bdf7-b0ab98d31ba2\ndeb859d8-e70e-4046-99cf-83e4b39010a6\nb02455da-f18c-407c-9c7d-7d5b5d8c2ede\n2655a21a-42d8-4c7c-86f6-dc25b5783a1f\ne6bed04e-194f-4ba7-8127-9ca738a85c2c\nadc9ce22-f622-4609-b2ee-45bb7e183cb6\nfcc4b653-f64f-4295-a308-2bb26efab96b\nf93904b2-5c3f-4715-b8c2-3b49bf17c1ae\n68fd1e51-2827-48d7-886a-ec51e2684e34\n3ae20567-c50a-49de-b734-3b7d0b525b89\ne1581b2d-a1dc-47eb-adc9-1656e6669c64\n3960a732-fd15-4c36-978b-58c356ed703e\n91d11564-18ac-4cc0-9e78-e22df874461c\n6cfdea45-3f90-473f-ba54-6ac648900a0f\n12ff0f5d-3eb2-4338-b6a8-f7e675828960\n3eca6e61-3c0c-41ca-8e05-0e9b256e47ef\na15b01d0-6f7c-407f-9e61-5b0250e5420c\n4318cac4-e3ad-4ce3-9e3c-5eb0012882c3\na88452b9-152c-4b14-8f8a-e4f952d541ff\n1c4ca272-87c7-4596-aaf1-b1246d68dc77\nac1910c0-0a7e-4914-a265-c96b41bf30d1\n2a0d83e0-dd1e-4567-93bc-23854e71797d\n43e0a289-ce43-4700-ba2a-00abcb29e4b8\nf0664173-862d-40c3-8098-c55c7ee0b686\n75c3b8b5-af92-4d24-a589-381d81d75351\n75061fa5-7baa-451c-87a8-5d79cb123e95\n175e1a4d-3e7c-4a1f-8e35-2083aafb2586\n8476dce0-0ced-43ad-9fd8-b7528e614041\nebc9c0e4-7d44-4cc4-b82f-917b44b41ef2\n25da66ff-068b-48f5-881f-56e97c565a15\ncacde220-4667-4965-bc9e-29c8d25143a7\need2459a-fe43-4ed1-8d7f-7756c5d2be90\n4dc7395f-e51f-4263-a976-24b9128c2a89\nad614067-e44d-4524-a6ce-cd65bfb7942b\n51083533-be20-4f92-9a9f-4d24d40b7891\nd9888fe1-6bf2-4dff-877b-dab5d08e1188\n2caf7747-313e-40ac-bf1f-4584aa67d275\n7729a465-e7a1-4bbf-b40b-20695adb79b6\n394de6ea-f229-4516-bdb2-8acc17fc7f27\nfbdeb5bc-6127-41a1-9148-0b349f309d79\nd572b7ab-292f-4892-8ca7-424ef758216e\nd853b20c-3dca-47fb-8f85-4f03a1fb2746\n75eb0154-8a8a-4ba5-b98d-aa0230432d05\n2f28a9c4-fe1c-4360-bae2-1bc21ce7fa4d\nab54248c-b34d-4c7a-9efe-e43c9b291dce\n283ebb65-348b-479f-ae0a-83c79d6c88bc\n6f0315ee-735a-4de7-bc97-342cb74a21e9\nf2ac136f-34b9-45bd-bedb-1b0fdc3f9bfa\nb05e9625-d4c9-497a-9d0e-924c91fc3414\n48354dfe-18c4-403b-b139-7532428a4207\n9bdbe2a3-28d2-44eb-bb2a-dd305bf483fb\n3e0d0442-c457-4485-825a-e260261d2e9d\n00cc6289-8930-4488-8265-b9de0c2ecbc9\n1c7061fc-e445-4cf4-947c-f84b1faceb44\n3b14074b-2dd3-4e9d-843a-a78c692e64e3\nd7d89df9-d5de-4f07-a6af-a857bf1c9fae\n0df9b6f2-631f-4ebc-95f9-e2b0fb9d7256\nf716f03c-c0c4-47b7-87ed-72b6df4f6bfd\n1a00d51c-02e6-4a26-b6bd-58078018a09a\n2264ccd9-743e-4d9c-a2b0-1e8133390813\n3141d76b-f383-47aa-8855-a7822bc2ef04\n3fbefb08-098a-4247-9f65-93c0497c047a\nd29275a3-394e-426a-abd8-dd2c9e83cfe7\n188bc86e-1cdb-44e5-bf45-f44b47f9c2be\n353bf47e-8d7f-4451-a72e-9a1c5dd0e4ff\n17a3ccb1-d97f-4108-8785-ba242208880a\n6e9a17fb-ae2b-47b3-adeb-168938e72ad2\nd0849fa7-3bab-465d-9031-982aefc5af24\n35fb8b72-bb80-4754-b051-d3971f4a7e3c\n64434672-03e6-4ab9-92b8-1abfda3b956d\n476a8fa4-43b2-47e8-a703-c4a429134503\n292c596e-b976-4474-b978-f8f6f0e482a1\nfa03195b-2992-4329-a671-0ea57d679294\n66fd7dce-76e8-4a8c-81b9-7f1dd8069293\n10b71d92-156e-45f7-aa66-aa5e006d46a9\n893365ed-257f-43a4-9fa0-f0b89869ee3e\n41b220ee-84a8-4807-8674-f81a65beb247\n2d768d17-6df3-4b3f-9d93-fa410e26ee6f\ne528708a-dab7-4b31-aba6-56eb3391a456\nd86aca30-a906-4209-9c3b-3a668babfd2d\n3b9df2d9-3855-477c-8714-c5e969814c1c\ncabc5b06-f897-4871-8c84-86d034ae386a\nf0da892b-bf4f-4616-b48c-a73538ac9c80\nda4a9293-1c38-41f2-81d5-d91a587cba03\n23c720c0-6c0c-46fc-8b9d-26660a38b143\n73819230-0d75-4a1a-960f-16406aa882d2\n5e425d05-5d7d-4725-9574-4bb5ce483821\n2a511f5e-b50f-4e8f-b65a-58a2ff74a3a2\n1c325deb-4c52-41cd-a5c4-6fce812e38d4\na4f25f1f-9cfc-42df-a0e3-72642ac30669\n13d23417-3155-4873-8cac-5998524815d5\n6bfa77b5-cfbf-4532-9693-d527a86d2b15\n8b0ae7ec-4eb9-4cb5-92d0-959fa0dc71de\nbc8ad7ef-0a71-4d99-96be-3266ec3b121f\n27fcc4b0-6fb7-4c40-83c0-941b41c2c88d\n05b163f3-e95d-4045-b5b2-91567335b510\nea8bc229-28c5-4714-b93b-1ad04c38b1b2\neabd3828-235b-4a66-ade0-5a368e726d0b\n2e174d88-74b7-491e-adce-e09e3265e649\nd9481af5-7bb4-4139-9a5e-9d4a1c60eaa9\na958124c-55df-4cb0-98a1-23f1a3fa742a\n42b9a387-53e5-4a1a-adec-d95a5e145d8d\nf841fb21-eee9-4967-84a3-d2be03dd4615\nb44db517-45ed-4904-a373-d8aafe451214\nf1f6ccde-9e0a-4336-bb49-27d95eb7beb5\n96527c89-c0d3-46b7-995a-b3dbbbe63817\nb3c7447b-ddc8-4f2d-a30e-44dcf848163f\n7bfb0c0d-0c3a-4793-9486-3ef3603bc34e\n3c8104b2-e7cb-4b3a-a14c-ce4934261ec0\n5068c36a-26e1-4795-a08b-ac9709711d67\ncbf0406a-3a5a-4e7b-87c7-6cb0da22e0c0\n6e6d103e-80f9-4d68-8f7e-ccdc22d2f995\n072f5ff1-f37d-4301-ad91-6c02810618af\nd906b5cf-5c48-4ef2-84c7-d319bbfccd6b\nc279f36b-dfd4-4e66-b427-acf612fb003c\n66e56f5a-1b08-4a0f-8393-f24373ab428b\n445e2c40-8c43-46c3-87c0-5d5bf2790153\n3fd9796f-0645-42fd-95a9-75c5f6d525b2\n23d79f43-85ea-4de5-92af-4ad81de8b854\n8109e8b1-2bbc-4532-a624-24985865e175\n0992ef1d-07a0-4fa1-bf2f-6ff98adc7bd6\nc16224cf-2bbe-4310-8af5-3ea3dbe3860a\n3d11882d-5414-44a4-8e74-ccefcfb0bdbd\n3cfb29b2-f52c-40f1-bb9e-423097128cda\nfe0a7311-2c7c-443f-8060-47871d02b7b4\nbfdb6a49-ed6e-40ce-a89b-00300dea5d34\n59e0c592-845c-47f4-aa42-dd4fc2cee7e4\n180ddcc0-d85e-4703-82b6-877019b908c2\n5b30e78e-806c-4573-96fe-256c17d57605\nffe94dd5-e5d1-4d74-a54b-212449d8df93\n498b9839-e671-4bd3-b222-8a3019b828fd\n7ac799d7-6c47-4661-a9b8-cf470ad06e66\n6e1dd35c-8861-46a4-9954-3b25bc99d365\na0ac811b-78ad-46a8-9db1-8f929bae4d16\n69632036-2f75-49ac-990d-1cb3211ebb28\n44e88391-e400-4706-a7a7-963135e7405f\nc9486607-e4d0-41c3-a4a3-60b6800f5cae\n4f69d347-a93a-4d51-bedf-16b4ce1bd7d1\n731cc9bb-cc66-458b-8988-744dcee882e2\n3ef31d22-c206-4958-a168-9a472f6d1b4d\n78766d20-1164-4fc6-874c-5f29c054cb7c\n6847e007-0117-4449-8e2f-acd79ea65c43\na7233666-52bb-42fe-8bfc-b889ef0f8eef\nda97ea63-84c4-40ff-b2d9-5ec40f98cd27\n3eca0b1c-12de-4dd1-a1e0-c5d476de95fb\n1117c163-c6f0-4d65-a119-2cd98ede4120\n4b5c9659-5237-48b0-a71d-72beeaf54bbd\n4aa0c0e1-6e2a-4bc1-b8da-d36d43cddbff\n565f4d10-921e-4cfd-bf03-ccbf259dd1dc\n7dd3d3ae-708e-4372-8a71-aabde773f704\n79e9e532-c128-48d9-aefe-6507969edd7f\nf6d54b1c-fb0e-4fa2-b174-606ac14ef9e7\n09bee545-689e-4822-b6b5-66539871bbcc\n0c1ee938-56c1-43d6-aa50-1d20a052f49a\nda245771-8f47-4e7c-b7ac-c6567ea192fa\n2e6e8e07-d77f-4892-877f-7d524b83a88b\n2d89edfb-6822-4ff8-994c-acb366ea571b\n8176979b-cda5-447c-b834-989ce5d6a1f6\n6a1ec3d4-5407-4793-9498-b7add125b46a\n072ff7c8-0145-47ac-9948-c2b51508d09f\nc991618d-7a5a-4267-8767-8d8cd8658b00\n36ad10ed-53e4-457b-8fbc-a6b3fc75d35c\n880db881-afe5-4c7b-9be3-8e349fb8a1fb\ncf3e6630-3fdf-47b8-825a-9a36998e4224\n23e14ac2-ec77-4c1c-805c-6252edda3028\na591aa96-3dae-4a81-9f87-eccae7d4a724\nea51fe38-3ff3-4e34-a24e-a7a307dd085d\n255e56bc-6b40-44b8-8f54-6b997d1bbc2e\n1ff5e027-fcdb-480b-a013-3d8f2337b99c\n6fb82f0b-01dd-414f-9c8d-4774e4d9d8af\ncd140df7-20c4-4fa9-970a-0e582686e0d5\nbce50375-5928-4387-8d85-b4ab61b0ce6c\ndfe7b5f3-2969-4b14-b7a7-4f4c548209ee\n833c9e9a-dbfe-4b0f-8f81-d0ce4cb09ad3\n65e23595-851e-4fec-818a-9fe9a98c5b22\naba28836-4c9c-4621-b1c6-71d68864724f\n032d7e59-2687-4d14-bbef-4811a0e48c74\n5befe64d-da0d-464a-ab3c-9f4adcd60a4f\nf4786049-a4ed-4167-86f2-65ba649f6b5d\n0d475a1f-ef81-4b85-aa6d-f2f7482e25d1\nd71f5187-927d-4ace-9e1d-02c43b7b3528\n5dfc087b-1a2b-4fe9-ad68-7a612818a723\n763575bd-feb6-4a6a-bbd0-43d5e848ae96\nae65839f-603d-40ac-a36a-067404c348ff\na50ea005-6943-4ae1-8f48-17a348f0fca2\n763c4cb0-da53-4170-be01-e56406ad492b\n714c79bf-e95d-4588-8b79-474d3bcd01c9\naeaf9931-9249-4bb9-b830-563532181da3\n40c3eaff-574b-4792-9c05-489ecd1670d7\n385d5d46-ed67-41b6-98f8-6512a05aeb0b\nd880fab7-fd4a-4985-bdef-8689238bcd43\ndbc20cfe-c5f8-4a4a-bffa-5b43d680cead\n251da26c-76d9-489e-b268-ec128bd207b0\nbcd75178-cbe0-4342-8fb3-a8083d56e062\n0e58fba3-9fb6-419e-9f1b-c4bfa84f567f\n31ae3e66-0895-4515-b747-cdb22bcaddf3\n78079eee-0697-4ac9-abfc-0f89b6b34e06\n21f7dec1-332d-41d3-a095-2a85fc9eb916\n8f7f3ccc-26fd-4fde-8d4f-5ec1d25883fa\n54a4efdc-2b28-44d9-ac35-d3cdc94f0305\n7237370d-ee8c-4635-8379-63e39c91d9da\n6ad8ade2-1854-43d0-91d5-3cefc31d827d\naf3922a9-5ea9-44e4-b3bf-69bd454ebc17\n79796d5d-4a7c-4afb-a2ee-6259e672ead9\nc00bd256-2d9d-462f-a29a-6ae2d12400e6\nf5914032-5829-4b0c-b976-7470a8f60d63\ncb534d4b-1ee0-4ac2-bf2b-f01de7b3d2d5\na466ff8d-e038-4d66-9402-33b273ab5c19\n83b5086f-df03-4867-95c4-5ded2141bc4d\nae96a047-3cfb-4059-8732-0659db8b870c\nd7b658f1-5398-402f-abc4-e216b435cfb4\n0c49b022-1a7a-450f-8a71-22072af0c4cc\n0ea2ecbc-0143-41c0-a6c2-a0ba3d3cdc53\nf8ed068b-6616-4023-bd68-08712a501630\n71f71228-4089-4e76-bb2c-6927f92eb201\n4f195aea-2435-47da-8220-e1f8a9441693\n7bd26c3b-b96a-4216-bcf3-aaa1adbb50a6\n314969af-44e3-4136-9f5b-c74bceb5d850\n9a9c8ef8-1867-4564-a68a-0b469b61e400\na1bcded1-3eeb-4448-8621-7585326c5f56\n4f7b188f-2a1f-479d-b891-0e97c5a70adb\nd8f767c1-e4fb-420f-b965-23cc22795336\ne927a84e-da2d-4e08-97fb-e14427f5b655\nf656f1d9-143c-498f-85e3-f68a798f5336\nea4e6345-d090-48d0-b475-7a6d26bdb2ad\nb7776646-8d5c-458d-bdf5-ecb840e8fa39\ndf6d6b76-f1a5-4bb0-8c50-cd2d85e1ba94\nb76f2cfb-591d-4e3e-a92d-c6cd33960a22\nc385de43-5ac7-4dd1-8951-830030a6f0cc\nb0d1374c-f612-41b5-912f-6ae7c1787a32\n42eb78b8-277f-469a-b012-5639570f1072\ndd4740d9-dcf9-417b-b310-8e9be7e40f86\n5759eb28-9a5f-40b2-b6ab-e71b8c4a2475\n3cf04bba-1ab8-4c7a-bc24-c521f7cb4d36\n05941e69-c573-4fee-8d00-e0a1e6e3780d\n2eb4cabe-2bf7-453d-8ea1-73773c625cca\n383501a5-9d82-431d-ab3e-fdb9878e2995\n70edd854-fb28-45f0-9b74-191c97998cd5\n84cff610-0562-4c00-beeb-cead58457dca\n798b882f-d42e-489b-9461-f69be20e0741\n05d4a936-8e2e-4781-8ed5-68709d1c3bd2\n1626f68d-f56e-4f97-ba20-e2add5f5050e\n1ddc86a6-6916-4d22-b48a-da9aaa8c2c48\na127b310-b9c5-4064-a619-1c7b89813cd6\n74189a76-6880-4241-bd44-81340c4f5d63\n394dc822-710a-4229-9797-52476ea9c4bc\n761bc701-3c03-4e77-9873-a2c4926aa7a2\na82ea7c1-bce9-425b-8aa3-4b2e127ac927\nedab7c38-1b2c-47ce-bd15-52a6b9480429\na2ed9d4b-6c83-4a19-8976-cd2ca1b2f656\na3d491c9-8d44-4053-8170-4f3525ef4588\n12f0bb5e-14ba-49e5-8334-1f914a968bb8\na7db5aca-8e4d-4dc1-8b89-6a66263d9d23\n76b80648-ebfa-43f0-8f1b-81550a113c47\n2cc348c2-a872-48d7-bc7c-619f57cb58be\nb46f7b3e-9676-4b5c-af87-3d461f71a6c9\nacd1d929-8341-4619-8885-59ac3b16a04a\ne0a2382a-b0d5-4a88-a5d2-35e48cef58c3\n2fed5331-919f-4b27-87ca-c907f8767623\n471ed458-f404-4bf0-b718-0f79935cd7a1\nd936f153-1ff6-4efc-907a-aa45532beb84\n2e6b14fa-0788-407a-a998-05da65b82c8e\n060b580c-8cda-4342-864b-a75ec38e1e1c\n5b14a2ef-0cb7-4c8c-a2ef-7269da9e474c\n3f05bcd2-074f-4f6b-8375-2053dd879c27\n17cbd365-ab5f-4050-ac92-722f0b9afd4e\n7ad9c817-ba29-4c5d-893a-7ae4a7c9aaad\nb7cb8de7-7d3a-4660-b6aa-0b4618342c40\nc3e148ac-c981-4653-84ea-73baaabde840\n64622590-32a7-4dff-a4d1-08acaa79708a\nbc30c05e-5427-459e-bc03-55d4065b913d\n8d0e4709-b3e0-4962-8bbb-a31998484038\nb1d764d5-3fce-4971-8c15-d8f9385bf1cc\n20b93c28-df81-4db3-b063-b8b9dda27c28\n1243a2d5-7041-432a-a776-88339bf573fb\n2e475b2a-2ab6-4d96-b6ef-8520da53e93b\n3f86fdc8-791f-450d-8260-ff2b852a613a\nc3e8c1ff-e11a-45d4-8afa-59acfb11c564\nee73c307-8e1e-4685-aaef-fb0cc605a8c0\n8cd9af88-29f5-4242-bfe0-028e3f6a78b1\n9d2beceb-89fd-4198-ad68-ba6e1bfc81d9\n47eaa5f2-c9f2-4b74-9857-8acf19ec98d8\n232044a6-3ce5-4b8f-9243-61097c8e11fa\na4cb8eac-df62-47cf-b9e7-4f31bc67d480\nd2e45a46-a4d3-4d44-b25e-d180ee8e40da\n6889d703-ccc5-4750-925c-73cd4c620ae0\n77dd2e17-93f0-4d35-a5d7-3e6f972035f4\n73086a16-2ccc-4b4e-9fbd-8c4e6bd5c115\n96d60fb3-f0f5-4132-969d-1e57b1fe4473\nc702af28-0d8e-4dd3-b8cc-8ceee144bb5f\n8746d85e-5125-443c-a888-d163177a8151\n161a5f8e-20b6-40b0-92f9-f34ed14e8fd3\na55e051a-56ec-48f2-bd47-3f9d7ea5f1c6\nc00f3015-6f6e-4ba1-9c0b-a4f03b755fd5\nd09621cc-9fc0-47ce-9cb7-66f79467633e\n7a5be082-204d-469b-9fae-24f6e6c2e3b7\nfe422458-5b0b-4566-a1d4-d5bc9b0f5ee9\nadb93811-2386-4232-bcf3-a029b49f2bfe\nc6e56d7a-cffa-48ea-9c81-46f0dbd3ee10\nf8c9ad31-b73e-49a4-acd4-af9db0faa6c6\n7d984e8a-e72b-4bf7-8554-86c08bf9c47e\nc54a594a-0319-4e11-a8b2-6383995b272b\na2c35b26-8ee3-4b24-9f0d-ef87a5766737\n88679e21-4e4a-4e46-8d8f-2fc5767bc19f\nff2387cc-3b7f-4f9e-b3ab-fafc36f344a7\nc0b750fe-d396-419b-82ae-87b39ff90bcd\n221e3f45-56fb-48b0-b90a-c487ffcd5b50\n690689aa-0fd0-472b-a566-3a877f4e8cb9\n8001495a-200a-4d7d-ac02-3acf8577c119\n85948e14-b500-4bc7-987f-e992d2a2d3e3\n7451820d-88f4-4f37-85b6-74e9b37f5063\n5cfd8a75-18c3-4003-aa76-280dc8fcf18b\n94f0bc9a-820c-48a5-849d-b152a1af2a72\n0ece09cb-f595-4063-b47a-f5e90ea49dd8\ne0a4c764-8560-4384-9ae6-7a7d5cab0a30\n02bf50d6-cdf3-4df8-82c2-26a374412149\nca99996a-7690-4dbe-bd61-0bfb8728cd18\n1518792b-a23e-4ab0-82e5-ab091febe14e\n005764de-d8a6-4c25-b9d7-f8d8f760b96e\n1567b66b-febe-4f03-b559-6b956fc39d02\nd35ed62f-6e20-48bb-be34-f77fb800ba0d\n9a00827a-7c91-4dcd-ba5c-a2c75a483fed\nc8dd6671-5e71-46eb-bd53-279eb1ded119\nb049f140-940b-4662-961e-6b6f946e9bfb\n55b53eef-39f9-472a-bb3d-da16a1368b26\nd204f342-9606-4a6b-9459-d094d2dc64b6\n4cbdd513-3bd0-401d-b36d-c3c9378e218a\n1a26e0eb-0492-4abe-87be-dfef269ec985\n7d25fd80-47ff-4c7a-ba5a-c81c74360c67\nfb141a11-64d0-4473-9872-a772aef946a7\n735de4be-e64e-4b0d-9247-481e6dd95dbd\n96aeaa34-682a-4da2-9096-bbb38f974af5\n3390900d-2db5-417b-b070-bda65b167334\nb9356972-671f-4263-94d6-0ea943f1ef94\nd65de764-004a-4f7e-b53d-30d1452b04d1\ndc927c3e-d755-4e51-a34a-df82b09df0ac\n97203ee4-42e3-4c69-a70e-39c04fd8948b\n26430801-8d93-4c81-8c7d-5c70f6efb541\nbaf38326-045f-4b34-a553-401134dd33c7\n848ab0c8-347e-4ad2-886b-ab46ed72cdfc\n7a160a63-ff9c-4b39-a935-d78bde766e2e\n39581622-3acf-4270-9bdd-635f44a9d438\n34d4730d-6920-479a-a782-af546e8b1566\nb207273e-3626-4350-a1ef-636154940260\na51cd1ea-07fb-45eb-997d-c9f606e84949\ne694e97f-eb29-40ba-9135-f3ba3661a780\n14c8f1e3-c316-4c74-b735-bdd696541c90\n43987666-d76e-4d0e-a20a-2f3615570612\nea86377d-4d51-44b7-9f9a-8293d0c04656\n9fcd0f18-d56f-4a55-850c-18111aa10e84\n4c8f3c7e-73cb-4364-b98f-7578f4d459f4\n16f44259-4a2e-4541-99ed-32d8291caccf\ne0695708-0d81-40e9-9e87-696ac135312a\nedc6ee2c-216e-43ab-a231-7d3ff73d9f00\n583e4c4b-c1ff-403a-8aef-c809a891dbcd\n63f18b8b-fdbe-48bb-afb6-3d8d579f0e81\n8ca62fad-0018-46b4-bb2b-e7d91f8825cd\nca2f6b7e-04a4-494e-bad9-67622b6e4301\n432b8649-7ede-48d2-a599-8c017f678aa1\ne7b9e03f-098d-434b-8186-9365a0528043\na679af07-9550-4607-9c4a-255680b156be\n7fc6b78a-cd0e-4855-b92c-512582e706ed\n24497d5c-6e55-447f-a8ec-5a856d74ccfb\nf2d63aa7-d21a-46c8-a803-c8d3d4d0d365\n5ca63ff1-57ef-46fc-bacc-d89e38a72a1c\n21b49685-e3cb-4c46-a9d2-dc31e0fa5253\n8e31e7b7-de07-400d-ad41-e233e4dfeffc\n3a7e4ae7-2042-4580-b6d3-57beffc303e6\n0f6a13d1-049a-4a5f-aeb8-cae364cd2c5b\n0bc68f90-f38c-423c-bc60-ac277f5594c0\n4eb27dac-9ba2-4147-9c5d-8f7a0f7d791f\n91ebaa36-8578-4e5e-8e03-b99aa8ca5afb\n2808f54c-87c4-477d-bd21-0a1f13cf6da4\n362efacf-0a17-4f1b-af96-43a7bc4b25bf\n1b1ad852-a650-4c0b-8286-7194423cb441\nf4988894-762f-4747-80e2-e5a7fa1e41b3\ne1559660-ba88-427e-8635-12f0f5244fba\nc23b6994-e441-4616-beba-5b3a413c5fae\n85e9f00d-f97c-400f-912e-3fe440e0df8f\n24040235-aad1-4252-9695-6c84e71732d2\nf55be97f-98e5-4b0c-bf83-1446cae90639\nde2be1e0-f2fb-4a39-a30a-8fa73471efac\nd880679c-bb49-489c-8ad6-254b0ad0bf64\n66ba27ce-7f89-4066-9e42-b5c38c03422f\na65fc920-afec-4f4d-87b1-76dab429b232\n59a9cd37-1286-4ff8-a12f-ccc71bc4a68e\n2457f9be-7e78-4070-9e3a-def7aa0c03bc\n00f78958-5af7-4d85-bbdc-885d49c3f09c\n5ad9f03f-debf-454d-95db-14a15a3caa4e\n5be94ea3-81c7-444d-b871-20569071e4a0\n4b45944f-41f7-42a2-b399-512d6d62a1c3\n1f789eed-0bf0-4401-9677-94e469fe9b8a\n38f03456-382b-43b2-9783-a015f005f6e9\nfb8807eb-2d34-44ed-8757-242e5f0a58fb\n51a75bd5-36fc-436c-b95b-7742ea5adde1\n6ab5e418-3b0f-421a-aea2-81c68758fb22\n732b75da-30f9-4a3e-8276-449ea0838687\n5aeaf5a9-9362-4a70-a75c-544f48dad6b5\n36dc1ddd-3f55-4254-9403-c05125884d72\n34fabe9a-fb0e-49af-8971-7fb99f3b1c25\n1d4f2148-f05b-476e-8c5f-b1a9e6854938\ncf24c49c-1883-4e5b-8d51-6edee058999c\n58c15cda-4f3c-485e-973c-8ba2e769bb3d\ndca12641-92da-44db-86a6-e48aba2cc7e2\ne8235baf-abd8-4cc1-8f0c-55242034cef1\n458d01ee-4284-4a6f-9aaa-1daa560468f4\n0d08613c-1c62-4ebf-a917-d9864773177e\nd082833c-a60d-42bc-bbd6-6803137be19e\nddf566e3-b513-4011-8415-740e381c4d93\nefea927a-1586-47eb-a169-6ec2552f7641\n792c6d52-8a8e-43e0-b607-6c91ef610493\n53a2bf60-df9e-4ec7-aa97-2199cfed217b\nf831432f-05d1-46c4-b329-e9558625b34d\n4b760f1a-dd57-4c16-a9eb-07e6cfb8f41a\n1f2f36ae-868e-49f3-8f37-f72a5fd959ad\ndde5f230-4618-4d55-b189-2500acac3211\nb653b149-e483-4fce-9595-79f41be385a5\n94359512-9ec5-4c69-942d-c3fe64ac7e17\n4e893449-d1cd-4180-87c2-5492186aa1af\n0e633f3b-5499-4265-a382-459767ba285d\nb78cbd93-8f08-4c11-9d74-1cee77c97af6\n40f860d9-4743-478d-85e3-98e73126126f\nd318bbf2-0a6e-4ac4-a817-ab39fb858248\n8df383d0-2b4b-44ce-b48c-27c859fc5a10\n9c652212-b717-4ee6-bdc2-d895052a45aa\n8396e978-f225-48b4-9bc8-65d570cd50ee\nd318e158-c7f5-45ce-82b5-88d17521ec3c\n532c83e1-8ca2-4a95-acc6-ceb5c2edaf2e\nac9f8793-58f3-4ca0-8420-e5f9aa4f8118\n098660c9-1c60-41aa-8ecf-f5441d918648\n02ca1aa4-ce8d-40d8-be76-6bcb8b4d3dd2\ncbfd10a6-272b-4324-bd33-53d6fdb52355\n735998e5-fd27-43fd-b317-9aa90eac6df9\n827e91bc-1979-409d-a18c-80dfe80614d4\n4f83f097-af5f-4c53-b8eb-841bd3d1aa2b\nc795af3a-8c45-480b-a76f-b2ab9990a270\nf93a49d5-08fe-4e92-98d1-03467be52bc8\n0f88202f-ee1b-40bd-a4af-de7bfa0cacc6\n2354bdfe-2dc0-4497-83a9-5df01f052976\nf9485346-c2a7-4d50-adde-7727b5c9eb8c\nb00f7fa5-c7bb-483b-aa40-dcad97bc7024\n09f495e6-7e93-48f8-9ec1-953d927ef9af\na24638c7-4eb9-4b42-b732-c9dffc6178cc\n4d2744fe-b1d6-4f79-aa2d-cb96f5605067\n0cbedb50-643c-42a1-b6ee-dab06c71b714\nd21d305f-2cb5-4f31-b61b-a22cf9e1df55\n4ee36d64-77e3-4825-90d7-02747bb438c4\nf7c0cc37-f82d-434e-b138-0562c4ca3d6e\nb25cc450-d04f-4657-a9d6-91797121ffe1\neb214220-234e-4686-b604-d66262c57219\naf3b70cb-ceca-4b12-a741-d70aff040d48\ncd7b363d-a36c-4003-9a70-01e42e289dd7\ncd352839-9632-4804-b94e-f0727ff0fe08\n50ada192-d513-463c-9c1c-d2c1aa364dbe\n28c0da28-a5a2-498f-ba3b-6729d4030fd8\ne3aaa508-090f-415e-82db-3be79a4baf71\n027e0e06-f416-4fc2-8cb5-8055d3bfb249\nb8e31404-e832-4dde-b2cc-747326e1d63a\n2287190f-e3f5-4199-b77a-91573203ea19\n12e464fd-3573-4e73-b713-790dd05c80db\na357e4d9-0f55-42b0-ba60-daabc75ba572\n082ce70c-3280-4367-8672-4213da11a16b\n736a79a1-f8f1-4d75-abc4-093017fb8ca0\n00e11523-d075-43dc-b0ac-a01061e3634a\n0d5b886c-82f1-4ea5-895b-23d48a123708\n1a191e96-c738-4bb2-bbc5-01f06eb6a2e4\nd0db91d6-0ccc-400f-9c0b-e14897d0cb34\n137b0c36-10b8-478e-9240-8f9dec9eb841\ndae4f54c-7468-4143-976f-f3213cddcf46\n1deeaf12-0b07-4d06-9407-21e4b85d13ed\n66e43596-faad-40a3-b53b-987b69c6f810\nb9daa8f6-b1bf-4e3b-806d-16ce517c96e1\n5efe2071-7e25-4c1d-8daa-b5170ff100a1\na746c7b5-fc28-4308-a17d-9838e6487b14\ne366467e-6a12-42a9-8746-835a2a70932b\n8025e434-5fce-40d3-9891-600b4b0112af\n8414f92a-6810-4b1c-8813-f8c53767f584\n7822760f-5ecd-4b0c-aad2-4a5945f63084\n1acdf1ed-9cce-45d1-888b-7eaf35471eeb\nc18576a3-5e0e-4c26-a04d-2a174d40d1d6\n36d2610a-1359-437e-a6ce-50496eac8fc6\nd5408212-065f-4352-a787-4d953273917e\nbb7498c4-80ef-4930-9977-44de8e4e1129\nc2385a9e-5ac3-4f17-8cf8-712771f54421\n274de133-7eee-4484-819e-635956418458\n4252d7a7-f944-4d7e-b5b8-010500e18e28\nc141a71d-5bce-4190-81aa-1402eca6cdc0\nf1af70e8-3888-4585-ac89-a997d1a6f79e\n501f06ff-ef8b-477e-ab83-0d53612a6caf\ne4d8d2c5-3244-4b0e-8b49-ea24a6a219b2\nfb9e16c3-84c7-41e1-893e-c72cd71c2682\nf6878453-0987-4a85-9cdc-5c5f22b920d2\n3be1505d-7b17-4b02-9c8a-27e3e60666d9\ne775bad3-7510-424a-8a7b-973bd48f7061\na25e368b-7360-4170-8ab4-af8a2b80e3cc\n214e7c9b-9334-453c-a6ce-95b020b3716c\nd2b79c4f-3983-4ab2-bbce-8a823817e3df\n685280b2-35f1-463a-bfd9-5de96e4dd67a\nd6b8abdb-498f-4d07-9d5c-2aab92dcc09c\n3ee89e38-c014-4eb6-a430-fb14a36f34df\n3620783c-ae31-4b66-82a1-42a3104d5947\n8016fede-5cda-4f45-83e4-56a37c53daa4\n0a728ba2-55d4-4324-98d2-ad3aaf4dfcb9\n56add98e-3cf5-4048-9522-b7b38870bbdc\n704ed96f-e306-4348-b5c0-5c9f7638aee1\n01eda77c-e137-4328-abd9-9e2823c4dd44\ned43edad-1844-416e-ace5-79a3ef039950\n046b5c2a-7f9c-415a-81f1-10974b7f47b5\nf8581113-3684-4868-9635-7cf7aafa170c\nc613cbde-f768-407a-adcf-73c804691343\n17e319d5-4449-4109-9e1b-10b08296e07d\nd79cb12e-68d2-43c2-b3ce-4573a1f08581\nf2d77cc9-e0e3-4ad0-b952-f49880ddfba3\n2f623f4e-9cd6-4f75-947c-c79ec4f1e4d4\n18915feb-898a-4aca-adc3-8d83e80d4bb7\n4cbb73be-a8df-4490-b1f9-43be76fa39d1\ne01cbd14-0406-4eff-bf75-43c9924534ec\na7e4bc53-a66b-421c-949b-3c7c0cb0f6c2\n728f47fa-00c7-49f9-8548-25062e92bb9f\nd3ef8e4e-c175-4d03-8cf3-c5ce150cf04f\n72a2b35a-62dc-40f9-ac3f-f8f667d6cce5\n6a25de87-d035-4b66-a36a-eee068d776b2\n27af3743-f4ba-42e3-a24d-856ea4655f61\n6f4b4dfe-2a7a-4f0d-baeb-bae7a12c085b\n73c12dd1-af44-4f1c-ba31-d4554ce60108\n07da4842-037e-4396-9412-67076e4b2b05\nd6a26ee7-26e1-4c67-a296-2b169ee70dbd\n78f27c38-2231-4dd7-92d1-82d0fd9e23be\n04549a9a-344b-457a-8559-855a50435ead\nc02ff62f-eff4-46cd-b26b-8fdcce47eecc\n2590dd3c-4821-4530-add4-d5b805a650ca\n477a26b0-04e5-48db-92f6-0d8ea90a1a5b\nbd502131-55b4-4f46-b2aa-0473c7c96437\n191ce61d-25a9-4107-bef6-8f5359967f75\n0790aea5-b4ab-4ca5-9e1a-b5bd0341eff2\n524f4c99-b157-4404-a93f-45cab5031c49\n45e122ac-7e15-4c94-9e56-e05dc870be6f\n89207933-b552-416e-b3d1-10286c16198c\n642b54d4-9dab-41fd-95ce-49a14d1bed4d\nfb799031-f4f7-4ef7-87ea-ca8049aa42d4\nf1b0bbeb-62c1-4f9a-9649-29f8cb43c39a\n8ad3cd51-d0f9-4b98-80de-a6d4f0d3a294\n9d61b3c8-845d-45ea-888a-1d3aae3cbfad\n12ccd425-b9e6-49f1-bc91-79afd29f9971\nf4ce2f92-1286-46e2-95ef-a95da56ab76f\n62188708-2e27-44d3-9585-8a4ab9cab56d\na3f58cf1-c0c2-4b4c-a23d-28e8773b6e2e\n7eff3b49-4cf3-4f9d-a8c7-1daaf316fd15\nc64fe251-4c96-4f46-915e-f192264988a3\ne11d496f-2d28-4e44-8cdf-de4517a2f701\n0dc01337-11c4-49e1-abd9-22627353eb76\n530545bf-ce5c-4a7c-95b0-4b5110ef4602\n0e0c79e3-4561-471b-9dec-d7ea491e3348\nce033446-78ae-48da-8e41-e7de9be38a6b\n3d533530-e59e-451c-ab14-bf76a4e97da7\n7714c2d1-296c-4c94-8dd7-28bf1f7f0832\n5d25cfc5-8c97-45ef-9626-b38491fbb2d4\n60818711-3bc4-401b-b600-b1d7a610aedc\n233e2848-28fa-4894-a378-f931ad9dd746\n5b1bb442-19dd-4bfe-b99b-5272c6ba7316\n2bd8613e-c1f0-4c33-ab19-aa297296518f\n76512fea-34a0-48f1-9580-be3f35060a61\n6309bbcd-68b9-4996-9416-b387516f4eb4\n2bb1f8f2-55b1-43db-b9ee-49c7a798d75a\n16776bcd-90cc-4004-b96a-c239f1ebd882\n9bf494c9-b690-49c5-87a5-36a11060d636\n79588cee-d645-45be-8eff-9a25ed83a678\n53ebcd03-2169-4787-8f32-b2c1ee05fc01\n828e3706-fcf1-4b9d-a0b8-ef392dddf1a3\ne9d04478-ccab-4ee0-ad1d-8cb219bfe4b8\n1a5a0361-357d-4d5d-8659-db0fc8ae692f\nab86a546-9a0d-4d16-9f1e-cd527b762aec\n8a046243-f300-43de-a431-e5b13f6fcb44\ncda45820-4b5a-4e71-abb1-ef6e12f095cd\nc8d37934-3f8a-4a34-a99e-1eb9a797f79b\n562bb48d-5cc0-4b7c-afda-86c5d6cfe198\n32336dab-a6e0-47ef-864b-29c7d647985b\n7b913fb3-4eea-4a43-9e9e-6c1efa97cfdb\nd55094eb-3b9e-4d32-967e-42becb35bb83\ndca1f364-a3b0-4fc7-9db9-c5e6a287ed07\na259b20e-0c4d-4f45-a90e-cb4c20cdc76a\n8c2d6530-6dac-4025-a3da-c5f73829763b\n5f626854-2a08-45fa-8b6e-da27bfc52e9e\nc52a1974-bff1-4378-b499-e9fe7091d421\n0fe4d422-57ee-4689-8435-8616c04e6aaa\n98e21536-9ae0-4352-8110-fcc4217f3bd0\nd83d6185-cff3-434a-ae8c-2f1cea5bc54b\n43c565af-d8cc-4cc0-a5dd-addc5cc1c471\n9c1ffdaf-e5ef-4c30-94af-5e1467315020\nfcbcdb50-d26c-4771-8d3f-a2dc0fcc781a\ncde4e7de-6229-4180-b7f8-ffbe1a954465\n0cdf9a3d-e8a0-496f-9cf9-4302421dc170\n087684db-5616-4582-87b7-48c24636c5fd\n2ee74383-6272-40bc-ae49-3977c278eda3\n123338ef-f83d-4f24-9ef0-f2ab0f352fba\n71f8baf3-371c-4ea7-8938-72cb840c151c\n40ba0fec-b12c-4e52-8bb6-93d636ff3fec\nd0a8893a-0572-4caa-92e5-a633033d5521\nf6514c14-1a48-44aa-aace-2c05acb5d831\n6e561e6e-1018-41f8-bfc0-7cfe6efd0d11\n5b567173-0f9c-486f-91ea-ab52b17d123a\n2c6c7eb4-3b66-4512-bc34-563a25780c9a\n116b302f-eb5f-4262-979a-88f7947344e8\n24ee2be2-b955-4904-baf5-ac277e4138fa\nd516a19d-abc1-4321-b3d0-bf41f98ba9e7\n8d164b8f-aeea-4090-9421-6f811d95250e\ncc9d0836-6a6a-4020-93a6-82a87ecce892\ncc0e4fb5-c299-4376-822f-d14788157f80\n813fdf54-7460-47f8-abbc-df46f33e39f7\n03d46336-a5fe-4778-b5b8-63127baaa8e8\n2ef68e44-4b1e-44a0-8689-a1bb722cd856\na05c50e6-24f3-405f-8be9-84983cac61dc\n976f22ab-d239-46e2-8fe2-467903b0a23e\neaf2b7bd-1707-4c97-ada2-cd56115176d9\n29156da9-5859-4c27-a6a0-65ae13475bf9\nd7a6c002-bba0-40d7-9e26-d4be9460c3af\nc2c697c7-7353-4d93-b3e4-546193ea6f63\n7330c641-083b-419b-83a1-02d8cf1b7010\nbf4bedbf-5911-4efa-ae38-5c4011c6a856\nd8adf88d-a6c3-4c9b-a88f-4c8b6bf94373\nba42ecbf-b4cd-4cac-94ce-b70c6adb0a47\n0ae8cb91-3108-4464-86f5-3e19bbcf9691\n09a59ca6-94bb-4849-a0f7-f6e6c7e019c7\n86666c09-374b-4f94-a08c-1df70b35751e\n6d26dd0f-05f7-42d5-8c85-2f48bcc251c6\n1bf24356-6f2a-4e64-8308-3f3d3b948393\n0fb4e04e-37dd-4208-8ae2-ff129c315620\ne17e3c19-7a75-4ae7-8b47-cecb1ea77475\n3ceff127-fef6-416e-bd3c-c5430b6cf23e\ncf46ec8b-4b8f-4cda-be7e-8ddcd0f15d61\ne717db1e-1f45-4158-99fd-6f9610324c90\nbbd20619-4f22-478b-8611-36bcbf9b865e\n37b7a6a7-13c6-4954-a9af-0ec5130d7e21\nadec02f5-0ef0-4b4f-9424-c1f3701420dd\n14509454-8417-4246-92ce-14c92514597c\n0b607eaf-faec-4640-8e7e-ff0b2c7ea63a\nb1eb40cc-dfa9-4efe-8d27-24a0f0e56c78\n0a7fc705-7974-4e74-bc7a-e77ef9abcd15\n8ec0237f-f281-4316-9ccd-c7a97b129018\n137123c2-6852-4fd8-aeeb-bb6bd6d27c56\n6e1b9062-f71a-4771-bb26-f446b00d3ac3\n5359306a-87ee-4c22-bc8c-7e57954e14ae\n9b9d8a9a-4000-4216-a982-89a958ddce3f\nf153ab58-1524-478b-bfbb-eae6945bc9b2\n78a6c877-00f8-4e96-b850-22a90374f6b1\n00336a72-c039-4c27-a7bb-45ac49f1453a\n6755d5e1-75d1-44f2-b9a3-7ecf75c3cd41\nb74bef6c-9f03-461a-a0c4-d63c476838e9\n95309a85-1e80-44ad-98c6-155a904b3ad6\n4c1e3a5a-28ca-46aa-9b54-4fa932945144\n21fc9ba3-038f-4006-b601-4841296836ac\n8cb20b2c-6eb9-4271-a921-ae126442fa85\n34d9c5ca-5027-45b7-919b-41c1684a4aa2\nc363c329-fbdb-425b-bee3-cf24eaec4910\nd143f0e4-0233-4ab2-b9ca-5d14e6f51a33\nf368ad36-0e49-4941-89e7-fec252f4fb28\n51dc1ea3-a30b-417e-bdd3-7b768d524735\nebaf04a1-5ec1-4ddc-8908-8f4931a51af7\nee6b1ea1-29ee-4e3d-afc8-5200600442eb\n08697c02-807f-4611-8ad1-e4142d175cf6\n6b999d82-2fde-46eb-a482-25c51584f0d5\n35fea379-504a-4dc7-b64d-b3fcde11a414\n4ba04eaa-ddf2-4c7a-992b-24c062acac30\n5e185e2b-25c6-46a6-80ef-9ecb2aff4a98\nf9ef251a-2cba-4bfc-903b-89996b2940bd\n3b731277-5b10-43f1-b463-7b617b7f995b\n092e2d8e-4f5e-4771-b2c9-0623e590faf2\n39c07bfc-5ac3-4659-befb-a0de040e30b1\na1f26f2b-0d91-42e8-bbe7-e7e038cbae9c\n8688262b-39c3-4a42-a22e-81d5468f79af\n9a6192f1-7512-4bca-b914-724d8eee9db0\nc4f1b8f3-c850-47e3-9b85-dcedc29fd550\nbade214f-0647-4eee-9d91-37fbfe083466\n5c8250f5-b14b-4285-8114-09c9efea3ce3\nd9e0ff4f-6751-4091-86a9-064d318e3564\na1bfe0f4-d5e8-444f-972a-90958c2699e0\nd49df04d-1d73-41f4-b2fb-a687f84ac366\ncc05de31-c41b-486f-b8c8-1be30845ed8e\ndde5b0f5-8ddf-4085-b534-ae58dce0278b\nc000a9a1-e917-4f67-980e-7f0526f8dea7\n816198a0-0818-438e-9ed7-99383d231aa5\nebe79d30-63be-4be8-9539-1d09c57b019d\n3a5f0469-6f63-4d9c-9199-45be28f0bc88\n227b233d-0142-493e-9bd6-9c21d4784f74\n1a08e4f6-265c-4b10-9416-3e4a8e10eb6c\na216b50e-0451-4e38-a567-10750c162e8a\ne9f6e441-d8f0-4c83-9105-d1b3078f4eec\n380eb2a8-4d38-438d-91dc-2d22a11cdf24\nd99fe6d3-332b-4cbe-9a8e-b1ac756a4d88\nbb90023e-2151-44e2-81ab-a24fcf0d3fd2\n809c8f0d-4db1-4261-83e8-799970d2bb72\nef09c718-1c7b-400e-9a79-10d1e69e6fa8\n63ce01a5-3e32-42ab-95e9-c8c4cce6f144\n5f56aebc-3349-44a9-928f-62e6257810e6\n6adb2e9c-a31e-484e-8d97-b4d5c903f46b\n6a1f0644-8550-4baf-9a2e-16edb79a8a1d\ncc6f3186-8fe8-48ed-b5d7-8a371185c7e8\n7fd7b697-7962-4d38-bd47-c17113b00fd4\n798edf49-705e-4d1f-97d8-c919f5de0cc4\n8aaef63c-9d16-431f-a257-0e9f92cf9796\n72a6f7da-987c-42fa-8fc8-c4e4488ef229\n458ff6c8-1fe3-47c8-bc9f-ca906b49547a\n8b26c64e-8378-42d4-8cd4-37f7bb3dbc7c\n4c954ff0-c7d2-4504-ab57-52966021cbe8\n5e2055a2-375f-4e56-bf3e-c0db142d7c10\n382063c2-c236-461c-9229-ba356f759e93\n63b88c4b-6ac9-483d-8204-6d2f4d8e8eca\n788882c6-05fb-4573-83ae-e00ffb97dd2a\n50b464ce-6600-4098-b451-b0a387332041\nbe996b5e-991c-4cc6-a892-79ecdd9be025\nabb037eb-6c4c-484d-a733-c089042f1ba5\nbd61eac9-c7e9-4a1f-8354-03efff3c6b07\nfc79d261-aac7-4e85-bd40-5287104ffc59\nf34cb58f-d093-4418-9450-be86d5a2a4be\n61d9fd2f-defe-4637-9bc7-14682f58c46d\n8105bb09-7cf6-4d1e-b17f-f06afbeb9fc5\nd812cf01-1990-40b1-8bec-e8276a24393a\nb587b99b-998a-4e8e-8c33-94d94691a18e\n7693d4a0-9576-497d-bffb-1d521a84e4f0\nc5538547-58a5-4d5b-b021-03d499401c26\n4903fde3-7317-4d83-b597-570d45432683\nbb29bcd0-cb0f-49ce-8c1b-fdce0fe80af1\n4c4df6bb-ee49-4cf5-be85-6cc187cfa8f3\n555f7822-aa26-4865-b32f-26d29c5b1791\n0bbeb822-3e8f-48dc-bb76-477411c697a0\n3a19e8a0-3d85-4f10-98f4-cafa9952cae9\n0943e40d-4ed4-48e5-8cea-147009d95b33\nc7e9a403-dc97-4302-b02a-0ef0866890ef\n3b52e517-407c-486b-833b-a63fc82d4147\nc9803a28-fa1b-4704-8500-651dea160774\nf1e3708a-deb5-4a71-977c-91716ca94030\n1ac390e5-38cf-40d0-b3ff-e3a4c837b838\na5273596-459a-485a-bfe1-d5fed0885e0c\ncf57125e-5687-4298-aeab-d8f4ad657c51\na3e05688-07eb-47ab-9858-28de3c3cf68c\nd560238b-2343-4c32-9e3a-f79141b4e6ce\n4f51aeaf-2692-4e6d-85a6-c9109eabfd96\nf9b61d07-0f54-4f6b-a82f-711b1703557d\n54db3d72-795c-4ec7-ab07-d780cc53af7c\nfaedcf29-4851-4654-98c7-ecb2b0c24b5c\n16a6fa25-d262-471e-81c3-fd2344ff1278\n150a4412-6b88-4471-acf4-af89fd4a9f85\n72fce277-2083-4d31-8e67-be5c596faba3\nac5ba553-303b-4d5c-a848-dcb52f1d63b2\n5d914373-e3cb-4734-aa70-61ddbd3d70f9\nbc51c13e-eabd-455c-9b3a-40d50bd812b9\n87c8f8d8-6e23-438b-b023-f36e43075cd9\n0fbfd808-d22c-46ce-b49e-94aab3958138\n1af581f7-5733-45af-8cb9-8f89b3309d76\nc2a138c0-65b2-4981-9c40-061649369154\n2bb116c1-db35-4bbd-a353-4a13bdc5ed32\nbab9fb84-e00c-42b5-8162-d7a32710ca24\n5d59150f-ae90-454d-8aa4-3462dba132ba\nfe182eed-f185-4d17-8e0d-044931096328\n919c4001-5232-410f-a67f-c052100deac6\n503d11cc-876a-45e5-9709-96902c7ee85f\nbeb03ee8-ea7d-420d-bb8d-68b071d5484f\n43babcbb-6374-4e3c-b6b6-96caf6bb4635\n0e18eba5-7036-4b56-8595-14fdf89366cd\n4174708c-fbf6-4989-90cf-d39ef7ea9d7e\nf171bc65-d2a4-4967-8822-ac76a77ce82e\n7295fd5e-a259-4a04-8497-97bf4c07ec39\naeaf33dd-60ef-402a-9993-2b9468f28b82\n1da4d889-e0a8-42bd-9da5-1044c17c12c0\nf38fb996-4667-4100-97bb-442944202538\na015b2c3-9383-4bf1-812b-22a5deb09f59\n2e093805-24ae-4401-99ce-56eec1523e28\n73e62c25-b187-436a-a84b-6e71b383fffd\na15aad34-5648-4108-95d6-c41262a0a3a2\n9d451ddc-f514-4593-b170-6d0c8994d56d\n3f4f6528-adb6-4cab-99b2-41985b4dc241\n7e129392-b035-40fb-8f64-58c70271437a\n6570cbdd-e5ce-4df5-bc86-c134dd3a0b4e\nc2e82f84-67a0-4ac8-9375-17ad3d6c0a38\n07acab18-6870-439b-95c6-0cf4641cf2a6\n9ff355a2-5cb7-44e2-97d3-260944f13926\nfc24344e-10ea-4af8-b12d-c463cae2d446\n1acbdaf7-9315-43ee-a2d8-34fc22cf4b06\n1e7c36d4-5d3e-4190-aae6-fa6d67a4c831\nf75a8327-4ccd-49f7-b792-ef2bbd7e290b\nb525e27a-1525-4e09-8d2c-8dac5b0ce951\n3454c9d1-86bd-4b1d-aabd-b024b8b2ece8\nf6ef9f92-6b7d-4b0a-b4f2-2ae6610c3307\n40e6db27-7b9a-4a4e-a18f-bccc1f787f11\n5c278542-4252-4af1-84fa-47d76ad9b729\n392e989f-3d48-49af-8a42-58e4761e3138\n39a19f44-8b21-48fb-8b38-384a4fa95893\n85d0ac2c-73a7-4a90-88f6-63651997c8eb\n676cf054-ab2c-4b3c-ab1b-0219db37a2f6\n06044e69-cbac-4fe9-b352-718e1aeebd80\nd20797db-b877-4927-8592-c79e3128d448\n56b3c20c-81f9-4bbb-9bea-1c9e1734e9f6\n5ef28f4f-5961-4190-bb4f-542fe7d23f70\nc5fb5d92-979b-4298-ae8e-e57cc52a0fa7\nc1dcef0b-5013-4811-bdb2-f9613f1050e5\nefa44fec-488c-4c3a-bebe-6c26b19658fe\n5b47c55e-a84b-4207-850a-489c586ca564\nc8121338-cc3f-485d-9777-8359fe928c29\n6c1d26a7-8e05-4769-bbc1-936750217741\nf02a63db-6aca-427b-94ae-0577a0fc6441\n2cdf7027-c190-4d5a-9eda-71c076f7e1d7\n11a34606-27cf-42d7-b826-3b36063a2faa\nb17ac0b4-e2ec-4331-baa4-57e6b5bc1e0b\n3d610bd3-564e-44e8-8c76-99a4823a0043\n762224ef-a430-4967-915f-b094d14c1263\ne289384f-4866-41b6-b2e5-f2460b483fc9\n88f04abc-cbb3-4182-9ece-194b82424ada\nae0ac023-f3a7-4c9d-9788-fcb051e96e35\n1ed0faae-e1ef-4c3a-877b-6aa16d34cf3e\n3551156a-a9d7-477a-8cec-da53e05da931\n79424965-ed11-41e9-8fc0-4fc94a7bbf3c\nfc54ba29-f088-4ea9-aec6-9283c52485a6\n74afb400-5175-4139-b303-398e97076e8f\n662172d2-d405-4e41-9483-de138c94aaca\n116511de-e49f-441c-8ac5-142ec01e9595\nfdde0e07-37d6-42fd-b86c-640794a1f93a\nafaf5c2e-8730-40d5-8422-d29969916280\n4d398712-7da2-4e22-bbee-721cc35616fb\n32eff0a0-8785-49c5-ab27-648f16361dcc\n3513df0c-141b-4bd3-aab3-67572a89544f\na080cbbe-4812-405c-92c5-faa698d380e1\nded71cbd-62c9-42c1-a9fc-2d21d7de5359\n2b97ba45-ee22-4133-8299-5941df695323\n889df7a5-b633-4577-94af-a6688a5759ef\ncd3126f3-9fc3-427d-b7f3-2109688a4f08\nda38c363-0e31-43fb-93c9-96486a632e46\n42463c9b-4520-4188-a346-8c230003b0c7\n2ff12cc8-ddf0-4726-bd97-0c8190d0f389\nadc8ee61-0778-4600-bc13-cf2dad5f3b3c\naa1b873d-ec92-43c9-a8de-3d4e5527a396\n68099885-d47e-42b4-97d2-f8340eb0f973\n6fba7b05-688a-4608-99b4-a240948bdbe3\nbd122deb-e846-492b-8831-78aaf473a450\n1baba5bf-51f1-4719-83bc-b7244ea539be\n9452b130-9383-43a5-a618-5f77145f183c\nda70fdf5-8cec-4b0e-b517-0fd979220b48\n219c0be8-04ae-4bb0-8673-3de107818b36\n491ace6f-e4ad-4b9f-b743-5fcbe0fab46f\n556301e3-f7d4-4084-b750-f870d31ede42\nac63fba5-234b-4f33-b7bf-b7c43ea2403f\n7c49a2a5-ecfe-4690-b5db-ffab8035f32c\nac1181b9-802f-45b2-8b8b-2406c9e57f49\n6b2f466e-5898-42dc-b444-29f2edc8f388\ncb5f6907-268a-4afe-ac82-d29ce2ed6666\n6d8ce885-a221-4a85-aa59-f313e2d2a425\naf011f79-6c35-4e6a-a439-c6679370c86a\n2ce8625b-53c7-4404-b28a-7b2de1db9e03\n0dd34e7f-8059-426c-bef5-2699b57a1cad\n46d4e2bf-7379-4065-84aa-16dc58a2e9da\n53c3f3a8-6906-4547-93dd-b1fb2d46aa5d\n225d0fcc-978b-4ab7-a529-97c0c80c337d\n6d866d29-7c29-49bd-90fc-1d13fd7c8a4f\n87f24c52-fa5a-45b2-a2b0-5a1a9ef34d06\n46c5b849-76a4-4692-b1b4-e75d08bc5d85\n705237fa-5c17-4405-874f-872ce75feedb\nd74493fb-3b62-49dd-ae40-31d442f3b817\n5af34878-41f6-4d94-8cae-fce029c69e6d\n7b1a9ef3-fb59-4059-abc0-cd14158ce851\ne96f3827-5bc2-4b5a-9342-796732ad6446\n9b0eb7cf-ce0b-4ef3-a48f-105edeb7e20e\n0f6d9f98-8b6d-483a-8ba6-3c01ea5c4084\n6b333dfc-6653-4cad-b766-6d3e8a812825\n8e0a741f-37cb-41a5-8326-7dc8b6ff4bcc\n9d8f784b-ccb1-43bf-acdb-7de2248dcdd8\ncc05aa2a-8624-462f-a143-b979e30f43a1\n14e0534c-b47a-42f7-986c-6d81d6d97d9b\ndc2def23-ee95-4005-844f-b4b6f14b58d9\n44f14605-2fdb-49ef-8239-d0179bb26b06\n0c263b39-6501-4e4a-aae8-0dc6779c4522\n7626103f-9006-45a3-9163-206b6533aacb\n4a472f23-c531-4c82-82b7-7e469d689c66\n5cbb8aa3-a1fe-4e68-9bfc-942f35423086\nd2387c6c-13ed-4f39-bbe6-3a8d9c346faa\n65c86b34-3d1f-4eb3-960e-b327b037ace0\nb1100ffe-f9f0-4bfd-9158-5cc37cc0417e\n651b59ca-00e2-4732-b1e6-fec3fc6488ca\n6a7b205e-eb20-4503-8f4c-a1e355a8b703\n2017b4f1-7524-42af-8db6-a6b67d1881d7\nf04663a0-3be4-44e7-99ed-9336e6cb914c\n0f192c50-fe1a-451c-b96c-63bb1f794199\nbc3e741e-6a3a-4810-8259-e53699a557bc\na75b3c77-d726-49d1-a05f-6b74ba0e3650\n8657e3c7-9dfe-4f1f-941a-b367d202a349\n7e7f2ea6-24d2-48a2-9bd7-9977f1dd164e\n136b0ce0-31f2-4c59-b270-e2e1b9699ceb\n6be2758b-1c2d-4642-add9-d9cb3936adae\n87dd9e56-6559-4a11-a339-e4e36973bd2c\n124e59c1-f508-4b02-8c21-407e931bca9e\n2cb8f313-9eca-42fe-bac5-e506ff1a835e\n8f284597-7a2f-4390-ad41-7b8e7cac2503\n0ee9debc-0952-4570-a6ef-d7c92c912bdd\nde37bc82-d8e9-4425-8499-5611435dd090\nedfcc121-4784-4000-ab5e-a346caef0caf\nb69034db-1b34-467a-8c44-f08051e8e455\n092a63f9-59db-489d-a457-fa2b3c0072d4\n4d8685bf-ff46-4964-ba5a-e3892b548b44\nf936fae4-707f-459e-876c-c329a2a9927d\nf007f56b-5836-4728-9bdc-b81e46639d66\n38bdfa90-1327-458d-ba96-8a7dc823344e\nf059812f-a1bc-4d10-b90c-f4a6d8eb00ed\n0c85e39d-366a-4ac7-998b-5f586d079b42\n9b5f3c54-d739-46f4-8614-48756134812a\ne6704f09-76f5-40a8-ae17-b2861abbb45d\n440ba263-c2c5-4324-ab31-52d2910a3f84\nfe1fe6f0-8db6-4101-add7-0594261a0499\ndd316bcc-7c46-41b0-bf5d-75cf4973a7d2\nee628047-31a4-446e-86cf-3c65666549c8\nf49d6c92-356a-4d86-9fd3-8fec43187ec2\nc70bf9e3-0952-42b0-ba94-2ae9721fa580\n85b98371-f495-407b-848e-b7a703d3fb73\nb466c9ec-0d0d-4a49-9a71-b9a1dc62c81d\n9d5abca7-35da-47e7-b9d9-824263d69979\ne4efead9-937e-44a0-9228-84056f4324e9\nf7f6a9bc-084c-406e-aa3d-3e0d3d465571\n6c02007a-cba3-4f56-82df-4ae06d433f3c\ndc56b138-7133-4ef4-835f-bc876f0b3e2b\nf309a8b2-a44c-4fe1-8bb8-d9487b45e972\n86699c97-8e2c-48c4-9557-5b903add65cc\n8e6b1dcd-16e0-441b-bbae-3e6f185927fe\n7a5d11c3-4ba0-4381-853c-d839ecaa5629\n7f41c836-34b2-4d3c-accd-7cc6166eceee\n1c18eb29-ef52-4f0d-9279-d73a2a9a9ad2\n60df88cf-def6-4ce2-b786-18bf26d972d6\n6ef3ed74-72b8-44cb-9dc2-538b4f314580\n45a7a13e-9a33-469a-9cc9-d38336d72f00\n1669b594-9633-4a52-a426-34d4613a2b5f\ndd2040ce-821a-4265-b70c-f8d42ea34a17\na1fc51ea-f0ef-4e97-8c1c-bfc1b1cdadc1\n5e8e0079-29bf-42bb-b33e-34102286b5d3\n3e908910-a1b2-4e25-b0d3-b06c1ac8c15e\n62cc554e-2200-4005-949f-0eeb5803cfb0\n759a4ba9-ba32-4a09-95f1-40d5135ea53f\n1aead67b-5556-46f8-92bc-2b4aba919c87\nf8eb784d-202c-4051-a4e2-b5970783dec9\n358b805f-b841-41ce-a070-903dae52e31b\n50b9f699-4e6e-4476-a3ef-8187f49c1948\na8e58252-f3d8-457a-b28e-86dedde2bb92\nd053ae84-5832-4536-b158-4e9ab0732998\n465b2cc0-8078-4adb-9825-4b1814ae0a07\n2a512970-ff50-4e59-9aaa-f21e7a67d37b\ne47eff9c-3249-48d0-ab6e-cf756e4c93a1\n0de71d18-c893-4c87-8897-81478890ac21\n649ecbf9-dcab-4592-ac86-5511301ad806\n97dd1c2a-292c-4d36-bb5b-a1a6aa04b714\ne80a7130-e426-4421-8921-83469e752746\n41cf475c-f157-40b7-b3c1-5aac7e6df43d\nf0be1199-984c-4130-9eaf-b237f9d68e1b\nf4036b00-3f7a-478c-bc24-66d1f0dc5e78\n7f528347-65a8-4d0b-a5eb-ac79e5ecd86c\ndb61c51f-2d3c-4cad-aad5-1304f41cda86\n0ea651a3-4f4d-4371-9933-5e2ecd2af3a9\ncdea0635-5752-4596-9eed-55ba0cf1d41c\nffac83de-f1e7-4846-af35-4a0b3e178e9d\n33cf99fe-243f-487f-9bee-f311bd39164a\nb86a0543-1ca2-4997-b018-2b2671c4be23\ndde24140-6992-41e9-b80c-74405d5d1560\n3f55799d-94c5-4e07-9a7d-442061f9f156\n0622dec4-42a2-41c0-9203-13dab0d6c954\nda9adad1-ce9b-49e4-8b0a-568bb2d960a8\n395dd591-d3b8-47d1-b422-dd47a21180e7\n004693ac-e661-4c55-8af6-0d1243187e5e\nabfaf5f1-5201-425e-b1c9-31029ec7aa22\nf2de16e2-9c31-4463-84a5-69e25d66a4cd\n07a94c1c-76c1-4d02-852e-31393a13e408\n8271a503-f5ce-4ae9-8d2f-1a28d84b2906\nd00485c8-2911-487e-a2a7-f12df4f643aa\n61e93e30-c8f4-4952-9f84-b09cc7bd2ade\n3a04348d-e03b-41ee-9810-48b4c2f06a1b\n671c1e28-1acc-4111-a7b0-1b521be4c839\n52930879-024d-4a17-847f-b309f25d4abe\n68599d8e-b813-4608-a5cd-3463dd3ffbf6\n1ce723fb-521f-4857-b6c9-4b0a35be560d\n51916f80-18d1-4a68-8d0b-08dc55198dbc\n059533b9-8754-4ce7-8440-deeb9abfe4ba\n15774187-fc49-4e89-81ef-c7ed57d821c4\n84bbf70d-a990-4bb8-b926-8c7b117ed353\ne047cc88-6ed0-437c-a750-616e4a82d23b\n017cbc40-8436-4566-831c-4d1edc8ef82c\nbfd657a7-f92c-42ab-995b-c69080e8c1fc\nf7e90285-1483-4412-bb35-169d0f71f861\nb6dfcda2-d072-4638-9de7-cf4b5737471e\n4847c928-bd33-4960-8b3d-3960d80f74df\n459f5f7b-e0dd-4acb-815c-93b6089be1c0\n6efedee1-6c68-4c76-9c81-525524a8de2e\nfbf1d6e5-daae-4fee-adde-5d69684bbf92\nfb0caffd-9ff1-4353-8d1f-f743b1a96980\n302bf841-8d2a-40ad-9310-29092b2620fe\ne9773080-0d66-4a94-9c5d-5aff7f105018\n2c5ee2b5-5890-4e3e-a221-0450adcc1a71\nfc759062-63f8-4dc4-b42e-bd11fed9ec2f\n68f413be-7659-4852-bf8b-3d584793d0c5\n2bb230b2-1db9-4eb2-a78d-07c59dae1e90\n8246ec53-3166-4acb-984d-3e3013aed8f9\n212a52b9-d599-484d-ba3d-c06da33a9a87\n31bd2f4b-1463-4093-aed4-9e723271a6ad\nf32831f2-4ea6-4394-b7d6-d7427ca980bf\n8a0269d2-7610-42a1-94c0-22dd64564e93\n371cca47-cf98-4dc8-b61c-e094274711c0\n472271ed-2c0d-416e-9334-3347847537ea\n439e39d6-028b-455f-876d-ee208759e8f5\n82bb1b73-1645-4ff9-8648-09d67a224ea9\n9d615909-12aa-444e-8815-ae523623b804\n43d7defa-462e-4f74-b87d-29788e8dadf7\n38bf3f76-5304-4b52-a92e-bf64d102a03a\na19bb0f2-ee90-477c-8bd8-ebd8af64d4a2\ncf263524-b442-4b3e-8e71-5d64f320ad6a\ne1234344-40b4-45d9-8137-8b8fe085a124\nc2dfeda5-0f20-4d23-8684-1a4a95e47fa7\n8271b38b-ebc1-481d-b5f7-1c555e1b3602\n684f511d-aa72-4a14-bbe8-07abc9fd7add\ne503da81-a271-4802-aadc-759bbc1e5b96\n4977edcf-65f2-41eb-ba0f-264c079c3a80\nac3c5831-3b0e-4c8b-acf0-cf156fd6ade4\n3802d396-64e0-41f6-8329-b4fe62dc22f2\n339fdc8f-c21f-4bb3-bffe-4bcc45d9db3d\n7916fd54-c44b-493c-828c-ee964bd88e3c\ndeadfd7b-2d1e-4f45-a4f4-4f88f3ce6d5e\neeb09734-4497-4e7d-9b35-b161816c0f79\n22352a5e-d077-46f5-960a-bcac69f0044b\n858d4087-c216-40d0-93e4-cbb257880ff0\n54dd51fb-1758-400f-9d96-4a79eb80283b\nc38e1b98-a0bc-4101-afcf-53311ad9a009\n1db1c7af-9b5b-461c-94d9-ed424bca5ff5\n3556564e-6db1-44dc-9763-2b02459c27d4\n4bf203ad-43a2-4378-b06d-3850e59ca6fd\nc0d9f622-019e-48b1-bb1b-71c8daa1cd67\n29e5c96b-b1ab-47b7-882b-70cdced44063\n6208641b-a3b3-4e27-9d9e-83da06be0c16\n3aedb2e5-315a-41a0-951e-c1be47ddfbdc\n33cf0569-07c8-40e9-bfc4-c51a2c460f23\n75151093-237c-4a78-80c8-63657e855832\nee836955-68d5-4910-a662-913cf646a7c2\n889ce9ed-1422-4da0-9ed3-e0b0efc830f7\n95fed5bd-3562-4941-9645-c6c4be35314b\nf66d0a9e-5753-4953-b449-55bfb4073af8\nfce20306-03e4-4109-85fd-58c1713ed603\n7c45960d-34a8-422a-820c-22d37f9440c9\nda94f05b-f0e9-4063-8b58-0de5ae6de7d6\n131b4bd6-5bbe-44ac-aef9-f6293aae3783\nb50defc7-9662-481f-b977-54ef0b8d072f\n28c8c3db-ef83-44c2-b9c6-58be4eb73c5b\n167253e0-d0e3-4d37-98ae-e969e65df3af\n47461c12-ee92-4779-80db-f55710561e98\ne78bb2f2-f954-4b4b-9b53-b1893f2b69f4\nf7fd3fb3-43ac-41fa-93ac-6202ee3b2e6f\n159ffa7a-1ab1-41c1-8994-ed26f5137ff1\nae78ed2a-4cd9-4722-8935-a2d106ae5785\n6b18e47f-95b8-4af9-be05-afa419701ec9\n09e645ad-a320-48f0-b5eb-3433448cc199\n1143123a-ea75-457b-99ae-88e710f8073d\n42f585b8-d58f-4583-b594-c1ba68f80912\nfa8fcf76-5040-45db-a578-a95af6cad133\n3e4accaf-b108-4389-84e1-6e6a59801b78\n2af70687-97fd-4c71-80f1-89eac4e9e366\n8b57d11a-1605-49c7-a066-a8dd7eefda4f\nd7321983-8a92-455f-aa52-ba099ce7f06b\ne5597572-791d-47a5-8e2e-e8300939fffa\n46547580-b602-44f1-900c-6c7fd6430431\nd1de3891-e84f-4a33-8067-c1a44d97eeba\n454da843-0f8f-43d8-a2a7-dbf43d7dc005\n217c801f-6c84-4abb-b54f-74709e00089a\nd3bf9183-9aad-4692-bf0c-9944928c5822\n621f7152-8d73-4f9b-83db-3823cc756678\n96f9b682-b577-4238-961f-df8cae186da0\n5fc14852-d8e8-4313-8a60-2461c3ae24a7\n9788a214-9a30-4de4-9a76-a830859edd04\ndfcb2693-4a69-42f1-a8de-391084498524\n9f86d808-c4c7-4503-9f3d-0061d47f1d47\n962f43b4-9036-4749-b47c-e086861b6dc3\n738a83a4-4742-4ea8-9f30-5e85caa9e15d\n1e71800c-bfe8-4cf3-820b-72bc13efd232\n3710a7f4-ba10-421e-abdc-921f85cae415\na2cb140c-f41b-43eb-ba3a-5ee7a6d223c6\n50341cb9-895c-4105-952d-f1fe1efedf76\n364f96bd-c224-4c45-bcd9-eb44e60507c3\nc8ccbf74-ed08-4799-bf82-45330d413145\n69e7f7aa-7e19-4c46-890e-e30865824810\n31572264-7ce7-49e6-bb54-e20d35db6cc0\n546d1469-4d4e-47fc-897c-6c2eb8a703d0\n0e42e671-e60a-40f8-b36d-93a1fd448c99\nd21c2cb8-9636-4a6a-ba06-5c914804aae4\n80ba06a0-40e9-463e-9d69-2fb78d940874\n88d743c0-2027-463d-8e8f-ad91f7f3d0c6\nad8360e8-f12a-454a-8ee8-229eefd026a3\n714cc35a-7e97-4a19-b6bb-90ccf43b0dbe\n7c45046f-fc17-42e3-ad6b-72975f4cb824\n20fe0524-edea-4663-b226-b5e1da5cb812\n5994295f-daa0-46f5-91b8-3bef3dc25c04\n3180f2e3-991a-4644-968e-f1a5af2d4a6b\n3bc07b40-2f79-4640-a8ca-0d6709c0087f\nd7ddade9-5e4c-41b5-bd40-3f0d8bb96df7\ne8beaa14-052d-4ab0-899b-c11ad523450f\n681a667c-ae92-4e0b-ab55-cec33c31f09b\n81e8ddb9-1127-4c45-8520-2b9ca4ec8277\nb0010868-6fa2-4c7b-bed9-bd736faa8318\n6b7572f2-53a3-4518-a1d6-458635b89094\n7f88dff1-d3bf-4b90-893d-a68822422012\n57fc1d6a-fa2e-4180-a0d8-febd808aa304\n2e520831-25e8-4e14-9327-f9afbb727892\n857ec840-f2b5-47e1-a5b6-b96c4f31a0f8\n10a594cd-49a0-4c13-bb54-35bcd559b933\n5e5a39f3-75c2-4b1e-a7d5-c8275ec4a52a\n1e340a2c-9548-4f43-a746-cf8696bba24f\n24b0044a-002e-41b2-8dcc-64c70f6fbc12\ne2c42301-90fa-4e8a-984f-0922b3b6b784\n15461908-9de9-41ee-a714-b14943aa5803\n9b5e1c8a-49e8-47fb-bf46-2420087736ef\ncde28735-953a-408a-a515-83cda55de6b5\n2cb0239b-f159-4faa-acbf-e660a17a638f\n6046abaf-b714-4d7e-aba9-bfe6547e1304\n5b06031e-839b-4c5a-8496-734ebfdc81ec\nd67fbfe2-22d6-417c-8f86-778fd4a16abc\naf3c3f24-8129-4620-9564-74a78d393459\nc45f687c-5d54-4b2c-8381-b9b04d7d5b04\n985fc1ee-e500-43ca-91d3-3ff0f4117465\n17ea1745-c8ec-468f-94da-26160fe93561\n90df6085-ab2c-4779-84f5-b7c7cbac8dae\na9f01815-7bfe-4a5f-9ae0-fb46287364fb\nde6a5a11-1729-4a06-9dfe-ee9473bbc904\nbfa4a02e-d6a0-4feb-b13d-042b36424b0d\n4600138a-efef-409c-b32a-6c25ec00bc78\na015eb7c-e7c7-41f6-b5f6-4a582ae4bbdc\naf2eb6a0-5761-445e-93e0-5919c44efa09\ncadb3221-d0ff-4dc5-b685-e69679f08d12\ne5494ae8-97e9-4deb-ac19-22e2b41a0a5e\n37f853a2-109a-4758-898d-9acb2729ff0e\n752ef316-80cd-4ca0-be35-5bdc5f482558\n053cc6a2-35eb-4665-bbc0-5addcfffb43d\n01bc2446-d7ba-4b8b-92f1-d668af4eb7f7\n5b6ee618-ceb8-4f32-a4d8-8d12e73c4630\n685ac018-f723-4754-b2aa-56fb6e628654\ne5f78dc8-b236-43cd-802a-cf3d4cc3312d\n597de5d9-eecf-4ec5-bd96-ebfb6f879a5a\n8397b44f-a39a-46c8-b390-cfa766e29c14\n7a2c88c3-e197-46ad-9eba-a71358f4e28b\nbaaaacfc-c1c1-4423-ba90-e4ecbebc4c6f\n01dd1a61-6695-4dcc-9f26-572ccf9174e4\nf71a94b0-9d08-45fe-882e-6f3dd3953d11\n6d8f1eb8-497a-4238-989a-5fdafa419bc1\nb2ffb537-172d-438a-b489-91ad3ff6616e\n891fa25d-92ce-4da3-8db7-9f2b3ceb68fb\nc4e1739b-4ac1-432f-8316-765d45915b67\n17e0a39d-3075-4065-bdf4-7b3a59f9cf95\nc68bab27-ffa4-4a23-b8c4-cc14fd97fbf7\n110f996a-b525-49b1-b42f-e0b2b22cb12e\n77d4a811-23b6-4fc6-9f93-4b480f27a4b6\n447b5e2f-770a-41ef-829c-abe8b044b31e\n9b5ffcd4-e984-4ff7-9bd6-a86d81c58152\n716088a6-e6a9-4778-9a90-74422090d857\n56708ca1-1bbb-41a8-a125-9c634e0c3840\nb2f599a3-60c6-4691-9ba1-d68e3c7e8ae6\nf765d9d4-0cd4-4e54-8641-86092755af62\nc2dbc862-165f-4ea6-bd3a-76f3517f4595\nc1bad3d5-1bed-4366-abed-b08a0048902c\ncd7ffb74-a10b-48c3-b59f-1f418991b054\nce50b3af-9383-40e7-b8b7-552bd24edd0f\nadb8181c-57d4-4f86-a507-6190f19a06ac\ncc62c4a1-62ad-419c-b29f-3f1c0fd63315\n7913c835-6cfe-4c49-93d5-596f019e6647\n6cc40f76-79b0-41cb-871c-d221c3254551\n25666292-1d01-4f8d-bb02-93542aaabc7a\ndb58e804-4bb9-4427-81eb-127521926c7d\na7a58437-def2-4a98-9c41-cecba985fefb\n80609b81-bf81-4657-bdb2-d0eb27501f3c\n599286d6-f308-462f-93c1-1376ab9f668a\ndf8e8f9e-a026-4329-a05c-fe59f441ee15\n247c9732-ec4e-4d3b-b2de-38dd5de30c69\n2409a4d9-cf02-4b8b-b73a-59b03920d0e5\n735bab55-f299-45ab-bf6a-a52f37b0dd6a\n256e28b8-06f6-4975-ab55-a9f8bd2ef119\n0578596b-12a1-46a0-9017-f2e62408ac28\na3a8bfb9-99ad-4bdd-82c5-33eb7276ce41\n43a96556-2193-41c8-9fd2-8427c593b624\n54066258-062c-4d9f-86ae-035c077a3b00\ncbb5b28a-20df-4644-a9ea-776c0082f269\nedbf4455-2873-433a-9d23-c19bfeb98a23\n57dd6932-0234-4080-b60a-fcb588e6e736\nd035e4c4-c237-40e0-bd5e-9512f7024272\n9fce04eb-8c84-4d05-8bfd-d7519dd1a0b6\nfa26a6c3-0a74-48f7-873e-51f1fea1ee41\nd479067f-f85f-446e-9dd5-74bc29114cd4\n50d8bb54-af1a-49f4-a044-87a50131cec1\n91243f28-deb0-4d4b-9ee3-561a5fc77dc3\nf98e3e25-187d-49ef-962b-ff00dcfacc34\n2be0f8b4-dcc0-4ea0-badf-59d70f736be8\na2240fff-05ea-4373-8707-7f19d1f1cb76\na4503e63-115f-48ac-80ee-8cd7cae34e40\n5ca5b06c-c59e-49c6-9441-290974923f82\n7bfbf598-4978-43b1-b139-5a631883ec22\n35303e82-118e-48c3-a918-764c5f92336a\n81f72ebc-8e27-4bf5-843a-608e252b1496\n25473462-6119-4ac2-8b31-b079d5077da4\n955a5108-b739-4cf1-8e7d-adcaf188e5f4\n35805835-29bf-491d-a8d8-9e93b050864b\nddbaafae-b827-4f80-8b94-eadf96c601f1\n13e82032-654e-4956-a4c7-4be2bf79e192\n64c41c44-a3d0-4a95-a96f-453850d31305\ned5c55f0-61cb-42a7-81f9-f907a1921a5e\n618666ba-2c54-4c67-b247-9185a8c4ef32\nb70102fb-8519-4098-92bb-bcf8499427a7\nb9b3a08d-636a-4618-a8ca-5521653f772e\n4c8f4734-83cb-4fd9-b12d-3b02a691d71f\n675a7b72-aecf-4787-8b08-4c5bda2c92e8\ncb97ad8a-8deb-47ad-b1ae-8091a6356319\nf3a22c59-3d44-4f80-b934-026fc5efaae3\nb0075ab0-964b-4ccd-ae08-7e12ca5bd4b5\n8a763ff6-b840-45a4-891d-8698ea66ee05\n2acd054b-6284-4ea0-b19c-1b627c583f65\naef31373-5f46-40f6-9206-e81cdd934424\n0df942c1-4203-4151-8dbd-877ddfb853d1\n235a3039-57e6-4aa0-9771-b1d5df300dcf\n5feacac3-46bf-435d-8381-a1681518acb9\nf1795f3d-c57b-45c2-8474-76bbceff9573\n0365340d-34ed-40ba-94f8-4b857f4e9e28\n31064316-1236-4dbd-b6f0-1325c23edd07\nc006d6f3-67b9-4146-9af6-98d49c2d4e3f\ne7648b10-f4b9-411e-b7a0-b0551f4c958f\nad4d2168-ec6a-49ca-958f-e0c693a04f53\n7e7d77f8-bba5-4a56-9e23-515860dcdd07\nbef8a6f6-1225-40da-987f-8702bbb1d5ea\n93ea3ad9-6205-456a-a18b-6842068bc230\nb8792bc2-8ee8-4b1c-bc64-91b9095c6eaf\nacdb666f-bf5b-4c2c-b349-4aa1dc8cfae9\nc57d67b5-881f-4789-9ef6-20355af2401d\n140bc7b2-d499-4e5b-8d94-adb6502ff039\n7144125b-9fb2-4b22-b78b-00123290866b\nb8092b3f-2e64-428a-9e6a-dadf7c125bc6\n7f57ca42-8283-44c2-9056-2e8d3e1ed4bd\n02266607-8ce4-408b-8c28-82ab83260654\n1dff24de-2344-4c37-b32a-3f9f7753eb34\nfcafb2db-fcf9-431f-b949-36a8a57cedc5\n5860f634-7070-49bc-aa1e-f1eb3915e801\n757bc0d1-c4ec-401c-99f9-33f86760bfff\n43314301-9525-4f7b-967a-a69e5f5c1dc6\n3b00e27b-d46f-4d97-9395-1a1a89083a96\nc2dad078-6f21-4ca3-8ffd-0ea06434ba74\n87d5243f-1923-4b1b-9f39-7cb0539d4d0c\n49f65a85-4242-4b09-a994-1a074d6f771b\n6cb945f4-ab06-4dff-af2f-a972916da8c9\ndc554adf-762e-4a39-a0e9-d0f4db21bafb\n860dab5a-b1ea-4336-8cee-a2a1913acc2b\nff1abbc2-aa7d-4593-a125-7ff929807771\n82ed49c2-95ad-4ee5-a3a5-8dddac6d547d\nd019fe0b-164a-4006-9d7a-dfb86d2c3d44\nb57708a4-f837-47e2-bd16-aa90b11172a3\na2369055-0ab8-4f15-a361-36093422b95f\n99521254-a27b-4e83-872b-dab1833b58bf\nce660ca0-7090-447b-9101-0a5be1a638f9\nebad03b5-2f24-4b62-b64a-e17bb2efa28c\n79966823-141b-46b7-9800-c2e94e5799a0\n673ad424-78ad-443f-a3d0-8717896e3162\n61a2adbf-0483-4218-af60-69d8088d245d\n258f3028-19f6-4348-bcca-8edc11ea19ae\nbcc2fc2a-0543-4e51-8d55-e3d98c40b112\nc0b90ecb-52b3-4de4-9d70-48e5d041b5dc\nfb0dc19c-f972-49d5-9ab8-9596a58c89af\nd6f5b5a6-8cc6-44ea-b161-13ab62495a96\na6d21f5a-4596-4d37-a262-919af1a40acf\n15ca095e-32fc-4b88-95fe-5239ed7c35b4\n3a972b70-88c4-4a4d-83c1-1e1ec8158154\n6fa71554-0f2d-485d-b8f0-180fba305dfb\n3f138301-587f-4fcd-8d12-de3f2fa474b1\n04d972cd-1279-472c-9a7b-711ccf8b9f0a\n5c7d3457-b38b-4e76-87eb-e164ed20b74d\n399c94fa-a39f-47c0-8b27-77360a0ed5e2\n51b8aa3d-2f30-4792-8221-5b40d1394539\nd327468e-ff13-4cbf-929c-6fbd4be01bfe\n38e831d3-6f50-4bdb-8f13-f88ed0838fe6\na4510d12-07c0-4775-bb67-af2b5f4d4934\ncca890e4-827d-44a9-96b8-12ff35bb82ae\na82259ca-075f-4976-bfb6-198f06e26ed4\nae6e2c2e-da7c-4e82-9475-7e431b0b8c60\n3a4e20c6-439c-415e-8f49-6310b4417557\ne2130519-81bb-49b5-840d-bdf31cdb24aa\nfb5850f3-8c51-4f6c-8435-ad138c176a4b\n65a4562b-fefe-4abb-ba15-27b39b2022fa\naf0c81ab-d2cb-4c8f-9385-e97a5f0b215f\neaffd3ef-aeb2-4f5e-98f8-08fcda507d64\nad570029-ddd2-449e-83e9-38647807e914\nec83d3f5-d65c-424a-ad0e-ce65f3db7374\nbd6f43e2-f326-4b6c-80e9-ebdf2392eed5\n19fe6a17-fe60-40fd-b529-ee968eebd291\n16e6dafb-96a5-4093-8090-ae7b27dd01b3\n41619c79-4781-443e-b64d-43ab7638ae3b\n52350280-4845-4a03-a306-ad8be0ea9f12\n7ab14db7-8110-4cb1-bea7-89e482c1a776\nee479c7e-9067-494a-bcb9-13462a3295c0\n42da90fd-948e-4073-a6e3-8f1342368b98\n8565f30c-98fb-4eb9-a885-104660e61e1a\n97ca42e4-56d7-4dca-ba49-30941b64d49e\n8a767020-e1fd-4c7b-ab3e-dfd2d4b90d4e\na10e1517-1aac-4cc5-a98a-484670c4da2d\n91d54897-8577-464c-9fb4-d579ecf70a90\nceed4527-7a73-46fb-8099-d4ff0fcf65ac\nd80d751a-d34a-4d33-8fb0-eb2ffdc0a633\n94199ed4-9027-485c-ae5c-8eb849f99cef\nd64314f7-aa9c-461c-9a70-285e4f91f595\n2eaa3699-aaf8-470f-83df-dfe9d858f87a\n1287fd1d-3fe8-43eb-ba1a-cb98bf4846e0\nb4c17391-14b3-4b83-9f14-09f6a4bb786b\n8c368a66-ccbe-440b-aa50-6a3215e83cdf\n05a09c29-d805-48c4-afd9-b8885946f1be\n67c85cb7-e489-4f06-9539-a550b34db479\nab73fa0f-6510-4afe-9a74-0b0c5c779b1e\nde9bcf94-f92c-4f46-a5b0-1f147d7987b9\n3b4e3198-223b-4699-83fc-e68c788a2a28\nf51a8be8-4d75-4e6f-a219-90b35fdb4f4a\nfb6a0fb9-fa4b-4327-b19d-2f9852e8553b\n62be82da-7503-4c6f-8733-f537e7bf8ecd\ne14fb5f7-703f-4315-8981-59b6bebb359a\nf30a6296-cd19-4ee8-a3a5-3a4bd7becc02\nd5c41fea-3dec-4a55-b770-caaf02a31a88\n05da0fde-04d8-43a6-8921-e22998014b4d\nae9b6402-1d40-48fd-a7c0-7752d3c60f47\neba93a81-3198-42fa-9374-a09a31cf580f\n09628199-d13c-4cee-832b-db08744da21f\ne575a60e-3eda-445f-9c7a-20d4626b2386\ne38924d7-836c-461f-9633-e0aeedffd3c1\n703b7aa9-f2f6-411d-abbf-d717edfd33e6\nee507fab-debd-47d5-88d9-0dd7fc0c1972\n56d6b545-6955-4989-8b23-5b0c00cbdfb9\nf1eb08bc-04cd-4420-b4dc-0628c7ee4451\n3b4fcecb-62ef-4ad8-919c-a5e55b5782f1\nfd2e3f7f-71b3-4c93-bc5a-2c577a252022\n110d6656-6de8-4294-8409-d41dc1e52909\nd183f3b7-6cd7-43d5-adea-a9db3b6a593d\n064aa159-3d8e-4802-9c08-27fbbe4bbcf6\n4b6e9418-1412-46f8-8ff1-486f6344ac0f\nb014fd8d-91a1-4d28-95c4-47e4be34d553\n5c46886c-187b-4dbc-83c5-c854e4282786\nd4c68327-4db7-48dc-ae41-970503499257\n5c66ef2c-d2ab-4396-8541-e655f69b4445\n1ab4e5ae-dcfc-4885-b849-d9ef90d46036\n05994966-712a-49aa-93e0-0b2480c502d0\nd576b123-60a8-4cfe-9f8f-ca4f45a7d736\n7735a96e-6a98-42e1-b9ff-ed2679e7c8bb\nf5a2f2f5-692d-46f8-bf32-2424f2f4275f\n55ceafcf-2bba-41b4-99dd-acfd950b54c3\n2c77330e-c5a9-4711-82a9-355ad736be03\n58f9cdf9-4e25-4e23-9168-ad6f2cc79654\nd8d34a8f-cb1c-4f7d-a904-05914900cde2\n1471e39f-131b-4939-9b8a-5b840c99566d\n7cbe5e6b-d919-4939-9132-5f2219e2e0cc\n33e9a538-0ad1-4c6f-8b9e-37ed5924c2b8\nfb7de675-d825-40e5-8dfc-e948216e7513\n3d569ccf-4e1a-49c8-bb01-a5336fea9a4b\nbf959e70-d53f-47ed-aa89-167d6e0e2a88\nb3fdd4d1-8058-4cb6-a343-cd15378bd40e\n7b041101-72a6-4898-94ac-e2328f2e31ba\n89d6c8dc-8782-4275-8b4c-484a53ddd208\nbc9b21dc-a23b-44af-8073-25e32fa630fa\naf359530-0a92-4c32-8415-75fd55eae74d\nfafff4bc-b823-467e-a979-fb75bd0449d4\nfa09b684-0a3d-4afe-8108-53ecbd218aae\n7c69d73e-55df-4945-a8fb-18c5dd56c47b\n55f1c4b2-c714-48de-81ed-55ece515b3d2\n120dffcb-2796-46b9-99c1-df71293b1108\nfa24e5f8-da9a-40fe-9405-48e07836f615\n20a5ff98-e91c-4a90-bf65-067c1e8f53ee\n8239afc8-ee10-4998-8faf-2d98f6a7cfc9\n026c97fa-8a1a-416a-8820-288cf80662a0\n242201b7-e43d-4bb2-9581-4c2c4d7f7d20\nbe1b0a88-5e53-47c9-94fd-5428bbd89857\ncfee7c2a-bfb6-493f-99a8-b3cfcafff2c2\n54ee2628-2d7a-41e2-b859-d746bba2a054\n52122346-3888-4df1-9444-32a2cc008ae5\n08de712b-2e1c-4a52-b136-11b6a454dc6b\n72912357-08cf-469f-acf4-c2ec266f983c\n4f969571-ebdd-473a-b020-8ba48a9269d6\n1d72f4bb-3d9c-44df-9047-02eaeaccaae6\n0e35a393-0079-4c37-b902-5ac56966c9a9\n4bb18eda-c10c-4c5b-8710-4906fe7ca367\nc2555e5d-5d1e-43a7-b39d-9d40f76dd3cf\n8996189c-58bc-413b-a5da-be86effd26bb\n638fe74a-0f71-4e2f-ae58-890d9d60756b\n871f9bd6-3370-4357-9b4f-c4b1e030bd0e\n2bda64aa-3f0c-4a58-bed0-1e03758510f2\nbaa2717f-a3df-4426-8cdb-2c6bc83e6649\n612a65d1-eedf-4ae2-aa81-8e512de13617\n0ec28155-2a89-4da9-acf6-bb8344334357\n1aac987e-732f-4db1-9663-1ed3fe639ec8\n6f8eec1e-df0e-4b52-9e1d-41580a07b926\nb54ea8bc-d0b6-4b2b-b5c6-21b047d6e207\nb4d8e195-c3a2-4685-a574-9fb034047086\n651587ce-abd4-48fe-917e-5d10b451716c\n73b937f4-58dd-4491-b3b3-138bbd10f6ce\nd84ded3c-605d-4fdb-96c9-0c425861ebdd\nc0cf2db2-0bb0-4165-adfc-30bcc1b707c5\n413a0314-057c-4432-9c9a-49c64ed132fb\n881c5ee2-a453-45c9-bfc0-317d8a0fb518\nb11fd1f1-692b-4e3a-be76-bb75ca7d81a6\naef739fa-4e51-489c-8372-87def4bb4f52\n738d7973-063b-42cc-acb3-da87da497b60\n4dd7cc65-4961-4886-8e84-1a26583648f3\n6fe04581-62a7-4978-8aba-9cee77253d7d\n32c517e3-0a03-44e1-b38b-d21bb6ad6482\n04c135e5-da32-459f-b980-0706cbe274af\n0ace7f45-43c2-4879-9f4b-830ac231d5e1\n94805c7d-2885-4866-8126-98dee26b6d38\ndee1f07c-8df2-4b9e-b069-eb3c280b6b12\n99d8bc3f-e14f-4a6f-a017-df70091650e2\nff49fdf6-6226-4c98-9028-f4771c74fd1a\nfead4073-f2ef-4f97-b1f3-296614295371\n3b9d1b75-944f-4387-9cbe-d05c3a4f5a57\n8aaeac2c-2ab7-4804-bb4b-727e291bf695\n638a2482-139e-464e-9de7-ca46cf8d71ac\n440e4a57-4a8f-44a3-ae38-ead19fa0667b\n760262a3-1efd-479a-95ce-4283f0dcf7b3\ndc7578a2-a695-46f9-bfee-b020e7feb779\n4ab6f0f6-9043-4810-a4f9-2f754aa20909\n24db7df0-75d8-492c-9483-d484dd66763e\n889f3018-2e96-4d80-9ae0-f3b3672c17c2\naf1e1340-b1b3-45bc-912b-e80afeecb36e\nab766ebe-bcdc-4282-b6a4-f52121f3086e\n905ba560-ad4f-432f-ba89-dfd80906d332\n6aca9c16-fd41-45bc-905c-f61a0a603268\nfd089bc8-20c4-40a3-bf4f-718393a58ed8\n20ba02b5-777d-48f3-ad5d-d5248593d5c5\nd313bf44-4bea-4bf3-b956-10a94380fe95\nb7357b3d-ccfa-4ea2-8ef7-709959cc1a9a\n79b873f6-cf53-4075-89e6-cb9ae2586580\n4ccde672-8217-4b7b-837c-eb1b4cf7f620\n6bbd635b-ef58-4388-b51f-f4dbfcd4a4e0\n52ed042f-951e-4cce-b421-1fd87930e11c\n24ac7027-7ec3-4f4c-8458-f0255bbcff1c\n62940949-9247-4f3e-926a-fb3c511744f0\n96a8a5ff-21b8-4ec5-9ab4-f16b6180f075\n4aff1f8a-4855-41f5-ae5c-28b51a1d33e3\n6c4bb5ec-6e4f-4567-aca1-49c0e1dcee85\n75181460-a5d4-4ca2-bdbf-d8362cd3a340\ncd7508ff-a64a-4d99-bff2-b49df31e550e\nc6c99021-0235-4654-ba61-97d455c35f2d\n8a56b1a9-507e-496e-86f7-00104b21a4d9\n4a16372b-f812-4305-8628-7aacb4fbe770\n36030f38-0c1e-4aa4-abbd-a7ab3097b48a\n32d55557-0028-41ac-af31-82a53d4eb7bd\ncdf50010-a6b7-4c1f-8177-9988128178a4\nf5cbf5ac-a60b-4439-89aa-b94065f4aad5\n966c5b59-5bcc-4d76-b3fa-e0e77b3817d3\n86a8c13c-7ab8-4808-9c89-44f08a2746ce\n8c60d3b0-6b36-4ca7-b7cc-b6e6afb936bc\n4986a099-f544-41cd-91a6-5410effbabe5\n008c9b5f-bb94-4531-8b92-5bcc615f287c\naf596402-a305-4922-aaa3-718275203199\n50622786-4f79-496c-a3dd-9bd6793de44c\n222af525-9e88-411c-a7f9-13bc4502104a\n131874ac-24f7-41a9-b2fe-92ae016afa66\nd31c16f3-e5a6-4cce-9f93-14b23f595edc\n322dcae2-019c-44a6-8f1b-8d733afd5970\n151dcd25-53f5-4cd7-873b-55095a44053e\n039b8a8c-4ca5-49ab-9040-78bcdcdf7a9a\n34e5143c-f96d-4b6a-b770-f0368faa2b20\n6699ca92-45b6-46e1-8bab-72e4ba5a5f50\nad5b8bd0-efb9-4b10-9ea7-90408a524964\nba64d223-e3fc-4dc1-8bc4-701dfdddfa50\n3d1237c1-51d1-42a9-863d-feb854df3b30\n4230ef03-c2f7-41bf-9d68-4989eaa5d924\nb0820e29-755c-4438-9247-bd1f18f5272f\n8b0a93dd-5684-4a53-a7f1-f34475194a94\n127108ea-9a75-47f6-b5e1-f68d0d1ce490\nab2fbb74-408c-4281-8ee2-91491b1f836c\n659bae5f-1f6b-44a4-bbd4-238627cff1f7\nc32bed92-ea2f-4951-ba82-e0076f33adf4\n3b0ad09f-711e-4e5b-8ac8-8b777f51adb3\ndb74834d-38b8-46f9-9e93-f430fea49e72\n015903e7-31e2-4116-9761-a2b2ed1a7e41\na4aa922f-7ec3-4fd3-8665-1266e5de1020\n3c9334a6-0b53-4363-928f-89449d0fc693\n835672da-e8a0-4043-9bc7-730d2a6ed678\n0e71f5bb-8de5-4d8c-8237-f91d32332772\ned51e02c-a33e-4d0e-a91a-c38dc8510fba\n29028dd8-a494-4304-8907-3ae795718ec4\naf01b28e-2ed3-433e-b3a6-d0e5f3ea0ee4\nf9f6b4f8-56d7-4f82-8694-c8d80a37ac51\n78eebc5e-4b73-413f-8d87-b0b6fab251f4\n0e91e147-c6b2-4367-9d68-3e13cab4e8c9\n51abb22b-cecf-4e62-82a6-e56e6c1c815b\nfc7d7ff7-46c7-4f81-9ba3-d6c5a7b29c23\n44000904-30f0-4acf-8cf3-99ba2acabc51\n27ea6adf-7e91-47bb-a70b-940a60c2d8c2\nf9450ae8-dbf9-48b3-a251-cc43b2c4a697\nddaf07d1-4cb7-460a-9c55-327da1670ba9\n37af9daa-961d-40c9-b7e2-82e442aeea91\n62d9d4f2-7b0a-40a5-995f-beda8235e481\nf7cad375-adc5-46f1-bb22-62e39e4dfd7d\nb3ad7123-f17c-4b45-9750-0dbcf1863900\n3f47e88e-c02c-48ef-8fb6-8ac3634ae453\nb44475e6-5298-41c9-9b83-1f6e885d53b4\nfb39ae01-a7d6-44e7-8811-189d0d3836bf\n03551ea0-9fa4-44ae-8e80-3d0b7e85f14e\nf66ecf32-4d48-4d79-9079-d0560befb900\ne63d183f-272f-4d75-ae8b-37e8ac2278e0\n28ba7ca1-6b00-4626-95f8-95d2d98a4f82\ncd1d9f3b-c898-4865-80bb-a7e365386bd8\na52ce34f-3f9a-41d4-935b-10765a74f03e\n94b9402f-d43c-4849-9514-1e79f0d62f38\nfa949445-574b-4039-89ad-0b053c4a34f2\ne6d53113-754d-4a50-8115-b0f47090db65\n8ee008ba-bc95-41a6-b394-452a86c3bd39\nad0f4c6b-3204-4ca1-9f93-2c4608a2d81e\n86408511-93b8-4660-9032-5ed2708be837\n9dfd3b6f-acdf-4e7b-aab8-a7d09d761513\n94ea8065-c45b-46e3-8fa1-c2ddea4e0739\ndfda3a03-fde8-4613-8644-9629c75923b0\nc738cdad-ea7b-4afb-aeeb-7a8b8c644abb\n41979438-3f2e-4ca6-8950-8c28240d9868\n921c6cb9-cbd6-4505-8d19-50919bbbc474\n95d4961c-4083-4614-886f-4e4e7757203b\ne4f86d82-4cdd-4d9b-b112-11f6d551d455\n01c607c1-65e7-4500-ab19-9337cdbfdb86\nbc6df867-8cb1-43ff-86df-a9405565aea7\n08e37a37-06b6-47bd-a083-186ef60844bf\n3b7f3250-b597-4838-b0c4-abdccf847eab\n8c1d7509-7b4d-4034-9cf9-21a6dedf95f6\n93cb678c-58c7-440a-b33f-a2a936692685\n90cc1591-2185-4e50-ab96-783cba365515\n292d17bd-1f78-4835-a36c-a781aa1182fa\nd089594b-041a-4c0c-ad5e-61caeeac9cc0\n2aa2eafb-7e3f-4268-9c75-878ee97de44a\n735127b7-dad7-46d8-9db3-6e06b585cf7b\n0b66eb8c-327e-4f62-a993-94dbc6c3eb66\ndab5bba2-faea-48a5-9ca0-8c83631c1355\ne9ecb3bc-6e30-48cb-8aef-d87a80f227b2\n7f53906e-5e99-4bbf-a81c-921520e5d54a\n5d583f9e-aea1-4a43-b988-68ae400043b2\nc04e213b-582c-455c-aeec-e8cd23055c0d\nc29263e7-7a29-4133-93ef-0bee3fb2732f\nc4c314a0-ffe4-44b3-b02f-a2cbd0ab7e50\n33d45f98-3fc1-4a84-8042-a678466240c9\n8138e86b-e981-48aa-a550-cc189480dc33\nf1ef84fc-f8b6-474f-897b-1010a7f8fd6c\ne0b0b66d-60b6-44e7-a5d7-5c71815bff9a\n40725a70-11a2-4fe0-ab85-5c5495db7786\na2839bd6-6bc1-42f5-9ac7-196701a9f1d3\na6b62cf0-5638-462c-aa7f-9e359c736bf9\n0aacebd3-599a-4fbb-af3b-618ed30d51d3\n260a7eba-6022-4b0d-9b2b-5da303dc79e7\n54a7424a-36bd-4ae6-85b1-9ecaa31ee787\na3e42d7c-1ce0-4ffe-91a3-c9bdf04228b8\n1fd62d65-e54e-4752-9a49-208b341a66ed\nb7c2fe00-ce10-4486-81b4-4d13116523ce\n4bd24fdc-0f8f-468f-bedb-e699adafd8c7\n5b73104b-bc3e-44f0-9a2f-2be54c4d73d9\n394d216b-f69a-4211-9443-ec70ebaef34c\n1a9ebfab-2ff4-4646-806a-9b079f64a51c\nc196dee2-1b8d-4d95-b118-78025a6a6654\nfd9fdc7f-7428-4608-aba2-28b50ceb66a3\ncf31db3a-ff18-4384-b167-1fb84d469bd9\n11962ae8-5e5b-416e-8b2d-8c6ac69a0b28\ndee76c6c-6ac2-411d-949a-2be8d6c205a8\n253de520-084e-4a18-b3ac-151fbbc6f140\n09bdb901-2db3-4b98-af8b-d7633168a261\n9dde4dc3-a9ed-4ba6-ab38-54da44a43df3\n032c59a9-7189-413a-9be4-c4268aebacf4\n6ac9abd8-0fbf-4085-98a0-aa156f989bcc\n325eeba9-643a-47bf-b706-96dae4b2c903\nd09ef778-03a4-485e-8028-15fa02d90992\n737916b9-bfe4-40b5-b6c8-3f570c42ad2e\n88d6b98a-f6f1-4814-ae1e-0eb20acb7444\nd376b397-0cf9-4660-bc14-e0860abcba1e\nc94c0f6c-cb0d-4c79-98f5-7cebf13e2889\nd85baa76-1ded-453e-80fb-c7e2f8be5c78\n7ecd5f5d-0947-4c60-a51d-198cee824fc4\nf5cff3c7-333f-42b6-afb1-2c297edc30a4\n1e3919ab-e01d-4ac1-a2f5-de3a5a0a9864\n96908a02-5d34-4085-ba6a-dc6eff645245\nbef738a3-aa6d-47b5-8616-88f057f59489\n3a9bf90f-c9ee-48b0-a963-99923b723468\ne964e846-5a20-48c8-9d61-2047baa7f9d1\ne8c3557d-5e21-4e69-9b61-3d67476946cc\n3507a477-e304-483a-a811-9e9598bdc56f\na52f6de8-9908-4744-a0d0-058e3d0e26b5\nc8f78a1c-e3ee-4e54-8949-607fd6cd780f\n03852746-de38-4e6b-82c0-5e6bbe878a76\nf6186f1d-efa4-4c7e-8840-41ce0107ab63\nae6efdd3-097b-40bb-b892-de9c7be086c5\nb351b1de-de36-4872-a069-4ab88dc1639d\n34c2163c-f39f-4e27-a604-0942becdfdce\n632e8ae1-6161-4d14-a875-749993cce423\n8c75fdfd-80c2-4df9-bf7b-d2360c0d66ff\n579d1d34-c7cc-414b-8ae3-407e62189bb2\nf1e00e01-abba-44e3-9ce7-56ceb0db4d6d\n2099c4f1-4127-4aba-af5b-3c68ae4c840f\nbece7a87-d9cc-44d1-a8af-3739c950ae88\nb7d46a16-e5be-40dc-8700-f4b8157a8d08\n4aec4aef-07b5-42d8-9fde-20654ff62ddb\nd50a5f03-feef-4bb6-9c8d-b48988099b40\na4ae1608-188f-48f0-97af-7bc76ce15f12\ncc93c089-78d5-4057-a799-86796b8955e5\ne8044e1d-7aad-422b-97e7-d406edf74dc9\n2335bb13-88e7-4a9e-ba68-53640d89b338\n8fe73c52-b3bb-4455-839f-a0e1a3157517\n36f8bf42-0773-4d47-ac50-ce453a6c5b78\na5271e5d-89e1-40ee-bb38-806ff486e121\nfacc62b8-eca1-4aff-8244-0ba6761c9fe8\n906ec03f-6e27-4d6d-8833-f1c9f441ebad\nabdec7f7-90d5-4b48-90e3-34360c93a188\n055fcdd7-4d10-4574-b1ff-275390da75d3\n47a19ee2-2fb0-4cca-8f91-baed5d4fd033\n232c8b53-b3b8-426a-9550-df48048d6c3d\n50d88a62-052c-4700-92b8-e81c4e38fef2\n2a188bd5-040d-4624-8d66-89b97a040d19\n4ad9df22-3974-411a-8bc5-4e9df1b59041\n4f273a10-e953-424a-b708-b0a2a4c4fce6\n43972e2e-d4fb-46fd-bdf1-e59a996ca929\n86fb1f12-6d4d-440d-9275-cd8132cbccf6\n4282a1e0-1707-4964-b085-a54690da8e63\n15fed24a-31d3-49ca-9680-c60aea7e0c63\n034eb1ae-d562-4bdf-b71a-a0f843169499\n83f46861-fa6d-403d-b108-a9987f337c00\nc6a0873b-3ab9-4fe8-b9f7-65ea023c7f53\n62758993-ebde-469f-b7c6-ae8ee13330e6\n11b40196-1e45-43f4-a860-e6c8e33d3636\n88dede7e-5ee2-40c4-ad25-801e1ff839f0\nde0dbdcb-9229-4ee7-bdb3-3642a4926a62\nf29e1986-4918-45eb-8f65-aa80fa88b82d\nefa7a07e-9292-440c-9868-dd91260c3e3c\n7fa78037-c764-4c38-910f-be7c4689f1e9\nd20b915b-c668-4df0-8953-c58b307d2b41\n307dd20d-49f8-4f31-8342-f0ec78c023de\n095f5c6e-8f47-4065-bc26-2257fa8084fa\nff1184a3-6ced-4a64-9761-00e887145068\nfc1e2a84-7f0a-496a-acef-d18752f23e59\n19a73762-d897-42cc-8e35-a8e78bc670ed\n255de7d3-4bc2-40b6-8244-92bd455bc391\nef6d59d8-c92b-4de5-8d69-9c49c42c594e\ncadf5d7a-20b1-4ed5-be7a-fa001bb45a6e\nc8751047-26c0-464c-b611-04bb7d5a4aa0\ndc05ac61-5f58-47fb-a789-9806bb41f29d\n4a9010b4-7b6f-461a-8e31-3bca8393c0fa\n99a175f9-2d0f-457f-bb55-95e6ac1b798b\ndb2aaf3e-9f02-49ae-a20b-7a8ff1d74e3a\n6767f05f-fdd9-474b-85d5-1b7d91c30517\nbbf5771b-2843-4848-84f2-83c70a7ccd44\n5e3ed893-f369-47ce-a565-ce04a3477c54\n3c285bf6-bf7c-4d97-bab2-6fc665173272\n0070a444-78db-46ae-8f74-9d2582d2f9ec\nd4937d8a-c45d-472e-86b9-c3b32a3923ea\nf6060257-b95d-454c-b7ca-adbf383d220e\n4f81bde8-a379-4f29-bc16-6f4192c57ccc\n93876f66-0bd4-4138-b4d9-c908da626a30\n284651a4-d070-4519-85a5-3b9cf0742711\n3f46dfd4-a757-42c1-9921-3f88d014079a\nc04d571f-a7a8-42e1-8be2-7013e53dd8e6\n5424aad3-0303-472f-abc5-84362e421f4b\n974107a0-126a-4f1e-bfdb-ae53a5d40a27\n0c923af8-fe00-46fc-86f9-cb648910f698\n8b04dd06-fe66-4489-a7de-311d4dffbb2b\n204a1c67-9c55-4a26-bda3-a41fc1351447\n434c928b-5e17-4874-9fa5-32b3cfe39428\n8e8b0a28-c93d-4d32-9368-ca82faa04da9\nf5e2480c-223a-468c-8c68-92e1f77a6c68\n4ea1e636-3506-4bd0-96d8-ad0001a43d1f\n9b21ab47-e82a-48b0-b95c-bee9fe9a51f8\n6dc05c8a-b780-469a-b7f5-3b62104a9ca8\nfcfd88d4-4300-4c5b-a469-5a6b0bc47541\n8b6c0ee6-ce17-4d6a-b32c-ad9522b1ac63\nf25b6f6f-770c-47a9-9eb2-4175305ce650\n0a7ef21e-44f4-41bb-b61d-63f36e661779\nf2b00abf-047e-4344-8494-ba572203836e\n70b33c42-c75a-46ce-a8db-b0472d348eb8\n7272a689-f3aa-41a1-80c0-7546d5ac23c4\n075b4d39-42e6-4a23-ad31-735810c231c4\nbea0a1ad-7a54-44b4-b893-82b4e1d8cc88\n12f0c110-c0fe-4347-a45e-9b58d239ca4a\nc85dd4b6-ed84-482f-adf3-849d3e79a062\nfb8cac05-bdf6-4172-803b-6305d33530e0\nf042c2f2-c8fc-46dc-9c4d-c3319a74e4e3\n1a150f18-6a5f-43dc-ad73-2cbfd31f9794\na4e1b0ee-be6c-426f-8520-0965e397ae81\n7814c6ca-8993-409d-85ff-46dc4fba4993\ncdad0f79-b17e-40ef-86ec-c1fd1fcf8985\nd2ab36cd-10e3-441b-af7e-19ade187c5e0\n2b1ee7c2-6815-4f15-80ff-cbe96397aa0e\ndd96a341-5a88-409c-9336-cfd912d619f6\naec047cf-541e-4f6e-9065-3e8be4fe136b\nc421072a-336f-446b-a39b-73f51f9f5a47\n28787857-5660-4f26-a7a2-2df4d31a0cce\nc3b34a86-11eb-42d1-be82-1e7a09d9689c\ndc245261-a35f-4502-92de-28d52f55f30d\ne8e67d78-dcc8-49ae-afd3-89411ed6d0be\na289f815-cad2-4f3d-8511-ee38328b4ca2\n44b97cab-f96e-419c-97a3-045a5a4246ae\ne8b468b1-32dc-4a46-b48a-235a5b4806f9\nb1bda039-3877-4e54-a9e8-6c42f3088f31\nad917208-1139-42a1-afe1-b9372e1df0c1\n32fd1d97-a3d5-4e8b-bb15-d4147890171c\na3e5bb96-568e-45bb-ad36-06d90a6afbc5\n9e2ea1e6-20ce-4221-9306-ed7b5a2162eb\n190dd235-1720-4472-bf3e-615a2b097f20\nee3e08f1-90ae-4703-b727-ab40ba30db4f\ndf40e57c-1829-4019-9c4a-a5c72d0c0024\n34162046-25c6-4f56-b996-4af56d0c32c3\n5df854cf-5954-400e-a53a-28b894c22da4\n1ceb8bcb-f381-499d-a0ae-eb14aab7170b\nde02e7fd-9644-4e7b-b0e7-c7e9a9d6d081\nf5a9ef77-e07e-4fc4-b19d-55f0c01c22c6\n0e85d4c2-b1d7-41d1-8820-88c8c8b674ff\nf325f10a-6e51-4ad2-992d-16963e932286\n4edd6b71-a19b-45e6-b2ca-e6fc33577a59\n9ae87120-3e06-4b36-ab1c-faa555b9c659\nc0f0576e-1fb0-4d19-9954-fcd4fc9bd197\nbe2766b1-0091-4848-b9cb-4eb69cb47fa5\nb82b1663-11ca-4c5f-860b-19b585acdf4b\n1c83c2e3-9f59-44ac-a50c-b2c3324cfa7e\n9b9c9eba-749b-4fc9-8d4f-d22173ad855c\ncfbb2a37-470b-4b68-a3c2-7576b140e51c\n61fb7300-2062-4718-9d17-599105714402\n36e9c145-b62e-4645-9d45-68a294f3c3c6\nf2da3fa3-44a3-4c06-a631-ec67f34cefb0\nd5d6546c-0f94-440f-9e7f-54044e23903a\n495964fe-25fc-45a3-add6-112d13e7da49\ncdbf0ed6-cbe2-4e7e-b5dd-1fddde34cad9\n4f9c18a4-b5df-40a4-970e-e51153dfee63\nc0c45167-464f-4ddc-a932-ebfbacd5cce5\n24232eaa-e48e-40c4-8434-ef523742a656\n0c64cece-9ba4-4f8c-9312-fbaec9ed1936\n864a8069-6347-4b4d-b587-6a7ef9e65f38\nfe3f27c0-a07f-46d1-9356-22be6bacc41c\nef603bd9-025b-4664-afbf-7318adf654c8\n47647bcc-7f1a-4b28-b874-bb1bab273b0b\n7346f20b-7842-46fb-bbfb-620e8b45e5d8\n40edcf64-fa93-418b-ba0e-94d7257677b0\n51e5f3ed-79fe-423b-a199-8da71c4f345e\nf21f80f7-dc23-4596-bfe4-520a39e92d65\na1d17d55-f81f-4418-8238-1fb7daea9e4d\n2602ff7c-623c-41b6-9b98-57aeeffdad05\n0641a6ed-ca19-48bb-9852-b587335940a7\n69dd3faf-9481-4e00-8218-76271f001568\n6b8f726a-3ae5-4fc5-b3b3-a10e551075bf\n437c5933-8773-4c02-b91e-883f345a68a2\n3a208644-ef1c-4167-871a-4f0eb0293fcb\n29b77034-1392-4287-88b0-ed4430ea13e9\n523802d3-3e0c-48c5-9123-c2baf081841b\n17b72ead-b992-4b40-b776-df96a21e7355\n8aa33b9a-bc31-4bad-bb97-3f215898de4d\n8b1dd511-e051-4acb-ab31-e80f73d2c7cc\na2583e34-aac5-4923-b8d4-4968216de1f6\n81a62c86-71c6-4343-ad6b-d701bd56b82c\n1578e893-f01d-464f-a45b-02cef66ba8bb\ne21f5a1b-cb24-458b-9ca6-df9d134cc826\n0591da0c-534d-42e1-9b88-135d1bb31881\nd01e5d4b-7215-4767-acdd-24c51b81dc9c\n3b2eefe2-8a8c-4cb8-b0f4-4c5c47ec24d7\ncbc5ebed-50d3-45d2-8a13-5a851fa562f6\n489d5aa6-b8b9-402b-b16c-e34846632eb5\nad231895-18b4-4d6d-b83d-700d0bf539ef\n6d04d539-1ece-4eee-8a85-cd3f8bdc2981\n5778513a-e760-486c-a906-71a2607fb94c\n0fe54cdd-3f8a-42fb-9a08-c504c6de1196\nb3a3b904-f478-4ab6-bf34-af1e476fd856\n68c19f83-08e5-497d-a44a-e5e0161812c7\nc8d6888b-cf1e-4d23-8305-a6a734de338c\n75d1a4c7-cee4-46ab-9b84-e0eda7297676\nc5c1d381-67b1-454b-a3c7-d4c32ef097ec\n203a2871-030b-44f5-9789-b3ed105b7b0a\nc8e07fd6-5607-4315-9929-f95ea1906bee\nc193373a-0f27-425e-b5b0-6f263c2f3cd8\n88b06a99-f858-4b9f-a183-2abb04f48aed\n87f13377-a4b2-4a62-b0b4-5786eaf9d828\nc9dc4854-50d5-481b-b6b1-aadabcc26d20\ncc4f490e-e204-41a0-8254-5552545863e6\n496ce849-82ed-4f67-adaa-bfaceebc70b1\n72357b5d-8821-4109-9565-15a55a4f1076\n569273a8-b502-4da7-902d-d8cf7abefddd\n9cfece60-93c8-4371-901a-4d95c9c8fda0\n47f70fcb-755f-4b4c-93d7-3b99217975d8\ndabea63f-f81c-41f9-8ee1-fde62a68edc4\n207ea40b-7cbf-4b9c-97f6-cc4f0d71f939\n34ddb848-3382-4d1d-b6e9-eb404f8c118d\n3ce02521-070a-45ee-9c96-c4475e5970c2\ncd490d0c-c1b1-4ab8-bf3b-8a3f3db2a876\n85d1e025-7974-4362-a3bb-169bae01e71f\nd5172a95-0a6d-4271-8b0d-b2333bd57d26\n3acf4a08-0baa-46b5-8b04-f880f0fe4010\n5cbbabcb-3421-4006-9cd6-ba6557cc52cf\nf23f8315-8884-40b7-97d5-73f1ff2fb8e1\n698eae99-9d07-4b85-855d-07fa2ef539ba\nf02d6dea-0eeb-410d-a97c-1b2086aa7e78\na343d6e1-9597-4b8d-ac69-4ba65262ee4d\n9e28a727-f0b0-452b-b8dc-4bca81444d52\n21fc487a-0f9b-4991-ae89-e3e457b2494c\n3b517ed4-d101-473c-a7ab-3422a0b3e466\ncad331ea-eb75-43e2-b580-79ecd0fdc44b\n9441df40-85ef-4288-92ab-ccd8e61da78e\nd6a73d22-5bf3-4f18-8baa-0b2ef5e89ab4\n10385a35-09d0-4121-85a8-568ba1fcfcc5\nc74e19ef-8daf-4497-bc8d-e6dd9fc2cae6\nba794c52-b8c1-4737-9463-5d03abf52ea6\ncb6e9d04-4a19-46e9-8fcc-45dc7a1b7071\n91334b8b-6a0d-4064-901d-32d81714ed9e\nb18d39ca-a7ec-4a71-b4c2-4892e90ef6af\n22b6428f-99ce-4d3d-92d3-8e8d104eaa4b\n48f08698-6d0d-46ee-a224-6a9764ff7ff6\n09349274-261e-497b-97b1-e1b469cce344\n2ed95e12-cb16-4d10-93f1-264e0257ca64\n90d74408-3fd3-4d51-9f2e-95e5c1636483\n89eb4e6d-956c-4f15-87c8-aa59f202e360\n4eb8cf35-a38a-4221-a906-9e220d9514d2\n0ca17aa6-e114-43e9-883c-45f64bbc1c01\n19e70555-cf92-4dfe-875f-33c31485ba46\n0ec0e426-125d-413c-89fe-61f0270966bf\n5e3e4f4b-5c3f-41d3-a5c6-b19a4fbc5352\nd1a16372-82ef-49c8-a611-351d435e8c94\n4bbe9e67-14a4-4d41-bfdd-856d9131c661\n1c8efeed-e372-44dd-9b46-6a0f3959652d\n967c53df-b4ce-47a0-9f2a-5f0ed2671620\n6b827d1c-06a4-4a86-8edf-5452a61070f5\nda669391-5367-4bb0-9a3c-3687bfe24734\nb4bbda20-1b43-45e5-afb2-c217eb8642d5\n7133d870-3ed5-40be-967d-c0748e880486\nc763b64e-d79b-4210-a43d-9e31e7346743\n45743f74-9e51-418d-9e8d-7c171092f5db\n9a9902b5-2591-4201-877f-48a452cce067\n11abeb35-9ab5-4e0b-ba37-26f550f865b8\ncde87e26-b4d4-4e39-a1ee-5bef9dda3331\ne1d37a5d-4a75-4622-b681-2c5e6f861bf2\n179b5f2e-b505-4997-a615-7e85bec14664\nb19c1fa1-aa12-41d6-8ee8-e9c6857649cf\n36b33052-e577-4ba4-bc98-945e5ab4ebe6\nfe571b1c-bd08-41a4-8983-0899e30c0df4\nccec490f-289f-48f0-accd-1b4ecdadce83\n6bd19874-3316-4cba-b27a-a51eb5ae8358\nf5001cad-12e5-4a30-a05f-25b07ba16c07\ne5a3d3a1-e430-4d8a-8fdb-71b22aa761dd\n7e9a616d-32eb-4f54-acbc-292edc6cbedf\nca37dcd8-3db7-48f3-a788-5b75fdd35a85\nd57ea1a9-8fca-43c8-9c29-19e4fd7f9761\n88c1c95f-b5f3-481d-9bd7-072c3751dd00\n41e7074c-8f40-4e4b-8fb9-35535b212611\n73363cef-ad00-4a23-894e-1ab8992166a3\nb1832415-8e58-4f07-a7a4-9313240cf21e\n893c3a20-0480-47e0-8c2e-be45a5b10522\nfd8bcfd0-e3a3-47ec-8339-187fcbca8349\n1272178b-bc72-4222-8539-60aa547b8ba1\n6ec648f1-4ab8-4e41-8596-d7622f594402\n9407cd04-a0bf-4814-a9eb-0846beb2fecb\n2a335498-402d-4285-84e4-d8a14cb70f0d\nf1f46e3a-5ef5-4c90-8ee6-ae35e690b06f\nc5975149-77a7-434c-95f4-9baeb119dbe8\n103cae20-cfd5-4c2c-a527-9d0e3e81d56a\n98641d2e-3a4f-4a25-a9e8-2db7305141a5\ne775308c-55e2-4023-b6e2-e6ad1bcea251\nbae9c864-1b54-4a36-a47c-3a4818bfae72\nbd068396-e16a-40b4-b274-3cd3930753c2\nc0e9931a-8ffd-458f-a997-26736a6ff288\n6fbad6fd-34e6-446f-b200-6015b3eaddd4\n520b2c78-ed02-4a05-b1b3-8d2eb1087275\n384c7f74-d391-44a7-845a-955491a7a29c\n3ff04e1b-b072-4d70-acfe-46e25ca6f140\n3ab2a4ca-7853-46dd-bc6c-c022ed5dcd95\nf5bf0d19-0ba4-4029-8eeb-c5c0a760a517\ne09d3cd3-3e86-4652-85b8-6f342ac73606\n8d6d9904-4dc5-4cfb-891c-2cd050115b6a\n614969ae-4865-4bc4-823a-6911a27a9851\nad6e2cb3-0243-410a-80f6-6b754bf92364\n69a6dab1-6d60-4533-b4ab-0bea8c3fdc73\n15c71aaa-3a63-437e-a2b8-6c1d7cbacc24\nb036ff2d-0020-493b-b283-7639a0dc4db8\na5fc8845-70c2-4667-ad8f-eb35406fca83\nf371a38f-e66f-43ed-bd67-9f453814b5ac\nc73a1543-9ed9-4a0d-b0f3-412238d7798c\n514b7778-8619-4bb9-be6a-e7d87827418a\n332e4506-4e33-4193-830c-5373f7e0345a\nb86cf248-bae2-458b-abcd-5acf93a0798d\n589086a4-42aa-4f09-8c1c-c4683ff9395c\n7da6f897-acbc-4df0-b507-f9480e3c06ac\ndb89a23e-805b-4b98-b517-3951cbc3fd0f\n31a870c5-c445-4d44-be74-9a2de51632a3\nb2a5ee0f-d9ee-4c6d-b1ed-579afbfc1d15\n9985adca-8afc-4071-878b-50000402b50f\n55d7d6f8-a135-4823-a8ff-5b34d4b296e5\ne48a43e8-64b5-4ffb-8846-554b8338b090\ndb25eb81-819e-472b-894b-205cf09eefa4\n8817cd98-d616-406e-9e39-738401ac982c\n0fcb0e9f-b14e-4549-beb8-49d4c3e4e3be\n3374f4c6-0d3d-42ea-8211-f7ce434f8b4a\nb4414f11-d87f-48b2-bb61-5e59e64d5ca9\n0020ab30-9e7d-428b-a04e-dba30afa496a\n872f4ea2-cdfd-4c8d-beb5-b1e1e05c1529\n15fd34fe-b21d-4b88-801a-39ebd2f72383\nbcd0d546-4ed0-4f2c-a920-7b376911a7c8\n2f41c9ad-be51-4dc8-8955-be181ee2e18d\nc6f00f7a-7e9e-4156-aa01-7026ba80a23f\n5383d437-54d2-40ac-9acb-f3fee05fc9c6\n698858c0-91c4-4613-a2b3-39a0f36e3b8c\n20a1a9c7-7ef5-4076-b811-2d355ae4ef55\n94b084e5-5df7-431e-9913-0dab00c5d450\nca5b5cd6-cddf-49e9-8870-e002a2654ed9\n1dddd29f-91a1-4823-a84e-a08268571052\n25077b3a-758b-4962-b0e5-de6aa5cddc34\ned13f283-7385-4d43-af97-9f8b686c74a2\n75e6ba47-64c2-4761-b7c5-4de0bb89a6ec\n7d5fd464-1fc5-4f28-8eb3-339eb7df63c6\n2d50992d-db11-4556-80a7-57a9bb2674b0\nca7e0323-df16-4af0-bd21-547dafb51b32\n3fafbc13-cbfb-4ae6-92d0-80964f2242e1\n5d069441-e4ce-4c35-aa80-6a613b924572\n8f184b32-4cb9-41a7-9aec-a91614f5abee\n2ba2ffd3-86c2-4662-bbef-9ef3c0f9acb3\nc48b91b9-106e-496a-80d4-c8b9a2621a6a\nc520af87-97c6-4894-b3d0-c4332e43c294\nbe1edb9d-b115-46b8-8ebd-f8bf44cf253e\n5e9b3753-68ce-4ccf-9bee-056276e8cfd1\n4d33f90d-3399-475c-b83d-0982420da0f9\n698594b7-3c39-4ab0-96b1-eb79d90c5762\n176f5165-84b5-4b19-be5f-2cc9fd25d727\n8784ebfe-e07c-44cf-95f4-2bf48dd2326b\nf253b306-aa0f-4950-b8e2-3e13894a3d38\n509b83e0-d6de-40ff-9aff-4b4eb1ca4f9b\n1d17dc1f-f4a4-4ec2-9b99-08d2793a3848\n61a5be28-f4e2-4257-b053-a50e42d15b91\n2bb61686-709f-4067-a668-ecd6b5445b95\n7aa774c6-30c2-4e5c-af80-2b432747773d\nf853780e-3ac5-4a46-b7be-7ff36348941b\n063f39d6-7cf7-4eff-8bca-6b8259ddfa7c\ndbf21e9c-e36f-485c-920b-57f3b86ac765\ne66efc55-d1b8-4175-adb7-44d2fdc1c050\ncf4c8eaa-1471-4bdd-bd5b-09ea2dace8b4\n766d171b-d3de-42ab-ab47-84a2d781181e\nb6d2df95-e700-4d49-b181-9bb1a94961ef\n4ea958ac-63c0-4cf1-95c2-1441a178d491\n32929b83-dc4e-4f45-a8f1-a4d628e81c78\na6c890a7-4f3e-48b0-9363-4115dce07a49\n63a936a0-cf96-4453-b2c0-172b1e249125\nfa8a2d81-6fd4-422f-a1a4-9751c758534f\n2852d6fe-36b4-40b8-b435-c0a437c242f1\ne751093d-b7f5-4499-b760-25287b8b66b7\nf3e38f57-b24f-4cf3-8f27-376c999c601a\n60a11293-6b2f-4f8a-b473-2c6af273f97f\n7fe402e5-3bf0-4df9-b57b-199c55257ca9\nde213efa-1dbb-4be1-8d8f-cd5d9115c28c\n82f05c51-b9c2-4562-9a61-1efb72c3ae7a\n54605c8c-df57-4321-81c5-0798cbd988d5\n777dd8a1-0041-4ad2-898c-a80dd500c648\ne2cfd3c6-da82-474b-8adf-0bf3a5330e33\n55d1ee9b-3e8b-4808-a355-2849fa86e4ea\nd7f346d6-93eb-44d4-9e2b-3720afb4996f\nbbde20ae-2778-4aba-ba96-39dd8d795cfb\n95839842-eff5-4259-9b89-414c6c0ed1b7\n64d23f92-21d7-43be-a02d-90364b09141f\n8aff8dad-0ab0-4c5b-8e2c-b09e7b84a391\n21adb7a5-62c9-4ec8-bff8-b22be14e60d9\n02d0fd38-291c-41a2-960b-3c33d1eb1c59\n83110434-d10e-4750-a2e0-8b039528d7a4\nbf9b5787-6160-4df4-9dd5-28dd99bb8219\nd08fafc3-5142-4a56-8d17-595bed49b79d\n37371400-b1a0-4a48-90c2-1f386c86cc57\n920e96a6-f25e-4cbe-86db-566d82c232ba\ne3c3e176-6df9-421c-9b93-c9f3857c853d\n5c7e74a3-08cc-4b82-b2ab-3e82fc44ec79\n83bf078a-4595-4af6-88d8-a4f12cfe7931\n5fb1a944-6205-4d17-a11b-2c2bc8fa93b2\nb4ee4d01-432a-4af5-8e3b-51e0959e4d14\nf24dc82b-88f2-4e06-bfce-e37fca1266ca\n84b193ae-5b54-4f85-89ec-a9ea3797c35e\nc2754249-07b8-485e-854f-4431692b73fd\n51aad7b8-3a8c-4307-8e79-898f45d673fa\n94f18bab-5a93-45ca-b942-1600a526eda1\n5469afc7-fa42-432b-9b79-c3fc7b96713d\nbbb99ee9-dd52-4c7a-992f-90c1ea6eac3c\ne9548ffc-aca0-43c2-b001-93e020089460\n3c4e2b47-f2fd-40a0-9ec1-72b1f8903099\n78ee45fd-8870-40b5-b570-6f232abd14af\na8ac559e-33f1-4e72-9788-112489df2ea1\n623ef037-7be4-4c0a-b609-3038f9e821ca\n986b785f-3ace-40da-8097-70f00e906768\nffd03dae-7c8c-475b-83fa-234d4bae78d6\n00d21c79-d150-46bb-8d63-3019fe7200ee\n98d3e472-5a3d-4067-8225-f49e4910fce1\n6ebd685a-3b08-43c3-8627-ae887bf58dcc\n64a328f5-6f01-49f4-a4d1-9ca85be3f1d7\n4f97a289-511a-46c6-ad27-f7667612e91a\n7976e2a8-fdba-4360-83f5-1b9455bdd57a\n5a53a4b3-8a13-46bd-b9c8-8f66d77c066e\n4592b89f-ae68-4e72-a6d9-01c1820befc1\nb301b0ca-a000-4191-9cb3-ff0f76765d78\n35c55110-cf7d-418d-b449-ab4174ad6770\n318e9b06-08ad-4f7e-a7e1-ad6cf0171dc8\ne61db8e2-d145-4d9d-9a6c-64c876911731\nfd040f77-b2da-473e-8e09-3e9b5b917068\n403513ea-994d-4c4c-b098-7f429578947c\n85a1ab36-8073-4d89-9b35-aebee086e4bd\na4e21849-7981-4b27-af65-1753d064e097\n3a849eac-dcce-4337-9931-63404861f1f6\n50d8110d-87d6-48e2-ae56-c8acf7f1e27f\n77611c0c-9eb7-4e5c-8dbb-3946f533fb09\nd0a2f93e-3bfd-4550-a704-889c0d1e6f8e\n20ff7598-f0ad-49fb-ba5f-9e0c5b54312a\n76423c0a-a982-400c-a836-21dc2b4467a5\nc56a7b68-b405-4975-b37d-f52e837c8430\n8e024878-284b-48b4-93cb-3f3663b3c97f\n8fe511a5-4003-4038-86c2-7713514a96ef\n7b583d28-3978-4ac8-9d67-cbf3b3dd135e\n2decdef3-d3fa-4661-a516-6fe8e06c3567\n6fe7b0dd-c5ab-4581-bef2-453df458f687\n2fdf7cdb-efe9-430a-ac5f-0265956b7325\n9efd926d-98c3-46da-9485-08d96c01808b\na6abca61-0fc6-4b91-a742-e967cba9a9fe\n0cb85617-f43d-40e6-aea5-04a2aec26b90\n684d4c1f-0a55-4958-a8f9-6ed17030d4f9\nf1652884-9cdd-4beb-bbd3-5712a067864e\n3bee50f9-0df7-45a5-a924-72db815d5b69\n25678ce3-b1cb-4052-9756-1708a74938fa\na5328e03-2d88-4990-ba12-96b933d3e9c9\nca29d60e-3c8f-4619-9320-c4adef04d89e\na98bc0fd-1565-4eaf-8fbf-bd6070a4870e\nb010d6a7-87e7-4e8d-80f6-f5d22463a550\nc458a540-7de9-44db-b125-9cccdd8026e3\n9a408bab-147f-49f1-85a9-59018db5cd22\n8d72e325-a02f-4969-b413-4fd597aec66c\n5e498541-bdae-4103-8d99-d730b3998abb\na23cc2d8-9825-4d11-a01e-1afb571b38ed\n83ad35b6-fba5-4c51-a15e-b808114ebb1a\n8f1922eb-3124-41e0-b1e8-450fed6b8564\n40de17f4-624a-463b-816c-6bd3300367d9\n9aa32b5d-107b-4060-ba3d-df6dfec0a95b\na68d6e37-66d2-4af4-9b55-aa4155af4a90\n326b7084-7c31-41ea-9500-1f979a8a3dd9\nbf5f1f16-3630-4e0c-9b7e-127f3e27e6b8\n6cc3d44c-d5a8-46cb-996c-902441c0212e\n78b62f23-46fa-409c-9aba-df2dfdbefc4a\n42b38ca0-f6d2-45b1-aedd-fe13a873323b\n7c83fa5d-7148-404e-b379-8b6499262b90\n389e4361-8805-47f1-99cb-ddde6fe84288\n5f55ff17-689b-49cf-8f9c-e9a728378944\nd71837a1-d4f8-45fb-a02d-33f2e6bdd413\n4960b53a-62aa-4b3f-b05b-c8a9fcabf18b\n3df40c2d-f271-46de-88a9-9e6895e3c168\nee492e34-c392-46bb-8c21-41e91aabdf53\n164b2143-d26c-41be-bb96-617bb42007db\n57a1a734-ad23-4376-bc4c-86d53875a7b7\nf0ecdefb-4691-44f9-b120-2dfafbf33f0d\nf0050c9a-fd7d-4fed-91df-7e864f30af81\n3eee6664-715a-495f-b7c5-8b73bf1593b7\nc0908309-5d70-4187-80b0-9c26adb46d94\n91151903-69ca-4e9d-adbe-20b397d3223d\naa83b0e9-ac2e-4c14-9823-fa3824793a69\nb7b481e7-c324-4ac1-97f7-9c60adb53dcd\n0f546015-fe5c-48d3-8a29-bc5ee2e60134\nfc8212f2-c2ba-45b8-ae92-b2faf7184001\n1b65c4b9-782e-4d3a-87ae-f0f2ff3b1ed6\n1c14e260-5090-44a3-8b11-9c24d6c6bc6c\n83aec762-836d-4ab7-be05-5f250aaf2476\n758b7a50-0ce1-481d-b706-6c00675f9692\n2155bcba-e6a9-409e-88d0-6d7244afa8b5\nc8954336-0ec3-481e-9ab6-b4fd51028a46\nba9a7069-75db-450c-aec6-00c94ac22e1d\ncb045c41-4320-4803-b6a7-303ccb0b85eb\n785b978c-0d7e-4f9d-bf38-0b310d80f54b\nc0e9f47c-7e89-4b8f-a6e3-03d6b62b5fb8\n5fef7a3a-069b-471c-b685-3f5aebccb4f5\n26c46c3d-a184-466c-b237-951db1e24af5\n54ec2043-af4b-456e-b89c-81f214ce5f7c\n54856cec-f9cd-40d8-8882-225788e59d39\n79dc1f4d-c655-45b6-9928-fc9954ee0d00\n61696ea7-d13b-4b68-95dc-5abfc4d51dd5\n8fc53ae4-50b5-4dbf-8e60-4723cfd7bca1\nd217eb7a-5c9d-4db2-b820-3761cc67ba01\nda554607-bf45-441b-9fb8-d90b16cd4293\n63d170ed-1543-4015-8bb2-3706e655bc48\n48707293-a66b-49e2-bf8f-2c095525ea2a\naa8e51c0-b66a-4545-9827-1102104397dc\n9774c4fd-5104-4ca1-8a92-a597aa8c933d\n50bc3c35-df59-4d2f-995f-3c64cd39083e\n1c18e37a-938a-4db2-bc49-878e27858650\n44d0be1c-8fc7-48bd-b6d7-9cda65b2b923\n54595a90-5313-4a2e-b2ec-238e01e074e3\nf83f8fa2-d8c2-4dbb-ac2d-087af0dd1b97\nbb722569-b95e-455f-a4a7-18382d0bb881\nee87b4ac-1bfa-490c-9274-efa56e5f783e\n31fafd63-829d-43a8-a1e7-2b02bca49b65\n5612aa38-7850-4146-8995-25939544ba30\n94fa3cac-8363-425a-9cd7-e29a69f8cd78\nec4770f0-0c78-414f-8c09-0e2cb3708ee1\ndf53e987-c2c3-47d9-b004-92fae9108729\nf12c156f-da3c-485c-a953-8c2c283eb4c8\nf51ad964-6fe4-4979-a6a9-3cbbf17e9588\n504bb38e-af40-437d-a8e2-b3a92cbdacf8\n77a8e620-05a8-4289-9273-40fd78bd409a\nde47903b-b8fb-4845-8c14-59505b09de3d\nafbe2846-3059-4417-959f-aa077aa68b88\na8fc734b-2078-48b4-bfad-9479e94cfef8\n2bdfc642-4cd8-4ba8-8c44-deed8d76ddf8\nbeab41ab-5b69-4ff5-baac-790c8adcb283\n4cc45d68-d97a-4433-a72b-636c7ac08d1d\n6f9bfee5-4317-4d89-8cb8-472b16d19d09\n89d83f77-1185-42fd-889c-61d74e598e2e\n07959e90-8835-48a5-90a5-a8a17c6908f8\n0bf5c5f5-f1e8-421d-bc10-296a65e6fa8c\n39e66d13-e6de-4f26-8d12-2131d65be5b4\n36f03fe0-6668-43bf-be9c-2e12ac85ae39\nc71254de-4975-4c67-9c3b-ced8012cfcc7\n2f94e560-1541-425f-affb-1b652decfe3b\n4f5a4916-d8ad-46b3-a92b-a0f519885653\n16a376a2-68f1-4542-8928-f071e3a55f28\n3bff6838-fd00-4a24-9b8e-b562bc57dfdf\n5d05d794-6872-4fe7-8c43-a0f1c50e6cb8\n7253bff0-f0cd-49ef-a3ac-48280fcd4772\n80f303b3-2d64-4815-8b42-38cfc96c2f4a\n928f3c43-f5b8-43ad-9a09-875b80770c7b\n18f7ebda-71b4-47b1-b6ab-0e702052aa82\n61b4faba-a254-4da9-833b-710af131e899\nd5032bd9-43dc-4d9e-89b3-01304fb6d95b\n28e7f36c-a4c4-4de6-95a2-fca91025a400\n68a59a27-65af-4493-913a-e7ef71761012\n774924a0-c579-48b2-96af-c3e82c518898\n39943e71-40a2-45ee-9211-de5241b3ef20\n87565e35-c61c-43d6-a4d0-35d9f817d834\nab4ba1bc-a07a-4dac-a89b-0e41a5838507\n311605a8-0833-4389-afed-d18dd3ee5a26\ncb0cda40-26cc-4d90-a58a-0efb4ac4fc95\n8ebf4036-6d53-487c-86eb-eca7205cef86\n4e0845cf-efbf-4acd-b5ea-c917e7b6baf3\nf88bb212-cb84-4ae6-9820-34b4617726ef\nf2547007-d734-4cdd-b6b9-803994d6b549\n7f63fbf2-2c72-4f23-a282-89d1659cca91\n50a11878-238f-4988-8184-b8d665f11095\n6dab4dff-9af9-4f32-9413-415641fc5d91\nf92d8d23-7b12-4cb1-91fc-0a5077cb4736\nc2475947-aeb2-460c-877b-591bbca76590\n1da70da8-b257-4915-b361-d045b7aed321\n37256240-44bb-4e19-a70c-4f34f1bb8bd0\n9bce1fbd-dd10-48cc-b144-f3a945fde927\n4728798b-2269-4e3b-b55b-156447a4802c\ne8aadb11-8e68-4e59-821a-dff829236294\n5ea71f69-363b-496b-83f6-dd40c8a4ce99\nfb633fd5-44cc-4130-8c48-c3758b203ee5\n2193d88c-6946-4bcf-8123-5d9131038fea\n918b8463-6b32-49de-9723-50012e60453e\n62207277-55a2-4065-9fde-cff223bb842c\n2da770c2-839c-4910-9ed0-a6d67766fa3f\n92ee6efe-61d0-4d64-95c8-b2ce61694c87\n5e4cb4cf-c718-4bb8-849e-15d5926a18d9\n1f010bfb-0ec7-4bcb-9147-55c00e854fa5\nb4792600-b8a6-4272-b374-7bac8450cab7\n5eb767d2-70d2-44ba-84dc-7622a18411d4\n8fdbc0f2-418c-4d23-9abf-7c965bbb1671\ncf8e3b80-a721-4761-b9cc-02e3b2e2ca96\n903f8e2e-40de-4715-af53-ea693929ba25\n8a2bc93a-9779-4e3b-8cca-8f375d7fba46\n999b9727-1f3d-4de7-9b3e-fbd1ebb83f7f\ncca33673-3e1f-4e45-92aa-1b3d5aadfe38\n51ee879c-f406-4c1b-9efe-119c31f7ff55\n0236dd9d-164f-4834-ab77-dbc49071df2b\nf00e6724-2562-4d5d-91a8-37cb5c858d62\n81a78b2f-5ce5-4199-b8f8-5bfccaece9d3\n31030c8c-6397-44e0-b630-8da7286519f3\nc34442b3-ec45-45a8-b3a1-d76a07f708cb\n229ce7be-b772-432a-b57d-9447f519a23b\ncb6bfcab-dc19-425c-a315-203cffa6076f\n21201ac9-5b33-49c5-a304-3833b35700df\n576363d4-6d50-4e07-942b-857d1ed32fd1\n26830ea0-d667-4f8f-b7d1-a449937177bc\n779bf365-8f49-4347-8b55-09c4b78c38c2\n3bd24b09-b073-4551-aaad-9850ba5c1f89\nc7ae5c3f-630c-4de8-85c3-db4d3cbdc736\n5ee1e8c1-59c2-4fbd-bb52-060508e14eff\nfd7c7cc8-f3f2-43bc-90c1-49c81deacb0f\n3762ad66-4fe8-44b5-bf56-1777c0b2865b\n2884bfad-3d35-4441-a649-f44689ceefe2\n5d5b5ffa-83a2-4c3d-a273-699320e19d9f\n29a8b5ca-4a38-4915-9b6f-c2ab951dfa73\n74e04ce6-f6ce-4ec6-a0dc-5b7dfc6fa05a\n2dd38d86-1eb0-471e-80de-53a96f875de7\n34d431ba-29e3-4f27-a5e8-f9cc55b2f447\nc4825f5e-45a6-4de1-8a28-59601f7b30d2\n0ac8aa51-21e2-43a0-8a14-0b0a286c2e31\n417afcf7-465e-45cd-94b1-e7030cdaf048\n74e3f025-7cb3-4717-a645-c1be2bb1b610\nb9d174ae-2ed6-4395-bef4-139adf1be71d\nbc8e0a9b-7311-4edc-94dc-e2758e78f76a\n1570cbe7-de35-41c1-818e-ea98653149f7\n5db10633-15ad-4961-b999-14def5d5ec3e\n73778ec4-bc69-4df3-88c7-a0912f0ebcca\n739a3abf-630b-4855-89c9-eb13c342a7dd\nd6d1eaef-ac9a-44fd-a4cd-ca03aa1a7147\nc60116bc-0789-4b04-b35d-4c44970ab5f0\nab889693-0e48-46d8-8d48-100230b8fa0c\n5af4a2c0-804b-42b9-9bae-22aac91bee7c\n0e2a08af-81e9-47e7-a311-5a66c600e15d\n7779ba9b-ef69-45c2-a6a7-0861256330f8\nc134068c-926a-4e9e-a5fb-1fea39fa9479\n20c28b1a-f759-4d9a-b95a-8500e7a7e6f3\n9ccc33ee-8cbc-440d-938c-5bcbd3bc9049\nf50165dc-dffa-4501-b272-c1e368ca02ce\n4e3e8c14-a167-4ef8-88fa-695c36e61468\n0e2e090f-ea30-495d-91ab-6ab6d9fd85d5\n80652ef3-c541-41f3-9442-1c3524aa5cc3\n8e1d213b-f620-4897-afea-b359a168cfb1\n55947cb6-5c35-44f7-a8d8-fba2134d1810\ncbd65127-2e0c-46f2-aa4c-515d758497e5\nda91d565-14c5-4ed7-a48e-a6bcc42cabf3\n66d35b21-e9de-4595-ab43-35e54a67a0a3\n6f20cb60-ae37-41fe-bb91-452c86dbcb5e\nb3e12937-ce4e-42c2-9fe2-6df1292fa91b\n23f85cb8-4b47-4da6-8f41-38305874a3f9\n7e7d50ab-39f4-40da-9b28-97be0837339f\nfb9721da-498a-4df2-9bb1-01707d0b4bc4\na6509f61-1739-4bce-800d-9211c8a1ba36\n0166c656-efe5-4be3-9004-6194eb822e0e\na9d18ab5-5d53-48df-825a-3946f16043f7\n748d809e-6cb6-4610-9249-c1026f768a09\nb787dfaa-8c36-4e61-9024-fbad856af65a\nab40fed3-29ed-410c-9f16-f97872fc8f44\n5b4a6103-16da-44b7-9ba6-31823b4f7c8f\n5dee6b7d-8d25-4d81-a873-64636243c7a3\n99ab7c27-286f-4616-9016-0f4069277b2e\n91322279-c179-4bf7-b054-6e3edfa6a723\n176b5f46-7031-4826-ab09-00b0fb4750ba\nb2f487b5-8108-4665-904e-059616a3d4b4\n1e113818-b9f0-4e7c-9836-d77423ae5be1\n9cf8601e-8a11-4d6a-a894-b11f93b0e577\n4bc4037b-5727-4b0f-9b30-cb192a6063e3\nc6e3565f-638b-4f5b-bdef-dec0a0a49aec\n8ef8624d-feed-47c6-9cdd-f09dc52722b9\n06806408-aca3-4b78-9bf8-59b3518b37a5\nee481132-03bc-4f0d-bd92-30453a85ddf9\n29ededaf-41cc-44d1-bc16-c964d5cf6b0c\n6d5e7af0-4002-404f-9163-4a4b3f7bd334\na95bd5ca-8111-464e-be7a-807afcfe4a52\n7495bb1c-7fff-4478-8d46-dc80ffa961f2\n2a379e12-8cd3-49e7-83e4-0a5f12654005\n59772b78-43a0-4a01-8000-b7a466e89236\n8a989f6b-55dd-465b-9c37-70eee7ee72c8\nbe626eb7-74dc-415f-a826-42bb4cbb50e6\n4dfef57a-0e98-464e-914d-b929f86e8cee\ne7670e29-6a80-4502-ba4e-29a8489a411e\nc6a66659-f01d-4225-9ec8-102c330a19b1\n4d3b360f-3030-4196-b942-e47a2b1d6937\nf1d4f7c7-fed2-458c-ba12-52c8cbf40ef0\n42a83ca6-0e2b-4f84-b804-fc182dcdcb29\n3154c7d8-d119-4ded-aea3-d92ba0ba0597\n8bde022e-906b-40ea-b322-24cbf42cdccc\n26e0e87d-e6d3-4807-8081-63cc0ac6920b\nbb4a8ad1-487c-4d9a-bee4-9a03874e19da\n2bed40f2-7e0d-4f7f-a3c7-1f1ea09b9a89\nc154c2b6-acda-4d15-a9ec-3b5ce7f91764\n41200460-7d05-4894-9ebb-afa5f259b20c\nc2434bb3-6c21-457e-8487-7f9eebbf18cf\nb6bae5ff-4332-4cea-8b21-2ec4098de367\nd568d202-fe8f-4cb4-8708-9983b1af2c0b\n55593c6d-3b81-4036-aec2-e323a4fa0056\n1cb54610-bba5-42f4-8276-75f94df7b93d\n4911c2c0-56e5-40a9-b994-d33b5114c0ec\n71375c98-e475-4e29-85f2-456beb348783\na94e63d3-6292-49ad-92f1-9758ef8b38c2\nea16cec1-f8ee-4f19-95dd-5a9f9ca72c52\n1247e369-4793-4f2b-9fa8-df1a55f541bf\n0ece635a-07e4-4335-9ce3-f78068bb40a5\n891b9c96-7f39-4750-8d94-252a3067e590\nfa4f54f3-8036-4b96-a319-9f98802e8567\n2b3ae782-2013-4a08-b72f-b5bd71bc8523\n032b87c9-a612-4e6a-90d7-1216f6948e82\n6462cb46-9c77-452a-b94d-20ddb27bbdf8\n1975d52f-b374-451e-b4c8-8d2d78907009\n0478ca7f-6929-4a2d-81de-0bf08f7525ca\n103982c2-a262-4384-ac17-c4e63feeec91\n8e066c3f-4a1c-413c-bda5-5b09228b8267\n038bc403-5a26-4a17-b317-f3eff8e7b6a5\nab25ef3e-af69-4659-a71b-43ea777d6bba\nb437862d-480a-4d1a-9b26-fbb020770210\n6f42b660-1f71-45d9-b9f3-7795495ef1a6\n2ca2fa66-7631-4e80-b1e2-fbae4ecad94e\n4fec1e1c-81fc-4049-abed-b9dad2b5c434\n70c9c498-13af-4264-972e-070f0a231b4f\n0bbd0297-fb4f-44a7-a72e-f269a2ce7a5e\ncd20bc1c-9615-4771-b494-09133922a4aa\n06a618c2-c59e-49af-8b53-743217e2fbee\n9af1c25b-2027-46a6-b695-9b1f883802f9\na8b4ab01-2b01-439c-84fc-e364d61c12b5\nef0dc3bb-5a56-4a16-b4e8-6b93e348ac5b\n30d61d6e-bafd-45f7-8f7f-1ba02132e86a\n4b3b5a7f-fe76-4c25-beaf-aa537f290b00\n063473eb-f9f4-4f69-bd63-195c429ee1ad\ne3c3ff07-2a7a-43c6-ad75-b21954f89466\nf3b13d3f-f838-4c77-97a0-1acce20f0c4e\n79130f08-9535-4298-a1c7-822423e91ffc\n60d5bc7f-c59d-4202-a1bc-0dd73ee4706b\n07e0c15e-c7a9-47a6-aa62-88c174cd19f3\na65dfc6a-8004-42be-bf9c-b1a8bc4ed2e3\n84809261-fb04-4e1e-91a0-01ccd94604e1\ned85a6db-0e5c-47cc-acb6-d205d7ce8e90\nb89c0cf1-02f2-4347-be66-a1b27a75da45\n102deba3-82b5-4bc1-8697-c738a8912a8d\n4f8edee1-1f97-4be3-a2b8-6cc3afce6383\ne222d369-437a-4e09-8196-c4c846e13833\nc549cbbb-4c24-4919-b141-3a6f9ffb0bad\n621c1a7c-31ef-41fe-9760-38b89bcec19b\nee156abd-7603-44cc-8d63-ab325624f0ea\nb388545e-aa2a-4585-99db-cea4ad8f5f5a\nd89741e8-20ad-4a6a-a300-d0898f156dc1\nbfab7191-c84f-4d2a-bd88-53365efa82ed\n72ae8d1a-61fb-43b9-9ef0-9a27644be24b\n58aaa5d9-f956-4036-aac6-00b6712a0592\n890ef84f-e214-42f1-8650-d3ef3ceb96f6\n23489baf-43a4-4073-b351-69bf42f29263\n8785f232-f597-4fd6-8efa-50db18f54b6f\n8fd3d21d-d7b1-4273-bb6a-a8fe63d92e5e\n12e70a1a-186c-4ac1-9cc7-e33e25d87813\n71bb2a31-8e04-40c6-adf2-f419cfaf7a39\nf363e19a-e21d-4cfc-9cbc-a4f593983579\nb7a4bb9b-5167-47d5-bd18-be641a4a1b56\ne149375e-0d0b-4c0e-b028-fdd65c1e4f20\nffed8397-e9ab-4380-8188-5b2eef2588f0\n5643d16e-d971-4c07-98c7-5506f08a3d39\n2175f9a2-5ca5-4a2b-982c-95993345210e\n91a3125a-ebd2-4cec-9897-cbef73afce4f\n8190df8f-1914-4648-b784-84adfb64cefc\n9cdba9a7-30c2-4d34-a5f9-4fb1981c06f2\n9bb83a0e-9069-4e96-bf48-3b76884a3925\n353d8f66-7cba-4231-a8c4-58d46412faf1\ne71a7659-87cf-4698-ae92-617921fd8ae7\n0a80227c-a4a5-4a4b-90dd-021b14b55986\n08854a93-9d26-419a-9d58-4c56e86eb27b\n86c6be7a-df64-470c-bb0b-60986e4945d1\naec69e3c-00b9-463f-9ea5-575c8cc87c9a\n9efe61bf-9796-4360-8f84-dabf8b3f2bd0\n2dac3ece-3623-445d-975d-a0ea7b6b0b97\nff139156-b71e-424a-aee3-0e098c350d96\n91d5a92a-4057-42f2-b20f-28a957e139c4\n682fbb70-bdf0-4dfa-9798-c4d8799d9e17\n92f012fc-66b7-4197-8408-d211e4e820e5\n21d983a4-ff37-4c55-a63b-ea53e95aedb6\ncca246a8-650b-44bc-8cee-041ceeb50724\n096f5b40-44bd-41c5-94b2-1f3a87d7df18\ncdcf765b-6de4-45dc-8e9a-bc23ff29082e\n69ac6456-825c-48ee-9817-d4efce626d58\ne798ade9-831d-46b8-854e-3add3936f888\n1be12bba-d29e-4876-8c7b-a967d815cb84\nefd407ad-4196-4182-ab69-895d8d669321\n5f7f060d-52b0-4a6e-beae-85c623a2d043\n6e62df0c-61fc-4fde-a8e3-9cb7506cc594\n9cfc2978-2084-4d8d-ad9b-a5531c3a3177\n1f5d5a0a-1f08-48be-bfc0-0989e7154acd\n377bc00d-f276-47ed-a6ee-403317065207\n3d3a022f-4c03-44fd-8160-6bfbbfb5c9f3\n01920f1e-f27c-47e5-add1-2ee5ed0c81df\n1c8ea85c-f776-4d03-9fdb-879af8b2457d\n07ee645f-607c-443e-8b37-91d42f24c493\n66569111-7657-4398-a6a2-439f13e1766f\n6ea64202-79e7-4197-b6ef-d24fed91dbe5\n02dced97-c85c-4d9f-b2a4-0249e5d413dc\n6d9cba32-8e6d-4097-b4b0-e2ab7a44359a\n192fada5-5285-4b34-bd4a-8c763437c809\n1c0278e9-11b9-4339-9031-60a286a06404\n411ed56c-4125-4c18-b8fb-c2d1dce36516\n5f1fbc73-752e-4d38-ba3d-785889a7a5ed\n5bddddc0-1856-4a19-bac7-e9c2a679c565\n50cd6040-bb40-4de8-9b7e-bdaa84e2fd37\ncf78e437-b661-4b89-ac38-8591d78c13a5\nfe369980-0df6-40b2-97f0-2d86ebe1f303\n635215ce-c561-460f-b736-a9281ea142be\n2a30d31b-9ba8-4fec-a9a7-b53600fff3c6\n2097d789-e27f-4a9a-93d9-fa0c3efa25fb\na8a0b6a3-9cfa-4285-be3f-63c82343f0a8\n8aa6bb06-8e62-4139-ae0d-4cece3fbba00\nfd43f6d1-9a42-45a6-a8af-ea7cf76fa43d\n923fee3a-568a-4417-bb21-c6418c75d019\n14a7d328-7684-435b-8557-6c3fcf5c8a02\nfedc0088-69e3-4ceb-9514-a0188b8c178c\na871fffb-c723-4592-b18b-20ba7ed42eb2\nb3bed17f-7868-41ab-a7e6-5df5724c7190\nb2592b74-ec22-4990-8580-b4f150529cbe\n41f673d1-dab1-486f-9807-be1e1077f33e\nb3eecb89-58ac-403e-8fe2-ed6b9b2d6029\ncc7872fb-c737-4c0c-b9fe-e43cbac9480b\n393e06c3-e4cb-4c40-a515-4d6c89587833\n3a38d1bb-8149-4b56-a363-ca8eddbad867\n35d6a8bb-f5fe-4647-bf68-dde1d9c07171\ncdb806e2-0f3f-4286-8ec3-01ab11eefdea\n01a26af9-34f4-43ac-b187-db9cc0711f02\n4ce0de00-b557-4ec1-966a-844833d07a8a\n33d6316c-901c-4dc2-9371-c5dad0ef75dc\nc7c3b7cc-1abf-4d00-a2db-09fba196862f\nab5c25f9-5c3e-4720-bf90-786eaab947cb\n1dcce828-20c6-4cfc-a588-7fa074ed5f7d\n8605f901-a3b8-41c6-907d-ae452ce257c9\n0b0b110d-282b-4794-a941-34a99755262d\nab08f8de-7763-48fb-8550-1374d4147db4\nfc31e98b-3b58-47bc-8b41-96230e812b34\n09977ea5-07d1-4532-8895-5949abc02ef8\n701e3c74-31b6-4d23-a4ba-a00de7456a98\na29afbef-d554-421e-b6b0-86a968074539\nc0042628-6298-4633-a5f8-92f9dcb397bf\n5f4372e2-1e8c-447c-ae77-77fde5def47e\n06701105-0432-44d1-a1af-bcc2176ed81d\naec2f6a6-8551-4f4f-b046-9c8017546e44\n130f0514-dc00-4227-98e8-115711c293a7\n070722f1-af9d-4a9b-a5e0-f9b1cc6f44b1\n3293c00c-4473-4742-a448-8eb3f33b25e2\nce6f2d61-7d82-4ac7-b489-acb47043382c\nc259a7d4-67e6-4ef3-b867-c90d20b1a6e2\n393e6f5f-67e6-4994-a7a7-e68cc41470bc\na1794cb7-8a5e-4862-97da-ee6e1377795c\ndc906c96-64e7-45f9-aff7-70a8eda4d848\n70213c77-d0d8-4de9-866c-429d0198f4fb\ncd14f4a4-7f6b-498c-ba78-abb152914db2\n7f84a0c0-6013-4337-8c82-f325661b6ee6\ne81a704f-10a6-4a67-bd03-a660013b30af\nae025519-14a3-4da3-be5b-5ab33dab4e31\n02bc5eff-c200-4349-ab7a-227a513b7214\na45c8658-5c6c-496c-8def-a7e442f45b7e\n1c78e425-4f5c-40dd-9057-0802491863fd\n3cb9fdce-1c52-4b3f-952c-23cbfe731b84\n2c27fb6b-5b18-457e-87e1-28216fbd5a27\n18ac43b5-8839-48fd-8698-64595123eade\n653a4cbc-77e2-42bf-a053-a7324cde0841\nd7e9a982-89b7-48ed-90bb-cee13b78c8a2\n701c45e0-a852-4a88-9dea-c1c6e5597bc4\nb6f5abd5-a6bc-4019-96ab-27b8584f0c84\nb69e5149-95b0-4345-ad7c-622213cb8f1e\n51f758a6-cc01-409d-b47c-f4e5c5c15af2\n238b2a46-7d5a-4b3b-be1a-82d1abec4e6f\na13cdda3-a9ba-4980-8e73-69af579c7280\n26695c9f-1601-495b-b333-74dd3f7b2a33\n59a08469-b67f-4d40-a75a-cdc7b4045423\ncb73035e-1fbf-4fe8-9929-018fbeaf8248\n0a697ce0-54e0-48e1-88a0-221a8d9ba99c\n2ec6ac8c-3ada-465a-a28f-cd90dfe57ad6\nd65c417b-9b74-4d1f-bced-06793c8f136e\ncff26609-793c-4737-987b-9323684a6da1\nf1268150-705b-4f81-acd2-005343298613\n9b076a4b-c18b-4fb8-8b92-18855329973e\n8c2a8744-9b30-45b4-b12f-3d7dfcee6fb0\nad7fdb00-9b35-4bb9-af61-05da35bd68ac\ne706990a-24a2-4a6f-a796-6628f00476b4\n4a3843c8-6cdc-4372-b29c-0ef24b9ae0e8\nc3517991-4f9a-4ea0-a02f-0537de4eebdd\nedc442a9-af91-472c-ac07-c128922b38a2\nd19f5d1a-a4e9-4eea-bc0c-39f98c6c918f\n67485ea2-9585-493a-be98-5c1f609343d7\nc5e380c5-e4d9-4852-a575-567beeeb2bd9\nbf8b00ec-68a4-49fd-ae3d-60bcc389b306\nf1bddd46-4596-4d75-9935-62e82f56303d\n8bc94198-2f3f-4a6e-a94c-4e55a64a3ca7\n73aff452-49aa-4659-8fcb-1b68606e9463\n385f58dc-c145-46d2-a8ec-85da8a39aac8\n29c2a5b1-d140-4c87-866e-5bb23dc59786\n223bccf6-9134-44f7-986c-72c5ef5e9dae\naa3a0665-cfcd-4673-b2d6-9f1db5baaa7e\n390af74a-1a2e-4973-be53-f8852c55a15d\n38dc31a4-c0e4-449c-a5b6-1930054eb36f\ndab984b1-55bb-47b6-bc01-ae59c2276b37\nf34a8ba3-59f0-413d-8124-e4cddb975763\n889ddd34-8882-464f-bb5a-54a918ee613f\n333006a1-ed9c-4b94-aff8-746f4bc48d7f\nf536c14f-e57d-497d-a26f-90af70370cff\nf692b22c-963e-46d9-9433-2efdd11fb4d9\n5089980c-c53e-45d1-a494-13cb9d8eb93b\n8761d7a7-b782-4809-a1dc-9e2809c93675\ncb738cd9-e4bb-49e9-94c2-8bad79be61eb\n35a62a4e-9b5c-4e50-bd94-c86de94da8ae\n872acd4b-2f43-4453-a395-b0eda9a7a46f\na4b627bc-cec4-45df-9e30-3353b1f73680\n2fb33ec4-24f1-47b4-838d-f6aa194dc1f8\n82a7dabc-729c-4d10-bd32-1ba338ac66e6\nb44c757f-9bfd-4347-b630-8c5398a35c0a\n4eafdd1e-e3b4-454b-bdff-1fce163b1c01\n384d0122-79c5-442d-8f94-b4dbdd6300b1\ndea6e275-9359-45e8-9046-e6f87342fcef\n77291e7d-82d3-4107-8e87-cd27bdc6c5f8\nf782fe38-4056-4a40-a66e-a9dce91276f5\n0b6448c6-401e-49bc-8ace-5ce79d074837\n2f2e2ca2-5f74-42d3-ae2c-093f3d241a8a\ne6e9ec35-f15c-45c9-ba24-c249f1e7632c\n980f25ed-3d94-4e8d-9328-81bb3569734c\nf209315a-0217-434c-9137-e486f5f0351d\n8aef8691-d93f-4b2a-9351-11b2abff44c6\n420c8473-1ae6-4b73-a9bd-5bc70f0c4d32\ncd5f0aaa-4bc0-4e70-bc60-d1e761e4d8e6\nf224bc90-075f-47a6-8cc6-6cbc1d25c8cf\n813bf987-7063-40a4-a1b9-7c25f7bdbf07\nce860b57-c60c-46d0-a395-c14b7b9b74fc\n4f1ea9aa-b1f7-4824-8053-b4c3c60a6499\nede7a39d-3cec-4ebd-aed8-f8bc29decb5e\na631be02-4c46-45f4-88f4-f97ef1416ac4\nd9089c77-ac04-4368-a3ac-139f4412b338\nb3331173-6996-4343-8abb-0d877c03ee29\nd59e9352-a99f-4903-abf2-a48709470064\n93b045c4-93a3-434b-9936-79e793c29193\n361ca4f6-6d0d-4c95-bbbe-348ece01e75f\n5f78cbd2-1844-41cd-8cab-61aca31d7a54\n3561b7f7-1b9c-49f0-b900-21e08fe8df88\n26d3066f-d575-48dd-81f4-768aadf910b6\ncf4e4d05-2383-4886-9bfb-9979d1c74081\n3bc99ca1-4d2f-45e8-82ce-1ba1e60c59ea\n39b9eda3-6b56-4aeb-ab15-c768f4a103a6\na5db477c-e084-4455-a9d0-fffe9931e5d2\n4010209c-d269-409c-89bb-e33c2493acf4\nf19b0cd4-39dd-4b15-a541-5e8f0ddc20ce\n726ad5d1-8d76-4fd1-bbe9-266a33c89663\n5cf0a85a-d57f-4128-a2b5-90766fe29f81\n095727a4-b298-414f-988a-358bb496f33e\nbb81c45e-fc59-4957-a658-2eab74d74449\n3c6c688e-bbf5-4287-9f18-7e2d6ad16c7b\nb8958208-9482-429a-82a1-271722c2d8f9\n7b9961d3-a458-40b0-a545-2bbdcdcf675a\n564abe61-2f32-457f-be07-1f81446359cf\n8af5d93c-084a-4c91-a51a-e5c82ebc9b68\n17e5a0a3-0536-4305-b416-ca17f126169c\nc0bbac18-3b33-4852-a38c-e3fd29d7856c\n1934bc63-faa8-4af6-ab18-3e8440089b07\n8ea668c6-4a3c-4745-9a4f-23a9a97206df\na9445789-1410-4698-b364-e07577da2320\nc2a35865-1ed7-4df8-abfa-34eabde75594\n26b35209-5415-4b04-8441-64979a64048d\nb4557517-ab78-4115-94c4-36331870800f\nf380df71-5c21-4cd0-a64a-e5171718b44e\nc84ab721-f664-4714-95b5-f91e58228913\ne92a5727-4b10-47e7-825c-f6b0d6b6662a\ne6aafc85-203d-4c10-acbe-8ed3dc17f654\n7f095b41-a3d2-4554-bca8-c60189b270b9\naed0c0ea-7e73-402b-bf9e-14c883612e9c\n51ea9223-ef00-455a-80f4-03e8495bdfb4\n79dfddb0-9efa-4ad6-a370-b8cd58e2f6b1\n3efc408f-8aa4-4b20-affa-d80f36945785\na3f605a1-0b8c-4d9f-9ca1-0cc835205646\n9c019283-8e1c-42db-828a-e550a5558fd0\n60f26538-5c9d-4da1-93f8-0e38a333cf01\n053abb75-982a-4074-bfd4-6b1ba00756f8\n4a0784e5-b568-46e0-b636-9786d6cce514\n29ffd2f8-a2e8-4904-a322-99dc38e8899a\n355c7987-1d14-4736-ace8-6f9498029ab9\n9279299c-5102-44d1-8e1f-1aa6c425938d\n99534bb7-7668-44e1-8290-80b0bd2a274b\n2e163dd2-6977-48f7-90c8-2eb3ce136dbf\n00567982-0f5c-4867-a6ff-eb47736a32a0\n613f05da-16be-48cc-8d02-3c85011c6b41\n6acc8a49-d7f8-4d62-ad5c-de3ac3ec958a\n76c714e6-9857-4c76-816d-0a0bdddd99f0\n8ed56f71-7bae-4b6e-8c13-bf304460ebe3\n678efa89-e071-437a-9c7d-337005f8f469\ne5d6e301-3049-406c-ba32-49e18746afd1\n9b713591-2738-43ed-a870-780b29e5befb\nbefb9328-6f9d-4c02-b17b-4da70ece757a\n8232af82-131f-492a-a84c-d1835cc3a2e8\n432384a3-c88a-41a7-a4c7-b93680aba4fb\n4a68dd3b-a2b5-4954-8141-228798e1bfd6\nd221fa95-4534-4feb-b826-d0d5be79f36c\ne20cd180-ab6e-4cac-86a9-f5fc75c16a28\ndb93e349-9a36-4985-b08c-452bf7c01660\nb29e7290-c909-477f-947f-8fb2eff5c96d\nd57bf141-c6c5-4cf3-ae67-111b9269bcd0\n2736fd68-e4b7-4423-bea3-d87c2cbaaaff\ncd97f7cd-b134-48f6-9c37-368146af797e\nd9f39658-f836-4429-b79c-a078f97588b3\n8b195ffc-22fe-4b41-ae9b-2d87d35f54d8\nbca0e9ce-6b29-4dfe-9119-792adf55a227\n59a73af9-62c7-4fa6-b1a8-15bb5a1938d6\nfda558c9-e0ab-4cd8-a3e5-e63b86f058bd\nea7ad8aa-581e-4f3c-bf27-c670e6905e61\n704bebd9-42e7-4af0-8c3c-2f46ca2b238b\n8670f357-db33-46be-a418-e9b9ab8bdf53\n7fa81be3-abe8-42fb-98c4-9da806bccc68\n915b79e6-6854-4804-ae88-2b6a70ffeeb2\n50854fcb-822f-42f3-a70d-510a0ec0177b\n477877c2-0502-4764-b48d-bd0618491f7b\n50e62544-edd5-46f6-9d18-133a93b2a5b8\nddcea7f8-7114-48b4-a9e2-a939b84a482a\n5f67a0a5-7303-4f12-92d2-3243be24ca7d\n7513c59a-4ec1-496f-a040-dbba839472be\nb5e6bde4-b6d8-4941-8e5f-0317a266fd0d\na6501a6d-a2dd-4c19-8055-c6438233f898\nb363d8a8-91d2-4b36-ada1-b0f484516389\nebacb4a6-268a-4029-aee2-54be6eef8fad\n17adb2d0-b328-4729-87d0-c38f97414d22\nae919238-ac9c-4a02-85e0-1f57ec438fd1\nd8a540c2-772f-4859-a6d5-6a5b4343795c\n907caad7-407e-4612-87c5-5b4dba8659d8\n5792b7fd-1728-493b-b968-f633f06f3b0b\n5ab1919a-439c-41f6-9f3a-f6d29461186d\na6770e48-e74c-457e-96e9-17121dd21117\nae744bee-7e1c-42a9-8a04-644941ff58e2\n1ca71fff-57c7-4e97-9646-c1d80751d22c\nc6cf4dcf-817a-4297-831d-9a6c45c2b447\n562d8556-b633-4365-9f8d-4fe4f274975e\na391e24d-71aa-4bd0-a287-0fdb7da1ba08\n5f9bd958-18a4-4c02-bc40-4dafa31ee9e1\n4a1f399b-ed3d-47aa-91e3-e85ce66f8480\n0277113e-0388-43a1-b2a2-dd84aa6a7411\n114be941-98c4-4b41-8e61-9520a5a12750\n68a878ee-feba-4b45-9700-56119fe247ab\n3a9f5e48-f95a-4f41-bdd6-730fd75da201\n8b87c065-2742-4a51-94c0-7e5d8582a4df\n4a6f6e93-7673-46b3-b4f6-fbcfbd53c754\n98f0a289-eea6-4b8f-8b93-22d68a85d54e\n6b06060f-acd9-4b45-9c52-fd26ea7d3916\n8bb6f622-de95-4140-856a-7b54bc4f90c3\n38e77ed3-b093-4a96-9538-efa25cc1c424\ne00a929a-1a54-4e7a-9095-4bbe2f4be2de\n29d9a195-3387-49fc-bb09-66b0fa52c67f\n5f40cbe1-b679-4c90-91fd-88ff338c7e62\nf3ce85f5-bf97-4781-809f-d8e7014abc24\n63cc9a97-e318-4865-af1f-482f2ded8959\nf536d223-32b8-4182-996d-f3ed11eac29d\ndc5152e0-df72-4e2d-9e00-3537688ba613\n63b4893b-8406-4dda-8544-fc540a66963b\n476b31f2-6165-4fe7-aff3-0f13eec2aa2b\n8c42e1e1-f20b-48d3-b833-bac77b387dec\nd9484d3d-98b5-4cb3-8743-38a97f9b4acc\n3193d29e-d79e-4d0a-88e5-33f728279fa7\n215c8960-2869-4f2a-a96c-4778c945665d\nff3b23b2-0c96-422a-9338-05c95c74037e\neac9132b-e7df-4de6-bd66-36b98581b07f\n7066bd39-4954-4239-bbd5-3d3f4042390e\ne30a4cba-cb20-4a7c-950a-39bbfcc05773\ned05c581-834b-41e3-8a8b-3542bc457c40\n0ad780d3-10d7-4b18-b53a-c1bbf41b5979\nc0adeaab-63e6-4f14-96e8-b52f498c415c\nbcaff8b8-ee9c-4d46-92fc-0ee9b9f07df4\nadfe66e8-d5f6-492c-b82a-47c1e71dfee9\n8278130d-2a12-4e3a-b250-0b7bd217a8a4\n67587305-ce0c-46a5-8aa2-004d1d949ae3\nd25a7a29-96a6-478d-b325-4e8f04fc5579\n03a41168-f7d4-471b-a8de-0210c89a6b97\n8c6178d2-ddd9-43c3-a3bd-22db21392117\n1c118a1c-689a-475a-8952-52bb8761b767\n7d17dcf2-6e1d-425a-8044-a2fdc9c001da\n4282d108-7d66-4cac-bcb6-16711d7062af\n9c004bd5-a71f-4a9d-98c2-b63db3aeb0a1\n753526fe-503d-417a-90dc-2573ad2482db\nd13047b0-1164-454f-8bf1-eb5a5607ed53\n4a27f3bb-385d-4519-b20b-f439c7772485\nb3805cea-4279-4ed2-b3eb-d52919941e66\nfca56073-527d-478c-a003-4082628d06ef\ne349e8a0-39c4-43ea-a18b-1fb5e44ab2c9\n9ff08e24-a1ad-4650-b193-a395ec450454\n0f618d35-322c-46ba-87a3-894bf09174cc\nfe3a17f7-2b32-471b-808d-de29de03cf93\nddf1e8ee-1613-4288-bfc1-c5edf680413b\n753b7faf-9603-47f8-876d-4345371a92ad\n07e03af8-f9ac-43aa-88c1-493510c02865\n49042fcd-02b4-4877-9b89-372c2054d0e3\nde01b4b2-b6cc-4f1b-8f92-175f555a3032\n341e43f9-9e73-44c4-9f03-d1e7e1967df2\ne733e703-1826-4685-a8b5-8c6ed62082b4\nb8d1ab22-98f6-4e8f-a07b-7a398efa174e\ndaf51ae9-0143-4915-a55d-9539282bd80c\nf0147ca8-0a81-463f-abc5-bd2c5fb1db3b\n5d7feaaf-7e26-4260-91fa-d0c7a2666934\n411a97a4-8131-439d-8b71-5586ef2348f6\n1db04355-0e55-4cd1-9af7-293c405e0d63\n6aeca95c-6659-43d9-b258-41d3e796bdf2\n6c91eb1d-372b-40b4-aa8a-a42bd462ff3f\n85bc6637-c550-40fa-a1a5-67879fbf6c6c\n02150c16-417f-43f4-a95d-148926b07e82\n6cbd4f7c-1131-4730-8e30-0d47c87ba129\n9aa7dfa1-62c6-423c-a466-370db3e32b1a\n637b2bd9-444b-45c9-b6a9-2d4e8310ca62\n19ac9ca6-766d-448f-82cd-87dd27705a55\n5ac4eefc-6145-4a0d-a6fa-9cbef8c379d2\n217892fb-dda5-4f48-a833-4ef1e5ea929b\n6d5a869a-2f62-4a59-a2e0-8fab636a3831\n208c9133-92fc-47e5-a4d9-807beaa1630d\n5457854a-5cce-48f9-98a4-48bf6fe81cf5\nc547a33d-addc-4a23-834d-ccfea3fd7865\ndd386943-a79f-4131-9e07-a776dc69bd0e\n2743b2fa-e980-47ec-a615-68fcbaf44da3\na502082f-7d84-4335-8f18-8df37d4e17ef\n5714cfc7-4e43-40ca-bf11-a1e7263a8fd8\n01b76af8-9d5c-4fd4-9086-b7b79086dc14\n97b09939-0fb7-4818-8788-eaaeece2ddb5\n06cb3ce8-8386-4166-b52e-fc590ccf079a\n4a5467bb-2acf-4401-a4da-188c0e24a271\n2809549f-2fcc-466a-9995-2768cc25d069\n13f8d081-00d3-4f5a-9107-1d5cf6c655f5\nd1d56e5a-e9cd-433f-a417-c5a8ead571a7\n19cd4165-dfd3-418b-ba4e-5c4d455dc98d\ne59c14f0-1970-430a-af7a-123f2f98c971\n0c278bfc-487f-46a6-a973-89b155bdd87a\n7986c0c8-bd70-4b41-b5b2-e0916b4f4902\n0fd125cb-8bd4-4136-903c-63afa6c1e7af\n8012cace-6777-4670-8c19-25e2f30b3334\n6861c7dd-dd12-4aaf-8de9-23f581daf505\n015be0b8-f9f8-4b78-91b4-530c2f24c999\nb0e18160-9b97-4017-afae-859acd53e7fe\n99108c62-7b2e-408e-81e0-08c6eece64c2\ndf75db09-e2ce-4230-87a4-1103df2c0754\n399ba6e5-0c2c-4227-85da-02df030e7d43\nb9183162-000c-4692-8db9-e3e07b7e8852\nf8c0f8db-f876-4898-b3d5-cb07ffefc417\n81c82aaa-7bcb-4c87-8921-90e5fe4b2918\n28ea107f-2044-455e-8324-f42dcbbe6d76\nbba7c866-cc2e-4585-bace-6b15f5bd1a7a\n9380d9d3-d055-49c3-88c8-cf0afe17d04b\n73b24885-86ad-4fc8-a4da-f2e0d915f09b\n8a2b9096-57bb-4319-b18f-739757afaa02\n7e18db50-72e4-42c8-a755-d4744019fd29\nfc239717-0e15-4888-b8ef-d82d00d12afa\ne5c5f302-6e88-4929-a62a-c7f5ed3dbdee\n0f58e296-ee53-4456-ba84-ecbd7ffa5e11\n4192ef68-7db5-4c98-946c-66317a7ab651\n1cff8f2b-fb89-473f-8f29-63deee8a065a\n1d55268d-e5e7-4fbc-a47f-b2428a5c87e2\n94a4cc7c-2aef-45b6-810c-1d8ef09b25a0\n24fc8239-6f58-4665-92c0-a31f7d2fe234\n9caa65e6-74d0-43c8-b85d-a171a96ce64e\n6333519d-5733-4c1e-90ce-e61ed598f9bd\n9b21514c-1931-4656-9a93-ff9dd0dd8788\n0c639cc5-ec50-469b-972a-0d972d3b9fbb\ncc1be08b-fbc7-4259-96f8-ffb6d3e0271f\ne3732780-560e-42fa-8a7a-cb2a7b240f71\nd0823e70-c1e3-4c45-a895-4e632087d322\n3f2e36dc-7074-48ec-a80a-a89bb8f8bf6d\n3e0c4145-93be-44dc-89ca-36c02a50d59d\na3431cd3-133c-432f-b20e-0ac74da920c8\nd720d0be-73a2-4135-a3b0-8390875159a6\na0d15de9-010d-4be8-9429-d1dc2bc36707\n6b9bc86d-e196-4ab8-a86e-583d9c300dac\n590da50f-e65d-4663-a191-4a624fc77b79\n4c6c5c2e-9773-4e7c-9744-00cb52c6968a\n446b2ca9-886c-49cf-97e6-9a6d0956780a\n82c65205-7aab-4be9-a744-447486ce4a37\n9ad87832-cd70-4bf6-be39-e7d509c4274e\nebaf551b-fb26-4d6b-ad7d-f366d8fc9f0c\n59abb89a-4d8e-4629-858a-63b2ba67cdd5\nd9cf1095-cc00-48a0-b7a8-fbf6e1b47db7\n1ab0f152-cf2b-4572-86cd-e445eb7485a7\nfc8bce46-c4a7-4a1f-b912-15ac14a93069\na5b72136-2274-4359-870d-43ca0e7a1c28\n548d466f-f721-4e82-91c4-96be22643da1\n69a324ca-bd98-414f-acd9-05dcb57dd4c7\n55899f76-58b3-49b9-9eaa-319390269a6c\ncdc50a8b-5102-4422-b8b9-4acc4bc1915f\n37f3b9c4-f9c4-41c1-9eec-370e4b2cf29f\ned37d629-677b-444d-a09b-206f23388fae\nee5b4e6e-c39e-44c1-aad8-11d0c54af2ad\n739ea918-e3fc-4da5-8ce4-8896aa218632\n0e16ac27-62f2-4bbc-8421-9f05f1ff9e71\n212cb9bc-cfca-4867-aaea-a6a8173d46b8\n1637afe8-6192-4ea9-86f4-79eb7a34d898\na9a871f6-d7f7-4fac-8d04-d10eb032618f\n59f7c9cb-9f22-42ec-a667-08b5277cd790\n34a6946b-3d22-41bd-843f-494e0e446411\ne8122d30-70d0-420b-80db-968655430d2e\ne56ed58b-0a05-4e8c-8da6-0065ea959412\n527456c3-7227-4244-8dff-41b06d3610df\ne6f9ede0-8bad-4b64-b6c4-323fea9a7460\n8c3968ff-d5de-467c-97f4-2a816d3c17be\n52f9118c-1b03-441f-a16e-479f5b69400f\n00e92266-5279-4c41-a8ab-8ba92d0e1bad\n2dafe7ab-87da-4476-939a-6fd4af987d11\n0f853652-b5cb-4178-b352-3e67705d0b05\n8b8e6e96-724a-4937-87ff-2d3544d1909a\n5930fc32-cb14-4a49-8307-6cac0bbc5a46\n46de9df7-1815-4b41-9732-d71d3e69344c\n9cec133b-3bdd-4cbd-ab02-bed02a2326a9\nac6f08b5-4fe6-4850-bc01-c6dfce2d79e8\n125ca779-9176-4bbe-ae4d-4c5ecd946618\nbdb516c1-9abd-4d4d-b562-8c07f3d6f9d6\na45f3989-9446-4f02-b6e7-2d08b269b711\na7d1caa3-305a-4142-bcc2-1964f2446abc\naeecb9f0-7c9c-4a29-80eb-9bc2478d6c9f\n49976ad6-8b9f-4fbf-ac1d-2358aa20e7b7\n60a2543e-84a9-49d7-9e45-7f8aa55215ea\n384cf586-7247-4e15-8b95-6b5f289b00f2\n7661daff-d45f-4fbb-8771-e4f38e72570e\n8d54300d-a56b-4e14-a94a-21128b5113b4\nd3a36bcd-3af3-4e59-8753-d65491d48c26\n0bedb947-8d36-41d2-be30-4f40444c7bf6\n89d77cde-f1fa-4084-b0fc-34ca8a08e1fc\nf59cc5b3-f017-4243-bad2-9935e9518daf\n51508086-a97c-4e17-af33-49f28e528e1e\n53a6c7af-39ea-4229-a602-6a5b06ced18b\n09aefea3-daff-4a8e-b1ae-a2a9f24fd811\na368d0da-178c-4e3b-8edf-a7910df2e2a1\n7425b7c5-5c79-44d4-91b6-1bfb5a4fb7b7\n25b9fb3d-9225-431d-9c84-d59ab32d6e52\na3a850aa-586b-4202-8ff3-b5d05752b48f\n421f29f0-a1d5-407e-8034-b18414c9cc6d\nb85a0ff7-3c14-4e1a-8865-e9aa9be65a77\nfdf92b84-597b-4056-821b-315767d16eb7\ne10282e9-a367-42d4-a1c0-6b30a56cecef\na9ace7f0-cc56-4413-81b7-31ed7467991e\na30930f2-381a-4e0c-8458-0064e03f5f42\n19c8e105-ad1e-4394-a63e-24c5d8e7e4d5\nf95b864a-f815-434d-bceb-630381fd8d70\n2fd8536e-58a3-4f7e-bbd8-d37dce422521\nce79c6b3-adc7-4ec3-8273-b25699e9ea88\n7149c1b0-0200-4032-9672-30dea1b87907\nc297a984-3bca-42df-8924-b12d6fac49dd\n6600ce23-2e2c-406e-bcab-500407b8e1f4\n4093322f-2200-4b18-98b9-5f413c297fe5\nfa7c46d3-78c9-4206-8563-c295bbf1364b\n4c87d504-8dac-4a30-ac8b-18d301d7d23c\na5691a93-e578-4dec-a1c5-c6b5ef7951fb\n41301243-a347-42d0-8888-96513123cb4b\na8e5dc82-7b9f-4d80-a6ac-09cb91fcc1c9\ned41c217-3f5c-40ec-a0b6-75276cefa353\n12aadb82-505d-4ef3-a3ca-1ba941233b4f\n85a64256-66d0-4c89-9dc8-939568fd773c\n365a4825-251a-4061-8324-d0f8d1cbd03b\na2bf42dc-6c4e-4b90-b6b5-6c1328c4d78f\n721d27d8-e843-439d-98e3-1fb9e2e887cf\ncde9e9f4-b9b7-4e65-bc64-c2bceac5a093\nca0e32a2-5684-4235-b1d7-4bab6dcf32a4\nbfe23cfd-28a6-4f13-9c1b-1c03e34452fc\nd3609e96-0b55-417c-863f-96e2e71dcbec\nb6f9b9c4-cc74-46ac-abb7-1b4515c3a653\nae49a531-6753-4ff6-936b-28b91873c52a\n77a6ccdd-63a3-4480-9e02-e7f21ffe70ad\n301b972e-92e1-4db8-8f55-28181853134c\n93a56f3d-b8fc-42ca-9485-9f45e24f013e\n4fd29ebb-efb7-4153-ba71-2ca8ca838d98\n376954ac-36dc-4798-b067-dbab470ff0f6\n7aa73b2b-4414-4b42-b8e2-7058234187cd\n784788ca-0b57-470a-871c-f22b35b7287c\nbaf40e00-e4a7-4dc9-a8b8-48e8f15410bd\n56120d8e-54ef-4d88-87f3-b101359c1485\n8aee55bb-c906-4a5b-936e-907886a4976f\n0f44d053-151c-4914-aae9-e05e7f114576\n019a2fdd-6f8d-4332-8708-2d3fd8119c01\n95644801-c705-4472-a15f-8bad315efdd1\n503db35b-9076-47d7-9d97-5cbe33de27bd\n708574ca-31f0-4c71-846e-a3d0274fe65f\n6bb32094-1c00-4de8-a24a-fae6b4a85a56\n4655f0c7-2c25-43ed-b92e-c26882f3525a\n6ae3a2a2-a20e-4421-87b4-bed6592328ac\n16a6ebe4-c8a6-49af-bad9-c5e00f8df292\n02eaf45f-d6cb-471a-bbc8-9a7d0c5a6e3b\n6cb19180-bac9-48e3-b433-827f0d24e612\nffb5b879-2d4e-48af-85bb-a6267ea1e3b9\nee88813f-df32-41b4-9ee3-54cc7d12f95b\ndc00c6e7-5b3c-4047-81e0-c6c532005aae\n701ebd11-0ad1-485e-bba5-d300850b525f\n03f1465d-12a7-4c11-8b95-62dc40b4d227\n98db1911-fbf0-4ee8-9ba6-d64d304dd425\n64b6e4f4-a4a9-41bd-a389-462e32771287\n0ae474c7-61ec-4957-83e8-a6f0b6e783cb\nc1241eb8-f574-410d-89ce-c3ef7e6c3aa4\n6a3c9207-17fa-49c9-9c8e-e3e7d8c883ea\nf23a1186-e9ff-4d16-b5ac-188d9410c909\nbd5d568a-7743-4b93-a841-e09650741759\n4c298143-da06-431a-b667-861139fa34c0\nba98777f-f5d5-4b29-9891-0d018e7b58b7\nd0a81cde-4918-4e18-8d23-baa3c757c495\na5e00a83-cd4e-4cf3-bfbc-a5784b762130\n3aeb15cd-74f2-4469-8e0b-0e4003505fca\nb87f1199-4ff2-4833-89db-e5e3e165402e\n7dc77e8e-52fb-495c-aafe-9b59dbf0d926\nf6cfdddb-532f-46df-90b1-ee4549580f7d\na9fb7cd6-46b7-4d33-9b14-65cec844d59b\nc0d1dedb-a1d7-48e0-9f48-4b1aa4815408\n9b613774-8838-472a-8053-928877d43e2b\n344591e4-9639-4287-9c0e-fe678211bb40\n6e6b706d-bb3d-4d5a-bb12-6b9c9bf88433\n74adeff0-ec41-46ea-8c70-e3af1cd81038\n82938359-257d-4c2d-9271-a3efd3798b20\n48c8ebe1-0b3e-4216-ab17-074483731f1e\ncf35fd79-9b47-42da-98df-e8730d7b812f\n5179c379-8c41-41af-a9ff-7b58b888508f\n9b6954e9-a7ca-4a24-a49d-e2f37f1756b2\n9c565ac3-077e-44ef-b7bc-e3854adfd2c2\nfea547c7-130e-49ab-9467-9efb009ac2e7\nb9963d0f-2c91-4738-9352-667a70770f85\na7774ef7-e283-4229-b32c-d37b456553f0\nbee443cc-bdba-4160-839f-b1d92df429ab\n70173b1a-5629-40ca-aeb3-6da87aad841d\n4d8eb5c1-240e-4a9e-a8e0-cd4f18c434ec\n35b170ab-8b9f-4307-9358-2247e5172202\n6c06bf85-23fb-45b6-b77e-795c28661428\nf6165cf2-8816-4f2c-98d8-b55a1b9f7244\n1653a777-b1c0-4962-bb62-20f9d3ad5571\nb1a4fc66-7e8e-43d0-a66c-5b3ede556158\n2d2070bf-2063-4a7c-873c-9848c00c8976\n44f5b80d-3be1-4d74-b308-677453c0dd56\n31e2e7d4-afed-4f76-8535-d848d8558f8b\ne5454133-f867-4752-8809-68953a1f1011\n70a6f77f-c3fe-4944-97ae-2c187465e4d3\n71286e82-87a0-4bcd-a364-f4e546055d29\n9b04ec7e-e78d-4be2-8be8-4f885c8f3e84\n09ee76f1-b360-4871-80b3-4c345688aa7a\n8f420dce-24cd-4b3b-8d58-50168ebff062\nb4a303ca-7a56-4be1-900a-6db411f83856\n28028134-79b0-41c0-84c5-2b83a6c56cc0\nb2d7ef61-7d63-4f63-be8b-ac7b303dab08\na441d8a1-d800-41d9-a87d-6245c1b1a44e\n154cb460-e4bb-4d29-8d78-b0593be00b2f\nc044e554-35e7-4f37-9c14-bb84acdfd6ac\n2d54c2d8-7954-4fd7-b9ed-ad4a922df61c\n7d16bb67-012b-42bb-bcfb-a1c36bef654a\n8948bfd7-dc47-4f16-95a7-be6ecec86c86\n25b678ec-9af7-449c-b474-c6888f191106\nc81eac59-46dd-4026-9496-3f0c80424162\n7eadd817-30c6-4734-9bfc-d07851eb9997\naff3949d-fc08-43cd-8063-ccbe5ec9c0f6\nba64b956-472f-41f6-a595-b4ed2829d1c8\nf852750e-29c8-4aec-9445-f805e3a6357e\n95bc96c3-65ae-4012-9f79-420b217401a5\n44e2885f-e6c0-444a-b015-a0e5512bd90e\ned2afa6b-1656-4572-8e87-21af893e0c7c\n7df6eac4-b25e-48d1-be18-de3975237161\n71027be3-a496-4f1f-83d3-981bd1c87c63\n2a4e5620-5d57-478e-aa12-30865994d494\ne39ad2f9-b463-4408-9e19-520c7877b134\n89bffcec-0b00-45b7-9b69-f2eb9fdbf897\nbe88366b-69c4-4d6d-a0c0-3a44641f236b\nd9328446-21d0-469a-838a-698388037ab8\n5eafd589-f86a-4841-b201-6b305c0e623b\n400891c6-12a8-481a-b221-5ce384a33902\n3b5a8a14-bb01-4ee8-a6de-ec4edf998a49\n2d9cc851-661f-41c6-ac46-83790f6e064f\n750c1889-a7b6-4e74-ba6f-d612c1fd027c\n7da284bf-6c25-405f-b127-899dd79b3676\n8bbbb316-8f01-455a-9d7b-9558da1467de\n924c7fe5-f8c9-4916-b6e4-27af6942ffea\nb3cf2d32-3556-4759-ad8d-1722122be257\nf3a05b70-12d5-48ac-aa4a-f861e0adf259\n82fb7964-ec7b-4c10-91fd-f796b79b6000\n0cfce252-9a67-40f5-84bd-4bb7848c8a1a\nb3ca359f-dc84-4fcb-908d-50adc1510f2d\n162c296a-6e82-43a5-824c-3981764c2be7\nd948416f-83d2-498c-8420-292977324028\n4c472861-4b72-435f-b3ef-9ba121518f59\nb885433f-10f1-4290-b146-4a1a06f87882\n887978f4-b0fc-45d4-9f33-e5553fbabc32\nf3025807-df4a-49b5-870f-05855316b0d5\n5aba6d5c-430f-443e-81cf-2b1c1720fc89\n01aab3b2-c984-4546-829b-52311a998012\nd1abcfd2-77a9-4240-bd87-3f8164f64849\n7a9a7722-024a-4205-8195-f547e7d520ca\ncbc29ce5-3037-4764-a350-2aacd30c46ed\ne2c2f6b5-c9bb-4fdd-b0ec-4661e0919da7\nb9ee9a29-b187-48a7-8d04-cff62a889e16\n82a2a024-07b0-4aa5-9833-08cf3b746989\ncf3058c6-c1d9-4e7c-bd7d-3448a605fff3\nb2f7ee4c-c8ba-4cdc-b114-861d5a6b1d54\nfeebc3f3-c579-405d-83f1-4f1cceeebc9e\ncbb8e179-34cf-4008-9345-866a8376fd17\n1d198449-c4e5-44f5-8e50-47711229f6fe\n059598b4-6ca5-436d-a089-f5483b20f13a\n7af20b04-4627-46ec-8b50-107198cffd28\n4338daad-2bc3-4d76-afbb-c97dde2d4700\n1625e3e9-182a-4ab1-9a57-8d0ebccce0b4\ne02f9869-f1f8-4cf8-bb3c-a7a22531e8eb\nb5a8638d-f973-432e-94d5-b6c7ceb71b95\nc7ee6a2e-40ef-4b84-a46a-3a60c6b160fe\n82f57715-a9b2-4cbf-b1db-906ce5d02f3e\nbf072df1-8e4d-4b31-b084-9d0075d3b574\n8e28fb1f-f22f-4b8b-b6ff-c839ac315ead\nad88d9d1-93c0-4a4c-8c3c-877cd832ee87\n8cdd7e9e-1192-4abd-8c80-47fcb51d3cf3\nee18d573-50ca-4763-a322-d69479a683b5\n40a05f84-59c5-499e-bfbe-e49aa67c77a2\n23d1b7f7-0219-48c8-8324-36267605799b\n91561250-a284-4088-8d99-b38535a492a1\nadc07714-c60c-435d-b697-b90e7e4e3169\n33545b04-fe63-4808-ad7c-6e06fc99679c\n0234aab2-07a9-4475-b892-23227df23e2d\n7a7f6122-d9cb-4751-8bec-e2e66b34c465\n11dfccd4-9920-42a2-94bb-e046691e85a0\nf8e3158e-4c2b-4748-8b25-3966e65fd58e\n4e7f4d8a-4b06-4e79-8807-7d3f3b211710\n61cc27d8-a120-45ad-a240-e66c12f4ce0c\nee360af1-ba0e-4559-a9d2-5c800b988a82\n51700c89-399b-491f-90f7-6baa1cd0cf5c\n73bceb2b-3f66-46dc-aafe-794b34d8b46f\neb7dcd23-7085-4d25-97e1-cfa35a9a295c\na9b37ed8-cdee-4e8f-9a23-75ba89cd7d80\n19db6370-e2f4-4ac2-8acc-45eadea4e4e6\nb0d36808-41f2-4ba5-82be-089605b5dbf2\nf9028eab-daa3-4d77-a8d9-c0a0a347157e\n1a595210-71aa-4013-b373-6aeeeb55e261\n67eaa425-e927-4ed8-aafa-c8b6dc54a21a\n2532ba60-1071-4384-a19b-0896bf3a0411\nb12ea342-abdf-421d-8c07-a5a3b6b14410\nc8135565-7ad8-4ea5-8c66-a1e82337d978\n232891f2-f2db-44d4-850e-e45563af4e62\nd87ea57d-01dd-4b46-ac61-dfa87a3015ca\n1752005b-cee1-4d77-9113-fbb485a45af1\nd47d01b2-2cd4-45ee-a2ee-d4ee66a76dcc\n32749394-c652-4710-8a36-f0c03199a114\n41891bc2-becc-4eb9-8897-0312d1f12bc1\n4ecac123-8f30-4cbe-a225-5db0ddb90b0b\n9307015a-2bff-4b9b-9ac9-2eb630abde03\nc50be455-94c9-4acb-b681-1dc7382d0060\n33e0e0f2-066b-4bb0-a8f1-49068322d3ac\n3e0489bf-37d9-4fcf-ad37-3674ca5ee2fa\n942f1965-2310-4b5a-86a4-988d6a099cb8\nb20942d0-133a-4abd-9b5e-8249a48fd999\n8f93bf95-de1f-4b12-9431-cf064244c9a4\n20c8dabf-664c-49da-a684-99cf4f50cf0e\n206e2c88-68de-4b28-99c7-b924d35e5c97\n71175f6e-2066-4757-b693-9c927355129c\n5160188a-631f-4052-99a1-dfeac74c5077\n10b586e4-810e-479c-847b-4e136daf9e50\ndcd6a677-02ac-4805-a653-9747b1606cf7\n24afe0c2-d92c-4674-9d73-44d52e181066\n3129d5d6-5cde-4165-97b9-a9c983a856ed\n5f5965f6-0c30-44bc-932f-5832648fea25\n8e2b579f-d251-4221-aa43-ac343429cc18\n573e9d58-4961-4360-bbfd-46ae68a90327\nc30da034-3c8e-4842-a8ce-e881c3d9a00b\nbbbb02af-8c34-48aa-9d8c-8c9f36a13e87\n4f0e0fd7-55c8-4e0b-bec5-ed1ef1aa1964\nba3f5a82-d21c-4a35-b274-a1880a624dd2\n9cd476e8-4c68-4369-b498-b243cfc8056b\n0c7b50b0-bbc2-4ca9-ba0a-409742128892\nf801e050-04c5-4d6e-8395-ca1e0d4f65aa\ne380731e-b081-4a83-b7df-5875e76b10ca\n762c3589-7bcf-41b9-82da-77ce8b992381\nf5559dfd-becd-4bd5-bd7e-b5db3f480d59\n4a7e029c-9e72-4ad7-96b3-17d94bb9f855\n92142354-da17-4145-b79b-31fec101d37b\n3a65af19-870b-401d-8ea2-4b2fa6411bf5\n3c7db8c3-80c6-4379-8a21-147dcbe237cd\n66d72348-584c-4cfa-bc2d-ea2ca090109f\ne082529a-a4d3-4fc1-a3da-1c78d6b9da30\n3137debd-256f-4b6f-8aff-b861a9ad8013\n8bc73a02-d024-4fa2-9988-1090a8a2c1bb\n39d1adb0-933e-42b7-84d7-e58a61a7f262\nec341c9a-240a-478e-bc7e-b04e2351a09e\nd10ceba8-32d8-4ab3-a891-e4e67ad37068\n383b5d64-9bfe-49be-a062-c0b05e75c763\n9c9b127e-45d5-43ec-a552-f9da308661ee\naad30f88-4e6d-4fae-a68c-a5c1dcd38b93\nc97bd01b-82f1-4e3a-baef-8f8a17f5ec43\ndf8eb54d-6069-4e3b-890f-bedfd4770a3a\n6adc7567-43bd-4d0f-beb7-e9d425863f44\n95075962-af9a-4359-9862-5c6f40d492a0\n63d191d7-e129-463b-b80d-2fa74236595e\nbb272634-7453-43ca-9aef-8394d5e6f27e\n91cc4d48-793a-4e50-acd7-5dc0168263ad\n6f0879f2-9b94-4aa7-bdd7-289567b77a5e\na3979369-719d-47b0-86ae-9d3e82ead44e\n35c1f639-4cc6-4a5c-990a-574d818fcb7b\ne332c560-6036-4c38-8d21-169458f2d28e\n9909b718-e276-43ac-8979-945b5a45747e\n509bb091-2605-4da0-9a7e-c7852e757c50\n87074bfa-3b8e-4f7b-b12b-0eff7b81de59\n4781aa1b-6efd-4d39-8c9e-e1bd389fa086\na4569b47-5555-4f9f-9676-14f0d951a3e4\ne4baf593-7d5d-4468-a689-2fc22311ce4d\n4d73d7ad-0795-4b0e-8d09-427cd2d5f9d3\n41119a3a-cb42-4e7d-9e40-1c47c5d419cf\n874a30e4-a77d-4b58-aa51-94bfaaa632b9\n3d45c00f-228f-4377-a040-7afca2398193\n1d05e06e-bf47-4d53-9d18-ff1e1b6de554\nacaa407c-e066-4e4f-a7b0-3227bf0e00ab\nd46d6a53-2d10-4cb4-abae-b66726a4fbe2\n538c4e19-f251-4373-bdc7-ef44ef103686\n7a475686-b505-4941-a899-2d872335f0df\n755284fd-8c1f-4f10-9c80-d01001f2cbfd\n389f1a9d-2617-4e9d-bccf-ecbc6db7074d\nceb07bdb-bf9e-40a2-9448-3c594bf8b6f5\n25203ec7-c699-483e-8fa5-beb8a829ec47\n06e1204c-753a-431e-976a-3c2c08567445\nbb910069-6af4-471a-b5d7-1fae17653f0c\n5b0fd3cc-f2f5-48f9-8105-0b44c18215ee\n8c9657c0-0ef0-458e-bfe8-dbffdf7d339c\n4d17b252-5eee-417c-a920-05e7aa953fbd\n44e1881c-44da-4037-9c71-3df5b83acf1b\ncbf0266f-0303-4308-bcc4-da83f26bd6d4\n4c886284-1249-477e-85bc-9170accd1769\n8dc35f96-824e-4bd7-89f6-3e649c5837c1\n255f3918-a0e3-4ed6-af43-1aa0b9c668ff\ndec2fda1-680a-40c5-87a1-d4cfe9b04c59\ncc2ae7b6-b9de-4b56-b9a2-f8f9d816a136\n89744cad-c53b-4861-a21c-cedf1410cdd9\nfd48fe01-6745-4766-9063-ebb2b30dccc9\n037d3851-7e2a-42e8-b82c-28525660d74c\n2b2a52e9-b93a-46dd-8ee2-d2b5edd15479\n528de7fa-aa91-4bd6-8677-dfea89bcd67d\na5865762-b948-4872-a1bc-8e69fb560029\n26f4d97d-80de-4102-9303-d7bb0bc7c9c4\n42ad1985-3852-4dcc-a526-aff992145531\n8ef03a5c-f70d-4e0c-ae5d-7668f912de8d\na00fb9b6-09f7-4079-acc6-86ce28c341c5\n81f20b12-c741-4591-91d6-791d2fef1787\n5971c78d-fcaf-4321-a301-12b7122f3f89\naa701520-1b97-4971-86f8-d1c7dd4f8983\n20ff65ab-b5b1-46e5-b7c9-0939ce63ef6d\n36959e55-edb3-45f3-b6b9-9588fec799e6\n08e70930-9012-4109-af68-49d30cd999a7\nbe048ca2-ca20-4481-acfd-f4e06bd85b24\n51a1bf59-e663-460a-b255-a45055f4785f\n0d1cf58c-6d0a-4648-af21-6f4b2e056280\nb7f1442d-b80e-48c0-9a70-23d76d4292cf\n1299dad2-5bc1-4575-86ec-bfe7e9db6800\nbf8e370e-cc5d-4f1e-92e7-2fec4aa323fc\n31959e1c-f475-46e7-8703-246bc829f321\n3909ed28-65d4-4dd2-aed3-f75e9946d368\n7e84c074-5edb-48cd-bb42-b10d3d3e671a\n5b2eea90-3964-4d84-bdd8-37dfd8b0544f\nc1a37d5f-ffd7-492b-9310-44346488baa8\n5c05988c-310a-4863-83ff-e920fd075be2\n9f1dcdfd-f5f3-4ad1-aae2-42bfb273e7be\n14e898b4-6824-4e48-a79f-01d5cc0996ba\n11b704a2-3152-472f-8ef6-740e09614004\n34638670-dffd-47e3-a9f0-01958e5ffa57\ne3e7557e-579a-4b21-9a91-9fc6b254a7b4\nc629e7c1-7928-42e7-b8ac-98ccd9e2a539\na5b1c994-ae42-4eea-a2a9-020eec1cfed7\n371cee5c-ff88-42fd-b16c-b493b928b955\ne9b31160-0d85-4326-8c5c-c3545ef3ec10\nb10bf770-7bc4-41a8-98ac-fb24dc459405\nd4f93c2b-8e07-4614-8fe6-915863db7ff7\n5608d3de-4df3-49a7-bc42-d9616e0f2ce1\n42aaadeb-2bb1-4a39-8738-3f2470135b77\n84da7011-fa6c-405c-9ffc-985e70403d8d\n68e52e1a-d024-476c-bbb7-2360d31849eb\nbedc5eb7-dd10-45cf-87d1-a97f6685a961\nbd53d380-3be9-4b6e-a652-401d58f743a6\n901e18d2-43c0-4d6c-b37b-2ce9faa64827\n357807ec-6605-4e01-9961-40e8299aada2\na117fb8a-0290-48b4-822c-4dc1232cbea5\n027700a5-e114-461c-b84b-1aedb8b30a08\ne71acd1a-929b-4ac0-9d53-36dea9a85d49\nea477d76-525c-44f1-833b-4dbcf6c34281\n36744fae-28a3-4bbe-9b43-670540cd59f3\n99ba291a-8c33-4d19-a303-3d05cc0c824b\n70b2df2b-7007-43d7-b1b1-6445f860a5d0\nb38dfd01-d5ef-4768-b0aa-eb5eaf3b4b9b\n51289fe8-39aa-4a52-a94e-e5708bfc5e12\nf9a0d01a-d8dc-4e52-9acd-ae818887d333\n532198cb-297b-4116-a2cc-649e450d57d1\n04a9143d-fe35-410e-8709-190048ec0273\n6fb49806-f4a8-44fe-904d-2c85045f4513\n30c6039e-db9d-4936-9aae-8328c431b520\n90471cf7-69ab-4f52-b585-ed89c01d9b51\n3d9805d7-7eb3-4629-9657-925179327763\n01814e1c-1593-4487-b606-6c2fc52f84f5\n8d98984e-4a42-4064-a918-d1e36b82aab7\ndeb3cf8f-1e7b-4dc2-9585-b024eb8271de\nafe74c0e-c4ee-4901-8362-29591c4dad81\na57ea467-0c19-4bcb-baab-6c0b7e8e7761\n5a36fc7f-4f65-4302-adad-ebae5ed64eb9\na509ad02-6111-4729-b6ff-401cdca69610\n50cb2229-f9ef-4f96-8ec7-fed0d6d64d05\nf72a1fb4-d192-41d3-843b-82f3bda62f20\n9013713a-e59b-4804-bf0f-575c1f15a88a\n68c188c2-7a02-4c3b-8e5d-1526df7a4465\naf35f944-cc61-4642-9d07-d5419d0f6f5d\ne78303a4-4d1a-45d3-bb51-38491f29011b\n2cca5a53-324e-4c3a-8986-6fec843b359e\n69905e03-5146-4c5b-9d2c-406c56e7c64b\n293961a8-c71b-49a1-8904-c67bc5fe6818\nd368074c-8d13-4f7c-8ba6-727f215f0387\na583fa4e-284d-4b1c-8fe4-d70a06a65ed9\n71f95afd-1438-4f8d-b4c9-5dc46a85b372\n6f94d6f4-eb16-4b11-bc14-6843a2593949\n66f03d0d-ed8f-43db-bc10-e77e445929ad\n5ad232fe-973b-44fc-9905-63b9d0d314bd\n33ca5a61-afed-4616-8ad4-2c332261bba9\nfeab3432-161b-4da4-8bca-b1e7620ecf20\n6191b64d-1481-450d-80fc-066bdcfbcc89\n53064fdc-e854-4ed9-b6b9-8521b6256fef\nf7ecdeab-e80e-4f92-8ddc-002ee9d37870\n0a346165-f056-459c-b7d2-6695061c5356\ncc72b1bc-7b6c-4b8a-801f-26da6786fd6f\nd08228b0-ddc0-4c67-8e7b-1a591e6e81c6\nfe61b738-edaa-4197-bb42-63bfc2ff80a8\n74a68215-3ce0-4fc5-921c-8cdb1866daea\n606aa155-4ede-42c1-af4f-4ec93cac18d6\n3d9c2c90-72ed-40fd-a59b-e226156c7ab8\n5841641a-031f-45a4-b22e-4d58f16b4283\ne5a41821-738d-4ecf-b449-633c3e241684\naebbdfad-3ad2-4144-b6b2-a8b1f33824dc\n02109e3a-235d-42e7-94bf-1dc588ff2015\n02243872-5f41-4ab5-b2a7-39c3a6f0428c\ne1250f58-29da-43ee-a808-28579efdd24c\n2a9c6dc1-d07c-4425-a0f0-50676052e2c2\nb2eeec97-c246-43f8-a7eb-ba237d292dbb\n9ecab837-5c67-41b3-bd7e-54a38ac0e493\nc0d15d31-701e-4d0e-a4c6-d7b5fb417e10\n4efbe363-ed1e-42b9-b6af-4ab12015a9ef\nad21f6af-6751-4544-8c87-7a0598260dd4\n5f06e371-fbec-44b2-a32a-84260b35b7d3\nafb5d237-f4f3-43b9-8447-21734d4562b4\n5f904bb9-c11d-4b41-9d38-edad22116384\n06b01632-869c-481f-a1f9-ca7a7105b0ea\n8867f62b-0b71-4300-8b27-14c2bb09aa89\na814149c-9664-4ee1-b561-665f2177f70c\nd0c0bf65-88bf-4b29-94c9-faa25bc3a963\n557f3d50-1b4b-4a93-b2aa-2e0b38d54943\n924da355-52f7-4f1d-a7f3-338f82d0913f\n784a327c-9453-4212-99a0-b20a78fb6696\n7bba56af-5a40-4a7a-aa29-54b1a58fd653\nc0f5f9be-ca37-4bd7-9b85-019169ce2b01\ncb81e88c-a98d-4226-9722-e466b2923903\n4efa7f39-2849-4606-bec2-245e477e05f7\nfffd8692-27b8-4051-bcfe-0f55fa1f7a67\n68cbf88b-89c3-4672-a8ae-6f4ae1be402f\naa153cf8-858c-4ab0-affe-6df9b5c0e2a0\n7e37d8a4-f79b-4c4e-a8a9-9d8a66e55796\nfeffa898-8d2d-4905-b7b8-a6dc57290cd6\na3b05fb3-7e08-455b-9074-a650dd9b8e71\n145f372d-39cd-47e3-886d-4878478cf0bd\n0b65f6a4-d7b9-4b06-8c97-482456aaaa93\n9536be72-a0f3-4065-ac02-952de91f8343\ne9dbd07a-1c19-458a-b8f8-4ff91c98f12b\n8174ff07-0280-431b-8394-aee9d29e08aa\n6531e595-9417-4390-86a2-a43d72d76d79\n3d359336-d75c-4ec9-82fe-e3b3d00a0bed\nf71cdb4e-332e-44d2-87aa-020a5faadf2e\n3d06bd33-b801-4c41-8cad-120525608107\n7e5cab55-ad8d-461f-ac2b-322b20552ebc\n7ed8c20a-f20d-430f-a7ce-9dfa86599bc9\n34daf90f-df1c-42aa-8c8d-c0bd7fa5df0f\n9623340b-db22-44c9-ab48-827ea5b63f25\n2732007e-ef28-4add-8e7f-31086c3ec105\nffce48a2-5dad-4ae6-affa-2d97036ff8b8\n7f59858d-318c-4558-b066-7bd2c45d7f85\n43b7aed0-9c4d-45ee-a73c-8adf00505913\ne6471076-a16e-4727-b46d-1af91cc12424\nfd057dce-5e67-4246-ad45-cdcab4eecad2\n9559b700-7b6e-4384-aa07-258ecd87920b\ne26c5664-2c68-4e6c-bf36-bdea8346f435\n34cd2acd-efd9-47e3-8a07-a8a9337347f6\n2fdad905-ca1d-4ec4-bf4f-ba47732d6111\n5b19929b-542c-415f-b22f-98db0cfadacd\ncc298701-ab1b-4622-a52e-e71b6110ca2b\nb92adf24-a9ba-458e-95e7-e6d1bea3a60e\n36ed0487-2e73-40b2-a093-dd51462cc272\nf7e2274c-4dde-4287-9292-49dc5713d7fd\naaaa01a9-439f-4b32-bc72-c5ec783c22d9\nf327e0ea-cc53-471e-8ddc-32b58998f0e0\n17819651-f656-450a-a53e-a503f31172be\n79131ef9-10d7-40a8-ab18-9147f1e59c40\nff226189-fbac-4ce8-91f3-c537d0f6d81e\nf2234d30-a1bf-4ce7-aa84-f9d1af6fa342\nd8278e39-fe36-4fc2-b6eb-387fbb4e64b2\nb6d8572b-61c1-44fa-a082-e08cbd9ceed6\n0c7b6e86-c4cd-43b4-86f3-6833de508b22\n54d731a9-6dbb-4371-8e76-08d60bb966a7\nd4f4ca0e-53ff-411f-ae5c-a6c85c63f7eb\nfb15cc56-438c-43a7-967c-2cd32c024f19\nbbb7b983-342f-43a5-8422-7aeef41415dd\n07630613-568a-4fed-9093-68b7dd14dde1\nd19602d8-0104-4644-9e3e-63e650cb6043\n19a71a87-9ec1-4274-b19e-010af0a781bb\n676febc9-37bc-43aa-bed1-e3e15f769f53\na6f86e5a-d3ee-4d72-935b-b1764351bd7a\ne6729e57-a3e7-4bf3-8279-8be6e07aba05\nc60b0686-ddbc-4fc7-91f5-f769c7f4717a\n2539055a-a029-49c8-a221-20861b297025\n4de5bcf0-7764-444c-8e3d-d2b4dddc4c9c\nbb320f38-b917-4fe8-b189-cba9aa461b14\n0d2b1921-c16f-4a09-b10e-6596745f2293\n61639819-7084-4013-9b0e-4b341fe6f2e9\nfabe9cb1-b516-43f2-b2ea-9e01f38bf78c\n218eaadc-756c-4538-b753-9fe670827836\n5887cee4-eeb1-4807-baea-d351daeac52d\n814ee114-f9ed-445f-ba24-707c67ed2ff3\n7b30ad2a-e68c-4b54-b66d-9a8416354d11\n83d0c9d4-6f32-484a-b670-747549402cba\nd0b0bbc7-5117-49fa-8cd2-7ee517bc9f61\nd34a9838-bd98-410f-8f2d-d8e0b7e7773e\nf0e20180-d701-4f5f-baf1-c77bb3f1fa67\n9f2f5c88-e37c-4e91-9dd6-d1cad6059181\n7a0e277d-9795-4cc7-8316-649b3ed92684\n12772567-a383-4de3-9f89-7a9c67e414ba\nbee765d7-5066-4af6-b427-3e8926ed7e8b\n0fcf679d-59a0-4262-881f-2dfa8ae1b8b7\n48e58e48-2f4b-4770-ba61-be00273d99b2\nff408660-6d64-4fe8-abe3-2a9645c24ab4\nfaa06bc2-f552-4e2e-8fb8-5fbf298d898c\n35b1da3d-b6f6-4680-9ed8-4fe155694716\n605ddc17-f043-4a2d-9262-43ebe02efb8a\n2a7db0c3-5db1-4f90-88f0-65b63306207e\n26c93040-7846-4c7f-9680-715679b97028\n1a068449-3b5e-44c7-ac72-71628d0b9333\n4c1faef3-6147-498e-b65b-7eb7c948952e\n61f98050-df7f-4fac-8d26-412cdc70279a\ne7f98cb7-5af0-45a7-a457-0a65d58dc109\n9d24f316-0a9a-4615-b384-1e8f62ced4b0\n0a4d962f-cb1a-4438-9447-60610eabea40\n132942ec-da93-4002-87ce-10bfabc485e8\nb417d7b2-31b6-4d66-a74f-9b3d3e53c73f\nc4decc09-fa69-4503-b5fe-8347929d0154\n1f698a4e-50ce-4b9b-b28f-2dda2b950339\n82e1c1db-d392-49fb-a18a-adc839485a58\n96a26662-4073-4cdc-87ea-e5266129ec1f\n64af3661-a308-48d0-b2e0-c912fb3ae683\nf31d79e9-572c-44ab-9d14-91d17823efba\n5ccaa9f9-d545-4eb7-a275-ecc116d63947\n4958d47c-6526-4b68-a39d-fdb7715fe360\n0c522ffc-7e1d-4f86-9e37-25bbac8b33e0\n6c6d50a3-3d43-4d33-a803-a20ca6454a99\nb10bd0e7-e718-4f99-b071-31c40f86951a\n658ebb3d-3cea-4b5b-8d94-8269b39a5eaf\ne4bf2fa8-3cb4-456c-829a-62b78b5e92bc\ncbb035f8-c057-4589-bb72-1d62f02c9e7c\n07c7e4f3-a63a-4294-a16e-b24e6ad1f4ad\n3944f10a-ed86-4ac9-91d6-fb86b32e0fda\n2be7d072-ba31-4c1e-ad7b-e321b7a171c4\n24c0b808-cfd2-449b-ab3a-2d7bf40ee4b1\nd592a1ba-7629-4836-bc14-9572fa1d1141\n5665555c-e3b9-4fb7-88cc-9004214130c4\nc697c64b-9324-43a3-88af-066b32b01543\n47cf843a-ead6-4986-b025-49587de072cd\n75d76f17-2c81-49b1-9dc9-54a517a2ddd5\n37ee31b9-9ea3-466e-b421-953799c17131\na1c74557-66ac-4669-9bae-688f6843cd45\n9518407d-bc85-4061-9ff1-c83db9747e61\n7f4a9557-b2cb-4f46-b8a4-2dc279ace525\ned00f719-ed40-4594-9b5a-b8e22d41057e\n057fa406-e6c2-44eb-9907-cbb68ee345c6\n428cb2de-c908-4c23-b9c8-2bfe1f24f8f6\nbb1db96a-e130-49ee-a3fe-fb7d94790611\n3c92ebbf-cae5-416d-b98f-5d68cdf050e1\n80345aad-5dd4-4a77-afce-c8279485d245\n738f260d-f4b6-496a-863f-a313211d28bb\n6d05f340-2e64-425e-bcde-1abfa96d80e1\n920a7161-2e19-480f-9b7f-e8e0590fc2e3\n43ee884d-bb11-45ac-a496-d0cc6a9d0d67\n9f599ee5-4772-4923-abc6-7bf8695108cb\n507d317e-6ff5-4e48-8c10-319bc6cdd62c\n215458f3-712d-4c9b-ba38-62e887e6a3a5\n6adaa2cc-3d9e-43e7-a416-6600ed96fa53\n4361505a-5a28-4bc4-9ab4-f95bc4dfb28b\n2bd4fc8c-6a83-4f3c-a9db-e2d4d4dd653c\n1948ab6f-8dc9-49be-9048-edd1aabf89fa\n3f753764-11fe-41b9-8940-f454ca3677b1\nb9d989d1-5f6c-4c47-ba89-326d939ae4cc\n0a1cbcf0-7743-45ce-b5d6-b71c4c110bfa\nb2ee86fe-45e6-4e04-be86-209254417730\n686dcb0e-b067-4606-8706-975e56491de0\n4d6d898f-079d-445a-b838-91aa59d842b5\n21dd1295-5695-4cca-8f33-6526146ffd13\nec9c90fd-4938-4ae9-8bf3-cfc946f9cb0f\n8ef19e9d-748d-405a-9785-0569f7da4201\nded6d5d6-3288-4252-9aa6-0309a35c7734\n7562f204-3a1b-4934-9127-0e26648b3677\nf45ebea7-8794-4a38-b3fe-731e83eaf741\n6966cbb4-e5a7-48ee-b8b0-7d33c2b48c3e\nb63d43d7-92f9-4b29-ba48-d4077f2c1f63\nba3ed237-649e-4982-abe6-65fda6d79cf2\n60c2a3e2-cc29-45f6-b2d3-da1bd2120bf7\n48e3d0b2-e612-46bc-8c88-a57615497795\n60245cf5-cef4-425e-8f3f-85dfc3c2a243\n517bb586-407f-4f6f-899e-b60ad9db89cb\nd768bb10-1a6d-430c-8a2c-30342c8c1e6e\n14cf64a9-ff33-4d76-9275-6de71e3c1b28\nad2c1e58-0268-4fac-89e8-96ad76ebd414\n029f8cb5-4d03-41ff-8235-3f7255f6a88b\nf1dcd92e-f4fa-4073-8efa-2d3a4c3c30d1\nd5bb69db-3c99-49f4-bfc9-5e9f9219a2e7\n12b5d727-5f31-4c1d-a06b-4b23689ed3bc\n4eb2895b-e90c-4e84-8d20-932c0c5a89bf\nfb5c438f-c468-4594-bcd2-0f6940c1a59a\n2a595670-237f-434d-b156-6df7944953a5\n05efa130-53ad-4986-8176-f6577d7e4bc9\n84cc10ce-394b-45a8-926b-7175ff3d5ee7\n76fca16c-7f38-4bd3-9456-268adf3102f7\nc986740f-79ec-452c-b183-55eea39ec526\n02f396bd-fcd9-4a4a-8c19-0586a9b5c454\nc6d2e7b2-f506-4767-9ab3-b19c4a027b20\n4d160f08-aef3-4f66-afc9-c9925b4c25e7\n01d775c0-d009-4034-9fab-3f1a3381b826\n7cb996d3-6809-4f13-9a98-c9189d1c3bb9\ne06d9244-c11e-4451-a179-70b957f1320e\n4a2e7d74-9cea-457b-8696-dcae5aa12269\nff7d89a9-c12c-46ed-8359-bc2e735d0d47\n7cf52bf3-5c87-437f-9fab-dce9002ec6fb\n651b71d8-c826-4564-ad51-9b1346efb4b7\n8f71da26-517e-44fa-b999-c4dda8983b77\n0ebaa60d-e315-421c-b25e-fe64dd0e6cad\n4bb8621b-1dcf-4e17-959d-61271b497297\n8a1664d4-6efc-44ce-9b64-cf286bd4d3b3\n65741068-0939-43a9-870e-32ac1e6f0c8e\nbdc24d22-0f05-4d0b-93e2-c7538749b3b7\nd52a467c-f8fb-4d7d-8e00-be3c67365d8c\n61204ea0-e1eb-4d07-951f-8eb334909b46\nc3d469dd-ddd7-4070-ac02-db06632a1076\nbf04ea95-1668-423d-9542-aad9999d3e63\nd58bdf5a-7db0-4688-9469-828c6bc41b1b\nc9c9a77f-1e3f-4e43-8548-8d2dab9e7243\nc01ed716-a5ab-4d8f-9c6e-4e1a1edef825\nb102d41f-9ed8-47c9-a561-dceebbcf1e74\na6adc7bc-d887-4a1b-b9bb-23865e8227f1\n974d4eba-5615-47ca-8b23-658e58fada0d\ncff52a0e-d128-4542-b2df-3b6c41c40679\n7b1a3c44-5499-4449-8371-b4594deb6cd5\nda9722a8-3a9b-4592-a57e-9dce0ed0143a\n1bad543f-9143-473a-91c1-35ac4e383a2e\nc2e57176-a241-499d-a3cb-a7cf4ea6a127\nde358cb7-3844-444c-accd-b25c63b81b39\n7a5ab967-89c9-459b-b540-51224edc4b00\nd918b1cd-a1cf-4e1c-9849-99988f455f1f\n0891c632-b8e6-4730-849a-19b2929efd33\nbc146392-7e15-4c3c-b64c-162cf1b0dd78\n6bbcec34-3138-4e2d-bbca-ef58211392ed\n4e0afb71-90b1-49c5-bd82-5e6db1ee49e2\n3935172d-c3cb-4bb8-ac68-738cdc8f885c\nacfb5fab-7b19-44b5-b5ba-14232c4723f7\n3d20a2bd-e61d-400b-800a-c1b09ff2da80\n4b051352-1a56-49d7-81e5-6af11d130631\n65f6a05a-b132-47b1-9f14-3b950e00a6ff\nb29f33c1-8ede-49ca-abce-9abbf8e064b9\n59049fab-a1c1-4058-a88d-bcf4dccc0b1d\ne1671c42-0efa-4fc3-ab81-1b153253b58a\nc93c0428-eaf0-4e36-ae77-fcc140a3779e\ne0218571-1688-4010-891a-d009528cf4d8\n4ea0a9b9-1fcb-48e6-8e95-1404577f554b\nbfd238f6-df53-404f-a99d-a92872737365\ne080670f-922c-4124-9502-b75710f7b191\n8201d33b-4e2a-4630-8264-91b2585edf22\na4ea85e7-4819-4004-aabf-86d7b927d85a\nf8538d01-0bc6-43b0-8291-de39d986e510\n13eaff6b-1aec-40da-95b7-e316c0e22b4f\n89c6b771-ae80-4c15-8331-90ea8948ca63\n05ca7f86-ab88-4fe6-8774-42fe0249fe39\nd14a1417-9598-46e6-ac4c-5baac8e754dc\n82e11906-74ad-4de6-8b9e-7910b82fa267\n089b418e-b31f-41bc-a907-25e5820eb73a\nb5776441-fffa-4d81-bfd4-fcf276f137f6\n0899f54d-4299-4242-a601-bb049588d6c4\ne409b8be-4079-4455-8fab-6fd4430e91fc\na74e8984-0d0a-444c-baa4-9a503c1f74a0\ndd0fe4b8-1ebd-4d85-8dad-89521f022f46\n7ae313d8-ab21-4811-887f-0aa3160099dc\n077089f6-0c18-45e1-be78-07d2c7c3a7c4\nf26590cc-34cb-4c04-a1a5-151a7bbfa3ff\n4a1ccd36-5331-4eed-813a-b3d99a09a7b9\nbd85ed51-5478-4026-ac77-c960bd543ec9\n820ec20d-dbf1-4ff4-8ea7-02236ed691fc\n93c869fe-f116-4213-9f04-04522dfbc1c1\n980ce65b-df95-4266-bec8-1177e0744419\n08f33d74-0967-4173-8b2c-cde3841efce1\nbbd24306-f5b9-43bd-8797-3d29ff60d817\n3891fc00-a931-48b0-9780-c5c1958e035e\nf5650d5f-341c-4aad-9d00-be3139ead16b\nea7073ba-5788-4bd5-bec3-e8bcf6582006\ne05ff064-1700-4674-be48-45cf81833555\n2661c600-27c2-4adf-a75d-5aaa7af2d9f8\n6fd247db-4c0e-4f20-8565-27ddd744866e\n251a0e46-c4a4-44c7-90f6-d05c97c58648\ndeb891d9-9530-49a8-92c1-87d678858ace\n950c5c8f-1af0-4ae2-96b1-8c1121c67599\na5ecbda7-427d-423f-98f1-84b8c376b5b4\n4fb9e1d6-86b3-407d-9ccf-08df69b8d6f6\n21185c9d-ea07-4a55-9792-8034d1754687\na6b8f0ec-1e39-42e1-9120-c332aa268a52\n1c25e614-c427-4ba0-95b1-f40d3ef0e414\nee723169-a886-49e5-92a0-dd1f488af91c\n597b0d63-79bc-40d6-b2f5-8bc95044224d\ncbb196bc-c617-4db0-a0d3-5d671b0a13e5\n69f9fdc7-3038-4804-aa0b-ba99f49ef766\nff59c533-fc01-43c4-965c-30c325d1ecca\n7a4cd301-d722-4cde-805a-fbbb4ca9902e\n6169daf6-968a-484e-b596-a57736e8db8d\na0d68f6c-db96-440f-a421-bbe036aa5c19\nf394b74f-eb60-459d-ab2c-ddd7ee456c5c\n0fc0e861-0379-4e46-b588-6166ab570055\nb94328ae-df3f-473b-9681-8d9578341ff2\n3bf2cff5-1fdd-4769-a05c-beecfc466ac7\nd723329a-0a29-4d89-a19c-2263c51cee8c\nd1d723f8-e03a-46b4-99bf-a6c599230288\ncd99b156-463e-4866-b125-30828c34797c\n657111a7-2cf2-452a-91ae-adf98ce6609b\nd98fd2f4-6244-4c35-ad79-2f6d3aa5df3a\n434ae02e-a5ee-412a-bebe-9b1fdd887410\n992a260a-9bdb-48be-8f68-8a83697e80ee\n393c5b36-29c6-4435-b9cb-8cec2422d7b0\nb39c2cd8-8318-4f85-b84d-be14875d2c4b\nf0875e40-d7af-49bd-ad7c-fdb135d592c2\n9bd6a2d6-db8d-4927-8ee7-cb05a9821d38\nf79e2824-ed0a-4eba-aec1-7e64130383b2\na8bd3ed1-347b-4737-ba56-eb9e211c0154\nc04f2da1-9367-42d1-9349-d688e1a2b13f\nd7ba147a-b1f7-4bb4-b156-df6aa5f3435f\nac8b9e6e-7da2-4221-a9c5-64fc7b75d97c\ne93fe628-31eb-496c-9527-913a1d63455b\n8be495ea-63cc-4ae1-a685-2c2b5c63a8a0\nba85298f-32f0-4fbe-8d74-76bc4c96aebb\n8f35b85f-55dd-4314-b45b-76eed807b712\nb23e03be-5fec-4cea-9e34-0e6ef86e08a7\n0692c5b8-817a-4dc6-b72a-800d1cfb5bd9\n3fb1ffc5-8ad5-4eec-b636-8d449ebac0ad\n1278102f-c133-474d-990f-77139a7c932c\n0c8463a5-30f6-483a-959c-81dc2c11ebfa\nf9f28d46-7703-441b-b418-a0fbcbbfe76f\nc8268748-8f77-4149-b3f1-fc4bacdff985\n73902180-828f-451d-b5b5-09d8a4a0cffd\n8d86bbad-810f-41bb-a020-d23ac1d74a14\nbde9a24b-4dd8-48a0-9784-3be7ded6765b\n27544bd6-a0d0-4768-a492-b7833e6d8ccd\n025df00a-c96c-45fb-834e-6aa42c1711d8\n518896a3-5f39-4971-87d1-75d2e100d678\n7bac7811-ce61-441d-8b7b-b3cf903bd115\n8cf75bfc-a907-4523-804b-d3fac67f957a\nfdc93458-630f-4987-bba9-eb786b25ef49\n389ac14a-947d-4066-895f-f0e3bbc54274\n1183361d-0ce8-44fa-9437-c8f08163328b\n16553f50-3fbf-4284-8bcf-8e2356d1f184\n830257fa-de09-47d5-9695-88a4c6b51f1c\n38b79bef-48ea-4725-8929-1f80f02d1cd2\nb0cc3c33-cd58-4472-bc0e-fafbdc54dc0e\nf9a588c7-7029-4180-9f41-f830f14f99de\nfa71e1d4-de89-4c13-86d9-b671f4cf928b\nae9cd502-105c-49cd-84b6-64b34e67dd08\ne9eb42fa-be56-413e-887c-b7c97af4e3ac\nf74e4fe4-c99b-469b-91a1-58a7b50c75df\n5ac83faa-e48f-4469-b4ae-abc53328076f\na24f9d0d-a46d-4826-80b3-5fa6cc8a2b7f\n768a741d-320f-43e1-a502-2e47e38e4bb3\nfa26f930-9012-41cb-9593-f88ba3365f9a\nf58fec5c-c515-430d-aee9-95cf5ac4faee\n7e1dd987-1729-49ee-886d-bf3654ef8817\n110f43c1-1484-4cee-bcfc-221d1a9ebb00\n4f480865-078f-46e4-aec1-a05f92bd2ffc\n209c4384-207c-4747-8f05-dc5873910018\n9fa04464-23ff-48dc-9f49-dd1e41d0308d\n465f4f1d-3ac2-47fc-b944-611beba7d3ec\nefc6a912-8c58-443d-afc9-b618eff78140\na511cd59-7293-4ed7-a476-483e2088de60\n290839ea-63b5-4d55-8228-709d1fefa691\n9198dd7e-b010-45f6-a058-e83756dac93e\na1bae18d-d09d-446c-b9be-4d1a0f35443b\n065ef318-516f-40dc-a88b-6f3c49c9dbe5\n749dc0a2-16ac-4791-b20c-211641912afa\ne9810eef-d82b-4b49-a0f8-31d381c88baa\nbf5e76d1-48a4-4e2b-b010-a865d1b6d45e\n85e06da0-785b-4be1-b66e-54c9b264eaf6\n41b8e44e-ed94-4255-8299-dda715ca9ced\naa0d090e-9400-49ec-8db7-7a83157b1317\nfd9904a3-0f17-4698-b205-af088e092fc6\n0516e92b-dd8e-4725-a4e6-16867819e5a6\nae2e14a5-594c-459d-806c-5efa58c8fbf6\n7d327dfa-9625-4b87-b61e-aa3e27a18201\n32139382-7718-4d53-9d1e-2e20b34948a8\nc1cfe8fa-babc-4eab-a6a6-9ce73c67e0c1\n53374e51-c181-441e-a166-4a2357c83715\n37e836d3-df52-474b-80b5-887214e9e8bb\n741ee697-f021-412c-b51a-60a40942b66a\nf1689b9b-b9ee-4115-acb6-883347f6a240\n8f27e484-a982-4ecf-a0e2-f2a06f01d0c3\nf83fa019-b785-4788-8d2b-ef8a09cf2a88\n1228d892-c5c6-4ddf-b1b9-26af0884a6f0\nf7084718-ecdf-46b5-ae66-cf70ad01c972\nee76276d-555c-4f8b-8d90-ab6dc4ce77fe\nc6743d40-b332-41e3-bf12-3621557b123d\nfd2920f1-9097-4b7c-acfc-e68c7032e815\nc34f4b12-2c89-4bb0-81aa-034a5351b28e\n613250f4-d578-4a5a-b130-4688c1e6d0ea\n0363ef20-78c2-4b34-8f98-033d6f9de8a8\nc81ecb54-e06b-4ed0-9a87-0f1f1d65a339\n57714dc1-3b7c-4d58-b3cf-c56df4b4ad8f\n45ea5dfc-56bf-4c5f-81b4-e0664f023a7c\n2508f2c9-1ff1-4307-abd8-5e90ff7bd717\n70a555d1-d0c9-4509-8fc6-9654888d82dc\nbc79faf2-0ab5-4a2a-910a-368305a8bed1\nf318eb3f-e81e-4e24-a55f-a33d2e36f761\nd84b3c54-c8bb-4a44-8d97-efcec715491f\nf7433a8f-a69d-47e1-a863-1767dadb52d6\nd320dfcc-ddb4-4b11-aa59-c252453d851f\n5e9c84c0-3ffb-4b4b-8cd8-d689d24863aa\n4f7aea9f-749a-4e6b-b63a-791c60d2c1d7\n2de5209a-5035-48e9-9923-373b41d4a80d\n21723832-0750-4fb4-b039-dea2883bec49\n5371871e-58cb-4b07-840e-acc45f5d6c41\nf9e41fad-d504-492f-aa17-56a3c8a87cb6\ne68bc8c1-e227-45c1-9066-84c6276b0395\n01c1166d-0946-4dae-bcfb-c5ca7618e2f3\n164f67c5-77ef-4f69-92cf-5bb506b2b8c2\ne9796080-68e3-46cd-860b-894876738174\n4db61a64-e06c-4036-bc25-f368142cba4c\n9c1c0978-73cf-4487-bce5-57288def8cef\n240ddd2e-3d28-402a-98f4-1ffa7856a5a8\n0dbbdd4c-88bf-49de-95ac-f407fb89a6a0\necc49d80-8e88-4cf9-92f2-dd4bee8b7337\n4cd31b38-41a5-4b71-bf1b-58e814755649\nba067c26-f6a2-4e5e-ab1a-ade0d66ce1e8\nc3808cef-7299-49a2-bfd8-aa656d260404\n8c4b4912-e155-421c-a64c-aabeb3acaedb\n19b71d19-b376-4f6e-af05-f128f47a36f0\n6de8d2f1-7a56-4938-8408-c5ecdd79489f\n860af0e3-d6cc-49d9-8f22-e3ed97f75de8\n206e28a2-6a02-47fb-879c-010010c2800b\n5551b800-e0cd-4296-b84a-11f24090c48e\n810abba1-5334-47c6-b48d-ef32c8a7bb84\n2b2f9346-536e-404a-869b-e4858b02bba2\n6abb6b31-6587-4cda-8c84-191e215729e4\nafe2154e-4c01-4a59-a161-12f4241f3492\n8e7e751b-ea97-4394-abe0-d65556d02f62\n822405de-2224-4c71-8aaa-f9d54e1caf38\ndd5ae13e-2978-4e86-a9f4-85bf19cf46af\naec765f2-9405-48fe-8457-bd06be7f5c8e\n286fb497-91da-456a-bc6f-b626237537ad\n3f482c88-d26c-494c-9827-596270c818fc\n3eed8515-29e5-4388-86fd-e2778eda1373\ndd368156-7901-498d-8de2-a8207f68ab30\nd18d06e3-9152-40fd-9390-6cfc0890f22b\n12a9dd70-0033-4133-a19b-af2b3389a1c9\n60b7a968-ad16-47f5-b004-a52fb956c233\nd0e7d1a0-baae-48a6-ab4a-c4a372ee19d9\nf0d77b7c-230a-4a58-b286-1d17c6983ae2\nafe12709-716e-4f54-a526-2058fe1baf7b\na40e8879-f028-4382-a2b2-7de0b0e60176\n33a23a2e-c0bb-4fd4-b0f9-10cf67053536\nf26d17d8-8c28-489a-867f-e3abb8b8b24f\n680df7c4-220e-4717-9efe-fb7b322d8a52\n2c1e85f5-91d4-4a98-8d5d-16e53e0a723a\ne47a683f-a9b0-4b65-8b44-12b9c62d7fd1\n43f79b8a-a758-4b3c-90fa-f67585b087f3\n199b4da5-1476-4459-841a-4b063d8704b1\n478cfc82-0763-433c-827f-610da4ff5a9a\ne39292e4-3d65-430b-98ae-b24deff3ecaa\n97ee5e37-e309-4773-8ece-758d8bcb6809\n66c2f2f6-fed2-4af5-981e-afbf5bdbe50e\n82afb04a-6bce-4c11-93ad-528190026b79\nda3c1fcc-4d22-416c-a1e3-605a9474931a\n9c1124f2-02b0-4073-825d-e97d54bbc353\n328ba36b-66ab-4b76-8d10-a2f819de0091\nafbe44f5-751e-4acb-a8c3-65661ef4e3d5\n5851cb7a-0512-463e-8440-be020373a4c8\n1180118c-39b7-457d-a1c0-4130d3773d8c\n36323baf-9374-438c-8835-3891efa2b34b\n2a2a3693-dd76-4a0f-bc78-f5c6f6675659\n2957e9f6-489f-4ccf-8a03-cdd2b92c9896\ne5be81a9-b57a-41f0-acc0-602b9b236dcf\nf51ebcf2-4b87-4767-9706-b87e171a5e24\n813df65b-eb97-49ea-b17f-b39d4fc7abd4\nddad2253-8659-4185-8e59-de105a4e36b3\n80962688-6d1f-4708-b324-195eccc6a8c1\n86ae6656-efef-4f8e-bf7c-841641dd92cb\n6a1090f2-9438-4622-a4e5-15e2fdb2aac4\n81bcbc62-402c-4532-9cee-82b0e1e1220e\n49479db7-02f5-4749-8be9-648bfd9c7f70\n52707894-c9f9-4de6-81e2-6f2d3c20ee68\nba7c5402-e7b4-4b4a-931a-19a23b7ee9fb\nc52b0c44-af53-4318-b38d-43ef625e7128\ndb201d17-13cf-4896-ab0c-1100af7db08d\n4b9ac9f0-e7e8-4ad0-948f-3755b83d8ff3\n6aeb19e0-fe7c-4401-9d3c-8d95b6e70ff1\n5cea4550-c3c2-4537-ad75-5ed167e26a3b\n9a000888-d732-4850-9574-817ecad9fde3\na47fd65a-7401-47fa-9700-730a4a8abbcc\n0370ebef-e0be-4b9b-90c0-2fd3c56d1870\na2d61c51-4518-41e7-8d1a-76e7f96cdbb1\n6264c20b-50a4-402b-ace3-164ff80bf833\n5ca28666-26d0-4f2e-beed-bba1fd882cab\n954fcbd7-730d-49d8-8460-ed8eb9deb50e\nef6037f8-532f-40b9-bfbf-bf061c78a9ee\n684ddf03-ac04-468a-82a7-3ca18746d18d\ne491d860-295e-4ee9-8236-df2a9c3e90d5\n2d0352cf-3a9a-483f-af0e-d389393085ca\ne7697194-5f41-4045-8b54-2cf5b33e7536\n42052beb-1131-4a88-a254-29dc71f11b78\n628edfa4-8690-41b2-9e28-032bf62f5ac2\nd1603205-b47b-47e4-bbce-bdcd73b59d8d\ncd67be44-5740-47f8-a447-67eb253bfa5e\n2a00411c-f214-4bb0-a173-ed4ffbb49c28\n2ce4081e-b5b5-4793-bdc1-42e78757d421\n4f4eb1ba-0200-42d8-b0a1-7ee27503d9d7\nec60e3cb-be63-4e56-80f7-dd4bfb614eed\nb3b04226-76c3-4258-80ea-8758bb94e930\ne832f97b-3c66-4b51-9988-e321baa727f9\n9eba0bf5-f589-4bb4-b0c2-cd0f3fc0ba0d\n480de9b2-fb30-47a6-bae0-9f5859303741\n9b81e046-2654-4cbf-82af-3e61d6794332\n081c1ccf-0a55-481c-a318-830282285800\n4e80e72a-058d-4f16-a293-0d90a30ec3f0\n7a2fe558-76d8-4664-b77d-f4717d0892b7\n7b7a6a47-0f09-4913-abf9-fa66fc6ee2a8\ndba072c6-3823-47cb-8960-c02a9420126d\n5864bdd1-a9dc-4090-a83d-b686d5fc1da3\nbddafaff-7325-46d9-a109-00a4ea33d42d\nffec8730-b638-475e-a4c7-47e2d4287f59\nd31ac446-51b3-4082-aa7c-8d8132ddff4d\n4f77e44f-bfe7-44a3-b33c-2c546cbfae49\nd1171c7c-d95d-48a5-a98b-965e3e720d00\n3f19c431-efd2-4585-9eb5-e5449b1782c7\nc44eea33-6c07-4b17-9574-ffeedca449a7\n41d9f1de-05d0-4fc6-8194-7b38f9034f0e\naefd3163-196e-4e0a-ab61-28faf8054405\nc3485fb5-d0b0-4a7c-9173-a376ab03e563\n52b339be-1268-4051-adf0-90ae08555880\n2e708e9b-4022-4953-a896-022944fdb997\n6b473ece-f63a-45c4-8c99-5cd856a44642\n41902129-72ad-45dd-9719-0f07134d8276\n9528c631-1eb3-4f5f-9a5f-6749e4ff6c95\n703ff9d2-672b-4294-afb2-780942994d6a\n962b45df-5ca3-4d39-9a64-01ccea83663e\n32f06fdb-08f0-42db-ba0c-b767404f57c3\n7b935497-3734-406c-8428-a8859cde9962\n0b291747-6d5d-4ffe-9500-427e52706d41\n9f6253e7-241a-4c9f-86c5-408a12d96f94\nd222fae6-b7d4-4976-a52a-840e15d81f23\nb4acbfe2-f303-4596-b934-2672e6842dcd\n4ff4b78f-cb55-4a8d-9a75-6159d9b251de\n45bcd6b8-bb84-41fd-8e59-aea2789f6346\n4b69ba44-8f52-4208-a5ac-f687fc573ac6\n7f0a9a16-031d-4420-85b3-23961295f1c4\n4f990fa0-4829-427b-96fe-bf69234f3ebf\n49e2cd56-7ce2-4b73-ac0d-5236454a7724\n10aa8336-7e28-427b-be29-3216026022dd\n6b21b6b6-f117-48f4-a1ff-391faf1ca08e\n11e9231e-7c48-4280-a33c-0064e9561b9f\nd73eddfe-abbe-4055-b76d-21be1936f6f2\nc935cbdc-1a01-4dbf-86df-912e29cb9503\nff7c600c-c70e-4f17-b011-60953f4f91f2\n3965670d-8271-4aed-9089-14373caea4de\ndf4bc7c7-99e3-40d1-b130-6eb6c534bdd6\nf52635e0-4529-4bf9-a4aa-e4c635e89e83\n429418c5-029e-4bf7-a955-c7a6a6fe22d2\nd6b10f34-8fb7-41e4-850d-aca7b9486de0\n83045e1e-80aa-43ac-a0ea-9a461662fe99\n057954b2-6e8d-4383-b3e8-895b8e811971\naa2a7c3f-2bd7-4a49-a9ce-08866f3884aa\n116704df-47aa-4d72-bdec-d774e48f0a11\n2055303e-1a57-4fd4-a967-0f8d9c31b122\n02c12d2d-6330-48fb-928b-c4a86d07d280\nf40d8e96-a440-4f13-ba8d-5d5c42d6ad33\n7a450d80-92bd-4a70-9071-5474c08fc8e6\n6b55efd7-b949-443c-ba50-2c4a4d58a526\n62181761-bb58-4c33-86d2-be831387174d\n7237895c-1d5c-43d5-86d0-9781e76b9f14\n9d185845-c0e0-4585-9864-4d594764a8fb\n0704565f-e93a-4040-83d0-4f948c44a8f0\neb3da6c4-bc54-452a-82db-f0c9d755b271\ndc89c745-7817-4a5a-9675-b0f1ac55b859\n4bd5b498-c4a1-48b0-97e2-214987c5dd80\n55c9a16a-c9fb-4f99-9fa2-767d346e60ee\n2e738eb1-2a86-4076-95e0-72fa5b17bae4\n0d8c6d5e-d6dd-41ec-b000-08500a69a214\n1c48d3e1-72a4-4ecb-8f87-a7a9bea1d088\nbc8cd975-201e-439f-a8af-01a78e15c6a6\nae4be024-840b-452d-8de5-3efbdfbf5798\n3977ae2c-42db-4d77-a95e-4498292e9c97\n124a76fe-d5db-4a95-8c4e-28bc7e442a53\n2caaa19e-5348-4d55-9fff-e4eb798fe85b\nfac50bd0-28ce-42bc-a1a9-0aacaf2d2577\nd70c7020-a6c9-43c1-a82d-531cab7d9f9b\n0985b0be-5e70-4d85-9fe2-25117abe918b\n7498ef37-29c8-469b-980b-b0ca92bc443e\n864fc28a-01bf-43d0-a87d-0f0d7d5bfdee\nbf9e4f3e-b42f-44cb-a178-e1203e735ff5\nb889b399-b16b-4b7d-a515-152048d94424\nf5451478-5c15-4c1f-81f4-f32acdf926d5\n849fe8b5-ca4f-438f-a4e5-008f3506f287\nf9319a81-d27b-4400-869e-c607c61580bc\n07bb3ac8-05d1-4d65-9f83-6ac7fda60fd4\na1b84b23-2180-4153-b8e1-77ab8dc8eef8\n84129210-5d29-4cd1-aac8-c1a6a4735d8d\nb94d8012-0572-49e4-bdd9-7546fe1033b2\nc1b7d272-1fe7-474a-8fa5-baa6dd996d7d\n4f4daeba-484c-443a-b632-ab722cb13ad4\n6d3972ad-3b32-4d43-998f-0e54f8ffd6ed\nb9c76667-512a-43c1-8afa-d9b94886696f\n89f8cb76-4450-48ea-88ed-01bcf2c65a0d\nc9b4964b-8c54-44f2-9a03-597523a792b5\n07a72ef5-73ad-452b-9f51-38bd80bde8f1\n68b62fa8-1f65-43b8-9852-c2c51bd3aa40\n0283f53e-704f-4318-b33f-1980a592f640\n8c7e63b3-b288-40fb-a134-cee3d9b95037\n5fce800c-8ed2-4960-a776-cae0a7381a54\n66f2c593-1429-4c97-aed0-7d3ed398c1de\n183c353f-5ea2-4978-8dd4-7fd0ab89ea6a\nefdc0dfb-82d8-4b22-bad8-46aea5e0c58b\nbf80a0d4-6329-4727-959e-ce1c6344b527\n8d11f23d-72a6-48ae-baaa-fb5f3f145295\nfc334c33-fc1e-4988-857c-97385df024f8\nf4037cbc-8771-426b-a503-ee81f6dff656\ndd3ead03-1091-41fb-8338-25956c85a951\ne6c7a3d8-9289-4774-a735-619c275d2e87\n04a7a59d-282a-43f3-bf09-63c289c42d47\n85c6a094-5d6c-4e35-97bb-a2fa1b5802e4\n701be2fe-b48e-49c4-b4bd-1163819f42ef\n627a94e1-4620-4761-ba9f-f06ae7f3e36a\nb8632531-4074-403f-b064-f38b90103ab0\n39a14614-a35f-4de2-ac4d-0efb2a776851\n1ed85897-e29a-429c-8ca2-da0f74c304c4\n3050e8c6-a8ec-43f0-8028-32af745542e2\n930ff7fc-48d0-4d1c-8114-f0fb871b5137\n3dd54dc2-6930-4ec0-8b3e-4143b2055810\n5dc6e4d2-9a90-44fd-998a-3f11c422e926\nce9885ae-6b35-43e4-8cb9-07d2cacb6d2b\ne18684a3-f0de-4433-98e7-4cf172d74c4f\n43611af6-305c-4134-8039-ffe1e2f253f9\n27fd4c84-c01e-4769-acec-b49dcf549556\n1d068d17-53bf-4f20-abe5-859490f29b4d\n92a17174-fb4e-4e2b-be4e-d1a06116bb43\nde621a54-8c4a-4144-a454-b58ca9c22ad5\n81107494-76dc-4cf8-9cbf-f43f1d8e94b1\n9027a3f4-bce2-499f-b853-cac0ba133586\nbd0b646b-dbe2-45f2-afc7-31f0c03c230c\nfcbfaa65-886a-451c-b35f-95e802c60ea3\n1677b358-4d0c-4660-95d3-b3fef2fb977b\n3a25e2d7-a5d2-4adf-b87d-dfb7b0165729\naf03d1a8-017a-41cb-b89c-97770833c947\n64bded20-bf1a-4017-af0f-0058c289287e\n633e3be2-d96b-4e8d-aa63-d88c32821202\nd4319d9a-e572-4c01-a4e2-728da19699af\ndf3c89bd-8312-49ab-9da8-e9495bfe22ae\ncf96861c-72dd-4ce3-bb22-6a646740987e\n8e4e0f3d-de24-451c-b6ba-5f7bf944eb3d\n91baa993-16b3-4ba0-b428-142af204697a\naec8e93a-44ed-4877-91cd-1a2f3c89c64d\n866c3eba-ff08-4842-982f-03befe8a943c\n9b67ac25-bcdb-491e-9dd4-7d9b13bbb8b1\n10e1fb35-1cf4-4a95-a073-7b0a6e2110e6\n95ff8245-b6ab-446f-bab3-63a660dc7436\nfdfb41c0-448e-4d35-8583-84e6596ae883\nca8db58b-6e83-472c-ab20-ff3d4ed31907\n004c118c-0bf5-47d4-8b13-435c165df1db\n694c2073-b273-446c-9118-80fcb3130ec9\n2baac554-e0c8-4b34-a85a-4c9930d9f929\nddb53783-d07f-4260-a51c-f05db4b53a3e\ndd0aabff-e914-4c3f-a315-bf85dc4623e1\n1e3387da-8674-4bbc-82de-f8c51e7638a2\ned77ec9e-1f9f-4c3e-bda1-c9091d96c871\n914fb587-0cb6-4e60-98cb-c33e458567e3\n86490b28-710c-4cc4-a974-cf2cdaaa2eb8\n2f11ac3e-e24d-4c65-a3ed-abc4360ee18b\n1080c27f-74d5-4111-a245-e1c85fe1cb9c\n7e3784aa-931f-48cb-89d6-5d23594c05f2\n5ad48597-3ba9-4210-9e42-18611c28f84e\n842121f1-7f51-4a3b-8312-6464ba267fca\nab46fa5e-f717-4da1-83f7-4026ec3472b2\ncb8129de-11ec-4c67-ac64-0441487614f4\na33c5f58-b3ea-41c3-9837-b5a4d1ffe262\n8911d488-3b80-4620-be4e-b49e2ddb9299\n6c5b0bb4-251b-4a94-be8c-85b0df7788ee\n3e3be4c9-d5e8-436c-8d78-9a3ae0bc6aba\nce2d5c38-a6cf-4b11-b824-a80d3222639c\n8aa718c3-46a6-4f2e-a35a-58c045da3b66\n2d717b04-4fb6-4e5a-8291-17879c47d766\n9113b554-33d6-4008-aeb3-337fceac4693\n3a8f9e2d-0c5b-4b94-b2a9-890d7d19805e\nf0a248fb-e333-48c3-8ac2-93a9397df87f\nab1b125b-da9e-41c3-b391-379f5649bec8\nd1bf8b83-5db0-4542-bf52-8758d788147f\nfcf2ed3a-f55a-4768-ae37-5246b20efb66\nde39cb2f-4c97-4ffa-995c-256816bf271a\n795a0128-b2a4-486f-9dfb-0f8756f30df8\n4abd3b95-bfab-4556-9381-bd805aaa4e44\n9905bade-10c7-4fb6-b7b8-9f23a046eff5\ne86bb2b1-07ab-4b0d-92f2-75e3efb49160\nf683fafb-6816-4259-90a6-9321da5ec512\n6cab7234-afea-491d-8dcc-0d510be86258\n55ba6c08-7acc-4a84-b476-47bf41422927\n8748da84-f7e5-4bf2-8bf7-2e6be59b18c0\ndc6283ed-c273-40fb-81d0-2b7912b3e7d1\nd974b6fe-a047-48e5-92f7-4d25b6d592c9\n5a4e8174-f0f0-456b-9e99-d489f6158f62\n1c674164-ae4f-4402-966d-86ad538e008e\nc8f5b222-63a0-4fe7-8de9-33b1e77d702b\n26f069f7-055d-4892-92cc-86553150f6d0\n3d49ce8a-ba39-4952-9a8f-3dbaf4ba4fee\n31340a10-4bab-4eb5-8b5b-e90782261ff9\nf8bf8a98-0685-40bc-9519-ab3710ba2684\nbeba66ef-78cc-42c1-9a19-25a7fe4f4cc6\n539f5169-95e2-4da4-8c5b-da92976cb725\nf24da42c-b60e-4e85-913d-1eb90a25f5e7\n926c5da1-461e-4069-a270-70c76c8f423f\nd4d0d497-49f4-4e1d-8f98-8b8e917be73e\n4bba8653-c780-4657-9a4b-dc51c4101421\n16b1ce02-9480-421c-b37b-30d36ffe23b8\ne5ea0c16-fb67-4bf0-a349-2d148bf8fdf7\nffcfee57-5d03-4710-8cab-92d5b76940e5\n0e1d5ce3-2dce-4fd9-ba66-047f7b5d0dd6\n3c63f377-a597-46bf-96e6-e71cd2335c37\n40c51073-425d-43a1-8ec1-6d7f2902b818\nc348c97c-4033-40bd-a9bc-6526ca8f7cb5\nee100ac4-f34a-4374-a18b-053c0b53909f\n416479ac-7831-4138-9243-6d0aadf143d8\nb1e23b80-22d7-40f5-8a5e-4c03ef544742\n4b350329-9db0-46b5-a023-1b362981ca34\n2b77954d-aaea-4a2e-8cfc-b7eeeb0af8d6\n3c95634d-c783-47c5-ac90-4e4d1ec4a02f\nab840da1-788d-4ec7-8b54-8a6c8fbce10a\nf2946401-773a-4748-8c33-900680589b5a\n0ce16eaf-692e-4c3e-9b6a-8552a9e81261\nbf41b15a-14bc-43a6-9ef6-69df01b35719\n9efc6c97-d955-4fec-ae95-b0cd07346a9b\n0852519b-edfc-41a1-a57c-cb44822b535e\n6e6aa73a-294d-44f8-9acf-f0bc71dc502b\nc659ed65-6035-4c12-b4ac-66a8362a54e5\n08167a74-200f-4b7c-9e8b-1bf847dce803\n5e0c088b-c67c-4057-ba68-8fadc0eb611f\nd20c298d-4b00-45d1-8c48-638a46404faa\n02bfefba-74aa-4af8-beca-34d9d91b2174\na2d59df4-b25a-4b68-ac01-3aa13cb1ca54\n8389cdb7-2f42-4b3b-8aa3-b9b9dc25fa2d\n8fbbca0c-5eac-4ca3-845f-5936ff6a59ec\n34f890ce-3cd3-415f-b696-363208b6ccd8\n0b79d08a-19c3-40ef-aa63-db821d022046\n147a93ce-8bc5-40b2-a00c-2958a7ef9137\ncba09bec-238e-4898-a8d7-8c0bf79f3eab\n917fe2ab-52d6-4c65-b170-ee3da3ad671f\n92567d5b-28c6-404f-8002-ee9ebf0e6590\neef4f107-0661-4d1d-8884-826220a7fd9f\nf879b14f-5527-4e80-8622-a02cdf528a60\n0218ada6-9c4c-442b-81ae-adb17886ed69\n8cf77e12-0339-4d57-a408-9a4cb74b5415\naabceebb-57d1-4ca6-81b2-aed910d9f7c1\n4cc4d21b-c43e-4c5f-ae71-527eafeb0230\nb977b911-2c25-4ad3-9321-8ec6bed8b69f\ne163b653-c3f8-4153-94b4-ec1eb6452542\n3a449869-c4da-4331-a6fd-8bd3e4f6b527\n3c71a2df-313c-4408-8b1b-7dcc72ad76f9\n2afe4aab-6ef4-448d-8932-409fa4149527\naf851173-727e-45e6-8831-c53b6561c961\n3384fda2-2a33-4ef8-a5a4-e3cb2f5f6d52\n835a1312-ed79-46a2-9efc-c6ddfe233dbb\n0a5d03f2-5f9d-4b30-932b-e6ed65f2fd61\nce317186-014d-436d-939f-aafdf5a3083f\n783c9420-92df-42e3-b5a7-fafe8e48ceb2\nf2c950e1-90df-4e49-883e-19e92aab30fc\n97d09c5d-00ec-4df9-ad38-c3ff73952a01\n3b377eef-2e88-4c70-a3fa-8a8788864385\n218abb43-d1dd-4777-9d22-0440912538bf\n0d137e97-8bc7-4a34-b609-a2140e9211de\ne7501d99-4a8a-4e71-b5f0-02e1da6e2589\n06eacbce-7e46-47b1-b15e-6dddf72136eb\n8f0cfdd8-6fcf-423e-b795-16d0cea41d2f\n542abf90-7d7d-49cf-9f2e-1a4a4825ff4a\nad154f8f-d29f-44d1-a933-00785c5f9d1b\n0d9c379e-7930-48ee-96e6-c72970304367\n7016cc13-4ee8-472a-b4ab-51b0b7c0bb06\neaed56fd-b808-47fc-8123-5018e4cd0a55\n598053e6-dfee-41cb-a35b-d53ba51d2b61\n952fcdbf-4a53-4326-9621-9e820757fc33\n54e4f8df-ed6c-4478-8a76-abd0630c2abf\nb9ebfd4c-30bb-4c09-8e28-b6b78b50d14f\ne215d977-9e57-4e77-821c-f6b7d0b3c163\n909064fd-0369-4f75-85e7-58e8d5367d5e\n40ffc393-b5ba-42fb-b032-393c04855ec7\n200aabe9-5a47-4ed8-ae34-c7753ccbf0d7\n418f595b-ed8f-435f-a6fb-f3fcabd8da21\nd1f86cba-2843-4062-8511-d87751577413\nbe6b4f36-98b8-4e60-95e0-c31424e7f420\neea7582c-dd34-433f-afca-ccaf831265f9\n147b9ec8-2f0d-42aa-98b4-46bf26a32b80\nc62b7d69-6b60-4b5e-9b5a-e959488e2dca\n9200f02d-0a6e-4954-961f-5fec72a80744\nfd708d56-432d-4314-883a-e84308187a83\nc0b3ed3c-b69d-453b-b59b-d65f149a531e\ne11cc252-5603-44b1-beb6-ed7be4a8f282\n73a34776-e15d-4b5b-ad29-cadccb9ca18e\nfb9dfaba-958f-4ce3-828b-b0797683e617\nb58b5634-9b9a-442a-96e7-c5d58f59f8ac\n797c7279-8bbd-4afd-b60f-3e8a632250e2\n6f814606-30c5-49cb-9d78-198c72db3e35\nd70cfced-2597-4dd7-8237-8cfabdab8474\n33159a88-bdc6-4852-83b8-af3ebcb38f71\n865ec9b5-1676-4449-bf94-469afc69c381\na22e22c1-1d3a-44b9-86e0-5aa699e104a6\nc9c1791a-379c-416d-a13e-157fb992b529\n13ab3dd1-fa9f-43e0-9f54-a93a4e5c670e\n2491d5cc-5552-4de6-ae41-d55450715226\naef07e87-7c19-4584-bc35-dc2514441daa\n94551d1c-174f-431a-bd69-0f850594b111\nbaf2aa48-ea9f-4528-bbf3-fea95c824889\n83602a50-8eda-4e0b-b466-b6028426f06b\n050563a9-6cac-44c9-b875-12517c58296a\n65fc19ef-435b-454c-a707-b0111ad1a7e9\n16b663a6-fdcf-41fe-80e7-9b05ce3cb819\n75023141-fd93-4d82-9495-43da18bc269e\n62af744a-939c-478e-aa97-de5c040e2104\n7358cba4-fba2-4e2e-b394-2a2700520976\n6ad198c6-b3e3-4e26-b5b2-e0de1aae874d\n94c14909-93c7-4709-9956-23e0613ba3da\n882eb309-4a5e-43ff-8327-b8385f2f6968\n93714ed2-4180-455f-82ed-ce2959389169\nc5153a5a-d586-4fd7-9e87-7c4ad6b1e0a0\nd17906fc-fd97-45d7-a02f-d2c2dfe36d2e\n56990d00-93f0-46e6-a8c8-55fc8e53dbf2\n0472f3ec-50e2-409d-b99c-219ae0bcb3c5\n056eca51-caf4-4aab-bde5-4a4b82ac7f22\n896ebbd3-512c-41c6-894f-d6068fe2cb5e\na275e987-ee5c-4a87-b0e0-921fe17e24c7\n8e25597b-b14d-45bc-b4c2-1d4086f76b89\na4c40b7d-6f38-4889-bb4f-036fc2e7530b\n9ac4aeb4-3797-42f1-be5c-75e4f35c9db2\nf14e29bf-882d-43e8-b90b-624dbb9949ba\naabc3a4f-c587-4c7d-bec8-c11e8f3c8f2d\nb7fc1534-c2f1-446e-97ae-7c1affb74757\nc4a7395a-d91c-46d3-baeb-29dfe4e4bd0f\n4b9e3fc1-4943-41d1-8473-08a2242eb3d0\nf89ed015-3ded-4db5-9c18-5a5efa9021ab\n2b2db817-8002-4fe9-9d95-f6e8c811e256\na885853d-456d-4a36-8f68-3815af25ac75\na4315681-2395-4ad2-a88b-6d0a74206466\n57bd9e4a-3ccc-4526-b4b1-a9fe082d21fd\n4107236f-076d-46c2-820b-a6157b3c152d\n8e1ad4d2-1920-4a79-9a75-b20306472321\n15131a02-9f40-41aa-83ea-58925232c923\n33384e0c-057b-4434-8f25-ce02ae7375ee\n1d6f256d-736a-49be-aeea-838487ef91d4\n6b0322cc-0146-416c-b691-355bd2af4289\n188b3523-e5a1-4778-a2a8-6d78f95a0e57\n45af7214-045d-4a1d-8be3-87c40db01c1b\nbda6be87-cce5-4331-8d5c-7a54d7c3e68f\n4a276941-8218-48b8-99e8-eb16f648971d\ncb27f549-f4a2-4b01-8c1e-951310acb378\n7158aedb-159a-4416-a0db-1c0670d23d64\n61247fc3-4bb4-4730-b501-e4566bcd9f0b\n5534daf7-b6df-4ddd-b25e-2f78a1d6dee0\na4e5dc82-46a8-440f-9a19-b5405ef13066\n2e596224-3e43-4a48-96fa-3eb4ebf4ffcc\n10282156-ece6-49a6-a954-5d88fb69b68f\n85bd4a57-6803-4318-8a14-59ed4c4dc1a5\n586f48e7-8a7f-4c3b-9dc8-ad3d3aa60a6c\nd64029c7-04d1-454a-92d2-4eaba3a7ba6d\nee954451-0fe1-4ada-afbf-9398691f60c2\nd0004eec-5dfd-48b2-ac16-f864b05fc2c1\n612b3c3e-8e0b-454e-a15b-d841ae8585a2\n61878b28-2a6d-4965-8d45-08f4525c0bac\nfc8103d1-2cf2-4ca9-aada-1cccf3d02d8b\nc44ce969-04fe-443f-b78f-1405cefe713b\n22c5a4d0-c894-4ac7-89f5-8765522b389f\n3984d2a1-44e5-46ac-b79c-64ca09dec6fc\n5a8ba37e-2765-4430-aea8-1635933af686\n701e7a75-c3fc-4499-9d1c-2cd1ae284f57\n8c6cc91c-8496-4929-984e-5381319db71e\n710c7cfc-5fc7-46c1-a097-b6e42d9a70ba\ne2c5b3f7-2acf-4cd8-b168-9c2fdb184d8c\nfa7f33e3-9128-4bb5-9bce-5b5cc3a66eb7\nae023a08-d753-4c2e-be0c-2731a6724e46\n739603ba-8451-4c40-a879-147c4490c0f1\nc21966ac-2b0a-46e3-8904-d220fb47118d\nfacb22ba-32b2-4e20-ba0f-407030b4ea60\nf95ad56c-a9e0-49e1-985a-bee1cf1999b3\ndae8e47c-1592-44ba-b9a5-538c450a0dd6\nef5cd3a3-c4d9-4f01-82da-0cf87f2c1386\ncc2908cf-d6c4-44c3-a4b4-b924bf5bb060\ne0426542-5951-40cd-b4f1-e03bfbc3280a\na2b7e0ee-3348-4d3e-9fad-98aac7d86344\n58393e41-3941-4db3-86ef-1dfd32720077\n15e0ad27-e29c-44ca-b6d8-0da3c144eca8\n87c71437-723c-4002-90af-63a4f19c7240\ne267c63f-29e8-4a74-8ffd-9a71d62f6e7d\n76273b23-0e19-471f-877a-4edabb079448\nc5f8e6cd-9b62-45ad-aab9-6c7c76d97026\nca7e2ccd-303e-43c5-adbb-3c172b7b381f\na5eda522-1196-4ca3-ad79-d20650ac6706\n827d38b4-f916-418d-b0b6-a9474498f7ad\n043c1298-8184-4564-aacb-fd64daf2ddd6\n4c70046e-cbb8-4bae-9122-22a4041b9c18\n7eafff23-4a3b-47c4-99e0-0976630c91ff\n7d13d798-c059-4884-92b5-90eccc192416\n1085ae94-913c-4bc1-b849-2b4b68abbaf6\n1a1875e0-7c11-43a8-ba52-8281139c649a\n7e701f9e-0de7-48e7-980e-13c98f10cac5\n21c2ab33-97a7-4215-973e-7ee4b02cc1fb\n34e118a2-a5bb-4ca1-8a3d-d022441d3dbd\nfdd0e088-97eb-4f1f-be0d-54a1f9c83e42\nf1de45d1-2273-4844-b5db-c52dd448312e\neab0b6da-8701-4045-9e87-ed436be938a5\n7c31abd6-7671-4e0b-9d8a-b7a88f34cf33\nf55e6639-ad1d-4789-bc11-a6683aed8a55\n657f0391-59ec-4f89-99fe-f914d6a7a4c1\n3364a970-57fa-4a2d-8388-79dd143fc228\nab944204-f6ef-44d8-abc2-0367c82b8d24\n8f84e485-a0f2-4607-b8f0-59a1b2f3ffc7\nabee13c8-2490-4beb-bfa0-cabaf8322b2a\nd1955966-6dea-4975-8518-cd6b0e3e718c\n86a34223-b52d-4b5d-8011-08dab7791a3d\n3b8f0163-8462-41a5-aaad-63026bf6de71\ne5c8cac2-2d34-4274-b1d1-03432fa9bd62\ne4eb30d6-7317-4a91-b778-57adf8afe232\n3d11465b-b4df-45fd-b9c4-c45d985b49e4\na0fab2da-2a94-4361-839a-90c3d0772867\n91a520e1-71a7-4264-b06e-d17b5ee1bd3a\n2b49f6b6-44cb-4bd5-a83a-76897e4e0399\n7310e7b3-832d-4cdf-a635-f564940a0a37\nc3977e45-2d26-4937-9710-6604f6ffaed5\n0b4bf336-ec55-4114-b04d-86b980750352\n0c6ab18a-f09c-42d0-96a5-814fdb347cbc\n1c909be4-2744-483f-a0b5-d54619de7acf\n35fbd015-ab8e-4a7a-a475-5633742b85d2\nf42f2881-10a9-45e6-be37-5650f51318f1\n91a61f27-6c87-41c7-b5e3-1d1a9b94e3b1\n7b10b4b7-e2c9-484b-9699-280702146c37\n20bed599-5b54-4efa-8634-59e0afb9fe6c\n4d97ccc9-d9f9-4675-9370-c5b758e51a9e\nbebfd636-100e-4f81-ba98-8b462d5278b7\nb484f670-be64-4c93-870b-e5010f35efa3\ne1bc07a0-e714-4488-a2dd-7da8b2814351\n363a4ab7-c897-43d0-b87e-f6ef5447ccc5\n140c7f35-4895-40bd-8cfb-4e36e2e7c39f\na64c3bf4-3e07-4698-bbbb-177ce999d4cb\n92782945-f115-443d-9605-c5d7de2f21c2\n04082e85-6a9a-4590-938a-24da0ad7f126\n572abf81-5297-4639-ae78-de3d86c311af\nb0f2b137-46fe-4958-831f-2288b44c0f20\n0fa06cf3-e621-47e4-b0c9-0431267541ad\nfe05ea9c-b86e-4a7b-b5f0-5a9b8de755a4\n8082323d-0b29-45d0-8909-b8393f8cda58\nea6bad20-e3e5-42de-9800-1d5b0d5242b7\nc967965d-772b-4c44-98d7-3e6ab7faef76\n115093dc-5a70-4906-8335-1505e44fb8c9\ncdfc8f31-32b7-4385-8f40-a390cbc9055f\ndc3a9cab-d2ca-4f54-8f56-c1d6f6a429c3\n9d7339ad-b2e0-4d5d-a5b9-25841efeddda\nfd4dfffa-5024-4077-89ea-dbfd3e8985f3\ndb09a35b-9082-49a6-893f-9c0d09c02dc1\n1d6b8ac6-5161-4d86-b0a1-e2e89cb5d9e1\n5ebfa8bf-5c97-4bc9-84f2-55692f7cfcd9\n83a3abe7-6e05-4140-9193-83081e53b033\nded52940-bc68-4631-a975-86b2e3a4a46f\n5870837c-7634-4626-b4d8-aafabd75a470\n1d630ef7-dacb-4a9b-b114-e8c2952a1160\necfb6036-81ca-4b56-81ec-f9440484bf9c\n441a52d1-858a-4b55-8342-1829b8e5977d\ndc03bdd5-535e-4319-a780-94d62a7783d0\n71947b3b-6359-492d-bbea-7a4a4821fbef\n7f7e8ace-25bd-4611-baac-ffb59e4c8b82\n7a9d974f-65d5-4113-a499-115ec9e94525\n903b1e09-817f-418c-a806-7ad680b406f7\n7a894831-ca70-4061-b327-33e527d7ca3e\nb946faf5-ac02-41cf-b2d5-1be9124e7076\ndbddd3bb-f392-4709-854c-8ae2a07a3b74\n9f62e529-368c-4fb6-bf90-740071d1d4b5\nc854d9c4-32d4-425f-bdd5-830d7fba57d9\n0d5625d8-a124-4c42-bc2e-48a26bd1c9ef\ndd877885-8bc3-4591-b5d9-8fb387ed31d7\n16e40652-2478-4f55-8aae-9b388ba1e2a1\n0902b3c8-f837-45db-b2e0-7340ec68a7b5\n3190e049-e9c6-426a-9cc9-967ccae93dec\na3c2c028-85fc-4dd9-8d87-a71ff656db8d\n26a3716d-c206-457c-b9e1-a89caa669289\n9fceac4e-c077-41f4-9bad-fbf82e1eaab7\n95a9ae8f-a346-4b3c-ac81-04768ea5719f\ndb0ec51d-b797-41c9-817d-1718c965f39d\nd2533bca-ed01-41c2-b019-59e257e3d467\n11511a6a-3932-4bc5-8970-a7fc202b3ab1\nb4cb79ae-ce3f-4174-9bb8-a29dd361c2a0\n538c798e-53a8-40c3-84b3-0d2cbe484220\n7d0f6429-af6a-47ed-8a70-6fd68d43898e\n18fd55f9-f79e-4a86-8843-72c87e116cbe\n7980635b-3ea7-430d-8b71-f78ae2d58ff5\n53565c23-cedc-4cf2-9936-47aa58c64c46\ne2305d65-72cc-4338-9a45-abeed5224d5b\n1d837758-45a3-4939-a707-0d995f1c9fed\nbb644f7b-10d6-4af1-bbfa-569dc327fb0f\n6a13bfc0-62ba-419c-958c-b5c8390c3339\nd0e9ad87-c512-4394-bdad-d1c0a896d6c4\nb2c127d3-9871-46e7-9cde-7ca36255c4ff\n7679aefc-d96b-4b77-888c-7f6d083d7b05\n115084c7-65e4-49ff-a0ff-5ab54d0ee11d\n6b4790c5-b7a9-458b-ae8f-13b5bd07a94b\nc4087794-27be-4dd0-8070-1e8532329801\n4390bfa9-1561-4791-92b5-19767ef434fa\n5fae7a9c-0939-4229-a23a-dbf837cb56cd\nc97b77ad-4812-490a-9890-d437e7a5193f\nb3307631-cd6f-4de5-a17a-b6fea391302b\n147be2b8-b925-4fc2-ad97-4c63d5754f58\n9f203c4e-f5cc-4578-9505-434b04aacee9\n91a78ad8-7913-445c-9159-76e6c7ce78f2\nfa3303b3-c128-4f20-b2ac-6bc30b01c0ac\nce33a305-b45e-4955-a8e7-fe864237d7dd\n41c55375-3a6a-44c2-94cd-e490d26e259e\n988820a9-22a2-4f66-a778-3db4b836e16c\n2948d148-b6f5-44fb-86e2-5cb13fc43e6e\na807bbbd-0e80-4431-86bc-ac9eda42d348\n92ed70ad-1b28-456e-81b2-eb89e00b85fc\ne8dd2c5f-9bd9-4e64-bb71-b8e0ebaae627\nbe4985e2-5fe8-41fb-aada-25aa6aa258c5\ne36c6676-db76-4c81-9780-14e8f6b7c242\n3ca485da-4e9d-4701-b564-096c29e323d1\nc715b98a-d0f1-4a68-9f06-fb93a6c99ca0\n7d6e8cef-8856-4aad-a747-ab14f01efdf2\n17b41c5a-9d66-4f63-a4d4-bda248b9bcbe\n313949c4-b94c-42f1-bb1e-9e4aa96eca97\ndcf645b5-de21-452c-ac4e-4c2d59efaaf8\na9f74b06-34d2-4a2c-97c7-d9f4ab4bfd97\ndd7a4acc-dd47-458b-8974-386ed3916cdd\n737bf6d9-fdd3-4b1c-adb5-95f821ea9d06\n37650ac7-2a33-4e6c-ae33-6a677df41f06\ne933d7c7-396a-4763-8087-9bda4638ae8c\nfc5f6717-0e7d-495b-8eaa-2126d74828dd\n6e080dda-7986-4f57-b6c7-aef4154ababe\n8950ce60-bdef-4add-a307-77ca8ebd64e5\n8a83bd1f-ec56-41b1-949b-9cca3d0b9fa1\n7ad64914-af7e-4664-b43c-f8f57e56fb6b\nda499d84-4cb4-49b9-99da-9dffdbed7676\n62daa42f-785d-4adf-b593-27e950106bc9\n8656d15f-be60-41c2-9241-281251a42d9c\n36034d48-2bea-46d3-8d84-488243d1cb62\n9b90289c-27cc-45bc-8d4d-4480c3b79d69\n7988b315-ba3a-4ace-9b67-0a800af01f90\n05e5c890-d28c-4296-9096-27436fdb7cc9\n51e96de1-cce7-48d6-a26a-5cf6aba23cab\na99fb50c-1ec0-49b4-af46-7a9872378273\n6e5ef8ca-3407-41ef-a1a1-d021d5fbeaf0\n5961bc01-2ecf-4e53-b6d8-65782eff604d\nf8606d98-997c-4673-97a9-afece0070ebe\nba65943e-fde3-4759-8910-19d59ae7edc8\ne05ca6cc-a10e-49bd-b7ee-eedb831823ed\n84d28de6-1efe-49f8-9806-6d7f578c2dde\n07ac96c9-39bf-47d3-8372-094d4eaa3db2\ndcc955e3-c059-4a48-baab-4a5f40e5956c\n055d49f1-e50f-48e5-af66-f441f0f2e8a1\n8c33b79a-4dda-4e90-85d3-3c9ce65a6fa7\n6a9b2130-48d7-46e7-a384-0517b1cc069b\nb8f4f2e7-3966-4ce9-afb0-433a6b8c8b73\nc5900986-27b2-42c1-a021-1ef3fe7c3570\n6a6b52d5-9c8d-439a-a49e-1e54d137e65f\n30afcafb-01dd-4b7b-ba47-b7af8a2b5e64\n8f9bea90-ede7-4310-a480-3254e89804e2\neb5be8de-ee0d-4b85-8407-ab985432f9a3\ne902ada9-ad87-440c-aef6-72d9575b9db6\n9effba3d-70f8-43a0-93bb-78e19bfafef9\nb71a2062-40eb-433b-beae-e453f3ccfa0d\n52b000d2-7820-4833-8e1e-6f4e57aecde5\ne786faae-a1d9-49b6-981e-3536dfbbdba7\nd06aa939-cb25-407d-81cc-53e5a8ddcc7d\n87c47da8-0c8e-4ec7-be86-6bdaa5aad8e0\n7353e9ce-54e8-4a30-b44b-f2322ad3057d\nafff5947-57b1-4702-adee-679445a07566\nbe8b9aba-bcf5-481b-9384-ea8c12a00849\nbb117170-94ba-4ca2-aa88-746449e71d0c\n264a9326-860e-42b2-99fc-163518f74a8e\n7e9b216d-a8d5-4e50-8443-9f503d1ed0a1\nf6e9908e-9483-4ccf-9ea6-3fc16ff880a2\na2c861e3-4801-4d24-b9d1-07e792ceb3b2\n6d1839d2-5fbd-4357-be05-6a5561d4c3d9\nbe95e0e8-a0e8-4fb3-8602-e78c11ed6e6d\n15684665-689f-4fbe-b2da-ae08348c0c7e\n7b20ea43-4cbd-449d-9afa-125ffa37af6a\n10ac8b5c-c980-419b-bd17-95e0d928ead6\n997aa72a-d6d3-4de3-97ab-b29b18eb170e\n5b0fdb85-6796-4326-87cb-aa83576c1fe3\nbd9ee68e-cb67-4058-bb79-02dd2e3d12d6\n2b17c9fe-880d-4ced-bd30-f3e0f24f0c18\nde37d244-e984-4960-9d5a-d41f0cf26399\nf90c7f09-fa2c-475a-887f-463cabaf4651\nfb67b5c9-f264-4109-aaa6-a402060c8818\na3292ebd-1e80-4a64-9c6f-4861e3ff0f49\n54bea1dd-a9fa-4b55-b01a-bc148f1c41ba\n294b7216-cfae-49e3-a322-ca1e8ab44a0b\n61bb7836-c4e8-4f5d-96d5-750e46bdb088\n8f941dde-0844-4c2d-8c18-a57f50822a92\n95a61dbc-2ccd-4754-a9e1-efaddf3644de\n1363916d-d562-41c1-8c29-070db2651e2c\n4f2ba2f0-d613-4627-8722-7b8b8185dfee\n97f82e60-658f-4f1e-ae49-bf01536d04b9\n815db117-1ddc-4f8d-bb18-ad892a9ab4dc\nde8c1e73-b313-4956-a0ef-59a2566f94af\nd3130a84-244f-4e95-a583-6f52c67b66ab\n07df971c-7d1a-40da-b53e-eb19cfc6342e\n70b93709-ad28-46f3-baa2-8dc8d023d12c\nc1ae32b0-11b5-4b8c-b147-afab2442414a\n0758bd65-1500-4f01-96f4-88706da626f4\n426b2d7d-70fb-4826-8925-524457e12574\n9ea60421-5170-4cc7-921c-1e752dc7dbe3\n82af3258-e524-4d93-90af-0d8fbec5e4ba\n00af68be-993c-4f66-8db6-654b483c3661\na436a58d-394d-447d-80a6-1b5b9e86fab3\n4d46bdb1-ce53-4c9d-8465-9a952efa1626\ne2dfa02a-aba9-4545-85f1-375523f589b0\n9021ea96-2818-498f-8ac9-18cdecbca85a\ncaa1ce70-2307-4302-9fbd-895af0aba29e\ncb7274a7-157e-4411-b0ba-5d5387997e0b\n6d110200-9dbe-4104-8807-3dcccbc9bd40\ne63e84dd-f2f6-4002-8dc9-30de8ad2eae9\n7d1fff0a-52d1-4bf4-bd1a-031ed88d1c3e\nf4c2db08-96eb-405e-821b-da4f172c5b58\n715ea36c-0004-4e73-a3f8-0ff41ba28ab4\nb11adbde-d6b7-463f-a198-a528ac38415f\n9bc9b689-920d-4867-89de-628889cfaaec\n40339456-fa93-44ae-82cd-5d028df7c8c8\n4ae50c4d-a876-4b71-b2c5-d98a843b13f4\nc154156d-b085-43bb-832c-de9319d8e978\n7628fe3e-ef83-42c6-8363-64822ab3e3d8\nb53e2e70-bfa7-4ab2-9cc5-9583e159ddaf\n2c867d67-08f3-4547-b1d1-336997c558dd\n9fe515cf-0608-4874-8e65-b94fe0111323\nc97a60c1-8b14-4c14-adbe-ab834730db30\n200dc3a1-4858-4c72-a8fe-73ef508324d6\nc41153e7-a368-487e-a2dc-7380f68ad017\ncd90ce0d-5d37-4987-9e75-e794e5ce60de\n2bc1e82d-eb78-4fa6-abc2-8b87c4f5f17b\n6d372fb8-acd3-4e0e-8b95-4e56447a582e\nde109f07-4bf3-4dbb-a212-33a2f80b29c3\nd9a4e7f9-7503-4a26-9a8b-361933c243a9\n6f25d861-18d0-4bfe-99d1-97fd297f6061\nd599e4a5-43c8-46dc-af3b-c2f7471d6a9f\n0fa39858-9b4b-45fc-9041-1738605a644c\n46ba2e1b-33f4-43ce-8901-21548b6194b2\nc0799af0-9876-49f0-9b3d-f6c7381563b4\neecc83a5-d144-4903-966f-8a8842eddc71\nf140aa7b-420e-48e9-8d3a-e268f797a0f0\nac406fd6-1010-49a2-ad04-54479ca2c15b\nff81c1af-48ae-430d-933c-46dc40c80104\nc0c29443-2c93-4778-ae4c-c47380d7d597\n2a4ebe90-2603-47e8-9ee2-9178d7111127\n91858eee-8458-4bb0-820e-f6528f76d886\n3a374fa0-cf9c-4d8a-a60f-fd25a273eb22\n01fdd3b9-57d5-4682-8712-d39d493c63f7\n6d57ec94-a49c-418d-bdfa-bf1523cb7272\n5e507a97-d588-48d9-9021-aae8edfeccef\nd15da566-66dc-42ca-90e7-8875bacb47c1\n4f2b0570-2874-4527-b7ac-ddbd82b6b50c\n5864f91b-e186-4bfc-82a2-42f695ac4047\ne1365c33-1a5e-4db3-945b-ea72948351d4\nb994a5fb-76e1-4bce-80ba-60c3317439fd\n307f0daa-9341-442e-bac0-5f2fbcccfdb5\nb9747b2f-6990-4790-9cac-632f2635cd48\n2331fc95-8c16-4f63-a141-3daf8a3f6af9\na90cf983-b766-404f-996e-0fe1102af114\n80907687-852d-431a-ab6d-65a1be9df00c\n90673131-7815-4e7f-8e3d-c53795fe10c9\nb97e0076-8617-4f50-b5b5-8d90558b8c77\n393bf481-1190-478e-afb8-6596cd9fa378\n6ec81f00-e57e-4cb3-b8c4-38a3494527bb\n498530ba-ba1d-4fa8-8fbc-4af48548cb3e\n7ae3b5d1-4b36-4428-9ea2-1e196910c117\n199579a1-dcbc-426a-84d7-900188fb4e90\n8037a64c-2d18-47b6-80bd-b1994ad5937b\n568dd4e1-6fd8-4c68-a3f2-687e4e145b94\nc41c977c-52e2-4271-943c-8991d36dd638\nc8744bb0-7074-4f47-a1a7-8d5e593800af\n169d9f33-4ee0-4afa-99fa-89bc571fb972\neddc742a-7be5-416a-b731-7f74e1402ef6\n8e280da4-067e-42da-8521-7802343707bb\n78c9d322-af06-4a05-b258-518383f9b643\n74871d31-ba4c-4689-a65c-cc98c2ae8232\nf6f53489-6753-4584-859a-db1ff87ed6c3\n6a84119a-4ee5-47f4-a629-c4cc34022576\n6ebb67d7-8803-46fa-8f10-67bbde877298\n7e2f62ce-a5d4-4a98-b875-ae8df61f215a\n603b198a-1928-4851-852c-db38b78134bc\n376addd5-29a0-42ed-a049-6f1e4f7583c1\n5af0aaab-bfb3-4e0d-af39-918c8e03de8a\n6d011566-8b59-4600-ae71-b0717dfaa0aa\ncd7f95fc-20a9-4351-bd67-9b7b39d92dd9\n432e68fe-ea25-4f69-82d6-85078496509f\n773ec8f6-9585-4260-b892-9d69e7963454\n0fb17070-abf7-4ede-882d-478e1595e087\n4759a5e3-6253-41b3-9ab6-1e63918f8e79\nb632dec8-551e-4af1-a542-1741110a8830\nbecca3eb-e37a-459a-83f3-93e6d0d272ef\nad5526ac-e87e-46eb-b17c-457370c5b28e\nf3173e6f-65d3-4992-9a26-7b33ddb1d074\ned9e1ee0-f5f3-4a49-a09d-f3bedb8577d0\n1aaf595a-e010-4baf-ac46-70ce5b9b6266\n24bda9a0-4732-4272-8fe7-1fe4cb2b0bbc\nf6828057-a981-4b34-b4e3-020f452b1d67\n33af8015-c19a-4135-9d11-c97be3afe8ac\n05e5a625-b186-4d0a-acec-5191cd6abedb\n35520bf5-18f6-4cc9-ba02-a4b4efb529a7\n9910cd3b-8a5e-4607-bb16-6f7e9d5f3823\n51f40fa7-9ff8-4e17-a99c-7d237751478b\nda242d45-ce18-4836-b428-a11b46c0c4f3\n4dc2762b-6534-4073-9983-04ca892e4443\n1d381a5d-56a2-4c97-b7c2-5a6532ba0a8f\n2f49046a-961d-4fd6-a386-bf8e7c92ad44\n6f1c59d0-74c7-4b7b-99d4-203221b76aa7\n378fc207-e97a-4539-b672-f1fcfbabee29\ndfc9c252-9775-4b9b-a1a2-42a728e67a0d\n37c308d6-1cd7-4fae-a63a-81637ea1e0f0\n1329e31b-13ff-489d-83db-81897b0932a0\n85a01bcc-c1d6-4a60-baca-fbf88cddc305\n7085f93a-409d-4c00-aa56-93681c798143\n1fea6787-830d-44f4-bd69-8c5631f2e62b\n36a4da2f-d9a7-441d-bc73-003b9ff11557\nf90c6b05-52b9-4b54-946f-5e92942e8b17\neffbb9fa-8467-4ba6-b8b5-c59bb8c5230a\na3b9e4e4-670a-4e67-9caa-99a7c47c5a53\neb794ba6-3007-4203-8662-10d911f40086\n574a02e3-4b62-44af-a4d3-8915635ba4ee\nd9d888a4-3d51-4c60-844c-860a8c2c58e2\nb95a0204-334d-4256-8cab-b05298f6b7fb\naaff0e69-70a9-4bfa-bf85-026a495311d4\n28057f45-7dc4-4707-b2ad-9e5042f91dbc\n45dfa793-ca16-4b0f-bf17-5abde7471be8\n5c232bd3-5783-4622-abee-f9bc87b64cb6\nc4e8bcfd-a89b-4446-bde1-2fe77b9eb7cd\ndf408a15-7cdf-42ac-9e69-1c42be1c9487\n7f748059-3a12-4ffc-98f4-7924128186c6\n60855dae-629d-41dc-a138-b4cdcb9f4ddb\nceab1b7f-80b3-4dd4-a69d-4ec1f41f524d\na9715ef8-05f8-4ca5-8d03-0fcf095afd63\nd111b33f-1f1d-4d9a-a5b7-78c81d923f89\n009ea9d9-0270-41af-98ef-ac95aab4da2e\n2c2180d8-6b22-48a4-ac80-62f2db744525\nc185a330-ef03-4d18-99ba-ded60fa3319a\n8724ea4b-9c05-495f-a9f3-dcf23f0af8a9\n3e418a33-7277-474e-908f-53ba681ba7f2\na024c637-82df-4fb8-a36e-bca3d640c01c\nd717904a-5aeb-4f49-8f1d-116b2f2d2222\n4ef4b5bb-7dbc-442c-ab65-ec47fd6f0466\n8ed46a5b-c2c1-48ca-9963-b7a47c384e16\n195ce94b-1502-4f42-8bfc-93f4473ecfa8\n3bf398a5-424b-4075-8f44-5b98a2653ff7\n6e80165e-ba62-4872-ba08-9e311b2820e9\nf6ab2fc3-6faf-47ca-ba52-63c6a164fffe\ncf153961-d56e-4677-b932-93b36b14bd57\n191aa191-67ae-4efa-adfa-1131c494a495\nb1b8e34e-62d9-487c-a71e-86621aa54b4a\n25c00af3-c3b0-42d6-97a6-25ad74a2221e\nb440e2e2-3a1b-43b6-8033-3916b9ffa11d\n45064b9e-8f09-4868-915c-deb5bdeeca2f\na58f35b6-cae8-4eb5-ad52-0afaaeafff98\n5e35004b-9059-454a-b83d-193a70af51e1\n638d30d9-e8cf-4544-b668-964e3d78399e\na61f4fe2-dc07-44f2-b179-125bbc5bdace\nc60449b3-c329-4527-b119-87cdebcc36c0\n78b7c7a1-d057-41b6-b349-0a9f12b1a7bb\n1f3c912a-610f-499d-9ccc-894f2215d63d\ndff8c8d5-f7df-427c-9905-edfa77dc157c\nad533847-97d2-4277-8aa8-ef63db36f91f\n276d493c-8bac-4e7f-b6e2-f68b179135ae\ne2156b07-0a3a-4d9b-950f-ac573b810917\n175f9743-0b83-473f-b710-9fe0eec89446\nfd53a3c5-9734-47f4-9308-4f0b2210c4c1\n0fe5d6ff-e42e-4511-826d-dfeb0a0555cc\n7b2b349f-dc11-423d-a3bb-acba8bb54bea\ne5ffd9c8-aced-4f0b-a6ef-1a0ddc2f5229\naaf5ace9-43f5-48c4-bcbb-2322203ba5ef\na76478fc-ba60-4160-974f-3da79149037c\na0eebaee-7cc3-443c-bb7c-c7a5e3ed0022\n1e37a054-f454-4e98-8e83-f9bd4399542a\n7f77603d-24f3-4e0b-b948-bd5ebe7531c7\n5f8794a9-ef1e-4d60-8bf9-b5fe21fa6a20\n9c3d7565-75ba-4085-9816-c146c23af9ca\ndda45521-9675-4a74-b61d-1d1e55161ebd\nc8b413d0-9566-41b9-abf2-8853664195c1\nb4e20afe-fda2-4705-87b8-756820cb5288\n37b267d6-a294-4fb6-8bc6-eb773047719a\nae3e9a97-240c-42b7-a678-fb625d780035\nb564fd70-af34-4796-8975-b3cdebcebebf\ndd717139-5f42-4c43-8045-3fef22d8e27c\n10fda02e-85bb-4148-a18c-0dd24d4f9b53\n0d7be8d0-a3b1-4f57-9a07-d114eee90692\ncddf2c08-922f-4135-ae15-4dc0f93e2a98\n53dec751-378b-469e-ae68-0e506fffcf44\nc8eaa9b6-90c0-4dd7-af99-c7f753389902\n36346e03-5925-49d3-8f73-263deaefc635\n84855c23-10c2-4c3c-88c5-59e052a09615\n664fb908-df6f-4efa-b738-0d05375f9f70\n5baa5d09-9a26-46a2-b742-0df36989e21f\n1d305122-7dd6-432d-b536-919497bf63e8\n6a30d741-ee7f-4b22-9e28-8ac26816eb14\n023e6e1c-39ad-495e-a183-8a491069f316\n23f8fec4-6ca3-42af-981b-63b37002c43f\nfff0cc76-368c-40c0-9b82-2bbf2b64702b\nca9d6842-1916-4026-9785-f9f42aad5bd9\naddf5d53-f2fa-41f0-b364-60906389dd03\n2277896b-c364-44bb-acb1-a6cbfcae457f\na6190591-5442-43a0-b7ca-e1190bf39aec\n16424000-d2cb-425c-bc11-d09c2329bd1b\nb319f1da-3f33-4f86-a571-f3196476cad7\n4b3795b0-ac68-468c-af0c-a856f3056b49\n6542e342-413b-4e6f-ae50-e4f6c780b497\nf806b674-5e62-4a8a-b64e-34f5c60c0414\na4d5d8fc-944c-4550-b9a4-c9438f90cb85\nc167b4f0-2e40-4b60-af2e-b3b080e85a41\n1f4524cf-0906-400b-bc6c-779e311630e5\n6ea09310-c739-485a-be8a-2a9a52cb02f6\n3361cb89-ca4f-41a7-80c6-3132a16ae300\n42c68519-4842-4c25-b818-855d3bed0f79\na471d494-33b3-4a08-a50d-d8202d482e90\n33205195-c1ed-4894-9abb-d485043094d4\nbfcbfc5c-cdd8-481d-936d-2c823a9f530e\n23ceb573-db4d-40c1-8787-48db19b2aaf8\nc6edfab1-97fd-4a79-a4d2-d9ddbf18d398\neba1a055-5ac7-487f-9964-5b5fdfb43439\n55f01204-64c2-409f-9321-792f56d20fe0\n476c0374-77b9-45f8-85e3-8546dd121251\nebf3222c-eebc-4ef2-8f11-ebb976456799\n9de8919a-3a5b-4cc2-b1ff-01d719d856ca\n05a0d3c1-cc27-42ae-ae22-614d3ff25b2a\n9d7ecec1-94ae-43fa-a9e3-532c35ba3513\ndcdb302d-a13e-42c0-99d2-5bec0d8b66d6\nd7018319-fc26-455a-b6a8-732b079a307a\n2e9d39d4-d1ac-491e-854b-2aa9ad9c3e3a\n3da5842f-a106-4d89-87e3-13ba7c87a5e5\na4ee2377-76f7-4dde-9741-9294ff7f622a\n94b8a9d4-4925-41a5-92df-af8b52cd8cc2\n149bfba5-e178-4a6e-8220-5307c2b022cd\nadfaabb2-ac6b-4b8b-920e-622cf7753b1c\n3c475d6c-5983-42b7-9552-041f7052f085\nadcdb5d4-8f8a-4c20-adde-5b8e92bf6e00\n6737512f-1170-45f4-b6b3-e4ff652d60b3\n135de8b8-559e-4f8f-8949-5d3133abaa95\n3cc96c5f-e0be-4543-81ee-64d2987fa8f1\n7fca1e3a-6992-48ad-87fd-e6547ecce029\n6a0efcc3-d547-40e7-9757-b01386934f9f\nfbceb761-0643-42f9-a414-e1a0acefaaa5\nbef43d82-5456-4e39-8c89-c14a79dd3a7b\n9a9d62be-d99b-46c4-adb6-8e7e74e616f9\nc1be83eb-9163-486f-8bb8-c1e29f757c10\n46f886a1-fabe-49b2-ac8c-98ab476f9900\n1b8ba3eb-d519-401e-a611-7e042f8a8730\n44975d27-de96-48a0-8252-c2c35e46614f\na3790db5-5e36-4232-a0c8-01b5d26f74a7\n132a69bd-f11c-4fb4-afa6-83314c68873a\nb6987b7c-f895-48a8-8146-14ba598adfe7\n9f1b652f-d48c-4b7a-a799-6854b270b926\nf5b69130-7216-48fb-8930-6fc47010de99\n4106bdfa-a0de-49c3-a86f-33bc941e8834\n11d90428-7952-4ebb-9571-6101fd82ac31\n15216910-68ba-40be-a66e-767484dc8c4b\n6b47ce55-9585-4db9-a349-196c7253b767\n06ce3a5e-1211-4880-a9da-8c87ffd53d28\n2156f606-28d9-45bc-b692-87bf37df1250\ndebeb921-5515-42c1-bd38-1ac97c739379\n709907b8-26b4-4874-b290-b766461d5873\n855be0bc-f0bb-4830-aa9d-6d704f613cb5\na16b583e-c2d3-4d8f-982e-c359dc05246b\n86f83adf-1661-4b75-b4d8-fc50bce46a8a\n78186e78-e5de-4350-a703-b8bd401b3b82\n14e41301-4ff1-4c10-98d5-422f05d5c598\n22e33dae-f659-4c9a-ad88-465bbdc0f752\n90181cf7-e8a5-4a63-b2f2-eae2844f2843\n4f79623e-282a-4e39-a5aa-6fd0c8d3e3b5\n0d45978e-7e46-41ec-98a9-da822ce8b5b8\n96da6ada-2cde-4b5e-9344-962dca0214fe\n3e4bf54d-bd1a-4f04-a64b-1156f62e7a57\n078ad99f-6dd6-4be3-b5a8-62092b4a4e30\n97e094b8-7192-4408-b39f-8424a8db02e1\nf5504ca9-7f0e-468d-a790-0bbea7cbd59c\n76cbd949-a0bd-4756-8d21-2bcc8e17aab5\n546bc4fa-ba9e-427f-af44-d116e1460078\na7ef47e0-72df-408b-b799-7bbf4cb0d615\nc1bce33e-2801-4a3c-8d23-ff4508c520cd\nba1d1009-3fe4-4bd0-b68c-41d6ac4c094f\n9c3e0060-7d90-4990-bbc3-20cbebc1e839\n79209f1d-f130-489d-8b9e-1eba120d8876\nd4ab23db-1967-4c47-984d-187b3b392fce\n17e0f784-9bcd-4bda-85ae-dd116ad79d71\n66b28865-bf2f-4740-8591-ae4a21dd1f22\n88260e0d-3a67-4c5b-895d-dd81fc964970\ne4ee3082-2991-46a8-b9d5-6bdeae23da16\nb13a9e97-dd15-407c-9ebc-a7729157cc77\n6f715f8a-b8c1-4511-bfb1-f49adc5c6bca\nff9008f8-dcb5-41ee-902c-d3cb0099df22\n28e66e58-8972-48c7-b2d9-76b997983899\n496c631d-05b8-4d22-af96-a30eb17d40b7\nf25ebee4-6c39-42f5-bca2-5ff58da3edc1\nc79182a3-d51c-4864-8892-e483a69dd3eb\nbfc4f859-fe08-4a25-b491-00dded366ba2\n5c3c3b7e-9f2e-43d7-9bc3-e0f9aeb7daf2\n02531c9f-64be-4630-bef9-bb870139b8f3\n15f8b6db-3c1b-4795-8873-1c7f567e0566\ne1dcbbe7-f1ae-4cb3-9aed-2e829353cc1d\n787a892d-ce58-4476-8adb-10ae31d05963\n492e0207-6de7-442c-85c1-8a4688c9574a\n6f9f7986-161f-4157-a617-15674289b9cf\nfbf2135b-77aa-441a-bcac-0d40600f9e53\nc49fcfb1-266b-42cd-b4a3-62c033429846\nf3233e87-ddba-4ce7-9fe1-720df3a8217e\n72b6e74b-600c-4ce7-a8bc-6b69029e425e\n160ac219-379b-4947-83b4-959bd54c4575\n5fa2b0f0-ad50-4263-b0dc-45b763533a1a\ncde404c0-6241-4371-bfde-ecc0eb31039b\naa9fff63-9096-4225-bdc2-75d18068c8ca\nd9ebc268-de98-4d7b-8dc7-b8826bc657aa\na24af0d2-4528-4ad8-ab09-dad8df5d71ba\n5b55c97f-9da2-49f9-9a6f-10f6407e9ec0\n06858cee-211e-4ff2-9456-b3dd7d481e6c\nd8f16a79-e036-4862-855a-7770a7d18711\nfe6bf97e-ec63-4257-b730-946e93ddf6dc\nf92708e7-c3ec-4cb2-aec3-442a123fd645\n0b2b0746-672e-4981-9274-a2bf2c85c88a\n07233a47-8c8c-4a7a-9dbb-b035fbb13f7b\n3ad74231-832c-4522-98d5-e76bfc36cd6e\n9698a581-56f5-499d-80b0-2598d4b2f4c5\n6e2cd9a1-ee5b-4847-b358-140b159e40a3\nf674b31d-0d41-4434-a0bb-c567d8a4faf7\n3f25f208-718a-4f19-a28b-63de131a50f3\nbb80d174-c1a6-49be-867a-f5e0b0224ed4\n4751f627-3930-4510-875b-ff3700a46552\ncc7613a0-f4ab-4040-a7c4-8ad19b8fabe3\n6594e0ab-f219-474c-86ba-136d699589ba\n2fcce96f-e63a-4261-9f09-f0a80091a810\nc36b8e40-d416-454d-b69d-c6b59ec6f5b4\nd310823f-efc4-4069-89ac-76d7326e12b2\n14a5692f-6c17-44de-93f7-43259e9a6ee8\ncb92bcfd-e0d4-4bf6-b486-581f2552c5eb\neab33f5a-ea5a-4cdb-8338-457f003cf830\n34520940-73f9-4b29-878d-248cb5f8cd3d\n4be95026-e769-4064-a609-e2e7d065f6f4\n24c1ee89-6730-4b50-b2d0-ccbfd47b4d0d\ne350c5d1-7b43-4ee6-a17f-784db4363de3\ne4137f0e-5f1a-4913-955f-222c7b970a5e\nb612f466-bf27-4c7b-9c67-ce8aeddc08a2\n746554cd-9645-44de-ad7d-7a3e260358aa\n303d604f-cbb4-45b0-bbf6-96346ebbc36c\n0c9143bd-5283-461e-a0e1-39554180f5be\nd7fffab8-53bc-40ed-8836-34dc47f6b3d5\nc053dbf9-8faf-4b9b-9460-7e8d05c87980\n74714310-1a78-48ad-b4df-e3c8f70ea1e1\n8019b4ea-c22f-4839-ac63-63185c2d5de8\n002919ae-2bda-419e-9255-5155c01d4b4a\n1d5de550-4ced-4b0c-805e-1bc244ac07e8\neb731004-f76a-4966-ba2a-620e4cdab31b\nd7b94193-7dd4-4783-b3f7-f8b9380eb2d0\ne5996e4d-316b-4e35-adce-59ceb6a52ab4\n43af14c3-47df-4648-83ba-8c07baecd8c2\ndc4a4bf9-28af-4373-aef7-5e344ca7fdbc\ndf9d88b8-4530-4e8d-b9b7-c54f64972155\nebd361d1-1759-4a32-9894-204407c7e04c\n0cb38f24-193a-4eda-b4cc-49c46e02c517\n524fda9a-1de7-4a1a-af5f-85ab60961a77\n0a9857dd-945c-4596-bfbb-de49ee96f867\nf7b1e93c-9b75-45dc-b865-b86809ab9b09\n86f0e0ac-2ff3-48f0-a55b-94b581081969\n2c726a9a-adb8-4094-8c55-e5bdbf58eba9\nd5f132cf-6315-449a-810f-e538e8def9a3\nf433e18f-5ee9-4075-aacd-a42cc328c76e\n661097f3-c1ba-4c50-b7be-e1772dacef4e\n5cf1f8bf-f496-45d6-a5b9-bb15b9396891\nac521f33-9a5e-4f30-bff1-6533e4cc78de\nc87c9a0f-5bae-4ced-9ea2-e54498713784\n449b79a9-9712-44e1-862a-cacfea16c694\n9d580001-dadf-43b7-a993-97ff7a2885d6\n46fc9a4a-9f12-44c7-8348-452c1e5a3d09\na7203f8e-75b8-46d9-b47e-0c52f1cc4510\n64f759ac-12cd-44eb-8b16-9d42490340b6\n9fac529c-fd92-425c-a0af-0c86fe06372c\nf2d25d08-363f-4141-a07c-3d10b0059543\n06878868-8574-4979-b166-df14176c1a28\na55f9e7b-d79c-4a45-a852-5a04ad90e821\nd36ee670-038e-45d7-9000-8767aacd2846\nf8182bcc-9d7d-4350-8760-d19b2f30bef2\n8ede74a5-1261-4105-a998-8c817bacab03\nc02bd6a3-d399-4a3e-a8f6-04f8d40f5a0e\n0a651aa1-c15f-4d11-a0ab-08b5eff43749\n75b41b97-c6f4-476b-83a8-1bbc9e204492\nfd7e1881-0b01-43a4-9372-c59d4418ac81\n39609309-a7d0-4f8f-84a7-856895cf395a\n2f39edfe-143a-47e5-991e-bc76fe54fc11\n27dc5557-2ec5-4481-b7db-13345a060cf6\nc27879ff-5449-44f5-bdbb-5dffca5f01b8\nf9fd4451-0d37-4095-9678-bf436d5ec2d3\n828c84ff-55d6-499d-9c5e-269d1d81577a\nb8788690-d6e0-4526-8c7b-af5816b9b2f5\n40487d5f-403e-44da-bd44-33d2bcc65c51\ne3f4761d-7bd5-4ce6-8ff0-5b524cf26e61\n5c565d10-5496-4f5a-9122-645eff946c92\n278ff4b9-2c42-43a1-99b0-f430fa325013\n362463c4-62e4-4b4e-adf3-52505964b1bc\ne9e228f4-228b-48e6-8d3d-29fc493f378d\nf26427f9-58be-44f4-8641-9540785f4e67\na2dad83e-1171-43a5-8d0f-983aa0603ff5\n86521a58-4b91-4937-8efc-1eab5a1f360a\n5d24437e-affe-440d-9dc6-d48c68973fde\na8be06da-bd43-49c3-b2fc-fa408c702715\n4ba8b448-6bf6-43a8-8bbc-8e2672d5978b\n42f98d01-3d4e-4399-8d60-27cac3b361a2\nc37df75e-b7b5-4d7f-b1f0-d719b744ff91\nf206927f-ace3-482b-bb10-61d055a98390\n6030cafe-5fd5-44d1-ab3d-0c964aa1a5be\ne0281093-a173-4109-a705-581e1609a16e\n027a16b3-c82d-465b-a2c9-1b145372f75e\nb1d7a2c6-038f-4a96-a7e6-452e701b35b6\ncc008cc1-3c60-4594-a3b5-4f7a5d940e2a\nad1c764b-a3da-4c01-94ec-ae8782e00609\nd3cfc7f8-7a91-4f2f-bb31-20ee449889bb\nac9e84e9-1b77-4bca-aa53-fc53654b965e\nfa6fd8e3-ef9b-4e74-844f-b04877ed651e\ndfcd4073-ebec-41c0-808a-d652896f2955\nc7dcd726-dd69-4e97-8a85-6d1ea9976c48\n45d12b75-c4a7-464b-9562-2b0a8f2fe60b\n0d9cbb7f-0e2f-4b42-baed-d1d820857588\n021fb6dc-9ad1-4cb0-8209-81e37279ff92\ne899b8c5-128d-4efa-bd69-077339522d97\n1e0ca04d-9f57-4ce6-be53-e0c11710ee89\n749530ea-7991-44af-ab82-f5def6679079\n8d9b6cf2-9b1f-4925-a5fe-8b7d5c0dcbd2\nd5f7f0fd-7c65-4d53-9323-535b29971016\nf5490fe4-6d28-4e75-abc4-0ea1ce3dd597\n0937ed21-0882-412a-8dcb-ab1746840dda\nac3234f1-174e-4c49-843f-55c96dfa58c9\n4c64a36a-1323-425a-8175-1615ea631af1\nbc888578-1a87-4db7-b6ef-84f4c07bf9e9\nd623e8b8-b284-41f1-8097-40fc28947633\nfbf0f178-f83a-4040-b2f7-5800a57acdba\n7fd861ef-f7f5-43d2-bfc0-a9b27c0eec0e\n04d52585-bef4-4f1a-9a93-4ab4eb03f34f\ne140245e-dcff-4540-bd58-28d50de2c38e\nd974fb0b-5de7-4843-8046-6d9e84ded5c2\n1c91a407-6dfb-4a0f-b2bc-2a8843ee7fdb\nda56e2b9-dbea-450a-92ce-12ea140092a9\n27204948-0324-41de-9f3c-e23ee39ee59d\ncc1f02b2-0b30-47d2-9f3e-06c766e3c398\nbe81dcd4-1e58-4da9-9cf4-485878f64407\ndc2033ce-5ae2-4e8e-b842-97cd68960853\n3243ff99-2165-4bb7-a859-fa9316782912\n6db48221-6992-45e5-90fa-507bc8c9fee4\n089e0ec4-0912-4cfd-a19c-b643ba3fce59\na563b60c-4c4d-490a-a97f-251294da7976\n9a7ef47d-f3c6-42df-8c48-892f67dbd4a5\nb9495e57-8ad7-4a56-8d55-df6db07fffb7\n87dfaed6-3c15-4983-a85e-b9d51c6e7e5c\n5d41aae1-b735-4ae1-b31d-a3a09235b431\n83714335-7a6a-460e-b7ff-f28cd6d68568\naa08341c-b304-4a8b-9128-6641367bf79d\n6904a58e-1c70-4e4e-806a-689821b3bba4\nae33111e-dab0-4151-b10c-94a18b4fc63d\nc5956014-ddb1-4668-82ad-4ada4ea81d35\nb9045cf6-3f51-4ea3-b8a6-c107ab4272f0\n702a9849-9225-4886-ad11-6e4118a8d04d\n2c562aef-0b92-47b1-b6ef-649bffadff28\ncb6b9f88-1f80-4726-a6f1-b37748bd2eb9\neb0f11db-04c6-4189-af75-93967d7f822c\n0dd54716-6b2f-415f-a51b-ec2062981f62\n90c46898-2815-401d-bbe3-d0ff4b75cbb6\ne86dfa3e-43eb-4519-a76e-b5ce0337619c\n5e608dac-2fc8-493c-a078-eed7b4cba8ec\nd4d48fc5-0066-46be-a496-1a1c5797ec01\n1fe1514f-18cb-45c8-8adb-0018eb665de8\n696e24e7-443f-4063-994d-7b1d2439be53\n9d37db87-26e1-4822-a55f-fc9fe53ac8c8\nfe674c9a-7a75-4a75-9e23-43d45a8fe8d3\n6c8991b9-6aa3-4803-9f4a-2edea76f9122\n51ff0885-3e72-4db0-8291-fbfadedcb337\n8f968a76-c676-48ff-925b-dc717a6ae761\ne9784b1b-4c04-4fe0-873b-ea736791152b\neeac3b09-199f-47a6-9ac7-a749b8da9ba6\n19cc8aab-c2a9-465a-8f4b-7fe369be929c\nea7b1455-40f2-4bd7-a15f-d5975851ab38\n4255da88-2bf8-4b26-832a-cc0afe2bd96f\nb65f69cc-c7c5-495a-85c5-ca1531d67ed8\n0dc63009-3582-4cc1-80ee-89c0e317fe0f\n18068c50-1b62-4c9f-b3be-8df512924126\n49df63f5-122f-4393-add0-731e1b387aa2\ne251730b-d8bf-4fc1-a5c7-817efd7fc944\ne46702dd-f10f-483e-a894-d9ef4861d00e\n6d0151cd-f3d4-43ad-9f5f-eb36883e810b\n54db4715-fb95-433d-9c0b-bd253affc630\n3d117e24-56d7-4982-9cbd-c2eae9fe57f2\n4c2efa3f-721d-4a4b-9d64-081fb16884a2\n9d3b446e-fe6e-4a9d-bb70-cf53e865852f\n5c6520a9-7c2b-4cdc-9b01-cfa1e2f9b383\n5155ce6f-e74c-4e9b-9e85-b07643974b82\n9203ec6e-38d7-49d5-9d0d-154145df42fd\n7c0cea02-3633-4bea-8dc4-381d7ca1d29b\n19a80cdf-6331-42df-894d-5f37b130bc95\n9290216d-372f-407c-bdcd-ad22ca68f900\na8bf8123-d60e-4c62-ac89-9317acb84f0f\n14b10a85-d2ac-4288-b3c8-dd3d55e8d5af\n082a0097-0897-446a-a5f6-59d3b01b829c\ned85452b-7b17-44df-a5d2-b68350a4151c\nab038883-e5d4-4b80-948a-195d3c045433\nf4ae7dc7-6622-43f7-b9f8-6019ea2b839f\n231feee8-321c-43e7-afb9-651adcb5f59f\na4318f36-1692-4d27-b338-b3abf90265e6\naf8f9c4d-1e56-422b-95bf-3e3784c19641\n4f518cf5-23ce-4509-a859-ecf2482e0d4f\n8a533efd-e6fd-4c48-bbe4-ebe1355f5040\n6ff6a514-5cf5-46e1-838d-c707b9c9285b\n33b44f72-4d7c-4eaf-a740-25ef07320e78\n8d6eb47f-e054-4089-9bf3-ff0f2bf0bf3c\n53361cc3-332d-4f50-83bc-73cf075366ca\n92bd9668-78d4-40b2-a221-4066e29c98d7\nc165c6ef-3c0a-4889-9378-66cf275ceffe\n210975b8-f076-4fd7-99ed-35789f3cf4d1\n66bdefd1-c6c2-4b76-b57a-d23a8113a73d\n5baca1d7-c98b-4fda-b6a6-8e0a8813ac7a\nc8583755-fe9e-4f3f-a928-e0615bd7db39\nd33478a9-9220-44de-95b3-ff230178d81c\n44fbb0a5-c9aa-490e-a16f-83eaf26091d9\na1a70c88-e157-46b3-b030-af379a772296\n2162be19-9b58-4819-92eb-962a9dd6c185\naf08419d-1023-44ef-a22f-7761d37fede4\n96279681-fd47-428f-b326-5b33934f2689\n00a40fa7-8e9a-4780-9185-8c044d542df3\nfb94beab-6de4-473e-a9f4-5d0ae42d5b43\nea46ec11-24b0-4dbf-8787-523cc2c325bd\na9f7e437-b889-4813-93b4-0fb6d577b7c7\n51857dad-a80b-443d-ac49-5c0d5aa37fa8\n70a5d980-a21d-49a5-889f-e0a9884ee113\n7a4bfb9e-a284-4cbc-9093-1f46df0fe82f\n817653d7-ae86-48f9-818f-d1bc4ac6baf9\ncac839fb-4920-4d04-8e83-6150682653a9\ne8ef2a39-85e1-4265-9d37-e6ff7dfa2e75\n8db6b1b8-f8cc-435e-beac-0c7a23b4c1e7\ncad4639f-fc20-46ca-889e-fe0cd3ef066a\n0a10ca31-154e-49e7-9517-6dfca3227302\n660f4fa3-70ca-48a1-b09b-95fef10d55b2\nb92c12ca-8f10-42fc-805a-1f89356ce058\na10ccb83-ddef-461c-ae1d-5fded90147c8\nc9458a35-a117-49f4-a85f-e9029a564b52\ne3ab0ae4-9140-4e83-8c51-79d8dd9a9859\n0c5d40ca-2605-447c-bae7-9764bbe0d519\ne1050708-b328-4eb0-9c00-8fe3cd10c0b3\na6724e1e-e6d4-4572-ad44-4c1cab6fbc48\n7b652add-7f31-410b-8649-b425066d58bc\nb57fe8e0-8087-41f8-8328-b80edd5516d1\na497e3f9-24da-434f-9f8f-95fe28c5c2da\n0fbd80ab-98ae-4235-8206-357281002bdc\n83236df2-aa35-4d35-9ba5-aa6e91551f34\nbdaf38ac-8efd-4dcc-9249-f626673f98dd\nd29bd1f8-1dcb-476e-97c0-2f3f6520a347\n2d6b14b0-7f21-4052-bb9a-f0ca823f7935\nd3f57b21-da67-413e-8bfe-77308e68fb15\n00ffd7fc-65ad-4e97-a054-86e1732916c3\na7de81b4-ab07-4696-92d0-b33bc6b5ef86\nf4659c94-a114-473b-9f1f-18de0647024a\ncd6d7f19-2bc3-479c-82ba-48f1cbd0c40a\n2eb7e978-6866-45f6-b3cc-5114fd8771ca\nead4e3cb-2446-447d-81d5-d10de0933908\nef36735f-2012-44a0-a88e-7cf8c4248b28\n9591acdd-88e5-4632-a25c-4bb41d0da553\n745e1aec-7388-4fe1-b52a-6bb43852eaae\n635cfdd0-c5a6-4555-8b3f-757997e4a6b2\n1f41b59e-29dd-4d95-8e7d-8b4b95985596\n1dc099a9-effe-4794-8ed9-bad09ee920f7\n9bf489f8-3f6f-4d5e-9841-fe40eea4ba66\n724d5d3c-313c-4a56-8d84-450a947af97c\n282493dd-7678-4f68-b4fd-fca5d765489c\n7ec2ec81-9051-4fa4-9ad9-8a1e5755fc3b\n85fa9c7e-25dd-463d-819f-d7a5b6cc42e8\n30bb3697-e8f9-4f4a-8e2b-3bc1f36d5130\nb31bad87-9d40-4c8d-b974-66c3df0e1f1c\n9881fcaa-0f4c-4baa-8a3d-40370bea0b10\n77ba6c9d-668d-4985-90ae-89a7389e9f13\n1793b652-c890-4543-bc3b-bef93b5fd66b\n6f8be272-3f94-4c61-ac25-33fbb936f237\n31d8010c-db9a-4434-81fb-d9d627d40e8b\n7dfdde69-142d-45ff-ba18-b039496a7196\ndf890b65-40f5-47ca-b9c4-ba0c923485ca\n930b78f1-6103-4c4f-901d-b567914f0e65\na9ac7e4c-cb39-4e6a-8188-b76370a7a113\n6a332b4c-5e85-478d-8c5d-d53ba71f4e71\n8f9d1a66-8f46-487b-a145-b64c5672bd0c\n42377cd0-2820-4097-949d-ec6ca3427f57\nec9efe15-d87a-4c68-bf69-f0fd6d7fd211\nc10a12ff-f3d1-4723-a4ad-58f6375d8d1e\nefa7164c-b45e-4188-9235-6cf3348720d2\n0e9258f8-0b29-4c59-be81-87d9e4113ef2\nd191f514-5bb2-4c82-95f4-df4d6353930f\ne2a32bfd-d3c7-4873-81d4-8f4117095acd\na798ecb4-6acb-4d30-8d3c-3bdb3e1f7661\n0cddf6c1-6f2c-43ff-9f4f-4e21e0d57274\nce803e0a-0a5a-484c-b315-eaf2907da48d\n5e46e0d5-a4f7-4698-840c-ae27915b2f47\n44c19ca4-186e-4570-9a17-39e24d59dd74\n0e7f187c-1a07-4eae-a31e-127a64ac1930\nf6da086b-edc7-4376-827a-e7815d50c8c1\ne89096a4-a69b-4c1f-b7d0-251c22d4a7f3\nf50dbe6c-ed5b-4fb6-a63f-a43163b7c168\ncda34a95-11c8-44ac-aa38-a0bee4b7f605\n783cf757-4ac7-43d3-8659-581c310c2aed\n464d2850-6cbc-4be4-9e47-8f76ceda4fbc\n13fb0923-e765-444e-971c-a12bae27cce0\n614e63f3-f24b-461d-a415-394464dff396\nbcd7d055-cd3d-40d4-94b9-6f5b375a9a62\nb3594e1d-9201-4028-8044-c888101c86d0\n7eeda700-3368-4e03-ba92-788186eca53e\n48fe20a0-20e2-4a80-8426-451ee2508c94\n35f43711-499f-49dc-9532-62dcbe12f5af\n90281c28-6927-4fb0-b3cb-3be4ef805295\n1c79efe1-814b-436b-b29f-7b38041a38b3\n07ea8f99-aa4b-4b85-8a33-62c567952719\n2483e639-e505-4295-8215-2df32b235de2\n8631ba45-37dc-43b2-aff4-b92c2d6c7c99\nb323238d-99aa-45ff-a7fd-1dc94b7405b2\nbfdf7142-45ba-4fb6-a730-c4174222340b\n5c15f559-2e24-42c8-99ad-4eb8d97623b3\n45811f05-d6c8-4001-8d14-592b7f185fdb\n7a13ae48-5419-4303-89a9-b24ab34067d9\ncaaa9cf6-7fbd-41e0-9cfe-e60e723c6a04\n43bb204b-c672-4550-99ef-d8c7f8c6e6fb\nfa83df30-fb48-4f40-831c-68636e8ac398\n6dda061b-2559-4b32-b046-f4a4493f2091\nfeb5bc22-a676-404f-a72b-1b4a5da90cc5\n911c58c1-c5f7-42c4-abf9-057e4c3fbc2a\n36fd4701-efee-4c0c-9083-0c65c3cb550d\nd4775b5b-f978-4cc9-9ad0-90da63ce92a5\n1e8f57f9-613a-44d8-9e54-2eb226f27f37\na534a195-0b49-48fd-8df3-39595bddbfab\n715dc116-345c-4da4-ba35-0df3c82e1278\n43919d8d-d5f3-43a8-be5b-cf1b75b2174c\n3c6b2715-aacb-4f55-a1ac-0f3eddade133\n58a76b58-92cf-4080-b702-2a132f3b955b\n6e82ea6c-8af7-448a-8a0e-a90612603d69\n90fa8780-7a8d-4a9a-984a-5e2851e73d1d\nfbfa46cd-8d97-4c5e-9599-962d60ac5979\nc5e457a2-c06b-4079-a994-96cd285168e2\n70eeb2e1-b5de-4b72-92bf-b1f27f206c9d\ncb0e942a-2e13-4b4f-b89d-777010a59297\ncc606be1-2c8d-4f29-8572-5b8e0166d033\n391265a3-c2f1-4118-ac0b-37f6401bdbda\ncba53a36-66fa-4dd9-92a7-da74a025d851\n19189e5e-4112-4a21-99f4-a0e3d6271432\n78dc74b3-9f5c-43fb-a89e-80893a136faf\n39a270b5-3458-430d-9bcf-7f2bcde03b93\n904bb366-8627-4af8-a271-36464ebbfe1a\nebebef99-1c24-4977-9afe-b1e8cbc56756\n210cc395-b065-4f79-b20e-00ff5f855124\nb6a4d61b-3002-46bc-b041-99bc9888a9d9\n7c64fb37-34f5-4a5f-b501-363b625baec9\nf9bae309-bacc-4328-841d-dd418c1896d9\ne15fb530-d952-4103-a5fd-632b9b58242c\n94505e53-2b3f-40e7-a01a-ee0eb4d37165\nf9620715-b50a-4cb8-b99d-a7fc8de26d85\n8d2f7d42-3259-490d-9209-fd491e514229\ncaaf763d-fcd4-4f59-b061-11b26532e1d6\n8cbf7aef-5f94-4a6b-9360-663635797230\nbe713b64-a7f8-40c2-bf8e-d4978eb83015\n2001bb27-946f-4d6d-a29a-5be6156e3009\nd75dd44d-838c-49ab-b6b2-8f394e299c19\nf20bf96c-dd21-49ba-b3e7-b37b817a72d3\ndddf1c18-fc8e-41c9-9000-bc9143623bf8\n69c22ecc-e301-4f42-85f4-e3abd06b7af3\nddd0fa68-3236-49b9-98b0-88981699d1f0\n1b502ac7-fe05-4e3d-88bf-3ea6b70fa612\nd70ff330-03ef-4938-9d14-81662be1953e\n77ab6b06-4388-4e73-81c4-8a06073d3ce2\nb7464def-88f6-4d9b-8e29-a4a0bf67cafa\n0cc10944-6c8a-4ae6-99a2-f64421340ad9\n06dd37c6-6e94-415c-90a8-47350dc5f7ad\n5eb4c92f-ba53-4ed7-89c2-eed7393d9fd7\ncf666e82-641a-4f36-ace7-909f51927c81\n66be6e93-0c07-4396-ba33-7685a5e94b24\ne69f763a-949c-419d-a753-56583bebe343\nd1b0c08a-604a-4b90-ab06-e99da8e352c6\n66b424fb-394c-43ec-a2c3-1ff19ecbb306\n8b96e4e3-f37e-46b7-8a9b-1c4345af5d38\n51268833-8ba4-4176-a990-916422a3d1e5\n3a6fcb46-cad8-471d-bb19-868eda7f14d3\ne67465ad-98ad-4c14-9611-3890b6625341\n2274da23-781d-48e5-89a6-224df3f9e04c\n7648656c-a018-4b82-9fe5-55aa3ba2fb42\n2ba04ca1-be8d-4ec2-82f6-2e4cbc746a1b\n5969cf2c-fd3b-4513-bbde-0d0845698e3c\n81e9640a-213e-40c6-b8b8-41a11c344a38\ncbedd8ff-8027-4aa3-8b36-dfcd31cade65\n25d71ec9-a287-409e-a31e-045b5fdf19c5\n6c78c46e-f4e9-4ee4-aaf5-d59b6c1238e8\n49097ab8-af5c-45a6-a63b-5cce7f983d2e\nd498f02e-8d64-4e31-aae6-a2a1433623a4\ne9b12d0c-cc46-4e81-92da-8469278e5dbe\n134aff4f-6349-42c3-b91f-aba4bb7ee51b\nb842cc9e-4fff-4b0b-9dae-f8df390bcb46\neff0341d-6821-439e-9c65-830b787fa724\n954eade8-40f8-4c44-b425-1e576b23fb11\n90051972-21bc-499b-be21-f15657cdbaad\nbb9eace8-0857-4de0-983c-294b2cd8bc6d\n09fac7dd-e43e-48b0-bd21-9644692a1ad8\n8c397c2a-1891-4cd6-8549-68194592f2f0\n13081b24-ce9e-49a3-9f13-ad4a38669bc0\nfabded5a-7d3d-4bee-b08d-5c5f5b9ff748\nbdda67f3-8476-4687-9ef6-2e36855c01f8\n54e3fad0-bf0e-4371-aefa-9094e1b9b2ae\naee2388d-dd5e-4903-a59b-110f3a1d1f13\n02ea7b1a-c5e4-4fe9-abcc-26c9ec1f150e\n295a031a-e09c-403d-ac2c-c5ea50bbc381\n45741643-281a-4d00-8f92-e22d5aae70a0\n3ab6043e-32af-4e3a-aeff-3b26cd625d17\n71c8bf5d-b341-4bc7-8be4-73dd5ff5bf56\nb84ba7fc-d214-423a-9a20-a4f402457188\ne990654e-93ca-409b-9aed-be0b00ac10b7\nd81b6e42-5684-4e24-9b80-6c369e7cfa7f\n6d5e4e34-3653-4e73-809d-1e1fe818ef9c\n964863df-f5ac-4780-bddd-daec5325fe11\n772c6d7e-7dd9-4711-98f9-a86dbc7bc503\n33633981-322d-4f20-b083-454b20b3a8f7\nad041454-6fd8-40b0-894d-1db429ea68d8\n615b643f-9c67-4d31-a8e1-f85b4edc9152\n83c3aafd-ea2d-4942-ae2c-f269e20d5aae\n4f4cbb5a-6e0e-428c-9517-2d07ca71e5d5\na93d1665-34c1-45a7-9f85-473362c39142\n3eeba894-de74-4ad9-8645-2bd9e4070e23\nb393facc-1ff3-4dcd-9866-ff4456d12bf4\n4ddd37cb-6e55-4b17-b474-baac1c9d9d3b\n2822b01c-1f45-4a1f-844e-0dee3f39c019\nd950c48d-b8a5-4848-a221-8011f1bc7489\n82aa2a4b-ee89-47c8-b04b-7beccec4e7c8\n69c0af1d-51c0-4d77-82c4-c182cd707fee\nc18a42c2-e4e7-41ec-a019-96fdf227b3d7\n9d02f8ee-96af-4cf8-a02e-c39336ebe05f\n52b9b746-9fd2-4c9a-8151-eda7f712b825\n402c6d8d-305e-4132-884b-7ac73ff41d82\n98ab3ed8-2122-4f28-acaa-70826edc0989\n11d8f5d5-4bcc-43bb-a118-6647c8de502b\n9fe56c48-39d9-4c0b-85ac-986ea4681a3f\n4fae2f48-07db-46c9-abd6-f56a12b308c9\n74a026d2-e3c3-4f9c-936f-1cd96439af99\nedfdb555-01a5-4cfe-95f2-9e321659ab3d\nd6ec8a06-4fa9-4cd9-891b-770f075cde22\nba0c9f2b-1c9d-46c5-a5ed-aa85d2fc0256\nd96e8f2e-c107-45f4-a660-4ffd12b0ec0a\n4263960d-0c82-416f-9b08-64ad01faa437\n8046facf-3151-44d3-9aa6-252accc4182d\n6a369f8d-a215-4dd7-bf51-c98e1c2728cb\n4bec02a8-6570-48f3-bb33-276f4eaa126e\n59bff334-6dac-45bc-887e-dfccc6e36c37\nbac4cca2-6eab-4cf9-96b7-ea7dffc1edb6\n759464e4-8299-4bac-bcd1-0006ef1e4f52\nd25a10bb-d2bd-4cb6-850b-ea1ba54b22c0\necf34bcb-d17c-41ed-9993-7d654287c0cc\n95906f63-69ad-496b-befb-286984d29e33\n7342b764-e142-4c60-860a-b3e63116262f\n2b626e93-36b4-4808-bbee-207f2cfb017e\n7312c309-9be7-499b-9c34-c10ad00fc1d5\nfb92af64-fcc8-42e6-8e5e-170fccc6b96b\n8cb97f33-2f16-42b7-a284-2b4e9b52760b\n2ac09780-9667-4878-84d0-b2ff8e860c19\n1d556ae7-959b-4d3f-a45f-4288b13b7652\n1c79f628-aa77-4dc7-9e03-ff9e83bb16aa\nf70508f6-777b-4c08-ac8a-fcf641e93486\nc45e4868-b1f4-4b37-991a-13d35c564321\nfbeb4f95-e9d2-496f-b8bc-9a06caf671b6\n60ea866f-31b5-4cdc-a245-414de854c9fd\n91df8004-ac14-47b7-abd0-3e06ef1bdba7\n7e2acf00-d83f-4f1f-bb5d-8edabd4d32d8\n82f2f629-d5a5-41e7-8c8c-b96eb73298bf\n8d6cb80a-c9a4-41a3-8e0a-240958b66b06\n37bc91b9-ef43-465c-8e18-7d8d918b5ae9\nb741f627-c0ed-4dff-96c2-9ee263234943\n92355005-c92f-4c4d-aefc-50b9279b1839\nf9c66d35-b758-4f17-a8a3-27a108835cc2\ncb6d6559-9c5e-432b-a165-d8309bdc5707\nc435a9a6-e62d-42cd-92ae-d233083f2a1d\n59a668a6-8867-4d77-8896-44e9c8ded1ee\nba102dc0-7fef-4646-8d82-1eeb870a2abd\n3da2b391-5088-4e88-8b8d-938aa200c13c\ne480e97c-0c65-47b2-9749-21244f1a96c6\ndb99931b-19f3-4a06-accc-fbd64a377842\n8a7e7056-79a1-4404-96e2-7ce12e409818\n9c41786d-76d7-4743-816b-48419c09f266\n4193c20e-48ef-4d67-856c-3e31fb25c0e0\n04c73a9c-df9b-4c45-b817-5e28500bcc93\n11b0e3cb-48cc-4f82-9aaa-7d36e41f8533\n2dcbfe68-27b9-407b-ab2d-f3e35f633d8c\nb3f98038-96b0-4821-968c-553eaacb1b11\ne7e7a86a-98b0-47eb-ae6a-541b4d8426ba\n73c617e5-05e7-4faf-bff3-eada3017221c\n50c54f4a-50ea-45c2-82da-57f3187ef377\n4795f400-e75e-4ca1-a432-75f7ba5d0616\n994d5663-65e6-4938-992b-ad10b3cb1fe3\n7c8f3edb-19b5-4b45-8d43-0aceae390c4d\n85af14ab-4de7-4eaf-892d-261234cb845f\n24a8ee3d-735f-4df0-9d03-22ca42cc5949\n61a9cf57-28a6-4b89-acfb-99bfd2c75ff7\nd1c99429-3812-435f-8eef-f96651adb001\nf8ee722c-531f-4547-a8c5-49e0f9daf805\nb7af8e88-fb6c-4fe5-8fdc-96d9c2274b98\n8aab6834-1ca2-4da2-b6b3-5b1331e2057f\nafa1cac3-a1d3-4191-9049-b9b423144a37\nfdbed798-cce5-4e6e-87ca-d6e13150b70b\nbb37ac34-a394-452f-be22-8573c86f1bd4\n856dcab4-10ff-4902-95af-dcd0274ce9a2\nd333b298-021a-4158-8189-42b9de67ba1b\n877dfbb8-0839-4d1b-b4c3-c488222acaa9\n20e3890f-ae33-434f-9c06-2eb150a0a202\n55060f43-7199-482e-b2f2-da79ee3f7f44\n24a62734-45fc-4f4f-991d-15615c0a3393\n73384c9d-8b7e-401c-b79a-fe411a9262e0\n6a465876-cb63-4adb-b3e2-1377d16f9337\n2754afac-dbae-4153-8f4b-b1eb71432c01\n88b45f3f-e7c8-4e95-bbae-bbb9e6eeb157\n7402e541-36bd-4dd9-adc0-7bc2497ca8e2\n9f7db34e-7b81-4ebb-b7ec-5724ead9c85d\nb6eb47ea-3a54-4216-9a2a-7907acdc7c86\n5c91debb-1fd8-455a-8602-945ce423b6e1\na7661edd-68fe-4bab-bb8e-9984edb48733\nb6365806-adb4-4c0e-bfee-348cd6b2bc6a\n454a6c6b-cd7f-4524-aaaf-712a29127513\n66e5c2a8-daef-4b39-89d4-cbf2f1c33159\n905f6981-7335-41e6-a709-d0ea0bce45b7\n9172a162-d2b5-42a6-bc44-7495155f45f6\nef58a551-2315-49bd-a428-d8cfeb925caf\n3fafedd2-5ef0-459f-8b3d-48f8dd39e176\nfcea02d9-b900-47ee-9900-30fe1d9d5c12\nc34bfade-8c84-4c1c-9d49-fdd6a8870d89\na260a8b7-778b-46a3-af8a-d42350cd726f\n86c144cb-8540-480b-ab36-bdaef60fa003\n2b891722-5b19-4624-9463-7b17e41381ee\ne047e0e6-1bb9-4bf0-b209-b0411ba4ef18\n04036e62-1b4b-43ad-abc4-72a5e37104c8\na131f279-3fba-4557-a464-28683cf6fe60\n356d8ea9-7aa3-4ff3-bdcb-70f7b30e5810\n705e6390-0adf-44a8-905b-2cac94538287\na0b4e010-4f8b-4d1b-9e87-6d69ad50846a\n7870484f-f1c4-4a1f-a85c-c92f1dc9c305\n48ab5a0b-4555-4353-a11f-ba6ccf4b64b3\nfb707f68-e012-48de-8c7b-53d44f7ef213\n0e167c7c-ddda-4523-b0f0-bb3ef13cccf8\n32b88c15-f522-4bb7-bf0f-a8acca4a2837\n273528c3-ccd7-4083-94f3-e7939f963710\n22ea5077-b7c1-4158-ac01-7464c253115f\n962e0cc5-161e-4f7c-8f48-268efc30be3d\n4ddc93fd-9efc-4115-b3e0-f56ce7c83cab\n9b1d5445-de3e-4353-a88b-528579f492d4\n9d64fb0a-382a-4c81-9e47-6f973d132de0\n9a7893a4-29e5-4f4b-a584-5fbaeadcfe70\nc4ac70a9-c490-43c7-9b86-3bee479537f3\ncb7c2313-3344-45a6-8738-93f16a6d893b\n9913baa7-225e-496b-b4e1-e957647bc9ee\na7d599bb-4e21-4abc-90ab-4cf242310f68\n749e39ed-91ea-438b-9e20-eb06de6035e5\n4c3b734b-a6c5-4017-8a56-cac7ba328e7e\n2a69fbe4-bdfa-4ca7-92ee-d6aa7a105346\neff23e58-28ff-429c-8adf-4b91f4e9065b\n13c2a5f0-e592-47d6-8e5a-2be951e1e3b5\nfd609495-9739-43f1-9d46-ea770c694b88\n3e7d03b1-4394-4736-a5c9-2f32c70ccc7b\n3323b30f-b36c-436c-b251-d5165915e3f7\nae2eadc5-2dd2-4a4d-91e4-77c1837e14a8\n308841d7-55cd-4c18-b20c-5b97901d090d\n09c2abfb-9ae6-494a-bc95-eeba7e8ddfb0\n3cd77904-a2b4-4dcb-b91e-44bba85926d4\nad01027e-e576-4522-bc0d-9766f04da26e\n7a274fbc-24c6-4dee-88e9-3d93c7733188\n968bd296-6e38-456e-b0ff-396e876f4049\nea0e61dc-584d-4ba6-a568-a2d5b0cbc391\ncdbda67b-fc6b-4b2d-a3fb-ebc8ea20527a\n6a8c144e-11cd-4f41-bfa0-19693351d85e\n9f0203d2-d4d8-4852-bf1b-f37a468455f5\n10071df5-d1cd-4ac6-953a-65d0d1c459e8\n5219af8d-3026-4d7a-bfce-ce913358c8c2\nce00647f-2ee9-490d-9eaa-8c1480c51d91\n524d277a-75a7-405a-a17d-323ce65b8c01\n2db6edf5-1b41-49c3-a5d8-f396dc1a5fff\nbb85a68a-b5bf-406a-b790-a1286bbae876\n69b284f5-4db2-441a-8f38-8fada801712d\n1181f28e-7a30-48c1-a9d9-86f5a9d4ee48\n8720a684-64cf-4847-b09b-d3bc9c81acbb\n34b19281-c52f-49ee-80c4-b6359cc35753\ne6e116ee-5a10-48fb-a488-6736a53ed3bb\n935767a2-c172-4437-96b8-71fdd56517ac\na2fecf80-5f4b-48f7-972d-e5b13972ad6b\n5774b2ae-fcda-4fed-98a9-5d56eec8e6f0\n6ee14ff8-9d54-46d1-9607-c2537d7f27df\n546bdd41-720c-440a-ab18-5b0c35f56ecb\nb1e73138-e427-4212-8fc4-9dd980114c44\n8f507714-9e65-471f-a1e6-6bc3b3897c2e\n84bc10c6-4944-44f3-bf47-cbbc56110281\n8cf5a37e-cbe6-4209-9bd4-f7df2cce826c\n4fb5d703-afaf-45b9-8169-ebe305af2d3a\n98ea1c73-4f3b-4332-8ac7-59c4f5b6def7\nd6d5eba5-053d-4caa-bcb5-daf45b644936\n04e3e2fe-2ddc-41ba-9c91-2677eacc2727\nb798e4ff-1820-4788-942e-b93a981aa9d9\n21bcb9e3-4fef-4613-8f82-a8b157eb9e1a\nbbe69ef6-1f5e-4851-8378-47e02e3d9052\nc51cd851-55d7-48c0-aa87-d326af508882\nb88f2fb3-ad83-4e0f-b247-cb80d20477a9\n8d2b5a4c-1d99-4ff4-b2a5-f8d6ebea9e2c\n8808cf5f-5533-42a9-b135-4fa7089f0a67\na0114381-014b-4807-b44c-104f39f2fd53\nb8eaa4fa-99ec-4411-9299-4477f503bb53\nb5c03cb6-68a8-43e3-afb0-71eb2ae9112c\nc5853312-f44d-433c-baf0-707200b9d78c\ne5d16b22-104c-48aa-9b49-4182e33827d6\n59fe601b-bc37-48fb-874c-dedef631c66d\n4b94ead8-95b8-4679-b24a-e3a24c76ab8e\n4536e437-8c0f-49fe-9dd8-9d83971e2733\nba7d668a-8581-404e-a745-1b70118b7b75\nfad37224-cfa5-4bbc-be7a-48a8d6456980\n3e59e941-9fec-4f91-b134-84a7ac08d969\n66c45b69-6a9c-4d78-95a2-1fc293256318\nd0db86df-c0b1-4ec7-8c5a-bc00a24c023b\n38a70993-2e9d-4c40-912d-b3db1df68717\n1a95d433-571c-4ac6-80e2-d47037000f25\n6c60512c-9aee-4abf-bd5c-3a6966e7f778\n49505486-f792-4cda-addd-47334a8e1b0c\n5d8ec9c6-5832-4288-ac74-a3d2ee44fcb1\neaf298d2-259b-4c43-b4f1-63e7102171fa\nb398248b-b0aa-470d-bc7a-c432bd1491f1\n0c469b4c-9734-4b7f-8ca2-4a44d03e9941\n258cdb9c-c890-4f30-8b14-27e9937e5c7f\n352ac4fc-f19b-44a2-8d0f-6b4143e8c72d\n81597d43-e960-48b4-98c8-85b8ad9099ce\n01fe21a8-aab3-410e-b1db-15e9e3d4e4a1\ndd41767b-f0fb-4910-ac0f-2f871b255fea\nf792f054-9382-4b2e-bdfe-82c08ce57808\n801bb424-2500-45df-8cf6-5f17e45a11ca\n707bad19-4c10-4cd1-b83e-d46155af294d\n271fe032-3e6f-4c5c-86d7-73d42755d9f8\n076bbddb-6b65-424f-b71a-c76a315a8bad\n380f0803-6363-494a-9a64-354109ca10ab\n265276c1-7d54-4177-8a2e-b93912e6c980\n35274e50-c0d9-4015-9582-13ba33663b6c\n80d7d703-5d76-42ef-8b0b-240464043c33\n53319800-8a9f-4dda-a679-89481ba125d3\nf21c1369-6b19-4521-9c3f-20500404d11c\n8af9aa37-a286-4493-ba95-2a4caaed918b\nd7371095-9641-4553-81f7-a8eb60d5942b\naf554ee1-1810-4304-95c8-74cd4e0f91dc\n6e3ecc03-d0fb-47b0-a307-5a8f3e3d948e\na88253e6-9480-4372-999e-b0664fb2fc1d\n1f028ce3-e447-4ead-9825-1af2a8f1a53d\nc9984ffd-480e-4a78-9910-7dec5ceed72f\nd72e82b3-1696-40c1-82a6-bc527ae3fb9a\n9789b932-2421-44ff-b1e8-342a98162967\nf3956339-a2b2-4129-9724-f84d982a89be\n3b7d8f0b-6c57-4618-90b2-2a499eda5a20\n7f8c3cdc-4925-405a-9a03-96a523ba48ff\n2814ba17-3ede-4966-99f7-67b177f42144\nc8d5d1e8-f238-4011-bd39-aa145fd8293d\n9e7a8866-ae05-4d77-a3eb-f353b6b93e8c\n111acf1c-6dd0-4c62-9cad-a45bbbf63e6a\n6b5dba2c-53c8-4c11-99f9-b5ce33dfa4db\n9e89c6bf-f7f8-401f-bb6b-113b004f352b\nd9f225c9-c02d-44c6-b017-8a1c8ae60bd5\n36cefe51-cbda-4a25-a6ea-f284415425f2\n927a8386-cff7-403f-bba7-f495361b23bf\n87ce7633-d995-46f7-a129-57c9d0fc6de1\n593fbd72-b254-438c-990e-beee23ff4b5f\n6cd6007b-4639-4153-b655-ef744e2f6d32\n33b98005-5bf5-44eb-9e9a-9cfa74e86ffa\n08b0e006-cb9b-477c-8827-c49951c2cef4\ndd29b499-29e9-4dd4-baf4-3e2a3cb29e4d\n25a45ccd-e0e8-4aed-919e-17a452266478\ncda3d93f-59e9-4530-a6f7-d0a4aaa2ff89\nd3aa1461-8b63-491b-b45e-65b353cd125f\n38aa028d-86d7-4253-a195-38ce14609591\n1bd5760d-d58e-4851-9692-317c10095e19\n4f205453-7c49-4f93-9476-044cf7865762\nfbcd7ee5-69fa-4644-919a-ac5d09956f4d\ne205d436-87f4-4986-8d4c-8e49cfd3babe\n4a2cb3f0-b28f-4821-a3d8-97ddbac5e681\nbb8c5075-2efe-4065-88b0-9a8471938a1c\ne314b1b2-a417-4fb3-8f62-e98084230869\n1d7833b1-b200-4f7e-9b3c-0bd721dc53b8\n92568230-43c3-41af-b359-3436df6e59ef\n2f0624ad-ccb8-4fb5-b5d0-93c885154cc3\n081ccd2f-ff1a-4a1f-804a-d79084027801\n33618556-0e79-42b8-a77a-79931e7fc3c5\n1961f715-1116-41d4-be59-3a55217e4a23\n79fb3c4d-0486-4d04-adfb-095c552cfc7f\naad69818-f795-4a66-bd14-a57e334fd92a\ne705b9b0-392f-4be1-a3cd-5e1d72d18cd3\n8d4d15e3-b7bb-4330-990b-1a445b7f7921\ncbbfa779-4fc5-461c-8728-cbf484c38fad\n58c33594-c5e3-4f47-8181-aa6761086090\n01948f8d-e00c-428f-861c-7d951858d4e7\ne9342a33-3e36-4d86-ba88-1bd5985b58e6\n9397e146-6b46-436a-b83f-4dd97aaa1c1d\nd5b574a4-9152-4beb-9e9b-e06e7f0e8185\n5399b5e4-4246-4d1c-81ae-13511f4cf801\n48d3d035-cc14-4cc1-80ae-e712249d9a96\n05233772-3eef-4d96-b8f9-2d78c1d459c0\nbf00e54e-9f2a-4dd1-b379-44118030baba\n560df9ba-97fd-4d0f-8fdb-2d54cc7ecb36\n1327d60c-76ac-4e2d-9189-5c9adc378412\nb5e01117-44a0-4349-b7a0-bd362fbec897\naea1ee4b-08b5-4eea-89b2-b2cb235ded97\n4bc1aad0-fee9-49b0-85f0-2f4bea9cfdce\n2bd7d2f6-bf1d-4e47-9029-8aa3a9944828\nde4282d2-8905-4ed9-a993-76faa44e50b6\n6ecea631-08d9-4dd8-8028-8388a39d5858\n1a2d565f-9d8c-45fb-831f-c1d655c0e86a\n2e304bfe-0e3c-44e7-bc52-63d0d6e53ca0\n80d1a29a-dd1c-4d2f-b5d8-0812e0882cbd\n8fed4b96-ebd8-4372-bdb5-f7ffdd2085a9\n545f541d-bc0f-4c98-934a-11c91be854f1\nf552ed62-9364-4f6d-8c1d-3a5b03b12308\nec6000af-ae9a-4a15-91cc-8eec49061639\n20a9b84c-586e-4ace-8775-14b73f95973a\nf61553e6-aa16-48e3-807e-53d7e8077015\n12b0660c-cf65-4eda-8141-83d7f5d4641e\n0fc51814-b156-4a10-aac0-e4f1f6bd5b8e\n988514c0-1ae6-4420-8a1b-a1a5eebbdcda\na9d1a682-b5ef-460a-98a9-492c4dfdf69b\nca4dffbd-d0d1-4e86-a368-1d3c6776a9e9\n8ab9c62a-7005-46df-952d-1d72d5767ba9\n6d6b183c-be3b-42b0-b9c4-1d8d1996518c\nfb61b5bc-ad1d-4e62-9498-b4507b5f887d\n06d344cc-a1a5-479e-861e-06fb7c7fccc3\n3bcd35f8-436b-4877-b7fb-ed267dae96de\n7f0fbc2a-e010-43d9-86ef-2ec5a163dedb\n3b046148-dcdb-45a7-87a4-655835b80ff2\n30ff1988-f7b6-4aab-8674-91bc2f91253a\nd8071f92-fe06-4b95-9c51-5e1d91764510\n12cfd89b-d49b-455d-8d19-8e24384af99e\nd2aab05d-6673-4d89-91ee-0f9738e3ec65\ne2d6d112-e4b4-41be-abb0-a5024fb812f2\n33d11eb2-ab2e-4be5-abc9-86f5280b12ab\nc1a5e37e-83ef-4880-bc45-2890b4f862bb\nc51e994f-c2b5-4b3f-9736-0c542f8e7683\n743552c1-72f8-4fb9-84e7-477bdc1d2147\n85ba5fb0-c1cb-487b-9518-99b6be898dc1\n3d91265c-8359-41ab-8d22-cf0d69e179a7\nd88dc1cb-1fed-4958-a474-6b4cc89a6a96\nea74f222-79d8-4eb6-9668-21b168275b72\n97d3a24e-87c8-4684-8818-635aaf9eaa45\n11716397-d599-4efe-9e0b-9f68e194a421\n0232cbc0-267f-406d-acd9-453613787811\n7c10523d-a255-4041-a382-cab29f91d270\nc4b63026-6933-44fa-9ff3-19a3641698ca\nd5880800-3563-4b09-ab38-4d94f4445850\n92b01782-db33-46c4-a373-511786e7d706\nbd01982f-78e1-43a5-87ef-99224fb36971\n4ec22bc6-b34c-41de-a3f3-8f66e057b7fe\n3f77303d-0518-421f-a9f7-deb581da9ca3\nfd47ee8d-5704-45dd-924b-f1518b2096f4\ne2bbb891-d918-4122-839d-4381f4ee40e9\nb1b6cae1-616a-49ce-bf37-2f44ad22eb80\nae1e782f-3348-4c3f-af80-7e336b462cc8\n6259b019-8729-4626-9cd4-215b762e4837\nfc8ce882-1bdf-41e5-b007-0a956cd1f607\nf02fea52-fc15-480e-9639-1efae0decb09\n4f869055-993f-4471-bce4-3583c904bd36\nd5d5c709-3e63-4cfc-acfb-0cea399ac085\n24c501e6-cd14-4ba5-bea9-279e8ec32bf8\n47ce1f88-6f65-4aa5-b705-b1afbad47fd7\na1785b52-ff4f-4ea4-86f5-4cfe3feff50e\ncd8a94e2-f44c-40c7-8bfe-9b1ab807ee6f\n9b059914-6702-4779-a16f-bc7179af160d\n416194ed-2598-4ae9-a4a2-72dbf97e7b11\n48d04cc8-f2d8-443b-8141-9c6da0e1c467\n8d87e329-0617-446b-866f-92c1c0263137\n4babee52-8d1c-49e4-bfe2-caef072e33d4\n013bc1a2-87b5-42b0-86e0-9843cf5a3ec1\ncd758e66-7169-47f9-aace-708dba7bad7b\n61594b06-ab83-4a62-93ef-48db6fd74769\n56a25f54-4650-458b-9f09-1fb57d6ea2db\n8ca7d57a-d217-4882-a01a-79276a493b13\n9d57e1bf-95a7-418c-8291-77008bb0e48f\n854e335d-d1ec-4246-ad45-c110cf1e2e6b\n43e2c1df-6c06-443c-9b3e-9629d78bc2d3\na26e66ec-c6a4-4556-89b1-2bcc32f5792f\n7c942afc-8133-4d39-9196-f842a2e2b00f\nc9f3168e-e223-49ca-bf1d-0841efb0f624\na553a270-8c27-441b-b5f4-972ac86dbdc7\n4fc470e2-0b68-4334-b778-7beba212e87e\n80087249-0d66-4e3c-9f00-3cfd32ed8e38\nabdb35f8-e83c-4276-a363-ed1a8d08a9fc\n860806c4-401b-410e-ad22-20d06a89d488\n9acbad78-d62a-44e3-9a9b-5ef2811c62e5\ne578d4e0-e54e-4efa-bc8d-8e34476a0e03\nbc946b4e-0595-4a04-9e72-8ccdaaa45e02\n881dd906-00f9-4f96-a567-943c8e2a5a70\n128ffc6f-152a-4243-a371-0cb515283357\ne87da840-2289-4ea9-8380-f9ab33e52215\n7a2ace61-25b7-425d-a424-f84f3c1c4500\nd76db68a-4ddc-467b-a58c-1b51c8af7917\nef948239-d3eb-46cf-bfd3-6d54b4aafcab\n09631993-3203-4a98-bb2a-8310ffc321a4\nf5a0c4e7-0ab5-4f40-b3cd-bffc305d0c4a\n3bcd854e-d610-4cf5-8f0e-6820e5ca7b0d\na241a198-0882-4759-8939-fe8767f287a9\n4f627464-2d0e-4c81-a7e1-1f7c0a88d78e\n40f76b63-a2ad-4a5e-be32-e42a3087679c\n298fc58d-753b-4dde-9313-d3a4931bbf90\n307e038e-bd88-4b6b-a172-f285e8408130\n45fe6317-af0e-4f87-810e-e5772f93e0df\nbd0fd9a0-14c3-4490-ba51-dc234771edbc\n074c7d38-9b99-402c-95b7-8b3e66ffe662\n64090713-2394-46c6-aaa8-b9139dfa8a2d\n00bce859-88a2-461f-88b1-96c3c5435637\n4b5c6d04-d6fc-4953-b781-b231d76a0e4a\nccc305c1-e7ff-42c1-8132-1ebe9bd273ac\n1bfe80cc-8b83-4112-9ab4-5d00b8a6be72\nff787648-074e-496c-8891-fffdba4a0304\n4aa86cb8-8310-4dd3-b778-002d18f23f80\nf028deb3-4830-45fb-8e80-ee2220ccce9b\ncf75bde3-4ba7-4e38-b906-2e5a1ea02140\na822ec11-7461-4b3b-80d7-f540d5116fbb\na914f8d4-3550-4519-85d1-807a83a49e2d\na0661383-178e-4568-96b9-c265628b9588\nfa8d12dd-5fcd-4c5f-851b-a546a08336b4\n4680b44a-726c-4c02-9bae-f52bd43e0dc0\na9a8a5ea-ea4c-45fa-b51a-5a224825e261\nee465dee-d24a-4989-975d-d84d34626c36\nd4b78bd1-faa8-44b7-a4ec-c274933d4a55\n4cec5c31-d831-4589-9c74-71284092b4db\n2b45354b-613e-4499-82b9-54e5f014c228\n5f09f63b-9889-45f3-845b-7bef8f54225a\n812dfbab-212a-465b-abaa-fdd09082c9da\n8dab0e7a-e7ab-4edd-9f4f-23f3f84cdc35\na887cbea-87be-4f42-b495-22bee38015ee\nbaf0fe80-37ed-4cbb-a0fa-b31794214a68\naf252d54-688e-43ac-ae01-883b36faaed1\nfec02145-ca0a-431b-8749-f617e0d56a65\n41d73fd1-33f8-49d0-944c-60eae968afb7\naf7c7243-97fd-4060-a0e0-8c76543e6433\nfe779f4a-1236-4f56-bd4a-afa423ffb762\nc94941b7-b539-402b-9577-8ebb1d1634ce\n42540a5f-40e1-415e-b038-792edcd3d05f\na1cf0828-c07f-4e80-8ae5-dae19bd4e15e\n1478c738-5087-4688-a0f1-8e43e3e35965\n1c463062-6479-4c67-8611-e86cfd353f6d\n1e55ef44-e3b5-4785-9aba-5de0bea1bcf2\na07a1b55-fbc0-4843-823c-d8d6007e6c68\n1b0108ca-ad5e-4235-b17a-8ef56c9ffcf7\nb0262429-b9e5-4961-bc05-2df64fe31234\n29fd8685-0071-463f-aa75-d3e41c9c4819\n45258ca5-2a0a-4398-ad1a-b2e3b9b07799\nc8a65d62-b27b-4858-bca3-380a3772df0c\n2a6c7426-b11b-48f9-abe5-4fb59df1816c\n9486ae67-a868-4e8a-b1b4-f687d47e9f42\n79fe5ed2-0d01-4e3d-b27c-3faef9bc2d02\n6eb8fa2f-942d-40b8-a74d-7bbc6050ad67\n6b83e024-75c3-4039-80fd-bf848b497287\n49c88702-7519-492e-a8d8-1d100d16f8b0\na5d0df93-58df-4a99-b06f-24ad582013e1\n420de76b-98cb-4314-bdad-0d5185bfcd4d\n23b63206-7aea-4827-82d5-ff08f799b2b4\n69389471-5cf5-4aa8-9469-4fac30394cd2\n6216bd59-5047-4085-9eca-2bf58db83806\n846f3d68-3da0-4490-871c-ad75d0249cf5\nfad6e98f-cfed-4571-990d-a112509dd2d4\nd6396128-fe29-45aa-ab3d-2ff35c84bece\n037589fd-e36b-46bb-b243-83453da69cac\n7a3e2ae2-d1af-4c80-b54e-4c8a523bdf0e\n2fd7a460-7606-4d4d-b159-3b6052037317\n420e7b69-bcb1-40f1-aab6-b2a9193e917b\ne82d364f-a260-45ff-93cf-7400f0730fd7\nc29b6043-6678-4cf6-a0d5-d06222a3c332\n08d06b7f-4696-48d5-838a-0c5bb01ebaf2\nf8143cfe-586f-4900-887a-df4a59291e14\n1b5fb80c-9bbd-4639-8d44-8550af559872\n348d8483-e9d3-444e-9093-2d047717d5ef\n79b2c661-3277-4524-8ec9-1b8b3b50436d\n61bf1d9b-7212-4091-930e-2d86b0b29f58\n386d834a-7d5d-4ae6-ab5b-4189ee9389ac\n050a5bf0-8522-431d-b769-ee996c3f80dd\na57be0f0-e7ea-4934-a194-c9bc466c8365\nf0f1ea22-347e-4b89-a2ec-2a5ae4026937\n896687a7-a6cc-4d7c-9b23-12bbb722590c\n537567e0-c32c-4c08-beda-1ee1beb88332\n56247f5c-6eaa-4620-bb0f-0ad157600d47\n4df15275-3360-41e9-9050-db1712b47ff7\n04e473a1-e062-44b3-8d8b-3fff1c49471f\n87565019-e084-4e69-82ec-a4f32b2bd3ee\n2ecb2970-5d46-4432-a17a-6c4e39cd9475\n73d7d636-3bf8-47d4-b337-ccb4cc144175\n2006a95a-4028-4a2b-8b4f-b4014f6140f7\n3798421c-92f6-42a6-b12b-6816b2edf4ce\n911ca716-5b3c-4ff3-8130-572c5c87345e\n3f5878c2-e7ae-46fb-812b-b514efcd4ec3\nec9135c7-fc22-4ceb-8661-b2c1b887f083\nad431c05-629b-4492-b452-cc0a18c74d60\n28e01800-2909-43a4-b2ab-4616bc451f61\nf1abaad3-80d9-40b7-a663-bb5c00292388\na5705efe-59cc-44c5-9c1a-221615b5133d\nd84ccd28-7da0-4356-ac02-c04b3c0e6630\n4603002f-7c4c-43d3-8d43-1f8295037e6c\n692c2f3b-851b-4c19-9090-a22e920470c7\n7efd270e-f8e6-49e3-a642-f88bf0c00206\n5e6c8d61-b207-4317-b555-611011df4416\n4e9e9d32-0eb1-46de-8954-4f5efdb49cd8\nf9e8006c-972e-44ab-bc19-c02f01ff3cf8\n32e2d25d-38e0-4dde-a4f9-ae4fdeaded51\nbbd3eb5d-2452-4dca-94e5-78ef46d99d07\n8ba629dc-1d0f-4ff3-90b6-622dc27d5c25\n79b17731-bb97-4776-9c15-9db6dda15d21\nd167a71c-d141-415a-a688-8ed527c1e3fa\naf099697-9cc1-4c3f-8e16-5f41c940de8d\nae4bec27-c4bc-4130-83ee-74226018f06a\n51872c63-f0e0-49d0-88f0-b2293daf46ef\n4930e5f4-af56-402b-9606-6866b3598d65\n9a25537f-7875-4aeb-8b70-a6e9733887f4\ncde0ec65-6534-4e50-9cb1-ea24022f9e7f\n4dd348a5-e980-450f-8f82-6921a9a93360\n541e4abe-1c35-408f-8923-a43822de958b\nf338d0da-86b3-42f8-b4ad-c82b2edfa3d5\nc6ddc846-4d34-4b79-ace9-f844a7e844a4\nca053cba-90f6-4804-8ba2-6c0154395e9a\nb601dc3a-f568-4a72-862d-b7d0a5c3a2d9\n4626faa9-4850-463a-872c-32f7bfdb10f5\nec0445ae-f4dd-4bb1-8e09-be82ecf4f0b0\ndce7b57e-179e-4260-a16c-b62555d234c8\n490a6462-cca1-4f33-82f6-e7a0afe203d6\na1d74460-db75-4831-9b51-cacb32ca7844\na6badad7-55ac-4207-a02d-41e94552f1d4\nb6944c5c-2929-4c32-8030-62640b70d1d3\n77a49760-fc7a-49ab-b6f3-5141ac380683\n0031e790-7a9b-42b2-b8e1-3ad6d0b1ebf0\n6e793140-5d50-4ceb-bc47-efe0f32ef6a2\n5339c482-c56c-4196-b7d3-3402b4e2ceaf\n0d24440c-b1e7-41ea-a161-cae94f305601\n6e0a4bfe-61fd-4a16-8b06-48b9f58d1c11\n0e2bb072-cd82-4f33-865f-e7db18bd95d2\nfb6820ce-89cf-4d9c-856d-a6fab8bbd1c0\nf976f6f2-1740-462f-9a82-b1ae2f238b20\n4fbe2ab1-cb65-4e15-ae8b-f525869d84aa\n4a915a94-94d2-4735-9bd9-e6b28a0eadb0\n097b1836-183b-4681-acd2-66f34395079f\nb02bc048-368a-4b31-9b4e-31befa401455\n9e52a61b-2e45-4f7e-a679-f741a0dab630\neeec0faf-487c-4218-8b34-30e171bbd0a9\nd7d798e7-773e-44f8-9b83-0229907f68b2\nfa58442c-0da7-4088-8c98-1eebb0db44b1\n8ff877e2-735a-47f9-b863-17ace1d92390\n43023daf-aade-4924-a7fc-3ccb490e5589\n6ba16ea8-9530-4dff-8bd7-e5a9449bb3a6\n78940dfd-1f98-4e35-a39b-f2fbb742ad7c\n6bf148b1-eb89-4981-83e7-7679c16b04ac\n1b3e2dc9-01b5-4501-8e83-1b1efac7ca72\nc4e6eaaf-c81d-4348-ab85-98f49a698fdc\n432147dd-9cc7-4b76-a855-8d1daaca8c7e\nd53eab7a-916b-4ecc-936e-f8f096691b52\n27ca3a0e-74af-4a93-b0d1-58eebdf2de39\nae3e45ab-63eb-4206-9bcb-f9d79efa7519\n277deda2-6df0-4dd9-9838-48b130b3b16e\nf1bb4824-6de1-4a13-a064-e038d4be654c\nbce4d3f7-3934-4bf7-a620-7009e2ab0506\nec6404c2-0250-4b44-b77f-14590858ce1d\n06e426d1-d46a-4358-9b58-b2ee35285dfb\nf84f918a-439b-4bef-b4e4-fb958d5cd9d6\n68c3f18a-c811-482e-9504-fa0f03c8a6ea\n1af39e3b-6826-47a0-97ec-e9158ad5acda\nf4facc4a-9e10-46dc-b83e-7873881e8059\ne8694307-5f6b-42f1-88aa-1e0b875c7568\ncd1b4eda-49de-42af-ad98-00d29cac4f4c\n8ab51ad3-8dd4-47b6-ad77-e1910105f89f\n208380d1-a738-4c17-85b1-d2cb692f4265\nc96c033c-af03-4983-ab2e-6d7d63d434c4\n5c0fadba-2431-4510-a130-1e22eecb8aa9\n35ac6a81-eb7d-4d00-9349-fc7bf036201a\n5ebda750-4e08-4591-b243-94013e393935\n62116f70-cdd2-4700-a292-4dc1a2eab777\n5741a009-b425-47d2-b441-19d5d14295fc\nad30b74e-e589-43d2-853f-c6c9b7dba8ec\n6800f617-a085-4f65-9e32-3bb67ef1b52a\n7ecd2b02-d9aa-4381-943f-17848a1a13af\na55ed987-faf1-4739-b356-0b93e0113a04\n0ba92435-a9f1-4267-97df-85810bbd0d29\nf65fe621-5837-43e4-b0f3-22bd28ca7a87\n0e04bb3f-33d4-4a72-8e73-fd11817f5a0e\nc3469a4a-2939-4a41-8b66-ae5ced497038\nedcaed31-f591-49f2-96d9-847397595de2\na63a5837-5b39-4964-8b21-b5d6b38c956a\n3eabe276-36b9-4020-b789-eac440af78f3\n59b04a42-45ab-4d1e-a843-0e66112bb23e\n904b584a-7cf5-436b-b508-1066d5a230df\n45273976-1d9b-4ed6-b3be-df97a28c7ff8\nf87e3bf5-eeb6-4d74-a6ff-16952096749f\n991709cd-4f39-463d-8938-97d07b5553f1\nfe564190-620a-40af-9ab8-b5aaa5b7c338\nf752c30c-1caa-4895-9b4f-851a50890444\nb5f4becc-9dfd-47cb-8c2f-67e6f723c525\nafeb7441-e72b-4146-bb65-0d9b816aaf71\nf0eecdf4-2289-4e85-8d0f-5c69c3a887ae\n52debbb3-e524-4b59-9ce1-51193e411841\nf428e2c2-c687-4671-b543-da15cede8733\n6edb69fa-6375-4b93-9ec7-ae842baa0bc2\n7e0f9d2a-ae7d-4a16-a877-a19a2fb7cfbb\n24213ce9-8c08-4b86-96a8-2fc463e35240\n2ff0365e-2211-467d-87bd-68bc39ed4bdc\n1dc2f23a-1e5f-4f5f-a5a4-62ca957ecf60\n3100c052-4994-4a1f-98c2-fbb04df7d325\n332455ca-fb63-43fc-a0d0-c005a405e2d0\n0dac73ab-e3be-4b4f-914b-984d8c55d724\n245eca14-9668-401e-aaf8-785cf8e9dacb\n568021cd-6ddb-4aa7-a873-25050ed8e08f\n34c5c680-e511-4d5d-8c1a-e6be3444cb9a\na0b8d38b-d29d-409a-9322-a424bbdd8c65\n5d02efc1-1e50-4959-833d-17ef7be59f9b\necaf9f6d-5371-4919-8e07-54293a2aabeb\naa4b7495-3e73-4084-8147-2620e7bab9a5\nbfc25c25-1faa-4f1f-aa3f-65013549f976\n41a604f7-9a40-4f2e-806f-f7f26f5995d9\ne3384c7e-fad8-40ff-b0d8-acf066abaa77\n4ec619e0-ad45-4e0f-b519-69b863c8990e\n8a006370-1a17-4be7-b15a-3c025c509e72\nc6dccda7-db75-4bae-8589-b1cd01ba45d5\n5e9e51bc-b76b-4923-8459-f74633f9c5f2\n1f6dc658-6ed0-48ff-b7f4-389d69c918a1\n202c78e8-42e5-4a7d-825f-b1cf29dfc095\ne05db4a8-2aa4-4d98-b3c8-6f94f65662e9\n7adfa717-72de-411e-84bb-02327fdee473\ndc707382-efec-4d73-ae69-6900786c59bf\nc3a910c3-85bc-4598-9169-5de17ff0fa26\ne65f651b-39be-46dd-9603-5eab5e386458\n0c07a00f-615c-4b02-8291-e89441aeb901\n8a032931-8613-4256-b094-5d5d4591043b\nca90e856-8f74-4c9f-8e41-28f6ca77adef\n15bfb135-aba3-4e8b-904e-b90d0db1ebf1\n6fe16965-6c8a-400a-b6d7-039972a61abb\n8e6a8dd7-3ca5-4c68-ab20-977de20d71ca\n409cef55-4b7c-4c02-ade4-4cdab36a5cf1\n5f4f93c9-a175-45b8-a10a-9441bb3920c1\n54191270-5ba5-48c3-8909-d5ccdf79d4d5\n1e6df08a-8b9d-4cf8-90d1-9dd6c6c0e9e1\n62193563-00ec-4156-bc6f-5f97b012771f\n02805b26-1094-4db8-bcee-5752a08e6b81\n8382d388-20ee-4eaf-8bfe-ae0b17c462b9\n1ef0d542-0f5a-47f4-b39a-fc8855854110\n73173e8d-acd9-46d2-8fd2-c7d75a34b2fe\n8b712d13-01e5-4aff-a6db-0c9df58ae298\n6dd491f0-43f7-4a34-9e8e-b3449e61b2c6\ne89f1c8b-770f-4222-9ed2-75ed1e321faf\n72ca3297-39e6-4701-a9aa-5e489b12ec6f\n9b21ffd7-6735-4f4b-a830-854e91ae0599\nc01cbabd-2dc5-424d-8f07-06038c0d2fc6\nc5ff6493-9ab4-49d4-a5db-32f48fbea3cc\nbe8a4623-e100-4fdb-8dc5-b4dddc70dad7\n19102ecf-5f9d-40b4-9f4c-a8e68d6e5ba4\nfb422859-b64f-4240-b8a9-ede802b70e00\n28d4b96d-ec72-4b2b-b413-c6afd3390338\n2a679cc1-ecac-4824-983c-906d173e7d51\n98f942d5-a6db-4f58-8cf4-6f459c46820a\nc48d7195-dcb0-4a54-bbb0-ac4cac471bdf\n91f97156-e596-44b5-8487-a3823a890038\n3239c283-ac96-49b0-b06e-d838823f09f2\nba1b26ac-86e7-4be5-8a1a-5c89c7e31532\n454b3787-1b3a-437d-987c-b066b5cc61b7\n5bb38f56-f0ba-4e61-bf4e-233e6700c212\nf8c1c7f2-1bd6-42e4-b9ae-1bcdb8b063f4\n3b579283-07a0-48a1-ada4-367a2a819fb3\n9998b919-0a95-495c-a7d7-c00c554e67c8\nea6a2661-777f-41e3-9d37-25e1bb184747\n5e6899cb-372f-4b36-870d-e4477e318bbb\n522028b3-7705-4ef2-a045-a30311319250\ne123ef35-e530-4546-a0c3-faf855f51fc6\n93af5532-45fb-43d6-bb80-f3247d1e4fa9\n95bd7606-2b4b-4f0f-ad81-02b35bf4e735\n0878e452-6714-44a5-9b46-766ac9b74a7e\ne8d1f868-cb43-48bf-b34f-b7fa0c617a45\n65537516-7561-4764-bad3-82be246f118d\nc2735762-9c32-43a5-90b2-f97eb17c13c2\nf30bc320-7439-4746-b3ba-8796ac0fe84e\ncd435089-1dc2-4904-bed5-840eba180190\na3d0864d-8b9a-4261-8f28-c2931cf6fcf6\n26951ac8-d97a-421e-b681-5c6f39872976\ne424fd92-d288-45d5-8897-59903b86122f\nd2fed827-ca47-48ff-8d1d-7ee5c10385b8\n1c30dfc2-89a3-48d0-aa21-eef2ecce38b8\na0a5fa73-3968-47aa-ac0b-8c678335728f\n62654401-539e-4407-acb0-7772d78e1ac6\nc3726c86-c11a-40d1-9f13-2650428f558d\nd7d46567-2d23-4052-8cdd-033e75570b8d\nfa51182e-0049-4878-a079-5d75da193695\n2370aa26-6583-4222-b624-316d49dafaaa\n0fe428aa-9bab-4626-b055-cc9705b26c17\ne01d2d5b-9bb3-422d-a0e2-bda818b06e77\ne2dbfcac-4ea6-4d5f-bd3e-a2518ca0f574\n0603d30f-aed3-4e10-8ca3-0bdccfb1afbb\nf11c4ee3-9479-435c-8cf2-7382e0c3df92\n2fdeb8ff-c24e-403f-9e63-70232bba15b6\nd6a76d88-6615-4f6f-b527-5a879bc54151\nf44b1e31-1ad5-478f-9dc9-dc4b65d37cf4\n877c3dc2-5055-4d7e-9b1b-c02a6309bcc1\n0f157e16-747b-48c8-98be-4ed24b5ff5eb\ndc3ff0a2-7359-4827-b123-406584f22996\nd09e1f3a-fafb-4f85-bab6-eacf0e074a2a\nbf4a1c0a-27e9-43ce-b660-ab3ead23011b\n5b0998aa-23d7-4fda-8152-d6ad5763adba\n5d69e826-a50d-4f7c-8e1f-3b66dc9854ff\na6adb8a4-3ec9-4d7b-a9eb-b0295320a89b\nbd052dec-c715-432c-b0ff-a3845c127fc3\n183417e4-b466-45cc-a521-a0a26c51dc37\n65cb254d-07ee-4b90-ae5a-6f0bec8b70b8\n2886b62e-b68f-49c6-a395-4fbad9abd565\n40511480-48c6-4952-a76a-a4327447f349\nb9897e25-54ba-4e4a-a967-2b0975f3ff6a\n7d911991-e4a3-4764-be39-239abb1a6430\n617db667-23b1-43ed-8795-6b101b818307\n3146a50d-fdb3-4c5b-9e25-196695df90ad\n31eca910-2dcc-43d4-85a9-6224052179f1\n4c5ea160-f3d3-49ed-8f42-23a49bc11188\n5b24db2f-e747-4f73-bb85-a86168b46b9b\nfa17ef84-3363-4750-8eec-df8cf8478a09\n3dbd5daf-b771-41f9-b55b-68bf4c21dad0\nc433fff8-573c-41eb-83df-c52bfe1d14be\n331b9b6a-9b7b-4e9b-9fdf-d30c50e45cc0\n61d30f48-53bc-4d6f-8b7c-5a0a3accb5d7\n7ff1fbf8-0eea-4609-a6bd-40cc84113266\n70f5d4a3-fc3a-45b5-842a-9b216201ec82\nb43c4bec-599c-4c38-a211-312b4c779690\n1cde45cf-5036-4370-ac50-b3a609d46ae2\n5550ab3b-e2dd-407a-91f4-2517a2f815de\n9c430b86-9359-455e-9548-d4da9cc9b36b\n1eb6df77-58f4-4bbe-9fc9-1c840e7c1059\n564734ca-745a-4bb4-94bc-c53ac948e00d\n35bd7a26-94a8-4a5e-a044-4e16a044c26e\n2c174505-bde2-4baf-898c-1c18c6679322\n4e83cab5-29e4-4442-aa0e-6436e550278b\n724a5818-32af-48fb-b464-5a5fb028d54c\n5175b274-cdd2-47af-b2ad-5804f34c3612\n678bec44-d89d-4bd0-887e-a1a626f9249d\n0fc498b8-df9b-48d0-b790-967d5f3564c3\n1c3c95ef-bf1b-4a6f-a3bd-f7cc8207c8b7\n3a2f8d00-6be9-47f7-a5b1-d73922fa7ad4\n0519446a-3d34-4882-9897-29c339a7f101\nc8c32bc0-925a-49d4-84f3-278dcce46a7f\n87bb3cd4-d2e2-4e0a-afb0-23296badbcb7\n997df367-29ef-4dfa-abab-7b8df63986c4\n72d573ae-1730-4930-8eab-20e7e1f24e97\n76407a37-4b17-467c-bcf9-3f783d2caadb\n093f8655-9c11-4209-857b-bb7e2b90504f\na63ffca7-31aa-4512-9bdf-e246f49506b2\n55157300-14b3-4854-b2ea-0121c83649bd\n346a90a6-ece4-471c-a97a-25931df12692\nb6d6c254-0050-49d0-a488-7c41bff31de0\ncb84f34a-7027-4b2c-a4cd-6a1ac03da8d2\n3d9e9f99-3a1b-48ec-b79d-8eab435c12a1\n33e07c6c-0b29-4779-8fd3-60bcc47d39fa\ne7bf94f2-6775-4621-a181-e079e512deda\n0238609d-bc56-4fc9-a2c0-d1eab4056fe5\ne53bb6d0-8f23-4ed0-95a2-01226bb6b6b8\nbc477e8c-e546-49c7-8cfc-3d13d3c956c5\n65181375-855a-4a58-aec8-89e25349c9c9\n03bd17f2-73ab-4c05-a2e0-63bc44c86764\n80830f75-2da1-4aff-9a28-7aa180359cae\ndcd2baa3-dfa3-49ad-820c-04fde5ad8fd2\n358dbc49-b433-41a1-adbe-ea8cd213ce22\n74c79402-8ecd-4158-b108-310159ed6992\n4b33acf4-c009-4f37-be57-2fb5406b57ca\n9d3e5769-8d56-40d6-a6e5-930e4ded1815\n8629c8de-780f-41fd-b750-d5497411ab1e\n1c26cc82-633a-428d-9902-904c243de317\ndfa0e399-818c-4d66-991c-0515736386ef\n2a48f802-69fa-4a64-bb92-e6ab9db8db79\n3c73d406-5f3d-47d5-94fe-f00678193bbf\n6ac81f31-92f2-4d63-836c-f3efcb2e2b1d\n539b0395-57c0-401b-9f1d-991aa159f7ae\n377a7250-ac18-4e4a-ad90-fae0975510a1\nec8560ba-9f64-4128-8517-bb75b14322e4\n50befd10-a3c2-4979-a734-c5bd7ab0fcee\na6ec39b1-c124-4594-b9ef-107825a22a52\n68bb7590-6c8f-438a-a4b9-b2afd5436b65\n8707dbd8-0866-4dd6-bbf6-8836419dd974\n6648f88d-84a8-4a1a-803c-5c18329e0748\n6e338aa6-7c71-48de-97c9-1d96be54d86c\na7befc96-f306-4635-b5c5-44b2fbb3309b\n098bef2b-e8c5-4036-9b52-6c9ddffb0779\nd86b8bc1-de1f-4245-89c7-4d2f68a50714\n41c852e1-2de7-4091-9c1b-60626c1a9882\n2667ae05-7553-4563-9091-d07355f26002\n78e3c0c6-4c69-42b7-a691-4956bbd433c8\nc9301798-61df-4cfd-affa-3a85adccba7f\nb92db14f-045f-48d7-81ef-2629394211b8\n09d0ef15-fa2b-4db8-a925-25f7fd71b172\n819655ac-bd8a-48a8-9219-a2d6846b24d9\nd60d7575-ac02-48f0-a43f-b801927653c5\n721eb77b-9599-4cbe-b524-a3eabd03c146\nef65ee0f-a67c-4ddf-97c1-46c114152009\n7bf51faf-903d-48b2-97c8-16a056295225\n53937033-1034-4f4d-b8ce-69f8377813c2\n9f90cff6-99d3-4754-b3c3-0baa9a9b9612\ncb0d3ddc-5a63-4d6f-9be2-2145c18196e0\n4b2ef53e-fef2-4b43-af1c-63b6ef4a449e\n25f14fba-185f-496d-865c-3610b5ebc939\n496c931b-db25-407e-b837-9479afe82651\na09bd3a3-92c1-43e2-a61a-2af7146191bf\ndbb9802e-d173-4193-a8a4-b654d004fbfb\nc37e6c26-73f1-4596-893d-8eaf377c608f\n95f4b5fa-5b24-436b-afae-17feb8fedefd\ne678c141-326c-4cf2-8624-bc9b1fde3126\nf6372733-4796-4cf1-9616-dee34456bf27\n1e4d6519-4dc2-432f-8734-90eb840c7e27\nd4de9f24-b356-4ade-867b-ba62dbd7494c\nb4b3a6fe-16fa-477e-811f-aecf7651113b\n8f693304-311a-47fd-8f59-cbab193ad3b3\neffd3673-db69-472b-8d43-58619999fdd1\n77f2ff2f-27a8-4d5f-9b3f-576e666ef1ab\nf1d68b9f-43ae-44e5-a896-1e2b11791ed0\nba5806c3-3dc3-424d-a925-21b99b606dba\n19b9e02d-6423-4d62-9553-1c2d26a62cc3\n7076912d-0cb5-475d-97a4-dd10963a26ef\n2ac75582-f091-486b-8b51-1774d7782e0d\n66695173-0b9c-483c-a8ef-803e07abf7f4\nd641d969-9991-401f-98ee-2f063d1c8d59\n0c4cc57a-4811-40c2-b7f9-16d2e458128c\n1d9ae24f-f99b-45f4-bf04-d579085efa41\n9779ff27-04c6-47fb-b313-7206d6203441\n2c00653e-bf18-4876-9199-6d4dd91613cb\n494cfca5-ec10-41e5-817f-ce42cc75460c\n57d27a13-8486-44fb-8210-2d4d17544ee9\n8f6e137e-18d5-4e24-8c08-1e20a28bd5a6\n38b9be94-a19d-48f6-9a3e-5db598b05bb8\n1fe976fe-eb62-4c9f-b90f-cb17ad122309\n57e2b58a-3f6c-4a61-9d74-5ab4f0fc0d9b\n0cb6af68-5aaa-4c67-81f4-deda48f7ef0e\n07cb31d6-797c-47a5-8df2-0c9ec4b2ecf9\n3d63d771-e3dd-45a2-88b5-abc0d2a6de9e\n6a6cc15b-e1c9-4629-92a9-0719bc022b77\n45899951-580e-4dad-acd6-8e9fe037a8f1\nc340f6ea-367a-4a1b-a640-5d3565574a94\nb24d253f-ed20-4156-acf8-ee419bab2b1e\n73f154df-664d-40b3-8f33-49e965fa58d3\n1d1e0118-5f76-47fb-8afb-cc85a76c52ce\na4dad17c-d9b0-4752-8e8b-4b34ccb80ca3\n57169fee-85d6-45d6-a347-fa1701bf018c\n91037e4e-1c10-47da-8e7c-645c03d6d33a\n9e61a944-4edf-40c7-8a13-b4a3215c02d4\n71f276eb-2b2a-4ac4-a3c2-0a1c3cddf04b\n0b0c5554-eeda-4d47-a804-9417e59747d7\n6c9ac256-1094-401d-b2ac-a6caa180cbc5\nc09a44cd-3cd3-44d6-9c56-708f275b8ef3\n13e21068-d199-4838-a3b9-8ff5b555a3b9\n07f83756-eb54-468b-92b9-d198aac688a5\nbe64c8ea-612b-4cb0-afcb-49462681c466\n8b2d3b2a-dc0e-4345-80d7-687fb0875510\nd5b1bc76-0485-48fb-9f97-b60825e3dc3b\nc8d0b064-ab95-4d59-bba1-2846e8bc06a4\n7c235513-b303-437b-b794-427e6a037018\n321d10f7-6cd2-4b00-903c-2a6cef5bf4fe\n9bf197a8-3fc2-442c-97b9-03b20d076956\n4271f2e3-d353-4a9e-aadb-cd5ac9e2c913\ne58bd868-ea2e-4c24-a518-1b3eba49abc8\n459cea8d-f7bb-4376-8821-85a170cdb67a\n243b0106-5e30-49a4-a077-2f8b40d72081\n8cb12dd7-c945-462c-acd5-bfce430f81b5\nb4d34619-3355-45e3-bb9a-33344cf1d73c\n86256c50-4560-4fad-86e7-1b1fcafc3e69\nec92f322-f4c5-451e-9026-5ccd3adc3c66\n7d802e8d-a120-454e-977d-3ab5cedc6f57\n215e0bf2-9e2c-4899-82ba-4e669b428dfd\nb680088c-a67c-442d-9dfa-a2a843450c9d\nfebe8cc4-f2bd-4374-a885-36603c7b45ea\nb2f1aee7-10fc-47c7-8ecf-cf43ac7e33b4\n1902e7f9-b6d1-4b64-95b8-967786763973\nb4000973-0f94-4d11-b19a-887d64c32fde\n554e1cf4-24e1-428b-a61c-ce4db77eecae\naf75377a-017a-4ced-acc8-a4e89f1382d3\ndf8d0ca4-2076-4332-b0c4-6d7058ebf4c5\n72ee44b2-563d-43cd-9a36-3474d3a557f5\n2ffbe331-236a-42c1-8894-a91e608ec1d1\n4da9cb59-84b3-4024-a421-b012c81bfa1c\nbfe7d1ab-d2bb-47f4-b488-6e106fb1f841\n186bfddc-d78f-4b36-a5ea-b38d6448506d\n8cc1f732-a0a9-4d35-a485-10ec8a90d5b6\nf93bab50-b789-4134-b5dc-dbb15602b7e9\n209171da-4393-40e2-8a70-8227a88fee0f\n14f01309-50dc-4e60-9a6a-6acd972c3a2f\n46276234-ad74-4d88-a1fd-3c448fcc4f4e\n490c4875-c1b3-41c8-9db7-bdbf391c62e2\nb1027826-1d1f-4d01-b7d6-49aa1373016f\n4395acff-4ba5-4421-a8ed-360b5d31dbf7\nd3f8406a-5ea9-4724-bb7a-8137e0a005d4\n4bb12111-db98-450a-87d7-9f6e4e8166a2\n315b7a20-2ec2-4891-afa8-346beaa35418\n9ad5ebab-7831-47ad-a21f-d9a92345cbc5\n56979530-8932-454f-9943-975a4e342ed3\n4062df45-6484-43ec-9956-103f831afebe\n56a32836-8869-4e2a-805c-5d006ab7565b\n0134402e-c2ff-4b8c-bab9-8fd135685d6f\nc6fe650b-b612-4c1b-b37f-d3a5b9df8fea\ne53e8632-9721-419b-9c17-28246b8f12a4\n17955c0e-c9cc-4389-9171-215ca97265ae\n9136883a-a311-4c69-a4bb-bf91be54ee37\nba88f3c0-0d3b-4524-9663-f854505b0c0e\nddd9f7e4-dde6-43e9-86b5-03c115a7c5b3\n8699d61d-79ff-4e44-8a0a-e5a900b49201\n6cd589ff-a0bf-4256-befd-6500880ad9cf\n8b8686de-0cd2-462e-9fa2-9ec2729b889e\n3f476526-f1af-403a-819a-4129e6db3daf\nac9fd1c2-f522-4101-80e4-d814c17c4b45\nc62da065-6b8f-4273-9ed0-8dfa526349a9\nd1ca5691-6226-4f24-ab6b-f84da9491d2f\n5bd1b8b2-7dc2-461d-a9d3-638b43926095\n41c609df-c3b0-492e-b5d5-256b99d945a0\nde12d60e-3da3-4a5d-a2b5-923730239c6f\ne8a448fa-6f24-4d04-93be-cd06f019ba0a\ne2e8d6e1-48de-4672-8445-c0d7dba73230\n153d2800-4c8e-45ac-bf70-490d8c939584\n1baaa309-6211-47bd-81de-d0bcce613eee\nda3c12fd-4085-4d72-897c-83674fdca932\n038b073e-3903-4081-b7ce-a9478a03b4e4\n7f836bc0-2309-4e80-ac45-a3ac206f004e\na366aad9-ecec-410a-9631-54c685a70b96\n83f96578-0644-4fe4-9998-24b278f9d7ee\n7e0c3a4f-9865-4413-80e1-3eba9107f2c6\n2ed7ff92-45cf-49b1-b82a-c0b02dbaf19f\n98545755-3add-48ef-bc1d-4faaa247d6e6\n2c4b9f7a-63d9-495f-b4a9-84c2cd59397a\n3e12ab9e-2e62-4953-b212-7436d72f7c28\n87c4f7a9-9478-4ec6-8f73-021d8dec3585\nf80bb948-257f-459d-92e3-25f83d167007\ncb04ead5-3cf3-46c1-bf0c-a5d7fba75631\nbb632145-a8c2-4ce1-ba07-b524222b91c6\n38518a0a-0894-4c21-a08d-912b9c6eafec\nd20a559a-3718-4fa6-9426-5131d90c3741\n1066c8db-99ee-4370-adbf-1dd567116722\nc4f2c809-8ca2-4701-8859-b3dbb6e0ca3d\n519ecbb1-18fa-44df-840a-7a51c1e5b51f\n1f15ec92-14ce-4fa5-a4b1-d881d701dd92\n01214163-0162-44c4-bab3-cf55f6fe6520\nae6c3156-58b4-4f81-9408-bfa086770d08\n83fa362d-4724-496d-8413-9d1da252fca3\ndc657c6c-33c5-4fbf-a6bf-c8f3c665b049\n815e4aa0-926e-4f7c-af27-21ae8e2612b8\n4a4a27f1-5997-4293-b014-1961bf372f05\n340211f9-d701-42bb-960a-c63868ed0784\nfeda7ec8-8d45-4402-9860-54ebea34e2f7\nd056e575-b653-4484-be24-96af373fb77c\n154c0352-3d77-4409-b4e7-75ca177781bb\ne37584d3-6dfa-4f4e-ac4a-b16918601386\ne3ed9a78-195b-4419-8be9-8c8e3b4b2a39\n71203ee3-3e45-4d81-9186-eae64554bd9a\n46063464-bab4-414f-9e5e-cd428c5eb9ec\n154b885a-4075-4cca-93d7-aace539f471e\n76e03df9-3506-48a7-ab8f-9cf40c49a545\n3450d770-a8a6-4455-adbe-8f5fd22e12c2\n43ce7856-cd1c-4ed2-9623-03eb750a1cf6\n0c4ce67f-03b6-43d4-84d0-dcfaeeada43b\n2c65a435-668a-4f83-99b9-1aa57d0c5c25\n7462e142-3b48-43a1-91a7-b385697f61c1\nc6a0f9b3-8c69-4153-aa4d-e544432771ec\n916e4e6a-1b40-495b-ae79-251b6bc861f3\n26c5f5b0-27e2-4fe6-8cd5-8f368258d73e\ncb3354e2-b0dd-4411-a003-7e6a39af82c4\nef36cc4b-381b-45f3-a8fe-d1e92612b6a8\ne1baf368-d7ea-4012-9726-70f93036433f\n82bff3b8-cd65-42f2-a598-767869fd4b89\nc01361c1-4ba7-494e-833e-548bf2629782\nf8098e82-11bd-4f2e-8fc5-00c77ebe60f9\na9944698-3a9c-401f-9725-c6937d484743\nbe1481a1-dbbe-44d7-9123-e44798a8aee1\n9b757eba-e0a8-41c4-8bbf-e17204df53fc\n6ba0bb1d-90ea-4b71-920b-7491e9510605\n89a19ca7-b1a2-4921-bdfd-67a18ca1d9fd\nd82c61b5-79b4-4321-b4b6-93090560b84b\ne3c33f07-8635-4b7f-841b-8e86481e24e9\n470e998a-511b-4828-a602-f28b81e46fba\ncfcca2df-5d49-4645-a990-c04cd6c31895\na5317259-e517-4ddd-9e3e-db64e7ab0cad\n35127d26-c410-4d61-a261-6d33eaa77b38\n5c2b4923-babc-4e88-bfac-9ec6d59633c8\n1994a810-4ff3-4009-9dc7-4f8582f5cb5b\nfd00947f-28c0-4d21-9905-db99f18e73b6\n96e832cb-59af-4759-8428-1363595d0332\nd0d12351-0218-4807-adc2-2f2099a2583a\n9f07cedd-d06a-439d-b921-81f40398caac\n40dfdf08-b89a-41ab-b726-4685f594b11b\n76c20851-7c49-4dad-976b-92edac5d0e10\n8018c3c8-530b-410e-b78e-62272054f9ba\nc9674163-5536-4493-995d-eeaf2e4dea81\nf68e68d9-0a53-4451-8a2b-5b1c9926b5ba\nfc5d8d0e-54b9-4ac6-88de-30e52f4f9137\n3f1551af-8ffc-46c9-8130-d031b9aa7e1d\nf35fed6b-9dfb-47dc-aa83-cd883193a9be\n43d6a4fd-cb0e-4d85-87b0-13949b79f8cb\n6c3ab5c2-a73c-4d01-b5c4-57be1b94ac17\nbefb31cf-4332-42dc-ba63-f016805f3f17\nf72dbba0-b2c4-4214-98e8-19541d3feb07\n047c6418-aa7e-4dc6-b6e9-c007c00ed35e\n5c43ce34-33a1-4977-8de4-864bbff64a03\n3ada8372-e72d-4d86-b342-85c31089c7e9\na55e23bd-d689-4f05-898a-529bb25c926d\nb5440b5e-7680-4123-b0ca-dcb672be5111\na9f419cb-11ed-4c24-8dc1-b46b7448ad61\n8d123b15-1b9c-45ec-a674-3fdb56f73203\n3b49388a-4498-478a-89c1-70ecb30f3bd3\n3bced20d-ea81-4f0c-8e84-19668a7c645b\n1ecbb87f-9fb1-4398-baad-d2fd7e97d810\n75be6a05-eec2-40b5-be36-3fa1d865e232\nf6903459-404e-4d77-907d-f1aeb91fcb97\nd0cb2c62-b127-495a-ad64-926dab69a4d8\n25d971f6-5f2f-4cf3-960c-8bf5cec48e13\n89fe0c20-0838-48e7-a20a-da978821ec35\nc7c83b73-0e44-41d8-b827-900642753430\nd3a062e4-d09d-4fb0-9919-f4bee837ea74\n46582b79-5da2-4631-ad34-d536658a3f42\nc76cb370-c279-4eb6-a9fc-d9a39d844ced\n1a182af2-320c-4e09-a2aa-fd23c7febbdc\nbef18d9e-14af-4d90-80e5-cb7cd59e7520\n221c9e01-d4c6-436d-9dcc-af42cf57b4ad\ned6b369d-7d59-4738-a149-6c87f82ab34c\nd55e9e2d-9102-4bce-95b0-d9087a2be856\n59bb9622-7549-4795-a98e-2ef1f5fa026e\nbb00c450-9e04-4a6d-9cf2-6a09c214c640\na8e8cbc5-8b11-44f9-b351-78f4e30347b3\ne1d4a9a2-0fcf-41a1-9065-f313c7425e88\n6983c457-b805-4709-bd08-6c63d31124f1\n568d11db-ada4-4252-9d5c-3a132cec8871\n1457d69c-1847-4322-b027-e995e65a713d\n9a5cdb22-9022-4674-a457-d8d9ae1b92fc\nd6d15bdb-60f6-415a-bad7-16232d45fab0\nbb5a90ef-2e31-4ecf-a617-696e7e46142c\n5177ef46-a266-40d4-9c6e-6eecdc5f2166\n2091e866-30dc-4d02-8ab6-cf3d06c57e10\nea633d71-d2a5-4232-91cd-edc9e1104fb9\nd3d5c0b3-c44b-477c-97e1-d9e428ac813d\n8cbaec67-ce3d-46b9-af85-cb834fa40ac2\n5a3a7fad-0485-4ab7-9dbb-40ec527f7d7f\nb5fe97ad-b77d-4b27-b64d-86f98a180988\nd144a56f-d66f-4548-bbf3-e3c61e136e10\nc825a58c-bf38-4ee8-b5cb-67c5f753abfc\n14ee28ed-a34a-4e33-b0cd-67225735cb05\n7707be7d-bf68-4732-b243-be23964ba507\n01237069-0c51-47dc-8aed-1232cef64d37\n4787c05e-88d5-4ef9-8edb-5079e9b4bbcf\n18cf6085-2d2b-48b0-9d59-c0caa0e06d2e\n9f7dfd6e-d2c7-481a-986b-769ec9bd28ab\n60f5d5ea-e1a2-4cf8-8071-c05d88e3f932\n4e8de371-f094-4002-85b5-b828ad013240\n6412bc02-894b-44fd-8de9-9ec26eafe998\n2048e612-be9c-4f22-8273-b8aebd9b786b\nfa2146b9-cd29-4bb0-aabd-75f49358fbb3\nc58d0fff-3dec-49d7-b10c-8d609e39c33f\n9390158f-b805-4e42-b9c9-6266d985647b\ne64a3bd2-8418-4b3f-9e79-917905aac9b6\n11ba641a-9574-40e4-a70c-19e3f3f06abc\n9da698b2-a62b-490d-af07-fd475175c1f6\n3af01383-8acb-4ac9-ae19-7d82d2c48aa9\n1931c7ea-7d19-46b3-9a0b-1dcb2add2528\n567f8301-af79-415e-881c-a88578b8ce51\n9288b594-7c01-44ee-8e97-626d1eba6627\nb1b4256e-336b-48aa-bd65-22e7e60b16ae\n16372159-016e-4e6a-ab56-6ceb33b30b9b\n9b434a04-175f-4cc0-8bad-25481ba67f15\nce009514-744b-45b2-b505-989ea79a75e2\n8b7376f3-5cfb-4d0b-a568-68ed076d6c6e\n02430be5-8824-45bb-8edf-98d983485d2e\nd0d2012e-6310-4b0a-aef8-abe963b0c83f\n7ef85f83-8a1a-470f-9fa4-9f8f7197fbd6\n964f0b1a-fc46-4be2-b1b2-8b8e75aefa2d\n87c481e9-5a7c-460d-b844-387f7e46602a\n38ad7166-0f8e-45c2-9ad1-f4d960d5b15f\n647030ce-ea34-4eea-bbc5-6e2811ed688d\n8ab57d1c-f6ba-4296-9c39-349dad28a5b5\n578816ea-9743-46f6-9162-1a39e3717847\n4156465c-469d-4df0-8cc3-9b2f2f14a9a7\n7115b343-ddcf-4dbd-b349-dae3eb600af3\nf043c36d-9f82-42e1-a080-be581ed25653\nf46159e0-b8a1-4960-b602-e7f27919a755\n5f3eb8f8-3294-4478-8a17-4b5b88afba51\n33f5f3ea-ef74-4045-a76c-4da20ee7e935\n67be2b7b-6b10-4b7d-9af3-5f632dcc129d\n1b190fa5-1d94-4fbf-9f55-bf1bb656c69e\n165af30d-e3cf-4ac6-8005-e3e0549981f1\n440d9d8a-c58b-4df0-b124-603a7b4f73db\n3a5e8c1a-bf4b-4612-85e5-c29dac91cbb9\n2c3badd0-e799-4123-89d5-70cb836998df\n6cf07e1e-c1a2-448e-a6fd-4631039df4d5\n5cf21f5a-68c1-4ead-91fb-0712e60f40c2\na215bef6-c2fa-445c-923d-947533088097\nd8f05318-dd80-4868-8933-fb62a24580ae\ne60bfe67-f170-4dd6-972f-a29f1c518e59\n2fceb004-c8b6-4dd8-96c5-d4a5d53bcf3b\n02ae2f26-66bb-4397-8098-0fad99cf956f\nfb85c1d8-00a6-4bc2-9a7f-a5906e5fde6f\n1591c974-7730-4222-b9a9-a3a7515eaad4\nc85f2187-593b-4468-935a-10e7b2e14210\n6013929d-65d5-4fc1-8594-b47e618e0db9\n29ff3885-3857-4a00-8382-fd23e4804ea9\n227e65ff-ccb6-4b8d-bc95-ffd2d22dc35b\n7c44ba0d-98ad-49bd-adb8-eeed9ab5a7c9\nae274e70-2ba6-4316-920e-5e23130f7339\n33eba827-4686-4620-837e-4e14c8ebae94\nb401b152-9567-4c9d-abdc-f5aedda0967c\ne3cc462e-c189-4344-87c9-f8f3727cf6ca\na24a0744-ab60-4147-9805-3ec9d68939cd\n6d773392-e7d1-49df-a6cd-4d24ece4d25f\n2350d84a-38aa-4116-a6fa-189fd6f76a24\n4fd37796-114f-4d32-81e3-051ace5a3753\nfd30d50f-8af0-46ac-a917-0144bb181aea\na3c85400-f3df-4464-b799-3815c7822bf6\n52954e94-1c48-4370-bfbe-e0bc50193792\nea22c3d5-334f-4581-8e81-eb70f9b9a47c\nfa67e260-372d-4f87-9aa5-61067d9a3b24\nf5ede3eb-d4c9-4139-bdb8-fcf60b66eaa5\nb47bec69-7bfe-4033-a5db-27f8e5dba717\nf46ec8f8-2e62-4e2c-b691-6ae86edc2700\ned7c55d9-75d9-4345-8dc5-45bf432e4b81\n1e104cc8-2805-48fc-ae84-d6a39c73fb28\nd8ea140f-cb46-4c63-a432-74a906d04d16\n7273f8b5-6f4b-48e1-8f7f-4b854363d8a2\n6122bcd5-b3aa-4aea-ae0e-fca8beb7ad03\n32ca3b7f-e9ea-47d4-bfa2-5981a8922fae\n7e7aa5dc-c919-4fe0-b9e9-eb5819badd66\n01098bcb-7569-403c-a940-911dc0c3bdf3\n16a3cfd7-a36e-4106-82f9-d3bcb0479fde\ncbe4b11a-2372-4928-9ae7-f855d6d86515\n2019e3b0-5176-4604-86e9-c7cb2c273ac6\nc451cc70-72a2-48a5-b78a-02df333362ec\n088fad2a-11ce-40ad-87c7-396066744f94\n38da6126-9685-4ee7-b1b8-781f1eb308f9\ncb752c74-521f-4d5f-b5e5-d771846887bb\ne6b0ddc7-d142-4815-a80d-e263af6ba6a9\n107a9a66-6b0d-45cb-868d-c2dda011e266\ncd29aa11-74ca-4bff-bd6a-44f3c0ddf86d\n22a825ed-0a86-4163-9763-81a87cbe5d48\n37e61ccc-86b0-465e-85ef-550ed9855190\n298c77ab-d3ef-45c3-a6c6-75a523de5e4f\na6259754-93a1-48dd-9d60-38e0a34893be\ne09dd01e-dd1e-4777-b5a8-91c479ad5ff8\n9cc4776f-26b7-4127-b234-653913b4801d\n8410f03b-4390-4921-a9da-d3647452144e\nf82a5117-8173-49d5-8913-0bfdeb502af6\n43eb195c-491a-4659-946e-4cf7198a573e\n14662a8d-7a2d-460c-ba26-37259cfb063b\ncf0ca6dd-7a46-4640-829a-e20ba5312707\n2d4ea366-9bc6-4e3c-9a86-951ba57d78a9\nd338b938-a799-4af9-8891-43614cb9d76a\n7cc722c4-8edf-49a9-9a02-56ab248749ff\nacaa6c4c-a19a-40e0-b7e4-26d23a27f45c\n82e562b2-67d0-4b99-af48-074678a9e666\n14a74245-6bf7-4b1a-ab3f-f574d44902eb\nef14c020-2300-4203-9a60-7bd7e67987f0\nbe615cf7-8fa1-4990-8170-a3432a877a58\nd92faece-c170-4210-ba64-ffebe80992b7\n8bdbe560-124c-42f7-ad14-0a390b9e0aa3\n720da20a-67e8-4f84-aaa9-82d39e3db2f9\n80483251-36d5-454e-a8b5-01131c3000a9\n428b25e8-8e78-404e-9bac-adde0d4e3a0c\nb38686e5-9302-4a6c-9cc0-9711be23b16a\n9cb8df7c-be77-4f69-af0c-f71ae5780809\n87cddc34-6f75-4bd5-b703-7e590e0a5880\nb969fc2f-2786-4baf-9756-f5c894aafd6f\n62d91d32-dc26-4b31-a568-662f45ae822d\n482bd629-f684-4f6c-b114-6d25bf9d2a66\ndc0db942-1b82-402c-840b-cae35c985904\n59b232e3-5ad7-4a24-a9e6-d6add81d6b39\n6a1e73ec-660a-4cc3-b2f5-b487fa111098\n237f9302-29bc-49d5-afb5-8b8e1475f5ed\n24ccac24-bbe6-4127-9af5-9f1834429a0a\n1cc645ce-9893-4ea2-8864-1e7d526e1bdb\nd3433c6b-5189-438e-bb93-0091252d0430\nc8073877-d03d-46cf-8866-14423b87ae7f\n04c0552b-aced-4f0b-9e4f-57ca7cea8f46\n377e0a36-1d55-473e-8254-221c6351be00\ne6518b3c-17a1-486c-a420-e928a73d998f\n9f860f41-67da-4ba4-9575-0a335cce51d4\n7877d404-9263-447e-b6b1-3ed0b370fc3a\n9547f63a-1118-40e5-9ff3-8b4169e2b2a6\n277cf00c-0cab-47c8-88f7-fe48b4ea460d\n9bc563f2-7ef2-4d98-b204-cfd3632d8161\n4bb4d118-ab3f-4a4e-bda2-756807485a5c\n159b25ca-8356-49e5-a40b-974efc53b58f\n265362fe-bb08-4d14-b1c9-df244ed7441d\nb8afb3bc-b95a-44ca-8b6e-89730af4b177\n8ce5d28d-6789-4046-8d1e-bfd0e061d027\n0aae5fd4-1604-4e9f-b758-51498917fe24\n9583ae6e-f708-4238-8e51-632ad4150461\nd0c6078a-8a13-4437-9c23-576092a433f6\nef126742-0039-4cb8-bd35-05e2e37b1c79\n31cb507d-8548-447c-a85c-58697f9eb41b\nba618533-6619-405c-beca-c27413d0f648\n23b2ed93-4db9-44d4-96db-54840a96518f\n6c134581-d621-4d94-9eff-640328a325e3\nfd1540b9-deed-4e65-b209-5d6e1dfd66eb\n50aeece6-2903-4c6e-b9a4-291147193387\nabc4d98f-d823-4b99-adf7-504df643f775\n240d49c9-268d-47a3-b729-840fb7ac9379\n78204caf-585f-4081-a392-ba2570b7a14e\n9feebb31-d7c8-4801-8030-cd5a06406648\nc102dcdb-a516-4106-b361-cb51e1f95b06\nc4f21006-6b44-49fd-86c4-371bf3365394\ne3652fef-d5b7-4a98-8893-260ffa8b2655\n44d8d513-5207-4ed5-a5f1-3824f7f88a78\nc0974f9d-3066-4447-ad54-4f14569d9272\n34110109-c9ea-4e04-9744-8c10f2aeed19\n1c84ae37-3016-42e7-a5b3-1e3c92dcb9d3\nee627fb3-d52c-4c7c-9bf7-36083c8b85c1\nc4af5526-1954-4043-abc1-89b4a366f677\n587e5b9c-302f-4dfe-b1ed-6bc4bb1985b5\n794a4630-b406-48c2-b8b1-584cbde8bc40\n5dc91c53-b01c-4b9f-8551-93bfb7d98833\n7e9dbc6b-6eb3-4f9a-872e-602e06d6ce2c\n0510e9ef-54b1-4b47-9d87-2d8bc1ea1de4\nc1cce621-82a3-4046-aec6-a173dd68875f\na338e49c-535d-42ba-b187-dd04af820293\n2eef31cd-39ec-4d01-bceb-186e44f0a9e8\n56a4a383-b487-4799-8e28-1dd226395baf\n3688b4c2-c4b7-4331-badd-0c744f6d1af7\nfe2f8751-4c9d-4b95-9b6a-5d62f8fca3cf\n6937c448-6a1e-46ba-be79-0fda89fe9fd2\n40e65d41-889c-4328-822b-2cccd2766b5e\n99b5434a-9b56-4c86-acdf-223e818b4ab3\n158987e6-df9c-431e-a6c3-b55533e3fe0d\n9a18f0bd-d3b0-4494-9d5d-dc9784d24dfe\n624e7fe7-559c-4a02-a716-fe5e78c8af44\n22f2bf19-b4b5-4faf-aecc-fd174ef23efb\nb563cf5f-4c7f-4edb-aedb-a36d7be161d5\nc38a4a29-214c-4219-9cad-beed14443f9b\n9e8aa5ee-9363-4d16-8bd7-a90104825a4c\n95ab6381-4069-425e-894f-de75ec84113b\n539e31d5-0a28-43e3-9eca-0006b639df5f\nb68c7b66-f749-4c59-ae45-9bdd403a1c03\n9756712e-42fb-473e-b124-f8f7487f83b2\n7433035d-e431-41df-a468-0b6f91585d2f\nfce6cfe0-3a87-48fc-99b9-8a4857e375b9\n2d56a01e-050a-4839-ae0c-8b92a56a20b8\ndae689dd-67d0-4a43-8a27-d42903b25452\n6c648d29-f5e6-4561-9c1c-dd9284c8d875\n71da5475-8ecc-4b38-a5b8-bee6c4141257\nef8abb31-f7ed-4fa8-8307-b71c532c5e63\n481e2c44-413b-4fb4-8ec7-6069ed3dde12\n30e3cb9a-4a87-4464-ba22-e10eb7bcceb7\n7b78bea9-ca6f-46ec-ad7e-542b237b5454\n5398e157-eec5-4887-a096-84270b989b55\n2d1a08d5-6456-41d1-896b-8354f8af81de\nea84b865-440f-40ea-975f-155594e725e0\n4457605a-652e-44dc-8073-30ef807cd2a8\nc00eb91d-04ce-46e2-a819-70fc6ff1e100\n7c048cf5-94ba-4c75-b377-16e4eacb60c4\n03350699-a417-4594-bb40-92af092bfa46\n93f93c28-b708-40c2-93f8-da1f7c05a188\n57f04ef6-70c9-46bf-85b5-0baa72b85d12\n2a906ed5-a349-4439-9773-459653431901\nbf29145d-37e9-4ae0-8d2a-85d6216011f3\n84ae1476-5e3c-419c-ae7b-1ad718ecef14\nd28d82ab-cc0c-4865-bd3c-fa2908327df2\n406b363d-be3b-453c-8d6f-a464d117bf95\n6ea10b63-ab30-474a-aaf5-97808aca0a49\n20da1318-0c29-43ed-9e07-fb70cf439cbb\n1b9bec95-a5bc-48ab-b07e-200644ff1d71\n16d50f51-4593-4f21-934d-6b4c21345205\n3d3a6300-7782-454a-8560-b623310af6f5\n9aa18fe6-9888-42bc-8642-9056d01ae096\n9ebb4254-e82b-4926-9850-5bff77dd52fc\n1835d948-1a3a-4ac0-953f-c689717c7077\n8c06364d-e311-4b2d-b2e9-313a7a6d5416\na337645f-74c4-4961-a2a1-1dc8dd03c7f0\n20cbdc38-7acd-4826-8511-3a8ed327d591\n129a10a6-e169-4978-a131-0003d07b56ef\n6f7c3a25-e61e-4573-b539-7b00eb769bb9\necbf1408-122f-4d1a-a2a4-fb7a3ee123ac\n183f2a42-42d4-43ad-ae0c-856ee605d241\nec5ed03a-d620-4509-9d21-27469a10fa49\n216e0e91-e13d-4fb6-b47a-6bde012b5074\ndb1212a4-bab6-4f24-a3aa-92e56cba41c6\nbe0cb373-95f4-4f4d-92fb-79d484b7f64a\nd8a054ec-a6ab-4d9c-9174-ba8cc8a2d52c\ne43bf74a-fc34-49e7-9517-59bddb6b312c\n2cf665f0-d296-4284-a7fa-e1701490d2fb\ne44716c0-88d3-4de8-9b46-1b6fb8386bfa\nfac6b956-1d9f-47c7-9b4a-1d84cbf35b73\n226802a4-4085-4e8a-a3b0-aa985e6811f0\nea29702e-654f-4db9-8179-47b0c90591af\nc7881ecb-d337-4355-bbc0-3ed0d98acafe\na1297215-fcba-42aa-a332-7024285d6b99\na340da2f-98ee-4617-96c5-9a04f9fc9193\n4a291dc2-500a-4bca-b7a4-01f0e9d490ca\nedfc2f5d-0a80-43ef-b655-8de39c6480a4\n7d002953-0dc0-4b6e-b2c7-0feb5389b716\na2e5f7c8-3d0f-4ddd-984e-9de02d06960c\naabbcc5b-9098-486b-8b45-20e197e79d43\nb1ddbc69-cacc-4ae5-8750-252fe55a01a5\nc433ec06-35d7-4cd6-9117-463334faa8f8\n7f942447-8e97-49c4-a2a6-f04f4b68ac6e\n3c7efa62-8443-497b-8ed9-291449385c5a\na799a9e1-8520-47e8-a9e5-6ab13afc179c\n1eff4995-a0b8-45a3-aae9-958c880061d0\n634fe687-86ed-4e0b-b9ff-da8fdd38fc26\n56df14ed-73ee-40d1-bbbe-9b41936ce3a3\n325dc8d6-3534-476b-ba78-b46af23fc728\n0762b668-892d-4c6e-b03e-05ea1b1793c8\n5e8f1ac4-b443-4b89-84ea-18cf7dd646ca\nb803e97d-218b-4ec2-9c50-f245db9afb9a\nae19ae09-1996-40b3-83c1-e270866f5d97\nd9fbf5f3-6381-4a14-aa83-5c148dbb5d8d\nb6225e0b-6bcd-4009-9a89-4d2f1b66019f\n37128345-5f2c-417c-b0a2-2f0b2f1fbf09\nada9c75c-b41b-4d57-a51e-73c29dd9bdab\nbbf623d6-e756-460d-924e-236e1a250c01\na67b8cf9-71ef-416f-9c6d-9858b336f701\nb7bd54ad-6d51-4864-90fa-109ae851f689\nbbed1ea6-1391-41e0-aaa4-5e3f1a5bfeae\n491b3b84-9d64-4c1e-bd1b-1573f4dbb912\nec57faf8-61be-481b-8b47-cfac16d729f3\ncd26e33b-adae-4980-9325-b77646047625\n3e90acc7-6196-44da-9c45-978c84bebb54\nf809e31d-418b-42e9-9261-7f944f2446df\nc05204e2-4fd4-4b5a-80cc-74738570438c\ncbdf388e-384a-4be2-9e05-f78e86476e0d\n90439a0d-d749-4131-8821-df0697ca2c0f\n91b7c896-2bc5-4e2d-ae2c-e0dd552373e4\neea6b637-727a-46ad-971a-3790ca8b6c5c\n32023645-5818-4a97-b33f-14a1f0c257db\n24bc0d39-3bb5-437f-a5d4-ff7cf5805ad3\n48e8b601-fc8c-4634-840f-2b949d294a20\n40715ad4-edd3-4db3-a246-b2f8a9957346\n228bc2c1-7b05-4ca1-9067-8b6c8c420d8a\n7e751199-fbfc-49a7-91d7-564f2e6601e3\nc6554a27-aa0f-4f7b-b278-47bb2c03fc1d\naaecbc7b-625c-42f8-9e7f-9ece8d577e34\n7ba12bd1-7b27-4d2d-b460-12d16c7ace52\n4f5edde4-c581-4f3e-b6d4-ea85f1a0895b\n420b1733-6fa2-416b-9b90-4b5bbee26d19\nf31e837b-13d9-4999-a95e-77e8faf07ab8\n650e6b41-2a1a-489c-b3c2-4a8a542bb4ff\nb7574a89-d62a-431a-8d43-e64d034887ea\n9bf223af-d3a2-44ad-af96-9d4eef0adbcd\n851706d7-3a64-4989-bc3b-06f7b81bdce0\nf12be70e-c8fb-4f83-bf55-46e78616ce4b\n8ba93ba5-f342-470e-a707-b31d189edac6\n03950928-b5de-4a2b-ba0c-74ac097a30d5\na794d280-687d-4cc4-8eab-5bbc775871f9\n5f7174f5-407c-4164-b461-2177c96969cc\n0067ce25-1695-4a41-b4d8-9044b15bae75\n396f9f1c-a5fc-499c-8496-f7a7ba7b6e4f\n6dbee6f3-408e-4c52-802e-2db5d5182955\n069ba1d2-3503-479a-8f11-252650ac7a68\n7b8d2fd3-4533-4d32-9cf4-e49f5a47e00b\n37d4fae8-6b60-41ee-a87e-e1bc707ee3a0\n1fa253fa-30e8-4ce6-aa78-3280b37a8243\n1b90110e-c33a-45c3-81d9-b6793c41d253\n8c2e8c67-1617-4451-94ab-b99b9d8b2356\n679bc52b-f8db-46e6-a59a-4ccb8792a7fd\nc019a33a-296e-424f-8cda-932f1026dd3d\ne41fab43-8bfc-4ad1-a21d-c282e59da0ca\n64963655-bda6-49e1-aaa5-d98171b52e22\n425c5ecf-49c5-4fb9-b11b-5c80cc8e53ae\n612d85bc-8d55-4e2d-a1df-5515e93dc243\nabdf6270-9157-45c1-8c67-5e5c211635fa\n4e2a100f-c194-4615-91f8-adf4aa02fb3b\ned30c5ec-73d9-471d-adcb-9eeab2b26c32\n4fb02826-17ba-41e5-aa3f-1e9b77780a5c\nddc6781a-face-4421-a902-3ad411604553\n096b21a5-4bd0-4dd6-afe8-467b39218775\nd14de87f-2af4-4e20-8245-c00f5604e3a7\n00b45cbb-97a4-44b7-befa-4ee192e277d6\nb21a3ddf-1bfd-4386-8598-a008840375f7\n2d3478a0-516c-4e13-a489-a251d27cf7e5\n0d68ce3e-1741-40ab-bbe5-ede9c25f8b81\nad84f72c-8d51-4548-bc16-e8811f83775f\na63879ec-1d8f-4bfa-aa1c-daefc13f9cf8\n3ee48e58-6cc8-49ff-aeb7-a97cb3026065\n1ea34f9a-65c3-4d0e-a536-9c80f2aaf749\nd453fa1a-2593-41cf-bbf2-09809435b14d\n37e426f1-de60-430f-9098-106d884ccfdf\n76abcc1c-03f1-4646-8ea1-ec11b32e8f0d\n59ba306c-43e6-48e8-939d-377d99a609b5\n1b5cd9a8-3a7b-4573-978a-35fe7ce88fa1\na00f8049-59c0-422a-adc1-482b95f70787\n02a0b5f1-d790-49fb-9e0a-06712837a329\n2550e2b8-9cd4-451e-b433-d483e8cca345\n242caed6-e592-4a89-824c-75bd62f32b08\n5945d367-345f-4109-b29a-4ec139a16293\na565b52a-a4e9-4042-b8f5-943fc912483c\n277d631b-e2a4-499e-b4f1-375ea624a179\n1a499e2a-229b-4b11-892a-d0f60f1a28ad\nd57a5aaf-5606-4fd7-bfac-143fc2537992\nce95c63b-b07e-4d8b-8aa0-58a33088ebde\nf14bfcba-41c1-47c4-a9b1-889af1c98f08\n07d4fc4f-accc-4a18-a8db-237dd8d23a03\n7ac80eac-3ff2-4245-b56f-4ca85397defa\n22c1101e-9820-46a2-b195-91a4cda40689\n9356c191-30a1-480f-bd26-475448db6daa\n04584d38-4dc7-48e5-99a4-1ea8a94c6fc3\n0521882d-bc67-4a48-8643-b759e22a67cc\nec6f0f6d-b9d9-47d0-ad40-93b301b9eef8\nf76f84fc-856f-47aa-8f79-44d1932a9b83\n10c16040-0034-4696-a0ff-a922973ab783\n3a7c2998-8335-47a5-9743-bd5721cb2a41\n27faa78a-ccc9-4b08-b49e-d9f9901c89ab\nb4738602-26d3-4fd4-939a-65b907428c87\nf06d7b55-13a2-4357-b0ef-4f969206ee5d\nad3fcb6a-4679-49e3-a2db-257af1b57a67\n1c68cf54-bf1b-49de-b005-7729bff1c4cb\nbbf5317b-94d0-4a75-98cc-0fe7b64c4a7c\nce652a1e-36e0-4b79-bdc1-f6c4b4328d3e\ncc1e4a63-6b0c-4aa7-9bc9-e8e2217907c3\ned857d7c-ec21-4ec3-9c8c-544008abbb5d\n12320c37-7c10-4114-af36-720dc37b8892\n4a7d0b5a-b557-453d-be6c-3c49e7c79eb5\n48a2e5c3-b2d2-4d5f-8ede-7faeaecd12b8\nf92eaf5c-3955-4965-8b24-aeacf0eccbd6\n1804c241-4015-4076-bf35-53b51f159bc2\n8bab13d4-aa4b-4ac8-a9af-83e6457d03fc\nde6e45c1-0d9c-4b64-9bbc-be6a04374539\n628b220d-4ad5-4041-8226-e6d26b90ca79\n7582eb0a-d417-4528-9cbe-e0207f0d48ac\n4db3b103-f791-4778-b4db-ee771c1d0d64\n59ef1c5b-a9a7-4a33-9952-0df5373aaa47\n53a2ce07-f625-41ba-92fd-e41e682b748e\nfc083da8-0ac7-4be0-8613-1846338c3f32\nc19e4c77-0978-48b2-8531-928691d0b042\nb942b918-9b37-4f13-8b7d-7a5e582f537c\n4f4030fe-9441-4cd9-8097-227125ef3dc0\n4cc2f360-1afd-490e-8687-1866cf56c721\n5193905e-42c9-451e-91dd-3c0f1f1a6ebd\n5264cf9f-509f-4d41-bee4-cdafd1e60a09\na2917320-b888-4835-ad00-abc269f28e50\nc9eb62ba-6863-4999-b9c8-b7136f914bbe\ndd40b262-c8c2-4f39-8440-dc09f74d546a\n50643893-a829-44dc-9e86-fd8d5a8bc7f6\nd5405591-964a-46ec-87c6-677e0b4f653a\na4beda9c-4b21-45c4-a839-0b3264af2d59\n8cf44c77-54ee-4337-848a-47684099f625\n4bea59a3-6fd6-4fb1-b049-87c98c014f41\ne69a6171-10a2-4338-b3ec-7830e758e9e8\n41f5d5e1-8d6c-4173-b4cb-85ac091a8190\nc4aa50b1-ac81-4a6e-8de4-4a911a522b73\n3fb77f11-5c85-4956-85a2-fe29c47fd6dd\n7f9928b5-4425-4669-8c00-4df439fcabbd\nf328f4e0-8f49-4749-bbea-27a80e6b2e24\n067d594b-202b-483c-ad9a-9baa30721bc4\n771aa7b9-d740-4c5c-90d1-06eaf603d037\n8bdac9b6-37c3-4253-9316-2e14811c4ff4\n04456cdb-97ad-4f38-9c67-e2fb20bfb502\na89a10a8-e6e4-4fcc-96df-3e58bd0ea3c1\n34ea9950-1912-46be-89b2-97de86469bf6\n159cb807-968c-425a-a221-45f850974f34\ne44fd7ad-2bfc-4e26-8eb0-adb679b66f91\n7f9ee77b-b010-4d34-b854-cf35b63fd2fb\n7c262acd-bc21-4f65-a73c-1045a8475e8b\ndc6918f4-1e73-42b4-815b-8f5557b8fdf1\n5728f827-8ddc-422b-a0b1-dccaa654ce1d\n251048b9-5a45-428c-9bb2-60420018fc92\n4972889d-f705-4c44-887d-14343802944e\n69acaad9-ae68-419f-8c69-607307ff9631\n7b7a0b8f-ff21-4519-8afc-eaf0ee548ffe\n36de2cb5-436b-4bfd-9b03-0bbfe71d8dfe\n07d08448-3fb1-4b72-ab18-faa7e0bd760e\nd8d29a3a-e3a1-4529-9502-7d72e6861925\n41b2bc8e-d1bd-49b5-a34c-a06d697a4c61\n4c1bfd3c-e7a7-422d-869e-9ad728c6e987\n88f9d6ab-be6b-4a98-bfcd-0b4a16a6ff31\n0f6b1bed-de4f-4d18-84f4-d0355e07c2e7\n8cb8ac8b-5a3a-443c-b023-8110e6634df4\nded8f62f-cb4e-41df-9811-f099448fbd46\nab492563-9cb1-4b20-94a5-7525a68792d8\nc63621e3-10fc-42dd-b84a-f66d13cc7ed4\nd7e814f9-29e0-4790-a28b-40c3d6c1729a\n34ed9e76-d7b2-4e13-9e35-ada8c27a9c23\n81ffb3b4-51d4-4cdc-8407-ac6113d043b6\n6e7a3233-1fe0-424b-824f-0f80f588d920\nf05134eb-46f4-4c34-b514-dbe64e47fb49\na87cb161-5511-41f0-aec6-2c92492a0795\n3eec4975-e1f2-4762-83d3-96dfc11017b2\ncd423a01-6965-42de-a57f-6710337e8c6d\ned6cabde-e648-4ec1-96af-b3bc910b324c\n481b33d8-ea86-4001-9b73-48b7b6766413\nb9a6004c-674b-43cb-bed1-6d390b14e6f9\nd59d36e5-7902-4d81-a185-35951e63adf0\n56726c81-f470-484c-ac90-48a021518422\nf28f80dd-c00e-40cc-a9f4-871b5cf96534\nff1d19d8-e13d-4a8a-bf66-ae96af5919f5\n28f11c6b-2369-4f3f-a540-12cccf2c74b3\nd8c0586f-fc82-48bc-a688-3e3abdf01ddf\nf4e3d888-8d16-4c8a-a9bf-4d63659a4cfc\ncdc821d3-a356-46c7-a9e7-0603605d84b9\nb7f83a22-8683-4026-9c6e-3d75c37931b3\n28ef2f4a-e17f-4ad5-9fb2-609ff3d98ac7\ne4e42c25-ee50-4cd0-8585-8e8e53d0556a\na026ab00-2ed9-42bb-931a-0299621fbcc5\n9f8a48fc-b73d-4583-b671-d839dc708ef8\n371320ad-1283-419c-b38d-bc918adbb74b\n5796b440-2df7-45c5-9f1b-b68bdec5b68e\n3e036c02-9873-4ca5-a2e9-d8be9347cd93\n055ce22b-f88e-4ff1-b0ca-e9914ddedc6c\n56e53b4e-cdc5-4081-abc5-fcb2b2237812\na7280257-a6d7-45c0-bbda-b6b52b96d944\n53d5f773-836b-4c99-b7a1-dbb15952e424\n7936e572-538e-43d9-82c2-9fc65b69808d\n1d574a8e-0c86-4723-97c2-c4d76f8355a5\nc8d51015-dc81-4797-9756-132e44aa39ae\n78248bf6-5cd5-482b-9fb5-89f98ae6c6bd\n62807469-3528-437a-809e-41fc6fedeb23\nd75e7e41-1740-44c5-a889-daec672249b7\n8a2f4e75-db2b-4408-a960-d8216553b7bb\nc78fade6-fbcb-4dfc-bdcc-b1756996c377\nb9d71bcb-377d-46a2-9d65-5eef6bee221d\n6f50d44a-f59a-45e4-9226-07fec67ea47c\n5e75d308-0042-4f07-92c1-716efa98bc72\na97ad2f3-cfff-4b0d-8ea1-26bcd13cd171\n577fa30d-fd7b-4fbc-a2ad-b9d3c56c4ec0\n571b73aa-46b4-4792-8d5f-495cd0a3d1ec\n387d9bf5-72a1-44f5-9251-d8c383c66486\ndc4dff72-8b81-4ebd-a78b-e9924d3a75a3\n1b7ab288-694a-4cb9-9417-64b56d13640c\na3190b0f-6d55-47e8-a01b-daeed9bc7fc7\n53872624-1d82-4679-9905-45dc48684f7a\n5bec5e2b-3444-4106-a173-32db4fa98166\n3af98533-11b6-4638-aa7e-eef545cf5017\n4acf3454-73fc-4e51-8fab-2b6c48cfa105\n8fc293fb-315a-42ed-b893-6525e652e514\n5403d9bd-6668-4340-b752-49424d03545f\nf927e9df-4ca6-475c-9c56-5208b26063b0\n638b3827-ea74-48bd-8dd9-30bc4a005589\n6e004916-b46a-400c-bab8-04636af15d6e\n909bea93-449c-47a1-8ea0-076eacf80d20\nc16e3d99-8b69-4d86-8478-d451dc8a5915\nb53f6cc6-edec-4906-9a91-fdf9271448bd\n6f052603-b604-4b80-9805-1e4d3aa0cad4\n6868f6af-4893-4c85-81c9-f0ecd5a80c8b\n6959118c-3643-41ad-beba-d0a50219506a\n45575386-23d7-4e63-9b48-a5299da0f44c\n6cf703fa-c508-4cc7-8e57-0d4061614adf\n4dba0414-80c5-460c-9798-e4262b2af2b6\ncc4f53ed-de34-488d-944e-2eca9268439a\n45991305-c0db-446b-93c1-08ae9aa0586d\nd866b85f-68ea-4b70-b5ff-2d4ec0451f76\nda4ab8f4-5f1c-4ff1-9ce1-89eab040b0f9\n6230fb50-00ae-451c-a509-2f7e9daf7970\nfa9b56e6-27e3-4be3-a802-8c9c689776de\n5458cda3-8da9-4519-bcaf-812ecaf23c73\n21dd77ce-46d7-4b87-8969-a544bcb53f85\ne3b6fdde-60db-4bed-962c-44b765bd20e3\n23fc8d26-67cf-4598-9fa6-5100932c9b3b\nbb4ba24d-6786-4ff9-8c9d-3ca9ce3a7a58\ncf85d0f1-535b-450a-bfe9-84f8d3347530\nca75ae02-b4c1-4b60-8cea-1bbbf8e1b0c5\n1e71fe55-c21c-45b1-b7d5-1bb3484903b0\nf31a776c-584c-443a-8db9-f005c4f9e9d5\n11a1ef5f-5f64-4cf6-8c4e-bd1177e92e00\n569268e6-7629-49c6-870f-5a408ca8f1cb\na0a6a7cb-83c3-43b4-b29d-873c75883055\n2cbb7b1b-a4d2-4dcf-b558-a83509d3faa3\n5947e784-dec5-4864-8865-f43012f453c1\n7ba219f7-0fa4-4618-82f2-c734c828323c\n6cb37942-8275-4602-98cc-2e4357278968\n904baf96-231e-4b6b-a640-1fc246935a15\n555c8e93-3410-4e09-a43e-b3f15476273c\n9d97d7c9-7a30-4ff0-b79e-e0c778a26320\n62ee0748-3d2f-439b-ba3d-f12beb2ce978\n1c747064-ccfa-475e-941a-c3c32826330b\n815c2f51-1f39-4759-8b0b-b03b143078a5\n721f9995-cc91-4e35-b2a5-fc15d162b22d\n011ffa05-221f-48c3-a3b1-07f1f50bedc1\nf02254d0-de0c-4b61-888c-65a1dc897d9c\nff73c204-78f8-4c7a-a6b5-344563ffc821\nde91eae8-05a5-441d-ab4e-c32e3281cdee\n4015ffbc-4a38-48ba-8470-b9f7befc73a0\nd2f0957c-d26b-4d09-9ab0-eacdfad1c168\n393a7275-7d69-4458-8df4-c8516af53056\n21f0fcb2-d885-4633-92a2-dec100981542\n88246fee-ae2f-4875-9433-da06be2696cd\nb2dfe078-8f8a-4e84-a902-351ad4b62a5c\nf4f646d1-f5c5-47e6-aeae-04d45d62cf22\n2aaba141-b5ab-43ab-883e-e88a2881f9fa\n2014eaba-cb3c-422e-bb8d-daf0f339b6ae\n1edfbc4e-b428-41d5-9b33-822281685fbe\nf60a15f0-e195-46df-b032-16a1f20e500f\ne740ce90-4ad9-4e47-afa8-8ddee241be4c\n32dcb406-8c2a-4343-9bc9-8e00ce8d7a74\n7b4a4cd9-34ee-4d9d-a6be-9cea7718795a\n93d84c80-a1c1-42a2-9468-ca0bccb29c43\nfce5348a-7ea4-4ecb-9606-946d8c9ef68b\nf70daf7e-a0fb-41ed-ac29-d4bdfc0f5b42\n6075b0d9-e4b2-4003-832b-7ece8b3d651c\n3cee177f-f773-45ea-a494-99fa351aabd8\nce843a57-e7d5-4c2a-88c6-d65ec3fbbcae\n7fa0b968-d636-4835-939d-96a00bc95adc\n073a1293-66b5-4747-bce2-52550d4ce748\nf289c8a2-75ea-4c71-8120-a144bbd4b705\n3e026e17-2037-4815-bcee-5952b6dbdb94\n0555a5c4-a68a-4de2-bfe9-386697374fe4\nc00c283f-2738-4a3e-8dc6-8322622f0047\n7de09e36-c352-4355-9781-6253a4b667af\ne584b704-95fb-4cc1-8e73-da647894c137\n8fe9dd39-ae15-4125-85ee-3ff68fd4bd2a\n5b22d6bb-c3fd-49eb-8a33-7885ddead19b\ne932a945-bd3b-4c83-8916-6e2a617f610f\n06bdfe36-a5c8-429b-bf41-021c361bb907\n6470448d-2540-4f0a-9bdb-2e726f94b114\n9ba31666-912a-4b9c-8b77-6962cd47bcce\n0075c066-13ae-4035-bfbc-b1a13509a6e0\ncc73b76a-c6bd-47f8-a446-f225a3e0ba22\n18321cce-491d-48b1-a16b-1d425491cb2d\n55e5424e-b340-4a79-a17c-8ddd12236b19\n93f7489d-1c6a-4c21-b124-c7d31770ae5d\ne41c49db-a8e0-43a0-9d75-8a1e23241569\n4da23e80-70f9-4e70-b222-9fd5fffdee4d\n2492c8cd-ee66-419f-86b6-b91af2e64788\na3fe6b92-e95b-4e4f-927e-7d9796eb76b3\ndfd445c0-c7cc-4e6a-bd45-cb1a1c230678\n70edfc5e-737c-4f4f-8ea4-29831a3570c3\nf15875b2-31fe-497e-bc81-980c92c1b860\nf9342556-c587-4ef1-8b3d-9b9e54867cdb\n81151d13-8c84-4733-8b81-3a020d0fdad1\n1e0ec409-b544-48e5-a67f-0b3070f96bdb\n92884553-8c24-4644-ac36-03187e0f17d5\n44871c73-599b-4490-ba84-7d69919b83dd\n97697c5a-815e-4737-a30d-a97f74ee173c\n3234d2c3-1018-44b5-830c-e59a03aa91aa\n19188420-e458-4e55-bd82-0da2a55ace62\n189ba631-f4c9-49c8-89d0-cb093fb834ca\n0f20758b-9a07-4ec7-b919-eb80a689ab97\n1ff6a207-b003-4c88-a2c0-eadf9a9a5b4c\n71a92dbf-4b7b-4f89-a697-ccb0239c62ec\n00a4c648-3bcd-4777-8985-d196220711ff\ne16a6ef5-1463-4b26-af74-5d65f2476874\nfc58ffa5-79e8-4e91-ae3b-7430242bf57d\n87fb4b13-a87c-4e9e-8782-bcc5ed2bf8fe\ne196cd3f-c72e-4741-87fe-3ffd74314b46\n3b94eed3-b6f3-457e-ac20-1130150427a9\neabc6850-9ea6-4018-9bde-0fa2fb2498df\n5888b57f-e76b-47bd-859c-385c55e7dca2\n6c00b530-3f81-4dca-9c75-59d14a383ded\n70ed799e-8653-406f-8987-848a0f92491c\nbc1b6272-1c25-4dd4-9681-936f12fd3fe1\nc88f72c9-daff-4052-aa6c-cd3bba53135d\n88112c52-e829-4398-a3cd-4d727c618a39\n01f580e4-9f21-431c-85c8-fde9f7db9665\n05f0ff53-3725-4df1-bc1a-46ddf3c0019f\n734e1c43-d1fd-47b8-973e-29c29e5ff125\na13496d3-7531-431c-bcb6-028efe37d38d\n455a020d-1cae-4682-b786-40d51d64b88b\n0318c712-ce2d-42f1-b188-989c3caf9db2\ne0b160d6-7485-4f23-9702-da7896cc27dc\n5ffe1513-7f89-4f94-8c20-453242db58b5\nad0a87aa-5c70-42ca-bed1-71d3b29e8b0c\n3ab16703-ad64-4b3d-9031-478156816809\n347fe083-b550-4db3-9959-e8f585dd9310\n6be04a5a-ea2b-4ddc-9972-be99855218ca\n4e22cb18-4c48-46de-a6f1-d672087562b2\n616bf59f-c008-4770-b096-13fe5a206a21\ne1a71573-a45e-41fb-97ed-aae1ba2b04d2\naf632da3-88c1-4aec-a187-7158ed630acf\n113d093b-93a1-4777-b6f9-44335df35ffc\n72c8da41-ea32-4111-9b5c-c40b45c9d903\n12b9b3b0-f2c9-4536-bb24-515d8ed29bba\n8d42e5ff-549e-49f9-b756-9cc11358d46a\nb8ddb3b0-d004-48da-abb3-60c111ed6c0e\n59914e05-4c8c-494d-b27b-2f74e837649b\n50179eee-460e-4339-8da1-5ae5827a1812\n1a93da18-51b0-411b-8eda-14433069d5b1\nc963b7f2-b39b-48f1-a08f-496e8604bc13\nd158b71f-ff78-4428-9c19-e35253ffad3d\ndb6a9fc7-a826-4aa1-a248-59b22d657b26\n42c15cc5-0942-417c-ae5a-cec57d3a4da4\n281c460e-3f0d-4b6a-a8cc-efc7a638046f\n4a84b573-bb1d-4e5e-bdd8-2e430dfbd8aa\n71c184b0-a5bb-45b9-aeaf-92af2488dc58\n08c92598-74f9-4ff9-81bb-66f212232b5b\n092fe968-6f5f-4cb3-9a78-9c42533e3ee6\n64336bb4-3010-4063-9be0-f0996da42f21\n8d67933a-6a24-47fd-b0b0-de20fae6b753\n179479c3-a444-4d41-9811-26124aaf27b4\n1c057503-e693-4bc6-ab63-246cb8a5774b\nd45d47c6-35c5-451f-beab-19b51f0ee1b5\n6c55f1ab-17aa-4865-935d-1b1f765f76cb\n3338f384-cad3-44c9-9ec1-ab732dfc6a99\need05046-4c9a-4478-952a-2a85b30e70a1\n89edd88e-3cb5-4163-814f-72b7926dd330\nc1860ec4-e2a0-4e38-9d12-f91a233325f0\n17497020-77ee-466a-9ab6-ef7e969a706d\ndd0a6962-3cbb-4b4b-8f29-55c0b6876bd0\n939bdcec-cae9-4296-951c-157e08e8fe13\n1831cd36-a664-4bd0-a0d2-b10762d79fb8\ne35989e8-b772-40d9-896e-73218a2433f5\n46b7be96-5855-4a35-88a2-5bb9585c5ada\nba1dad33-860b-4f39-b806-bf8e16baffe5\n2d78c267-e33e-4508-87f5-b06e6e37e734\n518d528c-b6a3-482e-bde9-b72b8c0bd5fe\nd254a800-9832-425a-8c0a-90791b05c3a5\nea91e3cd-3765-4af5-a5c2-eb4ee9ceb3fb\ne1de86a5-43f5-48ae-b5fd-dd19a6fdb04f\nd36e2318-d960-4731-9fac-3c492b175fd6\n15e7a43e-9849-45d7-8b2e-0204f51d90d2\n1556b356-db82-40ad-9356-2b1011198193\n3d88e513-d44f-4731-b5e8-0ced3a7facc7\n386dcd30-30c0-4247-893d-af02c4d4420d\n67471dbf-a945-446e-bf27-61d5713de00e\n35dc705d-63e5-47b4-8401-943610ebb31e\nc5cfe035-2375-4a50-8cd3-174b27381213\nf93cac35-bea9-4de9-87f0-7c8b96e74c88\n1918aab1-0236-4ac4-abad-e083dad61858\n91a0a576-f33a-45ab-99dc-8b9627b59ced\n028dd960-241b-4c55-a61c-6b1a70b0e2dd\ne37ea1ec-b5ea-41d3-b723-918cd4c3e774\n97275c08-8062-4bc8-ad44-d9fa040b3d99\nb6cd17d9-68ef-43e4-8bf4-e8f3f6165cd7\n24f1a3a2-c521-4958-b704-a6901fc360f3\nc1f6f69a-4771-4392-b6e4-f46f3fb04f08\n4d0feacd-d89c-450d-ba41-fa7d0fe67949\n6f1ae706-db83-4840-ac2f-78a24aa7d806\nf7da35a3-f186-4f83-bc35-fd0a1cacfb11\n602a8250-5636-43e1-98be-0fbe752ffac8\nca593433-88b1-40b9-a43f-2ab172a20c31\nd23c959f-f238-4938-a9b7-dfc859aa6b98\na52db8ae-5594-4b44-bb2d-cdd4f783ffc3\nb16aded8-90fa-48bd-9695-7a8ff04c7582\n372415ed-7551-4755-81d6-2bb3f8d2b4e9\n89ac2e21-33a2-493e-8163-fdedde24909e\nb7bd642b-4d90-46ff-9e69-cc59084e408b\n9eb6c971-34da-4240-ac17-10d22642a459\n8d73b57a-535a-4b8a-977a-999a9127e419\n96e8f242-bd04-45a0-92c6-669902b4aaca\n90ac5303-70dd-4b5c-a00e-cc6201738d2b\nf115defe-de35-4728-919e-52e45d0a212e\n06a7741a-04cb-43f7-8191-fb8d6813a7f0\nf83e9424-eaf1-4d7e-8100-4a1b6c8043c3\n310390d5-1bee-497c-9825-bcc9619471b7\n87782572-f2cf-46e1-b5ca-fbd3590ea2be\ne0701987-c9fb-4fdf-bacd-99423930b873\ne5d0cd79-a39a-4096-963d-242246bc4851\n71c0e333-da0e-4abf-85f4-bd61b8a71f3d\n289038b2-8c90-4c03-9da9-ac10010676c7\na98250ac-33f2-47e3-a4a7-2bff54638c3d\ndc90a2c5-cd33-47a4-bcb5-7dab28f22930\n23de0e8d-ac07-4a7e-a981-01539f79a61e\n26b59915-336d-45ab-98dc-55ebdca3b119\n4ca1c7d7-6c79-4d1a-a698-5e13bf7f7ad2\neee4b503-aff9-43a0-ad7a-ec3378ebe4fb\nac12c569-6af9-4a37-a0ff-916641b0c971\nf6c701e9-74d7-4e49-9a84-9c152ead071f\nb75574b4-9283-482a-9735-67d31fc56cce\n3a1c9267-b30e-48a0-af7b-60f45ed2cd6e\ne600218f-520e-4058-b6c4-8b6f8c9b170f\nd97ad6e4-5366-4a2c-85d0-8a4d50a8f410\nd308a1ba-ab2c-4e83-9494-790ff4298a43\ne356b76e-027a-4eb0-baa4-1c64191fe1c2\nbf7b7af4-9c17-41b2-b63a-7091c2041c62\nf29d7b15-e9d0-4c40-a89d-140a15d7d275\n6d6e720d-910f-404c-bc77-bb179fade7dd\n92b499d0-31a5-4104-8d24-5933141a7a07\n7f371ba2-f9c2-4e00-8f41-05ef5b335835\n3b011b86-9f2d-42d8-ba5b-ce97837649ff\n832b0cab-ac5c-4443-a768-5a1d26309cd3\n1b099e3c-7896-4d3f-9ce0-ef16fe01ae30\nba05c9ef-a795-464a-beef-a93d89fc23a0\n3c662bd4-20ca-40d5-9540-de6bddca7377\n3132da29-bcc6-4983-9444-d0a488b2a3b4\n397d4128-e134-4e65-8e69-8224df0da2de\nf396316a-fd05-44a5-a07f-c9da1879d1f9\n522320b9-b7a1-4877-8670-2128b496db16\nfd84f531-b1e0-4dd5-81e4-583ca844df69\n63e3f679-f1c5-4e59-bf6e-d56229512503\nfe9d83d6-4fa0-4ead-a008-1836f8db5398\nc570bac2-d247-40cb-bfd6-85b6bee14483\n94e74352-9960-4ff4-ba63-d4e822516f2b\n43d9f3a9-e5a5-4a75-a46b-96395bf8b0a2\n4e58cdeb-fd6c-4294-82fa-67df768a9264\n55b1eddd-fb8e-4546-b2c0-bd11a807ec8a\n4018c11e-3463-4b7d-a051-7342b3fa0f18\ndd70f296-14ac-47df-bad2-ecc0b05b0d4e\n5cd63522-e357-4e14-927b-b07aa9983e3c\n26543515-e1a2-41b5-8e36-a7b935f0562a\n8e825383-f2a9-4d28-8f33-ade24a15df58\nde1c6a6d-42b6-412e-b521-5a6675aad4e3\ndd65e0be-5e3e-42f9-bb72-c08e938ff4da\n4c170f1d-7fda-4537-b6b3-e3c83f0aec58\n1b37ab90-4825-4fd9-8b1c-8a7e433ca609\nebf0aa9c-0a95-441b-9802-4aa5c9e9f2a6\n27899c72-507b-41bd-99f3-8e0a4fe3d721\nd5706b33-ee21-4160-b325-80714e515ab7\nfa0751f2-130b-42f4-bf50-0aa5e46664d0\n4969bdb6-c567-47fa-b800-4892993dba93\n2da2f5a5-48bf-422d-8dfc-74bb64f3d029\n0cd0ffea-19d6-4e90-aa2b-e562393c145b\na7ad28e4-4b8a-4d79-a28a-7026abdb61da\nb53b645f-6eb7-4064-87e7-ead5f64ceddf\ned5fb33f-693e-42cd-b8a1-7d6390fe0d00\ndcc38027-ba9e-4a69-b3a3-a97956f92d4c\n5c6de3b8-2a00-4730-83aa-dd8058f029f1\nbc5da91c-46e4-4c5e-a3e5-f6adb7d2a75c\n8beab13f-dd42-4f54-b18f-620f66505183\nd9290765-77e5-4df5-ae49-e89667a4b6f3\n4b91c3a8-75f9-4b26-87ca-6d9f5db978aa\n1d4c058f-3b3b-445f-9200-ec55309d382d\nf620ffbe-0bb0-4c3e-be61-2866be581099\ndc03cba4-b751-4850-b762-c9c84039dbd5\n91e8d237-f979-42ae-b44d-939666073ed5\n02f8dc75-5edc-4c8f-9aa2-e6021e8f0cfd\n4059cdd3-181f-4be1-900c-677dfb07ca5c\nc775a2a4-ebd7-4217-9d67-59f35a9e5ef3\na362cd61-1cf6-4856-9e14-a0be01ad31da\n49974382-3674-4c6c-9eb9-05b3340b3b83\n8f9f52f0-7662-4257-b29d-83edeab06c90\n3aa3f93b-27aa-41bf-aa75-5ba82264467e\n3a7b3456-04c5-4d2a-9eaa-4785ec31722c\nacd13e09-10e5-4a0c-b8de-8784432b6ddd\n27001631-06bb-46a6-a965-958156149270\n444d1b92-10c7-4df5-b3e5-6a25303a7d86\n9d6c0aed-2b7b-460c-a8b6-ba5efcb5a7eb\n73f5a153-54d3-4123-9014-80744cbc2cbc\n4400f487-9008-403d-b559-a8124ed7edfa\nf0e1500c-fe9d-4056-8db6-f85492ebc307\ne3071696-0958-4727-8065-38590d452a4a\n1270803e-7bf4-48b3-8d70-2a354e6c1815\ne9172599-5ff0-4db0-813e-d868f9065fe4\n05a3deb0-9048-47c8-ae15-ec2517a643f8\nbddb286f-a1cd-4355-8b4f-1b19e00c48e4\na3ba4e50-407e-45b4-b781-98ae9c214d00\n7a45cb90-673e-4e09-8878-776e049a04f6\n3c7ff081-2df0-4172-a462-149e83cde124\nfa053c0a-ff60-4a43-9e80-fb8533daa5ad\ncce95bd4-ef69-4c8d-865a-049595b395ca\n29516583-57df-4d4b-a0fd-51a1bf637521\nbda48310-008f-4b7d-9ebd-e89e067faece\n3b8d402d-a03e-4773-880c-3d8a43cf8bfc\n5089d34b-b0fa-4763-889d-31a228ba2549\nd2df4bc0-1ef5-47b2-8eab-b0b24023acf5\naa734e01-2aaf-4086-af9d-ae146bd39841\nbc194e6c-1449-4f72-a493-05090ae899d9\n0933fcba-360d-4dab-a606-a2f47d1092e3\n1456d66f-28fa-482c-868e-89572c6a7d2e\nded82ede-0deb-46ff-8b42-578d6c530ad5\n609fc2fb-696c-4ee1-b4dc-4b1b937a966b\n80a29321-a923-402a-9728-5e9507d9b37e\nd48e6692-c656-4b39-94ca-29451f9ab819\nac3528a4-8152-4960-96e4-de0d8721b6e5\n0e7e2abf-b3c6-4bd2-bd89-0e1d51a508a6\n33de8202-29f9-45b1-8321-67880f47e84f\nd6fdd1f2-c9d8-40ce-a8ff-8e0b4312d61c\n8414736a-daf4-44d3-94d1-6c585552ba70\n407e2128-60a9-4af4-b81b-4b1885c93672\n8106fac9-a15d-4e46-bd0b-fb2e9a93dcbe\n729da01a-7741-43ec-87d3-60e64a0b4aaf\n0326497d-ab7c-4648-be41-68f610d0b452\n414c6518-cc69-4815-b76e-bdcc239d5e0e\nf9f481e4-5bfb-4631-8d2f-233a0cdfc00c\nc1f60421-2b05-4d9a-830e-482ebb3fca43\n9c67abf2-32d6-4776-9c2e-a8b304163d7a\n0acb24c5-5453-41fb-87aa-d3129427d14f\nbc66bdaf-7b5b-4c7f-9201-aa915fa5a897\na8439778-8e53-46ad-b18b-2f4510c0f158\nf052f738-3499-43a2-a972-07543be0b664\nfc5d1551-11b2-4409-808e-d75144a96c58\n17425d3f-f034-4755-86a9-585e3d895ff7\nba815ad4-27fd-4156-b9fd-607a39a4f044\nf0f66ee9-5db0-466b-8da1-90c45b97b6b6\n89e1799e-d5d1-4a7e-bb9f-7568bd5779a3\nabaeead5-152f-4f8a-85f8-6976a53e27cf\n0a22b955-8549-4be0-9d05-e3ab262010cc\n1a78a22f-83ad-4f0c-96af-2046217cce3b\n4925986d-285a-4524-a0c7-c040c8ddcff0\n44c2d926-93bb-4d45-b042-494687c0fc66\n30a70ae0-74f8-4fe9-ad44-72675b972352\ne5029c44-1398-4a90-9263-c4f31748abc6\n626e8705-e77c-4d99-87ff-c038b3a44d0c\nffb016f8-355c-4a13-b069-bcd1564e544b\n17bcc5c5-70f8-40e0-a23a-5bde56c10bd3\n04558ba4-147a-459f-89dc-708513d11662\n130ca81b-31a0-48f6-8467-6354d2663697\n8eb57f35-aad7-4d20-810a-86fa3f89b04d\nc8f70537-93f2-42c9-a130-b274de873e28\nb06736f1-8543-43ba-88fd-ec8393705090\nb6ea2b2a-281b-45e1-917d-db369e6372ff\n1962f291-318f-408a-a830-525b475e5f2d\ne7adabb1-b1e8-426d-b60f-7a8b225cb605\n38519026-ea16-422b-87af-67828815b1e9\n1a1dfe22-b889-419b-b106-abea74a0dbe9\n36eee4a7-8ca1-4318-8d42-3d9ba9c6bc9d\nd6eab983-7d2a-4936-9b46-cbd62f444fbe\nf01ef94a-ef0b-4db7-8aa3-2d00895e38ac\nfeb3c4c7-907e-47a7-a344-b1c0615950f8\nedf255bd-cd08-4ee2-aa51-9ea3e667c76e\n279a6ebc-016e-4072-930d-4278b4a8a437\nfb84b0d3-c607-4fd2-a9e6-99b0e7a2aa0d\n016e0abc-84a3-4bae-aa19-df23fe998501\n51391bd3-9e4e-47a5-93ac-ace01b31e6d3\n4f7e0d69-54c4-4eb2-bc2b-12eee02912e0\nf672515e-e6a5-40d1-aba5-e075bb943453\nf6d7a0ce-6560-4fae-abae-9530d5d08d07\nd76cfcbf-83e2-47f8-a040-b71861318b61\nf3d256ba-ee38-4125-aa15-2848d6f5a55b\nd3e2f15d-5fe7-453d-9815-8b335f1391f7\n4f3ae5f8-33c0-4a62-9c08-d42727ac69ad\n0659f909-50f7-4ab0-a5d8-84fd7a63c1c0\n6d6ee591-c104-4180-a7be-7cf0ba73f76e\n166cf800-51b3-4bff-ab07-3df8254a80e5\n413a5765-6406-474f-8cbb-c0a80114eeb8\n0aaec7d1-d47a-4494-a9b2-fea505880cf3\n7963d26a-c6f5-45db-9134-c9839c0f225b\nde4522b1-7194-462b-8a1e-aa0a374fc627\na99e434e-269d-49d4-8918-c2dfba3fade8\n6f1328dc-42a7-407d-933a-3768384d4142\ndf0038cb-4793-47bd-b6df-c618dd1bd262\n2fbb3a8c-957c-4b34-a89e-0f2e6957c0c7\na1cd624a-43f3-4ed7-ac33-924248e6ed05\nd16cb015-51e4-4893-8235-5f2220dbd6da\na47ecad7-7a41-456e-b71a-eed48a6976b4\nc1019b67-939b-4645-957a-5320b2bd7cb5\n89823385-376d-4a01-8a72-4c4cd81e49ad\n37197cd9-332c-4cea-aec7-6028998c5ad1\n0726e17c-9a85-458c-8439-9e09f1838934\n5a1a6f42-f2bd-4167-b243-1b7e4c9c5a38\n51175ab0-9e3e-468b-8b9e-11042430dddb\n4a5490d0-e77c-4d98-9058-3b701d062ebd\ne0d7ec43-b77a-4265-b8bc-cdf6f27b323f\n0b33651a-58b1-46d5-b874-dfe4b22b8539\n56bec837-709b-4063-91b1-98d88a56a0ba\nc8283587-6eea-4c71-976d-f172b952a08e\nd90799b8-5eba-4083-a88c-242529d5668f\n732d9762-34d0-4309-af13-d4a1d0023cc5\n60a90226-7297-4f12-b1a4-a61dd456aa56\n521ee977-8c23-40e9-bef1-6eb2498c3127\n101e1703-fda8-4a45-8138-e0f3cf8073dd\na2cd4204-f9ed-4ead-afd7-164599617d57\nb311850e-edda-44dc-b351-fd04eec8d28f\n1b6c489f-cdfe-4e9f-9e9c-213d3837ab5e\n0c1155b7-b4f8-41cc-bf25-c5748cbe891f\nd4b147c9-dd3b-4fdf-a486-4f64375a1cc5\nd87f39ae-9545-4ddc-a6ff-980df10bfd16\n02635a93-8b76-46ed-aaa3-b5325c533cdc\n387dc45f-f53b-42eb-8add-299610f8612e\n8cb0fb21-2b57-4f05-af0e-7fa723ffa4d0\na64f76ac-f04a-415d-ae96-7e15c5adb4e2\n87055cfa-a2f1-48af-8b3c-f59d37ff7343\n0286503e-8fe2-4aef-a0d3-872f0d09d441\n269efe3e-2125-4842-b9ca-2d1c4655af48\na839fd3b-0b36-4bb4-a27e-5f216635ec6a\n2c31f58b-52dc-4790-a1cc-32689723be08\n134d0347-1cd1-46a9-b25b-607c81b560e5\nb93ca87f-64f0-480f-a2c4-8fc68223f84a\ne87134a0-a423-4fef-9422-3900e8143ca5\n1f1090ca-ef37-468a-9d05-58fcc6f9b35b\n2bf0e519-0cd2-4b26-bf45-d0f910d66873\n731c1752-ecfc-4a9c-9839-d9958989f25f\n5f627cde-9aca-4605-9295-0f987eca94f6\n1e234aba-0d2f-4b1e-80f0-af58eeb9fc53\nc548d62f-13f3-4ca1-9524-c4cec811b768\n3ca27740-fa80-4476-a1af-69d283374925\n0e511948-d914-4d3d-bad0-92aedd28b8e0\nea1d173b-1a9a-4485-b22a-7da86bb79ab6\n1c638bd2-535a-4803-a833-2c27e0593968\n44d59aeb-cdb6-433b-97be-1517a06ea9cf\n7ce30d3c-48c3-4bcc-b860-443c3ce4ab20\n44bcedab-2a1f-4125-9fa2-90a08876318a\n02e6edfe-ab38-43da-a9d5-904a6720cefc\n1a304b07-e26e-42ea-b84f-99cea5e6da5a\n774f75bf-b3fa-42a2-a9a6-ec4980936333\n514683d8-6fa7-424f-a62d-5d9e83e73d85\n0c3be96e-4174-41af-a00c-b97f3a750601\nba6d2474-f392-4fb5-afec-1c8928c19f13\nf4d64405-1a42-4646-8c74-1cfdcda96c45\n8fce4735-b23b-48a9-b4e7-99acd32d6b9a\n6fe7289d-b533-4214-8894-ba8a146e035f\nc54c8c98-79e5-4ce2-bfa0-9fb66d036b14\n43bec3d7-3529-40cd-bc10-552e8c013e92\n392efc55-4b0d-4c59-ab70-389d76169126\n2fe22152-6295-4447-9aaa-9a72e9af48f4\n2e6d17c2-0b44-4776-8ed2-b91164f36e9b\n59299934-9e98-434d-90d5-3f96a73da6f8\n8fcbb8a6-3016-40af-bc0b-75ffbbcfdb9c\n0cdc9826-9bab-427c-8b42-28b6b312ec34\nbf6d5dfe-4fe1-43e3-9432-1d425a50f4f6\n0c7f2526-6a4f-4833-aa37-429630737de5\ncc22eae7-7b4b-4abe-bc4b-cb80e8b86f26\n2ba062c9-09a9-4b86-b945-cea42a7e23f5\nba5596ad-9633-4ebf-8924-4c312e24b7d8\ne5d220d2-0f67-4c00-b465-fc5ed7f4b901\nc4fba329-6844-4abc-b3c4-8d16af7c698b\n3eee287e-b8b4-416b-a03b-d37712340ff2\nc56a43a5-c96b-4a77-afc1-5247f369bfee\n803f8dd4-9c05-4b18-9b16-e0c1c953a8b3\nb378b341-2778-4e3c-9691-4c2f41601796\n5c087ee5-ad0b-4c16-86e4-f334061b8895\nf410c237-e6bf-4012-a363-a6182e48055b\n557d8ad0-b6ed-4489-8f44-73e510bfcf3c\nd839d0ee-2c8b-4faf-8ad7-addb6aaf004d\ncef923e2-fdf6-4b9f-96f8-8cba476af7ce\ne6932d3c-5638-44ec-be00-627bcd163a23\n8703b2b2-51fe-4612-8b44-a0cef3c2feb3\n6f5e51aa-222c-465c-af27-0c773156d0c0\n5191fb9a-b839-4208-80e0-a6e99f160691\na2079ecb-0915-42cf-8d51-b96e73bb9da5\nab8a497e-ec4e-4293-b438-9365348eee12\na2f5dadc-b63d-4450-bc86-42fcb3b16283\n7570ea8a-3b9d-4665-820e-79b0beda2a12\n5dacadf2-8320-451e-8c00-981af736972d\n9fa589cc-91e4-4894-b3ec-52bad14f30de\n59d350c3-646a-463e-9a34-31c726ba6b16\ne008aa20-07a7-4dcf-b8f7-1c8cd22488a8\n01d5484f-4ecc-45bd-b12a-f2b4221a5381\n19f993cb-989e-4490-9308-9045244c4990\n9c118133-8d7a-4804-97e7-ea84970e338f\nb3af2bd7-2272-4102-9adb-ea190c66a9a7\n06fe77c2-6a8b-4942-a4fa-a81c45066eea\nafb86bcf-3e8d-465a-89cc-78cd89120da4\n5d1c99a9-6bec-49f9-82c5-36f4550d9c98\n5cf73bae-fc05-4bb3-bd6a-dde3b02b4362\n398e02b9-c8dd-4453-b0bf-2ce2e946b697\n4b23326e-340c-45c5-9839-61ece35acd56\n005455ba-e6c5-4584-82b7-209e3415b76e\nf3282514-f45e-4687-a2cc-1ccb5d65b233\nc504e85f-c820-4089-b121-520dc7f6b2ed\n458cb23a-f2cb-45cc-8d25-1fde666fd2c5\n7f543d4a-e8b7-47bd-9015-ec0439481cc9\nbf2fbb45-8a86-4a33-bd46-592d7c9b4aa3\neff91ee7-ebb2-4ba5-8a7f-63c570724527\n0cc22143-03df-451d-890c-02b53f8e0dff\n206d1e84-2e6a-4b79-b910-59bf4ef8d765\n4801b478-2daf-4d03-9720-bfdbc6ca9a39\nc65dc5c2-748b-4eb9-804b-cab775be062b\ndd139233-d794-4c14-9770-e23058cecbd7\n52470201-dd96-40e4-b1df-2f80d3c0d637\n41217332-cdba-4fec-b8d6-616aa22e56e2\n10e705ac-60e5-4afb-92c9-cbddad8be164\n98cc6754-1055-41e1-9d95-84735e9e37df\ne151f3a0-d1b1-4eaa-a710-3a16fd766175\n72df028c-743a-4160-ae3b-74aa3bc6d270\ne43619d1-e089-464d-84d9-abbf7f124589\nbcd8192d-ecae-400b-a741-bb4f049cd9aa\n9ba99f63-4b44-4d46-8838-65d35dc1f4f6\n4ddc4753-552b-4f71-9603-42930d2864ef\na709af46-2ddb-49bf-a440-d0968d4ddf2c\n315ecdbb-fff2-421b-a60c-ef4b09ba0524\nc7ac2b04-d65d-40c9-8ce6-d694e3036d85\n0dfd15c9-e29f-4b51-8654-7138ab3d471f\n58773539-8c6d-41dc-80cc-a617235027a4\n1d85db85-1c53-4423-ab3c-d78d776f3230\n95fccf48-45d3-4fa7-b946-8845ebcc0829\n8c3ba37d-ef85-4c11-8f5b-a5560973b819\nb19c38f5-e8bb-4645-8e26-cf1f9821d613\nc19d02aa-87fc-4397-9d57-820743bd082c\n1062d08c-4812-47ca-8eb6-ff276a752240\n87a913f5-b6cb-4b47-b528-c18c67df9b22\n2eb0554a-ffa4-45c2-b140-56074f30d11d\n539df58f-9420-4349-99b7-f2ca59f1a0a8\n76485585-3c44-45d9-84ba-f7f8b2ed6ec1\nabbb3843-988f-472e-9e12-ec0445e67d02\n33bd626c-b5c9-452a-ba57-d3239d5a7993\n3de73479-7c2e-4e9d-8b17-b751fe8fbd8c\ndd5155ea-1018-4125-831b-6d6e5cfac5f9\ndc107f0c-e4f7-46a8-a4c1-adfd986931ca\nca791318-1b97-4cce-9b9f-1feeb1090fc2\n3e9f1e29-5d44-4e30-983a-0a4ed0cbf0bc\nc0ef4326-b6ca-4214-9d3e-06c74830307c\n66558de2-7570-4ac8-aae0-8b63428dc745\n917f0e05-7311-49c1-863f-9d6183ea0147\n2076adf3-b0a1-47ba-bc98-44f3d0a1c290\n1d7ddc51-5309-4be6-b2e4-44cd6ba6fa6a\n99be6976-7586-4d80-aae7-2e4a81ab5132\n10d6eeb6-95b2-46d3-8e4d-aac5493188da\n1d4b5b9f-18de-43c3-abac-21c83129de0e\nb934eed4-d5d7-4d4e-982f-60eefc7fabca\n3c7642dc-831c-4fb1-ac1c-3ac4f106256b\nfb1eb238-b715-4e32-ac40-cd5acdda8838\n717dc04b-c05a-465a-a164-c03d38475cec\n5154f278-e908-4639-99d6-ec3d702dd41a\n65a20798-2db9-4632-8762-a11f6adc4bb0\ne769446f-6ee6-428c-bc77-e8cfff7d91be\n37667eff-c30d-44f7-b5cf-15989a876f08\n130d79ed-2a45-44f9-964d-ff6cbb3165b0\n6b7b65cc-d689-4d6c-9f7a-867d3d1bd63b\n2e95a147-f3b7-432f-8f11-04a21601671d\n48bacb4a-72e8-4d59-a038-74011ed7b24a\n607b3008-be61-4e00-9b46-a34a72be6fd7\n613bb1c7-02e2-48fe-bfc9-bdf4157f8b80\ne5b7d874-c2a2-4fbe-815f-6ad81f9d6a87\nbd89b7ff-75cf-464e-8aec-12218713d437\n29a7374c-b66e-49db-902c-95733eff06eb\necd698ad-2d35-4141-820b-7b5c13319635\n6be80988-63d4-4325-9202-7bf825dce77b\n44cdfe6b-8c66-4950-960b-4249668e8dd2\n7239b9b0-59ae-4f21-8427-33d3689a9d12\n4b5f8ba9-c3d0-4e77-997d-44078cd82acc\n60854e4f-215a-4337-9eb6-7cb4b5105b7d\nf6f5cb3e-3b8f-43d9-80ee-4c47cbfd0caf\n96fd86bf-382e-4197-adc4-4db3ca45cb3a\n9a65d24f-8503-4115-8449-70a8f9758091\n568e36ed-c7b1-42c3-b8a4-27bc7e3c36eb\n98d55bc6-b71f-4129-bdf0-985aa5bc1e49\n52a5cad1-b4c1-4b44-a6ca-00cafa77f70f\n976da4e8-58b7-4f0c-a21b-e4f3c7e66bc4\n0e53439f-2472-4584-9b40-28700c9ac25f\nc5d293a8-e004-4008-a8fd-fca233e1a4d7\n7af12376-261e-4b6c-9677-075386f39ea2\n800af3df-8a6a-4ae0-aa2b-3adb03007e5e\n82634cf5-3773-460d-9e6f-1b7b5062b00c\nec92481c-de36-484f-aac5-a218578d0089\n430eec29-b0fd-43b3-9eb2-be4aed9ee767\n85a7d890-9b0e-4858-bc69-0d47cc86204e\n25d8978f-0e9d-46a1-8773-1d99c8cf96c6\nea253ea2-d769-464d-a5fc-1892b94c990b\n797c8d5b-5222-4e98-b06f-30f2a9a1ca2a\na6f54a40-3680-4c1f-b2e6-06ee7750e81c\n951f131e-8f4e-44b6-a82f-c65d0f0238a3\na56d649d-697c-42ca-af42-5a292ea2189b\na91600de-a543-42f8-88f8-54314101f5f0\n1961ff70-ffc9-41b8-b690-891b429376a4\ned3b3cec-4670-4f88-a019-026e8ec00ec2\naa2f8227-8d20-4ce1-b838-a34dcb78f3df\nf00d2ad8-1f9f-4cd6-baf8-2accafbebe5a\n0dce988a-e58e-4eef-a275-bf44ec3a5661\n90de991f-635d-4e8a-819a-cd365d7c7f65\n36a73e54-c582-4cad-b290-7af944a14a30\nfae8cba5-2a30-46a8-9d07-c249b33b218c\n3344b091-d1cd-49be-a650-d5ed7766494e\ne6e98c4d-f86e-4bec-90a6-e971938e4162\n1301275c-a22b-43f3-995a-efd23f54599b\ne69e987c-f001-4e4a-929f-b1b355434841\nc8631e0d-3119-42b9-b670-d27b42e4f6e6\n521ecf93-a3a6-412a-9d94-8745ab977e47\n662c2dbe-f0e8-43d7-9f53-ce51abc21621\nc734fde9-9f20-4433-8ace-320864fd476f\ne1a89a49-3170-4bcd-a77e-262c054bc03e\na7c56ae6-6593-45fc-842c-0d77f63c5b8f\nc6249a42-4052-4779-a9f2-fb1848723b63\nc87b2844-2cd8-4076-afb3-d0afaf573eb8\n91d599ee-7c47-4f09-a14d-5a2fd5dd8793\n75d42251-02c9-4ff0-8aff-6cd07c3ecd37\nc8a78b4c-7ccd-4c4e-b065-ba779d5aa7ac\nb1abb5d2-dbc5-4566-a760-022959cb60d1\nc1d5de71-1f41-4bda-8bdc-cce14a55dc78\n958fe058-afcb-46c2-97ec-ffd2d7e1f578\nd147b55b-da7b-4ab2-b10a-62f2e6d5e788\n54e5c98e-0a64-4d05-86c2-f535d8fec6db\n18d81bbf-2be9-4432-9a96-d7402e433a5e\n41c64511-4ec5-47bd-aec7-65deae565ed3\n4d4dfe39-4d1e-4223-abc3-7dc67f53652c\n7bcf8123-a6f1-49c9-9442-5d272f755033\ne2342a7c-21d3-4643-83ca-f8637f6a0b7c\na5191958-500c-4a90-a29a-18ed2b5403e1\n560e0da1-11fd-4492-9ecb-5282fb552867\n02abd2a8-f55f-4600-8b7e-74ca5dc56f52\n4aab3c90-e774-4ed0-a192-01773012f005\n06d5fe62-9d15-4f3d-b147-b718e26cc404\nd7a567dd-4600-4598-b5ac-bee63e9c7104\nfb483f35-7a23-45ad-a554-2a2a20d1deaf\n41c921d0-303c-43ee-992c-c145a801ad12\nb90594a9-2136-4f24-93c7-87395161aa8d\n0fe86181-7855-466a-ad86-97e42fb09d22\nac414c6f-fb1d-4fb0-835a-1ceff3d44269\n7aa77d08-3200-4261-a74a-5706caa3b880\n862ad62b-e0dd-41c2-b94a-05bb7f83aab5\n8cdc1b06-f5f7-414d-9ecb-a95d750e2007\nef854865-14ed-4702-814f-2c56a7fc4df1\n00db60ae-0dfc-4c01-b439-6fc2cebed907\n8d646501-0194-400f-8fec-bdca8f9bd543\n3b358eba-61f7-4fdc-92bf-5689aef67ba5\n58c5fc37-5440-4074-b2ae-647a18e65a77\n427bc87f-09aa-4387-9b4b-322a8258afb1\n682fc288-21d2-4d61-ba52-8a1012301cd1\n40ecd2d3-dec5-4aab-952a-df127769ad02\n99e7896a-711e-4604-883d-d58a4ba42e07\nf8668738-d4db-4064-bc9b-40ed5bfddfd8\n806a77fe-be9a-433c-b2a7-00c9f5106a5b\n6ee9ed88-5aad-47a7-86e9-b5ace14ada44\n9f7b4142-5a2f-40bc-8c34-ed30d213a525\n47e5a70d-e553-4666-9230-711d416bc8b7\n94eeed00-e780-4001-b6a8-7642dbbfe0b4\n61e447f8-5cfa-4ae5-88df-209feaf0094d\na8ab205b-fafc-49ea-a0aa-58b8596c7d0d\n9616b551-37c8-4fda-b589-9b888582752e\n0940cb36-d92b-4376-84f6-c9c342f0623b\n0c64fc78-2a42-4347-8826-7a1ad922cc60\nd63832d5-3a6a-450e-bac0-eb57e83bf4db\ne96ee7de-c8b2-4875-acf3-244d418ea055\nfd99c774-3cf1-4cfd-871b-9770d2025d37\n37540ea4-61a6-4799-b965-a5d158fbce66\n78707dba-6d4c-4ca9-9d6a-d3d89cd9e0fd\nbbfbe657-b921-4cf4-8886-9f43607e8b34\nc4bea0ba-aebd-45e4-a4d0-cfa96cb7620c\n434b432f-cf31-4622-8b2e-3314e72855d3\n7116b1ff-550c-44a4-84cd-419716431cea\n165d9aa3-046f-4802-9f92-c56964f490e8\n8688a830-0a0c-4234-a544-e1c2f4e39f8f\n73b2d391-7530-4b89-955a-176098f2ee67\nb55f46e4-b75c-42ed-9074-8111d5bc811c\n815730c6-e8d7-45e7-9b19-6f81731e412c\ndcba18db-d1c8-452d-999e-e4979d72acc8\n3e73b2c1-3691-4e2d-8362-49467710df13\n8fe426d6-a9a7-4fd9-9579-ba0bcb40cc74\n8817908b-8ce7-45a7-b3b4-6cf12aaf4a6b\n29eb3891-8952-4684-8ae9-d8463c6f0d77\n9584dcbc-ae84-45c3-a145-c6a84c9dfc64\n24a9a4e7-f527-47af-b3ba-94e9426a92f6\nb112a228-2748-4f46-98d5-d7ad6e9c7c08\n4e243124-b476-4674-80ab-b11fd4c32263\n565682b9-28bf-4a6c-9041-5b20104855b6\nf1a77a0d-6caf-46f2-9c9d-fcfbbe5e32fb\n5dda8ee7-1659-49dd-a28b-543496820ec6\nb0faaf85-82a8-48e4-97a0-618727db6308\n19d15816-ae5d-45f2-b87b-4e5a382bd114\n71f9263f-d0af-407a-9ef2-64e4ae19bf18\n7aaaa898-6ae2-426e-8d6e-baf7bfcfd2c8\nc0ec3db9-6cd7-4e6f-93a5-8d47a080ed96\nd95a8522-7382-4afd-ae7a-55d209056690\n80711529-cdea-4095-89cc-d955b4bc2a59\n50c3a788-e8e4-4450-ad9f-a89ab9789d78\nc0085bf6-e83e-4f0a-be6f-432f56a30dcd\naca94fe6-1979-48c3-b374-9956fc6c1e59\n3666b187-841a-4cee-9f95-97cb2f4f5725\nf176bd47-3a3e-44bc-99fe-15dd99b9191d\n6b08174c-1316-4d08-93f0-d9aeeb8f017e\ne602aeb7-42d8-40a0-83e3-09305028d03c\n001cac5b-0b65-4167-8f02-6d1abdea188f\nd71bac8a-4858-4417-ae47-8c0e7cf791ef\ndbbcfb70-07c8-44e6-841a-c0fbcbfa792b\n84c32642-b3ae-4b00-93f7-3c2b83c528ba\ne535d20b-2492-4471-8d07-32e68db65f62\n283d83ce-20fe-43a9-a347-58237f7c0063\n5f9ab49e-051f-40bd-a881-2b0771d1f552\n761424b6-77f0-4008-9cb3-cf8240774e08\n2142e68e-64a7-44c4-ba01-8e77a2d1045d\n40a33429-5b6f-438b-a3fc-45cf0de558f6\n7c238a74-c553-4139-8140-a4c1037d91f9\n6432bf74-847b-49c1-acc7-1f7eb4530b94\nee7b747a-6a95-411e-b213-c1e2415ca2d8\ndf6c279c-0d10-41e8-a1ee-ab63400843d3\n8278dc8e-066e-40cf-94b9-e76b2afb310e\n91e0ee4d-2bcf-49c0-8d3f-95b315afa630\n8abbc672-e430-4808-84bb-e2d718b4a1a3\n16242646-d65a-4d60-826b-cb962bc791d6\n450fec8a-7963-4d3b-9a05-16dd33aa0fdc\n518ce1a1-50ad-44e9-9b98-04aaff37b53d\nc5b5fa31-3de5-4624-b28c-9b83c7a02eab\n742cf480-5498-467e-b1f1-318c47c44ade\nd01a8d88-efd2-4eda-95f7-c40032d8cd47\n164c1f09-c01d-4de2-ab5b-ca6ed43de0ea\nff94ddf4-bf95-45c6-8fec-03b7668d1cd2\n716468a1-8e81-48b7-8fed-3906716a622e\na65a87d1-8b9a-4c13-8107-6bdd56846f3c\n7e5c91fc-c961-4591-83d2-082e28bff11a\n745cc906-afbd-4a26-b207-92acd821905f\n917c829b-691d-4a74-9a58-df31121a13eb\n11f91b4f-40bc-47d5-801f-539a308e3b3e\n76281acc-3f9b-42a1-8050-094e670f8612\nd612a079-b071-4fe6-8255-0821b73990c1\nb0c6215b-3238-4db3-8e4b-ee798e3595b7\ne7f7f738-30ad-4295-8ebd-f9d4b66920be\na8cec467-ed2d-4f40-9bf7-9c6fefe3d691\n8f4a174a-2680-4eb2-9bb4-70805854d7ac\n93a240b3-0e37-4493-8ca9-a5200bc0ee63\n6867a019-6e4f-4778-ab26-4f0f3f3900ca\n136e1c9a-1e53-45d2-ac97-5bcb65889b72\ne970f030-922e-4faf-a13f-522ed9790c59\n83c211ce-813f-4b53-9359-55687e26c4f3\ne2205951-08dd-4599-a381-7eb771287ae2\n6c555472-03d9-4ef1-bef9-e274db2bc112\nb7d11032-5df8-4b54-986a-55b3349bf993\n3fbc92cb-7f11-4f54-b9df-354c796cdd0d\ncb75f67c-0aac-492d-8589-4b81bdd98b57\n95a54627-35b7-4e17-b098-c82e24271bee\n7c65d5c4-49bc-4b28-94b4-a6a8bda9a9a9\n82788f4e-8ca5-42dd-960c-9385c70288de\n43242f74-9f32-4666-a74b-067cffc6f7a8\nf875bbe3-09bd-4c89-bf90-b50d23f183fe\n8e66d6a7-12cc-417c-a755-e2d18ab2d471\n7527c8e1-4227-4ba8-a4ad-b56fced9013d\n6841cb0b-14f1-4e55-b9ef-3ba11f9e523c\n58715f95-079f-48ec-b54f-0425ba3a47f6\n0219320d-cc10-4539-999c-166f3e40b463\n1d2b5e00-6d43-49b9-85f3-6117a1054ada\nbc0f6b66-7ade-48ae-82d9-f0376e0a9cbb\n7dc45817-9c84-4685-8f73-da3f5c751d21\n7493d503-4474-4007-a669-4c6e0bebc2c8\n53b3add3-e6a4-4507-981b-e29cd58297be\n0e4d7ab4-0d25-40a8-8b73-5bb6d8889ad4\nb0c77193-8592-40fe-bdf8-d495c8ebaec9\n8d49afef-1add-4860-aba6-dea1ee9eadf9\nddeeba45-f111-46f7-93a9-85bbfba83d7a\n19cb3243-7a9f-42fd-87a7-919450dbb125\nb3fa688b-65a2-40e7-b30d-ed498a1eed08\n8cd9fa3f-efd2-48e4-966b-adbd97e9627d\nbfdb7075-e9d4-4a3a-99a5-f8da309160a8\n6490bbdf-636d-4a36-9d97-757eb92fcf04\nd37b5532-553a-48bf-84c9-e91073573488\nb356dfc1-0ab5-46c8-afe6-58268707c48a\n254d467e-5a67-42bb-ac7c-d5890e67fce6\n708f14b5-7cc3-4e8e-9af0-98fd50de8743\ne477c23c-c4d2-458f-af99-d26531e70f5b\n48995d73-3622-450b-b307-cb101f8bc1a9\nb025180b-ff4f-4164-941e-aeb2db32e471\na6d0480d-b25d-4bd3-9f6f-9da67c1a61b6\nfc708dcd-a4fe-4527-8905-50ebd520de22\ned120dec-7cc1-4def-9fb4-b3a3213ac12b\n8e818792-067f-4d2f-af23-0761918c7b23\n5ba679a9-a28a-4088-80e4-e056a5bfff93\na4079b1f-8432-4c19-93c3-55d61a42187e\nb9becab4-0b05-4f79-9489-2c3923311388\n5cd42d28-3d89-47c6-8990-c23ccf49f84e\na4a577c8-8421-430b-9bd3-5ffc58124ba2\n2b9f7878-66da-465f-88f7-83c08b15c437\nbeb2d8f1-e796-4c23-979d-677ac547827a\n176e15c4-b0cf-4687-8e01-74bd4c3b2ca1\n1d02fed3-0a90-4c68-a138-ffda2bc45135\n1097ec08-ff67-49d1-a481-dd5913550367\n4d06dbed-b8ad-4f4f-95b3-6914636c766c\ne28cf900-49be-4160-afb2-731dbf1fdc6a\n11c6d3ce-a6f1-4a41-9a1f-b2250cd21646\n9949e2dc-2132-45ff-a442-27a6f4f23bd6\n7dc54da0-eca9-4612-a910-9a893dad31ec\nc8ae5813-afb1-423c-8be5-83a3869bab20\ne3454f20-9c75-4066-bd82-b99b5612000c\ncfb9bff7-bdbb-4a14-b9b9-4e47647dc34f\n371a5cb8-ba69-44fa-89d7-2bdeeccacd5e\n21cdbfad-7733-4f2e-a40e-e4c5c0d453b0\n13752fc3-895d-4c90-bedf-97e78c079ba5\n3b67fbe9-3316-44cd-bda2-4d5627d7ac5e\n235909fb-dac0-437f-a8c0-f44d0a4eb616\n41ce5947-d71b-42ae-805b-02d2c8ee4d7f\nedad5c2f-fc1a-40cb-ae9e-b5f5c299b08a\n441bb717-3f08-4960-b6c4-df5869d8436d\ncca8fcc8-ae9c-4092-a252-0de45c203697\nee81b1b6-c4a8-4dd9-9e13-2dc66b1ebea4\nc4339d12-f20d-43d0-8877-b1640399d4da\n5813f1de-7d9a-4207-baa1-4a07ba98d94b\na449f221-569e-4a1e-8894-33badeffabc2\ne0ecea8f-729b-416e-8271-187f5624a58c\n30265c57-a3ae-4d73-8056-78d1ab278c39\n1fde5d8f-84ba-40cf-9643-3d42a4819a7e\nb48875f7-054a-4850-9653-e58b4dfe5d42\ne56f6b10-0e88-49a6-8536-65bc5a735828\n67433cc1-6c08-4149-bf81-bb340837d7f1\n9d7feef5-e9f8-4690-82dd-382bf60844c9\n25fe76cd-4a90-4c76-af51-6a37ea2413e6\n696ecb37-b54c-412b-b4a8-bd159d680daa\nf693a194-2870-4fd7-8aac-f6553adc6fa3\n9b00992b-2b34-462c-ab6a-cd1451011914\n55fbb06f-6a26-49d2-af07-cf879ec289fd\n96b9465e-b55d-41b1-adb2-a962d9571ba8\ned9040b5-67be-4224-9644-71e318d92e7a\ncaa7c976-10d5-4c2f-9730-5937ac8a7548\ndb4013d4-a7bb-4cbf-b1e5-c30a1a16f3c7\n7eaaff45-e758-4bb7-969e-03483a75a639\nfbb39e54-547f-477f-a5a9-853eed404128\n08ecb81e-58db-42be-86a7-714753cab009\nd7905c21-0fad-4277-babf-f4770080fdbe\n5e68e0d9-ef3b-4aa5-af3c-f9e239757208\n47463b4b-1c93-44c8-bebf-58166df4c031\n2281d08c-2f70-4e6e-a0c4-1ff3c6bad0c3\n1b05773c-aff5-4e9f-b2a5-09fae4ad1fa4\na674c4fe-8e1d-4759-b723-46ae6c07739c\n5570e84c-14c8-4853-8dfc-264fe22083d6\n2e1e7d2c-01a8-4030-a9a0-27095753006d\nabb4b515-5f15-4907-b4f8-2c45f828476e\n63463e97-c337-48d8-b5ba-ed3578c2fac0\nffa2669c-33df-4848-b3a0-5a5da99eea25\n008c46bd-af81-455c-8796-f8eca67a04cc\n29c4acdd-e907-4bc3-846e-e72c6abf385f\nd024eb5d-f299-4133-b56b-d0863c685620\na57b9d02-a08e-49c6-8840-da5f7fac25a3\na9c42cac-5782-4f24-85d1-ca8a5c80ee22\n4fc9a871-2214-4d92-8ccf-d95468ccd65d\n086c6c20-2bb5-48b3-9df5-a7d069037b40\n25c9f393-03a0-47f5-a85b-796705f97ec4\nfeffa697-e1a2-46a9-955b-d6f0ec64dfde\n5de1d190-2588-4e63-a964-c16c79a0e16d\n73281df7-4777-4d38-acd1-4e99c1d42f8f\nd1cb7a0c-52bf-4bc3-958a-98573024034b\n81834a4f-009f-4237-857e-ab9f5cea8577\n16471241-ff42-4120-9403-f716a255fb71\n18589909-0ae5-4639-b0ae-51786a6580d6\nee5e3a37-1e7e-45d0-82d2-168dc031bb28\ne06f6634-4f03-4e65-a2b3-a9b5e9d7ec49\nb9a4a2c3-fd93-46e6-a63a-b8c6dc8528c9\n411ebb04-b24f-44f5-96da-7e488c5a09f8\n3fb0aa7b-876b-49e7-af24-7236467b647a\n4ef757f1-3049-4f3e-9c18-d9d278532ddb\n453866c5-99fb-4330-95ed-dcb1780515e3\n7475807c-aa62-49f1-96ee-b984739ddd0b\n1ee53cc6-1cdf-4e28-b4eb-1722021191e2\nbc5f992c-106a-4c5a-a760-1a422fe82529\n92ba2527-457b-4972-a31f-207312de8a52\nfc1d79e3-f314-4748-baea-e22c8896519b\nce08727d-a362-4fa6-9c2e-2e9d989c27c4\n7b35bf26-cac7-4ffe-9b29-302275d51eb2\n118b5ebb-a19b-42d0-bfcc-8dd73e9c8ba2\n53b4baa1-a56b-4f67-bc55-7fefadfdad11\n7aa03498-13ac-4af0-ba33-ddb59436366f\n7161283d-67ff-4bbb-917c-026699f7a5be\n608ebaea-32a6-4f05-8cc2-06f92e9312cf\n78d2976d-306e-4fc2-92f7-9c36b84dc76a\ne2eca06a-0960-410d-9e92-9cc31b999c33\n87e962eb-a068-4f17-88c0-e59999298f5c\n47fbdb79-3b06-48b8-988f-c8e74d1b1d5c\ndef46d09-64b5-4dcd-ba2d-b15526ceee21\nf6cc2c31-a6ef-4629-a68d-d732ddfa9325\n66a673bf-49bf-4e03-8e4f-67deb129d7c3\na049acc3-fc06-47a7-8ef5-876002d98ddc\nc8eaad66-7098-4c01-ae1d-2216e8a1913c\n0bee2c52-1be0-400d-860b-e012be486edc\n953a39b3-aa2c-4572-a7e9-267f453bedbb\n0c632350-2f28-4a42-a061-f982630f34e2\n969cd9cd-8d9e-4736-a9ec-8e5fa0e32aab\nc1c5ccd6-d37a-4058-b701-8fc0fc0c4f01\n8c7c2f76-2b36-4098-a83e-ca19eb8bed64\n38d31dc7-6277-44ae-8f62-e5ef5d5fc5de\n87746d98-d445-4d49-bdaf-183a7a9b0299\n33a85c68-d9f6-41cd-a52b-43b9de517e27\ne8cb77fe-0930-4761-830e-42f92caaab98\n8c6a5568-149a-4875-8af6-191d1d7441cf\n07b69666-a38f-45b0-a387-41de74511561\n4b6d9049-a6de-4379-bdea-eb77cfff0144\n76558987-bfd1-4d2d-b775-4c1a519af787\n65360737-9c78-482e-90b7-7556a1bb0eb5\nab475d89-9fe5-4014-87a1-12776985209f\n239e6b6c-a039-4861-b0e2-f64007eacee1\na1e103e1-9880-4fb1-a705-52b9a00cc100\nf5a78f3a-862d-4a2b-b89e-729efea3471a\n14823a01-7ca8-4ef3-9758-4c51ed613041\nfbf49917-d810-4906-97e2-59234eb61f18\nf829bcf4-5963-4621-9a03-98506bcc971f\n1974be74-8ef4-4a80-9344-25eef961dccb\n799ca5b0-ae35-42c6-a30c-9e9392c7d60d\ndc25bc18-2dd5-4653-9535-b48aebc24282\n64e58c97-d77c-4018-8b22-900e9ce98b34\n44ef3ad9-6584-4b6c-b89c-1865968b7532\n0c63e5ea-4990-4fce-b22e-ba62af94a60d\n2db6abd3-7f4e-4027-9712-7433474665f4\n494a1f96-e7a5-4cbb-9eff-44ad268b8e85\nc019813a-fdd0-419d-965f-59c0889abe6a\n5da9e1f0-9139-4417-851c-ff3f3442bf68\n19af3014-86f0-4476-9dcb-a4ac271865da\nd476547b-18ec-4286-9301-76de3a729ce7\nb9337436-329c-4c45-8060-499797ccd9a3\n73f26304-ae47-485f-bee1-a27fb1b04628\n46d0f852-334f-4b42-ae83-8e88a74d6b5b\n0578a54a-6349-4f33-bf80-d85d3576c759\n3175804f-8a8c-4711-a51a-8e11b270e9ef\n0eb00781-89c4-4f69-a856-70a38869cac8\n283f22bf-df23-4d1b-8f9e-8913b28a63d4\nd03fd592-b6cd-4772-9a16-84d74d2e2830\n369c2bc8-7881-4fb2-93b4-b82944e32979\nf6d7f109-9401-4a70-a6d9-fa220d213f82\n589b49ba-aada-48b1-8034-08d5740e44f7\n50b830a5-572e-410c-8e25-331de5f618b5\nbee9be74-163d-4e6e-a3e6-01066af3e3ad\n96b934ea-8757-42d0-adc6-6546f261869f\ne7a852c7-3693-4b90-9841-935a910b0935\ncfc2a1bd-1c3a-45c5-aa9a-42f497891379\n189d92c1-b795-4fdf-830b-fa5065ea833a\n435e778e-e292-4a16-bdc9-14b941f17944\n7df892b4-095b-44b5-84cc-1902c044ba16\n3ee7d38c-d467-435e-9131-8b7af3f92163\n85eea98b-f045-421f-a101-5b694ac25e5e\nb4f903db-1594-4f32-8422-d2eea3902f51\nbe2b2004-96d0-4996-b631-25e5f451fe8d\n17fd9027-11e6-4b1d-95a7-fbcd8636a6ee\nffaa9ba6-4748-41bf-8d33-e0f8c47d3cb3\nb8847871-0bd3-4d9f-8a19-14e1ada695e5\n3930922d-fb51-4355-847b-021b7daa34bc\n088b3d75-fdc7-41e9-ab8b-3116a87de345\nc5d56b32-beda-4b08-ac73-9617b4aa586f\n5aee09f6-15dd-480d-8d53-85d81dd582db\n399b935f-6559-4ed1-bf6d-965da4a4308b\n11b9924a-494c-4cd9-b4ec-2ac6cba0feb0\nb08f8a28-f145-4cb8-bb52-1b95bff339a7\n93f08da6-97f2-4039-ac0d-3042d9178fed\n49ccb002-a2dc-455e-9bf0-b16c6dff87c9\n658dfebb-858c-40db-a9ea-93600c170c79\n0f2c5f77-a2cf-4c78-a88e-d11404336757\n8813d1c1-ade4-40dd-9890-208d388f723e\nd3cf7054-ba03-4d3f-b2a5-160cdfe0a54f\n7c54c3e6-99fc-438a-997d-fa9ea282f8eb\nd0d58ec6-a6f8-4a5f-85fb-813cb85c7e61\nfc2819af-c7a6-44fa-936a-27d644600eff\nbba9f9f9-07a5-4d37-b7f8-58a1e086d06b\n660bf59a-b76d-4349-b769-e4460b172955\n06fb393e-8c6f-4e85-9c3f-0a6194148021\n31a35601-8923-4e97-8422-a9d376f210a0\n4f5be9be-1d40-4afd-a88b-102baa76dbed\n31124ae0-4551-419e-98db-758e75378564\nc7e0d9df-bf2a-4748-a918-73b7301a9b2d\nae0f7ed6-efce-4e13-b80c-ace6555bdad2\n8777f7e6-3952-4068-8e91-92ffc1381927\n8ac924f8-3070-428e-802e-ee52c37bdec5\n4b2d664c-b878-4bf9-a951-28404e2ab8cf\naae17b58-1ab8-4775-ac5d-ea3e2f195757\neab1c21a-acd1-478a-8abd-1f313937d08c\n6c215b3b-2d79-49a5-b28f-0189af8cfacb\n46f98405-486e-4fc6-93b8-1bc56124ebca\n9cdd0f6e-7004-4ca0-b92f-316c46944189\n281e2a6d-ec43-4948-8864-65509a1c7daf\n8fc59ca0-b8e4-45d8-ac91-f6f2aa21d3ec\nd7b4348d-2c34-429c-be92-853e2673433f\n3b71423f-a625-454f-800d-651418fef8c3\n919fad14-d907-4c96-9f00-46f5b11865d1\n8367d429-bbc5-4006-b887-1da2b0b51111\n5a185dd7-2e00-4eb8-a4d4-6ea058e6b2f1\naf30ca36-7b04-4f2c-b3e6-5d738c077276\n4570bcca-a293-4d34-bf48-e60a02c39a45\nc1d34495-97b1-45cf-8d5a-ff095ca227b0\n1a35ed94-4f08-452a-8f42-949a4bde4eaa\n83f60a2b-be8c-43b5-8304-d94f59627f20\n9676260d-cfb4-414c-b4a9-f1f549d3618a\naca5086f-18e1-40f8-96e9-740e05008b46\n15cbdb55-18c5-45d1-bc4b-3ae24104e883\n99420469-31e3-42cd-a1eb-c495c9c8977f\n52e46070-8e44-465f-8aa3-3e1046adde2c\n436f3c21-6fb2-4a12-b24f-581f09d74e40\n2ae3ae15-7844-43a2-8e46-3bf552f4c310\ne8c6b1b4-6748-4571-8db3-80bda4976f73\nfaa4f35f-5059-4ae7-92b3-d6a06bf16acf\n4a88f035-daa1-4a51-8a50-39efbcf93f49\n753c592e-6635-4fa2-8b76-202ab5d39668\n8c4970d7-c2ce-46a7-b1a0-d00333d11c16\n53c41d25-a34c-43c5-9f90-41e9747d474c\nddc67964-bf6f-4f9f-8039-9be49e7adcf7\ndfae9abb-1354-4a08-9ddb-968142ae77f9\n7ea45e24-89b3-486c-9575-276f669c71c4\n3e454e03-4d50-4b73-a69b-6c859668e4f2\n4e8fa2a0-8ef9-4bb9-b99e-d5c8daf6f68f\nf2516b26-4f6b-42b9-a9c7-38d8d24a3809\n1add2074-84d0-41cf-8a15-97b7326dc222\na4377a35-2eb9-418e-901e-815c711670c0\n0b5948e1-2d50-4f7a-b1a3-f83c406d3646\nc7a1a855-141f-4801-aea5-7cd1de4e1fde\n117419cc-06a5-4d87-9c87-58fc5b76ed3a\n8bc79a31-1062-48d1-8d90-8da490986ece\n8fdcc795-1c41-4505-b5b2-2c852fe7e808\n4002c648-738a-416b-b30b-2213a45dee1a\n2a792d15-569c-4787-8076-5292e8bffbe2\n5a0327b6-57cc-478c-aadb-37840f089d52\n2d5ca1c3-944d-48e6-abfc-db57c3d6f6a9\n27ef4cec-7e8b-45cf-b82a-5381135517ed\nc6aa5591-f285-4242-9833-c6886eaa21aa\n826cde09-e494-4e25-9343-66b2a393fc5c\nf938cc1d-b267-471d-b0ff-6434c58d412b\n1994c56c-1a87-467e-a8e1-c108d9f65e45\n432439c4-6569-4fa4-9235-d523efdbe043\ne032c78d-4071-4b47-8cf6-ae0f4caaeaf7\n22c89fc7-6e78-4fe3-9657-de99017766b0\n202ab153-74d4-41e9-b480-45a97c85edc8\n63d207e3-c073-4195-9218-a694d0499c70\n8cfd0901-9cb3-4f53-a8ef-4cbcfd3b90d3\na8a6c403-add2-462a-a865-5bb7a3b172e1\n0aaa5ec5-864a-4b74-b5f8-4fd9aae33919\nb9e21f55-ee0e-4e07-be4a-34bb04194150\n2ca8f6ed-cdb5-4f87-a87d-b0bb0ecdeb53\na3ec80ee-0bda-4f50-b6a2-2364765903ec\n85aa775e-6436-43cd-80a1-ad581a4fb187\n8893e831-ed3c-4818-945d-fdf5bb9fb098\n74380116-fd24-4a92-b5ad-2e89327c6b4e\na23e0bf5-990a-49e0-8935-5a29a88f3f80\n216ae187-7d2e-4ca4-9fbc-cccffdab6d58\n06eac01a-4119-4e3f-a6e2-c56471ccf546\ndc41bdd9-0334-4c76-9c13-0248950768eb\n85929825-8ba5-4de8-8bba-495d407381b5\n5ad29e51-b564-4e82-9de0-89003906ae35\n3ee443b3-ba13-4d17-81f4-ba63ab7649b0\n0d71a135-02e2-4b96-a2db-5d6a26f12ee5\n3ad68e70-5a1c-49b0-950e-9ed63b876357\n4a4062ee-01b4-413e-a033-927798c2fb7d\n692ad675-27df-40a6-bd53-6f032c974c79\n4de25cc2-ce7b-4f2a-a900-637e780a10b5\n56575fa3-9d4e-4528-ab99-ada0dd065910\n94c394d4-c187-417d-85e9-16e05d41e4b3\n49c8f099-a5a8-45f3-96e1-eb1586efca20\ndb938a14-8bbb-476d-b714-5b1b3b7d3b4d\n5c02cf81-860d-4622-83b2-4516a400af99\n9b4ddd17-d51c-4a3d-b083-e56160eda35c\n0804aa40-ff1b-4f21-982a-4d72805d5c02\n3ea1e0b9-ffff-4934-b61c-4010d7e5a515\na3582bbe-dc2f-4138-8261-a0f6736a3e4a\n632bcb5c-a663-4846-8dcc-0435215d66ee\n10d4e46b-3266-4c2e-8c7c-10de916016d8\n4600732a-e14b-46b5-b86c-2839db6135a9\nbf11842f-e99e-48a4-a00b-65c0aeaaa0ee\n66329c17-3279-4019-a49e-5da99c9dcdef\n284b53ad-2fac-418b-82f7-ed4bd3659a46\n84f908ec-c4b2-4702-833a-bc65594ea939\n28a1051c-ee95-43d3-9fcd-89cb954531ff\n9d95285c-01c2-4a68-bd6f-395a3938fd61\nbb784e0b-b7e4-42f6-afc2-87d5181fe4e1\n323fd92e-7e50-41c9-bee2-a8b90df49bab\nb8ad0a42-c4e5-4f70-b4a7-05fc45270329\n3313d811-277d-4846-912c-ad6f0c7abdf2\n5824c737-c319-40b4-bb5a-0890e4c6783d\ne557bada-1dea-4435-a39e-78e3bcaf2b98\n7ba2847c-a87e-4f65-ae7f-52097b0e67f8\n1362c77f-826a-497f-8959-8cfacda7ac57\nf8e9e3f2-ef4a-4237-8094-baba694dfead\n7d74ad27-21c0-4bea-a91e-0a5e0b5bcfb7\n394463c3-6541-4ad7-a8a6-e18745de13b6\n1941b40b-e61d-48f3-a25f-36ba2db62497\n336b7777-6b40-4bca-8c91-5af78f2ea72a\ndcb0f17b-a65c-4100-b55a-9463688cb93c\ne4ed0afa-b2a2-4997-9b93-c6b569d31e68\n41d79f29-b842-4377-9d76-a1f3000319a3\n27b2dc7c-f93d-4f58-a90c-8c106cf10198\nbb95bcab-b191-4991-b99b-bfa929402fa5\n224e4282-2232-40f8-8e94-5e4d10bee250\na50bb91c-7d94-442a-a873-7db3735dbe9a\n445c7cbd-1495-4b07-80c3-a8df1862c0e0\n8dca3cb4-7f92-479d-bfe0-06b94b445c53\n7caf7b2e-5ddd-4275-b1b7-b7d1abd689ea\n2e6674c9-0fa8-4af2-8a53-d781d2fd71a4\nde34a5e0-8fbb-427d-a522-c21005f376cd\ndee4ac1f-b0ba-4a81-b420-72ef960da9b0\n1e943231-dc47-4078-94a6-98b88b55bfc7\n0ccafbf4-b43b-474b-bb20-be092dbd0c1d\n8f0d7e5d-ee2f-4ba9-b1d4-dfeb46f01367\n7bfa1e1e-0b97-42f9-8c45-b081fc4a9941\n48766a00-4cd5-442c-9848-ac7daeba1e1e\n3ecb7b92-1237-4de2-b883-523d68fad32b\nffcac773-0cd5-45ff-9803-fee399313b95\n1d7a2b71-50e8-4d64-b774-cc47cac51665\n6e28bc90-2726-4209-85f7-4172381399fd\nf9b24463-84b7-4f19-a7a8-601fdc973de8\n5334675f-b2eb-4aca-949a-7b4a89fc6afe\n2fe5c0b5-00bc-490d-80ba-b67a056a963f\n3fc06b22-1c73-4633-876c-192efeb7db06\n84896661-c58a-473f-8664-48071afc51cc\n4b985d4b-f5b9-4db2-af1c-91f4fc957ab9\n030bf03a-eefb-442c-84a2-9be7a2680650\n00dbc027-54db-4c6c-8eb6-af85c130ae44\ne67ce720-fb3c-41a8-a59e-fd531d01546e\nd978a30a-1feb-4095-a123-0626f4b5331c\n5944d0b1-854c-4fc0-a4b8-ea84d917a6f2\n62219d72-3a3c-4f87-92b7-347b1d9f874e\n50ce4ff6-7f3e-47c9-8f2c-8daeae7f523f\n4671eb7c-d39e-422f-a565-3307a11ed67f\n04a7156f-3764-46bc-a8b0-e133fc49c70a\n17a8476b-22d5-41a7-b9ef-57397830683a\nf39c90da-5d71-4872-91ae-b15894b20a8b\n5be8428d-b645-4aa4-ad1c-bc3ac62d3baf\nf2cfb425-e2f4-40c5-89fb-df96560049ff\n3d6605ea-5e48-4b82-8085-a0e1cb82c332\nc5f44277-4adc-4a74-97cd-aa0018bfd9ab\n3e80b4eb-de2d-44f5-b9e1-2ba48f83aa1c\n65aab08a-b9fe-4116-8d72-d4c51288338d\nf23915db-bb03-490b-98a8-dc54e6644372\nb79a647b-9b27-450e-a1f0-5c59ba8605b4\nb846ac00-4b99-4332-8d48-c767d60c51af\n61e25d73-8c8c-4b07-bf99-034a5efa738a\n08efc48e-ec26-47de-8cdf-8669942261a4\n22dc0cb3-031b-4a57-8d6b-47e6d4abeaf0\n60057ecd-30ae-4cf2-b86b-23a69b56d0c1\n5247d6a6-f540-4001-b877-60cfb5ec3986\n5e576364-4f73-4c4f-99b9-33bea2782298\n7f9fc339-3bf3-4b69-8d53-996a1a17c6d1\nba3d5334-8465-459a-a445-237beebf1f7a\n414a0e1d-8d8d-4721-9c68-fab82352c379\n359614cf-2684-4d78-9f82-9e2be7434027\n66ea2a45-eba2-4224-b298-345d04550feb\ne871ef49-914d-4479-ba15-c48524dab97c\n2899556d-250e-422c-ae2d-4a4f255cd834\n1442d835-e298-41ed-97c4-3eb975332047\n593aae16-6daf-460b-b76b-5bebee898e01\nf9853ea9-bf44-446e-9938-bdeb8f897b4f\ned71067a-74ac-4f6d-8b9a-eea4a898979b\n67c9ce5e-7311-48eb-8453-05ed452acba9\nb4323d24-4d79-47a2-9d5e-1c721a4d79c7\n38fca841-d18f-400a-92aa-0efd166a9d64\n4476b2c9-4df8-4441-aa3c-8d10afeb0ef4\nadbd993e-1adf-49b6-aa8a-dd4abcdbf39a\n786b40e6-d04f-43fc-9b0e-624d36bffc1f\na43cd666-4ebb-487a-b126-57319c93cd08\na8d6aaef-3c1e-41ce-84c2-62acc451ff68\nf86f46e1-7162-4c43-94ec-1e590feb8e55\n692837fa-9e30-4d38-a382-0e119bd2a3c3\n9a498f12-a7a8-4e78-a1ea-205e88b5b8a4\n6df8177b-9a8b-4f6a-bd75-deca3f6d6931\n8206e89d-a740-48d9-8693-21c3af7ee38b\n274af770-f4d3-4360-ba93-cb8634c34ec7\nf6b5ab4b-a17b-40b6-9a83-51f92847a24b\nbb44c3f3-63ae-4a31-9185-0e85ee6d8286\nfa47dd53-e5bc-4f13-ae0e-d8200b54fe69\n4ed6aa97-85b3-43c0-9368-daf266a5beda\nfb3b504d-16a3-4a3a-bb33-2f705392dc7c\n422fc5e4-4a81-4194-a6f0-727b9a59460a\n83eee717-2a42-41be-a619-fa1aa86d9dc6\n7c6854e6-ea63-4b9f-b6f7-db17118cae3a\n6692f484-7f52-48bd-8bb4-608a13622b5b\neaf48228-ae2c-4a55-b24e-8dae5a180014\nd1363144-692a-4fed-9f11-5b56fd7a8498\nec686b9c-0e19-4beb-966d-bfe8e9e8fd3b\n757a5d75-d19e-4315-be99-b7d3f5c26292\nf0922036-fdd1-4de0-99aa-a4c92f577bc3\n7853a8e0-7e96-42b5-8230-26872fd01ec1\n5f4d5809-4254-4836-a38e-1bc79dbf92ef\n83b1fb81-166a-4c6e-ab64-5c168dedda8a\n079eeabe-2228-4e9c-a6d8-d5a15616bb8d\n17222b7c-237e-490c-bdc5-8e2ad3df6f91\nc97406e9-86d2-4762-a512-460ae38abad9\nb0115684-6dff-4888-8197-2a3b350bdafa\n276b144e-36e5-46c0-9876-75842b2589d2\nd2c334e5-8cfd-42d9-bf8e-4910aefe5dff\n916654cc-6074-4467-849e-30d8d5209c90\n70d01caf-c4d2-4f96-b2f2-9761787571ec\nab6bb0cc-a993-4f7c-ad0c-860b43a378d4\nba9ed587-0e25-42ef-bc94-b1d8fb0c3642\nbf032ddf-372a-4f5e-826f-1194883066e1\n217d1d70-81aa-4468-93f4-4e8b7fef2f7f\nd9a9d9d3-99ef-4d66-817e-fd8d7c9fe4f8\n0a2d3fd9-381b-486b-9539-0ad8d14cce70\n3d1c9170-37fd-4123-b8e7-18ac5441e2c2\n85d1653c-c646-455a-bb7c-3cc89a28a2a0\n024d1f5c-4fc6-435d-bd50-4eba4eaf2c6b\n4533c935-8935-4ba8-9105-f6c8312bb590\n2e78bff4-0fba-4f20-bd59-0428a6f5f65b\nfc12fecd-a61d-4d77-afb0-b8d2391383ea\na0a928cc-9851-4bff-bff2-93098b50caa6\nc781a4ed-2171-4e55-9bc0-9e7cdf09bd04\ndf262da1-5863-48e6-9980-602303f83036\n67e04a2f-c93a-486c-be2d-1785b117fad5\n3fa1cc79-2229-467f-a22a-9536e2646ac0\na7eb68d7-d2df-4515-8d1a-4c4043576dd5\nf63c1bfa-feea-4f63-8d33-ef42f73e1bc9\n5ccc8e33-12c1-4420-87c0-ad92d2ffb950\nb526cbf4-c891-4278-a61d-7babb3c7f12f\n501f41d3-4679-4f9f-b53b-fb7dd9853a9c\n200783f0-7c07-4c57-a6ca-b8b865eee8ae\n143225b0-8d4f-4f55-9cb0-ea795c0d2c59\n643a0156-54e8-4130-921c-43ad273b1d8c\n3e5872b7-882a-40b3-9567-6be4f5909515\n914fbeff-7df0-4d54-b834-c793a9a4f1f8\nc92c7ce1-5995-49c7-82e7-39745a74af52\nf2ab3ab4-b19d-491b-ac6e-001f66ecef80\n3a908db4-a562-43da-adcf-3037b006eb16\n60342fb7-dc9a-4079-a72f-48b8692f637b\nfb6649c4-8b08-4960-a0a3-ec8713387860\n2cb5c40e-8c23-4921-84bd-e765b9668814\n960170d8-a90e-4d38-9a2b-5f3f150ffaa0\n591d167e-20f5-409c-bf44-5d03f35b83dd\n1058b7b6-2d06-43f1-beb9-5a248ef4dcfc\nb812c3b6-a306-481b-b0a6-2b4328e0fc28\n7ca7fde4-55f0-4aed-ba35-cb8502cd9104\n14da0842-22db-449d-863f-e5b03440b857\n6316ce6b-45a2-498d-b44a-0debe7084277\nf59c492d-4ae7-4b56-97ad-7c424528b7ef\nced2c45b-a4bf-49ec-86ec-c781a58bad8b\n0fc738d6-7854-4e6f-be38-471b091475d6\n4dba98f1-6678-42d6-a634-6784be431fef\ndd4886aa-7d74-42b6-ad5e-4a9736155a5c\n6873c33c-e6c9-4690-8372-1a6f865d3b6f\n3b11b357-9a8b-4b0c-9abb-dbd149e89554\n219b1f4b-a91d-4594-b86a-9dde4075be23\nc3224f07-3f73-443d-8c21-05a381238992\n24a7ebd0-744d-4ecc-957b-92ec2f7834f6\n09fb3412-b4b7-4a9a-a968-16e33607961a\ndc23e73a-e6df-4ef7-9788-59f1b07c90e7\nbda92a10-4bd3-425c-9970-22ba6c97354d\n7b0a88d6-b985-4b02-a7bd-901970b81b0c\n9f674b9c-3127-4330-b620-8584194db8a0\n89cdf3c7-e978-40a4-a3ea-06b732e15a6b\n78bcf087-8721-44d3-a8ac-5674ee6d17e9\n50ccc3a7-3479-4a7b-a1d9-85afb1dd4da1\ncfeb01b4-17eb-469b-9c0c-b2f00a981f03\n98322d6e-c9c3-4515-8732-27e578067043\n76f7d58b-6699-4456-bb66-4cddbb49d20d\n061a4235-b3a6-4ea7-ad02-eb0fa3df9d57\n529040b1-78a2-4797-a083-61470adbecb5\nfb847a6b-f09f-4814-b7df-eb8373f92a82\n3cf25539-f599-4116-b330-8de9021b31f6\n664e3806-cbe4-43a8-94ee-c555b0689f9e\n16c1c57a-2e9d-4dfd-8641-147de5199cdf\n828f4c79-7ad2-4103-a6c1-c1e455978956\nf4044c19-b102-4470-8f8f-80d781a061f8\n78d0217f-22ec-48bc-8659-6927e5df3002\nf990fa15-29ff-42fa-94f2-a3f1a00889c0\n347d128c-8ef8-41bd-88b1-a79cf38ef1ed\n5b2dc8d0-56a7-46f8-8ceb-fac2cd003b86\ndbd799fd-a9d6-470b-bd5f-00b383b13fa3\nfaa7df1e-236f-4cfc-a14d-2e681629ab89\ndc9d94a5-b56b-42a1-9634-d6b14ea7e4ee\n52185f79-be8c-423e-8d9d-1759f0d50fb0\nf322bb14-c4a2-415d-9279-93da975e861b\nddecab8e-b78d-4ede-a551-d3fbbe34a5bb\nb5eff2b8-ad3b-4c8b-8838-f5f1146c591c\n8ca96921-91e3-44ee-97d4-9446460397fd\n336241c1-b0eb-40ef-9b6c-0a5eeb49bf0b\nb186e23d-3ec7-41d9-8823-9e9e813638d6\n8045524f-45b7-4718-a815-c61abf4b7a0e\n28336972-0523-4a0a-87f5-bcfbd9a918be\ne6e973e9-cdcf-4003-aa7e-23cac3f6ce2a\nfe429131-80d6-4465-97bd-8b2d0df9d6ab\nea5b7e9e-1e19-4c33-846e-cec64f6e6ef8\nb7b3792f-a017-4744-a5b4-736c3db165e3\n00ad32ef-a0a2-4c0a-9727-3da61e9bf88b\n0a090d6e-6cb5-44e4-acc5-7d52967fa6cc\nced761a0-1994-4420-8050-01e46a603ccd\nef96b147-35a6-463f-943b-4e02f6ce4e84\n5ee3620b-1ff6-4e4a-b736-b33834d32bb5\n7b4ea044-565b-4cc1-acda-3fce2e4925b4\n9188c68a-ba45-4129-b526-09c9292df2c5\n8488ce4e-c55f-453a-a547-25db574d0bf5\nc683e756-cea6-4af1-827d-09218966bb47\nee13c943-29e9-48c2-a6a1-8e4358cc3481\n1814172e-e129-4d21-b804-00e18853cc9f\ne7c9e613-c54c-437c-a4f8-0148ad3e0965\ne4fc0f28-b2ea-4d55-a5c7-5d374fa52046\n7786fac5-5d10-472f-9161-d505804172b6\nd981c612-6ad4-41b4-a6e5-5dfde3b9bfd3\n37aee737-5160-49f0-9dfb-20c1c56d3346\nf5c02488-8177-48db-a2c5-b4ff72de8830\nd36a2391-4068-4c07-8d08-d6153ba8f6cc\n3e28eedf-f673-481e-9a76-535449e54eb7\n7b7f4b86-6b46-45d7-abb4-93c6d6622d1c\n2281b386-cba9-43fc-976c-52eab9ef42db\n25a26ffa-162b-42fa-b7e2-b95503ee1581\n83afa442-4f4a-42c2-819b-e97bd95dcc23\n6336b336-8fd3-4a5c-b8a2-975666a22b19\n8878173d-fb6a-41ad-b578-348394c096b7\nb67b1f94-884c-4baf-9588-9fd7a018b608\n4d1b6142-11f4-405c-8afa-39ce48c21d79\nc19cfc4d-6320-485f-8936-bae2c686c7c8\n00f1b78b-d7b1-4e78-acbd-652ef40b6771\n0c50ee89-ad9d-46a3-adf9-addf336c2978\n2fe9afbe-d863-4fa4-af97-ef36b3da2e0a\ndebf726f-3a43-4d91-ab3a-b812d2a9fdcf\nd044821c-4078-4d7b-9c50-0fb94f0581a3\ne187cceb-b7a7-4280-b065-a4d5e43a57aa\n6e2c8528-a040-4be6-953a-153e22f6e7dc\ne8ae1661-9e41-456a-8db0-befced12662c\n2845d0c0-083b-48d7-bf0e-0100c020a2e2\nb694fdfb-45cd-4af8-a37e-f3e7d095c79d\nd575a0cd-d2c7-47ad-be91-8301f470e2f2\nf0409451-2ab8-4e6a-9f9d-abc1d803897c\n49e1d894-82b0-4736-84da-dd0f23cbc3d8\ncd36d585-3c68-41c1-88a8-05efa31f75ba\n7f052d2d-e65d-447b-9997-8c4fbea7cdf3\nfac2582f-b164-4332-8d66-f618f458605d\n1959b207-7d11-4d15-882a-a8cf3a90086d\nce84c524-a9c6-47aa-a618-f4ae819214f7\nae8efde9-ff73-44c3-87b2-b5449f109657\nc6df235c-ecdd-4e67-b535-10f0757b5a19\n9a3b3105-85bf-4d94-9bad-d8d6e4657ac9\n0300b11a-f850-4488-9223-baa79f07cc9e\n2e3e98ca-3a6f-461b-bc37-c1cac3bedb2b\n1976bd0d-8571-40dd-88fd-9e43fdddf4d7\n0166f22e-1065-416b-8493-d149a13d9278\nf50f73bf-304f-417b-90a3-7b15062192af\n87801e42-a806-4738-8eeb-72ce0b41a010\nda0b0d13-4e7f-4649-88da-82762cb603df\nfa0b7475-fcc1-4edd-b785-d17dea368879\n5d402223-7f04-4797-866c-28e2ee5b7067\nf544e930-9692-469a-b299-19528ee3ea7e\na30cac14-a9a1-4771-b142-2346d9a57270\na5896f25-0b19-4bec-9354-3405a534a415\n213cd7ab-e80e-4a99-b88e-175a09609f2d\n07d89a56-b013-4ebd-80f4-69d8b99c3668\n5841ff46-2b95-4805-afdd-8053b7f08296\nec6ce78a-b351-4dfc-aa7f-1cd4dc204622\nf2cfede9-2f94-4e27-a1b5-3ae8fcd8058d\n1a4e94a3-52cd-4d88-802f-cefea591ad3f\n83497773-6cce-46f5-8e1a-5d996773423d\n30e31f5c-50da-428a-8b2f-d1116b6f7abf\n4b97375d-dac4-4fba-8b82-e05551415235\n9df10c26-a9c9-445b-99f2-f870a3b501f5\n08c1e4dd-7bce-475a-89b1-93ac44778b8c\n119a8d3f-bd22-4a5a-982c-48af15de5373\nfaedaf2b-ae12-463d-93b4-780bc17a2815\ne1a4cea9-75e6-4d3d-9944-8b3fe6666d09\n7d24893b-1001-4f45-89a7-ba0a97a064ac\nc85e3d57-c7ff-4c0a-9e4d-df16ecf83760\n2278c2e6-e89d-4aca-a59c-410d1a1bc6c8\ne02785e2-61d5-4af8-aeb0-f812d20968ff\na22032bb-df77-4b91-af0b-c65f8ba8695e\n2096933e-73d2-4544-84b4-ca7a9ff1f39f\ne9f064c3-914f-4c34-afcd-5d682aa479e1\n1dd9212f-da16-4821-b169-964a28fbd53d\ne9f7d9cf-eff5-4a19-8d81-adddb4aa3564\nd7feeecd-53c5-40ed-a18d-0e6f1393a5d1\nbb5036c9-a474-411b-9966-f0facf8da2c4\nbecd73a1-e7b0-4fba-8f37-58073ca72064\n1bf76b1f-bd62-4908-aa92-5187a46728f0\n79bfcbdb-113f-4a4d-9b23-b71e09aebb87\n8fb0ff2c-c500-4219-99af-116367ffcc7e\n10786aa8-2d71-4fc9-b4b8-a8c0f39f85d7\n40169470-402e-414a-9f2f-a5042ab45622\n5f8d7102-5198-4fc2-8d3f-9a3162f5fba2\n1a5c7911-c2b5-4540-b8fd-07cf961b4781\nf8badb19-381b-443e-84e1-815edf9a16f5\n21977e21-ccc9-4dcc-b895-c990f0751297\n7ece0e30-098b-4db4-9c67-552713d9b3ff\nfd267b6e-aaa7-4ba6-aa58-f4e242865321\n593c4702-7371-401c-9f1c-55cf59bc4781\n99c668de-85b1-4efe-92b6-ec518e5e749e\n534978d8-bc5c-4548-b3fd-93b7b2eed3c4\n3936df36-ea30-41f9-9b61-59da51eccbda\n5acc9ecc-15c6-4b3c-af1d-b254d98406dd\ncc1f716b-c964-42f6-b5ac-0da4dbaa7b90\n415218cb-d360-4e4b-a659-22007dcfaf14\n3da37a48-6e52-4266-9568-05b6a3904a6c\n0cf000f0-ace0-4de3-bcea-ed75f872fcb0\n001578a3-68cb-4eb6-b3de-4a44c0842624\n79395cea-6956-4a70-981e-5f70ccd806d4\na5cdf001-f50f-41d8-b567-3dcef677128d\n77c56cd1-666f-41d1-8fbe-680c0aa12d16\n55d2a2f6-75be-4df2-a3aa-b3eaf6a3b246\nc7403c23-9bda-43a2-ab14-e7f6c448b3e9\nf240c1b6-0db2-47ae-a261-aca540c27fb9\n3992a391-0fba-4a79-9a4e-d0d847145736\n47ff5aa7-492d-4157-8d20-ab1e63ae3631\n640869df-82f0-4b5d-bb39-bd2bf9dafa62\n0afcb3f8-c6e7-4d87-803d-e1f55e9c9489\nfa43f0c2-9018-4ccb-89f8-89cc18e1154b\nf558aed6-62f5-4203-b743-e9904529f520\nf8cd84a9-cfd5-464d-a36d-49ffd7ff55e1\n87421677-ad03-4334-9662-ffa38dd9f2b6\nf30f3f0b-44ec-4190-a0be-05cedde78e37\nd414bc6c-178f-4bec-9e19-58f2d785d412\nd8719ef8-eeaa-4a89-9190-060efa0a7be8\n869ea548-00c3-4d42-8940-c61f58bddc0d\n6eec5627-efd0-44a3-bb08-4e44900bb726\n26543ab1-a743-4805-88ea-beec3d651b37\nfe82a7d3-9828-4483-8b1a-79683ba11b0b\nfe0401b0-6eaf-4767-8784-b01a986ea732\na49542ba-9baa-4af4-b55e-e07b4444b03b\n4007e7db-5478-4b4b-935d-236aa771e102\n19d4877a-e40b-4d34-996d-59bb34d4e234\n01f0fc27-d0d5-4d40-b270-6f6e5c5694a3\nf8d538ab-536d-4f43-9e98-e6ec2ef040ec\n22f563de-f32f-4ffa-b733-d5cfa214b1e0\n4726b180-ec27-4e1c-adeb-8ca4514b02c1\n38e4c537-3874-4fc5-84c5-b1b902d5f5a7\nf0ccecf0-1727-40bd-8695-9f79c094e4f5\n44c509dd-5c9d-412f-9195-338b24cc4199\nbbe4ad70-b73c-4e45-83d6-7c625f5d876f\n4747d9c5-8c9e-4025-b822-2df4973b86af\na956baf0-03df-4e9b-9034-f4bfbab994de\n91de6b7a-7dff-4876-8e48-beed030b441e\n59cbaa13-464a-492f-9782-957bc4a2e783\n313be5bb-0c02-4b55-816f-f9b4d1c97d92\n9d27a32e-e153-4a7c-8638-55d231525f21\n6bc01776-71bb-4fad-82f8-98897f53bcd2\nbe030eb5-e677-4891-a5a9-536208d0fff4\n1c73c901-60f3-4fd5-a04a-862fcd573cb0\nd981ab29-172f-4d2e-8555-6451b24c03a1\nf006f626-a256-46ab-b3a5-bd9a2b11cd7b\n42356996-a666-4976-a290-237bbde71278\nc30ed6c8-5418-4599-87e1-e33ad0ecf866\n52310766-b143-4ae3-92c7-02183bfbb4e7\n58ff7bcd-555e-4912-b175-054a8435073d\nbbb03dda-95a4-4f36-9463-3d97810e97f0\n2b3a77e2-c841-4edb-bfe4-3d35e58d1068\n7aee598f-f8fb-4c0c-b767-33b075bc659a\n908e774a-145c-482b-87e9-67914c84574f\n8bd28b74-ef6b-43e8-afd5-6cc400007196\n84bce5bf-026b-436d-87b8-0d2ce6240528\n86ece181-043f-46b4-b6f5-5227469eab41\n29267573-9776-49d8-afdb-8e5f11a17960\n8e6d2f07-7bcb-4189-874d-b5cc6aaf5a5e\nbdbf0ae7-9556-4054-a0a1-79448b64b94c\nc4461aec-956b-4bc4-ba47-b61149feea42\n72124fcf-80d3-439a-8bbe-540d04ca41f3\n19ff9096-9590-4f67-b971-bcb8a5323320\n4d5900cd-7abc-4547-9763-485c75eab850\n2831ae35-7783-4ee9-a7d3-429b1f83f76e\nf8c28f80-10a3-4dc3-b67a-2259d79cb419\n4ed509c4-91fc-4e84-a661-9c3f4a2561b4\na1511dc9-4b5b-463f-a14a-501252862fa1\n358b9789-503c-4fce-93dd-acc4d7355125\n86c7b55e-0815-44e6-84f4-d894674aa3b2\n8fa0f6e3-859d-4dfc-a7c6-00b8f575d1a6\nf8da9b95-0ed7-49e3-9a4d-78eba6a0db03\n0bcc3749-1e26-4135-8be1-ac4974a10bbd\n06264e5b-2b4f-440b-97c1-5cf86e627d22\n00b8bb7d-1a10-407a-a4fb-c2eefc0a9ef7\n51e3aa78-729b-47b0-941b-61bbfdeec11d\na8d911a0-f683-427b-b913-1450cb7c2875\n78f95236-9765-45b2-a72b-ecbee62ba488\nde2e19d7-d1b7-4572-bfd6-06660b6cdece\na808edd7-f316-49d5-b645-f4f565ab1f81\n8b9f8c7f-1b80-4233-887c-0fdfba5d167b\n350ae1fa-f0ca-4aac-b4c1-52f3f25db46c\n7a967dc8-31dd-468b-9092-ba3ef725371f\na6c9add7-a4cf-4d90-ba84-11c5b68e2f57\na4b29d98-f23c-42f6-ace5-14b83260bc14\n7cf94f5a-6786-485a-9cea-052b67138593\n397c244b-9630-40bb-8616-821ed58a6957\ncabdb3f7-7c8c-4514-93be-a9341f0663d3\nd06202a2-2882-4c33-8f7b-3632660bddf0\n890c7c8b-1cb1-46b2-9359-05cab1c48561\n56b3d62d-77db-4139-8e80-4fc565204378\n884f3a8b-234c-4ea2-9855-af1190691e39\ne5daa0f3-edf5-405f-b57e-9d65854a61ff\n86d3cc80-1f06-41bc-b7ca-832dd9554583\nd57d25f2-f5e5-40ef-b968-44ede61ed2b1\n0e7c940a-576e-4d19-9cd7-92eed0ebba0b\n3793ec90-ce8d-432f-b5d3-bac40cb98ae8\n270191a4-ae9b-4cc6-8a10-dd83b4abafb4\n2afadddf-9bfa-4c76-8691-96724b70692d\n55f8e560-3fed-440a-a48b-c9ca81c1b33a\nfb383983-a030-4e68-89c3-3d8be6a37a7e\n2ca3733a-4003-4f58-ad81-75ba71e8c1e4\nf193c2a0-264d-48ea-b351-81b594e5a8f0\nabd6f24a-22b1-463f-9627-3a252c912b3d\n5deb704f-50df-4234-9c80-10a2513a0320\n012bdca7-e16a-4bb0-8e92-232d9341033d\n73f0e7f3-a8f2-4ee5-b26a-526996855b58\n2c8c00fb-5b5d-4752-bcef-081b2c14444b\need219c8-fd9b-4ec9-bcfa-bc13adbadd8a\n84ca3a43-680f-4a37-89c1-eb80f708e075\n062b5f09-32a6-405c-bda1-8692cff70277\n1620d620-ccd5-4694-9d75-8c1555ef50dc\n1581b116-753a-4557-8bcc-5dbc61ee2db4\n749b1fba-d177-4710-8b9c-c3a70dccdc90\n04dc8f05-77a5-4693-9cdf-4ca2a019fe1a\n4234c107-737a-44f1-bed7-b967c742a38a\nb9cc2396-b9a3-4573-9748-a0fe87e050cc\n809bb2d4-0ce5-456b-9354-560c1bbc40a8\n8a131906-1952-4621-9d88-02775a837d8b\ncc7ad0e6-5add-4e3c-aecd-06c8332d9731\n9435e977-41f1-4264-84c5-061493a48c52\n187dd409-afaa-4fb7-a31b-9ab8e36cad41\n76bb5e75-efd5-4305-88f3-820fc4f157e6\n301285eb-779b-415f-b605-f2afcad9d407\na6bca535-9146-4eaf-9535-1c173e2bdf7c\n925336c1-eb31-4ea1-b25c-78ad09d07e3e\n87888b9b-6ccc-4df7-b5b9-b7cc6801a865\na6df1582-ec6c-4a78-ac58-b9bfc5be612b\nea57993a-95c8-429b-b47c-4ae3b1420713\n452c2827-489d-42af-b4e9-0190fb013fdf\n91591029-4662-4a21-a0e0-09bd4d2fb751\n5760dbae-0641-4c32-932e-fb86f524ee3d\n60477461-d651-4e41-9771-cee16e33ca53\nfd2f4113-bf13-4d53-a24c-c5002ff25e33\nf86c6ab2-bfbc-4ba1-8c93-9cf393bded99\n95bf148a-c803-4550-ba8a-b8ac77756f87\nec76da02-1fa3-441b-9426-343186319504\n0e9507b1-f54e-4e72-9bc5-238420b80899\n176c1c63-7a76-4980-9cc1-12743ac5650f\n5ce2f9aa-848f-4e28-8bd3-23223d0ae738\n7d7a1844-1887-4356-8e85-81c57bb00aec\n895e9b5b-564a-4353-93ae-e0c0bbfc4123\nf09d900f-20d9-42e3-947c-d3e7f7af5347\n9e1ab1a3-cf8a-41f2-b1ad-c6a38cbc3475\n8020544e-3d08-4973-8f08-6320fb90f0c2\n42869a8b-1226-4588-a079-74836bcf47c2\n3751d802-6667-4db0-88d1-2c2ee7fadacc\n550e56f6-a962-4081-882f-806b989426a2\n0086829d-0c06-4bd6-be49-dd591ae5f327\n8a9b4ebd-1787-4df6-9abb-7be7250dc183\n5b53fdac-ca98-4bcd-9978-d5b8fb213c69\nc7e54538-502d-4a81-9d2e-496a52ec50a0\n6f94323d-20cc-4433-93ed-e10766f00aca\ne66cc2e7-4cd3-4717-911d-e30f56776e9c\n4680367a-4861-4b7f-9a6f-c23511e06f33\n9ac5742b-898b-4d0d-82c0-c5ac3fd8101e\n079a56d1-34a1-4f38-88f1-08b736a7ca9b\n358b6dda-51c1-4da1-be8e-5e46280f9d5f\n90876430-ab97-4a11-9d06-985c81b91a0a\n4182d8b2-2617-4bdd-98d5-e91280333b9e\n025413de-7966-497d-a82e-706f1b7026ea\n017e6666-3f82-4c1d-a401-e4ccb4b9981e\n1da5203e-c941-4dd3-bf3c-b994d7522791\n161ae57c-5abe-4509-a2f1-c6568d796754\ncc76ebed-64f0-4715-b677-771321aeb5a8\n860355f6-a14b-4cf9-b83f-db0e712a556f\n8a3adc9b-f441-4507-bcf0-4005b449d269\ndfb5f345-083a-4b1f-affe-26935cc35519\n984ae864-4b7a-4f12-8507-011f9dcba53d\n1ac0bb84-387c-45f5-8dbb-a04796639b53\n81c7be44-3be0-4f04-851c-fccd15262d3d\n61c88c5a-dd89-4793-8638-323176fdcd47\n6195336f-f3b3-4e4d-98bd-200e4f46aed3\nb942c578-913c-4863-bfb7-0143384a4cbe\nbd021cc3-ffda-4a7b-ad34-9ae46f7030ec\nd84542df-ce4b-401f-9a85-2899a0fbe84c\nbb3caae8-d317-4cb1-8a2e-789ab6da6189\n51948702-7a70-45be-ac4b-065b5ca7880f\n831db7c5-c63f-41c9-af39-8b1d1135fc55\n45c17cad-8b81-41fd-8fa8-7b045770fcaa\nd2791882-9a3e-4f92-b931-8226389a7a08\nc517d6b6-c581-4d6d-a389-b7a34761c6fa\n66f7f625-106b-4bb9-9908-851ef2736d4a\n76055272-ea25-4f27-afa1-28b097a34e8e\n2b2b0608-a606-4f78-985a-af52c0c21553\n35bf98a7-bf1d-499d-9500-fdc38b592780\n805094ea-acb0-48aa-83b4-bff121cc2809\ncb0d27f5-b2cf-4552-af67-8ac8d7e1694c\ne20a56ca-16e5-4d91-a2e1-20617044ac60\n76f1b767-30c4-47ed-9325-725b52559b6e\n60527326-1b73-480d-9a88-4aedd349bb9e\n1ce623bc-a954-43be-9c72-145cce572e25\naf607daa-a657-4f06-a11c-858e7279181e\nf67862f2-f010-4ea6-a2d3-4efb480fde59\na6ebee4e-1e59-47e3-aa96-5510d6afd56a\nc06dfd1a-6605-4cf3-9c45-f2b85f5c1c91\n7c93b122-d637-4997-a15e-a1c88845ed4e\nb6942cbd-c779-4624-9867-1220b65635db\nf6348a70-2ea0-495b-b9a5-8d99f808f1cd\nb1d2c3b1-43c8-46c2-ae91-e071821c3538\nbf716d12-ca8d-4ee6-8df7-6553b7676c36\n4223db1d-47f2-4ec1-8184-ac4071358fb8\nee5a83bb-203f-46a4-9db8-2bf90b98d4d8\n50692d1c-3396-493a-ac50-b282f9c869ba\nfc1352fd-8263-4514-b132-87f363a1d5bd\n0e5826c9-c8d9-40d7-9e82-fedbf9b621e4\n60a946d7-2a6b-446f-94ac-464d98b9b247\n842b9aa0-64ba-4b1c-bb09-bc7f4b322d90\nab879af9-4a20-43d6-96bb-849e0e29b284\nda7392ec-23db-495b-a3d2-a6cb6da00541\n94cc24d6-0dce-442d-952a-43f98ad5b21e\n2f48a1cf-4292-4257-a671-324b0107c067\n75fb6192-5a3a-4aa3-bb2e-8ee8a293b611\n24e3df5c-29a2-450b-8f20-70fbb92d0d2e\nfe17f942-515e-46d1-b6e2-2e0d9353a9cb\n71617126-a6ff-4311-8fe1-f971a2117884\ne0ca1896-e15c-4dd4-9085-d0606910f97e\nb8027e52-5a73-4762-8764-5728d7f1a83b\n52039e76-6c6a-41cf-9aea-f7c15d868100\n5ee9bf33-b70a-484b-b4e9-467a4a6808f1\nebee7cd0-89f3-42bf-9b14-fec6305e8c5a\nfa34c385-97e8-4fb8-b9df-ed11f085b9c4\nedae31c1-e560-455e-9895-5e19f09d5e9b\n1ed49143-addd-441a-bcd6-6e9ef8df11e8\nedf87ac9-19de-4f15-a311-bf9bc327f986\n22decbb3-8e28-4b5a-a2c0-fd0c97febc58\n99ab26b1-a43b-4f6a-adcd-64710edf5f48\n967ff488-ad2f-487d-a0a3-892d03a538c9\n94be1622-31a4-4907-bce1-5b8a8537b1af\n028cf85c-5875-4bc0-b37c-577319fd3999\n3e25a47e-e7f4-4282-baad-2eca437bfcf9\ncb5223e9-8fd1-44d8-993b-f4437ec167e8\nce1e043a-52ac-48b4-86ec-2fded3450487\nd36d76a1-5a72-4133-9ff9-d60f72a497eb\nd020cfa0-c229-42a2-b095-7b1daf3c9120\n6c35649a-afa5-418d-81a7-97c1de0093fa\n05ab5e6d-8e91-4e44-811e-f67c5e2640fe\n59052edb-81ae-4f88-9bf7-122737dc55c6\n4e98d63b-21a8-4949-9db5-db76788710aa\n70c45f19-87e2-4995-a1d9-f11a2a46fea0\nfe2826ad-8479-433f-bc58-51a702f786c9\nec5c4cf5-9860-4358-bb31-c536a878277e\nad03cef2-a772-408a-ad60-17f3b9a037a4\n66b493c3-9d2a-4271-97c3-c323e3428066\n5de89994-42d7-4a10-ab38-a675804ab2d0\n8bf2fbed-a88a-49f2-8e7e-29a243a0dd83\nd6919f7a-21e9-4cee-9104-82d0b4b60802\n922857cd-2922-4eb0-b296-a9c7d85bbb21\n33ee5445-1e0b-4b33-84d4-93df363f23ac\na4492514-76ba-4db5-9e61-c87f05cbd389\n7c4c3b63-267b-41c4-bd3c-769e89a1d37f\nff415f85-7266-4869-89e5-62736b25d4ec\n7d54a785-f4bb-4bef-b6da-df60374e76ca\n0a984ac6-31b3-4ca6-979c-4d5b41048f5a\n6374dd65-1ae1-458e-af13-9311801560f4\n46eda8f1-d627-4924-b314-fa9d9c0e1f52\n88b4cb15-da9f-4cf9-81c5-22f1490326fc\n3894082a-b5e6-4001-ad7d-d1b65d15090c\n4f04e7c3-c354-4805-b290-381ec9373137\nbc36b780-0eb3-4401-b08b-ff1988e56944\nc79ab309-bf16-47d9-b83f-e0c247bcc899\n1849724e-fb27-47ea-93e9-986c0e695796\na04ace0b-8785-48c5-bf09-e6cf22bd8c11\n8997689b-4beb-4a28-addb-09590a13646b\n91570ab2-4f8d-4751-bcd8-d892c60b0631\na2e38981-43d1-461b-9fb9-6f5423b04f8a\n59c258d0-0d9e-41fc-b558-f7e7d2c10d69\n00650220-9c16-4fda-a810-033452b82611\n9afd50e7-4cbf-48fb-8409-7c54ff30505c\n30dd0318-0536-4bcb-89c0-1d50733445c3\n86d5bf5a-4037-48a4-8529-4bc4a7b808ec\n7c249056-7e69-4871-9cb7-a90605d8d058\n062e9389-0888-4139-b962-0b7d7cc44aaf\nede587c5-6b99-427d-bfb4-c4789aed2eb9\n173724b1-be6a-4738-a601-46719797cfd8\ne408c8c7-1e65-46fc-ac0d-4ceb61922754\n4425e231-a70c-46ad-bf8c-f39f161b1443\n41e32211-856c-4609-b968-d96d55a2d1ec\n36e32bc8-b742-4e49-8b61-53534345e051\ncc2d3125-1041-41cf-a276-c517cbb90d01\n1ff66753-b170-466d-9e8e-d8e5fb8ba82e\n2b1212f3-a5bd-4732-be58-4891b2c4f5d6\n29ff3792-81dd-4580-8f7a-c731c6b2cc6d\ne69c40ad-61f2-4aa7-afa7-99bd5f485620\na448b5ec-6307-42b8-baa9-158d822bb0c2\nc67452a4-ecc9-43e2-9dc2-75c2b5e74f52\n3881d915-4050-4b54-a911-510fe4f1e1c5\n298d3e23-a2c3-4c27-a7ac-c9c711dfeaec\n66435fc0-0516-4f32-b91e-35fd05ee38c9\n66572def-187e-44ac-8055-d54fd058cc5b\nc92166b4-4aff-4c19-a252-765de473abe5\nede3daea-b40e-4df6-9bc4-f5e09b7af3d0\n1c1fc639-4bf8-4b7a-90c7-d0a1f677182a\nfcd4f4f6-4c36-4c12-a37f-9d9d1c4327ff\nd45ca483-1f61-4d84-9f4c-6aed9a27890d\n5656b51b-01e0-4137-b6c7-18bf05cb2cc5\ndfcbe52a-6bfc-4dd3-8fcd-87b5f03b0f03\na24cc05e-be1b-4a1a-b2cd-677e643c9851\na2e4f972-df07-4266-9631-9c3ae599c9bf\n257092c2-4257-4b73-83a1-a0ad42920974\n65bbbb70-6669-4785-93a7-5838b6a518d8\ncb7456c8-3a0e-4ed5-a930-c69ce9cf93ad\n23d511e6-c715-4ee7-85ad-95f4b4e8ca04\n676df59b-50f7-450e-ae17-c0cc8ed428e3\nb267ade6-6e3f-4ee6-ac34-0b82dfb78e8a\nf4e21d24-80f4-47dc-83d5-351416980f4f\n1ee42e32-9875-4574-9808-edf6f783991c\n3122f7ed-9062-4fbc-8580-091f6efc9e4b\n82358c8b-36c2-4366-94d2-70e19984ce90\n7ce90ded-5aaf-4efb-a212-57b253d197ea\n788a805d-0b2c-4232-a320-10f340d91191\n9c2cbdcc-ecd8-4e76-85d4-3f596acbc831\nc929a65e-3469-49d3-bd09-3f42851c9b57\nff686215-044a-43b2-aa03-860e315557fd\n74ec0214-c325-49f0-b735-b76f2ecfe8dc\nacedd295-cf8c-453d-bfa3-11c9dc256901\n08202c72-0e23-4b90-96ab-6ccb572a888c\na630b7fe-48fc-42d1-8941-d1e4c39d14ea\n43b47884-5cc7-406d-96a3-a93b51f45969\nd4f2fd5c-0b6e-43e1-8bcb-b2b87c259e7c\n18f6b057-c9f7-468f-8f98-eb6583d14f17\nc7d3c199-4dae-4701-929f-3e6f77fe84b3\n410263cd-f430-474f-9b90-6d7dd419c0a8\nbb873f3b-b570-4628-a1d1-344c75ee3012\na2d9b537-e339-4a67-811a-fe921f493344\n3b2e2cde-75d3-4ae7-91cf-0e872fec064f\nbbea5055-62b1-467e-a942-36b3769f3a03\nf66e7fd3-aae9-43dc-9b28-995e6efdb841\n4de3fd6b-391f-487e-bf8a-b4c087c00cf5\ndb588b78-2fe5-406a-9c40-eaa60ee09faf\ne81b7d9f-3123-4ea4-91d3-df3983fa8956\na78e18bb-5e01-45e1-8f71-e7022d196a9b\n4abc425e-76c5-44a8-91f4-c6b6497210b0\na38a1f3f-76fc-4782-b829-8bc79cbed8f9\n64557ff9-9be3-4395-a762-a10e8ed08853\n586c3133-d29f-4ee5-a717-650ca24c831c\n057807f0-99d0-4e71-8337-2be8f3572fcd\nec873dd1-e4cc-41a6-9318-6571394398b2\n34a71af9-f06f-4ebb-aa97-32d59e36d604\n26d84a80-92d5-4c59-adcd-9dbf16cc80e6\n64bb036e-688a-45b1-8430-d86a7a094c59\n90f023ee-b583-4280-ac56-a63d7e4f266d\n6cf26a4e-0905-4e34-b28d-af8976cde84c\n3b5949f7-2f6c-4de2-8ecf-d1cd19204840\nf8baca94-8dc9-4415-a1dc-c6efa3311210\n7292307c-bd4a-425d-a2a2-32fb27d40844\n0b109b9d-09d2-4177-8324-8fb8a22db8eb\n7ccacb37-c0c3-4c5c-8d6e-8502f116a9df\nb5c66713-df35-4ce5-84e2-659db6ee50d4\nbc8a4462-4c6b-40eb-86c0-557a3dd8e9b2\nf53043c3-3a2b-45b5-8e2e-878b78336591\n50137e50-9bfb-4668-9d99-522e720e1dad\n1fab2975-2cd5-40fb-9aef-04c56330af58\n288d7852-da4d-4820-9ef9-06d38c5a5394\n38317559-7334-47c1-8c15-eb3d7fa1cb5c\n1b1f92c3-8272-4f3b-bda2-831425668220\n6bcbce53-d663-47cc-b0e1-e48be2d64d13\na326cfae-8586-4879-a1b0-1c7843900de8\nd2b0bc79-5b3e-4dfa-bb16-220de8d4aac7\n41a7c949-e0fe-459c-8f16-aca824df0219\n6b472ac7-5ac1-4f1d-a241-64f22a6d5b88\n477add57-17ed-4bae-9263-7f58a507c0f9\n909bbe3e-f039-4d13-9d00-43de70c13275\n59619df3-0dc5-442b-b6f3-df607ce8a3d7\nbec0e650-a859-41d7-acd2-831b43572ce4\ne0856cec-efe9-4833-8fa4-ac016253699c\n0ec646d3-7631-4508-a2cf-d10f435eac88\n87fa7165-f00e-4ccb-9e25-743a7edac4c4\n11d8d65f-0562-4734-9758-de6311ffae93\na77d6e51-c86d-4c1b-a402-5c2de6488f94\n7f0134ac-e024-42a3-8da5-30ef515c8853\n26c33545-0f82-45c4-8d76-5ad6378be7b7\nca04548e-3f87-47ad-b706-ce90c691490e\n6909578c-db2a-437e-ba75-2b0a909c01a3\n953ddcf0-c8c3-4f9e-b5a8-a279496c764b\n58eaabbd-d414-4305-b14b-d52a75da6426\n6e8abb15-fd49-4356-a0f4-68759f99728c\ndc5a95f7-4f91-492d-82e1-0d4d13901812\ne86f8a80-b431-4ade-8b92-b904fd205732\n64f59266-580c-433a-a455-d556d16bcfac\n91b28151-d052-41a9-a5a8-f45253fd338c\n35bf858a-f38f-47ec-bdd8-974c6f281344\n49621797-908c-43d6-9688-15e8b5f21dea\n3c4608c9-6b0a-4d65-8244-9b7bdc894f52\n4c118c0f-9f83-4951-8a92-6dc37fce17a6\nbd9514ad-94be-49cc-91af-2ba84dc75d17\nc96463f8-a36f-4c7f-a68e-2aeaa55c8407\n7f4b7a3e-5303-4835-bf45-8efc221ca5e8\na9e1d594-9a9c-4643-9351-b0efdd2668b2\ne96d6330-0a38-4f54-a737-b131f23366d9\nab56f859-d6f9-4282-b66e-054368aad061\ned190806-872f-4712-92a8-3dd1e9f3723d\nb7ae419d-6fa9-4ab0-a9e7-b269e1690278\ne49759d1-9998-412b-9439-c78ecba2b0fb\n5f7f8c36-9f15-4438-8657-8f3b8baa88c9\n67f62182-6a7a-4411-b156-9a93921df2f8\n0b0e7343-9d50-4385-89fb-69091f1ce149\ne844af0c-9d6e-40be-9a6e-ef267a2ce3d5\n742f6cdb-0dae-4636-8b8f-d075a52dac41\n093cf2bb-b780-43a7-94f1-3fd28fea880f\nfb0bbd90-11bb-4832-918e-d5d8a6e3655b\nbb3378d4-6e07-43e9-89ef-a26937d220c3\nd76d3d85-a0a4-442f-9a5b-365d504a2d32\n322eb233-f6a4-4f33-b22a-fd5389059df6\nd9e6af34-0667-468c-b3b2-f31e043aaa2b\ne4fb4da9-c00e-4631-a41c-d8d7319770c1\naa349f42-1de3-4576-84e2-5d0e792bffd0\ndc949d5f-b715-444a-817b-9be672725a54\ne107222d-d3c3-4f4b-b6b2-c5c5d0d4590c\n774fec35-9e59-4e4d-aa48-876c76742ef0\n8e553fb7-ffd3-46bd-9fe1-fa116da0277a\n32c9f892-0dba-4607-be47-439c1ffee280\n7d953d47-32fe-45b7-8471-755387345a25\n9ec2b61f-9b53-4131-84a6-fb7c7ba0471c\n50cda84a-cd8f-43ee-bca3-fbe0de692084\naa7c7458-addb-44e1-9afc-2b59fe24654c\n4cea0c23-21e1-4c5d-9f99-96f611495c9d\nf795ba5f-7225-4802-af33-390ce8c1393a\nb3234bed-0d28-4fef-b57f-993e013074cd\n6b6dcb69-21ea-463c-81a0-78d08ff13cee\n664327c8-1e50-4877-956e-e6741c8d39af\nf7d7d9ef-0207-4f33-b9da-dbc9768901b0\n4f0a9b18-f605-4552-9b37-899e4ae35222\n0c2c6504-a3f8-42d4-a595-21a6b9450532\n7402b34b-f5a9-41f0-93d9-a34337ee8118\nb037c8eb-af07-4d0f-911e-e8b89a6cfb2e\n9b31fac3-21c6-4c67-8457-b56ab8f62164\n9e41511f-092b-4eed-acac-69432e4628c0\n0d63fde7-fcaa-4356-a275-2207ecd4775e\n35eb30f1-c64d-4c59-9d73-aaa3206164d9\nc611bde4-68ed-4260-a547-c12bc4afee5b\n920b0a8d-2d72-438a-9bfc-64f175df13f5\ne43d6da7-310b-4a36-b089-b91564174a13\n3085ccf0-349f-4593-a1b4-5d8996eca377\n57a3ed45-8db0-474b-9197-be66d5240c76\ne767039d-609c-45bb-adaa-e52ad0dda756\n98f36d6a-66c2-4240-b164-9b8873a49e73\n78d4e561-ca84-4a10-945f-2e61738c778a\na4010f5f-3f09-4258-95b0-7604e60074e9\n0255f75b-9676-4213-b482-2d01fa850c4f\n13cf2582-8495-4f8a-9ac7-16f6a0a71936\n19553ba2-0ef0-4c30-a21f-6dce83247e0e\n2fdc9f3f-4dde-4be3-ad48-4f104820d994\n8d395744-67d7-4a98-bccf-00a4cacfeefc\n9ba8a2ac-e38e-4c30-8677-332eabc8f724\n5dbe1907-1571-4021-9063-9d511f622649\n297ac6ad-d9e4-4448-837d-fafacc3b67a6\ndfd64a31-e091-4616-a223-5e059c4aedd6\n9098b7e9-d64b-4ed4-a36e-c2fbe0133214\n56581105-0f37-4d93-bac4-b4ca9830df25\n04e07e02-8565-4923-b672-0307efc68649\n3b5d9213-906a-4557-986f-1dda67d321b1\n7ec287b2-2258-4ba9-bf7c-8b510b43fb41\n81baaf47-8e76-4f82-83ba-d88d9ec97704\nb65b3eea-18b4-43e9-b064-13ae0874b110\nc18dc19b-ba9d-40f3-aa07-fd6123241c21\n13a2f412-6336-402f-8fe4-e6614a34c1e4\n7d1a50f7-f0de-4e63-a7fd-061c5861a286\nc9b18535-7aee-4925-9d23-03872194d9d5\n2ff47aa9-f68a-4525-9110-6d28cd6ec9fc\n8f3f78c8-19d5-4c05-9818-e0939e45ead9\n1f49f071-0031-4701-8a4a-9d7ab62efd93\n90f87a0e-ca24-47a4-9672-456de972f9fa\n18de8491-5998-43a1-81fc-857210661a3e\n4a1b94d8-04fa-4bda-b5ac-1dfbf6f83ad0\n9b938a33-8128-4054-b2b5-b78f2df4a4c2\na0f28437-5293-490b-bbe4-a607493a8e47\n9f574539-147c-46ec-a61e-9e8a0037a859\nb87d6229-8de6-4857-a3ba-c4d736ad7a76\n25626d5d-d965-4c43-90f6-93ca94bdc47b\n6aff5ede-a139-4819-aca6-54c7cbc86234\nfbdba32f-8fe7-412f-be51-5a0c6da27b47\n35c2ee6a-2908-479d-b78a-7346e6f275a2\ned6eff7a-2cb6-4e5e-b54d-986fb07235f3\n40add3a9-665a-4ca2-a594-17f9784e2249\n4f61c9fb-0415-45df-83ce-955f6e8ba47a\n9cd3e5df-e4b1-4113-8893-88d6d284690c\nd2bd978b-7dbc-4037-aa03-e1bb138822a5\nce60c04c-b30f-4814-82ed-2b8552b34f51\n5d876ea1-5c5c-4f6a-bab1-eb3568326222\n77b9ec9b-b609-4c03-9b8b-c9136259394b\n7490a5e0-b1a2-478a-8a14-0bbd58445405\n3caf18ca-e65f-48f6-9b51-a8b98bf09d32\n56e2af51-c473-4d37-bbcb-7a4b150c874a\n375078ff-133e-4eb6-b8d7-c3e52a5b760c\nd6a600f8-47af-46b0-9959-cb2ccbb77b8e\n11308921-6004-4141-87be-87a0c0b1a1b3\na24f176e-18b0-4188-a4e3-7abb596e785d\nb6f364c5-b039-44af-8757-2921a578a429\n3fa20709-d481-4143-b546-b01b113f64d5\n1403762d-0d20-480d-afd1-abc430d016f7\naf8e78a9-e0b6-4b26-b17b-154bcbc62d0e\nad09f1f2-8227-41f2-92db-04faa04ef454\n6042ce74-72e1-494b-a5d7-25fec49b844e\naa9e9992-0ffa-44b3-a99b-df403a153610\nee921f5c-5150-46bc-9f8d-713228050a8a\nd037e54a-1240-4cd5-8d07-9625f9e4623e\n6afc3225-58ce-4078-b1e6-d030fd981253\n954bb240-4797-44f6-ac46-38b101e537b8\n6e6c1fb9-23b0-43c6-a1d8-bede7a03b96a\n4593c62a-6687-4b14-8a2d-a7a81726e800\n433e4780-9fb3-4c77-90cc-481f385f72d4\nbf02d187-039d-4cda-a31c-41e2192f0a31\na8ef7ad9-d2a8-443a-bdcc-64046b487427\n5842ca2d-91b7-43ae-a5c3-b376c7bfc2cf\ncd912289-f73a-4178-9745-b2df83fa2ba2\n02129a20-b056-4f5a-be33-557986e130fe\na999263b-86d7-4a30-9181-224db5a2cc9f\n2b15d5d9-1abe-44be-8fc6-5e3acbbcac73\n8c8de62b-544f-437e-a8ad-b73262b6f35d\nfa96e471-bf01-4ad0-85db-cfc23495721b\n2e791944-9cfe-4d6b-acdb-4faa3a446f99\n33ab4923-b89f-4072-b6b1-446e5d66ec35\n139d1937-d25b-4c8f-b56c-d9b59125d93c\nf96fff92-5403-42eb-9b55-a22b068569ab\ne545c8bd-ef65-4c71-b803-4e4d71281237\nadcc4fa2-b220-4a05-a755-b0d2d556776c\n202b2237-726d-4e03-aa9e-f2c1d2b81ed2\n3ef1ff46-2555-434d-afae-1c72ebdc0608\na3c33f07-eaa2-4522-9789-f8374f926fca\n7ef25efd-bdd3-4ba5-ab15-22d210f0587f\n1bbe18f4-503a-44ae-8573-726c70cddf8d\n7439ae17-5c6d-40d2-abdf-4794a65771c5\n8f5104c5-be9d-4831-ab21-f275004e7fdb\ne3c75907-3351-4938-9f29-5e9d4a39d271\nf4afcf5c-b310-4c42-bcaa-8467a27e2d87\nd2105a18-8083-4b81-a872-e3e8b4b167cb\n458d6e38-a962-4891-afd5-20379c613b0a\ncf99ae18-2dc5-4276-8aa7-d84e12aeacb9\n11a4ece2-5032-4fec-9e5a-aa466c638f74\n802b52a4-2902-4c35-a659-5502030e1a89\nf82637f3-f5e7-4e11-b546-570793e6f503\n9ec31d18-97fe-4aa7-8037-1016290be482\na3496cc6-1f1e-4a4d-975c-6fc36fffa837\nded68c66-bd39-45ad-a5de-8eeacfefef06\n21f36bda-bf71-4544-9712-ec6cc134f2ab\n92fba088-a128-485e-8474-2b37b0c87768\n73f548f9-9bfd-415b-8f7c-e79258753af4\n308688cf-b08c-49f0-88af-4e158d6858e9\n4c2cd67f-d68f-4ec0-9466-45b5d80a0dde\n31191d49-36a0-4435-ac8c-3ebcc4e81643\n03d6e737-ab63-4943-aa2e-15e352757501\n015d50f0-f491-4f79-8c35-0f782ea7bdbb\naa13ef33-67d8-4d5e-b00a-0dee810ef92b\na427ab78-3e59-441e-8063-3cbab19735ae\nba47a19f-ba58-478a-848f-e28eeae32b7a\nf03ebbcd-6c9b-43cd-b8d5-5431ae4a3743\n943bc35c-3b73-4f8b-ab19-28d4f62a84ce\n3004adb1-26f2-46a2-a31a-17bc3d4362f3\n0a9cc374-1e16-4369-98a6-4a642665a70c\n2882fc45-177d-4375-9a08-2230aeaeed26\n2ec9c6fd-cc45-4995-89bd-ecc0c5b8fb5a\n06e0037c-c039-4606-8b59-3a488ab45601\n0edbf940-e4e9-49eb-9e23-f5ccf0fa9a1e\n4ef6d025-906f-4632-b290-2c6875c3b5a7\n88bb1f0d-0495-4ca7-9d3d-ed0879263056\nfb153b24-c0b8-48d5-8bed-9976e015a688\n57c4be56-8b38-4610-895e-772f6f65a7fe\nf4c0993b-bffd-4d2a-a0bd-1c7917c52e33\nc118e500-a109-4bc5-99a0-2775573a71fe\nc41d82b8-b6a7-4d2e-8d0d-eb43b84015d8\ncd082e8a-dd7a-44e2-8df2-54b15bee06d6\ne3b09062-c07a-465a-92a9-864f75e9c76a\ncacd4c43-f7b0-4529-8c0a-41303a6ea7b0\ne664220d-2e5b-4fd3-a39d-6ac3b7752fd4\n4d6622b9-1175-4cbe-89c3-4fdca2a7c301\nd68ac0f8-0529-42a8-901c-7ef9af7ed70c\n79561a70-4f24-4842-a498-f61c0214e92d\n8dd00294-6298-4e41-ae11-c3fc4ae5305b\n88093094-f74a-4a47-8736-1ff1963a6153\nb1ba22c6-be29-44f5-b409-8318beebb50c\n76577070-4d1d-4d9b-b317-9d23efcfa6d3\n037c22f1-73a3-4697-9299-03821f767dd8\n9c5f609d-e0e0-4fa2-b1f3-fbaf57c31a71\n3c3d09b7-8c91-4c95-a574-48bb8da45fc9\nca2b5ad8-a5ef-478b-a9f1-8cd062d2e94e\n58749a0c-d617-4533-a5f2-6fe8da230304\n0aa984ef-febf-4978-a49a-50126c71bd69\nc7b90f1a-089b-4205-a776-ba91f042a446\n1337cd5a-3944-4d8d-aa13-adf07c0179d1\n6d057232-89cf-4b2f-bd69-a17a6a3b804e\n9f382532-a091-4fc3-9805-be88eb7f3298\n0b68a315-7f18-4549-9530-176dffa73625\nde94877e-a646-423d-ae11-8c5db3906c35\nf394a06c-293e-4eaa-b721-c93d53e3ceda\naae41963-84fa-49da-b5e3-9a5408584e32\n5d1437a3-f037-46fc-b271-eda4150090dd\n26533097-3144-4fe6-b971-53ef3bb5ccc0\nafbe9021-7775-4b98-a486-69266287bb07\nc0f8071d-14b2-4f8c-b99b-ad2a1a8e1045\n7a657970-172f-497b-9986-6003dcbd7be5\nfc2bbd63-6507-4e4c-9e4c-ba8f58b78ee3\nbda93261-6cff-4810-afc6-3958bb94f499\n489c1e47-a2ca-4658-b2c4-3527c1f12acb\n85272cab-1e0b-4b6e-9d8c-80f6adcd72d0\n6f337dcc-1489-44ea-8359-3d8c52b15b4c\n7320a85d-dc5c-495f-98d5-82de4885c8db\nda38537c-795d-4f37-90e5-60d7a0a61061\nd464c145-ec8e-4572-9f2c-b549f83b0f66\neea34100-59b4-41ab-96c4-80df3d2fa0ec\n3ec8c940-0712-4d6f-9264-4dd4ae390bc9\n4b23be57-8bd7-4141-93f3-03afc3befd07\n8b74b5a7-5232-47b4-921f-dfce011d41f4\nbf72582c-e2d7-431d-b933-e1a6766bd06f\nfde6379d-37e8-4c64-8d02-d242b5f574cf\n9f55bd04-a337-4896-8ce6-5bc809be8526\n39902b24-2705-40e9-af68-c77e1791268e\n666a0ee2-c843-4bb9-ba94-f97d124cf036\n520090ff-5c54-48ee-a191-8d201e285f98\n771813fe-3fcb-4621-b871-00bf2f6a21e9\n69c6199b-c461-4c98-8d97-af9ec86969fd\nbe1a3869-aa3f-4dc6-93fa-27910ea44ffe\n3b11ebf0-eeef-4360-8071-ebe75ee2e3ae\n4b514039-0d27-417c-ac49-bf0a665c9cc3\n178bf0af-d45d-4df3-8cd1-f9f97e04057d\n7fcf2cd5-639f-4db2-ad5c-9b4f19024626\n6d1c72e4-ad68-4171-8c9e-1d9c67979000\n3106b2b2-b464-4cae-996c-1558b29a0fa3\nbb72949f-72d2-4c76-aba8-022f193011a0\n943ae67b-d2cc-42c0-89da-b7098739f99a\nd71aad5b-8abf-44c9-bb70-cf057fabfdbc\ncee2c12f-cc24-4769-9271-7b5d4933b479\ne743a9ef-fdb1-4551-9ff7-9bd6c26f208f\nba93f54a-9409-49f0-9927-30275c48046c\n6fafd595-4190-4baf-ac07-8c7c846e037b\ncd4ac43c-0702-452e-aaf7-0dc5277f3720\n3cb329c2-05e3-413c-8e44-d89cf3f93451\n63102d13-d12d-4992-9d74-7cf7120177b4\n61b2f9d0-df36-49ed-8693-cec9c77b4285\n4affcfdd-6a42-41a0-bd49-ba0987efd994\n32369ea8-2e59-44bf-bef2-11c8f6da6217\n09087b27-858c-4107-957e-4c9b44f93ee9\n041f9850-c6a2-447a-850c-ccc9374d5fd2\n0ccbef00-c071-4405-81c0-20db434193d2\n7ef965bf-7af1-4205-914b-434d173225f2\ncdd5e636-9ef1-4a34-853b-634a9cbd7950\ndece011d-7f76-42a1-b382-9675cb3f2523\n5d16e08e-fa73-4e94-a17b-e4183fea5f24\n417d06db-084c-478d-99a3-f083cca7dfa1\nc053338d-7d3a-4359-b5d2-1defe4f54d0a\n16462cce-7deb-42a3-92c3-7ad1c477e7ec\n4bd3b4e0-3d17-41b2-8912-8c44981c6302\n2abd66dd-bdc3-49fe-a51e-8c233b2a49d9\nb567a2e4-2a2e-42ea-b2fd-a575565c2abe\n9f05b4da-76c2-441a-9ebf-03691d6f4225\n973b1ee0-71c7-4502-8fed-43ffec496ce0\nf83e2131-7375-4a62-aada-4d6d259a8d31\nd2f9899e-5c22-40c5-9ea5-139ea648bc62\na0806e78-03ee-4d26-a2f2-5c02489368da\nb9aea19f-39b0-46b3-ab38-740dc543c1b9\nd735e934-29d7-4ef0-90a9-026163c7bd16\n9ac9138b-2364-4af6-b539-8533062c48e0\n870d8bd6-538b-4b19-ac98-3a77d4d84d4d\ne000107b-485f-4c2c-b01f-c8ffa11f410b\na7fc69d6-a769-428f-96f5-96eae84b6d71\n67dceb55-5c0f-41da-8dba-543101092443\nf6cb2595-fbf4-47d9-a916-0c418633b46a\n84eacb85-9de9-4358-a970-94200259bfe7\nb6029d52-0205-4359-a8a7-02baf5475d30\n0f770571-0595-4431-8214-f17cd3b40685\ndddfe19a-b714-4058-9220-d8c6eddfb5aa\n308a0ec9-e709-4e47-86c6-db351bb437df\nccb3dc7a-8cc4-4ca8-b162-c75c0fcfa60f\n47572b3b-4bff-47f3-9182-aa06384a5e61\n4ead519d-eaee-4d21-bf09-685a42606950\nc2bc716b-1c28-4b56-a497-ecce2c4a869b\n786ab3ca-9752-413d-9f14-90d4d5ca6cf7\n4e95a9be-cbb3-4fbd-a964-5dae5b93776a\n737894b0-0660-4f76-827f-c03e0236286e\nca4a3caa-f241-4941-9528-03a218c5ce19\n8683358d-1132-456d-a046-871936aefcd4\n69617959-c0a7-4632-87cb-252729bbb03c\n0839d302-7ca7-49f1-bdfa-b91949708c9f\n9eab8fa8-5f35-46fd-ad1b-c7b3d559d731\n72bb4f19-e6b0-469c-88d5-dba031eb0b1a\n70efceed-73af-4b61-8440-41caf07d63b3\n615b0463-62d9-4e7f-a318-6325de13da6a\n1ca7d180-09c7-4b58-bf2d-3bbf9909c4f6\n84074b3f-0371-40dd-8331-d9011ca363f5\nc9b33291-d216-47fd-b3b0-8fa20a60acc9\neb6f2ea5-3db7-48a2-b35f-f25c2107f6ea\n46e55993-8c64-4701-b568-dde264551707\n9829da89-5653-45cf-aacb-077ccf489b80\ncd4da402-b5f1-4c5b-837d-afbe2d5f169a\n14891a10-cd74-430d-bc6f-ba9c7f2ac115\n23eb4692-0db4-4bb4-871e-0d10c3dbf71e\nb7bc89f1-d3ab-4615-95ee-4b8d396f9d32\n22688d98-f56c-4612-a2a6-58cb2b46c1b3\nf7bd4ef2-6084-453f-9ebb-0e28fd4df9a4\n631e2c95-7cd4-419e-b539-fa93c8e8547f\n74b35ef4-8e5a-4bc1-886d-8fade153f3a4\n03951159-14a0-42b5-b26b-dffa8345d098\n454e1e29-de9c-4736-a517-199e8b13dc25\na789db21-de9c-4d44-b9ba-3e1dd7d32886\nb3157dfd-f7a7-454c-8e54-528643a9073f\n44bcc8df-a1ee-4ac3-8d89-f70cd2b682f6\nd2a9fe16-357f-4f8f-8f82-1a5c0f13c72e\n3c13f833-8f71-4d65-b3e0-5ad6266def6e\n66f37299-3c6f-4ded-9f96-6eb62cd14da4\n4ebaba9c-143b-4086-b826-e0eb6a3bb214\nbfc237f8-9fba-4c6d-98b3-0bee672a40f3\nbf0dbe2c-eb3e-45c8-9b8e-271a78b911da\n5083e927-6621-4363-bcfe-99b6c74ebb1e\nd269634c-b94a-4c5b-8afd-15934be3f485\ne54c5afa-bf00-4afc-9305-e7619fc08959\n2ff1bab0-1264-47c6-a4c5-575fd7d6a84b\nece80ce4-0a98-41c7-9753-7b1cf090480a\n4a0d4173-1080-4a14-a9f1-90313dd2162e\n059dd90b-48de-48bc-812a-5a759d28ff51\nb1e5eaa6-101c-490c-bab0-596bcba956c8\n54db8417-c609-42a5-8629-81b34ea1627b\n62acb5e9-54f6-43de-9f81-0bf73e22640a\n107aea9d-49fd-4f79-be11-85201524707b\n521ab87c-900e-4afd-9ddf-4dad29a90fb9\n24b83e86-9636-45d7-9c62-6b8ba625d084\n52d36d35-dc44-4e40-80a3-8b589219ef76\nff4254e6-a6ca-4978-b668-4a1309b45df5\nea68f656-dddb-4bd0-bcda-10210d812aac\n72771f33-47a8-4774-a378-9eb630117607\n9fba51fc-5877-4d5b-84b0-734201fb233c\n8ae8a4ea-c597-4c59-8a8b-b911068619ab\n976e894f-6ba8-451c-87b1-f4a4a6e2a0cd\nd7147b7a-8787-4bec-8203-ca518ea602e9\nb617cfe3-e424-4afa-b7ef-6e4ec5f8320d\nf75c0d6c-a8a9-40ab-818a-62f4fdc0880f\nbee67bee-ba6a-448a-b7a0-29e24194e411\n2842f122-f652-432d-ab42-fae8607de580\n4653094c-c821-4ed6-95d0-e672a2f20a7f\n41958bba-1bbc-4551-a4f0-a26a32fb27fb\n88d5443f-2c6f-4873-b145-354c7f933476\n41ac2264-1852-4414-87ce-edc2e233376d\na8b15deb-db74-4502-a220-14269afc163d\nd48fa94b-5e73-489d-b0be-acf3763d1026\n1d4d289e-fc17-4253-b916-a4f251d8cfb9\nbeb23924-dd0c-4c42-8fb6-7600abc0abb2\n7f1001b4-0149-4885-be44-b188806b123d\n6fce6bff-6240-44a9-9a03-0de6bc382488\n32d2c122-608e-4a47-bec1-cc43c7d64af5\n0ea9c437-41d9-41c4-9e70-b313d5b70caa\n1d6f309e-8049-4820-826b-3b7273cdd3b1\n3bcc49c0-c839-4659-827d-338a88cf0cf8\n0d1c9d66-6f7d-485e-9890-a6a511d33338\n3077b21f-b881-42c4-b86c-53ebadbf45e1\nb0fc63c2-b487-4cae-a47f-59a175707f29\n2876ad81-b9ac-49c6-8f7d-28dca81b95e4\nef3fbf92-b45a-4844-a2b5-116ee8df69ba\n0187a194-020c-4eb2-9d49-af36693d9ba5\nbd597c9a-46af-4e53-9578-f7b139b5c3d7\n5d1a4f77-c3c5-4e4b-a981-e5023505b2db\n803b9af9-f96c-473b-9d4b-d4f0516769f8\n2645c14c-d217-4b79-81be-6f56f786672b\n2ad5a918-79e8-4a2c-9247-e8f32baefc90\n838b55ab-f84e-4055-a512-8013e24d206b\n45ae347d-35b2-4d3c-a5e4-51f093d1dd4d\n5a7a900e-2a73-4528-9df8-5c3d57f64b43\nde56fdb6-93e6-43c1-8344-d6c8db10542c\n4cea87a8-2d6b-45b5-9e25-f8a4ad6f720a\n8c81ccde-50b5-42d1-a6ee-96a0295cfb34\n8db668c7-1ab3-4fe7-abd3-f58260a694d2\n029fe2bf-4cc9-4213-995f-d6c5caa8e2cd\nc6245b24-6d70-4d35-ba2f-090025a86af9\nda70b883-785a-4dfa-84d0-916fa70a0c48\n5060db64-6c8d-454a-ba7a-410840cf3814\n5c4e07ed-7bf6-4603-8e68-45a2cef0cf2a\nabed4fab-4d0e-47f3-aaf5-439a8ffb8c22\n31f8dcde-ace9-427f-8ba7-17d1997bac4d\nd400c552-b068-4e87-89b3-fea04ccf16dc\n10121885-cf85-4c99-a382-32456eabe100\n7f1c905a-888a-4576-b264-14950d9b8553\n07bc06d2-7d63-42e3-b602-528c73d56fad\n9f410370-8afd-429d-8799-3ee126965ed4\n12e760d6-5fc2-419e-8bd7-d2671970c3e0\n9a4d3d76-0348-499b-9754-b0d5be0b06b9\nf7189258-0a00-46fb-9cd6-f5ec13939d38\nac37bb0f-87d4-43d7-a5c7-6cbf882dd1ac\n71645c97-aecd-474d-a0d7-1b132a81e5ad\n077171ad-253f-4631-a8c6-1cc10ef27f1d\ne6601e53-b34e-4c9d-aa76-bce3b8a32567\n3573990a-7dfb-4f77-8308-11c12e0777a7\n9861b4b2-e5a5-4945-8afb-1cb548816746\n80652ca7-0d75-48b2-8c1d-9ee60cf00dca\n6a342d8f-177e-46c6-bf21-4120d936b177\nbed5a5a3-43af-4ab4-b17b-91ae7e447f7f\nebdf6eed-3770-488d-a01f-333ff772a791\n4159564d-9960-4627-89ca-2c43204f2a8f\n2f706d5d-acba-4f92-be61-19d62d66ec77\nf67a898a-0218-4598-88d6-c3eecc0e5108\ne54e52e4-f796-4f58-a306-e1e4eff8b955\n892b87ea-1f7e-4ed2-9d6b-18514622a63b\n0e72da7e-5d87-4d6e-a856-f704eec26175\n2b4a375b-38ae-4558-86e9-b67f12f1615b\na07e94bc-2ad2-45f0-8871-1e6c4d99a67a\nc7e51689-20db-4d91-a58f-520d96f9dbcd\n0051bc7e-9fdf-41e6-b7a7-f921a41cce5c\ndbd6f30b-1b8a-4aac-8d43-277cb3f189ad\na49ac9e4-d5f4-499f-879c-e111068d6801\n2df4ad44-dc32-4190-bf2e-141ee8109c65\n2e631ee0-1120-4f23-a489-d57ad9735516\n4e28ab18-5321-4c0a-aafb-efdf0fceee42\n22e8e0ca-5eba-4efa-863d-6fc0808a744b\na42de876-e524-45de-8d2d-f8221f4cc4e5\neb14ad13-da3a-40b6-913a-2af720ae505d\n531439b0-fdeb-48f8-9616-7ec8b6caf720\n6dc06f69-7a22-4ffb-ae03-0e898b8ecd49\na664432c-25e0-42f4-be76-42dc5ce724d9\ne4b80a17-3f0b-4a6c-8a25-dc1a61f0d9f1\n501daa67-37ac-422f-9a82-ab443f08cbf9\ne4e4fc12-c961-43a4-bdef-35f3c8c7eafb\n8b487a8d-f9f8-4501-9215-e94b76e56ecb\na0c58c16-6ac3-4d34-8fa5-c0bd326264f8\n1e4af601-404d-42b7-a15c-fa11cb5d2e6a\n45dbef19-c5c2-483f-aa85-b723330b9244\nd364286a-008a-4ded-b4a8-cd6cfa82effe\n9d2423eb-cfea-4252-bf3d-b2c4c898aa79\n19968b42-77c2-4a54-8f03-b4a64c27832f\n3e1f578e-528c-4ce9-b369-b191c65a0e80\n6e7ac062-5d72-4906-a639-207d6fc932e1\n1995b73d-76ea-4e2a-bd22-e713a68c0007\nc52753ef-ee02-4e09-aafd-be98026ec016\n2e6c6000-05d1-4ab8-9498-7737e2c74077\n73c42579-30f2-4800-a7b4-0af3e32941a2\n678fd894-565d-4f78-b963-746f88160e79\n6f14b693-989c-42cc-b5f4-e37c714d53be\n2c6ed24c-0684-4cf1-9946-92bf109d77e4\nfddf4775-03ef-473e-a1d6-d83c375a3d4c\n1cb76eb8-cb17-4a6b-8836-492bc609cf48\n4df48358-68e4-48d6-a5a9-14d837d9bd12\n1666ca94-ad23-40c8-badd-c607a8d86ece\n6104cbbe-70ba-4e34-a16a-acc0f504adff\ne7500be5-9951-4715-969e-883df6254296\ncca803f6-bb26-40ba-b49c-049364b45cb6\n301ef1bd-fce3-4337-836b-23a5f53ca482\n267bf766-27d7-4de7-a925-43a4b80cc80d\nd608a985-4773-4e87-b758-a211fed2e8bc\n26904a72-d981-4a12-a7ed-8839557c9a18\nd02f8f0f-8d75-4ff3-a2fa-0fe627331ff5\ne357ec5d-1dce-4a8f-bd7b-32c0d53cb4ab\ned8217e0-e439-45f4-adf7-48adca427f55\nb8b63e7c-09ef-476f-8c76-286a0d60b577\nc20ba837-b23b-4885-a282-b5edb1b0f34e\n0819db21-169a-49d2-ad23-ecef1f48a94c\n35ea2256-2bcb-45d5-b113-266583b8b7b7\nc92b5be1-26c2-45f4-a776-7834290c0d9a\na072f2e3-91bd-43bc-a588-dfc0c504f07e\nb4378826-028a-4a8c-bb53-b51d9261478d\nb5cae15d-5846-43eb-93d8-f23de99cc83b\nd7020180-0b0f-48c9-ac43-972e511b733c\n4ed87cc1-83b0-4b2c-a40c-a9d448f6b9fb\n6f656deb-4bf6-46a8-b24a-7e010617cdf0\nf18986ba-4d5d-4dc6-8dc2-e477e1134299\n2cf4e892-b50e-4f33-8da7-0a82a3733725\nc92382b7-8fed-4985-ba98-0a4b27d5b798\n0a6b3fce-0747-4344-95ce-243547e25b9d\nb500495f-1e23-4fe3-a6bd-df97b43adcd3\n2bc593f6-e2f1-4d18-b70d-1207866ab927\n4649606c-c77c-4290-a2f7-7ef0bae5350a\ndfe988a2-f7c8-449b-af67-97813356543b\n3d15496a-feaf-4ec4-8680-1afef5f99587\n857c319f-70eb-4252-895c-01118606a456\nb1857961-016a-4e51-b6de-6f2c1dc65992\n60bf9045-4e5b-45f4-904c-1e037f3deff6\n9f5521ab-7aaf-4533-9409-6fe9e651777b\nc74d681f-da7e-49b3-891c-a85b4d1ee143\n10237731-f432-4102-a34b-a32855800f54\n9f5f5f0b-7749-4e6c-b2a1-79052c14be96\n469f6dd0-3a4e-488a-ab7b-3207147d03db\n09eb569f-76d3-480e-a3e7-5794eac71570\n815c100a-5b0b-4748-8d95-9038d3b5c981\n718b0fe7-7270-42d5-ab45-a83fa3407985\n72814451-bb7a-4e93-8a00-88ea6e4e28f1\nb4a893bd-a75e-48aa-ab13-cdca7abd9c43\n50cd1c8f-2cd4-4820-81e4-9884dede16de\n5970cdb4-20a8-4a10-bff1-b0bea2065ac4\n15be5be1-db0b-4f5c-a86a-97228e5bc1f7\nd4652e88-616b-4d46-bad7-f5a83f3c6c9d\n9a068f90-288d-4fd2-b573-44e329f40840\nb503eac9-ba92-420d-b059-7d45bfb6537c\n5b830d29-bbfd-4b90-9da9-ec2cbcabad82\naf447f12-2bda-4b14-997f-a2c76edced89\nfcc53cf1-ca91-42cd-bca6-6dcbff9f17f5\n531be38b-cb44-45c5-b7d0-0b139d8a1e1b\n54827c9d-b811-4ae9-b51b-c42c267b4bdb\nd10a6c0c-a66d-4047-91f6-9844db0d660f\n6b87b559-d1ae-49d0-898c-84a8b197f56d\naa86cef2-e55d-48a0-b813-9a9040c7c893\nbf24f0f5-330c-4bad-b1d5-8cb43e829a3f\na13527d9-7e09-4c18-a87a-509036b08cd9\n479732ae-d16d-4825-b265-9009615f50bb\n9c0ddd00-94d2-4fb4-b9ca-e7e32950cf41\n46f37722-7f34-4566-ae56-b4505e41877a\nc5813ecc-3ff5-48aa-8eb4-526affffd4ad\n0eaf8faa-879a-4584-b09d-874410245017\n2ffa6ff1-e7af-4afb-9c10-cec96643725d\n8525161e-a611-49de-b1c8-f569315629da\nf80eabb1-8a38-42be-81e3-d4833d5de040\n62a5cd1e-d49d-4640-856a-eb17a1e28e14\nf8931fa6-c9ff-4de3-a096-6c7e29b5ac13\nd9be0b46-4c4a-4928-9f31-e6014af89fab\n903fb66f-cce6-481b-b074-9064f49df2a2\n5241392b-4d19-41e1-aebc-1a843805e5a3\n52c72cbe-fb7c-4f1d-8e9b-741bfac83ddf\n7d120ef6-29d6-4c13-b31b-3e196d63d497\n52c50c5a-d82b-4f47-b925-5e9baa3eaafc\nc76c0f62-21dd-4524-9a96-5a3061832658\n71d09db0-beaa-4078-b930-6f084593b2b8\n46232f38-66af-4755-9f47-31dcd5712223\n30a3c663-cfbd-48c2-872a-5f8ba5350a8f\nfb35a1d0-4994-48ef-a5cf-6700b5559435\n1031929d-cd3d-4344-ae4f-5bbf175e0eef\n897983e5-1061-434d-80c1-68411453764d\nab05b2e7-cc21-4fb9-b414-566bb28530f3\n501058ff-fc05-496a-aec7-8198839817d1\n48635fd6-b151-44fe-b63b-bba4b34683f6\nfc2bd424-54a6-4892-ae5a-f27d24384bcf\n4ab3e947-185a-4ee6-a653-e34f9518bdb6\n2ac47ee9-0dbb-4673-a895-2061aca25a05\na24a1371-9275-48b6-acbc-55e345a57b88\na7f1bad6-6f86-4712-b052-b097a4fce550\nd8be38dd-b64e-4872-83a1-ee69f8b8ff50\n2720a798-c2cb-4594-89f8-b366a1f608bd\n33922a23-207d-4a46-a21d-7cf89803f50e\n268eb22a-3f3c-4a72-b455-9bef08bbb03d\nc56573be-86bf-49d9-9886-9922b5fe6aad\n9d5b1b05-8dc8-4a5b-8d2a-ff91adddbab3\nbd6e77df-8950-46b3-bed9-c4c503aaee1f\na5810ddb-e255-409b-ab29-dd95a9908f10\n24efbf22-ad88-45f6-8218-82b830cf6123\n10e6bc32-c89f-479e-aa89-fd2c72f69e63\n2fb36575-310c-4d8d-ac9f-b809930831b2\nb3cff07d-8a7a-4da1-8539-ec9d618bd855\nc04ae4f1-c52f-49f4-9148-210e556b4ce6\n670c0339-0eb1-4216-96cb-3f9f30ea3735\nc68ae9b3-2607-4458-a780-a4cf78278086\n5bccc991-6342-48e4-aaf7-adbda92bebb6\n304f06df-394e-4405-9408-45ab312a7e45\nf25f6455-9fb8-42fc-bb95-34bcf117b7b9\n5f8043f1-4516-4198-ad95-1988a8735698\nf9a4a3ba-896e-4d4a-b1c2-8d86dfefa165\nf3c8b918-c8b7-417e-a809-a165de72cc51\nfe755ad7-5cdf-48c3-b18a-2afd647d1ef5\naa0e4a5b-e9ad-4d2d-b066-881f8da9ea51\n6f1310a7-b039-483b-ba48-b207a59f8c1c\n6da4101a-e415-4a98-9310-d5b23bb45266\n0934d48d-47d6-4c88-8534-7b65ad3719a5\n82530d78-5805-49bd-94ed-db978b818e19\n8a066d55-0cdc-4eff-bca2-3f0f89447d38\n88e7a3da-91be-4036-9407-c34318945147\nb28e00f1-b82a-457c-8f04-91146915874d\n7174ee74-3264-4bac-ae9e-9bac14efdd2b\n80c06761-d4ef-430a-965d-b314b11663e4\nd7971b63-8ca3-4899-9721-81fd9e8d2919\n183baa0c-cc8e-4ba0-ab6e-110523d6de44\nfed4a638-8739-488b-8232-533f3c3730b6\n61090c9f-c59d-4164-8a82-ef82e07a0806\n17959092-8278-46ea-b2b9-5c706f06c249\n119f2361-9479-46d7-909d-3575b97de362\n4ec6979f-8c41-48e1-a06b-bd495d948e8f\n7c78a241-ea52-4b4c-b054-9b8939193606\ncb13df74-efd2-4acc-aa1d-34afa1d57dab\ne477550e-0101-4238-b5ed-e8869db4fac3\n988999d1-8f1f-4636-8716-e373b1e32a2e\nd925ed42-6319-40a8-b2d5-ee542484ec71\nf25edc19-d01b-4870-accd-313fd2c19e6b\n1d647260-7998-4575-92f3-30d30de9a1f6\n666ce6e6-dbef-4e98-972e-e2b77e2d3d8b\nca945904-6097-4d37-b882-bc1893cb3298\n810ab3f8-80eb-4d42-90aa-f2828966efd4\n80d4bd80-0536-41f1-a26d-9013e50f65cf\n753fddf8-6c64-46dd-a996-2ea19ef14706\n90fa68a0-5169-44f9-9bc2-b0fa159498b0\n4061c90c-1090-45b2-aae0-66911ce9f43e\n28b47496-71c1-4947-a803-7522d28be9c2\n1d70752d-df6b-4fb9-993c-08084bffa4e7\n7bbaee4e-cc06-4ebd-b4e0-e89e5bcc18b7\nc034ebc7-fad2-42e3-9a1d-333f85be7e0d\n828fe40b-2b1e-4da7-9314-a48679f6d801\n4974bd7a-d8d9-4c57-b414-f7501de13b3d\n4c193dff-b05e-4849-aa06-6fac2d214767\n9b389c37-b830-431e-84cd-772bd9a8eaec\n45663245-efd6-42fe-afec-8ae64bfd637d\nd37fc703-8afc-40de-9891-de6a645f58aa\nb8635b7f-8945-4381-9477-a989be5f8461\n4ccf52d1-a2c8-4205-a73c-d00fff8b3dd0\nb08908b1-866a-42fb-9272-c5511eaa974e\ne44ac3cf-84bb-4c26-bb6b-19858341c6f9\n8cb8c086-3a59-42eb-8685-9e6ffac8925e\n4b71ed8f-85e9-4046-907d-8330c7b25994\ne0f9589d-0ee7-4102-9225-288a252a3aae\nf142cc0b-8b1c-46a5-a3b2-6381ce99028c\nfb29a828-da1f-4347-a669-7816b9a80c6f\n5584ac8d-d95f-4e40-9b0a-80a42663478d\n1fb0598c-34a2-4c33-afe6-9458c1471e25\n24b3fb47-e05d-4e80-810f-25e95e1c50af\nf56c7914-a5d3-4d42-8663-277378652008\nac119458-fa7e-4ea0-9033-0b4d8102e169\n62a26155-ee8f-43d6-bdda-cc200c51cdf4\n48d2b5a3-c1b3-4518-b818-a4ec82c956e0\n629703a7-760e-48dd-85e0-c21eb5afbbed\n390eb8ca-8abc-4955-8178-deb6a9b65332\n9a24aaea-649f-42f3-a194-f740b16ec5b3\nfb4d1d64-2f60-4cf2-8333-25cbe8b12c9a\n4b04ae91-d74f-4b59-ae57-e16563b45f4b\ncd747633-7aea-4350-a03c-d3127ff69441\nb20cda7d-d1f4-4805-9edf-8e4ec8840ab0\n66519432-1afd-409d-9825-367ee801e111\n1a2db74d-4825-425d-820d-ffd5b3d1cef5\n81ed0e68-9661-4a11-a1e3-3ec1b4cbe655\n185e8870-0619-4b03-8be3-d7957a6bfb22\n16c46a99-f3ee-4691-ace1-5e851e08cc5e\nda734606-be78-49f2-b6a6-4dca5d04f193\n2f81705b-5323-4a05-b552-381984722cfc\nb68f4758-3cbd-4290-82ac-7a7be2642717\nd0571045-d582-4aa5-a7fc-05e05e537847\n8043d95e-08be-42a0-a35c-385c9f94496a\nd654c789-3950-4ff6-9f22-b19030ac5637\n02520f8c-c265-4b3a-a8d6-b66fc712fe23\n065e31ad-a1b9-4546-b930-98e117519320\n333ce2ef-854f-4071-bc77-46068610540d\n29ed0f75-3c54-46a5-8222-9dd11e32746d\n4efe8e94-4026-4ef1-9310-0334fe4c1f78\n9dc42ee3-6778-43dc-8e11-e0f3a7c3bcbe\n1a4a3ac8-0df5-4b70-924a-4ce3b3b55e33\na3c4b3a3-30db-461a-a7b6-fb6d684def10\nf9a95f7b-3062-4db5-9feb-914006792a57\n71f023fd-c80a-435e-b89d-2387e34c0a7b\n0788f7ed-b344-4cb3-a84b-2073d41b018c\ncbadeed5-db8d-4648-8ab4-5abb985c3293\n084e5a84-92ad-46af-aa36-61ebe69f25ba\n0d976db9-d8ab-454a-a237-8405edc63293\n8831e9eb-d19e-4bb8-9d97-5012c87b73e5\n6667400e-695d-4f7d-b5a8-ea5e11041c08\n67502158-66f5-47c1-9e2d-c47860c44e76\nb4a1e53a-a6fd-40c8-8b70-71e3ef12e4c8\na8e12c51-47e5-4e68-a3bf-255623e80e60\n8a6a144b-3cd0-4a2a-8957-f14d4d4d661a\n7f986e4b-e2f7-481c-a6de-75083e4acb81\n5dd5477d-9899-4b68-877a-46175219ef51\nb1c8a1eb-d66d-4d4e-92cf-fc067916d905\nb786eb4d-1ad5-434e-b1d0-7b4deb32a8a3\n3cc5ee48-74f2-430d-bbde-3c56dfa677fc\ne1b652de-505d-4d65-bfcf-ed03864f40cb\n076aa4ec-47e7-4f40-a00e-fdbeb7dc94d3\n1812b9f7-fbb1-4347-bb4c-a6153a1e8357\n068a3d4a-d779-48b3-be51-6479088fa963\n63f95bd6-61af-4d77-94ae-5d35b67fd20e\nb8a9be5a-f97e-406f-98e8-3a448f90b943\ne7620da6-da80-4aec-a7a6-1dde783ee01b\nbf67e3e0-bdf4-46db-907c-4b6ff411fe4c\ndd54036d-423b-4d4d-b97a-7df76a38ac0b\n6a1616cd-ff37-486c-af05-c0113e45b1c5\n79d3ca55-c1aa-4f0f-9c12-6008e613979f\nf009c7e0-f67c-40da-848b-2abe55a3d978\n912fb95d-ca48-4ac3-8b86-8676d892c699\n94d255e2-fd84-4afe-85af-3105e6e55ff6\nd92cf08a-1920-4904-a8fb-9dc21a0faacc\n2b950649-2f35-443a-b1c9-5b1bc170d247\n4cd6baed-f31a-4c44-9dd8-ff523e587afc\n647b9bdb-3e9e-4aed-909b-d37e3f351c1f\n1fa8a164-a72b-49f5-bb5b-53757cd4e64c\nda763ddd-ab8e-474a-b4f2-546979b7c378\n8ebfa9d5-c00c-4337-86af-97f17657590d\n5929f02e-be98-4949-852d-0a4f4cac0104\n25793513-820c-4049-b697-5a8ddf1c229f\n7d4636df-b4bc-4b5b-9d2e-b16d4f2a835c\n0575d74a-d0b9-4463-bd1b-d5f62a0fe33a\nf30d1e47-6358-4514-bad2-6ee6c3984e5f\n3e4abeef-ab6f-4d8a-b4aa-147b77bbf2d0\nde362cbf-cb6a-4e59-9708-fd5a31eca55f\n8cbffc30-76cc-4e86-89f8-fc635dff6abd\n95d90df4-8265-4c36-8d56-28606a75f475\nc7124450-dcda-480e-981e-9a1853d08da3\n5ff37fae-3ecd-4408-99a8-10587355ba88\n4ff6a95f-b4b6-4c44-897b-5ad6aa8d9c0a\n1367f118-8efe-4736-8d18-4ea24123dd38\n1c9dfc88-b60f-4074-adcf-5301b74eb174\nf8ccb76d-821f-4950-b254-b5758112a2e3\n1a4ca3d1-5b02-482f-b1c6-ecfaec4bab74\n86a75c93-dcaf-4239-9a15-a6afa7c74d07\nbdccd57c-bfd4-4088-96a5-d8636f392a21\nb6a5193a-f85d-4e69-a09c-081654538d19\n43511e2c-3e4c-4895-b008-8586d06a6d65\na90c84f1-e9ea-47eb-8c9a-115a9a684eab\n61470399-a6c0-4f36-947e-f96313805c07\n7ccfcda8-3f6d-44d2-84a5-d5d6419ac574\ncd5307a6-7620-4986-8268-dc75a869bf92\n4ba65585-9196-4a6d-bb51-3977e12eefae\n8704e82e-b148-424f-a123-303cbbf42f75\n7119c943-9c3c-4496-b261-2a7878e55283\n9a77391c-1a54-4922-b34b-06b9877ca58b\n4e9ef8bf-0831-4c6b-b2d5-cf185a24ffe1\n4f038681-b9ee-4fec-826c-b64f1d14e495\nfb307c7a-5eef-44f0-97b1-bcababa14de8\n19a047b4-0d81-4f34-995d-b0bb3e1280ec\nc7eed4f0-5f84-4f02-ba66-4ba85f9c2e9a\nb995164d-f035-46ae-af85-8680c1667956\nae73f6a1-b016-46fd-9136-bcc87178cb79\n28e69918-39ad-41aa-96bb-5dcc2757b947\n4785b458-8c33-4e85-b411-1c4c98646b59\n0f0093eb-0ae0-408e-b50e-2c1824a62c1d\n17e6ebd8-294c-477e-80de-f7ad20a383c3\n26491d75-ff2e-41c7-90ea-f28f1f2ab679\n38b05bbf-8872-4659-a112-81fbc210a09e\n2f077809-85df-4097-9c2a-8010bf31594c\n39c861f3-6903-40b3-8cb1-9f391999752a\n3964f3e8-7531-4bd3-a99e-2a444a34d834\n943674a9-34d9-4c98-b80b-46be2af0a7b6\n69806dc2-0f8c-44eb-bbc9-048a545240d0\na18adfa0-bfa8-48d4-adc2-91497fae3fa8\n151ffe15-904e-44cf-a726-c4e1d36770ed\na301ad27-d3e9-4dba-8ef6-01727cdd24a9\n6dc833a4-22d3-4d96-847c-1c493a689ef3\n1edb6850-5a2d-427a-a2b6-7ba9ef842a7f\n01702753-81f9-4839-b6ac-025aed470a40\nf297b669-3f39-4a54-9183-fea36159b74a\nc5334962-3822-471f-876d-739200a7e50f\n6288619f-aa03-4b4b-a181-5e8219953e2a\n0fdbe271-6026-4c74-8aff-72d0e72df1bb\ne505d738-0a88-45df-9a29-97d03151e34e\nb95d7fbe-d73f-435d-b87f-8f10a070620a\n3e706eef-cb96-4971-bc9e-8f99489fddec\na2d7bd0d-1a70-4299-a8ee-759673a362e8\nf1bbc946-32e9-48cb-aff1-19ca3fa93873\n2280572b-f9bc-43e0-b5cc-4a6bec95e49f\nf3b5c469-3878-4cbb-90f1-997f68bc9ee5\n6c585e4f-7ef3-4735-8a99-0698ce01333f\n0b1dc5ff-39e2-4e32-a9ba-646972c29f64\nd3a0885a-5b8c-4f70-8c25-3a3ccbf57d7f\ne1862ae0-d381-441f-9a21-1ee11953a050\neac86148-965b-4775-99bc-a2bda6f31eb9\nf5401943-2883-4ff3-b0e3-52eb49292e5f\n2564c539-ae91-42f9-a608-41c6256478c1\n7eb12c91-52e4-4fbf-9674-9da884e86f1c\nb7dec02c-8f13-4939-b7ae-e5c9c429fe28\n4de95b7d-0eea-4a42-8b7c-11c75f3b7057\n0ce8816f-0ac6-4bc9-ac06-f38cb53e4e2d\n0cfe1e7a-9175-4eb9-9964-13553ece908b\n3693dd84-440f-4a7b-91bd-e2b60429695f\n754775d2-9dcc-4140-9f05-05114c885cd1\nbec16171-3df2-457d-905e-512192a10196\n68631b58-ba84-4662-83c6-c29440e5d761\n5aa23fdd-f7c5-41c9-8528-dd574d73a6e3\nf6bf302e-079b-4c1c-afad-7019dd92f63b\nffb377f8-1f28-46a0-a01e-b4a62d78f97a\n8346ea9b-5ffa-4c02-bccb-bf0a6b8bd37b\n5fd29bed-92ef-4dae-873a-099ae3192227\n0547840c-b45e-4e49-a01f-65d095d46584\nb7c80087-3194-474c-82d4-e9a94fcb881a\nad88460d-3a5a-461a-a5a3-354391a42834\n9af96251-0bb1-437d-8201-a513d2070a76\nf441354b-0706-4834-9056-a515d19d0816\nd906293c-32c2-4db6-8e7c-c465b3ce1833\ne273d860-704e-4a3b-ac24-1c0dee04903e\nd520f29d-c1c5-455c-896d-54e5b3afa6ef\n91b57106-0c11-445a-9511-2ac800141434\n2de561ae-ba87-4068-bdba-469e9ac1d6b8\nb92bbf50-a954-4d45-89b3-56e7c1162fdb\n14d9afc2-1506-42ed-a210-280cea68c8b8\n8239b9ac-457b-4f55-8b5a-478725cfeed6\n53456464-ac68-4515-93bf-3afbe24eab28\n0d1c2f3a-8f23-4461-a705-9dfe6749e865\n834de436-9fcb-4d97-ad7a-f8de51bd0b0c\n2cec37c5-1e11-4552-b6f8-0ee06d371293\nb2e4e8b2-e073-4096-a476-6ad01f6832c2\n63755887-a670-4051-9e72-cc84bc428a61\n1efa8972-329c-4966-801a-0d1b4daa78ef\n6b7eabc5-853f-4c38-864d-5e13d6f86ca8\n49bb9c05-117d-41e2-b85a-cec25af03338\ne97708eb-bdd7-4410-b5f9-1d7e011b6a02\necf18380-fdf9-4f88-b6c5-5ed41e0001f9\n03a4ee73-5e05-420e-b49f-5efd5745d786\n6f849c69-32de-45f9-92c1-a252106cff1e\n845af155-510e-4dcd-82b3-6ad46321eb5d\n7cbc13a7-d465-4b85-91dc-021cd7a725b5\n583da6e3-9428-4e35-9e4d-29df4dbb4383\n0a2b8a84-d6d1-40de-a396-e8c8e69407a8\nafecd9b2-3b4d-402a-947e-f61e0a9ab6db\n8a16ff11-a611-40a3-8e0a-84129629332b\n549df18f-01a1-47e5-b6fc-3cb411276fb9\n426b7c2f-2769-40bf-b04c-b834e89a4336\n34aa1a6b-f3fa-448a-8182-862e7475d53f\n400edf6d-ed24-4adc-bc86-0918040fc2d7\nf075e735-fb02-490e-843a-bd6fd7c94f2a\n99c824d8-5792-4d64-b4f9-92e31232a37b\n79c71c9c-95d2-475f-baa2-15077879861c\n9915601d-3027-462b-b308-8daa4ce7358a\n12596609-6e9c-44c1-a371-1ec6b18880ec\n142c466a-8962-40e2-9066-b6789e720241\n27a3271c-87c7-49c1-a5d5-deebb96e09b2\n692cf1b9-a914-4f1a-a45d-e566952382e7\n1662133e-b240-4865-af78-1d053b762302\n40b5fc68-2486-4674-aff6-61dff70ab29c\n9d737456-601c-4683-bd69-60b335da3783\n2dcea9a9-52e8-4e0c-b740-a09631cec432\nc4744ede-4b37-4779-956e-7ca05cac3763\nf7d59321-8653-46de-b9a2-280e1aec8f05\n8fb3b144-d96d-4545-a8b1-ea5e497b8c91\nc9bbc0ba-129d-4a01-b95e-7c7cadc4157f\n3d5f3c86-efc7-4c89-931d-17acaceab5e9\nb180b6ad-437b-4001-b089-ec1562ad4f35\nbf358a6f-dbb2-4732-a0b3-3a7e04a1b00c\n0fecff99-76be-4c13-8f5c-0e755c5b3b02\n3d6f693b-cf76-4885-9924-151978a17692\nf87983c8-dcd7-4465-bfe8-dd0437f36737\n8c434f86-21aa-4c8e-9e40-d559944a9b58\na28665eb-68aa-411b-84f0-9e245b9156cb\n4a7cd340-93f1-44cb-8a5b-0d37c3e20b28\n5ac47cda-1618-4e1c-b31c-3b32bee2a52b\nb9b7b8a4-b34e-430c-95c0-53dd2e33890f\neca71900-938f-4b90-9ac8-4556269b143a\n7b4f4e21-8bdd-48ad-8f20-e9982b2f0d55\n1d9ee2aa-987e-4bd6-8f54-ed68491e74dd\n5a800dcf-2a10-4834-a8b5-74f748fb055d\n8445bf12-be86-40c2-8a3f-45f19597e9c0\n86a425ac-a2c6-49bb-a067-a663eec91b74\nf7ed9a83-172b-4303-b2ba-8862a2e69076\nd0f8e3e6-8682-4bab-a292-81a4008519fa\nf9574b3f-a2f3-4610-960e-09273558e290\n97d7aa37-5685-4258-9ce0-4ba76c089500\n3dc36326-cd5e-4db8-9ce3-fd9f5ad2e794\nc5f6c577-d196-4986-8273-4ea73bcfb95b\n031080f1-a0d1-4ed0-8129-c7931c35c83c\nfe090024-93e5-4fce-b07b-ea7177246e40\n85b11e67-b78e-4569-88f1-882cb440a7ff\ncc5eea4a-c31a-402d-81db-f0d22d561785\nb31deb7a-241a-4bfb-bcaa-7cd3d9107b0a\nf8e8647a-996f-4fb1-b40a-31a894546110\nd311964a-fe4a-420a-b583-4785862fefdc\n90366c15-6bf8-47fe-a348-35eb6066d819\n4f601fc8-68a8-4917-b86e-8298888566a5\n26eccdf7-4509-426a-83f1-cc8f50b977b4\n8fc48abf-fc79-4b0d-ba47-c94ffbf128b4\n173e7d62-efe1-47de-8791-26134903f163\n12450bdb-61b8-4497-8646-77bc96c0bd5b\n87e78aa3-3eaa-4160-acbe-4cff939dfb0f\ncae8738f-799f-4bef-a525-c88140fa1e77\n9c3da46e-8292-45e2-bef5-555293a2d36a\n888545d7-4e10-4d64-a526-c822fafb6f2f\nfa3f7725-df00-4c0e-bd2b-3dc28f7a8029\n8ae22d4d-d83a-4424-9931-57dbf5f6e46a\n05b94ea0-6481-4732-a38f-6268f876ddd8\n918515c4-dba6-4ffa-ba5e-9fd4ace14470\n06f1207d-c567-4f7f-b32b-b3e342d0c5f2\nf18ca928-97ca-46a7-b491-403cc9ae7eeb\ne5924ae3-ba1e-4995-8271-f49dc50d64d5\nbefde7c6-1b94-4415-926a-095aae0b4f9d\na177d24d-a385-4646-902c-56ac0dd6c9e0\n2f7b92f1-269a-4ebb-b3a9-4bf6e65acd7f\n0a85e8e2-61cd-4c11-995f-5706783af198\n5dcc6298-8901-4eff-a85b-4abd78484872\n2654bb78-64c3-410f-b5b0-79702d97e124\n9a8071ee-4a9e-42ac-813f-45e2c131c243\n68919728-d41b-4104-b6f4-8e46b19d04e8\n229b8d5c-c147-4ac5-9cc8-94a68b59e41d\n888ff602-b217-4e74-b210-4462a9bf8ae4\n5c86bd4c-f699-467d-a04e-11ed97cd510e\ne2d82fac-13a2-4a4e-9d80-6d130883d2b8\n0e7ba4a9-50f9-42d7-83e1-73cca61b2c0f\nf246ebda-b363-4e0b-bc0b-316a11e342fd\n8dad6a93-07fc-4938-87f8-e60b01cf4324\n39fb1a58-d6f8-47fd-878a-45576279649f\nd43cb241-32c7-4f21-b0b8-8878c8cc2e38\n144b37db-a5fa-41ef-9e37-3940298b449e\n94588433-eccd-4e57-a512-7fc6a2c73c01\na7c96ad2-567f-483f-804e-68c57ca670c0\nb59776c8-8b47-474b-929f-b084466a2527\nda0deb0a-8a94-4b51-b741-05c3270f0b84\n8d718e87-71ee-4167-b31d-840f371b3464\nf638b15f-06b0-41f9-bf2a-6162be6e4285\n9e10bf41-16c0-49b6-bdef-1f90a0ac1938\n70ad10c3-f8d7-4191-9a8a-0458e68d4a16\n5bebf199-60ea-423c-a702-acd8c5eb85a0\na62f741c-2c7a-454d-8866-f2653002eeab\ncfa915fe-7f2c-4d6b-b050-f68c6c63e1f3\n8697e9e0-0eb8-4de2-955d-8b931b475744\ne739364f-2792-4461-ade5-2e6ae7aa9369\nf14a6ed4-d00a-4724-b4dd-8e1b58ab4872\nab45e61e-4fdf-427e-b681-9482e95867d3\n93ada663-5f57-4d74-8e08-a4aaa53ab609\n4faa6ebf-76de-426e-a4c6-aa89653e57af\n9edff426-b079-45b7-98fb-3af426f7e082\nfdfc6614-b424-4b84-a8ee-39350229e901\n69c0bcef-e509-49d2-9e3f-6100152eb38d\n50236b78-9d70-4dda-bfb1-8d891c2aad17\nebab875e-c927-4279-9d59-03012a2c374e\n78083f45-9fa1-4659-b1b8-cacbd3ad1963\n60d7fcee-b57b-4c8e-97cc-c04b181f3eb1\n0dcd1b3b-b35e-43d7-9a9c-fcb71edd632f\n6d188fb9-aafb-45c3-90a5-7790dec7ad18\nf38a290d-cd8a-4633-ab45-c1fada801835\n177dc765-2ca1-42bc-a0b1-385f37debca7\n45222e94-221b-4755-9791-b167c7efe334\n090fafdd-4b01-4d58-8c5f-13db54deda95\n8658008d-2ebb-410b-a8a1-76303b825890\nff04ac68-28d0-4af5-bc9d-1f5c85cc3a17\n113895e7-fc8f-4b92-bde8-c9ba218d86a5\ne2d367ca-3e19-4f9b-b562-019629bf8dfd\nc5164221-a4f0-4afa-bef3-3db447df9e40\n62026442-3b61-4605-85b9-fdf81449a6cb\nd9f536bc-45b9-4f89-8ad8-b7aa8922a38d\ndb18862e-f61e-460f-aaf8-9a92426dd099\n9bc14bda-ac7a-4104-81eb-153cfe402341\n84559e6f-14d2-4d67-ab12-e8a94e4a9fa4\n3427adc2-e6c3-4da3-9b49-7d3007c1f9a9\n0123bf6f-1359-458a-b970-3294cd9febb1\n9bfbf4a6-ac98-499a-8307-eb5b9ae3bb0a\n744327dc-8eb3-49ae-9c1f-bdae8bd3d280\ndc4a1b30-104b-4de6-8b6f-2a61d8110312\n08d61dd7-8154-4626-9daa-128521a129d2\n3446b7a2-be96-4369-9f20-57584b70130a\n4910d61d-6ba2-4973-8ebc-fe9435c6c93f\nba36f917-3538-44cd-8425-8d6c2ed9cec8\n55402bb3-ba6f-4dab-a177-cfa29e738246\n7e3cac73-acb6-46b3-a121-7fab0156d5c8\na4733761-df61-4743-818e-fc75ea2fafc1\n25525b9f-08eb-40b4-ad9c-41e7c36052d2\n8714aeac-2cc5-4d78-86ea-007eca7a7d76\nf2b035c5-1dfe-4a26-8796-35d2c5286f48\n484244ee-8bff-47e5-81af-a3d66137d720\n34cb6e50-c218-45cd-b356-da32d0a0a630\nee6f677b-f4b9-4a68-90ff-a2fce7dbc621\n3e9eefb9-2c21-4a8c-bbc7-7acb896e6bba\n6278a59f-5deb-4559-8e6d-417240bd88e7\nba24b8fb-b785-4190-aeb3-d045db88d020\nde341198-ca37-438b-a33f-458712f8fab9\nfed8f2dd-7fd0-487e-be33-a72a2ccc8ec0\n4ff06790-60ed-4f98-81ba-27061fe0a85f\nb2d2e9ab-ecef-43c7-81e8-b05fa843f19c\nf022aa2e-013c-4b0f-92d6-e064ee3a9446\n14f02d55-baf8-49ea-9349-ef2c795127a5\n3bf0c68d-b620-4861-94c2-f7d0931e8d93\ncc26b803-53d8-48be-aa65-0ee8309cd959\n6191d9e6-3078-46b2-94a6-ada86804d0fd\n646ee91f-8652-4f75-9596-3d279825abf3\nc38d67bd-ba70-47c6-b475-c18946406473\n6b6abc8d-3399-4ab6-842c-9c06a595aecd\n3037603f-fa47-4af1-8d96-3d645bed0423\ndb5905a8-5de6-4631-9ff1-52f28e992a49\n08874932-a792-48ba-b6a2-684031574cc2\n30956e46-243b-47c8-bcdd-81508217f480\n3145afeb-733b-477a-8820-01a93dde1f3f\n738f955b-8da2-4b8d-bdfa-018654693378\n6d5a4a33-cc6b-4c55-9b31-8a9963101b92\n4555c490-a600-4a81-9d87-8c1184965170\nbe59d49b-5694-46c7-97fb-76d84941eb24\n2b601a04-70bc-41dc-9f38-8fa433cc6295\n0115330c-1a8f-4442-861d-16730e914cb6\n14959e9b-c0f0-40fb-ab6d-fd5cfba17c68\nac3ad6f3-ccd0-4879-8981-78d33a51e552\nffb3c1b3-bcbb-4f7e-a662-eb711aa5eea2\n33068253-6b17-4770-9b39-553ccd213951\nd1fa588b-b10f-460a-9724-44ae4c716c6f\nf4569764-0718-4bc0-ab6c-18ccc02ff2ef\ne0254f73-22f5-4087-960a-616a85da760b\nc6a9fe0e-53f8-452f-8f97-a1b941fbbe92\n0f999cad-9cf8-4637-983b-3fa56a2323b9\n7f861d62-274d-4438-a216-08e12f22019c\n258c8504-9d05-4a84-86ee-f366bb04a837\n8cda50d3-bd4e-44cd-8102-5bc4a440d253\n8e724bc9-cae1-45dc-acd6-633596430e26\n13ec1f7d-df43-4806-a5cc-f1dc3b8c6ce4\nece50995-cfcc-462b-8819-8a0c1766e6d4\n5154a1e5-6614-4068-8f1a-5aa289fd0a09\n331635df-caea-4911-b1de-c53a4e0d186f\n338f159c-3fd8-4888-aa3e-8f22ecd562d6\n2552edd7-3148-4b5a-a024-6201bc8aab3e\n438116c4-1dda-4492-8a4a-8b8c946cc65e\nc97ff50f-103c-4637-ba63-073354edece6\n67a503c7-6db8-42ad-88bf-edf6f196953d\n8fefe13c-b568-431c-a667-400c8215a964\nacfcae36-4f4b-4e59-b1ac-b4d7a9d9d2aa\n3eb8bfdf-7135-407c-b59a-8c495484576f\n98af32eb-bf9d-47fa-bd88-284fcf7ee353\n56e044ce-6fbe-4996-a660-1d676ebafe3f\n51dd68fe-0d29-47b0-bba3-7768c1bead60\nf2de27ca-02e4-4838-a951-49c39cca035b\nc1335f62-7948-4bf1-a0a1-dc5df08e257e\n8bbeeb98-0042-4954-adf1-392b75f54e96\n51da53d5-c5a3-4cfe-86f9-4fcc76bba554\n1f19069b-f1a4-4563-a8ec-bc6063100fe2\n5d148e87-b628-4bfd-b039-6d1a8498cbad\n3c117b1d-ef47-43f6-90b1-947a2dfa2e78\ne16429e2-beb0-4809-863f-932ecd6bca32\n40df9d0d-f6f7-47f1-8c66-98cc8dbbe0fa\n232f6d8b-e468-42e7-ac2d-495fe9735e74\n8e635857-d530-498f-9398-7cf0331e528e\nbfc7e191-daad-4936-94fa-902c21ca8cf7\n8d8fd6ab-4d33-40d4-b609-97505aba31e2\nb94331c1-8026-46f6-8710-7f69ea1c8131\n8eeacd6e-1e67-4cd2-a5b5-630db4d1c084\n7798c6a6-5203-4faa-ad34-19087c2822c8\ndf0d3290-e9de-4fa1-8bcb-d55105073edb\nc69cdec0-bccd-4432-9b1e-977428836730\na62d4396-56a4-4527-a505-f658ccb4c20f\n4dc9c32b-2c08-4960-83d3-3a096c731e9c\n9756e2c8-35ab-4694-93f3-ce8296b3e269\ndb32d89e-6aa0-4ac7-b340-450bbae3fcc8\nf3621614-c0fc-4e76-a19d-13a8891380e5\n0147a9a4-4f05-4800-83c7-5727d41a16c1\nf2820398-e0c3-435e-b4f4-7e21aeef69dd\nc397d296-af35-4ec4-a356-ec44e66817b0\n99900cc8-5737-46d8-b9ac-7b0c17701e8b\n24e1e2a4-3b8c-432c-bda9-f3ca40dde7c7\nc75ef591-8ab1-45db-9280-80ef710b61b9\n6ca43f54-0765-4670-b86d-2c5dfcd7d020\n81ad20fa-5e27-4492-a2ae-5db8c5623bc2\nc18d4b5e-8ef6-4954-bd5e-f9d97b63ab40\ne12123ed-b730-4689-bbc3-5121d1f5566b\nc3956952-f4ef-417e-820a-38ee9b35de27\n3e80b463-7668-46eb-a87d-4ebeea3f39ea\n2974789e-bef6-4104-98a1-2a16f1f88bd6\n6d39123a-615e-453d-be99-2e12a44b8b12\n9291a11a-b236-4125-85df-e6cdefbb7b64\n90e15cc4-bb12-4503-8e17-20fc26301bd9\na63e4d09-e6ee-470e-896e-315796f28e3b\n0b8f118b-f0a7-45d8-a88d-adfd9c3dd3cc\n3502b542-a3bf-44e3-9ebf-1bb11a022324\n851ef990-196f-4aeb-bdea-d04867466d66\n66f3535b-773a-4968-b185-8251440a861f\n81749c1b-56d3-4e47-afe3-f337f3270dec\nfe2a945d-6bf6-4cc4-b528-01a6cccbba52\ncfebc70a-b31c-4648-9446-42d30b457df2\nb080023f-56f1-48c6-943a-778b23eca267\n608ff20e-57f4-4e81-85e0-4d1719434cca\nd435c9b3-0d1c-47f2-8f99-06c6f210ddd2\n1d91ca8a-4e8e-491d-b3cf-35cd479e696f\n37ea92ff-2965-4857-85ec-fdd6f9e91afb\n43998747-ffe6-4844-99b3-bec4196da6ea\ndd21c8f7-65d7-4421-be94-505f1c17c975\nc3a40c0f-7adb-4e93-bf0d-6549f059bb0c\n6915ff56-80c8-4812-81d2-3f09d88ce88e\nf65d8104-1439-4dfa-b4e6-aa8e1c8bcc8f\n31385c68-c99c-451b-be52-d687caf3ad60\nb34c6211-09bc-4f4c-ba72-4a916272e06e\na4b02ca1-0132-4167-b36f-b02debdf910e\nd99fde71-6242-4aaa-bd63-e2642171746f\n93816fd1-5989-44eb-87af-3538d5766032\ndcd9a434-a84c-4a05-b2be-6dc7535e9fd0\nb64402a6-e37b-435f-8ba1-b3872a3953a1\n73b7c55f-e676-4bc8-a379-241f3922a5ed\na43c95d9-fb92-4a64-b9a9-33424f6b23bd\n9a072b00-d65b-42be-92a1-662fc38951db\nd7aa279b-533f-4d8f-aa40-6102c3f2d830\n6d9bb496-30e3-40d2-8944-50fdcc59ccec\n7930d73b-07b7-46ff-aa89-efe05f4a0822\n19e7e0e5-23c3-4b42-930e-04c80e977611\n376e2287-a069-4861-a839-4b9409474fad\nb17a5a31-2d21-4b3d-9171-bbe3be8ea893\na6c7d02e-809f-46a9-8ff0-3216c08966ca\n8e5ce536-f2c9-4b24-9907-c7afa4ee2945\n2d78af09-609f-4de1-8ce3-fc45f7c9c08e\ne29a379e-4747-45ca-bb9a-b16065d92a2d\nd4ac4d82-e3b3-43f5-94ed-63595686c9d9\nfb1dac79-6f75-4641-8054-c00df80b1358\nfcf652b2-5f64-4301-b57f-d6df05f1fc6e\nfe65795d-2c4c-43b7-a5f7-9f32168e2f18\n743dc87d-c6f7-4748-80eb-54ca3b8197f0\naa0a68de-f660-469b-b433-978f96d6555b\n9919f25f-2d82-446b-908c-2fa183534868\n713a45df-1701-4fec-b722-60385602af9d\n515cf6eb-e878-481e-8c95-f01b0cfcf294\n2a3000f1-09a3-4fac-a95e-20f9c2aad892\na91421f6-85c4-48f1-abbc-02f2d139a43b\n95798525-b49d-4815-a11c-f0c5a68c94c2\n5c70d248-4097-44ef-a0d6-56387f6b7888\na542cbce-2b49-4142-a85a-27f109d6d2a5\n080a4d2a-fa64-455b-8949-5766c7083185\n7c73aa48-9e64-489d-b167-56e658c20a47\n756bdedd-28c9-4eab-936b-6bf6f7431994\nd7a74a56-f397-4625-b6ec-16b1c6b1c616\na2d01659-e5ab-4639-83cf-5ce8f664670f\n76c511e7-abbc-43e9-9542-183a5199f056\ne5adc742-ab84-43fd-bfe3-c816fc4b1561\n8b44232c-8da9-445e-9435-177cd4d5a8e7\nb1423c0d-1170-4d2f-b82e-213a8fed4977\n524e068c-7ee6-404e-971b-79651a5b1f30\nac596a71-68f9-46dc-a4a5-e29d6ee850f5\n06755aec-bf96-49a0-b147-521212954524\n6df4431f-233d-4ec8-8d6d-53beefebad37\n1f3b8cae-f31b-4e00-8c9c-79a752d79841\naba1f866-ffcd-485f-aa2f-76d4a61de2e8\ncef6badf-f68e-4e70-807e-7272253c9e5e\ne3e190e7-4f79-4d9d-8792-3199e4142446\n5fe822ad-6c3f-4324-b59a-d0a5d46eba50\nf154f136-462e-43f3-a539-73dcc238e630\n4ea3c5d1-4aba-4345-931f-8f246f9fb59d\nb91a3bf9-751b-4004-8fac-ca9153c43372\n11d747a8-dd9b-4b63-b9d1-e41d629ecc63\n4773d3ab-21a4-4916-a800-1034167475b0\nbdafff1c-f1be-476d-9afd-4644d70df37e\nf2770f7f-17fa-49e0-8db6-680fea81edaa\n3a1b6005-7cae-4b8f-bab7-ba0ef8c3597e\n6b66ebcf-7105-445a-b81f-f8975f61c107\n989af63b-020d-4ec5-95f2-b591e380b86b\n5ee66679-58c4-4779-823b-6098e990f133\n7f7a16ee-840f-4883-bcb5-9c318f7b7848\n27b80cfa-5f16-4e92-8c32-781ea02f7ee8\n2d045bdd-6e78-4330-9c84-6655a04ff410\nb75985f1-054f-48d2-b79a-d9a350989756\nd23163e4-c419-4a5a-8c8a-b07a3437a94a\n8cf3e58a-f1b0-4b46-bb16-f418d685156b\n94630060-1cc2-43db-afe9-6267f6e78521\nd5daa243-be85-4cd9-bd36-47e5b4868d19\n22eb2ab1-b290-487b-8f29-7250979f2b74\ne4fbf776-014e-4b88-980b-24497a7066fb\n21048f77-e5da-4422-9576-a89fb0ef10c0\n6beff243-0079-4587-954b-d24eed6a6eae\n598ebcd9-c7d4-463c-be9a-d84c0efb863d\n893fb727-d071-4d4c-bc3a-c69f3e57d4e9\nadc8db4d-3065-40f6-a9b1-92654074fdd5\n915fce77-e5da-468a-b947-e483b6beb08a\n84f95ed3-9bce-407b-af7a-e0ab3dad5549\nfd390c23-c5ff-4d43-b817-d140619b0428\nf6ed2148-6303-4d67-8b64-55c5c937a165\n12f9f32d-3d0c-42d3-a014-252687338fdd\n770e0877-b113-42ee-b4fe-e96cfc679d17\nf124321c-fc51-478d-aac1-65ade14f5f69\n1fa9d9b5-1cdc-4616-a431-ce0051f2462b\n5bc10515-69c6-4f22-9624-b505ced82456\nefd7f9eb-4bb4-4468-8ac7-7e41437aa76f\n87f0bcd6-6296-4ad0-9fe3-ea41a229fc5c\n4790c80e-16ec-45a1-ab3d-e3e3892a43b3\n1db0680c-6a61-4642-b68b-4a83dd0579fa\n7c9b1edd-19fc-4430-88f5-d033c94d10ac\ncec9db1f-c29e-4a8d-ab79-f6eb3e6fa801\nd03853c1-e75a-4cb4-923c-20cdeb6669d4\n5e97d1fc-d23f-4dc6-b125-d907a641e485\n3ebda22e-97c8-45b2-9d6f-16ed4b9d5df0\n36f60406-9c7e-4991-91ef-e92d3e326f65\n9ddd584b-b4cc-486e-887f-84c898248564\n17aff9f5-19f9-4a84-bc02-0b477503583f\nff08cb28-cd2d-45fe-b939-88ed2fcb6d06\n272d2f54-5570-43c4-bf4b-f5e544d93a38\n4d0508a3-e8c9-4717-a929-2cade4242ff4\n71b5c64f-4f39-4fb5-aa2b-505b92d4c086\n10fecaad-d9d7-44c0-bb12-834c847d01c9\nb2ce72ba-443a-408a-b490-2f292da65c03\n4f4e3f3b-d045-4c63-a020-8ed8c42083c8\n8e8aef29-ba7f-44e8-8cb8-b90e2ddb02d8\n7472af04-1c54-46aa-aba5-047750d13f29\nab72b01b-cd79-4464-95bb-bb00f39c61c2\n3adaecb8-888c-456b-bcc1-072826753622\n986733cd-2534-4b07-82f5-e88f2770c092\ne4a23566-2849-4ccc-9305-1423eca8039a\n41e313f4-0731-4953-aa8d-6532d0bc0019\nab5d04bb-eaad-489a-b2d3-5e13840c02d8\n4d3dea8f-a773-4769-93a8-bb675a60ce4b\n7a8133a7-8908-435a-9223-f534ed6751fd\nd880349f-17e6-4856-81a5-8b3552e8efb1\n61713eec-5e64-4fc6-a2e0-03ccd879eb13\n073d716b-e749-4762-abc8-776c09b3ab80\na2747d7b-9c70-477d-bbba-4517bdc1cdcd\n618bb692-4a97-41e8-b268-10d639635a4c\n54e9c02d-7adc-4a58-9e2c-6bc0771d844c\n1a6c939b-35a0-4bc8-838c-5857a863d3f6\n5b3f7c37-ed04-4dab-9fd8-4fc3adf9adce\n7635adb9-a9bb-4620-adc6-7cef45dcc2c4\n330379a3-3b24-437c-aade-b156f8d4032e\n13564cfc-eb65-4290-89d8-c8dee3f55a4d\n708c66f7-d097-4284-848e-ba408c568c2d\na277d7c4-c47f-47f6-b7b4-fee13303d456\nf1410dd1-ab69-4eb0-b2dc-f0a409b469e3\n51ab40ca-5350-4a57-bee1-9a84e567ff10\nfbfd882c-c948-46de-98ac-85903295be8c\n2fc41fec-9491-4872-b477-7339afb95061\n9e442c1f-440f-43d7-8200-528b6045f0f9\n5da38ab8-5c7b-4c3f-ad17-665fbda5fe1a\n8a70dde4-b070-46c9-8eb1-1b6660c2803b\nf92cbc08-88ff-48ee-b863-0f73f4b752be\n1c3b0cca-e8ed-4ffe-b835-22a9c58f8701\n94ebba16-1ed4-4e61-8440-afdd97f42e80\n79d21dfc-bb46-4634-bbd1-2efc3b09c4d0\n197ebcb5-e65f-4df5-a932-7bd06e2cc481\n8a4daca1-8c5d-4f9c-a306-f6a9ccc19f27\n228d5db0-d132-46e4-b03c-59aded2bf976\nf17018c9-2ba9-4235-9771-49e834069804\nc391aed3-3c52-47b7-b5d5-3d0448f43216\n56b7ef58-e8ab-40a4-8842-dbb949d85026\n29bf1063-9169-4e43-a285-219eee187b3b\n9ea53642-c821-46b1-89e3-26f708205140\n23d496a1-17dc-4ae2-9f4c-76e515fe1c73\n5ad5b63c-3268-450a-b8a8-0ac5cf6ab2cb\n414cabc1-5be4-4b8a-9c95-f151db0e3d30\na325d80c-0f82-4577-8361-699e35a8bf55\nb21812fa-ed5a-489b-8829-e53f8b2aa068\nf96db92a-3254-4178-9b01-6b84a3112806\nf80c93aa-47e8-4631-b7f7-bf46bcc7905f\n8144a053-c198-48f7-9467-51d971f7c094\nc9c9182f-d29a-44cf-a196-14e4c4f5a84e\n7f3070b5-f62d-4129-9a9a-2061f2543c01\ne08c3401-9c3f-43c5-a90d-98fe1ec4b172\n4b393745-7b04-4962-865d-e46f7e20d3e7\na068c553-5f6f-4961-8d99-b5b3c648866a\n3d59be66-079f-4c98-b99f-288acdc68207\n2c3c9108-9645-4778-9555-6e91c6f2b9a4\n1a1214e9-737a-437b-8f82-34a649e920d6\n620a2cbb-22de-4c58-85d6-0fc2a3a97848\nec85c36b-3db6-483d-9029-ce8f75f202d3\neb715d0b-6172-45df-9b15-589e01082de5\n84a68430-c0f7-442e-92b1-b42c08abccab\n06b125ef-d86f-40f2-9134-ed3a7089558f\nc84cd723-8365-4678-990b-7ae1581f2ef8\nd0acafbe-1272-4cdc-bfd1-fa2a919848b8\n81b9aa91-10e5-4788-b178-eee39d1822de\n59796915-b1fc-4369-9b74-380e08d8c0a2\n6800c65e-05eb-40b0-abc2-c27c546fabbc\n82982264-3e5a-4e3d-9436-af6c868d5dc0\nba36e31e-fa83-4607-a4fc-251dd4da79d1\n87be45d2-08c4-4bed-be11-ba0cb11de34f\nbeff6468-03ba-45a5-972d-7f1a1732332d\n400843c5-563f-42c1-bef7-97bd5873ca9b\nb3b4bc65-4590-454d-86ea-b4f7e184cf78\n32958211-3674-4eb1-bbe0-cd2b889f87b5\n63c7dda6-92ed-481f-a83f-7a01ec3e6235\nc161a4d4-028f-4136-9b1a-4203fda6d000\nc59c171c-3d62-4bea-9d3f-56ec8ee4c20a\n7d127752-b1f1-49db-8a04-4bf743379f17\n6960fa96-9e7f-411f-81f2-9b49a0aeda23\ne75f6fdc-a99b-4a2f-bc49-aaae28d9d689\n90e1779c-dd0c-47ce-a361-99591f99d2ef\ne264092f-5b0a-434e-9a1d-56b71527e1ea\n57dd8445-2c3f-422c-bf7e-1e2ddb7c7b31\n50bd8543-f115-4311-958c-a8b125f6800f\n5f64222b-b5f4-463a-8216-2a7bec9d9fdd\n98f1ceee-3bd7-49dc-9406-863a374af334\n17b3b249-1087-4d53-9c7a-7dec91855950\n586e4a86-2a31-4257-a570-b91fb32dab06\ne6b1e182-454b-49bd-939e-506d97ea0536\n88ab756e-5236-4384-af4c-d78e90c910d5\n32b592e5-9f54-4b94-b5c1-61709378ae32\n43ed3e5c-a46e-4a68-9de6-df0a66d1d6f0\na51b078e-8f1d-4059-a127-c70f35debfe8\n0f74be7c-f60d-48f9-b678-1ae295c4cf5f\n8cbc54e2-621b-4cf0-979b-db6643f4c615\n253b0072-3fba-4a80-8a12-ea42f961a490\n01656b56-7e91-4f46-a3e2-9200cbab01ef\n30401ba1-030d-4bfc-bb06-ebc1df774049\n6e843834-dfbe-4018-b547-06196fc1e2ad\n9d1c9be8-2ce8-4449-b81c-80780b61bb0b\n26e343d5-382e-4566-a4b8-d1167438b60a\n61284afa-d8ee-43cc-8f27-e32208abe501\ncb095277-3cda-4f66-a3e1-30ccba958250\na14ca5f2-6f25-4231-85f7-d8cdbe167ff0\nce880902-1b02-4a5f-87c3-0041d4a6e3b6\nb40f7aa8-b13e-44a6-92a6-6550bafa1fe7\naa73a590-a4e5-41ea-8f18-9fec0b718f05\ncc9a7d00-979a-44b3-866b-95eecd11cb70\n1cd46cf7-c430-4945-8b32-77da5be09953\nac27fc55-3796-4a59-9f2c-04f72bba924f\nad89e6e1-79f7-49cf-8532-ba2cd685c4a2\nac07fa42-bf5e-468d-860f-9d6bf57c5054\n665dcd2f-fd9c-44fc-9c83-b348bbf7c026\n57b87ea4-17b0-4535-9d3c-01ebd73e8e8b\n0186c5ed-9341-4206-84d0-f2e87d018b95\n3898bf49-29c1-4496-a005-9cec5052e0fb\n799a8c42-71ec-42cd-9e70-6e31747d5ea7\n7139bdaf-e9ff-4dfa-80ee-d54ffdf80651\n27024904-3943-47c4-8929-ddc8ac224f81\n42e5eefd-b19b-47d4-9b09-eeda91912600\ndaaeebf1-a710-4a5c-80b5-d69ffbf0a858\n43fd91b0-3187-418c-9092-d0f9e2dbede4\n12f3c29f-82a0-4d32-8eda-4125ae14a37b\n15f5e5da-0474-4c9e-987b-ae23b673adf7\nc4997000-16dc-48af-a115-90532c2e13f3\n4555f61f-1d66-431d-9c3c-fb82f5479bf3\n9d3576a8-0467-47c7-9725-b132bde66564\n6c3d095c-9221-4bed-bbbb-8291f16fbe6c\n97b8fca9-5b9a-4142-bebd-740c25c56b9f\na57d039e-9708-4345-b4ae-a204538e160d\na8d1a1bc-bc55-4b1a-899e-91de1454207a\n2e1e27d3-67e8-449e-b039-f06935fa74e1\naccf8667-3115-4fae-a008-69352f0406e8\n8d6607fb-ab3e-40d4-9964-61d53e698eb4\n697c02f0-e3f3-4305-a879-8148ec42f535\naff72057-cf27-4ce8-8956-09573ad3a099\nf60a3092-9b6b-4fc8-987c-58066e9248c9\nefe864b3-8762-4001-9bfe-febe05d953b9\n684cbcc0-6572-4a3a-83d7-dddc1162a6ec\n6fa8c8ac-03d7-4cb4-a6e6-6ee8eafda97b\nfdc25f32-2e19-4c8a-97e1-9c23cf72a3d7\n90f5e9b0-a7b1-4230-b51b-91f006201a47\n38884f0f-a1ec-45ae-85d2-26ff78bc7518\nee38d1d0-915c-4f8f-a848-d50e92c9d7df\nafefba1f-df04-4668-8bed-f398478f4ab2\n950d90d4-ed64-4aa7-b485-99a61180a824\n1beabe16-9471-4a72-9587-374da3f0d07b\n5fe9afd6-b1d2-4dd2-ae4e-f0642dc11549\n0a0927bd-b11b-4833-8bac-c45516deaa67\n8cc144fb-5a96-4576-ba37-07bc2a62c69c\n20885081-d9b7-48bd-a6b0-df62a90c221b\nddbebf8c-2765-4280-8ac3-6fccda440bd7\n75fbb4e3-095a-4075-9c6e-2ff10dab5e6b\nda50ba8a-0cc8-4041-b130-74792d529b53\n0346e84c-696f-4ba0-b615-5f3365494982\n33d3a0bf-3783-411e-9247-fc119360264d\n0e51d02f-4c4d-4110-8b58-0633db7813a4\nc80253c0-661c-4b5e-a83b-ee9553219a97\nb82057ff-a336-4704-8b25-68822ce4935a\na5b917bf-7dc5-4833-8a0d-9d608f989ea9\n535ceccd-7467-4bf8-bf0b-15b50de03e94\n39118bd6-e152-4b29-89f5-4d5e06efd27b\n85064c6e-5360-4653-9840-1d869b427a07\n7fbe19cf-aec3-4fb5-a912-3a2efacbec48\ndbc4ea7f-307c-4650-97dc-5cee335e87a5\nebff0f7a-c249-4ef8-9955-9136bada29b7\naefbd9a4-4e59-4485-aba2-b740365f686c\n31f143ef-1335-4831-be52-5ace79b24ad2\n6bbb200f-4dad-4072-81e4-20da17473ba2\n62362dde-0b80-4042-b769-e8c9f1790d51\nc17ceaab-e9ac-408a-b580-f246c6e9be74\n5e84d4ba-8c45-48f0-9ab6-ad39ff199466\n980aa95e-05a2-4869-a542-e4d2b13bff08\n2578ed97-0be5-4148-86a1-235fdac93d23\ndeee037a-d50d-440d-91a8-39eb4cf74b43\n3101094f-54f2-4bd4-9195-4408ef8d46d1\nb35b207b-90c3-4195-9cc8-a47a3fce41aa\n2f45dd76-e269-4e0a-9eaa-1a268303d131\n23f2144c-587d-47b7-be98-3e4995394543\nd7daea66-4842-424b-a51c-53b6cbea0b02\n2fb54ba1-8457-46a4-9d49-3a5cf61cb877\nc8e4f4a4-a059-4ecb-a79a-b27fcd44231b\n1b82b238-a81d-41aa-8b22-20bb0c1d699f\n95922a7c-a8e7-486a-87ff-b6bff7418513\nb5bc3dcf-2a6d-45c4-93d4-3e756286b6d7\n769c4080-b2a4-4607-a0f3-ffbab098076f\n4325ab24-6499-4ab2-8813-0d82b3c676c1\nd0438c33-49e1-4afc-ab40-682e5c297f22\na86f1609-fbad-45ec-a8a1-07995e12d5c5\n93cf30a2-a950-4328-b29c-d58459955667\n7f30fd23-1cf0-467b-a89f-09ee4c721338\nde69c2da-775a-4859-9c49-170e3d5dd77d\n1db3957d-aac9-439c-9c97-74593e9d6d66\n0008491d-0468-4b99-8cd7-7294115f0529\nb309da77-3234-4098-b13b-6fee73bfd4ed\nd64f913c-ae96-4078-bb57-f8f5932c9103\n347aae45-3026-4fb0-abde-39749f98767d\n6e0ee49a-375e-465b-910f-428cbae5e606\n9f9c7401-a847-4f66-8a5c-9db1eb588660\n5a8c0990-c98b-41eb-b018-94c46f04da52\nf582b09e-bdfd-4087-b5cc-013340e2ad3d\n3c388380-8596-465d-a6e1-dd83d8e27d06\n0c96ebe1-a9c2-45e4-894b-bb06c836b1f5\n2ea695b2-00a9-4003-8f61-ce0b51e04234\n12900725-b663-4e3d-ad25-a27615a23c8b\nda1f8ba3-7328-4dd5-84f0-7648ef87cae1\n386e2e64-4292-416b-b5a5-c1ff75f31fa9\nce3a92e0-44ad-41f9-8e59-ef186f497dbc\n402f2ec6-b3b8-4d3f-bd8f-31d740139ae4\ne54405a4-e124-402a-a62a-9b75768a6f8d\nc6f9a330-a6f1-42d1-be55-e1b22603b31e\n5daf8111-8ab3-4fe3-9034-8642579f3e99\n36537548-2f81-4d74-8c65-60888a2d8609\n2aed6b17-ba4f-42e1-ab78-fd73966dd49b\n318d2d32-64df-425e-a8a7-e5d5c0898693\n528a133c-c961-49b9-9fcb-d8d73171e265\nac7adfc6-92a8-4f9a-b881-69afc0b85fac\n4dc7fe48-27ba-44ee-bb5f-5ece0499aa37\n01add783-18d9-4f7c-8e9c-59f13b5903c7\n7093333b-9973-4dcc-863a-c45d3bea4da7\nb183e420-2349-4982-9c73-5d78fd641ab0\n039f3400-bfc9-436b-baf6-e6431d9a660f\n514a382b-4a8a-4029-a53d-1ff6550bc876\n7c189341-073c-4607-b51e-136b2fce3599\nee13d042-5f1b-4c97-a890-cdb010c8b8e2\n2899983b-dd5e-450f-bbe8-19041967d7e2\n5575a837-294a-465a-a7b7-09e39549146e\nc076828c-37f3-4fa8-9f6d-a632d04d3f5f\n05f7a647-eaeb-48ea-a066-b92c1d983440\nbca464d3-6f5b-409e-9fa5-040f9523b10c\nf9c969d8-3567-411d-8e55-fbe14125a70c\nf86c3f5f-7173-4f5a-b441-adee907f9fc1\n99828836-78bf-439b-aaa8-f2fa961ef672\n5896fc35-fc57-41ac-a505-219383f8cff4\n999c6373-213c-40a7-9392-5b5b59d09548\nd5acdd63-fd1e-454e-9411-237f3448a714\neead3974-cad1-40ed-ab28-0aeb9d72cc57\n3024f51a-cca1-4599-b9e5-3f44b93e3596\n435c0698-d4f0-459f-8172-b2bce154253f\nf4bfe883-349b-4186-9bd4-f3f0a4c434af\n93fbc0a1-bbbf-495f-9e7e-e997901c271c\ne4104266-c08d-48fc-b3dc-e036d671788a\n812c6a1a-dbd4-42f0-9199-01d2ab5b46f0\na51e83d6-194a-41eb-91c0-4890bc8e425c\n3159bd6e-917a-4efa-ab5e-156f608ad7db\n9d5e2119-31b8-4ba8-b632-25136a699b55\nb26c6edf-e719-4afc-b991-e41c2958f9ab\n28446537-362e-4a57-ae01-5c2dc50dfcaf\n112c41cb-e4a9-42c7-b6fe-bfb21dd95199\n4aa1f1d0-563c-4e06-b8a6-c6dc17a51175\n879a1d13-f3bf-4392-b270-cef45ecc330b\n6425ed96-8551-4f44-97c7-c23f74684010\n78245be1-b90e-4235-ad02-659ea01f7457\nd26cb0ea-3a24-4fc3-8344-5357ed836898\n2ab76a5e-dd7b-4eed-94ee-f72bd564a08b\n79b6408c-173b-48c9-ad58-23e9b774169c\n2161435a-88f1-499c-92a8-61dd89164eec\n5e239393-66ea-4f94-8ef9-b33fa2b634d6\n65a5fc8e-65c5-4b4d-98a8-eb09245d0b59\nc5ee99b2-5770-4132-812e-62731fcb9ad6\nd383ab91-eb1c-4da2-aa96-85f402bf4ec7\n64730924-5f34-429f-ae9d-56c1c6587e00\n3d66cb02-ff6d-4e5b-8c38-40d3645ecb68\n5457c3dd-ce2a-45b4-b80b-c1c9d0a24f49\n6800c5f8-12f8-4e63-9d8b-6f7c263ef798\n7a6ffdb6-10bf-4d08-a396-cc8f57164384\n9d21acc1-16c1-4c4a-983a-78aff838b8fc\nb8988e9d-c44e-4a41-a28e-0feedf540ab1\nb2fec941-91b9-448e-bff5-0a6e62fb6040\n6d5e9a3e-1ed6-4335-bca2-0400fbc64e7f\n2058358f-36e5-49d9-9a45-5f5e30a5e3c7\n483e5020-3645-46af-aebe-d02235fe74c1\naf201f48-91bc-4470-809c-cde6b12cb45f\n33c79925-0871-445d-9b8c-7bf255d721c3\n755cc7dd-e89a-4be5-9619-ebedbc9839ea\nea7c5880-d375-4668-8e7d-bc0e40c494c6\nfe3ab195-30ef-4892-ac36-0614b8a974d2\n9589bd9d-9f5a-4669-b3da-1876bc93f447\n16d6d6b7-4584-4bf6-8df2-fb67bf1ba2fa\nf9344cac-e9cf-4092-a83f-ca715dc71f61\nef1211db-c46d-4e1b-858a-bd9d87e9bf75\n4e2ad997-8b4d-44a2-ac23-cf8447fe2f2b\n803a328a-74ef-41c7-b90b-7fa16be58394\n6f6ce647-a939-4357-a9c9-4a99abb17be7\n16ff853d-ee13-4ddc-8219-dbaa4301ecb8\n4a9af134-c48c-4897-93dd-b01abfcb420d\na76901ab-61f0-43d9-bcb5-65d99b6b9ed4\nc358d8b3-85aa-4c2d-9236-58086ba83e6f\nae774263-5d27-46d8-abf6-00f3123e02ce\nb54cd001-5efc-43f0-b374-2f9f0c0667e5\n03ba6c1c-a3bf-4c7e-9ffe-39ad52081a95\n4b2a0e7f-dfc5-455f-90fc-d6b1bede2b44\n676c908b-f051-431a-a8e9-88321215310d\n2683b616-615d-4288-8271-e5cca11b60bb\nc95b7966-9553-4505-8af5-dc8c0c839a92\n4d752530-81db-41ab-8cc7-0524a9636bd0\necf58d3f-3e11-45c7-8983-4a7a6a4cba81\n5852050a-0f20-4f83-86b8-84794bbade1b\n5ad5be3f-c154-4500-8ed8-2991b4fcdf15\n2fdc6e3b-7073-41ce-b131-456dc55587be\n8509b8f1-8b43-4551-b6bb-1cc693797565\n0a18f0aa-c555-4a9a-a922-ef217f688dcb\n069182f4-3ac1-48e0-9c47-2d0866d05870\ncb9fc1c5-cafc-4381-a37c-c7d26fa6070f\n1fb67f16-ccba-4b1c-b9b4-3757ca3eaa4b\n088d5e53-b970-4b86-9570-e10a0eea0930\nf8bfb793-d280-4a56-8122-c4401a296437\nc47c0070-4960-4efa-9b51-fd2cfb80619e\n70d87cb8-4793-4699-b589-0e3592d1aeb1\n3d4aad09-2401-49fc-9298-1a8193e0d9c9\n29ca50c3-fbf5-44e0-9648-0c2ba5281f17\nf3cb8098-fd4f-41f6-9f71-9ae86ddc83af\n6e7b2bbe-b011-4294-b19c-ffe147af33cf\n30625b17-d515-4897-8bc0-d201c6d83c0a\n8bcf77b4-7989-43d2-898a-f0f464a8c2e6\n9a1f3347-80b7-4cae-94b7-d9ae25fe8e49\nd6648630-a56c-4153-9b7d-01cdbfd4e13e\n96062ca6-18e0-4fc4-8874-de36287043cf\nf9e92408-d5cf-4977-b9d1-87e0bc278428\n465ee424-f8c2-467e-b071-d352edec4359\nea8e518d-e138-4178-8d3e-8dbc7491e401\n491ebf4d-e6ec-4410-855c-ccbe5fbc2c61\n5131e8a0-e97e-43e8-a73c-e8e6deca2b60\n6bfd39d4-7454-4927-acaf-f069a989e905\nedf7220e-95d4-4a2f-94ed-8eb8cd0aed57\ne06ad350-e6be-4464-b41b-e105903c65ee\n6726bb00-4c17-4804-b0f3-7ae1f7519142\ndfbec940-9295-49f9-b325-9164a4754331\n88463ebb-78a0-4fa3-8f78-e3dc1f479ab9\n865943ee-3e7d-4a6f-ac26-ab6bf6512a25\nf60d5bce-a181-44e6-a017-933054dde567\n0f928cc6-dc72-4f7a-973d-4cd2bad37739\nc44ae056-a941-4ae0-821e-38e7760b2244\n7dc2ed3a-d65c-4fdd-a62a-53aa10fba81e\n3c10047b-869f-4c78-a382-8683820afca5\nffdad98b-0cb6-48a7-b0b9-e84def88ac5e\naa0fb4c8-0625-473d-a7ed-5b8771f02b27\nf923c684-1f02-4528-adfa-87f98e10d9f0\n3b50877e-980f-4e0e-b15d-730a6245fc7d\n65ca5a6a-b9b3-41f5-8da8-e7d32a5580e9\n7b608f8b-c197-4b3b-ab1d-29e55e42c07d\n55dffe2d-bb77-46e6-a830-741dfc38f496\n39d6a0f0-c29d-4c2c-9fcc-8ce79d25f268\nad527015-e9d4-4d20-91e5-b68f1e931973\n6a845eb3-8edb-4414-9853-4d96efa55b0e\ncf05d565-2a62-4398-9014-e217fee8e60d\n5e8debe4-10ad-4532-a07d-cf913879614c\nf9c2ce35-0741-409c-974e-404f39d4d154\n9553b71d-276b-4dd1-9ab0-7e575d4e2490\nde353d8b-c24c-41ba-83be-210299dde980\n708f18ca-2330-4655-81b8-97159d8ee198\n17a344bf-15e7-40ab-aa10-0dda7f2f9a45\n76663de4-56b8-4bad-a9b0-6830b6487f12\n61185aa5-6ba9-4d2e-9ad2-c750d4e4cd74\n473f0551-0ade-48ed-98e8-2193ffd08380\nb4c17ca2-3699-4b2b-870a-d193de642e77\nd3ac6e3e-aaed-4d01-9922-2422da099126\n2aa1b0dd-fb1e-433b-8c2d-a0f3b2542ca0\n7614d381-921a-410d-888d-1a7a576b3792\n10456b87-fcbc-4ed0-8be4-f2f813e5e390\n19098cf7-e495-4255-9528-cb5eb725901e\nc77e2198-6f5e-4065-8048-1176bcfa5984\ncd87e5ad-cf83-4f29-81f8-811beb6cc03d\nfdcdc98c-c032-477a-992c-cf9aa342f0d1\n9b38e778-716f-4584-aa01-8b70069cf53c\nf7b1a2f8-0175-42ab-8148-c7841cd0770e\n08de9441-7c68-4647-bf97-8b4e197ee361\n46edfbb2-a83c-4f32-93a1-c42513a72461\n3629a3da-238e-4426-8f75-80c893b25c67\n4a97a806-475a-478f-906a-b3b734720291\n052a68f4-b679-4980-b125-b55497ded2c7\n2480c610-eaf5-430f-8d54-6519d3b92001\n8f7bdf98-b09c-4e91-ab7d-8182367be6e7\n5d50aaa4-4c16-48ae-bd9a-31f44233f0bb\n27705ba1-0e32-4bd9-8291-58d2e67f0954\ne9d20567-5dc9-4bb7-ac72-1a0afd9e6c09\n60159cd3-171d-4b2c-b866-aa39931c211f\n551c3923-4109-428d-8c47-1f6f5eff14a6\n0b2172b7-57e3-4aac-8c75-d567329aeb41\n80c1a8f5-b703-4bd1-a6c9-b4b40bfdc70f\n30a2f6e3-32e6-46bf-95e9-f1203f55ed85\n540e0253-2af6-46e5-91cd-283a92fbe6e5\n0b9bfafb-e2b5-4e2c-a80e-ae6a233f7035\neda95496-179e-4298-aacb-06f91cdf69c5\n878129cd-09e9-4ab0-8a0a-25201473cf14\n202f0d4a-a358-4b4c-b50a-fe167a53506f\n3692b3a5-b3f7-42b7-9558-dbbcd7dba8ce\n91915626-794c-4683-893d-cacd59fcd5b3\nde8e697f-6071-495e-8ea0-9d7977e5f116\n5866e298-2a3e-4a8a-86e7-e0b7ffb28d73\n55274d6e-5745-407a-90f7-93494df03849\n0c6b2c63-067b-4553-bae1-9002c0772253\n358390e7-f90b-493d-a1d8-5ab404f73d37\nc0683673-f43d-49a1-8891-0b2d72f20e67\n0784259c-4e83-4224-97e2-48a3200ba883\n33df5824-2988-4385-a855-41ac3407f8e2\n5bb32608-2e47-4600-afa5-911e156dd56e\n2818c931-f9fe-4062-a7e2-4838c7d699a5\nf4bd6c68-f0fe-4fe3-8a54-3808225f65f0\nd930db84-fd2a-4bd0-a147-fde2812cbc69\n5da086ba-9f8b-4685-8cd2-bbb6deefa2db\n5c033b85-9b1b-4574-9c0f-22ea047d24a3\na5c758c5-77ca-4cd8-aa86-47908b9455a0\n458e74b0-cbc0-433a-a0b1-bccb689f3931\ne90ccb43-2890-423d-9e9c-84c548e3d37d\nffd380ea-a061-4e35-b5ae-5e7240650410\n7622064b-4ee9-45f8-942a-db6e19f3b9c9\n111ffdfd-0a09-4ccc-bb56-57262dca9dfe\nacae94c8-f823-49fc-a897-6e56893d67e5\n08e97373-0157-428f-9eea-beac81c560bb\n373b2a9b-62ad-4846-adbf-cfc0c40374c3\n0bf67b69-d83c-43fe-92c9-7de416adee54\n56b007c8-b1ab-4d37-8c49-873e953548f0\n4e474c94-4175-4eeb-9d06-b83c00d0e436\nc8ade00f-afff-4555-97ce-fd876733d9bf\n1cfb4985-1cc9-4061-9231-784f218dc106\nd891f408-7793-41a7-815c-cc0130e4fd85\na7251690-3587-433c-8eca-ac568f85e381\n8aaa99fd-f628-4272-aa70-c81d11f1ddd9\n8f9160ab-9d52-4654-ace5-0c3143fc8c8d\nf78e544a-56c1-4053-b659-3c77378aba74\n440c9a98-0dc1-4295-94be-8d02bdfdc36d\nbef0210f-e3c7-40e3-8c96-439ca5f86760\necfe3328-5416-40de-b7e6-1ff42744c9f6\nb1dc6615-5eb4-48ec-a7f0-93e4ac07a2ce\n9e2d104f-da5d-442e-b297-fbf1a4ba124d\nb85113d2-0997-464f-96b6-6557062522ac\nd0fa960f-83f5-43aa-baa9-239251c4b9d9\nbe0d8ae7-beb1-43ff-a796-60c5b5663c74\ndb33d731-d91c-4c84-908f-bf459b542020\n2d84f8ab-9431-4e56-ab75-b6665ea82d95\n0b3612d0-b115-41f2-bb3f-6f6938da5818\n5ac4e94e-8869-481f-9f1b-2f47614cd2c7\na5779e29-7afb-4a12-aefd-096d1b8afccd\n03e0157e-39f4-452e-bed1-36923e8219b8\n3caee3dc-006e-46b5-a23d-9bd4def46021\n9277e3ce-3278-4bd2-96cf-bd27325c85e1\n4a74e646-d3a6-4742-80fd-53506a86ff7f\n1fb3f8f8-7fde-40c7-8180-a9757624f36f\n1b682532-099a-4ac7-8a6f-2ffd1bd87d4d\n026384b4-a72e-49ef-aab4-3938989efd92\nd0532f85-795c-4be0-9ab0-df26a222a91d\n4e542cee-bbf1-4b20-9ed5-075688bb10cc\nd1129e40-29f2-4d03-896b-e9001b9ae728\ne15f7efa-a54b-464f-b526-99082872da9c\n1b0cd0a8-24db-4910-b941-f1cde7ef527f\ne6aa1a7d-ed14-4165-aaed-8343708fad61\n7b39d0cc-f45c-47c6-9545-74a1b06d9496\nf7295c8d-2e57-4849-a986-3eea29369cb1\n63bf3a11-7cd5-4b6a-ba5a-a2ef02fe3204\n7843152b-a2e9-4fe6-b8f4-49829b1a75b1\nc7b5477e-bd75-412d-8e94-a00c1afa74e3\n615f8699-8abf-4ccd-8516-de7d5dfddc1d\n48d196b3-59f2-44f0-9321-df0f4ecf7597\ne5816edb-ac6e-491a-9770-f898a0dfbeb4\n4b692e8a-b45d-4062-9607-3ac5017e0379\n9cecaf85-12f1-486e-bb45-d70a3af7a88e\n27273b8c-e527-4a98-8682-29879665a2c1\ne3e738ad-9bfb-4f1f-a765-110546e2a919\n389baf6c-2a55-4bc8-8012-6e7e13da4542\n56b06af1-14bf-4c9d-91e7-e9588e4aa386\nbbe16510-2ed8-4de5-b553-aa8a795f073e\n9a8dfc0b-f4c5-4ee4-b2bc-0a24a284375d\nabe4dc40-239d-4e70-9e83-aabdfc76ade4\ncbd59e14-1ed0-4377-9958-4b096e169511\n53090e65-7eae-4156-889f-ec1d85cb4aa3\n4c46d075-bd85-4ef7-8a16-caaf2df14824\n4538e1fb-b654-453b-8485-b2786f1d58e7\ne9aefb13-dd84-4c16-892c-b25716c64293\n9019b51a-5ce8-4bac-9c03-2ab71cab6a98\n74bf2424-b4c7-4325-bc65-7a7502c381ea\n1659bae9-ccf1-4177-a908-616c07c3492e\n80661236-925a-4652-94a3-755b7804f9d0\n18122fdf-0d93-4a94-a95f-2d5ff50e7684\n3b1eb387-2c68-4292-bec0-50fe8706c8f6\n5f9fbb53-d620-41ea-8bf8-6ab9c5af7055\n39b8c0aa-9a8f-4973-a269-95d263594bac\n15f0a4bb-e568-4a19-8890-73d7137c6a27\n04c9eb7b-e491-4842-a396-d00663eb32fa\n023c649c-35ab-41d5-aa98-812f9c9d0361\n57090be6-a00d-4c1b-9f0d-65ca069b4d41\n1a7888eb-3430-4886-bbce-965614ad0af7\n1af85f25-7e8d-492c-8c52-0330b02f5809\n0a7d0700-6689-4f5b-9d0b-ddf21155deb7\n83282cd8-b989-40ec-85f2-d7c594933940\n24fd53c2-c6c5-445c-9950-1c38efd50633\n72b60e30-378f-4b23-bb9e-3b8f7fc078aa\n210cd377-e7ef-4401-8005-dc29feebf53e\n85a45a08-97ab-4e29-b910-151b4a99b9ac\n7eb6277a-59d0-47dc-98b9-c52eacd71c0a\n83bd33c4-2b23-48cd-8248-5e6c4e8cac52\n46da9ae8-d700-4066-b277-a4976d80562a\n854fcfb8-6809-491c-b888-735bbfa22b44\n16707f6d-9889-425a-a635-4bfdcaface2f\n900d89f1-c7c0-4306-901d-9f35290feb3f\n14e80231-a0fc-4519-b790-d36f61438c44\n200a21d8-494e-4bd6-8a1b-03afff2205da\n218f04ef-782c-4d2b-88ad-a8a085a3cb9c\nc4dc7a00-1341-49c0-aca3-13d685c4d823\nc67a48fe-c559-4f7c-90ec-60fdceeaeb33\nae37dc03-a9cf-48b4-a36b-21537ddc912a\n44b96da3-e100-4814-8c26-90dd38ebd00b\nc908569b-7610-47b0-b326-29aeede87fab\n2250adb5-d336-4fca-963f-aa8fb9a0c3de\ndf312fb5-d25e-4717-a975-52c25785bfb2\n4c2e77fe-f3c4-4d58-bb20-5423d6229bf7\n595845a8-e90f-4829-b969-af85d2af5466\n1149ee35-d9f2-45dd-891b-af8bb50d6bf7\nbaa6512d-1640-4fcc-92de-190e2ade794c\ne8657946-8e1b-44c9-8745-05423c562a72\n185a9ed1-b773-45f7-9a8e-ae30b3f7833a\nc4f6e4b9-7d20-4d39-805e-55a597c6dd66\n020ffac2-f85e-40c4-bb42-2ac997ddf504\n3c3ab141-ca03-4ad3-b2cb-25dff91d30ec\n008faa48-d777-4de6-a5c2-9815042c7647\n770f7230-a0ae-4639-b067-6c56f2e860bd\n55660b26-54dc-49aa-8e65-250b2dbb35ae\n2c3df960-f3a7-44b3-aef3-1159d6981bce\n400f5fbb-ace7-4ac6-98c9-243ce6eae39e\n996921bf-5e42-46c3-933f-8bd61b625591\n3b0186c7-8cce-497e-9929-bf2b9aa1a1fb\ne23a34ba-b335-4a84-9538-d5c83c9aea30\n681ec284-9ddf-4ef2-94f7-ce04209e174e\n893f374f-49f6-496b-aa54-d914b43d3a54\n708289cb-8117-4291-9e93-7d64fe78a74f\n01cbe539-3b6f-4243-8446-9bf81703d5fc\n70eb37f4-b197-4125-b74c-8a2151312bd6\nc6945d7e-42ee-49d7-9f2e-730932a03cd0\n57f62eb7-dc36-47d7-b0c9-c29d40e97460\nb64a65ef-ed63-404b-93c2-b501da879dcb\nf9e3b3f3-83c8-4f4d-a861-7a6d31003035\n743a896b-dc6b-4072-ab47-e2e2be5b1c2b\n59cffa65-092f-47b8-919c-386c20b3076a\n80c51e5b-da50-4757-bdd8-27c1bacec609\nfb9d1585-0645-4dfd-9e53-5940ae245166\n24066c03-323a-41d5-9842-aa1fb37e5362\naf775a77-ed55-4d71-a385-899fbba2135f\n90bf346e-f010-471b-ba52-cdbb89e244d2\n9ae4acc5-c61b-41f0-97a9-696b39f7aca1\n61a1c199-9909-431d-b06f-85f2e0b6791d\nd93d7a1d-0f7d-4972-985c-045db61ccdcc\n0ba30c0b-eb43-4362-adcb-2f755d170376\n67e8177f-f836-453d-97f3-2dba96b77791\ndd48b034-2d01-49dc-ac7b-b61f1d402a71\n306cf760-46ba-41cd-b8e0-e2c6e2003b91\n39b1ca46-00a8-43b1-8281-b89c0efad3ca\na9a12b53-23ba-4f2c-8f9c-067de770a857\n7bb8d549-fc37-4f9b-9fa3-4040f95b41c1\n1637452e-2580-4af0-a1e1-3eaf68012d4f\n18ce912b-beaf-44d9-8ebd-7d22b970a553\ndd6b781e-aa67-4834-adb2-ba4ba09b7a99\nb88da8d4-4dc9-4f6c-9eb6-530d44c050d4\nbf027124-99bb-4c8a-9aa4-ae816a4bd98c\nfa3f2670-7ef6-4cd2-86be-74d137c62bcd\n6ec02871-c4bb-4982-a936-68e2ee3be77c\n35d62018-4ce6-45f9-bd5b-7415625aea89\n82ee7e7e-d4f8-4e01-9ed8-43a265b30511\n068fd14f-1a82-4a36-add7-4b60c905d3f7\nb72f3bda-729d-41fc-9ffa-8687339747d5\n6774f63e-4e68-48c9-a585-59bde7a6e9c3\n7876c706-9b9d-40dc-a4d7-7904587ab608\n5a514b34-67bc-44f3-8339-2b22dea735f5\na54f3db7-92af-44e4-9acb-1bde17abd412\n31c4b005-265c-47d7-a9c0-3931b5c77145\n1ab2cd07-6668-45a6-af1b-215b3375da0f\n2f64a219-4e4c-445c-9f63-bb0441480865\n590f16f5-43a6-48a2-8c3e-37d2b0b10cdf\n65c13162-532c-4022-8c2f-dd7d0d186015\n69b7c52f-b4ea-4140-a254-c760068e996e\n0a6e7907-ff8a-467c-8923-e3d041773f0d\nb6af7e85-b2fd-4cae-8162-a635dd2c1913\nfd92dfaf-66ff-4e12-b3fc-674f1101c528\nc9903da0-a1fa-4bd7-b41f-389bfd2531a3\n3f8b81dc-a3ad-4e66-abfb-845391c66785\nc8e274fd-7efb-4d71-90df-ce3c1efc624c\n1dccf9ce-681a-4ff6-b21d-4355fad07c3f\ne1eb4545-9dc1-4205-ab2f-2d759b991c0b\nb6f71fbb-b80f-44ca-9b78-52600c15c7fd\nc6997ffb-0820-433e-87dd-0ca9ead021c3\nec019ba0-876b-40ed-9b30-28e5d2335c6b\n60d65249-d77c-4e45-ac68-f22ec63bab10\n78903817-cb0c-4cc1-94f8-31027725d6d9\n3d105849-cf04-45a5-85f7-313b08b7e7d4\nf042b90f-410a-4c77-87f6-387c8399f3d1\n77a895ca-bbea-4855-829d-41a37ef4b6ac\n7b1fbe09-66d7-4129-bc1e-9207887e296a\nc62fb2db-a2c2-4aac-9565-f2f9abfad0e7\nc840da5f-2112-4b5e-ac92-bfc7fda75a17\nd53589d6-8bca-47d1-bd22-18e60947c3c6\n68b070e0-a810-4a05-8fa4-4793f382090c\ne2d0d5ac-27ff-46d0-b7c4-2350bcfa8f0d\n82af8585-554a-4be4-ae33-bd5ce5e6c135\n44c052ee-5943-4acd-b9a4-802f29c64930\n040fbf64-7fa6-4bf6-a21b-e01ce9130a79\n64dd3189-d7be-4b5a-a198-b1126c71be56\nbd62ba63-ba73-4cbf-aaaf-b48d7ba896cb\n6f1cab45-87c9-4d8b-843c-4aa449792c4b\n8248db24-800b-4978-9c2d-95de7b815f4f\n94127b41-2dbb-4000-a931-a9d72de16a85\ne53a5bf7-80a2-423a-a0fe-84c84e740ce7\neaafab62-ee42-432e-a9b4-300b66bf0aea\n92d4ecf1-209c-46df-ad16-52f285fdd9fe\n5940dcf3-a531-4bab-b866-a07d97cb89c1\ne490e852-8fd9-4ac0-ad9d-7d96e56cf70b\n1c5f434f-42ef-443a-99f2-b92bd87c0f33\n899695d5-3798-410b-b2ca-223b4d65267b\n7805569a-52c2-496e-9b20-7dd98c99679e\n5535c68e-6664-41c9-8ed0-cca44db1bd56\n8afd0e08-a155-4874-ac42-6bf9bafe345d\nf7534858-f458-4081-a57f-b4d6dbcf92aa\ne1a56f17-bcc8-48bd-a378-975e3cfeb320\n6a7d7741-f903-4755-8391-a1e610440f08\n7b3a5536-52d9-4d03-b927-916424537cef\ndfb9458b-9651-4bdb-9b2f-cc1ffa2da7be\ned107219-0cd6-4eb6-ac44-e1b22de87dcb\n9ed47a9a-0efc-4fa6-8ea9-fbda40998ab0\n3a97ff33-b4e9-440f-879d-ee6d12949c39\n4af32e71-837d-4e73-b9b9-380be9eee665\n0a8469e9-e205-4a6b-85a6-cff75cf6da42\nbda606d1-8f02-4fec-a199-f370041e34a7\n6cf2601e-c496-4f98-a7d9-ca355fc7e066\nc3f1b09c-d9d5-40b0-abfd-20d6567e1e7e\n9f73424d-7591-4f01-bfc3-eb12e903a30f\nb4dcc57e-7bed-483f-82db-c5b1184f201c\n845306e7-320c-4722-a93c-cdbb4e404167\na62ea73d-f046-4cc5-94e9-043a5af6181b\n63929b78-dc2c-4d00-800c-826e8ed04386\n4344090b-a631-4a76-a310-cfabadcfe7a8\nf9d2c4a7-c84d-4ac5-82a1-99e6e3689fb9\n05a1bf65-55c9-4d96-8f8f-6c51619eb2fa\nfa02ae07-045f-4538-8df4-f8b24e9c0153\n5770592b-c2e0-4560-9177-20d42f647815\nb053cee9-d910-4e7f-bbb1-d216e669fc3f\n02427cde-0199-4e54-8bd1-5afcbc5005cc\n25d6806b-9578-45f7-8a4e-997b9b22bdff\n7fa637d9-adc0-4964-bce2-3a2b0bcc4941\nef3f3e07-4faa-49e4-959d-a1488bf3d386\nb549cdd1-f777-4b15-b05e-49917fefef97\n9ee81e7d-2a3b-415f-b54e-fe2541c52483\n8bde0f6c-c0f7-4b3a-b970-38c0963f241d\n09d2c213-6001-4d31-9cc8-e966a40e6ad5\nf996f79e-67a5-4c79-a88f-d08deacb3870\n06e72f89-3a55-45a8-ab15-232d94aa5d97\nc21d4609-26e0-49eb-929f-3e9993fa43be\ncbbbd7db-4fe4-41b7-aa5b-3b77bd69a92e\na61398a9-251e-440c-9966-872afd9087b0\n96517c7b-4538-4906-adf1-c8dbb81dd1e8\nfd8cb51a-1223-4a3e-9e68-c94a16530cb8\n7d295a26-14b2-433b-8ec9-dbbc0462e4c3\n14ccb8e8-4386-4032-ad77-7be39ac75a02\n9dd5fe77-359a-42d3-a94b-4a6237ed3268\nb99bc049-6cac-4626-82d1-2c31df2fbc53\nbc839ea3-3c13-4bf8-aadf-63ce8d404455\nd401c661-5635-4225-8f91-b60ea5437341\n720109a8-fd15-4410-9d6a-8cfe9284ffca\n8eb7e069-6d25-47fd-a64e-f7be2243861e\n52d23317-1f49-4bf5-826e-e591a3002c32\nc308bdbf-7d56-4512-87ca-08e94b0cfc8e\n3a6e3508-a8bc-405e-97bf-4b5904d8baa7\n38812941-f2d7-40a1-9871-b6436d2d0a43\n3850613f-c664-4f6a-97fe-6afd733d235f\n6abf1ff2-6dec-4e0c-b804-95f8a8520001\n44347201-00c5-4419-b932-a583c7892837\nc314c2df-1c92-4388-bdee-252d70af3c9d\ncda0f62c-8d7e-4574-a638-2c19dd846e96\n300f06d0-c9ed-4f39-b2a0-c7d8c291ddea\nc9a3bc9d-8e96-4325-9c50-d97da7451252\n136f070d-1575-486b-a6c2-94bf7c306e27\neaad1e94-9058-4279-aa2b-99214e281c6d\ne3d8f6dd-9835-4fcb-b795-8fef15a11b9a\ne462a90e-d233-4684-8b58-3827d91712f8\n63ddb9e5-237a-43b1-9bf9-5a4921dd40d3\nd12797ec-1c19-4278-8b8f-ad2cdd7e5f4f\nd98e2fe0-7c2f-4135-8805-bdc7a961cd9a\n13486602-e9c9-4cc1-a7af-432932b3e21f\n3ea24f44-7fc6-41b9-90d7-ca8ea56b7d8f\nfb884fb6-4b8f-4515-a00b-92c5935c6bee\nd4061338-a5eb-4353-ad6a-99cd2cfa8701\nfbb7dbdc-9757-40d3-b318-25b075cfb397\nec8604cc-ef93-4f68-a6ca-899305a4107a\n3b43d8ea-dfa4-407e-823c-6b8032afcaaa\nb04ed141-000e-4eed-ae12-dc06738f9225\n3be6d0cc-3525-4c70-be71-a570296b9980\n891ae0fa-ecd6-41b7-a77a-d2271d5dfef8\n39944ae4-c8a2-4b37-b7aa-74f9649cc704\nabb4dfae-8916-4169-9652-ac4bbef81f05\nfbcb5b6b-c5af-454c-8151-29d0e7444e64\ndd10cbf4-8ce8-466b-8a89-1772462aa268\n8736bafc-ba70-49fb-926f-46643aec6542\n08d1487f-0ce9-4bac-8f2b-0b54ff6c94ab\nd5ed40ec-1b3d-4f39-835a-85ef395be13b\n7b7039fd-687b-4810-93b9-633926a734b3\n797df233-4f71-443f-8abd-32ecc53139ee\n42a2f02a-90a5-473c-953d-e4ab4714207c\n59d28d22-cd7f-4f45-9785-ffd30f5735d5\n1ee560e5-174f-46c8-ba81-b1fcb762718a\n54ad96c5-7231-4c2c-abde-8644bf55c04b\n28ae7bb1-3a62-4de2-9a6e-78f316b2ff68\n8744daf9-a678-4291-8d70-5351ac5395d4\n9e9ef35b-df60-4479-8c64-79d869bcc3b4\n2746f48e-d5b5-49af-8adb-eb5f50b793b0\nd758d56c-324e-43b1-8a93-971c66ec8cb0\n7a0e1f6f-15f0-41c8-a9a3-acdda7a9ab3e\n7f692235-655c-4f02-97bd-9b250a0c9762\nc156939e-6f7a-4344-a876-d0bf11d15a8f\n6cee1c10-3e28-4e47-a51c-54b4dda775d6\na33bee7a-75b8-4dbc-90bf-ddfc361bf45a\na4e0a166-05a6-40e2-aae1-436e41d3e2d4\n039e2520-8bb1-485b-b1d9-83dba7307ce4\n6d06782b-469f-45ee-b522-ab28429498c5\nfc3218af-ddc5-4755-905b-796cc2eaff5e\n7c374bb4-363b-4b09-bb00-096e4891e823\n003873cc-732b-4879-815e-0c19c6e7086e\na7752cc9-63f0-4fd9-8635-897f3427ab1e\n857c4a78-d9d8-4baf-b014-27645f8db151\n1597fe60-c4d9-456c-b35e-bb4d86e4ad2d\nff0f94d1-d33a-4782-be19-dee5a6641432\nc2300364-f8ac-4390-8180-c5c3c8c7a9fe\n6378b24e-9125-44dc-bec2-7b89ba20d155\n576459bb-8a18-4abd-af77-88c8c94b3644\n37f48522-170e-4f52-85fa-71a85763903e\na79d9181-f507-4483-83af-7e93e30124dd\n19e09632-38d1-4ab7-9025-29fc2da3c075\nd93d5a26-856f-43c5-80fd-b1310c35b18e\n3919bcf7-b658-4000-a86d-74e65e9a9fcf\nb886dbf0-9ce2-4a62-b859-1cb6ef4eff19\n95436012-7af2-4df5-8c33-a9245fb7b599\nfb61000a-7fad-447f-9c53-b19aff3ab2c5\n0e836cec-c5bf-4e20-8034-137296454871\n8623d9c4-2137-41e3-ac0e-04ed8aba3e06\n86689fe0-319b-48e4-9873-301d697d469f\necb876fb-6d0e-43e0-a243-a3b7c49ff1d0\ne50b79b2-50f9-4f77-add0-bbe7999da3cf\n25a1dd9f-8847-4584-b709-d29de495cce6\n07f1faf5-75b5-4d33-95e4-ed30dcea25d9\nb0e30a47-3e58-4ce1-84ae-4bc39e1f833e\n02c07b40-754b-464a-999c-b9ea3daae976\nb3dd2450-a2df-4599-a9dc-4133ccb49fb2\nac9dab3b-7890-47dd-b0e6-07925cd75181\n2dec6ec8-7018-4958-9fc6-8ae2d389bdb6\n95029043-ec6c-4910-8b08-e5c3ccf49da9\nd9111962-5739-4e09-ab0a-6f8e3d94847f\n058bf699-b393-47ac-8b8c-98c03060da66\ndfa2ba6f-0747-4239-9900-e27be496718d\nb0068c08-045c-464e-9df3-f86e66987bd2\nc72d2a43-d35c-4ec2-8b99-ba25853c4089\n1258065f-d967-46a9-994a-68092f1232b7\nab089f40-13d7-4bbd-be3c-a2cc49254799\n459a860a-8d9e-4f77-96ae-48ff994af5e0\nd7cb4fc5-2532-4186-9c9b-315483f8b3ee\n60bb24be-ea0f-45c8-96e0-5a54c15546ff\n3cfba63d-94ff-41b1-a171-cc2728389c75\ne5406272-f5a0-4fc1-bcab-2b0d2aad416a\na76cd6fe-024e-4201-9929-fe681c87dbc3\ne0b472d2-686d-4df6-af08-82cf71e82703\nee8a4bfe-51a0-4520-95e1-788eb6784b14\nd800db3f-e727-4684-8dc5-75f2ac90b3da\n25024728-b8ab-4b2d-a4c5-f46b5c37c494\n16cfdae0-387a-42b3-acd0-f5f9f5e06380\nfaeee7fd-c0c9-405f-88eb-bb6401d86e17\ne24998a8-0b1d-4c2a-8a74-8fc55ebe3893\n02f6c21b-c5cb-4d20-ac3c-e6ce06340289\n254cdd2a-a390-4f4b-95e9-747f983a86c1\n9a9fc314-c4a8-46f7-b1b2-a7b3fa3ddd94\n5ba6c923-934d-4fc8-b04d-da7ca64e8689\nfefe2698-1278-4782-a4cf-b3256035c45d\n5ef3f48c-1d95-40b8-ae2d-e7a4c09dd2fa\n74f1a653-5dae-40a5-9678-ef003fd4bd41\nd3cdd4f4-1799-4898-8f72-f4c1bce0a0f1\n0648d7b9-a472-4e58-a278-f358089b2447\na6ff6dec-fc6a-4d22-8da6-dd02b9cb79bd\n07ca8636-5ae5-486f-bb56-48da9dd717cc\n28e82dce-d4fc-47cc-adf3-47241d79e3a9\n73fcb8f1-7272-4004-8773-70017d00b045\n4f15cc9f-ae79-4969-b974-eed5e54801f4\nb0352e3c-d6a0-4f40-9e8a-a5b8056daac8\n5e82048d-cf7d-4fdf-a175-202eac8e04fc\n52fb10d2-f377-4421-bc28-8d5980f086e5\na464d758-f708-4945-a762-e71a1c714907\n7de91257-ee86-4baa-bc36-f62c2af7742f\n1310aec4-a564-4923-b740-66ed0ad33051\n1f64be39-ad88-45bc-9d08-f4ace548dbd8\nd6625f89-005b-45d8-a999-0c3a8b38df3e\n985be859-b0b3-4135-b55f-5797ee326478\ncce1529a-dd08-4497-a663-cc619d15f8cb\n8ed3a94b-1724-49a5-b9fc-2a92c69446af\n0d8ea9c4-fbf2-4b10-89b4-826cfa9ea4fc\n9828258c-1689-4456-8fb5-78559e1cd683\n3d0313f0-aa30-4714-8db5-9132496fc502\nf13764e1-8d2a-46b5-9fe1-556b8bb1ac03\n8b8022a5-a4aa-4717-9768-2d96799a1b1c\nfacc78c9-2b82-41e8-9ecd-d055edb6b3fd\n44542270-e613-4e00-bc1b-96f85e903449\n6a36c4ff-4fad-4845-b7d5-fe33531dd9e3\n2e5ba188-b086-42d5-88e3-c7663c5bdd53\n5b0f0bc1-71da-4ec8-a081-624e1e47a4d6\n8195ab88-f78a-4749-9997-934f29744b2f\n4e1b790a-f4f1-4a19-b8cd-e34c2f88ae94\n137f5e93-8728-4d1d-8b0b-25a6590cd48c\n93a1671b-1c0c-410b-b5da-f35012107ce7\ne3c6f996-5895-4d32-aa9f-2a1e86150679\nfbd5e430-7755-4a4f-b5c6-42c854d1fa57\nb74f651b-5ab9-4dd6-b91a-57e154d568ed\n4540c133-5581-48bf-a5ea-6875bc0eaba7\n9a83adcd-5f6e-4d97-bd99-46fd6796aba4\na0fc0fd0-8910-449b-867f-78082bdbd5cd\n816ebd36-27b2-4d07-bd5a-8b7de6244d4d\n98bdd795-0fde-437c-9b28-d137cedfd1fd\n94deb61b-5d86-4842-8e73-bb50825eb5bb\n29bf4be3-036d-435e-a62d-902ed40050b9\n5366bfdd-665d-43f9-8a7a-28399072fd73\n15cce801-5570-4bac-b4d2-bb10db2be51d\n94c0f1ff-383b-4eb4-9117-4f019af99707\n4e3a82fe-cac7-4e53-a4c7-c7b0a75d2766\n8a539da1-d4dc-40da-b769-1d8d3ca6e1c0\n471d8468-2d05-4271-b17d-2b99c30720ac\n84678fc9-20a9-46c0-b8c0-40c67b4b57ac\n8a5b14fc-ff75-478a-b318-ce68ad611449\ne630d0d2-27f2-49e5-8590-c0923122f83a\n51b785bd-0986-4b38-a15c-5e225567faeb\na2bfe271-e12b-46eb-935e-855a3b970bc7\n1167a300-00fc-4fad-b3a7-2c597cbcfa01\n5e975e9c-da75-4175-8042-d5cf50b5d1a4\nbbbecfe6-ac12-4eef-8e07-12e57465cecc\n1ec607ed-2e40-4685-9349-d2743fb72265\n8070de5f-21fc-4ccf-ac3c-fdc745b2b6d9\na8af379c-dc23-466d-9919-c74a0d2af54f\n476423f2-6c20-4226-bba1-0bc90ab07afe\n9bff9a33-99ab-4321-9533-5214acfa8aa2\n1c1173d4-92be-44a7-91e6-649b6a55198f\n693dd17c-301a-4938-8174-143c956fb303\n23212784-a495-4617-af1b-2f49cecf4e01\n338c27b3-eba9-477e-a1a2-a5271e682778\naf0135e8-d189-46ba-8d3c-91e323e870bb\n895a8903-b7b1-4e79-bc6a-d04826be9ab4\n27827a77-0ac2-4414-aec4-c2e68829f73b\ne42e2236-fd6c-4392-bcf0-5759b5a79b17\n84dcb5db-ba33-45b7-ad2f-37b44500ce30\nc00690a1-6998-4a09-aa40-b40723dd10e7\nfdf8b2ea-49f9-4cb8-8440-f8a21d3d858c\n56fb9141-b70f-4642-859a-32d7bea16cd5\nde31f706-8361-46ba-8f2c-dc6be43db575\n6a74fc2f-b0bb-447d-bc1e-f7dd7bb109dd\n978c56b3-d10c-42d8-be3f-9f78aab80bbf\n8ffac5a9-cb05-470c-82e9-727fedf0ea63\n8e5318c1-6d71-4535-ad9a-c180516a2140\n32615a15-9608-408b-8dc9-d7c54d78bdc8\n841467a7-d5cc-4199-9fe8-1273b40b05d3\ndfe35247-e1e0-44bf-90e4-25ecfa6ac705\nb716aefd-0b06-452a-be77-5bec6c1259a8\nc58a4450-852b-4523-aec5-8ac34e66e65b\n73ec4a7f-7f79-43a6-b68a-623b026e24e1\n73018988-8de5-4a0b-a257-800a5357ad31\nbda03a77-e42c-4f1a-9143-f199814f8748\n5662c44a-8bf6-4287-b022-ebbd37ac23b0\n283ad856-1834-407d-a816-11391e5fdf37\nc40337eb-20cd-4dd2-85fb-8f851fddbb9a\nb0571539-68b9-4c5b-90bc-b86c619d50e2\ne52bf20e-9972-43e1-aa99-adea09e6b636\n68a0c0fe-201f-4b04-9e93-f175fdd97665\n37ff618c-9198-42f0-9a95-2ce0ab1812c4\n826bf42e-d3e7-4e86-9d0c-adadc2df2394\nc67f1b6e-1426-475e-abee-3a1bc4799ac8\n65319a52-1e48-4509-b41a-61f445bdf05c\n410d81a6-70f7-4040-8534-8a55bd664023\ne119515b-4f86-4052-a107-ff00287b856f\n50568c0e-b6e6-4ac9-9eae-2f5fbaa805c6\n8d0e462a-592d-497c-94e1-e4cd2e438656\n2d71eb3c-8fed-46a1-8c4d-0868ba1bc466\ne1ac60c9-1977-4b97-ae5f-92858bde0c57\n8407b4af-122b-4919-9770-1aca14de5bf0\n774a893a-0005-4d00-9d86-90fb30eb41f3\nb8448d1b-ce76-41b9-834a-0d1da0da0f6e\n9a2d1586-6053-42c2-8754-9dfd42d8472d\n522b0186-f9b6-4702-a4f9-69c9a41da388\nb3b480f0-76a7-4298-9ec7-fca4533cd5ca\n6ad72bd2-b7a8-4844-93b5-9d861ff205bd\n4d9d94ad-6de6-444a-a89b-fd3cb8f13940\n8231aaec-a73e-4af0-8e14-290a1208abea\n0ccdc3f8-b871-47ac-af24-cfce7b2f0f78\n61aec660-454a-408c-ac19-0d79c5233db1\n4c385b74-dd89-4811-a8af-25f8c66e587b\n880080e2-5a04-4596-a95c-3dce713be6ba\n09fb2305-6edc-40a8-9517-27fb00940f2c\n14b346a7-4f6e-4a7c-9101-2905ed198729\nf1ae760a-d1e5-4375-a036-2e7abb696392\nff1d42e6-b8f2-48dc-850f-52dd9e37361a\n1508aac1-7016-4baa-b012-2b360c0f3a18\n2bf96a5c-f752-4935-b1e4-18ab9ff084c6\nff53c7cc-0c8c-41f6-8955-f62e4617367a\naff7ce0f-22d0-423f-a719-953acf004085\n80b6c64d-440a-41ce-837d-c9995a774c23\n375b3f30-528a-4be3-a59b-521a24a19bd5\n23f9bf87-9524-4408-a2d4-0fee86f0fd1f\nfa64184e-8456-4566-8889-122824fc6265\n5ca9c643-a6d2-4e3f-ae11-c61b76d4e42e\na9749d62-6f36-43e0-b267-474675281b72\na1ff72c9-11c8-4223-8c3d-39491e3a3fdc\n88cb8df4-7c61-49fb-ac00-8e3f8925a5c1\nbcc18948-db92-4532-894f-72112f8c8218\n2c28e99c-5de3-47d5-a0fc-3b5d02bfacc1\nfc1c471c-7912-460b-8853-34402c646743\n9c598522-eba5-4007-908c-b086693dadf1\nfe356776-a66e-4e30-aa4a-0868836edbd1\n03d60412-6729-472c-9d06-732ea90534e6\nf10edaa2-4e30-4188-ad05-7943f2490b3c\n4013252a-c441-408d-b6e8-0234500fbd20\n963bb579-dfba-46a7-b5ba-9ca6e2737461\nadf41fdc-495b-4892-9c9c-683b5c050370\n78b26cf4-6e35-4c17-a266-4cf7b119e29c\n8ee13d7f-39d3-4893-9ced-cb64a3ebf6b2\n56fc57a0-676e-469b-bc86-c91a828a1961\n3a6a4b24-6b16-412a-967d-d345edfdd172\n81c1d439-b9b8-4ff6-bcb9-352fb16f3527\n28a6ef3b-1a2b-4700-b346-a20ad996ff90\nec02f880-76a5-4c63-b604-ae6eaa40fe4b\n533e46d3-abd0-45dd-bafb-f9fbce46402b\n2f11dbbc-d225-432c-8fba-6011ac68cd49\nd2196ee3-839f-4442-a9da-6a4b918b11eb\ncd4f2b17-e55b-4de5-b6f7-e46e583331a2\nfac3ccf3-5a21-412a-b92b-1e1259c1663b\n6de1a381-0128-4f90-a34d-c25c5f231451\n1ebc3e9c-b323-446c-9003-a28aec7b18a3\n0e9aab80-4daa-47c7-b865-74e65d0b066f\na400c9c0-4dd3-4f6b-a6ce-1a592828d8e1\n650f7a0c-52cc-4d38-81b3-763b4692d30c\nc2822735-18e9-4299-86f3-fc5d75403cb4\n2fdfbf04-e71a-48ab-b9ae-6f61bdd213b3\n0d67d976-1ed2-4f2c-a5ee-0fe297e946f7\nefee213b-e27d-4158-aaeb-943bb0cf4406\n0f639f01-a976-4e54-8e06-0b9867910532\n914e88cb-89cf-4a7a-ad6d-02fc50adfd6f\n59c54905-1448-4553-a578-be089a464f78\n55c2ef34-5d4c-4016-99e4-fec4c75dce03\n952a8849-f482-42ce-8b12-72c6e574f514\n83bd5762-f8aa-4d53-b3a9-6ed9653cf5ad\n032f5e41-19de-47bb-a4ee-c45d77db4fc6\nb77268a7-3ca2-4f87-ab43-1f2f7d0aa898\nfb392d41-c2ec-4e3a-8b41-8d6c82b0dacc\n8c9392d3-eada-48de-8e1c-f6532a644f28\ndefb756f-ed7f-44ae-b779-02d3f3188b1b\n1eef52c6-c8ce-461b-8906-253c82afbf91\n1dc6f0f3-7a7e-48fa-b47e-5a5700482980\n21a354d7-d941-497b-bb48-e5597f3498ff\n6a5c8076-02bf-4e11-8f68-82a95672a0e7\n763f90a6-77b8-4c70-9983-127a627dc9e7\n46395aa2-4a2b-476a-99cb-2d8168fec521\n19a94a3e-9746-4f91-9466-af91e9476158\nb9464a64-c9b0-4e0d-9fdb-d2629c148aa6\n2e58ebc7-74de-4093-b21a-e8c9e696b969\n9b0ad899-9eb6-4740-8b0b-7d6a3b310f47\n057ca8dc-df78-4723-923e-c818b734704e\n1e49ea9d-f609-4fbd-8004-55a17c8315c8\n9f6e68f7-3035-472d-8686-0053484b2dcd\n5bbee74d-739f-4d3a-b56d-ee214e79646c\nf0ded499-5505-467f-bcef-d775f4a3cec6\n3c490696-d063-4492-ab51-c80acf9ad91d\nea81292c-725f-43c8-ba49-5d9b99a6d515\n2cc1caae-033f-43c5-b955-2b9348c63ad7\n950ba229-855a-4208-9a82-91b9030389ee\n01d92f2a-c6d2-4d2f-a66b-688ca8e8be49\nfb2e73ee-1db7-4249-88c3-7763cf35dc38\nc63c0e34-9a23-49a0-8872-418a201572c9\neb4b3768-51ca-4db1-8107-14001fd5124c\nffbe4165-b03e-4a4d-8662-7973ff40bb80\n05d7c416-9bad-4f86-906c-279001585a3f\n999b3d5c-c79a-4325-b0ee-1338a4b38820\n765e3109-3446-46fa-a6c6-fb3981ce3343\nddffb0ca-2224-4b04-9ebe-f088ec75c5b3\na55d89f1-f13a-4bad-a9ca-3d42cba3fdac\ne62c16f4-82e7-4c68-820c-2846d767a50b\na28701ff-2cb2-46f7-b0e3-ef781c068c31\n6bda2e76-f5ef-4eb9-af44-9d20c29ef90d\n6d237976-a867-4af9-8f72-4ef45585f9a8\n649b9f7a-0ab2-4558-99b2-0fcac556828e\n7a328a23-0825-46d0-831b-aa52510fffd8\n2ec3746e-1a97-4c1b-9cc8-aa2ddd2709f1\n2d3abb73-bd03-411e-9b68-393ee795fa16\nc7ced715-48b1-4d16-9195-b7c32cbbedc6\nd31a100b-79d2-43fd-a67d-87a2516f14f7\n25da63d8-9458-4ad9-9ebb-cdb0312a2fdc\n78b5e681-7ba9-4d6d-955b-42ef35427356\n343326e9-b1bb-4349-826d-78a6aacad967\n2a5b0054-e487-4da4-88e0-131ecc6b39ca\n33a50572-d25d-4610-aeee-fb3d63104731\n49123fcb-6d97-4c50-bc4a-bad84798240c\n7e91c53c-0f09-4d44-bbce-0207fb0e48fc\nffe4c2be-21c2-4de1-b549-c9294c48a257\n7f38c23f-29de-4d6b-8155-9d2060042aae\n9b000c7a-b0d1-4fa0-ae85-c40b5b4a1f56\n96326cf8-5064-446e-945b-5bc6187e2af9\n5731f467-4bcb-4fa7-839f-380ef6c731e8\n03b5bf31-dbe3-4ba7-9bff-89ebd5d6cf6f\n0a57f805-c6f3-4c51-91e5-eb25da37bcbb\n58d46993-8b01-477b-9ecd-82c206702f20\n06fcd482-fcf3-4787-84e0-0cd35e537eea\n2c4fe989-f5b0-40bd-a7a4-8bf65dcf2a90\n24397645-c202-4b95-ab40-2a3e0ec95ba7\nd37a8fc3-0f47-4ed2-8931-d44791b0dd3f\n28d7b4df-cace-4d13-8bd4-91a143316a5f\n79a3cbca-c6cc-4254-bd9d-1e6c880747c9\n997b0577-4566-4273-975b-56f6e611362b\na9aa9668-bae0-4b3b-82ad-3df1ce79494d\nba4ace26-7d46-4200-8944-1179f2b70328\n8880e252-bd74-41a1-bafc-2236f19e3584\nd8c3f4f5-d248-4de1-b5af-86d55e04d4fc\n3e7b2aa6-9c19-4c99-91cd-db3c3ddcec93\n674eaeb4-2933-4f73-9463-649c3f2fb76d\nef0b5bc6-cbe5-4397-8d89-220f606efcd0\n7fe2bb88-f561-4588-a7f5-5a9db6a52510\n44b55277-ef05-4139-83d0-1d673d5f75b7\n62f35890-1b0f-4bef-8e39-cb29a69555ed\n9f2f2d88-285d-4838-9b6f-4b6956ce4bbd\n98c79614-2daf-40ae-888d-bcc779eca907\ne08f5f4f-0f23-464d-941c-f76e0258feb1\n37aaad1b-26e6-4948-87ff-b32055cc9b13\n54ae59c2-ff10-4ea8-b65a-4b6f800c1bda\n02d1c472-de20-422a-ae35-bceb6a59d865\n597443e4-7e43-4894-a347-d1ed615cd38f\nf5eb1b89-c4a3-47b7-92f4-4797081c0b4c\nb67f31aa-cd5e-48c3-a89b-677bc5f6f2c6\ncc1532d9-c78e-4b37-98de-6bdc6d341f30\n0f091392-3bcf-4214-beab-de56471a6c61\n6c483cde-bebf-4b72-90a8-56e228d6d456\n387e017e-d2ce-4db0-a821-339e39a53efd\n0db639e6-696c-4070-86a4-f4bce95f3c08\n4b0b72b5-b257-40eb-b056-5f661918c10f\n92a9d8e3-8a2d-40db-9467-916961502723\n683d28d3-4ab2-4e14-aa68-6e0dfa4c6986\n4a5a8fb1-a42e-47d3-a014-1f626ededcb9\na69c9881-6a31-4e2b-b275-aef43547ec5c\n1d2fac73-ef21-41c2-b15e-60ba74d75aad\n5a1f14e1-81ef-4749-bdba-5240c818e7bf\nabc8846a-7353-46bc-89ec-ef3ed3d4ad7e\n9c69bc33-523b-4678-8b65-073c4d4bcd1e\nd2b25a16-4479-4b6f-b956-afc1b04a7058\n150ab186-0df9-4012-b651-7ffa534c6d9d\ne03745e2-6c68-4d0e-8170-8a39a34623af\ncaf31e82-9f75-4b18-84c1-d71a73bf6655\n0dad5770-b1ae-4e02-936f-6614c3128a59\n56552c72-d723-4ad4-ab57-1f30f6776eef\n29979ecc-a60c-450a-a437-423fc4d40770\ne175e253-6e1c-43c3-b6ca-d31d6803fbc1\n80e129d0-94bf-4e67-82ce-dbaf8dbbe6b1\n7042aa09-e083-4441-bff0-ff35a4d04867\ne6e05463-d353-4d3e-a031-aabdd76eda62\n5ee3614e-2a34-4483-8b5a-e227f97334a3\n25d4e5aa-f2eb-4e1c-b53b-2ea20ee2e037\n30da9f81-59d8-4f05-9b1b-01cf441f1981\n12db0d97-a7ce-451b-845d-95c010392321\n4de4f646-717f-4bf7-9e38-24027421ef53\n4160d18b-4295-4db7-a67d-962b04bae981\n2727418f-a5f3-4534-80e3-b26371a9e81e\ndf10b05f-a501-448d-8e01-6bd4c45891d5\nce70d965-c097-4431-be32-ac56614cad44\nae4ab5fe-77cb-436f-9a89-f9d240381fd0\naaed1b77-ff2f-414c-a837-1f63aad232df\n86d08757-db14-4fce-829b-3168cf79dbb7\nf4c93451-7f35-4f03-9dee-f8c1a085f97d\nd4ad6f95-6343-47ed-a5f2-208d30676925\nc0bf1012-3ad1-4b37-9bd7-cad320d734a3\ncf898f6a-9a5d-44fe-a282-3aac186b4e0c\n25e0335f-82dc-4854-bab0-b551ae3fbb80\n1bab298a-3af0-45ea-89ce-5e18798ab0ed\nacdea5fe-8603-474a-a239-1cfffa27cfe0\nf177875c-d3d7-4b00-a244-e7838046c439\nd28b5375-a0c7-4dda-9d29-0a3312931ae3\n129b1817-37ae-42fb-9ad0-668b6282f2aa\n39fbb686-2c43-4b3b-b357-b9a1512b4643\na8b1565e-b37d-4fb7-b34b-5a7457f6c562\nef6e3dbe-cb1e-4d1b-ba02-165a87821b8c\n7a577dcc-fb00-4588-a971-c481507befb2\nf720897b-ec43-4f15-bef5-d9e0aaab2a6c\n153dd789-0548-40cf-8fe7-d4da6dc588a8\nb60ddb87-7ab4-4ca6-9bd7-93864743a79b\n9e0e4ed6-effe-4a99-9db2-4d11a4df09d8\ne42031e1-8d57-4291-af3d-1fc1657573b2\ndcb3254a-df3a-4dc1-a217-fb7866b290fa\ne63e8490-0d8d-4169-ba35-1ecd964fc0e1\n0a985c9a-7e60-4c97-b232-da4cd93ca511\n2f0a94c6-9eb3-4f00-b838-9aa5ae067011\nf2b78e53-318e-4679-9835-571ccb0a6406\n25c339df-ceb6-48e4-884f-009d073aeb83\n6acf0a00-2d16-4d7a-a2a4-14864998638e\ne69480da-ac87-4ab7-8ea5-b7e07e0f42a7\n00f3f7dc-9230-47bc-aa38-24070655ef85\nbdad7dde-ca45-4c00-b8a6-e12472a0cbfd\n63d1efdf-906d-43af-9424-ddc7012e7a0a\nf920c22c-2057-44d4-8383-d5e4900ba174\na3b8b8d1-5755-43e0-b22b-2c838f8bdb08\n65433421-f3a6-4745-bbc5-56ac6e6b52c2\nd4046bc2-dab2-404a-ad69-fc196c82de8a\nab069982-6081-42bc-ab43-e246e748183d\n1bf7437a-016e-4dd3-8ada-3486672b4061\nefee821f-aaf4-4024-895a-d470ead64bab\nee13ac8f-609d-4ee3-a446-f58cd2565b56\n97fa4d57-bb81-482b-a313-254bb185240b\n54b4d058-e9f8-4769-9528-9b7ceb7c899b\n5ff68238-98e4-47f7-9b95-6e9c80c2b44f\n26bd3bbd-2e26-4c70-91eb-603c84fb534b\n3c04767f-0ae0-4531-a607-c183f157da3f\n31b8cfb3-db8c-4154-a13d-8f2999c6361f\ne9900f4b-8b1f-4d2e-b563-87e69e61538d\n4ebc0d0c-b47c-47b4-8699-85ba5d7d8bd8\n9710406b-40b7-4fa5-9579-4d89269b0c6b\n176b5a5f-0daa-4174-b37a-247885131187\n05c409ef-0057-464f-ade7-5be37e6b25a2\n36ca05be-2555-4680-a637-c0e24f40d097\ne123a7eb-5e70-470c-a7f7-2c0b7a5ab9d2\n680314d7-a4ed-45a1-9e17-bd23998c3c4b\n043f244f-b9a7-4506-8da3-bcda1e7191a3\nb563fd06-a692-461b-83cb-cf66d1c00b5d\ned1a6c9b-86cb-4df6-89c1-8e4a1c450b6e\nab7aa715-7618-4d99-82c4-53e9ffed1b2c\n9c339930-4eb3-4421-bb0e-e3be6be6fddc\n992b4acd-220d-4336-a428-67d2ff87773d\n95ab8ad7-ee64-4ac0-a3b5-8eb2228862e9\n81d12422-6350-4e87-b72b-4d13ea4d274e\nb407685b-7472-4ead-b3da-1b35073bf069\n83285f19-b650-4bb3-8cbf-49bf83483697\n9c430e12-f099-464b-861d-3b1cbfc7ca4f\n410c9928-03ab-4cd0-8548-e863ff810914\n88d8887a-ef90-4118-adfd-9fb0a6405080\n549ead8e-1fb1-4736-8c11-d779289604ad\ncb2c754b-6657-4ee3-82f5-09079d618e8c\n886a3801-c66a-43e6-ab1e-7ba3bc79ac96\n4b8b3da3-cd15-41de-966e-fee02d13037f\n15752043-a3de-41e6-86eb-68e907563345\n19cb2169-56a8-46e4-b343-374f3ced9ee7\naa753da9-8e17-4150-a609-1afc34eae8f2\n2e8440f9-7c62-4ed1-9bdd-1f9d63eea62c\nea9086eb-ca60-4c60-b86f-640636833a87\n621eb9aa-8d6c-44f6-b736-d9f368602b58\n525e5212-a268-4ffd-b1aa-f767b1ee4004\n02dbf18f-8108-438c-8289-7ecb806284f2\n357757cb-c895-4526-a46f-702c0df02f2f\n63703781-182d-4a22-8f87-7c3ae16eb628\nf7c57229-c26e-4675-a906-a05aa009f170\nb05a1fd2-cc64-453f-be6f-4c200b80f7f3\n0a2b1bb2-a5c0-49a1-848e-f484eca36477\n9ddcb9dc-7e92-4792-ba48-bd906a166176\na852ef89-99ca-437a-ac9e-292b0fbbefad\n5278f4c8-4c7c-44a8-b0c3-498ff17049a0\n4c0dce45-9263-4444-aea9-2b234141f8a2\n1e5d1303-19bc-4415-9357-f6b39b52bb9f\nfb89e76f-df6c-4acb-82a4-e7f4b0933a65\nb9c22a2b-f51d-4281-ad22-8ffe80631833\nbe25da92-05f6-4a8f-ab63-6c11ad28be3d\n9c65070f-65cd-4c6f-8e4e-772a6fefe5c8\ncd541855-2a4e-4480-9aaf-4a6005479d7f\n38608bd0-6dd6-41ca-8970-40220e68bdd3\nf06e0bf3-5dc5-45bb-b7d5-b2ef51103736\nba5eb3a7-576a-4c04-8ef7-b5e061c8f927\n9b22faa6-e47b-4c62-bcf6-7ebdf7d1461e\nb62340dc-627f-4546-b2c2-68a5f84044c3\nd4519b40-fc58-4133-972b-d11b575b19e1\nea7e8f9f-4270-46df-9266-d814ef72f95d\n02714b60-1f77-4697-8dbc-d5268d034a04\nde181285-f425-4ae9-82cf-5ec9ee6a74f8\n8fac59b3-44c8-4bdd-8698-542dace64134\n03749ba8-3522-4e32-bb09-4225bf9b3993\naf9fd56b-b1d3-4183-83a7-0ff13d7b7d16\nb3853116-276d-47b5-9f4c-6867abb267c3\nf497f4a1-2838-4fda-bc29-3244ac2bb067\n211decb3-5da9-4f54-9273-4cff5075ac06\n671e0b09-6f1e-4217-b00b-889273aadbcd\n2ea1168d-84b7-493e-bf90-6305b47fafcc\n13b19c2e-b243-494d-97e9-f04925205054\nb34eb892-5090-41b3-a9d3-dfe39ae2a3c8\n2fa5e945-dcff-4130-8a20-c163ea928b96\nabff74f2-5e25-4ea3-a187-2ee75b998e37\n3d9750d4-4cd9-4f22-92a7-d53ee553664d\n65843e3c-03be-4cda-b55f-dac6d48b425a\n48cf7630-7e19-4b65-98f8-b77dc1de24c3\n0661d7b6-38e5-480c-bba6-63727ed1e07d\nba793fa4-1809-4d75-9f15-160830fb62d9\nfeec3086-51a2-4a0f-b850-cef94cc3a4a8\n6140c8ec-c155-449b-9a5b-22677c6fbb70\n0f48673e-1206-42e4-8191-627147d8d077\n35be6731-7215-4ed3-a740-c4c8634a5568\n51d3c01c-9e86-49da-8fd3-af35bbe3813d\n4033e7c2-dc16-478d-a56a-6bd76421cd69\ned37cc6c-8617-401e-9ad9-e2920a81a6a7\n4346eb89-82dd-431e-980b-39fe3384777a\nfb799a56-a392-4122-9e7c-b5b1525b1cfc\na60583c2-9e0d-4fc5-a486-9047ac50ec9e\nbd7023c2-72de-4711-a503-ecf461fe4019\n526c925e-2bd8-492e-8f61-70a65aef5fae\n2f8fe554-6851-4daa-a208-f77434cacdce\n54ab111f-0039-4dba-8d61-419994523054\n96bfa4da-bf0c-47ea-b37b-553220b4acfb\n1bb4909c-07f8-4c4d-8bdf-c058207140c5\n5137e927-56c3-487d-9c47-b83557f3a6b3\n5c2e66e3-678b-4d84-9d6e-f98f63239af3\n83fed54f-d9ff-4513-a19b-5f6cbd7f7336\n93595d02-7243-4662-b069-8e254a94e2e0\nd93ec3ec-0549-4810-8e9e-2ec2671a613e\n01fcd4dc-37fb-4b9a-acc8-333f91a81268\nabd24eed-c39b-482b-bae3-3be687a8c98b\n3b49d8bc-65ec-496f-a2ab-8965155c678a\na52688b7-f2b1-4115-a035-a8507dff81cb\n98073620-1ee0-4f8a-b673-b1ca6003d2d5\n6263bb9e-2a6e-44f6-bb31-7b60600d7bb7\n6c70219e-c827-488b-a01a-a9a7c9a29f83\n201ab64d-e8b0-4cd0-b857-89e95c9671e5\n31d620ea-8e07-4fb4-b61d-cfcb2ea4289a\nf6479fe7-a380-4dcd-83ba-6dee0f7f793c\n8eade917-9880-4058-a199-dd2eab9f5fe3\nfe1e9bff-b3d0-4d87-bdce-72bc6063392a\n735cf168-6a9d-40ab-9037-f2ecfc88e280\n14a64dfb-62bd-4235-9fd6-00ada2e49666\n88a8701e-d47d-4471-8f6d-3c227885c88a\n34ff56bb-63b3-4589-9c64-50269358f374\n8fd0d093-7c14-4c10-851b-fe86a381ea8a\n4f4f4fb7-8dfd-4579-9b05-c7dc12eb5e0e\n39d6554b-e0f8-462a-8b66-caddbc06d9fe\n4844eadc-3522-4773-9ab9-b51012c801aa\nc1794e79-4724-4541-ab2c-ef4ab6eb6ec1\n5cf47132-8ff0-4ae4-902c-d0c4efaf3c7c\n240d712c-1d4b-4644-a512-b7c36c5ba587\na92329ad-44bf-4fa6-8c15-7b3c0ff1203b\n15b5edeb-11e0-4c82-b68a-6132fd56378c\n2119fe12-a9a2-4017-b90d-e5d3fd87a392\nc5fdf9d6-c963-44e8-890a-b2b528ccbdd8\ne66208a7-dcfa-4961-aec0-c63721489ac8\n2976c2e6-4e2b-423d-902c-ce02d75f1080\n0ec4405b-0c27-47cb-a299-73f53807046b\n24e6f455-4371-4588-88e9-dbbde16e23fa\n5236fd7e-00af-492e-a150-82dab8cfc7c1\ncb3073b1-5a96-4cca-bf10-8d6bbad40f9d\n9d38b850-b5ed-477f-acdf-508e9106162e\n773f2b41-fd75-4f37-ab89-8b7a8cf74d0b\n883ff9b3-ed25-46f7-9d12-e7af54d8d3f0\n213e750c-19d4-4e31-97cf-fc44a7d4e785\na32d1a76-2cb7-4b08-a263-430a6e3e473b\nae5fe766-f111-4780-b549-75a0d1329747\ncb3cad0b-23c5-489a-a720-931ddb7757b4\nc5f6be64-5ca9-4177-8689-c9fe3fe8f26e\n4a253913-a8e5-43c1-b1f9-e90387e6a6e3\n789fa681-f6f6-4475-acf5-397b46fdfde1\nc438f235-f417-4727-b5bd-91c66b12ad5a\n663da710-2864-4078-966a-962194c540c0\ncd0d4d45-02f5-435c-b154-02ffd2eb982a\nc94e0cd9-c54a-4628-aa5a-ba8849fc9d97\ne2bff618-e7ab-4988-9f66-e76de74afd20\nfd2ca980-59be-4e93-9504-253470f80a39\n3fdfe5ee-b88c-4f4d-a2ea-e8fa6b26dfaf\n88cd3dc2-e7d4-4224-8890-7c18c40ea623\n0c1bf1dd-938f-4b21-b6ef-2abdb802faa5\n86d23ce6-48fd-46b7-a7e1-a35cd29426f5\n6fbf8696-afbf-43fe-9b87-250cec4b59e1\n734f9dcc-1c75-41ca-9136-06d39288b4b6\n437d4ea6-b2d1-4fea-a70f-c721c54de55f\n86b83197-8fdf-4980-af99-f872069a2aa3\n38741591-f5b7-4b1b-8396-9e01b58db472\n7a3f2962-6b7f-407d-b7df-a8587a0619e5\n1f8cdb33-848d-48b6-b060-584f39d35b87\n434ec025-fabd-4441-acfa-ed895d111784\nea84f48a-bccc-459c-99f3-e41744aaec89\n93befbd5-35e5-4eba-957c-1cea27a70d14\n7f56e5af-e859-4342-a847-979c54a1717f\n3f874c55-099a-40bb-99d7-6f21a1f8f67d\nb25fb6da-b4fd-4f53-a803-438ca094de32\ne067bbfd-6926-4ebd-a648-0e146f5ba549\nf0b77f32-02d3-442f-bea3-fb60291398ad\n004a2c2d-2476-402b-87b3-9b0bc6ea37e4\n610db4c6-4366-4188-ac93-aaea453a889d\nf72ddeee-d11b-4c7f-9d89-a5fe9c9cbabc\n86a11945-f2d6-441c-ba30-e556c5665872\n5e1be519-ab6b-4c34-adcb-6543bf065415\n77edebad-0ff3-42e0-a580-ba00185d219f\nc39eda72-f945-41ae-b659-be80f8a0ddde\n62975fec-cf8a-4f70-880f-dbe07bccf468\n805d60b9-e690-4473-826e-ce745454b8fa\n7e72d1ce-5a76-42ca-966f-c33a30364871\n8df9d396-36d4-434d-a36e-b67f30286310\n1616ad9d-ebdc-40e6-9dad-b469e1716b01\n13559275-378a-46e1-9f26-508ec7ea9ee1\n6d9c7004-878b-4bb9-8e9e-118d9878deba\n03c5e84c-353e-4353-8bc2-7ac6b156422c\n89590cd7-754d-4a3f-a194-bee95527fdbf\n47c0bab9-ffeb-471e-8609-8e7ee88aa164\nb565d507-e4fb-497c-aa04-5f09206fffb6\n812ee8db-0193-44e6-b4f6-cada007bcb3d\nb17b3f3e-5269-482a-98c1-26d70c8d59ce\n6d8d486d-eaf7-40da-96e6-5c6c32a0c0c2\n4061a098-4327-4961-8d70-2a2f584d319b\nbae51ec5-9b55-4564-a670-edf1eedced21\nbca19b7f-ad87-4337-9e05-cd9be304568c\n6dd12e60-101c-43ce-8073-dcd20f6ee60f\n1e94d141-cf31-4fb3-b06f-0661f9127391\nf345bd58-fd97-44d9-9ab4-9e1cab60b107\ndde356ab-765a-41b4-b619-b930b601156b\n82a26bd1-7941-4516-bf1b-c8acfdd57734\nef44c138-83c4-4c3d-afe0-9d2664a6d574\ne2e4fc29-c74d-4785-aa4c-7e632a8dbc36\n9dccd944-cf04-4538-a8eb-b10c97cc80e2\n78ca4715-959b-4b40-a9f2-9631ada83134\n10f8e4b2-f6b0-4676-bb1f-0abb6c492d36\nc9786c10-1d26-49cb-b3c5-3494819e738d\n1aab772e-0bdb-4d50-a002-61190468d08a\n8cc1798b-621c-4e0e-bbda-52e09d2f6799\nd61a2d58-0bb1-481d-bad2-9051a59e2e2b\ndb9600ba-aae0-4ff5-bed7-8f54b79ea871\n610de5bc-233f-4400-834a-b5d9d3d635df\nf4372b8a-df94-4a5e-b16b-635710039084\na2eb0db7-d83b-420c-b383-80336f7b7cd9\nbb4737fc-eb59-48c2-a95c-cd3f44195446\ne3232b66-d358-4c4c-8d6a-d80b2823712a\n77a6e2b9-0834-48be-b472-0686ad43bc12\n179c9bc2-a297-478d-8e60-9f0a0179f14f\n9413c9eb-f41f-4315-9fa3-1287c31f30d4\n6da04399-e96f-49f0-a9ca-9d7a41b1d660\nd39aad87-e4d0-435d-91d3-5abddcf4d4d5\nc1596c7a-ff3f-4d6d-9227-3a2efa50151a\n0e9fc6bc-ce4b-497a-a5de-8f02a9b0ca94\ncaee0634-11a6-47ce-b86c-db924a5fc934\n57d05c37-5c37-48ec-8b93-77fb4df7b93c\nac8cb532-1155-4c01-ba1a-df624748bd02\n9c6f3303-338d-454a-b754-7380446cfc67\nd9f06fee-8461-4498-828f-1f01a1207539\naccb741c-b0f7-45f0-9236-25f5a9fca906\nd5661436-3eed-4ef2-8f0a-8581e01248af\n2fb003d2-13a2-4b10-8003-ea91fd0e7493\nd7c0e292-05e7-4523-a6d7-c4ca8260992b\necc1790e-3754-41f7-9a97-58f8288642df\n72aeaaf7-ca65-4a20-bc05-5c298537871c\n3a638912-e383-4536-af62-3e602b7602c8\n7d9eeb32-30e1-42d6-aa57-34b9631e4d8c\n61374d8d-b58e-4699-b211-27a8b48511c4\ncbacdccc-53ed-4e5e-8932-a181457cda3b\n03601973-59cf-45a0-9c23-c14466672219\n01e4b22d-bc2e-4b40-8acb-3a35de07ebb3\n716d5a60-6346-4fd9-9957-5b67300e01a2\ndf1ca474-c8fa-4d31-ac3b-efa042233c7a\n91958944-b688-4aa2-b373-e0f74cd51691\nc4f4b591-c676-4484-9614-b9fddef33f0b\n20dd3802-1427-4351-8c31-b685d979a6f3\n04b03653-08c5-421a-aebc-486e9835229c\n6bc77b46-3b86-461a-aff1-e5d2e6516abf\n14387368-b0d6-40f8-9552-0b6ce1835685\n62e04fdb-c533-4bda-8e3b-4d6b9faf4767\n4e78a8e5-db90-4dc6-92dc-93fdca3f8ca3\n34fad354-1a01-4fed-b5ef-49531c295e97\n14b3d0cf-cb41-479a-b210-cddf05f5f5f3\n44d70304-8f14-4ccc-8161-dc42510fa484\n318f0e25-68a1-4883-a490-a091a8dbf549\n67ba9488-ef96-49a7-8d26-0d5a0ed1443d\nae635930-9227-4f66-ac38-82b41606f4ef\nb9cf6bc4-ad19-4c60-bb31-a5ae594a3800\naa923789-1a84-48e9-ab36-59c3a18142df\n2b63d5e6-c0fe-409c-b5ff-b9d3be1270cd\na242dcb2-7415-4329-b4c5-4a9e053c4e3d\n101d7366-3161-4872-9977-8bb2093cbade\ndafd2ea6-49db-44c9-8611-1e9d1426d26f\n1bb32671-543b-4af9-bb45-4fbcb61e9924\ndfed2624-bc99-4cfb-b725-33c7478e16a9\n20cfc3da-3b09-4e0a-98b2-0212ba33e06e\n9517d09a-f772-4b56-b9a2-ef5591713afc\n316b4f07-7057-499a-aa9c-b9f1ae23da8f\n466a85bd-2ea7-4d92-b4fb-69987d2a9a6a\n10d4eaf8-09b1-4c04-981c-6d4b5b3f9bca\n38f7fd06-4fd5-4238-a69f-041dd955b5e3\nd28dc15a-107f-4f19-b82c-93e23e0d6ca6\nf0a1f6cd-15c6-4762-ba2d-a013c6b2ed54\n7f371363-6c8d-4db1-9246-31f27312d884\nbded68bc-51f4-4b40-ad2a-4b71cd4ed6ce\n27c96f28-bb66-4774-a693-a40f84216b5a\na29f460e-74a3-4810-ae41-55e752ff4d1c\n9da85024-9a2b-4f23-ad69-3eb889effef4\n440b022b-a814-4280-a074-b023746df47a\n07fac6d9-61ea-4faf-9eec-801d4577796d\na0cd20d5-7262-4533-8746-af73bd374a1e\n063632d5-158b-4700-944e-10848ac8d482\nc27dd11a-ce9b-4799-aafa-1cba8b2cb841\n759d823e-62e8-4567-9880-a161bd6db7cc\nefd31ddb-4ccf-4d1a-aee3-6f16c7319d4b\n3b93c0e5-648b-43ed-86af-2b70fe4bd314\nc2b4eefd-8a14-4cb1-93af-a5c566566e13\n3631a48f-65de-4a5d-9dc3-66d2508c1a05\n4c8b9039-cb92-4fe1-abb2-ea639116b4cd\nb92748cc-9ee0-42a4-8fdb-adcbd88dc13f\n0c4b57d9-bb3f-4a30-8a0c-bd73a89140dc\n44d0ad07-f6ac-44cf-b3bc-30c0239d36d3\ne59f0925-36bc-41b9-aca5-927ede31553a\n61089d93-8769-4d6f-83ad-4b1abf5fa2a1\n87ef503c-19df-4fdb-a219-8a7674754960\n00bfc127-46d2-4529-a30e-94f52dd929ab\nec2d9467-44f7-4c4e-87f6-a20b02b2d0e7\n49648890-c473-42f6-ae9d-e92c9c56f121\n0bfd88ce-fdf2-4378-8e44-c3e1bdbdc679\nb686360a-0f79-4303-804a-e89b8bee3fd8\na9e3d4dc-5a65-480f-b146-be6660c9c00d\ne4da31f3-4f62-40d5-b3da-abb04321126b\n46a4fff0-d841-4d30-9894-a674069dddb4\n9b06e54c-7126-4187-a871-ff9be83d4e0a\n0bfb7d05-a204-4232-ba07-fbcf9060d3a8\n67eb2d16-957e-4a8a-b462-dcc8a55b831b\nbc54d3af-d15d-4c24-b2d8-acde153d6ef0\nc9d09eaa-a73e-4a4d-ac25-465f230ad409\n12a8d5fe-6504-4b56-9e7e-fa6063c19207\nb9bb7bb9-6a33-4117-b844-41c9b2d57d8c\nd95fd75d-b748-4323-b3ee-abb8b908c8c4\n9b7979ef-1432-42cb-abc4-d46d82d8fd4d\n018b846c-cead-41cb-b792-d92289a7e77e\nf8a3f53a-b008-4782-8cb6-b6fa289a09bf\n39e88f73-8c5a-4e30-b6e0-b00b2e657bb2\nb0332d91-cf45-48c5-b7c0-e4d93c89b0e3\n7e289eae-a00b-469e-8ae9-a32663321b87\n80fd4622-2c62-4100-80ca-2ad7014a1a4f\n3f5e101c-fc24-4fe8-be48-4b4b46b35bbf\nf5cdbe50-4edb-4d25-9ee7-7c0d6bdabc5a\n1cafd656-292d-49e8-a5d5-5d40ecc177a8\n310b1d54-a59d-47f3-a132-28d0beed5738\ndbc50fcd-9fd0-4cc2-a720-f46d3fb50d9c\n951e6e00-d6f3-4a8c-bf3f-a1d3a47aaa37\n5a307739-9910-40ff-abd4-6bff7a5458e9\n12c97959-58fe-40c7-b05b-7428fbc50ebf\n0e1fd7f3-4a1e-46ab-8d5f-a75e884691aa\neba44c48-10c6-45b6-ad05-923cb58673e7\ne89270bf-eeca-4ebf-89b2-584563b608ea\n09ba4250-40d8-49f9-958a-3b9f2bcd5f03\n5dd01439-0807-4b72-ba98-760e97e66bb6\n00a95b90-1888-4cdd-ba9e-88d62c1411d1\n59c31ab7-d5bf-4bf7-be9a-61a6a9122130\n95543651-5fa0-4788-aad0-f5ad11554d02\n8d63e301-7462-4016-980b-ae19fb47d796\ncf6d35e5-2c3e-4488-8855-90b9eb755aa9\n40946872-142e-410a-8b52-151501aff050\n5524aba8-70e1-4928-8789-f8880258411f\n2d524ad4-438c-49de-9af7-8c6025fa5187\nd0670f1c-acd6-4108-9a58-443e9ee76a98\nf9fa0e67-e9b6-4dc7-b5c5-2954d712979c\nef3d20a6-db93-4c45-9d15-406e50010f65\n387dfb44-fbbb-4977-8a87-fee2ea019cd1\ncb6f4701-9c4d-4d68-a3c0-49827424f485\n9cfec0cb-8783-4fe8-9c56-5b745d7b6b5c\n64659d02-0867-4c6e-94e2-3dd0ffed9df1\nfa0176da-569a-42c8-87bb-f3d8a54e1d0a\nf5fd385a-09c3-4ef3-94a4-0dd63092daaa\n27740ade-17bc-4830-a56f-616b3f15cd9c\n4933724f-7417-492d-b527-d1ca6cdf62d0\n7d90e115-0c81-4eaa-a50c-e39c2e2ed68c\nc08e9e76-7227-4ef5-9612-c50c649abb42\n9752d3d9-48bd-427f-91bb-eef4b7523dcc\n8be56127-90e3-4607-afea-4beaf29fdffe\nf77ca31c-c632-4c32-81e8-f3c82dc051b5\nb695d4d9-4940-48ec-a556-d540667a855a\n58cbd69a-bdd4-4f3c-9026-f2a46787f06a\n33a723e0-9b98-440a-927b-811fd322f838\ndac56552-7bce-489e-b539-2d4eb1ca2aeb\nfec5083f-a429-44f3-8b59-2b987364cba1\n20d1cb8a-5e44-48f0-95e4-2a9fec15dde7\n6172b1ce-fa62-422f-8863-2a3efb0db22c\nd202a80d-7c1c-45e2-a6d8-7573aa38eb60\n0f9096e5-2c80-418a-aa7f-08d8f7f05eb9\n617a7dff-4d50-43e1-a889-57e11f9ac545\naca2c2b5-6d33-48c4-8b3b-0569e0f4e248\n6e539e1d-c92a-432a-a9e5-32112d8ed05b\n26b0ecb3-48d2-4cb3-b8a4-0e751c05b2c7\nb4dc049e-c07a-46ce-b25c-c403127deb30\ncf36fb19-c23d-4e70-9cff-e19b7520860e\n88d16160-9ab0-49b4-9431-0dd11a2be328\n38ca70e8-6e5d-45cc-b133-43618967b809\n64d16412-5360-459e-bfbc-0d134410ab7e\nf8ac12a5-4d87-449b-9787-74f6c58fcae2\nfb01667a-3ed4-4180-969b-532968f5c384\ne4268192-fd87-4caa-9d90-a5c34b0fd292\n2db5ae01-cc9a-4199-b952-594dbe5edc14\nc31bfa3e-3e98-4111-af74-e78afac5226b\ne962831a-6345-47f1-93e3-6a7ddece68dc\n04f937ac-88b0-4c4d-9149-154285598bcd\n184b5a64-f1d9-4310-9ea5-01aca87c67fa\n1baf0547-7276-46ce-8f1a-144a1c5e0bb3\nf7ac7371-0c6c-47d2-a982-e0859088cc32\n877428c3-c171-4f29-8e3f-863fd309fa55\n00babe48-0e1f-42bd-b65d-7e97ce249b7c\nb8800eee-f757-44e8-ae5a-d83b728daa47\na836c870-7909-4893-8e2a-fd363828ab4d\n89078efe-9f12-47d2-b27d-14f2cfc340f7\n3d1a33ba-9541-459f-9a62-34ba37e83b43\n05aa9467-d0e9-4da7-b8e3-b6e58da121c0\neb2db2dd-d776-4423-b7d3-8fa7614aea67\na9d8cd2d-267e-43ea-9020-0185abceeb51\nfc6a1d44-db5a-49a5-99c0-fad4b8c84c49\nb266b592-2805-41af-b0e9-b2fc91897151\n2ab747dc-9845-480f-add3-86220b0b0dab\n59fb7606-88ee-400f-a9c7-cef8b18088c2\n6724d5e9-90b8-4b97-ae9f-fbe033801ec0\n9824c372-1a7d-42f0-a157-c215269c716c\n57b14505-1a4e-40ea-91a1-01a62cc8be5c\na4c8d8b0-4e82-46df-b0ec-de431751676b\n074746b1-6f75-49c8-80bf-690b66321a67\n4e05c970-92fc-434e-af35-d3889aa5a03c\na5fdb849-2962-4cc7-aa3e-26062ae08a6e\n9e14d849-01c5-45c9-a4e2-92c9ce47f0f6\nd5075c8c-52f6-401e-a6db-093b4897d5f5\na01f9393-05bf-48b9-bbd4-59eccd23fde2\ncba3189f-b700-4f11-ae41-da4817e892df\n041acaf9-b9cb-45f3-b6b4-0c6398dd0ed3\n185562c3-2214-47d6-8bcc-6ad989a2a7cd\n5f93aff0-2667-4ddb-9458-5ccb12a436e2\n9f72a82d-c621-47d9-8661-0b8429fe16f6\n959980b2-7729-40bf-a4c5-ddbc18b7ecfc\n159d4fb8-b226-4c77-a8d4-7a44ddcfc250\n14235555-93e0-43b0-aa46-afbc08415f3c\n48990b84-35e2-4ff5-944e-4b529751eb34\ndd7b61ed-7941-4d36-bb23-49c0e81cd966\n359246b4-5255-407d-8e27-e3ab42f77df6\n0440115c-4bdf-43a2-9191-f798bd9bf1d0\n36f317e4-bf83-401c-9a75-23bf87a29c8e\nf88d02b3-e92d-4770-94bc-5a926b3147ab\nfbd93c2c-5330-4260-ac69-47be98e38192\n449d0389-a2d9-46c7-83b9-7c760eff3673\ncb80b386-779e-450d-aa57-e8c27f8714d9\n416b7b3c-08e6-44e2-b69e-886d0ba3f081\n55cd1fe1-2c46-45d6-b126-5cf0ee953530\na82501e7-859f-4313-8a65-84e60d27ba79\n11e996cd-0ee1-48dd-a785-ed00c67c153f\n632208fa-9584-4b96-8784-93278c20728e\n9da23301-4d0b-49d9-9880-90cf0d407589\n0dd16721-bb9c-41f6-ad2a-b4cbac1b50ab\nc576c960-f905-4711-b703-23c87d5ebaf3\n7deacc01-6856-46bd-bfff-811821735872\n3c436a24-b6ea-48e3-962d-0ee86098140f\nfc47b357-8877-478c-92ee-7254a7eb5bb0\n8267fc28-4645-496c-96a5-6ab787821a6c\nda2b9bd3-0045-4702-8ad5-c7b7213d5cc6\n3d257373-1753-4d84-99f8-a8fe3b41d303\n73bc06dd-f265-47e5-971d-bc3bc7e37afe\n579f0352-624f-473f-8751-cdb5f0199740\n21f3b546-44c5-4ff5-9f30-2de2f5b89bb2\n21466300-d053-4adc-906a-d9e4c8f90fc3\n2b205306-0e57-4b8a-a1c9-523dadf459db\n0aca1fc8-2a11-45ea-b081-0ea7e9667ee9\n663e8f5a-db51-446a-9481-6580998b9ef3\n3afc2fd4-e70b-4901-a4cd-1cbe6665c693\n519832bd-7952-4884-82c6-3f3b7b35d992\n492e5b18-19f3-4c28-b234-3c467ddc87d8\n3c2f1a0c-6997-450c-b9ff-4016be03c7af\n948ea6bd-fb6d-46f7-bb7d-ae069018db50\n3b7ac1c6-736a-4d92-b797-8b362e240d5a\n7d6b5703-7cfe-4082-8b27-f1cc9b239f82\n6faec583-0512-4804-a64f-ca964b5fc13e\n03b5c040-7485-41b0-8294-50ef24c95ae2\nbd1eae11-5f5d-4b84-b6b7-9b6b3b274eaf\n53b59379-05cc-41e5-a041-58629e0fdc54\ndf81e9e8-59aa-42a2-99d7-ce0f259b01a6\nb9d3fe23-2b30-406e-8cfe-08839b7158e4\n8547fa43-60a7-4252-9715-1563e94ab3f9\nd3ab8a81-9cb2-44d2-8da9-ed1511fa57bc\ne1d43914-5287-4576-a9ad-2f51c53cc6ef\n16d0adc6-16b0-4ad8-9670-fdfd146040ce\n26b03847-8f11-4913-9619-becd5922bff7\n564ccc2d-ceba-41ac-b39d-e667c11d9303\n357a7466-dfd8-49e4-a72b-499dc0761bc4\n078f3f35-a044-4826-83b5-815f04f01a83\ncf24ef5a-693c-493e-bbea-d9576ccd5048\n67acfc24-e57f-4c8b-8845-9db83bc167f0\n15034dab-d9a0-4370-b93d-aa6921b3edf4\nfdb665b5-20c0-4dcd-9c3a-858e3ec3a352\n07d2f81b-496c-4387-a99d-1c2af76b1e4a\n6afad0ea-7b5d-4445-bbea-1471ef759b5b\n78c0ec8c-e2fc-4325-9884-090b2a6e070f\n43e7e2c8-7132-4589-b174-513e97ff7d93\ncb77f11e-5aab-4967-b05a-bdf6da908423\n56015a15-a730-41fc-bacd-d514f05f5586\n1977f052-bfe9-4e53-8a12-bdd546f8c7bb\n3fb997ca-8cdd-49e0-8b87-a798d4d1db30\n838b285e-ae65-427d-9644-83a0bd620b86\nd70373da-067a-415b-8c86-18d8588f84ab\n60062197-f530-4ae6-8220-7a7ca5df1e60\nf24ec1c0-739a-42a0-87ee-eaf45cf7b469\nb4af9418-168b-4a57-a8df-d4082f2a7ef1\nb95c3248-0956-4d0f-98b1-ff9c85ecd30a\n22d4b03d-02fa-4527-ab9d-72109f1c4dab\n87c842be-75a6-476c-bec0-3b427959f51b\n18b97213-da77-403b-871f-831ab726d376\nca18bced-7948-47f1-8543-76c8fc588aed\na0656fd4-6bdc-486c-8d46-961e5e63c89d\n4d54bcae-aaaf-461c-8a92-a71d4d5a2dd1\n90ae9182-9be3-4c55-a1fa-af2bb226feea\n693a6873-1289-4a0d-b017-ec34dcd6ed18\nfecac5eb-2fb0-4777-b0fe-bad72e151e69\nccec6ce9-fa66-4caf-b12a-8aba37ddcabd\nbf57828f-6214-4b70-8871-f293b08450ad\nf5d9f6ec-c8b5-40e7-a8bb-af99f6955174\n1d42514d-d913-4ead-a701-9daf92eb5a57\n663460d5-cf8f-499b-abe7-c79cd1f08f85\n72a38ed4-4467-4667-88a9-4e6eee821dce\n233cca98-4a6b-40c6-8acc-56b0364145d1\n8026892b-d06d-4f73-a65f-d88d092fc8a4\n3c7df27e-a3c8-4fd6-8dee-8be6879de062\n09a2a5d7-e737-48bb-89e2-e52c902620b1\n355dc7fa-f7e3-4ab4-8202-08731afc64ce\n2e9486b2-54f6-467e-9b5c-b6a5dbc474d5\n675cd242-177f-4930-9304-bb239b37e8ea\na20befa9-51d3-42ae-871b-cfd10ec5b63d\nfb816c94-1ab0-4b62-b3a0-f2b968f58204\n46a0ac60-cb66-43a0-b0d2-69b50ef5fd00\nd8837275-348e-44cf-b227-8da6d9fbe66d\nc6ec7856-2c3a-415d-991c-bec9eb3ceee6\n7ae1cb7e-02a2-44f7-ae78-2a2a55c1a82e\nef60d052-fa4f-4a18-bc4a-e4a72c2bcb8f\n414a05a6-84f7-46c3-81e4-ee1de61271a4\na86be94f-be27-4b80-bef0-0723f0aa586d\n8122ed98-50d6-43fe-8258-b6302f1e9778\n145ba48d-5a8e-4892-a62f-e81427d4344a\nbf39aceb-2cd9-4957-a36e-ceb075c6327b\nc91cc3c1-22c1-4858-ae9d-829220416b1c\n057a33b9-d821-40d3-97b2-08d89482b940\nb427dfaa-d8b4-474e-ab55-d037d9386fe6\n54d249c9-3088-4f80-b89b-db61882d8b84\na30f05db-7133-40aa-b625-d0a37df1412a\n9db75183-acb4-4344-986e-3a830784da56\nfce1af66-cd35-41e3-bb12-226999072872\n0866421b-b693-4359-ba52-ee1d73aa6b6f\n4d66b82b-7d65-451c-82f4-e7347d93b00a\nc0f16bf9-0e1d-4ce2-9ea7-9574a63ab1b7\nf07f0c8a-7441-4693-8adc-3e5b4c8fe010\n2b015f51-b61f-4d0b-97dc-5ffe76a48edd\n521aab6f-af5c-4b5c-97c1-a668388244a1\n37e0e08d-32bf-41cf-8970-f81340870b96\nad48c2aa-16b3-44b8-8343-90b8dd2afd2c\n3cc8b2af-1be2-453b-b76c-6747441a2838\n4effa823-bdda-481d-b9c9-697b33333c08\n11f88863-ecda-4a5e-96a9-5d7ed30b8e36\n66de977d-df59-4f28-9a0e-fad52d54d799\n6bd73e8f-7441-4a4d-a233-4e1900711ddc\n8f84fa60-f268-46e1-ad7e-c0ea448ce898\n80601353-e73a-46fa-88bc-b43927bb01f3\nd0b15c48-b047-4e05-9c21-adcebdc5ee54\n7a431129-3faf-4a8f-9752-7a282495dabf\n543549ad-dd89-448b-9c19-8980362c096f\n56ff675f-b6e0-4323-a6ad-92bc43139cbd\n8bae9d02-dc7d-4776-ab7c-e363a99acb3b\n92c671f9-c823-4106-a816-c3efa1714644\nc1c525ae-688b-4879-bdb9-31052eab6ef8\nfff65ee4-de23-4b89-8426-9e1670a6dc99\n66302f55-bc5a-4fd7-b2d0-8dc6aafe79af\nfd68af38-b25c-457a-aa9e-8a49450d62ea\nfc7e05b7-4ce9-453b-aa73-61ad0cb98f48\n1ef1eb4a-98f5-4037-bc6f-bedae70f3e1c\n98d5886d-aa4d-4e21-afe5-05a3601aeb76\na9dfbff7-f9a6-4085-a445-9ca7f960e518\n7726e435-500b-49a7-a7e5-a1e02b5da656\n579a1063-5697-468c-938e-d7a57bccb0b0\n2f43f07c-c26a-4211-9ffe-450916cfadc9\neb90e96f-1258-4930-9265-aa07f5dc20d8\nb48f1c5d-c1ff-4109-8ebd-06451552c7a0\n9c58d6be-242d-4f37-b8a7-00da02623cfa\n2c4dce0a-799a-42d7-88d1-ebea7c079882\n6d7073ce-19a8-47a5-b8be-bae177f89251\nb6b73f6d-b494-4396-93d2-37f38ff36d9d\ndbe7857a-94ec-4c28-a8bb-310657d135d9\n7acdab52-9d11-484a-9246-78cb2fda7053\n206ec711-b981-4f1b-9606-c0f3a43940d7\nbf0f742f-37e5-419a-befa-d97a7d3c3435\n3ecf6482-6052-492f-a432-f7081dc7f0ae\nb014232b-9044-4898-874c-72a4076ad0c2\nfdb9497e-0907-4ca1-b101-7cfedea575b2\n10b0743f-4244-47b5-84ec-35857e01cb18\n77cd0e4a-ede5-4d19-9388-a924fb2ca416\nb4ceff47-3ca3-4609-8c7a-6b1706263ea3\n01728117-5dfc-4670-994e-78d4c78b275b\n44208bb7-2b2a-4250-8761-1d22125da9e0\ncf44dcf9-63f8-4bf4-ba7d-36c1136938fa\nfacce2cb-4c41-474e-8bde-7e45f4690dbf\nbc34b10b-68d2-4bf9-be8e-7232788926cd\n14c01798-036e-4866-98b8-45fd68df4716\nd689819a-4360-4d1c-8dcb-f7aab20e2d05\n9c48b577-590f-4e96-ae4b-095ead5b78e4\n9662d74f-c2a9-4ce8-9b91-c81556af39be\n21c7d22d-a4b0-407a-abc8-07d93ea5dca6\n3b89cb7a-7b7a-4ddd-99a8-d6e44a9b70e2\n2457de86-f945-4300-9432-faa62c8389c0\n973ff839-6533-4308-a646-07339893f866\n4cab769e-08d0-4aba-8066-161dc71a05dd\n8e8fc04b-15be-4a17-be63-bebe3f16aadd\n711da565-bc1e-45cf-a5b0-88bf5e8794f6\n73317e7c-e592-4e00-896d-be910b80f372\ne174f607-aa7c-43e8-9405-393bd66e1532\n8e5c3c22-deba-4623-9618-9d7fcf416b6a\n5b1812d5-f762-4191-9e35-8f5768382567\ndf4ef1d6-2566-4171-8171-d1428661f665\n3c79186f-5910-417b-be79-185e4a5ef250\neb28167f-8e0c-4f08-a81d-225ff79a6118\n18bdd561-e738-44a1-a341-bee8144a1ffa\ndd9b1211-2fef-430d-b1b9-d4156d35f062\n24013aa8-c1b0-4251-ae53-0255b879d0a4\naa0819d3-0e27-4759-ab0d-39a1afe4b31e\nbbbebcce-703a-44ae-856d-b93580d5aae6\naf6e502c-bfd7-44ec-a353-c96ab64ad791\nc5b8e51d-8225-4cfe-bf94-ae97ef005d82\n4e9a0ae4-ed59-4af5-9d3b-49671133ae35\nd5087986-d930-4e3f-8b84-a6e78f08f5d9\n073152d3-18f9-41b3-a55a-5e846b847592\ne85cead2-5530-4491-95d9-a0ba45f81aa0\nf6cca886-6bc4-4a18-8d72-bf6fc53273af\naa7c82cb-cbb3-4f47-b60e-4b1fffc3301a\n061f6eaa-699d-4eda-af8f-c8583e39eee4\n6be6423e-99d8-4eda-b6ec-36ffe37d282a\na4cdfa7f-dd09-4e94-abc6-2ab32d1a7d2d\n3303cf38-274a-4c9a-a73a-221064edb01f\n52e16df9-ef38-46c2-b041-259efddb862c\n8463febf-ef96-43db-b1a1-45d74f76d76f\nee212182-cdb7-4fb0-abd5-da9a7913e991\n923b4817-c263-40be-9c84-030a44c34b92\ncc019191-041d-4bf0-88b9-214631878e1a\n9a16098e-7499-47b7-880f-344d5cf1661b\nfff4e12d-ee28-4bec-b8ec-6a53444f4b2f\nbe34792e-76de-4ec7-809c-d2f3bfb174d0\n6df5ed68-076c-409a-a802-8e9265371d75\n9d97c2df-7934-45b6-8b28-26291ca8144b\ndeb89fde-0c32-482d-8a5e-522a8fdd0bce\n38f70392-3b40-46cd-ae99-7424970a63fa\n094bdb23-6f0b-4b78-a39f-59cce80f0c0c\n77e89434-aceb-476c-85aa-08df2c636bea\n55c32290-c87e-4734-a7b3-3c5d4d6a0a6f\n8eff9af6-4526-48b3-a796-e48aea09634e\n493a3efe-11c0-4219-aa64-325eeca009c4\n36171492-324a-46be-a007-5a1598ee0d2e\nce2c1428-54d6-4086-bfa0-a3e7ae9c5f0f\nefbbb71c-828a-4f92-a430-6a59747df0f9\nf8ffec83-881b-46cc-8e24-282e5704c56b\n3998737b-ce82-425e-9d93-6d43597d994c\nd88c04e3-a87a-4f8f-8a95-37eeb0cb7823\n2333ade9-1a40-4262-a305-d091cf2101d9\ne4692a69-4f07-4aec-acb5-728776e407b2\n9045547b-fdad-4b8f-9b40-19ec01acbdb2\nf0663334-c49f-4c08-a16e-f248e4c0c0a3\n96d06ddd-f4d5-4605-97de-78c9cf57f6a8\n288ab86c-a756-4c5f-8f56-3cbf161baf51\nd500b7a4-3a68-4668-ac81-f418ac3ad203\nefa6cc5b-4898-4214-9e8c-be0845df8768\nbbb3f3be-abae-4127-9e97-3082ac4c4f70\ne09602f5-4f5e-4916-874c-9fae2d03147a\n043e0e54-7859-482e-ae6b-59fee7a470b7\n21ff08aa-6fc4-468c-ac49-edecba1e288e\n78afe43b-fb38-420d-8a06-df3a189f6761\na0d28a85-b83b-4ae4-9242-2a2b8fca463e\nbf3f6efd-d8a6-4239-bced-cc10ef020923\n847244a4-0473-4785-8eb0-96342987fb4b\ndc043f38-4c8c-446d-9ba0-99d129d132a8\n3cd3c830-2b01-4109-9fb3-0e056ed325b9\n9763d612-3782-4b66-a58e-4d454e3b996f\n526abf1d-06e2-4a62-af7b-15efe3a20e84\n9f36de5c-20d8-49a7-92a0-b02368d84c43\nadad0852-6b09-4b37-993e-9dc2d8f45092\n70ebfe78-2e1a-448f-85d5-e086a5d0ed10\n80940cd8-6088-4436-a8f7-2c46b42b5d4f\n71659239-4222-4785-b25e-dcd7d2ae5527\naa46c39c-e6e8-4694-95de-a9a3c43a1da7\n70f79a7f-dc72-4b2b-89e2-715b5d6af0f8\n06ac0e1d-f233-4035-a0a7-16acde21bcd7\ne6148106-e1fe-46cd-8b21-1f5282fc0f68\n81b83911-be43-4d6a-ac13-78ca1b1cab67\n7f7017f1-7b1d-4470-a16e-d9d87462a076\n30f538b0-97e5-4c6f-a3a8-2f9113e589f0\nea8b4e56-191c-46ca-817d-dffe5ac2d2b6\n6d03992d-3081-48ba-8f68-9b436e8e036d\n891403c4-f005-4672-9413-afa0641a5a7c\n2585db28-6295-4c11-854d-c70347198cb5\ne85cb6be-3fba-47d1-929e-f848c73a0b17\n050d0eb6-50c2-42a7-a673-6ab50d4fdebb\nf7039a5c-9a17-4760-9e25-d6664a883f48\n4288d2b5-fc82-4957-b339-b0ffe9ff316c\ne9153161-c579-435a-9069-9483a8c55531\na399a0ba-d3f9-4ec6-b37f-ffebae8dfcf1\n9b2405e2-ffc4-40ed-9a49-6b58b554833a\ndf687916-16b1-4919-af05-4e48fda6c839\nbda465aa-5966-4b4e-bb33-6f87e715cb73\ne875c362-bb40-466b-a9c5-c9b3e5cc1d17\n0a281df9-e22e-482a-8dbf-edae5daddcae\n0691888c-0d40-4c77-9865-724c3cdbc0db\n154159f6-dbbc-46ba-9db6-7103f0ad8210\nb7a66a61-42ac-43f0-8417-055a0d50074c\nf6b7dac7-02a0-425a-a150-a9f6595a57a8\n67bafbaa-e0ff-45e8-9859-9f48e8702e7b\nb481bfae-bc98-4811-9322-040bcf5eaab3\n4cbbff81-737f-43df-9dcc-83652fcc4007\n400265ae-a9ea-46c7-8512-65842c2c8656\n4dde78e4-686b-4282-a8b4-38067f9b40f6\na627a1bd-6745-4c61-97a5-de54c09394cd\n9f0967c3-067b-4e2a-9b5e-a3a9dd4428fe\nd01a24ec-4e0c-4eb3-8f7c-827cd7f29978\ncd381f40-c69f-4f8b-a227-284ba5a024eb\ncbd16d55-e3ea-45c6-b9d2-66c95869799e\n595a1981-d152-490a-a8d4-7e8659214cf5\n5109379b-9209-41dd-be58-b905d213d0f1\n36f06e2d-7081-4391-8001-f26ef71bdbc5\n6fa957db-c6b0-4941-afa9-e48a22c5f129\n5805cfe2-45ef-48d8-a603-8a4b64824692\n909b0d45-3da4-40f3-8555-335c8a2eff18\n51d6b40b-df0a-4afa-9541-59bc6f3ad095\ne6a46f5d-ce83-4fdd-87d8-d4949d50df62\n2350e449-c57a-41f6-885c-01b07678ee57\ncdf855df-c67c-464e-917c-9436d19d12fc\naf140abe-7806-495c-9fa7-42d0c16dec7e\nf3a1bcf3-f9d2-4a0a-806e-208f5e4ed865\n744ef7f1-6996-4250-a756-a51183498e6e\nfd027b4e-ddb3-4846-a6a1-5392d59fd74e\n8022df22-091e-43da-94cc-9c82fd74157e\n79c07e14-d387-4367-abe9-c96726b1de55\n14014101-d66d-4ef2-a0ba-928f3224e7b4\n74bb4b67-6012-42b0-a2ab-2e7722d762c7\n4c01dadb-06ce-4730-a448-54a4732e3252\nb0948724-5e94-4967-9a96-e83a4d6acaae\nc1149859-5b2a-4efc-a1ca-19ad9b20693f\n41f77518-b63d-4800-8dae-52c2ab518b60\n1aa18659-f82e-456a-b1db-3b5733568401\nbb18f15c-8216-4394-980e-02173519f265\n5c403246-981f-4e3b-baae-00aff988ae74\n8ffd789a-1cc4-4f3d-8033-ec73d514d702\nb2b852b5-3434-4220-84d6-00a1a5764ddd\n8957ab59-114b-495e-8e6e-767bbcc6f031\nc406d60a-97f8-4ed5-8f32-013487b040d2\n4d63f7fb-2657-4d71-8713-65fd22fcf2af\n191acf3f-e373-457c-83cb-4c0cff1c646c\n4d39b0d5-79b7-45de-aba1-e41d45398855\n869f18e7-9f7a-47a1-b338-eaec507b3568\nc3381a23-6ad1-4b4f-ba3c-ba22ca904cab\n4360d55a-eb80-4038-99e4-1b5cb596f8a6\n53148ebd-b4d2-4eb5-adc3-f55148c67493\n3fc5562d-ca25-4d1b-a39f-11d01fc0db04\nd20795a5-ff2a-4e45-94ca-d1aa2aaa61ce\n7c9d3f3d-9a0d-49b1-9bd3-a704312b071d\nd3038e9c-6a0b-4c66-bc29-034a4da532a4\n62b83547-aed0-4521-9145-640525a9cee4\ne07e066f-8a32-481e-976e-f72f4a142bb8\n8d6fb7d9-2a3b-4e1f-b3ac-99e99dbdfb27\n74a43ec5-5a8e-400c-ba7e-0e3b5ac5c319\n9afe39d2-f745-47ff-b6be-8bced714c06f\n0365a6a1-a35c-4e6d-b759-b33fd945e2c7\na60accc2-88ef-4442-bf2b-3b48904775cf\n3e1fa4d0-03bb-4bb1-8a66-6779e6489ef7\n67065756-dc69-408f-af59-c608b3067359\n7b5332a3-12c6-4de8-80cc-2ae75fdabe5d\n1f566112-65fd-461c-83a7-b335a19c6057\n4b684243-6634-4783-8280-428586a09e1b\n98398533-81e3-4290-8c40-92c2d30f8c0a\nebfbdd1b-899f-466f-914f-9338c77c5368\nac68fa09-95bf-49f7-b83a-54b1207b0660\n35decc94-a231-4356-a27b-254b4530666a\n789ca746-813d-47e7-b698-906f5758c7f1\ne6d3cf8b-2d51-477b-bf68-adf2676865d8\neb41e313-baf8-4327-9196-1f447e14d9f2\nb4de9bbd-f6e5-420e-a688-022ce53786a9\ne7e34401-8913-48ac-8e03-7666eff1b1e3\n0bfd3778-7ed0-4f15-aee1-2f0bd11e296b\nb9f81865-f2cb-48ae-b1c0-f53f7b4601e7\n8b168390-f3b4-4eae-9a18-1c0e38471485\nc4e1c685-5f47-4fce-a7db-282681efd213\n7bd7851c-b8d0-44a0-ae0e-960a89368b27\nfe79a5bf-a68a-48d3-aad0-3969a0f3123c\n73ba1c6f-184d-4294-a12a-bde0ca4b71f7\ne242f2d2-7874-4583-882e-94dc40049cf7\n8b195aaf-6c21-4f6f-bd0f-2eef7c46b4b5\n4fbca18e-b481-4efc-b529-d3f15495ee2f\nf9704138-50a3-40ef-a755-f864c948e13a\n5c67d1c8-d571-4add-aed7-47c1c69756e8\n417fc42d-23e3-4619-b861-23a4fca585de\n1f83209a-463e-45d4-bf53-631b83f05d50\nd4f36889-691a-4d82-95a5-59a34c69abe6\n7dbe44e0-3b71-4345-af41-f50cb235475c\n27106f03-3294-43dc-a043-a5564d349299\n542cf4d7-b10c-486b-ac40-a8acdb3515f6\n854e9cc5-1ee3-4aa9-81ce-244fe70df28e\n79ab0396-d88f-4be5-9628-cde45be89f81\n73e8ec6f-46ec-45bd-ba41-0ccd40313786\nf239deee-7353-4ac2-af95-65d59c51a9ea\nb77a4093-b5e4-46f4-97dd-5bb52a026d53\n8bf8c0eb-0cde-4f6d-9b6a-e23511dc7015\nfbc7c8d4-50c4-4f23-b494-86df2ec4fc5f\n2dab8d86-19f2-4496-b899-f4b906fe4ea9\n7c7ba2c1-21c1-4b69-a352-a9e6a5c07b6a\nf9491616-acf5-43a4-8683-ad338800c666\nd5f3830e-ec42-4373-a56f-637c6fde2814\nfc6ab6f1-c72c-4a18-82e8-6a77e052c3a8\n26383b6d-1957-4892-aeb3-a4c8ea294b0d\ne16a6bcb-2733-4104-921f-9b11031f74a1\n8b653aa5-a037-422f-915f-a399a8011516\nbf3453ef-375d-4ea2-ab9f-36221b0c6ffe\n050f03ee-00ba-423b-b537-4f0b281e888d\n7c8ce56c-432b-4424-a75c-5fc774f5c3e4\nb82e0276-6826-40da-8c48-9e185375b8b9\n68595b27-bc62-45bc-a290-10ddef82336a\n15f9d5d4-f3a2-4459-9dd2-e9badc57f4f6\n266a49aa-cd44-4eca-a8c8-420e81b50c38\n7ddd97de-0dec-4d3e-a205-9ba3c1e40843\n6eba2dba-672d-4bdd-922c-eae8ad2a10a5\n4cf7a942-b4c5-46c6-b6bb-d64b998b1672\n01e6693f-d885-4ed7-8851-f72861cef4eb\nfb884958-57e0-4fdb-90c6-dc3ad3f13ac1\nfa635a64-a40b-48ec-94ae-0792b69eab5c\nc04b7f8c-57fa-4640-b469-20bfb10d20f9\n685d7051-b633-4486-a208-eabf0b133486\n325fa163-c528-4e9c-820f-20cb022d8000\nb567ea5a-d60f-4fe7-af7a-a82e64e24c95\n0604edb3-f2e6-4891-aa7b-07df9cbebd7c\na4a4510c-7402-48a3-9277-45d1135427b7\n39ff9ffc-3cc2-4555-a356-7a16625390e1\ncce7da85-dc00-4aac-85ca-f834e63f6a4f\nf86a0643-0336-4362-970b-23c97ce66d34\n25d8876f-5771-4111-aa85-72a047de0d82\nd34c23e8-99cf-486f-bbfb-5c293a0f5c30\nf3c3e7aa-f48d-4d11-89a4-2c208b28e4f7\n50341def-4d08-49c3-b6f1-16509cebfc25\n656715dc-7db7-47a1-b12c-9cdb7a39df7a\n8b8b7d55-2848-4d3c-8fcb-5a08af03d633\nd0da9f1a-3eca-40fe-96e4-f9f095f1f8b9\n6504a7b3-8349-49ad-85e5-682b9ed3ee2f\n924956bb-ce29-4e23-a72a-cd57cee189c1\ne3047f86-0735-4f49-932c-3cc8d1fb6df7\ndaa7d3a3-df15-481a-af9a-bd200133ebe7\nc380f2ec-8fd9-4ce6-a361-fc0fc3ab78b4\n57059b0f-51ad-4ba6-832a-44924b4f63c0\n362a4c65-f259-465e-975e-4bda78977738\nd17f244a-14c3-4222-aaf6-5478d48061fe\nf0b2eba5-fc7d-4807-95af-36255b6fe234\n2c614aab-6897-4f58-a472-1defbd7216b4\nc03a2384-1269-4eef-ace8-35c46f8f87e3\n1b93aa04-6330-40c0-a4c2-5aad607c05a7\n401dd096-315f-48d4-a5f3-bc2fda4d750a\nf26c2ec6-fca0-41ed-a78f-f30a36e4bfb4\n648ab780-15ce-4bbc-afe9-8146db948882\n3a4ee286-e6fd-442a-a8a2-a001085f3d8a\nc15e7b01-e299-4a3f-a8a1-ecc9ea8e93c7\nc326b35c-3ca0-4b5b-8b6d-7de27f42037f\n1c8e8f74-0ba0-472a-9c64-dd678d6c72c0\ncf18d1f7-b632-45ef-8ba1-79865f26df79\n001ae352-b8c4-4b6e-914d-9a7771f66792\nfba6c438-0446-42ba-9c44-349fa755c263\nfed83951-67c3-47f7-b515-485be172b9d5\n60d0a290-fdd2-4801-a3f6-146a43929af4\ndca89943-bd33-41e7-8b62-dcc6217d7238\n9ab27fd4-cbbe-40a8-ae0a-592c2f5a8beb\n2404a1b5-a48b-40bc-acd8-d205b0587748\nfe3cde10-d19b-4824-889a-565a6701699d\n15cf5412-8597-4e27-ae7e-468fc32a5cb2\nfbaa4443-0f5f-47fb-9e90-0e8f77747906\n5cb2a578-b25e-4a11-944c-ef8cefdff65f\nba120976-8191-4b8a-8de7-9a8a3f8fda42\n2d553523-9a51-4aca-8595-56463cd011d9\n11aa92f0-234a-47dd-8802-45e637a99317\nc5eb0005-c098-4924-966f-4c5f9af07ffe\nf54e54ea-e28a-490f-8e5c-7d3b2ceac24b\n226ff678-0e15-45c8-a976-9963e8502f27\n5395bdd0-b907-40c8-a1d9-34beff362e78\n6f95e460-f244-4299-b50f-6c00bd499ef3\n99fa373d-dd2a-4e5a-badd-c648c7f2afc7\n7d2aa5b6-2fd1-4967-b531-f3f9e96cef3e\n317fbb94-d440-46fe-86c9-ecc0a9daff48\n92f0a5c9-9d9a-47f1-a327-3a815e51d45d\n3fa37a7a-c5c5-4cee-95f1-d8c614d6e599\nb3232fde-2773-4284-bc79-516511c4ee45\n72fccb5e-afdc-49d4-8473-38c513f82347\n1dc922e9-a40f-4810-bdff-e6f364fdee72\n96ce947b-75ed-4990-a771-2f488926f057\n33d53488-2a4d-4fba-bd35-57d6519d673a\n467eea25-34d3-4932-b373-ad361f894c32\nf92b5fcc-6afd-4745-bdef-f18dc5ad07c5\n90147d33-9a5d-41a6-a67c-3d6a5ca54afe\n4edd31a8-4bcf-4290-b010-54724cf4e824\n22eaf97f-613a-493b-abfc-607c110b914b\n855128ed-d1b0-47fb-97cd-a058730614f4\n38b974c6-85e0-4546-8bd2-ab9c9da3fc9a\n541bfb78-3e33-4500-99b4-90576678027c\n425e07a3-afd7-473d-9376-c9a28469142a\na30dad42-5e50-476f-9b40-67bb5ec6b5a4\n91b07db4-b18c-41c6-8ca2-ce51c375a1a9\n68f772c5-873a-46a8-8a4a-69f6864f41fb\nbdbdfa17-a7b1-425d-af6a-09aab77e06a8\nbf2eda06-58c6-47b2-864d-cbe74b21c68d\n2052b97f-5586-423b-9432-e5be922bddf6\nea111f20-1912-48d6-adb8-85ebc599be99\ncded0711-c4aa-4a91-acbd-b335663bef9a\n01192299-c060-4203-bc18-be2260a8ba17\n6cb4db04-82ff-418b-aad6-9e2aa4d4696e\n4e8918b2-b42c-4576-8a1d-9e48d9f67b60\nd780a93d-1bfe-41ec-b955-91f9c2ceae26\n5d740739-4c2b-43ac-89a7-9dd27b5d6edb\n075ca49c-4356-44dc-8341-14a05921b6c1\nc8ae281b-ef3d-428f-89f1-f5b62b33336e\n979f2e5d-40c4-4a1f-ad42-fbfca9992953\n0947feec-ab0f-4cb3-95cf-7894b43a939c\nb22dcd69-562d-4935-8f77-fcfa0ce86c30\n6c58dacb-7f14-4e33-956b-8f4ea8ae5f74\n6c4eb89c-678a-4e41-8530-ad8c801280f6\n327c11ed-bc65-46cd-a069-b5edab6ed8a8\nbf60ea47-9e95-49c0-82b7-42674fc2f937\n9d253f6d-4689-40cf-81ca-5181b7b85041\nc7c78957-469c-4692-9803-ef4ce69c7fcc\nbfc69f99-5231-4677-84b8-bda56ff5590c\n2d55aa61-3674-426f-aebf-5073e0a130a7\na13f1d4a-30c1-49ba-8803-284cf0207b5a\n8ee32bce-e904-45a6-97fa-425dcc0cfe58\n6a8dd0f3-ca7f-4771-8251-6eac772809b1\n7cf5b2ad-3415-477d-bd02-e443649d7efd\n40b2cff2-e494-49ff-865d-3a291f3611e3\na7845877-a501-4e82-ba77-340161903ee5\n72f2e033-9cf3-472f-b388-5d1656fc5517\n186ac332-773a-4525-9d57-16b247e67d6e\n991acf2a-e5c6-4ce5-ab39-16fd803d48b8\n04ab1301-12a6-4a96-b76d-55ee4bd97bcd\nc2aa82ee-4dac-4688-926a-94cb1d3ba196\n3e62ae65-e608-41e4-b10f-9f63d1f3e986\nb136f1d7-9c1c-434f-a24b-5a3f1c69e455\nbb45fe7c-f640-46e1-8404-8e7883b3f48d\n4816bc12-4fa1-4def-896a-2bf5f2fe5cbb\ncfbfc4fb-be95-4ce0-acfc-28ec4ecb9fba\nb3649230-8b93-4cd7-b567-a9a8c2bb092f\nd9c213af-d358-4fbb-b7bd-365363348ac5\nb96d05a1-a8da-4e14-93b7-4cfbca8ac9ce\n14904b66-5f83-47b8-a83b-fcb291e9f722\n7da77bbd-3184-41eb-901e-c5cb7220d076\n76a7c31a-b299-4f7c-ae09-55e298337739\nf549cb70-9a8e-45f6-b180-d7245cc187e8\n52d812f9-5ccc-4c93-a99e-59f5e5ccf0ce\ne805269a-a784-4679-b05a-3a456ecf71b2\n93bd76f9-ffd7-4d0b-acd5-332c6b17e795\n65b6be99-04af-43aa-9088-2c9795dfc273\ne2169a11-3d8e-4923-b3fe-79813be097f6\ne7267b2a-9602-4436-bd67-845d798b7b57\ndef0a47c-cc08-4ab4-9075-db8a58e2010f\n7ea2b16f-18e9-43f0-85d4-0c41935ffbfb\n8f5c7e73-21de-4b7f-be7d-66f28f3b084a\nb9ecca20-584c-4e9d-947f-7e0e111adfe0\n7393d21f-f672-4a5b-ad62-b996231c69e6\n163fbadc-7c52-4862-9f80-e6d13d33124a\n847afc26-9cb5-41f2-a3ce-f25488989f99\n9e5574c0-a812-433d-9f80-537d90672031\n531e35ee-9e7a-463d-9226-323e9255a16c\nddf0ba91-c4a5-4fb8-a206-447209752b2b\nf293e0fc-e5f6-473c-a9dc-9c1a7195a541\ncaab1152-d065-4e17-8028-7c9c38854050\n93b3b172-7596-4689-aa77-f5d273cc8080\n5dda5d4a-1e1c-4b87-9b9b-fd4097ff1749\ne5e87ff1-4a01-44db-99c3-c54bfa11e738\na30e2b81-b9db-4234-9067-72a6fac3f1bd\nc41b8fb6-2039-4a61-a183-781f09433180\n1dcc3b3c-744c-4d57-ac3b-3198d0209259\ncab14a26-1443-4fc5-94a1-285477877761\n80c9dd2e-96c7-4230-9c98-6575905d8b33\n7b7000fd-e7b2-4063-bcd0-cea4b4039946\nb9d047c6-5d70-4924-a9c8-04693c83dd05\n58da7fec-f5d0-46e8-82cd-c76401e557ef\n584eeed7-7b5a-43c4-a72c-8fab6233fd97\n129177c9-9db5-4c9d-b86f-eaed30523eb3\nff5435d2-598c-457e-85ac-cb9fe3e56ab3\nc8ddedb0-223d-4b44-b797-736a57f47c07\n5fa994be-9d9c-4460-aaea-4ccef2914a60\n10966834-7cec-4a69-95c4-b584aeb6d2fd\nbeab1d9e-9b72-4074-841e-9580c5dc8ddd\n37f6c492-1280-4ae6-9c47-ff8fb58b655a\ned281e34-c6b0-4d46-8876-aa9debfffa99\n8d3a788b-43d7-47df-a02a-4514ef633355\ndc5801d4-68b4-45d4-a47a-527c2c402af9\n220fef62-7c7b-41a3-8e97-41fda5656d84\n80de3a2d-a427-4c1e-8254-112dd0cfbb0b\n7a239413-d010-4d02-934c-98511fc0572a\nfd1601f8-84fa-4e1e-8aed-c9a31382e69a\n49a7247d-30de-4bc3-b141-72f29cf2732f\nd9b1b34d-e48c-4cd2-b43b-e6dd9859978d\n29fb68ca-5ffc-4ea4-ac84-87717ef59c44\n7fb87036-b5cc-4a72-ba14-bdb2695f08e1\naabf7796-c33e-46df-8aa8-4d75a26cf74c\nb1693141-81e5-4c80-9dcd-8d810c6584b3\n7246ea1f-ad18-4a9a-8074-680d8ed3e9d3\na8f823a7-2c9e-4197-ad69-cc739f149a01\n41cee953-cfbd-4f48-be5e-f8191ebf7922\nafa80859-ddd6-491d-a4af-5c4e675b6422\n5caf6def-42c1-4394-855e-cd84c090efef\na09c0096-b8c7-46cb-bc38-5d6806f78f1a\n845e4acd-a8d3-49bd-8a0d-b3ff8c47020a\n3ac3f3d7-7f5f-40ab-9d5b-821edf63e50a\n6a257541-494a-408f-87f5-ea1972e67ba6\n8ffdb833-1181-406d-ae55-132b3cfb4372\nfbb4b7c4-4d67-416a-bc66-be29706a3651\na27d4837-cd77-4a65-b514-c56731915f63\n44ba9a32-dfe7-4585-a792-e7a94481edfd\n34cfc9b4-4e1d-4bb6-940d-185c3b984781\nc80e4f4a-7c3e-45e2-8d6e-a5dadb7c57d3\n88216cb5-da69-45ba-8165-7d1e67e2cef4\n89d36d5e-9282-4dc7-9f08-e1ea6715c75b\n695ad83f-87bc-4484-b79a-646621a37dfc\nf9007a24-6435-4fd2-9657-82ee87caf391\n4392efe3-abc0-4171-82e8-526fc040d5eb\ne9733713-11d8-47f0-911a-c65294c33a1c\n43db1aa5-79cf-443d-9f1f-925013add57a\n43d3e05f-a4d1-4d98-9587-d4e7ea0a64c5\neeebcca0-422a-44a3-8ca7-6ab17d4af2b0\nff3af203-bdd9-474a-8d70-76156f18c1ab\nfad073a9-22e8-426f-ba9a-1d97fa9a1229\n922e1ad3-7b65-4d43-a367-88cadb279a41\n010e8272-ab04-477b-b653-6821904339b2\n80bce21d-7c4d-4310-8416-92961ee29eca\n4a704b61-2e1c-4c70-a5f8-42580e26e4b6\n98fdf998-9d29-4982-b22c-f8673d2ec10c\n206cf952-2700-43be-b57e-cf5aff1fe30c\n978aa7c7-fa09-4d97-95f4-e73e823a524e\n53aa6cab-f0a3-4cfa-84cf-989bc821e96f\na7f5453a-1286-42ef-a772-be79592c8206\nde5724d8-32ec-4abe-8e78-97bc045c9f97\nfd19c715-8535-450f-a20d-7d99e458cd8f\n64778190-06a4-4357-a3e6-473a820d3554\n7c13844d-8944-47ca-8a0c-2b19ac8e56b8\n2fd8587a-9c4f-44b9-90f2-c3c7fd6cf91e\n04b1c2a8-3331-4918-a44b-5264b9b79380\ncee86cc9-26aa-4fec-ba3d-9b61b04f4f6e\n6cb5b3d3-b26e-4fec-bd35-bb3bf96ec313\nf30e1ed5-3a89-4afc-900f-349c32e897de\n823dc22c-0c27-43e6-84f3-550df52ee4b3\nb056c056-0aed-46e5-b490-11725eb5a90c\na06e974c-de3c-477c-8336-a1bbcbf8869d\n748e01d4-8c26-4e47-8b3e-caa8f7c78dc9\nba294140-d7b1-4c84-af6a-f09dd7134ac6\n296bcdc1-768a-4f06-8d59-655be6dce709\nca198050-0d9f-4fbd-8def-b4b68f1c525a\ne174bba7-4045-4b1d-a5bc-57068f2ccf8e\nf508728b-bde3-4bf1-80b1-a20961f09c7d\n229a1498-c232-4284-921b-526e7d5c93c7\n53c1b32c-0b9a-4c36-be77-6b4e4141ac62\n98863f2c-3c30-4ab5-9e01-636cc059aa1f\n24a17fd4-02bf-4c44-9f53-0cc14754c0cc\na50f9391-7c45-4ada-aedf-be991c23b5e4\n1fe12104-8f6d-4b31-8010-b5a3c3f95d07\n2a6e5dda-9d97-4d39-86c2-f77e6b352cad\n89fd20e8-3c56-440a-b6be-45b64e8bb991\n6b645d8b-82f7-4b12-8912-470d748b1fcb\n1581eaeb-b385-48f3-b06d-045f4134d9a0\n1f0724bd-2681-4ceb-8408-1571bc0a89a6\n9c3756d5-5a1d-4e55-97a2-d46d15174d62\n31445e0e-2705-4df2-9ca7-67354f9bf457\n5cbaa195-a968-40ac-9a18-6447075f5e1b\n1ff6d7d7-059f-4b94-8fc5-5ab28e1cb51d\n835db923-3ef9-45cf-b6b3-5076be6f88d1\nb3ba39cf-3194-4c91-a726-d45b8aa42e5d\nd5a39aad-9909-4b0a-9a50-ea2ad0aaba81\n492572c5-fa6d-4297-9aad-f62fa438308f\n8ddc0e3b-93ed-40e7-a60e-9efb8303fdab\n62982d52-b836-4f79-8a64-a6ed3946aa73\n9adbc03f-a390-42af-8496-c84fb2114734\naf93c1d1-2b40-427c-8f6b-e0f9e4b9d8d2\nb237bc69-7a2b-4c78-b0b5-d489c714e940\n64debc54-2bf3-4221-9b9c-5b9888dc2c21\n78997a0c-8905-441d-aefa-8d0cc7b5327c\nd9861d6d-e61c-4ddd-98b5-314e0a5e9046\n952a8fb9-9637-4a8d-9293-c09d29e6a6f2\n745e3af0-ec83-4afb-a466-bf9bef30622c\nc5444ec5-8dc0-4e78-add4-3c27e6f83049\n4b693922-82d7-43a4-bd2d-6720fcdb25c7\n7e96a035-79f5-4dbc-b46f-a079afda2149\n2bc70b08-fd92-4c9e-b289-53c06c57a738\n66099386-c0c8-4700-a1cb-39b0131e3411\n18ba5530-3080-4efc-8318-99fef1e1fc5d\nb641ab3d-b58b-4360-bde5-67ab8b56e1ec\nadf06aee-ed46-4a1a-8cc6-14498cc0c42f\n69351488-46bb-4d5a-aae2-782d3aa88e70\n0d6dd945-ef03-4298-9ca9-0b65e5efd495\n33b4ee8a-4b16-44e2-bb86-0865a30620e0\nbab31a14-2514-4002-b790-9e97764ffa06\na2860682-cbe7-430c-a1af-6b4f8e6d0903\n9c65bb46-6090-4240-9c95-f8641eae2757\n3042dc20-fb3d-4c2f-ae04-6a36d310ffde\n5b28de87-1639-4408-ac0a-7c55812d1447\n3f389113-9afc-49c2-9b81-ff30f379265f\n036a9696-fcd9-4dac-8475-955cb62601a9\ndc384fb5-5ba6-49b6-88aa-a1b4619edd61\n606ee807-246a-44b0-afd7-f06f6f6e6f71\n26fe0f03-6e5c-496f-ae13-abd7c0a2ae18\n37a02d6c-b211-453d-b606-e82592ec4db8\nfa813b2c-dde5-4d77-911a-a82ab817e398\n2b5f3a97-d4d7-4b55-be46-0a170e1ede10\ne77c4c2a-6921-4363-9f5b-621875971078\n9fc2779f-64b9-40a6-a023-e6eb14dc6eb9\n6ef22b2f-ac4b-4193-94d8-cd93c52b25cf\n12650eec-a5d9-4eb3-8654-11c6c765703d\ndbd9fe07-e4b5-4480-8f85-5a086f18df12\n9c42949a-69d4-47fb-a31a-7d74c7c5f04b\n5bf218a2-f6b4-4da6-a92f-a40c70f28022\n24c4212a-65d1-450e-a56e-baf54e092418\n3fc16e17-115b-441a-8f0c-d307621739e4\n542c5184-2024-4680-b19e-5bdb48e6f08f\n3a71ba40-ceaa-4c15-8464-6ccb1f7fe6f5\n92b28d04-5774-47ac-92f2-4a60b9840578\n38d4a257-85a4-4f2a-b618-1e8d0087d3c4\n24852f10-ef02-417f-a435-ef83ca9e43cc\n8eeeb69c-c4cf-4b26-861e-46a0197cdf4b\nef3f4d73-8bfc-4e27-9369-a8bab2e77bf6\n181d1485-480c-4b4e-b104-1232722577fc\n22476e18-56ae-4a16-ae96-e140f05adaeb\n6d18385a-9a66-4f08-b9a4-fa3886f3bb2d\n1a984edd-1d73-4985-a3e5-6f1050a9e2e5\na80d9999-32ec-4b9f-aff3-5cf70abf6305\n7c1d641a-19bc-4a9b-8d02-c409042b8b82\n7fb54ea1-e036-4e01-a8a4-8d2a2d229d59\n5afa1976-cee1-43f0-a4cb-0a49ccd53032\nb2c48547-fe39-4dcc-871f-42b5991777ed\nf17c8e8d-94e0-48b7-a32f-cf275269033f\nde6ba880-a8dc-440a-b49a-8030c4c4b4e7\n33c59f8d-6c22-4515-b976-78c5190c7005\n8c59b276-7761-4cd7-a347-ad0257248fe7\n102c7872-cd2e-4fbf-be1e-c677a4d6a783\nccc6c6cc-4c2e-4016-9277-fcf1231279f7\nea1eaa09-e4d2-419e-bed5-541f195824c2\n127007ad-f976-4387-9a67-4154207a0255\n22c4d5ab-c4da-4af4-9d68-50b0ebdb6324\na9032d03-2806-4177-826d-e173a377caf3\n909294e8-bf62-49d5-9e18-2c6dfa594a0b\ne2b6dedf-fefb-4afb-b844-7dcfe3bf6b21\n5492afa5-c208-4a5a-b6cc-c2edb6f82d9c\n0553d56f-2d0c-462d-8bfb-176c56c01bd2\n0ba42d4e-eb3d-4879-8a04-58fe50274374\n40287895-1b05-429e-afbb-3fe3d1e47260\nb30ce1b7-3515-485b-bfb8-11290ecd400a\n08472f0f-9386-42eb-9c9b-5cfdd9c001e1\n3f60af4c-a1aa-4279-8d12-0bfe93181b2c\n9d57e2ab-9d15-41a1-89d6-552f8842d2b4\ne8141258-eaa3-4d13-836a-739500380b87\ne5fa16a5-022c-4b17-8b58-20197e611af1\n9326fd22-e138-4ffb-91ff-f009d9132a6f\n4739c54d-dc3b-425c-9cb4-5ae4a22e3cc2\nc73f0c0c-5791-4617-8e4a-29412a40210b\n278d2955-e795-42ea-b5ba-e37cbb172005\n4633f19d-f7b6-4ed1-8ff2-30a062926583\nb5770d61-79a4-42f8-9400-6845ff8965a6\ncbb89cbb-f023-409c-8f8a-e2e67cb2c379\nabdec54e-7aea-4d18-9d5a-af34cb9dc50f\n561707c3-95a5-4775-b57d-256a26e3be9f\n72cc7268-e70f-4dc1-be90-7f6c429f1878\n18a3da0a-78be-459b-871c-10766f7ca433\n026ba1e7-e1d2-4bce-a760-018dcbff5463\n243f2853-0d22-4278-ac0b-6d4f399297d0\n64373d8e-90de-4031-86a4-e8ff6c287c53\nc6dcdd8c-6c33-457f-bbcd-f2ca0ae95cb7\nbe4a873f-0eb7-4190-a44c-d509607315e7\n2164498e-dcaf-464d-8bfd-986cb5951a82\n2809397d-c492-4b05-93c3-a42c807b4342\nb66090f9-adfa-4bdb-98a3-de88c6880ded\ne4dd91d1-d345-454b-9083-ef6d27aa2225\nd8cad527-0f28-4320-9f2e-4c7e85c1cfe9\n35267969-1a24-4e95-bd20-a2c494ce70e4\nad0557a3-080a-4414-a3eb-6a9e8b424da8\na5ca29e0-27ba-441e-ba2c-e8fb58d1c1f4\ne42cbfc1-455f-40c8-a6ef-4b433836d573\nf9c333d4-875b-4220-9e39-27e5a64e6472\n38a9e2b3-8e0d-4c38-8f4d-d049a043a4b7\n9a4c2ed5-a4ed-429f-bbd7-771654fa33d7\n8c1d22a9-5269-4cb4-946d-74b4b5f559bd\n85f8346a-2f86-4b79-b40c-b0f9b16bbe00\na3e1d23c-4f6b-49c9-b815-6c47d9f6823c\n8e7f9c79-4f7b-45ed-8ca2-9b15e4f1e606\nc40e0f11-6536-4b05-ba71-e2591f471b6c\ne76291f2-4067-40db-ab5f-eb1193ee9572\n26073200-dd55-43c8-b1e8-fbda7f79af53\nf442f5dc-e9d3-44a7-a9b5-d201f686c976\n70c64f40-10f0-4205-875d-24beffb123c0\nfa27a2cf-fe7e-461d-83a4-b12cb211fc22\naa4c0dda-574c-441c-ada8-f549ea1228a0\n3c7e5012-8848-4388-b42a-0bd1e9eb26c1\n4ac29f35-a7fe-4b60-bdcb-a4210b77162c\n3decdc9b-0b46-4180-86de-2d394e509c00\n35d88453-c7a0-4f2e-aa95-0a038aab58b0\n2625297c-8235-4ab7-9d6e-11c3a3021a80\n8d014b33-b706-4291-b71f-c45c61745cd7\n293569ec-b7a0-4fda-9aa0-8bd3e605bfc7\n637adca7-7df0-4dd1-bdd0-951d4d058ddf\ne5093c28-9074-4e15-89d3-4e981dea1dac\nc0700fad-72e9-43fb-8dd5-213dc612bd68\n26e988a6-458f-4390-b770-536da6557296\nf013faf8-cb87-4dff-a7d2-58f281b2ae37\n6a42b03c-8998-4109-8420-18e47f9e360a\na3e1bf16-9cc7-4701-a188-bd2a5d869262\nb58b7fe1-61b1-41d8-896c-fa8606be90bf\n4fb67926-cbc2-4661-9879-268156945e0e\n4677548c-83f4-4a31-888b-398e19252ccb\nc8bb0830-691f-439b-8e56-754e6cfd5efc\n9d7860d7-3ab6-4078-918f-0f2b4169cda5\n79ae11c8-fbb4-4b46-9f4f-8764e1f0df15\n23d54320-a9bf-4b6f-b492-bbe07733eec0\n1fc615e7-4727-4eed-a2ee-1922c14635cf\n4ea51960-be64-4e5c-8739-d986996378a5\nbebb315d-7414-45d4-a793-1d102926dadd\nf624c4c8-c2a2-4560-828b-e09026f45318\ncab55c9e-fa0b-4f58-91a3-3e5ad8933bdf\n45a7306b-8e09-48d5-8144-9bd5c959dc81\ne07a0edd-cf5b-4f29-a3bd-18fdbde2674e\ne3cfdda0-522d-4d26-8f52-671c7cb1ad86\n40e73eef-0356-4f69-b2f3-31540af68cd7\nd55f8762-7da1-4732-9d7f-88e0f165c07c\n7f414bcb-51c4-4710-855c-040c7227fc3e\n5a76c05c-8c2e-44c5-8f1c-e3c0786a8c9c\n769acdb3-0de9-4aac-b258-9df4f9e950e1\ne94e40dc-f768-457f-b157-98259267fe84\nfde787aa-0f97-4566-a01d-945d70911b16\nd179be43-9dcb-4e37-af1d-473644a47a3b\nda9321d3-bea5-41a4-8f8d-2ba0726cb3f8\n7668056b-225d-42d0-b57f-c419bafa570b\n78547b74-c412-4838-9f8d-5f3c7f3be1d0\n625f1ed2-60c0-47d3-976b-d6423d0cd598\n1a63004a-4d38-494a-be7f-17f66205ff18\nd66fa79b-48db-4eb2-911e-285ee78c97e6\nd8b27c65-b775-43c7-b25e-6ad0ca865405\n80dd36fd-89c0-4dff-8e7c-3373c9616e52\n6cab8a50-f4cd-4e4d-84d6-b039ce807e0c\n772bd61a-6f8b-444c-9bdc-eab8d7914158\n62a61d96-610b-48bb-9763-e81888a9ff4e\n14efb97e-14fc-4ded-84cc-ff6c9b748b90\n5dce07a0-c2fa-46e1-b82f-5df1426056a1\nd372c994-3aa9-4ded-9e2a-ba7f54813661\n1267cda9-f15f-4e32-a7ed-2bbda67ef523\ndcd66202-f710-49c2-ac9e-fec797db973f\nb616a80e-87ab-4021-b53c-1c67c722e285\na20fa0fb-f85a-489e-bb3f-56857def5674\n52762a6e-e80e-48b7-891e-c77ebcc49317\n82809368-5f1b-4bda-b569-9b3fa119d768\na71c0576-7c8b-40a9-821c-a19a0bbae3d1\nc4e32752-3399-47bc-a75e-1dbd3ffb9750\nb03d3bc7-4554-4d0d-9770-a6d95526179d\n1fbf2607-dee4-473e-a0dc-71ec675fd20a\n67ad4a0c-1719-4bc0-bd2b-3211da45b14f\n596a48ab-29d4-4417-98e0-a713ea0827ef\nb9492064-3eb0-4fc4-b500-261d2edcb36c\neb5afb09-a6c1-43c9-aab5-50fb9d9f1489\n86195888-f9f0-4014-96b0-f7fe8176410e\nbbbea585-47ee-4a37-a477-6e9178f9a5dc\ne6694ed9-68b9-4bf8-aad2-6d175d36a27e\n1d27bf95-b598-46f8-b7a1-df27ba315739\n7a3c8d14-9db3-41f2-a57c-05cab4a8dd7a\nd4a35708-5d78-4cb4-8439-bf79208c5e6c\n1643abd0-6f14-4d43-9bc5-596e40a721c8\nd7419ad9-3403-448d-a261-73d5499fb1f4\nb5846996-69b6-45e9-a3f0-5c72cde76cfa\n72ed61e0-197c-435d-b51e-b4d8771a5145\nd7ec796b-a39f-4473-8801-ab3906efc7e1\nbad680c6-00d7-44bc-81b9-98682fa61ae0\n67bff25b-29e0-49c1-84b9-94bc3e9deeb4\nd8263e95-abf2-4170-894c-c220d17eefab\n64fce29f-3ee9-4e9f-a67f-5c8f1c28ee21\n7288ce78-f13b-4c3c-a8b4-d032a062aace\n3a0da909-5038-42ae-b0ab-2c99a1f697f1\nc57f4092-f3fa-426b-a9dc-79b2f1096a3f\n6a1521c7-c167-4acd-a841-ad009dc85e13\n7012ea7c-75bb-4af5-9818-8aa06d25639f\n818be423-ee9e-4b39-8010-2b8510badab3\nbd7b3eae-6873-4a11-b463-6e0ab15ea584\n67603057-188c-47b7-ac99-f562538b7454\n5d975e54-8a74-48e6-a561-9a300aadb3d1\n07d8f4c7-266d-4e61-a95d-e7404074c282\na45c5b6f-eae0-4acc-ba66-21ed8a979813\nb3fcb915-99c0-49a9-9f0b-d61ac4e11be5\na439c2f2-56e6-4719-8aa6-87fb20b4e87e\n85a96764-ed8d-4d30-bfb8-77fc5913d7dd\n64d0dfcc-978a-4ed8-ad3e-bf5f2cbb8313\ndd7810cd-ad8f-4663-ac73-35f4b08c9ede\ncc6f8eab-d553-4932-bd36-e255fa8d474e\ne3e5f96e-d0dc-4a40-b622-744c388aa3ad\n3104e370-85c3-4bfa-89a8-e4421c7841f2\n2d14870e-c421-443f-8a38-508325506424\n9e28b109-8a30-45c6-baf7-b8ca0a3aa1d8\n239c7b6f-ac3f-4746-943d-4d7272622f2d\n9c68039c-ff08-421f-8e48-c022754f470d\n4c0898b5-3826-4e29-a76e-0479625d4e5a\n4880152c-dd15-408e-80f9-e3d9ef3d6c15\n8903a243-da65-4111-898e-61fe16125dba\nb09586dc-cc85-4bd6-a1a1-490da84995cf\ndab28615-68ae-440e-be3c-497727b4b0e6\n14291e8c-1e15-4f1c-87e4-9853714c4843\n380aef77-7811-476b-9da2-0297c0ce925e\n03738d80-fb37-43fa-978c-dd06a423e00a\nb4419efa-8ad9-43c4-9d72-af803019397b\n558d8f50-8375-4da4-981a-4308bf022833\nc8ca7d2b-dc1b-497d-9196-e9912b64ec1c\n5d1aa5cc-aba2-45da-a680-b818b09ec47d\n05bc907a-2a0c-481c-8824-523f8db18a1f\n44aa9da3-564d-4117-8568-2c0bf03b25cb\n6fb1f01b-c839-4aeb-a7e8-5214abefb248\na9e43775-3e64-4605-a25b-dda28fc6424e\n3714d169-dad2-47d0-9d25-c7efaa303ef4\nbdd40984-743e-43f0-b7b9-e82b8a75c03a\n04de9466-923e-4b71-afff-a4a4f4ce6758\n9e4f970f-fef0-4740-80e7-0f6033698568\n7ef889b5-c286-412e-808f-c73d9f8e1d75\n69fe0ca7-aab0-4126-b376-008845e075e0\nb0189c23-2619-4dd5-b767-9d24f950b63e\n4a902bc8-ef2e-4dd5-b771-011d8725eec2\n4797f955-b1a0-42a7-9003-9ca8f0fa56bf\n723a093d-a281-48ee-93f7-fac67b7fdf02\n1c2e952f-1603-46ac-9ef1-a4a59d3883ce\n99edbd08-9531-402d-a059-4ae475bd97d0\n497f785e-9d7a-4573-99f2-075b0d61494e\ndf80c5c6-b245-4ed8-844a-f2ad6d634174\n2dc1bdf5-a70d-4078-8f0f-a781c698d7b2\n8e34b207-9b29-4334-92fd-7460f92e141e\n948ed245-ed78-4e0d-87e7-d775954cd10e\ndfdd0003-b5a9-4bf5-941c-b2b820aadc3b\n235a3a14-e46b-4551-8e26-6c9dd33d7f05\n607099d8-62f3-47ae-a7f5-a790be73d872\n2aad9358-093c-48af-8802-3ef79166d071\n5f4ba329-12a0-42ef-9a54-a3f7cb7bca30\n77b7902c-4d3f-4756-a2ce-efb400ae6aa8\nbc515370-59e7-4953-a3af-3f83434f7251\n8046a90f-f4bf-42c7-aee8-268828062889\n4c77c78b-a917-4ac2-83b6-ed79bb4bd6c7\n9127b5e9-81e4-4ed9-a410-3e7583ed2a38\n20460c19-c092-47cc-a984-850ae40786ec\n67d18ae7-49e0-4d32-b800-35a0b56bddcf\n11527786-a7d7-4dcc-b4e2-1f5011e8919d\na6619af6-c085-41b0-a538-3a18d67553f1\n12131259-be2a-4cfb-9049-36265a9dcba5\n5d60ba6f-81cd-48eb-96ec-5cff4f769582\ne58c3269-1cf5-4214-96fa-08eda406e77a\n7a5c065f-d387-4124-9602-177d757d3d30\nfba8f901-18e7-4065-952d-bd16acc4e977\naeffad27-dc81-4ee2-83b5-101df1d52a1d\n13f1dcad-0dae-4add-9719-53bbebcc39f3\n574e3287-7a25-4831-aa2f-476c1e7533b1\na33cef9e-12f0-4f9b-8488-5445cf77181d\n48399792-da15-4062-baf6-ea7aa689f7f5\na00540fc-b8c0-4dac-8111-5bc0cf799f74\naae21fb9-467d-41bd-b585-ffd02db0dc69\na6c5524f-c1fe-4020-96ce-0773e7d588b2\n8fafaf8b-f459-40bf-9b08-36211b64f9b1\n3cc20694-d1a5-4d82-b680-40197924b830\nb954d171-d07b-4aa0-9545-0af7928f5d83\n9799a344-7133-483f-a1d9-a965138d9183\n628732df-9fcc-4513-9296-cc30f45f0c3e\n788f87a9-818f-44fa-bc0a-3809515222d0\n4ae1078e-0123-4985-a23d-4ef3652a37e4\n6e68a534-14de-48bf-bf15-4bc9683da52b\n39794dfd-c0c7-4635-a8ea-82e72f360b20\n5395d31c-260a-43a1-be55-6aa27200e038\n4853f164-e7d4-4c6b-9704-e77fe77474a8\n8c171c97-22d2-4e88-ba25-d2144a92f6fb\ndf680780-8ceb-48a9-b723-8719226208b3\n5f71ac35-1f2b-47c1-8c2f-b83edf190223\n9f709df9-ca2b-45f2-a4fe-ee989e43432c\nf40d08ba-4095-4cf6-b62e-4101a2dfc5a3\n2973c628-c4a7-422d-80c1-7f142946ea39\nad1277f0-cfa9-4164-8bd7-30b6ce6651e2\nd15d694c-05aa-4b90-bab3-35654770458a\n73bb672d-4997-4347-a7f7-a03f207904b3\nc53946f6-d9e9-40c7-b84e-9e7d0911da5c\nf286c9a4-c852-4b80-a5f5-1696f2213e9c\n90e988c4-b38d-4339-89fc-9f486a24982f\n4d8ea07b-bfc7-4e6d-96cc-f9007ab77b03\nacbadf80-8dff-4118-b2f0-22da55594b31\ne34cfb33-cd1d-4193-aff6-4e8c9b7cc06f\n0c9b35c0-a661-462f-b1e4-2f8864f1de37\n5f1988f4-abdc-412f-98f9-faf99524bd3f\n4b6d874d-f2b9-43c8-b4cd-f4d59fff9580\n4969daf5-61f1-49e0-b9f2-4817969b1b64\n6d55219e-7e8d-4a98-a84a-4b8a8ed80795\n21153078-f12d-4249-8bc2-710009ea5867\n0ad67a10-815d-4243-b15c-444f75b4dc45\n3a8255fd-e86a-45c8-b0c8-ce23590c61f1\n60eb7196-ad92-4be1-81b6-2fac819910cc\n3ae97e10-ec4a-464d-b391-e96d65823d5d\nd3274534-2731-47df-bc04-440b13d2e58c\nb89ca28b-2760-4ba9-a6fe-2c7351ed77d9\n0adfda5d-239b-4f44-a3a7-44cb291f9058\n8f958cc0-04e4-4dca-b931-2d4f3c0c4098\n1889a668-0c64-4e28-9daa-b4e6d97bbf1c\n55cadf5e-e715-4145-9e88-b83c4f43c201\nc3845950-dc99-4675-b179-a1569d56d369\n3472fca9-ceca-431b-8ea0-7773d6bf133d\nb05ae80d-9051-4717-b193-767d4bdd6f01\nf4b17b74-0ab8-4344-94b6-b876600ad7a9\n2f0e25ad-446a-495a-86d1-65f40ffe0d8d\ne2159e17-b582-4839-b937-f4f5cb34a420\n99115e4a-8a5c-4ce7-87b2-37910b5dc45a\ndee34b07-e569-4a0b-8c09-b56053526786\ne8f9c598-294f-4ff2-a2fe-8d2f23f79b90\n99f97040-5905-405c-ab86-05b54e5c9a36\n8aab6646-8a1d-4dc2-8567-0e84a73123c0\n43b3a738-3825-4380-8d48-14b8a8d9bf0d\n20b52fb2-263b-4c43-adf6-909d14de0805\na5aca6ac-088f-4e23-a7ca-75df9f5239b6\n25afa7b0-7117-4e57-adde-53ed973d3117\n4fd95766-6d24-4a3d-8eb1-b9ab67c7efe3\na2ef45e6-b817-41d6-b2bd-50c54df8eed3\n34de71e7-7e36-4b3f-8840-20151acc1c52\ne8c9b756-f18b-44d7-bd18-7b8037893bd8\nd29811f0-dfea-4f25-95c0-35072ce04117\n916cc4c1-9eda-4be4-b8a1-460d1a94718c\n2f4f9650-cd72-4d43-85f0-deda54d51ec5\n0662c4d5-e8c3-4d83-8f76-2dc7ed40f43a\n5e1c4e42-c893-4d46-9792-d520441f8e50\nc636d46d-6bbb-43fb-a064-81fa4eb723e7\nfc63e11a-8afc-4e34-b30d-864e845dd1e6\n5f91c4ff-1133-4853-bf09-75dec3e71747\nf4116d83-04ce-4571-a9ca-0c3083a6ae14\naacffde4-5caa-489f-a519-eb03d0dbd89a\n4630ad3f-b259-409c-9f84-771b7c919ef8\nfaef9616-8142-437f-8c1f-dd9d2ea5fe4d\ned9d0a4e-2c20-4b68-821f-881ed64da1d3\nf53d9e39-5287-4388-a7ff-ad59fd195fe1\n51f5034d-b5ae-4cd0-a949-71d357965eb0\n1eaf349a-18e5-48ea-981a-117bff9accb1\n99d7298c-e750-4461-9123-459511dd5ede\n7cb94e43-67a0-4b4b-9f4f-2edef69ef5dd\n53121947-a318-4d5e-be7d-2e5db52a66d0\n5a39601f-6e7d-4fa0-9585-e2f0c2d99a6a\nb79525fd-6154-436c-ae56-384e81668d3a\n1c265c63-402e-4dee-8772-43637b640d45\n0fb179f2-beec-44a8-9cbd-e0b5483f84b6\n0c671225-1f6a-4303-a6af-f51afd7b34a2\n62ed53cf-69ad-4c07-8b95-04d8115fd119\nfab99038-f85f-4e60-9c6f-f3f53fc6774f\ndc329ce5-fc6c-4324-a3df-4f18bcbf0e54\nd09a817b-2275-45f3-86e6-f897f9495320\n875bad70-d459-4947-9a17-7c91d07b127a\nff5dd780-d75c-4e1a-982f-917a88d2b73a\n822a8d24-12e2-4160-a00a-2163b4590037\n99afe578-8279-454b-97a8-d1bc2f01c783\nc0d86880-65d7-4295-89dc-f981aa869e7d\n1d8ce603-d742-4860-8478-6c3a31fecca1\ndd7d81d1-10b6-4176-a30d-e4f030662989\n37b6c8c3-a6b1-450a-912f-72722f26fb13\n5a20d6a4-34a3-4063-9caf-f1fc8d83b2ce\n7079ffcc-cacd-4e4b-a871-955a5f0d3f3d\n925c6803-a153-4e11-b910-46ec096f01a0\nf3da6b2b-e657-4f54-84cb-97980aa0a9b4\nc74611bb-9c34-41bf-afc2-9a1e81bfcd50\nd920faf6-81fd-4555-a52c-866679c7ae1c\nf2242090-15d8-4079-9f14-c9229476350e\n1aab491b-0156-4afd-a508-ad26c1dc1511\nb6f1afe5-c6d1-4301-8a3e-f32ef0ccad4e\n00f4d41f-b1e1-47f3-ad19-fb88b2f4096f\n88d3cc4d-e5a3-4003-9942-a452b75a4b32\nbc165087-0f08-429e-a63a-54717ac2f339\ne1eaacb5-3166-45fb-83a9-5ba03774ffa2\n75e0478f-518b-4ea2-a3f5-4131f1b14e47\na7569ce3-ed21-4e6a-b1b7-0d0a58a683ab\n6cb8383c-3505-439c-b887-5c8f8860b64f\n3eddab61-072a-4196-80ce-71a211626616\n0999468b-bf22-429f-9cc1-3c024c47335f\n9845de28-b84e-4278-98d4-a273ae9c909e\n9ce1fc69-5797-439f-ab47-5fa397ba4277\n0cd9c450-2d23-4188-8cbe-5b5d9f319736\nc09cf2a5-4342-47a5-a9be-855915de348a\ne21e4802-fd07-4cc5-9de2-fc6ae0d46ece\n2a074a64-d20d-4bd8-89c9-171d3bc8e8a6\n99f65b2c-0ccf-4903-a8af-673358ad49a7\n51c9b0da-baed-4f89-933d-60f4d5131b0b\ne459c719-bf38-44c4-99ba-7e848ff21a0f\na13f40c3-8eba-4908-b824-44850eb71143\n98fd6629-eb82-448b-8da1-db30af9c0a07\ncfa95e42-ed98-46a1-b329-da3d6c87e3cb\n92d78761-898c-4e34-b2d6-b41ff4413e13\n743f6ea0-bd1f-486c-a6fb-603d0792674e\n00532b96-416b-4e09-bb04-149c98463d4e\n6ab75cb4-e43e-458f-aed3-8a4f66f6eec4\nd37f33ee-1b90-4b1a-9309-a34e90105340\n862fff15-e0b6-48e9-89e8-efe61d3b2bc9\n7868c3f2-c0e2-40ae-b6b9-6f2d35e98f84\nfda52f72-b764-4701-9de3-718e8331d956\nb65f2963-0f3c-4279-b45e-61573d3010b1\n5600e006-6cc3-48bd-b1ad-314b8e81bec4\n9aa73e6f-125b-4844-9cc0-b8510d29c792\nbfc2d432-0019-489d-9e60-2587e7249fcb\n52e054be-bb74-4eb1-b191-a8cefab534b8\n2abf2874-9664-45db-bd1b-51ac7807ef6b\n652c4af2-9068-4fa9-8dbe-9766a034ec66\nf63e3751-cdba-4938-b14f-b3baa19b2c07\n005ce930-5f1a-4f21-aec0-c97d077556e3\n86643fd6-d20d-4440-8074-ad9bf34de119\n48175277-2f0e-4886-99cd-1b3b3dc1dc3f\nea20c219-e174-434a-b218-48ad4837ddd4\n4fae8c0c-8c13-4904-b74b-37ac2695c765\n33f87a39-231d-45ef-b88f-1368750f8cd2\n21d891c4-5205-4a26-8043-b9d71e883c0a\n793e7d57-56f5-4623-aa58-08c89c4fb3f8\n9c238870-ae65-41b0-a254-8eae210c4b20\n14c910f5-850d-464a-a357-858bea2cfcd1\nf02defbc-d1f5-44c0-bc7d-a6cd8f80b2a3\n1a5f3ccc-6e7e-4b03-8194-26e6aa045373\nfa4a7c44-7bc9-4f8a-b890-8742785c3649\n14b2cb4b-ede5-4f73-a2a4-3bd311ba477d\nca3f013b-a219-4d9a-b920-cd15efc8e2fe\n0dcbb7ba-15a9-4beb-abe5-d46b286f7f5a\n410d81fe-19d3-428d-afdc-69b37cba3e63\nca30a6fd-bc71-4266-9d55-11e0f0aeb5b4\nf61b113d-04a5-447a-b961-3a07fb94a3bd\n045e98ed-068a-458e-8d77-619a2f0949f7\n55c6edb7-3c02-4dc8-bb1c-d9fbb7c792f8\n6dc2167a-fdfc-4fcd-a0d7-11a8827c40c1\nb65355c4-6294-4530-8a48-a546084e8864\n74634e5c-b7ea-47e4-95a0-5c505b7d0dfc\n631a56f4-7ab7-4242-85ae-e7694887bad9\n7b8f4b75-8e9f-4cc0-8516-59d0ccff1631\n50e3a10f-08e2-4313-a0a8-d4caab76c532\nf213440a-06f5-407a-a073-8bf4dc391590\n17c8ee2e-caed-4ec0-b87f-bea17aa0dd3d\nf4b9ce87-2d24-4edc-ad69-2fbd14855015\n6a8acbbc-3fb5-477c-a246-7809ffcdf021\n08e20850-0e80-4a4e-a7a9-31e9792b6189\n747d1f8d-6735-46ba-a492-e4192381d9b1\nb41716b2-e9e3-406d-942c-513e0ef53340\n50fdf9a3-f6e2-407a-b974-9ea6e637f9f3\nbb5f41f4-3bcc-4b12-84b6-959a907ae525\nbc1ed2ef-bfbc-41f9-a01f-99a9d0941f57\na70866c9-e313-4b8e-bf6a-6538c0f9e1f8\n71a6127a-46c4-4f9b-8c93-bfcf381302b4\n3e75e924-c6e0-4586-8430-eb3227495c25\n4a714285-5140-4822-b830-057718ea5239\n0caf3289-5f70-46fd-b374-5aba87302f71\na7c32515-7583-4c64-aaad-e1402139e51e\n9881a9bf-a473-426b-b70c-5fedc2300ee7\na54c40aa-12f3-4992-b84b-b4a739f3ef74\ncfd3ff11-d34f-42ae-acfb-182753725a4d\nf24e0644-6134-495e-a64a-a21899c2cd80\nf5066e71-d682-45e1-8ee5-322d8e6b5822\nf24212a8-40c4-4b63-8351-d2c8f25803b0\n590a0220-b450-4cda-9220-b38798f8f670\ndbcb8782-accd-49e8-b52a-f7c960e2fc85\nb3683b52-f02f-40ee-8fca-a3a666590198\n601836af-098a-44ef-842b-687e1350397c\n703c0232-5281-462b-b9f5-e78df3e7eb0e\n373e8b9b-fff3-44bd-ac35-df6e62908d36\n77e8633a-c476-4ae3-9c22-6afdd6d61349\ne0c6a3c6-885b-4a7a-8cfb-3e9fadf22c2a\nd064ab8e-c2c4-4b9d-b34a-a6daeba57b45\n8ed2b8f6-bc9f-4c4c-8250-65e8f340709a\n21e53d1a-78c1-4704-9413-56ed0a5add3e\nbd7dc479-ec87-44b0-8ab6-af4c620541a7\n21197439-6a9d-41f8-9039-3129f58a8c14\n6a8f1096-4037-4d4c-ba4e-f316f4c8f29c\ndd7e139c-d109-4b1c-9f80-eeea2fd455c2\n37832f48-9a4a-47e9-af8a-fd1f334be495\n735f81d5-9848-4e25-9693-ac215e0b760a\nfc628efe-8374-4438-9e14-a816cb3d6124\na10af674-9630-4e13-9844-909b8bb3797b\ncb852953-dc62-4ead-bf66-9877095fcd8a\n0d5235ae-6d34-487b-8cbc-5a0e12053c6b\nfc1e800a-3c5c-4965-8274-375d99724423\n6803c0cb-cba9-46ad-9e40-adb15d5d224f\nbd1f13fe-d619-4386-bfa0-cd7e592f7fc6\na2876b64-22af-4113-ad5d-a871ce74f5e1\n35b573c6-9f7c-4690-8ee4-ff85c37c7155\n33ad5ae1-c434-4b6d-97be-6617246ead92\n7de07e8c-ddc6-40d4-98a4-0aeb78fd3ff0\n044b979a-cdbd-4a8b-9e6d-4c694b926ceb\nd4ae51a0-2f26-4944-ab1c-16c7852f2558\n2c566980-2d30-4db6-8c50-f6451848e41c\nfae75dff-1eb4-49c8-b952-0ddb9a76f0e4\nca576be5-da30-43f3-9332-bad73a386dbc\nee19d4a0-7eae-477e-a9c1-9b2dc75ec1ee\n6184f8c4-fe46-425d-b5b3-e8e2253600bc\nf7c006f6-5a0e-42cb-a107-816c8bb15a13\nb9a3c966-ec1f-4dd1-ac86-bf6a5fc8f75b\nd660fbe5-8d5a-4579-9984-84d2e14cd26a\nc4a4ce73-db1e-44bf-a828-852d423e6452\nde1cae1b-25c5-4749-bbe3-0638fe440e72\n2ee26654-82bd-418c-90c3-468e2bd221f4\n6e7fe4aa-f39d-4201-a409-1a0466e6476a\nab5b8fa4-8d57-48dc-a366-778f81f219a6\n515b4154-652a-44b9-bcd7-cd6c388333c1\nbd1bbfab-fc6c-4a8d-9e19-ce503f41d9e7\n38e4885b-f97d-48d4-b1ac-42fdccbd1384\nd9060025-e770-449b-9deb-0ca17c899e1b\n99e3e6f2-eecd-479d-8705-f8d61def747d\n3b3893e8-99d4-480e-b609-aa1fbe10fc97\nff273d5c-072e-4a4a-b709-acfd6852fd9d\n4522d9a9-09ea-476a-b677-48aed1001b46\nefdc689d-9c0b-447d-b0b8-ee9ced5fd282\ne18523eb-1d6e-40dd-b706-b49a59983a53\n7ac6f404-2c44-4888-a407-77e4c0b66d86\n7985be5c-97bc-4267-b74e-7839df51a931\nb17e3b4c-1fd2-49b8-80d4-d014e0b2c19e\na153abca-7ce9-4a35-80b9-b9a3f83aa4ed\n3b4b43ba-37d5-4e25-b10b-4c6515f06856\n4769187d-6afc-4024-9e09-bd971cb0a6d2\n99281a3b-b2b4-483b-ac3f-91e09c2c8c63\n76aaafa0-34cf-4767-884a-1ab12c72ea6f\n7d14796a-fdc2-4f72-a240-f175966d18e2\n51f62120-4bfe-4b0d-ba3d-af85ba3a95e3\n1820cfe0-93c6-4ea0-a60a-a00ccbbe228e\nc7f09ca6-d987-4529-b492-40c5b4a8d600\nfce711e3-d9f9-4839-8cb8-5d489637378b\nd7e01523-25d9-4389-b754-8e684e9da2b5\nd9d5e847-4264-4ff8-a933-70de50825e52\nf7e16a84-3289-4497-812d-05c58777d017\n3da908c2-2fbe-4f40-88d6-1795630706bc\n13beef87-9d58-4fcc-b465-8ff96acd1bf4\nc594f3eb-ec06-4845-9472-ef75eb2f5c91\naf21ff24-d591-49cf-b8db-19e0d2708f48\nd767779b-6ac2-4bd6-ab25-b21665de1133\n04c7ed98-9fc2-4a95-b4f4-957c453b2be7\n40954415-2c19-4877-9d84-6c8cc1c8461f\n0456b797-2971-4396-ac56-d099a1df730f\n4dc52732-14e2-4395-b7be-a7a863ca5c0b\n8d4e5745-a5f9-449f-96bc-4aaffa47ca4f\n0368d9cc-8400-444d-b373-a01d1b2d61ca\ndd2ab7b2-8b39-4cbc-9796-4a94392b7ecf\n0ac07c7c-d429-4d14-965c-2d56ac59b44e\n8f6a69be-f2de-48e4-adc2-cec05ff1edc3\nd9b5568d-cc3a-4327-8379-a7e66b6b3d18\n8ad942ee-23ec-422b-995c-5d7571aff55a\na7889492-012a-436e-8b47-4d261b372d0d\n4ebeefc3-9059-47db-95cf-c95c3edd22f6\n88c89c45-e7a6-4ea7-b8f1-dda938ca1ceb\nba407b16-9698-44b4-829f-4c93dca727e0\n873c5b5e-ff4b-49aa-9869-b8086f38ecc0\n67c26d36-cebc-421b-83ea-0ce8b3bb03cd\n6125c462-fd9c-422a-a381-6acbe2204ce0\n59d21fbf-14e1-494d-856b-3f72550a7dbd\n7b42ed66-acc0-495c-911a-c7703d94b273\ncb7b3253-4075-40eb-bf7c-3e07343c2af4\n7f87c33f-ad31-4afb-a02b-32af1849ebbd\n94c7c6bc-e5bb-470e-9e35-11e812c3ad5d\n9c8e25ef-1527-4033-8769-153fc19a6ae2\n15b2f01a-9268-4600-8c0e-1fd1f5bdbadf\na8e62ba6-bd11-499e-856b-7ec7d5c37d32\n071b6037-c5f9-4274-bb20-cf0e96108a81\ncb4a6278-6709-431c-88ef-00268ba876ba\n43d2c6c5-f06b-463b-9b4b-7aaf8dd3c68d\ne8072e84-ca2d-4315-a820-c2a4902e869b\n4f707fd7-7024-4f49-9f51-c716bb25918d\naec0e7d0-6d3c-43c3-b42d-c2a9b9ff8c0c\nc4e0a908-09d7-4b56-8ab7-97d754b6d14c\nc809e4de-3506-4082-a04d-b52285ea8cff\nf2d5c8bc-e642-4d7e-b906-d1b9f3748078\nbdee85a0-fb80-44e1-a9a2-d005fb36115d\n89ea809f-57db-437f-b654-f1a377a53ddd\n7e606788-1a4d-4b04-a3a6-64d0bb418268\nd27ff19c-4df7-42fe-83fa-d5e7a87828af\n56826903-7de9-4209-bd30-f3b3e081ea20\nd014cf99-2874-4687-9af8-dc52f082ced6\na7048ad9-1d3a-4622-ac2f-7d72c9c5a5f5\nc2b90f1e-3747-455d-9db8-518f44c5c086\n6e763219-31aa-44bd-a51e-bdc9b83b3d44\nb5ed47f8-32e5-46a7-b8da-e730378679ea\nd98c1cf2-8aff-4f2c-bb6d-84e506c32178\n99748e49-cec6-4850-be66-e1227db8de5b\nfa174347-fba3-4f2d-9098-d3f841db75a7\ne31e2117-04f4-4224-b8a0-cf6f24a00fdb\na5418e9e-1bcf-46a3-b9e3-17f3f5594cbe\n1e58ebb0-f998-4e29-a9a0-740e84616f83\nd111990a-ab5c-4fb7-88e2-f8a4d92bac5c\n34b2b106-4cd2-43de-82c1-6e94e9339147\n5965be94-91bf-4c5b-a286-77b80ee1d316\n66c35e3a-4af6-4a7f-b64b-e51d31eb45c2\nb156ac4d-5a76-48c1-ab8b-1a13a45ae2cc\n1a43707a-6587-4d07-ade4-8184ed951de3\na4f5d3e9-10a6-49e1-95ee-66aa5777ce72\nfc16aae5-77ad-465f-aca1-df35e8d8d5d1\n8675ba32-64b9-46b9-99cc-189431194a5a\n7822900d-48ec-441c-aaf7-bcc1940074a8\n600b03df-87d0-46cf-b8ce-4335a4b972cc\ndca8b2a9-3394-44a0-8a03-240040877b83\nfe8f6b10-ad98-4571-97fa-34e3f6125bb9\nbba285a3-7b39-4aa3-8157-6e79e46eb9eb\n073dac17-5ed8-45c8-8f64-962e80dbf204\ndc979cdd-9fbc-4e8e-93f5-10eb4e262ee4\n0fbf247b-02b9-4d3c-ab25-e91a99951239\n1776a628-e3dd-459d-b1b2-b44987ba68df\n9fb2f525-b95c-47ab-83c3-d4daf7651f20\nfd591824-2df6-4fec-87b4-c0d24d84cb44\ne267bd81-2ca7-4ce2-9040-9f6e8de8f52f\n6a4395f8-9deb-48b3-8d50-159b40708073\ne62ce630-4157-496d-a325-4ac1a8e41bf2\nb5f3b19d-6036-46ef-985d-43fee14ddc6a\na85d101b-4a82-406d-ae95-ba90dd7e12f5\n17e8a1cb-0b3f-4cda-8621-4a92e5211608\n030c1ad3-6976-410a-b8f6-93cd3a9f87cb\n4fe7a29c-9cac-43f5-85dc-750bac167450\nbc8158f6-5b11-4293-b289-235f504fc698\n7cb65c0f-7da5-4f0d-be09-2ab6ab5a90c0\ndd700728-c705-4769-a2a2-9c595cc18f24\n93318f24-b70c-485c-84d2-154dad9b16a0\nb84de6b0-31c4-4f20-80c4-386a2796f47e\na771078a-fd2e-4484-83f5-669934c73cb5\n793f784c-3500-48cf-8082-cb19ca3e7d5e\n3c0b832b-7567-4ef1-ac37-0f46d8f704be\ne09a39be-0228-4d33-af63-c9df0da4d59a\n0ad4865e-89c4-4615-9034-f16b822b5be9\nc82e0b16-c142-4224-aab4-d4b8ddc8262e\n0a670c2d-55c4-4784-9146-3fd8e2abdc69\ne90da8ae-b096-4a16-85e8-2ecc0e8f8757\n2da34a91-22a2-4095-bf4e-3dedd94d4db3\n1b490ccb-0f37-47d6-9725-46036118b52d\neb5152f1-89ac-4962-9095-ab8d366e1c69\n5beb51f1-6da0-4985-b8de-598050be8c2c\nb01abf3d-93c2-451f-8d11-13b6264a6a77\nf47660f8-15e2-4e07-9ecc-c43fe2cd7960\n8869a10f-1776-4171-88db-07a587558f0d\ne0a41fd0-9d4d-4f73-93db-d18cf89b42e3\n5c43ad93-686a-47a2-a633-6bc4f044b476\n811260c7-91dd-4b29-acde-19f2850e1969\ncbcdcd45-1bfc-4991-b098-979a3e153ba2\n8269aa56-aed8-4012-b7f6-d469c56183e7\nabb687b9-748c-4659-b563-e65b2f3837f9\n03a5c91f-ed38-4a73-9790-4ec3f7f24ea2\n65f30fc5-17ba-42d7-baf6-76ac4d3a9b1c\n34833269-e39a-4928-80b6-07178a3e3098\nd05ec58b-cf71-495b-bc8e-5c069eb21795\nf8139905-5158-4d93-8004-59f7f93c6e1f\n4f111f51-0d18-4d28-93ce-c9ff08a09840\n54729cba-b563-42de-8d95-a5ec2a09f393\n4b291515-c082-4417-bcc8-32acef6314fd\n508b85c9-e6c9-46f5-985b-d05887a47cd0\n010e7e2c-3ddd-4f45-8c60-ab4b1e0fe719\n61b78697-0aa3-46e6-9006-cdaebd96ddcb\nd1be5878-d9c8-4c2d-bdd5-d0a411d4c2b1\n4f9fe4c8-b6d6-4bb8-8a28-6ac1b0de13ac\n1339e42a-802a-4d8a-9c86-acfcebda45d7\n208832ff-a8d9-4e69-869b-d2da59cfc529\nf98048b7-a6d8-4e2b-ab6c-2db0c0b806cd\n98a85f31-3e9c-4638-93a1-5240922fe4c8\n007bee8e-cbc3-40c0-9167-cf8327cfa09a\n522c5bf0-6b8e-4039-ac11-0dfeffd61b1a\nd369e026-cf1e-4d92-b70f-4be9f78208f8\n84b8b3d8-5d4f-4763-95c7-b66825a1d816\nfd7a5608-c9a0-4f4a-b562-16579cc05666\n1385b06a-221f-4192-8636-abe206c92932\n53c253f9-ec8e-448a-8c79-dce7f93a0025\n1468bdbb-a6b4-4e2a-8f85-0085ab051437\nc0ac1e58-90d9-4256-b0ff-ac582b2436dd\ne279216a-8873-4aab-b4a0-d1b5d4d1d6a0\n3251cf45-7471-47fd-8b07-6488dacb17cf\n1c8b313c-c655-42e1-b291-b337fe696812\n4b3e55e1-c1da-44ce-bb80-c1e699d60883\n32fc4e44-4e57-4aa7-b076-ea0f103c6d70\n1abc9d14-02a6-4dcc-8f96-3f2434a0fd84\n07c4fe40-34f5-41ee-a184-18de58cafdbc\n139bc577-e9dc-41ca-ab36-8d04dcef3cc2\n8a5eb01f-4f26-4a20-a5ff-9d19c9c78c23\n02fcf0b4-afb9-4a1c-83ae-9a102cf19d91\n0a99173d-85b9-43a5-8e3b-38d429de8c05\nff8ab72a-c86f-4671-ba1e-aac6c3406c34\n87910e67-2fd2-43ac-9be7-8bf0f263f943\nfcd4d266-682f-47ba-bf22-9e2d10f75656\n0e0d64ff-116e-4a9f-9fff-0323d59cd50c\nee3a2767-ae15-41d9-bf7f-d3365062e4fe\ndd524fa2-0a73-4591-9213-956bbde405cb\nea5b1fb5-1a5d-437c-8b27-e47d3f42303f\ndbfdae97-d400-4c90-8279-05d9b4f86239\n4de62350-a96b-4ec9-b4a8-96eb54857a8b\n7701fedd-1499-4338-a14a-8229aaf5fc58\n3a351bda-2beb-400d-93d2-d1ef09e10823\nea4d55d8-ff76-4c35-8b05-797948748fe5\ndee584a4-0118-454e-b05d-25c7bfacfa2a\n7f9091ed-5810-41d3-8a09-ae35fc51a823\n4bc403d1-7238-4813-a94b-7194d6bf4ebd\n6fbc38a3-c8d9-474e-8e4e-711a0ded1a67\ne3d9a2e2-30f7-4881-a0bf-9178bac58409\ncb09f584-e06c-453d-8449-4b8b0f71d8d9\n9d49a126-9271-47e7-b289-5d1b3eb6db2a\n40dadd23-a6b6-407b-a92b-11275611f032\n024e109c-49f6-4bb7-bb16-d412c3e594a2\n4dc79e62-49a1-4f04-9e60-6a1745c9a18c\n681fefef-bb38-40ee-a833-6e5d68ea5664\n2cab2019-02af-4606-a9f0-107659a651c7\n2fffff4c-132f-4dec-ad71-3e204636fdc7\n3083381d-ed80-424c-8c74-b87a1f3fbe34\n89407c55-7c15-4698-ba7a-5255e1981e61\n0a49c27d-b76e-4bab-938b-de2718aab71f\n85d89bf8-43b2-4993-ab81-6ca485468bb2\n854a8440-6a9c-4d0b-99f2-7c8e28c48e5a\n1a54d12e-bfa5-491d-b954-c41da300b73a\nd545ff68-d8ac-4836-b17c-0fcc71ffa1f6\ne5634c0a-72f7-49a6-97fb-3dc22775c43c\nf4940365-3a6f-4ce5-a0f4-c5af82468d0f\n7b422368-f29e-4493-a4e7-ed1e32e639b3\n1083124c-7c3a-4f02-ab4a-253ea64e0a24\n07ff4534-d52c-4384-9c44-40bc8641e849\nec99148b-522d-4d08-bdf1-aacf9ccf8873\n2258e708-a7b8-47f4-95ef-033545e470a9\n11630dfc-0d00-44e4-ad6d-2c9fd8d8fd91\n979b5d20-0086-48f8-abdf-5a93dd4c7afe\nd70fdf2b-b97b-4198-b136-3718420e5b6b\nbb45b80e-8074-4ffc-9b81-96b3f607fc25\neaef2559-6692-478c-8e51-85d43539188e\n558736d2-8c11-4631-8e95-79e9ffa25d76\n65fdab51-4542-4d63-a9d0-0ba71bba8264\ne47f5c90-970b-49ef-88fd-a7c609c5b1b6\nde1b5622-51a3-44ae-ab6a-c93bc7df2c75\n9c554305-3cbc-46be-9a7a-68d52469507a\need2a705-eb13-4468-b129-e620be358f27\na6683f00-46a3-40d5-8a03-fb219096a135\n5b4a6a0d-f071-40ed-a711-65e208133a9e\ndec0fbd6-f81c-4e5a-b8fc-9122d4be5848\n0d769c80-b72d-460f-a855-c232c20808b0\n6fb9475a-50fe-412c-aacb-402a31389c9c\nf7cbf28a-8d06-4c98-babc-33782ed7e5e9\nffc25599-28a7-4c53-b17b-204ea9d78444\n2420d2fb-574f-4a6f-8647-73280c144b69\n1f1e19c4-f933-4775-92f8-05ac7ecddeb6\n8e4d3f27-47ca-4d38-815e-85bfbb01ddd2\n2331f913-901e-4212-824a-61af294c3491\neca3f513-d215-479d-99e8-3ce6eff4f0c5\naabd807e-4a45-470b-8544-cae01574adb5\nbe6aa6e8-0c1b-46b7-b3e6-8b8ed196c59d\n35677114-aeb8-42e6-b5e3-35ee7a472cf9\n9c19a3dd-39cc-4284-9e5d-668462132a53\nd9852e9b-a322-4da9-806a-87fa11412aa5\n2b52ca4d-7630-4183-9f43-3cb6370f7c33\nff820f33-dad5-4ade-b31f-b00e4c1b94ea\nfaa65006-316e-4704-8eeb-f59cc3dc0fce\n56677d06-6295-4aca-ba22-e9aa7e782525\n582423a9-6310-4ef5-ae87-fcd0a8c5e8bc\n8db4285d-a237-4b4f-a9cc-f5db182985b8\n7aae5f6e-0de5-482b-b41d-af5385966a7c\nac2d9181-d960-46ef-a7f6-59c588538168\n3b8172f8-794f-4b08-9b3c-b92bc5c27475\n035eeb28-8df0-43f1-8156-8bdb1fcab6cd\n72f1b2c8-c3c3-4fc2-aa7a-d6c884cc0002\n80dba685-3382-4ae6-96d9-ef33a0b0c2e4\n75573795-7519-480f-b59c-ed7f8b2f5f55\nd209a946-0bfb-415b-86c2-5ccb83d97374\nae0c14d9-f9c0-4b7e-8c4d-54e902a297bc\n00d3e8cc-1f1f-4fac-97af-de7665ed139a\ndf3ff3b5-ca43-48b0-8d36-e84a27b66aa7\n0e0cb04a-45d6-4582-bfbd-eb2bd28b0e2b\nbde93631-db88-4126-9ed1-3474222be4af\n9de902b6-8887-4f37-a962-649f2f425a71\nd802f3f0-825f-4ead-946d-14a30a4a9a84\na3156bc8-d44d-4260-86d0-9c18c3783aae\n8d5429fa-58b7-43d8-9c84-72299993ada2\n371b196e-f568-4526-9df7-ddbce149f19a\n18f106f4-4f26-4403-9198-0c3db2d1919c\nb61095ac-ba68-42a3-90e6-b6a0d7aee869\nc6ae34e0-e247-4b02-8bd4-52a27d0f9c2e\n6df59e32-a107-4b27-af78-103bab0fe04e\n57c7802d-1022-4f53-af15-0b518ec72b08\nf458206a-2cdb-41ba-b20c-d4b103a7ea2e\nf26763bf-3ede-403f-92d6-69f33faea730\n913085b3-b35d-4806-a601-3774e01a0aeb\n7116e36d-a3e2-4f93-8834-1554432fab52\nc3184d48-2341-4598-a726-4e0503bb7525\n6c3784a4-2fe5-41db-8203-691c0ae01e5b\n7c054b07-fd95-447c-b656-29ae93fa1a30\n3eae881b-b43b-4e25-86e5-d53a7b093b13\n005e5dd3-6437-44ef-bc48-b76c8cca2a9d\nc0502f91-7439-4456-bae1-4f211f3431ab\nfcf44deb-8c57-4d48-bd06-dd4c5abada70\na6ec7a51-3939-4318-8240-e91c72350d14\n6a7a7ee6-2f5e-4fb0-aaf0-7dd1bf9d63b7\n46db82d2-e8a6-493a-a85a-476f3664a6a1\n4f70f15f-f4ef-47c2-9665-3d6b6242f55a\nb8fd6ac4-e71c-4254-bc96-86f3de859347\n776a7f75-42f7-443e-8d78-4af7d40c519a\ncbdbdf30-eb61-4eba-acfb-4847af7ee5bc\n23ee5f66-ebc6-436f-93e9-e89a8e9a33af\nf70ae3e1-e681-4455-9b09-a00c2d588434\n446bdf41-b72f-4718-b978-5a67f2fe2799\na3a4e1f5-d436-41ac-b60a-c1d0fc866f76\na59a22d2-dd22-45fc-9331-e51bfa700625\n7439693e-e8e8-4847-9d7e-5e760cc71975\n23736d36-1eb4-48ea-be92-8cd46e243a5f\n6e5893b6-176a-4e8b-abf3-498838d6a6d0\n99ee203e-e429-4e82-be55-265d8597db13\n39142368-4ceb-4081-acce-a647b994e02e\nec3a9a7d-f2db-4ea5-be7d-01bbbb403ef9\n3f43d5a0-e1be-418e-94d9-e2d1850c02ed\n38c8c056-834b-4771-bb06-bb30a706801a\nba70d3f2-ee4f-4457-bdc2-89d37fbc3984\nca0f19e3-9c21-45ca-887d-fb94b61ff4f0\n01675079-adee-473c-ae30-5b2b7052d3e8\ndcbf65ce-4e9e-4186-ac86-2b9ef912d404\nb0492b7a-08e0-442e-8b6c-c69cbccaeb2a\n976a13da-839b-4d19-99d8-2449dd247a8d\n94eceeff-7a7f-49ae-991a-838085663acb\nedca5846-9c3e-4f20-85d4-02da89ede824\n5b0d49be-77f9-445e-b393-96845eddafc1\n8a9c5e9d-aca9-4892-b4f2-8193aa70504c\n7cb1f0a4-ad68-4325-a90f-04dc9315882c\n641a60c5-bc8b-4b73-8d0b-9e22d4dbcf92\n29c1ae14-97ef-4c7a-b120-fbffb4757f3e\neb7c5fb2-f0c0-4a39-b5b4-1184b2eb49ae\n0696339a-2c3a-41b6-b971-836078d00e8a\nfe80df8f-4a7b-4cd9-bcea-51b4674f85e1\nd11353db-868e-4d1c-9567-6d867e6deef7\n9a544b71-a64b-4ae3-a63b-8cc3cd227909\ne9210aaf-8103-49fc-b957-507f06abd075\nc4631da2-0b0e-47e9-843c-cb65b61d811a\n48f0385a-f2da-447e-a0f2-b1a40d1d2196\n040dd9f6-d0b6-46f1-9a96-9317aa6127d2\ne8c3251a-b275-4e6e-b4d9-b6ea011ebc15\n6ac80105-d161-417a-b98c-cfb0aeebf83c\na24b0449-ce7d-443a-a0a8-d20831530517\n78e20528-8dfc-4be7-afe3-741bc08812bb\n18d1af33-7d58-4944-88d0-183a18d4e629\nf485204c-e3af-4397-ac0b-2d42a3734971\n695fa780-6188-4d79-8272-044cf7ea9e73\nca1948a4-6a04-4f50-8a73-2fe36df270ab\n815ddf8e-c4a4-454c-a1b2-5cb04f96f219\nbfc58262-a0e7-4072-808a-53d5a6cf4ea8\n40a2309c-9aaa-45b1-9dce-5f034fe5a330\n387d1274-2062-4b92-9707-495b4c8ebc17\n116021bb-e97c-4f15-8612-98237c2511c9\nbc41f1c4-a5d0-4edf-9fb1-c432a6b8cccb\naa133411-04f4-42a4-8e35-77806ea8f215\n491a76ee-0904-4596-bd5d-d56e419d8564\n316d1f06-aef5-429b-ae04-f5979689b56a\n6e8469dc-b642-4f24-96a6-86f245326643\nbcf3156a-ef61-4086-83d4-781f1ef4af33\n2af82c74-f6c8-401b-bc0a-9091ddcc8bad\ne7a6cf6d-e623-41ad-ac75-5fabb3a4bc4d\n6fe22b97-3aa7-4cd1-948b-ac8ff227f9b1\n8b1c5388-ec87-4398-9f7f-e39a9ef7092e\n31a30a52-7984-4370-b67e-d5e862dc3ea2\n2697f6d2-872d-41af-b92b-9388ee81db23\nc44f30ca-01dc-4088-a965-58cbf9449917\nbc79192a-b130-4fae-a898-2a0ac45e7c9c\nec4d5ada-2fa2-4f91-8a94-a4af0a35ee23\n57d7d700-b205-4f9a-9041-6dee615cffc6\nd3fa05bb-4c79-4ee8-a89c-188e1b2ca830\n08304494-be48-4ffa-b98f-901653f16fb1\n59d9c2f7-7181-4f30-bb1e-693caa83ec7d\na7840654-dae1-4aa8-ad43-e2acef4a7484\na076dc97-a1a2-4b6d-8c3d-5c020b21d502\ncac5f66f-008c-4cbf-b964-96ec5a1c88d8\n838380d2-21a1-47c2-a681-e55fee7dc572\nb9f39eb3-0084-4ddf-b050-74ef68c20584\n2dc0e17c-8b82-4423-bbcc-df004185cbfc\n679dd591-785b-4aec-bcf3-e12be9e1af4b\n3f6717e3-32d2-4d95-b977-af62faf4b7f3\nc7c40702-522e-4812-b29b-ed5e77d2443f\naa2b2b27-c5f9-4ce7-8f3d-1cf7c738e43c\n22e18975-3b20-4ad4-96f3-49ff3653ed5e\n7c641673-0f05-44fd-be36-cf13996c74fe\n8e21c56b-e106-4a1d-ac74-5f1477b9b4b1\na5ecb73a-5730-45dd-8588-d6a9942b3af0\n1a69da2a-ad27-4c06-bbaa-ef8431b25bba\n17971c24-1915-45c1-957b-b4237c20c483\n181ac313-e601-4a36-830b-313c3e80d892\nc1091c6c-08bd-44a3-a1d5-e6f41887e1e0\n46df8d8b-f298-4224-9b78-1da29dfe2f4d\nea13c7f8-815c-4782-80c1-14bbfe69ad7f\nf5274b44-9995-4c9c-905c-ec0ce0d41c30\ncff5245c-8a46-4fa2-bee7-a1686cc4f378\n7f65ab57-9391-45da-a1a3-43d81e1a808e\n1b5fc7c7-65d2-44c8-a224-33b50d1d13e2\n2e97b0d0-9c93-4a66-9e02-1ec4bec37106\n9a65d668-50aa-4afb-8d30-c1400a33fdc3\n5e5f9541-20ee-4fee-a761-5446217bf99c\n40185920-45a0-4221-a548-7cac53fae5d0\n1f39c1a3-3d68-4693-b577-9596768eabbf\n8b009bea-e740-4b67-9a3e-6c2b6821fe57\n5daaf8df-9ef9-4662-949f-49655085e12b\n774be905-fb68-48cf-b4d6-a49a682eb877\nf3a3884a-f390-4367-bdfb-ca27bb5b0bb0\n97716c14-78e8-4988-ac70-afb6c946343d\n1ef14104-612c-40db-9f91-53bc2dfe8671\nc47a2419-44c1-4cd7-ab0c-51c315211544\n8a9e9a68-ccc7-4bea-b604-ff40b9d49e86\n3d0892b1-29f3-43ae-b4d9-7b5e1db8941c\nf8ea2324-e57d-4722-9ac2-793d95c34e70\ndfe959be-01be-4590-9258-cd46cf9e55e2\nb0906cf5-da37-4a2f-9dd4-c4d42512b067\nc30537a9-4592-482c-bc8b-6efb905746d4\ne9caf5ab-c838-46ab-860e-964299060416\n61c1071b-05f0-4ebd-89c7-f9f4168f941a\n4f6473da-e0dd-4cf1-8645-854eb3781fff\n1e216074-ce14-443b-97df-7e9155a6fc8e\n0bad3c9a-5e70-4d5b-98d5-89d83e3ae363\nfb307c3d-6859-4687-9da0-6a11adad8517\nf475145a-6bd5-4c04-9fea-2822718255c7\nb33da0c4-36d0-465b-9746-6a0c30aee63e\nee037a64-272e-4966-bef9-94f219ef1351\n76e3d370-468c-49c3-b26b-b9025cf4a1d1\n593776f2-de27-4d92-9d7e-79dd466b7cda\nbf115089-f320-430c-9657-583a555fbf69\n44728a77-434d-4ddf-b411-17cee39ec0b6\n2df9f140-313a-4a45-82e6-4f25a201e95a\n64333140-db42-48dd-bcb9-be9eb56af0cc\n49842007-4c70-4016-ba81-bbd843ac825f\n86c1d139-d576-4e25-a928-d3f42e38ee1d\ne4ff25fc-6662-4d36-a3c1-01b475f85aa9\n4ce06315-4a6b-49a8-afba-9424184795ff\ne7a77675-633e-464b-ad68-fbee08eb46b3\nf9852024-2b63-4d82-8b38-9a0f726564de\n016930d3-dead-4c66-be38-5e9e4c06ae45\n93a0e1e0-7c38-4e73-b211-69712aaa5034\n31926486-fefb-4894-a89b-5bbeb10879c4\nedc587ef-48fb-4271-8b03-a8569937525a\n48f13d78-5e52-4652-947b-abc29a901bfa\ndb278268-c06a-4e64-ac6d-b35a9a7f09e0\nd0183f35-a915-4161-9c3d-d46d751c5a9b\nebcdc5d8-a545-4d12-ad78-f093bfadf228\nae1d4c94-f0e1-4a13-a2d1-91b441b15919\n274256d6-6ffd-426e-8dba-b4df9e0bc264\ne8452ce5-8868-4ff2-ace0-5014dd221dd8\nd1922e77-f08b-48d1-a0eb-6e7edee02f36\n054d38e7-6c3f-459a-bb67-847faf974d27\n5766c9af-7bf3-4145-bc3c-e6227b11bef0\n616068f5-4515-4d96-85ee-09402e97b564\n4a5fe56a-fe1f-4438-a899-6db4568763eb\nd8755149-552e-406f-bdc1-2cc16b90c249\n63682129-c379-4f4e-b06b-6836ac98351f\nab9e36ce-cb54-4e29-b2fd-677c27ef5e11\n0b7334be-4bea-4fd6-9ade-142518a639a2\n5646fcb8-da83-4ee7-8387-f8e61fe55837\nf8e8eab3-27c6-4831-a87a-df34c935fd57\n655d99ef-7a6d-46b0-a7b8-c98acdd32e57\n2cd51165-b0c3-4f56-bd3c-e7bafa079478\n289b7924-e5d0-459c-85bc-b0c54567e65d\nc9664d59-da88-4541-ad94-f9f263f03aaa\ndf23ea93-d0ad-4079-98f1-0ba08f6bbd58\nac57b29f-0b8d-46cd-8a9a-f85a10fd91bb\nf67b9c39-db9f-485b-9592-934c07396736\ne7014436-af3c-4701-adde-9cda4c5fcc1a\n0728b390-8953-4244-9047-547606daa172\n04841ea0-5c0e-4886-93e2-508bef13462a\nb9453dd5-8c51-4599-a871-d15a8167dcaa\n3ee09ed0-335c-489e-8924-e8526544b298\n002df799-ae80-4a79-b069-b5ef4ef577bc\na938e5b4-8446-42c3-abbb-8d453f26b9eb\n21d90a86-f61a-470a-88fa-316074127647\n1b35ceec-186c-4d25-8bf9-d01447b36fab\n92c76489-50a8-44bf-8f06-89bc0461a687\n1a53b77e-5e04-41f4-82d7-8ce52420367e\n36975679-b16e-4dc7-b935-dfa23f172e57\n3471b68d-8a89-4fd2-a733-dab5c8449ec2\nc600605e-74d1-461c-9d33-2fba7997528d\n450454db-89b1-4364-84c0-0a839e904746\n45ecca2b-340c-4338-a90b-db380868701e\nd4d4b28d-88ff-4657-bd6f-f9e60235c469\n14d99208-8521-4d18-aab6-99bcf85f9fcf\n3cb9a44d-394b-48ba-b178-0fbd5a80481a\nff910f75-5e63-4b02-a083-e27d51ed2ebf\nf35b4df6-865c-455c-a35f-82221dace275\n5a28fb3d-4066-4ca9-8f56-2bf552b1c235\nc9ee224a-4a5e-4618-aada-b153baf3ef77\ne314d2d8-d492-461d-97b3-888d5a24b7f0\n34dadb4c-172e-4167-b661-8a209b69f6ad\n85e7af16-9871-4f08-a9ae-73769f564c87\n0ae7af60-f2aa-4bf4-9a3e-f061dbe6ba85\n6d8d5da9-5050-4fcb-8198-841deb8cbc77\neac32555-1a5a-4983-b9bd-4ae576d88fc9\n44031315-04fe-470e-b8ac-517d03f89d0a\nfaec0a43-72ab-4ef2-b6da-21b466352da1\n5ab027b9-5b3d-4513-8dce-833bbd50179f\nc844d1f0-8020-47e8-80b5-1c575a1a576e\ndd0c9ca2-c256-4c1b-9a27-33e495132c23\neeacdfb4-46e1-4cde-81dc-52f09392b147\nd8036102-b9ee-476b-adae-8af66f8a34d3\n7267aa65-374f-46a8-b82a-7ad9cede4282\n9d31fe9e-63de-4deb-ba4f-8cf0ac90e198\ncaf3f129-938e-4825-8d6c-f32841deb812\n7874e840-165c-4aa8-988a-3f54ff32014c\nf32085d3-adb7-490a-84dd-5dc324307b6f\n2abef462-cf64-48ec-b583-d6e14822a9d1\n9211a35b-c721-498a-9370-0c47a74f1652\n438a8b60-ea27-4ff5-8c83-43521c594270\n36d8b3fe-4574-4b95-9de6-5898bdbdc47a\n0be8fd0d-4597-4763-9026-f1302006c6cb\n52fa7cea-e2c1-4c13-8221-dab925a09f4c\nb8414d94-11b9-419b-aa1d-0b3e97bb6448\nbf3b3431-eda6-461c-96dd-dfa2a58c8e2a\n183c7ffd-a29b-4030-a35b-67d2632238c8\n973eee6a-2a08-482c-b816-d410cb18bdbb\n693a522c-1041-498a-89e0-c50b15b2652b\n2f7f398c-1c6f-4c7c-8312-b725eb11a5b0\n13089251-2c22-4a5f-8e64-be30b53d43d8\n61c327c2-c182-4271-be8c-94372d13d454\nf7081e67-efd3-444f-892c-8bad8c59ddf2\n0886950a-5caa-436e-bf76-3307eb369f23\n40aaedcb-88d4-4921-9b78-bf2927f5896f\nf10417f3-2279-4f3a-88ab-10d6fc163ef8\na7241cb7-26d7-4379-aad8-03cc198a9ca5\nba20ffcd-6a3e-43ae-9dba-23f901540911\n54a08b76-5489-491e-a2f8-f1953bf208d6\n15f9da93-4565-46b0-bede-43a8c1ba8eff\n344eb619-decf-44d5-8bbd-226ad41fad0d\nefb14181-39b7-481b-8db6-1560d984c595\nb66d3d20-3e92-46a4-872d-995f63e777d6\n1334479c-7d31-493b-a1b9-dea2ee182c73\n30c9bd0b-7777-4a32-bb2a-ba07ebfe3ebe\n28d31b37-7859-4b77-a3a2-0a0550d7cd6a\n88df22d9-8043-4bf6-bf24-bb1107425a2c\ne1e8ec97-a909-42b6-9033-cbcb4ccdaf31\n2817ff00-ce9d-45cd-bcf0-f911a6bce11d\n3aa28649-ddc5-4e20-bb8c-8f2e47676ded\nbb4653e8-99f3-4b75-a7ca-703e16004ccd\nfe6fb713-13f7-48cd-9184-91e607de8430\nde23eebc-6757-481c-b454-01ec8acaa20c\n36d76a2e-e8d9-4d8a-9389-edc40b72fae0\nbbaae472-9983-462b-a9e8-2c55b24d0c3a\n69b67af8-e4d8-4982-ac1d-4873066aacfc\n3363b1e8-cf21-4eb7-90a7-bb1d803ab8e4\n9fdf3726-7b88-4563-87db-04e1532dce58\n8b82d223-a5fc-4336-b9d2-2df8bac2360a\nce0ead92-467b-423c-85b3-7e5cc3cf2f54\n916c0b8a-813d-41b4-b69e-ba49554e7b84\n454ef79b-9619-427a-9525-7da1fa48e38a\n89bb8f2f-c792-4aa5-99e4-20d1fa69f494\n884bb2e8-5857-4543-85aa-ad4357bff769\n12b7d0d2-0bdf-4578-a2a1-0883e106855c\n9a2c8cd1-92db-42f5-a352-5c6aa2440ad7\n27195c78-7422-4623-a1a5-27f01301bffb\n494ea0c9-8784-4ba7-bdc3-94551948b11d\n6292e5b5-ca0e-440a-aaa0-d3bb5adca6dd\ne681e9db-f97d-4f4a-8321-caecfe3fd494\n7d814013-4610-40eb-85ac-2c67293a5393\nf3578ec5-f128-4617-b018-a295501ded2a\n73655f82-5526-4bb6-bd53-297e59638020\nf36d7244-e16c-47e8-b737-11db94847057\n28ea652b-29b4-4e0a-bc92-eab3be63c6c4\na5c4a5f0-030b-4293-8b2c-8ecb0c60aeb1\n45897549-9219-4064-bee5-0f75d6da9f39\n3227dc2e-ad11-42c9-b727-e85116904e66\n225e5cd7-f6c5-45de-ba50-b89e245c63e3\n7ca4e58d-3f24-4642-b214-a9bc1d46522e\n9030ba2c-5557-422e-8cb9-6cbe38e79af0\ne4fde39a-ebb9-4b1b-a69d-cb6e31282c44\n91565d0a-4ad2-4333-a5b8-e7fc3e3d1f57\n47e63a14-63ac-4c83-83c2-d32fccd04b77\n11a271cc-0166-4ece-8e31-d6e2e4b547f0\n952fd9b6-4d4c-489b-9a51-1ab1e9a1ac11\nbc2adb5b-34cf-4fef-862e-108bad2c5af7\n334fb1fc-d8bc-4af3-beae-fc3dc1f56635\n06f7a746-4970-4130-837e-14086b3940cc\nca56cafb-9517-43e7-984a-5251287099fd\nd18c219f-0115-4150-aa65-5f088c66dadb\nc7b5ecae-e966-4b29-8eed-6e1a510cbe42\nb2e8aa64-0f9d-46e6-b1ad-6a33d2891d55\n91ad5c05-9aea-4095-97df-969218abfdd5\n889798c3-f1f9-46a3-8d3c-5ec27c458090\n7865b6b6-ecdd-4349-8d64-c310bb08f38c\na8b541fc-7b39-4cf3-850f-2ad3699e380f\n1dc1a16e-2334-493b-84fe-5a06fdcf36ab\n28d182c0-d10a-4a2b-a3c1-5f38a83ea3cf\n21da08f0-cb26-473f-a2c7-32e33be9218f\n03d28600-cfb1-4959-8173-337cf53a90a8\n10dd1cb9-a54d-4bd4-bedb-8b9d281c3573\n771117b4-0dc5-4f81-ad34-f1bb88c318c8\n15e8de67-b603-4e35-9906-72ca11c85416\ne6c5ae5b-8347-48d2-897d-6d525dadd721\n68bbb0bf-e5ec-4b21-b951-e5ef02f1a918\n4b4449b9-110f-4a4b-8f2f-1322f8dca7aa\n0ab1116f-c328-4544-86f9-305890a4ad4b\nad7e9460-5dc8-48cd-9d38-b4d1a639bf33\nd5514fdd-b15a-4011-b132-d21519ffe766\n6fc57f5c-64e0-4490-a3bd-fc71754225ff\n77b70628-0465-4804-be26-611a7551db4c\ncf3e8740-2ef1-42a8-aa09-cf3d3d5a9324\nfc2a69ae-4a14-4245-ab06-a91ebd6b4b77\n4aa95f78-fd11-40bb-b7c0-1c82e345af3a\n9d77f741-6556-4749-bf15-c5c3fab919ca\ncf2a637d-9448-4b2b-9b1b-923c3bead357\nd323ad57-7e6b-42d3-a970-72e5dd0f5f2f\n1b1e288d-ee43-4597-93a4-2caeda1582b7\n9d4f974b-5a68-46fb-b341-cca75eb5df64\n635b5226-ffd3-448b-83ce-59feced40faf\na098fce3-a815-405a-b095-90ad4c9fb737\n5d36c536-929d-42ec-a672-0da868468d96\nf1c8412d-52db-4296-841d-9e15e1d108a6\n8bb2bcc6-d54d-4184-8b30-7d829ca87385\n46666e2d-93e6-4139-91c9-dea582a0cdcb\n6dd54509-fa70-45c6-9d15-c1caf63d69df\n2c0fb968-7acc-4eb5-869c-5634ccbd127a\n3c30041d-f813-43a0-b372-168532d19e55\n529ace70-3b12-4598-8856-e33dbb25a41d\n19ef3ac8-09f4-40a1-9956-4b5815fc4f3e\n3e86b26e-232b-487c-8602-b3846f7d52b3\nbb44608a-b3b0-4c02-9368-c6e221d439b6\na6d402d4-cba1-46bf-8e3e-cf0bfd588a68\n5ec678ec-7f23-47d9-8555-d600fc653c9a\n6f5f05f6-1f87-48ba-bd9f-5ebcf5044381\n5f3572cf-6181-4bb5-857b-474b8b5cafd6\n5736b79b-de5a-4f18-b8b4-31989f68f6af\n9347ec6f-ba1f-4493-b247-b806da69bb1b\n9158a208-7133-489a-823e-1ca81ebc701d\nd98221f9-ff25-47da-8420-664c56f3c69e\n48a55e07-1ac5-4634-9079-5c4189596970\n6ef9cbed-c614-4f7f-953e-c27b5d122332\n213dba00-a35b-4541-bcfa-9ee727d1e37c\n55a0470c-c03a-4b84-aa75-f82e98457cd6\n74cac471-2b01-4697-9b06-33c024d32f23\nb6bf48a9-ae55-486c-b340-a46a26b2245d\n063b3ed6-1a42-4dc8-909d-c890bef7925b\n4145b435-f56e-498f-ac54-f2f10e858668\n63d92063-7555-492a-a72d-6b1cc360ffef\nbe0c53c2-37af-4d2c-b960-2a96f8690ced\n87ed9ff5-a65e-485c-abcd-f94bd2ead4ac\ne1dfe9c3-3cd3-4302-a611-d896a35952f7\ncbdf5c70-ea02-41e2-957e-9d286417c782\ncb8a9dbd-339a-4684-a895-1422051bc1f5\n38e05c93-a47a-48e1-99c6-e3a03f6ea075\n3957cec0-786c-4f6a-a462-8a0c351cc5fb\n2ee39042-01ca-4d12-bc5a-ccd6e11197d2\nbfe266d9-31fe-4c2f-8c74-bec09c153dd1\n1e6ab472-4278-4a2e-be99-bb5e367a5820\nb90128dd-f0e3-4748-b3cf-f3596f269f03\ndbdfb868-e9f8-4d6d-939d-420b4b0539c8\nc0bac787-81e7-4049-8374-bbb804825fa1\n5591815c-79e0-4a37-929c-0a3106f620ff\n46f9951b-185a-4a7f-944c-b1269b6947dc\n3eeb2ca6-3dd9-4bff-9758-f4976acb4cf9\nb47bbf10-1faa-402a-a34d-0f2f66b8544d\na4e3251d-b8f5-4589-a4b2-c83183f69a0d\n932c4cff-6d00-47fb-a3ef-45ca49470f90\n1f20692c-a2d6-4e87-8219-e027a44305d6\n9820ef4e-d2c6-46c0-91d9-326ca3587db2\n4a9445ed-50d8-4e96-9588-bd96768f4c6f\n16626bd1-bcbd-494a-99f8-fe47b066e129\nd42509ba-7bfd-4a8a-b3dd-5219c7ad585f\ncc9c64fc-c7d3-4256-95a9-fc43ec3842a0\n177771f1-cc47-4c92-b917-59f8d4f0bb67\n743dbbb9-317d-45db-a65f-eafb8a1f1b56\na8f3db7c-eb42-442d-9535-c9efe2d287ec\n8ffe1f76-cb77-44af-8938-ee5db765ba1e\nb0838fe3-62ab-4e48-9839-303f49991e16\n537f8be4-a2ab-447a-8514-a9ea4056ecb6\n0fc67501-648a-432a-907d-5e0481dfafa9\necc4065e-336b-4d23-b161-02fc75ae43aa\nff2a128b-43ef-4d4c-9bd4-3876bbe4b3b1\n92641922-b229-466c-b2a7-98f05faaadd1\ncecc65c9-db24-440a-bec1-8680378e0583\nf0f8c954-03c1-45e1-b7a5-c9680b66f55a\nc7d6b778-22c0-4e77-8701-dcf70c789b88\n535d1a08-d629-4ad7-9be6-cf682c2fdf57\n42658303-cebb-407c-8b7b-553f98abf604\n305be97e-349c-455a-8292-cb6cac27be35\nbd96d476-348e-47c1-8cae-c58cefdeb0c4\n85d97a40-012b-4881-9b5f-b5e9235a8734\n8d4279bc-1d2f-44f7-a803-04528d593825\n0b4eebb9-02f4-444d-9997-29b9c7b88f83\n4984a64e-e404-4512-8a42-64d270dd4fcd\nf3690581-d6b8-4ec9-b521-de925bc64e07\naa03880f-9751-4dd3-bae0-788b5e5bd116\nd99663c2-a509-4534-ac00-589b9456533c\nc371622a-f20f-4c3b-a20e-b14786952dd6\nf1bea44e-a02d-4c87-b71f-b290527c3f82\n7340f38a-30fb-49af-a551-b75938f0c4fc\n1f9d696d-a3b8-48ce-9c26-7ee424a5ed45\n458e96cd-b1c4-4ae2-9a3c-31edd3ee5c89\nff6588ce-294a-4da0-82c9-672a5c80fb52\n45156255-be8b-426b-9736-c98de2ede2dd\n855dc3d4-3c93-4420-92dc-c52225ec9cb9\nfb666f31-09a8-40a4-9b4a-c985f32b6994\n510f97e2-aaa6-42c0-a257-d8abd6082223\nf3ffc401-76c7-4e15-a352-4b5616f151d4\n6c4182c8-1989-45fd-a956-3f2028159bb9\nfaa1e143-a4bc-452e-973f-985753ef88a0\n75e7b79e-fd42-45c2-9a73-08a3fbad904d\n811755d7-673b-4eb7-9d09-57dfcc7811e7\ncda6570a-110c-4eda-b7c9-6032f94d1b1d\n514b709a-0569-46a5-a4de-7baff083f8d9\nef618241-3b17-430b-86e9-a68e37f2dcd6\n3e71f071-976a-4595-bd97-b8eba70522ba\ndcb8d12d-894f-4544-83fd-5f71b6aed20b\nfa3e7fab-301b-4d73-a778-3b867acd21f6\nb39379ce-6a9a-4938-a2e6-68e8b1b24cfb\n8291a2de-66d1-43e1-91fb-8fbc6eee1dcf\n9eaccf9c-edb8-4bf4-8ff3-8d282fbb3943\ne1712bae-7acf-463e-8ea3-0edd1ea10c85\n6f2db68c-b56a-40df-b5cd-1941da215a06\nfb2cd15f-0300-4da6-a70f-0659050a8f22\ncbc7e8e6-6ac4-42e2-872d-ddcf6130aab8\nfda3cd9c-b7aa-4790-a96a-d5fbbc35a179\nfb1d549b-97c2-438b-8bdc-6f7cba0fd7a6\n9cb97dda-7178-4e5d-8f8a-ed379562e2dc\n41b5f18f-f3e1-4ae1-97e2-a3511c551570\nc7974616-c74d-4f61-8d1a-d195fa7d4b56\n57146fbe-0a45-4ee5-8ff5-aa0d0444ee7d\n728a78e7-319a-42f6-914e-dfef958080c5\n7636cdea-c32c-4f6d-820d-596a5bb4a548\nbe647232-1275-4742-97fa-c874c72fd6a3\nf51a2c5d-85e9-4e8a-83ef-f02907a5a448\n7b5eb59a-f227-4baa-85ea-f1752b3d5b90\nd0015922-01c2-4d2a-9b62-aab7b9ead571\n752ec903-6e10-412f-a740-1cdf499344dd\n4056dd0c-e4d7-40ce-9905-7c28f25c30ce\neb5e38f5-a087-464a-b9b3-8be29467e01b\nc395660d-34b9-4770-8b89-6f30ef467949\n1c6a1794-e13a-4474-977b-5c81fa7d1dbb\n33d16763-07f6-4c20-8925-2d1f6592ee16\n29ffc0b5-7d68-4224-a220-bd912e35db7c\n0cb2230c-a697-430a-bc1d-539ec90ab8b5\na6dde2fb-559b-4e2e-ad0c-0296b1dfcfa1\na6ce3818-de46-477d-8c9b-454b4c6c08fd\ndbdb4848-79a2-4fcc-b7bb-3241f8cf33ec\nd51317aa-c494-45e3-9870-1c0fb5b3d06a\nbe632daa-4c6d-410a-a111-467e9c3b2d8e\n7885d2f0-3bac-4624-bc86-bebdbb8030f1\n5d365352-950a-4809-b8b9-2a95d6b2f74a\n4b1e5d51-11fe-4822-83e4-62a8f7fbe12c\n9a462c56-fff6-4581-a5da-06b291bd08cf\n9501fd3b-26a0-443f-91fc-031b79d04d0f\n896b0531-b2e3-47bf-9c0d-3e847bdc6401\n42e45692-8acd-4233-aaf8-23130785737e\nc204c9e0-6041-4f8a-ba60-d2a2dcc77400\ne69e5622-d5d4-4156-818f-36271183470f\n8e008396-9b97-420b-bbb2-1251fb067bba\n40be5f17-1e90-432c-b84a-c695e933b8ea\naeb387a9-43e4-4031-a5a3-1506de947817\n762a9988-be49-4ef0-a73c-03dfd2d57d05\nbe68c991-b24c-42a5-bfe8-fbe827ade19f\n27cc6cc3-7266-4598-9e0b-75dbb1cdf590\n3f3acc48-4ce0-470a-8850-2f48b0064301\n61547e6e-aea7-4542-b18b-1256686f8f7f\n9dca31d0-4978-494c-8ad0-38f3effcaeab\n1d9e8812-72bb-4864-b314-d2275e5ef893\n195b1174-1cc5-43a2-9ade-94957975b443\n7868a6a9-09c7-4ceb-b563-c569ed335a06\nfd418bb2-2376-4c01-946d-954697a11e72\n5b355013-2898-4dc5-8b1f-a47530cdaf6c\nc358221f-fb76-492f-8be3-9a5be89cff5c\nf83bd91b-686a-43f9-b621-cfbbe3e7af6d\nd2e8afda-be87-4420-ae4e-2a00707cb2c2\n67a2dd60-03a7-40b4-bc1d-a1826daadc19\n0a9e30f9-9254-4370-8f84-914aabf19396\nc4d2fbf7-f1e2-4461-9c2d-f7f184a863b3\n4877ecf1-4b52-4d8e-8814-22ce889c0897\ncba5e09a-d161-420a-a030-882b265375e1\nf4ef5207-5ff4-4de0-b201-99e34969d529\n804b7e5a-388a-4f34-bc40-13a43feadf52\nddf597d8-08cc-4d5d-bf9b-f85198f1d99e\n576cd53f-3dce-47cb-a2f0-7b3a5fc3dab2\n9cd287bd-ebdc-4cdc-8066-2a805f15089d\nc6883847-441d-469a-8f4c-c7fbffe92ab6\n667c35f0-7893-401b-abaa-c7d1352aad15\nabde2c99-9b67-48c6-8d5d-f6454479afd6\n5ef79c09-134c-42ac-b435-a9a588a5306c\nc12f8afc-ff62-48e8-83f9-68b416c85c9b\n1e027714-8493-4982-b64d-b34a3a26d914\n8a53630e-4d7f-4390-9062-6806079f7c8e\n5581bd5d-4b04-4e48-b939-8801712d7f74\n9a3a4d37-207c-4ba0-8cd2-1195f322ca83\n372dbf22-133f-4c56-b34c-f0477420ac65\n9ccc0979-be16-4ff6-bc5e-7cc1829777fc\n15e5c519-f279-4826-9898-1742c75e36a6\nbbb9787f-1583-4d4a-a635-17c3636ef88b\n8e9922cf-30d7-4766-ac03-ce5f85ef077c\n06f3d252-426d-4d35-acb3-e6bd08595404\nba357631-d46b-4b8f-ac35-e6925cce53f1\n915853b2-7b58-4a5b-a0d4-3b0c71b6bff4\nf615e6ab-5aa2-49df-8856-8e39c067ff8c\n032c93e6-bcf9-4bf8-83bf-e195564af668\n0c85f50e-f1ff-489d-b6fe-d2bd13c2a371\n87e3ef9b-b48d-4654-a90c-c4d55973f731\nf6b10673-f314-4a51-a31b-e3c219d203fe\ndeadc8d3-07cf-44ae-9caf-b8959659bae1\n8f5c36bd-cbf4-49fd-8f09-baf6821388d3\ndcd5a7fb-b739-4b3a-a381-740dcfe81108\nc7294efc-913c-4bb4-b64f-086f3fa22ed6\nf9cf5c1f-5341-4450-b0d4-b46d1f5b8798\ne7ca528e-ad72-410c-8418-c16c69269132\n6826652f-b0cd-44ce-b128-275de6678741\n55d7b22d-fe30-4666-9dfc-66d59a10aedd\n54f7f379-3521-49f7-be66-6e4561d6d2be\n625ef3dc-43c6-4a7e-8c0f-714d38a63618\n0501aa78-02e7-4c4d-bf90-65f52c0670a5\nd858ac1f-18a7-4c33-8a77-db291d090c70\nefa1f4be-d175-45a1-9f0a-d52d8061176a\n1350474d-aa84-48af-ac6b-29d0f7fbdf3b\n02ec929c-afb2-4274-941e-9c42e053d61a\na8cbe2de-e038-488b-8756-4276f95fa203\nae28fb44-7381-4612-b010-e873daa12751\n10be2647-ba34-48b7-b87b-6abc0ed97036\n06600ef4-88a0-4857-8a6a-03595fe479a4\n62783d5c-828d-48ca-90c9-46d18dba3753\n902a931e-dfaf-48d1-a76f-feab063cc16c\nf3d548e7-dd0d-434c-84c0-0bee41460401\n56258c60-233b-4e8f-a695-b5fef3984f90\nfe27fe22-a125-49b9-b5b9-97c5fd7632ca\n2aef91f4-39ba-4a8a-a35e-4a2fc69bb205\n58b86120-a0d5-4b7c-ba34-ca78f821a842\na1ba8996-39eb-4d79-a1e2-6a3a32784411\naf53d220-54ae-49de-8a25-e6d7a9da5ae5\n43624b25-f5ec-4a4b-a6fa-2a6f1e1a912e\ne7991294-d36a-425d-b2a7-9d6465e9eb0c\n41d6261a-e164-450e-a2e4-dde0960d7b4e\n349d3717-1cd0-4595-ac5e-e70e06dd4c8d\n4d499879-36cd-4a5c-b3a8-b6afba5fe58c\n56c2b1d5-cf8d-49f4-8afa-2c4c23a55dc2\n837a5679-18c9-4254-8d3a-6bae982036d0\n54d9983c-f36c-4afb-acec-fb5ccea8b195\n68841b66-a95a-4416-bb1f-bf28a1535f36\n373b53f9-6221-489e-8332-87049004bff6\n555e5bb0-4358-4bee-bc11-a2937b87727b\n60e6584b-7bb5-4c3f-9911-1fbcbea58e1a\n01f969f9-f72f-42cb-af3c-952a4814ba89\nc164aaaa-6b11-4cb9-8adc-983004697171\na57db6b0-4af5-4f90-9b6c-1ee7b879bff2\n7c94433a-3209-436d-96d4-72177c7c1d7e\n1bcca9ca-abec-4b63-a882-742c316629bf\n28b51d68-5e17-494e-b1f6-20902b2b47dc\n43ff119d-08d8-4770-afdc-c3a4f1f07200\na2b8bc56-6cf7-440f-b500-ad76a2566055\nc473b369-5b6a-4c92-817b-82f8eb2bfaa9\nc3c2e742-2278-4823-9675-98761e06280f\n7623accc-c861-47e9-ba0f-d7684b7592cd\n30466e20-33c9-48e2-9e9c-a5e60e7a0cae\nb2a5d919-81cf-4261-8b85-8e5e8eb2c005\na544611a-8214-40a9-9784-0fe2539959ad\ne624acdf-a8d4-4fa3-830b-0f6c0106ff87\n8baf506f-487a-47ff-9bcc-6e3627854908\n6909167a-23a9-449d-b9f9-1c0d6f7a5832\nc7c74b00-e68e-4c83-b949-a0c4a1ce9810\ne954f0fb-4a6e-4755-83cf-8e83af112b39\n0d5f21ef-c6b2-4823-885c-5454d4084b7f\n8e1faa00-5c76-4a80-922f-a1098f2f45c2\n74cf86a8-f688-45ff-8948-ed37e435d2ad\n99423449-3110-4074-807e-bbc36842bdda\nd497ed0f-bdd8-45c5-a219-d81b17960b31\n9aa75355-72c5-4587-b3b4-a6678f67f5ae\n6bb3b932-2cab-455a-a67e-3c9a772b9200\na91294e3-61f1-4a7f-a91f-148397ed9d28\n481c9881-9805-408d-b56f-3a534db2ab1a\nd978063b-95b8-4ac3-8c0b-98d9dd664a24\nf18e929c-9454-4f8f-90f2-f42f928a44cc\n727e7c89-e152-48eb-bf0e-71b24c24864f\n19e75b41-71ad-4080-b70b-a4ccf28a7c0b\n4585fd3b-fbad-4c3d-a2d8-88f544904b61\na23ab594-d7bc-4b7b-8ab9-4d6130b764a9\nce72500b-95ec-4128-83c5-92c068309cd4\na5427da7-bad3-4484-8827-6d8b1996f4ea\n41688ca5-762d-4b13-adaa-82072962571d\n3d8a4fbe-ca50-42e6-b507-dd263f7bfa5d\n220680b9-c321-4cb4-95c9-3d4f1848147a\nb96256fe-b7bc-4485-a128-0fc7777b4034\n6f133293-98b4-45cf-a1a2-0d281f566991\n8037eb8c-e073-4406-8bcb-284275f8631e\n373bf3b2-b257-443e-ba46-d7aaae2289d6\ne20d6f5c-286d-4bff-b0f0-ea02f60dd1ac\n756069bd-8cf8-4547-adf1-2d73932ce47a\n11ba7467-1f6f-4248-b9bd-d8ad1fc82b9d\n3e29057a-c6b7-40d0-beac-5bd6558f6d94\n187dbdcb-6b93-46d4-bbef-2cc8b8bb167f\n695ffb0a-93ce-44e7-adb1-7ff441b23d3a\nb9dae8c9-965e-4b2c-b938-d9d0bbcb0f00\n081aaef1-88b8-46fe-a783-c74f052fd693\n907c02d1-b004-4dc0-b043-8f14cc9d38fb\n81e87363-e0b7-4f10-a61e-61aa45572177\n4775eb72-7796-414c-a590-cc6de7f27eda\nd9b558d0-96e5-492a-bbc5-63c22d4da027\n891e77c6-e2d2-4855-8aff-167d61814337\ne7392ac1-5d82-4aa2-845f-3104a792b9f0\n0ab0cade-1c57-4dae-aa3e-0d22864c1cb9\na6c6b5bc-63c0-4b45-b2ef-b6d9ee3624cf\nfcf1ec84-5a78-48cd-b864-2008f5300068\n4a9ccc44-1bc9-4021-bb8d-ad7e3b472545\n45b300e1-9cac-49dd-ac7d-23405f34108d\ncbe30c79-ed9f-4c6b-9644-7bdff6f863ad\n0e40d338-5dd6-4020-98b7-7eb86064664a\n32ccb682-8b9f-47dd-9369-a2b250b3f677\ndff15e62-0d3c-4d9a-8d62-21110701d50d\n4fb0c045-4c72-4626-8416-73fa0ff7ae5a\n1a7fe901-8bc7-428c-9c0a-8a96f4f87fed\n3b678568-b1e9-4112-bda2-3ffd42628b71\n90bfa80a-a43a-40fe-a968-dc89c9630992\n0d56ebaa-0e36-489c-ab32-6ef75a3f6403\n4ea9cc72-9ade-4818-8017-15ab86bafbf9\nf9a89ca2-5669-49c7-9a69-6e7a56e5f660\n673d035e-0ffa-4b46-8dad-646b591dd164\n4cb813b3-6136-46d5-bc2c-c55dad992cb2\ndf4fa99d-81f9-495c-a5f3-3bdbbf5f6a2c\nf7660570-06fb-4740-af24-10a36810d849\nd20a9dff-c95e-4c30-910d-891b71253204\n9501b8c8-b26f-4170-919d-c6be467855ff\ndc3f8a0f-27ad-4361-b3ac-484a7bd5fdc4\nbcc4b922-1aa2-41d3-896e-4537027de4f1\n0b4a759e-05f0-49f6-b149-87a1ff7a0f89\n6d2dd054-ca65-4d50-99f7-26b7f1850a93\na8465c06-da7e-4a32-b233-19f77633aae0\nfdc42671-bc7c-4216-901f-75ea82ca5749\n571f50e3-d6b5-4039-9ec3-0d103176c0c4\n40436e28-6868-4783-ac0e-1404a269fcf0\nf703d81d-e6bb-4be6-9e01-eef00ccbae94\n1650f714-3ea1-4450-86d9-471335fa5791\n593015fc-cd23-4b19-9173-4cebcb31b58a\n574169f7-c08e-46ac-8094-4232b579b233\n8becd01f-8a72-466d-854f-4af50479cb82\n8cbcc388-7f27-4ba0-95b5-b14be8e0fb85\n5e375bdc-543f-49c9-82df-709dc248d3de\n3c99fdde-86c7-40e5-a431-f96541b98c2d\n725bd303-a982-4e91-930d-a414e47c81d2\n5505a53f-7dec-4f3d-b279-20b052a31352\n946dd2be-6208-4eb4-b2fd-4d8219a3fb4c\ned8066ba-b765-4cf2-a9f4-47572ee5e6ba\nf615459b-ea0b-46fa-870a-376a5a9f13b1\n331c6309-e7e8-4e0a-8de4-4479e940747b\nc9be0682-a0b7-49fd-b11a-5594fc322868\n3a196702-eee9-4824-b767-9bda9332f4b6\n6a8803f5-6dd7-4714-8321-8f97ed6b03df\n25795da4-aa1f-4d6f-8324-5dc380d66e7e\nacaabf9a-4582-4fb0-84ad-c502e2dc2e1b\nff98dea6-6cb2-4554-b5fc-94f1c464b17a\n6ed48118-8283-4f28-9bab-4d9474c3a264\n1e7b9ddf-99d8-48c6-ac38-e072725b878f\nc38acb17-59e9-44b2-9d16-543a7c635c55\neec184d5-b899-4acb-a06e-4a6649ce7241\nf7b8b937-2de0-449b-ba22-3d26e0360f3b\n03dd81e1-46e3-4c38-a10f-f27155ddd365\n9278787a-c0c2-411d-bf8b-e4e5c9a029fa\n9fd40285-76d7-464c-b553-3f761dec3a0e\n66e3d46e-d931-4e23-8d1e-393819dcdcd8\n623cc76d-bcaa-4644-bba7-34ac07e5954a\n03e63de3-8304-4ae2-8f48-aa3dcec82551\n47078b0e-348b-425b-8c24-006bf2e7e5fa\n42a5b52b-9895-4077-b89e-b3a758afdcc6\n147863db-4ebb-4d21-930b-01b5d5b9ffeb\nf7a81be4-aa28-4453-b1ca-2f17481877e6\n149ac9ba-d2b8-4c6a-929f-329c9e2c4a0b\n636df150-4877-46a0-8d31-af65857109cd\n04512e30-0bf3-49df-90ae-d936862f5881\n600e6beb-c32b-4a29-9c7a-1d3084d79128\n449d399c-2fe0-4f3d-952f-50cc12e0d131\ndc8ca004-8bf4-42f0-badb-8a703161ba44\nc7038109-a621-47a1-ac66-c6ccec821d23\n8e9f1e3e-9702-42c3-8ccc-c5d8cb66cf95\n22f5040d-2bf3-4c37-b1b0-13cb5cc999ab\n74a0c288-3d10-4247-a717-91990d8842c3\n05442090-e28a-4ceb-8724-23b1437d87b9\nc0af8b48-1e0f-4fb4-8407-5cf6f2adf1c8\n8cd997a8-06ef-4315-8ecd-d912e0786806\n4c58d79e-b93a-4e46-9e6a-b3c4be20737c\n816b3445-23a1-4f63-866b-1d69093e6df9\na2d39ae8-a576-480e-8d0a-3de72ebe02cf\nf9ac05ce-b7a1-4ecb-b87b-ec49edfb6d3b\n48ed7676-0975-493b-9eee-038f11deaad8\ncaef9e92-2084-4ba1-a0f2-4c6a950c18f4\nbad7d6a8-88ea-45c9-85b0-5fcbc1603046\nfba3855f-53b3-40c6-a867-4bc0dc19e334\nb42dbbd2-3e5b-4d9a-b49f-f2fce90bd172\n47e09b16-e501-47aa-9eee-2f493a262083\n545a24db-9217-4460-ad4b-bed06ec8a5fd\n3236ab9c-19b2-44b3-821d-0f9961720516\nbaf3dce1-d5ce-4d06-a54f-58573ba34bd7\nab04766f-0a0e-405a-afa1-b7e817bf9596\nf94ea378-f286-480b-9850-b46a64245e4c\n605d413d-a9ff-4f96-a373-60bcb96107ce\n9dccdc83-c490-48c9-a84f-54a6baf38b69\nf2fff998-34b7-46a2-806f-4423fe8e87de\ne9dca7c5-7017-49e0-b423-4d71519e30b5\n39bf0738-4700-43b8-b176-cee2b3d3606a\n8003a18a-ce47-44db-b245-09460f5c7e09\nd99e6a07-8cde-42bd-b4cc-8d6a9d6b548f\n4fd114e7-e179-4200-a18d-428948950668\n9dddd790-dea0-4369-9499-75f9e0dbcb9d\n18fb1f87-58e7-46e5-919d-b08eb9f61431\n35507f38-005b-48af-baa9-abe50d52cff4\n29a723d9-0802-46e2-a105-a3513aeb9831\n886cc94e-9142-4be1-97ae-128aa932eed3\n39dced7f-61fb-4f8f-8165-c4dc4b3579b1\n70452396-db06-4048-bc6a-fe18bf59b085\necd6f007-2aa6-4ac6-9ce7-4b2b8ee93007\n41947585-ed8a-4887-b448-b91388eae774\ncd33fd5c-be6a-456b-b99b-0fb02342c687\n4fb0c747-5f56-4ef9-a165-3cde18a95ac2\n6f1a1afc-5098-448f-92ed-8a7df11533f0\n0b7a731e-164c-4cdf-82a7-032121515a5a\nf35c3be6-a4f1-46f2-aef1-bfa4cdc8138b\n2795bd07-3daf-43b9-b341-aa2b0e2354b9\n1aa74cbd-99ce-46e4-aef0-ac1e616ec971\n02027373-e7b3-487e-9e34-15e40630b1f8\ne310f774-3092-4d7e-8c85-0ab955861e5d\nb2219791-bbfa-4a90-be54-1ffb0151d2ac\n2b7c0c66-6c31-4c11-927f-55f0be7c9b38\nbb89950e-90db-45e1-92c7-8b136fa124eb\ned1c6e71-81ff-43cd-97d8-e6f429127498\n76f3c99d-7fcf-46c1-90f6-9471c55f6b3a\n2957b5d9-2f3e-4099-9216-dea64577a17c\nb55cfd57-5d11-44d5-81ff-c8fe50fce1e6\n08263551-0a84-46de-a8d0-7b758d44bf7b\n020ca694-cfb0-4fde-8e20-a86c027fa3d1\n473f832b-0a6b-49e1-a721-ede35ad35466\n6b6aae1b-f050-4f9b-b2ae-b56fd87f6dc8\n678a628c-bfae-4fa5-ade2-86a7168eb99c\nbf559452-5cfb-4e48-b379-fe3f23aa47db\n4a4a63f8-d42a-4321-9294-0df194ab58d3\n0321bb33-e9d0-46c5-8677-e5e3057e6a6e\n6dc3162a-a402-4380-a734-777d113b639f\nfff956f3-bda9-4881-8b12-878396742566\n6c43e5d6-07c0-4d32-bb7d-f63aae6066ad\na0983877-46a0-4911-8351-cee154df5f44\n719b1019-b4ca-49cd-8c89-20393c475f2c\n28add333-519a-4cdb-b0da-316106f6bb31\n38dd8c17-4746-4003-8b45-781ac5554e6f\nd4d158cf-070c-4264-8cbd-c936a6e99fec\naccb008b-0a7a-412b-9036-977d10714574\n13345958-414b-41ec-9586-932bdd739a48\n9f6f7c5d-9a5e-473e-bb97-71fd2594ba35\nc424b5ed-3146-4de4-8a8d-257953f868a0\nd5ebabf5-f10c-403e-9abd-45b0fe0bd8ec\na2903a77-c94a-4ae5-a4d2-4e791d3f3245\n2a676c89-84d8-49ce-8f7f-56071f8e8b0e\nbe852754-3a6a-4d09-81f1-d4f0fe2b9b58\n6ac8b97b-a205-4769-a1c8-c4170c56f2a8\nbbcd3aac-e4af-4211-99a0-b68a594fb794\n8f0859bb-7bf3-455f-a4ab-80504394566f\nbdb3ea15-9d5f-4b99-9cb5-387811ed1a95\nd1947a47-6d07-4a79-a0c8-100129c34878\n5da0f264-6884-4a69-826d-e3c9b30b5d8e\ne3d87352-67bd-4c11-ac63-b187b9c1a55a\ne0caab95-a325-443e-8c8e-c3a495e55730\n718bc863-6657-43a4-ac3b-9b023f753d0c\n4f3944f0-b4e8-44b4-9483-10835094e4ec\n04362940-58f2-42ae-8385-7c51c058e501\n760958d9-7829-4bd7-b210-300253f52704\ncd516aed-966f-4883-8a29-66d5b25bc3e4\nafcc8797-03fc-4730-8c54-f1278b44fd83\n2a5d7829-adf9-4251-80ec-4d64bf73b228\n1b29b73f-31ee-4aa0-a1fe-333f81628a5e\n70176ce4-cf0c-4525-a54b-21d5b3163b52\ne4add1fd-d3eb-42fd-b24b-f48432194d46\n133bcf9a-babe-4920-af50-04b27c414f8e\n24164db8-1f0a-4b97-baa5-ff7520a43e53\n7c2c57e7-e3b7-4e9b-b5b1-3133f925fe09\n6901078c-7695-49c2-9ac4-ca71f65e95fa\n33acf429-970c-41b0-8efe-7a3f27a13c8e\n4f4b3050-41ea-4361-9f99-1ac82756f100\nf1b407a4-ff02-4d34-be5b-fe833362ced3\n057e4302-fc90-463e-a81c-5b1da4df541e\ncda0170b-bfea-4ab4-8746-4282789fb317\n883cfa13-a358-4728-be90-dc359312d8f4\necd92fe3-c8d2-4357-8e7d-3f989af67883\n35e0ba1f-e55f-4d4b-9872-a35f4fe9b99c\n1e880388-dddb-4517-8b73-94a22be53511\n698ec9ed-7950-405b-8d9f-75c7db226493\n123c090c-7426-4cbe-8d71-dab8fa97646b\n51be705b-0541-4bcc-bb5f-960354642543\nca04fc4f-8ed4-4e81-bfff-c2b8cc0d2acf\n4a205eb9-4013-4dc4-9bc3-b1c0366188ff\n92c90d68-50ad-4035-b8e7-8541f7fbbe73\n1040252b-ea8d-4aa3-90c6-2039c705df67\n77986ecf-b669-445e-90ec-6b685b890b20\n57bd5815-4def-4673-be23-5a1ef50a6f57\ne8a16a13-a58b-4e37-aa60-2a5e96f9f586\n018cc6cc-b701-4c1c-8b71-b6138bd6b5f8\n2378456c-bcfb-4238-9046-9901ea0e105f\n801dc03a-1a7e-4e13-ad00-37d32ed69390\n31d22d6c-769a-456f-9a87-0c64204a92e8\n34854487-af93-404a-83ae-5f6ae85233ef\na49a61a0-7bf0-46a2-9b03-9cd8096cde5e\n813571e0-2250-4266-8c78-c0787c14bf43\n08ccf156-e8d5-49e5-8dbb-f0e568d3971f\n11808a68-b740-4a12-bf59-a275023ad5a2\na279f689-e7fb-4712-961e-4bbfb86999ae\nd45a4d3c-c07b-4978-96ff-d4f76551f985\ncd0b2808-7cb1-46cb-8a25-7c4484be2a44\n3bb2b95f-fe52-479b-853a-a4bc0febc13a\n0e458a39-1fff-42bf-9206-a208a3d5fcc0\na90e6d36-6414-4301-8749-b396ef823240\ndf072bbf-35f9-4a4a-9f00-365893c0e2e5\n61d8fb35-d88f-4b2b-b4e5-66ea0af5bc71\n00ef5bb9-1c4f-4a8a-8d99-373710cbf900\n0f7baad5-248c-4804-bcc0-515e47cc188c\n71528017-b6b3-4f22-9adf-0db100ed6c5f\n57754b66-b9df-4ecb-a68b-80f6582f0ce2\n6f34ddaa-23e7-4962-a3ad-16abcd560eff\n511fe482-a49d-4475-bc0b-f683d0aba9cc\n90899483-1924-4609-908f-a52dafa00cab\n2a1106f3-8c72-431a-b346-c4bce1256c4c\n3dcbaa89-673f-47d2-a338-4e4a00318b9f\n97a19a67-6451-4792-85f4-e42c0ea9980e\ned6622c1-c6fe-4258-a0bc-5b287cb6eba2\nd4e6af9d-409e-4fdb-b84d-f305c83bc2c6\nd37527cc-57e8-49f7-bc5b-95ac6eebc0d4\n6ee373c8-7957-4906-97ea-c0213ae373de\ned4cc875-4538-4487-83f7-dfe973fb0eef\n625f52f3-8dea-48e0-95cb-65cd91d31467\n12ac31ae-0226-4c1e-87e4-faf19a885421\n354020cd-43d3-415a-adff-538128ffe4fc\nd6ab123c-d7a9-4c4e-9356-b4d7dc519dd3\nb8bdc0ea-3e55-4865-8295-de6cbad3824c\n81d9d675-4401-4101-bafb-d59911ebb3b1\nba436b23-ed74-49b3-9355-bce2ed8a0cb2\n30f479c2-14ab-4c16-96ea-bfc19f19eaca\n41c9d975-d146-4b95-9271-c9891c21c072\nc032ac62-2c4f-4df6-aeec-eec4c2daabab\n906c054b-68f7-42a4-8cbc-cd7bb003748e\nedbf6e24-cf1d-4a90-8332-d3edff81cf0d\n5b5ce96c-eceb-4989-abfa-53acf4ec335f\n84ec4c11-8ab6-4067-ad91-cf975b94d2e9\n5f005ece-6aa4-4dc3-af9f-fcbcf2be8642\n0d1a603a-feca-47ec-acfa-0724aee03b9e\n3d8eb4be-016b-4fcd-8a6b-9bce2da72c66\n6cde218e-20af-4b7b-91c8-315fc3aeb508\n0fb00381-cc9f-41e7-8d95-33fe14279170\nee4998b1-e4d7-4f05-88e8-e9e9ffbcaf95\n300984fd-203f-4ddf-b064-2de7852daba1\na61d449e-ce1d-4617-b6e3-c2f918bc8e8e\n777ed75d-5b27-47f4-8e98-59727ad45b93\na5519c06-51db-47e7-9e87-46985a5cc6ec\n02a2d240-b61a-461a-b5c1-b28f74626e93\nd57ac5bf-eadd-4314-bbe2-83c1fdde6b0a\n72a200e1-41db-40e8-8cd1-2b1694bd6f06\n7ac18294-8fff-443c-975d-82b53e0ef496\ne2ee8897-1259-4d98-8c44-fa80dcc2e40f\na6c60fcb-c350-4f06-803a-1974c4a6f82e\n77ec12c5-a768-4401-bf97-03d8e2fe67fa\nc0f9b61a-e1bb-4396-b4f6-3196291bb2c0\nfe5de47e-18a6-43b5-87a0-068b47190765\nb227490f-01be-4f4c-9990-50f6805c1d34\nafcdb275-eb4e-4465-889a-31a51f6b2b29\n12684cd2-6b0e-4837-bde2-316d40494903\n5334b1dc-929b-44c9-a799-f873e0ef9c1c\n1cc4187a-7dc7-4974-920a-8df45757e8fb\nbc39a75e-e45e-46e8-94f2-d001a11e789f\n4f29649e-fc46-4fcf-b54e-71cca11e2063\nf250da58-d9f4-4f26-b591-2dda9f92b2b4\nfb39d721-ef10-4173-8949-42245b93de79\n1a52b605-3202-4be9-990f-5b5f031b9c0a\nc40fb558-7511-4171-bbdb-ca75f7bb016a\n37e10c60-6720-418a-9949-3b4369a7d256\n73dad7d2-0b9e-4cb5-9817-5a6d59782e95\n36a5e6ac-6222-493e-980e-6d71d1866610\n9e0bc499-fd2f-4447-b6fd-08cb01ab8dbd\nf803a24a-3e38-49b1-9af6-d612ac83b475\n51b96579-0eaa-4218-94d4-ff7a8fd88fd7\ne8399e19-1473-4b36-999c-fd5bd48c8090\n0aacd30e-9c98-49c9-b0c5-4ec3964fea33\n67504c58-a7db-40d0-a13c-4b244a91d30b\nbaad77e7-dd6e-489c-aceb-bddbccfe42a7\nd8a40c2e-a040-4977-b213-89b17a233cba\n89a7589c-003c-43ae-8578-43436262d78e\na19c1f7e-2c59-4aa5-af3a-b9053a0fb4f9\n18d51558-6ab3-48ff-8abc-38a64840e2a2\n127080cd-0972-440c-b51f-beebfd4d69a4\nd67b931f-c400-475c-b0a2-ac648d361d9c\nf62b9879-cbdd-41ff-a344-b89130f7cf13\n9bded787-6dc3-422d-baea-975527067dc5\n4e0f91dc-4e08-4573-8b5d-e2bc95ffbf7f\nffa2b257-16e0-4c50-9e8d-898618813ed9\n13b82fb0-ab44-41f9-b27d-72bc2aba08fb\nd89e29c7-6bda-4d0a-9941-1baf7e8f96e8\ncab0cbf1-946c-470c-8849-8bce95756086\n13fd75d6-22e8-4143-955d-f54fd900544b\nb5cb8597-61b1-4c2c-82d8-a71c7c9d2380\n71f16752-402d-4b58-8fca-1b1137fca713\na7de332a-960a-4987-9d1c-9b6509a823ab\n07cdc572-4783-4f4b-9d9a-af0237ed6b0c\ndee81f68-e444-4550-bd16-a40d109f62d7\n04d8ba9c-4ac8-4803-842d-84b33adf66b9\n0f8a9a0e-3528-49a4-9f32-c91c7568ba6d\n04b572a8-78de-4e70-8097-4e6b04528e31\n144acd96-00d7-42f9-bbfe-289d4f9e53b1\ncc9eff5c-3340-45e0-96a6-cd19b862e9d2\n8824192f-4b2b-4e7f-a353-b36c55d2c650\n95953e82-d499-476d-a675-01177798e331\n6fd11a17-2ef5-4939-ab72-410aa894111c\n561b8e81-9243-47f3-97e8-237be926b3b5\nf2dbf5c1-1392-4ecd-adac-49117ad2446c\nd453107c-c07b-4f17-9d37-e088379e79b1\ne9bf691e-73c7-4a66-9acb-4be8e4c983d5\ne1e4417e-2ad8-40ff-975a-7aeda272da44\nf15ebd4c-972f-49f4-aac5-27715f16e9c7\nec3a5a00-1b01-4731-b399-7f0c598157f1\n2240a364-16c1-4d6e-a76e-c0a177e0be0e\nc20d2ef7-961c-464a-8770-cc33323bf671\n9fc24f2d-96e2-4655-a7fb-a0242553cb36\n7dbe87d2-c5b8-47d4-aa8a-355ee1f1aa7e\n0757ced0-7ed6-43cc-bcf5-fc87169c0faf\n8076f34a-b5b7-4c20-b59d-f6417f55bf14\nc6e21bfb-1b8e-433c-9ba0-4e054878adc9\n1203932a-3855-44ae-b3c8-95e6627b9f6c\n90bb40fc-220a-49d7-97d0-0795e0ebe83d\na5dd02ef-34de-4619-8077-5262bca444ae\n8f9fdb4e-d3cb-40d3-bf43-a8acbba135a4\na168109b-3111-43f8-9e7e-c617694d0f9d\nb58f4af7-0268-46f7-8267-f8fd63101561\nd9c5ec81-047f-4898-9bda-ae71436598b7\n60fddb23-e997-4800-9ad5-98dda4733ec2\n04d7b325-b4d0-4242-8bf6-60c1777a80b1\n94ede6d1-9fb2-4c3b-909c-6207189c4b03\nb8292000-e8b1-4e67-a6ae-909cbfec3ec6\n7b316fee-0504-4db4-8c8a-bc9327a4537e\n9b510586-5f6f-4108-8e52-989806ece049\n94de73d5-576e-4e9d-bb31-5f26d27c7bbc\nfb2cc485-3901-4284-a970-7731f74eba38\n9ce395b5-1631-49bb-83fd-bf28665e0cfe\n7dd312a5-288e-480b-bd52-1286675e9ed3\neb665b8e-2506-4bef-8a3e-ad09dd1499d0\naf4df17e-677b-44c7-9739-503dbb27a5e8\n70325926-aa35-4dd7-99d4-df82aa67176c\n0ea385fb-6b1c-4635-a7fe-b4a67b7e57cd\nee57379d-5165-4ff6-8b9d-02ffb128e1f3\n4867e645-dd00-4f03-b1e6-f3212e234022\nf85a638e-4775-4bab-a79f-ed4aa7fa5730\nb875e294-18fe-4ad4-bce7-9c8c540eea7e\n3d254700-200d-421a-9a17-94c74e1433ae\n646ec5c4-a6f3-49e2-8210-75ab876ac309\nae4019ba-e82b-4602-851d-b1b47d4da49b\n44da9ffc-ebad-46ef-b05d-86a431aab17a\n8d8fdf3c-e74a-43a5-9e36-bab43c920ba6\n866480e0-7efe-4462-be67-a91d6fbc110c\nbd5b8904-253c-4c09-90d4-16fccd310c60\nbcff53eb-41db-40e4-bd44-cc05221fad35\n9f2662e2-5859-4fe1-ba13-3152fbeb83e9\nfc3dde05-26b0-42e5-ab10-d2bc0ae09aa4\n1e8dca3c-d2d6-4415-86c6-726cf4dbe1a7\n680920a8-57bf-48f3-b3b4-16b2af59b007\n8b9c8875-3b8f-45b0-9229-2f962cfff89d\na4563c3a-2615-4b9e-b9a6-0502acad2828\n575bcfa6-3b7d-408d-a2e7-dba6ac2cd9b3\ndeb1fdf1-3772-4a99-8b0f-cdf094a9ad5f\n3b2b9cbc-39e4-4be7-a1ea-8b0678c32e93\n416bb003-1a64-4464-91bd-3f810a5998a5\n18606b62-d163-4620-aef9-6c3bbde0fc72\ne04af833-3f8b-4b9c-a827-8258607f850c\n85cd4838-75ec-424e-a03e-17eeed7910dd\n16ff9582-a493-4ab9-993b-beb21aac89ea\nd061b390-0dd0-419b-bbd2-10e7b1b712f7\nee97bb32-513b-462c-bf24-d3ecb1f9561c\n0caa148c-0705-4736-8d52-8ea18c07f06f\n41113ee8-17ef-473e-862b-a8a4df1f80bf\n1a05549c-065d-4c2f-982b-9ff7807df2bf\n5ef158b4-f8dd-4bcf-b14f-fff326c722cf\n6234b109-0229-4cc6-a2c7-ae6b5e990aa7\n8f3c0da2-1596-4b49-ab37-e58f6c6ee6b8\n9648b9eb-d3ee-4a89-9ea1-1aa1aa8eb0ef\ne39a0a74-f78e-4e39-b2ce-190963325e2d\ne4ea1103-b00b-403b-88ef-3c9b9a075b45\n3578cd8f-a43f-43c1-901f-bfd8a07fa461\n3e2c5337-3eb1-4a44-a793-7dc279a2f73f\n80d4b944-364c-402e-871f-cbf1a9418001\n420d2f21-940e-43d3-a7f6-eb5af3b92d89\na7d9e068-7b47-4213-bd51-446889d2cf10\n39d5d423-a242-4d5f-8ac6-0cafb95b5216\nce50e1ef-8fa4-4a03-a877-fd3dc0c9e1e6\nf3f0dca1-73a2-4b08-b588-c98de711a626\n0933539b-b8c1-4d27-82b4-5b6e8203e50f\nb333519d-350d-40b6-b97c-1dd953fdb516\n4f2649f1-0808-4fca-88aa-41aa92c1b14d\n7d7dfc39-2bd5-495b-888a-9a4129a93b0c\n7c9d1964-86d6-48bd-8dbb-a24ee0147a04\nf687341b-3324-4bc3-8b03-547b10ca9d9e\n6fd4bdf7-3809-4dac-a20b-6a8093cdb847\nff2727e8-6986-41e9-9a01-fb9e3ae6b9b5\n2cc3263f-eb0f-4233-a454-d2bff1d48032\nfa8d6bb9-4d89-416b-9cd3-6d1e0a10dcd9\n53cb251d-6e91-46e2-a8aa-22b05f6aea58\n37117ec5-7b9d-407b-a63e-eacc45d80947\n05c39599-5890-4906-a7a9-1cab9f7ce580\n1dcef19f-fc9e-4674-9c4b-42d8beafaf74\n1e87c9bb-d104-4838-b6cc-ad49439d3507\n3ebe2847-6f67-48e9-b1e1-d32c37350a22\n1b302f4e-3e7d-43a0-93cf-7ce40ba87d25\n30d6e214-2b61-45b2-be35-03bd31490442\n4a13a60a-9835-4796-a031-211c99a7b359\n6ef147f8-61fd-42da-9b19-a7f036ebd14f\n97585759-752d-49c4-8a9c-80f45afc6cc3\n728a914d-20d7-411b-babe-87f60e7198b4\ndbde4700-16b9-4213-8ff6-8916d4d98660\nd0a09dbd-8b7e-4c22-bfea-76c51ce62d00\n5f723a4b-fe66-4350-9578-c11d6b242f93\nd928a9fc-300f-4396-a6b5-3781689d4651\n302936cd-7299-4aef-9d28-b6c5b438a3c6\n45f61603-261a-4f5c-9cf9-fb18f163edcf\ncca769ed-bf52-47c9-b856-112f852f8a53\n0c728a72-5c5e-4db7-b2ef-a9b869e51335\nb3ecb5bf-1f1d-4244-af80-1f9894d155c9\n9646adef-b8c3-45dc-b865-2e154f9cacf4\ned83ed30-db2f-453a-b258-5fa3245df583\nf335613e-625c-4e53-8755-1d2659b4be62\n16903baa-5d00-42c1-9d1b-c447449a3844\n9b3a0941-c6fd-4338-a7e2-b2bba44aa2ba\n9d59387a-7c14-4620-880b-bf8d70e63345\n1e5989c5-a0d0-40ec-943d-7b7748aa9cff\nf0b2be2f-89cd-4a2a-a78e-449b687363a5\n04371258-e3b2-4ac1-acef-d0bae8b90740\n38fb36f5-855a-478d-8010-1efb07c018e0\n0d615cd2-bf05-4887-adad-68a124a1b499\n6853b08e-cab3-4317-9a7c-817ff6c5fbdf\n7439729a-6536-46da-a8cb-e1468fc6c6c3\n6e8f66a7-1d4e-4250-9fe3-634db8e5b15c\na14ae1ed-5e16-48b6-a83f-df9a8cca314c\n39bd2388-cc5c-4c03-b43b-19126194fdf3\nf8f7ef96-8186-4096-8046-6487ea4ff7f6\n32fcb86a-fc85-4d0d-9de3-52c789d2f8b6\n09848510-9026-4858-961e-3d8b8cdad95a\n586d8abe-46b5-466c-bb34-cb7c84b26b84\n801f229b-4b20-4257-b461-6fb53c0f0558\n73af78ab-21b8-4322-b04f-a5cd65b6ac02\n1f5b0e1c-b2fb-4349-b949-d662b4c73ee2\n949689b1-b5cd-4539-a5bf-8020b7b60a68\n9088408d-6c8c-4cb8-bb6a-bf6760b69145\n8b41deac-06d8-4286-a62b-d1775a2a3526\n96d9708c-a933-4a2c-9482-140d56c52499\n4c8d13e4-051e-4e88-b244-9d4071dc4348\n6491de54-e7f0-4a1c-9c53-2c788766774b\n824111e6-6a6b-48c1-993c-685f82373124\n9ac61d78-9282-4a33-8f01-c8457d7c5652\n0410f510-c3c3-4124-a751-6be3a8274919\n4b1e6f92-add5-4557-ab0e-044fae81bc82\n37b24f93-00a3-411c-9d19-837d7654ba6d\nb16dd598-99b7-401a-9449-2f17c145a790\n7c77d78c-cf79-48b6-861e-6104141a5e52\n1b7a9e02-3326-42a5-995f-3b429cabefda\n1b83bf1c-f4e9-4185-9b13-4aaf9dacfa7a\nd611553b-16ac-4b8e-a1c8-5b9c775039f3\nf85273db-a936-4a55-a91b-ddcbcdc4f002\nd11a6df2-b122-4c1a-8706-ab2b1848397f\n09682a72-41ae-4771-b50f-518bbc9130a3\n2f809818-b992-469c-8cea-f2ad7e62f99a\n406f3062-324d-404f-a660-8d07ca87f090\n3a592406-896a-4002-adc4-f83139a2dc2f\nd9d8d034-b9f2-4265-9cc6-e8894a1bc660\nc3307cb3-a6b7-4932-908f-9cd8ce9fb9e1\nf83492c8-7d65-4ab0-9190-041df8d629b9\n7f747266-5e2a-4ea6-9fd2-d80a9bcda4c5\neab88ace-81c5-4ec1-b58f-ba6da132fdee\ndaba42db-1909-4a68-82bb-95e2bd5d8bbe\n0075635d-7e24-430f-b57b-bd6aa50a1437\n10ad6da2-4bf4-41b2-ad71-05b9c491501c\nc924705c-0929-4343-8a46-df736351864a\ndfe5dae7-d2e6-4f22-84d9-92043fe1480a\n37b305ad-7ce3-4268-a247-5483a5c953ac\n774f15c8-f9a1-4fc7-8fc4-7f24a3613716\nfd287b20-36ef-4249-a18d-8570188f558a\n9f7ea10d-ba58-4823-88bd-8b8a3b89e073\n4365f6e6-53d9-4dbf-a5dd-aecfc6fa48f4\n5cb7a3e5-ba64-4f47-9764-032464c7154c\na08af40d-14bf-4436-acf7-01609bc9c4b3\n1f9ec75f-da9b-4849-b4b6-52e5a1c20c9a\n936d5e42-fe1a-4373-a760-340d0f214596\nfd6e09f6-7e21-4736-908b-2b4208eb386c\nf3a7b344-2962-4231-a8be-25dc292178b8\n7b37ed3b-d996-4ab1-bca7-78cedb43f183\n05fc7a0c-a39e-44f0-b335-e33a38bb8e8d\n15f9b3da-fe41-4efc-8020-07683af5aeef\nb82bb998-ba46-41be-b6fb-b557ab7468f7\ndff837f5-bbea-464a-ada8-c20e61d0f937\n9dedfa4f-6446-4c16-864a-60eb9f6b88cb\ndaaf65cd-d6c2-44f9-b77c-b9f698a53201\n92b0477c-c248-4774-a600-2a355d040e77\n133de9e3-17f7-4419-9bb6-4b8fea858166\n2ff30b78-6ca2-4df0-963d-8376c69e1ab4\ndc566bba-a56c-4ea5-969b-5a49991438fe\na6b3e1e9-1f81-4078-86f8-45f993a19653\nba3dd9cb-1b71-4a73-95f9-4db47ebadc1b\n94dfaf35-95f9-4bc0-939d-4006f19aeca1\nce488b07-600e-46d2-9cfa-b0b544413e64\nb743a6c0-c778-4b2e-af98-0196db3d97a7\necb3e635-8025-4dc7-8b85-a0fab859f0f5\n1523e82d-584c-43c4-91e9-267297af97dc\nb766dadd-1a99-42c8-a89f-a0544b8abbd5\n2fa44300-64c4-40a5-b5f5-f909cff12537\na900eb23-1c4f-4f4f-9006-535872916abb\n7c0bb04c-59e0-42ba-8e94-4f83b730900b\nf111cd1c-54ad-4a27-a0aa-d93cc1ec89c0\n5e944e4f-9ae0-4a57-89d3-97a3381c9a14\na6818932-8630-41e0-82f2-068f5a85f055\n72b6effe-c197-4ad3-8422-53c34386762f\n5f829cd5-53dd-4a83-b11e-59b9c4a6be75\n91faf884-94f1-427f-8e56-ad74897e7860\n71daaf87-1317-469e-93da-7864cf734ef4\n944d40f8-66ff-4dcb-ba91-a16adb1739c6\n14cd5a50-b42d-4e72-9fd3-f1861ee8563f\n3e761986-e7e6-45c9-9518-c18afcddf0d7\n44a31ec3-d2fe-4d26-b0ff-543975b9c999\nb952bc7d-02f4-463e-ba88-f561770676a4\nf78e1679-5c4b-452b-b501-b76922feb995\n18ceb35c-90b7-48cd-866b-f9ff1fdc1592\ndabc3986-ec6f-4af8-ad63-2722908840e5\n5b8a1d6b-3633-4b26-a824-cbce1cd6646b\nfa635103-9de3-4f44-9c11-d0d6e564839b\n86e8ebc9-dda7-4598-a86f-13dc0b0a02c7\n00755440-ae60-42dc-b2b7-9bd34ad29a3c\ne64d22c1-6f09-4bf5-9611-61378be0f499\na454b2bb-62d1-478b-8551-187c29a49ef9\n8c19d40d-43b5-4a23-bf53-a32ff2fe84a3\n74c34be5-e784-4f9a-b9c1-bc17490bd3b7\n41d0da90-8402-40e3-903c-bd8009b9d92a\nb7ffcdc0-cb4f-4631-8261-f55a104c4e2f\n127e6ac8-736f-45ad-ac3f-14ca2590415a\ne994e2c3-cc32-4b2f-99c9-02dedec2f6ca\ne45d389c-5060-435e-b805-5bd806fcf57e\n8a7f645b-1465-47b7-a29e-4020cf7a30c5\nfcc5c205-2101-4fa8-8de1-c8c8271e4614\n11e8a710-532a-4e21-82e0-cdf4f2a73c68\nd99bff93-c5b2-4d69-b59f-eeca5e0fa295\n066e0116-59ce-4efb-a0bd-f3b0e932d5cf\n711149ae-27f8-42f0-b486-97c8d0be31bd\necb1d063-e42e-4e62-9473-e4c8e4c8c447\n5aca7789-0f0e-40eb-a7f8-128aee90ae43\nbe632828-062f-408b-b064-2270e714d17b\n602dd39e-e5e2-4bbd-a301-bd4b065b86c7\n041ba540-bbfd-4b7e-84ae-0eb0780b353a\n76aefe40-c224-4907-88aa-285d0298da6f\n839c8f2f-5262-41fa-954a-0ab7bfe471ce\n60ab976e-0ab8-4435-8cb7-e75ae4e06b4d\n3187c8e3-5424-4616-8631-0c9cdf69a14f\n96255387-f26c-488a-9515-89c6b209c372\nb519053e-992c-4d6b-b84d-b2ec5fed15f8\n901503f9-2ac8-4b4f-9d08-3c024ffcde2d\ne2af9fab-88fd-48d7-b397-44832f755d5f\nb78057ff-c955-4c83-b6bc-c9c18a734b36\nc773ba99-009a-47e1-a0ff-767c350fc2cc\nb6d7dd73-60ad-446f-9e2b-96dcee61dde8\nc2bf2e46-7c1f-475b-977b-b54127edfb19\n0a2a18d4-a858-445a-bebc-a964b80e3cfc\n66816809-eaa3-490d-8197-058f5eb0aeef\n193711d8-bc3c-4ce2-94c7-41d0460eafec\n5f37092d-ac36-4a02-a6fe-b21ceb699683\n114b3e97-8746-4189-ab06-7794605304bf\n76bac86e-a86d-4fef-a070-8386313d25fa\n08c68f99-9150-40b5-a112-9b49b4f847cd\n711a6848-f7bf-4d11-bfc0-1f266f9bb61a\n839fd24c-a5ac-4965-8310-9ef44da49212\n2e3ccecc-dbb8-4d0e-8754-e860ef4ed851\n9b2584ec-0b60-4c50-9985-1543e232efbc\n26a26782-65dc-469c-bc15-9798633ca665\n2566b255-c0e8-4715-abb1-14e66c5029de\n40ae3eb1-a4f9-49ba-98a4-5077e3e1a147\na545b3da-3862-4887-b18a-ccdd8da3d6a3\neef2205b-20cb-451a-9020-c33df134bcf6\n54ff6e83-eddf-4abb-b5b6-e5fe2f7c56bb\ncd23cfa8-f4c8-4a45-a3a9-73c21a9cbf24\n42e61cbb-de76-420b-aa6d-c677ab067414\ne8ce12c8-a2ae-4954-8403-6fa68cce50f2\n788c79d9-5c75-4fd4-bb84-c0a15227e12a\n1b88c112-309c-412d-8765-e098470c2aed\na89a7ce1-7f05-4e4e-896a-922a0bb15ddb\nba957b2f-43f1-4408-b19f-eee2cbd98afd\n27ec1965-4232-4179-a667-02a79067fa8b\n4dc65a52-0802-4279-b7f7-c26411566188\n99c433ac-a540-4fcc-a337-420ef4a6ce5b\n2cbab566-9f06-440b-9248-6186f0133719\n378c5e96-977d-4cf8-b34a-70c062f13d94\nb220ed53-dbe7-4a70-ad0d-c95008e3397c\ncfd7477f-24f1-42e2-a317-911a1ba6c791\n5e0de40f-9883-46c9-bf18-222ca1919af4\n60c30b4d-1cf4-4979-bb5c-416a8ac53655\n5c9d902a-c0c6-4ea2-8c46-5da16c52546b\n6b7ccd6b-733e-42a3-b22a-0846596e7661\n34a5ca06-e7a6-4edd-8060-8a73c783a0d6\nc495802f-bbdd-4166-ac3c-e8e91415b9d7\nff0c6268-144a-4d8c-8cba-123917556b4e\nac0ed6d7-8651-4a51-a5d6-b8510483f486\n32d77cf1-3a5a-4adb-a2b0-0c92c8e630b6\n9564901a-f870-4913-88f0-caef3e489d3b\n0337b8bd-50c7-4796-9edb-02be68f47157\nac0c1687-be73-404c-b8f5-b13afddf443a\n675ca051-9eae-4086-97dc-826d315dae91\na55e29fd-9514-4a0f-80a1-942f6eef0c7f\nf0cc2ea1-c593-4c7d-9bc4-59fc1845de9d\nf3ec1627-a2d2-4c7c-ab34-bcb42908c680\n076ce6e0-9f24-4597-918b-3c00629b4b3c\n968d0905-98ec-4acb-83b0-74d8f11a6f77\n3e2ae7b4-1025-467d-b42c-d18d916b0fe3\n78d580db-b250-4a6e-87c6-27246fcc5c4b\n11e69c3a-d4d0-4be7-808d-e7244141d11f\nc256aaa6-f0c7-408c-99d0-2f5b96c219a5\n0a42142a-c849-44b7-9b71-112bdf6f51da\n5fbb5f13-4575-4fc8-b331-b26c1d0f2270\ned97b5e7-5193-4a11-978c-1375107c206e\n860caae8-f05a-4e27-b7e1-c55c33407cbc\n136ce800-5eb6-4312-b33b-1ba14c48cca7\n7ae22dea-5752-49c6-858f-fe6ece30241d\n4e4415d3-ce99-4aa7-a732-430039674c8a\n4aa882aa-655d-4a2e-8030-b52501055c7a\n367ef8bc-b3d0-4857-8522-286feed641b4\nf9f76078-eef9-4f51-8b96-c61462e0f497\n4b73b48f-72e5-4af1-8c52-187d7ff7b603\n5e167320-e62f-4945-8da8-c88bee93599e\n4846141a-049d-4cca-849b-6c61423f9309\n70b01778-405e-4cfb-babb-764c80adbced\n9b3f4514-07bc-4286-8108-ae7a9c5b744c\n11fd9c3d-74c5-43d0-8765-d16ffda20f3c\n8138d599-9ab3-40c7-a4e6-6fcf6112dc7c\n72150035-e687-498c-885e-ee3b524db551\ndd8f11df-86c7-4e12-91a8-4831bedb54a1\n7094f7e6-fef7-4090-9958-61ca6d3f0608\n87e0a322-3775-418e-a024-afb5ca9761a8\ne873e0f7-bcc3-421a-9d33-95247777b576\n34768506-ac0a-46ba-ae52-56dd873ff30f\n4b8d09b1-d4c9-4cbb-a261-94badb982c91\n63a2af37-78e0-46e3-b4a3-cbd1bd797c31\n48697229-bdc3-4956-947e-3c83d7d8855f\nebab0d66-faa1-403b-ab01-3c8423ffd46b\nde757c57-26e6-4517-8762-51ff6323f42e\n8ac092b8-974d-4ac7-a40b-de4736a289ce\n51c2ebc0-ff8d-4542-8cc7-de65b56bd9f3\n4a260707-2848-4f06-ae45-b486b3c3ca10\n313e5080-d4b3-4158-a5bf-ac916ea6cede\n392db78b-3e7b-437e-b5b3-cae6316d2001\nd0364503-ba82-4937-86ca-81a9a2b03008\n9353ff16-67c1-4e2c-af1c-8eaad3848f9f\n68ec4e89-099a-420d-a952-1bf2a32089d7\n600a696d-fe95-4444-9e34-afc6a999d30a\n95b62550-4b6e-49e9-aee1-ac52dfe22fce\n895fdabd-8d6b-4f44-a28c-2612123cfb76\nd51bb803-aabb-4b70-ad62-865111e60e62\n3ae0cc76-2680-4126-88a5-2c8d8843f090\n65ddc311-595c-4f15-b79c-92d4061e5dca\n133ac12d-0738-4986-8f6e-00091749f2de\nfbb9bb02-83da-4482-8150-741c82bbd907\n1ec8fd0a-7389-411b-b34a-ee0126f9a346\n476c659e-6120-40b9-b3bd-d0a5779f50c4\nbd6e28f1-a391-43f9-8b79-5c50d3e327a4\nff19865d-894b-47e2-a57a-005d321dffd6\n7a6f6c81-017e-4070-96cb-592bf8082f09\n5413ddf4-570b-4a59-8d9f-1abb491eaf01\n61f51735-281b-4d2e-ad25-42130c3be287\n65f401b8-cd80-466a-bcb3-3dd415c9f305\na0e004c4-08a6-48c8-9523-5ca8f5fbb523\n5116e69e-6213-41bc-88de-346203145318\nffe6e93d-7bc5-4eab-b617-9cfa978b8094\nee55ebbb-613c-4e2e-b213-fe0970f31010\ne33ccb9f-f765-4740-8ac3-48a63587a2d5\ndee1f418-c68a-4381-a436-98c1610af89c\nf4808674-8f23-42d6-b26d-901580862574\n0275f9c6-3da1-4bec-becb-69a19299c896\n7dbe3940-e90d-4761-967a-160cddc9382a\n38a5e7a8-232d-44de-bdca-b49880b85640\n4cda7fc1-cd28-4f7e-97c1-086596dab8bd\naa3ece92-f9c6-4e6f-b679-eb66f7d0d61b\n36cd1f72-a46c-4a4f-b6a2-e9909e519ed9\n9423469e-3852-448c-b72a-33f2cae27c66\ndbb2077c-2390-4d8d-bb5b-aa1166ea81c9\n165ce814-5c2f-4ba1-b681-741eacfeb4f7\n0592a5da-ae86-468c-949c-c70f8b415c5e\n167aae6f-a312-4bbf-9f43-8023a5249bcd\nd11e7168-1c56-4800-a489-ab0627f24580\n9c70c2a1-b2de-4a46-90a4-89afb569b580\nc9b7d1fc-688a-4245-87c9-eb60d2fa470c\n2555c6ff-dd42-4806-88fe-08f05c71c5f1\n35b18398-e8af-4f2a-94e2-d1ca8596b515\nb0c6cabd-556a-40be-a698-19ea7266cf43\n7e530b94-e08c-4b9d-8ca2-d77994a0a857\n7d1f00a7-566d-4bd8-b53c-1b9a5e132675\n402cc6c0-4397-4286-aec7-7caabb3cce85\n9bf1e767-8307-4fc4-ab27-3d00857b2ab8\n4af4ef42-716d-4f61-8c4c-2f441571118b\ncaa286a5-f0c4-4908-839b-38cb9246dec0\ne33d0f6a-a414-452f-943d-820cfa0c2fc7\nf5220764-1b21-4b42-a814-8733a104873e\n5404ee2b-8448-472f-9d29-0741243dbc51\n1b39babe-18b7-47f9-ab4f-86611e9c69f1\n3b662bed-149b-4284-adbd-fc99f577673f\n28fa15b6-56d3-4ed2-a571-fcce37981e75\n33cd0e76-72b9-4dc9-9a2e-cbce2fb8aed8\nd565f9aa-b5bb-47de-bda3-71089d9b2d14\n7d1b6bdd-e6c2-4436-ad51-020e5c3b415f\n67c9dcfe-3526-45a6-825e-699d0958e335\nd8846e55-0263-454c-b486-30f021c40e02\nb58471f8-2f96-4d07-a066-87eab19654b9\n4373f5b7-f134-4fb8-b12d-f5d890573165\n6a6d90e1-50a7-4edb-91e6-8e778efeed0c\n5ce6a844-4741-4336-b65c-39ed6a881245\n5faa68d0-4a5b-462a-b9d9-be4fcc5efd30\n429e2343-7957-41d8-8cca-a25eeb426e8b\n0de96af6-93e0-44e9-8877-4fed9dc0e2c0\n5b95bf78-c754-499f-ad94-280f7334a445\n12542bb2-fcf5-4a0e-bc80-bcfe8abcc9e0\nd0b09f61-7b1c-4bfe-aff1-9fe1755f33e4\n852e0574-81ea-4117-8edd-06e14a239679\na03e1342-45b7-4331-b13f-3e3ef5fe5ff6\ne62a48e3-825a-4e79-96cc-e8d36dbc1440\nb0301598-6d26-4e5e-a756-1ca8977e4339\nff203f4d-eead-4e4c-877b-86172f276e70\neaf7441b-78ba-49aa-93e9-dfe508ab950e\n42b7a5e3-549a-43fc-8e79-6a0f1e92d207\n82671ff9-5b10-4dfd-9e43-eed24c812b80\nebf16fc7-13ec-4448-bfb8-45b4a02702d6\n2626194b-39d5-4243-a045-85a3001a3579\n2aa93385-736c-4b1c-a2e0-dee1e3327219\n59d2f190-cb1e-4b57-a82f-3bcfea3165cf\ndbeb6f2b-fc0e-4984-9681-4bab18e41a25\n839c47e6-0b4c-4677-a78d-b5b954999198\n5024ad4b-45f9-49c6-bfb3-99bc0561803e\n1d68b10d-0428-4400-9a79-09cb7cfa9f46\n5d24f3a1-dea8-4f34-bf5c-4055c2648429\nc2a3b40b-d5d1-4463-8432-012bef48308a\n7548276c-dba6-4123-b789-d17c4d99a872\n349133b9-a7f3-43fc-9997-9323f93a32bc\n277af426-410e-42e9-b49a-19151a039221\nba23fff7-45a8-4239-b4e0-1d411c2595d5\nad9a9a20-c0a1-4a52-b060-be99562f45a6\n94e2644a-cd71-436c-b577-fff5ec8c032e\n79866269-c4dc-4a33-a604-e61f3cb37757\nf25a4ab0-fd76-43c6-9915-bde887efaf21\nb3ebb044-95de-4ada-9626-70baff6645b7\nc82263a1-c12c-4441-a98c-bfc84754f443\nfba5598c-cd48-4e2e-aec4-20301afec300\n004260d3-a5c7-410b-b749-8d116781857f\n4c82dca1-b4cd-4312-97df-388e336751c5\n9a94d06b-8ec0-4b5a-b390-de7c2111ddf0\n3781ef5b-ccf7-498e-9cf0-ed567247b2a5\n14192a5c-e818-413d-bc07-0f6faac297f1\n71d7dde7-5231-4cfb-9848-4f130fc47887\nea07b669-ecac-44b2-9aff-ce9fc256d8ec\n71840715-1ca9-4c10-b93b-bbe80940d780\n822f7793-51ab-4af2-9806-06b5729aed8e\n3797d3b7-77b4-48fe-9115-c74477d31bec\nd2edc28d-d317-4b6f-91d2-63e605183774\n853b5520-a125-45f5-bf6f-06f85f32e4f5\n4d9ecd7b-85f8-4a1e-bbbf-6c4da66c90ca\n6fb63744-0110-4321-aaf2-6751b3b381f4\n8f3a2b81-f5d8-4d60-a8f1-3b2de7d50270\nf8cfc9f2-5e8b-4fef-88d1-ab5b73244a41\n2398ed46-05d1-4d27-b0db-ffec43e3111a\n46ca433c-036d-4e4c-802a-7e40f99a8dfd\n1921361d-d99c-40d1-b550-c2f96aefdec0\n3663c075-376b-479b-afd7-de4dca7f2528\ncaea42be-8a51-48ed-9f23-eed03b045840\n08c81ecf-c1f1-4801-85f4-0b3d0547d4e2\n10b604c5-8935-4d2c-b022-60da65880fba\n27c0d70e-0ec4-406b-83b2-fbaa11ad350c\n36418342-931f-44a7-a813-268dca1f1a53\na0a14b43-bb61-484c-9c6f-9414947af1e5\ne1030aea-6a28-4362-93bb-2babfdaf7efe\nef120d93-3dd8-4478-ba29-5ea1eec4e8c0\n2c21faa3-994c-4145-81d8-9cdc902eb234\n1c8d8b7e-5fea-4203-b6f8-7fe930d29bdc\n0020196c-c8d1-4d37-b1f8-a95755adf6b0\nf19f18d9-3dc3-4d2e-9282-e5278d162f5a\nac357087-5f7a-479d-8ccf-0ffdea83c65f\nd7e921ef-11c4-4420-bfae-371ad327f09c\n2d450556-bae1-464d-b0db-b6293ae4e2e9\n1977932d-daa3-4f4b-9ab5-22c27dfb636c\n24add591-c1c1-47fa-a5ff-d640293901fb\n81fa7844-6a2a-45b8-9d5e-b68f9ff99d21\nc67d1724-9ff7-49a7-b2ad-b1b5690cbb07\n92fe3f0e-8842-48dc-a890-e0e26850039c\nd6bc2a87-5f9c-4fd0-8472-cdd8235db9f9\nb39009fd-c141-411e-8181-0cf82e75d805\n989f4bbc-423b-4ded-8838-e6a2b9745988\n0f4bdd1a-4c3f-4fcd-9e26-1cc8e15e31e2\n606df13f-c4c8-44b7-b1c3-a6b80158b713\nd9fc2ac8-3343-4e4e-b461-2dbd7c7a48f7\n43b58c74-57d8-4db7-b510-fa4a00680707\nb5cc1770-5097-4b9d-8c4f-e3e9574905d3\n809d80ff-1b45-4e1c-8429-ca9d844a50c7\nd31232e7-8398-4cb2-a03d-dd4f739ea8c6\n17b4037d-06f3-4dbb-9c96-a9d07793c450\n68f7e54e-46a1-48c9-8acb-4c972522c78e\n47c9d116-05d0-4181-b146-981c4a53ca8c\n6180b5b9-fed3-471a-841b-be9337a2813c\n54ab2fa1-8a86-4331-9858-c6ca7e21d3ed\nd5974ed2-d560-4f6f-adad-9032ec6f931d\na01b56ab-d16f-4dc7-add2-b851eac783f6\nb0ee7808-4bc3-4393-98b5-c488774fc541\nf595752b-7f87-45dd-9dd1-232b0a6ce43b\n46c76deb-4dba-446c-b9cf-e36dc62ef71b\n04ae7b64-7663-4a6f-85da-3301a2a96907\n8ab77c99-0c4e-4341-975e-77b0addecbe4\n7f76d9c6-36c0-4578-976c-890c7cc3956f\n4ff4cab1-35a0-4253-a623-d929a5949d1e\n73b3ef72-fd2d-4c9e-9e35-fa6e54c68be0\nbd8aeadc-de52-4066-9cbf-4dd35aa96f9f\ndd2c0756-76d5-4932-9926-35460e762f73\na429623a-e1eb-4ca2-b309-784139270ff2\n5d904dcd-7bed-4891-8207-7db967298caf\n389d155c-19a4-4660-b522-4de2dd5d8876\nc8833cef-971f-4da7-9f44-a124268496f9\n14fb59ec-fdf7-4924-9395-0e7805c775d8\nfdb69be2-3d60-4482-ab2a-428ad61027ef\n104bbfd9-db2f-462e-8b76-47b67f843685\n442a4759-ce22-4283-8f2c-5ed939236037\n4bc553b5-f089-413e-a61f-e81dc8d8fdc1\nf5ab02df-8f37-4f4d-b802-710867e8c130\n2c8c108c-c5a9-4616-9a5f-37041b54e614\n80022f41-20e2-48b0-87bd-2f932442d261\ncf6cc7ea-67dd-4096-a566-fa8f2e05fdf1\nbaa67aeb-de0d-45c9-a1b3-0032a3d044a5\n8022848a-3458-4e3d-aff8-6d512f200ac1\n08964817-2f38-4be3-8b79-1444678f4568\nf21d1aff-24a8-41e0-9a2a-1d221f501ef2\n122a0311-17c5-41b2-938e-e59f09b0c30d\n95b1ba8f-1d17-4d12-8c0e-a3daa884bcd5\nbaef77d2-f903-41f9-b28c-73b9aeeafe94\n64a64405-3f99-43f8-b5aa-887eb0c66cba\nb63d82db-a933-4185-b09e-fd80ba8a6012\n14949f42-aa09-449a-97a8-c21ae4f5500c\ne6cbfdc7-6f4c-42c9-851a-518d5000c3b6\nc5871832-7d7b-46f1-aaea-941cb53a7c7e\na15753fd-c2ec-4bbe-8445-1bff12db15b4\n499f51a1-e353-4a01-8036-b4049b0a5e2f\nd63c88dc-3745-4c42-b7f8-39978ff70c37\nd0d8d613-91d5-4081-9bbd-33bf48511026\n4d568ea1-7e54-4706-ba25-2d1f240aae15\n8bc2a327-c1fc-4677-aa31-0576bac45085\n9ae48f82-0cad-47c2-9db6-74fe57a27b9d\n807d633b-cf27-49b4-9bb5-c65f439512aa\n37e74959-387c-479a-801e-11dc42471686\n94bda3df-f4f4-4634-bf20-3f07464795ca\n0d9e0101-bee7-4fd8-a8f8-1bee8d7e9ef0\n984d4787-c426-497c-a7d3-658b1127f792\nd0a732b2-ad7e-498c-a742-a9544d5d7d49\n3ffbe62b-8290-4680-9333-253c1892493c\n0ee0b053-924c-4f36-861d-d86e4bd65d04\n951a8420-10cd-4523-9c94-85059b92e3aa\nca300d59-f7f5-4e58-992d-a7cb3539b684\n4cb24c89-5568-45a1-ab6b-619f258ddacc\nddc3ea94-e546-4f42-bf6b-3f6f5928e3d5\n284c7f57-87f4-4b7c-bd9e-d1cba5974237\n3a8be553-073c-4a42-92d0-7ae0638fd576\n91c90209-9c86-4231-ba33-84b3976a08cd\n770233ea-a41c-49dc-8c32-8652408ef1ed\nd4c52e37-eb1a-418e-964d-2b9d4070a2d7\nb771b398-f697-4d9a-939d-dbc034f770d1\n004cedf8-fa68-44b5-b3f0-86c21fd2157b\neb500be2-3d83-4a28-8561-d7789e3f6f18\n7b039b40-ed75-42a2-abf1-f2e33e39d99f\n6bf3144b-96a1-479a-ad57-ce9a56a332fa\n92d6c4b1-d8c4-4748-a497-f78fec222a65\neaf1f849-6caf-41bc-956e-f4c480fb0c29\n99d8715e-6c8e-4691-8d67-9d4c303bd0e2\nc876bb67-856d-4853-8dd4-603d8831e8ea\n79c486c7-59de-4250-be8d-823097261e3a\n71b0d04f-9069-4b8e-9429-eadb1d703cdc\n3223c860-3328-4926-8518-6773ac924dad\na1c6b3ef-d275-41c2-8d82-25b79a3e09be\nb877d62a-a4a2-4104-b8c8-f0ebea9765e9\n6cab6d71-5b43-4153-adf8-aab3e8c16a9f\nb367ba50-a785-4328-aa72-65d6eef15fc9\nc78a7255-88f7-49fd-82b3-a8d5145ebd8c\n4a6cd8bf-d703-456f-8c8e-e63a8159b201\n9510fc56-e0c3-47b2-b88f-e83ef3fbb7e0\n5756bd25-27ca-4652-83d8-12ed0be98d85\n40449ea0-fb44-4792-b787-28a1856b3211\n99799c89-e094-4cda-b3d6-a0701c03c629\ne2868699-23ae-4d49-a6f6-f286e8350b1c\nda3ae15b-c13e-4cbd-95d4-cc86cf0078f1\n90a7de6c-626e-467b-bb43-1ca77ac27d55\ndfcb597e-cb1a-406b-ae25-81bc44d88ec5\n3f45a55f-834f-42b0-a257-cad7e0be5d94\n16b52f27-49a2-4a70-acc4-fcc3dbab557c\nc8ad6a06-02e8-48b1-a7df-77e9c031801e\nbc8fc4d6-c77f-4744-9de5-d41904e545fa\n15b5fb63-89d5-40d8-899e-bd8d43cd7543\na3dd3e52-2da7-49d4-8238-603cd98f0b89\neda9f2c4-5a98-4341-ae4e-526460c9d37e\nbf4e5aee-ae97-4bd3-a34a-e99e8f510b9e\n3a13d9d0-6dc4-4e01-a459-cab86392131d\ndada9871-805f-4ac3-b4f3-8def6b2b221e\ne2d9d51b-2c1b-451a-86f8-bbdbd376d010\n6b72613c-4070-4848-8248-167982e73059\naddfc65f-406b-43c6-9adb-9f9148fde5c2\nd56400db-dee2-4a53-a3f3-647bf577f2a5\nf3cc7890-fea9-4a63-830c-a4523232f19e\nc1e79501-0652-40cb-96c8-4d3dcb604a34\n8714e79e-3b38-4b44-ab2a-e12cb3b69f4f\n0147cbe6-661b-4e1c-a468-3d023f389aa1\n2426d91b-d517-428a-a3f2-d1827d7f720f\n1845ac7b-be77-4a66-a2a1-d9d734b28ab9\ne5d7c27b-0b58-4436-bdc7-c67267bae000\nf10230e7-e73a-4b91-b36e-667dc59ddbdf\nd183ff5c-d59a-4424-b740-62521b618e1f\nb6bbecae-523a-461c-8387-aa738fb01ee0\nee87a3f0-4fb5-4783-8beb-b8bd3e04b7db\nb3250f40-bdfc-4f03-ba7c-3bffd1d60d59\n57da5c0a-86ef-4a8b-bc86-f9d2f893b578\nfff1e40e-190e-48b4-a165-b7a48c84cd1e\n2c29aca9-fecc-454f-92ef-bedfcdcfe6ed\n2b927903-6b9c-4ef1-b9c9-c8907a49c639\n10f20464-67fe-4ae0-b514-ed4edbf139ab\n31306b2f-6e45-4112-bbda-39f415fafb19\n7880bbc4-9798-4dd9-a871-95dfb05c625b\nda2da6a2-8d5f-4def-928b-8fc00815cf63\n470e07c5-6525-42db-974f-6bd875bf6ff5\ne08832ba-0a50-40dc-ade5-805745cacfeb\n1c437842-990d-46a4-9fa9-d88cf5690e8f\n8090aac5-d7d1-4e20-a949-ca957c3f1fe7\ndda4bd32-7dff-42c7-989b-f0fd5e5a9e7f\nc04a5bb2-4f25-4c5a-bef9-b110ae4c92fb\n6159ce4f-c051-40b0-9096-d6008e08d327\ncdb2bb03-b19a-44ed-bd8a-dde11f0f8670\n214c3490-9cb2-4cf4-9f06-88cd00582f46\nf8dc13d2-79b0-4e67-9a5b-cbc1d8db672c\n686aa0ef-4131-41ad-9765-b30267d1bffc\n9c0dc157-37a8-490f-8a8a-3f7a04488f6f\n8c54899b-ba42-42dd-b2ea-86e33aa28a1c\n95d4dc91-ccde-4b34-94d7-d04f4706eff7\n8559b8fa-e28c-44a5-bd62-43d731a3f99f\naec2f8aa-32ef-4be3-abb2-2e513136cb6a\n0a286a95-ebf6-4d8b-9498-4a5ea32a49ee\n4abef457-5b35-471e-b154-67b737fe30a0\n7a84598e-5373-4a4c-9381-e5369c57acff\n58f6b4a4-cdb7-438b-824d-dc82a3829656\n11331cfe-e6da-43a5-9f96-e1b77c7e1450\n3bf9a930-5caa-4069-9aa3-069432affdd4\n01d54b2a-7666-40fb-8954-3422f17bd4c2\n71132b58-ff69-4f28-992f-615b1d69b6b9\n1f73c9bb-2b3a-4e5d-bf4c-a9a3ff5b14b3\ne040da05-63bc-446e-9508-01cc850e6f75\nbd2682ff-5bed-4eb3-ba73-78e0ce699342\n24f606cb-fd78-4814-9ce4-7e0dea90a068\n87d0e685-945d-41f3-ab94-7fd8378bb5de\n6a6483a6-3193-4b09-8589-e266f7ace9e8\ne7cb70d6-79ec-417f-83d5-9e67f095b2ba\n86986393-302c-4f37-99c2-e5a05033d58a\na24342b5-748b-4888-b1b8-291589adff76\n62cced83-c1ad-4795-8705-380fe6e9878c\ne2ba0548-6a60-48c9-b93b-13a92bb2c104\n362dab5c-ce6d-47c5-a666-83577067ca74\n9e1563f2-defb-4e60-b135-0eac146f8f3a\n6c52bfe1-6f8b-43e7-8801-c4cbda453cc5\nd886abce-f0fb-4364-904b-5e347281e56d\nf929e662-fb30-46fb-81ba-30362ee3dfba\nc1a0e58e-2fed-4650-8c82-352b1a94638e\n93a5b1ad-60e9-47b3-afaf-6256a5859847\n5ea8c039-f3dc-44ef-b768-65744bcc2e6c\nf44aacca-5a46-4006-8b5d-e2163420ed86\n414a7700-ea60-49bf-89b4-331e894943d3\nbe6201ec-4ae8-4b11-9cbb-e11efb35a375\n56079799-21ef-4d37-a36f-0cafda8fc7f3\n58a655c3-004e-40cd-b8d2-1007df21b511\nf681ddcd-89eb-4ad1-80a1-1718e4e4cb90\n89cbb75e-2ead-4a30-bb90-0aef9aefac18\nbe23d6f3-f92d-4cb1-878d-186a242f3ae4\n482dd08b-3044-40f6-af64-8cce5aaaf11d\nf29d82af-e350-4697-9dc8-df00c9a264a9\na7712284-5f53-4ea5-991b-2aead1835f99\n8f166d46-269c-469a-998b-760212c24ed4\nff41d2f7-d27b-4782-8b80-34561440c521\na1e92b67-4d2a-4717-9725-5beb63af4cea\n8ce76304-1598-4ff6-bf0c-3cc6df767358\n399e3bd8-913b-45fb-9a19-a2de0dc094d6\n83b2523a-00d9-4669-9dc8-83c288cece5b\nb2898875-0b13-441c-858c-2cc0080a3465\n99f13fb7-c5c2-4df3-b489-b00563148413\nb75669db-86cb-487c-86eb-dce3108b622b\nd29dbb7a-56c3-4c03-b519-325a5cfa16ab\nab68ce90-6f73-49fb-ab3e-ac8504d8a7fc\nd0118371-4c31-4fd0-bdf7-b1cbab0ffbc9\nd052fe4e-77aa-4bd0-a85f-e0b7a880790c\nffd37d3d-ee1f-41a7-9cbc-69cb3c9c72f6\n897af8c1-054a-45b7-908d-eb86136e1e8b\n9d50baae-f3cd-4177-9cc8-a4713457ca96\n28cadc99-0a0b-4bad-8c38-627452e8d5a0\n59ed4dce-710e-4c04-a74b-ddf1f75d5f65\n1a4f0bc2-343a-4433-b622-7e01fb424194\n91d587d1-67d9-42ca-a7da-2d6e3b816145\n928b9807-29eb-4c94-9e1e-87f3e7432422\n0f57a651-1c47-46f2-a566-74abe8fd3c8f\nd1e935d8-fa15-420d-8ecb-72d8555579bf\nc0808922-2e19-4321-904f-1b10ef073ec7\n293e55fa-28e8-42bc-89ab-3e68a7713ca8\n6cc46b7a-939a-42ed-b665-d97ec6d7eb7e\n8d5d7879-538d-4f22-bdef-873f0a590e72\neac80f4d-5de6-49fe-92fb-9789f47bab19\ne5d9e956-6bb8-4db3-9a28-264d74223462\nd69c8721-68c2-4097-a7ca-a3d7f77e5cae\n2f53da63-977f-4991-bc14-d38630a041f9\n89d4ba0d-6f64-42d6-a2de-91269cd7ab2e\n8affc164-a6bb-4cbf-a439-c6f83c67ec7f\nd057d675-4552-4744-82ce-d1da40432478\nb9600347-be04-4b86-b85a-aebb5a78c867\n1e6df92f-13b7-4977-b66c-166edeb208f1\ne5aba100-3b31-4b0d-8461-bc8dcdf8cd90\n5a0c4d3c-e38f-47de-bbfc-ffb7f534fec9\n5aee3445-c06b-4465-9848-227160c91a5e\n3e00d9c7-3f72-4288-95b1-b6601ba3ddc2\n0a215ca0-e416-465e-a99e-685a7e8381db\naaa819db-9ab2-482f-a81b-4298142363fc\ncd7f5e2d-ec03-4407-aeb4-76d08d13fba8\nc72ebf02-47b1-42ac-abf7-b13efdb46afc\n12e36ca6-bd81-4441-8242-e49e6dbbe4a1\nb88c17cd-e79c-4e1d-8c50-7b2fbe836035\n89912941-91bd-439c-bdc4-a20a8c0b9516\n6e7f0bd8-3ee6-4381-9bc7-8513f0317721\nc5e7b320-13f2-4455-ae06-1e39d4f6c87e\nc12edd05-08bc-4f62-8f95-f5be5e6dcc3a\n220693e1-5d14-49d1-863f-bef6a3005f9a\n123e6eff-611c-4e7e-a805-a8c3b19e150c\n13800501-894f-489a-b3b8-aadf68607dd0\n46a950bd-c228-48ab-bafa-e6ab7407e7e8\n7f964a29-c369-4f19-8bd2-ec82a31b174c\n1e89fd3b-4d1d-4b1b-b922-f4f40909b5e8\n8139fc0c-158f-4a27-bf41-19b93d5e361c\nad9c8c4b-d9fa-4262-aed6-ad86a99c95a3\n97770bda-7b8b-4f46-b2a4-52838d58cb6e\nddf3c381-6069-4d1b-a9cb-4174e64929eb\n5c161a44-eafc-41bb-a9b9-164525596740\nec37ab36-d800-4654-8f85-d22e9103f26b\n33b68ced-1198-43d8-91ea-deb141d6c632\n55689d8a-bd54-45e8-ae6e-a6e4e9e900c7\n6a64ac8c-cee8-443e-9cbc-8b53a8c7bd1c\n99f7d584-6399-4eae-ac98-59218d243900\nf82478a8-d675-4b9d-9941-be1e4d6fbc09\ndcb937a8-de82-4d91-8199-ed9f00f33f57\n725c0817-294b-41e0-9b56-47c5dcec17a6\n65c64d70-dfac-4c47-a2c7-e33a8dd952f1\n9283c754-c201-417b-9aa4-9f018abd4e97\n509fb748-f4d3-477b-8366-42a3a6d44700\n3bdb694e-9f51-417e-a470-ae2a99741074\n6b03546d-c420-412d-94c3-f633bf88a3f1\ned8cb169-0d61-42cf-9d36-dd23f463ea61\n1effc717-8fe8-48db-af0f-f8f710d83ca8\ncd2c1bc9-abaa-415f-b3f4-400c8b9d1cdc\na1b2a2b3-7dde-4b39-be47-eecb37225b49\n4ff9286d-f6cc-47ea-b9f5-f6a68655cc8a\n7d68ef76-d733-41b2-afaa-fd52c481784a\n30e9f73e-dfc3-46a4-833f-7799478de306\n973a0017-23c8-4c6c-bbbe-b1a9c244cb6c\n6d2226cd-9aca-4088-a1e4-cf9102860d97\n380d1556-3b12-41ca-b112-1a34d12ddf85\nae372915-9dbf-4e1b-83e4-c055720b944e\n6e3547d4-9369-4a9c-aff5-80859bd637f6\n2b0b9fff-9060-400d-883e-92cfbb6ccaef\n33451fae-8176-4510-97c2-d600db443a31\n8e44e7e5-bbae-48f2-aa75-97a18e092c73\n29df94af-e463-4f48-aa44-665270804de7\ncb5dfeed-d32e-44a5-84de-e2a72fee0f8f\n4bcb00df-0d7d-4595-80c9-1cbada74d248\n678ff3fa-47df-4e27-9ac1-066d3490115e\n8ee04fc7-d163-41e1-a2ec-4d0be1bf2f3f\n98a3054c-65ba-47ba-a2c3-c4e66744688e\n2c0b7cf1-d2ea-4788-9fe6-33c0dfb32eba\n580db211-6c33-46f8-8ab9-8c12222497be\ne790b8de-b71c-46d9-84eb-eb5b9fcec803\nd926af27-23bc-4e2c-9928-471c5c910aae\n7deda6cc-5a37-4eab-a0fb-6f95320d42d6\nedd408fb-461e-453b-84c5-a42a0e55325c\nbc3365fd-1b62-4c57-b0f4-0bdb5be83da3\n66bfb258-899a-493c-af93-933cbc83e0b8\nb8e16494-56da-43d3-a2f1-7600507cf089\n3867105f-17f9-483f-bc7e-993cf018ccdd\n22abf4ae-643a-45ee-a08d-ac218e6b250e\ncd4f4801-d56c-4329-b0e7-d921a313967c\nd6eb3d42-f278-4a40-83a8-61dce3e30c66\n5690eb41-eaac-4f78-99d7-db2ffa67628c\n7f08bb66-c00f-481a-ad33-1869ae153a10\n9d323572-9bea-44fb-8356-a2cef1527fda\n1877dc50-d548-41ab-b51f-22f674d2aec7\n11129d07-fc07-4b33-ab3c-ddd120e208dd\n074bcd17-714d-40d9-905d-a3cef0771039\naf8b792f-21cf-4849-bd12-cf325e274c85\n124fbb2e-15c7-456d-b03b-971787331014\nc168aebf-25d1-434c-b90b-844a374fe9d8\n92291330-9f54-4fe4-8ccf-edb7c3c47dad\n37a7ad21-156f-47ee-b7de-d6bd5719821c\n5a2b31d4-7b70-40ce-925a-470a07217842\n5a97ab2a-390a-403d-b03f-440d0cb5e1d1\n50fb2269-e654-4e8b-ab80-b42a5ce2e771\n3a9bede0-b6ca-488f-af94-52c72be6c3bc\nfd354a6e-34f3-4eb7-b778-2687fcbef1fa\n03100fcd-dbff-4df6-a321-de7615ea6ba4\nf6d71c16-0803-4379-b4ef-401d79f4ee77\n1e478ea6-9233-4484-893c-66a715d0dcc9\n7f63aed0-be8f-4c92-9e2a-d3587eebf02a\n7a0b3a25-75c6-446c-9edc-141ea3ec06fc\ne96f8e06-b770-4047-82de-75f54dcccc56\ne3c4d34b-fe95-48d2-bad9-3aea312d89b5\nd15b7251-3862-4489-affa-992d7fe8079c\ncaa01f68-d49f-4e7f-98b8-80b4e018fcae\n7d3d17d3-c8d7-4360-ab05-c962f7fa7734\n4d1c10e3-ad83-4033-b2f7-59c14b3149d0\nfe615883-70d2-4402-9896-762e4958e09f\n01ae69cd-7640-4a0b-a106-67d9e81f0e94\nbae9bbf2-c3fb-46db-ae4f-43f1e2d41a23\n92a6d542-3e6f-400d-9ae2-d9473ccc6d6d\n57e4be4a-5f78-4757-a8e0-37104f116b62\n2100e1de-8b81-4527-a51c-1dd1166fe7ad\nbf7045c0-a44a-4999-9bf1-7216955a7f58\n7519d514-fad9-46dd-9121-90644c771aa5\n5dbb16fd-70cc-420e-ac03-ae1643544f4c\n1501d3f4-0c51-4861-98d0-afaae1a33b35\n393feaf5-fe84-40bd-bd48-75c6d6856f10\nf70e1557-0bce-4bb1-a27a-fa129e3a3076\n223adb23-266a-4a4f-b6c2-d1f422bb917e\nefa68447-4934-4b7f-b1a3-a9ba0f9067ed\ne7b9a938-a53f-4c99-9551-d829d3451e46\n730393d3-aa35-4694-9edd-446358cca4a9\n2040c32f-0e44-43d9-8ed5-a60addac343b\n45615e9f-47eb-4658-ac1e-73441e7b8acb\n426b650e-7956-441e-b8af-d1fa4f2be82c\n2c4215c4-b1e2-41d4-8749-68e838f57aa2\n661b57eb-87db-41e2-a6ac-088cb1e85feb\n51eefd3f-7916-4e91-9bb6-74da40d0cc3d\n8cc5c0c5-52f5-44a3-acab-a45ee20fc2a6\n907bf7a0-eee5-4bf9-b28e-d76668e49600\n422e6a5b-7edc-4d83-8e5b-203f88cf0b68\n789e2f2d-b1c2-4752-9a66-5a92cf489f17\nb6bdd2d6-ba6d-4105-8b6d-2b9f4cef7025\nc8003d7d-a4e9-4946-89c3-5bf12e7e0794\n05bec1c2-82ce-4d28-8da5-5daed227583d\n5d788b2b-4f92-4d48-b00e-2529d165c776\n5a209d0c-d326-4126-b657-9b2f3b414240\n66f373aa-4939-463e-af76-743f46cd53e4\nd6e75df8-75f4-4f76-a22d-f6e99f8fee71\nd5249743-4050-4fee-a953-2b81fed54f3c\na6699828-cdd2-47a0-8418-bb78d6122aa8\ndaa35a57-4987-4ec0-9255-38c5b7e3be70\nf134d9f7-a629-4df4-8d56-733463ac7d90\nf0411074-4894-4e0c-9179-8327d55ee635\nb3e63d06-553c-4f37-8c64-f508d3014980\n25d35f30-184b-4be0-939f-b7a4712c90f7\n96a51bdc-a440-468b-8461-13ef7fb0c77a\na8df7d8d-386b-4d82-99cc-1301c3b32bb8\n8da4d12d-cb79-4f36-90ba-1f75a5d4a766\nee493b49-c579-4f9c-ac78-fa265c1b692a\n6ffaa9c7-c34f-465d-9b3d-f4c5bc490f79\n881a18d1-6535-4060-ac98-f0c0d694aa9e\n2858282b-ed79-4127-8a42-6f10919ef762\n9dcd3d68-81ca-45ea-a351-cb49b7a7661b\n8c5f5135-7670-4204-96ad-0cda5ee663c9\nd61719a4-cd81-40fd-87b5-f61145909ec1\n21c18f05-c3d2-421c-b68b-4c2c6a51695a\n37ffd7a8-3651-4c1a-b6bb-eee70e2dceff\n842f2792-c2f7-4652-af93-963b9bf604c7\n4dc5b5c7-4067-4e33-9b9e-17067e424ca9\nf1458579-9aa0-4af5-a593-447bd263ea9a\n9036057a-5e73-4b84-9213-cd4ff21e7367\ndc821e6f-0d0e-49b4-9e56-c6c957ef0cbf\n56640b8c-a3d7-4ad6-aba8-489b696d302f\n9f9893ab-f7a2-4126-aeec-4d31efda6173\n04cb3c97-895b-488c-8b95-e400e8661e88\n71fb361d-b1b9-4ae1-955d-11532ac1de03\n8b28775e-6bfd-4e33-aae9-44b257f748f1\nd1fb8822-1ee1-4831-864a-0bebd65c24a5\n8eb36356-ff35-4e06-8c2c-12b2223285eb\nb98aada4-a119-4148-9006-fba0f0a5cd4a\n7b2a928b-9050-4d55-8f09-a69d1f19bba3\n0833ffa2-0d42-4f28-9f08-920a98d30faa\n97c5d74f-8912-4d8f-abe1-0e55e8d34915\n599583f9-55ab-4c98-a79b-228179e0b0eb\ne52bb5d5-ff87-4f07-bcf0-e8feb2ba2c54\n1cef39cd-1b7c-48da-92d6-3c8c75246a68\nbe383b49-697b-4e4e-a7b1-8fe5644b1ce9\n98dd904d-fd88-40d3-a5d2-c842a0304305\n2b7dee94-c278-4015-9807-976d0f33446a\n89c0b9e9-bc28-4cf3-b312-6a64c3b23f7f\nec2e4c6c-2d71-44fa-81ac-91357bdad958\n6bc7cb34-cfd4-42de-91aa-06abbe9f899c\n9caf9718-3096-4aa5-914e-f062f45aad82\nf3dc1028-afef-47b6-92e4-7277e51b38ae\n8d74a3cf-e7ea-42a1-8869-ec456e834ab2\n0e4a82d1-86ec-4fc0-9141-4cc9f2f5fa49\n2c4ff898-317f-4158-8eb3-034a83d8c3f9\n094ca266-d597-4eda-935e-8ac3e3dc18a8\n8408d520-9dea-4d2c-b550-89f3f6775bf7\n82cd5612-7894-494a-be54-e6f594663834\n9238e84e-185a-4e27-a493-4b2fe8901d52\n52dc3ba5-6d14-4aab-867a-caab1d935fb1\nbd6cbceb-3453-4826-bad2-0ec2d6270916\n0d7a0d09-0a67-40c7-b401-4204086a2441\nbc39281f-ad3a-40ef-9aa7-175b87b06c67\ne68e41ea-f908-4f36-b437-917545aca167\nbf16160e-6d4d-44ed-8253-f01b682bb1a3\nefd71c8d-7ccb-445a-8d3a-6062d623ff7b\n9b38c70b-5471-420e-bb77-26fc91e67b53\n3dee1633-8f80-4b8d-a649-20d2437424dc\n505f447b-4509-4b60-85a1-b8095d975051\nbf45452f-7eca-45b4-b04a-95e390d38a7d\n12313e08-cb58-4107-b526-761e691c775f\nf558b160-a2db-421d-9a45-83fc35e7b497\nf56ac6ba-549e-4075-84b4-e2a3f25b66d8\ne1f4da65-d592-476f-b70d-88014f7bc97c\n4709d58b-1e1a-4d42-92e5-06a560a49b24\n271b65bb-cc97-4bb5-b32e-fadf4a549ce2\n5e1be9eb-51fc-49b6-ba8c-be1803a432e1\n4f676ba8-1206-404b-b860-ad7aea7a92b4\nad423c6f-7e0f-4ce6-9614-c49108eb21f8\n0ea85e41-36de-4a60-85b1-c40fe3a9f95b\ne0c2faa6-e074-462f-a858-1be3369c3e5c\nd46d91a4-1fe6-4e1c-87e5-ae46b97ba631\nc54ff8ff-2277-487b-96ac-9f14e11f33ec\nc5f01b40-2a34-4601-bf02-c2a9a6765046\naa192bcd-aa26-4147-846c-b6f992332821\n11c93e95-d330-43ae-af67-e726ebb39967\n18387ad1-b8c6-4b49-89b1-b5eefc4cd06d\n4349bdab-c67e-48a2-9aac-1bba80c41228\nacae6aaa-87df-4697-9698-1b4d36a5395f\nad7667fd-84c6-4784-b2c8-7b84149d49e2\nf9b39707-d16c-4d79-b414-9ea5251810d2\n97812a32-53a1-4199-938a-b2caee1dcab7\nf612b746-e6b1-4415-a0eb-1c70d36a4e61\nc6c44914-04fc-4b56-b62f-62d7ac6d12ab\n7fea8859-995f-43ae-8b84-acdd1c1a8e23\n1ed962c9-c8be-4dfe-80ea-5c1f5e11aade\n2a3294dd-24b1-42e2-90e6-85ad653cd247\n17edd32c-a467-4b36-acb6-90ac64c936fb\nd97a3a26-12d3-4cce-80ac-8235a37a8228\n00345188-0944-4d99-8110-07c2528c341e\n057b945c-9c21-448d-8ac7-24545349b453\n0fd26c6f-3249-4fdc-8afb-9d0e42865f15\na9c54bde-04bf-45f7-a34d-fc9bf6ae40f8\nddfee725-e3bc-49fe-b075-c1391bb8b08f\n381b2c16-fc53-4964-99a2-f77521f72d92\n91ba62da-3d9a-45c9-af55-5141bba09982\nb8391f0a-f2f4-4da5-b90e-7c958ee7602b\nf1256adb-2ba8-44af-b543-13d8c0c64caa\n4b8100eb-7607-41f2-ab08-7f4998c12527\n83e6ac8d-93bb-4e5b-90ef-d05cb0859e86\n76b83ce7-b19c-44a1-a8ac-9f44c4e1d17f\n22a6d857-1d8d-48f8-9735-5c618091a469\nedfb5a90-1d16-4330-8f32-ca09bf07bd85\n9258cf39-872b-4566-981f-f16b70ee326c\n95ecf9e5-4439-4800-af9d-c967d383884b\nace9e89b-b820-44dd-a18d-caf0e7d6b806\ncbd4c5e3-e16e-46ed-b571-9736fb540be7\n87e17b6d-3171-4e1f-b0a9-d73c6e264ee3\nf775587f-9e96-4619-b907-613957d75b30\n0cec8cde-8f07-4e36-9273-0178ccfd9574\n13abf3ac-1918-4ba3-a335-160f9b9cb095\n31fc1d39-5902-4d68-8115-a974e85b032c\ndc62b794-0cda-47df-a1cb-446a32f0a848\n2e3f86f6-9a99-4d5d-ae72-0fa97fbf0f00\nd7e38c88-eeb9-4b2d-beb4-97565bec9008\n51047597-37fd-4332-bcf6-859321e7eaff\n0a1201c2-67fa-499e-9a60-59b2f3e194f7\n2804514f-5f4d-4dd8-9d1c-f93d54cd4cd9\n57b20e89-e336-4848-90db-cafd11464473\n1ea58e08-2b36-4e04-ac1e-23755a55b532\n887d835a-fd3f-4058-b31e-d733eb5a0d81\nea687e3e-3c85-49ee-bd08-d3082ceba9bc\nd6c0faaf-9462-41dd-a78f-259a7d7e478c\n71a261ce-458d-421b-8ea1-c4d745b18ceb\nc1dd82f7-4381-4af8-8f29-0b6f95f0ec7e\n345d5a04-6e2c-4590-9e79-1d97bba98cd5\n0f0437e3-87a4-4a1f-bc03-27c7d2311165\nf886c573-76e9-4c07-a1b5-d697ba5ee0a3\n08f1d22b-b11d-4486-bda2-0b55d58aaf79\n7f6bc527-903f-4735-a443-8fca81df239e\na6ca8388-32a1-4cbb-b5fd-c0c5b13551f3\n44cddad9-9f2d-46cb-9f33-4e305d8767af\ne063e67d-06a9-4473-9893-aba88ad5142d\ne33a37c0-6d38-4952-9744-619d16c57d97\n6dbc0704-33c4-4f38-b63b-6c15d94fa7ca\nd8b95ec8-15e9-4db7-aea6-9d77decbe56f\n48f9e6ae-1dea-401e-8a76-bd532ff0a381\nb1e65dc4-fc77-41a8-842c-dfcab8a75023\n25eeec13-ef86-4e2a-a16d-68d493caee4e\nff840158-8e0c-49af-a5c2-ecfb7d7f5935\n99b867a5-fc89-42ff-9480-7b9337982db2\naf4aa01c-ef03-48a6-bbed-afe13d6edc75\nda0eafe9-ece4-4254-bec1-5ad26cc799b7\nfed93cd2-5904-4fa8-b4fb-780c56b0b172\nf30d79c8-e264-450c-bd05-c8f54ae93890\n863001f5-c455-4573-bd13-3e8eee91eb30\n03b13e23-dbb8-4384-ba35-e3bc7735fb01\n2346de23-7ed3-476d-8dae-dc200f2ed704\n038f19f1-8f6c-4a30-aaf3-607e2ff077b0\n4f3be951-0fbd-4807-9df0-64b5d9c42bef\n3948c9a0-4b15-49b4-a714-78d9bb3a1514\n23b434b5-e7da-4898-a910-6cb206b5bf4b\nc65285d6-4a06-41d6-ac13-9827860abc9f\n93d6572e-c34c-4db5-9248-7053db835d3f\ndd093dde-c9de-4779-bafa-dfd909229ac3\n7881740e-de77-4942-9a1b-834fe0babf15\n4971f597-b179-4ca1-abf3-a4fb800323f9\nb41307f9-831e-4c0b-a552-42ccfeaa16dc\n67bbdd9b-c886-4e18-a1ae-7f1cac3b8510\na760ab84-4611-4b74-a094-287bbb0439cb\n80636c2b-63e5-4623-87f7-7661f6344abe\n24b19c2b-6369-40f3-9aab-7bc79385de11\n133f954e-0969-4c8b-9bb3-a40e06a74c8c\n6223f3d3-2be4-4f4e-834d-30887c006212\n29bdf31a-56df-4b94-abb7-8d374cafd7d8\n6e3f049e-f840-4190-a01d-9311def0b30a\n9172969a-ce9f-468b-ba33-acc3b813ac20\n4e58243e-b9b0-45fc-ac7f-224d973dd3c1\n5649fd39-1c41-4625-bcd1-423009ed0637\n872afcc0-3594-4a5a-87a2-e35a52cb1329\n72998409-bd37-4083-addd-55275a2fd6fd\n0584c03c-e9ab-4e81-851b-db48ea8daf0a\n0a3e4fbd-5814-403e-ae77-051f9c4b08ac\n4aa6200d-9e4c-4e8a-9d0b-1b503718553d\n2533a71d-0525-4852-a1fe-c37239dcccd9\nb0a52805-0c06-438f-93e2-54bfcbb9463f\n9d0035b8-44af-4673-a090-b29ccaa8218a\nf7acf1b2-251a-40f7-864a-b6ab8a8313db\n1222cbc8-8624-4604-8543-19e3db627808\ne7b6a5a6-cd24-4a49-b757-4bf0da9e2b99\n54349cbb-e14b-47c2-955d-c812278cf8b7\naacca2e0-8438-433d-baaf-e5e709f3971e\n4cfcb028-decb-42a7-a363-7561a871ff4c\neb146b5d-e8a4-488f-89f5-26bd39e3c8d1\n65d81296-c4e3-415e-8ba3-68f90ea185ba\nae206cae-5dc9-46f1-b2c1-dffc06f8bec9\nf6be77d6-483b-4687-b211-6bd3c2ca85b9\n617b935d-9436-49a1-93dd-6a7ed42d4a09\n88bb3637-9613-48fd-94cc-8191bc68a537\n237f773c-838d-4b67-85db-ea44d9ddc0f1\n9fd72e94-24e0-41f4-bfaa-498f253aa287\nd72b3ba8-30bf-4efa-ac34-42445107d829\n5e9b1b9f-033c-4788-a863-b9a1f118a899\n5de67568-5ead-48c0-9ad4-777bc37b8892\n17768e46-c950-4301-8edc-7691a051ad05\n5b84931c-77c1-409d-880f-827bc4368d25\n3048c4ec-c391-4370-b8b5-2ceba7bf70c4\n2105ce0f-eb79-4f26-aa54-882c5624388c\na324c733-4682-4387-8ea6-54f7a6569824\nd615ec21-117e-4875-bd82-df246b718f42\n4f34091b-d442-41fa-b053-978c5346d820\nae8a2b8f-4dcc-4310-9e88-5ad726093223\n5f9741be-73cb-4cec-9dcc-7b3e112b9850\n74c40f50-88c1-435e-a933-632334ecff9e\n77a9e774-48cc-4d2e-a489-088b726e2fe8\ndbc138db-07f6-4547-8b20-69bcf9bbfe96\n2e15cc55-4f89-47fe-a4ec-73d2efb41c88\nfb32d056-7467-4c0a-9695-cc992c6ec161\n7bf247b5-01df-4769-9cc2-38a449018383\ndd0c95f7-1454-42c2-be5d-2596c035f774\n5c312d7f-1f84-43a9-b4b1-0e8e549c4777\n660122b0-dcaa-415e-adca-a208fb995c11\nf4248e96-1e10-46bb-a00a-0abac6f79036\n292212f6-4896-4bf6-92f8-06dddf3ab132\n7cc2fcdb-8eee-4f1c-b3ff-cd64e991c8ba\n0bfb902b-76c7-4a40-b1f9-e4f46e9d3deb\n52be0f88-c43b-4558-9f47-e5b8e0599ee0\n67c95aa3-962b-4de8-92b5-201f001ed585\n5a431b75-ca11-4013-9496-174c09650aac\naa14c4a2-6b41-416d-a2e4-cd4805d95967\n579d978f-3367-4d46-a292-0dda136ec82a\nbc574456-1f26-4b1c-a2f6-c3d6d7914ce4\necc32c47-81c5-4ba4-b02e-2f612084f5ae\nd08446a6-3291-4590-87d2-f5bf04ab6fa9\n15a02a71-e981-49b3-9f6e-22e594fc3795\nd5e8b350-2655-4a20-b141-dd97c280d3bb\ne52b4977-e1c8-446d-bb47-baf8144d2c22\nd59c497e-2e15-4a73-b11d-05aa08579ff5\n4a59d6d5-8622-44dc-a69d-3a491c57d23f\n73183bab-0670-4e84-a982-d673e865c343\n495cc502-d127-4e82-b637-3a6dea122664\n2bd7e386-c186-486e-b86e-4f6bb2a6d291\n013159b9-289c-4f78-a853-ba024ea9f57b\nd4ba7e4e-f74b-4182-bb8e-d54bd5cced7b\n12494cef-ab21-4c99-998c-32cb16ca479e\n387dc1a2-7041-4495-85cf-7176aec8c9c2\n032cac6a-7890-45f8-a5c1-2eb9bec08c74\n72719f9c-8a2b-4aea-8cf2-ad46bbcc5759\nfd029c90-cd91-401f-9abd-7c603350eb11\n6610a71c-b5aa-40e4-8a19-334bb04c967a\n77b80b34-0d7d-4b77-85ef-c83faef98fac\nd50d24c7-8c94-40d5-a4b5-41e04363fdc1\n6e72b945-7ffe-4410-9937-f6d5fa9b1546\na4759b3d-9273-47ea-9b93-af4b5b10a16a\n21ebc46e-19b7-41d2-a69b-a0542c9dcf9c\n32fcca73-758b-44cb-b968-f663d715fb2b\n544aa645-7c00-4768-8fa1-cc930790e601\n42c367f7-593d-4818-93be-cbcc65a86f02\n7d8874fd-bb6f-4b6b-b1c7-3ef438665acb\n50164ceb-80bc-4970-806c-9471bcd87dd7\n4dfca5cf-2468-4d33-8981-6bbc2aa94fb6\n11bf4a20-60f5-496d-b2ca-cc66873dca3c\nbefbfe63-5fa9-4d0f-9493-9957ae586f4f\n93365bd0-8973-4578-9430-1fe13df762b2\nd9fe5a81-6398-4c89-b32a-840202caff6b\n3de83373-e2c1-447f-809d-48e1b6db0c70\n826b2c8f-380d-44c4-bcd6-10d234c3fa7e\n69d48b2b-8e05-4229-8896-2867920b0b3f\n1bb52413-2d37-46cf-860c-5b512bab18ab\n05abadbc-6186-45ab-8d0a-492da7ddc783\nd92d8b0e-8bc7-41b0-b04a-1914af3f8637\n82b9dae2-4a22-4976-af75-7c7f2d5ac0c1\n0152a2e0-f5b6-406a-8855-a8360074b7ea\ncf9f2f57-1221-4567-b129-93ba8221622e\n74fbe10c-39a2-4bff-a24d-83315975ebdd\n6206ccfd-f303-463b-846e-62df69894356\n4e476297-8140-4f0a-aac4-6e8b6f2a1bff\n77c0fd27-4137-40d4-8d4b-fe68d0c915d1\n07050280-5681-4816-a8fb-ddacde2bb02a\n06ba3cfa-84ec-4394-9caf-62e9fc74be7d\nfb2599ae-4939-4768-a2a3-2453c8b4c08f\nc00c0637-df7a-44ca-bd11-d5a64f0728bb\n4bf287a5-be89-46a5-b65d-2872ca8665e1\naec3a0ac-4571-4627-9c4a-842858c64f81\ne66b2f5d-a416-47de-9443-1e295d5c46aa\nb0059bd2-f451-40d7-95fa-cf975f828296\n82473177-4551-4eb9-8a17-f4871496fbc2\n4ab9bdb6-7c2c-4e41-8d5d-27844bb7ea51\nd1a7e50e-f221-4cfc-8cda-94a0454859f1\n4d640c1e-84e3-489e-be85-58335ab959c1\nf124e75a-6d79-4d12-9c7f-e373f98044e3\n64c49f0d-ae59-4330-b7fd-0a4ac086fd16\n9f77a551-ce04-4f3b-b534-ffd28c50ec00\n5841481a-c447-4de2-ae0c-79eac6860a08\nc16825be-1f70-48ef-8ef3-5b02ecf9aa63\n2e444aeb-fe83-4642-80c6-150a73740a2a\n83b03663-11ef-4c17-b968-ef1b6712bb22\n55139128-417b-4f17-b78f-b0632706dc71\nc8bf2c01-7694-4ff4-a700-7816470d812c\n2306038e-ba62-462c-b03a-734d00d61c94\nea25c474-e435-4fd0-a78e-688dcc55b625\n9b847d16-029b-4e7c-b035-e59791e19379\n29e6b6d6-d0ea-487f-97e3-cfd9afc5c755\na323500b-1a76-482c-bd9a-c6eda218ed99\n02887239-37a0-4ba3-b73b-aece3f355f59\nf9d6cddc-986d-4709-b5d7-070a8b726f17\nefe5476d-9f9a-4409-adf0-59696d390cf8\ndfdafbd6-d1a3-4930-8fb6-caa8ae6b75a0\n3b2cbf7d-b0ee-46a9-a5ae-c972a1e8a4cf\n8e724f94-4aab-4796-b6c2-4a892d0cf1d4\nd748af4c-891c-4e7d-a30e-6d1bf7d61e02\n7890e894-e473-4eb8-a31a-06d00d2800ec\nac84c9b2-dfef-43ed-a92c-4c26fdff08e3\n7b7c3d44-a581-4223-b7b8-4a10656c5df5\n0da33be7-97ef-4ac3-887d-b4e21be9ac1c\n60701972-815b-427c-89ac-59350fc7acdf\n3af572bd-7b37-4a8e-84dd-cfcecd6216c3\n872a43e7-b2fd-4366-928a-21444155e9ab\nab61d1a5-2ec1-4208-9962-e221102dea91\ne498e49b-0b1a-4995-9fe5-8ffbe6252863\n34ad10d3-dd04-4c45-b63c-342fd18a4a5d\n79a8dda6-3af5-4954-8f96-e6b9021cec88\nd82408ee-fe07-43b8-a37b-5b2f86fb113a\n67071a6b-286c-415d-9f25-c05751978c10\ne9cad655-295d-49a8-ae14-02a0a8914f77\n22e59846-2a3b-405c-b22f-90160acd2e6d\n550013c8-bee6-4e70-90ae-6165fc666872\ne1e72633-4054-4f22-854a-025e09c58af6\n2208baea-4d5b-41ec-8a9e-8279928fb63c\nc7b68b47-7b81-433b-903c-669d18190590\n906237b9-c537-4a46-b456-46a897ae52a9\n523e0a0e-e843-4e7d-a79c-dcbdd74b58f0\n38ad6ac0-6161-4a2f-9500-b380147cad9b\n189449fa-fa80-45fc-b475-0d8119ded2f6\n5374771c-8e9e-4af9-a92e-fb809567f0e6\nfbd92c3d-63a0-40bc-9a80-577f9617d017\ne026c51b-1346-44a9-a905-4ca0a61c0e8b\nce3fee3e-cf01-461d-88f6-a263ab08c1fb\n04df0a5a-e8f1-43f6-b46e-86f96de01676\nf67f888d-2142-4a43-bfef-44bb5d67cbb3\nc4a54afa-8b5e-4777-b695-2adc4e6d620a\na760dd6b-ed30-4759-bd50-8d84ae58c9c9\n53832469-5c86-477f-ad06-c0549eb888e8\n9be56c4b-101d-4d75-a334-0f81f8a97481\n8af1179f-31f3-43b1-905c-1dd9eced6ef9\n09fc3e5d-3b76-40aa-b2d9-8199f0c8ad7f\n662f2968-7601-4d21-8252-e500a2a7f9db\nc5b035c1-96de-4c39-93b6-bbdd5df6a5fa\ne3514048-11a3-421a-8fb3-495331b2e39d\nce959c46-94cd-447d-bb1f-dc81217436c5\n3b790454-9e15-41bf-bb39-f29e49baa60c\nbb790bcd-79f1-421b-945b-1c51246e6e8d\nb4beefac-326a-4216-a11c-f0134b8e90d0\n68346f14-c60b-4534-842f-703b82f492aa\n20a43ca1-4ae3-4d56-86e4-8ec417bc4ce2\nf2b9869c-4adb-4b47-8b53-1ec97fe1df5b\nf8c4891a-4726-4e5f-bef6-788d25ae7228\nd697a5b7-f415-46fe-8125-60cba8195aa1\n8ced4f52-de83-4a16-a33f-d7cfc1ed4340\n5f988f08-3737-48d5-942c-e8672a0beedb\n7ae7367b-9c77-4fc2-8d64-25e1ad51c4cb\nae3b801b-f86e-447b-8261-38a696fc1f20\n4e0e6e27-e115-4388-8c3e-d1513205e26e\nadd6625d-2103-4e8a-a3b1-664af5691668\n438f5a54-cc17-4751-9389-158500f98f7c\naab20984-5cbe-4020-bf41-4ae629385dd9\n37daac1e-dbf1-4c20-a034-bbf609d88373\nbe342293-e784-4e5b-a5ce-6f634e68f15c\na61e4ca4-208c-449b-9c36-8b4095068bf6\n1c38e4e3-2c09-4b11-b6fe-b26e92687456\n98ad0957-222f-4424-bcb4-2e96516fee4d\n65190961-453a-4493-bf1f-2fe8131b4bca\nd4302aee-4776-4bdc-b5bd-2c98087e504e\n9a626f65-f305-4312-a5d8-878fd657677b\ne86f9d8e-2df2-40cc-9766-a06637068c5e\n401564fd-4491-4208-a5dc-27f849fa5fcc\n266a7797-89fa-4ac7-987a-f50b3453d5e6\n09ef0459-db25-4106-96dc-2debf2780fa7\nf0de283a-ffd0-45e7-b4b8-3da822f88d3b\nb8088320-9aa2-4043-a568-fb6d21e73ff5\ned3b2042-f988-4df8-8ce6-2b04613879b6\n35b99a5e-3208-4822-a1ea-bcc794287637\n87d57b84-c2ed-45b1-9c7b-693c3b374e13\n18c2f806-ebad-41c7-9d62-19540c47661b\n44a13156-423a-4cb9-b406-450b22ca0e0a\n7d0517ef-b81b-4d8f-a90f-d1cac88bcfe1\n46f5e5a8-f156-4e30-bf60-95a6e56edefb\na3160700-d33b-4884-bbcf-59aafc62fc85\n532607f8-f349-464d-b9c3-5f8756ca43bb\n2f5bb0fb-24f0-444e-b93b-9f178e86057d\n0571c4f3-64ea-468b-bdee-0a9b206c78c3\n09c951c3-9665-42a2-804e-dc805a38fb40\need79e0c-d7b2-4303-81da-60492fc7e7f5\nccd5e2e2-793b-4bff-a74b-2b8f6ee55d6c\neecedeaf-ccfc-467e-83a9-273b1cd78e46\ne2148b00-d810-4e85-a666-229e30bfc5b8\n91f78864-9a63-409e-b10e-e98adf8cd859\n6506dd51-60de-4a92-917a-232cf4696e33\n1edb87f1-2af6-46b0-81de-6781f2cb3905\n708e4b69-989e-4a2c-92d5-8d91a2874347\nf2eefc02-cdce-48f7-9181-7829bc6dd5b0\n0cb0fc66-d39d-4d9d-ac21-233b8c5292e4\n6c11b43f-2fc6-4255-8f45-6f4eb489c673\n092fbe2b-4041-45b8-90a0-5be8e9367896\n9e5608dc-272a-48cd-ad79-7b23288be365\n033b6d98-d26a-43ff-bce9-c926b62115b8\n21a209d4-de29-4bc9-b75a-e503301b4950\nb97ee0bc-d64b-4a06-b53b-d08e00025e66\na4e569f0-1fbc-43a2-a154-15bc8453cab6\na8c517ed-9c20-41bc-84f6-f4a12688dded\n57ebff43-12ed-4bd5-b64b-28c84f3436b4\n3990346f-15be-47c8-a71d-85e3947ef7cf\n6a1778cb-05f4-4a27-9aeb-1427df564b87\n996290f5-8cb5-4bc5-a558-e344272237cc\n6f06d6c0-04e9-4dd8-8cdd-512103a05782\n432f467f-0eee-470f-b2e7-d435e8470411\ncae8ace7-4c05-4625-9d00-31477c3a1d0f\n8915131a-4b25-48c5-9d2b-69ae4e8fd347\n416f3243-06bd-4ac5-a6c9-c247bdb9317d\nb85a5149-5beb-41b0-a355-4b67437b7221\nac4abb5a-68ef-420d-9d3b-57fe8fb53d1f\nd806f24e-8811-4454-95db-e7d800897e62\n144abec9-4d8b-4699-87ac-f0231b563482\nf332346d-0043-4b1f-9aab-a265dae61f82\n3d783fae-2339-4043-bfb9-553bffaffe97\n0978779f-c17d-4d99-95dc-26876da2cf95\nd8c5246d-a3f7-4c63-89cf-c038be750ada\n88a4e2e5-35d2-44d3-b034-386a99423a36\nfe751579-c8ac-47af-a6b1-fd373687b11f\nf21fa76d-6dd7-4997-959f-d910953dda33\ne1b97070-61ea-4024-aa32-2ec37aae3047\nc11891da-3a72-4bbd-b69c-f171773cf251\nf00eb927-5b18-41d4-86ff-16bb1ce74fae\n451ac22d-4770-4d8f-9b59-0ee73c8aac41\n0c7e3eb0-135a-48d8-b672-9868b78a191e\n88be177c-9ae0-496d-877f-8c9763cb7e23\n8d89db56-9aaa-4e7f-9f27-7de27fa0d410\n7ba6cd57-4253-4d22-bfcc-d47083eba754\nbba91e16-f78b-40c9-b87c-aa4741f660ce\nbdcc4248-f33a-4a6c-ab10-af6f4c0ca8f0\n048aea5b-a7bf-4cff-833f-018fc98c9136\ndb17576b-4783-4280-84cf-c174baac58ef\nf78c166d-241a-4d22-be77-aa87674b4746\ncc6aa467-414e-4129-944e-ef23b2ce5956\nbad8d1fb-1085-44e8-bb13-7c457a7caf4b\nedac840f-a8ae-4a91-925b-c09bf80381e5\nc4b0e03e-6ef1-4b82-8b98-80d2ba0d3ca5\na2345bcb-4cd6-4f5a-9122-5de37a2703a9\n1e49ddd6-d270-4979-923b-8f737bd42b71\n34dee7d3-ec2c-4dc2-9b11-30f407f1361f\nba918ee7-f910-4614-8795-756af9ec3c5c\nbfd65d4d-2619-4f04-98b1-0ad8a55b0ded\n55e92b20-f88b-4bc7-a0cb-0ff2570df958\n20282b51-5d42-4b14-ad11-c5ba9e2306d7\n751a7f39-53be-4945-a531-72e450725aa3\n4168c794-169f-4022-9ed3-c7a247f38a16\n30783b0e-8fb1-452d-ab47-d17029029eda\n170fa0df-7286-484f-b249-aac5271722fb\nd27a6e2c-6b60-4865-a22b-23fb7be270be\nabbacd06-a59d-41cd-90e3-9930b2460d90\n41f5a1ed-c67a-4ea1-91c9-16d9ddf8afb2\nc5dbb7c4-ed3c-4788-bad4-171279a7886b\n27f932d1-c1ce-4b11-a3d7-bd5746770200\n93cdc824-5538-44b4-b29c-a71d535f63ff\nc16a6d05-c2f6-49b9-b335-8e9386dbf111\n2ad661d1-5822-4c38-ae8b-19cba87a81a1\n56481de5-0920-4abf-ab67-180dfc587fbe\n6ff48b6e-9b7c-4d71-991f-1f08b7597428\n59cf1b33-8c44-4174-a3bf-f6b0bb38c8b9\n74b1338d-4840-4c41-a150-6ffb6bdac0ad\nbfb8fbe6-d32a-48a1-9cb4-956e35d1b3ee\n4f4ec0b7-8899-4e1b-abee-8a8f1d7bdfce\ne1e84d19-aa42-4a6d-adef-40df72f252de\n0e4b887b-5771-4327-9000-0e2ad6e2bc53\na1f65c53-7821-4f06-a034-010172a9e599\n76552092-561d-48bb-a943-bad3633fd32d\n01a96629-6663-4318-82e5-39163ba79599\n11185a80-dabe-4af3-a4da-a55b61121920\nba3c4c4d-dd98-423b-947b-3ebb2d57e49c\n4b8b63f4-03e3-4d44-8446-f86e929441cf\n9937b769-b10c-4034-8b2c-81c6e0eb5075\n019b0bcd-2176-4f56-94fb-b02ccc76182d\nb6a5ced8-74ec-4c78-9d44-4482df1b5abe\nc329b66e-77b1-4264-b881-8d445e6b40a4\n3f4da593-f1d3-44ec-add6-5ee0de722eee\n89ed5604-df52-46b5-bd3a-72b46f7e57d8\n20def014-0a10-48d2-9829-3929f05d1548\n04c7a401-c4c7-4020-8eb6-45d45056ff75\na9bff34f-06a6-42bd-bf9a-25bd37df8cdf\n399c8933-4b06-4ba4-8120-c0ba7bd95c5a\ndc76d2f2-8c99-4c57-b314-71eb937af170\nfb2b1498-b6d5-48c2-a645-be985cc915bb\nccda368b-16e9-417e-b082-d70f4798cdf7\n13b25693-fbe3-416f-a189-4752b8651509\n25f92179-d67e-4837-8e70-c1e5b4dc6be9\n9bb83cab-300e-449e-bb8d-d5e3ca099341\nc1701aa2-0165-4027-96c5-2a7be37552da\ne3a03fb0-1dcf-4b8a-a3de-b28c49310aea\n60d3bdf0-6cfe-4b14-b892-0b8c1b9094de\n070404bb-7257-40c9-88f3-7b896c82c0ce\n2386097c-9a3e-4e92-8e74-5886f6591798\n5b258317-34c6-4690-a9b8-a4b39573c413\n61f0dfcd-67a9-43a8-9ff9-dfddd2ce67ef\n3e1a99e6-7d09-441d-bbf5-a2481bdadd05\nab6e5409-f6cf-4415-85bb-4ea61d145a95\n95ec4083-0b76-4a65-84b9-9fba6b27fe66\n1c635303-04a2-4794-984d-568f6a2ee945\nb362e6cb-e71d-4887-bba1-612dd613ca83\n7e555395-f48d-4b0e-9925-4e0f9cf7e94b\n4c0ecbc9-9067-484a-b764-c6711674e19a\n02d645ca-2218-44e7-9d0d-cca39a120b28\ndbc592b5-02d7-4c76-964c-6ee2278ca33e\n7ed72f8f-690f-45bd-81d4-5c2ab913d938\na8fcf958-fee5-4c32-a166-198fe4e8094f\n63f0fd4a-a9d6-4c24-b9c3-ade539748bea\n3af158d3-cb1c-44c7-85d4-cacdc0b7b2cd\ne90b80c3-8bf9-45da-80d0-5d98c2095eea\n412712b2-29d7-4427-9168-652cd3940c4b\n74d1b4bb-47f9-4d6e-95b6-e680152ae9a7\n3bc2e75f-61fb-458c-b89b-8b4024ed9c70\n40b718eb-c67b-4df6-a175-be9d3cb6d78b\n6cef99e2-0de2-46df-be0f-7f5c00ac42a3\nb859019f-37d2-4d6b-b9a8-33c582a26781\nee1f1a46-c39f-4833-8d27-ec07f08af348\nbafe2890-78c0-4362-959f-0d6e31609a7e\n6934f1a9-a56a-42be-95af-7cde14b85f6c\n80be4dff-ed55-44b5-b1d4-8380d715283c\n7b1a5cce-3941-4956-8f44-329ee71d214f\n1d7ebe50-3ad4-4409-9411-cee6dcf5ac7b\ne20f0c25-fb6d-473d-a9aa-cd8d4b372f03\nb6c76d25-4291-4063-b7dd-ad05750fab61\nb11cd9e2-77ca-407c-9e3b-26c01086c34d\n86a0d000-dd3f-4750-bed2-8d0a99a30876\n3bc9fc3a-dd0b-4dbc-856b-6821209d1f29\n2ed83234-d0cf-4ea1-8989-7b45c760954d\n8a2263bb-d0cb-4f20-821d-23ff604f4c4d\n6fd70faf-f49e-45c7-9d7e-bc10ceda4085\nbab6ba98-df37-458d-b34d-90c7a0e5b4d4\n0b84f73e-1500-43f0-aa6b-075bd4bbe591\ne2ecebdc-974f-4f4c-acfe-1b82052bbdc2\n647e86bf-37df-4b64-a131-882e7ac383d6\nc111eaf6-cebd-4f34-966f-536cd966e262\n48490445-c8b2-46ad-8ecd-f979af2ebcba\n38dd3ea7-1278-49be-9db2-d7b1b938e70f\n27478ea9-c172-4520-a2b3-a06b698402c0\n58c1556c-baf6-45db-a1f4-e9c4c6ff7aa5\n2ea8fe1e-a7ba-435d-99ca-5c07243b403e\nf122db13-0701-4d9e-83ef-35a0afb584e8\nef3cdb13-5f59-4d90-ad0e-afc0ad66d253\n2057a119-fba9-4708-abf5-6c70740c8484\n745a50b7-afdd-40d7-8879-34aa65240d01\nb5bb37e7-5f7b-438e-9fc9-d4e0ca9c90ab\ne41d1880-5bd7-4b2b-ac23-eb1e4752569d\n724ea453-be80-4123-b5a4-d9f154a6f514\nae915910-cff6-44b7-bc05-6956c399ace5\nf02b738d-c478-4a4c-b4f4-e099fc910c8e\ndf58cbe8-c8ac-45f2-bc68-0bc45f19ffb3\nf0e4b287-1f8c-4696-bb7b-c27e20c6c367\nc163f75b-cc44-459f-b06c-0a8db3142c37\n2fb65fb6-bd68-4880-8a90-f55d2f52bc3f\n1b917dee-bea1-482b-bf15-ecad7c67c8bd\nd59bf1d3-4ffd-4da4-90e5-8ff68977195c\n0631a2b2-a6bc-4d90-b296-c7bcd9adf99b\nf6bcfae2-8098-405a-b3cb-b801a6fcc666\n747efa0e-d8cb-4188-a063-23631d12d3ef\ncfc62282-ff6f-47ac-9ecd-abcddf3286ec\neb14096f-62e5-4b51-a90d-3a81bb0d6945\ncd9e0857-1480-4a3c-a82c-cbb52d9a6753\n9f1ba298-d5b9-4299-9380-5fedd0f3b846\ncbc4405f-ddc4-4dba-8f82-6a8251f3b7eb\n9ea0bd5b-d6ba-49cc-87a0-7f090264384b\n3bc1c210-51be-4021-9406-0480931bd143\n086221a5-c9b7-4357-9a02-8e9dfcd622f6\n86c9db9b-f6ce-4b70-bffb-7bd15fd3f9d1\nc0919d6d-5813-4220-8095-581a09596970\nf9cee020-9def-4828-bc4c-13f8baa33297\nf727a30e-dc95-4c2f-9e7d-b02201243bfb\n39f562b2-fc0a-4c4f-9f41-15e16260d0e9\nd01c3c23-ae62-4d05-839d-fbca4497175c\n8d0e4188-8dd4-4ad9-be9a-daf286305f43\n3e59b9a7-acae-48b7-a8d7-558d1ec37571\n237c894f-8f3d-4578-ba2d-c0b49847ea30\nd3fa7a99-02c2-47df-9488-76257bcb18d4\n5b9d2d9e-04e4-4b16-9f62-20bfb74f3f25\nad98641b-fb88-4d64-b4ac-99da8c5ce45e\n3a040b3f-d263-4796-8d0d-e11cd5b7733b\na576bf1f-46d5-4f67-835d-f661dfff4eb0\ne7f48911-03cd-4b28-a488-8e578532a5a2\n61314411-8b03-4716-b90e-594031943e9d\ndcbba72d-6dd9-477a-be2c-f30bab4d51b0\n1fcb4b5b-bc70-49d1-aaf1-4d9ab3dd12bb\nd9042cf9-b891-466f-96e6-ed50abc00737\n7011aa59-e536-422d-bfa4-535cf811094a\ne57a60c0-5433-4e0c-b40f-a8939a7b9f62\ncbf34315-30ae-4b6b-b5d4-033d3fac614c\n7345e147-df80-40e9-84a2-fe74698eb862\nbda1cfb0-7c2c-4d5f-b767-9d5b80e0399e\n7ed037d3-b39b-4b07-99ce-093caed47373\na641dc64-a68b-4a1d-a3e9-ad8cfc7a7cbf\nf4abd349-0929-44b5-8163-d404d2f791cb\n0c641d31-1a7b-4e9d-a590-ed481c38a27d\na6c5f819-7738-433e-aafc-661d3e4d6ca4\nbe6f2278-e798-4950-8135-aa17b1c21a7e\n2125bf8c-303e-421d-b0f6-54bbbf776cec\neb9cdbac-52a4-4465-9d52-e7132eae1cdf\n98cc1d65-d708-401e-a81a-a888d17f0ec6\nf278fa4d-1c95-4286-b834-2afd4a6c9e75\n5ebf2ee4-8ff9-4228-8e6f-8ef1beed4775\n865b809d-4b38-4751-8134-6312bcfbfeb1\nfd9640d0-d536-4216-afbb-26930c4f27a3\n6e2baecd-96ac-4706-a7b7-ea5c9aa037cc\n457027a9-1a68-43f4-9165-2905763101f9\nd691c951-aa7c-4529-9dc8-93318e3e0d19\n656bbfb1-b246-44e5-a701-95a5e4c337f1\n7c7e1788-d32b-48ff-b237-dacdd12d281d\ne091e30b-b584-4531-82a9-b2e0faab7e07\n7524a54a-57f9-4354-97f1-2ea48919beca\n8650e844-3c11-4db9-88a4-21deabab1458\n6e507c8b-0a97-46ca-a87c-6c125326ed99\n0f35e7c2-5e14-49e3-bada-1ab7eb22eeea\ndb9c1719-44fd-41e0-9cf9-5bb8d3274ab2\nf48c2739-1a62-449d-9139-8bead4685bf4\n38ab8857-3055-436a-b84b-f8f84c8df864\n3931ab2c-d340-4f8a-9d65-238ea15a5e92\n333c8c91-1bb6-4e50-a872-b8f57e033ae7\nfe84f6df-e590-4e70-948d-ea60970813a4\nf5337be6-f085-4723-bc72-5f496b69aed6\n7b5a8f37-6bba-4b05-bae9-8c27d9c819f9\n4bd331b5-71f1-49d9-a355-c1a04eba53cb\nbccce9aa-e081-403f-add3-fb74109d7e6e\nb72afc26-5674-4b73-bb9c-6c489350464a\nc40c0103-9626-441d-a50d-2c4dbd719f95\n546fdefe-70a7-4c9c-9cb8-37dddd69de8b\n61324e6d-67cb-49a5-895d-efe048e656fd\nd53f26a5-ffd4-480c-9dfd-c1f9509b0fe7\n54fe2fd6-8f27-4de2-a4e3-49dc85cb03d4\n0998ddfe-60a5-41a4-aac3-3c688490a1c5\n07ed8e05-6177-4bf4-ad70-8e89f3659983\nb29612f2-7ea7-4d83-bc34-796025c19222\n915ce91c-3b20-47ae-8fe0-ef82895f8b5b\n411d14d0-8789-4850-ad43-5284ce735e30\n97ce65b4-8ace-4bdf-8e76-5a9f992d4a39\nb079b9bd-4454-4374-9662-510245811ed4\n54675cbf-0839-4e43-9940-1490bae33131\n80e3040a-2c54-4f0c-a12c-6b61f01aed07\nabd13d7c-1b50-4dd8-8c16-07a02a175939\ne619fc65-1989-4d89-8a27-b5521624debd\n91e84909-cb9b-4fb6-8898-a471487dffe9\ndc65f03a-fb5f-410d-abb2-32c3cccbe82b\ncb462b00-b08c-4573-8b93-f78756e29e32\n3615497d-fe5d-4873-ba67-98185418f1be\n47e8748b-a585-4ff6-9c04-05848dab127a\n250a19ba-2c13-4a6c-9c43-ca1c48188f5d\ndd477957-be3b-4346-a466-9a0d7f657d64\nf6149661-bad3-46bf-9294-ac9af4ed4e63\n45e543bf-ee7e-4b42-bd65-ab3180e14648\n466b7790-ffb5-414b-beb6-d766a315ce0e\nd155cc16-8e3a-4f8a-a63d-6cd1b2096388\n38aba713-37b2-4fa8-90e8-bee62920bce7\n4d60a829-d2a4-4f95-9492-fee5965f234c\n3fe5dcc6-4c46-4cee-95eb-acc55a169df2\n95d71571-daea-41f8-96d8-0663fde4633b\n4d59f09c-941c-415a-a244-3d5b61f70b6d\ne99a9e4f-1603-449c-b9d9-8508ca67ec70\n1cb3239e-c274-43f6-94df-15832cfae944\n80081560-52dd-415a-bcfb-214212471328\n1bd504b0-8054-4d17-8e39-ae0b4cae77b3\n7ab534a9-cfb9-483f-9d8e-242e7d9e5e59\n7aff4070-b66c-46d9-8d68-5937902b7021\nafeda248-b8ff-4a2b-91fd-41d9df05b770\n7c00cacf-7d6d-480b-b23e-30fc620766da\nf8fca940-3b6b-4edb-8187-46acb54f5384\naf61e936-a71e-4122-9e84-613d696ad1a5\nb6d99992-cb99-4309-83d4-eadcb8fe192e\n5315264b-7738-4505-84e7-f3694c2542a6\nf3eb944b-c46b-4faa-955c-7761460172b6\n6bf1c34f-6d60-4633-b968-ea7ef4088cd4\nb600f470-13d3-4c46-89f1-37bbd1a208e3\na872bf7f-8f4a-4484-9985-a5b57f630a9e\nd79dcd90-2ec2-41bc-b093-ec2999dc29f7\nc6112946-c660-4617-a43f-8f2bc7a520f4\n7c2fc7af-b0b8-45f8-9e8b-e86d474cbdac\n550d3d6d-8f2e-41a7-9e97-ed00b3f2169d\nbcde7e2f-e5cd-4dda-9106-c25170d23c58\n5b38564d-8bfd-4844-8faa-80a13ae06006\nda74f00b-0221-4b11-b653-f0a1c33660d0\n835de4c9-1908-4503-a187-9804b5ead45c\nf061ace5-0f9a-45c2-b82a-b8230a5cefdd\nad6fd8f8-62d1-4e83-91aa-b1058be72022\n7fc59037-2767-40c2-9066-039125bb6f98\n6adbe805-8e10-465c-8fe0-937d72b5c571\na0b5bb9a-79c4-4a98-a344-2c1d727e6c3d\nc1665df4-3bb5-47d1-acd5-403a4e74479c\n2bcecdbc-23d4-4dc3-9ad1-6032711af865\nfcf6a4cd-392e-4833-a842-4fb1f8093dcc\n7f73752b-d433-4dae-b6a2-fba6e7ea9100\nc9229cc8-e235-4d9d-8aa8-721c93ef09f7\n9ff672b4-2fe3-415f-b707-03843d26e514\n15e4ffd4-a8cd-4906-8d4e-b652fde30037\n6a4b5f4d-1511-4aba-b572-9390c4716134\n41afc588-ee69-4d1c-ac07-060b41f0c8ed\n588d0c96-2979-49b0-b7cc-bff4fdf4a5a9\n2c2a9511-a398-44c6-b4c8-be8a8ce2d54a\nc8fa3f96-5afa-4abb-8999-8349c2d22c7b\n0ee59660-809c-429c-8c86-115f6775c423\n8fca1d9b-e674-4d14-bea0-70dc07c6133f\nbd2c2997-9d03-4a25-b94d-ecfded741d1a\ncd1b6335-963e-4ebd-95df-238ab2104b72\nc3522e32-383e-440a-a252-9135b33503c5\nbe2ecbcb-1e32-4aa2-90ce-e3ec72e55de4\n3f7e8038-dcd7-40b4-8f22-6297a41712b6\nc37154c9-5922-464a-990d-a09aa2e631e3\nf819f601-9843-422c-8f51-0fcbe0184963\n640d19fd-a0be-4800-9352-1d7b0528e72c\nab410b2a-3d76-45da-90b2-92f5048a348d\ne61d0299-388b-4811-9594-c71549374ed4\n55aed277-61af-4f33-9f1d-773cae8367b9\n9b387e6c-e58b-4eed-ae80-ea516f1a72e4\n028eb65b-7d2c-49af-929a-05c2aff922a8\na1b68982-2a6e-4191-bc78-92ac584118e9\n7303f9be-1495-4c2c-9fb4-92640922ec5a\nb284164f-7214-4324-a2c2-7338b0932ce6\nfa9031c1-912c-401d-a74f-80ce2455c944\n99d5f1ae-fa62-4b82-8f86-f777c5ea5551\n269edbe3-1662-44a9-95e2-5beb30149e7b\ne4fec4f2-b7d1-4cb2-b019-20a03bea5c16\n15d9683a-8bfb-4a95-a307-acec4e82f4bf\nf9cad12d-fe24-4575-b754-11143c8149d3\nd96b5954-72a3-4c3f-ae2c-3351b30a7531\n68245d4d-ff57-4a8c-bf71-e5b26f6aaf01\n144afd96-d906-4f85-986b-54b57632b4a5\n662db05c-4f6b-44a6-a70a-f0551de3e36c\n4e86b00e-0ec8-4ae6-9c29-7858052dc428\nfbaefe45-7a19-43a7-97b2-d18c58b21b40\n449156ff-d235-43bf-80e1-5db25962de03\n7377f220-d7f3-4270-9515-0580d94ce39e\n5496b5b2-abb3-48e2-8381-036a530c343c\n9deda686-dd80-4984-b3d1-38a6ad35935d\n6afbd3a6-b050-471f-9e27-c4478c954aea\nae278116-4432-416e-9010-f6ba79d1f535\n3246c64b-f809-4287-b817-a28a5d11bbec\nf5f9b399-57a2-4fba-bfe7-dbc6504523e3\nc2753ff6-ef27-4daf-a98e-43fa7add0fb6\nd5f8bb8f-2712-476b-b2dc-02da01df17cf\n4370063c-f267-4de9-b740-c4404d8b5fba\ndaff6972-d7e0-493c-81d5-8c3cf74b09de\nb0102bd4-6b1b-4cd2-b715-b0f8ce0d361a\nbf6a4cda-102a-453c-90a6-6d2ed8262a81\nda7ca95c-72f8-4e19-bfca-8ac42602a4c5\n49b2e8c9-8e2d-434a-abc6-7999ffd4abc5\n256c840d-be45-4b27-bf7e-306021b6be1e\n6138219e-0dcd-4ccb-a7dc-f95354dab16a\n94ce6aa2-2722-4c42-b6c0-661093c95aa4\n9c4f84d8-dcd1-40ca-b76b-89d018e17922\n1b098b3e-45ad-4882-b400-7a4f550951e9\neb92dbc1-93f8-49eb-b29b-3bf398b05357\nb3e30f1c-f115-4047-b13e-14afa29258ae\nb9109f0e-b3d4-44f1-ac31-1fa71e7aa30a\ndfd7dce8-7d53-40e7-8098-b404bd19c0dc\nfacdd252-2d55-4fee-8371-40fb6e152e93\nd12f26c8-dfbc-478f-866c-b38eb59ef00f\n1050e512-bba9-4802-b46d-6e0b0cb9207c\nc392c9df-d802-481d-b92a-bda0ce76c98c\n3a767142-5d87-44d4-93c1-b981ee1607f2\n41c90e85-9d5c-431f-8e93-368fc0f3e3af\n935e47bb-78fd-4652-9907-61319b0f39f0\n4b45f165-84b2-4756-9e73-393c8d4e1580\nc9bb1bc4-e42c-40bd-96a5-c74e767b97ef\nfaa0fa96-f3cc-4b33-99a4-66798c28cd76\nd40c4573-01b3-4a4f-9e68-ef65ea2e1f14\nb2a681f7-8518-4c36-ae76-02645dabb90f\n257fffb2-8708-49d9-a8ef-6ad29ab66eae\n7f310853-ee4f-45e5-bd52-b3172a2833b1\ne1a9acd3-091d-442e-9163-81da91bdf3ec\nf32a3e6f-289c-44c3-86fa-58ad6da8f255\nfaba55c2-45f2-46d8-b7cb-9b2d71afabe8\nb3dea787-9c3c-47ee-a017-bae48d51cac9\nbdec762a-e4a0-427f-aa0c-6e03bc4df97a\na98c9511-4dda-41aa-a6dd-0d00c7f62430\nb9e0739f-cb1c-4877-a205-ea7edf1d14e6\n08642a6c-8bef-46de-a728-f9a71951f2a0\ndf02e036-b511-403d-bdfc-18b0a10a9d71\n3acfc404-b927-48aa-af99-3a1e83ea4489\n7e964dba-1348-4ddd-bbe3-d421b0c559be\n40e17b14-b8a6-488a-a648-b8e47d3d92bb\na19eaccc-b1e1-4d1e-b372-24566b2114c4\nbb960c36-cfe5-433d-af8c-e6d44d81f4c5\n9b137cc7-d816-48da-bc1e-55c6825d370a\n4c59804d-7a7d-4164-b18c-294f982c6b7c\n0030a5da-be8b-4df1-8ac2-a99e919e3b6f\n896d8b55-d224-432e-b33a-99990a3cdba1\nb50e281b-96f2-490a-8bbb-5eb480ca24d5\n6f28f1bc-bd0c-4d81-92b3-dbc671256d75\n2a8b2869-a868-43a6-8f08-b0b612f82c41\nbf4ee17c-2cdd-40c9-b3a7-df866a2be76e\nc86e4cf3-590d-4b1b-bbd1-a14562026639\nbc29d6f0-0e75-44fd-a445-d059f3807588\nfdb22353-9e12-4e1b-82e8-e7c9f727ecbd\n6aa5697a-a054-43e2-98f8-0fea6217b706\n4b7b4b58-f8b7-4a37-b525-8bb907df8041\ned738dd7-a14f-4b96-bdb7-5eeede86c36a\nd014bb0e-071a-49cc-8a6b-67e4360bae95\ne970c336-de76-4ed9-9f16-dac5ee418ab0\na3139acc-ae58-4c35-88b4-751131f37abc\n0bf7cfa8-92ea-4905-ae5f-18272cc18c81\n2d2ca0f2-3ff1-4aa6-a08b-9e017400818e\ne75c4001-5cca-426a-90cf-4c8f43cb60c2\n90535254-aee0-4f9c-a97a-04252d119614\n0fbc2deb-1b03-421e-8a11-cf360466a522\n91468d7f-ceaf-486b-a146-b3855238b376\n2d0de690-59b0-4a68-8136-a7778f726fbc\nce42273f-395f-4641-be28-706c2dfa2115\nd40424be-0fbe-4c73-94c6-b5af0803663c\nb3403aec-3ef3-4eab-b00c-e8df7ab6dba8\na63e91a0-92df-405d-b28c-f8a5357170b9\n9e6fa1b3-8ed3-4dbe-9d32-61afc14afe15\nf9c7ba6a-94ef-419a-ba8c-37fa19941040\n939a0acb-7094-4468-8e9c-8905281bf5ea\nd5b996be-560a-43ec-95fa-521e8c0280ff\n0355beaa-1412-4710-b73f-fb5dfee423f7\ndba6a98e-70b0-4b0a-99c6-681bd9b65415\ndce14702-a99f-4d07-98fc-47d689400af9\nb8ac985a-100c-4e8c-8462-a87a317ddad8\nb76d7d76-b316-43d9-a5b3-6679f4d168bd\nb993c63d-c13c-4fa2-9753-10dffde5e874\n04dc6cfd-356b-42cf-a5b3-3c821fa68395\nf7843884-e9bb-420c-88f9-1d64e9dbbea8\n9935f9c9-165a-4b7b-b833-740384042f56\nba833275-e65e-4fa1-9780-631a9504a7eb\n43f7bab5-010d-461f-a3cf-449e517d2796\ndb7e24ae-1409-4f46-92d9-d372417e6d13\n8fcc24fe-0fe1-44a8-8306-3661f6749644\n5226b308-2b54-4aea-8860-6764fadbf00b\n031fcb23-5c56-482d-9eba-53b97c5c61ee\naeeb8b78-2929-43ab-8c19-9d916f5b9427\nc1e7e756-c7e5-4acc-b4ab-c70bfd183c0f\n545096f2-a84b-4ba3-93cd-7a901e9425b2\n0aa52774-e322-4c8d-863a-a92386dce92d\nb92f700b-8efb-495f-84ed-77c30bd4eb76\n684edc29-b93b-44d6-bab2-deb3e4d0fdee\n4d2e02a3-0a00-4b5f-9034-626f3846e033\n8c303318-becf-4d74-82b0-c22d18954bcd\n2f2be857-a877-4ed1-adf4-0ea2ac0b7f19\nb993ad5c-97c4-4f9b-9b2e-e96b77090e5b\n4d406027-df49-4e74-a084-4fc0d7a53143\n87232326-d492-4fc4-a9ab-dc24f419f2db\nc44c3789-cf57-4651-b100-d38e79676f27\n60751ba7-6cda-4fea-affe-e136241ba769\nf8a227be-3ec9-43b3-9727-3c4b64706fa3\nb99fab27-47e3-49cf-9999-860c6770517b\n2d552543-9012-4df8-bc0c-4c80b7b5288a\na572d483-ca61-43a3-a5aa-3eda35932968\n6d70785d-9d85-48cb-aab4-934035e3ffff\nb0f1cab0-432a-43fa-88e6-6bd19176ab38\n70eece6e-43a8-40b1-bc80-74f07555684e\n4df4f14c-f2ff-4ef4-a753-dbfca68512cc\n4542615c-2b35-4ccd-bb7e-25fde082f6dc\nffcd8367-4f93-4205-891f-5d04f0f119e2\n8e551298-d03e-4b12-a9ca-210c8daa937c\nf211017f-98b2-42aa-877f-575198b957fa\n08d1b3a5-3aaf-44f6-aa17-3aba90dcc56a\n56f6d2bb-7aed-4d46-94df-d65e5a0467b4\n98f22c6b-13e6-4c89-bac6-6f15b9b4f800\n7959c895-c5a6-4170-91c2-495ac448e422\n0b273252-ca94-40ac-8ba3-71a602bd8974\nd3640537-c173-4664-870a-1d5ec0bbfed6\n027116cd-14e0-4743-884b-17bc71ae2024\ne0425797-3ab8-49fa-98bd-aa1fe2b55c91\n15c5c4b8-48b6-4d05-9889-d00d89ba8f5e\n53c2e8cd-65ea-4240-a5f9-7c3860aa133c\n5694ac20-9d21-4711-90f8-d0dc9b16b850\nfd6650d3-a4bd-40f3-88ae-ebec0410e8b9\n0c759105-b862-4cfc-a7e0-c2b4a669e1c6\n2d995067-59b9-4155-8823-db5a723ef99b\nb287ed1d-ecca-4570-9cf6-f5b0f403442a\nca197e28-0496-463d-a354-9907fb764478\n7d6259bb-f683-4806-96be-c4f32e8722f2\na0508039-0367-4508-aa47-9a2b58be0e37\n4112ac58-bd2c-418d-9099-1d4220a89be7\n825fba04-36ee-4081-bd14-4925c88ff8d5\n86e05ff3-e9e8-4e8a-be72-729a717b42a2\n07a979b2-ae8b-4c50-92fc-ce826228256b\n2ae8ab91-5336-4065-b350-2b669dc0abda\n0790706b-cdbd-4c79-be9a-25b8b7280117\n3ac48c9c-754d-497d-8a5a-5fa37407399a\nf4daa402-bc00-4ed6-a11c-294009079bab\n1b5fbf08-c1fa-499a-8a6e-c632a3ce44db\n8c4896cb-b428-49ea-be10-75ad0a25cafe\n92f4c6b2-dcee-4491-9b5e-09f064d855ed\n98030ce7-7cc9-4525-b64f-77f68e89db4d\n9cb02762-8b2b-49c8-9332-9041dc0a287d\nf9d777b5-674c-40a2-ba29-5c33812ee31f\nd4645c9f-793f-46bb-a136-1ba6bbdd3383\nc673445a-c2a9-49c1-9e20-20f34667a75a\n1e067794-e0e3-4fc4-ac1c-d1e0fbd05a38\na6a7d9ea-e744-4c80-88a0-19ad4199d33a\na5b72158-89d8-4e08-a8fb-ba0d93ce1e42\n92fa86fe-8c35-4ef0-9f11-4c3c47130972\ne17a2a2f-26ee-424a-8959-eb51bef311c1\ndf1bd0bd-54e0-4907-a255-dda157da6462\n465a3591-90d4-4cd4-b4f3-7f27f46ff62c\n89903dd1-9f07-4694-9b04-4c1bdc00bf18\n6f8390c3-77c5-4e84-a157-b34ae9b16da1\n689e76cf-6ba3-403d-a17b-d7b5e4526641\n286de556-d029-4f21-ab20-a3a47041400d\n8f6a09d5-3ccf-4b80-b8c0-5b2ea88a43bc\na4f07a2e-0799-47a7-93d9-2290ef434acc\n08f4d2ce-09b7-4908-9073-96bbd8484c74\n3dac47f9-5f1b-4174-8ce9-67d144237deb\n78425ed5-595c-4c79-a688-b12b3a8505c8\n195108e7-8caf-4729-9497-9786a1309b37\n4e998609-760e-4a30-b4eb-5b39de5106ce\n15941f0a-c828-483e-b989-7e945c0eb4b5\nec6d350d-d639-44aa-9da6-2dd102d247c5\nbf7170b1-b379-4a57-9be9-3557204b1631\n69e79b82-3632-4bf9-9a7d-61eb9ef54cfb\n460a13a7-afc7-48b4-a685-0321a129958c\n26a10495-2d9f-41de-8c13-ae463be051bf\n687401a5-ff34-43ed-946a-f11c5864f5cd\n8cbc3a8b-a138-4bf9-81d0-cdc91778ac6a\n0366560e-8e66-4d33-bc33-5af911ce761a\n737dd533-cfc7-4d14-b020-e3af68f5d2fc\n110fdafe-fdc1-42d5-b762-c27bc1cfbfb8\nc4dacfe4-7a71-414a-bcd7-f36ed0653cb5\n43cfab09-ae14-46df-96f2-72b1b4ba030e\n7627c2e6-9023-4dc1-8cb4-0724df3b3307\n3e352f7d-82c9-4a01-b351-3e82dae5d340\ne5cbd108-5fd1-40a3-9621-377b90613100\n2ab1ce7d-d0f4-41e0-838c-d71bc6583c24\n6730b7d8-0895-4c0e-b83d-7544cb89066f\n937c82e3-a4cf-40fd-aea8-9388d81fa5dd\n1529e8af-84f7-487d-965b-145deb18db4b\naf0bdc03-3b1d-4de4-8fa6-914118b4de3b\n53cbf1b2-255c-4ba3-b50b-16ff1c1d26dc\n0e125bca-81cb-40dc-a6d7-50fd6bff034b\n21dafd16-27dd-49b0-9485-8b18ab259527\nca7cd16e-7f89-47c3-afc2-c9ff0535745d\n83e9a38f-22c9-4da7-b66b-357cfefc6fcb\n0929ebef-ef43-4906-a9e4-548335eee17f\naf29281d-4bc2-4e26-8272-5dd444c4681a\nbfcc605d-77c8-43c0-9ce8-e83e48422acc\n8aae6ba0-11d2-4467-ab47-f3fbb25d6075\nc5ae5678-6573-409a-985b-197cf0945c5f\n8fc55ef0-2949-43e2-ad3c-f27d03902cd4\n2e6f289c-c14b-43c9-86ba-8c177232d2fe\n74adea01-6a5e-4064-888f-b69c97d7bf41\n90186bd9-2a05-4da1-9363-aa7b76346ebd\nc62a7675-2e67-4dab-b2a3-ec9ea9cc1a3d\n89b1c1af-3a0a-4909-8537-19e96ee1e7f8\ndcac10fb-f5e1-4c7d-a068-7cfd1313bc82\n6cb24481-54a2-4083-a123-53219b734666\nd941e57f-10c3-46c5-bd47-a540f722e341\n929093e2-0c23-421c-a5c0-b29bac6b759b\n4501dd71-39a0-4124-a0d8-75bb7cccdeb1\ne2a60830-3fb6-4c8d-a250-8a70630eaacf\ne0907685-c204-4234-b7e6-1c5ce2289238\nfa9cc220-b0da-4ae1-855b-8250cf805ad5\n68680448-832a-44c6-a3d8-6ea2783e1984\nc872f1ea-c10e-4fff-8032-2942f5bc342c\n94a12ce3-17c8-4522-aad1-5d7a4aadf60f\n7954ebda-34f3-447f-aea1-398ad59522b3\n88a05c5b-397f-45c4-be47-6400761c75b6\n42ab3c4b-651e-4091-b781-dce4b40006ad\nbe61509a-0704-4c7e-a6fc-13bfed0bec97\n9e292e47-98d5-4cd1-86f8-ee89e243bf88\nf549ecd9-6d5d-4980-9dc6-21189e38f659\nc1843333-e0b0-4456-8c19-080eb781f83e\nca5b937b-753d-418e-bd60-b10d889149b2\n5d2cbc0d-af4a-465b-a281-60ec0665fc00\n1def607e-d35b-4a01-9bc2-a5d66686c7e9\nc54122bf-aef1-4a7e-b257-9c24374088cf\n01bd22ab-c361-42a8-8042-de8d925d480b\n0e68493b-e23b-4c9f-9099-e50d0609bbe7\n8592f7cf-33fd-4939-8814-9d7eaa872536\n68dfbcf4-a775-4ac4-b190-280342a426c1\n2d1ae775-ab29-4f2b-bae7-3c9cd3a1118a\n781133ba-59e3-4130-9957-f6d6a595dba6\nf718d7d5-9497-4c61-8c18-7fbde84f6317\n4d43b872-7a9b-42d7-8b57-a91c35e78e34\n9227b97b-88c5-42cf-8e3f-04d9811454a3\nb63a05ce-45a7-4cff-9f86-3fe850993692\n4803e177-b65f-48c3-b513-2f44c77cc51b\nf88aa30b-6939-4b67-a6f2-57780132f32e\n5b7bac33-e575-4468-ad06-a4ba3fd714ab\nd0a1c109-4281-4e63-a7ae-318fda435ab2\naf3ebfe1-2de3-4145-ad0e-eba49ce4abe6\n784eed10-793b-4ed7-8c38-c3bf7036c7bd\n86dbac9f-2a37-422b-bcfa-d8af2871779d\n1e5c4e23-0910-4fc9-9708-5e83adce8b25\n7f92b9b3-3dbb-4cba-bf6e-50de507d6330\n89c4f2c6-881d-446c-aba1-1270114724c8\nc4ec1dbc-370d-4807-ba94-97ecd30f1718\n6fcc4610-f48c-443c-8769-a67fbc6d12b0\nfd643a08-0a24-446f-a79a-4daeb6110ea8\na524da21-258e-4713-a6d3-538664b014bc\na00446ad-9d7c-4e75-bf30-da4fa6e5a71a\na6f42af2-f49c-4490-bdc1-0a2eac20f826\nff5035d0-c0c6-4952-b968-636c360009b3\nb5aa590a-1926-4ae2-b466-f3bd42df1c7e\n1b11ba39-3b27-4d77-933e-7a6598f74307\n6af6a843-6e73-48f5-af33-9962cfb19628\nff159561-f69b-4aec-a758-ed6edb4c5737\n19002395-27ef-4a1a-a74c-7ad47b54d0ba\ndde05af9-4d7d-4774-bef9-80b0d7d58ed4\ne82bb7ae-1f04-48b2-8c88-20555681f336\nc07f5dfe-5058-40f6-a050-245adf00eead\n260f3597-5a83-4725-bd69-4374c6a52749\n819dfc6d-7d2a-4fa1-ba02-771ce9ac42fb\n1f084468-dd29-4d96-b368-33f6b9c74f08\nbda06f36-fae5-4563-bdb2-a7766dba47a0\n8d67a863-ed8d-4008-8875-e7c5d350b2a5\n2381bc22-4f89-42e0-afab-7c8752c99bd1\n489c96be-a890-44a9-aef8-0872d84825ec\n3c74d8ba-e6ab-4a93-a720-df7005022b59\n29692d96-bd3f-46af-9a1e-ecc107c30ab2\n55f3decf-ebef-40ff-870e-6d247480b939\nf0374e1c-fe02-488b-afd5-95bb4ed0cf51\nf19bad52-5e4f-4b07-a83c-4f9a3b3426d8\n4c2e23e0-67bc-410c-991e-82e18e1cd5a3\ned70c55d-bd89-4672-83a2-9cd183b394dd\n008b789f-23b2-4701-aa1c-d8cf3b217839\n403df629-65d0-4f49-a55c-bab88dae868f\nd1980fd7-a3b9-4767-8930-e40e269517f2\nf3a0333a-c500-4463-abed-e218090c6e04\n19f41764-4342-4a0a-bba0-90d27c6777af\n920aee53-a5ed-45c5-b820-1f05e36e5ff9\n65de2fcb-b301-47f9-ab14-d09bdeeb6e78\nee352210-a73c-4b13-909c-d6ab695527ca\n47dee1eb-1b1c-48bc-b0df-2f486d439ac1\n559252e9-31f1-4ec9-8b6c-4c865abc033a\n75131540-a87c-42be-b5f3-689224b941f1\ne2f87bc5-f3f1-4f7c-8255-cb0776be4af3\ne8a7071b-91fc-450f-aeb9-7110df5c80ee\nd48266ec-66bc-4a0b-b125-57f035354fe8\n87b3d7e0-7509-48cf-bfe0-fd4527378c87\n02125a1a-c883-482e-8a4f-80f7f5cdd1b6\nbb8fb4f0-209c-4d1d-a896-33527073f8df\n09aed99e-dd5b-45ce-8213-6c82879452cf\nc83e4df4-7336-497a-afae-32d49fab68a6\nfea32804-081f-4e38-9909-dfeba7d2e0a4\n1df285a9-f53e-4eb9-b66a-f3f57b8f6c8e\n4cde92c7-b0cc-4d1f-957a-8098c74f3f7b\na2e7ae40-9c49-4dee-831e-0409ab8c479a\n40abc6a0-6397-4026-ad07-06d689260726\n1ad2d187-24bb-4396-ad5a-652c409f8a09\n36f05ccf-c303-4290-b558-a8906d67afb6\n491491f1-93be-4106-af46-8b05501b85aa\n1665153a-93e9-4e85-bdad-7dc664796008\n3ff3f5aa-ee7a-4096-9d37-dafe5df59452\n6d264d7e-f72d-409a-b239-28b7b4e07992\n6682b4ac-117d-4c52-99dd-2b1d08786339\nc1eab1ec-9e62-412e-b6fe-8013f9b8243b\n80d01487-79af-41f9-98e4-282ce5e89605\n850d83ab-2fb2-467f-ba49-01900482b327\n26d74819-39ac-43a7-828b-be8a13f41953\nef2e8283-1c7a-4392-b7ef-48c096f8ff75\n9ddac7cb-fa09-43cb-b9ce-0061765e8ced\n572f4943-cbeb-4194-b520-766002c0ef85\n9db27c1c-e18f-460d-9fe5-9f667cf1ab23\ndfd392de-381a-4de1-8fb1-2dcc68b8ead2\n9af88113-e563-448b-8830-1294a35478d1\n0833a1b8-dfb3-4087-b389-93167b523530\n4f3f69db-bde1-433a-92ee-7ba35d431273\n389dc2c1-411a-43a4-a9d1-53e69a507e2b\n296d9178-43ff-4e44-8fe7-5f137dcde9f5\ne8c8210d-ed9c-4445-a55a-09a9c69b445d\na7af94ce-6acc-42b2-adb3-a2caee2ef2a3\n86accd86-8db4-43da-94f3-d77bdf860bae\n90868d47-400e-46ce-95c2-df48985a7133\n3a150f29-bad5-4c9f-95f3-afbe72da43a9\ncfe8ee81-b455-4bfc-88c0-6a5292011b11\n871e02e5-e016-4e71-ab81-965192a1cc89\nb193825b-b142-4a0e-a41d-fb9d2055337e\n7227c667-6ca2-4d3b-acd7-1bf22ec29965\n1b06df4d-ad28-4eee-b09d-2c917cd3ae11\n335b46b5-252a-4e53-87d6-0b4a0d1174da\n1f7c5d3a-1030-4834-b767-f34f24b349d4\nfbf776c4-9525-4ff1-a5e8-1eef24d55522\n08150164-9bbc-4bae-b996-5a45547275d1\nfb4436e3-fa00-49a2-b38a-badff98197c9\nc62669e6-00c4-4337-b2bc-c8d19e462319\n6c5fbbfb-68d2-4e94-b29a-9ef3a6b56925\n804fd385-7725-4c5a-b31d-4a2328aaa97d\nfafd3685-ee96-44ab-acff-f06df4b1cf33\n57e5d774-79a3-48b7-a06a-87b02ff342d2\n2871b875-84f0-4827-bc8f-bf6d2c19fbc9\nd5fe702f-883c-4417-b2c2-ab2d1b3708e6\nbfd8274f-595f-4918-8877-afb8d3450bef\nb193db5f-ad0a-49f8-9cad-3c8843cd6993\nf2414d4a-7020-4df6-acb7-5412cc6cd3ce\n8dfb3e83-8f55-48e1-a16f-3d4664d40dd8\n61741631-1ee8-4aa1-a413-24a7fb468e62\n823b1ceb-c859-45b8-a5d0-47fd3fd2c200\nd1f8ee96-3037-4137-a655-155f0f921b04\n3643ed52-dacf-4bda-9cce-f279bc91a290\nd3f2df18-3c81-4428-8147-6a992c6ca7af\n1d2117c4-900b-499e-a1c1-f0932770a028\n89d68f0a-1d22-4084-b743-e338a7f6ed61\n69ec01c2-94dc-444b-a4f2-fd9f9225b8aa\na8f272cc-0d30-4e6d-a0e3-7fe5725342a6\ncc64f729-85e4-407a-a084-af5bb8dd0db4\n900e6c8a-de69-4206-ab0c-10f248dcec6c\nfe3649d6-4258-486c-aa7a-eefe804b32a4\n2c51c48b-ef14-49c8-90b3-53bdf1ffe0d1\n42274882-ec5b-4672-8a99-8d73feb9de79\nbc4e453b-a0c4-479c-92f7-3c1299953289\n00d92159-c1f0-437c-a25c-9475aa88755d\nbbf53551-0400-4ff9-a59e-c7328f2b1573\ne2d8acb1-6b01-4ead-b06d-19d4b6295e2f\ndb4b3285-be27-4677-8a85-8659d697a68e\n610ec902-8991-4bc5-8233-dc8a582c716d\n63ee62ac-4a52-48a9-b87d-d38e1d7da2b6\nb90cac28-aff6-4e12-b3c7-c405a4ce9cb4\n3976af81-593f-4cf3-b333-92f43cbc68a3\n02091a92-539d-4261-bf77-8730d1cc9fcb\na3795f38-0b3c-4b37-8680-acc384e1c3e9\ne1315ce1-7805-4744-a2b0-cf8ec67cfaf4\n77c88d6d-3050-4a30-866f-6f3d242c6ebf\n161cc1c6-c1da-46e1-bc9f-4b06599c7360\nb4052db1-b4e0-4bf2-abe0-4d22b38e5d4a\nc473ebf9-8a6b-4b82-843f-90c53a28d79d\n9cfabcf5-8b72-42df-996f-0d8db6b46a7c\n0080904f-4e10-43f4-9f2c-ffa395b39d9d\nfa76d87c-bbed-4b65-804f-93d4c58e0b7b\n06f7ea9e-4a88-4d50-bd2d-25eed9aed47d\nf837404b-4195-4d3e-b0cd-05d5db17ef10\na292dbf7-9d74-4c79-875c-3c3bdbed8629\nee856e18-b7dd-4f67-b16c-ea5366dd9c14\n21174ffe-a7d7-4baa-a356-f45178aa9207\nbd69837a-ec69-4740-8c2a-d941a612fc89\n2df240c9-416b-4a77-ac5d-dbde3f002e3e\n2ff3b591-1768-4882-9bbe-f04455a3884d\nc266b6e4-d946-4da2-8551-68bb5f877979\n2757618e-db00-4ca0-a0b6-3de63ba9360a\nac6c6420-05fe-4423-a0f2-3a0177ae2976\n8beda8d8-e029-4a65-9008-0c1706b39c49\nc08cca11-a1c9-4c81-8e3d-e9f44750bf39\n1c413a10-4d3f-4f03-9992-ca4be56ee62c\nf5227a0c-240e-4def-a2b8-2d0fc3deb4de\n8c15b32d-0281-48ef-8e84-c224c7726551\n1d8f8b09-2ab7-460b-8d81-2c7a09dcd67a\nd98a6ece-8b84-4336-8474-3e93223f2a44\n585c2636-0037-46a2-8222-56ed9eb5e828\nc9b37447-eaa0-4f53-8e5e-57f91738e4cf\nd4941d07-0bd2-4084-a664-7fe5687b6b8a\nef9679d0-0671-4382-abd1-874afe0cf311\n2acbfe34-ae26-42c1-8f5b-0d9cb6ee41e9\n2a1af572-0f36-4dc4-afb0-61a824563b73\n1bed29af-b006-4e0e-be05-49f8b43ad4d6\n3bc94e82-d9be-4581-8f90-11a56e394695\n87be77a4-8006-4dc7-be4b-c0781dcad4bb\ne2b8d268-7a23-4704-aaf0-ea772149dc54\n10ca65a6-558e-4b11-8241-ddc631eb062f\n8f5153db-49ee-4d73-a831-8ad26c75b854\n5dc99bfe-0030-4682-bde0-1b38f9c2c837\n089eccf7-9196-4d18-979a-487affa21a25\n6a31d720-b0e7-4dc9-a14d-d109be1b934c\n44477865-e4a5-4c09-b624-48f420613b69\n41906525-fb02-4e68-9de5-ae9c8554d264\n8419f967-a152-4558-ad2a-894e11464689\n944a1799-4359-4206-8e85-f1d73e489298\nad3580ea-5c33-46b2-b188-d8aeb665a533\n0a563f09-a781-46ac-b321-c45f32aeedcd\na69d081f-8d58-4745-876f-3be03b72606d\nd93957ad-86f3-438f-80e5-d7b29c66dd3f\n91b0a158-623c-4044-b22f-7c8346c7d623\nbc25919f-f1ab-459e-87da-5ae5f5a3fdbb\n6157e600-5910-413e-a1b8-ca805c9689ff\n401a9b9d-e053-4363-a120-c6cf78fa0b69\n9383b093-4e36-4a98-ab2b-9719861e91eb\nc9ecc27f-162a-49c3-92c7-9da5ff59fb98\n2deb347d-1baf-4daf-925d-03c80e25bb34\n84306e23-0f76-4af2-8b2d-66ca3b823798\n76ad2d4c-44a1-44ff-b200-3fe120cb7300\n338d6a7d-c3a6-4590-a163-ae0293efac2c\n058e97be-0b04-44e8-894f-28be9db421b5\n083d9647-ef96-4d2d-8391-85847a2d785f\ne3df3c06-1765-491e-b2ef-243f0701b2a2\n8a57b722-aa05-463d-a4d0-3c309307ec93\n86a5b8a7-1ada-455d-9285-c1832102ff4b\n7bd44a15-9e7b-43ee-855a-46726811fd68\n3d3a5fe3-4cce-469d-a64b-0d0edddce65f\n7a5a60a8-8cf2-462e-8a8f-c53760cc4a30\n6e905b8b-ecd3-486d-a46c-8c1781d80a8a\ne3c3b2a0-203c-4681-be04-dade2b28986d\n63e7be04-dac8-4967-9d16-c8bf4a6dbb4a\ndcfcc5e8-55eb-4934-a63c-ad0e94b2fc99\n97b7efc7-e4f6-4796-a6b6-0228b150fdc7\nfd57ae53-8178-421a-b572-bab519c52b04\n32c26729-fd5c-43d4-a9c6-b11f64dce667\n21ceb9ee-9e38-4a7f-954f-9cf48e7a2ae2\n1fe49a6f-e828-498e-85fc-61c602f87315\n56d0f1be-dd35-44b7-8df0-d527e3ddd7a0\n5c011d50-554b-40d5-b21e-07f3cc3a327b\n0ae41784-5af0-43a9-a19c-524e505da0f2\n10c3e5aa-10e5-4aca-842f-fc9a950b90cd\n5cc6a52a-6314-4ee9-a96e-4c7746d3efb7\nc69699a3-ccd2-469d-8dbb-24a440b1421a\nf9aa69ae-c145-4bfa-aed3-fef860c261bd\n6bc64a75-0f34-42fa-8423-ea896cb2cf52\n6d9d1dd3-e010-4fea-9b0e-068a595b75c0\n422034b3-8dda-4451-884e-b3ba425239e4\na0b1e79f-c34d-48cd-b83e-8e05e4f13468\ne0bc89fc-fdd6-46a4-b1f0-39457bb1283f\nb1c82f31-cb3d-4497-8404-8af844ddb858\n35e94f42-262d-4b73-bc6d-fcd8d0dc3f02\n08c72c68-7343-4e42-aca5-4c9649c9afd3\nbbf4c6b3-b27d-443e-b7bb-bb039e7a4731\n0f8ba8bf-01f2-4d4a-8746-dcb7b4a72f14\n5017b71c-b7b3-48d2-ae4a-73a53236edaa\n8163437d-5d9a-4f74-a555-fd4a946641c3\n87e48d31-a44c-4cb1-b7fd-6993c0a10269\n040dfa87-5c86-4ab4-8fca-e2db82f94b1d\n8fbf2cd4-f41e-4168-9743-ff45fcf4c89b\n8f5d3c69-3dda-4997-ab22-588937a7075c\ndf1b8618-3056-4c85-bbd8-6d4370ee8c9b\n81e2127b-4491-4417-8c72-8586a4faeb92\nd6c2df45-a45c-4e14-8e2c-9f2fdd1a2d1a\n793ad086-03ea-4556-b743-7630c3d0fa04\n3e16b48c-b553-4cd2-9e48-d9b82d7d73b8\n854d2b3c-08ad-4097-909c-d3873fb10f6a\ne31e8bbe-c6f2-426a-b02c-fd81c585ddf3\nc675c567-0ebb-4762-a433-7024c3cad644\n59c6281d-2dd1-41b2-9341-7bc26a3ac3be\n4761eb8e-91b4-4915-90a3-d2af52cd170a\n931074ec-b976-4fc6-b53a-ccdf98794f7d\n753d507f-37b2-43fe-8368-627435004e27\nb277a101-83a9-4e3d-9b78-631b9d6a59ff\nf041c48b-f0f0-43fa-b6f5-7ae625ec9ddc\n8e851ae3-cc65-4988-bce7-91a94ef161df\n4de2101e-d33b-47d2-8d12-4b83fb5c5b92\nf3bb5bcf-c942-4cdb-ad8d-2b39df9c41d8\nef312737-77cf-4d69-b5d0-be5b298f5daa\na4b1f149-c4f1-49c3-b272-2116d23410c3\n5085feb4-27ee-40bf-a917-4380ae9b37f7\n37a6b454-cfb8-4171-a9cc-ba4bdef570fc\n827586f0-41de-4f41-910f-1c61b71121b6\n21b1b2c8-2cc5-41d4-a17f-ef918d3172dd\nefa272f4-6e0b-4cea-ad05-ecf521c15209\nd21f4330-c731-40a2-8c1d-44bf94d41dff\n7c906019-050b-4d76-b0e3-aff6adca7bae\n9194847b-d079-4d79-aada-1a29720e09e6\nb1d886c2-b688-4c9a-8b64-0d93d4670666\nc29233b1-7592-4a90-80bb-84003da0c3f4\n2598c10e-62ff-490b-8ee5-f42e39fe79cd\naaa083ee-60c6-40aa-8d10-373d7195d7ae\ne8d9baa6-9783-40af-bc25-5fc32767aa00\nd919c2ad-7847-4334-93db-13fcab761a47\n727684ba-ba0a-4817-92ff-13a0c3b6a871\nc8c5d476-9bc7-4e9c-bfbc-36ad901fb439\ncc3c366b-835e-4b54-ae3a-544647c0989d\n56ab2f65-6d31-4ccd-8fd2-b55bcdc40524\n24417731-8e75-41e5-962c-71550c0329e4\n2693a82d-221c-47a9-a641-c1ffb7d6b7e6\n0a35c57f-f742-45f6-b5a8-5b5a87904169\n831c9741-ebf7-41b1-a73c-539e4e9cc6eb\n754de461-bc24-42b9-a817-64a31acf92ba\n003887d9-fe4f-4c26-bf34-36d9f61e5964\n51607f3d-26f1-4c52-8f83-fb60d9938acf\n6f8197b3-6644-44a7-a18b-cb88ee44524a\n6c40b6c0-7690-4a86-8091-e0b82d9e8362\n5b59128f-33c5-4702-bcff-faa2534e53cf\nae10768f-996e-4065-8db1-39282dba6568\nb5058118-4e18-417f-8ee2-9e43cbc508e5\n1a46daf4-e649-41a2-8ff2-44a9cfcbfd87\n7fd822a3-36b7-4480-baeb-cf0c7f6d320f\n7c0b2170-faaa-46e1-b8ee-704fa91ea19d\ndda04a2e-6362-4a5a-98c4-d4720a3ae213\n7cecbc79-c644-4794-99f5-29b1faf9274f\nc4682941-662d-471c-9606-ee8eb5bbf22b\na83a431b-644f-470f-ac71-f245ea4581bf\n190df5cf-ace3-4e7a-ac23-18e7676f24bb\nced8cc49-8a67-42a0-904a-64ade545d48b\n151c11de-e253-4ee7-8921-ae4a06249b7c\ncdc25040-c4d8-4530-956e-2119d6954844\n90ae7531-714f-4c54-a146-c62986a0ebfb\n9e32caa3-1a45-469c-bdf3-145e35100aed\n32af6ebb-4ec8-43a5-8f57-60b17c33b1bc\ndb899735-cd42-4cc7-a462-2b13b3aea423\n5d9b89ac-9547-4fac-9224-72db49e9fbaf\n7541466f-8502-42dd-ac96-590372aa65d3\n65ef7252-d62f-47ad-95e9-9768c8e74b4e\n027d8f2d-d160-4b4c-8721-ade8bd62d36f\n26cacf0b-fc2f-4c09-99ed-5a2bc72af728\n29638cf9-15bf-481b-84c8-040719fc8bdd\n00626d05-81b4-4790-bb76-0cb8ea831d6a\ndc77b1f7-de51-4b8a-a510-b7e4ca5551db\n9cc30413-6c15-4395-aa30-7b009af7fa4e\n20604f4d-9727-4830-af75-428745b29227\naa3cd79b-3c0f-4543-b4de-b809c6d900fe\ne303cb80-c0cd-4118-8063-843ff45d572a\n7d4fe37f-d5f9-49d0-9b1a-6a5be29603eb\nffe53e09-5174-45d5-a8c0-77371e4ccbf1\nb3026413-d3bd-4300-8a00-5104e63c4606\n07d3e465-01d0-4ade-968e-06033aa5211c\n2ec5c7f4-e0bc-4281-b6dd-a2bc4ecaa901\n247a0c68-f3ed-48ee-a26c-44c79026f255\nbd8be152-1559-421a-a0fb-c7b55a7ffeac\n8f86467f-cd48-41a4-8206-e3939711f534\n58d6304c-63fb-4670-b039-e8814e98e776\n59a93056-1deb-4b8a-858c-518b177f1b3d\n254f3e7e-6b8c-4f13-b062-4ebf03239ca8\ned5abb6c-bcd8-4e18-acd4-8e25d156a0e9\n5e00e441-d17f-4827-90a3-366a31cc4fa8\nd6302254-c444-4d3a-a41b-d8ebeeae41e4\neef414d2-ffe6-4ad8-8743-5fae7ae622b6\nec17cd53-89ce-403a-adcc-299cd77ac4a2\n6df5219c-3bc8-4e81-9302-66c5edfdf72f\nc9c33484-f636-4a9e-9411-95d98ab5a42f\n990df703-4b4b-4a33-a79a-fd518506f50f\n660e38d4-17e9-4090-aece-3bc2bbc53076\nf7939bfe-9668-458a-b6d4-153043e88442\nb68c197d-dca9-4f22-bbdc-10d018229d9e\n6f5b8ba6-14cf-49ae-869e-a720fb464131\neb981c14-b4f4-4f91-859e-8ac58a47b94b\nb6efcc79-de75-4b99-a1d7-2f7174cd5fa0\n491e1d6d-3629-446a-bdd3-c228ff2c5f86\n1b1f8602-040c-4887-9e59-1f8faee5865c\nc0b51ebc-e410-45e4-9a5b-2653c7d61b40\n40494e06-5679-4b4d-8202-1233726222de\nf05b1e03-3ca7-417e-aa72-972bdce91f80\na75d1552-9c96-4365-8b88-7df49844a7a9\nbf698c6d-fc91-45e6-ac63-dd1941692937\n594de608-7736-41c5-91c8-3a39a8ebdc82\nfad2a599-9a73-4bb1-bf52-7b3162db19d7\nf477991c-0de8-4799-9585-a3b4a561d8c6\n2f5b18ec-0692-4ac9-8405-3db78d6653e4\nad3df3d5-f562-4105-824e-50da4178f4b7\n5af3b009-002e-4ee1-b31d-44bb62fa4ccd\n1ef3bd0e-7647-4582-909f-2545d03e517c\n1c10b85c-cfc3-4bf7-80b0-18756b6fbc1e\n0ddbd04c-8bf5-4712-9820-7caec6fdd762\n39c3768d-3925-4152-a45a-01aac37633e5\naed3d166-03df-4924-b9e4-d206826b7376\n66b56eac-e9e8-47bd-8add-e57603b50492\n3e20f673-838a-4167-806b-b691c9658ed8\naebcced2-2ff8-4702-ac4a-c8eae6afaeb6\n92a2bab6-811e-4586-81e6-c34e29b3ec2d\nea85c11f-3723-41e5-96ca-1fe7c60effed\n635dc122-0de4-4e4e-a7c5-a5b071f75903\n2f18da08-f0f5-4aaf-a244-8b1f24859aaf\n9e038de5-875f-4cbd-b3b7-cf34b99f49d6\n89ed57b8-715c-4a33-95d0-fa3e1bf416c6\n26a3feab-2541-498b-8a9b-5f3e83abe836\n54252b83-24aa-438f-824a-fe352b2b646d\ncf0e5285-07d2-44b5-a18f-b62ba75123dc\neec3fc53-74bf-4d0b-b587-d413809262ed\n999f5753-c1a1-473d-af93-897bc3250138\n39182adf-2d6f-4a17-969a-cac5cc9b5658\n6e505017-76cc-46d8-a4d9-db07b7384012\n5854a84d-0fa5-4c48-9232-c88d98e9c0e3\n8bbc8704-d0cd-4d43-b033-696f218cd533\ne9374f8e-6d86-4d5d-809c-4c93f9b1e2cd\n86c6ad98-8a7f-4eb4-8d80-90f16ebc3350\n627efa50-345a-4d45-93db-0bb3a03d4a1a\n59d51d1a-d8fa-4b5c-8f2c-cca5d324395d\n6b4b41eb-d355-4077-b50b-560623655fde\n8690f452-d8fc-40a6-b495-bd12ff2c0e18\n2695a80a-f4a5-4c89-b3bc-8836e99c97bc\nb4a0abbb-86d7-4952-aef5-731e03ad7dc1\n292d55aa-bb74-469b-97fe-51a06da19f4b\n2d3a5039-4fe1-4f34-9c58-05eadb6868c1\n7fe6b7b8-5e4a-4d01-bb08-97a201fbe6f4\n5a05d75c-9e0a-4632-8952-8ea0d103bb93\nd374bd96-b012-49fd-8190-fb16f5ab96b8\n74c0e4b5-aa8a-4bea-ac4f-fb0214c66eeb\nc67cdeb7-144d-4684-bb11-00f63393f332\n9581760b-535a-4fa0-a156-f8886987ffd5\n07378adc-df49-4976-8ba0-8c3f3dc71e45\nb0de6a74-61dd-4325-9544-f7a35982b96e\n9c1d5ae3-49b7-479a-93d6-67e20902b2cd\nc0541617-5567-41a1-afd7-7c01a56ac5e5\n2c242b0f-0daf-484f-a6b1-84c1a8874a03\n26cbdb57-6563-4706-9d70-48bd2fbfbe98\n14ea2568-6061-4a42-8e2a-3345f87996a8\ne54b1fec-40ab-4f42-8043-a4878cd03b2f\nb02be736-6f4d-4983-8b5f-5db77905ea81\n626b3d63-1675-4a2a-83ed-aa627ea48ef5\n42da3a8f-42ba-4e43-82d8-f87b8cec7c2e\n6ead640d-9629-4aa1-9b69-ca872b6972bd\n74c88a10-dbb1-48e4-a4ef-0499f63cf769\n08af2e37-9acc-4e6a-8687-968401ece7ce\n7e8019c1-f12a-4daf-9403-9ce1215ad3b0\na8047161-f2ab-4d30-9aa1-482e9d897430\n89ced49e-75aa-40db-be28-3d6e4c81055d\nb9230ab1-10e5-4142-91fe-bde6268b4f50\n964d03dc-2299-49ce-b979-8b3b122843b9\nece517ac-32e2-4782-ab0b-80200ce35d34\n4db271f5-78f4-4aa3-9b9c-def0a9e7f7ac\n867cde59-fb22-4ff8-b07d-007fc28099ef\n032e6f1d-7986-4b30-bc48-ab7eb413f3ed\n7d244d3c-71f8-4509-9d01-e9dce7cb09aa\n39621011-f62b-4f75-af36-33e23ed6bfd0\n0d886f0a-37d6-498c-8f0e-460ec0a485da\n0c02b895-4a5f-4129-966e-41f735853742\naebec2ca-13d8-42d9-ae92-ce918d6a9c47\n43021744-07b1-4cd0-8575-b0e7087a88e9\nff5faee2-340a-4733-a220-d9ac43cf0bf9\n52398ba7-c65d-475c-8470-be0e84a8eba3\nd03ca2d3-9aae-472b-a30a-dad135b19396\nb8c81ae5-42ab-491f-800c-800976bf1c36\n0722bd89-de92-4bdf-a9f6-b055e1d9ca47\nfaf6090c-6336-4c85-a465-fde5adb4024f\n6d03058d-bb0b-40e1-a300-35bab1905e91\nc10b18ca-dedf-4408-86ac-8dbb47157b5d\n88ca90fd-8e96-45db-ae20-fa77d8d76d74\n19a8292e-abb6-4b09-a1f8-d48af1c69d85\n88e7f13e-bc0d-4e22-81aa-de1c7dd3074a\nf574ee88-a052-46e6-b8b2-0a0512144d08\n5a5099af-e165-45a6-a856-725953a213ca\n822481ca-e391-4372-8424-c1b7265e8ae7\ne97e45ca-a9d0-4afd-9db9-4f66651673c2\nf20b84ef-a8cb-4c71-abce-696b61fa75a9\n0440ba78-b790-42a6-8664-7da1076f889f\nad822870-ad49-4055-bf98-dcb387b9cfab\na80b17e8-d6ad-4258-907e-a2e641293543\n762c4b68-c82d-4cc1-a347-93a25f73129a\ne450c977-415f-404d-81f8-929467733aff\naf3f3a68-946d-4c84-9b87-6736c7e35190\n8255a81d-8945-4e13-9d7a-140f99f58faa\ndb2d2bd7-fce5-48db-9d79-aaaa977fc4a1\n8020338a-cb70-4136-8fb7-f307989d5323\n6e1f4052-a3cd-4b53-a2b1-4c3d0d7df73b\ne8c4cb10-761c-424c-8678-5c16e60eba05\naad0f7c7-7a23-4783-8baf-3828fdbd9a31\n9f281725-9b65-4f97-a296-357028528132\n7bf13293-246b-4b1f-b866-c3339a7fac8c\n30c28d43-9aa5-4795-b9a3-b0f080672f6a\n6f02673e-2d88-465b-b5b7-31a61846671d\n2a21ebda-8389-4249-be2b-88923486307d\n49192012-1e73-41f9-868c-8f0c1251fa7a\n6cf9d21e-ea74-4a21-931f-f7e6fe9a8d9c\n3b12d5e9-f639-4085-9c81-e7060ec3de61\n4852d7ed-4e69-41b9-a249-2bec1740dfa3\nc9e9ec91-e9c4-416f-bce1-222ee1ec6c47\n9db2eb2a-9b7c-4240-9e64-953e3780d12d\n9d4ce07b-430f-473d-b148-64013541646d\nabf9a4a0-e6c7-49f9-ad15-2a098786b1a4\nea15d11d-3e01-4d47-bc8b-cf053e69c554\nae17bce6-b6b5-4815-9ca0-86fe0a944704\n762260a8-9049-4b21-9cbc-eab1782ca8d2\nf9abeea0-392e-44fd-abeb-a9807eea69f6\n41ec7607-bc96-4518-8059-813945ca9262\ncfd727dc-8da0-41b6-84c3-6cbf24b8c78a\n3a8f9d46-0029-4231-9c93-7b3c709aa149\nb496d99d-deb1-47d2-928f-03f252ee3ba6\nc8397c52-01e1-4e38-bbe6-5510599902c4\nafda80dc-73bc-4a21-9d02-40f94a6de32e\n13ae0c2f-8a01-4ef1-afb2-990fd297eb09\n4ff110e9-b5a8-4f07-99d3-cf07d214a5a2\n4d8e074f-66d9-4ba9-be72-a1fd57e439ba\n31443960-2ee2-4a35-8dec-bd4b1e097bad\ned5e2ab5-2d61-4e47-9324-522d3703df9f\na2951796-ff33-4e7f-a68c-56836b6c9c2d\ndede2277-9353-4ef0-8705-e96ea6268b45\ne0338fa6-874f-4df6-83e6-fc63d9bd3a61\nf62b6041-9f03-45b9-b678-351a6580b9a7\n4c2bc92c-72a6-4faf-b1f5-87348b4c71b3\n5a46c4d1-6343-47c0-a08c-7d237119ae3e\n9d7b6c14-e421-4fe9-b3c4-69f414c13f2d\ne1819f6a-4bc8-407e-81c5-f4e91d71bcaa\n9e4cd30c-e518-43c9-849a-79a1c5b7f62a\na6b430f1-d7fc-4e3d-963e-5719f9d7995b\n9da4260c-7856-4ad6-afc2-f75a22a6bee2\n5dd9ece9-d615-43d9-849f-be78ce106d0b\nda3dbdc4-0483-4988-992a-2ceeffce46e7\nedb7e249-f9ee-431f-a741-d8706a8a0638\nbc3d5582-0d70-4348-827b-8d59272418b8\na7c6d177-f049-4b46-86b6-e3a277c8a1ee\n68af0d9f-05e3-4ec9-8f88-6eac9815a95a\nbb7c0893-77fb-4b41-8ee2-38cd961f0c49\n4c94cd1e-c8e7-45ff-ab08-c59000224d7a\n5764ec4e-a822-41dd-81e5-079c84c48b5c\neb4225cf-c6b8-47bf-a71e-26e2809c52e5\n57e40876-8ef8-41ed-aa35-61e80a8c0bb3\naf369862-debb-4512-aec2-425b31a09f3e\n8e4a0359-5a96-472d-8f7a-b72242ee9e27\n9536b52f-2579-4336-8cde-94c336438a3d\nadee71ab-3e9d-4b33-8828-bb84efc01f2b\n1e7b4275-e6a3-4efe-9bd0-7bdfe942c732\naf522191-9e2c-4417-b4c1-9ede001b56c8\n00b69eab-d30c-429e-ab35-c843d0c675e7\n1a79cdd1-4b10-4188-b8af-f3f04fcd9865\n74626c34-31d8-493a-b616-5c57963fa61c\n974aec85-b291-4da1-b231-3d2d1cd1109e\na38d91cc-5cb5-4f67-9413-354c9ce48f29\nad60c00e-9cdf-454f-9446-d27aba1412b3\n59b139e5-5691-43c3-a24b-d7eabcc7284a\n1f7fd040-1d5a-485e-b312-203a4d614b96\n084cec31-f174-4575-b823-c3578a481826\n0aedc86b-1535-45cb-ba4a-16ac65a1ab88\n84dabbfb-e3e5-4b22-900e-2faf7d118877\n08dfe264-a6e3-4358-88b8-2ca350267e24\n5bbe5a74-5dbd-4a9f-ab69-ba9ac1120586\n18097deb-3ef8-4497-bf9a-78c7c51a6fc7\n98057b79-7f39-4ff4-b1fa-4b44789fb94b\n722115b5-faf1-4772-98ce-a73b3a2f703f\n3ba38a29-e01c-41be-93a3-bb343b056c6e\n724acbab-1f70-469a-8a3f-13dbdaae4093\n62d674be-449e-41ce-8a32-f326edde2439\n2154a171-8a02-4a04-bf38-c47ec325b5f8\n9b6dc646-25e7-462e-a9b2-711c9391fa1e\n357db2d5-68e6-468d-b7d9-edbd20653bc2\n2cea17b1-9d92-4e5f-b81d-cdbda7863b11\ne9bfb776-e8ea-48ff-8669-b0a067a4320a\n9db9fae5-d654-474f-8cc2-4f41611e2e42\ne56b4314-dbf4-4f97-9346-9b971d2e2824\n279cf5df-91b0-434c-bedd-0d900ae7206f\na6f64a3f-cb99-4ce9-8233-4673606d6764\n47314a9f-3a7a-4109-b369-4968c3fd2198\n385fe40c-5dbc-4cb4-b1e8-ffd34d32dcd2\nd2ba8e5d-e155-4acf-be1f-cfc1e3f5bd82\n26091c5c-c56e-495d-bc69-6d2cc8bd9c0a\n4663fbba-869c-41b3-97c4-d5ce51c307c5\n8cd49bbb-046d-46b7-908f-ab8c27e05e71\n693baf18-b878-4855-bf1c-d520b46daa09\n7d0b9924-5cdc-4e58-9853-c1c57c83705e\n8f70c036-bef4-4de1-9774-e5fb66609e54\n785ef390-c0a9-4553-926b-63ee7907928f\n5ea14ed9-754a-410f-b69c-b3a97d6be195\nb31a8c79-828b-469e-b788-820f8ef61df0\nbbdbb344-e172-4689-abe6-0019c9252954\n2b7d1444-d597-44a1-b5a0-15e42274ba25\ne9bd3726-3c55-4a29-b34a-7975830e5dd9\n18f514ac-fbdb-4958-9292-cb2cb6588ebb\ne07c0f4e-b0bc-44c9-9270-3c7d172acbae\na197885e-5293-46b9-a717-da193813bc1c\ne9885522-52ea-4b0f-be73-c3b1657385e7\nbb7e0cc7-3054-425a-b966-bacb25be179e\nf9453b9c-0090-4277-bb68-67e77465ec3f\n39e02796-4c07-4033-bac9-a495d1da7e09\n5f722670-bf10-4b7b-8e3e-43f977637942\n4d47aabb-301e-4eda-b685-90ae260ab622\n2a1f1da2-cd57-47e9-943e-bd1c2becf71e\n2f86f81f-6baa-420c-bea4-f47c0bc60597\n44eccaea-93b7-4284-86bd-426a6dafb46d\ne2e02948-73d9-4dff-9774-bc4fb97fe9d6\n49d5c132-7d0c-46c8-8997-de8b9dee2874\n9d9b358a-4010-4b9d-9f81-5edc26a1d5df\nd5f846a8-7819-475d-a401-aa9bfe01a0dc\nf154cdd0-71ce-4376-9cda-369211fe7c0f\n714220c0-49a1-45c2-8057-7a63250f3847\n0cd34404-40d7-4d7f-908b-9f065fdf7c34\n985452f4-0d02-4a5f-b83b-31d2fa1f392f\nb1836d83-6ea8-41e2-a917-77df631a2d33\nf5ea32f9-02eb-4d21-82b3-182ce97c4504\nea93bb6c-18f3-41eb-8a88-3c56b01edd26\nb8a9e30e-5a2a-4cd4-91b6-adb2115b268c\n949e58b3-12aa-448e-bfd6-f83c55179791\n04e882f5-9b0a-45ce-b1de-ff72817aa7af\n3fc96225-da71-4c3d-b95b-2806f3430412\n79141bac-40d7-49ec-95dd-40f9cfd706fd\n50ffd486-f24b-4386-978f-e4c77d81121f\n8c6dcf82-3f82-4842-a78d-223988bb49e8\ndd7c814f-941c-46a3-890d-7013f852066f\nfa0ded34-020c-43ca-a754-73890b6c8c48\n2a936a42-ff85-4e56-b418-8a54dc835ab5\ncc4f2e50-08e5-486c-8d01-b76fc362221a\n4ce4bb39-f533-449d-ac89-1b79d5a0e26f\nfada7980-54e2-478e-b0eb-9bd158f5e31c\ncfb35b0b-7ea3-4216-bb68-50f8bd648d47\n73d05562-f7d8-4d68-81ea-499f4ce534f3\n5b8cd280-4f9d-4ebb-a32e-b71d1d3c2a7f\n0b49eb7a-a033-4b03-8b7a-4489b5eed4d2\n88a252c0-bdce-4aac-9e88-ec7c7f3a0023\nffbcce60-718a-4270-b260-cdce17f520c3\nf65ac3f8-c1fe-4b2e-a979-5eb2ea62422b\n00a8bdc2-53cc-45aa-82ff-2f79bec175ab\nb09a9c2e-bcee-469a-bb4b-7c6610be12ef\nfa9cb918-7c07-42b3-b474-4c6a1864a280\n18aeeaa3-ce93-4fac-9826-15fb27d75cd5\ncbc9ec74-221c-40c1-b742-b073f4067d89\n2bd9a459-f64f-4c15-8859-a0f5fb6f0c27\neb5af666-d625-4e4e-945d-394f6df07e43\nbf865b5a-e50a-4c2a-91b0-900ec400d47e\n0e832243-e3bb-4dae-8bbd-a058117f52ac\n326b67a8-e814-4218-8181-8ddcd453b894\n6907d501-077d-4667-9f8c-f02efb58bab7\na25b6c8d-3148-45cf-a97a-3fa9e0bdd596\nbfa68856-dc74-40c2-87f1-d9226ff8f396\n1307d6e9-b863-4db8-9704-29c48939921a\nd27bd4a6-885f-405c-8f79-cdb18d01bbb6\n7e2177a1-1f05-4c50-b9d6-10c05f476283\n231621d1-603a-4772-b451-4a42b2e31485\nb1e28346-7419-486b-b9f7-4ddc32bdffbf\n1e3d0ed4-bacb-4ecf-b27c-ae6e561b321f\n90b1a6d5-a370-4d92-9c6a-a1b31baccf08\n7c330cd5-603c-4fea-99a8-939f7bc95e1e\n9d219835-36a2-4b99-8508-78d8d798d60c\nf67902b5-3b41-45d2-a130-77e61e4cffbe\na9a6cb61-ee0e-4c7d-baec-d6b294f7add5\n6e19c0e3-c636-46ee-b711-0d89bef3a3b6\n1dd1ff2c-eb8b-4515-9c52-ae921795e176\n5342088f-1ccd-4686-982b-828a32e23beb\ne62fb401-c2a9-4314-9d73-64163d58e5e8\nd9b38ecc-e990-4c62-987b-876d386b373e\n1abcc195-0485-4753-aa9a-0908f3337901\na83725ab-8acd-4387-8559-b714542c39cd\n0047a0f0-0463-447c-be88-f8adff2590df\nfa059758-89a4-42e8-b207-84b6b3af0fa2\nc005b730-3358-43d0-b1eb-cf22b5734853\n38cf567a-b014-4e08-bc4c-80cee3bb9993\n1f2a29e8-f86f-4511-8a80-171169f3608d\na753c323-7c32-4b24-bbd4-dd92db50e9af\n62226144-d68b-44b9-acdc-07578ffae3ed\n0ac66782-84fc-48e9-acd8-3478a9eecf24\nae2d1880-ec91-4849-a994-3882fc74e2a4\n4420cc9a-9407-4681-9ef7-079b5edce392\n37ceb7dc-0306-43e6-9335-a479716f9196\na28c967d-c9c1-44e2-b451-a1db330cf1ed\n7b9e48e7-3d41-4357-a8ae-6467bececf4c\n8bad584c-7a6c-4afd-aacc-5af41cf59f8b\n855ed006-fcaa-433b-a952-2f73eca5ad62\n61f25286-b38f-44c0-910f-f8f367f223a0\n6e0d98a6-a723-4690-ac5a-72c409a39dc5\n03630a6a-9559-4e80-8088-34b8412c236c\n102ada3d-f144-4957-b852-2e24fbda4c0d\ne884865e-0c4d-452a-be25-bb69713898a0\n3eb6b496-6228-4a01-aa8d-e9a687481aa2\n02c1f49e-c93b-4465-91d2-f8037c8c65ee\n5e6190cf-b0a0-4d5b-b489-1c29fba901ca\n1a242b7d-8b20-44f5-a140-657a3952a2ef\na872d9dc-bcf9-4ac6-9241-1fddfa3d6907\n637fef39-f6c3-4e9a-882f-1dce329054a1\n98c47fd9-84e8-4020-b798-f275c4f53bd0\n7679002d-433f-4914-b5c4-7ca92e3dacda\n89b10efa-4795-4b3b-8f9f-8dc1b5b79283\n1e772282-d0bf-4ccb-a1ee-c7e457157ff4\nd62d1fd0-05cc-432f-9c48-439bdda58d22\nee900820-ba25-4e7d-96bb-b1dc1cbf289b\nf7df79e0-b26d-4b01-87e3-133dc9e2a374\nb9f260c5-a523-46f2-b428-341a3a10740b\n4deeec2f-739f-4da6-9577-1fb2178412f5\nc0318676-1438-43fb-9bb8-5b9a552157f5\n01d0d558-d5f3-44e1-87b3-e9a00c57dfd1\n4aff2ae5-0d21-46c9-952b-5a7cf81b5c2a\n60c699d7-fd28-4844-9d11-8f66162aa346\n45c866de-8bdc-4fb1-9c0a-73d7d8298055\na4480427-ff53-4d99-a481-eeeeb7672fba\nb6362629-c8dc-4c01-af74-2725b034e5ab\n098761f4-5701-41f0-9c5f-d36a947037e6\n498d402f-45eb-4725-8f88-efdeaa40996e\nf221c0b9-e565-4751-b53f-99aafdbf6fc9\nf8dc770b-c8ea-4f3a-b745-5f96769c5a88\nf74e7d97-5054-4a3a-b02b-f7d043929e69\n7aef1074-40f8-4ada-bbdd-dd193e695557\n8469206d-f7b2-4d4d-b824-f18a1e53a65c\n5ba8601f-47c0-4168-94d2-e20d28aff408\nda989761-bd12-4eb6-ac55-226919425e06\nc362b478-70d7-459a-a393-e99d1cca0166\nf3b569d0-40ed-4ab6-b847-804a9e26f2a0\n4c6b0487-0d25-4c5d-8934-f221a7c23c38\n40ceb834-ec67-48bf-b454-44f5f2aa9bdc\na9d0e060-eae0-46bd-bb35-6efad09697d3\n426d8f7f-1cb4-47c7-82a1-a996af14cbb0\n1f276ca3-bf61-4120-929a-3fc575cf0afc\n3942f66a-9b6f-4e3e-8783-810d77cff361\ne7498f2c-97e1-4d0d-bb20-5e4ba3e802b2\n0f51e640-d710-4a79-a6a4-1b7a76c03038\nefde350d-6c19-4882-84cc-372fe6e080fc\ne7d4c652-4200-4051-b782-20fda5d9b6a8\nb1eec8d5-68c0-4f6e-abe4-0f91f9217c04\nc2f40ba1-788b-4d70-af47-e93e837db2ee\nd300c227-9867-4f99-b9ec-dd5c616b90d2\n26c8d031-3031-44fa-a538-eded94b14290\n87341d36-e453-41d0-ada6-131e337cf169\n58650d2f-1a08-479f-bd84-4843bf9384fb\n022fd57d-0383-449c-a5aa-b6e2de5f4858\n676def2c-49a9-48f9-b5c9-2eb05bfd3c17\nc2cdb56b-31c3-4ed1-b9cf-6a12b35bf76a\n4e5ab59f-e2c3-41b3-a4f3-32bce7fbdfee\ne7df0b43-b262-4ee2-a040-c730fe36bd7a\ne77ecba5-43f8-4349-912d-236887e83011\n45b9ce1e-2897-43bd-b832-b7a42eaf0b12\n91439f71-f8cd-41c3-a835-4797d76d8584\n8c57e954-0a0f-4cbf-ab81-98179a79bd7e\nd0470416-31c4-4f6c-91e6-7193de85dda6\n22d7d81a-9da3-4025-b80f-4b86dd0ce3f9\n7cba11d5-71e5-47f8-94f5-c08755158ed8\n6606432c-bd69-41a2-8022-0eca0b7149fd\nae3364ef-ac65-48f8-8008-2367ef4499b5\n0e97f18b-e298-479b-89fd-548c381f956e\n4c038f82-a3f0-4121-b1ce-8a5204fec014\n98467d28-91f6-4f10-b08e-b7de71373806\n4c0cc40a-2079-431d-b122-4313dadc64bb\n4e86275e-5645-402c-b1cf-f1c5f66c1a97\n24676b95-3ebf-43a3-a5b7-1dc9839c5a90\nd5c08d38-dcc6-4990-b10c-9d071714466e\nae3febab-30a6-411a-90cf-e8a7f9406510\na476c5da-217c-48ca-929d-1ed29eb32ead\n85ee1124-a6ec-41cf-aa72-d2aacabbd5e1\n351e3aa5-af0a-42a7-b66b-7cd89d763e00\nd6ce7879-efce-4074-94e7-aaedfacadd05\n081f98c9-6d2a-46bc-bb41-eebc91847278\nad232559-92a8-4f89-b35b-420e6f730134\n325df6e6-2176-4c55-9442-87e0e3f6a7fe\nab90a227-a02f-4e06-85dc-db84bbb6ae3d\n1e16048e-a693-486f-97a0-fdccf50be14b\nbdc0bad7-3661-44bd-b941-8e7a571939ff\n78ddf67b-9d6b-4ef3-8aba-8b9ff283ef76\n6eb649a2-97c5-400a-84a7-370fe59ce69e\n85158a7c-0806-43b6-8476-33905a88c5d5\n354b8d11-8f0e-465a-ae15-868583210e79\n4113d79f-ab76-478f-ae59-22a4c382de74\n7059b963-84d9-4b04-97e2-243132ba0391\na04f2ba1-f2b4-40a5-a905-b89e4faa32f3\nbeef33c5-64c6-4bc1-b280-95a9c12d5b5f\n64b2ef74-9e56-4fdb-8dc7-7027a08a0a60\nb1b8406b-1e99-4d90-8b3f-a78d6eab9940\n31fd7dc2-f5de-4bab-8a28-32d9e3afc8e3\n169c6946-a2b5-498c-828d-2d56133f6ad5\n565cdba0-8e20-45c5-bc71-0a83ae2ed4d7\n4df88ded-44a5-48d9-818c-5ea6eb7b2983\n2c9af92f-3b86-4ff7-a319-23906b1a4b43\n503318e8-e6a7-4935-85d5-8a1adafc9933\n76f833c1-ce60-463a-a588-d97a329ee413\nd8783034-581d-4ac4-88f5-774b98ee71fb\n29fd45ce-730a-4978-af30-f261721f2819\n0650c38a-fe86-4bba-adca-572e0480e1f5\n7c49a692-51f9-4e93-a4f7-4ac9c69fb6cf\n78df0632-46e9-4a62-be03-88150557e47a\n04108d03-5c35-425c-a44f-55921b600b33\nb92dbf0d-f403-4e73-bfdb-cabdf5c2bb1a\naa754698-585c-4f3f-b2cf-9548ca31b6b9\n2546a5be-45f9-4eab-850f-0c3b13c326e3\nce90faa7-3869-40cc-aad2-2d2f2cfc5001\nad45e11b-0545-476b-a86b-410d4148922f\nc702b2c1-0f62-4c2b-9676-697987bb9d14\ne061b5c6-e5cb-46f6-a798-caca61e0ea2b\n875c1eb2-3351-4d33-bc3d-b19867f42d0f\ne9193aca-afd2-4752-adb3-750e546115dd\nea371b0f-9a22-41fe-b848-272bb0bb1b73\nf2d2bbca-3845-4053-9ef6-3c0b76c795ca\n1ca5a1b7-9148-4f47-b8d2-b239e253e9b0\nf2ac1fac-d33b-49d0-b81f-82a604560f76\n82fdcf25-a629-456a-a1d9-5941746c9a4c\n0d630a09-5640-40e6-b324-5ba2970147e8\n8af1c0fc-49bb-49df-8ab9-3d5ba4d63264\n2fc23034-63cf-497d-8af5-26cee7a13e6e\nd65f7a65-8a5e-4f1b-a95e-a521fe897ef6\naf9b0eb7-fbe4-4a5c-80fe-9afe313a96ae\n5fd119ea-b59f-449b-96c4-93039a1efe70\nf837fd13-71a0-4773-b1ec-bb1e45558e55\nbd8ea65b-f28c-4255-9797-ebe6ee48b0f6\n2022f384-dd16-4e60-949a-c13b11ef27a8\n9a38de23-8f7b-43dc-8ebf-d61b58bcad62\n270bd57c-d58c-443c-ba11-6e15aeae7420\na950faed-3af9-428e-b2c2-23a2f1bb7083\n3778a385-e138-495e-b91a-f888af2cf356\n67144766-c5df-406d-be4e-6e8eb7679f16\n87eb9925-2d74-4949-9b14-1fec6fc8392d\n1a222d64-2847-4504-9ba7-af8cb3eb8cd9\n8d0a80fa-2bfa-4795-863e-8f6630fcd30d\n4d629a50-6571-43f2-b71c-d3edd4fda61a\n475471e0-b7f5-4f4d-ba94-58fdf7601ebb\n1758b5c0-ac39-4fb3-be6c-467cb77539c8\ndfec8654-0e55-418d-9a12-cb008d85b926\nb01e99c5-2caa-47f7-bdb9-9ae9d4ddecc4\ne363cc16-bb76-4d06-b30c-d8029e448b39\nfd90f9fb-1693-44d8-b8db-df2c4620bed6\na76d818a-340b-49ed-b4a8-00c73a8ad2bd\nf19bfe3b-7260-48e7-9d2c-7a8279da56e2\neeeb68a1-9a70-4668-993f-69b92c828a49\nc28408f8-8ab2-4a0a-a88b-4868fbd7bd8f\n994170bc-54ba-4c80-8498-a09fc9f046d8\nfb39b7ab-5665-4207-8ca2-4df462face4f\n608257f9-1860-4a60-ab79-943a06f67344\n9c655150-6e29-4be5-bf3a-f608a9528066\n5b9a5cc8-4898-41a0-b142-e89423196f7a\n4f993d60-18f2-430e-9441-f4911248f324\n62c6d79e-2bb6-471f-b870-2f5988b3ffab\nd570fa91-de59-466f-abe1-3a1117972b3b\n099e1917-22df-4538-9f37-aaf6595a484b\nd5ff7f6e-9327-4356-9855-abde52555e50\n4a6491d7-74f9-4f21-9646-b8283e3edcbf\n6cb02983-5b8f-4796-b9fd-d9b72e729147\nb24d33cc-6d20-42bb-bdf3-6d739350023a\n6600652c-0f7e-4db5-87e8-6022e25b80fb\n6a13f6c7-bdbb-4bb7-93ee-7dca94b8bc7c\n4e33da20-6195-4215-857f-c9ed22a10401\nad38c43b-0c3e-47c8-b7d7-0459ab563376\ncfccd9cb-04c0-4b7a-a240-6d4d84310cf3\nf87879c7-98c0-4d92-bff0-def632675c5b\n24b6dbaf-13ae-493c-b7bc-5ca9ddd90714\na861f98f-d9fd-4ff7-b2d5-840d1cd5ee15\n896fafa6-fd60-46a9-908c-5c8c9b98868f\n62c90475-649b-4995-b585-38b4ecbebfb2\n9f555427-d52a-4338-a609-d3b69ef0fb0a\nfd08d044-5a46-4c05-8605-43810c2f9686\n76770de3-e1e6-4062-be0a-693bc48912fe\nba8e5513-06a5-488d-aac7-87f93ded8c18\n60e6ffa8-150a-4a6f-a878-e47b74b1433d\nb62fc61a-5b31-4273-a11b-3b6855c9594c\n9dcc13b8-edfb-47e6-8070-9bd0f4479758\nb763f9d2-408b-43c6-ad4a-b2af2ea7fffa\nccae322a-0377-4450-89d6-039191d62b5a\n22978d97-7b26-4abe-87e4-30fdd87eb8a9\na1e1acf2-48ea-44fe-b96f-202b7fec720a\n5b8cdb5d-799f-47c8-9023-8ff317bb8ff5\nf13aa715-16e8-4032-b241-532c4e7941ea\n1d0ef684-94e0-4872-94d6-a90697f98174\n0f77f0ce-c109-4957-bea0-741b6d99db24\n15a862fa-134f-4a9c-acc5-c0db0a8d27e8\n0fffefae-b87c-49d7-b19d-bd816083f61c\nffcc6e52-942c-459b-94a7-958d41001dc5\nf0cfef36-18a9-45c0-a59a-699645cd091f\na650977e-c530-4b4f-a380-b37ec4691b32\n21812bcf-c416-40aa-ae91-7ed93e3b4a5f\n44dcf591-33c0-43a7-acb3-56519118210d\n269d8bf2-e0e9-4534-8dce-c86ba139adf5\ncf32bcc1-8d35-4799-ba46-5719edab2593\nf0ef4729-1e59-422d-ae72-de1287fc979b\n82b74eee-1a7c-4fc3-a9cd-58508966c17f\nca2a2800-3e31-4444-876e-bf0639d4a89e\n2a9c8945-dbfb-40e3-a1f7-6c637ea15d05\n2f7801be-851f-4021-9dca-e2ae31fbc839\n6d7c93cb-935e-4a78-a406-3816f86e11b0\nd50fd7a1-0e98-4285-9d43-a7ca6ae8f850\n0e586778-2c54-42e6-8879-a93473eda21e\n359ad831-b4d2-476d-8def-5b46f3b0d306\n4d670e8c-9d6f-4375-9436-b3e60e2baf26\n1d7450a7-c235-4fca-af4c-da622449e2ed\na57be9a3-d5f8-41dc-99f6-50d2523c62fd\na5464ddc-b4ad-4a39-a2fb-2a4a1186b04a\nc3ed43be-686f-4ac4-9f11-d0e6a606db72\n75e8c322-a2d8-4683-b8f3-c676d3d08aad\n7f7bb414-6813-42a5-ad91-1c5d0b554777\nf51be96e-fffb-40b7-8a1d-382f27300c45\ne3a614dc-abdf-4929-8c0e-c0aeb386e31b\n90c66a61-b52f-47bf-911c-667b817339b7\nd27745d0-3f06-4705-b6bf-a37301c7ac84\n9bfb30e0-52a8-4288-b172-80a8e7d9fc69\n0ea88b61-28a3-4944-b5aa-874a6246cb4c\n1ec8ebdb-021b-43b3-ab13-c596fe2801e1\n8bfe5a4b-d9fe-44ad-a2f4-9bc70b5d5128\ne7a1bd46-57bd-45ab-a2df-0fe4c70653bd\n22200a4f-d5fd-4c49-b08a-ab3ed302106b\nd46168ea-e34f-4bd8-9858-90cc7b70ef85\n2814ce6b-e58f-47ea-a4c0-ac960bc58813\n9eb48009-a7f6-4da3-9836-4f96d5a8aa3a\n89a43ed6-4426-4712-8935-8a794a0bb874\nefc7f2e5-cd3a-4b39-945a-14ed4223a44d\n05ddd2ca-bb00-459a-b427-8767cf832110\ne8cbf808-ecaf-4942-845f-4ba033563fde\nd020648b-a569-4208-9d05-13780afa9b35\n346f47fa-cbe9-47c3-bb6a-d8211b9fd287\n5fd5dd2a-c849-4156-97ad-0d5002440581\n9b9faad4-dd25-43e8-b3b6-9de69c4fa57f\n2e40a73e-4a88-4d0e-bedc-af428c96543f\n2f68e5ae-0d15-4aca-aa9a-4ff8c7024e0d\nbf91af36-801e-41c1-b31a-2973ff8c0780\nfaa8ebc5-7b18-4649-a6ea-12587435b1eb\n20a53a4a-5c74-4e1d-a3ec-cb3fe19193e4\n4ca19c9e-6165-4ede-a860-deeccb56200f\nbd63d4d8-760d-4c7a-bc1c-5e2a8c7f922a\ne2a6677c-1eeb-4d11-be3a-2cd8b6941f7d\n9e514e64-df38-4d90-82b3-d903d4a9fff2\nd1278d40-e5a0-49ff-8334-781344a5a17e\n90ed7728-bfad-4eb7-849c-bd670f3b352f\n8eabbe4f-033f-4c47-a1e2-a79a35049baf\n2fb7ced7-211f-44b1-af09-07a18da01c36\n2c6d33b2-43ff-41df-8330-5a7417bf8308\n7ceb3a8d-4124-4a82-9f21-1968daea6c01\n97067edd-e51c-4844-b45b-ec2ce2780eb3\n773f09a2-e949-4aa4-84e2-bbdf58fdc6c2\na281443a-d110-4db7-a7ef-30cf6f1161fb\n41028923-a2d0-4e5f-936d-ec7505139593\n3197766b-fcde-47b5-87da-ffe0987cc174\n227128e5-82bd-4a7c-9095-643e1fe05bcc\nbdf7e2ac-7bcd-4e5f-9220-5af8ed4f720f\nc4a40e57-bbbf-4e38-904e-24bddb9d730b\nd8d9d5e8-2b8e-4a99-b0ee-b66edb8a0122\nf5fb9114-6740-469a-a725-c6e3407a160a\nc5e91cec-ec41-4903-a74c-e018fd51859f\n87d37ba1-ca6a-4222-9112-9172b99b4a00\ndcd3a268-0e3d-4fcd-aff4-9b1fa3e77297\nce472807-a98e-4870-a927-71e5bbd6ef67\n46c8cf83-9ff6-419f-9f86-1743021ad064\n5c6d87b7-0868-4d7e-a28a-55cd23b47aee\n5782b83f-1273-4963-87fd-aac4e3924180\n1342b9cb-6f83-42b0-ad12-d6c80f2eb007\nd8617aea-1056-472b-990a-d2d1132bd95a\n87b1d851-8918-4036-95dc-afe6c1a27373\n6b5826f1-f492-4436-b71e-10ae3651147a\n2f91d313-fc03-4e6d-9e1f-9ba32578ebe4\n29cedbfc-183f-4032-9868-6915f7b2cc90\n38471d51-42d4-4daa-a647-15160312a69e\n7d18c6b8-6c24-4d8d-8a1e-21c2847af9a3\n069126a7-08ba-434a-903b-8c04ccb20e3e\n24d36a8c-5016-49c3-8871-e5a51ff6aae0\n5c96eaf7-5b52-42ad-a2d4-87c444053c52\n1fd73266-9333-4711-b0b7-a988b0ff91ae\ne9fb5dbd-58e7-4de7-a0e1-886e353c14ec\ndcc2aac1-f1ac-4ab9-b2da-255fd19184fd\n67ee9db1-551d-4deb-b94f-a90120316d3f\ne0bfaced-7118-46a5-872a-46e1c2136c39\na0222b4b-5889-4d5d-9762-336b5f61f9e1\n70c0e357-ab7c-461d-bfe2-ea22406993d4\n668fc73c-39af-4dfb-be13-848f5647e743\n09ba9ddc-9a94-462a-9208-e1175fe30f66\nfa44c4b1-752b-433a-89a8-e6688b4dc43a\nfed15564-18a5-4b10-a9ff-e6397996cb72\n8f24460a-2a56-49dc-a90e-3a4ab0dc3942\n175f22aa-6bc3-4ef7-91ef-bb06bed2468b\nb1e6b51d-9eef-44c7-8586-567a5ec3c2b9\n6a9652cd-7af7-429e-bbf8-205fef08d220\n5e7b507c-2387-400e-8415-e7e8cb6eaf15\n24626477-ebcd-468b-81de-6d8d1406ba7c\n57d7e190-75df-4f92-90ce-e94cece24a1e\n2919e198-2f9d-433c-8541-595641449766\ne307434f-cb09-44b9-bed4-b0a9fe098e9c\n9a0e5193-3613-456f-9f79-c22922fec4b9\nd5f3ae33-86a4-4975-a5c2-b90548996ab9\nad97612d-d450-4375-b774-c7b1497a7b1c\n140cfd3c-5cef-42c6-b3b1-c915eb1af40b\n4afa71d1-c093-4e56-bf2e-9f353ce0f661\n34a76700-2622-43d5-8bd8-8891350c9dfa\nc1fe86f5-9ef0-40fd-8718-d085907c20b3\nfd015200-71ab-4bd8-a0fe-1814089a89ec\n38168216-43e6-4a19-b724-a490b24694a6\nadfbe868-2dbb-44d6-aeab-cbf425014504\na70ef5a4-11f0-4f37-8171-e12ffbfe90b3\na502e0f9-c16d-443c-94af-7035e4013078\na29002cc-9a07-40a4-8387-d2282972dce9\nce76945a-2395-44b2-9d6b-aca33d51c2f4\nd41f4086-74b2-46f5-a871-b19c7ab8a3f9\n7e34aa79-56e4-42ba-b9a1-e1efe129a7cf\n1efae91c-a4a4-4736-b96d-7f479f6eadf0\nfe21f9b5-182b-4b9c-8337-58c8fc28f846\nc3787771-a930-433f-abf7-713d9e0fc2de\nfcae9983-3bdb-4f93-b576-d15cc6b6b739\n91f5a763-911f-4ebf-8608-064f043392ec\nc06d3843-5f13-4078-9fed-11d7bde5aec3\nbb461ae7-547d-469e-b572-f3ac52c0e2c4\n7e123ad7-eb8e-41b2-9449-4778109aa229\n145735ae-44b8-4b21-a47b-f0dd222f0ffd\n900566b3-6ddd-4164-9c67-949aa04dc8f3\nb8783394-bbeb-4a7e-84fe-cf468c6c9813\n6b523fc2-197a-4d4a-8a20-a3e87f123394\ndf04bf23-409a-46e9-be59-359a582e9e64\n75ce4020-25dc-4e74-9405-fdae0af009fd\n8a11f5a1-6730-4068-9d54-af54428ff795\n8971e27a-b37a-4511-a8ed-02aee7e9fe0d\ndf61e8e9-ba63-4560-ad1a-685b2e2a4167\ne8a0d922-f0a6-4c89-8691-53693fe9a356\n3cbb54a8-bb5b-452b-b56a-5c71552222cf\nb2e458ab-da60-487d-a123-3b75de521844\n0898c5c5-0d88-48bd-b57c-64b44a2aceeb\n9ca6776c-2cc2-4d89-b267-ab2494f802a2\n39dea572-f3e0-4af4-a19f-3f509d6fed8d\nb15cb498-d37e-4b6f-ab13-98b659b4ec9c\n80c5535b-4552-43ef-a64c-54dad8f498ff\n9c8d931d-ff90-4250-b0d3-72c816a43b6e\n055d4533-6b61-460f-98ae-7706f7fb4667\n0a2b4024-05c5-4fcf-94e0-79a984e3e56f\nee8efb8d-d791-46da-b45f-2152ce013d43\n8126470d-371c-44cc-9eaa-cbcb88e33f2c\ne1feefe6-5a59-434f-8017-5d841d49fe4c\n002b4336-d507-4d61-8882-9bd943baaf2e\n4ac7ebbe-bebe-4ba9-9133-9ed2a53f09bf\na42626f1-cd36-45fc-aaf8-490bbd4fa85a\nb8450630-cec2-418c-b867-af6f2c93bc90\n48c77cfe-a8ca-4be3-aa73-74ced28954a0\n7d55ff2f-b004-4aa4-b953-c1fb7b79fb90\ne9a991aa-6d4c-4108-9c33-fb89c9708a9e\ne8b7044c-37d4-42fa-8435-69f3c0990478\n63eb863e-c57c-4b8f-883f-2df85c35b1f6\n1cc09f3c-966f-4aca-918e-df33f05ad70c\n7f385ed5-63c9-488c-8556-f6f139595061\nd74ae9b0-f604-44a3-b103-d552e3ee2c06\n4fdec0a7-9bda-411b-b2dd-89097d2d79a9\nc0865794-8a16-4aa5-bc1b-7f7e585f7f53\nbfb48998-8955-4c73-8af8-f0dfeb91aefa\nf1d0abc2-6a50-499b-9cd9-f39ebfa06442\nf5325b62-d33a-4cb8-8846-320feaff0b0f\n3cfc89f0-20af-4d3e-a81f-53735a0818c7\n9f620c56-dd2c-4d66-9e24-68c13d597302\nc164fc8a-6a82-4196-ae9f-a5e545e4b411\n980d4474-1308-46b7-aaa6-31e0eb8c3576\nf20c7d39-d3e0-44b1-acdd-e146d2041113\nb60da306-42ac-4a76-a505-abb5569d7788\nb5db4dca-e827-4ec8-8070-a171f26da100\n95dd8c91-d582-43aa-9a21-43daf7560efc\na99c9c54-b9f1-4807-9ce0-4b6ae6084c51\na7bc3bb4-3e71-4e5f-88fc-54b46d2e92ba\n3c93ec41-6327-4fa7-9241-049caecb03f4\nea06cb82-1539-4d92-bb36-e3cbe9678cc6\n38c2b9e1-51a3-4165-9c01-42c005c30f88\n02a7e8fd-5d61-4bad-bb2d-7646cdd6f82d\n23552b2c-8973-4166-b71a-7829daa1b396\na8e9fa4b-00f8-44f5-b107-1ce8d010c3eb\nb642ea9e-2e44-4c6b-b8a9-a77a4bd56efc\nd990bd14-ec31-4473-b253-4240ffbc4749\na5da0d62-c98f-464d-9ffc-bd0b3c56f334\n17c306d7-95f4-4a36-b152-66daa4671757\n9139bab1-69e6-47a7-8b49-2ab617e6c666\n11d83880-8cd6-43d4-91ca-289d4c74e944\n19e8976d-1ecf-4225-90ec-7bc9c9ec91da\na06381b3-10d3-43db-89e5-e9fb71f7180c\nf0265a35-4db1-4822-93fe-c3da0d6c11db\n9b317ede-eeda-42cc-8f43-52d74c878b27\n9b4d7bd7-a2b1-403a-938a-b9bfb5f136d8\nb3015657-6b33-4938-858d-78476e90d6d4\n0ecd67cf-56b2-4dae-a8b5-a6dd793c0cf2\n08d96118-2e70-4a24-b5bc-a1a9dc3cc655\nb4414f7b-17d7-4e60-8521-e323403c0870\nfe98b296-25b7-40f2-ae02-aed855f60dfa\nf1ac199e-4ad6-4661-8102-536cd0a4fd52\ne022625c-b471-4738-94dd-6110fefc3e48\n3b7381df-2ff9-49c4-be2b-53573f14ea62\ndf5bb9db-b091-4694-9334-d794d4c79091\n37fcd951-b580-4d35-812d-61d7d19ad488\n7be5f179-9f0f-4e4e-9e09-32a6a867ee7d\n3ba278d2-e9f1-45e9-9299-6e09d34597d3\na8ddd225-378c-4fb4-b8d4-94080bd107f5\n2ddf59cd-4662-4048-b71e-7c4522b1c6bc\nb15ae1c4-b243-4105-90bc-4b55e80c4e70\n7c16f6fc-0c2c-4dee-96ef-3c2943148487\n640aac6a-4e4e-4408-97e8-f50b943fe2d8\ne2c20257-2363-4557-9353-61ba6d35c9f5\nd92a0cd0-03f3-4f61-bda6-940a430b89e4\n9bf64eb4-eaf6-4bcf-b9b0-619ba0d57947\n55ab0510-b56f-4844-82a8-11335b35c41b\nba63b133-0ff0-47ce-afd8-21d19a351e51\n239be3bd-6d37-497d-9eff-0a5b3b063c42\nf9a51496-c0a7-4917-b443-6dc0e24fc271\nec773c93-7302-499f-80c9-9cbf3b679d12\n40fe33de-6668-4685-9620-025b69e53291\nb86fc0e7-6fdb-4401-9375-0bf07a24cedf\n85031807-da35-436f-bbfd-1f2a63f72db3\n6a00ab18-2037-442a-b52b-360731e47b50\n35dae46a-dcfa-4a5e-815a-65880aa56717\n7ea02517-c897-460e-9cca-760b935bee2f\n35e23831-6723-45b0-a326-217ad25767b4\n2ef33085-8256-4e6f-a242-1a7239843ee7\nb8214e4b-03b0-44fc-b66b-b4ef40972bc2\n93d6ffaa-17f6-473e-8389-c9616bfd943a\ncebb551f-4afa-485d-a884-d37a34d68a99\nabbc266f-e0a1-4670-8f3b-05149397ae8c\n0ad11d84-ff41-43a3-bc8b-875e603bf1ff\n52a26fa3-a4e7-4943-aeaf-53cece96fead\n0d10b3c6-0cca-417b-a2bc-3afc8c7fb123\naa76a34d-373d-4bc1-b788-6599ae618589\n7e5a946d-9865-4de7-96d4-53a848856ed0\ndbc36f44-a2ce-4682-8430-60de4c554559\nebf9dd95-ed72-4aec-bcc0-0f622ba6d0d0\n1ff8c7c8-d03f-42e5-8934-c9047fc87567\n11b28bc5-8640-4e74-82c4-212e6c172da1\nb3385e77-a6a5-4410-ad36-d9b59dc47bac\nf463734c-05c9-418d-8942-966545df179a\n48472b76-7a6b-4c69-8805-a1a0a43574c8\n7959ccfb-6e1f-4844-8bcb-939f47131608\naffa9789-28e2-4ae8-a92f-5e8f28e9b1ec\n35b9308f-c53c-4ad1-9108-dfde99e84c8f\nf8391ffa-8f38-4974-ae4c-0b2a87d08f69\n2ca0d824-edc7-4951-bdb7-2b8c1a060eab\nef65f8ac-0abd-4463-8bdd-21df6e54f0e2\nb0edc5c6-0d59-437b-81f8-7b9c726987c2\nda559dd9-398c-469d-abf2-bc83a5828864\nf68b429f-1fbd-4064-b5a0-74ae2b8b3fe3\na68cffe2-4c72-426b-a70b-00ebedfbcac3\na8dc3a34-e3ab-4dd4-ba97-41500daeccec\nbcf5200f-7807-4599-bc85-5482a84f2af7\n79519ca2-76c5-4d86-b426-f3723ad6c03c\n62e0ffcf-53ed-4d74-9806-228ce9f2b0f5\n40a1b454-0af3-4e5e-95fc-3c25f2e4c0ce\n66d6182a-5fa2-4714-8f08-5ca16cc4e11e\nba456d01-5150-4a6a-8354-db01243e1529\n11ec7007-04a7-4ac8-921a-500bc028e036\n564a4f01-520c-4de9-bb44-1a8760fb71b4\nf6c2038e-44c7-4921-9799-b4f8362e4714\n0a489ec8-44e9-4110-9c2d-3fda8249517b\n0d43fbe3-d5f1-4b1c-a918-8cc9d41f7123\nfb64dd80-02b9-48bf-9b91-2c0027516ba1\n6f903cad-0617-434b-983c-1af594f25e18\n9267156e-1342-47c1-be18-da91a9a3956b\n391019bd-2fe6-49e0-94a6-844876ebdbe0\nf35ad56d-33d5-4972-9d7a-40a1835c1a1f\n8760b511-b18a-4828-aae5-f9a2601c5887\nee417599-a46c-4469-acee-debb94bf69ce\n880d1831-0fea-4c3a-ab61-00761f882b0f\n75e0f8bf-4d33-4e78-8b40-59c891c53140\nb0ff0bd4-74a8-44c3-beed-a824d887d2df\n88f4de62-9180-43ab-8270-399f7aa1828a\ndc9176d4-8fab-496f-90cb-87c967d7bd45\n45c1e1e6-5527-4992-a432-6067b34f80ac\n92e5641f-90a5-46be-9dae-14ea18b08fda\n641d2c45-c35d-46ab-8fbe-dbeb783d19a4\n320852a1-a336-4537-8aa8-ad99ce142cae\n15c6e990-93cf-4f5a-b57b-078e8177f4a2\na797acb9-d6e0-42b7-ac28-9d796d2d7144\n471fe9b0-badc-45d8-b25d-a8cd5deed015\nb282c615-95c9-4005-a8d8-30c452d9cc57\nf9b3acb2-d106-4880-b3f4-25cc6be0cc8d\n40d3d9cf-b3cc-4d19-a090-3d1b65fa6672\nf979052b-2cca-45c6-abc6-5149256c9953\n5166b742-9479-4747-b41c-b3f4029245d3\n5c2df8ef-694d-4c34-a564-ed71992748ed\n54703784-bc2b-48c5-a23d-37c2f4e5b8c9\nf12bd212-038b-4beb-803c-bd3b99c1c3a4\n87e39d34-38ac-4c93-a1db-ddfed4f6e07a\n79c6be9d-243f-4c45-9bb3-55f2f5719110\n8b7bef63-9d19-4804-adc5-14754e54fe83\n49afab0c-d5be-43e9-b77e-e35b2672406d\ne0c88fcc-fb1c-4c7b-b0c9-59e617a767db\na2639a26-92f8-4819-9c08-75802513028c\n86cfe291-1f34-42fa-a450-34d08d2b97bc\ncc8dcace-5c0e-49ac-a7b3-190a1096ef8e\nad08e54f-bb04-4e82-ae14-5684add47864\nee5f17a1-1116-4c47-ab4e-783788414f9a\n965e35d5-0022-472c-9981-c369a1c6f7f9\nd1b2e889-0cf0-4989-98fd-6a929bd35c91\nb1b0eb29-08e8-4fa1-8ff2-f024e41d4ab9\n0356030c-84cc-4f1e-a2e8-e996c21ffe0a\n4ca76338-acdd-4733-843f-68ce4483cc93\n430ca885-ac57-47cb-8004-aa4860d813ee\n9e68e218-6d68-4997-91cf-4f1cedd28704\nfca4c2e4-ed95-4bf4-8618-802da934c5aa\nc7cf533d-d2eb-4f46-8348-ee5b1636c3c2\n651cc5f9-4915-4b32-801d-8531ad70daff\nb8fe835d-0127-4c56-aa72-397a06c054ee\n7af582df-09d0-4f3a-8224-dda1ee96cf9a\ne8d8043a-8dee-4ed8-b368-31ee725895c7\na1ce75ad-67aa-4b14-abb4-1f5462ce0d56\n44c94ad4-4244-4d81-a5cc-8f99322b7b24\n0748d066-1fb6-472c-9ac7-6bb08c14920f\nf2dbf959-9c0d-4950-be6e-fd7ebbe1ba52\nee92a855-4728-4440-a6ab-0d0a99901c4a\n405bd864-c23f-4521-b6a7-46da90176905\n12307670-fd94-45b0-a731-1c8b3730e2fd\n2c469b6a-4fb4-4239-a8e5-4311c3d48e1f\n0bf04227-a6c6-41d7-b7cc-bbfb75246059\n61e89698-d20d-4f1d-9bfe-1f9751357141\n61fbe145-1744-4ede-93c6-3f2208bec7a2\nad2f2492-508a-4b8e-9b41-0716b0a997b2\n036ad81e-9df9-4d0b-a8a8-c4055a8ab91b\nad51c807-218d-4fd5-bc1d-ac1c646a860f\n2f4757d9-2b0d-4502-81e9-99dc29ea90bf\nbe9e3575-a3e1-48ad-80ff-3adcc5b2200d\nb0de9adc-852b-4c49-8d63-aca4f0415ae3\na7872a8d-7ea8-4106-b4d8-a09bcf3d651a\n07ae78af-c232-481a-8180-eee33ac4201c\ne872eb1a-d3e1-4df7-a2ea-7ab1f7c4cb4f\n13a6c2d8-0089-41e3-bf84-f3818c4d307c\n2dde11cd-d393-499a-adbd-4dfd9d6880c2\ne5c7f373-e297-4b36-8893-dd0a940167aa\n0199ea11-921d-48d7-99b6-2e197955f4d7\na6bfd5ba-3e2d-4e08-a34f-2583e2235a5d\n1bf452e4-93ed-4394-a431-b2520e8dc4fb\n85c5aae9-a0b0-48b2-9fa1-a93b4fd02cdb\n468d1888-f253-4c3e-8463-75075c1c88dd\nd6fe7e48-c16a-4450-adf5-abc5052e96bb\n2ce8015f-dd84-44a7-a936-52a575f97852\nb84a1580-a283-4950-854e-88c6c5517408\n5c537ef3-5cbd-4190-b98a-671385edb786\n4393b6c7-2080-4649-9a7d-30d20aff649c\nc79c1166-7808-419c-8cde-e2b5afb6cbc8\n96c48936-ef1e-4f5b-9b0a-b8f58936c4dd\n1e9065b3-52aa-4c70-9a36-cb54cb474133\n160e8165-087b-4d87-b19e-7c2901db4b03\nc9607aef-c04d-4a48-ad8e-2214229499fc\n1526a75b-5e62-44ae-b991-c8150ab1fcfe\n41d59b4f-b4a2-4ac6-8e1c-c68eb75beb7a\nc95b3adf-989f-4110-a4a1-80facf777d95\ncbbdd717-32bc-486c-a8f8-2002e52afd44\n75126af5-6157-45d6-8e8f-272fffc49eda\nc2397c31-1608-4cab-b22a-a95ac0da60c8\ncc36de91-abe5-41fd-8fe2-81e9a05bf3ea\n50996eb5-3510-49ff-b8d1-407cd964f47d\naf3479cf-e332-42e6-8916-5b3ee8ca75a0\nc13e4e81-7d12-4675-91e1-dd48850a9b9a\nf5454195-194f-4720-b7f7-3671bc21048e\nf5da6d05-e871-40c2-acc6-19f43149ab8c\n47c0097e-8c28-46e6-a6e0-22c092c38352\n39589995-6445-492c-b185-6792cee75326\n7b8fba50-c292-4953-9544-0f317cb27397\na31bd0e2-12c7-438f-901c-a0854e32f76e\nd795a8bc-b749-43c7-985c-061e1e82f170\n9fcfa10d-0932-4402-b1c3-8cfa05e1d366\n498a4d90-27e9-44e3-b685-b471da138810\nc202062c-6109-46d0-b633-0947eadfcbe1\n13f28612-8b9b-42fe-9f52-7573d016cce3\n91048dd2-7774-4cdf-a006-ee37aab11cc3\n5b00d70c-901a-4776-a306-b3576bc55215\n1bc118b3-a36e-4e87-96f6-b0191ae21374\n93a93395-3d0d-4133-b612-976b444f661b\n451fcc19-0e72-4db7-b5ed-af22ce07d990\n78793d6f-026c-49b0-ba21-15415b58457a\nc25f838a-5bf2-473d-babb-4f619337a4be\nfaa2544e-9bcd-49e2-a73d-d57321782cc1\n266a134b-48e9-4908-9277-aaeab26503b5\nf9b886fe-9d7e-4fce-bab9-761d4154d2c3\n4ebb5454-ecfe-4e78-bf59-68b1362034ac\n71626da1-3d22-4b3b-a50d-bf62e4de6203\nd15d6e7d-86d2-426c-9fc8-136d49c13b99\n72726607-8329-4d06-8345-ed5da1d925db\na23f0d99-b560-4962-af13-0266c7fb1cc0\n7e3a0bb4-9264-408f-9b4d-1bae0494dbf9\ncda51ecc-af09-430f-ac1b-4891b510f61a\nd70961a8-df12-494d-bab2-ba5bef933b3d\n519a9ee6-1c17-4ca9-b03f-173ea92369fc\n2fae4abb-3196-49d7-afaf-dbcc087ae2d2\n0d8d38a4-d149-4f7a-bba5-d9f9b89be4e7\n36342741-c165-4431-b2d6-7e9f3045b79f\n2d5a7546-d763-46c6-b217-855992cf93cc\n52ca7ff0-aff1-40f4-a744-0e695a032e83\n4a649396-bbb8-439a-b1a0-2fc1d3d2421a\n2b44a1be-af0c-4d12-afe2-bc46756fc116\n54e622af-60b9-4938-9414-3a0ba4262879\nc82df84a-ddcb-4a10-8161-67d3df65eab8\n24f8e587-1ca3-49b2-b156-994b60323411\nb9607324-f747-4e58-8f93-59ddb218fd16\nfcc6e0e4-68a8-469f-9358-0c2dad537ecc\n4e752f08-2380-4a28-8ec5-d50fbe34cf28\nc281d4eb-1055-4972-ab24-288f9b26e835\n0e836607-0d1c-420f-85ef-16569d6f607b\nb3ec654d-4f4a-4174-bc2d-9866261a8107\n7dc17f3f-b09d-4e4f-a0d6-ed914e01cd64\n929e4aff-83d0-4fec-bbde-6eb72f69acee\n0a85ffa8-fa07-45a2-878b-e41b66bfaf3a\nffa51922-60e6-432c-aa86-4a00110e5a46\nf6c6fb52-3626-41a6-b87f-240d87f20037\n88f047d4-d0a2-47b2-9d1d-1ff94b5d260a\n8acd120c-fb87-4034-afce-add1c2a93507\nf3149509-ea3d-4ff5-b97d-6777870c082b\n869962e4-f549-44b6-b8ac-ca7bd969c48d\ndeda0b92-a66e-4dec-9843-874d5281bb6a\n28a10ba7-1a8c-4694-af26-f3ed017ece80\nb6b47837-1de7-4c3b-875a-cbbc049753dd\n68f7ff7a-7b39-4805-8e01-cbfc837bb4ae\n8106b2f4-3bc9-497c-b536-38aad0c4c070\n758d5e0e-6255-40cb-9e57-85d50a6689d6\na9228681-90c5-49cd-83e8-dbee495c6d4f\nd16ddabe-b9b6-4850-81ad-09c977e25291\n84325b8a-c368-44cd-9d57-1572d156e305\nfccd7ff6-f2f5-4d85-8551-bcedcef0dea9\n3c2d894d-8626-4211-a4b1-c57d0790b82a\nb6897885-bd8d-474e-908c-96c88edb073f\n0f67d70f-682e-4019-a57d-e2310345e9cc\nd52d5e92-e311-42c3-966d-1f0b0eb21ccf\nd02f3b32-9a13-4b03-a44c-a5b0912c81be\n1923bd04-eb04-498f-9658-c26d52960d5d\n54eca1d6-c578-4727-8845-43277ea13d0c\n7c643011-73e4-4f50-8b93-9c56e4dc3c0b\n7d9886e4-f940-4b02-b526-3e0002672d60\n2ed35380-8482-489c-bf12-3fe095db9d54\nc7f308a4-177d-4736-8b19-54920a71713e\n3dd62dbb-ad8f-49c5-903c-194841b62a30\n9f7b70dc-33ff-4d76-9974-9082c6cba25d\n290dd33d-6976-4c10-83fb-64acca067f8e\n1f8f94a7-6070-4ea3-891c-3b1799351e6e\nc8cb10f2-a3cb-48cd-8817-61de21814c6d\nabea2ac7-c566-42a1-985e-8b61c4e21a31\n77265d44-1131-4b56-8718-542a673f21c9\ne38ee429-d0cd-4724-b804-184f5a2a1752\nd6b910ac-d248-49c7-9cce-9525a16e8993\nb51b38b1-60e9-4568-9938-c32bdfa50131\n4175a01a-7175-472c-81a8-eb952183db1c\nfd921d50-d8e0-4d28-8b32-81b59745bc6f\nd3ae3d07-be68-405e-a129-3f3a0e8cae41\n2260291a-848d-4da9-a49c-5361f50806cb\n3ca58d72-8708-43a9-9463-a768e629e527\n49bb16fe-03fb-4c0e-ac31-8163ea351575\nd9bb115d-aa8b-4228-b73f-7035ada662d6\neea28d34-5f98-474b-91f5-b4d6963ccfaf\n7ada8fd8-ed8d-47be-b024-e144256576f7\n02e29c02-fb39-42c6-b62c-9d63bb8b0dbc\n1a5f67f4-d5d7-4604-9aa1-ae9f4b5257bf\n2f77c861-f597-4bbb-bc53-af002ebba9e8\ne54c0d41-f33d-4e77-9c13-e5fe9be5ccac\n5cf04c46-036d-4e6d-bc4f-79104c040018\nda1e553c-c443-410b-ad00-9976dbce9e83\n04866e4e-7320-40e3-a5f4-4af9fc6a5afe\n5969fe4a-0c9e-48a4-b780-f694eadd09af\necede7e9-7ff1-42b6-ac6b-9bcfd46113cf\na156eb3c-7522-411b-bbcf-cd00d8988641\n4250ca83-9c30-4e09-9a65-9ddf6b9a9a61\n29d39f80-5cc0-41cf-a723-b5187860dde9\n9e2d5bf9-eabc-43b3-a64e-df038f133322\nca597eb8-74f8-4262-b421-7e67ce65e454\nefd5b167-26d7-4fb2-af71-d96ac52ed534\n36f8644b-2c43-4bf8-a7ce-0b1e3ee26373\nbeb11f31-b8e1-408c-a0d1-73458e4d0ba9\n6fdffac1-eba6-4640-9a0a-b17d106dfe70\n1166a725-97a7-4633-ace8-714e8ef8307f\n5f42cbf6-4888-4d32-8b84-cc58e3f20e77\nbe4545e5-db6e-499a-9754-47b7f394e3f3\n0549ccee-08f8-47e9-b0fa-c01b50393e81\n725ee7d8-1ed1-48cd-836d-40f5efe9af27\nc2a83ce5-c952-4a97-a2ed-66a2b164d3c0\n56590b39-47e6-4186-951f-0a77c8fcdff4\n13c6a94b-893a-4298-89d5-2ac81c208f05\nb05805a0-d12d-474f-a403-bdc2a1d6f364\n2b313fde-6b65-44e4-a966-535db7bcd6cb\nda0f2647-cd65-4971-9ef7-325e92c50d98\n31d05957-6dd1-4391-acc5-f3f056b8bd16\n7b04a1ba-a89d-4fb2-acd6-89411963c795\ne961be60-3fad-438a-a804-b6fa4b9f3c0a\n8b7d2a4f-e243-4736-a94b-c682abdf936c\n53cfadfb-38d3-4ce2-b085-421247aa7d58\n2376b684-f514-42a2-8f53-5dc28091caf1\nf0bf4fee-fe70-40be-b1b2-fb5e166560b9\ndb869645-23a3-4523-ae9f-1d3c7edd45d8\n17b56c3a-6a79-430c-9321-e50d6d5d24f1\n41d2b0c8-fe65-43eb-97f9-dcdcc6d9c43f\n8e5c8b37-67f4-4747-8774-64e5565895aa\nce107b3e-310b-4515-9d6f-bfa69cc02a1f\nc96dd886-9ac8-485c-b9e9-6470e5c01205\nf307b768-02a7-41f2-ae80-4e96d596b681\n406bddf4-aaec-47d5-94b1-989920c9be42\n58b8e052-b804-45a2-8c48-732584df2b25\nd0f7a3d1-bce0-4a65-bab5-fa4b7d961503\na12b6036-b9ec-403a-8d37-3c176a7f661c\nd9f25877-9476-40f0-b684-314892487ee4\n86dd6b5a-178f-48b7-8a79-28f6d2487fbd\n903bfb10-259e-4dce-8082-e7ab80bc9923\n49c3ce5a-7c2a-4cbe-a2d6-6c596ad3c1f1\n41ed74cc-8664-4b2a-a462-96e3053c7ba9\n295ca610-b05e-417f-9514-d31811469148\n6ed43f4f-6af0-4bf3-836f-be5c4728985e\n9ac15e4c-839e-41fe-8202-78924632a75c\nf64c52cd-924f-4d55-99b3-ee7693efe821\n2f12abfb-fed0-4f86-a4ec-616aee2f6b15\ncb6945ff-f026-4fae-b215-49941789141c\nf30eb012-b318-4322-b9e0-7c076bd9197d\nb44d900e-d543-4e8a-9536-bc257d350c69\n899f4a37-dc99-4dce-9a94-4b92e4770ead\n012462e9-7392-4b2e-a82a-b7c9893c7287\n0de74080-d917-4a6f-adcf-04343204a9a2\n52613ccf-1805-43be-b648-b4db78584454\n988ed3f7-bce2-4c4e-a6b6-5878fe3e8c61\n5fa991f4-d9a4-423d-a120-70e5bed6517f\n0a39436c-4adb-4985-851a-057ed4a19c32\nab05dbf8-7776-4b97-8ee7-c8b6547229ed\n7afe1d5d-06eb-419b-97fc-76831a7120f0\n3dba1292-e3d1-4220-8f09-3e76c93eb2fe\n340d6ea8-cfa6-4173-9e46-ec8474f05d06\n8423af41-69e5-49b5-883e-8c5e79a351a3\n678c5e4a-7be4-4f30-a81d-86c7ae57a92f\n5cd45435-9935-474a-b545-6e37d44830dc\n0b96cd7c-1132-4452-a505-aba9778abbc9\nb48f4145-af38-42e0-bdf6-1ab68998f5ff\n12084ee7-8c11-4c13-ab90-ced932a8a55a\n8cc458d2-8192-4530-99da-9c1d46f9d8dd\nbc4da002-ad63-4805-a947-b378f05c0813\n7f5623b8-476c-4a7a-a5b4-2f26d231e00e\n979c0451-aaee-4cd0-914a-fb8ad713ae67\n21a02527-075d-4cfa-a005-2917c6c95109\n3502e6e6-cde6-4264-9d4e-6de403c7f23c\ndaa478b9-716c-4418-be25-a8afdf2e3750\nfa1833e5-41e3-43c7-a9c0-8c030c35f0e6\n27b2aec9-a6b9-4c9f-a4c0-0d1b799c539f\ne2e6c2be-5655-4151-9bc4-54cfe65c4e0b\nc6b63865-484b-4bc3-87f0-41bb7fb11eda\n54fcc464-64ff-400e-b83d-920aaea44e0e\nd8120685-75c8-49d1-9a7d-b186c2cd4113\nf709ba25-05f8-464c-831f-50ad546efd19\nbdd53ebb-6bf8-4100-b299-e92d8ac9fe2c\nffbd1590-af2e-4937-9d21-5d61d8358e3a\nbef07f36-4e64-45f0-89c1-db4513ad6ed4\n5ee83804-f99f-4578-bdb0-00be458fa9a6\nf772b032-f4b7-4196-85e0-1649e009c597\n47970cab-00b4-4850-a350-1b9b01ffc874\n66a21ae2-8377-4e8a-ba0f-fe21097004cc\nc0d531f8-eba2-471b-85c8-afe55b30baec\n7a23f825-33e4-461c-8994-54f0c021f876\nce771350-699e-4478-9a2d-d1f0c90fd538\n2a94c6ee-9fb8-45be-af34-6d146b4679bd\n3bfc265e-3038-4ae6-89ab-1c58aa71b950\n3d66bc96-59dc-44c1-9522-b3b64f61a472\n97bbdac7-1ac2-43ae-97b0-dd0224979784\na8ac3b8a-0de3-4a48-90ff-48a012e46ef7\ndcf74f49-08e8-4ad0-b137-0690f5e76977\n4996b5c6-6132-4759-93e7-9e0756c02b41\nf3130b36-9ac8-4a36-b450-8d5c8d3211a9\nd34cbe45-3747-46c8-89bf-069e49cef4b7\nfc4da6ca-b84b-47c5-af23-b2fed291d05c\nb96ef77a-c43c-4b5b-98cd-f817b3a60da7\na15b47db-c2f1-4772-8fe9-623cdbc8c78d\nb246899c-1150-4d18-9ccd-6b56f9c07bf5\nf6f3c7e5-c5e3-464f-87c6-4e830b5cb827\nd93ad10d-4bbd-4212-bf80-875443216682\n93ed261a-d942-4802-a7d6-12e44ab33cda\n87ba12a4-e466-4aba-a347-86e6bc532cbd\n9a85137b-a905-4bfb-8a2a-e8059a40e968\n35524ef4-9802-43dd-8455-97f56ee2633c\nbda33b2f-ed7b-42a4-9f24-0dde2b5894e7\n69f97a05-30d5-4420-9d9e-b4085164175a\naf1f9dd0-358c-49ec-bd9c-c1f73a27cd91\n8b7aaca9-a5c9-4e59-b07e-2474e5c2da7a\n885d285d-ea78-46ec-a3cd-0034da5a7326\neff81078-9908-4fde-abbf-ce77d806ab14\na43e5725-132f-4bc1-9ba3-b8544a01722d\n19c9baee-bd0f-48d9-bf82-2475240e3877\nfc976990-41e0-4ee4-96cf-70744bd06262\n44c5da6f-0a9b-40d8-b850-8ac0d1a6d758\n0f90cdd3-5745-4bff-9287-d9022ef6b6ae\n240e203d-f348-49ab-be6d-551e6b0719ce\n63be161d-3a17-4c43-bab6-e0fd3da72a88\nf5778cd9-34c2-4bdd-b4aa-30b8d5adea1d\n1fce9a92-53bb-42e6-9778-e7c7ea42256c\nedd1d439-12fa-418b-81a3-eb3c533a018f\nd69e6858-fea9-45d4-92ed-9ca0539ab253\nac1ee45f-d2e7-4676-85bc-607e9edd7f4b\na23637a1-f680-49ed-be53-aa0356022a44\n1ed1aa24-5d0c-4b1f-bc08-e15061d2c306\n0bc95e1f-e10f-4a79-b496-05738def6578\n3c9d5c70-0360-4404-ae93-1a78e98b86ef\nf1a8c2ef-1011-422c-9d6d-1ec06e05cc23\n9ec8cc60-2f09-486f-a4b7-25b02e6dec84\n88bd1ad9-7b2c-4dd8-b529-be68ea5b5916\n31fdd591-5cc3-4e34-abfa-fb24fd6bf628\nb653571e-ae1b-494e-af4e-ae761c6a4e5c\nf38aa03a-4e15-474d-854d-5cab9ed26a28\nff1e4899-89db-461b-9247-87917c9ae989\n8437e119-d835-44bc-a9fd-a1a12be75c74\n8b4e59fe-8ff8-42f3-b211-59c21b5cf60f\nf8ea865c-4d2d-4f41-bbb3-23d869f52ab8\nb9684b2d-2c8a-46d8-961f-42c0eb7e8b06\n89c33f87-4b65-42c0-accb-c528c24e51d1\n52ff1f5b-9569-4a9c-9e1a-145ae1ce5911\n9b3062cb-d820-4c2d-aa7c-a4c1321c7f2c\nc1b0626c-fbfd-449f-a322-da89ae60e296\ncb69e416-70c1-485e-823c-1f4aded12d63\n980066be-9425-47fe-848d-d26e35c5176b\n4a376904-26a8-4d3d-a62c-ec981abde593\nae7b97af-a708-4aa1-9d63-23f1d4a26d22\n6769e843-20ca-4109-a4a8-3b56176e05c2\nabc15332-bd2a-4410-8d47-73753ec69005\nd44357d7-3509-47a9-b50d-991ba0d51cb4\n225332ab-10c5-4d61-99df-335a036369c2\nf236820c-8d70-462e-946e-80414acfabf1\nf1de99aa-262d-4690-b9e0-57d6a54ef1cc\n72551cb4-fa34-4b1d-8c53-e6f42c382195\n5270bdaf-5773-4a17-b901-d8e786c0a604\nffb3ceb9-78c0-4efa-83df-30545b14c066\n9447c1cc-7dca-45e1-99b0-319ce6fc0cb2\n73dca45d-0ac7-4eaa-af3a-8a37c8cb5796\n76764e13-38ee-403e-acb8-22bd36b901a1\n0bafe399-6d49-4861-871e-b1af6b213052\nfac78036-c07c-4db2-8a9a-64e7f66ebf78\nd5023c6e-bdb8-41f4-9617-15f64db07d59\n9d88a3b4-3f22-48af-bbb8-9b9bc9ddeb41\nf6a468f0-6bd7-4082-8cc8-5676f2b6d1b9\n35a6398a-7788-4153-99a9-19c55302f44a\n12c8b291-54cf-4309-9da8-cec056c6b3e6\n22268f35-e7da-477e-9ec3-e059e5ce39e8\n299d59de-982d-4917-b009-3896dfcee963\ne11c6d46-c2ef-425a-89da-f4101100e54a\n39a409ac-c520-4fa5-a714-65dcc73556b2\ndd3337bb-1427-4840-a832-5dc5b79d97a8\n100646b5-c8e7-42e6-9967-30de9713b99b\n4f867b80-71fc-42c3-b294-1bd96f0ad7ed\nefb458af-d77f-4eec-8626-ae7d90132548\nfafcf89b-7ff4-406c-9df8-3374c6079ba5\nfbdb5cfe-127a-4886-9240-cd2949ad67ad\n7e84a807-fe40-4fe6-8df6-ac7773def30f\n8ef8267a-940a-45f0-8e15-79ef5a122e08\nab57183e-69e1-4bfb-a573-a6895ecf0f7a\naf669bfa-b423-4a51-a0ee-3a83d2498afb\n7d55a038-7515-4d7e-b295-5812d4302b87\n055e1a11-a423-4529-b8d9-242fd80b0004\ncbcb4325-ce6a-49eb-bbd1-2960380f148f\nfa4218fa-c99e-4b72-b3fb-0618c6237fc8\n1cd4ae8f-d78b-4ac3-93f8-424d164ae245\n8f841792-9fda-4830-9530-2b1643738677\n2a280df9-dcbf-4cf4-b7b5-ce8a44b5a2b4\n5aeae603-4aa7-4cc4-bc77-85a5d1a395e5\n452ab167-6cd7-4360-9b09-5342658a07f5\n74801301-6d9a-43d5-9aa5-e725b4c44f21\n2a6608e2-57d7-4f74-984a-fc0b9502bb68\ne7e2c02d-8b96-4d46-85ff-b9f120f786db\n93a55803-611e-4c04-8159-0b8020ab7a04\ne40b2db0-dc62-4e1c-932c-c45c1d76588f\n1c8b4373-3b17-4df5-98e4-2b332c9fd27e\n5f88f30f-da23-4cdd-886b-c34afc7e5082\na450c1ca-6e89-4a80-b398-896070d0cb36\n11c54b4c-9b7c-40cc-88cd-9b402662991d\ne3fcdb31-b920-4219-82a2-60e744ff099b\nfa0d064c-06c5-44b2-a665-d69489190e45\n8adbc317-6ea5-4a99-a042-036f4f74faf9\nd9e489c5-6729-404d-ba0e-22d2a36908aa\nd39d76c8-329a-4cba-927f-32934fe9829b\n2092b05a-f7c1-4fd2-b120-2f4608afba29\nb0ce2126-a32c-4085-8241-a47a834c036e\n74544445-1fc4-4139-a5e9-bec1c4e650e9\n47667de7-9aca-4f3b-abfa-1ad74bc33420\n6535d38b-e5c9-4c6a-98f3-c2d8abf8b275\nd9fe28e8-dcc9-4152-af91-c72433fd8943\n5aeb3886-1d9a-4472-9f2b-69f1ace0c227\n4b8e12d9-43e1-45e8-83d7-991d1eb920ca\ncd82b49f-b1a0-4483-b61e-3b1a97b1a4a4\n8ba8c900-0285-4433-881c-969151eddfe8\n1c78783e-433c-4bc6-8450-f0e9f6f45770\n355e76e1-927c-412a-af13-ec6991ffff7f\n89b8428e-95fc-4021-83f5-2790881351fc\nbc7bba93-1afb-44bb-838d-80c77855ac59\n8b4b62a5-e4a6-4c57-8597-e99a62980174\ndf9b7988-fea7-446f-92bd-afd0dc645ab0\nabf07d54-8d88-43b0-87ae-fc9220b1bb13\n800fa780-83fa-4dac-bc59-f0c63afb3ed7\ncfdd2709-4b3f-400a-89c8-3b870b4e18aa\n39427ceb-2578-48dc-ba93-06f033da61b9\n4306b39b-d31a-4a56-98a0-327a4384f2a2\nf79f37a5-c505-4f09-881c-e08d96a6adb9\n7238be6c-8cf9-40f3-b3e3-76b8448bb0ef\n53bb4680-2a55-47f1-b185-f9296f9652aa\n52abface-72ed-40fc-8d3b-8415d9a9b78d\ndeeb2e51-dfe3-4783-8616-a6ee932690d7\n22535622-7ebe-4097-a9e5-2eaa98988182\n70a10508-88d8-418e-b306-5a6f3627d431\n0cdcb66b-71e0-4f44-bb21-0660ee282057\n69baefdb-adbb-485d-8db0-c0ac3468c358\n372ec1eb-994e-4e6a-800b-b1cfbda53b21\n21de95d7-c2c7-48d0-b680-d133aa4a3ec8\na820f47e-6928-4a9f-91b3-0e23a82a8bd5\n4f3ffc9c-d102-4f5b-b749-e679fd646370\n4f5a2bae-2b61-43b8-9575-f06a36389f77\nf91fdd53-a4b6-47d9-b23e-4298b17713da\n145973df-6ca8-4688-aea3-c997bc2e3df2\n755b37f5-a4eb-4234-a057-e5e0f41292cb\ndd40fd1a-5dff-46a3-8b9a-b7ef21bd6dba\n9d36d814-6bc9-44fe-9962-727ec97ea211\n6fff7eed-21d9-4bba-8b0c-425a92400230\n72251371-848c-4e81-b7e6-edf0d6c4a960\n1d97ca44-2e25-49bd-8174-7820941589b4\naf0ec937-68b7-4cb3-aa5c-3ed6456bf2a6\nff0bb511-16b4-48ef-be44-fa9bf3b94419\ncf09d6d4-c768-4514-9676-8bc50cf56639\nb65f84d6-b619-4e4e-8b57-e38898890249\n920d6689-179a-4bcd-ba70-c06103b0edb8\n7e5a59a9-8b3f-43ee-a99a-e7196c354f11\nd90a6994-b948-4a68-b7cf-aba42ec8ffab\nff1db197-86e5-4b0e-8b45-a0ee0142eaf0\n5504402f-1c82-405a-9ef1-2891bc85da46\n07be6ff1-d0a0-4d55-8f70-55f2dcbbdf38\na46c7447-d302-4edc-b382-85f418942b6c\n0fd2cdc9-7648-48ba-b231-25399554f672\n667e9242-40b5-42a5-9dc4-da30cd0a66f6\n78aedd54-8e58-4e0b-828c-ca6cc8a50ba8\ne06f1527-70cb-4514-aaaf-d9a5e02c0e29\n1ea2d6bc-4c55-44da-b1f6-7c596f4c05e4\n74e3293f-a4e7-4cb2-980e-741f83e734bb\ne3226c07-120c-41ce-a4ff-365c8f2eecfc\n9bd409c2-46b1-4dda-9f73-ec91eee1bf6b\n518b0c96-dbfa-4958-8c63-b0bcc8e5a483\n303f988b-e239-419a-b6fd-604b374c14b0\n1f662676-a523-4dcf-9508-6c0fb0c2dd30\nd5a30ee8-1886-46b0-b51a-f5708725eb4c\n1890e629-39cb-4512-97b6-b2e8fbd8dc75\n2bf95f38-5b0a-4a68-a3ac-a292933e90c3\na171125b-02d3-43fe-8bf4-1025185806db\n2944e311-646f-497b-8b72-bd7f9708b4e4\n34f8637e-f3ad-4e9a-a03f-c9e95f9ee291\n0f18a517-be53-433b-b03c-395a22d2dedb\ne8622cc4-5bf3-4acb-871a-79efc4115e83\nc2c9998f-15e6-4713-ad77-c7ff9d8c5f3a\nef81d361-0b20-4f90-9501-ff279e42888d\n5aacba36-2a52-4608-88d8-e6e959ba3d4c\nbb0a0c8a-e3eb-4af3-9617-9473b2f6183a\nc11645d1-ec49-4371-9233-d897beac16a4\n5b72e78a-6359-453b-b729-79d7873cffd6\n35d8b32d-0678-47b8-bc54-243ea1f9baf2\n71bca9a4-8bf7-47d9-a6a8-b23e790b9cb5\n04ce8c93-a4b7-4f48-b6eb-cb4d737c1267\n815348d5-1efc-41dc-8353-99e4c01262ce\nca9dfb9e-0178-48e0-96bd-e56a03ef1820\n07a609e6-e541-49b0-9e47-e5e7727cea05\nfeb65ded-5a99-4892-b417-665ca8305891\n96b253bd-a0c3-4965-91c5-7f5ab2100a56\nd92f8dc7-c80b-4293-b88f-9b17d6a89cc0\ne1156e0e-ca59-4e03-bb6e-d782b0b701ee\ndeb63881-5a46-403c-99f2-425d5cd8d885\n08628516-b9b9-4c83-9bdb-93ffc4d328ad\nee9ba5d9-e544-4343-804f-14836a9d27d8\n3f69c4e4-e6df-4487-9ebf-1b2a7c76a24e\n8df7151f-af9a-4885-80c4-78a2da3ee230\nf8dbd115-0e6a-4611-b92f-f62e09c59fcd\n154b75c0-a451-4fa6-822c-76509cad44a5\n88d7df45-b268-4dea-b7e6-42c8f1d053c7\nb13b21c4-ad38-49a3-a0f2-66990e2252a1\n0aabe7de-193e-4c1c-898e-01a3b402a282\n71b500d7-9656-492d-bbb2-842dc095aa9d\n707da033-0e62-470a-b945-6f312155fe8e\n810d0c6a-ab3e-486e-8e28-c80d7a908867\ne1a6877e-5c8e-4884-b5f8-8aaea27916f1\nfa78e1bb-679b-4c7c-a379-b6f83ca5cc6f\n421356cf-3936-45c3-8afe-c71e36ca6ea2\n6f4d8f6b-af46-42da-8348-63bb7dba5e9a\nef3bc908-0248-40f3-bae7-f8f0d450b83a\nd5e4f5e0-25ab-4ce7-81e8-ce6006992cd2\nbf4bd3df-186f-417b-9b74-a933b617ea66\nf60e78cc-568e-4804-ab77-64b0a2657374\n55cb09c6-a6ea-4f25-9be8-5b82783bebec\n9cffa95b-54a9-418b-a740-b7ea22d9fd79\na09edc16-6098-4849-ad81-4a1f8a8a14bd\n1d5ac466-93ee-47d8-b4c0-1029c58ad472\n6a952785-5fed-4275-a8f3-7b5832e49999\nb3f5b917-0af7-4d74-a73f-b0096c76dcbd\n6e93ea08-84c8-4600-87fe-d40061d45ae4\nae36168e-e6f8-471b-83da-235d686595ad\n649d0f26-f3c9-4331-bf6a-4f0962065ce0\n6e9458e3-15d8-4e6a-978b-33160c3d4797\n32fdb54d-205f-4065-a8df-f53f049dfc58\nfb05b9da-274c-4880-b3bc-5840e5cfb8a1\nedfccf77-81de-4782-b4ca-631d50266620\n997295d6-173d-43d1-b8f8-e5b5336ddf83\n4034c2c8-04f0-4a9e-b83d-de5c3c1f9640\n5b3d8b2b-c0bd-4494-b7bc-99aa3b589851\n5b8b44be-ad11-41e7-bcc9-e0dc0988736c\n0d4ecdeb-9d9a-4d25-a441-1c51b81839ce\nf7a30263-d07a-4979-a523-be51f87d9aa7\n27e5020b-f50b-493b-bd87-2afff46502b4\na65a05ae-b6b2-4eda-84d4-da4ef672c926\n16d467af-5363-4d4f-96fd-918b8254bfcf\n6593d228-9494-4c6e-bd97-ce9c17e2ad77\nd01d674d-c9e8-428b-a7bc-b9dbc275f75c\ne4b9661f-0635-4542-8a75-78b7d7a8f7c8\n0602369c-76a4-44d9-a050-d544d6b124a6\n5213a9ab-aedf-4b48-9624-f45c2ceacf48\nef5063c2-5adc-4f48-9a3d-819db03cd6f7\n6ea204b9-cba4-47b4-8406-e4ce4a50fe72\n62e04c39-6e9e-4357-ac0f-086904019c55\n757623d1-5fbc-41b0-8fcd-f6b5dfc0d13e\n675a5c8e-ffb7-445b-9ed2-54badc57aa53\n38986b8e-37c3-4ab0-80f0-6375f7f4162b\n224c31c1-09ea-4bad-a87b-ae092f50dea1\n9bc4ec10-ff3b-4b7d-896f-abfcf6249c67\nf12f4d54-4d7b-40ac-a3f1-3f41c8baaf8b\n0c407f27-f0aa-4c35-9ef4-daac640fc601\n61787833-b4fb-4da8-8529-8574b98085fb\n2a27f67a-ebe3-45ce-9f80-6c40260e7e20\n92b49b7f-0e82-4490-9d54-1e76a23f971e\n42f3a9bf-3d43-4644-9321-ebb127df3478\naf60dccd-3a79-43f4-a667-84480fe78035\nbe2ddeeb-8de6-4662-a345-46e660c946d9\na78e061f-1a3e-481d-9695-8476cb8fc5b5\n22c3e175-b46f-40c6-a6f3-03bf66e55b99\n43685c55-8f19-4701-aeb7-82372e0d2e14\n53456be7-63f0-4d62-9821-ad56d25fa6fa\n7e3c2039-2112-45fb-af3b-d01234178487\nc998d462-56a1-4119-9512-f9f214cb93d4\ncca1d134-266b-4c63-a9ce-a56b15e604a6\naa3b2616-de37-4c94-b9d1-c499b808eeba\n1f896422-ee21-4e2e-8b57-bead025650fd\n71d7f16c-1edd-496d-9ea9-1be7b933a552\n31ebdab2-68fc-4544-8f70-6274556c0344\n1c4ff1aa-a228-405a-aa8e-82ed16170f2b\ncfb27686-0737-429b-9f54-15ec8d3de348\n04f85c79-92e1-48ac-8d89-e4d77c5392c6\nf5fe7a67-93eb-4a20-b1f5-78ab9e7f5562\n64056575-d9e7-4d76-acbc-4de82b2dbfe1\n44819071-605f-4898-9a29-2495b78e6370\nbefca951-62ec-435b-bf82-ed3737e6807d\ndfca6cd5-bfe8-443a-81eb-833f71b867d5\ndeafacb4-7d34-4940-8d0f-9f54e19141ca\n1ba139be-ef4b-44a4-b58d-80e72b640fa3\n94051b0d-e56e-46c7-9f7e-f8c49f1de285\n08dd0a3d-746f-4140-a243-7293b1e4cfdc\n47d2172f-864d-453a-8750-a3070d9f2344\n596b19e3-5e6e-42cc-9f7d-7ece5df8a148\n4445f36f-8c97-4d79-a686-8c5eead31dae\nda75f09e-84e1-4aeb-9080-3bb60c6a827a\nc8c18bea-4316-48a9-8ca4-ead5db4dda32\n96c47bbd-56ce-49a0-ba8c-5186768a27db\nd296bc46-cb56-4f4b-b19e-69bdbc65fcce\n2b2a49ae-5c9b-4e85-8e85-4f9b56f921ce\n497cd8fb-7eb4-4cb3-883f-0facaf2a0540\n8acd88b6-bd7e-41ec-ab81-0fc87487e861\nd07930d2-2ce6-4fdb-adf5-89b866bee230\n63cdc806-2a33-445d-846d-5ba9a5a7666f\n59251ec8-b251-42b1-9ed4-a474394fe34b\n1ec15761-66b0-4d90-9245-aec1f249c482\nb2d04032-3804-408c-8e48-17afd5c760c4\n29bd2e2f-f0a0-49cf-9b89-dfa1f8484ad2\n1c49e1ca-e2bf-42b0-a3ef-94916dac0e59\n573bf376-0db5-4441-8e03-5d97b1940c94\nfe168683-4551-4e24-bcfb-94280008b3be\nc284e05f-7a48-4953-9faa-dba9a8509f28\na16b191b-a9a2-41c3-bdde-cd14a0cd492c\n551a5785-1431-47e4-8111-b7e2aa577035\n8fa6f121-33b0-469d-97eb-f22b7dbf23ca\n6cf7099e-2c79-46da-98b0-af14b37732a0\n350af78c-4170-4a73-9d43-229ae768228e\nc24fed5d-fd1a-4e3e-b229-4b17b70198cb\n9a563cd3-3521-4b43-a3e9-0d665207bb8c\n76dd3675-36eb-48c3-a8b5-b40336f9e8b9\n522d140a-7d53-49af-abf8-5ded3bc9fca6\n4b3442de-8cde-4f01-bbf2-eefe4fb681b7\n03698652-bb32-4838-bca1-01097c645a11\n1f8f0f1d-a4d3-414c-986e-770de64d014a\n8ae175db-723b-4e09-90a9-a717d1bba74d\n65ef4209-c179-45e1-8ef2-f9abbae88a05\nd17c66ce-1e70-4064-87fd-06d342e7895b\nc4cedf32-f790-4b8a-8d22-e2ff376b9e5a\n87facfc8-be2a-4b60-856a-1802f874ba8f\n32a6949d-ba59-4afd-80f7-cc9f169f3648\n7887797e-4ec6-449d-b9e2-392da5a6a94c\nd821f8c4-a899-4fc4-b2e7-ff985039934f\n89a41c8d-5e7c-423d-ae9d-2e2b062a2ab1\nf98e90e9-416d-4dbe-9fe8-9a581dfc1484\n1661c3b2-b534-4165-afc1-5a12facbf381\ne46de196-11a2-43e3-abbf-89c6395037ee\nf2bc84e3-9b9a-45c4-aa41-db649da16522\n54167343-9800-4dea-9061-ead847a85d95\nfdfc1afd-1381-4c22-a62c-1dd3ae5c525a\n0490a43f-ac1e-457f-a758-d4262f4336f7\nfc62a630-7467-4efb-bd9c-8655b00ab218\nb896f614-bb57-4def-b1f9-dd82bdc6bc5a\n343acd98-57b8-4b7a-8a18-6594ec64fbc5\nc1d12712-9370-4f10-9c0d-6d1e1620d345\n10309bc4-127d-410c-addd-88a1f328e302\nb3756748-3a9a-4787-a9f5-148a7d5e765b\n217ba153-a374-4019-a8c8-3d57898adf92\n01b8ab28-c372-439d-a17d-6dd4be08a440\n0ba83b11-0f13-4ed0-9312-e3d5ab78d70d\n3129c635-3e28-4c75-838f-a78f4c706e4b\nbdc1369a-87e3-445e-b4e3-c370b90cf29f\n3fff88f5-76f8-49c2-99d5-f267a07ffb3a\n3f4c69b9-fded-43fd-90b8-69dec2a790ba\nfff09bad-b996-41b1-9b12-fcace7b145c4\n9425b03c-84fc-4f0e-8cdb-71d516e94f3b\ne24760c9-e229-4b15-825a-6385a0bcec77\n13db1d8f-09f4-4d9b-97f3-b798bffc00ac\n39976287-c14d-4434-84f2-efa0417199e9\ncb9b4d58-f699-4cd7-86f7-5ac83812deeb\nd7fadfa5-ab69-44a2-9d3b-42e850b6dcd5\n7efac02f-f7c3-40a9-84a5-3d77255c6191\nd3223639-d1c1-479b-8efa-315a9d2c485f\n49551e6f-0090-43fc-aeb8-cb1e8cff26f5\n9adafa39-9572-4112-91ae-ae4b80469b9a\n41d0853f-8b65-46d1-9a47-3aeff63aa5fd\n0550c68a-201e-4fd9-a590-98552cb9c171\n73fff64f-6823-4236-b656-d0e17c4d3e67\n537fa267-2fc9-4712-97c6-bbab3bf0f513\n8f5cb148-9f4f-4d51-be7b-d1d1dc664296\nf0ed0ed3-5df4-45be-9965-3925cb7f3aad\n76a65de2-e052-43ff-9d7b-ae18df3936b6\n4b1400cf-eb58-4a35-8f2c-f46430689217\nb8a5dab9-7235-4c1d-893f-05baff7e1834\n5c5756b1-506f-434b-af2e-f2b9638114e0\n6f695cd6-34cc-4054-8304-26b1e77c245d\n9b569c0c-7d64-4d61-b900-12640219cfef\n05a7ec74-29ef-42da-98a4-e125e6feb1bc\n0ac296ba-1163-4460-9785-288786d89506\nb74c5164-90c3-4c09-a7c2-93ccea23a5e5\n6f68a6d0-3cd4-49b4-ab82-16ef681fd0d9\n57133ff3-9705-4922-b68f-c793b0d27dac\n0b864e82-7e70-47d0-bdb6-08ea7c471dae\nb3fd9beb-cbb1-47a4-8aa7-9d61b70ff85b\n8d427f36-6485-427f-b004-143990402a20\nf9699ab6-51a6-41d0-8eb8-95a0a91d5a4b\n032443a5-2d4d-4b73-9c53-8f93ee0341c6\nace63a95-b0d3-4208-aaa8-84f6bee1546a\n8ffd6052-5c8d-4469-a29b-64e7a53c14b2\n5c62f254-7676-440e-b7bd-332b354802e9\n1bb03552-2b72-4bc9-9bab-84b5350b2dd8\n5b8a43fb-c6d9-42e9-843b-2d86d1ed5fb6\nb80a939d-c531-4700-a462-3e9fa8292d4a\n0ee8343e-1902-4a03-9060-dc1d08a5cc33\nbb20bbf3-6839-468c-99f0-01a99daa1830\n90b67db9-2ec9-465b-8ae2-c5c0a426b6c3\n17e48bef-65e7-4f7c-970f-28b7e6407e84\n1a8d99f6-1f0e-4653-ae49-c7fd03e66edb\n1f7f434f-1ad9-4246-84d9-bdd9a83a06bb\n4621c991-c447-40de-9bef-29c9c173a26c\n7104bc7f-c6af-48af-ab97-53acf832cf32\n4458fe36-1b84-4781-88bc-ed05df5ccf09\nf60d9b29-2aff-4e9f-b2cf-206c52e86760\n8314559a-db6c-44f3-b910-b5ea8e3b58e0\n9f8df32a-4b68-4250-a58d-12e6ecad323f\na160b346-d4b2-4786-9747-5d2ba6b07148\n4b6d1324-eafc-44b2-97a0-3c06f4a7ee04\n57ae0ff6-b686-4ede-b330-5fae3d6a08cf\nd40ee922-c16a-466c-9a1f-adbbe27f5f71\n49ceb552-e0f4-4cc5-a510-cf32b76066bd\nb4900cf3-eb48-4875-a84a-6f7ab249c201\n5018c5ce-e5c0-44c4-bdbc-1597a4418c72\n6e4ac579-c35e-4046-9f67-f794f0df6f6d\n779feea9-d797-407b-afe8-3b64fcd5f12b\nc3e6d7d9-2761-4697-abf0-06b73dbb567c\n9d51e517-442a-4dc8-ab26-666df4e78c9f\n91d5e3f4-2c8b-45c1-8ec3-ed89f83cc991\n674cc749-8447-4c84-9694-6bf64d3f9c08\nb9bfa58e-8971-4420-bf58-eb94f377c10d\nce7d1c67-a704-4b6f-8139-777cf9d5dd25\n0995fc78-4d69-42f4-a587-06ac0636cc97\nf9c7874a-2aea-4a09-84f2-793850571269\ne6c0db50-b775-4142-bf15-6386524af544\nb561ceb1-c5b0-4b1b-af4a-6c6dcb0cf637\n3cf7e772-553c-4862-85fb-0409e0bf44b3\nd4ac607e-4e3a-4b9c-9c08-246af357f703\n77a856df-d497-489c-a2ac-0baafd464cc9\necfdb23c-7f02-402e-8da5-95b786f1b6b9\n0a6c7137-6001-435f-b563-c6093dc79184\n50ea96a6-bd4e-46e6-9ebe-b7896d4bc5b8\nf19d490d-a410-4df7-8fd2-d1b7b387b5f1\na73f7421-1fba-4d9c-916b-a94d572a08c6\n9613b93d-d4e5-4c97-941d-630f2c4b16c3\nadebb3d8-5861-4f3c-8efa-2928e4ff312d\ne3292d6d-b193-4bd9-a7fe-07ffa007953a\n2567280e-13dd-46f4-afa3-9bfcd22f27c3\n4785d6d3-a08f-4fd2-ab4e-1fdf047eab0a\n9b41eceb-2a6e-4814-8fa0-891307599fef\n4e3af003-f297-4180-8645-c91977bf204a\n9972b09c-ae8d-41f0-b9a1-112119946003\n62f4b0e3-d19b-47c1-886f-7f4ebeedd670\n3ce49380-029e-4a09-ac8e-d6e4bcc3942f\n081aabe1-20ec-414c-b965-344fb2e55297\na65d4aa2-9747-4433-942f-63f183c6f6ff\n6ce674a4-6015-49bf-b736-bc260cdf19d1\n1a0f8c52-d234-408d-ae5f-85940644b589\nbdb7be77-a768-4095-a6e8-112d90c3d251\n3f45688b-bcab-4faf-9dbd-5624a4b9b220\n2602bddc-479b-4b38-8932-c0b2b1d6d1c9\n040f09fc-3fe4-42db-aaa0-04d2d9cea24a\na4ea3c1b-5b29-4ddc-afd1-ecac5d9767c7\nc71cdf8d-10cd-4eef-950f-1b1270b9f82f\n297a6a3b-0c17-449c-aba2-35a5f60d25d3\nc09c2418-72c0-4945-8db9-e5332c08a8ea\n8498851c-878a-4f27-8b27-3945ececf5a0\ne0c74b61-8f24-48fc-b5a4-dcc65445bc11\n3f1b05a4-6b41-48ea-a7fc-3e65c1a47f78\n993e31e4-77d0-43ed-914f-b76339f49419\n787d9ac5-3f65-4938-a893-59586475254d\n81a1bca9-884f-4769-b2dd-d37e1ff4d7e0\n66c80395-1169-45c4-aa09-47e79975d435\n44c7589a-7ab7-4992-ab64-4b93fdfbc875\n39f82423-f5f6-4c2d-86ce-63856d795ff6\nb9af3960-7238-4966-872d-e134be0ee632\n9c7faf6f-41ce-40ef-b850-99a255987f69\ne73386eb-2eb2-4183-b442-fcbfc368b460\n1c7cd1c7-f6a3-49d4-b714-9f49ba29c5bb\n49c11dd4-1569-4380-9f22-c54f00b6a515\n599f3a5b-df1a-441a-9f51-9decbf701051\ne81c81da-bb2c-4d10-9fa4-451f0c135a5d\n35919e02-f2c3-4d01-847e-749203a173d1\n733fc91d-b57f-4a6b-b281-7ae1f2a3e989\n95714792-89b5-4d5e-b566-095270a1a055\n830ea75d-70f0-4bb4-b8b5-6f4f3c09a706\n1ffda627-8cd5-4b28-99ac-09e731f8dd29\n38f9b00b-3853-46ba-a9ea-54e5a6149f22\nc1394eb4-4e18-4e80-866d-c97c466b935f\n2ff9ec2e-c7e1-4e4b-b6ef-0687d6ce973b\n15bb2cf9-e948-43aa-b2c1-ffa658cac9f0\nd714b91a-10bf-42a9-8f9f-140903589f81\n1c9da399-60f8-4d3e-b98d-6faf9b03c473\n1b4b9a1f-85ae-4f88-b983-39ab57a7530a\nd78432c9-7f7d-43d9-b02d-322418a70778\n8112e0d4-ad8c-461d-a74a-73f16925e610\nad12093e-8b94-416b-9c1f-7d433475a55b\nbc7301de-4754-409f-badf-793192c437e0\n5d3cb8f3-8255-4004-8540-2a010b1b21d9\nbd9f6b04-93ae-47e1-8c34-eece21cb7447\ncabb40a7-7d45-412e-bfaf-54d7137afd12\n99582c29-df62-4e24-9d1a-4ad1cb03b41f\n00483c0c-2aad-4893-b768-004c3081dbe3\n7cf21f7f-7952-4871-abce-7f71fca1a2b7\n4e26f49c-be1c-4b8b-aca1-1f143a5f9de8\n824afd9b-ed1b-4b3a-af68-c8021492ce78\n212bd728-9ee5-490e-bffc-4a17b722eebf\nc69ad286-98f1-4c33-8c92-512928e3e825\n6d49e1b0-f414-487e-a4f5-f9f37df3cc8a\n17c9cf5f-b09e-4caa-978a-ff65c279895f\nad7e02be-0302-4e97-b172-95c937894894\n027529f3-9a4a-42e9-86c0-96e79382097c\n4ec8508d-ce46-4505-b366-98356a3c32ff\n5cf860d1-5bb9-45cd-a2fd-7b1259c0acff\n0cec7b05-1a74-4ff6-85f6-58b60e5fc536\nd379d3e6-a52d-4e03-853a-9b38e4259a62\n66e3bacb-f8f1-4efb-aa47-b95a326cb088\na91f6b70-dba9-45ec-8b61-037fa27d7b31\n628827bb-fd6a-4c4b-8be2-d87a472d3ad2\n881a3757-90da-47fa-bb13-b18ebbb3d723\n462681b3-e72d-4941-b258-fe05f427cfe2\n5c383670-07ee-42e9-9682-17683cf1457c\n1b412d04-2cea-4c65-8afe-518102c1c0ae\n27ad1549-4c54-4c2d-92a0-9a70bfcdef81\n89f9ab24-0dfa-4dd0-9c46-5efa7c6f7607\nf36e2205-c9c0-4835-be43-ecc24dd13d36\n3de394ce-0fe0-4cf6-a90e-c4cb19e2303b\n2ed272b2-d5bb-4481-a173-ce249ba84b00\nbfac20d6-467c-4c6c-9353-607f5ce56298\neee39948-5a4e-460d-a602-24983aef771b\n3d04da2e-9506-4991-99cd-26b0803cd852\n78f00f4e-5366-4d00-8678-6a9fe30384da\n9bc8cb15-effd-472d-96e6-5fe3031fefb6\nbaf593eb-eaaf-4c60-980f-45d8a1ff0d24\na303a78e-2961-49fe-ac00-a71a286ac173\n7388a0ca-a200-405f-922a-15531e967d39\nf6d4eb6b-d456-42d3-8654-adc17fc7864e\n9fb0780f-a78a-41cb-ab8f-c8b7c3ba0fef\n3524b089-621b-4fd3-ab9a-8468b7b2002b\n0a0e8c15-fdfc-4623-8c2f-c2540de4d5cb\nd6b5b0b3-0e7c-43b8-a445-61537eab9381\n6437acec-25b1-4769-80e7-e98d82224767\n293bb1f6-6486-4520-8274-e23d623aaeeb\n541fdab0-f32a-44ab-9eed-6336bdbc6bcf\n2840cdae-ef50-4f95-82e8-0f62315246af\n9e4377b8-9b87-4959-8931-d1fbe18cae89\n559ca18a-255b-4c45-97c6-3a268d4fa2a5\n02cfef62-b917-4299-a101-05ef20b4e627\nca198cbe-7877-4841-8206-5186c8b49f60\nf0f204af-2c49-49c1-bd96-32938d2a421c\n9c3247f3-30c3-4af5-a1fc-e24a304b0833\n493a9093-93ff-408f-8717-ec9ec720d034\n0e5e0bb5-df6d-4072-b7c0-66abd900acb8\n0e50cb75-ba7a-4260-af78-f30d1ff660a9\n7ad820ec-a094-4b5a-8a54-77b2421dbc0c\na9d29065-e028-4422-9a16-a22b99024d5e\nd9b99e55-04ac-4217-b1eb-5bd4d075d5d6\n8554b79e-bf2a-455b-a536-498c288b1f74\nf17cac68-f8d2-4f6a-bc1c-0495bdfad048\nd831daa6-9e5f-47e3-a9e9-3578be301ebd\nd9abaff7-1280-453f-8e2b-34430f59b6a3\ndfb07be1-e9cb-459c-90ef-57037b2c0c64\n4bebd53a-39f6-4fc7-a701-fbc06c161770\n83a2a073-4c4f-407c-ae99-901b89fe344e\n95cec9d9-c696-45dc-ae1a-976c2f97d12c\nd18da5d1-179a-471b-a3de-48e6641c7585\n94a97e2e-d6ed-456f-ba34-5ba3b1650586\n4c72be89-ec1f-4c77-ad1f-ffec956bac20\n26a593cd-aa7c-471e-a5eb-12d440c85949\ne284a2d9-bf38-4fc8-825a-31fdd7ae5ddb\ne9238ca2-ec23-4814-8b9c-a4d57050316f\n4a2004ff-6468-4086-8e97-d7d9161e6cb8\nff4d0af1-0024-40d9-8ec3-7c6555b7fc20\n89f216e7-2fcf-44d2-a715-202394632671\n3180902c-0c17-49fb-9457-3e1357da3206\n2197e61b-69f6-4d07-a0b9-d7eb38d0d31f\n971ebfa6-01f3-4312-bf1e-560d96602121\n0981974a-2894-4f2f-af80-6351649b71da\nd9d849f7-371a-4c23-bbf0-bb71ec7178df\ncbd551ba-69a8-450a-936f-5fc3b83986f2\n878b708f-7743-4edb-807b-c06db5cd14db\n4f73cead-1fe5-4204-9f18-2859c65551b8\n4f7c31eb-ce44-495c-8204-25ca1678aade\n4dba5cda-a085-4e85-a7b3-e183d04f2cd3\n6600d63b-54d4-4164-96ab-68ebd32855d1\nf920a3ef-cd86-4065-84df-0e10aa53f058\nb8af7b88-70ef-4f43-a090-55cf963e39c1\n3c343e67-3c8e-4a5d-aadb-3c20cb95583f\n3512ac52-d6bb-4bed-8f2d-0eec83ca4ab7\n4a89954d-d4c8-4283-b5be-a7b18e8cd99b\nc7ba6ca0-192a-426d-99b3-55e4085dcffd\n5d138f64-6993-417f-8991-07b2434c498b\n91eca80a-e133-4917-b732-44028a20895a\na19eade5-f0d4-491c-9353-ef9220ae2a46\ndb36961a-ff62-4c8b-a353-bdde5694af12\na750e6b6-cce9-4a2a-8db1-069ad397764a\ne0e46e45-48a8-45b1-ae00-df3707838126\n1a85f02f-6714-4bc3-bd80-74d1c134b05d\n86d705c2-d30e-4d58-9d23-35a0f13ccc94\n180193fc-f0f3-4960-ac3a-bc753b5389d0\n258e2fd2-ffd8-4b47-ab90-dd44b2397655\nefd4dd6f-1e4e-4ff9-b59a-1adeb8dc1018\n7944db6e-d04f-4779-a015-c7debd88a5a9\n50380c58-b186-470e-8738-ea82d9a4e750\nc3ce2983-9440-40e0-a27f-808969b4e60a\na837b40e-1ab0-49ee-aa1b-c6d139ce04b3\n91744630-1c3f-43b4-bef5-68d6ded78567\n66b9bdda-6ccb-4995-b55d-4506ed96200e\n5980bba2-d3b6-4951-9ed4-2be6bdd7a049\n52995562-1f52-4f1a-ba69-9c288632012d\nbfb77fd6-47ee-4869-a0d4-5acdc1bfd57f\nace11970-6d4e-4eea-8b8d-24eac198e37e\n68b2c325-f4c9-4ba6-9038-e6c26a741537\nfef6aa0f-66c3-46f6-849c-30ae40c9539e\n89fef1ed-9535-4658-b7b2-a2bbdea7d3d9\nad4bfdc9-a4bd-460a-a192-6d8ace5bb408\nc66e17cc-0210-4988-ab64-39cdec056097\n584f6b12-9cde-41c4-a490-713337a5dcb1\n3553c5d6-4ba0-42f9-9d8d-7c4c44fa7de6\n5f7219f5-a0b7-4936-944d-21435b336482\n9fddbcc7-16f5-48e1-aff1-c74f678d5040\nfe08e82d-a7ff-429d-b9bc-416251df8740\n48ef7180-e7c9-47fc-b150-2d7de180f685\n5d4a3c23-548e-458b-992c-1a7b65ff8b9f\n98775526-985c-49e9-9a7e-12710d9b55b2\n63fc56aa-d970-4db2-b8f1-ea69d4db8c3d\n407c4e69-3272-4d2a-9f72-6e65be8d3e6d\nb73f787a-4fbd-4e15-8b1b-c134b4f0fe0e\n3fcdd2da-202d-4a16-82ed-78d079534d48\n0fca772e-ca18-4592-a22e-f25a2bda4fdf\na457a679-3f07-4a96-bf4f-0427020ae802\n5adee072-0463-4b8c-a5b3-3e607e0f5042\ne5d36792-94d5-4282-bdd4-bf519cc397e3\n239448c0-2580-4a1b-a31d-a5fe13b43101\ndcd38a72-e18d-410e-9bb8-cd0542106269\nd13cd350-13da-4fe0-859b-1c824a3e0e13\ne5d6ddbb-dbf3-495e-bb24-1f486d7b200a\n64498a4d-7b2b-4355-a0e8-9a84c7880e89\n444e4bc5-6ba8-4e5a-914a-04f5c56a0751\n8936c60e-9c92-4267-97dd-a0048ede7e64\nb815f9c3-a7b3-4d5e-a674-e4983feb74fa\na7f45739-afec-4622-9536-4fb523726bf7\n668114fe-505b-477c-9f3f-7a498248feb0\n60327a02-e8df-420b-98ee-c215c5d12229\n93ef777d-9616-48bd-94c2-e74997da4c35\nee3b03a9-b5d1-4e25-ac34-cd3531ac7108\n46a5ff18-a38f-4a5c-87bf-032e91d9e018\nd3edb611-603b-4f79-b04b-d55779a03925\n378c07d4-6a73-4842-a845-e724a5279bcf\n73266c7c-f8ed-4294-b753-5f0d924bf861\ne0730b9c-3f79-4680-a7e7-33b58632fc2e\n53023efb-5e04-43e9-8c1c-f4f100a2609f\n31bc548c-fb97-494f-b15f-012607c23122\nbbdd2f94-e7c5-4a57-bcf4-54d75b56fa9a\n68859a94-fad4-42c8-9f24-6d272b1a054e\na2c59605-dbd0-4294-81b1-a68952cbf78c\n6b4f8ef5-f32e-4073-bebe-c35f940cf4e0\n94fdffce-0ce8-4518-a6b1-db7c0c94644c\n1df32a83-5745-4cc0-9caa-83b61a23d313\n54af5d9b-d72f-4da6-8574-3462293adf0e\n4e925e8d-79bc-4b7c-b9f8-10821e51f611\n7980a980-6b99-4083-a70f-34c15dc1dd78\n5058afcf-1af1-40b7-83e3-e8666d1550b1\n4b223207-3db7-4585-8deb-96bed960b1a2\nb0e16e07-7d03-4d95-9651-7fc67d6f68b9\nedea64a7-24c5-455d-8de7-ab04cbdb5480\nedcab688-4451-4b37-a5f0-2e16a5fdbe78\n197cdf75-7ed2-4475-83d1-ee575b75a612\n426dc8a8-2f53-4c7e-9ad5-705377925976\nbb032c7f-5382-40f2-babb-605101557df7\n44a2c197-e96d-444d-9a16-de4f53400c73\nbf485f11-a58c-411e-acad-3447c3882f0f\nbf101d15-1fde-4c64-9051-ed9688fb2cd8\n2a8533ff-df86-4776-8660-494650ecc85c\n2ab5bff4-0b12-49ef-838b-f4b8b1ffa3e9\n408627c4-db7e-4f87-9875-176a9e945098\nb538cb22-08a7-45f1-98ac-5740c63311ad\n6bfb1273-de96-449a-b28c-2c793bfd9fa4\n879a9c5c-894f-4509-add5-c790a9dda72d\nd8013a52-5157-4e7d-a823-be65e8c88a70\nb632c975-9038-40f1-aac3-3031501953ad\n0560aa14-65e2-4be6-af83-ff97de347d26\nf4b52d64-34d9-4fbf-94bf-2bac827c16fa\n70b8b66d-5c60-4ba4-8475-6bd73b865eb8\nf82b30e8-441d-4ae3-a42a-bebc23c8af0f\ne472ab00-a7ed-4035-91c5-4c6780869f3b\n3bbaa1c1-ed7c-49e5-84fb-ba0accd2d6e3\n121cff30-d2ef-4b6b-92b9-526312521bbd\naa149851-03b6-4a82-9575-699ce5666849\n8db11271-b7c6-4afb-bf0c-1ecbf0bb2d9f\n95d8bf91-3ff1-4436-bed6-3d36a99e79d2\n3f326f85-afc5-42ef-817d-9595164c5c49\n4291b24d-0770-4875-be7b-f04dff271e6a\n931c4c64-8c6a-4de7-8ea3-e484060430bb\n43e25ad1-29fc-49cf-9f96-0ed8e246a98c\nfbdde9ca-5e98-41d9-983d-6c6cd7c54018\n16774713-e661-46cd-9bea-2ef3b50fc9fb\nd27d9cc0-13f4-4d4c-b103-e03611c21488\n196fc9df-bdda-482c-b355-40f3aededb16\n85ef7a63-4093-488a-894b-b3eb3d27d932\n28dfdb3d-fd4f-42f2-ba11-ba4818fa18fc\n796bb563-190a-422e-827a-811cce63ceff\nc6bae2ea-6eb0-43c8-bdc1-0c5b1d172c36\n0b78c5a9-19e9-4113-8379-e76a4863bf0a\ned9493e3-20c9-4cc8-8299-bf63cfff8b41\n9d262ad0-668d-4408-9030-40f4df50c68f\n36b9c61b-d0e4-4648-8031-6c231b71a093\ndf16ddbd-416e-46bd-8402-1590ce44a07b\n18821eb9-043a-400d-ac61-c4f3faba7938\n32cb4f7d-e1cd-4231-9504-ce9238fed6ba\n11da0cba-6e99-4a7a-b1ed-dd1e07c282a5\nddb6ddf8-76b5-4d3e-8d2c-892a0d368b46\n921498ba-a892-4953-9f45-d3b4acf3bdd0\nc41b7d04-59e4-42bb-9c62-8cfbfe8bd869\n63949577-370d-4656-ac34-a55396b0ce69\nfa60f2f7-f459-4b53-9aa4-611fcb5c1377\nbd8162c1-5ce7-44e1-a250-1f386ed72fbf\n24847c01-c8bf-43f9-91e3-ca78110ffc00\nec4f0a1b-2533-4ba9-97ac-787a1a7ef716\nb1e4c844-d341-4814-a33e-a408c13c3bf9\n1349f851-7f61-49de-9a8e-74bab303dde8\ncb095722-9c76-4864-bcab-8e9efe104d17\na3fb1ca8-6e04-4147-8c91-766779392a62\n67b2200d-db07-4f3b-b26b-f8b7440c2af6\ne1ccdde2-d62b-41ae-adcf-1a5a7b940c41\nce072a0b-bbb2-4eb8-88c8-ab8289409149\nad345e4f-44c5-4534-8c4b-170ac9bffc76\ncfc50f06-5d20-41a5-b0c0-bd16b3699ea0\nd0143948-0a78-493a-b317-93092df93bc6\n76788cca-0f7b-44f9-b235-eb53267c55aa\n5efbc597-ea5e-4f83-9bca-8d42f6b8a8df\n9a6ea9ff-afcf-4f9b-8e3f-c9889898c42f\ncb31da87-a9dc-46bc-947b-5ed0355ed4aa\n84e869a5-1c01-41f8-adfc-9212a99813e8\nfb4f4207-083a-4bf7-a84d-598741486792\n6e59de36-de29-4290-af99-43ecbf776aa7\ndd721249-1e9d-40b2-ba81-ce5639a08f66\n876b3859-19cc-43e8-aa97-45130fa155fd\n295a19b1-6f93-4cd7-ba0b-d611c7bdd48d\n5094ad02-a48a-466f-bfc6-b83fba7cbe70\ne44c10e6-a3c5-42df-be1a-3f8f57d0ee29\n6627187d-6616-4088-9a00-ddfff0f6c725\n874b5fe9-9e0a-4fca-990f-4834e219b9ec\na4f286df-f6bd-4d04-9f04-8fc7cf6bd8e8\n51e96668-30c6-4084-83e0-77262e43d135\nfce697df-d393-4201-8674-2f1ac9220364\n71fc0131-7560-49da-89d2-350878eacb6d\ncf90b95d-d0f5-4f2c-a1d7-f3a598286d96\neeb2faf2-e347-4e6a-89d3-e142a2e2dec0\n4d928af4-f3d6-4def-ad0a-76e1717ea9a7\n716ba92d-7289-4709-b356-8ad99662a062\n09dae236-ded1-4d2f-b5cc-305fcb363918\n52929648-c6f0-4fe2-b5d0-bc47bde49f5c\n394db41f-4951-48b2-ac50-dc5c856d7587\nff788781-aca4-4857-9f2c-2a90a46e6554\nb7b698db-03a7-443c-b655-9b73a36d1d4b\n195a69a9-24d1-40c8-9595-9bdaa4640c2d\n81cbc236-072c-4cdf-a3a7-642fb2718dc9\n6767d483-cd01-44a8-8b59-47bb54f15b4f\n220277cf-10e6-4fba-8b0d-d1df84e70003\n3de17873-42b5-410d-af8b-eaeca76ae8a1\n895bc0e7-1d8c-4f53-8644-17b1c84b75b1\nc97349fb-5825-43e3-8375-89a84b5efe47\n5489ca12-9079-4fd5-894c-847e1d5d314e\n7f1d8df8-f8a4-42da-b85a-f72744f65f66\na8f1e263-3481-4d60-a1f6-991f2bdb4eeb\n23c77e5d-d0af-4061-ba39-f700c49abf0d\nb10311f2-615e-4c1b-83b4-706bd39bafcc\ndea52dde-b675-48ce-90db-2db7009a5910\naa33957b-554c-4eb6-9d46-affbbf2bd41c\n142a28d9-3fd9-4514-8640-d94535f41ff8\n0f909d97-6825-4d77-b5a5-c75fba797b61\n58139675-7899-4d66-8184-8223717e6166\n9b6e2dfe-00fe-4e71-96c8-e3e78c192c31\n7edc615b-60cb-41de-8510-a6b3780bea96\n43bdfdf8-ff68-418b-a810-971da8361ec4\nfd34f55f-0d1e-4d6c-b8f3-4a206cc696a8\ne1afdc41-6646-4bb3-869d-86a7da122d7e\n0d9bd37a-c845-4c79-aa68-4394c10461e0\n4ecdbf0f-8002-4d81-8b6f-432520e693d9\nb665bef0-77b6-441d-ae54-9a009bb33eea\n05fabe4b-7e52-4a5b-9b6e-97f0573900fc\ncac7d565-5fd5-49fb-8acd-4a3ec28be481\n312587ff-baac-44e8-97a2-eac6a7baebd4\nc87cc6c5-a3b4-4953-a754-c9ff62e9f493\n32245eea-2e5e-489d-aedb-721385f8f8fb\n7d6bc211-6eac-4856-9ec5-917916876787\n763cb902-0fb0-4b68-a376-6ef867e65161\nee90b3fe-1499-4c09-b155-8a535bcadb14\n780bb61d-3b7f-41fb-9a3a-e341620733a4\n35cadd92-ed14-4091-b450-3668d8f85865\n77397ba5-2d1e-44ee-9b2c-f5055109af17\n71fc2cbd-a62d-409e-ba24-ebdf9739be86\n44aaa78b-e978-43c5-80b0-2002768fc010\nae7073cd-88b0-4603-ba5c-d014581aa4e9\n27bdafc4-e6c7-40de-82bd-eb3d7f7259b4\nc85c08b9-ccef-4af5-9bfd-a94d4d01e421\n297d44da-a545-4257-8a3f-8a603a760280\n63d85754-277a-4915-9db3-b6079ae41bd9\n07bd54cc-0d28-4cc3-b7ca-e79b4cee9bdb\n5cf09752-2e32-43de-94d9-d961d0869eca\n420140ab-3c3c-45dc-a3bd-83281a58a4d1\na0a6d72f-2697-416f-8f95-22e48f3bf794\n5e32314d-360a-4e6e-942a-81f98c2a2ed0\n7fb84940-a73a-4017-9c12-6afdeb643d08\naffbac67-01f7-4b86-baa9-6b008e3f396b\nffa079bf-9715-48ca-885d-a2df56278053\n15e399f8-a729-4bf8-ba5f-86e255f8fc64\n16541129-6212-433d-a310-96e67c700ea3\n555a9dcc-474f-407c-94c8-2336400325c2\n9f8e1652-6b11-4bd4-ac61-149295ed06ff\nea7f93b0-e2cc-48e1-9b50-b72abce5e990\n543e41af-beb2-4431-9b54-a03466528880\nafc092c0-9c95-4297-a546-b3be10a20dac\nc294bc02-17f5-4762-b9be-475d86e9b470\n7980a590-22d0-499f-a73f-d41f7337eb3f\na7ca96c1-a9de-48d5-bacb-a4f713f4d4b1\n2b43bbc3-93dd-410c-9d49-e0057070fece\n5a365fde-8445-4feb-a5d7-e11ca4a269b1\n1f576ed7-bc9b-45d6-b51d-7ad03427aa6d\n413b22a5-3b63-4239-b149-f5c4ae265145\nc44b3396-ae3c-4990-8084-98c77862b88f\n81976c10-1115-408b-8028-d8a4ad2b70d0\n74ffe9b7-48f9-4806-ab4b-748bd0cf965b\n9cdd2419-2eeb-40e0-ad63-e0378f1d6a8c\n2c8539a5-9115-4eae-9fa7-ddeb610b4b7e\n31e3fc27-01e9-4869-a83f-5fcc63a49c60\n6b825857-1fa7-483c-ae41-74baeda50a54\n74049c26-8ad3-44b9-b96d-b740fad186ec\n3d30eeb9-77d0-4f42-9852-335c4be8ee9a\n8cdb61d1-377b-4665-b383-3af630c082cc\n6428fa38-7897-404a-a44a-da8a39aaca7f\n41fcce60-9e17-4aed-b475-ae38c5d050c3\n9804ebfe-1f2b-4bc3-877a-81a3967822f0\n4ca4b4f0-d6ce-47c9-9358-eb3b13633bb9\ne9a966a6-887c-410b-a6eb-3175abdfa0c2\nd65ce24d-2941-4526-9ad6-4bdf26245c79\n8d588717-6bb1-476b-bfc6-41a1dce45de1\n6a67285e-fd64-4869-9d78-6a5ad8426755\n630ea490-3727-46be-a05a-301c68e2af5c\ncbb4812b-83fa-4321-8dfa-d91e73dd19a1\n1111e53a-9580-4efc-9891-336b0602be2f\nf8ddde2e-8f15-475b-b759-07f6651e2526\n6370b20e-02a7-492e-9a5b-9bf1305e8ead\n1d8ee054-b735-4f36-9d35-b68e0b364a14\nfa3d64ac-e8af-4d8f-b4fa-604640f7356a\na58abbb0-f381-40ac-a824-1335555e6196\n62cb865b-6ffe-437e-8b22-0177c8ef92c4\n6ba88be7-dc97-4c67-9ae6-c207a07cfb0a\nf69f5e07-62f6-4f6a-865d-8fcb4948d7e8\n4df2d04b-6852-4dbd-a09f-f74cd8052696\ncdc4362c-7a7e-4804-9c57-a8fc02af5d53\n5fc2ebb2-a686-4aa9-afb7-720934598708\n2fef4407-f47e-4746-a4d0-728ae981e42a\n40cd3a7c-48cd-4515-a191-d60328e8b8a7\n5bdff291-2e53-4789-815a-f8c600bf044a\n23662c8a-8929-42c0-aad3-45584172008b\n1e87d87c-3edb-43f6-9b87-97e4b048b264\nb4961607-7b59-4236-ac67-519820ec2f90\n4d3d0998-a7a5-4e94-bf12-1365969adfcd\nd29556c8-9c39-4f5b-b065-2d996bef67a1\nf5055b5e-9436-4a88-997a-90826a319818\n19342210-eec4-404e-95fd-a9c8cb12c95b\nbf3b1ad7-738d-4c9f-a268-2d00c366e90a\nb955ebe0-1a2a-4b32-9d7c-7c22fc544f98\n925d12b5-f8ab-4c90-874b-0881da87d6e8\n8b5b873d-b4fd-4c75-9dbc-5d08cc14ac41\n40856cd6-0d25-4006-991d-5ea0f5671e2f\n5461400f-628b-4dd9-9005-9b8d7d3d225d\ne7750b9d-1fea-41ab-993f-fe0e3e56335d\n310243c3-d40f-4a8f-860e-29008fcb339b\nf745da9c-5479-4572-ae54-86c94750c086\nb2d75c73-95b7-4fc4-8488-0b7b41c98ff8\n5c0b6d90-4626-4039-bfff-9877a3b655a8\ndee94a95-09ee-4062-9aac-41ab1c0c8bd8\n6e025013-9063-48a8-8be1-0df1adffbf7b\nf5485a98-152e-4abf-b760-af04325d9b54\n4cbcbdd5-05cf-460f-897f-b7fad740fee0\na6e7c538-1a89-4da6-bff2-4c6b0005b99e\n40b992eb-8c3a-40a9-84e9-eb2d17e0a6ea\na78ec931-1792-4011-bc44-d5adf418a2f2\n18367f57-e083-4aed-a801-d6d33fb15e35\n0f2e8fc3-f22e-45f1-9653-9bf33ba95e43\n71ea5fd1-fec2-4834-acd4-b53cfe3b6bff\na9576d58-9d1a-46db-a95c-606fb4d0bed9\nab9cefb4-95d0-4b24-8970-0f38a20b6ddd\n36605084-fc52-470c-bbad-45e15cccca30\ne06d2b76-3499-4d33-9aa9-6489e227f758\nfc05f006-1c84-4eba-bce6-0a0bd083d66d\n870dc40a-180e-4003-bca9-3eed01516f51\naa8f3764-a32b-483a-b74f-44fd5a8d4021\n6e1ba510-19f1-4ab4-b3e4-564b22005118\n9aa99734-eab6-4aac-9c32-be0de014043e\n9ddcfbed-dfc1-44cc-b125-74e3811bf140\n3f4bae68-b248-4e1f-ac7c-ba7317d96199\nefb82d60-f7a7-44b2-870a-2be67311ed22\ne9582fd9-1164-4d74-8aa1-db0cad88431d\n68bba828-d424-4931-97db-51fed9a91656\n96d5dbc3-3fc3-4071-902b-4618f93876f5\n45de6484-b955-4649-9896-df9dfbb0fafd\nfe1334b1-20d8-4784-856e-2b512a777e28\nf8238c5e-7495-460f-8197-d3d54acad30c\n29a50059-896e-467e-bf8e-89d28c76decc\n055dc3ac-827f-4e54-8c1e-df7a70f64ec3\n8547172f-83b4-48c2-87e2-ca2400f7c084\na2cc159a-24a4-4d21-97cf-039aea3e10a9\nbd07352c-145b-4d6f-9564-af115c9918d5\n5dbf98b0-f725-4e72-8fd4-14f7fcf447f7\ne43bec13-51f5-414c-a705-eb2114df7b45\n8b69fb18-87ff-4282-9c5a-10e51f1aa64c\naa7a61df-f267-47de-9a0c-b5558c7b07f3\n36e80e34-bfa7-4299-9a19-a01a2bae3d94\na1720edf-8ae3-4b1f-b078-2b8e7a4bab30\n0067d043-9b0b-46e0-86b7-a7c127aa114a\n7ad52c05-c820-4b70-a56d-71c0e27d0a01\n563dfd7c-68bd-4dcd-9f9f-6a0507803bd2\nb2c40c4c-173b-4dd3-93e8-839a6239af1e\n6d524996-9a45-4b12-9fd8-fd0c56cdded8\nb04762ab-5367-4330-a3ea-926319af775b\n7bdc3682-b3e6-4e82-a47c-1c15bbbb15aa\n9a2b1a3b-5987-47a4-94fc-548a59f8690a\nbebdec8d-c4b7-4b32-95f3-3eacad209bd6\n4627e7cb-93a5-497c-8079-0c6ef99dfdb4\n19d9d034-7920-419e-8b3b-b69e353d87c1\na859863f-7905-4afa-8c6c-03eb5695d212\ndbed9a52-e6ec-4ebf-bf50-4171edfce001\n6488647b-db77-4fd0-8e85-b207db9096ef\na6e87868-2b92-4f71-be23-be7d59ce5fac\n18dcd4bd-2a45-419a-9042-9e262a56f71a\n68080b2a-2710-4e91-9a66-b875c0d33cdb\n1ddf6bee-850b-416f-b71b-bdaaea959a4c\nbba3fd23-9cba-43b7-a853-b252bcfa3f88\n75b7bbe7-444e-494a-bcc3-54ff19c70c4b\n00af79ff-56d9-4920-acdc-3f7bbd44b203\n070605c8-ed7c-496e-a290-52dce7b96cad\na293e300-e947-4000-9b66-3ef70c39c825\nb46cf56f-8611-4c65-b986-fb3ead7da915\n148ce77a-e35a-488d-9a50-6e97ab724c8a\n56000b64-aa9d-48f4-b03f-c4f253c7e72e\nb7928569-2ec0-49a2-bbf1-f5b6f116852b\n9bf500f8-a50a-476c-ac72-a97393453875\n47cb90cb-52ca-41a3-9f2d-5cf5e5ae9be2\ne97ecfcf-0bcf-46f7-9414-e402529c2024\n3679b10f-618b-4002-a45b-3f08edac04d6\nabf57985-bb2b-43d0-b907-1625d4acaa1b\n9158daf0-b1aa-4db0-80c4-5a1fad9b082d\n14c308e6-2a48-427b-ac20-3bde82df0505\nb9c7062f-ffba-4f7f-9a15-d97a32754d5e\na1d72e47-5ee4-4007-98da-9de6a44f9869\n24183277-c4b7-43e9-b565-f1816d7f007b\n651f5fea-d47e-49b7-8d7a-647894670d30\nc8cd46c4-c6ab-4a82-b87c-90d3c1b283ed\n39108460-a978-4c7f-8231-af3aa4667c8c\ne8a99c18-a521-4395-bad4-09f443e2011e\n10442168-0e23-4720-9bda-7ef553f84ab6\nda198973-2ab0-4ecd-954f-ce8df95f1424\nb2f224d3-72b4-4af0-94b0-bc738c51ef77\n4059dc97-6d83-4af7-946b-58a9211d8378\n14f7d1fa-e80f-4fe7-b145-27b9191263da\n301834e4-0f30-4d92-a467-c94d06ff0919\n86b53fe9-087c-465f-a9a9-b6cdfab191b9\nb02cc5c3-79ec-48b4-af15-91cbb78f5ba0\n68c4c57e-5893-4006-aa93-99034ec74cb3\n6ee37873-a174-4298-aa6a-f118fcd3f3ae\n046670d9-11b8-4dc0-8851-1faa8994b492\ne93cc95d-9f89-4299-91e1-5642b98fea63\n6add4a70-1a37-4ce9-977f-b22b3288ed6a\nced54622-666a-49df-bad1-1ed2f74d4523\n99e7a6e4-5db6-436c-96cb-cdeb9098a67f\n32034495-8808-40f8-b36d-ae14ad97b483\nd3821838-b379-4873-9414-de9b1e494e39\ndc24e4a3-3d14-4f7e-8678-1cbd224d77e9\n91f4731a-d754-46e5-a3c7-07d8d38721fc\nfd0c8fd7-454e-4c6a-be6c-ec23f1b8e125\na106fd39-13a1-44f3-b153-0cc5de0d7db9\n32bd2e31-52cc-4d7e-8c9d-8c07b6e142be\n48354c58-280a-4497-b413-46ab0b44d039\n85cea35c-8ea7-4a38-8277-4b5c13938e0c\nceaff17f-7abf-4dbb-bbbf-210124ae7b2f\nb4c5f425-8263-40f1-b850-02d6746c58d8\n10ec83bd-9ee1-43ff-acbf-b16efe2ed12c\n01e74626-e006-4684-bc17-265897c3a438\n1cdb722e-0072-4409-8525-2cce219e8006\n95c90876-60f5-4cd3-8e8b-91bf498fb1e7\n03e862fc-0681-4568-9916-911306b8f200\n2e10c09b-5ba1-445f-911f-b6eefb935990\na69e19af-9308-4b7e-9ebb-a7a2d7d1c25b\nfac4d540-7730-409a-bb41-e65247a9e7c3\n4dc37b99-23b4-46d3-8bad-34700c9676e7\n36e31178-3214-43ba-b419-8ddfffa450d7\n6032702b-94bd-498b-b416-0c5f8c44ab87\nd60487a7-80fc-4012-b854-d0e2346d1b24\n7a39b8b9-15ff-4d3f-ab0c-02cafa2176fc\nfd777cab-f477-44ac-be28-81f5f9a6e663\n394136c6-9bb1-42d4-bdf6-e7457f381c24\n3677f7fc-5078-456e-b1b4-b1e113b1f749\n08ca7cb6-ac48-4e82-ae32-4b4f83cecc25\ndbe81dae-3cc7-40ab-9801-8b7410d20257\ndac78f5c-f227-4a8b-86e3-1b7cd92d39b2\n82c4e9fc-5a2e-48bd-979f-4b7d477b4545\nb1734554-38b5-4a12-83f3-4a04b38ba1c2\n047bcb53-6b37-46d0-99b2-b9c2009a578d\n689559c8-a5bc-4880-a7f6-5f413b8e5fd7\n21afbd50-c8ae-446a-9bbc-8cbd1ca5297f\n56628dc4-5837-4bc6-bf7f-f60b5a1489ab\nf08a21ae-a276-4830-a4f5-2849721de968\n99213067-21a0-40e2-b4a9-8cbc24162d16\nd550966a-9c8d-4315-ba49-a65f7a89f2b1\n05e01cdb-e8d8-4ef2-b3d9-dd83bed7dc09\n1e900972-b85c-48d4-82ef-3a1133b43702\n3169afba-0699-49f9-bd03-a4907a797b97\n2dd9da30-9e72-49eb-846a-dd791dc8d1dd\nb867c8c7-9bab-4a9d-828a-e721a942ade2\ne6885391-676d-46c0-8a04-61ced0c95b22\neeffa38e-278f-4826-9a03-e4ced0b62c38\n9de37076-c374-48d5-be34-835b2faeca3a\naec72004-c206-4f06-a88e-d9f9015c9ad1\n41560cec-d3a6-4a75-9c73-5823a83c6eff\ndc201cd0-f768-4dd3-831b-2759963cc5f1\n611d79f4-1fc0-45b4-b64b-5538ebeef6ea\nf50be030-cd87-46c0-b9b1-6a4712b6c03e\n073b44a2-4952-4269-bccc-e7d65d2371cf\ndcf074bd-546a-453f-972a-6774fa601de5\nfe6f5621-388c-4f8d-8242-a53ad672d289\n5501f0f8-74c7-45e4-97c4-b964be8a0c7c\n23098043-edf1-4441-82d6-040611d95752\n8559d0ae-250e-4e82-a3ef-5e7c9906339a\n54828047-6ede-4d77-82c6-3439a3f58c00\ne81b14b6-1101-43f3-93a7-4b4a8fa9aff2\n545cd94f-9b6f-4211-ad0b-9c0cf057c3b6\nc5ad864c-385d-496e-b8bb-88043b9560dd\ndd5ac2c5-0075-41a1-9ed9-3a8be5f73694\n1439017b-b1b6-4df0-93ca-2f5829fdc7fc\n11d426b4-1074-4470-b42d-8c341a08be43\nc08f249c-86b2-4712-b1f7-db481c1435c0\n12e2e972-31c6-46bb-b363-67844d3f5e53\nefee8dc4-4581-456b-beea-bc1b889d6a83\n5ea2d95f-71a5-4537-bed8-7523bee91cba\n670f2e5a-64c7-48c1-8cc8-6f2853427218\n9063fefc-be8c-49fb-a886-60a8050c53bf\n90f7b593-82bd-4769-9bee-9984e32c57b6\n18401fca-991d-42c8-9521-f777dcce8599\na4259981-5ecd-42d1-af3d-88e8dfb424a5\nde2b230f-b1e2-4c2c-abae-626fe449d412\na1ceb85c-873f-4d24-8b0e-675baded798e\nfbaef09c-bcb3-4e69-8850-8931a12eef94\n3bd8f403-9126-4136-8809-2e434b2fa1d2\nd234b099-0279-486b-8fd9-fa49f102a80c\n53cc2fdf-1872-4cce-a464-22b5119651f9\n0eac514c-280b-40b6-8ad1-318fd84764e0\n76a41c06-913a-4ea6-8e0f-a0cdedca5509\ncae45d32-8cbf-477d-9d49-718efb8bd060\n8b9938fa-109a-4442-9226-ca56242ec47e\n0d5e1b07-3918-4d07-8c39-0a040a280275\nf45c1943-10b7-43b1-80f2-2ac118d554a9\n47727bfc-dc04-4c8c-afcd-35160ab8f835\nc8923ee4-7b21-4f25-8e6a-293868bb37c2\nb8c658b5-1964-470f-82ee-36bf90570c7e\n919ec3ed-829f-41cd-89ab-99d79915b391\n39470dcb-e55e-401c-8d6c-06d3490f4c69\ne80ee6f5-548f-4e61-bf9d-9b96aedc6015\n31f88a8b-b864-4ce2-862b-6b4d61dbb95d\nde344cd4-d203-4ba2-b617-bc4f865c786a\n625ed384-94b6-4cbd-bd3c-89fd70a97a0e\n7c526c5c-8984-4876-89e9-fcbc6645fa1f\n8d88b8d2-9fe0-497d-be56-41f97acd3158\nd92d4a16-b557-4037-84eb-e585fdf8443e\n1e988518-6b4a-4cd7-8e42-2bca1c27f907\n004d74ba-e75f-44c2-b155-acf7761db482\n161c515b-6e11-4f3e-b508-1977931f2287\n705e866c-47ae-49ec-aded-786c05e29bb8\ndf377ebd-7cb0-4930-947c-2db8b3084211\n08f184ab-8fd4-4f25-82f4-546bb33247ed\n43d712bf-4b7f-4914-b882-a8139e04d939\n34ad5868-c8f6-423c-8d38-da8be3895da5\n082415cc-c8d5-446a-93d3-cc4071eb5dfd\n4a164e73-a8ab-41ea-b647-9376e28a0327\ne64df134-97e1-44f3-a970-02990377518e\n79b32f53-8af4-4416-bee1-50a4534fa21a\nfce74f3d-1d4a-4b11-bc18-b82db326933f\nbba450ff-d896-4f88-9a72-c87bcd042418\n7028d7db-3028-4a8b-aaac-8829a3939a89\n8cadc5f7-25f3-4e10-a3d5-bfe46e9f07dd\ne2fc45bc-1647-4f7c-8dc6-b91acd8d950d\n4c65e0d8-863a-4d3b-8718-d2180ed7ba7f\n25d4ce02-3d12-4cb9-b031-08b82e274c3b\n8cade529-04c3-46a3-8f32-cfb425f30674\ne92679d4-480f-4d92-9d85-7497d8d24c16\n277ab1f2-0874-4b1e-bda4-1719dc63ee60\n00927fb5-d5e1-45a6-b5c9-c80ace861153\n3ce63af0-d5fb-4cf5-974a-69d93f18b9d9\n6ed77f55-7ff3-4ac1-9be7-77b492c7d20c\nca2b97c9-30dd-48f7-8c5e-c39a315a5673\nffa10442-54c8-4156-b442-ac74246c598a\ne939bfae-564c-4e8f-b027-3f5b8965a38b\nb1879a9a-b867-4adc-b5b6-82c454393c6d\n6d0f7fe8-725e-419f-93da-2491a6f461ee\n986fef99-ea58-49c5-868c-b43c87cf5dcf\n4c1286b2-b7b3-4f2e-9e39-d1234d3d919b\ne0c74675-da3e-483f-bfb1-87107105ce83\n2ec3bb59-f7a7-4eb4-bcc0-7f8149972bf5\n82bf9e08-1e00-4cf9-80af-78c4957fb793\n44f926f9-6ab1-46c8-9941-0b7f16419360\n8e5fd3ec-91b6-4357-a4e1-d84ef41fdeaf\n0a7a068f-018f-4cdb-987e-ccc97b2a14be\n6158a319-a973-4750-a597-ff715d3aa920\nf2fc13e6-2d73-408d-8637-705a4923eb10\nd1d47974-bbc8-4b23-8b72-c645680e50ff\n28f3db26-8149-4a7d-a408-8f7b430a9b7b\n39a04a90-ae7b-415b-b9b5-ac17dee93a89\n745b5318-2e8b-4cc4-9b70-3bcb1427876b\nc3a480e8-a4bb-49f8-bb95-06c4416b1cec\n11ad8810-46b8-4859-b4c5-112b51d90d16\n11b3c327-4f78-4e6c-8f5e-c9e3280d9c90\n95ac8be4-b81e-467b-a82b-6cc17eec4aa3\n8e86df40-3818-4c58-b736-a7f069c885cc\n43e219e4-4e46-4553-937d-2044b38fd02f\n1ff38352-19ba-4178-8e58-09495aaff0e1\nf2e4d7c9-bd3e-465a-98f5-f1a2c943ac8c\nf7f5d507-629b-45a8-aaca-c31058401636\ne914bf27-959c-4792-a68b-7c566f18ed92\n03dfb178-cad0-4553-9c66-eae30a0e413f\n31520323-d26e-4a57-bd57-76ee9f800399\nee5898de-e8ec-4aca-aea9-7998e3dc8956\n09d719ef-379f-4505-80a7-df4743e4eaca\n0aa4a640-cba0-4b64-bd49-fc076f6a19d1\n4816f33b-f09b-4ef1-80dd-729a789aefa1\n7c4d0d50-ce50-412f-a32e-685013821326\n90000fdd-612c-480c-805a-f618843f7d65\nf674b6f2-ac9e-49a4-9838-aa718443b59a\n4f6ef1af-e83d-4746-91ab-5159b116856b\n84da8065-e3f0-4330-8a59-03173d48466c\n681ec366-65f5-4c1f-81dc-547a7f52c33a\ne8e2af2a-583a-4687-a5df-aaf0ed55f2ae\nf35302de-ffac-43c6-b272-70698c0637a1\n4fd335cf-abfc-4cf9-96ed-aa22fa0a3b39\n793112a3-b0fa-4cef-82c2-fc99a858bbd3\n9a3ae301-20cd-4628-967a-aaec7b2df8c3\n12736372-ed5c-46c0-8560-21db94b4fdb8\n62af4abe-26ba-49df-b554-a8a806239752\n269ebc09-14b2-44ba-8c33-a827ae555617\nb16502bf-f7ba-4498-a206-95bc1e01d4a8\n5eb7f93f-9015-4522-b9a2-c0e6d4c72da7\n77c94926-fbe7-45b8-a5b5-4b95f71e34ed\nf9103865-ac40-4e4f-b490-505bb054f9b9\n91cfb611-78c1-4d01-bf68-f707d76525f5\n07171145-0c65-4034-a087-0027d9f1ef7b\n9dd88af8-989c-46ff-94d1-cdde7da95775\n7fce7e6a-8707-4002-a503-d249a2ff81cd\nd80cc464-6901-4847-adfd-ab5b45e6a905\nb19509d5-8daf-4048-b1d9-ca191ef81890\n3879a553-076e-44cb-92d8-805789fb77ca\n6d863379-18c9-472f-8ca4-eda1e6378723\nba0e8bb0-3a79-4506-a70c-2f861dd017ac\n44729e3c-a225-4458-a0e6-e4e600072ed7\nd35f0315-2621-40dc-9842-147deea9ced9\nff17a5e1-0cd8-4ed5-a749-00db041b4add\n2d0a2bb9-efdf-4a94-87d8-75ebba39f07f\n643e1b86-7efe-4518-9244-251213dbcb3e\n77737e18-c0d3-4ad9-ae3a-8fe681658151\n120f2773-1ff3-4705-897f-0892b18d0205\ned470134-cd2d-41b3-8bb3-c58be14c5e46\n21da9ca6-f000-4cdd-9393-c3662111b361\n171d06e8-7c94-475b-94d7-9ddef372dbec\nf3c40353-c409-450d-9e15-94a35c3015d3\n243a78cf-d799-4c4f-befc-6d4f6dd1bd1c\ne27f49d8-225b-4dfa-bc51-e2dab39c9cd5\n191af319-9cd4-49aa-81d8-e841edf449f0\n25f77ecf-434d-4227-8037-aab95de5ad0d\n059b6cb5-794d-4f66-8a58-f3d854da2bc5\n3fc229ed-d30f-4729-83eb-13ce9075b86c\n40f8eae2-e79d-481b-b112-2a4a22d75f92\nf3ac5cb9-b981-40d5-a6d1-ff341e76ac97\nfec2f9bf-0140-4100-bbe1-a788d5e3bef1\n70331e35-a746-45eb-8a90-1c33e03d332d\nf37e9a2f-6364-49a3-8d27-ca57605a23f7\n0c9d467b-042d-463c-91a7-cd504035d87d\n1f0e8815-52aa-45a7-b924-0ca8ae2b7d81\nc097702e-c4d1-444a-9ed8-9e13d2b412ea\n39c7ac95-a9be-4c69-b3a4-15b7d80e4f67\n4b0ad56e-8e08-4488-86c9-44748554904d\n86462a99-6d48-412d-8282-cd8b491f8232\nebe6ec84-05ca-4911-9cf3-f105f77eccc4\ne20d394c-b040-4615-9812-f86bc7c165c1\n58b26e1b-080f-4abc-a92f-df6fb7ac2b68\n268f143c-2210-4794-91e0-a7cff4ea69bd\nd28d3b15-3f3d-4eb2-a86c-d05dc24c5c07\nd179435a-4156-41e9-bf21-b8f4b985ca6e\n297a01f5-5afc-4409-9f81-cd182b03b98d\n0c14ed81-de0a-4dc7-9282-3b9e1a3b5b34\n1397041c-d9bd-4dc9-9417-78df57043768\n1b88c482-6ff0-4b5e-ba89-8b81d3f099ae\nb9d095a3-c5dd-4e4a-909a-d4988ba045cb\nc95268b9-b319-4679-ae0a-cf8770ac6d65\nb51c07df-42dd-4cf9-9a13-e0a3497c1f3a\n1f52769b-1182-4cd6-96e7-b561478a357c\n03fef3f3-2712-4a0a-833b-e79d60772558\n703955f8-bff0-43a2-88b2-f321331894e0\n21aa3aad-48ca-4bfa-be56-e11810f09639\neaade6e5-231e-4eaf-950c-d489f80cad20\n8f33dce3-669c-4658-b26e-0fe734488a37\n2b7793d9-eccc-4ad5-94ef-0d84a4dd3ba0\n700f093a-d6c0-4653-b22d-2d52475a94b9\nf1471fe1-403b-4913-b053-d0ccf0e49d6f\neac7f60a-51dc-443d-ace0-0b68b7c8ed60\nbff4b375-a336-414d-8ed5-aa409c94b224\n1c53e934-bcca-4a39-abde-8c2848dce7b2\nb849ce38-08c6-4db7-9ef9-5790553e850f\nce5d9e54-ccb6-4039-ac5f-713d38a1a2a3\n2e7a03ea-8551-479c-ac20-2d283055d1f8\n4449eb8e-be7b-4aae-9770-a3be341e6f9d\naa345e1d-14b6-4541-a8bb-7544bd6e32af\n37901000-41ef-4d69-bc22-558e3c5bc7ad\n375ffe31-053a-4f44-a1d2-10e217df29d9\n5480c2a7-8dee-436d-aaf6-064c282c7303\nc603aa55-4eee-4862-a580-6aec4890c025\n9a2fd043-4d41-421c-b066-41db377a2834\n0a9c69a0-7bc2-4e52-81e3-72da2c8b0bb5\n2852e99e-1340-40e6-bf5d-5daaa616381d\ne8fb1387-6d63-4466-89bc-01d00dc8ebcc\nd006b7cf-b54f-4a9a-a47d-5a541d1ac7b4\n4946845f-d002-45be-b5a9-ea08a10a8f66\n73c20d3e-ad87-4ea4-b3de-3318f465459f\naac1de18-ed56-476e-927c-1efbc8d2e0c6\n72970b5f-4912-438a-9412-cd494bef1902\n211ee72a-22e9-4610-97f6-19ba361a8e76\n12e34a50-ef4b-49c4-94f5-2421bcd1006e\n12ab1d05-0113-417c-8fd0-da292f38d8c5\nc1cd04c5-9ea4-405c-8c0d-ab90f3e20298\n0977eef7-d86b-434d-b138-f95d592c8a71\nab701974-5821-42ae-b87e-e46c3dbaf756\n9255d7f8-1a12-44c0-a88b-56f948f684c6\n6de297af-0981-4a0f-9917-f8a4b0d8db90\n004a12be-e7b4-4707-a004-8a0b398bee77\n1d2235a3-6a14-4757-804f-64604d6fbacb\n7375fed7-86b8-4914-a9b0-353a78dd86af\n7f287549-0ec3-4af3-84a4-6bb87e1d9b16\n98b4d26c-57dc-4afa-a2ac-76ac795ea401\n201fa11e-644c-4924-b331-ff9da58d9f73\n8f07a786-e9a5-44b8-98e4-3a63cc69c105\n9bb9934e-a7da-41de-92e5-0289ef261dd2\n0ef5212e-9419-43fa-948c-6119858cadce\ncd4fa3cb-646d-4116-bc48-1cec4053cfcd\n36afbc2e-5a97-4882-aa1a-ab95e767d86b\nc16bf159-a925-4ded-b0a4-d97c199cdad8\necab91aa-2d3a-47f8-9249-3141078d2b24\n6a23c631-81bd-48ef-8336-b3c4d9a0f1e6\n614ee7de-40ad-4e0f-a9e9-1674277fad3e\n66c099ee-3e81-4387-91dc-f689feec3b3e\nb45c8af4-d8d8-4400-93b7-c5951ed9e361\n1527868e-fb64-44fa-83f7-de897efcdac5\n0176eb5e-2b47-4157-a65a-f60c9f59743c\na12559d6-e03c-4c9f-8471-b79791503587\n44664074-fae5-48d5-9174-e4b03436d155\n5d766c2d-fc38-4179-84c5-ee001fae0189\nd1f02d21-6a64-4f94-a214-8b238be230dd\n270209b5-c72a-48de-8b05-53bf761c13df\nab2bd957-e7d5-4d21-9dd9-d1e0f3272d43\na0c2ec4f-b9fd-4112-a6bc-9b0571e1f82c\n55efad8a-3cc7-4b33-8c9c-cde399c71a08\nb904ac7c-2414-4380-a395-33c9b7d6cfee\n58fec20b-3979-496b-a031-79222a2a72e5\n90a3893a-0b93-4843-8076-89b0f6e1a568\n61c84894-1b8b-4d92-a758-2fba6fc4cafe\nb928cffb-545a-4592-80f7-4bc1134dbd7e\n3e234b4b-ac09-42b0-90e0-6e9e95d4fdd8\n302bc21c-bf58-4b76-9a93-1e01340ed5ef\nbd7f0bf1-be2a-4959-81ec-37cf8d0139dc\n9d77feb9-5a84-4068-9dfb-669d3fc0d096\n007f4a78-c459-4b75-954d-57e16842cb24\n4782dee9-304c-456f-ac28-0080fd6a917b\n5622341a-fd84-4be0-9a81-3cc8c881d371\n96cda8aa-0c34-4da6-87e8-3f11db4fb70e\nd3c034a2-a424-4721-9cd6-9dca57677a4e\n09f17a38-ce72-4927-9060-a8905f4a77cf\nc94d3968-f137-4a4c-a9ca-ca1e03c8440f\n65ed045d-b0d7-4393-8a7c-7844dd9d83d9\n2a1611cf-04ac-4192-abcc-df79d642f892\n5e686565-6695-4717-aaa0-49f37c8b9e80\n7941a53f-7b05-4535-bada-b61eda78fd8d\na0f8e86e-b5ea-4f73-a4dd-7738d0ebee90\n131de077-b7a1-4287-814b-84f0db0182ec\n61e7e47f-6d16-4c99-9a04-da3a7045f990\nabed0677-7586-407f-bd79-08ce40b01cc7\nde8269c3-9bdf-4871-9a47-cdc14adcdc18\n8c6720e4-19ce-4da4-a79d-5a70ae2ce7fe\n3ae661b3-af83-4337-9672-f6a6fe22bc22\n50ef8cba-29d6-400d-a172-ec2e0b176c80\n242d43a2-0857-49ab-a741-5239f229ecfc\n4355d633-4be5-46a5-9ca1-5f700ef90cab\n907bb224-36b6-4b2f-b306-2b4c95bc2a9a\n83cc11f7-26ad-4180-82f2-96dc089f1060\n48e36eac-243e-47e8-9d41-471d842c0ad2\n7b59da83-45c7-400c-bb0c-753cc1fb8609\nf1102226-c11e-4d9b-a28e-80a0e4efc7b6\ne83ceebe-ef7c-47e4-899b-dbee457dce15\nf5c49daa-eda2-422d-8236-bedf49cde8d0\nd9eeaddf-5cd5-4a18-a529-51c924ee52e7\n219c447b-4cc8-4909-b6b8-a652fd48f5d1\n0d518b94-9f95-4219-adc8-6399ddcf8b19\n5a45cb54-4862-49fe-b3c2-76c3625dbc3f\n2da3018c-4637-4a64-a289-1c7f5a7c96e5\n307a8a63-df37-449d-a69c-0d3525c1d3cf\nb64c6139-60d4-4242-90f7-8aa9778e7d9e\nb91fbea0-1bd5-46ca-b3ed-2d2d2da5fc66\neeef49a0-bea5-4025-8c76-cae7d380e0ce\n7a59bbe2-11a5-418e-94d9-27a7fcb96bc0\n4708e782-6cab-407b-9d86-9d9290d5b2e2\n133c47e9-dddf-4613-bdc8-401906cccc33\n38c43f06-9b83-4296-a76a-02de335bf60c\na9d9f383-d517-40b7-be08-0ec470e2a867\nfc587686-e302-4d49-97b7-6ee8f9a2871d\ndaa94d75-a33a-4b67-b2d6-1d2b97828044\nad9b968a-a6e8-4ed7-99b9-65b02562bff8\ndc483377-9d05-4397-965d-573a8aa28554\n06591d68-a526-44f3-afe8-b8ed83f3cc3b\n6f0a8752-f309-4508-a9f0-e198768426cb\nfa8f287b-70d1-44b0-9542-46af7c9869bb\nb6add9bc-f1cd-457b-8fef-3fb7b5a92c7c\n3cc53293-5032-4d58-b2e1-b96fd14f9f4a\n61dda18d-c5cb-46ab-a77a-2b5657e40986\nc4a98ad2-c265-475f-87f6-be06b7cee9f6\n867e8d3d-d37d-41b6-973e-3cad21d16882\n600ef8b8-2bdf-412d-b966-a7f5441d4541\n3cc2fb0e-7212-4bc3-9c64-e77ea8016e46\na65a1c87-539b-4429-9a5f-fb116946f2c1\n6f13bf78-6d18-4718-bd60-2c3d0c6881cb\n7494be55-98ef-4e34-8b90-e54e138ad5f1\nd6431f54-9984-435f-868d-bb819696c3dc\ne031156b-ab8d-474c-8135-a3e8a8a19342\n5209f381-4eed-4ecf-a465-e3778ba871a8\n350326a0-f5cf-40b2-b273-9ce8ae42d315\n8f308001-775e-48ed-97ff-70e37a24b3e8\nfffc2b01-3001-4a31-8b0b-7fda23e2bbcf\n60be8603-0cb8-4b8d-babc-f4e71ef10a70\nb0a669bd-5539-4bd9-bc44-f13501b2fe3e\n1432f58c-5de9-418e-a8d0-93c0277ef15a\na4df76eb-8017-48c3-881d-d419e7cab22e\n16c7be80-b127-4c6a-8b1a-3eab4a272cc6\nb415b2fa-af60-40d3-8c40-9c5f49554f42\n8fed4466-9c3f-4a80-9af7-ae6b995620c0\nb23ba84d-f16e-4cfe-ac8b-2f2d3b016761\nc5b2eba1-c2c7-4fe7-8732-be54522b664c\n88f5c34a-eafd-4358-9dc1-f1e8b1d34b3e\n32d29de5-4711-4909-9600-a85c836de219\n28980382-c36e-4922-a51d-389dfad55588\nf7244eff-cfcb-40ec-a66f-5043521d02eb\nf2efa784-7309-438f-9212-c668097db17c\nd53bae1c-38f0-4b4a-b686-cc66d45b14a0\n8a31fb2c-f4c9-455e-bb16-73e47930aee6\n66ced865-4f50-404a-baa8-b5e0f8cd3ebc\n5cde34f3-d97d-4d6b-b0e1-db1051c99024\ndf9e0098-edac-4a76-8c7f-1560a4b9465a\n2b4e992d-8212-433d-82ce-62e7ff7ada8b\n416131d5-4e82-4e56-841d-67072aa52137\n6179020a-81a1-4cc9-a8b0-1fbca3bd1b17\nef048e6e-9a57-4f37-b015-2f3020815132\n32a66b97-00d0-4218-8edd-7d6e5902e208\ncf7efc53-4efa-47fa-ae8d-0aac475d1b06\n81697377-6295-4d95-bba4-0e08c5cd63fc\ne51e579c-1f82-4184-b609-dd9058b220ba\n6b8b9448-ef46-48e6-9bad-a3bde5af897f\n07f7e544-9c50-4a5d-b7d8-385181e15682\ndf456d55-debd-40c4-87d6-e0b3fc20e8fb\n2401fd37-a39a-466c-8ccb-01421c70ceee\na70be684-4eaa-43a2-bc5d-228b2bdae4f5\nbe05b8da-a824-4e8d-84c8-7636f7335ae7\n96bb216e-d70e-4873-a1ed-ba6f44095bd3\ncd1071e1-6738-4b34-a3e4-6cbcb4c770a3\n79cb3b51-10e7-4b3c-96f3-538374d6e78c\n9568bfc9-ebcc-4462-a696-f5b2deb909c8\nbaa29db5-31d3-4bd1-9866-0282b7721b2b\nd9d6b1af-0ceb-4ae1-a6ba-0a3d2eb8388c\nb1bf4395-2124-4c8c-9cca-700b6f16b50d\nd49f8c80-73a1-42a6-a741-6bc07493307a\n264a5c11-81a1-4256-9286-d498f5e11e77\n322b4e2f-720e-4f3e-9aab-e2041c2237f8\nd35b499f-c505-4cd6-8c33-1a3e44f17f1c\n2931bf55-0dfd-4fcf-b278-7f5dc4fcd1ca\n0f519242-f6cf-464d-a358-bac6bf512aac\n69fc0777-d9a9-44ac-b13d-fed9d0902496\nb2a370ee-01ff-4e92-a02e-ded8b8fd1b50\naced876c-474f-4da2-81b1-84e3245b11f3\n1b4f521d-e89a-4d67-98bf-951efdda94b2\n79a82ce1-49c3-4c9c-8c9a-c2026d5bb1be\n32910f08-1586-4bd1-b4be-076c319d13e0\n77da1c8b-d5f6-4786-a591-9a3c6e68e1a1\na66896d7-ebdc-444f-8b98-bac4ec80f281\n00e52264-f338-47a1-9e19-be8ddef376d5\nc2091d37-a247-42ce-a351-de2b8c0a7f03\n395c50b3-8027-4c68-b8d2-96796cd20ea9\nb94b5c52-f591-4e7f-84a5-17bceec43e57\ne6047379-3b59-44d9-9ed7-37abcbc09ad4\n398557c5-ab9a-45df-93f7-27805b93f90f\n4e3e61f9-4c8c-413c-86c2-119329e44963\n582debbc-6467-4894-9554-31bbf58e1de6\na0e577cb-d857-453b-b816-6ce98e729d87\n2852931d-404f-45db-94df-d4cce2884ec4\n665a5cdd-dc2c-4010-886b-389b644600fb\na5395983-d2ae-402e-aeb4-193cd9672b0b\nefd59ccf-8d57-4b98-aa6a-c1d1bfc361ed\n7541223b-776f-402f-a785-11c9d2d6bfd9\nb38d3842-4f10-4087-96e0-3c353ed7b9f7\n24875ad5-b0b1-4ab7-99e3-547619d678a3\n1eac21b8-1001-4af2-9198-5c3943cbee4f\nf817ab34-fafd-4817-9aac-9d404e269bb9\nc239d565-b200-45f6-a3f5-a7466b6d2b8f\ncf57a8d0-8587-4478-a57f-c05b3d77734a\n2127d907-8cb2-4d64-ba1e-6eb571e54433\ne9658e05-0cd3-46c2-a2f5-23091a51204c\n04607264-7406-430c-b40f-a4f9348f1db3\n9dbf601f-11ac-4aec-bbf1-4b663ce4a27c\n8eaeb565-3951-480e-a10a-00cbbc2eb913\n7255cb4a-082f-4baa-ab68-816795a6bf19\ncf0e7369-508f-4660-a7e4-7a35c8475910\n7f1d2986-a826-46c8-8042-7652010533d4\ne2130276-655f-4475-90cd-728815b5c6e0\n8a066d4c-481c-4686-8825-55ee6682d1b9\nb6967c64-99f6-42dc-829c-3f60caff3e33\n7afed331-aec3-4e03-9538-954c440c800c\na17d4faf-f874-4af5-92a5-4c30481b8517\n7f5f712b-82a8-4784-b52d-6d5b9b4953f1\ne2acd6bd-d315-4a27-83a8-36c514614549\na61515a7-d0cb-43aa-a2ce-31462d84aa75\nd3ee28ca-7268-485d-8cb0-fa6a6f67afe3\n68900145-36c4-4b42-8046-80257c512002\nfc487154-296f-4770-a647-2166a9708f82\ne0f24019-49b4-4b68-be91-13a2b42e4acd\n20a8ddde-f1e1-4420-aebc-33a1bd28d4c9\nb5e25da0-9524-4c7f-a0be-93a25275d170\nb2058c67-2449-4ddb-b925-bf66950e5c14\n53cd3156-7aba-4834-98e7-1e64d14ecd26\n3a794ef1-15a3-41f0-bf56-16db4ec836c8\nc4d0d86d-cda2-4308-a51a-dd50b955d3a5\n80c5fa0b-7834-443a-872c-cb16980111db\nbbcf3720-79dd-4118-9a87-991f98094984\ncea1b953-eb94-48b9-ba41-6c2de7d59874\n3fd8694b-6a90-429a-ba62-04565473a78f\n80f92f6e-bf04-4f17-91e5-083e12c7d3bb\n81daf28c-b560-4485-9459-06cd69c6860e\n737c44d9-9f5e-4c7e-96fe-9d73890306d4\n2556b5c4-4242-4861-beb4-f98692a7f12e\n63eedd8b-04f4-4c7e-a3d5-baa0cd9a3afe\n338a98d5-8f4c-4386-a93f-b45b2e5561dd\n0a9cf59a-3c93-4887-9320-b58fbe11ce95\nb87c4d0c-73c8-4abc-94f6-ce1e91da18a9\n967773fa-ae78-470a-b786-53df5b870d22\n2819c568-8ff0-4694-bb71-1b398cb43767\n4fa5b6e6-8ce4-45cf-9a16-51c34ab6e96a\n7fa98815-8a31-4d88-a06e-bfe2c83c012a\n07b8d233-17a8-4888-82aa-afafcad7d7ed\n9863c4ce-b7fd-41e3-9dde-d940a292a61c\n870d40ab-5ea4-49ca-8bfd-84ccbe5b1b99\n431b9839-b87c-44cd-92eb-7345c2b93164\n6dee6dd8-2395-4da4-94e3-849c6b3a99e9\n6c5a0a2a-dfa5-4111-a66a-e0ccf569e96f\nc61bf1e4-9ebe-4d29-b255-f5e24587dbee\n1b75d369-2aaf-4c78-b1e5-7137f760dff9\n5ed7644f-6270-4a83-a290-35ceff625f3e\na00d8169-392b-46d7-b703-72ea0854fb8f\nae4b03b1-1881-4e81-8d3e-66f9811b8161\n83a5e2da-5488-41d2-805a-71eeeb229048\n6d9b657a-5781-425a-8507-fb528de3e784\n25887909-f390-44be-b521-032923c551dc\n34bf7c38-7734-4b3e-a36d-1c35c1ab2bf4\n0fbdb302-f144-4b29-9e5f-5edcd588c45c\n364a4c98-61ff-4135-a41d-14457b0331e5\ncc41f81f-a2c2-4b88-94af-81759c47c9a5\n0ea593d5-0537-47a0-81b4-0b8bbc88c10a\nf89c4511-c5fb-4d77-9422-dd638d740ea9\n64ed0a08-6a0a-451c-80a7-b76a1bbfba88\n6ff9633d-2e9d-44f2-b286-3762e1a250a0\ndd33dc40-1686-4b7f-924d-2004fefe5931\naa963fb9-79a7-47a5-8774-174ae2643a93\nd19b2ee4-5d77-4175-a68d-590afbe8442f\nbe509532-9c45-45a2-a1c0-564aa8e4c46b\n5e971d64-7ba4-4e5c-aeba-c15f904c5c46\nde4fbd21-fa5e-4071-972a-cac7e7a4be82\ncdf52735-031c-4f58-9f3d-2078c65b7b8c\nd70ca8a3-df2e-477f-92a7-056542cb0d5e\ncb8e5fba-b923-4f63-ab92-87dab382ca44\ne0636978-a698-4c09-b2d8-4b2f2570f498\n93c55142-f395-482d-b00a-e75a32736589\nee62448f-6a06-4821-bd6e-d5b833ffa1df\nd4d25255-7f01-4a8b-9e0b-1f1ab2e5d102\n84132703-36e0-42e7-9407-a98b17ffde69\n4efdd18e-59e3-4e03-a4a0-a9a6dbb3065e\nbde658d3-7e4c-4832-aff8-0200ad27dd92\n4ddd37b1-6e2b-489e-b05b-e72c8d441e9b\na91486ff-253e-4b6b-beb3-e67419b724cf\nd0b8314f-3b15-45d3-897d-33406ad32037\n3a9961c3-6118-4948-85d1-d6479d747f91\n5868511c-7177-46ed-91cd-412e73f2da7a\n19e7270b-9db5-4ae7-ba84-9bb8d1ce8a48\n805c9d0b-4109-4afb-9294-0daa2e0e76ae\ne6e4309a-05e3-489b-95c6-6500af183a09\nc7edef99-0435-471a-8ddd-cf1e7b95dc7b\n90ef1bb5-9f28-475e-b44e-c54160a2eb47\n10000f05-1223-4e8f-a802-a513d829fc89\n7a4ba75f-275a-4dfa-97bd-35c55917a95e\n1864c362-4ca8-486e-85c4-f259bc797a22\ne29bfd61-3f99-449a-9337-71b7d5c2e46f\n2e302879-a296-4ad0-960f-a9688c1369e1\n80bbf640-5b10-43c4-a7b1-35a6fda9c5c3\n378bfb4e-3f6f-4797-a380-55f1fe458196\n64f73f4b-4aa0-4e98-9a5a-41ef18fe29d2\n9aea24b0-4422-45a8-b316-c430d78b4473\na1e548ae-f7f2-44b8-91e1-5b2eacf8769d\n00f6b698-8e52-48ee-91b3-a77170114af3\n773a4c8f-5ee4-45f8-a4df-e97e325bcca0\n6b2ca675-bf2e-48f2-9a72-6c0dee4c654d\n9b0352e1-9881-440c-8fee-feb9e1bf0b31\n61224fb1-b503-40b2-bab2-77ee47c1ad62\ncb3fba10-cd35-4395-95c2-46abe483a4be\n9dddd186-dcb6-4b5f-9ab5-96e39b0c3555\n413ac6f5-85c1-4feb-9133-02fbff39c31e\n695b1dbd-0831-43a2-b5e0-f7e73da88683\nc8a2746f-9749-4191-a7c6-cab698f7e74b\n7a0bb661-9296-4437-9da8-f87616ef815f\n61ca03bf-ccb4-401d-ba02-d9e61f42c885\nfce92eb9-ebfe-42ff-9dde-58c0a6ef1fa4\nf1ad49e9-ecf0-46ae-aac4-48beb0b20666\nde16a3d2-6cac-4a80-a5ac-880c4746e921\nbe8f0fd2-3fea-4ac0-bfe4-ab5a5f8de0a3\n8f28af0d-42b7-4db4-9eb1-be3dd7fe6f56\n9a62ee5a-c822-47e9-a437-2361a2b26018\n413cf8f7-baac-4d2f-9c99-a719e5e9c05d\naf82e09a-b15d-458f-a838-928839740f3e\n33560034-ffb2-498a-b2de-2a31590cc88d\n3263e688-e321-4671-a7a1-3964cc890bda\n0b793037-2ee7-4dce-8a28-d2729f93920c\nf10bd07d-f408-4cfc-b28c-361db388cb9a\nae7db3a2-4aea-4aab-897f-fbf68b5cc82e\n0f7b15f5-c033-4b7d-8462-b913ac053287\nbc39a557-0ca2-4461-bd72-80ae1d5e3106\n55322c40-77c9-4f7d-91e8-ef472e7597c6\n16cf10ea-16c7-4bec-b1fb-041e54f1a46d\n6fd82542-0933-4f36-b694-d8674b022a3c\ncf83e534-b379-46fd-886e-88b2ef94f930\n20a93af8-1451-4650-ada9-732852123b89\n8ffc0a63-71f1-426a-abc2-c71470a4d19f\n880eb0c4-a7d3-4354-b90c-91bebaf9cc93\nd6ce0a26-f3bb-432d-81aa-c8cb393382f0\n80528317-b092-4e95-b543-745b7da8b22f\nc5e5c49b-fa6b-4abc-942c-9f9a15f7280f\ne8da6e99-aa2c-40e2-917e-cf1c96b3299f\nec7fdf13-e023-4101-8dba-f5b7a010e62a\n9787b0f6-6f0f-4d8e-92dc-5d8a66ef1fda\n71808a10-1843-478e-9586-ed1954d728e0\n4b4ea532-559d-4e7a-b6fd-0cef13cccae8\nac8c6383-aa62-4af6-96b0-8affdb6bc2a9\nb522601e-5247-41bf-be18-1f092494c0a6\n218cf3b1-8d1a-454e-bd67-c120beeb2be4\nc9b0c21c-d5cb-4402-99cd-e26d114f7e39\n58446448-7c88-4a91-a5b4-52b134d614a3\n31aa0203-8192-4d6e-8520-6f2c853c3118\nc1eb8ef7-68da-4d81-87db-02a2e4e40c93\na0bf475b-e779-4957-8a3e-64ceee2d3f3a\n1c8b1cb5-ced4-4d78-9ee9-5625ed1347ce\n31a8774d-3d4e-4e95-8361-d69ae7d8e566\n39a54025-6344-4a2d-b57a-7aca2956d121\n05ff0ea0-829e-45d7-a7ad-47f88d9602c2\ndeeacb98-30c4-4612-9f7c-9d1055ef543e\n042f9df3-f142-4192-a0b5-ea4611176553\nf37f1df3-1d4f-40fb-ada1-a4d8454fc6b2\n8539a20a-0df2-4550-b43e-89e4396623ad\n598e509f-db37-4ff4-9728-4ed9b2f175e4\n1aeaf49d-f4f2-437d-8ee9-4637e0e53558\n0fd4b76f-d46e-4a22-8cdf-e8d4d7f34481\ne2fba8ec-1d01-4434-9ebb-3f3fe4346734\n947c43b9-918b-4f9b-ac0b-1cc58e07f266\n490d4112-73f2-4318-9f7f-7a34d593f8af\n5bcad3bb-0842-4c10-ba77-b9e1de52a38f\nc1fbbfe1-d584-4552-96de-aef03c4cfb68\naebee90f-0a4e-43d4-b79b-8a761f37b0c1\n36e95210-c13a-4085-bbfb-d0fa0c17c9c2\nc9fd6f99-f743-4306-b3de-80672060163f\nb541a24b-23df-465c-a6e1-5623841b841e\n5056aa8a-b59d-4800-9563-539078a33a62\n49f10f16-25fe-4756-b80d-05d74f60c815\n1716bb86-7e95-432e-ab18-12b8e69390c5\n9ae77136-6819-40c6-adc0-527c357921c7\n762a0bed-39fe-46b3-986b-b1b6324ddf40\n99587366-0411-4d86-97b1-57ea40a9da63\n1a8776d6-15c2-4bb1-aed5-32d918f97679\n7daf53ab-60c1-41d8-b8c4-60cacda87db5\ncd1c65bb-f110-4110-a96a-689956b8a08c\n67b1bbc5-7a27-44ca-8346-ed6d8e167920\n67eea3a5-e83b-4921-b6fc-8bf92b00a156\n37405424-15ec-41ee-848c-1ff9a4b2f4b6\ne231b088-31dc-4144-a6b4-cce995621a3a\n78010060-1365-4a10-a979-d53c1f0b101c\n42f19402-eedd-47eb-bc1c-7c8ac8f748bb\n7fb4a27b-9ca4-468a-98fe-13e68b844aae\nc8496bc0-f161-4118-b96a-a9d5d2c4ddb7\n054ae740-0309-443b-837e-88f28d13269b\n1e219c64-11e3-4e7e-849d-c61b1c91b339\ncb2ce6a2-2a37-4636-81d7-ae775fe8d5bd\n785efd66-e5ed-4123-b8c4-9089714d0aa2\n4a7e9c24-822a-4ad2-a64b-48837701d595\n015dff8b-ad42-4074-bc4b-f5bcb115151d\n1dcd7098-ffaa-4d33-83fb-26e7ac319762\n685a4af8-6c20-4607-a0cc-e76d268146e2\n0ffbadbe-9188-49bd-a645-b4da21fe2f74\n328e9e4f-0c39-4c11-b63e-2059470d3296\n8c8cc32f-a662-4c6a-9ced-a53506c56aa1\n9d8ae068-d8cf-4c52-9d4d-6a662b537a9b\nd422b282-c0c1-4fc5-aefe-2729d3c0a333\n3c5dd907-f5c9-4232-a745-134aef29bb6f\n5e3fd23d-5608-4bb5-a659-bfe8bed151a5\n53942770-c429-44f4-b926-5e1d2fc66e0e\naae04779-6126-4868-9720-3103f401b947\nd38e148f-8f21-4550-a391-746e97bb6871\nb828107c-a864-409f-9390-cbc6950fbd12\n980979d7-a150-439a-8adb-08c921559407\n329fec88-a935-4cd2-a028-d5e78e0ca1ae\nfad7be18-9cd0-47d2-99bc-9016e220d700\n482611d1-ad32-4ecb-afa5-1f45714776b5\na3b9db15-e118-4dc0-bf25-a3b5867ee46c\na580bbe3-7d1e-4667-966e-fae86c47e53a\n7eac778a-db3a-4b99-91f9-6eb76a8cd31a\nb36789e4-1d25-49b5-8dd0-9c4c960c5557\n4f4990f4-25dd-4b16-9aed-27ddcc712302\n77d6d432-d7fe-47d6-b076-6465ea3044ad\ne955524d-3bc6-488c-990c-ea77712e8988\nbeb63b00-6bad-44fe-a0ba-58c70816abd4\n2f03fb49-b82b-4729-a8c1-99971b898289\n14fcaedb-bc2e-4f31-99c8-ce6c73222711\nf6496b63-5229-4195-bcd5-5a91427ea823\na5895f06-4a35-49d5-bcf1-1352d6170ec7\nb354eaea-0213-4b05-9bb9-56f878aed3da\n15137395-892c-40a3-b1cf-799dbf94ae8a\n8f079df7-b44c-461f-97fd-4cafbce715ad\nc0f30f6f-ea47-4022-8fed-784482e01068\naff46bc7-51be-44c6-a742-4f6082f3199e\n284252fd-81ef-4561-9f17-c5334b07078f\n19686226-a6f8-46f2-9b2f-3808a02fa10b\nf8360cc3-ddcf-4998-8147-433b4e736d43\nd6037211-f70f-49fa-8bbf-75b2026ca5f5\nc6cc8c4a-ca98-4f58-9bdf-6f8fc81e430f\n32dc5a35-9450-45fe-9d30-434800587a6b\ncd2daf98-0bc7-4f89-951c-0c7185f496b2\nac9bdb22-87f3-487e-9274-8595cf6f0780\n56387b1d-731c-4bc2-a3a0-c98567cbd9ce\n43d6d7c2-06cc-460f-a7a2-e5279a59d0c7\ne820f8f5-593e-4ac2-b73e-6e02459d1394\ne212be0f-a4fe-4516-a3d3-ba4acaaef720\n244c37a3-2841-468e-a7f5-51ce4f9002ce\nbe355faa-a8b9-4e64-92f2-c660f1995dbf\n4b1c1196-438c-4f0a-90bc-36d4a92e994b\n07a2d250-f81b-4076-a033-37a09b2caf7e\n49bb729f-e325-43b5-a58d-95623c8252e8\n5e629ffa-69d8-4708-a6f6-5174a3b8a908\neb9fa424-3c1c-46f3-bbec-7cb706595de2\nf42c6af4-301b-4d13-bea9-9b1c5c6305bf\n2cbff803-7488-442e-af1d-4d730f20f1db\n58944278-9ed5-46ac-af22-f3cba1615e90\na213426f-32f3-45b1-895d-4a14e6776399\n69ba0717-d22e-4fc7-91c8-b65db77bbaf6\n8c0ef384-c5e7-4125-ad2d-6127c4d03295\n73b80a45-c613-4311-800f-18640245d4ae\nbc8506ed-a9af-4615-9dbd-d8835e70664f\n0e055820-8fe7-4874-a540-e0bf40063059\nea11d49a-a260-44fa-b278-9fc63bc1ab16\n907610ee-3b58-480c-85f7-1624bbca64bd\nb1644671-dc1b-46b3-aeac-90596fbd0746\n227e0fb2-5ae1-4246-9d01-378e24624bcd\n2d058bdb-11e9-4801-89f4-4142456cd3c7\nd4fdb426-e4c9-465b-80cc-d0ae11570cf8\nef800f69-ded6-40b9-904a-04637fb3e0bb\n82e00dba-e51e-4bd4-828b-e8b5c6cca769\nb4418db4-2127-4022-b731-c0b81d05de92\n6370a624-7d90-4eef-83ab-ab533136e385\n40742759-1f89-4a00-b29c-9465028ddd5b\nb2decfa2-2777-477c-9028-e874e4c7d381\n40488ac1-bb9c-436a-b83e-b00314273eb0\n5a6a62c7-9d96-41b4-ba8a-da1b2fb4ed3a\n76a79354-a354-4868-8f96-a02da2bc52fb\nf805141e-4a81-4419-8fe6-9d3d77f08cdf\nc9569a1b-82a1-426d-b337-f9d492c1b5fa\neca7dee9-81e9-45b6-9109-f2ee028c55df\n3c41f748-7557-4d1c-ba91-cfe243a43c8e\na9dd4bad-ab24-4c99-8b4f-c5393de27376\n902c57ac-3f1f-4b41-b014-fbbfc476df9d\n3d04417b-b0b1-4f3d-b33c-a8a45e55ed18\n64b49ba9-ae34-4818-8101-29081179c6b2\n770c3468-29d8-4941-ad89-08e993b9ccc3\n6a4b7394-de03-4ee6-b2bb-4c94a34fe1e6\n13c970fa-19c7-406a-9848-ed0044a1bc74\nfd4f6c81-8bc3-47ae-8770-1ae30865edb1\n5a69246d-0b1b-497d-9d84-005083d11564\nbcd89d4c-5599-41d9-80a5-a2393a216c32\n97e3e6a1-c51b-4d40-822f-bf9ef961a99f\n2f609aac-7cc1-457c-86c2-77f19cdff45a\n30f71076-0492-41a1-8a09-d837b823c75b\n94049dfb-1fcc-4fd4-ae2e-526a4d82485c\nad806a6f-be26-4c1c-a08d-48705b04d2b3\n4a8f62ee-7ea5-460b-8ed9-573959003d2c\n4911d93e-343b-4b62-ad7b-e791b0b0daa6\n7d27a5ce-f7c9-4acc-932b-a5870139f38e\n4bd6a124-edc0-4ad2-a840-2553cb5a1a55\nf9646b4d-eddc-488b-9f73-dea66d4cf6a1\naf349fc6-678c-42b8-83f8-1f4c06cf6b2e\nd4ed17eb-e50b-4a71-83ed-761def49ad6f\n34cffe79-f612-45fe-9297-bbf3a7e06a46\n2cee1155-7e2a-4642-a42e-a62f171fd43a\ndcd6a90a-a81f-47b2-bb60-d7dc2ffebc25\nba4b78dd-ec41-4dc5-8c5a-f8d286b6d2b9\n24dc0c24-6eaa-411e-84ec-b99f9eca4c73\neb4dc364-2221-4d01-8989-6172f913e5b3\n3afdc181-2ff8-492d-b03c-68a296120f29\n4aeccb77-8a85-464d-af56-1600e4ffe878\n3e4096c9-844a-4411-8e10-0b0cf4ff6a5f\n87cc5904-2a3b-48c5-8427-a79ea8e96f5a\nff1df4b9-10fa-40d8-bd20-e05775022aa9\n7f966a79-eb58-44b3-abc7-90a5e86ea055\n98c1e568-af11-4c65-91b6-3ca2c2266c82\n8241afb0-18af-448d-8b75-cbdb38a6b885\nc03d25b2-a91f-47f7-993a-89789d12a946\n79e9e4cc-2d7c-4249-98a9-9efe4b3d6e7e\nb6a48903-8755-43ad-ab4b-ef0fee2ccb5f\n77b08303-720c-4234-abd0-df16a8341449\nd12f3759-4049-47c6-bb06-0e263f288f17\n17c1e8dc-03a1-496b-8bca-290fcfdec420\n2e11207c-8e6a-410a-8c3b-be9834145587\nfae11ad2-b6e5-44e7-bc54-62f6912df293\nfce61ba7-a486-4720-86aa-d174175743fd\nfc4c3a9a-d87b-4f63-af48-7b6403181e66\n9578a844-21db-4a10-ad11-0362b85f5f94\n75f05b0c-9384-4882-8ea1-7fd5925bbc25\n82a89fac-c27e-4f72-a984-3095bc8ab4d0\n1f19e6c8-e572-458d-b30a-50c1a72b30ee\n68c5dff6-3a6f-4f50-a1bd-54e868e35469\nfd1f05ce-4f89-4898-b0da-48da004a1fa7\n2ab265c7-8624-4ef3-82c9-3c517d1df2ab\n0c2b6cc3-3e0f-43e0-96f7-20c718ebef11\nb2d8e9b6-5c0d-42d3-9daf-a3faae7b490e\nba1b16a6-ac64-4be7-89e6-330fa7ff065b\n79045a36-979d-415f-a414-5925aeee9ab4\n33c7df38-605c-4896-ba8a-2f9466c40f19\n73f34047-fe2a-4532-b671-d36ed19e73d6\n46c28e7e-c13f-4ff6-80e1-b4c226d21baa\n3d42adc5-cf6e-47ed-8895-e9b9222820e0\n8db33d4b-b269-4320-929d-6b853582acce\n908b13b4-e140-4bcc-9761-2d0a9062c016\n696c810b-118d-4561-bcf9-3c20c304625c\nf06ea362-a1ca-463c-9775-825fda3375dc\nbdf277e1-5653-4bd8-b711-f0d1778ee191\n24b0d67b-aaa6-4b76-9915-0a90c52cac27\n4374a737-7733-4956-aa47-7c50a6d48baa\n1896b124-2a89-4518-9a28-b433a30b6682\nafea907f-c084-4628-8798-4d2d669dd937\n9f053d4a-ef42-4cec-bbab-7fadc8a66947\nee2094cd-5a96-468a-a3ea-aae0237d2455\nbc121499-a93d-4db0-9257-8b975117054e\n037acbd8-638d-4ca6-b536-a79aa7b5d324\n4ebf780a-c688-44c9-aa2d-a2d8f08a09ee\n0833f3f0-e692-4a66-b322-7875f429e630\n8a7872f0-f776-4818-a89e-6fe1f2666dc0\ncead2cd0-82a9-4161-8394-cbbd197ddd66\n924944ce-7569-47e4-ad7f-9bb79756e8cd\n2e3f5ddf-2e35-4d22-a75b-775b2fedc085\n9d07ce3b-661d-4806-870f-5e468acb373c\n67e643e3-133a-4d4c-9669-1b3a600b4ce0\nbf8fb3d2-6709-4490-b45f-a38631854a9f\ncfdb3e4c-aeda-442d-8131-4f6f07386f79\n7224cf43-a580-446a-a75f-f28769b71217\n7425e741-17dc-4130-832a-1a91a9be767c\nfffe0fd5-a9d9-4165-b59c-af8dee26138e\n6a5853c9-c58b-4041-a9ee-dc1dc06c9231\n65bf5c2c-b86a-4369-91a9-3638ea24fa45\n6b8d92dd-2b10-4f06-b0ec-bc5cad431ad3\n84c45cfe-8203-40b7-b398-ef4813dac369\n2b0af5df-b492-4b31-905b-9476e9160485\n16294599-bad2-48fc-b6d4-68ddf2fd8d91\nde74acce-22bb-46ef-88cc-8e1917bcf98a\n153dd773-3ff9-47ad-b9cc-577e3be1f627\n5b1788c8-5c4a-40ea-9f7d-5f09a00fa07e\nbd178736-32b3-4a5e-8714-c4c6acc02858\n86f3a1ce-b51a-4829-93a3-1e9279ed0001\n39b96c17-db81-4faf-84f2-3f4ee2a8b8f9\ne2229f7b-7b2f-4fd5-ab70-b5a45cdb35ad\n5a736d62-6e11-43f3-8993-2c91eeb04c45\nb5c901ee-41d4-4d79-900f-75480716d069\nffc8d4a0-234e-4ed3-95be-ae74b9e71fd6\n7245ecd7-55eb-4aea-a8e6-2dcaa2581909\n3b7a22fe-8c73-4061-8fd8-1454b8da296e\n7f61f51e-e483-4597-bae9-2f7efeb2cd4d\n08a145bb-4bda-4e71-8ef1-dce4251848b7\nf3a8930e-f665-4512-a9f1-119868367cd1\n403f288a-b3ba-4788-a150-36f9a6eed221\ndb3e3811-22ad-48ee-a430-b5524c5b3479\n952d5bb1-c0de-4312-8931-026498a3b7e7\n5a20f57e-9d94-4225-b7e2-123f8cc9cb9c\n047fee9c-ce83-4ed8-b9a8-4405347f7574\n2baabe35-27ac-421f-ad1f-3a2cf1d6de9a\n45a72ca7-6f41-4cc2-89e2-dba40d05cd0b\nbc8a7be7-ec30-49a2-941b-eed5634132d2\n99f9824e-9e85-4df1-a618-45b5d6cbe745\nc12e6841-d66c-4931-b974-5d88f2674511\nc98d960d-f923-45d2-98e6-1ea67dadd432\n558bec3c-7eac-4017-90b8-c4955408f090\n98230867-3434-43ee-9f96-8f8c8eb77f8b\n0edf08f7-1cdb-4e23-96b8-8d19c2387d3a\nbfa63e09-327d-4eea-80bb-a2c49420f6b3\nf51621c7-e735-4024-99cd-8f1b06910c48\n506bd907-3f28-43ef-af35-414c36e90e58\nf3865e55-a124-4dfe-89c2-694737aa05a7\na9c4d4e7-188a-4aab-8396-ff7e1e317ae4\nfa48de28-fc64-4ad8-abe4-36c3ae5c30f3\n782ea03f-67aa-41bd-aa98-7a1e1db3e139\n55c377a3-4406-4102-953d-4b5373bb3b03\ncc599060-bec1-4a19-8a0a-5b26920f5a27\nea30323b-a648-4aa2-9feb-3325eb0d309d\n23b3ef03-af59-4da7-a871-375ac02be9c5\n84e3ef3a-0135-466a-b534-8a87741af92f\n56a74ad0-dbf1-4f98-ac33-1c0e2522afd8\n8340ca17-a31c-43af-a6fb-260f17ba3a15\n245b4ab9-c608-40ab-9ceb-539516f1140a\nc59ec872-0b07-440c-8922-f29299b11ca4\nf2ca559e-0890-4bfd-8dad-2e0df9d3d48e\n3d7cf0c8-c94f-4d4c-8a19-ed8539fc14f6\n78a7a0c6-6cc7-4fea-8e66-1fb13c2ffb83\n5917aa13-ca48-4727-b7fa-5ce260e7535e\nd260eb3e-b4f6-458d-889c-647c5345ce72\n447b70cb-aa46-43bd-8f3d-d9ded3a9560e\n075058db-8020-46a5-ba68-be69bd63bfc9\nb9c04196-bc72-40fc-83b0-d308ac34012c\neb48d179-00b7-4357-993a-40269e1cef57\nc7eb4329-9d2b-460a-a6b3-01961638ecf5\n29e5e9a7-ee3d-4bb4-92bb-b5d2d9599b4c\n2e558d40-285c-44b3-a088-a5630e1d931e\nfa700fdb-f5bc-4cbd-96be-ab4267267f12\ne15b01e5-341c-4040-b89d-483c6b441911\n932a5cd6-8cac-4e5a-ae4a-eddf83dc3402\n80fe9043-b26b-4258-9c97-52676c029b5d\n6981879d-ccf7-446e-8559-88cdc791ee70\nf6062f99-6f6e-4f3a-8c54-a58ce2738d3c\na78381ae-c40e-432a-a774-bd1e910f766f\nf782d965-67a5-4f4f-bc94-549a4e8a051e\n674b1277-16ec-4d3a-9072-57b5282d3fb1\nc294228f-e565-4a77-9fec-c6b200092b85\n8e8b2409-0bbf-4b78-ab32-f9538a15271f\nde5586c9-5745-42c6-8004-91a161660c74\n22bd7267-e4df-46cd-b319-98a6c28579b3\n7768a6a3-cfb9-4b48-a21e-fc48a8f35dc5\n9caca0c4-e8ad-4d92-96dc-80720bb70bc1\n0552c79a-eb28-4c0d-bc6f-0c6a46eb96f4\ne99fdaa3-3fba-4b67-97bb-143f2b4c2ff8\na47d6a80-6552-427f-bd08-c4448b330aae\n73fed7fe-f5c1-4486-8acc-125a95f31149\n687ed3e4-dd9e-483e-8736-4b54d92bede5\n3673715a-768e-413b-96fe-7df94ac0cb34\n79f803dc-1bb1-45aa-84a9-9cee4399cb03\n6a676b6c-4cbb-4f85-95ef-5dec2684f6a5\nc305083a-b32a-49a8-aa4e-c2da3a8dae16\nf5db725d-8c9a-4dda-8bca-86a0253c4ff6\n256c30cc-4c1c-484a-bd8d-98eb69f163bb\nd39a1a73-80ad-40a4-abd2-87b4a8123b9f\nf0077208-d46b-4c19-8ba9-d34d1bde8eb7\n26c48a0f-429e-48bc-8e1b-7b9e5a2c0385\n13707f33-3d98-42e8-baae-34b3bbf0cd2f\n61bef656-c94a-412d-921e-0c311b4aea3f\ne5bea689-553c-4f18-bfb8-182c879657c6\n4ef4c7a8-9ac0-4215-90cb-3ec777c0f913\n6a7cb5b5-5b25-426a-8b4b-05d375cda867\n8bf4d8cc-26f1-48ad-9baa-5d83cab8904a\n051f1de9-7baf-4027-932e-8b7cb449f064\n370c1777-45fa-47e5-a0a1-b8e108ef840b\n165a242b-9076-4aad-84f0-9834c4f31d2e\na2c3173e-bf2a-4ea1-8189-fe6f540777c3\n2d225c34-5c96-4ab5-bff8-50a0c317c65d\nd75055ac-bc55-4081-8e5c-744d23fdc2e3\n66c31126-ab34-4372-adea-0d29ff5b4596\n8bf1ee6f-8145-40cc-a198-56e4e161dbe6\n383b71cc-8acf-4aa8-b7e5-da74bf8039d8\nbcb40c62-1ca0-4e99-8b82-b01f55d89e2b\n8d1e006e-317e-4d9b-b02f-f4fab5cd5257\n13195184-efe7-4988-86d5-3eda855930bf\nb000a0d1-1dcb-41a5-8bd0-0ecd785abe23\n369cdb53-257a-4c07-8b89-7391d820d3df\n59e7f787-3ea9-4c82-aff0-ad849f252b8a\n5e299642-d980-4290-940b-7a32b412ae12\n0c622b51-33b1-41b6-9636-065639ce5212\ne555c09f-c788-4437-91e8-9dc3f0affa74\n63f30067-b6dc-4ae3-beab-1788591b7103\n82a62e30-1daf-4842-85d0-2eae1ba566de\ne33d6181-b467-420c-88ce-be7482fd31ec\n66b823cc-752c-4612-aace-ea4338441594\nb9d2bcf3-fef5-402c-bae4-a04935c96151\nf6f387a3-ad05-4a54-9853-0f322debd043\nc0422eeb-e3ef-4a9d-84da-b88d79ced55e\neb4efe31-06a4-4422-9d3b-83ef33407535\nf54bb571-e176-482c-bc22-93908610519c\n3fb0ad20-f1cf-49d7-9834-1fd5a096a726\n8e09086b-856c-4666-97d1-a052c2c6e80b\nb8cf245a-1a06-439c-b67f-bcd646c162da\n17ce1eab-4c0c-4c05-be69-a205b4f7cb51\ncbd540ed-a222-4bd7-875b-c654a43b5e32\n0b0392c9-df00-4bde-af4a-3bc032f12286\na9a99b86-ccbe-4fba-8b39-ab50ee56f90d\nc641bc76-5ef9-4d8e-9af0-10a6f3f8cc2f\n53891e56-432f-4c7b-8243-25f8f2e5e554\n12ebf018-9cb3-4160-ae02-8d41fccf5455\n47550ba1-2066-452f-89f9-fe30303bed89\n04b1c0e2-2be5-4577-bbe7-d2dc26396128\n85cb5ea8-3b65-49d8-ba88-047a7a1b3e1d\n84eb1152-a3b7-4586-9afb-c06c68d5d2cb\nd8071be3-7d61-478c-bedd-1e76d8827b35\nf83db645-caa5-405a-8f22-4fd865e6a0e1\nbd43d218-6493-4342-bff9-0c8728b1265a\nad211989-dda1-46c2-afa3-c6c9974d6291\n095865f5-5976-4f9a-b066-3eb32db32cd0\n247087dd-5126-4364-9c6f-9804feb96f94\n4c066be7-d319-4b5e-9600-9024a0659682\ne2f664aa-c9ed-47f5-9d39-c40fe780b4ef\nb3308eaf-e0ed-4103-b437-1bcd58568354\n5f14628a-2c4c-44bc-ad55-e6ffae757deb\n85fa2da2-c5a0-4fb4-8ee1-146697799860\n2b0973bd-b72c-4ae1-b40c-2b93de348cfd\ncabcbc89-c20f-437f-b6e1-cc870c117656\n59ce3dce-2d23-4324-a5e9-9c68b2b2d606\nd675f31c-7d09-4dc0-88ca-5e243c816b28\n8a2c4e5b-adb7-43f8-853c-b22dc95dbdb2\n9f347b2f-c176-41f3-abf7-05abadf65b3d\n93ec6a17-dbcf-47bc-bdc7-fd17c87d298c\n23c2d8c1-6572-4714-bdd6-a79d0a9968f2\n0c715e6b-be22-4936-88e5-aaf20cb8458e\ncea34b3a-117b-4d1c-8a13-21a30308ed63\n875c17a9-ba51-4245-ac5b-b8529769aac0\na8ce0075-5e67-4819-9b17-869c64842bc7\n04b652fd-c18d-47d0-b666-9770086dfafc\nef9fbf2e-5232-4a50-a197-b49a1f5070fa\n4acf8c07-f732-405a-beb7-e266aa35a0e5\n6cdc08fb-9360-4948-9516-f5b9cc57bcf8\n55454dba-25a1-4c7e-889b-d696291b954a\nf5c1ad51-e09b-46a9-bd93-90b805927ade\n0b430954-1d34-4303-8131-5642b5c756b3\n7494c55e-c54f-4af7-8f59-6a5d4d19e56a\n91b22808-a1db-4fa0-8ead-1156c2d98ef0\n951e1795-0021-4504-9fa7-008758602744\n5f57a3f6-b5df-4774-a08f-4987f2ba0b7e\n0d63fab7-be43-4388-8d00-c4db38ea7fc9\n0dea3d28-4229-448e-a687-e8ebc4ea6b1b\n9e3f4eab-1ad9-4954-a1ed-6112bd2bd395\n36acd287-003f-4f70-8313-65e1ab58c9a3\n2f2abd6f-da24-4c14-a025-393351555194\n222afc89-b780-4c37-8942-10209d9faf44\n092f61e5-9680-4a36-92ae-926465eebd60\ne7d2278a-697f-4ffa-b8f1-13cbe96cb933\n6fb0f1a1-993c-4783-89e4-39cb224944f4\n75957938-cac4-48e2-b23e-cbca95be8739\n43e9ecf2-553c-43b3-8178-7f8a7d871928\nbebe8897-0af6-4657-9c16-af0d487b2af7\n87a94566-c0c6-4348-82b8-8c68241dc1da\na9cdff12-2a79-4ad4-8ccd-8c736925df46\n3d01f315-d228-4579-a437-f0c85e8cc976\need97173-3980-4f28-b9e9-7fda46b588ef\n701191be-28e1-4869-b525-ec70b2a07e92\nb3ddde40-686b-4e3d-99d7-8a70293ef4db\n79bc07ab-f62a-4b3a-81b7-497a4a21f6df\nb6cf0b9c-8334-4d98-8a7f-7df906088a47\ne2ad21a0-77f2-4c4a-bc6e-d15ccf0b4bd4\nefb2b6f8-3fb8-49a1-be2e-508e25f9279c\n49e8542a-3705-4109-a897-19fbe0ce6615\n7d20b1e5-885e-4a1f-865e-dd8a895baa2b\n58066cc6-01fd-42ad-bbe0-b3158956309b\n69d8c673-f34b-4933-b9c9-b7559ce4d36d\n50efbd97-c886-488d-a38b-b2404bba7624\n7567d842-cdea-421e-a9b7-0819e15a0738\n30c32c85-80c6-4870-9003-fafd9043174b\n14f58d8e-3a10-4c15-a06a-a9ff41274053\na69bdaae-c31e-479d-bad3-d8120ac981fa\neefc679a-b3c2-470f-a656-5417314275fa\ncf0c32d0-2775-4529-bdd7-091d849f560a\n080437a7-544b-428c-b00a-4f8414b9d94f\n1d1b37a6-beaa-43fd-a5a7-76c264d82686\n55e821ae-6af5-4d3f-9966-0b9bab39bde1\n3d223a47-a0f3-4f61-97e6-92b99373027a\nad95562c-383e-4b45-ab0a-35cf2877035b\ne9682d1a-f327-48be-af63-564547321cf7\n08f1800f-8bae-41c6-bb74-b37eaae2e9c4\n902c0a47-30c8-40fe-9bf1-909d4e83934b\ndffad17a-6eb7-4985-9046-84257bc1da1a\n803b4398-8c69-49d7-87ba-ec01b9ea5e71\n5331c369-23c3-4fb9-8ab1-d14c4e4ef8f9\nd6c62a2a-afe3-4a89-a86b-dbf69a28ca35\naae9bc6a-ef3a-456d-b7c7-5ee6e7b5c7d6\ncf851218-f2da-49da-8a06-fb3e346a6b1d\na01ed829-2eee-4b46-8f70-c6add03e1125\nfc8a87ae-4018-455f-a564-3c2dced2936e\nb54827c4-d9c6-49bd-b181-7e2a2844369c\n962e0e79-1a31-4168-91ef-fbafca10ddf0\ncbfa8975-ab8b-4920-8825-286f26d09f4d\n7c8656c1-80e2-4983-b769-12888a7716ad\n86d26cea-a5a6-4eb4-abb7-db8eb5bc5206\nbec3065b-670e-45f3-b080-29b9f543dede\n553111a3-3a45-42af-b109-b3cd38a7a3a4\n68a8edc1-454c-43c6-a391-9ec1c2eb2320\n2f2465c5-ec03-44bb-85ba-75e234e890cb\nae8cee69-1542-40fb-a3e1-ae5d2442df41\n5b792647-0364-4bae-abfa-b0e367e8d465\n90ba86e0-a19a-47b8-bb37-e585e5de669f\nc03678bc-ba84-4ada-83ca-57d1f30e6e89\n64f62c10-a23a-4f18-8757-0395ada6dc51\nd4117e17-ba92-4423-b23c-48a02ba34942\n3f638a1c-2044-44ad-b925-f22fd622d909\n6ea38f80-4e38-410a-942b-ce57792e914b\n3b56310a-737c-4a3a-9ecd-94800ec1bd43\n35d9850f-7dbc-4d3a-a3bc-22f80fd69024\n4ca9b6b5-e834-400a-8e82-1ff01642f9c3\n97367b0b-8acd-423a-bd55-e1432da7903e\n5172436f-80c1-4d49-a49e-04e4df58892a\n6f6428b1-cea5-4618-a7a9-dae960c5f264\nce9f2571-2a60-4ea8-a303-0bf9e72819a5\nd61b6839-f1de-49cf-9ca2-cc912ffefdc3\ne4c75a17-5828-4c3c-93e8-8c4cb923c1b5\n4ae93f9c-05fd-4617-abb7-00a66c94ae05\n7d088c1c-8b5b-46c2-89e4-9df17c3bad4c\ndd4406ac-6581-4361-ac07-9ab172095e1d\n7e5bff73-b2a1-4686-81c4-b035014183f3\n6cdf4de3-8169-4bfb-a22f-182fe07eea1b\ne010c1ff-16ef-41a1-b13f-248a6cb90eea\na24b2c9b-5435-46d9-85b3-a8fdcc1301ce\n730f203c-1669-4bf2-ab38-8d38bddf3fef\n1776fd3e-b3a5-4801-a704-297ea545ac40\n0f626aa5-ddd7-435f-a0b9-f5568fecab4e\n719795aa-7414-4794-b40a-7b68f56b8433\nc09ff034-126c-4f62-94e8-50b18f270938\ned91cee7-d4b1-4b71-8a4b-f4bbc7735c84\ne597b6fd-c1ee-4ae0-b695-61b012eb88a1\n9fee8f7b-39e2-4ce3-a2ac-dc85c37ec503\n13810e1c-4c0d-4ac4-acad-b84c841c295e\n9b2688b8-cbfd-46b3-9658-04a396ee5a7f\n84706ffb-9fff-4754-a5be-f8bbdb9649db\n99a1a064-e726-48d8-9f90-bc6f15e4047a\nfdceb335-6ca1-4be2-81fd-62ff04d89acd\nb7c62286-b7c1-4073-b583-f6c37c5f451b\n1b781247-0995-4e98-9b80-04a54deabb22\nddf83763-7a96-4599-bf15-287a8347e1b2\nade6e0ce-9e82-48ce-93b2-b8e10d856eea\n826d17b5-971f-4e41-bfea-6cdad09fa9f9\n91e2bff9-4dfb-4945-b2f1-a6cb10eceaef\n79a9f548-6cb5-4465-92f3-e043f84d7ffa\n6f76c410-e6f2-4703-8743-7cac0910b499\n835e9b2a-a56f-4003-9540-a61c62510815\n255a37bb-f2ff-40c2-a012-2731b96e7faf\nbfba5809-786f-4c48-9bc9-e5c76ad183f4\nc858c4fa-e1d8-48f0-b643-e7598977aeea\nc0e6b84d-9b08-4971-982c-c714b3dbf983\n4a0ffd72-878f-4c9b-89b5-9f3a9e565b90\nc2e6ba9a-9e6c-4269-a0c7-911e67585e3c\nfcef33e9-db66-41d2-9965-a0a0552d1e51\n04255a9b-a1ec-4f5b-9407-53675930e9ed\nc813f025-ca06-496d-a94e-49e8f665a2af\na117a3f4-1d7a-4bc2-b802-9d5a10261d8e\n208402ec-4bf0-4f03-b457-dec11cb79742\n372f984c-6027-4f86-88b7-1e545898a8df\nafc9e22d-51de-48c6-b190-4af3c69f7fba\nc18ec19c-33e9-4232-bc23-1e455b4aa961\n2701b60b-fff7-4bba-9a31-b0ca29e6eed3\nc65e61da-ac23-41b4-95bf-45ae781494c0\n5975793b-d9e1-4583-9983-5dcac82295f4\n2046451a-a41c-46be-9946-c666ab18450c\n54e5652a-4db9-4e5d-a703-1d7d907c0c8d\n3a8083dc-a085-4eec-b1a7-afb4e54647d9\n6f5499c3-81d5-401f-9c2c-d7d5c5862df0\n6d006eb5-fca8-4d07-a85b-24f29e72cd43\n4dad77b1-c4c1-4cf0-936c-fc126dbe983c\na1ac8f2f-9ea7-40c4-b795-9e407639463a\n9bb24255-c8bd-4dfd-aace-8c2f382e39e2\nff3922d5-67d5-447b-b5f1-6ad3b8db0545\n46ee13e3-8166-46e7-9c5c-223a4f2ef6e4\na914004d-9cab-4843-bda5-be1e27f0c363\n91ceabbd-d73d-4fe4-9385-4e80cefcd883\n013ad846-52fc-41c8-954b-1d63eb146bf2\n6c559cf2-3dc1-454d-9bdd-41bffa5d8d49\n9efb6e23-8686-4908-89bd-e7e8b008e0e1\ndf76865b-5b94-41ba-9b86-a3f71d8efcae\n9aac7871-a629-43e8-a99d-b2e518bc7069\nedbf941d-f204-431e-98d5-6e76aa01beeb\na0240a33-e64d-4866-9cbd-39da94c974b3\n579c1f31-4618-4ac0-824b-dd6b5c884133\nbc5783b3-6594-4309-8ee5-77c74bbd2349\ne087944c-e45a-4404-bf3b-ae42252ee78f\nf07535f9-7c5b-4f2f-a345-31f7d894c144\n1c77f3b4-181c-4f86-acaf-67bf9eebc933\n0b73ac46-5af4-4ef8-839e-38a5d5811366\nc69298c9-7d68-4785-8263-7b907436b98b\n2f545b07-4a8e-4849-b298-6080bf1deb78\na356be09-f884-4162-bf49-1155348bb09e\nc1e05d62-bde0-47e8-88b4-939d8bee456d\n51cefd9e-cda7-4a82-a449-8a9182be7103\nb19e7ec1-feba-48f0-af65-65cdf2b33919\n62df3047-b4ca-4598-9016-4c356f9db6e5\n7560cc1c-69ff-4a83-af2a-184eec914cf2\n8b35012c-ef97-4d96-a1b8-4a2ff95b6466\nf16315bd-87c9-40df-aae7-d706dc9be57c\n26193b4c-619b-4fae-b12f-f9dadb1ef590\n4a5afd44-5252-4756-8689-2eeac6e9c81e\n3fefe631-da77-4459-935e-a1f27a3558b8\na278e166-2600-4187-b9ca-df436b9acb98\nfab68e25-b710-4192-a82a-519448be0660\n8b891bb9-7687-4bf4-b9f0-2f9bdbc6692f\n420b0b44-2cc6-49f2-b0b3-f85852915bbd\n6354a8e7-82d3-460b-929c-21b7cd09f6d7\n1aa2dcd1-9331-4cfc-b91c-f9c37c1d2bac\n18b70936-9976-42fc-9798-ba160f039ad5\n3fb1eccf-1356-4a22-8494-09a47ee06885\n656a479e-9f45-4756-813e-9a11cfe8f350\nf99b68c8-0ef2-4fec-b931-6c9eb96435b7\n704cf5d4-5858-4d7d-937a-ccf7af57fc1d\nb3aed34a-cce6-47ec-81da-a541c93086fd\n327b7800-18bf-49fa-b66c-17331e3ac607\n3c452879-e86d-4b88-9158-384605aab29b\n65203c05-96a0-4cce-9204-ca8bc52a4774\na6dd7fb1-f52a-41e0-8811-be4326e0314b\n4370e2a4-d012-4ddf-97c9-273f5580b863\ne0374339-38e7-4f01-9869-319c3f564256\na347f30e-35a8-40a1-a9f3-199b5e33522e\ne38f6e27-93f3-43ff-b471-d405af69ffba\n75900234-6428-4b96-9ce9-4eefc6f21d31\nf9235bc7-506a-4f2d-b305-06432a6f6448\ne913eb59-87e0-497a-9903-9e0eb860fb07\n3683bdc6-42d0-4d60-8c7f-34cda898159a\nb6927621-73d1-4717-a9ab-46a310288ca7\nfc737250-27c7-4239-b4db-710d062e6942\n7e6b0e31-9e68-4915-bb4b-d5721419d911\n59f094fe-d96b-4712-8d9f-404f76e35eae\n805c420a-c87a-470f-a1ed-19e7e34f4f68\n889b2a83-cc1f-4c18-8325-891fa453e573\nfa0a2470-5245-4818-abfb-9c11b7e46e3b\n6f15d342-4711-4ee0-8af3-bf548b3611f6\nb282d6ef-ae08-4937-b12b-e6d417a4b408\n24b352a9-80ff-4425-8c12-7bd432663e16\nfcf2f50a-06dc-4af5-9783-b9cab9501437\ne24bddb4-1155-4df5-87e3-cac2ba6442e6\n564398d4-f1cd-4f73-b068-c4210856501b\nebca7ff5-0692-4a6a-af90-35a153e003e4\n3d24e192-8a36-4e9a-8992-ec5c2b45802a\n1037919b-bfaa-40ba-80f8-b1f879c3296c\n68716bed-7a2c-4efb-866e-7b9dfc1bfa4c\n35baa8ec-08ac-40ea-bb90-119ba2972a37\n16f384d6-790a-4bcf-85ea-8f1ab9fc5706\n0f1907de-aa27-4977-a150-450ee20b0226\nb6b0fa76-5110-4b25-ad1f-6c6a66ee8fbb\n6e7da275-d8e0-4426-a30a-8ce3c44563a4\n41717d06-4abf-48fd-8142-b045ca9443e1\n9873f6c4-1e86-4cb1-86d4-f48e3955d75f\n85412991-4022-4211-8968-986b8bee622f\n88a88169-b80d-4cf1-ad60-de3d5bfd295d\n86105117-c5dc-4c03-bc23-e376821b7026\ndcb81c53-2c64-4c70-90b8-a4fb61788f9c\n45cccda7-f649-4a73-bf3c-a2808b8fc110\n9246b5a9-54c7-4356-8471-5cd337fce862\nb0094fa7-a3c6-4d99-bcdd-b73e61e159a4\n5f40561a-0991-4658-9e76-e43f4015e6af\n5ac9fddb-7f8f-40f2-9b09-a9de0c2565c1\n7fe03583-5409-486f-961d-adbae67cad2b\n727b43e5-79fc-4a05-babf-900dfa8e4338\n50ac985d-497c-4648-a0fb-f0f5554c7eb8\n5337ff36-e7dc-420b-b7d8-d79cd3f88991\n1990d2be-8640-46fb-97ed-3dffb4a917cf\n590c356b-78ef-49f8-a9eb-2cc53f451905\nee8e42d3-1fb6-4e10-ab7c-674675813c69\n0dd7877e-c153-4b57-bddf-e37cbab19f97\n3107a0ff-fb37-4366-96da-2821eeb2ef2a\n9cbe22a9-1827-46e2-927d-c76b190d93e3\n4893186a-bcee-4023-84e7-2b16e6479e69\n8b757adb-a411-4e3b-90f1-dfd2c50841a2\na4c24880-a4f6-4f75-bee7-b6fa5c13afca\n186aab47-32ae-4823-a6dc-374fdf932781\na7a7f620-9e6b-4ee3-a593-9f3793fbae3e\n3ab2a0e3-8867-480f-b71a-4d84962ab0cd\n94586614-d589-4034-9b47-dde6c0d59161\n93cd17d5-eda4-4d10-8f87-c7ce0053f60d\n496a1450-dacc-4adf-b4d5-6028ead8e515\n6e31a95f-006c-479d-a24d-a2fd956b8dc8\n743efbac-b3e8-4e39-a20b-0df4cb968d7d\nac27309d-5269-4f8b-a4ea-92651d0c5377\n4c8d7325-278d-482a-aa85-e4ab7d555043\n91c4b624-2195-4c37-acdf-938531ff4f1d\n606b3cfc-83a5-42e2-80d5-61e5bbf0a09a\nbcb76039-44a8-402b-b6a4-98660b158a5c\nb71933b6-24c8-4354-9ad2-f4bc26f0d2ee\ne404e201-5650-481c-b8e9-6ba6d3624e71\n8ef1f6d9-4019-4850-9442-c4b742981719\n2fbbb6e5-11f8-4a18-9a1c-435b28d00542\n96358b8a-ad58-43f5-b565-5c6aaee037bc\n78c1410a-02c8-49df-81fb-a5d9114b40ad\nc56ca607-fe6a-4fa0-aa4e-b66bbf1b914b\n2084490f-bb38-47f5-9403-9241260904df\n1f425c41-e11f-4201-ba4a-eb65e65896a9\n3a6fcd33-ac26-430d-978d-1f2bb6e5954f\n9914cd6d-13fc-4680-9248-048851307dba\n059a3729-450e-443b-92fd-db6a2e8b71b6\n20beae6d-62a7-448b-bc4c-eb15d599ae96\n6846f9a8-89a9-4831-beea-07a7b095ea1f\nef698f26-2888-4514-909b-5adfd93a2e74\n4078610e-3f7d-4b0d-a30f-b3b4114c65ab\n306e74e0-063b-472c-a45a-50ac7ba088c5\n85766a45-f7b9-4b0e-9eff-29293bed7ccc\n2043b8ca-d13c-437e-8983-2daccf584a0e\ndaf4cf93-e9bf-430e-a0bf-003f4adf9ca2\n7b662b73-88db-406c-bab3-14d81a3936d5\nd09be50b-ab85-4839-b82f-ae21663d1e2e\n97c5e773-6f28-431a-8556-28e03325d5e7\n9dd22ffa-d7fc-4488-a7ac-81b461fe541e\n412af41b-8aab-4548-ac0e-24b14db182d0\n5f741920-7f0f-418a-9fa5-ecc8c24bfda7\nf6411738-48b0-43b9-8fe8-9ae1d6d80489\n4f331ca4-5224-42d8-af8a-d076daca0355\n73065100-7ed6-41bc-a928-890ef67ea2c1\n57b588ea-1a43-4776-9c72-369da53ef6eb\n3402d0f5-3cc6-4554-be5c-cb0ffd8fecbd\n8a9bc041-4dcb-4761-bfce-4eae08310551\ncfd26f81-011b-4621-82ac-bdd302faa0e9\nba836d2f-fc6f-4664-84f8-b47e5313dd2c\nd920fe85-4a99-42f1-94bb-3d7461aceb8f\n8e93cf9c-3c51-4cd5-ab34-6986c7068949\n79457b8b-ac9d-440e-bd27-fb1ccf9ea70f\nb018b051-e0cf-4505-8924-0db0b282d72c\nd47de91a-5650-4ba3-b843-69692725e118\n44a72557-ed33-4cab-be69-a23045b1c45d\n1e90e837-1edc-4cec-94f8-b904bcdddb29\n82a558b4-d335-4bb5-8187-9c30d70e17e1\n761ba0b1-97e3-46fd-a680-2bc6f953ba38\nc3adb087-d5ab-4f92-b1a2-9f341bbe48c6\n8cb64c40-7e79-429f-817f-d5e93151ee69\n15c69687-381f-4c15-b9d3-9766026f0672\n20f28776-ffcf-4792-92b2-fa44c3a10d6e\n6b72b96f-0c1d-469e-88ff-3b298308705f\n198cb667-e6c1-4bb5-ab3b-84253a65c596\n57fbfaae-abdc-45b4-8440-7f3ccf14bb82\n129b35ed-e676-42ce-9570-3109e385284a\n5872ce1e-488b-4c1f-9f8b-4738dc427152\n22240887-50e3-468f-ae45-3b7a790d6c82\n1147eefa-3d5e-4e97-ba2a-81a963ec030e\n484e408e-f9c5-4fc4-bba0-5cad353b3fa4\n028d5493-eef3-4d8f-be21-4a4a7bc66546\nd61468af-ba42-41db-8330-f9c8e6e3c04e\n78e7edf4-874b-4772-bf82-1f032d5947e4\n53014d11-1c8b-40aa-b446-eb2f8e171359\n51546722-cdb4-4492-b577-a0e68359ba81\nfdb3d8a5-f9b8-42cd-b00b-0c91192eb2d5\n64a579a2-228b-4783-b42a-6cee8595ab4d\ncc15b127-1208-4fb3-a285-84c4d467d84e\n158d16f3-b46b-4dcd-8af0-143ddd5110e5\n497d2fa0-071c-4ddc-bc04-757f96fd8530\n10382df3-f5d5-4912-9c6e-0bdfe2c3e79a\n734aa518-a76e-4e21-8da5-65cb2a2899b5\n1083f2fd-333d-48a3-a7e2-20ff4b868179\n70eaaef5-728b-4404-9bdd-959f7552099e\n73882fcb-848b-4461-ab48-6ce0ac865183\n16bde78a-bd68-4638-b803-349f7c5f14f2\n5c18eb46-9395-40a5-afd5-3c027cf6adc7\n0b0ffa6f-82b6-4c66-bf5e-915b56ef40b7\n1c7d40dd-9c40-442e-9380-b1df5aef4640\n46555e60-ff10-4535-a609-5181179b9d9b\nd41b1dfc-f315-4fa5-a7d6-068d3119a0ef\nb41e4cb7-24cc-4203-8c92-cefc5dfd13be\n46caf8d1-c339-40b5-9c08-58336ced9fcc\n798d97fb-2f6f-4899-893d-9a9e390be3bd\n03d14c51-9b28-424c-a1c2-a8c5ea8fe08d\n907a05c1-3087-43bf-8cab-1c4a34af63d0\nb4d8f2fb-9d1e-47c0-a9c9-ddaa9edb9357\n2f22ae56-801a-438a-85bf-fdd3f7fa5869\nc1747122-5add-4bbb-bde0-fe65819c7eb8\nd553acd8-a42e-487b-bf3d-638a732067d0\n5329f6df-5c68-40f5-b9fc-22713dbfb36a\ne6ce3b9b-b0b8-4cad-95b5-b5bfcc4dae49\nbdd2d495-273f-4403-bde4-69c3d5505541\n511bd497-01d2-4a8e-96f8-6103894f9c9e\n52cd10da-3466-41d4-b23c-2ceed942a810\n983e0fa3-ec6f-46fb-9a67-3cf3981df255\n2210e780-acbc-4e15-9586-9898dd8fdb45\n67d037be-4dc1-4a86-ae5e-a48c96dd34d2\n972ca953-25c2-46a7-9b38-14b01928d5e2\nc962a9c7-0edd-4dfb-ada6-cb41a34c2352\n59278c21-c6ff-42e8-ae35-721ab3d33afe\n8b263ff5-efe7-433f-b079-49d361fd8ef2\ne61a0454-5e8b-4350-981e-ad930fefd6c1\nc9413450-f471-43ed-9362-dd9ca6033004\n1c2b701a-5651-42dd-b2af-abbb7893d29e\na316d5d5-923c-4760-a4c3-4a43fbc322f7\nde73cf97-ab7b-4564-9f68-235f9eb8f6a3\nb01a0164-f801-4b6d-bdb1-4ea60ac2f738\n3d8f6ba4-43cc-42f1-8552-5cecad63fa54\nbb2d9275-28be-4938-96c7-8e213f3e9a41\n76d9e4e8-4c3d-4a89-958c-a7d7e2cf54f8\nb23b2562-182e-450e-9fe6-0c903d14dbd2\nf4fb7932-bbc4-4fe9-851f-14dc3e0c5071\n0d7e90e9-dad3-42f2-8e7b-282b050b2a38\nf4d926a8-0a36-4d91-8ed9-95f73527b749\nddb49f0e-dbef-4d4f-b4c5-cd2e0ec5169e\n93602a16-4754-497b-94f3-5178b1b5c495\nff4a0e6a-2f60-4471-8c8b-3f2ce82569b8\n31f0ca2f-7c90-4b47-a3df-820d26a3003e\ndd063bb4-b26e-49a8-93f9-59ca726442fd\nfda2cd51-9c3e-4267-913a-55eac3f0f112\n5950aed1-3be2-4498-81ac-e34fef9fbc38\nfd20c34f-44ae-43ea-a023-0b113da0ad51\n321e94a6-7c81-4ed2-88e3-39d1b9a4bcd1\n1d7a14d6-0f3e-4fb3-b2fd-dd942698dab9\n3cab1e66-44a5-45ce-8e5a-2d98dc667d1c\n53a3c54d-3276-4aba-b168-e9643dbfd2b9\n0dea0a1a-dfdf-47d8-a8e0-a6b0bb3429f0\n848fb46a-42a5-4625-9a71-fe176daa4d4d\n02681f0a-c88f-4140-a0ba-eab770b18a91\na1ea7eb9-1bd7-4e55-8f5a-dc46448b7348\neaf4e5ec-1b89-42a6-8dd4-e602c6a5a7d3\n59f9ffda-9df5-4b60-81f2-f01390612322\ndeadc36e-47e6-4a07-bc62-df8f605e89ac\nafe79878-3341-4348-9255-c3ee8a85db11\n9b1bfa05-9b16-4f81-8f56-6f12a6e87c70\n4c03cf7e-b0b3-433f-9b6f-0202d932c2c4\n7a80f7ec-a9af-4557-ac33-acdb05f2fe59\ndc100f79-5ea8-433a-b665-2c6f57709024\n74ce9d15-6b99-4151-b679-fafa5589eff6\n78d6d723-5039-42c3-8748-4025d11a98b0\n00fd5837-4ca3-4899-9d96-87d5776f4400\n10603fa2-8494-4dfa-a1e9-c6428207dabe\nf7804e0b-5993-4b06-906c-d06af2cabcb5\n17e7d736-3d1e-4c5a-93ef-1b48046039e5\n28356885-d44d-4541-919a-96ef2c7347b5\n1f716787-39e9-4e70-9957-9e4bc13f6be7\n542855e6-ed13-4d35-9383-8d4a165fcc4c\n424eadd5-8148-4733-91b1-edae00841f7e\n697e298f-d89c-4404-8fdb-36af6a724034\n133b23d8-eaff-4521-9110-8b12f83cd77e\n8023cf3a-20a6-46a1-a563-011edc25a138\n1da7b43c-5dcf-4351-8e73-a6f69b906e3a\n6f0850f1-c53b-437b-b273-59870ebe2d64\n45c8ca2d-3259-456b-8c5d-6ed27df64b92\n20d684e1-a2cb-4fcd-a427-232ef898e586\nc26de68e-3910-49a0-90a7-77f5c5a032d6\nb63b18e2-d291-42b8-9e1b-3bb348bcfd30\n2a53896b-a01a-4d66-8fdc-0e1b00ffe19f\n30aff285-868c-4b0b-b76f-a42673974d1a\ne6cf9489-450e-4b6b-a137-bc0b4aed370c\n4e1873fc-102e-4f51-89dd-ee13677529a5\n96c073d3-a90c-4b77-9731-30b27eab555c\nea37c6d8-6715-4926-82b8-d8eaa0e694cc\n3156e65f-0141-475b-ac97-ed4158c1a02c\n96cd76ae-d08d-4bf2-9d5c-b47884dba44a\n6724962d-a3ba-4429-aca4-3bfde034b0c8\n6a3b8335-da15-4f31-951a-a161100149fa\n4b3e049e-4113-4fc1-8ae0-dc2447c38e6d\n708f53bf-c542-45f0-9fd7-ed37440ed5e4\n237bbc2c-221f-40cc-a22d-ff1a38f9dbe6\na70f9fc5-63aa-41ff-89e8-d5d676224352\n726ab200-5a14-4c24-b37e-b45e18dc7720\nb5e4887e-c780-4e9b-9c17-a54933803cc5\nd760823e-61cb-41c4-9486-854d33df779f\n5c96be7f-7ee2-4131-8d20-6c9b94ce9ff0\n3fec692b-36bf-4c6f-9123-739d0901bfac\n4cde2b38-f6cf-4a45-9962-a29ddfaea8c7\n9cc7fd7f-9feb-4716-acff-d621c1753b4f\n90099a17-22c9-46a7-b7ca-4ccb2d56b5e7\nb24125fd-6148-4a99-a0d6-a07009a44763\nb2844705-99b3-493e-a947-2ff64aba550d\n7693a43c-642f-4390-b74f-f1363daa8113\nec3e24d8-a801-473d-9c23-39d1be1ae5e0\ne861e1e1-be78-4b9b-aa46-9c2c1c51693c\n8defaa7d-ec31-4731-8a58-3e73f3d2df6d\n5725a13b-b701-41ec-8850-4b26d2849998\n2d73a8bd-aae9-413b-acfd-cdf3972cddb4\ne694a12d-f577-40d3-a69b-58fd365752ba\n746e0c7f-4a69-455a-a2cd-61734073a03a\nc03f53e7-b47b-42a0-8b14-0e607166741f\nac013847-5bba-400b-ad44-e722e1a0365b\ncd0a91aa-da0f-4a8d-88cc-ca5f5996da8c\ndc978023-d3f6-40c8-8de8-e0092f6c9dc2\n130dd47f-32a0-42e6-8697-8d3bee7b1c3c\n4c8f49c4-971c-4c5e-a22c-d64166af94ce\n51465c51-b825-468a-9bcc-19eaf8ef7b70\n01ae084d-12ab-4169-9284-9869fd1569d1\n18e36c7a-a940-468d-8253-844f33f0f8b3\n3a16da6c-91ca-461b-9204-f050cccc4eea\n1b03725b-a595-4201-ae65-49f8438b96ed\n6099305f-d955-4caa-9662-f407a650aec2\ndd446450-0f20-4a95-be59-0a948ee3ef19\n52d32d46-1ad1-4b50-8acd-f03f3b260c68\n48847b26-d074-487c-8ecf-69722eb82f7b\n0cde3188-38e8-4390-a921-f471f1fd1e3b\n2f871f0a-f08f-48a7-9924-9dc3a1283759\nd2f1cf4b-8dd9-4f5a-8689-3247315a3124\n2c146361-8a6d-4f00-9468-56ae386e8e90\n44373ba0-6dfd-43e2-bdb7-c6890e132828\nb8907baf-27dd-463c-8666-df36722befce\n8e4f5d63-235a-4cfa-a221-763db455585d\nb6a6673b-7028-4167-8ee1-8c3b8ee7e16a\n43213f86-e8d0-44ec-a9da-1e18a0ba0bee\n5f88b037-e486-41b9-8a7b-3252a615c776\n0987c348-23a3-4feb-b140-151d1bc26705\n3fa60222-8f49-449e-bd6f-41e9c7c9f4e9\n779d2ed4-e074-4144-8ca5-2e3d07038e49\n6eb5a2f9-f311-437a-bb1a-0439d0726124\n6ec895c5-d324-43e2-8889-0814744a5de6\nd1f23376-5b9d-4dac-87e7-cbcbe2dbc9ce\n6f5a8e48-5290-448a-a0a9-27593c0decb4\nf8cbca45-7a37-483c-a80b-88fac115ed2f\nda5eb64f-b42f-47c4-b0bd-5ded8747dde9\n31786d24-aeca-447f-958d-90804145c661\n25eadbbe-5a01-4bad-9be6-097357e33392\nc509fc46-3ef7-4af2-81eb-a68816b23361\neee1990a-72a8-4267-aa09-974206750725\n3e6b78e3-debf-482c-8295-7639a8ae2236\necf4fa08-a056-4df1-b45e-f66a3bc3d562\n5bb824ce-1500-4e3c-9a24-f902903f9692\n50af63e4-f301-4e56-a2f6-056a0dab45a1\ne24652c1-7c88-4c6d-93ac-a0fbc6c6a451\nf803d528-eab9-4c65-9665-2e595334d4d2\na5e97145-abd1-48fd-8600-4130fde1c7b8\n27d84415-392f-454b-a00f-3cc0785f409e\n084dfd3e-af8f-4075-98f0-3210c488d7e0\n44c41ceb-66b6-4817-846d-06ab3075c47c\ne572ea64-9241-49ba-9560-bfad76ed6ccc\n2b6a34dd-3a83-468d-8cee-8b4834f7985e\n45e54609-7bc8-4b69-8613-c3aa1600982d\nf37795ca-1d28-479b-a231-194ebebd233e\n9eefdc7d-3786-4dd8-b2fa-edea2269530a\n612b6f43-9dfc-4d9e-ace0-76bb37004e61\nb7f37977-a282-4846-afba-e1f8ed078465\n929361b4-2634-4c00-9b6c-86c88bb01ba5\n3807deea-6c14-48e9-b5ed-c7f112efd829\na4c65f78-4f51-4da2-b8f6-e1d89094b696\n91e401dc-1a72-4252-91cb-b7b86f44a45e\ne39fe393-97db-447c-a142-544f575139be\nda0c7a20-9728-4d75-84d4-e7917b456832\n7863d589-2ed8-4df5-b8bc-b1ab939cf6fb\nf585916c-9b93-43be-9794-f292009bda95\nc5a90868-e4ca-439d-88fb-1cc63dbc115e\n75782569-a484-4a13-9991-5d4e6e2225d8\n23724ce4-3be1-48a8-99e3-46a0c8723f2e\n0b5c04d6-cd6a-4f72-acad-5ebe15d05df6\n71c2df6f-e1fc-4b4a-886b-de6f133f342f\nb51944b0-8ab9-48c4-b7c6-3c694e019b8d\nc3004d79-b65f-43f9-8150-bc612c386aa5\nfd15ddfe-c775-4519-a864-13c8ee828191\n1d960599-6f71-4078-8bea-6ecf17121ce1\n2cb8e3d7-da10-49f8-9615-b92063aea6e8\n25599748-977a-46b0-ad10-ebb98dc12c44\n3c99c5e3-cfe2-46cb-92d0-99edc71f4f4b\n60f0304a-d02c-4c0f-ad62-695a092864be\na2ff08b4-f843-4701-9f67-94ae12fee66a\n0374623b-158f-44ef-abdc-e5721f7fb40e\n2a3ff5b4-fd7b-4203-89b6-773e455e46a7\n00bdb580-49d0-4f61-bd8e-e4855779b761\n3bffe0bb-ba6f-4106-829e-07b48f4e20b8\nbfb6e65c-4dcd-4332-a911-1e511f72fbb9\n5c9121bf-201e-4d45-a76b-f69bb4e1a742\n7b823e02-b565-448f-8b66-a13f18106416\ne7c7b552-2659-401d-9664-8d2601ab4b76\n23509088-7e24-4166-91f6-cce3c8fbd8f5\n93645490-2c64-4cd7-b5eb-4f6d65bbaa2a\n093645c7-4e0f-4f80-bc0c-d03a34104407\n183158de-d7e7-4036-a748-7c70fd82b54d\n54943e81-dae7-4725-bfc8-bcbed5d1d08d\nc67ef0c9-c3b2-4d01-9db4-ab99aa94fe84\ndf07e7c0-32e7-4bf6-8f4d-2fd419b9ec42\n80d99e74-0f99-47e2-810a-f519fde62884\nc180f481-92c6-4503-876f-c351c376c90b\n2f133541-454e-4fe8-a3f7-d40bb856989a\ne06d4910-f2d8-4a0f-9ddc-98f386e229a9\naaa71cfb-41cb-4bd3-86ea-3cf29778cb0a\n4be1120f-8823-4a48-a496-a7ea048f1f12\n45a2587f-81ae-4810-84f2-5bd714b085c7\n2890f766-8a1b-48a1-9053-e480f32150b5\n397ddc05-eaa5-47c2-a0ec-77f19e6df5dd\n975e13ca-0597-4068-8dd3-2d4a03842843\n63f9cb27-f44a-4402-88d9-80908a772f4a\ne9289d3b-8bb9-4b10-82a2-f9f16aeece2a\n068b41f8-3c38-428c-aeb9-bd8f6ffacf66\n2603b627-c6a4-42a0-9c5e-ddd47ded4439\n2392e699-30c5-4317-8f8c-a608b3e13f0e\n45de8da7-02f9-4f25-9ada-ee05752d8212\na4801c45-1185-400c-a467-2f24af6ee971\n23d29b56-101e-4dbc-b46e-cccf8f23e932\nd3b4b784-c671-4711-ab8a-98681e5f776f\n5978e454-0085-4047-8f5b-a2c1a501c02e\nec36c4b5-864f-4243-8411-1061218b9068\n90b35d1b-278c-4a23-84c4-0e22770e0f35\nece998e0-0bbc-4329-abc6-f564542fa3dd\n105ea32b-5124-4ed9-92e1-ccd20d86be6b\na2949e1a-4a46-4b28-a9ee-1674c9a59fdb\n22fca9a6-6b0a-4589-8da2-0eda72590786\n18b1d857-d7a4-4e29-b464-773d7cb673a3\nbf405548-2602-4231-95dd-4b41f2524068\n3f1faf9e-2ab3-466c-912a-582adaed3ba3\n5962330e-30ee-4940-90f5-e37f95ed4bf2\n4b6c02c4-c95d-4609-880e-37f90abc6ddc\ncdc6fad2-cd6a-46e9-af91-f398e4c9de86\n2651ea19-75ff-4583-a29b-d18ee6e87772\nd07c09e6-c383-4c2b-bad1-ddb5c4cdedd1\n26c62f8f-8d91-4683-922d-9bbad81fa9f6\n6dff8694-f14f-46bd-80f6-9242507eb502\n526d46c7-faec-43f2-986d-dcf7e054feb0\necba2689-18a1-4d78-b01d-eb72095447c9\n0a2a7b64-7d6b-4d4e-b42a-6fcab9e50712\n6c931636-b67e-45a1-ae57-1dbc638de646\nef4fc625-21f4-4091-bcc9-f5ad2105b0e1\n65a4bad4-b11c-47d1-9775-7ad1515c075e\nb5933648-3b07-4af4-8d49-573d0e77e79a\n57ea1f52-8ae0-4e89-846c-22ed6334280a\n6eef2be2-1405-488a-acd2-26797d906311\n4f3723fe-9a3e-4bf1-95c5-539167685c03\n35da1e59-d70e-471b-a843-8adebd0f704c\n0406057e-70bf-40d1-a24c-f95e62309787\n27e72d95-db9e-4889-a615-ace9cdedaf60\nb8483a6f-3a82-42ca-aed4-1576d7e3a395\neb8f2193-3a8a-46ac-8334-1e225dc6ef71\n4b0236f9-b217-4b30-b6fb-975180d7d564\n8c929a8b-f067-41ab-a88d-ab9436bdb0ca\n283a294b-06b4-4208-b3ef-604bf3c3eaf9\nb44ed013-d32e-47c8-b659-703ef7355397\n00cf49c0-c02f-403b-a942-f31b35738edd\n10908b43-2df7-4e3f-be35-15999b1e0367\n7bce7bd2-eb49-4d1c-b066-f71fc0ada978\n55612707-11d9-4d88-b0f4-203f401f2ce8\n6061a93a-ca8f-4c4d-ad29-48bf755169fb\n5844b4c6-1ac9-4598-a732-88ef0af9a269\nfe1b692c-31ac-47eb-a701-cd4e02a6c906\nb90064eb-f7b7-4c89-9a45-4fca5ffacabb\nfe17f1e9-1a04-427a-bbf4-3fdaa218ab62\n5e545926-c65f-4dc4-824c-cdde58a688b2\n9a594af3-d981-4203-bec7-0df78f2041fa\n6ded3eab-1b54-4acd-b5d5-6e75978978ea\n2eb9e17d-4e66-4254-a5c6-e0487360eae0\ne0af4fee-4731-45a7-97e8-e1c96787f696\n826a5e4c-7c01-4d29-9418-cef855b44ba1\nfce8b0bd-ffa3-4a6d-9de2-c55cd5cf3143\n37764080-3d54-4280-8a63-a7250fe95f19\na5defa99-3c9d-4ffa-b5cd-f7cc3593e1e4\nb3dd5245-6426-44fe-9720-9e71ada6e1ce\n82980d20-33ea-44c4-815d-5e7174dbf6a9\n0f534ae0-bcd9-4230-ba9c-e6acaeb9e033\n8f7e715d-b68c-4818-b1b5-1598008954bb\n084b440d-e08b-4b42-84f6-07b09d7fa57a\n589990f7-3e6a-464c-a702-fffd494d1233\n1cfd7eab-519f-4b03-adac-03721d066642\n2184fa0c-5078-441c-964a-37da46254c52\nc3f3b38d-9c0d-4658-856b-899f747170f0\n56153531-d3cd-4619-8e62-4f5a1b77d138\ndbf857be-ae84-464e-b15a-3b0a03120ab0\n94ff8d91-9d10-4512-bee0-93882c34c357\n6cbc95fb-fa61-4c06-8612-a1cf52954d4b\nafc0d632-fe4e-40b9-8987-ebbf2e5e7af7\nc1569847-c85b-410e-871a-07d8cc2866b2\n93658cbb-7f84-4b92-8e46-0ef02e3f9b0b\n453ce23c-e25a-45e6-a33b-a9237258bc70\n0d751aa3-a412-4f93-b4bb-7427025e15f2\n3e86c008-c57b-4c2f-ba55-7a71a49c1bd6\ndf1f139c-d2d2-4960-81cb-70c71e7a5211\n05d43ede-a353-4d78-a751-7ce3ed399cec\n0f68dd5b-60af-405d-ad8d-0970def5e51c\nbd349ee5-79e7-4d00-a267-bb7e08e143b1\n19710e4a-fda3-4759-b57a-31047befdc64\n0625b70e-3c3d-4b1d-a4ed-a556400e931e\ne28c27db-915e-4a52-b577-1f3e47b35268\n75890088-1184-4aa4-8f10-8cd4bd11a6dd\n70b3c6d3-aabc-449b-9a37-5a87131ed28c\n89e4e751-3c50-47b8-87c8-4c3cbe407c40\n14903a28-52f9-44e2-bc4e-5b05c126a842\naf4c9dd7-6451-491a-9292-f2f73bcf4d86\n340e7bf2-5a87-47d3-910a-e70bc6cf3a9f\nd2c14d7f-eaaf-4bec-8242-53f0e3ed9e36\n715857f7-c034-4892-b5a1-f5bb6d47a616\n09e1e6aa-36f7-49e8-8ca2-526c30c836e3\n811553a9-bbc1-43b4-a462-b0388303121f\n25380195-f7d7-4134-84ed-41b29e340bcd\n1e664545-43cc-414a-8fc4-05902cf5773b\n639a2d61-d7b7-49ad-a833-ee5d3aeace09\nabb6ebf2-49fc-4e96-8e03-3649dbef8f43\n9217d82c-e10c-4e62-8ad6-18c6db573898\nce05b5ed-34f3-481c-a23b-c36f61dbb101\n1fa32223-3e04-4fee-99a9-decedd2a1e2a\nf6617df4-91eb-4c5e-9b4d-726903f72d26\n8e27fcb7-58f8-40af-afb5-bb475da526ab\n7bfb383a-1adf-4d8f-870c-3a48fcdfee43\n0079d91c-6c80-4e04-b758-abe81344acea\nb7f1293f-c43e-40c5-b7e4-a874e463bfe4\n9a7c8d73-1639-4928-b5f9-deb40f29bf4f\n30120503-d070-4447-978f-1d36e0bcf65b\n8feddb4e-22f9-4776-b3a9-cb0aa476ada3\nb7875214-9d1c-44a3-8190-edfc7706b1fa\n2c4f978d-2d2b-4cb6-a189-0a504acbfccb\nec755819-65bd-445d-a691-6007062a1895\n620acfe2-ab91-498a-9ac9-8b921d06fe97\n23e130b7-3761-4471-8f7d-e8e3f13447c7\ne88ff476-cf8d-406e-b0ab-09989b867440\n1bcdb7c6-e691-4b7b-a0b8-4c51a764b741\n1e6bc286-5941-41c2-bdae-02e7fd389960\n5ccb1f57-67d0-4cfd-b4f9-f2bd623912a9\n39ab8458-a41c-485e-a8ca-c580d1a7c2b6\n50d183a7-1356-4c20-878a-76cb08a450f9\n9aa61856-5832-414a-8775-b356c0d38ca1\nf24038d4-320b-4a68-84e2-ae0f55bff1ea\n8326647b-cd10-4368-b675-046b601b7b09\nce902f15-a71b-40fa-9ade-5a6c08e9b0eb\n48be9535-b08c-451f-916d-066117dfe665\n99341f58-ae86-4914-a5d5-f45bcd2eab22\n29e2ffb2-baaf-4b21-838c-11de2273b8dc\n2380147a-aa44-4322-9188-ec2cc48ae4cd\n1650fbff-11d7-49f0-9af3-453d9085ff37\n0ff09137-da5a-4eed-888b-e6e7b35de590\n770c6aa7-73ef-4252-8d9d-891f034f2241\n13685a9f-bad2-4cdd-a107-fec1a9de331c\n18b1d0a8-973b-4b5e-9ac7-903c62cd3c7f\n78075d1e-6130-4f58-a558-ccee30738e5d\n23c091ae-c6a0-4dd9-b7a0-5c51f473bd68\nec75613c-230c-4684-858c-d369032de170\nee3415b2-e1eb-42b7-b73a-36018f34c0d6\nc259b557-3e8f-45a2-ac5a-510972de197a\n96dd26e6-a971-432f-a831-82217b8c0ec7\nae09d7b9-efbc-4e22-ab8d-642768db4628\n49a7d2f2-c7f2-46ca-ab45-5cb9f6be8c11\ndeda30b8-3c89-4d6b-9043-c637e3afc33a\n06b6791e-90cc-4b70-a93b-d5104050cc8e\n4f906034-52af-41f7-bf75-b8122e5d1294\n5ddc814e-c60b-4812-af98-ed076cbc6fe3\n86407212-2620-4ebd-95c0-b8867bf7bd32\n0de6d8a9-9154-4328-9058-23eab0dc8de0\nf8f140c0-99e2-4692-ae82-54fc39c0b082\n0523bf5f-8780-443d-bc07-89a40450205c\ne7c4f273-8115-4485-bfb1-72dfb15398ca\nead74953-53d0-43bc-84c4-9473b303babd\n68f58567-bd0b-4e7f-b9b7-f325ee3c933d\n0c1a9910-8bc7-4b01-a62c-1f690b89d46f\n5fa7fc63-a450-4a9d-8732-5ddbf7869d6e\nb5ac4617-ae8f-44ba-a562-47502c7cc495\nad9cddcc-2dd3-4176-aca3-2fea60e1462f\n1276cd5e-8118-4af8-b9c4-35e85f851eaa\n8a5c9347-dda0-4221-9a06-98383c26b3b2\ne5f9858e-9ecb-4561-a024-c402b39e1d35\nf7164bd2-158d-4e92-9e75-aa3392ee6bfc\nd3b5e32e-8756-4f7d-85cf-f3eb8460d3d2\n8f316d21-e3e1-4302-8589-69538d060d35\n108f9a39-2fbf-4c75-910e-caf283fef24c\n421399a9-2c69-468e-8cec-bf447892d798\n25b2506b-9413-4ad1-bce1-2afd0911752e\n52e07431-3e6a-42a8-a183-5261844f39f6\nb143e875-290d-4444-953c-b3d0ff647f1b\n74fc93e4-681f-4477-955c-f660e237eb6e\n4b9457b7-ae56-4237-9353-cc066d72b003\n87addd8e-13ee-471f-a96b-0924c901f077\nef0a398f-7963-45b1-9f42-94b6cbc7c843\nfd4b1952-35e1-44eb-9d77-b97114170f32\n9cd95743-2fc8-410f-8d54-99061846092f\n4a1ae6fc-f923-4d99-b643-24f7915adc0d\n9872a519-c828-4e49-bcca-f98a5a057424\n9b77a981-360a-4095-8ea8-59be81de2a4e\n23cb4317-738f-4e0b-8a31-86d0a480a591\n7cc70d84-8c79-4b71-a09d-1c0b6e9c34d5\n7f0dc541-eba8-4772-961c-49a0a68ee1c2\n4941b3f4-99ab-4ee2-a4f8-73c9cb11a2e0\n84463a1f-3643-4c18-b4e2-1c2308a27c7c\nf72f731b-ac67-4d91-97a4-c34e09bd0fed\ncc0c3023-56aa-4f78-b59c-857028e507f4\n8caa2233-60ba-4180-8c76-7cf38b46b847\n5faa29f8-3f3a-4a87-9d01-d7746a5426d8\n1ae14fde-28db-4563-bf01-1d810f380a23\n6a816c67-109a-4303-af22-a6ce704d17bf\n61b6b468-a404-4426-b8b1-3869f352c185\n3721ace1-7ac6-4679-bd30-2b28d39f9a1e\n738ac069-d84b-4492-b896-8ad63bbb699a\n3a310a11-4c11-489a-84f5-3a5fdacf0e38\n51d18000-9b28-4d4a-8195-e934a4cb6564\n7f9b2f84-40fa-41d8-807a-ee3bbd834cb0\nf87a8276-0391-4066-84fc-40ec6281bc83\nc5f26863-cc58-483c-a0dd-0940aca0ebbd\n31e482a3-85a2-4ba5-bfff-c077151e871b\n2570cc58-440a-452b-aeeb-b411e425be9a\n0084c35d-357d-4c72-a4cb-e5a78415faa4\na0c6bf1e-19f1-407a-8e6c-bab3574b4439\nd7e2f217-fda1-4b58-b434-e9beacc9e070\nc1b0a496-a4e1-4a81-a06c-4b16a38e0dea\n1037f1b2-8a01-42b5-8cb0-645c88e18f12\naf88b09f-d247-4bf6-bf46-cdfe87366b75\na9a665d8-e595-4814-9bae-f765e242f3b9\n513e9343-3e8b-4acb-90ae-94e9c39477e8\n93cf4df3-c642-4ca8-bad4-9b73c459c769\n95b51da2-1770-40dd-adc4-4aa3e535dc6d\n707ab5ce-c1c8-4f20-bf46-094181738ce0\n0ec8a515-4feb-4106-b37a-7753d0e263e0\n416e21d4-44fb-4589-93b3-79f42c3cb3e4\n1fbc4907-2d46-43ec-a7d4-7fcc31172fdc\nffce88d9-08cb-49d4-b012-66fded8d9891\n36057aee-4928-47fd-93a7-9b26026653b0\nb3fbb459-b642-4358-9ef7-fa02d30e9d60\nebad10ce-9f5d-4c22-aa19-70013af9777c\ne407358e-6ac0-439c-a644-8d0de996cf3f\nc0ba8957-0867-493e-8d25-08480e598a96\n98cf5fd4-4674-49dc-bffa-13274718b07e\n1932ac37-ec99-40d3-af9c-ba9a367352cc\nd13a9083-9186-4e3a-86b0-0050bab79d6c\n1accefb6-0b5e-4e4d-9495-7074a8d0f25a\n7a9b5904-da54-451b-b26e-1b92f1c64d9a\n77d4c40a-b248-4d56-81cd-f419fd3a196b\ndcc4f048-dfef-4284-9190-795a04d404df\nbb000a21-9f99-4561-be62-3f83d63016a0\n13fe797f-d77b-482e-bc51-e94bedd5e708\n22b1dda0-3bff-41da-b32e-806c8cf03156\n64534f62-6e64-4cc0-adfa-8332ffa7fc04\nf1dd0be2-678a-4071-83fd-2dd66e496885\nbff582cc-d5e5-4853-bee2-d71bde57b235\nf596f0c2-c200-4701-a353-d3e9aa0d480e\na6c82141-f7e4-4ed2-b245-f1667fd051f7\n82692862-19be-46cd-b100-65d3b66ae9fc\nd419fcc5-d191-4c16-b635-1e02df149bed\ne22f40b7-3904-46ed-bc4f-07e6413c72e1\n3454ed1e-0cae-46c5-9848-ba18f667c10e\nf7b79a76-5df9-41b3-9db7-0c82bafd058c\n7789bc9b-fa0d-4971-bffc-b1631341023d\n308d7986-b216-429a-9edb-e56149340500\n2ce52616-e8bf-4adf-9a36-9968c8dab7fd\nfbf48fda-9e16-4138-b874-a9eede4d70d5\n1654ea55-be73-476f-8991-70d37ffef6a1\n26f8276d-c5d2-435a-970c-10b6dfae1ed4\n616f1987-2b10-4840-80f5-d247028be00a\nc8a02996-8bca-4017-b01e-dd526e044701\n4a6c5592-6865-4a25-8f58-297b6f7807fd\nec54b49d-a769-4715-848d-bff4fdbc4cd8\nbcf5d65e-3e5d-49da-9971-e8b61a112e79\n026da9e8-61ae-4bcc-ba5b-79862b88d0cd\neb46aada-4d01-4414-88dd-890e7152282d\n95d903e4-0332-495c-bcc2-34ee1fcbae01\n55e125d3-5048-4073-af85-c129597b5731\ndd77c32f-5c1c-47d7-8aaa-7b1a0c932595\n0f379ac8-bf38-47bf-a1b9-b81f38d7d877\nd3767d02-edc1-4faf-ac43-7f94d738a249\n47fc795a-9daf-4630-895d-ba9afb926d90\nbee1922e-8627-4634-bee0-9c4f5923811a\n0520887b-cbcb-44fc-8e80-f2357ad58b7a\n528806ef-dd3b-4393-8607-293b4bd0b98c\n5b74e282-58b0-47e7-ac26-798e4d1282ff\nde8312cd-dcc3-4fd7-a530-9ee886c006ac\n0f9c8bfc-2e41-43fe-a3f9-db3785a4f2e6\n2725f5de-6fd8-429b-8dcd-437e7ac795e9\n7dc57e75-b664-4fd1-bbe4-44465984f453\n2199bbe3-b194-43a8-a5dd-29226ece54e5\n39cf80be-5f05-4041-8ddb-eea8cf2f78e2\na8765a8f-eab2-443b-a0cb-20f9aa1e0923\nc2b8cd11-7a50-4694-bf38-9ba6325fc372\n4680cb44-32a5-4537-b43f-e91906dcfbd6\n74ab0266-c4bd-4f87-bdcd-d53a3ed3a6fa\n6fe5690e-ac01-4d9d-89fe-ef1a5e6e594f\nbc96592b-51e6-4e88-8991-223403ac0600\nd4c9a21e-14ba-4d53-9ed9-90255c8ea905\n5c23fe0b-b91f-4941-819e-716d546b0c21\nb1bed8cf-a5a3-46e9-bb50-2ed718542fae\n17bebed6-6d17-42e5-8b54-dd69bbfa2892\n94069c4f-b445-4649-8287-37b854210e0b\nc8821ea1-f2b1-4626-a155-62d7dfbd53b3\n18b9df61-6b5a-42db-b392-3b9265966668\na11238f4-6310-4921-a9ff-88e439eace4b\n76308a66-9580-42e5-82b8-10be248da15e\n085c6ec7-b954-47a4-9a3c-6ca98a21bf02\nefad7cf8-4b5d-423e-ab6a-e6d6b2131035\nbe2c8ca7-990b-4992-9d5f-bf4d6e558190\nacf60e9e-abd1-465b-b423-bb293dc12e42\n901c36bd-6682-4c93-bd3e-abefd4fad006\nf87dd6fe-1385-4590-9f5a-cb8184bf9c06\na1073cc2-a890-413b-9ca5-939e33b3b216\nd9f01762-8347-4021-89ef-e0d31fbefaf2\na8a3da6a-8e16-4495-bfe3-d37fd62b1dcd\n3113421c-099e-48f8-921a-ab30ddfcb8fe\nd94f5e3a-5c6b-45b3-bef1-77ba1b319b06\ncc4b9d9b-23b4-4a85-96aa-a15d5a6ca16a\nd55437f5-ee4e-4511-a814-a430fcf2dde5\n88dd2a48-37ce-4046-a129-3d24ffad36f9\n19468aa5-7f9d-426d-9746-c1e4bae067a7\n9a40aa2f-aa0a-446f-83e4-a7b1274baf60\na8a6d87a-7229-489b-9628-7a3bc0efb214\n3c6eac33-cacc-4677-a1bb-a61ba6b1bf67\nd927db3d-5aba-482c-936d-56353fd5936b\na508350b-7667-4a81-9224-1fb2d4181059\ne5ad9ace-17a4-47da-8804-0fccc006c56e\nc970d2b6-17c9-4dfb-a99e-fff6a5bf2000\n5a8bd709-17da-44e6-8584-b49c95792b01\nfe1bd85e-557e-4687-8aeb-d5813c5f7736\n3264b803-90af-4f14-9807-8494bc865ffe\n275eeb4e-025d-42ac-b79f-33988df53fbf\na5ec8968-ab60-4cc2-b0cc-93f684e16e3a\ndfaa4f4f-970f-4a25-8b67-3b9de20a53b7\ncac8ce8d-f701-4245-ad2b-b6568b8a2ae2\n9f7c8550-7f12-4a6b-bb5a-4231360d1147\nfc843ff2-d334-4238-a2c5-cdb8c7c2d4db\n60c143f1-ad76-4390-a867-123429e79f9e\n743cad1c-5ec0-442a-9ee8-10f8dc05e2d7\nb70c1e96-9958-40ca-b322-afe442fb8f99\ne4165635-dcdd-4130-834b-c787fcd2c36a\nf5d41a9c-bf9e-44ef-8ce1-bf22a649e8d6\n39e0d982-d9c7-4374-aef0-12ca84207097\n96c874ad-56dd-49a9-991c-ad4f6ed42b50\n7b0fbd90-4b02-4ab8-b0ad-234a777f7559\nfad0d44c-4d48-48dd-ad77-b202ad98556a\n8b605c29-b34a-472a-a5ed-7964c4ac72dd\n2ab97f5a-4c11-4b93-9085-028aa1df98ce\n2d6db4d7-c1e7-45db-99da-4a62dbfeacfe\ndd99ba22-570a-4490-be4e-924b8410b4b5\n50f53ae2-5330-4d62-829e-f2252680c1cc\n81b979a1-f73a-4f97-b411-b50f7ee62fad\n212561d3-4b85-45ab-9d4a-dec7bfe1d755\nf5d3bb9a-1d13-472e-b27a-e989f20151fb\ne6f26bbd-db54-4f79-b1e9-5b76c899af77\n80a08999-5247-458d-a1b3-167ec997b58e\nc79267fe-90fa-45f0-8424-9ae249a46a2f\n04741c37-7b51-4e51-81c1-5881bf275ebb\nfb04dd23-598b-40b8-a2ce-0f3a09ea6041\n53cc1149-a57c-4d72-bcf0-1336c40e01a5\nfb5d5038-3575-4b1b-857a-9d404b8c48d0\n8af7eb7f-4868-488e-8020-fcf02e00bfda\n2ec964ea-7633-4128-bcef-d3a667a9594d\nd0838a8c-68ad-4b57-91de-5d55da57add0\n6d62b2e6-cf8b-4e87-a5cb-c244798ef2c2\n33254c54-39d8-4379-85ee-8caaf64b4072\n09df2428-79b2-4996-8334-7200d80e37b2\n2aa17df5-6e7b-4c2b-ba2e-1397538e84e6\nb860106f-9563-4be7-ba96-b6196b17d30a\nd8922e3f-f2e4-44f4-9325-04aa93cbe0c4\n0888d063-bbb3-40a5-bcb0-dd7c162e8af9\n41a22277-aa18-428b-b3db-84048085abf0\na3e0bcdc-0c85-44a1-9875-9fffb3735d15\n4befa06d-f011-4dd2-8c1a-6c20bb0a58b4\ndf98456b-b83e-43a7-bf70-c1bd2fc86b20\nc8c3cb2c-eb4b-45c6-9a3a-869febdaba78\nc52f2328-f953-4235-8153-ff57d9ad932c\n4c50a513-d106-450d-adee-78bdb7c5ecc2\nf1c8d53b-43bb-48e9-bbc2-4b971a3f39c0\n05d3e6d9-8797-45b3-998b-954263f31fb7\nf9d93074-2b7c-4a1a-a127-f318b1e0b7ea\n27c93ac2-f1d0-4fd1-a8f1-024718d25100\n392e1a37-df21-44ca-8c4e-03d35ec25722\na04d1406-4a46-4543-b709-6460937c6bed\n7a6af9f2-7b63-4d7e-9d89-10c3ccee328c\n54c0399a-d94c-4bd1-8402-edd1ef44484f\n1c81651b-87d6-4b2a-a750-44a29ee4d6fa\nbbd6893d-8ae3-45c2-af23-b4b5dcd5de21\nf3fa2123-3c43-4609-9033-d4e8a9b8fa84\n9990ca6a-dad7-4123-9452-b598ec3785e9\n9f48f7ca-4e81-492e-945b-4c97ca80dede\n6a781f82-6a9d-4ba7-97eb-f669179cf5cf\n71a68593-cde2-4635-b7d7-7ff3aaa91436\nd73c9d02-bc43-4555-a778-b3f692106904\n0f18af7f-4ed0-4832-abeb-1e4f6b0a9cea\nd39db02e-020c-46ba-90bd-c7aa3ba30609\nd42ad6c2-d25e-4710-9120-0889084de4be\nffd9dde4-1976-4f95-8b50-cb1ce78efca1\n9449c034-48af-4182-9a34-8c0c81f6bc2f\ne770fef7-0a84-4d78-820b-246beed69051\nce59775d-2e10-4f49-9039-35dc22d48366\n6479c3c2-b1e9-4eb7-ae63-8873bf5bcbfb\n77ff21f2-34f8-47e3-8779-554d54feba26\nde3d6d98-aa1d-490f-bf49-3dd40ed125de\ne4b0a780-bd58-4899-ad8d-b7b80135d9c0\n58dfbb14-02c6-4046-a3ec-61daa57b3154\ne08f115c-de52-464d-b4f6-d50a27a57225\nd4789139-4498-4145-a8bd-2ccac9d15670\nfec699c5-d280-4192-86a7-ac12f949be09\n4482df65-cf4f-49ea-a367-4ddf35259fb4\n0ca3b463-f790-428c-8c45-07076f278929\nc6d1c46c-ea5b-4690-bc1e-516142712b33\n643429ad-51a6-4da6-8f66-0f0cf433d82a\n6fb3e3fa-9740-4e81-a4a0-ad7bcb6353c7\ne31954ef-8120-40e8-a637-7e1ad1da8d0c\nc23e47a2-6e90-481d-af4b-3d7e7fac05d3\n978fe154-2348-4d82-88de-c222e68f454b\n217bdbd9-cae6-422c-b079-ed45e306c30d\nfb8cb5cb-2106-47fa-b898-33a75d51e7c2\n039bbe56-7cc1-47d7-bf93-9e122944f078\nb92ef148-078d-4945-b179-d659ae038dc4\nc7cdb795-52e9-4765-a9f3-9ff4fc24cc97\nad14c654-0541-45bc-b435-5713c96deb55\ne4d775a0-034e-4564-9a7e-e76cd0d5363d\n8eb8466d-9d23-4157-be96-227d47cf9680\n956312e9-e329-4730-8935-35c4d8cc68f0\nf5e96b6d-4ce0-4653-8ff9-8d4755023cfb\nc9ea727a-a37b-4ea6-a545-dbca2fb358bc\nb27da6f7-7778-4469-bf9f-48d8f02d6499\n71f9f45f-a21c-4de3-9129-eb06aeb527d5\n953a96e1-49c1-4687-9e9d-ea8f997bd1d1\ncf49eb99-389a-414c-bae7-ab07aea746ef\n04dd1626-f2b1-41c0-b6f9-c49ba8cdb161\n08f5612b-53f8-49df-84f6-10067598a34c\n0befde1e-75b4-4bea-9b7b-a29856d05055\ne43bbcc5-2488-439d-9648-76ac5f1d103c\n0d48ea22-909e-4e43-a8a6-85ac5dd37289\na740ceef-d9ee-4962-b65d-f816508ca7c9\nc3efd7ab-0b6b-4035-a2a6-e7dcb12e4e3d\na24f171a-4d2d-4106-b49c-0b555a3861ab\nabf468a3-47a5-4495-9eca-5c786d157dbb\n2831c256-2f50-451a-b8cc-260973273913\n5a2affec-417d-4355-83d2-57df47396f09\ne93acc0d-0af8-46b3-888d-cb9fe24b4b94\ne61ea874-584b-47eb-a4f3-1c73313f7a63\n45d829fa-5d43-444a-9d93-5a09ff27b046\nfc25c989-d52c-46f9-90cd-cead5fa3d11e\nacb25956-2bb5-4fa3-9a7a-201fe81c3e17\n5d0087f0-eccb-47e6-a256-866dfafb69af\n471f97c5-5ad5-411b-8c2e-fbb95a30c227\n4f6dba52-411c-48bc-9a24-de3c970ab05a\n563eb5c4-667d-4bb8-9496-1b67f4e397e2\n0049045f-43a0-4f26-8e89-580755727c5d\ne92c587f-265b-4e84-b24f-4e7e7c684302\n153a9afa-3e74-46c6-8ff1-dd7a9417543d\na2fc3a59-7be7-449b-8ba3-5a043cd21312\n9f29c728-1d6b-4531-8b23-368c7a69408c\ne362c486-8b6c-4088-8841-3a54ee79cfa5\ncf7191b6-5a45-4c25-8405-fed66b76e4b3\ne2bc3c27-65d5-42f3-b589-f7dd6d34725c\n14d4d6a4-ba90-493e-bbba-90b72c6f0dbe\n808ce834-e1f5-479b-ae0c-5359c27a6a75\na3df37f3-4966-46af-8df7-4a8031dacc31\n349b82d5-3317-420c-8b8c-826cec5e4362\n6973ff18-044f-4e97-91d8-d58a0f7ad783\nfac13935-b532-4133-93c2-ec2bf6a1873b\n7de2fcea-5f5b-4e92-80c0-4150f9036c99\ndee699f0-978a-492e-958b-2ec04d02edf7\n6bfadc35-0770-41b7-b1c8-58074482ed7a\n2bed82bb-c99e-472e-a3c8-06adadefc92c\nc8cf026d-324d-4af4-b609-53163e565f47\n04029ebd-124c-4865-95a8-6fa51477bc6d\n817341e8-7099-46e0-aa74-0dbf32d69758\nec04d54b-8e2a-432b-94d9-bbc11ac05360\nede1f1d0-982a-4b7b-9611-aeface3c2067\n2f6a7513-acea-47ce-906f-89860aff8fa7\n0f227f5f-8cda-4fcd-932a-28d2e8f3cdb3\n6aac7bdc-b8d1-42fa-be22-ac0a394e1a52\n37a71d36-b309-4829-a186-b7f21606db95\ne6b7af63-f3e1-4b7c-b04a-7169dabd1b7f\nf5dfa6c5-8963-4425-b4c3-4034ec52fa58\na457e1f9-ed39-4bed-acec-b764230beaa1\ned8d5b23-347a-48fa-a6e5-f89c3349c5ed\nc933f67f-27e1-463d-a4f6-2dd813e34634\n598df1cd-cc9d-4184-81a3-f04b56332073\n17637855-e7d5-4523-8b4b-b66d07eee53c\n30bf4b4b-a980-49be-ae2a-413368672b33\nba665548-aa5f-4e62-98a5-e595aad457a0\n0b38d3e5-76db-4519-96e5-869bcf5b9c64\nf22d3ba6-0ff4-4f15-b1a9-f211c06a21c0\n0e5ecb63-445b-4cf1-a97b-e9af159a33eb\n1f36ba18-a8f6-4e1f-a40e-1d847297f7ff\n21750548-a87a-4b4b-9967-398db904a98b\n999de6fe-e21d-4480-b6ee-ab503bf97b89\n258425cd-e9ea-4f88-a29c-baa8727cb319\nfbaa69d0-d10a-4114-8588-a2e275c307af\n64a86dfe-7608-4a68-b463-acf04ed855a5\n60e760ac-1646-4bcb-8734-81524e302d2f\nb2fed43a-516d-4554-9577-a28c147d1ec8\nbe738178-6e70-4803-94f5-dbf6b845e457\n35d91756-27ff-47a0-a996-5b022512529d\n1605c2fd-ddca-487c-a13d-7b26bc9a819d\nf247ab86-fddd-4777-a47c-2e41c3c3ae1c\n58c95211-a431-4160-8e61-e00ffec5bfe5\n2af3f4db-0832-4218-bfa5-21cd28440585\n03a21251-c27d-4007-82f0-36775fa9e727\n27a7b247-6928-49d3-8a76-afd559860952\nee2966fe-9810-49da-a4d6-89864f90a1fb\n8f344ac9-ee60-4e9c-9411-aad17d7d451c\n63b82f19-99d4-46c5-9c32-21b9e5913889\n835fc3bc-7928-4542-82bc-c8bfb0b900f9\nbc97f4c5-158d-4934-8f46-d27a7e8fd934\nba515cf8-414b-4a17-a0a0-bc7b04b0167b\nbffb428e-80db-4f34-ba63-24ee5bc670bc\nd001f4c3-90a0-4d82-b92f-42e65ea055c9\n493dd52d-3ef9-4ca0-bd76-0317a28fefac\nc23af66b-68f2-4dc1-a999-a2dff4ef4b54\n7ce9721f-4558-4c39-9127-27a3e58a2f4c\n1a09607f-0dfe-4098-abdf-88c9aa8fea9d\n01f66783-b14e-4855-a965-ffb2e3e3234c\n94eff550-bf95-401f-961d-90c93633f302\na8f29c9f-89b7-4682-8a54-eb1217a3e63b\nd858f792-8fc0-4358-8b45-ce0be9787b90\nf4d405e7-e6a5-4ed7-bcec-2dea3b08a70d\n84a11045-b561-4000-aae7-cec455cba2e5\n2097e840-30a9-4149-a558-cf1dfb28da6b\ne0fc17a4-7f4e-4eb6-9f49-a2de2534d8e8\n494af438-278d-49b2-8d41-61369cb2cd2c\ned045646-399d-46e4-9dfd-ec34c2ddc5d0\n1f0ee185-7bf4-4814-8872-d2ab1ee93bce\nfae47d28-4098-4463-8600-d564d033443d\ndc7a2af5-a0ff-4561-b92c-27d2e68f4c00\n8d4963f7-465b-49fd-bbc1-c45997c6b7c6\n714b06e1-b2c6-4643-a2c6-f627f085da03\n1a2079e7-da79-4c67-a4cb-d9105beafdb5\n86722f70-8e63-472d-a5fe-12e06a66ede8\ncf9aff29-30a9-4b2e-b3a2-6a768f31d5f4\nfd89e160-640c-417c-81e7-17242e5639cb\n9e0d82c8-a045-4246-a822-5fa74824f222\nc2765649-0b1a-4720-8cef-5a063e025038\n87cdf3b5-fd11-472c-a988-fc5f9a7c893d\nad15cc0e-ee9b-4aa8-9021-cf36cc4ec1cf\n0b0acfd5-5a23-4cf7-9a53-70625ee6e166\n66030e22-e828-49f0-8284-cf4beee40378\nc73e8f15-f85e-48bb-9128-3001fbe9e007\na3eb2cd0-cb89-4823-b42f-b536eae92e2b\nd3893a7e-450f-4baf-a6e8-cbf96e00c404\nd28b4a4d-a5b4-42ba-a2b3-546a5341710f\ndc68f7d4-bce6-496e-8ea2-103d55bf8c88\n15e4b5fd-20fe-40ef-a769-a0cef7372985\n1b78c3cb-7150-4e91-8424-a439508eb743\n816e17c3-4709-4384-9153-7d41b7583496\n8cf83b9f-1460-4d40-b4f1-eb34cc55384a\nb2c64492-2b1b-4835-a103-f8a748a0f428\n54dbf875-5e92-4106-a2f1-dba0c9dc5ab6\n67447538-6c99-4e16-a640-39ddb7a8fc62\nf73d78bc-d048-4645-9bc8-13a534d45c27\n1a588b61-deee-491f-bfc3-3d78a8527d4c\na22e787a-dae6-4241-ac55-74bfcd644065\n8cbc924b-da4f-44ae-bda4-9e4bdb20d558\n9a17d4fc-bc3d-437c-b0c9-f0a7164c906a\n52717e99-ff5f-48d8-a03c-07c460f63887\n4c7c4313-81c5-4b90-9b96-c3f35d2ebc96\ne8e10f0e-edb6-4523-b262-b2c74670d214\n502f6064-682f-42e8-ae93-089474857f66\nc6dc46f8-df40-4379-a8cd-f7db5f81e0b5\n3705c37c-47e3-4ae2-b9c3-c8fa9aff3c21\n0073eff9-6d9c-4b50-98cf-b309cdc059f9\n4765191d-57a1-4164-a209-1107a465a042\n07f89831-b78b-4c66-9a64-d5ca7f16a380\ncde250b8-849d-4f05-8976-469166a975de\n8bb073db-ae8f-40a2-9d5a-f79adf1485f9\nf4cc1f1c-74d3-4b20-a2ab-0fb97937e13e\nd650182a-b489-4e49-b4c0-0620b6390ce3\n24388e28-5339-40e7-b613-ef741d2e4e2b\n4788c869-67ec-478a-acda-09b74047e090\nc6374acd-bb1f-4a72-bb87-58391c31fbc6\nb1145b98-de89-4d2b-b325-d763a6cbc647\nfa7bc7f5-763c-489f-b43e-9ce89c19320f\n9def61b9-00f8-458e-98db-12da481c3790\n4afdc321-7458-4be3-aa71-47189a9e7857\ndfcb1640-f6d6-4151-b463-823880e1cc89\n15b659c8-a057-410c-8c37-97127afbd874\na3b6b636-822e-41fc-bc22-1202e67cdb0d\n73b96be0-8515-47dd-84d0-3bd99c93f406\ne5aa3861-5c70-4d02-b43f-151dc71bc168\n2c1b5ea2-0606-4e39-b6ac-2c8b82e2bf68\n17288319-faee-4e90-8fd3-d348c00ab356\n4d68f620-ad52-4a3a-b627-89560d0e35c8\nf424ed0a-a1fa-48ae-b626-2e76f4a16983\n5c7936d9-7f5f-454f-baca-76c19bf91d7b\n2d1b1991-d8b4-4092-8e6b-8206db2d04b6\nfa7602dc-c1da-4502-a006-0e9297958d68\n4a74d8c8-bd6f-468a-a2e8-4def23c1c47b\nec64d78f-d212-4f55-92a7-d34340d92032\neac69ddc-5ec0-4af7-999a-8db14d1fe14a\na208febb-806c-40e7-9e71-7a4282350639\n465ee061-8636-43f8-9974-5349e219edae\n8d7a8174-990b-45ca-a1b1-e901c7ceaa13\n8ad815a1-ee4d-433e-9a0c-e6d46c2d7d0e\n45d0705a-42dd-4995-8d72-788611357be4\n2f3c859e-b1f4-414c-a27e-35fc319d3eec\n83296d3d-6bf6-4cb4-a54c-49f8d1dd438e\n739c3ad1-58cb-4f70-a257-45600fdf7229\nfca9cca4-d9fe-4e91-9647-674bc67f7e99\na57bcaae-0483-4fae-b5c9-f72628e157e7\n503470d0-8374-49cf-b26f-bc994183180b\ndbfa945c-b610-4a83-8c0d-e7aa125100ee\nd46c629f-51da-415b-9cee-56f2d517fcfa\n0d5943b0-a674-49f4-b4a0-18da2a3bcbe6\n370b3eab-c0bd-4ae7-a36b-27837ffe555a\nd325496b-0bda-4943-84bb-e1f8e71426f8\n9e29d906-5557-47fd-a22e-645218d0b005\nf7df9ccf-2565-4320-9bee-9d881c14b833\n39913b04-efc3-4cd0-bb03-1c3805b003ca\n4954052a-6581-40c7-8594-fcc315547dba\n9686a854-4312-4096-a4e0-8a57749197f7\n6b96b63a-17f0-4eb3-8a89-1f5b2e381c3e\nc773cce4-ed97-4f84-99c9-d1afee9e991a\n1702f871-7d52-4676-bc6c-d2459dcf0447\nba7d4f0a-8668-41b7-977e-76b114f005de\n230f9c64-b6dd-47b3-81cd-d6801b2cac98\nd7830aa6-eb9d-4a9a-8c7f-5a30449ace64\n39e61add-2785-4555-8632-84e8ea799c60\nd3db9674-0556-4775-b1b3-eb1d50cab524\nd359ac3f-284d-4c58-9fd8-fb91194f2f77\n0c219638-a8a3-4b2f-af39-ed0f1bd22702\n24a629ba-28af-4874-b4e2-8e8fd1b1f224\nd8d7b43b-f2fe-4d8c-8b98-7b73ad696f33\n666ccc0c-670e-44c5-937b-a60640604309\nb6477dd9-db8c-4378-bcf9-f897c8c94422\n1dd7fce7-a6fe-4d94-9330-d76acafd6264\nfe96d8b6-42cc-4172-8433-967cc0b1d480\n3575f56f-b75c-47f9-81ab-b08fd16cf619\nfb347120-a086-4132-b2db-f4b32fba215b\n5137b6e1-491d-4f67-8a44-f6a2e96d7d42\n17a83f75-1854-43e0-96f4-e94bdf2044a4\nd1a897e9-05a5-4614-afac-047a52e06669\n59c4e3cf-9004-4fd9-9705-e630228d43a8\nc156596f-9d2b-444d-9d0b-a34d0f3d93eb\n8861872f-5aa5-4f77-ae41-8c78467d94cf\nc531b231-76d9-4172-b13d-1ddee048835e\n9a91b259-f711-479b-919e-b8809d873d76\n6f9b37a1-14e5-42aa-880f-86ab770e5284\n3d6914a6-7f4a-46c3-9c65-c4154d6449f8\n3b31aaef-813f-4230-94ba-41f92cce380f\n3a4deedf-c13a-4853-835d-24a97a9d8ecd\necc2e5f2-eff1-4093-8028-bebe9ee4196f\nba2e888a-5ada-4dad-b4b3-47a0eb3ae729\nbd5a2497-9254-41eb-b2fb-bee09c40e8a0\na4539b15-2454-43aa-b212-c8529051a3cf\n52eaec5c-7aa0-46f4-97a1-13f2bb1e663f\n589cd832-652f-406e-9a69-5f578c8b34ac\n8f572a55-c0c2-42c8-b6b3-594c81a2616b\na325f2cb-a460-45b9-ad53-20e789fc47d9\n92d6aaaa-1a1b-4287-af69-9dfe382fbeac\n2ca9f9b6-6fdf-4091-86fe-20c30b1ddb5c\n0805326b-190a-4626-87fc-75fe80de9ef1\nf161a004-66b9-4e22-b4d9-59b537224187\n07175ce4-88bb-42d6-9e7a-9299a9c8d893\nebfdf3a4-dde3-428a-875d-961a191f0725\nb55f1d33-83b7-41f2-9bd8-031ed1cae138\n9ccfa636-6ed9-49cd-b9a2-ebdb46b97b60\n54a140e2-4797-42c5-9e5e-7e0eff0cc35f\n350b8b54-fcfd-4c1f-bc65-4cb830c69013\ne59e717c-f464-48d3-81f3-1fa9071d6806\nc6e26dd3-655a-4335-aba5-57e7c6f25322\n08856f05-468b-4ab8-b50c-8407dc6ca5e7\n6ba24092-e460-4a4d-889b-a4c5850d22d3\n67ad45ec-e9e8-4084-b19a-43f64e779409\nc8b95bb6-7aca-46ff-af83-c0796227a150\n977ee9d9-9242-421a-9a0c-1787c0e6743a\nb89d3ca8-02c0-4e67-836e-ccec0df04d16\n5193a672-ddeb-451b-b29d-295820e6c69d\n589f9c36-9d70-46d0-b1f4-72b2d9ca6a06\nb3ba361d-8c3e-4660-a083-0bcc2520b8f4\n89ac92f8-600f-479e-af42-913644fe7a0e\n5397a7f5-46aa-447a-91bb-a3b8ed3625f9\n8e1c3c02-754f-42aa-848d-405e96485a10\n17d2b4b9-bda8-41cd-9829-53ab6ca1bd6b\n6811d69e-6520-4126-922c-5d96ebdbfc72\n08656f85-80d0-47ed-bd37-8829d9a19762\n6b8d36f2-b837-4134-b2c6-91ee32d9d463\nbce49903-e0c5-4bd2-8806-41e736183c50\n0fa9d4f9-253b-4259-b6c3-24938c567b61\neabea249-f36a-4227-99f2-b02f3f6838fb\nc3f90a93-13f8-441f-9b41-ee861404f4f9\na37c0df5-88f4-4f80-aa10-62f6e6b11381\n620fcefe-6faf-4d16-b7a6-e10c6766d835\na16aa944-6937-4eaa-bd70-7dacf3fceb7f\n66ca52aa-7bce-4b0c-b2dd-4ecf4b388d58\n62049ce2-fd2a-4e4f-8e92-4363330f626e\n638eda9a-ef9d-4209-8f3b-b15a2f5346f4\n22d8bb0a-e55d-4df7-bfa8-566c14c1613d\n18174916-feeb-44d6-8da6-27518c612d0f\n32cb875a-2b35-4f50-8690-3a3e186e5ae8\ne3d9599c-07cf-40de-a4e8-75f9eef50460\n3412d3af-7a60-4792-ac25-ac8b9b40446f\nb7981ef9-ed72-4c7e-905e-9f8b13f3b965\nd974a7ca-5ac3-488a-9e29-f5ab99c34b7d\ne0cf8841-854c-4ada-8c6b-5e74033aa2e8\n9e1c948b-246a-4a6a-afde-40654eaa44a2\n08d15a9a-93f1-4e95-91b3-85413eb0cec8\n994b1e7a-7147-459e-a576-8b6d49857619\na789d35a-6cf4-44a8-a7b4-b677fc2b4493\n66758fbb-9839-4f3a-84f9-ac9e51ae00ec\ne63c6605-1e01-4737-9e1f-7881f19f42c5\n4867687c-c979-45e8-9c04-047a9736c8c5\n2b581e52-0e86-4111-991e-81df4a0dfe18\n43bba8a2-dfbc-4e13-8b63-b6b53f8211ad\nc1398ad9-2ee1-4c65-8890-37b5eff74cec\nebeb5133-d29c-4586-ab10-71d8cefd5fb4\n4f984b9e-44cd-4208-9e88-b625e7b91c7b\n1bf3d0e9-f4b0-41c6-b732-bc12597d57c6\n047f0c30-b2a2-4a55-966d-971e838f2133\n87182ddc-8f4b-4e22-89c5-452ae73ade4b\nd84a39fb-e87b-4f7e-8282-a98103a05764\n70483605-2aa5-4d31-a484-faef6be96cee\nbae818d0-0c6b-4258-9f85-f426910a74b1\nad32c29d-b07e-4195-8539-a928a49d0a8b\n5c4b2cf6-e2b9-4981-8a00-3a3713bdee89\na7f69318-67d2-4088-98f9-7e5c06716129\n58411654-f87a-4802-a1b9-13cc2a86a7a8\nc742340e-b757-48a4-a15f-1e25fb9e1867\ncb308041-bea9-49f1-9219-6696fea2b0d3\n451339d7-ac51-46a0-958f-18db78fa7c6c\nea053347-a80a-411d-9c23-dbc04edf308d\n47ec80c6-1656-4f0f-9a0c-1621d35d3699\nd8b5f3e7-5c34-4675-afee-3b6e5f803a4e\nc18b9855-4954-49e3-b695-e6805c4b25ce\n208c9cab-16e6-4fcf-857a-a5b67c759148\ne5993de4-dec9-43be-844d-8f5f3d08b609\n0dc91ba1-b1c4-4ff4-b4bd-7a40e2c0646b\n855aef92-d5cf-42e7-a502-0fa5dd6f8bbd\nf14c1c9d-79d9-4f38-bcca-b3e241f9a7bb\nfeed14a8-a881-40ca-b318-17fa7945d583\ndd5e40ef-7490-4e14-91c0-20d3e59fae12\nf5ed22fe-021e-4956-906a-fea8a196f57e\n699d0d5e-20b4-4bbb-bb61-7a62b328f752\na5cb7f1d-aca0-420a-b95d-753d13902ecb\n2b39a6f2-3d8a-43f8-99a8-b22329ad1608\n3610e907-47d2-468a-a273-9602afaf6539\ncf33ef23-f9ab-4a41-9859-fce4d8412bc1\n82af3496-47ea-44bc-9c50-9e488149be19\n8be516db-54bc-4f6b-a24c-4b065b06883a\n6edf68b2-c3c2-4e38-852e-dd16610f5e51\n298d6c4d-abea-48d8-a9df-8609880dbf6d\nbe74af95-9e10-4ad8-b573-4d0b425e5a88\n4bed94ee-8322-4ba2-b53b-80a1fc7d2520\n7ee09e82-6e9f-4240-af18-aa00e1ef4e5f\n8d443854-b10e-4bd7-a354-5419bf000509\nef7674df-a3e4-4480-bd55-5be43fc2b974\n81322d77-44a3-4dc2-968c-4d9659c73c84\n009fa11e-4416-4fe0-8395-422c51e4c85c\n0446eefc-4092-4d9a-8f79-aed7bf278f5e\n801c74a8-a8a4-46ab-8b9f-3cc6f1165450\n702b44f1-7ca7-4541-b205-da844b764e83\nb8f1d7b0-3654-413b-80f3-4af50d7da7d9\n70c3e3f2-168a-4c77-a651-d1a46fee3852\ndff232d0-fc6e-4676-8958-4457cf30e1f5\n15a2c2ae-6afe-4e46-8dcc-1361e122c5e7\n2932d0ed-e1f2-44f5-80be-551ac54e2472\n7918fbd7-8340-415c-b1d9-7f0ee97ecbd5\n6e2e35f3-80f0-46d6-844f-f429c3de4423\n93eb49a6-9b07-407e-a4d1-6d1f9e17503d\nf1a57dce-aeb7-4f80-8535-b04e0dccf7db\n90598bfb-3c41-46ee-8cd6-fe658b4a895b\nf1d55a1b-e922-4f61-8a41-1ef74e8fba05\n89cfb341-6344-43a6-8fde-43cefaef20db\n12a43da1-6d15-4ccd-8c7d-fe2ffdf75fde\nd7aabfcf-7978-4630-844e-8be417054456\n8acb36b5-c34e-4f4f-bcf7-b5a4b802fd58\n9542a9af-a823-4403-bf30-2a03cbc7ad32\n05c5e5ed-b492-4763-ae2b-a81d5e9d7054\n401ad94a-fa12-4ca1-bad3-33263618b674\nf80857fd-c710-4693-8297-9431172fe9b0\nd718f52d-32b1-4e44-b8ed-28c96d038e09\n43874d2b-e88a-49c2-9673-32ca0e9132d2\n61b9c941-71a9-48c5-952c-ae58221a1cf6\nfa6cdd7d-65e1-4c22-86da-9814e6648edf\n35a3de12-fcf7-4257-8670-5b672fa10314\nbc43ade9-ca12-4a85-8fc7-a42e0f20b074\n3a792740-d0c8-49ac-956a-187e58b9a0bc\n522905a3-66ab-40d5-965e-63daa53d256e\nf43aac5a-fecc-403d-990c-c67d04e24e49\n4d464a1d-c97b-4fc6-9aa7-7018a172d257\n95aade09-e01d-458f-954c-2ff235711ada\n39928604-b88f-4d40-aaa7-66b1f9ce2992\nc56912a1-67e4-45be-932e-989dea58f713\n199e4c93-c2fb-4f89-9e52-e1e8f81b0688\n9ffa3ccf-8baa-48b4-97e3-0c764a31382c\n414e511c-4fa8-4b21-be78-896c2b7cdaea\nf3f335bd-c877-4056-9cc4-01a2ebb77a66\n28910582-fff8-4637-893b-808e6a2d3a65\n16b461d7-8417-4913-8b1f-9244e0d6a285\n93b51934-a3ab-4096-9320-5bebaf2d0175\n6e4f6bb2-c47a-4195-978c-3b55c8dc0fbf\na770e17a-ea43-47bd-a92d-1eca5846c0b3\nd137ea3d-2bc3-4a74-bb8b-8aa026225987\nf19dec99-4cb1-4736-b44b-69432b9c6b27\nf28c7344-5bc9-4287-aefe-9469ed5af52d\n9fa9203a-16cd-4db1-a823-380fc37d2783\nd2f7adeb-1c22-4ab3-b1b4-c67a98a73e36\n69112769-0619-4bb4-8b7b-4bfb1d6c51f3\nef74d430-321d-467d-a229-3b65fbcc3611\n5bff22c4-b1d8-4486-ba1d-b867013b5ddb\nc69186ea-00ce-4364-aeb2-915e93543eae\na2ca895e-d4aa-45a7-8a59-d73bd6120a79\n410b6c87-dbbb-4de9-acef-48e12e34a425\nf1735be5-6cc5-40a9-a28e-f9a989f07938\n626c2388-264f-4ccb-90ca-f1a8c29e515e\nf1fa0644-d292-4b9b-8f37-be9c409f7a6e\n95513c32-8b2c-424e-8d1b-0c6096969206\n2e4ea91a-36df-4ecc-a963-7b4898ee28b0\n6af9d192-a82f-4924-9ee9-ea27cedfbc2b\n33125b3a-c59e-4b43-ad4c-74fcd10630da\nb8489cfb-5807-47a7-a699-9c9c944d4230\n8927ef72-87a0-4997-b26f-c21d4a20e03f\n44a05385-77ec-4b06-84ac-fda3d46e3586\n3cb51dd8-2bae-42bc-b3b6-c5399b9f40d0\n5a3a102e-8d04-4f34-86fa-aa499e17a63f\nfa407b07-1f55-492d-9897-bff01f47f444\n73fe004b-e6ae-4863-b21c-50475e6d72a1\n2f689604-1945-4b53-80ce-94c5a3196f62\n8715d51d-36d9-41eb-be35-bf27c33d23a4\n363c07f8-cba4-4bce-be70-997cefa919bb\na817ceff-7753-483d-8f1d-82729e7fb769\nb7d308d0-47b1-4da5-8af4-ffc0261d3694\n70374523-fc2d-43e1-83bd-4d0cfd9aceee\n98df7f15-221e-4da5-88e1-7d7e941d0cf6\n8f24e4f8-bf29-4858-995f-c468b25504bf\nb4241fba-2849-4217-9582-2ecf3c54b025\n22acce25-210f-47a8-874a-cc96c32bf016\nf27a14ac-6cb2-418c-aecc-875fbb73937b\n37998edd-b76c-4b3a-93d7-22f78510adb2\n42e89121-9626-45fa-bfa6-4d8b31030a82\n821ddba9-84fc-4cc6-a762-29516bc01b6d\n2aac3782-e3f1-48d8-b06f-6e01f5aa18f1\n94626eae-428c-4166-98a2-44e38b7a7443\n5405f423-80a6-448a-9e86-1a15f8f8ac05\n7a042082-c54e-4605-af44-3dddf71cdadb\n39b1c094-3e70-4524-9ee2-b45bfe0da09d\nb8bcf3d8-0072-4691-8a79-fbbb3ec7c285\n6cd16815-08e0-4de3-98fe-fcf546e7a480\nd203d313-91c6-482e-ab9f-f29c009a994a\n65c9e717-1a36-40d6-9626-a7872095feb3\n27dfa375-68ae-4258-bba5-4ec48344a521\nd612c5c0-bb70-4500-9d0a-532e060765f0\n3aad199c-014d-44d7-8977-e2c756cba8a0\nea620140-7059-4aa2-b581-df439da94eb6\n7e3ab42b-3825-4974-82c7-9322c143ec3c\n043354d1-98ab-4061-9fab-d55d7302138b\n410732a6-2443-4b16-a872-b7d78bfbf89d\nf4830941-0a1c-4a41-8a21-e891e075c065\nea3bd9db-2120-4b39-b21d-a0082831bfe3\nb6a63870-576b-410e-bd96-1236940c244d\n90fa1715-c98a-4d3b-a8ce-237c17a1f7e4\n50eb6ef2-a976-40dd-934e-8e0700332070\n122fab8e-06cc-48ee-9c5e-d85b311d5d82\n27ba3f0d-19ce-4183-b898-3c1ac780a214\n08725a12-fb86-4ea9-8c95-ded980fee25e\n6380b01a-a4d1-4b9b-80c8-4d875b2b7608\n7fefa1a1-9baf-46bc-917b-b738d5cf2135\n13120614-d595-4646-8ebe-67dc0235bb2c\ncc14c8b6-798b-45a3-838b-b6b941b68c8a\n9ce1c760-717a-40a1-98d8-2afbc75f4f05\n05d295cd-165a-4df8-8de7-9f061f274e86\n54fe4add-e2de-4488-9039-ad216c871fce\nb19f7855-613d-4cd8-9276-f0989e5cbfb9\n73de35a5-6fa0-464d-81ba-42b6aed558d0\nc67dc447-e1be-4e7a-b42a-864a1a971cfa\n5d328de7-3abf-4f63-84c5-efeeb8e1f148\ne7adbb70-7d66-47be-b83d-d4d98f9ebca1\nebe3f6e9-c5be-4194-a555-4e4878243de7\n241be181-4ec3-4ecb-bb78-595b5b773f91\n7afe2a64-6d5e-449e-904c-26731ad0139b\n72462cfd-b123-4e0e-90e5-39673bb5cb74\n65e1d9e8-6890-47f6-bd06-12d9919e15d9\n814dc7f9-06b0-40c9-af61-bae9f973e166\n7e5ed6d2-8f84-48bd-bd04-3fe32d072cea\ne6f8a7b3-b9b9-4558-beb5-10585b126611\n90155c9b-417c-4074-8cca-267b4dfcf7ac\n8531634b-7de1-4c24-b1d3-6ed05c7e2c6b\n45be3326-6a1f-47dc-b433-061d584c1dd0\n97105771-0cf9-44b5-a0df-3db4fceae47e\n1f7391ac-9c93-4a9f-9d43-b247107ba6e7\ndd1e9f3e-a57c-4409-9e61-f0dd8e26d107\nd79df7a7-bc4e-4b88-9198-44de21d4b176\n277b8f26-7274-425d-a75f-8f93e61056a9\n6e0f8801-0bb3-40c4-87b5-d779a71666a6\nbe377e1b-e0dc-453f-8bbe-edc65dd7b4f3\nf6adff46-2beb-4d95-875b-0cbf40aa5c84\nb7010e8e-2835-4776-a97a-81e41217d70d\nd4db7c07-30f9-4e96-9b15-f7c6b05711cd\n01d89ea1-44a0-455f-bb79-8868df10c5b0\n92b98ce9-e940-470b-810f-6c62898ad8f6\ne17b1927-95cd-42e0-808c-d38ba7cc7514\n505eae15-1701-43af-85ee-3ae9e5069f18\necb9b2a2-2b8b-4767-9d35-d162ed0c7a71\na00f6597-48f8-47f6-8c82-9eb4d1873d88\n73ef7377-dce6-42f9-b245-9ebd5468a7e9\n83727ce8-6767-4120-8b1e-8eb3121dc617\nc5b7d581-55f8-48d8-aec6-a9e8e52ea4e2\n37153955-786b-4556-a172-7166119924ec\nde82ba86-d392-4908-a7ea-9afe78de6c14\nacc8b857-a764-4eb0-b667-fcdfc56311fe\n1b9c1d21-513b-4850-9a24-c024941af9df\nf4d5ef24-c175-43fd-be1d-a25fb454ecb3\n5e2afc35-4040-4bdd-a739-212cab253a73\ne20b5608-8330-4b71-a4da-2625e5cae6dd\n9d4959be-e680-457a-8792-c8ce0bfef1ef\ned30e95d-2550-435c-9ca5-63d1541d30f5\nce460483-5359-4d06-9df9-05bce350528d\nbd839bf1-05b6-4f1f-a56f-af0e847ed56c\n7cba844a-14b9-4ba1-afd6-8d3a15980e6b\n4adea645-e5b6-462d-b939-cfcf3fd6bf7b\n51d059b8-114b-4212-9745-c4ce9f1687d3\nd8f86bed-c057-47ca-a275-ab0df8078938\nd214d6e1-6ed0-4b04-a1e5-a5f977897c0d\n7bb9967f-2c1b-4fa9-be3b-1261935079e1\n65f24a56-be38-4745-9735-692b03caf034\nde3f1bad-e971-43e3-9153-e70b56913017\na8724ba1-8db5-422b-9c39-053fdce7975e\n56a1070b-32fd-4f5b-97cf-07a845b408c2\n42de85d7-e03b-405e-ae1a-047be0e4e329\n9ee2bb6f-dcd6-4e6e-92f4-329ec57cd2cf\n054004cc-2e1c-47ad-b377-f848b4b94e6e\n473f36e9-2220-47f4-ae48-3d787ba2a06c\nbe0f4367-da0c-4f7e-9cfb-9a30ff1e87ee\n9f80d677-69ee-45d7-aacd-8567163f9ffb\n08f2e140-9298-4f43-803b-97a2aa28089a\n74b75ae2-9772-4b13-9764-12d5120fa54b\nc8fd9989-35db-485c-b4fd-45b004dcf523\n86ffba95-71f6-4b1a-8192-cf672de1dd61\n31c3989a-c064-489e-b352-17a7af02b64f\ne6890143-2be9-418f-8f28-b5d80b2bc2f1\ne4565fd6-6901-4f47-878f-a9ebc62451f1\neba7590f-c0fa-4639-a33f-d8c0a43de831\n4eddf294-f8da-474f-ad6c-ab4a4bbbdc8a\n7b847712-b976-4d8f-8a35-c02ff4a5df47\n13bb3d60-bb15-4909-a089-e7b4002196fd\na105a77f-2bf1-4392-99a4-09367107982e\na0340d9a-d174-404b-865c-62f2c79abe52\n83729b28-7618-4960-9b89-f4d930f7b441\n4dc68fbd-a2bc-4b12-ae29-fdf4696b02d1\n66ac8b85-cea9-45b2-bafa-ec17bbccee4b\na7659d74-2620-4fce-8a98-8c1932ffa4c8\ne3594572-df03-45db-9cb2-b0d05911982b\n274135f6-c8b3-4b2f-88d0-67992f3f1bf3\nb0ec1534-5ccc-4b2b-9f18-1036b5f16d5f\n2af08a48-ef71-4def-bbce-fe93193e0ea9\n6b9fb3f4-1e02-4fd4-b6c6-7a95f86604e4\n92d1859f-d284-4add-81eb-460ae49761c5\n7d36fe73-86bf-4a47-ae31-ae77151598e8\ne7a2e8af-9b4e-4e95-b12f-96478175dcc9\n3c90a863-22de-44ba-ba1c-ddf2b8d54ae5\n5dca82e1-4078-4431-95f6-86a327a69cff\n737e4672-6a99-4d85-bf9f-63e9a7e5fcbb\n3bf4031d-a068-4ea2-acf5-a6a83a32c216\n44df16a5-dfe4-400e-8f8e-78639579d976\nbb03c8c2-deec-465d-945a-7ad1e107b535\nb26b29b4-21cf-4743-b047-8376e2e5fd28\na22380c4-f978-4ddd-9197-62c6e359e68c\neebcde2e-7866-4817-a8bc-2403d63c6a8d\nc7c99584-d0b8-4f15-bbdb-e5b93cd7fa33\n6c51a428-692b-4b12-9047-6ddd61117a54\n394e17ec-6246-417a-8a20-5eea0b172593\n6bf2b1eb-77e3-45ad-9c10-a6884bf47ebf\n4389bd18-93fd-488a-9be7-486b495a92c3\n511c3470-9d6b-4622-8525-58bd6154cb56\n0e652c0b-aaa8-4372-ab58-2124e6ea4566\ne4d47c4f-9ab6-4473-8450-034f8a520945\n839f2948-cc06-4145-b55a-4b2eba660551\n954da868-f1df-4a0f-b6ce-1a196435cca2\n50dd660f-87a6-4fd2-aefe-2730fc28509b\nf6a1eea4-c4d1-4ff7-ac16-90d0b57e0763\na211078e-2ebb-405c-8285-017cd82c845d\n8564887d-c1ff-42a4-ae9f-2a5d8f3c8458\nb3d352a1-8297-4149-af24-140986f6b4e3\n8a232dab-6b31-40bd-809c-4b146c2da51b\nc4b37acf-a945-4ec6-9e9c-ec30ec574db7\n2f7ef638-1db5-4268-a626-ae08d72fdc93\n72f8fac1-fb7e-43fa-a47b-48b73d064b4b\ne9e2ce7d-2637-4134-abd0-1868d6fec59a\n359e9899-8b6d-4be4-82d5-2cc54c1a69f1\nffb7ffe5-e461-4afb-bda8-99bede997167\nf5d374f9-4ecc-4d50-8038-892e26c6d2d4\n6be90789-c22a-4571-96d9-9abebc0dcde0\nb351b2db-30da-4913-8a3c-498f7c419495\nfcbfe52b-903d-4def-b6a6-a412ffc3005a\nb82bca14-5d7e-4158-a636-d9304d2bdade\nb27b1354-ddfe-4159-baef-fcab89de79c2\n0581032a-c26b-47d8-8344-c92658a3d22a\n3b1f1080-5fa3-42ea-b0fd-bc29227049b2\ne97ba36d-6105-49c5-a82a-20b38ba01b10\n8385d98a-d00b-492c-9437-bd1b2d544cca\n73ed0d8f-f5ba-4951-9c68-f21af78a99d2\n391a1350-5350-4025-8584-e71691556501\ndf497a69-91cd-4f85-839b-8465f9606458\n89d816a4-0c31-4b56-991a-3ceea4635511\n0942b609-6665-4328-a1a4-4fc155a23912\n33fdaa9b-1372-42a3-9e3c-2416b472bed5\n998e55c0-e5ad-4e8a-b6cc-3f004a103fb3\na35d0402-5e83-484b-a50b-a108beb1cefd\naed9ef8a-5aa1-45a5-92a6-19e1b44c0213\n942c6c8d-7c96-474c-8dab-b1908d01cb90\n8fc87174-d5c4-407e-b364-573cff2ae6d3\n7a710969-5827-4a07-9241-9885c769b4dc\na6f156d1-ada0-47bd-97b0-0c7676c11123\nc777f751-7f2c-45a2-a79b-c68fe7c46bbd\n7e5a0520-3aaf-4bde-aff2-5741e7708d0e\n06ced0b8-fb99-4208-b828-d7fae9150f46\nbcdbf875-dc96-4fca-8d11-e686255c4e22\n6d9a25cc-0bbf-4269-8003-7b5cf61f8841\naf228fdb-eb74-48d7-99e9-40d01eb08ffa\n079a4f89-d0d3-490b-a231-9eb706946c26\n0d4a18da-65e3-4846-9c17-25ea02e52eed\n3032cbd8-8656-46d7-9e73-be3edf2511e4\ne4848f7d-cc39-4c02-8529-4f287653ba7a\nbef3fa3a-2eb5-40f7-b89f-8d80250a0e8d\n9b19cd5a-0a62-4a17-9e79-0b0aa0c55e95\n2077cc67-a0e3-4e06-a838-11e1db5809b1\n18cd4b61-8cd1-42dc-860a-bdf844f5e58b\n48beb901-e9a0-45fe-9935-181ff479223d\n4c54f2db-7c08-4e80-b554-70fdac3e2012\nc860e5dc-44a9-43a9-b8d3-43185ef6119e\nf44eb3d4-2dea-45eb-aff3-04185be312a7\n324f7300-7e03-4aa5-84b4-b1a0a018adb7\nca4e1842-ee7b-4b17-b5af-a77db0d24815\n8cd60d2c-8ddf-44e1-a4b2-2d56ef73beb2\n06b06247-aa5e-420d-bfae-f6173f54770d\n41987f65-1086-4a34-a5e9-ab483ec08339\n7bcdf928-ab4b-4408-a7f3-20c6eeabba12\nc4847dce-c0fa-435c-bd00-ad3a074f1e56\nd4e173d9-37cc-44c8-b2a0-bfe463f134f6\n9e8462ea-d03b-40c4-9086-69b3f78898a3\n2629862e-bc1e-4ed7-8191-49cfdb3207b6\ne8c24513-69b1-4fbc-bf9d-99c428d187a1\n606995db-074b-402d-a75b-8784ca98f6d6\nc32507a9-aa95-4873-bdd1-d5bd1c9bb52b\na6a28e81-2df9-4d0b-8afc-fd31e72b066d\nae0bb88c-8904-4575-9ae7-e065d9799e71\ncbc738b0-ef3e-4a86-8cc2-6cc5816778ac\nd0f9624c-ebeb-4164-bf3e-043d3ef167a7\n0f80a845-938d-4998-9e31-94659d6594f5\n5e440130-14eb-4546-981c-541bdf208da8\nf6e92c52-05d0-4f12-9f1e-5091cfc0b1a0\nf569a567-e670-4850-83fe-abec8fe90bb6\nfe43ba9e-07c6-48da-ab3d-4771d8ace93f\n2810d4fa-a4dc-40c0-8de1-6378dda86d1d\ndc9f02c0-be63-4d0a-95cb-9a5bc478f392\n107818e5-710f-493a-a8d9-c53020893714\n2980a542-5032-4a6b-8010-3fe7f24fa2fe\nb1487957-e9f8-4eff-b4cf-6fb1424bf433\n994cc2c8-a77a-477e-905c-6cddf1864323\nbb3188d3-3e62-4230-945a-5456a013b768\n6673a90a-65bf-4747-ad25-66eb20fa531d\n4f703137-0395-49f9-a8eb-f3b7c967f8d2\nc9270c01-06dd-4d09-9724-ba71c76f4ea8\n15e5fa78-c513-4f92-8b31-2234a716ea77\ne2a09fcb-7ae9-45d7-8e8e-baecfe463cba\n931d4c9a-72fd-40e7-ba18-c3b54e799eb5\n3a7034d8-b97b-4b35-a0bb-d617d8f7f1ea\nf98e1bcc-9a0f-4017-90d0-f4f495440a00\nc0fa5ad3-ee81-4e1f-a548-87cb0cf6c61e\n2b52f1aa-b7fe-4e4f-b30f-51fd1045ece4\na484a7e1-ee99-4fe3-9948-5dda7d32b836\nec8f7215-e2ff-4e1c-a3d6-1a29d6ddd3e1\n212a629c-21cc-4532-a45a-8168d49fb859\n0f7e397a-b4e7-4244-9b9e-0c732c9a1763\n05d44a4a-a31f-429c-bb63-f8640369e0f6\nbd43fc7c-7256-4ab3-a4c2-ab9bb70253a9\n84688e60-d92b-49ec-b061-17fe5a477987\n52eceb00-87b9-43e5-b050-0adc998cf512\n87c7eee7-2516-4662-aad2-36187a8cebab\n7ac37272-3637-4c6f-99ba-6570f7a41b26\n72285c27-db4a-4b1a-b451-b6ce9b6409be\nb2ad63e9-cc12-45f2-a171-d9095c1e59ab\n8249a7f3-eaf2-46a1-9261-1fb8c7c50abe\n589ad4c5-9494-4717-b5b0-301c9bd9ece3\nec8f7298-8de1-4b35-813f-bad9ed4cf9f7\n2936136d-eaf5-43e5-afc1-7c48ffd51e76\n2bc2b1ab-ce7f-41c8-b6b6-202bafdf871f\n2204b6e0-41cc-487a-a3c1-4c37b071e885\n639154b6-4efd-42b7-afc9-a38399099d9d\n2116d9e2-31e1-40d5-b3a3-30c24ece1707\n9cdccf9e-8cf9-4ab7-bc89-2c067491e91b\n0cd8ebfe-1fa2-482a-aa1d-6b665ef20678\na13c7e27-97ec-4c4f-9f2c-ddf45b23a395\nddc8c409-57be-40c0-bd66-117590611c27\n90071c12-80ac-42e6-93fc-904e1395d3be\n8db4bc10-8ef9-4e9b-a7fe-af75c0f83f74\nea6ec3ea-cd0a-4a9f-bd14-5434d6e61e10\n9ef66087-6ef6-406b-b543-99fafe826091\nc6f7697d-5400-4063-8a6a-2a34df202371\na2d039e6-34b7-4dec-a2ac-60f0fd9cadfe\nf4831e56-a07b-4467-a44f-b846f6bcebdc\n902b890c-f41a-44be-9eaa-9bd3377b3d44\n48bb811a-2eda-4ac4-99e4-27fe974d9f6a\n9634f345-0969-418c-a95c-59daef4cb043\n8a2c22bf-2323-4a52-8bd5-d8054b72f016\nf5490c49-b14b-423f-9c10-de4abebdf16c\n3b61d68b-a24a-46be-8cf2-0ea376982185\ne9084143-47e1-497a-835c-95eb08df939c\nf713cdf8-d5ba-4e96-ba05-9c6dbba2e996\nd23f3711-f734-4611-bda6-8d9ed6817726\n60172956-ae50-49e1-a523-1373b8539787\n9e8a26eb-bbfc-4254-b967-caded52bda2a\nd6b6c5e3-d0f4-497c-bb8d-944a1594c9e4\n98575090-dbd5-40fc-ba20-d3b46bc09d6c\n933ca956-7927-4beb-875a-2051aa39185d\n93f6dcc5-1140-45b8-b62d-d4b92aad3c51\n955e08bb-3094-4cd4-867f-f2b507d75755\n36facb98-c75f-4620-999f-057478041f92\n3ecf24b2-e87c-4f20-abfd-113000a04600\nf061159b-11d3-4f58-a963-f3192b420c31\n3f4f0329-bdd8-4c9c-992f-dc23cd555f65\n46f0964b-8900-4ab8-88b8-11f8c743a2a8\n22dd4edb-4afa-4a43-9e3d-f14e70a0b566\ne9fd0346-3cfd-4f0d-ba5e-f6d5b74f958e\n4e23d2f6-3b2c-4f8d-bf00-836657cbc4a8\n8a8bf542-f764-4526-ae33-545e2e0d63d9\n542c92b5-00b6-4d59-94cc-fd8e4a59efd0\n67be30f0-0ab4-4166-b55a-52e2e0d32b23\n7bd48057-e947-4303-b4d8-05680c37c7bb\n3065bc2c-e5c4-4c6f-8138-b9da095efac7\n994fe6a7-54b6-4dbd-b47a-26f7fd714ecf\n9f172949-c292-49f7-8a18-9f1de6f15dd4\n0485bc12-0bab-42c3-9372-2d591ced72b5\n8a22a7f7-6397-4051-bbd2-984f5c6acf7e\n4fcb8f23-9b00-496a-a92d-3e966927f870\nc6a08da5-3f73-4ce2-bd51-06174b473cf3\naaae5b5b-0fbf-4853-bc15-595ed086fdbf\n85425a04-9729-4a96-ab47-3bd86268b7cf\n1f3333aa-ab29-4f0b-82c0-f43b40c58a96\nb93517a7-6d06-4b90-a20a-87cf36f84dad\nb601a2a7-ab9d-4a17-a860-ffbe3c931ec3\ndffe8620-bcb6-4ad8-88a5-d3061143e2a2\n9b746664-0af6-4620-96d0-58c1665258db\n6492b543-4a9e-4e92-a379-abb19ef4b817\n4e0f608f-ed9e-40be-b616-c0651470e6c6\n8affb960-4204-462d-970b-1f2cebd9abda\nec1c4b6e-b20d-4ce6-b150-0a6fe27858d6\nf619a587-6bec-49ea-b113-52d86a651423\na96aa50e-0103-4091-b0f2-8180332d8d19\ne2682036-cb3d-4ed8-9bb4-a13c85779de1\n863732ff-6cab-41c1-8dc6-7fa104ab9241\n99a51c57-63b3-44e1-a610-47305529d848\n6fb7d1ff-598b-49f1-aaf0-cd08c65b2814\ne5ed172a-634e-4c06-9962-b00391ed1144\n34fd1539-bbaa-4ae6-af9f-7289ffb6ece7\nf00733a8-e15e-4a2a-b5d3-fdc0b7a44a2a\nce6c9fd6-dbdb-4cfe-955a-c64d067e36ce\nba0b08be-1ecc-4949-9d75-e7da39607f0f\nbdc40810-a214-44a3-82de-15e9c1af7d95\n62fae68f-4f63-413d-8c9c-50f264ff1b48\n54d4e35a-1061-48d8-b1d0-58839bbe2ca7\na09130d6-78bf-41c9-ba8c-62ca4d7b1233\n21b95c67-f84f-459e-88d8-64764a616145\n10c1e357-45ec-4b94-b68f-efdd25f177e3\n9c2b51d2-eeda-4bec-931d-7b38d3e47801\n9b9bbf5e-aa77-47f8-9246-6423682f6daa\ncb7d8ed5-474b-4fe7-89b1-5181fd7b1eb1\n9971758f-ba63-453f-9504-f5602fe92466\nc7f6f19d-593d-4995-be5a-4fc620267619\n701f3310-7464-4b55-8763-b390a2278091\n13953be7-a64a-4f49-937f-771552fa3ca1\n02172728-9bf3-40c5-a340-38f111b9cfef\n84f2ab45-5bc5-4f0b-9fa5-64c570b838fe\nb205384f-c74a-41da-bdfb-cf61a7c9a09a\n259b984a-32fe-44ef-b156-b86677077acd\n249e4130-95dd-4a2f-8fbd-631e4f6a5cb0\nc0540a88-3b52-4975-8426-8d26246cc383\nad7ec770-74ea-43db-b649-4407f51a1a15\n705f1ff2-ae33-41dc-8de7-94884b723bcc\nfc1dcf3b-643c-46c9-b535-cb36b1eef3b1\n794c3913-721e-487b-8cd2-45a10d20a1c1\n328bafb9-01a9-430d-9fd7-3930447bee56\ne440f6bc-5e00-4389-8baa-217bafac2a85\n5ceb24f4-08a1-4561-9bc6-1fba3d39d0c8\n9928ec8b-9e98-43f1-af9d-18bb354db482\n3169dc98-0024-43a2-b01b-563767a81f29\nccd6ed56-4feb-4554-b6b2-8a2a15b93213\n76e16274-c4c3-4dfe-944e-c3aae007541b\n79f4d6e9-3ade-49bb-a139-648c1cf4217a\ndb27cd09-4a52-480d-83ee-f04cec659a3e\nbdf5e15d-3b72-4464-af42-7df60f87280f\n0769d5ee-e94f-4af1-9ac4-b525fee64fc8\n7fc8339b-77d6-4b14-aa91-5bfff8d6b9cd\n1386f03b-f924-4ece-bbf7-ea29a153304c\n1768b11c-d9b3-422c-8199-8d5f6f8919c4\n991ae73b-4431-43b0-8afd-14c59e2e133c\n20681d75-8dbd-45b7-9a22-06bcf3cfef44\n081baef5-573f-4c13-acb6-65826a645b52\n06af36da-e072-435a-a36f-9c8ec14ca0c8\nea7894de-7701-4497-aef2-9234f7efd96d\n93b08376-75fa-47fc-aae5-e1351f2a4015\n27b71515-1719-436f-a834-4dc21b16cbaa\nfa3bfa82-0990-40ff-92d0-76d6a9d911aa\n06bc8a3c-c475-4647-baad-421f5a4e97a9\n5a8892dd-27a5-4e6d-9ec5-fba2310757ff\nf90f03c1-1a90-4c97-8e7e-de86c88ef0f6\n9e4a74bb-5ddd-4b51-a3bc-15cd7097af1c\n75d285b4-3844-462e-af17-816c5803b7d6\na7d172b9-2e07-46b7-9dcd-40a52af7884a\nc4592159-be5f-4b1d-9b0b-ab0a2b04ff19\ndae3c815-a532-42db-968b-d6322d24801f\nbbd0830b-c116-4062-819b-cc3508b07530\ne0c0a3c0-35c3-4df4-bee6-3c053f13d632\n01650ee8-2f4a-43a3-922b-db44abcdb457\ne6d880b3-b583-44bf-9270-9c882c591cec\n0caa5863-1fb7-4611-bea3-d47befe6c18e\n1b92c9a0-0470-48b5-bc81-0662856e5263\nae9e9cd3-454b-42a4-b75c-b191c6739bac\n6f326257-a6f4-4b34-8c74-351c2b641a56\nc2239a76-9d20-4832-ace7-67a66ef0a11e\n319bcb3c-6168-4f4d-86b5-32d932b1ade4\n680e091a-0518-4832-a156-d494facf8ae8\n97c1cd5c-e763-4eed-90a9-8d60ed3a51f2\n3cf4ab62-052e-4f02-962e-110a8710081b\n4d374c7b-5c4e-43af-b3fc-767462a8dfbf\nd3546d69-9cf7-487d-a4a7-489a6f4abcce\n210acb1a-193c-461c-859a-47009a3b78db\n752c2c1b-0a58-475f-b7cc-061849790e62\n1c8ac948-95ca-4a26-8f09-4066291f8209\n86f47ab3-02f1-4829-bba1-6d229cba89f9\n878ef552-b044-4838-94e5-b02cf2746f22\n6d9ff8a7-c15c-4112-ab0e-6cc8678b84cc\n59b3598b-96e3-4763-9a01-8f194d8aa3a3\n56fa7d98-ad01-4e84-b5cc-b74614fadffe\n1955a3a3-6490-4a06-aecf-4d869193ca8b\ncc37520c-1505-458c-ad6b-12c68d4db21f\nf8d66d6b-f3fd-438c-bd91-d4ea33684250\n3490566a-bbe5-44b3-aacd-a83d61b2c973\n56ea973d-f796-4d51-8b5a-e9e7ac092018\n869bde94-7449-4d26-b9a1-46e4a50323ff\n72f35cf0-5a2c-4679-a352-d5aa621599d1\n426d2726-d431-4266-a89d-9f87109d2592\n3d2f0ccd-e14c-47b3-92f5-a1a8493d552a\ndd9a209a-be9c-49e5-95b7-9dbd76af4a7e\n44c9fb93-c355-4ef6-8fe6-2ff9c93c16e8\nf408c93c-4299-418e-9a08-5f0a59535356\n665490e9-604d-442f-9c96-1e0c1fe949d3\n8af6114c-f944-485b-b986-120f9fdb9158\n3660f4de-1ac8-4b64-bc8a-b6fe842ab4e7\na4fc64ca-9650-4c9b-a5e5-d436da971ef0\ne8426173-c9a5-49a1-b6ad-2f2102e06971\ndf65d61a-e043-4287-9582-1d848cab0681\nc15f770b-9cbb-4b74-aff8-13c71490f78f\n9f5c9660-2f35-45e4-a054-9044cde68bf0\nf0dd7ba4-5a62-4106-b3b7-9fb3183ad4cf\n5702406a-e2ca-4a9f-bdaa-b72b25b8e1a8\n860672ab-c17f-4389-9823-dc2af39d8d8a\nfdc8dd29-33de-4f72-a4b7-ffb34922bd31\nf5830666-bf9d-4cd9-b8b9-18b2a45020fe\nf60594e3-31d1-4c30-bfae-f56374d23397\ncce930d8-2437-4d3b-8f48-cdc295bc70f6\n94a5e03a-ec4a-4b47-9821-db0994896ce4\n13c2502e-6511-44b1-a80d-7d31be661fcb\n9fd7e3c3-5d29-4443-b1dc-082cfc083cc8\na216cbeb-2202-4899-bcbf-db2c03cb73e1\nbdff9ab0-78b0-45ba-87ae-786062c598c5\naecc42ec-5b8f-49a9-9145-b5ff4798c861\n761ca326-2ecf-476f-a1a9-44e05a7b5931\n35925509-a040-4363-90f7-aaf77317a195\nc1338411-b736-4662-a1f9-8c15ee1457a2\n6c9ebadb-c520-43c3-92f7-ff9c3b856d6e\nbf241af6-84ca-4f40-94d6-a503ebd572b9\n3310f5e5-d1fb-4b30-bc36-ad9dd390d489\n18935734-b27e-4a22-993f-b61943e47cbc\na526b047-be6e-4d70-abf8-8ba7031a891f\nd1480664-81f8-47ee-bb3a-b81b9ad324c9\n88e2876a-1269-4703-878d-2b8926cb1a26\n712b1f52-f1f4-4749-8ac8-320ad95c7116\ndcc266b6-5c05-435d-a5ef-1a24d3878ac7\n22d2ed44-55bf-4ea7-86be-b6fdbfc3bf0e\nb4022719-47f8-486b-be1e-cf850e25cad5\n2fa74243-e74e-4e5f-8913-651dce86e09f\n8a3da676-cdae-44b9-9e8b-838cf6ca5cc2\nae0f9982-c9f8-46e7-877c-1fe836ddd810\nac3cc7a6-9484-4ba1-9787-bbd611f4243b\n08b3bb9c-5f8a-4779-8cc9-fe34da0cca17\nbccc192f-5325-488f-a3d0-9df4c5971faf\na76d5685-3f2b-40e2-8a39-5a0434b938ba\ne104c64f-88c1-4e50-9a65-3d6167d6ee4f\n1b41c381-a9c8-4c5d-a2cf-63939a760ba8\n90793322-1719-4f3b-85c2-822cae010948\n391d5cdd-a8a0-4dca-96bf-626b83820ae5\n0e479055-8255-4bec-9549-c2c8ded3477f\n8f99340a-7e57-4279-a940-a72d722e2bbd\na07def28-6556-4c91-b1c3-7fad8f5ec92f\n0b559862-3e38-4120-afd1-482ad0233955\ne315b497-5e5a-4c76-8483-8adb39bb650c\nf1255167-8f3b-49cb-815b-63cb7d46c0b8\n821ded1f-5fae-4665-bfff-b3ce1fef03d3\n2f033a99-f11b-4e3d-927d-a6744a6aa63e\n137866cb-2931-450d-828c-44431282ac00\n77f64b7d-5790-4fd0-9585-bd67c1b5507c\nc18dcc8d-573a-4e8d-90a9-4c5ebe8b71ab\n17016e4e-9980-4d0b-9883-ba3ab93029b2\n19e39e5e-86d5-45d6-8170-f88411f8139d\n5fa6ce18-48de-4ffa-ab25-daa76a4851fb\n50d86809-06ff-44da-a959-b5f731f87079\n96297902-9990-45d3-8823-0adf21472ae9\n0e4eb89e-2e9e-474b-9187-31e379e08b19\n7142b836-dc5c-455f-912a-6faffe6b6f87\n4b4bf0a9-81af-4af4-9380-1f0569df5d94\n431fd7b8-d883-4f6f-acb0-63d66d294fc1\nf881db06-2168-47bb-9ea0-f6bd0569b142\n10c84d7f-bab5-43fb-9b74-5e917487c127\ne0d82e22-14f7-47cb-a8eb-1a6b2ceb5912\n6100f6ef-dd2a-4dd3-a92b-81ec3a6c57be\n7ec57bac-1463-45be-8e6a-f176c0f8f749\n7e07a572-a6df-4bb5-a15f-43808b663180\n6855b250-e334-4c4d-bdbd-fedc9e5f56a9\nff323bd2-97d6-4fd7-acdb-a17895c3d263\n57a2a307-ca16-4809-9186-d9f3c3fbd406\nb9fab20b-4bf8-4153-a2fa-a89346ff8520\n1a985e31-0248-4b7f-b1fd-810106cc0b21\n37ff5ac3-eafa-4214-a3c0-47ff0f99fc58\nd1e1eca3-915c-4c4e-a2c7-7e79384aaae6\n83cb82b6-bc17-4561-b785-9b56376f11eb\nfa49c878-4dc4-4ee0-b6d7-4c40557432b9\n61162bcc-006c-4ac5-b02f-c1c76155c4dc\n29dd7775-f8dd-47b6-964a-66d030bd6531\n0770da57-a604-41d8-9755-169dc7c481d0\n83110aac-c11b-4b98-a993-a0a0b52753bb\nf0a28b0c-a769-4544-a3cb-49a1e9b7c8f6\nd997ce97-8d5d-47a4-911f-e3f99a1b49ca\nf3a07608-fdc9-42a8-aeba-e74583300920\n3b542504-94c9-478d-a6cb-0def21475cc1\n25345740-0f7a-4ad0-a92c-40391a9e3f9d\n6aadfe12-15eb-490d-b1f3-892ef3ce08fb\n8a1ea09a-3457-4341-915e-cd5cf1662546\ne2dbeb49-dfc5-498c-a167-ce948b8abdb7\n0d7b6034-8b88-45fe-a62f-4dd01c5fc7f7\ne19061f5-c91f-4750-b7ed-e7ff4c8ad8e1\ncde1046a-ee60-49ac-a942-1ecdf1a62431\n2a3b4e1d-3142-42f8-a9ea-d8271b318a2b\nc7b4f336-d3a4-433f-a0bb-94505d5fce22\n86adba1c-85c4-42ff-a2ec-b67d82a50269\n3b1a7330-3b88-49b6-9804-741ad2cba9aa\nc97c2a5a-a331-4272-90c0-991f70a14d15\n425ed2da-c885-44ed-8bc0-de174b287b85\n54d8b057-b523-44ab-9f88-6b72530c0d42\na61c8ba0-b777-42d9-a8a4-1b9eaf9fecae\n49ab896a-08f2-40c9-9d61-428413ceb471\n375000f3-6117-4d7e-bd0f-b140227b0bf5\n853b9922-8a65-4514-9ba0-8ce2aa108ea1\n6eadf65c-9d68-4aa0-ad82-3c146cc08344\n99f6e87d-ced0-4d63-b009-00322025ccf4\n5e4acb9b-4d51-432c-8d35-3b933ef8347e\n637b4f8c-e7f9-440f-9e78-4d3fee7718e6\nd86132b1-b72f-4850-ab0b-f7b186b2d17b\n18c07a6f-f7fb-43e8-998f-f138130cacfb\n159e104b-6ffc-4ced-8c65-8c9e05b0945b\naa639915-9b87-43b1-8cd7-2c913295e0e4\n3abee484-8442-4391-b822-3410feff14ec\n348f91d0-ee22-4766-9cb6-8af941b69594\nb24c0159-d884-4b68-9ce9-68f892c8a43a\nb1f14dd7-934e-49e9-80d3-5f0e74f4e3f3\n4eb5857e-fc9f-4ac7-9b8a-220f0dcc3e20\n5b324ce7-077a-4ca0-944d-1f98de2fc023\n3a6d0744-897a-4000-aca7-1a57ba4c84f9\n8d75e426-fef5-439d-b730-f29b9d750674\nd9d6812f-7994-4984-99b9-779b48b5f32f\n1dc31ed8-2b31-49c6-80d8-4e3d8fa6d0ee\nc05b37d8-4f15-4e43-a57e-aebc9561223e\n54404196-699e-4ec5-95c9-013ed0e80f76\n6a824a9d-361f-4b80-9dd3-d82945ca1f60\n7115faca-9eea-40aa-94de-303da94f1753\n63a30e92-36b5-4afb-a517-9f01ebbf00e4\nda2bd80d-3601-4bcc-bb90-7d34dd80d9dc\n7e50f953-ee48-4888-ab11-99bc34a5bc61\nebddb65e-59ee-4986-ace4-267a7e9e8156\n8c9d4dae-61ad-4b19-8ee2-327651ed23fc\n294adc0e-088b-4270-8fe6-ecdb657d6bd2\ne3b3cf86-f7d6-4baa-a437-42095b4c9e75\neae1e513-c060-4eef-849d-a5fb71265512\n0c7fd3ff-b594-4e2e-9c42-fa7e884f2282\ndfdb4d77-8bd8-4e35-b38f-c806c8e2a59f\n5022587f-5989-4d36-bb26-2d466936f212\nca7e9fff-c87a-405e-8b0b-c16bd9d7cf40\n4f3f018d-eb6e-46c1-ac43-a91fe60869c1\n0fc48aeb-092b-46b5-9f1d-b662289e6eb0\n827b129e-7661-4469-bf17-28ee4501e19e\n2be24158-8a75-45ea-9531-f9f890dd193f\n9534411d-a09d-43dd-826a-43ab0c11ce47\n272c6797-6e1e-415b-b6f1-b0535cbe6230\n13d2ccac-a259-4efe-810e-14a33aac6d77\n19563b22-9086-4093-a7cd-a57916ba651b\n63ff0c5c-471f-4ede-aacd-cfa22ef854ba\nca3124d4-1b23-4e00-afc1-c248507e3a23\nf80c1f7e-fe68-474f-99e9-2898ae88dc79\nf0c37f8d-8802-4d83-9323-34360c0e5973\nf233ecf5-7cab-465a-a3e4-8c9ab3e1c705\nda342b03-c149-4ed0-945d-9b6fb6396ee6\n89041d2e-e673-4c56-8f84-e028bb6f96a4\nd55a3d91-7860-49b9-8025-bfd0bd8f8343\nb4406570-aafb-428b-905d-e32d3f764ac9\n3fc60951-cbf4-497d-831a-39822e0b2945\n7116a4ed-5034-4d3e-9b3b-2c984e6b972b\nffcc08ec-dab3-4ed5-b24c-8582234b63fd\n98913137-3ccc-4f3a-a743-62aeeb43bd09\n1ff47d94-1889-43e4-afca-c174ea6b20d3\n3a6a9b1c-1c65-4879-85a2-90eefcbb2756\n2cbb1f49-ec6a-4e0b-a32c-dd7249177b6c\n9fac0254-4b0d-403e-98c2-5f3a4c50aa86\nb40a51a0-ba9f-4acd-ac08-2c1e4b40b38d\n47d0f514-eaf0-47ba-af45-bca6750483a8\n019c4bba-f6a4-4ab5-aa18-6f410be24054\n0d40dd09-6d00-4383-806f-042f27ea9303\n35992ef1-3bfc-42c2-bc34-c6d00b2dd763\nfc0c40f9-39a5-4d48-8d82-80db12615b0f\n65722149-922c-4daf-8d27-c6a66558ae04\nf1a88355-2723-4c21-98d5-cfed856938e7\n1b8f5b81-e9dc-41f4-a3b0-5189e4bb53a4\n14c1e304-ed6e-422d-9560-b66ce3c03099\ne75906ce-94f6-4577-8f53-140d0126602d\n8c2af892-171f-482c-9f60-f9a3019d5e8a\n362a0ca8-e1c8-48b8-bce6-a988e9b64ef7\nb0faf0f0-aae4-4b19-b8f0-4391c424e58d\n3403deea-e68f-47bd-ae7c-e6da0c3fc48f\nc274799d-c742-4c1e-9b1c-eb4ea297c0bd\n47e96bbd-7c2a-40cb-a291-732076120d6b\n498b1ab0-bed3-42f2-8bf0-630ee471218d\n742737ae-8235-47f2-80cf-c25798cbda7d\nf8ded795-da29-4362-adb4-0c25f20617f9\necde6bc9-25e4-4443-9173-3c4c79224c67\n89726bf1-7d96-4a79-9d46-7e9e515acfb7\n5a1d8bc9-1c09-451c-b5a5-dc9056134486\n711a152f-0d86-496b-a1d7-d565e9ee4867\nf61d912a-077e-43b2-89f7-d1bbec5161eb\n2fdee652-44ea-49ec-af3b-fbd0b1e3c4d8\nb4f14c4e-000c-4e45-95bc-9620629937cf\nc5f08c97-f8c8-4819-89e7-622bac9cdf7a\n2653417b-f43c-4f0a-bf30-d13a8f3131e3\nb52a8c59-d430-4542-8c3a-d5a954f8bc7d\n017e6d70-d089-4189-856e-ddb8272dcebc\nd5a3053c-816f-4dd6-8659-b5bf86d0623a\n685ee5aa-6ad7-4a32-ad11-84bfa524aac8\n5bb06298-3a6e-4c68-882a-ed15f4f602b6\n9f0f7ada-84b3-4530-9517-2dfc837d96e5\n328b4b36-4232-49a7-b4fb-ff623225905d\n2da698b5-0932-4756-b963-67b97f1178a0\n0691d4a0-ef9a-4f75-b470-1cb3f0050d28\n0877f48b-7333-4bcd-a883-c3e56c1434d8\n8150e131-4fb5-47d2-b6bc-76fa55e74c80\n0168e162-f4ca-483c-8939-baae1bdfd187\n69143016-bf21-4929-8068-a65aa7d6f839\n2ddf905b-fd33-479b-bd4c-50a86267b926\nda93c439-58e9-4f94-aa19-82a9b01b49ab\na30fa9b3-01e1-458b-b89c-48a357fb91b6\n0c143d1d-89d4-4c4c-a0f4-bf3d22d1cd35\n3f693b23-3fb4-4dd9-91d4-64f4e41b5771\n11a509ca-7d83-45ec-b491-b191a71356a6\n65b07cfe-fa2f-4fd3-84b3-75fbfc0bc14c\nc3b193ab-d9c2-404b-bc6a-5cc915bfb4ac\nea0cf053-7f26-4fad-b3f1-e096dcdd5710\n780b089e-5df0-44c8-bde9-fb9d296f2fc6\n71951b35-c0d5-4825-a16f-ced569180d74\n09bc5a96-a348-4d01-aac7-c47acb21fe8a\n87af9398-8a67-461e-a4c1-1a8e2c5385d4\n5e7996a6-74a0-4154-8e55-592c7fb12b74\n523f27e8-f4da-40f8-b698-a6cd9d43ccd8\n95d2769e-d45c-4b59-8c93-06780941fb94\n9b66ca54-e47d-49a1-8265-9c4fbb0e69b4\nc67a75e2-8384-41f2-a88c-000f69b913fd\n84a47c4b-8577-4cf4-9ad7-2ddeab8d8071\n9fc18117-1572-4ef8-9001-afed05b97df2\n8b163541-2fd9-42ef-85a2-4075ba800c4d\nd60a57f0-9f42-4fad-9fb0-af117bd58378\nd0365589-bfbe-4fa5-9b2b-17c50e14bffc\nc4c1e1d8-35b1-4a46-9cc6-4297b0d63143\n9e86e600-866e-4b2d-a0b2-0eb02a671dd6\n596e6337-f5f7-41aa-aad0-2e6ab02de85f\n379bd679-fb19-425f-8d69-bbcc419f99f3\n0c5205db-169d-4a5d-b66c-713bf3aa6b71\n9e54c00a-fe72-413b-920a-1ca91af0b250\n43756515-76e1-426a-8774-03514c7de83f\n3bda38b6-5e01-4df3-9d5e-c9417502b21f\n73b59315-07b5-4668-bb3f-ebd2ab7f5688\n897d9585-446e-45ff-91b3-c7f3a4956d79\nd3595f0d-11de-46ee-9c8b-78d19dfa0d4b\n1996c950-0b37-452c-965d-94da70e0b060\nad842cac-93df-4bb0-b1c8-0a0f63b4d05a\nd9aab5ff-462e-42e0-9af6-7138d003e87b\n22efbe6a-2395-440d-902d-93cfceb7cf65\n6a8eed70-ef28-44b1-9475-cf6a43f4c150\na405ebac-2503-43e0-806a-02bcb6001a37\nb460ca33-8d90-4de8-b837-6e06b63b9990\nab1b6440-eaca-4f86-8f7c-59506c6a205f\nc480e22e-7271-4c51-8c3d-7688fab636f5\na458c6d2-b74f-46b8-9f8e-74a58700167a\n7f85ed37-6937-4566-b3d1-741b3f9ed368\n99eaa299-87d5-41b5-aa2a-5531f0742d8e\n38f8c125-5f25-4b07-a9be-6722de218abb\nda405e7c-f165-4514-8575-678af1ef1efa\ne7dd992c-24fc-4871-aa87-855f69f0f5af\n98c958b1-cc9b-4bac-86ba-a9a0b3a5d43b\nf50f4b6e-a19d-42d0-8363-2c686efb9dce\n7a58f827-f270-489d-96c9-13db75dc62a6\n1896a0cc-34f1-4365-a3d1-56f6f776480d\n9749a2bf-a9e4-4a6b-a200-3196e13b747e\ncfeb8bd1-d65a-49df-89a8-3e8c5937f0d2\ne86091fb-ca35-4137-8ed5-db731d0cf265\n277f4bf8-05ae-44e8-9d40-d487f7aa52fe\nd9645ca5-6198-477e-8ae3-72a767f05220\n98946693-0f55-4a3e-8598-771a0ef42d47\n7e39f489-0867-4e86-ae24-c9e60533c724\n956646f2-8afe-4780-80ec-750894a84ba2\nb0fbeef0-d285-48fa-a255-4abfa64065ae\naf9acdcb-d553-4580-83e8-a32a44c1a4f3\n6b8bc18f-50af-4b09-b548-302bc590df06\n1d361eac-3264-4500-a153-41732b0179ee\nca5ea11c-80dd-43b1-8d42-bff618b73eda\nda694af9-7706-420e-a54d-554c1a4166c2\nd8953c92-b860-460f-acb5-f3e40a3d592c\n4b50f897-0ab8-474e-aea7-e85d4c8670a7\nc39c8fa7-5064-412d-a814-fe355a7ced5b\nc767561b-2f24-447c-b1cc-2847c60dee21\n8cc8ca00-6167-4b3c-b36e-a8a229f73f77\n65127ad1-ccb7-4c45-9b5b-4f297b30835e\nfc4deac3-36d2-4145-82f9-091bb7f5ce36\n3cc7a0ea-195b-438e-9b13-c761369dd182\n54bbab83-158e-40db-8a7c-1b2766008679\nba6ccc25-5994-4bfb-af7a-86d98b9cc3d3\n96d823ba-8e0d-4a59-b9dd-77ab0e311642\n0c5bd3b0-4a10-41a9-8142-48e527386d9f\n3c3c3de6-f133-4fca-87f9-9383aa13da1c\n49e7189d-c63b-4d22-86f0-2ee90e18fe42\nf89f960c-a709-4e56-926b-af696ce707aa\n3b7c85c6-437d-4268-a669-eeda82a6f4b9\ncd42ac4b-c83c-428a-91d1-0cbbe0428057\n4ee0ed95-8aed-4656-8495-94fe53c5b778\nc6794c71-3626-41a4-9f05-5f89208e00f1\n4b08b32a-1556-402b-ab90-43fc8bc5eede\nf489cf59-cd01-4fe2-b62b-20c1c13c8d79\n7f9a5364-1ee7-47e9-a90c-909de83ed6a8\n054ce729-a7e1-4e6a-b25e-8f20f9ceec43\n349873f8-8242-4e1e-b4a2-eb1aa2912a98\n98127d5d-7fbb-4121-a6ca-313331ddaa64\n46ab58c8-0fa3-437b-88dc-10aa172444a6\ncc97e2cd-5bd0-4c57-8e7e-186f726b4c15\n8aba4207-92d9-430a-8c8b-2240ed1ade14\n35454828-4ee9-424b-999a-a30a68f21e75\n084f83b0-8e28-4d13-9014-24088094f9c3\n943cf5f3-ebac-456a-a2fb-a96f3ae347f1\n65b51b44-6938-4403-98d5-f1dfb486d41e\n3e7b5028-6281-405a-8bff-88787e304649\nf03b0237-be0a-44e1-a914-04f3765eea34\n1fdd0359-b9f4-4f7d-8725-dfe193825032\n48ade14f-0a06-4e65-ad74-74c427112ca8\n10dc9d0d-3e6d-4cc9-b900-3b86182f68f9\n86520de8-2168-40e5-98cb-6220c1c619ea\n0f8456fb-f78c-4ef2-ab25-b94233d93e0f\n11e8d62d-612a-4630-9986-af7819ae12c6\neee6699d-b514-4fba-bf7d-5f6019e07990\nc1beaf31-d5d8-4718-b601-2ce9cc39dca1\ne407d085-3905-42c8-9097-cc40c81e8df2\n10764023-551b-4086-a919-36152b3fd4e0\n70ad57a0-5a4d-4118-b61b-e9cdb1ad04e2\n84e46449-106a-4d90-90f8-31111891bd7c\n392b0e0a-0546-419d-82f9-1ea95d719900\n4e3aca7b-7823-4251-b8e3-bef6b5b532e7\n6a153bec-2e06-4d8b-951e-bcbbe9c4b003\n1616fea4-c4b5-40f1-8230-642583fb1c23\nf0c7d081-d9ea-4c10-8811-93736341cbf1\n9620b996-3f7d-4e4f-b676-e6aeaf060e48\n44d28b0f-1004-4bdc-939b-ac45ab60cdea\n2ecd74ed-9710-45a5-aab9-badf22959df7\ne434ce92-922e-4a79-a502-d9d3e1af2745\n7516cc55-7c0f-4b09-9cad-123a69b5bf5c\n0bf9c660-83f4-4bfe-85c1-f7baff57c3f7\n718ea630-e06c-4ef7-a13c-ae6183f32d05\n8428cc2a-8df1-4750-8fce-b6618738f896\n43f73022-3154-4da7-bf82-3db7a5bf891e\n030c6fb8-4697-4a27-aa90-8fda1a5ca837\nf6ac65e7-6ecc-4c22-9e6b-51763fb16246\nfd5bef85-68a7-4fbb-b7d5-4b83da58d147\n4eba4bbb-2016-4fc1-a8d8-2aee899fcd9f\nb0b56b48-7b5a-4356-9bae-861398af6d82\n92326f16-d145-4e54-8ce5-d8f26c452f9f\ncebf7b0d-2392-4baa-a276-dfae7899ad5d\n92429dc3-d83c-4e96-b276-9464b806703d\nf8e3c691-a18d-499f-a35a-bb3d31c958c3\n4ceefa74-e5e9-4640-87a7-51b3e1a71ed2\n1c3fc666-87c2-49b4-bed4-cabfeb8505dd\n219e8c6d-5a83-440f-9259-390ba2f9ac3c\nac69d390-5315-48aa-9b7e-5ab322abd7a4\nec82abb5-425d-4dd3-91c2-d1b94dcd37e9\n62f92d20-e64e-4f39-a47f-cf44fa0aac53\nbeeb165f-f026-47e0-90a2-fadec538a401\ncd705942-4090-4234-9328-9d070cad97e9\n2fcfbbe6-8c31-4d9b-b763-4e6d9995048c\n968e9bf4-35f0-41af-b133-a92018e9b9bf\n59f86dbd-5ddb-446b-bc09-51fbf85d540a\n869936cb-dcec-41fa-9269-0a800a0a160f\n8a1b07ea-790a-41c1-866f-c7a0d99fd547\n195337cf-af44-4eda-8ad8-2da4c6334985\n3a0c309b-7d37-4093-9898-6450ae8e2d94\n4634ae7e-7a64-42aa-a587-d6bba3848b31\n2dffd147-f898-46c4-ba85-27980dd3fea4\n7226bac0-2d3d-49cd-8480-c966a19a5106\n5dac2deb-6bf6-4594-a4c0-68046d6564b2\nf731906a-8a5c-41d9-9b9c-5a42ba502076\n33994b4e-0cd5-44e6-8acc-e269f14fb7a2\nba217b0d-e529-47ed-b839-86cfceaea78c\n03278a1c-506b-4344-9680-fc284e6ab45a\na26b2cca-4179-493e-8712-7f89f21bb45b\n67f33be8-d3d9-4525-ab72-c909b724ec85\nedc95ba1-e3b7-423c-8e23-52c87741bc44\naf0ebba8-8868-4334-a719-80aee07e840c\nc5edb7c4-a628-40f2-964e-c376b91802a8\n9c000806-d2fa-4d67-a6d0-f009f5d18593\n5e6c0fa5-5e2c-435d-a7ba-ca2499846425\n9b2976ef-2d85-41d6-a425-ad4fc3914c9f\nf0311aa9-2f08-4593-8e17-dd1342597e13\n1e214cfe-a3b3-4083-81d1-25bfdb805566\n1fa12f3b-905d-4dd3-a4e0-53b46f9213c6\na7d7e167-98ab-4267-95c4-500a1198ece5\nf806ba9b-0d74-4b1e-a952-d2f35b03cd6e\n5245bd41-51eb-4cd4-ad32-68a3a606c62c\nfac63e13-4d12-4497-b61b-6a4969d188a8\n1884daf3-8484-4f32-8edd-357c28d49856\n77fe7be4-23f6-4ad3-8f86-4560ac66027c\nc2d2501c-ec86-4a40-8b0a-d0013746a424\n17366420-4b60-42a0-8ba2-a27a0446cf6d\n4ad19b6b-3d60-4bc4-97ab-cdc32e241f6a\n94f4a16b-df86-41e3-a537-66608faa03d1\n3de66b1b-45f8-40f1-a34a-570264aacff7\na8783551-9f06-4bfd-96e5-df57a4ae8d77\n8745e566-c54f-4e7c-af20-453ee4c1b46e\nd0b34674-ea50-4537-af7f-24b8fa3e5e72\nffe6ec4c-b7de-4a44-97f1-13975549cc82\nb4289e56-15a0-41a5-b500-d640cbfd66b8\n9d3b7a44-6fe8-4e61-a100-eea6914cab44\na0ff9bd4-0c3c-42c7-9c43-ce0bf967bf83\n4fce6a47-979d-404f-9716-92a23a3b850a\na4dbbfa9-91e0-4549-840c-b2184f21571b\n7970ccbc-c07d-4da6-b6cd-bebd7a245521\n7d07521d-bd7a-4052-97e7-bfe038945816\nc02948ca-3c22-46b6-835d-a3923983905b\nf342051a-5166-45ac-a92e-cb410fe112e3\nb76d4e51-1740-473f-9142-988e23407fec\n42784c4d-1986-450e-9dd4-d3f0b8f31fcc\nc0fa2efe-6306-4a64-8c83-2c5c34cb0734\n331c0705-e2a1-4b5c-95a8-5d68526ffc16\n4ce94845-1510-4170-bf44-b18402c4bf26\nd8852264-7b02-41a5-95f7-0e38ff6d2932\nd9c8ccd9-d763-48cb-a281-83f7ca719dbc\n1fb0b1ab-da0a-4883-a67f-b340e8279870\n48a0cb0e-e5a3-47ff-bfd8-a4c062cc8e73\nd667238a-6dd7-43c7-8603-790b31c96ea3\nbe2d4c09-c6a4-4e5e-8982-aaf25ed86654\n1d9502ce-801a-4979-8541-09aad8024920\ncb53565b-fab9-4977-96f3-067924e91bc3\nc31f6356-8007-435b-b62d-88ec093c7449\nbc6d95c7-f7e9-4880-8fde-d2a40e8968a2\nd13bd2b3-6050-4e32-ad2f-dbda5940deb7\nbe9195c2-ca3a-4b7d-8d27-84cdb93b0a10\nc3401592-01b3-4ca8-822d-efc1ae0785d2\n34e9548b-6503-4fc3-a591-629d79ba8d65\n1c0782a0-ca6b-4d05-a3b7-63499efe3602\ncc0110fb-2f26-4893-8f47-4147d130edee\n953b3fb9-ccb1-46d2-bb97-5c1929e8232a\n4a29b9d4-fc57-4438-8c65-b9884d2753a5\nef63a86c-469a-4aee-9c01-abe8643411a6\nd1dc6692-13eb-4895-b4cc-b87f03d5b906\n7b3ba120-7ccd-404e-976c-c3ab385392eb\n04f6cfe1-9642-4ad9-be6f-9b64befd714e\n7853ce1e-efc0-4558-9727-260eb884dcab\ncc43f3e5-ea47-4ca2-a8cc-10b2b212a192\n881a6e3b-b2ef-413a-8964-1fdfd6caa771\n5a3562d5-d799-4c67-8eb1-e4bf6768413d\n12da882f-f4b2-4d8b-abf0-5b1d0ba90719\n04f5488e-375b-4fcf-b869-792228cb21d3\nc3c2d115-a028-4ccc-ab52-57eacde2b48b\nc7919a15-0714-4779-a40e-cbb8f3936389\n2bda7574-b075-4f5e-84ff-cdc7a7061808\n56686794-4259-4b40-84fc-98838f6bfdc6\nfe7f1ced-0245-438b-8fcd-0b8c63d4a9ec\n80c7cb2f-8d37-4219-a4d2-ecbe9bcafee1\na76e3b9f-f6f3-4378-9e61-af31704c43f1\n1b224a08-3bc8-430f-9e63-8311b264044f\na4a50cbc-4ac4-4c8f-9add-f787a4b25214\nf1820178-e324-4e26-a78f-6104f5d16b03\n4baaa3b2-a9c4-4caf-9605-86ab5e07dc57\n868178be-1851-47e6-8cb1-8662a28fe340\nfecd531d-5510-4fc0-afd6-30a5b0de37e4\n6e207cd1-44a1-419d-af60-239dd9636d07\n29c0736a-4d2b-4d8e-b488-88c9ec0fb54f\nb750dbf6-e376-41e8-a93f-62cf78fb886e\n50cba426-3b4a-4ab5-bcda-48eeee0bcc8b\ne5221449-aeb7-44d0-a951-e6d28fb5550d\n7d2f86d7-5eb8-488e-bf93-ee74b20fb00d\n1f6c0c8b-e007-4a8c-82aa-55586b45c43e\n4225998c-280d-4459-ad1b-4bdd2adffbef\na8c4f3ad-2ccd-483b-a824-064c1602c50e\n93a6cb30-0de0-43ca-ab4e-c67fd133f113\n24ea2f5b-bf33-4276-930d-274c628b0288\n49a2b883-8d8d-4b47-84bb-e5022a209c6c\n2f92d95c-7862-4db5-b54b-d4774e8c0d14\ne628918e-560d-43ca-9579-3f69fbb6e40b\n92b9d858-d9b7-4b71-b0b9-efba19b8442c\nc3854d2b-f508-47a3-8a8d-3f99e375e1c9\ne5f050c8-53aa-4920-b342-46cf63abf8a5\n616dff0a-5a6a-4286-9e0c-3d03c5cbd5bc\n1ac700ef-8d71-456d-ac5a-481f486c3782\nff38fcdb-2049-4edb-9475-8e4790eb2b5f\n92a437de-d8e9-421a-b3d7-5325afe05eaf\n87f77d28-70be-4aca-a831-618f5e719918\nfe9c9ad0-ffd0-4569-af74-e79afda07ca5\nae56aacb-2830-4f39-b6a4-26c251361357\n7531506b-7f79-4946-9582-42e29af811d3\n316434f8-ddc2-4a78-b6fc-fe709abf17b4\n6a3efdd3-a25a-4f55-8153-be0dbc5cf309\n11a7f0ab-2a42-4b90-aa16-fb85e3b5694e\n48e62375-7717-4b59-a58e-ae7a692028c3\n74a6017f-f947-4a3d-be51-53b479502fab\nb36ed152-1c8d-406c-adef-b71b2c70d9f4\n212cd157-144d-4f34-96da-939d9af34248\nf80c5c39-21dd-409e-bd5d-5d95ddd647b5\nc3dcb0ae-c3a9-4150-b149-67163a8894d1\n8f924e55-9f81-4f3a-9440-765813934724\n64511f2d-c063-4fd0-a141-13ef83af5dd8\nf0cea6e7-0692-4f0b-9d73-6816546a65ff\n7802e74e-f0f8-4dfe-878e-245cdc8fe01d\n0c917d1b-79c5-44e2-abd2-ae84c1fe1ab8\ndeb56dc8-bbe1-4419-971d-b56791a6c7af\nbd911968-0d3d-4505-a6b4-12ac49c221b5\na37f9ae4-9cff-4472-a2e7-fcbe407ae2b6\nef78f578-aa78-4d8c-99ab-0369eeacfe0c\n4ee0efc6-7444-44f0-b6a9-c2c7c9873234\na480e735-4521-4128-8dca-c5e1821c41cc\n0c5e0e61-533d-4b85-82c0-da12a3124ad5\nb80f146d-a143-411d-b3cc-31a61ca26799\n3d5ea6a1-a35b-4d3a-a805-668d1c9909d0\nf466f1b3-4bcb-4406-847d-c1553e4602d2\nb9e08d75-8d5a-4186-bdda-fc7d9f034695\n6df4f39e-8e55-4387-ae5f-45a92213720e\ncd6abff2-bf6f-4ddf-adfa-f2519575c006\n277d7cb6-98c5-41b3-b92c-61a2562365d3\n7fde6275-d978-48d8-9995-ff4e4c9b9bc7\n36ebef83-1889-4e1a-afc3-e29a8efde315\nac03825b-25e7-4e8b-8d68-53ade83e97f1\n162ba15f-f5cc-42ea-9637-33481137be95\n79d0bd83-7788-4423-b7dc-5b0b3b0b35f0\ne2b85902-9e6a-43d5-b13d-e0c605686e7f\n746e7a7d-4c16-4ad5-8fa5-d3deb1234edc\n39be0ff9-bc9c-4a17-ba44-aebac25414cf\nf964d243-c87e-4c15-8ab1-6f2cf4eb72c6\n41c2034d-454a-4613-8700-2307d7219676\n037881ad-8a3e-4e4d-9cb6-50d0a9de763c\nfea6ddf9-dd4a-49c4-8d3e-ffbc1f2675d1\n6f323079-672c-483e-bbc8-43e79f59aeae\n3b5344ef-a5d8-46a2-bcbf-0ae0e411e6c2\nd976bb7d-ae5f-4179-9b4e-fd78bd51997d\ncb8514c6-d284-44c9-ae39-7d75d2914001\n0822e5f5-d4bf-4113-85ac-00e9043ebb26\n2210150f-55ba-41c4-8b79-8ac39d3f2e46\nd54d66f3-a566-4864-9246-efefab7c64c6\n860b8767-4cb5-4e64-9f98-30f4e4803d59\n7ff32c80-01fb-423e-bb24-b10aaf77b596\nd628dabb-0d09-4621-8190-44da10beeacc\na2449e77-1454-4f54-adcf-831258f54d38\na81bc4e0-fdc3-427d-b8c0-4cdd149e826a\n1d4a9780-507a-49d3-a78b-a6bead072074\nde21fe7f-8902-4cbb-9c4d-e27a8d7c5671\n9e0866b0-76a6-427e-98ac-bc5ea2c4c770\n9794e4c5-1a28-4b5a-aa2f-06cacb1fdf69\n1c534476-9643-47dd-822c-da6cb7788174\n27cd4eb7-0a70-438a-95d3-e810a91e73f0\n191e0f58-27d9-4f42-89c0-e415e8bfa2e6\n799ce731-e113-430b-bcb3-f8dc58e983e6\n931d8462-9d52-4f08-984d-b823a8e208fd\n686f43af-812e-4ff9-a987-28eea60db7d9\ne3f907ef-9eb3-4512-a4a9-e3832457f487\n247064c8-a875-4872-92ca-08030629a509\n75ac3a01-ab50-4af3-86c2-962145779b24\nbf029122-80be-4bde-99a5-7cf3bb8cacd8\n61e5eea5-3dd6-4ae1-9882-0275776b37b3\n855a5074-57ed-46f2-8661-fa158f7510d1\nbcd687a4-827c-4068-be07-ac34509ecc6b\nbdf7f65a-34e9-4380-9106-5282170a674e\nef560226-a6cd-4a5c-82c1-a863ffeb2c2b\n8f3a702f-d736-486b-8116-b0a7aa6c0b31\n49cec39b-3300-458d-a942-db477e5cf187\nf91bf343-329f-4edd-a4e2-fb4662a1c85a\n993224b7-af30-45ac-a7d9-1984a8d033ee\n7444ec0c-fbcf-4962-8027-2748a97e1a7f\nf8488c0d-4411-4166-9972-1b75fbb25c05\n0466ce2a-df37-44fa-8e06-ae7e6199a64b\nd01ad781-669b-467f-923e-1f494483acb9\ncd44fc0a-b62e-41fc-8b4b-28a8a50ab4ef\n062886f4-3a65-48ad-899b-fe9d725d9d9e\n61581d69-78f4-4d3f-8d90-935306914fb1\n30a488d2-4155-4737-a30c-122cb5d88613\nab25b6f2-0437-4193-9f23-87238104cf1d\n07db16f5-63e4-44db-a6f5-b60306d405fa\ne640da0c-8e75-4057-8071-87e888a258e5\n68a4fd67-3bad-491d-b2c0-4ebad73b4f3f\nadbbac16-b595-4c5c-b2d0-33cb654d4ed8\n36fd9390-ad9d-4b4a-8a80-106f009563fe\n8097bc03-a086-4cc8-b5a5-2bea65f88bd3\ne5d8775c-864d-47d7-9982-0b745667e9a5\n30a649dc-0f63-4883-b0a4-4177cbe59984\nfd1cf261-0424-4c51-973f-f305adf8e374\n9fb587ca-7e95-4805-b648-3baa6260fcd1\n1f26727c-1707-4c8d-9926-e62861a7bafa\nab5e9415-ee6c-40b6-902e-14a71212e04e\n7515c9bc-6d46-43d6-b5f5-48d92a780aea\nf17b4523-0a45-481f-9b3b-9ec981d60104\n96e3e1fc-ef88-4fb0-85ec-fc96cab5b2f4\n7a39d4f2-3f18-47e6-97e1-ad64e6fee441\n4d47eabd-be35-4eb9-8aff-fc2574662918\na651248b-84a9-41c7-8ba1-0c1d1339c0a5\na72244ec-2b6e-402b-ab9b-9287e9b17721\n6272f31c-aa74-499f-8099-396389149335\n5f3a6ff3-1198-44ff-b541-3dd4586386b5\n37be5ad7-60dc-4b73-ac3d-bacb2612e3df\n04077f4f-b5bb-4db0-8d0b-37059ecc0329\n7419e01f-b3b4-467a-ab25-8232ba2ffca1\nbe4524db-7b6a-43f1-a44c-99541afa27b9\n43e431f8-0f54-4b94-b5ed-e7c1132f61c7\nea17d3aa-1111-46ea-9592-7a12001ac255\nbf9c2ca2-96e3-4bcd-8b0c-d78867402ce4\n027f07fa-72cf-4a61-bde9-b4dfda952118\n0f38b9b2-5384-4882-8f7b-bd78bb670bd5\n7c8ac49a-b354-46d2-a73e-0c7d58218059\n63048ab8-faa8-4bc0-9c65-2edb956d4dbc\nb66024a5-6fa3-4d3b-b754-4c0c7a053ae9\n9c34c4d0-e9f3-40fe-a1fb-7a7069941636\nd307878c-0205-4b89-b3dc-38c0ae2021f0\n19e3380e-b832-40f6-9fe4-8f1e006bcaa5\nabe3cda6-ec70-4ec5-a101-2d0e62a0335b\n57acd37e-8cf6-4701-85f4-a832a5e28a8c\n35219145-f88a-45d4-ae97-c050a7dd77c3\n299404ed-e711-41f7-8106-aac677bdd3f4\n6cd1d6da-ce57-43b0-9554-106f1b761b44\ndeed3f39-67f2-4205-b7fc-03d69096dd6e\n488f005f-afd0-4289-9a5f-4eb3bbee5083\nb58a4dca-47a6-416c-be7a-d2b0cb7e0750\n926e66af-73f8-4d9a-9aac-ece74819695a\nd5074af4-6664-4170-a356-c207f63a534a\n9eac81ab-5da1-4a85-bddc-365697e0dc48\n70fc627c-0f81-41be-8a0c-181e13511460\n1813291f-1dba-4c56-aa30-22c6be809b7a\n520a0001-731f-4878-a1b3-e7a20273699e\n5314ed3d-34b8-4995-8251-f27ff29c645b\ne243be7e-c5b5-4a3e-aece-5d3e3d8933e0\n06bf445f-2e18-48b5-9525-de6c2892d199\na732fc8f-08e4-4834-a67d-8cd2a360cdbb\nc0103f9b-6de0-4468-adf3-1cf315dcc5bb\n69b92cdd-114c-4948-a37a-1c1b4fe4497d\n991ebdcc-9451-4f6f-a054-168ac5aee47d\n56663384-448c-46af-820b-abc7120afe5d\nbcf2afb3-1d31-41c3-9a8a-1f46dfe334dc\na26b8936-3c7a-4928-a148-9b2674b6d506\n85ed6a2c-54ba-4285-9906-49d51655e206\n2171e645-e64a-434d-b705-7f58c8178652\n757962bb-0cde-457d-8998-fa1292651f9e\n3b7f5b9f-7f30-4cbb-be65-00042302a228\nb05a2544-3e91-4fc0-8422-e42caf73b25c\nde977f54-4171-4451-bbe0-ee98f7886914\n8e766c82-21c9-4b93-8dec-cbbe61766221\n661bb426-c5f3-4718-9ab4-6ceb762b7651\n28f4a21a-a46d-4417-b321-9b49391c3fc3\n818a8f7a-eb10-49be-9b96-2aec0b1eb437\n13bcba96-ac44-41a9-a8ec-c07a8d300025\n41a3819b-0996-472c-b633-95f7f94bc831\n5818bd04-c4a1-455a-8a26-f74683b02614\ne477610a-5169-497a-98a9-f1f32bcd64bc\n13b14d59-2f36-4fd6-b011-568e265016c9\na664b237-23df-4eed-8107-f80d69d1625d\n144db06f-d0ee-4481-a4bd-5a59a75b4917\ndcb8f943-a298-4a7f-9300-54d6ff3cf313\n6c737921-d2ce-42c1-9741-1e345e93a2fd\n95c8fcd1-07fe-4c11-8c8b-2cb721a0691d\n8e18ec25-1d46-4e99-8e57-ce9609b3a051\n48c0036c-a3c4-4e35-b938-34ffe54a67b5\n83fe7d98-b6d7-440c-8a76-dfaadc8d9d84\n0d5c0eac-6f19-4a11-ae41-f740d703a356\n66ac31f8-ffa2-45c7-9457-384cb3b0fc15\n3ef5fb0b-3be4-4ef4-bda6-e747514d6508\n84575c62-f100-4459-9785-8bc29fb2a090\nc0e21510-49e0-4e1d-b56b-2c8284e20588\n2cf9b45a-b5b9-41dc-973c-e43e3916589a\naad97ec0-3ca3-4d9e-9105-9b7597d9d228\n1fa2c89a-8de3-4d87-b6a0-e8d2556efaa7\n9ad0327d-837e-48a3-b561-1a08dcab2a21\ne2e0b56b-0003-457e-9ae3-3978534dc126\n78735eda-7a77-45bb-8e8c-668888cf3177\n6ffe3a68-e4b2-47f6-a0b8-047bf4b845dc\n01e4f1ba-4925-4818-93b0-7d5884b3c795\n4079f4b7-6531-4d46-bd08-13971915c9a6\nebd16ebe-8c92-4341-b8b5-699c6b7a2314\neb0c1aa4-35e4-465c-9238-a15c5beed93a\n13ef4d4e-c93b-49d2-be56-aaf68d77d551\n9162b8c2-7d66-4db4-8fa6-6342afc116dc\n3b9c5143-64ee-4ce0-ac2b-a28d5ddb8ce1\nb8e649ed-1795-4003-acee-bbec01056e12\na3dcbd22-c023-4e53-b7da-9e4ec445620e\n25234189-f2da-4aae-94b6-7ab358de6a87\n267a3d9d-66c7-4700-82e5-aef663803da9\nfbfed203-6264-4d87-973d-d2c608629671\neb4933e0-366c-4ef5-b3a8-709a71ada275\n931a34fe-a6fa-4c61-91e6-2a55db08acbd\nb77f3ac9-c47b-4d97-88e7-8b96ffe9de0e\nb297ed91-55a9-4d2b-b253-90b1eca95dbe\n505543ad-1273-4c55-9ffb-dbbbb8856fee\n09de69d5-9e2a-4195-9525-9804eb6b3dcf\n995de938-e17e-40c4-8edc-b4ec087b4d8c\n8e0d3a83-60a8-48a3-89b0-a45a045bb702\n2865a9f3-538e-4429-b4cd-0d7b169736db\n107c51e1-8ad5-408e-a18d-5fcbc07ae468\n7d03e17b-c109-4a75-b45d-1b50c35c9946\n13957952-2958-4859-8cf6-7738fa7c4d3f\n8253d193-b086-46dc-b9aa-aeeca7aa6e66\nf2a7715b-1865-4c5b-994c-39f0bd2a23ad\nbf4a610e-6f95-4d68-919a-0292d633cbff\n3ac57fa4-ee9e-4d4a-9d42-5da9ca0bac17\n025292c0-fa97-4de6-a52b-7f064aab38e1\ne3f9b32a-fe53-4421-adbd-dddc1ef31801\n85b65873-0415-4ec1-88c7-8fd53eed6cef\nb643014b-41c2-4639-b806-655e7526ea57\n91a8b915-05d5-43b0-b8c9-4aaf6d7958f2\nd0fd65a7-ce8d-4810-a47f-0aaead7abe35\ne353b145-5930-4c10-b2a2-472963586e3e\n68935dc8-60e2-4ded-8e55-d69617a761d5\n9bb448fa-c772-480b-9564-2cdf57ae0754\nd5126e44-6b04-4472-997e-aa0da4bd8617\ncc6eaecc-2593-406b-87d8-423b4646e021\nda887292-0783-421c-9314-84d44184e9d9\n0f2cf3cc-64c2-49c1-86e4-0caeb84507fd\n48a317b9-c8cb-48d9-91dc-a70375eb114a\n85229072-8c1b-477f-846e-a15f93aa73f9\n4bb571fb-69bd-40b1-b84b-223fd07528b9\n8ce3fe72-9902-4c97-959c-348b09dc9df6\na64f87b1-f028-407c-8713-3691ec9846b1\ndb5e44ab-b756-4fba-8a84-84336ec0dd65\n079351ef-52b3-4f10-a575-aed24b8468d8\ne1acad41-2a7b-4118-a76c-7421c8969e53\n2c88142f-4c08-4513-bc0c-9f8b760607fa\n2c52abf0-1f66-40be-9832-8268ab4486fe\n6552b250-18e6-444a-a8fd-24d619a92878\n428501a0-92ae-404b-aabb-57a44cb0091a\n929628df-c1e0-4d3c-bac7-70c4fd396dfc\n6cd77eb6-b7ff-43a8-85ed-e38cbe675830\nd2d9d54c-c78b-4ab1-810c-a507bdc2ee6d\n21813f3e-35b5-4101-8f0d-5ca692f1b435\n02548c86-6283-41d3-aa61-6d64ae6369e8\n6b44c6b4-1fdc-41b8-8a50-0b3c8215e5e0\n9a5e2664-cdbd-4501-b1ba-05a7c95d03da\n5e7082ce-effb-487a-a140-4d5a0b4c0021\n066ce80c-31f8-4f89-8c5b-05c4e453639e\n94cb129e-9e14-45ba-8fec-ce09c4795241\n2783342f-4a99-4832-8627-3af2987513a8\n5174b6c3-1560-44f4-a92f-95ce48c14dfc\nc0491927-2bb2-4d70-8b3d-02c1d1bdaf5c\nb12d4031-723a-4a73-adc4-4e20b914f983\n4ce13653-84e6-4491-89fd-b7117680cbb8\nbc207a84-bd6c-430b-9ba7-cd23ed202fd8\ne0bcd96b-eeec-467c-8fe1-0c01b1437c7a\n5f0634ef-1fae-4bf3-aa3c-1dafb5c55594\n9a8424a6-75c6-4187-8674-2324a1d7e12f\nf6c9bec5-c276-448b-8578-8c0c7890f3b9\n879a4e9a-9fcb-4687-b69e-16000f38e34d\n0179276c-02aa-44ca-9aad-f8a7c3d663d4\nea85cfa8-d2ca-4eb9-8fa5-ce117bec1aca\na55fc41d-b21f-4f34-bb9e-53c3342c669f\ne2afca8c-1ad7-49a7-8800-51f79cbb521e\n46e1ed01-aff3-456b-9a05-8ca9db6927e1\n3d71fd62-a44d-4349-accf-9c581cd5e23a\nc655434e-a04d-470e-a58e-190ebd3b9e10\nc34f667e-3a44-4b37-945e-690e5f4cb7e2\ndb53322c-985f-44d8-bbf3-acb2c16d50e8\n2f5e4bab-ec8f-4e90-8a1b-4233e2c29be0\n7ef1ae65-3e07-4f32-99dd-6eee9c2ef491\n603c2de0-ad63-4c69-a47d-7f6fcd803f80\n043f9ad3-f1de-4066-a6ec-a49eb69d3148\n68f5ae5f-ea82-47d9-a282-f778b97d0c0f\n92885160-19df-480a-9746-7f123ad11cca\n474484b2-a292-46ad-9947-a47e7e9b41a4\nc64a0db1-8988-4464-86fa-e06765684d8b\n302440f6-993b-488c-af83-fb7846cdcf9d\n4c4956cb-28e6-43a8-93c7-6292607a04c4\n8bd970c6-f1b4-4e5a-9d9b-a7d2ab09d0d8\nb04d5d25-35a2-4dc7-a224-2f82e4ce94d9\n0c911193-e9c5-46ca-b5e8-83f71ae09fa2\n95acbae9-4794-4d1b-a3b0-330165fd4b48\nd88fdd0e-60ae-4863-b51f-5927c8e4be29\nb375910c-237f-431a-8b4f-d2c4e555a89a\n9bfc39b6-67cd-47f6-87f2-81697e2ed58b\n67435f88-74bc-47a6-afe6-34485d27e57e\n4565fc59-0593-4a72-a74b-56bd7c69669f\n9fc6f169-2dde-4ab0-abbf-6d3884db5d54\n1529b33a-8251-4b82-b945-a9334b281a04\nfd934f70-dd79-42fd-9660-b707e7a371d2\na4b2e6fa-a633-4f6c-8817-c4fc3065d7f7\n424e3e39-97fa-4df4-b860-6cf292a4cbf3\n59482696-c4fe-43c1-ae72-d5d1bd231428\nb3efed90-df8b-4372-98e4-d3f7ec6c53e5\n77ec744b-a0c0-40f0-8e1f-5b4b552d773b\n40676374-5037-45f0-9e5e-11051986e1d0\nd75dc745-88c4-46a2-9a9b-4d6eef3ac7b0\nd60ff2dc-22fb-44bf-b07f-20d5c72d1d9a\n9fccb573-c0de-40cc-9523-8efe5f8abb1b\nb662310a-8e19-497f-bf66-ef3dc2b7e0be\nb5889c16-6b5a-42b9-8661-c87d7e1f0d36\n345645a2-c954-48a8-bfa0-e433769909ea\n91be052c-f4fc-4063-b099-545dd2f76dde\na03e7895-86fd-4c33-98ca-86c61799c1cd\n9deed3fa-4805-4336-b35f-2ac98b0f7135\n7b5f59da-e69e-45f9-95db-55a9e09c1311\nec2e5b9a-52c9-4615-a04c-56ef4f31c6b5\nc59adca1-1d86-4095-978e-bf587709cf65\nd3bd53c3-e93d-4f01-b0f2-8c876cc632b9\nfe047076-efe6-468c-adc6-312640d943e6\nc473f2ab-bf29-4660-8a41-a90e142be561\n6a39f7e4-b7d6-4c66-adbd-624cbc0fc9f4\n1844a783-e6d3-457d-b72c-5e6f63cade27\n1f9b9994-1127-42ff-898b-43528f44a097\nee491c16-3bc6-47e3-8769-83999e016440\n60460b68-8f6c-4611-b111-9e5076276ee2\n37c1b057-461b-4b82-9837-fcaed85c9ce0\n57551bf6-5bd9-4890-b1ee-f2260b563360\n47b8cdc1-0bf2-498f-8844-84b9635cd940\n1c8efe87-0268-48b9-a1ba-93616ae65a57\n5835cb38-5a7a-42cc-85f1-d860d4ec7275\n63d7e45c-58ff-4ae7-9f5d-725bd5dc47fc\n2d5a6333-59c1-4819-8df7-ffe854577d81\n0551f919-9c59-4d43-839b-c1a606cddd82\n6353c97b-821a-4d18-9c5e-ed9f917918dd\n33038913-3cb2-417e-bd02-78e59659a047\n2c738010-20d1-430f-b754-2924a018decf\n6ffd8946-accb-4815-b6c1-274c7d2596dc\n9bd36a81-bab4-4bfa-ad2f-7c8b913582fe\n4f4fbe48-0544-414a-82d2-67dcba7cd2f3\n23ddb28e-3b2e-46a4-9a32-e4cacd94ec74\n652928f7-3272-4966-b935-8dac831bb3f4\ndff64555-07d4-4b75-9a69-73428f33fad5\nf4ed30be-0e33-4fd8-bf84-a9a523e29c4b\ne4936f00-df8e-4440-a8fd-78a8f6e83bd2\n6f768c75-4bfc-48e2-93f9-e90d5e077129\nb38c6c13-061a-40ab-8717-c0ec51ca3155\ne10ab872-ea81-4f1b-9582-d9d4efe8570c\n1ff937ec-702c-4eae-9e2a-f400e45599b4\n7910c488-3a63-42fc-bf62-8576a1271a72\n81354283-ef0c-4bd8-8666-d3b2bdce35b7\n9aaad088-f225-4891-9bf5-9c7dd2b1b09c\n12ef0e6f-327f-46f8-8acd-98372c3d502c\ne456c7c0-bcf8-4a44-90a1-912bf81c19a9\nbcf3df14-8888-4f13-9985-f8e2356bb54c\n59ea2bb5-c4ab-480d-a195-6a90f9561af0\n88e33f5d-82c5-4198-b502-c4cbfbac814a\nf21e9833-3f08-4a51-9fc4-d012590ce340\ne3f5ab25-4bbc-4019-a4d6-e0373d556cc8\na93e19b1-45cd-486e-8cf7-bf3be969a951\n96b287a6-0637-4ed0-b3b7-c62b21015411\n75ad309d-242f-48ba-b3e8-7e6623627164\n0ae77c01-805c-4ff5-8618-969f3bdd5021\n082e1743-17a6-4c3f-aa8a-5d4b0dfc10fe\nd96b5e00-77bb-4a9e-92f3-20c21b44e296\n0f1beccf-795e-450d-a15e-6609aedd56a8\n31f48b84-12c0-4e71-99a9-905b7d6fc58c\nfeca5519-b16f-4b5b-bff9-04c33ba380ce\nff29b239-ffb8-47f1-9945-e2089dc8ab63\nd9f101c3-ff7e-44a2-8d66-6a54cb345d59\n6baab1a2-60fb-43c1-954c-954a365917a4\nd3d8ba20-cefa-4c7d-b2ab-ac5c823d509a\nd6f6e633-e8ce-430c-8f3e-1406583c663b\nb993b188-d884-4b6f-a685-57c100f9a722\n54e90a22-8a87-462e-a44e-ee52279c0583\nd06bfd14-982a-433f-b7d0-cfb2422b19c3\nb408be01-6998-462a-951b-bbbad1c995c5\n51c4097d-4420-4b1b-bb97-d586bc2b63f7\n9016fb5f-8bd4-4155-b5a1-acba84792a2c\n382c3866-4997-4391-8929-f5ee3c1d8371\nfdb8e143-a6b2-49a8-9f62-5185d1393ae7\nf38447bb-94b2-401a-a6c9-7cb33f655cbf\nf4a39a36-4973-4289-8eca-1dec24da05cd\n8ab056b3-8ffe-4cdc-aab1-1aaf34f3b59c\nbf22699d-d4c9-4133-9f16-c12419889fab\nf7eabdc9-b127-4297-9a89-12b155a3e8ae\n53bd49b5-529d-491c-9cea-3d71665eba6c\n08f7f6f3-567a-4773-8bc1-8a74e493fc0d\n821ef0c4-0ff0-447a-8334-bcd76fef9ca5\ncd008f62-389d-437c-965b-e03f8e2c11ba\n6daeaeef-996b-4f64-8545-193127976f8e\n79eaca97-a338-433a-944c-71b480989133\n7fc64a06-1909-4345-ac77-5ae6fda187ee\n65e63eda-0367-43d4-bedb-04aee2ae4ac5\ne66ed33e-b091-4877-9a77-b377cac35a81\ne8c9caf4-d667-4efd-a1c7-5f50f0c468e0\n80d9964a-3bf8-4e2f-b285-1cdfd120ee18\nf6661ca4-73bf-4967-a0c7-c609346dc2f1\n48e7c3f2-9ac7-4187-a78c-737d5b549244\n7308c2f2-2f60-4b22-9b60-11eaf2ad5421\n1bbe05a2-3c93-4ff5-946b-4cbe9e671bb4\nd8680367-7b15-4359-8ad9-ac2b26ad6485\n88a63fa7-6fb0-4293-a516-7c1a8a7b3937\n13a6a7ea-0704-4473-bc39-1e4d5c421c25\nc0474ec4-79ec-4fff-a5c9-91315f23869f\nab5ff9a4-7d5e-498e-9c9f-6e8b82018a7c\n5fc4e88f-07b3-4d1e-b08b-f2fbd4ec10dc\n7edba512-944a-4f92-95df-742b461badb6\n0d8b9818-ec02-4f61-b345-5e9b55e67433\n8dcb4aec-16da-4779-9eed-24f0bbb23647\n3c36b1cc-c485-4f96-aaf3-4c29270c26f4\nca48a197-bdd0-404e-a590-1f78fec8ac85\n29a15e0a-8f4c-41c4-87e5-87a5590331f4\n899d274d-6276-4ee6-ad5d-960689cef702\nb9b44ab9-aa69-4f9c-8bd4-8e3a5068a029\n30f333f0-8dde-45e8-b04e-7b8be943d522\n031905f3-9dfe-4907-9176-b1b3b55c5f2c\n93eee2c7-0b5d-4529-8a5f-d10809d49c34\nb9954346-2ca0-4a15-b361-b14a014f50d0\n59d1ac27-ac25-46d1-8edd-f1890f23a8c9\n91f8a45b-e241-48c7-8459-41fd4f9f8f81\ne84f28ed-e65e-43a4-8b04-d3e91fa5ea6d\n55f6e7b5-b29f-4d50-8b9d-f097a833aab3\n64d01636-d8b7-44a4-a1f2-470cb9fc3545\nc1169530-a139-4bd8-a299-c40a5157ef70\nbd375fd8-c468-46f0-bf20-5711b590f1cb\n79ed1495-ea8f-4a77-a5e6-b5415db55a72\n7e8e1ba0-a876-47fc-a513-28f5c0c1fa46\naa30fc53-f434-4457-9f03-f6bf252fcad9\n27cd77b1-d574-4c05-b67c-5b003583df36\n58fdd009-bc64-4768-a2f8-9461dc101f41\n183218d6-e828-4728-a3ae-432f2eb40e08\n92212dab-ead2-46b4-9be5-17ce09329ac8\na97091e2-7108-48bf-af66-1c06817fc2c6\nfecc21cf-b7b1-4ff5-887c-09881920655b\n23e22d9e-81e1-4c6b-8df5-ee2e57ccb0ee\n29c3bd4e-747d-482e-ae2c-2952188321d3\n669cb66f-0923-4118-9d3c-d31693fd571f\n922438f7-4dd4-4bca-bcb1-aa3ee09631d0\nd6a5a4f4-d4fe-4d3a-a2e1-a6bb0186733f\n70c8df1b-c366-456d-bbcc-70e3e9e02302\nc70e011b-7115-4fa6-b759-e6e838a1777d\n138c6ab7-3249-4f6d-922c-5c56b1c560a1\n725b05af-4581-40a6-9c9c-5587b3ddad0e\n47872d51-41b1-4da7-a314-b960360146c4\nea200657-d873-4403-82c6-33a05dc8f6df\n11e1940c-aacf-403a-b265-bb39670e7fc9\n3ab8c678-2485-47d8-8fb6-15ff7ae33173\n120bfca3-ce3e-47f2-85fd-174e4b2846b8\n686a48c5-8bbf-4fac-b3fe-4aad9ee2b857\ndce1fa10-5f78-4956-b1b2-50976e70e1f1\na5e45a11-da53-4290-83ca-fecd51910547\n46935904-0349-4ebf-823e-c4f022c95665\n1f375db4-910b-4f95-84c2-71ef6166cb83\ndf773c6d-4138-447c-a57d-cd8b13fa94ff\n2bb86b23-fb9d-4c1f-aa38-94e2da34c1c7\n5efe2b80-7cc7-45cf-9d4b-54f1082066aa\n10c0748f-6f42-446c-812a-6d949a9bfebe\n5703f382-1c2e-4505-b612-72ab51ec1e7c\nd0e61864-05dd-4e73-a80c-f02c28f4711d\nbdc87754-7edb-4cb2-9c78-3eb3fb72b38b\n42ccdf7e-7f69-4530-b00e-c767a0020fe9\nce73045c-4c8e-493a-8942-8f65cade7360\n50b067cc-345d-43bc-945e-e1c18829053c\n82af3f04-616e-4b89-b433-269c3493fc00\n8b8e708d-911c-4b6a-9bb2-e81e356ce4a7\n40142a87-0b01-4002-94f3-89ce540493c6\nb42f26d2-3453-49ad-8327-d0bc88d8ba09\nabfed685-2b6e-4a10-8af7-7c5b957ffc1d\n5296aad0-3fd8-42e6-89f0-cd7a1dc7db09\n5043b0db-f8b3-439f-bf2c-89c66a62c399\na148b174-5634-4a5f-9e76-e49b52db9c23\n8343ebf5-8e1f-44bc-a1c2-80c8b486c5bc\nfcc4e37e-a38f-4c95-8242-b2c2380738e2\nae072675-0194-4cf0-a237-576c7358994c\n7bb98f21-833a-4025-938f-ac3fd49fd157\nbec9071a-b182-4ace-a009-49d1771a1946\n09fab52e-9cae-4c93-8b76-70714ba507ef\n57e286a9-1d2a-44c0-acab-4329b317ee84\nca4bfa5c-b947-4792-b3d8-df5d25f661cf\n69c9d5b0-08df-46ed-b02d-07774fa3c142\nc0349b24-84c3-49af-b644-1700e995a50c\n72c73b81-7b75-40b9-95e1-b511c4728e89\n7dc798ac-ef19-494c-a103-f7af45a10b39\n44ad51c8-76cc-4da3-ab44-de05585ecc19\n8eda6050-dda3-4cf4-b220-fb4a779cd5ac\nfd13f2ad-211a-4c12-ae0a-3471c2613201\na56edbe1-1f83-49cf-8b68-4fdc05ef9e70\n33ebf7a0-14fa-49c5-8624-eb100a3e03ad\nb3c1c431-f311-486c-8401-85ea0a14ae8f\n29ebd5bc-f02a-4987-9b93-03fed83dcf8b\n3a7d13f9-b4e6-4b8f-b9a8-9be619338f36\n68d52dcb-6b8f-4a61-8e35-68740120fe27\nf2896d96-17f3-44ef-8c66-116de74e33ff\nd25d8511-62d9-4ca1-80c2-61f1f03ede16\n27e026e1-e447-44d7-be21-8e7bbc910abf\n4153e655-21c4-428a-bc6d-ae70ecd4460b\n6bf2cc0d-bab3-46f4-b10a-ce510215e8ab\ndb881efb-d43c-49c2-9321-7c94244e31d4\n92ca7237-3001-45b7-b580-663866b8b1d7\n2465c5a4-1e4f-4f06-acfd-975c847b6e6d\n7b0fb691-5f0c-4094-bdb5-b505e03fba25\n04322f1c-2770-4ca7-ba00-5502ee580fca\n638358d7-827d-4590-848c-6176f1df2277\n68e917ad-8675-47b2-8e0b-db14bef8612b\nfd110124-9cce-4068-9dc0-2f20473a9cdf\nc6173340-8a39-469f-adef-1403a654069f\n0f96e511-f9a4-4245-8c12-f4e4c3fae924\ne3f56897-d7f5-4be7-9ef9-fa498e9f0b87\n9211b1b4-5395-4ef5-9526-b5ab1b22db25\n7e72845f-3286-4bff-afb0-d65b4cdfb9b4\nf0a96b05-0cb9-470c-8034-74939211b074\n5c3a2df0-a73d-42e8-a4bf-9913ab62eb75\nbc33d8d7-338c-4cf9-aaf2-4934a6ab6a9c\nbc90d4a7-2f8b-4f46-b4cc-e4a067914e77\ne8674094-f164-4c8b-b6bf-87f845962a5d\n2dd65954-6aac-4738-bf00-798cdce0caa4\nbed4d18c-56a6-4636-8b06-7940923f5fc6\ne4d32d2c-e144-4154-99ff-f8214ca11920\n067811dd-af27-4de7-9973-7c8a2acf2350\n15f405c7-1f14-40d4-ae24-f3a95f4b6aee\n00882cdc-10b9-4702-9664-88513bbec48e\nf6d31016-919c-4d30-a1e7-ea74381893b8\n9a998657-a78b-4468-a135-80bf191679dc\nf897d1ed-a0b2-4610-a19d-5738907182aa\nfcf447b2-e100-4044-8c7a-388f1459055c\nf8f91292-9fde-4e55-aedc-b5e18e6cfcc1\nde61931f-0642-4ef0-af7c-b08856056730\n9f929c24-5b30-49c2-aa69-0a34828ddbe7\n843e238e-3501-469d-a797-647b8ec73d55\n00665072-b069-4630-871f-f29ad96a9e94\n99d621b7-519f-4bb9-91e3-e728ea008d8e\n9c9a2d87-eb8c-4d8f-8898-58c114e5923f\n1b843d23-74a9-4967-9285-b2cc8e29e960\n91abbd50-69c4-4555-9c5c-6e3cd2ba563f\n98221211-785e-4c18-bbf1-d7a01aaf42c7\nf593991d-9ae9-48a4-becd-358d8d31ae0f\n9e63ffd1-5dcb-43ed-bc4e-7365f9811c95\n903d8e21-b68a-4655-a0df-d267303868a9\n57449363-4ad2-417f-957e-0325540f28d5\n2bab7499-a5ae-4a36-ae76-5bcc1d37f4ee\n81752594-5751-429b-98eb-5cc1e39b6600\n71e55764-3278-45de-843e-5bf9cab43558\n947da219-ee34-4e56-ac5a-00d79ea3a778\n35cc6327-8d6c-497b-9bf6-049cf3f1f0d9\n95dd6f8e-9726-4466-a7ff-596dfb597218\n7a0eae53-24e9-46ed-9532-3ac3c5ce57f0\ne7f46b18-8b8b-44fd-a701-815d81787c3b\n64790844-c280-4cb0-b661-eaf24851c553\nf3f2b14a-ead8-47e2-bea8-a843bfe01862\n12738bb3-9bf9-46bf-94e3-7beaa8f0da1b\n97810566-1555-4f84-a4d4-6a4e0dfd8f20\n2cd1b565-7185-4cb2-b147-f3306b316460\n42dbb84e-4301-4513-8825-f116fa21db74\n2304460e-fa61-41a4-b72b-499f62414736\n2c409e0d-2636-4eff-84c3-0b3ad24f824e\n5c54e421-080a-46e2-968a-0d22ec2b1652\nc6134e45-c5eb-4076-b013-65cf655aada0\n9ed10277-4388-45f1-9f5a-77fc7e6225da\n1ac89938-7d75-4fb9-a358-b9bc64571c9d\n5f90f7c7-b1b4-496e-8189-9a5a79392bcf\nb713f96d-b3be-48b9-9419-172a9e967d46\n2fd4ee2a-c380-48eb-94b4-78b0ec12397a\n3592ff37-4ab9-49bb-a3e9-add7f7b9f539\nbfca0ee0-a37d-40a9-9bfa-147f32f38120\n831b4e11-bf3e-4ec7-97c6-faadf85617cb\n9462893c-c569-4a74-94a1-437640e06ba1\n858a0a69-97a5-467f-80f1-15f663501a6d\n6265ce40-d0d3-4ea3-b8bf-8c99640ba939\nc8fb11d9-b689-4d4f-afd6-c996320ebe2a\n7c8f40c5-caeb-44f2-8f6c-5afd2f3a4bbc\n9a8e5c82-dcc0-48aa-8aa3-2df97d658e3b\n1d1df558-893e-4d9d-8368-d988bfc3a758\n587cc88b-16fe-4869-84dc-073220726a5a\n89667d9a-b643-4012-93cd-1f3b8e24a1cd\n0252bdc7-5900-42d3-82a1-42d1dbbcc322\n4ad7426a-bca3-4bed-b353-18f1e126be78\n4a210d5a-9609-481a-b706-9d8248005d7c\nd6606f07-9b57-426a-8b29-9cdd32ade682\nc268f538-c2a8-4478-ab85-d691f778b31c\n38a9df94-a188-49d0-8e14-2ea326819de3\na4d3ca45-da41-439c-8d62-7d24cbfab78f\n123ac893-17af-4895-8bd4-e091261d1e34\n1ae630e4-8dec-4a5d-94d0-d61616cb87b0\nbeee5c3d-80e5-48e9-8e46-7328089a75ff\ne596d8a9-fb87-41ce-a590-da30d81a6203\n393631e1-575a-4fcc-b2d2-72479aec111c\nf97d9c6c-3932-4786-94fa-5b66001a9075\n1677df18-1205-45b1-9ccb-d40f0fcda9ea\n36ab0df7-8616-45f5-914f-c38556805cd1\nf298bc0d-4f97-4bca-a13a-c3212ea8f3bc\n4ee48d01-1c07-45f4-a9b0-a9ce73965857\nd73d3090-8bac-4c64-b1db-759ddad36dab\n2fc304a2-28c0-4b46-a336-ff88db654903\ncb32f512-f3e0-434a-a4a4-1edeed18455f\na70f44de-2890-4a41-97a7-675afe39373a\n8810cfde-d9c1-42af-88a5-1df10eba240d\nad707131-05b6-413e-9748-f58e5408747e\n35ba62ce-6586-49dd-94c8-b06a14ec9369\nee6e90bb-f703-41dc-ba30-d82151852b54\n7a5866c0-7f54-47aa-8734-1d9d91a7ba5c\n66e4af45-5c8c-4034-a8e9-5d9c4b043291\n8d8c34f4-739c-4f69-9cde-6d77f0f900cc\n471aa45d-2dbb-441b-b097-b8d6b7514e04\n5089112e-afa6-45c1-a5bb-1050cac9d4bd\nd73afbd2-f71f-4ee0-903e-12d5d508f151\n24cf03dd-ff9f-460d-ba3a-b73a06d5b0a3\n32606966-01f6-45dc-8abc-33fccc1db60c\n3a0b2bae-9b3f-49e4-b892-fa986f2a57a7\na10d60e5-8950-446e-ba18-3f6de07b9887\n29b93e2f-6be4-445a-b45d-341c195e1ea5\n8683faf2-1627-4c85-be31-5d40e062b9ba\n64a7778d-a581-43f2-85a0-c19f7a98cb4d\ndac6ed68-0933-464f-9356-20eddfb5e187\n9a92e480-847d-4fa9-83a3-6c40b6230308\n04e60c3f-27de-4e9e-b7ab-2483c8e00a6f\n4db97528-9ec2-4c15-b182-61b6f9458181\n4d346056-84a2-4145-b6ba-b4258ddbcae3\n16a6270e-4103-4954-b784-4ab433602551\nca142c22-2c96-41c1-a5ef-e062a3104c34\ne705a1d7-4694-4d9b-982e-09642625bde1\n39672c86-c2c8-4489-9e91-96320e80c792\n6433a6ac-d09e-42e4-8d2f-4f84edf28baa\n70430e8b-3361-4fbe-b99b-4c4898dae5ee\nde337cb9-4447-43a6-97a3-cfc79ee3b46e\n75384514-8d81-461f-961a-9fb4eee6a124\n378f145a-fd5c-44c7-be95-bed1ce3caa9c\n0fc115db-4d3c-4e24-bdda-feaa160fd22a\nd8227bbc-2fc9-4465-9459-e4bf19af1cab\nca0b8249-bd3c-4604-a80d-4b640a553430\nbe7fa2fc-fa21-4101-8378-207c1cf6e1f0\nd876d01a-b50a-4196-8e2a-cd38cd2410b0\ne68296fa-ad1e-4465-b2fd-6ae4aff59aee\n3d50ab6b-ae6b-4934-bed9-2c014f047e2a\naad52c40-56c3-4c29-9d58-87da6310348a\n09cfc3ef-ed87-4df6-9f6f-cab700534fa0\nc5d3e4b7-abe1-4690-a6ea-9a6e92fdf251\ndd566488-00b1-4f74-a408-d1675bea6931\naa771358-64cf-4502-9633-4e9e6345d75b\ne8023a80-16a7-4431-91f3-ddc14fa314de\n7fb354ae-8193-4a40-9a26-39ee0d2794e6\nd51559d7-af05-4150-a9aa-5f7fee8ee5ff\n01114210-b44e-40d9-81f5-b1404677d153\n423efa5a-034a-4576-863f-897535e6583a\n67dc5999-34e4-4fa2-b672-7566c4f1a4fb\n21b924fb-56da-4ef5-bd22-1f04efbbbb33\nb683377f-facd-4676-b89c-1608c815f48e\nda1cbbca-dfb1-4a16-a8b1-03eb39660c4a\n9e29a31e-2376-457f-993e-b9bacbf4aaef\nbf5a1dbb-4bb1-49f4-ad06-780b93065e60\nf05383c7-8f2d-43da-87fb-c9ad947e0c10\n952f8b55-eb90-4c1e-9b1e-df15e4e8bfa6\n0d027b8b-4af7-4338-a324-8a42ccc4bfcf\n46bb7d6e-03a4-4ec3-a899-f146347395d7\n1ad684e7-e567-44c7-9622-250196efb929\nfe8f33fb-ee19-4341-b611-59d560abc4ca\n0c25c4cf-5529-4cc1-918d-b4ce6d5150bb\nbf9058f5-7842-4ecc-8597-939e34263596\n8279afdc-3961-43cf-9f43-f7720da7bafc\nd275d2c0-7442-45ea-b873-b3f061e66d3e\nd523cc91-3a53-4ea8-a32a-d60ee5d72d22\n622c9fd1-c950-499d-84be-44ecf72ab57a\nf8da334f-51d1-47ab-a86c-ccf39b624241\nff936463-98f6-49ec-942f-35970ed2d3c1\nd70296e5-74a3-42c3-a9fc-c060ad4c8317\n6a3df6ee-1e32-420f-85af-66e84cb8718f\nd82d4d5a-22a3-4dfd-b3c3-a12f486cba90\ne4398ae9-0d67-4a7d-b5f0-47a1ec2a0544\n5e95bce3-b10e-4b26-b78a-06fa81c31469\nd814a279-4ebf-42e1-9f33-afc549597653\n82577cf6-f0b0-448d-b7fb-893b886c5a56\ndc538015-9ef4-4d9b-a13e-2a75f1eef1b7\nb754ba06-d1bb-464f-9593-31726d959f9e\n7633c831-11e2-4d3c-8d55-e8a8edafe846\nd11a1da0-096e-4a4f-adcc-090536c9b91f\n865963eb-3e66-4a09-a41f-8f66ee607bac\ndcf67a1c-3022-4485-9352-d5996cf40dd1\n66b105a9-db86-4033-8fbe-09f13968a778\n6405df76-dbb8-4c35-92b0-688a3a1219d1\n5f8c5b42-32e5-415f-b52c-a683bf196af6\n36d834d6-e20c-4ab2-a0b9-868be6fdbb5f\n7fd1a76c-2c5b-4e43-98c3-8ecb742c33a5\nfa7fbd2f-66c2-4256-a3ef-e28b9aefcbef\nc8837774-e98e-454a-b978-89328c95a5b0\n7f1daef8-7efb-472f-a7bf-7d212e16c475\n2d38924b-4266-42d3-ae2e-1cef57206054\ne9c44b6e-91b2-4c99-938c-7a591f3c4f96\nc2dc227d-b3ee-486b-a48b-875e28336f18\ncf90c372-73bd-45aa-8d56-a79a0fea216e\n47774c69-8238-4967-a93c-d78a3b9d3d0c\nd99fbb7b-6daf-4b13-a408-431b6276b037\n5233e917-33cc-48b4-a01c-f01ecee22b2c\n1c06530f-b989-4f03-b5d7-82444b4fa7a8\nb2dcbc27-8924-461a-948e-21d2565ccd14\n2472c561-f2ad-4f89-bf1d-efd8a51c9d8e\n00df9807-e02b-4aba-aed9-e4bf2f73ce0a\na2a2e4f0-8cd6-4ce8-aa64-ca404abd8eed\n3beff436-5666-4251-ab4c-0130ca48070e\nf4bd8bac-a3eb-4a5b-92ee-77c50d10ec56\n3951d5e4-e356-4d4a-bf96-c5863d8fa991\n1d5f4f36-678d-4dce-89f4-8370871f7667\nf41cc37b-25e8-4e3d-bf8b-7d2b3436664c\nebb48376-d0b2-4488-9879-f033142814e6\nc285fec9-24c3-49d5-8956-da53561bfb0b\nd7fc220d-e4af-4282-aeda-3851de8c78b1\n4a55a3ed-65b2-4875-b366-60c5c6c37cc9\ncb63f075-e700-4ab1-9103-fdd0b131fc49\nd11ee86e-4dd3-4759-b9ac-aaa06b57ceab\nbf14de32-cb0d-416b-8566-8dea93e31c09\ncb9c6bcd-636f-4e1d-bae9-711cbde36c7d\nc07aa874-5b64-4c94-81db-4c32a508f030\n635d297e-89cf-4f05-8de5-015e33593c9c\nde3ab28e-3d1a-49c8-8891-f839b0219d76\na276bca5-33fa-4623-a8f9-eeb9c7a66dff\nfaa4362d-1e36-4f1a-aa32-2b667b940746\n740915a7-569a-467e-8ca6-9226ccfd15d6\n03e5314b-6458-4ec4-a16a-113893a3dc46\ne23662a3-26dd-4dbd-b3c2-c7eaca463b8b\n9bda982e-587f-438a-b8b7-55e154a7c009\n5cc51b9b-bd79-44e6-b839-7750bff50716\n5d811756-513b-4f96-bb38-55e2237fb98b\n47a9d6cd-82fb-430e-9923-706907f8f40e\nd9be8328-db53-424c-a7a3-f99cfb9b5d96\n79c4a4f0-8633-4ab5-a1d8-e4e04f5ab4ab\n9f155c4e-1970-42ca-931b-e8492cd7ae27\nb4c336ed-2500-4461-b3af-8adb2531d49f\n83534783-fb3f-4bf0-9463-613fc1b6650c\ncc8450fc-3874-4bb7-9319-39c633fe053c\n4b41471b-234f-42c1-8384-29344beef08c\nacbbace5-3528-4872-b086-4b5152e65b36\n13ad2b7b-b59a-42ad-a728-1d5ca3184137\n12a65d59-8546-4719-996c-c7a13357b57d\n57550825-bf58-496c-af26-a6aa12648191\nb3c644cf-95d3-4698-bb93-8b88a85e7fdf\n6236474b-985e-4736-a52e-ffa3523fd9ef\n060f9217-264c-4801-afce-33151e098e6e\nfc792715-6f3f-4e49-837e-550c5fe8a475\n5624edf3-8cfa-4c7b-931f-a05ef4271354\n7287eb59-184c-43d3-827e-54e6c5f8318a\n5b87750e-e366-4be9-971a-05521ec79a8b\nc00a0c4e-45ac-4a20-9ebe-e9a2303d878e\n8f619a07-df61-4d6f-b09a-531f24d48f9e\n16d740da-a9ca-4054-bb11-c257ba2d7260\nf86db159-cf01-43f2-8621-e417348ae133\n3552fae9-6a18-4f86-b7cd-74a9d2637a99\n0f720f2f-3d67-4d38-9cd0-d5620928f1c6\nd95ce539-ea89-4c13-8490-803b87e1de0e\nbd130a2a-5a3e-4052-a257-511943f51eca\nf1e1a8c7-7ce2-4f82-9df5-97d7ad37f21e\n3b38b881-43bf-4861-8098-90f8c84e63d7\n4467f6fb-d2b5-4093-abdf-7beb55b5196f\n03f5d8ef-565f-408f-871c-1e0716dd93a4\n469852c1-d72e-4bfb-b952-c9f743ccc5a7\nd6ab3a98-6425-4168-bb3e-0f8ff7458bd0\nbf521d17-ffb8-4a3e-9cef-053ae905f459\n4df0baa3-7d35-4ce4-909e-be021ae3cf25\n849f99e6-6584-4a3c-924a-a653d956c7d5\n54d23680-a583-44e9-a08c-a22c572d2ba9\nff0795dd-cbe9-47b9-8eac-16e199fb0175\neb547b38-c2f3-40c0-a58a-81eda33f3a7c\n3e0b33c8-3d22-43a0-8cde-38212bc0c902\n1963063b-4951-4471-a48a-5e086ccd6eb5\nf5be6c98-4a47-4260-bf37-a0329fc946e5\n78395a29-7fc9-4ded-bdc5-9a63fa2cb6ff\n30c133b1-625b-4879-84d7-0b3fe781ade3\ne730110f-1af5-43e8-bae3-61862957a3bc\nfc93cded-a7d0-4fd8-853f-2f8a9162ad8a\n56218032-7199-458e-b88a-dfe23611406d\nbc95f66e-f0ea-49c4-bca9-7f013174a172\nef188ad4-8033-4bf4-9438-6c2bb8141a6d\n52af660a-598c-4a2f-9354-c96b27a88f35\n5ab880dc-d155-4a05-ab22-3100e7dac277\nff15bcb3-5c95-4a77-ad4a-30b1d9b1b270\n77a1071d-1c30-454d-8264-510e09891594\nb18b784a-947e-42b0-9062-0b5115db983e\n8f6ccbc2-792d-4039-a5b4-e01ec345971f\n35d8baef-2850-4947-83f8-18c44df54e96\n72204e1c-ffb6-4210-b52f-5341374df919\na41e452f-c923-4e34-8726-6da9bd695faf\n61e3c863-b1fc-4dad-8e21-910dbf542417\n3cf5bde8-ed83-46d3-a7e3-7dea6025db51\n0de6b17f-7f3a-422d-9c61-e246c21ee5a4\n66da1fda-27c2-418b-aef6-8462061d07f3\nfb962a75-ed35-4d3a-9cc9-29a7c32a7081\na082fe2a-c624-46c0-a806-4984a6e68de4\n123e540f-3598-4b79-b42d-f1a6a9f13ffc\n435e6021-ff89-45e7-b484-3bf5c2c1ce34\n4180b27f-6d7f-4d52-a7c1-02007e087aa8\n265c1a6d-9c68-424f-9510-5da31056c1ce\nac2ca60b-b568-44ac-a1a4-51a72a726fa9\nd8252d8e-4d1d-4786-9109-354df9ba68e1\n7c68960f-4f80-4dc8-8bac-f4f1a194f231\n3c9c1182-b40e-4a87-a483-b01df8e84e6a\n7d1cf67a-bd8e-41ee-9646-2973aad66375\n2bde344b-beb8-498c-b5e2-92130692d2f4\n3c0bf3b9-6919-4f8d-8a25-3d27734aed56\n8bb8f799-5bf1-4ad0-86ed-7349ca73b4d8\n21743713-f578-4162-b529-df13c6c22a5f\n283ecc06-0859-4561-a9e3-e1fe28c609fa\n582068cc-732f-4884-a90a-66379a195588\n225adc2e-5246-4291-9f98-bd0046375764\n11f6a1c5-0e3a-45e9-b007-addfb6c1d42e\n1e0cd18a-e27d-4db4-abe7-9ca8ba7b27de\na30c070d-d6d9-41ce-ba5e-bb3ca35956b3\neb125168-fbae-4d62-9769-f5a8df6b07f9\n03438a05-2e85-4f07-977d-2924456313ea\nd7f3006d-6ddc-498c-9f79-654669be5150\n879f5b3b-00ed-42a5-9ed2-996b56f6bf20\ne89195fc-4ce5-40fe-9be2-c7c9bc033649\nf5bc70fc-94a2-4c97-b316-66844e7ed8bb\n7b0535a4-ef8f-403f-aeab-eb79bbf390a5\n7ac3de78-a95d-400a-aa66-c4a44b28dd5e\n48376d56-65e6-4e7a-a02a-bacdf1cbaa60\n9bf2daca-c549-4413-8e14-4e064fe626be\nb99bca42-d9e2-4b29-964c-a32513d5f017\nce7f7b0d-c102-4e7e-8253-d43b484c41f3\nf58c4522-41be-4e39-bef5-6f3b27cd3b34\n71969d7c-1e79-42ea-8e6a-a3f054b0b847\ne190fc2d-01eb-444b-ad97-9c11a0ef374d\na3cea86d-1fa4-4449-9b19-b88174b4345f\ndefbf673-0277-4a54-a183-a91e127358f0\nbb6f0c34-9b50-4dba-a113-425e57a78a47\nafec062f-7b5e-4507-904a-8e2775688cc1\nfe35c4bc-312f-4439-b0cb-04220cd27a80\naeae7e82-32a8-4473-883a-613cc244f577\nc315f13b-ccef-4853-a3e5-fdb2a1485da6\n9e91b833-231d-49dd-a35d-5e46db728a4a\n3c2fd86e-dbef-4c65-8f8c-72dc4b071a72\n976fe1fd-3277-49c3-aa7a-2ce2160f2cd1\n6835cae5-06ec-4994-b71a-ec4dd21e18d7\na64b59e8-3f58-4274-bd64-7c3f34f59dfe\nb2c5e539-8fda-4325-bcad-960d45e4ec95\ncc5d02e1-e7d8-461d-83e1-85edfbe84f63\ndbba3d22-3fbd-4585-aab5-539de4124b99\ne5bb1075-1b21-4001-9086-58c6cb69b069\n92c5d6c6-8a15-4c17-a8ae-635cbec8bf68\n189c3d5e-1ee5-4d0b-bb69-cfba7680d5ca\nedfce4d4-0dae-428e-8c53-e6a66831888f\n5f8300f3-98b9-4e26-9fc2-219bd3fa1b33\n2c3c1af4-50ff-43e1-8554-364823a14421\n9bfb0d2a-2be5-414e-95c5-1ed8863c186a\nf6b0a5ad-2d85-415f-b405-5ff56ad0726a\n1beae754-619b-4efe-a969-375f1e39c046\n2a65694c-5032-43e2-9056-d4da4d1bbac6\nc56b334b-e755-4d5b-97c6-748824cafcb3\n678271b0-4dbd-4afa-a19f-d758048cc980\nb669744c-307d-432d-9113-3652912a2600\n8fc96849-6e0a-469e-bcc6-779a7a24c718\n685bdd7e-69a0-45e8-b181-82155156bb77\n4dd885ff-61bd-4667-a971-11d647f24f85\n29a91acb-47c7-43f9-8ccf-c4f0b7e9c373\nb8532cd1-14d4-42ef-98ee-8bf65c88c5bc\n81ca9396-a57b-4471-8d4a-edd47e62a2ee\nb3e00da0-061a-4bec-985c-bd0d288399d6\ne43b3ab5-8009-44e5-9089-827d0512b862\n3c8fb3ff-3108-45ea-965a-1ea635606667\nd36a6537-aed2-47e7-a483-427f0ade0018\n50079e20-b1f3-4db7-bb36-2fcf37f490e8\ncbded863-9281-46e1-8726-5410b81a54e5\n92b53766-2031-4014-8c8c-0faf71188b7d\ne7d49bd4-d02e-4718-91cd-acaafdc674fc\nd05d152d-a157-45c7-b36a-076bcbed4fc7\n2b2d6aed-4583-47cc-b464-a866675f3b36\n6d95cec1-6441-4b80-976b-f0fe0e1ce00c\n1a68c935-895e-45f5-ae85-f69e8d7c3e2f\nf81c13b4-7e66-4c22-9746-73640cd64f0d\n2bd0ff9d-13d7-4b71-9e6a-7abaae59ff21\n0298f07c-1e01-458a-823e-ffbc2d20fa4c\n51669dc6-8596-4f0c-96e0-1e4ed26c67cd\nfd9a2e9c-7ce9-470a-98a1-95f19f4d1d65\n45ff4e3d-134a-45e3-8a9d-486f1a73efb6\nf6bf670d-ce4c-47b6-9b5d-f6c5a086ab14\n7b56b363-4ad1-44d7-822b-dd716a37d944\nd3eb0392-4213-49e4-b7eb-e6434043b5f9\n9b9e7b74-ba75-4994-97a9-eb48b38ca21f\n8ba9afe9-e572-4a33-9eaa-88d3a4335413\n7a48e00a-bd63-4b43-9b09-7de30f761df5\n473b69f4-6080-424d-9aaa-00b41a1109a3\n2205b67e-ec7b-460c-8d07-e6434429dbfa\n7d3671b1-c1b1-450e-92f1-b58f782deda4\n8d42f792-a805-4f79-9b90-68fa55418796\na039a177-8268-46ae-87bd-e3eb2cc38919\nf49191e8-eb08-4bd7-9f28-02f1d4b42dea\n1e097229-f647-4c4e-84e7-72fba837c402\n03bc36d8-d1e5-49a9-9a03-8eb75d010304\n504958d4-5f99-4642-9619-b2019fd8a1ca\nd647fdf4-a125-4449-8bd4-e205c1bd2bdc\n6206d17a-fa34-4eaa-8142-7548b96af3a9\n53b8155e-1d52-4839-b413-4d0dcbccc90d\n25adabe1-5147-461c-aa44-e7c42c5be1d0\ne129d07f-6ab0-4c75-bc15-0ab402c7ad48\n1561853d-d31c-4003-bf33-5a47bfd6a80a\n04cac657-f237-4fb2-a481-3bc56b711bab\n3069dfbd-c2ff-43cf-9cb4-193aa44ff738\n8bd6c008-1857-43ec-87d2-3e6184471b09\n251687d1-6ea8-45fa-a483-0dc0f738abc6\ndaea03aa-c0d3-4b35-8bee-e3c3bebcfb55\nca6a4f3d-fc10-4cc5-802b-f2d293342193\ndbbe8582-3075-4210-9588-f9af418b4174\nc5aabd06-b1a0-4998-b183-d60c50f24278\n255ea0b3-edce-4814-8044-34711f1129aa\nd2481c76-7b3e-492a-ba5a-bc9a5458f4cf\nc5b082ec-b0df-4d5f-9e01-ae21b19e0309\ncc1f733e-a5ee-451f-a3ab-19e3777a0f5a\n528011bb-819c-49ba-8650-45e0c9834179\nf05d8260-332d-4b48-8c71-93dc48b7943f\nbabad5e7-509c-43bc-a2fc-98e4ff524007\n7103e6ec-3da4-46ef-88a4-3a030fe6f486\n071ef19b-5a2e-47d3-859b-505b2e23910e\n66e22686-65eb-46b6-a96d-bccdcb75fa1b\n739fc480-e4df-433f-81c2-51ef096f37eb\n3162c721-1571-433a-a80e-565880b0fdc4\neef20c26-f81f-4dd1-ab03-6571e1db9ea8\n1dda7a6a-d412-43fc-aa2c-1c05a1ea71c3\na5f2e503-0ef9-4590-b029-f70b3effb9b2\n9fc831f1-661a-44c9-a1c3-b8cad52d4973\ne443edf1-e3bf-46c1-83ea-0555d4fce004\n81544dc3-e6af-4e94-8f3a-7cb9a767c369\nd290656a-4112-46fa-92b4-e010c99ff9b2\ndea788b0-915d-4756-b653-18c90087db0d\ne1b5bce0-a681-4fdb-98fc-64b5bcaa6bc3\nc4f1fa7c-a2dd-447b-a1ff-3e233124686e\n55b4f802-c641-46c6-a003-f1aa4a653f7d\n8f6d1ce9-0be7-4392-b368-8f829bbdac96\n4ab3988c-b9ee-4a74-97f4-afcc4f890c9b\nc29a6d3b-dc05-4873-92c0-8d31966274ce\n0250d8f1-0602-45aa-9503-5712917f862f\n1eeb8c34-c2ae-4c25-a5ad-1a30c3bc069d\n87b45776-11e9-4b4f-9b43-f6937a6ab2f5\n26ccb488-8768-4fff-99fc-c9458bfcb7bb\n4a74e6fd-7d83-48f3-bc2c-4b113bbbb458\n1aeefa0e-973e-4a87-9fcd-eefad92d84ca\nf3bd7954-a147-4e0b-8f47-57cf55ec7e64\n415d431e-7d33-40b0-a26d-af0b687eef4e\n514390ec-c89a-476a-a486-5bdb4ee0942a\nf371e5a7-46f4-44ac-a6d7-e1c761d80cfc\n4e618ff3-3ea7-4545-9d7a-9a320303ac7a\n083ea5de-3cca-4cec-b680-6fc8a4189110\nd8782b01-1d18-4d6e-b5db-1069b63c1c81\n7e02a34c-ccc7-47d7-b1a4-162794b699f5\n9d6488cc-d8f4-4a59-904b-13b41b97d3ae\nfb2659d6-68f2-4ee0-ac47-cb9daf9d9ba9\nbc0a39b5-9744-44b4-893f-7426b2e29a6d\nd16fb970-8822-47bf-aabd-4703e9009609\nf4f1d1de-47f4-4e0f-9cc5-45a906bdfdca\n0d5bc7d9-8fac-44d7-8628-77fa8a5cea83\nb3070773-c588-40ee-814c-0b5d6f526e02\n2ddf9e72-0820-4f97-9624-9d716fbeab56\na352d810-c4b3-40fa-8b06-b96ee8c981c0\n03a215b3-bdba-4119-9467-c8384e275d98\nede288d5-263a-433f-9e8d-a18c6e48c080\ndb60f078-c74d-4c47-8797-098da4702c9e\n24d769d9-3f64-4a3d-9b6e-2433e35ba3f5\ne2d88da2-8346-4c67-83ad-72e2afea10e1\nbf84049f-4b2a-4746-b362-6fd8f7c4d8e6\n640099db-c7b3-4e0d-a6a4-42bfe99f4c47\nd166fe7c-971e-4c90-a31b-e925671a02a9\n65e985e6-c30a-4b2f-8b8b-025a16cf9427\nb9187f0f-d188-41a5-bb1d-63493290ee3a\naaab1d73-6c61-4316-885c-67a888920c15\n54000a05-3c22-40c2-b38c-6bde1f04df91\n4307b39f-8337-4df3-aa8e-f94d01ca1eda\n4ba9ac76-0238-4e16-96e2-eb3705e27b2e\n27fef61e-4ba7-441c-9eee-2f4fa7ee0091\n2469b6a1-720e-41df-9673-284fd3706496\n5434d08b-1f94-4614-b7fd-78c5873da101\n5b5206fa-a47a-4cd0-8d36-c4447b654b34\n41da9b6f-894b-4b95-94a1-ae065c2da030\n58b56133-59bd-4be7-a0e8-521b30f08b83\ncb7cb88a-370c-4d94-a187-206bc17ab135\n261182d0-7048-498b-83db-d9ac9f896481\n7c4887c5-c317-4d61-bd5f-bf465ceaa1e8\nffc37ad0-b9d8-467d-8d6f-3d5b70db491b\ncda1e618-8348-4b33-aa21-17e57db59430\nda1bb833-8b91-4923-a3eb-e6411a806864\ne508804d-fed5-4549-a9e9-55295d793e16\n1b87cf12-de2b-47ff-be38-214ef67cbfd3\n7795299d-4558-41bf-a5ed-5a83f3359870\n97a1a716-d4c6-4baf-be56-04d65f51978d\n105f5645-d3f1-45b2-96e7-cb738ab7252b\ne904ed43-ce52-4784-af65-1b7f3b186c0b\n9328c40d-26d6-451a-a1b3-b35502b202c5\n474386c1-a7f7-4fab-90fe-59aeeac51c28\n87205c97-3b54-416b-b2d5-934c07161300\n68968f60-6e03-4153-b772-12884709a2ed\nd4dda31d-3e61-42f9-a8e5-7107f99388fc\ndc42f695-7a9c-4b85-a537-2eca40173bae\n9180f780-de86-4fbc-bb2b-11c689994813\n5f4be5a3-b437-4549-85ce-a17d2560d3bd\n19a64af1-c641-462c-9adc-0452a19ce737\nca4a8a87-0df2-4b0a-8aa9-fdf66c00983d\n1b8d7beb-bb94-4792-8358-82182cf2a5b0\nbf22ed5d-d687-43e6-bfbe-91d901910b16\n66539fa5-a42b-49d5-b5fb-85d9f1774c3b\n43383034-c102-4856-91e5-0ff3f6fb33be\n2b6dfa6d-7ccd-4e52-9331-349c65790e5e\ndf15cf42-5fbc-4789-9d9e-234b0eb0de99\ndeb0ccb3-d664-4a10-82d8-8a6205a47858\n41910918-c410-4392-bc34-19b6e3f6c222\nfd47e636-8e89-4580-9f71-26e5d5b4579a\n64847956-c446-40c1-a679-bed0ec3e67bb\nac84ec27-8a4a-4038-9304-8c337abf44bf\n5ae7a983-3b70-490b-b1e6-65373b69aa88\n2995a8ad-67dd-4f14-8057-8ebc0c44e693\nc0bfc73a-3c05-49c6-b9e2-2f38a5ceb92b\n199569d2-dd09-4f57-a202-f6d60bcb85ff\nd55bbe9e-f92d-4c6f-befb-fa0d65935dab\nf0dd2059-6e3a-43f9-ad8e-1d62dc2452bb\n96f9548d-194c-4ad1-bed4-7a1ffcb32a37\n222577a4-e50e-4b55-bbeb-214e0ed898f4\n5bc0b57c-d83a-40b6-8f3b-6d7e2db43b76\n55eac084-7b41-48f3-9f06-bac976a57f29\n52799716-6494-4cee-9fc6-f820027fa7dd\nb77cccf7-3d8a-4bd4-8fcd-4e9d51ee2cc3\n39355ff6-30d5-4c7d-9172-e82d3f470ee7\n042984b8-ec60-4f23-89bb-fdadefc77f45\ndbf1a8ce-8c73-4c74-9e49-3c8fc5355fdf\na9bc6cbf-18bf-431c-9504-9be89ae6e05b\nf429b2a8-2e6f-4404-a726-d5bce7087862\n18190421-c7d1-4868-8b7e-07aa24b61cae\n8ae24f07-493e-466a-8b15-5486cc350932\nb593389b-1ac4-445d-88e6-28a111bf3149\na819556f-17f9-4018-88c7-3e223861b2d2\n6cf4cea4-3649-4f00-ba3a-02f1791ff766\n39745b8e-0fac-454c-a83e-e2c212f11987\n8a4a0163-d27b-4ae8-8f2f-d6ee2bfa997a\nbe7c2bb1-d60b-464a-981e-2323dc97020c\n1d728457-e29e-4a93-a69e-8ffe271559c8\n2387bded-f8f9-44b9-8dd5-7168077ef666\n6f92e911-c5ca-4c1e-a33c-0abcf007a0b9\nee24b2a7-c368-43a2-8340-1aad7e45e2f2\n0cb1c48c-c3b0-4728-8e8f-f291e5c99836\n297ba7e1-2727-4c09-ba00-ab277922a1a7\n6c1038f2-ce87-4fb2-81a3-188270889c9e\nfabc6a8e-892a-49fc-bc52-a9d54f25ec96\ne900e313-3d75-4373-8c38-113ed2f17bf7\ne61eb9c9-11bc-4fa9-a839-20410e6d34c8\necc46443-529a-4d30-9294-6a86b66ead88\n5d2c00a2-8cf3-4ee3-be8a-25e603f6963e\na8c79225-8310-460f-8783-23c44714712d\nb4fbada6-97a9-4775-bbf4-abcf90325cb8\n89b3e1e7-4e21-4c44-87a5-05b32e4b4ba7\n6d68a580-1930-4180-8a1c-8e4a6f8a133d\n0ce2ec52-992f-4b5e-b1cf-f6591e538643\ndf5b8dea-0813-4ada-8980-55ec29d2bf22\nfb261bec-9527-4db3-a121-4014c570a013\n08298b16-9686-4c56-8f43-a96fbe69af00\n32a4d77d-f217-4b61-9e40-9b9f30382f1b\n62d6579c-c64d-4603-82a5-b0e50012772e\n8ce15ece-04c2-4c9a-8d92-498ceb45492f\n754582ab-a904-4f89-9fe9-052015d624bb\n547471e0-2529-4a53-9f3b-07ff9a623b0e\n6d77062b-202c-4647-b383-3b908eeaf74a\nc0e89366-26ff-46ec-bcd4-74ed3ace98c2\n22299d1c-41c3-47fe-ae90-9f7528379e67\nb6020b7a-3784-47a3-9e36-ccfcf3c6392a\nef096e4c-3728-49f8-9eb9-2758a78a28bc\n353e4d69-309a-4e12-82e1-778a924ceae7\n5782a526-db78-418a-a3cb-4a4b11dcf5fc\n0b7c8480-0028-4f7c-a9c6-7d0cfe575344\nde693f9a-42b7-4db7-8af6-9834f50589eb\n9c091899-a4b9-4763-9827-fc31f2d0e1dc\nbc0cf0c6-dd60-45ed-bb18-358134e12ac1\nddf15630-0152-4950-a262-cd93508087c7\n4e63c42e-49fa-4ab7-8421-695df6d0bd23\n39aa0ed5-a655-49c4-9b64-50eab51dec63\n4eae2dda-88c5-4c45-a667-01fa177db163\n62443d8d-ad57-47ee-a2a7-3873a2dc012e\n86196d11-2a8a-465e-aabd-f80073b466e1\n2e2cfe93-1fcd-4dcd-9fba-28421ce155d9\nebaa8663-b3af-47e0-82c1-e7e605effe26\nd714ec39-8418-4bd7-b2d3-c94b6d0514b9\n8287a3cd-27ea-4c8c-a55c-5b679df5353b\nd452c4b9-98da-443d-b643-206dbc4bc839\nd1155c1d-c005-49b5-a2fb-cd36dff3972d\ncb342dfc-0b7a-47b6-a994-d95082c97457\n73a5504e-944b-46aa-9c91-702aca4ddacc\n5242045f-1387-4d07-b26a-55c884ae80db\n105f18d7-2dcc-4b28-8499-53b066b5a7f8\n099939dd-0b37-4257-8970-deff52eb2838\nee59ae21-d14f-44b7-a5ba-ead282b90130\ne1870c47-2c45-4ca4-9c8a-e1ed229a008c\nf6d7cfb2-35fe-4327-b75d-f8aaa033454b\n90ed07d2-3092-4f57-b3df-88c1043efff5\nd9e03528-1cdd-4b04-9cc5-df66eb305ad0\n1d81ab80-1ef9-4c60-a4f4-e90b1a5034ab\ned77ab61-9d68-47a5-b3e3-ed5b1a56401f\n70653b23-f98d-4890-8758-a19312bb7490\n4f5cf43b-0220-419a-93a7-e0cbda89baf9\nc8f9c146-ba00-4d52-ad34-c4790e3689f1\n855b5888-d7c5-4284-baf1-93b843eff6ed\n2e08e164-3c07-440d-a635-d6ff55aeed14\n9da9ba1c-81e8-4ccd-b717-6b89fae891a9\na8ccfd7f-255f-45b8-8bef-df8590dbedb6\n5cd3dc2a-f4ea-441c-b58e-f22c7043899f\nc7fbb8b6-645b-4ef8-ba68-c3c8b53a7fc7\nc7cd94ae-8f11-472a-8d3f-8950e9cb3aa1\nff6b71dc-81bf-45f8-8202-8696ea587a42\n27168466-4a32-47dd-96a9-999f85dfd868\n94a1e601-ffa3-4da2-ba63-748719a5830d\nfb0c03dc-49d7-4b08-8512-4e81859c8c42\n4e40d1b5-ff0a-4b12-a786-c51d18bb5202\nd97cd26e-318a-4924-8aea-5eff6ffd5348\n70992501-de32-4ef8-9698-c12373d987d7\nff7a2990-07b5-439d-9159-d1ff52152f16\n6050c105-8551-4388-8c47-2bdc66a513d9\n4bdb8159-ffe2-4dd5-9ddd-d5a46f75ecec\na53d6523-9be0-4695-88a1-c501ed141975\n56900bc6-fbc4-4b21-aad9-1e3c64b8e691\nbdabf175-830b-428d-9f85-5844d5b055f3\n15ec1e57-9ecf-49f0-ada6-eea3e54873f7\ncff8721b-1b4f-4dca-a675-1538118f825d\n3c6df350-b344-4a18-bfbc-d34e21b7f83e\nd72eab96-b608-43e2-948d-b055ea30eeff\nd8fa0740-c0e5-4de0-ac0d-8fc528b90940\n00bfac17-3231-4d36-8c5e-8fdd1254383a\nd71a1aa2-d69d-413a-b0c6-9341d642d26a\n7572a0a6-f92f-482d-95ab-8852d469bf2f\nc64c9118-6cf0-4db1-827a-363c599b4a4f\naf83862c-0a55-4849-baa6-911a81137189\nf0aab614-3f88-4817-8a7d-ba8d30ed6da1\nff5467ef-5e37-427f-b801-05cc6e1d13a1\ne345296b-0867-454a-8a45-0d4947dfa4fb\ndd526b40-c698-412d-9cfa-0c34d2c14fb4\ned4e70bb-641e-46b7-93e5-9762eaed838e\n8281944c-a384-4395-af4f-4ca65a1311c2\n04c3d012-da02-42b5-a2c8-b90120daa823\n37c62c16-f39a-4a9b-a161-6f294e839b47\n245a48f7-ff08-4826-abef-c59e1e92f3ad\n129a8982-bcd2-4f2d-8183-b6ea9f1f94cd\nfc02c6f7-92d5-42ac-be22-1f7f189ae7ce\n9a045026-ba36-4c99-a749-9c2ea214fe0a\n6a49b6d7-d88e-4b5a-bd2a-500829b44651\n2935178e-eec1-4c44-baf3-eb05756b43ce\n6db029de-7a04-4016-a693-2962e2702a66\ne27ce2a5-d4a9-4b73-bd6a-94abb4cbd7bd\nf7f365aa-66ba-4fa6-b094-f25ac07dd446\n31e7dd1d-be08-4933-a783-8b2047a0c623\n34f87e3c-214a-417d-97f9-04b6d851972d\nd67df220-00d0-4884-9a42-eed4dc437888\n366aec14-b614-4d59-8f45-47e5f4d8151c\nc96649ab-7eea-4f8d-bc9b-4c810b036ac0\n00eac065-5e89-4e8b-92af-d5052f8e1b0e\n55006373-749c-4022-9ffe-529fd7b51369\n4d486c12-3e32-49ba-b85d-43458a2aa738\n0f9c5817-20b9-4d4c-bbaa-605de0faee6c\n6fd2fcf0-c749-49b1-b2c9-4a2ac0303f1b\n394eb72f-47bc-48f3-90c2-ae9d0a32e3b2\n6353479b-d685-411d-b38c-3b13bea7cf18\n788bb274-8689-4e72-bd73-61f3f940893f\nddc82b25-206c-4984-8055-5b3d3fd7d15f\n751a90d9-a308-4ea2-b270-e3d70f42a95c\n3dc793f6-91d4-43ca-8d6c-0494a9ea1a3b\nece7abb7-ff00-476e-9dfc-c85041e447cd\nbd41b0c2-5dc2-4072-918b-b1aa539360ea\n930ee35c-e716-4cdd-844a-2f8ea97b10fd\n13dc6131-af5b-47bc-bea1-34b2148d5679\n345dcc21-cc50-4c98-92c5-f7d3445224eb\n8041dfd2-2d6b-4322-8c61-a4f89a29ab99\n10c6fdb5-6d10-479c-bb6e-e92296c7574a\na56f1bdc-6c80-43e5-bc12-2fa112f7db26\n0e4f2c48-6c93-4b2b-b191-dcf5c1af2cb8\nd944a429-bd01-4078-9c02-4a755ed5bde4\nde6d47a7-1f1f-44cf-b432-da080826ec4b\n33c88e62-3933-4c30-ba37-5669c7d8c5e2\n7960ae2e-515c-45cc-84e7-53525526c46a\n655c63b1-2081-4abc-b52e-78cfbb63c19e\nd65bdf17-e3b3-4017-95a9-7485392b12c8\naeac5916-1257-47e1-a6e4-6968705d4825\n94590bd1-d07e-43b1-b765-e1a7132cbe04\n3b81d019-fa89-45ea-9ea4-e22d3ac4ed9c\nd858e6b1-fd45-45c4-9e7d-7cc9fbaadabc\n1b70412e-7a6f-46b8-9ab3-aa0208d57208\n6cb97c70-96b9-47d6-98db-e2e2d92a47e8\nef2b4e99-c6c8-4dc3-8fbe-aae2838d43a3\nc113f2c1-d411-4372-8dd0-05c87542fe46\n64c96efb-f2db-4e12-a916-b22524dab8f7\n49f72439-5948-4b84-abca-ad29177ef639\ne3416b64-7d65-493a-8542-fa6af0b8de0f\n3565f5db-9eb0-499a-b39a-b7231b112d2c\n449578e1-767c-417e-b380-f90d7a2fca92\n3e10eca0-d457-4dc6-86f8-47152bf0b141\n98a71b25-901d-4a77-b248-6a305900cd3d\n9434b33d-5ad2-46e5-af5d-a643b459fc12\n24daa582-763a-4973-b304-45ac06e59ae7\n3e4b71d9-22c8-4674-bd4c-c60af12d1c47\ndf1b5f15-ee2a-40df-a805-77729344da9f\n2e75752e-0d08-4588-a8a6-88fb5c67c564\ne98e8533-e2b6-467a-a281-2f645da16243\n02e24dbb-79f0-4cd4-b7ae-357dde727299\ne2a44445-4e37-4237-bdcb-7d778139e265\n1a3e31d5-01d5-493b-930e-9097a5d566df\nba84d114-0540-42fe-93f4-5df00d273f4d\nb7c2b64f-c3ac-4bdc-8adc-773814ecd93e\n173f183b-dce5-49af-83b2-f3a345430a7d\nb091abd0-bcf3-4094-8d3d-3007e2b6f333\nc6c5c1b1-3fd6-447b-a027-f81fe8511269\n2a7c6af3-a1bd-4b48-b452-cb0d8e39e4e5\n9df6b5ac-bbfe-414e-9123-e9ba2acc22bc\ncbb42132-19dc-4c9b-97f8-0c16923ee232\n9da1c9ba-844b-4616-b38b-d524fde5e4bd\ne57d085b-a145-4de8-968b-33128aec563f\n3aa50c38-d0c7-4630-877e-c1be84741f98\n49095af2-e266-40b4-a59e-7948a7b00771\nd146c507-4b0b-4e28-8914-d5d3417b8606\ne89f52f0-bb15-4e03-91cc-8c8d3eacdb2f\n65220fe4-46dd-4efb-be90-e80f94dab78c\n6098a1c0-482c-429a-9066-a87c3963bc16\nddd653ac-09c4-4475-8633-1d7899a1cae2\nd54de4ba-f11f-4468-8205-0df6a41109b9\n0874370a-d66d-41ba-9156-14cab7627b1b\n1f80b775-2bc2-4753-a50c-a014022d01f4\neb3289ef-9bb8-473c-a5c4-d055aeb4e96d\ne8bda086-1fe8-497a-bc0f-dcfb1444db0f\n82d471ef-fb7c-4d66-9232-05cf60c89a5d\n6a44391c-79b9-4d6f-a960-5e97573bc441\nec737d17-dd45-4731-8954-316428f4f19b\n9177e320-7a41-46a7-ad4e-5e21d951e104\na5c94203-da33-4415-94cc-3e7530b6ffa3\n8cbfedfc-7a2f-4e53-8b76-0263934f5db3\n021c6d31-816b-47de-b200-634d816ed242\n64c56a22-9fa2-4055-bc91-e9de7ecff61c\n91ccfbd9-857a-43e2-a2f7-48f538aaa556\nf10a2e71-6831-449f-b501-5841a1a6159f\na89e0147-958a-480d-8553-ca0a5e965dbf\ne49cbfbf-0e80-45b9-9ce6-8f7eac80aabd\n6d321d1c-eb7c-4e86-8665-6a0a40ed6829\n5db25983-7741-4104-b81f-65f0601c1c0d\nad5a1d63-4759-4d5a-bdb0-3ae50299a58c\nb65a8485-2f94-43ec-83df-ab24295f5fad\n4a2a470b-a52d-4c97-a89f-52b7ff371c19\na4c46225-5859-4161-aa2b-7073a7fdefad\n5b95110e-8b8e-49a4-a135-f60578db32a8\n1d118c78-4d0b-48cf-aece-3251a3a5157c\n1f470312-94bb-467c-946e-7b4d9eb9f99a\n63ae6b97-e6bc-4237-824a-3dd2a3194125\nc82ac12c-2e34-4f71-93de-5af0384deb23\nb8f5d07e-4597-4dac-bac0-95a7493dba44\nb7ff7cb8-484e-4b56-9ecf-fb12d46bb436\n8f4d19b8-01fe-4cdb-8de7-9b4d62d2b31f\n083f05a6-a757-44d0-a4ab-148e2ffbb6d4\na3d0ab1f-dd80-4d14-9c7d-80c80838e5d8\n614be66c-3ccf-4953-adc8-03e3d370222c\n214466c4-bd1a-4d99-9677-560d814d5cd4\n716130ba-3e4f-49d7-9a2c-8cf8939e56bf\n202c01c5-1391-4bbd-aa9c-6a65810bc28e\n4a9b3efb-5ef8-40e8-bcb1-f968b8070f54\nb5b22d21-cb0d-4a43-87d5-d0cac88d530a\n3fc3af3b-d128-46f5-815a-cddc8ae62e8a\nc76b85ca-edf0-41f4-892e-569ebaeefd60\n1d3ab725-93c3-4844-b2c8-a009995ca065\n8cb9ea2e-30f3-42a0-816d-ef25dafdc695\n2236e32a-13c9-4db6-b675-3a29c4705103\nefb46745-4ee5-4537-9c97-2ae7aef2039e\nc3181268-42c8-4650-9e8b-b83ce1772bcb\n0feeb566-7e71-4ee2-8814-2af3d6bd4903\nf0c959fd-d8f6-4fc9-9163-3b474d95426c\n370772f5-b57f-4a21-bf19-bed1cdac7535\nc6842009-d6bd-4b17-a6ed-4e936e836c37\nb31daca3-5063-4c1e-9ef0-ef5a473a0b9d\neb14bc78-0155-4f8a-98b8-4576ba451efc\n825779e1-c67d-49d6-bdcb-24ad9975dc48\na2762060-cdb8-488b-98ed-7d854533ba70\nd3929ce1-25d7-4888-8386-813945319b50\n867bf5c4-769b-4f97-b1b0-1b729fd63750\ne2bac224-07f3-4c71-9bd8-c30471b2f517\n171dc4e9-c85b-4e53-9c1a-d0aae6116f21\n12339703-8688-4362-8933-382494c51516\n34c41461-e10a-4144-b2f6-e063217fb06b\nf3cd20cf-86cc-4da7-b8eb-e1e0f58c0245\ne1873d96-a50b-413e-9f3c-6627774309e4\n255464b9-bbe2-41ff-9d57-bda025c58de0\nf62eaae2-06cb-466c-b147-ce56451c6a38\n22e0a276-f032-482b-aa8a-5ade49a52d87\n99b9988f-cfb0-42bd-8349-e8eb2cc43150\n0f60482f-47de-4cfb-adec-2bab6ad94370\n72ce3ece-ea12-4518-9ce3-dc55d6012662\n365a7d82-cd41-405a-b5ef-ef6cd4db2665\nbb732311-08d1-4ec5-8e5b-fa26a411fc24\nc07e7d57-a7c9-4885-822a-07e9e21063bf\n0f1f819d-c5c2-4186-a257-93a1307875d0\nd0358c4c-507f-484d-b30e-f25a98842978\na2fb8328-c272-4317-912d-38ac5557fd9d\naca11f18-acf0-4a2e-8227-c0f1fbcbc11b\n07d17f55-c44c-482b-acb9-eeb900c6b688\n9b00274a-56fb-455f-9aad-f6ad9db6e31f\nb34483a1-9c59-4219-908e-b85ecfcdfb3c\naef3b3d0-7ca6-4bf1-831c-68b3c771ffd4\na5451991-f504-484a-89a0-1d3899acc578\n56ed88f7-d02e-4742-a208-de42f75bcfba\nc487f58c-3cab-47dd-ae7d-c0f1a24db7c1\n8dd97390-0394-4e9f-b50e-77246f33dc0b\na168f21c-0d11-4647-88dc-8752ca8fe408\nb1c95a0a-9091-447f-98f2-ac514acb44a3\na39b3639-3bf5-481a-a7bc-9bfd67669208\nf838024f-fb9c-4a8e-9d27-7262a9b2ff60\nf302f9dc-3fd2-4505-898d-958dc34a24ac\nbbf9fcd2-1253-43cd-8795-811b6856c838\n3675f0a1-3a24-4406-8a45-8a62e4c4002f\ne2997a3a-cbe7-4511-9f2c-8a593b57cc60\n559204a9-f7bd-496b-a581-418cd47c7f1a\n4fe8c1d3-1016-49a1-a618-e714fab23f53\n4fdda2b4-e047-4fc6-b8bb-cdb7826930dd\n5ad083da-4b2b-44b2-9b32-10ea7c1f6b9b\n3851c8ef-8771-4396-8e2c-3e54c9d695cf\nbabba553-c40d-4602-9d2b-af62d65fb484\n50a1964b-6388-4bc0-9ec6-5bc1103d894d\n5fe4da50-008f-4819-9741-f539f3b9e674\nb0e45be9-9ff5-4380-831e-b83d5793afef\n77f0458b-cf43-4fda-a19c-551ee77da79a\n28e2e6aa-1fc7-42d1-87cf-531887baeadf\n9a037cfd-76ec-4cfe-829b-47636452a489\n91d3954d-b1dc-438f-9969-40ffb91836e5\nf75a2b97-abf8-4941-a0f0-d913dad37c48\n78c31595-11df-41b1-afb2-26fb39b89cfd\n71d69f8a-9cdf-4603-883f-2164bc61de38\nae9234be-5703-472d-8f35-1203625a944e\nd9e327ef-da6d-43a4-ab82-fa622e82a868\nd9798f3a-c0e8-4606-9cde-84990e957453\ncf8facc8-8b79-4a29-a33c-b86762b5c043\nbd1dd916-998f-486a-8407-35a9a6f502af\n2dd25b99-ae4b-4adb-a1ff-71dabd0ef8f5\nd429ec32-8261-499f-a8da-f11fbbdf9e8e\n7d2cb4ce-71dd-4d42-88d1-24f79f4093df\n6335c719-948a-4586-a6a2-6f12bc13ff9e\nefc9571b-4532-4476-b04e-0e20d75d39bc\nc22cfeec-91ac-4f62-8a91-f4d4794603a7\nf0305fb1-26df-460d-b9e3-0811b394c405\n20aa26c0-f2c2-451b-9fd3-084f5271066b\n90d3958f-3f98-4854-835c-628a80c95cde\n4112cd9f-c72d-4c4c-bd43-3af58ab8788a\nfb76f537-a590-49a7-8c51-b4462cd69ad8\nbd90508f-d45b-4fb9-bcb8-c06b28541b84\n7d1c811c-9e2b-4c14-9c2f-ad6f9075cc61\nb3c7fcef-5d08-4897-bd78-095ca87484f7\n5c18edb5-9d87-4e98-a03d-50fb1e372f37\n0c9facf1-0b84-428b-8117-2cf8f5bb9f45\n86249719-7328-469b-8a0c-39e50ccd36da\n7c7ec707-8e28-4154-8623-adb1752c5160\nb8bb85f6-1904-43af-a659-0956474dbfd5\n925d4bb3-3d2c-409e-99b1-2a30829461a2\n5e3ed240-f36e-4ebd-a233-f5cbe6e68951\ncc7e1e7a-2ad3-447f-99da-450409a29092\n5ab5f122-137b-44c2-8a37-c1a4d8bc7759\nf173fb2f-bdbf-4173-8531-34f83f34d155\n17a77629-f401-4ab7-a251-afa0c92ad2c5\n5b42205a-b2d5-4a33-a5f5-d053476adf72\nd35d3e79-de4c-4318-a515-d4fd40ee36a7\nf079958c-9aa2-4e6c-9484-0626e63002db\n9f3da1bd-ffed-4cc4-834f-9fbcd33de696\n296f1398-59b3-4afa-892a-919436d3fa61\na14106e7-cc17-452c-a8b8-334806e0367f\n8d38649d-e1b0-479d-9100-73baa56e4617\nf7801bb7-fdd5-4fbe-bdd5-42572f804b5d\na898e0c3-aefb-4c87-a049-7508eee1daa9\n9b57c6b9-60e0-412d-a903-f1614d27e53a\nc38f5972-2c7b-445c-be97-602b97cedf3a\ne054142f-e4e0-4c91-ae27-86760a0d9b83\nc179def8-6310-4e72-9923-c687ccbc4a69\n6d9e16cf-6303-477c-875f-dd505b44b2f2\ndcacecd3-f69f-42d5-b5a4-bb1a85394ea2\n9bbcc5c8-3758-42bb-a559-8a6618ec577c\ne42a5bb9-1ea6-4c67-ade9-804e80fcf813\n14188045-9971-4896-b42d-34a95c570792\n6ce98432-1d7c-45ef-9051-72011dcabac9\n12e98516-649e-4d7a-9272-801ba4f0a57d\n9c6d3d99-b5e1-47af-9b2d-cd639dc3e9c7\n65498bc6-8d61-464f-87a9-1f001a768f64\n77a2a3f8-d7e1-4622-91c1-c93670f47084\n5254729b-ff7e-4821-bdbc-8d6a20997142\nc91180dd-eebc-44d9-8fb3-9f7dc598a1e8\n90ee8d71-76f9-4833-9c99-8417ccf7fc8f\n1a83512a-fd60-4623-91ef-5d3e724a3f92\naf3b5b61-c48c-4602-bc2b-62c32bf16d4c\neaf890c2-ae43-47c7-95a5-733e2bcbd655\n1d9fc0c2-492e-43fe-a450-545e9ba19a11\ne791f585-0882-4f8c-8138-b309e6d8e744\nd2c4227b-31a1-42e7-8590-45aa5f9a4698\nc4ffd8f4-04d7-4cb7-832c-f7a1b167c75c\n35db0f8f-71c3-4d35-8ef6-5850d10950e0\ne10bbb85-522b-42fc-a5fb-55ed5379bfaa\n67d2228e-a394-477f-8840-8cb55107f39e\n34a562e5-a1c8-48c6-b80d-df446b116110\nda36ad93-8197-4c2e-ab53-90a36f6874ba\nd23755b4-9112-45e9-97ab-293efefc30c1\ncc95788b-fe09-43f7-9032-64ffa8cff1f6\n983b2db6-d308-40ee-93b4-5c3fd44a6f19\n9ccebefc-da50-4c1b-af6b-53f98ace0ad2\nf418e692-a0bb-454a-a18f-638bf28bbccc\nc9b414e6-df58-491a-8b93-6bfdab291d12\ne565cf55-4062-4a96-bab0-ec859c606570\nef8f681c-7b17-4435-9341-91c32f6cd9ad\n155d144d-a450-46f5-aa7a-ef746f001fe3\nd8c9de87-1405-4834-a0c2-9f24cc310c59\nf3d2c435-07d0-4620-bab0-c9c4c56106ee\nee572871-f14c-4238-99ad-2a32bc44fe66\nb208bb50-7ef4-4eed-bf3f-7f61b53ba6b4\n50451fde-5084-4199-acd7-c5c09123c5d3\n2108e362-641c-47d1-8d08-6d7ea0dee16b\naa855e81-419a-48c5-b35a-31c104db1ec1\n081541ca-27a3-4da7-8f42-33a9b8b85cf9\na6ac72a6-691a-4bf2-adbc-66f379d7a0a7\n3a27bc2b-0b7e-4aff-96e6-35ea19902bae\n0ba7d119-cee4-4197-889c-f73ed8ad5f0d\na4fd5c53-caa0-4d09-ac34-5ce8cc002df6\n66d029ff-a2d9-4ac3-bfc0-753853892a93\n1f186d32-6008-4714-b7bc-7d8f1ee9228f\nf2e8c254-28cf-486b-b543-ded61cc788d6\n61e806dd-9280-4b08-99cb-3001502bfa18\nf1f16e81-8b48-4aba-b4af-7405883ee965\n3f724534-e3c1-4581-841d-b935dc01d561\n86484b85-f169-4301-8fe2-2c082975c58b\nb5287a56-d9d9-4749-9e70-5e2631711c20\n4d82eb93-7802-48f5-873f-6baf11064a43\ncf0d0109-aa47-4cf4-b0ca-38a4e3a5c687\n17b4faa5-8da7-4f19-bf21-7ae3fd68db19\nddba7b1c-65a9-4fdd-95f9-f3d7803b357e\n9d280a6a-5040-46b6-a291-94868e18ac02\nfdc40720-250c-4ae0-be6d-1553c6a4150a\n5a41ca8d-5986-46a8-bed1-b808590abc99\ne8bad86a-d17d-48d6-aae0-f6ed9d2bf616\nb6f874af-46da-4da5-ab5e-eef64055e7cd\n856ba30d-86e6-42cd-b0ed-81d8c0d351e6\n2e4be7b7-9641-4759-a846-571dbecd4f10\n525931b7-cee7-41f4-8bec-ee5c6f65d812\n206e92f7-35d7-46f2-8f7a-3792815ec499\n06b5cca0-ebf1-44c6-a99a-ed930c7d36e0\n229792e4-1a95-46b3-a6fb-aa8288d7086b\n430b6967-30ea-461c-8412-771bb0e46b8a\nce51b560-cbb9-4dea-8922-230ddb3afb25\na5157da3-8adb-40f4-8ec4-60508749a16e\n8c0e11f3-dafe-45d8-894e-e4a06980068f\n9cda6203-3024-4d46-a051-e461b150bee8\n04bf6cad-295e-45fb-8ff3-7376ccddc3d9\n472e3c12-07c2-454f-b3a4-f2aebab6a23d\nb57565fe-741d-4029-bdd9-24884a278e94\nb2fafbcf-29eb-4e8a-b603-f124b0060ffb\na578a894-e247-4fee-9df4-e399d37d1370\n3871d64d-8420-4cef-b23f-359846718bab\n136e90cd-8998-45a7-b7e5-01799241f35c\nc47599ca-9f23-4e6a-b162-35a9529ac283\nc207b7ce-8b2f-4ad4-a915-1e1b005bef2c\n4e307161-974a-4a04-8838-af21d8889255\n810b61db-12af-4716-86d5-668324ad41c0\na5107fdf-6e6a-44c4-901e-e0886362cc84\n0c88b49f-de30-4988-90ce-2447dd20828a\nc4b323ac-e757-495a-8f91-707774766c2c\nffa66709-6b5e-4e0c-bc70-cd78ffdb9468\n0fd93fe0-4524-4226-9d76-052906c3b7bf\nda6e041a-0ffc-4ef1-8483-e1371cbcf05e\n744e164f-59a7-4b19-ae0d-d9a96e4089d1\n6d2a0eea-71d2-4b1d-b7db-5eeede823fd1\n82f751f9-6a32-4445-b2a8-edb613e2c1c6\ne2c0d541-a74d-40e0-94eb-19ef2569f127\n1f967bd4-d927-49d7-8e89-884743510d85\n9f917cc7-d517-495b-82ef-a9c9666c23ea\nc73ef33c-5864-4e91-b071-98c2c6633c8a\n9dd6a93f-2fc8-434c-8b59-179248787f18\n4f404ef7-72d6-4f76-aa28-dbbae279f1c4\n5103974f-2e08-4ce4-bccc-90c9c6c167ae\n37d91368-8307-42f0-b079-912bbbe05b93\n9f16fa5b-dab5-4221-9663-ac71357d8b34\n594b3dae-64e4-4ffd-b383-660f33ed80a0\n87b7918a-4895-45e7-9586-f8ebad7ae0f2\na53349e1-66f3-40a7-8e5e-560d50665fb9\n127759f8-1bdb-40fd-a762-9d336d01853c\n1e3acd1e-6ecb-488a-b72f-c04bc2eb4495\n736cb773-57cb-41d0-abb6-db185e7e5809\n7f02fc55-a4b3-44d7-add9-0ab766a7e987\n35b6d4a6-cc43-4599-bc10-cef99bcf71fe\n716a8c79-9af8-4a79-9325-7e7318489cce\ne5803961-ef93-406c-9e0a-ea36d776c9e9\n3d9aa423-7b4e-4990-bb4d-240d39f16ca8\n49b4d9df-6ebd-4ada-94b1-d6a5e007a7e1\nfa3debc4-531e-47b7-bf45-7e1a400584d0\ndb526b17-070d-47a9-9fcc-6262f6b92cbc\n866475e9-6816-4a69-adbb-286ebf836511\n10662697-4819-4ec8-a55d-57dfe873627b\n4bf063d8-bbb6-48b3-bf0e-d8bb24589332\n79174f23-b9d4-4d9a-ad48-60dc5ea36460\n236a3e70-bdcf-4bbc-af07-405aa851c468\n5d0e1291-3806-4c05-9782-b532c74d1b5e\n235f52da-c79a-4b31-bb13-b92c27dc520e\necbf73b6-2761-4c6c-84cf-c2a1658a8fb1\n68809291-444e-4981-903a-2a06697cde51\nc74eb5aa-c0f9-4dea-8f91-b8e4d12d56f3\n480d3ecf-cb79-4ec6-bd6c-443935d6b973\n56ee4ed2-9da5-4e5e-9f1f-251d63d25b49\n86c2e181-6361-48f8-bf31-7b403610b5f2\ncb47e6ae-b259-44c1-850c-a129e77c9630\n4d4cd366-3f6f-4b85-8191-b19a18d8ae37\n0cc01365-0925-4a37-97b5-0be9815f44c1\n26ab0712-590a-4eb2-8db5-1919a633b972\nd4fc84e2-28fc-4c6b-9ddc-982bb980fdeb\ne15541d0-86b2-4ecb-bfdc-ad5151471121\nb27b9d66-4f00-4928-bcec-bdfc0fa1ef15\n1f1d70f2-e3c8-4761-b742-92b1dab854bf\n2a4b73b6-0746-490f-ba4f-905ae07060ff\n0a794677-c3cf-4be7-961f-23d1e3c10b45\nfb018fb2-bd08-4dd2-bd98-4210944442cf\n783533f0-1450-4a5f-8cb8-0f97499f9754\n5e62c379-88ab-43ff-8779-43c2c4c3153a\n383202ea-d63e-4bb5-b890-a200611e1696\ne2145614-2051-48e5-9adc-4bde883fb2d4\ndd25d828-c904-4264-b377-f41bb0e538a1\n1911a918-da2d-4b22-bdd1-49f1e43a458c\n6c1df169-ef0e-427e-b343-50c297cada47\n52f38db9-35a4-444b-b39c-eda8eb3197ab\n4357e995-1bef-4811-86e9-22d258e75ecf\nd2b2f6c0-4ac0-42e9-8eb5-07e2f8fc9caa\n6bdc4d9c-edcb-4580-9e4a-d0771b8de610\n697097a0-3696-4cdc-8e19-5d59a264ae4e\nbfae4f4a-f558-4c3a-be8c-9a5be0e6b836\n0524209f-c379-4257-97a5-f160b199f611\n66143d13-1368-4802-a0aa-92e5fcaf570a\n69fb09c5-e261-4d91-ba7c-2479d61b064e\n5377383b-43aa-48b0-abb6-e9fb32c01891\n7abada94-bc32-463e-a8ca-99f555a87f24\nb3a3b8a8-49ef-4f59-bc8b-e7e2ee347df7\n16963ddb-055a-44b0-8950-5f72f440e30f\n470d7857-71ef-4ccb-b9ca-763225737846\n50c71531-2d2c-42a1-b1dd-923226db0b30\n52dd818e-5f1c-44c1-835f-cd62514bbe72\n4b50b42f-1b54-4ea3-9a34-7279d15439eb\n01b87d89-f59c-4b1f-99aa-dbab02421b64\ne4df9766-d795-4c5a-8691-8e1627eafe3f\naa5c8c77-5213-462e-bdda-6704153d03ba\n48465624-bdd9-4c5e-b340-d95192b4f334\n6654e840-f15a-4fa7-9582-4f118807c739\n9dd275bb-1840-41a8-9dc1-71975866075c\n6795a540-fb0d-4ea7-aeb9-196892fd9151\n743f70bf-578e-40ad-808b-081ac9d4eac6\na3a130fa-7d24-4e61-b3b3-d88ecf626325\n9f03f5dc-5fc6-4175-9d02-c21253131a2f\n89cf1324-e02c-40e5-bef3-85d36505059f\nf79d9abe-025e-4773-ad44-e1ea5aeb1b92\n83a1cd86-a8f3-4552-bce7-534ce885a72f\n8621d19d-65d7-4087-a099-2577d20e308e\nb21f4966-b060-4bf5-b24b-f9d4cfd806c5\nfa068980-bda0-446e-846f-f064aaa6f217\na988e5b8-7bf8-407d-9211-cdb33ee6fb60\nc02ed1d5-039c-42a5-8a65-300d37e317ef\na1d6e9a7-c4eb-4782-afec-81ae441cfe1f\n59c32d6d-d417-47e6-b8a7-be8dbb557b07\n531dc56a-14a9-444f-b071-0ff07c7cf0f2\n848e89ff-7a13-4852-8c58-1ea88605b1ec\n6735b300-58d4-4437-bdf1-317caf4752d7\n68c16566-947d-43a3-83a6-f0b0c99f91d5\na38b9d91-cf35-4f38-80b0-42690e625788\nbc9de72c-4647-4fd8-864d-e5aa60a8df12\nea7a48c3-dbb1-43ae-9076-925e42d41c42\nb8c8c20f-0b0e-4a8e-90c3-ec6de377f634\na2f0c7b8-d457-4614-8a86-0461e8b4c80f\nbc573c4e-cc72-4508-8c08-f84d8c2790ae\ne766756c-1bdb-44a9-bd29-d00e28420e31\nb58b0fe0-a190-4349-9aa7-f8d73827feab\nb7536bda-3ff2-422b-8755-b8f697750072\n823ef7a7-5111-4a7d-adfd-49f6ed289b6f\n3bc337c2-6041-4977-9ceb-eb843e13e8d4\n16047160-40c8-4e24-9d2a-1e78200ebec5\nc84b923b-2bcd-471c-869b-43d88e1b2ca3\n629e7919-4b36-4743-800e-670f8b708775\n422204bf-4fb1-4689-9334-a1e186deac9f\n8678ba2d-b6cd-4a75-ac76-31e416c5fa78\n9a69e78f-5aaa-4a13-a78c-fd3b8c596bd2\n730ddb6b-b790-422f-bead-b1f25a31afa2\nc12137b2-268d-4254-8739-2d5aabe2adee\nad7d5cc1-45ff-4583-b68b-0706d2662515\ne8f42f16-8b1c-42d8-81c8-267b117f07aa\n501b4d98-1a46-490d-904d-c7004de231d3\n5abe4986-6079-4c5a-b02c-3d93b2a32243\ne1e1eff7-b722-4128-8816-5d98d55f9053\nf39fecdd-4d96-4721-b4c5-cf73961dc9f0\nfc458051-ed26-4522-98b9-1b20bf6b7b20\n74e39709-305a-4a34-9a9f-f4c15075c6d4\nbe361238-0be7-4288-ad53-4df9b95703d1\ncbe7c6aa-f9bc-4036-9ddf-b57ea88265d2\n8b4a0a28-9407-4579-9875-accb20b05ade\n89b541b1-aced-4407-b3c8-d1a99ad31639\n82d57e32-71bf-4e6b-acf4-67c8496ca425\n26dc80e6-1b9c-4b4a-b7cb-d3348140f7a5\nfb4b0289-be6b-49d1-be78-dd77729e0ff7\ncd323284-5338-4616-8d89-4fc642fba012\n4f7db4ab-eb81-4f95-a63f-0523777af7b3\nabd17601-0f71-4249-a9bd-63226728c595\n5c7ac8ca-5824-4944-a681-e00c93d44a54\n17cffbc9-eacc-4876-9363-60a064c63838\n02b9f606-d40a-49c5-96d1-1d08fca0e3f4\nb004dcf9-b2af-4607-87e1-c3d86d964538\nb37d144d-d494-41ba-89da-bd259b7b32ce\n5d568d80-cea8-478c-a6c0-37f04c6943e0\n35360abd-2d0b-4a23-b42e-d0aa6ba311d2\n0e161792-7e39-47f6-9dc2-3fec1a152c72\n2e0cb79a-7dcd-44a2-bf83-c007df99c098\n27c112db-4044-437c-863b-cd3f7e57de33\ndda0d719-4508-4355-b5aa-76522b10daa8\n76dd96e9-e485-4659-9267-890c8132dfca\n50db74ce-f91c-4ee7-bff4-15f2c207d60c\n3460cbc2-db09-4219-a95d-cff6dbe56bb1\n29a4b85e-c7db-4265-bd3e-a7de81f7fd3d\nd9e4c3f0-000b-43ee-9458-e7bc9ebce345\nb73d9781-a381-464a-afdc-fea8998cc57e\nf4eb1828-95de-4353-bb3a-05b66a2b5d34\n34c2c9fb-3127-4f73-9773-6ed4c55290fa\n92ebb8ba-e534-499d-8bef-25d766a47e0c\n28c89109-02bb-45f3-8691-3f699798fbf0\ne0c327f5-304a-4f0b-b337-f9eb484b6bce\n0a4f5ce4-efcf-4ebf-9a9b-0d5eb1d821e9\n0fdb60c2-039c-4b35-ab56-02e639195726\na2832e8f-b215-4844-b183-c16717ac4634\nd7288d4e-ae1e-4530-a0fb-524d092d0d54\nc960899f-ee85-4dbf-9d98-a924dd3528b1\na55f8edb-ad18-4e61-acca-2f938b063087\nc330e96b-ab7c-4f62-9c17-e30126e7013f\n855fcbfd-8458-4365-ab07-7e92aa79b1f4\neab01807-71f3-4c1f-92fe-557e9eb6f664\n1825dd84-3336-4312-a0c7-484c0602d8e3\n76bd6cf0-7344-4945-8e5d-d41cbcdea319\n7634b338-dce4-40ea-a739-86272f9fa435\n0d56bb6d-7384-473e-940d-1b8cbf701dbc\nae2c7852-b565-4e0a-91f1-2983583a7eb4\n5d05d95a-9dd6-4613-8782-38cceff2a175\n69c3688f-027f-4e5e-a522-354f47117e59\n12b75b67-a288-40a6-854d-fd317eaf5a27\naec489f3-dd74-4761-a640-36ff10912fde\n2d5353ba-7fdc-4734-8373-9eda50433917\n3738f295-e9b8-4a6e-9f2d-63cede4ed8e7\nfdd763c8-d614-44cc-91a9-5ea90ec52d16\nf8f5eff5-88db-456d-a8ff-cba4b1935988\n862f25d9-78de-42d4-b297-ab48154a1c77\n3f25efd3-b232-42b8-bc9b-61c14b802b48\n060b1373-bd8c-4d1d-83bc-a7e44c03cc5d\n006ae9c7-e05c-4a51-abe0-682d9b24003e\na507890f-d0da-4e63-a60e-85bf314a49e6\n2ce9bedb-43ff-42ff-b564-85f75781ae90\n2006de8b-c5a8-43bf-8407-84be743af61e\n7bf0c299-2790-484e-aff7-9cb05dcdf19f\nae60c2cf-dfb3-44e5-a206-50ee7627bedb\n5378424b-b858-4202-b48f-904adbf80b77\nba829323-3a1e-4408-af27-b10490971fcc\n25b5b054-f65e-4436-b2fe-a47f09ece577\nec0ada51-dca2-4fd5-94a9-d8b774eb450e\ncb04e08f-ef94-43b7-b3e5-f4360cac70f3\n1d07c1a9-efe6-4e47-b2ab-289877c329cd\n9648ab4f-47c6-4210-837f-a35a7e2d6878\n15df3ab7-3f8e-4d0e-abd5-d7a42f36560a\n61cbe24a-5585-4a7e-9e81-161b587fd5ad\ndbd96d9a-6fba-4064-8815-03d59c1dac11\n1b402e22-cca5-49bd-b0d3-6fe98ab263c6\n69c3cfd5-fc0e-42c9-a74a-a8367a0cce53\nb39d40ff-f168-4e47-8cf8-29bb3e010e5f\nd6c25d48-1ec7-4ad6-98bb-5b6d438890a6\nca941e61-d197-43a9-b23f-a036e23b33eb\n1685a785-e189-46e8-8346-7b74f13dc7b5\n2c524899-be4d-46de-9779-fb1b443b83a5\n9a466b38-3e05-483e-b6a5-f7fd336d2ca6\n0b3cfcad-92d0-4b01-9a98-e9bb94fb6ed3\n09c7e563-4789-41a2-89a4-3a6805b0f3cf\n9e75f3d7-4d3a-40da-af0f-c3db9dabf8a4\na16ec91a-7d1d-4a64-8cc5-d5c008c7d6db\n234385a9-75d6-482e-b248-a3ca29dba597\n2007642e-8d4a-4b07-9b87-ea76dbc466f9\n96fac9da-23cc-4493-b487-134d78ff8d57\n2789e140-d2a4-4d93-a668-a5ff55e26515\n37282cb5-753e-429a-8af7-d87746efe88b\nc16a1f44-4b26-4ca7-97d8-c595d64b380c\n1b378f40-58fd-4f01-a92d-730bcdf54e08\naff05083-3cfd-429c-939d-9c1b54078b02\n8f950c03-1693-4895-b222-260fe6250c46\n0a8e867c-cf26-40a8-859e-59f8197fe7ec\n387ee9a4-0406-4765-a8e3-0c254ca1cc15\n7b08ef4a-9a3a-43d1-af4e-8918d9473a2c\n2cadf1a1-f52d-46a0-a2bf-b456254e1d62\n66805d50-d259-483a-9936-6acff7b10f3d\n3d0c8e61-1b8f-42e2-b7cb-b7f5c7c6c4ac\ndf238837-751b-42cb-8ff9-e229ff8d41e0\n4ef66316-35c2-44b4-9096-8ba3c134be1d\n8a981b14-f1c5-4db9-91bc-e614504a4941\n3f95e408-88bd-4d39-b0c1-a6f1b03fe6ab\n07e8568c-9306-4769-9edd-e0af84a5da3f\nc70f8259-3839-4bc3-9a57-c837434fd347\n1c5091bc-cd9c-4351-aa32-d18130a35a89\n8a54a237-6b25-4958-8d5c-746f1b775971\ne09b219b-1a01-4692-b109-e159490a701c\nf1f44fa9-e5cd-45d1-a0c7-411378c7569c\ne12b4b18-95c0-4d48-bd2d-c0b0dbd7dc09\n501623bf-1380-44e7-ba35-1c597ce5169d\n4ecedec8-f467-4449-8078-accdae17c483\n3c89e4de-80e8-4ffb-a0c5-fc08563a4b09\n07b6aa54-004f-4b4c-862e-f8fad31f2cc4\n2509f703-7003-43eb-ac1e-d1a3588e587e\n5b20fc3b-a705-4fc7-9a68-108ee44c20c8\n497bdb02-44fd-4479-874d-14008f454377\ne6917453-6e5e-400c-9a3f-ff4c78b55d3a\ne242facb-e6bc-40c9-bd32-3647a35d2813\n0a426583-959d-4577-b44b-2ad2244058c4\ne09c8526-07fc-4627-82d8-c1699dc8ec36\nb94ec2a3-a3e3-4ceb-8f37-2644dd1dc156\n13f4241f-3df1-452b-93ee-dfb2be49b3f7\nca43023f-442e-4d09-bc32-827955400849\n985fa5db-6cd8-4642-adfc-68d19c2310df\n4fd5ce66-9c96-4c21-a435-3c3077ac696e\n28385b2e-89b5-495a-b49d-1fc070105f34\n80014ef3-5a6b-4699-a4b7-4f2c9f3d6ec1\n242c9dcb-4e35-4be8-b253-85afb7995098\n505833f7-fa31-4a1d-b9a4-234893d04e9b\n4542ebae-211c-497d-91eb-eda7ad9bc07f\n47efce3b-9e52-43d9-9372-168bd210b118\nf0226113-ea16-42db-bd07-ea68d31d6036\n6d367f33-3c16-4e43-9a9e-26246bfeb340\n8f599ddf-f49c-4f19-950a-650645ee0a68\nb032896c-85f5-4d9f-806b-fdba3a6f76ad\n6b53fd71-94a9-4c98-9853-8e2229f7b9f9\n7614d741-4ea2-4037-9f14-2a63a9b503bd\n061ae668-bf91-45ce-bba1-093912d0cfb0\n77051615-19c3-4cf4-8aac-dd46504bac35\n86d8e497-fec8-4bee-9a25-529147d956e1\ne34f9d17-b962-4a2c-8553-6c59b2c438d9\n160b0478-6549-434a-855b-3a8e636e324f\nfb8a7925-df2d-4752-b24a-46112285ae69\n3890a4c2-d128-4c7e-ae51-667408ac8fe7\n6443f8e2-f4f3-47e6-90c2-9234022cbe2d\nf886ae37-30f3-4f73-bb8c-d975ce5adb00\n5dcbb36e-cd77-4cad-9544-81ca235c44ef\n968b30ae-4dba-47ae-a7bf-120e291ac782\n1a3dc245-2624-40a7-bd64-0d179d8cc5a0\n4026ae96-b605-46db-a070-88f9db4a5555\n249c4fe8-371d-437d-89bb-4126ff836b02\n6582912c-efb9-4ea5-8fc8-2816e5c88cd6\nbffe8ba8-f549-4ee7-8497-f74e39c241ae\n9cba72ee-9e7a-4d57-a57e-5caa76f2122b\n1c063474-432f-417d-9f68-347670e8e24f\n8ce02629-68e4-4fd5-93d0-66b6381d2607\n0e2823fe-4cce-468d-99ce-a16d7c3aa4bd\n70d87074-0a0a-4d85-8839-462c951320d1\nc4cf895e-254e-45ba-b414-9860b08519ee\n0a592cfe-cf68-4c7e-a8b5-43a5621b3738\n6b4f28bd-5dc8-4311-84dc-774301379a23\n459e0d1d-bb6d-45a6-bfb7-e5e899be9bfb\n1dd9cdb3-5734-4c19-98aa-f0863736ea84\n6e8aec44-029c-4582-94f7-4c49c366f819\ne1382c5a-0250-46cc-beec-e9cb73b8ef66\n0ee24a5e-5123-43b0-9ecb-c8d20220bf8d\nc9251e82-3e1f-4b8b-a833-1cde9dcd092c\nb314877c-5ddc-4bb6-99ad-fad3e71921ba\n0e6cf26a-3c74-460b-b284-a4b34188d8f7\n48588b76-4cef-4699-9400-c0495fb0ded3\ne9774191-1f24-490c-aace-d134f4cac49e\nf526f77f-1b9f-4896-9e6e-ea8bef726072\n5e09aa21-e2d6-4b49-9c23-9d64c834b7db\n8774c94d-2adc-43e1-86d9-37df11b53538\n3df6f486-a144-4f89-a2a5-d8a0677518c3\n226ddde1-84e6-472f-b271-1ddfca3d53a8\n0746a6e5-617a-41b9-a64a-f8f5558e8247\n52ccc726-03ef-4bba-b9c4-1e33aa62a3f8\n67f7fef3-4d94-43c9-9c27-bd42de0dd1ff\nccddf322-ec76-433e-aa72-43a363a4fa67\n078f6b99-f6c0-4240-988d-73162fc4967c\n54cabd34-a99c-44f2-bb77-d01befcf69a7\n31b7cd73-5969-4a6c-bb13-e4fb44bd098d\nc129908d-1481-4606-b982-25b65c273a34\n09f4a043-fac7-48c2-bf53-1324c8b4514e\n5b3aea2d-f6e0-4e69-ba9a-385ca35278e6\nba48410b-f92d-4fa9-95e3-6b6f3f42debf\n68fb06dc-8263-4f44-a88c-e71df5029f77\n91edbd1d-ddc7-480e-9903-f7db93b05c77\nb0049c12-bff8-429a-b709-c7cf1681da94\naf882b40-e2e8-46df-9572-6e455a556d89\n020dfee2-8c91-4277-9fae-4b0b7bbf453c\n795403ac-3f53-4d69-9a0a-42ea8717cb24\n6b4f542c-0f13-4b62-8cd0-d2d420aba0d3\n49546c85-22ce-44dd-97cc-d24f5afc2c67\n34c233de-dbac-4a33-97a8-b6ce235bb212\n59283b25-1eed-4a1f-8b01-bf3f52c617f4\n0586ac4e-e833-4575-8644-87ca67ce6486\n65746753-7da0-4764-8759-64e190b64477\nbc7b83dd-bf28-4678-97d3-8993a385166f\nbb34d28d-c5fe-4085-a110-f6d320a23675\n780a8686-b938-4ad5-a425-5c4f798861db\n6a35813b-2bf3-4536-b536-157801096a9f\ne866313a-ae34-42f6-9b25-dfc12526ba3b\nc021fe16-8457-4ba2-8256-5026af3d4ebf\na0764a20-bc20-4e05-8be4-59c771dc6226\n77729001-228c-489c-862a-148f553f0005\n59fced11-7f29-4d47-b351-59b8fa3cb833\n55e643e0-7abf-4e0b-bd00-96e1eb45e715\n12802303-d928-498d-9d83-06bc8ab3fac1\n164374cc-2c71-4b0a-9a3a-1026cef20655\n426fa266-c890-40c2-b56a-7afcbd263680\ne7a39842-ac6f-4237-ac65-d90e7f138b34\n306cda79-9f08-4244-8fbe-8a80d2ff2492\n4e53d0fe-b614-4724-9094-f710886952f4\n1cbeee40-cd22-452e-95c8-ff5584f94057\nb8df5c05-b6bf-4430-abaa-978bc92f4c3c\n2915c21c-41ca-4ba2-9cc7-71bf40907aad\n00915f92-d838-410c-8e98-9023cafcc2ee\n5d6ae917-12db-4d39-9f42-b0e6b092faad\ne4317800-9496-429c-8e52-5b8ab02fc3b4\n3f3109ba-9537-4208-98c6-b8d761c33774\n01211722-3ac1-4163-b0dd-5eafc38b17dd\n5c5a4545-0ffa-48ef-901b-584bba14fcb3\nbd57c56a-79d7-4549-ab32-c71159e79717\n7281a86b-ff82-4a68-a75b-065450fc9bc0\n0e1077f3-4cda-4391-b62e-23e575a3191a\n14aae6e7-ac2a-4d84-9617-39db98e0103e\n122ccfa9-89cd-48dc-a14b-e1ebbd1d6b5b\na7c20914-56f0-44e7-9379-0a6d26ee4657\n099f746d-7818-4913-ad20-7c914df2793f\na29b0680-14e2-4be8-b683-23e4140bca34\n0763f953-4ce8-4ca0-bfd5-bde67b4b2af3\n1cbc079f-0697-4281-a0b9-1a54998fd642\nc7c1e54e-1c80-4ad8-8c12-79024b8f3ab1\n26773016-4082-40a4-8d0b-6cb7d42d4328\n32fe36cc-7d8c-441a-9d43-6499e88f84b2\nb512c676-942f-467d-af34-47dd38e521b9\nc8224f9a-e46f-4a03-a94d-59af636e0db0\na55ce104-5648-4c98-9a76-fa3a2c5293e3\n7aa93f0b-1b5e-46f1-b3e6-57835cec0812\n6fb30f1f-d529-4a0c-aced-15b00b191e18\n6e849d7c-4f6c-42b9-9ba9-c21a66c2d0d0\n41508d05-6709-4078-b4d8-cab552a206f0\n512830eb-d67e-4b01-a3e9-9a0bbc7de5c8\n0778faea-f662-4121-866e-8643169a4027\n668e6d01-a0ca-4e3b-9c34-c891d082d6ae\ne72c2687-e91a-4f64-8bfc-b98a796d6e8e\nbda0097f-32ab-416d-b579-5494010f4e7c\n8c73744e-7cb9-4ba1-85f3-a9d80174ad85\ne8ac6c83-93da-4aa1-955a-e4d48fa1c97a\n41db4a7e-f2a4-481f-b8cb-986cb4c4d917\n0acab8dd-2696-4ca2-8644-6eb54e277e31\n01529a14-d1d5-4ad8-9b48-1cc5ed48b661\n9989af8d-7609-4533-a189-6705482f9d6f\n9200b2b2-8a9f-4dca-b9f9-97f006afeb6c\nacf30457-9778-4842-84c4-bf5c17875833\nf97fb073-08cd-4d9c-9110-93e0d10965d5\n1ef54e88-0df5-4de0-9c7c-929ff3c063a2\nea9900c1-a85f-4fa4-86c6-e47601a98b8e\n58b55785-5fdd-4c0d-b15b-15d65abff761\n0a2d565d-53c8-4de4-9b02-c761b2119fcc\nf788266a-3652-470f-8b6f-1a75dbaa786d\nb03cf4c1-9d27-4712-8676-6245591c4011\nd004889e-4090-463c-b413-d31ce2587f86\n0579ad3a-c396-44c1-99d5-f3c9f47cb543\n5d90f808-9b8b-498a-b0b3-bedd4617a980\n5bbec214-8115-4d29-8e7b-cf68f4abf24e\n7b31e714-abc5-450a-835e-189d6b88625c\nd1f9ad80-f141-4b33-b9c1-f44aee320771\nff33f2f6-dd09-4a85-a1fa-301d91cb17d6\n2d8c49bb-a3ab-41d2-91ad-a959bec75ffe\nb6b8b5b2-16a7-4091-87c8-d8d6d96db1f3\n44a8ffc1-2e74-47ab-8498-2fe61fb7d2e1\na867067e-819c-4bc9-9e6c-ef77ab689a30\n9286c925-9559-4d0d-9780-6293f044f3b4\nebc151ec-4407-4b61-9f72-936d540370a7\nb398fcf1-36c4-450b-845e-50f061ac9104\nee834ec4-d0f9-4fd1-bc7a-9e37fcc435ff\n515982b1-c475-41e2-ab22-3e2989309091\n0745839f-9881-40ac-a71e-0e9b9a883140\nb2291ccd-c4bb-4b98-9c43-b003118c579b\nb829af71-523e-406f-9e8a-7aa66bb0fb8d\n95a90ec1-6c8b-431d-a149-231a3bedf1f5\n915fab44-a9f9-45a1-a4de-76340cf84d7f\n0d306cea-b6de-4869-83f1-aba1c7469b31\n432fd813-a9eb-414d-91b8-5f483e772faa\n0bf21fe9-9915-45ce-aa03-3b687aff81f1\nf0815505-5144-4b6d-a339-a483d85b43d0\nd5b551d2-4fcc-40db-98ed-e0048c7aa827\n71eb52f2-5d76-4c4a-a76f-7432b5aa6b0f\nd22f4f21-5b6c-41c2-a9d9-1554fb4b0977\na6325153-8d65-4886-bb44-2f90fbe204d7\n949ee16f-8011-4a55-8001-f89e7916c28c\n8ba433c8-2bb6-4531-a2f6-1c0e9cecca62\nb4594ffd-9a65-4e17-a5f3-70eb44b9d157\n9d03c39f-5ff0-47e4-8b9f-55ec7480c26a\na7bb1a7a-5259-4b8a-8ff4-9a53c8274548\nf26f8854-92c8-40f8-96a1-e7262f8d42fb\n7cae6b51-8987-4660-bf70-f458ad7fff80\nb961fa3d-93cd-4dea-ad26-16e772e983bd\n907d9a30-4c04-4fcd-84af-9be629d120dc\n7f46be19-4376-4e4c-8337-a44950979ced\nb4c7498d-866a-4fac-84be-da23c0bed27e\n2b7861d7-f28e-42ce-84d7-d94dfc65745e\n4ece09d6-c089-46c7-bd55-b6af811b9525\n4efb1acf-b40a-4f12-9c3e-a4403db1f242\n50bbb887-fc6b-46ac-9353-8431964e0d26\n227c983c-c3d8-439b-85f5-64a1afaaaca5\n2b7dfe8a-a75c-4ae2-9f14-2c281f6a6312\nada2cb1e-a8c9-4b19-af99-8faa01560a94\n66cfddbf-38ba-4a3b-8e5a-c93ab8cf0640\nb911d0b9-46f3-4bd2-bf46-81682697b1d1\n752d655e-3d93-4114-90b2-b206119139b5\nd6a843a9-d487-4d73-8183-041bea93d6ec\n20cd00c5-7d1d-4ee1-87fe-9c8a205185b9\n1f5b3c7f-b377-42c3-9b4d-e93f0e35dcd2\n39f1f6ec-f8c0-4781-9e2d-719cff13ca03\n150283b3-4090-4fe6-9ae6-f42072bb66b3\n65af02a7-5f3e-4132-95da-64840b29848f\n79ab8f20-d017-441e-b42f-645cbcb9ff2d\ne0ba11ad-8987-453e-8102-9d4ad6f9a42b\nf372eb4d-a88d-43a5-a980-8cfc2b87c49e\n485887d0-bac6-4c46-9090-47abc7b5e168\nea417603-43cf-4417-af76-01b7565e8e56\ne82bfc29-9607-48cc-9426-3a9a60320135\n98975613-7cd6-486c-ba84-50aa72bc0b3f\nb2ba209d-03e1-45ff-aaf2-fdcc3a795dd1\ne61f8b06-0fde-4fe2-ac3c-f3eeaf7d78b8\n54a83947-2dfe-4e8b-80b7-f78206fd24d5\n5c92370f-db5f-4e75-9ddd-b59a0ef54462\naa7666ca-149c-4eb5-957a-a52547a7c1f3\nae0455f3-7355-4a5e-bdce-73eaf8f7ad25\n4a451f3e-00ef-466b-b648-46f727c282c5\nbdbf6968-f10c-4f41-8de6-a03bb7853626\na4ec9567-e144-4c9b-871d-63cbf27f9297\n9951752f-96b9-4d3d-ae94-8ca63c7fb3f4\n89985f6b-3d80-49be-992a-221d2e72e3dd\n95d6a404-59af-44e6-a54c-1405e221563c\nab6aa034-6acb-4b5c-886f-838c139a58f5\nae1cb6f5-6451-4942-94a4-b6521bd077db\na6b11f0b-f1b9-44ef-8c48-27d5f872a431\n3f15f937-71b3-455d-8b01-fe5bd1f0fd3c\n53b1c18c-672b-4490-b41d-9214b8ff0b90\n60960e28-eab8-4559-a4c7-ff4df94fcc67\nd20e81d6-1b68-4436-a423-47dcc722a7a2\n7a341a64-b652-414c-8dfe-754be595d220\n380d56bf-5ae1-4ea7-a3e4-1ac5a83598df\n66e6d4af-c0e3-43fb-8a99-eaf61653af9b\ne7e7db96-fa00-4185-a4a0-747f5790a4f6\na1121cb7-cc0b-448e-bc57-311753581c40\n89c9e622-f049-445c-9efa-9efbecda01c9\n5bf81a02-01c2-4dd1-8249-1eb56dc6c42d\n79303244-fc3b-4180-a3b4-8e9b14e6c7c3\nbf2f6975-d317-4426-8f7d-9f21db458fc3\nf97ca77b-97c7-4b24-997d-d74bebf6e6eb\nf6d6e2a8-0ba3-4aaf-b305-810f3f9139ff\n4177bd86-0889-44d9-87b5-2a4c48fae0d6\n44c9c2a4-e9f9-4325-8d89-bf692da77144\n395c93af-fa7b-46a0-ade4-2762ed7bac5a\n5ba83947-de5a-4f71-81c8-05576c03f6ec\nc94c4b81-4c2a-44e0-a5cf-f8c5603228f7\na51ae37e-40b0-4a16-aa56-8be52f9217f2\n0aab6114-edb7-4948-890d-78040470c80b\nfb5eccb1-de3d-4ae3-b7c3-07cf769c2337\n9791a33b-ddf3-46e5-a029-f3727f6f2094\naec610bf-ffb0-4e1a-b3a1-cf8e1b37ea33\nc7410ff2-5b35-463c-80e3-6d261d5d1016\n3c414b52-7443-4c9a-b633-1071c81b3ae2\n01115abb-b34e-4d90-802e-e5526b201ac5\n3ed3d17e-9f7e-4fec-b69d-194bc3c26a24\n84e5a2eb-74f0-403c-b6e9-41894ed78a3e\n4113e656-d61d-4f4e-b953-3bfa4aa6b9e8\n4fc6df21-9bf2-4ce2-abc5-158d3dfc2ece\nda858f06-cc8a-4673-bf95-9064e4e0c149\nf20231a0-6cc4-470f-be47-12c2f94e3803\ndce50447-ae67-4c4f-bef0-5fd5836d7313\ndd1f709e-0008-4911-ad94-b2711cfeb454\nf43ee7dc-e4bf-44e8-a23e-38ad4bcce692\na4c59aea-f31d-430d-b76b-2c567891b7fe\n650097e6-e6a2-4a5c-a0e9-a783ef76c2de\n0d9e0567-3eb8-40a8-a195-bd2eee652996\ndd5d6764-e810-48e0-9c2c-687818153202\n0e55bde7-d63a-4e9e-a2f1-792117ffc158\n4f2e0939-e297-492c-af14-cdc9a2a99b6d\n582cdf5b-696b-49f8-97e6-77722aa0e1f6\nf21ff0f2-911f-4224-b00c-c6dcce962f22\n122ec6d0-098e-43c2-b75c-86c9874d26f4\n55d0a427-8970-4f8f-890d-bfef23260c52\n88c5369d-fe4a-4ec1-8157-21bfdd12b315\n6662045a-9a14-41e0-b12f-1931a77760fd\n9e628cd5-7a98-4474-b480-8a4df5d1c681\n8da0f303-a848-4c14-bf2d-84e6b3eed62e\n237e0400-8912-412c-9810-92f9f9a44b7c\nbb664702-6fa2-44ff-ba75-029d665c5579\n95b5ebd1-9d2c-4372-be46-7a1f50ba51cc\n0b5b38c3-2ab8-4f02-8428-a9f0a7633f6d\n5335fd8b-66ec-481f-9c68-9f3e44a9f59a\n1205d882-62a4-4fef-af70-81446dfe6900\n77bcd744-dad7-4537-a3ad-722d41cbc9d2\n0fac87b7-d73b-4922-91bb-62e6c3120bbc\n16f5fe5c-8322-44ae-915e-3b1080c7391a\n8667e589-894e-4a51-bd2b-9cc7bacc5131\nb46c996d-085b-433c-b8cd-26ad8904c5f0\nb6bc0583-6b19-45d9-9ce7-d459383231ef\nd00c8763-3758-44ff-ab37-ae8a74733c97\ndd9f0ba1-f810-44a9-8d3d-a1e76e4cf926\n17832297-fc3c-432c-bb2a-3279e1b7726a\n9de48415-37db-43f8-a621-0cb0d8890f5b\n36e72920-4dfe-4889-840c-55b5dc2bdcfc\na6a657af-6624-4929-99dd-c16b98678a92\n79e3ea03-f33e-4456-93c5-23739416770b\n7e182516-f30b-4ed3-b50f-e3fb7939b204\n2b32f1cf-2b7b-488b-8737-03be130cf5a1\n1a3fc966-41b2-4bd1-b546-b10a9de517d9\n46363175-8458-4f21-bf6f-9d578653b5cc\nbaf40f57-89c9-4565-89a3-bf924ec2ba03\nd6a6e768-bc6a-46b4-bdcc-875bab333bc2\nac54253d-281f-414d-9f6d-c8941e725905\n7c95a135-53ee-4e83-923b-ae617dc9b588\nd94ab25e-58cf-4fb3-8867-4b4e314d07bd\n30668cd5-62eb-48ab-99f8-5868746b00db\na5393c72-e6a8-4442-8bb0-2bd86d9c1635\n517664e8-7e69-4356-8a7b-4da283161e82\nd6ab3c08-473d-40d4-8fcf-bb111748b45f\naa221d9e-d67e-4acc-a411-bcb2a0a1f8d2\n42a377cd-9717-4810-8c91-70b6c7837538\n73ba6746-ad6a-4fc2-b526-705f6d99b872\n987f4fa1-266b-4348-a313-4f689f19f06f\n088e0946-6d1a-4780-9a23-299ebde855f9\nad1fcbb0-e23f-457d-be35-b8f928f8e0a3\n77e75cd7-692c-4134-80ff-c450ecc1cdbc\n3342933c-2f36-420a-9b88-ed007f5ae3bc\n5881389f-0826-4bc3-88c6-0f98ce1b15ca\n68c1ba2c-caa1-4a98-9187-2d4e1a2ac9b3\n0ef4db05-5135-404a-8ac4-27515f1dd341\n28fdb2ea-99ad-4bb4-a15f-cbf8734d558d\naab8fceb-0411-4e51-a667-a9b2a9c556f3\nea0fc3ab-8d06-4407-9c4a-4f0e3b4b5248\n7fdf6f17-622a-403c-a389-5e48dc577565\n23d6b4c5-7495-42f4-a43b-ade53558ae6a\n665aa794-2a22-49a2-b0b3-7c47260cc9c3\nfebe0423-a828-4ab2-97f0-be0e83bf07ae\n19f9ac68-4854-4542-b125-535660f6f12a\n31aac3c8-82a7-40cc-b961-945c1bfd8ca1\neb1b3644-3ac1-48df-acbc-acac8ea4de6d\nfe889860-a8fc-4ee1-a924-a14d008ba409\na96ed55b-c911-4cca-88b2-54593aae3d96\n2900fb1e-1c62-4de3-b280-57e9b1f58e5a\ne0ce992b-f471-42fc-b607-fac49f942e4d\n73009f97-5b3c-4938-a73b-58e58c8a3e0a\n491e5581-52e1-4085-bfcb-e94bdfff1ac8\n1caf2348-3369-4a5f-9fef-ae23be44f40d\na6596686-1874-4446-b0e8-06dce99da2a9\n00f53a3a-2e98-43c6-8c44-b309d94dbc8c\n1f051820-dce7-45b2-bc05-d56ac3a7f1c9\nefc7c927-deda-4d6a-b580-8924b2f36d6c\n5a4a6f5b-7281-4e15-b832-1d826df1eecc\n89796846-7833-4fc9-bd27-61088da0fa42\n1a7f8f35-7141-4f36-9913-b24dcee0e9f1\na4363263-89b0-4f69-935f-c3fe52d46641\n8cbdebd3-d431-4f28-973e-b4df66f16e09\ne7370e87-5280-450f-8189-defaaa403144\nce6954a3-b363-484c-84b1-433ae44b1c54\n7c86c9cb-73f0-48d5-ae7a-1918387176e4\n6ac6525b-25ee-4517-8558-545f2cad3278\n999c7306-b138-4523-9dc3-3bd9472c161e\ne826f02c-f2ce-4f9f-a7a5-831d3c87379c\ne9868af9-a4c6-4596-b9e0-73f50237f304\n1f8a6773-fb73-4ae0-8b42-c9325666c725\n5f25ebe3-ee6f-4847-b56b-a2b8d9c26de6\nbec8e6fb-581e-4a9b-828e-7418d9debaa9\nf3fdc02e-9cbd-4aec-b72c-e4848ef838c2\n8ef21dab-f511-4a84-981f-d25892b0aa86\nef40378d-6a18-4a0d-915c-dbba87c21584\n868ade91-807a-4635-83ed-48ca15c39308\n052afe57-8a2c-400d-9e47-bb3847e96a6e\n7f3b5a78-e0b5-4f9f-8c98-a98c7873fbd2\nb46d5ed9-d941-4a14-9987-fc8c69ee3268\nb944d683-4596-42c7-9f97-3413ead7aef8\n79eceb8c-6731-447c-b993-d09acdadee63\n6c4e1921-c802-4f8a-a745-d6e8dc821e50\n44f568d6-c233-4abd-b9b7-317960680c46\ncab0f8c2-87ba-41b4-9d31-61fb45d59037\n1a2b6b3e-d7a7-4246-8cf0-e1fab82ac3cd\na1caeb97-bcbf-416b-b121-e6842f5439af\nc4596021-207d-455f-bfd3-94f073e8f995\n2f5385a1-dd35-44fb-bc10-1d6d6cd81830\n1c0dfc7f-78e4-4abe-98c5-9f2a25be6836\n21fdf1d9-54fc-4484-b90f-317daa55ade2\n7a5c984d-c0f6-47fa-8d02-0ed96925f58b\n2ba0841d-3b7f-4c64-93be-3242f5e1c635\n8f165243-dc12-4d99-83a6-181c54eded38\nd70ca1ef-4cd0-4204-814f-51518f44fb16\n39970fe6-c8b3-408a-b8f8-78b996a0a5e4\n949d90de-bc6e-45d8-9565-0761177720b0\na44b12cd-d9aa-41f2-819c-8af50fde66c6\nca81c07b-361f-4f67-b559-4246c32b3915\nf416e96c-9eb5-4a2b-97b1-acecbf246204\n53892194-f84d-48d4-a024-81ac33db8c29\n9f996a78-6df8-43f4-8c61-a397e19d8946\n7562443a-f0f7-4caf-aadd-efa9865ed996\nf27b79e0-6d40-4621-bb61-0829bb806090\nc069e519-47a3-4ceb-8c2b-e05a9a1adfc3\n62870d49-ae16-4189-88df-31525f6ced2c\n46c40378-f635-4dc0-b459-f774cfe1cabd\nd864b3c3-e086-4c9e-8d05-5eed4adeb96c\nfa7d6ace-6ddf-47a3-a68a-6eaedf303574\n675c5f0d-64cc-4324-8bbe-c768c5ec3230\nf5d73c81-bdec-43ab-8f36-97628a475b20\n0126cab3-7477-42cc-b40d-50ddb2bff214\nd40c353b-aada-415f-a300-182b0d3f1e8d\n515e693b-5dfe-416b-a906-c85fa44aa32a\n3a351a4b-80dd-4fcd-b069-d5544f49563b\n09cec95e-a06f-4e89-b129-b1fa472625c5\n84645deb-7d42-49ce-9899-55ec6cdeec59\nc918d2cb-94e4-494f-b6c2-9413357ee314\n4acb831f-6ea9-4272-8daf-3f4cd9e5a0dc\n3cf81e79-035f-4c78-92cc-927af2e50f41\n8f0b787b-acd5-427e-a365-b7c612c952ae\n14774d80-08a4-49f9-b5de-3b4204943c88\n923c2a47-cb62-459d-9f64-8440b83687f6\nce1dc566-ba5a-444d-b4d6-fa1aae4d48fd\n9a5e9a6f-1742-4507-aba7-3362b3f5f906\n80974e07-218d-4408-ac67-c6831f71767c\n3b1a88b3-f9fd-4c84-ac47-adffb4004475\n258be778-eb3a-4f59-9d55-25a665b630d2\ne96d2a73-56c2-4903-930b-3b6c8a1eca13\n5b323211-09b7-45c7-a7c7-1ea9809bca59\n28c3fafe-b3d1-44b7-976e-9b7382c29961\n287d37fd-92d6-4049-b35a-874934cb1d8b\n577080da-d105-4bf7-b4d7-130741bf8c0f\n0dee1754-3551-414e-9fb2-43d86d9cf4c5\nb551b5bd-e223-400d-af27-a1c4f27d6cb1\n30c803d9-7c3d-4787-8c74-2df6b73376c0\n77ec9cc0-6eaf-4564-b06a-181f659fd7e0\n2008a5d2-72bb-4570-8121-97768c137f63\na2f1c492-f82a-4981-af22-194db9a7b492\nf7637c99-f747-40e7-8ff7-03239faf8cd1\nd760b472-0f01-4b6a-88df-81378d193bbc\n2e641ea1-1b53-4edd-984e-699aab0f1f35\n87670c4d-66bc-4a6c-b6e7-2680def5bdfc\nf0ed77c2-e55f-46c6-a9b8-363a93d8fc40\n7112b4cf-7e68-4ede-8106-e790ab72cad0\n223793f8-b627-442c-ba3a-907b4cd6977c\n49dad8a3-48a3-4917-b80e-cc317ac8a91d\n7f961800-3e0d-4e07-af37-23ea5b3a3abb\n950f7f1b-baeb-4387-8b11-69949b8b0545\n5f8edc71-39fd-4d8c-aa15-b1872f5bf43e\n1ca0f455-8e46-4f81-ab19-18ef1e137067\n156ec8ac-fde0-4dab-8734-90b0b691b6ef\n861c3b9c-c08f-4fbc-a895-05d771b9537f\n8490ca05-5c21-4eeb-9d38-518996ec4b7c\n4b490221-76f3-4a67-a8fd-ad86f4bd3cfc\n262a9d3a-854c-4868-9c01-7422591a2387\nbf168cd3-5157-40bf-bdf0-1625cfaf4d9d\n7fc76be3-e149-44c2-9f1c-425e1e53bfb4\n509f65ec-90e5-4783-91a1-c1b23ceab105\nc5ed5623-3b9a-43b7-8b96-b3833275b2a2\n29b32b2a-3949-4cf8-92f9-08464b0932e2\ne8b0a39f-3869-43ab-ab73-4b2e4b0278a1\nf27493e5-a802-4ece-9501-0d5902b84501\n1a9d31f9-65e4-4c17-af26-d826a5280ff7\neda21f76-994d-4480-947d-06fc89a08d73\n816d59c9-1cac-4c21-a4f9-40f8a5c24a3a\n97ae1e03-29ad-4653-bb13-867da64fec01\n7e31150f-2564-443f-9ad5-41c8fbc2673d\n0b56ff4c-0e00-4075-9cdf-00c7a6394d8a\n6f4d69ee-c8a2-4d40-9036-c13ff7771bcb\n75575459-1a8f-4369-965d-386096591bb6\n784e7ef2-559b-4d41-8c53-0cd296ead5cf\n99131b34-25ba-4f82-9cb4-d3ca76617b81\ncacac9e9-1f1d-4260-b53e-4484f3f9bc86\nf46d50b0-c1c9-4139-83ec-ba2d10e86837\n401c6e62-ee67-40b4-8393-539eac6e255a\nd68aa1b4-2467-423b-9020-abca3ac401ac\n088b06e3-8948-47af-b6fd-c4c9cb496b9b\nb72b9b11-41c3-4a79-9903-e66739b3b12b\nedc80cb3-427a-4545-9f87-d8e0afa88a22\n9877e076-5511-4443-8432-ad72f40f619d\n63dffa12-06bb-4215-a8f5-8d0ee45db8f3\nc0b4d0f9-9128-4e93-95e3-094d923ca639\ne145ecf1-d92a-49a2-b291-72f7b9a3fa2e\n582a84e7-a6f5-4913-a277-c911a781c907\n34ebef2e-2f46-44ae-a82e-da9db156f96f\n71bab12c-f054-4bac-a187-ecc0c38bdc2b\n154435c7-2d0d-439b-9ada-f06063793b9b\n74155869-7245-435a-942e-6dd42a51adc0\n6db62c41-fb25-44a1-832f-a623555e21b2\n3cb638d2-fef1-45c9-a028-396e2498392a\n6f5a3b5e-5d5b-4664-a9aa-7126659157ac\n76e61437-348c-40ce-a324-0d4d6659ad26\n921ad29e-28d2-4b5c-9b9e-21241a400ea6\ne2c70a67-b3bf-4ca4-a2af-b4cbc2014b0a\nb3073633-6dac-46d3-8bab-6053c7f3f2bc\n90c4d252-06e4-40bf-9e33-b1f3720c74a6\nb1ebf0c4-2b08-47ab-9c97-1cee12a517f2\n74bc463d-546e-4fb8-a069-e890c4efdb53\n7518878b-71b7-48a9-b324-dd86d1fd999e\na43a507a-c4a0-4377-9f9e-697646ca7180\n2d3c5fe2-eb06-4da8-8727-0fd852cc5c00\n638b4260-b62e-4a45-aebe-853bfccafe47\n80e5362f-1040-4e1f-9f23-c18da02be30b\nbecf7b46-e192-48d8-aff4-443c0b474d6d\ndc63cef7-76ec-47dc-b21d-2350e9daebc6\n8b7a13ba-723b-47a0-a9be-eababe8175da\n0e172ff3-224c-4be7-adbe-e8501578c816\nc4e50b34-20e5-4357-b3a0-d90b68aeb4f0\n7858170a-2931-4f73-9e5c-f4f997d073bd\n162ef7de-e0c4-4b35-a85f-5b0e272e9ca8\n204be2cf-22c5-4d67-9d52-aeb010320810\n621f7b00-0059-4011-b2a3-d769cd46b7e2\n2e3d90a9-b177-4e16-bf11-a2d45843e725\n5ea6e0e3-0f4e-4158-8974-a5ed8c820c00\n6723987b-bb74-4cea-87a8-8acef394e19a\nbfa5d933-c9df-4ba7-a114-2791c6eee2a3\n0a17a012-241e-49f5-b9a8-72fec8417356\n35ac57a7-c0d9-45fc-ac41-f368bebe8c76\n4410027c-3303-4f6a-ab03-ee62db472c3b\n0943bd30-3d92-49ab-b322-b038d52ad5dd\na368671d-9665-4fe1-b03e-236c2ef37da8\nb5e8caad-e727-4f3c-950f-4488792fe455\n7c6eea35-dfa9-48cc-8ff6-1a37db968e86\nbdc28540-a41d-4d60-a29c-b13bd5e9d00f\nb136b2d0-6523-4326-bfe5-33594cc5c304\n3efefa8c-4b08-4f67-97c7-05038119183d\n44ebcc2e-141e-4f11-88fb-77b5bc121d18\n35e7eee8-c3b1-454e-8aa3-c87457af73d2\n1973948d-aee8-4d0d-9914-eb380a514368\nd8d27efa-8d26-41b4-9a60-063b65c79183\n9ababfad-68e9-40ab-9a20-4327046084cc\ndfe1f6a5-964f-4235-8da9-de8825bda2ca\na503e19e-1273-4c72-84af-f5e69ed1cd46\nc7cdccef-d629-460d-a28e-e3035e2d252a\nd8f713d7-07bf-4cfd-ba30-ffc4c85960fa\n70652276-6d3f-47dd-a33a-38063af925d2\n1fa33ce6-c34d-4485-a954-733fe85a2600\n3b9cd88e-d09d-4ca1-9ca9-49e1508599ae\nd1332d20-23d1-4679-ab69-6c7a271ec285\n25e12520-20f6-4ffe-b5ce-a15b794fb78e\n597caa2a-c7f6-4703-b66f-a4e6d0c63c08\n27507651-2c48-4e86-a53e-2ae7575d83b9\n89468806-d543-496f-af09-4f87dd63c63d\nf79ea047-5dd7-430f-b7f9-055e247108d7\n82fda023-054f-4e4a-95c2-d27952364474\n8b54c71a-1d5a-4941-b973-7cc9732b47ec\nfcfdaae0-bf73-4753-a925-23bde29c70a8\nf68bf7b6-0534-4d80-a169-45b1d432068a\n623d0e88-07e6-4132-a2b1-0597d5874615\n0b594b07-6b3e-4fac-9566-f10da6aff42d\n96f303a0-04bb-490c-a853-b8209291455e\nb765e134-9fbc-442c-ab67-548dbde52a18\n72fb9b3d-279d-4f17-878d-594712609402\ndf7a5300-9170-4957-bedf-b69d9b43df8d\n2d423c5d-29d2-4420-a482-36feb35f255c\nb54f5f49-8244-4542-b35d-4f417e2cf159\n8af1dcae-577e-40d4-a335-ccc091197b70\n7065d272-9624-4756-bb0b-ccc93ecdab42\n2c4e8ad5-32ae-4974-9d65-bb83083574ec\nb4032133-996a-47f0-bcad-916edff550d3\ne850886b-3c63-4fa8-b2ce-3d26d612ff43\n1b385f9e-f930-43a6-bbcc-fc6481db0713\nbd4452a2-4947-4dec-916d-5b559e493eb1\n16f501d3-d0b4-4423-ab7d-f737f8273989\n6ccd8dc6-5dc8-4683-9e1d-3fe0a72d6157\nab151707-ad55-47f5-a54b-1f6e64f71eb6\n110b529c-90fa-4de5-89b3-335757f031f1\nc36c64fd-2195-4150-b816-19c501a13099\nc8be62e3-d38b-48f1-ac13-9ac93beea2c2\n5a872722-5e55-4745-9875-0254dbf5678f\nbd2392ba-0020-4102-b755-819610dfc4af\ne967f0d6-52b5-4fe7-a57b-68a8fda618c5\nfa7c284c-ff15-41ff-b635-824d719fb291\n8f98c295-6454-4d41-8d36-4a1996b6c6a1\nbabed140-d5d6-47d0-af9d-58bb5bc97425\n6f0dfafa-0438-4e40-9045-0c1f9192d91b\n0303cae4-1c62-4d55-9399-c0afec06e372\n1478cd70-8893-417c-a26b-a23d8d03fa92\n03570ff4-72be-4605-bf19-99c09698d9a6\n8716b5ac-284e-42a6-b72f-05efb7a8964b\n016ed9e8-ef48-4b4f-adfa-2b64f5cb3763\nf03ffcf0-8f35-4336-b124-2ef39fa29762\n03f12771-857e-4060-bf5c-6ad58d340c7a\nf1cbe02c-0542-435e-816d-14ae30ba3d4f\n961567bb-5154-49bc-85c7-b555f12cfbee\nfd9bcdcb-a4aa-4907-a94f-7415f028a676\naed6b6a6-590b-495e-99a3-a9e693c5c79c\n93ae9468-155c-478a-ad2e-f22670223967\ncecce7ec-1166-4d3c-850c-791ab0c632e9\n65e0afe0-7798-4363-a3ff-a3659b21e949\n4c825ccd-f91b-4c59-bfcd-5c569802cf78\nb2a12261-bbdf-4ebd-a6be-896c0d9888c3\ne67c8e8b-829b-47a7-8160-00c5160c5a96\nf4868a07-4119-4d3c-afcd-6c05cdb4eefa\n0c02fa28-68c0-4ca6-9290-aaecd8faca9b\n27128842-b9f8-4c14-a54b-e80ee13cfb42\ne8501500-262c-48c4-918d-930881f6befb\nf06dd88b-1147-4468-a84f-642f470cda91\n87c22aa4-6710-4d18-b5d4-e2332954b95a\n7184f795-4f72-4c8f-8fef-4496b3304532\n8155716c-427c-4378-af2b-7ab496905cca\n254d5923-93f3-45d8-b2b3-df59438e2ceb\n8a5e4712-fbba-4117-8d32-6b8232d961f5\na1f63270-388d-4455-b043-9860b3a99b3c\n8a2ea0e7-3888-4404-8b88-6e32c80a6863\n4378a334-8b3e-48fd-ae25-45b1ccae0691\n79501a12-370d-4880-92c8-4f0a4853986e\n50fc7740-0176-4171-b64f-a389637af8f6\n8e0da51c-9dfa-41d7-b64b-ff7f9ad97a98\n84ea584a-d0bf-4779-ab6e-f5d76a6566d9\n4d2beaec-bc09-48c4-a5fe-93391f503107\nf47fe69e-6216-462f-9534-b5b0a48f26d5\n9a9431cb-7331-40ae-9d08-65cef6a510ff\n8713d7ae-e271-43d7-8ac7-945dbd7401e2\na51b85a9-db9e-40cd-aa2f-51b9eb0e0067\n753e162a-14c7-4940-bd0c-c56d5ec399bc\n48e23412-ce38-4bc9-b70b-d85cc81468da\nfd445e0e-8445-4f82-a02c-cf3f3817e86d\n15449c82-ccae-4f04-843b-5277939821e5\nce159e27-3805-49de-b824-2ea8f2202dc0\na77595f9-76b7-4325-a9a9-1c655a30194f\neb4ad201-8e50-49e0-a0dc-2c24c017006d\n9907b136-4ac6-42f8-a66f-525e0e6764b4\nc2ba9097-6800-4334-ab68-fc6aa0b8c9f0\n10697c37-3bfe-4ea7-9bd4-a1d33337b08e\n58efddd4-9f4d-497a-af06-a9eb3f0acba0\n7ebcdbc1-5e11-4ec8-93ae-ec9d5bebe625\na815bc3b-6558-4f49-9ce9-1fc9096a42cf\n8a9912f9-23dc-4dc7-be4d-0a616f63ea20\n7f59658b-a475-452d-b377-8c10657703fa\n352915f7-faa7-47b7-a8b1-e6076f2817fd\n23f5a3d7-24b9-4398-9654-751b2f38808a\n7efbfae1-139f-4ea8-99e4-e0e04c33814e\n2662936e-c092-4fc2-88af-152403b55a40\n1a2adcca-5e16-416e-9314-86df94232259\nf5c5bf3f-bdb4-4465-85b3-7f7338cf5b3d\n0eedb432-59b9-463e-a102-39f6c8b85c92\nbe3df43c-da44-407e-8a00-61e49d11b48a\n7ca3ec02-85c9-4bcd-9760-a7268b20d4ff\n4dbfa5b6-544f-427c-8a61-134c0d1a9f7e\n163e7dbb-576f-4e50-9e8e-759a56008a82\n1112f7e5-2148-40f6-b16d-ac4e56f16990\nd8c60ee6-9d6c-49d5-9ae3-338d1e1bc9fb\nf89d8b8a-73b2-4ae0-a35a-0809febbcc5c\nd01c1c91-1948-4228-b6ec-fbcc8a50c686\nc2f93a7f-2f87-4784-ba4b-c4e86cad92f7\nc651f4b3-0e43-49f9-89bc-75e2cf80bb37\n00ef443e-0bc1-4aa0-b53e-071e2d72e19b\n4b0a7a1c-0fd7-44df-a744-50e599777d63\ncdee73e7-deb3-4452-9c60-220f3eda282e\n7d1e23a8-26a3-4b18-9e4e-c1f37ba2a910\ndb598532-6c6b-45c1-ba0e-060385cbd9ae\n9069049c-f05c-4a71-bd32-b56c1ed4647d\n8b48be98-dc49-41f3-8097-c826f0016377\n21ce9145-4c81-4277-a28d-005afb12f411\n7d117b33-3acf-48b2-9ffe-832cdc8593ca\na62350a9-2f1f-4f47-bc17-a6e347071006\n852305ba-96e1-4d47-91da-5ee74648de41\n33b207ac-04a7-424b-a4ba-abd5dc410cd8\nec529ff2-c207-4bbf-a6e6-bb669dd437cb\nf0ba2d91-c3a6-4fd4-aa12-2eafcb1bf5e4\nd38e5edc-a408-40f6-a7c7-d53007a4d8d8\n3b8de3d8-0dde-411f-a48a-52b8564ddb3d\nfe167a98-bd25-4739-b860-17de26d73ed8\ndf8cacef-5539-40df-9613-38d14e1742c7\nab94323f-4b75-4a47-8e14-0d1d3b7643cc\n68be33e2-a2b3-460b-9f5d-7917f4cbd3c7\ndcfe0b41-af41-41b6-8120-3d39596b8324\n5bc0d8ec-37f3-422f-aecd-061b2cf369ea\nda88ecd0-4431-483a-9d3c-ec06d1a6b53e\nf4057e7b-549c-4ed8-afa9-46ee5dc9212c\nbc65f535-60f0-49aa-8b73-45a4096d5068\n6e46ca7d-9cac-4596-997a-2a5eb98a8c21\nf71374ba-8996-4d60-a9a7-21afcc50480d\n045b0bd1-eb2c-44b2-a3f6-47f107739394\n1ac0feb7-fd6c-49e3-ba41-e970e1d0b691\ndc4737d4-936b-4252-a0ba-2dace491e4fe\n22df1cad-9ddc-4706-a9f3-7e2504e96a45\n153183c1-da13-4f5c-b89a-eb07337971b8\n09e493c0-363d-4f84-abb9-40d97d797f63\n6f12bb4c-f07e-4b6e-9ff0-ee6f9641dbd6\n8cbffdab-cbe3-4fed-9be4-eabb1231fe08\n94917cd7-afd0-44c0-bd8b-2fab3279e11f\na59807d7-868f-4ddd-b53a-323fc3ee2757\n44eb3030-1cc3-4696-8469-96a3f4e03c1b\nd3286f91-5d9c-4656-bc8d-6155d2029d1f\n0b49efa9-6d2f-42c5-b633-865d82349900\n283d04cb-8ae5-4adb-8e1a-5aa33e828e6e\neb94f2c5-1834-4b39-865f-eb823f6de6ef\nb7aa4c1e-ef59-4385-9ee7-e4ca6d5ea241\nd400ebfe-c614-46b5-8418-01faa184ed59\n990785c9-3240-42da-9626-59fd2e5dc9bb\n01a4366d-7c4c-438b-9d90-527a5c235163\n45bd6898-429a-48a3-88bf-cb2ec2df360d\n4dc162a9-730e-4209-9d0a-fad3e73934ea\nf904115d-5e02-4c80-bd47-628ec9539a1f\n62ba6ea1-6c91-4fa1-a685-e81323d9a89b\nd9831525-d334-4a39-9763-65cc0549c4b8\n481c25b2-e56b-4d12-9bfd-ef616c230085\n4b0e5ae4-450a-4585-a34c-e408c5df03a0\nb21804ec-4f27-4b63-9b59-df8131c7ef60\n13c74e27-7215-475c-b2d4-afd4ac703333\nac8bd14e-0fe1-409f-98e2-82cce76b1fe2\n4b6cdccb-2da8-456a-a242-9807442c4df1\n9ded8b34-0381-444b-a701-977c5996888d\n03f6b4bb-dae8-4f74-8852-346e4b2f7ada\n95bd52f2-2630-47e4-9e73-9431ca0e6e00\nab900a58-fb50-4e90-beb5-d186203bf56e\n1431b6cd-2c9a-47f6-85bd-0669e653cf87\n8b689d16-1e71-4ce4-a462-d42b1f52a3fe\n1ba9e9bf-55f7-4934-9258-a353bb439168\na01318c6-8d7c-4ba6-9d67-23c716178882\n030038a7-1014-4ff2-9cf1-25210f39c206\n93e25cb2-9b6b-4bc9-a152-d76f848a808d\n624a7304-b537-4e8c-afe2-b7250bc3003c\n10dde4a3-b831-4735-b59b-68756815157b\n457cc6af-b8cc-4758-8803-4ea8c78fd59f\n1b637b86-8b4e-4974-a38b-6bc24c9f115e\n39b95d71-4423-49f4-93fb-a117d0acb98e\n5a1d7653-07f7-48f7-91d6-69b2225f8abc\n0e2b6613-6036-4502-b9dd-08c86d83056e\n48b2a5d2-9f67-4bad-9082-514ab2be84b7\nbe676db3-dcbd-426d-b2da-585b0d1f1388\n839d312a-642c-4222-9cbe-f4f5631c828c\n85eda7f7-f3bf-4903-bd41-4e875b985b77\nec2c190a-8cdf-4395-a493-48fe8654413a\n077d749f-4c01-484a-b24e-bbf7e5ba291b\ne8252d43-dea9-48cd-8288-568167235681\n8378f93a-60c0-4e0a-a7bc-6870c3ccd4d2\na61f86cc-75fe-4db0-8843-162e1cdcb834\ncb25b3a0-1ac3-4682-844f-29aca7a17ddd\n7213b132-c319-4b3d-8db5-8ba0a79859d9\ned1d0508-28a0-4513-acc4-280801a84853\n830e291d-0e5b-4958-bd63-840efdbf14bb\n3ba1e30c-b515-454d-97bf-469899df1ef3\nf5f0ae42-e789-4d32-991f-c124dde9fb3e\ne0a97f57-707c-49c3-a71d-3188cc8b3336\n5e353933-997f-46d9-b78d-cf6ab6742e03\nac43faed-0356-4f73-859f-776c91247fbe\n30225d39-d56b-493b-b8fe-85d53e3e8175\n2a946f06-5899-4f95-a80b-69e9cd99d52b\n7934e39d-bb7d-4462-b14e-bb7fc353e979\nb783f858-e08e-46ec-a20c-084c88856981\n06869cd3-0bb6-4dd2-94e7-f15c47e27845\ne111f127-2122-402f-a29a-0c8cd7819b3f\n39d255e5-0180-4c9b-b5ab-764af446e0d4\n05233534-a002-492b-9eeb-bd7d6ce71c08\ne4d180bc-6599-47b7-b1d8-38e6201998f7\n41926a5e-1d5a-40e6-9be3-2c0ef4450ca5\nc04b5913-ad21-4831-8415-b1c0789f9ca8\n2c3c4a4e-281e-400d-a68b-da635a19f6f6\n313591b0-415a-4ce9-a2ad-35c16c6f4b53\n5f27839e-1105-4dc0-8b2e-ac98c417f392\n51b301cb-1972-497c-bd62-785e666c5a48\n5f8f428f-8648-4928-9fe9-07b489b8f04d\na88bf94f-b149-4bc8-960c-df917a706c7b\nfb50bed2-3dd8-4e83-a1fc-b9641b9169f9\ndba38b14-82e1-4cc5-8b87-214cb75364e8\nb47af1b1-931d-4e7b-a68d-31e01ad45a68\n9080d2f3-b029-41b7-bdcb-8c53de97accd\ndd7c400c-d02d-41fc-ad2a-27f196db7bd2\nfc39fb46-1f32-402e-8891-9b9a6e783ed2\nd57916fa-4ca5-4df7-85ab-03743d190b9c\n715a0c68-a861-493d-af56-9e001d29a4fe\nf9781980-d72c-450e-9656-819a94f0762a\n9ad302ce-960b-40b6-9019-a4b19ff58a0b\n9d623e3a-3647-45e2-b094-af96e687ede6\nb16730e1-7b75-4da6-af22-eb553c830910\nce819eb1-740b-4e74-858f-74551eea5c7b\n284b901d-a5b9-4fbd-a99b-ea48b8230731\n65554504-bdb5-4198-b311-96743cebe2b2\nb5efd56d-785f-42ac-9ff5-15aec3593c05\n086dd991-aeb1-44c0-9793-20b085e96524\n59e2f6bc-5123-43a8-b95a-3e21ca29de26\n3053c0fb-8720-4226-8922-a66f70d3cc9a\n284b99e0-0fc5-4bd3-893b-b00395b8d5fd\n979856ae-4379-4948-8dfa-a7ecc1e59ac7\n1260de09-cbf3-4161-9e56-f709c030da7e\nf175ea45-9137-409d-8fe5-653f7964b175\n2325c6d5-283a-4fc4-90c5-b99ce07f0590\nbd63ef36-80dd-4547-be1a-a2d900d1e079\n3fbe1e6f-0933-42ed-b206-bb5a33a5ec69\n6056895a-55b5-4134-85b7-c6b6f22a6111\n7a95d33a-f1f8-46a7-8485-0a28499b16ea\ne0818eb9-7dd0-4be3-bc8f-c9b2e0188cad\ndf925d1f-5b35-4f5c-a86a-13043bc379c1\ncd4408ef-6180-4167-929e-308c9037f4fe\ndb66895c-36de-4b31-9ceb-29dee9161399\n62710361-7744-445b-9efa-aac6c0c40a9e\n599e93e7-4915-406f-9e6d-80de848f03f1\n8ee4ff5a-6332-4077-b7fc-fdba921f6ce3\ne78c0cdd-530c-474c-99eb-d392fbcbff82\nc347cb33-239b-4692-a52a-0e151b890bd9\nb7fdd2f6-cfda-46bd-bdac-b3a95130159e\n3ca0c684-15c6-4a54-b036-ac357ed1568b\n0cb647f9-5846-40b3-a9ba-156d87bbee5e\n8987044f-32ab-4cb3-b151-b31d817596af\nad637bd6-9bd9-4d2b-bf1c-6a40dc2f102e\na99a4c52-febf-4797-b1ca-6b9944f22ba0\nd7ccf585-e955-47fe-a9c0-d6d3dad46e7c\n2e0dc581-4d38-41d0-846e-fa6a2880f463\n0939e084-e370-4761-ad08-25f3be33ccd2\n7fef347e-1cfc-43b8-aaa4-0aba9661bee2\nd7980222-27e3-4591-b3b4-4868a7a5d8ec\n7bc47d2d-4cd1-4d5f-9aec-3352233875b0\nef6a2f0f-97b7-4a2b-83ae-26c2faaa742f\nf0f0873b-7d2b-4182-88fe-a46e513e102a\n6855452f-16ba-40c3-893e-97bb21e41c11\ne9c84832-597e-47b8-b400-38f295b45fae\n51b011bf-0c76-4aa7-8736-5947bb3dbfe4\n928e6f1f-b51d-4745-a29a-5583da0d0c2a\nface3ca8-8abd-4d48-b2f8-2b7ac832592d\nbe009c74-63e9-4919-b39d-ab2e5e5433bd\n9062ef28-c0b1-4c18-88f2-f01750a5e728\n2e99da42-dec9-4e2f-b39a-b04c932da4e6\n22b19d0c-941b-47d3-b0ed-a3efd45b12e8\n6ec2ef3e-05cf-49b9-9f98-68991ce366d1\n946672b1-5b3e-4954-9a4a-02ca25241b3b\nc5f23551-9e5d-4e40-9791-5a37094cc013\n40da39b2-6fdc-4d40-a099-25728c9c288f\ncbe63cbe-85a1-404e-b879-d4b8707a949e\nb021f812-1040-414e-b2ab-01325ce1ab97\n86bc833b-f61c-40a1-9e88-d44985a2e4a6\ne6d04de6-c29b-4f5d-aa3a-fd0314658450\ndbd0ac67-6b18-41ad-aaeb-3127b57aa3f7\nff0a215d-1ebf-4513-aeaa-dc70f333acb0\n87c69068-0e10-464e-9355-00d9b059b0ad\n5213a089-de81-4069-b82f-1785ce9794b3\nffb24fce-167d-406e-9004-ea0b542cb0e9\n48ce8b85-17d0-422f-8b38-885968a4c561\n5d8d5e38-3f87-4f47-bbef-451634ff6d05\n8f7a365e-b899-4aa7-966f-080b89f65606\n0002e26d-7029-4f14-a455-2e684ec38bc0\nb540df14-818f-4740-9b7d-23e2eecd5308\ncfb61f6c-91ac-41bf-819b-66820c9f6c5a\na1bcd381-65e9-4031-9616-85cdb709c7f0\nf9e77f32-bdf8-4072-8b71-69aa9b778fc2\nf162f919-f336-47ad-89ed-b401ec3f6a13\naf0cbed0-b29c-4746-8944-d9a2d444045c\na18d39b4-061e-4dca-8f6f-70ba5e7e8cc5\ne1b237b3-3298-466c-bc7e-4ed25ebe1b59\n6dc45e22-4e85-4192-b202-488b9f21d51e\n093216a8-a418-49ac-aca5-34395ce7c830\n502108c2-aac4-4fd0-98f0-7991286c9a18\n4830173f-8c87-42a0-901b-c64d99942ecb\nbee4e3c2-75b3-4a4d-b046-1402aadb2a56\nd756de01-b698-4985-be58-760f96ea1aa8\n48f1a5bc-bb10-418a-a1bf-2e72d66efa27\n6c47a88b-38ab-4129-9b17-da81222d03d1\n477dcb22-1d46-4d6b-a564-26fa106fc59f\n6ae38680-3604-47f9-ac42-d52577952347\n1a877e9b-4682-45b2-bab9-2894126ce545\n5a12646f-4e77-45ca-bab9-2d3baf3519b1\nb52bd085-5732-404e-b5d4-bfaa59e33ad2\n76ddff2b-379c-4ae4-a098-868cbe8fc8c0\n76113a6c-f3bd-4410-9d9e-a6b69e0bd19b\nfe4b3c78-3799-49a3-bdc6-84405dffeec1\n1b6f051e-25e5-4b25-bb30-9773f6f62d79\nbef136f9-d540-442b-88bd-5e3b8a7298ee\n76e99cf5-fb3b-4f4e-886f-4da78c82c96e\n76f31551-19cf-4372-9c19-5f05aea7f72b\n85d5aeff-e598-4513-a399-c81fb4cc83d3\n631d0530-5440-41f8-8cf5-10726f1b6f5f\n7294086b-4fbf-4f22-a3fb-1ce7523100a6\n84ebdb20-1c63-4eb5-89a0-c38bc0afa7fa\nf285dc0f-8c25-476d-9e8e-efe602a1410c\n882ec0fc-a010-46e0-80dc-b8e1e958b8d8\n1d7e5537-4883-4103-8dfd-9f7046ff9032\n6152974f-c08d-407f-a59b-07be8b880bf1\n799eabaa-48c3-4c69-af77-206d6061d205\n1d3531d6-7ec9-47b5-a503-5a7b09dec0da\nce123bf8-2ff3-4783-8e24-d4744eb01a8f\nd326a76d-3c81-47a7-b2b1-9d0a537d8c9b\na0169e48-080e-4524-b4e4-fa956ce38089\n089f3e8a-6205-4d3d-9f02-1f91f38597cf\n8f67d0fc-23bf-457d-ac6d-785d99a27bf9\nc6ce6b54-816b-4c3d-865e-8f6114556d14\n8402e33a-ba55-4823-b1b2-2fa49c20a888\nc4fa5acf-274e-4cc4-a8cb-04061447b98c\n0da078f3-1d2b-4f0e-84f2-122aef186cdd\n8fc1f27d-14fd-4cdb-b13e-09823969ad4d\n22099fde-a6e0-4c9d-a33d-99b35ecb87d5\n501fd740-2aee-49b8-9b91-c82f6c015dd3\n397984ee-e982-4771-923c-fadc3909905d\na8e70323-abd5-4d31-b6ba-4493c0f0ec41\nd79e6238-0357-4dc3-9fe4-089eabcb0ac3\na9a7bcf7-c05e-423b-94ab-363250da2b96\n7f95d71f-b1f2-4368-b79e-6fc29f2920f2\n8a30a313-e9ce-48f6-9ca7-09404a406f24\n2bf9bc28-d17c-4dfa-8e27-c9cf08a0f8b3\n50d5c5a4-7403-4458-938d-9675a141832d\n61fe8917-771f-46c0-99fe-f0068bdf77ab\nc943c64c-feb8-489a-976f-e080dc02f4f6\nd7e1a2a4-fc8c-4f93-8fb5-d3e471ab2649\na94494fe-012f-44e1-bb51-0d1173fa42fa\nee073ff0-8d1a-46c5-b3c6-95c559d6cdd6\n882cb4fe-33e7-4b65-a480-d2ace59b9de4\n020760aa-029f-47f9-ac84-88f95228bcdf\n348cc01e-7cc6-4741-8200-6739567d2a89\n1f05dea5-762e-4d16-abea-9b5dd89c1b8e\n6123f14b-345c-42f3-b857-e7db2497dfc0\nc957333a-abd2-4330-bb52-d8b37785d9f5\n41747777-e5c9-4b5a-a8c7-b9064d281422\naba8c57b-6b62-4d99-a355-dc8b615b7839\n4a15233d-e64f-4834-98f8-084545c2d450\nf656d046-3afe-4d13-80f4-30ad94f6a9b3\nc34b9857-bf18-4651-ace9-a1cef76a055b\n140e808f-25cf-4821-80d9-affe9cc5f6a3\ncef42ba7-b160-49af-aaa7-b15f720e2d9d\nb72eeab7-6293-42ee-8e8e-fd36091f79fe\n6ecf10e1-ff0c-4b2a-82a9-cabed432b796\nacbad1ad-b335-4ea2-8699-134cd3fe332b\n542bc9df-e5f8-48b8-91e3-884383eab175\n50e7ad08-d90b-4e78-9240-e18c92f4903c\n7325aefe-defd-47ec-91ec-ccd1da9e57fe\n4e772618-3577-4890-a503-2056c4c4d2e3\n89d3b112-5b86-4f3a-a91d-a10f7da266d3\n6c1242e9-4371-45c3-99e2-39352d06ab89\ne14893c6-d455-406d-ba78-b339b7f7a52a\nb1995330-4fcb-427c-90bd-d16fe2a34f72\n42af6e8e-ebe2-47e5-9b72-96d9e0645b7f\nbd713708-1e8b-450a-a3ae-c955c67deec5\na216efd8-18e6-4111-848e-9a948196b1cf\n89f29a6c-9c0a-4d9b-8bb7-511d8a379e33\n6bc03693-9b36-4eeb-9017-d60f981bec28\nc8a03dbc-cb32-40f6-9113-2f5f95c88c3b\n86c55921-8758-4bb3-a62f-0c3f92363553\n6888e6d1-8938-4528-b1b6-c6a9b24776e8\n2799e8d3-ba07-4959-a0df-7a99cf8f69ac\n5d4bda8c-90d7-46ee-81a2-22f82af548d1\n9061f59b-5c29-4376-9a92-20874da480d3\nc1fb6007-37f1-45cb-b9b8-eae8787412d1\nba50f53d-3114-42c3-aec1-d4cae23783a0\ne70376e0-3aa2-4fc0-92d5-c199b9f1c1c1\nf56d03a6-57fb-4b35-b824-5f4c23fa41b0\nf7a675c6-f6f3-4274-aff4-c8644faf3104\nee2eaa88-88f2-4b5b-a1f1-a262e3d92a31\n83ee8ad0-a402-41e3-85b0-08edbeaeda19\n107b1770-f6fb-4d1a-a9df-2eb664b68da3\n66f6bcf2-66bd-419f-99cb-421284e48aa1\na456482c-d643-4bd6-868d-dd78b1a439b5\na4fc0c08-9594-4991-9f0a-5f399a71e740\n6e2782c1-f7ee-4d48-aa11-8b2ac986b280\n5d13480d-dc1e-41e6-82c1-8b5b3ca6f3b6\n7f905db0-1f1f-4a7f-a382-daee756b8de1\n6c83607a-46f6-46da-aade-89c0d210f140\na94649fc-6fec-446d-be58-1010853a2773\nd2990592-d725-4e4f-b610-92c82c037088\n63a09649-62dc-44c6-9405-83db2ac6dfe8\n923f4a1f-c7e8-416a-83ee-9686b7f9551b\n3aab4876-6d34-40fa-ba75-ec56e210ccfe\ne7d7782e-a7c4-4bc7-94f1-d6a98379ee5e\na609cf05-2988-4767-9b42-c603622e084d\n03f6021d-85db-4adc-b35b-906357c3aa44\nfb6a8f7c-4daa-441a-9987-4a174a10c0b8\n6b0c5a45-7c7b-484b-b6c6-7a1e4a0ea523\n0eb7e760-a832-4bc8-b6b2-d246bd43ac9d\n327eeadb-827e-47b1-815a-463c02cb239d\n09c09ea3-ad49-408b-8c2d-e227383dde44\n8e005117-1a21-45c0-91bc-1fd9cf5a1358\na9650f55-7962-49b5-bd42-5fffba642286\n5e4ea53e-0c55-4a40-ba5b-71e85dedd4f8\nb9fe114b-9d1e-4be1-80e2-00540569a291\n866b1e89-4bb7-4df0-841d-19351d3ecb49\nd693ae15-eff2-4ff6-b261-41b353ceec8b\n5111ae71-a2d2-4313-b517-1fd7e89e0764\n0fce6c60-a996-4f1f-a34d-ff581789bc46\n183b2b7d-832d-4bc3-a8a0-4ce1dfe2fffe\n706d4b95-10ff-4fc5-88c6-9d5aa4ae35b9\nc4af2dd5-b221-470d-88d5-a3b26f27d1e5\ndfe09cfa-3fdd-4164-b6e5-163283ff7c24\n19903e85-11ba-4422-87c0-0dfa2f190074\n5ebde625-bae0-45f2-aed5-f3e2c500b4bb\ndffe69fb-4802-4a28-98cf-7ccb3a3c64eb\n84a92d70-70b6-4f56-a9c7-c00597943c0d\n4553c501-4d56-4c5f-852a-22aa2e07d0ed\n5360c555-8485-4f04-a755-1d180cbebf0f\n8caaee2d-11c3-4122-b7dd-9be8654320a0\n4097c0f2-1a97-4374-97e0-eefe9588d7ab\n031b02cf-c2e9-44d0-8361-b31076178bb0\nc0d904d6-97d9-47e9-a9df-c48bd4d8e355\n9f15a85a-10df-457d-91b7-ca06c1d17b69\nbed488e3-b76a-40d6-a35e-bd8e519ae0c7\n9cb58d0b-2f9d-4008-9199-5030c66be005\nb98c9e32-9988-4f0e-9d07-90b775e4c3b1\n3f4f71f2-54dc-4512-ae10-004591632fb6\n12fe85ef-0d41-4c35-a862-1e635c6f7f8c\n6aff9c8b-ecab-4e13-93b6-0ae04623a586\nd85da409-704d-48ac-a49c-0f1486c79729\n299d670c-a5e9-44e8-a9f8-0031368bf04e\n92ead517-89cf-4f24-bea6-933300726bcc\na100f6d1-4562-413c-9d5b-91b5214c8693\n2d03b625-5b04-4802-b219-f3acc7f70ad5\n87d7c186-97b5-46a8-a464-9078118de7c8\n82b31d65-672d-4f37-9ea8-f42a7c7ba13b\nc4b34e9a-a6b6-4500-ab45-83a7589d5220\n77d6bc9b-4a20-4f90-97c4-42ab5edd3017\na821e603-fa8f-4d3b-b29a-fec183d13442\n703c9800-6960-447f-ad89-e9f3bd929bef\n10443177-d618-4d43-8ba5-eeb5154ff04f\nf9ddb254-afcc-4063-a978-f0ce629e6de0\nc7b99004-919d-4d47-b7a6-ed97fd9a5372\n84f26c4d-a9e9-4b5f-a707-81d0f2696476\n8b821916-4e2a-4bc5-b869-a0758a75d5db\n79ea76bc-c93c-4941-baa3-a7de72434abb\n5de3e188-979c-4473-bcb9-25d3a86fdede\nea71cc11-d57c-4f6b-bf87-689fa79fecbb\nbcb08464-2951-4ba2-a0b6-c2fb142075c4\nbeb85369-94ad-4489-8c2a-ae27c9bd9dfb\ncf056ffc-5e1c-4c40-bd10-4fede27a0845\ned6e7319-dd6b-4d98-9793-df66542b3413\nff4d7cc3-2fdf-44fb-9928-8fbc75449070\ne17de0b2-6f9c-4799-afa9-169307e1290c\ncda2f22c-088b-4927-8f94-f4870b67c2f7\n27c7f7ba-c881-4db0-9e9b-8708f767956b\nc348dc1d-3f9f-47ee-93e2-72874d19b2b3\nb7e8e5a9-e5f6-459d-8d86-7d3e3e2edb56\na5ed8635-4cfd-4807-acbd-a42138f19aa1\n3fd88da3-fc55-4c19-88e3-6fcd5fbf84be\n59616769-d3da-4e86-bc35-c6d697bc0b5a\n7c9efa37-a505-438e-b4c7-1aa4a391519e\n104e10ba-4cde-400b-9018-72fefe2bc266\n5329e74c-3209-4eb1-9627-d070de5d526e\n4779274d-5407-4495-bbb5-1ecbe6808f58\n5d720670-b354-4fcd-a311-f739b1964425\n2ffe7c1d-8cf1-468d-b587-0b3aebf276e6\n7f39c78f-ac23-4a2a-ad67-319f85c18352\n4adf6c38-4e14-41ef-baec-0e646514b669\nd2c25726-103b-4de4-be32-ab3bdefda8b4\neee2294f-97ae-4004-af56-adefba1b10b0\n5a5df9ea-ac55-4af6-b2d1-34236c516440\nc253bc69-5b9c-4272-ac11-8ac966088c66\nd1d43606-a921-43e6-887f-d6cb804b0d5f\n4cc9d3a9-b6d0-4c7e-829d-e3622fc5029d\n65d1be55-6aef-40a3-841b-7fc163882dcc\n76c956a2-f171-4a84-9bda-a0bf7b230417\n38f4d545-98b9-49e7-b82d-a1600195b3eb\nf32fc177-5c5f-4a17-aa91-a9326bb85fb0\n2b1de280-7462-4c89-9c11-256671f63bc6\n3ac85ff1-7097-4070-adc0-67dc8e50613d\nf70977db-fe86-44fa-89e4-2460a1ab321f\ne2109b16-9ee0-4673-a9ba-94661eccc4fd\n58dea468-7a59-4886-bff3-7476d1a73878\ncd9b8ada-9b26-4d22-abe8-633de5332922\n39518d62-9a4a-40bb-9745-9ebe385e5cf3\n0386ded8-cabb-4308-a148-5b2a6fe4564a\n8ef29553-d526-494c-b323-f296446250de\n47b03330-0f3d-45ea-8ad5-f30443a60487\n3fd4da0c-3b97-4065-9739-52768d32507a\n29d23ce3-be58-4697-84a5-7a60169f6dd8\n0a6446e9-ba1e-4abd-97cb-002a82797bde\na7e6c31a-53c2-44b4-924a-08d203dc7086\n2cac07bc-c751-4e7e-ae40-0a97d76e9362\n8f7af0bc-8396-4fbe-a4f3-5e9f58c43787\n376e6a24-7841-4d2f-b350-4d791d67caa3\n870d0773-7744-4fc8-8328-47513ee8be8f\n266c9167-0527-48e1-8d09-48819478141b\n6199297e-753b-4c8b-99f6-678411c5afaa\n0be333c8-a66f-4dfe-8cb5-035310c7a949\n6877b4db-bcc7-4120-b5be-4a569fc6d0b7\n0297bc42-456a-476a-a834-cb2ee25a694d\n19043cbf-f2ee-4ebd-a93e-74e7aee67ae8\n607bc36b-673d-44d7-bfd7-2a6bebb50c57\nbc809ce6-d002-4ceb-a024-7f1856d496b2\n301dc7d4-0080-4b35-9e8f-d78850324218\n7fa0d23a-9b7b-4604-9672-8836f6fdccf1\nbd9ba016-f240-4d13-a935-88938522342b\nfaf461dd-a38d-4265-91c7-9104965222ac\n0264b269-ff21-466f-9e83-0b43250f2c97\nf797ce51-2def-43f9-852d-57b5ed929efb\nf9493615-8345-4580-a0f1-c1e7099b551f\n40a37e18-c48f-490a-bb34-a7d4b9198b10\nbcf76b98-66c1-409a-9f65-b97948a2e86f\ne546d2df-e7c5-43bc-8608-352622f797d4\nfca99b62-bb4e-438e-80dd-1034aa8963fb\nba6ad762-f576-4864-9f63-8cc20450014e\n942e43a0-f286-4b89-85c0-2b0bd41b0270\nacd8f25a-ce0d-43d8-9529-0cf8a0ca4bf2\nafa9db18-b12d-4445-9c31-bf826e58d190\ndea9c3dc-7950-4fea-af4d-1afc9016a176\ndf28d094-9391-4b47-9c5d-404c249a4b40\n006c1742-4094-46e8-9919-4502747079d4\ndf918b91-5249-4fa8-92fc-58a3789224d4\n00c3b219-309d-4b2c-a274-883c3d067a6a\nb2775a3a-4cb3-440c-adb3-00a2cd6d39d6\nbe4f30c7-94ee-430a-8569-03417d157380\n2e03a841-46e2-4b17-be49-4cef949515a7\n3463d0c6-22ca-4a4b-9d86-e988f2945c67\nf5729d5c-9cbe-4de5-825c-93c4b76fcc5b\n49d72c76-6f9e-4999-aff0-735fc19d0480\n0a3d484f-7d3f-43b6-82f3-7e0502cdd8f9\nc541ebd1-5a1d-4b3a-96c6-94f7ec20525f\n9c67ea5f-052a-4876-861e-5a6cd8037df5\n2fa54581-ac5e-483e-ad78-f84c65d88c48\n4f98d649-c3f1-4257-a87a-7201884dc136\nfba1a6c5-5622-4e74-969f-7f291bbc2f3f\n59d33550-f7e6-4f4f-8852-7364c4177306\naf87fa59-f7e2-4eea-9573-d9cddaca8c41\n3befe19a-d7d6-4335-a9c1-9646a5984fa1\n7c8e146d-0191-42e5-b825-39d77fb58863\nca45171c-8006-4658-842e-5b9383db82a5\nb9444118-d28a-46c1-a564-774c7daeebb1\n300e089d-66b2-49be-9c98-90f9794b1ac7\n8ad96956-9254-47b1-a2d1-563415054170\n5406ae28-8a8b-40da-b6c9-eb66052170c4\n9a432dde-ed5a-4a8c-b610-5e1349c22a28\n7a6b64c4-4998-49db-8af8-459cf6c1f419\nb59b0c02-715c-4efb-9bd7-33af3965127e\n60f3a032-94fc-4151-bf82-cfc6a2c8dcb1\nfa70a40b-d80e-47b6-914d-cb04b6d36710\ne6519b99-e6e9-4aa2-9576-3e5844e0c1d1\n4c279306-dad8-4144-a3fe-ea39d68a7fa7\n353d66b9-0837-432b-be15-749be9cd1ffb\n745332ae-5f72-4cce-88a3-3a10a13684b6\neaeccd97-40fb-404f-8a54-38d7dde4366c\nb8fe81bf-a7de-4c05-b64b-790e33d5d37f\n7265ba01-3773-4e04-83d7-ee22789374b7\n3f1ff8a2-3dfe-499d-bc92-0154db92dbd8\nad7311b8-596c-44e6-b35a-03606c1941f7\n086008e9-313e-49b4-9d57-6be05660081d\n7c221e06-eca2-45e1-8f3c-d41f36cba952\na2dd578e-1950-4ed5-8f23-a7e9317120f1\nbc5b43e5-156c-4a4e-a4d1-c9be655a6612\n9d447ce8-27fb-4cca-a145-afb969fa373d\n51fdc7bd-e91b-4870-9e38-8de8b449037f\nded31750-4bf7-48bd-9288-9ca8feb5e7e1\n13153bca-05d2-4867-b91a-bf97cd1748bb\n9d944b8b-080b-44ca-a2ce-5f1e13c9620b\nbd40ac9d-58cf-4e83-80e8-f833be7d4f0c\n74899748-acb2-4c14-884c-453b165e3cd1\nc3da3410-8c4a-472c-82ce-67e53af67bd7\n0d8750dc-3131-4121-a79f-ab5b7d793d89\nd90ab99f-b3ec-4de9-a171-07bc10b029dd\nc6c552be-6f6d-4185-83f1-bd8f074a7b02\n1b715022-0f2f-4274-b85b-d81e08b40b7f\n423b11ce-8827-4819-acb2-34fb98dc34d9\n3e8d5814-cfb6-46b1-bcad-e77f3503fb1a\na11fbe4c-0527-4118-9fa7-300e7c020b36\nde2100a2-6920-4ad8-a269-b8cde02c77e2\nfc0d927a-3f79-42ec-a133-1f4467a6d1e6\nc780c2a7-d379-4ce6-b673-b6070566da54\nbad5fffb-768b-4b55-8419-9d3ea4b9a72f\n397bf5b4-034f-4b5d-9345-8d6d71158951\n82048e92-d227-4ee3-a1ea-49c330e705f6\n820318dd-219a-42a5-967b-83fd22c78af1\n0b802d02-a554-4caf-9502-32e7e85085ed\nd367b6ac-63cb-47c6-b6cd-412d92ad641c\n51e30c35-5282-447b-af27-87cd365cdac5\n379bb80a-3f48-404b-8627-ab52163654a9\na1c16b10-151f-4eab-b474-2c8e657c6f8d\n7496926b-0835-4de5-994c-c0cbe4b0283f\n081528a9-31b8-43ff-88fb-53b3398bdd86\n84c862ad-c605-408a-a7a7-ca0257142f69\n1f0c781e-aa84-4027-bce2-304eaae95545\nf890289b-f55e-4d73-9fbe-97cd16552f15\n1adae827-0579-41ad-b471-282bf298d4f6\nddb8cb05-5164-4953-b6c8-d47afdd009c2\n9491fe41-3b26-4c47-88cc-1524eb294c75\ne8f5f2e3-4ae0-40d1-88fe-dd91ff121399\n2cd29212-84e8-4833-b636-3c3b24e22612\ne0ba8f76-3cd2-49b6-aeaf-4a45425c6ebe\n44fb90b2-7f54-4cb7-8a8a-6dde42d279a0\n8f8090d8-ffa8-44dc-bb97-8a09f1e71a28\nc0918951-6e37-4545-b522-7ba5b65128b3\n3112e294-b06c-42d7-ab83-a33d256a5d30\nbdf61489-aa58-4268-9c6a-301b06731481\n73db2431-d2a6-421c-b003-c5ed259c9a65\nabcd0c5e-401d-4163-bc79-80c83c6eab37\n1233b90a-07c5-4e8c-9a49-fd1c15a360a8\n6595f7e6-cbd6-4395-940e-db1f5327481a\ne4230645-db89-4269-9447-4c20b3e315cd\n488996c8-14e2-4c1c-b777-507096982eb0\nf31c45c7-b059-4a4f-b84c-8b4de0a69cf8\ndaff05e0-6fc9-4e75-9f06-9af2f69c8976\nac21c8fd-8767-4571-a12d-c007f6a82617\n3decd7ca-c416-4f56-bb62-577b15180fea\n792da4ea-8348-49da-a001-29455506bb40\n848a1474-c6ff-4e9c-b2f3-7a78753ef45e\n3b8c790e-5c33-4ca2-886a-53ea0607f0fe\n943cf13d-2c6c-485f-ab77-e2ce439af0ad\n1441275a-a7a6-45c1-85d7-bc132234ecda\nb0e80a97-4a88-47e5-bc6d-bc8e60d8d97a\n725dd42b-50f0-41d3-aa50-e875ca0152c2\ne26a0405-4b48-4da3-bb77-eec6f6c3f8b8\n30844d27-4858-4a5b-a5aa-f30e419cb661\nbb4b23e9-97f8-4eba-b652-0747aea434ef\nd2f53ab8-df29-4d55-aeb5-126b20ab6088\nb5b19b46-cae7-4ef7-a340-4b6899fc1bef\n52de5b3f-a1bc-433f-bf1a-57cea89453d3\n1adb41f3-7b1c-4f05-af1f-a95982f8f736\nc85188f7-3f23-4929-9367-ba36912378ed\n2159fb2d-7d5a-439e-b37f-591fe2a58c01\n1869f787-430d-4f18-918c-805e901a2d92\n7a09595b-cca9-49de-8fbc-bdb8c130d85a\ne868c721-0d72-4136-89d6-b22db610005c\n3559bb19-4d95-4b37-b8ed-12e9843f06ac\ncac727a6-a245-491c-887d-2cf8b67117f0\n53b078f0-7f6b-4a33-9720-eb9ec7dab0d3\n99671ec2-7be0-4e7b-8917-3560fe5304df\n4ffddd4d-f060-4633-9ce4-6c0ef8fa059b\nbe1abdaa-725d-4b02-bb4b-61cb991b43b4\n556eb52c-a839-4b26-bc31-a8ed2a8455f6\n3b5ef2ec-ef83-431b-80a6-f80a2f7dc32e\n13ffdc20-7d8e-49d1-a1a5-3e829d3b021d\n3e81881d-6c74-4304-8e88-66b6e15cae47\n704494b7-c581-4d3b-864b-5d9dc7fe2265\n16d49523-639f-4ac2-b1a4-2fda90f3b0e6\n34d3a0ec-3ac0-484e-b013-66942ace3d24\n85abe787-371d-483b-b0dd-b8b5a57d2732\n377a7bd2-d6c9-4134-afed-9f4ef8c7a874\n8de41968-c8c1-4c45-8982-795bc671d1e7\n99a495e9-a705-4b64-8a88-1951ba29bb19\n57a677b7-f8f3-4356-8a88-ebcd89d7664a\ndfaeccfa-8126-4320-96a7-e5400033ddfa\nc6f77291-83f0-46c2-942e-2b44b3ad599b\n560dfb07-dd00-492b-85d5-2d410785da7b\nf48f6c0f-7a38-4c2e-90e7-7661f10284a1\n6f4bcf75-767c-4a22-af24-8c9d7671591b\na8024cf8-382e-40cc-b336-bec810e7f6d5\n26efbcc9-b56b-470f-a6ed-348e94b70699\na3c97b2f-a8d8-4182-a92e-f7393035fe05\ndca001ac-a09e-4ebb-8f1d-44d3582fecb0\n4309f2c8-e067-4a8c-8814-66a438057741\nb6f93838-d3d9-4920-b2d8-c70330666d66\n8eadea8a-9912-4e55-88fe-4b92547008be\na7794eaf-cb16-4175-93e9-fb7e46530a9b\n454d60a9-cb67-4b03-a2e6-bf456960bd8d\n58905091-03a3-4ee3-a0ca-860397624412\ne32100e4-db7d-4fa6-8797-868edd7b80fd\nd9d1e436-1a03-45fb-9664-68c811fbfe5c\nef1f9bc9-b40b-4ead-912c-478dc94bbfce\n00c7f89c-c9dc-425a-8521-0ffcca61cd8e\nad946440-152f-4883-a1d4-146e13c5d06c\n612bd6c0-f285-4597-820d-2901a338edc3\ndf49622a-dafd-4082-85d0-b29497905558\n66032c18-7e48-4c94-98c4-3b0a454e557b\n65a02d8e-1cef-4941-b3a1-d595f47e50ab\n629eeefd-83d9-4ba5-8cca-bfe80f1b43fc\ne948421f-d6ec-4275-a812-fc9dee4ee396\nd39766b9-b424-409e-8b64-31f00e93bbb7\n8cbb03b9-9157-4e89-8177-f6c463e81e80\n4b0fc4a7-e0d2-42fe-9569-fcba80bda86b\n56863e64-7894-4120-bda4-82c1fbc3bee2\n75508d04-d15d-4db6-9e3f-90ebc24e7fbc\n4a013bfd-a2ca-45d2-8911-110f32655460\n5094b7cb-7628-4ea3-a4db-76464bd43610\n836b68cc-3af4-474f-8995-637a49733009\nbab4418b-d043-4f48-b71b-f1872d7f8557\n63b3940a-d176-4e64-852e-d748ebc2b6e9\nb43d8644-58bd-4767-83ef-f41eb8ccd820\n9a274483-2fe7-46da-816d-79dd9e334920\n4b3e1c39-12fe-45f2-baa7-61c2671064c7\n2f2849eb-92ba-4f98-9031-aada34f3bb2d\n83b7b180-0c7a-4d78-98cb-37ce081f4cfe\naa7a1c93-49fa-48d4-baa8-0e357fcfdcc9\n80626a10-c25a-427d-9b97-e45bbaa082f9\n2036c08d-524d-479c-9a53-29a4961eae42\n0b9f8014-cafd-4163-a02b-73c1b05a004a\n8c943a5c-1ade-47cc-b01e-18f3ed7a5381\n84f89e9b-8590-4426-b086-0c7adce0ef30\n63417c2a-4d4e-4be7-a8f3-8ec0e6b18b20\n778113c1-25cc-4702-b2da-97c29fff5eb5\n64016bb0-d4a2-47a8-813e-2c907bb1dcac\nab8e43f5-f7b6-4ee7-92cc-dcf06c7cdb31\necb4392d-7c69-4941-8e32-dabc6e1bbb1c\n02c98cea-9486-4341-9408-7405f8fa4271\n71436dcb-b4f0-4169-933a-75e0c71650b2\nae3d98c0-9506-4b3b-bb2e-686d72076e47\n9a552710-9aae-4026-82f6-0213986b79cd\n384bb2a2-6141-4b6f-b3b3-db8d705aa025\n1ea941e5-7bf4-4221-947e-ec53d0dfd5ab\nb0caeffd-79ce-47f9-8d97-9469b2528a26\ne1b1da66-375e-4b5a-b6a7-5f761dce160d\n8138a6a6-116f-4419-81f2-d13c7f03f2ba\na6a538d9-371b-4cce-98b2-6ba946482f79\nca22d6b5-1bd5-4fa7-8196-90d3d3aa595e\nc6a3c8ba-8a37-4173-aa40-ffa90dfefd2f\n13e9549a-11a5-4f89-ac3a-8ee0e7a86185\n79e40c4a-ef26-4241-b38f-f50c1935d779\n1684481f-0181-4316-b690-e58eeef8bde0\n3c5a5433-f8f8-4985-b1c9-dfc12fcc4afe\n14edd15f-8c91-4650-8de1-3d46bc8a4b2f\nb49e5a6f-f9e9-4ffc-bf30-321044248866\nbb1f56b6-5ee1-405b-8046-a2f4d6425b8b\n77fcaf44-2a24-4374-a6b6-aaa2c3959862\nebc0fea9-eb7e-44fe-8a53-fa5f0b1372f3\n7053e7c9-6430-4763-ba21-f2134512fd58\n027530aa-1e24-46cb-9db5-f1fa5634a3e7\n3da905b4-3571-49ae-8195-0a7eb459782e\n7d1397ea-ea95-4c1e-91ad-51a87a0b2b82\n45854439-943e-4b42-be8c-ed3a7fd8eea7\nfb87a47c-3798-4287-a5b6-f4fa8f2ea269\n3ea9bcd2-a650-4ca6-88f7-350b6684de77\n44056ff7-af7e-43a6-813f-0b7c43fe0996\nc8070cc1-2b59-49d2-91ce-60078c28eb1e\n32a09326-cdff-40bf-84c2-42ee7d6476ab\n6dbbfb5f-d444-4141-8d93-a22c03d150d9\necc56c1e-be0e-4fd8-b158-7d1c44ffc400\n51621a54-bb86-43df-aabc-0af54bc1e316\nb86ecc82-b8f2-4acc-8d19-221c9fe56bb7\n7a40e220-7dc4-44cc-a541-1085a4ed2a82\n9d41b6d3-d09a-4330-9d05-f3fec026a792\nd72cdcb5-131d-4b65-af99-905473bd54b0\ne7f19d9e-51c9-43b8-ae59-eeff9cb70fcf\n9b64e581-2e72-45d0-b6c5-d5d4a0183766\n603b4459-e8e9-4a7f-abc9-3159e05965f4\nb4283b4b-5b1b-4645-bc43-708044b7e957\n117a1348-0742-4f1b-9d97-ceb72ddfb807\n59dbdd89-e99b-4904-8531-1db40725d65a\n7b1c8bd8-5b4b-4a43-a5ad-ead67847e876\n30e1582a-fd34-481d-86aa-8cbcc140c7d2\n78e725b2-0960-433e-8675-6ff64694ce9a\nca54d39e-f299-4ac6-adf4-8255a657f9cd\nd78346b3-dbcf-47d7-9985-6b24c9c857b0\n35f93188-0e63-4be5-98bc-9fb72270cfed\nf6c84617-146b-4062-8474-e019dc57dbda\ne05d5717-49a1-43ee-ba0a-fd9d46523b97\n13f00c9e-926a-46f2-b72d-fe1a1b435a1f\n21e36f0f-b72b-4d31-bb99-91679ebb8996\n3f7ac68b-59c1-460d-9b2e-9d8d9cd7f74a\nfdc0a25a-63a3-4660-b797-7c2f7c932059\n2fcbb1fe-72f4-4c76-b979-5e5a5719a4e9\nb15e0237-2969-4121-8365-75fe3270a2c9\ndfde8b31-c932-4c48-8cfd-0477fb4864a3\n67d49fe7-c9b3-44b6-bc35-f734dc1c1830\nfd7ce242-4a3b-459b-a0f9-1371c5f0d22f\n46eb4404-46a5-4e93-8c75-73e542012c75\n4e250743-d964-4071-a68d-4e15f21c3344\ndb3324bf-04b9-40f9-8a22-dc45dceb06fc\nfbc8d689-5e31-4019-86f0-2e14a2e94a36\n21a4812b-d1a7-48ec-8a9f-8e3375c577ec\n041c98d0-2aeb-4952-b3e3-19d3dd9aa51d\nfe133248-7200-4f15-93e3-bca7109d35f1\n117e9f5e-4399-4672-aae8-5ee4e03b78dc\n0daf49c2-e7e4-4b76-bc2b-f51e03a9f7c1\n878bd175-4aec-4cf2-8e3c-c1c993968b95\nc4e533d6-6c1e-44ff-991a-14e24d0d6178\ne0c21017-db2b-44fe-ae34-d0e0561b2c68\n233ca967-e116-4d7d-9b72-0c33840eb0ac\nb6e27527-4694-470a-8f77-ff46fa08f9e6\ne2213607-3706-490b-931d-ba839f7e0a37\n689ccd01-aef6-4307-aab0-fb664dff42d3\n1e938084-afe2-438a-8187-c1c8a4b0ec71\n2b09ff5d-677b-4f35-abab-0a08ac995464\n75270942-de7e-44e2-b119-7fa05bd4893d\n777ccbeb-b103-4b98-aa74-865991ca3d13\nf84e5e54-4ad3-418b-a1c8-74a03b1a7d28\n99e7aa61-35a2-4e36-9528-9f76ed1ec4af\n213a3411-4767-41f1-b017-ec39061cc8e5\nb9f78671-36d3-4694-b2c3-603677b452d5\neb871201-6287-4ca0-a8be-4d96c239f5b8\nba040f16-48bb-4ae9-8ba4-acf293c16993\ne39acfab-51d4-466b-b9cf-3b542192afb6\nb296a3e4-7fe5-4afe-8864-ad4c7a8bf08c\nfa820452-b38b-4c26-a27a-5776c37018e5\n34c03219-fd67-430a-9ad4-bd1d691b3f9e\nd14f4742-941c-4dd5-983a-5ed73aac7e08\n5c61159f-f08a-428c-b6fc-7ab6c0e3ffe7\n5a378d73-03cd-4a77-b417-992bbed0d174\n82fd7cf4-9ae2-4186-971b-11f7eda960ea\n7010ad27-0562-4be6-9177-f9bbf800a589\n26042fe6-f6a1-4b0b-b85c-45e7d4714eca\n6fa7a25b-75b8-477d-88f0-38bc4e8d7b6c\nc0b2fc16-d14f-431a-8f46-3a550c37cefa\n8ac2dc88-c723-41a7-b1d7-93da5c17fdb4\nfdedb6a1-1f0a-484a-8568-a1475d1847f7\n57e9ba6f-d013-40e1-b556-111b22a671be\n3b82c0ca-0db2-4bc8-b5f7-c088859db588\n18ef9090-44c6-4925-90b5-740f1f47a4d1\n3733a437-23e4-4f2f-b82b-6ede1a7f2742\n295d5ae3-a859-402e-9900-caea78852078\nf5e00bf5-6903-45fe-bf60-5fd43e2007ea\nb73840e7-1fdb-417d-b106-f28c2f77b617\n9585298b-472e-4268-a1cc-93a80b62210b\nee5b03ea-55a4-4301-a7b2-266eff6fefa6\n90649fc3-97e7-4fd5-8963-6ed6620e2bfe\nfb4cb15e-2504-4fb9-b9b6-3edaa6798354\n0d02a1df-762a-4349-9473-06997a1a5640\ne0c79020-dae6-482a-9670-e8d8591021f5\nce5f9c41-2dd0-4b4c-9122-450841ff87cc\n35fc0617-c13a-4b57-acb5-fc66a121dc64\naabc2aa1-471c-4e41-956e-c1dfe5dd2e32\ncb80987e-c88d-42f3-a8fb-76fbd3c1ae40\ne4a0db27-c057-4d61-a730-62b23bafadeb\n49c06738-89c6-449b-a072-58eef8afe18b\n11187e98-e50b-492f-9923-e051771acf7a\n3fb6a954-231e-4c5e-985f-f86c6e11bf9a\n6cb2183d-653e-43f5-b9c7-8a698099512f\nb2439bec-624c-49c7-a56e-68fe7bfd889c\nf8919ba5-f86c-45f4-b690-1aacab314370\n8705c681-8ff0-403d-93e7-4bd138eba0b2\n1d08bd28-678f-4a7d-b736-96e9d5501a69\n9a5b1f79-3375-4f30-8920-5fafde15b77d\ne3b7c4c0-4aab-4a39-9d22-b13f254ee6a7\nf880d0ba-39cc-4898-b933-68e215e8b1f1\n7acf9f68-0024-455c-a589-6f8a2da0c880\n9d58872b-2611-4061-8fa9-fc84a00026cc\n5613d151-360f-4fac-a25f-e9e764385e1e\n2221a9d7-7a8f-47c7-afe7-9bc1eb8b92c9\n69a8a8c0-accc-45e6-8fc2-fbfc1960da5f\n0a246bcb-ac5d-4ac1-9a29-7b0fb4c90787\n4aa06d34-2039-4e77-84ed-bbe1e22a179e\n4ed3b10c-55c7-4f36-b828-d150b080fcfe\nf8e9a813-02ae-4278-b2f9-73017ea5d5d4\nf6e3c5ad-7770-4f29-99af-3b783800ead8\na4c989b3-990f-44d1-bf02-91f77b8c2960\nd4578da0-2c87-4db2-a3b4-e3c2344059f7\n76ed3781-edc5-4d52-8192-4b05e4076325\n2d90d0ff-58b5-4266-8336-1a6999edd719\n6467db74-4fe0-40fc-aacd-ab1fd8bd8269\n497fe51a-3c58-4cd1-8ed1-77f2e0e1c4a7\n4c787c30-db99-45be-b489-90113e6fac86\na80be8dc-09ff-4e4e-9d05-838e841459bd\n971c0f91-950a-408a-906a-631599f985f9\nf1ff62cf-5e5e-4e20-90cf-decfaeccd48e\n360fb646-906e-41cf-9545-e564b4b5d2be\n3a4032eb-5e24-4bba-81c4-4769f0d15adf\nfd4c9dd7-bb46-4430-be09-815ae499a0cc\nf22a649c-26a5-497e-aa63-af51db5e60a9\n6b537af4-77a2-4e45-8fa6-f88b5b61cba7\ndf703db0-9bb8-453f-a02e-8af49b122730\ncac948f4-8f0e-4362-8fb4-96ce6832635e\nc8e8b4bd-e081-4ed6-a0c7-27d6322367f7\nfa40d438-2e10-4a08-abca-a4acf674785c\n7781b0ca-29bd-4bd0-8b6b-47c3b3c13539\n6d0d961b-d5ec-4124-b18f-692cf57a448e\n0d82f5d1-399c-48ec-b0a4-b708a47b4be3\na5903b5d-35d3-4520-ae91-aaeed5b1d568\n0d8e8ab5-5fb5-47a5-a247-4d5b24a9c1d0\n09a4192e-c7bf-41ab-80b8-6dbd0eb6848c\n72247d97-6692-4566-b6dc-b22553da1535\nbe0e8df7-d55c-4168-8f15-937a0223cc19\nddc1036a-36b2-4043-b27d-901d009335f1\n0909c943-c1bd-4327-8cfd-d3c7c9c8f5ad\n249d1315-6aea-4172-9a9a-9c51fa375298\n0eb38fdd-e160-4e96-8db3-5b15e89c4605\n136d0235-80e7-4037-8c65-3ca3ff2e930c\n6299a096-d7d2-4ed6-9b11-b75f12e0e990\n3ae96d5d-a8c7-4926-b452-058d6370bf04\n3c0760c5-3c3f-49f6-997d-2c1923f80421\nc4628c8d-07f8-4cf5-bb04-e407eba3e6a9\n55c24029-9c4f-43ee-ae96-7b53104ca96b\nf514f4fc-7f49-4f38-8269-6f6f5d13c6d0\n480809ed-cb3b-4b06-8ec2-44c374c3cb13\n0d739083-b945-4437-b5fb-6229384311cc\n64f65dc5-e47b-4522-b765-9edcbcbc248a\n64f5ee28-ccae-4f75-bd8e-2445969e221c\n556010f4-2d77-40c7-9ecd-485f4c9add2b\n2c781563-399a-4b43-ac44-67bf047ce523\n49bff88e-000e-4a34-b7fe-40a7c820dba7\n78de8adb-5c85-43d1-be0b-afdbbb1e2ef0\n941a167d-7781-4880-8cc7-d1abca0926ac\nf751ed5b-8645-43d8-ba30-3f893cac9b0c\n9902aac9-4fc9-415e-af32-69a56e1b43bb\n146ef011-6356-4c9b-9e76-e201591d3518\na9a1e4da-256c-463d-a4d2-d4b3186acb72\na901befd-9fc4-469a-a5a6-c0d3495a066f\nb84b9334-ddd8-45e6-9b6e-303752d4c49f\ne2b4c548-21e8-497b-a715-aa6616575d2b\nf1f99267-16aa-4147-ae4e-ff4c61c05047\n68bef75d-0ef7-40a5-8d05-20fb092490b0\n9e7e74c8-ada0-4832-b991-047d15655451\n1eb661dd-b00c-4a45-8d79-3b575e31d219\n61fce36a-3ded-4b46-bb1c-9ac97eb98461\n201f7fd1-ff5a-4781-924d-f3d8a5866db7\n43a05964-368d-46f9-9c1e-5dda9d3681fa\n0d884206-7253-49ee-90f4-120703e01cd4\n0a3a373c-7187-4018-a5a1-5118e183d33b\n9ed49bb9-85c9-4faa-8487-ae8f4b21f586\ndc4cdf17-ce71-46c7-8f64-8d308c824e2a\n68a5a417-2c65-44b2-b59e-c607eafc0f25\n311911ae-6eb8-411e-b41c-e66af5769744\nd003c93d-0e9d-4929-a04b-803d43ba478a\n684169c3-2152-48dd-9db3-9e83ca3c02bf\nbbe273fd-33c3-4468-b46d-c313dcd22d58\n85baecee-49a4-49de-9b19-e1cbe2e384ba\n71c9061e-35e3-40e2-a994-0296ce9737e3\n8b74ee29-5c2d-4766-a007-114d0750f816\ne7795383-1eeb-482e-bb86-dbeb8a08b7f6\nbfc04811-d605-4c42-87f0-e5b0d3ff4c0c\n4402694a-2135-48ea-95dd-20d3e73d4a0a\ne495ddd6-d252-48dc-81e2-e982267b33e3\n93543720-d9f6-4eba-8afe-a92ab8e64a11\nd192cdba-cc7c-4f08-a85c-7e234cf5fee4\ne805f54b-4bd5-4a0a-8d1a-3b45d061614e\n728b4cbd-2136-408b-a185-b9b5fc6c0ff3\n21444c11-91e9-4049-ae3c-624f8f3cca7c\n5ae25cd9-3b34-42e9-8cb3-59deff3ba077\n0ffa18ec-2b01-420f-a518-76b0bf22bdbd\ne2718c89-9d43-4ccd-94bc-d51bf67e96cc\n13b990a6-d763-4d3d-8f79-65570007590a\n3dfd8f65-18d1-4418-9b98-e69b65aa55d6\nfaaef4d7-a8ca-4607-a6c1-96b1c01a7152\ne9fcfb5b-40b4-4211-b628-e555fb394c12\ndf741b51-382f-4a7a-9882-39227ff48376\n21013410-6bdc-450b-a668-dbd6e4d61f75\n95e202cf-e03a-431f-8fd6-1884163f69a5\n3174a3a5-9069-46d1-816b-cf89f1479f2d\n9ee5e02a-7ab7-4764-87a9-c8cf354b2bbd\n18e8a0b3-49f1-4a1f-a5fa-5f20d30330b7\n0e60f84c-2c84-4195-8635-5be40d71d0f9\n0a2ab7cf-fe18-4dde-9b05-517029394fdb\n046d3359-92ff-48c5-b06a-a9148084723e\n08b90619-dd40-43ec-a8dc-6f87e0cf025d\n0be7d21c-c4f8-47ed-9398-f0037214df35\n23751dba-34fe-4fd3-a580-709d6f9b3db8\nef712fc4-0700-4650-b83a-572b27dd629a\nc5b22186-fffa-4132-9291-5e22395e21e1\n6c58773a-3e66-4762-9af7-ad7db5bee17b\ne705949e-af08-41d1-a4f6-8ff2c31a7afd\n4f68225b-8998-4300-8656-66dee2ea51f1\n579cdbfe-48c9-4207-8c6e-5c72d87761e8\n272626d9-bda7-46df-b042-7ae6453fb242\n74c94844-7d5a-49a3-961e-cc7a337d17cb\n0e239004-9e72-4472-9fdd-c49d3b74d95f\n26e2cd81-e2d6-4c52-b6ee-003900e290ab\n0341de19-4b6a-45f3-a5d3-b194108a48e0\nb354dc6c-90b6-4835-af35-b4752b5694c0\n9ff90747-ea30-435a-8788-e1e9faa4774c\nc79e43e7-a546-43ed-93e5-9afcf5b00c20\naf0c31f0-1cad-4420-b20f-10bed1f8c197\n78bf7bc0-8d60-400d-8d4e-1637ccd6f8b5\n936533d7-9c21-4338-8ab3-788a5ffc4f45\nf7f7ff36-8088-4c51-aceb-f8bf953fba30\n4c48b459-76fd-4e91-b0bd-e3efd66b4c30\n28fa7a83-c78f-4613-8186-fbd38ce7f64f\nc054520f-c98f-4670-8d76-b2ca34453aa5\neafe79e4-4fcc-4406-b14e-561f1a7e3da0\n355a0ab1-e14a-4907-9ec2-99127ce5f7b0\n1ca03d20-6fd3-42fd-a9e1-b3836972ec0c\nb123324d-0bc1-40db-bfdf-04a9de2f935e\nc50eea7a-a66e-4fcd-85d9-9a3584b4a8c8\n8300f7b6-ddcc-40aa-a70c-89a03f4464cf\n95cf50fd-7cc9-4ca2-a5f4-cd6193d404ab\n896d3629-4869-4efd-bea2-7c340ba2f5c5\n28036f06-eac1-41c5-9bc7-afe031bcbbf2\na4cac7c5-8121-4c0c-a6d3-719ea74ca133\n37837acb-cc55-4636-bfce-5d22f9aa11d7\n6f9f4042-741d-494c-b890-0b2f4fb9d13c\na6a64c8a-9767-44c2-bad8-731190f8505e\n0e910b1d-2701-4218-bada-f37a0a81e9e6\n5ea34ada-d5f3-4e2e-b74e-62b8dea5b76f\n7a00422c-8806-440c-bb81-c8ad9b5147a6\nec502308-0fda-497d-8394-373f24c01047\nf49ec129-b2e5-4c3c-b2f0-73044d1ca78d\n23c238a0-d1a9-453b-b8f4-44ab7eba589b\ne2c96830-7521-472c-b006-75d30c9285c3\n34ae17e7-edb0-41e6-b337-407e18d43be6\nfe6608a8-c188-42fc-ae67-f0f39bdbd823\nac34b7eb-07e7-40e9-b448-2909e7f24d4d\na4beaef7-5afe-4ffd-a581-9a6ef8b3755b\n5a752be7-207a-4dec-a8de-a36670e7f209\n20dbc6ed-da38-42c4-8f33-475da0520f88\ne06236c4-36d1-4342-83df-ee957e84e5eb\n69d1de33-2f61-4dc3-80dd-cdceb03d18ef\n11f052b6-77af-425f-8192-a8abbd829a17\nb6065901-732c-4ecc-bde8-6c09c08d5de2\ne300c122-c9ba-4382-bc63-271f37b17082\n2a3a9f6d-94d5-4ed5-b329-78f7cbebff9f\n9c934ec8-b981-4c5d-95e8-dbdf19fb1bef\n2f3ba7b6-168a-4e90-8ecf-528b75f4b05c\n3ff317a3-b691-4325-8c32-b58071ac1183\n1b103694-272c-48e7-a0b3-a8416216afdf\n8edb0475-8be5-4282-b8bb-f4fed883d605\n5f075142-ec79-4f72-89a4-cc053dc26f05\n726d636a-c763-4eac-9cf2-f57c2fed51c5\nd3bb1700-27d3-4412-b556-9eb96538c75a\nadaeb2b5-4814-41e7-814f-8fc206d1873f\nb095a49c-256d-4cf2-8788-16ef574e762c\n79499a0f-0d31-4f79-82b9-a17819d082df\n7540a148-b8ac-4acd-b773-630d8a5eb1d0\n4df9c12a-4d08-4648-b8e1-ef6ce918ef2f\n51479c69-f1ac-42f6-8345-4c7e1f1c573c\n615af9e4-7fd5-4b9a-a224-1ccd12547da6\n8d912363-57e6-4bec-b5aa-da9de780e229\n92e8664c-4c11-4303-99f1-a6aca9f39fa6\n123e1e11-ef14-4320-b736-7f8e25c2ab0f\n5017b1bc-4824-4d51-bfcf-07530d38c4ce\n83e82ca4-9083-4159-bb39-4a5773d91227\n526b3756-bde3-4f3d-9b77-4300fa9ea741\n3d07b6a1-dd5e-43b9-850b-c76dd45a76aa\n1acdec38-c16e-4cb4-a3bb-421fe334f2a0\ne6fd43c4-4fdc-4f49-8754-42647fbd6011\nc4f0c3e6-a71b-4cbf-838a-eda5e6f41ac5\nae165532-364a-4205-94de-c2e64b191b25\n4208ae6c-dd78-48e4-82da-9c77f0782458\n6fdc2cc3-5b27-4f3b-9bd1-60bacf23728f\n12e59f9c-9c54-45a5-89c8-f717af50461d\n26c875b0-2fc1-466d-8f96-1357cd3b6826\nc5941ad4-8f79-4c06-aa07-e8b2d319cec9\n698e4a0d-0a4c-451c-afb8-c3187a6adda9\nf4e97c2c-811a-4dea-9be2-355fb4cc5cf4\n4a82cb36-1fdd-48f0-85ef-7aadf85e1c7a\nfb517480-218e-45e4-93a1-6169d4222175\nec846d1d-14ce-462d-bb06-24eca623c156\n93e7b084-6684-4878-bf22-6d4b53572e9a\nc5753a19-c8aa-496e-a809-d8179dadbe96\n354387c6-8089-497f-b00f-cfe0e1b0052a\n3eb05409-bf8f-41af-9602-0f88607f4d83\n3f919cfc-26c9-49ec-86d6-cb2e07ee7c3d\naa39bd31-43e2-4191-ad82-cc7c738ececa\ndd826829-e9a4-4854-af61-e9d4b478724c\n024a9a6e-ef80-46a0-bbb7-9d93e75e15a6\nd721f1c5-7053-4f03-a5ba-796d4c64bed9\nb3e2bf8f-0a3a-43e3-ac8d-79f1fad41143\n2cd542a6-0a02-4f98-9631-409d78ea600d\n32e6ef5d-c0b6-407b-b640-60770c0ba06c\n17008f35-c4a7-49f1-888b-727823670fcc\n9121bdc2-df5c-482a-91dd-35d28cdaa41b\nf4915856-77dd-41b4-aaab-44c8b316bb8b\n5292105e-282a-4878-b8ab-2700221c9fc4\n1ad91c13-eb39-4082-af12-b31834e62113\nd34e6914-5a84-434a-8f23-a73700f0c3f3\n787cfc86-f5fd-43c8-a8aa-26a6b21156ae\n80bd4cc3-7359-4d0c-99d8-bb04eddb8374\nb230bbc5-1f44-431c-8382-25631eaaea88\n0f2da96b-62d8-45fa-a2a5-aa057b110aca\n1e373521-9eaf-4116-84e9-689488b86fff\n41dff258-53cd-4f7e-ba0f-44d18b39169e\n4dd84ac5-070b-4a23-8100-ca72230edc26\n02d3fde6-454d-446b-8f18-2f3e807faff3\ndf31d346-1ffd-4307-8ec6-904b53c92dca\n126e132b-864b-46c7-99ed-bd15e3f679a5\n3606585c-4974-452b-a930-bda3560d90e2\nad46ba76-5a34-43dc-826b-4a8fa0d58ea0\n0434654b-e233-42a8-9310-5d764d41f702\n7e75fe74-ffcc-4bc1-9cf7-c198e5cae9cc\n588d1cfa-9e65-43f1-8b98-33a440862a8d\nea1541c1-85c6-4593-af08-f39b8e75cd19\nc6adc055-97bf-405e-b7e0-d9a81045f631\nbe644529-581e-4879-99cd-280c2ce9dc88\n68b8a243-f64c-4dda-9c66-d37d2f26df40\n2e169e82-a92b-416d-87fa-1accf85dbc30\n86ef74ab-15aa-455c-8069-e113fb584cb5\ne6a9e676-f47f-4ccf-b49b-aa2f47c61201\ne1e730a7-3e0c-49b6-9376-97bc27fc22f8\nf65b0fea-8368-4534-a09f-aa88a6feb2c6\n8ae57226-9648-481b-a167-6bdd79418410\nd7474107-73b9-43d5-bc88-cf5a6f349539\n8a9963f3-7a55-45e1-9ed4-19ccadde45da\n32faeece-03d1-4d8b-9795-f8485d8e2fdb\n11cda752-caf3-46ba-8bb7-3006542784d0\n62e83adf-0f68-4fee-9c9b-efdb4dc3e37a\n6ddcf3d5-7e4a-4d77-99a3-82f021fb8ead\n613ded78-3701-478f-a882-5d53a11b63d0\nfe9f174b-a7b3-4fee-8029-e08483308757\n5a4a4483-9092-46bc-8c46-177c92a3def1\n7f85d480-9463-4a6d-8448-f0b315859210\nd09583c4-6ac8-4055-8e0d-37e2bc1decd7\ne97fc81c-7983-41af-909b-db09a4bbcb4f\n18c3d11b-2405-4a03-9afb-938d983655b5\n78a6348b-66a0-40ea-a3fb-88df95899a5a\n360123bb-85c3-43c1-af2c-28e79d2537d1\n4d789a9d-96ab-459a-b91c-e5de0107e3ab\nda7cf570-61af-43ba-8591-18c4a6e04bab\n43768116-e9a6-418f-a0b5-59f34001a47c\nc6f8a700-44b8-473e-9e14-7c2139e266be\n0f56855e-bbad-4b3b-a7bf-58f94a923cd0\n982d3b51-5ce2-45bb-ab71-ab127d3594c3\nd8e4582f-dc6e-4cc4-b666-778f53e5d5d0\nc05efa2b-66ac-4d5f-9024-e46555f8a495\n9b1cac7c-ff1d-43e3-ac02-bb299ca45979\nb70cd188-fe4c-486c-9329-838b649f7403\n5641ea67-4c3a-47c7-8193-9eaaca06998c\nd82e93d7-9c6c-4693-99a1-a3250c24e9a7\nc9fa432b-7e28-4e08-a4be-9fcee8b1f0ef\n681e835c-e0c1-4c8f-bb11-7c8aa086e93d\na0d7cf25-5bbb-468a-b2f0-14d2b3aa642c\na35056d6-1c64-4edf-b36b-387c1fa5d504\n2836daa4-9edb-4105-8665-8897be668969\nb0b77ac4-abc2-45e5-99ac-f59d25b4b320\n5110fda3-99da-4bcf-8892-168a21d63689\nc2b1eb13-ae0d-4303-8b38-0540a19c368c\nba4a9ffc-2e84-458e-a80a-0c61cacd344e\nff9461d8-da8a-487a-b12c-ca10042298cd\n8923882f-68a8-46ad-8d9b-01e860283185\nd35bc4c9-650a-4b9b-83a5-03bd68bf662a\n3f4d1ee6-75e4-4b6b-87a8-951933221b97\n1740ded9-49e1-43d4-938c-654348b02c2d\nc73d8197-30cc-4577-a94d-350a8c802722\n3c7d6c29-2d8f-407c-9b29-4969895c8821\n6d89e8d9-147c-450a-94f6-b58e78ec53f1\n2bbd10cf-cece-487a-bd1f-1bb452e60758\nbbfc6b1a-d895-4080-8a71-4c981f5e88bd\n7d95df4c-106b-4cfc-a2db-7aff8756bce3\n785d0360-2912-4c3a-b797-cbf14de849af\ne39095d4-4c76-4a2f-94a3-35c631ac9a76\nf5e3230f-1592-4950-9e47-d9c53be8e32a\ne8b55758-b51d-4623-9d44-8f21de355c6a\nc66c51e9-0c07-4875-8110-15562084b209\n41192ed7-4638-4389-a24d-c5515bea69e5\nc1bcbb05-a378-47f4-8fd1-ded763c33297\nddd0ed23-858e-4c2c-85d3-492264d92045\nfc4288d6-594e-465f-ac68-426d415c295b\n3683b7d5-d361-4f0f-b261-6e6dba1b4b07\n39c512b6-55b1-471f-9778-c33a33e16d29\ncd68c5de-1e4a-47bb-a9f6-f9b4858fa2da\n989c9921-e729-41dd-b18e-cef44f6357ce\nb5cd3b95-bae4-4c15-a701-ffef97ca059c\na8bb276b-69af-466a-b9fd-f8fc637e4571\n2b2b9879-8f54-4145-9f02-47325915b01f\nb6de960b-1d2c-40cd-9e18-d93e39469918\n577850cf-0ad2-42ac-972c-e4fe0c034a9a\nec40ec98-94ae-4a34-86bd-87e845a77df5\n0dc7dce9-0772-4693-9346-7c9e5da0a79e\n5cc4cea5-e366-499a-9a3b-10c22bceeda2\n83fe6346-1581-45ba-b7b6-edbc411d7093\nd29dd0b6-914b-4694-8647-6af63e4adb3c\n67b51bf0-f317-4ca9-b728-464986bf4dd6\n842ea428-12ad-46de-bd37-244907b3fdbd\n9eb32d47-c8e5-4f0b-b284-97ae85953357\n86e0f7cd-baaf-4be3-a396-0e42e11d6dd0\nac523372-176d-4351-a4c3-370c4ed219a1\neffd41e1-d43e-4ee0-acf9-a22274b5e8b6\na81ad2a5-baee-4219-9249-bf06221ec446\n205739c4-3c9f-4cf9-9d1b-933e6b84b049\n128bd98b-64a7-4dcb-852f-f6ec4211278c\n5e239b7d-4377-41ba-8f56-a16a37abccde\n68f0ca76-5d4d-4d57-adb1-9444146d3332\n7b6ea9bb-9356-47b0-bc93-1c2d0f1ed6c6\nb485e1ad-02e0-4b91-a347-d04325fa36d6\n18f8dce4-8af4-4f52-b9b1-76140f72eca4\nae7231d9-e451-4240-ba37-9a225bc7fe04\n76b55822-af3a-4c50-bd7e-7dbcec6ee57b\nc8ae2399-d219-4110-94fb-cb238f105af6\n25027451-442e-4ef1-87e2-129941c40113\nec228023-164e-43ba-a7bc-85c0e6511144\nb85167d1-6da9-457a-9850-b8c6308ccc93\n0b09d6a4-9b3f-4190-aab0-6020bc489b47\n463520e0-dc80-485f-a89b-75796024a949\n1f32fce9-7a97-4460-9c11-2f22722e82b1\n2bd327e7-101e-435c-a66e-f14d02a81d7f\n59939eb4-bb93-45b2-b6fb-3293c38e718b\nbc4c04ba-14e9-4613-92fe-2ee006ac1ee2\n827df173-5b74-480d-9484-0ddffc9fbeb4\nf2ce4d37-177b-43c1-97c2-0ce75d6d95af\n8d5cfd51-fc4a-426d-bf20-a788063c598b\n887293d6-f8e4-49eb-931f-ec3be3b28765\ndf2b15a6-cf77-4dd0-98d2-1436b0ea443e\nfda684e1-66a0-4081-a522-f9dc7ad3da3b\nca03cf8b-f6f9-4a58-85d1-8a5ff21e8ca2\n5b5b240c-0b2f-40e7-88d6-a22cf4d226ae\n9f5c4502-3117-4e68-b318-27f864d24c4a\n90e39b71-8a2a-4d4b-ae1b-c1ca3f9fab6f\n352e6931-6d3b-4cfe-b607-7ce328b8a575\n706c6c85-fc52-4735-a26e-fd8695415919\n3c8c96a6-70bd-445f-8271-bd3994923c0d\n8b6989e4-d362-4fe8-ae37-b2ff2f5fc890\n9384b75a-3e51-452e-aea3-c9feb8668e84\n80342fd7-c3a2-4bb2-be33-1be3f74a601e\nfce7f125-b981-44e9-acee-c0c9dd69638a\nddeb26c3-d0e2-4bf1-8927-47fc9ab6e62e\n2a89d8b6-c29c-45a2-aee3-406ceae9c252\n0369c10f-ac14-4999-a8d5-88a827163bc2\n9ff57a44-f4aa-411d-bf15-1b80ba1343e9\ne808d06d-ef62-496e-9a80-20a5eca0f75a\n2bdd177f-7123-4e20-a508-fdaf384ed2ba\nd34f61e2-938c-4a0b-8062-3bf641126834\n7791fa6f-d971-4515-85cd-f43f0a91f31b\n3c35047e-0c5f-4a42-8fb0-aa6df40ea9b9\n26c76dc0-cec6-49cb-920c-1a65411b7784\nc4ba9733-7afe-424f-8042-d1147b802479\n82378b13-7080-45db-84c1-58c34964ebec\nb1d8bd45-e3a9-4c1b-816c-c101393d4d04\na64b6f3c-2c1b-42ab-bacf-32710f28a877\n39403e3e-9917-40de-98dd-c81e125ff6a0\ned1e3284-0791-404e-b8da-7d7c50aea271\n9d04a9b7-c188-4598-9450-6bae2648dc7b\n07a4428d-6b02-4889-a3e3-ef0141977eb2\n5bfabb4c-bd79-429b-9fa1-f7d8773d8c8a\nbf497345-27f3-47a0-99ec-217c7e949edf\nd802d610-449f-44cb-a760-299daee0b9a5\n6da13c79-21e2-4f46-a709-9afa5532bafe\ndfcf883d-1b50-4424-a91b-5f105750f2d5\n8c79014a-10f9-450d-955d-a946b1049c3f\nf86e05e0-b83b-45a8-affa-f372c8aa874b\n7ad76543-9d13-4f8f-9f31-0199f52c4429\n788f6270-cde9-4367-9173-9796f92ae0c0\nb0cf43ce-b72c-44e8-9dcf-d3fb99d201b0\ncc400ae3-1f5e-48d9-8974-3af122ff1329\n94695c02-950b-4bbb-9e5c-d613c40c322c\n08221a00-3b9a-4270-acfc-fd808cd28ac2\na9194083-0cfd-419f-b908-7416ece58a42\nc3457ea7-9ce6-41c8-a7aa-61da2da1dec0\n245acf6e-e9e9-4c13-b4e8-857fc32467bb\n0d7b8284-154c-4d04-8553-92b3565fa40f\n51a7df51-bb01-46cc-b4ea-c832acb9b50a\n1cc8977c-8af8-4bac-b6d0-6a6077f5d545\n3aa04e62-9656-41c1-977c-2a9e98792e8f\ne2d6bea3-09b1-4e1a-8a9b-86f6fd034b10\n4e8117ed-bb89-4092-b7f1-1f64f58d4729\n82aea04d-f4b8-45dc-b38e-de74b71d19e4\nc521e570-4595-4886-af3a-df39dba18855\ne6bcfbf9-f886-4002-9de9-b0dab8c670ca\n545b4aa2-e13f-4cc2-97e5-5f6bf8c2e5c4\n577544aa-8899-4a08-a7ea-c92c922bc2a6\n5ca407ae-0371-40f5-9e33-24cac3347da0\nd24aa425-1cc7-41fe-9eb8-f654a3e04210\n31425f51-9af2-46d1-b04b-2a938c21a2bf\n07e96dda-87f3-45aa-bee5-f896ce630e84\n4012bfc6-2571-4087-9dcc-2e321ec7e092\n95eb775d-24f3-464b-a1b4-3511f9856174\n8e4e22e2-7538-4545-a06f-2e3b2db88d6b\ne51be32e-dace-404c-87cb-303f0b7294d1\nd705eaa8-0452-4393-8a09-e659b1ee29c7\n6f1012e5-3918-4969-98f1-7509bc9960e4\n5febbce5-7629-4cfc-8153-8b44747fa974\n7a6b48ea-43a8-4460-ba4f-4693fe899c0b\ncbfc35c6-e3ff-4877-921c-40aa9fe433aa\ne34dc787-51ae-494f-8261-8f04f0d42ee9\nf74885c3-2b3d-48b3-b9d0-4071b593e398\n3fda5ac8-e89a-41e5-a494-dcbdbe61b5d3\n15984ab8-61e7-4ef8-a595-c5825ca59fbc\nc52c1a18-efab-40f3-a220-9d6310234dc6\nebcd0530-c47c-415b-8573-84d1ba3b6a7a\nc5a721ce-95ee-4fb6-b3c7-1ea74d70b722\n23073c0e-954b-4b03-9b7c-5846c4fa749e\nd11e4d2e-b28b-463c-803b-32ca564dfdbf\n20fc14aa-59cc-458e-99c2-6cef1dba1c96\nd6b7065f-4a5e-4288-80b8-f8d056cef693\n0112453a-c858-496c-89fd-2c24fddce79b\n75fa2f0c-d6dd-46cd-9644-839f901453b1\n430985da-f477-4d32-95d1-68ba6fdd4495\n25e03a9f-6def-4aeb-83cd-3b0491ff1eca\n2505d4da-55c6-4957-9ffa-916181398a38\n47d72da6-a51d-4188-8d83-33337680debf\n85a8a5a3-26e2-4f65-8c60-a627e7a194ca\na12380a2-d0b2-4a42-9417-c90460ade943\naa4fe278-9db8-44ed-ad1c-ef9080300f40\n77a1bd28-6b65-4670-8be0-f2dc0f94866c\na190c3d4-f6f6-45dd-8159-baead1ee3bfb\n7daa7270-8802-4979-8a44-4db96b3d759b\neeabc3de-525c-47b5-968f-5dedba4d4e08\ndd539553-9b2e-49af-92dc-be35a74e17fa\n2aadea10-63a4-43fe-85bb-3e6c55fd0827\n52bce2d3-1261-437e-b968-d4e0747e13c5\n26642eb1-6055-4fe7-997f-1096eb08114e\nea9f357e-3c64-4c98-8060-c3c6198741b2\n9c6869eb-240f-4780-9833-b3fd6bef366f\n18293fc4-0527-4035-ac42-8543a1daf43f\n04579f8b-70c2-4528-8558-9a809415ca24\n32a5ebfb-c352-4fc1-93d0-4accea00a3ba\n5c5f5837-2be3-4214-bc03-2d948d9016b5\nd55ed21c-9b60-4a5b-91df-fa8d2c4fa86d\nbf130246-3b1f-44aa-8237-82f96465e9e6\n7d6c4b55-f586-4107-b047-2ae0ccd46dae\n855d5adb-ea24-49db-a8fa-bc7b9fd2508a\n72f3994d-0756-4f54-b414-e459f999dca6\nf7462c80-7a31-4f00-be64-38dd9dec7f26\ned4fbf1f-3704-4005-84aa-6d9a1d3bfa49\nabf5fad0-cf08-4cc9-a155-733fc56c7c63\naf43ed9f-f04f-47a8-b285-8f881d3cd825\n52627568-696f-42ae-8abe-e42a93a20ef6\ne5abb85d-b744-4a12-9e4a-f0b9760fb2ba\n43201374-dfe5-4e69-9909-54e69569b44a\na738029f-154f-49c7-84c8-cf93bf33ffb6\nd4fdad19-c066-4e6b-810b-b98975abb943\ncaeaca85-77fb-467b-8c2c-ea51b33e4a6c\n6453efc0-c656-4711-8e02-af1aac9c1701\na79c495a-ff47-4b88-afe5-379d7aefb3a2\n9603b4ed-d2ab-4047-ab36-b8d2b721f813\na8fc1159-658c-44b1-8cf1-2bbc194cce52\nc097c48c-57ff-4fac-b2f5-2bb22b9f5921\n4a62079c-6aa5-41fc-a840-72659f63fa5f\n31341fa0-cf4c-47d7-9934-7daa8615fd5f\n0744cdf6-3b71-42d1-9787-5befa672c216\nddca1c44-3730-4af6-b10c-0861d5de25ff\nc322fc98-2b23-4337-8f0e-4dbf9c0eeb3c\n76871dde-dbb9-4d5b-a4c9-ad7f968a69ae\nd800d566-adde-4c22-a70f-7c5a91ef3bb7\n7504208a-3a72-44df-b337-7fa96da4ca71\n419c9010-af10-4eef-baf1-086e5be2dd72\nd73e6bcc-4c34-4dc0-aa3a-d44280b13db1\n82f87cef-f9fe-4e35-b4b7-c1482ab8a31a\n6f7b28ec-3f88-4fd0-abca-451c78a8b68e\nb949f05c-80cd-47b1-bfe7-e0f875cf6c68\n01a2b530-b94f-4f74-879d-9cbe0485ad4d\nb9620a95-9681-47b1-8a63-c60ec33f29f6\n7629f52c-044c-46e6-b09b-2f4aa4d807bf\n264eadd1-554b-46fb-a9dd-66d58095ca46\nae8afde1-e957-4614-a934-1e030155c5cf\nae3cf621-78be-4866-a275-c00731c79cdd\n0c84cb58-2d86-4859-a8e1-d96524b766f7\n65817a90-22b8-4372-80a9-870329e924ab\n9cb3548e-837e-442e-935a-0685aa17bf8c\ne4c2e8be-ce79-478f-8745-cc2dcc91103a\n17c8eb51-f57b-45fd-8769-c823a6f8bbc8\nc12ac69d-a0e1-4fb6-a8dd-e4deee88f0f2\n57dd625e-2511-4d3d-ad26-8abbd01f0784\nc9a6f44c-362a-481b-8433-7069397ab579\nc480d48b-3dc7-4723-9b0a-f4350622ed0b\nf1837555-0511-4d75-9272-53a5ba4ffdb9\n228f36dc-d11f-4a8f-b4b3-7e7548b72ecf\nc3fcc877-c6fc-4246-b100-5b5eacec9bc7\n1856fa41-cfd1-4f40-a7e3-a8a442d05bc7\ncc730670-819e-4da0-83f2-61a2ec70f014\n182bfc46-2690-47fb-b4a8-680e39635dbf\n81f2b452-342d-4629-8566-98ca9b14baf8\ne4dd82dd-08c8-4502-ad23-07a796450596\ncdacac30-2f15-4abb-a6b5-ea2e8810b6aa\n0f2fadbf-3256-4d35-b113-125bbb9b4194\nc1e756f0-6a64-4b57-bf4c-942e017e9ea6\n485d4fe5-b809-47bf-9f1d-927be031ed20\nedda5afb-c982-4e22-baec-1e1edca0bc84\nac116553-40bb-4547-ad84-9ff9356b50b1\na25a0f46-8944-4f2a-afe1-7c21d184d934\n4a498153-abac-43fe-94d0-1f5c255d911f\n2dd35fda-09ac-4644-92e0-3780d121bae4\n51e5f23f-62e0-48c2-a643-9dfaf7ef5d11\ne8dc7974-3a53-4063-bfa1-4e5b5fd60279\nf8733d82-70c9-4013-9b00-01eaaa4ec307\ne030bab1-dc66-4438-b302-a146d73d7a9f\nfc9b6d3d-513d-4722-bf4a-5ecdabd38d8d\nb3d337a6-132a-4e7e-bd49-9e1be1e8daee\n64a10084-e977-4d6f-89e4-619709b72fb8\n3966fee9-eb3d-4d16-a97b-b180ea17916c\n4a7768f8-d88e-4189-a7f0-94718a2cedb0\n8009812c-ef32-4ae1-b4a4-b28254113553\n08be0a10-a14a-45fa-81a7-3a119c2d8383\nb42300fa-20f2-421f-bf98-32b960c7e245\necc2f155-ea9e-43a9-acb0-b582da175017\n7eaab92a-1293-4e16-a930-ff3c6e0e574a\n0846cf15-336f-4cd7-91e6-a2bc6821068f\nd98e140c-98f9-41ab-8883-eb3d5c6a48d4\nf64e5651-441f-4aac-a5ff-a34c755b2b47\ncccf49cd-cbb6-4641-aaca-f84bbcb19145\naac55465-1541-4798-a4be-89433c94d3b9\ne66473f8-f7be-4417-b310-12aa8495bb8b\n8b5129ea-a919-40e5-948f-20a9bfe6b503\n4e10becc-1428-4cc9-8ec4-73ffbb6ff4d5\n2d4579e3-bb0c-4bd3-b8b2-718654e0dd89\n8c64ac29-4369-4bcb-840e-6ad3babec34b\n0f23f8f9-fc4c-4e12-aed8-fb49f6b55440\n4062ee6a-86d1-42ea-9378-fb551ab06b2f\n715b85b7-eeb6-443e-b645-c6b6d38106f3\n288ddb81-25b8-40cc-ae13-2c80bd2fddd3\nde57778f-6ed9-4cfc-98ea-1c8650f7c777\n6e96260a-601d-477d-ba2b-f51106333bc8\n019c3794-22b6-47c7-89b0-786305f6f3c2\n0822ac25-9ae5-46f0-8439-2571d4def192\n21f65e89-5767-496e-84dd-ead19a6347d3\n69e11ead-dcdc-4a78-92de-4d16657d2b1a\n3d93835e-0e70-4245-9352-b902e1a58632\n804826c1-02eb-4895-a67d-71827f002f5a\n65c97cb6-22eb-448c-aad2-ccb46899c32d\n8f3428a3-0604-4adc-9b9f-3af0bbfba33e\n06128834-3c8a-4c3f-84a8-c0b0e34f404e\n0bfed603-20ad-4899-b775-840c520977d2\ne67782aa-8493-45c1-9131-14ffef9be84a\n63f584b8-90bb-47bd-81a9-53a29b02d800\n6643dc0e-3381-4fed-bf0c-a7c3a8b5c235\n43ac9b96-9969-42d9-824f-52e12c5296e8\n638f6e6e-b613-4f4b-bc3f-c32770a925f8\n59551738-9c36-4139-bc7f-ccc38017041c\ne4adadf3-b976-494f-af8f-846e4fe5f503\n3ca5a37c-fb38-44b1-a1cf-5649f88c9d2d\n0b816b5c-dc9b-4347-8515-5b0769a615ee\n280cac4a-b5de-49bd-bf2a-69281ac270b3\n4aa455fd-fa98-4634-abfe-879830943a00\nf59207fe-87b4-4fbf-9b59-5b613b9dffb3\n9a3e887c-6739-4213-8975-f9ca3883280c\na782a579-ada6-4661-a6fd-2821a7364bd9\n294fca95-addb-45e5-a8ab-be4f612d8294\n218188f0-17cd-46bd-bc7c-a5352540d550\ndf663c15-e78e-44aa-9a18-f5f3faada08f\n2b7107d5-df57-47f5-8dce-2e1235a13619\nddabbf94-7919-4265-b1d0-2e061ae329c0\n36d70eee-73ed-452e-b271-2cb49b437a81\ne0e89f57-303b-438b-a67c-cfda94466358\n6da13471-bd78-4c48-861b-b6e76e833df2\n8cf6c59e-17cf-4dde-bf28-e90711fa98d3\n8f6025ee-a804-4309-be9c-34b7f8533c04\n4428a0ce-d858-4b30-9f18-8174e18e39f1\n4a7322d1-5480-4ab8-83e5-bdc159841a7b\nb5069732-c474-466b-a745-20ea9f76366d\n4ec6a708-bbd2-49b6-b4db-f5c6a8d481e5\nb5d8bb86-1565-478e-859e-b81dbd869bf3\n189408c9-718b-4a2d-9287-cbf019ed6eda\nf49a56bf-0cbb-4088-87ec-3ac1192be54c\n03e6d737-239d-4f70-9f92-d1a1a6c295af\nca4e7906-6a47-48c3-a3ed-95c8dd2ca704\nbf785b37-06aa-4d59-8747-623cbb3efe82\ncc0c5564-a218-4694-9b4e-fe6f56350036\n2b7da022-e6a5-4476-b35d-fb2a894f6981\n993a09c6-e3e1-4b7a-b5fa-2730b262209f\n1d8283e4-204f-4d39-85fc-3e4ba6d1d71f\n470febfb-b3e5-4686-82b9-e278eb38b527\n1a434f98-74e6-453f-bf54-d0a7a19d51f4\n285ea28f-11e8-4dab-9f1f-dd1c340c8982\n60135e3b-de7f-4de3-b6e7-f588b5b267b8\n56fc786e-65fe-4ee1-9d00-2e7600e989bf\nbf5446c0-2080-4233-afe8-6e33381529f1\n5f2127d2-f10a-4cb5-97db-ab690dab4dc4\nd603629b-c842-4a73-bf36-09cb70583c93\nc89b7aaf-31cd-4f22-b071-ed2f3112ccf7\nac73de85-f048-4b70-9060-47483f70c2be\na8343610-0c21-41dc-9fb6-88a0149cbcf7\n23d6b782-1da1-49ba-a4d4-dd276203b6d2\n27d90e0d-7557-437b-8150-c0b2a2347e47\n2de779b4-715d-40d6-8672-af3c923fbcce\n3123ba64-f6ec-4453-be52-6cf200b4d632\nc8d29cb3-3658-42f2-98d3-49c6c9cd2a69\n09a0b221-eceb-4476-8962-1ecfd4e6d23e\nae784958-f9cc-4117-aa4e-b2454612dcec\n6e9d98cb-f515-4ec6-9c2a-f6a32ef147d8\n575a4113-d163-494e-8f39-a4322bb4de76\n5bf1ac45-a908-4488-87e8-458d73597dcf\n63b24b11-6695-41db-a4d9-96b2275a1605\n99d40997-59c2-45de-bd7d-784a82a88349\n212cddbd-bd2e-4945-b227-25a45489df4d\n8e18b4a0-5def-4ffe-bcfb-360f9053620c\n8ce2f869-23d0-44f9-91f7-7cadeb715426\n46e5ffdc-bff1-489a-899f-480c68e175d4\n8984ea3d-1d6b-4a54-b40f-5b3c6b4cea45\n9e953a49-5cfa-4a7b-a42c-072d8dd84a28\nbdd73e0c-f2c4-4e3f-a1c3-507b98cca42b\n02c38fe3-2c55-4add-b6c9-051bdc20c561\n0b6595bc-8aae-4958-87f7-4fbff2588abf\neb50a39a-8440-4435-86a9-3f198b547a3d\nc35c7c39-1dbb-4d15-bdb3-a26b6f5d355c\n02532e4b-d7ad-4d49-beda-638fe657e159\n788a5231-2506-4c81-bcfa-7735d9aa2780\nd6d5a612-6373-413c-b48b-ca8afc95e8c3\nd801549f-1259-41ea-ac43-7afa65bb1303\n07182f94-b6b9-4771-a805-386bb92c7fda\nef28cbc4-7afa-4711-9686-b7d845b5b34b\n630b289d-9415-4f64-827d-f3dea9a56dc8\n364426f1-8424-49ec-abbe-01eb63eb687d\naafc30ac-bc6c-4a81-acd8-b0af07be2fa9\n50e42ae0-452c-4dd0-81b8-cba3ea844c89\nb59d179c-db26-4fc7-9fec-8bcf6f0d01f0\n95be1c9f-f35c-459f-a7fd-df5b594924c1\n59727421-684a-4442-a655-ecacc06950bf\n3173a528-6285-4ff0-8129-51a7b1e416dd\n4bb75555-7df8-4acf-b6ef-1163bd3324ab\n05971cb7-2258-49f1-af32-8444ec4acad2\nc9a9568c-66d6-40fb-872a-b278074fc315\n54b177e9-4cf4-4a7e-8aab-85abe297d8d0\n1e1c0607-5a79-4215-832d-b2363bd3c9d3\n3f09197b-7f4b-4bca-bed6-1c596653b9a5\nc3274dc1-ade6-4be6-8f05-31a2408099f7\n0e48ea8a-40e8-4db8-9b29-20289b549161\n63c82e16-c714-456b-8e45-ac64ad86b9db\na5bcbf25-5e7b-4c28-9557-6c91446fda08\n6fe987e9-73fa-478f-a212-74dac68de9a9\n21f2b09d-f765-453e-a14a-fdff8b5b3950\n0ed63a85-97cb-4c24-9505-3bc9f83b303c\n8c405333-5084-41e9-8ded-803307dc6225\nf3c84e2f-0001-4f23-a284-64ef2fc50605\n67767b89-0994-4313-845d-5e4d0cb4f98a\nd3370e67-550f-42c2-b631-f88ed99488f7\n93dd991c-ab0d-42ec-b33c-44c931a115da\n87bcf585-3a89-4817-9bb9-cdf5f76d4866\n36d5a050-ad03-44ae-954d-5a2052528ee5\nc133fa2a-fb81-43e4-92e3-7d36ce6e5d3a\nbe7667d1-865d-465e-b77d-031c0de95fc2\ne8677298-50a9-402d-9072-b755c48137fe\nb7ef393a-65db-4273-afd9-c70241f781f9\ne0bb4a89-2582-412f-9df8-14893ae07cf8\na02acb8a-5ae9-4986-aace-f22b16e4669e\n6b9f9e90-e8f5-4b13-a8fe-8f91aed1b50b\nb1775adf-f6fa-4516-89e8-114259776db6\ne7cca143-656a-4bd0-8613-8d006dd1f149\nb3cafeb2-8fb4-47cb-bb4a-b2dfeb99cada\n26aa3a07-5bcf-43b8-a64c-1e9af886e442\n14e5adde-7d34-4288-9193-1e131e7ab79d\nadd9e06c-dff4-48c7-9abb-e5baf8760425\n1579eb76-026f-4abc-944a-516abec361b6\n2347cf97-cc4c-438e-85ef-cda5a803a922\n853e008a-88c9-4dc5-9468-8e5da4e4c912\n9a939114-3874-4252-ad05-63de74d17910\n04b86125-9b64-4edf-b734-5547b581b27d\n56c759e9-9107-4432-88aa-11a16b91141b\nb2638a99-b106-40ab-bf6b-800939ba94da\n79f62a3d-9fa4-43b9-bf8d-29b299a28ae3\nfadd56a4-f55d-4fb8-b8ba-a6b4762bdb39\n08d01ce5-cfe1-4d85-855b-93395d6a4b91\n8329177f-d962-4d35-83ac-7d94c9350000\nbced702f-44fb-4209-9f8c-e91edfcef98b\ne08fe11a-9338-489f-894d-781d7c1ad2e4\na5f3ca66-c374-4b7c-b1a9-97838fa5d60b\n49ec421c-7779-470d-a715-8368460b37c8\n3fc94ac6-1206-4919-a328-411b538b6da9\na6126baf-9e7b-473c-9642-b59cd6f29067\nf72efd48-f14c-4d23-ac0b-1c10dca181e7\nbb284156-dfc0-411b-a5f4-9f6e48b9a986\n84a17326-7574-4586-a813-14996bdc1ace\n25bfc743-6e36-4fe1-bf0d-e7a08c39a348\n3693b07c-195b-47d8-89c6-059c30db2123\nf70226dd-6a13-43d1-824d-dec325566a93\n60620eda-68ad-4bd9-8708-ad860c38a884\n18a6f3c4-4818-4918-9d17-34202d51e489\n37caf06a-c982-4fce-be96-11e65990f9fd\ndefaf18e-ebd0-4711-9fe3-a7a582669493\nf7183dd3-a618-4e59-853c-d585515ebe0a\nd88327eb-5d58-4be4-b152-10a93bad6216\nceabc911-a90b-4678-b5c9-9643e8d48016\ne426ee5e-85ca-4834-90e8-58aeb044051b\n663b06c7-f473-4dc4-b982-a3db4a966c03\n2b60d3a5-ff21-42c7-b1e0-7fc4b1a0a518\ne5ab67be-737e-4a34-a2c1-fc3451c18361\n40ab0b6a-25c0-4399-9c68-dbdd499c8a25\n49a2525e-45e2-431a-a6ff-6d3fb8a93099\nc7ce3f4e-f66a-43a3-b0b4-a89c304d1e1a\ndc6e3933-a42e-4042-94d6-2f8c657dc948\nff9ca3f1-ecc1-46c6-8807-8999d77b30da\nba81965f-e5fc-4285-8424-0be8bbf4cf05\n3d4ba0d2-d238-44a4-b418-8d3f4d2d954b\n740aff77-035c-4fd4-bfa0-ff3ad85defd4\n94ac393e-e2a8-4064-a4fc-05db0eb67f1f\n21ea52ba-a366-4902-88e9-893b9a73e4d3\n790c9f95-eca1-4128-9e93-b1aaadaab666\nf5b2a280-4f94-450f-bdd6-40926c928d84\n855a1a84-f3b2-4142-a12b-587513db1fa9\nde8e289f-7d3c-4ee5-84ab-44e65a13d221\n7e8302e1-f4b8-42d8-8614-09dedbb817f2\ne3d4c6ac-d7c0-4fb6-8030-b57aabca289c\nb516ffff-6ef8-48d8-8812-831a7d5e9b96\n23a66323-f0cc-4ea2-91ea-47a7be201f49\nd2848715-aa06-41a8-8d0d-95e63332456a\nd25ebd17-097c-44bf-aa0f-99c165d6ee57\ndfd35574-7dbb-4d80-9ab0-e55e71fd20be\n09384087-be0f-4a4e-997d-435efe20a0e8\ncb243e11-e5a9-4dbb-9a79-897cabde6d11\nf803d08f-5b9f-47ed-8f87-c700683e3996\nf45bab50-0bdc-4a12-9f00-c82370915242\n2524390f-70d3-4792-ae2e-a57d5ae84274\nc2502af8-811e-408b-ba4c-05117d32da92\nc5dba8d0-b0aa-49b5-be80-249a58a8cbd5\n849cfdea-1c5a-4262-83fb-f3d8a7432535\n8a96a75b-2685-4672-8e69-be4ed3c89904\n16e9e7c3-c9b3-45d2-bb73-788e86db121c\na9a6f155-a572-4cfa-8b21-a156f0791fe9\n64f52cd9-b60c-4c1d-b996-b2669acd41be\nb8ea95bd-50b3-42c1-a60e-57f7c1c9b258\n4ca9176a-bcb6-4d22-9f09-0729544db944\n043597d1-5701-43a5-8f3d-6c6c76884b86\nf7a81778-cc41-48b2-ac95-e2f7cfd4f72f\nb8a66c99-97e2-466c-87e4-fb7689ba50c0\n74806933-cb78-430c-93aa-d1bc885acc2a\nda5b1064-9660-4b6f-9640-09bc2fdfa25a\n615c2b81-68d0-4a88-a3c9-ad8518b6f666\n8f9229aa-1aab-477f-b619-7fe1bb9a50e3\n9ef5663d-13c3-45fb-bee2-87e24a3d8f6a\nd90c4131-c0e5-47ae-9ccd-a4649f5c03ac\n6a332161-8940-4df3-866b-eacece096dce\nf316445e-7231-4994-9f9f-501f0339b07f\nd81124aa-2cea-482c-9f5d-b3ca7948b5b4\ne9954144-168f-4a88-8586-b6033eb0e023\n27edbdea-68fe-4515-aadb-36789747f488\neb4b4770-a25e-4adc-8603-68383059c68d\nb5633169-21e4-430d-9524-57affc29296b\nb53c6dbd-e92b-4679-816f-67d3b2e73dda\n575909a1-e91c-40b7-b0f5-9aa1f886abf4\nc9f86861-55ba-4340-b738-9fbab2c73a50\n49239ae4-39bb-486d-b7a6-08c1c20176f6\n46baf3b2-39d2-4ee3-866b-cb1b3e510084\nb4d7c4b8-2d49-43ae-92b7-630161cd992d\n1a5cd287-c366-49c4-953c-85a789eb08a2\na62513a3-dcbb-4539-8860-8faf974662e3\n087de8d2-0d6a-4e88-9a1d-8bfa8f4f402d\n404cdc15-8a6f-4ae2-bb63-d6f073bfd8e3\n6b71bf57-5b53-4652-80e6-329add12e25b\n0e201ecf-5ce2-4deb-b58c-f6db0f240dab\n774b143f-9854-435b-9250-a9b5a3ac52d8\n8d5bbd30-5f92-4b5b-8a5a-b096de18a22c\n0426b074-ae5d-4ce8-b18b-b5e1891e3f5e\n35036089-04c4-4794-b821-395f2110560c\n42947ea1-3daf-4418-b3ae-4358a8989ba7\nc42843ee-863b-4619-8425-4db776c51092\n9087993f-8fa4-485c-a58e-e1c182e1e1e6\nfa917696-78ae-414b-85e2-95a1b1571815\ndfeb6d23-567d-477e-9536-b0741234c8d7\nd68ad27d-e0b7-4d81-8301-d921a2405b71\n0a518ff2-a711-4f23-9003-19315ef4995c\n94863049-b4ac-4c9d-b6fc-ccc30ff24628\n185943b0-8228-40a7-9de3-1c4ec8ec7d79\na49734b9-dc8c-4975-8122-f248b30aed0a\nc1fe5b6e-8112-4b13-b6fa-adb7eaa6602c\n6d59626c-f4ff-4ed1-8f7e-46f4ff0792fb\nf9e9f3a2-cfe0-432c-bcdb-3860d2dead33\nf215ce8d-d009-4230-9d21-a998026e74b3\n5d587e01-2827-4d68-8bae-3cce39c6f28a\n74f3b9ad-66d7-4065-bba6-2fc1ad49cd1a\nb0455a8c-adda-40d4-bd80-a246fe8d94a1\na2f7490a-8eea-47ba-8f81-8b47a28138fa\na8b73667-83ee-4263-8673-a7878b953c87\n42929f2e-3fa3-445c-9c7e-9b0ab44c4d2c\nbd675ca5-3734-406b-a77f-83db12cc0056\nbc233a34-59bb-4663-8b28-4914481688ea\n56895d9d-857c-43b6-9207-62e4fe6e74c5\na1d5987d-6379-4270-923d-a9a1e2e603d5\n8e6f374a-c3ed-4ba0-84b2-b209ef0c4299\n48b792dc-5474-412a-a59f-1c98757b37e2\n2a7f6a8c-4c36-4e83-9a72-ee47fb207daa\nc94f323b-5969-4cd8-b850-f79ef45690d3\n586381b5-cffa-418b-957e-8a79b3b236cc\n843ad55d-80c5-4206-b9be-5a9162ef80d7\n971db233-8bb8-4296-a734-a32de3e72e68\n684ca5ac-9943-4954-80fe-7a2673cf01fc\n9e6a396d-20b6-452d-8335-1e52c31870e2\n60b6ebc1-0f82-4e9e-87ea-fd59c2f6793a\ndf7de12c-16a8-47ec-bc09-ea62f6090f01\n4f78944c-63e1-4999-be81-3920bf2fb9f3\n5f686284-fe23-4773-99e0-8f93eb400715\n3b4207bc-9b38-475a-ae17-450f66c37c4b\n55cf0d3f-9e67-49dd-bf29-84535a349fc6\n68576a93-6da5-4d71-a6af-50ae9e7204db\n5e5105a2-e249-43b4-a2c9-371d0edf24be\naf6e7099-7aec-4100-8ea6-94e258acccc0\n1e3d2f74-af41-4e43-93df-9193ad660c6e\n33079959-1598-471e-b21d-be8dfd7d1522\nb5431846-da0e-442b-b432-7ba16b624832\n356f4102-9804-481e-a906-521095d52633\n5c6d2fc4-6a4d-42e3-9dd2-4b108be6b91d\n44598fed-7002-4e27-87d9-48625b51a757\n835f6a88-0d7c-4a60-aa64-6be6e71721bb\nf4f116d7-082f-4cf6-a7ae-965080f9321c\nc675406d-033f-47df-af68-ff11733081b0\n25f3f7fe-82c4-4c25-8f36-49d536a087e9\n766d2f4e-91eb-46b3-8c0a-239298d925cf\n8b99d627-9d65-4cb7-a45d-c07bc600fcc0\n26266251-5a39-4928-92ce-34a2b77d0193\n1f41787c-03d6-43e1-9782-02c1ad0fa83a\n296c5b13-39e3-48dc-805a-e72007481068\n365b51f3-ffaa-4ea1-bb27-d2f601c53633\n4fd760db-3680-4e3f-9f1b-16412b7a27e1\na1b9c31d-8326-4543-9b71-2c1f90d87214\n9079c096-9337-4509-b762-554c02a5adfc\n81abf727-6adf-40fa-805c-d3a0e95e58e4\n6aa6a1b3-a50c-4b70-b3f4-b8abc9a35587\n6fe5c8aa-84b5-4008-9886-f52307f88b4c\nd78828c2-7a68-4c9b-9412-f155077a22a3\n299332cd-4d8d-4494-a5d9-09df3972b9b1\n6fa7b2a3-79b8-4fff-a9ab-6b3214d9971e\n11f709fe-effa-4778-9d97-b828d69a9519\n52e89364-82d4-4aa7-a5d3-1a9755a348eb\nd217aafe-558d-4a48-876e-574d04408812\nfb9a406c-f7b6-4c12-a6f9-8a75c7ce9e78\n05f9259b-32f5-4a31-9ba2-c597a511c818\n17d62354-b571-4de6-9583-ca87e799881d\nba05bbfd-5818-49f9-a568-cf9884f734be\n23b976f9-d4d9-457a-a840-1a50150dd85d\n4231de9a-87cf-4b84-833f-ea5e91606be3\n26e51025-af43-404c-afdf-39685fe89320\n904a1f4d-3890-4f13-82c8-251fa64aee56\ned867105-1d2f-4dfa-bcf4-11d47efb84b7\nf57830c5-92b6-4271-8848-fd6c1a4c1368\n4caa4cd9-fa1d-4d52-b7a3-42d30c3d9c7c\ne432a904-a46d-43ac-a7f7-952b14310ac6\nbf7765b7-b51b-4148-9a9b-34dda6c06871\nfc96c87a-45f2-48aa-8057-d7c66fe8023a\n209fc71a-a523-4e7d-8a86-641488dd55b3\n744dca59-2ce7-4b2a-9806-3d54818484a8\n70d5d1b4-9c69-48af-a705-2e6f42ae5b47\n6f44192c-184b-45f4-8cc6-e452146bc14d\n258b824f-b9f3-4bd5-84db-d990924fb138\ne3c2eac1-45e6-48bc-af7a-ef1344438a94\n2024ac92-485e-410d-8683-30897375f371\n5a6b2005-24c8-4fd7-a793-c3d5b8478ee0\n90073859-e7ae-474e-8337-fb9439abee85\n541b1ac4-adcc-449c-baec-e535703ac00a\n91c591b2-91ef-4c93-8b97-6ee87fa549b6\n39c3ba35-f306-4d61-8f46-4b10c5095636\n35156511-c286-4a01-b7f7-541fc2015700\ncbdf40c5-b8d2-4fed-aac2-a76477934e93\n3a723fb7-dca0-44b0-97e0-ec13c6eafeb6\n8d639a08-7532-4152-88ec-2eec102a0880\nc494245d-a51a-4241-a8d5-50f38bceb4e7\n294b9d3b-1889-437a-a9e8-12cb2647327e\n643db04e-64ac-47ad-aff9-0d0b9705ad6b\n16d512c4-bc61-4b24-9e6a-61ee9f9dfafb\n739128fb-23c7-4c5a-92ad-206ba75376bf\nd7eabe5c-dc1d-439d-b95c-3b2397537883\ndef4de51-1ef1-4afc-b301-61deef6dcb7c\n78599d14-6b02-4196-b636-553d990e60db\ne86929e2-d20c-4c1b-a6e5-7288f1b0d415\n2092b5d5-f9d1-48a7-b0ae-83ad4b437043\na21cfe85-4e00-4952-b95b-ba4b882a3793\n185240a8-bdff-49ca-a901-85189db8530b\n1e21e377-bfed-49b8-9f6f-089f23e40256\n0a4781eb-caa1-4e67-a724-650bf3e167a9\n808b8383-cba6-4266-90d0-cdba911c1b6c\n3d525f90-5513-46ab-8629-d7a0c11511cd\nb7756685-0e69-4b92-ad2d-b176e8b6cf1e\nbb6c2ecf-a531-4fca-bd0a-aff1cfa404b4\n5925ec30-c2a2-484f-8032-d9359874f2ef\n5bc4114b-e654-414e-b93d-ba73eecf9e48\nee9e78c0-3dc7-40a9-be16-5a0637c23c1a\n183e2f4d-4791-4042-a4a1-16a943de7095\na9cad702-fcaf-4724-a8a4-1cdf6f6d5498\n2bf1c2e9-2feb-4cc8-8673-9087c30b9640\n93add18e-f674-403c-9305-0475e3705141\nb537e607-7597-42c5-b47c-5abea242e013\n7c425b99-f000-4f3e-af90-5995e3fc70f2\nd84b9e9e-7b8d-4076-ae65-b720117f556f\ne2ec85a7-9291-4ed4-b2e5-d97604b90948\nd8154722-c600-4382-a500-185e1237ec4e\nfa08b134-9539-410d-9a64-03958a0e1e34\n8eb2f1e5-4890-4450-95ad-f2adf78dc88a\n7278625d-3ecd-4c3f-b90a-88820db30ce0\n76b722c7-d33d-4b93-bbb6-14251f50a1a3\na936ea60-a7ef-42d5-bf02-db0270742dd4\n420bb4af-90e8-4ced-b982-0b5335e768ac\nb6a98590-f6af-4f48-8d78-779594f3c16d\n418fbe74-c643-4278-80d6-7dda43c14aff\n71890e6b-dff0-43e8-a2e0-e82f6f206e35\n4072e0ce-1525-41b7-8e96-e1cb2eab5daf\nd586747d-95ab-4c65-a4e9-987c41a7c52d\n46b209cf-f6b0-49b4-be31-900fddcc2f6c\nccd3422b-8d68-4fd6-9d41-4c9c1755e74b\n64caef6e-f829-47b3-88a5-3f07bb7c9f27\n41f3d5b6-1f32-411d-bbb8-3024da41c9f2\n2cd058b1-6009-4e3d-b9fb-04e5bad6401c\nab977e8e-cde6-43d2-b304-1fc97927fb0e\na5bf0519-24e9-4ea0-9187-45787960c3d4\n71ea7422-163c-43cf-914b-ead3ab109c3f\n9e1332c3-ccb5-47b1-89d1-e47cf04839a6\n16a84f2e-61e5-45b9-8dc7-4fa0a9a80efd\nf0751d39-2dd2-4ff8-8e82-3e0e3708fa9c\nf91fae0d-892e-45aa-b85d-1416be3ae4c7\n7e3d28ea-c01d-49a3-aba0-6bf8dbd3beb4\n78bb5e94-77c1-4490-8a4d-5543fd11bf89\n79f92976-f130-4b57-900d-b0579ee259f4\n1d93d256-f1f9-4681-a3fd-fc42b79225fb\nece62d72-5eee-4efa-a7bf-3834fb6719d0\n9a60c0c8-60f5-44e8-aff5-7088ef9fb19e\nf6857935-0f04-4fb3-bec2-366896ed005d\n96da9542-261d-4f7e-8c5e-d7b284b3d4a4\n5bc425a5-3313-4079-a497-86d257f7d8d7\n7a83421e-71ad-47a9-81a0-6d66eb472f7e\na1cc28ae-54fb-4907-872a-d4edff0b4b82\nd5d224f1-2ec7-4b81-969c-09aee5bc365d\nc00496dd-8a84-4710-a06e-d2d2972e49ea\n65c5252f-aa09-4116-b226-ca3c0b1ce7a2\n4f3f4716-f65c-450e-b04a-5ae2d80d48db\n50a93206-a482-4b21-8013-ca5b944448e0\n3849a42d-17b9-4ee7-8b76-e9f1e893e63d\nbdd0a8b3-346f-43bb-bb56-13481158f590\ndb6de8a9-6ac1-4f5b-a270-cba6185c07e7\nfe7b07f6-eefc-4158-90b4-68f64c9db224\n82dbcf73-2bce-426e-8b54-83e5f087ecef\n2ecc2fcd-457c-468e-8418-6f25f2243f25\nee305adf-58c5-436f-ac23-e994774fb08b\n308285a6-e01b-476e-9469-665411fbac4b\ne43ba944-8252-4b28-8291-05103d5d9ae6\n2c86e970-480a-4510-91a7-06813e561f51\n5d7178d3-c593-49a1-a2f7-cdd7e54ffe68\ncc7fa5f7-0b8a-4945-b318-733e7ac18fbd\n9b296cf0-3836-442c-9e9f-9ede26c7c09c\nc37009fd-8ac8-45cd-9265-3318e6701354\nc5992be4-9e8e-417c-a8ca-af3397bc99ef\nd24fb126-309e-4e80-926e-951583d3807a\n8180e235-33f4-4870-8961-7d01169650e5\n4e32088a-9d7b-4e8c-b89d-0263f09a0899\n423b1103-67af-4201-8a28-cd13ebb74080\n747b8a8c-f750-4a73-b45f-2e3d109d09de\n39b5c99f-8bb6-4cb0-b387-bdb15489a441\n610a3dc2-2231-496c-85b5-6a400598c514\ncf72bbcb-55f0-405b-b259-0f783de17728\nd035a60f-0e7a-4620-9676-50f7ed38e041\nafc868e9-2f30-4705-8ed2-61aabd8b9997\n03c97294-7bb0-4dc5-9bf2-7399d984a1b4\n5afa9adf-41df-49ac-8efd-b070470d24ec\nb298deb3-6cc1-4947-b47b-c93556bab0a6\n549ce488-60e5-4e73-b8b8-25f7ce13ec35\nb0f8ba28-e7a2-440d-a6da-daa748bc94d4\ncf410dc6-276d-44e5-a127-bd341d4a1e89\ndc2f086f-2887-48e4-a10e-873ecc0a6fac\n81a283f6-5933-440d-b91a-1f925406bf69\n616e9fea-f9e6-4407-b88b-31dc94e083c2\n5b603508-b476-4ccf-98f9-a02f0290b9b5\ndc5cf18f-45fa-48fe-8ed8-6034a33a22ed\n896aefc3-6b09-49d4-a8e1-fce2cc358765\ne28369bb-b919-44be-a1ab-9493f6693ba5\na197fdd5-cfd1-43fd-85a7-902d760ea200\nc31d1ba4-76b5-44b2-8c3e-e510a1e71466\nf71b903a-8450-4ec2-b7c2-812450aa7337\ne21ea012-35c5-4c77-8646-ec28899286cd\nb0af2dda-12fe-48a4-b451-9f71aa109fff\n66bf04b4-747c-4fd0-bbc6-86eaccd2e07e\n80b23b1e-171e-45c0-b880-fad081d5086b\nd62a1e1e-d82e-481d-af34-d1e849d7fcbc\n918f8da7-f035-4f5a-835e-70a28bbe236e\nd8238c57-2d5f-4432-9818-521fe7c0f8f8\n39d3ec6b-7746-47c2-baa8-f1089ec92d39\n810191ff-f980-4c9d-8f29-248244472560\nd9439d45-1f9a-45aa-989e-839c7722848e\ndff40eb5-3bf4-48a7-9cd1-f2362c10890e\nc3c2765d-6d71-4dee-8ab4-7df4c69a296f\n702c55fb-fbb6-4148-90e7-499f3a776a41\nb2edfae4-6961-4764-900c-b2f0bef2cf40\n8f175ed1-3f9d-425b-a160-6fe427096562\n1c0a1aea-f908-45b2-9e54-778dd4cb5a7e\n76630751-7071-46be-bc1e-f0ac18b931c4\n0a901734-aa88-4712-b495-e86995519abe\n050c69a7-eb2e-4cff-a591-5090bf3b49ff\n599ad9b6-c41e-482c-b287-5e8f6ed36f6f\nfc58f031-f747-43af-b1bc-493c5b39a532\nbd09daaf-4fdb-48bf-b103-bd94b452ff15\na208f3ca-ed92-4437-a85b-de2431cb35f7\n6a20148c-67d3-4316-9570-7ab4cec72143\nf550f65c-bc12-46d4-9feb-056f0649322d\n64f377da-7cad-489d-bcb8-8e2fd5788e93\ne1efb0b5-ed19-4d6a-bd53-9a758817e9c0\n2e00a801-c7eb-4548-8789-d31de6859903\n3540901b-985c-49f6-9ca9-11e12e3e6202\nbccf9e32-9453-4cdc-a6ef-7338b6673482\ndec511da-0eee-408f-88bb-271e3ca9cc0c\n817b4988-20b5-4d0b-8784-f0d8d388a9d4\ndbd920e2-af3e-4c22-a09a-5bfce906db34\n550536c0-57d4-4f1e-9b5f-bbd6acf2922e\n24862418-365f-4dc7-a43b-1933f74ea858\n23711d1a-6c9b-422c-b9ff-36837b5bcad4\nbd59734a-d444-4bae-b023-292aa40097d4\n5874ff4a-73b8-4cca-acf5-44808b1fd2db\na82542b1-31c9-4f2d-91ce-d8e7ee423a75\naab0a45d-d1ce-4a35-a5dd-923248e366d8\n98c5cc4a-4cbc-40ee-b050-dc20266ad910\n3be2a9f6-2dac-4778-a4e9-19fa43378114\n0e9a5510-5d66-433c-9773-efdb511a4ec7\n97357dd0-5ea8-4134-b9da-53105e3e5abc\ne9efe702-2b07-4a7f-bfa7-82e35806987f\n388b4404-91ef-45c1-a35a-2ec80a206e8a\nafb3653a-a800-4ebf-be01-b75cafd616c1\n4234b3ea-9c01-4aff-946f-5e7f8ff1b6ef\nb1f26906-5f6d-4118-9688-ed4d8d0a04f8\n738efd34-68d4-4a4c-b248-d99f1afe56f0\nce32df47-4837-4bd7-8e25-f9474ca3ab31\n6244b3fd-75dd-4ca9-bd40-2fdf40067d6f\n2e551469-464f-4daa-b436-cd04879d706f\n48d524d8-8e97-4838-b125-5f6d0d2bea40\ncede9b3d-11c8-4a55-9481-ad452c6b2452\n8c729c1a-1570-4b7f-9b11-dac4c2f165a8\nce703a5e-71e8-451a-9db6-5588e91f6a05\nb179bfde-cf34-432a-a056-5ab9686ac3da\n60c05f40-9cf1-43ae-b30b-816a4edbc734\n3d41b6c7-7236-42b6-a13a-303144e77f19\nc1add363-5776-40c0-a7aa-7eb5c609fc77\n3403a559-cc14-4e4b-a2eb-2da2175fc621\n6fcd1aa8-482d-482a-93d5-43481c3a778f\nebe6ae80-edf9-4e86-a39b-92f25246e151\n7e184b5a-aeb9-4868-91ed-c22d4007b6d8\n94c9b323-59e6-42fb-bd23-d3dec0286086\n9b6f4d73-55a0-4762-9810-5b48cc030614\n68b909e8-8263-4848-a10a-27e448b29d99\nf069a6fe-60fa-48fd-8af6-d909a175165f\nb8bea048-678b-4830-8485-3bf5fc6d9843\n403f1e33-381f-4437-856f-394d6e3b54ca\nd89a7434-b6e6-4643-b640-0d073118d8d9\n28d53bf9-7de0-4179-96c4-61122b481acc\nb63cc17d-a705-4159-b184-d4bdea63671f\nbfcd7f74-83f3-4882-910b-cdb989867b9e\nf1d290d2-9659-485b-a6ac-48a78b814377\na1a6634a-0add-458b-adbf-c4735f145721\n83264fba-7c53-4bc1-83d8-a31f1883c713\n14e1283e-c518-4d2b-90b7-18cc58e9fdd4\n978b27a0-d456-4852-914a-b655e7473ab8\n60d33342-c7a2-4006-9fc3-89853363cbe9\nd32453d9-fb8e-41d6-b3f4-55a58df4d699\nc0f0ce5b-804e-4792-85f5-955bef5d943f\ndfde768e-4e63-442b-828f-e0816407af1b\n110451ae-07c8-4513-8d6c-7409fd031e3b\nf391ddb6-a9d9-4287-9895-e860aaf78b90\n49515545-73db-4b23-9e04-c192ee295e11\n4948bbd9-6f0f-4ddf-8bb9-1f73785614d1\n044691cf-e614-4090-a5e5-b03156506e7c\nd07be053-6ec0-47ec-b31d-5c685f84163c\n54e83a17-8b33-4bb1-b064-9c1d9975fdd7\n7d99e847-b7b4-4db9-8ebd-ecaf70942db8\n3c955a1a-ab7d-402e-8ec2-187a6c28c071\n624cb73b-8edb-49f8-b2da-afc035a5ba4c\n5c0d1507-a9b3-4da9-9e3e-ce31a53ea561\n726c52c4-08a6-4e1a-ad7b-b60fabf176e9\n65447b3c-1dd9-4b9d-9dec-4f05f5a02b94\n2f75ce85-61a8-4743-b9da-b1a456900a7c\n6db346fe-ac3d-45cc-929c-02004edf9a14\nf2de9059-3756-49e0-b4a7-318763da1c70\nd9c9fb44-433b-4f54-adde-f30e74fd840d\n23b107c5-c52f-4722-ad28-42fd88586fb6\n3e17a4f5-3d46-4aee-8036-f7b0a8805f48\n6302076d-310b-4496-a809-e8632c3a2892\n4713da17-03cd-4e72-b918-d6d79ca733b8\n37dc528d-5803-46f2-97b3-098c8c5182c1\n370601c6-ef71-446c-9963-50132f66b5f6\n7a0ab1a9-26f0-45d6-a747-485db1c8d882\n32dabbb8-21a9-4930-9ae2-90c9a9d5f759\nd2c381ad-5512-4815-8807-4dad180d2380\n114c5032-0150-49ec-86f1-0e33701c712d\n23b04eb1-e726-4768-aa89-4e9bd911d564\n4740bbee-037c-494a-abd7-d0e8284f6b69\nbbb92394-8387-4041-a64d-54245a590ee8\n4c3e8b46-5386-4404-86d7-46d658c79285\n1ca25964-7ced-4bcc-a3d3-2c56783c19a3\n76265c83-2bd8-4c84-89e8-f9018655c9a7\ne6676d80-aa6b-44d0-807e-636980922a7d\n660283ad-1357-4f2d-ba12-e84ce1d9ad72\n14d6d6ad-741a-433a-bce7-78991b2a85a1\nf7723bef-9016-4220-b35a-de940fb207d2\n3c602a05-1a65-4869-a8f5-8b54d283ac8a\nbaf28895-b872-4c3a-b88a-bb1a1fe1fdc4\n50b56c60-848b-4030-ba8c-3e80d36c5ee7\nb6188d0d-839e-4eab-bd43-d187ede2a65d\nf6ab59b6-16b2-4aac-ba12-953aea337d2b\n1f7a8352-6215-4171-b7f9-a045a08d61b7\n49f0a0ac-838a-481c-9971-900cc48e5365\ncb14e2a5-1a66-4ff0-95ee-64da1d091997\n2c3d8419-45eb-44f5-9abd-e28b832a189f\nbbff03b2-6e0f-43ec-92cc-6f27e896a033\nd95ed832-79ab-47ed-8e76-6a925b0de127\n094486bf-8788-4247-a506-8d7232481a2f\nf0be0c62-fa44-4c2a-b6b6-504a20cf22b5\n9c55a732-607a-4562-9a7c-e506c0e7e1bb\ne3936f5d-14d6-41e1-9a21-615d245f21b8\n4ee35ab1-20c0-48ee-be88-b1e68bea1919\n1f05f57f-17b5-46b4-9e01-821c2da327c0\nee59a5af-4d7b-4e43-925a-9b5ad9460296\n2c4f5e76-ebe6-4a3e-ab21-e7205c57454d\nb44d31ec-1ff5-44f7-9e95-91a8e8ed75ed\n76eb8c78-02c4-48f4-94ff-d452e2773285\n33c7d18e-f02d-421f-af90-ccf57271936d\n4ed5f089-f1a6-4ab9-91e8-a6ccc2d47558\n48eb8378-70c9-4dd9-8db6-0fdcfc13d4ad\n6f86b8e3-cf84-4214-8ee1-383f2076abf3\n1aa8c641-25b4-4ddf-b641-ab01693d69be\n371b43ec-c3be-4fc6-806d-57a80b4571da\nbd3297b1-0ad1-4143-9040-081d11b10295\n31f60509-75ef-47ca-b486-69bf48e50abd\n1155d633-e1ed-44f7-bd03-2d3d0b06d3f4\n1a3db43e-6fc2-4d67-b166-305cab9859c8\n3d204ca0-878f-4aa6-b48d-16821a1b5604\n14488c09-64ce-40af-97b9-547db9a6669e\nc7824cfb-daee-4da0-9623-c31b914360fb\nfcd16b8d-ad1e-44bb-9a5e-168a9126ad54\nea592666-d68e-416a-b827-bc06a0cb3e5f\n002a2e14-37b5-4763-abb6-22572b600ca5\ne629c864-182a-442d-86d2-ed683aba9d4d\nf7b14833-86ec-4bc4-aa4e-10679c63621a\n0e490ae1-ca46-49c4-ae46-4292d744514c\n7f70ff0c-1ed9-47e8-b5bd-eecdae353b68\nd0886d76-96f0-426d-9a74-c31f75432e89\n85987a74-1b37-458a-8c5b-b07d6f1cbdee\nf3e667df-2ccc-45eb-9e27-9525b73a075d\nea336ddc-f5d9-4394-8f94-16254b95096c\ned31457f-71be-41f1-9728-af68a00f6d34\nd8a0bf42-c394-4721-aa91-b9c83c4f8b1e\ne4c3b64e-6284-4602-bbe4-6c47b0a719cd\nd909278e-8f05-498a-9a7d-534fa675a5c5\ndf5e8e72-cdbf-45b6-9fff-37a72cc98ff7\n278eb87d-316e-48ab-9ce6-aeab69f40404\n9740cb2d-0b78-4d67-a8a3-195c0ce91685\n53e4dc3a-d6ad-4dea-b6e4-fd943acc2deb\nbbcb478e-e3de-4521-a2d9-0129bb9b3f6d\nfce6d67f-5361-46d6-9807-4c5b708b14f6\n1dbdf90c-a940-4a11-88a4-29059f24954d\n62cb296a-c4a8-43b2-9488-6992decd8c57\n504af216-7739-45b9-9a7d-66f5d341efc1\nf3917a35-e192-4c1e-be3f-cd98fc385225\n4a706f17-69dc-488a-b7a8-523cd9e1d3cd\n8db63f8d-6441-44c2-8896-9154fdccfe2c\n011b8485-1ce6-4467-ab5d-3d7d4858c180\nb79a2803-2efb-4c5a-beb0-9e4bb73dcf20\n3a5e6c38-8945-49d3-ad4a-598f64a1ae8d\n9349b033-2d39-4cf0-b3ef-673c08d89b8e\nffd5748d-e14c-4f0a-92c7-e7409256c6f6\n66e668af-48a0-487e-8c7f-b88b260ae84e\n7b206918-ae89-4403-b06e-a95861a3cd2a\nd454abfa-76cf-463a-821f-7188f94147f1\n6cf03631-236f-4dab-a242-e410343e7e31\n509e3969-1dd1-4dd3-86d7-7c4023276c95\n39f65a2b-398b-429f-aed8-086e4d944326\nf78a458a-c72c-4de1-bdc3-fe0e0a25af9e\n06966206-d2fd-4921-9577-7b4c90174bc7\n8a930eeb-a7b5-4b33-aba8-296e9c94c37b\na9d01a10-8973-4fbc-9ed6-a9ac3cd3ea48\n2b90ea52-152d-480a-aa7b-f7673174d03b\na94c3735-9002-44a9-99f5-039c56d5625b\nffc7b257-2192-4e39-bfdf-6f408249ae61\n6da9f7bf-6cdb-4068-8c04-7f01fd5f0b86\nf7499e58-1d04-4b9f-b0f6-e62ebec3f6b2\n46fd51a1-c57b-4ad6-9822-8db1ae677d38\n5c5558c7-501d-4f9a-8dd6-3289615912e1\n60b72fc6-88d3-4942-aae4-b69e698b6f35\n8df374a4-e613-41a0-9591-9d51368af0e0\n09d18624-e70f-4694-a5ec-ab38f9cd340c\n4d8758fb-4ab8-4e74-8b83-6c61c56852e6\n45311090-85dc-468e-89e3-8207ccb8a07d\nd2353c10-d370-4533-83e0-0ee564493e77\n0d88f85a-f923-457f-854e-3a820ca92ef4\n654efe2d-aaae-40ed-9c17-eb64d37d440a\nad82b65e-635d-430d-932c-d3272772df50\n0c9f4c02-d35d-42b6-a006-880937613a62\n693e6c7e-ef3d-4877-8d66-10699634aa62\n5443c8e3-c88c-4845-9a85-40da542c21e4\n156bfa92-1c1f-44b0-8520-054a907f517f\n5567b7f5-2e52-4cc6-8863-414b0ea4bb15\nf5fbb166-9580-472e-924c-23293a276045\n3b21b1d5-593f-4219-965b-f8f51e91482e\na2c12f39-4fc4-4d49-b760-3a2deb9b4924\na215b333-f082-49f3-9d59-a76e63f1f261\ndbf5abf2-beb6-4e7b-846e-c499909a2624\ne87e0183-e3f7-4a9d-9936-8c12176ed6c3\nbda448dc-8930-472a-ab0b-3b4ed2ca80b6\n830e9d97-56d4-4c66-a364-7f069036f718\na2fa1b22-15cd-4e2a-a37c-d5baafb5bdc8\nb46ecd08-2296-4c93-961b-de6899950a1a\nca1a6d5e-cf9d-49f4-bf0d-453d297afa24\n978d55f8-dcdb-41cb-ae72-fcdce95fe6c3\n6918522c-df90-4930-9099-a12e7d7a2638\n043cf472-c130-48b4-afb0-6221cdab279a\n1e8c2e48-6607-4b20-9001-460ba0fcf6c4\nc04eedb0-8430-4748-a9e1-74bace37bffe\nff1dfcb8-214a-4ece-95b5-30e222abaff8\n53b00de5-56ce-42c3-a8e1-dbb25b48055d\nbd24b454-5e01-4418-9fc3-dcbc2d2534b3\n344c13e6-9408-4890-80c3-f0d89ed06c25\na4945eb9-47c1-4d5d-ad57-187fd352781e\ne67c69bf-2708-4c7e-986f-5b421d648497\n7be3364d-25fc-40ff-b61d-f04415e89a70\nfc7eac50-4efb-4735-af5a-39b44928060a\n43dd58c6-55ab-411e-8d7c-e836d2d3aade\ne231562a-1a1f-422e-9f33-f6df43bd06d8\n10d0364e-9aec-47da-a5ab-659f1ade24e8\n7586dc4a-fb16-483e-afdf-3a9832994d3d\n49d31906-5381-4868-9a65-db7def969c94\n44c7c0c0-7576-46fd-899e-e0fdd01158c9\n57da76ce-0205-4491-a8b0-f1bdae8b7564\n9ed3e1c8-3edf-4fc2-a01f-33d4683ec9c7\n7c685286-9f08-4042-9f3b-0af552fb9611\n45da33f5-afbd-407a-8f63-3bc3f4db39e2\n9b4cb072-9212-404f-a587-dc298bd20521\nb9ea26c0-4ed4-41c3-956e-ceabf27e2b06\n075699ba-217c-4007-a9f3-ed39927ef43e\nbd77203f-5255-427d-9894-a311a35ee950\nfcefa23b-4e8a-4c26-aa0a-297288ebc801\nb3a30118-ba1f-41b0-92ab-3a922fde2492\n821d4294-dec1-44e1-b6c8-73468d9c660a\n5f2eb245-05ae-479d-883a-3efeeb1bc414\ne7c038c6-fb28-4e45-bfc5-6e287052c2bb\n7c561abf-7032-4e38-a7f7-8705f59d7885\nfb5634d8-e1dc-40a2-9ad2-cae9cd30ca86\n01e9bd8c-a036-4d0a-9aba-fbaf8a9a8491\n2be00de7-3858-4735-915f-0fc331ca8396\nc8ededb0-e728-4d0a-bc00-97423503403f\na06ee3d3-cc91-40e4-a5b8-04c47565122c\n890d6a32-d8a7-49cd-8a3f-509ef0e296d4\n888f956d-9e3a-40db-b465-4036019a0359\n5e72ace6-341f-4f77-ba06-eca86ddb0818\n78a28014-fb45-492a-a4d2-ce7e41b987b4\n608386a8-29de-40e5-9cfe-0012cd34a556\nb04f24f8-a638-4797-824c-a277b43551d0\n2cd9f3d9-9488-482d-8062-fc2d59468e3a\nde3ccfcc-f9b5-4a51-b8aa-e1052fd5347d\nddb1f746-9dd5-44f6-b3d6-b97ed8838816\nd6e775a0-eaf7-40d7-a765-7188f1a7d9ca\n1434ce42-8c34-43e0-a30e-b80582e0db18\n3e51f6ab-4899-4e81-bd05-a68f24687c67\n6a2bf82d-a57c-41ab-99b4-8d4bdd5d3d7f\nf5eee0d1-f86a-4fe4-81ed-1d810d3c93bc\n153effcc-34da-46df-9768-8adaafd02183\n604606b2-b613-44cf-8788-f79309efd241\nd6c993b1-e5c2-48c0-81c3-b9aed5f49cca\n15dde02a-46c1-45fe-9e16-f186a342dfa8\n57c29d0a-08b8-466b-a3d5-6cf871615304\n963a9e72-cfda-4335-8dbf-ac8f91b8d8b7\n0a6c9ea7-c0fe-452f-ae08-7db239b2159c\n8d384a8e-2bf2-4260-841d-f8bb00694a7b\ned045440-57d9-4790-ade4-0a51f94da57d\n6990aeed-64c7-4f04-aef5-55a2573fc7e5\n8f5ce211-52c5-4248-b26e-25dde6075651\n448769c1-ad98-43cb-b6a2-54c7fc986e5a\nf58846fc-4df0-4995-bcfd-baa8420c1312\nad662de6-ca9b-4dc4-9493-be8d91e391c7\nc8b87f32-fbdb-4380-8264-39594dfeeb8e\n7eb30956-f4a3-45c2-ab39-4bae2d1ddd83\nd114f55d-d748-4731-98af-b4fc9bd5c42f\nc5015184-10b8-43a3-82de-016fcc8e0670\n34062387-893c-4467-98c8-5da15ed1f643\n65f798e0-7ab7-46ed-8c71-2d827d8c305f\n52c1c4e4-8d1d-466f-8934-6714c9134244\n2b425f00-11b6-4fd1-ae85-c07c75053d11\n517c4ed6-68bb-4925-ac9f-0a1f13a34fa5\n6821cb4a-eb04-4d14-8815-0c8f09ea0fbe\need23ad3-b721-4695-82b8-7008d1195b3a\n0f25b3a1-dc93-4359-8cf2-7a2d717877c1\n7cff1e02-c3d8-48e6-a80a-18344be586a6\n57123fcc-ddab-466a-9e3a-dcaaf5d05d94\n767f043f-0c78-4a37-acf3-a50f2f96695d\n9c2dfbac-06d2-4ca1-99f9-4bf7a5860575\n25b11096-4092-40c8-9b25-35100861cdd6\n35772644-77fe-4477-b296-4b86ddd08821\ne29a5439-5db0-429b-96fe-5bf206081b4c\n0e39f9e6-c80b-4930-8359-14ce4096b323\nf9133b4e-72ac-45a8-8c31-ac8932d7d170\n1409eca3-a436-4b0c-89ab-cdc14553a3dd\na8fdd60c-6a6a-4d16-a394-ed258bd3aab4\nce7b6f1d-6b9b-4d81-84b7-3ad95749f04d\n6a72b46d-9ec7-4411-84c5-911df04a61d8\nf833d573-ebd2-4e5a-b6f3-9c4de4e05ed4\n54ce77af-7098-4fe6-a1d8-2eca93f9c9ba\ne68043a8-d11e-4d91-a026-7e3ada77b034\na31f6321-515b-4b96-a34e-241caedbc227\n16c3484a-a288-4466-a472-37b7766b6660\n2e4e3acb-a15a-4688-b8d5-f46346b1f430\n266a6561-3237-4f53-bc29-2e210bdec0e1\nd23f25fc-59b9-4368-9060-eb04cda122b0\n98fcb39e-b814-4d5d-8e9c-7e22bd2ebe70\nacfa34d4-a6c8-443e-9b05-7f518c1a3dcc\n1123881c-9e71-40c3-a54b-3c5af7875920\ne55cadc2-4637-4520-bc0c-5cb257de5f42\n80fefe1e-65b0-492a-9ca1-baf9a201c2d8\nf0fd8085-66e4-4060-b6ee-e9e0900bcd57\naa2ce08e-0172-452f-b627-a882aa896de3\n470dec9a-561a-419f-9bd1-34f3f38e2739\n6ce589a4-5ab1-4305-ace3-e417c48557ad\n680306fd-8cc6-456c-8bbe-0f038a2c44e6\nd3e1ca3a-a4e8-4118-9a67-cc9dc23f8464\n41919676-1e8d-48fb-8b94-b976e1932ca7\nb86218ba-4a28-4dcc-9e7b-635671a82e4e\n18e41ced-b5af-4cbb-a5df-382fb7c71597\nb6779a47-bbfa-43ad-a80e-47c0052bffd2\n770ae260-aff9-49ae-9ec3-44b7f6c02d2a\na0e54c58-a8a4-42c6-a805-9dab681bc009\n4113230d-6760-4b62-abae-10470498cb49\n244c8b68-9bc5-4b2f-9ab5-6c272652fdf1\n2a7c8112-5b66-49cf-baab-48f12749a4a5\ne365ded3-3f4b-4728-9114-0b8e8e40efe0\n45823c3b-8ef4-486d-b800-6b34bdae94ba\n4868edca-6d09-41ab-a202-b536822733b9\n07ce5d12-3fe0-4ba3-bf7a-09252cf8fd78\n14940120-de83-4185-b181-f1d0c20cd894\nd534ec91-fd83-4e09-adf3-cb02c61281eb\n1f870fb0-b737-4993-ae1f-567b1271f5b9\na4ee43ef-a970-4f42-ac36-457456e73296\nf6465428-61fc-407c-9780-cca3990cf6fe\n20cc9040-0202-40d2-9a98-89bfabe22df4\n253c9d3c-7238-4e57-aff7-24af121b888d\n5fd6fe85-853f-455f-864a-d4fe7d22a2b0\n642f1f87-c669-4eeb-93f7-ce710792a6a6\n9d8128f2-6161-40df-a397-cf982af0caa5\n1a07d13c-3637-48d7-81d0-7b8e1a45a4ff\nb8cb2e51-7d90-4c3d-bd19-177bb6e3ff2c\n6baa89b6-55cc-4ddf-8750-ee86ac4f5c74\n7476cf73-6a16-4769-9995-23c66cfd6cf7\n2b1fae0d-03f1-4d10-a55f-120957d56e74\n6eb5604d-fb84-4007-8e4b-ba71f93023f1\ne57bcea9-e6d7-49ec-9c4d-fabe08c28257\n887ca50c-279e-44db-85ed-537ec503a278\n149fe3fe-ed83-4b4b-bfd2-54dbe7d4d17c\ne60af290-a698-4214-a8a3-39f6ad9634a6\na84e3fe0-dc0f-48f8-930e-0af94c5523f8\n5c580f37-9933-47de-8401-047c60eda975\ncdee74ea-8231-47e8-ac87-65c891775913\nb0c97c71-f2b8-4a60-8366-6ad805c96c78\nfb32461b-b205-4cb4-9f74-c88d8804bf34\n5686de7b-7bf6-4a94-a069-e3073809a2c3\nd7ccdfc4-1b9b-4599-8493-d02dd04fd395\ncc96f7e7-b05b-4498-88f0-1a93d3576060\ne53b65e9-bc61-43f8-b028-a64c83ad2626\nb096fd65-40b9-45da-beb5-094cbc0dc5df\n5b537c67-3f3e-4abb-8f0a-2a8adfb03c60\n1509c279-61ba-4b02-97f2-1410cf98d9da\n68bef66f-9802-42b3-84d3-744fab801a21\n0997fdc3-be56-4224-af93-3d52f20e6a3e\n2c3c8c4c-bcb9-416a-9157-ffde96bbf483\nbb4f10bd-2c10-4ccb-9153-76c077049929\n19d96ad3-c8c9-4a6b-98a1-b1b3e0205173\n6d51129d-83de-465f-ae46-2411f0feb137\n8cd00257-855b-4270-99cf-e31458e0addf\n0028b690-3096-48ca-b21c-158c1ca0c1e8\ndbdb6acf-9bf5-4014-a5c9-426d50a01304\n6fa504da-0e54-48d7-af35-afabf0275897\n907727b5-60b2-428b-a46c-70181ef5b815\n0532f904-80d4-4c04-8e13-818f3619ed93\nf1fafbe9-a18c-4d20-b7d3-033495b53067\nae566239-04ce-4f32-84c1-2ee1cded532e\n33996824-8b4c-4779-8720-e1190b68663b\n634b0055-13d2-41e5-abc4-8dbcf73c5ed8\n8f6c2d71-0c47-4720-9bd5-dfacd0507c77\n861400c9-172b-454f-9039-aac53a9ea887\n5462d3db-da69-4181-a7d6-1c04bd01c805\n8251c637-47fb-41e1-924d-53ebe536a0d2\n1ec6922f-ca6e-4a31-8573-41d39c1aa654\na2c0ef9e-f906-4ff5-bf44-ab7fd8afc1de\n0d8bbc48-f69a-4062-be82-16f87009c059\n8678344b-e3a9-46dd-8a1b-72a5317a4c66\n2fc1f7d9-e6f6-4a6e-be26-bfc0fec2e619\nd549d612-9725-4492-949b-b90624034b4c\n98900e77-8cc5-428f-9471-385d6a0e7881\nd178946c-174a-451a-bb78-582a9fb49333\nfcff26f7-1a61-4b7b-a253-dfb5b632fbed\nf1a47b52-58d0-474f-b85f-da3595619ed2\n20832245-6963-420b-8d80-e4bcaf558891\n07d6268b-5ce1-4407-989a-e9c1fecf7db0\n75ac69df-be30-4a66-955f-6a974b4dbed9\naea51411-f958-4f68-b3b3-721fb8d2827f\n2bbb01a5-0193-4fe9-90fe-b99ba10b4fa1\n75bed585-5aa2-4ba9-8b09-d87f2d4eb1a8\ne697f515-c83c-4c0a-aca1-b857896a5bd9\nf8627385-56f6-4f43-8e54-ef4ccfdafa11\n8340c4e6-2523-4a97-9906-becd83531ec3\n389ac210-673f-4e75-9aa2-f1c98b5bbb61\n476bc275-7be2-4f4c-bc91-36ff5cfd4f32\nc1a36267-e29b-4757-853e-6bc1b641086a\nfca42c7c-eabe-4cd7-9145-a21dfd08feb3\n3e0d4806-8eb7-471e-b948-e796f30a7521\n165314a1-2191-4d5e-b16d-365bff08bd9f\n03075404-d13f-4f93-a310-1ac75afa566f\n0eef64c4-d119-4e67-9205-e26e25f65dea\ndfb5dbfd-3583-4938-9875-abbbe6ba2559\n5a45ef48-f6ed-4088-8bed-2e99c999dd73\n5cb09208-d1f8-4c02-bdd4-3525885efd33\na21a24bc-eb39-4e80-9713-dbf5d2875be1\n853bff14-4517-4d60-9619-485c5dfd3ad5\n73f61cdc-0e32-45d9-bfa6-b86c78e533e8\nb5e04e46-8dd0-47eb-b9f0-342183ab62f8\n3b54d9b9-e30f-46e6-9a88-f2399cdd720f\ned156549-10ab-4fe7-9525-08f02522a8c7\nbfc317cc-fb2f-441c-91a0-6b38f6d04874\n039437f9-cdad-49bd-8037-31278dadcbf0\na014316a-0763-43a2-8982-741aa5bc47b9\n41785f5c-390a-43ad-bdfa-92114b67631f\n9b6b8dc2-1a47-43ec-a2db-7faa019ec963\n3091f777-748f-4d0f-ba8a-3e6b3248eba8\n6290c027-8ee1-435a-920c-973f12f4a5a1\ncdd36e2e-70f4-4dd8-b11d-c57bb67d92db\nac7605b8-87ad-45f1-9295-b39f5641b0fa\n8dcaabf4-9801-4099-96af-e9a671f52499\n7fd2f2b1-72eb-4682-b3c5-cebcada477a7\nde390524-7d5a-4509-a6d6-18dedcb2af98\nf06ca8d7-9391-44a3-8957-b96683a5f32a\n2d348279-dbc3-4349-aab8-9b903dff5d4a\n5b55ad08-bd12-478b-85b7-38a9afc171f7\n4e8af300-20b5-4621-9bd2-1fcb007ed1a8\nb171305a-80ec-4b32-9cd5-5015d9887252\ne14da2dc-6793-4886-82a3-9c8edab83e68\n690871b5-eb2a-427c-8370-8e954f02dc41\ne2296107-9d26-4e7a-af4f-72ea91cedf4c\n07fca774-0622-44d8-8ddc-6c1218bd9b07\n88e9ff0a-14b5-4164-bb81-fdfd861d5909\nb6c52b2e-e3e9-4659-b7d5-ae5eb31b0b52\n93d72ce7-c7da-4daa-89e7-e0b9441ef059\nfdc32aab-e401-495d-816c-1dfdb1ee6bbb\ne21b07d8-5b15-4c90-a1d9-a5e3105380a5\n261ad84c-8534-49e9-8cc2-2dc6f7fb1bfa\n06962273-9c6f-4807-9d29-5360303fd678\nb2b3da51-ca20-4e64-acc5-81dcf8850e7d\ne083b60b-f209-4ec1-8f24-9b59d502a9b6\n3b216b9a-bd03-42e0-9a94-3db2ba87addf\n30860379-f5e2-46bc-a7d3-4a50fdf50645\n5c884aa0-26f0-4676-ae1a-5edead8331c9\n6ec76cce-2dca-4b77-9edd-ddb7bb48cf1b\nccbd450f-81ee-414d-b07b-9a2e367fb41f\n4c6d7c67-3bea-49db-b616-0c8117f61daa\n7bf804de-2026-4550-a030-246a20fa0e35\n8da1bb70-5a32-4471-a622-67205451b56e\n2ae6b31e-3895-4da2-aae5-3df0296159a9\n2403fde4-bc78-440b-acb3-91760759f9a1\ncddd9f45-2cb1-4d08-b149-beb4b747fb54\n721fdcae-e6de-4b8e-86e5-b8311079bdd6\n9bd0669b-6b22-40fd-ad6f-c6c9620893d9\n11974528-3862-4a7c-9b18-e7287ffd40f6\n76952231-a10d-4a87-8c3f-eceb127920fa\n8ecf943f-3c9c-4ddd-8b92-1e13a418df7e\n4004c4c9-7dc8-4d7e-953a-12dd3c1b99f4\n3a717c53-987a-4bb3-8cd6-d9693cf695f1\ne66661ef-3985-405e-bc0e-5c315e93a54a\n88d67265-d73c-4559-a7a0-776ec36fe132\n4a209d2d-e4fa-41f3-b8c0-e6ffc55b01a4\nd81464c0-a32c-4955-8276-94af873d9c2e\n71343b98-ac39-48b2-aa7e-f5bcf266ff87\nc41bb7dc-efe4-4333-b18f-72d8c28c0182\n9714cf3f-94d5-48ec-b9c8-3a61ee52f0ee\nfc8e797d-8cb3-4906-9bd7-a00e826e88f8\n7e0a88d2-2e4c-4c3b-8394-a451cbe65f89\n8c392e3b-a791-4129-9261-95c253381ad3\nacb39332-4e7d-413d-a525-6cc10b4a5128\na681ee5e-4154-484e-805d-eae894a466fa\n674a9b8e-659e-4325-b476-9e91ed2fa9eb\n8b198087-054d-476f-bdc1-ce40bb65ee46\n67cc9c7b-6852-4de5-b17d-c1d2ee0737a7\nfabf83d5-8cc1-4316-ab92-78cba5a7d547\nd2321be1-4230-4eb4-9be4-0ba5ad842a0f\n38f335af-de79-4143-9415-1ae8dd8da920\n2f74c850-6405-4980-ada8-60f879a67dd4\n811cbe09-e0c7-43c7-b6c9-40f659101d27\n4d1ed9d8-687f-4c5a-bd97-bcdbd3dd8386\n3ab207d4-6eb3-41f6-86e8-6be7a1961b20\n31dd4763-5eb7-4ff7-a2a4-f619fc0fdba1\na332d501-6e82-46e2-a82d-2de1dd0bbe6e\n4770a630-0f87-4bf8-b713-beaea5e8ea71\n29092be3-2417-4239-b152-7697cc1ce0d1\nb0745179-eda3-454c-871c-e0e65a379d69\n2f27a0d7-c815-4bfc-a281-091ab42dc0cf\n885d9020-c45b-4382-af2a-ef09ebb9d75d\n72536a8c-793d-4ccd-9c79-472f182ce068\nb2316236-0ed8-4f3c-b3dc-6a9859f5743c\nb44bf53a-e1c6-435b-91d8-129f2018387a\n2a10b285-8bc3-4b17-b49b-be1ad99615c3\n6a80c76f-f055-44d9-b087-5b339b0e8d3a\n45c8c7b4-8f0b-4b21-aa33-6b7edf26dcde\n50d42b10-7058-43ee-88f0-00f7b12cee6c\n299f2b0c-147c-4a94-89ce-c377d766735d\n1547d5c7-cbdc-4004-9210-447a162b6fe3\n63cbc40b-3d73-4f7b-80ef-f913d05dbf34\nf0dd5552-7aa3-44f1-9d4c-d7e5f049ea55\nea03c64e-16c3-435c-8b69-6c5dc0206f42\nd1429f26-7d54-4dc0-ae0c-4066b8e88444\nf3dbb4a1-4857-4e49-9f74-35d6f9a3bd21\n19efc9fa-17f4-4419-a61c-feb0845db8b9\nad593522-44ab-49f6-ad0d-f1cda20b7008\n69538f74-58d4-4638-87ab-973f51974424\n74a23582-5019-4153-b154-5a2244bd3e04\n4da536ce-3a48-4816-84ac-d74e5902de76\n87bd86ac-ce5e-4a0a-a8d0-ab1b908ec183\n1db45617-5eb4-408f-af04-45a6f9dc350c\n55bb6845-a4fd-401b-95e3-8dc2da29c238\n65134077-1f77-4f21-a31c-dc41fa8bc7c5\n8d30422e-c4af-4425-9c8b-280472433c48\na9868192-07c5-4eb0-8784-41bb160d4406\n5334ddc4-42fe-47f8-9259-6d7353c354e0\nd1ada839-aad4-405c-8935-5071e7571468\nbb71e665-5a0e-4d92-94ad-4152afa425fe\n8884d53b-bda1-4503-9ecf-0e78b042f680\ncdfdfc27-7734-460d-b369-5becb585ad01\n34ac7fe7-230f-4c2c-b8df-00c40040cf8f\n9555580d-c80d-478e-be18-39c0ba871d6d\n3f931eba-a58c-4864-84e1-64401589c34b\na6c01134-5fc7-49b9-8f26-28094de45a7f\nae6d77b4-e4aa-440d-8a55-9cc9468c8d7f\n3c685698-ee69-4621-bb78-aa1e097e5569\ndb6c4289-fd65-4d19-8534-97a4c4d8cb0e\n21399b7e-5e64-4af8-b1fd-1464f100cc61\nc5e09da1-744e-4bae-8443-06c33da3b719\na435dda2-17ec-4aef-a51b-f02f7e641ba4\n9dcdb9ee-7917-4b30-92f2-88075e75f709\nc0660835-7605-402e-8e5a-5dad63cba646\nece5ac76-b0be-49a2-ab44-c47d2b799c24\n275e876a-1d0b-4cd0-9875-84af43a34069\nbe1bbe07-7049-471d-af84-83b57032eaa5\n738601d1-698f-4b72-88f4-17c9a069d3e0\nd0f4e14f-a56a-4dc6-81f7-dc0748a9000d\na0e007ec-a236-4f7f-a92b-1aacc2079110\n22106925-2725-4ef5-968e-6a5370e5c1a6\n32d49946-4c81-4bbe-9b22-b5598e89d434\n92652e14-de76-4e23-8be9-6193be9f3f68\nb7cb9f51-6e5b-4db2-8721-e046ef342e35\n7712f9e8-d5fa-4c2d-86fc-8538585ced76\n7c4f37f1-fc5f-4698-b517-e8ed36be743b\nd5906af1-15fc-4472-8f78-6cf6b56e2791\n7786cbe3-7290-47fd-a934-8f6f836e0fae\n15a701fa-c91f-47b7-930c-59b81702d995\n2887ae6f-f146-4b84-9f0a-5d1e92c90e73\ncb64cdb7-4736-40c2-b592-03feaa7c2b0b\n9b229b00-2cb6-4f6f-9366-c2f69f0f4bdb\nfd4c4f5b-1121-466b-b46d-be3d5a51e8b9\n83be489b-e896-415e-8387-06726c415be4\n6150fe67-ae4e-47eb-9de1-6cf95f4d0433\nacab8e31-afcb-44af-a430-88ebeab71d19\nc9edd9e6-200c-40fb-a76c-a845ef1bfd4b\n3f551a07-c682-4028-972e-a9e9e721eedc\naf0438c6-60da-487d-a59b-2f944c1b8f92\n1ad1ef55-d645-4b39-899b-4e3418bda223\n36fb10f4-b5cb-48b3-9694-57788c3416e0\n90f78bc6-f524-42ee-90b9-0f64f7506510\nb81848e5-02b9-4311-a8bd-5ae48c7b4566\n08fa5c8f-350b-4971-988b-983e0b964cfd\nc355577a-29ae-4ccf-b51d-5f6ff48b657c\n2a2a1f23-ff6b-468c-8f39-5d2c23e1d829\n69c570bf-5c6a-47e1-a297-fb655ef59be4\nd27dd9f7-ab0e-481f-9804-e2aa292d9142\n666c10f8-0be0-452f-8822-737d300e7a82\n469b46a0-af45-4bb3-9958-1c05ac33219b\n95e5f7a3-eadf-49c1-b842-0a352ddf2907\nb48ecea4-d98c-41e3-9be6-0b17ffc7080d\n111df884-d998-49db-96ab-c8a01f24d812\n13e588f3-8143-40a5-ab5b-f84c22ac0ebf\n34da9736-492b-40d3-968d-9abd25ab0bb9\n4284695a-49b5-4d82-b5a9-d4324ce9a103\n4bab8dad-c23c-4a5d-95c1-d26e6d8600b0\n7f151fba-765d-40bc-8aaf-8c1c9f2b763c\n589a2c72-43ce-4d0b-b2d9-a7d8b106b83e\n93cd9565-4ff0-4369-b538-2c34a9ac024d\nebf72989-f545-4db4-9a0f-e10c25529737\n7554c5a7-9ab7-401f-b293-ecdcece8742f\nf1b14e1e-6e3a-4f6d-877a-e5a7d611b268\n3d4461cc-2adc-46ef-a35a-d3aad0cc9ed2\n16cae26a-2530-4976-9f8c-9a51c2a8d6b7\neba8dae2-e169-4f26-b773-6daf928d2ec0\n1f5eabb3-7e48-4f0f-a391-b13a4f0237a4\n0ef76968-ceea-4a20-9a04-25db3a76f01f\nea31119c-505e-4386-8cc0-e21c889cf764\n150c0bbc-74bf-4841-9025-cd45a9a9a2ea\nc3679159-f76a-4963-9f40-16345a758a03\ne54a28f6-b3c8-4be6-9f17-a2c5d0d822f2\n6f999d83-91aa-41ee-9876-31426395cfc9\n8a63e4ce-cf4c-4f02-98bb-45a879d0dbd2\ndef41a24-e611-4984-b700-bfad2181ac21\n24662634-6f43-4145-a602-0a17b253043b\n7deaf729-95c3-4d4b-a153-e31820d6ab5e\n3ce53e8e-75f4-430c-9b49-a7bd5ef25e36\n7ad561da-b57a-488e-b798-1ea0f77b015e\n1b3d1941-03fe-4b89-8652-7ee454a2d40b\n34815bdd-94ab-4217-881c-42a71f9a126c\nd2ba27fd-44cb-415b-a9f9-15bf4a26be33\n51fdac2c-70d5-44aa-b58b-392e89b69e51\ncb7907f4-6e9f-4c3e-b701-84d820a64f57\n42de7928-8f33-4a38-8986-4ead63e7fd0b\nde044f36-1ac2-499f-9e76-26efcce3f308\n3c1fe696-2310-49e2-a20c-7fa85e7b2570\n87452373-8e84-49b1-a81a-12cca162aacb\n7dd8ca74-0233-4b8e-ba19-bdf9f9a85779\n3c092714-3eff-431e-9097-9dffe469c711\nb0bb5481-33aa-46ea-9454-de842295049b\nf9d7db2a-e24d-4d38-a716-45555a433d7d\n539ee7e1-59f5-4b8e-baa6-12e75a3b62f3\n2fcfb809-5806-4ab6-9f56-ba9b6c7b242e\n34767d8c-7e96-4b36-8a51-bb4d0d1c5e99\n46391f07-021b-4f47-aa8d-5ba29f2aa82b\nb479659f-501a-496c-8bd0-2d60dfcc2759\n716fdb34-8b6f-46c0-b183-10e5ce625266\n1a271abe-1312-4c1a-b084-764dd923f071\n389fc1dc-f979-4feb-890e-d1e85f27edbd\ncfd17aa0-df0a-422c-b011-37255f9039c9\nad7c00a0-03d8-4039-9888-abc3669acde1\nb86fd520-7d1f-42fd-87c9-387b741919ab\n5cd5ccff-8655-43ad-9394-4936b49b2448\n9e9566db-ff5e-4573-9a4a-17411bde7d9e\naa5a79d2-4f10-406c-b5b7-22d0f70379e7\nc4416601-fd74-4966-8b88-7316eed4d491\n5fdc0f0e-5804-47a8-9afc-5e6820121f14\n28ad831d-a48d-4e38-90fb-77855ab808bc\n4bcd30f8-5676-41ed-8c39-f9558227a6b8\n1278ae74-6f6e-4f54-a083-591e8a806f20\ncae9340e-c338-4fec-93b9-a8e280026cec\n8a920b45-aa3f-4619-9c8e-6f4afd942113\n71875c9d-89b0-4fb9-9af7-aa2cf08bb956\nea9f1ae5-5e25-4a0c-baf4-ae37901d9ab8\n4ac5ded8-2f91-4e91-bdde-e1dbdc4106b9\n32a9be81-92ea-4a73-bc1f-ac3f0de39cef\nf378470f-c5c1-466c-a648-aba7fb14f195\n26ee2230-b384-4e9a-950c-399b4cfb7dc7\n822e0ce4-96ad-450b-97a1-a89cb29aa468\n4ec7d837-f98b-4412-98dd-e284df956f7f\nbd8c98f8-d768-4748-bf0c-f7d795974395\n1cb5e2cb-06b1-4442-8084-d15a4cbe0947\ncbfeee95-5c45-4892-abb7-0868c29bfca0\nbfe7260b-f315-484d-8e56-a8da5eb682c3\nd99e363d-7a46-41e5-b45e-2b100554539f\nbe1c16d8-ffaa-45bb-bcf4-0cc75d53ddb4\ncb04cd4b-fa13-4916-924c-17b59bb7fb93\n7188dbfe-08d2-4d53-8a7e-b0868dc1ee53\n4a7ef726-7fba-43a4-ac32-d45b55e90f3a\nb1b744b7-42ff-42c9-b770-dfead22e39d6\n73690e61-d403-4d41-8d58-42aabb141a20\n6fa757cf-f983-4236-bae7-524212f85b75\na76225cd-d923-40f9-940a-6640c954b537\n2171e0ce-fc57-46e5-a03d-38e5d6cebb62\n191c2c7d-e4a2-4914-a963-7ff857441557\nfdfa2177-d0eb-4189-a15a-c91530e2c659\neb9ebd92-5f9c-4975-a3f5-d2b93b717d5f\n041c0b02-93ab-4e96-9a93-b5c440d85e1f\n30b235ae-71e5-457b-8b4d-5a9395471dd8\n1a4cc91d-2f4f-4b5c-9741-b93e13f88dbd\n93c3a25b-622e-4d42-8314-463997179455\n1e4fd0b6-833e-45ff-aafb-790a123ecba1\n8e4c20bd-88cd-45a9-99bd-795ac354d2c0\n89c1d725-c680-4402-960c-a18a955095e7\n08130da2-118e-4284-8054-3c279220ecd3\nab195c84-4a14-469e-95d3-8ea18de618e7\n26deea99-4b78-41bf-9216-2ae6b5ef6302\n4c3800d0-3cb6-4060-9f5b-f0e067c92771\n52c2982e-9522-4559-a5e1-71f41270a8ce\n92f7cd8a-e9b5-47cd-8063-fa5bc8d9ec3f\n1bdd6d3a-6bf5-41ed-8d8a-7f5765bf539d\n4c590b0b-1432-45df-85f3-ae10ad86fb60\nd676926c-2018-467a-8b17-122dcb9b2db7\n6b74e7ae-a7c9-47c9-8d79-41fefec7c930\nae875a7a-5e18-408f-9535-61e32bc8f76f\n68b31b39-7ac4-44bc-8011-ae499248e463\nd91a928e-7e82-42b8-8184-cca6673212a2\n6c7e31f4-a7c8-477d-a037-1ade5632aa0f\nc58a0fc5-a805-417c-a39b-43d1a86d951e\n9549aebe-acff-4030-9a95-d2a9a8a483e4\nd66cd6f4-2cf3-455d-8b02-2e2e6299e286\n1905ae41-d8da-42db-9fb5-c58351a7f298\n2015e662-d76b-40c3-84b1-4edb44bb9f0d\n3dab9eb9-7325-447e-981e-407f1a32aca9\nbfcfb293-cfd1-4bb6-88bd-5f699f3cec4f\n813155d3-7571-407c-965a-b89724bf7c45\n5562deaf-7f07-49af-ad6b-16c9df386124\nae0c35dc-1387-42d3-82d4-03424d993f6d\ncd477178-5afb-4985-bb36-c69ead22accb\n97c9236b-e0a0-4889-9607-06da9b79b19b\ne6fb5798-999c-4f73-bb7f-2853bc3b94d7\n9eddd158-828a-47b6-bcd4-c6f5c667a3ba\nd64d2502-9a33-4d57-bf33-cd347c5c036c\n8c6d8bf1-e3ed-4a63-af2b-e3cb17d37e6d\n20172fa4-9c35-41bc-a9b3-78b3d9c294de\n849914e9-bb0a-4499-9531-0169c0ac6c74\nfa692bb5-f209-4518-a82e-38da836b2e0b\n642aed90-5bd4-4b44-9ae6-be755fa33551\ne65065d7-7f8d-4a5b-b96a-4592113c8dc6\n512fecc1-3b8c-4d11-b710-0e8626c54305\ncb63d3a5-358c-4136-8d15-0552a26502c9\n3cf9da7b-19e3-4a00-9266-d96ea9b946d5\n82fc064e-ef1c-4e3e-9187-dcc8d5b2170a\n80311d04-f97b-4122-a708-a5a9b1270a4d\n252591da-d3c3-4767-9a78-59d1dbfce00a\n0ea9c4a1-750f-46c7-a2af-f321a8944eb4\nc8d83fc7-fb26-43e4-b1c2-8e6b8a3400e0\n2f317865-9bf0-4460-a414-0dea97cc8470\na6e59631-51c9-4587-8b1a-ae9897697e72\n03da9fc6-f39f-4d90-84c9-1b97fbbe9367\nc412961f-ac92-4e73-a86e-172dadb12965\n034a1bc0-6f2a-4388-965a-df2b4dd5821a\na57be618-9ef4-4c2d-b069-0f4bcf09a8de\nfc6f5744-2bee-4cb7-ac92-e3f10fc281bf\nb8acc418-b2bf-4b58-b98b-0ae867ca6a5d\n417274fd-8c4a-4ebe-a65b-7368cd43d960\n1d31413f-e71e-4540-b4b8-ac79b29ce9e7\n33c3bf3b-678f-42a6-be3f-38d7f96d84d4\nd010b047-7287-48bd-b968-55d1043ab49b\nc16da710-9c2f-4785-b381-8b1fa722ca77\n431d531d-5d2b-43b2-af0c-c7d83c67c8e5\n4595416b-08f1-42b6-a0a4-c26461ec91f9\n6cf6b0a2-702d-4442-8e9c-e986e0a92baf\nc7184039-6382-4204-b322-24c8c78eec37\n3e6ae87a-a754-4e9f-807e-310a90dfd40c\n2bda01b3-ad8c-42af-b965-e209c351d831\nff2c1adc-0d4f-4212-ba17-a69c45aa5c20\n56329aef-9737-4da8-ac5d-21c9807205bd\n442231f2-c865-44cb-97a6-deec13f30b32\n44a52805-88a8-4fc7-846d-143b8f4cf7ff\na165c50e-ac2f-490c-90e3-23af55782a97\ncfd7c44d-a939-4ad4-922e-60dd586acdff\nc255cd6f-1cec-4f82-8b08-9e48b04e0073\na405f6c0-aa66-4de3-8e36-f837bb13fffc\nfdfea4a8-9abd-4c72-abdd-7627d11332f5\na95ca456-330f-4f42-a993-cf9faeb266d0\n2c0c5fc9-2e6d-4527-bce4-354488ca0213\n43730c38-3ca4-4613-95ce-8214533eed69\n7ee56916-a5ea-49cb-9a19-7657a8950224\nbde77996-0fbf-4e46-9a44-ad3d9a0bb2bb\n374da465-c02e-424b-8eb1-c35f497928a9\naed0feb0-0f1a-4b3f-b02a-bc4f96aedeed\n73229e4d-5ef9-4124-b697-559ba2710236\n0f9beef8-e60e-431a-b223-7210b8bea9e7\n5aa876ea-1e04-4327-b9fc-cefca8c6f943\n1e5053a3-834c-44ae-b3ae-8431be2ea74c\n3edffd06-8aa8-40d4-82fc-2d35440e07e5\nbd812f15-b74c-4867-ac9b-7bd4f9d2618f\n50bd15da-8504-4f77-9b69-0117bfd40ea1\n1fc9d897-9799-437f-8cc4-82353db3e109\n675ca8c9-e1ec-4d90-8213-5c74bc0fbb21\nd708a216-247b-4c82-83e7-29dd422c7950\nb993aa89-9090-49d4-be86-91880064a16d\nf645cf13-c484-402c-8983-da7e5c0a8512\ncc3916a4-bdfb-4a33-b0f3-47382f7818c2\n9ab6fa45-f278-46d0-84d6-21425dc94c82\n3c2685cf-2c0b-4d1d-9e43-5bfd590e5f60\n6c9cd400-906a-4094-b30a-135078afa525\nf43a05ea-53c9-41ae-b9f0-386495e5c470\nbf6bfe4f-4b6c-4fa9-8d95-65fb58d4a7a1\n008f59d3-3548-4762-bd89-30cdba1703a2\n1d82e521-87d1-402d-a258-0664e7cc229a\n8f20a43b-5f9b-4794-8431-2938526381d8\nc98e836a-c524-4716-aec1-df2d9b7bf5b9\n8fd4d8ba-d2a2-4840-b971-2f31331b134d\n07680a7f-4f7a-4ec4-adaf-b8f3afb5f8ba\n0cc00c2c-86fc-4f45-a4b7-0ebf9104674f\nb398f9cc-0768-4c6a-8834-848d3d021d1e\n20c19592-d8bc-4b43-a00b-b62ce41a6d4f\n05fcad4a-55d5-4b1a-9159-ad237892b3a0\nee37a251-848b-485d-8407-8ca3871d3018\n1b78ef21-a45d-4682-9183-03102a4b1784\naf708439-25b7-4960-bd13-23ea7ca2960b\n17d4c1d1-7bae-4569-a757-65c81977f57f\n3acb3e10-dfcd-49ac-b7f5-3ff5088ffd8b\nf6e9c4ef-ad07-4b05-b765-e17ecc4eafe8\n7bf21b0b-5690-4491-85c8-6bc964f16d59\ne54ad188-9ea3-48ce-856c-fed7d07d6df4\n21744a13-cf74-437c-a716-6f2c6afa980e\n0ced4695-fdde-4b19-b3d2-7a369b2cade6\n7b402bc1-dfc2-421f-951c-e882014b0d91\n1c67e740-8701-4ec4-8e65-1ab8661724f1\nf9fdab7d-4211-4328-a4a0-57e0dfc35227\n031b9bfc-11d0-4883-8874-d0572f3d8802\na34e08b2-2c80-4664-af64-b19e85b08e44\n88cf570c-32f7-4f28-820b-c5b6f1ef0a56\nfd2c4770-7aab-4ec7-a4d9-017a9479ab20\n16b33646-fd6a-4920-b956-ef554f5edc7e\nf18483b1-efbf-4374-9d93-55ebe1033450\na5ea2d63-9453-48b8-bc43-cb1d98b39caa\n5a752766-871a-451a-b4ef-13206ca95ef3\n9bba4b66-105b-49e9-9943-23dce180b626\n4314013a-db90-4822-a490-a59091a2735c\n2e106d9e-feb7-4a80-965a-df34bc2eb912\n5e4a0f7e-ffe8-48a9-a458-1a0e0d175d9f\nf2f0ed52-f046-407c-a38e-a2f49d712c02\nd3e66198-723a-441a-965a-d321c652ec15\nc1a376cf-fbac-41f2-9ed6-7bd43f68839a\n29ea01ec-7e72-4440-9dde-ddabe0107aac\n2de7a672-e6b7-4b7f-b493-f034c16c4122\n3dfae201-9e27-41fd-ac21-ab1405839478\n045f99e7-ed90-44fa-90c6-b08f3bdea943\n13d98771-2fb8-4220-9c39-2669c9b7c57f\n228b1fbc-0f0a-450d-94bd-7c13ec61964c\n9ae9503e-5377-45f9-82e9-10657a986c80\nab00b8d3-a51a-4d22-bac5-2bd003908f17\n5b3389b6-a51a-4a4f-9b78-4e0a49585c76\nfbc19750-7163-4b31-a356-429c442a80ea\nb97f88f8-2865-4552-951d-4f2dad38c05e\n9b1fcd2c-4e78-40df-9015-6319dd143fa1\n945cca37-7e36-45b1-8c40-42d30f7faa58\n75450f4c-58d2-422d-8e3c-cdd4257c2c6b\na3fdb7b5-e0a5-4253-9593-02dbe4bcd6b9\n81d8eb39-6075-464f-9c15-e3fb051d18c3\n1928d8fa-d888-44fd-bb38-1009f74bb2c1\nca0e0cfc-aaba-49d2-b786-efb29383294e\nc6663c5e-b555-4932-94c5-06f0d10f9631\ne90fd24f-e54d-4c0f-b53b-6460103ac65f\n6f071f39-c587-48f0-9c78-1e0d0f9ebcae\n0e67e9ba-aae1-4bc6-9014-fba5c350a70c\n61dac150-52e0-4f15-b0a3-f83243e851cf\n9f75c139-8795-4dd6-8d2a-cc259ef13a4b\n0c59f276-659e-490e-b44b-3fbd5e9b4cdd\nc3948a5d-a666-4623-b98f-3d295c8f4470\n72153c2d-b6b9-4d7a-98ea-f2c5cd16e1ad\n894691ff-da18-4fcc-a616-d4c2cbebbc98\nfec92046-5d4a-4cbe-8b02-8fcb6a3837b0\nb6b04e91-6cdb-4265-b3e5-737433f7f0ae\n2081f88b-53ce-4586-ae36-6ae7ea4ac7eb\ncf808429-e52a-417e-a307-ac426607f259\n237466ed-f479-4f79-b6d3-7160d4a5032a\nba7b2bc2-5581-4693-b789-9e263aa2f9a3\n7ed2bcbb-0f5d-488e-bd66-57719aa9ff28\nbe20420d-2506-4ed2-95c1-c6ba5f4c587c\n4d148185-48af-48e3-a7c4-d0634cdf1943\nb8a7b8a4-3f9b-401b-abad-2bd75f56ae82\na8d9e778-a46b-4f82-aae2-db97952946cc\n2bb2c213-9049-4882-9772-0e59dc82e94a\n856e5481-7adc-4bd4-9916-f1f3fc760de5\n3bc887d6-8e9c-42a6-8952-6930627a9fd8\na3f100ba-9132-4a61-a57a-f0085e191b93\nd4d2f86c-3a26-4651-ab1d-4cb794ab79f2\n4982e6a3-f395-43a8-9f92-1e9d68c4d11c\n558e24dd-fdbb-4e66-98f1-0e56d28b52c5\ne6680fbe-c5b0-43cc-bc73-5fd4f66e10bf\n1ff3c6b8-0609-445b-8b7b-20df2b328653\ndc127516-8d05-4fdd-92a0-ce9668ed1d8d\n05319c6b-d8a6-4d81-ae0d-6fd5aae365e8\nb8ddd59e-7507-42d5-ad69-270a138a8b52\n55de2b90-e7f1-4b66-9d18-e7b8d0342c54\nc91b4fd4-599e-493e-baaa-f9ac0ed45e6c\n2e9e690f-72ab-4c4a-b4bb-ca3223f0aa97\n4a50f2d6-7f56-4e54-8faf-b07eafec24df\n59e9f6a1-58ae-407f-97dd-11c5b2a1299d\n08615cc2-be77-4e6f-b678-1f14f023b86c\ndae65546-b266-4a44-ab3e-6fa678220ecb\nf95f47c5-5260-4291-a368-4623ebc9d0bc\n26729a1e-85b8-4bf9-bb8e-df46d64ad6dd\n27bd0230-4286-4742-b563-bfdc56412036\ne1279e46-1123-4543-a77e-785631f4c21d\nc2a3468d-382b-4ae8-b3c8-ef874874042e\ncf9b4106-0116-448e-917c-3de549085b55\n88f0999d-db16-4365-966d-c9ac2c576e39\na97331b0-2991-4d2e-8438-38a152cfcf75\n8a30f84d-55a6-45db-b21e-c7df5e64aa90\n71eedc7a-bd35-44a5-a29d-ad0aad69c172\n0bba0ec5-b9e7-4313-acb1-1b310269e5f7\n61b154ed-9e6e-423b-8527-f499d5ef949b\ne6fff1e8-9dae-461c-b9cb-1c41e7859070\nbe5ef9c2-8543-4bde-98a3-947860c6c6ab\n0efa8749-6648-4d19-9d08-c8dd803ad363\naabaab2a-da48-456f-90bc-11fbeceee6ed\nb289243b-84f5-4b53-a763-18f16286bab4\ndc0c921a-4629-414e-ab04-8bd49578ec6a\nca44f506-963c-461f-8b56-5cb019826daf\n6a509849-2abb-4e1d-b86a-e332f3f9d0ff\ne0903132-3b08-4c00-8b0c-06b3df3e01a5\nac297f44-7d1c-4742-b259-cbeb7985e17f\ne00bc0c4-48c8-4bbc-9745-cd266dfb01bb\ne8227f26-fc6a-480a-860d-87a9afe1de3f\n5693176a-fffc-43f1-a2d1-d2a367669eb0\n1a615c60-5910-4c70-bc1b-c25550295980\n3e1e6f40-e8d9-436e-b263-ef2605f4639d\n349d663b-4ff8-4e9f-bd48-ae7559941f21\n47cf8a80-43ba-4847-869f-714cd6ba5e14\n019d7234-8b1a-4b39-b0c1-5e5f920266d1\na123550c-bad5-4273-8c36-3ed1d80700ad\n8e892375-e370-4aed-a9c0-7f965b678c97\n8d664fc2-823f-4011-96be-5988a72ba483\nb793667a-b229-45c5-a90a-aaf5f0d2ec0a\n4310307c-5e18-419c-8a61-3d4fa6a8ec1d\na514cdad-3c74-45dd-8d66-ded7b09d1a7c\n9d145aa7-e450-4d52-b45f-2c8b72ca3b66\n0a453402-cd15-41ad-9d6f-1b0e3c904887\n4e52fa6a-40b5-4674-b375-13bc88e65cfc\na44bc4aa-7fb8-4e50-8ada-92b631dc5a51\n142d59ee-bd1f-48cf-95dd-bfd2c7ccf015\n58072aac-691d-4c2e-8062-c64f4a627c50\na67fd933-24c1-486f-98bc-d64cbbbf8f4b\n295713d0-c31c-4353-ae71-5a60cecf018e\n39c15150-b604-4a8d-a39c-177cd212cf31\ndb1f04d2-a993-45b7-a35c-0d0becbaa04d\n5b3c2eb4-608f-4ce5-a47a-4355f79c75b5\nbb80244b-1ec4-4269-a9a2-ce7d5342fc07\n3eca0650-f79e-4787-b92f-62c7b8b7ea4f\neb1c37e9-675c-42b0-bdd1-653f50746119\na50d8ca8-0754-4465-80da-b9da14222a49\n3b267897-1bdd-45b8-a689-ce01272ba24d\n258be26f-5ce5-419e-9fa1-e4b0bc95f700\nfb00821a-5cae-4e93-96e2-138da26ef825\n0a00659a-51cb-4067-ad57-d6a4a9688788\nf8268144-edb3-4860-9d51-f2ea26316536\n4f5bb43d-6f0e-4ba9-ac70-2e9dafd60682\nf5101a58-7ab1-433e-86bd-479713b97ff3\n30d4db7b-abc2-46e1-a021-4b73c07d4bbf\n697f99d2-aec5-4c39-8cb6-3fef4b1ba51e\n3968b90e-3283-412a-b63a-fba495f39c86\n1b617924-7e1d-4797-89f3-6204cc51ecbf\n9e3e553c-4564-4b8e-8815-5123d5212d9c\n7f9aefd8-78c6-456e-ad3f-6438e7b9c231\n827ce996-8cbf-43ad-8627-66afd33662b5\n40312273-ef81-40dd-aaa5-8d8b944e0d4c\n85bf47ae-d61a-4899-8c64-c6ba02442ce9\n761149ea-4cbd-49e6-8176-49da549e3731\nc3800a49-b70b-432f-9dad-4868a73ebc7e\nfa41c4bf-f9d6-4cdc-949b-e4767fe33939\n26083110-ef81-4127-acca-4f359986519a\n5511b822-6765-4713-89f9-b2503b0aaa53\n2928934f-608c-4c23-9fc3-0b46f4423a7c\nb95c0c43-00d7-49bc-bf8e-01c1c9da21f2\neb2c200e-b019-4291-a0ce-591f91df5aa5\n8913dbc8-49e9-4fa6-bc6b-c3660feb575e\n6f4203b1-25ac-4558-9559-fcdf0aeaf9a6\n2de442ae-2e04-4871-845c-8e83d13cafa5\naea315e0-2cd2-4ae5-9b0e-973240a75918\n0160ec92-5ac6-4308-b5f8-67d6baa42114\n473eb256-c5b7-4526-ad85-27403ffb2be9\ne9ce0444-eb81-4f15-81bf-0b368cbc16cc\n2c2fd997-b3f0-4c01-9d0a-05603c018dd0\ne3805e89-306f-4c00-9f36-de92b29b91a0\ncb071cb6-762a-4b1f-a3e0-c9ef3e389bf0\n3cd114d8-50ea-4db7-b4e9-d6fb895f4853\n02363815-ede8-4a80-b558-7292a50afb0a\ncce43293-62ee-4a48-9fc9-271606fa6c63\n1bfa392a-de1a-4004-b055-a620d920876c\n4ca94922-abd5-4342-949f-feb8c9bf7082\nb5b19a54-d42e-4715-9c42-106a304b567a\nb0f8fad1-c1cb-4a41-87f6-a89c493b35c9\nec4defbe-ed6b-4674-a773-b05bf3887493\n6d605109-003e-47cf-b99e-cc4dd4f8bcd8\nae31f42e-ceba-4a90-b653-65e6ea4aa84c\na688284a-8fa3-4862-9c08-1faee9492a92\n77290c94-1be4-4e1e-8388-5f7faec7ce96\na1333f9c-d961-42d0-93ec-fdcc56801d00\n70a294c8-024d-474b-8ebf-fb4376eb5c65\n827f3dca-7554-446c-b24d-275a93206941\nd291f4ed-475b-4b33-b05d-18a4608c4160\n62a266ab-5508-48d5-a110-33b9e460e934\n71103ca7-2831-4010-b327-b896b0535561\n840971fb-9fce-451b-9375-f8265804c58d\nf0ac01cb-2d65-4b36-8e4f-668398e5b9a4\nf15a83a2-afb8-452b-8790-d32bb1fad0ed\n0161f2be-2893-446c-95de-06ef22fc4f8a\n108ba8be-9bca-4bbb-88fd-304def48f3f3\n3a35987b-09e3-4386-b9f2-c73f44196da1\n36a3a955-811c-4655-9c53-3e3abb0cb838\n2afe3307-898a-411f-b22e-2bb14e66023c\n2901a216-bb99-4be2-b996-5c9e59b1f59f\nc26ce87d-ff4f-4954-96df-e097fa71613d\n2f0246b9-12be-4e98-9a9e-45a4da280a1f\n3d50f828-6dff-4da3-a9e6-8c339e679892\nb568dab0-98c0-4616-81a5-fb7648c6cbf6\n913740a0-bb22-4206-9234-b9d3035fe722\n23199642-dc30-414b-a270-05dcb04aa9b7\n4fc341ac-cae5-49fc-a54c-8fefa1a0df4d\n9f34fa66-870d-4a9d-b8aa-48a5a0aa7a86\n9e762554-523b-4b50-b27a-888c580fb3dd\n2717fc1d-3cb1-4c5a-9806-61a2f2b3c099\n074238b8-7dd1-4eb7-b343-f0dccc2ecc7d\nf5fa7878-b4c4-4a53-b0d5-a10c494617f4\n679fe562-f6b7-4385-b2cf-41fc17a89aca\na9c826a7-2dd1-4eca-9acf-b64dab4a1e93\n9ce47e18-bf6a-426c-b2e1-a3636c509572\n569ca190-13db-4d59-9674-32e02d1a36dc\n677e23a8-27c7-4606-86a3-5f2212e2da10\n61083233-d987-4478-9d39-04a266ee4e48\n9048795e-1323-4afd-baa1-68a1b59e452b\n486bac82-627e-4614-95dc-5927af6850d4\n03ff62ab-5a3f-44c0-9f81-25248d50b0e1\n74d273db-8cd6-465c-842d-a12337009f55\n76338e8a-afbf-4e6c-b4bd-d6b13941d8f5\n50267037-0319-4d68-b48c-30c48f71670b\n40d69fb3-5571-4d26-86db-d4aff11bae59\n11785a13-9ad9-4901-8fb5-64857edaec5c\n88cacc5e-d1ad-4518-96a6-e0b0bf3d1fa3\n01dddae2-f7e5-4e75-890e-003b0453c5d8\n24253c5a-646f-4a9f-b86d-e35f9383bad0\naf5dd721-1808-4732-87a4-d10595316363\ne83927ec-7edb-4d3e-b556-cc17cbbfefcc\n7bb612b9-bc73-41b5-b792-261c9ab96b88\n4ceefdec-cbb1-4015-9bd9-edf3b4869ca9\nf686874d-ceb7-444c-80ec-4524dbf11c02\n00dabc56-edaa-404b-a320-fa1afa80a6bf\n8faf16ab-5025-4cc6-932c-a6092253951e\n0e4586d3-2f37-43c3-b453-9a519e062753\n60a2155f-18f2-45a2-be69-0b2af5af0dc2\nfd5f62dc-99a2-45eb-8435-015641a7d6d2\n9b4bca76-d664-406a-b738-d941b8134ebd\ne26182fc-7f28-44e6-8a37-d553e83283f1\nc67d7af8-545a-42cd-8fd7-772cdec24b2c\nad44dd5f-ca92-4ea1-b83f-c61914fe0972\n72e6c55c-d73b-495c-aba0-b45a92b66c41\nf7ccc44d-9530-4c41-ad24-925d2156ec8b\n1a66d0c2-5163-40ab-9e4a-d9c8bb0f4e61\n57b59b3c-6f42-42a9-9ef3-d0df2cda22c8\n85e1ba03-caf9-4505-bc42-1ab32e5ccc6c\n655a4c65-ecbf-482f-9cfe-30f96085cac0\n6c20affd-0c87-473e-980a-7307989a2e1f\n5190be6b-d67c-44c5-bb4f-2258d2bb3ed8\n41b74542-8d2a-4856-a714-d3030817b4f3\n3510b186-04a7-4beb-b511-0421616bcc75\nec74c638-ac47-4d13-910c-a9ee316284fb\ne09cc887-7dbc-4248-8156-f78dd06f545e\ndd406cc0-1141-4732-a803-a058d028f08c\n812239c2-8f5d-48ed-a860-5c0a3bf7f239\n5749a93f-d6d2-45de-9cf9-bbd5ccb35d8a\n180aa2c6-1a24-4cb3-bbf4-9a420cef77c7\nbd62b53f-f29c-4ae0-bbe3-8e51cd91682d\nbacc6660-3089-495a-8555-dfc1d65e1ad5\ncaecf679-7258-4929-87c6-844a4aebcbcd\n2a8c8526-287d-44f0-8dff-10774802614d\n3826d2d8-0b1e-4f71-9f55-8ad0fcfa23c8\nd23659f6-a24a-4f89-b5f0-58d6f5e50a21\nb1d88864-b651-4bdb-869c-964515706291\nde97375b-7ed1-4c4c-a410-4ea95826ea0d\n611b8eb3-f631-4bad-88c1-06033311e4c9\n022f6055-87a9-443f-8db3-142bdd14a885\na8945814-58aa-424d-80d4-14365b4cd8a5\ne1a23cec-a116-453e-809c-e723c6b68e7c\naf5933ce-f566-4f35-a5b1-f7eee21f9359\naa791f32-7b0f-48b1-af42-8b89a44a9342\n66c5b093-15ac-43e2-b154-1cba108b43cd\ne9a30e6b-3fd7-4070-863b-da37802077e2\n476df595-431a-4379-9f6d-6672f83165be\n4912a9b3-ffff-4e4e-9175-fd093c913e45\n6dfecee2-b1b1-4f36-a45a-30f3f428482b\na43d37d3-f1fa-4a05-95fa-6e6f210ebe0d\n982ccd24-1f80-44a0-b38e-7daa15010e52\n5d1dceb9-ad12-4042-b7b7-5bf77da5970e\n2609b584-52f1-4175-8c39-a43aa492bec2\n49459143-7911-48c6-bceb-462fcae75a79\nd8003ffa-96c8-43c7-a4ef-79365bff505d\na84bda56-ca77-4ed5-b39a-a658a237221e\n81267deb-04ab-4cb6-b338-359d15a3c012\ne8ad33cd-0b63-4380-bfdf-1a4dff6db0cb\nbe65e4e3-bd86-48fc-90df-b005205db952\nbd3871f0-2dc8-47bc-b050-11cfcd5abe9c\nda7fb934-a767-4c0e-9740-b7451e528006\n051d4cf9-acd2-4c4b-be0a-b1418b4bdfc3\nfc7b9ee2-f6be-4e9b-a3f0-6473d58d2d52\n65af68c4-bdec-420e-b995-33ede01e5dd2\n0b4cbaed-b664-4a26-be5e-3ca18d1f87f8\naa35d7b0-867c-460f-8953-47f0abe46c25\n0ff68437-8376-4d95-a4b2-b0db243cf91f\n7da5431a-e6b2-486d-829b-89009cd6f820\n07dbbf7b-6e8c-43cb-b818-239aba30b004\n3b5f6aae-ecd6-4a33-8804-58a1c8ab6225\n97507967-694f-4a77-af59-caf602b192dd\n29a19782-e17f-4353-9cc4-561b9ddf6207\nd9181172-1cd1-48da-868f-7764d6a7fb20\n4c0a622d-776a-4a23-a015-fee07954befb\n3102c1d8-0c0f-4e50-ad58-6cf54ccfd8b1\n5089af77-b017-4dca-a020-f74f7222032e\n4487d518-c557-4f6b-9832-82100786fec1\n78e19efe-6d8b-4021-a791-d511069d3e68\n605eaf31-2664-44d8-989a-f6d5031d9e7a\n256237c5-38c3-4bc9-abf0-a8b2f78e7b0e\n805fc829-6102-4b2e-ae30-b367965c0f99\ne7c07d87-b412-4fbb-9238-b8be087511d1\nf845778d-d776-4745-a21c-25028adb67dd\n932dabed-9cbc-4241-9cf4-3d1b6df8fc7f\na46c09e9-2a71-43f8-8a7b-8e76c06e91e2\n251f1f08-1156-4877-af15-1621b84b13a0\n5fdddd40-6634-4608-934c-5085f9374cf0\nf82c130d-01e5-49f7-849e-bfe08e5b8504\na16ea15f-5e63-4b35-91f8-344ac572ec0f\nc098eed9-150a-4ee6-a678-5fce337d61bb\n66c51c59-d57e-4c95-93e9-4cebad5e3aa0\n9810c106-1b9c-46fa-aeb8-2ff0901cf900\n06ce6cc8-19f3-45cd-ba97-cb909d923a0c\n808e37ec-bc64-4704-8364-5e56f36c2dd4\n69e3eae7-291a-4200-a1de-d03e44d960da\n134d9046-5660-48f9-bb60-8aaeb8bdd0da\n81884704-9186-4cbf-ae46-3911c54581c4\n695d013d-a490-4569-8d52-2037a305831b\nf1706607-b5d8-4ab3-99e5-7dedbb6047ec\n9592e705-7680-4ec9-b71a-6406728c863e\n8a82aa53-7f1d-4610-a32f-0c5df1142cd1\n2a43df08-c7b8-4a51-a042-267b4ec681fd\n3fcc5f7f-2132-4bf5-b8e3-5f3c54d8026f\n65dee402-2684-440b-b577-27f8e094649f\n9768a85b-6b0f-4832-9299-5bc98c959722\na275a1dd-898d-4e9d-9360-8a15c17a9b92\ndf883097-739e-41a1-a728-98fd0d3268de\n08b76a82-80b7-43d9-980d-ee5362fd7019\n07321207-709d-415a-a7ff-ee55ec21c175\n8a4f9cc3-6803-4a6d-8f25-a1ca356c523f\n5aa54a9c-4389-4ba2-86f4-5177161c865e\n83d84c8d-2e37-4295-b91c-1958eb88f422\n615e2597-d7f4-4290-b20a-f38cc75c76d2\n341fae2b-82b0-49be-aaa6-5459d5fd7f7c\n11ccd7bd-beb5-48b8-8d14-eb462978535f\n2a0b524e-bfa3-42dd-a7d2-d3ddea88247d\n333c4733-1f27-4f4b-a662-02c44e98bb31\ne1c0bdf3-487c-42a9-a5f4-7306770800e7\ne0f00e1c-a7dc-4c85-bd96-5f835e0fbadd\n000e9cd5-4717-424f-ad4f-7c8ca46335e9\n6004f030-2b2d-4235-97da-32456491a137\n785cb224-24a9-4c4d-9b25-97cf613966df\nd49a2d78-7847-45dd-ab10-60de16020a1c\n3dc43dfc-e5cd-469f-974d-f4223d195db9\n5d586c5f-0055-4b53-a833-ea669bd1526c\nbbe21302-38a9-458c-a2ee-f723fa465890\na412b98b-0a88-4666-b5f1-f0cfb4ce6d95\n1ebc9e5e-c934-4966-8187-1ebb287560f0\n86fba48d-6f58-4d64-96c3-66bd6db181e4\n77192233-679c-4993-a5c5-033ee7f4650b\n69e07f40-ef3e-4662-837d-22d8e986628a\nb18c7980-eed2-4ebe-add2-d5cac17a532d\nc4c184cb-6ba0-4e30-8236-a7e731368023\n94cc05f8-6139-43fe-9efa-bc9ef2380a3d\n198305fb-e029-46d3-af8a-aa5e30bb6d06\n630a9f65-73e8-47db-8c18-1e82eb67fd7a\nefb9965d-d81c-4ec5-9355-f191db495f62\nf4faed82-601e-4483-a7b4-6a2900315b16\n42974365-6658-467e-ac34-3fe892fa1708\n597925ab-0a18-4cfb-b471-ab2912372b8d\n93288bb5-1fa6-47de-af76-dfc16a62adc8\na158ee66-0e39-4f30-95f6-33f649cca39c\n1ce6c86b-99d1-4615-b1f1-ab57b0de5f59\n53db69b0-834e-4074-b6b0-6c4b03d36b3e\n530b3652-d761-42e7-a1a7-2264e1b6b37b\nca790b1c-4e9d-471c-a3b5-fe52df9b37cc\nb7ebfea0-7f6b-4e07-a6f6-4c1c63c3e3ca\naa92b4f3-1edc-41ec-879e-bf6d3e535b46\ne9a98d32-9556-4fe2-98fd-c3f81f72bd2b\na31c61cd-6c20-4614-a190-8a7bb1e710f8\n1ba96db6-7a97-44bf-b454-5978425ecb0a\ne491389c-5aba-42a4-89e0-15dbed63ddec\n6bcc3a7a-39bf-448d-95ea-037e54044d0e\na888d373-2002-4431-be23-fc850aea2a8b\n8d9bd3ca-52a6-49fb-b6f7-b9c71bc6493e\n0e9ca18e-1f90-4e82-97b8-1466798d20a7\nfeb79d39-42c0-41fc-bb24-869ba0f128b4\n6c545ab0-d890-464d-b551-703c7e230459\n2ae97a13-614e-4da1-84d1-620c6b115d86\n077cecf5-3cdb-400c-b80e-a13ca670d084\neb1839dd-a4a5-4904-b04e-f24ba1a3a605\nf151a7ce-c4f3-4cb5-8b45-2509da9ac5be\nedbb2bed-01f5-4a95-b207-a4475fbdedca\n81fb65da-7bb0-4f42-a369-26730f3431e1\nb38086f9-ff8c-4f69-856e-c9dd7a3ceb90\ne02e5e87-3835-4595-ab31-bdc27b08748d\ndcdbb36e-e521-47b1-946e-965ef4bad0d1\nca49fa42-9ac0-4bba-80f7-dbf393bacb28\nea597ff5-1909-4dfc-9670-ae53177bf329\nf8d91fed-6ac1-473d-a342-98866c0a94c6\n1210e80a-1d41-41f6-b7ce-d993480cee68\nf536c8c6-8ff7-46e2-9b58-4fc7e4c95486\ncd05f479-5f28-4d00-96b2-f189e9475175\n43a00e81-d3ef-499a-82fd-0d7973bad194\nc29942ad-1920-49fb-a0bb-811546649cef\ncf33bc28-ab27-4525-9bc8-0708f6480619\n9eee777b-386a-460a-bd6a-98442b6b7e36\n1333c65c-8f13-450b-9a0b-fdcd335ed04f\n82427435-bbb3-4451-b0f2-4edef9716be0\n4d331057-5a8c-4459-af54-c486682e108b\n9aaae5de-20eb-48d5-82f8-092a1f8dda32\nd89c46ed-4c44-4cc9-8028-c622bce7653d\n273afd16-95a8-4a57-8340-306cba3b8ff8\nd3081dc5-67c7-4872-9055-7523ba61885b\n341c7791-3eba-46c6-9d45-9da13cef9b79\ned9f62a1-ac70-45a6-98bf-4fd5ffc074bb\n6077f7a8-80ba-47d4-a825-820c6421df2a\n6e9a3395-97db-419d-8b96-728e614991e2\n4c466f31-7e90-4d90-8262-5ce4f41146b4\ne0e67d2b-3469-4e09-a434-be1be1309816\n75a7f6b8-589e-4fd6-a662-6754c2cbe7e2\ne15a6164-ad7f-4ffc-b248-f3561c5527df\n379642d9-c4d9-4e9f-a886-a597312f40f8\nc99718af-5d75-499d-ad2e-57bf943ee1be\n3c3a1cf2-dbb4-44f7-abb0-7c78994fb9a7\n3858fcaa-89a8-4ffb-9d4e-fac83213010a\n7b478bba-a8fe-4350-9e24-69433f71c808\n2400d80c-13d6-4075-846d-42645003d752\nd1381718-80ca-4267-8ed1-0afa392326c8\nec650aee-f775-41a0-a9b3-a70354cb38a6\n9ab8c8fb-12a8-4fb5-858a-13116c4206bc\n88e5e81b-b19d-4cce-b0ab-e3327819b917\n61aaa362-e0e6-4a36-a6a5-306395488e50\n1e282d8e-bf46-4e3a-b0f9-d980627a71f8\n11e7cfca-1783-44df-848e-f16ea8dd7886\n79ef884e-0a07-4cdc-bd0c-92f0a74aa931\n42e17557-cf25-4ad6-bf97-032ff3c67a47\n37451464-5c09-4807-a6ff-aa6945d799f0\ncb19de57-1817-4d74-9803-2a8f57287d5a\n0af2f468-c6fb-4217-be26-6b854c6de258\n64ae342f-e1aa-416c-bae8-30b119a95ef9\nf5fe551f-7da6-41aa-a5bb-3bdef1b4fa8e\nf061da02-4ef2-4456-bd57-e4abaf7cc46a\nb083ebe1-9acd-4461-89ed-50ff64469b03\nc3e00fb0-50ea-47db-a1ea-77a4f69439e4\n81099854-ebd2-43fd-8623-49235a20c385\n8f6cbfb6-1c99-4804-ac12-e380960ab585\na3ce0b16-d909-454a-9139-da36462a6d0b\n7dec127e-da96-49b0-b8f5-7d7cc5635c20\nc0f24688-7c34-4c78-a1d2-3e96313adba1\n2a7e22d5-12a5-4fdc-a945-ae7f5964dd8c\nef715bbf-88a9-4934-8082-aa1a846d48c6\n35e1ed69-865a-4a5d-a865-53244b5f87dd\n5fa2588f-b960-44eb-bc6a-3d4397d36d3a\nb66bb99e-6970-4b33-8b0e-3d0ce2ada7a7\n5b8650f5-d0f0-4a6e-8af0-8bf179666d3b\n1c70d442-1020-47ad-a3b0-59b0c4cb5794\ne56f1838-c14c-4096-ab04-17086949648b\n77a535b0-95ff-4668-bd5f-d68335819f30\na8c5596c-972f-434c-8762-f5acdea431e0\n4a1b0c1e-b341-4ca2-8d4c-38b44ce8870a\nebfbbb50-decd-435d-83ec-683ba29907ea\n55ab27aa-2e13-4357-9adf-6781a67635e6\n9dd5e54a-50d4-4d11-aeb7-f58f06cf5c1c\n900dc6e0-ca0a-4f77-adb8-197efaf05444\n59ed609e-89a8-430b-9456-76a3f2f3edae\nbbcfa650-8e36-4953-8da6-188144545e33\nadbb79e3-6357-42fc-a535-aa74baf8accb\n651a0d9a-2450-42f8-b614-c7baa4f600ea\n078df6fb-7bd0-4b9b-ba09-1b161dec2e2a\n8c01de7f-d654-4b63-876d-1114ad46d0db\n8e80adc9-8a0d-41fe-88ab-3214ee737317\n0d6a0a76-f300-404a-b426-60fd6dc168d3\n762e0aa2-02ce-4b10-9e55-40cc6f42dc61\n64aed40f-1012-450e-b8ab-69db373a0816\n23101164-40a1-4849-bc20-971ad922d4dc\neb541acf-7a07-44e9-941b-43300db2a6e6\n43e1ea2d-bdee-4b47-bac1-1208a42ea461\n03bfa1e5-9600-4baf-a709-8c6153de334a\nf3e2b4ae-9714-4ece-8086-f969fa649208\n61f72477-3c39-4527-8074-8ed8909fb7ef\n612ee0f3-6f67-4927-9299-406926e1aa65\n6c75aa4c-d6cc-4a7e-80eb-db827eedcc45\n82a4ad91-6207-491c-aaa9-ef6fda209617\n1d9eb001-1a12-453e-9cf2-84a6f4e27f74\n0b0e4077-6c3f-45eb-a709-a74601e72d0c\n38ac5d15-af93-49d2-bfd7-92d1b8b6f60f\n94bbd6a8-4af4-4289-ba9c-bd3f7264b5c3\nc605060f-de61-4633-b2fd-b5db72d4e1b2\n53a03cee-82e2-4fa8-8eef-e109e177af1a\n9ef80115-3384-44f4-a099-a30dfd79ef06\n5c3abd69-21a1-419c-a0aa-46ad74bd1c0c\n0eb51776-5540-489c-a76a-e67d7309123d\n3ffa50d7-8797-4360-bfe4-2ab615596184\n552916b1-b516-4a92-ab4e-d15a0d7f2bc2\n365f5645-ce2d-46e1-956c-ceda75e08ad8\nb04e9157-efc2-4ccb-85c2-f4b4fd8babd7\nb7abe199-2969-4d00-8be3-540ef02bf128\ncf8191ac-2ec1-4a42-9906-3a1d52e52c08\nfba03422-8d0e-436f-911b-b3287dfe6676\ne7eb91c7-d406-4226-9773-dc9dd77f8b9b\n59abd705-1d52-4814-b809-2153fa1dce65\n5b81583c-9873-490f-8d46-91edef66ddf3\na4c8cdbb-6dc4-4996-8bfb-7f597d41bae4\ne31db034-25be-4b8f-a678-bbfdc978708f\n7fa18ce9-e9e3-477d-8419-a2271bf6fc54\n5a2b0ad9-8a08-421b-935b-a1524138593b\n95c9678b-8776-4c4f-9f66-7306f734e90d\n056f6ed0-1e87-47dc-8f10-f878e80cb90e\n4b474052-d038-4e37-aa9d-2ca289c3e805\nb1aa69df-9a20-4e62-b368-3f53dc65d858\na53d3fbb-477f-491f-aa43-e577e6b714a7\n52b9313e-cbae-4e04-8742-51ae7779a9ca\n8fcfbdb3-2479-49df-a6e6-6bb21428fdc1\n0705627f-eeed-43e2-9032-3ee75f2c8759\n52129cfd-5277-4831-ac81-d5534ae8675f\n20e48c2f-ce7c-41cb-af38-57ec9609f80b\ne1fa4285-0fb3-4377-8bd5-dce1ab4e4fbd\ncd4da103-b3f5-4b5e-86e0-544e14f94655\ne4c62333-5b1f-4729-85d2-1d12c482a010\nf4442151-1ee0-4290-8ca5-3fd589aeace5\n35482737-6b8f-4ba7-97ed-9673079b98d1\n1730d59c-32c8-44c2-8435-f54658cc1bcb\n4dcc03fd-0fbe-40f1-b729-3adc10bc7510\n3c016974-b5f7-4df6-a03e-496e88ec1bb6\nc092a1eb-e888-4d3b-ac2e-401a77fbe087\n25a1b6ae-1efe-4b91-95b5-0d747b875245\n52fdce3e-18c5-42ad-b04a-b12bf7ed8360\nf0edd4c0-826e-4d4f-9ee5-b0817537ad93\n6f2ba197-fb7b-4f2a-b341-86476308e14c\n2a70d818-1278-4b1e-aa83-477db947916d\n42bce1c1-9baa-4e34-9fc0-fe2cb5bcbcc4\n2cff4121-145d-409d-8b2e-37f548a22170\n265645ca-56b3-48c9-927d-98504f4c2470\nfa0af236-1346-481b-92e4-31b5795015c5\n9f6f28fc-36e1-4f89-834b-2a8b8620c08c\n5b9abb0b-143a-4464-bd03-eb5e06bef5d4\nc3c31755-167d-4b86-904c-87357dfb0b0c\n0bff8740-72a6-4771-b592-a50eb0526712\na3a97a55-b63d-4988-b667-09db4c862784\n8c6369a2-bf47-4e84-bc3a-53e254619de5\nffb72e6b-7d58-475b-9942-2b32f2d2239a\n5f5ddd7c-50ab-4646-9067-a47d1f827276\n9b26331a-d732-4c9a-8877-9ced0c5c8ab1\n2776851e-fbc1-4429-b6ff-88c8b713e729\nbdc249fe-32c3-4b92-872d-e3fd6b639b22\n4b657a43-dc44-4de2-b833-be30b17ce96a\n1ca08baf-ca70-432e-94f8-b09134d7c11f\n970d8667-964b-4d06-b2e9-cbab72a8cd7e\n6ec78e55-8ba0-4de9-8594-38e938ee51a4\ne0ad2568-857e-43eb-9f37-851a96663f77\n202dc4e4-f626-4887-a958-47530e83c1b0\n018981b8-0dd8-46b0-a4a6-37d679a4e12c\n7bda2732-f4f8-4718-bcb4-fa19b2b5e72d\ned9fb9a8-6f1a-4113-b42e-fd860d1dbf87\nf6c28932-8cfc-4e99-8a38-6db4bf69cb2e\n97f8b4e2-4145-434c-9fd8-9840f7b4dfc1\nde3fff1b-3587-42c1-bbf5-6251dd0e9470\n86376df1-79c2-4e3f-aa1d-5471dbcc6134\n94aa96df-15e6-4a21-a127-3416dfc32032\n4a5ee0bf-b130-4358-83e9-eaa63c5b08cc\nf4db34bc-22b8-4cb9-9592-c588fc57ce01\n016f3a84-8196-47ef-975b-f8d6f6cf5720\n66af3ea6-bed4-48a9-afc9-d9f00d8467a1\nfbe0e58b-6467-4d32-ac9a-cfeb81bad74e\nf4ff274a-4342-41a6-a70f-252d0051e71d\nafc4f73b-4b1e-4e1e-bf36-603d7be6d83f\n2976a41f-dd2b-493f-bea2-48b52959ea18\ndf24996d-e1ca-4950-8067-d2591f64b8fb\n6a46e24a-2bb1-416f-9c98-616e0d5a0749\n8bffa444-1e7e-49ba-abef-0f5d8cb139aa\ncb604b7d-31b3-4959-8ed7-0f0606434b27\n2225b4a2-6cd1-4dc3-9bf1-a86bc209d8d7\nb607bba6-d15c-4f6e-93ef-37e48775b138\na25800d6-5770-4669-b7c6-dd03584086f1\n3baa91f2-a7ed-43b9-ba21-732af7bbf489\nd9b05bf4-f20a-4103-901d-42e0f20fba72\n5793fdc4-f639-448e-b260-4b3d9d1c5316\ne682d144-f357-48a5-8a1d-7c31a8372ec0\nf8d422f6-0687-48c3-88c2-b10beefb2cca\n361e9192-527d-466f-bc1b-87cff2a62e71\n756085eb-7e79-4b1f-9830-714643864f91\ndd658ff7-51c5-406b-b9fb-d3e3cea944c5\n61ed4148-4b39-457c-8c94-55351bb1afd2\n361a7618-c858-4923-ae83-68eb497f8771\n54cc8ce3-862f-44f3-953e-85c06ccc8436\n0c124d58-fec8-4e4a-b80b-b668f7e54298\n2d7c2f8e-2ca0-4d5c-a3e7-ef5565461e19\n1d14ec01-a7f2-4a9c-8191-ce12ac33591c\n25f9f632-838d-4003-a0df-afd51c9446eb\ne688dd27-2d44-4e8c-acdd-974c746b3ca1\nea6ad507-95e2-4960-aaaa-d6645428fae8\n97d5a280-5936-4204-a76d-610a3e5b011d\n8d9c1ad7-ddf2-4ae7-b81a-bc4ef6ffacf6\nb4308f48-b4e0-4e5f-8ded-9119abf16598\n26653a30-7fb7-45b0-b09d-c97ff85526cb\n30f357a7-e761-4001-a4cb-dafcf3ceef3a\n7b315ce1-079c-42e8-b674-d858d97a9360\nbe79ddac-d9ce-4ff4-8102-94bfcda38834\nea9e0d78-b4a7-4d60-a092-ecd9f58d3d78\nc5eecc2c-ebdd-4fa4-bf82-207f28946de8\n71267c74-1caa-4f32-a3e8-a6ea41049074\n74075366-63fc-4b0a-9576-96d391eae422\nc75f201e-afba-4202-b1cd-9ad26010b1b3\neda7e66f-5d47-4fdf-a5dc-300a884994c5\n4a3f86ea-25b7-41b6-854f-3911928cc998\n547cd8a8-7e05-4c06-9f4f-58224b1adf1c\nf9dfce16-5ce7-488d-b3b0-b8f07230283f\n4686a32e-7d6c-4877-9a1b-2d63f973a8ca\n54ab8f06-4c4b-4f3c-9df2-44f8297e897d\n39790ccc-9fc9-4a4d-a7e6-fc2e931dbdcf\nab102bfd-a988-4b91-a234-2fed34d6b1f8\n48bcbf00-3c51-4ab4-9a32-c216abab8f47\n9516de4d-7ef5-4311-9dca-ab29f1fad20f\n88984d15-cd72-4054-a96c-ca9e259e2216\n08329b3a-b85a-4b74-8337-28c2a0a3afca\n33495e46-75ef-402b-8c8b-abd41476eb04\nb105136f-8a8c-4787-89c0-748465597028\nc601f703-ff34-4ef4-9fb8-89a72da6fced\n9c335c55-e03f-4a10-9fcd-a266f3d6bb9c\n72d2bffb-73cf-4abb-adec-f5139d956a9e\nf531372e-1d3d-476e-97a4-180ed7b44e5f\n2bf3207e-8805-4292-909e-9438b3bfbdd5\nfae8e66e-03a1-4f0e-bb5e-c662a1abfa2b\n6243b066-60c9-4e48-a73a-84b8c5874694\nef590044-cf96-4917-a1b7-7edf501f0e2d\nc2566d05-0cbf-4dfb-a8da-68718ef111c5\n11a76903-0176-49ee-a755-6744a18e8542\nbbd2a18b-113d-4367-82e0-aae34bebbdf6\na1971865-be71-4d0a-aa63-cfeb6f99ab44\n99af351a-a707-4f81-826b-9bafc2bf0b50\nb4d641ab-9638-42b2-b159-f69fa588e06e\nf015ab08-1797-4cad-9ee1-ac7b0a73a350\nc7645e7e-8be0-41ae-afc0-b7caf7469120\nd89f0371-b0dd-4c42-a96f-81a52f8bc2d2\nb7cb9dc0-b592-4cfd-b5df-bcff80157d0e\n530a7e39-dee0-4560-b631-9412f293e916\n14566851-ab40-4cd8-a161-29310a0b73bf\n0731cb0a-5390-479e-8c24-7ccdcd610e32\n890e75cd-9ffc-4944-b312-0b0659c9d364\n06be9469-7c6c-4fa2-8616-064f03cced21\n16107485-db3f-45cb-a1b5-9c426f93f004\nbb9d5de9-b5ca-4f49-aebe-16c74c13b025\neecd7d01-5967-4c35-b25c-22193354c35b\nd1238625-92c9-406b-b052-5c31c9a8c916\n7b4923b0-1014-4d19-a5ea-67fcb66486c2\n5d72c50f-2ad3-454f-a4aa-f2cf2ed35d1a\n8cc41085-59d2-4341-a71a-e2148e1b55cf\n2f41bc18-83e9-4800-8323-7ea1a8a91bbb\ned2e7993-7d8f-4781-8b3a-380a38dd1a8b\n5b90bb1d-fec6-4520-869f-cead937c740c\n76f94e02-81d8-45f1-8b64-31d39a5f86e5\n41b7f625-1d65-4452-bf9a-821a368e3876\n0c89c6ee-f1c2-4efd-bd80-06c807f9db19\nbe1e7805-3587-4e7e-a248-7144276ff806\n4d63414e-f07d-44fc-aa91-13b665720aed\n5e1d0cad-b1ac-427d-94f7-7e8bb9e60c74\n00ab2cd5-d92a-451d-8a4f-3d343f205b40\n455b9d8c-4a90-47d0-8b01-c6aba1bcf478\n8eb5fef3-796e-4707-8f01-b10dd5e39003\ne7cf2193-4ec5-4f48-a54e-77aa8b1272b6\ncd23d7c0-adc9-42ba-9589-bb6e274466e7\n299dd2c9-90e1-4f9d-b7ab-b7b9cedf7d97\n8a3a7e55-7edb-41d2-83c7-511e8ec79a81\n8e7f390a-8f84-478a-b22d-385a533597ff\ncd76203f-5d9f-4acb-bc33-95330f194dac\n49cb6c68-72ed-4bf6-8522-03e0f4439944\nef5b8937-f465-4170-a392-3d4967f360ef\nc3d8cf6c-d4bc-4759-864c-9c191a942790\n4af08dcb-ca13-46e2-9468-415d8def8494\n4aa41962-f7d1-4035-8c77-10df43316fce\n93b70ab4-e52d-40b8-87d4-fc83e33526b2\n9fc7e67c-05e8-4469-ad74-6a1774f51d4e\naf3f31de-0e4b-488c-a37b-537cf8ba3392\n5fd70dee-2d99-4c51-aae6-3c78faa9ae11\n1bc56b52-ffd5-4163-b7bc-97e52ad4d4f4\n618fb14a-5254-4b61-8afc-3d79218fe6fc\nbe9d4088-28f0-4afd-a7a6-d3063c37d3fb\n0961d236-0348-4570-b12a-0fecce3e730a\n8c4c3882-6669-4b8b-9683-452edcadbd5c\nd608e4c5-6d96-45d0-a1ca-01e5407abbe8\n1df72e59-0127-42e4-9bfb-7f7bd92ef955\n91ca78b6-a656-4a94-9b6d-a615f49509c9\n7ce19f77-e2ae-4f3e-8d8c-774bb1be4196\n047220a3-e513-41a8-93c8-8a910d919c0e\n1b25004d-e4b4-4a83-a205-aad9bf8c55f8\n6bf639d4-6f62-43ee-8ac3-bceb45aac915\n61babb5a-d7d8-49cd-954e-4f7557d1c1c4\n875ab354-53eb-4b4e-bf3c-517d9299ec14\n69b9f587-38f2-44ba-a874-1b691781e916\n25498085-961e-4c54-ad7e-2268a0cc3ce0\n4d0cf4f7-4dfa-4e41-b7cb-883760c40a28\n398d3eb7-7997-4041-8c10-6d6baee32373\nc2387552-0be8-4ae3-afb3-50f2e06a77ae\n83ec37cc-aabc-40ed-9f6d-ce4cad7ccf2d\n1f089962-d824-4273-bbbd-58d50a1485c7\n9d946b2d-0075-4183-9c0b-c1887e121946\nef052871-8191-4d7f-8097-918432ba9a93\nf0e6c061-6103-4c28-ae15-dfcbf98d2efa\nc418dc5b-c1dd-49e8-8666-2d497ef56d81\n41c2298e-7c57-41c2-b5e9-896ba9cf8cf6\n590d6a6b-8abb-46fa-93b2-e78f91d54339\n43a3f87b-22e1-4479-99d0-9ef1f1713d82\n00ed24f6-f32d-4c9e-9bf6-b91f4310c558\n0e5aa851-723f-4df5-81f3-bf14fcc478f1\n4722ee3b-3e77-45a0-ae6b-057d5c933d7d\nfc6567c7-0c4a-4436-8540-f0a46cf84b7f\nd78468b7-089c-46f7-93b5-d83c30d7f43e\n0df14823-0a8b-40bf-9c6a-fbcf0a1328c3\n21340cba-7db1-4caa-85f4-a8b2c138eded\n31d15fcd-5b8f-4824-8079-13a161e5ef25\nd1fbadbe-60dc-470d-bd6b-8f56aa645472\n45b42985-4202-4d17-a962-69de6939cd0a\nac3d48d2-6e8b-41d3-b2e3-99afa0befe0f\n0f35fd52-216c-4b71-bcd6-07114b33e9ef\n48d9eb57-9df8-485b-a884-ecd470d6a785\n77318338-b784-42a8-bba9-3894bec1595d\n0eb67f18-62c9-4727-b5f4-49b23b952914\nacf955b0-fd2a-4a2b-a521-0b40266ca9b6\nc31571ac-fe67-4b2f-a467-d2e6d5f04c83\ndcabcf52-d64e-4670-bf53-4fead45cf87d\n8ec2cffb-be44-4d01-a797-5e9aabd5f7b5\n67eaad6b-f28d-4ecc-834b-8185c55d3ecd\n28e90951-f54f-47f8-866d-77e37a688022\n85efec25-c9d4-4cbd-a31e-fec20be16a89\na06eff22-0b53-4ce1-92a6-de2f6ebd1cbc\n17f6229c-d732-4aaa-8bb0-4d58d57bf2c1\nb1d980b2-6710-44de-9503-3097e03d8698\n1aa407bf-2239-42c5-9ea3-ca9ce4a8e0ef\n494de9a3-e338-4871-987b-911403131cf8\n0960a01e-99b7-4b77-b4fc-a928d8a560a4\n1ac55754-a70c-471c-b332-e9ca24890539\n73c7d5e9-b2ef-4503-9a17-25fa691425be\n58d720ea-03bb-4281-8e6d-2943526e1d45\n4cc56e31-5e19-4263-85ab-6aa75069f182\ncf9082fd-66d6-470d-977e-d29b8cc470f9\n87c848d4-f1ff-480d-bf65-f241950a8567\n74e58a5f-4411-4991-a263-a7fd10d448b4\nd15f4887-4694-45de-9217-b4d3eedca5f6\n327e237f-586c-48f6-b65f-4e6e9152a673\n3eb680cf-5856-429f-927c-28a6645f1890\n2937732c-3d48-4443-bc22-1e0bc05219b0\n9ee3da89-44dc-49c1-940c-a1be52156652\n928ae51e-fdf2-4b9d-b81d-c449bb9c194b\nc9ec6e79-8ebc-4610-9ff6-8f2704d35fd3\n0d94a19c-3d5d-4326-9042-621db2e5aaba\nc556a0b7-caa0-4be0-affd-e522da10f576\n92edc6d3-12b4-4385-96c4-7dd15fa1bdc8\n3344427d-b781-4a34-b33d-256db812094e\n12c596f7-5e2d-44c2-ba0a-5507ab57795c\n5bf6a13d-9d37-42d1-ab7b-f3500ca6e064\nbacfb216-22f2-4806-9ad4-e4d6ff178a52\n1a96b644-b49d-48d2-9949-0ca39519a63c\n820e8ea0-ad3f-40c5-b87a-80e7ed01a54c\n5245377b-a4f1-42e8-a9f4-c1d2c90869c3\n01bd79ce-87b8-4573-baad-06dc109d26d9\n6e5b20b6-c3c7-4a70-9e47-d9f5120cbb76\n497b201d-6865-4cd2-a9b7-4428ac71f906\nc0e66a46-cf1f-4474-9411-2250d3166cf5\nb628cf36-745d-4a7a-8453-3ad01795a4b5\nfa94b9fc-9669-472e-80d9-b6fd266a397a\nb7b5066e-0b0e-4d1d-a11d-493a2c246307\n8fcab856-ede6-451a-a9cf-30d5b8341c3c\nb2aa2908-acf1-4850-b9de-7dc6edebc0c6\n226385f4-91bd-4b21-b0ae-3b744361522b\nd3e49f38-88df-494b-8c93-a18c114acf6b\n4516215f-7fc8-43db-88aa-2a25f390faaa\nf120de67-edbc-4d53-a23a-636d173ca855\na96ce3c5-5608-40af-aa86-7635eaff72b0\n6710c9b7-5afb-42a5-b240-963e151fc422\n6e08b0d2-77aa-4488-9b54-9fb0a7f34347\nf283f0a8-e6e4-4f41-9027-4bf364f4b1b4\n6d737f0b-4fd4-457e-ab01-10b9e29890d2\ndb3c37d8-21d2-4329-b73a-e82aa75c78fd\n6c36bc69-13b0-4454-8779-bf5f76fdb126\n0da07f5f-6379-49b7-bfe0-46a289d9092e\nf7dc42da-58ee-4079-87d7-b3c609ae0478\n4f49faae-1550-4c11-a832-ab567e1a9e02\n38d1c903-adf0-4610-8dd0-280bb3edc125\n9c8c1a22-eb65-454f-a7c4-16ecf7254cd8\n6d20bff5-3ed1-4ca6-a4f1-ee5661df6026\n7a7890a8-ab44-4214-898b-0c74f5d373cf\nbe35a488-b65c-4d09-8e6e-28185deb1b9d\n0ff3e276-8e28-4eb5-84b4-a7a3a4045fd2\n49e2b02f-f725-4336-8ec1-a890abb6a03d\n3e2f1c54-5d98-4fa0-9ef3-267daecf9616\neb76fd7c-7ce1-4bc8-be16-d70e20f56161\n1691d03b-89ef-47b3-89da-f0596c6e155b\n19006a6d-f56f-43d1-9623-c85b5fe519b4\n6a97b7a9-a335-4a6b-a356-faa001fe2c77\n8fe6ce97-2884-4109-96b5-971cfb04fa1d\n7bde10e1-f777-4da7-95a1-6a70a718756f\n9f1521a6-d780-4cdc-a8ec-b81400440286\n17c7f387-403d-446e-9257-818aefe6a141\n36eb8dc6-64ef-4717-ba05-1af77d9060e9\n87688377-5f89-4eaa-900e-c039cd82becf\n2972ae1c-b4c6-4cdc-b468-eb0e00436e81\nd6b475bc-6ffd-477e-8499-d3fca53bf33b\n2ed593d1-6fbc-4b2b-9f0c-319b9569b6c8\n9bd33156-cfd5-4d98-ad4c-67277c488b70\n2da8ea82-4cc6-4060-aa35-23ac18fe0981\n77a29ef7-e643-4ce0-a3d3-05f1bd3c2fe2\n64bdfdea-1572-4862-af16-b294c6ac4f14\n2fe46dda-e5af-4e8a-ad5d-33e777bd1cbc\n95a7e846-5cc0-4d26-b341-2e3f6e82a4f3\n7bf72bbe-21dc-45bc-bb74-4f0962e3b94c\ne28530e8-8881-4a4e-a8b8-c9a6fcd3ca98\n582b08df-ef8b-4050-b3f4-6bb59980f05e\n301a3af3-818d-425c-b7f4-b1e1408b831b\n3006d979-0da9-4e9e-ab39-3dae2ce97b9e\ncc69b03b-afda-4ced-8b3f-610029a4106e\n4dfa022e-2c06-4dbb-a45b-fd47a6e63aac\n212a6050-6cd3-4307-b22d-8320932e1f84\n1f7fc920-ce41-4f23-87ac-2cc9d701f01a\n42e156eb-013d-4176-b4ee-b55eccdebc32\n51574d0e-4daa-4fb2-8965-e66283f842ce\na6f3439a-deed-4a39-8e49-1eb990ca1f3a\nd8879ece-c2d8-4476-83a4-56a014ca26d5\n92417077-7198-44bb-8aea-64e103bfe410\n8c35017e-9984-4e36-84f2-10c2c9b746ab\nf7bdbb90-941c-42f5-92c4-60d787811348\nf0eda246-b1e9-4d5b-a7bb-8bfd0e9be1f0\n7d421c7c-c80a-4903-a5bc-3f8b314d3517\ndf009716-b6cc-4c60-9257-df229dae7a82\n8cad23ac-03d2-481a-9cd6-45061b06f631\n7246ddd0-36c8-44fe-a91a-b9b29fb2d4e3\n91cdcd73-db62-4314-91d9-b69a91a5b332\n511c64f8-6392-4faa-b5ab-bd47146036bf\ndf8390b0-5867-49f2-9d61-13b6fafd85cd\nb92a4361-81a3-4864-918d-2586a9e39a5d\n85bc2582-c75e-4109-b2d3-cd24b220af92\nfdad3db7-3795-4ef1-a88d-e196e3b7eaf4\n8f67f4a4-c7da-4e87-b1f6-e5fd40ef485f\n696273cc-3d74-4dfd-a6b5-239f5f140f40\nb902242a-5427-4efa-a0be-81dd33d6affc\na1165533-5f74-4c24-8e09-df294c6d361d\ne8063bb8-4af9-4a1c-9095-e94dcbe1a8b0\nf32b3585-cff9-44c0-b433-b0c1df639af9\n18515ca1-2af2-45b6-a783-907605b55d6b\n28105c70-cd27-4791-afbc-c0b40e544952\n09de901a-93ee-4e63-a81e-d005a352c6d9\n2128ce6f-7172-44d4-9735-fcb54183955c\n471e96b4-25a3-4729-ae69-f65226c66ec8\n3248dd31-5091-4afd-81a1-f9280e47cf11\n536b2510-6be2-4164-a35c-cb8f5e9e3f54\nda1396e9-7b65-48bb-b4d9-675c2a6dffd9\n310ca57b-2ba0-4aed-9cfc-6816bbf2aa7e\n7e67fa86-8d27-4851-85ab-bc298caed846\n1a900d86-d1fe-4754-9892-4c97f6754789\ncd078159-1d83-4b24-b11f-c4a0a1696cd1\ndc0af0df-7edb-466e-89ea-c08e843bfe2e\n095c9d58-6567-4c82-a488-843bdf4d3ad0\n0ef75c2d-c3bc-4485-a584-f017c6013cf1\n821e9eb8-cf7f-414d-b094-be770f0d049a\nee0b7683-c388-44a2-8248-082c479f355f\nb725cd1f-5c5c-4511-b47d-f2f93ad72c0d\nd72b695e-4645-440d-b565-f79b911c7378\n8cb48356-7d26-4fd5-90c8-0f5f0338b650\n72ca6d72-d264-4715-8293-eba713b25ecd\n23fcb0cc-57bc-4ae0-a1c3-cf99713f72af\n952068e3-0fe0-4ccf-af4a-1f0be810ed90\nf810bd67-0b2b-473f-8043-78916d3f2b78\n6685e1e5-1801-4512-a8d9-05d3a47ebb5d\nfc23ad5e-b8cf-4fa6-a282-2121e0381091\nb995ac8b-4c55-412c-ad94-f2daf7ba10bf\n90ddc8aa-fa93-4153-a724-adbeee62300e\ne4c82378-0a69-4ac9-b688-82a7c8fb3098\n784d3c33-d148-4f97-b625-6e13b2eb4dcb\n5ffd21cf-4d87-4b08-8a47-06c4228673df\na32ef1af-db4d-4468-bb37-f3c0beb5bd3b\n0b08c923-d7ef-4483-be7b-eac40769b6d3\n0f331468-85f2-4cd2-8f9e-564e4ee9cf57\n136e3436-a989-4716-a6d4-d555e993eff2\n202ae782-35c8-47e8-90a4-8ed0fef1f727\n20a1086d-df65-4aab-8e30-768baee37044\n31af8185-0d62-494c-81d0-1d59aa729c37\nedc17f81-4e99-4d14-9645-36f2e7069162\nb9678c6d-c59d-404d-8bc0-f3fe049554b4\n3c987fad-fc29-47a1-bd01-9f9c439af059\n1e6516fc-b375-4a76-aec5-6eecaa7f1bfa\n5f5d0c5e-c32d-40df-9820-e5675b4cea4a\nabdb631f-05a7-4536-964b-39faf4ad47f6\n4cd12426-d3c3-4051-8772-6870baf206d4\n6a7c3663-1173-4d47-af45-6452999181b4\n55f73150-1584-44e4-80f3-14e65531fd49\n5a0bcd89-6015-49fa-a2f1-6c6ef3ea2de8\nda043c48-6088-489d-9047-f16a9b29fb16\n2aa4dad3-c116-452f-9f5e-fc62fdf96baa\nd55af8e6-ad4b-4930-b0b4-adad45a961ce\nc54ab2f7-97ad-4bf5-94d8-417718659889\nce8fc6eb-695e-452f-971c-5e5308eabbb8\n8ab4b6a8-561c-43d0-8dcc-29ecf5252c15\ncd1125f5-5c25-470b-bf23-017d214aad74\n5c1a587e-b423-4df0-bd60-927f0eab47f9\n031c2bb0-dfea-4de4-b4d7-17421bd38143\n408c5aa8-9d65-4ed5-b186-fa1573887219\nbca8809d-db4a-4b1d-9024-eb6bc436ab36\nf9b7f330-98a8-4378-97f3-2d4a418c5116\n73fbc3cf-69b8-4dab-9157-ee42174f0f86\n2fab8e4a-f0dd-46f4-a2f8-d8c113395b89\n9775caa5-4abc-401b-a4f7-64aa94f6a6e7\nee34fe62-1542-4988-bd3e-894cb675ee87\neca4c17f-df05-4ea1-8371-398393794f8a\n0e386de8-6cdc-4f7d-8c17-ee4d24a8c63e\na0c222eb-cda0-4471-b431-c164da0bd7a9\n5e20aebd-4aee-4113-b01e-bf6940675f62\na193fc5a-7d66-44b5-af4d-fb5832cf4c1d\nc0dbde81-2a4c-4954-90bc-03df9fff5b0c\nfab01cc5-15ff-4b1a-bf50-683b88d610ad\ne7a684fd-f8e0-4853-98dd-87a12821af1f\n87635f0f-32e9-4f94-9931-89dca84a2927\nc654e97d-cca4-474c-802a-58b47a4ccd9a\n29847b25-c31b-48cc-b225-efb55ea00488\n82f69a76-52ff-4499-9702-f464c03c11dd\n73471a47-8114-4263-86d4-cb869651e0a2\nbf0d6428-71ff-4874-99a9-afd3d7685512\n07bd05a0-c833-4d13-8005-ebf3ea8b80fe\na291ef6d-eed8-4653-bf85-dfbaf0192510\n1a28795c-3db0-40fe-9f8c-cf9310edb712\n631e7e3c-1feb-4ed4-9e7f-f156e689276c\n9590a11f-37f9-4a4b-bd30-df21adc42da7\n174a4530-0c83-4d81-8223-56b067481ca2\n95ea1b05-a9cb-4cec-8ff8-f956b3b36a6d\n2e3dfc6b-bd54-43c5-ac45-e339286d6c24\n5f698796-7b39-446d-ba5e-c1f3f997f85d\n13c28bab-18db-4bc4-8fe2-7e4534023676\n52bae8a5-963a-407b-ae12-fc750e60be22\ned218553-3607-47ca-b921-5c5cb65981bc\n78def7e4-6f40-4b1b-a67f-f40d23377a87\n9e9f6b58-e0aa-49c7-b689-2157f4e9f6fd\n984ddcb3-78a2-4bb5-82e1-385bf01f002e\nc2938a0d-8abd-4122-baad-e5d761acb00f\nf246b4bf-df9d-4426-92cb-796cc027eb45\n74048b90-b29c-4db6-a596-94797b39e863\n8bd9dcdc-9c9c-4ece-a6a9-7e51175135af\n9aab846a-9f68-40c9-8eed-1576dbe2c1fe\nb3df97c0-2710-4897-af03-10df30da386e\nc9f2f3b3-ea13-4c0d-a38f-52e2952e781d\ndfc798b2-237c-45d1-8cc3-459e6966ef01\na07f2102-9b09-47eb-a33b-2a665cd2aaf0\ne0299036-0eae-4066-88a1-df6f4a3bdaa4\n852e1d76-69a8-49a9-abe6-b3f78516a1cf\n72cbe53c-9969-4f1c-9084-47e76a72646b\n01c6eb28-75a4-488b-8fe5-e0cb821992bf\n6ca147d8-8e1a-4b6e-9c4a-6e9c17f3e510\ne13645a2-5772-4fe6-b08e-555486dd53ac\n223a124e-c343-4aa3-991a-ef39831579eb\n2f83f878-c8ba-43e6-b78b-11f24c01e414\n9657f597-f6c3-45ff-aaab-4c81292dd4c3\ne1beb790-5c51-4c7a-a2a4-c38b87bf21d5\n170074c3-1c23-4a4d-890e-1228379d9a22\nc25ab7c7-4f15-4167-861c-c163991ebb87\n2001cdf9-5111-443d-8700-57054bd6f59a\n0f3a3ee3-21b4-47f8-942f-3389d4203353\na0da3682-e846-4b5e-bc7e-b8430c1d696f\n7067277c-9ef9-4205-b98a-11bba4630bc4\na85ffeb7-8df0-4618-bc12-24692d895658\n61e479ae-fb87-4564-9cf0-fbbf6aff9f02\n92b58306-8d92-4de9-af66-d19727ed5fc6\ndabc3e9a-e211-424f-8450-ac80f07729a1\nfb9a064d-8bd7-4fb4-9e95-90ebac24c73d\ne38f78bb-5438-43c6-ae1e-c9633ec08e31\nfcd1f0fc-0fab-4e79-942d-e9ee9f376661\n803cdcf6-1938-4c57-b417-ab79c7491ada\n261475ea-6ef7-4569-a216-56a7f08b54b4\nd878baef-0b1a-43b7-a182-690c3872db9a\n7297b1cc-7847-42ca-b93b-89b1dd9b258d\n9332c79c-be8c-40ec-b4c8-deea7068bb8d\n30320b09-fa52-4860-8bf5-9f1476c0abd9\n2f968b9a-33ae-4fb9-8583-ddb5633f3ea1\n58026888-a86b-4155-b432-41716f86d344\n10b60f34-cf34-44b2-9a41-366aea8087d1\nb2542bf1-c116-448e-9c64-dfa76f1e20a6\naa9e9ac0-9e01-4f71-9688-a9fa8e076ad7\n0f2b6248-3e36-4c44-ba48-d84e9b726937\ncb0fdb4f-b93d-4968-8bb2-bcf626f100c8\n672ac3b2-139a-49b6-af7e-6467d84f086c\nd4297bcd-56b5-4256-8493-18e7487bccf7\nfaa50ab1-8442-4db3-92f8-e900220d025f\n71a86826-30f2-40e0-bd70-c2e7d6643e50\n1082b7c1-f755-45e1-8c01-d8f7a1b73df3\n8536141e-a9d5-4723-b1dd-a5535638e50d\n64b69512-4118-40f2-b38c-beca029895b2\n0c23ef10-6d9e-48d3-8a31-0086d0f9c874\nab9d3fac-a821-4b92-9645-4b5a5ca01367\n69b18709-c081-4c4b-b382-008e355c11b0\n66db026e-fef2-4f1a-8cde-4b126a1f5b5b\nbef54585-3dec-4625-bc41-890c592fa6b4\n908fb380-9807-4406-97ec-dc0c37e9e5ac\ndcb41fc4-74d8-4c28-955e-4d8fd4e2da8f\n1d66d883-71ca-4d2f-873b-34452fc33140\n134cf2c7-f338-4cd1-8bba-6b864c718439\ne4f86070-5698-4a1c-87ec-534408885f20\na525b9ca-6467-456b-a3a1-a0c640184435\n8e7bcf6b-acf1-4e1f-aade-8b998a6172a2\naa541dc4-c5fd-4af3-89bf-af6bfb8dbdef\nd615ea51-d3af-417e-81bb-5138cd50c722\n10a58693-305f-48b2-a276-ebaf175a6e23\n57bc16b3-69d7-46fd-adaf-1e99b6eded96\ne2c7a4de-c817-4a12-b6a5-3a52b3f1b6f6\nbd9cc801-3ec3-4937-9c22-1fec499dc4af\n94c48ee5-b7b3-4d6b-9a49-b1935d81f544\n130bfb38-6147-46bb-867b-d2dd2bfee8c9\n9df22f93-f227-4d93-b24d-80c7a4a70168\n84a069b8-3f98-4e68-afcf-dd349bc3046f\ncf72501b-4319-49ca-888b-ca829b6210bd\n3aaf410c-198f-4e14-a8ea-baa825bf6957\nfcc607c7-d367-4532-8448-959f7e69b463\n6d169f2d-f7f2-49c6-ad94-1a9063cb52f9\n891de435-289e-4aec-af6a-5fa71bb99245\n895a6451-8e46-4717-a675-00b78459e3ff\n0e2305e5-78db-4594-8a6e-df0a68be99cd\n837d48df-ad73-45e3-9aba-db4d06342223\n9d1fe2b8-699e-49af-901d-132051dd8aeb\na9083a0a-4ac6-4e85-990f-06dcfdae35c5\ncd675aa9-57e0-49a0-ad20-20972c15c739\n6368903d-fd3b-41ea-9486-921ed298d150\n30a35a06-6422-4825-90a8-ad8b52e032f9\n8fe4fe00-b959-4b75-87fd-9738354ba7c6\n896ebac9-1d57-4c18-9804-aa38d824af36\n3ac9f315-fce8-4383-b480-87fe1e8e63b3\n9eeeb3c3-0995-4928-8013-31eef7d92f9b\nc66a4f8b-cfa0-4d19-91eb-dcb0fc971f70\nd6b8d7ce-6fd7-4392-93fd-ba738cac9a7d\nd4189b1a-088f-4f2c-bf65-55a72e998504\n9f2bde18-c76a-45c9-b337-6c450225b6a1\n02bac6d2-8388-4e2f-8ab8-da34710cf933\nb557a2f4-915f-44f7-a53c-ec3d658b6ff7\na1bc71c4-e53e-44a4-82a8-163ae7f4ae44\ndf1894ac-7f57-4356-9884-7ecd48564a17\n874072a6-e3ca-4a64-8389-a0c5235dd679\n3726f374-de20-4d92-a7fe-501fdb750071\n347f0395-b1e9-49ed-9ab8-281a88f3e260\n159c8ff8-93ce-42be-a0a9-a240fa263880\nf8f6dc53-37c3-46cf-8d8d-b6300a1b0fe2\nfde9f061-fc15-4609-8b2e-48719be2d9a1\n34afed4e-4a36-4149-92e4-b0f1dd3e2701\n3bb2c643-2e49-4efb-b845-9cf87ec9d738\n83c79448-a968-4bb4-bbe5-456c83adb1ab\n2398732a-2936-45f4-86a5-ee7156ef9cf8\ne6d5449a-fcb4-4b7b-a09c-4968333326f5\n07638fff-8ffe-4126-b289-70df39359aa1\n458b41a3-8215-422b-bf70-d35c4fad400f\n6c1e745d-9fc0-4fef-acc0-ab15821c8a78\n2c6a86d3-3ba7-453e-bee8-98a0dac16935\n34692fdd-cdb8-4821-9211-8c6d7343b2ab\n490de09c-a6f8-492f-9b71-401603d01c69\nfba4f8f5-deeb-4403-bbe8-b56b16b3e4df\nd97ee9a2-9214-4482-9331-5af4036ffc18\n586c2af2-d3ef-49f9-ad33-84bc6fe114a0\nafb5f9ad-bc9d-4ca8-8cda-acf53c0acd9c\n329412bd-0b53-4722-9a3c-3ecfe11aa3b1\nb5975c7e-4def-429c-b760-07e4133cb4f8\n7b8a7ca0-9c48-4518-b05c-513370e6fd4c\n47570c5e-db1f-4ce1-baad-d6a3826de3ff\n92130e99-66cf-4292-9395-690e266bb24d\nff57edaf-0add-46f0-af64-d41b1abfefed\n7ae02491-875c-498e-8396-7cbb45f1eca9\nf49b1f5f-c19f-495d-b96e-98456119c5f1\nfff7776c-400a-454f-8eef-bfbed6d62531\n10fbf5cd-dcf1-4718-91e7-9ab8c022c365\n4873d8ec-95f7-4f4b-9b6b-7c3901409cbd\n8f4d1575-19bc-4e31-aefd-ed2b31befbae\ncf6ec189-32cd-454e-bf1d-f2f5110be5c5\n51edd4ea-d62c-4490-b9dc-fe3963d69930\nf94d4f2a-e33e-40a2-81b3-457d7f528edb\n247bd13a-f482-4ad4-8cda-9e97e0a2e521\nb699b14a-7529-4e1a-b2c5-37188a86f982\n25c5f4e3-a2b5-48da-854a-f901e846d098\nf567f9af-9f27-438d-84af-be45e3f0430c\n462e249a-18d4-491f-b12d-b2851acb7c1b\n910b93f9-b024-48e9-912c-239c49a03cb4\n9d06858f-1b19-4a46-be8a-4240f7106875\n0fc40063-ab14-48f9-9536-71ab5b29ed91\n8fc65427-1670-4b48-882e-10305bb4960c\n4d32e8ee-e8d4-4735-96ad-16895e2c4200\ne7f394d1-ce56-4222-9a5c-cc9da2266560\nf591e0ec-ac35-4443-bb35-69db2081e7ba\n4ca49739-119b-405e-9539-2247fa1f242a\n46d01467-144d-4bde-a817-1ec722d94bdd\n1bd37a8d-740e-438c-bd46-fef26641cc2b\nef0ccf3d-3c9e-4d43-8f6d-76727ece4a9c\n6c202c50-4ee6-440e-ab9f-9d9169b49c14\nee2a4954-3f16-4097-80c8-c13bfeb73672\n723a301c-19d7-4a3a-afec-64a2a526f226\n5083a1f8-d8fa-4873-acc5-98587fc8da54\n49b4fd3f-73e2-4135-a353-537ef43c2ece\n461a933b-379a-471f-be43-6ce575121837\nef984244-8604-410a-99ec-8cfd5812abb4\nc9b22a10-e309-4d81-b3f9-78f910a66ec9\n1780d099-b218-428c-944a-34dd034c7edb\n7ea507e6-2303-41c0-b7d5-d8d33d0e58b5\nc3094d35-308d-4132-8abf-4c18373c028e\n7a95d291-16d4-4d7a-a5f4-b125af94aaf9\n5bfd82c9-9d42-4ee6-b96b-e57b9abb52ea\n274f7382-cca0-42ae-874d-b8f80de63f2a\nc8db801a-7afe-45e8-a0d0-74465e9a322a\n03b3b42a-1a0d-4b6d-b4d3-804cd73d7707\nadbad4c0-5b87-4cb3-bf73-819b2020a707\n793e8e2c-5b4b-4a42-a2dd-84ad676d69f9\nda1bc4d9-3a96-4d67-a2c3-42f8d922e184\n25c0b874-3d14-423f-8191-9cf22a22a253\n4f966605-40f2-471e-bff7-b36c317dc843\n934f73aa-62c4-40fe-a89b-37bc079b43c6\n436a78ed-8b96-4733-9519-6921f30bdfab\n24b72f2c-1e03-4efa-bee3-185a8e8f06f1\n4bcbf27b-3140-40b4-8c00-2ad54278eeec\n110ab51c-7c0d-4d1c-a4f4-a3bef2a7e193\n521c98bf-40e5-4302-92a8-5d2b5e3ff9f0\n2f827285-1793-458c-9d4c-f8802d35609f\n6a691eb6-57eb-4dbe-9182-27de55343015\n1a75730e-88cd-4c9f-ab6e-690a75edd3dc\nd615345e-afba-4c0a-b86a-9433222dcb5e\n396e09de-84e1-4b11-831c-d5272934eae9\n7b623394-60fa-4170-baee-886fb809fbfc\n0bfd3643-9a79-4af4-a530-82fb00a20264\n17cf1f7e-9de8-4f32-96c9-9b27be38e040\na396c21d-aac1-46da-9517-b78bb16461ed\n82e8b686-9575-413b-81a4-ed5ae3e17c67\nd1a19db6-99da-4a84-848f-3fd6d29363c7\nd7217c80-3562-40d7-a581-f6bd903a6e55\n6b1a6671-f716-4c9c-b582-761a294bf958\n80b496d6-0f0d-4062-9b84-e4a6fbfe4ff2\n47dfd4a8-2a22-4feb-acff-37aee756b671\n1c3f0b4d-d342-46d8-a094-256d938c0e19\n7ea645ca-4395-491c-8eab-ae0ad308302c\n9d26a6f4-1528-46ef-abfa-52bb5affd587\nbbc84281-4521-42b9-9b56-89557548b5ee\nb36c7eb1-3834-48b7-8a18-3bdb6cd1bf7f\n7223beec-8534-4283-9119-2028f85a19b6\n7c943b70-b64e-4df0-a86a-3cffea239377\n92ef7d45-d996-4141-828a-e7a901212b8c\ne20d9f87-ce95-4708-8070-751ce86eb180\n5d6421d4-334e-482c-89b6-05ae69b40b5a\n5d7635dd-c9c7-4b3f-a72f-b4e42fc3e5cd\nf9219398-07fe-49d4-babc-fcdcb6e70039\n70e60d60-b924-4a36-92cb-940d517a43e3\n391cbf36-f149-4420-bf1d-767b204ff934\n8188c0f1-4a75-4669-88b6-512c622ed206\na80c54c1-367e-4cc2-ac85-f7730a11c46b\n120af354-090e-4072-a427-49088bad4e02\n4d40bbe9-0d4d-43c1-89af-738e0ae2aaf3\n3347411b-a26d-4263-b5bc-6a0580253516\n1561fecc-12dc-4f1d-a8fd-d50c845a797b\n442eb0a4-9a59-48ac-9550-08450422b9d8\n970916b4-1f44-4043-98d4-21d8a5609bd4\nee61a257-db07-44b6-bf30-5f9701c594c4\nb834fd56-dc79-4df8-847c-8bf1a0cb3089\na9786799-2d07-45ce-a10e-9ac589f570fb\n13f7fa7f-a034-40a1-b5ab-813ce9b7e366\n6be09f24-72ae-4983-8077-44e553f1d0de\nc10026f5-0b56-4d9d-ac6e-bdddd39eea63\n9e4cc8c0-09f0-48a2-a6c4-95137aa81d79\n4656d9cf-e823-4200-87ef-1d3307bedb77\nf9c9fc5b-764e-4f50-a502-d366ca5c2f4e\nc167b31a-9d31-45b9-8132-ed5c565d8808\n97face62-2307-48d4-8885-0d243972fcf3\n94074353-81ef-47f2-b165-c6ce170aad6d\n3a59be91-ca2a-43ac-82d5-a2b496edc1a9\n6f24d5a2-a414-4ae6-9015-62c7b26a762f\n48b3913b-e6f2-47f4-84f1-120bf67d0a22\nef304da2-0ea4-46e6-a507-f67d5cdb4528\n98af5a73-0774-4b6f-aa9a-caa8aa59dedf\n43a40fa9-e67d-445b-b8cf-dea8ab99f131\n8aee841a-059c-4e7b-9615-1c44908c48e4\ne4097646-ddf8-4a5d-a766-ad765790bc0b\na4ee223a-5151-4c59-8e3e-2983260808c3\ncbe0d9bb-e767-46da-be9c-c842af4f889f\nf6238772-3de3-4be6-bfb0-0af6ad6c8eb8\n46a84feb-9cf2-4cbe-94d9-3307df5fa4fb\nc1e874a6-38bd-4364-8c3f-645679e39e09\n55276570-58f3-4db0-ba16-549a2b392f10\n630d6f7a-4da7-4a58-bfc4-2867e35afccd\n294ae1bb-7f8a-4dfa-bf1c-59d77e67d31d\nc4aa8d0d-4ceb-4ed7-8a61-663708a1670e\n9b6ee3a1-b59f-4589-9181-c4b36e3efba6\nc2fda413-58be-4868-a044-e1aa0c24a2d7\n522a82b9-9e08-4f33-bc93-fbcd49a8c27c\n0e3dd118-3b9c-41e5-9f12-a5366f069107\ne09f9c9e-6e80-4adc-9648-eaf1626be953\n169f1ce4-23a6-46af-970d-4cc0a2ad0990\n8f21575c-8358-409f-a35a-8b66a0a272b7\n6dbafac4-b2c7-47a6-9c4b-4782e54e6647\n214cd3d1-ea8d-4534-9036-5803d1b7aaf1\n6c5be81d-548d-4fc6-ad14-a5a51c07589d\n6fdf59b8-259c-4e9b-a133-51ee420c1922\n7e8149dc-d75a-48cd-8a06-ac586a05667b\n1582839f-81c3-4e25-bab0-892e69329ee0\n31ddf192-1ee9-4291-bb73-f53e3f7b7b38\nb043ba1e-7bd8-4f9d-80b9-791339f07681\n7671afab-adeb-4085-958d-ffb22b812246\nfedc063f-f6fd-472d-85e7-3f4b07d19d60\n96c6ceed-34c6-4c2d-b17a-ce82bca02010\nbf08ace5-17df-42d9-a6e9-34a3ac1011f7\n86520df7-a13e-469a-8ca0-1a4ef4c2bbf2\n37f1d525-d3d8-4ee0-94c7-4fbee60e0e3d\n41f2beb4-9553-4187-b2af-0d5b694fe4d7\n6a9cef4e-3aa4-43a4-b6b2-d5972adfcfdd\ncf754dca-8b21-493d-84c3-a18f557df201\naf50b590-6d32-4b0d-b057-7c6896b3f63c\n0d007330-3662-4dc4-83f4-a18d1109de96\na92b16e6-cb0f-46ce-bb64-88b34d7d5bce\n83dfd1a2-8662-4a0e-9cbc-44e9ae581383\nd13b6b74-ed13-4032-a929-d2a5396f3799\nd99578be-c549-49df-bd21-b43549be4ac3\n5351d698-b18a-4b7d-822e-f9d4f6a33c9a\n18022ddb-daaa-4d34-80b5-a6a3ea77e3b1\nb84b2e61-0523-43d8-86f5-f8d8150ab002\n40d701d9-9ce7-43d5-b159-ca28e0f0a766\naa65ce9c-528e-49d8-aeca-65eb14504aea\necb06f40-1737-4a03-b83a-39650056aff1\nec4d657b-08ea-4aac-8d98-5972201dccbd\nb02fe9fc-9367-4be2-8ed9-ce691f6f40f0\nc8fd9e7d-3d7e-4886-b841-c66315dbb9a2\n87e90038-c8d7-41fc-9f16-eea1734770f4\n28cd5e0f-08b7-4d96-bbe0-3f5a34a543c1\na2380eda-4610-4de3-a61f-fb60e248cb78\nd5f98f1f-9439-4663-b5f5-12cd874968be\n5f0c835f-f40e-4269-94ad-2ed4eb74007d\nb48310db-fafd-4a4f-a6bb-2315ddc8cfea\n4db70a9a-3687-41f8-a489-01b8d7844345\nfedca54e-ee00-493b-abc7-7802c2a18f98\n18245919-be1c-405e-8698-3b79c930f196\n96aef87d-525c-4945-93a9-48fe55dae1d3\n3074440a-fc3b-4fb8-8f18-e62f382ec264\n8ce0a3a7-22b0-4b93-a568-270b0e8577a4\nafd5f09f-7aae-4665-b4a8-2b3762ca78be\nc7a4276b-2caf-47d0-897f-85de09561c77\ncf3db986-d107-4e37-8268-a0573df35ad8\n98ad31c0-aefd-4a4b-9211-7d2ba6cdc1f7\nfc4d502b-8bbb-4024-9ce8-de9d8a59a2e0\n8ae48667-7091-4659-b569-8ce1f3a6cca6\n495f40cb-11f2-4bce-811d-0568c20c1bc1\n617302d2-4dfe-4454-954b-2c6f107b97ad\nf5f9d04b-a2b1-4893-8ea5-3da708a506b6\n3616d6c9-4d5f-47c6-9cbd-637d62162161\n6141a7de-c853-42bd-8f45-172cf73d9e6e\n1d2bc0fc-6586-47a1-a8f1-9e6978dfb029\n966fc4bb-f43f-4945-af33-3f51dc54b046\ndd08b4de-2469-4dfa-a334-56b224c51e38\n5a9b9d02-4512-4a6f-8415-f7def7273cbd\n42caac3f-863e-4188-95b8-89c1b98419fb\n01de1563-be02-404f-89c7-17898bdc7561\n119b5bd6-d1ae-4eff-b74b-5d94edc5a2b2\n0594395b-8d80-4366-b2f5-da0365eaf48a\n5648e8bc-a355-4f6c-9f2d-24ec2d61b3fc\ne3bc0324-d543-4c62-bfc6-1a592fc0d4e2\naeb7ef6f-1e95-4a3a-a886-dca453982509\n0d440019-ecb4-4199-8120-b7ee7fce646b\ndb1b851c-cf71-4eb9-86db-8be7748f6ebb\n64aa5377-b8fb-42a7-b62d-c10e3c3d1ffe\nafd01211-5186-4cb0-b890-55de2cf27efa\n4997a7ca-9f53-48b4-a9a8-cb92471b6ac7\n1fad5e88-c553-45da-9b10-1e35a5d6f742\nf67090ce-3619-4bdc-ab27-ed3a8422d786\n90d698dc-7b66-4be7-8a9d-02f420643dab\n84427d84-f65d-4df0-857f-a62878dae42c\n2b2f15b6-c61b-4444-812e-c8d9dfa075ff\n29c375bf-2281-4e9e-bef4-5c65913ac9da\n157ea3a4-930c-40a4-893b-2669638e80f2\ne15144b3-c8aa-4422-aeab-64d536ddf36c\nc19696e2-160f-4dfb-a796-81bee3e0c191\ncccf41f3-c3d4-4035-992c-f3d7b03cdbe6\nd709d62d-8348-42cc-8a4b-8938ae2fab9e\n26555f47-c658-455d-a31d-9b40d600fd38\n1d46c195-90ed-47f6-926d-ac52c9868755\n4f18da50-7c04-4aaa-b780-d6128333ba4e\n7020a616-0d3c-4eef-b387-7e7cb80a4cf3\n962999e3-825a-4e8c-b110-ca0e0a7eb9c2\nddfaa5ad-f608-45f8-83e2-8fbb443e12f0\n08e90792-ea84-454d-bcfa-a92f6f590f30\n1c631ff2-b4c3-45aa-9910-249e6b6f7f4b\nc38a8eba-23ae-47df-acd1-7451182d0d62\n6c8d815e-ee63-4562-8e74-273e444de3e5\n6ae543f9-bf20-4faf-a456-744b3f40ac13\naa90eb8f-e195-4f85-b63e-48566f471402\nba0bc3e7-a7c0-4896-9978-63e9de113c55\nc099d52e-9a83-43f1-ad29-7181eea7c2b6\na0cabe37-945b-414e-b7bd-9beec4b30fe2\nd86e53cd-48d2-434d-80e9-e48bfb63ccae\n21507f20-3849-4e9b-bb06-3215c25c6ebe\n4ba51bf6-ff45-4188-9055-075c356deb92\nf421cb9d-8b57-457d-847c-b97ca36fe215\n0ef6c804-45be-460e-8ae2-eae518cffb60\nd6c4371f-55ef-4fc2-a1b5-13c509b1f906\ne84646ec-9fc4-42d6-aa43-87dd79f8e0b7\n1e6c30b2-f078-43b5-8121-927ef400d259\n5b940619-7703-471b-acdc-52079bbe09cf\nb3317e8f-68c6-4954-b478-63464b49749d\n14e8ad24-0a6b-4cac-a197-d23b91f6f1b9\na38c88be-94a0-4e25-8477-2b57df51ec17\n399537d9-a652-4529-b9ee-43e2b7358ee8\nf7b734b3-82c7-4842-9ae1-d15a39a29a9d\n81337e71-09ff-4e10-9191-c3271791195d\nd801cd1d-5531-4722-ad35-35f8f484c160\n4d8e4940-ecba-4a4d-967e-27260f598ab7\n53d4e699-db6e-455e-8089-bbf2a90ac6b6\n7b3c38a1-6685-4d7d-90ac-244e7dc04511\n11e61946-00c3-4930-8ce4-cdd817c5b0bd\n67074164-a90b-4078-aea1-777ba10e0046\n7ce4620a-9c3c-4f9c-9f41-f01c95969205\n44490087-8cce-4864-a4c1-dbb46c5ecaa2\ne6e46106-fccf-4d6d-9579-228dd7167395\nfa00937b-9faf-48fb-a097-c79f01eb348b\n8e637434-6936-4d2f-92fd-fcf89e581a88\nc89167f6-b9cc-41fb-9c94-4c2659e81ff9\n5baefe87-91e7-4bd2-a331-1fd80d3d5053\ncb299c9a-b711-44a2-81ea-aa8880a3716c\nb0dfabf1-afc7-4632-b62d-732c35d82b78\na59f9858-d229-43fe-b421-5f58e992ec63\n8b4a9b8a-f9ab-4a92-9643-8c78a91f78ea\n690265b0-a9ff-4ebe-9657-06524b49e941\n4beb17db-77a0-4cdc-abb9-4a66a64cf155\n43fb5eb9-3316-4895-b419-4f4479f88d19\n14cd02bc-5758-4dfa-a78a-9081879b3a31\n738a1db3-f004-4555-ba35-51ad506dc3be\n5e596334-cdef-49cf-965f-26730bfe0590\n1f1c93aa-ce3f-4a8d-9624-e5df0e7ba51f\n9fb1d546-fa47-44ac-a9f9-f3339fef3ba9\n9276cea1-37b6-41a4-9909-738723ce8adb\na414fb40-4abd-4a69-a712-e91b21e70d6f\n069ce0ab-e7b6-4ccd-9085-46ef643a2c62\n2c57b110-afee-4712-8655-625ebfac07e0\n794311a2-5352-443d-a6ed-5e8b8612d021\n745b8b17-5ae9-4391-91fc-8f4c6554ea07\n1ea92c27-1eb6-429d-92cf-6351d1534b40\ndbb037ec-fcd5-41ae-ae14-b3dc99307746\n6a6bb7fb-7019-41ea-8604-ec736ec145a3\n571768f8-f79c-43e1-95c9-9026b77abb55\na1a759ad-d644-4f4a-b1dc-e4a96e21d967\n1ea437b6-5502-4af0-a3b5-2a6c20c0d858\n626d1ddc-25e0-495f-ab9c-e49c38ba4a41\ne852d2e4-de6b-4f39-89bc-b5b31b4c5339\n1597ef6d-4dbe-434e-b767-f213bd009150\n368d9792-793a-4a90-a7d3-92995254d6b4\n3944fa94-1f66-42ff-96b5-c5498f6f1ae8\n0a7ad5cd-91d3-44db-870b-9851d87ec934\n7fd8f9d7-6f4a-453d-b4ef-a1a2f4262857\ne9dc6dc2-9e52-4656-b7ae-1f79c449912c\n586163a6-7f52-4559-9fbb-f6298362f985\n9bb51799-23f8-4f35-908f-692a61184282\n4b862255-1efe-4e03-a655-3d0a13dbd338\n1793ca98-eb78-4d20-a31e-44d1aaf9268f\n225fad60-efe4-4878-8729-d51e84dc611f\ne837b000-bba5-4203-8a94-a3ae39df4781\nd1d3e364-5401-4032-bca2-d9021b2ac91b\ne5e95436-3371-4eee-a733-b6dd8ae6b5d7\ne3664f6b-4ddc-40d6-8c85-df0b85c7c813\nb9a60809-9043-426d-9aba-2b96c442c1c8\na0c7e50e-219c-4dba-ad0e-3d9d4dc83133\nb636a757-575d-4601-9079-a64f12a65121\n2b68c31b-7d03-4520-acf9-839cc25b6f24\n82ed4e83-aaa5-410e-ba05-fa64ae124db4\nc3bf39a8-1fd3-4da2-923c-ecef2c2abe86\nbea9a090-3c12-4e34-bf62-7f8968f153af\n7310df75-6095-49b1-b580-9fbcca7f341e\nfbc2c558-e108-48e0-9ce9-3c9d383774b1\n6d35ad4f-45a6-46ef-a20d-c29c53e3241a\n41dc7712-22ca-46bd-b208-cca92df16081\nb588b555-1b0c-4cd0-8701-71d3766c6cb0\na697a8ab-c93d-4175-a7d6-71ed102937bf\n5be9ebaa-6282-4775-97f8-4e02fc969ee6\nea7b970a-0ed1-4bbd-a22c-54852c344740\na08dd25a-dd4d-4259-8648-d44df8b6e6eb\naad8a6ff-68ae-4499-a5f2-bcfc09b98de3\n0f2ae4b1-ee29-47dc-a680-bc491f5f33e7\ncd6b059e-1578-4cf4-8931-5939d4504531\n821a7e9c-baab-47cf-8e7a-13cc3828e166\nc5111663-9220-45fc-b852-1cf1b0c1d13a\nabe67a18-1a23-41a5-b0e1-443cf61ad5c5\nf9ee0f5a-ef8c-4c65-b602-73852a7f33c7\n929ab2e8-674b-4246-9728-4ffc88063e4a\nccdc9c2b-6d06-4333-8bc0-1b21628bd500\n599218fc-ef93-4616-a0e0-d87b75a249a5\n16c5c4ea-4ae2-4760-8259-c6a7d652a063\ne5ce1433-ed0b-4bd8-904c-ac6517bd418e\n0a74aa3e-df81-4365-8e41-2587aa748a32\nbb2c683a-9709-4c2c-9e15-66e5048a9460\n8949f1b3-bae2-4260-8ee0-397072c5abbf\nf4cdb2bf-7a93-481d-818f-f11eaee594df\nbb3bb614-8adb-479a-bc91-fd23b1d9c2df\n60d16dd5-2596-4f95-bba9-bea6cd62f32a\neec74df0-4916-4c48-84e4-497bf51f2d07\na1acf17f-3c48-4fdf-9043-f7249b46f8cd\na19f077e-43ab-4721-92d2-183c40e96f0b\nee6afe44-41cc-4fd0-bc3c-254c3a8a674e\ncc88778c-c089-40be-af2f-51301ea51209\n5dc7302b-57f9-4a45-9b83-fefc0252b01a\n4865cc2e-6c65-4c61-bf18-74b49c41f51a\nb255f4ef-3dfd-4208-b9a9-deac40653c74\n914cefe2-8b68-4545-8895-2a2b117af864\n933a3a95-2ea0-4f7f-8352-56dd99fbf234\n5aedfeca-24af-4fe2-82e4-389de473e254\n0636d8b9-e107-4a2e-be69-23d5febb2f31\na7982323-e314-4b7f-905d-817a7559a015\nb0bdeeaf-1131-4d21-8e82-dec785a2dbf3\nd926ac9c-4b2c-4622-a9b8-29b75e0999ff\nfcc5ef83-a588-4965-9c05-bf79e040c743\n71ce7047-727c-4cae-af3b-1defb2885aa2\n24578f66-c945-4a6a-bec2-471313d70133\n15d1eb50-c4a4-4099-964c-ad3b4f7ab017\na6c28e91-9344-4843-9bfa-0bfe9c2913a5\n34e37993-6dc9-4a12-bb52-d1e4dddfa71a\n0f93018d-1952-42bd-96fb-4012a21470ef\n25c47dde-3cd2-4c3e-8828-d55019472366\n502fe96e-7507-4a00-8aac-96c5459c2b79\n17d0853c-b689-4733-bc4c-6f857ff6cf3f\n0b446276-a025-40dc-8120-e29551ab9c11\n7c53ba0c-8cac-4e21-b8af-cb3b993ee3a8\n0b4b8aa1-c108-4fa5-82d5-d91987dd02c2\n8e8304c0-9d51-406e-aff7-a4c4025315af\n97115fa9-0314-4584-8048-224c2145f21f\nc8564115-a859-4d7e-a23a-a85e93d6b704\n872d8d52-8a6f-4cce-8ce8-30c27ea3229f\n615a03e9-2418-461f-b515-8c0b2b0390cd\ncf928519-5942-4569-9003-2a2da2ce81c9\n491747e5-9531-4d4d-b242-021974e6f270\na451897e-b2da-4a56-ad3f-011dd0e76784\n376cc207-a931-438d-a89e-4aae80688f3c\ne39c2929-1d6b-4f2a-b66f-9d749d1b0e63\n0ec25f0e-9cd7-4ee5-81ce-d646666a6356\n80ce73a6-743c-4201-9578-e4da86131f19\n2e2c1ffb-66fb-4290-a92f-61477908e2c7\n5ea403ff-ce2f-48bc-9cba-5d57a45fff20\n78c7fce3-5d8d-46bb-8251-c571db883230\n2158a0fb-2447-42b1-8e34-03fc5298bf9a\n98ac3231-6a32-46a7-baf4-621debbc062d\na74943b3-b753-4840-9402-90e4bd8ff23b\n0f33c70f-eee8-4727-b7a3-2e519e3248da\n0b1eab50-eaa2-43f5-8d4c-99e58fd607a7\n8af28133-18a9-4dd1-be9b-7c6820d18009\nf9160101-a1e9-4a45-8918-f2050fa5322e\n22679e70-8e67-494d-8f47-17e46dc4b0b8\ndb2b359f-e3e5-4a41-87d7-ace116b853d7\na94e44ea-2325-471c-8b5d-887632f4e932\nf565f755-7617-478a-8e7a-ccfffc6bb7bc\n88740389-512a-4108-b24e-cb6dba7e487c\nd96d8be0-d398-4ec0-b6e7-d75b504c91ed\n84de8b3e-771e-45e2-9cdb-4ab087bf05e2\n99616975-e4c6-475b-8b14-dd335fea4972\nc5f19a03-ef44-4a93-9fb9-6f04cc85735e\n69622ba7-1483-4a2d-8851-5de777d84540\nb8c4140d-d84c-416b-a884-24c11afac4fb\n49859729-7ef4-4c45-b7a2-a06bc7e43eaf\n54f1bbeb-8949-434e-9eff-c578c21aa5da\n0d9e99d0-537c-4a8a-9a65-d63c74288589\n2581edc5-ae44-4be5-841b-af3923db7561\n360d2b2c-1bb2-49d5-9e5b-e1bb6e93f57f\n3ea8266d-67de-430e-b631-a4a2e0b730f6\nfc27b860-fb51-412f-866b-dba6aec83706\n4d964213-df58-4ba6-9cb9-dc837bd06d62\n5c732ce8-b532-40d6-bf28-05456ecd5cd0\nc0a69daf-52ba-4518-a514-b0f953f3ed31\nd2014d13-b7de-4acd-a4f7-4f687c336260\n2ad50be9-2c2a-417a-b926-b9e111020da2\ne8a20ab0-e92a-4e13-bc73-6839958de5f7\n0d54c9d2-a13d-4fc3-a053-693982322110\nb5a4908f-6cea-43db-98a9-f66388af3bf5\n825ff07b-d029-4706-8758-980ef19e43b0\n296e3dbd-93ba-4c92-a934-5afe66514194\n114e552c-51f9-452e-8849-116efa328c2f\n6218df8f-7a43-4c30-98b3-a93dbe850efe\na80797d0-22d3-4b00-813c-564a0e283e5b\n84940389-11dd-4289-bcbd-7cecf6313d2a\n54bff177-c543-40de-b256-d49a1a693272\n7102e0cd-83ea-4a68-a6af-364cb2897ec4\nbe357379-1fdb-43c4-b471-312a4eec1cfd\n349fc802-4ae1-46b8-8eab-8536ad626606\n14b90895-c090-4c20-80cf-f74e48dadb4d\n5e5fc66d-e294-4592-8b77-d9800d1dbb86\nbeec2c7e-08c2-4e8c-9291-1c71766ccfd3\n7f918e7b-3bc0-4982-978f-4628656fafb6\na65cd5a4-f4a2-4c68-82be-2f54a5bd4371\n31d74c62-e572-4c82-89c2-0efdf9614007\n664f7228-da91-448b-b989-9e69a171598f\n88d04549-4c04-4f25-b043-e1f377c52f6d\nb0f2893c-cf50-44c0-95cb-e3295556d267\n5bfc9bb4-5b4f-4f9c-9fe3-4d51da8ead0f\n0f55ebd9-b500-4433-b6c2-ddad43a519f6\n08ed798b-b8f8-4de1-b3eb-ec3c064a604b\nae8b61bc-cd4b-464b-a7c5-64603c9d2542\n8c8c0172-3752-4378-bf8b-21b4148a6787\n0e5597e1-ae25-4c5d-ad3a-3d21f8c6d962\n67ff691d-2f08-4b4d-a8b3-713b3f8d7e28\n917cf0c3-c990-4362-ae38-285927dc8b29\n66b938fb-2326-48bb-bd51-005e396ff2ba\nbe6749a7-6a75-40b8-bdbc-4d428fe0c52c\n4a23ca24-2f0f-4f24-925e-947a845b5949\nb11bcdde-33c4-4bd2-987a-1ab6541f034e\nf25e2adc-debd-476e-b6fd-869670c610a2\ne5afaea9-3455-42fb-bf44-ca16cec78743\n6a2a6922-b454-4317-a23c-280c6fe0f725\n45bcd174-f9b4-4ce3-b882-0d825fd9dd24\na9dd6739-86d1-4199-b4cb-b16d3c964805\n77bbd106-a4a7-4e0e-9dec-6d5f7d760451\na3582f02-fc3a-4dd0-9867-c01aa6f4dd4b\n309c4cba-133f-4e81-9ce9-6c6ce056006b\n2672a4d1-ee7d-44f5-810f-01811f9cf59f\n3b8f1695-7036-4eba-8ab2-f0da9d84ff14\n69405ca1-409e-4aa1-9d32-ed3d15902a42\ne54f0056-c581-472d-8a8b-1f956eb019a4\n466ef97f-154a-43da-9b88-ef9355bfcbad\n450752c2-5d7c-43c9-8dff-892e42bf5a13\ne8ebb6c6-563f-45ac-a28f-f00f323b6832\nc0720cd6-f36b-4fbe-8934-866f7750c9c2\ne78d77c0-478b-44c9-a98c-bb65e93d5a50\n70211e50-cfdd-492a-ba8e-58527ca45271\n72b49c69-6817-41f8-90bf-f94af33f8ab8\nf89c99e0-5a01-410b-84f6-33438f235111\ne67e6e79-804b-4f9c-bd88-b92f7ccce96c\n140341cf-4f55-41ed-92ac-710819aa8965\nc27f5ec6-c711-4ee1-aebe-e5543376639b\nf44d5513-5f8e-497a-aa94-1217fab5ccdd\nf5fca8f7-44f0-4b90-8b78-8597cf0af02e\nad11d67e-2699-4c4d-9b55-23cf94a1d8d0\ndbad2425-7fd8-4dbd-8ab4-0d49429f82f5\n1ec3d54e-50c5-491e-89c3-9773d8574649\n1d6843db-7642-4f91-9a15-c76113e9694c\n3aa7e9fd-9cee-45be-92f0-a8e65a8027b5\nfdb96422-db7c-4a69-be63-50a8b4dccd6b\nfdc7f6c9-c085-4cd1-90aa-271c91555122\n2cd38cd9-5ada-4b42-bb3d-37d833eb1c7e\n7b031592-393f-4ca1-9b00-f60c59631000\ned56c19a-a2ea-487d-ac69-2bb7089367fd\n8112ab05-3642-4961-97ae-16c52a5f0671\nc1a25309-896d-4a2c-a025-86844a3b08ad\ndd67b230-778e-4f4b-afb2-a3c45efc5ff5\nb0518a72-3cf2-499b-8acb-0eaa5b9fd164\n019d0838-8cfd-482e-86ba-c1beddc0f41e\ne5d1dde5-fabd-477c-996e-b1b2d318d6b8\n25dea5ad-dd20-4959-88f8-e40e3a19f14c\n8cec54ae-1ba6-4fef-9301-fd3b661eea15\na846412a-4c76-4229-85a0-1c4201a0709c\nfd534eb6-1ce6-4af3-9a5e-ecf28bdbab12\n81f92060-6606-4cc9-8a03-4df91a2cd5d9\nc28fa154-7f1a-4241-afa0-b33e3a9e6800\n4e8205bd-78bc-44be-b0d3-fa9e9a1ecff5\nd0f884ef-b3bc-430d-a9a8-ef2c238739ac\na302bc93-49b1-46e6-9e1f-927b81d3dfb2\n842a216b-726e-41c7-8dc0-fca77ec18a22\n7b91d963-08db-46ec-a69a-b2c22b88ba9f\n06e3488a-b9fa-480c-a519-49f781636f0f\n9c69eb37-cfec-4c5d-ba8c-08d63ce15915\nfa7ad995-0d29-4ac0-9ded-6812800170f4\nc088a0d8-d551-4e3f-97f2-8834b1d08ccd\nf800abec-a7b1-4a79-9c75-57982559ef42\n38e326ab-596b-4f68-a229-530339e73393\n4be200e4-ccc4-4d84-8056-b8f46cda15fb\ne055fff5-7401-4a44-b5b6-53716e92d1a6\n9e2a598e-717d-41ba-8ea4-e10999c1a06a\nb254b746-2116-4e88-bdcb-2a12edbdffbf\nc6555568-bc7a-4c23-a932-f37e076cbdae\n8a59514b-a930-4409-826a-593e9a804f3a\nb9b96fb3-7724-46b0-83ea-9885727b6be1\n0b4fb064-6219-4c65-a105-fa16d3fa58bd\n3f3baf96-7242-455d-a5ea-663c02e249c4\n4e4c3e28-9825-4a80-8293-9c286ad4f516\ncdb7442d-5a60-45d4-b2ba-019a74457bd2\n663c9df7-74bb-493c-869c-0233728a089f\n1a004cd7-b15a-4501-a951-5b872f3846a6\ndb560153-f914-4765-97dc-183f0b30bca6\na662274e-fe71-4e16-8838-fad3784c17c4\n2e077793-edd4-4262-9192-bd5d8cd13157\ncb1b48a8-af61-4c40-bcea-dd9a79c59403\n6c62ef63-551b-4b17-ba19-99a8f2cd33e4\n0d0c3740-ed5d-45a1-906f-6d1a60b3bb66\nf6c1a77c-9332-4971-8f93-6ecf9d5d1792\nf3a0052b-ef94-4ed0-8e96-ab1533a98ec4\n62e8426f-7806-4ef4-8653-3be13347090d\nc74f9e81-ba5e-467b-862f-a9be0815b7a6\nbdb44e7e-b2e0-44cd-ac9e-47fafd464387\n6cb1da23-74f2-4611-aedb-1f0e24daa454\n52f80979-5cfa-4fbc-9c52-ad6b5edf9b65\n018a832c-888c-4b82-a5eb-21ef99bda9bd\nd2d56494-48aa-48b1-960d-b6632ca0be81\n1ae0caf6-776c-4cfa-8122-6b78cdf906aa\n0f907491-1887-4833-b079-649783945880\n1d7dd32c-992a-46b2-8e5c-f5895c7ce05b\n764b1ea9-da69-4b15-ad5d-de29ef64e814\n866cba02-f428-494c-94cf-47d580f0e482\n39d13425-537a-4027-9d9d-904fdb8df58a\nd6012a0f-1cdd-410e-83b0-21dfd5af5fa9\n4ac37a90-adf6-4ccf-aec7-da784233e05e\n685aca12-b29f-484b-9c72-26b402a29ad6\nba3c6845-e944-42db-950b-4fbba0d9d9c3\n55f902f8-7436-464e-839b-cf7b8e06b9d8\n75a27aa4-db3c-4995-9769-0ad05b4f1bc9\n49541f99-f26f-47fc-88be-5cd79bc3da31\n7e18c963-406a-454e-b22a-5238c1540c9c\n6e20ab3d-1405-44b0-bb8a-ef079958b911\n9932451a-9433-4e41-a327-a14b12f5e57f\n57a26d0a-c479-4295-b10d-6b35c36c9093\n1327697f-d17f-42bf-a95c-7406ba75ff01\n402f058d-ef69-47a8-8eb8-29fe22f8dd62\n41ab1b62-d99b-4736-a20f-9306ff9f38a6\n73b3afc9-a08d-4241-9362-20374d7dd39e\n676c637e-7985-4dd6-9b0e-df16b91c3cb9\n2af80387-51d6-42ac-8800-b6d3bb903c18\n81766773-2654-4109-99c0-0dc9e597a555\ndbf1ba68-90e8-4404-b717-833db53eaa5e\n1b379ef9-aa39-44ba-9f3f-38c2136e4f64\ncc00bb9e-fe2a-47f4-825b-a4dfe1865b4a\nfb793ce2-3dc3-401f-81c6-d997cc4d07aa\n019345ee-5b44-42bf-b802-1d92b9ff5025\n94d14013-baae-41e8-87b1-d63aa133a0cb\nc752b1d9-dfe9-4e57-afd6-34c0e8c5396f\n7f587629-33a8-434c-b485-32dae78dc089\nfbacf50d-68c6-457d-a5a0-055fbe5ff4f5\n2663591c-da1a-4100-9796-7fd75c61a8a6\n312ff1c2-3b96-498a-b4f3-6e0322fc8ec3\n111ee7b1-5bb1-4215-aa8e-fec430fbc8b0\n399528f4-e31f-4ee0-98df-3fab4d865564\n9f5de52f-2c63-41b5-a671-a6d20415ec9d\n7f9d58d8-afb8-425c-8cb0-7e96d86c1280\nb7b77844-1a9d-4418-9b08-4b9b73881375\n733f89f3-f033-4ba2-a0ba-97f7916986af\n3723d7df-f11a-43df-aa56-844e5266e9c3\n9dbbebba-2f78-442c-aa3b-1e20507b9c10\nd425ee45-30b0-4710-a050-436e8fc1cb4d\nc19f7e92-0d0d-4c05-be35-92dd6b69f820\na7a8fee6-0765-4215-842b-667ca98f1b2b\n4d2b01f3-8b00-4380-8e98-d7041332fd3f\nad242056-8d8a-4d23-aab0-a8a53dd05e92\ndb7185d9-8374-48c5-acbc-e4ceb6bc415b\n74a38dd0-b4b8-4993-adee-b8a605d3ebdf\n3caa40da-b3fe-4b08-a04b-e4656ebc8e69\n060ea6f5-e201-4164-99af-2b5a4bfe2cdf\n90ccc0ae-4949-4321-a3fd-9812a085c6c6\nb49d81de-b1ad-4697-a7f0-c706607b54f6\nda595103-6f03-4138-a208-73439108579e\n437ce420-f494-4bb4-ad17-84cb16301f07\n61c88ef5-2fc7-4bce-ad83-a4f66a366dc8\nbf3df30b-986e-4527-97b2-7916cf549ae0\nd21d75dc-41e4-4eaa-83d9-0c16a3cbc39e\n954da3e7-a71f-4df0-9c8a-d638dc1a505d\n2206e9ef-ab2d-492d-835f-53301575cadd\n00831895-aebb-4930-9921-36726d6ff9d9\nadcbf6dd-8961-4e9b-8690-026ee07f000c\nf2db425f-8a30-4548-b08e-fda610d8b45f\n73948d91-2b21-4462-bf08-f10a1e4c0233\nad1ebb56-fa21-4a84-a628-066fd01cfdf4\ncf2a55bc-bc5f-4ba5-ada2-08e069be3995\n3308ee19-6fee-472f-9bda-e9a23f884301\n5302cac2-9ac6-456e-8e1b-25933d2de806\n2d8e784b-9a1b-440a-9cfe-01b05fc771c0\n511fa203-b999-48aa-98cb-5d3bc8b26a45\nadd249ac-5983-4d6b-95dc-e996f2dbaee5\nba9bd4a0-e87c-4a21-abe9-309dbb507539\nbbdeb98e-2a5b-49ef-96ca-3e204730af9e\n5305b7d3-eab6-4a52-831f-61fd328bdf25\n60f076a3-b6f5-4c71-937e-b98c67602d9a\nd2a45729-9c82-4c1f-bd2a-bd1a782ec32e\nd0b2184e-41be-4b63-ba04-89d5391d5b5e\ne0f40079-d479-46a9-9921-d894387687eb\n869d7e98-0bcd-42fb-8f6a-9b7552cb0075\n26532a9d-3087-4842-afe0-25071982c842\n9fdf822a-0173-4097-9b83-b757f1b83705\na1a7daa3-7e44-42e1-9b59-b575cefdaff4\n9ad7f3b1-e782-4788-9304-1ffa0b4dbffb\n9bee9926-2f38-4d60-93ee-0bd984d68bc6\n544661af-42f1-43cd-a63d-c02b01f40df3\neee8e24e-dbf6-4be4-abf3-98e6a86e5e52\n615c9189-3034-4cff-84c2-bf07544679d8\n88232abe-46cc-4d98-b977-ac6e94cfff75\n9d292649-5e76-4b53-ba75-e104a745f0df\n347b1763-a7a8-4ecf-8d4f-d29799ca6545\n46741c06-91be-4d78-9474-e72636c438df\n74b1847b-a00a-496d-8c12-ac7a4d2f62df\n16eeb3e2-1dea-4fcc-bf58-71775e71cdf6\n7ee4eedd-2199-4296-b350-ce0f872b1073\ncddcbd54-61bc-4a4b-a013-3a6eb9618458\n569fed06-2f44-4c25-aa43-0b3e7a39987a\ne8100752-fe02-45b4-acbf-dac222d504a5\n6e6945fc-710d-48f4-8592-2ef0d1d4e9b0\n670e6acd-cabc-487f-bb68-5def0f32c9a8\n87ad9bc3-2587-4ad8-a23e-53669ffa00b8\n3c1ae813-44b5-4237-bab9-8bd147a72060\n910cce3f-1518-433c-83ad-dbc0cec760bb\n3b63b469-e191-4ae5-ada0-2c5a248bd1fc\ndcc406dd-05cb-432c-aee9-db22aeb3ea6b\n3edf7da7-ae28-4dc3-bb8c-c387df1a2ae4\n44b843b7-fab4-451f-98e7-b3ad59b8ee9c\na47b59f2-5494-4050-b836-1cc10987d36a\ncd63db00-de0c-4119-92b2-8450ebf023ea\nb06049bd-8bd7-410d-bd8e-875dcf5441ee\n7ed34f84-b6ac-4a34-9288-90cee3b9f54d\n5d0335f1-2033-4324-966d-88cbd636ce98\n5bde148c-adec-4892-91bf-b80d7b1c8454\naec5dc78-38c5-4300-bae2-7c4ef5c95f79\ne24c26e1-035c-4f18-9ad2-610890d2c381\nfc8ed772-f1fc-48da-b02f-2d633bb08a44\n0334eb49-7dc1-4739-aa96-1cba8827be89\n33a9a8f6-44a6-48c6-ac6b-7a2a3d176e7c\n550cd1c8-6601-44e9-9f23-283f6bf564f3\n843c08f3-ddea-468f-a28e-3bcd610e9acb\nb7b24cd5-5380-4fa2-b787-0848b4288d86\n86e04c6e-0038-4e57-b963-bc46b2083e74\n5a18834d-c2c5-4dfc-bd0e-db3618adeb15\n431b3850-8d7f-402d-92d4-e2b182429f49\n5129b366-210d-4636-8285-b9b3c5d17abd\nb20458aa-7972-441a-9a57-f6d3f9c915d5\nd2c36e19-f471-418c-bc25-5881eac846ef\n7537a82e-7007-4574-8c53-2bdc1e4cd2e5\n650f2b07-2847-4788-bd15-d8f62ec03e00\n16202fed-2c05-46f3-8281-e2a25c627c83\n750eee9b-25e3-43fc-a92a-64402ecbc865\n3d2c8386-c83e-46cc-961d-df745278fb0e\n016ff90b-5982-4282-a334-1a9d0943a871\neb9ef139-3f17-4fc4-ad69-4781f08e13a0\na9a915c5-5953-4604-88ba-5e466c384eea\n12d3a4c8-f429-497b-b184-22046eba42f1\n0677c653-637c-414c-9852-b1deb03e8e3e\ndbd2eaeb-bee0-48c8-b8dd-cf31a375f25b\n2f9af107-2872-4c2a-a190-149ddc0ae611\nd82d2482-e08f-4574-9626-3aa6207c35a4\nbc7832e3-e621-44d8-aedb-9bab20d7d0cd\n1dd99158-af9b-462a-a972-d94e9c0fbf4f\n2731260d-eba1-4c39-bc4b-a6e69c5c8c67\n1d26a03a-b774-49c8-8e70-c9b4ba749201\n1c8b0af3-2125-4020-8ebc-0c9050d6a1a2\n4f679da6-ca71-448d-823b-99f0859c5108\n7475120f-522e-44d9-8002-a676457b3430\ne3e93ce8-b752-4183-ac2f-23f388b22d39\n804f8fd9-65c1-464d-8175-f9b15b79520e\n1bd3554f-6b09-4164-8367-6e7b63a4c17f\n0ec1b573-ad41-4b53-adfe-a396cb585fe5\n741bd86f-8720-485c-89a9-6445ff998ce2\nd7426226-0adb-43af-9998-9fd332ada425\na0333d7e-52bb-4ccb-aaa8-eec6621a90ca\n970fb919-d9f9-4dfe-a9ab-df722844bdf8\n5868413f-3db9-49da-a9a0-e5e238b24362\n6454c7a8-df80-4ace-9be9-941eaee85ef7\n9bea918f-421a-4b4c-b587-cf633da03721\nc75a2e38-0a20-4663-abc2-daa1620159ad\nd1f11973-9666-4f80-9b09-5f297d341bfc\n1d89d981-ca1c-4384-8030-56d93c3a0ec2\n0ce97fbe-f63b-48c7-b4d0-59da5baeccf0\ndfe72489-8083-4fb8-b797-8abc5104ed73\n13cd83f9-58d4-4396-88dc-362afc05a71b\nc13c1d1e-fd47-4aee-b2d2-c191e7685147\n25faaf00-7d70-4d37-98d4-2ba529ccfd99\ndb364bbd-7664-424b-83e5-6696e4881e36\n867a4d27-cdde-4696-943d-f10a5078f8f5\ne4005209-20bb-4457-b11b-73057a05be9f\n741a28d5-87c6-45dd-8618-6947970592f8\nf6c684a9-4f74-4433-8714-0cb65931eabc\n6b475cf1-3350-4852-89b6-db1c3869a5b2\ndafea6ec-8168-4401-a700-a575532fa07a\n95730595-d28c-47b7-a4fb-b8904a41084d\n907365b6-2bff-4f89-92aa-c9d25755082f\n9ce78057-e636-4667-816c-f4dcac18a508\ne26151e2-ffbf-4503-82c2-950ec18cc300\nc30be729-08a4-47a9-aba9-314319c13250\n0946fc13-67bd-42c8-b2a8-f1c0682e7f06\n6fb7e84f-8a60-4b10-9cd7-f090b94d5675\nd183fc68-6f37-4a0b-9822-0ca44e56c472\n6d8394ec-b9f7-4c01-9659-5c4eed0efbce\n1b79795b-3569-4a96-97eb-38c598c198ab\n0a3bbeec-0556-4aaa-aeaa-e5dd677d8ae9\n4015f108-3926-4004-b222-f051c269a9f4\n174b051c-be3c-4c92-a224-5a06565266a8\nffb1f1bf-963c-42d6-b268-b3e01bbce1ee\n222f673c-fc28-44cf-b9df-47e084adc7c3\n61354082-f715-427f-8be9-ccbca4447880\n189f8847-0946-4f0c-8b0d-0505a9c95d98\ned57c7aa-160c-468a-817c-8b29c99c519c\nfff12cf0-03e9-41df-8ae1-9eb9a0ca2013\n6f478171-2560-4250-8129-8dc84eabfcea\n50672ef4-22d2-41ca-b187-02883b391793\n77374616-b181-49f2-86af-0ecde18da418\ncd9e5720-1602-4dbd-8222-129eb4d35866\n67787169-8436-4919-b35e-a0b2c438bf63\nb680ff63-4b45-4f4b-b4d1-864bc1b501ca\n027457e1-9970-40e6-83ad-000892dfb097\ndee6c714-9a55-4aac-995d-e0f25b6fe01b\nf34056c3-c820-40bb-8336-4c86edf5593f\nd3fcc2ce-a497-4d43-a563-bf59c340af4b\nc2976554-e5a0-4758-8bb3-574165031d5a\n7308896a-ac28-4edd-b1fe-e446dea69271\nd7a46e56-51e3-4ce5-b282-d9fd980ba708\na241a6e3-b28d-4733-aeff-250e2436d220\na1a7ba02-aac6-4cd8-868f-afb0cb9f99a6\n1d9cb9fa-c8da-49ac-a927-a3fc4ec5dbb8\n3f6b27b0-c55a-4694-a221-c77e8a63903a\n7ae5a2f7-2160-4c83-81ec-05a1be8f23e6\n67ec42cf-15cb-4ab8-a728-79237136e01d\nf43ea2dd-ec05-4f72-9dad-4dfdf11c570e\n5af16ba2-761c-4ba9-a9a5-8d9d882d46aa\n016026e6-30c5-4bb2-930c-9ccbdd450f3d\n672c287e-085a-4939-81d2-795b4f35e710\n40f2050e-60f5-429a-9c00-00ed0779a4cf\n5db1f051-d5fe-4b5c-856a-1756fdb73e3c\n92c3a572-b9e8-496c-8a9c-697755838df6\nb737d995-3f2b-42a1-bb70-9460fc2f1f63\n693a8ce7-b597-4a66-942d-f20096fbe2e4\n8eab6eca-4f2a-4f32-87f5-96fe720c1416\nd0416c93-5a63-4ca9-a6f9-b07ee16a6222\nb2141d61-fbaa-48b8-9e6f-052fd95972f7\nb9b50767-ac51-467d-87dc-f5234cc2685d\n9acf37aa-fbe3-409a-98e1-235716129e31\n6a05e758-2351-49a3-9155-19b692ebc6b9\nc8e34eb5-4d1d-4a35-a1fc-3d3f7ae962c8\na163eb15-3c48-4c37-b054-cbbe71556bdb\n666da7f0-2cc9-4331-931b-78c7eb58944b\nfd933093-8827-4ab3-b339-b362ebb9a821\n51b92566-0752-438b-a2a7-4fc24a08012f\nb57c31fe-6d7c-4350-b180-0d66d9fabaac\n649d98bc-71b0-407d-90a2-9ca3df589baf\n98af9556-0cc3-4414-835d-4d2e76aaf0e9\n819b42ea-fbbb-40eb-8dea-66ab43fe0277\nb203fb89-dcbe-435b-9de9-603a8867d149\n5c4dcfca-c585-42b5-81cb-5db04046d78f\n4e5e81f7-0098-4f0c-ae6d-f00aa00b5b91\n6de33d53-4a9d-49ca-8f9f-0398ef6003c1\n707c2160-a902-4983-b165-0fe376d4ac87\n298cdf82-3bf3-445f-93cc-1b902971540c\n6088f768-7ed2-4241-a22d-873e6b18bb0a\n6f243e8b-ae18-4d91-874b-3c84197bc0c5\ncf46dc2c-69aa-4c60-a68c-f27920cd827b\ne57dd3fd-8510-402f-bb5c-d95ad55ea5db\n20456bd1-833b-4165-a3e1-c2a6e39a36f2\n63c9a35c-a34d-4602-ba58-c1a4b8628a6a\n42543106-ffe9-402e-b1b6-8e1ae64ce4c9\n3791b891-f7ff-4e94-91ad-36fabd0f5f2c\nedef30cf-792d-463f-a7e1-b01c5894ecc4\n84027002-39e5-49f7-8125-08c027b7af3c\n04bf37f3-caee-417d-9406-d14dc1e6ea22\na2b38c11-9c03-4b2e-bc00-4aa86942851a\n7b7d7603-4361-4d50-aaef-82537ab05b43\n46489d25-9e6e-4472-9767-232dea733a1c\nf58bbefd-81fc-43a8-b05a-20119557f9e6\n413055de-d6bd-4ebc-b7b3-8f75718c52d7\n83a94a62-b545-44cc-929c-25a4205f3ed0\n39496112-4dc5-47b1-9e22-09116164b0fb\n6d17e808-f9bb-401b-aec3-251213f24e3c\n325a7541-0ca4-4f82-a170-bec7a5e5b635\nf3ee1d0e-fc56-4756-a143-dcfdfd2ec0cc\nfee34868-d8d4-4f6f-8809-de6b13e1e1e5\nf835357c-e844-44c9-946f-b626eab7a284\nd52d7625-63ac-49b3-9716-1bc0ff1d2d32\nd19519c1-7531-4404-8bae-9eca61aa3fe7\nda3980c7-7334-4d82-877d-6e60da9ee904\n51f075f8-80ea-49c0-b1e9-eb5a6a291fe4\n376ff011-0432-4f32-a22c-2deb2a1ac999\n804f0078-7a4a-456d-970f-63f00ad6a338\nd584da4f-6155-49af-9b08-853c9dcca57f\nd335e309-b957-4ad9-bf9c-55ea0c517cf2\n3c77580f-2ed6-4f72-9689-7c46bbf3c99a\n15b46ebd-283f-4582-abd3-6f930b446e6f\n7e60af31-b15a-405e-8c00-78154525ba11\n07ec60e2-c046-4b99-a3b0-8eabbd7862e6\n68a51f47-e3ea-492d-b93f-bc1e8ee9d359\n20bbc0f5-9115-4dca-a5d4-0adb9116ea02\nf6fa82c0-b6df-45c0-8e9a-14cba6317a2d\n0bf8a0c9-c8f6-4235-bc2f-f893bb8504ce\n5bdbef4b-8d5c-4132-9cb2-9f33de0b2ee3\ne39531b0-b697-4d1e-a58d-58578db258f3\n12ed2a13-8ec2-462d-8e3e-3dcf794cae6f\ndf051d7f-5411-4065-93c9-02437f7250f4\n31f14867-9f0d-4ef2-a7ef-457c515877e2\n1ac76bc4-9ce8-4df4-b6fa-cd9fcbeffcb5\nee2b5e3d-0901-4911-a124-92f6233ef4e8\nc88bae9c-32c8-4869-8d3b-9ea57d621c8b\n12993d33-7e69-493e-b930-e1680ddcbee3\naf2fda49-605b-4fc3-9b8d-7374ba860bea\n3966a97c-e12a-49e8-be8c-df84c3c5a12a\nd4b2dc55-5718-4429-8735-9b2739ac71a1\n3fc5959d-bb89-4b2d-854b-48462555f89f\n24eab57c-dab3-412c-be7f-3768b7569c74\naadee826-9d2f-459b-bb1e-913bbda37974\n53474009-80e4-42be-b73b-a8d0fbd9fbfb\n471b1a35-2ca8-4285-b52c-2ce3b32065a9\nfb59b49d-5463-470f-89c2-16ae235812b9\n8be1bc64-64d1-46c7-a48b-f6b64924c0a3\n2bfc0b17-b342-496d-9291-6373f401b025\nb0b780ea-6298-4608-902a-2cc376970110\nf6a88b0f-0e81-47bf-9430-c2d490f34ca0\n5710969a-8ee9-4cab-8583-7ec748e1b63c\n84870efc-a70a-4607-aa77-e689f85bf2f6\n3266f769-64e3-4467-a6a6-b7c9786a978e\na3621a27-7737-4f13-b80e-6e51fc4d3867\nb75320a9-dee6-4e43-b383-58bd148c62ab\nd83c02c4-3095-467c-b62c-77816d3e06f0\n65efc8ce-ad40-4a76-bdf8-1c6164ca7f32\n07b9097e-aa77-4c72-b1d1-a007d100d8e4\n1591ee6c-313a-4c5a-98d2-7fe16f072aaf\ne2593180-16b7-4704-bd58-02947ee49ba3\n86f76d43-5951-4391-bb21-9e1dec70a728\n297e82eb-a921-4386-b063-252554daccdb\nc4543eed-fd1d-4634-87c5-cce7a6db8fff\n0c30c54b-3789-4bcd-bcc5-c4ae61eee646\n6cf782ed-8f7f-4de1-8d98-b3cbe0366cbe\n40ddc891-c7b4-49d8-89bb-7034dc9a1da5\nb411893f-d04e-405b-8e9a-49d90685d5a2\nc13c5977-4b43-4af6-bcfe-4cec0498789a\n27ca3f1a-9f87-45cc-9083-4299487cadac\na3974565-0f81-40d4-9680-77b1865bd795\na009eca3-4ece-4528-9e8c-0f9dc75b73dc\na7f1e3a3-d405-4b85-ac01-766e791db567\na7a36b08-eb92-4811-8d7d-01462a847460\n4ceb2877-8e0e-4cae-a161-b85197fe0f9d\nbc828ccb-097b-41fd-b427-fd17baa88c63\ne46fcb35-0732-4b4d-9f60-60e680c9d81a\na2ed286c-c90c-45da-b8ca-a659efe2bd83\n94f42150-e1d4-4da1-bb9d-8f7ae12fc28d\n72e957e0-b417-4c0d-943c-8f6f0234558d\naa9fbdb5-a270-4018-be7c-4025bea1ba7f\ne83471b7-a104-4ff4-b063-2124da6a57ad\n31c34121-e8f5-4d69-8222-38a838577150\n1ccefb41-dbb7-47c4-b451-e77b66118a40\n7490034d-394a-4dc1-8502-9c6e1a6e5995\n5868119e-c085-4360-82b7-6bd95827c7ce\n90034fed-a766-4576-8baf-7408ddde4ad1\n8be0e0ae-a988-4ced-9f11-22d423658cd1\na8533c8c-1955-44a9-9e2c-1b7b2dd440e2\n5f6102b4-0be8-4060-9657-9a973d5f2a3e\nb3d7996d-addc-4c68-b650-24f159a74a80\nc9a6d767-0aa1-4412-bf74-f4cc1b4dae24\n4bf94572-643f-4e7b-867f-1d6a775bbec3\nd490f2ed-d501-411e-a890-7b9d361bc140\nd962c78b-cfd9-4591-968a-c39a0ceff19d\n021f894c-39f6-4ef9-aa95-5e856b662220\n790e1723-a776-4a67-84b8-75ab39d4e097\n7242bb66-3d5c-4281-9ad9-077de7292d0e\nc6eadcd1-eac3-411c-a945-8e9150afd423\n76eb3adc-2156-47ca-9468-50fce4c7f644\nda3c58db-fecc-42f9-b871-a5a211eced90\n2293d8e8-119d-4768-ad9b-8e61897fbf05\ne2bdc7ef-2a7c-48bd-ba20-10ed0c11567f\n13566ded-6296-47fa-b4f6-e4ecab8ff112\n0c7ea56d-0ad5-4e95-834a-e403a1edc8b0\n1444e5e9-e837-4ee2-a445-1d0bdc984e2a\n6fb73d04-26c4-4c16-9e79-1141fd943fe7\nd025d7cb-9e11-457d-93c2-3f459d10c97e\n45971bec-1b8f-48f8-b66e-75c664dc9ab8\ncff57999-63d7-46ec-b0f3-75905e7a9a56\n140f69d1-b8c5-4d4b-8180-3b9ac0e6ee54\n73ff166e-82e6-4b24-9260-16844cbe6852\n68097886-284e-4062-a6ad-ee9c307c576f\n00a2e66e-7de3-4bef-a512-b8b99a86b1f9\n0c20a9eb-aa61-493b-b36b-ca981c9f52a0\n7a29c2f8-9c17-4339-ac8b-0672612c485e\nbb6f56f8-3e8c-4921-a81d-4d02fa240485\nfd9f1b6a-62fe-4e67-8e8f-220b6e9a60f3\n39ca123b-0bf8-466c-98ec-367bfa500067\n99386eae-d2b3-468a-9108-95683d6cd13f\n28224e52-8b5e-4141-8f6b-8ec028c7b606\n5fdb99c6-29c5-46ad-9446-d2ed7e613eba\nf9b38503-98e5-44dc-89ea-0ec780a6ad92\n7f4288b5-a985-4315-9e88-45f6e03a1be5\n383d3665-e4df-4b1a-a2bb-c30c08667ff7\n54ee7fce-b8c7-4b6c-ac1a-e04a40b79246\na6c22229-fbac-41a4-8a2a-f44b5f3bec0b\nb2fba172-22ea-4b05-995d-74df788f88f8\naa678dff-d042-4ec2-8a9f-a8eef3e94873\n374a6ed5-d308-45d4-972b-86fb05aee9c6\necc4c67f-2ccf-4a57-a6d6-eb739bec5b3c\n61c67976-a36f-4b4f-867f-f180e1a1d6f4\nb6f93451-8c66-4ec0-9fb7-27ae37f414de\n283eac84-223e-4874-81aa-8dbcf4bff3d8\na45192a5-8e6d-4033-a892-f38f8297d025\n2a2ecff6-b031-46c8-8240-bddc4eacdec4\nac4c02a8-9be2-4b55-ba29-3724264ba084\ne4057976-9c6e-4dbb-886a-cad5d2fd8cf2\n30248f2e-17c8-4466-a203-ab1173ae28c8\naa56b618-1539-4333-aa9a-7c830e713ad4\ndea19a65-fc2a-4e20-99a0-91865888e76a\n498dcea0-002c-4192-ab47-ad8acc9632d4\n4c068abb-155a-4970-a78d-cbd2c4b9294e\nce7d8350-9295-404a-b447-42d4e4822fec\n67048315-1f3e-4e16-bf40-8dd95ae79c03\n5604fe35-412b-4133-aaef-27e437f85e33\ne48e5b45-1f31-4184-b3f4-973ff6d74afe\n24b2bd8a-78f2-4cc5-81ba-22f2e0bc012b\n27a0dd1b-d5c6-4dd7-8546-e202ed7a0677\n5cdce906-1dca-4600-b2cc-5b3a1e603973\n75e3e885-8ece-41b1-bfdf-b050dd0bcd8d\nd78843f0-033f-47b5-8c74-9a33ae39863f\nafe188af-d648-4417-a597-675e74b4fcb9\n7a455baf-a61d-4ea3-876a-5c64e4293fdc\nfcc47f57-48d7-453e-a2f0-f84fd5e47c74\nfdbd3e96-5dcc-4823-985f-fb548b882e21\nc6215e63-edd6-4565-8e3c-05388afa2058\n528f1879-6481-4f18-954e-c051462c6570\n5a9a3e35-1fe4-420c-a5c7-530f687fe245\nbb87f5a3-c94f-4235-90c3-b1941f3511da\nbcfbc635-4a8b-439c-9ff5-1e2481d74acc\n50a29026-59f6-411d-b14f-36a42462152a\n7622dbd5-10b5-46ba-8f3f-2092b5dd3796\nc31f0ffe-af9b-4cf8-a33d-175c12453388\n38b7ec9f-820a-4466-8b81-04c57abdaad0\nf3444ce2-a6af-4fb4-9309-79285f32a222\n097c265a-62a1-4ce5-91ef-e1d89360b544\n4cc16c3a-1fc0-4e7a-aa35-08ed2d9faf02\n413848c0-f865-4a35-9820-f7fd94f619f6\n85995081-21b6-4946-a435-c425e00b9bf0\n8626dc13-19dd-41f0-a5d0-e7a202fcb7fd\nf09e47a1-e532-4ec2-9d79-94323bb444d9\nb40d3feb-84db-460d-b4f0-b3d751d5ec59\n001bc8d0-baf9-410f-95d0-dec1776a33e5\nc92a5a09-8624-4599-897b-684f8294d8f2\n694604ff-2f43-4e77-a842-840a82099431\n1b4f2a8e-e9d9-4910-8bf1-64b2c2e80c40\n06305941-96e9-4ae0-8925-4a7f51d07515\n357d1f83-9cc3-4628-80b3-8db57cff5c45\n89b2b926-955b-4295-8dc8-771a3647c5b4\n3808e794-7388-4e6c-b40d-02659c06d064\n2e8f268a-9100-42bc-b469-d1273d02b80a\n5381d704-43a8-4d78-9b94-f627015d8806\nfda85166-ad43-43f8-91d7-06352966de08\n31836025-74c3-4cb9-b2a3-ff9bf9f3d90f\nf64dbcee-8aaf-4083-aa2f-95612716c81c\n8ea00e53-9d76-4d83-9a4c-4edd698f9790\n086e314f-e06d-4255-8ab0-11d2128751de\n45b297e9-548b-4d6d-a8a3-8adcbc870bf7\n23774de6-36db-4acb-846c-e8c4d07d0822\na03e25d3-f8ca-465b-b061-d1553cc7a7ae\nc4b627fb-32e0-481b-a113-d3dddcd64571\nb3e97c6c-3760-43ff-80aa-841185f48ed2\nd57d7bfb-f4cd-42a1-bd3f-793a5e384453\n1c515508-7926-4ef5-bc2e-643005dda0d4\n85d8e518-347d-41a3-a520-cde1922e4fc3\n4c4bbc4c-a95b-4986-a121-4ba43db66c2f\n46185e71-a182-46d9-b87d-fc864d73c05e\n40722717-ed90-4a27-8d3d-a95fc7e7a211\n9f3a744a-423b-48b9-940f-dfc71a693dd9\n44235a7a-0f8f-48bd-bbe0-2e2ccab1efa4\nb0fd88d8-8bf0-474c-b464-fc563bbcc319\nb6db3241-f15d-422a-8fdc-24ce3455c5d6\n73afcc81-9a9b-43ea-ad4b-2e1bd0c477b9\n68436f3b-461a-4398-a0ea-996f2aeed9ec\n25529e29-a06f-40c6-9468-973c0fb6465a\nca6301cf-dab1-4fbb-ba3a-42ef72a38c1d\n1ffcbe6d-bf31-4b2b-98d0-aa30ea08402d\n31a44d05-4b68-48c5-b9df-0a9909ee8a6c\n8ed01c47-2536-4085-98ae-defd6cf67455\n0abac5b4-3f62-4473-a0d9-40a5db9176a7\n89aae41c-f634-4ba6-86e5-fccd94a52766\n34594aa8-e020-4f18-8212-7ba1bf1905d7\n6d1f36b1-5456-4015-8d2a-5f5a1fc57118\nd08ba877-c1de-4611-a79e-e04732c4ecc3\nb7bcec84-6461-4987-8c42-843c041bd669\ndede1126-3896-45a1-ae17-558abc495dde\n6a757260-3e4c-4a4c-b773-f3d671f747cb\n37296ecc-ec33-4ac3-809f-240250fc6575\n35981df0-fe05-4478-8ee2-5d9be5540943\ncdd1cace-98a6-411d-bdec-bedea1cc758d\n91c7bafa-7e37-4695-9814-f81fa253b3d2\na4adbdc7-4c00-47a4-91e5-f594db139143\n6fcc6c69-4c2b-40bf-85ca-039c0333dd76\n6d6fe9ca-f7d2-4fab-9696-c360c4877fdc\n6cae45de-ff8d-47bd-bf71-9806c3268b13\n814197a6-d71c-4cbd-8337-968c46b78a80\n5065eea6-e034-4bf5-acad-cb7291bbe9ce\nd3d5de21-8be5-4c8e-9cb2-a54eb43a96ac\n5a92b013-55db-4d68-8b5c-afdfc823c992\n32a5b8ec-5322-428b-aa91-4eb806668035\n23b6cd6e-9a0b-44f5-8d67-b64323429d1f\n130de29a-87a6-4894-94d7-ea5bb1138d8b\n62f1769c-ed17-4aa0-bd72-730f0d68ee1b\na921e73d-a541-49d5-b7f4-fb6612234663\neec9cfd8-53b0-49f1-88ec-5a91a32dd6e6\n3bd428b5-ef14-4828-9f3e-49ebe4d50b1a\n8dec13ce-6ddc-4f9f-8a7f-3871344b369d\nf63fb95f-e0cc-4853-a9da-2576e9e23041\nc5c15cc6-56d0-4134-a07e-4bb4f380522b\ne9fa84b5-4b57-4a67-bf32-21e3467a048e\n9b8953ae-b7c9-43b5-9ff5-ccb810fd0f4e\ndc870ac8-3478-4b2a-ac65-99a425bc534f\n0daa7fea-1b16-4dbf-a3b0-1d27596552d5\n0a285aa1-8078-4876-aa8a-548e25311ffc\n9ed19ad0-0d4d-49f9-bd0c-c36b92d61d98\n9f09c387-b3e9-4e41-8730-03d2a83cc55c\n921fa1e9-6b65-4e7a-a981-e302dd49e852\n91cfa8f0-2e5f-4f4a-a60d-c3c6ce44fc93\n74c058c9-bec9-4851-b7f1-48273693a9ff\n1114e430-ee66-43b8-9e52-ee3792b90518\n4b3321d6-f1ae-48db-8595-e12c6081c2aa\na400d675-2b5c-4ced-8e68-b7e6b0ca0a8e\n9ff0a2e4-d388-4ee9-af80-c8fa00c30882\n3dfe2265-7b15-46a5-8571-f2fe064ce3da\n241c1fe9-536c-414c-a213-943170bc9bc9\n05404dc5-b417-461a-87f4-80af184f464d\nd58c36b6-e57d-4788-b2a4-da6038abdcee\n9c58ac25-e498-47b5-856e-cf4ff1e793f5\n30daa2fe-146a-4bca-b31e-0fb919b5d79c\n65e9634b-4b9e-4090-b7c8-43eb718e3970\na43832fb-a6cb-49e1-95ee-76d630c9b652\n3081c4a6-9317-4800-b266-3b19cbc203e3\n832ab836-8457-4dbc-bbba-b03032cafb4d\n9e56cecd-c469-409d-936d-639c08a698fc\nc81ebff0-e80e-4e53-bcde-8fd98856200d\nca029d87-2437-492f-b7f2-8234923fa94b\n899ab0f3-2a44-4fd1-9254-bd5f34ec145d\n3fe95c98-52a2-419f-871f-f2a01122f2e2\n8e125d31-8718-4e09-935e-b5971abd72c4\n77097b4d-add8-4748-8656-aa1842c1f89c\n60e6322f-7bf8-425a-a1f4-0f5daee23251\nbe26b2f0-3ddf-4039-94c7-753d8f2f698d\nfb125a3f-1a3d-406a-a18e-c2ebd5874d70\n5190465e-5c48-4631-9dcb-bf16fe448d1b\n03d15339-5273-406b-995d-4cf07fff5c3a\nd7499448-fd0a-4bc6-be05-1af0459d69f6\nf844a930-d1bb-4461-8162-3b73536afdd1\n2a0a62c2-e158-47d0-be97-ef228febb9d4\n13a1035a-5eac-4762-bf00-6893e714f845\n82ddab7b-9690-4c57-8e8f-16d749b1ca6b\n3932ad25-505e-4158-a854-d3494c757952\n2ddd49f6-208b-4a61-90dd-c41cc5149ba9\n1fe38126-5000-4cee-b740-a6f97c232462\n3e732d63-e15b-47c3-b964-7a16978033a8\n597f00c1-53b0-4c56-9fcb-e061f62314ee\nc7e1409b-0c87-4e7d-b1ae-23d8645237a5\n181eff63-8cc0-4df9-b127-7344634f5777\nbfe99796-7164-4bab-a8cb-7be37133bbcf\ncdec3195-2669-4bb7-acd2-8bca994379a1\n15ae8323-f0d6-496d-980a-3f8f7211ef9c\na085f91b-8e35-4359-b9d8-cb45c0d89911\n3014e6ef-8202-4c4d-8d27-8d558888b73a\n2e505525-bb6b-4f45-b372-5d121a7e7fbf\n33aaa358-5d99-4f1f-afc4-a426532656d4\n1c33adfc-27a3-4ece-9361-d1ecd9a61fa3\neba0e446-b7c4-42df-a7b2-422b68aeef6a\ncbf1472d-c85b-4991-9683-7472ca0c229e\n3f92767f-01e2-4250-9ffa-a6ed98d7809a\n1524eaba-61f5-4d99-8e98-66fa6fb01ae3\naddb80fd-87c8-46c7-b6f3-ee771031f21f\n1f3719f9-60a3-4699-beb0-2131a1cf5569\nd415eedb-5727-4936-b51e-dad6c5ed96fe\nd1382a03-5a3a-4703-bbf0-61dec6bce753\n2c57277b-bf56-4885-996c-39e9c562eec1\n6a2db27b-a6a6-42c4-90fb-0f13f45b639c\n9ad0fa28-028d-433d-bb13-6a8a06a09285\n22958fec-d591-4c64-905e-9e797bfdec19\n45ff2ae9-d280-459a-978e-4e898d0b34d4\ndb22eba2-70e4-4496-8af8-46ebc82cc6fb\n13a97908-a9c1-4d3b-be8b-6ae4737d02ce\n87bbda2b-5fd6-4f3f-b955-ae41c7e15606\n2bba6208-0df1-48df-b675-11a324f200e7\na84a447b-21c3-4268-a8ae-98f49ef0eebf\n1643624a-7935-4a3f-9d65-330287b98e49\n8daaa0fd-1600-4f09-802b-5a1ff6879391\n8b6c5cef-b796-459e-bd16-5192103f93f5\n23c8ecd7-b912-47f6-b9e7-cf3a3649a748\n19044a03-260f-4ac7-adce-1e0e8fd52ae8\n995f80f2-f9c6-4474-9faf-0787b0bda96b\n104e9d93-1498-49a7-b57e-25f482a77b7f\nf6384119-dd65-4920-9621-8eb188139239\nb18902d9-f99e-4923-bbcd-168721d7e9fc\n6da0e437-1915-4a04-a2c0-7b8f8f8e34f5\n60de94de-be74-4172-9b33-b33136c80703\nd1687a94-58dc-4046-8e7b-439c83bf6327\nbd5dac6c-8843-4aad-bceb-57caaad039d4\nbb5f2003-0130-4041-823f-272219ef7a7f\nd5068b2c-ee62-41e3-8a64-8f97b0af0eba\n0819eeb8-2e8d-46bb-b8f7-19a039f0f9d9\nb5a272a4-dd71-4172-ae17-7e268c0d1d35\na7ed1588-e439-468b-b926-bed28d1e8690\n000edbe7-a510-40d4-816b-1ab84dba1fb2\n879fc94e-7323-421a-8b15-40bc7b32fa62\neb2f253d-3fff-49ff-82cc-8a12c462734d\n69b6515a-564a-4c3e-a8f1-6c1a5c07e758\n601b9ac9-7db1-47f8-8c4f-5b254169931e\ne9789a2a-0662-4b6b-bb04-deb28f7405bb\nf8b03b03-3d61-40b2-af7f-4a2d6729bc0f\n070b9772-ff90-4e65-99b8-ddef593e7540\n3d4074d5-6ffe-4b31-8cab-9237e4b291c1\n10e3649f-2e09-4c71-89fa-1a88fbeef8c6\n7beab703-3566-49b5-beda-114a1ce67e8f\n3b62731b-69db-40e0-bea0-ddfc4b5e97b3\n67fa7788-8150-4f90-9f68-7843036b01d1\n05b4b2ed-4db0-4d40-a48f-b8fe7849fafc\n532f5cc5-7ee2-4d2b-93aa-2dd7f227f2fe\n0c8d86c4-180d-4573-a730-e27f1a4fa112\na6b2fc86-ca89-4237-9701-c7cd840219b4\n349dd32e-bd16-4638-9065-cebdddb95a94\n7c7a4c65-048a-4907-936c-376bda4c893c\n695d9326-a6f6-4f5f-a916-221593172165\n18adee40-fb74-4f7f-9ea9-0c545351adad\n478f28a2-2365-4330-b4e8-53546eddc5d1\n7cfb1bdc-7ae6-4388-9cac-60600585db84\n16e30912-ce08-415b-8c33-afac612faf04\n5473dc5e-52f6-4b93-bccd-b84c0dce3462\n7c945561-396f-4892-9d4b-129ea4792a1a\n026fb984-00e8-451c-9a82-83de12fc953e\nd0cb79d8-7d02-4615-9f19-a99d2f82134c\n285e837f-6627-4bc9-ab4f-dcb9d3c0c9c8\na4fe96e4-7ff5-4800-859d-2213f3bcc004\nd1f910b0-eb93-4f11-bc03-664d96aa8579\n2add814a-aa35-4870-b7f8-3ffd79b5de85\nf02f121e-e6a8-4f8f-849e-ef6d3db0fa25\na65e06f1-d3d3-4393-8e4e-a3f24ea47ff8\n6f26c341-92cf-4a75-8e64-1c73ce0cf65f\n8fc499c1-f5b2-4326-bf48-52830f66a01f\n72e39b98-14ab-4e8c-9384-7f66f52a1637\n93205f35-d0b2-4745-81c8-1d71dfb8c577\n3b261a96-3966-4203-9b93-1f7f678c720e\n416f01e0-d51e-4024-b07e-be689014d216\na98b881a-2786-4232-9e17-f8fbd0dadaa0\nee609d84-dcb6-4613-a80e-537ce3ae1afa\n97bd758f-e644-456c-a42c-02d6b6983372\n6480db66-39c7-4148-92f2-efeede08b736\n8d85b11f-748b-4ba6-a8f0-5af15a566aad\nba4a5bd5-7cee-4cdf-a521-8b70c2f3a6c8\ndc2d1ad6-46b2-4e7a-9915-0028cdf6a1ff\n95fdf902-191e-452e-93f6-39b8ecdb9b93\n97e37f23-f5d2-4773-a9ff-ed2bce1b60dc\n5822f616-c013-40ef-a1c8-5a0d0ea963c5\n499dff97-216c-4917-b70b-0cc542edf788\nf4f57799-ba0c-4e20-a5c5-30bef72812be\n88b3b89a-ab97-4999-8ac2-9844e97d44b6\n791b590d-6325-4d82-9a4f-8a642214e080\ncbbc030d-fbce-433e-93a9-3143b35cc9d2\na120387c-67c4-4e94-bb74-5a07ffc7b47a\n35e0b3f4-13a7-4749-be45-2bc37b37f99a\n99686b93-dfc1-48d7-9ebf-a7e3eb112de4\n4e657ae4-ccca-49c0-8eb7-62495eeaba61\n67e670d3-eaec-4e1b-82a4-859f7c0f90fc\n44af687a-ac63-45df-8f2e-c5ae233e8b1f\n1e5bb60d-e490-4275-8a70-e87ab3db8fef\n331a3a9c-5816-4ed1-ab51-e3a4cb1dd143\nefb3da46-6797-4000-9449-582311db933e\n860b3cbf-ce88-403e-9544-8a0314ed421d\n0c3ac736-7580-41b6-b808-47dbc04d77dd\n7591ca12-a243-4636-b6dd-e898f5adf7b9\n499b05c9-648d-4570-badf-317f6b7ad10f\ndcf27044-9243-428e-917b-85023b74b38f\n7d7a64ea-b02a-41dc-ad7b-7e1d072d03bd\n7f1b4ad1-f8cb-4560-9ace-0304bf61fe8e\n6543ced3-06c6-49fb-96b9-fed07142d6f1\n2093d360-2ac1-40ec-8c1d-96f635a30b68\ne85df4c1-fc4e-4e17-8dcc-5e724736bdf1\n023bcd04-425d-40ce-9fcd-b718a7608bd0\n91ac25f6-ee52-4657-9b25-46a3e9cd6bc5\n9123e123-d13c-499b-9691-aa86b928ac7b\n6763fd08-cee6-4cf3-8447-649caac7a611\n3febf9d0-0e67-4730-821e-73865d5877af\nbadccc02-4a8e-432b-aba9-472002e2c882\nc373c487-cd75-43e0-8ff2-5a538bf9bd08\ncf5427c1-4c99-4d01-8998-7c342c20b6bb\n46e09970-8e73-4e3c-973c-a1597f34a70d\nf276c1df-6f32-4427-a32a-376ea810a3d2\n3a1af933-dde1-4853-8990-5c53ff5e89e0\n5105b25d-875c-4a84-b9a0-cdf482a8038b\ne715bb49-fcb4-4c1e-882d-640fba3d0733\n20d4747e-d8e0-4a10-88d4-4c8b73607632\n83865783-b1b1-48f9-86ea-07bf051293ac\n64c2a9b4-c97a-43ef-9d6d-fc535c1d4aec\n5b0caa86-fc4f-4ee9-ba11-5c21015b4672\n9eb4168c-68a5-436d-9cae-4aa417bdcd42\naae6decf-c686-4584-a8ad-e9ee38de226a\n768af1e5-a491-4e7f-afc6-c3159d36dd67\nfc361325-f6f8-4a52-84e7-f1ddccf0f30b\n3f14a28c-f62e-4487-aa04-485bf9f01877\n6f0a2d90-7cf7-46f2-88af-9f6b3a2a29e3\ne629b3db-48fe-43ed-87b7-251c43f82ac4\naa78e428-dfcf-4168-afee-6f1180a6022b\n7c0c734a-5a91-4947-82cd-5b59f651bbd3\ned0c3e13-6c2c-4056-a9f8-6c2930ed2483\n8ec76c57-d911-49f5-be0e-42b0fc6366a4\ne890efdc-4172-4665-a844-1346305d590a\n496bc9b9-7fd6-4960-8049-1f89c6dc606f\n174b1bf4-c9ce-4dd1-85c2-11e5bf3bfc61\n1cc2e530-f036-4156-8e9a-50e663ccd128\nd2003279-e5c4-4865-a3d2-9a6a7383188b\nbe810f43-91b9-4bd1-b4a2-cd675fcd6ccf\n0ed8b246-29b4-499a-b8ec-c62392679f61\n69840c64-3375-471f-9053-4e6b0cae7388\nbf5b78f0-dc6c-49e5-b84f-286044ad5caa\n47a4de03-065f-4b65-847f-e428d21fb341\neb89f3dc-31c1-4ff6-ace7-50b69c417f9a\n677db7ab-f04e-42eb-9ec3-1cce5930afe4\n893a13d5-3679-4afe-81af-47c949bdeab4\nd9f6343d-8b57-4ab4-be2a-00ffd898b13c\n0140c7d7-48b6-41c1-8fae-d7f78cd73225\n9b8df7e9-bea7-484e-a700-46743898a259\n56d9bdf4-6ba0-405c-9fac-a3f5bd35e3bc\n417fc356-d168-4986-83f3-578aad3f2eb5\n2fbb4a93-d7e2-47b6-b54f-e9bb0ecb4f89\nf5ddb8fc-fa18-421d-9cb4-ed2940f14e92\nfe50e343-a9ca-4dc6-9879-420b50b966c1\n9e276b42-410c-4855-89fc-eae107775532\n7570e76b-a1a4-4827-b762-8529fa772c8e\na2625c77-bb3b-447c-b990-5fef1f905cea\nea6bc638-78e8-4d9f-8875-43cf84c098f4\n83f1935e-adcf-4a76-835f-a0150b5ebb4d\nf30439dc-2216-444a-9832-8abf90243520\n4770bb52-5ea2-42ff-8f54-bfbd5df3281d\nf6feefc7-41ec-4575-a87d-f4751ae8de52\n3e2ba007-3192-4309-af33-8c06eb99d078\ne51e9317-52e4-416e-bff8-f10001df2d7d\n2bcd735a-6084-408e-af3d-532473c736e5\n5ea7a547-756e-4c66-9860-79818da94e8c\n247e6f3e-2321-41e7-ba99-a2f422f28ad0\n0336f68a-4be1-4be7-99b2-f66635ac9d17\n6e36463c-fe05-49f4-a807-c12cf95d1713\n26e5b0dd-b6e4-44d0-a23d-5ec0fdf2bfb0\n8c5bb9ec-ce6c-4849-b5ad-5127f50b2c93\n66343676-58c9-4179-a143-5ad77ac3d88d\n40c318f6-cc82-41a1-b764-da73799caa08\ne33a62fc-3f88-4a28-91b7-ee71fb79c2ce\nccef75b9-6372-4ff6-bbd1-45443317a559\ne8aa062c-6bf2-4a71-a0a9-c63dc2d87648\n5f7a5e88-d31f-4ef0-bc7e-d51fa3c837ff\nb7233b28-7a37-42ba-9dfb-8f21faf84e6f\n40565e17-a0c3-4526-acb5-015bb07bdccc\n95c0b764-f8a6-411f-aa4c-1bf2ce84826f\n06918859-84d4-4f85-95b6-19d8373b90bd\na1ec0790-24fc-4af5-bba2-a722dc0e3421\n3e18b409-4733-48f4-bdea-528cd98fe689\n0a3ac8d4-f86b-430c-a8dc-33761566bc7f\n2535df08-5d8b-4f5a-a91c-df163afe3804\n18acc04f-b2df-4f0e-9500-f80f69896296\nb759e79b-b84e-4554-9ea9-cea2e0cdc6cc\n10fea813-075c-408c-98e6-30b5589c8151\nd601d364-0c72-44d5-82ec-91c7bd4185c9\n275cab7a-79ac-4820-96ba-66464209e61f\nd7e7135d-953f-4909-84fc-d1d34c54f9d1\nfed1d7c7-b879-4673-a813-75af117d6165\n33a9b8de-67c7-4c9a-9f39-3a0d5748853f\nfe78cca9-adb2-40c8-968e-d0d5985acd07\naad0e6fd-9eff-4ded-809e-bb467c1b17d7\n6b7355ae-3e8c-434f-aade-f59ee653945f\nf95759cd-fe40-4e78-b11c-362695ca6f39\n543355de-653f-43e9-9c8b-5c1191dce0d7\n508964d6-a202-49b9-852b-3da820402c33\n3e6ab2df-24c8-446f-a4dc-c853bc1d1934\n0d263bd5-2b15-42a6-a007-aaefaed570fc\n2938a2f4-5697-4840-8376-7e24afb4848a\n3871f385-41fe-49ef-ab00-dc30db006d2b\n1cb4b572-0f4a-4687-89d5-732df5ef7f07\nc6173078-58ca-4d89-8598-d83ac845d91e\n89012599-d9dd-4e45-9ae8-d1ad15f0e768\n00eddaf5-a303-4239-acfe-59eebc49a54b\nf0549345-c62f-4ae0-b3ed-90e74155c6f1\nf0505461-6663-4558-ac45-db43105d04e2\ne803df32-18d2-4c60-9b83-09ea7cd88295\n38fd8c21-84df-40b4-b9d9-9aa62c56e17f\nb751b9d0-9136-4dfc-87f1-37f39d4fe773\neb41cf6e-ee12-497c-b9d0-c8b3ca4d5d7e\n677dfb0d-7706-4573-abc1-fd96937e2b3c\nf52ba2c1-555a-4757-b487-0b552d361e98\n3e9b45cd-2da0-4ebf-a42d-fc0768488f7f\nc7dde3b8-298c-462e-8076-e8b2c8c33bd6\n6d84486f-764e-49bc-946d-10dc01764eb3\nc0bb2649-8958-4763-ae02-11fbb558109f\n573e4e4a-4ed9-4221-8a90-83698aaddb62\n7f474c49-c207-41a1-8da5-64629e395b59\ncde10193-f48a-4aa7-94ce-599599cacd27\n81ab0b92-755f-4f8c-aa72-ab28385d8873\nf0a55010-eff8-4853-9e16-d2d8cec4194d\neeb5e17a-983f-4822-a231-7dade2a2dc26\nde099fc2-5224-4201-9d1e-78905c7a5ce2\n07f6a294-934e-4925-9423-3071c0dcc039\n8cb606d7-7012-45db-a3d1-bea86b55fd58\n1d3f6135-3411-4466-a34d-0f4a73e655e8\n86b4cd35-0c62-40f2-ad24-82999d003729\nf721c3c8-b6a8-4121-9281-2f31a6a869fb\nbb605182-ea4f-4d3f-b78b-70589666a34c\n64b2a10d-d8d7-40bb-ae74-34a8c8446e55\n9bd30428-7d7d-441e-8f9e-7cbf21e375b1\nf91be5aa-b707-4f2f-b9f7-e41a7c806c9c\n8c3fb743-a10d-4ab1-8301-f7f849a1d4f6\nf774371d-bfdd-4200-b2da-5813e463a72b\nbf296584-9c02-4a5c-9d3b-986eda16a530\nabd9d2f2-d713-4e72-b420-1f392620eb3d\naa1da8d8-426b-49af-a7e0-40a4e5e09201\n233a0108-1bd3-4893-8fb9-e7cc05e45cf7\n6c3e3ff7-7ddb-45c4-82c4-07d692ad9b0b\n1d882db4-46e2-44c8-9ef4-fd7513d8dfe2\n2dd131d4-5c29-4516-b37b-1956c56b122e\n0cc81a23-1882-46e6-b83f-b7853e720665\n0eeef160-5e26-4666-84f9-ca53d4f2aace\n950eb2ef-85d8-4de6-866a-8e65c9fd485e\n51e8f263-2b39-4f04-a153-bc3effb197ae\n9ce37c78-c9c1-4c14-92a0-137eed755f0b\n57dca410-bceb-4492-bf12-67d565ac6de5\n6c530a44-76a4-4ed6-aa8d-658aecce235e\neff81dee-2699-49a0-9a6d-b3855e934e15\n8edd71b0-6394-4efa-b297-66af180ff838\n2bed4e07-19f6-4fad-9c3a-6ef0261df720\nd24e85cf-6a22-4430-9417-a58f0c2bbe6f\nd3289514-5b4e-47e2-97e4-2df624f51b88\ndc8937a7-e440-4f9d-8111-1ce7866cca23\n8db3953c-fa8b-4167-95aa-9cf4af209fa3\n7befbdba-8f9d-41b3-85c9-74ce4f2cf3c7\n76d48cd3-35e0-4e41-ac69-7dea72cdb834\nfe4cac8a-9c1a-4f69-889d-9f37b6cc6894\n560b1226-85c5-4a21-9dd4-f3b83a7232b1\n9ca0cd1e-763b-43e7-b7ec-498de752969a\nd160e62a-da28-499f-9396-19b5f732b0d6\n738febcc-4060-48b6-91e5-985c09fbe377\n557a0801-8398-4ddb-8738-8649328c7213\n94814703-31fc-4e83-850f-2f8786c956c3\n6293616e-e199-40d2-ad9d-3abc79c234a4\n3afc1517-07b4-4b5f-bb2e-5b89db5da398\n14f9a754-fdd9-4ac2-8030-f7b340750af1\nda5d01bb-93e1-47c0-854b-832ff5e5304f\n3448e292-b159-4354-adad-8fffc39cbb69\n242b7293-370c-4694-aaba-5801f7719c0c\n7bfbe833-a30a-4017-87d7-a732d703803f\n8fc9edeb-c167-4e6c-89ff-d36764c4011b\n49dc20a4-4b08-476a-9830-99b5d46b0664\nabe809b6-8901-48df-b212-cb58d4f4b47e\nb0ef20ab-41fe-444e-ae7d-cac0b3df6cf8\n6d0196b6-f67d-4982-b587-c65f8de8ed82\n4e45f5df-f99a-43f9-8b96-ffef9e707f20\nc8ad9709-b328-44cd-a72f-c353e592cd87\nfebaeffc-5f83-4650-9f18-6d0c61b8481b\n31a687e4-2426-497b-9f2b-588eaf2e56df\n25e2395a-9c28-4603-8fd1-270b7104575e\n8232d5d6-49dd-4969-9bf2-23e56247ac29\n2d1fbed6-87b4-4227-b3f5-5c84706359c9\n452d6ea7-0540-496f-b04f-67493098645d\n853841dc-9746-4e96-b095-e26eb3f6bd91\n2092a0d9-ee27-4ff2-a67f-a23f0e564349\n2e68b935-b358-4f35-b82f-ab2f28e92f61\nbff67a18-f7bb-4fc8-a73c-9f3de26a53dc\na934fe98-6e45-4b31-90b3-3cba4e7ebd3e\nc984a128-60e1-4012-9bff-ac1b50deefe1\naff9b951-d35c-4f92-984b-fdb28f74a439\ne487d320-b55f-4c92-8c9e-0cce79dc07dc\nbaa88fbe-c24d-4842-84dd-f21f273cc4af\n56249650-873d-445e-b185-a326ee0c5cd9\n1588ba8a-58df-48d8-ab8c-7cc1f2b198d9\nf6b2d13e-93cf-449c-835c-3c971a0bae7e\nb2ca52c2-be1e-4c19-8576-88823f44af42\n26cf97c7-82ca-4904-a8b2-d0e4529158fd\n4a04e51c-68ec-42c1-8887-7a7b8530858a\ne2d3b23b-89db-4a29-bc4d-1d6b11a921fc\nf1fd3e91-04ef-4298-83ca-61f0fb0d48b4\n52d2afa3-0625-4ca0-ad1d-ebf170e1c3f3\ne1220efc-4aa3-4eaa-ae47-deb90f88e6bc\nda18e10f-288f-4ff2-8471-1386b2cd106e\nbee2431c-c235-4a9b-8255-33634013e119\n1bd11605-3fbb-42a6-b27b-5ad874305c95\n25abab7d-22f4-49e7-8f8a-fb35f06bd6ad\n8e6ee61c-2a00-4395-9492-44e8695812e5\ncd9b8e9a-01ae-483b-86f5-d32380fb55e8\n12f7e131-1f86-4590-b9ef-de88b5c75f4e\nb368c9e6-2eeb-47d9-850a-376401b25e2e\n1d62feba-1c75-439a-8a82-08e73107705c\n0b7b13d1-4f61-44d9-a422-143a658ba96f\ne9ac8ede-e964-47e5-a0a2-f99f4a3edad6\n9b5c688b-721e-44f2-9257-28e739274433\ndff1df87-07f5-42cf-9d27-621c91b746ba\n00f97ef1-c116-4a79-bea9-fb635094b809\n6062a021-7fcc-42fb-a3ba-f2c590f8377b\n7a6554b6-56dd-481d-b33a-b23981800aa9\n3abf68d5-f1d6-4e5d-9315-5c0b9a6b6967\n70a05c23-571f-427f-b207-9262f70d9986\n054426fc-c781-4f3d-ae4a-5e59a39cd170\na8129ac3-99f7-48e4-83b7-b736a88f9dc2\nb3c0f895-a8fe-43c1-b97d-e76a55787c64\n32d61c72-fe82-4f63-bdba-9328954979e1\n4ade13fa-f557-40ed-ba6a-695447980679\nbc1fb5bb-c6f3-48ef-b4cc-cb85ef4217bf\n7e2c706a-abba-419e-ad13-2aab6122bdab\ncafd5f9e-be1e-44b8-9a13-b501e9daf325\n3dedf990-220f-409f-a7ab-a5eea1054ecb\ndef9b613-15d0-48f0-bfb3-877d6431986b\n952efacb-fe0c-4ef0-8376-dcfec325061f\nc1f140d3-91e3-4242-812c-de785a8f52b5\nb3a2b885-333a-470a-82e8-06868a738dd9\n593211b9-787f-40eb-aa27-59dd3890c129\n85a99370-2dfe-4a12-a1a2-76e9c1ff9161\n4f84e169-d78d-48bf-9387-bc1f0a0646cf\na5220f1e-d881-48e9-9358-eb7d43c5a0c3\n1934774c-4f7b-477b-9e47-5eab75beed94\n6400069d-b369-4075-999a-486b95c59cf0\n9b2903ec-123b-4bfa-9ad8-5d8305f65d6f\nf79af5a2-693f-4bf3-bb67-4a6d3189e40a\n7d383438-1c58-4064-bed2-aa6b067a5e74\nbeb4819b-bab7-41ec-ab5d-37f5fbcabcb3\n9db64b67-dbf8-47fd-982a-448a70fd24b3\n7c2c9e27-5bfa-448c-a258-c009f660ee41\n62145f38-0d2d-46ec-88a6-f3d983d22ac7\n18ca498b-ce72-433a-bab4-ac719f7ce05e\n394d03e1-9c50-4f58-a2e8-49e289c5d9aa\na6a813c5-3277-4d38-a570-3b9e0580dd33\n7b881cb1-c771-4b16-af44-3c8cecffc160\n020efb65-9eb0-4f99-bb0f-6b2ff3648921\n22086629-6fb9-4b9e-b94a-3e37423de948\ne4e6b979-18ce-4564-8227-05c3b4b6fda3\nc65b8f02-ff3a-463e-93b2-e38f18dac8b2\nce87e6bd-8ee7-4cd9-ae9d-b775ec05374f\n47cb76e0-6cda-43d4-8064-c1fabd486124\n06580049-5974-4204-8f2a-ce13c498649a\n4cb82558-b9e1-49d9-ba13-de7770ea46ec\ne080f823-7a3b-456b-a2a8-5ef45dd62bca\na5e80beb-042d-4a81-87a6-ddd5f098cb41\n9d7c5121-385f-4c06-a531-067b1bef8631\nc62a41e2-5d35-46b6-9318-cb699a4be935\n64874e0b-cfd2-4159-bfc7-3dacd49bc882\n6ce0cf8d-5e76-489e-b715-01807e440124\n20b2848e-3bfd-4ca2-80e6-6f5812b7173c\n3a9bbb68-3a6c-46b5-bfd5-9c63c57d8780\n291d54e5-648b-402b-974c-e1e991c9618e\n96e59ef3-4a4a-43c5-b737-85ff5455b0d0\n720ec7cc-d33b-4102-b929-7ea0e189a2e3\n11756886-1b71-4f94-93f1-7632e2e559c8\n4e0e04d6-db47-40db-a09d-c4ebaae1b208\n40947a50-c791-4ed1-acd7-1a420b8be8b7\n5244f832-bd97-4745-a690-712f586265ff\ne696c6d4-22e6-4eb1-99cd-4c5fbe011284\n23e8f5cb-8049-4411-8e5f-a3947f58d846\n7989527e-01b2-4545-bd81-8bbf6e1fd341\n8b44a48c-0d38-439f-a346-8911d30ea1a9\ncfdae4db-119f-4468-8acd-6bfde07b1a64\n2b659b80-d6d6-415e-9e39-f9a30dde04f3\na95a9d19-b9a7-4f1f-8e7f-cb8174f5e10d\n6bbd8e6b-9a2d-49c9-a641-28802fa8162d\n08b9aea0-1dd0-4a22-99bb-e5d31debe020\n80b03907-1ef6-4d3a-b0a9-c909d99f7402\nb9a72a35-32c2-4532-bc5b-0e17d68855ab\nbf00837a-604d-405a-9d50-8785ae02c424\nea160bc2-4e8e-4d92-aede-5cecfe73bc29\n56a3713a-1a9c-4292-9b6c-610ca4e2e305\n6d079d7f-9b74-4617-8fdc-4edce4c12b0f\ne87726f0-c8cd-4358-9834-c3a57515b074\ncbc330ea-eecb-47d1-8c93-53fa369ff6b2\n49c4d7c7-1b7b-45c8-ae1f-6c158c5702a0\nd4ab6f4f-4fc0-4aac-987b-53e350d4673b\n5da20e2b-96e0-4e02-a8fd-7956c7ce87df\n83a48a9f-ee5d-45fd-8868-afea94672280\ne7f6a57f-f1cc-48a3-8096-e468fbef6860\n427063fe-7faf-441a-858f-509023a3e663\nabf0ac40-f9fa-41fa-b452-38c1eec055b6\n1425290f-9209-4eed-a4ef-c766068ad06c\n1c3b7c6b-67b7-4ed4-a63d-a7d6458a2946\n4a5adb15-1900-488e-aab4-37caead455c3\nd4ddc728-888c-4e6b-8b38-5314c0dc245e\n5082c77a-2f6b-47a3-8280-6605bcece418\n34558381-d970-43ec-a241-84684dd4ccc8\na2a4b8ea-f57f-4fe2-a079-b02d7b7a94ad\nd1fe7611-4dae-4794-b88d-54bb464a6fc1\nf9d1628d-f22f-4878-853a-1264815d6f40\nd67cb654-1c78-468d-94b4-be213439670f\n2e8d9b0c-2bc7-42c1-b77d-1650f58ff568\n7e7a72a7-1724-414c-b9c7-31cbe6acafa7\n22c03d15-c394-46c6-b28e-a69409e16c4d\n3eb552a2-2784-46f8-bfc5-48acfa730f96\nec008504-b822-41df-8e4b-36807101ab0a\nacd9ec41-7474-4425-81c7-054d588c5dc9\nf5444007-9561-4c47-b566-27960a8116dd\ned1ad0a7-9d33-4e9f-81f1-5145b5ab2cf0\n139264e7-a2de-45b6-8f1e-e2d8c85725dd\ne71fd819-46c9-45c7-8074-5da670857548\n9cceab99-a838-45bc-b658-6bcc708188d3\n5ef5a075-78aa-40bf-b76d-c4ce8dc94e45\nb8cee2e3-8643-4d9f-ba12-ea03daef98ed\n859e9f7e-9075-420e-9e07-d63f5daeca5e\n0f6382ab-a27b-47a3-98b6-64057ad6f3de\n05e61d2b-477e-4561-9c73-45dd484ecdd7\nb2a1a4a5-dac3-4390-8c6e-3c42962063af\n6942bb1d-1ec4-4cae-9cfd-3db2d3d5effb\n5f44ddd9-8975-4944-b711-f4efa6a518bc\n70969e71-b199-4f38-a4b4-2c0233ab7a49\n304f30e1-ecf6-46b4-9f09-8859ab764930\n6e1f5230-df81-48be-abb6-e2f83af84b22\n42e03cda-b2ed-488b-b8e3-a70f342f53fc\n72092f31-4528-41e5-95c4-a6dbbe618931\n0cffe1cb-47e9-4361-92c9-b28c9390e5f3\n172e9bb1-9f37-4c4f-a651-062b934fcc3b\nae08a30e-3a58-4523-ba92-a2edef47e424\n5960a14b-9d98-469e-a289-002b3d450d17\n31f63f23-f68c-47fb-818c-1f502bad9c32\n189635c2-d40c-4c1d-9635-e62e3289a0d6\n9991ccc0-e7c8-4591-88f3-54b36a65a423\ndae0ffa2-c9dd-4e64-8862-db003e9f32a1\n1197a82f-6b22-453c-a9dd-e4afda553c10\n1c8c1c46-633c-4ebb-8568-85adabebdf37\nb18a9258-d577-4ea3-9f88-c1396cc3cd4a\n12f3d277-c295-43c5-99a0-776a8d97bde6\n8f47c95c-3772-4df6-ac77-6a17ad5943dc\nfc59d5d1-1b76-4ff6-9169-d558809bb31f\n568d0e42-92e1-4d5b-8127-7f7aba4dd5db\n1508b1c7-e7d1-436f-88dc-c367e1f8e537\n1dcaf72f-b1c8-4699-afdd-e7dc7d655314\ne6791f2f-035c-4250-9088-6e215b8e5001\n34bc6d76-b0dc-4ce9-baac-6c03fefb85a8\n31c5346f-09d3-4d58-a14a-d7a6656e669a\n3f6da915-38b8-42cf-a390-46e611f15bba\n216ef681-2ee6-46ed-b923-b372857530fc\n058cfed3-dfe6-48aa-80d6-bc35ae993bca\n0491b867-1b54-4abc-b90d-2a6a57f026d6\n48dbc715-16cf-4234-938a-f70cea2804b5\nc42573fb-1b66-4d00-8941-d4bfc290ce57\n42a12260-b136-4f17-9989-09f640ab8ffd\n7f23631e-9e50-4cc6-a786-da38b218341f\n2708d6fc-e8ce-4138-9e51-5a9f91ad70b1\n8025bb95-f08b-4a5f-bc32-12578b9517d7\n3c9c3b35-bb77-47fb-8c2a-8c6e1d8a35fe\n27dd0dbe-53db-4877-aa58-e627ea85ad6e\n2d5c28f4-b3d2-4cc7-9d9d-af436e5c2212\n56926ca9-2c06-4685-856e-26803194da2d\n250894d9-b653-474f-8e5c-19b767ed836d\nf9f81a97-d00a-45b6-ac27-0ec3dc7a624a\naa71a90e-37bc-4bfc-80a8-e15ab37a7c5b\nccbd279b-b06d-4fa5-b8f9-9579f5877a84\n74064dd6-3d84-4cdf-9338-d956dd6c4866\n94999285-4d90-435c-9d90-78c1a6bc2b08\n0678e300-af1c-4fa1-a759-e80abcd03e76\nb0c5d530-5ff9-40fa-a94b-a8744fde57ed\n867a2fe4-5796-4ad5-98d8-827eed41171a\n72471a36-4633-48e2-9b89-4a070e2dec79\ne3e51274-3c3c-4c3d-a466-b9aa531e2c01\nc0b4f28d-c72b-4f92-ad86-732a7d22defb\n4cbf9a60-24b2-4782-b72d-8b48ed79d1c8\n69abdc66-5d06-4cc9-b9a6-3a383aacf91c\nf34f251d-59b5-45fc-993b-f7e292d54c65\nf3491d18-cbe2-4071-bc00-ee5924fdae15\n49a0ef97-3b60-453d-bf15-f4f706149143\nd9bad4c1-5001-4425-9067-39b5a7733c34\nbf9be18f-0a36-4458-a5a6-3bf069ee8b6d\ne2cb3297-f59c-4e92-b0a0-de7b7aa028a3\n06621f9e-d20a-4d04-8e8d-c30bcca4a303\na16faced-d0d8-4059-bfe7-203a70f60f21\n113ce1a2-84b7-4c8c-8056-aff73b0abc5e\n951e1ab9-c2cc-413b-9119-c5f68fcf42a7\n5769a8f4-d8a1-4dee-9be5-d9c5c59bcccd\nf2744d1d-65a2-4d57-a334-148f1ba3d68a\ncf4d7f5c-e584-4d68-b8f1-fbd7fd52ae0a\n1a2608fc-6f58-40a0-9bda-5ba16d0fb0b1\n3435caa2-dbcc-4f9f-93c1-0f78e69d2c13\ncf7b44c6-de90-4244-aac4-851f450c8d03\nce34d744-8edc-4c15-bef4-bffd3f792c41\n1a7690f9-2071-48e4-9771-357b3b1e2a21\nf663efc9-98b3-4810-bf00-665c36ae4f30\nd6d47d91-3492-4ab8-a2cc-90207be213d6\nb140f37b-270d-4757-8acc-7852e01b82c0\n2942e5a3-e17d-402e-9482-7a16d8934a56\n2d1718a7-1045-43d8-80ba-1123f43c7c1b\n3abe1b53-567a-4444-bc61-94ac1a3e4b50\nf9f677df-7ef8-4db5-9fe9-ac6d0e50583d\n5e9a3a0a-d92b-4839-b506-2927b535263a\n8ad8911f-563f-4872-9fa4-789fc773f254\n77f7e20f-5e31-4dba-b8c0-41d785b1316b\n33688ae8-c0a9-40b9-bf13-e4879792dc9f\nc7205037-d1f8-4fb1-998f-c86253bb143b\n77eb5ffb-3196-4c9e-96ba-1d89d3d7b50a\n16b2f331-dd04-4ec6-adee-0dfb856a2f82\n3bd3c111-9084-4f83-b9f8-cfb6585f20cd\n0c5de53c-a972-4f97-ae9a-5b587ed06863\n2dff1581-9018-4a50-bd75-508489c6a60e\n57d40c9d-0c40-4b9b-b178-18c528eac65b\n61632a0e-27bf-4013-8ed7-5632303fdec9\n2bfbde5b-148d-4d88-b44e-42af48d488cb\n7575fd8a-7d72-4709-ac48-a0e52fa51f3b\n7df52747-eada-45e4-9bc6-fdf4dd4961b3\ncb488997-2ccd-494e-b014-0f19efc9a248\n0a1fc1c3-d827-4881-a2b0-3a3869eeb1a6\n653a2de0-b881-4f7c-9fb9-e28677fbce6d\naff5ae4b-a4fe-4774-a793-3cd7ddd8cb22\nd8ce6737-2cb0-49a6-9049-36eb962c4419\nd344abd5-0295-4b94-9ff9-1c53cdc6874f\n694702d9-a234-4e7c-8092-36993e7871cf\n21826003-0a4c-45d2-92b5-61b371b94cc7\nfa365e41-10f3-4b29-bbe2-8a8888f1d34b\ne893b1ab-14e8-41f3-b4d8-f0220344323a\n96701d64-d51f-44ee-8421-f1e2dfd6f43f\n75aaf5cd-e3e8-4eca-b2c4-59604e480a06\n6ed94635-933e-4d21-b3bd-8b9937ae1d70\n938298a6-7153-48cf-84f4-ffd5e058c7a9\n62f8fdf7-b08f-43ec-ad15-b69154b30422\n29fec9dc-be7d-417c-8bfd-204433b85731\na32967a5-abe2-444e-9d32-e48ab2b86b34\n00e7517c-e074-4a74-bc6c-f47c9c8f47d9\na8eb26c2-9db8-4d74-b585-a5db22810ced\n11ba9924-5081-455e-9f92-e6d6eece6593\nd2ee41d6-6941-4985-86c3-09f7502366b7\nedcbed6e-fade-474f-93d6-92f626a503f1\n5901934c-66b9-4bc4-9046-899746313a3d\n369db4c8-dd29-40ed-b54d-ab2a959f7289\n147c8532-4e6c-465c-9109-923eeef1f44f\n47e1c849-3802-46de-a3e3-323972091ec0\n409ee312-9bf8-48d9-85ea-a3a2c3434662\ndbeb8128-badd-409d-9343-a73c3f0031cf\n40d84a49-c178-4a01-b1e7-3f032064f0c4\n9b998b7b-4781-46d5-8883-16efe7fb2af9\nd7c715e8-f921-4147-9f95-140da2d5aa60\n5c58045c-49f0-4f45-803e-3f9f6b7a09c3\n51fb0878-71f7-4cd9-8712-0aea1eeeb19d\n14c6843e-49e2-4740-a6ba-708d7a26f776\na67fc607-cb02-4359-b370-60dc8a1a2113\nfca759ce-6c46-4441-83d2-71fbca0b4689\nae5e4eee-ac31-4f5f-96ca-f9be59959227\ne5d59bfa-271b-42af-9c33-6cb98a4674a0\n5358d60c-d023-4e0c-97a4-30d12ebb4b92\n32861c45-edcb-4b49-8719-5428db1238f9\naa34f942-4daf-468f-8c88-d92425bc4ba3\n863196a7-9979-4f9e-81e8-fa709560fc08\n765ef069-2559-46fe-b255-cc755a61e88c\nefa881d0-5667-46fb-8a12-cdb2df6593c1\n8e113815-05e7-4231-baed-b3d8bc737b0d\n2075783b-56fc-4e8a-b749-4ab32f5b2ab2\nf2ce6f3c-1f7c-440f-bbe2-30acefab3130\nc8af0660-7d58-42dd-beba-7d483b665d40\n4df42a1d-87f3-473e-af4e-0360fa380260\n490c0270-c9a1-4f2e-b26e-d237a99ae947\n836627e3-8cc1-4fda-b8bd-75e4ea105aa7\n8a56ac97-1c2f-428f-9a3e-380970eab3b1\nc4db2d11-a45b-4fbf-9dad-61c7340cbdc4\nfe5b71cc-c76a-4172-8869-8bed3657aa91\nd4366ed4-5885-45cf-9997-05747ad904a9\n982e98b4-a885-4310-83cc-64514f7fd73c\ncce58ff0-0ebb-4058-b642-848465890869\n8364a2a7-0475-4bb4-ab69-691d86b9887e\n955ec3cb-ceba-4576-9250-6a7b5e7533a3\n9ef42aeb-875b-442b-9345-2e10d4411e5e\n64685d96-aa8a-407b-91fa-8c84b5a2fd5e\nb8022d71-4ec5-42b1-a0cb-bbbceead4e4e\ne1db3194-13a8-4e78-ab37-8cdfb6867899\nb93dcc28-271d-4b26-bcaf-6addf095f8af\n701176f4-40a4-47ad-9d48-700c886ad6bf\nf81a1d4c-ffb1-4789-843c-44e849c699c8\ne4a7486a-c664-47df-a91f-cfb2d1d9b091\nda70a2e6-40d0-4746-9395-31bab3b01b5c\nf570c6c3-e9b6-45cf-ba64-1c7d1e35938c\n2a9b4736-922b-4639-8cb2-7e7bd1da6b62\n21b3da66-6439-485a-917d-920fc5738755\nb15d6e4a-132d-419a-a701-e0962f60a790\nd4739975-5b42-41af-b256-a6fb78d32fb5\n67d56211-5c14-4bcd-8361-a1bde08455c8\n38b601db-4e63-49b0-a48d-ad6bcb4df2bb\nc0787e39-a8d4-4371-a081-28f69dd7760b\na4834881-7e51-4705-b4fb-e255cb89024c\n17e7aa61-70b6-4371-b3aa-7aa269e57f55\nac57ce96-656a-40dc-bad5-e304bb079238\nc5e173fc-9d07-4d65-9102-4ce582df2de1\n8b797e8f-1e46-4516-885f-e26d38b65f6a\n535461c8-49c6-4a9e-803f-c4596f7127c5\n59de6ca2-1453-42fc-bc35-1cd050f32ff7\n393cffe3-3379-4cba-be06-41186c1022ef\na71f0e65-5f75-43cc-903e-c1ecf25f1230\n22d22a4f-5eee-4721-a1a1-b9703900fd02\n8fec8bd8-35f2-49dd-a021-0d38e5fd4814\n379e576e-1dee-4f4c-b5a1-2c54e517cc18\n97ae6c8e-6694-424d-9119-5a939f9b1d47\n0812958a-0f50-40d0-83bd-32df760f2642\n4695194d-6a39-4104-af82-1b42bd5ee2e6\nd89e6ac7-9369-4488-bed1-2242b7a0ee60\n64e3cc79-9d62-4a79-a9db-4194358064c9\n2a52e74a-2305-4e08-b91c-d2ec1acf1159\n078820bb-cdeb-485e-87d7-b9665bfb2a48\n932518b4-82f3-48d6-a2fe-9cb867ac99f1\na37d6ead-0da1-4ca5-96a4-4b811370b7ae\ne7c14ead-c017-40fb-82a9-7d434cf9ddf6\n9933a22b-a6c9-42b0-8baa-83d0b56c5dbe\n0359402e-3c15-4bb1-a488-1162e8a7e2de\n76b7496a-bce2-4ce6-8c86-c6ab514e290f\na6aebcb1-e37b-4adb-aa84-5b57f7d96ba8\n0b8e7ccc-0d3a-4b93-950b-2cb35f352e0b\n7f4dcb49-f431-44a7-8270-dc7c9e783756\nf76cbde0-f1b2-4e6b-a81d-b77bbb627200\n0d0bac07-d280-4c48-b393-6c18baf7d35e\n205710ac-af67-4dc2-9c18-8419c0538f31\n70827cbe-0997-4a86-bc2f-cd7d544c5e2a\nf44a6eee-546c-423b-a90b-d032b93c9105\nc36c7096-a11c-4bfd-a4a8-fb87c95fba78\n03c3777d-ddda-4573-914c-b3314980d341\n2394194b-2ee3-471b-aa27-2d084a419e35\nbf0d150d-f27d-49e6-8168-421b6b91ea78\n98af6310-23e1-4b87-949e-b0dec128ce2f\n57241b92-612c-4109-86ea-793174f91a96\n3811b811-c664-450d-b50c-b93c6df8c022\n876dd604-29b6-42a1-a5d6-3c096302fbb8\n9458c14c-4ee4-42a8-ae59-9ab326661a33\n71ca1549-905e-476a-930e-18ebfb576b2a\n343393c4-7198-41c9-9f1b-88c7dba061b7\nf5440216-f725-4b38-a0ea-b74177cfdf5e\nf0688121-4d8a-48fd-acfe-b62653129e74\naa5b4d79-2dd9-46d6-8bdc-55a7acc26b7a\n4097bd73-8dd3-475a-ae59-629afdfb4862\n362ffb3a-748c-4a06-ba31-bb4a8ed641af\nd8d67ff4-ebdb-4d48-9605-75c214048083\n33334c0e-67e6-4b74-90d5-03d68a143336\nd6b35576-093c-45eb-810d-661e6dbd46a4\n7baff0d4-fded-45e6-81bd-67ae267bf9ce\n95e91eff-c9f0-4d00-8ef8-46e20ca52739\n765cc602-43c1-43cd-b35f-e5d19c5f150d\n49dfde04-d6c0-495c-88e6-1e19f3b563e3\nc5230917-53aa-41b9-a61c-27e34b53cd41\n31cf257b-7466-4b52-9039-c8ab613a11ba\n26e62dc0-517e-4b22-a69d-27477a26c174\n996b36f4-f8e7-4430-8fda-e9f3e6a7c5b8\n07abcf7d-6073-4426-8bd4-d43508f44ca4\na94d9d1d-10f4-484f-a3b7-2c6028ccad2f\ne59076cd-f780-4825-a123-25673f5ee45f\n14eb3004-fc67-4646-870d-44e365904946\n2ad7b05c-82f9-484e-bd29-7b7e90108a06\nd1d2a24d-6edb-4ce4-9b96-2bfb3af34c55\nd83f383b-beec-494f-88aa-4683ae01794f\nbfa3a2fa-98bc-44dc-9534-defdbd6bc6ec\n401826a6-82dd-4e8e-84c5-7c95757b34bc\nb4e7f24e-0098-4da9-815b-97223a535119\n02bd7e23-a46e-4a05-a83e-625994f55269\n42a332e6-9dd9-4810-80d9-37b2c81b001c\ndd4863ce-f872-485b-af56-c078e42ee5bc\n90dcb7c4-67fd-4ad9-a371-7e4860f208a1\ndbc4f620-a5b6-4124-8c8f-b741c7614e4b\n327cb35f-9bdd-4189-aa80-71260f113709\nf2501e59-364d-455e-a6d1-3884f456e6e1\nea2ccfc4-89f5-413f-8702-692b443b2b31\n377a213e-085f-41cf-ad89-c8a69f4f0746\n3c6b5409-7aab-40d2-97e6-a2dbffb9a894\n0e250573-2d7d-4136-8860-6239383aa653\nd144eb47-f8df-46d3-9139-8ec7ae8d7487\n202f9124-8f08-43e2-8904-4d7bc7f746a3\n7bc4cc09-262b-4d13-bde9-ca8118cfb255\n78690d44-5f87-47f1-86e1-a7e12c9158b0\n394a0d88-0e04-478a-af05-ee6098fac1e1\n54d3dbcb-08cf-473e-82f7-6384369217b6\n3e859e19-b2f5-453b-8408-3ca0532fe002\nc90a6243-ca00-452f-9061-7b46d769e29d\na0371af9-2330-48b8-b8a0-2292d67dc3e7\ne59e4f75-e456-49a6-bf1b-450fcddeadee\nca410a6d-9bb6-462c-b87d-f5f3ca80feca\n4c3f8378-28f0-4369-bdca-96d30f215b7e\ndfa43341-071f-4ad6-bc1b-5101fe079c0b\n2a9a1db1-0396-46bc-bf8f-7601dc666f38\nc3360ffa-5920-4f0a-a366-1f51640652b5\n8a96855d-6f27-4c0d-b3bc-3461b5d42cc4\n5ef01daa-0d87-4aab-b350-e1b82ec4709d\n302106d2-26c9-4e98-b3c9-5f12e843cae7\n106de814-31a2-4d30-9c82-908761c45fea\na5d3c9ef-b9c3-4548-a002-3fa3957b8070\n9290ad45-4361-4961-aa78-5f774e7ed343\n4434ae34-41ce-4679-a61e-dfceb22cdd33\n71cab3b3-8afa-436b-8726-5dfac604cee1\n11b7fb43-a217-4ffb-9804-f71a952db81f\nb90d7a88-ab4b-48b8-a949-fe4c1cb58e72\n98d0e5d5-da04-439a-92f9-fb9aa47956a6\n1346fc7b-cda6-48a2-b368-09de19e6b58f\nbe363c95-ed5f-4dc4-a652-70f4a791fbd1\n4d9bd736-f542-44ce-903c-cc25eb3dca4c\n4d50be49-5b5d-48df-849a-31d66ad34dbd\n7becb50f-7edd-461a-a918-1e84289485b3\nad245b52-b3f3-47bf-8fac-1e5027519a50\n64ceb455-98e6-49cd-b23e-4c6f15997d95\nfee1b28a-57ec-4573-898b-8e8d745c8a79\n49861c41-f36f-46ca-8cee-9f673c980864\n45ac1680-f2c3-4fa7-8be8-1c247c9a7fac\n9d45dbd8-18de-4cb5-9dd6-72d26a19ec8d\n811e1142-b438-4d8b-9341-255a630ce687\n4eadf1c7-8fd9-4aef-8a14-e0b18c5cea4a\n36ca68cf-125c-4ea4-9a4f-f123fd3960b5\n85c23fa7-c48b-4ee3-b1f0-c4556a79a3d0\n10310258-e9b2-46bc-bf1b-13aa66848b22\nd07ef135-c822-4f52-9334-b1d15867b978\n0abcdd04-9e6c-44b0-94d5-8ae4ae1891d2\nc70c43d3-0625-4053-9ed9-dc65d0ed072d\n3b5c01e8-634b-4dcc-8a78-6ef3541d01fa\n99764476-fd3a-4833-8808-c20605484317\nc09f7f10-e754-4c24-94ce-7b626a7a99ab\n468de7cd-a93c-4b32-b63b-8bb0a93614d6\n6d28aa90-55cb-4d91-b60f-ae4361d8a8fe\n265ffc3c-9005-42ef-9fe2-b00225e94a51\n2062108f-01d9-48a7-be31-0f3dd1520f69\nc9f8c28e-f359-4e34-b2b8-1d2e149fbccd\n68e6068b-a33b-4928-8c3c-9751a2536d5b\nb7c54a66-be81-41c9-bd4a-b61751d15c09\n18b6db82-d32a-4bb5-a6ec-034c445dcbeb\nd9beac82-e2d9-4018-9195-b362c99a5115\n033f2165-f3a0-4ab9-97f9-92804f330805\n6900cdd4-34e8-4532-af2d-b06b11497345\n85bbd745-f386-4bb5-8fba-90a8adb11c66\nc9f9f5d1-0229-4916-b17b-42417be4fe95\n000692c0-92c2-468a-ae00-a789a913dae2\n7b5e9d26-4434-4273-8c30-c51f7391fb52\n62930cfc-f8b6-4a3a-91c7-95c27c9bdff5\neb655679-1293-4108-a648-ae43ccf1a0f7\n31184b6d-107e-4555-a4bd-326aac5baffc\n390726b4-b7e1-406b-8125-385587938b06\nf827ebe5-28bc-4f2f-8194-2daab7e5ccc2\n50d62ae3-33a2-4b70-890f-80d29199b753\n98818f0d-0f59-4d2e-a84d-3cea7ba08635\n74f30396-f6b8-49cb-b99e-01bfc06218c2\n983f7ca5-a669-413f-9ef9-202e9e6c9349\n52c94ff4-9964-4c8b-a914-6a6d0c97368e\nd78c1bd9-0277-48ba-a5d1-63c0be4f415c\n8bae5429-d7d9-4e90-a77f-c774ad2f3de4\n9ec7cc98-e9d0-4997-872b-13197292fe9f\n8c69a9d8-f36f-4783-98c6-77d93bdf770a\n58d71edd-6e75-44ef-8587-a38e0d02e98d\n84f2b924-3386-4605-8e40-04ca5d0c3ab5\n8c06c07d-6d3b-44cb-89e2-b73bb76b39bb\n8ec95e38-ff2d-4d3a-ad15-f6b0114dc9e4\nd272c09b-f9ab-48c3-b2b2-770c2e8bd472\n54679e2c-521c-4823-8613-c9c0fa145e79\n742a882d-ff86-4fc0-a3eb-5a3240fa70f2\n3680feb4-7f1d-4a1e-a5eb-db4b237b3e44\nb0550d8d-568b-435e-8e13-0c3855e2f9d3\ncfe37c0c-f375-422a-b381-82d71cfb8edd\n8bc94a29-f1bf-467b-b4fa-afd53b771a10\n7c24f086-abe4-4fba-a40e-f1ce35bcabe1\n8699cc9d-55cf-4d11-a382-37135c83ec93\nbaa7914c-1db7-46e7-8ef3-a62eb33cb312\nc179c4cb-cf57-43f9-91c0-9dd04d7eda8f\n247c23a2-e7c5-4a35-8dfa-ee19e69ef609\nd2f26355-f52e-45bb-906b-aa44ecc070c3\nbaadc348-b0e9-4e44-b332-2bedcee40f5d\nb69210de-74a8-44fb-a1dc-1dbe90147d5d\nb5cd427a-71bf-44ca-9ad5-4b6f2464e4b8\n883f92d1-f88f-485a-8db0-98d13d4ef0a4\n41a8e2f5-78f5-4978-a9c6-56bf522e49be\n0c88450c-9f7e-4a00-af2d-56517afea586\ncd682ebc-5efc-4aee-acbc-c11ca4b97d47\na6940232-0c88-4c8c-86eb-50fbce6c60f5\n2ea70764-34c5-4eee-8576-7fc984a2e8a5\nd72c4d81-db2a-40d7-8b2d-6a3337e8af69\na2113893-e589-40ed-b242-c0431cbf8e16\n452d9588-5329-4a3a-8b5a-8942b78760a9\ne779293f-ee88-4020-90c7-af5c42895bfc\n14c2ad0b-6397-4a90-9f68-76da6470517b\n1fdd00e1-4094-43f9-80be-34505ca8bc3e\n3791c682-8338-42a6-bd2a-64ef335a3813\ne3f438d0-ae2b-4dbf-93f7-2deca6fe8fe3\n6c62587d-9512-48c9-8c6d-a85783f1066f\n70a2874a-26a5-4084-947f-fb8accf7a820\n747f6836-786f-4e29-a6d3-5cb673c3c23c\nf4e73826-cc6d-4693-a799-0b75c3319856\nb85694bd-2ff5-401b-ab05-9c334e783465\n99c608c2-d1ff-4a2b-a0e7-da275a41cf21\nd24cd745-8da3-41c7-aa86-cb002589af3e\n534c16fa-fe04-4753-82a8-1634e4db5639\n6b1744aa-8772-4404-a7af-cb3e172f1b0f\ne4e27fc4-289b-4432-a704-c39e697fefb8\nbfb083e3-501b-4361-8027-e36b71a9c632\n28bf06eb-fd9f-491e-b042-13c47fcfb56f\nf54bf5cf-4493-4362-a4e5-1f89ed674a3c\nff3e7569-b7be-46a7-bd00-96255f142cf6\n1df9604b-e567-4551-8347-3b833978bad2\na9e59e3d-f136-4895-915d-3eb826c09b1e\nf8f4be76-a9bd-4080-9f16-4606e3dec87c\n4261a909-5766-49a4-8422-6fe635c6b21d\nc6e3506f-c16d-4384-9cf8-bacb6694b286\na80523db-5a35-44be-84ee-9d46d8fd2588\ne29f024b-0987-4561-a124-65cdc4c4543d\nce9f5148-be63-4abe-9315-3c34e64a43b3\n0e7d1dc5-7099-4754-b0e9-0b89c995f9da\n110e8fe1-37a6-4e76-9023-7b41082256e9\na367e9b1-2b61-46fe-aad9-890088817773\ncb70c315-6fd3-49e5-9392-28211a2d34c1\ne811b292-f7ec-4ed7-915c-4e01212704e1\n5bd88c27-9368-4b08-a125-5b7a88f8aa30\nec723e35-7f72-45c0-87ff-258c3fc25b9f\nc4f547a2-cd78-426f-a735-8856c0741752\n17ba096b-0fb5-484e-b552-13ce980d001e\n539786cd-fe1c-4fa5-9d5e-ed7db82314e0\nd8b47733-26d6-4ba3-8836-164c1ae75c74\n78484c2f-9eab-41fb-a06d-fe7d9865fee5\n92974403-9786-4001-a256-022057bef105\ne6b83a90-c0aa-4a8c-9f5a-aefe2694a251\n7a51c82f-a26b-4979-bdd7-8ebd7bc3365d\n1bb08923-e0cf-4bbd-9215-db67f300caac\n6e9e4227-9b39-41af-af17-e7eabd5f67ae\need2b310-dd68-42d4-b162-44c21a4e6021\ne6e8ebf7-aecc-41e1-a876-25be63749174\nd03a61b4-2f39-4d9a-b6a6-83be4db90bf0\nc4891a2f-bf35-49b8-a0e8-8eef1bdedbaf\n08f6a87e-65d2-48a7-ab5f-2781906d74a7\nee8cc597-5487-4c3b-b29e-4e2ef2d1fc0c\n6c47edc5-753d-445c-9445-b89a6e6bc233\ned75d0de-ff72-47ad-95e0-66eaacdca4a9\na229526b-5e78-4966-be9a-d982f04a945d\nb143e6f4-8301-4a59-a5d6-55ef8cd9c4e3\n378579cf-b2c5-4248-8e07-3de8a3865b30\n472b2610-ec3b-4955-8fe3-ace152560c9f\n1d63d7a6-a69e-42d0-afb2-a83d52ffac5b\n47ce4f0d-5d98-4f81-9797-3ea9761a5e33\nf4f611fe-6100-4c1f-8826-3d4149b8ee3b\n09555285-0157-4fcf-abc9-f79971fe1895\n3d66906b-bdda-4b03-80cc-3baf0d4a52a5\nf3891955-2879-465c-8ad9-88d5848a8c38\n52379cbe-ede3-4cfd-ad50-c445df5b3b23\n281ef324-e544-4f15-91d5-a6f9184dade5\n41156975-6af3-49aa-827f-b93b532fe79b\n266975e0-40ab-42c7-8dfc-aeb45884143a\n79f056e4-d575-40e3-8e03-7eb31363b61a\n58c0d699-5892-48b9-8950-35cb35b97921\nf6e6a457-9f73-45d1-b300-7fbe825c913b\n9b4e5eac-48be-425b-a8c2-26ef3d0293a0\nbf9df26e-0930-4df7-a93a-6f5cc1330708\ne5aaa4ff-0355-4897-a7b8-1ccd75ce331b\nd73f2ed9-99bd-4b6c-9cc8-eec0098b71e1\n862b9048-6dcb-4137-8b6d-a9f93cfbb998\n3cf4efef-7a50-4adc-a6df-f2143f55212c\n27a40f97-e710-4a32-be5a-2e05f3c87466\n5c8445b7-73bc-48b9-be1c-e0cf333440d6\n0901ff86-ba5b-4002-9bc9-d55d6b9b79dd\n07547114-ce79-416c-bada-9547429ba0be\n7711da5d-f8fc-41d0-ac5c-94c5b06b8117\n41bcb454-0e8d-452b-a9b2-ee0a14ef9b04\n20e444a2-fb44-4250-85c4-d640c2d69916\n0cd21f4a-ba5a-4068-bbe9-c50eac6d9ded\n0fd5b496-35e0-4bd2-b5df-9355d830155e\nd76783b7-7b66-4e05-837a-a8df3fd27989\n8dc7ac8d-2016-4839-8ebf-ee0678a5b160\nce7e8565-8d05-45e5-8bfd-94d0872d6caf\n520bf52d-051f-4454-ad31-c4793f4737f0\ncaaa72cb-ce46-4285-b5af-2a016fcc55bf\nae6d086f-79c1-4b9c-b1a9-d0b1d7375d7f\nc45ed050-41cf-4b01-80fa-4835f1c60b3a\nff17f897-1ce5-423a-baa3-05917a3ebc66\n3fdf3cc9-ddaf-46d5-aff9-87920b7b8701\neb83762e-abed-42e2-aa38-aa774b446edb\n60fc821c-7e16-4ccc-b6cc-b9e23317d168\nbdbd477e-1caf-4064-a374-66585ef929ef\nfd172b6b-60bf-4f79-bcf4-66cefaf136a1\na1a3d2e9-6f40-4792-8a11-f82afe8fafd1\nfd493494-f8a4-46a1-b9c1-e0a3121d45ce\nf674d9cd-30ce-46d6-8f82-f83dc184ab92\nc9225624-be33-4238-9317-6815d1cd0600\n248ef307-8544-4f55-a72f-7172e728cdc1\na430e0ef-6213-4504-b74d-3cacc5cf49c4\ndcc5322f-ae82-4b68-b45f-ccec1a00ee1e\nd23c3596-59f1-43bb-b36b-f434182a4b6b\n86711e9e-b663-42a0-90e3-45f74c70610f\n7237f854-a650-471e-a434-b546d5bf49e7\nbe00e31d-ef82-4fef-89ad-3419702e5a2f\na419eeb7-e22f-4d9f-b821-6365f5c26de0\n8ca4f6cb-0cf9-42da-9475-d2ea4d139d05\n0c531a48-082c-41fd-b77f-e543810cf36c\n960c8dc8-6ff6-4693-9bf0-4418502ffefd\n9abdf7f2-d89b-445e-93b3-a8471016bde6\n105eb476-3604-4cd8-9a8c-783563155fb7\n64ca0a45-b857-4aa1-9b36-5b1529f10a67\ndcf4d686-1fc4-4b9b-8330-c6da678ed61f\nfac0efdc-a390-46c9-8911-ca8fec116418\n2b986815-5bb4-4bc8-8130-895a27022bda\ne32b0a17-c6c2-4ec6-a42e-eafc36fd8a5e\n2c8f04e3-717b-466c-8b7e-de337050e52c\nac08de5f-737c-4d37-a8d8-9d5be8a9a317\n4e309cc7-1f18-40f6-a97d-99d01ffa5dd4\n61eb2160-05a6-476e-bf7b-2ab97322f8be\n34c9dbdc-3bc9-4f39-80c9-4be8d79b2639\n78ef3a0d-be3c-4b6b-8901-2ec83399cf39\nc381a8f7-e9ea-4c23-b6ed-548ed6a449ed\n37e5adf5-9185-4e4a-90dc-0f84d25f1afe\n7e938b39-9753-41a9-b7b2-9685c31392d3\n39f6eac8-1c5d-4ea5-b325-143fd123eafe\n3340a561-78c8-4595-8d4f-b543ea976287\nb878a979-855c-4193-a3b7-f20bb5e651a8\n57f18483-6070-488e-ac03-3e4ddf2c4780\n4d96d9b2-484d-4452-b634-1efe521acb4d\n251f6865-302c-498c-acc2-c55b21070b06\nf663c0c0-9eec-4a64-9290-0d1f03462db5\n7747304f-371c-4c92-8884-409c0a80d41a\n25e2fff1-17c1-4018-8a8b-ddbd85e84cbe\n274d49a6-cc14-4d66-bc6b-56a115e303ca\na036bfb0-0294-40c9-92a1-d7888eeecc63\n42273941-d7ac-4b56-9e08-d6c85d6a6d6e\nc35f111c-ebd3-49b4-b154-5a35bca34625\nabf3b832-e2cd-4663-82e4-fb9f64c7c8dd\nab0cb805-05e5-42fa-8047-049be9e1dd84\ncb2b4a8d-52c6-4a52-bd28-553d544d2b4d\n5a16d880-0615-4aa0-b00c-f7e5acc36698\n77703ea9-5a5c-47eb-b54e-fff206940e2e\nd8392d18-f9cd-4e61-8741-98cb0e64f340\nc0324983-baf9-4795-a822-fd60f9319a99\n2137e2f0-10d6-48ac-ac08-7de32f755072\nce7cfaf7-06e5-4f35-b97c-a39984da64e5\nbc4e3a55-2b0e-44b0-b721-907bbeb9c661\nc5681ac0-5764-4ffe-8b45-b747f31f39f8\n423b3319-9259-40e8-8cc5-758909f51111\n76d60ee1-24e7-4a86-b659-21e7289c7b45\n7b6b5005-91fc-4bb0-9a57-532a5c47c73e\n25470491-72bc-401f-b158-1f9cb8ac2387\na03f75f5-5c4f-4879-a577-0c0d1bb33afc\n5b41c8db-7185-402b-8380-10aadd2d8b18\n9947259c-890c-4313-8097-d70becc94cf9\n3f07703c-e7b3-44d0-9c2a-c8b3d01e5312\na0072ea8-baf5-43de-92f1-8f5af627f456\n30b0f0f1-3d50-42b1-86a3-f89ae9cff2a4\n24bcea7b-d92a-4b94-a6ed-7d8c53f4ca29\n7a30fda5-2b83-42bb-aba1-ca68c0549d7a\n00c785aa-622e-409a-852c-ee50324ecc80\naaaff1dd-63dd-42af-a921-372e2f4bb4c2\ne1b7e237-fb65-494b-b8cf-527c384025b5\na292aabf-af53-40c0-8624-b038797a1d7b\n437377e7-38f1-4ba1-b201-bc39161c5466\necbafbb9-1038-4fcc-8912-ac754926055c\ncc004eed-906f-4608-83b0-b16086c7681c\n4ceccdaf-875f-4478-9738-c573b4f71019\nc68b1ee8-cfd4-4b4f-919a-1cd5ed5260dc\ned198571-e16b-421e-8d34-6cd14c4718c1\n56cee0c2-0e3f-44ca-adf1-7f77c23a968d\n70f32165-f1bc-496a-a3dd-3e6549a2b111\n787d0cdd-2c65-44b1-b5e8-b6ad1bfa76b2\n731e1533-5c56-431a-87a6-2a48b3428f9b\n386b9dbd-f147-41cf-bdac-b62077b1478d\nc6f0004a-c4ee-42c4-b126-9b4d6582d927\n09aadfb4-831f-482b-a549-78d0cb48abf8\n2627c079-851d-49ec-b7f3-c4381097a397\n03a7f7d4-d9fd-4a18-a365-9627a487627c\n287647f6-bec5-4fc5-b6e2-9a4ba0657dba\n94b58b9c-7099-44d0-9319-66f7ce932654\n1f9b8433-da34-4bdc-a0ca-df8bfb5e49ac\n62b94d6d-f7ec-474b-afc8-b83cb48e2004\nf23ccd28-9b07-4d14-8594-b1a02cdbce49\nbdf06680-c446-4e00-8f47-0685e75b2dd5\n76b11f2d-4193-481f-b719-7303153dc200\nca797c63-f45b-4e36-ba05-c6ce4b3ea23c\ncba846ff-c5cc-4fbf-8977-72707cf36ef5\nf2b353bb-dab5-406a-bf10-4fa4c82db9fa\n9e893175-e510-489e-b2da-927609677d8f\n4022f012-1e04-4458-adc0-0865746e1b18\nf88e131e-b784-4c31-9024-f6da0d9fa4cc\n43dfe6db-9edd-4f75-9374-0986a2745542\n0624509b-ce28-4564-a6b8-9f5f9928ca99\n3b37c1e4-834b-4251-9938-f6d2e332cd94\n39c7c0b1-7970-4145-8d18-aefdbf7e8da9\n5862517c-1a29-4d41-ba4d-a97bffe92756\n8ab4621a-78f9-4051-b6d1-d6e0a7416201\nf35132be-2307-4f1c-ba9e-980156854815\n9f004d69-703f-4ad9-9956-edeb067fa545\n09d89daa-443f-497b-9a6f-0b8666bbb6de\n36845711-3cf3-4e56-9303-874df94e1466\n57a03c03-8d82-40a2-87ef-1963ade65eec\ne7369697-e4e7-4248-b11d-7000035947f4\n46bba125-1b68-4ac4-8ae0-77f00ad2224c\nf241448b-d26e-47e1-bf0b-c31bebd5084a\n1e94c936-4c90-4861-b8a1-446ef13a0c0a\n7ba39ad3-128f-4c86-b95c-6fb61342b752\nd7c57eb3-a0b9-4d3d-9877-81b5cc93a139\n9fd09bab-4e4b-451f-a7b1-30e7da4ffbc4\n10aa13de-f90b-4293-9c60-631a3b2ab559\nb58a6589-b8dc-481a-abac-a5fdedb7cef1\na48c6923-8abd-4594-a730-557ae64654ea\nef19abed-fb9e-43e6-8073-cd4c2399f52c\nf2937d2d-425c-415f-99ee-a70f2606650f\n269658d4-5c60-478a-9b1c-8d1f69b4ac8b\n81d3a16c-a936-446d-8ad4-bf5a5fb339d2\n1589a7be-4776-4019-ad47-8200c06eeae7\n871fcaec-f719-4710-a3ae-abe6534a82b0\n6d9e5b1b-0423-4b5a-9b93-8a84545b4a19\n287e3377-51cd-4f6a-9c66-20526a1c6a37\n68ce3230-04f8-40a8-92dd-085cee639a32\ndafed067-b2cc-4483-b77f-f69873b1fb9d\n12d2d491-cd3f-44c4-8cc7-28cbe5b3b24e\n1f352bf2-acb6-4142-8021-1acf77b9a91d\n9ddede3f-5e57-4b69-85e8-2e7be1600c78\n940bac28-d9e8-45c8-8c0a-9e4be288e389\n53cf93e2-5c65-4d7b-8db3-2b3c5852bc2a\n1e198744-460a-454d-868f-d4a793f877b6\n6b5c4cd3-a2f0-4f6a-8d27-92746ffaac63\n7ca5f1cc-7e16-4c94-a1a7-eeb6756520e1\nad10c1d4-9a09-43d9-8290-f2d8c9909a3c\naa04d12f-8cd7-417e-8ae1-dc654c183d10\ncac81f65-4d69-405f-9093-bc9bbf5b4e71\n4e79d753-eecb-4026-b47d-2cd2a66124ee\nb2add371-38e0-4a57-9d6f-99f8959f5ba4\n7e6cd57b-0d8e-4ac2-8886-6290bb9747f2\nee958096-8e3e-4d52-aa84-654f535c772c\nf8a20f91-6dce-4ac4-b8ef-80db6cd544d2\nd77d1a26-9d5e-466f-ae61-9c06870126db\n573dfb7b-bea7-4760-9bd9-8fc61fef6381\nff9ec0a0-eab4-4661-8f0a-bf7fc7d9448e\n77414f0c-7538-46d6-96af-9474737ba1ff\nade99aed-3543-4e6e-865c-84f41fa9d6db\n464f4aed-ce6c-40d1-9786-d838ade10126\n9f4b1a28-0b6f-4b76-86cc-8a8a63d4bd9b\nb91821dc-2b29-4a44-978b-373ad5b309b6\n6a8c8a2c-f589-4422-a6da-cddbd74c2f0f\n40990ad0-1917-4247-85ed-b08fca0610a7\n25e80ca3-9943-45bc-b371-346aaf5ba44c\n097cebbc-0835-4bda-9818-55c18f9c9d47\nbd1c388c-4c46-4e4a-a5e1-9d72f88f214b\na5e684f4-53a2-4780-987a-4d116b37c6b1\nf07c9519-6915-478b-95a8-4a18ddb1c953\n766e2848-2c71-4f26-9599-a1a50bdc7e0d\n36d07e9f-386b-484d-94b3-59fa20e0f39e\n7a0f0ff9-a250-4155-a281-5f3efc40ea96\n07000124-6cac-4746-8c2b-6eeafc8b1050\nc4d78be6-8dfa-43b6-94f9-9c3a41bc75ea\n945a332c-bd70-447e-a8fd-c48346cf556f\n2ebcc22f-8e27-4e37-a8c7-1d759f105bff\n5b345ded-0693-40dd-a85f-2c6752e2b884\n0c930d17-6415-4f4a-b4fc-c8328293b542\n9a99ec03-88cd-4437-bef0-74c037669825\nfdf618bd-0bc6-468f-8298-362a004b89b1\n1b9cb7fa-7209-4be0-a225-f6b5f57db07a\n5e0024e1-f860-4299-ace7-007d01d68a51\nabaf4cc4-ccd9-4e67-aaef-8ca0a275f288\nf0a4305d-9b5f-45b5-b950-06cacfa27a6b\n6e5391dc-4a0e-4c23-89e5-fdc90dfd9c1b\n584d7eba-9560-4d8b-876e-8146d403a84b\n724ba4a0-ca29-41d4-8319-ed91387574de\nc68f17c9-93b4-4eba-970c-ab2a347d601a\n1d0ab60c-ba31-4712-b3e7-93f68a2a8bcb\n89238544-7913-4fce-92ee-109240b286b2\nb9cb4e67-a787-4fb8-b97d-9255f7e56f62\n8fa5a345-a0f5-45f8-ad95-050ccaac2cae\n9fb9c002-10f9-44c0-92e2-e6a3e3d6eb67\n7f323428-6b18-4041-b703-668ddfadd19e\n9ad007e9-58ad-4dca-8065-8f01855785ba\n3d340a7b-8c92-4788-b1f2-88ccde227428\nb7723c65-e161-48cf-9c3c-a13701b9c846\nfbb86020-498d-438c-9ab3-a218a924c34d\nd45e7ee3-4754-4f86-a81b-1c1cffefeb5b\n72f476e4-4a99-4903-9215-32f2d5df4f41\n291df31b-e404-466b-9045-3e9b7d4b27cd\nb353f759-2acc-46cc-9de3-244a65c2187a\n0b381c5c-d890-4a90-b3a4-0309d00bcd2c\n9b7018f2-7fd7-4a3d-be31-9f0048f1eba9\n43381f41-79e0-4826-a247-c9cd6bf588fb\n4efdd0fc-34ab-4cfc-b021-aa1bbcc4d79f\n1f27ef31-1244-4758-b1c3-982183a8a0ab\n41d2375a-1d7f-43eb-8837-a1fd7e1ace02\n36ef0fb6-d070-445f-9fac-a0ef989cbc1d\n52cecd84-2ab5-479e-842f-e5969e1d0249\n33efbf06-0bed-405b-9aa3-19c9d1211d8e\n439108d3-4864-4470-a317-f96b7795b22f\ne1a4754a-b167-4770-8283-e0ccf4db575f\na86c4fa1-c733-4790-aba5-d532d1cc2f16\n6aeb70b9-96c1-4c74-bee1-1465bf1de165\n35680791-2f5c-45ed-bd9c-bb339b6260bf\n6402a237-23c1-4524-ad05-2694032de7ee\n808f9958-a464-41c1-982b-40c04f154bc0\n1a910c33-14dc-445d-af97-ec49e931cb65\n1434ee8d-bada-44df-93b5-b88669c75a08\n91d99351-69b2-4cbf-984c-de78f213c5ae\nac30d2bb-a811-4f40-8598-f06aa15d14a8\n67e31999-fa92-4047-963a-3039bedf284b\n6087a75c-40ca-431c-8d14-f64064bb5361\n8dd68a02-f944-4541-a013-c60f27de546b\na7739f47-582d-4fa3-8f6d-8c6f9693f990\ndb5f5881-8c94-439d-9ff0-c6fb70f93ec0\nd594e41f-42be-444c-8719-28611b64b16b\ndee1cedb-224f-43c8-83f2-508851e67fdc\n7dd30e5e-d5e5-434a-8829-66ac64f5b0a5\n74b11e76-57cb-435c-ae3c-e775eb91b571\n0901008d-1424-4c2a-8943-39415c2bd465\n3d312d68-ac10-49f4-974f-45a69645ccc2\n6aef17c5-2171-438e-80bb-1f6d55fd1bf2\n984c568f-18e7-498f-9904-d6ccb15b786f\naf47c281-7d9b-4f71-8dd6-57de3b4c0ba6\nc8969859-2f9c-46ab-84ed-d5463557362d\n7f62a6e6-f89b-4863-addf-fc8eb3f443f0\nbd24f678-0bcf-49e8-90dd-77e5c3aff47a\ndb6c2e30-a376-4fbc-a898-908bcfe56d35\nd731a829-2fce-4843-9c8a-a8c59d4ab593\nf27281a0-2bae-43a3-98b8-486a1b5092bf\n2f2f6ade-ce10-4507-9881-38f469902626\n4060fc73-7d80-4d1b-ba9a-2c83e363bdb7\na0bbbb99-0e0f-487f-b974-fa1e6f03df1c\n10f11664-5193-4d5b-bc77-3a90a1f15c8b\n2f82db15-0c90-4b3c-b220-4fec3c5bc6ad\n79b6a41b-55aa-4dd0-bd7d-e2f4beed636b\nc1656083-71b8-4bc3-87fc-2054413bc36e\n9a718b9a-1475-4ae5-97de-5a3c6de74dd6\n0dfdd9e6-31b6-4352-9c0e-dd780602f49d\nb8791639-3160-49e2-a017-e4a3b3b4e87f\ne63f49dc-56c6-4907-b0f3-8742880bf10d\nb9c0ecf5-acea-4e0f-9a29-c7fe69497e95\n46485da3-dc1b-4356-8073-3e0ff61d4b40\ncf55d147-1e0b-4e28-8060-1fcb7d4c0945\n562f8575-bf64-46f3-8d78-c8731dc3f78d\ncf647207-001e-4606-bef4-54f764764db3\n457088e0-9b45-4e6b-bd35-833f437b58db\n3caefaa8-8731-4242-acd6-cda6aa7356ab\n0a3d8e0c-3da4-407c-a0e8-25e2a17266b2\n6cb0502a-63ec-4b72-be4b-ef2a949d5a7a\n16f5de56-bbb9-41e0-bf9f-18f57f4775e4\ncd200fef-3caa-462a-8e68-4028bf28e785\n5bd6d92a-6b40-45a2-b9fc-985966f3dc4a\n93ed54a8-2eb8-4a81-808d-eede49dab3af\n0f11da74-aedc-4f88-9aee-aee3344394b9\n198d82ae-3275-4790-af95-e830f88f0cbb\ned5ab4e6-0c3d-4f4c-a1f9-cf55e4264573\n7bb3c13e-ed62-4389-94bf-ef34886a3df8\nfe035aeb-3c0d-4476-81fe-a74064e93926\n20b5425f-d286-438d-8f8c-054b000c698f\n9626e0a2-285d-40d7-8da8-2cac6c0286a7\nfc4fb273-1354-4653-896e-87ccb35798fa\nfce908a2-876b-4d88-a84a-a7ba18c3a62c\n82aacf9c-0eed-4696-80dc-62b3ce3865f2\n267f7a27-413d-4448-901e-cd603fa32f1e\n0fe6cc6c-4b02-47a2-a509-2078a4ace0be\n82159d72-6294-42f9-9d11-5cd77b8bdc1d\n8dd4b783-3967-4612-a2c5-4f266275edb3\n7937ab6c-f798-49fa-827c-cc9088b93414\n4598467e-3eff-4e0e-a014-da0e5e8200e1\n6716e835-e4f6-4875-90c2-78b449c30f4a\neeabf4ac-3088-47bd-94e3-9d6887f975d3\n50d92b83-ef2f-492b-a385-c501607ddcf0\ncd6bd5cc-4b9f-4dab-90a7-ede642816947\n7a830e70-908c-41e9-b71c-715a9e2c5391\n235ade09-cd09-4c64-bd42-c73f606aa849\n0bcc578b-974c-400f-8995-eea332fd831b\n9f02b429-2540-4958-a482-3b4bce887949\nf694d85e-cd9d-4ff5-a4ad-459bd4ff05d9\n8a6480ff-23cb-47a6-ac03-7a37b57a1b7e\n17351f19-4f81-4cbf-842b-aa7dd9f21eeb\ndcaf09cb-d3fa-448a-a621-f3ae69efa684\n4c04bac7-96a1-4c09-90a4-f9a831120c51\n97143a72-e96c-4bfe-8e60-72f810eec9b1\nb30c329e-26c5-4033-bd21-f9db17851026\ne954e54c-a72c-4a07-bb2d-c93c8de0a9c5\n4daaf585-7bef-42ab-9a1c-9acf81f8bd61\n0f95a34a-52d9-4a7a-8618-8e0b2d39c525\n56ee6f64-ff8e-4b1f-8bf9-8d620f9327c8\n054e9703-4ec9-4894-adff-6dbb1c4800c1\na951d46b-e14f-4801-aa03-c4c3e4b302cc\n6a1386d2-4e35-451e-8ec7-610dd82cc617\n3fbae50f-b8b1-40dc-a9b5-1dfaa693abec\nf4d4c53e-8f4e-4a37-9b97-664584c247a1\nb9303194-bcee-4564-a0e5-f7448f6341d0\n1e1af710-4910-418f-a0be-696bf28ed39f\nc25380f5-1370-44ad-8c4b-1eb03f2914b8\nca38ee6e-29d0-4f0b-be23-ff1a4440609c\n8da679f0-9d16-4b4b-a9ea-0e05eed25f4e\n581ccdba-fcfc-47a9-9496-175f88641fee\na7b22133-b02a-416e-a09c-41271b414bcb\n3eecc468-fafa-44dc-a0e4-9b704da934c2\n9e54b5f1-67dc-4109-bfaa-4011ba5f1407\n71fe6ca5-fd15-4f76-b6a2-4734633b4801\ne7000ba0-7b8c-441a-ac10-4ccff0c3d307\ne12563d9-b347-44ba-bd0d-98cba4333882\nce284e93-698c-4bd2-b022-d5f8b09590f1\na98c5fb7-3102-4ed1-8448-b4d782acd9b2\nda70e208-fd89-4872-87eb-90fb1c3cb9b4\n3a47c792-c133-462e-8b13-55213ea59c01\nc8d71d81-38a3-492b-99ea-048ad97d7595\n53f8ec85-7def-453e-b77a-043a1d0e97f2\n74999629-ed11-48b9-b705-a30e411e9f02\n6def9461-1862-46cf-8ae2-834fa1c79d50\n62e6b4d7-a666-44c3-af40-a454eeec4515\n7f5e7ba3-3314-4094-a036-f778b99fa68e\n39c3d93d-3463-4b8f-860e-7ef9ab52efd6\nc99f2807-d96b-4b45-918c-c03d19f25a1b\n85f4c32a-e62e-483c-9566-494b43996f63\nf54e2ad9-0dab-442b-a2fc-ad1d101de809\nbd33d27a-49ba-4bb9-b637-5f200a9a931a\ne3927dd5-1c43-4bc1-b808-98ff6e9bc6d3\n4f1caa0c-2b8c-4403-8262-9fdc59fac541\n8bffd812-ded4-4a2c-9fcc-d8800269dc61\ne0386a88-f572-4cdb-ae28-f27d8644cd3b\n73e0dad8-0383-4e07-b0e4-dc227a52d333\n27781da5-8972-4a5a-99ec-19e5c629bd23\n7f724d24-b134-49c2-b800-825425794427\n23cefa3d-82d1-461b-80f9-a082b145b658\n68cbd410-ae0f-4bb3-a0d0-d18c812d0f56\n0485bc8d-57c1-4d9d-8c7a-0e326314e5cc\nf7842c9b-7a1a-4e24-b58e-6968a493f47e\n8c3e516d-832c-4eee-a191-fa10831838a1\n9755b4f2-235e-46fd-8b56-6f372ca36e55\ndf672b4b-c783-49a8-bd0a-9006b8cc6573\n59bebb04-56ad-4715-aaf1-1eadc073e1c3\n762d4227-de18-4988-96bb-73cb153b5d60\n240bced7-a2a6-4047-b04d-cd5fe6a667bc\n45869f71-35c7-4b97-825b-3cf34cab0904\ne2787d4a-893f-4ff0-9a0c-4702d889b91f\n02f932ea-f6f9-4ca3-8910-3b57eaefa4a9\n8e7fac94-5a26-4b79-8ba3-79762e0317a1\na579462f-1af7-4410-b80b-53f0a5277f8c\ne0c309c9-bcbf-4ace-a6a2-5af51e74d982\n6acb5693-d908-4ed9-81f4-971f43b7798b\nf4860c1a-d050-488a-a75f-6a8caba2fd13\nac856e94-76d6-411c-8001-43da7a595bcf\nc06c0ab3-540f-4854-9aaa-f6c424e3a99f\nce330fb5-7234-4fb6-a58a-0e0e42de0086\n7e77d301-f094-4918-9147-a46045e4e5f4\n4e8d06ff-fd4c-42bf-b3cf-5a15f9ef69c9\n7d518483-170d-4748-8ae9-9c70123bb545\n33f1ece7-9635-4a37-8faa-eb595bd478d7\n09af8b83-988f-4a29-9799-cb9282a13a6a\n60ee6443-9327-4a6e-85df-03fd3ac3e32c\n263002b0-5f38-4125-b824-b98e01acd8a1\nb0b5d7c6-b42c-4588-803d-766179f2cabe\ne3cbc3df-3143-4595-840e-edf4157e91fb\n430cc480-d38e-4ba9-b768-a0b57745f3d9\n3f6ffab5-d28c-4679-9cd3-5f3c02f96f12\n2a062f84-6ed5-46fa-aadc-dcb204c284de\ndc842b73-b833-4520-a5a4-0ea681313186\n2218c099-6a21-4925-b42a-a5da00c61385\nbccb8d71-246f-426e-a4f7-bc949e2ba3fc\n056785b6-c139-419c-b4c3-2d83910b8af6\nabf886ee-db57-45d3-afd3-1af666178062\nd5123f08-bfbb-4c11-9489-d407ceffa928\n1f968608-38ad-42b8-bc62-4bfaecbce0c4\nd706980f-983a-4ac4-8e17-79dc822b523a\nd31e1c31-bc69-4dee-aeac-005c2a3c4cf3\n93a5723f-655e-40e3-8511-6b9105f5abcb\n86451b1f-b08e-4ebb-b5ef-097398698d82\nf5d55c50-e485-48b7-9299-52024391c0c0\n6bdd1488-f224-4f3e-99b8-8f75cba10be5\nf88dfc95-58da-42bf-a6e3-d38a0ce41c94\n4a727ca1-27b7-4140-8f06-c8aeae9953f7\na3a373b5-e32a-419c-820f-90e92f5be2f5\nda067722-ed8b-4d2d-b7b9-4f03f6529831\n7db812cb-bb95-4ce9-9a9c-0653ce4256b7\nce0ef5f4-3932-4692-a631-d533cb725f50\n42f49527-5755-4516-80d9-39edce49871b\n2d3e19c9-dff4-4d33-a5e9-d0fa61c13d4f\n17f75600-f0cc-4874-b0ea-6205ec17e0bb\nf7186e40-a4db-4288-9c67-5b850d632f6b\n28394629-5e0a-44dc-b60a-64bd279efebc\n176798ed-2f2d-4ae3-acc0-8a51797d139f\nb12636bf-c846-4a0a-b3a0-23c9924e00ad\n10b43e71-5b55-47bd-908d-6b675aded5f5\nb1b46841-704d-4d67-b8be-9513dfb6f685\ne3f98cd4-9cb2-4857-b789-9fbf426884bc\n20af7e85-4b9e-4cd5-a410-ec9ee82f7488\n5b21dd3b-80cd-440f-bf2c-df5c3d68ad04\n3ebf5010-83c1-466f-b381-33db0b525bb7\ncaac6247-9bd0-4df8-97aa-a399f91570f3\ne3e12b05-e2ba-4c3b-a7f6-b875da0804dd\n11698f94-05ed-4f5b-ba81-b83c4fc44477\nb86ceee0-8330-4eac-ac76-c1ea167c4a34\nc4a9702f-be90-4c00-b133-d5888d7c8d04\n200891c0-05a8-4f2c-8ccc-bdd2faa51c21\nd57ef4e8-1b6c-46ad-b31c-d15e7d354172\n727d76ae-fa10-4f32-8a81-b7ebdac024ac\n4f70b3c8-86d0-4292-94a0-950c329fd445\n796372d8-62fa-4c8a-ba01-614af0d43af4\n1005a499-e32b-414c-a50c-ccd15c5d0b05\nacbc5c36-161d-4ccd-bcc7-2745f48aac50\naf3a3598-c66e-46e9-acee-a80387caea88\n14d43f1a-a942-47ad-9e87-603f86d19b89\n013d2e0c-4c40-4a8d-962b-4a59df7cfa7f\nf1d26fbd-5504-49b3-a9c1-2946d18b7b24\ncecd8e05-4b80-43b0-97c3-a8752ca552ba\neecc322e-dc0e-42a7-af44-d01f2c5c2482\nefaa51be-b2b3-445b-960d-1b14128528cb\n4a5f2262-7cb2-47f9-b3bb-03c27a1819e4\n3b99a0d4-c0f5-42ef-afcc-e4d1be56437a\nc605f85c-27f1-4c38-a69b-e9f3f2eaaf03\n0c269c3a-de88-4dc8-9021-f58189038ff1\ne3ab6fb1-baca-4e61-b7de-cf4161956d46\nfb4957e3-bbe3-4b3d-a211-a85bdf9be5a0\n7ee7f37a-00f4-47f8-b066-7d7a6a926d39\n20da4782-e38a-41cb-914f-b2531dfcbce1\n8d582fcc-aee2-41a0-8d86-eaa79c075bd8\ne37422a3-1d12-416f-8ddb-e282e65f0d50\nc8d6c9ae-d930-43a0-bb39-9483406b5ea0\n89918c55-5a85-4985-bd24-b219da8f5f0a\nd097a140-e9b6-4df6-bae3-4508ea8f3971\nb9d919bf-63e0-4136-b28d-4f8533afe682\n74ed82fb-ae47-4354-91f5-efdc69daf0cd\nc082218c-e090-4c98-a153-57178b1dac9b\n7719a850-bbef-4939-b871-52a75d2ddad2\n999522a7-b8df-4023-8aa4-727661e865ca\n68b96388-8f45-428b-84dd-65f88b76c259\nf6fd5814-70fd-421b-98ce-2e35c0b8adb4\n42459f9a-a452-4f44-84ef-90518ae49399\n3573e910-4733-447b-bd89-e933bfd07ede\n39e47700-24a2-494c-bbaf-920b15b3d571\ncd0ff8fa-7e48-4b99-b4a5-be3799b461a0\n234586b3-3eae-47f8-a3fa-e7ddac9a3c84\nca378122-a049-4e8c-b5bf-4e8e051302be\n8b794043-1983-4985-be72-f22150c663c7\naa93eb52-671d-42c8-bf40-398dc584b8c4\na13faf34-a0dd-4b6b-a0c1-c8258f021f30\na3a2da9a-9016-404f-b42b-c00aa7673321\n024ea6b1-d6fb-46d6-aa2f-a5f71dee9081\nefefbb29-0581-461b-b24d-45c060defc43\na45aae40-a5a0-4ce9-8e04-f014a609cb83\n02f3ec42-4eae-4651-b670-5ee14d1b3052\n39967f22-eaa7-4260-a536-0d877163f764\n90b802fd-18ae-4a9c-b1f7-f7ede855f033\nf0e0b91b-06a9-431d-ad16-1cd0c92bbff8\na1118b54-3c3d-48cb-accd-008490325613\n3ff1287f-d6af-44b4-be92-8c14cebee951\n5bf4b519-0276-4cfe-8b26-a9902530678d\n3027b986-099c-43c7-bba4-ae4515bc5a1c\ncc6fe27e-b9e3-403f-bc80-d72e16fb98c3\n5ebbda4e-db6f-4390-bac2-71bdd88bbe33\n6acf1006-71b0-4b42-aa17-26bb9bcec2ee\nb67c8310-23e9-4262-963c-437047efbd2c\nd3e0fc27-64ac-4c0f-99dc-1923b632a690\n22066da1-b280-42a0-afd4-d1c0ae7ecae9\n00f502c2-a4a6-44ec-bc02-d7a2f74da114\n2b52e867-5381-47e5-a182-5f1288135c68\n6a830e3b-7c38-491d-bd9e-cb4e4efa65b0\n7b3c6a56-460b-42a3-b853-c135eead1dfa\n06d7aa35-add7-42c2-bf41-cac1800d56d4\n93d61b07-e73e-4a39-955c-b52c37535394\n2073506d-26b9-4720-b9d4-4c543baa3c09\na88d6d56-9493-4d3a-8cd6-dfac754a4b24\n50f7d251-634d-410b-9b97-feab031c4196\nea9e9fc0-51e2-4e98-8a22-667e59177785\n834211d0-50f3-4b1a-b491-2ea7d4e77381\nc86d873b-fae4-4955-9735-5920e6466820\nd732a779-fe38-4c4d-a7ac-21784d78910b\n871a16bc-d0a5-4ef7-b119-142f8e3c7b1c\n3ea029ce-b6a0-42ef-8d5c-4b069e2758d2\n6abe2a4d-f59d-46ac-aeab-983b57763783\n7d1a320d-d0b1-491f-9147-3d956c21782f\n856d6c11-5ca5-4878-b83c-b94b9b955ec2\n8ab916a9-6d10-494e-ba9e-7e5a94f5d7a1\n6b3031ce-cfbc-4c3e-9c8c-0852efbe432e\n5cf1ae24-85ae-416e-9473-14bff9e6e301\nbfbd7a4f-fb1f-406c-87f8-5772d3c82635\nb3bbf513-12be-4c56-900a-e94a61d34e84\n0aac670b-f402-44b5-a0b6-229ac5eb11b8\ndeaeacb1-d100-464a-90d0-6665f7831710\n261debec-9d89-4ec1-b2a8-38f619d5d1eb\nb7dfa9db-8131-4b51-a564-89cb58c44862\n228f80b2-7270-4076-9074-0d20d8efd119\n3ccc41eb-5d55-4f71-a5f9-bef50b1210be\nce4f8817-451b-4624-a164-e1c83c928381\ne87e155a-fe60-45a0-b617-7d65376e15e6\n230ebdba-8b43-41e5-b61e-09b8d6d8a7bb\n28c0f20a-38c5-4ba6-9aba-4341ef1541df\n1bf33059-bc80-487d-9aa7-b7a551acef42\n00b16d93-17bf-494d-bf05-9de985860649\n9a3fbea9-2aa9-4886-8d71-0f01a6dddf95\nd3601a94-da0b-4706-b54d-7363546b28cd\n8aa8f4cd-c3e7-4364-bf37-d900ade42bfd\ne1a49ea5-f6da-4158-8ee2-1918f7e03e36\ncbead882-ea43-476f-aafb-140f760a7abc\n45e2a03b-e641-46d8-b5b6-1efa9be9ff31\n1a871218-8b57-4208-9268-b5d2c5d0506d\n4480912d-447e-405c-8299-a594e1b35378\n63bc00b2-b80d-4676-a5c7-1ff246185b85\n7ae8b396-19ca-41b8-b304-097d9983c86c\n7d0ff9f7-6e06-43f5-9af5-5a18c574822d\n480783d6-a0cb-4598-85ec-67870654d1f9\n172f947f-97e7-4e91-838a-d2225d123c42\nd35e1f50-09bf-460e-b067-61738f9f824c\nedf5851c-9337-4436-800a-48526cf0bec3\na3059d08-9863-4c2a-98f0-9861833155a8\n835588e9-4f5a-40c2-a15a-670559291d8a\ne1807e5f-ffff-40e7-b708-16b6d5e2b391\n347a40b3-4256-47c8-98f6-c0d89296f0b0\n5919a5e0-37e6-454e-a4fd-bb7629f9c871\n829a7cb9-74d8-4536-8c1c-0a0919abb130\n2dce0689-b993-4c53-8e73-93cd6974e076\n79e073d7-f2eb-4d20-9738-748ba842b601\nd9cf359f-0dee-494e-9c9b-8b19d6174cf5\n54ef028a-5f3a-46fd-801e-1060df74a04b\n4525bbec-e0c6-4c59-b74f-ab1be57e3441\na32da1c4-4152-4282-984a-211fb6e67648\n60e16543-0760-410a-9cfa-88f77696b5fd\n42e2992e-8514-4e49-a12b-dbf1f1b9c749\nc8520577-0aa7-4887-b2d7-05f733ee7419\n5bdf5e5e-3a60-4ade-8cb2-1cfcb81ba129\n5f8bd9de-7a39-4ba5-a925-114217953878\na2c22948-c59e-41dc-9bc3-35d14dbe42d2\neb2be867-ebef-47b9-ac82-0e1b5f33a11c\n4ccaa198-48b4-4e8b-9145-87da41e3bb53\n8e97630d-005a-4173-8ae1-719be80c0079\n459986e6-ec28-4a5b-bf30-eae69f7a23bf\nfd18f75d-e9cc-4c40-ba3e-0cd6900852dc\n6d42de0b-a53b-4005-a0f3-622d6d7b6330\nb8ec1e15-8b27-4418-a9e4-732b6c7a94a5\n2b50fa8e-dfa7-401d-9a0a-e88c43674b42\nb82481fa-6f03-49f3-95fd-5caa0a7a5597\n83eacfe0-e893-4c3a-a0bc-45997bed0966\n0f5a2d3f-8212-4bb3-96db-43844a219e9b\nb61dca55-82f8-453b-8fef-b4af368cfc77\n41c8a2d7-18bb-4006-a5c1-139c07b21549\nf0695beb-9bfd-40fc-9581-4e8eca8da25c\ne23875d4-f666-4c6e-b20f-d5827be3b9cf\nc88037fe-ab54-4650-b0cc-a8d20802dd2d\n619a305a-33f3-4c0a-ab0e-b2287f27f6a2\ne2fd79d1-05a9-4f4b-84a3-a153b171d2ad\n14b3826f-5ebc-42f3-b694-87d93bd538ff\n3cda2ac2-7412-4232-8787-0da92ebefcb1\nefaf16e4-47fc-44d3-b079-757255b898bb\ne67f6165-b1e2-4c5d-b69d-c2c239aa5335\nda79bec2-af61-42c3-adc2-7046d0912995\n6a88a067-9b8a-4342-acb6-729dd187fdb4\nfcea2138-4b01-4632-b77f-2c2b2276b1a4\n47e6867f-be31-44f8-a09c-722ff1c05ab9\nbefb18fc-de73-4b89-a1e4-9dcf12f86df4\n06ed50b0-772e-4c27-a22c-2a935ba37a6a\nfc096949-9a46-439d-90fb-e42e81e5aba2\nc6f1235e-2e02-4205-b565-7cb263606bb7\ndf432dee-df09-4eb1-aa4c-5bf5b8341d6e\nbdbab5e4-7185-4c24-b930-6313a328e973\nf8ce310b-1ecf-469e-8878-1dab6e3c549f\n5e3e9dd0-5a5b-4ee1-a5b5-c7c8a418aaf2\nbbb16f45-cdab-4f95-aec0-f3bde8d55619\n37e1eed5-0aac-49a2-ac55-fa03e4a26096\n21373dae-cb8f-43e1-adf4-090522ecc6b4\nb222e3f9-2f1d-4adb-8cb1-81e81c52a992\nd82daca4-2e83-4944-a9d1-18ff89f3f515\n67b879c1-10d8-40a0-a9a0-bef68e5dc904\nfce18727-8b15-453c-9f87-0b2ab067d854\n602aaab0-593d-4251-958a-7c9c512d92e8\n37f30aef-8852-452e-97eb-505ddff801f9\nd944f2b1-f8ae-491f-b858-cbe195f6e13f\n6eb8817f-8260-47e6-8b9d-01ace55f7b3f\nc9f296d7-50cf-402c-950f-7831bbe29870\nb9a18ecc-ec73-4e0b-99be-92d9f29bf3ef\nae0b80c8-d55c-4490-9d9e-b258f9e4f8e1\n8cc50842-e89c-4e11-a280-120d1bd2590f\n3cb2ec23-d710-41c8-896c-d5e91b6c960b\nb10ec54c-eea0-480e-9ba3-2b226f3d9595\nd12b528f-d80a-4408-9dac-8f7d5d6d1ad5\n3269801e-56a5-49d5-8a8d-4f2eb3a150a3\n38d78906-c80b-4ef6-b78a-0e19b5525d8b\n490d9b64-c84a-40b7-8dfb-1339d396ac69\nc5ea057a-67a3-48db-b232-cd2f1db08d2f\n83fe6a4f-de77-4c40-a089-3714105527fc\ncd9ece68-cd4c-4684-bd1d-5d650990e7ea\nee1f88a2-915a-4c3e-ae66-bc08b42b4c1f\nae798797-8ac3-405f-bc4e-06b771ca861c\n17c16415-5250-4e0c-9142-5f9ba592753b\n23aaa05d-d4fc-46d1-9e38-bd97544df986\n982dfa3a-9fc9-4220-bb4e-d656541787fc\nabf31b2b-7b1d-4b62-a3a4-5f175f1cb176\nece59974-fbdb-454b-82b6-b786f09394f3\n2084e576-8225-4e16-ae48-4415301e2cbf\n5dcb2ea7-78a4-4751-871d-c75769fcfe19\nf8503552-0285-4000-89a6-5f7f4b4d6839\n2673e2df-2361-49a7-a314-0e08c47cc179\n515ad200-9dfe-45eb-bd13-3bef639282b3\nd9c1c0c1-9198-428b-8be6-2ea628d4bcf6\nc7a40f6d-a023-43e1-873f-58bae1e9f226\n7f151086-847a-4ef5-b841-5555e3bd9375\n6c03ca0e-3f19-4eb3-9714-29a4bd25ec06\nc57d3c3c-d5d5-401e-9c7b-4229c8b86584\ndebb345e-cc5d-4611-b4c8-87a174bf7541\nab0b6d06-0d25-4e79-bafa-70164a4351bf\nb25537da-5716-477c-8d80-a72a130fbc1d\nc78d8cc8-895d-4ab5-9a47-b7c743beeef3\n79d656ca-bfda-4eaa-82be-3270ea2f63f0\nba4e31e7-9510-4d6a-9d31-66aae26e7b42\n7c4d6c0a-2aa7-4648-8c4c-4b87f6f7d45b\ncf9c149b-ce39-4b09-93b2-93830a78fae0\n9593d5b4-b0cf-46ff-9b06-80fd1c481afe\neced1f6c-4627-429c-9066-5e7ef09898c3\n1d330f2c-599d-44c1-a2e8-6c413397632b\n48784094-4258-4757-9a38-2658f341baff\n3a1b33aa-d1e4-426d-8581-7391aa46bbd8\n5ed0a40b-04c3-480c-9e92-61010cf80d5f\nd5438434-33dd-4bdb-8c30-0018b07a5bc6\nc1272d4f-8748-4210-890d-37f8b0fb0a02\nc2dfbfe6-50c3-40d7-9c9a-d81915a2d6b5\n4513c0d3-c6e1-4745-b44b-f196940fd8e1\nf2c35ec4-c531-45e1-94ca-cdc2862747c1\naacce7e4-d04d-4c30-962f-e90e7cef6aa0\nfba7bfe0-7e1e-4ecc-9f97-c3b7d943d46d\nd3884e58-c627-4eeb-8165-e2dbf1f171da\na527b1a9-da59-4151-be2d-769da87d2ea6\naeeeddea-455f-466d-b05e-f1de32a8edfb\nc8d0a441-6032-4eef-b056-f1c02589a049\n8058b724-78f3-4abb-84aa-4ba28701fa60\n65e6f12c-9ce2-4adc-828e-272ae10fd4dd\n0191e3b1-3d88-4584-9af6-352b42c87149\n9c25f7f2-e190-4d96-9709-5692dadfdd02\n16447646-a952-4cb5-90dd-749649d3f8cb\n09c332c7-3a65-47d4-a2dc-bbfa399db5ed\nac30abad-ae3c-4a19-a3f4-0e5ed66f961b\nbb079520-f28b-47bc-b3cb-b8f3c28a7fc1\nd8dea147-001f-4744-affa-e771aa7cf66c\n1a1525c7-dfe5-4391-93ee-e55ad5c5850e\n9c251021-2e0c-4516-bd02-0911885282a3\nf4113d62-d65f-48c5-b6cd-32830d43c054\ndfbbd441-6427-4096-9a9f-c03bbb6ae8bf\n2c4a037a-dcbf-4283-b19f-985340faeb06\n41c3b62d-c08c-4361-9124-e024d970fd29\n26d6443f-10ac-4628-bffd-a0f19d117874\n1c769842-5165-48db-abee-ff41a5586e66\nb9898ebb-bc22-41b6-9376-f930ba8ae71b\n527e55a5-f603-4163-b70c-68a6cb7651d8\n49d4eba9-d4cc-40b9-a55e-16faa85d4fbf\nbe7b1b14-37a8-4605-b5bb-abd86e0ab8ef\nb58f4959-2ef2-442b-8903-7107a2250464\ne79ab561-f6fe-438a-9f59-084b7e987d91\n8fd9b260-3bd0-4ccd-8f02-f97aa928b4e3\n676d1b30-e1e9-4f05-82b8-1b1aaa804e26\nc3484903-ede1-488c-b7cd-939ba9408696\n1db018cf-76d8-4d1e-89e9-c9cf9ce46d33\na54f803f-337d-4d2e-8bbc-381e80107190\ndcc34e64-b91f-4275-8c95-29fb5537ffcb\n9a1468da-adf9-47dc-a883-d027eee8db72\ne724d152-3909-4805-adca-febe04db4fb4\nc7758bb0-b8f2-48c4-a895-5d5b387d20c5\nd1622391-28a1-4a80-8125-20c4db8c1b49\n5f0a1516-b718-4c62-96a9-5c2e7a334afa\n0312f995-8bf9-44b0-98ed-af0bdeafe83f\n075d2cfd-35b6-4e86-9a22-a3e6f3c8f108\ne20861b6-d4f7-43ed-96b5-4df739c0d5ee\n13fbe999-8eb7-47e2-9049-d67056e3ccf0\n12bb8b29-a044-4c31-be3b-55f724f89e20\n8be64ca5-68cc-4b81-b645-6cd4cf8e9fe9\nc2ca4055-9e06-43d3-b090-01985afbfd95\nc3ef2ad4-5c37-4265-9c7b-00d0a258f626\nd2a8b2bc-245f-46b3-8d7a-81559be46ce0\n594d445c-ae2e-4145-8533-9c806de92fbc\n8cf75d0a-b555-42df-a3be-cc7ab356d50b\n4e536ca0-eb85-4296-83b9-fd23e50a9803\n9d925f33-7ff9-4995-9a89-391d05a57e00\n58f38415-64a4-485a-b79f-f2353bed209d\n2ed16837-c9e1-4960-b022-4768230f7793\nd6ade661-96da-4394-b54d-220142451770\n594df0f4-4f4c-4b3b-82b5-143d0bef8972\naff16c39-89d7-4ae9-aebb-eb79498ab8ec\ndba043f7-226e-41d4-aa04-00f348b472d5\n6b7dbe14-9cb5-4291-b57b-85b820501452\n45c76d74-d975-4bf8-89c5-b8a549848966\n3f696bf2-75c7-4b07-aa15-f17a8e6113d0\n21bc8406-be7a-4ee4-868c-11c007579dca\nd2b4268b-1973-466e-94dd-04bf44115825\n17a56b19-0aa4-4b9a-af70-5436b18dc1b6\ndce1970b-53c6-4ebb-ab26-f93a8b115158\naef286a2-98a3-424f-92ef-35aa0d57aaed\n9e97411e-0af8-4b42-8bd2-7dae9a847050\n9ab3e463-ffec-495b-b799-d3d058cd7963\n522f435a-b9ed-49a1-a0ec-89237db18312\n02f504ed-33d9-4b2b-8ab0-e43dc30f3dda\nfaabc99a-441c-4777-b068-c0fba4c71573\n9b8a9ac4-d0ab-41a9-9bca-5ec572484f2f\nf379562f-f3ff-4e7b-8306-858249611fdc\ncbaed87e-34b2-4170-841f-b8151fff21c2\n6812a496-df27-40b0-a5ab-f7b16a755046\n461f2513-e917-4be4-83d0-28119531c68a\ncb8816ae-32e9-492c-a310-ab5d30d07d74\na28b0c01-0951-4243-8515-b4d00861ad12\n77decbd9-020c-4c59-8f2b-a43797276181\n100659d7-fe8b-4652-a16f-a3d6b5f0235e\n45021cc2-1a76-4058-b0c6-301181344732\nc0256c58-9bcc-4501-a2fd-859d0254d0ea\n2fe551dd-208b-4525-92a9-c3546ee57656\n4a61191b-e526-408a-a6db-3dc5dabb75de\nea55e959-bf40-46cb-b869-dbe993f364d5\n071051dd-8a28-4bf9-8164-6787820d0efd\n1c6b36e3-f9f6-4c8c-a17f-1cad89e752b1\n21123ab1-e38f-453e-800a-b99adc5e7a9b\n2dc5f07c-a127-4aa7-b35d-6cfa22c9cdc5\n386e6f07-e7ae-40f8-9a36-5f4b2e35e5c2\n7bc000d0-a084-488a-ad65-72fca977bdb2\ne1db2f46-63d1-4ca8-b754-609b8e74d1da\nb5a62a4e-7671-4113-8432-b143bbbeac76\n6c0a22e5-3207-4452-afae-46ced804ad44\n7863c3f8-5528-4108-b271-1b9966968549\n55450007-f57f-40db-8272-04875c74656b\n5bb66da0-32a4-49c5-b044-03b9122a8e3b\nf09e4747-3bab-422d-a9eb-bb61067d8e48\nacd9a0e6-51d6-4ced-805d-94db2604a2ae\nff16eebb-2c0e-4fbe-9b4f-89149bfd8e72\n7347f904-0e6d-438b-87a9-c36a16679a0a\ndc5148c7-b568-4f99-8bdd-95506661763a\n257b32bb-47c3-4803-bf56-b2a98427df66\n0c32de93-e9c0-4e2d-89dc-cec40edbd619\n9476531b-94a4-46b5-8def-4fa0871ea66d\n823917ee-ed86-4ba8-9f6b-e2b86c17acf7\nddf0fab8-b6a2-4397-869f-9154007c9ba0\n0bb45cbe-fe1f-43b4-b2a3-7adfc434c00a\n25e86728-cbdc-465f-8211-8ff52eb0af83\n2a7df8ee-2fe5-44d9-842b-c59cc0e42c5a\nf8c73ae6-abcb-424c-88ac-7f38133ca91e\n5c3c9add-138e-4b21-b1be-a3effa66e60a\n8f752747-b500-4369-a830-4757a9282f55\n461a058e-aa5a-4717-888b-b206585fe6d8\n364d8771-f9b6-430b-be98-02c0c8388e64\n1fcbee7f-cfb6-48e2-8042-4da60846e62b\nd273ee19-c5db-4d1b-8ad7-38e68c1a6bfa\nba957ebf-7d96-420a-867a-f61b041a44f1\n0eef25ed-89b5-47c2-8cb7-b3ea832fbe91\na9871a28-193c-4c3c-b4f5-3d054ddc7b4a\n74783f81-5141-4de5-a3d1-f1c18cd36eb6\n27e7b145-0d17-4d18-a1b4-dad31790795d\n7de1439a-df79-489b-9e11-0ce1182022ba\n8204921f-a31b-4a96-b946-a93cb7219693\n81e1bcad-cca7-4b41-8319-3b131ebdc671\n92f0a910-6128-429f-a8cb-3d84f8a9a885\n9ff8c660-c5e6-4fd6-bdd5-44ad25d5b343\nc6547db1-0500-4653-aad7-77ca8e4f1d48\n4d30d00e-6641-4432-a8ca-55ada75d3ea3\n4505d654-d35b-45e4-a34d-6dd4bad91665\n5e31fe08-5beb-471a-bb70-4b38671ac624\n55d9ff54-be39-46f0-827f-77f6ef248452\n148125db-a760-4b9b-9b68-de656b91d4c2\ne6ef5f02-7c1c-411a-b210-afe3476d2ea9\nb6d9f374-9139-444d-9256-1f45477a5cb2\n165a7b76-8235-4db2-b921-3f360d91d297\n457df455-894e-4bd7-8183-88a42ae4f1dc\ne2288391-b1d2-4d83-9a3c-1fc1e64e2667\n76c25cb3-c96a-450d-a06e-61fc46bc1270\n05705453-1ae4-4858-920b-274cb95b51df\nd81b1ea6-3ac1-466f-87a5-e71e05fcebf9\n26ab84db-74ac-45ec-85e8-9bfcfbdf910e\n71e20112-c574-4593-bf13-4c047e840c46\n8ba803a5-7210-4f62-b66c-5eb81de968c7\n5b15b6af-a324-47c3-8a0c-d179a281447a\nf83c05df-38ff-41e2-811b-b7e1bdf61fd8\n78501a25-f2f7-4661-9ef7-c170e311679e\n871c8718-8177-4b39-b286-185e2002e7ad\n6e1e7288-481d-420b-8f93-f8534461d172\n26138e37-73ec-41f0-90d3-d2025ec05e38\n729764c1-2f3f-49b0-b967-18d2912ca9f2\n7908a4f7-fe8d-4ffe-a72b-516c5110bb39\n363e3759-717c-49ff-b7ff-4c949ba8e511\nd0cd177d-025a-4776-8792-2870faab4f98\n01ca3a73-4a6e-4b0b-bb89-aeea81ebfdae\n2d6db4f1-c6a4-4ee1-bbc0-e9574836ce98\n02fa4e53-dc37-4497-ab67-6df3fb4279ab\n76566063-1e27-46ea-80ee-7e31e1a5e111\n687a84bb-0b10-418f-ba20-b387184f5861\n8936d2dd-cc4c-492a-a383-10c5f5dbc470\ndd954a07-e740-4bc4-ae2d-c5b0228b8c04\ne74eb6be-f0a9-49dc-9014-85a3fdbe207d\ncb31eedf-baa2-4c59-abf4-be2ef4af3b39\nda8e02d6-01fe-4f91-af48-d976515b0186\n800be8c5-1d73-43e9-9f72-1a20e6a1a021\n02e52599-3648-4aca-8be9-35f6e613a969\n0dd671ce-0be5-4bdd-9191-63dca953fd66\n7540435d-3f86-4fea-b6ba-742eb3933a94\n25e915ac-af9c-4d0a-8f3c-bd30392d132b\nd8a7bc57-40d5-47ed-9ea6-e952a17c42d9\nf117adf4-5442-4730-accb-ce29a96d797d\n2f2732a7-1eef-440b-abd8-8f43aaa110bd\ndd3a6f12-d6b3-43f4-a38c-96f95eef6f4c\n8fe657e7-c99d-4bd4-b3d3-21f9c87c1d9f\n5fd4f73f-004b-43ee-9212-bece0458d3cb\n6a25fbda-f813-440b-a388-38d78ca8ecf2\n39b2387a-59d3-40fd-92c5-6c154e841994\n401dc8d0-883c-4a71-9ba3-404b34e9b1ab\nf014381b-476d-45f5-86f4-5ab24332d9ca\n8820cedd-dac1-4b06-a6ee-3d83b342a00b\n294924a7-4542-47dc-898b-17a850e77474\nfab9b097-3ec5-4085-ac0c-a53c1fcb7ed8\nf29701f0-4e05-4d56-9c24-1ba840f841ac\n250d5802-0013-43e1-aef8-76fde588b895\n06452eec-fcfd-464e-a6ee-dbd4d982e4c3\n3004bfc3-e249-4736-aee0-b43b419ef280\n75c63326-586e-4cd7-9cb3-634c98b79cbb\n2dc01fad-e6d7-47e6-a0b3-2a0c2567c179\n1d2f1527-ece5-43ec-a066-f0f3ba287fe3\nee91b519-a475-489c-a32e-2b21b950479f\n8486c8dd-543a-410e-b033-a00cfee4a882\nee598cb2-d18f-4c80-b662-948d400b9f5e\n866d3c7b-f5a0-4adf-9d4d-7a2061666b40\n206f4649-f762-4e88-b634-2623661ed165\nb6662e7a-2ba9-48c2-8cab-1ddf521fd31c\nc6fc35ba-0ec4-4b8b-b530-29a1d95c2ca5\n8f8b7468-7ada-4f41-9ad2-afd930df6ff4\n465ccb36-a011-4a72-b583-57186292c4af\nc83ec9f1-7a5a-4821-a177-22b5ee32c8c8\nb44e5687-93f5-4884-bc50-8921aacd080e\n796bde81-8d1a-4f3b-93c0-3ef9fb5fa2fb\nebd47520-bd1d-4837-90e6-ae03a2daefb9\n03ec1cd8-d270-458e-9962-f826122c46fa\n334720c1-8ccb-4729-a0dd-407b849bdf4a\n19cdbff1-a1c0-4d92-933a-53276b4bd148\nfea0a260-d974-4124-a131-1620946a4559\n6aa0c8d4-7656-40b2-abbc-f35d38526399\n512a5c76-5a3d-4912-87fc-f8748e46df3f\neb2a0422-ad38-4648-88b9-d2838f862945\n06444d47-3bae-40a7-b0b7-e127c5170c8d\ncc59e9b3-069e-4d7c-b380-1829b385d712\n33e61cef-2240-4be5-ad66-e22dd8814e84\n43d083cd-8884-4f0b-b72d-730f7f97147c\n8beecfb6-03be-4380-a1e8-442125eca6fd\nfd373ae8-f9e7-4782-8a39-5afd80c41aef\n4237a94b-78cc-4b5f-ab24-f5c41cb47ef3\n0e1d39b5-b665-4e09-a00a-c9f2c4759b18\n56f546d9-16d6-4313-947c-4514b905ffa0\ncce9e0f8-cbc5-4694-a721-955945821f67\n8667988a-2a8a-42f5-8ff5-f7a39cc6002e\n861343b0-ec18-405e-af0f-b4786a4b3723\ne2d85f59-53e5-4110-9ab3-8930d4dbe03f\n54cdf128-7dc9-455f-9ac7-ed4d23375d80\nd25b4c78-3841-40e4-8049-7602aefcfb47\n7dc1fe30-ab42-4f1f-8756-e6ed3ff31d5d\nebd98a9b-1c83-41a0-b921-dfa3662a4a42\n6569b934-2c82-4346-846f-fd6850a82e99\ne8c82b3f-cf94-43c8-aa74-40035124bf0e\nd1511cd9-d90b-482e-9588-ece65f36e418\n6f57a1ad-ec15-4520-aff2-f6bda46f9bca\n8395826d-ef37-4841-bf58-0fd10c359dac\nc3813e8f-ebec-4891-b82a-5cbcf64d7219\n96a19855-b85a-4e27-a635-1bb1783ff789\na2b2565f-22f5-407f-b507-fc626d8bb8dc\n4adfc047-796d-411c-bab6-dc9964e7aad5\n1fd09360-98cf-44be-899b-02393448b9c6\n28d8bc17-b40d-49ba-a108-ac04459b1afb\n93090d7e-f1f4-4c2d-ae2c-fb0e871324e4\n81f682ac-6d02-48e0-b8b7-194e1c3976e5\n53fb7d35-05a0-401e-adc2-f9df30588b71\nf6488e80-a043-47b8-9f9a-0cf085e488d5\ne4b693cd-a789-4cae-b323-284c498c0301\n59c97b15-369b-4c8a-9d3f-7e4f6c61b5de\nc314af74-a73f-48ed-8b03-e8adc6913025\n8fb5007d-ac86-4fc4-9cd1-a95bd19d3fd9\n6d79eb87-5d52-4523-baa5-e7b89bf72153\n43f14b91-993c-41e0-a2f5-79f3571871f3\nf1ac0a54-5dc9-4fd0-a746-2fd6a8c88fdf\nc03e03a5-5ccf-4527-8236-5c2fd82d7b1d\n0ce661cc-1c71-4f1e-97b7-a7b3f4b1861e\n17a71988-d9dc-4e87-b874-0a32c9f2b7ed\nc791468d-9a54-49e1-a65f-0868bee31858\n52be7d8e-e087-445a-8c67-270d4c7f5d8d\n8ff03d96-6f3a-4083-8de0-5abe44b11517\n32b4107b-073d-4831-8f02-b3007d28b42e\nff9bf402-0318-475a-bb6d-22fc921c013f\nc7207b1f-dda7-4d49-8c0d-a6b3c4c0f861\n33122356-b2aa-4f27-bb73-afe7f020b98c\ncc1e343e-9844-45bb-8b07-ca4b0968b132\n0a64531d-4bbc-4531-8f0d-a5c278cde070\n9c49af1c-1b51-47a8-b7c3-2a880387a4c4\nb33b2211-aa90-4345-b3f6-201adc55f83f\n52eabaca-aff4-4878-a042-19866346d0c0\n331d0bea-273f-4711-bc29-6507fc705d28\n5b51c5ca-5413-4580-9b01-5c424533a6f9\n58b0ee5f-deaf-4d93-88e5-d755cd123db5\n80ca773a-a0a0-4b9b-842c-8262f2d52bb6\ncd36573e-ceb1-4d20-9636-5926bb0cd6c9\n277d15b5-e3a5-4271-90b1-f909380ef10e\nc009c427-3580-4bd9-b2fe-bcbc0e1c5d7c\nd1937f2f-66c1-4e6d-b10d-fbb9010848ad\n9fdb6fd5-b08d-4497-af5f-b1460a5779f0\n592b9a84-fc35-4303-b4b1-35d6a94ca923\n7946e8a7-b0cb-4890-a12f-514b186f494c\n24bb1df1-74f4-409b-ab38-a7c08f558012\nce95ad45-35df-4b14-a6a8-47ffd0412572\nc78f8486-81a9-4c7a-aaf7-1d350a3e06e0\nbe53f5cb-311a-4075-a940-6111ccb6c677\n4fc8a7f3-3727-4519-9984-b2d5be3ce03a\n591a0d4f-63ad-4803-9b2c-0f8724c3d17f\nc7ecdeb3-5147-4a43-9a91-8fd47ac64ce7\n7d678bd6-6b3d-4bee-9649-1921ce2acb18\nf206c1b5-7e0d-4c37-85ca-b0a96b082b69\nfc4ba311-e51f-4a9f-a555-99752128dd65\nf33d71d1-4166-4d30-9220-cb2acae4c259\n5ec574ec-8c44-4b73-80d5-8c75cf17d59a\n8141d225-1a1c-4f18-bda6-0784b808b7a2\n5a0809d7-7245-4494-b68d-bf9417b1b965\nde332317-2ee0-4393-81be-f14689528c93\n3b7878c8-e996-4177-ac58-ba968f873dbb\n4105e220-5ec9-4578-910e-13b010470285\n90919aa0-06e4-4a6f-bd49-56fa82c8b8e8\ne519762e-6045-460e-b97d-e88cf913e1c3\n396259ef-3ec3-4a89-96be-7a45067fa6ea\nd51a7a4c-86c1-4694-b0d3-002c12ce3061\n5d1f9c91-f29f-4ca7-a1e0-aa9bfdfab18d\n30d6fa95-b4e3-4d7a-a557-c2121118e524\ndd0cc6d8-a914-4d17-be11-526c842e938b\n0ec65f34-3581-4c00-ae4f-e41ae7422297\n207df767-015a-48b6-a83e-4e3be5a27cc3\n15c2e3ee-d6b0-45e6-9911-53c0b6bcda27\n31438bf8-9acc-4106-939c-0c40bb26249d\n62731f57-8fdb-48f9-85f2-f623f478b646\n9b19a4de-7b77-4c80-8f22-7e754f0f04e9\n367b3437-9a28-416e-9d29-932e4a7d5fb0\n0796e91e-3705-4a11-b6ed-b272850c1e49\ne33fc3c6-a1f4-4b73-9405-8ce28b977c32\n18ee64cd-e639-4b39-b724-c3de01ae7f8c\n61d61f98-a906-4093-8ae6-99c4af2e477e\n25847314-4ba0-4d3d-92a2-dee389847ef0\neb93fcbf-be52-4467-9187-3455958b22c9\nc1a7baee-053b-4512-a7aa-2ea86a0e78f9\nda369878-1259-4387-969b-182a02e5eca6\ne4ba341a-8a02-46a7-a016-d3453cd92d72\ncf3322e0-c81e-4259-8e38-f702d22b8345\n5b3360e3-e4ee-477f-86f5-e990a00045ac\ne2fd786a-60fd-4eee-9236-9a65e15f762a\n81b83c18-1586-4d9e-a3b3-84b4b8db7df8\n36fc195a-bcc4-4f48-8cf4-87c324c02dc8\n5d83d273-6090-43f5-845a-65035691c42e\nbe686633-34a5-4c8b-ab2c-b5d6ade23bfd\n0a250ffe-15ab-4a85-8396-8a7089832f33\ne35b069b-e906-4f8b-8690-dd6382b6fbe9\nba9d36b6-680c-4e5d-a989-2e6191bc79d7\n28d50a88-8361-4dab-893f-d5885492a51b\n886eca37-ae0f-4a22-b633-65915536fce9\n7b74f748-2a35-4d4e-9a2a-81c7100e0e4a\n0b2367d2-108a-45d9-a0ca-61bb6b44bd0b\neca92b0c-b323-40c3-a900-1e7d5f68aaca\nbd2508b1-a7f5-4c6d-8009-05d35af79687\n2496a796-3e60-4e76-a95a-8ca3c768da2c\nbe18ba28-8513-4de9-968b-ea9ed75a267b\nefbe4099-907b-47b5-ab2b-39572f7ec268\n8b7dbc47-59be-4ef6-a47e-313297b5b7fa\n4585c510-9325-460f-aba4-703c3f043dac\nd85fb04c-eaef-43c2-ba30-f44adf736fe3\n77a23bcd-ed37-4b95-9125-61d70d390c36\n9c04c13f-d09f-4be2-8cbe-311c4515e005\nb3b3345a-9823-4f3b-8cdd-d4657ebaac4c\n1ab3398b-b5ad-4087-a1ee-b7a7e841776d\n8243844b-3694-4e66-ba1e-a7c9263a5424\n31e2d835-d812-494e-a610-75abd72a9db2\nbd3ae60f-4db8-4d00-b7e7-d4467fa3a58d\n34f54090-43cd-4246-a7a0-6f35f35b9d11\n81a011b8-9f47-40b3-a38c-67bdb731bc95\ne67689bf-7e7f-4a8e-850d-590064488390\n26e36744-2f03-4a2f-96e4-96b7cc0063ab\n6d6c833d-a860-4a84-841e-6186399ba73c\n33f228e9-3649-49c5-82cd-848e395e66d2\ne4a1ae30-eb91-4200-9e00-119c7c760ae4\n27e2d364-577a-490f-83a4-524a55019305\n36f2a9a4-3294-4d15-8208-053e07ca6e3f\nc5cd4c19-dc11-4960-987d-3233ea6765bd\nd2cea324-71ca-46f3-9afc-e3afbe40c0c5\n2b8a27e4-f6dd-4237-bbc1-fadb204ac056\n1512c528-67da-4649-92ef-c9739ea59fd6\n4fe06fff-e6de-4bc2-afc3-a0535ec21285\nf26a45e4-df4f-495c-8b89-db75728e7bc4\n2a160f41-7852-41c2-965f-418040773e5f\nc25799f9-ac37-448e-8c35-f1a62a9cf47d\n22332455-6c9a-4fc8-a0da-66cfe10a2b86\n4f6ff1c8-a0b4-4695-819d-48d18595fd9f\n20488f14-1394-46be-bbef-b7406f96ca07\n7f1b665d-5b18-43ab-bfb1-6dd429ec282a\n68fcb710-f58e-4e5d-9796-a65ac7acfc3c\nfe21a0d2-dab4-42be-b1a4-39c3b2fe8a24\n867e9527-f40f-49bf-9780-ca0947d73d07\nf2d2a964-4c4d-4074-bf53-881fc4a5508b\n6b0d21fe-80b3-45c9-a84f-3c5623db0c9e\ncc89d758-7bd8-4bef-8494-1723d83d06f0\n3b4f24d8-34e6-4b1d-a51b-4dd481826242\n5fe0bcfc-7996-4316-aaec-447703cdd0f5\n722c43c6-327b-4a4a-9229-e17fcc872c2b\n9c557830-40ba-46b9-8a8d-1045be620f74\n6d5c6653-fd20-4d8c-bb6f-a9cbbef6a34b\n5ad28176-fc20-4aca-aaf6-dd8deac55d09\nfe1ff8b9-ff98-4361-9f8a-50909ecae62b\nebd59128-7015-4a06-b64c-dde30283ee44\naa6f26c7-7b0d-421a-b7be-c46bbfbe9925\neadf3a13-f9b4-4303-be49-e4c82a6d3f2f\n4a750cb6-253d-4604-bb4d-24d0bf011498\nbd5ad33f-e428-49bf-900a-48cdf71e82ae\n0461a0c2-3c3f-4e02-9351-be191f8d0c7c\nae613936-7914-44b8-97cf-e673ed4687e5\n268cd172-c02e-4078-a209-0f73b69586ba\n36dbe5a5-fe75-4a6e-a694-72768c62a890\n07699c9b-5a09-4f0b-9b42-c5f6024d7b78\n853907fb-20fc-4397-adef-0df5addc167d\nb498a102-4161-4dff-b398-8d16138fafe3\neb7ac3f1-f362-4823-97cb-3a2f352d56a5\n67b1eb1e-7f0e-475e-bd23-0679efc432c2\nd1fd94aa-65b4-4fdb-884f-d174329f7492\n1ce4c293-b5da-4d3f-8e8f-390f366ac9eb\ndb8f9737-5f75-436d-a834-befb4970da53\na550e584-4a2d-4c53-becc-b1a5bd69e86b\n2b01dd00-880c-403c-9b2c-fb74acf9c29b\n31495f1c-f90b-41c5-98be-1a90db26a462\n673f4063-ace5-46c6-a148-c34eb6462da7\n7533979e-5779-4f8a-81b4-61acbd60a227\n8777163e-d0fc-4563-8a98-f4db9f34b1c9\n423db8fd-ed6c-4152-9d5a-8af89ef0214f\n348528f9-2989-440d-8b63-b6227d5d63ce\n0f02da32-248f-4095-b7ff-757a43e4a305\n253fb333-98f6-4adf-8c4b-3a2a40c7357a\nd31bf26c-7c4d-4453-a570-351e2455d9cb\na6157b1d-32e6-4853-9b16-832b0d763efd\n31924e40-e0ba-44ed-81c2-2549e3c4718d\n14ef7dda-3252-4f1b-b07d-478167c4ad11\n020f4a2e-dfb2-4e73-a79a-f30c6067ca61\n7b0d74f9-1ffa-4a04-84b6-3e1542031c9f\neefc01fd-7052-4458-b867-4959af4725f2\nd5853864-08d7-40b1-847f-1cbe3feb473a\n7cce8dac-2ee2-4bdf-9128-10cf9d6b4a4d\n05b9118a-f521-4669-b5e3-7f6551413fa3\n0758701b-5ce1-46fa-a15e-167771b316ec\na6b6ea97-498b-4d23-93b5-99f1edeebe07\nf21b6e02-2793-46e8-9a15-1073f14dac25\nde7f3ec9-d7cb-4e94-a05f-6b928d4afe67\nb239b5a9-4345-431a-ae63-49504052d310\n9c5475d1-f2a2-4b3e-ac8a-95c1e35d98f5\n9d446ddc-799f-44bb-83f9-619765cdf610\n583b6177-477a-4d5b-a7e3-dbf4e824aa2d\n21d818fc-5b27-4766-a24a-32c1789bb8f6\ndb9a9871-8707-4b88-8892-a63f65c3127c\n0ef91845-ae3c-4799-9b90-106af3feee5d\nc1f99346-fce7-42d7-bc45-ef68cb05c8d8\n22840841-c59a-496f-bd97-b7ed2c6927fe\n8cccabe2-b7af-4b5b-9485-f059c2b75c5a\n3a78ce6d-09cc-48ec-aabb-2b99bae979bd\n4a0dcb07-08f4-46d8-9bee-466f6a3770a9\na73d4204-5706-4ee6-9670-8aa52b028491\n1ff53e19-23ee-4a14-8fbf-eff27789020a\n932b559a-955a-4c2e-ad23-8a2ba2f90afb\n457e998b-be9e-4bc5-951e-c2be3b37c4c2\n54f3a4a6-b341-478d-a780-bdb040e06c82\n78880248-2e73-425e-bcc1-b531eca17676\nc3b70713-9391-499c-98a5-cc2408f0ab91\ne1249b78-6b1c-4729-84e3-78e2a08cc712\n97df0deb-1dd4-44dc-aab7-de95db1a6855\n70591e69-c5d5-43cc-ad0d-a06a5d7ef4c0\nb973b4d7-c088-4d0f-89d0-33f082601b1a\n1b0cb0a0-fba4-471d-97e9-2299ef3d6dfe\nc48f0b82-b024-429c-bef9-f23ccec5a3e8\n510655f0-eee8-4c49-9c08-1d29d33c8333\n6903616c-b2c8-4c1d-ab4f-83b8c95b8f37\n48671c38-d953-44da-8b69-5f972173793e\n0e729a4e-541c-46f7-a50d-907714835572\n52f53df4-e662-46e0-aad5-c0f9dbb0704a\n006908e8-8fc2-4a85-9fd9-0bc06195a29a\n1713a0ae-a2f9-4378-8f28-48dfb4fecb50\n3dab881b-f9c1-45e7-bc2f-264d1060e221\nb4613975-8b89-4664-90e2-556d147619c9\n482e4800-2d74-4524-87b0-742515b9ca7c\n080dc026-664a-4bb7-a485-7074cde60c7e\nd6dd207b-20dc-4973-bbee-0f94d30913cf\n88ea68f5-a30e-4aef-9ab6-a97b88e694c2\n1cf63551-34a8-4e87-b40c-9c59ee4d3072\ncff61fa8-babd-4a7a-89a5-d4145d501ec1\n3b526902-24a6-4abb-ab3a-2919aa0cced8\nbc7c0c7a-e8d4-44e8-bf35-9cfd07fdd2d0\n29fc24d9-d1a4-4a57-bd36-305de82cb7af\nfe9ed4d3-0ab7-4445-941c-3ad6bd62dd0d\nb8aea266-cbbb-4867-b2f1-4fa98cb53244\n41cb0c50-921e-4d36-9081-7f2851915837\n530fd9cc-4676-487e-9157-e7d996c26f52\n177a4fad-2b57-4016-a539-622f40b7cb4e\na484288c-fff7-4276-91ea-47a892850757\n7cdfef96-ef39-4b6a-9f5e-2a0851f4003e\nd40b9c4a-0390-4974-966c-71468583c42a\ndd2ebb80-e395-49ca-990f-8c0a9af99e94\n3eee1621-565d-4a70-a944-5868a723f50e\n99608b4b-2c51-44c3-b203-8498c0892717\n11d92390-5edf-4f2a-8bd3-e5137f6f4d69\nbf922810-1611-4ebd-b0ad-46a3694feaac\ne34df520-b4dc-4ee5-a35b-c1dabf7e9740\n9934357f-c200-4891-b37e-ce0146e6b5b6\nda45e1ab-818b-47bd-8432-d150fa38492b\nf4b8cab5-f556-4c5c-bb54-b0c7dd2a10b3\n7ed3fcdb-399e-435c-a888-a919c3283c08\nc8cedb90-5576-455b-8e7c-669bed8c7055\n37b75604-6f66-493a-b341-7cdd349e8083\nbea1729e-f683-4722-b80e-c61acc7a7311\n222a848f-f948-4346-976a-cf5f83b5456d\ndd0a64ee-2195-4328-8906-a8d66d1bb67b\n647de044-77f8-4fd4-a7e1-cc8df16ed555\nae87ab5f-fda4-4810-a19a-6dd756d69139\n14b3fff6-93cc-4196-8f99-40ce7ab9343c\n85f1d994-86c6-42e3-868e-08ccd673e0e9\nae1f161b-1feb-486b-a5d2-82b4d988439a\nea434696-25e0-48bf-81d8-b81ef1b17c21\nfc37ef66-863e-40dd-b7ed-6470d412eac0\naf9eba87-20a5-4c95-a168-de915038f9f0\n87c8330f-520f-44df-9402-b28c82adcec5\nb7bd4931-b5c6-4d50-a9cd-96ad8b0e104a\n85580ec9-652a-44f5-a8a9-147b701dff7e\n88f12b44-726e-4cf7-a622-e7c8590fc846\n114fc5dd-e26e-4364-9886-15655d4486fc\n3b10179d-633b-4659-8ae8-9cd5edcc8f89\n7ebaac5f-33ba-48c5-8fc6-fa750661b3d3\n215b11bf-7029-4a99-b992-6a5b2582c345\nd5f0e875-f0ea-4771-9437-e8a26fa365a0\nd8bc8a5e-5449-4ad8-843a-4b37430206fb\n96aea003-6c4f-41c8-b279-0b633bd288fb\n88a651b8-5607-4b3b-8ae5-6b4d21719eae\n748a926e-e83f-434b-abbc-6a3ee7d9a50c\nbe8a0e15-ef38-45b4-84c7-630945118e36\nb1ac42da-2b29-4121-a0f2-de236176028c\n0a5b1104-5749-4ea0-bbe7-86d6b58e9a9d\ne4c0de8d-c5e6-434d-a361-32f22ebfca5c\nc7454b2c-c324-4786-b73d-3160609e2932\nadb443d4-9147-49b0-abb3-1ef1a7f38ac5\n0c8c20a9-e8a8-4e07-b7aa-19f23021ba8e\naad6da1c-0558-45d0-ae73-ec531ed93d81\n87d5f6f8-e278-4127-843b-97783f5c1a31\ne66c3a5a-a20a-43c0-b72c-8223a85ea60a\ncc7a2899-c5b9-4797-84ce-dfe5d70eeeb0\n454b6df0-cd4f-47c1-8c5c-0932109e55ff\n0adb6d56-eb94-4eaa-b0fe-615648231beb\n34787c8d-427d-4e1f-84d4-7da45eeb64da\n5fd53956-852e-455e-b5c5-bf8a4c8f8944\n12aa4673-ce64-439f-b65b-11fe4434a814\n7ef557e0-dec8-42b8-aec7-4505bfb10556\na267f5a9-a55c-4f5f-91ed-6449779ed867\n17073a49-a8cc-4eab-b4a4-a057bec89638\n1794904d-f916-40b8-8ff4-75face6b452b\nf423e833-1fbc-4783-87f0-b44d37dbd393\nc7ce594b-3d4b-4fd9-bff7-d92c500a4462\n3f2424c4-e46e-441a-8e00-a1f3caf16b36\n3469cbaa-5b4a-4595-97be-85d0e76b0bfa\n1bdc0022-5932-445b-861e-03bb071d712c\na901ef99-1cab-4311-99ec-a87c8788cf81\na8bf462d-d295-41c2-83d6-b78c5fd491ee\n9c45ec71-4cf7-4d5b-8794-f5ab21819d72\n9049c586-4c9a-45db-8c2d-d9d6539623ba\nd42ec695-129c-417b-8ea8-b7ecc9179a3c\n2abbbaf0-8206-45f3-b74b-e2ec5b763864\ndfae064a-f983-45df-88f3-3db9f16d9809\n18442f8d-c292-4b74-a114-87c393f22071\n5a60ff20-431a-4464-99db-73736f1cb6e9\n757c5013-4264-420a-a646-434b29eb930c\n22840182-4689-4776-96a5-d69d77c159b6\n6dab92bd-4296-41e7-80a4-27fe9a5f9f2c\n372e60a0-b10f-4e57-95b8-a5d265c4afec\n98d8003e-b77b-405f-b1e8-8f40e0040b8f\n74a96c70-84cf-4d6a-8f49-b8668d6371c3\nb73966f5-94f4-40c8-80d0-230ecf772378\n49f0f5b9-f586-49b7-8f2b-3a09324389dc\n700827f8-d36e-4c95-824e-0e9bc7856ba1\n8b2ea898-4e77-45f8-8de5-891609a44134\n25641313-e436-46ba-bcd5-73d39094b5f8\n804d8259-3674-4aaa-b9aa-eee02399ad90\n4812b300-da33-4c91-8d4f-1d055d32f57a\nda98fe87-f60d-469b-8212-0c12df630316\ne0f2537d-3bf3-4bec-8ad6-ae675c5f6cba\n9f015ce0-0834-406d-bb9a-f97d78898f45\n2a320216-49cb-446d-b723-751996976bd9\n20db8263-c781-4a57-be8b-66e8d148dc12\n9e7e7ecb-4c45-4b36-b95a-121ced160548\ndb71a5d4-2ed6-4131-aa43-e549adf05d7c\n6fd7db27-054c-485c-b8b7-a6c766659d8b\n9277d891-a3f5-4227-b80d-2ecf8ae91f3f\ne77143e2-ee1d-4ce4-8548-7c6e270353b8\nce9dfcce-43b8-42a5-8346-c796d86d67b5\n5da5f8b8-4f80-48c7-b108-1ab1ba8400a8\na7a882c2-b939-4849-8730-16531a6ef902\nf05c1f5d-9ee5-4d66-88dc-d551b5d1b818\nca4f312f-17e5-49db-ace4-95c787cdd5d2\neca9be25-c7d3-4f9c-a1c6-fa1564825eec\n8268a53b-96f9-4e8b-8107-120519958d1d\nd05dfcf5-3dfe-4efb-9a8a-1ccf4117f516\n918862c9-02a7-4a6b-ad36-d62dc579fcc4\n5ad952df-c066-463d-9519-519dcf02308d\nf82fdc18-32fe-4ba1-b9f4-823602412c23\ncf7413eb-d90d-4d97-b078-29d2b63fbec5\n95befca7-bbec-4db7-840f-dac0ac6e73ed\ndf946d37-2375-4bd4-a64d-c05f11f42049\ncb433966-11af-45dd-b8d7-a00703701660\nf0148f32-700b-49c6-ad5e-51fda41e0450\n9b7b21ff-ec8b-4ba0-90b8-d6f1b012284f\nc1241f52-f0bd-4ad6-8307-e71b8376a551\n958a8d42-0b3d-4324-abf2-a7867621638c\nd6237b78-a3a6-4f28-8511-1018e5314847\n77bb1824-c977-4c81-8633-b9e016e56340\nb2fa2bc4-a597-489d-a2ab-190b1d199c18\n58687dce-a454-4e4d-ba36-2615f8976888\n2fde5842-589c-47d5-9ad8-d8eceb83c2a3\n5c5316e4-0383-4c7d-b0eb-8a2cf4b6f354\n4422e0af-9ef6-45ff-97a2-261c2c43a99d\n7bee458b-1f30-40bf-9ad6-b56fb9862df5\n13776929-a588-4f84-b27f-29d8c378156d\na186100b-d9a6-4a53-a9a1-eb7e4878b8de\n3d532a11-fa45-4b32-bcac-5a1e6342c190\n5c89f5a0-d414-45ab-b53a-c2b9081fe2ce\n02fef96b-5dea-4640-88a9-1de46b898390\n49b7791e-e835-4738-864e-90c5d0d9b6be\n3c91244d-d24d-4623-8841-98e824e4c5ec\n15ff908d-31f1-400a-bd0b-642011ec3d59\n534120e4-9a15-4e5b-af27-86871b93cd98\n41beb128-a3fc-4018-9cea-b911c2a6b67e\n061d12f0-52ea-4103-9657-746a30ed499a\n56da6bdd-a0e0-4714-bdd8-6ceb08634b1d\n45cb047f-890b-4d79-b03f-e45b0d059112\n596b3ac6-7198-4b95-9cbc-70b694486743\n30808aa3-c6ff-4695-9b82-dc3c1f5e05d3\n03bee150-4786-4f65-9897-49f3114b9120\nba20b7c0-27c4-4e87-8350-bf954da1c5b1\n57a36a03-ad2d-4d56-8dc1-d4aed86840dc\n9db8b71e-a958-4378-8e00-a9eeea3ad843\n638fb958-f15a-4802-9ffb-a1c2f904f982\nb8fab9ed-6b18-4164-ba80-7ee899b60a5f\n5ca2dd05-007b-4b57-b3d3-a21dff625d66\nd24000ec-7225-4c33-9e08-099693386722\n48763ae5-68ab-4126-95d5-7df40fd3fdd4\n99652c8b-b349-4023-b917-990001b3f3a0\n0d8c4225-6edc-447f-a44a-11bc3cfa6ca6\n57453150-e85a-45c9-baa4-733063784d2a\n74f29147-a049-45be-969d-9540ac819e1b\n474d9a0c-76ba-4be4-9f3e-14eedd2d5a3d\ncc0a782e-c12d-424d-ab6f-d0ddcbb45007\n337b3a35-81a4-41d8-8669-0a02b32013f3\n6f9f24f2-d53b-4a54-96b3-0946b304f998\n237dbbea-7903-4bc2-8bc0-9b0722553af5\n71f0775b-c455-4a01-bab5-92f22d58b78f\nfca10ab0-19be-411a-956d-a763145f93f9\nfcae9c36-1575-47e4-a161-9b7eeeacbb2c\n42674fe7-c53c-44b7-89a6-1907809bdbe2\ncf104e3e-b20c-4ec0-aebd-59fa2a2b34e2\n5faee297-cfae-4c0b-84ad-6d76ae421e76\n55fbac2c-dfcc-4345-b16a-f7fd0f0a9258\n9c6e1e60-73c0-4c41-800b-daefc0d3a3b3\n49d9e3cb-b701-4f36-a5db-e25b8e2ee4f0\n0697cbdf-634a-4e90-854d-9050d1a9d6b4\n9144b610-8d0d-4c8e-9873-1dbab5eff664\nac19d219-c669-4832-a5c4-cde01ec9446b\nf7636894-8f53-4521-88f6-a3ac51e6443b\n97acc581-d97b-443e-8cb7-47c3475ce0ac\na46c86a6-9914-4904-a1bb-deb3d0f80c1d\nb8aa0f6f-6479-47f5-9b19-e67da1afcc19\n60d67500-d663-4709-a131-26faefa93023\nb0a2f718-9869-4c2a-8197-0b4df03a9227\n8dddab7a-5c9f-49ac-b55a-89507e09e49e\nad1cbb97-711f-4e99-aca0-fcc6e446cd47\n7ff0af8e-8628-4f44-8a4e-925cd2abebfa\n25383c24-14bc-45dc-8ada-2491128c3749\ne05a0cdb-d39d-4532-a59a-7eb436e2e9c6\n317df449-6c1b-4bb9-8362-514a661c4dc9\n4a8f9c0e-eb0f-42c4-bd1a-105689394c0e\na72d2e2e-692f-4f06-b1a4-c63df6ae6628\nae7adf80-78a9-469c-b9e1-40c1bd021432\nf3106741-e920-4ef0-8410-a1c1f8117847\nd29ae76b-ff46-40b3-83f7-f72510864767\n0152ef69-10f1-4ceb-ba51-a4cfc2c02d7a\nf933ff2b-99d7-42b6-bea5-eade3c836354\n66a26320-edf5-4bd0-9d9f-38a70af50cd9\n9015d0ce-9349-4726-8fb5-69d9dff59c74\n5f7af68c-42d1-41ba-b804-3f4e8d79a255\n0442ab56-bb94-4b8c-bee0-c6611d2e4335\n41498cb0-6a2e-494b-ac4c-5d3afb416572\n104832a0-971d-4a02-aada-85d23a9b4e38\n44c18dbe-fcbf-4536-933f-bef0d435e4a2\nd1867b2e-f43b-4331-9d21-9e92699d45e1\n1f694839-3509-4a97-baf9-9d6ab0df628d\n192350b9-4bf3-4b0d-83e9-6ecbef3c76ba\n0365519a-8ec2-4058-81b9-0e3fd4362c3e\n4161ef9e-8ae0-4265-bbeb-783293eea20c\n65eefce5-721e-40ec-8d5f-a3fb481d60b6\naed947b0-e545-4848-aaf3-056e5f7205d2\n847c5755-c91c-46ae-922f-5161da205337\nc9be1a26-31a5-4b04-a58a-f8830b4238b3\n059b55d1-34c6-4a94-8b5a-b04423c38b0a\n2e3bac6f-e4e5-46ee-8d4c-018bca808209\nb965f962-d792-4df6-886b-f6fc1b84a037\n0e1865f9-a20c-448d-9604-c1edc5a9380c\n5815b023-a5a5-4964-af54-239dec48e658\n35be6de3-6082-4283-b834-bcb710052856\nc4069b2a-04b8-4f0e-9ca9-e2a74b58ba18\ne3165e4d-877f-466f-b808-2967abfdf008\n14edcb45-e5b5-4839-ab54-37a7e4782977\n92bd02cf-130d-4f9b-854f-912e57bc2898\ne1813461-d487-431d-91b1-8469923110ae\n46cbaa2f-1e7e-43df-aec4-79bef0a4d40a\n0af42933-65f7-4c09-8e3b-a300431dbc7e\n51f2c89d-466d-4ace-98c4-736332cc84bd\n58fe6a63-2ab0-4db7-bbfc-6bf23cb927fe\n8a2d3aa7-715d-464b-8013-71eef2c37f75\n9e103234-b210-4b92-9795-3980d8015ee0\n72bdf178-3d9e-4b31-acb4-45aae5278909\n93f8260d-b8f0-4ef7-b3c0-135b07179419\n125ca73a-85a9-4701-af04-5ba6a56a225d\n354089b8-7e5f-415c-bfb1-dc382708bd53\na82f3a3f-5887-4c54-945f-7c027725ba74\n725c3fef-31ad-4d8c-8fdd-cb9c2dd1f85e\na93abe0a-0b54-4390-8a64-40a51bee5918\n0125b098-5095-45c5-92f0-baa7ac53f59e\n885ea471-ff1b-4293-b117-1984d176f08e\na3610a6f-66df-4ead-9a4a-970f0ef43d55\n2c4c7a75-ef41-4488-bcc9-d02453520d34\n45663ed5-cb2c-4bc2-b5dd-bf8594787b97\n57cf543b-9040-4e1d-8ef0-2011ec2f9b2d\n4b49070c-da2f-4a2b-ae4a-ce2a7263ff62\nb61ba0ea-5b71-4484-ba47-15a787726a2a\nb57242fe-66b1-4c68-89fc-d6fcdb3af788\nff1d3673-2ff4-4bd2-b891-d501e1976be7\n5a4d9754-3d10-4f62-b0ce-7371fef5dee3\nff44351d-338b-4870-b73e-c5e31d73f68f\n1ee940f4-9d7d-4ea1-9903-ec1359005b8f\n018787fb-30a4-4878-8c17-b572339cdd0c\ne01a6bb8-dbd2-4c17-b911-86f5088be7ed\n5a762ed2-e8e8-467e-bf29-cb4ad1431edb\n75f0f490-1621-40fb-8632-850387021683\n06f7add4-d240-4586-bb3b-2ebf686683e6\nb50ad838-0b67-488d-8cd6-6fd199667d59\n13bbd498-6dbb-4d71-bfaf-d402fc346da7\n5a11bd15-e80b-4d77-8c9d-33974edd03c8\n3d28570d-741c-4267-86d4-0d85d1f63989\nee25e567-45bf-491a-b913-372f91d612f7\n6606437c-9cc9-40a5-bc4c-519b0324663f\n0b88a0d5-145c-42af-b32d-fe28d9a6ed03\n6d468967-ede5-4d72-8b0a-958a8e035a06\n20b4abc5-543e-4ed7-82fa-d5b8157fd25a\n713d9d76-48e0-4b1e-b5c4-17479f237729\n89da6355-4d7d-43f8-b72d-c1746fab03de\n37fd5292-67d6-4165-a194-f0d13db20089\ndb76c70f-aee2-4875-8f67-5f0c1e26054f\nf273bfe8-abdc-4394-9da6-e229f237ec51\n1a2b5b70-9c0a-448c-861e-ac8c5d5832b6\n92b96beb-9907-48c6-be35-fe806a501059\n95866c34-89ed-4712-8bba-88d920acecb1\n33e0a937-a5b6-4e2f-b9d9-96b9eaf9370c\n32ec0217-f761-438e-887a-6e0edb35d9fc\nece8a4b6-edd7-4ee5-b15f-ac1301bc4d11\n74b6d1c7-812a-4c93-aa9f-d3fbca9eeb9d\nd10bd93e-d7df-4607-9e8c-50ca6de354da\n8925a5be-6d4e-4a3f-a3ca-4f86b0fb9760\nb046d27e-6b06-499d-a5b7-7261e7dc5abb\n34bdfbd6-8785-4f54-a2bc-2deaa3dc7ea5\nf81cf27b-2a07-4616-b551-fbb6b273b8a3\ne32344a4-9afa-4dbe-a259-ece50d07d2aa\ne2981a2c-10ce-4014-9517-8cea438597c0\n61e2f5be-e009-4d88-a9fa-d31ab6917d2d\n161db5e0-ffa8-4dcf-ba24-0050f5e8a9a8\nadef56a3-d34e-40dd-a007-c20d7023edc9\n3dbf0836-4acb-4bcc-b51d-f94c907e39db\n3ace28e2-e87e-4e85-9f1a-88f2b8d88d20\n0e35748b-1e68-46ae-b1ed-63a18bee0a22\n974db99b-48c8-49c1-9696-791575fa9e19\n75706baa-05ad-43c3-b2f7-d5a45ffd4db5\n1b3cee21-918f-451e-91fd-f8074a89cd69\n9dafec65-5d00-4589-a127-cd5c9df523ca\n8907a968-6441-4574-ac6a-ddc068f146da\n1aa720f3-eed6-4bf1-a8c1-cb067d6ffba9\n461efd05-c268-4617-892c-2b2290ade4b2\nce935d76-6d06-4e45-b2da-4b137a08b5ef\n9f92096e-15c1-4991-936e-e751883c19c2\n0fc41cc7-858c-4710-8462-5db205a03852\n52979a64-432d-4379-9658-ec364cca51ee\n0b339a82-43c6-46fc-9c5c-0728bf0f72d3\n9ee91a24-6d2f-4759-9231-94d84ccaaa96\nb938688f-4e30-40ef-9ed4-6737c14c8b8c\n1bc9e642-e5ff-4921-b507-42167ca4dd5a\ne6a234e1-8c0d-4b18-976b-6d9dabb936f0\n22bf5fe4-56b9-4b28-9803-5ba35b949d74\nfab678f5-e3b2-497b-b88b-e7737bbf0cfd\ndf492dc6-8559-4ae5-bf8d-7c9f0adcf84d\n48d3aa05-4fa1-4478-b47f-dfbe22ba9dcc\n03ccc337-d5b8-480c-bac3-4934bcca1e8d\n25e269a9-bd84-44e6-b81a-9acabadb73be\nf0b93509-7032-4898-a92a-fcd1f528d142\nbfb900d3-fe14-4435-bf65-41ee154de3b1\n94658306-6c06-4033-85b9-ebebebdb5e21\n5ed21dbf-df96-4b59-a95a-79515682b02e\nd257ed54-24be-42ec-81a9-1187a1de6b76\n1ba8a1cd-fae3-4080-ac82-9b0d39a8df45\n71866e80-3d49-4716-96d8-d90584880546\nc14df608-54e0-4dc4-bde0-96469c67c2cd\n9c239230-660e-4094-b8df-e0a91e9e3ea5\n47fd33cc-e09e-42b8-972c-874c97313f45\n4235c80e-89a8-4434-8306-703e0fba2fd5\n1e6af79a-a273-459e-9362-b9753a99c8f2\nb9ce50ef-af58-4118-8480-852c2df9126b\n34ff6eb9-ab27-4eef-a0a5-0b34851d139e\n752c1fb3-0ed4-44fb-ac07-03d69fda0232\n26f0cfb1-8ada-4f48-85b5-7a9278f45ca7\n7fe113f2-8e3f-43ef-9e5a-a7e04d882378\n3a801725-0a4b-4601-839a-2485e90c2587\n2dbdf148-e4f8-4ae8-ad31-48bdb8698caa\n09745654-580f-4e5b-9579-9700ee0c243d\n01c4a6bf-b78c-46a7-9596-ca2bc1fc5bfb\n8b56c81d-2792-4153-866f-169061209c21\n5be0c878-7b68-4d1b-be5b-5afbd48fba21\n45255232-6410-4ee7-967e-378644a96bf1\n67f07dc1-53da-495c-8150-ffecc864bc0e\n01efb47e-4087-4c3c-9733-310e8deefcc7\n54315619-5fc0-47c5-bc6b-f39e4557e5d1\ne8e0d829-745a-45e9-b0c1-9306815c6496\n50b704c8-847a-4b00-9017-b7dbcf483049\n898face6-120d-4fc5-9db5-3727f066c23e\ncf6fede6-a8c6-452b-94c4-94593b540137\n397c0ee9-7ac1-4d22-9902-eab73baa384b\n166bb660-a196-44f6-9ff0-4072a2f13e5a\n54944c74-79f9-4876-96e7-5b3021ac6210\n1658ee4a-8c84-439c-9de8-49ee7046c0b8\n0b2926c9-83cc-4c24-93a5-9841ab7519b5\n6ecb7a86-02d2-425f-ac15-4d8f6f56d5a2\na021d083-656d-47c1-8c75-f8c7dffd89d0\ne29090cf-3269-4b07-98ec-cb473a77cce2\nd8dbdc67-58eb-44fe-b716-d9fed4155556\ndd95c683-4a72-4f08-b276-11c1ee4b3ff3\n9b9edf0e-505e-45c8-bd4d-1da19f25c2ee\nee302f84-ce8e-4ad7-bdec-8d7a20fa2a91\nf51c5454-d6da-4450-9137-fece3521df67\n448f2d7e-82da-4396-9d64-d1089c60d1b1\n8d1a8d25-f28e-4f1b-b58e-ea0854f335b1\n3a40c82f-9836-4a81-b8ab-88b56646106e\neadaf373-dfa5-4b33-ac83-b79e0672284a\nef88c3d4-dd13-4ea5-972c-3a6fc4a496e4\n551255c7-698b-4614-9789-6db23ca86cc9\nf3bb8909-756f-4517-8e63-da8855fc37fb\nd7d0e704-4d95-41c6-99d9-eddded0113e7\n44a5c04f-51e2-4077-be8c-c6b518ba26ba\n78329e37-fc7b-418d-9971-a2681c12d10d\ncae3d684-610b-4d6a-ab48-d523c5f230ce\nfa77aefb-1124-42b4-8c71-4b5b0901d0b2\nff0d6801-6170-4d1c-8350-baaf40c5763e\nb9b4cc45-0a5a-434e-ba44-38d92ccd7349\n0169c94e-a960-456b-b5b8-d598130eb9a3\nc304a9bb-e24f-4aad-9a80-92006d59c34b\n1702c55f-b36c-4d05-92c5-335ba27ef9f7\n4c35aaac-557e-4760-aa36-4dbab86e2911\n4623e0f9-d3ca-4bb4-85e6-fa5ca4f86f19\n110fb3ff-7b14-4783-8449-c72f75a68cb4\ndb699ee5-30dc-4c54-b49f-99cf8b16389f\nfa4f219e-3654-4595-a075-e3e282495a86\n44872b69-60ec-483c-8b8a-97ed4e96bff8\n58d363aa-c907-4405-bd1d-7bf0071461ab\n33bb1300-8358-4e8f-a421-d2a3cfe7a864\n209f7033-c254-46e6-97c1-f2016bcbf610\n89dab52d-9c72-4c49-ad65-2a65cfa7d977\n282cd5c8-0768-4435-8ac1-19bebc2bfc36\n5219ee12-277f-4eb5-a148-3973275eb579\na476c231-7b7a-4aee-a2d9-719f9847359b\nf28fe865-b30a-4e07-9708-151fc66f52aa\n9d5b2904-4629-4f2c-96ac-31ae59fd0a5b\n5c492555-643d-4979-9e2c-e170302aa908\n9b29db72-0719-400e-aeb8-a35753f5f896\na2c05949-9a70-4250-b27c-8dc4525c6c88\n0e68be96-2588-4a85-9694-d6a887dd6909\nae413bfb-85e7-4f9e-9791-381935575f51\n36a8a228-31a1-474d-8488-cb8cfc96b8c3\n9ced2891-e784-4dd8-b8af-766620db48d6\nbea63802-55fc-449c-bc15-3d3e57b6f906\nf4bf5b34-df7b-481d-85ce-5714b5aaaef2\n104b5aed-d2a3-45c9-92d9-c409afac7f72\n7073457a-b128-4579-8c63-0570368c4cf4\nc85eec01-6fa8-4f12-b2a3-d8a61eb94778\nbab1845e-50a5-46b7-8785-61ca6c46c949\n37451bf5-22f1-4921-bc68-a3efa20a2311\nab8f6466-2c7d-4497-b1a0-68485d20bdc9\n04a02d8a-4acb-4515-8f17-dceb439892b0\n4f6405aa-307f-4822-8a45-93851f849f5e\n2889ea7b-7dea-4498-b692-6bc8a96488dc\nce8134ec-475f-43c7-98b1-a8a4cebfa2d2\naf821eec-87ec-4e63-be5c-182b3a6a0caf\n90f9577b-0007-4464-ba42-e1f1cca011c5\na5e47d87-f69e-4cbb-a1f0-77f4e78bfe0d\n5d52cdd3-356d-4111-b6f9-ad87a039dc4b\n48344f8f-025e-42ed-b177-db5666a2852e\n28a13419-3d42-4185-a013-e6442d43932f\n9a58582c-c63a-4976-b073-c1905a350f64\nc5abf783-38ad-4b6c-b7f5-00d54d167a27\nab119de8-0dea-4349-99b6-c4d160be51c5\n0db0f17a-a613-4f07-91f8-861f44266cb5\n8a350e6f-bcec-40e8-acfd-1607436184b6\n94e8683a-e8c8-4f83-84aa-54562416b542\nc3e5812b-c4ff-4546-ab4b-4098a7cab811\ne18eb5a3-072a-4226-a60b-4451a556c0d9\n5c2dfb9d-c76e-41e2-8ce8-cbe0e55d01c6\ncdfb1fa5-4db1-4686-ac35-bd8b6ae80c2a\n0fadbdb5-4c62-41ed-974a-60b2b16f9546\nb8f613a9-90ce-4211-b742-47117f388cb4\n47acb409-a3b0-4b9f-87a2-f3267005a1e3\n976c4920-be25-4010-a16f-a467781466e3\nebcfb42b-de26-4c9e-9d2d-bee8548d7286\na24b902e-b436-4d2a-8e50-967291297de5\n6d7cf1c9-5f8b-4ee8-b71a-79821d32d1cb\nfcf0d15c-bfec-4aa4-aad7-e94ca2c92e54\n632d4bfe-c979-45b5-bc48-da017502af0e\n6c050b71-7ff7-4c07-9206-004a109907b3\n425e142b-453c-4e5c-9229-43033e0992da\n9bb8bfe9-4a8e-4a60-9a62-a763166deb6e\n05825150-f085-4af0-86e9-88956b16ea3f\na679911b-608a-425d-805f-b3f4610db0f9\ne276c590-9048-4c12-8de4-eae210c08a79\n6c6f6348-4d6e-4b3d-bf72-d2b965ca4b8e\n67f9e4ce-1fbb-411b-a38b-4304cb827577\nd068efb9-c1f0-4337-8227-31323fbd4b11\ndb191b8f-0488-4ef8-9088-4d17b15961e6\n8c49b30e-3146-4e80-a918-c428300301b6\n0ed75c2b-214d-4189-b4ed-68ae970491c5\n5927c109-8e71-4a52-8e30-c75f8d89fb37\ned47f21f-c17a-4657-a1ce-b45caa77557a\ne8f5525c-e035-4900-b190-f4e0607b4e4d\nac5d14af-7fe0-4c4f-8732-5f5ef48ecd3f\n7617f7c1-0caf-46dc-9d13-d84122f76c56\n6f968c76-742c-436c-af05-51f4c6e151c9\nf62cb6eb-138e-434d-8390-141e67791603\n59d7a851-2e49-4484-8678-4b2ba1f1226f\n7698935a-145e-42da-b594-855c7e832623\n06d4f860-6025-459b-a51b-f3f6b9f520e5\n1c96ce9c-034a-48bf-8103-2ae7c387b3e1\n1616a194-2311-46a1-8a11-ec352a71bb5b\nb6915641-90de-4e4b-971d-9654087311e4\ne6d81ba2-8fe3-4249-8e3e-9acabdf273bc\n01f4d708-2977-4bdc-bbba-bb70ced7fb90\nb6d8ea45-7344-4787-ad5a-a87f51329890\n10ba13a5-a169-4078-9ee3-6f90a876b7bd\nb29eb586-9afb-40fc-b0ec-99b2fd8fb1bd\ncf3c69e2-fccb-49ab-88c8-34a9da266c8c\n64d530c0-1146-41db-b3de-6c35d7727f33\n608b7d55-ca51-4859-ba28-e4a78b9be858\ncaf7b857-1c12-4992-8227-a924ba0a7509\nf92a57de-71d4-4085-a3d7-963eea8ecd39\n14e75af0-b764-4323-b510-9a41939df2b4\n57396372-4be4-44f4-9100-b30c7dda962c\n9fbbe50c-3187-4223-a843-b39ad91032c2\nca170a02-2a6a-434b-8be6-4e601c8ad321\nd6617910-96cb-4323-bfb5-42f39983abf4\na49d3955-e56b-40fb-b2ef-9be539277b01\n519e7c57-aedf-449b-a4b3-74af8e58aff5\nb8ae908b-ec7c-488d-a4e3-529af07cf5f1\n42317512-332c-45b6-a430-b6236fda92fc\nfe090560-e146-4157-a994-903c24052c6c\n7c59e1e4-ce8f-487e-a561-8dd5b7369c1e\n6bdaab7d-0b53-480d-a474-cabe85e26ab7\n0d046e3c-57b6-48b4-ba83-d4bf2bb461d1\n4b35602c-7888-4a2c-b352-07fc19d85308\n63410f44-5fd2-4069-9ed5-03fe7c1d0adb\n9dc00faa-f3c9-4a7f-b4a9-04ca26b8fdb5\n30ffd658-3aee-4d93-97d8-34eba165fbc4\n9f26f778-e76f-4b77-b8a2-32f199c94ec6\n67c7393c-93d1-4549-8c54-ae529c0fc00c\nc68442db-cf9b-4b22-8217-113ea610659e\na4b5edfe-5561-4d8c-b540-aa138cd54c3a\nb7ba98ee-94cb-482a-9001-0723ed1153c6\nca9bf1fa-1dfa-4a86-9647-67147f2eab37\n1e93a817-3764-42da-aca4-9fa7dc4dae0b\nb99ab07f-9bce-405a-a103-1c50b8e9f337\ned02bb0d-2d21-4374-b19e-6b5e40a56332\n19fa74c3-ee80-4e5d-b47d-7c1631074296\n090ac135-9da1-4c16-b363-9ad1358e72c5\n90d40242-49db-4728-a7a8-bce308a3dca7\n32348a77-2f59-4ae8-a4f4-9a307913d6f6\ne2d8324e-fe54-40e4-98c8-21b7abd039f4\n7bf5f3e1-01ef-4eeb-8e62-691dab54a3de\n9299bdb2-8cf2-44d4-9004-05e5eaa28660\nd4053cbc-33ac-444d-9d75-ce8950363d05\nc300554e-8ff0-44e3-8294-f6dafc9bb829\n2d5c3b63-5d2c-4c0d-ab9e-08c18b019726\n7e9ed6b2-c308-4c78-b200-e29621a12afb\nad64eccc-5345-409c-95ac-256c54d6898b\n7fde7e31-d0a1-400a-8fbe-ef5c589b46d5\nde122552-4702-4ce4-8485-9c8e8515765b\nd7100a5c-d829-4acf-9acc-d4f3c18d8896\n26d4b034-b658-45a6-b465-849462d051f5\n156edeae-5bc2-4a09-8e59-0fe36aada679\n2c0f7961-f9d0-4d0e-8e5d-69195e428a61\n5cda750c-59e5-44f8-a4a7-e8a2b3a0dff5\n5cf00369-ba54-4848-9843-9cacd8da7aec\na9d61e51-c8d3-47ef-b6f7-06f417353306\nf0bce65e-9b23-459c-b533-6cbbf616c8f9\n697ef817-6f6e-4783-bbbe-5f7e02365afe\n3b2ecfd0-c9be-4dd9-913b-d6866cf29ba4\n36cf00f3-5759-46b0-a4df-49827aff0202\nee845203-cb4a-466e-a41a-82927ace8eef\nbbf9dcc4-1182-450e-85d4-9dc796d1f021\nc57f6518-8851-4749-962c-f8c0aaccce22\n47c62876-80fd-42b9-b738-bd356d541b11\n0927021a-e759-442c-b7e5-bc55c260866e\nbffd6f9d-fd10-48ad-9c63-fca59a841f49\n5a15897c-d0bd-4ebd-bc8d-35b4ff2ee478\nc3c8d34f-dbd1-4200-b90c-51580694a483\n574b5f36-5b78-4dcb-9ce3-ea9aaab08fde\ne3a6c4fa-7456-458b-aef3-42727af7d4a2\nc24130b5-2409-4bb0-9f79-fd9465b252f6\n99095909-f5fd-4115-b623-93244c958380\n7f80db57-2b7e-4632-b75c-1915a956d021\n4e57fb77-d0d3-46c9-aeb5-79be2e05b2d9\n40ad35fe-4d49-437d-b959-16ef9183fa84\n74603a63-8f77-4236-b4d0-08ad6ec58ddb\n5c7a88aa-a308-49ba-8651-899dee9f70e1\n9a481f4d-384b-41cb-aeb3-f8534c543276\ne79f20d7-bc31-41d3-85fd-494efc2b5301\nf7b8746d-e153-4275-9c74-c78d9c034fb9\n00f6fc74-3f3d-4cf1-9e2d-9f34f26eb52e\n61f0ae28-0b80-4457-a41c-21e88c6c3da7\ndfea6475-ab57-490c-8bac-90998c119183\n615c4350-6a00-4b7f-8964-ad7909409cbd\n9e1ec76d-24ee-4d0b-b8e1-ba268d5eb495\nc30eba87-652d-4b58-8f4a-1d8d45d08931\n20c65619-b777-46ca-987d-1389e9e46b30\nd1d9af6f-3aee-47a1-ad84-125bc1c58ebf\nd3f994f5-76b2-42c6-8472-1cb2d2367552\n04dba557-f492-4d52-a7bb-82616562efb4\ncba2e7df-4422-49a3-a559-f52c5f0f8f7f\na9bae0d7-3670-44fe-b00d-18059f8ceb98\nfe561fed-1508-40d0-add9-a68d945985c4\n518c6aed-9416-4b86-be55-ee793cff6111\n2ce71bdd-6210-4f3b-a000-5407dc20ac63\n29e3e712-331f-4dd5-9473-e02720a55b22\n848805b4-670e-4f2b-9dbe-29b9ed8ac505\n3e231732-5fd8-41e0-9652-7d0d7385bb3b\ndb90e5dc-7e16-4a27-beb4-b7fed39178a8\n4d89e9b7-bd9e-462d-b2c5-abed0ede3a32\nda9b6c62-83c1-4f34-9704-200190064106\nf3c422d4-3476-4e01-8bb6-6caa9b9c31b8\n3925d6c6-7d63-473b-bf18-00ef2cc87ae5\n211e965e-7cf4-4f34-a116-65361a21e03b\nbe0b87f1-448f-45cd-95df-9e81a9f34b12\n833bbfba-a265-475a-b7db-a23872d4e2f0\n916f1348-2572-446f-9618-a09ecb21601c\nbbacfc3f-bb6e-421e-9305-0de42f5d43d3\nd2725c1a-4f78-4f46-be92-c7648ac02a01\n848a64be-5b78-4c28-aa85-cc9f6394c562\n6d68a92d-3485-4493-b245-c38400cd57ec\n0d982eac-a48d-4668-a1a7-66d20dd4b4c6\nc7407a0f-9a58-49cd-bf9b-80250cbdf00e\n74312578-b3db-4feb-b170-b6b45685d33c\n307d05a0-c1d2-4ed3-b898-5796a59255c7\n7e36ee3e-8e63-4439-96b8-5486b63aa0fc\n1e06e357-d1c8-4071-a038-1f7cd2307045\nd44e186f-deb0-4148-bba8-2db228982d1a\n7a78b6e8-ecbe-4e24-90a3-e5ca5b2162fe\n17c13498-8c11-486c-9e3c-f4e994bcee10\nf7ba3b84-2445-4b04-a129-f82c4d5b5ac8\nfc96eaec-5817-49e2-b684-32f4796b9cb9\n18089797-1100-44d8-a2ce-88e7d2eb0819\nf909d9de-0634-4acb-8c18-73d80e3e17d7\n73f35636-ee3d-4a66-be51-bf549d911b13\n845b3f5d-5dec-4e96-83a2-993c5c8d9ca6\n46e1fb50-2510-4532-ba75-bcac82adcbe5\ned3c333f-dac8-4a25-a379-28cfefe709bb\n815293ad-3c39-4adc-845f-0ccb0ea8aadb\nd5b9b3a0-0a7a-4517-ad54-81cfdc977334\n26c2bd5f-3d90-432c-896b-7a69c34ed3e8\nad4f5713-6e3b-414d-82f4-6bb71d8635a6\ne54fb044-a21f-4699-8420-84897d7e1d33\n9a10f810-d4f4-47de-bb4e-387727c1d5b7\nfe7f7489-870e-465b-8a67-22288ff3713c\n3a0a51a9-119f-4c40-912a-ab2590ea4555\n06fa3c14-b880-4be5-b8e2-3b497cf966bb\nc8578ad3-011b-4a4e-8754-d2e075e1a87e\n5f925ea5-ea86-4b9e-87d4-9456372bb5ed\nb076c84c-6ccf-4d3a-9bd2-3938f4f1c61b\n82f5b44e-5545-40a0-8789-1f51732d3d06\n9c4fc194-7442-40ce-bce7-bc5c2156eacf\nbca56f44-a331-4099-8931-f72636af2943\nb0901b66-934e-40a3-8c1d-dbb1b199024f\n454d6945-e746-4bd1-97c9-e1d849abfcdc\n44d993ee-9945-4975-b65c-e4dba5636396\n99f42ad7-425a-41f7-9a55-53fc6c544b60\nbf3e4d0d-1a74-49ef-a5bf-015a95d90e12\nd1008b69-1e2d-4a4c-8ac6-2414133de88b\nf2213f4c-dfd5-4aa9-b95e-2f681347192e\nf0414468-9b23-42df-95ce-0082d76ffb29\n9c9ea8eb-987e-44ac-990a-ccbea3e684ac\ne40c7e32-4ab1-4483-8e23-b0cb5eea506d\n1c196c8c-0112-465e-8e6c-6676beaf4ab0\n6e488e87-6a0a-4e33-8c93-9ed08e4b38a5\nd6106a02-47b2-4c26-8553-d6af84d743ac\n8fac11bd-d4f7-446e-9b6a-e13a42215754\n65b909c6-c2f2-4592-a1f2-d073aaa39df5\n7b0ad0cc-0017-4727-9eb1-abf7b1673790\n50938559-0207-4eb6-b2de-4c04146b3567\n7b70b0e2-1143-46da-82d1-8e91551d3c1c\n29f497ee-e9ca-4227-8ee1-bfd81f6c24e3\na48629d5-02b5-4680-961a-a30042fae868\n61e70279-ea2f-4674-be24-cf7ce5ba37c3\na059c484-92c3-4e9b-85e7-475baf3a4fed\n512b95d0-a1f9-48c9-b260-924e69388fb5\n68cf2a4d-5722-4ea9-8908-4658c559ab7e\nbc39dc14-cc8a-44c9-8fef-431f1e765e77\n740d23ff-9106-44a3-94d9-bc3270520b1b\n1b41a0f7-1106-4aad-b68d-004717ec9380\n470cc531-f210-45f1-a4e4-c5fd26f4b51f\nacb25540-5f89-4617-88bf-1c28646be932\n54c7b682-8248-4588-b74c-065d7d206be9\n33662804-bc05-4c2f-a457-fd86d8459d81\n7b12c578-a5f5-4e05-b283-3aeb0c1636b8\n8bc73a2e-4ef0-46a9-8161-2f5edc3761cc\n7a46b935-fe89-480e-bb91-b861f4d83128\n97885a61-cdaa-4d0f-9815-a4123f17d60c\na5a44c09-1cc8-4e81-80d0-e42b7f8685d2\n3a378609-6121-4032-be43-1995e6eba9d4\nfdf96d11-ab47-436f-868c-ae26b036923a\ne7083f94-8411-48ae-a47b-aba57856a719\n21bed5b6-2cc0-4e96-a3dd-311edd3affa6\n9e9dfb10-f81f-424a-be01-b26499ad1c48\n07d91c16-6187-4799-bed0-20d88a73c5a4\n6fdeed3e-9777-4927-92ae-d4a8c0a992c2\nc1b86974-321b-4b64-a4ef-8a4778f2861f\n5d3b441e-2d9f-4c68-8b80-9ba561cf944d\n5c6d08cf-2e3c-42dc-b7e4-52303d1706a8\nb1a41985-9873-4457-9e22-0e416e61cc3e\n7321fe0c-4cdd-41ad-85d3-8de7fbd6c856\ne8d53903-5398-4b6f-a073-3ea890f328b7\n8cdec8b3-e1e7-431c-96ed-1f9385502d11\n06e49fe7-3804-4ad4-8bdd-cce530acb81e\n5bb563f9-bf6b-4525-a1c2-a848ac202a78\n4e30e273-5958-473a-b8db-ec5a771d31a2\n1b16db76-c70c-45df-a22d-fbe5c58e633a\nc52ec8f8-1536-48f7-a9c0-885982ee31ec\n69421f1e-4de5-4cea-8058-f0be022126f7\n727f717d-ead4-4701-8458-83ff571a61c9\nbf3c3b28-5e39-426a-9132-3ec197c8a5a5\n1b337966-93f8-4cbc-8903-f8826a884063\nd5cc6aeb-c72f-4491-8290-5c23e7088620\n54722d33-16dd-42b1-bb27-ff4308f5dec7\n3068abff-5f5d-43ed-a2ed-753660c2ce39\n0febafa0-339b-4f1c-9e68-1003447a93c4\n37775763-b6d8-4657-86a9-898b55f545f8\nc7aab900-7dd3-408f-ba2b-9759945c5918\n23fdb00d-4f9f-478e-b69f-d8ca1dbc56cf\n6780dd85-8031-4519-85da-9af51e2ab7d8\n6658b9e4-37d7-4e8a-afa9-54dd85cfc66d\nbdca8117-825c-4830-aeac-e6758c65a231\n0ff4f6c8-e520-4eea-9282-108cb69021fa\ncb11c511-4180-4088-adc8-43760fc05b97\n95812a5f-0dee-48b1-a506-9db7763daae4\n0d84941e-9091-4844-a985-127c2e31fa17\n89f09306-7113-4659-aa42-b6bf9bc79191\na0266e2c-10dd-4e56-88bd-1dc25165449c\n741d102a-c99c-4465-bf82-9ad370dc5589\nf819fa54-e1b3-4009-bcee-7ce518069610\na5be4518-9a44-4623-9641-8e80310652ec\n99be5f83-1ff9-4224-a920-94f0522f6b42\nd7ad7d3e-c2c7-4314-a66a-52ff8cb15240\n2d76d842-0e46-4565-94ac-177adfe9fbee\n640a2276-14e0-4f6f-9574-62da856d2443\ne8483ec3-aeb5-4b31-bf86-136bed86bea9\n152323b4-d5d2-447c-9ab3-6afcc80c2ae4\nc3865ff8-c503-4049-85c1-f0660fa7043d\n684ea0f7-5c8d-494c-906f-d2b5bf658917\nc1dd0364-9063-4167-b77b-c002c2b062ce\n6384a623-4514-42bc-95c2-67ffd6e8425b\ne2f38358-5c90-470d-b6b9-2b20ae98b242\n5e43cc88-5e55-4620-9e97-249ef40b3324\n82326486-dbbb-44f7-bc7f-631b0ddbe689\n321f090b-a34f-4b03-8845-ec643b3103d2\n11ddaaec-9ceb-42a9-a8a1-92088dd921e2\n1738eae2-fa4f-49e6-a834-0d5729899231\n1dde8de7-f7c3-4981-b4f0-238a4c948c88\n91ca54b2-ec24-4e3b-b089-2648260e8954\n57f769f5-2704-4a3e-90c0-36e77577f99e\n0fa1b0fc-5464-41a5-909b-21dd11ad31ca\n2a49472f-065e-476d-aebd-6af938e90429\n52458c3d-1953-4933-8281-2339ee5af2a6\nc84e7990-1f1b-4441-b9c1-5c04b76448af\na6ad729e-85a8-491c-bec7-58f767873135\nd9846f2c-6ed0-417d-b278-b1cc3affd90f\nee78d677-fd2a-4565-bf23-4610e03e3b43\n685e9a05-bf38-409c-9eea-58969a98d3be\n295cb782-f533-4e8f-8cd4-ba18243390da\nf401fe87-b26d-4085-987e-d95cddafcb24\n024fe7a7-b228-44ae-a3b4-2859c0374202\n8e2825be-27f7-47ae-ac8f-71e32a7456a8\ne2dc5e10-3b62-417c-8e94-2ee9be6a4d06\n49afa968-1721-4410-8432-330ce258e8ea\n11218387-5e2e-42cb-974e-15e6c3fd4330\n9bdfe436-1f52-4b2f-b068-672579d99fa0\nc4486e04-31fd-42a6-b855-a5d72ae54df4\n006a00b3-5457-421e-8076-82610e9da596\ncf122cb3-8829-4a48-8ae0-89ace1821fb7\nbf1b3373-4af1-41da-a7c3-8bc1eaef4886\n2c1e1c08-824b-4f97-9a82-cae4ee26be4c\n17e643a1-a1b4-441a-be8c-1daf43744782\n5a9ddd5b-549e-44eb-aed0-3c5857adb0dd\n1abdd752-c60e-4fe9-9e1e-1f7caf0910be\nd0fbcdf0-9c6c-469f-8c88-efc50748b276\n5f4442ae-5fac-4990-94f9-7165f58c7b27\ne163f44a-1340-4bd5-880e-3ee391d001d9\n7eeb893d-8c14-4353-b093-113fad8055dd\nc6a73100-4fe6-41d1-9388-3bfcf46f4bd1\n58c5ef5b-ffe8-413f-aee5-92cfd0a5192d\neb5e1a82-0fb8-4e10-a402-7b0476ad4ea8\ned5c5716-39d5-4d83-ae4c-f5f8a2d3a619\na8eb2980-da25-4bb8-a1bc-89b740eee01f\n332b484e-c2a3-4c31-92c9-9fee230c167b\n4f73e535-cb4b-434a-b37b-a3fb352a4503\n5e6a34ff-5e0d-448e-bfb7-8022d9cee59d\ncb89cf79-a926-4f9e-ae8e-e1182e45021b\ndd4a9dcb-053c-48ea-854c-b6899223be17\ne6145825-59e6-4565-bfbf-12130511f570\n0d2f4222-e347-4711-920c-cddbe06bbfba\nca87ac76-9a93-45f5-8098-61046f9d6372\nbcf131cc-665f-480c-9e02-0c6bfe7b4f04\n0cf4fdff-3368-4f08-8b98-7702e088b47c\nf216b53b-f5d0-45d4-a118-96f77ad8ad8f\nb35cba5c-914f-4d05-a07d-4c1617665c16\n5fdf7990-ad43-4f35-b8a2-e531d49d4cf4\n05aef939-6c5d-40eb-a039-482c12cac44a\n33c2a030-d52c-4e62-a760-a55543aab7f6\n0bd27df0-c52a-4fcf-982c-f5ad5aae22c8\nbfbe6aa9-4e49-41fc-b993-ca7eb560528b\n99819dbc-a04a-4aa3-89fe-ae29dccbd0b9\n49174115-c027-4e14-863a-17b03c981894\n3a1347e4-13fa-4c57-9ed4-622755d6983a\n5e86ae5d-5852-4a8f-893e-b5a615e400b7\nb0a376f2-b4a2-4d0f-a4ab-f7bdf7cff2f5\n54ed795e-4fc5-46ff-9f80-269900ac62d9\ne970d235-0f3f-4073-bd1b-9282b46397e9\n9caba44d-83fe-4b0c-ab82-3e4cf11a0b35\n0420bb88-94d3-4017-9d13-8b10a885d47b\n1152a687-75e3-4d51-a345-29db70777d06\n3c4fd308-531d-458a-9ac1-3180e9574d6f\n34dd3cd7-19c6-41c2-b4dd-6a9f59e76e5a\n96aa0aa1-0677-4d68-ae41-33a17d9bb720\nb5b7b643-58b6-4b9a-8f61-ad8f5eae5d08\ndd17927b-5302-4808-96c7-8503174746a7\n2de8f037-411d-4ae8-8795-52ac2eb02d97\na39d9d1c-2ece-4b48-badc-a4e7c030f7f9\nc971b369-c718-4ddc-8083-a0a9bb4aa399\n3c38c444-8b33-44d2-b0e7-8205a7a64b4d\n846b002a-37f3-4f9f-90fb-8601964a1303\n794e2655-36a8-4e09-82d7-4f7e184ed105\n3934810f-da12-4ba7-9570-39458a9d4304\n548e82e7-066c-4365-9210-32724ee9f289\n536111ed-feba-4776-8c74-4d9e6c44a8e4\n420215e6-77dc-4b31-b112-19240790812d\n50156d9a-3bb7-4b24-b953-3d950f9696c1\n7039f6ae-ffeb-428d-a66b-d6684de3d303\n07f9124a-5bfb-4bb5-8b30-6c7d7133fe52\na1cba007-bc84-4bf8-a280-a22dc4371fae\n990aaed1-d7c5-433c-93db-6da81b1dac19\n12777675-757a-45fe-a2d8-f3d9ab4611c5\nf0a67e7b-3adb-4aea-ab01-5871dfd8ef68\ne5c69541-eb55-4c76-a903-111a8b6814c1\n14906a8e-b965-4be9-9c59-55f78bce4f22\n1b53d1ac-bd9c-4b56-a058-da3717bbce77\nea33dd8b-0bf7-4767-903f-90b2d17ae690\n6b8d6e15-2945-445a-bcbc-69ed622ac689\na0e6423e-5a8d-4746-a03c-4cac534ad6df\n69826111-6650-4ae6-8c70-98e4f2836844\ncb0e393f-974a-4820-85b0-c0691f8192e5\nea9c04fe-a3df-41dc-a63a-cd63d2470403\n6d48b522-f2c6-4803-ac68-155a37eabe62\n3aba028b-61f9-4800-890c-b16b4145d8b9\n406e2422-49f6-45f8-8831-7c35c2f9fd18\n2ddd99bd-5325-458d-82c6-946c62dfd404\n57cd5f81-7f3e-4e75-971b-f1ca4bd8e63c\n375da324-9b4b-40e7-8efd-80c7f3e6437a\n24f8c824-1a93-489c-99b2-6024d015b391\nfc5ab63e-0358-4e3b-983c-c25136cacea4\n802d33e3-ee3b-45aa-be48-be7ec98a7f55\n462acbc0-f166-4eba-96da-72e1c05f5b39\n3b041a07-f5fb-4dde-b13c-bf1cb79b20bf\n79341581-294b-4445-9f7d-a7f6ff0a5265\nd357e41e-473f-445d-a1ea-310b9a902e3d\n026ab2f9-e783-4776-9791-e8d79d962c97\na808d4d2-c6f7-40f8-ba3e-26ffd782bd29\ne18c3695-ac9f-44e5-87c5-94f210660e66\n04c7d5bb-ab70-47ab-838e-83b8fa3ed1aa\n68d7c68e-5223-4a4a-950b-96f3095c4140\n37226ab5-1db7-4932-880b-e63f7aba5b46\n4c48e1c0-00b6-4a51-961b-9ee5bcbb9918\n0d34656e-6d70-4f22-a537-844cc1d54280\n74600bca-0e31-4aaa-8117-e6e3cabc8f28\nf3e71450-bf5f-4b57-a171-217c15e5f3ae\n30f46df4-79bf-4fc7-b22c-34ebef945ea6\n7e2409f2-153e-4810-8e38-4be52d7e3879\n32a0d603-dd3f-4b59-a960-67e7242364ca\n2d2b2f8b-d6b6-4cdd-9b2d-a80f540e7a12\nc78a7cb7-3c99-4d7b-90f6-5d07ede7e08e\n902115e9-1b7c-410f-ae70-861834106644\n98284372-ba18-4bdd-9f8b-cbe7cc5574a5\nb589bebc-4470-4f08-b25c-1751796c9f96\n5ed2a0ca-d40d-4c2a-9f30-448172979af4\ne9716da1-cdb2-44d0-ac36-9dd679354258\n0e3d36c2-e1a4-48b8-9d3c-0452d74582d5\ndb30b432-dab3-4a53-881c-adcdc9724b33\n82a43bd6-4083-462f-8125-01523bc3900e\n05f55e8a-d86f-4631-b891-f46a2c9dba06\nd343416e-3ea3-4b2f-82f1-27c52645a473\nfa0b727b-f37b-446c-8f7c-e32909161298\n7f12b731-7a75-4af0-a8c4-b1864b396108\n5573680e-6455-409c-acd3-dd6edc17fae1\nd852f9c1-7f8c-4b51-88f8-95833e088e8f\n7e4d5ee4-16f5-455b-8db9-cdbcbf68b425\n84a00ef1-c20b-417b-bd2b-9f5906c3be70\n8433e0a0-9114-4a79-808e-adf5e46c04da\n11e6b270-784b-4403-b053-85b462173b80\n8e83bb5e-1f86-4d53-bcff-a547740edd10\nb8595dd0-45ad-461f-862c-018d746e16e8\n662bab41-b35d-4398-8136-d1a96636aa10\nb433a91a-28a3-4016-8698-107c369d87e0\n40fe4206-be6d-426a-be83-1502aa3b6c82\n18d65891-c369-433c-ab26-174db1737c2a\na6a42b4c-13a6-4500-91a2-ac44d44be1ed\n096ccba2-f815-41c3-8f60-416ef738b2d4\n5aa4158e-598d-443e-8324-84ca14442b44\nbd9b26ce-c04f-4ed5-a295-6e9a0ef15b10\n7dc0b217-c53e-4ea5-bc65-05363104badd\n69f8e2af-016a-4768-b928-41159b2a7ad2\n8d4a3d9d-4a80-49d4-83f6-2eb4ac40cbf2\n372f65b2-a2f9-416f-bb41-b30ea612d9bb\n5ba1346f-f833-483c-aaf3-e5632d3b9c1e\n7fe4b009-74a8-4d98-a5c2-c6a5155dfda3\ncf7759d2-c9c7-486e-8751-f96a8c85bd46\nd8e4ef68-234e-4ef0-8714-1823f84208cf\nd2cb8463-a9a1-4002-8593-3b8b18de558c\n494594df-d317-42f9-a203-4ea479751ce7\n173d174d-7d7d-4011-98ff-87a901641c9e\n8b28ee3f-1da5-43f8-82fc-b2c7bf954492\nb4761438-c11b-4ccc-bcdc-87d8d3bd4ed8\n9554955f-e2aa-42ce-968b-208c78507e7a\n16ae7b47-4af5-4ccf-806e-b77c076929c2\n3b026388-ac0f-4b40-b89b-660132fa9297\n73f361cb-e6b5-4682-b707-7c37f56270d9\n737af120-81c2-45db-8d9b-7c91b6e82024\n3ce8ea0f-e4d8-43c9-941b-b029c2a8d85e\na5bb5262-dc0a-419d-955d-8274493f2bfa\ne04f1b2b-0aa2-427a-8637-3af37d399430\n916170df-95f2-4344-887d-84314df86556\nb9c2d0f0-51b4-49c8-9486-5844a0fef6e9\nb0537f22-5f08-492b-876b-f29558d8bde4\nb85bdbd8-0991-49ff-b837-61ba0e0ff185\nd17156f2-794d-4298-9413-0c774ba81540\nbb5cea30-30f5-4ada-bfd8-59db51c60ae8\n10cd2a43-c155-489a-8a35-6995c77273bc\ncd2e7ab3-170b-44a7-a3e1-375827b62b60\n89107441-9be2-4558-b88f-c041a482738b\n0b330b5b-6155-47b7-a47f-a3ff0a363f6d\n7299a5d2-70c2-4256-af2f-42e8a56d26d3\n9b52f6d3-a363-43b7-8d2e-2c07e5cc712e\n65290622-5e19-40d6-9906-fb152d71c895\n322f207c-b15e-4efa-b007-f1892a91bb7d\ne7612c01-22fd-4e7c-a760-a8977a790352\n6bb1822a-a1e7-4566-b55c-c554a5f86a86\n2dcdd70e-9c08-4fdf-b2d4-45699e80c44d\n75f164e1-8963-4c8b-8d79-aa7427645b5a\n2cab6938-0033-46e1-b0f2-08b8837446c5\n15bad8b4-2032-4ac3-81f2-0f6f719cb1f6\nc7c9fe9f-c2c8-4096-a759-1827547454d6\n11aaee36-ffc1-43eb-af99-9d66ab0276b3\n723120f9-b524-4e95-acad-d88d09d7a485\n3d157e7b-7970-4c0e-ada7-1a7e675b33df\n2d52ddc6-c4af-4580-af08-d12ef1c1b128\n013ae69c-0acc-4445-be4d-c39e0c026275\n2b26db0e-268a-478e-a054-c6535065b1fb\n6c428791-c8ea-4e85-bc68-852e7e1777fc\n77d24a45-e16f-4db4-bbf2-5d80842dca8b\n0a2f6d3c-4c59-4966-b1fa-b0a403cb48f8\n11d9879b-742c-4916-95ee-efdc89ff44df\n842bb66b-daa0-4841-9b0b-a471b8d514d5\n9b9e6bec-c889-48c2-a3cc-551221e481b7\n19cfb1c5-37eb-4011-9560-226178f8d0ca\n15ef0b0d-b36c-404f-aeb8-c4ed0a0564b5\nf64555f6-4c77-455e-9857-918a985d9d2c\n95940a73-f833-4a2e-b315-335e82482ce4\n53162eba-7a02-4d5c-b8e3-76f60e4fcfc0\n6fb67e16-ee76-4c34-aab2-290b5e219683\n25410648-ecf5-42ba-823c-7d3fa9e3f980\nc78adc50-14c2-44a0-b449-0d7d30f546f8\n31a8a965-a389-4fbd-87aa-30601102ccf9\n60172432-5cc5-4565-9c6e-16b28a4dc83b\n93d45dd1-2f31-46cd-81e6-90aa44b11df9\n17591a84-704c-4ea8-9de6-b43457615645\n0bdf37ce-9c59-4fb4-9a94-aa7b92e49e0d\ne1b4f13c-8306-4543-91e8-0ff781cda306\n78a6b982-2511-44f4-a46c-ea591ddc9a87\n4ec19bbc-bee6-4c12-90d2-df18c201c17c\n1b38b2bb-b831-4dcf-a73c-3611a30bc4d5\n53772885-ef76-4b9b-9016-f481c9c65783\na5fd135b-9ce7-43d1-aba4-7464f4dfd020\n93ba9ff1-d844-4667-9bdc-0f6f07a4600b\n86482b55-4466-49ce-81c3-aa77e7f9c1b3\n911698cc-6f17-4bc1-8c6c-3737c0742e86\n6be405c6-1cab-4237-8257-31b80061f764\n8f1dc3a4-430c-4036-9ed5-7feeff5a4f76\n56242185-7dfc-41a0-898e-30d6dd8047e8\n7143c144-c969-48db-bad5-15beb6560c3e\n1b8287da-6bb3-4b76-bd0b-fe67f6a7aba6\nd9090d8d-9609-46c8-a120-68c442f6fc9e\na5608c53-1d17-4f01-91f3-fe1c86219ba6\n2d2ccd3b-08a3-49ef-a4b0-b3975d63732b\na7680427-b068-4beb-b37b-2323c8332c60\n25a7e198-ace2-49e6-b1a2-44b39d0efef9\n9b24540e-6661-48a2-8238-515b64487c87\n2a51f1a0-5334-4059-94f2-c92cf0acc28f\n10b21c1c-0f57-4253-a648-c14ba0b2738c\n712429dd-2518-45b9-8f7c-cbf05e7a932a\n87df2a56-6823-4954-bdf5-5f82e4fc4cac\n47da684c-7692-4930-8ec8-c4ac4333fa0f\neb24c64e-023a-43f2-b275-42418316561e\neb520402-01b5-4eda-9bd6-e0e8f6a266a5\naaeb45c8-8fce-4877-8117-9ff9e5c5a592\nf38b56fa-9df8-47fb-8515-a2fd49876787\n981d63ae-3ed6-4bf0-830e-0204c1a3b285\ne091a4a6-d185-4413-8b3b-7e3b98f0e1a0\nae63bab1-638a-4bcc-acea-b74dfc2bc2cf\n8ca64073-5ac1-463b-9137-58771a5f1b18\n21258736-228a-4867-b9fd-680d11d5131e\n83d5bc8d-4786-4167-b4cd-2985fa40bcbb\nc835c7f2-579a-4a8e-917d-8bcf441b0b54\n64704892-ca69-4555-be52-698965cfaf34\n5b52b556-b5fb-47c6-8639-e5850222d34c\nb97b5e58-b228-4916-a3d0-65a1f68d4ccb\nf88979a5-a0a5-4d33-808a-7a86e5cc0156\nee431031-6ecb-4b26-9110-3840b6b4f145\nb2c85330-366f-4a3c-9192-5557f86848eb\nff8119e6-2ca9-4c8b-b3f5-aeed03b28036\na0108c19-3bc1-482f-b4f2-7ea620d9fc39\n75dc8d2c-2f03-4801-9bea-8964cf5dea8a\naa0184e5-b1f9-407e-b7a9-b03a240741a4\nb0998f57-c5f7-4dd7-bf61-9cb29d94dcfc\n1ccd4e29-7645-43e7-9e49-b9fd292d5c58\ndfa70d03-985b-4c05-ba48-072b15876c40\n32fc4b53-3239-4a55-9323-c9b506325f88\n43850bcc-f721-4b93-9a92-716e15ccbbe4\n85b3bc6a-c05d-46af-8cbf-3c5843d42967\nfde72354-9ce8-45da-89c6-7b21f6a501df\n453d9026-908e-48b4-bb7d-b86b71f4f498\n5389bc8b-9179-4ab6-a578-2b542e2d0f33\ndd32e39d-0736-4b28-8631-6fc5990f3a28\n19a57da1-357a-44cc-9b03-baf8f8c8563b\n059eec24-aacd-4baf-badf-547ac5e2cf8e\n2ba86fad-fb8c-4a72-abd3-42df6d00ffb6\nd04634be-e6f0-43d4-80d1-2936f4fcbab2\n68280988-6134-4416-afdf-f02c0d6bca2b\n512e1f20-008f-4f82-92ad-cf74ed1dc538\n3b6d0471-be4c-4926-b89b-cd354f4be7bf\n97c7ab7e-d03e-4758-b092-519331328e66\ne572b4b5-2b7f-42ea-a46f-e7bd20b56b09\n94750ddc-2069-48b2-9b44-ab8ab761eb1e\n407bfec2-f5bb-463a-b44f-c52a89dc8e81\nfe1f6ee1-c8b4-439c-a4f7-f9d4a47c09be\n37377edc-b2ef-4f23-82b4-7c2f477e9f0a\n0f5c0087-53a3-4ef5-81f7-6e5014b5092b\n45977bba-9089-46c4-bab5-536621fadefd\n42ab767a-4685-4d18-8cd8-4831c78bf101\nbf990c79-a79c-4796-bcfc-198e59162f4a\n1b7f124a-972a-4241-9bed-4cde29f33b40\nd9662dc3-7576-4668-bb7e-ed1781aaea6b\n896ece45-80ab-4336-ac50-c455a6152639\nc69b8790-af0a-4ce5-96e8-e2bb639e6193\n4b652ca1-3638-4669-9c44-271f613fee43\na6b8965e-d8a5-4c55-b513-31a7ab931cbc\n90bd0eb9-eb29-4627-bd79-dff211fdfd14\ndc42699e-c868-40d7-a4e1-ce4954b3b36b\ne5003ef8-39c6-499a-85da-3c5f0ba0f223\n30ea9502-d3a6-4359-aba4-92d975f52f6d\n22a36f9f-b687-4337-9ea4-d047569aff38\n900257e1-a513-4401-be72-b75dbfe42f33\naf3f1471-5434-475a-ba23-3abef4c10188\nb40186e8-3b4a-4679-a487-4ebc82b16244\n9c956324-b975-455e-a849-09286a957379\n4eaaf834-81f8-46e2-9201-f97332f873a1\n6456c03c-bfe9-4738-97dd-fcadc57ae5a5\n9eca7963-818b-4971-9d03-3cda2941a1a3\nd936f7c8-a793-405d-915c-a3c94eabee05\nb025de7f-6ebf-4c23-adf2-b87de681ebdd\n52afb8c7-e2db-43db-9bfd-c4bbc2a0dd61\n74565dbc-5ef0-4635-96c2-f64d6f229a18\n81a08d1e-fc22-4fe7-9dd1-037e13770144\n38ce5124-3043-488e-9adb-7fdad4af11d5\ncbb57e91-4311-4e1f-8a73-334c39694d35\nf661a0bb-03ca-4ad1-9bdf-4b72f9fc763e\n092f7b0d-3c04-4274-b1cd-70d1421ec99e\nfac74a61-0c27-49d4-a8d9-2f1bf1b406c8\n36710273-bed4-4782-b8a4-7933e0465e2f\n5761dc45-d104-4137-952f-6bbd5aee83a0\n503bb8bf-fb55-4f02-a806-c78cc1ddd32c\n343ddfd9-0cbd-4b14-8b06-c69e69cc7c98\nd8e02089-4560-4f53-9669-7f5e1b8d356a\n2ef0235a-b34d-4302-85cf-ae5cbd9397e2\ncb938aa8-a7ff-4c7c-8432-353245183352\nd0f354f4-dbc4-48b9-babd-7a1c19a8649f\nb8e0b0b2-c6e1-4112-a1ec-5c9d80408b60\n35d048da-6639-4782-a9f6-892ee1e808cd\n69f178d9-53ce-4a3f-be3b-5a6cd424111e\n751084f6-7893-4703-8674-72bcfedc7f47\nf3cc83d1-5b1d-4761-a69d-3c32d8003d2c\n09e9edd5-3738-4378-90af-f7943c754ca7\na291b3b2-46af-4792-9c04-51cbd46cc835\nde54934a-9d12-42da-97c6-ac803930d3fc\nc0e4d68d-544a-48f3-8c1b-97437e88db44\nc7d9ca96-98f1-4885-a92f-3f69e39639ed\ndd4c42d8-04b8-4ef1-b156-af694db62c04\nf83f7e90-e36f-421f-98e4-708d70bdabb5\n375ff6e6-6a22-40ae-9579-be05778ad9b2\ndc26fad3-fcd2-4b89-bdee-98a24aee288a\ne35aea56-4dc8-4dab-a8cb-95cf398eb6fc\n7261f88a-b027-423f-9e61-4b8c10a44494\ned47848d-deab-4e62-943c-334976df25f9\nb2ffde17-f892-4bab-9adb-cc43618d9b70\n9cbcfc80-1a2c-4531-9c09-eb3449dd6afe\n44fb8354-44ed-4b18-8de8-b162498f8410\nfbb67e36-342a-4885-aac1-cffb2050ba44\nae15d569-cdd1-4714-9311-f09b8d6db9f9\n85dc6e24-f4a3-4920-91ce-89a509dbe235\n321d0c1c-87a4-4552-9156-3988d596afef\n786785b5-ffe5-41a9-8a91-a43054edefb3\nad736c69-d10f-491e-894c-bfa806ec4c68\n79b01b14-05b7-499c-b3e9-ed54bc4905cb\nedcadfc2-5287-47a0-a432-73a05a82132e\n1c42c5bb-abf6-4e15-9686-08d004878ea6\n08f8c65c-7df0-4d27-8a8d-d941677db368\nf126510f-6a7a-4c3e-b2cb-32a76cd9618a\na229bc11-e5b9-4f8f-b90a-786025827eee\nfca7e19f-dd6e-429a-8a8f-3ed8758f2cda\n67c27a2f-1d69-48f5-a970-6b3edbd904d7\n064411ff-f75d-4ebf-a3f7-5017c0687463\necaa872d-a5f7-4891-af6a-15d554d8d528\n0ff1b982-65fc-4133-a080-fb7a555ed9f2\n82d4da2a-3b5b-48d0-8068-8e0f7a6db5a4\n458746ca-234b-4e9e-a107-c14cadcb0cf4\n10067f8e-d738-4266-824f-f491af77b124\ne23bc33b-8ed2-4ca7-a5d1-23b746db80f7\nae6c7b09-154a-4da1-8e92-8eb216f79520\nb5ee37b7-c91c-4899-9a12-4b463b9841c8\n458528ff-183b-4b79-9215-4fc8b0b2e2bf\ncd57c290-27f0-4861-9bb2-3f74f8e2e09a\ne1b2288a-eba5-4785-981b-151e0b5e5306\n79f9e1fb-8b81-42da-83b6-dc268d270db3\n52c68264-972c-4f6f-b85a-0fa586c4e4ec\nce6de487-0c57-46da-b2be-7f6895425d9c\n02da7454-8ee4-4cd6-876f-13bddbb65958\n085b6cb7-a69e-45a1-9dde-da05bb820c03\na26275d1-7b13-4f0c-a139-bfb0088af0c0\ne5a96e13-486c-4c7c-b923-c9b30be44648\nedd26456-46a2-4123-ba31-a1cc800843b3\nf58f499f-b9ca-4e81-a24e-ee3448371189\n2716fe21-85ca-4802-bb06-c981ed726b27\nbd5e8bfe-f372-4d03-b086-df1f4d8df77a\n31d4df76-6bb7-4721-b707-17a6baa66a40\nc7886ed4-c407-4d46-a45c-b593c575b424\n60d78384-eea2-42fa-9d09-5bf24bdd39ad\n41bbf986-4bc9-4e14-8821-d5daa5417816\ncb420ee0-eb40-4816-bff3-305cbb5f1405\n4c688240-4284-48f0-b87b-56e6a64ecba9\ndbcad145-6742-4144-bd64-0207a2727b8a\n3f46f460-6cc7-4989-8fac-49641299e551\n4f0b1b76-1408-46c4-b860-074c3a96b5d7\n01341cef-2afb-484f-b693-e1cd5c8fc6c8\n549ebda7-90ca-4fb8-86e0-d33008e638e4\nfee49aae-81b8-4e8a-acea-9bd6aa1bdd2b\na1b100df-05c5-4bb5-90aa-0069d0aee447\n8cf036a1-3250-4731-b325-b0889f47bb3f\n872c83c3-c3f7-4e67-9485-ff9169d1baa2\n3c646dbd-b277-4d64-9eb0-6df87147796a\n9cecd408-d3cb-4643-982f-ad131f8f08f6\nfbafa7d1-3039-4864-989d-6a23ca9b4285\ndb5f52a8-ab1a-4ef1-928a-51df02f1d923\ncd05afda-fd22-40e9-a564-c5548ba3cf91\n7d6824d4-1504-493b-b3be-bac5881575ce\naf676c32-1f23-4570-ad0c-5224defe44a2\n9c9d6300-c7e7-4333-a6a6-59399b330c61\nbb3f1888-635f-42f6-b60c-2ae19e64d0b3\n7b89d502-bade-4a95-8ecc-139059953439\n50ba8c9d-faec-405e-9972-664c66b885b9\n05c707e3-0cc6-4ac5-a057-fda25688e49a\nbdea0a04-67ff-427a-a004-61928603bde9\n8c8ffdd4-98c9-4fe8-a12d-1f35b13915f9\n2e6e4aba-9ee6-4907-a70d-9ab03b04996d\n214f89c1-affc-4082-aca2-0308998fc126\n0f94b0be-25a6-476c-984a-63bbea111629\nfc75fd4c-3ea3-4e53-8722-21667d0045f8\n7806f714-532e-451f-92dc-69d653a9ff98\nd4250521-4b89-45f0-92cc-2d4411062ff0\nea5b6b85-74c8-40c8-bd3b-50d152ee236c\n14f8e6b4-17a2-458c-80f4-1d246b055ada\nf332a463-822e-42d7-beed-f913f0780d3e\nee805e6a-6f4d-47f7-a795-60dc2204ca83\ncd59f22b-5fe3-43d6-838f-6122716f6ecf\nce19034b-5902-4b9f-86bc-dbe2e7d9e664\nbf6caba9-bc40-4814-a526-af629be85c0e\n4dc33960-393d-43ad-98ce-07352c8d8890\nec0b5b2d-6f56-4574-bcef-cd0b5b87e503\nc20aa133-6086-4fc2-82b6-b8a6d87e6d85\nf3968fee-c908-4233-9405-5d3c9219909e\n986aa655-a6bc-4792-88ae-9f42c331b83f\n88d4e0d4-6db7-4133-8e59-cde78753f2d4\ndb3de364-5b97-476a-b038-0e053d1eb4b6\na42d5b50-ecbe-47af-8017-cd8a3e2383af\n2a6bd28c-8504-493f-aaaa-c75d539686ee\nbd27addc-6740-4273-a2ca-5dfe86087810\n77832561-5629-4da9-80a3-f8a061fbdf6e\n1114594c-3d68-406f-a123-d492ad5e95fc\nb265f291-3a39-4d8b-8cf1-e47d06e1a1ef\n27631769-0f46-427e-8822-ff352212ba7a\nc63d640c-3173-4e12-9bbf-def346a89e95\nc3b9f44b-75fc-4496-95a5-6a1ece90d91a\nc0ee05c8-c981-45e8-aff2-e82c79fbd981\n73cdd97e-2e42-49bf-ae23-ff5421ef0b8f\n600d69ad-625d-4cf6-bae0-f35001299b5d\nc0d2b783-f792-4091-aaa2-671f4043fade\n2040b833-f25b-4801-b3a0-a6eda170d622\ncac37ef8-7e59-43d3-836b-1962000bcbf5\n099c61a4-0ecf-4163-9cf9-fb1f5ed2d7d6\nd8e7e6a0-53ed-434d-bfa3-17c0a4437e95\nffa51f4d-b8d7-4cc7-83e6-f5d1a5f9565a\n978cf2b5-fb29-4ee2-b67f-8f1e33b33548\n166a73af-2628-47e3-9ff3-6cb69a3d0a3a\ne2db3b97-c862-484a-96f8-382670f54101\n05e68344-95fa-4ac5-aba4-403df609cf61\n5f5eb62b-cd3a-4237-9d18-e330e640f8b4\n023b96f9-9804-49a2-a2ec-281078b0f998\n630f89e6-e83a-4e52-aba3-8dd3b5b94012\nf199bd03-804a-485a-aa54-afc96f85a9c9\n5bb46008-18a4-4428-be3e-ae957c3cdd82\naf5b0365-0dee-49cc-8ef9-d7ebbf720e95\n99059699-60c2-42c2-883a-eea79912f4d8\ndfa8eaec-fdd8-43f1-9e5a-3eb2d51d4fa4\nac443187-3bea-472c-bc70-bd8492e64538\n57e6e6f3-ffc7-4c6f-ba1f-7e2ba165ecd6\n3430a30e-0e84-49d4-b41b-75be79872dce\nfb577b8f-685c-460c-87e3-cefd5e8d0bea\n1e724120-952b-401a-900f-591e9da18bcc\n2d9bfe08-843a-483c-893b-2ebf0e771974\n4347e6c9-8624-49b6-acd1-9d25ad0ec9e1\na2c35fc1-466d-485c-afae-910fabff67b5\n03344818-842a-4dd7-bbe1-0c487a87998b\nf9dc2aa0-f758-4573-88a1-f55f7de055d9\ne38e7f10-23c1-4797-b35e-edde040cada8\na94c56b9-4d1c-4e99-992f-f5b011b17a7a\ne43f1435-d31d-402f-bd10-854e1544e420\nd6258ea9-1dbb-43e3-acfc-b94724fa2208\nd496bb8c-6161-4d41-9030-e93bc149e79c\n428018f9-a192-4f07-99ec-dc8bb0178799\n90d01657-d946-4f47-9015-a21df4f6c4e6\n0247c4dd-e785-41d6-a4b1-50d2bf093aa8\n16075ef0-9bb1-4d98-af2f-1f7e52fb2376\n2829c088-7996-4953-8391-72dfe33d717c\n630c1cda-6001-433c-8e53-68040925d660\n9ecd036b-b396-4a6e-abc4-27872f18ca4b\n02821663-3941-4aae-acc4-ee4bb3329ab7\ned44096b-c58b-4705-9bd2-a097a5a946fc\n2fded932-2705-46a5-bff4-1a5d0aca013f\na585108f-6f6e-4e35-afc8-57b0193cd1b4\n49c1605f-0001-408a-ab05-5cf97ea33482\n2b7d05cc-85a3-47ce-8e0e-e0507dd36a40\n954f68ea-4a54-4dcf-a202-d3535280bedc\n4d1832e1-9abb-4dda-a867-997f48c51037\n7789610c-bbc5-4e51-b192-f5b850c56b8f\n0ed91e63-b24f-429d-bfc7-0a1f1199ef27\nc238f290-25a0-493a-8ab5-760f58e33d09\nb5bce50e-a930-492f-9ab8-c73f24c2ac68\n79c7ea2a-9b38-4f08-8e4f-73b07b1eb43c\n612db8ab-f67a-4f14-a4db-13abfe81e7e7\n7abd0b9d-f675-4e92-9dc8-1aa0cbf2d670\nb1306fa4-2ee5-4ac5-8229-676f1ed2125a\na2865ea9-c6d5-4cc4-aaaf-59c7f27a112f\ne456d687-9997-49c6-a0d4-b177f0cb23f5\naa63f879-f80f-4d1c-9d8a-d9f575ad8d5c\n5118e418-3197-4a30-95f7-67f5a60fe0ea\n388ce530-27ff-44b8-a062-118b35942a0a\n4eba5e31-ad16-415e-9a5b-d39d20f038d3\n89126d3c-72f1-4b1f-9fd1-ca4ce8120f27\n4b194955-4a25-41c9-9a83-8df7bb211819\n4bfcbebf-5bab-4b31-8cf6-9f5ea92684fd\n2add19e0-f67c-4109-bffe-92298dde3f4d\n6a184091-25eb-415b-a280-15e0dd38da54\nac746b3d-271d-4f82-bc29-1fe5aeb7cb55\n3bd236ad-da0d-41d4-bb04-9a5201158af1\n02adaf92-2143-4a0d-8607-bfde3cf946e4\n3cd99e4d-a389-4a09-853a-ab6996d7c694\nd0452cc0-9396-4c88-91fa-24e4f107e7cc\nd6bda46d-7dbc-47bd-8d63-2fbc21d93553\nfa1dc110-052a-48c5-8dbe-baea60cbe821\n2946d9c2-ddbd-484f-9e9b-ee933806b0e9\n2169678f-fb31-41ad-928f-f5e010d3aca8\n3af0225e-7918-4316-9ef9-4e99345777f7\n557d2a8b-a530-4936-bac1-9fa0e1e2d063\nc6e697a5-9a14-4cc6-a692-0aa8ba41fa69\n10edc05a-44e7-4978-939b-df9a8a5d9372\n57286a76-aee3-4445-a0bc-1be516a6e789\na448bf06-4893-47a8-9328-c3ded0888940\n28577aef-dbb4-411d-bb73-e7e3491cf4bf\na4a44c9a-a5dd-4310-86cc-16e1a75a1903\n10a11cb0-4233-4f65-96ed-272ceb33f749\nd1c77f90-cf3e-4bf6-b153-07a187ea7c2a\n86d3a720-1531-4c25-bd67-1d22fb59e698\n61582708-4612-4189-90b0-55557d16b349\n65502c93-7d5b-4295-a411-9b4ff47b1029\n84090024-1126-43e9-b7f5-940871c2ed6d\n8f5b51b9-9a12-4624-96b7-78d77f783f7f\n1522dc53-3c48-4013-abf0-2d6ae384680f\ne32beb61-df60-4ffd-aaaf-a0288f652d27\naba3f4ef-176d-46ad-ac17-1f3e1663dc20\n66b8aaa0-7866-4602-a1d8-ebd7b2577352\n2fa479fa-c6da-44be-acb2-263ce639c5d9\n4a158a44-38bd-4a17-ad86-45ae1cdecf91\n32c6f527-10c0-4d52-9081-67962318a0e4\n9d51e9fd-b6d0-44a2-b9c5-36d3988ed72c\n136c7507-96f4-4e77-a866-251efec036ae\nfd0ae184-9244-4278-b6da-6e706d56555a\ncb0af3c4-3415-4bfe-92ae-c21ffa37ece7\n74dcefc8-9836-499c-994b-322747523668\n1619b9a6-993f-43a8-8a8e-d5cdde4178c4\n1f02d425-f3d3-4db0-bb89-f1aaf06cb6cc\n3a71e8cc-ab74-47b5-8430-b900ea31a460\n0e28f86b-1a60-4725-bfb7-fda4f6838f8e\n2a9b49a1-1a78-4e50-8052-9a4483bee515\n32fd7834-d383-45b4-8f2e-c7f2f92bd8d5\n63881ed7-a74b-42f6-8e77-5009043e0eb2\nef314ae6-bacb-44f3-a61a-6deeea7816a4\nd5d0089e-6af3-40d2-b29a-2b0bad461742\n5dd49a3e-7a53-4a17-bd47-66fa7547032d\nb8f264e9-9be3-40ef-a201-e60b902de72d\n4e9fd560-ffb7-491f-87a8-2eb1803f9225\ncbef42d2-18a9-454f-b6cc-5656441085e3\n8bb12878-dcf9-4e97-b7bd-a70440ab2ea9\ncaf484b0-2d0e-4baa-bde1-1ddc769042de\n17936917-36a1-4706-b7c7-78b8c02f4cfa\n65460e01-28fc-4671-b854-b01850961e21\naff75aa5-a2af-4e16-b4fd-27b8cb746941\n955fd804-dccf-4cbc-97b8-fad18e4b9dc3\nd97224e4-a1ee-4185-9b89-326af74d1972\nbaa4a775-2aa7-451c-9fd6-b2c763dcc011\n3a74251a-f70a-49ec-b068-c70db5a9b160\n49aca69d-ebbf-49bb-8f0b-b17b3d26c02c\nfec66dae-68a9-460e-8301-787fb6e7d8af\n7ae64b70-e790-4474-885b-e540c41f1504\n91116244-063d-42b1-aede-ba274b8ddfeb\n168f4690-185a-4ae9-aee8-977aff95a36e\n7bd95882-605b-4237-8c9f-3ac79e749e58\nd77cfe63-9099-46c9-b002-870cde974df1\n2fda987c-824a-4308-9995-079b2de1b7e2\n0c5c3f66-f90d-4bc8-9cf5-44bf3376d2a9\n3d66fae9-c49b-42ee-848e-034390c89930\n4ca9e3b3-acb2-46cc-b476-869c16822ad4\nb4fd74c7-66fa-45c6-b8d2-c3b83debff94\na8bb2f6f-99cd-4386-8443-a9ab0bba2f1a\nc6ff612e-a38e-4224-991d-422dfb745fe1\n3fd2499e-e651-4d1f-8307-b309bcbfd087\n394616ba-533b-407d-be0f-196a1d3450b1\nc5fcf91d-100c-45ff-95b7-90f0a0434a1f\nf7d55f4e-009f-43c7-9a66-458414090fb8\nd00a7ed6-f9bb-42cf-afa9-e15fad6d2423\ndd9906a8-dfd2-498f-9dd0-bcc398f2ea1c\n0b7e39aa-d159-4ace-aa98-eae0ed0763eb\n91a96112-e897-4540-8c03-e4dc83001c25\n48b0e79a-61b6-4700-b6c7-46eb5ec94152\nc226a81d-6c00-4224-92eb-f859191b0482\n64a47262-4d95-498f-9e0e-fb4ec141efce\ne9720691-29a7-46ad-be8f-b08a7d8a055c\n058cb24c-6d1a-42b0-ad3c-0aae47c6e320\nfd0fd4c7-c311-436a-b460-9ce8c88df20c\nb55fc6c0-94d7-4b75-b0f6-c53926662417\nfa86ab16-5fab-4c01-b646-5f115e1a24a4\n22e2aba0-6ec1-4bf2-99d3-cd4c1d11b705\n80cd642e-fea0-4e98-9575-d9e4f28e8792\n5f21aae0-b9ca-4f73-9cff-35de742516e6\ne1d42cc7-3135-498f-8dda-aaf74f0efe06\n39ab1ec5-1ddd-4c80-be73-459ae3761021\nedc92403-3456-4721-ac33-c46ee2d0c0d2\nac07b377-016d-4958-972b-f12284444d3d\n8111cfe7-b4e7-4446-bb10-939ca3bfb90d\n1225d628-82e2-4017-83e4-a121ca1f9f50\n01c493f1-c4d9-47a2-b249-487abbc46236\n8a953e3e-06f3-41d3-9ce0-724aae3e62da\n11c127ee-d4f0-4e8b-99df-8fc8cc93f60b\na70a4157-c979-4789-ae33-bfb30b74d5ad\nf5cd2235-223a-4154-84d8-921df2baec88\n611ee3e3-69b2-4b41-a1a3-7e9c4635bfdc\n8600e8ea-8e6f-4949-ac93-57584557afe3\n34a8c097-c571-462e-91f6-947e9d19350b\nb049a435-9c84-47f9-81f4-adf09a60fb51\n9bb2b67b-0d78-4e39-9997-a71d81b9bf5f\n60d970d3-1310-443b-b81d-a68a8660fbae\nace8e482-e9e1-4c59-b075-f9b6113fffba\nd95fb5b1-9b3c-404b-bc0d-79f82ec1e354\n8b1bd55a-6a61-4ef2-8f03-094e1ac8df37\ncaa8c59c-09cb-417d-843a-3217102581da\n109fba67-fa2e-4335-a560-e18977ace2e4\n2658941c-ef02-42dd-910e-ecdc46bc7ac0\n53950008-16c0-4c87-9232-5c175b346d0c\n6876cace-98de-458d-891b-dfb112756882\n0401d8ef-ec36-4f12-990f-0437571bd39b\n7285f27b-5720-4da0-97ca-f0279a7dbcb9\n4ed956e3-f037-42e7-8e9f-c97c99c87824\ne25c748b-6aa9-41c5-9c95-ef6884e95ef8\nf47ba33d-096c-43dd-a08a-aa5848842ff1\n6e86793d-530c-46ae-ad4a-26a921731a9e\nc8803418-e3ee-44f3-8a8e-1c10c78503ca\nd7331f83-a3c0-4e6a-a3b5-079532a0e049\nb98b52ee-bbd8-4f42-8277-aa4c4d964b09\n107b5f25-b56a-4dfb-a2ed-289c02cb0bfc\ne36fafb2-1c58-45bc-a1ec-1ff965a563eb\n0ac5177d-7655-414b-b7ae-2fc9e1713523\nbff12639-1750-4081-9c21-d7aab1d12319\na569fcde-23f9-4e6d-bd83-15825579b896\n88bc6612-adfa-4408-8881-8d066f99d6b8\nb6fae827-c0ba-47b9-b75f-1ea3d67337ab\nba6e80af-65d1-42c8-a96f-4fe8f6d2a632\n60665109-3710-4112-bebd-209a72d179f2\nff01e313-d1fe-4b4e-80a1-92e2d0d4b13f\nbe15168a-35e5-4035-b91a-8c0163b8e84d\n3b6736bd-d7f4-4dd9-ade6-84ce4fe3a26d\n2703487a-124d-4c83-bec6-22e7e702bc41\n28987423-8e9b-443e-94ba-6fbe62e719ca\n8ddf72e5-b8ea-412c-881b-50ef33acfbd1\n7eb26bb6-f04b-4af4-a2dd-20e73ab23dff\ne4d4f015-b544-49e2-bbfa-846033a9a3fa\n2fe4a8d8-765c-42d7-b75f-0086621d0b44\n44384db5-0291-489d-ac74-cabc6d2a604b\nf610ead9-acbf-4bab-ac31-df81a6f69e1a\nbc9d42c6-79c5-4187-b414-9147e68ab7c0\n857ec5e1-f959-438a-a8e3-091f50d43641\n242132d4-2509-47f5-913f-fb3f7ec97441\n547f3fa0-fba3-4b16-b6c3-8f6a74240860\n07aae668-ddd9-479d-84bd-60680576d192\na71a13c9-d964-4a16-b4dc-36c1809c4b33\n61f503af-28c1-4c1e-8bf8-40dcf2d3082d\n4b0cfd2d-2ed7-4a28-90bb-4b875d667941\ne14f2613-f5e6-406b-9b7b-e8e43545b6fc\nee6961a1-95f8-4102-adae-461c90c72379\n707d48ad-2745-44f4-a2c2-d2894a214c00\n15991b92-91d1-41b4-8fd9-4d926d163463\nd9147225-718f-42e4-8e38-9b106d08acf8\n39bdae46-b61f-404e-a727-68e69fb01c60\na89b48a8-1530-4d30-8b6e-2681c2bff5ab\n419e6db8-4d06-4776-b689-c109d59e3603\nb0994c04-1fe9-44a1-a6b8-fb426e932246\n27ba4cc4-877b-45ca-8468-118f39a1e86e\ndb6b1c65-49ba-43d3-94f7-a050d0270c8c\n0bb15d38-b23d-4123-a89b-c255d35db1ff\n0a61516a-7ad9-4dfa-9a17-b8caaa5b0290\nfff6e96a-aa50-41dd-9607-2d050bf519ea\n458dddfa-14bf-4849-9b71-9fc1168214fa\n3ed6a54c-c5c3-4e39-8612-4e5fad586dda\nd17bbf13-f557-4bc6-afd5-518fefd477a6\nc5b77146-e90e-4c42-bc09-dae93709ff69\n93e2ed7b-3c8a-4a60-a494-546e40bb399d\n2656cc8a-dd55-421f-b40d-3baad14afc27\n5ba28017-51f0-4575-a194-5dea318509e1\nd5490cb2-33fa-4531-b93d-479197212b66\ne93f65ed-a595-4f30-b47d-19f55de3ed6a\n66b0b817-0ddf-4b53-941a-5dd343b4e6c5\n25ab2412-3b57-4afd-a219-20fc8ca6fe1e\ne7f332a3-5afc-4323-8502-ea4d497639a0\ncd46e79c-ad07-4db8-88e5-128a6c9a7cff\n35336563-3652-4939-8461-61623b93c9ce\n9f40822a-9bd4-452c-aef4-5b97e0956218\nbe35cb21-2b02-4735-9dc1-7fa9f6812278\nae51141b-35a6-4494-89b7-e459bbc4bee5\ndd916916-82e8-4a1d-9bad-e0be66503a7d\nb44a687e-379a-4664-9066-1a9d04996e52\n60dc55fe-741a-464c-860f-188acb56ab25\n5a7f38b3-048b-40bf-b950-f78cd1ee7333\n200c4b08-0cbf-4e34-ad02-0453288c8a3b\n1046545a-fe47-4ed7-a285-808443a39df8\n2e5c2760-8011-41cd-8cf5-2be65d054632\n69289329-c9d2-45c9-b70c-33a2da651532\n94993f66-9f38-419e-baf3-3aaeeb35c236\nbca4096c-0ce2-47b0-964f-f011b0509385\n08574ad7-d515-46d4-a685-130a120434a2\nd4a7e062-94f4-4e8e-ab25-093a0eb0442e\n84e94b51-b3d4-4742-abc9-6aa10c24593f\n105bdf3a-9f49-4114-8a3b-ad32e661898c\n58c67dc6-7e39-492c-b944-cbaddf83c9ee\n28a95607-67d0-493a-bc00-44bb54258639\nd001edc6-06e2-43e8-b177-ed483be279ec\n8c5a3210-d0bb-4926-9875-1fcd3e51df08\n1b6355fa-96c0-4197-b725-2123f45998e9\n4bbe5fd4-4df1-4870-9f1f-39514f94900c\n86ffc594-3c36-4a62-93f8-fdf6e5a92795\ncfbbdefe-ae90-4dca-ba86-e80010ba9748\ned4c44b1-eef2-48db-a4d8-8d791948e262\n5cec0d38-26f9-465a-9607-4dd9e7834f6b\n411a9fa4-8f67-4474-b309-619e7a21d49f\n0f21625d-0eca-4040-bbc1-777bde603bf7\n7ca6d954-309a-4189-8d2d-094a741673d9\na6baf9f9-e3d9-4535-b2f3-e42f959a15f1\nca5433fe-7cf1-42e7-a954-448bbb2e4e69\ne1810a9e-20f2-405f-9130-2b579c33a49d\nbad2d527-08f5-476e-b54d-e9f29fe19418\n55141fe9-2eb9-41e8-b977-f9fb82f3e7f9\ndce0afd8-27dc-469d-ad75-378ba451d81e\n6d343f0e-69a4-4ceb-ae1f-b13fd6576c3f\n3e75796c-da62-468a-9048-92d4228aa44b\n83a80806-20b5-4166-8cfa-b2cda9f75f27\ne98f6b8a-c2ec-4426-afbc-9ae097ec5141\ne652ad06-d339-4ca4-b8fb-3f63ab2ebb72\naca123e3-7e2a-41a0-835a-e4ceb4ad4541\n76090651-0804-445b-91db-09ff9d3659a2\n41053ae3-9e1c-4978-a288-9b0a548bb183\nabee7afe-bfe2-4dfc-93b2-cd234226b2d8\nf27c818c-c7ce-4965-8390-2d555f7e0067\n9b9a44bf-1267-4d8f-8d44-9796b471eef2\n83159a2a-31a4-4eb7-9885-9d6f5781339d\n66cf3ff4-23d3-40dd-b76d-ef1ad0876c91\ne4fec23f-818e-4343-b88c-e41d95ce7171\ndd57703d-ea00-4bfe-974e-4f4e174f6266\n2c0beedc-cda9-44f2-8e98-6b8f69d7cad7\n4402c5e9-e6d5-4b7b-99e7-0d09d9848dbe\n558ffa21-255a-4cdb-b2da-2a84ce1e921d\n14b4ee9f-8cc3-48ab-a9a9-6cec679516fb\ncf66f600-4d6e-40fd-b736-28612bb924f2\nd9ca891a-708e-4553-ad1e-012c0bb337bd\n446b3df9-d279-4201-a358-4e76b11ce00f\n0541adf3-6cee-41fb-b0cd-1740cd0a3dff\nbb525156-5fd0-483e-b058-0e17fbf8adc9\n51f60d6f-cf96-42ae-aa6b-8404b0c9be7e\nd02140ab-95ea-4814-9347-31b36bbae7cb\ndf290f5d-72c7-4bb4-97b0-0111e6eec4c7\n1f057743-d251-4fbb-8e0b-358e121e1dd6\n979225b5-3803-44d4-a177-389356bb23ce\n5938f51a-4ee5-443a-9915-6f1da5400e3c\na9c9c0ca-41f4-40cd-a9d7-e1ba9006dc2e\n1cfa6c73-7e6f-46de-b75b-c2a17f73b4cf\nfd535cd6-e71f-4ec4-9a65-ac7bbf4dc947\n5bd2827e-6319-4baa-957b-6740d3499a5f\n41d35b27-65c9-40f9-afd3-b5ebbf6951a1\nab41cb38-bf89-4fbe-b753-acadf89c3574\n89fa46a0-af1f-4f67-af34-ec60c2258940\n1da1da5b-4b59-4ac0-8fb1-7999e958219a\n43a2ca50-1d41-4134-ac04-804d4a4008ad\nb2cbd4bd-a654-4898-b5b4-a842d2435482\ndd9ca685-3fb1-4afe-971b-2b393bc7853d\n3570aae0-7c8d-4d60-b34f-4fb28343698a\n8900a035-29c4-43a5-9f00-9afdac200a3a\ne21208db-db0c-4eaf-946d-d5f5e2756412\nfcf28bef-3927-4cd7-8a14-e7a6dc0694ec\n097a3871-e034-4eaf-bb19-90074184f6c3\nb53e8915-6b4f-473f-b742-33c0d3ecf494\na2fbf844-18b4-434d-b9fb-8928de609ad0\n21ee2ca5-d351-4ccb-8077-91c2ab20171e\nce6cb25f-a2be-4094-9f27-39c49f5fc0b5\nfcac72ca-ce50-4b72-85e3-b959c7c1372d\n39d2efbf-cbf8-4e94-8694-f5137c6abd21\nec3b3821-eb8f-4876-80e2-47ec41816bdd\n69f2d8ed-5ee1-4432-accf-4b4de6f81f5c\n165dd329-ef41-47cd-a42a-0d2a8c9a362b\n78bbd4ed-9fb9-4813-8e51-7d4b92fe66f8\n8d17d002-6672-4ea5-ae69-eb239564bd07\nc07a25ef-3819-41e8-b304-1b3809aa499c\n3673689f-0830-4f45-b3ea-08000a8ffd29\n753a401f-78b3-447d-afe0-be7ae977d8cf\n90281c57-57de-4ee3-8753-621030bd3a87\n3c6df4fb-ee4e-4fa7-9fa0-db305472d3b6\n303d84f9-290d-48ff-99e4-123664bd587f\nb94905d0-0583-49ac-a2ff-7af4a5e86308\ne10c4bf2-ef71-43cf-87a0-d132e2b7ea02\nce3f8050-3041-45d5-b799-a0352cec66c3\necf0ea22-013d-4b26-91cf-01720d0e4040\nb6d1479b-aca6-4b29-9131-17f816005297\n1ffb2f7d-76b9-4eea-b9ce-117c15f0f52f\n03205caa-6305-47c7-b9d1-52498cc767d9\ne58a33d3-8208-4d01-b626-c6298acca573\n9be5064b-f80f-4285-824e-fa44faad1397\n0da37a56-7324-4119-91e0-f6f2ba7e5a2f\n49162071-fa72-41d9-9d6e-c682bb89ac41\n2ef890db-a4ae-4b60-9447-ff8acddf2c6a\nc91b6aaa-eeb7-4a82-b2a5-b5b58b11c469\n1f416def-d75e-43e6-8f08-04b0ad9b9e4e\ndfdeef09-8629-4934-b8b2-72b6af9d9adb\nc0aa6163-9c4a-4f89-952a-7f5bfc41ded3\ne6775856-8c4b-47bb-b9b4-3bd61e43be49\n92e1e40d-24da-4141-af87-be6af66d81f2\nfcf7e8c2-8331-4927-aeb9-913fe3799a9d\n037ff6e5-2e16-430d-a3f7-71873d959bcd\n2de8a198-04a1-4266-b86b-b18e6ff34f71\nbb8e3346-0b86-4049-905b-05f608637ab6\n5793a712-90f0-4676-86cf-be3313402ee8\n9a5b9683-1403-4454-9a54-926b61d5b854\n3b3e7531-2552-463b-bfe7-9adffec1a6bf\n42b6aa2f-0df2-45aa-9711-eed930765e10\n9d343f4d-ef83-4c46-afeb-80b3034373e0\n98dda47b-a3a3-40f5-8d83-63de8b631aa2\n607b1e12-49a5-4fa6-b4b4-c6ce787dd490\n9235da31-ecdf-44a4-8504-3ff9b5898999\nd0340295-b45c-4f41-a38b-d21eea7a7554\n229383cb-1beb-4628-a353-6d630e7833f8\n8c9331cf-cbf7-4bbe-a857-2c306ab6e5ab\n13336006-5cb9-4489-a263-9c5b505ba0be\n81b1036c-7cfa-45b3-bee7-de3de2d1159b\n473c416d-a978-434c-9dc6-198a7407d675\n79b456ec-47aa-4a0d-b887-6095a769a0b4\n813e27d2-0ee8-4208-9a30-a2d592b943e2\n7d6ced89-3763-439e-96cb-aa3e3a857242\na828b4a1-6a1f-4a34-a912-0154842b7b0c\n32320dfe-ef80-4a9f-bac3-c3cd7a33942d\n3e17ae00-1c66-4974-8802-b131fc97a767\nf52ffe39-80b1-4428-a31d-f86661c3b3ce\n124e42e9-56c5-4efe-828f-0852857828d4\n38e99367-76a5-4a2c-9248-042c8babf7c7\nf21a46d0-3fb2-41f0-b923-a770a7416535\n8978fa8d-d147-4887-a1b1-f63b1ce1f132\naa96f53d-3557-4ee9-bde2-1dc6672c5377\n6ce00c51-f173-4b9a-a686-8449e4888f9b\nb9bdde06-ee40-40d7-926b-7dc2c46b13dc\nf7267294-09f8-4f75-a10d-7a8313ea1942\nd88af48a-4b2a-45df-9068-b7056d73f17d\nb5830730-96a2-4903-bab6-296824b19599\n4100dc9e-15dc-4807-bccd-706c0dd0977b\ne1915e5a-29c4-439a-84e6-a7485e52c7be\n3a2c8047-d3aa-4aaf-872c-484669831cd9\n85236606-5116-4f2d-9eaf-b79b6620179a\nfd08a5e4-20ff-44ac-a03b-50f1ec3fa0dc\n92cd9917-d678-4925-ba23-6495dfdf7459\ne77abd81-7961-4c8e-99d0-46f4ea9eef68\n377e4bfa-1a8b-4be1-a28a-664589114aec\n109c378d-87f3-4a61-af2a-5959e1556d6c\n55a7a7d3-375f-4856-b5f6-061ffc5f2875\n82bb5d57-92f1-4dbe-b04e-150629020cb0\ne43b9bf5-722a-4592-b620-606b8fa5ad6f\n28510290-f536-4623-9deb-11922ee71650\n081f5b57-b51f-4ebc-b009-dc9871c551d4\nd78d9b26-5278-4014-9cc3-8ec0d75e9e4c\n5cf42c53-efbc-40ee-ac54-b934dea6615e\n5bb7353e-80d5-4831-a408-4e6f026cb0ff\n775238e5-d5b4-4663-919c-f1c2195ab535\n59f77615-236f-4ef1-b022-b046ffd95b8d\n9fc7bb62-a61b-4009-9015-b23dcc931d7e\n186756bc-23f5-44d3-bc74-1f8c414693e7\n81ab5bef-a745-4d25-8aed-01f00631fce2\n2184b0f2-0827-421c-b8e9-1e00873bd523\n61927cb7-739c-4ad1-b772-37f53a6fe742\n064f302c-0152-454f-8c31-1747195dcea0\n42dbd274-ac13-424e-ba7d-fb9fc7c0e796\n04ac55a3-0af8-447e-b2a0-938f8f1380ac\n6da678dd-409a-4cc2-9bbb-93dbed66694b\n74cd214f-aab2-46a1-a0c7-4359423f90ad\n7b37bfdd-104c-45e6-8bf2-a34f060eea6d\na8111d04-a370-4e0d-80df-1703889a8cb7\n3cfc8217-8e45-40fb-85a6-c968adff07a0\ne352362d-7794-4751-b365-158f7bb50e4f\n65b262a6-c073-4b6d-99c5-8f6d99209e4b\ndab3c2e2-531f-453e-b488-aed2d809a7d2\n6fcaa51b-ec3f-4eec-82a3-3510733950b9\n74b4ec2a-58b4-4867-a9b2-c7a39a770c43\n36d92403-262a-4055-960d-5c268ae175ec\n2eaf4e2b-cba4-48b3-8680-29d9e1038ca4\n06be0e4d-6e96-48d2-b699-154d5848b9b0\necc7b609-0565-4345-9a49-c2ecc5ebef81\n859d900f-965a-4473-a7c6-312389c4dfc0\n6f3614f3-bc77-497d-9f7b-ae37cc4724b4\n349e7096-ac9d-4b66-a08a-de574500544c\n64379d8e-2d58-49d3-a5ab-f9fc1c1390a0\n10f5be7c-022e-4b81-acf4-ca9250c0ca7e\n3e4f26b8-d080-4aac-89e1-89ad0647bf95\nf974b5ac-e197-4d19-b80b-fa406e830910\n01876d33-ae22-4e21-a463-b5f985912698\naf28c2ce-29c8-4179-8b04-e1d2bf8c99ee\n6114517c-6ecf-4084-8270-8c8545495bc4\n2fdda7a5-8b77-4f62-9920-c4f522c3cbb8\n0541e41a-5828-46e2-9f8d-db38aa9742d0\ne6c853b3-d52b-49ba-9b4d-6ad73d348b06\nac1a9267-3de1-4ea1-8133-0f2a31104b53\n5692bd81-5a86-4966-a3b2-99e894e27a14\nfe33b91f-276b-4acb-8e07-9b028cd97806\n6fdb9b23-2a17-412f-bb7f-277e8b846c93\n76710bb1-d6fc-4c00-be92-09c74fe881f5\n20489fa4-c648-4d13-b9b2-7f570a774ac0\n60b02d0f-f74b-40d4-bfa1-af10a4ec94fc\nfbf6d1f5-eb6e-479f-82c7-399ff295df77\n0db0bdbf-1045-477b-a9e1-bfbdcafda00a\na222986a-afd3-4c9b-a5fd-4b4bca6f834a\n64ad5648-afb7-42d7-b774-8ccf2b064292\n4a85bf2c-d631-4a05-ab26-915f816ce1f7\na0053019-577e-4f36-8b5e-7b77ae6e2c6c\n9b0f82e9-531f-4381-9e78-6ab734a69b4c\n62e8135d-d751-436a-af51-9ee177f373af\n71aeb9b3-98cf-4831-9f3e-0b4b2fb79509\ne38949a3-6d27-475b-ac58-4ff3fa84895d\n9f466c87-faa4-4d2e-abac-b457724932c4\nbe3dc291-174c-42ba-854a-d7ce7df5ff98\n2b996dcb-e410-4892-8e7c-25e4851c1730\n831dcf3e-d216-4eba-bb7d-d52a33c25777\n09c2a672-b256-4c9e-9790-f2dfd7e80d4f\n81d8f38d-46e0-4a82-a7c4-b1298f95c1c2\ncf554890-543e-4429-b5ed-97d4caa3cb88\nad2b8f37-afed-4b74-8fe2-e6b1e163bbb0\nd4dc66b8-4f7d-43d6-b19a-75e60d0ff807\nd8dc5639-58e3-4beb-be9b-440f911d9fcf\n34006d45-bbbc-40ef-89a8-c987f04ca110\nc2b245cf-bfa4-4176-9cfe-5c4aebce549c\n5ef4abe1-f90d-4a5c-a117-178b0eeeb1dc\n44e99b4b-17c6-4983-b366-54d7d0db99dd\nbd2c3e56-aadd-48f2-b89a-150eead2b075\n9058842a-13eb-4509-9171-23609f30770b\n67c9b2ea-ef1c-434a-bb81-620386e89291\n80528a27-4827-45c6-a993-3c027aff7f6c\n1933454e-13e3-4892-be79-2a2cc76c2503\ndce6ab70-b817-43cb-b15c-6bf92878b7d7\nf71b737e-c47a-48fd-b2ff-94b55f4affb6\n3de20ae3-0ead-4755-bc07-d48839140b3e\n5a494488-719c-4916-9565-c33265bf2524\n8a52270f-25a1-4bc8-aecb-0bfd7555ff87\nd55401ea-f2f0-459a-a926-bd4676a6790d\n6d57658d-8821-42f9-9961-42d433c98b40\n4b14ed99-1a8a-4ca1-8b76-6f1ec3c2940a\nde10a00b-07b3-43da-9263-3e1a1c6edc39\n6032959c-f8c9-4490-b3a4-8ea8dd6e317b\n6f2f621e-2dd9-41f9-afca-3bcb1e15258d\n78199028-d6c3-49b5-ba62-697da9b979f2\n5211bd55-112e-4d95-8355-ef416fb7e93e\ndb08aa71-f042-4813-b6a7-8bd3f796be10\n293ca7a7-b2ba-4b21-908c-7978e5221f72\n73aa7701-7a16-42e4-8236-81cf4cbaa535\n35e52889-59db-4ff0-b8f8-7f80c3338e36\n6895aee4-9263-40fc-ba26-82e59409512f\n17d02af5-d5f6-4d10-9021-468f9fef472b\n8a39d0ca-244f-4fb3-bf9e-b5fd3a1378f5\ne0bcd5b0-689a-4066-a18a-28638988569c\nacc806e4-eeed-4618-8902-78898cb31160\n4662b335-9701-4633-9bcf-1059f827e10c\nce5debe9-16ae-45d9-8530-33c559127a1d\nc62acfaa-54dd-4b98-a1d1-f418ee815f60\nbbdc8e39-0200-4cd5-9fe1-01e54e75aad7\nbe73d67d-71cc-4c95-977f-a833962ab05a\nc28812f4-209e-430f-9621-4faae4a53ae8\n10aca6b4-0e0d-4be2-8271-670f987689ed\n890b2518-d952-49e6-af48-35da867f1a88\n53079567-2ebc-459a-9d67-40cd8a6e2a66\nd3245d52-8735-4028-8785-6ee31d08b94b\n7a92fd51-9546-4d1e-9ee6-c1d581f3a444\n48efc6ad-1473-434c-a577-bdd2d775384f\n664d692c-6a35-48da-a45b-83756e95bae2\nfb5649b5-25ba-4f0d-bffb-d8550a7eb8b7\n9edf5c4d-14b3-44a7-b7d3-f42954b9202b\na85fc649-839f-40b5-ac60-930bec36bf4d\nf1315a4e-98c8-489c-81a5-76fbf19d6811\n9c2609ae-8c8c-4601-93df-23ea9b3996a5\n9944b9ac-8c5b-46a9-bc4b-81badf9003c7\na562feab-87ad-4474-9c5c-848a5d1ef3c0\nc4e1b123-6ab2-414a-917a-c444bf6f2422\nfd6c2785-b41c-4b85-9bf5-218af3aa16f8\n894a616b-d743-4102-adc2-32c69301b621\n85dc122d-4e63-45d5-979e-a3d3f0e77c39\n9f3f4cc0-9523-4948-bc62-0b1e7ecdb7a4\nd23a421a-3222-48a1-848a-a6ee19319622\n33608a1c-8061-4e90-bf7e-e1a6106e3676\n7332edcb-5a08-4e7c-a96b-beba33e90a13\nf2deadd0-5345-437c-84a3-9f2d95907260\ncc0a64d7-e324-4fcd-82d3-17931e88da09\n49427f01-6ded-4540-9d19-a4b5c5ff1c09\n41ea0198-1b64-49e0-820b-0803624b4209\nc8b7c169-246c-42b6-83b6-b2c2b2f6542f\nb4b712e1-2de3-49a6-8d1d-d94d2236c6b4\na72d3526-5713-423b-8693-d305523dad31\nb9500a61-15a7-4861-9d55-dd58f1c5e28b\nba0f7fd2-09bd-4565-9693-315e545269c2\n348ed272-a074-41ae-a0f7-2364c8a0d346\n81f5630d-e338-42d0-b73c-ede91be53521\nd13ad580-2303-4171-8ca6-8c4ecc9f43ec\n22217688-dfba-4d59-a851-32e7143a3270\nf5aace29-dcc1-48a7-ae0d-65f76633fc61\n376e9815-912b-4c0d-9d93-450ec2205b84\n9a284abf-6fa9-4b81-8192-f2fb23ddf064\n79063c69-45ea-441e-86d6-bfedc1763e16\n5638a276-24f8-4b1f-9398-0368d7d354a7\nead977a8-cfeb-46d9-9581-7578d857819d\n8be0ae52-964c-4ad3-980d-44318749eedf\n97c1bc55-4432-4e75-8226-2ce85fdd2f57\nba403c98-993c-44f1-a251-8ae5dd75a53e\n13bab4f8-16a0-49dc-a0fc-55faaf7bf6a9\nf56fef6e-80d9-496a-85e7-ad34fe5bdd97\nee8783fd-efd6-49cc-b055-26253cc7eff6\n394d2c0c-0cbe-4fbc-9fff-e965dd2394be\n72ad99d7-1b17-44c5-93aa-74285d176f1a\nd26b1374-d9b9-4220-9e80-f7cb8614b1de\n2585468d-7afc-405d-8a16-3a02c0f4d393\nf59a2970-82cb-4426-a91d-883adf6941f4\na7897e95-ef5c-4db5-bd23-712f481a74cc\n4b53e4f4-aa85-4237-9403-db9bd0aca729\n28ff49a5-af34-4906-824a-ed8d9f3b28c9\nfe6a15c6-d64e-45cd-b799-467dc419d487\nceb5c746-de50-4745-8889-b1425b0e853f\n63e077d0-6c02-4769-88a3-7663e548db15\n74be6167-f873-402b-a169-83f50a8441e9\naa9e5710-8036-46e4-8f0c-1144847457d0\n228d83bf-0ac6-423e-b790-f51936bf1b77\n883070fc-e83f-4546-9592-1ccb5fcdc7bd\nbf860c7f-37fe-4daf-88b5-2fbbec104a26\n3000b3f0-a859-4de5-b4e0-be9317e2a41e\n15f3f750-c2d0-4d0c-8448-9a79b68697e3\n3d03dc27-39bd-4528-b229-06d0a800d0e4\n29872b39-3f63-4bf8-8733-daf9cb08341f\n44a21730-8fa4-4e3f-afae-b840b01167e4\nee15d4e7-01e6-4153-894a-565943697cec\n1247b9a6-5f04-4faf-aad9-fc2fe7e2fd3f\ne2cf4527-362e-457f-9566-f72b427e5aeb\n9e2e2293-6952-4a9a-8745-b049c6051ed4\n4f47b7ec-28f1-49ae-afdc-7d3b0acf8f9a\n240bd6f6-c54d-402a-a56a-80ced9819d1f\n5554a4f9-6279-4a05-bd4f-da8903799728\ncaa185e6-5ce2-4af7-b299-9a3d6dd1b55c\n5b16290c-c83c-4c85-8d5f-bcf7e7aabdac\nc90cfe02-efa4-4941-8bc0-08d3661a5c5f\n015ed055-c983-47a6-9c26-2413ba786968\nf440d3c9-548c-4903-802d-131f15f7cd17\ncc3d8be0-71f9-43c6-830a-1d7f87364ba1\n1e2a69cf-bea7-4784-8f00-18187d5056c3\nce81e56d-7006-4201-b163-e26aa7e56903\n7761c906-c99c-4b9a-b7ad-b79ba4e37cc0\n8019ae8a-1e68-49e2-b381-09095c038c67\naaa437a6-5cf8-4b93-84e5-2670583b4f3f\n14919249-b726-45fe-8ea4-53da410ba1b7\n62f06d89-d5bf-49f8-9083-de42bf09b839\nff70bd42-42a4-469c-970a-bb30146714d4\nb090a3f8-1a0c-4d0f-ad6a-0fd2da5be081\ne6e7991b-18bd-47e0-abdc-e9c242bc62f6\n5174a30d-240c-435b-93c8-159190e58d9f\nffd98daa-7123-46f9-8b4e-cfa17c02e35a\n682cfdea-995b-4922-898f-a76478d09a0e\na037746f-77fa-4ae3-b0d2-e8b73a0a8c18\nfbadd14f-49c1-44a7-989c-d5830fb059c3\n550b935b-7894-4d71-aea6-41a9c42e15a8\na2b893ad-0b27-4324-9cd0-0636ac9b2a0b\n61dcc8d9-5e8b-4ec8-b5db-13faf3b34344\nf9514883-0ec4-425f-aaac-9bc4f407cee4\n77ea9cc9-3e24-451e-8b80-01593cc46fcd\n40924fc8-f493-4546-8597-f536411f8e43\n465bf32e-f70f-489e-93a2-a89ef1f8813c\nbd87fcf8-ef01-453b-a34f-facc229fa665\ncac50ce4-ae13-43a3-bf01-1ea12ba36ca8\nde695e13-27c0-4489-8997-8acf8698dad9\nf7683875-c360-403c-83ce-bf4944769fd3\n7a342626-3611-4041-bd2c-bfa6d670a5d6\n209e21f7-229a-4bb3-a8f3-369ad5304a89\n7802cae1-b368-4921-b0ea-4dc14f4a464c\n27cca73e-05c8-4517-8a8d-4794ee9b6f0b\n2a57146e-dcb3-40fd-8236-d634c1957e0f\nf464d519-b3a1-4e7b-8578-7bd7bf3f2bda\n51254195-4485-4e52-81ec-9eef7d9e1d15\nbe76f758-89f5-4756-907b-5ac63ed8fcea\n9b982b00-4f5d-4097-916a-ce2e053e8cd3\ne77c2042-21ab-42c0-85a0-625e7068e585\nff947639-d0dd-4736-9c4d-eaeb58bde965\n46ec0a87-f94e-48f9-b0bb-b7db01734b79\nd1aa0b74-4e13-4a96-980f-65feefdf516c\n93e6e282-9950-4865-b2c9-17724ffd705f\na6a093a4-f00a-4fb8-a56d-cd0112ce74e6\nd61a150e-b8c5-41f3-9811-8f268de2d7af\nebae752a-256f-4c0b-8c16-2a257fa70ce6\ne1ebc11e-f688-4d99-bcd7-6bc60d2c3c33\n200f078e-3555-479c-9b3b-b09c17b83290\n934df158-3f5b-4814-8039-4135c41c8ee7\n82bb7011-c17e-4d10-bd3f-1dbed19bd790\n247d18fc-3385-4aca-ba44-2c669a0f00d8\nff1f386c-7cb1-468d-a795-72e9f7ff5950\n5d6ff115-6bcd-45c4-bc0c-60128bb043d4\n20b649de-89e9-4834-be45-bff15aba7a49\n130f7491-e826-444d-ba31-66a4d4f8d559\n21d10e8a-7590-4d92-83d4-41c94a845914\n45560053-0263-4ea8-9c51-f213e972ea3f\nd8662123-89b0-4c79-b5af-73925ff903f0\n7d82760b-fec9-4930-b97b-95a8f74f653c\n0d41c6fc-6d3d-4c8b-acc7-a499f35da7e3\nd1e48005-6563-4f39-bbda-16d19807dc46\n3731e30e-688f-437b-876d-4e357a807431\n1733c104-8637-4a90-ab9b-8cde05ad5956\nad5d74e5-9d26-42bc-9a76-342f94b27e86\n6c5e484b-0ba9-4a60-a9e3-987afbe26ab6\n8c4e1ffc-220a-44fe-baf8-025d6766f9e5\n5bc8c748-6293-4e4d-a8a9-d86caca1fdd9\n96d5509f-4cbc-4280-871e-b60fd560ef06\n71dc78bd-3cb1-4389-98f6-cd13d0ef877a\n38515623-a955-487a-9f11-ce6e7de2ebbc\nb0163477-980d-47b6-bc8b-56cb3372dde5\ndeabd01d-a103-4970-a707-0c169877441c\naa510596-12d8-4b77-8ccd-41afe6bd1ea9\n82a8d509-b910-46d6-a65a-e65d4672e89d\nb74a102d-b140-425e-b644-c713ee0b6ffe\n7c109ada-f7fe-4109-8f11-5626d019b247\nd36a9154-f9b9-4e2a-8fb0-2e9b24512efd\n1aa9bbff-8935-4518-b300-2eab5bb677fd\naf9cab67-7c06-46ac-83f2-5499eb7419d0\nbd841524-d0a5-431e-b8e1-a0db1e1174c9\n051e2b3d-988d-4de4-8e76-12bd2067aae8\n41f2d332-ef2e-436c-bdc8-645840c98b1e\n0fa5bd76-cacf-4c69-a5e1-ee200672bb68\n76b65dfc-8991-4c66-80fa-86dcd5089a03\n7ac8a9ed-2937-48e7-9b0f-6f87155bc36d\n1fa09dab-a038-4bfe-97b0-3e43bb8ad0bd\n4f9fb2dd-3025-47d8-ba33-979584935ae5\n2ec598b7-56f5-43ae-a3e6-2b0e74951424\n2158e9a9-4219-4921-8c64-12b51f52be75\nc82e569e-cfbb-4dc3-b395-24b41e09b799\n6c594b7e-0740-4e18-b599-dd1698a3a454\n5a77dfd7-7283-43ee-a5f5-b1d09dc4679c\n4a0d349e-057a-4efc-864a-fd4d189b14b2\nd608660f-18bd-4513-9963-42a42ac4437c\nf223d20d-c7df-43ea-8fbe-9d1aa0f14893\nd51444c9-aaf5-4a63-85be-f21818bd7f96\n123040e1-4801-412a-b4a2-97d7e5556b46\nf60498d5-1340-44ab-9005-130c6faf5df1\n8408831f-6633-42e6-b5c3-d83cf844df08\ne8ce2dea-cf66-4a12-b0d0-258edc79d798\n948d7f59-ed3c-40af-898c-b3c126990b61\n5b766a1c-4bce-4eba-8920-fd88f03a88c1\n4b3641d1-5907-4053-9cf3-fb50fc09673b\n10db361e-ab46-4084-a38e-54406729cd69\n61860fdc-d0f9-4ec2-91ec-333d8cc7a8dd\ne71e28ef-4d2e-46bf-8feb-1fe4553b5c68\n244f120b-bae3-439a-81af-1c4f708c169a\ne7ae5a46-4267-4878-b660-ae2b3fb3c93d\nd95bc523-2cac-4e1a-831a-d041bbf60210\nf7ed471a-ce3a-43ce-87ad-eefcbefcff29\nf6a40650-1d85-4a8b-85de-5904e1ebd3c2\n518ef8d7-5913-4abe-86b4-eb7cd6d99af1\ndeff0207-276d-45a6-8067-119071baa785\ncb71c3e1-c76b-416c-9ec1-70bbaa13bb70\n97145c18-55c2-4b8d-81f4-2702e608e4c7\n5084d946-7f08-4f78-bffb-e91361f6c303\n2b9089f9-0230-469b-b33e-1e1a39e6859d\ned914946-60c0-4e80-b44d-5d59e7276ba9\nf3efc611-9959-4059-bc30-59ffb122c0fa\n60ce3c49-a96d-4070-927f-89aba23c87ed\n5e76b1ab-f613-4be3-8b54-71eee66e05cf\n10746c05-0854-4949-a60a-5473290f638a\n35324543-f396-44df-808b-6c309cf118e7\nc30334a8-2188-46c9-8d1a-37e2432df474\nbdbc3e62-bb4c-408f-a2a4-1b2f9936e2c1\nf59414da-231c-4552-b264-f231af661cdb\n524a8c88-8bbf-4d12-9923-811cb8457c76\ne9e580d8-64bb-4332-ae06-2dcca9b6dbdd\n52dd0c59-e77e-410b-a340-f0d80c13fae4\n25cb35d1-1dc9-4af1-b364-28d85cd1349a\n80c5d75a-be37-418a-9c07-9e354e43b7f0\ncc5af3d2-8990-4bf8-b7f4-da42d4060850\n2642d40c-af37-446c-801f-9487587b338a\n5e7bb432-e8cc-4237-804f-0928753e4005\n47425baa-f6a5-4b0e-9333-5be28772a46a\n3829a36b-bf39-49db-9d36-5b9cd535e03b\n0f737ada-1923-4231-9c9e-95e153f1692c\n6ce8cf23-2ae1-4a91-b654-96bd11cb737d\n14568371-44f0-4b81-835f-8441f639a9d2\n56d7e1f4-4f96-436c-b129-fd772e8ddf11\nda589302-3d95-4604-8207-b004bed06de3\n65383772-b36b-4664-a5a1-f577508678e2\n033c5fb8-6a41-4a2a-b44c-a257f7df9123\naba264c9-6792-4957-a5d5-12f12af1d642\nbf9d6d5a-9696-4a1a-a841-5f182dc0d27d\nbe6aa84f-578b-4350-a61b-39abed36442f\n6e457260-ca0d-4307-b778-585eb1ddd9fb\n1b166c8f-6142-421c-8e6c-7614c3b02bd9\n15a55e11-39ff-4e53-bdac-71c245b207c2\n13ecbf87-dbed-40db-8b7f-f5680f176873\n416a115b-af88-47d3-8ff2-d23587319861\ned753463-ea58-4bb6-8e0e-af2404d21d8e\ncc9026b5-8a79-4ba6-866a-45c1a0cff80c\n6bcd71b3-5656-42b4-85a7-184a1ec6910c\n2dff9994-59df-44bb-9e7b-e25f0b3019f6\n14b9eb41-8ac8-4430-aeaa-f6fc6fae5698\n5e2ca4af-8956-4d2b-9ae2-5d14c1894a34\nfffa9ae5-c75c-4a5d-bfb1-f247c16e145f\n59b9b826-809c-45c6-b344-69637f7be42b\ncd37da35-61c8-495a-bc83-6355b363e47c\nbca18f8f-5209-46f4-b325-5d0c1b2e4ee7\n94f241b8-ec2a-43bc-8c83-a840914afdb7\nb8fd3126-30db-4acb-ad06-c9f229310445\n838f11e1-3e4c-421a-8178-935f30d7173d\n4eab6f39-18ab-4169-8d6c-4973b99faf96\nd5e373ff-c480-488c-ab10-759c8c059d40\n2fe61aba-f91a-46e5-b416-16af080cc2cb\nbe219544-669b-4ad2-a089-ec6acad52b1e\n057af73b-e6ce-4f4a-8833-0b22f51415fd\n054c1776-4108-494e-a1d3-febc48856308\nf556e9cb-5083-40e1-9ab9-b2fb46454fff\n8522cade-a6c2-47ef-a1ed-658768a4e9cc\nbbc7f256-b9df-4f5b-b184-47c50e09df2b\n6e77b06b-92cb-4f57-8671-a989be961752\n3ed04e82-a730-41b7-b362-a0bb0c52611a\n91ab508f-c084-4ce3-b8a3-a2c52ad08eb3\nf4938911-05c1-4321-8834-05663ab45cf7\n379eb491-9106-4460-bcae-aeba9df4efd0\n85bca392-f008-405d-9c2b-b9d45b1d734c\n5a8650d6-fadf-4fe1-8875-a194e1971fd0\nf0aae377-6f3b-4e2d-b20d-2be432d0c523\n3d1417fc-7617-4d1b-8435-37f30819f37a\n09ec84b4-ae91-4b79-a372-a747e2fb8c0c\n3226125a-ead5-427c-a4b4-fe66959596f7\n8b81c539-1f63-486f-8b2b-b07c4c3071d9\n0509b146-ad5c-4726-b047-5a51ed9577e3\n5f70b6c3-4444-46a1-abc2-24e642b81e8c\ndae49540-e72c-4146-95e6-8aec05df76d6\nf95e11e8-afcf-4c71-a2f0-3076ec5a16df\nbedf590a-9ae8-4f57-adee-e3a7b32f2b50\n66025608-e302-4229-bdd3-452eb43ff7fe\n8b38ff96-10bd-47fe-ad90-0620f15b29e5\nb1cbd4c8-81f2-4057-b4b1-13d38b8f3c6f\nb39b3a2d-0397-4157-af8b-4bd6dc383f0c\nacc06a52-3d52-4b43-b69e-6d648bf86609\na98b4a8a-da81-42f7-a122-4ab73b958488\n03b63869-7a9e-48f0-bca1-49914fa99d71\n4fafbe43-4795-4333-9ca1-9c3fdd500711\nfc666b7b-1700-4973-9850-e098b48a2ec4\nffc5692c-2651-48fb-ad17-6c91ec16a06e\n65706b6c-8476-474b-b139-b5b018a5058a\n0ebd44a8-4cfa-4e67-9e94-bc0f8cf77df6\n0094fb40-fab9-4a4e-bb72-3049214f7d0f\n95982a3a-22b3-4a80-867b-d2210223d2b1\n28898b15-4923-4bb4-a48e-c2b33d1c15ba\nd3f730e4-bf94-4d67-b624-a4309ab0e2e5\n276bc1e9-daf1-4d87-9dc5-f8f9379217e0\nf581a969-1564-4916-af39-4144aa609438\nad86e72a-6334-41fe-88a7-b533c79a56a3\ncd10d253-c123-41c3-9c2a-5e78484e692e\n7a207de7-51f5-4a66-97e0-0158fab3fd66\na245694f-6165-4b30-bca5-c1e4b7fbfd4a\n41540b5a-73ed-478b-af48-f7a32db2a92b\n9d667588-0294-4569-9ab9-c2f78c79f881\n8147182a-adbc-4d06-85e5-61eb489ed9c3\n6ae290e2-3a8d-49ac-a306-250e1dedf5bf\nbbcceb7a-6342-4905-a609-f672a8c0f32e\ncd75b862-7141-4b6e-86ed-8cfb007fb835\n9991acf9-7192-4120-b8fe-8b5bb0006318\nf989979b-18f9-48cd-8ece-e82378a31f39\n8cf63bba-3158-4773-b54b-486a3f769776\n52dcc926-b254-4237-b07f-5dc97e194e8a\n371010d0-7532-4459-a130-7887b1b13a2d\nb7825009-bcf2-4f57-9a3f-0bf645a4b5d6\nac27ee8c-636b-48c3-8398-08e34d765357\nb5d9c6f2-1f86-48db-b3d6-3e151bbe9ec6\n02449e6d-cb7e-403e-9fd3-01aaf9bc474c\n4f8a5002-e476-4673-9d96-028d6e493492\n61ff3e50-cfc5-4151-ab60-8d5b6c15e39e\n1a491f5d-6511-4f0a-88ab-fab2571a77fc\nbd0d4fc2-cc7e-4127-8c1d-c035d50f15ca\n5877d51f-3290-4fd9-ba21-0bd3fd93e282\n4af8ac4e-6852-4cc0-991b-597dd1ef40b3\n941d0dc1-4159-4fe7-8697-87b636120741\ncec21467-0c91-4999-adbc-af169211d19a\n1d30f627-9d39-4320-92c4-5bf2694a86b1\n3ea01507-a2be-4d9e-a1c9-6f0b76d1affc\n16c2e2e4-8f72-44f2-a191-00b41d746fae\n7e259458-94d3-4e89-a1f9-fcef0ba830ff\n9018ccb9-d113-4ba0-8908-a1949168e3db\n6e9031e1-f0e2-4b56-a4ee-fca3949cfff7\n03e04090-cedd-40f9-ac15-5381c5d45c95\ne17f654c-3f1e-45fb-9eb1-483f6878e798\n1ca1528a-44c9-45d5-b42e-fc0c1fe7b243\n5087c7a6-a907-4393-992e-7e7b1d2e525b\neb14db6e-22a6-4180-9fc3-d059d3e82fb1\nccd1233b-a1f6-45e6-a0c3-a246abe511ec\nf22eca95-2556-44e7-8352-6678a25a6e76\n76df78f0-927e-4f54-90a2-a7ad56e32822\n4c3f2660-0137-455c-858b-85c503bd2f24\nc9c202c9-d220-4194-8869-c238b188d685\nf9ecbef1-13a6-462f-a258-94858aac6b4d\nc3e1ce8f-b2ad-43d7-a5cc-e2c43b62ded9\n91221a28-310a-4c7d-8eb5-0d4a26e7b5e4\nada1ef7d-a246-459e-8ad6-883f6f07417a\n8b607925-bc95-4cee-b8a5-e6403ef4e01e\n0cb5379a-1d2a-4d4a-abfc-f04dd56a88f7\n89ffba29-b558-4cad-8ed0-43d53b486978\n4f11b312-5def-458c-8619-d1096f1afc47\ne7ce5172-d22a-48f1-b649-8b3ea1ad2223\n8d40c67f-3d9c-4591-86aa-c18383415700\nc4317fc8-eafd-4415-8ed5-eb8bb73c49c2\n274a4f44-d341-4796-b0db-2a26a1337f59\n62ea7533-9ad9-403b-8d2f-ed86b7424d2f\n66987b2a-be43-44b7-9eb7-4c6b40c8fa22\n8feba2be-3919-4aa2-ba9a-9c272d4494e7\n8738e2d3-bc8d-439b-a40a-743e357f4f50\nf4018fde-e384-41c9-bc55-df33d4b118be\n6f0f7bbb-ea4a-4ce1-80de-583bd3aea158\n4548c602-9329-4242-ad7f-74921d5d5dcd\nb103aca3-9047-4721-a71e-ea254593d94a\ne7e1ba09-50ab-454a-b8c4-60f6a4278687\ne19f0411-e3c1-44d7-80ca-617bdd0cbce3\n19de2cf2-d945-4283-baaa-49395cfd52bf\ne1da6be0-97f2-47b7-abc8-8c9c3a7f1771\n73aad37c-b21d-401e-97bc-3ba49cb87a94\nfa6811c8-a651-44f6-b3ec-c363c6125b9a\ncbf36640-5599-4873-b2a1-4d3dffa49211\n89c59339-e9d1-47c8-a4e9-29c754f12baa\n1c47aef1-2843-49f1-bb90-efcd4ef697f1\n1ca0969a-7979-4aa0-b78a-00304e528bdf\n08b5007a-1c74-4e74-8ba1-1b48d21fa6fd\n8457e5be-5f90-412a-82a2-a36df6ba43bc\nb8bd866b-7e80-4982-9d70-e917d201190a\n23715667-3ad9-4c74-b5e0-780de938653c\ne70e07cc-4db0-4138-849e-a9fba1cf018d\n0bbf96b6-7bc9-4a76-a5ae-30ddaa2caa66\nf919418a-a67b-4f27-8355-77e9e7080b05\nb117b3a2-15fa-4a3e-9bfb-e49b9f88bc92\n08e42c52-45ff-4441-8bc7-c597cbee6777\nc7f7f167-fac9-475c-bc33-6dc7a19e1f11\nc049c473-705a-45c4-a772-666973ee5457\nf0db40ca-4710-4dcf-8ca3-e719984585e3\nbd9b4113-0ed8-4fed-aa67-0ace30654c53\n7abd9f14-a452-4485-a48a-eed1f1eec886\n3680b335-24d1-48ab-bc78-33f342b9b958\n7ce6efb4-e3b8-411c-a2ae-c8ca8029b442\nf5f39c76-b3cd-4768-bc42-93db10270769\n29467f9a-8017-42b0-9103-acbf441fda13\n9757c6d9-136c-4cf7-913e-562fdff10b68\n5684160d-19f9-4053-a0e6-3e2fd2c7c656\n32d77579-734d-4f97-a0b5-0edad18ae255\nc23fbba1-3f36-4b35-a5d5-acbd07a321a5\ndca7ab78-094e-47ff-a8a7-25593c39d9f4\nd6a34a39-0755-490c-a6ef-82387aed9825\n0344dbef-9449-4cd3-a9df-a2ef09de5fc7\n7a64311e-c759-428a-9eff-40ae48f3730b\n23cc9c74-b89b-4252-9c4e-88a07731cdfb\nf0cfad38-10cf-4767-8ce3-071fe1b0b5bb\n9ee91ff8-10f3-4b93-90f7-2ed8392355ca\n9516f7e0-77eb-4c82-b77c-273592ea951d\n6cd6a159-7048-45e9-aed4-feb2d369f2e7\nc0c55821-f6c7-4b1d-9365-c10d1cd5dd0f\nefd66fc9-b68d-4b2b-93b8-690dae7a02f1\n144a275f-90f3-4137-97fe-f8373a2a1e82\n421e2aef-3be9-48ec-a4b1-88e17225352c\ncc8b8f14-6e11-46f7-ab0f-f37e83386374\n99ed2395-8dcf-460e-b89a-1e16cfad9cd8\n3848cb37-4bb3-4f49-9f30-affc6fe2fe7e\n7509fb90-a6f9-43f5-9de5-1a997aa3d6fc\n20d2e5b2-aac9-473c-be78-f53b995fff9f\nbd1da523-7df5-45b7-a3d5-4188ca1b9d13\n397de842-4aa1-4b6c-91be-cf4b2bf72c2a\ndb8b7fb1-656a-4c69-b7e4-941543cfce52\n1855fcec-476d-4a10-8add-86d26bb0acaf\n5ed89e8a-48af-4b03-bec0-1d85a091630a\nb990bb13-cdb7-43a3-9815-136785b7709a\n6ff10f5a-d81f-4ed1-86bd-e7f87336fb46\n4f40a6e3-2eeb-4057-8ad8-dc84c1e7c71d\nf51fd564-d21d-488e-9dd7-c16b96d7ba83\nf846ac22-df8d-4941-8810-2cb6d9775540\n6591a61e-b7f2-47c0-a84b-3c3ced7b093b\n1bdd4fc1-ff89-4f12-8049-626a103cea3e\n137244c9-3e3f-48ab-bf17-863d63267297\n0684aa17-4f74-4711-a388-dff00c7b2315\n49f785fb-3598-481d-b6a6-663a1ce3a245\n685d9efb-667a-4c00-918d-e6aad06d2a74\n411c8e25-fcce-4615-890b-7f4b432ce015\n002efbf8-9883-4ada-9021-929bc7a97e37\nd38f2a69-02de-4b77-a396-293d16c9b6c6\nc8605040-a7d5-4498-9e00-46a8e08f141d\na0266456-7c40-40a3-9ade-3f830fecd69e\nb8da9c82-f6c2-443f-8a83-04733a5c5832\n68354f62-2cbc-4655-aacd-f40838c56f49\nd287ab61-45e6-4f02-a8fd-cfbc338d2f90\nf1d40854-a12c-4e57-bf97-0c887056dd1b\nd35fae15-a73e-4ab5-aa9b-b035eadd4031\nb8120a09-8306-49ed-b114-446fcffcf577\n5c532ea7-818a-4202-b96a-a293b10bcee7\n7c667027-80ca-45c0-a46b-98f3ab4df316\n0878c5aa-568c-4c68-9aaf-03c6f3a13e13\nf5450852-c81b-41b7-9dae-5b5c606cecf7\n90e05ce2-3318-479c-82ee-d5d1e16ce866\na52c48c6-68da-4144-96e7-f0b9f95724a5\nb73135c5-8aa4-47cf-ac6e-5ac293cf3911\n5b36b411-1d05-4157-84d5-cd6946fd15ce\n3e67993d-04f6-4747-a097-661bfe3297e1\n721aa955-bd24-4c5d-a5a4-d442ac8f1cce\n7962d756-e1d0-406c-ae11-60be2011daf1\n92fabcb5-4f23-47e1-995a-3229cee70723\n33fb8308-f13d-4b54-9de1-a27cbbf6e95d\nfd1403a7-1b79-4aaa-bbed-7f0ce3a46266\nefadd8d8-23a8-42a9-ac10-ea59a6dbb90b\n668b2902-bbb7-4a4e-82a3-84970471b3db\n69dfa58b-eedc-4b3c-8d9e-23aa70122157\n3315dd49-040c-4729-9dc0-f85c9dc429ce\nd655a040-ed06-43e5-9a32-2b72f1293112\n8a8c0053-d78e-460d-b9a0-0f4e419ddea4\na916b8da-1ffc-4d2f-bc21-66a810ebe1d2\nb0d6ee5c-0e25-4c20-a95c-d6d9744198cf\nde089f0e-4a4d-40a1-8705-26bd0ac62832\nbd7df68b-9fc4-4092-87df-8fb5000e0a77\n4708be9c-ae4a-422f-9587-f44acebe1adc\n832f7a27-9501-4f80-9dc9-b4903af6c490\nd5bdc806-ebc3-4b75-aad5-f7f5e94fc11a\n505be2dd-7852-4b9b-b381-7cf10ac20504\n9d97de53-b44d-4eb2-b725-7ef5d4d6d60d\n4cf69631-a8a2-42ae-af29-53502d143005\nbf4065ba-98ef-4a65-bdab-bc7e3a61bc43\n58fcd1a3-76d7-4c01-97a5-7dc200a59416\ne593942e-fe56-4ff4-9f01-31eaaea84012\n64fc17dc-2520-4c8b-9cf9-10f386b4b24f\n107e41da-1354-47d2-a8f5-fcd1311f3353\ncc50bad7-1d80-47fb-973f-27dde2f93641\n136c7d51-7dc7-4136-b2f0-77ea58af0b35\nd1be6950-d611-48e0-9666-b73cb4ac21cd\n43da5f81-0281-4c43-b9d8-edc1ac9845e8\n69005bc9-cf8b-4e68-a1e0-2fdc2c7556cd\n1a10e765-239a-496b-972c-8b70333b0e76\ndd9d85ac-be99-4517-9384-dca3a56d41c6\n60d85638-26b2-4d21-997b-7cfc36537948\n94990bba-d455-4491-9690-3513581de6a4\n093bb17f-bf84-479d-b456-1ff51c957321\nf6274550-4301-48c9-a213-8b42b81946af\n23161621-56b3-40b9-ba61-2d4c3dca102f\n038c58e0-adaa-4046-a909-46b01556b8c6\nf741bf54-3dd1-4ff4-8d2b-29c672579550\n1f442b5a-67fc-475c-ab71-e424f78c36b7\nd398e2fd-dcca-482f-9ee2-609279bbdd63\nd3e2c884-f823-4aef-8bf5-e86f04c4801e\ndeb99c41-dcdc-495b-b1df-eae3b23def88\n8b7178b7-6535-4680-8797-6ddbbce3dd62\nbd80f5ee-6c55-4738-8079-22a2b709da37\na20c0f51-3cd1-4f3b-91c1-a590ce6ada43\n819742f5-616a-490e-916f-1a4e3012c81b\nc34d3ab1-33b9-41e4-9251-ce68df9a681d\nde448aa9-91b0-49ef-80fa-bbb8a38eab64\nd7a871c4-122a-47b7-a35e-198a0166d5fa\n941471e4-9c5b-411b-8720-64884c2e6c8c\n4623e7f3-f950-42fb-85ca-a03da52b3c1a\n24d3542e-6f79-4315-9441-fbefc2c12e62\n610c2544-38b0-46aa-96e7-a2cda21092f6\n2e151f53-46cb-4b8e-9817-e04a8d0dc04e\n2af6f2fa-36c3-412b-8285-6d1f9551f02f\ne4a80706-dab3-481c-95d1-3fdc42a98435\n13b0705a-a3fb-4a01-a2b7-56ca8793ee2f\n592d781b-a232-48bf-ac8f-4faddc93bb58\n182f918d-cd19-4149-81da-9775a8e39894\n921d7970-fbf4-46a8-b62d-07d30c88aa73\n6a9acdcf-c206-4983-b14e-a7040b28650e\na91583fd-7c96-4fd9-a19f-c6270fd6c0e0\n42e94400-850c-411d-9e52-20fd3564ad91\n5d88fa5b-0174-46e0-be17-92fd3d51bad2\n19092a6f-25b5-42a4-b518-a2a3008d39c2\n04b452b9-eaa6-4aec-ac73-dabb18bbdd53\nb3f1a9cc-d7ac-466f-a376-19dcf0de9173\n4a17d75a-2584-44ea-81fa-7edf4030b27a\n00dd2647-3a5e-46f0-be6c-c45305928128\nba6af460-fc3d-43a4-8a41-8bb42a96b405\nc9e93467-824a-4ab0-bdd5-a9149f612852\n99de5da4-2c0c-45e3-a601-55f7c701dc1a\nfbe53c45-9511-486d-96ee-129573ebe699\naec69adf-607a-48be-a011-f7bf1b13b15b\n2e6eda0e-765e-498a-8dbb-212557b6bf07\ne646923a-9824-4a32-bd73-c68a46beee1c\n7a9bb71a-aaa0-42e3-bd53-fb7f768e9024\n2c26f100-9ed1-4b2b-97c2-2120dc5a7b95\n60e2f092-0b3e-41b8-9e40-3d29e36d8c8f\ne082bcb1-000f-4524-9e8e-b5f3dd1a109f\nc74802cd-1bf9-4be2-9d7f-236b46b8b846\nf6309c56-6e28-47ec-a630-fa517027b9ca\nc69f543e-c2c9-44ad-81f9-965c26643cb8\n8e62dc87-34cb-476d-b868-b2095a643c11\n72a78433-a4d5-4714-8aa1-eefe8d916c4d\naba6ba5e-46b4-4e6d-8aaa-18ae623356b5\nb8902e46-d16b-47b8-bae4-c06035a6d364\nf0165947-7eed-4350-b907-4a4fd1c9a11c\n8a4329f2-cc0b-4fc6-8a9c-1a177d6221ae\n6c4d70bd-c244-4e8c-9b6d-7fd893a0700a\n621d39ee-a95a-42d3-9a09-de029279307f\n80c0b7a4-b5e9-45c6-b411-11fa23020702\n673e9243-7a7d-4a67-9e07-088de7c2a273\n2c96f6b6-9ced-4661-b5f3-3cd56339cc5e\nd20db54d-4584-4846-b36b-1adae5d4353f\nead65307-5abc-42cb-aa43-e72b7825e8f3\n0526796a-6fdb-49b7-ab09-ef894643b95d\n11666264-93a9-425a-bd80-fa78992a39a7\n578ac0b5-41b8-417d-a670-5d40b46f22cf\n5c5f918a-96b4-431f-b26e-578539583970\n1265a5ae-b1ad-4e4a-a94c-c033beb552c6\n973c4daa-0f27-4974-b564-bec1c13a584f\n23f707de-2ce6-4062-b927-06e05507f0f4\n4c553c68-3a1f-4ac7-9ec9-6325111106e0\nad08220c-9d8b-41dd-a315-ffd8e29cdcbf\n7e9506cf-428f-4ba8-a91c-c6ea6ddcc7ff\n2fba51f8-014f-419d-9c7f-8532d7d7db60\n24a9c5c5-ee02-4cc8-9737-d63478f69da5\n9c1eb348-ce65-4362-86da-a17239ce0984\na5465eb0-2e1d-4897-8b77-7a5e7c827691\na9f0e8e6-cc4a-4ff8-affb-72b3af7c5c56\nb5e84b74-dcf6-460a-b638-11004c12c8cf\n66ed1462-3754-44d9-ab73-fbe73b344e07\n233886fa-43f0-4d59-8a64-d91ef853f5dd\n7845001d-eb24-43a3-b082-00169666c0bc\n85a7750b-9e56-4ab6-97c2-de4b21633df9\n3197a8c9-04d6-49bc-9572-9e9b4827081e\ncece6d21-32f7-41e0-8ad9-c8f1d2b74a15\n30ada7dc-10fc-468a-b83f-c78ff85b0c6c\n01807ca8-32d1-4d40-81ff-ed47bcbdfe12\n52a10788-d5e2-4f36-afde-161321733253\n186c5497-04bf-4556-9f45-43cb62491e60\nf2eb8317-bef7-46f9-b01f-6ccb85fe9664\neb3193ca-896e-4823-a1bf-7668ece9a4b3\na04b84d9-c9b7-40d1-960b-c354f89c596c\n9b638054-4c93-4d0e-85af-d0092f122da7\n1975be98-b998-40da-b889-068a2f4e9f73\nb8efef19-eac1-4156-b735-797928d6d413\n3cf9c9ed-1583-4f48-9e35-a87bfd2e3822\nb20e12fe-1500-46cb-aac5-055eb3bbe702\ncd50855d-c719-4094-affa-caae7bf23b9c\n824cb6c4-0b69-4990-af3d-42aa34671282\n02dd8651-d49e-4309-9f44-4e38dbe13d30\nd723612e-a5d0-4e50-adfb-a2affeeca363\n9287a3a3-100a-4e2b-8c8a-2874f51503b9\nc1423192-441a-407b-a4ee-91afe9b62ba3\nb54edb18-04fc-4ba2-8689-f94fafe0d180\na4286bf5-7627-4a34-9c8a-eba76327824f\na13537c9-b99e-454b-9e12-cd35a0ae3d78\n17ff0006-234d-42be-810a-d58e223e8d07\n6cab3127-b8c9-433e-9714-9c1d3c554e70\nc7e918b8-57bb-4e3c-aedd-dad16a7c00ac\n0d5003a4-0be2-4d20-9ae6-9168c5846e94\n8acbbc50-bb66-4de3-8d61-c1effbedf5ac\n0bbec824-d101-4b21-851b-15e96b3806ed\n04533a78-d4f2-4c57-8629-ec2a638216a0\n039d346b-a315-49a0-b74f-af20da5fc6fc\n20e11145-a433-4fc5-994f-4e348a2d1aa0\n6bdf16c3-1b8c-46a6-a189-cb91505613ef\na605dd1f-5a46-4b6c-8527-862b89dcd7bb\nae137537-c34b-452d-9d7d-16a33d295cb2\n635449e6-ea2a-4a51-bf01-8f4e01574f8d\n16e7c259-6fbb-4762-a94b-a167532187d3\n1217a851-0430-4c31-aa12-c2e853627d27\n738490f5-585d-414f-94f1-a670ece6e8ff\n75489626-2945-48cb-a89b-7aeed82ffb5c\nf16e8c70-ad7a-4100-bde1-70cbbbfd153b\nae046d6c-c649-4793-9ab8-64e442ab7e54\nc58eb4f2-8eae-4c33-982a-d12be3fca433\nc44f6587-1114-4419-b0fe-bb95a97127b4\n173ade44-eae1-4376-9d9d-357057685025\nfdd6cfa0-8e73-41fc-b80c-850fd247466c\n4370c7f8-8a9d-4565-a72a-230676551b30\n211775d7-d80e-473b-824c-9ce3dd89b582\n36a0aec0-dec8-4af5-9c73-6c20944c5bef\n40c2e975-dbb5-49a8-ba02-da6488ae2b1d\n7d9a82dc-5061-4b94-a588-46718c7797ff\ncf3b5c9f-169e-44e3-9040-299889f2a792\n3c2f7553-104b-4edd-bd85-fa7c02684286\n441c226c-cefd-4273-ae93-58ad01e873da\nbd52d757-c504-46ad-b71a-5c0bbc708983\nc1c83176-16d1-450a-88d7-e4a61de54b8f\nf2200b2a-c840-4d51-9466-562cd51604ba\n5066def9-18db-409c-8d91-dc1bbac3e947\nc90686a5-27d7-4c8c-a7e9-83517d015ba9\nb38622e0-fe80-411d-9cb6-00117e649893\nc4cb7000-995f-48c4-92c5-8695ddc5d294\naca9b610-e0aa-4f50-a0fe-1b705be34ddf\n6cff0d57-5834-470e-b2e8-ba9cc6d4572f\n266412d4-0b21-4b8d-8026-6c7d2cef1d18\nb3a44c50-f21f-4573-9846-23f00c7648da\n4eb30687-0812-4385-be4d-552b20251b94\nf740e39c-330b-40de-9778-d344c2396315\naac24338-fa06-4a2b-aa94-fb6046bb0075\n38dce1be-b2eb-468b-8260-9f32a1bf7489\nac2bede0-be2b-4067-b13e-99932d98c99c\n6eb6a694-d599-4545-9f38-0c48fd15bada\n718248a7-4050-4b48-93d5-dce825168f3c\n72b2251c-0d01-4317-afc1-ade78989c93f\ne58fa1d2-de4d-4107-810b-d5cd2ede309b\n69b634ca-aa7a-42fd-8f13-3e9a9764cbcb\n12f42cf8-f4a3-4bde-b345-f5c72f147742\n7bfe3cfa-522d-434b-a6d6-8922141e2a52\ncca4ce76-8f1d-426f-9df9-aa96a68a8fe1\nd582fdaa-9b41-4374-b37e-cb2c9282fe2b\n14b70826-1693-442c-9cd4-b7538533284d\n453a013f-6088-4fc6-a5f2-7608e6dfc18a\n5309a00d-fb0c-4006-9289-fc5ce4ea5122\n261986a5-e1e6-4b3d-9e30-fdd0273d9df6\ncd0a818b-b21d-45b8-862e-85072a48c8de\nc6d16036-71f7-4346-85cf-8fbec299ac2e\n65ab78f7-5604-4b73-9120-1d52375ad080\n272d41b6-1f54-4988-91b3-00332f05de47\n1f8a54ac-ab28-4535-ac17-aab149d550fa\n346ce672-3ded-4b9f-a928-434ac7a3d0f9\n63bb74b3-ce8a-471c-8760-2e281d8b3cb2\nbe882edc-e259-4993-8160-d1cc81171b0f\n85c16074-200c-4635-84f9-08eb57b8f23d\n54d1cb64-98a6-4c48-9b47-7b17682cb233\nd12c7c2c-27ff-4213-ac7f-8459a97bae1f\n59ca6b49-aa94-408a-8d75-4c4dc83a7773\n0d1381f1-af79-440f-aa78-e2680fbcf828\na96cbc54-5e62-435c-8db6-cbda45b69eba\n966f8895-51fd-44d0-be18-500cb3a947fc\n912e8934-e98f-4158-b71a-b69010d8bb1e\n2b87100f-a9d8-43bb-a9ba-93dca5ff59b3\n8196792b-54ef-4128-945a-bba1b9ddff31\nffb1aa62-9536-448f-ae00-181c53765ae9\n902020b4-96ef-4653-96c2-df62ed6efdcb\nd3dec7a0-6adb-4732-9b6c-576fabe32d25\n4f8fb72a-8a22-43a3-8890-8c3ae7ab18fe\n36d4478a-a9b0-4920-9ea3-862cb0587f95\n69e3fa84-0612-40cd-99b7-d61e91389a34\ne0ba1685-eabd-432b-bd67-6a91d2e4aff7\n36dfc3b6-e163-482b-b93c-0078131100ce\na1f865fc-f8ec-4f38-b944-7258bf230a25\nf2c90025-c4c5-4c5f-9736-1b8315ff341a\nea87a259-8ca2-4319-a734-6b4d4f20dc99\ned5f9528-a3ec-4262-89ea-32f8ca9527d4\n92f41647-5593-4238-ac6a-e2bb1039003e\nbef239d8-c435-4237-8dda-d4bc175817c6\nfc5af1e8-f44f-4abd-a450-93a87be39f38\n1421f945-ed2b-490f-9a76-7c680eee3f65\n32b34e05-71ca-495a-8987-f0652c5436b7\n1d2fa760-7a50-415a-a083-2646a3db3061\n9f965320-14e7-4a79-8d25-410c8a2c4f0e\n329ffe0d-984f-4c11-b2f6-cffcec345179\ne18a9e6c-ca49-4082-a5fb-5642fea84ac4\n9c511607-2814-4104-9645-cbbd84d5bdd5\n4cb8148e-7434-4d8a-8514-b1bdc6c398e1\nb8321656-b6ea-4419-afe1-d817664ef877\nd67af24e-b75f-4865-a95e-b1acc7c7a20a\n85354ca6-b382-4aef-90ca-e6521101e681\na48bfb0c-bc16-4e82-a2eb-6e69d0c8da96\n1fc3137e-fab1-492c-9d87-5d9c45041a99\n6e3c7490-53f5-4db3-8998-6430338f2009\n1d0da7e7-26af-4d89-a7fb-fc85bb337dd6\nd5b6988b-4397-4f45-910d-11226cafcea6\nadc94703-f8e3-4f10-9e5d-1e4f319e67e7\n37d9d958-701a-4dc9-9545-a940ef491018\n6155c9fc-0c88-4caf-ac15-1e8a4951869f\n91c72702-d85d-4ec6-bcf6-2193199ff4bb\nd99a468b-edc2-4a9c-8889-c9f796373a85\n11b95c48-d11e-4e91-a30c-f2025acd28ae\n3f2771e5-0c6a-445d-abd0-814178144d61\n8529f0af-79ef-45b1-878d-f6ea1a2d6514\n96a6f20c-0cb4-4a29-b628-58fb431d86e8\n641d8063-bf18-4a3d-8c8b-6541df95bd83\nc70cea03-4e01-4b19-bc5a-407e09d508c6\n75bea684-7237-44ef-8710-e11bb64f3658\na3d00356-b4b5-4d82-a608-fc8c9866b3e1\n6bdc0c24-a83b-4d64-af22-39ae048d53e4\n56008497-3465-4a51-be94-a65ce810e0b0\n0629acc6-c05f-4a18-8b6d-1d3ddda08900\n571387b8-96f3-487d-bc58-553b78ec8b35\ndeb13a53-4abc-4efe-b5b7-7088ecf9f7d1\n604d6fc2-f540-4ae4-b7d8-65e5d2576391\n9107ec0c-cd3b-4ce4-8b7d-1d15777456ab\n5ed4ba5e-0d5b-4047-86b4-8326df5035b7\na63a7a8f-66b2-4bf3-b50a-2444f58c2705\n9d90c53f-8920-44cb-af2e-1722f29b4da2\n8c4565d0-9786-4bb0-95af-d84c9885c4b4\n0d6ddb3f-707c-4f36-888a-ccaead777bf9\nc88daa54-733c-488e-afa0-83fd12f2a9e1\nf36c2ac1-751c-4794-9ef2-e2a36aaa0c3f\n55387ca3-fff6-4d2b-a3d2-20ae36b46e78\n9294a11d-4efa-4c3c-8dbe-fff45f317a9b\n07136bed-3ee9-40f6-812e-ef6517ebf999\n260cff0e-9a4f-47e9-ab92-55eba2c1ac0c\ne82e75b1-703a-461c-bc0b-fddcacb229f3\nd058b550-01fe-49a3-9cbd-339d5a0c13e2\ne505c8c1-9425-402f-96d8-8aa314d2bd35\n16cfe57f-538e-45c7-b11c-081b67e78719\n5884cec0-c958-49f4-96c8-67d616b91a81\n121a417f-c208-4acc-bb92-9ed8158fe7e0\n581ef3be-cffb-4544-b9a4-8eac0c840bf6\n01f65270-1e3a-4b13-bf2f-0783ede255db\ne2d4f155-7f0c-47e1-8bbd-9735557a00ad\nb279ad63-f684-47a2-8400-9378e784cbde\n149fa091-3359-4a95-9912-2e2996c251b1\ndbf6b613-0d34-4eea-aee9-186d9122c63f\nb49bb236-7858-45dc-b6c5-056f1566a358\n86a9b574-fa06-4de7-892b-d8b31f4c8077\n439c0cc6-90c9-4e5d-9160-68b281719e89\nf8802394-f448-40b7-9bbc-15b01169a7cd\nc9c5a855-1d75-48bb-b082-8a29e2e93ca2\n0cc187ce-ebd9-4c18-b20e-dd7da24941c5\n117b0187-9fd6-449c-a1c9-da53e754253f\nb8fdd321-12e5-4787-aa9d-1a03ee13ba57\nf0fc25f2-9ba5-42b1-8530-33b2995d6cc0\nadc91b27-e532-4f2d-a32f-ad9e0dac2792\n24f7c89c-c41e-4692-a232-f6c1d047e15d\nbbf276b2-a88d-4e0d-a72a-8df9f321fa3f\n581cb806-e8b0-44ff-aaba-34a1ff407a65\n231090ce-cfbb-4a96-be96-9a8b3c0eca00\n7f2a07a3-1215-4972-81a5-f0ae248cb15a\n4a647c70-f7be-4754-9118-0802cdecc485\n448493c4-03c8-4bda-8210-174667c2606e\n6b44bbd3-47a5-4cd0-9352-5660b58870ce\n7fe1fd49-54ea-4fc7-9537-bdd2a4ad351a\n96eb90c5-fa3d-4f1e-85f6-41b87de54186\n439305bc-e1fc-468e-8e07-d2c83f65483d\n610248c5-e21a-4a28-8c08-a72bd219c8b5\n04f3ffb4-be80-4e7b-8916-9ddb2c1221ec\nfdf0101b-b1b6-4eb3-b079-42aa9f73e796\n43351eb6-0ab0-4cd5-bc85-339a6dd5713c\n73805866-586c-4a75-b15f-cbd26a60ff7f\n2d5cd8ee-784d-4f7e-8e60-680909861d4f\n7a0a67e7-27ef-40de-be4e-da6282ba132a\n3bee6dc9-858a-41c3-b143-553b3f572773\nfbe92e80-0655-4d03-b6f3-26cf5696d069\n4579b533-0a0a-4e95-8d57-b1ec72601cbc\n26b23a5b-9337-41ed-90e5-86636b9d70bd\n2e51b34a-8a42-44aa-9216-4d2cf918ea7f\n79b03d7b-e45d-429d-a31d-732b90eb222b\ndeef6d57-e510-4e99-8179-ec9a3274ee3c\n09c320f5-8308-42df-b17d-f2b4e1629eb2\n5c13f728-86f2-4262-bf0a-7d760b13b231\n733ef38a-36ef-4ffa-a2d4-0a1e2346d424\ncd87eb6f-ebc0-4d26-8abe-10533f3692e4\nf547d20d-6996-4624-b269-59ed6fa37800\n7a6abb32-8356-41ba-a6cb-46e2de483ae0\n3f2728fb-a2c1-4138-94f3-0a01e0a03c5f\na5b6f7f0-b2bb-458d-b0a8-e7db2da88ae3\nb68efbcd-e2b9-452d-927d-0465338e0f74\n05ae56a4-3008-413a-b062-e44f053dd507\nac6a9d12-7ff2-4000-b470-135ec22688c5\nacb63405-5eda-4493-bb80-5fdede8e186d\n2b2dae41-9624-4ab1-9f81-382a469bf620\n248857fc-2f34-402a-a13f-9970b90c2e1a\n997ec643-eac7-46e6-b824-5154c7f7a4d4\nfddc44aa-c4ed-4b7d-8f4b-5db1c103e630\n138ca8c1-a7f7-4417-8079-c5935c392d5a\n66d6e88c-f0fa-4e6c-a586-70b45a294e12\n5f7435c2-6752-465a-9bda-db313b8ff93c\n1e1231ab-523c-49e7-b32b-b75d4821eba9\n0f588295-5a31-44da-9a61-f5c8bb49250b\n6cc1ba40-07f2-4fe3-a28e-e443d4543c00\nb574e11a-d888-462a-b80c-acfb8d82264d\n3b37381d-e547-47ff-8489-6f5684260505\n36a20b78-cfca-4a1d-af61-da4e275c48f4\na855fd23-9d1b-41a3-b746-558526f4874b\n586a72c7-c86f-46f3-b0bb-1a0d0027388f\n1fd8ac85-b00b-48e8-a53b-5e39c422f2d4\n42cde46d-d067-48f7-8829-75c43846bea7\ne6615d0a-9057-402c-a9c6-793c5b766e36\n3110be12-58fa-429f-9fed-d96688138092\nf4be0368-e029-4699-9845-df21c5642687\ndaee72cb-cc4b-4967-9891-722b353e1010\n0b89642a-b769-4d48-88f4-5e1997c53a59\n6fb94c15-7401-4ee2-a4b6-ef31abc37290\nb702c069-f91c-40a6-8d6b-7fb17581a760\nd27ef511-6db6-4f96-8a40-08eff43a11e9\ncbe8306c-3105-4e87-993e-da6f443e908c\n36eeefb0-d19b-42be-8429-4f5babf87f95\na379d918-531b-4891-be9a-c2f22f199b97\n49a5053e-8823-4274-abbd-0c653443361c\nc1ccb166-c2d9-4728-a210-6c911da0f007\n10b9df73-fce9-4544-88e8-50697ae1bd66\n2575de73-050c-4779-a9e0-1546ea4167ee\n13527673-4039-49b1-90d9-88ba8cec1fa2\n539d495e-edcb-4f69-923a-ae3864089ae7\na575c304-7198-4d81-82a3-337ad2a7f00a\n09d999ba-f79b-439a-a343-090fb880047a\n5a1c66ae-7a04-4471-9b0b-10ee98636894\n48e58610-f236-4e1d-b730-0c9bf54df509\nd1a8602f-c9c9-4aac-b4b1-2acc0561412d\n9f8bbed9-5b4f-47d5-84e4-865811cbae26\n87a62495-ed25-4e9a-ab1f-bdcb3ec92beb\n2dc5c1be-6f4a-491a-b092-47d949d330cb\n9e057a7f-16ec-475b-be35-ebf518271b88\n8e7174b1-2211-40be-86be-796294be7e22\n98258cb2-79f1-4ca8-a07d-4bda65493caa\nfe03b35b-807d-49b4-8396-5a52714c3581\nb8675ab0-944d-449b-882c-8376fb6d7161\n8385677c-2969-410e-8ce0-4aa048a296c2\n05b2f7ad-cd37-41da-bd2a-8d30c4290bb6\nf8219eb1-a9b5-4486-a659-6c80ceb32310\n2389ce35-ca76-46b4-9793-5b1fbc053bf4\n070d36e2-179e-4547-bf91-4270c2750507\n4b87fb5c-c95e-4344-8aaa-842e81b502e9\n50fe7667-9b86-4bbf-918d-521737ac147a\nee9c9b34-d3f1-42c8-8110-7df1fd44d4f3\ndbf2fa9e-c0eb-4c00-be81-d836c2051569\n503bf575-9cc2-4d08-bc7d-d2e85eb28711\nabe29ae9-c066-40a4-96bf-c35879a84675\n9450adbd-631a-4f66-9e83-3d14c7a90dbe\n431792f2-cff3-4836-a693-03fd98a7c236\n3a46d940-d83c-4b11-a955-9d4ad0eca452\n61a5f1a6-14ec-4b90-9b6d-893fc3d9b481\n024a6282-edc5-4420-9c34-565860f54aab\n463b6a73-0f6f-43cf-878a-80b8df272fed\ne194de7d-4dc7-4186-9b72-285d082567cb\n0675d2ef-909c-4743-a6ec-fed5dfc0c045\ndd701f4c-310f-4df8-9747-fa1366b8cebc\nc764f399-e325-4b21-9b96-9c69158519f8\n3fa70b0e-5648-4f16-8ecc-ba2bbcf8f531\n4667c1ef-dfa6-4d7c-9a11-47fea6cbfcac\n00a1bde2-dd62-4364-a9df-9bf7c67e0022\n2900fc2f-89ef-480e-ae0a-14280524dc47\n09cd52cc-f03d-48a3-b859-04f1797f32f1\n4b279b20-a67f-49cd-9990-502cd5249753\n15f5a57f-184a-432f-95aa-6b9d895004a7\n14a03d4c-2037-46fe-a9b9-dcc31d1ac437\n81fa5042-3572-47e5-aa28-066227f19f86\n881b78b1-7c89-4e77-bcf8-8c1fbc808eb4\n10655f63-f29a-4330-bc3d-b6fa1ff0093a\ne1e662f2-3120-4f29-9158-af2fad08cb1b\n8dfdd1a0-03fb-4e7a-8edf-acd6330c69e0\n985f850b-4897-48ff-9f9b-b61db9d7cf55\n9c95f13e-517e-458b-9896-de852f0ce60e\nd7578f10-1fa7-4855-934a-e4ed00a16706\nc0ae9578-616b-40f0-8ae3-242ef22ee6e6\n5f564bd8-a1fc-47d5-ae13-593107b9b362\n090c1098-804e-4f5f-bbd0-919dec667396\nd35f3f01-d468-4622-98e3-ab1ce860d064\n96d90f6c-8ac5-420e-8766-6a72ba705553\nf653b78a-b689-4b13-ade0-d2857769354c\ne801a5b1-1649-498c-b1e6-8be6db56efa1\na41e0875-82bf-4903-a4b9-07c6412935c9\na89ba17d-1404-4f36-af48-cf0846ff1936\n4b4f9911-42a5-43f2-8830-db308069199f\n947e93af-e938-49da-9a4b-43c98de65905\n33d1dd25-d458-448c-8f0c-081bebbdf35e\n9d4c1421-543b-442c-a8f8-f51c028a29cd\n017567fb-2d3e-4b1f-8667-6e742b02312f\n5442c49e-e158-4d9e-98fb-ff2789bc1b71\n30609095-00ee-4d98-8abd-87a2e8cd87ec\n8e4e6eae-9ac3-4321-ad5b-983866f1f2d7\nef9a346e-8070-4b46-b1f6-6efd6628314c\n90e02182-d406-483e-a91b-0cf3946b47b1\n017cf446-5622-4053-8088-d277ddbdc043\nfbb37c29-9676-4700-9f17-47da600db562\n9d57737f-e777-4a8c-8a0c-f9e387fd81f7\n5a11a174-e798-4f48-a824-c763f4d72233\n8bb2ae27-b701-4122-87ce-7c66354018d5\na8c48613-3c91-4b36-b898-425effb90bc8\n087d62d9-2388-45fb-b39a-a503a6cf0b84\n1096d4fd-f501-4cb9-b3d2-c67d745db621\n7b170ffb-6a72-4909-881a-5704f22cc593\n8b46478b-47a3-4e7e-a30b-50ff70b9d39e\n44e2a187-8f87-4c3b-8bd8-3186c1c1107f\nd99ed7af-6ad8-4b47-a4d5-2309b926fde4\nea0ac715-ed13-477d-b466-617f036a3ddf\n8b3e22e2-93f3-4a29-bafb-fe989d17b53a\n06fdc7d2-6829-4112-86ce-eb29c597eaeb\n297acac5-7d15-4e26-b93a-15fc3adc8ef5\ne2393dc3-491b-4057-992d-203cc4861c3e\n9f81bf0d-6013-4cd9-983f-18ea99e9124d\n7bf3e8e8-82bf-4dab-8d7a-16fa0a0d9c85\n7f4febc0-eb9a-49b9-9041-f199a46d2c0a\n7defa386-3b02-445a-839e-210998c456f4\n18731c53-55a0-4edb-9820-bf5e4882f51f\n6bae0049-f3e6-42b1-a0ca-57f5684d0afd\n3816a62f-2cf2-4984-bbbb-2d37eac45fff\n240b25de-e5f1-4ff5-a367-9bfe20c388fd\nb4bb88ec-256a-49a7-90b8-2019eb430eee\n36b83a8c-b3e6-40ed-a280-27f77b1ca349\nebbad011-9c04-4f5c-bda4-8598ea058477\na94788d1-1916-4d84-aba7-3d07c234ab40\n43b5f5e4-6295-4bdb-adeb-ed070c404272\nba1d26c6-ad3c-4874-bf84-5dafd7f1c491\n9ed32588-afec-4d27-80f0-4bbf359c8598\n4385b4f6-7089-4097-a5cc-09491ac62991\n34344baa-b180-496b-819b-527bd467e9e6\nf8b53319-c7e8-48e7-8964-32d1fc73ef49\nf2b4d523-7508-4467-acb3-af399a0ddf20\n13677f7f-d263-468a-82e2-3b29f97818f8\n398e4193-eb86-49d9-a5a3-27b38c1c03e6\n16121674-80be-4094-ab87-005d948db170\n74db87a5-d2cf-440f-a48c-a908a6c093f9\n159753a8-a17f-45c4-9302-dcc14ed56d14\nf0ea516e-257f-49a6-9355-be5cb5b019d0\n33ed588d-4b36-4b8d-8d8c-daa284264a89\nb7467a33-1f9a-4efe-87ac-b7236798b491\n746e2481-be65-485e-b504-a9550e29631f\nef87ee15-d193-4eb7-bd03-1a0dc7a05ccf\n08d3ed49-9f22-492c-9ca9-c95eb2e8ca5b\ne58d60ea-1da1-46ef-a23b-1db236e2ca71\nd27c2291-18ee-4e5b-96bb-e2414e46e5fb\n9f4d53d1-edc5-4bd4-8b2e-8c5769df70be\n8ee11073-d70a-4a2f-8f9a-45c0a8e74e74\n11b3c627-1409-4014-879b-1cd144cef984\n2b911f6b-80dd-4368-9de9-5fda61d5e918\nc77a6c1d-39d4-470f-a325-acd940ea6ac5\na43f7010-5fad-45ac-b35b-cc85a9b04131\n22062c1a-018e-4fe1-8d43-1edcb2291130\n3b6cc5a4-c9dd-48b7-8657-649a95ead291\n255f75e5-ef74-413b-a285-fbba838915f2\n209c2aef-4c1a-48a1-9c78-e06e51cff8bf\nc4947751-5ec8-4c5b-a3e4-011ec4e54ed3\n851d3b99-fad4-4b8e-99d3-feb2564e73d3\n4510c114-fc18-4b08-bd6a-80ce0d137fcf\n4171e080-e00e-4d92-b6ef-602430ca2181\n8435df17-1731-421c-85f3-c1c4e3bc74d0\nd84a38c0-473c-4d84-b9f7-b8508c93a08e\n0865af1a-6776-42bc-a463-7bcf56393611\ndae1c915-bb6d-4c30-ae50-0e4c87bbf281\n12e0ce7f-c49c-4782-996a-e912cff20553\ne2c59b2f-dc37-4e3f-8612-b152775be78c\nc360b073-4e2f-41d2-bc67-4b3cc16b8b72\n4230aee0-bc9e-4a42-80a6-28b36d3a0a43\n41532554-b035-40b8-9790-b965b8c7ac8b\nac3789e2-f5a8-436e-b4b2-85b75a75ab00\n124ce433-0d3f-4435-89dd-fa0b6bee296b\n49edbda7-7620-4452-8643-deb2c9f6575d\n2d1b4281-ea7b-46ad-8324-e2cde6d6b395\na4d91f4d-5a1b-45a1-b78c-e6fe148235e1\n1b77acbe-6ee1-4f98-81b4-b454b09e8265\n00c3bcaa-7d67-4894-86cf-c1f8ebb3e165\n6a5ff7d1-6ca2-4d9b-8bcf-37ab72a9501c\n91b8c6aa-e402-4744-91d0-ac487ab3c8ce\nef6b1e66-cb7c-41b8-80db-816be5e8f4cc\n3028cad3-19fc-4b3d-9058-ffb09d9c0464\n6f653ee6-bb70-4913-b997-3428d9287ed1\nb1d26bdd-a963-43cb-a34f-a7e841ed7f4b\nb128a7fa-d1f4-48ee-89df-167ce7273738\nb584aba1-ccf9-49cd-959a-42883ea3384d\n060cbbfe-f197-4ca5-ae86-6360e812434f\n1772cf70-80e2-4449-b6d4-448f7b6d62e3\n288de268-41b3-4e51-b28e-76154918d143\n4c5a4f81-084d-4769-befb-5ee017675824\n77e477e9-d8f9-4de0-b974-7f8d713d1ac1\n7d42e9c8-ac67-4db4-b33b-9459b2c974ea\nc2bb2752-2a65-4076-9425-1a816293bd36\nc4b40bc8-a862-4927-8a06-8df335b47d98\n8d0decc1-9823-4f3d-8cd4-f55cca2c7dfe\n71247cbc-0630-439f-83c4-d04f5abddc7e\nc62dc504-e5a3-42f4-a0e2-05a0325f766b\n0e2521d0-e01e-4796-a4b8-e31b1e8d6341\nf97f019b-8eb9-428d-8539-6fe8a859c6ee\ne13f65cb-ba28-406c-b172-8874162a20a2\n0c049c09-a429-44e6-9c9b-cf3d082605c3\n9b548171-a7af-45a5-b0f7-e2cd0a5c6266\nef5e00a2-8524-41b4-89fc-fb6b7c6df1cb\ndbf465ba-a8f6-4d75-a424-8cb9e5b0554a\n019fed76-d550-4da2-b3d1-b313461b92da\n86b9f7ba-2b60-4990-80d2-220fd43d7a70\n7aea9c52-95d4-4f49-a20c-bbd66c04753c\nfcba3761-8692-45c8-ae4a-3afec1f667ef\n0d663175-8cce-45af-8c32-ff44ec37619e\n608dc750-fbf9-4bca-82da-b11a831518d3\naf08d2d2-3bac-4b6c-8154-f297f01af80b\n811a8cd9-4117-4407-8eda-56eeb3297307\nd72744f6-f32d-4d39-bc04-d6793939fca8\n889874f7-d710-4048-8fb0-4ea9ac8a8d5a\n168a617f-621e-4074-8fd8-9717f93153f8\nf48809e9-d262-4a3e-bef0-befddfebaf3b\n20e2c140-c3d4-4784-b7fb-3383df7fbd62\na7ee9dda-2cfd-456b-aaa3-5c7332240b02\n0d72063e-5051-4aa0-a0bc-1fd252d6d065\na584145b-4177-42d9-8672-66757d12dc46\nffcd7ae6-78fb-4cf3-82cc-5bb5e5fc7504\n4e40f805-34e7-4f07-9f2a-467687a47a9e\n1bf927f0-cfe2-4699-aebd-3a79ed401aa5\n37403f64-0e1d-468a-8ec6-04ef17147f84\n80ee1390-e4eb-44ff-a9cd-626f9af2ad0b\n72fd7087-9712-4eb5-9e06-72b536cc0b27\n5351b7e5-0874-4ac2-9285-12f157f26613\n564dc1c7-d7c5-484a-8b1f-f1f1617cb11b\n9d53a69d-119a-4b6b-a794-56979e510627\n19a393cc-94ef-44a3-8aa6-4013762bb834\n0e104026-ebbc-4b48-85a9-386b1651caca\n2de1bb5b-872a-46c2-8f82-b42c0b2b2b85\n989415f6-8823-41b7-86f9-3284408ade81\n3c94f789-6155-4492-9ab5-7ba61ee38f32\n4fb7dc12-9476-4840-a658-d3fdea6e767a\n43142089-ca6f-4c35-95a9-ba7f37bc15d0\nc7f6dcda-caf1-4a8d-bfbc-ad8ddecc528c\n84c1968b-a832-4ad8-862e-f99eb7f329e1\n92d390f5-a848-4e06-abdd-3e143651fb4b\n4b96858f-82a9-4220-82f0-1efe2fd6f5fe\n09dabca9-051d-4a6f-9567-e9988fdc0b38\n050beb1d-1017-40dd-b959-f04a8d25f8fd\n7537d27d-f1db-47b2-9ad6-ed5121c0e984\n4c273454-c089-41f9-b499-df7490d47d32\n4b4f251a-cf54-4b55-a3b5-8ff8f9c41532\na3edbb90-9c7d-4994-8931-31230606a987\n016e7a52-ed7a-4a42-a487-3d4ca754a509\nb83cd585-393d-47c4-8160-cae8601e59b4\n31296487-980e-40b1-866f-3cb37878f092\nc120f056-e7ae-41d3-a8a8-6da713f83d8f\n181345b8-dfef-4be1-83a7-ba4344d0e437\n88af5759-14a3-4aa4-a358-0c04e64373fd\ncb9dfcb4-8cf7-4ba1-aa4a-5b6041639399\ncee37c63-bb5a-4524-b1f4-7a6304549359\ndc88a99c-248a-46af-b743-567a2c324897\nf5867d3a-6232-4942-be6c-5ad1393c8b82\nac360e9f-8023-43b5-81d7-5ef0671c10bb\n6dd9ed53-64fe-4a50-bc36-a586a5531fe9\n0d63a2cc-3fe8-4ab4-8bda-4c32ab2d2b5f\n6011c449-1fbc-4ac6-bc19-f457eee6a511\n9479aff4-6412-4dca-b8a8-b34f39b6d2a8\n47f347a8-7b7a-4f00-82a0-e575e176d3c7\n1ee268a5-3dcc-493d-81d3-ccdbae94ce30\neecd363b-5d08-49a2-84dd-a1d78a007ce4\nb70c5252-20e9-46c2-89df-e374d61c15ab\nd1375393-ad87-4d0a-9efb-86d99cc4c508\n5e0926be-69d7-4b64-80a9-096828789d32\n035a35cc-fdb5-43f6-bf4c-9ccf4f8bb909\n5c39d155-9c68-482a-8a75-09e56d9d90cc\nd0bae08f-9f77-4af0-9f50-47d6431a6475\n90792f1c-05c5-401f-a814-4eb89b1e2995\nabbf47e1-1543-44ad-aecd-9ea86af8ce21\n09fc4e69-da06-4120-8b59-700421249b7a\ndd44a6dd-8f53-43f1-834b-b81d4712672b\nf3ff098f-3c46-4033-8530-ea26ddea53e7\n706cdd6e-35f1-4ab1-90f3-8c5edb42bd3d\n21bb59df-4bf8-43ba-8d3b-15cd8c9df14f\nbb5d7c8d-f455-42bb-b177-8b67eace4e38\naa9656e2-776d-4f35-92a3-b4f07755d53c\ne5bb5eb4-e8c3-4a50-bd9b-c8c4e3cc7096\n9e731a9d-aa45-47ad-8fac-4e7783e76c81\n601b3e57-c6c0-4949-bc15-5a1a73131810\n772b1a55-e8b0-455b-afd4-557ddc63bd2d\n5f5d61eb-2d83-49e5-b71d-b8f6d2212dc1\n7f5fe4e0-b8b6-437e-b6a9-905dad570231\nc15f20aa-26cb-4c65-a741-a8c806a8c307\na2141df0-439a-493b-b6eb-5b08cf9d8d9e\ne8eb7f3a-bd0d-491c-8d93-25608781f5cc\n8dbe43d9-15eb-49de-935b-8ff2fda35711\n8beb51b1-35cd-49ea-8297-cb09490d4033\n6d60c14c-196a-4af6-a281-4bc6c234707c\nb5e64774-600c-4192-9517-506a40786e56\nba544517-0890-4071-a6a6-8a6b571c28b4\n6fea1ef5-227f-4255-84e6-10952706e8e2\n6a0c5a04-b16c-4297-a558-c8a2bca0a865\n375de763-7647-41a7-adda-b2392de85671\n5d6440bd-79b5-40fd-a17e-4a9fb439ff57\n1128a46b-95d7-49b5-8cd0-d26e2d0ab392\n5c9ea209-cf5d-4644-8693-d4d3b809ba82\n32815218-3653-4087-be5f-2eaa31cd3f60\n6a8e9398-3792-44a1-aff2-222114cacad8\n7524d6cc-9600-4779-baf7-d2a039966b6f\na5e87773-71be-4f39-b005-e57022693bf0\n869aa370-49b9-4a94-9fc0-4839d0f265e8\nec12413c-1bed-464f-847c-62fc3b5fa84a\n54bf5fc8-860b-471b-b019-82869ceb8b64\n9ae5ee3d-eea5-418c-abde-37c5dd6aec2a\n683e9a55-9b4e-4bcb-95e0-38218e73bcab\nf0beddc6-5110-459b-b8cc-e2702b67473e\n0e59a44f-e6a0-4467-9bd4-cc53f4abf16b\n3b82d56c-99e2-4b87-b75e-860bca566053\n3a3719df-bfeb-491a-8b12-51671d58f553\nd349d335-8f4f-43c7-ade0-140ba291be39\na849c4c0-d0a3-4f42-89a8-a68486978c67\n4f00472b-c7ff-42f8-9de0-8d300a9244d9\nc00dfcce-177f-4f9c-924c-257b9b73f56b\nd919e79e-0c9e-4b8c-920f-00448c1d7f86\n16c37653-0d96-4ba9-8826-830d633be2f2\nb95d30c6-b02e-4459-8413-7a748273e21f\n49ca7a8e-e9ae-465f-96e1-b96057e77a60\n4ca7bba1-0621-4e54-bf4e-8b6cf6119b95\n866e9319-6e7b-42ea-98fb-e4b6433ab702\n7421c22a-f58f-4a83-a61d-bd0e173d1a59\n60b5f94d-a5a6-4afa-b788-deb8cfbbf0c0\nef66efd2-8b01-4c28-bb7c-e704d3932849\nf51da906-d08f-44e5-8be1-60298dfe5442\ndc7680e5-eeed-434d-befe-6fbdd2e0aadf\n938c3689-0f21-4cb4-915d-628294842e28\nb570cefa-f01c-4705-9c0e-a1792b373a0e\nae17e210-0fda-40f1-811a-3c80553c5521\n98e67e38-83ab-42c7-9c90-06b730a31850\n44de323f-8ceb-4500-a59e-1ab0c304362f\n6a7e6c92-1081-45db-8f17-71eee853aacc\ne819a496-81f1-4e10-b6be-09950a11a363\n330a93ec-2d76-45cd-946d-c8b89f264e0d\n679805db-f538-44a4-af27-ca0d0a9a3523\ne3d5ca7b-e657-4b76-aca3-5fdd7c42dbfe\n389a5ee1-f694-4162-852f-34e4bf722bc0\na2d6d6cd-090f-46bb-ab06-ad4b9ffa2407\n15206f77-33a2-4426-9e0b-f44ea2a43178\n4228ed9c-304c-4047-922f-1b945b609992\nca731bbf-f1e2-4334-aca2-5c1d9bdb6d19\nc04a940d-966b-4e2f-8af7-1f88bb32b7dd\n1e08edbd-60a8-40c1-ab8f-92f1d2f3fd68\n2ea5a98c-68da-4f2b-8638-956d2c77ec54\n8393ec12-3f34-4df2-967d-5a6c6b069d53\nb273db66-5979-42e8-ad07-b054c3580a16\n4644fc83-7087-4499-b908-7fbe1a479e9f\n9b848aee-220d-425c-ba70-77d4d51f3c9d\nbf47bf68-1442-47ab-9a56-e5ef732d93b7\n8aae8742-1b16-4594-8d34-de9ce3cbc7f9\n7ffd2739-ac2d-4c9d-a054-43476b0ed721\nf423eece-d068-416d-88f9-b29df34023fb\n81bae55b-bf5d-46a2-9298-e0a4b8d224c4\n1258bdf2-4c4f-4728-9e7f-5986d6da87e2\n0e8698cd-17fe-449d-93a0-2078211eba5f\n5624c320-770e-4948-9343-d7d14cc050cf\n911ea784-7320-4efb-8f6b-c907c2aa025d\n04e7c162-5f51-4162-b3b6-245acca02b14\n48a65b7b-85c4-426c-8f33-fd6388993cce\n46a3daeb-200b-46dd-896e-c6d259565a14\n0aadec1e-f58c-49a0-99d2-c58b66f9b5da\n42c594ca-dc0b-4edd-a215-5bd52dcc4a5d\nc2dfe817-f3e0-4ca2-8b04-095e18fdfb20\n09623f5d-e873-441a-a937-dbf95aca69e2\n8a6fc55e-69a1-4a97-af34-f94d1e6368c3\n4b3eca51-5775-4a20-9e05-1b28742119ef\ne7fc2ae8-0354-481c-b571-939740d27969\nc0686f01-519b-46db-a5ec-c19596a4e1ed\n9b9a383b-d070-458c-ab1f-cbb6e9538f0d\n5e1dde6e-9d61-4e0c-97f3-c9d2a1bd1459\n30acc0eb-6fef-4286-9dce-7c49a463091c\n98da19a0-48cc-426c-be0e-cfbce057f226\n005b75a7-c593-4ea6-b88d-f0cbe6b268b2\n795f98f4-9b45-4a44-b575-b6b8928b99b2\nc910a811-5a9f-4349-9a94-efa5037803c3\n83c99859-2dd7-4d40-8f15-a5aa14642aa2\n6aacdb5a-6ec9-4b26-a79c-b6e864c731a3\nc4a9f8f5-8301-4bee-a6dc-5dd8b271f4ad\ne012179f-7b81-491e-9a19-1dc554c378eb\n079e30c0-a6d3-4717-ad25-8967dfe24745\n79db9995-d5ba-44eb-8cd2-e8ce70d263f3\n21b0c7ba-573f-47bf-82c4-a5dc416d9b7c\n6cf8cb99-395b-44a4-a025-cd90e6052692\n918bab2d-8b58-4253-98b2-227ac6831616\n5b20796d-6b48-466e-bd61-e03536c56509\n3f8d2afa-e065-4785-a45a-c5bfa86d2eed\n619828ee-cc45-406d-9ba0-0e5e8f78bb37\n67d14631-90f4-4479-84b4-ce8e688aa1e3\n69643b8f-6925-41d9-809f-182b293ca45a\n3dfde843-4290-4ff5-bcb8-3969abd9ccbf\nf0771f6a-146f-4646-a545-dbb5305837ca\n8db23d87-17c1-4acf-aced-56e5f58d06fc\n84c6c5df-eae7-4aa7-9e07-1e835ba681ee\n72cd742d-0943-4d9d-8a77-497038241fe9\n43602b2a-4bd7-4da8-98d3-f8ee13af22e1\nca8e908b-e056-4cab-aac1-3f87b1c7839a\n57421962-7559-4250-b4db-c2c7e38dda49\na3fd95a3-3d6d-4b13-b8df-f69349e64d2d\n10abcd11-2f85-4258-9003-3d42172a1b14\n14b68c8d-a682-48e0-8d77-e5478922b453\ne3fb7bbf-2215-4907-af31-a9702848c713\n52b871a3-4077-476b-81fd-bbf508a74407\n475ef9fd-5df5-41b0-8453-c6481b0b80fe\n431d061b-5467-476a-ac46-4c83b5307c09\n140afee6-eb47-4c6f-8369-94116ba9180f\nc12384c1-0059-44d4-9902-dfc9435e27c9\n2eb2ac79-8c3e-4b5c-999e-2b53db3bbdd6\ne9dcc89e-9a1c-44e8-940a-3448c6387488\na02f3c38-eb9a-4a41-ab24-6d545158bc8e\nc3b09e37-5055-4082-beb0-46c3535ecd30\n7fe26bd0-a3b2-4674-a7cd-8b56dc288cb3\nad04f238-3078-4573-a59b-50fe5fff3226\n059c2fec-b956-4fd1-9f0b-44445acdfa75\ne5663119-7b66-48f9-a4bc-75e480949980\n5417a445-fffa-4ff6-8780-4ceeb763cc20\ncadf8a28-0735-45aa-b3da-c82a524df3c5\n4634623c-0dd8-4ec4-be78-a8019534e118\nd24aa317-494b-4fd4-afa1-3a58bdbf2b7c\nff62ca5b-fa21-4e95-897d-54b334c118d6\naa7bcac9-0180-4b16-b8cd-6bcef6ba5b38\nc0f85965-599e-4147-813d-351aad8249fd\n03330475-9824-48ec-b188-9d93c31a4753\n8d69fb60-088c-4cee-a472-cf38bccd47d3\n684bc415-81b8-48f1-93d9-776271926919\n378bc2e8-1a15-4715-a008-df2133d54da8\n406c8f20-9ef7-4a34-b2f8-f0786531ffea\na14610d8-acaa-4fc8-9fa1-4d5554e7b752\n38e5980c-5c46-42a0-b7f6-edafed011083\neb4af1f8-62ba-45b8-91be-09349e3380f4\n720e2cca-ae07-4c0d-8d8c-d84be46c5a71\nabbf1f33-8fbe-4e96-8d89-a278c047a3a5\naf2fefea-b091-4653-a404-8569b4715156\nb007b0d0-a7fc-4569-86cc-33af2b94f01f\n1bd0ee33-838f-4142-9dba-ee073a45372a\n944dc761-7c16-4e68-a713-97a19f1e177e\n3ff04146-7cd7-4f9e-a253-d03a9c4b0242\n69e9d5cc-728f-4ecd-93a3-ce0178e95917\n46eb2594-0993-465a-882f-4d373db4dbf3\neee7fb19-5ebe-46cb-9f08-3f86b6b0c8b8\n6ca5d3d6-2625-49bd-978d-955cb1c9832c\nfbdaeafd-cb84-4994-a9dd-1bf0097929ba\n0cc4a1c0-169f-4262-9900-ddebfd0c2282\n59ad584a-389b-489b-acbb-c3c06caef9e0\n7098df75-f5dc-47c9-b208-777bceb89fa3\na8191304-7594-4fba-9d5f-06d546bd129b\nbc6b13ca-60d1-4dea-97f0-00341a7232b4\nb554b347-a823-43c6-9150-c699d8af8624\nf8680432-e969-4817-be4e-b470769e243a\n7b7c29b3-24a4-4194-bd7a-cd5edc6ec4ad\nda3cc4cb-758b-4afb-af0f-4ed1b2a9bdd4\ne20a4809-bd75-480f-804c-5ce80a2ea2ae\nbc5d5257-3bc9-4679-9f85-e12ccd53ea47\nc763a360-ec0c-44ee-a4de-08b31cfa39e3\n28314e10-d11b-4b9c-be8b-e9331a6ddb4f\n98dbcc84-5115-4df8-9773-4d74ecff2b65\n50ee75bf-4b5d-4cf4-86f6-73073158ae85\nf400b515-98db-43bd-ab02-efb76033e176\nddf7e54e-fc52-4105-a00a-ad7247d0f0ab\n91ecc2bd-5d72-4f53-bc5e-c49ac18cd10f\n981a3d6f-7fb8-420d-af84-6aa49be2009c\n5a323ccc-5559-4998-b360-3de0de29de3a\n99841ecb-8889-47a8-bcb8-d4d3c97b2d63\n90ac885d-ba87-4c4c-875b-30de2509302d\n3e685202-f897-47e5-9a3e-1583c2bf31ec\n21e253d9-78ad-4cb0-9c75-ab50546fd5d3\nc4c4bf0b-f5d8-4080-9c22-b149bc3ae5c4\na04c4230-a266-434f-a583-94878d1a98c4\n67f33912-bc94-425f-9bca-9526c38171c4\nfa508f92-04d6-458d-95e8-245a8c9d5672\nab3ccc65-15e6-4fc0-a506-2231bcaba152\n54fef7ab-1adb-4a11-81ce-64a89c2f7bc0\n57a799dc-de8f-48dc-a8d9-0158adeef7b7\n59c4b3a8-3f02-425c-a5ab-5be45fa79dd6\nd5a40b24-78db-43e6-a7e3-4629a3b49231\nc79b6bd4-79c7-43b6-a53c-122e5635878a\nf4a57b4b-19e6-4480-b527-1cc45af7a12c\n0b6b3c3f-ef23-4874-a9d3-f75bc9825860\nc5e05af3-7b0c-4c0e-aa54-2ceee396df55\n681b2a36-a0cd-4d5a-9bb4-4b2e0cf7f45d\n0c96743e-c6f8-46e6-b293-d4215cff19dd\nfa1ab6df-4ece-4535-a9bd-5e607a7c8726\nf93de131-eb3e-4da3-b5f0-50c16ffdc0ed\na7c72cc9-bd2d-40ba-82b8-b8431c8e6baf\nad2c7238-9354-4f93-9a21-428fb159246d\n22c7ccbd-62c7-4bb4-af5a-1d3075e18d73\n14068adb-e11d-4539-88af-e4c3ae71cb47\nf3ab84bf-be73-420e-81f5-20bcc790b0e9\n5634a760-89f8-4a27-ba21-3e6b7dad5884\nc84bd6a2-7645-4ffd-aa8f-499ea069d766\n7954f4a2-d9e5-4035-840f-d75b347cb85d\n528c59be-f80c-4d7f-b370-4a79d76afdda\ne395805f-2825-4744-b234-fc1ecd931580\n4819da28-e3fe-4fbe-979a-eb48bd8b8efe\n11271964-eaa6-473c-b89e-43e13f9b9d8a\n9a8fb440-8c68-4378-8fef-6143f66d8a49\n2611bd74-843f-454e-b09a-042ff03de5ef\n8e4db436-7da6-48c5-aa80-f79c7f7a5187\n93e963f6-d258-4482-8073-26224062cbab\nd88abd26-f89f-4a57-acc5-d25767809a45\naa57d5af-6665-4d25-81e1-3f7206f108ec\n74de4330-134c-4971-abc1-1521c5b96562\nbb8d59e0-ffec-40ec-b523-03523003db88\nc4fa9fd3-e5ab-4d67-8f01-072fdce2238e\n380a5942-e0b3-4cb7-9e11-b7b6735f1cd6\n32a44651-4844-4264-847e-a40fbe413569\n4eb8d671-e0e4-4a60-921e-249c095d2110\n2deddcc1-f847-4bb9-a9a9-8491e7780cc0\n500052b7-6e98-4d90-a320-d4f7bed2d4ae\ne18e0e3f-96e6-41a4-b05b-60e92234521f\n9a0dafd3-ca88-4c84-919a-7f97743a25ab\n2ea2b64c-aa83-4c92-8412-8cd636b54843\na5cf4a91-1e47-47be-a920-061c3e8b0dff\nda7af0f1-36b8-498f-a911-a2346ad0cd39\nc00ac10f-771d-4f0f-bbe7-b584045f8ada\n79c745af-2fe9-42e1-9d94-5ce635d90a21\n5e886f59-6eb6-4db6-b087-202a211572c4\n585d1923-7b2b-47f3-9033-f1bf52f424e1\n6db2b4a6-5a1d-498c-9cd2-7e083ff88546\nefc1b2b5-ae5b-4777-aff3-967604a32ea2\nec321104-1146-4d97-b0ff-c3cb48600b92\n989c2219-6b87-424c-b2af-d7c773ca1a36\n279d2498-5023-499f-b9a5-ffa6f39e903c\n327c8a20-96b6-4de9-b993-2d1a5e4bcf2c\n7b61fcdf-153e-4e3f-a1f3-e4e0d9a26bf1\n5d323726-73cc-4d93-9312-44c5f7f81a76\n952daad8-0fe8-445b-b41a-021398a2a8c1\nb8aa9937-fc71-4ef8-9bf7-9875c5a04c69\ncf08dd48-070c-4a81-bb5a-5aee79209ba8\n512008ac-2760-43b2-8d70-0cb046314c4c\ncd89b827-2ee2-4841-a88a-5c348a94ca17\nbf3c9e88-3cbf-4631-8897-29e3a14d208d\ne02127d5-26d6-49c8-86e8-973d7121153a\nf75d2c52-b4b9-431a-9863-e3946266ba93\n8e3332ab-45cb-4226-b5c7-4b0efb501b7a\n01f17292-5d27-4916-a191-019ce4c663ff\n339b6905-ed11-45f6-9c72-b479a6bb86e7\nd4c67ad5-ad4a-462a-bbef-35e3f2c16ccb\n16bb249d-3048-47fd-be77-5e096264d91c\n0180c11c-f30b-4b1c-aca1-9338ef9af12d\naa9be963-b700-47e5-87ed-ad75a98a45d8\nc9442ff2-8ef4-492c-81bc-49a04d8231fc\nd3546533-e000-42a3-9d9c-011505b10401\n4f0e12c9-cbd4-4cc4-ba38-8e16d2b9b932\nced71bdc-c9d1-4c6b-a7a3-a68313e99391\nfe81c00d-e467-4530-9305-d6bccb7a547a\n29f62c70-77ef-4a07-a41c-6e3bdf5a964a\nda1053c9-ac1c-4737-93c1-f1c1836dd200\nc0f614a8-9c24-4684-9ebc-b80e6bf46938\ncf90f232-00e4-4bac-8e2e-75d1e6bbeb79\n6f1781d6-e247-40f2-997a-d85b5fc14854\nd778cd6c-c543-4942-965f-34bd7e6b7c81\n0a51a67b-2310-4f55-94f7-117265096917\naa6d14ef-0eeb-46e2-b92d-f9cdff2b1374\n8a988470-541c-41cc-88c7-6e7a2db302e0\nfa78bc2c-e5fc-4619-b8e2-d5a11e259cb5\n6e0f811f-a287-4777-b4c3-fc0bae2c5727\n0eee3271-1235-49d0-b4f7-cfc8691ef7dd\n44e4d74b-80be-4bd2-8cb9-38a0b87ec6ab\n23c816a2-414f-440a-af4f-4a9ba73b8be7\nbe7f973c-9d5f-40a0-9a37-0d2fb511a211\ncd059b64-49f4-4ff4-b656-83966e9aeb01\n13d577f5-7648-4d2b-865b-868f6f3e2da8\n82134e1e-a719-49ca-abd4-feb5fa8555ab\n6851ef8b-8325-4106-aa34-a68ad1596396\nd76f9c5d-c547-4732-b997-662f93abbc9a\n8cdfc258-c8aa-412d-8061-8d0eada8b554\n39c72591-7874-4fd6-99da-de59ed5ac4f9\n91c6aa67-5e19-4a6b-a676-7172b2b482a4\nd44d5bde-cf9f-4e35-8beb-86db55819fe2\nbf711282-5735-4a8a-bd70-737b7223962d\nce366e16-1a42-4b22-a54a-0c5a57ca9038\n6ac174b0-505f-4d4d-913f-b74fd204c338\n4f67a3a6-7e1c-4882-b802-a11d60d5dc9a\n05f0030f-eac0-4124-b492-657fcf1a0fac\n84eb8155-b8bf-4257-a778-86aaf130fd4a\n99272347-742a-4dab-9477-1fa147309016\n60c61975-ab47-4925-976d-5405b01f8608\n51113a24-c4df-4f18-9b67-5b84c9c32709\na039c046-52bb-473f-a2a1-c807436df781\n25345c22-4fc0-4d2f-888b-13c3406bbc06\n30253a49-3068-4fe9-b9e0-ce66f5873943\n86665c4a-eb2a-41a4-bfaa-a0b2f1f35e16\n13a03e00-4840-4c2b-87e2-034df99e5b01\n1e9f5e63-b8aa-4ddd-8e16-2393c81ff279\n2903b046-ebd2-4bd9-bd80-6fa122a25067\nc768b2ec-e245-411d-a5b1-6d287f77c0d9\n4d03ca48-267c-43db-9be5-f64ea8151c2b\n851dbf63-e7b3-46c4-828d-fb0ebb794b5c\nd012ce32-5b27-4d9d-b880-0a55ceab8b55\n1ba79a2b-1aae-4b95-ae70-75cb42d6f0fd\n55318aa3-1e6e-4abe-ae90-6de291e857b5\n8e1b6918-e096-4d34-9d61-7cbd3c43f727\naf8558a2-985c-4c8a-8663-12b8f4a30e15\n8050a710-7e40-4d39-b8e0-0f899e92b6fe\naa07993f-4dde-47d5-9645-a48d1b40d490\n7fe0ffc4-8993-43fc-8c93-35060eff2e2a\n0d3991fb-4f47-453f-86ef-cb69d0336529\nb8fbc74d-4aff-4792-91ed-d40826682f23\n5be102ac-996c-4827-b065-a2c75927be1a\nf1ce17a7-4482-48f1-9443-f7290ba73d0f\nd7861100-30ff-4cd2-8556-25e7aa72e0fc\n578a9c82-6cae-4095-b2a8-e2f24fe0091c\n4020f015-045e-4292-9eff-7c357c00dbbb\ne6350f61-5211-4773-b381-15f9225eb352\nc1326ed0-d452-4cd8-ad57-f2db5fb1e600\n461c4492-6443-47f6-b672-299e5f186380\na097990e-ec97-44fc-b648-7cb0ef6e04fc\n9a5e67f4-d52f-40b5-b917-d6071fbca38e\ne548b20f-058d-4854-9c69-caea71db8bde\n12644abc-590e-437c-8dbc-72bfb7550686\n7d0e5849-a148-4fea-9c03-4838075cbac3\nc3d110a5-5d99-4f80-86b7-dfc8fbbeebf5\n94b3f8af-f8a7-4cc5-aace-6b77fb46cb45\n6c39eb6f-27a7-4e1c-82fd-e130f799ae17\nef41d14e-1fa7-4a67-a054-4a45c72ccc2a\nece79772-5d26-4ba8-912f-83ffac4b2e52\nae02c29a-d9f4-40d5-8f09-97911a180822\n434e7df7-7624-4ca8-9692-92a05c5c2626\n3b8b3918-a82e-4c9d-8db3-8819b52f1c9e\n205b0994-ad4d-4dac-9d90-7e296f6fb8c2\nc5721ad1-7c04-4535-b6bd-67e00497c101\n758076a7-8d2b-4ab1-b7ed-a0f854f17a68\n7930a714-b8fc-4f5f-b716-c55f7bb73121\n756e102d-e36e-4a9e-9615-702c3e7c2129\na9059482-f4f1-4fe6-ae12-d33ac18e42bf\n9a20c490-933b-4273-9037-308a88e3ae55\n2e63765a-70df-452c-9d70-8ae23a93caf9\n3d887a67-b85d-4814-a1e7-a7a51a99a8e1\n3c273ead-da04-4a68-a226-a78143baedb9\n32fad465-4702-441f-94ea-0650ddbeb143\n54028a2d-6fa6-4177-9103-e01f9603e689\n3a1bd9bb-8741-4c73-bd4b-0a65a171fd2e\n2acca9d6-db2c-4ebc-bb55-c4c2304c4d3b\n7095bffd-dd0f-454a-953f-81023d330874\n86014063-ba54-407d-9181-ca0df9bf9fb3\n744b5fc2-54e0-468c-92d3-ff4dd4f05973\n25043331-8cfc-41fb-8cd3-24c9acbf14b3\n8b594524-9736-4940-97be-676b0e5da42f\n90d60688-bcd7-4199-ac1e-d9b7d6e68074\n8284a044-2631-45cb-a0c5-ce5b59691a94\nd084630d-f90e-4b33-be04-5910e0bc4569\nd1530626-0abb-492c-86b1-b578fa7da0d4\n803dfc4e-d29b-4413-99bf-5d8cd4cd40b2\n4a0858f9-15c1-44c8-b5d5-04c27562b186\nee32879b-eb15-4700-953f-1c54b71ed60c\n3ccbf2c4-d775-4da6-8545-efa1f3620cb9\n98ea1610-c79b-447c-9f8a-66738a648b00\n2efa0b27-f407-403e-95b1-181c95c6c04a\n0f8fec0d-e457-46f5-a892-18f5d33da4af\nd4597fae-21f9-403e-92b6-f3dfd7a7c516\n1ee804ef-ff12-4ac7-a36a-1c13f15fd446\nccd8f1f6-30af-470a-9a54-1ed10e18531c\ne4ceadb1-2a7e-4255-98dd-6e867eb4dac9\nfb29d4d0-5144-4390-affe-98420c800d64\nba0c7b83-2bd4-4f59-bd6e-98fc0701fb2a\n885314c3-ea9d-44d4-b2a9-a953b4af7584\n7aacb5df-9117-4fba-885e-3b65d3870692\nf174561a-9b30-4d4c-9e14-23d1783252bb\nd10bc542-e517-4446-898e-c58e6baca85c\nf4a0958a-7763-408d-b4e3-4941b6dc03b6\n4e4f3c59-c67a-4b9b-9f82-042398fd12b7\n7cdc3f38-445b-47d9-9d6c-3ef0ace838d6\n0e43c939-ad3e-4b27-9781-29dfc4ed4f3d\n8c76b231-1b75-4210-86dc-98effeac1131\n6c99c735-5c80-4d5b-a0c3-84e8a4fb51ff\na7506c94-a150-4450-88c0-b35549d6bd4e\n4535d914-514e-4fef-8974-9319c1bb5aa8\n5a784c66-4182-44e8-affb-9c950db36f89\n350530da-6f38-45e7-ac78-310194750b82\nde6354b2-9368-4d45-b1e7-c9a37d0f1af7\n5d8d2f22-3c5a-4f82-b58e-4ca9a611f0e0\nfd0ddd9e-ebc8-4672-a51e-abbd0177844e\nfda4cd48-2bcc-4ff1-88d7-3c65b963994f\nc3d9313d-dcf4-430c-b8fb-338200756312\ncc059968-d7af-4332-a92a-bcaeba58071e\n272d77a0-e38a-4036-bc84-76f90c614433\na8d80c8b-9ea4-4c3a-8057-dd272d31d25c\n7c214c24-675a-4e5e-9e1d-8d698fc9c408\nab3c18f2-007e-48d4-9606-67cacf5864c9\n5f659a04-a8a7-4551-9101-e00744fd410d\n021b3345-03ec-45b7-bc86-2c7f7cb50eea\n169298ae-a622-40ce-81ec-14ee701b1061\nd4d1a6b1-4d63-471f-8b69-4ffa6c59029e\n9ab3bc4a-3bbd-4a4b-837e-8360a8c76405\na7550466-d385-4939-bf16-52541a71ce2e\n9e55dfd7-c6e4-4fe1-aba4-1ea100fb0c8e\n882dd46c-f684-4823-8235-2a89fb8b2df3\naa1e0d4f-9393-4299-bcf7-962faa38045e\nd7da4ebe-317f-4211-83e8-74478871a859\n2f656e48-c599-4978-a7f9-2d711e641878\nbaef373e-492d-4040-8556-fa6af89c7b5e\nd7a9db59-9ed7-480a-9396-27474979bc57\n4b189d19-06ef-40e8-8177-2510871c94a3\n82710d25-3a33-4932-bf02-f8519382dae7\nc661fbcf-4f21-418e-b3a1-9b8868f83086\na5ea8944-1c84-4a38-877f-1de826e13be3\n9c090075-0e36-4bad-94f5-4f5c856c8541\n061716d8-9549-4d51-ab6e-f4d9299f8bb3\n56e99402-8044-4966-8360-395c8df1ad96\nf498a75d-8b67-4be1-9f17-9e3a5f0d6f03\n2f175e84-afe9-4f5c-bd65-72c658b6c080\n7ac301f8-8ffb-4265-88f0-2c1fc8c2199e\n08381b98-728a-46c3-a1d5-9bde8b1c69dd\ncee19e6f-fc0f-4af3-99e3-2d1c130f61de\n446949f3-3651-450e-a0f9-6365cc41df5a\nae3b66ce-f2c7-4bb8-a808-5191425c6756\n8fbd20bd-4019-4f75-be9c-237275f278d6\nea61df8f-ae8f-42df-86cf-c97c5005103f\n2b6b3c50-4f60-485d-b3e2-5f3c6eaf01f3\nb5198cfb-03e8-447d-a96d-35ef7f181092\ndb387579-6d57-4f1b-b3bd-dcadeedc8a8b\n5c8153c8-69dd-4b4b-96af-3dec1ffc995d\n58721a05-c657-4da5-bfcf-15dad2f4ea11\n553645da-f553-40be-b524-58dece06c0fd\n13844c42-aff3-4f39-9dde-538de4aefe2e\ne95e3178-7de3-409c-b5e3-924c36cd7ef9\n514f9eaa-11d5-4170-900e-e1b7a1c4b4b0\nf0605af2-7f67-4fa6-981e-e7d74451d9b3\n857c34e7-f1cd-4467-8344-4751a8d2d5e9\nada077df-c5a8-411c-bb8d-e7a7f7820a68\n917390ca-e48c-4071-9096-8abeaeb1c8ba\nb35c075d-e621-452e-9f89-6f35161c94ce\nb4d04086-7c60-4188-bb10-2b00ca7f4320\ne8f719a8-e9ab-4b77-b99e-2c1c23b2f2ae\n76a9cf3e-6097-4b6a-ae7d-d7062f8779ff\nbf282e04-ce81-412e-a136-77932e729a5a\n95afa28d-3599-40c3-beb2-746422dbb66f\n5ef642f5-6d2b-4023-9a28-a60412770ce4\ndde094eb-eed4-4bba-8b84-9196d1a9eb3a\na4be0bc1-3ff5-47d0-8d61-813129a7d9cd\n6ea1c7c9-c17e-4a25-a65f-9412b28cc408\n9be78592-a1db-47a1-a3ab-ad8a0ea2c87f\ndf01fb51-d684-4c64-969f-ef12d8ce1b2c\n763df7dc-e688-43ff-aaaf-6a5310cf3909\nf05d2c2f-5ea9-4ecd-bbf9-de7e14969fdc\n893c025d-1cb6-4433-bc47-7c243d461e5e\nd7e828b9-155f-428c-b246-73b349cbb2e4\n2174ce05-4c19-4782-8fb6-9943f8f06b2a\n7d4d06e5-1fec-484b-8993-31ea38401114\n0479005c-bf42-4b46-a7d6-df2d1836e0af\naf9a189c-96ee-43cd-a6d5-7d18f2eb8b29\n8e97e025-37ac-4084-8782-a923b9cb3565\nda17f8a6-909b-4ab6-b737-94ac6cfffbf7\nb206af1d-4b96-45a3-9e03-cddb3ae7720d\nb90086cf-c478-4f34-ba9e-d32efc5d8b45\ned4b1102-8cd9-4563-ac22-be8098b0c0b8\na8544bf8-ac5d-4b7c-a174-c69fa89b1e55\n17b9707d-135e-4d05-a890-537aa384e245\ne8583f9d-6998-4153-b9de-1fa0bd103d97\na89016e6-5315-4385-a181-4da896c256e2\nd73e3e12-d4c0-4c10-b65c-50c882225832\n112cebf9-21f3-4911-88d7-77c0032bccc0\n246d5e1c-a44d-4832-a533-d7c413c0aa8d\n95cd6fc2-9c22-4dcb-8968-fb8160561f03\nc972f7d0-472a-4d59-8c77-a34900e4060f\n3625d159-f601-4513-91f5-7cfebb185ba6\n6f567433-b3c5-4052-b99b-95f54a05b4b4\n97583eb3-b712-4fac-9488-48f79f914298\n5cec696f-f3d6-40f4-953e-3d91711ae16f\nb8cdacde-045f-40dc-b14d-8c4f0b44b29f\nca6d3eb6-2c04-48d4-9ea3-0cd5a5f19e0b\ne8d06896-4a9c-40b9-97cb-dd369ffdab52\nfd46fe6f-ce94-4b88-90a7-a57eed067f6d\n1f059af7-d841-4b72-bbee-0a789e29cdd2\ne3b03ccb-6b51-405e-9a36-b5733ba98e63\n6a8bb250-cce0-4bb1-b90f-0c5cf2dcea14\ne9c24978-2889-4f06-8b2a-de3f4b69c070\n42796d4c-b4cb-4eef-ada8-7f2965525e16\n6facd9cd-2385-49d6-a2dc-83dcea4f3375\n249e4eea-9031-48d5-8cb6-3c89922369e4\n6e674389-c51a-4a81-b190-7d3409c19ee6\nc8aefe70-1f66-4457-aaae-647da6277b68\nd84a12ef-a92e-4719-a50e-8dc8588b18e5\n0b170613-417f-4b56-b8c6-55878f936055\n7f410a24-5516-4585-b722-faa9eddc0ae7\n181cd188-1391-4533-b651-29455ef56323\nfafe2cf8-cab6-4f24-8e90-eaf0b8257409\na59fd214-36df-4964-aa0d-0e4cbe2a1e21\n4cbe24e5-4720-49be-b301-ca47b95633a3\nde97ce42-a8ac-4b4f-9663-6d86aa7bac09\n6cd0339d-8127-4b0a-915c-4e90e8d36f86\n5257cf4b-72f3-4f5e-ae0e-358f4c971cca\ne0feb683-d929-4e6e-81ba-3f3e38f032b3\nd879bc51-ba5c-4c1f-9aed-d745d0d2343e\n943d6481-ed7f-4126-82a4-d336ab3e0e27\nc47a0d2b-03f6-4f92-ad16-845213661e9b\n6387fa65-8e2f-4558-af56-6042d01703f1\n35b3737a-9cc8-4882-81b4-451854611f4c\nc0e6e3ae-7610-42ba-a513-84107286c672\n97294fdc-6372-444e-a4f1-5c8a8c3168c9\nce156ea5-3a5f-4703-bdc9-97a194740173\n94a1581d-5d08-447a-a33e-1bad9b1b86ec\n9b147ecb-3f23-444b-a6a9-2e9ba176d402\n509431c8-8dfd-45b1-94ec-0d956bfaf8d0\n99f6daa9-ba00-4d4c-8a36-0671a0afb8b4\nae9fa43f-767d-42aa-b80e-ac64b553abad\n6c52e939-1bfa-446a-bf12-1fcc10e9672d\nf80e4bec-7f46-462b-8abd-4c266f75f0dc\nc2c8c261-e651-4bce-95c5-e7082a2b7b2d\naada767d-bd2b-43d7-b4f8-cfaee40640af\n74b19099-c863-4bb0-ac1e-20e652cc39d5\n3738fb15-ee25-4488-bcb4-44e535e122cf\n7363924b-cb94-4fda-95a7-8803958173ab\n49925a18-e086-4722-9dff-6d00fe2782ec\n515cf01d-9965-46ef-9f14-1209c8435899\n4c087ffd-c972-4f7d-b3e8-a11b91190d2a\n0f077cd1-a26e-4961-9994-c46b3505496c\ne6fe1683-8d54-4697-94b3-b04791f0374c\n466a373f-0ce8-4056-b57a-7d619c36154e\n97fac0a8-1fe1-4888-a16f-9a129658e427\n6a7c9a2c-6175-4cc1-a404-671b3d12513e\nd7b59d07-c889-4b0e-8055-e7619e56a28c\nac26e56f-2b17-4e1d-8d5a-3dfa75624456\n8ccc8f7f-33f1-4e0d-aa40-40f7dc70edec\n9809dce1-96b3-45aa-9bf9-2dcfefdd4e7c\n0b18617d-2734-41e2-ad1b-f6e915cddd3c\ndab73cea-d66b-405e-8a53-7bca69d2f1c0\n108e7cf1-b401-4ecf-bcc4-259da2bdfe0d\n159e1993-ae9b-42cf-8228-fbe34ffc9377\nbfa48d32-ee33-4d00-bf3f-ac6744f48295\nb35d39bc-0a59-479f-98a6-1692ca439079\nef91c7a7-d855-4562-b1d0-b443d814b3d4\nffc87800-cd67-4a55-9b7b-1fe69be07a9e\n29cda154-8d49-4f75-be7e-c44a7bf12f6f\n19f345cf-fe7f-4a3c-8da5-a027ed9c60db\n39a40f2a-659f-4074-a4dd-dea627167bf5\n4da1049f-8891-4e56-b247-22ea34b97376\na6585f1d-095a-478b-afce-2c1b7e3eee05\n432631a4-1c07-4f71-85e0-2feaed3ddc38\n9ff47ebf-b94e-4f88-a1ca-341271cd4d8a\n64c1be9c-112d-4d4b-86a6-ad741df0adcc\n858ede70-04a4-44ee-a71f-f3a021568612\nd588d037-d2ea-4891-8883-478849eaf46d\n02d2927c-ccc8-4b04-80a0-20df53318555\n33bb1c51-6e0b-4c15-8ad2-c17f5fcdee1b\n8e6d6f56-9935-46a3-bfc3-41005dca4bca\n8b2b33b1-3a62-4d09-92a2-ab7fb0574a8a\n9393f139-d182-471e-bd98-b307cf491722\n0bdf3319-2282-43ec-a2ba-cce093d38909\n00ec73f5-f394-440d-b830-d86d24a29a75\n3c0f2b6e-105f-4939-9a3f-8d911f0a03a6\n98d48c69-5316-479d-91d5-27cd1fec2174\n59070986-ac48-4e43-af6e-7f9cf2e0c29c\n1cd4ea8c-e995-4782-8299-85c825e11b15\ncc2397fb-e2e2-45de-a281-5a311ab1f4f3\n3866e90b-c3aa-409d-be73-6e011fd9fad4\ncfb36a09-13e8-4ed1-b1de-13c6f15886d8\nccbe4b1a-0bde-41fa-960e-5f4d6d19a1c2\nc11c10db-73c4-4c76-91cc-061b9bd26385\na3fd93a9-07fc-4911-acc8-b03654de3a57\n99364d79-f4bd-4afb-a8e0-4cebe43cd0f3\nda45582c-516f-4571-a89d-2a9a296f027b\nb10ba74b-3ca9-45d3-a409-64003040654d\nb02ac31c-af1b-4d2b-bd58-274ee49b5ca8\nd595587d-a01e-4e1b-ae74-700dcd7b7d89\nfd9f5aed-c387-442c-a116-9288df7f9173\ndce6e2be-a67d-4ef0-a85e-b86dfd4ebf04\nb5d1578a-e359-44ed-aa1e-4da01826b039\ne23a0497-85e3-405f-a78d-fac3de789662\n11584641-1baa-409d-9413-da233b4e237b\ndf448a57-e3b9-41da-bea4-1b001fc6f0f3\n03ba8d20-a281-43ea-b87c-7ca6fe7e2bf6\n752988a9-35cc-44a1-b6ec-e41f68c67a65\nef9b7330-bcb2-470e-9fdd-b2da8bdde296\nadd19a1d-8eb5-484f-b455-d101027a08f1\n4a1f7568-97da-45b8-a14d-ad5d83466b80\n5aee08b9-f41f-49ec-9dac-d3723a2d3c39\n7d6d6f6e-c377-4f51-a635-bda960aff814\n607c718b-16b3-43c1-80aa-f55622244c94\n6a0cd2fb-9bbc-44e4-a741-593391b01999\ne1d4c431-98b4-4710-8adc-712bd3ea60d4\nb3ab40a3-b71c-49ec-96e4-82dc47660f6e\nc3146af2-18ca-4db8-82b3-8e72bbcebe50\n9445e28c-e397-4cf4-8b55-8c07229acabe\n1a37ba7e-5947-4fbf-b3dd-e37312f4a7c0\n7af525c6-3107-41b8-9cb2-21bb02043078\n24417145-7fea-4090-b12e-b213a438e4c1\n20291fde-91a5-4702-893d-6b49eb52a55f\n4b1ccba9-9473-4ebb-b925-f90f8d4c9645\nc87c1aba-16e7-4b69-a46e-961c9eb9408a\n43a35ad7-b2a2-408c-a615-017407367074\n1736522d-6709-4ccc-a4c6-70898e73f22a\na4c5806f-0e80-4e34-8679-ad7b8ecc0910\n74d36312-bee2-454d-977b-d88e2351b7a6\nd150a1bb-d14b-446c-af82-bb03d4d13d7f\n2d7bda31-e7ba-48cc-b25e-bed7522eea00\n380ad3ef-8905-423a-815e-4bf2e1045d35\nba9ef07d-13ff-4b0b-a7b2-4ea3510bbcb4\n2d29ced1-df7c-4e84-a220-571f3ce8f3c5\n2fff3165-8a77-4c70-9675-f49e261b37a7\nf287b310-5ac9-4bc0-94cb-b4c0197904eb\n6bfcfa53-b659-4a64-b44a-3f0d62429208\n8ff5b20c-b57c-43c6-982b-cc7b255a1376\na2d06eda-d6e1-4cb3-8a8e-98d3d85f146b\nfaff872f-c00a-4ca8-bde5-42741f39c0af\n89a5d54e-c50a-4a6c-a351-addb078e4338\nd1571b0f-2e0b-41e4-b53e-450e105fa5b3\n8cc6f4e1-1a96-4065-b448-7ef7cc747126\n6d66237c-68a8-406a-889c-bf7b3516648a\nb06d0022-0dc0-4c26-b775-03012199029b\n1151418d-c7d2-4c8c-98c3-688c3707ad32\n904ac0e3-3171-4deb-8665-1f1237648741\ne1811719-c392-4d5b-9904-cbd2ae1edb77\n5df53496-0721-43aa-8cd1-d166f83a0d27\ncae0dab4-c7d6-4ad4-b9fb-093714270e45\n6a117216-f5d0-455e-bd73-956b0e71dd06\n1e92456d-3f3e-4885-8943-360b5dc995cb\n33c50f75-142a-4afc-8595-0f7573202d76\neb9277fd-876b-445f-a950-6e134b6ac3c5\n63e9916e-a47d-4c37-9dbf-05c3856f6507\nc6e6bdbd-977f-4e30-b5f6-f3a2bac19db2\n3bfbcc11-4bad-4381-8452-747d7bd00f9f\ne53bc4a8-fb82-4f74-bcbc-1c78b32bb75f\n7da2efa3-1050-4ce2-8c52-9f3a41f91c34\ndb9169fa-67bb-4238-9309-a084b7ad8ee3\n6460cc73-fb9e-4a39-a7e9-2792c30f0f41\n141a1faa-ce90-46bb-90be-58e6fc79a3c2\n78135e9a-bb1e-407f-b329-6cb18b738439\ncd46a7ad-847b-47cc-998f-01a095d60f3c\n755d0e2f-698d-4d38-8961-7283cde6148d\n7d9b24e0-df81-4dbb-9f46-17a4d8d630a4\nf83064bb-fdb7-4373-8e66-ba05a1322dfd\n6b476db9-27ce-41d4-b76a-7d64e371562c\n517cba8f-401c-4da4-b850-a6a4c8e24818\ne04ce187-e9bf-4200-8e9c-054ad266b914\n1162c626-c473-478d-a2f2-cf2f72377a97\n810109bf-fca0-4de9-af54-e18511b06ff8\n95b0776d-7757-4bda-896c-52cf0158f717\n426cfb0e-b648-47df-8625-7b58214f27a6\ne2f853c7-7a2b-4364-a787-aa3920ba2b8a\nffab4a82-1caf-4d4b-8d57-182db2d55e93\nabe3bf4b-e036-4086-ada2-0023bd12282d\n8c545b5a-fc81-4b19-90e6-4b6b8914d0f0\nad00bb90-418c-46af-9440-5046f1c8709c\na88c00e2-0e6e-4e28-ba73-2f8ac55e0342\n0f1221fe-5424-419d-898b-8df2e919a050\ne5b04fc4-88b6-4c34-ac02-a41da4bee32d\n0a42479b-790d-4ce4-80e9-de34430dbfbb\n423d5416-7fdc-416d-9c06-0d681b792bef\ne3989756-2b3c-49bf-b084-aa38950bd116\nf1c89a24-5723-47b6-aa5f-0fc586de3865\nceb56846-b039-4c0f-bd49-24cb0a74d598\n812be203-e6d4-4db4-88cc-02a028a3eec1\n095bcef4-5c83-40b9-a1ed-a7a4014a5207\n880b8586-394e-4f6a-9ff1-8efb212e3b13\nec502e0a-8231-4ce0-a16b-257384feb3ab\n88d23804-e420-42c4-8269-44c641bc735b\n6f8c6623-b289-4cf5-a271-1a823ee971aa\n165c447e-cd74-48d1-b9b7-50b6b7bbbbf9\nb19df445-2eff-48f5-b5c6-7ef2322b4c1a\n469e255c-763e-4fa3-bc9c-221efd66cc3c\n8c45e03e-2f2a-456f-bc72-d486a3e6821f\n59022062-f358-471e-8501-fe9398bbc297\nd48d8cae-bc35-4ec2-94ce-53d4a872390d\nfbaccba1-ae91-4f25-884a-fc089a344bf6\nb619062d-cc98-4edf-9825-6c939a87e43d\n288ff437-2738-47e3-b442-c32f553cc231\nd3acafbc-4b07-4a3b-8b83-bd6953404557\n8bf82a09-ef9a-4d52-95bf-9ddfcc6dd94f\ncd8c3261-af2c-4029-ada2-678a4a57dad6\n47ad5e48-72bf-4e78-8d07-5f764bb0df3a\n2e9dad97-47ac-4775-90dc-e7e58f28d13f\nc879fe4c-bee5-4785-b657-902461cca3b5\n8f4faa9c-2c52-417e-951a-1f7360867c99\n33feb903-7aac-4c11-8721-aa9d89bad676\na07065ce-05da-44f3-8b03-e2cf6220b4df\n1c482f52-6f91-4c1c-909e-b22e21882a42\nc744fbea-2ac6-4476-8855-ec365293fe1c\n60ae6d78-f5a7-42e9-b205-f96102ab24b6\nf1237e4b-229b-4367-aae6-170068d141e8\n09a460e5-6e66-4c3c-a333-27c9534da446\n3861fff2-7900-49f1-870c-f69c3f2c3192\n08f54919-2818-48c7-8bc8-51b0905aee2a\n4d3482b6-97f6-4c03-b2f2-3b4cf952b1f9\na8d618fe-35a8-4c24-9c3f-9f9b9d1af01a\nb16c73fa-7cf6-4f77-9102-7490ce5ba775\n83f4906b-bb08-460a-bcd6-8676aa04520a\n9a1e8e58-2c2c-4fe8-b467-9e81bc4c1f2a\n1a673f67-8d8e-49fd-9d3d-104845299009\n11caa910-5594-4443-8b9f-8de4769339bc\nb73f0152-ec30-4649-8b9d-e93d5c97e486\nf3c493e6-62ea-45db-a904-cf5b60c4ab9e\n97ef36ae-863f-43be-9483-aa3f794d7be0\nf2c7d262-3a7d-409a-b298-29a99e3dfadd\n1b0754b9-92bc-4861-b3d8-63a9d0b6aca6\n80da2a4c-c3ef-4aca-82b6-044d082f57b7\nb73946a9-5779-476c-aa81-ee68aa67423f\nab93ffbe-0fcb-4a9b-beef-481d43b61010\nefc84918-cdc4-4a40-866c-27fd1bda4780\n6de2f8ff-d907-4a0b-bc43-614cac6e1272\n7dccc68d-72b4-49ee-9e52-62e1afe76870\n418bdfd3-c452-4bdd-9139-3f96ebe7da94\n2f49a2ba-24d6-4d5b-b7b3-4114cb761e6b\n07045e5e-7262-4180-9436-40d41d10a718\ndccc376d-065d-424e-a631-259de9a3a580\ne475b41d-2c64-401a-b2fd-455d379c17ed\n7dd8ef84-47f9-4fca-819c-9f35cec122f6\n68ec38ce-0693-4820-932d-9172dac7425e\n6ddd4ed3-9a67-445e-a033-fddcb8dc7942\n57590c0d-1fc2-47a7-879f-6e5c12864ebc\n0dffbd5e-c456-44d4-8773-1dedd18f74eb\nbb82a8a0-8df1-4065-830e-30778de304f9\n32ae9fbf-05cc-4f3a-bbee-d4c48baf3d6a\n3a100461-1d7a-4083-9893-e8943f5e6bac\nb50a99c9-18e5-4da8-be19-dd5a0d9ca590\n4c37adac-667b-46db-82e3-7bad85597ecf\n13aab72a-414c-47c9-833a-34560040b1b0\n10df57ad-1024-4593-8764-209e97480be0\nc2c716a2-29cb-4296-82cb-0693242818b2\n4841c866-9744-4f5b-bafb-a0fcb1fce1e3\nc71e8766-f1a5-4514-9744-d96abed6fbe0\nddce100c-4515-4c6c-bff9-735ef382ee7a\n9fe132c8-a1b0-4f7c-b6db-01e9e3b56166\n4c5ba377-d06c-44cc-b1f5-0b3ea71a76d5\n5b8338c4-4a70-4826-a9ad-4445cc28b88c\n35a7b300-35e4-4bad-8495-c3cb4ee95710\n039ae3c8-0843-47ee-bd5d-a0fa6b939730\n5851778a-0144-4391-b4c7-f9d932a54fbe\n0bc5aa9f-b151-4166-850e-4d849645812f\n1a450698-bf56-47ee-9540-592a4dc8a1e6\n8a1f579d-4925-45c1-9072-0a63306ab5f7\n95c2e3dc-148e-422f-9494-9019012dd7c2\n0e7ac1d6-754b-4cfc-8dff-7b5c8b1564ac\na640ce06-5112-4bf4-b008-5c3baf4891fa\n3a5dc9d1-e4e7-4231-8ab2-c99d467bb898\n1c82bc7d-f73d-4724-b1a6-ea766400bfb2\n7cf14136-afb9-4cd3-a0ab-0de484d9dcb1\n571c4dc8-a005-46d3-9f5c-1fff7c084e20\nef8d9d9a-3ff1-41a0-88ee-1b5ae57e99b5\n8b06600b-dfc3-4b84-a06b-c977fa659e7d\nef14131f-b120-4093-a231-a618e20f0f69\nc4be57a8-8a71-471c-a04b-6599d7d7f84c\n822eeb33-396f-486a-942b-d782f9652d62\n03abf0fc-b415-4736-94b4-719e87e511b4\n8646535d-a13b-407d-8962-f649c144c86d\n5bfa115f-0e83-4659-9641-3224b5687aae\n93c63bc3-6466-4c3a-be41-c68c6ba47c6e\n62296a0b-7ec6-401f-bf02-f6adcc647912\nae5b36fc-55fa-4654-a945-256075c58738\na6c28eee-d44b-45f2-899e-167023f0e3bb\n5b124d61-e1ed-45ca-a739-832aee536513\n7a8adfc3-e9ce-48e7-8109-e34fdf25f163\n9d406d48-f0ca-4403-84cf-05d46bbed87d\neef9ea06-4b2f-4e04-9013-618a13f8ee14\n4418d0c6-ba7e-47da-9526-fa2938ed0512\naf54d1fb-1b82-4249-a813-cb9cd5e1bbce\nc4675659-a458-4511-97bf-2087d18161c9\n35d27940-ce2c-42c8-a45d-96c0d40d1546\nc64a9a27-6c68-49d4-8473-b5b5d964023a\n6b40f986-04cc-4c6f-873a-976cb38e4005\n6a4df009-dcfb-4b5d-91ed-8a479769bab5\n26b65691-97b2-4547-8bc5-fe17016089c3\n5d7f7cd7-a69c-4b7d-981b-b0e16e43910a\n5c82d854-8c93-49a3-813a-de46a082aec2\n406d5e4e-755d-46f2-9348-8c476c512c53\nc2bdba86-1f88-4ab6-b352-c3e259a79e9f\nff778dca-b9ca-4906-9244-c92e947065c0\naf4fe40a-d7b0-4fd3-8716-84b3642ca2ef\na19ef21e-1ffc-47ef-80ce-9dce822a6dec\n94084d7a-9d92-4c85-bc75-182ee9c4c5a9\n22efe4a8-f787-4062-97cf-eb70c7b87215\n344d8f44-e3d0-4dc5-a9a0-6c73f9f27729\n2237c66a-28c0-4133-9383-48bc10a3a8f2\n76bec999-c5a9-4fe3-b645-3f48e4cccc04\n35f6e07a-305d-475e-8c4d-8c1e2665a265\n80a5930b-4982-45cb-98bf-f9877b352430\n0a1350c6-a811-49ee-9259-bcbc839fae3b\n33e5ab6f-2141-4083-b632-47da383a21db\n53e6d459-d696-42f8-87d8-dd35756698a0\nc3950395-9b83-48bc-b7db-2f381e787d3c\n76874a0a-e632-4208-a33e-4adf82b5b6a8\nec6ff9a9-0161-4cf0-b24b-43354462bf4b\nd6e209f7-0cc7-41c1-ade1-d5fd754bc2d2\n7ecb3cc2-1078-4c80-ba84-4265f402a2ca\na2355c7b-678f-4fbb-87eb-1aff4bdb029e\nf5e995ba-c0ae-4625-902b-d7ca1ccb6f99\n7dac3d47-d201-4936-b26e-e1b86f4fd67e\n94449ff9-fd88-4fe3-be35-49a703c1de7e\nf5169090-dc26-418c-996f-3f2b8a137749\nee15cea8-d5ae-4f9e-a7be-bb8ba3f53180\ndabc96d5-ed06-4b65-aaf3-4a258e0658a1\n770b6915-eb26-4f4d-9200-6316867ec7d1\n097e2282-2c42-47ea-94f9-95b65262a798\n424054f7-2995-4af7-9e94-8b542bfa2476\n2d1b4f95-943a-4971-a2d0-7dac3af03995\n110079e9-50bb-4a47-9c16-e8db81ad1955\n80d75c3d-4a01-4bb8-aa07-6d0b51b3c576\n7eb4a2c8-2d28-4a41-967f-b34d681c6292\n6382a682-a465-475d-be0e-79a51e06d32e\n2844504e-113f-4580-949b-baa221afc850\n174aca59-cefe-4907-afa6-cb35d039b4d3\n4ae6f318-9ea4-4f77-bd91-5a83be4efb0f\n5994e686-0ed3-4272-850e-282d718506cb\nfa6d1093-0178-4355-9ebc-9afcbde67bdf\nd939a06a-a4f3-47e8-b857-c95372d568bd\na3700dc9-3628-4961-ae12-6924d5d9ec17\n5f278717-9928-4d7d-b54c-693b0ad6b308\nffedbc61-787d-4e1a-8b05-abc9e637959c\ndbd93f8b-51d3-48b5-8cfd-150a192b49db\n12129178-a816-4432-9720-fcc87c825af8\n75003977-8f63-40d9-b1a4-a352a043c8a0\nc48416da-41a1-4df8-8f9f-11d906f9c181\na0766e21-79f7-4913-ae23-9e4f6aa09e60\nb892c71f-be5d-4f21-b554-5b7efdc6e2aa\n8286a93f-09ca-40e8-9228-c058f5af21b6\n74f316ff-3062-499f-806d-1712458e6900\naf471317-6c09-4a1d-8920-b324b7bded92\ndf60b42d-4e3b-4a55-982a-22b6ff443214\nba169d11-af54-4bac-8c76-4d3d3cf1c1c6\n870e57d8-eb84-45f0-996c-d62aa6ea40da\nbca77294-8649-4925-ab3d-cba87cb7418b\n27a18a1d-22ee-425b-9462-f6a3f332b0a7\nf508d962-b15f-4ccf-bbde-62e0550041aa\n3e2ee6a6-c9be-46b4-8ec8-dae9246829e0\n2dda4564-31a1-4c11-8ba7-f94ac5b57c6a\n8f92f463-3c45-4e2f-826a-19933c77c9fe\n96e19453-71c0-4d5f-bdd6-a12cab2fc3e8\na1a48a3d-f455-4ed7-aded-a63c7952da84\n807ab57e-67e3-4152-9caa-e275856ab1e1\n9e170de4-b929-48b7-a653-9c27af939a34\nfcc099af-d99a-44ef-b831-e4dab0af55b6\n347fc58f-f13f-4bb8-beb1-4d8dbd136813\n890c62a3-982d-4202-98e7-7817fa651a41\nd9a61902-9849-4e9c-af4b-4d79f5cde6fd\n696ee136-8698-46ec-a9ed-26a91016d920\n7e7f91ce-0551-43d8-bc6b-e688d35723d1\n2e6e8e6b-c025-40c1-ac85-30a39165c84f\n22e0f575-f98a-46b8-b865-378ea6fd30f6\n100b4645-8a12-44eb-81db-e4edde6b2a21\n1458819f-a655-4e7f-b6b7-54cd34a30683\n79926b80-29e6-4268-9c80-8ccdb8957a1c\na27ba4cd-3d08-4e1c-9dcc-6aab86717938\n52265fae-f47a-4944-917e-5bd09b5dde62\nd72cbd43-b32a-4ab7-a3a9-1124c6546d1c\na1cd268f-326d-4764-b854-72c7e36bb74c\n9439279f-39c8-4ef0-8621-d03d104250ab\n8df64bcc-e33f-4834-8705-9e0a6afc3810\nd39cf1fe-479d-47c4-bfe1-aad8625656ef\n9f6b462e-2d26-49ef-9686-11ce08bef2b3\nd512371b-9802-4866-a58f-41e54191bd92\nb8c15609-3d90-4cf0-84a7-5a1cce032e98\n29cce64c-410a-479e-bda0-96413b5bf6ee\nbf3c5f5c-0ce6-40d0-b271-8524e105e8ae\n6afcfccc-3899-47e5-b7bd-701ac6f13c09\ndef5ed49-14d8-4055-8bf8-f3255b9a2f33\nd5db6280-4d8a-4a9f-8ad2-c8aad2c1016a\n8bcd5d9a-8782-424a-8643-4aaf4a36c049\n28ff62e8-fe7d-4015-a916-63dac1ae07b2\ne5b37e38-a035-4382-a38c-2adb0dc14a0c\n04218e29-1f8f-4151-8a1c-51725cfe1a7a\nb46d91ca-3978-437c-a2d7-d4dca479e646\n65f2a589-bd6a-4786-995a-4b265a837d33\nb40d9a4a-9cbb-4a13-b85d-9f0e7a0dac8c\n8a6502bf-dfac-46be-b0c1-319ea941618d\na54fa51a-f4cf-43ba-a7de-3590008bbd8b\n8cd47e52-c0ce-4296-b6e5-78aad294b610\n5e4b51bb-7069-4e17-87ee-53cdbccfb20c\n9b8e1f68-a646-402c-81c0-7c8d346876ef\nc20463f5-31f7-4bf4-903f-c3c0064954b0\n293d3c15-9d75-4f24-93fe-430459499dca\n5ff38555-4a69-47f8-b333-adf8f727b909\n29c6080b-8087-4a68-9008-77a58cf9fdd8\n970fe55e-e2da-4250-ba0f-c3f7f3da223e\nb3df38bf-fdb9-4c24-b92d-3155a539456d\nd22ee216-19de-4599-812f-5899ddee52e1\n1928e328-90dc-4033-91dd-76b7b5e3bbbe\n1f34ea45-6e59-42a1-b1ad-daee29e3f26a\n9e000a88-862f-44ce-bae7-8f2fffcf908a\n42e2df2d-9ff9-417e-9ec9-7646cb958bd9\n9f8a16dc-2943-4f6f-8c7c-f4190471beb3\ncb549486-397c-4630-ac82-a85384445878\n3dab557a-009d-4ee1-81c9-49e7b4cea839\n48ba544d-0e8b-43c0-9a8e-15f3446623fc\n78e2871e-174f-4eb5-a62b-606d6c3dba4b\n5278ead5-61cf-4c28-b5f5-9962e6a26d82\n8cbc761f-f634-4e14-aace-64cbf3e0cd82\n6b1ff89b-7058-4501-a14c-dab0b0d5a5a3\nd8d84644-0608-4598-89e7-622a9b26b673\n7ed4cf12-57df-4311-89af-40fe868c38a4\na7ebaa93-aad0-4c0f-8123-6b879e47a4be\nb22b0820-0fd5-4d3b-ab21-9a67108ccb8c\nf1f1df89-21e3-47a4-a16e-71fc6cbd91d0\ne7459c95-6edb-4fa6-b64c-e359444a2a62\n2b6a7b34-a58f-4ed5-8524-77fe246f7350\n98372dfc-7de3-4870-80d3-219f8ea268c8\ne766895f-e463-4c4b-88d9-dca9eff968a2\n9706f9eb-cc4a-4fb4-95a6-df40e318044b\nc4f19b67-d31a-48f9-862a-4d66212458aa\n37e8e0f3-14ed-4bc5-a8c0-61c75dc78b2a\n2565377c-10e0-420b-a8b8-6056d00da1df\ne9aeb828-752d-4098-a1a0-93f0d71f1267\n1e15f6ff-95cb-49e6-b6d6-56754db1c131\ncf0d35c4-e284-4378-93a0-6152027a2550\n30042d9d-48c8-4ebd-bc59-aeccca6f9e5a\ne3ebd83a-29d0-4aaf-8044-b32870fc7b57\nc3e734e9-437c-4734-8b4c-7dc986bd5057\n3503f1c8-bd45-4dd3-bcf3-23bf29110349\n2dc4cb41-e465-44ff-8051-3bd67ca1c003\nbd55e233-f327-4b1f-98d4-661ee5d98442\nb18d2a58-94cd-4e47-a663-6e522db1c93d\n8177abc1-b81b-43fd-9398-bf42a7bfac9b\nfca96566-bfbb-4b16-9be7-8f37e5ae52ef\n17d850d5-1d5f-4245-9255-c09bd3ef10b4\ncaf52e47-aa73-4e7f-a93d-ce685194459d\n7f5eeadc-a1f2-45b4-9256-69ea393cb5c9\n73b99da9-35f9-40d5-9d91-a088a8dfd758\n68461fec-78b7-40f4-8744-7f162f01b5f3\n2d4e8303-0f1a-4eab-aeb3-5a1f73cc006a\n5315dc5f-8c4f-42e0-ac03-4afc22107cee\nd761773f-cba3-4103-b3c9-c275cd188974\nc6007bfc-c3b1-4d2a-8309-b02bc6d9c051\ned8362b1-4765-49e4-b726-37e813f9271f\n2cd17ae0-0a1c-48b3-a631-60bbdc6fd325\n1e2c3d28-6d3f-42a7-81d0-62c5be291d14\n52f52aa2-a383-4f28-b6ad-b3fb9f0519f0\n6250204c-d8eb-4cf3-a148-80b6fe51239a\n20c6a86d-aac7-431a-a86b-8cf8464f25dc\n70c86303-fd22-4291-8433-609f9fa0e495\n7b7fe644-ffc0-4a32-9d91-55e830637b9f\n6c5fa38d-93a9-4a17-909d-a4dacdf9b8c8\n25dec143-49e8-4725-bea3-983a94b3f884\n0dc0ba12-1466-4eb9-aaa9-79c11801e0d7\nd58736bd-8d08-4323-95aa-55461b12526d\n0182ff35-8252-4bb8-878a-978238f3857a\n5d6d4775-fbf3-4f17-beba-6bb8ebca0bf2\nec038344-022b-406f-916a-26f8eb7cdb27\nd7e36dd1-81a5-46da-bd69-65ebc2cb89ed\n13b174d0-5024-4a55-b878-a3f1cf9c1ae2\n8bfa75b1-aa76-4f5a-af6e-4012ba93272d\n1640350a-ea62-491c-abf8-b5b7bb69a4bc\nb9c730f3-b367-43e6-af55-4aaa129e5714\n1b7770ce-f8d5-483c-b2a7-14d799e08d53\n8b18f5b8-04b2-4ac8-bb9b-ef8a1ca0f1a9\nda088ad7-b288-4f8a-9f6d-199621e21d33\ncc51ca49-4e9c-482a-aedf-da4b94e6cea6\n6f1adb60-9aea-4c8f-a9e7-da0f438dfc41\n78f7985b-5e1f-481f-b6d2-7e802f9283da\n0fd8a883-aaf7-47d6-b0bc-3ad8f6d04300\nd88bd057-a677-4376-bba6-9d56705d8961\ncbc4c296-36c8-41fb-b583-da1e696a0590\n26164a27-591d-4bd1-9762-2ed4388c8bbb\n40faf37d-384d-4d79-8ce0-56d92d9abaec\n87b1c0b3-83bb-450e-aa35-3ee019f50364\ncbdec922-ff6e-4a50-af61-a4687507dd11\ne93243d2-8516-40bc-b24c-d55691dba257\n467cc32f-3975-4bd2-be28-8fdea3dfb4c7\nce0052b1-ad98-4dd7-9e1e-087a13027eaf\n7fb5608a-7336-4fac-a849-5f4a4cc1c402\nede59dbe-bb27-4230-a494-938aa78ba327\n432fa88e-13ed-4b27-a302-fe48c8413597\n583abe51-d346-4013-a6d9-9035b2b5fd80\n55514527-2731-4bb4-b7e7-0ae45c8d929f\n8e9d3b73-a921-49ee-ac84-e3c61e92ccb1\n625c090b-b942-4a3a-84f9-eca378a2bf82\ne5fc71ab-8314-4b0e-aefe-ed7a71b135db\n18349f9e-b8dd-42f2-9717-3fcc37a29872\nf16eea59-7cda-48c6-a5e6-677540a95663\na8fb5094-9a8e-42dc-a54f-db028600088a\n04e76124-02b3-4a4f-96a1-745f977f4ac4\n9bd44f23-9451-4a33-910b-c9665cd0dbf7\n082196be-ca4a-4513-a548-bc1e4795c53d\n82983543-1409-4ed4-b0cf-f33b80e985b1\n3a035726-6e2e-48c1-a46d-9c24463dd322\nadb17bca-14a8-4097-a500-582193a6e03c\na167aae3-1548-4840-bce4-0cc93e80fc89\n3e2fd99f-c733-4b8b-b604-d5dc75ce8af7\n953267bf-d0a6-4ba8-ab08-ea05e64aff02\n2a8135b6-4cbc-48d2-9458-2a4434bc8694\nec2a2573-b751-44ff-90fc-f66cd0d9add2\nff5d0040-119c-4d5c-95f1-0fd71b2d91af\n0d6b6cb7-8ff0-4485-b7e4-dba3b94a585b\n1e9951dd-e295-475b-800f-837aba4d7d14\n7e0eef18-e8af-474e-be1b-816aad1b0d18\n0e471fab-005e-474d-b433-076afb50ee42\n8c14a214-9ee3-4ba5-9bff-92a5ee2dc927\n74d6e12f-0350-464b-b66d-21fdf79db33b\nab504134-8374-41a8-afe4-8b47db2b7492\n66081fbf-921a-47f9-81ba-b4fd4d347272\n73fbbf2e-7c2a-4bad-aad8-516575ced684\n1e71ba0c-f72c-4605-8a34-2d29f0bb97dd\nd2523e23-c7a7-4fe2-be64-62d3a7158be4\nac8a56d7-f3cc-4281-a519-3a56d79b7821\nd3edd471-5804-4861-ac20-57c3d97cb28d\n5cabf800-25c7-42d4-8259-8ed59a0d8ea6\nf29bac5a-7884-4533-898c-71c6fca0e9e5\n19b33f5b-4568-484b-963d-aef9105d82cc\na5e226d9-cd95-4b6d-9bd2-0dc02061569b\nf1272f23-8670-4990-8e5c-06b6327e502e\nedf621ce-ac70-4ab3-ac09-bce058bc03fe\n10904cd9-dc61-4f74-b4df-9f78592742fe\nb325ebae-ecad-42de-a570-e25213b9952e\nc47c3f2e-2099-403b-a8ac-c06cbfe6c0ed\n66dd220b-3334-4805-8254-8fe02bb5af85\n197dfbeb-29aa-4acc-ac8c-8dccc729b19c\nefecf3a2-a185-427d-97c1-f4e07b16cadc\nf848bcce-df91-4734-b088-b67de0504759\ne143d674-7339-45b1-aacb-78c30c36b829\n04a24782-6f71-4c3e-988b-be9183d8a013\n5153b6bd-f1d0-4a5a-976d-9e69ba332823\n77165b6b-1181-4aba-b2f0-db36ab54843c\naf59ac47-985b-48ac-af1a-0d12e288ac3f\n71d6bb30-88e6-4dc4-9fa5-305ee368188b\n540962c3-7d60-407e-bbe8-49dd803e4fbb\n1678d831-9c8c-4c4e-9e55-ed9ebf3a5306\n3109ca0d-c1fc-4d24-9be9-f804cdc66114\ne100801d-d58e-4c8f-9f62-00069f6f87ca\n0ff0b2d0-21e6-49fe-9971-0149c6a58720\nbc52553c-c0ef-444e-a989-0d0084fc219a\n3df1e092-7cc2-48bd-9bf3-fd4e9a2b9a00\n176a5eea-a26f-4b7d-bc57-689e99d064f9\n9e053574-5d06-4031-b60d-5bd9a6699c71\nf0fa6857-b7ce-4acd-8c93-1cb579e8e46f\nd0ce7d34-601b-42e4-be90-76e1948743f3\n54a43624-99e3-48be-8772-3008cf0e5893\nb36c87ff-5733-485f-ac94-d4e32a323c42\nd0a768ed-101f-4ddf-b948-1ed276370fff\n1b472558-4bca-4275-a167-f7a16af52b29\n9f23445a-8f7b-4775-ac7a-b4decdcbc171\n9afc33ba-28b5-4e3e-b148-61fba1dd4022\n32b7fe69-0024-48db-ad76-2315ac251576\n1f573122-db57-4229-9825-d51f424961da\n1fdf835c-bb6f-45f1-be31-96f5ea7d990b\n3f8c2b55-6ce5-45a0-a42d-474ab761c967\n7f87636c-ccce-4071-b847-fd60da2db027\n29d874da-e787-4a33-a948-c9360926d8c9\n55c3f503-1a69-4c93-baa3-b8841b974a5c\n55c1ff49-26d9-430a-8f55-d2a60284396d\n34569531-229a-486f-bf23-9dccaf1acabe\n467099b5-3b90-4c86-8049-ed0e601ad061\n5af25318-5c7a-455e-a66b-f5aeef3c40ad\nd8ee552e-2b27-455c-89b3-5c3c0c5bbcbb\n848cf295-8b7e-459e-8395-abddff04b794\ne238bc9d-43c4-4a75-b5c2-372e48dd7646\nb74fba86-0775-4317-8e14-c40f3f14b845\nef7456ad-1656-493a-ad1f-e84d81b566d3\n33597f58-63b1-47cb-bc39-74876e1b0956\nbdffa3e2-7ea2-46c2-8853-0c3b176aee1f\n35523da8-5379-4c00-9f63-b94cd198e805\naa2221d0-7d48-403b-94df-1b11bd0c5645\n679ee3c1-003b-416f-84e5-70db48ee211d\n5538566e-9d3f-432b-8946-654e47370e59\nfe3a37a1-41d9-4501-8bf0-e12b3fc85b35\n2fcac689-30a2-4eb0-89fa-286f01e0fff5\nf739affa-cc86-4b47-aaa0-63ba36aeb0ab\n580070ed-a6a1-4fd9-bd3f-7d95b65b104c\nbf3c5afc-5ef2-471a-9a6b-567852a7e382\n7b2d6071-3e6a-4bb4-bc5c-9858a7a95373\n08d8b13a-a2f1-41b7-94f0-772e41756b63\n70b7748c-af0e-4083-9728-1e6f565474f4\n653898cf-31df-453c-a4b9-4d73c6abeefe\nbc0dd48a-d2a9-4844-b3a0-f2c0d3e1612f\n638ea493-3bcb-4ad9-b853-16893d23b227\n25872c71-98a4-4d0c-807d-eb4ebe42894b\ncf7d88eb-5c6d-4982-8478-23001f870a4a\n2183bfca-3609-46d4-b75d-2b865e590a0f\n7763ffd4-5a53-4e4c-92ec-817f0cdfdda6\naccefe75-bc8f-44b6-95bd-2cb1cb8e4fe8\n1dfff39e-ca28-456a-8ede-99ab8d358ff8\n1a584fa6-6ce5-4ed0-9e33-1fef7f0ec4dc\n5f34d2be-e7e3-4e48-bbd7-7d230452a8cc\n593d3af3-f1a1-42c5-8b06-4b11561d07c1\nc9c4156c-62dd-4261-ba9d-8e1856cba387\n26fbed4a-3309-4f0e-bfa9-87c41196feb0\n64cbdff6-baa8-4312-9988-83bb3c5c738c\n5a55ae26-a674-461a-9c55-3ed8a835ccc9\naa7c3742-97a7-4b09-88b7-0066283277e9\n59fb780a-6800-4b04-8c26-59c4feee634a\nc905aa1b-12cf-4c17-a35e-16f55c9fbf3c\nfbd7f342-e78c-4276-b1fa-82ff33306a9c\nb2f48571-15a5-4225-9b33-802685aa1ea8\n55427378-c448-4aa2-b430-f651df502d7a\nddb79359-c234-46e4-93bc-115d752c224a\n91340c41-b36c-4c2d-ab20-1bcc140a4baf\nc26569c1-ca7a-4aba-afca-6c2a967a0d85\nf92ce227-26ee-4157-a5ba-9bd46bcda526\n7a240048-7356-4b46-aedd-e4dbb250ee76\n63ee3691-5f5a-4b74-91c9-42c65428eb7d\n4c12f03b-9e65-400f-8c12-816d16c15244\n6efcffb4-8e1e-4acb-85bf-f94d55977d02\n59cde5b7-36fb-4198-a002-305d39e9ec54\n3b97faa5-88ef-4981-a8e2-c0d8a672a230\nffd6da54-5b28-40fb-8603-aec489749138\n7a01f7b1-4971-4bbd-a0b8-5f84b1fa8653\n2c0cbb38-e1e4-4608-a5d7-999a71623534\n9f8b861a-d9ca-470c-912e-5b67121f1659\n547014ff-a19c-41a3-8c3d-c79adfb2fdc8\n31190d9e-1af4-4f6e-ae9b-7031c203c151\n5910d749-a1e8-4e2d-ba24-2cab75e6a6e2\nc11c0423-e758-45a3-aec1-0692a41f9cf4\n80a943fa-7d7c-4ab7-bc6b-9eb5d29a580a\n3798edca-6e30-4438-9ee9-3fe47dfa77fd\n087ca147-2f1b-4857-8af1-f7e45ff2361b\n4675175d-ab70-4291-9281-e1215c424c87\nf6817d69-e4b5-4559-aadf-1f42f424042f\nd37d4b34-fcd7-4da8-bf41-ba8d26312b7a\n7028b3e9-e3db-43ae-b0b1-8027497940db\n26e4b931-49ed-4a34-8bf2-4240de42cce5\naf88e394-fde4-4d72-a2cd-dc2d21371af7\nd193ea57-9d78-4af5-8a78-765f2ea220e8\nc8347eca-6881-47d1-923d-6495755d8bc0\n26ee4863-3687-4a88-ad7d-3eb7b8d1d466\n2e481be8-63ff-4c41-8018-22ef46f7e676\nb580842a-39ee-4438-80e9-0c2b4605b100\n5282b6fc-1035-42c0-bdd5-cfd8e415d335\na5702919-f5ee-4bf2-8f93-b779d02ff9c3\nd06c739d-783c-4d72-8cfc-77ad6b0e62a4\n50bcee25-cd43-4d43-849d-22f847888f89\nedc96a3c-e005-4f4c-a5d0-67d352b615bb\n2dacaba5-86d2-40ad-93cb-1e7f6e3f3f43\n195b6977-5363-422a-8479-7747cbe6fc4c\n5432713c-9f06-4ff3-bf8f-c28b7c14d93f\n64ba6322-7d8d-4f43-9a1d-d3a71b23859f\n0588afe1-5868-4d61-b720-fa5fdf2e6f5a\n76e61803-5786-4fb6-b020-33176f58ae47\ne6e0fa3d-bdef-46da-bf57-ef6d33ee968a\n8e175a4e-e417-4217-b687-027acdeb2c75\n7eb7147e-d41d-4058-b656-0011418a19e9\n8f5e1ad5-a529-4274-9697-534a1ba1f3e7\n407f9b05-97ca-437d-a6e7-b177775a7d3c\n96abb636-4f29-452b-8ef5-2072188eeee4\n2f3ed155-8609-4957-a9e6-8087389f024b\na7334f75-c491-4438-85b4-1a833d0cc78c\n40f57a4c-de6b-44df-b472-cdf9ec9004d7\n30bd75d9-91bc-4754-aae4-d3796b798468\nd1419675-8397-408e-a7c0-30a0c94501f1\nb304a4eb-a136-4074-8a28-0f7610a62b8e\n7613c27d-a3a1-43b9-b461-3b0cdfb750b9\n9dbaba15-d173-4391-9988-7db4f012088e\n787e6237-6b54-4d98-9149-60e3c7c6dce4\nb9143247-e613-41a4-95e4-fe8868592b8e\n980d1a8d-c3f6-46bf-9109-f20391da7669\nb6fe95af-dd15-41d2-ac6b-0ccbd048ac5a\ncb2efac4-0376-43e6-b565-436125f6a9a7\n85864cfc-e709-4bf3-94a6-64588e0578fe\n9098c81e-77e8-4e2a-9d74-ba4f3df32527\n0a4d4922-8678-42f0-a1f8-ad81de0abd3a\n49883b81-17eb-4bf9-b37a-355e3d058636\n7b30ef7b-4950-4235-9eb3-e12cdab4149b\n1854ae28-5d0a-46ea-8135-507a1e390b3e\n5de4005a-33c1-4442-be13-8c2879ec7606\n9de48d22-780a-468b-9f97-fd3e9c3c1e1c\n12ecb179-31dd-496c-bab5-270818c90996\n2ff74ce3-02ee-417b-8b6e-7db09f1866c0\n1a7740fa-64d9-4c59-9708-313c1eb9cfae\n93cc6969-7eb6-4e17-96ed-607da1305828\n149d76e3-8add-4c78-b4e4-67be6a505601\n0f41eb7f-8acb-45c0-adc3-2a52378b54ca\n37ce2df0-cca0-49ba-8d37-0c435ec85633\n8d754edd-231a-4a81-92eb-fb58003c0f4e\na7ee642b-3cf9-4b48-ab0f-c1e3b3085228\n6c013784-6906-4574-b986-4b5b6d8cfb68\n07552c71-23ce-4f85-9a42-721cd76a5757\n5b7d0767-c916-4722-8883-a08e3b1686f6\n49e1003d-88f8-47b9-b116-f776d2409519\n25e22dc5-064b-478b-a55b-2a6fa4a997ef\n9a0a3776-c9fb-4aad-82f4-7765dbc3b255\n444c3b90-f758-49b4-8384-a9b741642089\na50b03bb-f301-48fe-b2d5-1571e72f9051\nce85b4e5-005e-4a8a-8b7a-544863fb7fa4\n5d5ce1c5-b97d-4a30-98ab-16a20e7e118c\n5b391788-7747-4e42-afac-4c92b833cc0c\nc69039ab-c2d9-42a7-b9d6-cd0d0b3177d5\ndddc59fc-4a96-43e6-9cfe-9ffdb50995b1\n435c7e09-7361-4b8f-bba9-f46e80399b6c\na605ed1b-7ee4-4ff5-b0d6-c1d2c4c51b9e\n04943a8b-ce5d-417b-86d2-67dff8b593c2\na42b1b48-d452-4c9e-9762-1c9153974f17\n75f08a2e-c53a-4bcd-a2c2-5bcefb806465\n4f836f3a-0e58-4a2e-933f-e3d677e3b119\nb778dde8-f0dc-4563-af0d-709da8538769\n0acf8834-865b-4d67-b3eb-6ae80ee4d83d\n85bad023-e115-4c83-ac58-d3ab6936f229\n83a5d104-8ae7-4af9-9411-058e570460d2\n322b066d-e08a-48c3-87d7-cd6ff836dee8\n4eb55b58-dc20-434e-a90b-871225d78bf5\n04f73d40-1715-4746-a163-79eaee73d06d\n2d4f9941-6e74-499c-a0e0-2823ea1fb6d1\nd9521710-b235-4769-8530-0916ffc63563\n22aec3d2-aad1-4b0f-bacb-71b570388e7d\nc9dd6e43-4486-4c85-8f75-a576f50969d2\n9606018a-14e0-4431-b74c-d366b1903d31\ne89548b6-be66-4aba-a2d6-9ab7e3640f6c\n0e812130-d9af-4a66-a128-f2c109b21f74\n81a222b3-613c-4c9a-a343-74074a366a2e\na9b4a529-5207-4c0c-8c5e-f5a0dc9e874b\n1898192e-bde1-450b-b187-7c6faff3ba9d\n714d46a7-b381-4cfa-94c6-4e2342426f23\nc365f8ce-3080-47e4-9fa6-44b3188c04d3\n972866c4-7fff-4e9b-8e6e-eb4f66d7e401\n972d9ea6-63f1-4de5-9c52-2af819b20bd2\n78456ce8-e5cc-41d2-8d7e-a5d4097d7ba5\nb5df704c-d563-460a-8676-fa9c538951ac\n7ea174f2-8ca0-41f6-ad1d-40c8b0c1eaa9\nd2b6bcd0-5653-489d-aebf-7d8f8d442cf9\n0bb7ce91-da8f-4f21-b5c7-a43712f887f6\n19e88434-6f92-404e-98e0-b07e3d6c1a93\n98407345-d089-4051-a68b-5435f4ce5648\n0ffca8d4-8452-4242-ba82-bd6f5a0a94f1\n9dc6df59-ae36-4042-afc5-2904897babfc\nf0f607cc-2eee-41f0-b58e-989ad421bb39\n20cde417-37d6-492f-9b72-b58f747b37c5\nb9415443-b466-46e3-a687-ff13b94033a3\n409efee5-2022-455d-9e95-38183e3f5e84\na01a1b7b-c98e-431b-9621-f237f8efecb3\n8d494b1d-7fa2-4f1f-804e-6fa0ca9bc29b\ne6fc638b-593d-4e3a-8e21-ae7a52f1be9a\nb1898b57-9a68-4c81-81f9-46db84b5f2a4\n7653c352-9f72-433d-8319-292ad44a5cb4\nc7828eda-06d3-468f-adde-f3e1ee50b6cf\ne1837c68-3f74-4483-86af-2539814d474c\n6653e44e-bd1f-4e75-9e50-b836204d0cf1\n567e31d7-3578-469b-b591-684b03a332ea\nea899300-c7cc-4ccd-a839-f2ddc8fe870f\n71e93800-2010-4914-8327-a59bf5316825\ne0021819-dc01-40a1-85c7-4bcbb5528ccf\n2f38e857-21b3-41a0-95f9-29313b785cc4\n5415f1b6-98e0-4c2f-8850-795b25fd5bfc\nbf8a1f8c-cc04-4dbf-8d50-76c8b328c7db\n53c10ca2-cf27-4382-a2d4-a775328ddebf\na9a6c838-21cd-437e-9b5e-7d1ebca77972\nfc242e71-5892-4f37-bc5b-32797615be00\neb0b21a6-0dc0-41fc-ab6a-0ed1ae385e00\n3ad8ff2d-90a0-4566-8ee8-2aeb2ba5baae\nf79b9ba8-ebc0-43e7-bde8-cf6b9d52fe4e\ndfc0fee6-92bc-4c45-a2d9-a98507daecdb\n8872677c-0252-4e65-8651-bdaf7c43bb83\ne1348ee1-05ef-417c-a5dc-1e3fe6dbae70\n0e8b1f72-445e-4468-9cdc-440271dd0407\nbbc9d6b8-ad3c-4cd1-87a2-bac45efab88e\nc5c35b48-ebc6-431d-8872-5a4fa844c55c\n95fb9b27-f0d9-4654-8a32-6bd6e2862f72\n032e75ea-bb68-41c3-9eba-567282972651\n72b80eb3-c0e8-46f5-a4bd-a00cc085c68e\nc6e1b701-622d-4d8f-90d6-b6257e061cd1\nd2c5298a-1b4b-4cd4-b2f5-c3fe2831ba2a\n503eaa8d-690d-44bc-b187-8bc7c3f9478b\n9dcd4347-3987-4ce2-9e93-96425534ee7e\n45e835c6-2dd6-4eab-b34e-6278eb2d3afd\n842b23ae-d5e7-4de6-966e-690098a7a37f\nbf436682-361a-4bac-8420-0a060f972b62\nd59ad15f-7088-4193-8a1f-2baa3f3fef4d\n585fceec-4c7f-445e-87fe-d4daf51efbb2\n09ede482-f2fc-409d-97ea-555790f5342f\n6a7a89bf-0cdd-4522-b9ed-37fb294d93dc\need52359-c590-436c-997e-714c7d97fcd5\nec2c6259-1b96-4a8f-9f7c-7158a67fcb35\neb90327f-0e35-424f-9fa5-f1bb118d50f6\n489a68e6-8ad4-4256-9222-b7a213251867\nf68602d3-a607-4a46-9f97-871b9db8f1fb\n060b18e7-fbd8-4f19-9111-8dc19fd2778c\n0c44d6b2-89a4-49bb-8acb-ec364da902ed\n6c29b738-7c6b-4ce8-aed0-c130df5a53a3\n87b89142-907a-445a-a296-1281c8a8650c\nff64af9d-1447-4dee-aaff-e828a932c846\n245dd032-7b4b-493a-8910-dd8c1963215a\nc4b86265-83eb-4049-ab1b-6e5d61aa8529\ne9e60fba-8649-4a8c-bbc1-861bb1e6f0d3\n09f8671c-2b5b-461a-a80a-f1025d314c4e\nba8aa241-39ff-40c0-a71d-2512a07592a7\na8c9a3e8-292d-48e4-8caf-8c4a103189fc\nffda1df1-1795-4a00-a0b2-d30210c65435\nea2ccccc-f0e3-4b14-8b3d-edeb7e0236c3\n945c278e-c06a-4a74-bc1a-3a893a5e2c63\nb04c439a-bc75-4bc3-83b2-2d9cd35a1a31\n5a9bbd10-73de-4450-bbb7-f498c51b408d\nf4199566-7fc5-4358-a7c5-eaab41037f62\n18df6e63-4ac1-4ad5-b9ef-557950332a68\n88dcc0ef-f551-4723-bd9b-bd4435e955ce\ne2c92a05-5b4e-4680-91e8-591173f8c543\n806686d1-b023-4cad-a348-9920da6fcd81\n9c4bcdaa-8c46-4a78-8d85-4f98543c5a7f\na1af1004-b793-408c-814b-a4a040db504a\na635815f-7049-47ca-8fd2-daa7f6dfd2e9\nb72dcd67-d730-4243-88c4-855ffaee3e43\nfc355a16-7da2-4855-98eb-85eb018e2a4c\n3b4776a0-b46d-4260-9a02-93d40993264c\n404f44a8-87d1-4dde-8f81-0183748c21bc\nc2edbf36-f510-4fb2-ab7f-a34ee87c7990\n61f5522b-d6c7-4dd4-9bda-887fbbf274f1\nc4dbd08a-f88d-4f00-9351-a127d9de1ccf\n006049eb-e324-4b7c-afc1-b6915d2e272b\nec1790e2-6db4-4487-9827-8340b8880c75\n4a2f96c9-6aff-4c86-a797-ad3f68f96253\n39c819e0-a3cd-438e-bf6a-8decae102959\n45c975d4-3943-44db-91fd-6eb625e0e40c\n9a4e46c3-bd2e-4104-989b-3573a40eca02\nc5fd7d36-37a8-4841-a464-524962aecbef\na12f8e7c-4a6f-4e05-ba3b-8893c0e557fc\n506100bb-a7b1-4030-935a-3a43a3fb6fbd\n4d75928c-174e-409a-8783-4bedf91a30bf\n295c65c5-16a6-467a-81ef-a9382544379d\n10173f36-a6ec-4f71-b3c8-136501bd0507\nba7b4ed3-bf8f-4b92-85ed-d5fbcf9c3e53\n27f0ca71-83dd-4815-bc8d-3d55a0e1c15d\n76d9a63c-cd6d-48dd-8a43-06332a02e74d\n234e3846-e860-4a1c-935a-e51647fc0f25\n6a87fd0e-1e13-493f-9b07-74662eddd385\n7396ab1e-be76-4725-aed7-e005f96d3b5e\nd4927f83-d4ef-4b28-9593-1841216169a5\n82a41fd9-c386-4dbd-b2c4-775607f63ae5\n5823297b-f7d8-4735-bee6-3ecfa3a2df2d\n1791eb89-ee2c-471e-98ca-39bad28c37e3\naac9f61b-5b35-447b-84e1-1febd773b0fa\n8fcb9fcf-45de-4b69-9ad8-c4d18095947e\ne78af267-930a-46f8-a337-acf447cd51f1\n46cf0c38-8dd0-4ea2-8162-9170c148ef3c\nf4b84b08-4e04-48f2-b815-390d2044d3e2\n8a478f90-5195-4bbf-939b-fb42764dc1df\nbaf120fd-74ab-4596-8a2e-cbf167816c1b\na5c2f469-49d7-4790-a1ca-c74af65615d9\n032ec001-b3c0-4068-a40e-8ea3089cbaa2\n93b65400-7ea9-4e0a-be24-b00216d08054\n772159be-43f7-49f1-abb7-6e88d280e772\n83c3357c-6ee2-48b6-890c-fcaaebe9352b\n10b123c8-1d65-44a8-811a-9dc24e20b39c\n54e490f2-90cd-4a49-811d-574eef0237f9\n44c312bc-0c2c-49c5-bffa-513a916f5283\n8af49736-264f-4957-9a71-e697838eb9a7\n60c296c6-9654-46a9-9dd6-ccd82a4aadae\n68296191-c744-429b-a59a-00808db0b02f\n612e5879-fb9b-4239-859d-e6b33a685583\n0fdb8fc3-b377-4b20-8fd6-736ab402f085\n19abbd35-b033-4ab3-b2bf-fd5cf05a17c4\n414bb521-6575-4e38-859d-c376356eda87\n010b3d3f-29f8-47df-98eb-f8b3b2e9d11e\n86aba494-0bfd-4f59-8ab2-1813a614ed57\n2dc21589-bcb7-458f-8d29-c80da28b9a43\nc3989ac4-404b-44af-a829-424f308da401\ne1999b99-4a47-4818-b6b8-17e64d739461\n4f35af68-4498-44c3-8b65-25c403efcfcd\n75bc8e98-4509-48d3-95ef-73856bfd9bfe\n164549ac-1e09-4c12-a124-321385b44bbe\n1c20c5ac-6303-40e0-95d0-b1f4c181d1e6\n003c576e-a70e-4819-8e44-f804913a0aa9\nd33f4bd6-6671-4bf9-a390-fc6a99a43aa5\n2637e1f2-dcd5-41c5-9f00-de921650bc10\n8e0a3279-d5f6-4eeb-8e90-b8e83d0e1634\n3f623e13-75c7-4422-a4ec-5c23b75377d1\nb392aec9-93c8-4160-9fd8-d89238e00e0a\nc49a4fdb-2e0b-48b9-9d6d-d2a7ac6be101\n1f526394-3de5-4281-95ba-7517582638f0\n553ccda0-affd-44cc-9cbf-875630695bc5\n5bc0a3e9-a7dc-48db-942a-efea9d231f3e\nf3f8ce11-56d8-401b-aa87-14066db84f9e\nd09b74a4-6fa2-435d-b183-a47a044b7d46\n2857e640-907f-40fa-9e56-b3e619bfbc2d\n125a4bf6-267c-46f3-ba79-491e6f4aee12\n7f9b8eda-4017-4e36-9a7b-7c7e89f34db9\nfd8fcdd7-a7ff-4876-8191-5dd925feda9a\n9568458c-8d98-4979-b5b5-8da25f75ea75\nd88dc354-ca68-43d8-b3b7-b46f7d2fd52f\n0715486b-28a8-4fdc-bb73-625086c12681\n1d86c136-9c57-4931-afea-cc07c742690d\n4142c113-1b04-486d-8fc0-133904b57ae1\n3525d216-d73a-4f1d-8cb5-6c6b9204dfd6\na708eb56-d278-4d0c-afb2-e166bec113ba\n3d944ec0-0a72-47c7-86c3-0c7ef5a631cc\nace5c907-9a46-4820-8fb7-6c8df57cbdfe\n26b333ce-5c92-4d6d-a1d6-eaca6e612fde\nd1e71bab-4c74-4c51-89a8-b85273c9609f\n7748e8e5-d9a7-4587-9000-b57485b8dfe8\n4b6b2321-38b9-4e07-89ee-ee856d2924d2\na82b2690-b8ef-4d2f-a8ed-f9f136c6db1d\n2f4b0e6b-09bc-4136-9f4f-526bb6c35a05\n2e605d86-4f78-4136-86b0-2f792f6a4a0e\n90e22545-8888-45be-a098-aeb9a237de38\n64b63109-469f-4635-b673-467084bf0d57\n05b1ac6a-2b4d-4d75-9f51-5088f98a1b39\n5c83891c-786c-4939-b3f3-a6030118d19b\n8806477a-cbd0-4807-a984-330300efa043\nb5aa035d-f456-45f4-b6a0-8fa6535b27ac\ndaddadd5-fe8d-436b-b1e7-b86bbedd02e8\n057e5950-7764-4144-a103-25e15149d202\nba74f7be-cb39-497b-b082-28ed278f3dab\na253367b-4f7d-4322-b1ad-9a2871bf0f58\n8ae0da7f-3493-4647-a0c6-5814b384d1ab\nba38c831-e19d-460c-9856-ab7dd7d68677\nf24c9c38-4934-48a8-8f30-75f100b16ac1\n6f26141b-b643-48c9-a8e9-4dcfa0457e8c\n5a422fb6-fd38-4b1e-a701-7eb844f97010\nc8ae319b-eebc-400b-a335-e2aef4509254\ne37f5f05-5a61-4533-a39e-1dde2cc36e18\n4ff5b715-7ffa-4c8f-8e64-393147162363\n9dbd35f4-6132-4018-87a2-53c91465a5e0\n69aaf744-40fd-4cda-9d04-b2fc32518b0e\n8b945449-ce35-4624-b12b-abef3be778fd\nc79a090a-6b19-42da-a23a-e17e8449aa19\nfbcde524-15aa-44b9-9e3c-834d1cb40c75\n350241e5-2c22-44d6-9c64-b68160f8252a\necaff5ba-2495-4dcc-808b-9295fbc823ff\n630b69c1-e649-42c3-bd09-5e481f43be4e\n5af01a54-d948-45ca-a0e5-b5861dd0e855\n71e5ad78-e54d-43d7-a9ef-ed694d082f25\n4b8d1897-15e6-432a-84a9-67d482509fba\n3d6c4c4e-e47e-4e4c-a75b-bc9f98732e36\ne7638ad7-5ec8-4e0b-93ad-85d0f5795395\n31e34086-fcc4-422a-af3b-51ae9f0291a1\n5dc84565-6221-4537-99d5-b512e5a4a51b\n9ce7741d-358b-451b-9cba-d6c21fb74d7e\n1bb6b182-67aa-486e-872e-d8ce2cac3958\ndf527bd3-7a86-4e65-8a37-50f58477835e\n06192104-6309-460b-b1a1-d21ec87e93e2\n13009ecc-7086-4320-938c-f2cf52ef2685\n68a3c500-9831-44a2-b3df-a3b9b404b6d2\n6ddaf25f-7da2-4deb-bb6a-9ff4e038befe\n1f2adcba-3479-41b3-9c34-594dfad03fdb\n3ec8ae33-af02-4095-badc-f2bd400289e8\nf26c48fc-5085-4cfa-9727-8e42f4c63faf\n04fd1695-e52c-4ce0-817c-f5ead793fc48\n0aa772be-e046-456d-9077-a1482f25b0c7\n5bc9e877-0805-4d92-af97-5dda64fe3796\n19413b67-2dbf-4ced-bc10-a31369c61fb7\n0a411a13-7a61-46aa-885e-97813b1228b6\n16c2186c-5bb7-4344-802a-5664dcfb479b\nf5984f26-a087-44b0-86a9-730a95666cd9\ncfc82ab6-3dad-4e3e-a252-ef57446489f3\n4dbd9232-7117-4a9f-82cd-ef0ad97f0924\n4e368f84-a4ad-42f4-ad40-47d2a323d233\nbc9deb2b-31e3-4612-83ff-492080f12bfa\n1afb3d4c-760d-4174-b89b-edfa95d08609\n9da75ae4-cc00-4eb1-bac9-00e74d152f8d\n2d2d8e53-a04d-48bf-9ef7-888c98d739ea\n458fefca-31a4-46ec-9108-90869bd1e95a\nd8439d66-09a1-46a3-ad56-1932a3a6690f\n0de68b08-190e-4258-ade6-6d3946a72a92\n2c5bb551-864d-4fd0-a52f-b50ac5c29df3\n3cd1d5d8-c41c-4730-8bf4-cd414a4421b3\n2ac540fa-89b7-4a02-8e9b-71800ed273f9\n21ec9d30-887e-4bfc-8eb9-82f5a0bfe43c\n6f105128-18e3-4fc4-92a2-0045900f7ce0\ncb37d5da-2e9a-49ee-ab42-4ec85317a57f\nb2f657f8-a974-4466-8456-3b69b1a79fa1\n4bfdeeb9-ffd3-4550-a793-a43b5ca82d40\n0b4297c7-054b-497d-b162-69936f59937d\n6d4e23de-122c-48c3-b3bb-33334ac720e6\nff89088b-9ab1-40fb-aaf9-0b3885ef96f2\nd1e0b1ee-7ab2-48d7-afef-8c35d236bc04\na7859dbd-89ac-4f34-8d15-eb41cd33ecf9\n5ab1d1ff-7daa-4503-a125-36d8720f452d\n7ddf829c-d1ce-4b1e-834e-ca9f0c7f1634\n6c2b2fcd-3762-458c-b58e-6872a31e1da0\n8c57ae5a-4974-485a-a3c0-5344b4d81fea\ne874a677-5c9d-4311-b26f-7e782b6e42b3\nba7d9115-f75f-4231-9a2f-30e32a4000cb\n1d288344-9b83-486d-ae7e-1d6f12178ae5\n0abf64ff-ae8d-42b3-9329-d85998cb60bd\nf43cfb14-b9da-4694-9657-e116298bd4ca\n3191b576-7340-4fe1-95bc-4f6970763efa\nb6ad34b3-970c-47c7-8795-8b648917abab\n4688a7ee-9aa8-458a-8b89-274a5a52b4ba\n4c65b609-c957-4020-ba91-deee2d7c6dc9\n6588a191-e18e-4c70-aed9-d957cfe7b4da\nf4c623d4-f3aa-470d-be35-38e81c260c34\n99d42406-2867-4e99-99c4-54c7948be04d\n093ed727-1e81-4d9d-84a6-0aed3c91db00\n6c8f621b-752f-4d64-9b39-1459692197ef\n83e6b155-b04a-4696-9528-2397763f4dad\nc8d72e1a-ab3d-4fb0-aefc-f356f799416a\n8827c6b5-037f-49eb-9903-baba2ba9700c\n848b04c2-0537-4c13-8fc4-7ee8796bb468\n5a1f1743-f3b0-4ac6-b641-19df54f2307f\n52555509-132e-4539-babd-eece56bc69a3\n5ea552fc-c94e-48c7-a1f8-94d2a64e1b68\n4ab5b76b-9044-4d43-8a4d-356c82dac936\nefec7ae8-15e2-4257-8764-315352c6c038\n5cf7883f-2d79-4b91-b764-1bbb3eacb57e\n3d598802-7280-40e7-b380-7f7e144ab474\na06b5017-8a19-4f10-b383-d01a5d67e395\nf4352e85-52b9-426a-a9c4-53d0696d7383\n32d7d09b-632d-4882-99fe-e92b570a4227\nc39330b5-d5c1-4d37-b91f-a46850f2ebb1\naab48b61-10f1-413f-93f6-674d9df7c87e\n90100316-7cff-4f96-b8e5-5a819ce25f30\n4e342017-2f85-4e6f-8d1a-0fbeda42d0ae\n23641b7c-529a-44bb-8da0-2db373239ef7\n77156cfa-9020-49d8-9ce5-dc8d1aa3e966\n81555428-e911-489a-92a7-24f930a6d6af\ndf519e0d-c418-4020-b01f-073e37ee0ce3\n7eb9bd15-469d-47ee-a906-e8dd0c40cea8\n8efc3e37-5503-432c-9fd6-1766c4cef068\n7d7da593-94dd-4215-b9bb-2cc77dff2496\nceb67217-d9ab-4e2f-8c58-0e861b6df179\n76975ed1-f18f-4e5b-ad9b-05bc254563bf\n92c070dd-ae72-47d6-9c21-b08a28f1291f\n1fe118c5-398f-4e0f-af72-310896c04d03\na07efe7a-88cb-4959-bee5-4e88caf8c4c7\na08c7837-7208-4990-8d65-f4da8381a2db\ndee13487-17dd-4495-b231-5a3a31a4553a\n734083aa-14e3-445f-bdf3-514b46898442\n0d1615ce-db4d-43b3-875f-025524421ead\n39af7fef-6d0c-45cf-b545-44f79374a723\nf86d0a3d-2239-4249-8d63-0036e63e35a7\n4cb586b5-a5c3-4f95-8be8-406add5733b2\ned31f10c-1e1c-4382-bb27-d111657fc3da\n63ddc7e7-9a2f-481e-8629-027f2f9eaeec\n818fcd2f-a270-4549-8106-f5389440b886\ne6e94d02-f74e-4821-9379-859a39ee3274\nb11606ce-fe1e-4ac6-8b29-bb82c27f2f3e\n831e745c-14db-4d44-a962-c9ddd35179db\nd104d1ad-7cab-4295-b0f4-c1d38440d2a6\n45e39a54-835b-4c87-9656-a05c40708e46\nbd4c420c-a624-4fff-a428-afde353a28c4\na12479c6-ed8a-4d5e-88d7-f0b22bb53d93\n9a170db6-e65f-427e-b303-6659d1559cf9\n869200ed-7199-42e8-b9ee-a264e598486b\n2f54f732-6f23-4b24-9ad7-3b78f1341f67\n4ce4fc12-9d5d-46a3-8529-9434cda0c212\n2139c356-c666-4648-b096-7b2349d030ca\n8bbb7820-7075-40bb-84b1-ddb5509546c6\na582335c-2211-40ff-8832-8f4f63eddf5b\ne618ae64-83e1-423a-bbcc-773b18f7a9ef\nd024e2e3-35d2-41e0-9cd2-7b2068f73491\n22fcd3f1-f7fb-4748-ba18-20646cc9a6db\n33193d3c-08d4-4849-a757-a1d65d18c504\n388c1f4d-b697-4247-8cb2-6587353fe789\ne9736a51-8140-418f-b660-6668c23b17ed\n60b5f3a4-ea34-48de-b558-e5d3f62194ae\ne09eaf7b-12b7-400a-9dd8-e30fc00ca120\n0a55e1c9-213d-4de5-bcba-d2858deea678\n19de118e-1c73-44a9-8fec-d1401c12ef3c\n5bfbf44c-36a5-49eb-9d4d-66f2785838ac\nfb7d312a-42f7-4d2f-aa29-1a85bcc6e4e0\n965a50eb-d90c-4c46-a49b-734f00ae3b81\na443e8b6-a975-44f6-8c04-4478899d02d7\nf14b502f-b6ea-4f6b-ac3b-cbb3e2d3c423\nf06f2281-15b2-4170-95f0-056798314eda\na3091a8c-66df-4a01-84db-2c8cd72b72ff\n5185d99d-3425-445d-8757-fc948aa069a2\n0bc8cfe6-9063-4bca-b008-4ef6fd934fab\nc275c8b3-12c6-4f33-a1f1-7156d0fd066e\n4eaa1d8b-92e6-4e23-8e7e-e16c8f9c2e37\n6e10a9bf-1fc9-45d3-b3ee-d0b351f3728b\nbb55894c-f5a5-48fa-816a-6c6c6a6f7f03\n1c722321-4008-4da7-8cea-027d228ea2d6\na76efc31-2b7a-4652-983b-8ccc6fad854b\n44c4d63d-adc1-4c37-8f52-5eaac7b22ff3\nb149d95f-b72a-4934-ab18-745bb85a9e39\nd3bb7f58-dfbc-424c-a92f-8c8b77ecf2e5\n91fe3929-5d44-4a7e-93c7-681284804937\nba5bcdc7-90d3-4215-bb24-c7b8b39c6579\n198a75eb-2a63-48bb-ae44-6fead58888b3\nbd5760b9-18fd-4b6f-a1ef-0b8bbc2d5481\n69be375c-4b5a-4778-bfb3-99f95f6c5b40\n8674160e-dcb1-4b95-a4e6-e56c60721cd3\ncbca9b54-9f46-4a3f-b573-636c91d695fa\n1063b04e-c0be-46f5-ae27-7329b8a79001\nd0b82970-63ac-4dff-bf0e-ede3edcf1e66\n18225294-5710-48ed-946b-4fa77e264759\n8507d581-9484-4235-88f8-60f3fdfb21f9\nb5d10884-e51e-46fb-a4d4-acbcb9dda3be\n2bb49def-b8a4-4599-b5af-4da51eccc3b3\nd81b4460-4e01-4433-9b6b-e72ed5d7d104\n45c49f71-5555-44b4-81e1-2259a5d6ddc2\ncd482519-3d46-4f58-8b8d-e680798cab5b\nd38ae2c4-42c6-4afc-8a61-14aabc2d6f5f\nba0ca7eb-272f-437c-84dc-742590607eed\na3adc1f1-8abf-4ae7-b320-51e7c7ecb1b9\n90c730ac-cd6d-4538-8650-9a0d12b8a1bc\ned89586e-2711-4bd6-a90a-842e17d3df5d\n290ca93e-7c3c-4d09-9b11-74d8ce8cce9a\n7dee97d0-dea0-4163-a532-4d083e454890\nf05635cc-d582-46d9-99ad-15e1264547a0\n12e305a4-e14d-49c5-8e75-d10aab06837d\n6000ae67-39e3-4238-8011-4c736316b0dc\nbef71b94-b691-4f8f-8e3c-14cf915e67cc\n2c743ad6-ab4b-49aa-b378-d4a2a66acab0\na191a9a0-0383-437d-962f-b889e62198ed\n01999e69-711d-4de8-a6ca-e54c783cbe5c\n3280ea9d-78f6-4b22-b714-5ed428c95293\n67a356df-7068-4fcb-9d55-d272517e5f71\n04ddaae4-00ae-4e08-a065-9e420ef125a5\nd566acfa-55b9-406c-b2b5-5205131f77b4\nc29e18ca-1b19-4738-aeca-8fdfca88b653\nf15bc8f7-148f-4353-a077-044ff7bdbe4e\n4e486dc9-b206-4dff-9f44-b69865a50703\nc960a7e9-f09c-4a24-8b4f-531d8c10c499\n7b6e4b71-0efb-457a-8a8f-8842a3547713\n4af64e86-cefb-4aee-9d23-bd7c44e0f6de\nb194facc-1558-4125-974c-b757ab84bae5\n995ab069-5bd2-4e86-a626-13b39c9d83e8\n5777258d-e119-42ee-8826-52557ef5e4e8\ne14fd50e-93d2-4ac4-92c4-d7aa62911dc2\n21ccf7ee-67ee-4d06-8ddf-57af18f973c0\n45d489dd-5c8a-4cd6-943b-56462747e11d\nfebd1284-a3d1-460b-b4e7-d1f7cdab6230\n861a473e-d8bf-4430-b9ba-116e2fef03a9\ne39d1105-7f7f-4a43-9923-4016af4e8287\nd127a045-4617-4113-bdb2-6a5c0f7be89b\n2d4926ee-f885-46c6-8bd9-185ba2a33184\nd5c4bdac-25b0-42df-b178-5da8dc1d6556\n4e21895f-cea5-42fe-a9cc-15577869e7d3\n92fe74b7-1c74-42f0-a411-ad996b7f9a32\nc3e52e25-6dcf-451f-bd0f-aa9f3ee4a216\n812e316c-6cb8-423b-b780-987b14efbe25\n4b1f6476-2385-41ad-a64a-5bb0c5867a41\nff3c1566-ce70-477e-a3e6-4672041d9ca4\nc44fdfe5-1e26-4467-b51d-a0bd5a0312d3\na162040f-9da9-4fa7-9601-52b3fc822abd\n58ff3ce0-06e8-47ce-b870-c3acd3c77931\n14fcdefe-f43e-45eb-8e73-499ef03a6214\n717d7071-2887-4903-99c7-f1347e183528\nd4b5450b-78a9-4cfa-b5b7-cfdf30100dad\nb1a128be-8315-49bc-8467-a6b2bce507ce\nb6c71ae4-2a90-414d-a822-3ac5e428e356\n2c6d3d4c-9388-4b6d-84e5-410bf0b22c87\na6eae057-64cc-4ac7-89e4-9fa15b3f131d\nd0998762-fe8a-4631-863e-1730a741c42a\n942feb52-ba74-44f0-801b-b08841d05f09\naefc51de-5998-4488-822e-77038791ffe4\nfc90a88c-2473-4b5b-b2d4-89ca61c2df50\nf491d656-c158-48f8-ad87-1039d9cac683\nc6886a72-7ee1-4db3-a239-08f062185505\n9d64227d-1577-4ceb-84da-5c8a00ad73c9\nab2c9a81-9f08-4ff4-91fe-d87482a118c6\n53bf2647-e077-4187-810d-f672dfff117b\n8bea8543-872f-467c-8ed0-6236e0940c18\n8b6c8924-751b-43a8-a964-420e0547940b\na920b889-646b-4626-ac94-ed6d86f57aeb\n0fe60528-2694-4d5d-9ffc-22aaba924a24\n1652d653-0d79-4ac8-81fd-f832c154a9fa\nc8f55c3c-6351-48f5-b92c-76147b84d181\n04637388-6d04-402c-96ba-5cbfdbd9ecbb\n20566658-e3ac-4ebe-a2fa-2fcfe0a2e779\nc7666a24-f0a2-4198-80fe-1610afcf0e81\n45f93c40-44d5-4945-a185-171254fa2c46\n6d0db2b5-c065-4969-b116-bbb9d8844e7a\n287ba5b5-e630-4c32-aeb5-6a51227b3357\n3ca513e9-a94f-4a09-97f1-bc37db1fcbbc\n16965a2d-7ed8-4a2d-8c27-d692af1e009f\n85917165-70e5-497f-86ba-29f0c82589c4\n30deb479-9bd7-4309-8204-3148b31a0d5d\n75f354da-3cbd-4e11-ab66-650bf8cec368\n43b12db1-8a6b-4174-8451-09a65f030120\n346b3185-0ab6-4009-8839-af66744f8e62\n7b15e904-0f5a-495a-a149-3b8551f3aae6\nfef9e092-de63-4f4f-b902-f353e8293c1b\n75eccd48-791a-4a72-b5e2-27af704b4d1e\nac5bd22a-7767-4c46-8e72-2baf80bd0ebc\n3e2cc2f7-9b64-48c6-8bb2-787881e03f8d\nae796137-fc5f-4093-9dc8-595a85a7085f\n665142f0-455c-49a8-b1a6-a88c4494b79b\n36ab6c31-f01b-4cbe-bb37-05626d141373\n016901d5-cc46-4c87-aa9d-55ffea3719e3\n0fd62d7e-0309-4589-b285-9f4fb4ec1137\n34228af6-8254-4dab-9999-3ff797be2914\nb3e00e0f-fb3f-4591-b667-45b99327fb67\n718f7d36-dea1-4a1a-b391-9a359ce72079\nc3cee428-701a-45ae-bc61-97f1902be8a3\nc15a15ef-0ed4-49e9-9fb3-5ee4a91eaa86\ndeb9cf51-ff19-42c7-8d05-66a0879dfe92\n219d8b42-b8ec-4695-aff1-bce6128572b6\n035bdcc9-278b-4860-aef5-8997acf6a501\nd5078330-5555-4d8c-9910-da0aa6bd0db5\n37e21fd8-2e8f-4129-bcc6-8afc8f067fe1\nd98c389c-e480-45ea-876c-db2b24700d41\nd5d4c435-8a32-4adc-9539-bd762cca6aae\n8fd221ea-152b-4814-831d-109e663e21fa\n62e38e4a-46f1-4a2e-a64d-cac1adc258b7\nfc09eb3d-9897-45c7-a70d-15c84255f59e\ncc07934a-f136-491d-968f-1f061f87e876\n7301ba49-a6e7-4b7d-bb01-207222ea458a\n3f9b8041-72f9-444c-a26a-150ac6906e06\nb6824401-19bc-4568-95b4-d89235412701\nbb464d84-d1e8-4b4b-8776-645d44e38e87\nb05e5a34-f78b-4adf-bb90-efb0c0e16eb9\nc4b33025-3ac7-4f5a-b943-86ec6b176f3b\n2e1d3a67-ff94-43a2-8e97-f25bbd8ed34c\n031635f4-36cf-4030-bae8-1bf5cfc8c948\na3d7090f-27ee-45bb-8474-cba8e65a5ed3\n0a9e9252-d039-4826-938d-35048529b3c7\nac6b7df9-8e4f-4d47-9430-1e504b2bf22a\n70d617b4-b787-4195-9dcc-beb377a45c88\n3b59d6f0-1315-48e7-a0d6-0fad01743a76\nfd95a27e-d3d8-4d02-aaa3-b6b78370a6ad\naa1fc909-e8b8-4d1d-a243-152721e7b8e5\ne9ff57ea-ffe1-47d2-bfaa-17d5dbc42ba3\ncd9df9ee-d17f-4e6b-9b14-f8c3d92a97ff\nafab8f7a-5693-4e10-a895-8bfa0096190f\nfc9facf2-5e6c-4410-83ad-d6aaa0cf0eb7\n5ef2eb42-d842-4263-b3b9-16e51a6f3502\nce47dd4f-60d9-4853-8003-3f0afa8c2e87\n81d6caab-09a6-4006-95c2-a3bf50008928\n1b4a6b93-e7eb-456d-bfa0-0dd748d17ce4\n91dc1553-18eb-4915-bd09-c1c9adc3c226\n6db23fd7-b328-4921-b29c-6ef0d7d704cc\n25411d4e-24f1-40ec-9345-f2556990ebd6\nc3273ee5-d08f-49d5-afa7-ae67a45b2d5e\n2ba089c1-f5a2-4fad-a4d9-13e9c052f623\n8d731855-b574-4797-badb-8a1d30b87e84\n430eb8d3-94ac-4dfe-b946-90ed81320256\n4846f969-4487-42a7-ac29-b8abdd1dc974\n4e38d53b-c8a2-4bda-a54f-101bc31983c7\ne908f4e5-cbbe-43a9-a943-ff1f3a797e0f\n7236f1cc-ea47-49de-8f30-71455a54e6fe\ne54599f7-7348-41e9-ad96-c77910feec8f\nb4b2f433-84c3-41ed-a3cf-13bf3283fb32\n606a9304-724b-4f67-8595-9ea8fb466202\n5011c9c5-cd43-426a-aac2-a7acfd9c0d5c\nced644e6-ceb3-4d14-9de2-35a42c29a21c\n1490dd2c-42ad-4936-a03c-791dc7e4d052\n5bed3860-5279-4195-959c-2e3978ea6e9b\nd298e6c6-de9d-42eb-8428-6f368b7c8e5a\n2c1174d3-7b55-4f79-9aba-c65f173b4c5a\n26142416-a0d0-44da-8cfa-9283784c24b6\n19badd88-7759-4dfa-ba73-8ed5d2879c44\n12217e22-cf6f-4efe-a99d-1c710ab6d1ba\n8b5cc677-8a59-46d4-91fe-46403ce0a4be\n8ee18001-1f6a-4180-af89-6c36521c6ca8\n7a32f173-17c8-4b57-8cf9-89221190313b\n3df62604-e5e9-4e29-b950-de499e8f0779\n0d31adea-b6f7-4161-8fe1-ded44817f7b2\n0fcc0e8a-301c-454c-a65a-ed0a7c6b6ea6\n92876abb-28fe-4c77-af22-95537547b19e\n1b8571fb-a478-45fc-b2e8-9887fe60cc93\n0b49631d-7cb3-463c-a5ea-6f03d7f74948\n331865fc-6233-44e4-aebb-5e29aa697d1e\n0290e62a-5bae-4f51-bf09-ab4932079979\n24427960-4277-4a45-8dc7-9a9e92a01731\n186bb22d-a6ed-4d58-85d8-3089b90e0154\nd7ad98a3-f47e-4ce0-b7b1-2bd911568ae8\nb613453d-f430-4dce-b2d9-4e3e682741e8\n0def1e10-b031-42a6-bb30-09e4d9a60be4\nc73d6c65-9fcc-4a4c-acd8-fc7b19184b4f\na99058b3-cafc-47ee-89a1-614f2c2c2016\n4d920c0d-9621-4428-a326-df3527838a89\n3f5caf87-e54c-49e6-b918-6162a13b8f61\nc3faf1e2-b5bb-4fc2-a028-92dbef188444\n490a67d9-e5f2-420c-89d0-44339123568f\n29527c24-8ce1-48ed-9d18-6d8b1392627a\n0171a073-306d-4187-87ee-b6c0ec4f745c\ne115dc27-b054-4b98-a19c-4e76ac46b902\ndaf0dfc5-9399-47ef-bcdb-4320b8fdfc21\n9974a569-7e24-4ac7-afca-ab5ff6b1a9ba\ncd86dd66-38b0-4c80-9c2a-34c95fb957bb\n1ca695f6-6ebd-4735-91b6-25e490900e81\n36894a21-f130-4a0e-8e6d-6b9d26c9cc10\n8226bfe9-e54d-416f-83d9-62ee93182674\ndf5c2b07-720e-4aed-844a-37484d364804\n2221bb74-cf86-41cc-9e9a-84b830c099f9\n62d6f208-23b1-4ef1-956f-aafa8f92f4d7\n0ff0144d-013f-44fe-92b7-8b43574ad85d\nd0dbfccb-5a96-4b95-8860-35167c145c76\n7f2626a9-7d0f-4b7e-8aa1-76f6cb305787\nb935f9da-8c46-4046-9fc3-4c1c1f3b048b\n0d3c1811-b82b-4727-b90c-a244acdaa11e\n14e3b17c-a205-46e0-9cb3-9925a645256b\n2045954c-741f-442b-bd49-d7fc6d43aa8b\nc9401d69-31e2-4eda-85c0-2e838cdb8772\n9009ab85-d1a2-431d-9ad5-f25f1c368428\n17e5047f-49e1-4d8d-9ea6-6fedfa95c4c9\nef118e0b-a5c8-48fd-b1b3-b0a0afb8ea17\n46a3efde-a70f-4747-9a51-bdc0b3a27ac2\n912beb0c-ca8a-4a57-a905-9b5f57c9edbc\n01a2ae56-9fbb-494d-9c99-8cdcb322506b\n5828f8a2-1830-4d5d-a7d3-16c5abda08f7\nebd001a4-3cc6-4d2b-b302-8b54b9b17909\n09793a3d-0048-4102-9430-644a62650206\nc7f5c4a1-a06d-429e-8dbb-852389d1ba1d\n7c835189-7c41-4813-8625-d3cc3bdaee4c\n59e94923-3b4b-4a09-8803-cd2a8aa2ed9e\nac46072e-07bb-4400-9205-c7002b9a229b\n3b07ba83-4222-4b96-b63c-a3b52f8a636f\ne00a516e-eb32-4e31-a670-77b53f601494\ncc14bdec-7f8c-4f69-9bd8-d6188ef41d1d\nf30e5320-01a2-4472-8e20-0a9624a42f64\neb1f31a4-c31d-412e-b302-28c126e169dd\n80c51046-d291-46e9-b7d4-9f92293d2d54\nfe52b361-8125-47a4-8feb-82a64cfae0f0\n3abf0e40-9c0d-428a-bb96-c5032a5acb5e\na50392fa-79bc-4cf2-9029-560e66640661\n44a4852b-802e-44e4-a166-fd23072dbed6\n09920775-4fe2-4699-b56e-3f58a7a47b23\n5f09ef3f-49d4-4268-aa56-f67d6c045e23\n1977596d-bedf-4a91-87d8-c99239ae56a7\nbde856ad-6b66-4489-b2d2-34e9f7d34882\ndb35f561-02a8-4346-91a1-518ab1666ba7\na7a86546-ddea-4684-881c-e49ed80ac2c3\n5ef91961-43e7-4027-bf61-36039ed8dabc\nde4abc46-636c-4412-a636-8fdd5f3c4ba1\n12765106-41fb-4fb9-9493-16b449c439eb\n708853e6-1455-49f4-88f9-80be332e4a70\n907b1e42-62e7-4d15-9aec-028253b7b356\n2e418691-bd73-4b72-adfc-d2ab4435fe0a\n82b47e14-734f-4318-9342-10b032878d2a\n509fa834-7e3b-4a93-bb31-8bf314d65aa5\n50f96b7d-e27b-4f2b-8fa4-efce7e9ae693\n9ae6f385-db0d-43be-a684-0af98e77f9f1\n9c2f805e-55c0-4fad-be47-66aeaf3d2f48\nf7dba40c-478c-4098-9019-cbabd841b830\n382c800a-cde3-4f6b-85fa-432439bf6d8e\n895b7b0f-5f26-4e7e-a082-ede483b1ccb5\nee317efc-fc87-4e4d-ad47-2af8ba4dfdf0\ne94c8d9a-142d-4ce9-80fa-6375fb1b707a\n5c23b95d-76a6-4ea1-be77-f5962eb71736\ndfb01f69-df25-489b-a55e-5c2351435fb4\n0796d7d2-b33d-444c-be48-a74e4b42c8bb\n3bd55d1d-ee0b-453d-8f10-e440ad0f4f6f\n04bec3a7-99b4-450c-be66-4297046193e5\ned95b6fd-c008-4017-bc1f-0d0cce995743\n0b1571d7-8771-43ca-9271-0da9fdc35a51\n8d6b572a-eb65-4b76-918c-ace36dacd9f3\naeea1b41-0412-4d7c-a3f3-9e5ed91a5710\n2917aad0-de48-4570-aaf4-a89df8c44ecd\ndddb81f1-858a-4251-9960-31ae55e6516e\n3fe6f097-1bf4-4645-986a-3c84f3bd754d\n6230f1f7-81cc-47d8-9af7-b56bbb2c1ee7\n5385a29f-59fb-47f5-9242-a50cae0a1edb\nfc6a959c-afcb-461d-a3d0-b976f3d64cac\n088ca4ad-0e99-4f5e-8b4e-142252002c52\nee6d0682-1749-43ee-979a-52881dbfc678\nf65aecf8-6819-49e4-8e2e-f1401487e99c\nd3a63209-b86d-4361-8ed2-039482ab7aee\n6aadae84-5635-4697-ab4b-7f1886e5bf97\nd489ab38-40a6-4f72-a359-549705de7c1a\n5a958677-00b4-420c-9a8c-e6d5f8f08e26\ndfdd17a8-c34d-4166-9d31-4cca6275e050\nf88d0169-b167-4a18-bd5e-bb3f21e7e0e9\nd872e51f-0b18-45a1-b313-c4cd599c1172\n5a9bf50c-3421-452e-8bbe-7d9a4b185190\nc6622f81-a7a2-436a-b421-da1e6a0da07b\n00911e76-d0d3-48b6-afef-db11098e1a13\n23698cd8-1614-4e4f-b209-e65316b63a0b\n08deb26e-89d5-4aed-b3cd-61e28a0ea9ef\n02ebf377-4664-4647-bc80-c40768b14ffd\nb1557412-a831-4e2d-beba-81379cc66cbd\nedaabf18-3ec1-4187-9225-4f057773bf2b\n0402729b-9270-4ac2-a972-413356f63a55\nbb54c092-6d72-48a9-b404-31e46b767a2b\na76a05f7-0a98-42e5-b100-4b4536ae031e\n6fe270c4-bc5d-4060-81c0-a47eb97547f1\n247068af-aa21-48e4-bc11-94b64d87346f\n109006b0-5be7-4eae-9b67-24e582d7965a\n5ab62fb8-fac3-4e95-a622-f4d65e6c8b68\n722a6330-9d06-4b1d-aab7-ce8c8fb59dbe\n34dc048f-0106-4ad7-b846-d26ad5bab975\nb418e15e-d769-4eb1-a058-7e0f6716f0a0\n6d14f328-57e2-4e33-a8dc-f19e72d54e51\n07b257d9-4369-4d13-a697-cbc78918bcd0\n8df1a6e6-638f-41f0-b6ff-738a6049f941\nbd8db838-7f6a-4367-8c66-8849e60ab6dc\n1b10162c-d93a-4bbe-a9c1-2d2a83a22851\necdb47f5-083e-4e90-9da4-21d6b1869556\na5e1622b-2c48-4827-b41f-c4c2ad5f856a\n9af1f8f1-817a-4994-9469-429f56717aa5\nfa4c1dbb-8725-424e-b157-0f84782e1506\nd85ba5a8-f8a5-4c4d-88d5-a4f41b30060a\nf5aeefa1-88bf-4ee9-8d78-47ffb879a16c\n948e312b-2977-41bd-b4f4-fa01ba0ba37f\n57495dc8-a5a7-499b-9973-000a011a205b\n4531bbef-0083-4f2a-b233-671720343743\nd02f44e1-62d8-4b28-a560-ba2a06696e18\n601a4ed8-2f3e-46bc-b918-2946b0427d5c\n94d9362c-0664-4fb6-9793-823c9203c8f7\n0ccbd3ce-94b9-44e8-a9ec-0517a82a9e73\ne88a5a9b-e274-4dec-af09-85b691b8ad56\n16c5f365-7ee1-4255-8d73-5e5370fadf79\nef6833be-9aa2-4dde-a99d-745c14a8ffc8\n6e6bb55e-ed16-45d6-8bac-d825768b4578\nb7fb11f0-3955-40b1-87c0-91d7decc2e83\naa284e42-3d77-4c4f-a3bf-7d817eed3480\n277a4b01-3123-4d0c-adfd-69eb9acc1c26\ne2cac85f-3e9c-442c-b091-e63fa0794630\n5d412362-bc5d-4187-9fa3-626c9633bd6b\n8d8dce56-b45c-4baf-ae1f-7be403a030b0\n1b1c4d28-7f73-4316-943a-1cd2dee6a446\n3769c57f-d65d-4e1d-92ad-a2f2b9050add\n86b5ff33-a7f4-47ac-877f-02e8b45d9425\n970c925c-4a6d-440f-997f-6215230d7d7f\n9c6e2195-fb71-4d4e-ae65-a516aa56e390\n5d2e3826-97d6-4c29-b17f-8f81ea5cfc6d\na29e6467-20b3-474e-89fd-1740d3df244a\nc16559ee-69d4-42e2-b5ae-624b99b5dc68\n5893dc32-9b9e-4d8e-b4f0-c149a657e9d7\n0531ebac-db0f-418c-b763-b4a6f0d50b9d\n2fc7fea7-f41e-4781-9411-6119d74fa44d\n4bc481bc-89a6-4fff-b8d0-7c05f12cd471\nc7a6958d-a153-4c9e-84ff-e3f924ac4ce3\n88ca0a83-1c85-4a43-b09d-b42aeee4e48e\n9ab50daa-42fa-496a-bfa7-f49d9185bb8d\n4b5dabb5-b795-4c1f-8667-da6e9c8e18b5\n3fe2238b-40b5-480d-b554-10cc167e645f\n32ee5fa4-a94d-4390-9ca4-2c9493070e72\n95f328dd-b091-4c2f-ae84-f2e64699df81\n63a28a19-11e3-4f6a-a7e3-690bd329fbf0\n467410c4-99ce-42d3-b6fa-daf1355d5af6\na0d32e1c-3491-4320-ba45-51cecdf266cf\nec5867ff-a0b6-44bd-a9b3-2d2d586938d0\n157ed4a8-ca8a-44c4-af0b-714e179c7e67\n5976942b-d909-4923-8105-1f8c0a442b77\n4b1803bd-d6b0-4366-86a2-236539bf4cf6\n8dc2daf4-84bd-443b-9d38-5a4cc4e39bfa\ne5c50e5a-502c-449f-9dad-ded6f33bcbd8\n7e1bffc0-4dca-4a68-91de-7b0765bcc8d7\n1aa1ea3c-3721-4a1c-b87a-9906ba68f4b2\n699fdaab-eecd-4118-b10a-43f04a486f19\nd9c5c897-fee2-41aa-83b5-a96126c3f04b\n859e21ab-a2c0-45ec-8d8e-aaffd7c0c34c\n0ded8744-eee4-4e55-a2d7-a15dde85b7b0\n453c23a8-8c88-4b60-a79f-88658774ee3c\nf78c0e06-f3c4-47ce-8251-f4a32b3bb0e1\n4da57ac8-2299-4e07-af8c-734867b9f4dc\n84510870-e15b-4f23-8ca7-8f165d2a2f9b\n29c324a9-69f3-46cb-abb2-170affaf840b\n38c25bfd-b443-4961-be62-aa6ba282824c\n8a38b84a-1a6a-42ab-b101-713a3433f2a5\n17d71d26-de63-458c-8735-5b855ff4c8ee\n3dce10d1-10dd-4b81-9568-f3e8dc9b4eda\nc69bef40-b5a4-48a7-bd70-8edf63ae1c49\n21fa5cca-e8c3-422f-905a-7133bab5eddf\n458bbc63-dfa6-4b83-b10e-9ddc89829d45\ne5776948-dc07-4755-86f5-4c94ee0d20a2\n7d41d3b4-0698-42a2-bd9a-39ad8540cbd1\n067dd8a5-0a30-4502-8a14-fc537ff3097a\n6b34ef83-8401-4a0b-a8ca-073a6229eb90\ne174c4b1-eca3-498c-a372-740a521a7db3\n43810de3-5a22-4f42-9ab9-c7201d79e9a4\n8e8f799b-7baf-48e9-bbc2-2bec34a431b5\nebe05937-b0c0-4c7c-adc1-cc821431ae8e\n5c014c5f-82a6-4086-b8e2-0a3dd355f745\n8cac51f6-87bd-42ae-bfad-27c9102a1f40\n46a99ee9-4e7e-4a55-bd75-58624be881d2\ne305c474-7327-4677-87f2-99b6605aa8a4\n951b4936-56d6-4ed4-b0a1-a350cfe0c6ac\n56785387-a955-44df-8009-ce68538df0c1\nb50a12a7-111d-47b8-811c-2a9e58d21657\n20dc4ae2-557c-4b1e-bb5e-19dafd93c937\n182af293-29ce-479c-ad72-dec6502929a2\ne4e67d50-a772-450a-a52e-b556ef91e8e4\n66751f55-580f-4ba8-9a8d-d6b5aafe0cd9\nc84dfced-8d51-4dde-a336-d6416c741cd0\n2e3b48e4-e7f0-40e5-88a7-2ac8a6d340e4\nbfb4c2c2-cf76-4af4-811c-8e13a71d47bf\nb6f4161c-a1f2-4b64-8101-6351e65998cc\n681fc7ac-14bd-4561-b161-c98752606ace\nbc569686-02b8-44a0-8f9e-ada492ce7bc9\nedf97c59-2d30-4e81-b3ae-6b768eec5f51\n779aada2-e411-4243-b486-d4d70c48fe74\ne5221885-1ed1-480e-a5df-e707ae817eb9\n2268361d-ccc4-4f68-af8d-e597c82f8930\nbcc13a21-5860-46d4-96ed-27651e806cb6\n165d99d1-a1b8-407e-bf7c-6c2e83bce6b8\n3a22ade3-c782-43ae-b01b-69cb6bf14b36\nd8cf9bc4-c480-4e08-a415-e23fc185f0d3\n5d3dbec8-0cd0-4dc2-9143-801e0e755056\n619f18af-786a-48a9-b3c8-4ad1e1c00a99\n056077fa-66c2-4b56-8531-7ae881595c90\ne61e444d-6d8e-4c89-a0ef-3825c86eb376\nbd05577a-f15b-43a7-b1ec-e00f82f92306\n9a3cea2d-ea8b-4e5c-96ba-dfd558eef86e\na18e989c-2454-4f8e-bb4c-8648d5c9c5e1\n34bcdda1-b8bd-43d6-816f-044c29788c65\n39e1bf8c-49ec-49ea-aa7d-4fd5e57c8d38\n4c655265-5290-4171-8793-60c6218f27ec\n6ac7526c-a16b-4b65-85e3-441f48d8f5c2\ncc0854c9-0093-4587-ad69-530788a0ee2e\nc5f39b19-61a3-42fc-ad26-35ae981204ab\nc2189f12-9f50-4b96-bd26-165967277121\n26556ac1-276b-47c5-853b-7a88cd6c554f\n99632005-a0ec-489c-9f07-d760834a89f6\naf5b4d29-220e-42c5-82d1-0187bb2b4ec3\ne148371b-3747-4a84-b904-65b2636c7462\n2af5dadc-3dc1-40c7-8be4-c27d10f6f8ae\ne9a06653-0e54-4bdc-ae78-c40ed3f61834\ne7aa15fc-fd0e-4823-b294-5ba6d6fe338d\n24d55e7c-d9b5-4b53-a123-0862ef90db96\ne4725fc8-76e8-4230-a1a7-41c29db374ea\n57ade85f-6238-4bf5-a964-7cf5334dbda8\na6046939-ec7e-4e91-b478-3cd5a5256fe8\n21f81729-97da-413f-9bf3-512ff59aedbc\n57017257-d7ea-4111-b23d-76d2fffc4908\n82e44d34-1387-43bd-9669-aed3d6957fba\nd282eda4-47e9-4e17-bdb9-8886aa757452\n44561e8e-3aa4-4de4-a576-c9eb98f7fb47\n1776b22a-fa8d-4f0c-beef-279d6397b299\neac1a3c8-4a8b-4f8c-9839-938c6e29145d\naf80ebb9-2016-4051-b6ad-60821313cd32\n10fb8654-d088-4bfb-9730-04674cde855a\n7045be8e-5477-4942-990a-319d8aeb9165\ncadd2b3f-666a-45a3-972b-de88654725f4\n31c92ecd-a963-45ff-ad94-dc095079d9c9\ndfde5655-bb09-4596-aa48-6caac0a5ce34\n301ca8c3-e7fe-47fd-bc7e-fcc47e3bbbe9\n05db41f8-c07e-4e17-bc9b-71d7f06b9e06\nea46efcd-5e73-4493-bef0-5443a9cee866\n1cc9e3f6-5aa9-483c-8d75-171f0adb7896\n97c23da7-8898-411b-8bd5-ec99a2a05b9d\n8bf211f9-4d5c-45cf-975d-ff52f9a4d87e\n3588af87-a3f9-4c28-8aa1-ea01453d54aa\n2531593c-fb19-409c-9fa0-938d7aca02a7\nac87e102-4955-412f-bf1e-b00924a4990d\n0ea9be45-0997-4b79-a3f6-7d8093a5a04a\n2eff4dca-a244-4d44-bf11-cc498ff303d1\n151304b4-d2ec-4848-b79e-b31a3d7e30a1\n94bdab8b-905c-4cfd-9032-818ddf771264\n78f79411-6663-485d-a57f-ccec2d5dfd45\n5211f4b0-be6d-4ae9-aa23-56ed518eff59\na68fef23-74ec-4499-8a06-d6552ff166a7\ndaba226c-af85-4c9f-acb8-29da19ff7ff8\n6866b1bf-8018-4521-acfa-15af4db45ec5\n8a750b11-17f2-4fe7-9b32-907642198703\nfa772ada-1ad8-4086-874f-e54ce12605de\n1e31f8b4-bd57-4f70-8633-a944a9293b2f\n5129d5a2-d851-4847-a691-889011b3b1de\n4ce5ece7-34d6-4bab-bbc8-0e6552fe83e0\na87ed574-70b6-4c93-b0e1-ea083a94c654\n1c4df838-7a64-462b-8fdd-14e638edcb33\n21c5efbc-ed2e-441a-8ab2-f8edd6dd9dd9\nb96fbb63-79e5-4d6d-b65e-db6aab7dc24b\n67cf382b-9cae-4430-b755-eab7ecbd331e\n66ecc6a5-3a48-4a31-a678-0467c02c61b9\na5752600-fa55-478f-b55d-a2c1216c643b\nd61f1c41-559b-4b37-8b50-cac2040f3ea5\nbb666441-67fb-4bc6-99f5-bb8aa9bdf6e2\nc8095672-9ec2-4308-b29d-1d2ebbbc16eb\n9ff09b15-3825-4e48-98c5-ece11fcee7bb\n35476cb3-afb3-4404-b640-5b032a919b4f\n6480c416-a6bc-498f-8422-0a14105feac5\n1c2f3fa3-2a21-419e-9cc6-31b754116682\ncc48a3e9-534d-4b17-8faa-fe9b93ef952e\n1250e95c-831a-4474-a49b-d3f83925b90d\n9d6597ea-1065-4104-b010-5f4fcacdf886\na2e0c05d-be49-4b53-9faa-80f10de74874\nf2e323b9-a2e5-4d41-8413-6a0efa215f55\n87bf008c-1752-4e9d-a93c-a4a6112ca7ec\nc323ba6f-7190-4af2-974c-3aa4c8c5c848\nac76f4ef-bf81-4809-9b71-4eff92539f6f\ne3faacfc-1a67-48e3-9e93-7b85d7b8aa71\n2547d87b-23d4-4691-adc4-139721261b62\n6148b5d4-25d2-44fc-9f04-ad69e46a37b4\n5e2defb4-d11f-4990-b21c-3b91a5b50ae5\n7697614c-b476-4739-be38-0e28de811c28\nf5b4cb89-dd0b-474c-b61b-fd9c8279e1dd\n8cf1babd-2c2a-408c-8cf7-82fa69a73bcf\nc89cb219-d855-48d3-bbd0-e062c38c0b3d\n7c080a68-7c5c-40cf-802f-58b130f4627e\n19d542e7-3979-4635-aca1-b5c02cb33c83\n1b63130a-e5e3-4d03-93ab-17ddf545f1a8\n3d50f1eb-5690-4e94-adff-21d51b75f570\nfc3d9de6-fcc5-4f80-9074-549fabd7b9ea\necef18f3-36d0-4a2c-8714-b1c746cb7519\n1aba84a6-4418-47bd-a85f-498dda7db0c4\n5710c673-a8fd-47ed-9894-86fef07205e6\na84f52ba-8be3-4884-93bb-1e7f395fae21\n2118d442-a7e8-461a-bce4-af8a2d5ba0e7\nb8de783b-166c-41b5-95f7-5cc7fbc681cd\naf451acc-89b5-444a-8af0-ca8a9442467d\nb996c909-cc7d-4e04-9cb1-c715d24b5e70\nbaec9f0b-4539-4784-b89d-da0c1a68eea3\n00511cd1-6aa0-4fa0-b35c-1ed06fa7bece\n41657ca4-4c16-4ef2-b105-5b2756744615\n39d7e522-66ba-455a-b57f-e4e14a3529eb\n39a0a1f1-e273-4e30-8152-0469117d0606\n6fc5db9a-d2b4-4602-8342-6c4e2208c20b\n79f34793-d2c3-4b1d-967b-b39fdf3c287c\n93c10639-78b3-4e2c-98b9-30494974dea0\n7b6c0f73-6e25-45d1-8eba-80ee6fe725e7\n0ee58fbf-5f03-4134-a9ea-511747d41825\n03739ec5-3afc-4e17-9eaf-382fac590282\n50458c9d-e2f7-4a82-b3c5-7a708f2b3495\n175fd9ff-2cc7-4a05-b60a-6f240cc065f9\n64da838b-6f5c-4836-ac7e-b76640b67fdf\na7a9c28a-b211-4bb4-9a54-4fa0c2b5b14b\n0e781071-5853-491e-85b8-3d9ac732f8a6\n77fdf2ae-11cb-49f8-9fd8-66e871567ec5\n161fb541-a460-4259-bd7c-dc90aa985e11\n8a6c5921-4f06-468a-a8a8-bfe96f1224ce\n3927be7f-f11d-4ef1-b43f-389315937d15\n1cc90de2-1b41-47dc-8134-d2447056d61f\n6b8c59a1-f7e8-45f8-9c02-fc812cfe4f2e\n72c2ce33-71af-4d98-a552-fd484996c684\n95f4713e-7661-443b-9e7c-2b7c3a7b7ea2\nd8cf9a2b-dafa-4168-be1f-21c0c337eadb\n059d0535-a9a4-41df-aa62-4ce23ac01836\n9df29e46-9fc2-4f41-909b-a4a6e66ab543\nfa12010b-0139-4092-b9d6-26747330ea5b\nab3e9e40-9cae-4988-aea0-ee6c8d383bfa\n50845f48-e044-4475-b2a7-9563b7b8cd06\n655cf831-a8e0-4c4c-8b50-e7a0ca42e28d\nf5d5dc56-d009-4775-856e-a5ec93dfa9a9\n7c69ffe7-e886-4c75-b990-e8bfbd129f0e\nfbbfa1d2-42d6-4b61-9fca-d0e60c83bf3a\n55b4434d-08a0-4b36-8d1a-b679200081a2\nd783d805-1e80-415c-814c-17cebb862ba9\n2a90b6c1-5b7b-4100-b841-d4b798c6da67\n923aae6c-be29-4743-a161-5f6e7953df5a\n602af10b-91b0-46a8-a3a8-1a19da380781\nc7f793ec-b888-4226-960a-0f6c7228d508\n1f0f8256-32f8-4385-a348-4f5dba3c68a4\n4f07c9c3-174e-470e-9aaf-6d23ef7440b6\n95c40eed-a802-41f7-8ae5-1d271ec165ef\n74c80c59-0428-46f6-8a19-6e7e7cd31cba\nfbb20c36-3328-460e-a8e9-da17b0493882\ned3fa3a8-db9e-4bc9-81d4-55782ebf092b\n927ab53c-92f9-4ba7-aa28-f2016e584021\n86ed833b-44c4-47b3-a192-749fa5bfeb92\n79b2522c-864a-4bfa-8414-7b6eee12d4b3\nf9f97194-d4fa-4fd2-b0ee-4c8373678dce\ndc0f1c72-7b2d-4d50-9150-b9374fed688a\nf48ae298-dcfb-4a90-acbc-42aa9c2c3543\n93cbcd7e-e53d-40f3-9012-2728fd0c1b91\nab33913e-2489-4b15-be04-09cf4737a8ec\n4f762722-899c-46d3-9cd1-c5c818b676f9\n0c582699-65fb-4bbd-9742-32c506265685\n6cf7530a-8881-4eab-b71b-7cdda58abde1\nd9dfa1a7-daf8-430b-9adc-4bbf778f7cc7\nf62fb3dd-76fe-4137-9b13-66b89f891272\n8bcc6793-3c31-4fbf-a4ab-d6fcf4257a72\n3839313c-92b5-4024-801a-d7c3d5a6d237\n92a2ebb3-d05a-42e5-80e3-5421b2797cfe\n676f1f7a-ef36-4cb2-ac63-2eeb1c651af4\nf1ff3d39-9902-4759-91bf-ea0d30490616\nda1a9eeb-6d4f-4c86-bc78-8a919b57c95d\n39e7a5e0-9fc7-4eb2-8cf5-48753e1983a7\n3aff05ee-9b34-4b51-bbda-e9cec717b83b\n9da8d2ea-33d0-413a-bd12-6c63871132b8\n0a427369-8dc0-40f5-9094-e98b00ef6a1f\n23da07b5-e298-40d5-b2de-1cfdaa5ba5b3\ned427601-d63a-407a-b5b7-6055ec14e445\ndf1c0f6d-4238-4ae9-bc58-62ab65734710\n36986d8d-ce68-4f79-bc40-01408f9bdf64\n146d2070-269b-422c-8254-9a5a3ff7a37b\nc69f0679-50aa-4d71-bd64-c64b3c8a108d\n7500d102-c18e-4095-b9ae-6c29a97ce23c\n8a47a6b3-0566-4fdd-b2b2-0bd63d94a3b2\nf4feaaad-0cb1-4d64-9017-814fc86e53cb\n8e0c68dc-b4bc-47dc-bf16-e12900b9c879\nc1251ca2-9303-4c94-927e-e98821fb8795\na27d0bfb-fae7-40ce-8208-50a9dd46f951\n51d91af4-dbcf-4d2d-8b19-f49cecec800e\nfd3967aa-c375-4017-9490-417fbdf224fd\n1dcfa5af-043a-4e11-a273-6dee361436a8\nc8e56772-eec6-4cc3-aa17-20bb721ed232\n77771612-5ac9-4093-9224-a2c93efc5bf7\nda58f868-281e-45e2-a1ce-37fef898b905\nedfbeed9-39dc-4c02-8f77-5566adb8ca60\n5b9232b7-27df-440f-b312-55ef2157e715\n17fdd33f-27fc-4c8e-8b6b-e06afb5e12fd\n25051762-5842-4c68-bf25-5b32b57def13\ne268c5c4-f29c-4ca7-ac7f-bc76d984e7dd\n3449cab2-8467-4d10-b8f4-a19d37441e32\n94d569bf-9767-4a3d-b38c-3f5398368abe\nefe42b73-7487-4466-94b4-d14d74966436\nbcc97e93-d634-4594-82a3-578902e9b425\nae30220c-b233-42e4-a1d1-33869b9a0ea0\n21ab91f8-a44f-42d8-b779-9fb8a276e7ed\n60add334-d6ac-4ee8-89ab-0ffcbe858712\nfdb5fcdd-5b79-491a-8ffc-9304b5ac2399\nb292f28c-a45a-4cb0-9c73-563fd545c721\n84cb8faa-b344-4aab-851e-7aeebbe8cb85\n996ae6ca-ecb2-463a-b5e8-91f2c7acd246\n9099b9da-f4b3-4e7d-9971-c94618b93159\n4058176d-0d35-4bf1-b9c4-7e1cdc675299\nd0931247-172c-452d-b976-881d591803f8\nbd3ab513-621a-4fab-8c67-1156913b8442\ndce49d0c-030d-45d0-adef-59a3e3e48af2\n53081214-e711-4326-b7cc-794f91a9f70f\n4387f536-262c-40ef-be19-3d14e1b8a91f\na2adc6da-296d-4965-aec0-c8230e706026\n706963c0-98cb-4868-a5e7-23a1e9ffe3fc\n2133139d-1236-4d86-b696-ba29c6022771\na42234ca-c1f0-4aba-92c3-066f227f35d5\n0cfc0900-bd64-4db4-ada1-d96da3fb045b\n0bf3fb9e-4dd4-4ef6-93b6-2a67fbba6fe6\na2f8ea75-4e48-45ed-a649-07be62863ae6\n9d50922c-1a98-4242-aa2f-47d05a8e680a\nb21763ac-25df-4df4-827b-97cad2c4ec03\ne265a4c3-475a-499c-9b2f-6a83180effb1\n34fa661b-b3be-48b9-8449-a54351f7416b\n07a6bf5c-37b5-49f3-b873-63dac067de57\nadd392ad-4757-4be5-92f3-1d3373cef304\n07cc53ef-e8e8-4a39-8c2a-27e55f9b52c9\nf310ee40-7ea1-4a0e-b296-6e1f2067b248\na6ffc24a-446f-42ea-be79-c2f88b1c333a\n7905d6d0-2da3-481c-abb9-4e578a2062ac\n47379f1a-5eaf-46be-8d51-4daeddf71d1c\nbb154b92-6d83-4ca9-ae28-bfd8997680e2\n671a8c65-1442-4780-be82-1a25a9aee760\ncf63c185-4bbc-4d6d-928f-37355d5f2a54\nb5c51a3f-459d-4b28-bcde-79314d02626d\n7a7ad4be-f365-437c-b7ad-60fb0895e920\nbd1575dd-ecd8-4b39-af9b-fa8af5f97a73\n96692d11-8fac-42f7-8a87-bf7ed5af1632\nff0595e1-3753-4538-9091-122e8878d5df\n3d17f172-a92c-4b03-af38-e064f80814e1\n3dcbe688-ba1b-4105-9643-48631a3b3d3a\n40c44166-17c7-40fb-950b-20dccf66bc4b\nd5b8d6b0-a3cb-4b34-ba6f-7bd69f8c1732\n39a07275-dabd-44df-bc20-ef6fa68d0e06\n79bf6ae0-839a-4adc-baed-ee750c4034e3\n2a2a25c9-3c60-4fa0-b66b-6f6bfd0f9e17\ncda94645-8a6d-46a5-8d3b-91c71d41e12e\n951a65d2-d846-4f0c-a487-da33fa630eb5\n03ba19a4-fd49-4c99-8d97-d6b34c82a82e\n47afc345-4f67-45d5-bcb8-754621968277\na71826ef-ffbd-44ba-b148-a8555338c32a\ndf5b4f94-34c2-4e51-9d1f-3f91fa29461e\n722ea7be-5639-4b36-a9d4-8838e35ce665\n6a685006-b2fa-4ed7-9e01-d94dd0813e0a\n032969e0-8cfe-4d65-9dd3-8944b338ac2f\n0c476092-0d89-4e84-a250-29f4ca9944cd\nde5a0ae9-74d4-4c7e-a462-f7ed63318208\nc291d9aa-b309-4b23-9bba-7f60e50ac6c9\n9731ede5-1b97-4ad1-babd-af250071709e\n236d4c9a-22e9-40b4-98bf-7d654f7fba8b\n304c56c3-79bd-445e-ba54-5f10cd906f0c\n06a723eb-97f2-458e-b471-c808568ff5eb\n40ce7b2c-10c4-4fa9-8971-6c52cefb8126\n48de8ad1-1ebd-4fda-aceb-ffa0df615663\nf362fd51-f819-4c8d-8f0e-d5373b654285\n34730530-61b6-4339-9321-962e3f30b0bf\na5bdb767-639c-4eeb-b96d-208831371f24\nf97268bd-d177-4536-9858-3ee8b596defe\n49bf4722-7046-4599-ae83-5b27772c55e5\nb40944f9-7351-4278-a7ea-79d8737bb67b\nf1cb6cc2-8485-40a9-b324-b061f7761d84\nfef2d243-a75e-44ba-92d6-68e76ad5ba0e\n284b8db6-36d6-41f1-9eba-ae0e022b9a05\n47734dc0-8ba5-4583-b9ca-6ed2333306ad\nbc81d198-61a0-4bde-92ac-eb2d7e4d1404\n240b9cd3-33c8-4d96-9a47-00020bfb04d2\n85f1ab94-4521-4118-b3a7-667397ce6d68\nc4948099-44da-41c2-b411-915f6ca716a6\n616527e6-3427-4381-b9ae-6f4ad231e011\n90707924-7ed1-4ea8-b877-d678f82ce901\n6823fd7b-3430-4e00-b17b-019c00898bd5\n0022dbf0-87fc-4585-9c5d-c089279b2b83\ne95d777f-6f17-42f7-a4d4-c41909a06fc6\n7e0be730-42cf-4db2-b4b3-9cfe2610da44\nfa25d36b-734a-42d7-a65c-086874619247\ncaf9a2ac-56b6-443e-9c82-4408feea0f92\n26ada8c9-a007-45ac-8a17-fc25822298cb\n0eb70f9b-a9b6-462c-af79-05991325bfd4\nc5d04448-5c9b-48e0-b78e-d567903e09a4\n850bcef7-2bb9-438b-82b3-506e819a9e42\nbed9723a-5cb3-4dd6-950d-edb3c95c4e64\n40fb3049-23c6-4903-9f46-a3cbd7bbe30f\n122da996-0acc-49ea-9225-0661d48d0a01\n93506f55-e192-4bb8-a36b-4a938d01f01d\n27f73893-c4fb-42a4-a12c-2ddce72c99fb\n98548c59-f830-47cc-98b8-9b14a9fe5556\n43c2ede9-b80a-4403-a017-97b555ce92ea\n8a116ee6-daad-4f7c-990f-d7c7b48587cc\n472456cf-4c5a-4e16-bdad-0378bd86a8eb\n96e332d0-2436-4cc6-9b2d-192db8b5f4e9\n33c95029-a50e-4eeb-89ef-dbfbbae2de37\n0c2e6f23-9a1a-4c31-9e01-863f734245dd\n427862d9-3f94-4965-a3d0-287e21e2c3f3\n136832d2-c8b2-4e9b-8916-d78bc5778f8b\n95942991-b4b9-4d41-b89c-eea5d1a77a66\nb204f295-5209-441b-9884-f72cc3336a50\n0a5807cc-ee59-4ca0-bc2c-0169473f2250\n5c85201e-e1d6-4d31-976c-131deb19f4fa\n935a3345-c2fc-4c64-9dbc-d6d6c8c504c8\n7ae2dfb6-d514-4bc2-ad85-8114710a987b\n2f6913f5-40bf-4e2d-8f08-29f71606e06e\n9c722a61-19d5-44de-8cde-1bf91e9ff537\n8ee6abd8-42a3-49ae-92f6-bcde2a819f4a\naa08bc7b-5470-41d0-83b7-2c79a1660aa3\nd0f93349-a678-4e2d-89d7-997f34a920e4\n9e49d2dd-70a6-4a8e-95a2-44b2251a5c0c\n7154d04b-2251-4181-a448-a20436350f6e\n2776e621-6e28-4dcc-a1e4-28a19518e60d\n7e69a9c1-856a-4903-ab34-bde5cb482c7e\n8ea45eb5-3c18-481d-a414-e6a628c5cef6\nd927a19f-2fef-4570-92b5-cc5b460b8877\n0746b75e-87d5-46bb-bf67-e3a4122f6f0e\ne83891cb-8f55-417a-a60f-4051143bbcf9\nd8f83b81-3e10-4700-94f6-e89da3684ec2\ndc569aa0-8da5-4f03-8284-579170bf3f8b\naa20a779-3469-48f2-8fe4-084f9d53c72f\n2fdd13eb-c5d5-4f16-b3c1-6d952fc44b6a\ned94f9d2-624d-4df1-ba38-cff97b88790b\n0cc7cf62-d869-43b3-a9fe-b003df150264\neb9115c5-cf4d-49aa-bbd4-169b942f34ee\n9b30a2be-9a6a-4dca-90ac-7d3cf639b078\n7cbe83f2-15b8-4cb1-9f4c-f590fb9c0b07\ncd2302eb-3166-4258-82be-cbdc8945e318\ne7c62413-7182-437e-ac1a-91e9106f6519\n56e846ba-06c2-401e-8eba-ba2d8f5da2ef\nd7b09af7-2288-401b-9806-8be86acb25ce\nc6993079-8f8c-4a4d-8138-53438c4a2739\n848e32f1-6c8c-456f-9a37-fd2f0a95c670\n2e66e97d-b2a4-4ad3-9d36-79b547e41b15\nc255b34f-7146-4cb1-a640-70e30a4e5ff0\n3d2e1ad3-e649-4faf-ae1b-f40d22ba5418\n468a15ba-2472-498f-9158-85faa927a3c8\nb9924c40-b3ff-4fae-81c7-a56c288d5479\ne3d689dc-9b99-431f-bfba-6b0d1e73a9b2\n829064c0-a582-4e9b-8f65-c9d88a3824ef\n04638407-ca1b-40c6-887f-e9e62a99921d\n131b74d0-2f18-442b-bf60-a6afe81cccb3\nab768dca-4a1f-4533-a17c-7d20b3787c70\n85c31f13-1dcd-4ca0-8557-769e1993de00\n6c28b085-d57f-470f-b824-7f46a4719c74\n380f6771-4557-4ef5-b585-5d9ceb04d213\n5a514ed6-6275-43ee-aae8-ce1b5e04d301\n1882a15b-bf10-47fe-94ae-94c0a0ffd362\n7bc7c369-3201-48b0-b5a0-d2ebcf7cfdcd\n07652ddb-ef1d-49a0-81d6-8197e720877f\n821c0bc3-b29a-47da-95c6-ca16b5f3b97c\nb6fc3020-7b2c-4465-89d6-36eca7ff1281\n13ad03e6-30a6-4881-9548-90ce51135af6\n21087764-29d7-4c5d-b43c-dc164c849500\n15c0bf36-5a16-40bf-9bcd-73a8926779a0\n4bbac5cd-dac3-4489-a21e-8b87ee6c48b6\ncfca1f2f-0308-4cf8-a807-1e6daf9c48b3\n4b2fbf31-db85-4ecf-bdff-b711c281c735\n3d279123-502d-4c13-b8f6-e0d35cc7d8ee\nef924652-3e57-439c-86e7-3312b4f29f6a\n1cca1480-abe8-4ba8-8bf7-d7a8b679acd3\n42ab236a-9bc5-4eb8-8a5a-9a68a02e970b\n680a4782-36c0-4212-aec1-c5364871361d\nc01368e8-3da8-4e7b-8d36-39f8db3eab50\nc6ca339b-5690-4f55-96ad-db91bc47d659\nf52d26e1-b0e2-4f8b-8b4b-265440c68d52\n878236c1-a5a4-4e63-a7ba-c88437e2aefd\n79d12e47-e268-4fa7-bb49-75df51aadcbf\n8e3df9f4-0c07-4414-91a8-a1299fe4d242\nd993545a-186c-4e48-be59-95637d5abf3d\nea34bbc4-b10e-4292-b7da-daf906be05f1\n4f85874c-df0c-4405-a4e2-7226411311b5\nbd4ca2a2-61e3-44da-8f41-62de90fe2c99\nf50dd228-89da-4287-aceb-13b0673ed95f\n39c1cf95-94a6-403a-a98f-8732ade192e2\n11022b96-84b4-4c17-9308-d89d65895f6f\n43abbd1c-e1a8-402d-8f3a-7f1dea84bdc7\na036afb0-4f58-4319-8720-e3fb6d94bf18\n6b7f96e6-f767-4809-9aec-61f47030c6e4\n0e63d4b6-f6d5-489c-a716-c9d08a17753b\nb7169f83-320a-48e4-8608-d5b10517c768\n4f25ba36-f917-44c3-bffe-c0731c1092b8\n42dce170-8381-4b51-ba16-eb6e213023b4\n5dec1e62-8699-42f6-9eeb-e44ae4d45b04\n0a325c74-81cd-4d4e-90f1-ce2bd7e3e95b\n7632b929-490c-4c8e-b24f-7aa5f95014d0\n7469903d-4096-4940-ade1-659f49dab951\n6720387f-794f-42ac-8e45-378892fd560c\n3a4c5216-7a8c-405b-bda3-385c22175cc1\ne86371d3-03cc-4e6d-b1ea-4aa26ab8b94a\ne32cf17a-ccc6-45f1-9615-ff194b98ff10\nab651a7d-77a8-4396-bc1a-2c94314389fb\n9c276c14-6ed5-4122-bf7b-5eacd5637543\nb9d0903a-9fc0-4a27-a0ab-4d1691127bf0\nefdc10d8-8203-4aa3-b7e8-4fea726d133a\n67c80293-8ea2-49cf-b2b5-d75fd8f7a45c\nf4d427ca-1dee-45cd-8552-2ddbf0d056da\n943a4da0-6208-4567-9939-ed23d9e56f49\nc04e218a-3c56-4887-9fac-456b133a0ed0\n2b5b3590-ef6c-45ec-9c73-297dca70a5a7\n006a4ee6-1ab4-41c0-a601-d4f7eb579498\nb7924c38-3043-42e2-b564-d25e7a22f57a\nf69e3f50-9924-4fb1-93c3-c2527fa54ea7\nd39603bb-d1a9-4abc-9e7d-9870189e6c89\nb96c0856-0eb2-4124-a744-b61ad7e30ce4\nb78c1183-2956-46bb-8b27-a2c9a7dbba7d\n402c8f3a-e413-49f3-92a2-39a4ec3d3710\nd450d834-ada1-40f1-85d7-21ecb1cf534f\nf74e0906-b3f8-4e60-bc81-b34ade111f81\n076c17d5-dd77-4197-8181-a7eb400f9bbf\ncbfd9c43-e154-4009-9833-86ee350a2f14\n33b93b8b-4e97-49a4-9e83-58a165d80fc2\n337f4de2-44ee-47a3-977f-c4f1a086a2ae\n2c4a93b4-90d4-4818-b4af-7ea90193d411\n1c17a364-9b63-479c-834e-e541ff6b1258\n2da2dd50-2a6f-4ea6-93cf-a07c3fd80ca1\n8d036bd9-8a56-41f6-9c99-3b79640d0d7b\nde380b69-f88f-4acf-9554-8276560ad875\n02c8ec87-5fd0-47c0-af4c-6224bbfee1a6\n7d6aabdd-11dd-46cf-b680-5a5daef38b3b\n62768054-624c-4215-904f-8b8551d849bc\nd9b6a25c-0bbc-40a8-ac4a-cd47cbdd3db5\n235654a1-e867-4720-933f-f4a6709bb25b\n70847db3-3485-4421-9fbe-f464d7a43f18\nff0e6527-0a9c-4c1f-95d0-f6879bf0c8e7\n4fbc2e36-cae1-431c-bb1e-f8d8fb369b63\n5f105a57-fac8-48c0-bbfb-61d51efae2ab\na26314df-58db-4385-8b05-556bf80c2b60\nc9ff6dcd-4d54-485a-9211-e1c03e82005e\nf0c75bc0-0984-4370-b2ab-2abf37b7d6b6\nd7a68557-b78e-4d80-abea-9c7a48d487b2\ne83128f6-403e-4bc4-a899-41fb356ee422\n2ecdedf8-e87d-45de-8824-33b8c09f8263\ndf0b8366-218e-484b-8fab-5f2329dc3841\n9c01fbdb-ae7d-486d-8b0e-ea2ae2a9c34c\n35fac1fc-e3e8-4561-9da8-d60dc42d9fcb\n8afff39e-95aa-4b4d-8946-f0b53ea8fcdd\n1ee40407-15ae-4db7-8834-2105b7e17685\n805836e0-4384-4bba-8fcd-a60d8432021c\n68d5fd1b-8097-4073-a3a2-08fe8c46558a\n34590caa-17e5-4cbf-a253-7717fb347bc3\nc0bf422f-81e5-4bb7-8cce-b3a9a201bfc4\n7f9dc7d2-9be5-4dc4-b057-c2713f801ab7\n173be3f6-1433-49c4-909a-5785529a8b2c\ne849a486-b4d0-4d5b-8be5-16971753490f\n6d6c00eb-0a54-41e8-91ca-b21fe9c0c649\n39b8e462-b54c-4796-8354-dc8fb24c5056\nbbd0a282-ab5f-4f7d-a285-6161b8b9cebf\n173dd5e6-7c9f-4f5e-8096-8f969d1da24f\n5a28ba2d-fca3-4e4a-9657-eb5cc80117d4\n18404e91-94df-4816-92f4-e6671ce82cde\nfd813da1-3647-4d16-bb71-9ab9bb5d2d1c\na0490e0b-14b0-4d19-a11b-6adc3febf4bc\nfe50c1be-4110-4a5d-855d-3bdc3a271acb\n59b8b443-a3da-4add-8e8b-971ec91b2fd9\n5623f9b7-d384-4d91-a0ee-3a96e3eaa130\n5096b1ef-9507-455e-8fbf-5fa96b3a13d5\n4d74656f-5a2f-4455-ba4b-c1d189f86c6c\n17b286d9-5c50-400a-b6fd-e9859e5ac47a\n8aa70a1e-81e1-43f0-8f06-9336c7aa8b78\n0f8d54a9-5f9f-473a-9612-e75f26b87c12\nf1b383cf-9061-48d3-ad23-31bfbd9e885a\n66ca9705-a08c-4a52-a419-b6dd0c726764\n9e544f21-9dfd-481e-b454-58e0946137cf\n74630e6a-c74c-40b5-b910-b10ec7d4cadc\neae686f6-aaf2-401d-8cc1-37551b9f123c\n2b43680b-3077-434c-9d4b-9e557c4fa88d\n8aba61d6-c30d-403b-8daa-2fded9bcb0f2\na94e0dd2-e680-4a32-a263-1dcb06551d66\nc18ef35f-ccee-4fba-9f1e-6c61fc3991ab\n4b9ca99c-3f42-442d-abd2-29b304eedb1a\n40e4ed34-4141-4421-86a5-ac226361bbd5\n0b117d8f-2ff3-4d04-83f8-5d0a838245a2\nbdaf3a83-1e88-4dfc-8211-de9514cbad8a\n000b346f-219d-4162-8fea-1ca980320256\nd710fde3-dd1b-4de7-a66a-675a36212572\nec9b55cd-afaf-444f-9f6d-b507a93b1b40\n7e7b351d-8028-47c2-b693-020f097024bc\na2fe1f19-00bb-42fc-be03-c7dc49bb6e33\n4d7f88d7-1ed3-4d78-9164-ce7b0a8394e7\nc3dcb183-3c05-41c7-9826-ec078ea664e3\nb57d986a-c865-42c0-98e8-d3e2b16879ac\n2e051f2c-4d9e-4bf6-a093-5b8da0238205\nd1f24e19-8a76-4abd-a971-872abfd7a846\ne3bf6fba-dcd2-478f-baa6-ea4a65254127\nb0b0db11-4cb2-42d9-9f4f-ed91f8be3ece\n3df138bb-9532-4416-9dd5-86e8bb1d224d\n4542b9b1-5268-4572-b0b0-397a2b85637d\n45316294-0876-4171-9099-caa3f56c785f\nf4e79aa7-502b-4d0a-9e8f-de5b79269fb8\n37adf635-998c-4a34-9356-5d841ea8b861\n0dc02017-75ec-41e0-994d-f6f3fad72196\n8fdd6f2c-4222-45c7-b983-c73dc8466c0b\n99c93f88-3b50-41a0-9fde-8d91b345d6a0\n153bb0df-1fab-4b68-a237-af8d56682b95\nf0632f60-e24b-4c34-ab21-bc98b4e3ae38\nd5a3dfe9-f645-478b-82d6-426deefe2907\nf3d8d803-573c-4cb8-951f-7b84f1f9b84a\nd1d614be-d517-404f-b7ab-d551d8ec6fc6\na238ed89-ece9-43ac-b8bf-808f146b0744\n182adc49-dac9-464e-9689-7299e5927fa8\n1e3bf01e-16e6-4c93-8618-518c61a32154\n17e9051e-d116-4fa3-8fc8-8a98f200a44d\na326eafc-10dd-4f9f-8aef-b932899a0e9f\nb0de0ad8-022e-459a-962e-e1a7d988073a\n3e44d131-6131-4b49-ac2f-ed9b0b6f5b94\na9024aac-6448-4718-81ba-e120a25e3c8c\n19be16a6-1650-4d05-90a6-c39d00a1a45b\n579d113c-7b7c-4321-82ee-fdfecd12ae11\na8c71a32-bbb5-4bb1-8c8c-7ac2b17c1187\ne2f348dd-39e6-4c82-8792-b91620d97af2\ndac78d9a-a8f7-4a6d-ad8d-e0a2c78c0f20\n2601ec67-8871-45e2-b7a8-bd8179259dfe\n44dac4d0-4d1f-41e4-ab83-ea8b6543f819\n756992d4-5806-4cf1-86b8-33f82b406d28\n11c0d7fe-5b17-49eb-9078-eac853cc6351\nddbfc07f-5a80-44be-b61a-9a3a4708cbee\n44a4b95c-db16-4137-9671-0683627449db\n7bfb5b8d-cf56-42a6-8826-d3d66a6e9a86\nb24d9255-08ff-4d21-95e6-67f2ccd97231\n7f5c5957-29b5-4ff0-852f-c5f4ef540d6a\n15aee5e5-0016-4818-9df4-12889770b303\nd7a9d7f0-f02e-4572-8b95-690396f35990\n307c54a7-c86c-406f-a740-55fdc876df0f\nf9dbc703-2010-45e2-8e5f-01c3ae9673ad\nec4b7e0a-7790-493c-bf12-2cd15682c71d\nf063d6cb-d6c4-4b2e-bcbe-195000f83348\n0633e62a-2b22-47ea-9869-8c5f130bdbb6\n548ca6f0-4a0c-4101-b5fc-b4670e0bb294\nade07a12-f907-4bb5-8fba-3c3fd97f52ab\ncc12ea3f-8ea5-4f4c-a535-234226c9cb0c\n68d12015-22ef-4ac6-b38d-2b2a801c57ef\n70b5fe13-a722-4472-8111-9308ef946784\nc5eb34f8-864f-4b1f-8e0e-54f0ee6f996d\n7afc3bd8-354f-46ba-a2d2-0e0902853b5c\nab541a05-2223-4cc1-b9b6-64e1cb8e147e\n4ee60c78-8dba-4c9c-93e1-f40aebfd903d\n9053bbf1-480d-4c2d-a709-99799d8efba2\ndca4569d-d84b-4382-88fc-2193ab15e0d1\n5ac58bae-1bb8-4c9e-95d6-8c5761a08fc8\n5c041220-b51f-4715-b7d1-a9a9f81a8ef9\nff09087d-604c-427d-a68e-1db02d73b819\na9a7e267-818e-41f2-9adf-72d80beff560\n72bfe9e2-083d-44ad-bcb4-f79dbc6468eb\n488c2686-9eb1-4201-ae1c-45aabdda53c1\n7c05b87b-a85f-40b3-ba2b-fd8dcad7e956\n7dbf7f8d-600f-4ae4-82c3-e29980af0b7f\ne07ee76e-2d02-46d1-93b5-b99b689cb8a1\ne3b45c41-abf9-4313-9b9c-b4d88a271f2e\n82786a3a-2934-4b4b-8b5f-2d4e809b47f3\n67a1ef81-3207-4d8a-a575-6ad3341282c3\nfb5e7dfc-a71b-4033-ae92-fff2b6cceeee\n284e65d8-eaaa-4dcd-b587-8a25f23464d9\n4012acf0-603e-4b38-ab36-0102fcdd30e1\ndb328fdc-bdaf-4a79-bdf0-ea572e5adae0\nb10e8ca1-4646-4122-87e3-0e31ff0e3325\n321b488c-2da3-4a8d-a89f-3177a309be35\n147715c5-12ed-4af1-bc6d-448d5932cd09\nd59cb86d-707c-4c8b-bd9d-3beab03391cf\n4934ca70-f982-439a-aaf1-fd2b6c19f112\n7e945b19-c66b-44a7-979b-2882a796f943\ndec82389-0a5a-4adb-ada9-ad9f68120847\ne29ce1a0-55d3-4528-a2bb-8feb11e73137\n96994692-127a-4637-ace5-53471d4c7df7\nf7a13a54-aa04-4b50-8f85-7770fe8c6298\n1aa27f9e-c32b-435d-83ac-863794b37249\n0af1925a-1db4-4f0d-b779-61e980fa5bc6\nff17268b-fbc9-4291-88f4-dd662d981766\n4c799c65-225a-495d-8629-0b0e0878124c\n8d99cc30-a80f-4bf3-a73a-c6310da54e53\n04462c10-8ca1-47c7-bc72-5faa73482f45\nd51cf831-c829-46e6-9ca6-f9c9915ab620\n06de8964-b3d5-44ff-ae6b-59f23068635a\n197f77a5-e8eb-4964-a048-74204b2fde53\n8bedcf5a-1a9c-4332-844e-33bccedf05ce\n94954029-846c-4f59-a55d-a4682f791815\n9ef37e2e-d800-42dd-a5f4-6a269194fef6\n56fad642-c3ad-4cdd-adc5-03501f65b1cd\n71f56876-d640-456e-b373-5e091152baba\ne69c0cf5-9a58-4787-a3a4-e55256d3f113\n9296a708-5750-4bc0-b259-209ceeeed76f\n355c5f93-de2b-4398-89bd-ed8a49fd39a4\nea838de7-6b2c-4c5b-86cb-8245eb76dc18\n2e58fba3-98a9-434c-ae3e-7ba69d96c2ac\na7f8fc4d-81d0-430b-bb33-66d65ab5e984\n054b500c-f996-4559-89e1-8c51f571ecd8\n17b64c11-6147-48be-bcaa-f5939427c22a\n176915dd-11e3-4cf5-b25f-99d9e9e9e75e\nb17891a4-d0b4-4723-b69e-f387e874c35b\n7ac847f4-5778-470e-b2d4-3c24e0a8c8b7\n41048c03-d865-4a60-867f-ebe187aec2f1\n8c119fb8-3570-4f52-9299-3bd77866c80d\n9f604177-16a4-45ab-b5f9-54f3e59c6f1e\n45e586a8-6afd-47b8-a328-7c1ec3ec2f0c\n4f87c75c-779b-4107-a0f5-538578416d95\nbb9107e4-e291-47e5-b5e5-567db0378090\na2922861-95fd-4463-ad86-dbd1509e2a69\nb0a3dd64-6ba7-40c4-b129-e6f8c45cb03b\n0c9c81d1-c66b-4c78-b089-27fa13679131\n1faeabb7-95e0-42bd-a5fc-4a5b1d32ba28\n3faa4f70-5557-490c-8784-dc09495ae4a6\n9e24b533-35e9-4d73-8e0d-2bbf2e9b8f8d\na26530ae-0af1-4063-a6fd-9d134f621967\nfc50e43d-a981-4198-85c4-0894519be1cf\n50b55747-96cc-4003-bbe4-20a6a043fdf0\n8d1a3793-c810-4178-b0d6-04a31da32d70\nbd31fa73-41e6-4e0a-8eeb-c5c657f75f1f\na65c6253-d866-4b0f-81fe-f062e00ed56e\n05199779-1d62-450d-8bd4-65613293ab98\n0f6bd81b-1c6e-4597-9a04-ce6cc31d55f9\n7148a9e6-d635-441e-a1c8-c05f7b7d6aa8\ne85d757f-dd0a-4a89-b70c-6327c349dd9e\n6bb452d8-75e1-4960-adf2-8a778e72614f\n739f57da-349e-491f-b1b8-5e023d20c69a\na0505df3-dff9-4bd6-aa3c-9dd8ccc05ac9\ne0b478b4-7bbc-4853-920b-4c02bec12e4f\na127d09a-6dd9-43c0-bad6-cdc7a6db492a\n10a54c23-39d2-4b17-8065-a7676d999a5d\n700f6f53-dd48-4391-882a-d5735e274cec\ne04b37c9-5532-43db-acbc-1c88bb20bbdb\na2fef2e3-ab1e-40a0-86e4-7811cca9903f\nde0d76ee-4ec8-4dd8-8d4f-0452293a9c3c\n39a3108c-9795-4c7f-9703-38c866ad3f6a\ndff7bb21-1c3d-4cd1-a39b-6abb62dd57ee\nc046cd7f-39ee-46cb-ba85-61b2c504a5f3\n0ac3a887-222d-49c9-9182-e25fb7cf53ae\na9742d9d-4e06-4ab6-b297-bdecc515facf\n3ed91e8b-bfe4-46a8-a4c7-9b3aade73f65\ncde7c3dd-1457-4891-8ab7-75135bbefa4c\n32443e88-420f-4185-8e40-288ae4a8ab0c\n471147a6-92ad-40d3-affd-b5d4627cb524\nd575dce3-8491-4468-ab0b-eb3f3964d103\n9fcdcb54-403e-43c6-9e93-bb366323f7c5\n8a05c03f-5476-4b0c-8d5a-a050d1aa9663\ncd3cae53-5809-4dc2-ab51-10784aa17048\ne3a4e798-8f6e-46b2-81e1-591e48022a68\n1baba068-ece8-4b22-a006-faf713386739\n7f0c0257-fa4b-4f85-9c2b-4170403aec15\n82b6ff48-047e-49df-8b18-a5a124accc5d\nbf5ea98d-4fd6-4e91-aa71-65b8fc92da0d\n927394d9-d181-411a-abe0-a0cf00688007\n2fc57b6d-9aed-44af-bd87-cb50c5d2e90a\ncec09646-6d13-4992-8dfa-7ea4f6d49a94\nb3cd4631-4b7a-4b22-a363-dff289afab08\n3da204e7-d981-467f-8d01-af9da69fe82c\nc28aa9d1-dfd2-4a2b-a3e4-cb32cbc8c61e\nb347f746-9f8c-4402-a298-0194e7eafb42\n4b838f00-934a-455d-88d1-e381752f5b02\nfc0c66d7-a095-4124-9a7d-110c8c8c357d\n50fba8b2-799f-4cbd-b023-906ff3b9cd2a\ne8a33de0-f5b9-4a56-bc6c-d0f35546de4b\nde9d0729-d8e6-42d8-9eff-9e25c56c50a2\n2ca31070-571c-4fac-99a8-20af70f1af30\n499549e3-0438-46bf-a45c-883db892461e\nb6cd5d1d-e830-49f7-89d8-c18baa9940bf\ndf8ed8d7-0d11-4f21-b6ac-5eaaffa7a5d1\nf3d3f7d9-e15b-4874-b3e1-2680d1d530bf\n2967be83-1c14-4f73-b4ed-62f575452df7\ncdf495f7-f798-4d00-bcc7-a49c97bf6500\n4b0d8962-2f00-4206-95b5-471d5adfe419\n7a4d844d-3244-4978-9378-114b1ff0bb7d\nea91a4be-2a02-4124-b380-96f6a0a0a982\n25c2628a-0322-42ae-82a7-975cfa43577d\nb59daec5-2615-4e87-92d7-0bd48a5c5845\n4f1df04e-a558-4c23-837a-15a39deed3f5\n63f3a9de-1e80-4e60-8662-99f62dbc852e\nf39f6eb9-ad4b-4595-ab08-f3b749fb66b6\nb9044a20-3103-4155-b14d-3a2212c8917f\ncc397c3b-5e4e-4fe4-9917-79426776d46f\n792dfca8-1098-4a6a-a6c4-36a386c7dc4d\nd98c25c5-65ff-4164-8506-7dfee30ac626\n7fce1445-abec-458e-b290-f2d729d3ef67\n38b77486-efc7-464f-8480-a236fd960304\n940e7894-9e81-4ec0-96ac-41c20879c2d8\n7418e1e4-79ea-4b18-9d4f-13ad969054b0\n4b7fa8e1-3b5e-4270-b973-2d46c4aabc47\n50992757-ba94-4bb2-84c8-3192201f712c\n8d43eda2-8310-4b4f-aaac-d99936966deb\ne2e832bf-8277-415b-964b-817933c3714e\n1a2e8561-8b88-44ac-829d-78b31cd5e76c\nd429dd53-19d9-40b5-815b-8e4d6d6fe951\nb38e54f0-fcab-4b6b-a0d2-daeb49fe2302\n8fbeadc6-40ad-4834-93de-877fb43f5cc5\n2355342c-cd47-4199-b944-2af056dc1524\nbeed5cd2-5a1c-439f-beff-e27b9bb53333\n4c3a4a02-9609-4c04-9b68-24f709df9c41\nea072185-92bf-4d58-95d2-f83bfb1cbedb\nfff3ca9f-0b0f-4339-b5f8-67579c0dc1f0\n7ddf640d-2eca-48d8-8289-e8f1e8d1ceef\nb81cc2a4-e02e-4898-9e9f-60728141a678\n0c1336a8-58db-4f9d-a095-e7bca1dcf682\n629bf54f-ed7a-4205-a677-fe90da76203e\n00b000f1-c116-4190-b038-87b2fb780798\n64e96455-e7dc-417c-9a57-dfb2390a8882\nebe9868f-9e1f-4ed4-b3a0-4e29e225685e\n3eb538d8-739b-4eb6-a27e-0342a4dd0dca\n8e2ff120-9368-4e8c-9b6e-1db9ee3af31d\n58d433e9-6ab6-4341-8b7f-1f0282201cff\neabea480-a16d-44f3-b54a-bb49fea1cee6\ne5680fae-10d6-49f3-935b-23006822ebad\n86c72664-7722-4f94-9fe8-543a6c738cfa\n5108aa3a-662e-479c-a39a-f001c74c09b5\n831cd6fe-1d50-4130-94e3-0d3f27cdf5b7\n2cc39a5a-2de6-49b6-be56-897eb76a772d\nad6d58eb-5932-48c5-ba36-8cc547d4b034\n9a2a0aca-9799-408a-8891-1567de1a15ee\nf1e82f4c-a25c-4792-b82e-6b778a1f8348\n713623c1-87a3-4b08-8a7b-cb94d8e60bb1\n360ed0a3-16f6-4696-8704-3ddc51952116\n36fef1ac-aa3b-40c3-819c-3302b07b8ec0\na808dadc-50aa-42da-8b0d-e872b6cbdd91\neee572f5-f95c-4e9e-bd76-1185ba2c101d\nb47cd4f5-c376-4225-a7eb-f36a292bafc4\n35ee8d9e-6d20-4cad-81f5-d767d8c660bb\na3c9c8bb-d5ea-4481-83f3-a7d9f9444fd3\n5c61ae7f-105b-446c-a2aa-fa0551251108\n1801c59b-d51b-4657-a774-6553f6371a79\nf9169049-ac45-4a4e-99ea-e61306ad2f50\nff304008-a528-467c-95c0-b821a49106e7\n6b61873b-691a-4921-9eb6-eda85fc55782\nb93ddf59-13a6-41e8-b558-bcda10a83f49\n24c07fb6-11be-4b82-a2a1-15dfe32f2464\n7a16c1e2-36ad-4c71-b00b-be46ed68ec9d\nf81d2a8a-a39d-48ba-a461-77f972f187ab\n008107fe-6645-47a0-aa4d-aef006944fe6\na41e3d10-148b-4f9e-8d31-afc753fa5ec4\n29750546-61e1-4a54-96fd-4601e81fccef\nbe6caf72-b8bd-4e4a-8402-c3732d23cb12\nfe210604-4482-4433-a3b5-62f4fa06db20\n321acddc-4c49-465d-8296-c9f1bcca334f\n9f36bb54-0eb6-4c61-8095-17be6a67a728\n2815e559-9a44-4d97-b55f-301260e70997\nd0e81d28-f734-4f7b-a390-687a109fb142\nfe1bf921-7088-4680-a96a-2ca55d909d7f\n827505ea-024c-49e5-bcbc-76aaa05006dd\n9526e3e7-82eb-480c-a1b4-681cabe02dac\nec61acae-4d37-4797-a1e7-d89517a57910\n3c55b007-08f5-4c73-a9f4-f23e3fe2d8cc\ncc84dfba-bd4e-44e6-a83e-fdf7557c5898\nd94d51ce-4481-48ab-8e17-8f46fac229f4\n331fff38-93c2-438d-87e0-8c9ce2edccb4\n32f90b04-181a-4643-a9d5-0d87ee4965da\nf40f4920-60c0-4157-8d2b-18c6e071fc77\n0b51b953-9b51-42f8-87d4-88899a293993\n8fe54794-6b95-415e-9005-10066cf3431c\neb4735bf-88b6-410a-b0ba-4f83005c7091\n83ed8f28-377d-4029-928c-6ecb35e39db7\nffdadaf4-fd6f-4bfc-8847-a89cbf1cbcaf\n21bc1b31-eda9-4475-9162-eadfe372f9e5\nad095825-ab1b-4c65-b2cc-1a0d9ff7bb3a\n7e0f37b3-7878-4fbf-9f1d-3c8559a9b056\nc3835883-266a-4374-870f-aa9195d82216\nbedfe6a9-3a8d-4975-ae0a-1de1c1b4759f\nbcc52487-bc51-4ce6-b9c1-9ea9bf6771f4\n28944691-0ea4-428d-abe9-e41992298af7\naa1d1b92-fb21-453c-99cd-6020c6fa3677\n8a6efa13-e3c4-4b55-b953-ec4204ddfe9f\n9a46425b-07fc-45fa-97a5-222d49454789\n7027c1bb-92bc-46f8-b60b-331fd03cae16\n267ebfd7-3b52-4e94-9f31-23e3d964554c\n49706c86-42d2-4e90-84ef-88103b5d7b3e\n31dbcca6-c8b0-4304-aa5e-f6467f952bdc\n70369a2f-636d-4447-98b4-e1c18f3dd35d\n9150a26b-63b1-432d-9a81-b41e1aa0e7ea\nbab2ca40-eb58-46c2-80e5-396e018bc834\n91d7d9a9-5ed8-4cfc-884d-28af9cb61fb7\n22d6c25e-0039-4b99-89e9-d40eb13a16ac\ndf56c1f0-d526-420c-bb11-95118a5a67c7\n2857dddf-daf5-4988-8b81-b6fa21583cfa\n143df380-1fd3-41af-a36d-215454acccfc\n96500030-3c7a-4e88-bd7e-e4690b7859f6\nfb5ed87a-543f-4206-a590-3f44d60711b3\n4d999d5d-0da1-443b-afb9-ccc8e902958d\n9664d08f-dc3f-4808-81a5-57cb88bf46ae\nfc873814-79f6-4807-881e-d3e04f3c30b2\n4abdbdf2-289c-4b23-a147-4beedc63005c\n09b1b963-74c8-455f-ad3f-5fecded5d183\n8317f30a-152c-40e7-ac4f-5b41b5b494e2\n775b8010-d46e-4c47-bb86-139ad60b3c53\n04403972-4c6a-45d1-b987-7a8060f634a3\n85318903-f2fb-4ca9-9f24-759bef98e92a\na25dddef-a149-4e9d-949f-6d7d3a7e3b3e\na3ea4622-0714-426e-8ee8-0b6a3bb68f5b\nb7bc3e3d-3b81-4623-80ec-539ba557c5d0\ne73aef68-744b-4d28-b281-754dd8015e23\na5e03a3a-51de-4be1-9e8a-287d16dbc4d8\nb0ed8c6f-c343-42f5-a536-f14c77d5b528\ne4945503-222d-45f4-9857-e5b855b63a1b\n432b3ff9-0341-4062-9cbd-1f48693ff375\nf7220bf2-2061-47ef-a503-96473fe10fb3\n8f9b8fd7-1ddc-421a-9e95-22ba1a712209\n685978fa-a63c-4d35-b9e4-603b626f7fda\n8c74a6bd-1416-4fec-9dd1-19db799a612b\n43c5df19-d51d-4ab4-93d8-ba5dae2a0a48\n7a778ea0-dedf-4645-8b36-d7794bb2d46d\n6a9a215d-d65e-400d-8213-599d322b28eb\n8e9e0823-32c1-4fbf-9bf6-0a8a672d3df7\nc6540a82-8736-4414-813e-7fede29269f5\na8693002-183d-46e6-87ab-7ad538cce01c\n41bb9305-7713-403e-aa11-d12976bc706f\n1524d179-e55c-4bf3-a699-626750571bb9\n18f1ca43-1738-4407-b2e1-9cfa0a040d39\n6234748c-3f90-4086-ba24-3a4fd5a70ddb\n2ae470e7-ecb7-42e2-be4d-481c581f19af\n7f84a9e3-e844-42fb-832b-a1d620c442c3\nfd26019a-c652-4484-a094-38fa8ca2d81e\n69e4e531-301c-44e3-aa2a-bcda689fb28a\n0b980e7b-65c9-41e8-8c78-8d4ac822b286\ndb762dda-5721-4aa0-bff1-3eec8fa0d265\n55f3cd19-5013-4838-8a94-7a50e9622cb8\nf2f6b4a5-5174-4d5d-8e5f-8217176f1642\n00c2ae2c-013e-4822-8e6c-cf038a260a5d\n5fe9864c-2307-4682-9eec-e063bb0e6e09\nb6b19e0f-ccec-4d97-aaee-2eb95f434b2d\nb118de90-72ea-412b-9fac-fd925728dd9e\n842168f2-257a-4f49-95d1-fedadcbd4c27\nd17b2716-3253-4591-b3bd-019e4ef9e4ad\nae3f9b2b-35de-4ccb-9740-cdd7f2ce5f27\n05984300-842f-4db6-9881-40ee94a06ba0\n1a6868fb-c8e8-4567-8321-6f7af1529c95\n54184ecb-3698-4d01-889b-3966d42ea73c\n66da70da-a989-4bba-b827-bd3903b6ed57\naf003481-47de-483d-a837-159c0bd51f1c\n2f990d97-76f0-4335-af49-1783161cbafb\n664ea56e-da0e-40ad-abc8-1407362a5127\nf10e6594-a126-400f-835d-a3cb71ce23b1\n79aab640-71cc-4d75-ab1f-d6d293bf3bab\nbbe5a75b-9868-4f60-847a-8d480e564399\ncdcd3f54-4459-4772-a9b1-82702eb2067a\ncce1efbf-a3aa-446b-8583-79163e7cebc3\n3ff886c3-c6e9-4935-9060-1779f4a892c8\ndfed0ea2-e4d5-4f96-9cbc-4c5a5ec9279e\na68e388b-aeb8-4b16-936f-2882820a8f76\n8686723c-1789-4d90-a5e8-2d69b8243e3a\n49c55439-b350-4415-a17e-2f8edda4f800\nfdd6957e-369a-4d0c-a1fb-57e1d6ccce5b\n65a0f405-3ce8-4733-b5e9-e59b6c1ad848\nc6c6004e-1fe8-4f18-bdd4-37c731db8446\nef325013-cf16-4063-874c-16fc89f6dd63\n6ec42dac-29ce-43c8-9d11-e6c1509b46a2\ncdadd9af-0d1a-4ef8-a436-7c1d984ad4c4\ncea7970b-7359-43ad-abbf-8b244595b67c\n4d9392ba-c81e-4fcb-9380-d926a96fddb7\n67d60bd2-f90a-430e-9b6b-561e01900289\n75f9392f-856f-4877-90c5-7e85a93673d9\nae89176a-5326-4523-9bd6-e8ed28f882f2\ne6adf034-27f8-4984-b49c-1e849ad45492\n3b97a722-0618-4ab5-97d6-8e77f00416e7\n1f705fa6-286c-4090-a445-96e7601dbdda\n0301ad0d-46a6-43f5-a969-f50d07ffe6f3\nf6652b05-5fac-4aae-8e78-1076fa698b33\nd4c6ec8a-b416-44c9-8135-005ba8f1d1e1\nf1be8072-c7d7-472f-acc0-e30729415da7\n316409e0-a126-402a-9968-018b75ef26ba\n61b9db28-d5cf-4e9e-b046-3f190a6641b0\n3721f324-cdb9-4811-bec0-443a05190a2f\n51365616-220a-425a-be87-4136af87cf04\n1c6f58e8-7438-40d6-9231-a08de3589fef\n84bb5e94-13ef-48d8-9f3c-6f103e499c55\nea8abf99-5560-4333-a895-b971111e5cc7\n1c12e5d7-9848-4a04-9e3e-f56995a2ed9b\na638b4cc-79cf-4e2d-b9ad-14696f954f5e\na65a451d-c053-476a-8db9-15058579e635\n2ec1232e-5b46-4c59-9977-555be6213a56\n274cd362-3465-4603-8f32-ce88ec86c1c6\n1d7e950f-e298-4212-86a9-a6442cb1e028\nccc07435-6eed-4ee9-b17e-e0bad76e9133\nae2d86ac-fd56-425c-b79e-5e6ab7a8f69f\n70da96c5-6f26-4c55-8cdb-10ae1671816a\n9364a884-0348-46fe-b7ae-c388ade6fe36\n51b2026b-55a8-414c-9101-901be57fe3b0\n3fdd7989-27b3-4c78-b6f1-2ad1edbed4b6\n0de9691a-d39c-4dc3-923d-d719cb949866\n314ae40f-9512-414d-b57a-3a9fc08954bd\nf6b53e23-ee89-4dbe-8996-8aad4a592ae0\n8e8fe2ae-133b-4cfe-bc16-ec0e891b222f\nf77afffc-53ea-44fd-a77a-906c89efeb52\nf60572f6-0c86-4cf0-8203-1ef52079e6eb\n2bc306aa-6f49-416d-8d42-2b3781817e73\n7804bf22-5461-48b5-85ca-a05d0d433e72\n87efbd5b-243f-4be6-8b44-05593b0f7e60\n1a7f8ccd-4fcc-4d5f-8572-086027e8160f\ne4bc8907-e8f8-487b-b0d1-485715e99b9d\na69af764-8d8b-49c5-94f0-58b2a6d2dcb0\n343c9618-3c78-4d06-aba3-8a70105462e2\n3774ccf8-776b-40eb-a78a-d0845161fa34\n33210f99-e636-4171-bb9e-326722cddc0c\n1df25df1-d865-47ac-a1cf-c704ea8c550a\n00f13415-9d9b-460e-9678-75987717603d\n6a9d4bd6-04be-415f-a160-f97131191521\n664df73d-12e6-46b2-b417-37fdd1cce1f4\n262b837c-43f9-4abd-9ed3-795e5e9ff61c\n28d26462-e8f3-4299-8ebc-ac339285f275\nbd4d6710-9f80-40df-91da-10603e443e13\nb2e7adce-5b4d-4750-b268-1659ed797f6a\n63c11916-b25f-4590-852a-334dc7cdf85f\nce489bf4-f63a-4b3e-bc7c-3dc9e669f2c4\nec6ed0f4-1606-4b20-8ff4-ea670565a606\ne3d0c414-470a-4364-b307-be2f332cddc7\n5265824a-89c0-43a2-9758-4cf7a98f2129\ne41566c4-d22e-4f59-8f1f-b204a8091bb7\n080ea36c-23d3-4e8d-afc5-6a967a3a377b\n3b76b7cc-73ca-4b25-a944-39d6d5241d52\n9f2e5773-4f2b-4a27-951b-f79c662b2775\n1f46b0f1-ff2c-4bc0-b340-069eb71dbdfe\nd43ec7fb-2b83-4bfd-8300-c381b0498f32\n3d7aac72-a50a-4f51-a87c-491e49303913\nd3b7e5e0-d2cd-4641-bb15-d9aa18d8f9ab\ndb64a2de-77c5-4aa9-9a02-d5015bf36ead\n80088d8d-54e7-4ac9-85e1-6c58375f2bf4\n908b030b-c2b3-4e44-be73-fbfdff4dde81\n10077d2e-1c7d-4b7c-8c38-459dd074f203\neac94955-1d75-4c91-a7d0-c11a26337351\n451e0ff9-4195-4313-ab1c-d53f6f406094\n1d334e01-a7a2-4d09-aea2-d6554dd92df0\n05c1c34d-accc-42ee-a98b-28e322177402\n4a1ca254-a4c5-4b29-a30a-32df74dff87e\n937a6989-7529-45df-a744-e3b0e7f20d83\ne6528f65-32df-4645-8a65-141c86999ada\n8f8e3e49-4b24-4779-a579-a471cd73ac05\n5408d1b6-20f4-4c66-a9cb-a18d8181ac07\n6e460e39-c172-49c3-af11-9f404a8b2788\naf47a908-bd6d-4c04-b46f-6206723cdf2f\nd06fbdf5-8e56-49ef-9df4-0061dc3dfb56\ne8645840-c23a-40dc-8b01-f6c697420178\n931d7f10-85af-4758-a9d0-715c63d0fb84\n1be27612-68f1-4135-9b40-6aee768be793\n1e4e27db-f65a-436e-abdf-8cd7e1dd6262\ne295ffff-b28e-4fe2-9d61-2f22096c4564\n1817641f-80cc-40fb-9643-6c1d9e1803d8\nfaaa231c-065c-4701-ad12-3da2c07511a2\n7d28d09e-9e53-47d3-9ea1-9b33d5f60f10\n87c0fcef-6075-4a11-b81c-d41ab324dbe3\nda7cfc30-89d9-4a3f-b6de-1248a33e2e1a\n6b32a823-1de2-4952-8efc-cc17f95f3c78\n1edaf381-cbd2-42ee-b758-fb87703fe9d9\na552391c-bd10-4364-95eb-af3ad7e856f6\nea59c257-bd16-437c-b1a0-a112565af809\nb1606a5a-e631-4983-bec2-cf12aefdf6e3\n4a741fea-eb25-4fb5-83d2-d5faca764eec\ne53463fb-6d2f-4a77-8ad6-a99a0bd5c616\na5eaf6d2-d747-45a1-b40a-ee9f0e9fbe38\n7674f5dd-cfd8-488b-8e7b-c026cd28a94f\n9a0ee173-8f73-4f92-8212-c7a886953ce2\nfc0b8e10-2dce-4fd8-bdbd-049a90300996\nbae64560-e418-4a22-94a3-a39ec5e56cd8\n097bab1d-2463-4df9-bd39-509fe07dda3c\n5c2f30dd-a0e8-4711-84fd-cfcb13a07e93\n736c990a-96d9-4866-9aa9-75fe63d99d83\n665f1d9e-0328-41c9-8276-d7922dcfa3c6\n091e5607-07cb-4fe7-a8c0-9224b925e9b8\nc3e57a04-bf46-45f2-b2fd-56673e65d19f\n1fa460b2-7cdd-4cd6-9d7a-08db964df32a\n9cc3c0fa-f547-4144-b746-581a7961227a\nfd819fd9-31b5-4d0b-92bc-2da78f7201e3\n72d8008f-329b-458f-9344-5e7e9628ca02\nd676952c-0d90-4b40-b7c9-46d617ccd245\nf899609e-f4f0-4fd1-a710-48a6481eac4a\n13b0c182-fec9-406f-af78-cfb83583a5de\ne4e4532e-747a-4c9d-965e-07020f34be49\n21804fb9-e0e6-4211-862e-2c7f506b16c3\nba3fe17e-3771-44c3-bf43-0281ee38077f\n48a34c2f-b519-4540-ad4c-71ddd0188e59\n0a32534c-148d-46a1-add1-46db26a8b103\naf0bb84d-a87e-4c31-b2cf-5ea9614ac945\n326ffa0e-0d96-4c23-a868-8a2a1f674d4d\n6e4bbdf9-33f1-4df1-b87d-a70ab02e7c9b\nd5210432-e57f-4905-9153-49e0e60a4d7a\nefed840d-df7f-4566-87ff-5c2233a17f34\n8a7ad0f3-c5f0-44fb-89b0-7c86c102371d\n75ea319b-1049-4f90-97f1-c37141a007c5\n92dd408d-e0b8-469c-9954-ce950dbe1158\n32bc4b62-1eb8-4552-aaac-ce382ed9bd3e\nf9e60125-0b1a-4e86-94c7-72fc695184d5\n30c7de5f-f4a5-4010-bae9-cf82e33b5ae3\ndb06be8f-3ba1-46f4-8b23-c177f1b58060\ndff60d17-ef08-4052-96d4-4448159acbf1\n95dbdc0f-2122-4a35-a224-3a431d132e95\na255656a-080f-4e70-9b2e-befafac91cad\n609017c3-167f-45cd-bff0-ced837254e60\nbd602ce8-9f16-49ec-af69-d9b3bf87c706\n5d72765d-c707-4fb8-b237-b041ccf8f6b4\n198ebd3b-1996-4fd8-a2fb-70a8a6e88ceb\n05c446e0-4dd5-4562-b1ac-1dd1be386420\nbc508844-4316-417e-9a3b-ed232d4e0204\n0ca9bcf6-6109-4592-b04d-b1e2e3f1fbf6\nd0ffa8b0-e493-49df-9e94-f3e27f61435d\n3b79e156-27ef-48e4-8115-0820a9c11ea1\n2550bc54-4d58-4285-9983-f0fc4850365c\n5085a219-ad4d-4794-924b-29b7ece6d3f3\n9877d9b4-b6fc-4151-8c20-565802c5347b\ncf3e2759-6734-4830-b904-da281613c228\n0bd6a2f7-b67b-4010-bb8f-9d0113d3c871\n5349888b-3176-4a4c-aa0a-b342c966870f\n6e7bebe3-cbf4-4bf2-9fbc-b42f4b430b54\n99e150c9-e01a-4207-bac1-4affd13946fe\n091d3308-5397-4a2b-a047-3b586982a668\nd437b09c-1d39-48dd-98f5-ba88ce29ed41\nb004f9ff-6408-432b-9f52-abfaea51a5ac\n98416c26-040e-4dbe-8d8f-9fd3f14393c1\nd6dff245-c044-47c2-8eb9-f900ef2df84d\n1dc576b2-4ce1-4728-b430-827c8577a3e3\ne9cd452f-4fbd-4090-89f0-fb70595ae586\n4375f510-7dc7-41c3-b53f-b0579af00e28\n221e711f-5f0c-4e02-b410-47e1e98f6e62\na0674b3c-8a7e-4844-8b38-2230e4ebaac8\n87173dc5-ff49-46a1-80e6-06195552d822\naaadca37-7bb7-4464-8aaa-9967b1823abc\nb24e8196-af37-4c50-a8fa-1729d38fc052\nfa71fe5c-410b-4271-a355-b75834c0ca0e\n4bca2a79-504e-4681-a999-c5edf9d45360\n774412ca-465f-48ec-a2b2-7bb34b640e09\n0f51f7d9-40c0-411c-b694-b70685fa9d2d\nb931c96d-adad-4b02-b4b1-04763de8f035\nf0187482-6459-4146-a4fa-1e409db82610\n270ecb02-034e-4bec-aef7-41fe1c8b1a25\n740cf949-b102-4e50-92cc-6684e924a30a\n13571c51-84e8-43e0-8d1c-10c3d519d79d\n57a2745f-2d05-4588-a969-f704d050bd68\n7985c219-4c94-446d-b0bf-c33a6b11a9a2\n333f65bc-beb7-44f1-a53b-631ed0293563\nb93a94e4-6351-419f-a329-fd00d86dacaf\n7e8da9dc-988e-4d30-8f20-fd8227adf21f\ned77e3a8-4967-45c7-aa4d-f730efc4a7a2\n1e11fcda-ab87-4c56-a8d6-f20068bb8d98\n6304108a-9469-4ce7-a880-fd6e5b9a7b7a\n3ed64e6f-f720-407c-bd0e-481447a34f5e\n5a121b04-ce35-4cba-b482-f03643ec3d4e\n294cf3ec-af4a-40ae-9085-135200ce2424\nf88d7861-0bd5-4a86-b2c0-f0c9f25f66e1\n75be36b2-1205-4fc4-b157-d3befb015a0e\n5978ad13-2d10-47b0-ba54-15b4c94e39e2\n5cf1346d-5896-4070-ad9a-92db1840cfe6\n63ec0afa-2b27-4982-80c1-92ed1ec586a7\n0f2a183a-85ab-4c8d-9933-39fc1dbbaec1\n28b18ae1-8e12-417c-9636-f59767058db8\n4497aa2c-c1bb-4b1d-9711-b81a49dec00c\n5c9bc5d7-af73-479a-a8ec-5621178cb2c5\nf7178730-dbad-4e74-a4e7-08ec391de67d\nef2966f2-4764-4f39-a6fb-27a18ad65eb9\n3dc36923-168c-4c3e-88be-b05d4efb79bd\nefb1671a-3bb2-48dc-862a-a2ffb1e2e223\n9d430b24-3a11-4905-bfdc-926afc58ba9b\n5385a960-7ca4-48f8-9a30-3c5510c38021\nb27b80af-48c7-42ab-a527-97c9ecaacd45\nc91ea56d-9682-4079-a83d-468a72bc265e\neefab80e-cf72-495f-8e77-486bafe8e0c9\nd1f608d2-7c11-4927-a039-6b1665dbefc1\nf60797a6-a03c-4c6e-981a-7af275bcc3b6\nc21bb0a9-add3-41e3-bfed-00136865db5e\n63b8bc62-37e0-484d-84dc-559a9f6f9af8\nc3d4c527-aad3-4942-a405-bda3bba378be\nce5cb6ff-7c75-4331-b8c6-774e74ca5fe4\n7594af67-484e-425e-8aeb-cf3997645885\n433b63f2-173a-4139-8043-1317ad3a844f\n8b59f086-3ca7-4b46-8527-05058395a6b6\nc63c7bec-a11f-48ab-ab5e-95362d94df0b\n7ad717a5-554f-48b9-982c-61d31f124aed\n3f72be84-ef38-4424-a531-b1662af3cc12\nce76bfe7-5da0-4079-88bf-2281f73601e3\nf0a99635-af54-4d73-9b85-05b7371ec251\n16bc9397-8201-463c-87e4-93efc353ebac\n88f145c8-3250-48e9-8f1c-1b0f458fd5c0\n750e650b-a5d0-4381-85e4-40bab24d24c2\ncbb4f8c7-7b0d-40cd-ba0f-8a86d779e6d3\n38cc272f-ea8d-4ff2-b69d-4b4f41208e09\n85c252be-6d52-43a0-929d-1c4b0f23e069\nd355fa99-59d6-40dd-b5c8-42e3323cf162\n663a8aab-30c2-40ef-a0c3-57769a49e201\n351d11d0-62b4-4dfd-8a49-fc1ca0bbf438\n7ffddf51-f19d-464d-bd88-d7175a33562f\nf51f546c-6525-4f74-b31d-36f88c1aa724\n8f0099b3-bd42-444d-a15e-cbeac3a3732d\nf1158212-ed37-42d3-97a8-e5a9f6fe14c4\nda7d05f0-8daa-4b61-a7a4-15adbbfab3bc\nf1113de8-b259-4d7f-8166-6f1087844698\n5034e9ec-141c-4bf1-adda-1069f7e74ed7\n2baa51a3-d272-4d40-96cd-c3ec40c57870\n5e244e91-a844-4316-aa55-42de996fea65\ne023afd0-859b-4199-a61d-db8db7318cf6\n7699ae76-5df7-4c36-a7fe-415097bd1877\n66fc0504-c85f-4d86-8292-d4adec14b91b\n02c5249d-4399-4e37-a316-83dd5ee8e0a1\nc7135b0a-a307-4a44-b53e-3c3889a6974f\n79175ba8-d9e5-4076-8b19-ba2d3a81575b\n1834a0fc-0623-4d91-9c21-b9d1a66a4bf4\na2bf75dc-3f6a-43f8-a146-bfd65cefe49c\n9930c343-116f-48ba-9c53-0398cbe1caec\n49f5bd7b-5a16-4f22-9ed0-8858c12a4443\n3d8c54b8-7b3b-4c2c-8bb8-61c1546f2f7b\n07a69660-9d43-41f5-a741-2ba18653b7a8\n04cd9c75-05d1-4397-85ac-436e0433e0ee\nb54e4ca6-5447-47ef-bb01-261417dd5827\n26471933-bb91-44db-853e-b6588042a3db\n6fe621c9-ba81-4c31-943c-8da0d82c5a5d\n3b53019c-492b-4a2f-bd47-82781b97bae9\ncbf925ed-571c-4b0c-805f-de7f65befaf8\nf757cd6c-2e3c-43ec-94e5-ee92e736ad4d\n2e9881b0-55d7-4c53-8b43-8bb0f16ef995\ncf1682b8-c931-4f0d-8c59-71215702de81\n76b1061a-04df-43b6-ba35-bcfd9265f4af\n55904c43-6c21-4987-800e-fd97a888ac44\nb644e150-dd0b-4e55-9944-5e49db06be8d\n1aa755b2-049a-4957-94d7-ef3af1b2d59e\n8f84f92b-ffaf-4694-acbc-452d054538b7\n7cc20dd5-4566-422a-bea1-e37b80a62056\nc27a66b1-7bca-4c12-ae66-22655a09a45a\ncd404092-5179-4459-bfa4-783882ac56dc\n8139b359-d627-4070-bdf8-558ed8f72834\n00fe16e3-7cd4-4839-88dd-13cfa2dd4087\ncf7ea9e5-4492-4a0e-bd62-12858d8e1d69\ne74bc731-24b6-4f8a-9d62-bef77e1d5ead\n1ed5ce08-e44c-408c-88ab-1e3d2b548862\n0d5d49ef-02f3-425f-bff2-f2027edf1b56\ncd704fd5-0130-4ff9-ac1f-3a7fb873b43c\n4a589760-b21a-4132-9a9d-d8f31d5f2e74\nfa52f7b8-7412-4012-8576-aab2d06c5ae5\nf881ad93-e4ce-4fbd-b785-888598de48d7\nac6e49bd-5efc-419b-be2c-4023d38295f5\ndd890e5d-0eff-482a-a48b-4290c458dd6f\ne88a1023-ef1c-4521-a31b-e835ae05677b\nbe29b03a-4c93-4b79-bf30-071e3f143cb8\n0dadfa04-d195-4016-877c-610fd02cb2d6\n95b4d5ef-a560-4371-9a07-7494610a44d2\nd988e963-4b20-4917-896f-408e541ea316\n8c5e286e-09b8-4fff-b54e-763b9b5188d3\nc382fc45-077d-42de-a81f-db4582a333f8\nc1e2d540-d5df-4001-b8fb-1e3a6df2014b\nc79b61a8-ce0c-4659-8287-d7096afe0ed1\nc6d9ebe9-7a6d-41a9-9412-99e231b7c154\n5c69a213-eeb6-4119-967b-6b6766517b43\nf1cd2638-b842-4d73-b94b-0d374630e1d7\ne73f2686-107e-47ed-8268-be438b2fc755\nf72156cb-0f17-4cc8-8067-e3524da7c880\n72636fb3-6426-42a8-8c1d-23c66e3cb5c7\ndc94f278-f11d-4eaf-bfa9-745e8690a98d\n89b0bfcd-36f2-4e0a-a314-5387d2b86827\n2e04d2f8-922e-4813-af22-43e84524f995\n88df2467-2985-46fb-a301-871901b8db32\n8c97629d-1d1c-4130-a08a-df0dda8b2e54\n4aba48e0-25df-423c-a7e6-d5ccd43e5dda\nf188561c-f8a0-4a40-986c-4f52ded0d46d\naeee1b79-9ce5-428a-a469-ba1110d9e01f\n9d4dc63d-e84e-4547-9ef0-95e7c78f1aeb\n775ddeed-61e2-4976-92ef-0f7ac640f0a2\n4628a6b6-3fb1-4a21-acfc-295da0660414\n43b2fcc4-91a0-4012-8a6d-ae79d7011d10\n97863527-fd51-478e-9774-fb4305052113\n51681b50-c773-4ffd-95bd-8a8acaa7861c\ne48a12ad-8cd4-44a5-939c-b344e757a8f6\nb54e6236-0ba7-4394-8165-3409736c94ab\n2ed59b1e-5232-4cd3-a472-29b8f36c9ca5\ne95341bd-3adb-414c-9e83-093a5cfd7a26\n922f8731-b04f-434e-8db6-3e29455cb1a7\nc4f6398f-6019-4e58-a5af-d6c0224299b3\n9827259b-a0fe-4ea4-844b-ca11f297679f\nf5f2beb0-c730-47c9-be6b-26cfbeacdcc1\n5a52d320-7efa-4607-9f0d-c450f827ec89\n4748738c-d1e6-4c93-b7cf-f82599492b2a\n15b61d51-3680-49ad-97d0-1885d1f06b7b\n095edbc9-beaa-43ab-a7d5-8634ab97fd4f\nf9f12463-bc61-4059-8f6b-82417e278ac5\n5d92797a-dab6-4d1a-a981-630f63a988da\n0d78e79a-1bbf-4827-bd2c-b7982cceef67\nad3dda76-50fa-444a-8cb2-9c4d09d90d7e\n4a293c28-3ad6-46bf-8774-b80c716d9525\nbdda14e0-8653-4a21-a734-5ce998d0b3a1\necbb58e0-38a1-49e0-be5d-a1fc8205968a\neca67bf7-7831-447c-ae6d-946342341b15\n0348f5ec-2970-4c7c-8b1b-75439668ddec\n9834e792-4b5c-43a1-9ca0-0e1087988727\n1634b34a-1896-4c2e-b158-c69b5066c1fa\ndb1943f3-21c0-4a6e-9b3e-9abfcada3b43\n72dc95a3-ad87-4f3b-ab52-30e780aca6cc\ndb782902-4c83-4b98-a0bc-52f3f20e33b0\n23529bb0-1e90-44f2-bce5-856043f9b906\nb76a166b-a5e4-491d-a5ae-82fc288d8bf6\n98ad2bdc-99b8-4dbd-88db-c8d90b9ad1a0\n7da2622b-a79a-4fef-af3f-f02e0206125f\n9c87380d-f186-47c9-888e-512000cb284f\n614b193a-bc0d-40ad-8093-d56082735482\nb7385ced-5dfa-4ec9-943d-9daa08d67588\ne1efe1d9-8933-4150-897c-f1fd178be2b1\n1220e5b9-e239-4746-8f84-ae03f43f1f09\n4570748a-4567-4477-b797-61c6cade78b5\n6b53d951-8004-42f7-9b54-ddbd83e8df65\nb1ad7247-35e3-4c7a-9ad6-f01810877333\n9888c6cb-6796-4176-89e2-4a8f0a943517\nc53f657e-38d0-4f62-a04a-561c1ba46687\nd89c05c2-e530-41ad-85f8-148da9ed5eb0\nc16504df-1adb-420d-892f-6c8fc1450238\n80f55aa3-5e53-4a00-b3ae-6bbb76e1b071\ne50f7c66-e624-40d4-a4c9-d6f1f608229f\na6ef36c0-f0fa-456b-a85f-75d60eafcd96\nafc4bcaa-b818-4669-b3c3-d233070a5786\n644f2a35-44f2-4854-99be-b35996281231\n58700153-606c-4483-9641-c7b1dfc0f0e2\n2d8b8cb1-4744-4b00-9fed-75c8c8876785\n3a7851b3-cf1b-489a-a8bb-79ea3d30ebe4\n07632305-f0f3-43af-9adc-9fd342175f8b\n05208446-0247-442d-9337-c64d4727ab6f\nb0397be6-8e4b-4253-80bc-7f69a5c0125b\nacf46904-1395-485a-ab54-82f0643fce64\ndcf44e99-5164-4417-a564-e06e68304992\nc0d3da2f-aa0a-477a-b401-54d791be73ca\n7c62bbd6-eff2-4d13-a3c3-d4b433e4a996\nc92c2ec3-6bfd-4398-87e8-45e625c06434\nab863d8d-76a3-405f-b994-dc2d3105c14c\n27b1e3e5-3f21-4a40-8acb-67d513bfb064\nea15f66d-e1af-4ba9-8417-a4fdb9ddf9e1\n5d451c1a-0ded-4948-a50c-49318fcad90d\nea499a4e-191a-4a29-b4b0-48011ac8a374\ndbc97e74-c099-46ff-8a8d-0227e210ac2e\ne8a5b818-524c-4b05-a2c8-88d8ac881669\n44137c21-5c08-43de-9952-45bce894cb0a\neadb2b72-44a7-4716-9552-4fe17de9b185\ndf5b566c-d1bf-409f-b7f6-f5fc0e7a60d2\n7689be51-768b-4b6a-96ee-8df758b721f2\ne5f16c66-f251-48c9-9b2c-4bd6a5b3dda9\n405e4850-ca30-4b4a-8553-ea05292c2c39\n2d4eecc9-aead-4be4-bc26-a38b7afdae51\nfd97fe42-c538-43c9-8e5d-7fce57ed1e38\n12429f8c-cf3b-4d78-a92c-480db3d378e3\n416cd039-477a-4ba5-b607-f0cd58689257\n5e6b57d4-4086-43ec-bd8d-7f1e33fb7976\n25a8ac6f-66ae-4ca3-8273-f4a22a86fd11\n9c5bedc0-e9eb-4aca-9eec-05829a849da9\nb4b174f0-b87c-4189-8c9d-640240ea82fa\n285e1099-76f1-4a2a-91d2-386e5831640f\ne3c8b018-fe57-4e25-838b-1de1ad3e8947\nf7e29c48-108c-4d0c-9375-29cfd78c354f\n30892c9d-3bd3-470d-8d10-78df97395b8c\n8b4a4089-e45e-4803-ad2c-21b687f75283\n1f72b3ef-65df-4e73-af4b-37f59009f66a\nd9bccc7a-fb9e-4d94-a92c-e7de7d3c15e9\n534297e7-5d6d-4120-936b-e7a0ebfabf7f\n95b34345-03ec-4730-a138-c61fba627c38\n40f9b841-677c-4720-a517-faea7d73aed7\n64146e78-14b8-450f-9c79-c58f25b0eff2\nc3c7f348-2cda-48df-9197-99227b1e319e\n88cdae81-0aaa-4ecb-bf17-b0bfda8d3ceb\n869807d5-0167-44f0-a6cc-b0cf5aa8b502\nfd297a51-f5af-4c5a-9352-964835e0d336\n4209ebb1-13f0-454a-a554-9fba7bc6a4f9\nb3d9697b-8c81-413c-bc66-87f646da260d\n55841ef9-c9dd-444e-b2df-1082056cffd6\nb0bfb631-25d7-47eb-8e4c-1e5bdbc65130\ne978f2ee-ba77-4362-b87f-b2a34336b0af\n88494b55-c11d-477c-a2f2-39a63c6f1e9b\nc71c2aa6-9f61-4ab2-a75f-e840150e2574\nb79ecf6f-2ea2-49ed-aeb9-a74d7c9526af\ndcb5539e-c836-434f-a350-2f9e48a57d8a\nb700d2f3-5a50-45f4-9b07-5a8a1ae73870\n3c768a51-9b24-4f76-8720-10916556bdb1\n8011f98f-1ace-45f7-9a44-7dab95e502b9\n5b2154c3-b366-4d71-9efc-5b3e75ecb161\n6573de7a-9e87-4d96-8be5-273b6f459646\nf2d7a738-3224-4a56-909a-d43f55ba0465\nd7ea8d99-8093-4a25-a0af-745ef71ba51c\n1c4611fb-bec1-428b-8cc5-f119ab3df3ff\ne0a28a2f-7616-40ef-92d4-407a6f32d392\n8d4bf345-856b-4396-855d-9249c45eceb0\n08f8499c-d1d8-4706-bca5-a2b09a98c874\n0b6dca9c-5b3d-4c55-a994-b71f6d025c65\n6c63d54e-24ae-4617-a34e-f636536bb3c9\n2abcbe9a-54a4-43ed-bf83-a16cc1c0a3f8\n4f752b4d-217e-48e6-a61b-1989e5ddf828\ne6192bce-af58-48c7-b5ba-2938444a40b2\na889793e-0bae-4756-8f2c-4f3d56634deb\nd48c2d06-aa31-4a48-9fec-fa03d6c2aee1\n64057cda-db24-4ca9-96d8-18dd9d271753\n50921c2b-c83c-4a17-841a-5df612ac1efe\n46fb5756-e265-45cc-9cc7-3fc49b3e362a\n9812dd80-68fd-4b4d-a992-4f089c00a559\n030c6f98-6dc7-4e6a-8a5b-5b912df02068\ncefa2a5d-a8a7-4706-a1b5-6e455c06049e\n98412cae-6a5c-4714-aceb-09489428a5ce\nc4322bcc-ccd8-4335-805f-a84e54fb3610\n5069d6d4-1777-4e1a-9d70-1774c29ff2bf\n330677ea-e760-4142-bd79-5b7632f73e00\na944a5ef-9ed5-4a2b-9c53-6f7188ac8a39\n98f0c727-3f11-4f05-acb1-75d8e69bedae\n46c5d866-3608-4d31-96f5-a1e409225186\n19ff78bb-c475-44e8-a311-615c58842ef5\n37487153-0c72-4642-9003-4e570d151cb1\n8ce59b92-0f02-45fe-8b6a-63bc979d5f2c\nf06e899e-6d92-45fc-a59a-bb923f8f253c\n78cb63e7-9a0a-4d2f-8d5d-15bdf61fdbe4\n76ca1650-39eb-43c0-9d7c-ab09d1f7bfec\n25c60aba-3763-4805-94b4-6bd4b654f870\n0608cc10-47dd-4576-b634-3dde25d03d69\nffcaab84-0e76-44a3-bafc-93e4dd8ece62\nd4e15c10-05ec-4a9e-9cc4-c4cea67772d5\n61deb84b-026a-4e4f-a164-d4ed8c0aa017\nee48ceff-f012-4bc5-bea3-421c4b7f0d1e\nd274b460-1a8a-4010-b697-9cecb8712cdd\n88ecc510-e811-4e46-9904-bd4667eda7aa\n884ed7d6-581f-40fb-bf7e-f84cc0ff2bb6\ne182a08c-f65f-4c66-b0b3-82c1ef170f3c\n1d0a0f99-d850-4093-b47a-4571f485f76d\neacd1130-12e9-4ca0-aebb-e82bc46c39f7\n131afed2-253d-4048-bebb-850113f5b443\n1a5126c2-aea9-4e30-b5d4-4a7a3662bdbd\n1ed6658d-5b09-4037-b39e-6a27dbdad185\nbe651003-b570-4fd1-a649-f80169ac64ee\nfb0e43f2-bc52-4920-8119-1275d70c70f4\n2976267c-1193-48b1-b5a7-339f99300d41\n836594d5-9674-48d4-b86e-583025ee7c00\n8881f714-39c1-451a-9f62-7b5dbf37cd24\n101ea1ce-1100-40fa-92b1-cf9533acd17f\n59922582-8472-4550-87b8-9ad3a7a6ec0a\n2c8d43d2-9fa9-4ce5-b1f0-dcb0b2db3733\na5153f6e-9c40-4964-9f3f-d7a170e1ce7d\ne8d92956-049e-40a9-a49c-8633a5e979de\n0e960d6e-4f45-4772-acc5-b8eaf5c60c72\nac511134-3cfd-4ea4-a4ce-c6f5f92c16a6\n78b360d5-f87c-418c-a827-3f93232d7150\n106dfc80-a8b1-4212-b332-3a05d1bfb30d\naf863c72-d55d-40c8-b36f-7b706bdecb4b\nfb729132-a1c8-49ab-9a9c-f25bfb2bc516\n6e1a56b3-844e-4ba1-9342-3517d23cce0a\n6b088b78-faec-4f00-86e8-fdee4df3e48a\ncf3cf9e9-5307-4dc5-9546-10ec53056ea8\n39517dc5-a440-4cd4-8ec6-32a7a4317876\nef0b7144-c1c4-47ac-8fe6-bfaa72f03ab8\n44d1644c-1836-43ad-bfc6-9526d60f94f5\nc71fde71-9ab3-44c1-b50e-701147127f0a\n9308d8a3-d150-4dd2-87af-1796407a3271\n47eebd14-f88f-4a71-a63f-51edbdbccad3\nc41d892b-5bfa-4622-8509-8b8ad4dfc235\nfe8efb43-fd43-4cf1-8d4a-fb88056b448a\n89af6d92-50d2-482a-a6f8-e0734a05011b\n9bf98f57-6106-4777-b1f4-27f888c409f9\n27214591-39e0-4a46-80c9-701d5453f4b3\n6ce2dc47-c128-45cc-9518-885acb548861\nbcc196db-1ba9-4138-a2fe-f5a11352388c\na840aef9-0336-42a1-8eed-a92eb0985b24\n41611149-815c-405e-9ebc-76c119d47e45\n33780a9f-9544-45de-a29c-b2abfffe04be\na26bbda8-a5aa-46f5-a285-40a5bbde55b2\n3f6b4a60-7ae9-4dd0-987c-9817dc05d49d\n3fa41a8f-aa7c-42c8-b768-3b2555657174\n6168a7ac-4543-4430-acea-875149a8a7c8\n98cae760-206a-42e6-997f-e8abf72b9c2f\nd8760db5-ca05-477d-8378-ee9ce7a6e303\n572a83ce-25f1-498d-9e8e-148ec4e77657\n1a7dae1f-dde9-41b4-99a7-36479d1f77f7\n87a2540e-ffe2-4f56-bb30-c15fa39a27ea\n4b110f55-c221-4e53-ba21-d6a7cc840862\nda862857-e96a-483c-b373-74b6aa9c40b3\nf0e20f9e-8cbf-499b-8baf-b5c722f7fd78\ndd59ebe3-64fb-4717-9537-4714f6fd10ba\nec2e869c-a904-485d-8c29-9eee4d6927cc\n9c70e985-89e6-4679-9179-bc36ea085137\nf560797d-d61b-4add-9a44-e44ee8bac35e\nd38dcd62-9373-45e8-b57a-95061a8fe1b3\ncaa54aab-9ce4-4ed3-a37d-8f2061637a71\n155d259a-7427-4c7e-946d-cb6a9488022c\n2186dc93-1173-4cc3-9d1e-009bd9ea5fe4\n35586b87-ae05-4eb1-b476-e185e6c98216\nc96138a1-70cf-4ec0-887d-a34082f63b01\n5613b33b-29b7-483e-83cf-ebf60240c4fe\nf8c93433-0fee-4bf5-aab4-d6f1a8c04666\n79125df8-b5cb-4166-9f94-c66f3ac5905c\n4405d5bf-2d0e-467c-9b8e-4c6c2a326b12\nd836e25e-fce3-49e5-a4da-a28db0645591\na4115f65-886b-47ae-8775-ed998fc9bbf0\nef366d8a-4c97-4e41-921d-30826d1263db\nddd758e6-1bd7-4f95-88f9-fdf174432df4\n0149108c-43de-4072-89b8-c818fb890ee5\nfeac2e46-7b30-4f79-8829-e59e07d6b28d\nf41bc72c-7191-483e-8828-f062823a8ca2\nef1c036a-c3a2-482b-8f3c-e3c2e6113fb7\n71a57b87-c9c4-4871-9b3f-6ee273bf9003\n3db130cb-5727-4d8b-964b-b63dca12cada\n2d0c629f-7580-4fe2-9834-1780f44d00f0\naec792cd-9a5d-4ba1-ab07-6ab680ccbad0\nd25acf4e-f8bf-4660-8e28-ee4bbe35819e\ndb595b00-3b90-4cec-9e9b-73ae4daec83f\n73b89a6b-5460-4004-b654-d69a0e91a83a\ne558af96-4c84-41eb-bbf1-a2fb91561874\n3a8a3d38-3368-43a3-ae07-d81c46ffda15\n8b0d3900-accf-4f87-a648-50a4793af48b\n1d69ca80-959e-497d-9b63-985b2106cd35\nb2506530-c16c-4e40-9110-5c217c0f3c21\n207aadd4-e504-43ca-b5cd-e9278c286f2e\n32be0fb5-376a-48aa-9536-6d74dbe87247\n0dcddddf-2f97-4099-ac79-7f272a0e4451\n47845ede-b43b-417f-b507-03771bb1b9b0\n1bff9423-7603-4d1f-9506-e963adb22225\ne3b50b1c-daac-4cfc-9fe0-5ce95e8faffd\na17800f3-9aff-4623-90f5-30d9b65f9705\n168857fa-d35b-4828-b0b1-1e5e4f63f55c\n4a325fe9-ae60-4401-8568-d597087abc25\naa366735-0e80-4caa-91a7-1ae116b4d3ec\n364e7ebe-78bc-4d14-a02c-9c294648aefa\n719e0778-7390-4bb0-9b33-f449decd8588\n158a531e-7805-4ff3-a8cb-e566e4eb59e9\nfa721d8c-f520-4009-95e7-1f78d0b83722\nf6063284-5a40-45e8-903d-bd679d11d7eb\n57ead8dd-2b9c-4604-bd04-fa2b74d902e8\n93165893-babe-48ee-a97d-37124888bb7b\n80eda7be-8e92-44b4-bdb0-1de504d41f18\nbb2c76f0-7223-4f67-a487-69a8ee8a8ae1\n4fc4189e-eaba-46ce-8e43-303b76ace135\n648b9e3b-847b-4f60-b616-8f4e06cd95ae\ndce2f180-182e-462d-a93d-baf0221de81e\nd89b221c-3d25-4e7c-b6ba-6b1f0b032468\n9fa56523-4355-4b25-bcfa-91456e4905a8\nbab26ecf-80b1-4c27-9992-b8fb69c03d37\nb8176749-cb2c-46ee-9831-c2014a21b882\n49506eae-710d-42a4-a8e3-37dba978a537\n27418029-5ad6-4c25-8c9d-adc7590e057e\n6e5424bd-2cf8-4a5b-a874-5155d4e13a94\ne8bef73f-58bf-43c8-8377-f75479ea34ef\nedc86201-dad6-46ca-8110-81142082b958\n30203389-c3d9-4389-a1b7-32f0fb3edbc8\n8f7e7dc6-8e49-4662-9f85-0d8142af0829\ncb25fede-d970-4fca-afce-2dca17ba887c\n0c6ca7a4-cf57-4e37-b571-7a4479d50354\n98b98a79-32dc-40bf-b7f0-55f44de9e20f\n73989b59-62b0-4c16-885a-f48ec27b124d\nb819e8aa-5e4b-4305-8225-a7a847b35695\nf9de7e62-6c17-4871-95ea-b86d44026d89\nac98feda-f381-4284-a045-269a0c331c71\ndef7b717-0873-49ea-b37a-76290dcbbf2c\ne17db5dc-0bb8-4116-a762-856badfa9ef4\nadf3879f-ee90-4857-9dfa-7be7f82781a1\nb7b31794-a115-4570-ac83-6b50232445ba\n3e68eb42-1486-42e4-8224-0231ea9905c6\n8f804be5-6a91-46a4-b524-ae378edf2970\n8c6ec2dc-f5b1-4951-93a9-ff6223c9b01c\n86a2e38e-ab66-482a-b51e-c6ad66abb92f\n9e141901-0338-40ea-9424-5febc0a248bc\na4a154fc-ad2b-4b1a-b4ab-9abeb6db6bff\na515ac22-0b71-45b2-906b-abd6b1e170f4\nab9bfb8b-fc37-4427-bfab-14ae23354686\nb0c4b135-db5e-488f-874e-2af631f50a65\nd04204e8-c0f7-4608-9d31-8f06065ec8a2\n699f4c1d-94a2-4611-8b11-02a5a1c64f58\n37c3bbd7-9cab-441a-8f27-eea4b2673cb6\n2dd0eac4-3b41-45ce-b270-2f105f34af98\nf118da9e-434b-4eb1-a83b-21be4104a5d2\n0dc7c8b5-796c-4ed2-877c-a879ac1a7df2\n2721fc17-3d50-4f93-8e79-cbffd80e593f\nb0c27804-afb5-4912-a892-c6a6d760b593\n8299fe84-c9ae-474f-99d2-9585d54b5b2d\n69a66956-fb6f-4ca9-9147-d957743af680\n92691891-0870-40d8-baf9-04ccff9fd3ca\nd58ca015-a705-4edd-8503-cac4e1a8e693\n56f5bf9a-30bd-4113-8e78-4d7517a6f473\n91410291-8c6d-440d-bdc5-56bf7874a9e2\n2c04dcef-a0c8-46c3-b67b-91f5e9aca1ed\n0aa54cc9-2357-4dcd-9778-58078ebda2f2\n2d30a43e-4b95-44ab-ace3-b36a32391035\n78e92bb8-9251-4f7e-b1ee-969d855b6181\ne83c4bb6-5c03-4b94-b5cf-2792b4870af1\n2f8f7b5a-e423-4f63-94f2-041a586b4698\n820f4952-b2b8-4bd8-84de-c3bb064c1276\n9682a316-fd3b-46c0-aa70-3f733951d357\n6b4116de-73b0-41a0-ac9c-39dfaf37d112\n5b5c2dc6-c0f5-456f-8b45-81529a44ce11\n960c8c1a-f5e2-4744-b808-6a16eaf2b555\n3034b1bf-6f63-4c81-881e-e97b5cc05443\n38a1ea82-d105-4c74-bbbd-31e98eac7b66\n6004925d-fa6c-4af6-a9d0-8fc471d33cf2\n18d9a77e-b32d-42ee-b868-9977cb0ba70b\n5dcdc84e-3a17-4552-9a89-26e8aabc06d3\na6d98d59-13af-4b0c-9d59-0e7865533b89\nf1b109dc-1ea7-4565-baab-ac48ec56346e\na2f2bc1f-4e29-40c1-8ce1-b276b8c40852\n29348b4b-c7d5-4d35-90be-43c852f0fa61\nf8402b31-a027-44eb-a032-f40261d58262\nc3732cee-9f04-406f-a01c-de9ebbca5349\ne3f8a838-5380-40d6-b1a3-bf38410721d8\nfa4cdea4-2ceb-4cda-8d44-720533bed187\nb272dcbc-7f48-496b-be44-5ba68711a7e2\nff7fd393-1331-4b13-a05c-0d1801b198cc\nb7822348-c31d-4f49-b88d-ca6fa1cfe894\n2144f6ac-a37c-4542-9fd0-c4f60c0b99cf\n8fd05797-289f-40e9-b9c8-c48f3b90180f\n37f48e3f-9fd7-4460-813b-8ec84d8c2f68\nb9cea83f-c8f8-4a20-9eee-661c8fc9ff0f\n7d0058de-4c0e-402b-bfff-261109d010ea\n79163b12-7e5d-4666-ae61-996e786bd976\nf0055a28-95cb-410e-adb0-17c35858e779\nc4086a4d-d5b0-487b-a7e6-8717cb836d14\nac857929-9f9f-4eda-aafd-63d34f2fb495\ncc9fdea4-185e-4e75-9dd6-5c5cf58a4496\n654bf591-8f13-4cd1-9e78-64020fee1981\n59167b6c-c3fa-4122-afbe-974be93421b8\n0aedca94-3a56-4e90-a5e0-b8df6bafe77b\n7ac2ab82-0264-4003-b8f2-a2a7e52e600d\nc6bf78a0-e642-490d-a723-0d0346b4ffbb\n922d4a54-7056-465a-8144-f2f95dd3bd5e\n787888b1-65ab-4c9a-8e84-9fa0aedd08a4\na4bff7f7-1003-41ff-a772-ee4081d0dfeb\n5c078891-ee69-4823-90f4-e6e29fb082e2\nce84b794-20ca-4669-87a4-e9d9b33ac778\n3e52baa5-1aab-4015-8dda-3125bf9354b7\n0a84f86d-d7ab-40e9-9a96-1dcb39498e43\n3ad5555d-71d1-42fe-b1bd-477fd60f88a6\n7b845a99-3b6b-4fca-89d4-12e77ea1b831\nc447fca0-9c58-4410-b520-5435c44baa3c\n3a73cf86-ca09-4e4b-952e-671608f469d9\nd9f7e337-ecd0-44ea-b6dc-b0c64fc893c3\n0bc71f79-c514-4e41-bf6e-860013faa918\nd7cc85be-84e7-47b9-b209-4959131cee36\n1ba091f1-84d7-42e6-b923-cfb5416e4c50\n3158758c-0fe7-40eb-bd4b-4c510d5530c6\n124a0e98-fee6-47d3-9302-0f09d1d9b1b0\nfcc3af77-761e-434e-bdd6-ed62af20a2f9\n837b0cce-cb5f-4536-8f99-f6a108bcafee\nbddab0a6-bfa3-489d-bf77-e18f3a9157ba\n08dd786b-af6b-4be0-bdf5-a00c63d693df\n25e91522-7ab3-4c8a-bc8e-e16df33bb6ba\nd2a7bd70-73bc-4024-a2aa-1b29728b218c\n5cc8b5bd-dcea-4bd8-be77-7026707af80f\n008e70ce-f38a-4926-aa65-37e90e011308\n33ee7c14-7897-4cc4-b2d3-2c83a6039f6c\n62bf5762-74bc-4fd1-a4b8-7c6524731dcc\n15aafe43-b4a2-47a6-a23c-6bf0f992a279\naec24514-219e-4446-87ee-39febf48f8ff\n781d082a-ac15-43a9-a917-1267ab8f60f2\n0ef90d5d-6a98-4562-bdcb-25dd04c681e0\ndbfbd1ff-b1cc-4356-8dd2-1bb31052d47c\n35dab643-c0f6-464c-b61f-868e06b8cba7\nbcb9ebc5-5a23-454f-8d23-f5639ff426e1\nae164230-6512-4af3-aa1f-984ba0001a2b\n5a121a6b-0dee-4465-ab62-f336d7f19c99\n68558934-0569-480c-9fd1-1f906774c11d\n50972fef-37f2-48d4-8a2c-d14373d87f49\n9147851c-eb86-43b3-96fd-38f47d3cb08e\n9b8716ab-a3a8-4cc9-b519-daa4d02f6424\n6d35d3bb-0420-4864-92a0-440747b888dd\n155c5091-0648-4179-abf4-3276e9dba8a5\n2676a0e8-5c1a-4caf-ae1e-447ac334cf62\nf3f28e3f-c444-441a-a950-4881f689d45b\na7a14fc5-34d9-4cb8-bf8c-81627c86bfa7\ne456e130-95dc-4a17-a13c-ef6aa17ac844\n6f6d981a-40ac-49a1-9a60-f1e6d69f0836\n3cb5a2f5-d4dd-426d-b671-4ffb3d60c920\nc2a85936-4cbb-4fb5-8c55-ee8285d298ed\n9217556c-ed47-45f6-8d26-b2006993e766\na4a9d3d0-f624-40f1-9764-bb8e7cb01fad\n85197626-17a1-4647-a8e2-658e633b138b\n456149fc-810a-4a35-962b-a92620ee6ce3\n456e3820-1321-41e9-8171-2ac6f9405f7f\n85522387-e9d7-4c3c-a99b-202a1ca462e9\n4ca57385-93ab-4acf-9389-eb3f98101380\nc78896e6-f30f-43a9-929b-bb9103cdf1fe\n4da73a44-c7ec-4af1-8193-ed255696200f\na2eefa8c-bdf0-42c4-a4d1-1b0dbf89c774\nde6d3cb9-fb7b-4ddb-be5c-c392c68da5a3\nacf59726-bb98-4e03-a98c-37b45e0999d2\n9118def7-d96e-455b-8642-3b6f3764bcdb\ne0df862f-36f6-41bd-9e62-1d4c3bd64b42\n0c77866f-c3e8-4e28-8fd2-4895b9ed177a\n70cadeb8-3f3a-4eff-bd0e-fcf0d7847da3\n5d629ff8-3384-4d26-8ceb-e8f488935c32\ne2fd1ae5-bc4e-4ca4-a28a-f8cc3e779ffa\nbd5b2087-d4ac-4e2b-b061-9802703b718c\nc7fbf794-3d6c-4381-9c6f-eb262a91641a\n6680d70e-1e8a-4181-9a95-912ebd3831bd\n0bcfe264-14f6-46bb-8e71-e7aa4a14add4\n912e7d0f-c8b5-42ff-894f-480b21a7eb1d\n0fd7bb1a-8ff4-417d-951d-e1c3c9674ffb\nbe39c9e7-ffee-4d50-b443-979f86f2b208\n6a48d6a0-48c0-456c-bf1e-85929bfe198e\n092e0c5d-da14-4fc1-88ce-2484b07e1fb1\n2ea166f1-7003-400f-aa2d-4012cb6c9bb1\n67df64de-9b21-437b-b54e-8baff746afc1\n4c1198cd-928e-47c4-9bc0-6976dd9a6ca0\nd78ed0da-aa13-4c55-8e78-632bd6231364\n1038cfe0-43bc-4b61-bb73-e30517032589\nccdef5dd-8135-4119-b692-fdf9357002e5\n5e0c79de-6b1d-47da-9ea7-2afb12c6bc5d\ne4473d74-1af7-4928-abd5-2287107377b8\n6b39356a-bd85-44b9-b1b0-0c28fde56d8b\nb81c1737-a54f-4067-9aeb-9d582282d22c\n1e7c4190-113e-4d0f-8ffd-e526787fd581\nc50f094d-8ae0-4a05-8e06-e5116830017e\n50b76cbe-b55d-4982-8176-3d1ad5a821b9\nf24f5e28-f98d-4088-a97a-6f817f212f22\n22310d10-bec5-4234-9e25-1f6876f0a2b6\nb244292e-617e-4962-abe3-f2780010d6ff\n50dccdad-402e-4a71-88d2-4a8ff3c904b2\n11d85886-a4e3-4487-91b1-f0b9acbe5fb0\n65d57fff-88db-40ff-8cf0-21020dd81a28\nac16d935-ebe1-4789-ae3c-95f9c61aa7c9\ne4d84946-b6a8-4f03-9993-7089e51c12f8\n2fac2881-4830-4167-8b10-91a354450e54\n9df064ed-0c43-4ab9-8e82-c2a26031726c\n0aa8c9ec-0e6b-4f8f-858e-594691568ac0\n6ebfb15f-b59f-4224-aa46-b0fc4c97bda0\n69f943a8-5067-430c-976b-8dd46b6f95f5\nc4adee98-d28b-4ee3-8992-3342fc400314\n3c2a8ec3-ec25-4e5b-b21b-3d991e979dfa\n47eff5a9-b45e-4c1a-a1ab-ed7f0026615b\nac2037cd-274e-4d95-9a82-ea905b2b68f4\n0fb47cf0-7ef1-44c3-86e1-2ca2b24fd63b\n1bb50687-d214-4c25-9208-a627296d1055\nca99bf9f-6ec3-4155-a383-4a75892e68b9\n89d6710a-c245-43d3-8fb4-1577bbb065ee\n4f183165-5418-4548-8975-d541f6732e9e\n97713a85-f57c-4d92-9e24-0ad988e5273b\n0f7abcd5-f7cf-4db2-a5d3-2b9b197ebad6\nc3298d26-5277-44f3-9a92-1b7249d16930\nb4ad8aca-11f3-4e2b-8f81-516d049a55fd\nb0405228-fb8a-4d59-8051-83aad502d3cf\na488de62-e23c-4f66-aee0-58c2a605ff27\nea0bd358-4b7b-4e8e-9e46-e558a46b8cd8\nbadeaa09-25e6-4d8b-8092-fc2116529f74\ne38bf733-9ebd-4628-a0b2-bc50c52e1c56\nac54aa9d-92e3-41ee-a56e-ea404eb9cbd8\n516eecb6-7d94-4aa4-b6a4-92607d824db4\n8635ac15-a6f9-4e67-b5b4-c05e9064b0e3\nef322841-5efe-4843-a6f3-802153706540\n11780080-e0f8-4138-a42d-cbb2d6672764\n203fe7ee-d328-40a3-8106-6d3b959515e9\n1997dcc3-6bf4-4b52-be77-021720bfe0d4\nce402d01-70f2-4f39-bcd4-6a0e2c005233\n7d80e660-73d1-4406-8eb0-6facc1b42066\n83678b2c-0563-455b-bf7d-1f1bba38b851\n18532ae0-3a13-40ca-9fbf-63fcaf260549\nb6b9146b-a1ab-43a7-8b69-4a62d16ead51\n39f14f60-1603-43cb-a1fd-53a6fee0ba49\n85afa0b1-db35-4556-bd06-7a15132bc72c\ne12ee7d5-c049-4a09-a2cb-e31402599b42\n01b836ac-bf76-409c-aeda-de0974c831cc\n1cbdc864-b732-47de-9cbc-c7ca45749aaa\nb6fee71a-ec5b-4a18-9524-2a0951d6b92c\n6ab300da-651f-47ed-98ec-f4e8598359b7\n77fc2471-0150-42cc-ab2e-6a881ae34285\n44cf65af-2d36-4eb7-a96d-bdd559214d52\n3c727302-e6da-4d01-849a-3003613edc73\n4a63fe38-4b30-4c78-b7ab-0b6e4731124c\n7a6697af-6135-48ad-a8ce-2f249064ff49\n322e6771-ee0e-4066-944c-2eedd36ba1df\nadb8f5be-3067-4eed-8919-494343a126b7\n5a2e40a3-4c66-4e40-a7fe-7ead482891c7\n851cdd6e-2023-4c15-ad19-a2fd8e24e17f\n620eaa03-89fc-4d75-869a-eefab7eb082a\n7415d4ce-319e-415a-a277-1c6e2fc1803d\n944fffcf-5198-4a47-a028-33e1ec322fb1\n90377f13-d3b1-4739-a8c1-5449189bc330\n9718b65c-9727-4b08-9dfc-75a5885d69a7\n4af3e159-cdc0-4af9-bd8f-d502d93ccda5\ne9330158-bebb-4004-9a81-2c4ebfd29ee5\n728e3a44-60ef-4b5e-9e05-d01f76dc83a7\n70001e9b-41a5-4ccb-bb15-ac83be66fc19\ndbaf1524-cc28-49fe-8d84-8f3642986690\ne4f87e74-745a-4ca7-acbe-14cc5676c670\ncf4e11c0-0842-4553-8d54-20ca1a8b9109\n8efd9490-5f90-4b6b-a93a-736c40bfe573\n4765507c-a1a3-44e4-ba99-cc87cb82dbe6\n2449ff95-02ad-401f-9fe7-4301ac496657\n3248613d-03ff-4d95-a9b6-f2b85dd0273d\ndf83c5c9-82df-4632-8b29-712124b76406\nd43e2334-3b80-4979-8be7-5025defdeeb7\nc8a1b72f-1a7a-45d1-a0f0-070bd3ef5b1f\na6e87baa-d8e3-4324-8668-ff7a27964637\n3697b791-bc8d-4e61-9262-617b25d9a9f8\nd1f458bc-56ec-4741-a026-b08f3dc1e813\nc49ce370-332e-423d-a8ae-1e3fa4902b6a\n84d31daa-8352-457b-8bb9-a1736cdee6e6\n8b4243d8-1e47-4c9a-a242-754b26eae855\n38603320-f01f-41f0-a21f-3ab88aac9824\n57b3526e-12c0-4fb1-8479-fd4ff39fc7cb\n54fbbd72-1293-40e1-b9b0-8a4d4a3786e2\n8315c8e9-8cfc-40b3-a431-2be029187d93\na9094498-6dec-4759-9626-b4241f51648f\n8ccf4ab7-03a2-4b07-ae17-ef7e47f3931f\nb245a3fe-3a60-4400-8b2e-562b5f58395e\nfc8f1000-0cd2-42a3-85bf-85a2cf2497fa\n84f34725-7722-4981-ab2f-fd4002a6c2aa\nf01fbc16-371e-46b7-99f4-a375381d4d32\n932f745c-9a8a-4570-8ea1-4ae32ad2c0ab\nefd2bd22-6ce4-4770-8252-1200212b5be9\n24794d6b-8d70-43d9-bf2f-bb91a6366b28\n4fd5a489-61aa-473a-b30b-404a55058ed9\n733ab861-cfcc-4397-a02d-ff76854071c7\n7eb47d2e-849e-4a92-a84a-8a957015ad2c\nd7431f83-0d03-4181-abe5-7760be3aaab0\n41c1e149-1b98-4ce4-a26c-9a2fc108dcdf\nb43c9d62-6527-4725-9128-87226217872a\n2dc9e8b7-1405-4600-a390-b30f97012671\n2fe10388-ec40-42be-9fcb-937c0b8bcce8\n02844dc2-8cd1-4546-b446-b475ca8bac4f\n92a0ca8b-d513-4235-b298-98745f005605\n0cf3b1b9-cec8-4c31-a80c-703f2601af90\ncfcf05d0-1425-4e47-91c5-f6075b6542fc\nb71f3eca-448a-42f9-a35c-5af314e3556e\ncb99e255-44b1-48a1-b3e6-e4110fb6dd9d\ncad82804-b5e3-4e58-b3da-a1995e77416a\n4d70c648-e092-401e-a528-4e382c8f93b6\ncc31263f-e7b8-4499-ab9a-9d9d85f301ca\n9497d005-c6f1-4a45-bdc0-2fb81a69036e\nffb885e7-d406-4ad1-bb78-a166d92b05a5\n8f6cccd4-5b1b-4e6c-a725-4b6ece9da1b9\n4df259e3-36fe-4bc8-84df-1efa21aeb12d\nd4649956-1810-43c5-855c-463c187949c5\n2d01fa28-dbee-4c89-bab9-45b02335f246\n303f2668-1ce1-4346-990a-e976090cd660\n6b28d049-3adf-4c3e-b614-74ba9bf1e98b\n96488d83-092f-4133-a826-1e2cc3a7e00b\ne4373f21-cc5f-4417-b311-0b2a8a6d146c\n23f8f7b2-556b-4fc7-8835-e1f999ee2bdc\ne7260eb7-4fcc-4729-b796-f21da84e909c\nd08618f9-e4d1-43d3-959c-b4f5dced9114\nbded195e-4e82-4ea4-ad11-695614076a48\n738b0fa1-f404-465e-9be6-93425d9a6e74\n6d937fbd-70ab-40f9-8f1a-bf1119564cb7\n521b40af-651b-4462-b9d8-6affb012facf\nd0e7e6ee-bbb0-40da-adf6-f893faeddda4\n8c3763a3-d5ff-4b0b-ab88-6fd6f990a251\na4837e73-03ae-48a3-9ce1-136a227d7ad2\n7118db85-8ae1-4b4b-8ac5-8ddfea5b5aa7\n86968d44-3404-43d1-8838-6405368df598\ndc35fdc8-ebae-4d32-ba53-30495c68590b\n74fc9607-641f-4aea-ada7-6732751684c1\n110057c1-7b08-43d6-9d38-9d5908e78672\nd5c63fc4-5994-4403-9e65-b868af01ff51\nde391d60-3b72-4349-8d94-510779646fe4\ndaa1c9dc-ea7e-4d01-b4d1-bc78d5affa68\n151ad5f7-776c-4217-9b95-1fa973970dbd\ne192bc92-f230-40b1-bb6c-eabd1a6f3e90\n3aa9bc5a-1211-422c-a166-d20caa6f4c9e\n12e2b8e1-8a0a-4030-b140-ab10c227e13a\n7b974cb8-3d7f-4b1c-b4b4-077ade25e1c7\na5887874-4e9c-4fac-ae55-ccc2da8a71fa\nddbe4b45-c25f-4e2a-b455-6fd2d1e33f32\n1bae0985-6b95-4b5f-a20c-3f61dc6729aa\na80149e5-c048-4b3f-9bd3-097d71c8c1ad\nfcaa8c7e-93aa-4dab-9ace-2642c0c6612c\n1b08c17c-6ee5-40a5-8792-a6eb28023b0b\n81113998-ad9e-44f1-8d97-94016eeb2bd6\nc7d92aa7-590f-4d61-9bcc-a3742d6be034\n42c6e95e-126e-4496-a48f-6d589cf2e5bc\n49fb4a11-0c26-44cf-af10-07c167cf1713\n4881b309-413f-4183-bbe9-73c0de548bf7\n87615bea-04f2-4a14-87b2-09c875901204\n1e0438ba-ebb5-4ac6-bab7-d76e7c1d3176\n1a13a4ee-338b-470e-8981-e9550df571ad\n69a39f6d-3637-4a91-9909-3fa316d12d10\n55404ba4-791b-44d3-a6e5-a51d9b5e4503\n5cef8d16-abc0-447f-9887-63ca2d76a724\n17c86f7d-49c3-4203-94e6-3f9ae334ce5e\na6b4e93b-5ea3-402f-ad55-c05522ba8dbd\n5613e308-7394-4bd4-8404-5322161ed024\n5c236c83-8c95-48f1-9f89-23d44dc3a7e4\nd4a8e8d8-2884-4afa-9f7e-bd55977cfc39\n55711217-e300-4f3d-b230-dad6d1c0f051\n43995c86-a2c3-4eea-bfa5-ee0c77326a3b\n3d24ef62-d72d-43fe-b374-47cd1b9df734\n6327fb83-e4a9-49b7-b3bc-9af5d5ad67ae\n89fc143f-47ca-465d-9c0f-6e6c4f5ceb20\n317de47d-87ca-4eb5-bfa1-62c3a7748b2d\nf9d5e40e-75b4-4c5d-8fe7-3f48dcc5befc\n8a321410-5a6d-4098-8633-6d2b6a599b10\ndf3f4eaf-7141-4edd-9d70-77d0f28334c5\nb0fa567a-8b3b-439c-8a6c-378999baa43a\n0e9219c7-30aa-4e5c-928e-49c5eb79f81c\n864fd31e-60f8-430c-b684-f80a3f4cc768\nd1e666ce-44ba-44b3-a13b-7e179222b555\ne8bfa01e-d85c-495d-8c2b-3f9bef0071d2\nfcd71b68-aa76-4cd6-8e97-48d29b39c89c\n7c3f2374-c81c-4795-bd88-a2d97558ef88\n9e5cd967-0a1f-43fa-afe3-bf6ef3b79ec4\n5d45a6bd-1692-4ac0-ab25-2c40ed549941\n2d73f02d-d544-4f53-8edb-72714b2fb4f1\nb0c36f0c-4020-4be4-a990-742d0cf1081c\n5802f398-45bf-4c00-bb50-6408ddfd8671\nccfcece2-acd1-49f2-961d-69adfc5630bf\n48012896-1055-483f-8de1-139b524f1332\n8dceb1ee-b3bd-4803-b201-be8d3a2595d2\n243b1137-a7cc-4f1b-8c23-d03619754490\n5f0c8dc1-d5aa-4316-ad8c-9242c0e5b037\nd192a60c-55ee-4791-bbc5-364d9222569f\nfe3ad18f-95d7-4ac9-a537-2ac369ce9683\n21868765-b210-490b-9f45-6688382f2e35\n41471d02-ace7-4d57-b010-1911037aaa3f\n5ed6fc5e-aa41-455b-94cd-529ac97fb8a0\nc76d9610-6e69-47e7-9d63-c2d61827a0a3\n30702f74-79c7-4735-86bb-57c1b7e92a55\n6b0c9a9d-9624-45ee-bd57-e5b4317d1ffa\n688eaa31-df25-43eb-96ef-57923a714dec\nb5d7ee1b-a17e-4128-84f2-662106d8db19\nea51e6b6-329f-41c2-b5d3-0076e6f7655b\n0ca7ba89-f45d-4953-8a02-4da9d80d6ae8\ne5b35d79-271b-476a-8d68-ef2898bc5b8d\n3c74960b-db4c-421c-b984-29707465c541\nb1aa0ce7-61ef-4199-b757-d24366f4cdb2\n254f2165-2af8-4070-9a05-752e0b030393\n8424d6b4-4793-44c7-8a28-a338dcb31cf3\n6873d773-657d-4946-b7b5-648ac6ebcba8\n287f60e5-86fc-4617-8822-6cbd8be865a8\nadde5f58-3b9b-47b0-b533-255eb94cbb70\na2310e89-6f30-4d8a-a58d-633fc71718ca\n6124d05b-f458-41cf-af38-1236c545f96d\n1ed2dc0e-22a8-4fd8-bdc1-a5092219a152\n0f730bf7-0c2e-4b59-aedf-b6a2750e6393\ncd700a6c-9f4c-4d4b-9503-1f0c9eefe4cc\na7b3629b-8807-4a6a-acd9-d0147670cc62\nee25038f-c264-4edc-9e61-e0f57cb5f751\n0757d3a1-2286-4939-83ef-f2e192973ff5\n569a4c5f-8b17-41b3-80a2-3f3646f87e75\n1d430656-13ff-4301-9407-0e803a787c2a\n657f183c-852c-435c-b0d8-ccaa7a886659\neb839c3b-3a21-4917-8ca3-d67006782dcb\na75e724c-68b3-42a1-889f-604c3a4666ba\nd6ee28c7-5e96-4a3c-a899-e38f191b2fdc\ne33490ef-8092-4358-bf5b-ddc1870ec43d\nc8056021-85e2-490e-b0e9-01d7dede505d\n210bb58b-9abf-4adf-89b2-d6bb978fb972\n92c2a384-3533-412f-840b-41fd270893b5\n7f3c331f-46f9-4064-8325-d87876761edf\n86e589c7-115f-4e55-8bb7-69dfdc0d9a0e\n1583cf85-3c84-4a40-9aa3-57922a639035\n7e08dee8-e363-453b-9e51-ddefcb253d47\nc03f06e8-028d-4b25-909a-643cdedcc0ad\nfabbf116-704e-4c4b-80ef-944d05e8b310\n576b457c-5031-4e2a-9b0c-e0141ef7431a\nc0438edc-c9e0-447d-9661-9c34e0d6094e\n51f6489e-fe8e-4077-af38-40464fc58647\n5fffbece-5007-405a-ad5c-52b3c5731a60\n57a04946-2589-4b7e-9ece-a67eb8afc609\n8ff3aa50-e936-4da1-a008-4141ae52e5da\n7c6857ae-2c15-44ae-b3f8-139bdd9defb7\n3e7da260-6918-4671-9438-57e5528c805d\nf5691f9b-5365-4959-89dd-b6602dd1cf5c\n9ae642ba-01a8-4c13-9ec2-d5f758976e84\n6f542bd6-d3e5-4649-892a-51743dabc2dc\n79edac1e-c6aa-4c0c-8624-ff9fea4a4959\nbf71334f-2d55-4729-a75b-66aa93fb6053\n38fb87b9-6eb2-4daf-89ad-79bc0436ab0c\n9dcf9727-ea81-41b4-82fb-9adf497853cf\nf2e25662-8c57-4dc3-bb23-eeefdb56115b\n9a4b3ab1-652c-4797-a920-989958bf2f26\n7bce0e32-533b-4435-8edd-434dbdb41895\na8cbe411-f9c0-4d94-bc74-b4e947679e46\n82bcd1f8-33b8-4be6-b1c5-f25067510219\n5413d8ef-e486-4f52-b5de-1f124ef3d322\nce630268-925c-406b-817b-6a60fb2dd544\n4d3a48cf-cd48-434c-94c5-86fa9bc77aa5\n49092275-b846-428a-a62a-3c7dd1c950fb\nc868d800-3174-4859-824c-f5a476444ff1\n0278bdf7-a721-46b6-89c0-608e2f0fbc22\nf40a9bd6-bb62-4cb4-8ab4-163f3de581a2\ned59d1ef-8331-4f01-94f9-f350d3e90deb\n96865753-a5d2-45dd-8f1e-ff3a339bbfff\n6a0490c2-67e1-47b3-9507-523eb7514ea2\ne691ab35-9a6e-448b-a6bd-9ab1a95f7263\n2a247a31-2162-499c-afc3-1f9bd44a6dc8\n1687f259-525c-42de-8bf3-c539cd9ab31b\n8c636a91-cb66-440e-a9a7-e6a4d3c901e5\n546357ee-af4f-420b-8171-eaf818e777b2\ndf3a1bf5-b392-4efa-8fdc-74c1c9e7adc3\n7ea5ad7f-401c-4e6c-b78b-f55868831611\n40e51e60-9925-4cc9-afc5-4928c355c17e\n4da9be28-e2b8-4577-9be5-a6807463749a\nfb968bd0-9ec7-49ec-9327-7ac98d4b7892\nb1f8b759-9e5e-45f7-89ec-eb392a4c35de\nadccf557-9a62-4107-9cd8-44b3e8939d2a\naec79412-de0b-4428-a37a-d59afdf74fcb\n37d365d3-0b72-4385-b9fa-789e1350dac3\na2369ee4-dadb-44b3-9da4-469edcbe2ace\n919384db-724e-4589-b469-75102ac182f3\n75c9fb42-f84e-4560-b7d4-c1b239c78c53\nf39958a9-c521-4c3c-971e-f25b7777b24e\nd974af7a-f328-4b36-843a-ef33897318bd\n083dd510-43f9-4e2b-b203-e1b3a93eaa54\nf41517e7-732f-4ad6-bd58-42d12e228127\ne0e53b38-7304-49bd-b4ce-80136e35b15a\n25479145-06c1-4c55-8f0a-e0e7f75c3489\nf4c54b2a-4ee7-45ec-ab13-e9c2150e9d26\n780fef4e-4d26-425b-8fe3-b19ff15102f9\n8db2dccb-1433-4324-b5ea-36bd0ef56b2d\ncb81e7c3-f8e4-45e7-8d78-ac7221bce079\n7537039a-db56-47be-b2cd-ecec8434c164\nd6b25ee0-eeec-4ff9-bc0e-a280833e84b7\n903f8cb4-6577-4fd9-a1ae-a8963a5ec54e\n2e961a1f-2835-445f-b5c9-94550f974102\n43bbad58-14e4-44c9-a12b-8299c4280f5e\nd44cdbc0-5035-421c-9315-65097cf47c72\n8b6d62b8-673e-463d-b39e-bac93ced3d78\ne91ad398-6233-4d5b-9f25-b6301301c795\n7c372b35-b5ab-4d24-ba30-406fef0d468f\nf8f80a2f-028b-4aed-8a06-5ca1361198ed\nd1962ee2-edcc-49ef-a66b-d29fee4d8536\nbb80c64e-6fce-4bf8-8be1-219d00b3cbb9\n862ce9f2-7061-4fcf-a1c4-32d6f896d589\n602c9a13-6380-4185-aec3-84417c4c4264\nb87b19f2-140e-4b70-9d4f-75d9b0665762\n233d5721-46d4-41e9-a7c4-681f02b9d05e\nd222de5c-d83a-4ca3-a91f-b50fc95920e3\n474b62ef-2499-45f8-9aef-a237f8b47a98\n53756dcd-1947-4b4b-ae24-247c1f62ecd5\nec80209d-7ac9-40d4-b5c1-636eda65fc77\nd3faf127-60d2-40d7-aa55-6b93a74be049\nafef2803-4420-481b-8a31-b5f74379cb0c\n17eeee17-daf8-49d9-ba52-ce549d4374c2\nd8c38c9f-a2db-4584-a27d-10e47fdc420b\n0db3acd4-2020-4c97-840a-646db2e0db8d\nc8dcee10-9ac4-4d1e-908f-6b52005a1727\nf3ea0b3a-c260-4e05-94f3-1168935cd602\n89cb31c2-fcf2-4d7d-9933-dc58619d5d77\n16387bc4-8eee-444d-a46c-5189fa467d64\n523e8da5-66ca-438e-9df2-8811e5345979\n7b43e4c7-5f0b-44ca-9f42-9b6978056abe\n3b6b13b3-54b9-4aaa-804a-b4ee5d940e33\n98465cf7-2d31-4894-9106-90ad4b80b1d3\n16e8f7e3-5a51-40fd-bcfd-582efd963c23\ne12f2777-f1d9-43c8-bf6a-b0ac1cc51cea\nde54da8f-1a64-4ba6-8124-a66f7896eede\n04096065-08f5-4aed-ad79-96619dbc0782\n3327c42f-d290-468b-aefe-8fc9c8544c50\n7ce9f320-bd7a-438f-87b7-bbcb657290e9\n5ee56425-1db0-4a3f-b8a8-30cf274c2a9e\n982fbb51-9640-4fde-beb5-3c73023d2d31\n678e2f81-5d5e-40c3-bc9b-63508c63751a\n48ba65f3-5e9d-45ba-b3bd-d467f69c4100\n92846291-3b2a-4c4c-852c-5b2e9a939cd3\n5b53f7cc-e01c-464b-8896-7f76f004eabc\nc9a778e8-2d77-4a6f-a210-20a3a5c8e2c9\nbeaf0fc2-0c86-4d49-8daf-6a38ea39b5b8\n6828c705-17a8-4eea-8753-d5c8af42231b\nc0134e5d-11e0-4ab6-afa6-946a489163f8\n78da7685-16e1-4537-93c4-0198d2f372e5\n8efc6666-7a5a-4176-94dc-b2fb700b3fe6\n949e500b-f91b-4566-ad2f-3297ed4405ba\n96aa49a9-6065-4f91-bee1-9a862e02d649\n3fe07994-6065-4d99-b172-34d48c693f36\ne48124b5-9f0c-4274-a2dc-bfa1a26b5605\nee4319d0-cce4-447e-9e2a-4e26d1646f38\n320873d9-068c-4b74-b2c9-3d0435c7200e\nad2adc3b-0f8d-47fb-a73e-71e18bbb1611\nface2929-b51d-4bd1-83f4-afa4fe633127\nfb1f6a90-6c5e-452e-bb1b-e68db7cc8bf1\ncef034e3-7989-4922-b648-14cafcc1e46a\n0d49e5ad-58ff-45e0-b3ea-3da7a6833b6e\n1607538c-fbf3-48bb-a4f7-65370815df1b\n1d12e87a-95fc-49a8-bba9-defb3f56f849\nb8e8704f-6d48-418d-93e1-42bc8babf6fa\n859af04e-97b0-40f2-9cba-bc489a51df2d\n5df87aed-94f6-4117-86de-6965e89e8f3f\n0eadafad-db03-49d7-9795-090dc24807b2\n55a8c003-1086-456c-84e6-81ee9179ab07\nf60f6d35-6032-413b-91d0-ad2bc2ec47f6\n8de5bd9b-a67c-434e-b31b-75cd45824872\n30369966-832e-4d24-9566-1f47d8c4b33b\n897271c9-3e27-47c3-afab-3d9b49d8187d\n2a6d3e94-2bab-42db-abb4-ee65fa9a5b8b\n8d36f5f5-0666-45e8-a40a-56ea10309e72\ndf1b9837-5171-49e8-a3e1-88a75ff85e89\n4b10432c-aa82-44bc-932d-66e821c55bca\ne8c6376a-bf44-429a-ab15-c66fe77527f8\n28813a85-9533-4cac-9912-24d19878310c\nce1572b0-bbf8-4c93-9b80-0aeb8457a8c2\nb68c1bb8-98a7-413c-9215-4bc9954224aa\n97c00529-93c5-45b9-8b9a-090629db0240\n09cd86dc-eddd-47e0-b9aa-346ef4613db7\n159ffda6-b78d-498b-83e4-cfc8263a1e14\nafaa454b-ea33-4aec-917d-97cdce459891\nebee3bf7-8024-4544-b3eb-39b682749d8b\n624e1dbf-4eb0-4aee-b5b1-9646d99fdfe5\n064415e9-c86f-4d8c-b580-4e8fc6d19220\n07fa2dda-884c-48ad-bb1e-886c86f3a1ea\n8170c0ac-7403-453b-843e-6ac41480b27f\n6ffcf0ca-8ba7-4765-96da-3e8b5ce064ad\nda52d6f5-0fb6-4454-922f-6b09508e6286\n0fe7df9d-85b3-425d-834a-8f43a0413fd1\n8a11d935-c895-4de6-9312-c58e2a8af058\nd1208537-94a7-4143-8b20-fe691dd30c43\n2972ae4c-3b3b-4949-b4a9-d4a82b40a441\n7d08b3db-7da4-49d2-9ca3-35900c20b6fd\n51f13ad4-a7dd-49ce-b378-610aadde63ec\n8ff186cb-78f9-4e95-a2d1-3ddee728cdd0\n4a4be8a1-b462-48ad-b36c-18c96cb65aed\n6966acb7-2946-47f2-a8e9-dcde46bf8898\nc1fe9461-e26b-4dae-9528-9304481065f8\ne7b6029e-ff9e-4110-9fa3-43f05f6012d6\nba309bf1-e576-4f70-9e94-dd568812e7bd\nf4206643-3b83-4c99-b52f-afee1bae6232\n527d63d2-d77f-4c7b-ad04-fd2397d6554a\n7cd35a3c-c9d0-4982-855f-da29672eef9d\n1428c966-d1cd-407a-9bdd-330c28c20ec8\ndda1a454-93e4-40f3-bb9b-bfba4c34f837\n3a6f9a90-bef8-40ad-a3aa-37296a51d191\n41244fda-7595-4d57-a4c5-14a8d2094ac9\ncc3de8fb-62e3-4be9-9963-c22c58debe78\n4816911e-c739-4897-b9b4-a5a5d7887d40\nff15c923-749a-438a-8013-7b476e75d5d8\nebe5a00f-db18-4831-8062-4c324a90d341\nb2e59445-37bc-4056-b0cc-697cd784cb04\nd87e1f98-de31-4c40-b27b-0c181650b1dd\n05be29dc-68a0-4e4e-a7dd-a40dbe779aa7\ne287cd75-6165-458e-b572-c344383d1b43\ne41aeaf8-61ce-4df4-8dd2-b567f527ff05\n7e701bdf-a8d8-42b4-9c8b-4c8ada42a88f\n0d1c0a07-58c1-4130-a4a5-47db7d9a9b77\n9006ede9-7b33-4386-a79f-c5497a83ff61\nb9be3d1f-0481-424d-a893-121bee19f4cc\ne9121df3-0014-428d-b0b3-da170e16d003\n429ce26b-6290-446a-81ce-9f7f3b135362\nead5c4a7-71d9-4838-82ff-08a9d165a24c\nfd88c146-c29c-475a-a0d4-a5bcdb6d0557\ncc5e18a6-2bde-49ec-abae-9fdbece46c25\nc7b0602e-2a42-43fa-ba52-0cdf1bb46259\nec32e68d-ecab-4d14-be8e-a7a516590fb9\na05aabe4-f6b1-4ab0-8551-28f01fec6435\n62ecbcee-9fb9-4274-9fd5-d8fefc939f2e\ncd8e3837-8243-4b42-b448-107f2f723dea\ncbbb44cd-ebd9-458f-80ec-2c56ea0946da\n330dbbe5-8412-48f3-8bac-29584a6ddc67\n10e23fc3-c296-46e3-8638-c8620d9d6f79\n6148bb34-b830-41d0-a533-883bb651ca27\nb8ea4ed8-d55d-4613-9b82-af4321c34d8d\na924a5c4-6fe4-4db1-a39d-c96c30e931f6\n6a4b0dbe-a96d-4c7d-9118-fb8eecd31055\n42f7622b-f3d2-411e-a148-3b1c17ffcaa6\n647be399-4116-483e-ba47-12f148a08dd6\n579e14dc-8698-4909-aca9-a84c27a9952b\na539d611-d248-4c54-8710-e9a92b6f7788\n7e3b0747-6861-4bd6-b3a2-a44174b1b6fd\n168b4bc4-9ebc-4ed7-b559-aff2c1e238c4\nc8b3d22b-3f0f-45ac-bd4c-fb54db395156\nad685a48-d22f-47ae-b32a-2a069d78cd23\n4da983ce-3a43-4ddf-ab89-1a52ae7686ce\ne061f30c-3abb-4fd6-8ec3-6c843076cb77\n2b5118bb-be54-4dab-9baf-203c9ae7f0c8\ne0f0e2e8-02a8-46a8-97bf-893ef0b93fb0\n5a5ff31a-3b73-421e-ae8b-28d2ab02c996\nb1e93fd2-c2be-46ff-98a1-5bae6fc379fe\n94f9c614-fde5-4fa0-b16f-cdde971896d2\n474034b2-e433-4d51-abed-5554535e779b\nbcf9751b-f1fe-44c9-91d4-fd8165cfcb5e\n2d6af6b6-f83c-49a4-9c64-0b429ed56880\n1f4ba157-a7f9-401c-8391-01ee2fdffd07\n1312228a-6151-4452-9933-96bbe693c92f\n2543f91f-9c97-4eca-ae25-8f053e7400e0\nb09e5965-832d-4997-af9e-641b3637f638\n7de5bab8-0659-4c55-b970-d9257f6d7e4e\na326f131-edd4-41dc-9edd-8f52acd1ce37\nd65a1183-3f68-49fb-9dda-ab9dbec90857\n175123f7-999a-4fd0-8869-00969e2f51cf\ne3bc2b39-9ed4-4b98-afcb-9ecb1aabe7e9\n8bf2f588-d92b-4146-9bc7-a97a0bd48474\n78dbe2ff-0d30-4e95-92a2-30abec6b6b50\na1734d83-ec5b-4bb7-9b0e-0c3c222c473d\n705725ff-22d7-43c1-b197-7073266f411b\na3822d44-789c-44f2-9dfc-806225d06904\n9369e525-8497-4c27-9a16-5ea3484b2af7\n4baf9062-879d-43c1-aa19-83881df764e1\n18072b5d-2248-4be0-a06f-a129d04d0449\n373d3df2-ca06-47c9-bc10-5156b0fe5613\n143643b6-77bd-469f-956d-c7b260f50bfe\ne8427af0-269a-41e8-92b6-b964cd5a9b39\n0e3fd96f-726f-4af0-b2db-0a109e4b4395\nde7388d8-8a53-4acb-aa02-d09b5217acbb\n24b5d7be-4517-4120-8703-66f531449119\ned12e86b-c212-4561-b72e-aeff0b429b6a\n1bf1d160-3d5a-4e09-a90e-16aa3c8a40f1\n74142c47-c8c1-4f01-a6ac-66e85b780d32\nbd744656-84dd-4415-960e-b9f1a5420a91\n3f9acb5d-9378-48e3-bf9a-55c3841621ec\n15eacc58-2978-4a43-9315-64bd8661ffbf\n12e54d83-cedf-4047-a35e-908af34e40a2\nfc9903ec-45b0-464d-9cac-831959312ec7\ndaf9d5c9-8bdd-43b1-b2c2-ef41ec2b3b7c\n8a314987-3c48-4e86-8fe4-6196ecd72792\n32b9b44c-cb7c-439f-b9fa-23aff257a8b0\n5eecff74-91dc-4a40-9866-dc88ebaa9107\n67f927a7-e2a9-4c8b-8593-da2df946b99d\n296d0cff-5f83-4428-9898-0363ea75621d\n92e19271-1a7e-4c70-8642-f581df033320\n992a1b32-e30e-4c70-99d9-ec6ed90d5d96\nf86d0487-4eb9-4438-9149-33ad337a8628\n95539c03-c9d6-4f77-9fa3-b0509d0a2145\n2b240162-56e3-4908-9139-fd93e62f0ed6\nfae73f67-38e9-4e5d-ad85-9060a11da751\n3870b99c-aa7c-4de8-ae7d-9007a1cbf1dd\n1bb4825a-56fb-446a-936b-8f50de0655f5\n07fff1c1-6ef9-4b5d-ac34-f8f08e875bf8\nfb466eea-f138-4749-998a-e541069e7c34\n2975ce4b-d64f-46f5-9df4-cdd1e1ddea5b\n1026bbd8-0b8e-4968-8658-4f3aeba59190\n86c7a1d9-ed1b-4a3f-9ef4-5ea95d88d172\n8b4c2f93-aedf-4de0-8a89-b002d43657b2\n4fdc99a6-1f76-45a0-9adc-68b45edc5cef\n3a3a74cb-628b-40c4-95db-9e8836730499\nc1a7edda-cf18-490d-8ca6-4b999d7f54b0\n88758284-9bba-41f4-8058-02b1bf6446ef\n72f617f8-5790-4e62-90f4-722b6e81bb8c\n7c999c3a-2f67-451b-ac4d-27f95723973c\n96940814-63b1-4c87-9ee6-d17eaef0b5e6\nb2767c97-cf83-43fe-93d0-14ea8a70ac3e\n9c4907ee-0631-4b03-968e-cdb3afde6e48\nd68e5769-2512-416d-84b0-bcb028330fcb\ne599669b-1afa-4db7-8ec9-bff68ca4b7a9\n0d55fd85-2433-44a6-b984-15547a15107a\n56310a2d-5361-405c-aab8-40da55043cd6\n4c93b0d3-beb7-4b91-a6fa-9d2e38c6bb4b\nbe5b21d7-66da-45a9-a49e-2f6e636c240f\nbca686ab-fa27-4418-b74a-b4af22fb9110\nc6aa081a-5628-4126-a6a0-466d122c0d96\n3446ac0f-6a5f-4146-bc97-e627a786af33\n42aa1194-317c-488e-99c7-94e3ecc3ab78\n86e293eb-529f-48bc-9d77-ba30eb0be975\n8812d0c2-4dc1-4fc1-935e-fe5b4684b4f0\nb8b45c5a-e58e-4b39-ae97-8f606efa921f\na31b576c-6d3f-423c-b24a-f9f3e36a010a\nab340c3a-b4f4-45e5-88d3-b2e1b4732c8f\n9b07f4d9-16c7-42f3-b1c0-90302d7ff46b\n2dd9f8a2-4b83-4a8c-aaa8-7f9311f9bb70\nd35c8ef6-5332-4051-acb9-8986dd4fcdc0\nf5a44eca-9f8a-4505-908b-2c7243bfbc09\n70bb2ff8-7b28-4f7b-baf4-c38f1770be33\n7ecf2422-8142-4b73-b748-581cb480d791\n132f22b9-9066-48b2-b736-30cc862f7a44\nada95d1e-0f3d-4bf1-a0e0-83ddd8e31c38\n8df5a293-f9c1-423b-acfb-0ff81d33c450\n45492044-a375-43b9-b3a3-c7c1def5e953\naf902af5-936c-4968-8981-a1715edc993c\n275b55ad-4307-4d9b-90a6-010842530708\neb42f789-62f9-4708-a6da-19abf5852803\nbb93cda4-08f4-471f-9dc0-c5eefbef418d\n663c08ea-480b-48cb-ace4-ad5c08e21716\n00c2e069-1387-48ab-a75c-ebe5716fda46\na99f748e-a008-4c62-8e8a-3ea4547aaba0\n8bdf06d6-8fd0-4c69-95cb-2947efd3854c\n4dabed68-7f5b-4f72-bde9-117677a7ef39\n4990f4f1-46bb-45c5-a6d8-1fe2722aa465\nf552b907-f7c9-4610-8b3d-4bdf3f3840aa\nb92a558d-4af5-4757-9585-a03fb5e7c5c4\n2aec3223-00d3-4b3d-a32d-91ee08bb9aef\nad74111a-86cd-44d1-b9dd-416be98a40c4\n8e9ec84d-0684-4612-87c5-e93806b375cb\n1909b831-5a08-4e89-9dfc-52be2e0c9f06\n9a07bc97-bcad-410a-9cf2-bdf316b3230d\nda71f2d1-e59d-47ec-97f0-cb719cce0777\ndbd8cb71-7607-474b-87f4-5b3d96750aea\n8db9dc07-9b82-4de1-9f08-05759a5b08ef\n20596043-e056-4779-93a6-a35cc848b20c\na0486cec-5f68-4fff-91fc-f9f090ed097d\n78f412d2-0c6b-4b99-a6ae-bd88d8a5046c\n064aed58-8f0c-4f74-8f3a-4b42bf367f96\na593f27f-8319-4536-aabb-33d509030202\nf4c96c6d-1962-4ead-9c02-4cb94908cf32\n1972b344-d826-40a4-bcfd-2ec62e16a1e9\na6b62058-374c-4ce5-bfd7-bc85043d9191\n5c89fd7a-413b-4e2a-bc9b-d967794a0fcc\n3836c68a-9d42-40f8-9758-fc1b938a6e9e\n37d089b6-24e4-4c38-97e6-22f66281b7b2\nf282f46f-4997-4996-9ea9-d25267df9fa9\n21488463-ec83-47ff-b116-36214779888d\n80618196-7540-476a-9b63-f78f5b889ba4\nd7adb1ec-3b17-4026-870b-839bf9100e92\nc57fa5f9-361d-480d-8443-626e582dae5d\n0f933f63-4a9f-4e2d-ad5e-c6cfac995399\n80463e0b-2a4f-4bf5-aeaa-7183d9da0725\n76a7a5f9-d460-4c10-9eee-5278ba750a2f\n9777fd02-f889-4516-a48c-bdb173c97ff2\ne095952b-9913-45b3-bdcc-bb6b6de36317\ncc21c44b-c21f-470b-9d03-e0490582f7ef\n7f0f2315-9580-4b17-88f3-0ff607ceaf22\n9fd2cb5d-b9ea-4da0-aa65-ba5e4e931942\n05b33058-522c-42b0-8cbc-d6dca3d32612\n59e86ea8-5271-475d-9688-2b547d1a8aac\n6faa4cc7-3873-45d7-9912-dea78412c42f\nf5bd9076-07de-460b-b077-888afd7c2059\n908b8245-8db8-4729-878e-71f845e3d599\n714d6c84-133e-4181-bca0-0314244f0f69\nd35067b3-5253-460f-ad81-fefd89627b22\n3a521f56-3b54-4e2b-b4d5-b2ff428195f2\nf54f46c5-dc2e-4efe-a504-94b4e1efd3fa\n7af198dc-8958-4014-a7db-26d0f59044a5\n2eccb832-d71c-45d8-a4f8-dac44f87c6dc\nd2369128-6aef-4b2a-9324-705a8ba3d346\nacb63676-5a48-4658-9daa-e981d5e11f19\n27e5953e-60f6-48df-9eca-3ecaaa66c6f0\n18287a63-fbc7-4da9-b14d-623957c5cbca\n0256b93e-265b-4bb9-901e-4cd2c218dbe3\nb31b5cb4-b11f-4dfe-be21-673dcd35903d\n7fd0535c-857a-42d2-a3d8-5c7974919b20\n53ccb9e8-6301-4aec-a8ef-1b726ebd3490\n59fa08a8-f324-498e-8f63-7773ffd96469\n71f51f8a-ec90-4deb-a865-ed8cc80ebe0d\n2b9556a3-ba2c-443d-adc7-7be29c7fbda4\n37113b2a-cc8b-4f8c-8425-5ed082c2ac22\n5a0947e7-b8bb-4036-82f7-60d42a2cf1ca\n1c3ac068-2cd1-402a-84c2-c9d5bfbae202\nf1c8c6f4-df8c-413b-9d42-97266aaa7d32\n2b810c5c-7b62-4b72-b317-2d39d5a501d6\nb82c922c-25f1-4e6e-a470-e893eb56eb28\nc66628b5-2edc-4a31-9c27-11318d53ec52\n46933827-e895-4d24-b826-2e034bb48e1f\n5d16b509-fee1-4b50-b9dd-d1ba04fca202\nc3cb515c-4058-493f-8a09-f4d7a36cd12d\nf1867e64-9a27-4203-a33c-9e2c5d48abdd\n51a4633d-e51f-49dc-a895-523d18d65402\n8d412711-ddee-4506-b960-577832648fa1\n93f75a28-da22-4dfc-b14d-e00c90182bee\nfedb990e-5cc2-47c7-b7ca-3438cefd1fd8\nbb126857-dfa4-4ffa-a804-5282bdc7c89a\n0b873c70-4552-41cf-8274-83f8ae2e150b\nfa395d73-c007-4c1e-bee0-9119ad9ea751\n5bb6ec67-1e03-4983-a61f-40af404b1b5b\na7c0e3cf-0c74-47fe-89fb-8b4c9f9fd934\n48641cf6-4361-4629-9ddd-7ff4c28fabae\n485fe43a-9e2b-4977-925f-616b3845e302\n47e26b70-e98f-48c8-96d0-d00bccfbb609\n24d74814-757f-46f6-a8cf-11d590b788d0\nf8f0205d-8035-491c-b54d-e1ee72c32035\n2bedce8d-3239-43ee-937a-f3c9d80a5c05\nb858c25c-bc8e-4abf-975f-f37403f7f12d\n79f0f332-0f6b-4675-8d6a-e535c50a0177\nfc76d4ce-5e09-45bb-9a33-c12220de4e28\n5b727f27-7b20-460b-a099-923801fc74b1\na41576da-94fa-47ee-a0eb-dc1ef565a0ad\ncc1ab80f-bfde-46c3-bacd-e7cc4af28c35\nd99d6a72-2701-4942-ade6-1bc138b2512b\n21828fec-f784-42b9-bc7b-d246e1b1130b\n8feef663-b2d2-4d02-8b0c-cc01cf1f9cab\n11468635-ff02-4eec-9bb8-1a3423db71de\n72712948-6c0e-4cb5-b273-dacb8a11698e\nfb5d0506-5d88-48bb-844d-8efd979b6aaf\n3c71f528-5c3d-4ac0-9cc4-021d22753597\n2914a009-1e4a-485f-8c5b-c47c551be9cd\ndd3ef282-1e7e-431d-8214-9f9f73a5b0ff\nac5642cb-065b-467b-babe-781754d65bd1\n3801b3ac-611e-4a23-bde2-4f6923380181\nee8622dd-8cd4-4a17-8266-7c7f2fb23ec5\n7563c388-b2e3-4f87-aadc-6058d286fc23\n55b51d31-4a29-4d0b-ae8e-bdf13e9fee0a\ncfe98e1e-53a0-44cd-9a2e-518ed94493f4\n0ed53479-4681-4212-8eaf-9223135f72bf\nd652f90e-1cba-46ca-aa33-4c629492fcd4\n2ed4b38e-7e56-4764-a1b3-3810113b61ac\n2d296baa-e985-41b0-b99f-1a7fdd17fed2\n916e6413-0bb3-4809-917c-3f8a7079cd09\n88602836-0f18-4c91-8d69-2bd619f87f82\ncb9c4b41-a02f-4265-bcc2-2b1cda31f0c5\nc863beb6-a1a1-43af-8643-04171047cb2d\n364f7dce-5cac-482c-8a4e-93aa838263a3\n04d40989-c7f7-43c6-9950-6caf12c439af\ncd28fc58-a348-47fc-8446-93eccb5ed2d5\n18ebd3c5-429f-4dde-a3d8-89faa1d2ad16\n864af3bb-7faf-456a-937f-1658e055677e\nb623a88b-ba54-4ecd-906d-109c5f17b73b\nf5610746-0fc6-4d32-b7e5-2b0a7ee34136\nbcda159d-af77-4d81-ad18-0f1b325b3cb4\nd0490b82-a855-44c9-83d4-d7324483a890\na5a969d1-9237-4ad5-88ce-ba5c578562bf\nc1342a67-f380-4aaf-8bf6-b68389b558d1\n8daff7c7-577e-4cd8-bedc-3d408f2082aa\n87c283b9-bbab-46c3-ae55-b3199d85511b\n0f5d64ac-871c-4e78-b329-8225d6566701\n099e6bec-855d-4f17-b1eb-ed6f2eb1f117\n5321b26d-fe5a-442a-9ff7-16cf2664cb7a\n2bc74eac-10f8-4fcc-ae63-0c833b4da5ff\ne474d9de-ede8-4bfe-bf1e-ca4d1765728f\nad305775-ede0-411f-8002-17252e36f3f4\n1c560a35-8a33-4021-a7f9-9a9890f3d1cd\nd05485f5-83a5-480a-8254-8cbe7fcff40d\naa96b683-784b-4113-810e-b89fbefbbaf9\n782609bd-d682-4ffd-8db8-3487ff320002\n30933d5b-4bc2-4e10-af25-831e7f22fdd7\nc547cf08-0f0a-46eb-8d3a-91fe22344ead\n0db0455f-2b48-4104-b025-61c0f0aeba5a\nb78d7dff-dad3-440c-b6dc-a5045d2100dc\n7235943f-d59d-426e-8c4f-73803a021dd3\n1dc93e5d-55fd-4f8d-a2b7-0643b1c34abf\nb69e7b5f-1202-40e9-b864-5efbd33432c1\n78e80074-c14a-4469-a26c-ecb86dd8dee9\n92b9fa41-7e1b-4d05-a71d-cb803038ec86\n85256016-8c6a-4013-ab60-7e1f826db279\nd142af44-88ed-4664-9aac-8115d5f35019\nc2360ef3-b2bd-4c87-9783-44c80597f8ef\n41b06241-9880-44f8-b95a-5b8994e72b4a\ndb376cf3-67bd-4d60-aa8e-7797fb4e9eca\n91ae8a3c-30b5-4a5b-ad39-5c3daed58ea5\nd39da949-0130-4b64-b0c6-6f634f3e61cc\n2535a3c5-52f3-491e-a7e3-363beba4fa02\ncc336d00-9dbd-45c5-ab5a-71f762da3436\n04910e61-0db8-49cc-a0f2-a0d9156796a3\n2d30f6eb-4766-45f0-a02b-241dfa08095b\n39f2c2a7-b4b0-4ece-8566-05a8881e1778\ncaaed9f6-97fc-441d-a636-f73eea2d43f3\nd8af12a6-89dd-4037-b626-d067aac1eb0a\n8150e86d-2742-4695-ac0d-16ec1e783318\n333d8b32-7233-497a-9274-cf6f319ac8d3\n9291e878-0749-402e-8bcb-2cb0eefe2bd4\nc66f5676-c124-4f6b-87e3-1a02f0b53766\nb1ae1fba-0f1c-4c32-a551-ec2127dd6df9\ncfdcfcd7-8aa4-4c46-8e38-eeee9bd096e2\ndce18407-f94d-4e83-84fe-53c82133b80f\n09c82edb-0e9d-4e01-9421-75f6c324650d\n89803713-922e-46e2-af05-6e52d37a248a\n2e82de83-0400-412f-ab6c-3a7c3c256620\na8bbfb94-d2fd-444e-bc03-2c7261cb4c8c\n5cbc90c1-5b68-40a4-acfa-7e071e36066a\nf313dc0c-b7c6-4fc7-8a5e-13a2b856bdb3\naa2c57fd-2a1a-4bbf-8b2b-80ef91b766d4\nd3bce5d6-1781-401a-a7c0-f7fbb08bdb0c\ncf78ce04-526d-4888-b1ed-cbb18565c920\nd00e33d2-1a6a-485a-a9f8-a195a7c64c9e\nda9b25b8-6802-4ba2-b3aa-fcb5d73052f3\ne44d54a5-2314-4657-bc06-b98fa94a7608\n56523e1d-e57c-4f1f-9c83-e1b4af16cdf8\n8e9bd869-c653-4457-a265-23183297e8ae\nb7937903-d388-406e-9247-5e6c3920e955\ne90a1f97-6733-4435-a0ed-b37f8e9de137\n8aca94c9-5169-4874-b1c0-3ea60c2d637e\n260cd347-9f10-4728-b69b-d5e3f77860da\n88afd407-0564-4223-9cc6-b362b8761180\n86672b74-8fe9-4cfe-b1e5-8c850df12f7e\nc4c6e374-39b6-4331-9f70-a13327a735a0\n94ce3ff4-2ca2-46ed-ba71-fdd31355189a\n0bfbc875-cd5a-4dae-b827-df65bc2729e0\n380878c7-9c5b-4f16-ae43-c5bdc00d61e1\nbc1eea86-78a9-49b4-9636-fb2dfe9ba4b3\n902d8831-b809-4b51-8e53-08b6b29ce021\n0cb42e0b-9349-48bd-b11a-b9aa8e1ebcd3\n62051701-9ca8-4d98-b9a4-4b3cc3acbe64\n861794db-5bb6-4c9a-87e8-c1228b4194bd\n10abae92-8fc9-42c2-ae05-230ec19608c7\ncf8c4c36-7e42-4a2f-a3da-c4438d813304\ndee91229-662c-42ea-b115-45553b2818a5\nb47d2f0b-590e-4cd6-bd79-e57e7a28caf8\nb3f3d1d8-11d3-4fe8-b09d-ad4502406d06\nf2e10b8c-13eb-43c1-a676-e8141aec6b71\nb3fdbec7-720b-4013-9402-14c577c9f54d\n0f38c90c-bf82-44f6-ad38-879edc2bbe76\n27609c95-99ea-4aa2-9d8d-64252a4b5535\na3c79e23-714d-4012-b8ec-2e9cfd552fab\nd8ace070-a0b8-47f1-bf3f-020cf85e10f5\n81083f6b-7cb4-46a0-b006-1ddbe002059d\n37954532-2706-4c7a-90cc-7ae098cf944e\n502b8e15-be8c-4842-b994-4d9ee3d25a73\n510b92ae-b0c9-4b5e-a97e-2c1cfca6511f\n8c41e902-5860-4be5-982e-ff9828c5c72e\n0c841b76-b063-4827-bd54-7b663dbcc54c\n57372da9-91c3-460c-97fd-ca9e993c3675\ncbd821c4-d9c3-4feb-a42d-29e0703bfb17\n37099fda-5079-43cc-984c-48ffb30aab98\n95e95732-fa6e-42e1-8013-575034813fde\nb3369816-e650-4beb-8ca0-b54e6abdbc43\n58edd1ba-46e5-45dc-bd6b-0e609cfe1f8a\ne08058b6-9239-433a-8c4f-62dd6cfe124b\n6d27884c-b896-423e-b74b-2c57bb9b89c1\ndeb8d257-7605-4833-b9e8-91bec681ebcf\nd8c27759-0b85-40d1-8b79-c7db094889e1\nd79686b3-d218-4f49-ab8c-6f1a6835f985\n875a6c01-248b-4fd2-ab30-40eb3f202434\nca8627b7-6fb8-473a-a76e-39a60ab2237c\necc2029b-b7a4-46b3-9177-d5c131dab035\n500a346e-4f03-44e0-bfaf-66d1fa6d6cca\n6662469b-ad61-495e-9b0f-769eef7fb69c\n1c10f09f-1e34-4cfa-aedd-482ad9563ebc\nb115e113-6400-4e71-974e-8bb42cc12b37\n8a613a46-2a38-46c4-84d0-c8e003f70348\n04a3c2b6-5821-4cb2-9ed5-021cacab88db\n7ca02d38-686c-4f17-b63a-4fd9afa7893d\ne3e2f208-05a0-4d94-a863-1c022505b65f\n7f183eca-b01a-439c-981c-23fa22f4d12a\ncb5598ad-1574-4e7a-972f-cd421bd20771\n24302467-e895-4e32-8db8-0600709e0881\na42659ab-5e0c-4e06-8a71-c733355e461b\n1128b5e0-bdf3-490f-bf26-b2d24c20d842\ne91c3a73-1449-49c9-b36c-25dfcd939346\n9c96fd87-cede-47c3-9426-61dce0dbd311\n629d26ac-0986-4648-9d84-c6c91765e12d\n0ea9e042-e40a-40c2-98e9-1f46a64fa624\ned807f94-2dbb-4ebc-8068-f0f6e9674e61\nc7301608-124c-4c6a-bc2a-689f165da249\ndda2ef3f-92e5-404d-9ee7-3385e0841179\na794a02a-b051-4559-9b19-3c49c45c5498\n3b02a432-c02f-4527-8735-ab424735d267\naa8a12b3-1932-49cc-ac35-23695025badd\n11326e58-fce7-42f0-98be-5fbca66f2c6c\nfee5836e-b558-4daa-a1f2-4b65a88f899f\n83020136-40bd-4fc4-ab88-e862ebaff0f4\n74954457-d969-43b6-bba4-98f312d12320\nf17d75fa-ad72-431a-9e97-86ac417a393d\nab420697-0a76-4bfd-8aff-ba7f8949c82f\n8cd5159e-46e4-45fa-b212-db609eec9fef\n9807ca09-2e08-4785-af81-3e1664bb7727\n32c75ee5-eff6-4455-ae5a-9dcb995ccea9\nd02eb95e-f2d5-41a9-be5e-e6774b374e74\nea1ae4de-6e2a-4ea6-a897-ac8ab9ff0aab\n91486d35-96f8-4f99-bf47-2094568e19e4\n9a7eda4e-01c6-4c60-bb20-20adcbbc0942\nac2f9fac-0d9e-4462-b71e-d338ff46aa10\n398d6683-6d4e-4b3f-8cd9-a9e46526990e\nc89dc72e-cdb6-47e2-af4e-cc28e45925a5\n3e0c2a4a-7cac-406f-b5be-1bd664e8d1f8\naeb58ad9-f589-4b5a-9e09-75841d309dc5\n6ee189ec-a2e4-4b2f-90ae-029eae0b851f\nd67df64d-e5de-43ad-b1b8-21c0d8e130ed\nf3efc709-cd88-4fe8-a1a0-f17d913b3361\n09b69251-3bcc-4a1b-acb3-9f7c79ab2071\nd2b4c784-90eb-41c1-ad16-94d4f9dbde45\n4a672b28-8765-469e-af43-36f1cf06190d\n5484d5b2-92aa-43a5-96e4-2034534f9a13\n275fb53f-2168-40b1-83d2-d7c620aaa227\nfe8e23bc-14da-4d6f-8782-b2702fd522b9\nd22dfa6e-23cd-46ea-9755-55a0f9feed73\n821bea7f-8aab-4ff7-b25f-857be4033d2c\nd6ee4be7-3b4b-4151-8788-dc583af5fc70\n810ae272-18a1-4129-b1ad-e0c51807f9b1\nedf2ce24-a5a9-4096-8e1b-98a831fac4d7\na2cfb720-b0a8-463c-801d-740dac042c4e\n2ce106d8-eb9c-4308-9d1e-b48072dbec25\n50127ba0-7ffa-487a-8c94-4bd8776aef1a\ndf5d7a1e-b841-4b7a-b332-da835a041dd4\n3675d2bd-50fb-4411-befa-97ffd6b105dc\nc7e01169-ed7b-4ab0-8548-d78b30fcbcf9\n4c6c8a99-acd8-4bd9-9952-1a84036e4610\n3e1d1c0c-a7e8-400d-af2f-b0f0868b05bb\n29404744-daea-4230-9956-0f1f9043c26f\n11e4721b-53bb-4423-ba20-25a80a570a94\ncee6985b-c2d2-480c-9cf0-5524c749662d\n0b346c96-1973-4017-a1d3-84eed5c4fc19\n159581ed-8f6e-4163-9e31-3a38d3315343\nda3435cd-1477-48f9-896b-7f27922e1531\n4986d283-7ef0-49d1-a7be-f401e0084c09\n685edfd8-85cd-4aad-9365-71ca46f565d9\n28c3c412-8dbf-41f6-8009-42f4deaca069\na8d6e759-4902-4ce0-9d0d-3ed15cf6705a\n65b0d350-b618-4f03-b4ff-ad26718813ff\n957436fd-7cee-42ef-a21b-74009bdd8423\n37904e33-0bc2-4db0-98a7-23b1332ff0f2\n9bafcb90-c62b-408d-894f-4c45e4d711a3\n332534aa-8bcf-47af-8b80-74122d748976\n1d8c58f9-6060-4309-9be7-a7d21df561cd\n399f0c5b-46f7-4e4a-873c-89cdc776b45c\n14473905-9aca-43b6-bbf0-cf797eafa6ae\ndfc59745-a9ff-4da6-9f20-f08c6d72297f\n6f0ad357-b5db-4475-8027-8dc3304c34aa\n38ff58d0-3e8f-41f7-8ae6-e76517edeeb6\n97a85d38-82dd-4099-b383-acd645bf8423\na7835faa-1b47-400a-bb3d-76e8f28940aa\n076a9272-4197-45c6-8e73-ee7c65bd1356\n6e0cbcd5-91d3-4a9b-adb3-6f1883839945\ndf2d1502-0e46-4184-b403-50ccbbee7873\n81e09625-645f-4f44-975e-f760be370ac0\na0e35db7-8656-4066-96bd-eb3624ea7a0e\n4ab6fae0-f906-469e-af77-64147691fece\n9f45694f-e7c4-4077-9edf-3f87b059850c\n810c64e2-a10c-4afa-b039-cfd2e507eb10\n3e85e6e3-0d97-448d-adbf-73d16e189787\n5b7f4933-de7a-4d43-b54d-7f7fbbe80d18\n2e08262a-280a-4949-a130-c05f68c4a5aa\ne7f5a193-2f32-4ac7-b097-b7e7b3aa1144\nb621a9cc-b884-4634-9acd-9387596e0916\nc31c62fd-c6ed-4eff-ba13-2c27d720eb9f\nc1d773c6-d077-45e3-9c74-e0a051eed5c7\nb1632863-fad8-474d-9c1c-dd8fae6f2d56\nead504b4-74f3-425f-b162-04118580951b\nd36d8f50-9971-4954-b15c-d51c1975fc36\n8bee2389-f4b5-4c58-8bf7-8f5522257c1c\n789fc41e-2614-4d40-b721-56a96a2a7779\n7f4ae13f-727f-48d3-91b0-5d15095d5a13\nc805d234-3ee1-44c6-b471-54e4be48a4ac\na07579ec-0cf5-4161-9274-020fc53c950a\n85f116d4-fcd8-4c2c-bd1d-27a740a4d43d\n5939f75d-ea67-467c-9038-eb94898c9067\n720fd4b4-39e0-4234-8cfd-b68a08f13cde\ne8aaec47-86f4-4bb7-9c12-69babe9e565b\n76c7c12a-d0ff-4303-a7fc-4360b3fd8459\n903703d9-5012-40ab-b1cb-c4150cf575a4\naa63aa2e-0c6f-40ae-ae7f-7720a1d4c0e2\n20eb17b8-c282-4df2-90f6-6f124b7539e9\n4e0aa9f1-6919-41e1-85ac-ead916bc0e4d\n813babfb-ae5b-479f-99df-7f54617f0fbb\n194d755a-7f26-4749-8ebf-469f99bb341a\ne9908e8f-667d-457d-a1e3-61b13dec9daf\nc191b2d1-076c-4ebd-88ca-1d140ed97d59\nef525625-9e51-4f78-b989-14773c88d382\n9f2079d0-e59b-40e5-873c-be2e1ac5e224\n5548e6e0-631c-48ab-b394-e461160cfacc\n51aa6509-c2e0-4844-bca9-1a848144b8b9\n7ffa76d7-99b6-40fc-86de-55fed523789b\n5c004fb5-9bf1-4d0a-9d40-2a341b235731\n973cea41-21b9-4589-a25a-e49fd3f1aab0\n1813ca99-e7e4-4155-9cc3-52bf573151d3\n9e0cb638-8792-4e24-a30c-3b0a1a92a00c\n17d6d637-3de9-435b-b5ea-8156e9c791c4\n51e032c4-ff5c-4123-a005-f4b3cbb072d4\n0176767f-8acc-4748-a0db-46da9dfa0523\n6779cc5b-a953-49ac-a24c-30661ab3aea0\n8a1c6cd4-57d3-4473-b635-23ffc8ada4ee\n2903a443-cd81-485a-ac4d-d888cabd57dd\n0fd9dfdd-3491-4107-95a8-f82c39a5f5bf\n39a3e42b-0209-4f0c-bcfe-5f306e2507c9\n63afb12a-b764-4d0b-94fa-0a7f61831ee5\n0bfc9ca9-dd2b-4c8e-9d9c-9a3407859291\ndbc0aeaf-2b8b-42a3-a498-9159645bed5c\n82c3d50d-b73c-46b8-b430-1de8663883d4\n67fcc852-4590-4c9b-b123-ebbef8a84d44\n19d7658c-319d-4ab2-acf8-cafb2f1d1d9a\n97a662fe-b161-4d12-8395-1dcc504abbef\ne99ca186-cfef-4407-bfbd-e47da26ce4f0\nb8a5db05-edc1-46c3-a99e-cc2ec32a95ed\n2e5bc18c-5384-4d21-b2b2-e600e945aaec\nba20a026-b8b1-47d3-a4b7-9dd4f734a407\n6762d095-9684-4f3b-abc3-ee8c6c2e90d3\n256eb91e-769e-449e-b365-0cfc915b6cb9\n31c75357-d9d3-4f14-a9bd-427eda57c476\n5aa8d301-43b1-412b-ac44-2f51a3cc671a\n5fc162fc-7499-4f4b-930d-d3a4d020b08a\nb4807e5b-7ef7-4142-ad01-5e69ca947838\n6997a50c-902c-4479-9c4a-9d8cc2c79156\n533fbc40-a944-4dc5-8ce8-e754f3c7e15a\n13130803-3d77-45e0-af3e-532662bbb6b1\nd578ffa0-7b99-4ea3-ad81-cab1cf604c9e\n1a7a5b1b-274b-4621-9fbf-9a68e9a857f8\n5893804c-0461-4d31-bfe1-f3455e3d4496\ndbf56a71-905a-43be-9a4e-68a16b027c29\n926cadd9-4ef1-4571-b088-d3ce77d634cb\n81265a67-250a-4e35-9941-edffdbc402e1\n3a19e2d6-f341-4ff9-a8a1-1b4d47372ae3\nb1e48d31-172f-4a56-bffa-de5fda1df7ef\n1226d266-0b22-45d4-994d-b154e4b3df7c\neadee1bf-9dda-402c-80dd-6f15697f3cfa\n60085033-00ec-4e0f-9607-23e58aa85f01\n8dfa2f21-f19e-42ca-8ca7-40a2e5f16e67\n3663c6b3-909e-4408-a015-9bb618b1d3b8\n1e3cfb1e-f347-46e0-af0a-1656fd443cbb\n096c4af7-b960-4442-a98a-fa99f1146d70\ne02e5b54-32e4-4a24-bb9c-a3ff96a9bfdf\nbbba45a2-4d47-4af9-bed1-c3c600407d8f\n1c87d03f-b9ff-4fa9-835c-159123585378\na93f089c-7b27-41c8-88ae-0fc5d9ea6902\n50d033be-c974-4352-a414-7ac22ec93010\n9bbc7f57-2bd3-43f1-a003-17461b1b9015\n83236104-3588-464d-88d0-ef89f6056c85\ne5ee39a1-2788-4a4b-8dea-8526a56c3b1f\n1bd4d59c-50d1-4682-bbff-5681e913dbfa\n0c276f55-de0c-499c-b497-9e8afbe761bf\n1a4cd797-2b44-417a-ba7b-043bbb6860ae\nd3b7740f-9dbd-4b73-8720-d0d48b7b17f2\nbc2c1f5e-1d23-46a7-8ff1-2b7720423a20\n2564ef5a-e48d-4f48-a148-7430ccae4214\n482ccb6a-ad7e-4d5c-bc62-97a3efec6746\ndf945dc2-2d2b-4644-82b1-7bc577107675\nfa255561-adc4-41a2-ac1e-feced0cfe50c\n1cc22055-5cac-41d4-b0df-fea20b131883\n20d66f14-6b46-49c2-a792-e7c8343147d3\n34659d55-0c32-4210-b522-d336fd77f535\na8671764-4fdc-4fd2-9249-7dcb2f9277d2\n13b8d172-5310-44e1-90ef-79306652743b\n7c1594fb-0c2b-451c-8256-6843282eadb7\n3b73d281-b4d1-4880-8f31-274e71c32149\nf089e024-1280-49f2-939a-4a84672c2ec6\na03ccc4e-d964-40e8-9f9c-16955ae77000\nbf955597-ea49-4617-9bc4-ece8ce6c3262\n1c14fb19-bfac-4b9e-95d8-877bca3bf5e2\nf65f8641-247a-4c13-bdd5-a4cc8fddcca3\n86455329-802b-45ea-b372-a88cc054445b\n004e898b-cf74-4eb7-aea3-a6a1e8ece271\nbf2ba996-e3a2-440a-bc7e-3ff855f15cc2\n73fcbaf8-a938-456f-9dda-2ab5805f5910\n791ad36a-89ca-4057-abef-9ffa8075782e\n6c8565c6-6d91-4802-b455-81a04a3c14c2\n19bc19aa-d4a2-46b7-9e88-a062bf8999d9\n85bb7270-3f14-484d-b257-8220b1214586\nd099aa7e-0182-4f03-82a0-64b5fb94084f\n95b7cae9-97f8-439e-89f5-211ee492cd6e\n6806cd61-5d33-4f79-96ef-d31065fe041e\n62a8cfbd-b6d4-4de9-b1f9-5fb89fc22795\n517cb4bf-d3b3-43de-b722-f3c810a6c61e\n6ec4a4d3-5cd2-4a5e-bf4c-2176428cc18d\n35f7817d-0109-4bbf-99ce-738cab3a656a\nfc6e0212-8173-46b2-9b7c-edd77555eb68\n6bb761c6-1b98-4ab0-b299-4912590bbcaa\n2246ef26-18a1-41bf-bd45-2f0f036e0979\na7876eb9-d733-4b5f-8e6e-4dec9dfabd63\n9486f918-4646-44c5-90b9-b3e6f62abf09\n4ccee926-ed16-40f0-b8cc-ea4697961ac0\n8bc9af19-839c-44ab-989e-64a4b8face0e\n1d462c31-127c-4eda-8e6c-58159d946d69\n60963539-e081-4faa-b8ed-e7060db381a1\n83438801-b682-4a47-8ac9-ec751edd1daa\n8d0c27dd-3e67-4903-b2f7-97518f193b62\n9c52131a-3c6e-463b-abd7-c133e77d6c54\n326dc68f-e6b0-457a-8d8d-7f9f3a95d906\n33e1c6e6-5522-4745-a2a9-1c320366fb20\n1d1f1514-f83b-415f-aba6-9eef786992c1\n08d79abb-485f-45e5-a5ea-0961bbbd9f9e\ne2a83fed-4550-43f2-bf39-5b1ad7767ed8\n0a422f38-b20b-4808-8556-dd1e583e39aa\n2b2b4065-838c-428d-a071-8fb4e73b9de0\n2d20fba7-a302-4030-a4e0-a694d7b2e647\n28a99d75-e52d-4cdc-b909-9cb6c779c909\n6a1e299d-2ef3-4095-ad87-8be4fb1f2ffa\n3a62d245-101b-423c-85d2-58778506ad3a\n854a8464-4eec-46c1-951f-ade4e1d3bfaf\n2f380e4c-b431-4e65-bc0f-31700955ed18\n38985b49-ebc8-46ff-8a56-01b43b63bf07\nc66b9768-dfd4-4d2b-9344-4a01fbc46d3e\n4fae17ae-31dc-4173-b370-911ba828742c\n529e7c15-e54e-4639-bc66-9c3915b0b4ab\nc85cec90-f5b8-446b-9e77-30215d6c3c4e\n47d88bcd-c9ce-42ec-a603-d7b623e64333\nd4af74a6-0b1b-40c3-8a0a-31159e2fc8eb\n181023d9-c675-4b60-89f6-be50d4531747\nd2ea233b-0970-408f-9a21-82ba005cddda\n413d2720-e0f9-46f3-931f-54a4a6453d37\n05c91d26-6c7f-44cb-9efa-a87ff25da348\n9aaaff9a-8bc7-4118-920a-5909869dbdd2\n8d4f6553-a722-4f26-94e0-c33a33513191\na3f499fc-b279-4d89-84c2-3e0948f60b3d\n815321dc-ed1a-46d3-a1eb-06abbcf7fce0\n60424e69-a231-4729-ae63-510b5b6a8298\nb142a98a-e1b0-4277-a531-12aacdc4cde1\nfe6e518a-3a2a-4caf-bf39-38d51181a2e1\n02ff4c05-d320-4d20-af46-3bc8e5cb8d68\ndd8d84e9-6020-40ce-bd2f-7a6632abc08a\ncf75a905-b1ef-4bf3-9c73-880123b4a5c9\n58eac907-552d-4eac-b537-f0af9295f460\n58b592f2-8e4c-499d-a2fd-bef7fc50a1a2\nb6affb46-8ba9-4ef9-b1a8-417142c3f5af\nc05a90e8-f4a3-49d2-9b29-30b90fd98c0e\n70fe816a-c6dd-459f-8e05-4551619312f1\n51550d4c-8c4d-4859-a185-878db984325a\ne738e9ca-dc5a-4da3-a293-b56fb96945fe\n416c0a63-21f8-42a5-8082-8847d7ddceb3\nc900b12b-17d5-471a-9ddb-a197734eac14\n446778af-5abe-4e79-941d-5a960ca94f5f\n66a1d459-ec0a-47ee-99d8-95491492758a\n0ed57e30-ae54-417b-8580-f7eca7dbd1bc\n166ee514-02f0-48cc-b71d-c1c53cd2e5ff\nc9df3b04-74db-4332-9b40-e20f5e4f42ce\n6739aed0-ce2e-40a0-b5a4-e6043acede33\n1af76868-64c8-4161-907c-9165d82d7dfb\nee9b1e25-d96c-42cd-9b3e-a8dda309f747\n00263ce9-4cb4-431a-ac00-b28c37c39267\n55dcd964-3dfb-4c46-85ed-b2b6b7d844f4\n615ecee3-ab31-430b-bd12-22d9c5601e8c\n2afecedd-1ea4-4c8c-8c46-d3e52dcc4a21\nf72edf7c-fec0-48dc-9817-3e10d71bdfdd\ne9e6bd74-ffda-4c04-a21c-80fd6321cb2e\nde6904cf-0724-4835-b9a8-2716ee3f2b3a\n01661b2b-83b3-4b46-a364-da98fc4935cc\nabfcc3d5-d2f7-4051-a702-e691e4ba5d3a\n4e4c45ce-1e7a-44f8-8c75-f49524f56a24\nd7a4ea2f-7351-46f1-b53e-eb1ab7573d59\n428ed89a-ad6d-4f71-829d-86a4e480b2f8\n8d489147-be33-4cc0-b0b3-07225e712892\n4dc008c8-13ff-43d7-b599-2c8e1d53aeb3\n683a2be1-0da3-47c2-8ea9-a0c5cb358775\naa782c4d-9882-4b53-b37f-65a77419b2ce\nb90c20d9-4360-4028-9d32-2e39fa48d3b2\n41476ac9-67fa-4968-8fc9-e8475e9d02d8\n873a7b04-bf6d-4abb-827e-c6f8e5403aca\n247245c7-93e1-432f-ba1a-b8f5879394e7\nc704c67b-9b1f-4d1d-9e2d-6e24838e0bdd\n3e2bcd07-7d8d-4d64-ab45-8fedb28ca9f1\nc9fd156a-699f-4bc1-9293-b2fbe55495cb\n88477565-c97b-41d4-b9e6-2d3f05954041\nc02748a9-18d8-4aa6-8b23-138fb84e57a6\nabcbb12f-5bae-4ec6-8565-e8ec7236909a\n1b3decfc-961b-44fd-8172-99e232714527\ne61ff038-2d0e-43f4-b8e1-34e4792ad106\n5bbf1c8a-d030-4abf-acfb-fec78d7dec18\n26868447-c667-4152-8401-51e10bd3a5a7\n6258e3eb-68c3-4028-a30e-bc3c9b0a3cdd\nff85c1e6-d58f-4969-9f81-8ca21b2f7e7f\n864d58f4-4ea6-4755-8cac-99415949924e\nefa52005-e078-414e-bb12-8acf0f25021b\nb45737ff-60ec-43f5-83a3-d7725ff1f5a2\neeefd9bf-58a0-4b75-b4bb-b00479f1de2b\nd4265307-3e82-4a4c-8ba8-924214ee5e4e\ne89e1fb9-d022-473d-8c6f-47587aa71370\n40667717-9b96-48d1-a3b2-9840f6446fea\n2b145ce1-80a5-4156-85f3-613aaa2b6416\n3e84e3cf-8b70-4c32-8b04-bf23e579a072\na03271f4-b314-42ce-a3e4-37ff8b63247b\n04cd8f04-f7ce-43a0-ba96-0a64de60239a\n290dccd1-c297-4c8d-b177-c0991d10d7c2\n0c797281-1fd7-4ae2-aabf-6c2745fd4bf6\n5361ea66-81e1-403b-b21c-42cf34267662\n2f15a80a-8d0c-43ff-8b8c-c6fa4f8157eb\ne30b9add-93b7-47e4-960d-88a546e937c9\n4a3404a4-39b3-4bd6-aeac-f6f515bf539c\nd66046b5-71c4-404f-bd07-4ee7ea7aed66\n9e4822e0-e6b5-4a67-8b2a-af4efd50d51c\nc558fe1a-5eff-457b-9903-3b111235cbe0\n5466d9ce-1b2d-4eec-ae33-5ee993fa5658\n17cb61a3-079d-48a9-bd32-2a1c3b53675c\n0263b7fc-788e-4203-bd3b-a1be1bdc1427\n44c74d92-e497-495b-b511-8a76a0a15d40\n6074a0cd-5bee-44ce-bbca-fba93a05755c\n81d47ea0-c924-4ce3-bd3a-07a9c8e89d4c\ndd552054-ed16-45ea-bff7-45ab7a42108e\n091e06f4-eb62-43ec-99fc-0b122db03b3e\n87b2c008-041e-4731-b310-42ea61859f53\nc2087f6d-de96-434f-b4e3-f9a66bd495c6\na43b091b-261f-4b42-a712-08863c066d4d\n8e98ac27-328a-4412-b36c-a62ae18850dc\nf632f8c1-bb58-4245-a737-70cb97170f0a\n1423f2f9-c863-464f-a308-cdfe45efbcb1\n49936054-3f50-4107-856a-1b68b4e2e564\nd0874bfa-6ee3-4ae0-98fc-e3f2411db769\nfac2420d-8eca-48f6-8126-cbf63d012a68\n4c49cda2-49f8-4c5c-9fd0-0873f7ea17ba\n191ce9db-3f4e-4f92-889d-5d87df7f3e5b\n9a93f71a-e10e-4187-a388-db567bb9f1ce\n07355e2e-0a75-4459-a8ab-ccc2401a3203\n3a965970-9cfd-413f-9fdf-c9ebdcf4306f\n578c4b03-d77c-410d-804b-c378ae0aef79\nc96a35f0-8f32-4275-8b68-3142907f6dcb\ndcb5d31e-0f02-4906-ba75-19290a211dfc\nd45f3b1d-c7bc-44a5-b322-d0a9ce617645\ncb42ee3f-07bf-4a9c-b592-eb565991ae4c\n09ac00d9-6b9e-4813-ab19-49670b95db34\n5eec8760-0382-41e2-9736-9d6148bb811d\n7b1b3680-1d5b-4439-b71c-7aa6c09e4da5\n83cddc10-975f-48fd-97e8-e74281e56603\n09c8c297-1fc9-4d67-b477-f1e90bfb1b07\n8a74a7d6-a64b-4bf6-92f3-1d898fb7164f\n1c6e50df-f954-478b-a21e-c2c04013697c\nb5c7ce5b-8813-4d37-a416-848f09e769b5\nd1486b39-7da2-4e3f-b176-c74392477f90\n90ee644a-6cde-4d87-b845-f4bcc7756431\n8b0bd8bd-e27f-44e6-8923-2bc6a1adf7ae\n985287ea-5cd0-401c-8e5a-3ddd599e7542\n3a0bd9b4-3829-49f9-b49a-0df628254853\nb970f974-85ed-43a8-9556-12a630f41d6b\na5089d2e-37b8-4d4f-bbc8-45078d65ec31\n5ed43a28-4e89-4cfe-9660-5863a459f171\na252d531-8f73-4020-9b5b-d5b9e7ac18e5\n4174f867-4051-4b1c-b266-e2824fb5e8c6\n82d30f97-6db8-4c9b-820b-22e76c3e3c5c\na7cd5250-bb6c-4b88-ab44-7b91cc5ea6d3\n71fd4947-7900-428f-92b6-6b4905602ead\nca59baf0-3664-44ae-92ff-9d672ff34b00\n2cce9424-ad59-4564-a992-48f3b648cd62\n526cd21b-c1bb-4c98-9af3-5267512dc38e\n4f08ef4c-7c74-4fca-8ac9-af74962898b5\na8716a40-b507-4b91-8b6d-930cad7c1afa\n784a1b64-2899-4187-95e2-f9384a9888e7\n6dd8d870-5046-42f2-adc1-eb1d800aca9f\n6dca45bf-7e38-427a-9e38-153a73a07004\ne3b559a7-f9d8-4fb6-952e-fa6940267dc6\nef8ef59f-c2dd-4644-bbc8-6c8b1c7c02c7\n6fac86ec-c067-4dec-b4d6-7ca8a1a46023\n226962fa-1c10-410c-bb67-2377912eddd1\n362a4301-528d-4a68-8f13-9422b9e5db52\na9fd60ca-9b26-4099-85d9-1f81786b3df2\n5288cb4d-905c-424a-8630-fc93b6ed3bb2\n767a7624-e4ae-4a0b-ae8b-ef4a18a1ff5f\n42785954-7496-4105-a929-bee3978a46fe\n2ddeb63f-8ea1-436d-b734-87026692ebad\n447fa0a1-bb1e-43bb-9b6d-29d40a13d791\n455fc773-da27-4106-b428-f8a3050111f8\n6bce04ee-c44a-43a2-8632-ad25e5c3dc03\n23a29903-5213-4611-88c9-165daadff71a\n718f6b61-0597-4d51-8ec7-429d6ae666c2\n6c1dac4e-38c0-4e8f-b62c-e6c2d712933f\n1c1519b8-2614-408f-8c2e-7a380520542e\na7d9e24a-53a7-4822-8d21-fdf6a4f85c2a\na6efa5c1-1cf3-44be-a048-ab8a9e466dc5\nf56da354-f61e-4e4b-a796-d68deddeb33d\nf99aae27-c2fa-41d0-abc7-18cac410a661\ne22f6595-8c7d-472c-a117-25db181c930b\n8c369ba8-c39d-4975-a2c6-9665b2ebc08f\n7b1c3534-fcdb-4e5f-b960-46e773885d2f\nc496b04d-7cdc-48d4-b176-9acb4f551f78\nb066dac6-73f1-4991-bef0-e0e58b9817e2\n63921d1e-e96f-4ad0-b96e-d4ede11e09b3\n7e3f6511-be91-44f3-af43-cce1b0d5f63b\n1aeb6fa5-5898-4caa-a7af-c19491607701\nddb1fec1-ba8a-48a6-910c-c79deb076241\nd4d910bb-c107-4054-b36d-8b671be2709f\n9e3b1655-f827-4c24-952d-c446e8e1b16d\n483d8a61-7d10-45a8-ae31-dd0d737f5fe6\n441921e8-f812-4413-ad80-d7c3087ebadd\nae17e4e8-9d49-4e18-8e51-14e14c7d31fe\n6028477b-d109-4e28-b798-e45ffd246150\n99cd8470-f907-4924-ac24-203756b7e547\n8591a3ea-9403-43d7-ac6f-fb26f0bd4625\n80304096-0365-461d-a9fb-1c14b0c2d74b\n3d37b82e-889e-40ca-bb1d-dcc3ee68deb4\nc79c0f91-446f-422e-a467-6bbd9f576f0d\n08f2dd4c-5a4d-4659-b40b-44fc18745a13\na52e1426-6abe-4598-919b-c83bff3dea57\n6ec7b7ab-f9bf-422f-a39c-4a698e62e91b\n5bd55cc1-28f9-4b30-a8c3-0d25bcdf0347\nc718bf17-46a3-49fc-ae1c-ba05eb499c89\nef738f4a-7f8c-4152-86bb-1bb0106fb21e\nc2d77afd-adb8-4fde-94ac-6f4d4a7ae68b\n98ed2fbd-c050-464e-a8a0-fba140dc16c9\n9fdac9ea-e6e4-4a73-b11c-a4c22fe76fee\na1c40937-f943-42e7-b83e-988acb6a10fe\nef498509-cd1c-4683-83ad-42f7d9164dc6\nc9ea2f86-cf2b-4d5c-acd6-424f72fce132\n0fea34c9-e355-4026-b825-201d96051242\nc0cf97c6-d872-4107-ac48-5cfb4c587e7a\ne4b40bd1-0e73-4b26-aeea-730cedc2a59a\nc8d85909-89dd-4337-8f25-5f4619939da9\n28dd639c-5659-47b8-b3ce-0583ea352c68\nee0aaa65-9cf8-4f91-935c-92b0581967a1\n02c509be-7c79-4f18-8e2e-123599554798\n41c078ef-bdd2-4c12-800b-56cd88907a5d\n31cf410c-ce7f-4ff9-aae8-05bdb4c9acf8\ncef325fd-89ef-46ee-bc59-24869c0bd144\n6cebabf5-2b3d-4f27-8214-04367efe6307\n98621bf8-f701-46ae-be1f-b571bda1e0aa\n654dbbf0-0058-4057-8f65-d0f9752f85fd\n4e386c57-7f51-430e-967c-d9d2ee5d401d\nd73fc1e0-6bae-4cd8-8bf4-11ef34c8f9c5\na48158c8-37ce-4231-90e9-e3d72cab7895\n669fe9c3-dc36-4d43-99db-d02a5284f6e1\n79cc7580-7e57-4879-90a4-bd978ae0b8f3\nec104d8c-af55-4cc3-9159-ffc4fe4c4acc\nbb00946c-4e78-4895-acbf-c181f9d1f9d4\nb6a9a650-f1ca-4338-a75b-b2cb096ef957\nda5a7782-d20d-4c6b-be3d-50390bc01360\n9c1d6a21-466a-40f1-b6e3-5490ea50649d\n45e05c30-c727-409d-ab46-0e2dd69c43a5\n635c2bc3-12b8-44ea-a0df-70a4979e3e41\nfa3e6adf-3a29-4181-8cdb-a444d6d39f5b\nc442c541-0262-42ae-b029-288f46820407\nb950f3c9-bd7e-4976-81e0-a14c55339328\n0fbbc1e4-1b75-48de-982d-76a6549a6cef\n6b5b54ac-6b9a-4998-ae12-91520b15bb48\n2eb10c7c-f065-4ca1-8fe1-109c2c286724\n4b7ed421-d5b5-4c49-bace-b831e7171e7c\nf8b75f59-2cc6-4e0d-b2d9-fdacb90225cd\nadc2f06e-973f-481b-8a43-4aaa62b601f4\nc76bd0f0-d98f-4afe-95e6-5bed374389dd\nd6816b55-0cae-43ff-a9f1-7b0fc7998ca8\n55692ff8-fa62-4dd0-b633-b8e2ce995e20\n86cd1fa7-8336-4743-8d08-7d21cfef4c81\n846bb8b4-16aa-4292-9fd6-dfe11d05f05b\n920f3e6c-e251-421e-9ecb-f5964bbf5129\n041e9294-7fa6-432b-9ad9-a303ab6ba243\n6ecafccd-e985-43af-bffb-af5e57421d29\n89ba6c84-e6ce-433a-8bf8-6c7574570b7b\n48af0e3f-4c96-445b-8b60-efefb962e012\n381e5797-e87b-4c1d-9a8b-2bde7468f253\na6997de5-f02e-4790-879c-b996feff6c32\nb3d64684-794b-4b7b-a593-b64b3539670b\n097bc85d-a281-470b-afa2-b56c36f97dd9\n47efc3fa-5cc9-4d46-a789-fef41460ee0f\nff35539c-fade-4577-ae38-35aa77193d9b\nd0d53203-d7ee-4954-912a-0bed81674c9b\n2ca465cc-cfef-4385-9b13-d2eb97b1346b\nc578fb07-5ce4-492c-a7f6-15d2be98b8c9\ne07f675d-19a0-456d-ba5e-d55b61a66053\nc03e9858-66c1-4e02-9744-d1a85aac69f8\n6befac4a-8c84-44e9-bf23-1d60b1b8755c\nba9a29ba-34cf-4575-9278-868bfbc6825d\n672bd10c-237c-4991-9881-b61cc989ca14\n6a622541-07e7-40bd-af83-abc2835521a6\ndb22e5c0-6a9a-4147-8e66-251d75515788\n1b37a25b-0435-4ad1-9ee6-76f0d6b0e0ec\nc319f581-0614-40a4-9b70-f47fd24968e2\n3fc5270d-6fd1-4655-b087-5f86c6de3165\n94e20da1-3613-4acb-850d-5a3066fee641\n1869ce98-78c2-450c-b7ec-6c85a4dfd165\n930aa3f5-235c-47bb-96b3-bdca9f48ffb0\ne349d575-666d-4f32-adb5-46a296ba2def\n612dbada-12f2-46e9-a1b9-0169adc3c2ab\n5a1813fe-31ce-42e8-b472-73e49ebb2128\nedd6ab1f-b036-4ef9-943e-1b0891df9934\neb3b12de-6e10-4828-89cc-172117efa514\n754a5c8e-1764-4a20-8413-ef5718ab9fef\nbda7e48f-b988-43c8-b850-2b824da09ae8\n4477efbd-862c-4629-bdd8-4dc8e86dd6cb\n5e9a2c2b-15f0-4d4d-8d6a-15923ae195ce\n4927112b-7bb9-47cb-a100-5e2216f38b3b\n35983b49-a2c0-4071-9afa-6dfd688df923\nfa1a9ff6-df04-461e-ab07-d92b6628a1ef\n9ee85d0a-8f23-44eb-b590-32e440ed6b59\ne428a0c0-2186-4f4a-8520-af4fadb2fe05\n597217e1-421c-4314-b221-3e63f0000782\n95631f71-a050-4924-be9f-191a6a8fd3cd\nca00a84c-b195-45ba-963c-e3c5fa2100ed\n0e5039a1-522c-4496-a809-00493ab8a1de\ndf61e1e2-01f0-4438-8602-992c3ee42d83\n303218ca-5922-4ce1-9dc2-e7f59921f250\nabf08d91-247f-41e1-b9d0-14776ee99f9b\n7a27a02c-beee-4ac4-a263-50d6ea8be0d3\nee509c69-d7aa-43ec-b0bf-7b4f4b3a4c4c\n56e361a1-864f-4941-9cfe-5d593c56238a\n199c9ea7-c6a3-4920-a48e-8b5dadfe41c9\n09296742-4fd0-4400-a8a1-c1feeaf4b23b\n89977334-af23-4bea-b1df-5e6c38b3ac09\n292e6e02-314d-4d78-aa93-c207dcc59fce\n2702f5af-f6a7-4144-a1cf-9bc56200bad6\nf6e98c7b-b770-479c-a071-516ec0904135\n4051d933-1dae-42b3-b2ea-e380602485c5\naeae7f2b-6525-4496-a3c6-accec7102c42\n8abada03-4e3d-4ab3-a465-68ecafe3543a\nc9434817-bb1d-488c-97dd-375772f8be5d\n5cfeed3c-ef14-4a44-af15-f2b5956d6e5b\n2758a695-bf01-47c2-99b7-c1e78fc14173\n46cf37c7-051a-469e-894d-537500389681\n481b07e6-3082-4b7a-a888-da3e7998d5fe\n02c76750-59b3-495b-808c-a81c1b918eb2\n85071e97-2dce-4515-a15d-f3e10bc138c7\n79d6922c-a0c5-48dd-864a-b96f7e85573e\n4dfcd2a1-53a8-494f-b9b8-e371e2755a4d\n5298f46f-f58e-408c-b2db-8566eb709ad8\n31845266-8296-4dd4-aa3b-90a9ba7f3ed3\n1017c080-e2f3-4636-83c0-8415acb044fd\n80f5a400-758a-434a-90f2-0b23c23d0c32\n62d5ad0c-e55f-4f2f-a288-0e140aa3ff2f\nf9ebf0a4-cc2c-4988-bb95-b1194a37e76b\n09fde4e1-63d2-4437-b074-b6a8635c05d2\ncb59ba44-5313-4cce-bf44-6ad971061212\nfa2bbf73-ced7-478b-b7f4-349acbdef5c1\n46b51146-4356-42a6-bb0b-485f1d5265e8\n822e233c-8257-4d66-8ab6-5da77f60c438\n1c329542-1248-486e-ac4c-ad120893e5f6\n54194d1e-4eec-4f64-b880-48372f6acecf\n7f5d4f87-4c42-4fc6-ae8c-3848f9aebc74\ne4185ec2-0c77-4454-b8ad-55aee0d4db16\nfd7f1539-43a5-41d0-b352-cf05c1f34a4d\n660d799b-8146-4c6d-86f4-aebd4c916cfe\n2dd77e2d-0ab8-45e3-aa2f-81aa7671635c\n32730ed1-8c3b-4b42-9e88-64859d96bd5f\n49b45a06-8603-48f4-8397-9f1097b92337\n50baf617-f481-4939-8db5-5c89f8a0e2fe\nfe397ce5-1f56-4468-ba15-6eb0b1f2b4ad\n45a331df-25fd-42fd-b055-73b28b964329\n912aba23-37f9-45b4-91bb-a587f15a282d\nbb20bcdd-1822-480a-bf73-e79e9443c5d0\nb6473209-a0aa-48fa-b6b8-b322d2e39e51\ncedaa664-cba7-430c-aa07-26f8582ee554\nf23b2c46-3951-4aad-bb4c-f54beabc5332\n16144526-07eb-4d79-9eaa-7a48b4ee2956\nc6a1db3e-497d-4b40-95d9-a72c54ddcd60\n35a48cc7-1f37-462d-b119-e2e1f87f4b42\n9b889923-127b-4676-8749-f513bfde258b\n03335f27-387a-45e3-a7b2-741a4841869b\nc3867491-2da3-4753-89c2-733eefba9b25\n66aa3984-f3e8-49f4-9eb9-0f6dd8378a5c\na0c07892-c3c1-4bf3-9905-2d4b8c6fbe30\nb17f91d8-46d0-43ef-971b-d95102dcba6a\n908e890d-e475-42d0-b1d7-cbed85af7fee\nc3a1eac0-d487-4439-97a0-c36f0be27f95\nabf15f8a-14e0-4b71-9f9c-c3288eed16fd\n65af00f0-a664-4012-b3a0-fa98b41afb62\nb5713b91-4b1c-46d0-b8a4-83828f5320da\nbd8f5af9-3e61-4e61-8434-422cabc3f7ad\nb2686a86-71c5-493e-bd6b-f0a61c3c928c\n46a1fc57-9da1-466b-9ac4-03b1f7c52dce\nf9fc6f09-5f88-4425-a7a9-cf62908c5b1e\n18df3367-e4e8-40e2-aad9-b700b1bb384a\n89da0402-c6f8-4757-a652-6988ff6f7c1b\n7288078c-e512-45a3-8033-d4229b014957\nc289759e-00bf-4d6e-8498-2eb619428f61\n103ca326-b507-4a7b-8f48-d7ed4d5b0b11\n93130c85-81b1-437a-8ac3-8929351c448e\n056fa2de-907d-48a3-a00e-fb60cc8c706f\nb01a5e18-9b31-46a3-8e79-4310cef860f9\nf3fc2025-688d-45ec-b74d-83559180cfbe\nf104656b-ac18-40f8-9bc9-475c057f6edf\n40102173-4af3-4abd-a188-401c465cfb1d\n52b8e04a-6057-4a54-b25a-d0aaf4f4ac84\n423f7cf7-5a9f-4211-92ce-9d81bce4de73\n803c857a-3e1c-41d3-8bcf-9a70b5c7b269\na6d72dbb-378c-4ae6-ab83-0a34be41c352\na20590bb-2b1a-4f55-8269-08c151fb11b8\n53a9324e-439b-4b2c-a373-f552ed6b1461\ncd00cc11-2ea2-4ecb-ab14-4c49d780e910\n46b520ef-aec0-4187-b97c-82995d413fc4\n76776421-f875-4ed2-927d-462555cc5581\n5c01114d-0807-45db-b63a-afe51fe67719\ne817c101-6111-4db6-a388-be815a512cd7\n1fca30b4-b2d5-4b93-8e82-02308f1988d7\n35d3eda7-aeda-4587-ab51-9757332cf839\nb7b1379e-ced0-4e7e-b7fe-e6ff4f77d0f3\na789de80-abd2-4961-9fe6-af0585168260\nf05446cb-e3d6-4670-a569-e957b8d6e527\nfc4bc21a-902f-4f72-87b3-ea6793afce16\n87c5281d-ed00-4769-8973-1f30fcde776e\n85039b37-8bcb-4de3-9409-cf379e1f0e27\n12dab8c5-3b94-43eb-8a37-33b683c14072\n15d84785-eba1-4969-83cf-e3eaeb4d4760\n6de5e8b8-1f54-498e-8d98-93d4a2db2e80\naf7e95da-2594-4a7a-b0c0-8b31c8aaf094\n81107942-cfc6-4c0e-8fbf-e079c8f70585\n4f56822b-1ceb-4da3-8b1a-da2633788957\n05c09c48-6c5d-4719-9011-130b8e75bd4c\nf650ee33-e5ee-448d-a49c-170e50908303\nf5768d52-e663-4b9e-a3c0-e6ea56e8d35b\nc8ab93f8-d321-4763-b272-ad6e3bddd748\n67079ef4-189d-4083-a09e-e457848382b5\n58e5c8f0-2e34-4bda-9fce-f11aa5dbcaae\n967bfe44-9cf4-4c8d-911f-aec19f01f69e\n8eb86101-5b91-49fb-b448-c3507d0a41ed\n4f0ebb6d-77b5-4a83-8789-78b9879884f6\n9e5e60ac-46c2-4710-8b1e-5ad9b82379aa\n011bbfeb-761d-4b9a-af8a-6b2194a76dbc\n6d1ac872-f6ac-407b-b291-e5deb952bf75\n4b876e0f-2ef5-4e71-932a-67081ba1c333\n0115eaf3-c543-4639-8056-2b3c351b8a2a\n8d36eb01-1f8d-44d2-adc8-b4a3af5f646a\nc378fa32-65d3-4a4c-a50e-1924d4823b1c\na532f8ec-f251-4008-bdeb-a4a471b2c511\n42dcb932-3ddd-48eb-96e6-41467ff9c5e8\n34709aa8-329f-45c5-953a-91fc9af3c136\n097c1669-e65c-417d-89b4-9b8260f79cbd\na51a7bc6-c0b2-4ef0-b563-ac97f7b4a042\n1081b913-a85f-49bf-b218-025ad75dddaf\n163a9fc9-f5b1-4b16-b197-b9196c678ac4\nc3e81656-177e-423b-ae2a-0fe62214e1c8\nc2865e31-80e5-4b77-aa87-3343d303055b\ncb19169f-72e2-47ea-be95-b62b8433065c\nd0178ba0-07bb-420f-8e7a-261ca5f4344d\n07ef7378-e252-4af7-a977-c8bfaf24f26b\nc08e5665-aa0a-4f74-bf99-ca8a51696f5b\nb4dfe944-b146-4e47-aa1b-f4f3e002d1ab\n760fe851-5c40-4627-8814-3a6cea4f0197\nbcb80b10-6ea7-41ec-b32c-79faf84b85a7\nf7c743b8-e924-4500-a7d9-34b92be717d9\n138e2d3d-3011-4acc-8004-18ccd0f3b685\n41276daa-2572-4f2c-8751-53931664695f\nfd4d9eff-2805-4d8d-9e3d-1209b0535e8a\n7bec3476-d397-4f4b-8c81-d5d4b301b6e4\n80d4b17b-e23c-465f-9c3f-a094760e6e23\n5c47cac2-fbf7-436e-984a-d36bbbd291ae\na4ac1269-24b4-4398-a157-b5158e9ce611\n1713ad55-1bd0-4f59-b251-083a98e2cc8e\n837e59cc-92b2-4105-981c-2052b59094f2\ndcf5a0bf-c047-4395-ae44-9891e33ab007\ne75701e8-a5fe-4a27-b39f-5f0b51156808\nf6377da0-e02c-4996-a021-5c4b54444ae3\naa61fc4d-4e6f-42c7-921f-317d9066ffc5\n7e7925c6-8bb1-480d-b832-00017e0f931e\n35431b99-d552-4bcf-b51b-5514b5f31dd3\nbdb95d06-a1ff-401b-baa2-8aaf3130c2f1\n24564682-7add-4118-81bd-6e6bbced9a09\n19edff72-2530-465f-9b01-b315685add70\n55a424d3-e35e-41e2-a90b-fc7f3fa98c08\n9ea36329-fc22-41ea-b57a-4c17062ff534\n8f24df47-40c5-4f54-a9da-8ec9e2c157e3\nfb1313e1-90db-4ac8-9e8e-9ee058836bda\n2c02dffe-5900-431b-b10b-06c6584e5633\n728239b7-ff93-4d32-aaaa-7124e41480d6\nd1bc6dc8-1b29-4192-9369-d94ce71f4c73\n0e9de1b2-dddf-471e-b1b6-467a30e134c2\n8bbceac3-4cf7-4be1-b193-484686722298\n7c31b1d6-bc7b-4353-b8d2-0e36037c7bcf\n9ffe2e08-945b-43ca-88ed-9f5af6c0cbb9\nba361190-cb86-4793-83ab-47f6426639ec\nf1e5c61e-88ac-490b-a23c-42adc9d53008\n9c768c90-de58-4863-a712-08962183b7fb\n969df856-ef70-4b49-9712-d89a9e09914c\ndec7f3d0-037f-414d-a1ca-7c1fd2e5a7e0\n49d2704b-8eb1-4552-9f1c-6b6cfe833761\n025bab05-f600-4b6f-93ee-b6f84e7d4d27\nfe6c278e-ea14-429c-9b77-810c3974e0c4\n3056ecf9-6a4d-4080-b394-f227cf1438ed\n159631f3-ef2b-4396-820c-69697f418111\n72dcb368-c7d7-4054-aeca-b78eb237cf21\n98f2d8ab-5aa8-45c9-b0a7-16d8bae03372\ne9aca1be-4927-4923-8767-3aaf111da3a7\n76ce36d2-3eeb-42e4-88ae-723390ae8659\n136040a7-c06e-4cf5-9c4c-72b1a75a981f\n2193f31e-4e39-4ecf-9ac7-df6dddc56971\n929f5588-caf5-4cdb-a445-e93e215c7663\ne349edb4-d2df-4ed3-a321-32a030e384d1\n13fd4a42-1ea4-4623-9e10-1d35b1e7dad2\ne1652747-824a-4027-88d1-e1f79aee785d\n23bd2df5-c8b0-4872-8443-d62fc7c9b57c\nee669811-e49b-41ef-a6c8-9859c56083eb\n66bf7bad-82b9-4309-af67-cd63f756de63\ndc3b673d-e6b4-48f0-a644-1c49c85a399a\n8d91ee58-ef1f-4b65-92b1-884205fb1f7f\nb24971b8-dff0-4d24-b1a2-24f4227b89c3\nacff5343-1d00-4ff6-ac89-3ae9cfdc53eb\n39a68903-ade9-43e6-b442-bf0251a91950\ne9564bac-f2a2-4f2e-bca8-db920f3cc79b\na37c0c78-404b-49eb-9a85-ba6a96f7f552\n3ab20f08-3647-490e-966b-7a2df0c8967f\nd20239d1-8515-414e-be2c-09ab964ea991\n72b0575b-5d36-4f5d-9577-6f7c4b6c7dee\n65538c6b-2fd1-40f3-9b5d-2e702bf6d0ac\na353e572-5367-4725-937c-6fbb96ffe9ef\n138d5289-c68c-41db-a50f-ee8da17ecb62\n8a1d5e16-5fc0-45ff-b4cb-057f4c6e06b3\n93feeb4a-0e9a-49a7-b282-ad4c5f3cc4fc\n21a55f16-5bdf-49b3-a97d-11da2277dd4d\n4fc60156-d75e-4de1-b6be-5c12e6b80aaf\n93aac923-b5aa-4dce-a1ec-eea44c70af73\n117e288c-e589-40be-965a-c65362f72471\n41145b4a-82e6-41f1-b8e2-0bfce4bfe1df\n3fe3475c-4460-4508-a996-c5b8df0f31bc\n2bb096a2-a1d0-44a2-b379-03970e858da2\n933875c9-623d-4b07-9eb3-a884af9482ea\n4520bfba-f67a-43ee-8002-793d8609eb7f\n48f3a88a-cbcc-40a1-8248-d7263e4fe329\n398f56c9-bd45-48cb-a6f9-400d71060ae1\n305ff9f4-8b61-499a-aa79-7c48a3a992a5\nd56953fe-71a2-4f49-87ea-7dcc79be8508\n1caa8d7b-933b-4ecd-8694-135ba719afa4\n3405a85d-e8d2-4ce8-841a-488a6b9ed078\ne28cb0cc-71d6-443b-85e4-b4b930ce17c7\nff1699fe-cb9c-4117-a1e4-fe249c23bd34\n27755799-1a25-417e-873c-b489942752a9\n23d51c82-290b-45e8-bcd6-cf55bb540a6d\nf43b7ed2-3cc0-4bf4-9470-20ff3350203a\n4436beab-1916-433f-93e0-6625f1bcf794\n137eb32c-ba3d-4eec-9e8a-7051b75d7e05\nc744db90-85f7-4210-b086-87108dbd46b1\n6c420d21-c271-43ba-9258-0161d8c83fb0\nbe33ef91-506b-4721-bbb0-c06c7927ba26\n3c3a1453-5148-499f-a4a1-db64704209bf\ne49f226c-1cc5-4f3e-ad2a-2d7d193b78c1\nc035835c-f054-499e-81e6-3a15df23aefe\nf9a38a04-ffe7-4e5b-b58d-e45563306116\nb48ad367-14df-43cc-8de6-7dc9303a8084\n0d3f3f9b-f47e-47e5-bd22-9cc109d4e939\n401c0d4d-c67b-40d2-8d79-e1abca1e40c7\n67c013c8-294c-4f3e-88c3-78efa3aeed63\ne3f645a6-6cb5-4526-a0b4-c6e79a4f38dc\n7f77075d-4a3f-4562-934e-44aefa996dfd\n891cc7b9-53e2-4b1d-81f8-20a6bd0ae71f\ndc7fc268-ff83-4776-adef-d1f1c0fc2fbf\n7bf4feef-df30-4505-aaf3-58df85a522f5\n4b57308f-eb00-44d8-982c-13d85b84df48\n6d81704c-fc9d-4581-a3ac-ae10ee508608\naaed2e9d-bc45-44ed-8990-b1083f94396f\ne7aa1843-0833-49e0-a777-6e393c967d6b\nc69f8392-182f-4b3e-b0cb-2ddcca8c4fb4\nbd565d71-4fb7-4586-a8cf-36772015508a\ndc4751ad-33c2-4246-8421-a769ffbd7cbc\n0f65ffa1-b45a-41f2-a583-bccb13dc6003\nff085e8f-56dc-42ec-b6e9-48e5b36dc24c\n45208762-989a-4aa5-9c1c-f7e80c3fa57d\n2ade6a67-e761-4852-8d39-68878a2a3c0d\n7493171f-fd98-4d44-a35e-e80830fd0dee\nb0ce380d-dc27-44bb-9f98-49e80d7842e8\nf6d77734-f499-4877-b322-42368a132941\ncc57bb92-02f6-4db6-8ef7-d0828ba92586\n5adde2f8-0dc8-46ab-bcf4-ec87ce5ea24d\n68d74f7f-b5d8-408f-be93-ddac6f06e231\n74833068-7246-494c-bdad-6b239927ff7f\n2413124e-cd60-4fcc-975d-9036a123078d\n1316dd23-c7c2-4c5a-ae05-47a19ee78092\n9f44a861-739b-4f28-98f0-f4bd48f734bd\n83c74201-6cff-40c7-9d1d-b7de4d20431a\n7e184663-fe37-4217-8607-052792547290\n34dbb828-20a4-4f70-aeeb-c6c7753ed00e\n033400ab-9cce-4dec-ba25-a2104657a23c\nbcdd1052-8d4a-4a68-968f-375bd018240c\nbdd51b15-b8d1-4e89-8946-bcc1da426b36\n3e672d42-368d-4fc8-9228-634ad839db92\n1969d30e-110b-4762-b9ff-4badbe0be68a\nf02c963b-fede-49fb-a028-fde9b8884817\na0ad59f7-a746-4fa0-9dc5-97c9293bdd05\ne7664945-753c-40c9-b795-19f918905f34\na152f49c-ad46-4b8f-8634-5c8eb348f355\n17973179-8c8a-4116-b062-9542688490b5\n9f53bb2e-8c30-4911-bd93-b557aa180ba4\nd58c4c70-e06b-4af6-8b89-d10b291ea7a5\n1c15d10d-e1c9-4d31-9738-a8c9383b8934\n82537486-dd56-492f-af02-216b5840af29\ne1aa8602-c403-4257-a934-10c3d0fbe360\nb0344b82-1f82-4722-81ed-62bce209d23c\n02c6d5a6-fb2e-4960-84ba-aec6d04e12d8\n166e4bf1-d593-4c3d-8a75-4440ee0c82d9\n0ad97015-a63a-4a9b-9b39-391eb0bcb66b\n402a3ac0-7468-46a4-b9eb-ce5e768019ec\nc7f972f0-190b-46a9-b5f6-a85413286030\nf792d912-4b85-42e8-b1bb-a8a24b382587\n77c6f8d5-e084-4d6a-868c-243961052b25\nba4ac537-07fb-460a-9476-2e72b380b0c3\n99e71088-7522-47ca-a14e-46ad44e6ebf1\n602a2d9a-4129-4643-8017-e9e382072dd8\n94c88e6d-7df5-489d-a86c-85b9e50ee40f\n44dc6b1f-afa4-4f64-ae85-50a826c41d15\n734e0ed4-2a4d-4a70-8a97-4f3e8472553b\n6d7747c5-47bb-4c8c-968d-38ba1d48cbdb\nd73d8a76-7301-4246-af55-a0c3e7937b2e\n77fb266e-2580-442f-9858-975714603954\n23d5f9ea-d3ce-41ed-8672-3cdf8c0ae740\ncfb7d218-0b6e-4631-ac4e-604d8eea300a\na7c32f33-c478-4f2d-9f23-de8871336b15\nb3920d6b-dd9d-42cf-95eb-5e13c334449e\n2619d009-6342-40e1-84ca-dbfd26789163\ne0298ad9-55b2-4315-ae82-4a5a14d1b827\n4e20eb65-a6e5-47be-9f60-166cc1869e4c\n599d7493-2f13-4aec-bfaa-dcc8809e73c1\na6034f35-b46d-4d28-91eb-f5737d7af280\na3ff83bb-d885-47f8-a582-01f2f1a9c4dd\nd8f012c1-26e9-4a03-97f2-98bc07b8d626\n09877a07-2c1f-4c44-9813-0d06a986e38f\ndf0c276d-2861-41da-b416-9a28eaf49425\nb7e634fb-0deb-4aaa-94dc-a6080fe65600\n99097aa7-80f6-440e-9025-593b26bd16c3\n07922345-8079-4693-891d-ad9949abf371\n1332ca30-78e4-4d0d-83b7-389202fd5b79\n54a293a5-1ef4-4512-89a4-f74f5c452c4f\nbd18b84a-2fbd-47fd-b24e-d7f01c5734f9\n478b9ef6-d0ab-4e95-b667-2f49f18dfa4d\nf6451e30-9ea4-42da-abf3-82a51149f97e\nb3752ae5-4605-41e0-9103-6389318b16c0\nceb32001-0bab-40f3-8ca9-13da45af9258\n6eea6e5b-7920-48d8-82fb-faa8ae0f3680\naf4a6737-9792-477b-8b07-fdf9862bc507\n475ed545-dc18-49ff-8762-c16016661498\n2ea826b6-1c58-4c1b-9d5a-6745d2a45fa0\ne015ecdd-61fb-4130-9550-2090288826d1\n237b8a36-07a5-415d-ae38-bcbed76a3fab\nf5a01d21-733a-4a10-ac0f-7d1d5fc5eb76\n3d12e8b5-f6f5-40fe-826d-2797a3662f0e\n44f33699-5dbe-4f36-a9e1-104b3eba68b8\n9142e0a9-1cc1-4ada-881b-03e3e9af7e89\nfd41ed8f-f11b-41dc-9bc0-a17013175c70\ncbae4193-baa8-4b01-8d5c-e30c3c692000\n6d95f053-5cba-440f-ab02-8749085e6bc6\nae0ade95-9d95-4300-bfca-5ea3aeb96f84\na9aa3f28-ec2e-4c00-b2af-45e2e10b3919\na069f2c2-9f89-4508-a389-9e443e915274\nd1ad1d0a-af04-402e-ab9b-a5f9e54801ff\ned65e2b8-dcde-4ff9-82a1-8abf2fbcf340\n5129c20c-2b58-4a00-8f98-0e55473f973d\nc79c2c95-be1c-4ff6-936d-cf2794340cc7\n5d6f7ba6-fc1f-472b-9ce3-3cbe67de15eb\n8c2aeb9e-d07c-4c8b-8549-94b96908d8f7\nb45b1f7d-6823-4f3b-89ed-d7b47fb778df\n9d4fc0e6-ecee-4859-a325-b9c8af8cc8d6\na6e84b0f-fab0-42f3-8c97-07fed16371ee\nbfd35755-4521-46e9-af6c-983a1e994a5b\ne547285d-df4d-40c8-b301-811971944841\nf1a73b9e-10c2-4e61-8664-1f6018c85b14\n3d86b235-f325-4991-97ca-55f23a94f967\ncdb8fb87-b96e-4958-ab45-9fef99327c3d\nc7b89d08-1a29-479d-8d11-48caee95e2b1\n45a9109e-148d-42ed-be14-b494233462ef\nc87002dd-c63a-425b-9d23-06e2b13a4e9e\n46772c97-608f-4629-99d2-528e4f7c7197\n05a7abb7-0eba-44ab-ae02-406ebeaef0c5\n011f43e7-9588-4027-8945-f1eb554da053\nbc55df54-b561-4539-94e4-d147ce022152\n702f24ef-6cd8-460d-bcc1-5ace95840de4\nc9f0b3ce-5a38-421a-a209-b9d711d87ef3\n09acae78-c395-4cf2-8ce8-34805b2feec9\naab791cc-6a79-466f-b5f4-f7359399ba85\n4cc13543-acf7-489a-8d2c-67b4c6e1a0f2\n0707ce42-7a4e-41d4-843e-0b28808f8e3b\n3ab64cb2-35c5-42e7-ab22-2e9e88fe1d51\nf03ffb36-8177-4d29-b9f3-36f204bce15a\nbd829025-2c9e-4cd7-ac75-e0e0a7c3116d\n4306bac3-fa33-4f62-b8dc-e417d62f0bfc\n8258f8cc-d92a-4a7f-a84d-76f123c3e7be\ndf102a84-9ebc-4ce6-ac6c-73d917b2e483\n8d9d7396-3cec-4638-9944-5779cc933f0c\nfc6a4c08-b472-4ec5-a539-538ea2118e6d\n7e3744db-3212-4e9b-8fd4-d16300e04567\n4caedfe1-70dc-4a0b-979a-eb8f722d57cd\n24a3a450-826e-4ce8-9494-1f9c7197d428\n6b6aed1c-efdb-4db8-9f05-148f0d8a6e11\n1a21d835-5f74-409b-99e4-f0b1cd23ee1f\n732fca65-9a52-4fbb-9e8c-aab40a1597c0\n5d2271f4-1d8b-48cc-8502-eb974d3063d3\n3565f455-e215-414e-ae56-f325d536abbc\n44d31978-21c8-4d47-95f0-ac811cacff43\nfd035c6b-8859-4fbe-a134-cb616016ca9c\nbee66eba-1375-498c-8f44-9de44d433be4\n497787f4-39d7-4a36-a64a-bae63b988ec3\nd8f9a60e-46e7-4ffa-9d35-cf544f88eb7a\n9ea0d03e-c2e2-4904-9485-279cdd7de840\nc8b1b8cb-cdfd-4888-b57f-a171a5ded453\n2c9e28af-380e-4503-9a35-949e3e97d007\nffb20857-d895-434c-ab81-53dd6a305a08\n81b9e6c1-71b4-45b2-a0f1-a3971fc74aeb\n8c1d79d2-15e6-438e-88c5-79cbec4495f1\n7efd7b88-5e0b-4a46-8c4a-4f255e573eee\nade71c04-ad02-47b4-add8-0cb10daebcec\nc4a1b34b-8407-4b83-bcbd-fb4ec6390327\n4b916695-33e5-4c72-88e1-73eaccb7b0ca\n712ca3e5-35d4-4120-a6cd-3bbe34efb8a0\n5e1226e6-8864-4b99-9e59-736341581512\n2be4f51c-0b22-4b3f-8a0c-9a45e9f7ac43\n9c52ca0a-05ff-43b8-abac-d9a6b5911a2e\n2f213b1d-d625-4068-93d4-9a1ab883d856\n564950ef-cb88-475e-977e-80b90a9dab29\n66fd7e97-2cdd-49d5-8142-f7b105f34407\n925d9f33-7325-40a6-aa87-9de810ab25a5\n424506ab-068a-4d11-8ebc-133adcb65d7f\n8a3938f0-f303-4233-a62c-55a8b45c27a5\nefb16a44-14f5-496d-9270-7efd319f1660\n215594ee-324b-4f37-bacc-ea84bcfd526f\n9fb21d32-3c75-4996-8217-2bd8d6102e60\nd401a689-d845-43ea-b5e5-b2a66c98be70\n1eba9238-e048-40f6-b963-0972f7a19c0f\nd165ff57-cd58-4844-b6c6-74e3d9458e5c\nd923b9b7-d346-44e6-b50b-89e2b6fac408\n693723a8-448f-4923-8f26-63a3645c74af\n5f4f347c-554e-466a-8af9-e2679125e40a\nec96c76f-ce8c-4660-8528-6bd5ffaaa53a\n57cbf575-7218-4673-aa40-85512ceb824b\nadbc8184-eb6b-4e2f-888d-9e88ef50ce26\n0e1ebb93-cf75-45e6-88c2-672132d96a5a\n5d373905-1145-48a7-a5d9-9339307507dd\nff5bb2d1-6802-4d10-a4aa-4c1f1f09467b\nc31ddd1f-d63a-49f2-9bca-fbb39a95f112\n5f87ba93-ba7d-40d2-978a-1fd34444e441\nd7a67a6f-b68b-4df9-a33d-2912406437b1\n18023d66-48f8-4c6c-981d-9774835299ae\nf27535a0-2ecd-40a2-9fd0-1da9eeb28245\nab7eb288-9d81-4d2e-8a9f-c98943143717\n5d3132c2-59a4-47c2-9420-941efee3c8a5\nf750c462-d1ad-42fe-b57d-8c00d2a443e1\n2d9517ae-62f1-4df5-abab-07271eb9290c\ne293aaff-2a42-458c-8c8f-42f002972b34\n32787122-52a0-49b1-b91e-f2eea8ace435\nfeff4dd0-06c6-4f81-824a-43dc0d35b618\n10eb1686-eed0-4b22-8252-a20a884b3ab6\na5b8166a-33d2-4411-929b-b4cfd7e5c7e2\ne950ce62-1aef-41aa-89fb-03fbd5f1ee1f\nd593c5d7-c96a-4cb1-a5aa-50c2a9678f06\nea1ff713-ed31-4554-a81d-5cea106612e4\na90d30e6-6805-4029-989a-3b0e65743e4b\n265f3a74-1351-4761-9ae1-cddb448a1bd8\n51808a5f-a2d0-4a34-979a-41d391d72991\n9b966541-b60b-4900-a32b-52c8cd26a31e\neb4a20e4-ff38-4ece-99be-9b2462ec3cfb\ne4fa8de8-eb8d-4341-b586-f925aecc100c\n5e897db6-f6d8-4e61-af65-9fbd47d4443e\n7a5139dc-853f-4615-803a-b37efe821489\n84dda0c2-cee7-4c0e-8637-89db662360bb\nee0621ed-c4de-411b-88d7-2fad8e6189ed\nfbec7598-a02f-401e-a550-7294965bad36\n14dbe994-664d-4c4d-8b70-260e51d8c256\ndf8d5373-fed0-48e4-a66b-48c2b486e35c\n2d4f2f09-7a5b-4c8d-8448-d299917e5b58\nb28bb88c-94d2-407b-902b-0e9a5a5bd7d0\na1a6e3a1-4598-4505-a3f8-ecd2e8926f63\n74c9a5dd-9ced-4cdb-a60b-0755d942eec6\n8696c6a6-3340-49a2-b89e-99862f99fa97\n6b77b514-38c8-4224-b474-112f37f230cd\n54ec7fd6-9e73-44db-b11c-6a5038d36186\nd59283cd-9f86-4443-914d-d674cc5e7502\nc92717d8-c71c-4b0b-9f61-7efceb71187a\n82e06bb1-2c04-449f-b70d-bc10f6cf6769\ne1895476-75b0-4db7-acbd-fe8e0b03de05\n2f20e56d-6f5e-49bb-b6b6-1a5cec36ea7f\n8c9f5ab4-569c-4c25-a116-1161f5d73d37\ncb3008d3-9a78-4d0f-bc69-0622c5d4f2c2\nd3658d42-93e2-47b1-b9cc-95da7ea378c6\n55fda828-e4a2-4c89-9210-3a22193f6173\n1ba3ee01-a5b3-4b38-ab6b-c4a15f87481e\nfbcd0a38-e364-47af-b8f7-9e51cbf5844e\n6e175abc-e88f-4b99-aee6-b65c9fa00e9b\n7fa93652-bac1-42bd-9ab3-29cc2b40187c\nda766303-2c5c-4bf9-adb3-7f4199b7be63\n14dc8bc9-508c-46ba-ab5d-d6cdceb14a7c\n63550f6d-5fd7-48d2-940d-ad52a3deaf42\n96288d27-42ca-4390-a41a-95e5992d711b\nfa6b1677-3033-49fe-a9c4-73848133e572\n787e183b-0909-46d9-a6f3-f3a8b637ad57\n77c5eb7f-86b9-4c47-97e0-2455aa2e4915\n0556f7a9-e67f-4073-a2ea-262fa40d2e51\nbcfecab4-3388-4566-bdf4-d62fb9ed56a7\ne899de4d-22a8-4bb2-bdff-eb4a91440138\n14992bd2-ceb7-472c-9503-ac506b69ba51\nb0823f0f-9d97-40ad-b45b-a24e6190fbb1\n004d14df-f403-4cec-9b74-fa8ff5ddc1aa\n28ce3f71-ca9c-49cb-b40c-b52637a60ca5\n3eec2da2-755c-407e-b9f2-3743baab33f5\n88a09604-d1fb-4d22-b52b-29c40d8240c8\n621abe1d-d2b2-4145-bcdc-432701250fa9\ne2dc7bf0-4f56-405e-b03d-928daf454745\n9cba64af-4f0a-49a7-ab63-d1c53be678f6\n1fdfb733-4c29-4901-bc1a-32ca5c2f7ca1\n6a3f849f-0970-4705-9c47-8701788de39f\n319ec6ed-3466-47f7-8b21-f1c4d0361c4a\n1c8e0342-cadc-4bc6-a4ff-a29333a98702\n862c863e-ad52-4660-a60a-a48d5f023d36\ne1e55c44-d458-480b-bfc5-aa0959e8016b\n6f4fdf58-b322-4133-b091-a036e8e446d5\nb45d1a38-c5cd-487c-aad5-bf7646dcce85\nf44bad03-6347-4e21-b329-c5a43450af6e\nee9b7c5e-b21f-4058-bd45-12e75c51572c\nb0dd9552-48a9-424e-adad-42bda5cb1de7\nbffd5d9b-b054-47f1-b601-cffada11885f\n3eac6b93-4d83-4973-9b2f-a64b5810e9dd\n3dd3d689-c08d-46c6-8625-b92198374097\na8fb7683-6174-4297-8b57-291ebffe8a84\n05cace82-b77c-4374-99e6-edd4a1ed1467\n283b38a5-923a-42db-81af-dc3a449370fd\n19288c74-cc59-4654-9fa0-0d3c87697a57\n41039809-ee81-4be9-99e9-98caf500db26\nf1d60e93-2cac-4827-a6b2-f68bef5ab5fa\ne78dae02-b688-4c61-bf1d-9ce3826a4674\n12f17774-f804-454b-9a80-0db0b7aabc6a\n391ed030-9762-4839-beb5-05749642a63e\nda1725e3-b339-48e8-9b48-4cd570fd4e90\n5128b57a-48d5-4043-a31a-7c77514e23a9\n76e9d86a-a653-448a-80ef-318df22c87e9\n00a4d1fd-91a3-44db-b39d-1261654b9f28\nd4093451-1d31-47df-a72d-72822f881596\nddc22259-f79f-4658-bb1a-bcbb4c7e4656\nf6ee276a-8947-421e-9257-f8807fb5f69e\na0c8899f-2031-44cf-8e17-36b84b19ec49\n26a21876-0781-45af-ad29-ab0261d3efec\nc5bd885a-6329-483f-b097-0c46cd9480c0\n2d0b2206-92f5-48e1-b4d8-2707a1dd3d5a\n08e6f7d2-8be6-412c-85be-3e4f0ad5a2c6\nfa2b6fef-ffd9-433b-8c86-0e9f275f51a5\n20a436b5-7ea9-4ae7-8a4e-a15e3f727d1c\n1fca6764-5e94-4127-8167-b7ed8f4e4403\n3c9ed6ff-cbe0-4b95-838d-7b5bacaf5fd3\n838bed7f-b4b1-4935-a974-2fdec5b757f5\nbbf39f7a-dc5c-4544-8d24-8889fdd905e3\n2ba62667-ec12-4471-98cb-95b9888aae0b\n8d808eed-3c81-4f33-b666-6b16e6c7e048\nfc151801-d706-4969-8806-f033750a2ac4\ncca2c319-b04a-4208-9c1f-1a08d16112bf\n17051c93-e4d3-44ff-bd15-bc225e08fadb\n5577c385-bf8a-42f7-8d86-04d7ced5f30c\n3a943061-7e48-4af1-995d-526a0fbe0652\n5225c6ad-e11c-43a1-9a5d-625356f88883\nc0216396-a56c-4bb4-9a24-1b31691ea738\n04fc3d57-97b4-4fd6-a626-666f63af9f6f\nead644fd-7901-4509-8f9c-385f522dd8bf\nb7ec6ba8-46fe-41af-9bef-4eb329962a70\n4ecc013d-1e74-4729-be65-364be1fe83d8\nc2c912a9-c7fd-4271-aa76-d63089d9a49c\nd479f0fb-6872-465c-82fb-43b22ef94bf0\nca035006-6030-40fa-bb55-cc7351ee9ab2\n98dabf16-88fe-4308-8db8-b925af9afc48\nf01a196d-fdf5-41ae-a7bb-d40a559f8c2a\n8278693a-fbd0-4471-90e0-057b09059c21\nf747012f-6edb-4ffe-ab64-0cdc82ba0e84\n436448a3-af47-475c-a23b-0caa0e175b6b\ne4799c15-3a01-4fc4-819d-a98453c7b677\n43006b24-83f1-42b6-be4b-6e993e4ce02c\ne785a7ff-452e-42f1-8675-9ee1274feb2a\na6665f8c-a9e4-401c-8297-382b3a9de3d9\n2a177f1e-bd5c-40b3-9f69-3fe7f3b11385\n7c007be0-6fc8-4aa3-9faa-52d5f0a74cd8\nb0d5d264-a1cc-4e6d-8549-5d7b04508478\n7f03268b-7290-462e-9188-317616f417a2\nffd683e3-bf72-4bb3-a9ed-2adf580904fa\n4c061a26-8f2f-4a63-9331-685afc02c59d\n4f6e9f58-f0ab-41a2-8f28-bdce7d24c6cb\n2066c41b-59b6-410c-85d5-68f189097140\na7042c98-48bd-47ca-bbf0-724d140ff44d\nc3455f56-ce25-44d5-9d7a-3e048fe4eccb\na4a33e2d-9886-4cc9-a31b-3256cc8d85f3\n18b0ad2a-d35a-4550-9d09-15085efa124c\n7a6b97d2-df5a-494d-a24a-720d78cd2c62\n1c1139d8-e7a5-4c10-b6b9-57859f1ed0eb\n797f7523-9fb7-4d81-843f-a727efe86f47\n09d7d5ec-e66c-46bf-a803-131675184558\n6b85066f-cc62-4ba2-8e1f-025cb6b57cca\nc684f7a8-ac81-41fa-96ce-4d25238e96af\n2ddec0a0-908f-458c-9b06-8a2f709c4477\n51c290ca-0517-4c3f-8414-7af57b27a110\nad3026da-85dc-4c91-977c-bce568b12614\nf060af84-0a25-4a18-a0e5-b6fb223cd7e7\nc218f453-1e94-4f98-a8ee-a2cc60445b5b\nb8e22cbb-5d65-4190-a519-bf87e818c964\ne827ce3b-c147-48db-a871-2d263acd817b\n0b900d6c-61c6-4889-9345-b349ff6590b0\ne0e133d1-7a9c-4708-b481-814f247f55ad\nfb3f62ca-cc88-4ca5-9d91-bc1042d3498d\n84b71fe2-09b6-4245-ad3b-afc9dbc4d920\nb701da58-601c-48e1-a555-6e4f0b301496\n7fd82567-6236-4e70-bf8a-262d90060079\nfbdcca4b-c2a9-468d-9a22-f7c575a4d83c\n9804baf0-2c2c-47b9-aa26-0d357bbda707\nc26a21d6-4612-4a3a-b90e-8bf3b9b91cda\nf2b8d4a2-997a-4f27-9a80-51c2762b720f\n0c9ff232-0b4d-4b71-b58d-6a93831c93bd\ne8fdb2f2-cb03-4a2a-a00e-0b26ce29be26\ncf514d88-1a6d-4f5c-9342-6740d6e35ac4\n9d37ebb9-d2a0-45b0-b12f-300786c1f6e7\nd6f16579-f7ce-44cf-a782-983ac677a737\n6f751a6b-b803-4ee9-b818-c09d990de810\nf0a2f7cb-8aed-43f0-95f0-2862b5b50cbe\n5800b4fa-d104-4fe5-9f51-d4af487c5bf2\n2b5a85bb-0d83-4e86-9e53-70609970cc5d\n97ec3c75-abff-4ccd-84a5-485fa0d8cf91\nc0e7467c-2e46-44bc-bdf1-7c0f6521887c\n10a46041-e1a6-4f1b-bb41-05813cdd147a\n75022bb4-c213-4ef2-a4ed-7ed2a834f158\n65184db1-c793-4552-a0d9-448c5083cd3a\n21247df7-d39b-4a0d-960f-e892df18846b\ndce7f22c-be77-42af-89a1-68758cc1c079\n546feece-80d2-41e2-8939-815d21e5e45c\n6717e84d-470f-4913-8887-07c38595f1c6\nefcce582-bc44-4cc5-9f32-e7304e351db9\nf002fb48-2a5f-46a5-b3e8-4d7ec2763bd2\n423aa6bf-b76a-428b-9c86-7189f9c8d823\n861cb1cd-7194-4565-85f2-28d9ff529d3a\ne602bd94-6926-4ba4-8652-24cb49012b9c\n601191e2-c483-49c6-8ed1-fc9df42a727e\n1ca2cb51-e821-44ca-9917-0bd9e30aa604\n97e0c904-3e18-4088-a814-1f1bb2793d83\nfc490c96-52b1-4a97-8119-5358f4e7a391\na00d9fcf-2558-48c8-9237-8f52cfb8c939\n2c8b6c59-8e8b-4d8e-a1ca-a8a296dbd193\nf6363ccf-7b94-4f6f-b40b-e092ec37a397\na193aeef-2027-4e4e-945d-6871649eaa20\na7b4d4ec-18d5-4d85-8fba-0f4e44d920cb\nc6b335ef-e1ec-471f-ba16-7c25af8cfb55\nc5bb9888-9a5e-46e8-a815-cf63e01fee2c\n65f2a99d-d9f9-4e4d-b591-8713818f9e81\n42893c78-8f8f-4513-bde3-f02537ecf422\na979e402-9409-4ce1-950f-0db4acd4599d\n9d43b660-b842-4f0b-b858-3d867642df09\n23b8af6c-fc22-4c64-abcb-9e43da0be12b\n04fc3103-6152-4cff-b82c-f47e2b9511db\n40a878be-2eff-4588-add0-014ac220102a\na3ff86cc-dfd8-4949-94ce-b32fe9f7c451\nbe6e717d-9200-42a5-83bc-7983b7e2a62a\n028c2dcd-782b-4ddd-8159-cff9e0365cba\ne5cc7a95-1e96-4c20-9a55-34282de9b9b1\n6acb7a0e-987d-4b52-817b-2c2d6d69bfa7\nf648cefd-7c4d-4f55-8548-9627c9de2379\n51100ec6-0be2-4178-a8eb-f0ca4e11f061\nbe20eaa0-972a-4947-b0e4-42479d5e8680\n98cd1a13-3621-4da1-b383-a2b6590f7b8a\n8c9c5348-1d07-450e-b52e-8d3cec651117\n5f24ab8d-8277-4dbe-a246-7a792e496e78\n1efec030-8de8-40ab-9e4f-a348bc0f51e9\n30133aae-097f-4076-9264-c4f942035045\na2794e00-833b-4a9b-be39-23b66b60d510\na915e168-e445-4a04-a994-75ad9b88288d\n2c4075c9-a889-4564-947e-190f60dfc9c2\n1900d4ba-a4f1-469b-9f59-fc5d66529de5\n0f178d0e-413b-4038-856b-db27bd465a38\ndb25f829-2ea3-44c4-bdab-e56c65600de3\n0c108351-ce46-4f8e-bd6e-1f46460a6a45\nd6948612-3c32-47e2-a17b-2aba3bbad602\nb6dc6a57-73c9-4609-855e-1f79a4f737c3\n5729ca8e-8e14-425d-a945-b10de68dd207\n64c26776-0bea-40c2-95cc-f5bafcf13a08\n44060075-19e2-4180-a4a3-2a57284e3127\n73d36532-8c94-4290-acf2-b14a64b6accd\ncbbdc2ea-68f7-4539-99fe-800330b65042\nfd85b403-0b27-40d2-84fa-a85b696d5dd7\n7bf724d2-0524-4958-89ff-1965787a441e\n4492916a-5077-45e8-9f39-93b8a74a8c8f\n8658eca8-2dd1-46ea-9031-7db255aed13b\nb7e1fc2b-3a11-40dd-b47b-f0b4fde0e257\n98e8f2ed-9f39-4ae2-b5f6-147a0d192fbd\nbf7c0aa8-dabf-4cbb-a267-5799a04e28a3\nfe64fd1e-f785-473b-ac63-d02525087076\n6bf5440f-cab5-4d21-bbf3-3c242fc238b4\n0031c400-d9cc-4f8d-830e-30de94119182\n45281d33-9407-408d-ba58-2eac0d0c9090\n66739886-7f93-49da-858e-cba551514917\ne5ece9da-0382-4377-9821-a5c99b6ac4ca\n3e630a87-c9fe-46ff-b4dc-cc4e5e6d9c63\n005e2c74-9faa-4663-903d-f1ef27a9f269\n9c53f552-60dd-473d-a5fe-3af5b8314a31\n3d847c10-588d-4d91-a252-013d855a9dd5\n4563fcbf-38b2-46a4-9a6f-16d25e1d202f\n6a9d7934-26c0-4bd5-b064-a085c8d31739\n7070fb2f-7470-4d8a-a304-a0aee1f783c2\n30159e4b-39b8-4594-9103-bb87db4aa3ac\nb982001d-e783-4ed0-84ec-069a5acee81f\n2e9aa52c-cf3d-4fe6-a457-2a1f18586670\n2bf436f8-b382-40c6-a0f3-68ed6db0925a\nebc75d99-3e34-4192-8ba1-ce284ebd3868\n797b953e-93b2-412b-9af3-50a1f1c4cad9\n6df400e6-f0c0-49bc-b478-424e7d7b9604\n4953a3bf-710d-4221-9d80-db0578f230ac\n882d7a21-472e-4cfe-a2ec-d0bbf2a8a349\ncbb3b42c-2733-4318-88ab-438eda5decd4\n35c6936e-5b90-4ea4-a309-fe8915c6b7c2\n5078fdea-5ca3-46a3-87c3-833380152005\n8444d436-eb61-4789-bcd2-83526834140f\n2eb6968d-141e-466d-95ac-a5e7b06d7cb2\n47c467c4-b09e-435c-8466-861dde99e16b\nc5a17766-45f4-4d0b-855b-82c3d00bb4d7\n61cc7055-d22c-4c03-969d-333c2767fb04\n540009e0-7204-4ad2-a1e4-966d419f3a6d\n6d615821-1168-42f2-87ee-ca6960acd909\n32f6e68f-25d9-46b1-b957-dfff5d5d49e2\nc37e5d71-420f-4878-828d-da77e3e7f92f\n07ab0a33-16a0-46ab-9e5a-0d37ed55b8f3\n698ab46d-ddae-4fe6-adb2-83cfb928ec27\n07e7b860-8b28-4bb7-b878-f01a2630fdd7\n1ec36318-af99-4ae4-89e0-fdc0afd304b1\n121d9798-c3bf-459a-8271-5b87cae5ec8f\n3ca79cdb-ce8d-42e8-9558-2ed3f141a4ab\n39f21b54-53d0-466d-a415-7f00c3cd83cd\na179491b-e8de-4ae9-bef6-5665d24eb34f\n033dbba7-36b8-4b12-adaa-d39d42767350\n3725f73a-eacb-47c0-908a-a88b132de55a\n8e08999f-a794-4007-8c31-8d797bd40fac\n267d653a-88ef-4178-981c-1ca705e59a16\n8311831e-4463-48be-82f2-de9d7231d66b\n805d6812-9b41-497d-a53d-7488caa88f8e\n4d3c7989-9cb3-415c-953e-6a852ec0260b\n87f000cc-1836-4f20-bb4d-43565e4d41de\n21c65037-729b-4135-a73c-a79a08020f4f\ncbdf0fde-620b-4eae-9ca4-334cdf523ccc\n69a32881-4fd0-4bec-b1cf-1c57b9aa2c40\n62b75b58-d4de-4035-8d03-60101324d0ae\n8870d72e-a15c-4e72-b056-a39d22616005\nd419a5c3-618c-4fd7-9fae-f41378da6696\n6663eb2e-e653-4de2-9694-75b9cbd449c7\na3d448f0-7dbc-42a9-83cd-e06464dc765d\na9c10616-42b6-4c94-ac1f-586bbe1daeb0\n33185955-75e7-4971-b5c3-687e7b585d74\n949567d1-31e8-4820-bab4-3bba04c567d6\ne5210d49-90b2-40a9-9b1e-3f6862c16431\n4a3853bc-9b0a-451f-b4ff-5f51b82c1890\n7b09efe0-fa47-4389-ad6a-ca65d76aef78\nf6e4071e-4901-4345-bf56-bc60f8d20bae\n18bfc37e-e53c-4a08-ab71-9b22f9b5c913\n53b34ea8-f29f-4ab7-85c9-34ccff713d83\n6d676b11-28ba-401c-80bd-ec7c5990915c\n72513de1-0c8e-4d7b-b368-6058f5967eb5\nf61b3ea9-565b-4c68-92dc-2521e25aa06c\ne371d2c7-4624-4821-a0a6-83fcde64f95d\nd0fd46ee-f136-4c39-a36a-ff9082d74df7\n9ce281cf-f147-4701-bd0b-bf3a71b61c1e\n84f40b2c-c2b7-41f5-9510-5fcbf24c2caa\naa9841e2-6c66-4692-8364-b70dba96ae95\n1e1b2463-8d89-4637-911f-2f2bff14b667\n01574075-2f51-406b-bb0b-be85fc509be7\nd222e8d2-14fd-4912-b4b1-1d5d5f936267\n2d6d3db0-0f06-45d2-974b-3157668b6127\ncc1d90ea-a703-4874-8aac-c4ee4a280c24\nc0d7f29d-657e-47d0-9c53-5a2057024953\n6df4dbad-4449-44aa-9594-e57542607657\n46335dde-ced4-4b99-855f-960ab41e8445\n73d07669-00b2-4251-a5bd-d7e444c86f8d\n8d187876-0850-4124-9e3a-3589b3fb70e3\nbbc78c80-a9ab-4692-8d66-edf2acd54880\n88de00c7-f274-4f28-97be-e214d03613ea\n60ba6c76-a37a-4e97-bd1c-cc7fed07b66c\n51ba5f02-634f-419e-b98b-00d7ac17ce79\nfc199304-2e3d-4115-89d6-0e06797598c9\n6261bacb-663a-47d1-b401-ec0c21d47e08\ncbef302d-b5fa-46b8-91a1-7365da5b6d5e\nadc9829b-f052-43b8-8dcc-f556b060b0fb\n05d58f6c-cc05-4d38-94aa-bbd96d3ec438\n21092393-a3d6-4822-98ec-7b95cf959414\n562d6044-4803-4f23-97af-5d47e38e750c\n2e815cf8-a37e-401b-aa19-63a5f7ee5c9f\n52899d55-ddfb-47a6-aabc-9f562ecc0626\n20950ae5-08e5-4379-bb83-3e166ed25629\nec32dc69-b4c5-4680-ac00-0bc59c8b3dba\n3f38843c-15f9-43ef-a85e-58cd201c03cd\nb98add67-ff1d-4c94-a02f-f0cff20e592f\nb9c2598b-d9ba-4037-80ec-37d27714f8e5\nc84ad317-fd1c-441a-bccb-c8de363e9c2c\n3c1b2140-4e80-41c6-bb68-d335903fb3c7\n0b262077-d811-4bb5-8acf-6b423bf07ecd\nf5863d59-7278-4775-8b78-d4be11d54d8b\nb8be416d-f3fa-4c6a-bcf6-6da20439faf1\nb494b618-baef-439e-9451-0f029160ecd7\na5921406-798d-412f-95ed-e7d3c9a6dff8\n258701bf-ba6e-4090-9771-64d7b2348bd5\nbfb1e401-63fb-4c9b-bac2-4ac49390a4b0\ncedde90f-bec8-4eab-b29b-dc690c9d38ef\n61af37d6-295a-4016-9267-5665aad21653\n645cbe00-a931-4f64-a528-b9a8546bcf3f\nf2434caa-0697-4f82-abd1-be61ef632718\na8896a1d-b45e-4491-b9db-bd6f714003e0\n28aaa152-067d-44a3-b268-ad8bfabe9024\n636ffaa8-011b-4018-ad35-db1c176d6845\ndbb29a9a-a802-492d-b3d5-388c8e3a6a49\n53d9e8d5-1e06-46b3-a94b-65f69697941f\na22370b2-86dd-4da7-81a7-4213694fddd1\n805f5a95-5e3e-4350-a4bd-26dec1bf6ad3\nd65cccca-05bb-4cc8-8317-9a7fa7b9772e\nc3646cd3-89cc-42d6-b5dc-7db6d1adf8ed\n5b4d17d9-9f0f-4b60-96c7-ce0a5ebfe520\n2ea2a86e-2991-421d-b413-80260d868d3f\n5d566d58-9241-4dc4-ad0e-4e3154d946d0\ndbd59daf-513a-4d71-8f25-6213b2e0088b\nfb6c6116-63b2-4c1e-9204-e6ae23250934\n703af17a-1a8f-453e-8bf1-fb0dd58ff002\n3950c5cc-6a8f-4c62-98dd-a7466f468373\n40918c3d-f1cd-4e59-a026-e370935dfd8a\n3334bbef-a13e-471d-adc5-adf6408a9451\nd7f20e1e-2044-4446-a029-3cc52b71c12a\n9f076952-1f7a-487e-baab-1e1547fb2825\n399e214a-4c1a-4feb-baa3-c50588d30db6\n8c8c3771-07f3-43bf-88a3-28de70bc1c4e\naf16e081-90fd-41a6-a98c-1b0f4575a41e\nabd029a7-fae9-4def-810d-013c7b1955c9\n0a4ed3dd-a796-44dd-898e-cfafb3153a30\n786b5f9d-203a-44cd-b7e8-34cd99c7d3ce\n753e39cb-925b-4552-a634-4417a638f1c7\nb2161ea5-0add-4183-a984-575c0ee08bf6\nb757e7af-2988-4541-947b-2367e90d4eb1\n12f9f73d-5a11-4523-9313-84df8c9c05bc\n7bdac492-3c32-432e-9427-a10f6afcdf85\n981c5d3b-0d18-49eb-a2f1-02e65e96a7b5\n6632c996-8331-485f-89fa-09f2473b81e3\n840b3159-40e9-4ae0-b296-28db7676b5fe\n1cd4e5b6-a19e-4cbb-ab15-100d72e15d1c\ne850dc22-9210-42f9-bc1c-16684f6eb961\nfe65320e-8b1a-40b2-81ee-9a6c9ab96ccb\n681d8da0-4b67-4f32-8dd3-6f1de34868b6\naf0c5fa2-a0be-44ff-bbfd-b801093d2d89\naed5d684-20c6-42da-b57b-8f85ddbaec85\nb7ca331b-fd92-47cf-a8d4-2c76bf2bd71a\n7c97e617-d271-45a3-a5fe-4a385ffd8364\n63d80b49-6410-4991-96d2-7ccdbba8cacd\nc01fa118-2848-4ef5-a138-40a3df1968e6\nf96a7a47-1879-445e-a88f-a9afd55d45a9\ncdfba2b3-f470-44a6-8f42-9cc99f00c4a6\n1780703c-3ca9-40f1-b237-dba37755af1a\na6ef3e82-f474-4dc3-91e8-bcd7c40fffde\nef564b78-9f01-4bc3-89e7-2a63f37b398f\n2a270606-c9bb-4692-a13b-0bff0e332bc5\n2040a1c0-790d-43a7-b786-24180d716cde\n760c6d19-1ba9-4c3f-8fc1-c4307cac3c8a\n9fd4f5a2-0d8c-4c1b-9a80-ddf049842ed7\n78dac4fb-1765-4008-9e27-09120186333b\n339452b6-5cb5-45c9-a729-5026b661220b\ncf627235-9328-443a-8e26-27da5fff885a\n64225dd6-8162-48ed-90dc-50caac31b004\n37b63a6d-a813-4b1a-85f3-3839aa08ea81\n66a642e8-13ce-4649-b443-bf9528c861e0\nf2f7ba17-f6fb-4cd1-8d34-5a026e701e84\n178280f8-e15a-4a4a-9869-e3eab3c13de1\n5b5322a2-c923-4171-96e0-c0a583ad7869\n42a3eabf-9edb-49e1-8d48-1c795641d147\n74b3a6db-2733-436c-a78b-f37117d8dfd8\n094b087b-e7d8-4a9b-b689-dcd1fafe71db\n577fef21-c18c-4f83-8f4f-e0b6dd050aa1\n2fd10552-060d-4db7-85fc-379f265e4992\ne5ee2e72-224a-49d7-8088-b050d414db48\nde24925c-31ba-44e1-8748-9b2097578aa7\ne8932b07-7f4f-4bb4-81ce-2730333eecad\n1d26481d-b452-48a4-9cae-9e606873b8c8\n19569ce1-b1bc-4efa-b21c-de428b0aa12d\n292c62ea-4fd5-4659-a6bf-eaeceb8c9aa0\n6dc3cdf1-9491-4057-8917-1311584e037e\n9c845fbc-f3af-42e3-8493-c9994d603c47\nb49ce245-c860-43b6-a5f8-ffb72ed4f598\nde3a36da-ae76-4b0f-8d4a-e4260ef849ce\n3d927913-315f-4984-8d76-f2bb4cd12f6c\nb54ac3a7-c38d-433f-a6ea-4ddad7f83814\n339861a5-d673-4433-9106-ba3a0beb4e8c\n57cef91c-8870-465d-98a1-6d4ad0554933\n5fb0999d-be6a-49fc-80ff-e5228d1950a8\ndd4e4c7c-abc3-4a8d-bcbc-d0e1c4652079\n91c1ef07-5dc8-4cfb-8a9b-382fa9d892a0\nacf616de-4677-4836-971c-669639fbb4de\n6161ddd1-da87-45bb-8aff-7283aa20d6ac\nfeb2859a-1d8f-411c-8c59-6d92cf04c50c\neeb7e517-32b0-4716-a9a3-87882a2f948a\n76cc25c2-dc56-4a3d-9893-80b944942122\n8ecb95a2-ae0a-4659-931c-3e935357cb36\nfebd00e3-712e-4027-a854-eefabf980e00\ncc997a42-5d27-4e30-9a6e-eee9bef475c5\n4f62db0b-b33b-4065-88fc-070bbf8f37a7\nbaed1145-3cb8-4d54-a0bf-c7a51dae38ba\n7004bf4a-592f-4db6-a75e-88861a30320d\ne2b37fc6-7da0-48b7-b01c-617efa42b03a\n939c37a0-477f-4392-b522-218ff547a3e5\nb64cf4f1-cac5-4336-9581-4d7df01c4755\n10fd67b7-d357-4c8b-bf0d-ef56dbc5ecca\n56b71932-c7a4-46ff-8f2e-c33acf20a15a\nba7f34f5-7e79-4691-b0e4-78c6a5e6ebec\n301b6fc7-9a0d-4a27-b951-602a3b49e9d7\n72f64054-8291-413e-881f-fca8c5d54554\n203c6250-d1dc-4b34-82fd-4fd5957acbf2\n8fde48dc-a2df-4522-8ebb-9d9a657bea74\n43f0e640-ae7a-4dbe-8001-14faea3c01a8\nc9dbf518-21f2-4b8d-9dad-8ef9ac35611b\n753832f8-0ded-47d3-ba53-0d4420cedcd1\n350a97c7-2cc9-4f98-ac22-1eef7b2bb269\nf0ef73fb-4c7e-4808-b3e3-659b71c77f6f\n2c5e6f14-682d-43ec-bd3a-48b0d897d0a1\nb37b98c1-f1d1-48b1-ab33-cab78d85acdd\n8dab686a-50a9-4397-9338-cd8e1e0554d7\n81f47b6c-6926-4204-a7cc-691acde17041\n0f51920d-c18b-434c-a5e1-5a1ad5437081\n39c45794-0f95-4b33-b765-7fd2704784b1\n366988d9-0df4-4ace-befe-56d20eda34ad\n62f190ad-da1d-4280-a9f2-8b8ba5861765\nf495b52b-2059-45bf-af41-1098e7dbc250\nf92fd44b-ed1e-4fe8-b45b-3838e556e556\n469956c6-e23e-4daa-ae19-9614314b8354\nd0f0e46d-a5bf-4e7b-a282-b43bd6de0602\na189dbf1-76dd-4196-b402-683c107615aa\n88b6a54e-4ab5-4109-8fc0-69db80516423\n551c5e1a-3c72-44b8-ae4f-a84b96f04a7b\nccf2378f-5885-480d-af2f-dc35336d4320\n15e2d084-e66c-4677-a997-f6b850a60dbd\n807f92c1-2726-4aa8-9840-074610114d22\nc4c8f8ea-3671-4da6-b18f-bac07ad105e1\n911dfe1d-1bfc-4698-b592-4d154ed829b5\ncd0a5520-6277-4ee5-9cca-c47d7c9a198a\n1c4355c1-de33-4029-be74-748f3d16754a\n84eb3169-24ff-4100-b267-176691074119\n0a6541fc-2700-40d7-a509-6832e6efea59\nbaccfd4d-4f60-499d-93c8-07ec27454ec0\n0ea9282a-c763-4ea2-9943-2b98aa0ca5d8\n0d799000-0553-4f1e-a1a3-02edcc8c8bae\n61b9e917-b1b6-4747-8211-9a4703b59b9f\n38c90a7b-adc8-45d0-b74a-a43c70158b43\nbbff4c1c-69e2-4931-8170-992a18311756\n2e0067b4-797c-4a87-9a44-fee0a1ae56af\n2bf66d12-208b-4015-af02-a0bdcbf00280\nc2598ca2-54fd-4346-9c01-f70f44d03be9\nf76cd8ad-1e4d-409c-8273-3257ac780778\na7f66675-d580-4405-8e27-249a358b6810\neec978b1-abc8-42c4-b1b3-ed3d57b662b5\n48438efd-cb24-4d35-9ec0-aa41f24fbee4\n8bc3ca6d-5288-452f-b4cc-dc9f01bcd80d\n10118177-6346-4b81-8695-82237a0b3627\ne2e21638-706d-4896-a2de-09db9b849bf6\n3f02541c-2962-4084-82c9-621aef4c47a5\nf38c153f-c8e0-4fe8-b484-4477a078c89b\nd076c45b-fa03-4225-83e7-de5fc6153500\nff1a6f5c-d287-4887-ae46-369aa5b401d3\n0207c936-271d-4e0b-8fb7-97732f87884c\n3be0d6c6-029f-4203-854a-fc2e3efeb244\nd00a6957-89f0-4c85-a2e0-dca0b87098db\n72625f1e-f9d3-4a05-85b8-1bc139ba5443\n663ed846-8781-4a5b-872e-05686780c733\n05d0f915-d192-446c-95d1-75891504ba6a\n2b9f4848-0ce7-402f-9ec6-eaf00c8dc4e2\ne6a7d2ac-c6d3-49c8-97e1-e76b534818ae\neeb952ca-3e5d-40c2-aeae-ac3d15ef5dc9\n99682771-b909-4936-a19f-9be2548056ec\nf7ce76ab-6b92-4eab-995f-ded61b46aa05\n6a8f1ab4-6043-44c6-a342-319d9b8ca3a9\n68f16221-59b2-4d6d-afe7-54ab49e235b7\nfe6103a4-090c-4a97-b017-c4e382e29852\n6c171ad6-db76-49ae-9702-47c45001be8d\nbfd4955b-8842-4d96-a8a3-1b76b5a318ad\n3aabe575-b6fb-41c0-9a87-ba14615da7a0\n4ba011c8-fdf1-4695-9968-b4e53b9985e2\n323790d0-3401-46b5-954d-9fa05f8bfb72\na14c5895-3151-47cc-aa91-54723ff57748\nc784a552-c3dd-4fa2-976e-d01221646ebd\nf20deb60-dc29-49b0-9f2b-238df183ff23\n41e04f97-b076-41c5-b1af-db1ade03eb21\nb40fa41c-0604-4a07-9e09-cd7edf901ebb\n5353faf9-a70d-4706-b10b-cbecb68dbf69\n52975d85-2048-4be7-81a8-9a492cf51789\n5bb00385-339c-4785-ad5b-e5ee1bd982cd\n353115a3-e5b1-4af8-b5a8-53d110eda182\n347424d1-046e-4406-9177-0d433eb4b0a6\n031462dc-b6b4-4de2-93e9-9c2679ba79d9\nd6446229-1220-44bc-99fa-9c24b6eda752\n3b0c1970-b6e7-4767-8b7b-b862f330a2a5\nd4866262-8475-439b-b6b6-6f0c95342c38\n0f32f7fd-4652-4403-826b-c95f577b2de3\nc8d6fd1f-dcdb-4473-999b-eeea7e5ea3d1\n205d95a6-73ff-40fb-9291-b5a7ec136ac9\nebdf55cf-c622-42b9-b535-7da01232c5dd\n53f56cee-b324-4791-820f-1931794921f1\nbae36a6d-33c3-4aa8-addf-d4aeecc3e72b\n747f00cb-be18-4e07-821c-7d4a98e93aa1\nd29d60df-c771-4a11-8623-abde380666ea\n3496b38c-690f-4883-b075-79c535522805\ne5f63813-39f8-40ad-960f-d00bc30c1cdb\n3005ed5c-8bfa-412a-84aa-9082140321e6\na382bfdb-c772-4c2b-8060-8a977ce7f163\n16f76570-8c10-4b50-a308-d511b244c796\nae51d45a-559b-48ff-91ce-5654cfbb7183\n5009574d-16aa-4c3f-aa54-4b4e5f237dca\na64c79c4-53a7-4b88-aa09-5ada8f89e2da\nd6ae013c-9ef9-4f93-972e-5af3cf46a838\n8fff340f-5b8c-4310-a546-a69084a1c68b\ndb864381-49d7-4251-ab5a-1715c878f3ca\n979266ff-ef41-4221-b8c5-ee14a4ec3795\n0c73b529-e909-41e3-9876-a92b835e5cc2\nfe8d2d71-67e1-49fc-b6fd-010bc1321295\nbdfe503b-9d25-4e80-a98a-6380b4359b61\n37765690-2ac3-4d2b-a6f4-acb6bf1ca58c\nba432b51-465b-46ad-97d9-5a81d3c58f03\n04c0b0e6-cb3d-4e12-b62f-cd866e8fd400\ne2e7abd4-6c08-4284-8f5d-8fe114cee6d4\n99f0acc4-b503-4802-88d2-b5f293ee8865\n68cff6b0-a6ab-4cbb-94ee-1b9daba26a2a\n8fe32725-f83e-48aa-8e25-471bfb3db312\n5b470fb3-b3d9-4556-9f75-48dacc749c31\nc3012d31-22dc-439c-b8ef-03bd874220b1\ne7d16926-182a-4773-97df-bc373ccea6c5\n11036556-f88b-4ff7-90e9-22d91247c093\nada35cd0-f56f-4159-93d5-4815c7c8a94c\nafab4b11-207b-4595-9008-c2539a21adf7\ne3115d62-0398-41ca-9bff-8e5375fa014c\nc3cdbbc2-6c2c-4398-8098-9253be50b653\nce2e4999-e809-49a6-8f14-d3c67c35dae9\nb92c427e-0c1c-4486-a899-179c03ee2af8\n4788f9e5-4923-4747-baf7-55a54af88531\n5c4163e9-042f-41f4-8812-38c35030b943\n046920a2-d57a-4e38-864b-268b2af01500\n9e17e6ff-c093-4b41-ac6e-a3c936545fb3\n75b1be83-8476-4b4e-9c86-e82c69562904\nd79942e1-39a3-43af-901b-56da31458359\n311be7bf-47e0-48d5-98d4-1020dc96b6cb\n370642aa-a63f-4051-a9e7-4b3de5867f69\n144af23c-c48d-40f3-ad94-ddac57ba4606\nd8a0b840-c75f-499f-8a31-281b865968bd\n2bed295d-db7e-4dd2-8d0f-cb30e9c022ef\nfc61ebeb-78e0-444c-bacf-e8317b137b7f\nfc16c64f-3239-4d19-a8eb-b326600e22e7\n934a4dec-085e-4dba-b39d-ed7f356a1513\n49c673de-aceb-4103-9621-9766f54eb42e\n584f244a-f4cf-4f1e-a06d-1186eee6dbce\n792dc629-8515-4ae3-94d6-1d119ef8d7f1\nc72959af-7e7c-4ea9-8d85-e0d5ea2a4fe3\n06c59bb2-519a-4fa8-94f2-93df25266e52\n5b7642d5-abdf-419a-9c95-c1e504476297\nb9bd8aa8-52bb-4a2f-b40c-4a7db0b23968\n2c47aeb6-3abd-4f7a-ba5f-d3b472fb4e93\n9ed212af-a684-4383-a2e5-d1f66e888b29\nf2739190-b057-496d-ba30-9207d9ea8b12\n7679c393-4bb6-44e7-a183-466d3041fceb\n87013fff-607f-4eb0-858e-675dc0c4436f\n990dba81-1aba-4d11-8736-498d50db496f\n56fa70c7-cbc3-41e9-822a-bf48cac54da4\n530e51b8-286e-4e50-8550-6ea05e07b770\ne405e7ce-861b-4c4f-a978-7325fb59e5a3\nf75263cf-26ef-4e23-9e2c-67cd243916b9\n3adfc232-7d8c-4807-9512-b96f4a11217c\n17feaf05-f319-4ea5-905f-5c08b7083bd3\n3691486f-7c48-490a-8bb1-e5d4cd2dd516\n00db1ae1-bbd4-444a-972a-38cfae10111d\nb0742d95-725e-4c05-b826-a994b0cf45fd\n0cbbe0a3-a092-4b0e-8c8d-ca991dc3aa47\nbdbe15e5-b610-4cd5-8fb5-2bae0d3c8b79\n53029ba0-ecba-4b8a-9982-85735babd79b\n69d70f54-a1ad-44d3-9056-d3cd14d9fef4\n1032669e-e697-4186-919a-e17b76e6b353\ncd2fd634-d9b0-41a4-b705-3a9bbce990e8\n4ca4a4a2-dd05-4df2-b9f7-a3c418f69426\n5193aeed-72c2-4460-b577-0034dbe34fdd\nd01f8c66-12e4-4a2e-b13a-b51cdfb790a3\n296bd3eb-71c2-4bc5-9305-d2150cca7e94\n78012ec1-0daf-4ca0-9eb6-4d2bccc1c3d0\n4aeee22c-0b66-4d6d-a13c-554ccbe3522d\n412b9d80-e803-4223-b16f-b7c25107e74e\n0db721c3-bbb3-44af-a04e-c4e353aaf578\n76ee861b-dee1-486c-8086-5bc4d9cfaf43\n357d3de3-7ce9-4131-92ad-46dbd9685ab7\nc12edd2e-28b7-4304-be24-d3e8a4ca00b0\ne57974d9-92ab-4781-868d-cef982d600dc\n7892a38b-0a3b-488b-bae5-f88c72b1e009\n2d4008c5-5496-4d7d-8277-84bfaeef205c\nc8920008-aa55-4118-bbea-327a757be12d\n95893e0e-aee2-4933-84f2-65d13aa16f5e\nc4815f47-8e29-4c13-bdc2-55b56aa60b3a\nc72149af-d0b5-4c13-908e-a156ea7da3bc\nf0d05b69-1164-41e5-aefb-075c30f6b605\n52fa9482-274a-4a27-ba7b-c3670957b5dd\n38b534ab-3cda-429e-a695-b5c1a988d19b\n081068db-f819-48db-a68a-9be65be51216\n84da7b76-ab0e-4b8d-9560-48d9339fee19\n615884b3-9f9a-4db3-a39c-daa0426ca076\ne0777b3d-6f0a-429c-9efc-cb052f199ca1\n367a8efb-3900-4e17-bd27-3684ed47441f\nd9c11021-898a-4b6f-9f6e-6abd6baf647f\n832495e6-e969-49e7-854a-af02fd3bc03f\n3bd10f58-8ab3-43a1-8175-08c1efb6419e\n21f4bdc9-f9ec-4a85-8a56-81e25a96b193\nb1b13920-4952-414b-b72b-8349b8f231d2\na6d5793b-d6d2-4c15-9140-e26af90a7005\nd0e78051-a677-4484-bdc5-0777507c4c8e\nfa79e4bf-17e3-4d03-b519-bc54240c4ab5\n740ddc8c-a569-47e6-8459-c4b51784e02d\n464b8ba3-86d8-4863-ac5f-81fac3d72997\nbdba93a2-557c-4417-aacd-1ed34ddcb244\n4619ac60-78a1-4a23-9b99-7edc2fa80a0e\n02813f41-456a-48f2-a48a-85b6b72ac2f9\n36fab2bc-90fe-4eb1-bcc2-c235e8bbc372\ndef024ea-5728-4ec1-8b1e-411fe0b669a7\nbbfbdfae-4bdc-42bd-9c1e-8f0d7ea54bbe\ne68965b6-2142-4ca1-b21f-14bb6e97ed22\nb29b8f64-c911-4588-a48e-8a4ebffcff6f\n5eb8fdab-d173-4331-8b3d-5678eed2d978\n07060bbb-f25c-4952-9b7d-6d5239d54f35\n2aa9964b-5a23-4f84-b0ac-09d3eb1f4f51\n4eacbe42-fe93-4a5a-99ff-528fbda7c27f\nd4ccf78f-cf61-43e1-b31e-84bce58cff8a\n856a2548-565c-4130-a0bd-d6c1fd421c29\n2080d693-0e34-4aef-8060-dd3db48463af\nc8a318cc-61fb-45b0-8dc5-16da9506d23c\n6b433e29-afde-4c57-8468-baa1da7b1e15\n59380fb9-67ea-4173-abc1-8d554544395a\n821d34d3-f3fd-4c41-9ef5-3810948dce8e\n57e477ec-3fc9-481f-b6a7-d0e6c64e1b6f\nae4e9607-53f3-4c86-9802-eac00093482c\n7f2d5d91-c81b-4024-81a0-a811beaf2fc0\n2ac741f9-0286-4bd1-8a81-c964bc614253\n8eeccdeb-7ef3-4fb3-bfa6-b88dea056b4d\na9d98b53-526a-4840-9b64-21c3613ec615\na17850c7-9879-4a80-8ebb-78647982e297\n512b1e51-9ef8-4f0d-a338-936450579abc\nb651c73e-8534-49ca-bcf5-6184b1b46ce8\nbf2520d0-1006-4723-a14a-2bae5823f9d0\n22914a0f-d46c-448d-a1fc-05e4d4d6111e\n9ff2f498-7310-44af-ab24-23284f0fcd73\n25466735-d99f-4398-8e6e-b609015ca85b\nb8fc8321-5e9c-492c-b7de-df5d1047a679\ne8d92a10-2a1e-4050-880e-8b237f6489e2\n52ed989c-aed5-4a6e-b594-94eedb55c62e\n08fd6c95-64d3-40ba-819a-0dd130c5e39d\nba2b828e-44e3-43a9-89ff-3c2849120953\nc97cb7d3-3c40-4fa9-912d-adab3025338e\n2a6e3f40-1442-4770-9634-611063b9b69c\nea65c604-57cf-41eb-8b98-0f8563f9cfaf\n99423c99-5a72-4e76-9d64-b254edaba7aa\n8668eb97-ca44-4ae7-b12a-962fc6f659bb\na35ec7cc-c783-4673-a878-b17570719f0f\nd5f5cbc7-1c4e-4e0e-8fc8-cee7cd478f6c\n4931cb40-2806-4f94-9df2-f87b8345e802\n86db508b-a5a4-433d-99b8-cf4998159544\n216e74c0-12da-482e-832c-636af911c9ca\n4fdeebc2-8580-444c-b893-0041e564a3b9\n2050aa52-1857-4356-9633-6ffe6e8fab57\n37f35693-a101-41e8-bc3b-6b6d1ca903df\n86893693-1dda-487f-9694-a8fb0a7e5f22\n9bc49921-8e09-47d3-80c8-48562e82ba47\n17cd2684-0689-4c8d-8128-d448cd850bb3\n45cb00d5-dded-4fe8-ab35-015d87db02eb\ne5c330c0-cd0e-4f80-a0ad-eb7b7050bf94\n1e305ea8-3813-487f-9270-6381ae8db874\nbe7f9007-6b6b-47ce-b454-3d7c7543fa4c\ncef266b1-21a8-4345-8a3c-cd14efb5fec7\n0c928885-9708-46db-b90a-5dfc58c369c8\nbacea4dd-76ef-4b91-9321-8e68de37ebae\n1247c914-dd70-4330-bdf7-4caab631f4b9\n84475693-5480-4d9d-9147-dbf4e7f5ea1f\nb0b6c9bd-de4f-4bdd-91ef-4b53bb8e344a\n5a937fe1-3e07-4a07-82c2-31794067f2c8\nab09ca2f-4b21-49ac-9c98-818e91868d82\n9baa4470-8d81-4421-8207-268a32dc76fb\ndbd51a58-0913-4f59-9de8-5dc1dc65b5a2\n2aa2924d-ece5-40d4-815b-ffc6b9449802\n526e440b-0dcb-4502-8b68-de088d0498aa\n1fcec2a1-a996-4b6c-bfd4-b81d545d4582\nf28a1d1c-d6f0-47a5-9c9d-1f1f46337ad9\n63edc5a3-7346-47c7-ab61-64ed3be673ad\ndf1eb95d-483e-4ce7-aa84-2b93b98f2396\nc0bd73d6-46c2-4527-8ff2-cb80893e2a27\n02794e2e-f843-45b2-8957-a34a2221109b\neada1f1a-ef19-4619-9fb2-676feaece9fd\nc4f19af2-db8e-4724-b0a8-6751f8342edb\n35bade01-f519-4666-b4e5-8d1e75177480\ne1551c5d-6fa2-44f2-8913-4ff2383374f2\n02c41375-a314-4b15-aade-4c8662c41c7f\nb721d97d-6a79-4d8a-8550-b229cd6568f5\n720a5f5a-7802-45c2-9bbc-7ea49dd08f78\n816ac15e-1158-49a4-be48-65450d071a28\n3fbb88de-27c2-4c46-affe-31ed08c1ebae\n64b2e871-39ad-4a70-ae2c-66b222dc8bcc\nfa6ec603-ddc1-49b3-9c40-b9105d9f4a00\n93049ac5-a974-4a99-844b-4fc6671a5735\n46d87c0e-4ace-47b0-8f2d-924d87bdc1e1\n773295fc-fa3f-4d10-b700-26c314344d5a\n2345e746-34f3-4387-b43f-ada18411ae2e\n4770f8c1-0457-45b7-8eca-a9d10b99cf2e\nc12db9d9-5a59-4f43-8408-d66779cd1dd3\n143e1730-73ca-4a66-8929-95fa2e44dfe6\n38e5e6d8-5514-4cf4-a7cd-a2ed3422cc8d\nd8ae94a1-683b-4ed3-ae7d-8b27c5ee3677\n706ff7cb-1178-4951-9ead-c6fd4b72d562\n75cfa6d3-48c2-4d4c-ae98-a7f2848c8899\nf2d360c2-0de1-47b1-963b-1a5354f3fd7e\n890a72c9-7325-416b-aec7-49cbfb8235ec\n6beea003-4a6a-4520-847a-a660e19c3ef0\n7fbc797a-843c-4fd0-a40b-056e9da184ad\n2994ec64-a14b-4304-a695-5f6af8dd6411\n0fd999c6-45a3-426b-a644-ae712837df39\na60e2599-5e0b-491b-bc86-1b1d8adba14b\ne5afd6cd-b787-4c58-bfb9-fb2f93994022\naa0ac9db-5b22-4f98-8112-d7e3ca045b9b\nc2820409-2d61-4bbc-9d9e-05db867125cc\n6b921c0b-13a6-41dd-ae03-ef80bab8a008\n23256ccf-6cfa-42de-aed1-08a3ed8c92a5\ne6ddfe99-bd33-456e-ad31-a7911b379afc\n4668ba72-4fb1-4441-81b4-3b1bb6c66fcb\n6b5a945b-0b84-4770-b9aa-d51c812acd04\n041f9641-3988-4cef-89f8-c70ae194d5e9\n23a875d4-663d-4b5d-9a86-863e29482ca8\nd00ff903-8995-48ab-b6b7-59710b7b24d7\n72af3228-6eaa-4de8-9709-0c99ed5ebc9b\na4330eb9-b17d-42cd-af27-8c72e560dffe\nb66a22cc-c1bf-4099-a8c2-fa907a8437e0\naf0da2d2-aa12-4b09-8258-8b06e9b5cc73\n430eebbc-907e-4958-b6e7-1935f685fe17\ne03a9f2c-902a-4746-b9c1-a642d870361e\n6318a246-5b7e-411f-bd70-593329508d80\n349a197d-c663-4c73-9dae-44a165418531\nd414219e-18a3-46ca-b44c-994b05463aab\n67459a08-8bbe-4306-8911-68df1c767b37\n314338eb-fd1d-45a3-b041-eba9aeb59331\n62ac7de8-451f-4774-b5df-8c8ef39940d6\n1c137b35-5ee9-46fc-a917-3312cdf60bc0\ne6e41400-4c49-4e15-bc01-2009414bcbd5\nb209f55d-7666-4a22-a5e9-66db99962432\n26b49e1c-4018-478c-80dc-e0f887f3e768\nf8f08815-6ed3-4c77-95a0-05c0b0e06c9d\nc0655977-b9cf-4271-bc9d-458ebd9c2aa6\n0d9410a3-1134-4b02-9400-fd36531e67f6\ne0caa803-5752-48b0-a35f-4fc406afc4e3\nb54c7fee-5ccc-42c6-ac26-996776e74da3\nfaa95795-0cd4-48c0-a08d-b9bae7d4d404\n124c1920-57a0-451d-805d-25bc8e8de60c\nb9d3bcf2-9152-4b11-b534-28439ade6273\n739b93ea-5cfb-4c91-98cd-f9677ee961ee\n898fa70c-c7ad-4c99-990b-a7176e417535\nd9c60d32-e875-401e-a903-f5e15a615b32\n674869ee-92fd-426a-b1e0-f5fb69ea5bb5\n333c287f-3e09-46f3-b050-b5c1a92b1a94\n913c058f-2c7e-4cb6-a75c-42ce54a180b9\n45fa9916-b3c1-4c26-bd78-4bd1e57d1292\nbd9922c2-4c5a-45b8-9873-f4ee239567b5\n4b3d6a61-b2b0-4121-898b-6ca1140d833b\nfc9f02b6-0990-44ab-8500-02f2da9abdd6\nd9fb558e-4242-4f1a-aba7-f4963772874f\n44addf72-4139-4bff-bbc1-22f7c21ac7a6\n1fdbe22a-b626-4428-bb9a-76740938f759\n7c58d0d7-8649-418f-b0ae-16fa0d22c54f\n9babb97e-8b15-4180-99d5-3124ddd522fc\nc1f96fca-ee2d-4b9b-890e-0b6bd74c7ce5\n74053827-8046-4541-9594-9ff9a48bdb93\n83f9d74b-3250-4813-8eb0-a1a7d1164715\n01dd24bf-e614-4a45-9387-84188efa4263\n95889205-324d-417c-8db5-56c9db3099a5\n25dac3c8-9ffa-4e9f-ac36-185f645c53ca\n00405602-2fbd-41a2-9c49-7f353d49077b\n715b2ce1-0a88-4599-89b1-ac1bc68e59b6\n8342e9e9-c633-4cf0-902a-a7224b2d017b\nd7c3ad0e-4ec8-4fdf-a2fc-e86255983540\nf99b6251-664a-44ca-a11c-7c8dee48ce4b\nad3b49f8-e201-49c9-8005-1217b5325051\n69fe1104-3c07-46fc-bf1a-8f08d21b0845\nbd8ba4b1-f950-4e9a-a50d-44a1716a00a3\nabc11875-a5af-4dde-8273-c0d5fb7287c7\nc2fee948-0210-4b5e-b619-9c54934cce7d\ne337c9c6-a1a9-476d-8a05-59106581bbd2\ne0a96a10-3bb1-4e1a-95ce-781193943c97\n388c2239-5cdd-47c9-8d93-bb6014bbda5c\n2347c279-8fa5-4791-8eeb-cf0f41bbe0b5\n72475f5c-7e7a-41b5-87ea-e79e3c03352e\n15c46ecc-6b7f-4371-91a6-1c7b04f64978\n933cd62e-c5a1-477f-9ff5-030dd12eddac\n1cd9a75a-a37c-4004-a41c-3020576d0784\n4407c0f8-5371-46f9-aa98-490da2b798b8\n6ce6e14d-08b9-4982-a0e7-81cba568370d\nc112b4de-703a-4da4-9282-09596f6e4408\nb5f44d31-14ed-449b-a902-652b9afc2470\nb572b95d-1438-43c1-ab84-00575c7a267d\n4648e0b8-7c5f-49e5-8f28-77e2e8c69f42\na680b9da-b7b1-4ebc-8c95-9848fbf31de6\n3d8bff21-4f1b-4704-a576-6846f5320b36\nab385b93-7755-49ac-a2eb-22cad8cc4673\nbc81bcd9-81bc-41e7-ae97-98be75f85c8d\nd532af2c-52c9-4a2c-8ae2-8c95f05454fc\n8f2c0182-3bbe-46ff-964a-323826041bb6\n3e4c50ea-dde1-4a48-a283-e9e493cdc68f\nbf562fd6-4e13-45ab-88dd-ce74b638748a\n01e06ab5-f8eb-49cf-9c2d-34dd6ce086d5\ncd4fcab1-1c30-4799-9b12-f140f6b73d0f\n002dcdd6-6867-4df7-b466-a23fc0041bdb\n6d1c7070-d8ec-409c-8e28-03cd954cc17c\na29990e7-52df-4788-889f-20252fbd8d37\n7f9a670e-26f9-481c-b99b-aece6b856b34\n5cbcdb69-1636-4f72-8649-98cb1491de5b\ne251d0aa-7e98-48a6-898b-cab901c60f9a\n328bb3d3-a4de-4804-a078-f17d678baa06\n62f8ce7c-e66a-49c8-acc8-cc22dac9cedb\n5a0a4e6d-99c1-48fa-8bb9-d42a7bec7a24\ne00e8846-ec5f-4574-86f4-f603fb86b5b1\n1902b563-2039-402d-8f6e-5565b2a87504\n30494061-cb19-4186-83e5-b8961bb28b73\n03b09e20-85bf-46a2-ad2a-1d7f9d8f8395\nc04c301f-7205-40bd-a19d-d73740983999\n62400e5c-f5dd-4d95-a32c-424c9711a253\na443b647-81f1-4792-ba31-58d41c41bf58\n3c34b208-4acf-433e-8daf-92518f15d39d\n2e8c1d71-8f57-4ec9-acb8-00b452b8025c\n6dd22d7e-f25e-471c-b04f-5dfcb06f4531\nf73c096e-fe7e-4c56-8e79-ad03d9fa5b61\n8a282c53-fd4b-4705-afc1-992e3782235d\ne6ae438d-8147-4c9e-b749-b88ec875bdbd\n1fcb9cba-8a2d-43ef-97cd-1df018e6dd89\n5664adf8-57cb-4ceb-b0c3-4b8f47c96a20\ncd7c777d-d1d0-46e6-ad89-7c70a75ee54f\n06118ad7-0754-498b-b9bd-433a2ae011a2\n760866c6-054a-41d8-9cb2-63629ed2ee07\n1394f3eb-75b0-48c5-a603-568abe662761\n8dfab325-8fec-41ac-bcf3-b591a58f743a\nfda7c4fb-b9b3-4f52-a99d-f9f4c9907f2b\n0e621a9f-d6ce-4a1c-b973-65a657d4226a\n98d8ee35-f7f6-4820-9d82-fd1645dad6d8\n35bb6711-ecb4-476e-8801-f5d9daf7f711\n7610abe4-2648-4004-8365-f5c6564a9c70\nace97236-406e-42f9-9ed1-207027ffa41f\n4aff0e4e-ec23-4d14-adf3-f5b24ef9a92e\n3a863604-5467-4f35-a46f-34dfda12d8e5\n9c0ade72-999a-4576-b4f9-ca091fafe49c\n1bcd41e4-6ac1-4daf-a06d-00a10b654755\n1bc1835b-7e09-47b0-b719-2f5148da686d\n8f3791ee-3bc8-441f-afbe-ce9b25c84450\nec8023cb-91c4-4ece-84d0-0cc3fb44e955\n0550396c-0674-4daa-b1ff-7fbe307102fe\n333e7856-2a88-410f-b873-ca1d4ca8df75\nc49f34c6-3997-495a-b49d-63a6235d8229\n04a493c4-eec5-4a07-84d8-000d0edbcc68\n4c6de44c-b079-4928-adce-ae31e5093380\n3f346b4c-1e56-41b5-8cbf-084f98cf7098\n108f21f5-5906-4550-b128-2d4c9e90beeb\nb2280c0b-ce0e-420d-8b20-cade7791cfbc\ne2bab001-a982-44f3-8314-3c0be36894a1\n52ec76fd-4e32-4f87-8a9f-f5459d6f450c\n94f32c40-7426-4ed5-a3ab-7f17024d6b47\n76ad83ed-9902-4657-b386-17481b8806e7\n8982c80c-6938-476c-9fcd-b6e1af6350d1\n608b5b8c-8112-40aa-9959-d29cf927c92a\nf9f848ea-3a44-4ef0-b271-c87bbc3266a9\nb39cb993-758a-498a-9c09-3b35ab71d512\n914897de-cb7b-4062-8d1c-f50a169189c0\n5bdebee5-d1fe-493f-b4a0-c088d2165aca\n11fd9c53-4cb3-4260-bcb4-7c5a14e0b150\n9b644d34-31de-4c49-9308-50b43377b685\nded70983-4641-4e8f-8c5a-5fedd2ae2ca4\n4d11d6e9-7f1d-46f8-ae27-47df9a5a14ff\n74ba1b21-19fa-4af5-b407-0cd4c8fb2c75\n4b7405e4-eec4-4983-bbd2-c3ae62731660\nb1c759f6-2394-471d-89a8-1855065c996e\n86fbf68c-1bf9-4e7b-89bd-2a4da32a72da\n8a66e6ec-3abf-451b-b52e-ccd772220dff\ne22a7abf-5804-4bd2-b790-5609f55f9c62\n93a553c4-172d-496a-ab94-c3972ebe4056\n2252aef7-41b6-4977-ac93-e84fd3132a53\n8814e481-ebad-47ec-be0a-ced4d42b71d1\nbcf5cdc5-5d7d-429d-a5f1-bb89078b46ab\n6f050d34-3476-4592-a78a-a57813a18d96\n854c7bb3-da6f-473b-8d50-cf5df965d76b\nfaa4182f-84f3-4ca3-bf30-8679da1cc83b\n2cefd1ab-02be-45e8-83fc-a987bf53f45d\n2e3ff6c9-e7bb-4914-ad77-fc3cb1c4c5dc\ne32c96e0-3576-4c32-a216-8c0cfe65cd72\n29126198-8b58-44d8-bb6d-e711274735d8\nef8709b6-9fce-4045-ae3b-8dcc041eab8a\n4c4ff374-9be2-4958-a17f-256f063aa0d5\n3c35eb88-de2c-45ad-ade1-bf37ded58f01\na2d47721-9245-4bd0-a1e5-c663dd48024f\na484a7ba-ae94-46f7-b987-df932444b824\n72bfba4d-66bc-4918-9b95-efcc49992c33\nacabe8a7-4c9f-4565-bf45-4f5245991373\n40549f0b-0927-4dcc-8424-63939bb6667c\n1276a735-24e7-4af0-823a-c37c0f17545b\n25652838-c66d-42c6-acf6-e6a73f7cff0c\n808c052a-f477-4b96-8fad-9f6bd647dda1\nb3207af8-4a5e-4c26-94cc-6c7bfeef6d01\nc7da9a7e-7cf3-40fa-858a-02e6cc7f6cac\n91b410b6-ee47-42de-bea1-55d39e38839d\n408474e2-f0dc-4122-bf8f-b670b6d228ab\n47bbd2eb-73cf-479c-9197-235745c691b4\n4bae227b-ab3b-41af-bd65-0fe7c2213f14\n5bed1e2a-0862-4fdd-8837-be53058b0558\nd571ff63-651a-40ae-87e0-1132222ae10d\n1e980654-ead0-4997-ab70-660cc095f12e\nb0ab6894-3f67-4b12-831c-23e0615456aa\ne7f43532-8f20-4712-bf4e-16f2ac9e569c\nf5872ff3-229d-4fa3-a473-6cfdb4194184\nc79f035f-9483-4b6a-afbb-a57569e0f14d\n55f11736-50b1-4d3b-af04-ecb54a74623e\n8c3e1111-11fd-434e-b1b1-6b224509fc64\nf9ba8a72-001b-486d-adb8-7f9d41341b30\n9280a869-d161-4754-9191-52f7d298d195\nbe28fadc-0d53-42e6-b5ae-46b0dac97ea3\n15da6dde-1c57-4d29-928d-9dd1c4ec06c5\n407e022b-5f88-4315-a012-757f92e70e76\ndb3b15cf-7955-46f9-9b24-322796a80a46\n986a429a-32ba-46fe-8a0f-2f2ea85d71a8\nf877e4df-6eb7-45df-95fc-320e7fbf6999\nb9edea31-4660-42a7-b43b-6e524abe3d49\n6ba2a3fc-f2ba-45ad-a321-32c100802159\n776c06b5-cce3-4dd6-a613-775149bd07d1\nda2b5611-4d95-48f1-92ee-d8e68c1315dd\n1796746b-3d1d-494a-9081-ade40971073c\n9b478987-4077-49e4-8117-d1b1d3774083\n08774434-f8af-4ed7-9e0f-2c9fa15a0ad7\nf07dec56-a9d8-4cc7-ae57-dd552418c43d\nfd984da6-4fc7-4b6d-a8ad-df0bf64c11e7\n6e736bee-e2bf-4add-86a0-d8847f56a8bb\n69c9ab1f-4c4a-4e0b-89ff-0be288f251cb\n4d94fd25-967d-4374-8a20-ad10811402ed\n78b75977-3e76-4a27-a21a-ae868809599b\n0480e38b-115e-4b01-b314-c3ba63eb1dd9\nb229baa4-94cd-456e-ba0b-7da3cb81635c\nfef36b0b-7b45-407b-b463-7fc30f46a4f5\nae792164-d267-442f-bcc8-df9f81d0b8e3\n32a3e291-3f60-41d9-96eb-eb23b1a5f772\nef7f6d0a-c4e1-4dbb-948f-8336e98a54b8\nb986d6c8-26eb-485b-8845-4b7ef6bb5a6a\nf9b0629a-9faf-45b6-8620-ffec17c96508\n488cbfe9-0a99-4fc7-837f-c6203e32e6d1\na577c65d-9225-4a96-b68f-0f18f194a2d0\n8e2ee4e9-b9ee-405a-a018-dbe002b6c397\n9d4c78d3-754c-4277-84b1-df3802779e6b\nec75c0a4-afb1-4d5a-9f02-2030f0bcb242\n72f7054d-ebda-43a5-924e-01fafcbd6c31\nb7faecc6-b6a5-4cf2-b306-fd1d8460c174\n403cb7fd-7468-460e-a10e-61fd475fb576\n9d33129b-4be4-45a7-817a-a80fb74d9e7c\n20fe6dfa-294f-403c-92de-8ba853f32894\n5d7ceb0f-c125-40fa-a383-12d660a070f6\n79b00114-4ded-45dc-88c0-312d095638d2\n9dabf86d-de3f-4c40-9947-5d7d899f2f47\n80403603-ff1a-4693-9b19-a19cf04963b5\n25736c00-6357-4c0e-b912-80fe8f8d6457\na2233514-8cef-4237-acbf-1a1e9acdef89\n957202a3-c7e6-4294-a7bf-5fc2ad3e9e0b\n565b6c35-f8b4-41a1-a382-31653c4a3d64\ne244b613-7294-4735-ab34-6968b7a75a76\nc09998bc-82f1-445a-b648-07f7b4f563b6\nffa4ebd5-4179-451e-b775-57a43eac8706\n4d43ed87-54d7-4100-bf37-2a6790c45cca\ne3e8d775-e922-4023-a113-3f71413a3fb6\n77df3ef1-65cd-4738-ade4-b25e5c23f06e\n272bcdf0-f45c-48d5-ac15-6efad6e976ea\nba2d5aab-c6aa-41d8-9e93-d50c2d118957\ncef0a9a3-bde0-4b24-a9cb-676717e825c7\n9a27adb1-aba7-4efa-af7b-fa8e3fd6dc35\n8e78bf4f-d478-4c0f-8482-5ee5dbb0d168\nd804b1df-9830-4c1d-a255-4d0ada4b2eea\nb82d1187-c749-4f30-97a4-f2febbbd196b\n7cdc0b81-0eb5-4e71-a357-6934693dfb79\n82ca3cd3-f230-4e6f-85ee-716d82947286\na27eca67-121e-4a92-b3fc-fd9d9d17b31a\nea835634-733c-4514-bea5-e902042e7f3e\nb3e8f92d-7a12-45e3-bad5-93adeda1cbc1\nc9d4c26b-f848-4c26-a61f-9bc0806e5301\n93162b21-555a-4e31-a3f7-0a233318102e\n02dbc4ba-a1d7-4c9d-ac0b-4ea0c3d77cfb\nd1f302e7-f247-44b2-afe4-41011431657c\n87a715be-b32a-45cb-af82-5605973ecdfa\ncb5e6366-e57e-4187-b508-aa719c90c733\n990597bd-3f2b-47c4-9cda-a9ab60216510\na1beb6c4-2ad6-48c4-97c7-f35fbdfd7e0e\n3ae52ed8-2cd1-49d3-8a68-7b763f807660\n0ac8f7cc-66ef-4a28-8fb9-61f5a1f02f1c\nc26a54a5-dfa1-4040-8ab3-010bad49b567\n63893356-70eb-4af4-b3cb-5c8feceed173\nec4ef356-92d9-4d3a-a316-43ef6d8f5339\nb726c6c1-0bb3-4295-acea-f0692de16c1e\n9fb7fb8a-23bd-49bc-9f6f-fb9dd70a940f\nd238228e-668c-4210-9e84-4bd7eab5d9c9\ne2903ce6-37c4-4b9e-8f92-ac4327c60be2\n6f229e7e-3805-454d-8a48-5d9a8397ee4d\n0a896d8f-bbbb-4b3e-8892-3b92ded691eb\n51c20b89-a850-4614-916a-7b82d29b1673\n64a54f9e-a676-40ab-9eb6-045035e7362b\n6b235a38-e02f-4ef6-b1e5-3c5a4f4a5b11\n94e74f2f-366d-499b-b70a-b2ca1eee96f2\n38275b93-963c-4159-ac4d-2b1fe18274c8\nab6bd54f-60d7-4bd1-9737-b321704b7d8b\n7fd02c5e-020b-4b75-a4e6-d99388c9e9ca\n11966f1e-075c-4098-89eb-9423d55b931c\n01ff0dec-8354-4ebf-9dbe-154eacdfee82\nb41ec949-c701-44aa-9d1a-16fcf90275e7\n75de5de2-7938-4add-90f7-f5af9147f9f6\n852ca424-60ba-471b-9fd7-2a4ca2ce14d9\nb6c20f22-4bb5-4ded-a258-617a7440725d\n50b1b0f5-407a-456a-9534-e2f587c23e57\ndf8b5268-6fb3-4062-8c16-0843fd65dc20\n42533c7b-7077-4f8b-bd63-acc5b9857139\n6ba27837-1475-4d62-8071-93832855da02\n13f9276f-a7f3-46a2-b172-6d1064a80aba\n2ea32148-f8a8-4abb-9735-d11645244646\nb8783482-86b8-4037-b689-97e5298401ba\n7607d718-cfb4-4e31-bbbc-391b72e7489a\ndb7dbfd5-babd-406c-b61d-a529c935edad\n7b76b5c2-2ca1-4290-ae86-0f5387d3f743\n8fa76e26-ca28-4184-9337-9aa1a7e8dd86\n34f322d1-d1e5-445c-b46b-ce9f80cf582c\n23cf11da-36ef-4d16-8afd-3cb124e53521\n63d18862-0086-4aaa-9c83-2f86bb65ca2e\na26d731e-9add-4a39-96e1-c5d71b227dd4\nc19dc872-ba3a-4a3c-a97c-1a1e0f4527b1\n9cec4770-a9bc-4894-9945-40cd0a592c37\n133cbb50-4d0b-472f-b03f-488c8b0ab828\ncc468944-5796-4ef7-a533-9fa5c542e3a8\n03b5f6bf-5b79-472f-a20d-bbafdd46d196\ne0a13522-a8ec-4f2d-a5bc-1af63c6b95c4\n96055fdf-a598-486c-87e0-c51f7600c269\n0fd01cfd-05b9-4657-8081-9f3fe065402f\n3d346bb0-5688-4387-a43d-71b21fb667f3\n5d4b538e-1cff-46d9-be51-6ed6030cdc60\n0fde744d-67b0-439d-8620-95766ae13ed0\n09bfea52-5ab5-4432-8b5a-524ff8a48edb\na10a3be7-67dd-4c5c-bf95-bee94e07b027\necee652d-cf1e-4497-9de1-a246db0d3beb\nece35174-bc98-4034-9bea-d67383e3e1e6\n755f0591-eafe-49ac-93ef-60683f68c845\ne274aca1-c015-4160-a08c-3743ad81a40b\n471d0288-b186-4d19-a403-580c9ebb63e8\n56f51cc3-fad6-49d6-9d6c-93ef0238c1cd\n2384a85e-3a95-48b8-9319-cbb17cd11c2c\n35202269-9be8-437a-bf02-c11ac3de058f\n2f7eb298-4fc6-4592-ad0e-0eff802cb9e1\nfa9ec9d6-48bb-4f71-be47-90549cfad4c2\n86d2a3c8-41ae-40ee-8feb-2dc943b2051a\n35a664da-da60-45f3-8249-c8ecbbdc5eb5\n44420913-d089-4748-85cb-4df87ce84023\n65305ad2-c08e-4412-8a9f-6228704c26ae\n8ead4712-55e4-4dcf-83ee-a1e9099db731\nf6627767-e3ac-403b-8ccd-743d16186ca4\nb46883fe-c676-408f-8fa3-788bfae780b4\n9fa9eef8-d23d-46f5-aeab-be85a7de991b\n5cacd3f4-0345-4b34-88bc-666d21a27233\nb0721aab-559b-4b5c-872a-12ca3f9c1760\n050fc6df-1037-4745-9f4e-6af9b2c78c2c\n5de58f12-2c75-43ee-8917-3b552c9c43f9\n2bc83b34-63c9-45ff-9959-07658f4ded17\n67b312ad-e046-48eb-b3c4-197633145d2a\na016dd51-68df-4650-8bd8-8f53caedf789\n7d5ddbea-6e6a-4010-bde0-5dd5663dc872\na9a76260-8335-4425-9fc5-dc56c1d234c2\n639efc4c-9df1-4bd9-ae0b-a0f8521e73c7\n0794b832-6731-40ff-9975-ebfe4038f8b9\n1cc86580-5ef5-4ccc-a293-237951938697\ndbfea3f3-c0a1-4fd0-9939-e96131150975\nf107ab76-a239-4d85-bdcf-0a895f0f7692\n198da984-ce51-45ed-b7c9-5524e2095821\n1ef4f84a-de78-4623-9080-d24db013a717\na67ad031-17e2-4a13-a34c-34d790791036\n5964a9d0-ca6d-462f-943e-4a020501fdfd\n1d1c2c6c-3036-4a85-b489-014f28db51f4\n898282fe-aaa5-4040-b2ef-eaa25729536c\nec39f9c1-c79b-4611-95a5-bdf2153350f6\n76455da4-8785-4f96-b7bc-6f7c12a6186a\nf074f0e8-aa2a-45c3-a242-9a7c53049bc5\n02c3a2e0-5b61-4138-a734-dd091273bc6d\n1d5fe866-713c-47ea-9162-c1b9eb9f4226\nd7ad605d-0175-45f0-abd0-4b47258aec3d\n2b010944-af86-4858-b9bc-a98e09ea385c\n2cfe656d-45ae-49ac-bc18-55afaf9476c2\n784a2ee1-068e-4852-914d-1864b4bfc149\n682c6b8c-c399-4871-b108-9b34eebd133b\na8ad57ad-e7ad-4b3f-bd6f-14922601d2a0\na710cc46-7841-41d2-b04a-14e2a5bc9f24\n2c815312-259d-45fd-8de9-f34268b430eb\n8d96238b-8796-463b-be6c-4efd23a289a4\nea32cab5-e670-4198-a0d1-9cc5571ceede\nd1b85a11-73d4-46da-8adc-7735a8a08a5c\nc1f2bc1b-ec82-4172-ba87-1f956945fbaf\nbd9cec1e-c466-4f03-9520-4677bc959314\n38c333d0-df11-4690-a8d1-de9bab72f58b\nf437abd2-d10f-4359-a744-85933e1f0dde\n4c91a7ca-f5a3-4022-97ca-0db40b53fd6e\n65fab527-5f28-42d7-8492-55d84271d22c\nbcbb46ca-1f2e-4ec2-9a05-2e37dafe0809\ned339e41-f8a0-483d-ab97-2a904f266f45\n9b9bd6a0-419f-442b-add4-3ff9c472b83f\nff310f00-bb13-40b2-b412-9b233e07fec5\n42457bb7-c939-4de7-ba82-bc7bce0f5a41\nbcd36874-a610-4c59-b46f-83171c7e1809\n4b5e601a-a26c-49c1-a983-8f3167b7189f\n7fe9eff7-3cb9-4f4c-8409-1b63acb9200d\n8a1c252c-4c07-423d-8778-6fa7a4e0e1fa\ne965f9ad-1a60-4fe1-ab1c-886c4cce9597\n7276021a-3261-45a9-96be-f34c0ccfcb79\n541b1cc8-e855-4080-9ea2-f53715db4176\n8aa87003-2fad-4c0a-b90e-98ffff66de09\ncee3a422-a14b-48d5-8008-80cd51c34ee1\nfe51d389-74e5-4237-a517-1f710707fe40\ndc34e766-739f-470c-bbf3-0da67983cf2e\ne93979ec-da29-437b-918d-9d1915a7e924\n56e54f9e-bb5e-400a-bd35-18071016faee\nd0c0cfff-9ccb-41b0-a089-203177205aa9\nfc4a287f-3707-40c7-a3b4-5dd8059b4af6\nac1273b3-9c15-49be-80ea-733e90f62099\nb3b6e4a3-ca6a-4188-86bb-e22a6d9ea9f5\n55138dc6-07a2-44b4-8f1b-be428aba73b4\n245b2999-9a88-4d40-92ed-8c5cf75ef150\n387fbde0-5ed0-4573-a161-a3e5d8a5d0e6\n43772fd5-f231-4539-9012-8a844550ec54\nbf0baa20-68f1-41c9-9814-521fd6ff80cc\n69398d47-5415-41b9-bc86-09d854464497\nf1de244e-339d-4c4d-aa0d-18f48c9fc1d8\n05c3a798-8f48-4027-99eb-0d05378c69ee\n0b242481-8fd7-4f1d-aad2-a5315f6acbaa\nfba84d70-4000-4cab-b7eb-2c21943681c9\n3f1a3695-a568-4856-a68b-505dae9a395e\n2b6d4714-e429-4edc-a145-0b2d7ccf7332\nc50bff60-9240-4820-99fa-25cdcf6dce8a\n4f021319-404c-464a-b9c8-aee0d85ff17e\n568ab974-da5a-4e75-bf7a-cc1962ed345f\n19d1de76-b226-4e65-876e-ec950a9c4cad\nf89eb1a0-eeaf-4e0d-8541-f5d88805d4a5\nb94e2e96-f8f5-4fb6-bcaa-098c92cd4ebb\n2a07d27e-79a2-4e66-95a2-33707de4971c\ne646483c-8b52-4734-ad62-78b040b9fab4\n888a63b1-1c06-4733-8fd3-52bf4522f5b2\n609b0707-06a8-4134-b0fa-1b95a4765e69\n4e7884bb-d1b4-4776-b2d5-a945865bf636\n0e8e180d-1934-4186-9b93-5bf5c5b60295\n879f2f00-7248-4494-bddd-a8bc01f307a1\n1b0c1873-beb7-4d65-adce-7298a3ba0664\ndbf809bf-c3a1-487b-ae38-f5ac5ffbbd85\nbd69aeff-881b-49fa-aab1-abe42a2ea3ca\n506d9290-e331-48aa-9610-78d33bea243e\n559366af-ece4-4d85-89cb-4b79e435cc28\nccb6ba79-a92b-4e9f-9e0f-230589c88f88\n65d15680-d66c-40ac-8db0-2cfdba99cfee\n5303c6ea-e6fa-42d8-8017-76e2b90e53f6\n0e09f1ba-1f1d-4d46-b93a-a3b5896039c2\nb9a08932-51b5-4a66-af15-66142281fd9e\n476e2aed-e1a0-4452-8fbe-ef8f119a9c5b\nfa540096-af88-4946-a032-1aae5f4c8c84\ncdec3e8d-7a00-4f72-b508-c22f50a602d7\na3404156-daa9-4d1f-96b3-75bbb700ac1e\nbd9aa511-a697-4aca-92f2-49db10afc8f9\neb4c97ff-089a-48a1-bac0-754af4d554fd\nfdf23ce2-6346-4baf-a61c-9fcc837acf46\ndb44bd71-3604-40c0-b101-d794d89ce308\nb0f0ef2c-d624-461f-8f19-2d56dcd3f245\n1da4d92d-7972-469e-993d-bed356ddc477\n2b388a87-4501-4319-9ff0-06b44e89be46\ndc9b9128-4103-4fa1-8db9-de5d35034ce4\n37498532-812d-474e-811b-3f5957a87d15\na9a7ee70-4326-407c-9d0f-419aaa7657a2\n2e6e4e24-8809-43f4-881b-d510a00c64cb\n93e48679-e1fd-49c2-ae11-9f2bfac155cc\nec50b1f3-b9e5-4e45-842b-65b3925bc7b6\n0ec7a70e-b936-4e01-b381-4897d1cb0bb0\nd9a5a3c7-dab6-4b90-a239-d4bbe14408d2\n4db32e37-5bab-4426-94fd-c271fb0e6e82\n73c316b0-f6c6-4fba-bb2a-a21378b6b368\n9c131fbd-eddf-4efb-952b-57a7bfa1f20a\n1855b669-da54-47dc-89eb-8c46d0f96358\nb09794f1-0841-4061-8821-406ec7994e42\n6509164b-258f-47bb-97f8-bfea4b2b9acd\n1eb757a3-7d67-4f83-aed3-2b6b6e2a1ebe\nbe07e9af-68a7-4a51-9baf-7342885ee13b\n513ba006-4d0c-4c7c-b1fe-dbb7aadfc77e\n8638c930-107d-4f67-953d-f5fd2b66e0fd\n0d23b906-bebd-42e3-883a-134655fca68c\nd3b77927-a3da-4314-a8af-f897af3426c6\n5c20f5a4-74be-4653-af8a-a3939ca37cfe\ne1b0522f-67c0-4eae-b9ed-f8c26da0b57f\nac027f98-0a62-411d-a8aa-e5d72c234a91\n524f7b7b-ad38-47e3-9df5-082e5cd0ff18\nd5759e02-20b1-48cb-ad43-791a11ed621b\n047fdad1-182f-4924-833d-cd6c3df8599b\n35273293-88a1-4031-9417-46533c8f7b02\nde738e37-5836-4579-b326-a19345e54b9d\n51758e78-8d1c-4c29-9f80-846935327ea2\n2addc106-9785-4063-8af3-bd2c70a1b199\nc5ca1ff9-f9da-4f02-8993-4f9d4406df2c\nb2be9992-3d57-4df7-b1e8-3cc545711106\n5259f34a-1cb6-4cc1-a1aa-1284c34e0b84\n6ecbe944-3049-4620-81e2-db3e4ae27524\nf95203a7-1825-46c9-8aeb-c07f1f2ade93\nc0be29a4-74b5-4dd5-8b9b-60630dc37508\n1332fe49-4794-47f3-883c-809b6326f4d6\n3f072550-9618-4450-a489-1c0f80dbf058\n82b60dba-c468-46df-a4cc-eae94feac3f4\n8c42251b-a6bf-4135-9164-1c0aa5569b9d\neac150d3-fbb7-4ddf-8acf-f83896dbcc1b\n93fa932e-2843-4719-9f16-b13fa63a7931\nff62b1a9-e4f5-4d62-b3d8-52e7375fe118\nd8ef98f2-06ad-44e4-bc4e-e2c9f693ad61\nec1be566-8186-4e82-a183-e7baa2cfa6e8\n7fdee040-d0f7-4821-ad04-0a619af68684\nb7f7418c-7aa2-42dd-ae24-09b1dd7bf35c\n426af6a2-9e72-432f-9021-4ac50c882385\n36e6fcae-69b8-454d-a302-34571395e1d4\n17ed74ca-789e-4d03-9cab-c3803bf4835c\n6a9b3558-2a97-449b-a2b5-b41286f44097\nceec7fe0-107f-4674-a08b-f7b55081e17e\n95b82758-5a4d-4b11-8ffa-8eb9a2134fd1\ne7123b2a-b530-422c-bfac-e2cf396d880a\nabcab274-6fc7-4c08-bcf6-55f0890a90b8\n8a1334cd-03d8-4be0-9592-33755bbc9048\n69c56c22-d30a-4848-9871-75b8dbfa9eda\n19625c8a-159c-487f-a06c-923862f6ddc2\n22294ed6-b3d4-40c4-b3e1-3ff068d4605d\n5d669630-3f9d-4154-a78b-294c8e2ad4e7\n4f53d24d-b0a9-49b3-a78d-cd24d67a03df\n26d2e3a9-2d76-47f4-81af-e259c0f680ac\ne29a89cf-f28d-429f-8802-2361fdac22a6\nd7c22d80-22d3-47ef-9661-fee441286c48\n494d4e66-2138-432b-8b09-37f935a31373\n3f9d8019-533c-4b1f-9e62-4b1410a81e24\nfbe52256-4ffc-4e70-9d6a-950660979903\n3516b7e7-36b0-4f21-bf87-9fc30c4542fc\n6cdf193a-0670-40de-a858-63180940a469\n753bc89f-3583-4c92-848d-543dd0623b7a\n3dc76522-cedb-4a19-b090-178fe389defc\n5ff2b67e-58e9-43f4-b558-99bbd0f04dfc\n2d8ad9a1-89c5-4988-8d81-03cc36e086a0\n98514033-e9ed-49c6-97f7-47b58446dba9\n801ab3f3-5a95-4326-8c71-c5d4a760c345\n56ac0544-a2eb-43a4-8b7b-3ef0f1caf10b\n2535c20c-c104-4dce-9d03-3dc2c30d346f\n87b38160-5ccd-468f-a95a-843c7fb42932\n1957e6eb-73ff-459f-a917-8983d6f73134\n23a41997-2fb7-407c-9b85-84abf7c8ddd4\n157da1f0-c0e0-4a37-8570-58052dd3f393\ne2bf83bb-a94e-4367-874c-14cb22261322\n9618ddbd-21d6-412d-bc76-0ea3f763e77e\n7a197e07-f91e-452b-9d3d-3e16a75db853\ne29e62f3-4227-4350-b576-6e0405906e8a\n1d4a7cf4-8c4a-4a59-bdbe-d025c91ff234\n98570558-5b74-4b0b-a0fb-9807b642656c\nbeecd459-fe13-4b3a-b371-42a35d6229ba\nae1eb09a-d567-4e84-8727-8ff9452074e8\n589b3cfa-f396-43bd-91fe-7998a2d0c9cd\ncf578bef-1ad1-49e2-bba3-9dfcc6c3d0ea\n70f215e4-a95b-4c08-b194-275b2cfeb69f\n146d67cb-5a2a-4514-910c-2b4bc0844d17\n83286052-b2d9-4095-9be4-02265323ec0e\nb7af4929-f390-49ae-94a4-52b8cd68ccfd\n8c4e1334-0768-4097-a50d-7bd9898b55cb\n7324fcaf-6aca-43ee-b683-7e0d18e5f4f4\n44f7839f-a9d1-4d32-a582-825cae27ccec\n601536f0-6c59-4b37-9504-16818a680b7b\nd2166d5b-10e6-4a7f-bb97-91454e47d30c\ndba46e3c-9e41-4bbe-9cdd-d88406728ebd\n4da23f13-497a-467a-8963-5c837f0a3abf\n157069f6-9767-4042-a6b9-518403109408\n0a616c97-8841-41ba-aecc-7947d154886b\na9328a7f-0be5-434f-a3fc-f380608440c9\ndcc9d595-249b-433e-b8e0-a9eb731a5ab6\nb9db412e-80f3-4b37-92aa-2e59cf824ae1\n60d7d225-4886-4657-be8c-acab8e22fc9f\nb9f09c6b-7a3d-4f41-bcbf-422ea8bcfded\n624c2092-83ad-4903-a94c-ce085a3878e0\nf833cc4c-15da-4d37-9ef3-5858d064197d\n1df1b8bb-4524-4e39-97fa-edb3240f9940\ncfdf9528-53c7-443b-8ba5-acb334efac4d\n8721f9a1-46fb-4aff-ac36-6446c819573c\neb7a7df1-5e72-4275-8972-dac707d03b22\n343681d4-ae1d-4040-9d27-c2b103b49f74\nafbe8f6d-fa81-443c-90fc-127134c7e1d0\n3e4ae3db-4118-4c4e-996f-b79b2da81a93\na48786c2-b7b7-4266-9d2c-1373773d23b1\n9b7f9fb3-f64c-4817-aace-274fc7ee723d\n97c4810d-53cd-4e06-becc-8c71b5e2a004\ne094af01-569e-4d6a-95a0-55590e7ab881\n71117b1f-7226-4174-b60a-74a07c8c5c09\nf4fa4052-3c88-42d5-b8e5-18a777a96c08\n9576fa62-7d60-4a9e-9f3b-f8b0ed7c00f5\n1f16b940-fda5-480a-8c56-6a2e4db70ec9\n052233c2-7f97-464b-8c14-efd5db2aa48f\n34a42120-a9bc-4394-b139-0cf8431b1474\neff90b65-4204-4ea3-988a-98bdae947600\na886c062-3d1e-4444-87cb-abd11cb9c9d1\nd4032ebc-9164-4325-8f87-1d555cdd69e1\n4d2b3553-2f9d-4b10-8117-ae040423fb13\na6cabaed-8e32-49df-b3fc-7680e86e0288\n7b056b65-2a48-4262-80c4-e4b53ec4725c\ne7ad6d15-177b-432f-925c-de2011047cd2\n4a96d428-92da-4de6-a2aa-58b503f8b442\nd4cf44bc-f78a-4a3b-8bd8-b490665584c2\n6881f653-b738-4cc6-b47e-7b7707cb22c4\nf45d79e0-ea21-4ea5-af3f-cfae5d19284b\n39f51957-3ba2-41de-ac6d-9a9ecc655d91\ne3599c62-97b5-490c-9b7f-4ad7c0b97e33\nf15e51aa-12dc-48bf-8bed-aa855296bd84\ne6860b87-a565-4dbd-adfc-503c0cdb7e58\naec83430-b968-472c-b873-05d3d04b3b6c\ne3677e55-c2cf-47a1-93fb-5a1863a740cd\nbe307f31-59d6-4707-9fa0-df54ee527a22\n0d183a91-1818-43c4-96d9-a5c6ef665a68\n6f8c3394-f525-4348-bd44-55941afed9cc\n92d774f2-e7ac-41ee-9a85-7c30f9f9906c\nc245d58b-e50e-4eb5-a1a2-9dfd7ab48f8c\n0077027f-1420-42b1-9e95-1f9b5fc81c23\ne16ab738-1f00-4198-a8cb-9d5ffaeea1be\n94ef6327-d241-4b2a-b175-47599568f970\nedf91af4-53eb-4cce-89fc-74cebff8f0b0\n33c1f587-d5cc-4985-9315-09932edd4b3b\nef68ebee-3a7f-474f-a392-ec8b8d75ed01\n8e376166-6ac4-4e59-87af-84d5770d648d\nc08fb7a5-ee1b-4a79-82f7-8cb621bb64ea\nefb26155-c332-4f9e-bbd6-fb3219004061\n08e95f85-34b6-43d0-accb-e3db652f2716\nd96fde2b-da81-4edb-a798-c999dcadd4ef\n6bb64d3b-22c5-411b-a469-9d8ba8ce9d58\n9619bedd-1dd4-4e48-a178-cc122b3d7bb1\n78febf5b-7c56-4e95-9952-c373bf7bcb41\n4f128ed3-48c1-4e98-969e-05d6d7da491e\n81fc828a-496d-4674-a6a0-23884b398758\n89180d0c-69dc-48ba-8159-41d26c9920b1\n9595ef69-f5e1-41b0-a958-54eb2e7f4add\n3f209ba8-dc7a-4e4d-a1eb-974facb2f46d\n7e2e9f7d-bad0-4fa4-91b4-cceec94ce219\nd501daec-0ba2-4ab0-a31b-73fa2c16a322\nc3fc37ee-1a30-49ce-8de5-17c38822213d\n0853b868-4e8c-4e92-83be-ecea169d8587\n9d87e0ab-bac6-40c5-9faa-55be71c6c7e3\n34550eff-e05c-4a70-982c-9ed2d8dd965b\n913a7a4f-6609-4bde-9bb1-382c05625966\n01ff1f99-f7d8-4768-a947-6bd2f4f7bda1\n063273b4-16e9-4182-80b7-9b2909144866\n4b6d2154-6af8-49fb-b782-112f3c21605f\nd0d85abe-17eb-4616-8e06-f2074b9f3cbd\nc6b076aa-224f-4791-9254-4008e80b566c\n623d2264-8f5c-4e5c-83dd-d547ec547970\n41fda443-232a-47e4-81ad-39c6c0835dd2\nd5cf5c5c-bf48-434e-9bee-dc9d45732dd5\n8afceb3e-cafa-4f11-8adb-49cd28446e12\n9d3fc5ea-755d-422c-bd4d-214510e017f8\ncf7eea98-b12f-4ae9-ad37-3c3f20de9d4a\n5a5f7775-3481-4256-9880-e7e4d9664b24\nb1648422-7bf2-49c8-914c-d03303dbb2f3\n2c90a98a-1b38-4ec2-81a9-d4387be68506\n5e1bcc2a-1d6f-4c3c-b460-eb0a9284ba23\nf179497b-fdff-437a-a9bd-a456da77931d\nc49f9f69-8127-4c65-aaee-ae442e25e505\nd240ae3d-fca6-4847-b64c-843097e978e9\n9056199a-d64b-4402-a184-4618d61ec0a5\ne99deb81-3c13-436b-bc87-8dae0766adee\n2aa35923-a8a8-416b-bceb-7139d31dc524\n5b6b4dce-bd1d-4295-a41a-f5de7d777c77\n7465ec7f-45f4-4c60-b4d6-e459dd56ebaa\n6661d000-7f60-4a3e-950b-2b7992797670\n8a141141-d1a5-4dee-91e8-e4cf4458b628\n4caa489f-e029-4ff5-8d38-2e71262aa509\n88b89ae3-6727-498e-bcf6-1358e81421b3\n442e2b73-e556-42fa-97da-61762bb59610\n3e5b7789-e862-45b6-840f-f294f27dedff\na119dd78-cc48-4229-be50-53c72b20e3bc\nff64458b-15d1-4840-a4e3-c1d6d67ac1c4\nf6d54be6-ba20-4e5b-a41f-b65a15b5ab61\n8871b8f8-b661-4d24-96fd-78ca51bfe2cd\n653825f5-0ff8-4da1-aeb1-03b111ae41a4\nd2174fd4-0378-403a-91fd-cf437b5ffc8c\n23ec0593-163a-43b9-8710-7b8bc0435da5\nd8d3a1e5-0686-43b9-8edd-a425e579cc0a\n452dde3e-2f10-4a5e-bd72-678d627b746c\n481dd61a-d380-4124-bfe4-a03f729639c9\n2775f40f-3f0b-4dc9-880d-8e3e820517e1\n784c04f2-8205-4b4d-a6b9-54185c2703df\nad14ec08-fa2c-4827-8b49-e2125a76aab6\n6d312ff0-716b-4f58-9259-48c96ce14278\n18894ba7-6b17-43c7-bb31-d2ee0d156e9e\naadd75ec-b8d2-4742-9850-21566443db13\n8bb05517-9729-4c73-9e76-1806a9f29e32\neb8dd558-9c13-4c84-a11e-1463acd58feb\n86e7c4a5-3b9c-455f-8c3a-930bf9200d0f\n18aba19a-c022-4cf7-b891-1476f9e15520\nd4e1cbd0-3b79-4180-93cb-9ffe6aa0644d\n0fbd723a-6f04-4882-9de8-44c163f3a7ef\n51cc5b5b-8da3-4bed-9a3c-3ef56288ac0b\n0ed27625-3ae9-4468-a7da-d72cb166e887\n33f7b0ee-ba51-4411-b5f2-1279730698fb\n0ff4bf52-60ff-4d30-a283-5e1c6d1fd4fe\n21660856-b79b-47b6-b22b-ab8b866e3641\n51b7cd8f-3557-4dcf-b5bb-6e918a041c39\necc7cfd9-1e2a-4b05-8479-0768db99f50e\n174e70ad-ead9-483b-8119-ff38696999cb\nf195efe9-de0c-4bc8-8bd6-01c6be052da9\n2907feb6-0136-4d8b-a5f0-71243b35155b\n009854b2-83e5-49ea-880d-fd71dff3b2e6\n314fe134-7d51-4501-9d06-e969eeb48e90\ndcded4f1-9e89-42e2-bb32-4aa6292c32ca\n38a5dac0-a21b-46b3-8a5e-5c7aab70ca08\n7cc6b9f4-dc58-4a81-a13c-2b4430598443\nb5de3496-a400-444c-bfe4-5956e58146b0\nb18bc38b-d989-41a3-bc9a-824b186a3fbe\n99bf7a86-955f-4b31-9fa0-70ca161863ff\n2f3fa54c-ec67-4913-b881-96c5ade4c169\ne6f78371-751f-4f22-b0a9-4f51965fa35b\n38de8066-f442-44bb-899d-d6c448de4b12\n8a837bb4-3c4a-4c91-bb19-21d88b797f13\ne98533fa-fdb7-4da7-a25b-4ba7161ac899\n7dc97da9-b8fb-4939-ac22-8802c45d0a8b\nfd060b91-dccb-4263-b7b4-7cd2eba8e220\nefcebd86-1be8-4170-8bb5-a04ac2a7f86f\na780eb7a-94e6-4306-ac82-0190d8602dd2\n1f1c3006-44b7-4dcd-9d74-9e50ad47cc21\n4ebb53f7-f8a5-4b3b-90ef-722da9602a73\n935ea06d-3acf-4ad6-be53-67381023bbe9\n3b5ecbfc-f52b-4e1e-8c74-be832aaf59a7\n4a906e7f-ce63-4c58-b7ac-0b4fb4e67c98\nda82996f-20be-4872-88ef-49f1c7b1894e\ne9ffcf3f-f45e-4025-ad45-a40b05670b77\nfd845655-d186-4e22-9a12-f297f9b19c05\nb62d9015-9811-450a-b657-407d41ca1c42\n594c0c01-d015-4dbd-b578-019313360b76\n99c4a052-5fb8-440b-8d90-282d832334e2\n78d4db47-9370-4013-90e3-8dd00e491423\n8e641278-c83a-4df8-8598-eb85f5d80ffc\nb798c3c5-541a-42df-a802-ce8f9bdb8a65\n6b737dbc-edc1-4d54-9965-38716294cd9a\nbc538cc7-311b-4917-a298-645bbad03ad9\n9d32a18b-a640-4570-b144-7b2ae1afde75\n8f44a0cb-bf24-4261-b878-152afa5247ff\nce0922d7-c0b5-4ad8-b6fc-6feacffa4959\n98cf4850-5a11-4732-b80d-5a1e2fc2a3a6\n1e9cb02a-b8ba-4e7c-8928-2d58f54183af\nb9f36bd7-72ff-43c6-83d6-63c624639cb1\n7e09d60b-11dd-4acb-8fdd-1eb66b040f12\ne761ea13-d576-4a28-853e-0ed45627762a\n5a20f85a-5acb-4082-a8df-3fc86ecd9dbe\n18f9b016-1644-4a06-8e6b-3cdd8fad8a8a\ne7c467fb-1236-436b-a2f5-1e0bcd135742\ne4a68918-9e0b-485f-b0a3-9cbf41743aea\nc1632a2c-2e7f-4728-b95f-91eddbdc54e9\n099f1fbe-9c8d-4172-b11c-57b8151585f1\n1366795f-26c7-425a-83cd-1decdb232b28\n35402d56-b2e7-4fd7-b9e2-ef9529a3db3f\n7e831599-04c5-469a-ac5b-0ef4584bc0f2\n690e0912-9290-4609-8e11-340fa3c268fe\n4d12d35b-173e-4051-94c6-fe543b601725\ne3b1dcf9-7dc0-43ce-bf67-076fe44b45d3\nf3cb49f4-3357-4169-9742-f3299567e335\n32771f77-4d9f-4553-a3ba-d911a52e06d8\nc8bb59c9-7e0c-412f-b049-4bacfa34c66f\na3d20219-be7f-4c0d-bb6d-fc9b9d2846ea\n9a319907-7049-41cd-8d58-7f7e049dfe76\nb9e8eecb-88df-4304-86e1-63e46c18985f\n3c113c93-5901-4120-909a-fa11d7b1ba60\n6f8698ec-f95c-4bb2-9f2f-885f006195c9\n80a2e5da-c8f3-4ab1-851f-d5eee5b74983\n94fe0814-7df3-4ef9-a9c4-f6cf8ed84280\nb0d90c5e-efb0-4b3c-8f08-a9e407f7b9eb\n23a64562-9eca-4e19-ac2f-7f2c6ccba1fb\n4402a057-85a7-441b-b8e1-981cbf616ede\n3e002105-5313-45ad-a729-ffb47c7a5254\nb3694a73-7592-445d-b367-4fd87c49ed9f\n29d5f04c-29ab-40ae-a595-d14dc36b3d8d\nfa9e018f-b177-4cea-b257-6c5502939afd\n67bf16f7-c422-459e-be2e-23ae8502cd23\nbb96a3c5-0eef-45c7-8343-aac06f453fd2\nf0ff991d-800f-43bd-8742-461a9a7cf8eb\n320031b3-2eea-4e42-b5a9-f51d5072401e\n00e25d55-47ff-4e46-8ded-793bda78f09c\n2ce70e81-e9ba-4ba2-a1f3-6f6790de1222\nfacd57b2-b0a4-4d6c-9c84-0c6daef85d50\nb81d52af-6574-46b0-ae30-bdb8f96659a1\na5204627-5115-4d8e-b45b-a563422e19b7\n18894d25-d12b-4455-9171-96621bb95a10\nc88dfa2a-b1cd-4399-b9a4-22a3a0c8d93d\n1b85b248-60fd-44c5-97db-929a5a2fc20d\n39d97118-8083-44d0-982e-d6af593b2bee\ne1382f07-8135-4c8b-98d8-9e71244f5029\n24c35347-6e5c-45ea-87ee-6086d16b64c1\naf9b59fc-f10b-4628-ad64-470ed654a0d2\neaf2ed89-8ce2-4588-b8e6-0526342e140d\n86390fc6-c8d4-40f4-b2ea-7e05d7e3fea7\n23f8307b-a910-47d3-85a8-22f45a245c3a\nc331e50a-b7fa-4708-884b-30066edc3f0c\n72c77829-0c07-436f-ab9a-9ea4542a7b67\nb8557977-7e15-412b-af0b-c949ada0936c\ndd83e844-5a00-420c-ab72-08f574c93887\ne3ae84c0-9374-4672-a3a1-6b09acaaf1f2\nb8b42697-a685-4e97-a41f-6971b69f4e91\n5b7c49f2-7b33-46b4-b945-0cdbde37081c\nb557004b-81e9-4c67-892c-adef0dbd0ac6\ncc955445-12cb-4ced-ba8b-5e8c2df537ae\nf09cbb21-91c1-437f-bfef-a5ed03ccb13e\n58b9c409-bdb6-41c8-b2ac-1c6d55642ab7\n2375f8f1-011d-4905-acd8-d6ea911c6f47\n3f675c1e-f95c-4966-b229-5191d3244cbf\n25b2e5f4-c7aa-4969-813d-5ee05036d0a0\ne545bb3e-ef4c-4bb1-9cf2-86f7535233d4\nac3028d1-f653-4f0f-bd19-83b72e3cd103\n2b5d746a-1ed0-4458-a196-08e392b5d956\n22941304-5537-40ab-888e-026c08e3d113\nd8b42f15-e67e-4320-92fd-4f3325a4b7f4\ndb5a9419-bc7d-4dc7-9cba-5c44d38a8fc6\n3ed4df25-ae5f-488a-a0e0-916b9a770f5f\ne4313e2b-a065-4413-8fe6-d44d48f548b1\n3b666686-e572-49e4-9872-5095d59fc511\nd42251f9-109c-42c7-a2ff-b5bea35215c8\n171c2030-cad7-4f76-9611-2799dfa988d2\n7eb43b70-8a44-4f8e-8dea-91f75be00eba\nb851ff3e-e64b-4b09-8034-138d734ccc36\n3b435d90-d589-4cdb-9a3a-a5c23c97c4c6\nbae06cc1-3a56-4c6b-b504-9504fa861046\n874908c1-737a-4b4b-a1d9-cf3f59c53db2\n9dc061b9-6d85-436c-aa66-dcb4deb7770d\nc80c0454-82e4-44bb-a312-04d485b0fd11\n4a62f02d-f471-45a0-a437-8f66409af7a3\n1af93958-4880-4d84-80cf-82b90ae575f3\n9ccfadc8-aa6a-4161-9891-c9db5283eb0a\n192f66ba-6417-446f-ac6c-9818decbc68b\nf240e9d2-c86e-4827-9016-a07160004e6a\n156cfc88-d3a3-4b11-aa85-dbd9895a44d5\ndc6b365c-154d-4b31-b0fe-7315cee5fd49\nd5b9c918-3971-4ff4-9608-42293934fb9c\nb4b5ec7b-2a43-4aff-abdf-e8b8596c277c\n4a3dc389-021c-40bd-af3e-247839bcff84\n9ce89404-c3d2-480b-94f0-5a9b9bec7966\nc2379301-1b18-407b-9b53-d923a9054802\n33836013-528f-407b-8d44-6a4f150b01cd\n31a51f39-3c72-426b-b25d-53704cbe601c\n4d9b1c70-0df1-49a8-99ae-235e1cf07232\n0a5b41a9-5562-430c-a977-2e0c7dc53b68\n7a4802a4-4b2b-4d51-a078-3157cb93cff4\n516ac289-e57f-488d-8b1e-b1d14ab2395f\n092ab03d-de94-4e04-a021-646863b5cd8a\n5d6ea6cc-f375-48a1-844f-59007ad0f71a\n52f6cdfe-932c-4d5a-a13f-62c065b3d17a\n9750bf53-37cf-4c3b-872c-4031cf26fb6a\n98627274-9224-4599-89c8-7c315fe1cd23\nfcdd5a34-1ecd-4ee8-9b96-7d45d08878d1\n5c94c4cb-5b8d-4ffa-8a1b-cdd1a1610ecf\nb6951d6b-83e2-4c25-bed8-17f365878e18\nf4e54b0e-743e-41ee-b7b8-4f8e00eff203\nf545f303-6d73-429b-80a3-6c07ebdcc0ea\n2bec7ffe-7b1d-4780-b89a-247f507ff87e\n9558679f-3740-4b60-8fb3-ab8158df28af\n8031632d-4c1a-4b07-b0bc-db9f7d3b01ce\nc872726b-b71a-44fe-a886-2b62b2bbc834\n2fa75643-53f3-4d30-919e-6ed82fcf214b\n5a35ec32-d313-4f1e-a038-f411aa32b567\n64bd48e2-768d-48ca-832e-258b3fd07ac4\nbefc8e40-f5b4-48f2-9b75-e7359bca33eb\n55ea08ab-d241-4a4c-be13-e9f205bf5e88\n820d8967-6b3c-4fda-9b3c-9562fbf8ed6d\n67f2e5ad-ef8f-446e-a240-e8633467ae8c\n80d12ee9-01e2-49e6-94b7-c0b706c66931\nf8c1c8dd-843a-49fd-8d9b-dd213417bf5f\n9fa0b4d0-2009-4e49-8ee0-7cf5bbde975d\n00edbd71-ae64-4802-b579-f22849984dad\nad696f99-4fc9-4832-ace4-0b1d499738f7\nbee272c5-ae8c-41b9-8f1b-0623a6387a8a\n38691fba-7799-4c5c-ac92-0b7af557b203\ndbb2c306-bd35-407a-ae3b-5822c05b7366\neecad49f-3128-44c7-8df6-753a020788c8\na39cf9c3-8e87-474c-a62d-076f577425e9\n4e1f814d-4482-44ad-ae93-c248a5e026bc\nc06b4513-5f4e-47f0-812f-d9bc42e59661\nb9c78d69-2154-4fc4-a2f0-45ce673db94e\n05256f3c-0c99-429f-b982-d443f4a3c923\nb8bfd3ee-6512-4ab8-992a-b154a784da0c\nfc6d4325-deb6-4862-91be-19ccdc61de0d\na0aa4977-8f22-4cd2-880a-00a15a929f12\n95c0347f-3a25-48cc-9f58-5dcea816791f\na252f521-61fb-4b95-bfd6-23ed5e8fa692\n8c21f008-0960-41d7-abb0-d8516fe4329b\nc1f841a6-62f0-4206-80f2-24daa10ee547\n942069b2-2dfa-43ea-b82d-d4c96734dad1\n3eb4699a-e32f-41ae-aae0-63eed72c1c0b\nd3710e0e-4e6f-4ce4-8adf-0da1cb2042d9\n026b07c9-8ad5-4bb0-8a26-b03830fa1488\nc5190266-fa2a-466a-8fe1-64785d533f29\ndf7f06bd-aa94-447d-8196-09c16e2c0d5e\n8fc4ff62-4045-4334-9b85-01cf5d1c4da5\nfd7470fe-3db1-41dd-aa4e-879c19c4ac42\n5ca34b26-ab26-4326-a8f3-a427d3b502db\n85cd7f40-8afe-4705-950d-a10a050f61ae\na06d3629-dfc3-4ce2-af45-9d520b66a752\ne1dd682a-df59-4c98-840a-6f7f2d7a24ff\n4fe7b62f-07db-410b-bbac-3a0142da085f\n63c0fd91-c7c5-4825-9d0e-b4b703bc7c11\n081a0aa3-2548-414e-bb7b-baf37e69742a\n00bef7bb-2e63-4349-a0d6-358d47a67c51\n9e792e93-85c6-4eaa-8954-3688074f095a\n1710f2a8-361b-47a6-83c6-43b8fb2574d4\nf3c807bc-13ef-499e-8a6b-2a1a4f1ae155\n9a11a5c7-9d5e-41be-b72a-fbaabb8aa769\ne3670ad3-7b0e-4969-ba09-c6c4e29caf06\n713b3e44-3948-456b-9ab6-37256f6afcfe\n647c28ae-3a8a-49dd-84f1-c70038f826ab\nc8062271-6ba7-4d71-884b-851b0365d2ac\ne841052a-8727-450a-8c7e-25ba755697f3\nbff172bf-a96c-4d18-a702-da01d8f625bc\nd4aa2a34-d447-41c7-a18b-29c4be9108b1\n056214d4-2e81-4e59-bfc1-d41970acff0b\nb18dbe6c-9e1b-4e58-81b8-f07b5bba35e7\n8f7ab56a-e6a4-428e-a2f8-83fb8fb54342\n3bc929fb-8a2d-4190-ba30-90b0c2bcf7b4\n2b4009e4-b502-4ad2-b4a6-1f80c8d152b2\n7c3d1cd9-0eca-4a25-bf9a-3efd08084076\n1ea127ad-dce8-4d6a-84b2-44b46b9161ac\n88a9870d-2db3-40d5-8ed9-f32f8650b348\n340dae6f-e746-4438-a5d1-af88bff5fc9b\n16803227-1da9-439d-9d25-a6d6c36831d6\n880e173d-d664-42e5-8031-760a78f44061\n9d260841-af19-43c4-85a0-138ae7c96364\n6ca33ef9-e554-4f36-8c5b-a8367abc928b\n5d4c6f14-2be7-423e-8abf-74798431fc94\n5641ab16-aadb-4639-ac6f-6e3c159b9849\n544b2a8c-9920-499f-be70-2dd22092d3c6\n26b9a866-8155-45a6-b4c5-77ee5b4b1523\n1756ff09-d4bb-46b4-acf0-e7fbcc3a75b4\nbbf601ef-9916-4c41-bfad-c76df57b093a\n7d803e5b-b703-4d3f-8406-1bfb5514a367\nab643626-f5e9-490f-a5dc-822dfb98eb0a\n25bce674-5ad1-460d-bd94-7eddc7509052\nbf85ee9e-2bb1-4afa-8337-9b73d8b40d44\n2a7c2d33-0a32-45ea-806c-74700a88011a\naa05f8a2-bb93-4294-a999-d5b29e927a80\n6200071c-5a0f-4d4f-b129-3d93cd51397a\ne7bc43b5-7443-4806-94c1-08d0c7fd3caa\n27755552-748f-4cf7-9f3f-9f6fdfb50de8\n3f3e202e-b6a4-4a50-a44d-c0094623e38a\nc93fa5db-f4e0-4fa3-a1f9-a6f9445d0e41\n9dfd4835-9b1c-4b7a-a0ca-0b566d8d85bf\n43c4359a-4ad9-4a96-b63c-897d142f6282\n1284ae7e-2bd6-4e34-aba5-242c231e231b\nb65cad42-cb0e-4f07-a280-5acffb3d82de\na4b126ae-a7aa-4198-a6b2-89ab7451e64b\nb3f65786-5073-45b5-a854-a3cc236634ff\nd3a1a7b7-440d-4a17-82df-78e30605f9c5\n492c27f3-56de-44fd-a1b7-06ea9cf777ac\n14f0659a-bce3-4277-8bf9-b587cfbca0cb\nf0e705e2-6ed1-43e7-a399-403436876aeb\n75171f91-89fa-4503-ac95-3fda6d6bac06\nfb31eefb-1f99-4aab-836c-2fbf84d005d6\n18500e80-5957-4a04-b28f-fee95bd79190\n5298c7cf-82c4-4121-a303-ff2747142f65\nef4da9e7-e23e-4f09-afbc-389412e538a6\nb78c97f2-d2a4-4593-93d3-61f6346cee34\n56081182-c327-45b3-a54c-cd2eca2d61c8\nd489ddb2-e692-4e84-be97-cc2278bd02b2\n7292417e-8fe3-4722-8667-049d6b03d1ba\nb6a80663-0eee-4539-b92a-45a8485ea2dc\n4dcfae78-7e6c-4553-a40a-31d1ebdd4a85\n49748992-4996-45bd-b2fe-05503971d5d2\n0f94f20e-c1a6-484d-a3bf-6ccc873ba1a3\nf4ff03be-fe5f-4ef1-b193-4cd726cde3d4\nac92b86f-9549-4a8c-b6e0-8e3ed4df569a\n5c41a37c-4b11-435a-bb1e-a2140dc8751f\n8d58fae3-d463-41fb-9bb3-8e130c318ebe\n8e19b600-1bfc-43f3-b363-642960bc0427\n70e80a04-d859-453e-94e8-ecee9b4aa206\n2c695082-e0e0-411d-8992-f9f244f67ebf\n57e9669f-9dfe-4b89-90bf-ed9b2d0a4079\nc9067bcc-9a8d-4967-b9a1-f5bf2262cacb\n7b696815-c459-4fb5-876f-c7f8960a3fdc\ne2825bf9-b24a-4c72-8101-459fd5d48417\n23133a69-9c54-42c3-b14d-6722a40f7116\nac4615dc-0bad-435d-80b3-1d74dabdacec\nc0e50daa-aeb9-4855-ab35-35b216931600\n5bf111d9-cc55-4ed5-a776-6e1713ae4778\n3352eccb-633a-4b4e-8e89-a4456017e60e\n8603477c-bb8a-4e74-bf63-00ac26133a0a\n2c487889-1eed-4b9b-9e01-5e84ed63c0de\n404e692d-f1bf-48a1-acab-7756bc116a4f\nba02b40f-72a8-4162-99ec-88ea9446f54f\nf2efb0ba-7943-4875-a6b1-ca68a1e38297\n0ec40ff3-39fc-495a-98af-75dd985bd850\n7f224189-160f-42cf-b5ff-98ca581d0261\nd4fbf258-c567-4de8-a2b1-92b0bb11173d\n91a7511b-3a8e-4637-aa83-df547bb95343\n70cf32d7-03e1-439b-bd4c-0751f2f330d1\neb5282ad-e72d-4fa7-ac9b-56b60e3d98e1\nd16f94b2-eb5a-486b-9ed0-a3ed039e9ccf\n151488f5-0eee-4160-af8b-e4cb95e24ed3\n8534e6e9-147a-4eb0-9be3-c29fa0160872\n77609e00-fb55-4e58-96db-04b6f7e76ed2\n587ca6ad-70fd-470f-8b03-0485e3a8cee4\na8f992df-b727-4182-8d47-51124f4cb01f\n86907895-dee8-4b6f-9479-f19756880e0a\n4ec3c0c1-03dc-4bb8-b53c-de447416ba4a\na0e8f629-c14f-4100-9efb-9318097468b2\nde53dcbc-db9a-459e-9601-c4c8bcd1aa7c\n5038507b-a93c-49b3-8830-7f19f044fa40\n0ef1cceb-6592-43b0-8d36-80e0616c8a6c\nc662d6ea-946b-48a4-b8ef-f76b04b4e093\n02e7b485-5e5f-4640-8813-8da93f338f46\n39d1fb0c-3b57-4c7f-b026-60aaa4b5c07c\nf4fe45f5-7847-4cb8-9bfd-2bbc31d8352e\n8f0c6a00-d36a-47f9-becd-a1ee91662d78\nb90500e2-991a-435e-a9c4-9217c92160c4\n75c87b8e-c12e-46e4-8be2-e571cbc908c3\n17ab02bd-737c-4401-9ace-f912114de3f6\n7748b056-408f-452c-9c6d-c08e6b0e3e57\n79603ee0-ab43-4c74-ad7d-15b0be259190\n9ccceb67-2ddf-4b83-90f3-a9b56e4b0add\nce06b1aa-2c16-4d64-923c-6d543d996f2b\n30dab1f7-f6fe-4a53-b55b-73ac970092c2\nf027890f-52a1-4cba-84bb-1b685e41f807\n93382c98-8805-45ef-9f6a-9bb631321b3e\n60604dc3-0ffb-4fd7-aa34-418038953d24\n157790a4-44a0-4cdf-a93d-af995f4f9acc\nc09d2134-6a55-4857-93a0-d6d82c17afa0\n95bd9829-732d-457e-87e5-7224a538ae2b\ne36a05e8-c76c-42c0-9660-1631d29b31e3\ncd052f13-6ba1-41f0-bff7-2118c38a6c62\n966673a7-7739-49ad-ba43-14f0324c2b24\n093034d6-b348-4c6e-bd92-65b6ac22c113\n86c5cbfe-3795-4b49-b8e2-360298547f8f\n271d62eb-815e-44ed-8358-f0f0455790c4\n0486709a-f25e-414d-a44d-814ab85cb4f7\n10ac178d-aadb-4bf7-bc36-66f886d654b0\nd7f008a2-4014-4323-afcd-4e3272b1fe93\n493339b9-82a3-493c-b8f9-b6b0860dd0a3\n800aa2db-4135-42be-9594-6e09217d1255\n8956fb6d-1fb0-4cbf-956a-5eb7e3b7e31f\n15308792-9ee4-42cc-87f9-3d69e1421ec4\n558c7188-bec8-4482-b287-2e8e47ee5d5f\n14100dbb-a42d-48db-a4ed-0e024848f0cf\n9376c5d1-29d7-4979-9f08-0e517ae1b75b\n18d85183-98b9-4dd0-9a51-d2a13463dd62\n0aae99e2-21e0-4a5a-8a11-004c13927acd\nfd251a77-dd89-40f3-b1f5-7df2dea5b5cd\n9ec7e2d4-dbe6-475c-9e2e-141727ddc35e\n03ab1855-59de-40e1-b87c-ccb4fb6592ea\n700aa8eb-4c4b-4f50-9050-322ae0db47d9\n5aefd923-9621-4c06-8ee9-b2afc44b665a\n4720d644-12b6-4b15-8761-53d3cdfb0675\nf4287829-6cec-4275-9702-bf95cbed285f\n87054b58-c659-458c-bcd2-f0abe532ab4a\nc28d1835-3a42-489a-a454-ba0d91e2f642\nb24dc77b-9f9c-4995-b295-58f384a1835d\naace0a98-90a9-4b87-b82e-eba57f78861f\nfefba790-29bf-4930-a947-7dd1e1353aa9\nc66ce27f-7d32-46d6-8799-0d750f1cab22\na880c492-b42e-44df-ae16-3777637b3715\n65adb750-ae5c-4aba-b838-c352162487c9\nb49efcd6-b370-4a2a-a675-1f044d88ad22\nf681d2bb-2e54-45d8-ad36-828de6ba3275\nc507de28-fdb8-4e16-9fc2-ac36f95338fd\n8eb85746-c5f3-42c3-904c-5ab4d88b5825\n6583010d-36c6-4ea5-b67b-fe040332fa6e\n5f75a999-4d96-40b7-acd5-b0ac019ee7cf\n8c943ac2-e4c9-4d4a-b69b-3539db447ebf\n92f2ce7b-b0a5-4601-b023-f6f83698b708\n15145579-a209-4b58-a33d-b397143ac827\ne9a8502f-75b2-477e-bef6-5b9a5c926d4d\nf1c2237b-78c7-4179-ace8-418c465cd762\n09b7775c-44a9-4e06-a137-4599e4fe7c53\n3368fe51-4e94-4f91-b447-f134c0894aab\nb2b1f3c1-92dc-4993-a3bd-3beb4ecec4b9\n1852eb2c-6433-4961-8aaf-30bdc3d13548\nd9e84387-c767-43c0-bb3b-df5b249d5191\na80e5531-6b33-4619-8421-acc43949ece5\n2fef1f7a-e761-47aa-b08a-7ea5c4c3d48a\n991f9c4b-9119-40ab-bec8-25e989d23002\nce1ce8b0-afac-4d5c-8a8c-1ea292a343e7\naaaf61a0-18e0-424e-a3a2-821a67a914f9\nc7d70d49-bc31-4916-aab5-2772bc585291\n5a75a8ca-3d6e-4db2-980b-85e08aa9813c\na5dbe904-755a-4029-9719-d6a5697e089a\n10bdf2bb-f7c8-448a-9e8b-4cf0f709d80c\nd17d0d06-6224-4363-acd8-f38c2bee9c64\n14469056-4eb2-47d9-a3e1-29d25581006b\nd536048d-8f4a-46b8-9e58-9a09db4de489\n435813d7-4ab2-459e-ba92-095b4faaafaf\n4698ca94-7d15-42f9-932e-80c1f4f33f4b\n50c05d0e-25f2-4f1c-9aed-96cbb940232a\nc5a9e48c-2ca1-486b-bcca-a69ed6ff11c0\nd92a4c7c-40d9-4749-8b37-197c2ed0bf7a\n1f7bcb47-f884-465e-ad30-d1633a9d8e69\n30cb2d6b-6fa6-4914-a2c9-4771ae206222\n163c7a38-4cde-47af-9d41-7f8fc2929c53\nb3c47d7c-373c-4dd2-9805-3e429de10752\n0d9060e1-9590-43db-8c3c-9c32ccfca9ba\n3fd091fe-6224-4c7d-ab8d-7a07f15187dd\n3445899f-a082-4bc5-84ee-063f0a82b735\nb295f491-d37d-4d47-876d-cb3e56983e3d\neabab7da-70ab-4c5f-8510-6e0a1b132950\nef721969-c9f1-40bc-aff8-d949daaaf4fd\n2527c23b-9824-406f-9132-356720609e71\ne0c2a40f-e680-48ea-8bf4-c6d3b236713c\ne96acca1-c3e9-40ca-864c-174d36cd2dc4\n174dc10b-20fe-4ffc-987a-b9c25a4fdabb\nccc415f7-3499-4fec-bcf6-00365af408fd\n9efbaf4f-9e04-4660-b584-3cac93b2e2ae\n43408ef4-c87d-4747-af2a-8d0c03e7081e\nc375a550-0f51-4ddc-a62f-859b4ce402b3\n0840b887-dc77-44a8-b34b-a994490c859b\n43c27285-9d74-4b28-a30d-5a57c0e83ca9\n82b149ec-6a18-4e26-b117-0bf5ef807b90\ne483dc1a-2c72-4078-8d25-ec9abca48f34\n6caccd50-a27f-4bb2-be01-dbf3f7eba62d\n4fa359c3-17d1-4249-a2fc-7e13c7e2f954\naf0b5b6e-abda-4466-b5be-ecee30c90b38\nd47e152e-183a-4edc-a8dc-d8dc4881e9f2\n6726eee0-7234-48a8-846a-98327b462548\n6c17c769-ef89-42cb-a8f4-349c08b901ca\n23bae8f0-7526-4c0a-86e2-48b1c040eb97\ncbe4200d-23c6-4e8c-9034-d0b02f90de52\n28fd61cd-fe21-4ba5-8021-8ffe391aab51\n33e2569f-3eb9-465b-ad41-8cf5927e7115\n982c2506-a8a8-460c-bc13-4fb6d21bfda6\nce367de5-b907-4ade-b43b-d83dda30b74d\n1927833b-eb07-47e5-a4a8-9c366c3e9c33\n1fe898af-9cec-4f91-bc84-6e0241524a0f\n418db293-db18-473c-a90a-7e7e2dc80722\n4178bca7-b0fa-434c-9815-a28348469ad6\nd5cc42e6-da2c-4e98-953e-6b8534a72deb\n274eef05-6818-4a02-bf12-df24dafeceb2\n7bce1fb4-aa35-4371-98e6-48ae8e2e631a\n1b3fb5c3-2953-4c64-ab8c-f9368e598487\nfd2e91d4-01c0-4194-80b7-36e591237d0f\n271b530d-d64a-4c44-a6fa-2439107cb182\n606fa330-f94e-4a99-8c3e-a8512be3b3c9\n0fe6f6d1-e867-4c8f-9ea4-f4e658735d7c\n8eaac51a-0ba2-45c1-9067-883e920a0686\n49b77b3d-ea8a-4805-b168-982fbb1ef1dd\nd957c9a4-9f9a-48c3-8428-d4dda53e998a\naa91b540-67f8-434c-8539-20d86ca27e2a\nfd806461-91c7-48b7-bedc-4d6c33d6664a\n04c36d39-71dd-4b94-858a-f3a6f28bfe0e\n3e4fa402-4e9f-4416-9086-94599f695033\n578d6bd7-f6f6-40c5-b32d-41bb7f1784b6\n014bb75c-e99b-46ad-a96a-415bb06219c7\n4d167da0-c002-45a3-a483-2e274fa27bd5\nab83a80a-7a77-4bf6-9cdd-1e04cd8ac049\nf764c95e-254a-49aa-8171-b3f049c48488\n41e9ab44-8c43-4aeb-b07c-050ae784e131\nd075e729-12d7-497c-8019-e01ed037ba21\n4534bd4a-79d6-4593-b2e0-671182f4749d\n9f33e1cb-f309-4dad-965a-35d1cd05c6eb\n2f9c8ff2-e8bf-4fb9-8941-99c9aaa61c9b\nab8efd8d-f722-4784-8707-db9aea22a865\naaf52de9-7871-439c-b8f9-e9734f7b1311\ndb1255db-faef-4f04-ab29-bfe9cc0b8165\n583cda06-e3d5-45ef-96ad-6d48511a4675\na1ab2ec2-58ac-4d5b-ba5c-48cdca9b2afc\nf0ba918a-ab11-4ab4-a5b3-3b456dd2bd8f\n4323cb20-6721-4dae-a337-0b3ca061bbb8\nd028c749-641d-49ce-9bf2-673bb55baf7a\na0896c1b-a7a7-47bc-bfb3-db373f06c7b6\n7aa04b4c-6fb3-449d-89f6-43a20e44cde6\nfef2eff4-76a2-449a-97f9-0b63c5563c4b\nae6bd1f4-5f57-42e6-b4b3-80271c0a86ac\nb008a402-ba48-4173-9943-884c27655ded\n5da15943-aee0-46f6-9d46-b15d0c5809fe\nda0bcd6d-2541-411b-9ced-ea4978641d64\ncdf67919-9c52-457b-bfd1-6b8423b3d539\n0807dcfe-5417-4344-a93c-ecc7e617b08c\n5686a680-3e25-40c6-a4b2-7bf3165a425f\n8a34e9b9-3b0d-4a71-92c7-21c87dbffb7f\n7c8584f5-d9a6-4fff-9c46-7333a4406d05\n11ed326d-dcc4-4916-9d55-f49fc9afcfe0\n4bcd67a3-dbe9-4c78-b6a9-406c235ce547\nc5ad23df-296d-44d4-8220-713e1abb0919\n639c74ca-60f9-4cef-aa8d-fcf7a19fab0a\n78e0dcd1-b211-4eb6-9608-29ccbc1953c5\n5d8bfa17-f919-40bd-82e0-c4990fa31f1a\n4bb85894-5541-4eb9-b6d7-06eb0b013cdb\n8a292716-48e8-4fa2-a46f-5199c90e7fd4\nbdfdae2f-a3d2-4df7-9e3c-617500473764\n6fe24f1b-3a1e-42d6-a0e2-34bbb3c8c713\n840d8c21-5eff-45af-9606-b48eb4473a9e\nd7475cca-6176-44b5-ae48-0224587e33ac\n7ae40ee3-0261-48ff-a5f1-6b983e9c22d1\ncfdf966e-43d5-4a5c-9b86-0fd04598fb33\n36f26bca-9b15-47f3-be8a-d8910e58534f\n789433b3-bef7-4b55-9224-8d2a15ced99b\n452b2cf9-1c13-45c8-b766-4537e9605804\necfcd3e7-e3d7-40aa-af4f-15f4cd1b8a12\n09e727f9-7787-4ba7-b141-e9523346d942\nea8714b4-eba5-46a5-865a-fcb26b24df24\n4c5fbacc-f19c-455f-a584-e1cefdb51337\n7d0cb48e-95b4-42a8-aa87-f27dfaedb8ae\n25f1c620-becb-45e5-a9d8-c6b5e6cd73d3\n55dd4c2b-f190-42be-b488-a9b113792057\ncb7a8f58-13f7-42b2-a210-ee7eabbd2a78\na360dd55-e4d1-4118-b85b-c9be427ee4a3\n0d20ebdc-41bd-4abe-bcd1-2799003b75f6\na81aa00c-54f0-4f63-a0f2-f0aa2303b52b\n73ac9eb1-2702-4f8f-8ef5-16096e0bc9ec\nd97326ba-6140-4ab0-afc9-df529ba05e1d\ndac6f648-75d6-464d-a051-eeeb73831a32\necbe9ef0-359d-463a-8c88-4dd6cd02543a\nf0f25e61-8d8e-47dd-b703-86d70643ffaa\n9f79262f-9a8b-4e1d-a14b-6fd3d9ba64ff\nf13b94ac-16e8-434b-99a2-49a5c16c6cb9\neb1f6ae4-c139-414c-b399-75e8b6f86104\n9ad09623-0e21-47e1-8755-489c41cb3684\ndcd0cbaa-c8bc-40d2-949b-d22b405eb531\nff99eb19-0245-4af7-8b15-02fa929ad4f7\n98909dd6-b480-4acf-9bdd-c3dd6cc61797\n6a97cc09-0c33-45a2-9d14-7e587b9adb25\n9b89ae8a-fc93-4918-81cf-05629d2e8a60\ncdd4c49c-2a7e-4c4d-9d43-eb440be264dd\nb719a1e5-5c81-4314-9154-d7015b5f965e\n14a46f49-ced1-4c09-b79c-d04732bf17a0\n444a76d6-4acb-4ebb-8e2a-146e179ac847\n719de7fd-090a-4e2b-83f9-4c4b233c20a2\n7389f6e4-65bb-4a53-82ed-d16e91a433be\n4122d9e9-1489-4509-b05b-0429c1c48617\n6e0815d2-875f-4ecf-ba57-f4a731bcd8f9\nd613639a-abee-4a87-9c88-e4f13e56431b\n51994636-7eba-4097-ab12-d3eb1c5ced9a\nef3a02f9-e6df-418f-89c1-a265b06e48e9\n0c26df13-dee5-4735-9c90-9f4d6c16015a\n1b372124-b899-4e90-858b-eef1df31452e\n0090b3be-da44-496b-8fb0-1fbfab635e22\n295599c6-f52e-40a0-b162-d902cc217f26\nd27d085b-01dc-405f-aa06-f7c8c19b68df\n8907e5f2-bf12-41b7-99cb-e106192139a3\n921f9d94-1d9e-4b61-96d6-2d8539e46ff3\n28e0cea1-dc0a-40f9-bc20-4f84735c4cf6\n000eb456-28cb-46b3-ad39-038dd2cd1dd1\n241afbe4-80b6-48c0-b5d9-b1b3265524a7\nc5ccd86c-5018-4fc0-83cc-2db6a4ba89b1\n99d6d949-b516-41be-b957-683db3331cba\ncb726345-ed46-4f84-a083-31f3695cb822\n9af1ae12-89b2-49f8-a2c1-e7f6a21ef753\n7f248b6c-66c3-4635-a093-ca40f6682535\nf8255b1f-08e1-412f-aa58-e287bf006658\n238ad526-4e24-4564-af97-def2ec822d3a\n45e7dddf-3a62-4087-9215-f9257de11036\ncd11b42d-87e6-4a5f-86f1-cf8a1007b0a5\n6cba9e9a-53bd-4535-a893-c9d25f680edc\n5de3468d-7d01-4934-b1d3-781dcdb1e313\nc2b00ffd-4399-44b7-8edc-71ab1ca0431e\n846538e7-de32-407e-8c60-a497447042e9\n0b07467a-6e69-4186-8a5c-61205cd2e983\n1b7db50e-aaf5-48dc-8d2b-6225479d472e\n6df45e35-3233-4043-8a00-bc533a0335b8\n56ccc2f1-bac5-4eee-b817-867dcb1991e1\n5cccdb35-fbd6-4804-8cd7-4f4deb6e0bc6\nf11fcdd8-eb31-420b-b4c5-7f6f7ece4441\ne62da56f-8233-4cff-944b-ff524c45ae41\n3b46a14a-b01f-44ce-9778-df2760f540dd\n8c90175a-b483-455d-ac3c-e99298389d6a\n10e6ee52-b110-4b43-bb1e-219945d4f18a\n47647011-35ee-432a-acc3-4fabdae416c6\n77bfb9af-8a1c-485c-afd2-4b26bddea9ad\nc2091a65-4022-469b-acbc-4af7307759e3\na4f391f1-6bd5-442c-b09f-faa9cec94169\n681754fa-894c-4248-89a9-804cb225ed1d\n51e54d8e-75ba-4591-94b3-3501ed47d9d8\n4d4a8e07-1f8f-46d5-8f3f-df0ae035b795\nccbc6a6f-997d-4e3f-8040-7f5cf952a5b6\nc059085f-799d-4c17-87ed-3f60955083b1\nc96cf83a-e2bc-4be2-a446-734957d844a5\nbbcdb89a-7079-4631-b540-c1f3f64be150\n87098b51-87e8-40ed-8578-c1a1bcbcc49a\n7c762823-59f5-474e-9f75-73d5e2adeeb5\n709041ff-10f9-4986-a8ec-ccad75bd8db1\n9a0c274f-e6c2-47d2-8959-3c6325294435\nf2338821-54eb-4777-9307-bd0b603b8658\nb630693b-f6d1-4de9-9ee7-e21045046da2\nec512883-2465-4bcf-a7d3-1f2f93869335\n1ddc9c93-8de0-4af3-a9d3-3bfe14d15b26\nfd74de58-cb7d-4fab-9aff-e34deb31b99f\n1d46154e-eb83-4ece-8ab3-2d64b04cf000\na3d2247a-383d-429f-a2a3-7c3679100066\n8cfc105d-d890-43b1-ac6a-23d253a038d1\nfd9e317f-c035-4b61-9bf1-d98cbfe1da13\n1b6a54b4-e09d-460d-9b6e-c1ab91806492\n4cabe52d-85c6-42ff-9b3c-c3b589b71aef\n7736c857-1a4c-43dd-a274-2cfd5843226b\nab64c140-8215-4b53-920f-65032dbcbe1e\n4246149d-fc31-4339-a949-89b76dacc85f\n388d90a3-589e-4e70-a00e-6301a93eb9cf\nf35c06e4-3f45-47aa-8001-789f888f7c85\n7715397e-ba17-49c2-bae5-3d39b2824f55\nc938b7d3-40f7-4eb7-b59d-d2f2d7acc21e\n3f0f4d67-ecd2-4f3c-b1fa-dab4dac9a4b1\nd2eaff95-ebb7-4f29-a664-1d545746f9e0\naac0276d-bae6-41ef-8ede-6132fe042bb1\nc0cde0cc-9077-4567-9615-f694465b2d13\nbb9f2be5-8549-4853-9674-0ccd27c28a70\nbd735f48-6e79-4b97-a373-949a6a0dcbc4\ne41e0e99-85a8-4767-b8df-6bbd8b87401a\n8bb99970-fc99-4b86-a7ff-18946e7a9d76\n97af1288-4cbe-476c-b6dd-790d43d2f9ee\n4ead13ea-97c4-4688-b103-7db51003fbc6\n1450ed7d-adfd-459a-b4bc-7020367a28ee\na66d2309-742b-4b91-83d2-263e0250a635\n80bf1c27-6b17-464b-9da3-090ec0700775\nb72d0790-72bb-443a-94cb-8464fcd7e7ec\n2af053cc-4aa7-4c84-821c-8e8c211b1693\ndad891d7-8317-4fd9-8ab2-cb793108d5c5\n7dd01263-ae78-4820-ac13-f48747c66b84\n811b1d2b-cfd9-4a25-b20c-48b62173f466\nb2682fc1-4c55-4302-969f-e951576cf173\nd5d2a41c-a165-4bf5-9bf5-7ac660a2ca48\n4d0027b9-803c-4a18-bf88-c6686d94ee8d\n2b0ed56d-5ac8-4c1c-b657-b3912313bb35\n0309d4f4-ee81-4d3c-8252-9f27045d216d\n0f221d5f-0160-48fa-8728-82e2e71bdb83\n920ae26e-812e-4324-9f43-61b68d792132\n2bc681de-9cd6-42e0-86a5-bf71bdfdec60\ne333161b-9e5e-4ce4-bcf1-993610ce9f8a\n9eb95c4b-d588-45d1-8174-e16e41eadf46\n82323156-6b5e-4205-8a8a-faaf9d127289\ne88483aa-b037-478d-8c93-2313af0e3575\n8fd9a500-bf8c-4102-a1c1-f3cff270ded9\nd956f714-1ae1-459a-873f-a69907ce6bab\n05492846-4d23-40bb-b4e2-5dae62544bd8\nf0926d7e-f6a8-4b8b-ac9b-2c9c0b7352bf\na75fe8ea-ad6c-40b9-a062-70727ee94d28\n77c54568-da43-4c3f-b9ba-242bc7a5adc6\n153a9a77-3e65-47d9-b57a-8dd8261e90b2\n093ddab0-5613-4f7a-9c4a-fa9e28336452\nd2c69f6a-555d-495e-8577-07dca8131dc8\nc64534c8-6325-4cbe-9eaa-36e6ae9f1e71\nb3be2c7e-4af6-4077-89c8-d52866842171\n576923e6-15e6-4602-930b-bd12abcc8e3e\n574993ef-0eb0-44b8-8698-cb87e18156fd\n8cb1b7de-0b38-46d6-a718-2a175d5a7ac3\nc6953925-7bba-400b-9dd9-32c01e9c9f61\n536d5e89-f37c-434f-b24a-f5e849c4c198\nd2f571ea-ebe9-4a2e-8a92-dfda911bf077\n5c316589-2d1f-4767-968c-766afe2b2250\nd652dbc9-58d0-47f6-b7ee-8bf817187902\n2af7bf08-5dc9-4a31-bddf-5dd793e41c1a\n2a3fe9a0-4a4b-4eda-b4da-1a9e4886c1eb\nbb56bc56-c175-4b29-958d-95bd0b2c801c\n0d8efea2-0a8b-45c8-99e2-1715fe272037\nc518f9a3-4788-4d2c-a86c-e06e641c000d\n151fae51-9217-4bd9-a314-c29f95baebcb\nf9637cf9-50f7-438a-9a2f-fe06555be81e\n7c46dcb6-baf5-4022-8037-d59481203f88\n42d51c05-dde5-45c1-b4e1-61bbb2f14b5c\nd60a4aa1-44ef-4ee3-9457-2c7ce23e0d24\n8a4a9398-1f94-4243-bfca-41bd17626815\n29420455-6287-4d6b-899e-0c66c32663e0\n09634ea4-49fe-4d33-8bf3-4837130c1eb1\n6176908e-2cce-4571-a967-12548c6103cd\n406777b7-a8f1-43d2-9484-7dd63533e6ac\n9b045c1c-cc46-42d5-ab9e-77bd4dd0e795\nd0eaa667-9577-4c64-b1d0-35c24d73f42a\nbc35cab5-8f4f-4428-8974-11574bfb7cc3\n83c2eca6-9838-442b-917f-a9fdb59d3bdc\n0945fbb4-53b5-4c34-9445-b05c5743f0ac\n300c1e40-8d03-4a16-b530-6efa8cbbc6a9\ncf09cf49-16ec-44ec-9ce4-3445d7422574\n2355ebb0-409f-4b69-aff3-b7e03e96a0d1\n9b1a9ee8-309b-46a3-8edf-d64a3d739181\nbf09717f-4c55-4a70-a004-b61eb3177304\nb014f9ae-9d29-45ba-91be-b4326d2be0cf\nd82c6276-3fdb-407f-9556-8710f60c0d77\n5ef89862-b022-4ae7-878f-7eaf485f153e\n861fa94c-f24a-4557-a550-9019fa47bf6a\n52d7624a-ab17-4107-a225-a94caad61134\n5d074259-4687-46ea-bbe1-77733e967092\n05c7de18-a610-4829-9866-43c9af0d0a2b\n2d94672d-ae21-4ad3-a127-7021a520e57d\n915f8fe4-3f91-4e8c-9251-9fa3f951c356\n564c07cf-f060-4aad-a5c3-09c7042d43a3\nfd2910ae-b87a-4c82-b100-174effcd7134\n688e9814-9eef-418e-a04b-32183c998928\nc51efc2f-2735-43d0-8de8-5f170edccd97\na02caffb-786f-4b46-aab4-108c82e434f2\n5b90ab1f-c46a-4b7f-ab90-eb489b4527d5\n9d029c5a-5ed1-4a52-bda2-dfef094da0e6\n2d71df24-16fd-48d4-8b8f-136e8ae110f1\n125d48dc-ebd0-44ff-8fa1-ba7c0ac551b3\n67761a17-5f86-44ab-8a28-7275abaddb58\n77d8036e-d8d2-455b-b15b-c39f4a9cc54d\n99972500-a131-4257-b0a6-cca1a0320244\nd998bf88-ef79-40f1-9211-c0b3232462a1\n1b56e8b8-f84a-417a-aded-5a9fd426cf6a\n45dee919-bb7e-4b1b-a6c7-70e6f73771f5\n7c7b85cc-1bd6-4ce6-b598-c83f857e0f2d\n865b2fd9-0c45-4dc8-a81e-f6bac0a428f0\n0970dfde-25d8-4a04-bbfa-9b87dd3a8fd6\n65f80337-0ca0-4dd8-8d3c-ef62155afd61\n586fcb79-de4d-4b9a-a3aa-30123f5d3d55\n42f37398-e29b-4374-99e3-01ed192dd44c\nfecae5fa-655e-4a92-bd25-59a4d51e75e5\n7d44ce50-cae4-4eb5-a8c7-0ae31490d289\n891de536-4cf9-4627-aa3a-ac02fd55a5e1\n92dd60c3-6c0f-4ca5-84de-0b6844cab771\n5abcb66e-2d5c-4714-a381-aa6d2e344547\n3726bc63-5952-4427-b408-5684425300d9\n03231c90-cae7-4db9-80a1-0739622c0b30\n37b8147b-56a9-4379-9952-18668de534df\naccce502-906d-42f2-b969-3ffa6427bd04\n1932f074-a31f-49df-8980-8d5519c052e1\n270e900b-1f3c-476e-94d6-38b74b929541\n7040b414-3f5e-43c1-909a-566c8b8d93dd\n2d89b561-abf3-4018-9996-b8f04b33c711\n81d2379b-9c50-4192-b94a-f87cffab7d72\n85dec336-b833-4640-9f3c-4113662b8fbc\n7c57b8b3-e5f4-4438-9c90-589affff18c1\ndeb3db63-ba28-44a1-b794-93f97576ac8c\ne65ac47c-ee11-4736-8989-47f00ca05dfe\n9a68936b-b4a7-4dae-bd45-1de3ec989b2c\n8ed1ce0a-a1f0-45f4-9e34-27dd4b00ac48\n0070f33f-98cc-45ae-a38c-fa7f9de3b7b1\nc4e8474a-a18b-414c-9af4-fdd14cebd81a\n0e6a8992-1483-4dba-b93a-8bcaa091906a\n9b1f8342-a628-444c-8339-e6f60e6f8c48\nd16e7284-0c3d-44e3-a7d4-64d5f33b65ea\n62cfd86e-5326-4019-8378-758924bac2da\n6a5b522b-6825-4991-8bdb-689fa16d710c\n17412613-b132-41f5-af6c-46ee87a3d671\n9329f615-26b0-4de6-8484-d49bc3c6a7be\n91d5a456-7abb-4621-bf15-9f7d6d86b8dc\n283c3502-49dd-40a3-80c4-cf6a6206f3b9\n74cf1cbc-189e-4bf3-983a-efb98a461d22\n822ab96c-843c-4c86-8e67-59c522060fda\n1e6cee04-8dd7-4973-a376-f612701370e6\n888da313-c820-4ad3-9f41-60cf75439b10\nff6d7602-c5fe-4e5a-9e54-c0d0bd65202d\nfbe58856-dd23-4bc4-a871-baf5b083e40c\n2fa0b128-21a1-4fe0-9084-d49abf7f3c03\n05dc8adb-27cb-439e-8602-d3e813007b66\nbae8bf3e-b209-4de0-9936-b33fae9b974c\nfd143908-c4e3-4112-a373-ec702bfcf5b4\nc42e49ba-6e43-4371-b7e5-a493f46afaee\n365acdad-5dbf-4bff-ae63-eb76ff6405ec\nf082038c-16fe-43c7-8855-277f3d8dc81c\n18b4a78a-2731-4cc7-9a93-d2abf3259e6d\n6bf99477-4bbf-494c-8126-c1e118750183\n87ce88ab-05c3-4e90-a615-af7cbb8e42db\n5000f324-12bd-4807-a09c-226c42e2c494\n99121c1f-1b0e-42bc-907f-60b4816938e8\n628a3292-5a70-42ae-bb42-62cef2e52df1\n4fa2c19a-0878-4cf6-a690-e8613b628437\nf3244320-23a9-4165-91ac-7085281db687\n8bcfa799-7a9d-4381-8bf5-fef53738c516\nfa3ac64a-70fc-4bde-bb6f-6c24af512b2e\n74915207-d6a2-49a4-bb5d-ca12b5345c23\n5285da59-cbc5-41be-9731-ffc572eeab0b\n6dca5051-5a39-412d-84c9-cc67c0aa38a4\n51780f21-2b44-4680-b80d-7e937067d503\n28b7ce2f-7eb6-4e91-ad09-584ede119a3c\n589db632-e9d5-4d10-96f2-986320ed2d57\nd201b764-6064-4993-9560-f1d0af22cab7\n8bdf7113-26e9-4862-822a-f7efe78e2ffd\nfd573545-fdf8-42bc-8cbd-12e25698dee9\ne2cd727d-155f-4db4-9292-0328d2bcf1be\n8fc7a816-9c87-4f50-a63b-01774d1d4451\nd443dc20-6954-4b45-bace-4a685c39ee1f\n399264c5-e842-4029-b332-bef1bff91fd5\n1465f6d5-dd89-49ca-bd31-6961c27c01f8\na3b2b3fc-e7a0-4c05-8403-1ff305999f31\n9f4de9b0-750c-44d6-80d2-5ad08078e734\n44702afe-a3e9-4c31-b34c-fb85e7172c83\nbde60900-8697-46bd-b139-812650d7bae4\n19ac6dbe-dcad-46c1-ab38-0051da9d884f\n9336cce8-cac9-48c6-8a63-7580df0d5630\n6de45dc7-5c82-42be-81d9-a9044a1baecb\n81ad7043-9770-47ea-a544-2a6b0840cdf2\nd3e8cf99-1774-4a51-b1bc-46c197c9fb30\n21cfecf3-45d2-4b41-bfb4-a471bb19df44\nc0220df7-c168-4621-bc81-9388f4607151\nb397f038-6726-4451-865d-a092754eebd0\n48c31f64-5da4-4d47-a2eb-607e846eba74\n82bb6fdc-d907-4198-9e73-078c3556ffbe\nfb6b6a3e-d8f5-4e2a-bbf7-2e189f29ee48\n8276171a-92d5-45f3-a63b-90fa22f320a6\nb5a51df9-7b40-4af1-8c3f-9b0fa889cd55\n153d027f-00b3-4d40-83ff-5a99ddb3fab8\n01aa583f-eba9-432f-8d42-a33f61465261\n0caec5ee-4ff8-4dc9-992c-8fb084c7b29f\n4fcf2abc-b5d9-4caa-ba2e-49d6a3e486de\n0324699c-9753-4227-88c9-00e282484c4b\na224bf6c-0372-4346-979f-49e8b7bea96f\n7101682c-45e9-450c-8349-ed00d0f8c1ba\nc1512e50-18f2-4b41-bda9-f2e24a3a651d\n0ee87da6-1f2a-4abe-b33e-a480619f6c25\na182a3be-4898-4445-88fd-6e324fc0f155\nf383cb6b-6e22-44b1-b2c0-607dbbf2c18b\nd3c14daa-8334-4e95-b665-d87a88215a4e\n80ef2d93-75c6-4005-ace3-eac0d2c6ba30\nd523d9fa-73b8-4cc3-a670-4749a71e3058\n12e4503a-7f1a-43a0-a1ce-f906cd88d2b9\n243e6647-debd-420d-824a-2c019e058990\n27115cb1-7374-4ed8-894d-0a6dfcd45959\n1eadad7d-85c0-49d6-bc73-50e6fd75d502\n6299e49e-dc75-4d68-8ec4-cf4d7c9216d1\n0645da51-90cd-434b-bc89-0de86b575b5c\n9f12765f-45c7-4109-8e63-b2db95bef19e\n502d5125-d2db-4eaa-837f-b2140802f2ac\nf709c813-57b0-458a-927c-cf9e5c7cca5c\n8e6c3fbb-dd37-4e43-b805-9eb096855f78\nfe987bc8-afb0-4e7f-8da2-2394161e511e\nee4ae529-dccb-4474-ad42-de6e94375232\n2c86e9e5-e895-46e3-a420-96622ac31973\nffc47fe4-f452-4761-8ef9-9efe1cfe5181\n36901461-8002-43be-9e93-4e91031e6982\na1222e12-18f8-4ff2-9e5a-b6cea2ed39d2\n5d4a8cad-6a4f-44a0-9594-e5ef9e7e2e74\n217c1cc8-2c9d-4094-bb18-9cc8656920a1\n1a9490db-8d49-48f1-9c00-ec6604b7e9f6\n80f4e088-91ad-4814-aa4c-ca25ae2f69d4\nb9955785-e9d2-4f25-9d34-8050c8559340\nc8e76550-a670-4ebd-9ef6-02eefc8c3f84\ne35f33da-aa96-4a03-b364-e19e3d0a2ce2\nbfa423ae-8bba-4cad-b992-107d7e69cd8a\n354d7a85-803d-4cb2-b229-7a5675fcc676\nd3778b3d-77e7-4d5b-8072-50aed81f2570\n5248b0e5-749f-4736-97ce-6f7deaa7c175\n93766435-36ae-4d9a-a9f5-9c4513684811\na19e90ce-ae9d-4267-b673-d28e352404fb\n339c2037-142d-4819-82f0-88fd76cddb41\n776f2639-12e7-4237-b9bc-b6bde839d803\n4c678168-daea-4675-ba88-f6e2e2b0efd6\n62ee5d99-d659-462f-a08b-f47a20a4d347\na72262ca-71ab-4ab1-8718-6340b65b60c5\nb07ae1b8-0780-49a4-b1af-cb834c4accce\n2e30c3dc-228f-4b11-8b7f-401e69c36585\n0cf3184e-c6c8-4aa1-b9f4-8cf9bb33a242\nd9a2003b-038d-472b-84ac-b613cd96a5d6\nb8e86d8f-f8a0-4d88-a093-151441b1f6d0\n66ff9653-cdc0-4bc4-93de-038f39541d0d\n976231a5-f7c3-45fd-b44f-c1c9302c299e\n86e9d804-eef6-402e-868c-20225b0d8379\n9cc9ab0e-7223-4e20-987d-4a9ffb96a956\n052b3b94-9b09-4128-af4a-88b554cad9bc\n6a1b6dce-b53a-4ea0-a787-9e982ced47dc\n79804f2c-8a4c-42da-ba64-2d86786d25b6\nf2d2ecc1-eb8f-417e-b54c-62ee6519252d\nf7d0bfca-9177-4657-841b-6d1c652fea88\n33e75163-57d5-4aa0-b104-9e46d2fac0f0\n5f6b862f-4b5f-4c79-b469-102385067653\nc28e12c7-f6cf-487d-be28-9997b0e733cb\n01403890-027c-4383-a294-73766da872dc\n9c74fe8e-816f-4574-98b6-402b3986d134\ne3242eda-34b3-4d19-8308-5f838f142c3a\n34892bd6-b242-40e9-87b1-de92d99872e6\n7b769f19-169a-464c-a8fa-d7e78b86016a\n54ccf5ca-0e93-4998-b0c9-72f246d6e8b3\nc7f70de1-fa80-48d4-b65a-f2296ac58467\n5f0daa81-71f5-4103-bc3b-74b2f4ea542d\n10134293-a2f2-4c4c-8ff7-b56c473cf7f2\n37a51798-2ec0-4ea3-bb7a-bc211df25015\n1970198b-a2c8-4b55-b243-2a367d8986ac\nf447e759-5943-4ae0-b85f-c12498d4d23a\n3a4e45c7-7d52-4e4e-8cd6-1fd4c93bd9e9\n2732eee3-ceda-4712-8ded-2c0c8d240953\n19e397f0-7579-4728-9415-1cc446fd4c50\n9f897e27-605f-4a7d-91d2-c634fd161fcb\n471dd430-bd17-4cf1-8494-e67b2743cb98\n142200db-8479-49ed-b870-6d5c9b7ca18d\na7e68aaa-3798-41bb-bdb6-2f4363eb3628\nb212accc-d345-474d-95ac-ef208aedc140\ne7b419dd-38e7-440b-b2fd-2a78db8fe1b2\n9b3b4cce-2161-49ff-ba63-923a3fc233cc\n8a3a795b-e6d9-46fc-91aa-f8c9bf7ca904\nb3afa857-5327-46ea-bc9d-4c95782f8463\n0a0da938-9918-4046-979c-b1a969befc63\nb68ddd06-0b93-4d03-980b-45cb91744f00\n06fca561-2383-4ac7-84da-ebb77d139dbb\n9bb8ab96-a12d-4d69-822d-1225135783cf\ne28e7c5c-1b90-4e5c-a6f1-e8d2dcb355ea\nbf9e409a-99d3-4047-9948-17b26ddf76b6\nec7e5446-b408-47a7-b567-f151146794f3\n90a7db07-12d7-4c55-b868-2a0b841c1adf\n6f88df8f-35a6-4fa2-8da0-eff2fab7d029\ne981ed42-24d4-490c-b270-5c8ceb7844e4\n7a5f5350-4b93-4881-ab32-6012439b3a88\nb9af9345-9d30-4cfb-b4c6-be8e6c63764f\nd0e176af-9713-44e0-8bc3-d76a02b64bba\n25a9f670-a520-45de-890d-3051b091ad7f\nba275d1f-39a6-41d3-b7c9-3581949e6b69\n4ecb22b8-d789-4545-8780-5433e5bb5b3d\n97474308-3273-4a53-bbba-792ba2e7c70e\nb85a5dc8-4462-40cf-a995-1836e220ffab\n38e11cde-1498-4b0e-bb57-c61e1313493b\n4d3e9a8f-67bb-4d32-8396-318b68d8d98a\nf6bfcbf0-a4d6-4b06-9d6b-d9d822599da2\nc3a0b745-b1a1-4fbd-8e98-02a4b08084ad\ncc22a700-568f-428b-981c-b7e52cbd07bb\n735786ed-de78-428b-89e5-c9efbb951442\n1042c439-3371-4fac-8147-67dfaa108c6e\n414a639a-ca39-4c0e-bf0b-e355a69fed1c\n7ddb53bc-64a0-4963-839d-e2139219f370\n0526a152-28fe-4340-882d-7e8e14ef39a8\n4c1538fa-5250-4e00-a6a8-e02fbd38e667\nb291ca77-691a-4c37-86e0-a06661cae056\n0c7deb95-68a0-41c4-a626-d19d9a762a0f\nd49c5112-b678-4702-8631-e68fafaf7bf5\n9a3c3740-cffd-4bbd-bdc7-00121f5fb2af\na6cf27d5-abcb-42f9-8600-48e65a61a0d6\n99c49ff3-bdd5-4253-8b52-8d69f36504ea\nbc662aeb-57a7-488e-85c4-3f85eff6b69e\naff7aeba-68c0-4d52-94c4-17a535dd5032\nb2c54dc0-84cc-49fc-b2c1-157fe144e57a\n2f2e38a5-b82b-4bb4-ab55-3c3c58481174\naca12792-7e00-4cc9-9c57-7a3b689a274f\nfd842ebd-b46f-409f-8a9c-39d5aa558324\n626b8ecb-74fa-4e06-9614-a56ccce32c14\n41f4a94b-be86-44e8-907c-06cc53dc4cd6\n954f609e-433a-4ee1-96f8-a95f6721a777\n57fa7784-1608-495c-830f-9e3ad84d8bcc\nb4e89734-51c6-4b6f-b312-8b8d2f639726\nb185a5cb-5b1f-4ccf-a486-126af412bdab\ndf5d6653-d61c-4243-9c29-29354fdf2a6b\na8b77d20-3ba2-4731-8d11-1edc68bd3da2\n6b84741e-7e5b-4506-8134-0513282aed61\n167c1022-0d53-4c93-96a0-1026c85ac481\n1476a9e0-cf45-446c-ae5d-ec8ea367eb20\n152a0436-6469-432b-b1d7-c17f8757dbe0\n72db0d1b-80f3-4133-8a7e-41df8492feaa\n8443cab2-71db-4a57-9b48-73ef72916312\nab1eefe8-3daf-41ad-882d-7595ad096359\n9d2fbde1-3eb9-4280-9340-116938441ee3\n4ba72342-e9cc-419d-88a0-a1255480bda7\n4706cc9a-7587-4f2a-a574-70c427a54381\n16165d83-84b1-4fae-abc1-934050032928\n1fa5b720-c432-48af-be72-7fcf5f810fae\n0615b94c-b7cf-4783-a412-05497d95a52c\n609b33d2-ce24-4d0f-ac20-50ddb1cd2ad1\nacf4ff67-ce18-455e-badb-d223a151722a\nd753cccc-9b6a-47eb-b755-7a3ee6053443\n4e037d66-d1b3-4d89-b1c1-e093e3df721f\ne7b8bfe8-ea17-438f-adb1-37abd7863a50\n6ed750d9-5407-478e-931d-a2dce0428fb9\nbd6cb04f-6b3e-45cf-84a2-faaf600b4dcb\n9d337d0a-e8dd-40b4-acfd-98fbaf33a055\n930bae98-cac3-4400-b6f3-b020647db857\n0fe4ed98-f5c8-4977-878f-f71088038a56\n2edbc2fc-5952-45d4-a5a3-dce1cbfe3b56\n17dde4bc-d777-4546-b243-e6b7580bd1b2\n828fab8f-ab4f-4a44-b1d5-7826a6dfa48f\na1c04e4e-25ca-4d20-8e21-bc4c362fe0b3\n1cd67847-cf92-4b49-bc99-525acafb8208\nf2f7b48e-f8f3-4fc7-b796-e8d4c38be044\nc1ca9b0a-57dc-4cef-91de-86144b01c3bf\n457a8bf1-ecd5-40c0-9103-eb2f18327ca2\n5b663a8e-c4d0-46bf-a082-82377339bb2c\n337fde11-9c2f-43b7-9032-a2a1c0b1286b\n53923ddb-9e58-4ef5-81ac-ce8c7058c38d\nf661decd-9da4-4747-ab3f-28187ed6f00f\ne2c0ec6d-343f-451d-9ddd-ff484bf8172f\nd9dc0d1a-db76-458f-9d3a-f7807d9830d6\n6ee720e0-1e6f-4709-9685-bd46d5bcc60e\n94776f1d-0dff-4e22-a382-a83f898f5538\nf0259bc9-8ff8-46e2-adeb-77ae1c345fe1\ne24b06a7-af8c-4b40-92a4-1a54bbaef18b\na66f5ffa-ccfc-4fcb-b0bf-78ae4b25d31c\nca57386d-9cc0-4ad7-b058-bce082e60205\n50454fb5-c9a3-46ed-95ca-75bd26a420f1\n71c03d54-57ae-47aa-a768-7acf7a3c7e03\n63b8cecd-f5a0-49dc-91db-ae83cbdc8904\nf203161c-b4df-4a9d-a04f-0888fa955551\ne3929403-3003-40e5-b0a7-a363a9f5f9d3\nab32bc43-ded7-4fd4-b122-051eba6bb47c\n21b85725-d7d7-4d55-bab0-75ea4699906c\nbe014ffe-011f-4ea7-97a0-2865c479287b\nc8c4b84d-68ce-4ec7-8356-fb7d478c8e32\nf1080d86-42b5-40c6-9e7e-b3a7c5b9dd9d\ne829d1fc-da2f-41f4-8aae-01a3766af6b9\nc0c83379-acce-4b52-bca9-6991f2db9887\n80157e7f-3a77-4dd3-9e0c-a666480566cf\n50619039-4852-41a1-bf5f-453451f8a850\need7964f-f58a-4c71-bba7-93304c68ee4d\n7b370b04-22d7-4026-acc1-d899b1c0280f\n54745f40-19ea-4ec6-b63b-9b57a1675858\nebaa2ea9-41f7-4252-987d-82de68714868\ne531b896-36fb-440d-b25c-d4a175e09c87\nf6a94339-b6f2-43b5-8a62-e6e7c33b341b\n7c3e63ae-531a-416f-a3ff-88b6fd69fef1\n6b11a13e-26ee-4c6e-942a-302211b1376e\n30753510-dc1b-439d-9952-f9dedeecf3a7\n1e52132d-0662-434a-a4b9-fa7adf006fc0\n371f7a6e-3517-4bc6-b63c-c987ac3587e1\nccc2b24e-a0ed-4cb5-aa5f-4da2d62b7922\n26af0fff-89f1-46bb-9348-d4206795dafe\na8d3de5c-e14a-4647-b11b-df44ae24444d\nd9696c2a-8645-445e-8d34-a2ef891efd6d\nd7d9467a-c32a-444e-8308-9e4e45442ea8\nd01200c4-d24d-4547-89f6-2e06d3681535\n91377d0d-94fe-40a1-a676-eb7ef06f4a02\n958df18a-f79b-4fb9-9800-4c928d658875\ne4a48411-1a50-4fdd-9403-1d73de6327b7\n7a89426d-9393-4f55-830a-5414412728c4\n8a5083dc-b3e3-42c0-9ebe-3b312f99bab2\naddeb110-e816-4f3b-8a19-1892be57b4ca\na3614ea5-d02d-451f-a955-522a909ee5ff\n31392c8a-fbac-4440-b8ee-b871c8ba29d1\nb14606eb-1e13-4d1a-a5a3-acb6eebd4e6c\n1515ecc4-26bf-4e9f-af50-eb3c9a14b809\n2267c586-bac8-45cb-a4cf-dbeed5fbda5c\nc25c9b84-a207-440a-8293-14a0b59d9230\nec6e7d98-f982-4192-b68d-e2d3f961d0b6\nb1cbe387-a050-46e0-bf45-6c384e909e94\nad5befc0-5a51-46ca-854b-859dd44cf07d\nd1bb93dd-a305-45b1-853b-b6b76c04e781\n0b50bc6c-55e7-468a-8adf-a02505f9b3b9\nb5cd2074-9521-4860-821f-f7db506a7268\n18c06bc4-2697-471f-83f9-0ba20dd2aa1b\nde082adb-034a-4800-9ef5-a59e15d28db8\nedcc8caa-aaa0-4c20-8c20-eefb972f6314\nf8f83d48-9f24-4fcb-aae0-f86ebe1ddd74\nf662c091-d502-4458-b94c-c0d8b8fae4e0\n9b185b60-f447-4570-bfa4-464247cb69d8\n2aa02802-0fd5-46a8-a73d-e14a1e8e854b\n31d1c8dc-cb96-462b-b70c-8956fb689e77\n0655d4f5-ff7b-4312-a63f-63f0a82838c1\n61ea5676-7a8b-4044-b81f-cb8b6bb0bc7c\n8a3780d2-960a-480b-9eca-38ec0915bfda\nbbe056cd-a930-4b0a-944d-b0faabfc7d51\n87d7fa6e-38ad-4fec-9ffc-aa257f49d138\nb879bce0-2779-4254-b4d3-2464fccf0bd0\n7d468215-8ba7-4a99-8164-029427fe3ac9\n1196e62f-af23-4021-bbca-94eaf40725ae\n15709698-3e69-4065-b093-deed3033f0c5\n3ef6ef33-8414-4c59-9e3f-2410118f1447\n690f202c-3801-43af-9ff8-a06fd6e05e1e\n03287e23-1045-4952-974d-6ac7b0278f2a\n6a2a42e5-24d6-4890-b786-0e45c701ecd5\n00ba51f2-23b7-498a-8b3a-d03a36e12f17\n9a1aed9d-08f2-48f8-8be3-49d920002985\n9f6d24fa-eb23-4bf9-a3fc-38de50dae0bc\n89c8e97f-8344-4990-a8df-188c9755baf7\n96b24f28-8503-439d-990a-f4286d4e5320\n0ca3dce5-1a6e-44c5-bd56-d150b39e3331\nb962efd0-2848-4bba-a224-89ca9c446b97\n0ffa1a58-7c76-46fd-b30c-9cfb82c3388f\n98ea5b37-e8d9-4e6b-b0ba-47d022d1e399\na00d27a8-cdf9-4976-b191-b676c659c4a5\ne7f7b1c1-adf9-412c-8ecf-47bdb2fd0788\n612c0f20-3bc1-4716-b6fb-4db4671b69ec\n714e0bcc-7f40-4ba2-a1a0-b056cf9a2711\nb0011083-956f-4c04-a289-dd837e83a689\ne0954d77-8404-4aa0-9ab3-27e11a8d8f97\nbb67909d-3a0f-4591-abf7-24d971ae2f31\n0471f0cb-0c2a-4b0e-9d32-e67ce469494d\n06215d90-689e-41d4-b7b6-4e5c7533abd5\n0c6bddec-c538-4c0d-9f09-26a43c98416e\n5c92850a-3ca3-4bc1-83df-c49b915ebdce\n2ee218b0-2406-442f-b325-8b2b7946d9c3\n28789770-0ad2-4718-a334-3b00fe47acd1\n862b3db9-77d5-45c4-a59e-dd4cd7a62d11\nfe621a56-a426-46cd-8f6c-e60ccf66825c\n56d0168c-2f84-4e8f-b71b-046e69511af8\n84f88f2b-153d-4a5a-b1c1-13b4317ac4d1\n31b9053c-f5c2-4ca2-804b-06da79f8ee22\nbfe47a98-5e39-47e6-ae32-a68de1fd7794\nccaea360-35b5-4432-91e9-b52ff47c66e4\n2c58d11a-3402-496c-aca6-003e07a66832\ned3dfefc-7ed6-4e61-b4c8-eb07e98b6840\nf1c5373d-0d05-496d-aafa-53cf1c95f640\ncab76860-1865-4f2c-978e-b2f58cd0db23\nb809e832-1ab3-4054-b41b-345a2e0e3fac\nccf481ed-2905-4392-a7e5-d9a2f3043d1e\nb0df99ff-1fd4-4140-bcca-af019eddd84f\ne27e5297-8409-4867-a635-51f79cada24a\n8f5a7dbf-388f-4c5d-808e-0785e413eade\n3f3a5e12-3fa8-4ee8-9614-b49fc0782d09\n7045cdf1-ccd5-4627-aa5e-b8ecad20817b\n31fc72aa-aa97-4137-ab62-bbcc5da6ca50\nf51a4db2-e56c-4905-b064-ae3f54a08f7d\n49fbcc21-619c-4805-813f-6869dce06250\nd42d758a-864c-424c-9f5e-dc8a28ff6a72\nca4d1a7e-8df0-49a2-9fc3-cf1b557447ef\nfab933d8-29ca-4e33-a0d2-5ef6bd28c8cf\n9e361869-efbc-4ba1-bf03-361757c18dd1\n47f0c849-e2d0-4ea8-a965-e043ddbe8d73\n923ec75a-b0f6-4460-a078-4f982a4472d8\n885864af-3919-4f81-a9c7-3fa780da304c\n55f97e3b-1627-4a0a-a5d0-fbcd5c8a2a11\nb9b71666-6e12-41d1-9f8a-88fbad2ccb6b\na6e002c2-dbb7-4a32-a58e-d7ae61b5e245\n53c449fc-50c8-4921-ba2a-0c399ab98af9\n89c989fe-41c0-469f-9ae7-adfe7579ded9\n7a3e91e5-4342-4e28-88c9-45e951f741b9\n5a524208-61e3-49c6-81bb-ce1e2df47cc7\n9438f7a9-d8e1-410b-9d7e-b444f52bc719\n70727c61-0f5b-4f95-9ce1-2be56d2a762e\n33335ce4-b344-4f1d-96d8-373049c49a29\n9114cb6f-b695-44a5-80f6-0fd5238ee094\n35e89b8f-d257-4c48-89bd-1b8991ff1709\n392d825c-7491-44dc-a922-2b47a136287e\n21387fc0-183a-4c4a-ba00-c9f6f55ad785\na808dcf2-1900-4848-8189-9687739e69f5\n43d5eaa5-9f1d-4f45-9cf2-dce573a94469\na8b86591-0573-419f-9adf-b6bb98a263e6\n26513422-37b9-416e-a467-2a1b34f74ae1\n8bcd1362-d184-4487-a763-939ec066f1de\ne67d7ba5-f019-4388-a5ae-d0022f1c4135\n880a0dee-7a1b-4cea-aab2-5a8215475073\ne9a52029-89de-48f2-9619-f03e93ecf096\nf831d57a-48ff-4f3e-9f7e-c0807fe3b8f9\n375b0a6f-3814-45c1-909c-804d0d61f706\na879c97a-c908-476c-a97d-406d287692ea\na06b2f64-fc3b-4315-b38b-3fbaa8bf8ee6\n243cf6b4-2ec1-4d21-a64e-c833ba35fc9d\n46b7d00b-2aa2-4c79-867b-a33e72730d15\n39528868-cc9b-4c9e-b88e-5a92fd4de0e4\nb74541fa-3924-4f2e-930b-63c1564cc53c\nc57433f8-3ab2-4bba-895b-b59badd824f1\n70e721ca-0f89-4c46-ae7e-302b74262c7f\nad274083-5ef9-4bd7-b9a4-e92b2dfdb6a1\nbd9b92d5-e6c4-4d9d-94c0-fad819f62d8e\nf83753c2-dec7-4fbf-8ec0-48f1cae94758\n88bc46f1-c27a-4f28-b5e8-043d838605ba\n28c9e82f-1663-46b2-aa65-7c8114842a41\n6fab6ace-2617-4e3e-9e73-5a5828ccf608\n9b1d93b8-bfc2-4afd-824b-337b162870d9\nd03e5660-67bb-4531-9541-ac85c2a3fd91\n5ac77bcb-2d2a-4a0a-8b61-ed7f7c1cef5b\ne2c1b1d4-8a85-45f3-9094-7a216d25179d\nee602e1c-2db0-4663-b20e-1599f3704b8b\n142e34df-c774-4df8-9def-1d03cf3d3387\n006c175b-ed6e-48f2-b2ba-5a64ebc18d7d\n5635fcab-0689-4fea-991e-e41afedd65eb\n37e56998-b7e4-477d-ad77-6bd3db1c0956\n359b75ff-4ac0-4692-bda4-3cc04713f8d3\n5f0b37d8-5ada-47d7-a68e-8c8f65a63375\n868a5b8f-d03d-417e-b3db-dc0c449d04ec\n5f3070c8-db7c-4eb3-a4a4-2842fd770b90\n5c85dc2b-93e5-4920-959c-ec569ff76f7d\n3cf9c8d0-c26f-42da-96c2-746ed0321289\nde389485-4e4a-48fe-aadf-c07f701b63d5\n78b5b5ec-8017-4c39-a711-2c34746f3ecf\n91e1ba6e-7248-44ad-a7c4-899a7046c56f\n8a9ac477-56c2-4f02-af4a-75d84f13d8f4\n5dd295b0-66c8-4863-aeb1-b677f04be052\nbab5c5a7-9e4c-4a17-81b5-5493e2175d1e\n16f079d8-7fdd-4e1d-a85f-b6ef7c8032f6\nd173b920-638e-419c-8c9e-01281c6506a3\n2a963ae9-eb8b-4ab3-bf40-69c2f3e80e40\n441929c7-c0e4-4565-b3f0-3d464ddff331\n2a24cfb6-1a3c-4d1a-a1c7-67b6fad67ae8\nf79cac19-7ec2-4d84-a695-9967dd2b368c\n14f0515c-b213-47d7-984a-bc337a54e588\n7ee07dec-1e34-4374-9417-ee493f5f153f\neecccc79-dc33-4dd3-a032-dd954568d214\nb9da2191-2f57-4bdb-b215-7ea1b066e8f3\nf29c71bb-2f42-438a-b619-5cecee0c3b66\nd6a32caf-d970-4929-a5bc-924a707fe95e\n839a99a7-0e78-43e3-8168-b379d258379e\n828b1880-ce7d-41c2-8e86-107fce76e128\na113a587-3bb3-42d7-898e-d554c0885e0f\naee587e8-912d-4a87-8c52-8656c5008d7d\n944b6514-79ca-4b31-b6bc-709dd8521e9c\n4557a604-f247-469d-a35f-aa04de6556b8\nafe477d8-aeb2-4d51-bb2a-32a3b9dc594e\n8553250c-4302-4340-b1fe-631bfc4a8f63\nf06a944b-b34a-4d9b-8ff2-8ef927a1a398\n7178e9f5-d7b5-4fb0-897e-91555b293869\n82d733ef-f4e7-429a-9648-6dffba33fe32\n583d6616-c03d-4e22-9315-fe939e4b90d2\nc83b0738-56a5-4e83-bce4-4726a7ba13c5\n12b87468-8bcf-4d56-81b1-66b916343b42\n9ac66a04-4172-4e33-bb57-021f08c99b95\nd3e39358-8fe2-4b95-8e3f-c0a24ecc8dcb\n03ec782c-7dfe-4437-87c1-41ef16298c0a\na73803bd-114a-41ad-aa32-b058895b5949\n7f6096c7-020d-4935-b27e-36ca61b640b0\nfd42b832-26f3-41a1-a8a7-cab2ce434cf0\n2b28e05a-3ccd-43b3-9a8e-b56287550a47\n93ed6098-6753-41b1-9705-4a742884dfbf\n424570a8-3d8a-4c2b-99d7-c81067dcea0e\ndae41f44-9fec-4dad-83c5-6efce356f7ca\n8c2f0a61-ea3c-43c7-b23c-ca47127ad9ba\ne0f2700e-e84c-41fa-873c-6626a0b5c9c6\nae640abf-8ef5-47d6-89b1-aa059fbbf938\n701d225a-7cc2-4fb2-b8a1-55e4595c6674\nd7c75210-a7d9-40c8-96aa-ac128f373b88\ndfaa8201-42f2-457f-9d77-59cc105f8c77\nb70f614a-20fc-480f-8e8c-43f741b9be38\n9e24bfdb-7c5f-4da5-8759-3451ace24100\n3cdf7825-6aff-45f1-bc11-bf8013df8bc0\n54735c5a-9eec-4fea-b130-d0436f1c2aef\n257ce1a3-aa45-4d4a-99ef-7a010acec5ec\n889f07c4-f40b-408d-80fc-63ed545932e0\ncba0f56a-e8e0-492a-a822-b3ace171bf48\n398cf570-75ac-4a84-8cbc-6e8e8fa464a7\n0b4bd125-daba-445a-b670-a6d39561a260\n2121e5bb-8cd5-4a61-bedb-bcffe54792f9\n20538761-1c35-40ec-87b9-167e4ee9197f\nc7566119-2d69-4dc4-98fe-144f6fb9fe4c\na431214a-c8df-4d48-ae4a-ca49568425af\n54d448bd-e98c-4468-ba28-6ffe10e48634\nf292d31c-217a-4b63-a7be-1dc40d571111\n72634222-7a3c-4010-af9b-f69b30721c28\n65310d50-4985-4381-a788-d497f0e8b9aa\nb3a46e95-e67b-40c2-8aa8-a54e5c4f4941\nf386b2c8-04ae-45a5-902c-c7ad35d8de7d\n7161fdf4-fc05-4fd0-ae2b-96d11fbeb614\n1aba96de-50c1-4230-8153-269e8a36f159\n1b974e71-94b0-4633-bece-cabd3241983e\ndd455f25-b088-486a-8769-cfabd0aa9b03\nc19d67a7-76a3-43e2-9e27-2f122fec404e\n6708a986-7fa7-4995-a8b0-9a03b330352a\n45aedeef-834e-496e-a550-1c1728b9f78b\na475013e-1791-4fee-8fef-108343144deb\n0bad4683-cd0e-4820-8188-cd7e825dec9c\n944e1570-ce5e-4fca-99e9-a6cb8bc13b31\n3a6a03b5-919b-40d2-a8bc-5c8ab64e939a\ne86f7d8d-7690-401d-b026-ad7fa0bb2e19\nd4e96ed1-700f-4266-ada3-ff0ca7d6f7e4\n254d4480-4308-46d0-8f83-86fd61399bbf\n2362c8d6-cc9e-4a75-8cbd-b9a7e7b3e86d\n120f5e2a-22fe-4353-8673-a5b3e79ad6a5\nd20ef8e7-7d44-4ecd-b95c-6f599d67b71e\nc4ca44db-c22e-402d-a23b-c9e2fa445acb\n521e34de-48aa-456e-bfbc-cefefefd87c3\n0ec5a426-a7d4-4217-a997-699849f92698\n5f3c3e88-683d-4afc-99d5-334f5d10fcb1\n79ea1b49-733c-437a-b1dc-f8480d2bffa4\nab79842d-7176-45d7-a22c-46a2104d8b6c\nf8f39999-837b-4c7d-817b-23fc5130b968\n5fcd7bc0-0cb4-400d-b34f-6f4065e81b5d\n845ecad9-340a-4118-9107-5532438d6ade\n99bc22b9-0879-438b-b133-fc37da8fb974\n46e13df2-aa29-48f0-86e6-a4acaceb687e\nb7fb6fc9-d517-4f2a-9c4d-9ff2f64bdc1a\n2be0fd2b-f5d5-4fb6-9de5-21752c0fd939\n75f1a908-8a5b-4a7e-a88a-d7e52375fccf\na932c2bd-bce3-4ac0-abf9-a7116e5eb080\nca545cc8-5107-4ef5-9e88-922c518de6cf\n76397787-1f82-4ddf-bb00-4fb05e48823f\n49f58e39-f1e1-4d59-8bd6-f94443295d55\n6cdb3abe-c8ce-47f7-919e-a6f4ccb70aac\nf12e9680-0fb3-4f0f-9dfb-041e6085cc17\n309a54ee-9cb0-4327-95e8-63f32b3db2f6\n6fd5ede7-64f3-4a29-89ca-50f399d585f8\n302a1c24-09e6-4c2e-bb29-fc8d63afc13d\n4f40592b-b962-4aaa-bb72-186a19f8adcd\ne05f885f-836f-414a-ad39-f3f2d7594956\n1df4e8c6-786b-4e96-9504-9b229e2bfc0f\n81c40bb9-bf25-4fd4-8504-e5ad3c3c3fcb\n522aefe2-f48e-4080-a730-11311eee7aa2\ne3d93e58-ca76-42ba-ae09-dcd8900ee23e\n02b84c99-a30f-49b3-a161-a66467a9a40c\nd39dfd91-77a7-4750-9742-cf833e0d3833\n81232627-f2a6-4b49-96e8-971c2879ffa8\n8ae4d947-c022-463a-9ca8-f050addb1656\n1ca0cdf1-11c9-4519-9e47-f4ce882b7990\ne5a57baf-2100-45a8-be8f-2f9928f7a69b\n09f0ff78-4e79-43bb-916d-1a7960d225e9\n09f34564-9ea4-460f-b92a-305dfbf505d2\nc2a5e7c4-c145-4759-be8e-88939d82ec3e\nd10fa1bb-5f1d-4870-8f86-b49563f22bcd\nec14672b-84e5-4dba-ad3f-76ff77ea8826\nc77a34f4-70e7-4d46-872d-cabd83f370b2\n7e6dc470-e262-4f15-9926-fa8785fbb87d\n886110f7-653b-479c-abad-c477c6f3eb0e\ne443ee58-fb60-4a49-8d52-5c69fe8e70af\n2070284b-1464-47db-b90a-6cf1cbaa9c2b\n1325e9a6-b50f-411e-ba4f-1dbeaca4a0d0\n27d8e445-99da-4ea5-bb55-a776b9708ef8\n4872ac90-a0a0-446d-a1f6-36a25541afa4\n36dddf9b-b5b5-440f-8813-00d23b459720\n01c8c3a5-8aa1-4838-8a48-5e599672b194\n0142ca47-4998-4b62-a6ca-69d87383267d\nb5f6ddac-d0f1-4aeb-955b-31e50601cdcf\nea2a4b36-495f-4355-9115-1576e9855eb1\n6848c20e-582b-491b-a691-7432ed7be9a4\nfebda1ea-53c9-4c35-b7e3-b249744afc4b\n1c1ddf27-e1cb-4022-8e88-a23614e8f05c\n2f4c7459-9426-40dd-b7a9-39a4e0e684f7\nbf7cf68d-6cb3-414a-85bb-dc7d29dd636e\nfa1bd2d9-5bf5-4ec0-8fca-c7ce80b8c417\n1afa96eb-6e0e-42e8-8cca-0838ee5e900d\ne1dda47b-250f-4c84-a55f-6309cb31f09f\n9a871c3b-4874-4336-acc5-36d876abd3ea\n2b99faaf-d855-45c9-bf70-9b854b504393\n8a2e82c9-4c00-47f6-97bd-c58552fd4438\n6dde0fd3-249c-4ae9-907a-507725a9c19f\nc0d6868d-be48-46df-a494-ca271d7f6da9\n7c73a9cb-0dba-4f91-8856-30ebdc9a5c96\n6e2fcdb9-2485-4088-ac66-81f6c97ccec6\ne73a7704-e8da-439e-a96d-b3f81d496187\n31f48cfd-460f-4334-b8f0-cecd085f8151\ncd2c91c1-24b1-4683-935a-42254a36d573\n695f37c3-8e4f-478a-8957-247ea4ecd1bb\n1cc23bdd-e9dc-4763-b390-63708762edaf\n3f958253-76ab-4821-906b-221fd77376dd\na1aa5210-dcc7-41b6-95d7-1f3f63f3eb03\nd787573c-b4c2-47b1-a693-4ecc39f0c71b\n363501b0-92c7-4bb6-b357-4c72003efe8c\n8ea65e2e-e2e6-4d55-b34f-47c46acee2e5\n0e65ded7-5d91-4c51-b98f-b293d3942ab3\nbb48e148-c345-4901-b217-138828fb9721\n9e10479e-6d77-4e73-bbbc-55154e05ead2\n5bf95fcf-a840-4fcb-9163-358836ef467a\nae6c5d98-4eec-41be-a0ed-031cd5a508fd\n36175aa5-7596-4a00-9ebc-6b2c83574990\nafb4124e-2796-46dd-8005-c90f33407ed1\n20e8c469-07e3-4c37-ad35-8e55e150d123\nbecbee1f-b39e-4243-b4f8-1587c625a8fd\n705ca132-bd69-47bb-b93a-c17e2a2c20d7\na892efcd-2d99-44c0-8775-4dc8175612fe\n8aecaabb-c5de-4a57-98d1-9b8c98246c77\n0d0f0d8d-2553-43dc-9ba2-e600dd69a0b2\n11f0f96f-6bc1-4e11-b840-c726acb94665\n60db281c-a560-418c-a002-1bf2a2fe102e\n2a30fa3f-c6e6-407e-ba52-0324f857de25\n76b19a6c-a801-43d9-bfdc-dfe40c24e363\ne37d2f1a-2d7c-4156-9994-28412352ff26\n27f82ea8-6c12-4a14-9a44-171c107d7b24\nb7382b53-116b-4e96-b415-88e5285786ed\n076706b2-a4be-4efb-bd70-df419d67508a\n142992e7-c0df-4e02-8aa9-022b0cc4ded9\n58b09cad-4b8d-4031-94ab-5e83fd142fdd\nc9698ce1-188c-49f8-aad9-0a0fe08b1de1\n840a3e83-a768-4d9f-84ea-63da4cb6afd7\nb4879a88-745a-4927-aeee-9f34ec618747\n0cdcec57-305d-412c-ac98-9123ab1778fd\n40faaf29-c141-4bb5-9f90-61ae1c90dda1\n674711b8-584a-4a40-a5d0-da7e58398efe\n9ff9a413-bf68-454b-98dd-4d365a7f3c92\n986def8a-6399-4cd4-b0ac-77fca451893f\n09f522b0-4900-4570-b337-576c17af75b3\nc89bb2ef-a457-4877-9ad6-c28844be0e4f\n59083d0a-b080-41ef-a38a-2cd45f541e2f\n971e33f9-e309-4a25-8ebc-591ebd53ba06\ne3c2f73d-c710-4d77-ba29-ebb2b318813a\n369af7ac-731e-4b85-bff9-34c1f50f0506\n4f7fd893-ee8d-4d5a-8b0c-f7366f6c8559\n8be4cff6-4105-476a-9c65-a6605d9a1891\n7ac583f7-da8a-4289-a6df-340201440e5a\nb653987e-d267-4c2d-be15-121182b22086\n2066856c-ece6-4bfc-9eb9-d844e61e90f2\n287250a4-bb3d-405e-a3fe-9d22494b7557\n4bc38628-df30-424a-a0e0-c6d3218c63c4\n1bab2047-0477-4131-81fb-2067dfffbb8f\ne14a0072-ed1d-4673-892d-f30d9f57b1e5\n66815a9e-d17f-4b93-a159-aad83a0af9c0\n3c52e51c-79b4-4680-bf5e-589628507de1\nbdc52e3e-fc54-4e62-bb29-11f6fdae7415\nb3d7faa4-ac28-47ae-ab79-df06725a9078\n9b7cdfd8-d38a-4925-95c8-e4e3cb267e9c\n9d241580-1acb-400e-b7d0-c0d32cd20d92\nd9cf13af-af76-46af-9343-909085bb9330\n9541e052-fdfc-4541-af56-cf5e2db40adc\n6c661c70-6ae6-4e4d-b7d4-b20a236a7c86\n48b3e115-5122-4341-8efe-444a76f5d6de\nb4996c16-3b84-49a2-966c-f6df1146665d\n2ed65c48-1aa1-4d8a-8e70-8f13bde4a315\n3406a5d0-668b-40e1-ac47-aeabed07a96d\ncc2cf549-e0ee-4b83-b351-9063eaa66b3a\nd5e49555-3500-41fe-b50f-ea4d80aa34ef\n6ad6b70f-8c4f-4c16-8b7e-8dc36965bdd8\nc4cd3fd6-4db1-4603-9727-012e5795c44e\n1cba9eb7-c7a7-46b3-994e-008dfc206238\n06998581-2298-4333-9fd2-ca54746636c4\n4ca3cc3d-079e-43d4-a156-90c3f4553816\n10d49a81-a317-46ff-9ac4-2f87c3b0e6d1\n35744f93-86ce-409e-a21d-63fe5d94113b\na295b94d-bcd4-47b5-87e0-c0f0171e6323\n5f6ca849-2b6b-4421-b6a5-46b0fd081e39\n65e491d0-da3e-4c38-9975-298997e0980a\n108e42dc-318e-4a09-9af1-3a9ef8a95df4\nc9d859c2-c450-473a-8cf0-8456f5b5efe9\nbb616c6f-850f-4103-9912-bf5cafbc1a47\n60da2d80-681a-461c-8ec7-aa3e4ed6f541\n04e07e07-1e19-4995-8be0-01dcaf83eb1a\n05a638e2-9b0a-4460-8f66-cb6e44067f20\n74d960b9-23bc-4955-af2c-2244c518b370\n919870f5-006a-4a59-add5-18b4e396b275\n94524e01-2996-410f-925b-6c5af3109d1b\nbf5c72b1-ee1e-4d0b-94eb-882087febf64\n96082709-71ec-43d6-8b3d-4267c279f69e\nd40df54a-def4-4f73-b607-650304ce38fd\n9eb7eb4b-daa5-4ea8-92d7-c5f07affec10\n22db58a0-4f46-45fb-88bb-1e21d7432240\n7cdfc5a2-1aff-407a-9a5c-47aabf31a42d\nd8d38fd5-3a7c-4348-82f2-4f0bd71738c1\n6ae45105-aa2c-4a5f-b792-063ff6237d39\n13ce7255-8cc1-48a8-8a0b-e880e3d0d884\n61284481-f976-4896-b65d-8b6475ac759b\nda5c5e97-5c54-465e-b99b-b711c387f1bf\n64c125ea-cec9-482e-bf2e-e9731281d91d\n7b9dd49f-d633-44c3-bafb-46927f97ea85\n61dff99d-e7ad-4ee9-a881-3826d5e3acab\nc8c4e1d3-3af7-4225-a0cf-42e8129b8ae0\n737c29ad-93e7-46aa-94f9-66e05ce5d9b3\nf4780b9e-2137-44d9-a996-46137f6c7249\n0587a9e1-eb14-4440-ab25-566cddd422f0\n21c4c9ac-3ef9-4f27-a278-73ed44008929\n3a6133e2-6315-4aac-8113-c33caaf5b4a0\n3eb1ea4e-6443-4aee-aee0-60e40e3256b1\na10efd62-97f4-434d-a7b2-9631c4091de0\naed1a48d-c2fc-4e5a-9536-b12628823014\n14da85fa-66e8-40f8-97cb-8ac1d9f602e3\n3c08c3c8-e408-4471-a8a3-162493bb6287\n2b4fbfc7-8b9f-4496-ae00-f98712f48fae\n28e6fbed-2231-418f-878c-a8d597e5aa30\n4d33cdc3-7379-4271-8059-97ecefa344a4\n6b3c989e-d019-4332-9c51-4c62c9080aa3\n0405b1ae-c6e8-423c-a361-bc21032a2937\n9b5983fa-2be2-48fb-b4f9-cc792e24ccb9\ne55e5b1a-2984-4458-84cf-d028dac39997\nb0826397-73b0-4e03-b3e6-42c11e6865e3\n7e481f08-fbbd-4f27-865d-7cad51540977\n8bbef335-0211-4995-8348-b8db140b8454\n028ca689-051d-4093-988b-d77b6b867e82\n96d050ea-52ad-4cb8-9036-4200cbc891cf\nb9b58227-8fea-44bf-8b23-cc020e35e31b\n539d1e66-5c21-48f9-a942-42f68ba12eb0\nc9a52c6f-d575-463a-a078-5b4368f35630\n5079b3c1-a5a1-4655-a931-2a53b0a87f20\ne16d8252-fdb9-4cb6-9d62-d6b126cf6f50\n1834a17c-7022-482d-9533-652747fef210\n79685725-35a2-45d2-9120-c7573ac058c6\na01a900f-bed5-49a4-a86a-d8caf1d1bb00\n19059c0a-71f2-462e-8dcc-fae2e4473d2f\nbbf90079-c108-4c27-bce5-a376f18e108f\n5900088d-df6b-4b20-abfc-1f27bfc5c986\n02fb2741-1bac-4d51-9663-339d700e9811\n9fa73310-3242-4952-b6b0-11b0d1d15538\nbc9af64a-deed-4bea-b301-38881fc5d1ad\n1ce3d757-d7aa-4040-b2b7-2faa5999a019\nc3b7fd68-ed22-40b0-9c5a-10fbf0a43813\n203da6e9-57cf-4480-8754-ae28a6ecd9ed\n53acecb3-0d27-4367-9b04-942c32a30401\n0999bf20-0754-444b-8e23-ffb4dda412d1\nc6047624-a639-43d7-a0c0-ca808f0a8760\n41a62c31-5bf1-45a5-bba2-6618c629a6f1\nf757f9ba-22aa-432a-b70b-fa81cb8d60e6\nd7a85711-f3b8-46bf-89f0-1292d273a124\n8685476a-4b0d-456f-a8db-dcc8e70a8e79\nb7e3e2df-6f71-4738-82cc-ff0d03cffa61\ne4ab3d29-cf7d-463a-a5c0-dcabfa8b2944\nf694170a-bab4-49f2-ae1e-6b2aefef235e\nfd868f2e-93c0-4570-ba4f-f859b200bf00\n36c10568-71f4-458a-a831-11bdf6d4c25e\naab78dc0-fe52-4d32-ba2c-972b5ea63355\n634a82b2-be1e-4f02-9b2a-bcb241f6619a\n4680b210-8784-40cc-b4f2-101c8876cf3d\nc3351dc5-e8ec-4919-b348-4082ace758cb\n73101689-4eca-4eef-a291-d310f017badc\n9ec0eb01-d57d-451c-84f6-ffbfefc88c3d\n563149de-dc22-4ce9-ab14-808c77a9543b\n899618f5-09c8-424d-832a-7a59d6ea65a4\nd1dce6c5-8958-44a6-98b7-d0020dcf02ac\n9bc05c4a-467b-4eb2-b264-04ce232d7fb7\n24ce5bff-8acb-4272-98b8-d91fd08aeba6\n23003e00-d055-46b1-b6aa-310b6aeaca3c\n29791576-5a30-40c4-a3ef-27175263952e\nd69d1426-e3de-4508-992a-2ca769196866\n73cea881-0cac-4bd5-b4d9-999db90d9d91\nc222bd2a-77ba-4dcf-958d-1fe86f71e342\nd1b0704a-f344-443f-aac3-8b29300cbec7\na82861e1-16db-464f-831a-ebfdcf4157be\n3013ac55-6b52-4e1b-981a-8e7d28c8da53\nd70a4503-5e75-4d1e-bb0f-281647f9087c\n6cbf7c15-0437-4cc3-91a1-59d22bac3a10\n2119b457-fce8-49de-beeb-5abc475a3fdb\n27520df8-2c59-42d1-91d1-5e5b984953d7\n63b8412f-b1dd-491f-b06b-649a48613e95\n08f63098-6be9-4cf0-90d0-ff1373db3640\n48d0cab0-eb55-419c-87a0-a10d8cf6ac9d\n129428ac-da9a-49ba-a397-1352a6f0009f\nf68c3dc9-131f-4151-9435-f0b66187c64c\n2f3adb93-158e-4e98-b55d-db8a435b57c5\n05d0df3e-b0b7-439d-8074-1bcb176f2582\ne8f309de-4e17-449c-89ea-d9b274d641a2\n7626d3a4-d6ea-426e-9e3b-c98226ecc5b3\n33ae5cb9-7280-4d27-8955-5308cb02ba25\nada795de-686d-4c60-a76f-851f41d0d59a\n9d9899ff-3eef-488f-8695-7c2b3ea6f52c\nb0621174-af20-44c7-b263-69cde674c084\n37febb96-d215-4268-b4a0-ac17c556a857\nbe7424c9-08d6-4343-96f1-fb629c0de17a\n5767fe8f-b8d6-4034-90d1-34210b52cacd\n409fd33c-37c6-43bd-a7bc-5e9382de4bb1\n38a2ddb4-3164-4201-8bae-8dec20bd87e8\ne9a190ed-eb42-491c-94f6-643b06ef0db4\n7bb9dd73-c8d3-42fb-84fd-ec040011737d\naacb6b44-b0ee-4a55-9068-fe7d112e4862\nc6e18467-eff6-4eca-8ede-467807bc8372\n8b5ba8de-b382-4aa7-a135-615608ed245b\n6d8ab17e-375e-4c21-b9ea-c4c970549ffb\n1e81cc8e-2f59-46b5-8891-858c47800b7e\n04533855-8101-4ea5-a70f-0405d74e351b\n79ebb127-e950-4d98-af2f-a76f2014bc19\n95ddfd98-6922-4784-b906-e3b6f0f5b718\nea501ce0-4ad6-4337-9863-916c392c30f5\n7fdc2568-cde2-4086-b4d7-8790788f78eb\n6985a26e-bde8-40bf-8ce5-fb65e2875f37\n86f25f10-7b65-4e50-abea-8b1571e57ce9\n30764ca9-1816-46ce-9275-85ce0b84f4a2\n200508a6-88a4-4cbc-af9a-1a7bfa197f1e\n28a41770-6b71-4484-a603-aaf0d3b3c68b\n68aebf8b-fb62-48f8-8a4f-de2d4dafb9cf\nc2aad46e-a909-4664-b95b-8d3927c7e100\n36005435-41e1-471f-9306-d263064decdc\n1eedb75a-d04d-432d-bc33-b322df333190\n822b542f-e301-4645-be2c-c1329bc23f92\n336484db-ff2d-48e5-8640-6db45b02ac51\n2390f525-5a49-4d53-844a-a31b500e8fa9\n94c298e3-1b1b-4ab5-b4b4-98e8b9e5b707\n4a36e9bd-abd5-48ea-88e7-6742ff07c747\n7d076c2c-1e19-4d85-8bec-70ef980c3da3\n6048eedf-95a2-4778-98a2-9df0f7c7e129\n24b531c9-e919-48b9-b17a-438e797fb123\n7ed9a0a9-f840-4533-a0ba-46a1971e8f31\nb698e2e2-d424-4547-ac86-99ed22b76d14\nd3c451fd-3c68-40a8-b929-569382463d03\n521a5f6f-ccef-4806-b9c3-93b918f5655d\ne4691a5c-0e0e-4ede-a53c-e41c7b816b34\n995aaaa6-8de2-4c27-89ae-8a0329c96b2c\nc9821a99-6c1c-4c11-af89-2e0f0c10b109\ne854bbba-6de6-4478-b6b9-772b961c3532\nad641432-e0e9-4439-88fc-71c77dbec9be\nd9122568-8179-4e28-aed7-cce581ea8bec\na7901a44-446e-4a58-ac73-3da8cc92a917\n6593f77e-f9c9-4a81-a218-a03d4d3a1f90\nf2499362-28c2-4a15-a24f-6cb45e221bc2\n2d2f5632-e32a-4d57-b564-80f3478ca977\n0f4e3b5f-7fc7-434d-ac1f-50e30ebcdb84\n03a6731d-f6a1-4954-81a0-f8c0386c2e12\nef5bf479-946e-408f-b96b-037f6af2644c\n69760ca6-6d81-4962-89bd-cc758fff4482\nf042b458-2124-439b-bfc6-e8a5aba04c28\n3fe06813-ece9-4169-8c06-09ee6a5fae7a\n79f7a630-5b9b-4f88-9f0b-eeb1e58c64db\nbe490e0f-8732-4a5f-9dce-8a0eaaa619b1\na0cf270d-d0bc-46d0-9ac2-5564365c2259\na3f73204-3e0a-4331-a67e-cd1ab60722fa\n2ec06f51-f2de-4d09-8d36-6f33c0beca4c\nc9c5967f-1daf-4e8d-aa68-80053790515b\nbf2d921b-f3ab-496b-b12b-f39043fe1bf1\nafb2902d-0c87-4211-998e-b305ce70c739\nace27f61-8933-447d-b68d-9e492b5d33f6\na454510b-381d-4e14-bfd9-6b07c8973d6b\n127089b6-d223-49a2-9ead-5f7a24ef9d6c\n1609bace-51f5-4d87-aa8d-af41c376e78e\ne5e0d058-9bf6-41e6-9b63-3139fa55e90b\na5dcc653-5ed3-4c5d-bba5-41a319aafc57\n1eb37d40-01d2-4166-bf63-c247eb8cb62e\n0bf471b8-3421-43ac-b1a5-590a2d3a6955\nc3f62975-df62-4333-ac27-b029786c1e18\n367d56ae-294d-4484-b809-f444faa55600\n3263bcfe-11bb-49a5-8fdc-e6c46c7b1c81\n16c15ff1-8a6f-4f19-84bc-b54f76cf6148\n2068d467-b8a9-409f-a2e4-db692f2a8f0f\n77c14f13-857f-4be7-a0ab-5782f5775544\n2358cfbf-4941-47fc-b387-18109350d117\nac8c4e3f-e62b-4926-b409-c6c0474145ca\nc1d46f57-ce04-470e-8301-6251d80772ee\n6e730538-0acb-4044-8cfe-e01fec971e38\n4a65519b-6177-4a2b-afc1-ae9461212788\ndf778a87-e822-459c-bff3-1cb5640d2f98\na92a029e-9fd3-404c-9115-f1d7638412cb\ndeab07b6-dd3b-439d-be0f-3af7272915ca\n887674bc-6f89-4ee6-b9b4-2452fd6ba184\n345444ec-4a3d-4d15-9dd0-c9cc83dbc698\n4700ae1a-e505-40cd-a3b4-52e7048fe95f\n4ed25c19-5784-4512-bf40-fcd17e17a78a\n7a7fbbb3-cc64-4618-8088-34206b3c28a1\n6bb3f230-bdf7-472b-a285-9e40955e79cf\na15b2cbd-4ba2-4fa9-8e57-af613c6fb5f4\n8471522b-a2d0-4eed-970c-1a2a58cbe6c7\ne23626bb-d891-440b-b315-202dd04908ea\nde71a42f-48a2-4bd7-84c3-8f9b5bb82686\n5750c846-233e-42b6-a41a-bf878a06b356\n1172bd95-de4e-4065-afe4-b61f821935d4\nd151dae6-0fb1-4ca6-bbd1-58cb42c7a250\n724cde1c-f65e-4bd0-aa70-ac8f99b0d324\nb0add2b2-2f5e-46e0-b3e4-fe333d361e2a\n3c330162-8a78-49f7-a957-f4d6ed4b8af4\n2d58ee57-e189-46bc-9aae-2dbbdc51020e\n33974766-6d27-4598-a732-e26572e3f293\neec7877b-68c7-46a2-8414-130015f26eb7\nb8604feb-dfec-44e3-a079-dd72b6f52e62\n173d5856-3062-478f-8036-11cd2faef6f3\na3b26df6-d4e7-4679-8c17-d39ec5a1e4d6\nc60ac7af-4450-4c57-bcf7-546b5d82cd4a\n0e12f3d2-0f8a-4f42-bb3e-7166d69dd88e\n5b148693-f1de-4c97-a6c6-df922bb5521e\n6df8d596-f1e8-4ec2-bc9c-41a1d83de1a8\ndcf5ae7e-c1bd-459a-b8c8-3b8b51a84c22\n4c6299c3-12f6-4ef2-b3c3-3908dffec100\n09e1bed5-794e-4558-9750-61e1c709273b\n91427c20-efe1-49f7-8883-355e693ebd3b\n4f53fb3d-f2d2-4271-afbb-e5d36fd28233\nce107878-2c57-4049-bab7-5f2d4c6c07bc\ncb0c1047-046a-4aa1-9949-2167848f0818\n52edce91-05dc-46c6-be74-b707f1aee381\nbed656ba-c951-4d7f-8f74-1cc307e5f7d8\nede257c8-233e-4fd8-a5da-c91fa74c51ac\nf357c760-e47f-49cd-962a-bcfbaaa76def\nae331bbe-faa5-4eb1-ab75-5f0d8c4c6f3d\n1fd0cf5b-6938-4b22-a2d6-69c7ae5e83f3\n167828b3-7cc2-4a81-93b3-144502dd2271\nbfe15d78-2d3c-4fa6-93ed-dda091088ae1\nc355a943-50dc-4e57-b4e4-b4dccd8bd033\n3795a704-0529-4127-b84a-450aee02c95a\n3e66c337-31da-4b64-81e8-20b0c430337b\n9582a142-cf5a-464d-bfd0-59ce18435da3\n88d127ae-a743-43bc-868c-3ee88136c8c0\n91246fa0-1602-4223-9bce-1f85a77bd081\n97fca218-c1c2-4a82-9481-9a640b6e0b51\n41a31db8-8a01-4ae5-a6bc-eb8a610cc814\n6215fe77-776e-479d-afc3-cf46c3475195\n38cccf05-47c0-4f5c-a0e2-2ba1a47536c0\n3b7a4a51-cada-4ca3-be5a-a0246bff8a3d\n8e3e4632-9edf-4cd2-a104-3e90f462f586\na6a6decd-4cbe-4f73-87f5-45626affaa07\nf3f9978d-bd15-4045-882c-f259ad520f91\n937512e3-995f-4945-8096-42c2ba44b746\n6bf2ec88-8330-4473-b5c1-4aa227e9de19\n4533a5ad-988a-4044-ab75-f4061eb5a1f1\nb2f2bf9a-7d18-4dcb-9a52-dc8918636a4d\n12bde1d5-ff37-48aa-b274-96fce40de123\n1478c134-1e61-4e36-9d80-8739338fa9a9\n47697f17-bb59-41d4-bded-b4c69ff11459\n1d64c044-ac91-4756-b1ac-76c46fed803f\n75bdd63a-6635-420a-8913-6653fbf0716e\nf5047639-4ffc-4351-a8d8-f46c3e9fad0f\n9e12cc9f-3d07-4c8d-8920-213f14fcc260\n77c51ad7-3022-400b-be37-be45b5de39c4\n2171940f-8f5a-4975-98fa-a074cf328d77\n00293675-c127-4e20-a7b8-746177d5dbe9\nef307d7c-7919-44b3-b05b-290c6e76bb3b\n80d163aa-3f54-4ca4-bd6a-a13b23920aa9\n50b4aa54-8a45-488a-b99d-09dfdfeaad10\n85b45a1a-9af6-4efe-878f-ef51c755f6c4\n167d2d4b-bd29-4042-bed4-cc91a3e86973\n98b3be29-6e66-461c-b29d-6a7b4a17d45b\n339f0f34-47ad-4b54-bc32-b0c678deb95c\nf1c3c52e-f62d-45b6-8149-969f9b69c771\n0cdfdc09-5212-4e8c-90f4-9dc2be0f576e\neb58b082-1744-4134-92b2-1eb20156bd22\n5caf00dc-ec1f-40ed-83fe-00cb2d9d6e3d\ne4c617f5-2d20-42ef-b8da-129b359ffdaf\na4dbe0f0-2f1f-48e0-83ae-3fb9100d5538\n90478c06-e5ea-4d9a-a0b3-af0c18a10914\n73331898-f81a-4c7a-b690-e2158079e564\n30c9d0e8-68f3-4463-a4e8-359ff95f25c4\n821061c1-762a-4a14-9e60-fd1c03a6cc70\n90726942-a467-4c05-8ea6-4b5129ac3c58\n45c59af0-776e-4233-850c-5da81ac671c8\ne3eae5a0-ac3d-4e52-bac2-9ac4671064ae\nbfc8a2f3-287a-418d-83cf-b9e3217eb398\n3d71c5d1-7a16-4b8f-bc22-c02a16ab8af4\n9e023ce5-0e1f-4b01-83e1-b32b1f9c069d\n3ecfdbe6-ee3d-4190-be19-f128e69f6723\nf5224a37-cfff-4922-aa8b-7e3b4646dc66\n484bc699-3da3-4e5b-a9d1-de81260b73f3\n1ca35744-108b-4f03-b898-bc0550f84c4d\nb70b5bab-2a98-462e-84b9-d5b135d0b64b\n81358ac4-5b43-4e20-b90d-5eb366ddef21\nf5d823c9-d9f0-4037-8fa9-b268e187ef5e\n577d3f22-64ba-49eb-9544-0072f325ba8c\n17ec64fa-3a56-4e97-a0a8-fc3df49125bc\n7d13ac74-20e6-4af2-b826-c24908eb6d15\nf1013a38-54b7-40b9-b900-7ebaa5f38c80\n0fd1d284-b4a4-44fd-a191-844ffb1d1483\n899aac00-c59f-4f77-9d73-f0d3eb08d548\n03d411f7-5e18-41cd-99e9-466b6d6a2b16\n9f67cf22-0063-4cba-b7af-f000d64f63d5\n19a21cd7-58ba-49a1-a5c6-186d07a59ae5\na57eb7f2-3bef-4ce7-a620-0583f89370e2\n520e0fd1-90eb-44c1-b70b-d754b159357f\n8c531d5c-6263-4668-9561-71ac05469d5c\n8eae17d6-6b33-41df-9525-71ee75c73e0f\n7d3f7bde-5b89-4e44-8868-47f32222e7e2\nee341352-81e2-452b-b557-bc524fcd8e23\n1f4fe610-71b5-4eb9-971e-f2540bcc4d58\n320961c5-c02e-4339-8567-b41c7c587b6a\n7f97f26b-c8c2-4168-bab6-eaa0346718f5\n109a14e7-7dee-4938-854f-d38c6750e606\n7d830b56-43ea-4467-ad19-b0fcc565f459\nf2921816-40ae-4d53-8361-e1e9c9b33a23\n06809130-fc5c-457a-86d8-7f1780755d0f\nd8a5cef1-6661-4c40-b35f-cb0fc20293b2\n83bba4d7-a087-4e58-b2b2-65257949dbfb\nb7108f8c-1a5e-4c81-b677-806903782f30\na5a15973-9b17-4ef7-9871-1ce2f553696b\n8626eac3-55e0-4fcf-b14e-872ba0325e88\n6a2f2312-a5ee-4990-9e35-f16e115ae1b6\nfb9902c1-f351-4b00-b851-34e106c41367\n1be4a1f6-f48e-406f-a114-5ba9e41eb4f3\n06e301b4-c306-438a-b48c-d21666a6e86a\na3d3e7a9-87be-4d95-a162-1266cd974b13\n7b896f66-db0d-4504-a225-f745349f2215\n25c24937-3084-47e3-a0c0-8955ed71899f\nc807777d-ecda-4562-983f-251dced04f41\nf90f0e4c-a47d-49dc-99d5-a10b422620b4\n9b99c0fa-cdf6-4513-bde8-0e9b0d3d9fed\nc092f90b-ead6-42dc-83ea-38ee380cbe52\n5e724836-6723-47d3-aac0-d747239208dc\n63c96d10-18a4-42a2-8d32-d2098fb8320c\nedd3c787-2567-43bf-b67a-84a1212dccae\n78fa4e7e-a7ca-4d51-ba2d-75a4995acbe3\ncee74233-5d57-4a4c-8467-f9ae2885c8b8\n74249241-49e9-4dad-8a7d-8438b520255b\nf2b76bb9-ca53-414c-89c9-c7adb1f6e388\n823c3455-8633-4d74-8f0c-21f43048e40d\n55699afc-8eba-4e8c-ad16-2ba467077f16\n9057a6e7-0d85-4c6f-8440-1a2ce0350f6f\nd68d1eb2-9ea6-41b9-b54c-ff322ae6f3d4\n3b664ba1-8aea-405d-b6e7-af85fa4c8ff6\n9a9f1f28-eb85-46c9-ad78-a2a3325ec981\nbd6b30c0-4a21-4a4e-b7c3-6f6a37c8ccb2\n3ce604ca-0e97-4d00-9c2d-221bfd66e9ec\n5909631b-1d48-4cb2-ab7d-ddb9e9340af8\nd01835e5-a27e-4734-809c-7054a9a8faea\n25e8ab8f-ed24-40f7-ab2f-cfa647ad5b3f\n3a20683b-e0dc-4945-add1-3dc0f4e95006\ncdebbeda-9027-410c-bf32-c185103a360d\n980bd2e6-10f0-4e99-8815-c2528199f45e\n82a5b623-9632-4d67-84ca-f10f57623d29\nd15d854d-4ef8-4eb4-be07-69ec7c465e5a\n691551f9-aaca-40c0-8d5a-862a78cc6cf6\n887494c0-3324-4762-9d9b-f20d84fa7ac6\n5705f790-2928-4345-a518-0a09996442c8\nf2ddb707-bb83-43be-9123-8a44b52e88a4\nd9e56328-84ed-4728-8588-5c0395b99b9f\n77002c66-c592-4e7a-89e9-3c57a62665b7\n17dff233-1020-4b00-b2c4-2cd47e74db09\ne7ee59c7-a699-4630-a896-cb8699d77c50\nfca422f8-0ae9-4598-80ac-c21975290156\n3164203e-6853-4200-9a8a-5782b1dee647\n2cb7417e-d241-436b-85b8-4b4a0ff81a60\n9ef08e4a-8080-4f19-9d1a-ed0e918e9164\neb8793fd-1f68-4900-8edf-7674c584999b\nde539c9a-c3c5-497e-abaa-6fd5d34f3753\n0d158bea-70ba-47e4-9526-a8d4e2d78089\n40756096-21e6-4250-9437-4d30298dea40\n402ac2ff-1d5f-49cc-b639-35ef69a60f70\n85d41fd0-d380-4e87-9151-c3bcb3bbcd97\nba9003f1-f32e-434d-abc5-cbec74821205\n7539e66d-64a5-4032-80e5-04a3fd2a261a\n0e51d167-6b54-463e-a667-c6c35204997d\n0009cccd-1b22-43da-9108-6622f38cea58\na8d44076-255d-449e-aaf2-d76a05ab8322\n47d41571-4420-4346-be93-a4b2d2010415\n45255459-4c63-4c34-af1d-028c25621ac6\n9d2568c0-c595-4540-8b70-fd53eb7a0a46\n4eeac6af-3fa5-4a3c-805e-05f8e6e06755\n31fef88f-3161-46a4-aa6c-a39f59bf1821\n18736f6d-210b-4554-8d01-c252355754bf\n1dcab261-276c-45ce-8374-19f8241e9f6e\nded76258-4b7a-43f9-a8cf-5fdabfc31d8a\n30270d9f-0fa7-4a4e-a147-bb389ddaadff\n12b68c6b-c9df-4185-8f16-d141b27a2212\ned3799f8-c048-4fa0-925b-42b7c063c63b\n9d098ae8-2924-4129-9102-8a1052795275\nb2eec62a-0efa-4916-91a8-94c3ec6dda18\nacd50347-967d-495b-9e78-e0b86688c32b\nc14be861-b89e-4680-aff0-7d7824f5abc6\nd66d3748-3ba7-4443-8896-72623a04c3ad\n8d0b5678-d9a1-4a19-aeee-9ed6f1d80348\n13f9ca3c-2ec1-443f-9e5e-e1ee1d5f42af\ncf493984-5fe1-4880-bb90-f6b913361dd5\n7dd06c07-0fbf-4655-82e3-cb76e58fed5f\nab070709-93b5-4a71-a230-2bd6a851951e\nf86fc8af-eaa0-4158-a0b7-5ca5b96a1dcb\n96332df3-e518-4139-aabc-770e44fc5729\na2671d16-8f1f-46e8-bd96-4a7f055202d5\n172ee63d-b325-4baf-903a-7030ea54b65d\nbfd9f227-cd32-4775-9df2-341e71840085\nedffcfd9-9c63-4783-a74a-ce6ff2f4311d\ncd75657e-08a5-4cd7-9bfa-b9bb589efa5a\n79ba5e70-4217-462d-a0ea-8f2df590104d\n539c670e-3c39-4639-a7f5-acd4694e66f5\n664127e3-3de2-4b96-a20c-f32dcc9f5958\neaadd8d4-162b-4b4f-91bb-63ed9fe2fa5b\nd1c06d51-cfb6-4636-a941-970d56cd78f3\ne2df934a-98ce-44ee-932a-341d1e98a6ae\nd07e0c6c-5988-41e2-b21b-9c2712f3ba59\nd7af86d1-ff2a-44e1-aaa7-3c404587a1a0\nd4a1ea3b-eaa1-495e-ba44-5c69be668f27\nf6d1c239-f009-4963-ab1b-1e0b19a045ab\nc5b3e9f0-003b-4e48-94c5-efb818db982c\n408756b9-bc22-4e95-baca-922e1f4d7b85\nc44386ce-e198-4fb0-817c-428fa0515f56\n72c59c9a-fa1a-42ce-9552-4715cff5f8a4\n3014b99f-d7a8-4a07-ab2b-e6e998c1eba0\n4a7f3a93-0a13-41c6-8c8d-ac0c15c81d38\nbacac5cd-9548-44af-bc90-9962e065996b\n93524d8b-8db3-4082-9822-63926650b0de\n6b246a07-c739-45fc-96a7-76e16e0377b0\n9fa696c4-6b97-402e-b755-84abf8a0be8b\n7e9e26c9-0dfa-4969-b582-aa4a0f930fe4\nb2b97127-b1a8-4539-81cb-816de24c0bf4\n2aec3df5-e5bd-48d7-971c-0708936276d4\n59360fbe-82c1-43fe-a997-9edc8e1054fc\nb6379eb4-5c6b-4c4a-847c-8abec2ab5265\n5ae5493e-acbe-47b9-aee0-b258ce639365\n25647c38-6236-470f-bce5-44bc1db69fc4\ndf389702-fd22-4d09-bea6-da2cf5679c7f\nec6dfc3c-6f7a-442b-816a-76c73cc38a48\n07f966ad-9529-42e6-847c-fdefcb02662d\nf077191f-d73e-4ca7-ba8a-0e0d58fb0a14\naf17e086-8260-41c3-990e-ab5a80b541d0\n95728795-6ece-40de-96a6-0e2b4bac1357\nf80b48f1-270d-48b0-acd1-1c3ced7425d1\ne83bad75-66db-4ba2-8ba8-9f019a3bafd5\n05a4af51-2cbb-4bc4-9e92-bd761a14f112\n2ae15f88-3d93-45f9-bce4-bbd92b7f9cdc\nfb0ce48f-747c-48e3-94d3-fad6152d2acd\nf7fdc0b2-d822-4559-808e-e13c56c2fddd\nae60ae58-3d75-457d-b298-13cf9cda48e5\n9f84dccb-9356-4078-84af-faaca16f10f1\ne895bf47-d835-4e4c-8ea0-72ffcb66fb88\n58808775-2cd2-43b3-9167-06c87c417a74\n043cac76-1c9a-4564-be91-9db0a7de2960\n772ab627-5166-4626-847a-c9565eed828d\ndbaa867d-91bb-4e31-9193-2d5de5289735\nec5e0358-e509-4681-ba57-8f618d341b64\n3f5818ef-9641-4f5a-a151-afa8a5be5e38\n4c6a4160-56b4-4724-b1bc-d20a057b7bf9\n6d60f1dd-5e0b-4ea4-a255-5d8002848638\nfdb1e681-e08a-4fc2-b8c3-b977cc815cb5\na1e50c6f-a26f-432b-9600-21a6c2fc4bb3\n835e9f33-87ac-4125-958d-9577bc5902cc\nf40a4110-d950-4019-9e1e-97b722f8e2cf\n21189bf1-2bf3-425b-90c6-47f1b8cec2a8\nef734467-b633-456b-b23d-e5c981b69f9d\n819b7ecb-3217-40c8-a89e-8ae9d0e139ff\n2be31a93-095c-43fc-b788-df14a6e85b7d\n78137d1e-21b1-4ff0-a917-25b027c53161\n8df6b04c-5a63-4cfc-855b-58d39dc73ff8\n53d3c4cb-b5d6-426c-ae36-39952fdef703\n0053080e-2254-4414-b26e-dc02331b644f\n74bea41f-0464-44f9-bbe8-4ab0f449f123\ne895dd21-8647-42b6-9396-21561290f0b1\n14ded8a7-b3cc-4fa1-8667-5b122e2f350d\n0c7b9232-b852-449c-a704-b31b3049ffa9\n6c933b34-a85a-4f3e-85cf-f55ec1763479\nfc0dc55e-db89-4831-82cb-cc6e03f5b72c\n9e8ddb05-a5a6-4abd-9352-233d474671fb\n8598ddf1-373f-418c-9845-eae50710af8f\n10066c35-5e3d-4fc4-8b1a-781f6d189572\nc6b7c857-5f08-4748-a3d6-71b9f1f7ca24\nd1e39e0c-6af3-4c0a-986b-096cd01f149a\n93cae397-c827-42c3-b02c-63bdfb0008bb\nb646326e-05a3-4f42-9821-cf26bd0ff281\n22a0bd39-2919-4e01-b29b-545c48399f85\n144f9779-02aa-4312-9cec-6a61d8f776c6\n7ea94221-6ad1-489d-bf0c-d9f6a40e299f\naedb0d1e-6ada-40ea-9cbf-998ea7b73180\naa30e2e3-0d1a-4ce4-af8e-64ff49ad382f\naf1340fe-675a-4cb0-882d-e9a44c0e6698\n09a9564d-5930-485f-a6ef-8d73401267bc\n8f7589b7-f23a-4146-9638-be99a9b4dea2\na46bf9c3-d5f4-4e6a-a0c1-de0155ff0ce5\n271953e3-66cf-47c5-8521-d28dabeece27\n4f99887a-c1e2-4519-af9f-742bc938734f\nff5a75cd-af8b-4226-b994-26517f09908d\nf0dc2960-d16e-4303-9a6f-13f8d7c32680\n7b592d5e-4c5a-49a5-9aea-016834658cf5\nabd255a7-d92c-44d0-87b9-f401bd50eb55\n7b95c62f-6cd9-47d4-9f9f-57c296bb924d\n90495a7f-93c3-4b3d-a1aa-8b535a365371\n2b0335bb-9d72-4754-9a87-b275eb0a36f5\n5e8760ba-8085-4c69-ac59-1ec2f68f6f07\na76cde9d-07cd-4289-a8e7-47a2d71bfa70\nf1678e34-a316-4bf9-acc9-6521b7ef2a24\nadbcafa2-469b-488f-b4ec-d8f539f6e927\n6e3e4cf2-e1d0-4a4f-ac2d-d1549b738922\neac71f88-9aac-4232-9702-9fd49d3e5fee\nd9762d91-917b-4781-b8d9-24c7e7abed3f\n8d488512-b6c7-4984-b783-648a71618245\nfc1d5836-1e8c-4f48-9fbd-75cb55953178\n7ab980bf-a292-4064-923d-1322ac411708\necde3217-d0fc-4817-a5ae-60cc3885050a\na72864ce-2609-4c44-89c6-8c8ef80e3a99\n06602acf-acf3-40de-b9bf-b4bf4481f30b\n2dcaf6b4-9f8d-4d1a-a8e7-1c932d57a5f8\n7720e56b-f055-434c-a01d-f83c9566108f\n15196768-cc28-43d6-9857-26c5f8368aac\n931a557b-db30-485e-aa67-32527115fcd4\nd2d2fa09-286c-458e-9ba0-c1331f12105a\n049c83fc-3b37-4b97-99eb-cc64beb35cc6\n38575809-0870-4a1e-97f4-80907caa10f1\n4958f19a-be42-4d0f-bb68-5da70078dd93\ncbf07703-06f6-4842-952b-efa9f29401c0\n6da43133-d910-4034-a7f7-8d2cc6e43241\n5945542a-4926-4e4f-91af-847b20754473\n43a3fe95-0fd9-45bb-9ad3-59f079002695\nc4f035e5-656a-4c3b-a525-df407861117f\ne951c0ae-bc1d-44d0-b02e-5042d1ba4580\n73655ab9-5d98-431f-b33e-8f6fd87b256f\n623caa1c-524e-4204-b7b9-2bf3fe6a5705\na334265f-d605-4696-942a-def5cd167898\n81a19b71-7567-43d3-8bfd-5f481284ec7f\nd43850d3-ebbf-4de7-9f2e-ee8fefb594a7\n0f25db59-b89f-47c4-91e2-76ec66a6b40f\n11654e3e-1fcb-40c9-adfe-0c683520a067\n95b6228d-64de-40dc-8874-22dc57aae285\nb2489843-09d2-4fde-9d14-231bd79effad\na0deb2cd-ed4a-486e-b9e0-dab4341416e9\n4677d1bf-2fa5-49c2-9d89-3ce88cf85d5a\nc435eb1a-2e84-4a64-a2d9-325e26a58172\naf445a24-4b24-480c-b0c6-be4b98dbbf64\n9b6a5078-bcd5-4c8f-92f9-3b49e19998b0\nddf45821-cfb2-43b6-a09e-d24e23eaa58a\n2e9a9687-d1d0-49fe-8d9c-e227dd75877a\neee6a12b-1126-4eca-8187-19ecb9a27448\n895e3400-f687-4ca3-a071-ba28f027970d\n6a6ccc8a-0725-4c3b-b689-06e7e4a65193\nc1f73ee6-d393-445a-a9b6-ebb2dabac9c7\n37de971f-3c9e-4e71-a959-6cd0116d6544\na45350a0-384c-4ac4-a79f-d944f3184c78\n94819398-24ae-4d3e-8a9c-8b5c10e63fae\ne51414cd-5843-4d1d-a00e-2de54f6bbe5b\nc02e79a5-4704-41b3-a987-8c76d1d29899\na2d7089f-a784-4983-a6da-b107be7336b6\n3938f4c7-f7c2-4ff8-b85c-520621c51c7f\ned3d23bd-787e-4f00-a0de-fde17b661553\n791f01d8-b25e-4cf3-8206-a3e1122e2647\n95f12645-b3cf-4575-a694-c62d93cf1aac\n8e5cc701-80d6-415d-ad3b-96e24911c686\nc42504f1-e3ed-466f-a418-d07c8d684cd6\n44c9865c-0018-4d17-a1bd-2bb6c826129b\n4f2abbe6-1456-49da-b3d1-aa040376048f\n43620c17-8972-4de0-9b80-09ce5c2f9c9c\n55e8f492-96a6-4eba-9d5d-b657e4831a77\nc9ea2842-ee93-437b-aa99-2ec7671b1f59\n1097a447-fe6b-490b-b096-d9f313cb51d2\n655003a1-f305-4020-8743-2b2e1f5ea5b2\n33e86f34-ce20-4003-aa7b-af4eb82defc6\n7ade16f1-43dc-463c-b87f-e00e921069c0\n6d73de70-306a-44d7-941b-6c5bc2320eb5\n2fae5a60-07ee-4f91-8cd1-c07dc39dc2d5\n19f4cace-8e99-4e1c-8863-a0b710a3ad55\n86c13a99-2cda-4552-81b3-858f69bd68d7\n8445d2c9-53a1-46db-8e02-a935c8c5a989\ndc7335e9-e327-4dcc-a864-e32aa3592e4c\ncec5796e-ddb6-40fc-98ec-8d86188fe14f\n2403dec9-4cea-49ca-865f-03a1529136cf\naae5e15a-3d66-40cf-99a5-d08b8eaa8917\n55e48e18-c8f5-4b07-955f-323b48f18a3f\n2b3b62e1-025f-45d0-bfd5-bee034727c38\nf1e7c390-2219-4b73-818b-688863b49d47\nd8110afe-a219-400d-b466-ba355ea93b0e\n67e42f60-ce4d-4c28-bc72-256c2c33956c\ncf4cfed4-8c12-41d3-aea0-51b78fb8ef08\nc50a6ea9-97dc-40ac-987f-8b5a4aac1f6b\n63a7005c-39d1-4b3c-b449-31452445e32b\n8b220981-34cd-4b02-962b-3e14590f2c90\ne70e521d-6c7f-4fc2-baae-4c1156e130d4\n6dac616d-97d9-4e13-8af8-1b16c1038958\n05e86a23-92c4-4959-ad69-1ae0f8aac373\nd74db0f9-4e8a-4e9e-89f8-716d836d781d\n943e24f4-92a3-4a15-87e3-3d69d10269dd\nb1206645-5938-4458-b11e-2378c284fcd1\n2a149952-d724-47a7-9b7b-926e0bc17ef6\nd9a0a95d-ff25-46e2-9235-602b3d512e60\n4919c332-b1d2-4dd7-b994-75bb8df0d008\n1fddc3b1-9ae0-459b-bc68-3fbcf41f28ba\n17507d40-b1eb-434d-aa36-47ff22be97d5\n01e48b61-e9ee-4d7e-b7a1-96a586e7e063\n2e77556e-89a4-4325-ac13-b7c347699e51\nbac2c850-1290-4448-82e7-8aa45f0bee61\n166b5d51-3547-40f4-a80b-e6ea4ebff676\n19a3d499-9ec9-42a7-b765-62f7aad7a5b1\n448d2dcf-4a71-4164-97a6-5a0059cdb828\n9a2cc2ed-088c-4dcb-9c18-a3fa4e3069c3\n3913fb43-6159-4943-8f87-8763ef2daf6d\n249af2ab-b0f8-4c06-aaa9-e9536243aca3\ned69fb56-da64-4de4-aed4-8f38d4fb38c5\nf4fcedd0-5803-4f01-a153-cf02b201ed32\n5e3c90d7-6dd1-41ee-8559-b286202cdd78\na5734abb-4cc3-451a-965e-ce3eb3b9641c\ndec17186-8ffd-4a72-8bff-523844804c5e\n37c93448-4912-4934-bf41-bbf055ee022c\n0b461a46-1025-4bb7-8b10-3a37e10708f2\n80d9b305-5be3-4bc9-97a4-8bb454b1c7f2\n6d9c30e3-1fd3-47dd-bc20-b8f42152405b\nc2847ef7-43ff-4ed6-891b-2c48c3c503f3\n4d6f4e1f-53af-4cbf-adc3-b2f71ceee99e\n3ec8a47e-a696-45cb-9be6-3512bb64a1e9\n1b32574e-5251-420c-8553-f1143fa78d92\n517f8fac-5855-45df-bc38-71084edac033\n7407963a-5d1f-41d9-ab77-b827d579fbee\nd9e7ffd3-9627-4da5-8946-d78be1b61d02\n48c8cc93-54d3-45de-a01f-73488cd0e4a4\nb6ff537b-98b2-4b54-a96d-6536eacec57e\n8eb7e2c2-d42b-4953-a0f3-e2cc53eb9547\na3a7e169-8721-42ac-8749-7c02f316cbaa\naaccdd64-ec5a-4a8b-b96d-895ae9af8b15\ndd037a25-c5b1-470e-b753-0c5ca90696d9\n9869e35d-8d5d-45b6-ab02-9cd661038189\nfa383f19-5f10-4bbc-bdf3-cdaa34bfd236\ncd58efc2-0af8-4e58-b0d8-96ad0d8456dd\nb99f7c6e-4e25-43d4-81cd-10e5f4b47eab\n7b5065b7-b3b2-4322-8b05-600f0f56a86f\n97f6102f-903c-491a-a09c-dadc9909e71a\n7d2cd6da-de94-44e1-b144-84d0d99fbff7\n6e8138c3-2933-4511-a7d7-bfbf52f3a36c\n46247dcb-dc8c-4b5f-b258-ca839f1f4294\n8fb95072-43e2-4d02-a2df-74c8b02a5f9d\n6bd38c2e-5773-4f2e-89f8-240315e1dbb3\n5ef84bae-ea9d-40d1-ae5d-ced12dc1d7fc\n74dc2922-7670-4144-9e7e-e6da10bb07ca\nc9affa03-ed97-4dd9-b382-d6f7380739b2\n64c0efc9-81e4-44da-8344-1e8e4d6c1ba4\ne541c1ce-e28a-4e74-af66-ec538b7e5196\n6b0cca4f-9ad1-4a16-baf8-9252ab9308e5\n051cf88a-cc0a-42cd-b0ab-785ec18714b8\n4a25c62c-2448-436b-8b38-ec00de0b2b07\n4c1703ca-66f8-40b5-8797-89a9166e85cc\n5ecd06ed-3645-4af4-ba97-1f6a3e8faf29\nfb32fe6b-55be-41dd-a828-538863b803fb\n4795179f-d85c-49bb-9117-e385e467f197\ne94c69e2-89b5-44d2-b39f-e8a5e31aaf4c\nee42a586-4621-4f5a-b4d6-26c195742493\n8b73bdda-96ef-4f1a-940c-350585c5111c\n0ab7d0e0-7fa5-4c93-adcb-a97a09ec9cd8\na0bf3ec1-589f-4772-bbfa-050266fa528f\n552b5ffd-9e80-4b4d-b20a-a94ab8c9a069\nb46514ee-8c2b-4ccd-9258-c754c1853b07\nd6b9f573-3705-4f35-a314-7f6b3c6e5aa1\n5a99270b-23fa-4018-bee1-e106c8a10672\n1f9881d9-944b-41ca-a90b-6c56db586848\n916fef23-8d31-46c4-98f4-5414b31e936d\nc87bf888-0769-4710-93c9-a2d77ea18ba2\n2dd33574-0167-41ac-a92a-5aeb0971b8ef\n7ec92f0e-3b37-481e-837c-fd443d2011e8\nfdb5ae29-ae22-42a5-9e03-d958c2264be3\n1df31a83-f355-4394-b91e-d8100c371fb9\n391432fb-5494-460d-8461-8e9fe2f40290\nf5b04868-57c6-4f28-800f-90ab96ae1346\n082a31f2-ba65-4e20-86ae-308a8c5cbd9b\n3294d906-9537-4d7e-bef7-447ce992bdba\n90bd853e-3db9-42f3-8889-cee188277f67\nb391ed44-0303-4009-8e5c-e9b81dcbfe65\n547f52d9-cef9-46bf-a320-843d3d39686b\nf573e0a0-986e-4757-9295-603b5bbb08af\n933aa159-b582-4881-80b7-997d83c0c796\n244bd7a7-9762-4129-ba53-dd3dbcbe141c\nbf75da11-4a98-4d0b-a3e7-25eeed0a1c9e\ne245f262-c2d6-4b0c-bc16-439f5afef431\ne80093c3-113f-4be5-9e64-f5971f1ec4f3\n8af9e125-20c0-4ccd-a80d-1417ddad10b6\nabe986ae-196c-4831-af5f-15b5f8ed373c\ncdcb5765-fa54-4140-9f91-96312ec3a38b\n43238624-a5aa-4e9f-8b2c-79f30436d5e1\n3f6dbfb4-38a5-4fca-9256-8a1aef9cf0d5\n6544394f-bb7a-4dfb-ab47-82b07788b007\n03bb63bb-5260-4063-bfaa-bc0e0503c874\nbe7c5662-2003-4da5-aa23-cfcc124c83f0\neb2fab99-dc08-4915-8290-4de38777b156\n134cf93e-2945-465a-bff8-1db06ccea8c1\nf4a0c329-e916-40a5-b265-f920f10e94e3\n5135a2dc-3a47-445f-bbad-ab0a68740276\n55a6f8be-d172-48e5-9844-d52d4b88ee98\n2f8e2915-8fd5-49e5-ab35-871837215f4f\n7ab76c09-5949-4e54-af13-f521bb4656d1\na7e0379b-5c7c-4359-8820-a92e3e2a6222\nfb66eca5-748d-4a53-9e24-d4762ede9a32\n3e61549f-8cde-40d0-a10a-1986c7524ca1\n649c9dce-56a6-4d54-8b66-15981876287d\nf2b1b9ed-0835-41fd-87c0-a4b0fac664e5\ncc929033-7c95-4954-a17d-940fc73e39c5\n037b75ec-30b8-43b0-bbf6-0f76e5c42b2c\n7985437f-a2ce-46fd-ac76-753f18ad513d\n79630d95-4e1b-4c0a-814e-de12a6097c36\ncb421377-8a7a-4b11-9a30-73ef48b08f28\n7e4f9a27-5092-4586-9548-427c6c8e3661\nd3dffd76-65a6-46aa-9bad-5cc9edc26656\nd29ccf85-53d7-48b2-aa8e-ee535205c25c\n0f820509-9c99-4877-839f-0d4937d63ce0\n70786fc4-7047-4088-8dd8-91d520eb81e5\n2a84d890-010a-4d86-929c-db239d00e78a\n67fba1a7-9c33-429f-bd04-9bb632e4eaaa\n75013515-e8d2-4317-985f-0fe583f68fa3\n87e74944-8f68-46b6-bd2b-ec95c307db12\ne1279d70-c496-49a9-8ffa-89caaaf4fcd9\nb4be0f5f-f7f8-4025-a6a1-d760d49629b6\na4c66d9c-f639-4334-a251-495d1599e6be\nabd6ddf1-c448-44a8-83f9-801188a34c0b\n0450530a-7fdc-4b6c-87df-518ebb01071b\n38762589-7d7b-4712-aa13-fcfa057a640f\n91905157-9bb0-44c4-a66d-a7d5053941e9\n696e5fbd-133b-4401-a0d1-17281719ad6a\na199db06-f182-4bf7-ae6a-ee3c60778510\n2eb20e85-1cdd-49d0-93d3-3b18c0e17b8d\n77394559-a312-4b15-b81a-4f12e561309f\n88f18959-5238-4cb3-8236-4509aded5809\n1a57bf2d-b8cd-4de3-bd06-8217c890a7dd\n46efb45e-074c-4dcc-b0c5-be5d3777bdea\n58ee9131-f6fe-4a4a-b4c9-d691e40786f1\n3cd3a31d-b59c-4ce8-8e2d-b21022c7cce2\n7234dacd-8db2-45ac-beb7-8e67dd843afe\n5cf16b70-c289-4ace-ab99-c9b102f4baa4\n4cc6a13d-ba4c-4b29-a3f6-874ae52526dc\nfc5a4c32-6862-4e74-898b-43765f8d0cda\n1bce7502-da19-440a-b19e-63932ad353a3\n5d7ce867-9269-4e93-b97d-0e69668be0dd\n3be57467-8bad-4f2c-8c11-8e5f270df7c5\n6b81a750-8f9a-4c95-893d-db052b9e0cb1\n4d641444-f85a-4a0c-95b3-67d29fe44bed\n5458dd04-6918-45f4-8c70-183fe9906eff\ncacfb839-9c1a-4c04-a4fe-181f2e6bd702\nd91e5fae-7876-4073-9f4b-cb6dc15a7450\n4cde32aa-0e3b-48cd-9db5-69bd514262af\n8a7e98d5-9043-46de-b8be-f040b07a4761\n31cb7d9e-ad70-4280-9530-679a278619d7\ndd436223-2d2a-485e-a5d9-24af9b017d11\n1ba069e2-5739-40a6-893a-60efd604dce1\nd8f404e4-03a8-429c-82eb-2b9b0744f750\ndbf8ebf9-a0a1-4b22-91ab-fd1fda5467a3\nb9e8c777-d4a6-4529-9c57-7df141b55b6e\n86f9349d-2404-4019-a5a5-a865cf5534c3\nbfd22020-6c5f-4d31-abd1-92cc7192d0a0\n81f8e708-6bf6-4b5b-ad3e-14dd5155c658\n47c5296b-9fcf-44c6-9d31-9d52cc37050f\n16f84d32-d7da-4c20-b9bb-e5577e161298\n9c41917b-4580-46e9-8f93-dffad6b28c67\na57806dd-53c9-4e6e-939e-6c6f9f28c383\n5981e40e-8354-4c11-9db3-a4119984723c\n82d0149d-aabc-4221-a12e-a5f21052b700\n8e40ac73-4139-4028-8cb2-b220ba12877a\n308a40a0-d924-4d33-b988-25efc5cdbbba\nffc9d981-4a0f-4679-a2c7-8f4a20a1ed28\nf63165a1-671d-41c7-9c76-393a8d03507b\n5bbdd9e2-91ab-418a-b0eb-0dbfa9cb03a9\n6418b918-84ae-4ee5-8730-6d1c31d5d00b\nff7c7565-1c2a-4621-b902-6d32c6f106cb\nf328351e-8b8f-47b3-b7de-6028278c7199\n5bd04846-de93-4324-95cf-257abcc9526d\n77fe654a-7a37-4960-bba4-5880479411a7\n2d47d296-2e1a-44c0-a06d-a137cad9fc79\na6ffdd45-c2e2-4ae2-89ce-536b4dba1634\n76b56795-cc5a-49b5-bb66-c7c6df935ab9\nef653a96-a10d-4c6c-bc4f-0bddf892e58b\n3bafcd9a-32a9-4455-b348-11fba5cd7df0\n21485d00-918b-4103-b2d7-9fd0272a659a\n7748e657-718e-4a4d-a199-9a117f45034d\n96fb5062-9726-402d-b795-a9ad5d682245\n8a9350b3-3427-4134-90cd-e0f442e57227\n42673515-b656-45a2-90dd-b20534fb3f03\n81397846-f9ac-44f8-8e39-b8e67578a3f4\ncf1d9266-e614-49c3-887e-8195415aea67\na0ebf85a-a89d-4e83-b4b6-0ba5b62b4e3d\n70d0db08-f79f-47d2-8362-3192709d113e\nfed7c5d2-e90f-4f9f-8102-8873c1537ceb\n6ec07a60-d892-490d-9734-a45d60c13177\n669f6f2a-c226-41ce-ad0b-4170b5228f35\n7960ebcd-04ed-42df-b74a-43c86216ceb7\n4093bf28-dc25-4fe8-a53c-3204b0400f45\n0ecbb429-0a1f-41b9-bb85-257c89d593c6\n4f82a195-2c9c-4421-886f-1cc5a1210b7e\nca402050-ef0e-49f4-8329-7410f0ece4df\n226f0e57-eee7-4068-8588-79f40f283dcf\n098f8958-3c71-48f5-bf0c-ed0c8fca941c\na11de6b0-bd04-4808-a4f9-a063c45e4c91\n4efdd53a-cee9-4002-9e7c-945f8558cb25\n53061575-1c0c-4a73-974a-ef514760b0df\n7b257f6b-a3d8-4ed7-a66e-693e84ee82d3\nd1d5b477-a034-4e5b-ab7a-279c1453e23c\ncd897ef0-0866-4798-abae-0754c9477ff4\n6d8fb02a-7a9b-4356-888d-b191ed1ad488\n92863f6a-cd4d-4ac5-b592-a79631ecee30\nccd09d12-72cc-48a4-bcfa-4a6555c580b9\nd88cc79e-37b4-4bc0-a11a-d6b5758cdea8\n28661dae-c2b4-49ec-9e60-3b6b5a238046\nec6d7909-2963-4453-815f-d1abc3f3d5fa\n05c2c076-5a20-4d5b-96da-edfca3e8d07e\nf0ec9c0c-dacf-4bb4-9a19-d3a161411a7f\nea3cb537-a961-4085-a6bc-5d1f72a14623\n7aacfcb9-86c0-4327-bc13-bc51e1b61dbc\n4fba77ae-6d11-4335-a82d-813914688ac6\n6e2d5409-24be-4a79-8470-30691aa9c307\n089a9208-5e00-4859-90c2-cc61cc3df669\nfaa29105-ef23-4099-9ac2-f4b8ded54653\n44490017-8033-46ee-b577-06dd90c20767\n63d956fa-295a-4823-8518-e26f6983de96\nf5d69a56-bd02-4b72-b448-9797fc2929c9\n1d82570a-5ee2-48e8-a45c-3bbb90c9138a\n0c09d1f2-14ce-4082-8f0d-c4090da2bc9f\n5a7ef3bb-b15f-4cd6-8b40-4a1b572f2a87\nf2bce6ae-023d-45ab-acd9-b6f173afc68a\n1f419fdb-d80c-456d-b5a7-57e60ce92579\n5029f285-fb35-4cea-aa81-444afc3fb50f\n3f10fb32-f8d0-4237-bd2c-370737fdbe13\nf1a85364-2a62-4e88-98a7-5b5819418690\nb779da41-bc7a-4a30-9e55-b37fa00922f7\n4dd0e8cd-0595-4c1b-895f-b7faefa744ce\n29c930c1-8ede-47ce-bab6-b5fa69a0232c\nc78ae1f8-f87b-4ace-b0a2-b848667e56ab\n7566c7e4-9a9e-4491-9178-cc496d50042e\n2605f77c-0fae-4310-a027-4a26fdeb98f3\n857b396c-7e13-427a-82ca-2f4a69b30e70\nd403250c-3b6b-476e-93dc-82c3b11beb83\n866813e4-57b4-48c6-9195-327d578d9000\n7b396129-dcbe-4455-9465-73478f110643\n20232a54-90cc-4168-bf00-c71657f97c1f\n00286830-cd78-440a-a41e-27bdd2a8fdb5\n09245ea7-b467-4f72-bb1d-12a196c091e6\nfaefda20-506a-4c53-8b5e-4446665d101d\nc506f929-d2bc-4f31-ae64-8a53376134b5\n0ab4aae0-d189-4daf-9275-e5641af01eb0\ndacab989-19a3-4e70-85aa-8545aef07027\n236f2c2a-2a41-4e09-9091-5f1c27abb706\nbb9d4f92-3e11-4429-b4b4-f9703f01ab97\n6805ddb1-c95a-450c-a8d5-85e6298fbe04\n6e75cafa-e807-4d30-8430-da9d431ce383\nba002775-58d5-43b8-843f-dd7faa2789c5\n34f04e82-86d5-496e-9eeb-675e13110c37\n40263791-51d8-44c6-88aa-fdfc2c707b31\n7d3fbb40-a3e2-4dda-b155-7cdb2b4ed799\n27ceef72-1891-4e4f-8999-4f19c5614b7c\n9b09e02f-8859-4443-96f2-d688f76225a2\n186a7d8c-0d99-4915-af9d-e63e270d32d9\n800077b6-0853-4dc1-8f7b-dd57f1e5f034\n92db29d4-f9b4-44fb-80ad-8ce6056997fe\nae48e5a2-cdcd-4f7e-934a-a40682a068b4\n65cfe30d-afda-4a25-98bf-87a30c2edab9\n30ab2ccc-16ff-4213-88d8-fee240fb2180\n205700e7-4e6e-46f7-a58c-5d646a50f5f4\n74adb4e9-3521-4fb3-9bdf-6d3e91587239\n0c9425b6-3d07-481e-be12-263e7d644760\n5b3f54e8-0999-4d56-879d-afb630e3204a\n916fe603-9955-4a87-b11a-f40f7da54d73\n3d8b8599-e505-488c-9545-198afed820ac\n3088a9fe-02e4-4027-b332-da140a316195\nef60daee-a2bc-479d-8283-6717bac3cdf3\n3cbdfa51-1ecd-4acf-8d46-188ff0044431\n6558aee1-7a9c-48ac-8065-ae0d027ad296\n82647dfe-a139-4fb2-bd79-8a5dfc1c910b\nc8ce34b3-1146-46e2-afdc-7287b9a8faaa\n7ae99764-5cdf-40be-b04d-e66720793829\ncbd4c1cc-6671-4083-b8f0-d98f42478173\n044b0d49-ab65-4061-a5d8-78ef5e423073\nfedc6bce-c125-4978-bef1-4ca5e4ecc3ab\n5f61cfdc-aa52-4ab2-be49-7141dfae2728\n1792f79a-a6ec-435c-8fc7-651010a2de69\n77aa71f1-0132-4ef2-911b-fa4e90c046b4\n9ea1004e-f1fa-4606-969f-902f40cb592f\n2cc8458c-53b1-4179-ba98-4732aa1d404f\n17a92c3d-babc-48bd-be08-caa84a3c5a37\n73961524-36a4-4b54-a446-a167d6961679\na0351165-2844-46b4-b4ae-a487ebb85a4d\n6d842695-eef1-4cc6-bc82-3bccea4ca873\nb4a6bb95-7b95-4305-b9da-765bc1416e5c\nd6f4d382-80d5-4bba-816f-807914daf806\n65ff19a4-0f1b-4b71-b422-aacf41717417\n2e956775-1826-452d-a909-f53aff316c0e\n5e9dd7e3-f5c0-49a3-b00a-4687b7180c89\ne41478f5-f69d-42f9-bdab-9766dc5ebf3d\n000d6fea-1f83-4eb3-9f62-709e6caf6cc4\n9eb0baa1-bc89-4a5a-a146-7fd37027369d\ncbc0fa06-8294-4966-8e36-dd8cd70a55bd\n6363adeb-e988-4997-9752-cd37a4dde2fd\n7390c1a5-4872-41db-8004-658e05870b4f\nf70918b2-2572-4bcb-b10e-4cee94701872\naea46246-dfe3-4094-9430-7d72cab478de\n8a3c1c9e-780f-4725-b6d2-1a425bc48be9\n9319aa91-911f-4719-ae69-01b1dc1282bf\n1f184e42-4cc7-4b6e-b9fd-93f572f6bfa6\ne8545be4-a6fe-4c60-8006-544e34fda6c0\na402134d-41da-4c1e-bf96-94790d3eba6b\n86f7dc8b-afb7-44e7-9484-971db0d45366\n2a7ff2e3-4a86-4388-a235-ad5b55402c08\n27298849-481a-4848-9f9f-88235b8d98e9\nb286f224-9656-4698-a3f7-50a33866c698\na92e5456-b6de-491e-b540-9f1eb0792001\n273d82ca-6afd-4b97-879d-34e40b1ac66b\nc22ceeba-5099-4068-8538-d4227a22cd13\n083d518a-8269-44e1-b55f-9d18fc52ed74\neab3051d-6937-4437-b52a-8cb913f4544a\n2a2cbbc2-f837-4179-8c9d-b6f54d0e71bd\n956dd3b6-82c9-4e86-998f-9a9bb2bd068e\n3179692b-b0ba-4683-8574-5e27c1a6ad21\n031bc5c8-4f7e-45aa-b0a1-6e7c1d4bba22\nd1a7a5f2-b17d-4f95-b461-2b901ad1af71\nd67f091a-5f52-4ee4-91d2-ec89df23e254\nc023d94f-8fc2-4e0c-b502-3aa6bdd5ab07\n79b6a9f9-4767-4173-88ea-04cb99d4fc97\nd76c4374-48f4-4f31-961b-a8991e2bad37\n565095a5-22d1-4f25-8269-a019fa97ab6c\n15d1a788-1fa6-41cc-aa3f-6628f4ba31b5\n1f506753-a1fd-42fe-8f3b-dee88b59bc84\n82b28823-4b50-4b21-8252-74802c6cd1b7\ne2a0d18b-95b2-4ddf-830b-f5697db52dd1\n19ea2757-2785-46e3-8399-4bb5c0b7af74\nddd3298a-9d46-42d5-be71-27fd4043241f\nf36887da-b459-4a26-b727-f9813bb1a9a1\ncc8fb62a-22b3-4460-a11c-b04fe3e4c2c0\ndd5b0775-6b35-4597-bdc9-d423761ba2cc\n4ea61e81-7139-475c-be06-24248205aebe\n2c9206b3-0192-42c9-ae4d-a2742f136b66\n4ce2bbab-49f7-4e5a-8f10-9ffe85002ea4\nf1961d17-de04-401d-963c-c7777dbe486f\nf224a250-506b-45ae-9970-5ea3ec907d6f\n4bd23455-5551-400f-92d8-b3bf8836f208\n211a958e-dfe3-48b8-ac22-9433cbf9acee\nf094f087-a01f-4e38-97cc-62932d02b07f\neacb348e-0e07-4c31-bd32-baaeb4eea830\n96a47d50-2b06-4dd5-95f9-5e7264387aac\n1c5f13b5-04f6-45d8-af42-cd78456971c9\ne8f4b05c-f022-4b4b-91d4-9a1d583ed73b\n21d456a3-3ad4-4de9-8692-4229295e0060\n92bdc31e-6c0e-47da-a6fb-3ca5522ebad7\n381d84af-2d20-47ab-9c32-5bd310950dd3\nb8ad76c9-14c5-4464-807b-34548452f06e\n7963f4b2-7630-42fa-8b6c-e707723bfdff\n57d374bd-3bb8-4164-86ed-3f3a858ad55d\n9ba6a192-037f-4841-a343-3bbf972ad38a\n141d98da-e7f5-44e5-84e5-4ee54b86145a\n24363413-de2d-4510-998c-e3e9b3801f71\n828d74b2-ab27-4150-95dc-62660de5ca29\n860c6883-b4c7-4839-aa98-93a563fd1df7\n53fc6ae4-b884-40ed-94c2-47d9ac0df5aa\n4fec314b-0158-48e5-a280-430011213683\n3e22d836-6bd3-436c-9d85-e890f1481fea\nb67bf209-1298-4f2c-b078-2607a9e7ebd4\ndb153e71-b2a8-45bd-84b8-63ba81c01a9f\n31602ad3-6756-4f96-83f8-2c07ebcd4c79\n53c4aa4b-621b-431e-bec4-84048939a20c\nb8f0f5a2-2fbe-4729-bd79-ca620f2eafc3\nb5409e05-20e8-4de9-8941-10a9d4d39df4\n52a788b6-9ae8-4c2e-9574-c444e63159c3\nb0d92e5b-2557-4f98-81d9-041f2f409c6c\nb677cc55-1b25-436d-85d8-cc2a271b04db\nd29d402f-c4b7-4e35-bf22-73014ff45e60\nc6ae69e9-2c20-40e6-be8a-ee184febab15\ne840a92c-0f50-4d99-aaf4-3cf63a15e6ec\nd4f59926-3ceb-4f3e-8b05-a2d9b5ebc68d\n2a87bc92-e327-4f92-8a3c-a4404241288d\nc85ea02d-1015-43de-9d32-1fa115b6dfe1\n9be4c832-661b-400c-b3de-05c87c0fdaf6\nf614a6ab-e367-4e29-af71-d433f284a79e\n87c7df9f-cd3a-47e0-8d26-b905f57e70a3\n83d70e34-e9c4-40b8-a63d-6dd2e83a416a\n8cda5ba4-5793-44d2-b08e-4c4623d3579e\n3f0602d4-582f-48f8-96b2-f6dbc410160d\n470e5eac-839f-4de6-b638-3f24e5bf7e2a\n2d27cc99-ea55-4ae9-bd51-b0a84a5ea675\n4d454626-fe33-4d37-814f-77e9ba284553\nca128f0a-2f4d-44ae-a7b4-40f0c86a86f3\n33bd6dd5-786e-4c85-b0c5-e33a3f3eb2f1\ne7c9dcd2-810a-47b5-8dae-e67e6777a157\ncf35cc74-6548-4619-9d12-cdcae90dcdb8\naedf5d20-8449-4c1b-b162-153cc269deb4\n10f56d13-f2c0-439b-9ca8-7a9cad2259c2\n4d4a1520-990e-4332-ad00-b27cc9784229\n79aa15a6-28cd-4e04-b0c6-639d57a6b5ef\n22b87430-2c0f-4c0a-818b-69596e84ec51\n85d72db1-6c7a-4e8c-a8c3-47762d26e2c8\nd4533c25-35e7-4407-a213-f8a9e051428f\n16a582d5-e96a-49f4-9270-5b4ac6aecb96\n406ad52e-84db-4680-b635-4226d774a1fc\n667bf332-11d2-427c-a780-8c19b0015d58\n3604ebcd-b9cd-4c17-8abc-f7cb630496f4\n09a1d957-956e-4a88-9888-e9d79a1d0fd1\na1e94524-9d86-4ce3-9429-1d03fd0d91ff\n5280dc00-5d83-4229-9597-7f62f59b64bd\n580fb542-5880-4975-8c28-f4907ac87b0e\n2a1bc5b4-e7c2-47f9-87fd-538d765510f7\n335e7ac5-5804-4443-a1f5-6a40cda5eda5\ncac8a27c-a185-409f-af39-1eb3893abf71\n34bd561a-6c7c-4484-8331-37f510aa5c6d\n65ee53c3-6e3f-4dc1-bd3d-d78fc5ee61a4\n890483ff-d9af-482f-a015-655344ff0a87\na9fe0e78-0adc-4e36-9629-ad63b2d62729\n9429bab9-1649-402e-8e34-0d6950b4b2f8\n2f2b53be-b59f-4ddc-a535-7e37e0d73648\nf9e6e190-dfb4-48d7-976b-05696a4bf00d\n9bf943ac-8e5c-412e-b18a-a7ca4dcfd4a6\n4a2b585a-1689-41eb-bc35-980b53969d59\nbe0c6604-1991-4fe6-b043-96d81db7c93f\naa7165fe-7dbc-4aec-ace9-c337fa6c3a51\nbabf819e-d32b-4cd6-bb10-aecd0a8200c3\na1332dac-d7c4-4392-bec2-d205a2113372\n5c40083b-3a24-490c-ba4e-f33d62d78f0b\nebe6b698-5563-4dec-ad00-b17d35393d6d\n0dd71c39-a06d-44a4-9900-289d51eecc7a\nf36827f1-e248-46e1-a342-ff44247eab07\n882055a1-98d7-4d0e-a8b4-61fbe987f70b\nee3f4187-9318-4d8f-b9f8-a29f94deac36\ne6b95330-026b-4c2f-b059-8b46eadd7ce1\n15789720-aec0-4914-9f4d-da5d469531ca\n2e40d5d5-6f9a-46e7-8521-94eee3eb4975\n7e26714e-ba13-4076-bb66-d1977c1c39bd\n6a2a393b-5956-4ff4-90d6-da43dac55ea7\n7a07ea73-302e-4a8f-9c26-5ced0f1b834e\n0f3feb7e-8735-49ee-be66-ef352113e5d7\n0f437035-afb8-4b93-9c3b-3a0c993f2626\n33f0fed4-42c9-4041-9c26-7da80f69fc89\n33606d16-e0ca-48ca-8d51-034905441c9f\n6154f97d-8dec-4efb-870f-26c3a750c51e\nbef52930-7563-4573-a206-eb2cfc348cf6\n74d19b91-3fa6-4065-b83d-982aa50cd023\nf42d6619-c187-4b3c-95e7-16e28ed1fcd9\nb78b4bcd-e415-4891-b880-83d63291731b\n01f440be-8c3c-40c6-81ef-1827afc72cef\n8d240a78-dfc4-478b-8114-1a63c279237f\nb39d00d3-07ba-4e48-81de-1693fbd08297\n41b86eae-aa8a-4e69-b4e0-43ab08cd4854\n880e0745-5428-4b2a-8b3b-d15fe9471fe7\nce0b2b66-44a6-49f1-b961-5aca0b78d998\n72863dd7-6081-4aeb-a781-042a5b9aee84\nd90163b4-4110-4bd2-9d9a-d3bb24335599\n9664e056-79fe-462b-baae-17242dab4a7f\nfbb3f710-05e3-4802-a89b-167fc1001fbd\n11fc534e-bb26-401d-993b-bdd0a51fcd54\n024b3ccc-7ded-41ed-b2d2-2931057654ea\n64a9c236-d7be-444d-8993-dca8d82eccb4\n365f0412-97bb-40d4-ba6b-2f6194c46131\nbe68dc2d-e1e1-486e-89d4-766513e0ab5a\n4bb14d79-49a0-4ecd-8a4d-00f592965ed2\n035dca4e-0cee-47c2-a1cb-e5ffef52c9f1\n376e2f12-ab5b-4fa8-8f9d-f75b6722bfb7\n0d4a583c-d254-475e-8705-90fd8c47cbc7\n58c144e7-56df-4f37-80f7-a575de044853\n63828da3-efae-4e7d-8f21-e689ce1ecc62\n975ba90d-8b65-4de7-986f-fd23c2de853a\ne8644fb8-af69-46ad-a4cf-300ec1902aeb\n98f21451-046a-4d3f-b8a3-ecefddf0aad5\n223f43af-e0bf-4642-b213-de4c935ddc38\n0204b255-2ac4-4a62-bf4d-2bf339904ce7\n792d5b8a-6e74-4f47-9292-de9283c06411\nbe21510d-1c8c-4581-a546-651afcf88981\n6ff6ba72-72c6-4fee-8e57-56452d3fb0fc\n86ebfada-c0e8-4019-a159-091854a10aae\n5d04a2a5-4976-4826-bf25-ab7219bbd457\n781e4830-749b-4faf-ac04-8fb87929aec1\n50bc1acd-576c-426c-9bb5-ca7bed519d77\n3b85a6f5-e976-4316-a4bf-40ad94779f68\n6daae709-d73f-4f6c-872a-44b9c4a293b1\nfde1e189-ed57-4814-9e36-09555d0466b1\n169599d0-feec-426f-be48-10a1f4779e1e\nb0208516-3c77-4f79-9d43-2a1ad43c3be4\n27b51265-f7e1-46e8-81b8-0fec07764ac2\n1e9ae528-c036-40b9-848d-20cb0eeb6e05\n66d8c0dc-5b59-4798-88cf-ecfefe4a2936\nb0efe05e-4e95-46ea-b159-cfe2fef9740e\ne9b15d88-3331-4122-b51d-9e0d00930995\n66244d9f-e117-4c8c-9bd2-ab914686ff15\nae0f7759-db1a-4ff3-9c7b-ba1a38c6eb8b\n857dd8df-aa01-4e86-90e5-9f732e72b31e\ne22dd721-f3a5-494c-862d-3ad5d9d1e6a0\n42f21c3b-f336-4561-8e66-be12405fddfc\nb2685732-c384-4d9c-a1a1-9500f831d2bd\ncbb117f0-5b4d-4b05-afba-cbd1070bf246\n048be432-2561-410a-90ae-47e416faa086\n286347cb-2b8c-4530-80d3-9ad1797561a2\nadfb55b9-8268-4309-b2c2-bc5a4d77917b\n544f06fd-87e4-4fc0-8715-fa781050523b\ne5f89ac8-e767-4c21-8f42-a817676943d9\n35064099-65cc-40f7-aade-2a3ad0f59e90\n59788a6c-4776-4016-bace-ec5b94901c3e\nd80264c4-7d49-458b-8842-038f58392f48\nd9a5d913-7374-4665-9efe-9ea829cfe129\n682efe13-9041-41a2-9211-36bb7782fe4c\n95290c6b-bbcc-4093-ae61-57b5ba9e78b8\nc5286058-a316-409e-b48d-9a8ea878db59\n7e2f581d-cbba-40d3-952b-4a99179cbc02\n1ec5c7bd-48ab-49c3-bc7a-fc819660de19\n26e000af-bd49-4624-9ffe-827a6ce4123f\n6f45cac2-981f-41aa-bec8-76ee1bc8a91d\n190ac913-f2e0-4513-be96-9064e7509bd8\n55432362-293a-4548-9cce-46fedb1f72e2\n5b2ff02a-c525-454d-9bfd-31ec3642e5e4\ne658f0f2-9d21-495d-9502-b6fdbf8634b3\n83c38623-a6e4-498b-a222-7355d9ee00f7\n5c20eefb-b549-4915-bcb2-dc563dbd62b7\n886ae079-b2ad-499c-addd-ae465b9c041c\n83f8888c-8533-4e42-b3ef-aa0b555128bb\n01da8358-3898-4ce0-aebd-b5b3d4236ac5\n2936f5c0-d6d0-4323-a1b8-005445fee36b\n31348a9b-9d05-41ed-9800-3053d7351b43\n4dbd5504-4267-4438-bd62-4f8974aca2f3\n0a985d9f-acf3-4510-981c-c404a7ea603b\ne394023c-ea49-4783-8d1a-f9f0c0523935\n33f23ae3-fb95-4785-8e59-0fc27df66a67\ncc60eafe-23e9-48df-aec6-d4efb34fcc66\ned33b823-b81a-4dbc-af40-52165a5d78a0\n88b16400-9f35-4437-b71b-6253b9a914be\nb6c97278-3990-418b-b08d-ce26ae6ea79c\nee1b6ecf-72ef-4ac1-8018-076dea32c0af\n7b99fa59-3ff7-464d-9a46-9df6838f8973\n97294e5b-3382-493f-9df4-ed628182326d\nb9469be6-b547-4404-9e3d-98781a19fb35\nd737e0e2-c6b9-4e58-9e15-721823ca20ca\nf8952daa-da40-44f0-bfc2-b236fa363264\n15ed617f-fdfb-4aa2-b002-c9b0565f0e60\n496930f2-6417-4625-86c0-033f6900a3d9\n67321560-51af-44c8-8d32-8737e432107a\n66b1472a-26a1-4979-9091-92232e7019c5\nf1606933-3178-4e27-8466-9c827e744354\n0c91d810-39bc-47b9-9bb1-d97ab3849e71\nb03cae22-7ae2-4ed3-a1bf-8f655fc8c1b2\n209ea605-0baa-4a36-afef-5d4c29de1ffd\n561d9a59-e5b6-421b-af53-2c72ea4e4b43\n442e5fbd-5535-4472-9f9c-dbc18387e96b\n62b528f8-48d6-4136-a134-13b254bfe6a3\n895180fa-687f-404a-b62a-e533d7f003f8\na9e80293-f94a-417e-913f-2da303b82365\n5e3fe333-e72b-4deb-8e40-ddb4d6466566\n53e7e2fc-cd2b-4e4a-aa0b-6bbd92e3286f\n0c8a1f82-ccf6-43e3-a2b3-c17150aa3ff8\n714cf198-ac14-4328-9eb9-eadcf645115e\nd74b0247-1432-46d8-9f25-2d48fd27b26f\nb6fc94e8-078e-482e-b410-c03424e41fc2\n38d54f35-a4f1-471c-a007-a9d88310ead6\n59cbb930-9106-4079-831c-8a2076dae089\n6848b6f7-89f7-463c-9531-afe292ee8d3a\n793354ed-602b-489f-8999-a6a54965f5ac\n5dd98d7f-97d7-4c29-af68-2510a0c191e2\n84007c3f-fdb3-4a5e-b0e8-0a03ae65b9ac\n3ed10ed6-c6a1-40a0-a2bb-ad81171b59a5\n41c34e69-d2c7-4984-bde5-8a88a2dcb4de\n7b582d82-300a-4ac1-afec-318b70fe50d7\n856af839-e551-4381-b2f6-3a8f384774e7\n9afbdd2d-6e83-4777-83e7-ab04eb3bb6f6\n7436561b-c681-4ef8-bd39-9e0af8013698\nd48f0bd4-8512-485e-92d7-acd54e887ae5\nffc627ff-daa1-4c29-a7ab-2143ad028989\n6c70fcf1-0962-46f8-b387-40ebb5dd0108\n25d8616b-e5aa-47bc-aa25-21d88271ecb1\n0d3ce49d-24a8-4320-9b30-3bc920992f65\n6d1309e5-19f0-4c34-8aa5-61b8c3b21427\nc0260083-6e15-487c-b4ef-ae723f5994a1\n03c3d759-579f-4224-997c-0632bb580858\n070404bc-7e7c-4ef0-8603-0221bcd05474\na0d9a3ca-6116-4d94-80af-ba3d7eca5199\neb212e09-17f6-4f86-bc1d-9f92321a2490\n3a80d578-d506-4989-967a-6ca448544781\nd598fbb9-8b95-4f8a-b74e-a0eeffc8314b\n6ce81783-c864-4d56-84de-e3bfccf34bd7\n2ba403fd-91f3-4a22-81f4-ba2b816eec40\n6f98e15c-5504-4b51-b4b6-c9bad05a54b9\n47e3beb5-0d06-4aed-b269-28aefca114bb\nc06420a2-b3d2-4b20-ad7f-712292d74571\n1db6d31b-87ef-4832-a617-fed79e0987bb\n87035c2b-e785-4389-a0eb-2bc5fd359bd8\nb77f09b2-5cf2-4a93-b779-c25034d39e77\nc1d957d1-85fd-4b85-8c26-7117b75a3496\n6b9727bd-2c18-43e4-846d-e93ae4becef0\n6faa9485-015b-45d0-b0e0-a102c1b19bf4\ne2dba436-ee91-4126-b733-8fea30aacf4e\naad36554-5d18-48e1-bfd0-d3d971aee115\nfa4c732c-54e7-492b-ba5c-55e2024b4b7a\n0e6b084f-4384-45ff-93a7-8a4d43c81e07\nfdc692c3-3dfa-4406-a823-27c81bb135e3\n8b590fa1-3a62-4aba-acfa-27711a0b5fd9\n5f038ef6-b9b9-4dd8-bdfe-7e81cf9dc0b6\n1a21bf89-b54b-490f-974d-f5721f73c13f\n7f716d85-1422-43dc-900d-e651bc7a422b\n43b57b93-9100-43bb-b327-0a1d9c5af97d\n14697540-ac5c-435a-8515-6cb24f5de25d\na213ad55-7126-431d-be15-2affcdeecfab\n1fba086d-9a53-4efa-8d22-9d372d2fc9a7\n6425be0a-bbf0-4c23-81e5-eab43e55e8b5\n2964343f-2ce9-4af0-a54e-c6442cdb10f5\n0a2b559b-0306-4250-93ca-9b6887a30cbb\n3555a6c4-309f-40ae-8158-58429826b5a2\ne377f1fb-5998-4f57-928d-8c1b73060231\n70d2ea07-159a-46c8-b978-5cd7e4df4396\n898e5fa0-be77-4ce6-9fb8-55c064cd5917\nf9b5f4e9-26be-4643-ac13-cee497fd6d57\n8214e86a-8478-4b3a-bcf6-9c5112d07e78\nfd52694e-f045-4c6f-af80-d4a584391fa9\nbd326910-ddaf-48ef-a341-48ea7860d436\n5253fe55-840d-4d93-bdd8-1a51f3c8d806\nb2d59d70-f8a7-4e6d-b419-c3f97c7001a8\na0508143-987b-4441-bb26-30b3a16021ab\n669f7249-de24-4554-ad71-1c9a20f9f07a\nbbd670d9-ba78-4f73-8c91-94ba07e5f9bc\n92a71217-de90-4315-9fb2-bc549ebebd19\n4ee78050-12a4-4986-a57f-d313f549d4ff\n83cc8bcf-76cc-4793-b959-ae8d8dd3b415\n6836cf13-5d98-4c99-b370-cd6e98b0054c\n3de598f9-bbd3-4572-8080-e3647b3b0169\n8f836742-5a30-40ba-8fac-425400307c5e\ned49c8cb-811e-44de-a68c-467749495d28\n1bd0cae2-07d0-4b26-8c19-10dce44074cc\nf5734ab3-0d72-4034-8908-75a81658026b\nc799c8c4-50c8-45d1-a50d-4a8bf6db6ea3\n83110178-f61d-41dc-885d-839928567fb6\n3dfa8e5c-3e26-4427-804d-bf78ba8dde29\n9000c1c6-3031-4903-9120-9598fb22e91a\n77e1bfba-3fd7-4d60-adae-be8fe4a81e9a\n8fd56ee0-4ecf-4357-8726-28e09f5bb321\n6415969e-de12-4cfa-8e6d-3ae7f4818e95\n103e6972-4e29-42e8-b426-8f86187287fd\n723a5fac-3387-4637-8c02-48fb68c0dd3c\ndaa11ee2-f660-4fb5-82cc-b4490c1a5dfe\n96c99f29-e488-4038-bc25-90c31779a536\n3639ab10-6703-4efc-bc0f-727559a6f452\n4ac6ad5b-5a5a-4119-ade2-791f636db93a\n9bb9d54b-eac5-43d5-a80a-5a48ca2dda68\nb65184fc-951d-40b5-910a-537799242df0\n9f49432b-0b14-4403-9796-2749f947cb4b\n8888ef55-abe6-4539-83e3-c159ecbd04e9\n45c86739-cf37-482c-a42a-ed3852de7123\n4c7becaf-b088-4238-9b77-19de85b8c89b\nb5bfc195-1946-4f6a-9fce-db3762c11650\n9ca46061-62f9-4e1f-8310-295f1283efc6\n7ada28fb-fd77-4462-b25e-c9f8d90b7aef\n7656bd1a-94ea-41c5-b939-0ff996e46adb\n9ae79f57-491c-469f-9475-4c508ea0e672\n09b90356-038f-4ba6-af67-ea1c14f1d1ad\ncc8f8326-7508-48e1-8476-119e5cb2f62e\nd288569f-4f42-4927-8fb7-ed138fba78a0\n08bdb4c6-ea7a-46eb-a152-8ceebd5a5c4c\n920bb30a-ee63-4b6e-99ce-dd25c9abec07\nd50ece39-dee3-47c9-a8b9-7eca432f6f88\nb02c910b-bea0-49a9-9545-c40a76a338f8\nd0670ceb-5804-461e-b051-8ebaa033b375\na1563a3c-773c-4142-a683-48ebff63f2cd\n0dff54cc-cd1d-40f4-975a-9da7642f14a5\nf49f0f3a-8efa-49db-8600-23210e4f9295\n5d19db2c-d844-4459-aa6a-e9eee4351602\nc45eb80d-573f-4147-93ac-e4d428e80e4d\n441835f1-1f3b-4fed-8fe6-b4d12254bff9\n6d210212-1df9-4e65-ab45-8061a9e9bc0c\n18e7e884-b836-4bf3-8957-5564d3f7582c\n83ac9419-2778-47c4-8421-aceaa6f798b0\n31943a9a-964f-41cc-a812-e5024d2fe910\nfdcd1282-e4da-453f-b84f-3a74aa4903ea\ne1e055f1-97b3-42f3-86c6-3d2c7ff04411\nfb967c47-3464-404a-8b1c-3efd209424a5\n3634bef8-1ec0-44cb-9db1-5822d92e2c8d\ne7f58ac5-637f-45d3-a5a3-0dd0d09c749f\n4bea97e8-22bc-4e4f-9575-94e1105286ea\neff1b795-82cb-40d9-a639-046b2dadfb75\n3621fd07-239c-4b24-b4be-4af50353cbe2\nbb3b7106-041a-43ab-9e71-998bbfd0d8eb\nf68544df-ea56-4b88-b03e-f560254a6fd8\nb9c66e00-c2be-4bda-ac6b-758145dcb3cf\ne0283532-19b9-4164-a040-38259b144d78\n058ff77f-f82a-4739-939e-02770881335f\n56659ab8-a726-4286-b6d4-6050522e5f74\n8a15fc5d-a7c4-4b03-a0ff-53c4cd171cf1\n332db829-83c8-4f46-aede-0f96d666ac30\nd50a8aac-efa8-4709-9794-a384e58eee98\n81c262d6-9228-4d84-835a-ddc5696d7978\nb94adaeb-b32c-460f-b359-f1f705049187\n47144425-5fe2-4c29-8097-f82f2abeea8a\nd818c489-89a5-405b-a363-61a258e2c76d\nd13643e6-158b-4ba0-8b07-65fd0c129c08\nc11293c5-1efe-4538-8644-f8057cef9c94\n118868bb-6571-4c54-8445-74d124edace9\naa900b4d-31ba-4a8e-bd7f-7f265552e7ac\na64f6474-01c5-4120-8123-b4bc5b449f6b\ndca56a92-f4de-4314-9df6-f2301290d4e6\n964eacdf-22c8-48ab-8e4b-c87b1aa5df77\n23ca1a28-281b-48dc-a71d-48cc37839b50\n7afed26f-8b2b-4195-b6c3-9de2dd3dde28\n01063228-5b80-48ed-86b8-bc00f01297e2\n4fd8e63f-0d14-48c8-bed1-be17bc9450d5\nc7443c77-4d93-4c49-94f1-4bcc3e4ae956\n24718d1f-dcd6-4dbb-8f40-f8a8b7bd5b9f\n03c2e19f-880c-4edc-bc19-2b6b9e784206\n0afc807d-297e-40ec-9da8-1a263dc7a21c\n36d770ca-a349-487c-9a86-e21951d457a0\n30d39b79-9421-4675-9027-fb2eb7a3f8f1\n9674a174-5d7d-4851-8995-ca9941a59ad9\n3d898191-c5ef-42d0-ae19-8d9b73f86fd9\n911ed793-5115-4c5c-92ec-b2573491cd18\n014b043c-c023-483a-963f-8f1980065080\ne8c54817-08f2-43ec-a266-2db5e483439b\nef5ca65a-9134-4566-833c-1d50e7b0564d\n8c65611c-bfc6-434b-9172-bbb347866db1\nbb9e3c24-36cd-443a-b653-6ba2fd7fc1f1\nd6e11315-1f44-45d4-8bae-c3fd6b6e26c6\nfb511650-68d9-4213-a469-29c32cad62ed\n8f3e5a37-afb3-4d08-aeb0-34e572132ea5\n5293b058-2399-4003-b20b-6835e5e90456\n0c9255a8-589f-4e1d-9802-55754f342df2\ne04e54a2-926c-46e5-98e0-579d6a706a6d\n96612b26-483a-426c-9722-37b8f4411c99\n6d3becc4-3ce7-48f5-8f1f-e95f90d00319\n798564e0-80f8-4829-adad-6e149fe977ad\n65b90853-19db-49cb-a2e9-d51f57c6a26f\ndff9704b-e172-4a8e-b6bd-9f78cd48155b\n7297ba1d-7b27-4de8-b2a5-13d3693f0259\n82265cf0-1dab-4fd3-a849-df1dd7986907\n1e0bad97-a17f-4495-b08b-f3e9c63c922d\n927949d7-2a65-4724-8696-810c09a60101\nba180a23-27a1-46b4-8edc-4a5ccca51737\n9c9ac7a1-d486-4934-a8e0-d3bf3ce2c929\n385aa3d6-f0a4-4964-bb75-d8f8fac05d24\n884eed23-7aa5-49d7-b2cf-729be3c7ec61\ncfa1ce8d-1323-4cc1-83d8-0aa026213d8b\n8c653a7a-4774-4a9a-8924-70c1ba285717\n1a199de3-6582-429c-b5a7-fb667c73eca6\n8d83f819-cb3c-4f88-83a2-2eaa19c8e189\nd23f74de-ec06-49ca-b456-f92ee9c2eac1\n2f5967be-1d6a-450e-af21-329aac520467\ne7fd5de0-9a5c-49be-8639-c34b123b98d8\n49d3dfc4-b8a1-41c0-a8ea-d82be90ddec6\nb6420651-ba11-4125-96d1-9880bef84639\nfa13c3d2-7e44-4512-8ad1-5e035704a373\n8408ac6c-4c6c-418e-8bd9-73d4a13d9dd7\naadee4a8-a613-416c-9aa4-f165737dd01d\n673638d1-deac-4ec4-9499-3d33b9423ae7\n86bc343c-aec3-4572-9188-56f685a5470a\n187d28ab-9ffa-4903-a88c-74d369841a40\n040ce1b6-baae-49de-97d4-724005bb58ef\n12af0630-9b74-457d-b5fa-9b7720cc61a2\n89ac871d-03d8-40d4-ac93-3ccfaa46deb6\nec5430e5-e8c9-486c-9a5d-e022b79105dc\nba2cf2d9-6814-441d-8e62-3378e6fa3f7a\nd1adcdc3-c7bb-4e47-b4b7-75e17f024d33\n0cb2594b-170f-43c3-beb4-ec02d4918e32\n58018caa-d02d-4622-a448-4037ce74eeb2\n95564a85-093e-4df7-b09b-e185bbeb494b\n981b84d5-56a5-4dee-806d-5ef74fbd582f\n8169e0e7-d933-4d3b-ab40-b193cfb7c833\n68ec8843-949e-4204-a930-0eaed9224e03\n31996b93-c10e-43d6-92e9-beac4ddaab37\n74ef1a0d-e125-42d2-9347-9c9f5261d611\n114a4f4f-6b3e-4c3e-a554-6b944ba1fde0\n9e2f143e-5c3a-497f-94e2-2ef84a0011de\nea66400c-48b3-48d4-bcee-68c13c3498c9\n25cd6da5-d948-4869-a80a-e76d2d08abeb\na6c8f8ac-3337-4196-be15-35a51656d366\n1765d78f-53c9-4dce-8a52-bc093ffa1d64\n09346b09-7462-4d85-8242-e04bb5ccbafb\n233b8428-dc4a-41fa-8031-bbafe97b2f53\n5c3c4e98-7c4f-4963-b650-a81919f1c966\n2406db07-ada0-4d0b-8031-2224a41412d4\n4a1cd144-f2b7-403e-b6a0-77c56d04c5bd\n39bcc915-7eea-46b8-8019-c607c1069a9a\n9ac71997-9bef-4459-9d45-9db8ceca6f10\nfe9b9318-e946-467b-95f0-cbbac57de552\n5f4bfd8b-847d-45a9-8592-cd81c95437d1\nb29986d6-383a-435c-b56d-9dc82d2280d5\na7ed40f3-a6a3-4718-8868-f76c715cdbe9\nd63e1de3-89d8-4074-a215-d60245552760\ne4f4e321-d734-4d25-99ee-c3be7a05ab2f\n5a1ac5b5-09c4-483a-89b8-d7379eeb5816\nad3f29ff-fc46-4586-9947-1c13ae12617e\nc6322018-fe57-434a-907a-3f0e211f9751\n093c6973-15f8-4cb5-8c1f-955e29607a4f\n82966be0-efa6-4052-b1ea-efb3c3027a99\n91246c3d-8bc3-4fd8-b579-99ebf315e354\n8c7ffd71-e904-441d-b09e-f6ebfda5bf16\n802c76e7-f275-453c-8023-ff4d421d3942\nf987dd08-f17c-4de8-8169-8a27ae8e21f4\n3c3c38c3-15e3-4606-a547-5ae87db7d272\n60c615f8-e0ec-41ca-b07e-4fe1a1522fd9\n4bb4df4f-2fd5-4066-8689-a34d3646664f\n37131093-6431-4347-9621-9257890b849f\n98db1c84-dba8-47f3-92c8-8b9d6bddddc1\n4089a491-c352-4e4e-834b-f736497f1af2\nfddb8d3d-f219-4e80-9e68-a1a8d443a382\ne3a28d6b-38b0-4a1d-9548-e29725969707\n55dfc500-cfba-4336-a4cd-0a73cef21909\n1d1c5828-21ba-466e-8492-7977fe9c3def\n7a071777-78db-471d-bb63-bd082be137b8\n72c16b70-4f0f-4042-b1a6-3070b1e4e6b1\n683abf5d-e5aa-4a4a-bf92-bc2d147ef2f8\n56f0d811-5288-4035-8ceb-03c11fcb5c52\na1df9cd6-3248-4095-9906-6870ba9736d1\n891cb5ab-73d6-459b-9b09-cc04f7fe56a2\n35c7a478-715b-4be2-b92c-7612c6692e39\nfc84512c-19c0-4f9f-9c05-9b3750d09a06\n0935046f-2e78-4f68-b261-0162e0d6f115\n72cf6b4f-b75f-4d7f-b941-20ade1515d0c\n894be1c7-809b-4886-a971-3a4761ac1871\nc2bed1ce-6b41-4935-8021-3a1742d0331c\n1c945b45-26a0-457e-bffc-f629f5371ba4\nf35e7d6b-bbd1-47d8-80c6-38a898e10024\n7f130cf6-a50d-443f-9a47-7ea0d24d90fc\nd3342f7d-4b8b-4637-b48a-35e6c26a320f\nb85a3808-1f1a-4c94-94d9-fdee438f7170\nb1e3375c-5515-4d77-9536-d7395b736a73\n304369eb-e420-4daf-b370-7e87b634c4ea\n4b8fb230-398f-45c1-a593-f37f6d78b4f1\nea8cec5a-a580-4fae-b21e-05fbc73e6261\n29683493-98c9-4a28-8b70-7aa1e0dfa5e1\n6d04af86-9d40-448e-b596-8e531e201e14\n0cbd88e1-228c-4f47-8c51-e897b7bd67c9\n5b806c28-5ef1-4860-a832-685962de165a\n0fcc2d77-fcc5-47fb-86f4-f37692443316\n60c8bb39-fa3f-46dd-a16a-a39b6b505db7\n0acbffd8-4b2b-432d-a6d9-5f38779987e2\n2af6f2e4-899a-4b28-b590-95cf12ba6816\ne0950b7e-4409-43af-8daf-5c82465d1eed\nb058ed18-f781-498d-81d7-ac3b893f292f\n5d4a4372-28df-4a1b-97c8-02a49997b08b\n7de002e6-95bd-4ee4-a986-d64a40dec250\n99915529-4058-4b25-adc5-4e92271f4786\nb8c14744-251d-4463-b173-81ec69b2c03d\n8a199ddc-1033-4230-bee2-5f2172e33289\nc351cb74-f509-4aa1-babd-f3257b2af187\nbf95c7fc-4250-434c-81f6-f899a4542357\n72efecc5-2973-4fc2-96f6-49dbefdadd01\na38cf425-2853-4337-8ae1-87e1efb40af3\n3773697b-3e08-48c1-b2bf-7044d758596e\n41289cc6-8ac7-4108-86e9-e4c472a3213c\nff5b3e76-b6ee-4b67-b55f-41e1d2f81f76\nc07a1324-274c-40bf-a08b-b5fa744b87b4\n2370b34b-4963-4589-af71-d9f00072d6f4\n51207b95-4f27-4da6-b7d9-dfc213681f75\nc3c5d6ad-50c8-4c47-a7a0-3866b47de7aa\n3ca5df28-60a8-43c8-bb6b-aef99b3320d5\n546fc505-ae85-42de-8d50-3957bafb53ce\nd9d7443b-cdf5-43eb-97d4-1f351dd4fd19\nb0818453-038c-40e1-9dd6-ed9d12aec122\n138dd4fd-bf90-4862-89f0-7173e3353897\n7fc48e80-76a1-422b-8b84-dd6ad700ec78\nd3dbd321-4f7c-498f-a02e-8f5c3411a23b\n15b31c32-0763-4014-bcdf-10ddac89b414\n641448e7-b3df-4bbb-ab0d-4dbcdaf8b06b\n40c03dbd-0302-46c9-89ea-2c94aa53209e\nc5c6b5f7-b62c-43a3-8703-263e208e4860\n0fbdcc88-30f7-4fd3-85b8-7005f98cd74a\nc8ea23c1-616f-459d-b26b-dc72bb47fce3\n7d5db5d0-656a-4ab3-8ab5-45d80c59f7af\n005adf77-7068-4b1b-ad29-9596856566c5\n0e286713-3f6b-4269-9ae5-4c043a30e624\nf64b9ebd-5cdf-4b96-b87e-2af67b0d7fee\na8341205-0a97-4c27-a957-4b8d59153dcd\ne19f6eb1-85d6-4815-ac1e-29a36118e93b\n51d9800b-fd71-46f1-b2a0-c58aebdd57a2\nb7b7bcd4-a595-45eb-ba4d-ae66c8b7fe12\n95fd3c2d-c501-4ca7-bf9c-a06e97df1c42\n88d566a6-a530-497b-a1ac-159784212216\nd973bf38-bc91-484d-9eae-c822f0e9ced1\nf793c1f5-e7c9-4660-9886-c98c7bec2c3f\nb277c145-0f30-4878-bb4c-4275d0b01b68\n7252c518-511b-4771-b895-1e41b9b3b41f\n0825a3da-89bc-4040-ad86-d33c7f067110\n99775cd8-4e57-499c-a800-5515804fc063\n9e764318-3a11-4c1a-9e3c-97d2e707ef25\nd1b127a1-a94d-4149-b58c-5332a49a3b15\na765a3a3-3c56-4e95-9c2f-2a058253a1bf\n241e97bf-d7c5-4567-945a-a455c29162bb\n3424d67d-c887-46d6-87e6-4e79d20e454e\n610e8e41-323a-47ae-b75a-cd75da3cdb6a\n2f6d112d-52ff-4cc1-a769-5f229796945e\nc49c4174-4501-4679-adba-cae39764728a\nbcc11ca2-67be-42e7-b76d-a17bfc70879c\nf5381092-bd38-46fe-acc3-8c5f1754a398\n4f4a89a4-28f4-43c0-bd5f-91cb323d6828\n582e132c-6ccf-497e-9cea-79eb9881088c\naf15e5b5-3f87-4eb6-820c-926845e0d3c7\na27b79cd-6a75-462d-9638-7d1845f81961\nd9233b57-9b2e-4b74-941a-f46a0b090854\nc1930223-ece3-4f6e-9ed2-d8e0c5b690fb\n01e8be6d-b914-42d1-a295-0f4856cf6b88\n6be87a07-25c3-45b8-a451-04b60662ae9b\n971417c4-4a96-4d20-b125-c602fd2ca972\n2bdb58e3-a761-494b-922e-69e47f3c19cf\n07230c4b-3ba0-431e-a764-af35a343360e\n34f734e4-d77c-4bb7-8987-c839da727a5e\na94623de-9531-409f-bb09-2bb1a55bf18f\n776fdba5-8683-4c42-acf1-4874b0415c33\n6e12b1a4-86af-4990-b6a8-633988c8a7ed\nd377997e-6340-4005-ad6b-335c0d7a5175\n57c8a6c4-1791-4bc4-a834-e5ea85cd8593\nae9efdb9-526e-4056-b90a-201761bbde3a\n59fb329e-1bb3-4d7c-ad06-8993f528784c\n0bad539f-3c75-4b78-a776-edd94042f2c9\n67d89db3-2021-41fa-930c-e63f49f7c35f\n8759360c-2385-4644-bd9b-999e3af8b8ca\n7961064d-cea6-4137-90a0-e6c54f7f1cd4\n4c722a44-0a4f-416a-85e4-92453b484121\nb61fdf7a-22a0-4bae-b76c-0dbcf1024698\nd2730c90-d481-4973-b925-30580892948f\n4bb37ef9-e083-474b-93e6-29156424b29d\nf74fe435-d976-4a2e-94d5-048ab1006401\nd8a719f1-3eb9-4678-95f7-71f6676489d4\n1487bcef-7f9d-4fda-8f99-6bdf10f44b50\n5a531aeb-8627-4ef2-87a8-be82083f9097\n1f3d72ef-121e-45c0-8d64-5f75530b093b\na1de25bc-2927-4a31-b9db-cc24c2be261d\nc8753308-fd37-40cc-a16d-c3cff2051b34\n0c5956eb-1996-41eb-a97f-de3e0df156e6\n5f1dde13-5040-4dbd-bcc4-daa51a19e089\n385cfd2a-84f6-441f-829b-e0374a37db39\n3d450074-69aa-4932-8298-7b9eaf5c90b8\n180fb34a-f06e-4afa-aa27-8335ab5200f7\n74ca2220-d3c5-46f3-9ed4-c457ded4f017\n8b4cfb52-6c5b-4da5-9807-28aa6248e318\n32b2321a-6eb5-44ca-87b6-e149b2d0a5d3\n404b1b76-42dc-4ab0-8aaf-831591eb93f2\na538c75e-5377-44cf-aba7-211de0e7a0a6\n3166ad59-2add-4dac-aa39-e0ba16ee4245\nef51fbd6-7434-4194-a7d1-cf7264e06277\n42f81077-f7d5-4b98-a036-c5b9766ffcaf\n295a1d63-c69f-4e11-829c-b4a908136ebe\n4e5791ce-5e34-4e3b-a2c9-a2c4e6d111dc\n5a128f48-6a7f-461c-9892-cf5520230d4f\n58a79a01-6f79-49c8-840a-33cb9a680ec4\n1a97cc46-f0b1-49d5-9fd8-65477749a3a8\n882f3087-7f7c-4fc2-b7ce-8a464e68541c\n2ae0a6af-f63a-4681-a913-03d15c6c3556\n09644e23-198b-4d5a-933f-a863857f8c79\nd09fab23-d967-410d-a889-799b85c058b0\na4827050-32c6-4834-bda8-21f03d8898e4\n4ec47a27-787c-424f-aaca-978e81701b3d\nf925d5bb-5af7-48b0-b3dc-1c93b5e759a1\n25abce4c-2226-4094-a46e-29a319bee0ab\nec2b7bb1-bcda-4cee-a966-a32d5e3abff5\n42dca03f-0aa8-406e-800b-8ad12dc8f071\ndd05fd3d-39d8-4dfb-b301-de628a14c66f\n8471190f-c519-4053-93e5-e633ab7b8b0e\n2c0be1c2-c6ca-413a-ac7f-84f11c36e694\n2aeaa4da-8af5-4ce8-8138-9c984e668b31\nacf39d2f-8c8c-4ecf-8828-7f287fc3a6c5\n1fd452d0-b90b-491c-9661-5e5114ac8f65\na78010a0-6c09-49d6-92e2-cc2261a81b3c\nf97f0a89-c9c8-4a48-9723-714431d5ed47\nbe79bf4e-6a9a-48ef-9620-231e3999b6b6\n13e9b413-ebff-4987-8b66-55b675af0807\n6fc2ac10-20c1-41b3-86aa-d0080854f87d\n7fbd0266-404a-4ddf-88df-ca538c2f3ebd\ne50d1903-3f48-4d7d-a63b-90d15a3597c1\ndb1bb880-8a3a-4c98-9f7a-910132636ee4\n23967b9f-ca6b-4026-8bd9-7799360848be\n49879c0f-f094-4bee-87e3-89213328c150\nbbc8f0d5-9d77-4192-9166-51d0cd941efc\n87b2e542-1cc3-40ac-9521-82d97cb6f412\n2bc109a8-6b5a-49c9-bfb3-dfe491f25cdb\ndd33ec1d-8097-4d77-bb77-e87571c585da\naa8ae3c7-80fd-4583-96f3-4bc4552ec77b\n9eb637fe-4465-4676-9cbc-3f0b41aee68d\n52f05ff0-2dc2-4a45-8c1d-3d010508a2d3\n4b0fe5e5-d6a9-46f4-a538-8602507c8c94\n87c0244b-1a8d-4710-9f04-c1c76ef1dde3\nae103fe1-64e0-49ba-be60-4dc7d48f9a9a\n60215759-a70f-4033-bda5-b11916042941\n14b57ebf-fea6-4778-8a4e-7b383237e320\n893adaa9-c7d5-4e7d-95bf-b48d6d159f5d\nf8a4fb09-3475-4922-93c5-ba4417844318\n6e027c1f-567a-44e4-89ea-a713831cc615\na8ba5530-2213-4d9b-9164-65ede7951c86\nd2fad53c-d323-4a65-8529-d9113f385aa7\n259f7caf-a99c-4729-a956-f55910e98ea6\n9fee288c-adbe-4127-971f-f63c4101715b\nc070fc53-ff95-4c6c-ab1d-7919430abd21\n9e7a8009-5063-470b-b597-87963d20af54\necf7ea98-8e0b-4da7-8c7c-3b0c70a105a7\n98aac5e3-c71d-4c6a-aeeb-04ce45ce2694\n83c4219b-82bc-466a-bcfd-0ed5710307c6\nbf8fc320-3513-4082-8101-65c1251cd275\nb107f446-c8b1-4d10-9cd0-ed9a9080f9a6\nd7cd8026-21b5-4663-9c03-475df7b55edd\nc0442961-7866-41ee-836d-1c70a2c9613f\n8bd57b6a-00df-42b5-9030-77a2df43e4fb\na3ab296b-ebf0-4474-b048-da511da442de\n99446155-339a-4dc5-9056-24234061bbc5\n41d4594d-e7a3-4968-81e5-1d61a6a5dfc7\nc77babcb-d97b-4fc9-ae62-4f203c83e4a9\n19f218a6-1be6-4b65-a6d0-d182398c9e52\nb5a58cf1-088d-467c-9875-ca8892ea2d13\n13a33f95-23c1-4c1a-bd13-35925e3f14da\ne8cf9786-1302-43fb-be1e-c1ff21a80ff2\n558b44e2-9d82-4cc3-99c2-da903604b020\nd7a34206-c9f1-486e-ae50-688287f256f0\n58edff6d-9364-4023-9cc6-7cec21629673\necab94ce-86f1-4e10-ac6c-8e71e0050f9d\n69ead30a-565f-4f58-9cba-c0ba0efa33fe\n130d2e9a-13a3-4381-9f3b-a37f6d0cca7f\nd51acdcf-399d-4cc7-9aa4-430bfbdbf85a\n328c924b-21b7-403b-886d-b9c06940b68c\n2d962d34-de58-43f9-9135-1110331f4d03\neb8310c0-9ef2-4ef3-afaa-41ac5a3e553c\n446916a3-708a-412c-a754-ba6706e97fbd\n476f7d25-402e-48d2-80df-318b4d29ec64\n27466fad-a315-4497-a7e8-8de4937f3124\ne8b7c0d3-6f67-4cd8-b6e5-615ead798c74\n565406cd-7c39-4639-bc61-10f80c888132\ne73a070a-77a0-4b87-8130-fdab4b1f34ca\n6547097c-2e92-4d35-b6b8-766d4c0891c2\n9cf52a2f-043c-4945-b7c2-2e88df6b404a\nd92906da-d2e1-46c4-bc25-51d08f54f94d\n2d960974-8051-4337-8a27-04cdb48446ec\na6ba0a79-a5b2-4c47-89e1-4df12ecca639\n316fe11f-aa35-453b-aef3-14f45aae3737\n614ad83a-0afa-4e5d-8c56-afe04f75f143\n2b5148e4-fbce-4a5b-9946-85f28764f418\nd6ea1878-0516-4f9a-868d-a761b087fb2a\n05e757f9-f75d-485f-8392-6bdcfc1af547\nef8f6b8b-dfff-42d6-b24c-df506b043443\n29b22b46-83fd-459c-9f27-a4e52c4b0a6b\nbf936627-49ec-4eb4-9557-5723fee45e91\nda26feeb-cbd0-4acb-b05d-23231074cb99\n118f24e2-6af0-4ea3-8a54-c8fa81babdf8\n30c8c452-a5ff-4410-a74b-ce78997c2ffe\ne9f07c33-a7bc-4b07-b65f-7a27132513a8\n7ba13199-0652-47c1-936e-f76672ead3fe\n9005910d-e32d-40ca-898e-8842080604df\n4012a859-6e3a-44ab-a831-eebe4f8db40a\n40430c5a-dedb-4a6d-be96-ddd269754d05\n5bd10817-1caf-4380-bb09-602951e21e9d\nd3e4a0fd-8012-440e-a0a6-eba5d75ef5b8\n4f9babc9-7e6d-47da-a040-742dc83d0807\n8f0085a1-0c75-44e2-980b-9975c64b97a1\n8b461163-d6b8-45aa-a202-996dbe2228f2\n66f82efa-8b7c-40fd-bc73-21671ae32298\nf3daa429-afc3-44cb-9245-3c65f353c8e0\nd625800f-9095-46c1-a813-48730b0809ec\nc4fecb26-a9bd-49b8-bde0-789690224d4b\n06ac8b03-3c29-45e0-ba4f-006f395d1b35\nb14b624e-bf3e-4d8f-aff4-459c07fd3908\nbede943c-be1c-4c89-a21f-848744d18313\nd5d21549-a369-4021-8192-a39a45fb0383\nac1edb8e-9687-4994-be74-0366cca64421\nf989ffe0-608a-4986-ba82-bbc649f669ed\nfd1217da-17d4-4a20-b8cc-eb2c2457afc9\n6e70837b-ac02-4f1b-9cfd-5df4fc7906e5\ne02ddbdf-bc28-41ad-9e8f-4f1e60898e32\neb30b508-dc01-4d72-955d-72300765dc05\n9eca6cb7-5ac8-409c-9095-d043a2700db8\ne5a90a54-9d3a-41d7-8560-72041a6af4a4\n6584538a-298d-4ff0-a8ab-574212382f50\n7e4f8507-7bcc-48fa-a643-4c1b2047f933\nf3b37878-cee9-4d68-b108-1bda6ac4a5a4\n41ac5be7-2f49-43e2-9af7-e82258ab2bc0\n19516693-561b-40ec-89bb-4db1cc74c928\nfc992773-15e9-4f9d-adec-0c67c8a6e691\n05e230ec-35c5-4fd8-b8b2-3a4807a2fc77\n5720ec5d-cbd3-4d5f-85fe-a1aab22d6607\nb877f325-735a-4c72-a498-332f9c1750a7\n82b1169e-d029-4992-a9be-4d74e7625798\na5664786-ade7-431e-a085-4786ad6c762f\nff4526fd-67a8-459f-86f9-de875527b8fe\n1d46ad07-4e77-4ab3-a483-a83da0988f66\n0209090a-0fd6-43f9-b8e9-74643913bc8d\naab0f5b5-b544-4686-9e44-e3a5b9037372\nb79a1d93-a590-49de-9172-4f9f7de271d7\n45b19771-ae74-425d-a270-d910ab262b2c\ne3d96dba-75e2-4dd3-9072-108d00e6984a\n42b3c61c-b9ae-44ca-bdcd-54de605c4a50\n5f7be5f3-37c9-4290-8137-9eb67c3c8329\n96f1dc31-39fe-4b95-95f6-3ef3f83ff19c\ne9d48ab3-499f-4036-a1ce-884738f96252\n5041da2c-a08f-48a7-a031-0464780b3d5f\ne9083706-17fc-40e6-a175-5c0ff6014bec\n2c0ca070-ad6e-43d6-81f1-f44cb4288004\na9a0261c-6efc-4873-9a6e-b01c52ea7fb1\n73776964-a096-4059-87b0-c5bcb3d6f801\n020f669d-f8eb-4a18-9a60-1de6d7052ed5\n9f456a6e-51b7-4639-99e1-13cc8659ccec\nfb4ea5fd-85fe-47e9-a498-07f80be88a70\n771aeebe-3c4c-480b-9265-04e2b0faab3f\n6df05cf2-35fe-48f5-93a1-39b5d6a2d5b3\n90918d71-189e-4051-bb71-5877257231e9\n8b1cbcd5-c002-4fcc-8d44-299c1ca4d11e\n44ef6d5a-2f15-402a-9ed5-55829179761e\ne006d295-80fb-4c4e-9a28-cba8f248b57f\ncd9d16f6-73f4-4080-8a23-310e0dff3d3f\ne001ef3e-dc41-44ab-8029-c6933883055e\n317777d4-8fa4-460e-9b1c-43c37e10de59\nda3601a7-27a0-4f89-a0da-0f2dcd86d94c\n11411c7a-8cec-4d69-ad6d-1a58f7d09aac\n054d0916-6104-4a33-8345-446056e8c2f6\n9affc0ff-18f2-45ad-9031-ea3cd5ed4e6e\n95448358-f2d7-42d7-b72d-ead7223832d4\nf00e3ec6-65fd-4ba0-9240-d673a5670567\na093bbfe-6efe-4a75-8496-5008534d7019\n1b027ead-1b4b-467f-b11e-91263213db54\n61b87cc3-2243-4cc5-90e4-34305c816a3f\n992501ef-27c1-4f8e-8ca5-95574dcbeec0\nb3f87727-dc71-420b-9d3b-7306ae9da6d0\ncd6053f0-a70a-4092-9361-2a032f195438\n451df00d-9172-48ff-9b16-6ce273f7c227\n1fe4237e-0e4f-4361-bff3-779eab485665\ncf4896b7-d82e-4226-b5d5-74aa569d2e26\n7b2a483d-b9b9-412d-9c24-65ca311f642a\n1afc6240-97f5-4add-8a0e-b9b46fa02fb2\n9706af05-70f1-4d5e-a13d-c9438cae7f27\nb6d6a675-7e6e-4119-8c89-ebd77753a171\n6e8a952a-220f-41c5-9c57-d778c4c25964\na4740c73-6178-4e6c-93a9-12f8fca21cf2\n4dc145b8-e784-4289-9b22-fc37a0694cd0\n596e32b1-29d2-4049-ba3d-b87546c71c84\n2c0a2a0b-48d4-4528-913b-07054134ac0d\na0b5e6fb-1ec1-4b35-bae7-f6d2951ac1b6\n6f70125d-63e8-4ba5-9ed3-466c165f1a2e\n1c5b2cf6-d171-4696-89ce-25c90b4b5117\n0b40acc5-02bb-4bf5-8560-19c3042d1d4c\nfafc0882-42b4-482e-8806-49962e4cc626\n2a837e4b-1dab-4c63-a2f0-8b88483357f9\n235991d9-b6c2-4443-944b-200b17714f9e\na5ebcd50-3595-4974-ae12-5edb6b5db4d3\n3f35a055-052f-47ca-90a5-c83828cfe14b\ndfb5b9df-5cee-4d93-b49f-7e210de8a1f4\n3c0e4fcd-5911-4272-a21f-401a279b9ecb\nf66bb3b5-d284-44cf-b946-21d959081cfd\n0d27079c-7848-4af1-aef3-9d91ed159754\na169f5d2-c4d5-43e1-a4af-156eddda447f\nae36893c-faef-452e-8dd0-d01808d794cd\n71bdac35-b8f7-469a-b716-865f209f60f4\nd6e0bea1-09fb-43e4-b20b-05dbcd1d045b\n98bf9651-5303-4c37-a479-7cf831855165\nc2f73df7-bedc-427d-8a81-039f50e4cc40\nfa1e529a-80e7-45e1-9887-e897867be21e\n4399940b-900d-4a68-911b-33eec5c5cade\nb3d419d5-3a7d-49e8-a130-81db2608cc37\nca1820b1-3b71-4ccf-b2ae-80e59e96cbdf\ndf600d38-9eb2-4e7b-a80f-bb8e3abe19b3\nd24ecb3e-aaa6-417e-9302-f9a86b2d8f81\neabed77e-3da4-4b87-b56e-6cdcd4ce7f5e\n5b54b47a-ccf4-4580-985f-5035c607d3bd\n5605920b-e75d-463c-bf47-864b81e362c6\nc8057c18-ae38-4119-8903-3edd9a4e0dcb\n4d96a06b-c5cf-4018-adb2-fd0327242a82\n4e8e57a3-7ad5-4ba9-8140-95eed2511736\nbb6a6638-2337-4fef-a1f8-430203f9657f\n02483525-2ba6-40a9-9338-6cee15c88023\n8a754cd1-2f7c-473b-8289-280b6c5363c3\nf28f4e3c-2f91-4afb-9971-a4894c6c0dd4\n921a7380-9e13-4014-9eda-4ac36f9799cc\nba6253e4-6635-4a96-b9a5-e6533e5a82d3\ne44808d3-f6bc-4665-9b90-5da8c32244b1\nd23d22c2-f8dd-464c-8862-e881acbbab7f\nfc6d4f1b-e8c9-4ad9-b4e6-6d6b03785aed\n093147f4-bd28-4d36-97cd-d103f6218141\neaf78e5f-6514-4be1-8b8b-979f7575a4a2\n34859fa4-3db6-43a0-9c9c-7caa99ed08dc\n8be5fd24-3bb8-4bf2-adc6-31604ba30264\nbb795719-dc9b-4f2c-af45-194f19f51b1e\n721bae70-dced-470d-a52e-07757badd9d8\ne2eb5c8c-344d-4069-98c8-c378dc0d9ab4\nd7b1d5ef-85c6-4be5-a9d7-572490c680ec\ned917360-6eb7-429c-bbc1-e8c4ba515101\na6cee261-b119-44e8-a2ce-94ba380a8709\n0026cf56-3ad5-47f7-9cce-ffdb975b2b53\n42dce0f3-f81a-422f-af4d-c057ab0a2d33\n6cca81b3-3c69-4425-bdc8-97f46832e8a0\ne1628786-c797-4a63-bb2d-2fa72cbcee08\nc781ece7-8128-481e-ac48-f3739d3d98e8\nd7134219-173d-4789-a833-e2751135e01b\n5267f697-32a7-4aa2-8456-319caf1ab6a8\nf938dddf-105d-4914-af4b-3d1db81a6e58\n2c5955dd-23cb-42b9-abba-f3dda473ef7a\n8f0b4a63-3d7a-406f-956b-f019529d4f8e\n8f426262-8f9e-43e7-ad82-812e766ba426\n0a305000-fef5-4f58-9abd-16757f8354d2\n57d30982-d35c-4562-ae21-f0e8f2519512\n8ed91c57-950e-4ceb-9996-85dc5861b36d\n5289a069-22b0-4ed5-b60d-6309e612ecd6\nd13ba706-6703-47c6-8beb-156fb3fff7e9\ne38706ea-7169-4343-9ae6-a2cf7f270af1\nbedc53a3-281b-4b5d-84ec-16987ba305e0\ne3606496-4f23-4ef1-8036-990eeae2dd09\n1ba893bb-be30-4d89-86dc-a004f471e548\n17ce190a-04be-402e-b78a-39711b5b8f6a\n5dfeee20-0ade-446b-b9ff-cffdfaec0503\nb4be7238-b17b-423a-9e83-5f3993599890\nb1c14e0a-33ba-4c9f-9ccb-8401aea368ab\n35faa25e-625a-456b-a5af-2e1893862e5e\n5731265b-c5a0-4b0f-9229-89b110f6f0e7\nf0589975-4d48-40d5-85f9-3a775a9b96ed\n1ce88269-cc2c-4195-8de4-57afaee3a5c8\n578d6865-a5c1-45f9-94fd-fbb93c57d8d6\n046543da-7bd2-4fa6-835e-7194c4711f5c\n14b94d53-04e8-4c82-a459-12f516a06b7f\n43a2a2e9-f499-4c63-b6fd-972014607630\n0897d239-0e35-4a4f-aed9-36863035c3f2\n3cd160a3-2a8d-447e-945b-8e9fac79fcde\neb496d26-43d7-4cad-a208-83b5cea3a0ba\nbe0a2343-4471-4d29-8828-2b75cb76b6d7\n9d2e9f7a-4609-473c-b4fa-02f0f4a6a5de\n31e34dd7-43a7-4111-bfbc-63b09d35ce68\n170f094d-8e86-4c52-b0d0-13709420856c\n6d1c5fe4-9d42-43b1-9725-3c9ef17715db\nb6665be2-1ec6-48dc-b78c-a89f60903371\nff835238-400c-4099-9e86-b98cdbbbc8cc\nd468e3e7-5ffc-4845-9c81-d656c6ea5e16\n772104e0-b909-437e-84ee-844b43ec4145\n63b94a91-26f5-4770-b489-e9ff4f1d38d7\n6d1eefdd-b8a7-470a-8516-efe57f232374\nf251bc77-3418-4edd-a3d4-d6544ea243ae\n325eda67-a8c8-47b3-8d1b-31b980a10a53\n4593f796-1e74-49b7-b71f-28fe4d38da88\ne187e556-4cd2-4a57-86ce-42136e383bdf\n5ded1c5b-f09c-4e80-94f5-83627267b5c3\n115b6e2c-1ae6-4bb8-850d-90ef93389982\nf73fb3c6-1998-4dd4-9a25-74c55f58aaae\n1b978f74-7778-46f2-bae8-3d890d67f99a\n70d44c7b-b99b-4582-b7ca-caff76887027\n1e34be4c-4556-443d-82e4-5741a210d932\ne8a701d0-ad41-46dd-aa6f-132a64c8a72c\n281d56f6-5649-4c0b-a420-0503c3ec2547\n13c2de2f-18fa-40b6-ade6-6a97a1a588a2\n5f066b4c-7ce7-417b-9318-6529bd8df2aa\nbd777179-a186-4b04-9f97-f4a7a4788753\n31bd22a8-3199-4ff6-aea9-272efeaadc44\n1eb7793c-b312-48f6-8497-3dcf03a3d3cf\n7fcafd3b-9c4c-4877-b93b-783eeb030363\nc55f22ed-6343-4f4e-9d8a-af63b3cc94a3\n5859b8cb-5eab-44ad-97b2-9be6661c909c\nf30689e4-5f46-486b-8bb3-85ee8cbae3b3\ne1d7c12a-4bd8-468f-af2c-60112793c63b\na5d0d97f-4471-46df-a35e-7e24de82b778\n6cfa62d7-8d18-442e-844f-f6adffa116c0\na36f57d7-807d-40e5-83a0-1a22484d3f1b\n07d9940d-a24d-4d4f-9aba-e54e62714ede\n8db96d68-cf0d-4e14-a706-6133bd8f22a9\n8ecebab6-bad8-439e-80f3-eb93adc3fcd1\n29f1275b-0690-4ade-888c-2a7ccfa53409\ne0565538-a7a4-408c-893d-3e86e5bc1dae\nc1035f17-fe3c-4d82-b267-e9a2deaa49b4\nb704f665-6adb-492c-8bf6-76801db9bdde\na84fa057-be34-453b-9be8-1e289e467588\n9fd85a93-fcc9-4be0-b40e-9a7cefc521b4\n309050cc-777b-4216-8ae1-8a098d14a113\n46a8af2a-78f8-4ccc-a642-88e99640edca\n61ea490a-f492-4762-a0b9-bf9d3deef9dc\n9f6e78bf-b406-4b78-998d-493d6566f19d\n4fe8eb67-48f2-4275-b13e-fa5feebdb3b7\n0a8d7fb3-58d9-47b5-bdc8-9b8551b275ac\n842517d2-5949-4e29-8e8e-18efbe3b3268\n8338c189-0c0d-4f20-883a-1643c7aa85aa\nbd97b07f-4555-46fc-805c-50f19ab8ae00\n7d7c6ea3-3a5e-456b-8cb0-cab427e2e493\n2a7c894e-f059-4c49-9e19-27fc6f581930\n5b7677bf-fd5f-47e8-96e2-92d86455da56\n04bf5099-1934-4f3c-b9a9-b12877dfb455\na0085593-a6eb-4c2a-8297-d7c46eff4526\n0d424974-1970-4c5a-9b35-26091f4206a0\n77e51ce6-bf52-4227-879e-9af7115439b9\neaa12f40-b16a-47dd-95e0-60a3a3e7f309\nd5427ad1-2e08-4982-a562-d8bae1972cd4\n8d4ca0e5-9c7e-4937-8d9b-5c7582ae2fc3\n64d15f08-c62c-4778-802e-e784f4b6b2f3\n99050a3e-d50c-4fd4-b052-7bf4dc5847d1\nfc8d45bf-4420-4e52-8bed-2031fe79e80c\nd0c98f1b-5b20-4f3d-99bf-0528391b8b15\n3eaf2671-6144-4cf2-bab0-21a4fdb6ebb6\n6ac3858f-6d2e-4b37-b0f0-443b271ce8ee\n269f3b0d-6b18-4c96-9c97-892bb0c0d400\n94ba6ed8-cd2b-4dd4-8335-8b08e776d475\n4026f5fe-667d-4c27-a674-37d4b45675bb\n5add005c-fab6-422b-8895-0ecb1dc957b9\nf6cb10cf-cffa-473b-8470-fcbec4853684\n413ee81d-41ab-4045-a31d-203fd7609ca6\nef7f8223-b58c-44a0-b58f-da719ded1bf7\n24933c12-1d09-45af-90ea-8bbf828f1198\n1e9f4675-5010-4e05-b33b-f6b2c2eb1683\ncb1cb8b8-b271-4ed2-8b14-c201f4c8db9a\n9177dbc4-611e-4b2c-b046-58c192fc7b9d\n4714eefc-220a-4153-b09e-84eaddbb87af\n6e76a13d-7bfd-4b44-b1f5-126c6a05a6e9\ndfd81329-6396-4892-a9f2-fcf0dfa1de1e\n06575082-364d-430d-8e31-8baa3855ec12\ne75d4902-f2a6-47f9-8b58-302b22fb444b\nc8344ca5-c0a7-48ad-af06-14d2391dd650\n3f90cafd-dc1d-4fc9-b1b8-603dd6ce766f\n90e74ec7-0d65-4eb0-aec2-0fd56a081110\n286d346c-8631-48d1-afb0-c3e556f3cdf3\ndc911217-22d2-46fb-9c20-4ffebf878a01\n631df0d9-d6d0-4655-aec8-1fcf2d2ec69c\na39a15fb-fc2a-4cfa-ba40-c5cae2f869d5\nb6e137be-dcac-423d-87a1-d2e3f55dc44c\n7d7f25bb-a448-485c-9f30-19994eeec2f3\n87ef8ab2-70e1-43ec-9e8f-74f27175ec44\n9d55dd2c-353c-4c51-a02c-c9821fe4b41c\nd5d3bde3-1301-4ed7-8672-7b750389dfa4\nbb71d027-f804-4afe-a5a6-6d575c8e63e7\n11f21694-9205-4932-be20-396557279475\nd49291bd-0b4b-4880-857c-c1b35104a733\n497eb988-7503-426f-aff3-33df10f9ac2b\nc1dcb482-d52b-4f57-bf61-4138280083e3\n888433a0-855e-4451-aefa-060bffb151ce\na5e196d4-d43d-49b0-882c-123c1ef6d905\n112c0f8f-52ba-4e23-851c-a1487f18f75e\nd4f455e9-6d7f-4657-900e-5ae41f047bdc\n698fece4-b70c-4b3a-a39c-d6fb19e30c02\nf7420db8-8ffd-4071-97c3-40df507f8ab9\n46a1a2ba-77c0-40ab-9fb1-6d6196f6164e\n5dbb749d-f21f-4bde-955d-526aebfd7e7e\n044465ca-4d03-4cd4-a08a-0084a969197e\n031d8324-b80e-4d4d-a66b-b1a257c9de30\nd5f06387-593c-4a55-af3e-539c8dcb9b3f\neec82bbf-cb5b-45b7-92f5-94cae3bd5769\n08183d9d-58d6-4678-b959-1e524fec9b8e\nd7dc0522-d78f-4f8f-89c2-8e39fc4bf526\n9e7f5171-45c8-464c-baba-4155bf978ef5\n548297c6-168f-43f7-9082-38e58bfc557d\n704cad6c-612c-44c7-9370-e7822551f5cf\ndee5e1fc-d78c-408c-9bc9-9d5385855c3a\nfd5b9d27-cb21-4f42-ac52-788d14facfed\n7b126577-0209-4b7b-b8ac-af9b52dcdb78\nb9facb08-f529-4863-9361-951049b5e27f\n2583142b-7213-44eb-9654-d10c9d5f6985\nafe2d4a3-eaea-4c2c-8b14-b856f65419ce\n5eb8a1b4-b35f-43d6-bb3f-8bbb75152b6b\n24e30f13-6542-4055-8aa0-dc977bb5ff7f\na27f4e2c-cb67-47b1-8fcd-43cdd0f75852\n3e33bd33-0b66-4cce-8ced-fe2c51bb427d\n8d1fa10b-d611-4435-a10e-bc10602ffa6c\nd73da3d9-671c-495f-833f-e65eb2cbcd72\nfd8322b1-c9fa-4c8d-9737-9e4ec21ab740\n20e21929-5352-4f4a-82ad-3c8364ee0c23\n2e8125e3-bf1c-4731-9e18-538f4670671a\ndb3c5f6e-4f85-4199-98a5-8c9acc07bbac\na9df5c57-a2d7-4421-bebb-3e26cd617b5a\n071388f9-57eb-4f2a-aefb-2ca6b6043977\nd880c0c3-3f7b-4371-aacc-8f9d8a5627a5\n676a966f-1820-403e-b9fb-e91c8c658579\n3fee41f6-bc2b-4172-ab9d-e6f2dcc9c8b4\nfbae503c-ebcf-4b3a-af2e-4979b93f369d\ndd034ba8-8c0d-4469-9c3d-0a73d7ed24fa\na08c5ffa-6fc1-479c-8b37-e63f8126deb7\n13251043-1f46-4139-8eef-fc7046eb9ddd\nef474ec1-20a4-476f-be9a-3e5aea106800\n80c916c6-3295-4738-98f1-90a533110221\ne80d0615-f5af-4d6b-9eb9-340932bc1e00\n3d51735c-9387-423c-b8d7-4e4e6ff2fb18\n9289fa57-4f8d-47b2-aaa7-f71041883596\n724d41c4-c8ce-4921-b0ef-57873c75c159\n80d48cbb-66fc-419f-a67c-81a8e476a1ce\n4876063a-909b-4e76-b5f2-d6c1d7c721ab\n3ad4a6e4-12aa-4af3-8cdd-f780de594392\n76008abd-3554-467b-b233-6a7d6a426125\n24a371f8-d274-41e1-aeaa-2ff28e6cb31c\nab210300-0f91-4c70-a714-d373e1fb83e5\n9b4a4942-94dc-41f5-9e8b-134cc245c006\nd15918ee-57f9-4ae4-a434-91703890f10c\ne681754a-f7a8-469b-a3b5-df5ab1129022\nf54c2fbe-14f9-401d-8c6c-8accc67d5cb2\nd6bb7306-8aab-405d-ae49-e9e2bc4961d2\n84e4051e-8a6e-4cca-a89c-9fbbdfed3694\n95686042-c4d3-41c1-a710-eef6dc66c178\ne54d8722-6c39-4294-95cc-c8488cf0ecec\n2a041bfd-0cae-4463-9931-f8e58be6c199\n50607ca3-1ec8-460c-94e3-0fa7dc369d31\n637a695d-b2ed-4c4f-adf5-7577f302968f\n8bcc9536-d3ce-4c1e-8b7b-64d3fc76c505\n399d07be-de02-4a97-87f9-ffff94633a47\n5c6b1239-b7fb-48f1-975e-608e0a1ce4c1\n975f59b4-b24d-4b66-b9e2-8372b1909c62\nf6d1917a-adf2-4c4c-bd34-c3eede991d4b\nc5794f49-78c0-49b5-8aee-435c8d0aeaaf\n0eb2cd10-adb6-4e28-94ad-ce34e9a9a8be\n5112e2cd-2e45-45e2-b66d-d2c6eef8c730\n0cf3ba83-c386-422f-8328-dc5cc6d9cab1\n2fce6295-a02c-4ef9-bf31-e615468bbef3\n7ff46dfa-e28e-4e81-a1b3-e7e5a10a1bae\n48f91996-a41d-49ac-9aae-fca6045cd4d0\na619ce61-f899-471b-985e-2fc457eca50f\n29dfe83b-d28f-4f6f-aa24-21b926334e76\ne020709b-0d60-443b-a10c-adf11aba334c\nab14af0f-810e-42e1-a151-5f4673f8b79e\n616b361b-8ab0-499a-ab30-0728922622aa\n1dc57076-276c-440e-8f8b-0312c5783e8c\n44b8714a-8f4a-44e0-baa1-c50811b9c97b\n8e47e686-b0c0-4f0f-a298-2c024a27e8fb\n2c1b9fa0-7a71-4671-8735-a0d5cecd33de\nb7d55150-201d-4a2e-a574-40b292e7b5c0\n570ce6e5-3793-4212-9fd0-7ef982368525\nf52d4ebc-848c-42d8-9c0d-9d8fdbe1e626\n83e9bbf6-a22f-4ee5-b84b-f47e503c3501\n6fa911e4-5169-4851-b251-14d4ad5b0e99\nb1b48951-e9d6-43ce-b514-56b53ce42129\n44ed0fc6-03a0-4db3-8ca2-491d0afad260\n584e1d65-3aa3-4e8f-b914-a0784c8e62e0\n63f833aa-002d-441b-a218-f73ecabdbd65\n60da3111-9454-4f06-a3f8-26598f13665f\n6f167762-4799-4a55-aa5a-6c77ad4383b6\n5f65d94b-6e05-4969-9ea6-9cafd3df7b78\n3312f3ca-edb0-4f15-9b8e-b95a628cf0d4\n54035e5d-6aa9-4d2d-882f-aead9b10ab38\n90f15124-3728-4225-a742-28776b57097c\n79886a33-19cb-4d07-9f8f-fc38176c4d90\n937f20b1-9ebd-4e12-8fbc-77cc997b108a\n52964118-5851-4b31-a357-9df55ddaaf1f\nfa2822d0-c4b7-4c5f-8a4e-2dbac0e18d99\n0c89f9d4-f11a-4a96-9a61-727c7b804119\ned33e776-73cf-4e3e-9d4a-0fdc0e6afc7c\nb9ddcaa0-434b-466e-8a4b-48188cbe0bbb\nd5c4e133-f5bc-4582-ba93-d117844d7bb8\nc83d8cbf-992c-4879-900a-3f1fe9c0f70e\nd7c95a5b-b87f-486b-a15f-d4d8e018fcaa\nbbf46916-f9a2-46ea-9a6c-ec76ba245e5b\nb4253a34-d05a-497e-a668-9698752f8b32\n554c2624-a33f-4c8e-90e8-177e18328873\naa14d7cd-c3ad-4a8f-aa0f-b1d0bb385a31\n285a014d-bf30-40bd-a059-9d79435fca9e\n698f4068-dfa5-4b65-b009-58a3ee76730e\n120571be-aa9b-481c-9483-90d34c1dac08\ne13e28b4-fc74-4777-9ae0-e47e5384899c\n1819c8bb-29dd-4351-88de-ae554a988a7a\ndb7f1bcc-0976-4216-a423-e8fbbe9639e7\n80e09599-9ebb-4cf1-b224-919407d21ab1\n7d437334-0753-4636-88d0-803b08d8281a\n0cb56ec3-74a6-48b5-9510-ec77179e1c63\n1e421a93-329c-4837-8b10-553569e91cf1\n6fc8b512-603a-4f97-b974-832dee1fd92d\naf2e62fc-0034-4a39-8823-2c359c450991\nfddc04d5-b390-4685-b467-335e6e0df7a5\n2c9f4496-294d-4d94-8f68-221ae0cf75b0\n7461513a-6233-44ad-852e-8e171caf3426\n7b9e5dca-c797-4b06-b25f-2d593ead5e9b\n984a9464-bac6-4a19-ba07-44c7e9cbefb4\nbd27f117-94c9-40b2-9fae-fa50d51611bf\n71c978a6-72a6-4213-aeee-64daadbd3817\n0397e21e-62cd-46dd-bd50-31bf1e473c74\nab430245-660a-47b8-af55-4e7b099234ba\n534bf654-d0fd-48c7-90ee-241dc1c3d984\nf458f493-15c0-476e-b870-6d7ed69a3cda\n37ad83e2-040b-422a-a952-286de82654b1\nf545d688-927a-4275-b688-55eb3ab67981\nf7e7683b-d401-464b-91bb-086db03eaa10\ne421c017-d225-4eea-b15a-43ce1b141cfa\nb5e770c0-a177-47b4-92df-2f95e8778112\n28233ee9-04a7-4b06-80f0-4458d13dba2e\n93b0636d-edc9-418c-bea6-d63ab74787fe\n33c48ef8-dadb-4d33-9bd2-0dab40b34ddf\n6ad927fa-31c9-4489-b850-f86fd13ee653\n96598ad0-81ac-4fa6-94ab-1ad67f0f9fcc\nd7b56198-aa53-4a20-8fde-887061d022dd\neba837ce-0b53-48ef-b933-5675f48d9592\nbcfcdc92-6b61-4d07-8ab1-e8e8292b1375\n077c736c-f453-41cb-8aa1-56c291d77ef4\n315f0880-e405-47a4-85de-8be6d716eda1\n596c8a7b-0445-4c9f-a35c-f6811f666f1b\n19f0799e-2a30-4503-990d-4abbd9c3469e\n8c416ccf-8c9e-4087-b687-8bed80be6d3c\n93e2d93d-4261-496d-a4b3-ea0d5234a033\ncb04204a-dbca-4bed-91e4-b0d07601a439\n236e9ef0-bc07-4baa-a596-8e76038dd131\n118dc4e1-6cea-450d-b226-d0f06ef6028e\n8bca26ce-a21b-4e84-ada2-ea64ec9663fd\n798e1bfc-c40b-4b29-85c8-c0dcd47241cf\n73d1d2b3-1d26-40a1-a4f2-53cec8b93749\n864be95f-6735-4919-9676-e82aff435b06\ne4b99335-21f1-42b2-8921-122de52deac2\nfb5804ee-8387-4cbf-a427-ad11454a0840\n33dec443-d881-4d8f-9658-cfa0247f4936\n88dc4cf6-b2ee-4e0e-ba4f-449bcf0bb72e\n64c6ad0a-f19a-447f-8663-17c96db7db7c\n7a728248-5c67-4189-885b-eb1f620ed2bf\na6f08516-aab9-4165-9ca0-29c4e4b27e31\n1f10b6a9-e6f5-4203-9356-fcd695a11777\n1d098e44-0faa-41ac-8877-820824e27fb6\naaf2472a-2440-4447-a00a-36c9126f6884\n12684a86-b0d3-4f5c-90da-64ee9451c686\n4c03035f-7522-4610-a629-d9d30bb16bfc\nda840dce-604d-4f17-9f82-1a348ed7e2e3\nd3800888-0192-46d9-8c9a-f67a7dbe25ed\n21fc0942-cf7a-43b9-ac2e-e2018c21c11b\n8d36ad27-c707-414a-8479-667c7b72fdb6\n533a1656-4660-45df-960a-45acfbcd1869\n22c015a1-4779-4117-b800-90c192a0b04d\n9d3944e4-57ed-41a8-ac7d-286a5b1a78ea\n0c0a6dc6-0169-4506-9885-b5834319a6be\n75196fd2-6c24-44ab-8681-5de9696bad5f\n26c721f5-84e0-4c55-aefe-5b4f534c7e23\nd7fb3f67-6f29-4b2a-a0c8-8b93e412fc28\n62442d0f-7bdd-4945-acd7-9b2e94e21731\n28c4c2fc-f6d9-461c-aeff-297d8fe63488\nb963c063-2f07-495a-a35e-56b727b21871\n128a7b1d-dd5a-4691-b65b-69ff85ba0825\na86f4847-427d-45da-aa00-d11de4e03cb7\nc55ad0c1-33cf-4b68-ad61-9f3057e336f8\n3045c317-2119-4e8e-9e62-7844fa79dd7c\n688933f3-91a4-45de-befd-27565f50a288\nf63a591a-fd4c-49f7-8abf-a0e6d2eb3723\nd5301621-1297-407d-9615-e8bbcb37da93\n6e9a670d-ffbe-4ca6-8d99-1c9bf84858b6\nffe55591-5bba-4c3a-8ae8-6ae44941cbdd\n0d4562dd-5633-4bf8-a1ff-a764a83a7372\n0a81aec4-cbd7-410d-82be-3b233df6ed7a\n254d0f71-2f59-4796-bf47-c0967a82e409\n35f1ae76-ceaf-4464-9014-949b3b23e88b\nb6ee4d15-c529-4400-b29c-659b310674c2\nab9aa967-1af0-46e5-98af-eb98c3a41e36\n530b1644-c6ac-47e2-b1a3-d1423d8bb1f0\n99e80803-d74a-442e-9bcb-cfc1d7a2c318\n91017e9f-d4a1-408b-855c-851f36761208\n2bdf31c4-48cd-4d5a-b7da-18312adca3b6\nc0e30b42-ce12-4d55-a189-eec85e209234\nc4be67e3-2843-49dd-af97-249509abd696\n3254981d-dd0f-4f94-9434-bbee41c9538c\n14f26c74-19b7-4ee6-9ee1-8c607eac537e\n3ac2fbf2-0264-418a-965e-6e6b0f6065c7\ndf115a7a-c40a-4aec-91f0-e126d7de3749\n9fc12be6-8bc0-4dc5-aadc-9f631d87bc0e\n6f503777-c1fe-4c3a-aef4-320b83987712\n7b9f5255-0c5d-4110-a763-3a8c3f3fb985\necb4484e-dc8c-4ea2-ac76-9fcf2fd3c1c6\n97076d3f-ed16-4574-a024-d141cd09ebc4\nbc091a44-6522-42d6-bdf8-635505bd6bc1\nb8cdef14-1c3d-422b-a35d-55146f206716\n59e73911-5fbf-4c44-833c-a65404de17ef\n354f5274-2391-4d2c-889d-56a98a81a77a\n375b9282-6c7e-4310-bc49-a3ff56795847\nc709e9c6-6a55-482e-8d21-cb5d8a14db00\nffdb952e-ba76-47bb-94e3-581236e86990\n268f9112-4b9f-41ed-9288-f705887c723c\nec818748-6f9f-445d-ace0-9ee599d3acec\n613a7bae-e5dc-41a5-b30e-0697aadbec8b\na9e285a9-27b3-421c-97ce-f26f6db4e87f\nb799f9da-eaac-40c8-a1c5-3e20a690a489\n807ac033-e387-452e-ada2-a970b456814c\n28766500-736c-498a-aeb4-68be55536d41\n14091380-4aee-486f-9106-45f6bdc33fe2\n5d557a0b-1553-42dc-a7ae-363485a164b3\n8d033fd0-3af7-40a3-b4c7-80ffc17d7232\ncccb3c1a-bac8-445c-85ff-89e445369066\ne870fef4-0821-4fc3-9947-f54df52a4f33\n0b54b407-0c33-440e-b0b5-00d48c1bbcdf\n6c6dc8c3-9efe-4f9d-9e3b-1d0e543be702\n9c55675e-91b1-49d0-b3ff-259b033fc925\nf344f328-b48c-4743-be68-0519b52f3049\n267e239a-b30e-4a62-a551-4ec9a906109c\n88095c68-3428-48fa-91d8-e321edd9cd7e\n8c40b5f3-82e0-448e-9912-8ea2cf9ebc9e\n1fbdb4f5-b85c-4853-9975-baf2d60d3127\nbdce1be9-772f-41d8-9760-37e23077e5ca\ne16b5370-1f04-4c7f-a35c-9a7df70b1e7a\nc49a590d-ef23-479f-838a-826decae28f1\n214cdf76-60ff-454e-b034-3931896a0e91\na31c9d5e-438e-46bd-95bc-141aed5c3890\n6f1887bf-dc8a-4666-bcf3-c3c01ecfbf26\n046d9992-d0b4-4d5e-9050-4cae193cd2a7\nd65c9a6b-8707-4a05-9836-f96c5bd5c085\n0141ec1e-cad5-41b6-8e27-5668a0e69ab1\n458afc79-4b31-42cf-bef5-66fe63c7457a\na5389c30-7d1b-4be0-b244-d15f4b06c981\ne6ab42bf-ddb0-487a-8068-05085c2472c2\n2876d66c-bb0b-45a2-aacf-f278519228ae\ncdf55a06-374d-47e1-bafa-465f83dcffa1\n4fe28fd1-060f-4917-848e-915d7eaf2a3a\n614467e3-8312-4790-81aa-0c570b55158d\nced92420-d7bf-441c-847f-f241d66bb03c\n0047dd95-e7fc-4de0-b70b-077d36d62253\n1564958e-8732-4294-83ab-79b508e419e5\n30221916-651d-4f4a-be3e-78f81044cf3c\nad7b8e96-ea53-4278-86b2-58f3ed817aca\n9e260f0e-2709-4880-b6aa-021bca58c20a\nc8463e8a-104b-4bef-b41c-3cde1b3c196a\nbc86987f-0ac4-4127-801b-93ddc0df34dd\n19bcc086-dc30-459d-ace9-18b4b0e4f162\n122d05b8-5d62-48f7-91ce-a77c045ded0d\n8380c333-b512-45cb-b681-c79fdcbbacd8\n0e1c6f2c-f19a-461d-8500-b0ba8b685bac\n1b7be2a7-24c6-4a8b-b129-b73f50468f06\n7feea5e1-40fb-4dde-a8cc-d6eafbc8d263\n986daef1-7b6e-4a9a-9cab-e888c63408a0\n7984f5c9-530b-40cb-bb3b-a31983b47730\na7ef9303-72e1-4171-891f-f5a338edd09c\nb72c693c-07e4-4a5b-9f24-3ba9e881ddb4\n3ae24069-68c1-4e3e-8a1a-84974b33a246\n3094d3c8-3d1b-44a6-aeb6-00f8c2903c5a\n0c154644-51f1-4ab7-862e-95effdd1dbbe\ncae3994c-0c8e-4839-bfeb-77cb546bb8fd\n595be739-7373-4c28-8252-3fc58be10efe\n361ca7ca-70d4-4067-9111-1105fa3c73c7\n8ca5a7c8-5b2d-4f34-8a08-222cf90b4e31\nfa683869-f682-4610-bcc0-7d5b186bf3ad\n7418d3a8-3673-4775-92a5-cd440c6438f5\nda2bdf54-54df-4f74-b21d-4b8b8023dc24\n1f141579-3dac-4b22-8f8b-6d996c25b3b5\n3e29518a-4baf-4455-a29e-875630dd1739\n6e378610-9709-4737-b14b-761a04493f93\n0919f778-a0c4-4adc-a436-2f09c6cde23c\n00b2b570-7001-48ed-ac1f-2cacc3f243cc\nc3d75308-6a7c-4f72-8da5-bedafb1aa9df\n8c54a6e8-b509-45cd-ad1f-f5a007a67420\n8b24f3a5-b093-4e2b-8df5-109220f30d8a\ncc62c422-28ab-4d24-b819-6575c6c2f3b7\n42df9607-eee9-489f-9e29-408aa6f89855\n2ea6d1eb-fc3f-4604-890b-50bd11727b46\n28aa5731-5c90-4319-809c-2e551268286b\ne17726aa-cb86-4bd0-8b73-75b6f94a5724\na0a50512-b063-422b-9ac6-3fe6a878c9c8\n411f6962-836c-4884-9823-d5fe8228ba03\nf51a6455-109d-461a-af3e-5500b9db7591\n65fbcc8b-5368-48c5-9466-9515488a00dc\n0eaffd5d-522d-48dc-bc14-0001d29358e1\nff24ebf7-013b-4f72-a64e-ce37864a8f81\n714ea685-9b0b-486f-80ae-53b959ab715c\n12bcb6dc-1c38-4585-804c-66454d1d3006\nadd2ae33-de78-46fc-af14-e7becd937366\nfec879da-26af-4578-bada-93c997e03cfc\nffd05f24-1163-4206-be3c-a546f2a161a5\nc1834e14-8e08-4949-9a13-a9159439deeb\n059298a0-a268-4835-87de-4bf663262030\n5a31b020-6979-4e53-83fc-3bdf7e343f41\n21b7a540-ad44-4fc0-b34e-893b9ac106f0\nae307057-5c53-49d4-ae7a-b38dda93eb33\n0259f4b9-b9ce-401a-8a7f-c5d376715509\na7d02034-1839-4bbf-bb50-ee60f951fcbf\n3f6634e5-716b-4f26-bfea-d513a7922c85\n75e46edf-1383-4098-82ef-01962465ac3a\n03cd74d0-94eb-48fd-a241-f22ac4690fcb\nd4b88ff0-b76c-4080-adba-b4b049569f80\nc8b63fa0-4039-4c1b-9add-8b96b0717c9c\n1c7fd425-456d-4c9d-b8c9-34662e77f58d\n046e128e-075f-4773-bc04-ee74e65753a0\n9372a5c5-2356-44cb-ba01-8dd4fa0167ce\n2e4bcf2c-008c-4e72-9f6a-ed4ab7b1ef84\n50fa643c-e45a-4870-a261-b78425c9b042\n55ef6580-ae7b-4982-a375-473ea1c6fbf6\n26b45547-e6e8-4e9e-aa77-0562c651fffa\n6ef566f2-5476-4aa9-a15f-e339a81d1f88\nfa31da4d-3c62-422f-9f6f-7b77726689d2\nf51cacd4-75da-44ca-839d-07ddec61dc53\ndf9cb625-3bb6-4785-b32d-157b68fa26ae\n5d426362-b98c-418f-a8f2-2fa341502fd4\nbcc38a00-6e39-4ff4-9212-50daa10e95ad\n8fe2ca18-47a2-447b-a2d5-ef39e49849c2\n1b0c2ce3-244b-43f0-921b-e34d057a5b73\n1b46a283-7c10-4703-85eb-f2af2db5c65c\n532a7b2c-f9d9-4187-a269-f47c12bf3718\n47cfb357-2273-4457-9e6c-f94b2152c22f\nb86003ac-a4bf-401a-8963-1f3842d167b7\n54428917-74bd-4f60-8e03-f4b53d9c44f6\nfa7d87c9-50e3-4466-ab8c-98600811643a\n1b84f23a-f8f7-41ee-b9eb-e036d5f2c3b7\n07339ec3-b2ad-47fa-890f-ad4f5bf38bd8\ndd5c3f65-19e0-4529-89c6-83abfdd53304\n327aef05-583a-4fb0-a427-db18bdb35715\nc2e80270-0898-4c6e-9e4c-16542f46abff\nb79f271f-86e2-404d-bf67-1ffea9d66ad2\n912ed6c8-a7cf-4d11-a7d7-3ecf0c459cf2\n7f6f3bfe-3843-471e-9832-84235f4c3cfe\n47f1145f-c801-40c1-93ea-5e756d192210\n256e709f-2a5e-4e82-bf41-298912f2c638\n2e44dc13-7358-4947-bd97-1e2d03fd6824\n34a62d6c-d8da-48e6-a529-bfbab77362c2\nd1b71256-f3f4-4fef-94ee-d9e01d772b0b\n6ba96040-1ff1-4ebc-a961-3ac91cfeee1b\n28aac7f2-3417-4576-b332-367d1f37270a\n38b202ff-0ec0-4391-a8cb-7b00d803026e\nfb19d377-3d8f-4ca5-8104-6ef350c4f46a\nf135fbbe-5f8a-455e-a3d9-f6278b81a84d\n441edefb-b365-4d28-8ccc-bc536184b2d5\n81924e51-0c6f-4a72-a3c6-f7ae849d93ce\ne626c806-dd62-4063-b76b-217196fb4966\n17ae7fd6-702f-48bb-ad2d-9e70bf23dcf0\n605ce0ad-332b-4b97-bedb-0b7974986b37\nfc9ad451-b4e1-4551-b0e0-9581f7483d21\nfa240160-1ef5-45f8-876e-15251a1a60d9\nf0eb01b3-65e4-41b9-840c-bf9c6f36a246\n2ba9aba3-4070-4898-8ce8-3c4362b04b22\n3a97b168-72c7-46e5-8d6f-703626cf91bf\n865aeca2-bed5-436d-a5ff-ee1effb43e02\n593d04b6-6356-4a6b-9950-812d1add2dbc\n8497f7d6-72c8-4b29-9e1b-559922b26210\nb4ef4bb0-d071-401f-9a84-386ca0f53258\n7247766d-ddf8-4ba9-98f1-d95ed0fb97c3\n4ebe1518-e80f-4b8d-83a6-37daf6880643\n313de6fc-db80-40bd-a2ea-2c06b4cbd7ee\nea68b745-a215-4fce-8da6-cb8b290f98a2\n24fc2c8a-ec73-4eb3-a68a-e25d2f7ef8cb\ne697bb97-23b2-48bd-a3a4-6f3b39ad3be7\ne3fb07b5-100d-4d30-8320-485a48c3e30d\n445e7311-48e4-46a8-a1f3-dfc4cec63a8a\n121bea5a-2b44-44f8-b488-a0b6720913d0\n3ba8d0df-33a6-4e78-9b0e-22651d3ea1ad\nce3f754b-3ef3-4832-80b1-0424bc051588\nb9bdc884-1cd4-4156-a73c-13f118b8c3cd\nc61a4dad-6feb-4b60-837d-242a053138eb\ne9592833-591b-4067-a30e-3dc2d0863d0b\nefa32290-b21b-40a3-9f67-81893ba3fa5b\na294d981-2f0c-43e5-9f01-9d44426e01cb\n2eaafffb-1c92-4dc7-92f5-03380776e9e1\n9c62ad2a-1fb5-4749-bae0-154b409a3bf0\n0dd463e0-3ff6-4fa7-9200-0e4457920980\n3e47c95d-a8e0-4be9-904a-744e79646047\n07b200b5-bd3c-457c-b4aa-a6721697b9d4\n129d2827-b53a-4a4e-8782-caa17f69c7f2\nc0f9c1bb-e108-49b4-991c-5c78ee39208c\n3fca8d21-daa6-4229-877d-21a44e97f7d1\n5e36a718-48d5-40de-a6aa-62ca3f092db8\n11901567-3d48-444c-b54d-c15777356e9c\nc64747fd-b465-4f23-81b3-04dacef4f415\n086b19fd-dbe3-4570-ba5a-8d345f1722de\n3a32c219-c74f-40cd-8fc2-c81249d552a9\n75368ca3-808d-4884-82af-261465c1936d\n7089b522-5ada-45d2-a55e-768a055cba22\n955dcfe4-0e86-4efb-9b04-d2d626726e0a\n10cc67e5-563e-46c1-8dfb-1ac7cbfd168d\nd9ce7506-073f-4ccb-b243-b3c179cfc529\n1102ae01-816a-454d-b6b9-f72eb9ec2db9\n3ca1e46b-08b5-4a96-bd38-f4296b66b970\nbf20701f-6ea3-412a-ba78-2ee23ee0fcf1\n48880d64-bb07-4ebb-8107-759351dad5ca\nea857713-cff7-4bf9-beef-5b49d16c1490\nb5265b45-facb-4909-bbf7-f6a24ed20be1\n0c3bfac9-125e-4bb0-9db9-c14301396202\naaa488a7-8d32-4e28-93a5-a03538173691\n775902f9-7720-477b-8914-e64597a1f568\n1cca7619-d5d1-438f-9b67-8eefcadbecb8\n639eedcc-4ad5-4515-a919-fd3b9fc1a5b7\n37fb6f16-796e-4976-8a29-de3c96f233ec\n7f2c84bc-f7c5-47e2-b11d-fad7c82a4eee\nc64654f2-b598-4afe-beba-bbf0fb714b19\nda23cd3d-215f-438a-97d1-3768dd8bcf61\nb35e3f30-c4ab-462f-8176-cde34e1ea21d\n7f7ac2ff-d8dc-4355-9c9f-8d13ba4c05c6\n6c63a277-0e82-436a-83d3-01daf09074ba\n7c39da10-d1fb-4167-932e-2e62a3003508\n58d3bc3d-c61e-4eab-b4ef-5c452c6a2537\nfadcbbc6-fc7a-40f0-91b7-832032d8ce02\nad967cd6-f0a2-4139-9e95-f3b31fd78b23\n16ac0c7e-0277-4562-8fa4-9992c8c95696\nd777df2a-9985-42f6-aa29-e91adde50f1f\nc9228cef-aca5-4b53-b065-ea8ef8c3c392\ne57a3396-976a-4829-98d4-70fc33e89360\nc03a2d31-fa81-4995-9e60-3f29f01b6351\n2fc05d45-0843-458e-94a8-46f8224c011a\n05c01637-af88-43c7-8e31-89167e837410\n512a28fd-2834-4e09-871a-72a88a9aec47\n538baef8-8060-42b1-a44b-9793b80ff416\nda7c2fea-2263-4dc9-9d5d-1fbdc8243ba0\n855b1845-7017-45a6-b2fe-ad7d29a24606\n5800a99d-acc4-4625-bf9b-41991670a69b\n1c5cde64-ae2a-4c6a-8adf-b4ce2cdc2b2a\nad6cb65c-8b4b-4e36-acdd-64c10c33d674\n11f55ac3-7f5c-42fe-a20d-1923c9f0c804\n95e71e64-1a7e-4752-a648-23fccdd9035d\n17d20a09-c8f7-4a67-b20a-f47c5408ebc2\n305b1522-b3ed-4bff-8db6-6dc7f0a7325e\n58c2eb49-a3a6-4cb1-aaa1-ef1fa0bccad2\n2a97214b-f809-4aab-bf70-a8d6a5fc3e59\n2bba1577-dc47-4b52-b202-3cdf07eb0dcb\nbed4d4ce-a803-41c8-9c9a-98c458e090fc\n20517279-3016-4873-a988-f4e2b9b49712\nbaf1aba3-64be-4455-b1a7-8fcbb2438198\naaa6545e-3f1f-44ea-aae8-035362134afc\n9320c629-a24e-4339-b19f-e780330405f6\nb638c71e-0437-4033-944c-c7817e5f311e\n50f24376-1318-4347-8ea3-74105021dd5e\n17938e78-e609-47e3-98ee-58377b56f728\nb36e205e-97b0-4aab-b4aa-47e32d858e21\n49af8fe8-c297-46d7-b20e-e89b34e9ae1e\n5e9b5b3f-a547-4831-8742-3c70e56f6fef\nb98d4a91-7a83-45a2-b367-c9704e399a08\nd73ba59a-68a2-4ee4-a13f-c9156e9d18f5\nab396e9e-3ba5-43d4-acd8-608e70b3f6e8\n5cfe4f25-a82b-406e-9f0b-ff89efdcb91d\nadcabab8-0cbc-4c54-bdea-b483555d7ece\n9e4da761-2ac6-4de8-a5dc-e9e508f22085\n2b915e95-f9d9-4e87-af2c-c3d4aa72214e\naa6455f5-aa91-4918-9ba5-ae5cec6f49c8\n7b485d22-3e66-4eb4-95d4-9e380ae77e44\n3afba69e-a337-45cf-9a44-3d9e7fcf9f50\n7a5911ce-3334-47ae-9404-3176caedf0cd\nb68bb46b-c3ec-4df0-8603-0f640c00c9e0\n878755f2-fcfd-4b8e-8447-6973d7ff5894\nc3c887e7-1c2e-4b10-85d2-4a02bb700401\n8339fcd3-98b1-4cfc-bbb3-f96ea3d8fd94\nefe43cb6-a097-4d55-b251-0331765d1631\na95cf660-89bb-4782-97db-562547518e5a\n420ed782-dd70-4732-8715-c7f95d649ee7\nc11ac0f2-4e6e-4387-ae9f-8161943aa341\n1177e43d-579f-4f29-be45-86346664c1d8\n4d40bbd0-1d76-4b4d-a546-22b1c2401f9f\ne9ffcb79-d050-41b1-b3c5-c39bbdd58eb8\n355a60cd-1f8f-40c6-b913-9edfc2016a0b\n18db4274-745c-445c-81b4-15d3e8de1740\n8cb36761-44e3-4380-8341-e5555dffd548\nb403f3c8-f4db-435e-98f4-9f23bfb1478f\n4b899dd6-7b41-443e-b9ba-962db4e63de6\n89dc8d8b-83e7-4eb8-b80c-a6b544fe633f\n2d30f079-9ba1-40de-a110-c618da2a77ae\n207f2783-7157-49ba-8b1f-c9b5196fc71f\nbba91f01-58b9-406b-ac09-8c1f9bdc6221\n4444d548-372f-42a8-a326-5740d788dc39\nf1a79c33-c3da-4095-a505-eea21eabf340\nafef7f18-11f6-4114-a200-960908d38eb5\n129db9d6-cff8-41a1-a113-d2df37fbdc17\n60bc1195-93a1-4925-b9a1-df8dd99256ab\nac3a3c82-804d-47b2-9da8-2d4e87ec5bfa\n036073e0-95b0-4448-97da-350a0eaad86e\nd74541ff-0659-4ac8-a177-5d618cd12374\n2d35703d-915c-45dc-b56d-9dbbfaa48bd0\n0e990302-8df3-4a44-8a11-e9086ebeb926\nb9da941b-5747-4b40-9c94-38008e4f4afc\ncaed49ff-8418-4580-87f4-de0133f8f0f7\na9c013ab-6778-4f08-a4e5-491670c28017\nf75fd3bf-1fb7-4101-a9d2-c673084aae8f\nbc234871-5d85-4415-8335-e933083b41f0\na6c184f6-9b84-4883-a2e6-be204f9b7b9b\n1f6cdaba-5ff0-44cd-bc15-e6c6021641e5\nea3a57c5-cd87-405d-9b98-ca0949030b28\n9fc5cb25-0be9-4ef9-b5bb-c17ae7e0aa4c\n46b9e395-1bf7-4c7d-a419-4a29d845bee5\n3c512cf1-3f37-4b05-857c-0f1025c037e4\n8db14b27-7f10-41f6-9f34-854df2119506\nec1c3029-eb85-4c65-b00a-88b60b78b458\ncbbb25f8-6a12-423f-83d6-2c8522ae8c05\ndbe2c723-ec9b-4974-85f7-26ec429b68c3\n8963a177-f9c9-4663-801b-bd0bd6580291\n27ed2f46-0f81-411a-b0ef-18fa35ad616a\n9f02f059-22f8-4353-b096-31b86d1473d5\n40cfd77b-71e7-480c-998c-c9b2b26f258c\ne7b6557c-4db3-4073-a0e2-fe974b5c7558\na69e9f43-17da-4e12-8c04-f05ed97755c8\n4e32e723-77cb-4cfc-8159-eb84e49b2831\nb20820fc-5054-41f3-8bc5-5be59ee89a2e\nb34f586b-5ca3-449c-9033-a5b054dca677\n62070500-564b-41a4-824e-59a0b4a9151b\n154b7d7f-d29f-4838-a71d-274012e124af\n7ac82dc4-e59f-4630-a6f4-916d3313418b\n14300f3a-6c83-4b6b-8ac3-a7adfbabbd4a\n984add9b-4683-4689-a06b-3238dfd1e425\nef47bfae-dcce-4b0f-acb0-bc08c97a1080\n76b3e483-8b42-44cc-b6d2-0f8bb224a74c\n96b349d6-0864-489f-8e4b-c38b774a88cd\n9c7c9356-18b6-4dcd-b56e-f8514d3c797a\n9ce1141f-acdf-46f8-9c18-4292c78e3d92\n400d706c-cd21-48e1-886b-415c0ff581ff\n0ae6f8c1-ffb7-4d03-906b-c72614c568e3\n2a8a6441-5f02-401f-9705-168b240c5530\n106ac959-945f-4342-a811-56e3588c4352\n5a124477-9ecc-46a4-a5cd-565b0910e0e3\n7d008cdc-9010-4219-951d-3c82ffb30bc9\n325e58d1-af38-428b-bac5-04f4c1ba59d2\nc73ebe79-980e-4418-9d0c-6a3676ba25e2\ne1702599-3353-4169-a53e-c45138eebcf6\nc297e89f-01d1-4107-bba7-bb5cd992d6d3\n476165e0-e0ae-4d45-806d-dec3440dcdda\n6fa8c91f-d03f-4020-bbd0-ddeeffc6dc5a\n24214b0c-b71a-4de1-834e-baab2227c138\n2e60af3c-1dc2-4b64-b4ba-e7c71f83e3d9\n89920546-ea8e-458d-8893-5b5a0fdcccf3\n0045ccc6-4e08-4a05-992b-4974e55f86a0\n22b1e2df-14a9-4e79-862c-e2f77323e599\n8a7d68cc-cc31-4c75-83e9-f1632b01794c\n28a0ce7d-e98a-4339-8951-04c1329fee0c\ne20dbe57-0b8b-44b2-a261-bf5a6e27b3f9\nc010a841-8be3-48f7-a53d-27ead92ca000\nabe279f5-7e30-424b-acec-14bdc2be9fe9\n875bb5c1-ee51-4a36-bdd4-9379f05aff11\ne3eac159-2370-4413-8776-3520e3796c9b\ncc009f2c-5e4e-44b8-8b67-ada3d99ce089\n80b39054-f899-438b-b637-244ce352fdd0\n7fbf4791-29b9-4605-99a6-743bc4e73bda\nbfa4fd08-8b23-4d8f-98e1-881f0ffa995e\ndce96046-b519-468c-8f0b-e7e75ed4f000\n04a2afc3-a84d-4e4b-83c8-20f95657b21b\n6f083039-e2d6-4128-8d31-4567cb3ee712\n1d16f48f-5bc2-4042-b376-575b7a4a9963\nbda38cbe-8ac9-4e5b-9a12-09eddded686a\n62c867a9-022f-4513-b822-75db403eb441\nb9bc05c8-aa60-4bdd-992c-7ecba01bf3f9\n24981584-1ded-4202-955a-dca6bf82ce37\n2c88fdef-df08-4b7c-b849-955734a94c02\n5b5835a4-90fa-4460-8991-ae8d717ddb97\nb59c09b7-376f-4d55-be1c-f1162802cda8\nda27f097-eac3-4da4-b26a-214e5be93648\n5f506e3a-7244-4ea4-9e93-80fd7422d39c\n91463617-bf4b-414a-b447-b9fb3f6b98ee\n895a3d54-ed27-437b-8153-90fd55ce654c\ne68ed8bd-0504-4183-aa0f-f2f4c8364395\nc3cecee3-420c-4165-8bd1-eb1e17bb96de\n0f678c40-dcda-4883-960b-e104abde9aa9\n089f5e13-9c9e-4657-b337-464d3cf9bfda\ne7d1b218-68e5-43b7-9f0c-3fc159da2073\nb6eeaa9b-2d96-41cd-b1f2-0f6ab77bbbf0\naa5a3f59-fa20-4799-8591-3f452e46c2b5\n23b8c324-741a-4b2e-bf7e-3c888bf24032\n3d1eda05-f0fb-4cac-8e54-41726bd97dfe\n807ccc6e-2ccb-4f47-bee3-e7e902fdce9a\nea48c829-9d70-4475-b283-e2f420a388d2\n4840769b-4902-4798-9e8f-7c1f1c8599bd\ndc491467-e784-4add-90d8-c1873ce3d91c\nf72f1afe-d214-47b8-8ae0-8c6eed5f1afa\n1f4445de-ca62-410a-b6c3-68047edeed98\n6321a73a-813f-41de-b312-ad22920ea179\n1914adcc-f3cd-436f-87ff-06c10e2d9d56\n8edcb074-11c5-43f4-8d76-05a4b51368d6\n00b0f32d-c2c5-49a1-a7db-feeb4a31ebf4\n43c5ed31-d4ef-4c61-86a5-56b313d1bad5\n8953716f-e2cf-4d80-85e8-81335ae18dd7\n3f8649fa-cb67-4b4c-832f-a9c41a7fdd2f\n39206381-593c-44be-9cc2-8e6a64d96d48\n179380c8-93c0-4b2a-aad5-7503eb3b34b0\na2865648-6471-4752-b8ec-0f193d521141\n1dd2106f-aa33-4864-b4dc-61142f8c53ef\n671c2cf8-f153-4c9f-9847-093ec69dfae3\n47e56306-a073-4efe-83f8-41798a6362f8\ndae71e17-b172-46af-bbe9-23bd3bcfe8fd\nc2b24140-94a7-4b27-8b1a-9822c321212d\n1c9cb94b-d804-4f52-8a12-1979286edbad\nece8c76d-0bc5-47c6-9e76-1ba410455ca4\n9a2e29ab-64a9-45f9-a01e-c839b5271198\n81e2e669-0af5-45d2-bc3d-f9c7539f9dd8\ndb3a6c52-1cba-44fb-8b5f-1c4564c71df2\n6b4e2b8b-fdf2-43cc-a20f-86633ec175a0\n7dbf706d-b990-458f-bcc0-3d8f69913a02\nc6265445-af1c-4c4a-a8c9-6e91911b7632\n13165b9b-2a6a-4d07-8ac7-469eabaad659\n2f2e5f65-cfdb-48be-81d8-284ca3c0b74e\n1d57ee7f-b8b8-4bb1-bb13-12b562240a2a\n4e5ec224-c2e2-49fb-8a49-a0cea92df4a7\n2b8001f8-4efe-4ed4-8a5c-9144aec452a7\ne261c62e-ae57-46da-866b-b3d189cf3a3c\ned6b1d89-c555-46fe-9f56-083611364a9b\n484408c8-575d-4afd-82ed-42faf330836f\n0d1e926c-5e7c-40e0-b090-451e18995e5b\n3a951b33-bf72-4e51-9bee-d5a0711b35ed\n14cd314f-0b2d-426b-b9b8-30c53a3caa5d\n99e556e2-78e8-422f-9fc5-bbb40e9f3423\n06434ed7-a3c3-4ffa-8c59-57976398e35a\n01decece-ce19-44cb-950e-340c012fccee\n6e165878-15a2-4c6d-91eb-5945a7831224\n9b4bd92c-97b0-45c9-ac94-d14dc7162492\nb7b256d5-c7e4-4775-a396-6e9ae35783c0\n19a5fafa-3c4b-49e0-b8c4-5ae2e38fa355\neb0a1bbb-e58f-46ec-b48e-4cde0d59e219\n57a4e477-b472-4a93-b38e-fb1c81f37f4b\n0299c4d2-3513-4e70-bc98-cf26f9be6ce7\n352df4f0-ef13-46f0-8a2b-a65239e9b3d8\n01f320f4-19f4-45fd-accc-63a469135b56\n54710f5b-fe49-491c-b2cf-4be2cd527499\n593ef356-7839-4189-a52d-07c75aeb033c\n92a1d5c4-0783-4f22-aab4-82e2133945c3\n188b0310-3935-4294-b34d-6492c9c9930a\nab32508f-bd05-4173-8552-59db25f67801\n006c3f1f-4640-4af2-9869-203dab7cf4d5\n2db86dc1-c1f7-452f-99fa-172d2891447a\n285c2749-d251-4850-94e8-a3cdb348e592\n1cc975da-62e0-40e9-b9d0-2536e88fd047\n70a71448-646a-4e34-a91d-f03746de5995\n9acec005-f392-40b2-b4fd-dbaabe51f465\nc0994b2e-5689-4b6a-9846-1e3c820d4364\n42e9ecaf-a8a3-425f-bb9d-12e2610b6406\nff311ecf-4998-4769-ab5a-242065bbfb3c\n37dca961-0a85-4036-9294-0db07cecc3db\n899e5146-7fef-48af-a71d-83dd27a872cb\ne8e53ed3-68f2-45b0-b5ba-763920ad9b11\n78ff44e2-280c-41ec-b1d1-d6a07301c413\nef9d424e-f806-47ee-af78-dcbf3e0149a5\n5f6c191d-8b46-406c-ba14-e5378bc00c3a\n9f8289f2-7a03-499e-9297-bb50d4ee06d4\nd7a7d963-76ce-400b-b5f6-efce34443e3b\n05bb1776-3b26-41a2-89e7-d1b34604cc36\nd0bea042-306e-4a5b-ae9c-bae2167bbf66\n3e987bfe-8bbf-40d5-b305-a16d0ff297ea\n7d29e7c1-174c-4a58-a105-1ac91d925126\n6c97c008-425f-4fb0-8f3b-e7c7a2caeb46\ned4d9f5a-095a-42a9-891d-2f239f13ca0f\n2a9adcf9-bf77-4c9b-8752-c697c67a69ff\n3ac09d79-7d0e-4967-a1c3-0578cc472f76\ne865ae0d-966b-402a-8c81-de46735cde18\n545caa4e-b10a-486d-8678-e8dc32c79b45\na53e36d5-54d8-4347-8ed0-55d76cdd7ff5\n7b54a9cb-6d7c-4af4-a48e-967c4e72efd2\nef6cab2c-fb25-454e-81d2-cfb5af334ecb\n518293a9-8d99-4598-980f-169112d2b0c8\naa72ed1a-a8d4-4647-95ab-78ab5760113c\na7943e3d-84dd-4245-b3c5-ef47580cb01a\n830a4716-379e-4c96-8e8b-21fe56001b86\n065eae61-1920-43d0-bf9a-d3ed597bdb27\na096276b-c83e-43a9-804c-bd3155ca75b7\nb30ddc24-5ec4-42e8-b612-c998d6596c91\nbfcc3ee6-0ad5-49ed-9998-76b5f762ff9b\nf90b4794-af4c-4027-82b1-ab2199da4580\nb1745f97-7e9a-42c2-8904-d3462389c6fe\nc269f2c4-7b1b-4488-b747-e4a782b3854a\n5de02ef7-0c5e-4917-bf61-9cfd557f86c9\n6d4cd09f-89f4-4cce-868a-ab8fbf7ef63a\n7496768a-4b33-43f6-a3fe-60e49ed1bc06\n754d9103-2af9-4cdd-a698-616d9ea3e99a\n2fdb6edf-c49e-4dbc-a70d-5bca24564479\nd5adfa87-89e3-4884-804c-30cb098b3442\n6fe06f8a-fc49-4bc0-9ebf-441bb40c5c64\n815d2d9f-88c0-4dca-b1d4-3fcbbd79c935\n977e1f4f-5c03-4acc-8e5a-6fe63b49662f\nf4622b61-cf6c-4859-aeb6-1014f5100ab1\nee462946-d701-447c-a0bf-66cfe8822308\n5991bef5-a62c-4b6d-8acb-ce08fa9d8c4b\nd0da497d-b496-4eac-bb18-0284b24b7606\nc017be38-9041-4921-8a85-d018d7b71f43\n26357abc-4151-4e5c-b00a-0d2889df21c6\nac1ab516-600c-410b-abc1-f2d5e82fde00\nf290a0b9-815b-42ae-935d-dc224a28f100\n9aff51aa-1ef9-44a0-8be1-fa0ec5d53665\n5f1e1c78-730f-4525-94a1-8af3bfd9a885\nea351888-c777-405e-b386-d05e1d4314fe\nfb32acd4-7506-4d6b-a3ed-a1dd28184dac\n12bde9e9-b655-41b2-aec1-a6737a485a69\nfdf38bdc-6eea-4e4d-800e-9a3e6f81e9e0\n95e7e123-13ed-49f5-ae73-b5da8032f264\n231b05fa-3a06-4968-8069-0945daf6a3ba\n9026bab0-e732-4469-b7b3-634fb98905a9\n8225acdf-ea93-4d73-a140-576b791585e2\n221fdb8b-6332-4b2e-adc1-1560f588ef4a\n3798f097-aa6e-41cb-b17d-b22f49594d1e\nde3ca38b-5eb8-4fe8-b366-553db42597ca\nf4b0094e-25f0-4a31-97c4-0a633c550d6f\nb71d9d75-a250-41a1-93cf-30d6072c5577\n919a83d6-cb2b-425c-a344-8ed56f716797\n6bffee94-bd16-4017-a908-a1b98a689838\nb4025ac2-bd03-437c-b5be-8037990f07a5\nb79081ba-c2a7-4904-9d86-add4b362ba5e\n9c526983-059c-44e4-ae81-82b83475457c\nfec715dd-abbc-4be2-86ce-56558152f015\nd721781c-b997-474c-9aab-f245fc5c56e8\nd88291ee-f45a-44d8-b79f-2314caa3c19a\n7d199c00-30e3-48ce-bde9-321e359c9bef\nb8e981a7-a02a-4479-8104-50c0cfef41cd\n8fa9beb9-1bd7-4276-9319-2799d21a1442\nded1270d-82a8-4a26-92bc-ab4c174f32b8\n08e24a70-0543-43d3-8d79-93d21a561ad3\n7180dc0e-7c2d-4d87-8463-01fa44271edc\nff897c5e-558e-4749-803a-0d7250243f6f\ndffcf5fd-6b94-4c06-8726-8fa9039f159c\n28c02639-c60d-4f0e-a39d-9673ffb1e87e\nf3f18a65-5ca8-4773-9052-e338ec970f24\nc89b27d1-067c-464e-953e-d013165777a8\naaca266b-3abe-4420-b9c3-243be12b2625\n9356ff48-5aca-4060-ae12-5077cf3ce7bb\nc6b1e195-cc33-4ef9-a815-f98f46e0fd19\n4db17fad-d891-4bcd-8d68-a9524d6b90a8\nd0da9536-46e9-4c0f-80fc-21bc2d749e3b\n12f71999-0a4d-4514-80ea-389f7cedeea9\ne508a6e5-02e1-41ef-991e-46bb43255872\nbe656b3b-cec0-4e67-b2a0-5037b6a1a4b1\n92f45f93-0037-45af-a1c8-e76640efe58e\n69dbebd7-7450-47e7-9ae4-9bd49933abee\n413ce384-4a77-46a4-a15e-4c13b7318f31\n952a3d7e-bae5-4863-b465-f62f31cc1edf\naf250309-9528-4309-87c0-cf246fdcc9cf\n675571b4-c864-47b9-950b-3244004d84e7\n3b3a82a5-83ed-4a66-857a-7253c93b1ed5\n6b354abd-f621-41d4-bfbe-fda30415c6ec\nf9ece567-4c4d-435f-af83-9c751163b61e\n20ba3c1b-2795-4a9f-99af-89f39fdc93cd\n0b740c78-b737-4ffe-aa88-c382bfd520b4\n38638090-bcc7-49e5-9a67-ddb5f2bf307e\nf1ab51be-c180-41a4-b80e-1f9c838aace3\ne3d2bbd2-bce3-44fa-b0e6-e9ff348e7925\n7166fa5c-082c-4dec-9edc-d6eb09554190\n3bd67010-2198-4eec-88c3-1cee7fff4c20\n5d04c468-e3aa-48ff-a785-2e7a266f87ee\nb0a98d32-152b-455a-b251-57173dbcccc8\n065a3ca2-d337-4e89-bc7e-6c002a00e44a\n1b9a46e8-fa59-4f5a-ac2b-f3b7baebd271\nce55d8af-aec2-4dc0-8dfe-3aabc2693528\n1d1a442d-ffaf-48e3-ab6b-2a6f9245a1f7\n3e1f3fbf-2f40-47b1-9c06-494b2eff8cb7\n17372c54-b9aa-44fc-8576-9ba59bf2548f\n1bce8745-9670-42cd-94b2-25c6387a0150\n7e2903e3-fa9f-480f-9c01-0d3d34e4ba72\n209177d3-4818-40aa-beda-6526691f2468\nf3a80af4-fcf9-402b-bc65-664ed8934b99\n63903ec9-9c8c-4c3a-909f-72a6a85ad696\n1d5d895e-9944-47e7-b393-37a939888dfb\nf06a7514-58b2-4206-9822-347462e49002\n2fe409c7-b578-4212-92e3-226fecca8cd4\na3424f37-1b33-4d5c-be51-1b68699fb43e\n6a223fa1-3a3e-44a8-9e82-4a5609d7bf34\n64e67c2e-33d6-4995-8511-2291dbf534a0\nc0fd959f-e255-4b54-9a60-611e298b74db\ne2c9fe46-707c-4aeb-80d0-83147d79469a\nbc73014b-3b29-4051-b9bf-68989ca8c097\n7527f306-db88-455f-8abf-7224c815aa63\n2d09bda1-d2ec-4137-b738-e1bae22d7bd7\n5a545835-d40a-45aa-9f53-192932be706f\n47e42a41-e787-490a-ae8e-fed72d1d6d3d\n5ae77694-8a92-4958-9311-c4a30e9f47bd\n0ea5a7ef-d833-453d-abe1-da65facfc2f9\n2eb9ba2e-6cf7-4909-b293-f2f632977126\nfedd5861-fedd-4368-aa2f-6c7553bba000\nc20d8a0f-acec-4722-b6e3-632778d73c0a\nacfb5c6d-4703-44b8-aea6-c5049406701c\ndacc44ff-d499-4030-ba9e-7032718eb09d\n882051d9-b017-4923-9479-6fd2b9ccf36a\n57b2eca3-9719-40d2-8ac6-6d16290ccbcc\nda204277-4ace-4190-b64c-39339a24a704\n9213a8b4-58c6-4183-a7f3-4fa418b09560\n90f65dff-f691-4472-9b4c-9f1ae4f8d29e\n031cc0c5-007a-49a8-b849-0f08b75cd4fe\ned8d9a04-3c93-48e9-a06a-3ffde77095c7\n68e6b18f-45dc-43bd-a833-9ba91d7cde22\ne94bf21d-5bc1-4756-8fdf-2df6a2b86b55\n9e27a5e6-c83a-4b19-92fc-eba3158eb270\n3fdec154-131e-42f3-b6e8-9b08da2a6d99\n5e6d2438-c2a4-4b0c-9442-198d8fc5075b\nc9ab1f45-6414-48e2-94d0-139fb96a5793\n611262d6-4da8-4e2f-9e80-b771105e9961\n6f80e731-63b1-465a-a589-033377f08eef\n33344a3a-e917-4540-85a1-f890ec16c962\n7fe83af8-77e3-4c66-bdd6-492a8ad01c86\ne3f53e99-81b2-4402-921d-8ba2babb2d60\n828bcdbb-ddf1-4277-8ca3-4de826bacbe7\nad5a67e4-3a55-4f41-a402-902c82584f20\n7205e0b3-92bd-47e2-827b-4eefed60e6b0\n1596b52d-31c8-4ff6-99db-012f550aff49\na8aa6d38-f52a-497b-98e2-d281497e28e3\nf152d95f-0ddd-48a8-952e-fd2018dd34c4\n17ea1a01-6a87-41b4-8512-301d41c4e649\n8eba84c2-f06d-4d03-84e4-3065096ef369\nc7c2ac33-8aa5-4427-8a4b-5318215fe15c\ncbd79d20-eee4-44d4-9a97-73f8d9d44f76\n962c8e70-5f40-43c2-9219-b034ca3d8329\n07483fda-5115-4241-93c8-752344606f1f\n64901c05-d5ed-45c0-afa5-f075d377b114\n84d9cd6f-f75c-4fa2-87bf-f377964f7fe9\n9d291cd9-ef6a-462b-9cd7-0071f10067dc\n0c3741c6-2c2f-40c3-a5a1-8ee93e29314b\n7a6f0273-6ce6-4ef3-b5e8-8dc45e8c13aa\n1817bc60-0b23-4457-b180-51b28a017ac9\nb9b420eb-20d4-48dd-855f-144a537e5875\nccd4cfba-c2aa-4f45-b234-c475c300af7f\nca3aef3f-8964-4625-ae9c-8efc3e32623b\n52cf4c6b-cb8f-4283-8c39-e8ae910689ad\n5db06ef4-278e-4729-a49b-b7d2e69c3b4b\n3aa83aec-9549-4a08-8daf-77db89e1688a\n7e0a12a1-0299-4496-80d1-3d875bcb60f6\n64a338c7-9f3a-474e-b080-78a372ddb432\n1b19d6fe-43b0-4114-992b-d3b26fdd377f\n148154cd-c3f7-4ab7-844b-2818c8b65c45\ned183b7b-2f0d-437e-8c6d-5727e37e308d\n04edf766-e0d8-404c-9fe0-b3a19c855054\n11f61a0d-b895-4b28-9f45-28210affdc8d\n6a1c6515-b375-49db-9b2f-7a55de95ee64\nb49d4b39-c8b6-4618-bf18-9b294aa3dfe0\n73607c91-8934-479b-ba55-3f8cf0eca9f8\nd64686bc-66bd-4317-9823-caeb1da82874\n20884126-ab37-486e-967c-268cbde0c007\na22cb8f6-0224-4fce-8f6d-f464a09496fa\n9a728958-37df-477b-915e-89c33449c1a8\n924208d9-51f2-4c4c-a159-999e2a5bda38\n8d472866-4d2e-4ae0-892d-5c04e42d5ccb\n46c45688-c3e5-4651-8e5c-29d710d21999\n151f9f16-0bbb-4688-847e-50efee842f22\nd7d84946-e904-40f8-aef2-ba5c35788103\ndd043ba9-ef6a-4e72-b9b9-2faa658191c0\n5a1755d6-6a1a-47e5-975c-4490dfa18263\ne5f15b6b-ed62-4282-9648-1f469aa00de7\nab79f6d7-970f-4af7-a7a9-76e513f0040b\nf6e73847-333f-4fdf-85ab-01ad95375b8e\n398f5882-126f-48e7-a597-f267d63046c4\n51928501-be38-48bd-90ca-8bac7d0520c5\n5ab41d6f-b943-44b9-9c93-01b37818b6b2\nc5e224fd-4d3e-4322-a0b4-1f827287bece\n26c24c53-1c0a-4481-b724-6e3c5d914bfe\nd22ad086-e753-4515-9d6f-bbef5418538f\n3786c06f-8f12-4547-91a2-e028792c81fb\n961ed501-0043-472e-bdda-b51c24cc68ed\n6534830c-fc26-4f59-9a1b-b4ab46962d75\nee80e7f2-b892-4f2d-a48f-dbbb481c6f77\nf02d9860-4644-479c-98ce-2c4719b12967\n349e51d0-919b-441e-b771-ce15ccaf7583\n70252d3b-c51a-4ad0-bf4e-8ca589eeabe0\nb2ef9d70-300a-4fcd-a9c9-d82b77a0ad45\n6e3f1590-300a-4e6c-bac8-dcd077e6ebc7\n311f5fcc-40ec-4b0d-a541-c10cc9b5c81c\nbea0a5fc-5736-44ba-8f0a-915583a662db\nf1266e8b-4066-4b46-b685-63a204b8fadf\n0aef50eb-5357-4d55-8dd3-4abe7776513c\n3984d341-434a-4f20-bda3-7ddd0bc21a59\n4e6af3f5-f1f3-4b82-a648-4dd8a978130b\necd147b7-5875-49a9-b2a7-cd8eba74f440\n4e00b53c-c9e5-454a-b8ac-15439dfd39ee\n581a64a6-bbd2-4188-922b-a76a58e06683\n6d115080-2cc0-48fb-a184-e8c062ecb748\nf59cf7eb-fbce-4f9e-bece-2ea26e8939d6\nc61a3063-cd60-4f37-965d-91e4e5fa6e39\n43fec707-2894-4d10-83fb-2abadd671063\n997b184b-3684-45ea-a6a0-81dd0d661bb3\n8ac7acd3-7ea8-40de-ae4b-e80dbcd73109\na9a7d167-02d9-414c-bb74-3e17b0842487\nf6b27097-f363-4e62-b9f0-c5f2464544e7\n6568e8e1-3d1f-4ddb-8786-640fec5d00bc\n1cbe5737-f1d0-4bab-a55e-e1c65af6f325\n9417efaa-0b72-4869-bd2e-be3920e77f1a\n6520c5d3-095f-4b29-b2fe-6da8abc2d1d8\n327b2062-9105-4dea-a972-b29d877295e8\n05fada2a-d840-4527-a3d4-e460c1a2c2b2\n59677124-da92-4075-a144-55dfe3c0841a\nb4cd939d-00ac-4108-aa20-324bbd3eccae\n0b417ec2-f8fb-44b1-aee8-5dfbf6fd53b7\nc231dc9d-6d79-423d-8586-67269025293e\nbc1ae277-c466-42d1-8eda-4e2afa02a8e4\n13e3dac4-5554-42f4-bc8c-75c568cd0476\na178f5db-59c3-45db-bab7-87ff522c94bd\ne7fad781-14b6-4941-97c9-1bcac09b8a5a\nc4d202d2-8e85-4f76-88c5-b195ed1259c2\n1a1a9e9f-6004-4242-b9f5-cfaeceecd913\n6946fe58-86f8-4338-a566-099cd4ea52a2\n06336db1-cb48-4249-9328-f47018067c98\naaf19d3e-3502-43cb-9fd6-985d3cfc0055\n495b2e18-72ca-42a0-bc91-00990e07099f\n13673952-08f4-4353-905d-1860dd13202f\n306615f6-89dd-49e3-9647-f91ad48c60fc\n247766a0-a514-4ecf-9803-fa9f398f557f\n02c2f3fc-b8bf-4155-98a9-665725b93630\n97d15828-e653-484f-aace-936e8f41ffa5\nc3d915ce-0265-4801-aa9a-9e3cfd9439ba\n7f6f4f38-7e03-4534-aab3-b112eb462508\n8ec7ed55-1cc7-4d48-a324-92786dbe780f\n95430a16-0b81-4e5e-812e-ab6cff724b16\n437c1ddb-67e5-4325-b6e5-431415e9b917\ne92c4831-2022-429b-b6ab-4235e44b82e7\n60a7284a-d7f3-4e32-abb1-dccee21a91a8\nb94aa8fc-f2ed-46a1-8922-65a4c6a63a3c\n46940736-02b6-4d5d-8868-12ab69600cd3\nea86b8bf-054c-4d44-96db-cab914878a7a\n0d69af8a-6a6e-4984-b79a-37446feac5a7\nb257ed10-40ce-4d7e-8e5a-dae61a6629a5\n0ce794d0-2641-48c6-a3f6-13d64567f159\nd580ddfd-6917-4054-8645-e1f64aaecdfe\n5cfb3873-2f8a-4bf8-8694-baf990e0004d\n4f53d772-4223-4c4e-bcfa-ccd398af45cf\n2267fd90-c2c7-4a60-82da-29926b10616a\n40b3114a-3adf-4f48-a0dd-105bbb91b21e\n19a73001-3128-4d61-9db5-ffafa2751674\n6d5073d0-ee56-4ec2-b104-b033545385b2\n0eb74c69-0a98-48a4-9226-b0fac44354f3\n84e8fc51-26bf-4698-89d9-7fc1508e90ee\nbf443370-9123-4709-bf5b-4cd53d843788\n322fbaa9-3157-460a-9ffa-8a6dc7bcb23b\neaa9f066-6aa9-4995-83b1-b6fd94e17f8b\n8b1799d1-9306-467a-8f67-d8c06bdaa62a\nca90d9bb-87df-41fa-a518-ab844fcb8cf1\n291160f8-2701-4950-8c71-5830894997d3\n054cb172-8590-4550-8485-a0c73249b49e\n7e7bf2b8-9ab5-4e86-a512-7c652b95fed5\n2517149c-d537-4cc1-9a0b-bfcf399c6a8c\n9152884b-9020-428f-a30b-22abadeefc0f\n70d082b2-8633-4429-9541-ec18629ee02f\nade9a679-c0a1-48e5-96bf-793dc48fdcf9\nf22e98bb-d997-4ece-a5e3-e66d9c1a302a\nb9be8afa-2b67-4923-a87c-d75e572e9e48\n3fd94413-1a49-40a9-b64d-d4a70fc9a83b\nb170c10f-ff80-4f70-940f-db3fda179bde\n150ec63d-491a-49f8-ad15-5d275d4132d0\nbdca63af-245f-47c0-a752-34069cebd8f7\nb1a2ed68-5d25-4848-aeee-863d3fbd8505\nb9d51b7e-7d19-4056-89d4-e56349265430\n81ab923b-615a-4069-afba-ebc24ca715eb\n76108145-d409-4cfe-b7ae-2aca803eb639\ne9951b10-ed21-42d3-9089-2ca95d5e907c\nbdd584f9-3e33-4b67-9351-79d737e2e651\n499640a2-e856-4ee6-89ab-23ee31c811aa\n4a961340-1d4d-41f7-869b-2663dd3e3a76\n08244c48-ed29-4af2-bd7a-a58efd6b631a\n528e2654-2e4c-4b09-ab04-9ee8ba5aa047\n4ce5a06c-4ed0-47d1-b8c9-1f921c5e87d7\n233be8ff-abdf-4a95-bddb-de29b2bbc98c\ne580f007-bc33-4e9f-b12e-113e8c9900dc\n0d27b851-f3e2-43ce-a9e6-092928cab1ac\ndf7f245c-53a6-4520-b24a-96af2758263d\n8e22dd7f-4609-4c99-be86-6c76443751ae\nc9f3ef87-6712-4a60-8485-7cb2a7557dc2\nf1145632-28ac-45bc-ab55-7a5d2342dfba\n9332ef97-1769-4856-8d8d-fd026ab98e9f\nb3651d93-2241-4200-8997-e148754663ba\n695951d7-72ce-41f0-8f02-d2bd129b9aee\n165801e0-157e-4585-8bf1-a4c4efcee696\n50fc571c-4602-4787-a4cf-e4bc66505e08\nf225d87e-123a-4dfc-bcfb-544835479f2f\nc10d4856-9664-408f-b2a3-83f697c84cc1\nbe51b4fa-42f7-43b8-9b8b-a812387f505c\ndbd776fb-c36c-42dd-8c1a-5fb681ccd8b3\n0b6b5bee-1b54-451d-8c49-99c5d9f09d77\nb52abeb1-9728-48ec-903c-86f9566ab876\n10e29de1-59f9-44ad-959d-c1b39bbeff33\n48bf4ca0-54ac-488c-bc1f-d1b0ad6c71d3\n1a0b9ad1-1cc3-496a-9cd1-b2f73bf2b337\n6fc5cea9-5d36-45e9-8d6a-db7572589beb\n834e6b8f-4b6e-4758-a66d-27c6809e1787\n18e292fc-1b7c-42d9-9f1d-5fd4ecb4c702\ne6795ec2-df9d-4983-b34f-246bc88550b9\n47de115a-7cf2-42e7-8d26-51aefe8084be\nd0c53dc9-87e6-4e48-aec4-2229deece0cb\ndfafda3a-6e7c-4cfd-9797-5243258d9e12\nca6ac6c4-8a37-4e83-9471-cfc0cd7621f2\n5bb321c3-6921-466e-a8d2-bec0f5e57253\n2731c84d-1fc7-4c72-ac40-27be057c0ec4\n7589b78f-1880-4e5c-a0d3-29cc61204535\n9730e46c-21c7-41ff-913b-c262f6b7d27b\n3e1cd6ac-c31c-4a1c-8f35-8cad50ab3a76\n909b87c3-3cfa-45d7-926f-e8ae53e00214\n67b50f72-9fd0-44b1-8a6d-a45ab4c6efdf\n622ea793-ac61-4e73-bb91-efe166f3fe5c\nfdd3c418-9bfb-4335-ba6a-4ebeb3e41655\na347e017-67b4-44f4-8a4d-9390adac72d2\n4ba0ef35-31b3-4d6a-8981-e4421d5870f7\nbcfc323e-e13f-4a83-b3e1-527aa4b68aa0\n2c75d38c-e45f-458d-b2b7-c03cc843f927\n69441c85-bc6b-40a8-8b67-eacbfa6ed081\n2b278eb7-47e5-4ba0-83a6-dbc131945b7c\n10481e86-b138-4cf7-b026-22b738855770\nb778ec61-f123-4a89-8db5-23f073b8839d\ne302b38d-95c4-4f08-a700-730d35327194\na2aea7fc-4160-4e99-9694-6aeb3135833d\n8a5eb730-6037-47a2-8a00-9625eeabc178\n4fe930c6-e244-459f-b6d3-da09b0c218cb\n1bf604db-56db-4b5b-9550-7982ad103219\nd07a1fdc-a960-41ad-ac6a-23e382ae3e1f\n6d24a7a3-ae41-463b-838f-98cc8583bb9e\nc2a5972a-2ac7-46d2-98b7-17359bc6f623\n450d7ee6-7cad-4754-b4a0-86d9a602d58a\n69f78b2e-9847-4c13-912f-9888564544f6\n12b354e2-1c0e-4bdb-b384-10b980735a28\n69f1a791-cc40-424f-85c6-5efd0c54ea0d\nd960efad-3a9c-422b-8398-a02e2639dbb1\n21fcf163-8d8c-420e-b1e5-9fa096a1c82b\n4f5c9b89-caef-4b7b-9afe-57cb7424e66f\nc867da90-7190-4866-813f-af65656dd194\n6e1c7411-cded-426e-85a8-41494c6152b5\ndbe80e0a-04d3-4aa3-ae33-aa4bedf947fe\nd46c43cd-910a-4c47-9b70-7c63eb7a54d7\nb61ef1f9-5242-4182-a70a-c0e2f5f8f0d8\n49b39ba7-40d7-49d4-9d86-29dcad655f08\n9a5aa38e-8e55-4ad5-b30f-29ab79019403\n9a6783cf-83cc-4cb8-951a-cc64bdd96b97\n759fe98e-fe25-4654-80be-672ff71db06a\n4a3f9fd7-183e-4d9a-bbdd-71b63943ca2d\n312a687a-541f-491f-a917-6ce47344be85\nfead54f0-1531-4d0d-950d-5a341d843c9a\n99b0b0ce-2220-48c3-b6e8-f4491112146f\n68cc04fd-a8b9-4e2e-bab3-bdb97117ea62\n5b0ddf81-b833-4f78-85af-981b055d7df4\nb5396abe-d978-43ba-b689-04c335921873\ndd87a19c-15a6-48b5-820c-2b13ed41e2fc\n5fbb431e-921f-40ab-a805-0249da77b240\n791d22be-bfdd-404a-8ac5-37992a06784b\n45b71472-ff07-4f41-a678-2609b43ab234\n588d0739-643e-476c-9650-90ce4b9d019a\nc25a3e11-33af-40bd-8a17-1158011b3c48\nc5dd6a71-3311-46e0-a101-e7dd540b4438\nb4fe5360-e41b-4d16-b5b0-d798ab9b0cdb\nc0c0ebcd-38e7-4002-80d5-86ad02eaecab\nd150bca3-1772-46c5-aae8-cd2428a6049f\n1ccada50-e54f-4969-9590-b8f808f47972\neebbd0b6-6342-4d32-9d14-5ae1f82986d3\n130e55dd-5df5-4a0f-95c7-0b60ca34667b\n2aa2b487-dd8f-4dd1-942f-eadeb03606ae\ndb440aa9-5932-400a-8e2e-7493b9fdb4d9\n20080247-fbfa-4d45-b2b9-2b503b996810\nc1383865-ab3e-44aa-8e9b-56fc79c4cd82\n878ab048-f013-4cdd-a288-314ea2b3224f\n32427cd7-5413-4535-875e-61b0c289fd28\n24343750-e8c9-4267-bfd0-71f2271440de\na8245ad7-4302-4ce5-b086-b2966b888a26\ndca7312b-f39f-4bb3-8f97-59fe6253a306\nf71049fa-64e0-4857-8cc8-8b9150bbd268\neba0f552-94d3-496b-9fe1-257a170379aa\ne6984211-59f1-4b74-9d89-249bedbb48f9\n0e526622-b621-44da-ae50-7f108c264117\ne362f5bf-f96b-4200-88a9-8fa8042d715b\n4c275ed3-51b3-4a08-b419-b64f651c055f\naf79576a-ca0a-4453-821f-9cfcee6612aa\nf0ec92b2-b3cc-4d0b-8306-a11ad5165a77\n9059e6ef-ccc8-41f9-953c-b7a1f1c519d7\n03bc2c59-a4e7-4ac6-a186-0f4c08a87eee\n0ef9edbc-1572-4c74-acc8-25f859c4d6a8\nd10470a0-fde6-4669-b700-bb8b9d1def0c\na153f745-adef-4594-b125-66ffbbcc81b8\n6303c6a0-37de-4c5f-ae3f-02d286e3a784\n6881a19f-9683-4add-8b65-3fbd026e1c4a\nf8d42b3f-c012-406f-b66a-529853203fb1\n88daf044-86f9-498a-84f9-0c85957a6897\n06384f5d-09fd-4de4-8320-792b2cb6f227\n53c7525f-0559-4505-ac97-e9912dff0e6c\n5ae61179-2172-4192-af2c-001886953a3f\nc375cd5f-5b63-4c8d-bc92-8e42a9e76308\nafd6608f-594a-46a9-b738-b3cdc77f5c90\nf70816d6-17f5-4939-aeb6-8106f0eaa213\na7453337-55d7-44a2-a4ba-cac4b455e06a\nfd22ef0d-b788-47d1-913e-ca43a143be3c\n19f7a5bd-41b4-4ff7-8f13-f6fd87e87e88\nbff508bd-482a-4c6d-a8d9-cc06667c799b\ne4018f3b-ff78-4084-88b0-e1b571e5025f\n96db4a2d-8b01-4809-9b4b-9fe4433e5f74\n4ce96dd2-13e1-4840-8a5c-8b311544188b\nbe0ca11f-8f6a-4535-959b-1c108f956b12\n01d2dc44-c52d-4227-8d5b-6c59a07427e9\necf24819-fd5c-432e-a6fc-a0bcead01c01\nc1b5f123-d042-4287-b7ae-72121220d011\n4b3501bf-05b1-4b0b-a07a-047fb9649031\n4a844c9b-b936-4c6c-bcaf-cd94818d0158\na6261489-906d-4288-9717-cfff508619bb\n05f8e3a3-0469-4bca-8106-96412893cd64\n3be5cbe2-41d7-44f8-9bb5-b0b2e76f10f0\n3146f1e7-9a03-413f-8745-2fb4fb05651a\n1b3393c6-c4b5-455b-941c-ac26a941e5db\n673187b9-aacb-4959-8418-2bb4d931a531\n759f64ba-7168-4bfd-9a14-d16af5331fdb\n57712356-5e0f-403e-b363-fc71d53c108d\nbfdce97e-6419-48ea-bb2c-70286482070e\necbf10ff-e63a-46a6-9d5f-67f90f826199\n5b8be433-bffc-4977-8142-8ce9cf6fb935\na11e361c-d100-4b2c-a0ff-aa2a0f4ee3d8\n5a86f418-6ddd-4b07-9610-ebc60c4b30c5\n33b35575-4eee-4172-b829-1270435d4888\na7fb5d22-64b7-4551-942e-1f847c7c1d62\n3da412d4-2fde-429f-9d0c-04525b801772\n230e0732-e845-4afe-969e-18c955ee14a5\n365494b1-4056-4048-8bc0-6ec77c973013\n4c9d1764-ad6d-4191-a294-d235a3dcaee8\na3318274-57ba-4c2d-a898-ee2ea6e09ca9\nb2b805d4-931e-4c21-a17e-44cf8ee50720\n50bce132-d137-4acb-9cd6-f1ef8eccb944\n939f91d2-d1f0-413f-b252-576d26c38192\n3e486bb7-683a-45e6-97e0-be5abd8d983f\nf89e7a0d-e006-4b4f-92e5-1f9103b2c4da\n709e7309-7696-46af-b87e-534c6074663e\n5cab6e31-f409-4623-9204-3b8a7b1f553f\ncabb491a-6b15-4e75-a633-756c3d5df574\n2a8440cd-e53d-46f7-b811-f10390bf5ef2\n4b986120-b669-415a-bea3-571fe8bce8e4\n40dd6749-294c-481a-846b-0271a9527b19\n344b46d3-3f84-4894-9323-6750c0f58bbf\nf1b646e8-ccf1-425a-8a90-53e167cc2e80\n06dd5869-ea26-4734-aa0b-621eea6a1087\n251d5a49-4caf-4324-8565-3831039e64f0\n9d24a28e-82ca-4354-b2e8-8d01e35d3e6b\n672170cc-3cd3-4305-8635-20c6e678fd59\nae2dfb90-faf4-4632-aba9-baffc34230e6\nd28e58af-caf0-486d-8cfe-f2432a6b410a\n8a692fe5-c36b-4d7c-9313-a178fb2b6598\n4b15041c-8d39-4383-8e41-c3e926bfa211\n8e5de896-b308-413f-9fd8-9932a91c5c21\n1064d315-2bf8-4799-8a47-0455f09ed015\n635961a4-caae-4625-b306-16a5ba0e3259\n7469ce40-51ed-454f-ad54-c0969b7e4a77\n9688b373-4d10-412c-bed3-f7b6e3c59135\nf4a81b7c-a41a-4810-8832-0a21825b8bd2\n375ca8e2-4079-4303-9e51-5aa3c7172e07\n72a2d0c3-0dbc-47e1-8c49-d8f5cc93d164\n2d3233d7-bbb9-4045-96c4-a36f466db2d8\n4c01ff93-6506-4cdc-8e72-f5f314885fc9\nb532f288-14e6-47c4-ab8c-29b6fcb817f3\nb247cb8d-afcb-4d7f-9488-cd4a46f0d453\n23e9bf87-5f69-4254-ba8e-f509adc00ecd\ncc003fca-de88-4f8f-a5c9-6b677a51d30b\nbfd71e6a-4351-4c0e-a17a-b9dce6826741\n3fd7ffc6-5908-45d4-aacd-e4a6cdec7746\n4cc9d651-0475-4393-894e-c0d22e0ef65b\nc7699453-9175-4613-aad6-bfe96c35f8af\n6929683c-e139-4083-9e40-78b2d1374c5e\n344f3220-8319-401d-a6cf-513a37fcb0c0\n258c3d39-0e8c-4c9c-b29b-908af8c747a6\n083b8f93-103c-40d0-95b9-3bd87c2a3292\ncc58bd94-7e18-4513-a15d-a670d1113850\nc1fc431e-a170-45f0-a5c1-ccb4efb4518e\n73cc8750-1e45-4fa6-a088-e1cd39312df6\n57e5f42b-6cd9-4406-8d2d-415c31193cdc\nd180935f-46d3-49a7-bece-01df634c46a8\n4e72cfb3-0c4c-48ef-bf93-9082a812eb28\n1a09f024-2910-4374-add2-5bca71753680\na4962756-d176-4a01-9a23-839f601f8ac3\naad508e9-70da-46a5-9acb-ab2ce7d653ae\n52b552b7-fff0-476c-a4fd-9f6757a4ddd3\n3e5d931b-118b-4025-bee9-083623100e17\n3862ab2f-3bdb-4b53-9a87-90d7a4c7cd4e\nefef1a64-86e1-4bc2-a377-14271d806032\n99efe1f5-ac7c-4d58-b34a-40f462e26def\n7f8fea0e-0a2f-4ccc-a9d4-58ca88cac2c7\n8a47f29c-e6ad-4c8c-a493-5f2f489c5fd1\n9ebf1e63-213c-4a63-bf14-1f6ac88b4633\n57032fe7-03c6-41ba-8cae-2c95b2857cfe\n4621a9a7-2604-446e-a8b7-7544e0c74e35\n3621e754-6fc7-4d92-894a-d506d9bdf19e\na1f7b3c0-ab52-43b8-badd-a1312dd8b0c9\n383d7abf-52b3-4b36-abd7-3915aade80b6\n650ddc45-007f-4bf5-ad9f-7a5f52612607\nbbac0643-65c1-4980-932f-6d6ab7eca768\n9dcb795c-5e86-4166-9e85-c22efbafd2de\nec3e3980-c49b-4398-aa65-59f94f66a4b3\n7bcc0492-5ff3-4b44-86fb-8f380158150b\n66f18bb4-7b95-400a-92c7-f41c4b06a7aa\n922c0c4c-b1c6-4155-94f2-63c63dc16136\n601ca1aa-7f6c-4c6d-8884-130063066624\n8a2eb102-2816-46e4-8cd8-f19a194982c9\nb787ab39-3466-421a-acae-254394a8cfd1\nffab6ddc-b799-47b8-b611-3207f444101b\n8854a41d-94eb-4adc-af27-2b5c04165ceb\n349e926c-f6c5-45a3-851e-3e2aee4e51f7\n28426cec-4fca-4435-ad43-73c54e08d3d0\n3e28d94f-7a16-4790-924f-714dbab66b4f\n1b75b334-7332-46c9-85c5-18ecda4a21ac\n6faa0992-885b-4ced-a03e-6a3f778b0eac\nf5d8366f-a5d9-441f-8e2d-e0e866819256\n5a56250a-beb9-4aa9-b542-72bdd054e607\nf581b2ef-b82f-4a22-aaf6-3a7307cf4b48\nc7ea724e-1026-4075-b722-5b393c8992ad\n562b78d9-c9f1-4af1-b3d1-6f840d7857f2\n7b516ba9-7a12-40fa-b0e2-cfa83319e5c2\nd3c33f43-9a74-4cad-96e9-035575955c3e\n145154b6-ed9b-4990-9ab1-a6277bace6bd\n8cf11f34-cd92-4729-9608-8278603bff5a\n18197997-7397-4520-a894-2f2ab9f85bcc\n7c2f54e4-2743-4574-a31c-67fa04054650\n41dec0c9-5edd-45d7-b849-9104ae737f45\n177ffeae-24f3-4e82-96a0-09f04d19937f\n52276965-a886-42ec-b400-62d230aeb26c\n45186021-3325-4c17-837a-9c84ddc18526\n5f40eedf-ebf0-4497-9abb-b7073fdfe91c\n964f5618-01e2-4c97-a87f-b53d68f7c5a0\ne162c5ca-b84c-4949-8943-e35346fabfc9\n5e8e2640-8c5f-4b80-810d-dac80d59a69a\ncd2ae41d-4f25-4d4c-bfe5-6c9612c04657\n5ecab69d-1045-41f2-a08d-6d6d01d54899\n313ad41c-bb7d-4e55-9d8d-d5130c64b977\n5cc3776c-1016-4d55-a3b6-210267de62d5\n100a0a71-67f1-491e-8256-3e27b7462df7\ne477794f-91cc-4c27-bd81-12924b7f5aa1\n1b94693c-7697-4858-a3d3-4e5944113a99\nb08098c2-f99a-48ba-8521-a2bb7a49d8bf\n75094f80-22c3-4acd-9abf-2f6e405a45c6\n38d32c65-22db-4571-8752-d1660c089ae4\n38e4fc77-3a3e-4d47-89c0-b2402dc33681\n40254851-3f75-47fa-86e6-f8a182ad5046\n5d68259c-2c19-4df4-b02a-615bd8382fec\nb07452ad-065e-4b51-b05a-76da7b52868c\n3e0222f6-edef-4ce9-a584-a270352b77e2\n1e119d8a-ee04-40e8-8a7f-7127d5fd6958\n20079ea4-ba52-452c-a98d-f4db91923df3\n089181be-348f-4527-afc8-e90ec15262c1\nee9fcced-54f6-43d2-8e38-b656cbd0b4a7\n2df8b3b2-c20d-4165-8c7c-c8a7e71b0378\n6516a88a-60ba-4865-bcdf-243499544e24\n8bef98eb-dde6-4950-8202-08e846564fa7\n7e44c905-9491-4b8f-85a5-452ed92d8900\neb2feb69-ddbe-4ac7-a35b-dff6caccf675\n28ba09e7-f412-4080-9cae-2af95b9681c7\n654d4f80-0133-42a3-9dab-2017ecf70181\n96f792e7-5dfa-440d-86f4-984f4dd468b8\n7183c165-05ee-4fda-993e-28bfefd7d77f\n17a6bffc-77b7-490f-8010-0183a0a80da9\n93136188-5e1c-4c4b-86e6-2a60c7098d75\n94606393-c060-4b59-93ee-4404c2cd7644\n49592770-8fd8-4ae9-8758-2faed3c40049\n9248d38d-5a6a-4c1b-9229-70525849cd9d\ndf9bfb3f-4b04-4727-8369-3f862e4de8d2\n054ea1c1-3595-4009-93b1-d55398ede0ca\n2cb3d927-fee2-4165-b420-4bebe9d4eb80\n3c51a875-e13c-438d-a899-866c7fd1cab2\nd28734c6-35e7-44ee-a570-d0dfdd91e41e\n837844c6-5d23-4347-96b9-69eb5b710e10\nfb36e63d-daa2-4697-9bad-ad9b76620d0d\nec5301b6-232b-4f1e-adf1-1bf6ad4584b6\n32e817e6-e838-4cd5-83c3-b5d6979fbf3c\n4079950e-35c6-49cc-bb70-b13f8c49c10e\n94b14472-9f6c-4440-b8c2-8f212d92cb9a\n8083fb66-3803-46cf-b7af-fb9612ebda06\nb1b30a20-814f-46c5-8d6c-4a486c827039\n6e39fc4b-361b-45da-80fc-3e5d30ba64c5\n271d8a37-5397-482a-bbdd-afed247ec261\n3f57dc70-e188-48c1-8732-afbc286c0eeb\n3d927400-2fbc-48e0-af14-52c4fe3ee01b\n5ca8c316-5772-4132-a407-24d1dcaaf495\na91b2b42-64dc-4522-86cd-95ebaff076c4\n60c2533b-9b57-4218-9947-a7bc248796a1\n8754329b-8e90-460c-9bd9-83291bcd7471\n7bb81e3b-b915-42ca-bffc-5311c4cfc8f7\n7a4fb6ee-7afc-4357-bda1-f9c0a03dac2c\n8987fe9f-2711-4aa5-897a-6335892e9aef\n8e6d39a2-cc31-4cd6-bc6d-fa0a2cd43a50\n9ced3843-eaf4-4a43-af72-7d05ffe1b232\nd212fab4-18b0-49ab-809e-6c5b0ac6efe3\n71d8eac1-b9eb-4f43-9276-0e45d84e8b5f\n5fd4ff0b-bf4c-4d97-a066-a93c46fce252\n87161125-4fea-4a74-9ad2-c45a3e692c6d\n830ad940-e3ed-49c5-991f-45d9544c578f\n45c764fb-a2d0-4695-ac59-88e3857820f5\nbc45849c-5d1d-4335-a784-6fcee933f994\nff5b2199-81a7-47eb-a70a-1ce845fc3ee1\ncb37ed6c-3af0-4dcc-8914-e45225ab424a\n210c0b22-49f8-44aa-8f7b-46ab77696190\nc3df2aab-7de3-4628-b280-34fb9b0bc8d4\n1f4d7427-1c54-4c03-b093-e2fffeabd2a7\nfe9cc2b5-c11b-417e-8839-06ca737c2c78\n96da0874-775d-42e5-a20a-6c73fb35440c\n58b2b0c2-bf1c-4bf5-af0b-076f6954b3f5\n923544b3-726e-4dd9-80fa-1a212ed54efd\nef0aad8f-21f4-43f2-989c-28b05b7f4977\n3956af29-661c-4c86-8cf5-84d39a0a94fd\ndba60fb7-f0cd-4778-9b76-909947897299\n0e8cd7b3-33b0-4e36-9331-79e881228bf5\n629a7dc0-7a93-48e2-991f-22cf5f92c894\ncbf9a158-bf86-4fb9-970a-9694e0945b60\n94d9a2b8-f7f4-431b-ae94-7c3b343dea25\n3859ca97-e37c-47b5-b864-579fe0321ff3\n721db5ec-4dac-4d73-92b4-c6c91efa3e70\n799e0468-1acc-4957-968f-2b8af30b8659\n7ace067a-f39b-4895-9a3b-9a00cf2a74e5\nd933ff0f-311a-4a6e-bcf4-e3adb70d80ea\n28b5b4c7-7820-4e1e-b3c8-7ab323c5b072\n802b23f8-119f-4189-8f6d-5d91a4c05234\n345923a1-fca7-4437-9ccc-5cb61007ee33\ne158f7cf-6d2b-47a8-8c13-ad716d5cc407\na9d0465c-b528-416d-a942-741e8fdb6585\n854203ec-c062-4ca4-8e69-8f25db3cba57\nbf465a8e-fe9f-4c07-af6e-d8e4a265fe84\n12ea2cc7-e311-4096-a9a1-007bf38233fc\n5e2bcb4c-e61d-4e16-8ea5-22c06ee1c2ff\na1aa0dad-5434-4b4a-9617-eeba043a1848\nf6c34590-cccc-4496-9986-521058be18e9\n17db2ac8-b087-4e3c-8f3a-93c84b39d44c\n6b48f47f-f4c7-4e06-b53c-3b3abd015b4e\n9678d6ea-53c1-427b-9880-402c169d12b2\nc7248609-018b-43ba-ae15-f4cdfebe54b7\nd58730f2-9508-4c79-86af-fcb21ab41845\n1b06a11e-8d69-4ac9-99ee-243afbefa2fd\n15a8b7a2-c4c5-4a52-9561-e9f541dcd282\nf478a455-6151-4b6b-85e2-fa32e90fda70\nb9e27ba2-6c45-46c9-ad2f-5cb37727e3db\nca065ce6-cfe0-42ae-8529-2ee8a140b4d3\n0a14ef89-7dad-4b72-a4e7-a06e653ceff4\nfc56359d-2076-492b-8362-698600071ec4\na7370b12-b7fe-499d-9f49-7f8914590150\n137c154b-e2c5-435c-bb5e-ef3934bfe33c\nbbdb95e9-cf16-48f3-8ca2-d2e6120b6104\n35476fdd-36e6-4ba3-8b1d-c8465b7869c5\n24b2beef-911e-45e9-8c98-2b1f6c56d8d7\nbdb4a0b0-92cc-4ff2-a61e-464cb2dc5c58\n0310fa2b-0e7d-44f0-8b2a-1d352a5223dd\n3e4c5d0d-e539-460d-811c-1f510004b656\n1f42181e-95dc-4fc5-8f2b-a73ab8993743\n6a217df6-71e3-4174-bca8-bf644d872c0d\n30a54973-e94b-4c45-ad81-f23bb483537e\n625b07bc-124a-4e6c-b631-3db4af1b321f\n887f1025-a806-406a-a693-de74ec99d8a2\ne3d993ca-c5b4-4d6f-8dca-54ff4d462f2a\n8caa7a7a-12d4-4afe-93c4-7f2fc94bd289\n921aa569-d571-4823-a763-6c20eefcd95b\n4f4ac9b5-a1ff-469f-a38a-7cd5a2fa19e8\n0d379cc2-ef4c-4419-b5f8-9f745832b5da\n9c3e1d76-0681-4359-b075-148718c55be3\nac3b0c74-2551-476e-9185-d787c4409f40\n57c35d25-4999-4dde-8fde-9110239253bb\nb00de5d9-cf7e-43f6-b206-3409e036c880\n53ad2efa-00f0-4ced-92ed-4275aa9cff1b\naa204c67-a4e7-4db8-9fe2-74c8527f5f26\nbbbebf3a-081a-4677-916a-5525fd34a5bb\nbe3dd01e-af17-41fd-b12d-9ede43be1710\n1429f8ee-9b22-4b0e-8af2-a11117b2bbef\n942d0ef5-c214-4613-a9c4-59d7e9a6ce7f\n7dcd24d1-f0b6-42c1-8e3f-d9cc46ce4d5b\n77424ef5-a020-41f5-b307-67e6ede77662\n5a9b7348-95f5-422a-8d1b-b2e88e5f7b02\n765e1cc5-480e-43d7-871c-c3478c046e85\n37cc136b-de39-4c8e-84a5-e9aea1024e52\n19843a39-5301-4151-82ac-43db6cdb675b\nccfdd935-4d5d-4644-9c5d-4155f9fd63de\n69df4b97-5319-416e-a9c9-4d2431133305\naa256f60-ed76-4d67-b845-20ff19f93f61\n1b38377d-2d5a-4b9d-8d62-93e24ede233a\n86b1c85e-09e8-455b-9762-4459309c3370\n9d7374c5-1ec9-4b73-8749-d8dac193e5b0\nf01cd143-d286-4086-a04c-8e47515062f8\ne0fadcc7-7458-4560-8f69-4bafc15b3260\nb21c5e32-c739-48d2-81d7-3471de7df6eb\nb38ae01f-8e82-4321-b82e-19e24afd73b1\n7efe9dee-d0c6-4eaf-9965-914a26cb59b2\nb44d320c-e7e4-4aaf-99aa-02221173fa5f\n82aeb88f-6ecd-4363-b57c-0ec62ac2138a\n299b7d62-f3dd-4305-a8ae-27130a18893a\n941fcd69-c43e-41b2-9066-74ae46912da0\n8e223ec6-11e0-475a-af6f-7648ecdecf84\n12758bed-7403-4c49-ab18-b39e9b629a02\n3c8dcb6f-9c70-4eea-badd-86876c634067\n87f4dc91-ac90-43c2-af9c-8b9ce551f135\nc4f07fa9-29a4-45d7-8cda-ca352e137ad8\n844dc7a5-3515-4725-b1fe-1b57e45bc0ec\nf14c76b3-5bf9-44b6-a79f-1c934bf4cd37\nb2704f34-a304-4abd-9e6b-69ddce547b69\n23c0c913-5e08-4c7d-896d-fb758429b50b\n0c67500e-e16c-4939-94d2-ec5e4860b72f\n345d98a3-2517-42a1-8604-01f6ee1aee2b\nc7026052-6d9a-43a7-af3a-df942e3fe41a\nd86a5538-fc3e-4b6f-9fff-4f76cbfd2e1e\n4fd7019a-2249-4720-b80f-fb5787ecc589\n2da9de81-cee2-428d-844e-5dafb4eaf858\n7f6a468e-7f13-487b-9b9e-de97eaeb36a1\n70ab083a-55a5-4c44-8f12-1ed1dad7c547\n6fdc4eeb-6b6e-4df9-a809-fa1ae7292e7e\n10d6ee73-fb7e-4c81-bc23-21c5c346a365\n47d9258c-89f4-44e4-9c3e-5b6d1713853b\n64d0aa51-10fb-4b72-947b-e745d04db5d1\n15cb5410-a673-48ba-8adf-804fa37de9dd\n983492f5-5e2f-4291-af6a-a982b1fe1c68\nabaf1ade-9de6-409d-b59a-039940eccaed\n1fe19918-fa38-4d95-96a7-3c9089c773c5\nfcd2aea6-3c5d-464f-81d6-171adb7c52d1\n05732a40-41e3-4949-9d58-e636cf8e6332\ncc440f6b-41c4-4821-beb3-12093966b3b3\n7aa50fc0-4b85-42fb-862b-053b6e919537\ne7c0c2d6-9b08-4a94-9f19-024322ea0ad9\n8560b154-1082-4ff5-bddf-39b3da7b77fa\n1ab5cb9c-336e-4bcb-8e2a-7feadf93edfd\neb286dff-a8f5-4144-95a4-72d835d93e01\nf0a73d97-9035-4bca-a8dd-0ead0858a140\n849e0da7-1502-4856-a807-77cc9271d48d\nfb5b3ac2-2a03-4ccf-8cba-cc496aba6349\nc5bde6ca-ffbb-40a2-9585-0b43191935a3\n987c4b8f-c43e-4b0c-b362-e643fe626f59\n01a479db-2bad-43e7-a0b0-cb4757ecdfa2\ne5f4c2fa-82aa-416f-a7a9-ae7195709bdf\n3d8f31ed-01ed-424d-b78c-a91c26a8039c\n2a9c0a45-19e7-4d83-be86-d84d380ecc82\n16c1d27d-b35e-4c65-96c4-b0812340b19b\n6b7a7c30-c720-43aa-a4a6-b908742923db\n800cdadc-9175-4dc9-80fb-57cde6503493\naa225a5b-a5f9-4e61-b2cb-f9757014e83c\n62cd3454-0a60-4cdc-b950-26ce0517e447\nfd611791-f539-469d-86a4-3c341172444a\n668cfe94-5281-47fc-bfeb-cb10a7e31924\nd1d5bbce-ce2a-4e1c-831d-157faeabadbb\n3f0272ef-80f4-4fa5-9916-75fa05666f19\n2814eb3e-2f9d-4b95-ab8b-8d4618d259b4\n63dea437-4df3-4313-84c3-c4a807a80bef\n347202a8-c34d-4c40-8c2b-4f06ce692384\n99c5a856-1e42-48f9-81b9-ee371de65293\n08c904e8-82b6-4067-86e9-4e3fa5752305\n51d26d06-e193-4431-9903-4970356a7dc3\n9f08b652-c07e-440f-9b25-353f4c8d7fe5\n6e6a7263-4ec4-4e5f-9d3d-e89962473517\n26c44bbb-58fb-4ae8-a270-24c01d989041\n9c06e0ba-a9e4-4bb1-bdde-1526012d8bc6\nb1bdb873-1aa7-4955-ab64-60142dff36fd\n4805a970-c4ae-4c85-abbf-05a87c247fbb\nb569208a-9693-4166-8f05-9b4b7977bb6b\n3c5497db-07fd-4338-956d-4c1117ec2aab\nce0aff62-b889-4f1c-8265-55f137ac1f93\na28f54a9-8531-4bf9-846c-0fa32b33b02a\n26880e24-9fb3-47f2-8e2f-1312d0ac9547\n08085239-e346-421b-bda6-2931061ab323\nc7db8344-1a21-4a9d-82de-21a28214f5fa\n5fa86c72-44ff-4cc1-89c3-37b91f127fae\nb59db0ff-61b5-4b35-9e38-300866158cf1\na2f8b035-bea8-4afe-a4c9-18f388cc9e3c\n4ebbb2fe-b56d-4374-8377-07816471c6bc\na47f7517-24e2-44bb-bece-44d687d68d2b\ndd54e3ba-9d77-41af-9d54-d787608688e4\n0aa4b017-8154-4e95-b333-e343b651e35f\n344ae165-46fb-4df5-a81c-40054655eaea\nc9ba3947-99b8-4edd-9e8c-9e3e44451040\n2ff895a9-c16b-4348-92b3-72964006de03\n4dca09a5-dbc6-4aba-abac-5725b1eea0ce\n0fbb1a56-f7d6-4c19-968d-16e70477e329\na86ecaa9-92cb-4f30-9da3-620267e66dc0\n24c33100-dac9-4c8d-bce5-77ad312a41fb\n6a723a95-800f-40eb-a2df-e4a460a7291c\nb794abfc-f5b2-4b87-b0cf-8129ff9f3c04\nf8d7ef05-6954-4054-8ce6-66df35a120f0\n3dffa39c-9f3b-4ca7-a36e-7c0532b92b06\ne256b1d1-de9d-4db5-addc-4927572f7580\nc01cfa57-d0d1-4eb9-95f9-81f376fe1a2f\n08b35431-797d-41bb-88b1-f3feee4f3032\nc65d3f54-632e-4f47-988b-c570e3c9a3a2\n6ef767a6-ff1e-4b75-b9fe-3c84e77e9ae6\nc41b13cb-c3b3-494e-b4a8-63ecab5db6a8\n9f90bd3f-0c46-4523-966d-273cb150a08c\n67960f02-78b3-4861-b150-162eb97dc2c6\n9128e804-6989-484f-8286-219d10ab5dc1\n3b667a66-c203-4c15-a984-fd7c57174d14\nb6f4b36e-b159-431a-b804-fb9243317e3d\nf0c2ff0f-d709-4722-b794-47c4d217a058\na88480ae-dad5-41cd-9812-ed7b8ce65d6f\n02948d31-ced5-4c9d-b628-e2f357e08349\nc2fe1d9e-b07f-4e75-b3b6-e56780fe4631\nfec59adf-f846-4ccb-b873-dadf0c0f53e2\n5a0db095-ab10-4407-acf5-5660f5600d08\n885c6c9f-7c50-47c9-957a-e292e1498799\na750ae47-cbf2-4d0d-85f0-261d16b15abb\na74128a2-5637-44d5-83b7-559c45226025\n18f6b8e4-bc8d-4a43-a7d6-b9271880f259\n2b12491a-ebde-47d1-b448-cc4b032dea41\ndeaa8914-20cc-4b2c-a136-25ea228bfa16\nc5c48237-2429-4421-928f-b545d9f89495\n0db0545d-dcd6-43d2-ae02-28e0586757f6\n68d7f54a-e883-49a0-bb90-bde83cf1e206\n928d24e3-fce7-468e-acd3-c00f9504406b\na440ad8e-22d1-4cf9-977f-e4f8e2b0c995\n3516733c-524e-4d7d-99ba-3e247e709112\nc0304b0d-0acb-490e-afa9-b3ef1ff8b864\n4bd851cd-f5aa-482f-97a2-46ff3cf4e7f5\nc739f58c-9ada-4cee-94aa-984cdb1ca84a\n8b52afd0-793c-4d3b-b10a-59a0814f7c12\n2fb7992f-6f75-46c1-98ab-ed6d57d9af28\n66794811-3b9c-4ac7-82b4-6d9093621dae\n69b6dd7a-c32d-402d-a834-445ec19c69d8\n739eff47-1c78-4805-8f24-2459bf9066cd\na1efb5dd-22d7-48b6-974a-0269eccfe86e\n9cd9e899-583e-4144-89c9-d9ca398efd12\n33bab6e5-9c6b-4d82-80ae-cdca6f5609cc\n66eb0bda-8046-46d9-a5dc-cf06a66f8448\n1abc9b13-5282-49c4-9266-c2120d3b8b52\ne2f8d1e7-adc2-4a47-80ab-2138333803e9\ned773c3e-9f40-40c7-800e-a9bd766c38ce\n6e038c0c-84b5-46e7-8123-b18d7bcad702\n54f1c57b-6e75-4d71-9582-590a543165b8\naf5bc733-596c-4d1d-9b58-f0477378f25e\n030a4ff4-a698-4bf2-8144-e2b40bd395c7\nd5c6a8f3-cf5c-41ad-b894-efa4f4e9e78e\nd58520ab-17d5-4514-a61b-3ee1b033d966\n6bfdc06d-fc4b-4a10-9a92-b307b11a4f95\na3000802-19c2-4b1f-9f03-f5d31ec8c0f9\n97090704-6cc6-4430-9eb4-c8fb5160e80b\ndba83006-91b0-40f8-8263-9609d33ae9b8\n798c639a-e1c6-40bc-8d52-58c38b9ed63e\n31454945-32f0-4c26-b509-6c703e343ab4\ne64340e5-148a-4b63-b7e3-43a59abe0a25\n8e900e75-f95d-4ef5-bb63-24956e43eb97\n9716e278-9c88-4a8b-a424-52db232ec5e1\n10fe3537-a6d9-4432-b2fb-e6a9c22a1148\n04705bc9-9e4b-4efd-9e5f-94dcc4910881\n88d978c4-0425-4fb6-befa-ba2657e90d40\n272e9079-4236-46d2-adde-12f497500731\n5cf5b34c-c3a8-41c4-835c-f4c45fd5bc83\n613afdfd-2b45-4942-bcc7-59eb4f53dc99\n8a91f25f-2563-4995-ad72-47621912e69a\nc2ddd2b9-dac8-41b9-b4f5-cad8c5e6bd82\n305ab214-d8a0-4932-b75c-b27ca56864da\na26d0ba8-09d1-4860-ac84-731816f962e8\n4cb69b08-2aea-44f0-8260-37a64d1f45ad\n74fd0569-6a2a-4db0-b673-5656355ea10b\n977ee6ab-654b-4fb3-b4be-a87f414ab5d5\n17bd0838-8b27-4a4a-88db-01761ec74e23\n2e563e0b-2bfb-436d-bff1-ed9bb7e21174\n4e8f8f44-860c-42d8-a668-3f9253709a6a\ncbc2819c-bd8a-4ad0-8533-697eefe6d577\nee7692bc-672f-46d7-8431-cb9056a7cdbc\na2b0dc8e-4c72-4292-aca6-4992eb032da8\n09d4cdb4-41b0-4793-be63-0e334353d912\n7507eef5-adaa-4eca-bd08-cde025042fdb\n466d0c75-9781-4f89-a3c9-f8d55defd844\ncddc0ef5-2106-4932-938b-348d6def7e13\n0ad96582-9aa2-4f38-8a6a-5abf10e0fc88\nf25bf0e5-7746-4119-9222-46b18f53f48b\ncfc81ffc-fda0-4219-a025-de9d51890cef\nc035393f-3529-4fb5-88db-89741cc69221\n5a913405-a612-4dbe-b03f-4438e44914ac\n2915fd41-3c6b-4215-8298-30ff5a9175ce\n797715bd-99fc-4598-b444-4d28e73703ca\n0dc9e26a-3723-4a82-8ca1-0ecb4aea3ea9\ne1157e44-5fe0-4414-93dd-3f939b53ec79\n2882d464-f18e-425b-94c0-0fb0b6966a3d\n7bee14f2-51c0-4629-a8ce-e5af898a325e\n13f1da52-3624-48b9-843d-cb338944f64c\n51ebdf66-7419-4914-b7f5-12405aa9c6db\ncec33a2e-8335-4c8d-aa09-410909e11798\nc5ff4795-9245-415a-b8e6-3bbc4cfe5d39\nf0a8307a-d4c0-4a85-a9d4-4387aab93a2c\n83e4b62a-fd17-4731-ad6a-87a9561f8f0d\n3e7ccbd2-c6c3-4c8d-8d9a-4594352d5eb4\n12fa8e10-a71a-4ab6-9fee-84f7c894f501\n705a0eba-7f3b-46f5-8cb3-c41fc10c41e5\n75455e15-acc1-428e-9c0e-9bbcf171196e\nc420b795-7f16-439c-8b60-b19291c5dbd9\nd8a31feb-86e2-4131-a9a5-be60a6feeadd\n1ffc08be-7326-442a-a3e4-fd424535f45d\n68f295a2-497d-4c89-b005-a4701369697f\n478fc300-bdee-4e18-9b6c-90e3b355609b\n9c0bb28c-6598-4d5f-91e6-944d443f4cea\n2ce2ef1f-afae-44d6-9321-18695c7e1d99\n0b74f4bb-a131-4344-aa1b-f71512166afc\n66a9ff4d-9709-4ba4-b4b3-9e81221b8e45\n4576e0a5-e789-4e8d-8e3e-310ee51ce402\ndff1a065-5924-49ce-9bcb-80eba053e3cc\n8d38f654-1c28-470e-9891-b6587868e7b8\nff902d8f-7716-4d42-bafe-6d97eadd0ecf\n73d8dc82-de23-407a-80e0-76349f0999b0\n0c01676c-84ae-4f53-89e6-5667a987e775\nbdbe6ef6-12e4-4243-860d-cd0793636294\n4e611041-42fe-4e30-8c28-41a6abfe01fa\n1f2ccde6-a2a3-4206-b638-d618c6f2f454\n38fa138b-215c-43c6-9683-705f300a7ab4\nf7b4639d-17e6-4ba5-9da8-a85790d289af\n3ab1a44d-a98b-4791-ace1-7e265a68667a\n82f9f98a-c714-4b12-8684-df152d938018\n55885b22-cb26-4158-a75e-12a36a11dfd3\n8164182c-df69-44cd-848b-67b4ca537a4d\n402d1968-db93-47a4-92dc-b1b7dc0d0546\n3a89d211-99d4-4c66-8ad0-57e67a01abd9\n94d4dc35-929d-46ac-a3fa-add540a5618e\nee83ecc1-68b3-4f35-9f50-9354fbc2c467\n6fac4840-cf7c-4cc6-959a-a7c12f9d67dc\nfbd624b4-3046-4d35-90ac-6f6bb2caae25\n14a5c54f-7eb5-475b-a740-2248b5a5fa8f\ne652929d-7a33-4ed5-86c0-d4359a8be3ea\nbec40c3c-7d2e-4b66-b1c0-0af66d1a6f8d\n62f47ca3-abfd-4e30-989b-ee141bda0e8b\nd51bb1bf-4dc0-400f-b642-c26809c22139\n66ca4953-0ef1-465f-a008-8689b49f3642\na7012789-159e-4553-beb0-4f3bbe9aadad\na58337bc-d8a7-4266-bb43-084d2d54fda8\n2ba9cc58-fdeb-43b0-a3b1-0b0a997464b3\n1e8a25d2-80c4-4e45-8c43-7e1887672daf\n6018f012-5fa0-4423-b2f4-bd8acf5ad62b\nf1f43d7a-3664-4615-a507-664312f92e2a\n41353a73-ac95-4ad6-86f8-63f960a11881\na53f564e-a2c2-40a3-8a33-b8a56ed9dd9a\n3302f309-36de-403e-95c2-75430d6d81ef\n27eb766e-d746-4239-8f59-6cd91a998785\n81c4898a-39d4-4b74-9ca0-f6e6a4191601\n4f59cc57-b927-43b9-8acb-8ecb00ee5e69\nd2848108-1f09-4b15-aa3b-87ce4101bdcc\nfd699e8c-cfe7-4d51-9234-56514eca62f4\n1bb50a98-1d64-45f1-852c-3b9947d52e89\nf8076813-fd17-4594-84c0-90561b8dd8b7\n53ebdc3e-df8c-4d34-ae34-2fac2707b542\n574bc3d2-cb1d-4adf-9363-19e6fa999636\n0e684176-19d9-4b1e-88b0-9ce049413802\nf8009de2-70a5-46e5-9286-5db5445f6c6f\n524014ad-cefc-4f92-9eca-2ee85a06ab82\n2fd95b8a-02b1-4d4b-aa28-f726940f50af\n47f1b001-5bb5-4b89-9abc-dc791b81eacc\n4b29594a-3304-41fa-be90-6eaa738b8cec\n051a0877-d607-472a-b4fb-683db7547e31\ndddfb39f-f160-4775-b53a-ec9abab5a70e\n5a95406d-0f04-498e-9f08-01783b0bc36b\n344999e0-c008-4d5f-ad38-42ecccb7442c\n243d2459-a93e-4db7-aff9-c804b2c008e2\na190ea9d-5fbc-4408-9853-3b8bfd6712a5\nb7470fc1-10b1-4ce5-b0ad-db4e825b56c8\ne72bc342-5dc0-4ec1-a237-39fb4dc546f6\n1c6db2b8-6764-4569-a95a-94dca8992c56\ncfe02baa-11f4-4ce0-a962-7923a3945fb1\nb5fe9c61-05a0-457a-a803-55a91eb90fc9\n0bce8bbf-5031-4be9-8e5b-b98ac14fe7c6\n2b9db9d2-49b9-43bc-b548-8ce14ae5eeb6\n4b282004-6872-43d1-9a95-8b605b866cf1\n36b9389b-5a2f-4c05-892d-51fd2f06e60e\n2bdda44d-c9f8-446b-9f8c-9b1fe5160a4e\n25e63933-88c0-4882-b663-16d639a34b61\n07a5ff58-344f-4371-b5c6-2644282b7f4c\n4f27a16d-764d-4339-8843-57d003bea4ad\n6fbcf8ce-200b-4f36-9990-78d936e90b05\n5739e143-3fd9-4684-b45d-2ae06ba24292\n40937f3f-e442-4154-8305-dc257f01dc72\n39e40011-a44c-4ae8-8d9b-ad849dbc9cdc\n50ce17b7-8aa4-472b-aa25-3c64c4363b77\nbb964551-f4ec-4c79-8ab2-2d4f86452ae4\n1ff9e0c9-3d72-4c0c-9f68-90c3042c4161\n1f16d533-1a60-4f11-9728-447f8bbe0c9b\n36cc1d7b-c956-4560-901f-9f222353b74c\nd32bedbb-7a83-4541-ba73-4ffef015e6f2\nc70a23f3-ca26-42d1-af31-fc8a702f6531\n75cf1130-e0d0-4902-b2bb-82ce96a135e1\n0e42cb1f-eef7-4f55-aa05-d074e8d46b34\n214d4932-41c7-47dd-8212-f003f9b8255b\nfeff3535-733b-45d1-a7f7-e10eac82b2f4\n610e0389-42c5-4a41-b68f-a71c6cf380d5\ncfcc6644-df89-4bf2-a63d-ca322d4d6caf\nb3fafdba-5758-4cb7-93d5-91386b3430c0\n81b375ee-ebbc-4bd7-8218-3e1cf148f265\n8de87af4-dd90-48df-9c31-f67bb842b274\nf20cc2c0-015e-4066-adfa-d95cc66a09ee\ne3eabb11-f94a-4c62-ac3e-4dfbb1da2dcb\nb2689322-b858-4d80-a9da-a79973c34589\n84af3099-7c9a-4afd-8df0-754fd142213c\n223e3cec-2c00-47a5-95df-94057a32f9fe\nc0e97be6-1570-466b-80ba-ff1249fba219\n2873fc82-3002-4b41-89ad-14529b30ce8b\ncd82300b-5780-44a5-b1a8-036510db78cb\naa5a2505-4f47-40d5-a4d6-5ea8005ef03d\n206cf8e3-c039-4ed9-bba0-c48dc1f90002\n78b17c30-1158-486b-9601-691a2a87a8e5\n30a69f18-0ba4-4a53-9540-007000544003\n12647a4c-c1e0-4be6-81c4-cd00bd1bd6f4\n178c69b2-3fd1-4b80-9847-67b397f0f4ba\n07e2cd1f-4454-4d07-b52b-30039625a102\nc95fa277-6e44-439e-9d2c-080b6375cfdb\n7f4fe1a9-019d-41b3-91f4-808dae5e9a5c\n0d5c2c6e-3a2d-4195-ac58-dac18886f9fa\n79c538a8-37f7-4761-8404-442e8c38fead\n03e71af8-1bb0-4a87-a1d2-e4aee7a4f840\n4089847d-8e1e-44e5-a74d-f4d765504716\n800a3270-be7e-4b7e-a8fe-41fcac07d67d\n669837a1-d1d8-4256-9244-293687b24591\nd2155518-9b32-45e4-a7e1-8201727b6a71\nc6c02410-299e-47ca-9087-14d4a521a7a8\ne67fee8a-0f90-472c-a7ac-5aee38cb3b27\n3138fff8-f433-4eb1-a928-bd20d88e7196\nf9dd1a93-32cf-47ad-bba3-01398e723e71\n16d537cd-358d-4a7e-ab39-74ea2f454b37\nd4cc42ed-0333-4be3-83ef-d9613261de8f\n60e1b255-6205-456c-a42a-a58acfd3b45e\n667bbae4-3dd9-4b9b-ac35-644171482359\n45130af2-73bd-400b-9ab7-97c3ed304479\n61d44995-fac4-48ea-98de-ec8ca393c223\n1e82f73a-5ceb-4cd3-acc0-0207d9fffb5f\n2e69f1d5-0966-4332-ae95-210db11dcebf\n311f539f-5072-406d-977d-e7b81a7fe430\n0aeaa9c6-0a52-4d43-886a-7ec12be21763\n065945fb-331a-4798-8335-787955a2b0fa\ncfa0635f-cfbb-4434-84e0-5d35e1df15a7\n9950ab21-6e6f-4763-b998-d3cb6b0ee705\nfc7cc762-f699-4b2a-99c6-52d51905328b\n7076eb8d-93df-45b2-b908-6d1de778c252\ncbf6a8c7-4b2f-4fcb-b127-3148a5590595\n9e468893-5abf-4eaf-99e3-ba362ba7bf92\nf5e70831-41f2-449d-bec3-ce24b3edcf5c\n05314e9a-29c5-457e-90ac-1ab557722af3\n3274571d-6d40-4023-a1d9-f3e764f8b42b\nbb9ee7b8-9076-4255-a84c-e92d15b01d4b\n15d2537c-6f0d-4ae1-a0b9-eff76d5dc691\ne462b117-f7c5-41a5-8143-a7b036f31920\nc17e60a2-93c2-4c61-8eb0-405326f85ff7\n68d75752-de2e-4bd7-ae69-1227b5683b52\n083de5cb-1c85-4fa6-9c7b-31ef3db98ea1\n814c266d-ed5f-4281-87e3-d79a49bdf40b\n3008b7ed-06fc-408b-ad57-417f96ac7311\n44109671-8f11-446d-bc9e-65aba054cda3\naf933a43-778d-49ac-b207-5e754df7917c\n75e3511a-ae39-440d-a123-6cddf4c20257\n3aef9f4e-b421-44c5-926b-25c41566331c\n30603a5a-ef98-419a-a482-e56585b0a2d4\n981e01e7-59f9-475e-b0ef-e4dd33c2ddac\n856f6925-7074-45d4-b387-863572d254b6\n53ccb4ad-b490-46cf-8a54-a41528cba16c\n3ea18e48-861e-476b-b491-d546f3b83e81\n3370480d-9c8b-49e3-bbdc-039b5a5a6d02\nd59adfd4-4d0e-4b94-b2a6-0b8861c134f3\nfba9f0b2-8817-4c48-853e-6e9a2316001d\n88a04f36-c12c-47f0-a8fc-ade25072e5e2\n41176903-954c-4408-bc03-4b1ee251a166\n310e6339-e2c0-406e-8c0b-757852efe60b\ncc5ba1e5-567f-4b9d-9b40-89d439353b32\neac019a3-9c22-4bf5-bdd8-d00e2d4af4d0\nc4d9be41-3c29-40b0-99ac-5aae4b909a69\n9a0b1c37-c4db-4a2a-bad0-cb97d26a5527\n515e9201-5286-408e-9c5a-b8eaafb4a12b\n09cc3a2a-d674-4cea-8eb3-af5cf99227a9\n8086bcc5-6059-4327-ba73-9495182caf6f\nc3ed8cfe-f19a-46f7-931f-c70ea6d74a4d\n4ad611c6-3cb3-410d-8cdb-7d3bc533d7db\n1bc9df55-4d2c-4fab-9494-4cd346aa1af3\n29971106-632d-4e02-8285-dc80d8c3c7c3\n5a90d1a4-ef80-4fd0-b56e-d26a0eed062e\n0fb74865-0223-4018-89f7-888628c7b657\n75c328c5-ddf8-4957-8f0d-eb625f7ce2fd\n426fb32b-b515-4f37-a8aa-7b0032100431\n7adebb85-7ff4-4667-9ae2-7b8be8ac0236\na8ec7b4a-e77b-4ed1-bfce-b65715eac9f0\n92c30169-1a08-4bd0-987f-0b8d604ca5e1\n3d05dd6f-59a3-4aef-92f6-b82511afaba2\nf866aadd-9ffc-4bb7-8491-4aaffc81b4be\n5ebb84c3-8f52-4d36-b0d0-415a18655610\n640660d8-9157-4fd1-8202-42474da8b471\nf7802862-5809-4c5c-9a85-004c303dd47e\n1a6d07ad-813d-4496-bbf7-f6551bd87883\n05787393-60d6-4b8c-a443-9dbc7d35246a\n989fffb8-a346-467b-8e62-aaf68a99c6d3\n2d0e1a79-4dea-4d31-9a5b-e4577bc23910\n6058f1ce-4feb-4eaf-a513-9891db48be24\nc534cbd5-475e-4aff-a407-7f12f01373b3\nb8ed4054-d706-40e6-a0a9-c544133c6a5d\n722892b9-3e4c-4479-aa6f-5120fe6784fa\nfc0470ac-3ab8-46f7-b0e4-79546bd13ce2\nc982aeef-9feb-49a6-8044-0ec5ee9fe4a2\na0f4c990-c19c-4aa0-8ebb-6a0310664c3a\nd1f88d49-3dfd-4944-b6ae-e6fd7d3969b6\n291b8a44-5b8a-4275-ad78-4aab9af2d0c0\n7d96a363-7ad0-4a47-9516-30534c1f0550\n9c49db60-4c7f-4239-8f2d-45fc44f2846e\ncf61ddd1-5c85-470c-ac1f-972fa2e38161\n1058fe77-e8c2-4cd9-997b-3cad9dbb67cc\n3e074028-78a1-41f5-a904-ea6df8a619b1\ne831dcfe-f460-4118-9bfe-45190aec3d7d\n8fcaff0b-69c3-408c-a986-451494d0ac68\nf5c273c7-babc-4605-b9a7-4350a5777db1\n46e211c0-a61e-4589-9fce-6228d5a3f40a\n0ef653bc-e7d2-4c23-b3e5-d0be715416a9\n5ff31a1b-2ffe-419f-ac6e-703d4167fad4\n9839d78b-2ecd-4c32-828e-0dd30792f9d4\n8ea34323-36a4-41ba-9aa6-f8650796daa1\nfc190df1-3a17-42f0-aa6f-33916cdd3152\nca625ce4-9d8d-4338-b893-d068fafd7674\n4ec60fbd-ed72-44c7-a3fb-6832293c7f30\nf2ac4423-299b-417c-94ae-911ff3a1c8f4\n915976e5-d37d-4e67-98f7-b91f8cd256da\nc7bf73ae-a865-4fc2-9f42-1bda0efb4c7f\n940132fa-feb7-4c80-bd9b-f03449c6c010\n00a486e4-4bea-4c0c-b102-40937d2faa2f\nc467c4cb-3401-4071-ad8e-45781f73c3ce\ncf6ee9be-2328-4c04-bbe5-91b15c51bdca\n47951f70-9e39-4714-9b55-ee629285b3b2\n9b3b0f82-f1a6-4529-9565-17621efb459b\n45729dd6-2fec-4f9e-8d45-39a3d953af48\na4832bba-d43d-49d4-b473-a55c6972e756\n3a535a8e-9065-4987-ab76-1cdf62282d12\n240edfa1-a6de-4b2f-b831-7dd1ee21ceb9\n7d289023-13ee-4917-a5bb-3c66cec9e6f0\n89579965-f1f8-4fe2-aa24-e198fa1033ef\nfcbedf23-4349-441e-bfa5-7ff118a707a1\n26df5056-5f07-4ae5-a5f4-0dfe6e00775a\ne55b0fdd-8111-4d74-9868-19e2209a240b\n132d98fe-6d97-43a5-9999-7d423ea3f536\n9faaface-5a14-4023-b387-729cd27af4ad\n04093b4b-7741-4fa0-8823-805523e23573\ndc07baf8-10a8-45d9-98c2-da562fcc4622\n67b8ddc0-1eea-457e-8570-9f89e1b075ef\n1ae549d3-8e00-4061-a483-b0081ff79fca\n2f6b3c2b-f92b-4d77-bece-2a2375ac5d01\n5d205f50-739d-4678-ba5e-7c4f37c47261\n78261fd1-5d96-48d9-8c59-744fecedcd01\n276bcb83-47e5-4512-a684-a5e718b0e2eb\nb393a44b-bdbd-460f-8487-ecfd6add32f6\nd225d329-0bef-4ee1-a798-0dc0df24928c\n16348a5e-bfbd-488a-b96d-c479b9a44250\nad697e21-0bab-48fa-9e00-1c8186ff0ab0\n1bd56f1c-9d23-460c-ad23-2e98e119520a\nd9ff2827-2a91-4b86-bd00-85bfc4df5888\n99c09f95-1479-4822-8060-18a4c9048bc4\nbb43fd15-70c5-402f-b37a-5add4a941a43\nbc1543c2-905e-475f-a8bc-b3099ea7b856\n0a15b625-a019-44cd-bd96-f0a771090892\n7990b926-fd82-4792-9250-81197735bc56\nb9b8d45e-0442-42f5-b19b-ac3b8a3a6851\n338fc43a-a95a-4b79-839d-648b5016793d\n21dc49ff-e4b7-440f-93bd-7290fc4188ce\n30b50ceb-edcb-4903-b95f-dfe10ad1050d\n9658cdf4-2226-422b-b462-1d2e977b57b7\nd5afc210-137b-48f8-8848-54869a65fdd1\n3a750e25-30ba-4032-84b1-18c07fc49b57\ndbc078db-a81b-45ee-ad71-24c35180567e\n0de4f8a0-6710-4195-805c-ad0323106ba0\n8fedefa9-2a00-41d7-acf9-b075fa690861\nabf16235-573f-466d-bb18-124bde199ed9\n9ed20969-5384-4dcf-befb-2ca0ae81e6e7\n88aae762-fb3e-4239-96ea-0418d99036bd\n75fad954-e113-4728-bfdd-02f21e86cfb4\n312f5ac0-fcb2-4832-9aee-e349c2e75b76\ne9260259-796d-45c6-90cf-173a32b01c5c\n575d0e40-44cd-4e85-b02c-bbaede21267b\n3fabd56d-175e-431d-bfa9-ebbb5baadfe6\n56f61937-69ff-4d87-93a1-7096f9877fd5\n5292b8e9-d4bc-4452-a8d9-f0a26ea603e6\na937d3d4-c958-41a7-9bff-89418d20fc61\nd490fa64-838b-4ae2-9a33-5d948042a288\nc13c2fc1-b9ae-45ba-9ac8-7a85fddc55d7\nb20b1342-d921-4edc-b71c-8c5ee16a9fc3\ndfe9259f-f730-4cfd-81be-eebffd2564df\n8faf3f06-b2e8-4d12-b800-be2427e9bb82\n6b4a6a11-0361-4b2c-ba9c-058ece656ef1\na2181a0c-20fc-41da-b7ae-7e79950eab72\n997c32c6-6269-4576-8b9d-28cbd259979f\nccc776c1-719f-4c04-b6e3-7c14c987688a\n2257e6a7-7016-4886-959e-31bd0e38019a\n9e9b07d6-3712-4334-80ce-25c9fc967af9\ne28c7410-79e3-4db7-b3ad-5a5804004113\nf584d243-dd3b-42f6-ba11-47061e2c7c21\nc1181edd-1eb7-4532-bb0d-26b61d246df1\ncb039ac4-f1c6-4e37-8dc3-52b6996ec10d\nbc663a92-b1d0-465f-a77f-ca8dabc0503e\n561bc777-1fde-4110-ae84-2fa6c24f1417\n66f79e2d-a615-4dba-8f8a-690f7a02efa4\n35b5b228-cae0-4e8b-8e36-3b9aefa18e47\nb9f390da-3909-4e81-b4e9-bbece31e7c06\n72ad772c-7772-45d2-89dd-07f1b7e9ed38\n9ae56d1b-239e-470b-a470-1446870a4dd3\ne0abb885-6111-4a98-86ef-36ac786df879\nbae8e7e8-17b9-44b9-a5f8-aacb4c294a8d\n9f0a8273-c3f3-40ce-8da7-4f998c8274b5\n836671b3-a3b3-40b3-a9d6-66cea1db616a\n4c53a487-e4c8-48ec-afdc-f3cc9d30c3c1\n743cff6c-cca7-4b9d-bae1-70f291b273ff\ned3f2212-a8d4-4f30-abef-0ffc23565c4e\n99632e24-b07a-4c81-bd3b-bb460e357320\nd9bfe35a-b38c-4d62-adea-0b67c1e5ba6a\n213a59df-1e6d-41b3-9bc3-6c035b160a0e\ne5c7baa6-7126-43ea-bee8-eeea896e0494\nf40339f4-46d4-42ef-bbb7-af6ca7c1897e\n86a9ccd8-7d8f-44fb-b0a6-0ee663156999\n9936a5a8-bb9b-481e-b2ff-d9e4d4b3e095\nb182fab8-a694-48f5-9e4e-ad3e552c4717\n0f407374-1d24-4616-b9cf-25d6980e6198\n94654cb4-8bdc-4932-b5fe-26da8813a665\n78dbd9a0-6043-4ef7-bc30-b429229dcb92\n4bd6dbd2-e79d-42b0-a66c-61a6029d56cf\nafa1c2f7-5e1b-407e-b39d-2b9e75822e5b\n757ca31c-06c3-4c93-b739-69b6e65cf0c1\n95688de9-71bd-4c6d-9df2-57d6867f44cb\n50556d46-17cd-4b99-938c-3f444dcf60c9\n5102831d-11a2-4917-86a3-5513be22939a\n2eb3afb4-dc4e-41e7-b2dc-be858eb71838\n6baa4046-97f9-41d9-b974-c5aedc24a172\n7e908c21-7901-4260-a456-67858550a2b1\nf874604c-53d3-449a-bcfb-039188c570f2\nb4014905-5742-4593-beb4-2e63f8925c50\ned2a54b0-4b39-4e68-8acd-a9a13b44df50\n30e33508-7480-4d7d-97d9-829635307dca\nb059babf-12e2-4699-a3b1-8b5c7e9fe71b\n61153d92-7cf8-4493-a713-a8d033556509\n73e7e7b6-18c5-494e-9586-7444182b5c93\n1e2f1d2c-9a6d-483f-8c01-72e172ac4faa\n7c44d4a4-1b34-4a8a-b648-1891335c739d\n2de415bd-3cbc-415e-b3ae-8504e7a82189\nd279c54c-b64b-475e-a624-4c3cb2d59ab9\nfbd39329-2e00-457d-98ff-e37ebf5c588e\nc17cab9c-3a91-4e37-ab52-5ef439e844f5\n3681832b-f321-4591-b251-2c45746733ac\nf747b0cf-a30a-40b0-8004-6ab5410755a5\nf84071a4-13a9-46e2-afe8-dd49cd86e85a\n950dd958-2a85-4eb3-ae6c-4b5586b9977b\nc5089ef4-8522-44f7-bc5a-41586737108f\n3d1d5e73-0df3-4662-b0e7-5fd48b2a9a60\n9856665d-ddab-42fc-bd7d-64ca62effe88\n929dfbb5-cd75-4ea7-966c-326756b9b671\nb94d82ea-05d8-42e3-b06b-96eb2f11bc1b\nf5beae28-1666-4e5a-b33e-b7a51c4d40d7\n9a680638-7abc-4e0c-9029-8ad441902206\n272df179-6342-4f68-b3c7-3bd6b14aaf54\n5563c0d2-91fc-45b7-8e80-dbb82882d570\n8d2e19f2-2943-4bbe-88b1-e46cbc6f6ba2\n1a45e363-3d54-494e-80c4-ba9788286d74\n0015ca63-88eb-4f35-9f36-80405cbe0aa0\n99497b7c-7e40-473e-87f0-8f42c896ae5a\n59620cc9-e700-40aa-9a28-f7f326a0641a\nc64a63fd-8a8b-4dba-b458-566d60cd98e9\nfb278b70-2f2a-4546-a368-d39828ed4392\n8b84b6c4-bc5e-48ca-b7e8-85ed809c4754\n8afe07a2-246d-40af-9188-a43663356082\n8a454670-7013-417a-8cac-3639a91dc8a9\nf4499532-d493-4da4-8d38-cbe87a166983\na03c2ad5-cfbd-4b3f-883e-9b6b5069142b\nb01d36c2-943c-4f56-8e88-009a349f91cf\n922dc7de-9e62-464c-8308-3dedf1cf4ad0\ncca19ef9-5673-42e4-8df0-5cd663d2fb92\ne63d72f7-6e48-40ed-8ee4-3f592da06348\ne57559af-f630-4289-bc54-e841c6054d11\n23097e90-44b4-419c-b810-f2f7240092ac\n8dd982cc-aa57-4749-879a-765c6942dba9\nee014070-7f1f-4521-bad5-036c6709896b\n96f698c7-b01a-4612-b074-d67f4d8d4a77\n25dbf916-356b-47ba-92d8-4a66b6e17b56\nfe832954-d5c6-4525-9fa4-483a287cdaa3\nbbd6e50f-924f-4a5a-a29a-bf90a49892dc\nd0cfe497-ac1b-4175-88b0-249802a169f2\nf2d20146-56ec-4a59-a797-c495fe2bd7fc\n827489bb-5427-4226-8184-07cce9a06c30\n35729f01-1225-4837-828b-371014e950a7\naa3f90de-6de0-4d5d-9a15-9f19f1af74f3\n4dfb4272-fb9d-4d7a-8c17-0229b64d8084\nd78da78b-e1d3-4031-92ca-5acca258d870\n1ca1410e-3fb6-4f18-8d24-541ce9c9404c\n2e3683e3-068b-4c34-9b0a-2ecd1de73a39\nc55b55e0-c749-47c2-86ed-1e83062da1b6\n09e1721f-b0c5-4885-9598-a373ef3ac009\nbc1cc966-05d9-41f1-bec1-e02de49632cd\ndde93192-382e-4671-860d-51e5ee6271bb\n48af7750-4f22-406c-8711-6a62ae1463ca\nd0c25e89-8c3d-49a0-9857-6e74b55c53f2\na467e48f-a9ff-4be1-978f-25ce48dd1436\ndb980f72-c670-4bf5-973d-d7d983eadbc5\n7aa64062-c0b1-4322-860a-92cdac086f7a\n94a38be4-7f54-4f6e-8fc6-04a4b2db587d\nf10ccbf0-76c3-42b8-a8ed-b5c15c39bd02\ne93ab4b3-a6c1-4f3b-b342-ace4c9dd5239\nbcb0f5e8-a13b-4f78-886c-0ce54c55648a\n7ecfa616-6c58-4ca1-bb36-c632e1696e61\n29533133-6129-4f1d-9d19-b91eb522b95f\n57ea2978-28a7-4853-8150-956d31f19545\nc025c87b-c2b9-4f4a-9e75-283694e42da2\n3d3aaa9b-3ec1-4926-afc0-9fcb672931b2\nea230b08-3104-44de-b282-89960c504c21\nb932ee35-e557-4aca-ae7c-9072a9851f32\n67a73f44-369c-4480-b910-2b7818cf636a\n26efd18c-f711-43eb-86d2-380bd18db4e5\n35842bc9-8b92-4386-acc3-0f68b0ef940b\n36331e71-f4f6-4883-8085-6b6dc87f8e33\nab18490b-6923-48a8-81a6-6099e2fea6ec\na2c5a5fe-bc54-4c1b-9e6a-aba92a18103f\na57c0175-08ce-46a3-b2b5-43225bda848b\ndf962a1c-02b5-4243-aae4-9f44bedac80e\n4f38e1f4-bf2c-42c6-96d1-50e43fccb823\ncac2db47-1b18-479b-ad41-625a87d4b995\nfe3eea0c-a961-40c6-a353-492bae537648\n876b34ea-2e6b-42b3-9704-edddd6688177\nda67bd0f-ada8-4938-a4f8-f0eec13288cf\n09d8def5-5656-4212-ad60-7b8e531321d5\ndffb1475-219d-4221-9716-6fda2debe89b\n4ec9cf6a-521d-481e-92e2-d8721c7d7af5\n369608dd-832b-4a38-aab6-7a9edab80de6\n18a91a8a-c0ff-4a35-b238-481c47d5331f\nadd348ff-62b8-4f8c-800b-bee82e7c5534\n34011724-ddd5-4940-aaa7-c98f7fc4f429\n9bc91049-166c-40d8-99d5-e80c07c1aa9e\nc15d5434-c26d-4f69-9e66-1b9ec65df245\n327b4005-3c4d-4423-a919-bdeb18410276\ned27306d-b921-4a48-b218-03e3ddd52b31\naea3c09e-e536-4034-b631-57a61def6763\nb858fce0-45f5-4361-a237-b78bfa54f363\n757a2724-9bcd-40ee-999a-fc03b0aa82ac\naf13182d-fa78-4a4f-8d5c-56dd58113f09\n0c72b6ee-4b7f-498e-8505-b4d2c050f52f\nc818df99-d096-4dcd-9046-d8c8057574d6\n3ccd79ea-192a-42ad-9da4-e2f3af26e633\n2323956b-dab6-4303-b772-c5a6c075d306\nf3243ce7-7898-4a9a-abbe-d03eef20cca7\n9e1c1d4f-e49d-4f86-9515-1f0309c0f370\n32b49b63-bb06-40bc-af25-fe9588bd0f46\ne4365a7b-7736-4871-b4e4-94e543660d0c\n375a1ffa-6b69-4983-87f8-5031fa2fc9d9\n2ce44bc7-b44f-47a2-9b5e-988c383d72e7\na4814233-334e-40a6-88f8-315d70c887f0\n856ade73-3753-4de3-b9f3-f296842974df\nddb7a84b-0868-4676-bb8a-e0b0300f5180\n5e21176f-2fdb-407d-9880-c33d8e8f587e\n8aea50a4-72c2-4299-b319-8f73a109a0f7\n9b691edc-3473-4f45-a0e9-9d89af27efa2\na32f5c25-e201-4333-9a34-0cd5fadc6dfa\nbfbc8b7f-71ac-48ce-b8bd-868a56d45107\n86be59fc-643e-4e71-a56e-e231d8a6dd27\n2910e443-f8ff-4b7e-8141-2031fd7a4c1f\nd6328d29-5e82-49fe-bd84-60014f1507e3\n49102fdb-1917-437f-ac85-06748f60409e\nd6cb800c-da2a-45b5-9956-491ed20a3949\nb5b0761b-5a32-485f-a50e-006896830473\n635e8bf0-7f3c-4225-b5a2-846117bc677f\n1b870e22-439b-4f78-8a57-3f446ae8f66e\n534541e4-5404-4c2c-8921-1fc779a5f71a\n723f4370-cf69-4f99-911a-b7f05b453727\ne2da6479-0022-469d-ba0f-6cf6dd24fe8f\n289d8f20-5bff-47aa-a2cd-f8236e98c202\n34e66239-205f-4bee-a25f-d52abe60284b\n52aea339-2d6c-41db-9f89-8f87f468ee87\n60c565b9-ea6e-4ef7-89cb-9bf97ef96c22\n08f9f7ad-2f9a-4292-969c-d15d0056df7e\n6583d0c2-cb2a-4b88-8de1-607d1c5461cf\n1865fb06-ae1b-4366-9be1-b2026f823fe8\n93a8a3fb-fa7f-48b6-a470-6e2e08921f97\n12e9d968-d3fc-4383-ba0d-46b7276b006e\n75f8fa1e-349a-4fcf-936d-feaa6376aa24\ndd607033-e92a-4231-a3e9-1b69df19c122\n0b928fd0-2137-43ca-a3ee-18c356e01a1b\n77d15055-9f90-43a8-a54e-e7160fd85f0c\nffae6566-c36b-447f-b8d2-e17d8eb957d4\n63ae8d33-0a75-4008-88b9-d65069f53678\nc90f7630-c5f3-4d54-bea0-63e15b514bf1\n744694fc-eabd-4c00-81c8-22e175b250fe\n3f4d9626-27e2-4a88-bc19-c9ae09572026\nfad61678-7bf2-4b6d-a5d6-46f138a5f494\ne79ba47c-3205-49f3-8e45-9a21b470783b\n89f2dcfe-0a04-4566-937e-cd3091ff24fe\nb22babb2-147a-46ac-8c30-5d7eacafc9f7\n432bf5c1-5097-4468-874b-d9f2b593aad1\ne5821f38-3af2-4d0f-88a9-63060c3b2629\ne805d855-cac6-4977-b7cc-b00c9f5ed099\nea567800-941d-4b7a-a8d0-45e24d4ff4be\n3e7cca28-30b1-40e3-9cd9-30ed3adb063d\na7725d1b-9069-407f-872b-56074d0f188a\nebd63da0-ecaf-4582-aee0-b5f48682157a\nb1575432-9f5b-48aa-bba3-e4ed4bdcc5fa\nd88ab7f1-f13a-4d0a-b3a4-f0a886e829ae\n1da502e5-945d-4dd5-905e-e9ce01e2a173\n8f08fa99-58c1-4278-a27f-af381ab77a4a\ncc692293-db4c-4992-bef5-55cdd51f3cdb\n3a767330-5f71-4da3-af28-8baf4962c1ac\n26e53102-cde3-4e0a-86d8-488ffc7628cf\ndab9e513-7d79-4790-aa93-61ea42ef5d98\nc0952e59-9e71-436e-92aa-3b577789cfb3\naa454c46-555a-454b-a59e-3f91852725ae\nfabc080b-bf3f-46ab-ad3a-3a321fa40b30\n5ab9e846-a978-4f58-8069-7290f2289e24\n0f5f3b44-c574-41eb-8915-1627468708fb\n70eac981-9c2d-4d0f-bb8e-ae1a657b5d39\n87cccc4b-66f6-4750-be06-f49eba097076\n9f165026-a259-40a3-885f-33fc2369621a\n89e4ced9-10bf-4342-ab3b-37dfb004c71a\n53dd9500-69f6-4aa7-b783-23b1c8c487ec\n465c4389-31db-42fb-a197-43349bf0caa3\n6135e073-24c7-4808-a333-dd7a4bd59249\nd8fc69ae-6421-4d71-aa3b-cec14c735feb\na9668912-2bc0-46cc-b759-b11ef3777742\n6c75a7f1-327e-4613-a51c-257bad80bc5e\nfa684ca4-80c8-4d4d-a260-efe6cf9d8e18\n91a13337-f6c3-44af-a75c-ebf1e415cc1f\n9a8dac15-a4de-4637-866c-5df8f08467f6\nf94657a1-594f-4801-9d9f-0c776b9634b5\n8eb0f180-d176-46d3-83fc-22fe29fe33c7\n8e7a9df9-75cc-4e99-bde7-f512c5d0ab2c\n372cb75e-f3c8-45f5-9ab9-cea4792712a7\n4cda9ee9-2fb1-4f48-8036-b0f7ac792446\n71b5fe32-acc2-41a0-9fa8-84df6c51b0dd\nb51c6ddd-b59d-4094-8d39-dec136d7d128\n30069389-1b35-4747-881c-f94e48f8468a\n04b6fd06-450d-476f-9b1a-32d332d6c57a\n1fdbe93e-1687-4a2a-b6fb-276b5e9f3ca4\ndd3211c1-9335-4ba1-9518-48d0c858c88b\nc26452dd-4b91-45d8-945c-6ec8b3f7e845\n8ad159b7-94f0-4534-8705-32d2ddf0a579\nfd96ea06-adaf-4d1f-9ee2-4faabce7c907\n0c52188c-8f07-4c52-a6f0-40b99791d5a0\nc52a8e5c-de5f-46a1-b50f-ee28ea77b52b\n5468bf0d-c204-4d8d-866a-da8fb6a5bb19\n6da9aa42-7e62-4677-b626-11e21e976ee3\n8e8661f8-860f-48d7-b65f-f886460955c3\n1f83dbce-b323-45b2-a7ca-f947c5a24ade\nf4f1910d-c8c4-4ae6-ba7f-1ce61e745128\nfc58ab9e-8de9-4b95-87a4-f99de894c315\nd20927a8-f33a-4125-950c-a28553b4267f\nf97baf6d-2d47-4113-8497-1bb8c7dffac5\nb634fdb7-6e3f-495d-9bc7-9b9b35eb9dc0\n7ff7b4d9-103f-44f3-8561-d1453a5a6a06\n77fa0846-98dc-48eb-9f43-89419634ccb8\n3a5397c5-9c8b-4a1f-b038-1c25634055d4\n73dd5c7c-f477-4534-a673-84e81f0621cf\n8e006088-c969-4ec6-9fbb-0de0da792548\n683c0806-e93d-4a4b-8d08-a34a14d4157e\n3254c0fc-9023-47ad-a7ba-71b3c8d8a728\n69170847-c887-4411-8006-5fee14247ba3\n77ec550d-25d0-4e48-95f2-82308a7c67ce\n03dadd73-3e54-4d2b-bc61-351c113ac419\n95106284-3bfa-4ab7-8f92-4dc114895da0\nf8070dda-d208-4902-b128-0bb6e5eb6380\n439ede4f-9aaa-4ecb-8af1-0c272dd02d94\n71270f5a-218d-4866-97bc-f2b0a6fcdc80\n1782a70e-00a5-4b9e-b112-fd83f8431c7f\n76fbe2b5-98cf-4b70-b621-76c30d580742\nd3e86151-40cc-4c9f-8942-5f2468404f70\nfc6300f2-2831-4c29-9655-4f1f79338e78\n5a01e41f-34c7-41fd-970a-153078eebf3c\n389ca756-6eb3-477e-8132-0ba3a9f44232\n18c7c39b-e3ed-436f-8974-a6f585586c94\ncaf50467-e5d6-4fff-bd12-dd47ff2e4d28\n8c74ebb9-0780-4bc6-8408-1db37155c7d8\ne395fa9c-2085-4676-b7a4-c09557a9e4be\nb3003467-5cee-4131-b711-8b462c2dbf12\ne5dd7435-fb66-475b-bed5-788cbd3218d5\n44287c66-411b-4e00-8aaf-079acaec0577\n53d7e8d2-b2be-40d1-802e-c5aed2550d4f\n7d950500-67e5-4e62-a0b1-efdf4db70f44\n451982f9-6060-4ec0-a319-77635833955f\n8fb428df-b0da-4341-8cef-485312d8ec61\n91af9891-cddb-4637-bcf6-1bb8f4bc502e\ne05cb405-b8d3-4e36-833c-fe88af9495fe\n547ba503-70af-4cc2-83b8-4844af9debcc\n7345419e-423d-4e7f-a44b-8a808fa59853\naa0d9356-f508-4af8-9e8e-9a6f1e6cfd65\n79f13fd0-fc11-46ff-9647-207df56ce42c\n05137e4b-8216-4486-8df4-0405e0a00a1e\n8981cc9a-973a-4a9f-a9bd-98dcb12c46c9\nbb017202-61ae-4c2a-8cc5-477796643e14\ne307ffdd-f58d-412d-9053-3fef54f2ead6\ncd232eed-30e3-4c82-9e1c-f7bfd13a8753\nf6906624-ad78-4d13-aa9a-8ed82085b513\n02050ed7-c1b7-478b-a971-080dab1e863f\nd85df02e-ba31-432d-ae57-7584900a0377\n1141b321-25ae-4c0b-8deb-1129d510fd4c\nf70009c5-eb63-44d8-9fe5-35cffec78ac4\n8377e99c-a606-4d87-af8b-4336cbfee3d0\n8fe56242-de53-4b7b-807f-63a585a8275b\n151ce048-b966-4276-8280-089700f5dd8e\n97cdc675-7fea-4b13-864c-ab3aa2c2355f\n9beaf2ee-fd4c-4b1b-b8bb-271155e7a731\n300537b9-fcd0-4156-a5f3-b46a9220e509\n62746b37-2acf-497a-ab82-1553cc5a9815\n839cee1f-7ef2-4cf7-be22-bbde779964da\nc6f130ff-8e8f-4ad9-ac2e-d3677b5e4e07\nacfcbbe9-65fc-4d04-bbce-979f8dc02a6b\nb7009554-436f-4589-91b3-fd7bb5fd1699\nb8698032-6886-4654-844f-25f190fbb12a\n8758b4b6-90c2-41fe-9f45-ff516b589c6b\ne758d28b-c65e-4acd-ae38-2cfca7eb4b59\n9cc4b135-a7c5-41ab-9ebc-b4ae4239b699\ne026597c-ea3c-49c5-a2fd-94a8ba17526c\nbd400673-99bd-4b7d-8851-5de40f0aec25\nafbb196c-fcaa-445a-8150-df49d3eb9ab0\n42843e72-2320-439a-9450-2b2192a3fd8c\n8c708109-39c6-494d-bd31-257627d6bd7c\n11cddee7-e134-4455-89f9-6fe3682a5e1f\ne04c4013-bf17-48f1-9f73-b393e34fa905\nda76e767-9e7a-4054-9007-de848acab871\n12cea959-0996-4b59-a94e-df6e2dd7a278\nd62ec8a5-ae58-411d-b474-02affff7082a\nd5b8cfa3-645e-452f-894d-e9c13e86f26a\n9feefe3a-a7d3-4b24-8f57-2fdf423701f2\n3ea9516f-2a59-4ff6-9fad-d225ae70a5b6\n16051278-7889-4a24-8490-075108a35890\n7288fc99-fde1-4b0b-9cee-0805d58aeecf\nd99af141-f435-4670-a876-dc5938fd7006\n30bf8585-ef0c-4620-bd75-2dc6053ad6c7\nec637391-6ee8-4503-b04c-04f13166ff2f\ndf055d77-71ea-4ebc-853f-75f7c31b0fdb\na5512d4f-5c3e-4618-9ed9-b04f02e584b4\nd1c1d923-7488-4211-8b6b-fc90d837c6f4\n78b6a7cf-d34b-4706-9526-3ac6f496fdd5\n9d8bbe32-9093-4f37-8430-7fc014b0817b\n741af238-0dde-4b0f-820c-be66e633da42\n7b6c8b67-dd06-49dc-9e9b-15e9981b00f7\nce2589ef-14bc-4de2-9287-068eea6da00c\n20beeb32-2c15-4371-ba6f-71ae54673ee0\n4ee06a56-809a-4b82-857b-993862f23715\n901dbf11-5992-4a74-b558-dba103288953\n55d8575f-14f7-4dfb-8773-35c659ff95d3\nfdb221f8-9ec3-492c-a00c-d4b0ff334394\nd84a4024-85af-467e-a40c-6f94c1e9dd90\nd4d9fccb-a73f-4d4f-b62f-d51cfcff22ed\n8a22ba43-b49d-4cdd-9bd9-8d276aa28761\naeeb7cc0-3c2a-4edf-a8cf-c7926dd65872\ne9a6397c-479f-42b4-b66a-ed7d9cd7e536\nb21b8042-4542-4d26-a3a1-fe94346a7078\n1155c937-30b3-496a-a3e1-23766570ee77\n213f1299-636a-4160-8fc5-1095cdfb16fc\n60a62ff1-19d3-45a8-b753-5cab42e7ffe0\n79dbb4cd-e6d2-4252-8b1c-858f7c2a5721\n7302c3c2-96d7-421d-863a-cd320939fae1\nfc6b76df-cf0e-4df9-bcbc-742b131776d7\n7a906b21-fe03-4cfa-885c-54f3f292013b\n22d5681f-1721-4b46-bc94-491b78cfbe0b\n93cc06f8-d5d3-4fe2-b4da-2b9e085ce355\na6c4b4a2-caac-44ec-9ab5-a42a55a540c9\n530b3b3a-466a-4016-91d6-abdc32a18ad5\n8e925e2d-25ce-48f3-ab97-5b0f2399b9cc\n8ca3df5f-7c55-43f5-bb1c-1407762705d1\n6bce9c81-4711-4f54-8632-ae1455ecd32c\n6ffde9b9-211d-4e82-a8d9-626e04945f35\n8a78ed67-c79d-459e-a107-d6f5644cce86\nf1ce137c-6283-4a14-bf9e-09c093b7ee60\nd76616ae-0b85-417c-9b04-b448500470bc\n627d4fab-25cc-43a2-81be-4b4e1c245a09\n3cf4258e-5cb2-4da2-a39e-ce603e7ff832\nad73a525-63a7-41aa-8feb-9bc059b4955b\na7ce35ba-25d4-4da8-8326-abab5790e00b\n09d72ac4-da05-4374-8b91-a197bd376f96\n47761a66-9077-4d86-a48b-0b5cd0d50696\na83c6086-ed4e-4cc6-a6cb-5fbd19c01828\n4f31ce59-fe32-4eb1-a638-4acb6e9b9614\n1abd8028-9e4d-4f1a-aeab-28d5583f3d31\nc34aa6a8-dd78-476e-b292-7e2a2ddc5b43\naff492ac-e760-4b84-87ec-57208182c870\n70bf2a41-a23b-41d5-84b6-4ee1390516aa\ne99376a0-8b24-439c-bb50-4c17f8c17170\n1be07306-8eee-4ea8-95f8-009cdc31e130\n361166c2-b883-48aa-98be-8110754e0508\n35d66463-6a49-47ab-ae01-5e04875b81e1\na2a154ef-c02b-4cea-892e-2805962cc58c\nc8183113-e1e0-43a1-a875-e405fd2c5262\n2991bbdd-97aa-456c-b774-2bdf61bd0b8d\n536e3665-4880-4bd2-b587-6b9ea410b49f\n94fd89da-92a0-4e80-b169-fe3c23317514\n2071c9a0-3a64-46db-8b15-c3201c69b7c4\n475b67ed-02fc-42df-8d89-431400491de8\nb55f4288-1d41-48c9-856f-adb0eaf08558\n24fb6396-f6e7-491b-b54a-700e7ee756d5\ncf56c127-c374-4f1c-8356-3f89fee1cbc9\nb153d1cd-d9d4-4363-ac00-6de58d2a2067\nb9999b56-9d97-4554-af7e-aad025d80358\n8b0fb563-7779-417c-9bb6-c3979632843d\nfa683744-7d10-4b65-9921-1034b92c4465\ncd7eccd6-6ecb-43d2-b0ac-715d0196e0f4\n853f18a1-f4b5-40cd-95f5-94d237c66b83\n9e853b7c-461e-4594-86c1-ff93231698d9\nf7ea63a5-1afc-406a-b0e2-8e894e7d1ec1\n0a8cf8a4-6d8b-4084-aa93-7f32c24d486e\n6b48aafa-bead-4c39-89e5-da526997085c\nb4e96343-4086-4220-9e30-16c24da53e97\naab5266a-c61c-405b-a4f6-2a11842e263f\n7d22c2de-a9ce-4d24-923c-dd8da236587f\n477c034b-ff5b-4ba2-b40a-fd009d1a936a\n03fb8d41-c1a3-4522-a950-2fc2abe1dc57\na38bf374-6040-457d-83ca-7c05d63f7dd7\n9296db86-334f-41d1-b4eb-0c8fde0c9724\n73a43091-8c48-4e75-b311-a293eb1c22b0\n4ab9176e-f0aa-4da9-b9de-6bbd58eb303a\nf7528912-1bc8-4f24-b3aa-ad93a7bf2b30\n1ea27abf-2b63-4f9e-bece-7f7b4b196a4c\n2252a6a3-3296-4ded-8dee-bbf2c97bf5c1\na00a6a89-df93-43b4-9965-364c182f4b26\nde820bb6-a61a-4846-8dc1-e5fb0af6ae81\n73ffded7-342a-40e3-b236-a993aeb2788c\nc36d9480-ba89-4936-a196-d6ba104ecd08\n3324da05-837d-4935-a48c-6681c3af1ac0\nf3c3e2fe-4f1d-4341-a318-fa0a10677769\nca7dd9c5-e8ad-4207-9fb7-6d217dafb0be\nc661c800-606e-4dad-bf8f-cec885a98b76\nfae29fe7-571e-4cd4-9703-735d05b9abe4\nf1ab06b2-32e8-4c5d-a64b-098bb4d4cf41\nde60af07-697f-4641-a376-12ac946c4e46\na20e62aa-83df-4f64-bd59-692246adba9f\n64709ac5-286a-44ad-9bdb-75d0466cc975\n2e467e75-e02d-4fc3-8d22-ef46d10aa4dd\n96f09ee9-46c0-4730-860f-a45a8c4f37cc\n215d6424-e6e3-48f8-b051-eca213903a68\neb75fb6c-77af-492c-b8d5-6a944006f8c6\n5236e6d6-203a-4b75-982f-9203ee4b99fa\nced8ae36-eb1f-424d-b8fa-9bd1724ba8db\n500b6a9a-9667-4198-99cc-8c8e19b594c9\n5f0b0ee2-e43b-4894-9e6d-0d44ce6aaeef\nc631efdc-d963-44e8-8bec-66d50a965279\nd12fbb1a-0504-4de1-b8a4-759713cd42e3\n66aa4b8b-98d6-4ad1-a410-b344dc8c2652\ncdd63d05-391b-4057-88b9-33853e1a21ac\nc5a9fde9-2a5f-4b2f-858c-fb185882525e\n99c7d751-edbc-459b-a3e8-667fc1c155d5\n0a3bc438-9efe-46a7-9add-09824dee224e\n62056486-20dd-4a21-bc76-13d7a052c370\n6299ce53-6c0f-4b69-91bd-4119cedd9ae1\nc5778590-e425-4730-a47d-5926cb920268\n2b8a8b31-f7ad-4295-ac47-c5609ab3fb3a\nfa4d0d05-0116-40bf-9449-b83d9fd99983\naa878195-ac48-4615-9f06-6cce95586850\n05224317-2b37-4b21-9538-c1f9c560bede\nad11c970-f62f-4950-992b-b66baa4b05b2\nf175756a-fc51-4464-a72e-a03e483f49ae\n06ed6ff2-4c71-4178-9afd-8b90e5c5c3e0\n647cbde9-2743-4337-959a-a130c14cf73e\ne99e176e-a2b3-4ca1-bd96-d4685ba339e1\n71bb2a8a-1de5-4b78-a096-f65ebb134569\n3e1f0292-c7cc-4312-9029-7d602ed3ad20\n34ce910b-0e42-41d6-9066-d81ccc02f4b1\n129ee756-6f30-4eae-bab7-82871c2f1129\n06ba2cb6-1193-41f0-8f27-8cb5d2af5cff\n412ff319-d561-4d3d-b058-e1f609c127f1\n01e420f0-0d54-4c1c-9962-bef6dc956a6d\n0ee5cb37-8864-4457-9147-8b1ce481234c\n99f608ff-ce8e-4627-9208-6799583cd6ea\n08a9513b-bdbf-43d9-ad25-6d4715a61fe8\n9ac2493d-1a6e-4133-a4a7-75822d7998d2\nd8a0b4b3-a746-4cda-a301-bcc1681e7187\n799afc93-b08d-4635-9434-6ea89cd61885\n630cae43-ca0e-4ad3-9346-45c711395fc3\n8796e1f6-00ff-45be-aa44-a2da251095a5\neead4325-203c-46d1-bdc3-262f6b073aef\n8db4fae5-f4ff-4a5d-be4e-a7a0428098c3\nac2612b4-4afa-47df-a015-482cc1ad76ae\nf5be0e4a-385e-4e0c-913e-9f56831b88b4\nec4c16f4-6b8e-4287-8ca2-87a57e33073d\n94818325-438c-4be3-9f8c-e8988654a2bc\n6ee24327-d27d-4626-ae36-228d2b68bdfa\nc0d1c43d-3fc0-4901-888b-945a00c77328\nff5022b0-318f-49d8-9e71-73817f6b7fee\na978e45e-da6e-4547-916d-1076969f1c23\n8ed1051f-a138-4437-8eee-0a74b6badb23\n53fbd742-ca7d-4fb9-92c7-7fd8d0245ff2\n1b25d792-9db9-4cf4-8b32-daf312c08112\n9498db12-35b6-40da-93c8-d0c74b7f7a14\n56d19499-0e88-41f7-80aa-e1edf05d46f8\n1c718eac-233c-41ed-80e1-3a5221c522da\nded97e2f-17ee-4aa3-a96b-04ebed828117\ne6c1b850-b166-424b-bc04-395772e7ae5e\nddac6b83-d2b5-473f-b4b1-b95e47a17c03\n3c450eb8-eada-4d8d-9976-cc3d4227d222\n4ae04dc4-fe3d-488b-833a-f2393eaafba2\ne0a89815-08c5-42a6-9fd6-a97ea82158f5\n03d94128-ec9a-4244-9b9e-aa0319bfc904\n61a626bc-8c65-45d3-bd22-d2cd3cc601fd\nf457a67e-2350-415b-a3e6-8cc4b33de526\n955657e4-3dd5-4df0-ab33-5f3e80ffb5e7\n2d819300-5566-4428-805b-8f1a12224659\n6a783f82-db6c-4ed0-a245-1932e2565c62\n38a75fd6-dc8c-46f5-a845-949c52af629a\nefa92e21-2c07-4731-959d-70166544f4c8\n2531b235-d53a-404c-813d-2bd4698fbb81\ndc5c858b-0ad2-47dc-9191-bbafe45e0464\n4f41fdec-82fc-4474-8706-a4fc70a61b13\n72100cc9-b788-49de-a644-12a98314f1f9\ne1040854-a213-449b-96a0-19b6386a5ba7\n5a3b63f5-3d9b-4d1a-ba83-cb6e43bc7757\n15f2db2c-7ff5-410a-8ab5-31f335231e0b\n68bb7be6-85b3-47db-9b83-fb717a9e6b34\n27e83494-c3ca-4377-98bf-20baf08a2233\n0a968d17-7317-41ae-bcab-7710745d6210\n4619b89e-1f20-498a-9811-0bf86c9acded\na6171630-8d36-4d78-9007-8fecfab903c2\nceaf3566-e9a8-44b4-836c-dfa56064d8c3\naf8558af-4a84-444d-8bb3-e60ac8a46da1\n301eaa6a-3999-4057-b918-7aa58ce9f618\n1a0fd98f-6841-4249-ae36-7ec3ef84ebbe\n02762754-56b9-4891-a2cd-d7d4b68c30b6\nbed2f46b-be50-46e4-b66f-2c3bdeb825f5\ndf195d76-f223-4377-8186-db98ebc8fe3b\n51fa0995-7985-4786-926f-759f12c9fc81\n677e5dfd-849b-4e09-a3e3-ed8c4b8ab186\nbd277195-a767-4522-8915-08b3e13335d5\nf79cee1a-3285-456e-80b3-ded3faa4665e\n89f8985e-1d59-4db7-a0d5-135496e8c43e\n64338666-8634-4050-90a1-ca22bbdefbbf\n9c072ec9-3543-417e-9a02-cd73ec21e819\n6b796bef-2c46-4540-a963-bda162ce5cea\nef08fedd-dcb3-40a6-accd-467adc569f65\n2776e698-f0f4-4cdb-8b72-41c857bae1bc\n1d617c61-601d-46e3-8d32-47a2d3ec33e3\n6f341f38-8872-403b-8aae-142276d5f574\n8e06bacd-149d-4a65-86c9-105a5f0f8628\nf178a563-72c4-4e65-af15-7e2b5966b06c\nee5e2861-0df6-43f3-9473-dfd0f88d2e05\n39ea519b-ef1e-4058-a9ea-d4fd376e7ce2\n7fa9f6c1-2a76-4937-8ef3-2c159c5d904d\nc9629d9c-c435-4d62-9b0f-9770862da79f\nbfbf7a2d-c5f2-43e9-9b4c-7c76819cc0b3\n1b5fba31-6f31-4145-9e6c-ef6171872277\nc4989a99-febb-40d8-ae22-b3b975cc1de3\nd3a70b45-49f3-475a-b032-99da8ac55469\n478cd554-8d16-4ef8-b9c6-7bedd3859e5b\n8fbef800-1900-41cf-8c40-5980a4dbf6c9\nae03c5d5-b85d-482a-b152-624b14ee4c24\n636bda31-3756-498c-83d3-e2169ff8c455\n90425be8-a3f3-4d01-9709-f543d9227455\na64fcfdb-decf-4e08-9968-4bf80e8cb230\nba4cd397-ee3b-494e-821b-267c0934ea4c\n6fb3d16e-f57e-4381-80aa-92b85a2a6b9e\n0b8c3551-04f3-4f5c-bef2-f855ef0e4658\ned654f8d-7886-489a-a49b-bb74b3ddc64c\n651dc7c0-05c0-4c95-82cb-448d7cc6f475\n5ca3c914-b6f5-4325-86f5-62710b5da66a\nd7014de4-b25a-4ed0-8bf8-423762509105\ne3ab502f-bc2f-4c00-a818-3509a2ded274\n08996d8c-63cb-421b-b405-37056319c593\n2f30d421-da4a-4df1-a2b1-cc5b65cd2b98\n10d12f72-9dde-4945-bc41-a6abb3f151ef\n530c63bc-d706-49c3-acf8-6327e305c1e8\ne10ffa95-1171-4a01-923c-3109382504c4\nd437812d-5ee3-410f-a03e-0c8640a22aec\n09c6955f-22d4-4589-a6e0-85e4c879c4ca\nbb8cde2d-f3dd-4570-8df2-ba417b8330bb\nccc50b4f-7822-4610-a6c6-34d2a45aa4e4\n19629c1f-5c28-4e72-9fca-85093f63733f\n7377293c-9127-434a-a701-b3f8f6fdb68f\n3264ad85-3525-4e19-bb68-fea837267869\n65020884-4134-487e-adc5-0b63d255d5e4\n0913c1b5-f7d8-42d8-94e3-8d66fc390a1d\n4056a2fd-43cd-4594-b82b-42142b98a9d4\n827e24ff-2210-491a-ac08-8fb6d963474c\n6a9ab667-b99a-43cb-b35f-f2a6befc01b7\n1865c4ed-89c5-49a1-9adc-eb4e6184353b\n544e107b-be20-4e5e-b4f6-6c5c36612031\n74b85a3e-29e2-4610-b170-b4e6644ce973\nac8918fb-7bb2-4dc8-aa55-ba4eeaeabdab\n6d9e2bdd-847a-478f-823d-e3208ecb7ee3\nc5f6c1f9-1034-40b9-a74f-7ddcc38dfdf2\n1070fda4-2802-424a-bb56-98b32a424be3\n4c79509b-d297-4336-b9c4-81d128ef4c98\n189c00e1-1b59-4d58-96b8-21ebcd38a6a1\nb6d5e406-9165-4e03-bf35-2db5471986b8\n5cb320b0-c4b6-412c-a854-a15062767a3f\n09292e9d-ea1c-45ae-993b-67ec58649ed6\nd2e30cdd-1626-40b5-ad41-a76fdf923aa6\n5eb09918-4369-4399-b480-b9112c031817\nd70146cb-74f3-4b01-85d1-f3b4fd630091\na52d47a1-397b-46be-8bec-e647200f70e8\n284f1348-8fc1-4c80-8504-e95e648a1980\n3cf25286-fad1-4e31-8b50-fab31f199456\n27b1a37e-eb2a-432e-adee-97bd6b4854c7\n80bb1f1d-0976-4f20-aba4-d33bc9b7a088\n859fccb9-6c73-46d0-826b-ab82e945d8d3\n280c146b-d650-4cc2-a9e2-49055663860b\n302ef2f0-4549-48bd-b641-d30c41fd7257\n575d6ef9-c352-452c-8f0f-86f6ff81864f\n6625227b-bc36-42d4-adca-96292535920b\n975aac94-3bb1-4273-8b58-74c17096e715\n68a7db94-a00f-4fdf-b50d-f4213df3e449\n6fa88cfd-a8f0-455b-9181-5846c9950d07\n404231dd-0f96-4ac6-bf9a-8ab6a0f6418c\nb0cba876-7d19-4595-aef6-c3ac67752ac2\n1d3d46b5-5e55-414e-9a97-8a1123c80aa1\n76647d05-5c0b-42eb-870b-131cf1f77c26\naaec6d6e-70f9-4f96-9671-0e8f3d7386c9\n7bdfebdc-5a5a-436c-9a64-e59c72f5e238\nfc6c89b2-7d8c-48cf-813d-5eefe8102064\n7e3510fb-1322-4614-a693-8e3f9382c05d\n79ea41f0-ac56-4562-960b-7a32932e03bd\n20e091f1-cfee-4e01-8cf7-1adb3631c55f\n9cb9bf92-1749-4228-bdfe-a512b08c2b54\nad48ffa7-45bf-4af9-b578-b6092d77913b\n77ed4d90-5784-4f1c-9722-dbfe12b81c33\n28a8a223-5ffb-4e63-b9e5-7ca4146e6b53\ne60dc619-3ad5-4674-9901-1f04c1c079f7\n88b555e0-03c2-4453-81f3-0059e6ea8d01\nbad17d3f-5a41-40d8-87c6-7d644cb43338\n37275fb2-88d5-46c7-a036-65781a66e152\nb38614af-a5a1-4dd0-a171-8411e793e30d\n4d045d08-5c3c-4330-9f71-249cb7780a46\n565df300-cd42-4097-ad9e-875843f7527d\nd487abe7-c090-43aa-9004-713abaca6d6c\n2bede3c6-b6d2-4dee-a3f7-3248b58102d9\nc3753207-3b65-4b7b-ad55-050b7abcab0d\nf55b23fc-7a2c-4aaf-a508-8393319dbb6b\n1a59adf0-874d-489e-a39c-edc4448dbcd1\n461c536a-9e3d-438b-b902-a05c037670d8\n2926d055-fa9b-4552-a5b5-c42959f5e369\ndc382b16-0d38-4b97-a3f0-51baf2db4c6d\n6f30288e-e43c-489e-a2c8-76ec3f390183\n56370775-6214-4e5c-83b5-63bed084720e\nb2daf69a-baf2-404e-9e11-4c929d4b4388\n728531bf-7751-482d-9d66-0a21e30f850f\n8c0288f2-e75c-40fc-ac8e-fda016839b23\n1619a8c3-32dd-42b2-b224-989322749bf0\ne924ad9e-0f78-487d-9881-3c0ba3dcf2da\n293c844d-230a-4b6e-896c-2b5cbf59e2fd\n0c2258a8-2eee-4b1f-b352-54384af6ec8a\n96c9c663-2c90-4ba1-b232-dcf7d32b1e17\nff9d200f-0d46-4941-94ee-fd9b4fd8db7f\nff01e974-4210-4508-b05a-b2cc25f9ae15\n70fa542e-0c0a-42ad-8cc3-b92609d15dc5\n25843e43-4323-4855-a9e8-cc3baf360a42\n8802d786-5f2b-428c-b35e-cf311f4a6e78\nada34f6f-5ca0-4aae-ab1f-b44e99ada66a\n3326d4fb-3820-4f3a-9f88-c8c31c3ab4c7\n253e5f29-05f3-44d8-a38a-190312300a7e\n080bdd52-2275-4379-8aaa-fe1ee263f031\n7a096317-3458-4bee-be1d-da122a5ae38e\n1ff896a7-b5c9-494f-ab6a-a6cbe1f1cd3e\n6e560388-7bfe-4d26-b231-ead27b10d206\nc0dbfd03-de1d-40ab-b364-1f35bf442564\n8b0f0991-2521-4864-8b36-22d5e955c1e8\nf9545d7a-8918-4068-9c16-915fb1a68991\n511942cb-f999-4d71-b956-a41020f52157\n23d52dec-2461-4843-b629-00484649b2de\n58a8b03e-c1d2-4921-91b0-482bb9c9bbf4\n44471f52-75da-4c5c-b9e2-265cb2853e09\n1ae7ed3d-7e1b-4290-9e37-bc8056533ffb\ned12d5aa-db9c-4341-ae87-708ecc2d33d8\n46c33532-1b3b-4dd1-9d67-66a702cb3b45\nd230bda3-a693-47db-ac7f-d5cfa77353d3\n2485cff4-bab1-4f37-8b7d-c5fd3184e858\na76a2a86-3a05-4dc4-a653-0f94b2689ef0\ncabf24ba-7b4d-436f-92e1-3c58f601f6ac\n1bf3b141-055f-4a69-8979-4f00e23b526d\n00296c8b-321b-4592-9354-85c76f8c9c3f\na2c5f6c8-0d3c-48c1-afd4-275e9051d51c\ne1f6e4c4-38ac-451a-8a5b-ee4aa51e4b79\nd3aecef1-dc52-40c9-ac2f-e80ffa28c82b\nd61b6812-3911-4494-92c7-63045454af60\n630c508e-edc0-4053-a75c-14a7ecd18b74\n8a0478b3-e639-4bc0-b41c-a9301670502c\n1bb74e57-5c14-4710-88ac-b57581b5684c\n613fd7a5-f21e-4ef6-81ec-4ab36a8994cd\n4d613aab-513e-4cfc-aa05-f1e1ebd3f2ae\nf1f9af4c-e51f-475a-8d65-43a59f315d31\n204388ff-74a5-4ef0-9bc0-56a1883dcf1c\ncfb88280-ff7e-4398-a648-b1aad36534be\n1a0491ce-030d-4b3b-86fe-6e7b4d029cce\n6b527da3-10ce-42e3-8793-22e11d3cad17\n852554c5-aeaa-42b5-8586-50bf6758a482\n7997f57d-fa23-476a-ab56-3eb0ea1e779a\naa0a6541-29a0-4cd6-93f1-406c2f04e0fa\n0a32bcf6-eead-4293-b280-725a38fcae7c\nd4488efe-8a72-4220-8035-15db11631d62\nab577639-058e-44f9-99f2-0bbb972c04cb\nf0ecd76e-5aff-4c89-80f6-ef48b9929f3c\n7fbe50ee-25ca-44e4-8f23-55247de90f0c\n7526f16e-bb55-41fa-8244-553a980a44de\n238aa603-8841-403f-8f5d-a9188a56da2f\n0cc8a0d6-954e-4ee0-87f0-7e9368431b95\n9693e147-122a-4859-83f5-3f4d21515626\n4f1ab660-4387-481f-a917-18851454951c\n2a90c86f-2344-4edf-b087-50e68e80c067\nb18033e3-c8fd-43e4-8ded-b11b14c0adec\n511b3971-f430-431e-b167-e3f658d8b8e5\n10ca1273-a266-4995-92d1-7f01c4d963c7\n4b4853e3-e4f9-4c94-a0ae-c3d3cbcef006\n87779ca0-0bd0-48b0-8547-ca863120806d\nd6ab88d6-74fa-48cd-96d2-0dd73c61cece\n18f7f67e-d84a-4cee-ac52-7b36b2fb71a1\n4e38299d-11b6-434c-ad81-2e6a4ea0ccf4\n4695a33c-16ca-4252-aa94-4ce4e32158a2\n61f2e9dd-4b03-4c1d-8839-233c370a8ac7\n2d37057b-0b5a-4050-a0b0-19a9aa9efd80\nc7b585f3-1e4c-442b-a2c6-4ffeb94ec9d5\na91b8390-ec6d-49bd-9097-36a6daca2752\nda23b05d-03ef-493c-ad04-5f6ddad7b9e1\n098d69cc-4bc4-48f4-8e1c-0c51ab3e2d96\n51133a49-11bd-4d30-a920-40d73f9245ad\n027709de-7f4e-4c5f-a8ba-641e0ef385a7\nf8f9ea74-e764-403c-8d95-39d8eb49e37c\n57ee5bb2-35fe-4bc8-9108-f2e9a9413a66\nd8f31523-3361-4604-898a-c0ec04621555\nf94cbc19-bd62-450a-bbca-9939a0ad6166\ne1e89ef0-b54c-4d30-b77f-07185ff473f2\n3e55e643-b83a-4da4-a12f-e0a0220bcc12\n4fc6cbda-5882-430f-8cf3-cc174e548fc2\n4ec2fc48-0ad5-4c0d-a02e-90aa2dec6f10\ncffa41d9-6814-4096-904d-8be562250773\n98ca3134-880c-48c7-87b9-e1fdd26e1619\nb848ebd8-edb8-49aa-b724-d92d9eecd1df\n84d00839-310e-4be4-a228-3fd10d719d37\n3687aa07-d02f-4a54-9b2b-bbc2b9a7b1a7\ndd905f00-319f-456d-8d75-3f7766d572dc\nba5b53f3-40f6-439a-af82-e641431f20ac\nf8f27c77-5bd3-4433-ba7b-a96dd709f16b\n2606010e-05ff-432e-839c-c85952eb5cdc\n109fc62c-b0e1-4431-8130-cbd268fb6744\nd9261d3e-573b-4484-9920-8a3ea0d850c5\n90e97949-0cd9-4877-b9f0-5796c67cae3d\nd4bef523-a311-4dd0-aba4-5286e41f525a\nfc7569ae-5813-4956-bde0-e4c9a765776a\ncce6cb0e-d8d8-4fc6-9d93-bc2df79b3767\n13553ebb-0682-4f09-9ada-c7ee79908918\nc0b363c5-3dc0-4ab9-9eea-81dea415be69\n6fb9e04b-1aee-4a1b-b6d9-c416587cedab\ne885fd80-136b-4a64-8894-369af46d7502\n950d8951-3bed-4c69-bc0e-841152c62de8\nb575c91a-9da6-4289-b81c-5d125e463472\n5e855210-84a9-4324-b42b-4308cd68ad03\n049cda10-82e9-4655-97c4-9a133614435d\n9bd28d72-8bdd-46af-9614-0751f78563e5\na404df83-5753-47b2-9223-33ba83687ba9\n00bde599-2f29-4097-a1fb-c3b3f77e322b\n2b3a2793-9451-40c9-8fc6-97b078252ad4\n3ca4103c-601c-43d3-9b3d-6f84bbfba85a\nbffc8cbb-8109-47cd-8cfd-021b57d0f1f1\n3a2a212d-5e75-4b3f-9906-3f52ef8cf7e6\ncc9c92c0-e663-432b-a469-7232a3cabdbd\nfb524795-2848-4e83-a402-e5784d1aa926\nbf6daf6c-6805-4cd8-a0f0-1df69c1f7a43\n9aea44cf-548f-444f-866e-32a5175e28f9\n7b68319a-b813-4084-91bc-7346cfdc54ee\n5d516759-aea6-480d-8187-f4ef772e4883\n1527f446-7c96-40f3-90e0-e33a37823b94\n9696655e-091f-44bf-ae81-fde925a80ca6\nd3444ff0-21d9-428c-8b9b-bf3964cc1a42\n3e368eda-9421-47de-bf2a-8ead0224a0e8\n16aed8c3-f711-450d-afd3-ef37b716f659\n0d2c0679-e7b9-44eb-969f-cee81d978e11\nb8aa7ee4-144c-4e1b-b6e5-4d1fbc96ce3c\n6551c8a9-33d2-4bbd-8bc2-892345436d5b\nb170c6ab-0d64-4145-96c3-7dccc7d11197\nab4041eb-6f38-4b32-8557-9f48d8cc3768\n46223abf-a93e-4208-8838-c58c5d881806\n3b7cc9ae-d5d8-4f6c-b7b8-b6f8ae72f261\n950a39dd-0b48-46aa-8a16-243b7aaa2bbb\n7f9e4048-7c2f-455b-ad3c-8043e9c95c89\n84504b61-c4be-4575-9928-9e4b26a611a2\n8a781818-bfbe-4fbe-b5db-3ca607882bd5\n84a70957-8fca-4f12-ad26-a72c9d19d44b\n88b17a12-2a05-4844-b133-f540908daab9\n8175a09f-edc7-4324-a0a9-f42f5fa7b72d\n7c30b2df-f21a-464a-bf42-23e09370b9b6\n6099aa92-5722-4213-b1d2-835851b73caa\n8f6749a3-7845-47e7-815d-c4ba10ff5921\n85481ad6-98ee-4dfa-bd33-6123d7701295\nc96e21c0-229f-40e3-b3ea-ed7dbde9cead\n5f0c8260-c9d4-4f4c-a8a7-327a794cd5a0\n2f0862d0-83fd-46f0-ba53-15f50c058905\nfd05831b-dcd5-4cf8-b793-d522186e5970\nc72d9a57-dc6e-461f-8b12-d56b4ad6ae1e\n502db21e-d66c-4695-b1dc-724b72a02225\n9d58e561-760a-485d-81d5-6a51a56e9820\n5938c0f0-3e99-403e-8e2f-eba0adf18adf\n1a251005-559e-4123-9fd6-b4dc226b76fa\n00641301-d1af-4ef9-a52b-48ddce23afbe\na604fba4-c4c6-43ee-8287-5294f1fbe7d8\n4ed9ba95-cf02-42eb-87e6-8ea469cdf73d\n4316a7ab-db3f-447b-854d-04feba79ec24\nc22cf58b-23e4-4724-b370-635053e433c3\nbdc44d78-d6f4-4d21-849a-71f063a71160\n4cfdf89c-fc81-445d-8854-092286b02e76\n38336bfb-0cf2-4c6c-a2cb-2b4c34bcee28\ncd187b0e-574b-4f34-ab1e-26450995623c\ne7bf3344-f48b-4a6b-a507-e08efc8eae80\n03fae1cb-58f5-4285-b31b-3b792866e25c\n5de3cbcd-1aa2-4c6a-8489-58736dabb5ec\n1edf5c42-74ad-44c4-a95f-d6ae390a36ad\n80b83ccd-5954-40f3-bf48-0b0b4e5232f7\nbecba671-dd32-42e0-baa8-95f7d64bf3e1\n315d973a-fcc3-4253-997b-923258db992d\n3316a131-1088-4e50-9de9-471f6bdf4b9a\n4f6abdf5-fa61-480b-9635-0f163b7de191\n9c611e3f-d6ca-4b58-ac6a-adf471108993\n54e61448-bd25-4256-8445-27008af15f10\nc01e6217-5369-4c2f-b59f-ce455f3f16a5\n17fe8f79-f855-4bf4-a6ab-ca69573422e2\n65a25d4f-8f05-4b22-866b-b47416e1927d\n82e81020-4007-429c-923f-6dada3c9da44\n42d5e39b-66c5-4cf4-9fb3-76fb041704ed\na9772b27-d145-4df6-a54b-7f34e4099de7\nc88718c5-acfd-459f-a8b0-bf01de88612d\n3f9b6bdf-2331-4e66-8fe3-731e3e7f99c5\n182b62b9-6426-4e1a-85ef-59b9dd403b05\nb4acccbc-1133-4970-8414-933ecd0112ea\n3091cd9d-1579-48e1-89b6-5b51e295892d\n6f2abd28-d263-425f-a34c-ab307bc01615\n6e8e910d-63e1-4091-a517-ecf88a600df0\n9be02886-4ab6-402b-92ab-e6090717a1b7\n073d27ae-068c-498f-8759-d0daae18e0fc\n1532d3ba-b555-40e9-9b96-2af0fc14f056\n2043abd4-094c-4083-85f4-9cf7514f203b\n6ed8c9ea-5dce-4816-a0c3-d0c17d27e410\n889bd255-47cd-4aed-82a4-1df35644d13b\n09540b20-26c6-44e5-812a-fe9dcfd74f33\nc48ae048-9cf8-476d-808d-85573617f21a\nfd550bae-ea71-413d-99b7-17bb3e19ae2b\nc055f7c9-a48b-462c-a66d-3073468d93b6\n3d60db7a-2af9-4bd3-8fef-cb186e52a96b\n96218b62-e221-4ac2-9b94-537ea92d112e\ne4ef91b7-9739-435c-b62d-90088fb962e0\n683086fb-bee2-45b1-ba92-809889336bfd\n972f7233-e7bd-41b1-bfba-ef60e7837b0e\nce293768-23ea-4c37-8b29-82b9b5253f70\n9836b74d-c3b2-45f6-9438-27628a6ea22b\n8c5d0f2e-bc6a-48da-8350-e9123089c9d9\nafc45e75-146b-42e2-92ec-2f1677bb0867\n21cf6ede-4c2d-473a-a881-2ff012435d98\n6e02162f-1dae-40ba-816a-1b607218c05c\nf38693fc-a132-4d12-bad5-31ab4252eb2b\n7257aac2-c79b-4c0a-a591-a9923211acc5\nc45338be-ef0d-461b-be78-072abe6d84b2\nade94803-fdf2-4884-871c-2c31b7842393\na9798eb5-c19c-44e5-a63f-86a62feed0ab\nbb76764a-2def-436a-b9e6-3d3c13d87a67\n43d9d733-522c-4ded-8524-44df26033341\ne1ffaa1a-eccf-4f43-bb70-4f9175fbb323\nd5b5216c-5c61-412f-994b-ce0a17d14593\nad7489fe-a893-41de-9d9d-f443deb91e23\n223ec0bf-f35d-467d-9bd9-2b4e06ba3172\na75f838d-68c1-4cc0-b610-de53d5cfca3d\n21593c37-a457-4ec1-9cae-7b66f12bb44f\n64aba73a-60be-4b2e-a225-9234b674baea\n72772789-6b83-4a9a-b8a2-66995003643f\n2f502850-2e5b-41da-bf7b-eb0605ed379b\n69f96724-720c-43e6-904f-52d3128e17af\n67a32f25-5cc6-497c-a566-67716e5c663b\n3bbc6cff-bc1b-4f70-a2df-b55eb1764a7c\ned1437df-5e36-4a3f-94f3-32eaabd1c90b\n26333bb4-38ec-49c4-9cac-6854e61ef4f6\n8964c73f-a098-479f-a864-fdb7268f335a\n91de0970-fadb-465c-87b2-25cfaef718e8\nd2606f32-6657-452e-8af5-93786759c0c0\nb326ae5b-5b33-4ce8-974b-fa81ccec4503\n6e3c0b1d-6de3-4ae5-8eb8-a355d43d6a4f\n9b68a163-b4cc-4644-96b0-ccc1f94d3374\ne96ca0a4-0483-4c29-9fe7-2513c1c7aef9\n3f4d65ca-c976-4292-af6d-7b794e02f3a3\nd3e7258f-48ad-4288-b308-c9c824559de7\n0449336f-7e9f-4abd-940c-9a9e5bdcee26\na52d2dd1-310e-4235-ab9d-b508535ed023\n16b777a6-1006-4599-b6ca-9dd150a76a34\n1e39e44e-124f-43ec-b031-586a5506cbc5\n51c8d29a-9165-4b5b-b66a-7bd777f70a96\n1a313a64-575b-4d98-aa07-8fd496d1ec42\nba40b1eb-9713-4cbb-8d67-ec1612290b30\n19d2e16b-e243-4ad8-9f06-967e4dae23c7\nd38a1a2d-4286-493a-b09c-a0f5cc1d0739\nede48a8f-f417-4a36-a724-ccd47b91fdbb\n7d392c7e-8a3d-490d-aff6-a098db0ef0bb\neddb8d28-f60c-4241-97cc-ac6084db1ab1\naba31952-bc6c-484d-9cd3-fe4621e05c5b\nf2cfe6b7-8840-44e6-8f80-6cc46c4566af\n835ed062-7d4a-47a7-acf2-57e4717ed169\n3035b4cb-43df-49cf-b3a3-a35018ede2e5\nc9829fa8-1ab7-4186-bfb3-9664712a3ca8\n169e37ad-5659-4c19-b320-c8f3da472f1f\n0e440d60-e611-4fab-8f79-46741af967d5\n54a59385-dabd-46b1-b8e5-8e66324cce79\n13900a00-b890-4174-b904-419e06864455\nf8f04d9f-6e7a-41a1-83f6-e3f3dfb9c117\n641a2feb-db4d-43ab-b36c-9da0850b37e2\n3d33b648-def4-4552-86fe-34125c876a7b\n0ce73d99-53e3-49ff-b343-b01871dec6db\n0609f7c7-796d-4c60-8942-d2cd2ec5a421\ne38d2f15-3ff8-4cf9-ad5f-0c054beb6dc5\n319ee66a-ef16-4d90-aefe-0544fcabcd87\n5058254b-52f0-48ba-8420-79960b4b3b3c\ncccda584-f242-4d69-ba62-24b7b4117ec1\n060fb7dc-0e3b-4c05-b3aa-53634b6b661e\nf51b9dff-994c-4c5a-af4e-daebae9e4a42\n961db2b6-9ed6-47ec-b9f9-d783efca8962\n35ea60ca-889f-4211-a9c3-31e56404fb81\n2dd43486-f377-4dcb-b726-b472089637b4\n0ffeeb44-454c-4bb7-9a2f-aa9c2fb19a99\n92e8ffdf-1ef1-4470-9ce8-226309d7c456\n1a16a564-2c80-4ed7-b390-6c3d9f886fee\na22bbb87-a712-4e71-8cee-ad6c127c89a7\n2c93ab5a-51b4-4fa1-9d79-8ee203b556e0\n80dbfa5e-81d5-4c61-ad77-01658166ebd1\ncc7d9780-cefe-40ae-97b1-0f2b03713941\n9e05a7a9-0d6a-4a81-8779-c20994abdfee\n88102276-d62d-4db7-9126-b868f209d8a0\n943f02c0-9591-4973-9311-e53ab14e9767\nbe2ffd11-f176-48ed-8990-55259d9eef0d\n9f2fb689-f71c-4ee6-a11c-d9d4bd93f34d\n0c277e1a-bb66-4693-b5d0-8426cd113f49\nab5b8a85-7210-4b26-8a83-ebb2a2d52d6c\ncd2c42a8-a656-45f3-99fa-0fde682ab943\n806d2a25-5da6-4c5e-8c49-a282d10543f6\n36be3f99-286f-452b-9f7a-df72e812b7a5\n4e717b6d-48b0-4e41-b54d-e927ba39153c\ncc13e64d-424e-4fbf-b0fb-20d5d36d568b\neb58ae33-b474-4af4-859f-339c44f2f034\nee84beff-5235-4fe1-b827-c5ea3219a5ea\n2fa2bcf0-7146-4aeb-82eb-f6abfd94f616\nf04b30bc-8cfb-4f88-b5cc-5228465ff7c7\n431b62ea-8416-42f5-b071-678ab9794c6c\nde913361-6696-45f2-b3e6-8d2490914e72\n262cd416-3dd7-472d-afc7-4b2840b27464\ne2524c7d-376b-40c6-aa52-2e2a6fbcbce2\n5de9b26c-051f-4a05-916c-951490a37ec3\nb7553698-2542-4c67-b7cf-869955792bad\nfcc8a92e-e5f8-42f7-a047-4b4fcf3543c1\ncd20540b-5e2c-439b-9c9a-3aa2c0ea8fbf\ne68843c8-31d4-473a-b001-19bc31b0de1c\n54850900-d9ce-4def-a19a-8adccb238614\n8e960c76-9dd8-4096-a73b-4284bba01358\n45882c71-86f9-4c41-9387-5d92241be0a3\na77705b3-2d06-4a6a-b9c8-4520a67f1a8b\n4700a426-a4ba-4860-9f29-8e6b440bcf7e\n3047ea23-9af8-4575-9d89-f3b935f2338b\n1e5eee8c-8c31-49c1-beb1-44504dc71331\n83a12dca-1e24-4d39-8e2c-7fafb289728f\n74bffdbe-1947-4469-a489-fd7549401e9f\nff75409e-e84f-46f0-9d37-6b3013aa8a7d\n5a601673-1f0e-4de9-8d09-49d58101806e\nb771da8e-c925-4a67-a309-86fb6e955105\n560dcb41-6616-4f96-b66b-9b081f29204e\n547c77f3-5b58-4403-8a25-df73ddf68dcd\ne2ef16f7-9844-4176-a427-4e79da51e091\n94719fb7-1ce3-4601-b5d0-0ad8a46fb6ee\n0c40fdab-7fd2-44b6-a2dc-ed3d2e70a568\nb0258fbf-ac25-48bc-9818-57336128ce8b\n98c11d3e-1ef4-489b-9716-676640076390\nc0d2e1b8-4885-452a-835f-5363ce18c9bf\n4725b38f-9741-4a6e-ad6a-76aa3b95ea2c\n99485bd5-e095-41f2-add5-4bce71e798c2\n30fae0ff-0bbf-4ef7-aaa1-5a0e4a5b71b2\na103b543-82ca-41c4-85cf-376e7461bb36\n0820991b-234b-4618-9251-7512907dd3ae\n2d692f34-0372-4e59-ae23-402776b497c6\n8d511267-3da8-45ad-89a7-770c1e886771\nb76eaa9b-bdc9-4179-801e-b354aadba176\nd4c909cd-a354-4f23-b109-6ea11f5e4be2\n41c9085d-7d45-45e8-8a63-692b4ceec8da\nb9d46638-2611-4241-9f6f-7c7f975cbc46\n5d932989-687f-483e-b92e-a59d39e3d063\n9c35122c-eafe-4d72-88b4-517747da6d01\n2b1b61c8-1a18-4ae0-9cbf-98ace37ccdaa\na884791e-cf0f-45e1-a57d-39fc13aa047a\neb3a904a-9016-4c2f-a960-e465f080f2a4\n4968c265-b95d-428a-819e-828cb9fe81d5\n9047f76d-f6e9-44b3-9301-d760902f2b13\n589c8c98-3e23-480a-bed0-d5bedb4133f8\n618533ec-49fd-43e7-bfbc-9e70a7fd45ab\n4166a04a-c93b-47ae-b71c-131f0322c3a1\n955b1d1d-2a2a-440e-ad33-78b317dd5841\n810943e4-9e94-4adf-9771-2e0a08a5704e\nae24cbd8-3f9b-47f0-ad53-4cb5515b2046\n19746a29-00c8-435d-9bae-415ee6c3870c\nb56c15b0-c8b6-42dc-9eac-666dee6a5018\n5246b59a-4e5e-47b8-a692-e017b903326f\nd9e2f579-4077-4dba-9724-6e5dc1944d52\n4650172e-a005-45e3-9390-05e0e0e14bed\n5cf8caed-3c16-400f-8a79-39d9d203fcd3\n6535f7a0-6888-4d6d-bcdf-fa71ba6b516e\n908adb1b-58fb-41dc-830a-3998d496bb50\nce8884b5-b728-43eb-bf00-a2362c1dfa5d\n893f284d-29d9-4077-bb61-922b15fd02e8\n7cc613a2-922c-4040-be04-a4f3a99e1636\n351be9ac-c9ce-4425-96f4-6ad652c3f5a7\nf8743896-63b0-4d3c-bd2c-6d1e64a3a8e5\ncbe5c716-e576-4ee2-9894-7c03111bcdc8\neb839593-c109-4098-b9a2-1dde184b906c\n83dac274-efbc-4b41-9e37-13e011b5a73d\nb41c683f-70e1-4edc-ae0b-fd67ac78499d\n8ac994b3-d2ae-4007-a87e-5b43f6d86147\nf48ef47d-f807-4fc8-b96b-d11338ddb65f\nf493abbe-cec7-4f94-81ff-00aff2d08356\n936043be-ca05-4f19-8e5d-11f7a7ef306f\n513fafd9-ddc7-41da-a6b2-16befeb87256\n7f67c9be-efe0-486c-9931-4718aec02a70\n5a5e63a7-8c4c-4289-81ed-d9025b0ecb59\n3f08863f-25ed-4c06-84cf-8ac797f8da5c\n4d209e40-a4bc-4df8-bf45-9dda5f4e5c31\n1decf288-9e39-47d8-ae6e-9c98a662ff82\neaf100f5-f0ef-441b-a6d7-ae9add7918c9\ne8ed1268-8efe-45eb-8b46-ec76d7454040\n0b75be25-4cdb-493f-879e-cff49a119c5a\n74613c0f-18c6-497e-bcb0-be4223af2cc8\nb6a21ecf-82eb-4fad-95da-7be088928e78\n51905fd7-b325-4087-b1d6-ed9294aa2c27\nbe8d6eb5-8aa5-4978-8e18-35c6b9315c66\n8ddc82e5-ab74-454c-87ff-42f54bd15c80\n4fad3346-3666-4ccb-a91f-53bb092417f8\n1ffb4bcd-07db-481a-9bd9-25053633d78e\nd67d302a-09a4-4f5a-ab37-086c72d84a8a\ne9116a83-124a-4308-8391-3e37be2a02b3\n0715ffd8-e9b1-43a9-8248-4e105dbd54e4\n41e8bba3-d972-4961-a826-9feac8b23064\n90312c29-242e-45a3-b6f5-bc4f81a883ee\n7f39fe3b-7d36-4569-a449-1baed8340313\nf8d33b2d-d7f6-4311-b6c3-885d47afeabd\n431bda1e-69e4-4488-b9eb-27cd92f089c5\n77e27b6e-7ebd-414a-9ff9-cad352e5022f\n8c9a0c35-3466-42b4-8ebc-dc3e6a2b891f\n148a989b-dc7c-494a-a9d1-c25898d0006c\n01fd6475-9f85-4b88-8365-22f3c1de55ab\nfa6dbf13-f46b-4d0f-bd75-50e6fbe643e8\n65939007-e27d-4315-bd28-103d1a7dc7cf\n732f4da9-368d-47ac-b49e-d304235b71bc\nd3200fc2-a0db-407a-8a07-ac0a853902ed\n67baf9e6-3f32-4a6c-bba7-c9be6b8f4755\n4e896ca4-d53c-45c4-8563-6ef3716ecbfe\ne2645f71-6a27-45b3-89d1-33bc482b56a8\n36e97efa-8dc0-4465-9d2b-03601924a7aa\n7158e9fc-dbbf-40f3-9819-f6e07b4b83b8\n30a649bb-5b22-4038-93f9-ed41c0b118df\n14d33373-6057-4dcc-96c2-87420bd09edb\n1a68bfe2-2727-40b8-bb21-974ceb83aa83\n6534f778-5ef0-46a2-a8a3-eb85f6c8a100\n86631880-bdab-4334-92a7-ec3437c76e2a\n89f3c278-ca95-45ac-ab8c-88d299448cf9\n21fe88ff-b006-48e8-b88f-47f0720987f3\naf08acc6-d0de-4fb5-bf05-fabef58c63e9\nf9bb6ec3-f816-4970-8e8e-ffec92ecf9eb\ndf552f61-6a04-45e9-9270-6b99607ccd73\n557c2822-e79d-4c69-a7cd-fad1503fef71\nbfef97e5-0a73-4a21-a14b-ac5dd8fb5f4b\nc2dc5316-94c5-4a82-9eb0-b3ad6dcd2d3a\nb21b6c8e-23c9-4b93-a669-cf2de8c196e0\n9117aa21-b6a0-4e94-a67c-4eda4e137528\n46a4df87-4725-4c23-9d6e-d29f9268aa41\n60f02ba7-2f01-40ee-8d91-8be5eb2bfd56\ndc211e4b-20a8-4b74-ac37-3333b4f125d9\nec2cf256-17ac-42c4-81b1-34d82d76d424\n527b07a9-4f3b-4cc3-99fb-3375a563ecce\nee8c9d6b-e3b4-4456-a333-ea650e5e0cad\na5d46d42-71a7-4b33-ab28-49fd803e1307\n40a8cad8-b0cd-4df6-87f6-426987cf2faf\ne2ccae4f-7107-46ac-8d95-73ca8f236842\n5c5af3b9-9058-49ba-8a6f-8c8460c95b5c\nc9d5891e-e560-459b-85da-8bc63df26740\n16f9f9f0-437e-4648-a8b0-7b20b119f0ba\nead3ffc4-914d-40ee-8370-2afd5b96c56e\n3f76e798-791f-425f-84bd-4a07279dda25\n9c950d53-135d-4f99-93c7-ec0550a40b70\n90051bbb-7339-4ade-8c52-0e31a2b71692\n42dd9985-1b22-43c2-b180-e3771e403618\n1020da3e-cfe7-450b-a632-8c39bbf59ed9\n69999d63-43f3-4424-a1af-e0adb3ffc907\n5d4b1705-e8d8-45a6-9e77-46440c459c12\ncbf923f2-ca03-4dd5-b4a5-913fea62b24f\n8193c2eb-9110-427c-8e3e-6a48a5685346\na99d2cd7-4a7d-4186-abd1-480009cfc223\n21d47319-85fd-48c5-b0ea-49ada9d86c74\nb5507481-8dc1-4c82-b7d6-a7614b811f3f\ne398f3f1-165e-4222-879e-f70d9e72d9e5\nc129b0ac-7f12-4903-9e6f-efa9511f4da5\n234436fb-f6e5-4f38-9213-7c24896c77ed\n9476fc6d-b760-4acd-96a7-1abec8378f55\n48bcbd02-752d-405f-8b84-e471b8866ef7\n0e6af4c1-ecde-4bbb-a236-f608a1c08ebc\nc76bd00e-15a6-4030-a93c-fda74166b9c0\ne5ee616e-3019-45df-9650-1b9ef16d72dd\n17ddda67-c18f-43c3-95f6-eb200c660e41\nc3e16836-2b8a-4207-a273-436add1da803\n3abfc68a-4923-4ff6-b1bc-f427d98ba05d\neabc8849-efa2-4fef-addf-322cd560bf5b\nfb5cba8e-aea9-4dc8-9450-3dbb30db55a7\nf361e091-12f2-4e8d-aae5-a8b2701ab018\n8f427631-e3c1-49e9-9a4e-f1014bf2618c\nf84f34e5-3b5d-43c8-baf9-34b2e91c8ee9\n058ccdc0-e575-4045-9ded-062af09bbc8a\n7497380f-e01f-4ad9-8fa7-a45442b726c6\n7500024a-5ecc-440f-a5c7-2de63d7881ab\nbebbb7d7-352c-41ad-a6fb-573fdb75ef6c\n75b13d23-74c2-4d9b-b811-304470446668\n7d182af0-9988-420d-8c95-e2f4fcbe235f\n7dbdb325-6883-4778-ac11-e5eefc15847e\n8149dc24-832b-4747-b882-815ee77c54d9\n378b12ec-2d10-4a8f-a2a7-f6155e103b75\n506ddea3-60fb-4934-8362-1dd422a08339\n3f932856-10d2-4765-a96e-217d2202d653\n67c15672-f027-4f30-a980-30e54afbeac4\n7bc47d51-d339-4598-8770-686afaa3489a\n43b24f9e-2a7c-4854-bd67-1983f282bb9f\nb6f8ce1b-4d52-412d-b434-2defcafd637d\n0a6168c2-eeee-4b5f-81f3-b09dbbf61161\ndd4064ef-3cec-499c-80d3-ef78757877b0\n5afbe906-20f2-448a-b378-0c39c0e9c3dc\nb443eb02-3d82-4c7d-99bf-af8162e646d7\n2f0b99fd-6ad9-4eab-9a7b-8d07e7f89de0\n7d919f57-95d6-441d-92c2-e1bc73c1bd65\n38d9d9dd-2a35-4ae3-b977-c93c5e11d817\n9ad0827a-7c56-4ea5-bec8-3b80fd814db6\ne03e0e31-d429-46db-8e44-ad4b82d4a189\n0d4ae785-60e2-4616-8778-5971598b9500\n3de8dacf-1dd4-43ec-b5a5-d62e522f6175\n8524b2bf-9106-4b76-9d37-4f033986e02e\n62b3966b-b17c-4fd2-9d0f-98dbd5c6e5ef\n7d96797f-60fb-4170-82aa-f2571b11b39c\ncf9dd39c-7929-4081-bb57-62e967fce35e\n7161d941-873f-40e8-bcf8-9ebceccfb425\n1f392a43-993a-43d8-a601-f91f91177f80\n4b7e03b8-50cd-4da4-8cde-d53254d8b671\n6d60d455-55a9-4bc2-af73-8a5b03026e2d\n11a52556-2952-49b8-80ab-978ba7898859\ndd7b8ec0-cde7-4a25-89d6-94de189269f3\n742fe821-324c-4776-848d-fe1526b8f43c\nb0bf5a8a-e8f1-46d9-994a-20076e85a01f\nde980a52-72fe-4861-89ba-eb2016e2f796\n6eab314b-405a-4ed3-b150-22579a30b595\n820d507e-d7a4-4a67-ae88-44d7b19f78c9\n52d4ed2b-9455-47ae-88ee-e30af3786188\nd847591f-4df0-4bfd-92c5-4488c2234e16\n14ac3497-9f32-4388-b245-950e839c25b8\ne7030c04-21c8-4eb2-949c-9ce43549b8b9\n1ce9df69-517d-47ea-b1b5-a20f1d68deba\n1a720ade-3f20-457a-a076-52ddc8a214d0\nd91c823d-a71d-4370-84ae-977f2df94322\n0df65a19-ce3b-4a12-a31b-8d0b24a54dce\n49128f3d-3074-4a2b-a88f-92fd58a09e38\n3eaa7d1a-aa2b-4600-b63a-d34d052495c9\n0ec9c34c-714a-4c3a-82a1-ddd747aef450\n21c2fe99-aee9-42f8-9d36-928c77c67712\n8473b424-6843-47e3-bd17-af89dc67267f\nde37de31-547f-49e0-9a14-231ce71067a5\n39f8f7db-ee78-4ee5-8c4b-ccf1a380a6ce\n7bab9ef0-55a9-4598-a18a-337a1935e4ce\n1a8028dc-0c27-4c05-87c8-4a8ce65482c3\nb7789a53-97d0-42bb-b112-2246b24ee66d\n3720a83d-cda1-41ea-ba4a-330afd354872\n176308f0-fd13-4f57-9d07-055166a83de8\nb7e35ccb-00a4-45ff-ad86-b77c8f8ac0c9\nf24fca3a-1384-41c1-a05d-fd3595a1022f\n0782dc1d-717f-44f7-a169-02793ecf480c\nb82b696d-8588-4357-9003-fdf16085751c\n0d9ea957-e278-44f0-9da1-5f40bd3cff97\na0dcba46-bf3b-4abe-8eed-91c5ea6d655c\n9ffcb28b-a753-430c-9e65-943533922fe0\nd8be5ddb-56a2-4ea8-9cee-fa746c2d3998\n1fcad521-20f6-4206-8308-7f021d4c3f62\n04b9da19-3408-493f-a568-f868a9c5690e\n2bfbaeee-4a95-447b-8de5-66c9e2d3e1f4\n7c912439-b7a0-41d4-85b7-584664e9b42b\nba25e635-80cd-4627-b40b-06313ba452c1\n2fdf6245-ef92-4e0f-8d8d-0e09175fe0c4\n8acd24a8-7c6d-44c0-96b4-78085ef7c53c\nb60976c9-fdee-4cbd-83ac-b5c454cb4fc7\nd723bb98-8c94-40ee-91d5-97da9c1a50ac\neb54da0e-637d-42d4-acab-04af76b987b1\n1b5f7ae2-d860-4a75-8b94-a10926942e30\n7b8c80f4-ca25-4335-aad3-2041223b09ba\n8c6397e4-9cb3-4f39-891a-76a5618af02c\nea2f844f-cf45-4484-83fd-314f121e1f06\n04fe8969-4702-4631-8f0e-8a009b6d4375\ne7abccd1-25af-43a4-a9ae-4888b62574db\n89e8f5e4-6625-4355-a00c-b520365713c1\ne9df0595-5c31-46ec-b7ba-8c632bad80cb\n1b1f2416-ec0d-4bea-922b-8a234d1a6c7a\nd64fb841-7dac-41d8-979c-b5641a1d065c\n974a74d0-2cf1-4806-b07c-399bf59055f1\na6c2a66f-6fea-4629-8a11-fb2ab86443ac\n348d860f-dd80-498b-8d6a-8e5dc0735070\n0efca808-b0e3-4437-acc8-5b4847484d05\n4ae616c1-6589-4399-b52b-e230ab831a35\na52d18e3-785e-4bf3-94a7-2e3220dfcfd5\n165818ff-2a27-4922-b7af-a2454a43c640\n08e1a8ab-cfe1-460e-96d6-c1e1139b059e\n6fbc3de2-dcba-4dc6-a46d-3cfa548e2913\n44f61714-a8ce-43bd-b272-2cb3e48347aa\ndf4f4528-8e0a-4a5f-a3fe-f0d3834ae69e\nc4f191fb-edbc-4a37-815c-7df2e639d5ae\ne5f68aa3-26dd-4787-9d91-4268f19fa665\n63c6c5e2-99f6-463d-afd9-20ccd6ca1e0a\nb370353e-899a-4e55-bc71-27afa3ac22ac\nf621c63b-d71e-4928-a2be-143440e42dc2\n7b13e140-1f14-4ffa-8410-791715994af5\n98192c4b-1a46-460a-904c-81e2480d09d7\nc0546bb4-93a5-45e6-a8a8-28eea13d26ee\n0999f130-fb76-4932-92d3-e6d7e33f9923\n1a86ccc3-46d6-47d2-ac22-0b48fb96bd9f\n5bc8fd2c-b250-472e-b559-b3415697f4f2\ndd8ab31c-5153-4b72-864d-e8b740db8b7b\n9842aefe-3c7e-4c50-9ef0-6967b4768b34\n99fa44c8-85e4-4dec-b6a6-2e23867b7a5f\nc1f83011-2ec7-4675-ad3b-e7d48abb1163\ncfc3950b-0592-4c53-924b-01f95b91c9ac\nac2cccf7-b8fc-4fce-8db2-29bb461363a7\n10a0d700-949b-4beb-bb1e-c52b5862dd12\n0f9ab4e3-558c-4831-a4dc-e3f0ee2d5601\n2b44a91c-058c-4053-8b38-032456efdfe6\nb1e070ac-27b4-42fb-b43c-38a5309225cb\n2e432db5-0a2b-4465-8a1d-de99cae72701\n28699697-26f3-4760-bbe2-872d049053ce\n812526b1-6709-4340-b360-1beba828dadb\nf707d19d-b1df-469d-9c81-19a32e7c0b93\n4fab2aab-eba9-4f53-834b-4296b75f010c\n4194dfbf-dd7e-4a3f-b7c0-9e62da2e69cf\nf9a28f38-2a7f-4020-b870-66e55c470d70\n30f287fa-3728-45fe-aaec-66ab1ce11eef\na6cffa77-b0c2-46f4-ab25-b3e2f42dd844\n27846261-6b83-4cca-b18e-cdde9e921265\n416f2337-d3be-45d1-80c1-71cfadf827f1\n61475cca-3bb5-4188-8742-779b315b120c\ne5a43e9d-c179-4d13-94a8-64d434e01dac\n2c23bd55-52b7-4a79-9146-84c634ef699c\n038750b1-f7fc-48dd-9724-1c8564a916d3\n3bb29357-88dc-4ed8-bed8-bfff48595833\nb50b19e8-d21c-4469-bfe4-213a32d78b9d\n75bc090f-0101-4b2c-b755-acce754ea5e1\n082e4c95-8c34-4aac-bb03-a12fc27d518a\n6ddbe0b4-7998-42ae-961b-01fb4ddbd3fd\n4cb37cca-5c56-4e49-afbf-9b7d5c5733b2\nc766c9a5-112e-46c4-8e1f-c9f605ef9cb4\n0f44bb9e-8321-4745-a5e8-0fb865f8eea6\n003822a5-2d5d-44a6-b3a1-1ee8e5d77a17\n69894c2c-71b9-4f58-a018-73451eac4c8b\n4d3c3828-f39a-4b50-8f80-bfcf7efa9baf\n32dae871-a1ac-415b-bb03-6fcbe4fda9f6\n5afef451-6a40-491d-bc63-dcfcd1a30c5c\n39a1d078-e3c5-4def-9b41-1a5db560da44\n5af603b3-c68c-403b-869b-0a016c3186b3\n687ab3d3-08da-45fc-be12-51faced14af6\n8b620091-8d51-4207-be67-27d6b5273f04\n53fbda82-46fc-477f-aae5-333726fbafcb\n7b46cf1f-6697-4ac7-ae74-cc37d2edc53c\n720f73ef-f127-40da-a47d-40368157f27a\ne0bb3cac-07c4-419b-8825-4901d8ad25cc\n28f834b1-0dd1-4b28-a8ae-ea1e2af05903\n8d8004d1-2b79-4296-a8fd-4170f7847966\n61b836d0-f16a-4255-9897-b537f2461e53\n0449ecd6-d282-4427-a8be-18d64fd02352\ndfbf8b70-1b92-471d-a1b7-2ef2fec7cc33\n177fe140-24af-487f-ab0e-ecd560077a54\n20e56268-24bb-45ea-a32f-afa8e52d37dc\na8b64391-ce5c-46bb-90cb-5cc6bc2ddfe1\nfd97f2d5-ac7d-40b2-be2d-01d32dbd3deb\n3d11298e-38c8-4f73-b01e-cbfebe01dac8\n130d700f-3ee3-489f-a395-90502e94649f\n70fecbf1-ac60-4fae-b0b2-0b00b228af32\n2d48b5a4-bd5a-477b-b1ab-a2becac54149\nca4c79b0-b194-4744-9591-1778b8731240\n94197bbc-7a0e-40d5-a377-9764ee46268e\n0dc25a86-a47b-4e7c-aebf-579f510e7aff\nb8717666-f066-415f-bb93-b8239ccb2714\nbccf2c7d-93d5-4fd3-830a-91e9305574b7\n0d160604-50b8-4258-863c-c865696e54f6\n66f3ff1d-0a55-4f79-abb2-969f204e8cf3\n7365073c-efe4-4c27-b3b2-564704ccf6f2\nf0e6eace-cfec-491f-abdd-a09e49144dc9\n3ff4cfda-9f7b-4693-820b-7d544db0488e\n2d35f8b0-330a-4df4-83c7-05afde7400e5\n38fb8a69-c6cb-46af-ae5f-50a652cec5cc\n685b4cf2-e485-4b0b-9f76-f9ea4448eb94\n0f976efa-a0bd-4f01-bf9f-becbf0fe4c4d\ne5145fe0-fb52-4483-a0cc-389a1a7909a8\n2e433af1-01ad-4e6e-a50d-4d6651dfa9dc\nd247970b-7d15-4f5b-9f6f-59a55e274701\n8f0c44f4-fd1d-44a9-bf22-f102c2f982ba\n8cc554c2-45b9-49fc-ad00-39a591745ca7\n4f49b122-1a46-4bfe-b85c-5fbc1a1768c7\nedb0b532-4f46-49f6-8a01-044afab4af8c\n21c3b045-af79-461a-86cf-6b04273ceb75\n182d5f6b-231e-4f5a-82c8-0b915bb128aa\nfa7c8ab5-e61a-415b-bebb-404c44d025c2\n918a1b3c-aba9-430a-8f90-eaebf96ecd64\n7ff308ec-4829-4431-8d02-bed1bfb14721\n7c55cad0-1135-4b3f-ae9f-30efbc6d1bb7\n312eb046-ab9d-4926-8422-c74a21c3f6e1\n112aa8cc-32d7-4762-8d98-76e098b5b3ad\n7547fc66-9f71-4298-8c81-e84d979a81e2\n837f468f-56f2-4cf5-97a9-b77076d1a430\n8c2e31e6-d227-451a-a299-39c57f89640c\n576318de-afc8-4c1f-9ec1-b556f0a07bcb\n1cf10acb-2df9-45e5-bea8-6512f21c7ee6\n4d2ea1f4-c4cf-4fa8-b815-da022e1a207f\n448cf4ca-98a7-4073-90fd-e237775c49cb\na4f09665-eb01-4e32-a53e-75e57505cfa6\n592bd05d-a270-445b-8f41-8985a066499a\nf9be243a-4143-4bd4-9e3e-403de42d1d13\nb3750b5c-20db-48a9-90af-7abbf5950c3d\n86739334-83cc-4174-8caa-e01eb8d0a486\nc216f9b3-3d70-4e3e-9cf0-0c9321d18df7\n325581e0-d8ce-4898-8b74-563e6a42eee9\n790ea3e1-c5b5-4eb2-86f4-ffcf627a125b\n1a36802a-3915-42f4-b53f-05f9eb0baeac\n8ec240c4-3cd4-40da-96dc-f45e2f666738\na11c3942-4148-4cc6-bfc8-f7ef9f513165\n35a9bc9e-84fb-4a71-8c41-53b39a810bb7\n2b61c2d7-00a7-412c-8eab-a5067e218618\n5a675584-c9cb-4a8d-99c1-dd2eeede2348\n200908f7-e923-4a9f-826a-cc50b078b9bc\n1f4e8a9c-1798-44a5-92d4-d8f2d933f9ec\n77701094-d2f8-4977-9fb8-7abe00186e34\neab53a14-724f-415e-9007-482f65fab07c\ne80b44e8-d2f9-4e19-b6f8-ae000fefe790\n56852e16-0aaf-40da-b7e1-8e5e12c18d18\n0ca983bc-ab45-4cfc-9033-f56fab85f9cc\n2a02b888-355e-41ff-a7b7-1fff4ab927d9\n98122692-f987-43eb-93b5-cf31cb119ac0\ncdcb2f67-675e-41ea-9a51-7e5bb62c22b4\n5580ea13-37b3-43d1-b931-6e9868ad0776\n704fe3b3-1961-41ae-92b2-46441848e6b1\n66e1d0e7-cea9-41e1-99c0-d5606a82475c\nd31136d2-790e-4bdf-8ba1-05667747e857\nc41ce226-da26-4a2a-9144-70f85a72db5f\nb4c11af7-d219-44b4-a21c-20fa53aa999b\nb62c83e0-c74e-4a08-b177-401732639fa0\n24c8f2c3-af5e-4a52-8b2d-66ade13cdd74\na0d6fd22-28dd-4b8f-baf2-b44fd7c07bbe\ne6eaf88b-54c3-49bf-8de4-4dd356dc4e53\nfe4d39a8-f6da-47e4-9e5f-9ff8df95dd25\n38807e7b-8d60-48e2-9d88-c6a37397862c\nd680b011-bb09-4a31-9c4f-6c3b5288fa08\n59297156-55ac-4965-96c7-0bd10b7e5970\ne5ae6355-bb4d-4640-b6d4-d056e05e6e6e\n7a109e54-822a-4683-85c2-dfc57a2b2e11\n86efc5d0-0dd3-453b-8b30-25d36ef12dae\n501f2e29-7e10-4cac-962e-fbcc74243158\nca3a019c-6193-4fa6-b29b-3461b01fe05d\n628a6e2c-a6e9-4b47-a8c9-6c047ab5d87b\nfed3f68f-122e-4b82-9fa8-6d9062113f63\ne9df93e9-5a4f-4961-b1ce-ce0b6a7c4f65\n295ac060-064c-4690-8586-f6cc092944df\n692354e7-11dd-4e0e-9e13-d97104df45e8\n20b2bfb5-81de-460d-a1d9-344374bfca58\nf8290c8c-c5ca-4cd5-a91a-4a8dd3820e7f\n7538c4b2-3dfc-4de7-b8f6-df5be73f5133\n391c40f7-ef1c-4653-8ddf-a3aec5a978aa\n4cac3051-a3a7-4269-827e-af90a62ebbc2\n36fcf360-96d4-4cc2-ad97-6e4cf0bc1430\n0e900bd7-fcd3-437f-bfe9-12e9314ce621\nf765db47-8fe8-49ea-a914-00ff3082760c\n7986d91e-1599-4301-a5fe-0ca5bff15cd9\n810662f6-b9ab-4a88-ad4f-b48aba8f0e05\nc62b14ef-829b-4efd-b0fe-54ad9fc07d8b\n05603070-16fc-4f1b-8556-3615a0791163\ne8b7fa73-e37f-4af0-b931-a72ae447db29\ndd4c0a18-26ef-4253-beb4-2eed7dac12d8\n30764baf-2bc1-48b4-8c51-1cf9e496ea07\n60347da4-9146-44f5-a6da-8474030b33fb\n61f04308-4eec-41c2-a251-0566f46ac313\nec4a70de-210d-4a26-b76f-c37b536343f2\nd23e6c45-05f2-4721-a291-bc99bd5c8dce\nd1d73245-d6ab-4fb3-9aae-08c7d05f59d2\nf790accb-4399-45e8-992d-6ec84f20d5f8\n049ba8fd-030e-4e57-abec-8031e31ead92\nc290c3e3-ac9d-47f0-a929-6c1501068cac\n04f39fb1-8553-457f-8435-bb97649aa125\ne2712f3a-405c-4f40-81cf-2795b423ae16\n148aaddf-c5d1-466a-8616-206ce30df835\naf4e3d05-81e8-4aec-9cce-b8638650e5e7\nb91c404b-ab18-41c6-9d99-1eb7af63dfb2\ned3022fd-c579-4c38-9d19-7d0b522ea98c\nfb432e67-23cc-4eb2-bb94-4902357e9e16\nf1caaa9e-25f2-4d3d-b31d-4deaec95fef3\n4ad92b38-559d-4b77-8b35-2fb48dad2b8d\nb34b80ed-a26e-47be-b48f-27cfc32b9166\nbe7c2593-da9f-4c6c-b3d9-9128c305105f\nf4b3746f-49a4-4dbd-9fa1-52260302a012\n51f06652-87fa-43f3-a67f-f16eb2568713\n065141a4-c11a-4fb0-bdca-7a429d550176\na9707068-8e66-4042-88ca-5512f333d245\n689d3824-b593-4776-83d9-b58fdac0d92a\n33efb287-d2f6-4355-b1e3-f856f09bd4e7\n546ca229-4b1c-4af1-8576-415a3b613a37\n757bc8eb-0471-4ae7-8d97-f229f4df2564\ne9123c3d-0c24-4048-8bfe-52327456f921\n76836856-f0c3-43bd-98af-9d952b2c28d1\nf26f819a-7aab-4ccf-9b9d-3a0da7d5633f\n1cd1e292-83c8-49f6-9151-85abe1a1944c\n58dcad4e-a90d-4726-9341-9f0e8f121ec8\n6ff30797-6c91-4400-9c91-4725d9aa6fee\nf72c9af5-9edc-4e5e-bf46-b9209cff7576\n712604eb-902b-4cde-af73-1a5fa480ac8c\nb29bbc50-6441-482c-b5d5-3c78480c1399\n22d64470-6fe0-4424-a89d-cb5ce0bfb47c\n859a23ce-b5df-42a4-8fbe-d5b76b06e21d\n27606649-b19a-4d62-855a-104688f1af17\nefa289cb-aa15-47ab-a9d5-8a4c832c61b0\n95741947-4bb3-4ae1-8210-b829ac12d903\n8deefd27-f8c1-4521-97e9-8de15fbad3ea\n6d1447dd-d00d-4bab-bebe-6b38e7e27b40\n9c240203-2476-4376-ad85-f9b788025a99\nd05d78a8-9a32-4e08-bb66-918e0c58d997\nbd86cee8-1e0f-49bb-9d23-f1c803d60fc5\ne193cc28-3f6c-418d-ac65-b2c70e2b1742\nbe9182f3-fa75-4f40-931e-033f6fa55f1a\n6a6c5cc1-57fe-4aed-84fe-d32f612de304\n9c12eef0-ab1a-49e8-92be-fcb54ddc0093\n1fc06f3a-b3d5-42d5-8d67-1a35b3a56633\n689e8ab6-b307-4842-a5a3-1dacfc0de977\n46cbbb2a-9ad6-4b49-9742-05745a64dbfd\n54e86aa8-ae9b-4fac-9d3a-ae7c4436d4ac\na28096ed-040a-44d3-9481-c9a078f55311\n76938851-3171-4a8b-94e8-28c0dee0d0cc\nf1765ad3-a099-43b5-8495-ab7a548e5b3d\n23f51606-0faf-454e-9cc2-26260e1305b8\nddd64800-75ea-4767-a8df-be30ec9e90c3\n618ff4c2-68c6-4738-a894-c843cf55df34\n347f4c82-ab34-424a-9133-2e9ae450cb13\naf71964a-1afb-496d-a817-64120c1c01cf\n9f41c94f-2767-43b8-ac2a-dc0e01df8a94\n3c9e71c2-3729-4940-9066-347351c13797\nee778fb6-edae-43eb-8a7e-8ae0409dcc32\nd858b006-a536-4039-acb6-3a3d3b173b5f\n5c454803-7cd7-4929-96ff-d30865b1418a\n6180ba42-44a6-4ec6-9c9e-ecf4511a2a30\n8b1b5c26-3c64-4b71-b0b8-98489ba281b8\n4d45324c-e350-42c2-9eea-348d48cedcb8\n90d21f1a-90b7-498d-8b03-7db9e0e93fa6\n3c97db23-1dda-409b-84a9-04dee30220e8\n73bec9a7-8253-4982-953f-90ed80a81e3a\nf9f42ace-ea1b-47fb-8a4e-062f1dbae411\n2b6a9097-a62b-4c55-bd2c-42ebc2aef6e4\n6faaa9f0-9254-40f3-8175-99bbda630eb9\n43134095-e7d6-4898-b8f8-65655cc6bfad\n6d1398e8-4b1a-4da7-bfd7-28926f41278b\n179dc615-05a2-46b8-9c13-01c2a771e5d0\ne62b6958-f7da-4092-a138-96376a7f3fcd\n903f8416-58ee-4585-8ec7-a0187c37a25c\n77763237-7435-4b18-8b73-e62b6954e098\ne7bdbfff-b00e-4e30-84e7-c157f57a223c\nd582b1b4-85a6-4ed2-89fd-963e94a6b1d7\nba7cd739-805c-40a9-af8e-325924b40d24\n32d73294-d578-42a2-b4ed-3daa5ed122bd\n34b2975b-8e12-41d7-9606-55add93e898b\n9a5ffcda-648a-467a-92ae-9951a104cfb1\n64ba9c98-bf35-44c5-a3f1-923e1ac06057\n4ea2cd30-60e0-4260-acc4-a315e8b0f79f\ndac8e1c3-6d0e-46be-9430-a617e14c8a82\ne03c62ea-7c27-494d-8838-8bec549e3e5e\nde52156d-c522-4022-94c5-8c20dd830b76\n78d5edee-280a-4fd5-b468-dd2ca29da696\nb11b7d30-8d14-4357-81f9-17e85893157b\n8f4dd470-3087-4588-9018-6d5d74ddf909\nd4b7a7ab-34c3-4ca6-82b2-310e1edcda4d\n6c12a2c6-c2a8-4c6d-a0a2-b5e593ddaa1a\nce9a059d-9d95-43b1-9439-3d0175796866\n8d77d6bf-ebd8-474e-b5ff-b2dca868bf33\n84fa11bc-0fb2-4383-adb0-6cfe897a7188\n3910eee3-1e82-44e7-a818-77b6fe2f5c4d\na8c59bd7-73cd-4077-baad-f9ed84c8f0dd\na815f3f7-d70b-49f2-b341-0a41e2bb80e8\naff80727-64de-4fdd-9e4d-1a2252868eef\n39a497cb-9063-40a8-b4a3-a40a8c11f971\n5c8e16ac-2800-429b-88f6-b31675f41037\n3470e8d1-7a3c-4ede-9501-c08d8bbb0500\n75206501-6762-4557-a97f-6c49a496bf9e\nbbbf32ef-516a-4514-99e0-fb334f85fb12\nafb8deb0-bb39-4988-9d63-e0e452847aa6\n8045f536-3c35-402f-acd2-507299778e35\n30302ba1-2286-4040-bd38-aaa45a7e332d\na613f475-27bb-4410-b2b0-004ff8c23e90\n372b9c71-81e1-47d0-aa8f-b28ff9862c35\nafe516cd-4b44-4d01-854b-40bf1e5acf8e\nb550ef11-2ee5-40bb-b162-767ab9e9d0c1\n5d96807c-89aa-4824-961f-c5a1efec23ac\n91e04bf0-8fc8-44d6-bc7c-c40b1e29429e\nfb95b318-65f1-4ee2-9d39-c1865bdaebfc\n8423b24a-d9df-470d-b37b-c7911aa4496d\n10282a99-3c07-41a6-b9fc-4230fc11f0d2\nec31aa29-6659-408f-938e-e43b61a4e6e8\n2889a459-97c9-4272-ae80-85639bbc8299\ne35c239c-bc18-4ab8-8419-25cf81107aac\n5671441d-651c-455c-8a74-a27d54040fdb\n4900ba85-ac67-4237-99dd-26289ed4118f\nbdbc7551-6f58-4a1b-bdd9-eac571f2e9ac\n94a38a44-a8fb-41eb-a1c4-fff7cffaa306\n51ec58ec-16ce-4c52-8f98-8dd08863ccf8\n48b4097b-bd6b-48af-b5a7-702193ec18aa\n0fef24cf-98a5-4832-873c-d03a7fd65211\n70590edd-f3af-400a-89b2-6411de222cc3\n2df5a8f8-957e-420d-a30b-e544ba526cd2\n0bb8b8c9-6aa4-42ca-b8b7-106250152f36\n23fe00a3-0f44-409f-8bc6-3bbe54db66d3\na9096eeb-62f3-413a-b858-1907669ed188\n279c5b6b-13da-4e9c-acef-bcf55504bb67\n33e6ad13-04f9-45f5-8ae5-5af8d969fba6\n96c7c90c-2d73-4e3b-aaa2-609b67e87d8b\ndfc8fa02-24a6-40e0-991f-6a5a0e7cc1e5\n6322aa5e-4cf6-475f-86fc-55a952ede1c6\nb9b39546-c34f-4c58-bbab-aa9ea86a84a8\n90002dfa-f64d-49a0-9ba9-ca832013480e\nef603718-ad1c-4f99-b803-8de526976318\nc558cdc9-625a-41ca-b751-dc3b5102823d\nf8cac5cf-1817-4987-8cbb-2af70848d285\ne997f7a7-1276-4a8a-8227-6a2966765864\n21afd16a-d82e-4fa4-8b96-63c4f7feb7ff\n443b7738-9dff-436a-be95-7207850a68ca\n62a8f95c-03ff-4024-97ac-5b194b9bc61e\nf3b633fd-c28d-4b64-9950-308c66327d64\n92299561-f031-40a5-afbc-598789deb2cc\n0ed0b930-3150-4bfb-b3da-148f94134db9\n2333c702-9616-4344-970d-c1ba258cf813\na342ca18-a305-421c-8e75-0613d17c7f27\n3426085e-8ee2-406a-96fc-d449cf1e323a\n1704745f-f8ac-4b7f-94b6-8371557ca8b8\n21ca0f96-b989-4ba6-9838-6805ed2d67e1\n9fcf81c6-5212-4e5c-9d64-9fcc32fad4cc\nd59e2a8e-67c3-40b6-a2f4-4baaaec67521\n18c50e99-2b14-46d5-a689-dea49ac1bf7b\nb03eeb12-f3cd-448d-a0b8-ab5abfa8bea2\nf620be3b-aa0a-423a-86d0-bc9b02ada1c2\nee0be968-1388-4111-a5ca-470fa6453d53\n7d182395-b2ef-48d0-ba06-910a303ab15b\n6b130197-940d-4fbc-b731-330d04d83774\n32572868-e5c8-4e47-a474-7efd815a493d\n4be57e9b-7dd4-465f-9fde-bc3b00596d8f\nb08d1c5e-0015-4f57-8769-193b7403a79d\n948f3c21-d496-4413-889a-5390b3a6e9d9\nf2326d14-3af3-4a41-bb53-2867d6dd3235\ndc6abd8e-1084-4834-8108-0aec135d7af6\n621cd17c-5694-44ce-b515-17313ece28ac\n33710a99-ec7e-41bf-9ea7-0df6b37cba22\n1fbbc167-d954-4e7b-855e-8cb0f94b6aed\n3afaef60-35c6-4848-9fa0-e1724d48729d\n58edd32d-6899-41f8-81d8-0131b70d3991\n33fcf484-82f2-4631-856e-1a84e23efb3f\n69f20762-d524-41c2-8d9a-f9e01ee40e44\nce098a8c-aaa4-470a-9ca1-d38290fd481e\n311c57ed-e09c-4d41-a884-77ad94269a38\n0684bf10-2b3f-4317-b762-ec4491427047\nc2f622df-6ec2-48d7-905a-b15880e7e238\nc165d71c-904b-4899-9ccc-d7894e59bd08\n80e27e1b-f832-4861-b3bd-7dcff98ba984\ne8f18747-dca0-42b2-aabe-c2b42e1491b9\n2548b275-de0f-4c86-bbe2-15eefda06116\n0fd5cb66-bff4-48f1-b0c4-048cb24d0136\ncae64425-2227-441f-8bfd-691d94f14405\n40175dc2-5807-4d03-814c-d3edc4ee61f3\n1bd74725-5375-48ad-998e-d1b978bce3b9\nbe125634-a5bb-4891-8c19-691b739fc86d\n6e638134-2412-486a-b0a8-6aba4e9dfcab\n0838bf7f-9aac-424b-a8b0-c4812512c33a\nfd614e50-f4dc-47ba-8813-4a1065f9409f\n80de5e48-d9fc-447a-b56b-fe699418ffec\n4144e936-c029-4898-8863-b39f17a7267c\n45df4465-db2d-4ee1-a74f-388148bd6bc8\nbc8e6461-3150-491e-afd4-93b1b7dc05b6\nd17789fa-5d49-4bc7-adbc-3bd0f1884bce\nbbc41504-208b-48e1-9999-885f48feed5a\n70e0b234-2cab-4544-9877-9e3d4c2fa31e\n780e76f4-d88e-48e4-a785-5538a374ef94\nd5e5f023-df23-498f-a490-2e10e2ee6617\nb11ecc16-920e-4fe0-af92-f6d0a1782c95\nc895feea-fce2-4d59-a2eb-8c0633192858\nd2c964d5-5261-46eb-9ad9-7e0044dc0c0e\nd4c72a4d-8d88-4204-92a6-98c4b62bf1fc\n3a731f5c-554b-4351-9d38-9854574ae7a6\nc27c35d5-2afb-47dd-81b3-9d3426841ec6\nabd43d18-c9ae-42b1-a6a9-b3deb905c2b3\nfd1d5ef3-e882-40b6-8e51-e4193c8cdf8a\n26146d57-a4d6-4995-baea-fd40210916c0\n4e5b4dd1-06f9-43cd-a610-496e8e4f30fb\n15ff4043-0aec-42b7-b48a-b8b74f5ad3b1\nb6f2379c-ea4e-457a-9b52-66c5a9c2bf47\na8d629dc-6775-4ea4-a0c1-8b4b272f9534\n975e5518-c2bb-49ae-b6db-59e95ca3c56c\ne945bde7-2411-4bf6-befc-2f0e4b68962b\n0b1281e3-839a-497e-8f7d-32f225a6708d\na940604f-cf96-4280-89b5-d3a16fdb68e6\nd1fc3dc0-02cf-4895-a4ed-5ae1685cb5fb\n047fedbf-f238-4fe2-a70c-dd362b8f3987\nd824efe9-d205-47f5-9788-f982d5084c05\n2aff5df5-06ba-4eba-b05c-ac4e4bc73b2b\n009b09b8-ebbf-4fb6-8bd6-0c406373fd84\n33ebec95-d09b-4e67-a767-f5815f0a2c2c\n6345c57d-6c5c-45ce-8092-1f802e57a8fa\n04eee9f8-ea61-43f2-bd31-a5c97a6f7e5a\n1f7ea33f-e697-4f9b-a672-0f92742f7d6f\n6e5d0d52-ca79-4e7b-b92e-c53018a9ff08\n52ec0965-a5f2-424d-bbe7-f30054693836\nf448d4fa-ed01-4de6-82cc-d6c5543b807c\n1f384547-1e6f-40a2-9fe4-52930137e46f\n876a88ba-cc37-4488-b57d-4df9c6146869\n3a385097-0e02-4865-bde2-829f328c06ca\nb239c95a-7091-4cae-b89e-2d157b031214\n21c5047a-48c2-47b0-819d-f430a31c5824\nfd47c52b-060e-4e69-80b8-25cd6923d0bf\n7644a38c-2281-436b-ad8e-ca9c62dee396\ncb6095c9-f2e6-4778-8661-7fe95f78906b\ne74d7332-be87-4b21-b4f0-f8e997decc5e\ndee93763-2fc3-4e62-be5c-ccd36a9b2510\nbc707b83-e0f1-4c4f-a666-0b4bb74f35da\naf00f8c8-e5f1-4181-9e65-8cf49cec9cf1\nba776e7c-f639-4046-83db-eb2713e84c95\n207433e7-fb9d-47ce-85a0-6649d38306eb\n213fc584-b03d-49eb-a8de-d2b926b2f055\nd9c39dd6-98b9-4da4-a950-dd0361a78732\n757093dd-003e-4758-be93-d6d9044c4e46\nd6394da1-b5f3-4794-bef9-c94b07516702\n88963737-4afe-4142-abfe-eb1f954d3949\n4d5fea21-a595-444b-a223-b8f7bbe71fd5\ne4b6820a-5222-4f4a-8834-d64209a4602a\n20730514-090d-4129-b17e-397bb6e6352a\n721cf783-eeba-431d-8208-2b2b9211e28a\n1a04df6b-25c0-4a8f-b084-cb1f2da81010\n999237a7-a8d4-4503-8673-40dbae39cdb7\n1084de33-b1b2-4fae-9a75-3dcad993762b\n35b924f9-7f2c-45cc-a8bd-ad5c6a8f64ce\nbbd5b5a4-b6a9-414f-b3e3-74275062958a\nced9be72-1ddf-40b5-81db-2e853d4d7b58\nf0926038-6f84-4712-9566-87bbd16671dc\n33609921-6c3e-4078-8b63-167a4a1e990c\n927f3bbb-4f2a-4e28-aac0-c64cd4af3f02\n869bb6b2-be20-461a-9175-c971bb49bdfd\n87cf7350-c120-4f57-848a-da595e49d3b6\n4fbb8fef-23a5-413b-8a80-65e14d513a32\n9383ae24-fd34-4bc6-94e2-174ff1c5f5c1\n02f93d82-9797-49f4-9ff3-45aab4ea3308\nd2e930fa-d5ba-4181-993e-3d084ce38838\nfbc81fbd-a5e0-4775-a468-c8acc241807f\n27159c76-e36f-4e39-b316-1aae0ca5384d\n34d6cbce-71d8-4797-82a0-10e6444fc5f7\n894571a7-933a-4e09-bb38-c96bc30c9df8\n191df2af-c5df-4fed-8cfc-d4cedcd3372b\n6d82b97a-47e4-406f-80ff-0aee6cd6e9f3\n73ac88fc-c58c-4640-8182-ebd762398995\nbe455c7e-90dd-4cbc-969e-f16f9322f581\n0c88e353-c5b1-4540-91e8-5b7262e30da7\nb2a4da7c-ce03-4335-970b-101dd155734c\n743d68f0-2772-46c4-a146-d09e481f9462\n2f2f6be3-89cb-484a-a39e-66bfa3794200\ndb9474fa-1d5e-49f2-94dd-9cda440bf339\nf705065d-3f13-485b-aef3-87929db589db\n8de41793-1edf-4794-bdf8-bb90d520048e\n0bc76c17-b267-4778-b9cb-5d7ab1158cda\n0e8c7960-7503-434c-bb9b-32ffd8bb2535\n4e6803ac-ff3d-4c83-bd17-11ce6003db17\n637ec96a-8797-4f19-a079-1a412aaedb7d\n8a3b99f4-0529-4220-86a8-5dae38e400e6\n236571c2-29de-4e95-99a0-382a147ffe90\n647d47e0-e738-4ccc-9686-5bdfab7eb6c7\nb33b67e8-980c-4cbe-8fc8-eef857d20b93\n97cb0450-2e87-4e49-9442-b62a281a769e\nc5321bde-a723-478e-9021-a7dbccb23e45\nbdd78893-4ddf-4fae-b899-47a3f7646706\n3232c318-33a8-417c-9a6d-5e7ce4983d67\n3d469fc6-2bd9-460b-baed-d72dc96624dc\nbe4c9177-e5ee-44ba-94eb-d6aa056cebac\n8c58c71d-2d27-4afd-9181-62ab3cf25a21\n3083200b-6309-4111-9320-094c900dc3a7\n8634d60f-b13a-4527-a8c8-034b11439913\n07e14d74-ebca-4575-8f71-2b022e390bf5\n645d0a24-d181-4088-be13-0b34d44e9887\n32d84208-74a5-4338-8017-3311301986e7\na7ce8ca4-8e24-45ba-984b-87c0cd32d0e3\n64e84514-a4f3-4af6-b48a-812efeca9270\n4079a906-a755-40f8-884e-41701f7b819c\nd40a4212-b623-4171-9f7d-a9da4e589105\nbd5bf677-ec38-429e-890b-1045b387abe9\nb79d50fd-ead7-4d97-91f2-283c7773f45f\n65faa71c-e9e7-4a81-b941-7fa3a1c99361\n556fbf4c-57e6-40bd-b9c4-8bd32be4e849\nbc8968c0-f20f-40dc-a60c-d24d70cb7e7d\n063f2e65-37d9-4608-9e2c-539731e63efb\n9be13ec4-af47-4558-a530-6be7f9545add\nd80a86d8-b3e5-4808-99da-7c754bb3d187\n19647930-f4c9-48c2-96cd-7abd39f7456d\naee5d4af-8e91-45ed-9bcf-f8fd9da7a3cb\n926cf860-fd2a-44dc-96f5-cd26cbadf6b9\nbace56a9-7e98-49b9-a3aa-23b23c6471bf\ndf5fbe80-54d7-4253-a422-dc9db43d110e\n31f0fe2e-83d4-4bbe-bce3-8b8c36ab68c8\n7324218c-40f2-4315-bedd-da859e8f815f\n7698a8a4-f849-46fd-9933-8f702c4ff537\nce93b3cd-05ab-4cf3-ae22-885cd84536a5\n6ec0e2a3-467f-403b-94c4-5fbb5eae556b\na66fdb3c-14e8-46c1-8cee-3289ef639afe\n11da3207-d3cd-459a-8984-b6f5d0f9fc80\n3096088c-7060-44ca-9cde-65868a7dcf29\n4e9f664b-e67a-453c-9a43-929bdec64224\n1ebdd784-ee28-4a90-8542-74d07fd4c22b\nf5d0de69-c136-4207-ad93-4a922bff13d6\n36cef4a6-db49-4159-ae82-57b6ebf6961c\n7e2bac13-675e-4526-abef-bd6ba7de489e\nc3be7339-7cc9-47c8-a884-19546c59f44f\na0ee6070-786b-4068-a424-bccd9d41add6\n35d4ada8-8315-46e8-b6cd-f8b427be6ef2\ne2eb0c70-af5d-4e04-871f-9dd86f290ca6\na0b20f21-9eae-4446-b8b1-dbff2b7b29cb\nfe1282f4-e870-43d3-95a8-8bfce92ddbe8\n981300c8-f09e-48ef-a6d1-54b4fcf0725c\n8b8ea8c0-296a-4f4a-ac92-670d4ca3fa74\n2700b273-07dd-4230-a1b0-fded679eae4a\n220e8572-e251-4018-80c0-03b20ac43e06\ndc0bb1b1-7b53-4753-b5e2-0ff6d0117f60\n2c971af6-186e-4aab-a3cc-5cdf74c943a9\n6fb0d44c-f404-4f04-8061-846ea0bb2000\nda31c88d-6af1-4c76-9696-27033e563288\n36754ca1-f05b-47ab-bfc6-5fcd3c331d87\n56bfcefb-0392-43d6-9d11-39334f4f39c7\n5ece72d1-9cca-4ddc-b79a-e4388a3ab1f1\n8d43faf7-13fb-4ab0-b41d-ca75f86062ee\ncca34f82-aeb2-402f-baad-aa729b23d69a\n8ec104e0-5ffe-4234-97ce-0b0c6a3c3c87\n6a79c57c-c0c3-4fc2-99d7-de47591588ca\nd9962f98-a907-458d-9ec3-06d172d751df\nbb843de3-c0aa-487d-83b0-20df09c538b4\ndb1f85a3-1639-4616-9e92-edc94be50980\n76105240-6459-4225-927c-1808b18b9d94\n7c1a7c2e-e5c0-4a62-bdbc-bfd70fd01dac\n1ea85a4f-70e6-4d5c-845b-71f2ecb28794\n17bd6d3c-a17e-4709-a3f1-9a27b8c37a54\n92c824c0-beed-4f7f-890e-5e9d50e9189e\n2679deb2-4484-4acf-b038-90ee0ac1c0a5\n41d54cde-4a11-49f9-920c-1a619da293d6\nb5efba33-2bf8-4904-acb9-6f21310b4e62\nf96c3453-53ff-4dd6-a13a-080299522447\neccb3b5a-b6ef-4db5-b777-89e884c14b7f\ndd118f36-d1a2-4abd-acc8-8e2b9cc32781\nc266675d-744c-4c17-b2d2-dd2731f27c85\n3903fca0-8f14-4810-9904-110755262522\n1d867c02-08c3-4482-9e89-d388d4a32634\na2bdcba6-389d-4463-b587-2be1bc1c9faa\n759327d1-13f8-4977-9c18-9d1e5777cb0e\n9333c8b8-2630-42f4-8ae3-dcb2b42b439c\n799f0ead-ac71-4d2b-9549-c586317b82fe\na7101287-6e8d-4f82-bff2-2ae25c2b6544\n09e77b67-2f2e-4735-850a-b1f61db005f8\n2f0d6328-b512-4f81-b8c2-f79dc966359e\n2b2617eb-549b-4332-82f3-e5e30634155c\n85df0a3c-f5b8-46f8-af0d-bfff9c5a6b87\n2add4f1b-f7bc-45c1-b95a-b3462708f11c\na4030f4c-315e-47c9-8788-8f54e5fa6e21\nb7b75c2e-e138-4e0a-98c4-658d00aaccec\n328ba6bf-8410-4d69-b411-a4c72ae1f4bc\n70c5866f-138c-4907-bf1a-431ba4b1a8e0\n889f131f-36a3-43b5-9362-983d629e37ff\ncf2bd872-f3e0-44c0-a710-f0a9a2f8f1c7\ne0487855-ba66-44ab-9a8c-30635bf372c0\n69df4640-7258-466c-afa3-276471c353fe\nc98b6072-7d31-4d9b-8716-3806d7a58ab7\n55537d6a-47e0-4e12-9bef-723fd884201a\n0b74341c-b429-4540-9542-ff06f2724aba\n0f4a0f0b-73b2-4406-b8d3-574e15d70674\n99a37142-1c1d-48e6-9018-38290708c825\nad97dd8c-2225-4886-8b77-1e9b77e08192\n30f6ffc8-26c3-4715-994e-dd37366d4ae5\n0a8d9c0a-a81f-46f5-b13c-8c99667d6f0d\n7e4e92f4-b2f4-4a71-a57e-400c8a047233\n392d19a0-f9b2-4b51-8cb2-70b224db58f6\nc73e8849-cedf-44fa-8096-76bdc757631f\n134961fd-cba3-402e-b8b9-a785e846b422\n2b77a366-ca9e-4994-99d8-f215d87a0f5b\naa1ccc8b-b8cf-429a-a332-a96ea9eae597\n6aea6cfa-b93e-4d47-b62a-2f6bdc0ab48c\n2a3eee37-e4b8-4e59-9b06-9afbf8316550\n56e36d12-5266-4654-80b5-f4df9542d714\nb6dce938-93bc-4676-9c46-9334fb2cad96\n8c45b78a-ec95-472a-a51c-57127b9155d9\n1999a961-2cfb-4b74-bb91-160d5407ae4c\nf4cffd99-5b39-403f-9995-da3becb98c69\n4052f5f2-aa74-498e-8ea2-145144268978\n70d2acf4-52e3-4a11-a9de-74674af1f871\nea0f1f7c-70c8-46ef-be65-7994d9d68121\ncca6d55e-e195-4867-b8aa-1f005d34c081\na1a59b06-375a-46f0-be8b-3fb972229415\n59031fe4-a1c9-4ccf-ac20-06d05b765a7b\n796c7098-2277-4476-80a4-f96dfb8bbc0d\n760388e4-88c1-4262-b537-c02596a2f0bb\n97336676-4c09-41c9-9cf4-e1088b6b7dc9\n1b5cca62-3fff-4c3e-8425-43c59d294e3c\nb8e97c32-817b-49eb-afa0-712f0f64140e\naa7b904e-74b4-4b2b-baec-e59334760cf9\n74c63d65-4f03-4e70-8f14-4322b0a15001\ne4da7f74-224d-4e99-ac49-bfeaf4dda413\n20829e68-22ce-4db7-8f0e-e90b7ab7dc43\n21a64013-32ad-4dbc-bf09-e7b7d0c13096\nf0f1f16a-e1c4-46ff-a6fe-7fad34690f96\nda04867c-ce8d-42a2-968e-c692cc7937f4\n2b1bd933-ca27-4f72-a157-f21d0d8d747f\nb0964dab-fa93-40f4-9162-26ce882824fd\n926645ea-aa18-4f79-a1d0-9e6d68468044\n24cb5fb1-0a9c-4956-84e4-2dc23cfbbcfd\n3605f46d-017d-47e8-9796-740c714700b7\n0e2e9550-d1d3-42ea-b170-6414152356a9\n1d671480-32de-4eb4-a029-6c7592baf9ce\nb8a947da-2f8b-4a01-95b1-15dc9869227b\n1dfb59f6-d301-46ef-9782-3a0d2bf1eeb1\nfc10c4e1-8263-47a0-b207-8e71afa3ba0f\nfc8800d3-f8ff-4fb7-935e-9c564dbc4811\n8369bb33-753a-4ba3-88b1-9ea791f2a02a\n96842aea-53b1-4191-b9de-32c91450ebce\n33eeab08-0f11-4571-b012-984a5213dbc3\n9137b2fe-2c66-4f03-af56-777f38a52d49\nc6b21106-a52c-49cb-8316-89dca6807884\ne9255817-eb4b-463b-95ba-ed1022f6a3bf\nd9744f11-d2ba-47ce-b60c-caf198cea712\nd2302b4b-5f2f-4464-ac3c-2049251103c5\n7fa3539c-dfc6-426b-ad1f-22098c048110\n88a617ef-848c-47f1-98eb-e76144b9b4b9\na0b65e05-470f-4339-9514-991f88f23950\ncff6ab5f-0511-4b7e-87c6-6f02ed684159\nfa3a25f8-9409-4cf4-88af-5548b5515d92\ned3eb36a-d1a9-4ff7-9b46-a9f1bcfed2dd\nca91460f-49aa-42d4-a1ff-9ffa74e88cdb\n6683f756-d102-46cd-b1f6-491dd6ebf518\n59c3d378-3fb3-403b-98c8-e93cd4c3003b\n1ad28ddd-371e-4612-973c-a2151f25d19b\n015a98ed-cd5d-41d5-bb70-c7fed047ee37\n1f4817fa-804a-42d1-8b89-d51e32e10027\n0fdd59ca-0d19-481e-be71-5de4cfd54aca\n49bbf19c-a77e-4437-a7ce-fd0bfc19ae7f\nedd3e800-721c-4cd2-84aa-b29eb5afc382\n0cf7baed-0140-490c-b541-c535741ff853\ne97321d0-017a-4680-86b9-68405fe4e21f\n6062576a-b475-472c-9585-8a3f84aef775\n3df07526-62da-4aff-a9f3-2de19cb352ec\n14d05c2b-4aa5-47af-a0eb-e7b487345f76\nde93393e-e79e-4b1a-b3dc-19f00b9a76fd\n975959a1-c658-4a4e-b829-7a201b02fbd4\n4c0a5207-ec8b-4e56-94b7-5f327075f5ba\n1b433124-8034-4980-8564-00ab17e65a49\nd9705a18-c110-4777-b989-d504340003b8\n7a0b8c64-20d4-4b62-8f6a-2334ed15ed38\na262aa62-8c67-495a-8b2e-d3211a8606fb\n6968203a-2972-4651-8e6d-ea2f941fa6bf\nccac0def-1e2b-41bf-81d7-428431f3ba50\nf12e4f73-fbd6-4fa8-9de9-df4543bca5b9\nd81a864c-e95a-493a-83b3-6f9461f3ba6e\na175dfac-6aa9-492f-9975-d1f2349f635f\nca81d7a2-3ff0-4827-8d52-6b55205ac17f\nddec1cb3-d7f0-433a-86df-4305e0c6ad89\n9d625714-aee7-4234-9566-14e4e009fe75\n16721c96-100b-4605-b2eb-a68e6318e360\na6ad5131-a08e-47ea-8ebc-58050536d1d7\n496a7082-288a-49f8-895d-b658e349f3e9\nd95fa768-1d58-4e7a-a162-afe297eca56d\n1d70706d-bec0-43f4-876d-7b27ed7b414b\n9ce4111b-fe9b-44d7-88e9-2c1109c4756d\n2d2fd0e0-5455-47ca-8318-27211ae46504\n3890ba63-d1e8-46b1-b660-1a7392befb95\nd3d3a4dc-8484-4577-95ff-833a63769f54\nf7e313b2-f844-4884-8a97-045a78fcb903\n9a1135db-944e-4c1b-b0e4-31ed308fe900\n77a341cb-5b74-4bd6-af4c-51dce03a4370\n02f8fc01-26a1-485a-942c-5528fa3cc0a4\nc300a876-2da2-4d79-8926-19b3bde3ca4f\naf56839f-243e-44c6-98a7-5835232a3b73\n61e181bd-f2a0-41f3-8cfd-8ee78ffc3823\ne27b343f-f81d-4f37-a7c2-318928f21c7b\nf7376327-cd90-4fe0-9471-f2244b68e49a\nc83ed96a-b996-4ad3-b37a-257de8963739\n4fcbb381-c966-4a6c-8608-97fc2d71cbd0\n0ba57010-75a6-4403-aa89-4676421c2642\n8f87c480-bc72-4061-86db-349cd47c5ba9\nbf6bf0a1-263f-4a8d-9d81-d8115b79dbe2\nac2cc8a8-9b95-4c93-baae-08f5a3887b2f\nca151d04-cfc8-4843-8772-b52946083a4c\n28c5a534-e262-4577-8486-353c826a88bf\nb60ec122-3a5f-4672-bd0f-533cdd5bae88\n43f449b9-bc0e-4ab5-9c96-8aa934bdeb42\n9a50f5ea-7c23-4e53-bfef-2355213a5fde\n74e289a9-a6aa-40db-9118-3a4919ad2769\na1ba144f-7533-44a6-b881-64b4c7e72466\na1fe4a39-8472-42c5-bbe1-fa245c667e38\n6600ad35-b893-45c2-9ed2-d51474597779\n59343370-ad74-4e5e-ab0e-29f54a6fff9c\n1fbd87a8-7e28-42d1-9439-9f4e4197c8a2\n1f96ab88-aea0-4cb0-b470-01916dfe44bd\nbb9b90bd-e50b-475f-8183-62761c216c31\n7b38df8e-f270-4d8f-a243-638770de7d1e\n96d76775-d641-406d-841b-0b902ca1ca94\n37000304-0292-4ddb-ac2d-36ac93fed0a3\nd30292a7-5505-4339-95ed-7579bcfcba51\nef962708-7f64-4b92-97cb-6c975b9f2c81\n27147a47-fd50-4fb9-90cf-f5340a48bae9\n4164efae-94fc-4d0c-8724-7b0a570e534e\n610f3518-cfcd-4216-8925-5de78af320a9\n6c28e299-ae85-47ee-a787-de9b04ae74c3\nfe6583a8-5db1-4be8-b770-4e0a8fb04f56\n520cbe06-7e4c-4641-9a8e-c9ea9edc766d\n7d89a727-fedb-4dbf-82a8-fa7a8c735694\n84cf0f2e-2f2a-4f01-8ceb-074965e624c8\nce6e966d-0cc6-4bc4-a5fd-2346ed603481\n6a8b4bd9-0043-4e1e-90ea-6ba1f5ec205c\n142a325a-50c2-43ac-8a1d-9896c50d3218\n5b967e9f-5a25-4c6b-bcee-16bc8135ace5\n3f91b1b6-e79c-4373-823c-12301ae6014e\na55643f6-8f3d-40a7-8a75-ecc04c9f4f78\n764a936e-d0e6-449e-b577-63456ee0b8bc\n11d69db6-3d13-4b48-bc50-3f33179357ad\n11ea1530-6714-4545-a297-7bdd24a9ea68\ne6ef208a-2949-486c-a29a-e376de610000\n2831d72e-c43a-406e-bc99-2b0c5c59d59a\n123356a1-fc81-4e29-af19-241ca44f9060\n22e41779-6cdc-4bdb-b6f4-34ea147b33dc\n82fa204c-3929-45da-b0db-d93fc8607018\ndab7a60d-c93a-48e0-83d8-7164bddc8ea9\nbc26c9cf-50d1-4d40-9d32-ad5857f7f219\n2d77f406-46d3-4bbd-8105-2edb76ea8c94\n778a5677-f458-4a8a-b125-48ee8a30b77f\nb7dee0f4-ddf7-4512-966e-05ac010ab5b8\n422134b7-fa9b-4d20-80ac-1ff574bfc684\nfbcbf804-e151-403e-8167-4848147bad9d\ndf1e854e-35d9-4ade-b36a-f79d17f014ab\n127dbc6a-afcd-456d-9506-ca32ecd0d491\ndeb0c55b-16a2-41fa-965a-f16d9e6e47ac\n0c6c4f6d-6b31-4884-820e-f3e54adfedab\nb8afe85f-eb0a-4680-9f21-95900725a3bf\necef3de4-8703-4946-b872-d8439f75fd7e\n4e64c057-9a5a-4485-ad3b-980b5743f504\n7f24cf78-5af1-40a6-9cb9-d8f4a63c467a\n0ee12970-a297-4b87-8878-6407d79b3321\n1373a531-82e1-4973-ba84-5dbf0c772c04\n1121a555-3419-42ee-963f-e974f8cb22e6\nf6775011-d0d5-434b-9fb8-9b2b97c74fe9\nc34f668b-4f76-40ec-a0bd-cb7d43eaef2d\n99fe5884-193f-4f5c-8f6e-0dad81d52a9c\nbb906d92-b6a9-43bc-ae43-0ee3963538f3\n96ea9022-d009-488f-b09c-6011f7141963\nc2feaba6-84bc-423c-ac17-7bac2dde2959\nd5310a02-05d2-483a-942a-7e10fca7b590\n206ace83-1b51-42dd-9621-150592632e06\n36ea76ca-75f9-4265-a07b-80d70257d922\n340f71f3-8cff-4db8-b48a-b6bf0108514f\n59ea087b-8fc7-47f7-9c1a-b2961bf9a124\ne6637f42-128d-4829-8f21-56acf64ab42b\n8d9c2b2a-875c-4899-acf7-2c69cf5dfac1\nf04fdefa-f67d-4039-baff-703e059748cd\na83b56d4-7570-4ac0-9bb2-b0f41bc40c89\na50733f5-e5c3-434e-ba6d-ad06d48863fe\nc2c03bef-2f62-4301-82e9-1e36960bffd2\n075ebbdb-2265-4557-a446-7e57ec9ee892\n7ab0d242-4f44-497f-a33e-dc3034587ddb\nbc987d19-e287-4a58-bca9-de4409ee2bf5\nd2e6d12b-480a-4e44-b816-f4b4fd8002f1\n70a7106c-8291-4712-8b67-54d3a7e2777c\n364edc97-e161-47ba-b787-189d00ee7c48\na94c5936-1022-482c-87bc-92712887d919\n70c9d22d-394a-4cba-be2c-60efb2d780f9\n6eb7ebfe-f6a2-4931-8c58-fc6e313afb1d\n166521a6-f9b5-48e2-9819-60395506ee76\n45bda458-6081-4975-84e1-89ebcf093a24\n36eaf557-f20a-46a5-b766-6845516e287d\n7a34adf9-52cc-4c1b-9a87-084d903b4ca0\n2391fe6c-ed07-408c-b0a5-975d50a4598b\neaf6ed5a-989f-4f18-a17a-40c625a43594\nf4ee73f4-b7cb-49cb-b086-01f475cc6f55\n04d402c7-eac2-4c88-b15a-06865b79abbd\n1068d418-ef72-455a-9fc1-535aa5167fc5\n681fe5ca-cdfd-4290-a4f1-c4f3c24dd367\ndfa0ba2f-e285-492d-a2f6-77e5945b713a\nac46080a-df1d-4776-8b99-9666fba623b8\n8110c926-e838-49df-8ef4-350e896e94dc\n5c64239b-6911-4c2d-9e30-04fabc6754f4\n993fac90-8f27-4a0f-8b29-3208941b9d68\n6e37693e-a8d8-49d8-8e22-6fb20fb53590\n0131528d-3353-43f8-a721-64ba270ff2e1\na8a4ff99-4af1-4c7e-b7ce-c598cea691d4\n7460df01-0517-4b6b-9184-247bc0265f39\n8a76ab31-7e7b-4a2d-9feb-2064b90f8342\n61b96f13-712c-4efa-9579-6ded96f68c8b\n3fc11924-3589-4a9a-b78d-c850ec85c330\n1f5aa092-d6d2-4b06-9064-63a6731694a7\n4d8f78cb-2f2d-4f52-8724-31335325f943\n59da4703-49d6-4ce1-afce-dcea27cf1747\n0832daa7-d27a-4411-9247-ab8813450b83\n715a81f8-c999-4640-a353-b927db62fc61\n22d15097-593e-4a12-91c5-36918c4fa230\n32487e44-79b0-4467-a88f-69f521402189\nab1c843f-afbf-44bf-8459-84b411d1aeab\nf3782617-0eea-4008-a2d9-3557c56a12a6\n26399ffe-84e2-48c4-b0d5-b915ec25e9a4\n6837586c-435c-41cb-bd6d-7f5f03485afc\n7f23b9ec-e570-425e-b3c1-13512a5e78ad\ne2e79a59-f8aa-4140-b790-458bbf6ad1c9\na344fcfb-f42e-49a6-9595-277745efbc79\ne1774a60-bf75-49ab-9b30-0605b1c0d4bf\n898e3ada-62be-45ad-81e6-4afb0e585237\na5542301-f2a3-48e7-ae24-b9fcf85f66d2\ne0e53889-2c33-416c-99c0-691a1ab3939b\n8edd95c1-5d14-4137-86ad-f964f69322bb\n14d1e4e3-22d4-4995-bb1c-feec048f6598\n81905c47-fca1-42dd-a300-2bb206740415\n80cd5f9a-6571-4706-a195-1e7120a03cac\nb2aae8bd-14a5-41b0-a865-10a160050165\nd718e56d-bd00-4f9f-8a63-0a4628351f8b\n3c93e8dc-7c08-45e3-9921-0a36413d19e2\n90091398-80c9-4135-8824-e4283c72358f\nd9ce044c-6c75-4374-9624-78d8002cd3a6\n5211ec03-082e-4979-ac5a-9bc0cefdd974\n0a833634-2e6a-4401-96c9-26e5ec4ddda7\n190681e9-2f4c-4ba2-8e9f-2b24b0dc274b\na31dea3a-55dd-4230-a8b9-31256102fe5c\n922306ce-91a7-44c2-b884-01f3cb3d5b50\n6005ceb4-9e23-478d-ba21-0e067e479619\nff1a9a11-fc5c-4212-a1d5-d1d1cd12b2ce\n1829de68-86f4-4566-9325-12d238c6a94d\ndbe7d6f4-9b9e-40ad-8860-7b5de2a1d4c0\n39e7fe21-999e-447a-be82-686d05f60a0d\n9fae80c5-afbe-450d-9641-ee2a7c700ff9\n715470fe-199a-41fb-b902-033c94d98502\n8472d90e-4b21-4608-8046-0bf784b2a08f\nbe2c9472-239d-4763-9e84-eb90934f3a1b\nff401f5e-5558-4362-b38e-e8c6df67ed5e\n678ab9ea-d66c-4db1-988b-73373b51fb77\n24337517-e7eb-49d3-ae71-0b2624a5d4d6\n9f4070da-afd7-4132-9c18-f62613fc9cb7\ne5a11ddd-daf3-41c7-a436-e9859d813efd\n0a4ef455-8bf6-481b-9665-a72d3685441f\ncada4a68-1e84-49e3-98f9-255de4da7c06\nea37daae-a77b-479e-8222-84993b8a66ab\ncf01fd6e-913b-49aa-b3ef-05d527bb59d8\n836d619c-7f88-4e3f-91de-c5ee389efeb4\n6c26dbce-ced7-426d-8de4-08010e925bdc\n54d97061-7ef7-40f1-8ccd-c6c818076536\n2174d45c-2e19-48f7-8705-198b906bab99\n0aabb24d-099f-4ecc-a24a-217e2df32b84\n2f98c0a6-b1bc-4977-98ce-cabdfd719ea5\n421fd51a-2fe8-4a0e-a282-7ba2fcd55e98\ndac7d0cd-45d6-4d02-a420-fdc21e1697d4\n2d8a144e-5717-4c2d-8357-e9d654d2b967\na990d2ed-d3d6-4d50-bac5-e39f72ae03df\ne67b0dcb-29f5-4bd5-9f6a-1943831bdd2a\n84275f58-a6be-44b0-b49c-f5c621463335\n0b8e8c59-6af8-4548-a94a-135df0ccb315\n7d3012fe-9177-4166-95bd-eebe669faae4\n782ef38c-27dc-4377-9ec7-7bf9090a2a44\nb476ce45-8d15-4311-9929-080379fdb07f\n4c5f05b5-ff7c-4898-86f2-ab3c96520ad6\n87b0fc85-f79b-47f9-885d-52229851bf14\n5e3e25bf-2ea7-48bf-894d-0a7fbebeb0ce\n851ff20c-ad0d-4224-a118-ad35bb6e600f\n865feec7-69f3-4f1a-ba2e-e58fcfdb7f7e\nbc78de54-c42b-4927-9d3d-14a4dbbb4bb0\ne6f9fd17-5481-4fbb-864f-39dce7bbecd9\n6b38aa43-29b9-4ea0-9314-245a5a096f45\nedf62a48-e69f-4b5d-a25c-3b7f03ec2522\n9fb824c2-bb15-4a52-83a1-7e3c53524555\na3e63a66-1c59-44f9-973a-4ce28525859c\n2d1e0a29-6131-4fa1-9a6b-3adc3ff510d5\n5cc8e357-fd66-4b27-9536-e24c61ccac06\nc737be0e-37f0-490f-8c83-4c2b30dbde04\n6a422d04-7853-4b15-bdfe-19386175c6f9\necb4ae39-d543-4c3b-b6f4-9d5c052af475\nbaaa0165-8c3b-479c-bfb6-09c4ca9fcd3a\n16ea2aab-b375-49c5-ba6f-e5287284298f\n02b07d02-50f2-44ec-b4ea-6237730293a3\n049c7bf4-3e04-438d-b7d1-976a97e8f783\n7150e10c-dbae-47bc-bca9-56420f53493e\n1661909e-e22a-4619-bf71-dde8ba4766dd\n2f1e728f-046b-4887-8742-ec257b47ca60\nc632f77e-17be-4793-b77b-2f0f19644852\n364d2ee0-19a6-4cd3-8a31-c4860a12e797\n669d0cb8-0cf2-413f-9606-8a2a912071b9\nebe9a97b-c0e9-4aef-9633-421634e5a9e9\nb4039316-db77-490b-ac35-9365979f9110\n6f0bfa38-db48-4b96-8be4-a2e80864a3eb\n8a6a9a45-7911-47d8-8203-4a8e0b874f61\n4c214133-1cbd-41ae-bf8c-5818c99b34e2\n0c572166-2cb4-48e6-bbd5-a8a90e6fe8a9\nc115f0c0-9273-4ac6-8f60-e0356f353906\n97b2a775-b481-4384-afdd-e821b35cbbc8\n0e17d526-42b3-484f-acc5-eedb4bed8012\nc24a64fa-c369-45f9-8ade-5483fce58871\n35ac2bd6-8ba5-45d7-9899-661a31a80a46\nfff126e3-ae71-4da9-bb1b-78e0016904da\n1e570875-3a47-48c0-9621-192a6021d526\nf0d97f1e-e510-45d5-8fa5-ea530bd8a96f\n6093e7a8-5fb8-46c0-a4c3-98a67be5dbf0\n23e233fb-7c29-434a-9599-5e4574c8e894\n17edb078-1d55-463d-afa1-d9e5ac305b6c\ne9d4eb76-f4aa-48c2-ac0b-5a8a7edba3e8\n073fedb6-1446-4525-8879-166bac5eba88\nbbc98d93-e148-4235-9f33-b49c9d1040a3\nedeb75b6-3c9c-4ba6-850b-ab0d27c0b009\nbe5bbb86-a530-41c4-86ea-7242cccbcb30\n2439dfa0-87bb-48e0-bf21-cc24adf3a932\n62b3199c-8a96-4213-8069-7afc0a39041d\n6111bccd-5441-46ab-94f6-1ffc69bd7690\n756d71a2-d709-4b36-ba80-41e16ce77d82\na3d99dd0-ca12-4b2a-a11e-3098ea254eee\n9f8fce0f-11cd-4808-b551-6a98311f0062\n38ed8aaa-42e5-424a-9389-f235cc55ee0b\nfa34efc7-1cb0-4a9e-9342-501bb9bc2c1d\n8991af25-5ca1-45ba-b517-9dae73a5a915\n884b925f-ee46-40cc-849a-4e9b693b94d0\nc9989971-690b-48e5-bcbb-2097fbc49b2c\nec4ae6b3-8189-44cf-9a7e-c2c9559f31e3\n12a18aee-12a4-472f-ae87-f17fa0eb59ba\nb654eb27-e744-4223-8886-bbf763ca2155\n3e2ad1d3-a311-455f-8117-7c71c44c5534\nd4bfc29f-4eeb-46e2-b64b-50bfa2f77df4\nf3b6ba75-5c0b-4f50-8407-804154583faa\n4a644343-4a71-4367-8204-e022f25ca5dc\nd52884d1-9953-4b7b-934e-720fd15a3f03\n46f7e4a2-49c1-47ca-9504-c02439d742be\n47944bfc-1849-4901-b5e7-a34e1a3fd998\n33e241a9-4feb-4494-ab16-5ad72271736d\n2bd493cd-bbce-4f06-87e5-243ee954681f\n2659a818-daf3-43bb-8a08-d615ffa9d040\n1aef3f70-76e1-4203-8ca7-6d93e34e6ab1\n181b1929-6b2e-4eb7-ad66-c57d982f1168\n79bcec2f-ded4-44a6-9b10-9bf768797787\n961828ac-c559-430b-8bf7-8c18a95db7ec\nabddcb33-7324-49ef-bf2f-9c39afcb73aa\nba8426a8-1464-4087-8210-9ca872e20551\n4fc36e1e-e9b1-4c53-9048-08a73e9e301c\n18e066c3-b169-4e78-b7b6-83cea7241381\nad704821-e802-43d7-84ea-3d1257b593f0\n036548bb-9faf-4c36-b9c3-004e741ca773\nbbc49e43-5baa-46a7-a154-a0483accae26\n8006317c-789b-4dc2-a280-4ba2020af266\n73f79a2f-fc1b-4f11-91b2-792e32b03ed9\nb9aaecb4-9918-492a-8e62-ceaaa6677a33\nfc5d2390-9e60-466c-bb4e-d7fe0aa016bf\n75eed042-f64d-46f3-8193-b33312db64c1\n38676a3a-70cd-4dad-94a4-76ffbc81c867\nf000c383-b98f-48e5-8bc6-25e6a0021889\n4f768f42-20d7-40bb-ad51-c366e8840f63\n35393c9c-9e14-47cf-9e16-ba14532bd250\ncfeca3dd-5779-4c93-93bf-142ee63a24b7\nc43ae7af-6c42-497d-9372-b611c70daf3f\na80276ff-732b-4bb4-81ef-a6d04016bd8d\n242d1056-32ef-4117-9fd1-d9d56fc9488c\n7e11052c-a826-4afe-b90f-c42ae5c19aad\neccb6ecf-7752-4d97-b6d8-c49b4b83e9d6\n8e7e6a13-fd6f-4a9d-9920-e330fd8ea15a\n582c88a6-f706-48a9-aac8-f3f9b6f27e09\n31c642fb-f59b-494f-8fc6-138c85fc23b2\n7644fd0f-9096-4441-849a-7986dc6bd7e0\n826fff81-e4d8-430a-b706-d0f0948fbf0f\nb42b88d8-4eab-4671-b910-9bfa9c705854\n51344aa5-1d49-4d6e-baf5-e2a38b5d16b0\n99fd4ac7-f9c4-4320-8a26-ec2138aa8f57\nfbc63280-c5ab-437f-8d3b-f89ac2099d05\nf43bc919-6989-4dee-b506-6089abcd3a53\nace4cb2d-7131-4cdf-bb82-66b0ebb80bb1\nb90f20d9-d28e-4ba1-88b7-5a6d5905e72a\n9f4c9fb5-adff-433c-b203-f81e444ee8f9\n32ef4610-015b-43d7-974a-eb5278a3679e\nbcf40e7a-3f1e-42bd-8467-acde43cd6ae9\nc7643f6c-aac2-43ae-aa66-2f5ce17400bc\nb0c9afde-d478-4aca-9bc4-4ebb4e142580\n2f2dd434-954d-4b60-bd70-f13f5ed0d393\nd937332e-4e12-407e-b578-875f1e884c09\n7ddbeb22-6a6b-4506-9548-103de2d1a87a\na32b6703-544e-405a-b878-05bce4a1fa12\n59b740fb-e24c-46a0-b2a0-f891fb49e40c\nc447d7c6-5aaf-4313-b2ad-c6c14b63ff26\n4ff69f00-1b26-407b-976f-e275ed5c5b5c\n604c9d42-6b21-4ec4-9646-9d6364ce9ddd\nb631f5b7-ba08-4d22-ac42-2eeafc6b674e\n6821bd72-f4b6-4be1-8d70-9376abc1af45\n30116696-34b4-4409-a290-14342df5d44b\n072de5b0-5a79-4722-b5cf-129a154f7d63\n7226ba3a-3318-49b5-a6d7-ee55d58cca7a\na502ea57-d9e9-47a7-b638-42d00c9c166e\n87b77401-03cf-4ca5-a9ef-ac315c018aa0\n74228aa6-d98b-401a-8335-3b1b238ef124\n2666d609-6159-4206-8697-825262a04cb7\ne193f592-d77c-4185-8682-5da3c3682b06\n86049667-6568-488f-8eeb-628ba63ace5e\nfa5157a1-f1e0-4450-b9ba-7f524558afb5\nc2d52f55-1b96-4b0b-8d8b-8872d9557eb5\n0cff8eeb-d1f0-4bf0-bc6d-343f097a7b6a\nfff91c46-5142-4a27-a212-385f1c74c7bd\nf9e8d223-457c-4993-9906-656b6e03fd5b\nbaf7a9c8-4baa-4bf2-a613-ed95d7d0a0e3\n35074361-bd0e-4322-988b-64b729608a47\nf9e52be5-fe27-4aba-985f-64f1651e6157\n0e02cbe8-8a23-4a02-bb40-5aaa8ba7a331\nfd8d550e-f9aa-4a83-8867-924517827e02\n62b2fc1c-4452-4b34-adfb-4f622c3d53e0\n7ba2209c-bc05-43f4-825d-2dcf6a952b12\n26c07c78-9a94-4860-ae39-6a7355b97c8c\nb45482b0-8936-4082-b171-8183f595ca4b\na6600ea7-f8b7-42bd-927e-fee22fe6eb69\nfbd2fe33-b36c-4423-a63b-a09278eb7da1\n8e6e21f2-ba06-4f3a-b38a-b219521c8310\na6cee27b-3461-4a67-9725-37de0f22a768\n760510b2-db0d-4313-9c3c-acc6bca3c574\na5da4e75-b829-41c7-89df-9270a88b31b6\nf6882063-b419-47ed-86af-0127a61dd353\nf278c4dd-3cae-44a1-97b6-2921ef85092d\n0129512b-c256-4564-ab21-18cba49bbe67\nc07c1028-386a-43e2-89d6-0e6651e7e8fa\nd6a5895d-f721-48b2-af9c-03d4083f2f2f\n781e4be5-2567-4215-8b56-1f20f480f7c3\nf93e83ca-3623-4904-b353-39afb3681423\n1981000e-d51e-499e-9ba9-fb20425e8361\na6d9c596-e55c-4412-8a5a-d1379b0251e0\n9853ab79-eac8-4587-a5c8-a2200ceb0f11\n358fee85-a4c2-4272-94e2-31bbd77369ae\n4cf162a3-111c-4cb6-b0a6-9a408338a79a\n312389d7-3446-46a9-ae14-1eea6949d281\n30d4c491-8a43-4bde-ac7c-d8f37e3fd2d4\n32fad153-c18a-4081-bb4f-14118d0f8bdc\n67d84421-a16c-4e41-8bea-9aac0242632a\nd006ee09-7ab4-4334-a5a5-5cb050c356cd\nc0772a2c-68ae-4309-93e8-f7dc8185e540\n5650c34a-51cf-40f0-a04d-0a4bdd77bbe5\ned09cb28-8293-4006-8e40-fb594db49b84\nc3921656-64c4-4182-9bb2-dd9a21957ef1\nbe51f77e-1992-45da-9ee9-8c9161059994\n8b048d9a-d1a6-40eb-862b-8650f1bfa279\nbf74645f-fb91-4f69-a1da-63e7e70b180e\nc5677363-a5d6-4db5-a112-629e0af1bb83\n83a4181f-2e33-47df-b17a-099bce2575db\n49cf8142-1eed-48d3-9e84-661be5c571c5\nee3b193d-1c6c-4374-801c-828f0913cf79\n2b96593d-3533-4823-a549-a36baaadafab\n45a9db63-4b11-4618-9255-51f8103dc7c0\n1e37e051-393b-418f-851f-f1032ec91800\nd4286949-ae07-4978-ab82-8822315d95e5\n54e4dabf-d5bc-45e1-a9f9-b927483c2689\n5ba97c29-2526-4202-8a9d-2500d0ff7c22\n7cfeca0d-86a5-4a17-bca2-2f6ec257a90a\ne3ae1742-75aa-4a93-baa2-070f85a49fa6\nd806208e-60b0-4b46-bf6e-6fbd6d22fd67\n44431e71-0b31-4e7e-b1c5-fea4168dc27c\nf3d4c3d5-379a-4407-bfcf-870ca43a6dcd\n243ac335-fec0-48c8-99d5-75a65cddb746\n05b206cb-3294-4b6c-ab81-cef91583fa91\n5473bd7c-772f-40c1-a8d0-447d147ec571\n20299662-1c15-4194-9187-704470bddd61\na5aedd23-9dff-4657-a422-7b84d5568d8a\necf03516-2e46-43e9-91be-1d0e16b981c7\ne2a2b3e4-24dd-4cb6-8fda-a1ccc5db31d5\n8c0d90e2-f44a-46f6-8743-e7f48e0908d1\nb65dd500-e442-4312-9da6-385c49dcef4c\n16052b12-35bf-4d25-be7d-40fa3276ac43\n4724854c-2df6-43f5-8b2a-73a5fe86233a\n2da30f7a-fa05-4a54-a8e8-256937e0bf37\ndd9aa420-e338-4307-bfbc-2735fbe9587f\n5f35d0a0-8c60-488e-a79d-4286214daf82\n661054a8-9348-440c-ae55-c37354ef26d1\nd47e367b-9a05-4e25-a495-b0388100efc0\n7056e14d-51c8-49c1-8157-22d4b30658e3\nd5dbd036-56af-47f5-befb-4478127959d8\na92da349-92d2-4177-85d5-d1af82f91cd8\n8b9c2269-35f0-48e5-bb6d-ca64c11b78e5\n4746b023-c3ed-42c5-9978-4bccba5e5fa7\ndc224a2e-2733-4ff8-bbf9-b9d5e738ff65\n4b89f7e5-b72d-4060-9e8d-db4faa0d710b\n0ffdc3c4-7d5d-4af6-b514-19624800b1bb\nfc9d4a64-6cbb-4bfb-aa6d-086b99773d02\n5e368231-1715-4c4a-8484-f6e766a91ae9\n8b5c3333-2d75-4e3e-941c-a573a7bde198\n5b774cd3-d5b3-4c9d-bdc2-da064c039561\n5cadfd22-ec2b-4cb3-bd15-d52154727299\n0a442476-2a73-40c8-ab68-8cb8888c3512\n8c6885c6-bd68-48d6-a134-4214426c61af\nc88af0c3-e182-40d4-abce-67da5062f014\n769dd408-3772-4896-8f69-a85c4f5e32e2\n23ab7e5e-8b65-43e4-ab9f-d9910d1db01e\nedf6a1aa-a064-4693-a2e0-d4702d3300f2\n6f182a24-cdad-475d-992a-f970394e3067\n5e023656-f49e-4ec5-a250-9ddfb2cf2ce7\n2148cf98-3c94-4251-824c-17e09de44aea\nbbf9363a-046a-4b69-a740-38979f97c96d\n3be0419b-e2d5-4c18-b6eb-14fb18ad44a6\na9cb458e-38ad-4a99-b3f5-4a935f0d9ab9\ne9c0bbd7-f7d5-41dc-bc90-df9139aba739\n13bce63f-9256-4d1a-a158-cb1ec2d529b1\nc205e36a-61b9-4328-bb22-4b2ece3a1f80\n66d622cb-d3ab-4bf1-98aa-3056b584d517\n1ae6a74e-bbc2-4cb4-adef-c1631835c88f\ndf3e4ecf-0180-4e26-b543-50f82683c051\n8b71deb4-da4c-4f16-bec1-69a4b85e2dbb\nd278bb5d-cc96-4f87-bff3-ee945c51a5de\nc8b3c91e-c1a8-480e-a4b4-8abd840ff827\n7cab6d75-d9a5-4b98-b404-76e734eb8268\nf814b34d-45e6-41a9-975e-d64c2b55d164\nf87ebff6-cddb-4f69-a202-b4dee35b237c\n8a1d88ce-97c0-4ba6-b919-cdcc2989fd20\n79b74a8f-0c69-4f44-9c08-855582225659\ndea1b965-330d-4515-b39b-a5dc2bd76dbd\nafe6292c-dd96-477e-9c2d-bd8aa8540baf\n55d4b149-2d97-40a2-a1d3-9b5d891e5925\nef75895e-0c46-44cc-a91b-652baca841e6\n4ab151df-970f-4e37-bde1-e61675c6d4f5\n5c191774-bb1b-48d9-97fa-412b08d31af7\n97265275-596d-4861-b698-cd7a4c3281fa\n864f5d7f-653b-4343-9a18-e945cdda626d\n3ef6d1bd-6fa0-49ae-b302-c4198d32b865\n0588e30d-6351-45ba-8507-dd0449e827a8\n74a7f20b-1704-426a-9a38-d3d92d06bb8c\n52a13ed0-18f0-440b-b460-53c4fd04f222\ndcf8a989-e984-4691-88e1-599b3c7e4aa4\n95b2d5b2-712c-4505-a200-0a84ee2cecf5\n5fea6394-4afd-48b4-93b2-c9eade00e801\n45a7bba3-180c-4531-ab58-265977bdd08e\nb6781939-ebeb-4031-8c29-42ff535873e9\nc476ed2b-31c7-4ef4-b30d-5101fa897010\nf6dbc05e-924f-4033-8a69-189a907ae4b6\nb98f9779-95fe-45bd-9565-dc69d70cc639\na5ca8877-8a6c-4e80-998b-610bb372debf\n4bbb3bfc-a56a-49ed-bd87-41f4574d2f31\n20f345c4-e4e1-4bdb-a3b4-0c54ecae56a9\n9b80582e-f7ae-4be3-9561-ec6dfb7611e0\n29194708-7528-433f-9b0f-7c0cd8b637cd\n732c7150-6803-4033-9fda-70f6b44fb243\n17d358a1-29b3-4d95-974a-52d5c701d976\n8408d600-a6de-4f3b-ba63-6b34da0eac20\n05ba5ced-de28-4420-bfe6-0ea25a7279e7\n00597f6e-8188-4925-a494-b3b1b9e17d93\n5e4a2956-05a3-4f7e-a691-23c64ea2a5f5\n0a3d30fc-38c1-4c5b-85f6-71a17492863b\n1aff9601-36db-462b-984f-634b426ae7d5\n3594a32b-32d5-4551-9128-ee4723e0565b\n75b346e0-c9ea-47d5-8813-c22534974092\n1de55e32-b1cd-4316-bd53-7cd8595a4e58\n312e618d-4bad-4d84-b1f7-f67a0c0c911a\na2d4874f-c94a-4b39-acc9-28e1633490da\n67c8cd2c-ad7c-4d39-9d9a-12996f1515e0\n05deb938-6346-4909-9ce3-934168d5b1bf\n697fd039-5ff5-4fa1-8c12-1e7b6bde250e\ncc2c2edf-4ee7-447a-9c8c-d5f9d7722877\nc046e387-c7d5-44c8-a2de-95b84c5aa3cd\n4aaf7575-7ae0-475f-8333-fc3f5b7a4529\nae9f10c8-0450-40e0-b0a5-a7fb163f26cd\nbd495c13-5228-4d9d-af1b-773c515feecb\n1a31133b-2977-4f3e-869e-3d98194aa5f5\n6ab85271-756c-43a3-9e08-c83890884576\nec1eb81a-c29a-4733-90ef-191f51df399f\n965fddb0-4c74-4c05-9a07-0da97680a040\n9907a21a-a288-4716-a014-b6409f389afd\naf265627-91ad-45be-8c37-b9bba6a66912\n87c69655-2099-438d-bb81-6afa958ad658\n4b8f5486-d552-4ee1-8deb-faee0a943822\neaec068a-b5db-4472-885f-72d7f6223d34\n60ed45ef-f215-4bea-9b24-a04d0ecb1ba2\n28b27435-c436-49b3-bf38-f78799ca75f2\n1c3ef182-dd74-4bc4-a155-238bd5ae60c9\n2caeae61-f611-4080-a70c-9929d6e87361\n10eba6fd-17aa-4875-acba-e001b60d3deb\n683167a9-0698-40a3-9d5f-ecd6dd5d2464\nde6b234d-87e0-4dbf-ad38-e889b859e1e4\n571ae99e-5130-4e05-b621-8db1e130c0f3\n94d4b37d-5ad3-4e3a-a53d-6aecfd58f026\nda7c0ba7-5cdc-4d04-a5b6-ab06f64ae84b\nf9bfd7dd-7874-45e7-929b-ef6761f380c7\n5672486f-d4e0-4eb3-afe3-dd2effc8e91b\n280b6d5e-be19-4c4f-ac1a-5988dfaf2240\nc725512e-0d6f-4b8d-a94d-725c9796dabf\n1cd6cec9-862a-4170-8fab-f0e36646503e\n0395a0d8-eb7b-45fe-8aca-b9abd99c95a7\nbba89fc9-be8f-4abc-a84d-9116fca2e720\ne068c768-cc8c-4de0-84e4-c3b0876babdc\n1857f481-5dac-4dc2-b28c-4e9d2244af9d\nb6d2c9c0-74cc-4599-b49c-ef53fd1b7ea2\ne7f217a1-5c9c-445e-b0d7-58131b7ec2f1\n1d861a78-bde4-4c60-90a0-4a7dbaedbe86\ne84e6927-a086-4924-a261-c7246cba78a9\n5a50d559-a601-40e1-891a-0bde886f7dd0\na21152fd-615f-443d-82a2-bc88224d9b11\n2be8ffad-4a4f-4423-b9eb-0fec74a41aab\n4dd7b2e6-182d-469f-8a87-3440c41be606\nbe98431f-83bb-4d49-b0e4-3a2c4cdb05ee\nf256b3f9-7499-4d58-a2aa-90bd45ae9615\n93ac5a5f-1b6a-4aa3-90bd-d31cdc992bfc\n34c5adc4-b686-4d9f-9613-0019b51eb641\ncdf989b0-5357-401a-8f98-7a0cd1637a80\neac8a906-e14e-4dae-ba98-87b98666d37f\ne56781e6-123b-4749-ba2e-1b3f2a25bddc\n14751326-78aa-4a66-8173-bde6c450ee17\n906f4951-a310-47f9-91d7-f79a7f97df0c\n57f13709-41c7-4e14-9c57-52321a091d56\n27aee0d3-f655-409a-8c0d-e262ebde6967\n701194c3-5050-4481-9bfd-fd607dadda33\n28bdb2ba-9d59-44ad-a76a-b917f7445a13\n641fc255-62fe-43ba-9be2-ccdfb4fe2452\n0899c3db-eb55-4264-9a33-cde0a0a11780\n21dcd7b1-0e7d-4604-92e3-bf2f0b5c3f06\n20460d23-e34b-41de-8de6-a1833105b1af\n653ef7cb-262d-4dd6-9337-4b2515678606\n6a45e47a-24a0-4554-a30d-51a1e8dcd82d\n2a69eb1e-3a7d-472e-8389-112e50afdb39\n31ddd9ca-7272-4cb2-9720-74d278593525\nb3afc859-0714-42a1-a599-fa8e2b521bcb\nfe89b666-075f-4fd6-919c-b6bc46e5fb90\n92d253aa-f5ed-4469-aad5-1b1464177a6c\ndaa6dae2-d78b-4c0b-bf44-9490cc9d3add\n61033389-e214-4a33-9abf-adb765e86204\nc84ee5a6-91bb-4d05-8028-b70a245ec705\n9f7f1442-53cb-48c7-b476-76f08f36e81e\n60237ff2-5034-4d13-946d-c6c3c29d543f\nb217bb6d-6166-4212-9727-6fbfb7c5a84f\n76941440-5c13-4ac7-b54e-c167f7ce93d2\ncbb1dd59-3486-4516-b77c-ef6bb118ce63\n568807ec-b172-4e43-8bf9-f27e7cd61171\n3aeb647a-4c21-4b8a-85bc-eab9414b9946\n248068ad-995d-49a6-b2a2-c9b33b590cbc\nab235e81-433b-46b5-a1fe-8817bed9333f\n01c2ccd0-89c2-4d20-81ae-b0b6989d0908\ndcafaf58-9f1a-49ea-a89a-46d50a78e2db\n0e6c5fd8-d784-49be-bcf2-df4c2316abe1\nff72e6a2-7b63-45a2-aca5-e180d634c7f2\nb44cf814-0c83-4f45-9f7b-30acebcaee53\nb4f94c76-f4b8-48c2-b7a6-d391b0d2834e\n4fbf1111-e20a-437c-8f90-dbcdc2f5be0a\n0c8d2c24-e1e2-40c1-a07f-655c84d58312\n43b60262-c2e2-4d29-8430-4e4dc6dc4355\n982d4015-6da4-4b23-94e7-ac9d6fd9c4a4\n1426d21e-7e8c-4965-90d4-1d68d136b8a6\n84c9745c-d1fa-4964-863d-00c5ac956bd2\n78c7254f-01d2-46e8-848d-037b9520e7f7\n98715f0b-51fb-4220-9501-bb1a2760e22c\n0b77d5cc-ceb7-4e97-82aa-99682cd668f5\ncd203df2-4313-4e41-b7b2-5229abf38544\n88d5de9a-7559-4d12-badd-25698b6a0817\n91ab9adb-557d-4450-8c12-866a651ba0ff\n0595fbe2-15a1-4894-8421-3bfa62bd0457\n7543c90d-2ba6-4fb6-85b3-55c233cbba87\n90494d87-f3cf-4456-8e2e-92afd5098a09\n5f7d0500-e7c1-40da-af98-a34afe7858f8\n7ae528bf-6d7a-4045-9925-d5eb0f9865c4\nc7af357b-7396-4c44-9ac9-0701985e3453\nacb05455-ad56-4da7-b1a9-83faebd71825\n7ea0df33-28d3-40ad-bb01-321dac406bb7\nff11cb0d-9b69-4321-8077-83eb5235578c\ne45d6258-4076-428c-b44e-68bd1ef985e8\n2d75bf0f-d1c6-49bc-96c1-865d4056ad90\n75da33f9-48dc-4e0e-9589-3ed71911ab93\nf36859dd-55bb-4c7b-999c-017c18380fd9\nfc3a603d-0b1c-405a-90c4-55853b993c42\na1512a3d-70c5-427e-afc3-79110f56f528\n6439fb39-41cf-4518-95a4-caba89f0c7ea\nf2e8369b-e6bb-4eee-a4f9-bb680ccaf6c7\n8d922669-dcab-4597-a002-2e998bfe50f3\n0c56d72b-db67-44da-836f-f0e7cd338450\n57726555-07a1-438d-8f6a-d54035c9a508\ndcb4f0de-cd31-4dbf-887f-347edbc575ae\n1199cbce-9df4-4236-889c-2568c60ce60f\n0de76d30-86fa-4cf8-a2fe-dc04144df10d\n0c2c9bbd-af15-4ed8-85df-7fb4de0a294d\n8b6924cf-613a-4ce4-84ff-a63e042769a0\n4de1d409-617e-46c3-9ab2-60b858ead3d4\nd12a6d44-588e-4918-ba93-5e50e860d3d3\n8e3f0b15-a4d7-4f83-ac61-bd6fd3e7d6ec\nda22541c-0995-494c-8fc1-91befc3fef9b\nc77133a1-367a-4115-b8f8-ccc056480989\n8df4b67f-c77b-4e88-b2b2-429569f0d6b0\nfa1dc35f-f8a8-4f6f-9dd4-d9063d5017d1\n5e745689-2630-4913-becf-9d440d625fbe\nac77fbd3-0e41-4b6e-834e-15133988c6b7\n155a18cb-3a73-4d15-b325-067a8ea4a1a7\n07d6bb6e-46ab-453f-8370-1b84dd066860\nb2c79a6e-57ba-49f8-8adc-00418db08bb2\n697b6271-57d4-4f33-8770-839dbfae4c01\n7546cf83-a9b8-47e3-ae7d-4e257aa9882f\n9e297cce-8bb6-4043-b5ff-711f4b88dd84\n0e0b756e-096b-42cc-b537-fedbb3ecbc29\n8536936a-8f39-40af-b6b0-0ee2d9e9c281\nf086b8e8-6aee-46f6-87a0-80062dca58d0\ndef7ddeb-4b0d-4639-b9ad-142f231bd2ef\n386cc295-b699-4766-8ea4-2cacd109a546\n7f8c0a65-80e7-497a-9a30-ba9280c54691\nfd03486e-32e0-4c0f-a3e4-54fb91c76f55\n2e7f5b2d-5635-4d3d-a544-d98c2c94f5e8\n69862a69-4652-4d5c-b1cb-1173f6a54ddf\n5aa44021-f9d9-4364-b753-bdfb8b476c3a\n8ba038c9-db2f-4cd0-b0d7-964c26709872\n920457db-e6b0-47bf-8abd-056b72cc14a5\n4b0facb5-522f-43e9-884b-72cab8270355\nfa1b07cf-6b31-4dbe-b1e5-0e28f4852db7\nc3e3e296-5d28-4115-b0a7-f4ba5da4c4f3\n018def2a-bec3-42cd-9709-d988239690d9\n0b0c7358-3b16-48dd-86d7-29c133f7ef20\n53bb9922-f704-4de0-bb66-f4d45e5707c8\na2f5bfa7-a1a1-411d-8624-7a1be1276d40\ncc1d47c6-d2db-4673-8b23-eb8f8cb6b178\nb833c39e-3297-499b-b286-8da0a93a919c\n8b2a6126-c27a-4aff-8917-a0b0d521bc5a\n9719a942-ad3f-45a0-a2ae-5ced2e771e78\nde5bff5e-8503-442b-81cf-cc3a870af46b\n93703fce-bbcf-4cfd-b1fe-730e4bc4147d\n8d591e29-4b15-415e-994b-7e37763e293d\n142bb2b5-8b5c-47ed-940a-c5408d44f97b\n63f78ae9-d102-4eb4-81bc-c53d7299f280\nb72ec78b-ae03-4971-9dd6-f8603f8afe9a\n925fa7c7-7b73-4e3a-b596-2703fe1bbd91\n8132cdcc-a58f-433a-ba61-c1d10331eab9\n99a593bc-5030-41f8-b383-32d2a505faf1\n970bfe16-4a3e-47d1-b271-9ad487e33fc7\n51cf7f09-5c37-4342-8179-4fdb4b6ebd36\n1cbbfd68-43a5-4c81-b32b-de1d5cf2580e\n60328a27-b08b-44fa-a53b-74444eb5b099\n6ce6974a-923c-4a9b-99ac-c90003c76bfd\nd38c82c9-46d3-4682-98a0-e5f4545e2375\n90893341-80ee-41e8-9cbb-4b0b2749ca9a\n055b106f-af5a-4ec1-a56d-65f812adafc7\ncd1acad5-3206-431d-99ac-fdcfbb5375ee\n38877408-996a-4769-b75e-88c60bc02851\ndb91cd36-0ec9-41c8-bcea-d618ce970543\n550774d0-56b3-4f17-af73-0292118ddfe1\n35111e6c-4510-4385-9594-6633ecc5486c\nfbedcfdf-ddf5-44c7-a3ad-117c5e4be144\n3f4c2957-6152-4830-ac8e-d083d856c84a\n8ada09a4-9b6b-4a2d-8f56-f0451353ac94\n15ec3ee1-b941-4762-85c8-78963326c837\n017a035c-afc3-45de-bff3-f5c86ff6eac2\n9ce4dee8-c7a9-4d8a-aa23-85cc71469700\n2ab9b829-671e-4d8d-a992-f545d6fd4beb\n9c40c38f-5668-46d5-bf5f-8dad4f7997cd\ncaa45161-6c61-49c7-83f6-5b43bf817bcf\n38f18466-f01c-4d74-9b14-43e1abeba0b2\nb919662e-17ee-4cfc-a26b-3265bba326b7\n7d8a4141-8dfe-4585-949d-0de2238952aa\n93f02b38-3bed-4af7-a640-3472b5ec09c3\ne140b033-9e6f-4fcc-943d-b4953b95ce95\n26783220-7f60-41d5-9056-781edc2f2c62\n6f83ec8b-627b-4205-a176-e20c661db218\n7ae1c320-4049-4e4e-bab8-bd35c1ff78dc\nf422b370-dc24-4e3f-bc5f-862b97ba5b50\na9d72d21-910c-4979-96ed-58592f4331b9\nee51318e-bdf1-44cf-aeb7-f7d0a7503b3d\n3ede6c16-131a-48fc-80a1-c443ba146fb7\ne09b889d-1b01-4c55-9ffd-632ab8968899\nb3c37170-2a81-4a40-b62f-8aa2007fcf83\ndf964f67-9c44-4d57-ba67-34a5e0a74d18\nd54ffd12-ff84-4129-9873-9055d21e45ed\nb5019dc1-534c-47e0-9585-89ee7dd5179d\n65f9a9d0-febe-4b7f-9fcc-e6f06b01dc3c\n440c2989-2870-46f8-af5d-0518102b6349\n4b31696a-d526-4f22-b896-d948e66a28a0\n0fa34b8e-9f93-4a5d-9f2b-d627f3103d11\n39ac91e0-90f0-45b6-aff3-cc81a5af4b5f\ne08d1239-7c5d-4991-a352-b7cd62aea10f\n701ead6f-c06a-4785-bc3f-08819b22f0b2\n314eaa1f-2ca2-4e18-8c6e-a4d5d227d36d\n85becc98-e3a8-4d71-a003-f74bf78d0972\nd3183bac-617f-4ff3-94a9-463146ff1d0a\nc4b1c6d7-ba6d-402e-ba14-79dde25d9799\nf2daac1a-4d99-4c5b-8207-76b00c84c261\n818ba213-3f51-49e4-b0b8-a3d7519bb4d3\nfc4e9eae-38b1-4229-a109-bb92ec8a6c5a\nc53a27a5-85c2-4b9f-8070-c55e481cabb2\n0687432b-d8e5-442e-a592-e638c07eb52e\nf43ce0c2-19bf-4925-8313-5b2d09c101e6\n36a6db10-609e-426b-be8b-90b263cb9401\nc867c3ea-0b8b-41b6-81e2-281984681f69\nc3929067-0ff5-42df-840f-4307085227ac\n2d01d055-08d4-4910-88ac-a6390328b15d\ndaff6a07-5d7a-487d-b9c8-5cf60613f362\na77d2c94-1e28-4a0d-87c4-d28293fd401c\n008674ad-6d91-49d3-8e27-f69a90338eda\nbbe4c836-5e38-4ff3-9749-cb2d4a546cff\nee242439-cd8e-4fca-83f4-72a078307aa6\n2f6cfe65-1b6b-4b06-ab9d-802c1f4cc030\n7c73867f-0ff8-4466-9324-0af2db364545\n11d790f0-a0e9-4613-86c0-4105988fae5b\n519f5e6e-2c10-490d-8877-6c2dcd3fb449\ndc99e323-a268-4fb7-b4dd-4c8d8a6532fd\nbcf7ab0d-ef0e-487d-b26d-002f77a7c900\nf860c2a9-d36f-4309-9ddc-416e5cb6578a\n07164261-cd0f-426b-9880-c5a702099c68\n8b789021-bf60-4c9e-8d89-224d354b1bbd\n79760995-b594-44c2-8348-24bdd439a728\ne06a7055-082f-4c72-a855-71adfe8a2037\n557885af-2642-4c12-bc9b-382ec14866db\n3e296e94-43a7-4df9-beea-53592af2efdc\naa244af3-6d2e-4ab3-b9e2-f013d30c60c9\n3b4a03d9-4515-4086-803a-cd8b58ed39d1\nccdedb22-9234-4759-9ffe-ac2e9564d17e\ncdd511fc-e9eb-4076-a4d3-fff414116c75\nd3bf2174-0587-4b09-bf57-e9bc77b2353c\nd76f35f8-07ac-41b5-8c64-0eefecbbb1e8\n3c604958-fe1d-4020-b8ff-65322ede612e\n32110c6b-7615-4612-bb6f-0cf9ca59ee44\n3b29870f-2c6a-4b6b-8874-e204ab0994e0\nc2881542-7566-42a4-a992-34ebdba9ed02\n84af852c-5da5-4e49-bf2a-cbd0c520c450\n06a3bb18-4e95-42f1-b209-515d17d2d9d4\nd650f9aa-1c36-4135-bc25-df930ba624fb\n83730397-92f2-4403-b06f-226c9d5544dc\ncdd54c87-849d-4d04-8850-79e11657c060\n1bdbb40d-73a0-4b33-85ec-4a4f1bc1849d\nf12d0fa4-a915-4c51-aa1a-a85fbf50bfa1\n98fabc1f-9657-44a3-921e-bc7fe30143a1\n33c8e9b8-ada1-4e56-b0f1-edbe68b48517\na4f9c2c7-a3e5-401f-bad2-b8c2caa6f7b8\n355e6016-bb8c-4f3c-9561-4aba73ee8f0e\ndd9f1178-115a-40dd-b2a9-dd545e74574f\n2cf72c10-d135-440d-9b90-3570fd02f538\nea18509b-636f-463f-88bd-b2eb2aabccaf\n585ede87-4307-4678-acbb-e2972245a1ff\n6665e2b6-a740-4ebe-9d31-fc53793ec165\n6211c7a7-3b10-46e1-b5f5-0b00dd92a080\nc2255828-f5b2-47f8-af90-5f0e5ec97f24\neb3e9a59-bdb3-428a-acb1-f76b0a1fa3d5\nb33f1de6-b6b0-4e99-9576-c98f256ec2b6\n4c82ba1d-83ad-4ff1-9162-3369be0501ca\n9f3ec7e4-db0f-492c-9a51-ba34bb2f0593\n3de73eae-1596-4cd3-a679-6beead73656c\n25b22d3c-ff79-485a-8683-51902c5119f6\n5e15cc9a-3320-408b-a551-11e83cd32d71\n5a360b99-66b3-4637-bfbe-d55412fd844f\ndc1ac9d7-804b-459b-be4d-3c99be7d0db2\neb882052-5015-4130-96a7-5ba3276ecd12\n7f99f92c-b55d-4b2c-a73c-6bffabf93d48\nf033e67e-afdf-49c6-837b-8f3c08f1e71a\na0f5119e-9e5d-475e-90db-a8c6e40d7e99\nae9c1f2b-c23e-4a5e-8ada-fe316d74f92b\na7c314ad-5541-4e85-81b4-b555d181dc6f\n917d949b-9b0b-4b5f-a6f5-9c1fe7aa9f64\n872a83a7-ab7c-4a97-8ae7-248413026352\n85887400-67a7-428f-b611-1e4a0158cf4e\n0ad790fc-c936-40ae-a01a-0893fbddf466\nac4326ab-ded5-45c7-a35f-d8d9862cd8af\n6d1710a5-6b35-4926-8be4-063d553ebfd0\n5ad86337-5af6-45d9-a1a2-adf7dd3c67ab\n794f14d1-94fd-402d-9582-7c770fdc6981\n2b1a22c0-ff96-4f6a-84a4-99a06f50a7c9\nab3b1650-c7bd-498d-b512-abc13f0ee175\n2b6fef97-5db0-4372-9eaa-b1a3ad28e721\na76ac6ab-6118-4bb3-bc8d-07eb10d68256\n9a31a9b6-628e-4c89-ac68-ec2c085e0cf1\n5a922046-e68d-44f6-a7f3-4b91b6f03a23\n5a430442-3f6d-4472-a74e-8e3d7dd37c2f\n57294a99-71bc-402e-adbd-0a609148a46f\n1a4de9b2-efe9-4930-982a-183667cb2939\ne671a7d1-2d87-4689-8d37-6975997cc7d0\n81212b4c-5f42-45a0-8bf4-e7297ba340ac\n7e520805-69a4-441a-ba45-61d42a7150bc\n05aeaa72-793c-455f-a28c-3eef45382691\nbd58de8e-41c3-42ce-90c6-1ecf36181a72\n120b0802-d2f5-4db4-a27d-bd67c6cf3f34\n2e35d26f-7d15-4de4-88af-bb42dced0ea5\n169180f8-5646-47a6-8991-994baf483893\na16cf5d1-2941-4219-8940-8e9d655beb07\n9a460d47-7d8e-49f3-9617-4191bd202fa3\na6e3e582-9dbc-452e-a874-738f8d3c9089\n366007f8-d895-4cd1-a0bf-322e9b5360f1\n912a6aaa-08e7-4f33-9e1a-90673d59b987\nae89f224-8bb1-4c99-a070-67bfe2e27f02\n98d867b1-f0dc-422a-a4d5-0f731310c6e6\n29e78822-e844-429b-b6ad-3949ed0ac40f\nb330b5a5-7e67-4eb8-b501-72c43eaf62b4\n7eb40527-55bd-40d8-8c57-53dd556ecbc1\n4dc43fc0-4c49-4dbe-9165-9187031fe46a\n2416ce7e-bab3-4d10-99ba-d288fa5c652d\n2046ac10-5b63-4793-be15-3ea00e401b5f\n3e4893d4-f9f6-4df3-a7b8-21042bfb461d\n2fb4b2d1-9269-4dae-9a26-ed86e7738c31\nc2f9f146-1224-4bd8-97ca-b2d4bf18f9ee\ne405ca88-a217-4dc0-8c7d-1e88135b9b33\nb054e4f7-ae53-41b1-8bf8-5b2784053ff3\n913ec204-6e5b-4e61-a41d-33760cac6d90\n85125396-a14f-4f0f-81ad-7dac63738f70\ndf8fbba7-d5aa-4b85-801e-e6babe3637e6\nde4a8ec3-d490-4a48-bc5b-4a9800f5ae2b\n604023dc-9702-4640-82a1-2db7ef208e2d\nedeff365-bc03-45b6-819b-ea9168d6cad2\nb7bd937c-cf18-43f3-9f29-e67b87674cc2\nbc1443e1-c785-42e1-b99c-3b4ebc7759d7\n35450ea7-91c6-41ab-9102-87ef2c3c8e9c\nba8cc912-b0dd-40b1-9ecc-502b5684475a\nd96204fe-7465-440a-8ebd-f6e7c20c9244\ndfa3f54d-d7ac-4447-b8a7-07b085ec4542\n95fcf0ec-3e7b-447b-ab9c-af51faa9cbe1\n42affd73-c421-46c9-bffb-c1bc07855740\n5f154974-5ebf-4a54-8516-67e8cadc8d8e\n15fb90da-93eb-45cb-9e12-d4d2e13ec3dc\ncc3c71bc-0647-45c8-91f0-5459fee91eae\n0a06c804-d7cc-48cf-94d1-3c4c7d1b0ae5\n43f08efa-4c7b-4de6-8e4f-547213f30ab1\n7fdefbd3-38bb-4af3-b1e4-8167526c98c1\n3dcf3cea-4521-44c5-b688-afd174c7ca6b\n85af4613-e96d-470f-afcb-76075916bacc\nfb756385-37b4-4f61-8312-324b01493f40\n900696ff-f551-4f5c-b451-2785ddf5e857\n2ad49410-9db3-4307-837d-9aeb855457a9\n6c3e563b-91eb-40ec-a45c-e49c7e7517cd\n5c34b1b8-6be6-45cc-a6c7-85dbc0897956\n6d83e9b7-3c34-4289-955d-c9f90954d78c\n65d0b409-728f-4f2b-b306-08dec04d1b34\needa9c45-2dba-4121-ac12-4b801b266c3b\nb7cd20bd-4fca-426a-ac71-453551fdbc85\nf0778d0f-ed19-451a-bd32-3977927c1c40\n4448c6f8-9185-4ed6-8623-3cb731601f89\nd75eeb10-b586-447a-9e70-11cb64dd794f\ne32d4c7a-16fa-45b3-8ac7-f11d8af7bdb6\n5ac287f1-117f-4c44-bd4c-cd2b94307629\nf3c29142-ed00-4ee4-95e1-426d1e5d9a05\naab67470-49cd-4ae2-aa73-4bf389846baa\n7eb52e8f-cb2f-4ad6-8282-3e9930efa67b\n09fc7fcb-55ec-4bb0-b7ba-b1bdd8152f95\n43175d60-26e2-4741-bc28-d231ba7d329e\n7d95b72e-ef93-4cce-9057-c99e644750a2\n3fd8a8d5-f1bf-4eb7-bfb7-85e1d3745e7d\ne28fde8e-035a-4bcf-8ece-9056688bc19d\n74ae288b-0f28-442c-8789-10517541ff56\n617abf37-45c0-43f3-8881-872911620a7b\n65e8a0c9-a190-42bd-b958-12621b899dab\nb432b563-64ce-45d4-9db1-4cee4a82694b\ndeddd16a-1235-4acc-957a-906b3308f950\na7199a00-730e-42e9-8857-d36ed1cd0de9\nbffb9d39-80cf-4aa9-9dd4-ba46efbcd999\n817cc0bd-9ef8-4070-b55e-b8ee34782b78\nf36c8b58-0d3d-4deb-ad3c-5ae80ac931f1\nc397822d-3dea-42a2-a2a9-0a358c9b6e76\n0894355c-b507-4d33-af26-a25e3ef4a9b8\n305a4ab3-bb3b-4972-9c3e-2ce41ee5ee6d\ne9347a29-97ff-49b6-8e85-433d43b7f3c0\n9d2bd804-3a24-4c83-8344-4a8b3c5218b4\n487bb966-a770-4bf7-ae7e-d705d0083662\n761948ef-866c-4f2e-a89e-6d0e1fa66402\n3a9eafbd-ecf4-44b7-804a-5ad13f4e814c\nadc12f3b-01b1-41e8-800c-295fc598513c\ne3bd32bc-6975-4217-b937-dfc07c9b98f9\nf40d1a49-dba2-44a1-9689-f9866703aeed\n47fb798d-6a5e-41a8-a98a-cc7212903bc4\n0c4a9e9c-0eca-4f99-9cea-617878c427a4\n0bc74620-a5ea-4e3e-bbb7-5e0238087f81\n7ebf512c-3ce6-4a54-8a8d-3bb3ccc78606\n8350415b-4cbd-4f01-bc16-6cb71dde2a08\n1b70694f-faeb-4b96-9d37-ef5844b82154\nf442be46-19c5-4def-993a-aae9fcc43fb4\n3cff1da6-d971-403b-b5da-1a34acf76050\n743af085-e20c-45ad-8cb2-808f3193c3cd\n6a20975f-2c39-42b8-b5d1-ec19dc15f460\nb24f00f4-e775-44c8-b5f2-ce9a49127628\n7098cfc5-8e56-40ea-9021-11443d7146c5\nb0a2c8f8-bc18-48a3-b8d3-8e9568cb401e\ncdc36463-a3c5-44b7-a458-aa3ace1eb541\n77db01e4-37e9-4319-8f93-a816f5b47942\n431b76f4-9dde-4f14-b411-bfcc9be18c7b\n34ee5f97-2103-47ef-8702-bad79b808a60\n265df854-05d9-4acf-ad22-c8b2ebc065d2\n04c490d8-a502-4b1d-a536-0fd80cb2217c\nb9055eaa-d10c-4dc3-aaf5-fb0f41ad1157\n30b40aca-d378-4752-adf1-be90556882c1\n4f4b783a-1608-4783-bb8e-f3daa4afe807\n9fce0274-ab0c-45db-bcc9-16ce52d17153\n3f97554a-4bad-4e99-bc9b-9fe9df16ac8f\n3bb53f46-6ad2-4ed9-80ac-7a877b6dd92d\n816fc489-cf74-487d-a1de-36245fbe1add\nb2507f95-eedb-454a-86db-4f051022639c\nc363c596-89d8-4cd4-9412-cbc5d6b74013\n6114ccd8-7ed4-4377-8bc6-13760b3e774f\n422ade2c-a89d-42a8-b52a-98aab34bbbbc\n229fce44-c6ce-441b-84b0-cc38369b8e07\nb078a056-0f55-4608-944b-2588ca9d3d81\ne9a4fe67-71c2-4890-801f-657f557377d1\n9db2301f-4b34-4957-aa07-d3bf63b6f22f\nf864268c-2f2d-4813-8888-9f84175f160a\n71a93626-b3dc-47df-a292-3ff30d5430ee\neb791922-41b9-4f59-adba-93842d91eca5\n1772941e-1c51-472b-9404-ad624a5fee49\n1831a71e-5f97-404a-af83-fab7f288f10b\ne4e98dd8-dd37-4e69-9954-93e355490bbf\nd6d32b74-9784-46e2-9353-7a0c17ff5908\nad6a2f0b-d2c3-4406-aa03-1e8c51d3e29c\n138cfca1-230a-4b97-87e8-a7c01b52b885\n529e8687-6ee3-4561-b686-155622dafdc1\nf4195bf1-5710-41bb-b3c5-e268eb48f7dc\nd2e1a1e1-d9ca-402a-9ea6-4b1b2c9cf634\n79b6706f-c551-4e27-b5ff-bed7b4766d68\n16e98ee5-ba0d-4ca0-a626-af65479ac2bf\nc65a2544-e7e1-4c83-b491-1cb45a645c92\nd3a76c1b-1b2f-4069-b694-b06bdf8fb89a\n16a0f73c-d58d-4ab6-96c9-3927213bbcff\nbada2090-9216-4f0f-af87-44751cf0c887\n890cd5a0-90da-46c2-9e49-799c158cfda1\n4c546066-59b8-42b9-9132-67c3257d5d49\n41bed8f6-2e6f-4427-9dac-84c93f7c4979\n68503cc3-21a9-4b8d-bd75-84673e8a5c29\n26158117-b8b8-4d7e-ba7f-9d61f62dcd03\n3f28c217-a525-4910-835e-11b3994a7032\n67e3a069-5687-42d2-aaa3-967a07940bf6\n377f73aa-be2c-49af-a509-f3a97b46fe4d\nefdc3f18-89df-4854-ba4f-1bd76d05de60\n95e087de-a837-40b3-85e8-9a9df8f72d8c\naa78b2d0-096a-4f78-bea0-ed37734a88e8\n2a19a64c-7f7c-485d-907f-73eb8e6e6d46\n939db0db-f9db-4033-803d-55181b2be5c6\nede42230-e1d2-485c-85b7-8615c7af2b69\n4090c823-0889-4e0c-b400-425737e2bef1\n0d13318a-1ee8-4ce0-9d54-cf2bab75ed40\n262b220f-d353-4e61-8075-1a657e95d298\n02095b0e-7484-4ce2-9c9d-b414d1066a99\n53cb62ce-ace9-4406-b29c-e3fc5183a692\n3fb9722d-e416-4ad0-b358-086162cb9343\n5aaa9ecf-a4bd-4251-b9f6-9e67dff22cb0\n10f6553d-1b82-4050-a04e-8d088f3a0a38\n4863551e-6e7c-41f7-85da-66c1669f31bd\n14f1f8f5-5470-44f4-950a-6826e0a832af\n100abc7f-f3c1-4536-b49c-8912900431ff\nff0705f2-3b4f-49da-be31-7671fe5667c7\n7a1e4509-cf67-43cc-a775-7c1ad1c70664\nae94f3c3-d597-437c-b175-3b0ba68f2786\n959eff41-2419-42b6-b00b-7ffe8fa0f731\n8a353059-39c7-4a22-9a07-a3a31187a0b6\n5ae033c2-0b24-42af-b67e-9607e3931be4\n1976a623-a495-486f-afe2-802e7582e79d\ne9434246-59c1-4754-a6a2-41448a18b326\n2c16121d-6ba4-412f-b806-03ae997001fb\na6269952-69b7-4891-ad07-f2b564f5c97b\n569a35ad-9828-41a5-aebf-c9c16c2ceb39\ncb9e8057-db2f-4bb2-9937-80920e507f72\n12a3b10f-75e4-4fbd-aac3-8abd37a233f2\n027d7047-3d3d-4057-89aa-ddf15a95cedf\n5e5c6f42-09b5-454d-9b51-35583e545286\n2c204e20-13d4-4528-9d95-2a9bccb5de64\nbadb9099-bcf9-4235-82cb-d033065d277c\n8d51bb2a-c461-4222-a963-5dd9cb904866\n38738be1-0689-4a3d-b680-79adf78c17a6\n3ae51874-6428-47a3-b8a1-ecaa70d29af7\n34f930bd-7424-48e1-a25d-4c76e6c78d50\neb710471-1869-4c97-9242-d38a2ae77f3c\n756c2fbc-d69e-4cdd-b6ce-47b9ce61c90b\nc94a5b30-df59-44d4-a00c-33cd0ddfa7ea\nc0f0bb7f-0dc9-410d-81a9-d299c2b38df0\ne3a80dd1-62d1-4876-b553-6f44488b1e0f\nfdff16eb-cd69-4ee8-9d37-7e28c871b94e\ndffd522b-2791-471d-9f1a-9c8e54dfe4ec\nf2e68811-f0c6-4187-9b75-271fb6603569\n31f2ee7d-8802-4b1e-9325-86b35de4c289\ndb615e0f-9b8d-4df0-90af-0e40f3050ff2\n4242b4c3-b84a-470d-a8cf-a91ec97b82fd\nc1adb9f6-fbe7-4ea9-a63c-ac81706b62b3\n0b0a26e2-0a6e-4b16-ad89-9ab84f0e4c51\n1e48f4ce-4f9d-4a8e-a471-6301b14adda0\n651d5e8d-3f56-4c5e-ba45-3598b93ecfaf\n09f87180-f346-4e73-a4b5-1c4b377cd322\nb763b304-7010-4841-9e56-fecc8d531a37\n1ec3852e-d65c-428b-a07e-66de3f9c05eb\n1be71a63-6aec-4713-a663-388026d12c1a\n82f5d792-b306-4ef7-bfa9-25ea795ebb7f\n826ac49b-f07f-4f07-882d-498257c8f619\n760bf1a4-0bc4-48e5-9ab7-04ffb05e8801\n57bf7eb0-50d4-444d-9340-2cefa1e50a7a\n40721e79-dd1d-4308-904f-c670972b5d60\nb01945b6-3523-41e8-add4-0afdbd9629e7\n445cca5b-effa-468b-923e-ccc8aae6d4f5\n6aef1a86-f48c-42ed-b7d8-e1a21b70ef7b\nf3b593d5-6efa-4085-997a-cb65ed06df17\nab50e1e9-79af-4b65-b3cc-87507e75ff46\ndba847d5-a437-4e5f-b36f-19c208fa3fee\n46215fc0-1f85-4fcb-b595-f30187fcd7f2\nc954a837-2a60-40b5-933d-7c2e38aafd81\n3269c35a-8d40-4e31-b52e-306b0b7e1a5d\n0d418ee2-9d0f-4710-9c9d-7d746987521b\neb8e43a0-e0c2-4f56-9caa-eb4271009c13\nf5a49580-16c0-425b-bce2-627cbf210f68\n91f2f827-2bc1-40a0-8d02-beb00545218e\nd0fa598d-a674-4eb6-ae3c-e9be24cca3f9\na90b506a-b7b4-4e6e-9d61-a992405355e7\n88c593ee-5db4-4766-8bbf-fe6d2d01e9c6\naffdf749-ed21-4e74-a0f6-8950971fd31e\n081f30f6-ab3e-4be6-abc1-7401de5dc56b\n44276463-589c-4cc2-95ed-93784535b07e\n82fc3965-59b0-4894-bb9e-8a27f9713242\nc800e005-37c8-423d-b2fd-9f60fc5bc007\n964a09f9-9e20-45c1-9d7a-0997b8e7eb2a\n96020b3f-6e10-46b6-bba0-6f796874872f\n71116da4-6100-4511-964d-e426e4a2c81b\n51482700-b779-4b7c-8555-89f6befd1079\na39c56d1-245b-4156-8794-8a0568d37daa\nfb9c0188-cff6-466b-9a9e-17ea9cea404d\n58cbf0b1-f005-4f56-aa98-491ef7a6ae32\n07e884e1-0c41-48d9-9429-1f4564cb215d\n9431d77f-c8a5-4f84-ade0-49993fa33406\nbb1a0671-b5c9-4562-b1d7-5956a8678266\n3857a24d-134a-49f8-9fd7-d0b2c91a60bf\n43dc24c2-e06e-4627-a47c-55a686e109cd\n45c75f94-47f2-4588-b9ae-f921e2109958\n5bd55eb2-1803-4da7-8859-5927f6524e42\n94e628ef-5e64-4736-916e-6bbfcd12ab39\ne79cb170-7757-4ace-aa5f-1e9250c05293\ncb4fe474-8a59-4dea-90ad-8c447b001ed6\n717cc455-1bc7-46d0-b112-a89515d0ba0f\n53d1b78e-8d52-447a-8743-37af4de81564\n002ad07b-4cce-4444-8416-2bbe9a2bf4a2\n9a7f9ea2-c1da-4fe6-b2a7-92555ae0e728\nb61fac37-e5d7-4108-a98a-c9bcdfba01e4\n87573d4c-d806-4e3e-98de-90275d823143\n2d2c92f4-5912-4d1c-8df6-5c16cf9b96b1\n71546249-fd08-47a8-8c84-d2d491f1acb4\n50fa3a25-50e6-4fbe-9c5f-e319e250f771\n98f632f9-cd6b-4ec8-b216-523f7c648498\n5de7a05a-91fa-4d6a-84b4-cf16fd339801\ncc4d6456-a626-40c5-94e7-e5a399b4e96c\n0455bba8-0d31-44a4-a749-f6fb674c2268\ne007c211-1141-41b0-8173-9cce568cf860\nbc9f87d3-fc03-4489-81cc-fcc78e2afc93\n99610aa9-a3be-4e17-bbc2-c131fad6406d\n3e5597f9-566d-4449-a813-01e92133ec64\n89f43e15-75c8-4365-9570-7c2baace8e13\nf47f8cbe-8b07-403a-8224-eb0a33daa272\n9bb547f7-c5fe-459c-8412-510d7115cfe3\n84120bda-c655-48a2-99cd-dd8a903a13a3\na339de8f-f519-4462-ab30-0a3e8d72cc0a\n537f12f0-296e-46e9-91f5-4596689d9a6e\n54283228-39c8-4c02-8d7d-661d409f04ca\ncbc098cf-9997-4620-a367-44c9b5e90de9\nbbdf60ab-c587-4021-9146-1893f3e142b9\n77add3e3-0686-4f9f-b2b1-5b01f1e9f185\n07b3415d-9ff5-4b7d-af6e-ccc9025ce43c\na88ba797-1b54-4021-8a45-0d7bb81d73d0\nc4190e54-57e7-4c9e-8498-b327dfbf35e0\n3a3a0575-df97-4d86-86c9-c6fd2bde121a\n34d6cebe-e213-4142-b318-7e7cfa4297f3\n8109bab0-25cd-4fab-8b37-bdcc6633185c\n4abf80ff-8f2e-4f41-b92a-3507e94c60ea\n129f062f-d06c-452c-a3f4-8374aad9e181\nbf873b3d-c72c-4ff4-866a-20f7bcd628a9\n8095f8d3-7286-4415-89ba-1ef82e9eb32c\n7eb6d42e-170e-447a-a161-084a58f559a5\n4aaf61d8-9825-43c2-a057-ba8bc0cf5c56\nae114c03-6a92-4e45-9cf5-7d14eda99e06\n030cb6d2-0e13-4011-be0b-143c3c5e1436\n5142d5a3-4988-4749-a3e3-cfd65df4347f\n86efd6af-af33-4b94-9594-4aef419ac4ad\nf4078731-b480-4eeb-9ff9-d781534683b4\n90fe7450-fe69-4739-81e3-1aa5d40d10df\na0a6a4b6-ed08-4e95-acc3-42688e3a4057\nf0f64f7d-aca3-4736-a606-ddd67cc69d34\n19de4cbc-579e-42a5-b47d-5bf7570be01f\n4d93a85b-641b-44cf-9629-af8a50989e4b\nf595b81e-d610-4c65-9597-88ec83fcad59\n6992c092-7d1f-4414-ae01-ceacf0146821\nf8675e49-7c1e-4cc0-b3b6-399e297aaaea\ne165ba8a-0f0f-4575-98de-33ece1f39ff4\n81154f17-b41b-42f5-92d2-9fa1166b2b72\n8d2d4532-1b54-43f5-b67f-207ea34231d2\nc4bad09e-ab93-4e5d-afd9-47c019002abd\n87cc998d-7e5c-4798-b5e3-2ce4116e9d3f\n27289c2e-aa66-4896-9261-cda1d1ad9ea2\n1ad72f43-8ac3-4215-b50e-19b0c13674c8\n7d638176-e594-416e-bdec-2d1b07e5c48d\nfd27a2c3-bbfe-4cf4-8c20-f2c78e473d44\n0461e3a8-f90b-4cdc-a973-388bbb6b5b41\n2e2e8fb9-7843-4aae-8aa0-29dd359d437e\n02930b91-aa73-4337-9a60-9e34946a86b0\nc423eb1b-36af-4b21-b6b2-475b051f3b38\n7a9a39c4-6ec3-48ac-bc63-6c301d4aaa8d\n661cd953-1db4-4e97-8d22-1b41f53b0ecb\nbae27ca8-f005-46a2-be5c-48e40420e22b\n52baf4d8-005b-4dda-bd10-fb59fd797a2a\nbbaf5d39-0d83-450b-9643-9546929434aa\nf7e1abbb-b641-4fa8-9b8c-4346bde29c0e\nd4d1926c-0ad0-4b0a-b5fa-71206868038d\nc4297248-3756-43d7-8542-b188c5a5f41d\ne91160ba-7fa2-4aa4-b915-391938d9c27f\na6f70f5f-6e79-4d92-8c3a-5d75b5e12dc5\n83f7d08c-e0d4-47ad-9762-d7ba3b2f6538\nceee488e-94dd-4d1a-8cf5-495a098a49b0\n3b3534f4-c471-4259-8f00-cecb6afaf321\nb1b74fae-c2ec-4ead-b846-6a852699b820\n7286aa1e-4d62-4476-b6fa-afb157fa5a36\n28f079df-9215-41a2-9e0f-5a3dd1920c16\n609affe2-1d6f-452c-b672-a1548ad0b6af\n18acee31-fa1c-4cd6-b2f3-60bcb0dcebbc\nbf22f7dc-a178-478f-95da-214034e7fbe7\n2c22fae6-77ed-4ad9-ac1a-6437da90ad9a\nfde42c30-0b61-4662-8248-1917215db0a4\n0f7808b0-869b-4ae8-ad67-55404a61da43\n0a346dbe-b598-4a88-a51b-18bfeb827b65\n0680483e-ad40-4fca-be9d-a1971a6b2639\n0897a8eb-1877-494a-b4ee-a40304174a3a\n0bf207bf-c608-42eb-8017-844276d143be\nda959ac8-f5d1-4850-a4cf-916438423294\ncfe41166-03f7-4197-beab-d74687805bc2\ned304dba-419d-41de-ac77-09cc0844a5b6\nade7eacd-4d9d-4120-b7b6-a5e9050a0ba4\n5f23ca8c-2366-40a7-911f-f5c04ee5d656\n7655748c-1440-4209-a65f-076f8bd0ed94\n4461d141-ef2e-42a6-bd28-5f2cd9b9d841\n0df31f42-a20d-4695-a783-d68061fead40\n9a681c79-ef96-429c-b941-58f506daf62c\n3e1d820a-0731-4d30-ad5d-83c7fe6b5ded\nead27bc5-f998-4362-a421-621f5d57bff2\nd448d474-902b-458f-bafb-44688a818181\nc92ffa20-c108-4966-aa15-b0fc887ce190\n3d68432c-9855-4c86-ba0e-156290659eb9\nbdcdc484-2bc8-45bf-a962-e3d47b1b013d\n81078d03-e684-4bf9-a305-92daee558ad8\n2fd84ae8-a85e-48bd-8973-122d910c850c\nd5127f07-569f-48b7-b5cd-3d982556bd8f\nb23b2212-3bb4-4d29-905a-2009b376607e\n11f00d2f-8da0-4305-9d1a-577689232bac\n5967c975-2c3b-43f5-9216-937469b87118\n687c10cd-7158-4cdd-a384-bedbd5a1b4ee\nf5a653c9-a7ff-4584-a108-e8cc63e5e105\n5ce66143-4bc1-4e4f-ad9e-bc969336b96e\nac875a31-2e54-4795-97e6-7d2146a22f80\n4c7b1419-c022-44ed-8785-ae126e6cf618\nff27b687-d1e3-40ef-a62c-ff3313f15356\n66b2f0f3-621b-47c7-8329-a229fc2c3174\ne7c92d16-5fe9-4253-8386-e0f97e922282\n9ce639c2-63c2-4a2b-96e3-dc38cb2c249e\nc2e51cb9-2299-4438-a9d4-8088f0e4296e\n3b3ca025-4cce-4bb1-971c-2397b9567ffe\n3dacee78-6b77-4177-bd0e-b481b82373d0\n222a12e5-b0da-4d9e-85b1-da8458c9ed4e\nfa5e4a7b-ce00-4752-a543-2c3d95c91d35\n37360cd4-f973-4e6c-81a8-111af359a780\n23d1ae65-4f5b-47b4-94da-249dddbf0084\ncf0de244-15b5-43e9-a2c1-052e16096cd4\n80817f27-a7e0-44d0-8d20-54532ea95162\na8806aae-cf81-4a35-9cbd-77c2a04ed802\n474f70f8-f788-4cd1-a27f-00a5dd36b876\n03da1e6e-f13c-4ef1-b527-deac696db3ca\n0b29541c-53ca-4cb0-a1cc-d83170546c02\n2a0d9991-afac-472d-a918-aef97eb91c88\nef3ba11a-cf8e-492c-bf6b-7e90fe3aff9a\n49d5ddf2-6cce-409e-b8fc-7946cbe52e0f\n055d330c-4b1a-423a-a17c-5bbb83aaee1b\n335a0026-3d76-481d-b390-623fc84cbab3\n3203151e-4a58-4771-b0f5-7aa72b3c47c1\nb6880d06-f377-410c-9753-17d7f5df31a7\n14c8f055-efb4-462d-a5c9-ff3cd19e9760\ne5c9ca7e-2874-49dc-8ca7-b99cc277997a\n88393f27-4411-401f-9222-7ad7cfe38589\n5f43fc12-a9af-4d48-a5d5-a14906b2bf62\n666c8ece-966d-482d-8242-6307d560203e\ndf2e21a3-f343-4b3f-b7dd-bf7fc0481fca\nd06b280f-0869-4d96-b8fc-4216aced1fbd\n66fdddf4-c222-405f-a900-0ce263cb5fd2\n84caf63f-fcd5-468d-93f2-64612ee01867\n214ef6a1-cb70-4ab6-8505-f0d3e4ec823f\nee0ec941-c9eb-4140-9469-8d84c666f396\n7350e6c7-eb52-47f2-bd99-2eab46c587a7\n78cdae1f-cc2e-4e6f-b006-78d69f649218\nc22040b9-2b03-408f-92d2-addc4945c6ad\n8b1f3821-ef9e-4c08-9090-4f62ce1edd14\n5bb77378-f846-451e-a32c-32d1a202f486\ne32e4d9b-e16e-47ed-8ee9-f34124becddd\n4eaeef22-8f7e-4046-9c70-db6f571463b0\n9ad48d2a-8ed6-43c4-8605-b8617733e4ee\n0d1814b6-158a-4376-93e4-6ddf90d5ac2b\nf6950913-a49a-4bdb-b35d-c400e6cc08de\nf098458b-b117-4649-a613-078b4e127dae\n6484e6fa-2814-4551-9858-f5d56ed5698c\ned76726b-6ca7-4931-8e05-2e096da5ee43\n201824dc-9d23-4a7d-8393-3413a1fe5d51\n01eb9b05-3b41-4a1e-96da-775e3c453b57\n43bbb3ee-247c-43c1-b39d-92d0be9dce37\na5ac0be0-d148-4edd-8a5f-afae4080afff\na6da541c-51fd-464b-911c-0087deec3617\n8782a94f-1219-44aa-ba96-035188df07e7\n00c6bb18-8468-4686-abd6-ed4805d6312a\n97fc9c64-c2c7-4286-9799-84af87497a09\n879684e5-988f-4fe3-9fb9-444ca52507e5\n0ae5809d-d57b-4636-9da1-c0045f233050\n57db9dda-e422-474f-94ac-d6f032f26da0\n12046265-5b22-4fa2-ae9e-d294e4cae36a\n31eee8ee-cedd-4b59-ab41-47875c13a677\nb6cabd45-a950-488c-8ab8-6a78e0c460a5\n6c776e5a-d62b-46c5-9cdf-595ec9c0b9e4\n7f1edbf2-9021-4f36-afd1-32f64954ed79\nf150fff0-cfa3-48a8-b7cf-dc64b4fcafbe\na0295c85-5b99-4669-b9f0-88d7ffb4f199\ne19d2213-b167-480b-99a0-703f494b71a5\nb75169f8-fe45-433d-bdff-139241ac288c\nd9f33769-99a1-4e57-a023-7d7350271b30\nff92044f-53d4-44d0-bf92-12246dd9402c\n4e943d74-aaa6-4dda-9e03-6d9e65587d8c\ne6df1ba9-dd05-4b13-a43b-217d5e68aa28\nbd3f420f-ed3d-4750-a4ea-4bef12540157\nc9944b5e-b661-49bc-86c6-e3289bc970c0\ne085f1fe-35f2-4f41-a71d-a990701f5619\n1203cf7a-1e53-471f-aab0-a2dc138077a7\nb727c75e-f171-45af-b210-a8f9471bb498\nd433c00c-04f1-4a38-8228-097250ff84b2\nc6b5359c-a076-4bdf-a772-d889ca82801f\n791fe517-fe1f-48ba-91b7-0fd55b8ba058\nfd8ba2af-a998-40fe-81ea-4902c3b35ed0\nf358c011-e53e-455b-ab1e-bd4ed87d41cf\n6a88e799-abe4-4326-9c26-cb265c3e15b2\n1116a94b-d193-4e45-a3f5-88a8ce59ae10\n8e8628bc-e088-40fb-aa36-07903e498bf3\n15920fee-51c2-4587-b3b5-cfbff32e72e0\nb2edbd40-a83e-4c9e-8352-b42400e12088\nfb148589-7ac8-49f7-8eaa-478f48531efb\n305bf86b-c3e8-4457-b405-0531e5ead1e7\n87b07eaf-ab8f-462d-ac5c-553f162ef841\nc87752e4-0506-480f-b025-e6e69a6d67dc\ne67b99eb-47c1-43d7-9269-33b3808e68f3\n3fcf22dd-2b25-4bfd-b131-cf6aa0e33ad8\na3648908-b3ce-43b5-b402-de4e5b19a0cb\nfcb4cfa5-2d9d-4ad4-bcfb-8076470094d5\n8973765d-43b7-4128-8c1d-067537628354\n5a37593f-1f03-4423-b7b1-9f97f66f8c76\n25c83d3b-3670-4926-a03e-ba82289937f2\n4564ea73-afaa-4307-b0ba-f8b8ced1c60e\nb74122fa-3c5a-43a1-949a-cba6e9df9f92\n0b314e51-cb52-4068-9cb7-6c2a597cdc77\n6eb113ac-f7e2-4865-997d-45a08abedaa6\nff493dca-2d1d-4b33-9595-2afdbea12f63\n056ef4f4-7401-4b4c-90dc-a2e75f60832a\n3539273f-c285-4e9c-803a-896528c56392\n68562f54-36a1-4364-82ad-d74b4b03d8c4\n9ad20794-f1dd-45e6-966b-d7c1b28af1c0\nef0f6c70-9b99-4885-a4b5-89f197e567be\n21d2b15e-9ff0-45b5-b7ea-7857beed093b\n859fc58c-ee7c-4bba-8b60-a44a80f12d1a\n7a403d9f-2f18-4ee4-b93b-9c08b8544c24\n24c3dd68-9c26-4e17-ad0d-a797c655b258\n714da013-6c24-49bb-9bd5-3eb28340303c\ne68fbfcf-a45a-497f-910a-85bcad2b6359\nb6a7e49b-cb5f-416e-8209-69e02ea54255\nda289599-8a7a-4163-abea-36a7b9f263d3\nf4c89df8-37a1-4443-809b-e3adef738fac\nf0bbd931-65b5-4b94-aac3-1e1f22c1f9fb\nc4275331-5a4a-49c9-a7e3-5961ed182c29\n51c64b8a-b646-4fa5-9ac7-d11180d459f8\n2816a02e-73da-46a1-9fd9-436fbe2c37d6\nf34733e0-3192-437c-89a7-f2f7f21d5b7a\nedce9331-1b7a-4086-8339-0b269563c10f\n54dfdae1-f5f6-470d-83d5-a5ad95b48d4e\n0f09d6d0-bc83-46f8-b528-9de579683b52\n7d73695e-f7ad-4c43-8de4-277c65479849\n712f8f58-a51d-4071-96b4-55d1a862ba18\n4ec91bf8-47d3-4610-8f1d-b44a602075b4\na4f4db19-f1a3-4d41-8c3e-f881859e529c\n3a7cf247-a477-40a9-81ec-36bb86f133c4\ndf5f55eb-5bdc-4216-bcea-a3b65fabf560\n21f1735d-907e-4a70-b16c-74f2da166b10\n917a3b1c-e06f-4545-90fc-6d88b05a40b4\n9d6a11f0-955d-44ef-a8d0-c3d3be5fd87e\n78f6beb1-87a2-4405-9791-26e4bc30f035\n418c19f3-2d58-4968-8498-e2e05f3fb42f\n513df8cb-5d09-4722-9bab-9dc379c57e11\n9cd54534-7927-41f2-ab96-61076272652a\nf7f98d97-6978-427c-80d9-3970b5660b9f\n145f38a5-1cee-4b5a-a3f5-dd0406161293\n7116bfa9-7cfd-40c7-a471-7a053f035d3e\naca581c5-8249-4be5-afd7-7cd5af29174a\n3fe3a8d8-1596-43b7-938e-764619eb4db5\n8ccd2150-9b0c-4ca0-8134-3b208fd5bf90\n18bca07d-781d-49e1-a1b8-699bacca0a71\ne98ec52e-dc19-41cf-abdf-7ee219092009\n77919fc8-cd69-4675-9219-cead89a06944\n86040445-e667-4075-ba17-ee99d7909fe8\nf93eb52f-1483-4d5a-b45f-3787d5e72b48\nc50b8917-79b2-4a95-b1f6-b37cb703a808\n94074e18-12ec-4f41-b9e5-42da4b135934\nac4c2bfb-418f-4374-9cbe-44066b076ca1\n19a5c827-bba4-4509-ae4b-a1f40ec713d0\n7b106ca3-4ece-4f80-a62c-f9336db3db58\n94c0f54f-6854-4349-8ed3-145ba18a922b\ne35ec974-3413-4e4c-9bd7-87b36a3c96c3\n067b9576-748b-49a7-ba54-9e9723b16daf\n683bf4a4-dbfe-4000-9d2f-0ef3ae72d222\nca3ed90f-4e32-412f-82fc-32918e7e8d16\n99f850c3-fe37-4919-ab29-9c096282eb53\n107d33ff-3f79-4c73-9899-74bed54f25c0\n73aa1943-a7bb-48e9-b3a6-24d13bad213c\n17b109d0-f03e-4bd9-a4ad-7741488de4c5\n8ccdfc4c-a028-4900-a834-fc46fd0d8ef8\n8e3668dc-664e-4280-92e4-404a2e9e5dda\n7ce4696e-0d60-467b-807e-4002bad659e4\na69374c1-c2c5-4e93-a1de-4568d017d12c\n7668b849-c94a-468d-86ae-6246b2087c49\n259ba5e9-b828-4eb2-817a-aba7303cc09c\n7644b8df-5986-4e34-87ba-395caddcb857\na2aa2dd9-3007-43c8-8b63-95b83cd5bfec\n13c8c5e9-4ac8-4556-995f-e4caa10ba39a\n6e86c762-d53b-41b3-9def-106b5ae4b092\n13f24c26-2741-4e53-affc-6b7d8960127b\nc03ac896-bbb5-4529-bd24-9374095f8bc6\nd681eda6-f1da-43f8-bb4b-d226e0ff6542\n99651256-39b3-4996-ac12-1cdf53eecda2\nd6c0b5ba-63a6-49ca-bff8-9ff87b113ec0\ne0e78d9c-e312-4cf5-bbf7-11244eade934\n38d8d08a-5fa7-4a02-9c75-d2b406bdf91a\n6f40b73b-338d-420b-a083-15ded29d4691\n53a1b43b-ae17-4530-959a-f2827abc6eda\na04940ea-f614-4855-a88d-75317184d34c\n7a24ff1c-3193-4f07-a160-da69e8a7b1db\na8fa4fc9-f260-4104-978c-4299902b1a06\n997cd9ca-6a91-4b98-87cd-0ab500845931\n18cfe5a0-185f-4766-ad2f-91059fad3f3c\n065003b7-149c-44c4-9fb3-6f1bd63c3e74\n470918f6-1430-4c05-9348-c916eba9585a\n8a48adea-2dab-447b-9345-c555cb2ef41d\n4a074437-27c8-49cf-a414-20cbcea500b2\n5af96de7-49d0-473f-9f14-bd8d9a30d112\n76f06d5b-0a0f-49c0-b777-cce6e82821a6\n02637c5f-a696-4ff1-a991-c50d51e9b372\n482771b0-e83b-4bf1-948f-c8dca7f25fb3\n6aaf10e4-5b5c-4e34-8575-43d480d64801\nf3c348ee-bb39-4931-a9ad-ff1c6894e5c3\n8d9b9236-add3-44a1-a832-a2d6e7c6d25e\ndf1c7a0d-53ab-41ba-b675-3bb995f9edd4\n93827d8f-5b78-4415-86d0-064a588dfb23\n65c6506d-e8bb-4ffe-bbb2-bd7e50c564a3\neb254055-3c84-4f18-9c72-52745111bb11\n4fec3348-929a-46ce-8920-4bc79a42af05\nfea39807-752b-4226-90bc-19900218cdff\n3516e8c8-cb12-440a-97e5-744ab78b1d3c\nedd866cb-98b4-4b46-b4d0-df2ad34d75fc\ndbbf687e-d3d4-4eaf-9eba-f86383a9503d\n86e4a026-e4cd-4a75-b156-6c3a40856ebb\n4bc3ebce-4c1b-4f02-a66b-0f877e6f0654\nf7ccad1f-a636-4a84-b132-1c32650c6c68\n33295568-9dc1-4b32-8fa0-64d59e5f6eb7\n47380e3d-5445-4aa0-992b-8969b7935073\n4605b102-3d36-4d77-a783-b43cab5c6c9a\neddc3d36-572a-4061-aafc-e26b5afd1f72\nedb9ab4f-91b2-45dc-bf63-6dbc0ab7b332\nd10d7285-8525-4772-8361-fa0751d18686\ned92ea3a-f35e-46a8-9078-9473c8a2dc3d\nb2f0927a-c734-4005-b08e-153cafcd53bf\n61d008a0-f529-43d5-896d-9a791d40070d\n1a984301-8e65-484f-9ab8-a8b5e57efaac\n8e0a61ae-78f6-4c73-8435-1235cea5f9a8\n3e0a8411-9548-49cd-b3c5-7c40d230f53b\n17b11410-78a4-4baf-8c47-1a04f525bd67\n087c4a2c-8c7d-42b5-9a64-09535926d08e\nc505cce5-0602-409d-90d9-0855eb414a74\ndfcff42f-f675-4b1e-b0ee-387f916a7ee5\ncb9b082c-b74f-4a44-8fc2-5ae408014036\ncf77827a-10e8-40c6-8d49-0835552a5229\n5dd1d917-cc7c-4ef7-bbef-89ac707d76ce\n960cd525-0e6e-4230-bc60-a737fe525e1e\n4d1fa39a-a28f-45bd-9b27-0440442b6f25\nd76e437f-b10f-4a01-bf56-05c98ae904ed\nfda8796e-5fca-463b-bf6d-83aa6467d173\ne26ef2f6-ad1c-495a-ab8d-6c60ab16afd3\nfe68ffef-2367-4a1b-a91e-878485353802\nd18e7071-4f81-4f59-8393-5309527f1766\n97c72dd7-cf26-4df3-9d1b-67dd3d784087\nf574b15d-affc-4efe-89ea-9500b5fb59c8\na205a708-1163-4d29-8381-52d7cfbacd99\n1347aa2d-7efe-4fb0-b948-5a03ceb3904f\n3f99b919-3fce-4564-a947-74f8f2a966e4\na00e3429-d285-44c5-98b3-ef7c8580213e\n7af86c2f-8491-4471-92f1-258126e3bbc5\n08005a6e-9579-4e25-9597-2804d783ee6e\n4df690e0-1433-49e3-a17a-0357284c331b\n5331d0f3-b32c-4463-9631-c65b927a4580\n311ecadd-86b9-440d-8c7e-a50e3f82c42d\nb729cc0d-bc1a-4eb5-9128-e47ea8b79963\nb4b64d21-3b28-453c-a7a9-0cc4690420a8\n2143dafe-94e3-4e08-9aef-4bc781940129\n6ce9aa9e-9e9e-4212-b516-e2c8f8c9ae56\na0667373-8dfa-4bb1-8be7-07c38c097ccb\n2be33d71-38d5-4857-a63b-9a02ad920e91\ndb0e508e-2c7e-4ef0-8f14-a12c20ce05bd\n77abee1f-a2ef-4bdb-926c-54748f874b16\nfdcafe2d-8380-4785-95fa-05ab5958bd38\n8aaf2ef5-4c23-4a31-a93f-12da80af1deb\n807df185-ebc7-4474-9bf7-51b2fb74c0dd\n20b3f860-ebc5-4c41-a389-bc1707bfa7bd\n35976e0b-f9af-4da1-b73a-a4d83b01f91d\n7a1b3927-4aea-4b87-a252-d525b0950438\n1ad8f1c9-1317-4c15-a30c-05c1c50a7c21\nc62cc914-80f2-4ce6-a57e-b86fda9de4ae\nfc849d5d-0a9c-4fc9-8bc4-473bc4bcace5\n9f505d3c-d5fd-440b-8915-3ed653f840b2\n50433589-d603-43ca-b7a5-e7248bfe09ad\n7d0934ed-eeef-4356-81f8-fac45895111e\ncf498f23-e55e-46fd-9813-b083f15c5a95\ncca50930-010f-43c7-9c76-48013bc72319\n6492edb2-f34a-47c7-b742-8bcfe450f435\n904bd2b1-fc65-456a-8d4c-f88bb2fe33f3\n8476f8f1-d5b5-4fde-ad23-f37daa108612\n053f49ca-68ef-4416-91d7-0ce686f20139\nd0774c38-3d09-4a4e-9360-79eca4e54533\ne16a78e7-a30f-497a-938f-3c7a293438d4\n5ca09620-8840-410c-8815-f5a2a61475df\n1ad75e89-aba9-4486-b67b-b6accdbe8f09\n09c09334-03fd-4ef9-baa6-32d2883e9674\n73a6d1e9-73c0-4d0c-98ca-fb69fe1176bd\nff9c04b8-ef1d-4315-9c9b-c931792deeee\ndafe0f0c-c559-406e-b129-db3a4c5055aa\nab12db74-8fd1-42c6-b7da-90be4b018513\n31293fbe-2421-4962-b67f-57d750e1c2dc\nb55364d4-e737-4f6f-a419-21c30b322255\n0241edfd-690e-421b-9dc4-c52a269af959\ndf825806-29da-46c4-a99e-736a199370bc\n23fdf70d-8486-4fd2-913f-cafcc16e5874\nf52f2d42-6351-4bb3-92eb-a5fd2c202364\n36fda36a-ad84-4d55-ad71-1d13204f961e\n22432b46-438d-4000-8cca-e32e102a944d\n7120db74-d165-4f02-8525-89a6ac831212\n456b9639-2e97-41a9-b61d-f7cbbbbc2786\ncdfc426f-1d7f-4ac9-b49d-593f6ec955ed\nb7b47d62-8ddd-4de3-adeb-4a94bf8c6c5a\n50a57553-6d21-4a27-ba5a-72a2c986933c\n928e21bb-7192-46ee-8699-6c1d83dec8b1\n0a074a2f-96c7-43fa-8cde-b48ff201a6f7\ne57889e5-d769-4538-ba1c-fdc402e65d4d\nd9abf988-6ac3-4f88-bfc6-ec721921128f\ne3b985a9-b012-4181-9d0c-f117700b0b61\nb3cdd7bc-02d1-4167-85db-da95b8e63f17\n383e0b45-e609-4d22-9cbc-d4d75dc1a862\n8bb4109a-b369-4364-8497-cc56c2a6f083\nc96b2abd-1bf4-422e-ac53-727364d7793b\n53cc7fec-741e-428a-9ceb-6d51b50ccdaa\nfecbed6b-88e1-441a-b4c0-322045831b53\n092c42b3-4de7-4d5d-8d75-7fa4aac5b9bd\n7f6e349d-4515-49ef-b73b-7a50394408ea\n52a6a3c8-3c56-48d3-b035-b1a0b86dade3\n76565a36-ec97-40fd-a357-0170d134f2a2\ncacb73aa-5129-48c5-80d9-f758d3b5135c\n94164de7-322b-48f7-a44e-0d031000e663\n369631df-9653-4c37-803e-28615e835be8\nddd12655-e865-41a6-82d5-a8f9a191f3e7\n4080d0ea-9141-4bb5-80a9-35fe20a66f58\n76bc0984-b0f7-4da1-b6c4-032b832c4914\nf03780f6-f56d-464b-84cc-d46fcef5b9d8\nc1a55a53-4a7a-49e1-9778-9f87c75c140d\n13278974-d4d8-48b3-940f-59d377219303\n8608bcf1-688e-45c8-8ed2-12f479e6c052\n72b89bb6-1b77-4582-9122-6436cc8e2762\nc3767e82-80f8-440f-9803-46388b7af2f9\nd3ce1220-2a98-409e-a39a-86ad1a5197fc\n309607bd-e4e6-41e1-894c-c8f4ad249542\n5f4e0541-dc1b-44ac-b731-3708fa56986b\nc6f93343-d054-4280-bc64-9a2012b208b1\nbe49eca5-7f33-4717-9895-a4a46de51525\nd61b67f7-7704-493d-87a5-78e28745f80f\nb4733fa0-a4c2-456e-b826-ae2d940ca5de\n2b63bd5a-d3b5-461f-913c-598aec30eec2\ndcd4f53f-160b-4e7a-b42d-7e779807d000\ndb917599-b65b-4d3a-8138-2eee5ee96d63\ne813b559-8f84-416c-98dd-c9e13ce90502\n124d7619-f0d5-4dfa-8af9-b7bbf351dadd\n18dc0cec-35f3-4ad7-b2db-dfeb0f8557f4\ne9979d78-b0be-43ef-8b47-43549ecd595a\n595cd7d0-16c8-4130-a2fb-e18bb5251a84\n09db6760-ad27-43d1-9b42-26b3010154ef\n19e6affe-f34c-47b0-b367-3417d8f121ae\naadc59a1-e9ec-44b0-bb21-9192548386b4\n1ecd2118-c8a3-4736-98d4-30167c399dd5\n2af26582-0136-4d3a-b51e-286461ab4649\ne5d75d4e-7425-492e-99be-83a7511f7e57\n4e629474-266b-49d9-ba81-b78c37225ac3\n9d4e0ef8-1058-4f44-b059-eaae26e526c2\na6f55db5-b0b8-4e5c-b848-d96142cf237f\n74030e62-549e-4036-a0a7-b11f92954dae\nbbea0def-d3e7-476d-bfb6-9593ccb37be3\n78c2ea64-d492-4f8a-ba83-34dd586ef5aa\n3267fba4-f5cd-449b-acd4-bbc85b4a8aed\nce75af26-7e4a-47f9-8b0c-f47eb74d10b8\n546d5332-6461-4161-8090-7fef868a5f37\na0acd252-2073-42a9-8f4b-f5071e8a8cab\n198a40fd-dee6-4218-944a-e178b9fcedf7\n45c4a1b2-fcea-4143-b552-f42e599e69ce\n7933048e-321b-4a1e-9bcd-89e64d4f1f2e\n185a2202-0534-48ec-9b6e-6010f8f83107\nd74c9bab-708a-4c73-a371-52737cb726bd\n57ab26b5-7f78-4883-82b8-9cbea36ecefa\n359efd08-ee73-405e-87f5-b793435cef12\n7341ed56-93fa-4da4-a7b8-5e9b05a73ff7\n9185ff09-8685-4e2f-a448-c1128d5cc32e\n47cbbd7a-280c-4189-8771-50841236df30\n7eb32bdd-f89c-4f63-9af4-8ef9880e6018\ne56c173f-9f69-4454-90da-ddbf7101ceba\n1af3de72-b9c1-4350-8c0a-f50aef7e9f6a\n438eddab-c79b-4b52-8ac1-dc203f69b4fb\na549b0ed-1125-4d7c-8da0-7ac2df378726\n097c5103-5676-42a1-b211-0ce90dd9e19a\n79b79c3d-dd22-45c9-a97f-7f998e55cc44\n82505e3e-eee9-4426-86f5-daca4428eb48\n9694b2b0-0a85-4ef9-8e89-865d4834f63a\nd9d4a321-9712-4d0b-af90-4b105d5a1785\n319fd43e-7841-4db0-b797-7b74e10b16ef\n75e49b5d-5ec5-42ae-bdcd-689373a31edb\n572b57df-1643-4590-8f91-0f7ec4f9b9af\nb99d1e9d-749b-41d1-9714-e5fb8c484638\n32abbb7a-ad77-4d81-8985-cb60499c1036\n65888189-d38b-4a6b-8b33-8f1fc1f17552\n9f49c2f5-727e-430a-80e5-cd5802381874\n7d48233e-6702-4d46-ba29-03279c176489\n188d0425-b1f5-46bb-98b7-997f7152db1a\n2745a394-16e8-48ea-80c1-991e34b4bc2c\n3e1fb1ad-0224-4d75-a7c8-489b14b5c2a1\n81efd730-6392-412b-a883-dccab4eb1b3e\na56cc6d6-e2b9-4ad7-8064-0d99046b3fbd\nd252c762-923c-4688-90f4-c8f55ff0edc9\n9f8d1aad-cb1b-4d43-b28e-21bfa57976d7\n04f26d33-86a0-48d2-86d7-63b5c07abb20\n5fd05d72-8005-4dd9-aa8e-67b425a719c1\n15da0c8b-6fc0-468f-86cd-cd24179e1ac7\n58b527a5-62de-4673-8334-d03595fbbcca\nf055cc40-fae6-4946-a8b3-46891e39ad7a\n0d37f383-50a2-40dc-a508-dac5101c986c\n2edeae1c-11fd-47c7-a8c1-4b13b4c28877\n71c55750-a5a4-4b10-94f6-151761b40ed6\n4ec3e8b1-16d0-4b88-ac4d-8018eea107fb\n39673f4f-e194-4d59-835c-0e073855f399\n9b7315e9-e9eb-4a69-92a3-7883d83c7e13\n3247f938-b60f-4fa7-9391-c76904b00524\n3b37224c-6753-464e-8904-57211950b983\n59d65462-185c-4acb-ac53-d8118946749d\nc3d68561-06d3-49c7-a16d-d4875b045c37\n8e6be808-b9a1-4114-ab3b-71784bc271a8\n2d6c62da-f754-496b-a26f-09ec6d52065a\n73743c2d-8b52-43d7-af4a-d03b1357f1a9\n5d7e865d-0232-4f3c-ac81-08af9d2a868c\n23ee40b6-3f41-44f2-b221-32b727820bc1\n2b92d8db-e1f0-48a0-ac41-d4df46cb23d3\ncf33e02e-ed17-4582-a5d2-318d3578788a\n35139b64-2c20-4533-a56d-6d13bff03471\nbe748815-bfa0-47e4-b54e-5d825228647d\nbc7a2aaa-e458-46e6-a58b-8261fa949846\n0e184269-f59e-47f7-b80a-011e657cdfb2\nc4c9d290-1d67-4f62-bf07-f0c3f40c0529\n0f71b79c-fad2-496c-b3b1-3a749382eb31\ne2ed937c-ee4e-411d-b8f5-147d28a8fe0d\n0cab757c-bc6e-4883-b31c-e4098e88ba3b\na8a55686-4e87-45a6-9a52-4bdd1dbdb010\n9c62044f-2ba7-482c-8a0b-247d33785c9a\n5b480b5b-6a6a-4ad4-b1a2-0fcd72637eff\n75896072-c193-460c-b781-a42d6070281d\n282e90d2-bd5a-4abc-b0e3-9381b017f725\n999aff02-d97e-4e8f-8220-2e1c9a211e6a\n71f72684-ed9e-4537-8982-e6040d86fcde\nfe1c1637-5c8d-4164-b049-5600ff052b3b\nd6d995cf-0986-4ae6-ae2d-47fe50af5e09\nc452d17d-8a55-4373-a264-86b5c2b0f9f3\nfbb9b0d9-4790-4b56-bf31-a9cc2d54e4b8\n6a2b2f8b-793d-4f31-9b2f-bf1d3c042e09\n9d63f4a7-3172-4cd3-b9b0-ac2c2686ffb8\nd5d10c1b-45a4-412c-878b-7ee06769c9f7\n74ae15d2-0f4f-4b91-9ce8-61f63d9b0730\nf9b796f9-5812-471c-8975-bf13961dbdff\n0e32712b-db7f-4ad4-8996-f7db3349ad13\ne438d3de-d481-4994-92d0-fbc058c7a781\ne412d4bc-07ee-4b99-b2fe-20be2c33ef59\n12646431-3181-4683-951d-86ddc3fc841b\na0e8e0b9-9432-4460-8f49-23280a5fce3c\nb14e9e65-069e-44e4-8d14-a03a360f9b27\n2e6e561b-f404-49df-a2df-b2e9423efe44\naf553484-96c1-42b0-a919-67f91ea310bd\n7570aeaf-38d2-46eb-bdcc-f1a7f8ebe55a\n66157980-c276-4777-8bca-203d77a74df1\n5930464a-f2b0-4ff3-8e19-9e53d76a8338\nc3783f80-dd94-4816-bb5e-732e0e64ed61\n9fd39c5c-7867-47fa-99ef-1a289b5ee62b\n14831099-dde2-43bf-91aa-5271d6448ff3\n59fc4bc7-ee31-43b9-9ab7-e91b0cced682\nd57384d3-c15d-475d-9a2b-7b6da0508c8d\n6dd9da70-bda0-457d-9b74-20647f770e57\nc0d60aba-034d-42cb-8af7-2e2ad985051a\n8414922a-603d-4ea9-b240-218da30ef59a\nd4cc0b57-af35-45aa-990d-b76b687b88f8\nfc5e0dd1-4d85-4b1d-959e-c139698971ad\n31d504de-3e25-45d1-a51c-a6c3067534f0\n700dd2a4-bfcc-4b59-9ea2-89b7956d7b76\n23eb7805-dde7-4eea-9ac2-3388e0791967\neca163c1-49ae-4378-ae92-01ab654faa45\nca934426-d113-4872-a356-5f85ae73f599\nbc4796a8-aa52-439f-b175-4171789facda\ndb9973ed-4461-49cc-aa5e-e4284c936d44\n91cd1b70-e257-4123-8d31-d521e3e41d82\ne03bb319-cc59-4e55-8be0-e9d42bae737d\n7007ba59-4e92-4320-b8c6-a430cf0e9f3b\ne430a4e2-28ec-46db-94ca-cbfed0dc6cbe\n2e228071-3cf3-4ed1-b6cc-90d5329db20f\n97c8664b-a3f9-41dc-8449-d517b4ff44de\n89629e80-6823-43bf-b05e-38cfdfd14383\n5bbb96c3-6190-4494-8d71-6283540c9efd\n77d969c7-e05a-4564-a606-7e2202583908\n48f26ab5-afb3-48f7-a4a7-e70ab98d187b\n016311c2-d463-4d44-b44c-ebc1bf10e6e8\ndf0fd34e-183d-499c-bba9-3bb22d571d17\na75c8c99-93c7-417c-9790-de43ec1cf2cf\n53d49731-1ff6-4337-a691-8b2d48904acc\n2a8eb5cd-af94-476e-a982-d085ba6e2110\n57ad2287-66b7-45ec-b9ab-812e9c0d5970\nfc3625ff-d22d-4442-97c1-44f809b8258d\n65e0822f-84bb-489e-acba-3a00abce6e4e\n2fb25203-4cc6-4ca4-b64f-ca0aa6046c2b\n76ae2c47-f117-4e58-94a4-44b847d6e927\nb9e5903b-2b71-4deb-8d40-5ca73be81d64\nbd47b9ee-52bd-4db4-8d88-3bee45470edd\nff443e68-cad5-4ce5-b5cf-5a9481ffa168\nc241958a-ad2e-4040-b3af-424ee2c973cf\na457649f-eb59-431b-90a8-63546f96c62f\n42a7485b-52b0-418f-999b-40b8fd8168bf\nf3810811-d462-4793-9544-e488c85e02dd\n5336844d-18d2-4a65-8e07-5e83a69eb39e\n0a35d8b5-5cbd-4bdc-b151-1fc371dc03f5\n3ad0ff14-3a5f-41a3-98b4-1fe4a8d96352\ne50d2fdf-fe55-4f88-95a2-42097528e980\nc1c7bdd5-b20b-446d-9129-5a13d1ea0c14\ne2f9b88a-e490-4426-a4ab-10bd55c87f2f\n51a94113-7ad3-402f-a35a-62e851419fa6\na9e4e42e-2a17-422e-a131-86dcad9aad06\nf8bd6d52-1220-445f-b84c-cdc3e211e1be\nbf78f0f8-cd1b-48e0-8341-7d7e9cc5bddb\nda526018-badb-46eb-878f-cff49533f65d\ncc528f95-c7fb-4a3e-80a7-cbe430956380\n04152bec-b75d-4acd-9770-5d1c6be3627e\n3a97a307-38a4-4b88-9236-7505a9783af4\n7d48609c-cb40-43f7-8455-afc3282ce3e0\n4c11a6ae-c0cc-44fa-ad21-9b5b0efb1df5\nb416670a-02e9-462f-9520-6321bfd9a2d4\n829fc51e-3d41-4dfb-890a-2125301e1bd9\nce970cc3-ef56-47c7-8a73-de63b512e49e\n08d65780-07ad-49dd-9eee-ff51ca7cd5d3\n2d789997-9653-4b88-9cf0-efd691e05471\n90f8bfc1-31da-4494-a875-2f954c342e15\nc7e6bdd8-5b0d-47ce-9121-f6c063e84eeb\n8e50cf36-d875-49cb-b3a7-8f6655e11151\n75e2b736-ca29-46e3-8ed9-4720aa026989\n966aae50-de17-459b-9311-2156f75ee5bc\nae49a75a-a8c0-4bbd-b48e-dbf17853a1b8\nc5d91778-3103-4a6f-9d59-44c807151f16\nb2e8221c-5231-4ce8-bd10-f8d0fcf3ea30\ncea6b55a-9db8-41d0-90f4-68f47f91333d\nb86b684c-f243-40ee-9073-17650424002b\nbdeb0cc7-a1e9-4cd1-8dab-b698d95406a3\n78b57f5b-0967-4e7d-86d9-1e459dc2057e\n5f1142f9-d586-44c2-a28f-8c8a9e32e55b\n1f39a85f-6582-45d3-8227-172029d0e12a\nebf5504d-3a8e-43c2-8263-931869afa1f2\necf0d1c6-d23a-44bd-983c-3c1007743d6f\n8653275f-5245-428c-bdc6-bd7a111846d4\n70208ff9-a8b9-4d82-9335-102f81c26dcf\n01f729ee-babd-4cda-8ef7-8c0ddcf90320\n5bd3abe2-fc76-48dd-ac49-3b11f0a8974c\na128eeb6-d776-4e97-8167-825005856fa7\na2d9e94a-1ed9-4ead-b7a1-fb2da2efa320\nbbb4d135-3756-4fd6-a832-40bb26048988\n325906cc-ea78-41f1-a474-9de4599d5297\nd05f9ba7-e9df-41f6-aff0-b15342748931\n6dce52f0-2cde-4ce6-9500-4b0e0147c646\ncddfde38-6351-472d-a95a-0c60183913b5\n089097c3-38dd-471a-8dfd-7ebbc33b11b1\n9b2592b2-748c-4c1f-a52d-ac3395f108ee\n54439df5-26a8-4310-a74c-404de862731e\n7c203cf9-7664-4f7b-9f22-a36ee84dd20c\n241adbd6-25f6-4895-b087-8184fd25c658\n17e5611c-a7b6-49e2-8e69-695833abe671\nc4a36469-8f7f-478c-bcbb-0e8854da873d\n609e6d5c-8406-4160-97e7-fca64c3bf2cf\na48d87c0-8dd5-4d49-a89c-1edd7001e7a5\nc2d61486-236e-45d5-bf1a-f30ee0ddbb0c\n9486353a-31a8-412e-b46d-da10329aedc7\n66f9259f-a2b1-45cb-ad8d-9f1e8306bb9b\n510ebf08-bf75-482c-842f-3ca33b7ae809\n124052f0-2770-4d9b-96aa-b4005bfc189c\n29091448-eedc-494e-abfa-140c444819c5\na7adfbe2-0ccb-4113-96d9-336112130aaa\n15ee12fc-66b2-4e3c-9e01-516a61dfc196\n2941333d-e1c9-46c6-b626-ea02dfa4f6e3\n0ea7bc4d-9982-4f47-9593-7b7eb641e962\nad35acd6-6cac-43d4-9915-289f4ec2f834\n2291d044-daf6-49fd-acc3-183411de02a3\n3c518fb8-c015-485e-ba3f-fe1e65de38d9\n6231c82d-2680-4141-b026-3c53b7c49452\nabeee166-cb48-4e24-9c36-977bace0d901\n1e0233dc-b1c8-4eeb-bc0f-1507f7485fce\nf223dd32-7586-4e29-b473-2c488ded02df\n7395069e-114f-4c20-b5a8-c778c91fc0a1\n2d661f05-f3de-4c4d-bb69-6decf8f1f38b\n639bbe7f-5bf2-4509-bb3c-19eacf7218c3\n52429222-6abc-424e-86af-30e81abb34fe\n0c5f75b9-4dfd-4dc1-b0ab-340fa2f9cc57\ne77af498-405e-43a4-b22c-2385efd67fb4\n750b2b53-8957-4cd1-91c6-a15228cc80b5\nc35b0886-7d36-4992-8819-619fe9d57b45\n1a408e71-3997-43a8-bcda-2957e3a7dd9a\n453a8a08-6cca-41cf-8df4-bcc6a387e60e\n05579d0b-eb1c-4990-8550-7b2bacf8d6d8\nc1eedd48-a0a6-41de-b715-b4b430dd368e\n1f996514-9891-4982-b6da-b3e7c4581b6d\n24256284-5455-48fb-afbf-823990ad0638\n56b3b1e1-44ea-45b7-bd01-4dea72a8cdd9\n9dc3c82f-2c07-47d5-9885-4148643add07\naa60e3b4-3ec7-49eb-8358-5e94731b99e9\n439fb5c8-3e31-4fdc-99cb-ad54c8d24cc2\n8bffa15e-eb3d-4f1f-809a-3b94380f9cb5\n5660e266-63b0-4aad-8cd3-6fe09153ddfb\n5800e51b-70fb-4d73-b559-4fac3004ad37\nb406f548-fc67-495f-a5b5-c00173c88af8\n6c9b3694-d36c-4e05-b0a7-10145e4cac33\ndd49a5de-fac9-4e5e-8370-a6cad24bd7b8\nb3042f31-dd9a-41a7-bef7-a9cd1fef1429\n5a10e43e-0289-4d37-ab47-35b842231420\n085b8ec0-71ae-4778-a147-8b37c973b73d\n110eb054-0bd5-41d3-9dc5-eebc9237fea3\nbfc89cea-b01e-4676-a5ca-c4e8a876d8e4\n363f7581-6aa4-4182-90a6-9af7a5909a11\nf60a92fd-572d-40c6-8593-8b5952de6535\na3de6d10-9ecf-406c-a402-3ea9a4e9d7e4\n7d231e65-6bcb-428d-aef9-f0b64bfcf205\n38faaa12-d3f6-4592-8bca-7966786479a0\nfff87900-062f-4e6d-a8ad-741601c02983\n8ab0173b-6f80-42f6-9914-642a533692a2\n9fe76c08-979d-4e67-98dd-b9b1dabdf05b\ne164e631-c271-4a25-b08c-7d5772d4fd7a\n8ef1f580-98e6-4265-ba20-870bed7a9d6f\n04b155c5-75c0-4739-a7b1-82118723a71a\n8d5bf289-d936-47a4-a8fb-416b47cab0c9\n119b0785-7ad6-423e-b053-90fab5410314\n27b3dc7d-a1ca-4fdb-96a5-9c53b6225ae0\nc2a31309-d9b8-4d08-946b-6c90d58a0e93\nd2fde784-d190-4f6e-bfbc-52beeae76378\nb80b6955-de6a-43ad-bbce-c397b1b29b29\n8472c2a2-e5d2-468c-a706-826a3a502988\n7835a08f-f6e2-4009-92ce-8416385baa8e\n279c8f17-1bd4-4073-9dba-45b1de53a880\ne4453ea9-1b29-499a-918d-03a8269dab5c\ncb84602f-34a4-4f16-849e-b094f3bac2cb\n65aa4c01-8974-49d1-ab9c-75b0c906ad9d\ne98c0e92-0fd2-4dbf-ae47-b6d4a9cc5fdf\n6b2ed70e-1e3e-4193-9282-a1608bb48cf4\n551c2c92-3e05-406d-979d-0a104e4c69a0\n1ab66ad7-ea05-4cd5-812e-2824339d52d0\n72ea0784-5d68-46e6-98aa-efd75976a939\n75d81f20-fb3c-40ce-adbf-3ed02e300035\ncd452908-5530-4321-abec-702f9f5d907c\n5c0863fc-b9f9-436c-b5ea-6fac328b146f\n241e11cb-c8a0-4bc8-a349-e9f5a061664d\n2b65cdd8-3b15-4d5a-9478-f835c5f970aa\n8ffb4c99-6bab-4e79-93c5-19769d044565\n71175601-e460-4c96-a453-e3ed9e0c2b91\n18f30fc3-7052-46bc-b914-49648d4e2096\ncf5034f0-5c8e-44bb-83e8-96d8f7ba6866\nf2d83801-54be-496b-8fae-3143ebc1488a\n8257d05b-3cda-445d-a839-97915cccf510\n6cd999b7-0935-4535-8b41-208b2888f3af\nc28e4761-93da-4220-8d19-1a4e20328e2c\n6c333f91-42ba-4eea-bdbf-9260def47d92\n0e159291-9797-426e-84bd-bb20c455cd2c\na183ca58-0148-4f09-8226-826a7ccc72a9\n866da51b-d2a1-48c7-9058-b3001593dec9\n7e57c3d2-fd08-4e12-ba26-e573f92b14e7\nf7f29109-b905-44cb-9591-215fce8840ab\n78b6b4a3-5dcd-4b1c-a576-0bda87d05039\nfd2a9d83-a73e-4ef2-9050-2acb9ae62eb8\ne44c3cd4-8ed2-4664-8e63-99b047eed3ae\n63716f57-3e5f-4a6a-9160-fabb4d3aab43\n1ac1c1f6-a8a3-4fe3-9259-9d1e7a641b58\ndb5473b8-d05c-4f26-ba1f-06ef1844defd\n2b99147a-20c2-4f21-9718-e6921c510b25\nc23799f8-6688-4402-9b7c-db07b9891bf1\n5137dcf1-acb8-4774-8c73-3ac287dc0596\n087275e0-606e-4fcc-9d62-124cfc39897b\n0323ab62-ad26-4e36-8243-c3dd2b9c6f41\n328dc291-ba6f-4d79-976b-9ba0a7acc3a5\n86bc7591-27f6-4c86-a759-c4e4d2643543\n5ce49f91-41f7-45e7-863b-bb1aeef17d96\n5e11630f-992d-440f-8cb2-2a85d0f00fe8\n57cc4e37-a8b4-4cb8-a804-f5e09304fbe6\n69a0a72c-95a3-4d68-8bff-63644d48e4bf\n0d4f98ab-5578-4704-aede-7c8f6a010d19\nba62ce9b-9722-4e51-b05c-de95bce1c546\na3a98e8e-b4fb-4ba2-845d-3fd7494e56cb\na99d9d2b-60dc-4800-a80b-2610be321da7\n19789092-9a37-4ce1-9ed1-de02efa230a8\n08631208-8c7a-44c1-835e-478895e27f91\nbb977ceb-5ed6-4ddb-ab4d-ea8b88a943d9\nfaaa2ede-58fb-46e4-a829-4bb98df8ade6\n7aa4bad1-4415-4bc8-86f0-87940649d1ce\nbb900f41-8494-4622-b160-4deb697bad4c\n77ce3e4f-5c1a-425a-9177-c7644af933c6\nac384ae0-d96f-4956-9c8e-54f5b930b6cc\n2fd30496-292c-4558-ad55-ed9d1b5aeb72\n3de3236d-3a9a-48f6-8fd1-93d1a4c536ab\n9bdf99d9-67b2-4c83-82aa-e3ce3143ed74\n07f504ef-7364-421e-8953-874880554d17\n4884d623-fc05-426a-9883-9a7159a516f5\n6555a873-ea7e-4623-b53d-59264fff6740\nce6b428c-34e7-435a-a216-bc56af70ec4e\naf5cb48f-2e4f-4b80-98bc-41a659038cc4\nd6d4adca-998f-47d7-a022-dae00fc668ed\nfc4416b4-fccf-4e50-8a96-99b6244c575a\n6574a933-92ff-4644-9926-cefe06375db2\n63dd9dfd-76fc-4ad7-8272-c44edad714de\n64513474-a57c-4907-ab68-ffdab398b2c7\n0ecb3370-b8cb-4759-ade9-c067d5f4f502\n098daaf6-3d08-46d2-8067-465c3a19015f\nfe73fd4d-c2ef-447b-8d33-ed4f2d46d3d3\nf792b23d-e45d-4fe6-9581-c1a3d03adb17\naa22ac82-3f1e-4af4-87fe-ca6574a902c1\nf5ee307c-1617-4da7-a247-d3bd9265d581\n7dbdf1e7-e7c9-4041-9c82-99e1559e5aaf\n5fc0f074-0d76-4ddb-a450-e050faa18f42\n20eb9b59-c282-4d8f-b992-6d2ab27bb74d\n4c14d2bd-1015-4c71-94ff-d260d4e26461\n0911130e-85c3-4fbb-b7f2-7768a9ac22a6\n5166656e-4beb-4133-a3d3-9c4497ca8c31\n1f9d8177-751a-4462-b8e5-af9c3546f1fa\n7a25dbb6-eae9-4246-9046-3aad0b5cd96b\na96098cb-4ad8-4342-bfe9-7db7b578cab1\n0e4e2897-0b58-4d21-b6f6-e6bae8abc3cc\n12cc884e-d288-4a3f-97fe-37258e8c088a\n32d0a708-ba65-4875-a29f-b4f20bdc4c0f\n09af911e-0e47-4b0b-8d21-ee66176b0612\n78e41035-b7e4-4136-a829-a5da10102674\n916448d5-0da2-467b-ae9d-7aea76a79716\nc410fa72-3194-4f46-835e-5c9c25c28305\n7a7afc74-d6c7-409f-9279-6e448f18c6f6\ndb0c9eb5-f0ff-45ee-b8f8-dd189c327c38\nc8496849-14c3-4de3-9547-c3937c641c8d\nf93cd112-dde1-4cd7-8d13-bb35a631a0d5\n77aac12b-92b3-4906-905a-b3efc8a1acc8\n174c65d0-1bf2-4920-af61-eaa4be405ea7\n75ae5fa0-b81e-4813-b460-66eadd884d2d\n9e14d467-3f2f-42ee-88f8-3f37df0cecd7\ncc70111f-3835-427f-bb41-9c40a8298822\n588f476e-7108-4e8c-a491-ff54bde93052\nb27b1d07-aee7-4410-a49b-c51943158d6a\nb36f1d5f-3b10-4825-acd2-6f9c1e168435\n0ebd53e8-491d-4e1a-aa0a-36aadc8a60ef\n1c44da30-6781-4bd1-8235-e50eef84437b\ne801eb19-8a9c-4d30-89f0-08849d966145\nf0dc4d61-e99d-4f88-a726-79085411844d\nf1a2835c-d114-49a7-a94f-7d3fb0cb5e2c\ncaf5eb23-c9dc-43e5-b7ce-c4f81d3e8df9\n57f8c2d6-eed7-45d9-a387-15b3c6cf9fe0\n15623864-681a-4199-ac53-7aa0b232a1e3\ncdbd9b49-0dd9-4a42-8e00-6b3dc95821e1\n149f91a8-5ddf-4a5d-9dca-16380b9540b9\nb51a7805-775a-4d5c-8eff-1243c4daeefe\nf817baa7-5799-41e1-ac0e-869e9cc29ba2\n89b27ada-6245-4de2-a150-72d0f6d58794\nb45d2ec5-6d11-402c-8de3-3d8fc8e35c86\nd3878660-be11-4049-9c12-bc34fc6a4cb9\n4812d625-93f2-4cd9-8200-576eaf162018\n307b5998-09ee-411a-92f0-88017c556d1d\n69d79a15-60a0-485b-a653-2afcf04f650c\ne8d37a66-f140-4f4d-8b33-1fbf9885b816\n00ac9503-2fbe-4839-a8af-77f792376662\n253db64e-ed07-4c6d-8463-81e6cfa9ddc4\n2c1b8b1a-61e5-4db5-8efc-6684ffcb2e78\ne33d1572-3fea-440a-835a-61c4b5d44798\n5b855627-794f-452c-9ac3-b0ef67b22010\nb674f439-aff2-4c26-aea3-b5b1899d8977\nd77061e6-f08f-4018-b568-575544d4c455\n855417e4-9512-43a2-80b3-6ac651c3ea56\nde00b9be-5e68-45f2-841d-b6c83addb793\n353f6912-5273-4f6d-b7c0-70a6f2351805\n2c06926d-1f31-40a4-8e38-52badc1784b5\n39392f0f-55d8-4320-b4a5-8b911a7f8e34\n05631574-9e1c-461f-9a45-d0975fee6a78\n9e9ba177-4cf0-4b50-bb69-3bab271e64bf\n49ac1547-f3c1-458b-8db8-0add94cc00f2\n7670ac85-82d1-4d61-8487-6bf11178f8a5\nf84509a1-815a-43ed-a88a-c98b1057f93f\ne606423a-5d5f-4b25-b514-93006529f936\n485d1b59-77a8-475a-bfc2-c423289e162b\n9d1dcd34-d1a6-4653-b457-d152be93cad1\n962287ce-fd2f-4922-bc22-c633bb45bff7\ne95afbdf-8c5c-4ec7-a978-b5e4e8798d95\n6c483b35-f89b-4135-86f7-38378f4a9b6c\n71725fde-90eb-4d7c-9231-eea59288689b\n1ee95611-0686-4522-aa04-00b44df83584\n279010f3-c558-491b-81a0-bd81033f9af5\n06a43477-ce57-45a5-9e03-03a11b0581fb\n63fa9fcf-a869-410e-9ccc-ab929ab80f38\n2fb4993d-e096-4a7b-80f7-7caf67aa7091\n2ac4737c-1977-4283-aeb9-f8f5c4f36f2e\n74d3f017-fd5a-4153-821d-01b337489bbc\n885be00a-35ee-4ec3-89c7-24938c96f286\n132c1321-255b-4c66-9949-7bbe1e70b082\n90e6964e-da7b-4d46-95d2-060a19cd5631\nc195e4e1-3bce-4fa9-8a38-ea2b56efe816\n74022302-3db0-4ed8-9ed9-a246aae3a081\n32978257-ca24-4cdb-89db-25d6e16ca75c\n4e215f90-ea8e-4fc3-9d3c-43701c2347fb\n9cd079a4-ea64-49ee-ad6d-8a81be900044\n58e30767-0324-4b63-94e8-0dddface2d7b\n6bf52d9d-e048-4beb-b0e6-3588438453fb\n71053864-7dec-482c-9f83-858de914c0ff\ne7c56b06-d6b8-46b4-819e-83ebc1103a8b\n310c0a42-f4f8-4d4c-994b-73b986d49124\nc1ab0af2-9c50-4b69-8836-2a48d1147e43\n8e028af5-c076-41a7-8a98-062b3167c311\n47969bc6-4876-46a9-ac63-6c287d5386bb\n4be315b4-fc62-49a8-9ab1-88bef078727b\n3d6fe1e5-de9c-4348-9312-73c7ba0764cf\n3a8e96b4-0b28-4030-9ea1-7af30fa0ab1e\n8a4ba671-91b3-4a88-abd0-ce709b6891b9\n93607b41-4c96-453c-ab22-f4f528eec3cf\n634835c5-e6f3-4e2a-a492-0ad05007a447\n3d51d57e-3ab3-4f96-8981-8072e59c53d5\n83efbb58-0113-4ec5-b91d-5f759c8bbb9c\n6f797b07-65f3-44db-b9d1-83dba5f9e22e\n0e62d897-7c31-42e9-8918-e05b61fa757f\nfcd16c6e-6430-4532-b1d9-c1b5050f4661\n0c21259f-4043-4c78-aedb-b8720967e1c0\n4611b409-b293-45c3-a293-0aad8338eb36\nbfa1d824-de9e-49d5-97af-34e15e38ec70\n0d191293-b951-4314-a705-6a8d0e012005\n0d816ad6-7f8f-4228-9e40-6831ac782ad0\n485a068c-7d35-4f5d-887a-a5bcc345d12d\nec4157ae-324a-49c8-887c-27b588ff7ed5\nd6f718b8-ddd7-4ae1-91f9-79b9d3515506\n5948e985-d350-4fb1-ac3e-d48a5c8f926d\n3f112e23-f9b5-463d-a6f3-dbc369943dd2\n831128c5-81f5-4a9c-acb7-e3542f018236\na838aa76-402f-4ca2-a46f-177642af5681\ne7504b31-7d48-43bd-a4f5-2a24e415fc3a\n28191972-fbc6-4b92-974a-f523f69e1d2e\n96ff8036-1176-4aa2-a8a5-6339d77e8a02\n09a55135-9e99-468f-9e7d-30b0c8eba130\n2e557a54-c6c0-4323-a6e7-22fcd8afbd97\n5d76d547-d8d8-49a0-b1fe-6aad9b855384\n88a24144-79e7-4181-981e-d451d3316421\n340d8d50-12f9-4ef7-8431-99c7933b1e54\n027d1ae4-a9c3-4426-97ed-240489489328\n0a9427aa-7012-465d-b83f-1f2a9fef337d\n9705fcbb-b9a1-4fe3-800f-e6076574a46f\n93225e89-998a-4d9e-a38e-aa201c7ca07c\ne0b9e9d4-e521-4e5c-a14d-d9e02142dffc\n602ef7df-4739-4cec-9fa8-4a309c6abbed\n5fe7a024-cb96-419a-a661-7eeb37a1d94d\n14c75d35-ca18-425d-b618-8e6f71056961\n019b8291-d597-4261-84fa-0c1f9e0b8a4c\n4a168df8-6b62-4d48-b5a1-e06f0c0afd06\nfa45e8aa-2ef9-4e21-aa06-3aa35a88dc07\nf65499eb-097a-43e0-b822-2ce6597c801c\n0dceb5f2-cc08-4407-8e2c-a51ddd9f6155\n1f3d8cf0-9846-4fd9-a1b0-38b9f1943b22\nd60e4486-5ed0-40a3-b987-f435b0340c62\ne7f3bdf4-da9e-4af6-b445-37c70b78415c\nfb863ab7-ec5f-4dc0-886c-9a897a501e29\n897c7798-83ef-4765-b8d5-41a58a035235\n86724968-a7d7-45e8-a1d0-efc8c6e66016\nd4a9c426-5fa6-47c0-b5c8-ea901c5fed48\n66b01832-6b3a-46c6-ae5b-e6208df7bb07\nbbcf3ca2-f30d-489e-9923-31693f9e2e4d\nb27f9bcd-1508-458c-ad50-1e0a427fa2d6\na56ae8b1-55b2-483d-9fc0-5ab6e1120039\n7e55cd5b-5549-4366-8a8d-0a0968016d58\n0310cce9-75f4-40c2-9708-5c75ebd8e05a\n97817a5e-1853-475f-8d8f-59d926b49e2a\n6b3c6050-0528-4172-a348-afe42456f865\ne939b30f-72f8-4ae9-8ba9-97d81245d2af\n75ceda6a-8bd9-4869-9bfa-a704de0c3b3c\n0a0feacc-3528-471b-a594-5417ed0856f7\ned0f91c1-c513-431a-b6a5-a3c080587935\nf01eccd8-5cd5-4a2e-b901-6b188f64f5ce\nc3e1d1eb-def2-45eb-990b-212d5ffcf9a8\n13731957-7e1b-4a70-93f0-64628bf24bdb\necc7681a-c0bc-4525-95c1-39f413e0ea9c\n6acd23db-a338-4851-9d14-8afb29bde80a\na0971ce9-8ae6-4d46-a58b-7392da6fbf9f\nda5a3ca9-a0c0-4957-99aa-88e55d4c86bf\nf66f6d2d-1ede-42e6-af2b-807f29880bd7\n77ec7ef9-555d-4bb9-9246-41ef9d7e3528\n34d85d61-b7d6-4124-8d1c-2fd10df9fbb1\nebc36327-f144-4886-80ca-dff15d6314d7\nb7563f0b-e520-4bfa-80d4-8001de87dbe3\n943ef0b0-4644-49d1-8731-2eaf974ec9dd\nc0a3732d-cc8e-434a-aca3-cf3b6f072b04\n1a5a662d-4bd3-4f6d-a5ea-a90a237896d4\n4adf0c20-3178-43b6-b6c5-d5a1d7e7f5ae\nffcccb25-a7a0-44c5-ae8d-40a32f4b9f59\ndfe174fa-d9b6-4904-9743-4b9845f54379\n8d9d7227-2515-4093-b238-90a6d24244ca\n366bf95a-a0c0-4b5e-9887-c60f4ddbd3f0\nc5309007-09a0-4478-a77a-541714ff005e\n96b59797-697c-4472-8e05-d8bdd5954592\n936e3a4b-5095-4468-af2b-0129ff125864\nc89a9a2b-f786-495a-a0cd-6c7a3de9e864\n5b479d63-e660-48c2-b86f-f4cc644bfb4c\n0ccc97b2-f3ef-4d83-b4ae-331fe9f6cd06\n5799a64b-1fc5-4fa9-8836-536a43a64552\n5e6ce5d1-3988-49d9-9718-dfa97eb05359\n90b1b0aa-8db3-47b6-b430-c8603518a50f\n29334feb-791d-47f1-b539-32ed2f4a0dfc\nc5932573-00b5-412d-b8c7-26bee07f4ec6\n56e64ea7-2462-4a9a-9729-d940a875681a\ne8377ab0-ce2a-4625-83a0-7169a99984e9\nfbacecd7-d092-4670-810f-8e3a58f85fbc\n2a152d57-d172-4c17-a38a-5fdaeee5640c\nb6c5a3c3-eb62-4e0c-a01f-1bed6b087c05\ne95f2114-2b51-4324-b572-2f6616b8571a\nd6d065a9-57c8-4d9d-a247-93266826965e\n8c88080f-89eb-4126-8e8e-5308298d9cdb\ncfbc7036-c3ea-4e66-ae70-75f45d9b0714\n450f7049-5f04-4b90-8207-adca9e1b2d95\n64f41beb-754f-49e4-ba75-15ae8ac77688\n4df1f431-858c-42d4-9dae-dc99c95c9bad\n462e7ec2-cb29-443c-baa5-5ed8944ef86f\n3764a180-6fb6-4c63-a9ba-fc67528650af\n1af18151-60e5-42a6-8031-8bf1ac3ede5f\n01174a95-5432-4300-afba-01f8c6159fb1\n6eb0b6e6-25e0-466b-919d-c621e2004636\n8759267f-d3bd-4ffa-a1d4-b1110a5dedcc\n7ace1628-d952-443b-aebe-82cc74aafecf\nf417867a-14ec-4cb8-ac13-856b545b1582\n7345a503-4c37-43a7-914d-327f7270b5dd\nbb7867e9-bd37-4cdc-b123-cb2db0c2dd33\n4a699887-8a72-4078-9cb2-3aabaab3f3a7\n3f3865db-5c4d-4732-a2c1-81f3c2b98844\ndb68d4d9-4b22-4cd3-845d-10c1a06d755b\n0737e7d7-2d9e-407b-958b-1e2ae83e7481\n2509ea78-8f92-4f93-9b32-1e1b17e1151e\n70b9d4cd-665b-4670-a0f9-64c0e1c12135\n011612e6-7f32-448c-91e7-9dc75a01589c\neeb29cc0-0434-4075-8c43-2bbacb8a81b5\n36e6b38c-bd96-42fb-9bb4-b57cce66adf6\nc265c6c1-c9cb-4a7b-b51a-b213b3c5d65b\n612d3c7a-9bc5-4c11-8b16-e1a4a5569fe7\nac0904ab-0a0b-46bf-a023-5953f8cdfa51\n283959da-17fd-4a99-83b8-7077b52d2495\na070478d-60af-4d0e-b77c-7100122da0b5\n79fd6643-55f0-449e-aace-655810e89fae\n6d72f8bd-36ea-4d6a-8002-13479226c6e5\na03b6497-b475-4974-a223-23a15abf05dd\n3786d1ed-a44b-41d0-ac86-69ad81eb715f\neda1fa60-0d21-48ca-8f62-46599c31daa1\n8806181f-4061-466b-b980-2abe2c7a4fb8\nf3352db7-1468-4539-afe3-22b99d1eb075\n4ec97989-cec5-4706-9d52-d6a0c208a374\n0ad4e979-0ccf-485f-97e8-65fb6267caae\nb44004ea-1333-45f1-875a-4e15ae3de737\n5466eee4-da77-4486-8152-6e673011aff4\nfc98cf5c-bce8-4617-8d6d-c36800fa2654\nf86060b8-c87c-4e07-ba25-09d4d12a0cfb\n7d4aea14-f6b0-48bb-be6c-9f81fe358a99\n536e7649-5750-4425-8690-2864bfb570f7\nb48918f6-8164-4faf-bd7a-8ca9cd13cfda\nc46f71ab-d64d-448e-bb2f-30204f66c640\n83ca23d2-a413-4e04-9faf-6f84d56c9867\ncab4935e-0fab-439e-8a43-5749319b7c4c\n54ba69b0-c006-4ec9-9b98-fa4842317a04\nb5a6ed84-6ec2-46ba-9656-77b2443a0205\n50e59d77-9fb0-4c9b-a3b0-64f0b71d2cc6\n7c63e7eb-3bd9-417e-ac2f-ea41da54d06a\n532a6bcd-5626-4a3c-8f3c-0cafe56c00f0\n84b095eb-b61c-4511-bf6d-16c4bb5f69bf\nf18ae86a-8f7a-444f-890e-f10dea3c0625\nc1f0f048-4116-4d87-861a-4468db0de6dc\n05d7bf5e-eaaa-4df4-9fef-5cdc7b787b8f\n656e95b7-13af-40bb-90a4-f42b3c9015ac\n22ace0b3-b911-49eb-a93a-684967ec0923\n5258a767-62bb-4ee9-858b-d0ec58216055\n84201cf1-ad78-472d-bc89-d396d4e4e9e8\n25f8b6c1-08cb-4737-928b-66653366b9d0\nf34a5787-ec46-43fd-ad6e-f48b41ee8e1a\n14848ca0-06f7-498d-94c7-47ea743e6d9c\n0e01f4e7-00d0-4425-860d-a23d7272dbad\n888440e5-dffe-432d-83b3-29bb761701e9\ne01834cb-31f5-41f5-92eb-3af92aef0ce0\n51a39bf2-7d0b-4219-a1ff-9b8214c133d0\n3d55778f-bf16-420e-9dde-ee48b14ba87b\n5c281ac3-35a5-48aa-9258-c6a1220ccfd5\n16d3e851-2cc4-4e61-a35b-d17b5391aa87\nc57833c0-736c-4e66-8685-652deaa1fe5e\n9f4cec35-cbb5-448f-b57d-075f37a6a987\n791c3119-2594-41a4-8c52-e5728742a55c\ne90d3c32-b707-4e2e-ae9b-7233140676bc\n789cff8d-235b-4470-9ebd-7ef17ac15f12\neb61ec44-1af8-4622-b4ad-98f13f0c1e49\nd0323881-06c8-4c9f-b460-07738c0ad9d9\n80901a71-60f1-4964-a7f0-8398a8f7d097\nf58fb66f-0f42-4db3-8f09-ebcd612dc075\n2ebc1c50-82ef-4964-b8c2-0b676b300e11\n9c9a8a96-48b6-487f-bfab-1b389dc62fa8\n68cc85fe-c702-4b93-9bbb-7f404c411d4c\n2f2f6d5a-5ca3-4014-8cc3-80b680bfcd07\nb54ff2a4-67a5-4d00-b205-b257aabc5daa\n15f63721-eaa3-4a35-a859-99abd2e073b9\ne6499c9e-c369-41cc-947a-33a9c72c01e2\n1a98f2a7-06fe-4b54-bbac-3eeb2bf97f45\n29f46b67-07aa-4397-aab6-4d0d14507a16\n9326c0ed-2243-48ec-9229-9d83e1391a76\n4cdac920-100c-43e8-ae98-c6a2c3775cf7\n1aa0de93-4636-4c89-95f1-eee3160a13f9\n3564bc57-9242-4dd8-a3d5-21f17758c976\n6a7e177b-ec38-4eb4-9bfd-a9d1e19e5e86\nf41c7724-9755-45f2-9e4e-0329aee37aa3\nf95fd754-5c65-4654-bfb0-f38e4e05e755\n5a9f6aef-8466-42ea-8087-1b3becd18e29\n2bf6a809-41a2-4afe-a491-12566da548f1\nbaec2e96-2fbf-46c3-b0c6-c5c317e52f37\nd6e602a3-1e51-4520-a335-4588ae5ceef0\n09223a18-eeac-4d98-80d6-9c87f12047e5\nfabdb606-96d1-43b6-bb96-a70804faeabf\n23eb2c9a-d50c-4fff-8b40-4bc30cbde373\n018aa73a-fe2a-4b60-9eed-dda3b7e5aab8\n07a1f36c-191c-413b-800b-c5aed685be39\n46003c3b-980a-4261-a194-814f0e7a189b\n63a38efe-7d6e-4656-80de-e9963bee4522\ne39f8cf3-e72b-42ba-9b4f-5dc606595f99\n2dd27d32-b5a3-423b-8917-958d3fedac1b\n853688ef-4a2a-414a-a7bf-bc99389fc38e\nf8fdedb7-48da-43fd-8fc8-67739263a7d7\n60b340cd-1456-47f3-b038-ad244252de3d\nc64cc0f4-e48e-4e0c-ad06-962c05546075\ncbb2e891-6b61-4e8c-9693-804bcc18e5c7\n56d5c9fa-9728-4f3d-b456-f08c93b4b397\ne2f51b6d-5c37-478c-a6da-d6e560624ca5\n9d10a62b-aaa3-4191-9df3-cb971289897e\nc83062ed-b38f-4660-bb99-9b2970fcf335\n0a6a80e0-d746-4772-9930-4ffa0a05623f\nfe5889c6-182e-4ff0-b436-6d4b39137fdf\ndfcdf2f0-cb09-4f9c-a58b-b0224908cb4b\n9ea918d0-96b9-437b-b258-9cff0360fe51\n8b778ccf-5af7-42b3-a1fd-db57f086ab76\nbadc45de-ee10-4a08-9d5c-bec82784e84b\n99872637-bddb-4840-a8fe-06f8c4b331c7\n673b2bcb-7fc5-49de-88bd-8562e26b54a8\nc00917a5-8b0b-410e-853d-4fde6bb1825f\nc7b6fae8-7c17-41e7-b080-8b1be9c34548\nc9136c8e-8efb-49cd-89b0-1931a9f33129\nb0d351e7-0b0c-4488-b910-49df36b9f141\n3c616e24-4d61-4af4-9996-d6dbbfcc68d0\n8541f37d-e9b9-48cd-aa04-a3481ec10d10\neb28062a-667d-4c71-8f93-cf8443419764\n7b0ae200-c7fd-4d92-b178-599385180727\n0baa9c0d-1f49-4fac-86ae-28e9899eacc8\n9045d193-8831-404a-af23-b1f549303848\n0e1c47b9-1ddd-4faf-bb11-98a85510259b\nc260fb5c-8004-4418-b8df-c9820c79acf1\nf3a267e6-08a4-4298-aba2-0f12d483ec4b\n235f4317-12d7-4026-88e9-7ee0eeee4ce9\n945d2ade-506a-45a4-92ac-e59c558765ba\n788f8717-b884-4656-a910-fe793f3cef28\n1c7d33a0-f9d8-4bbb-84ff-79c0f8c681f5\n81212d58-84f5-4189-80fd-567e0cac0bbe\n7cbaa2f2-6835-4742-b8ff-b18ee957655e\n02e225f4-8bd0-4228-b347-48f1db455939\nf3f58a07-eba4-4d73-88d8-b003592f2164\n9841585c-6562-400d-9581-4adfced2804d\nadd4976d-7fc2-4d84-bc31-365e146a4640\n0f412de5-f4a9-43b2-be61-f9f499b44fab\n414bfc46-0692-4761-881b-1d25c88879ba\nd32252a8-7d5d-482d-b5f9-21681537ebb8\nef83d69e-a12d-4e8d-8768-c4f5d291db90\n9c9963b2-2e92-4413-bdd4-270f4b76e503\n89d32572-1eec-4b06-91c8-d3a072361d4e\n15249ece-a557-4d52-a4ba-27ce44086034\n13399cf6-cf78-4c2b-a602-b0af8b36468e\n28e47dd7-9302-48a7-a4cc-d8d58998f632\ndfd8dabb-7da6-4d9e-9139-5aa09eb40dd0\n75679f8b-1744-4a47-bf45-5a4330fe4b17\n4e1b960b-282e-4d78-8496-264ff87a024b\nfcb2c3b3-b006-4a6e-a127-bc48bd13da12\nf926e0e1-cd18-4644-91f9-6f14099d8c7f\ne3dc2e99-19d4-43c1-bd37-eafc4a0e64f8\nff52517f-8634-46ee-a55a-823ed034fb1f\n0a53d081-202e-4203-99f6-2f8d5c125223\n93b4cc17-ba3d-45d3-8315-f88fd37143b4\n1d79a0eb-fda1-48b6-9a6e-5d95d31ba896\n80883247-c6b0-4691-8711-6f5795a7cb98\n5d360d3f-50ea-45de-af3c-effe30b99a37\nf643b5a9-dc46-4d3c-ac79-cb8a11252188\n6153800f-03b2-4056-a861-7f7bbf956e0d\nfbff8818-977e-4ea8-9af1-5463552844cb\n00cc9dd4-e139-44f1-8822-45d9fa27e7d9\n1988baa9-0fe9-41b7-af6e-441c29577f13\n590090f5-e606-47d6-953e-edb1b680d316\nc4196e51-6561-47d8-b8f7-b46411c03a6d\n9da6b63b-26ea-41c1-af64-ad68e1554721\n3704bdcf-92ce-41b5-a230-080943d59f9a\n15461e5d-1cee-4e44-a914-c9e2bb4832cc\n73fa9a93-9b2f-4d20-9974-680189ff1ffe\n8bdaee33-6212-42ea-a923-848e693a469b\n9b268341-735b-43b3-b550-d320a7b6784a\n221d507e-45c6-480b-b8f6-e3d205fa8b75\ncf529fd9-46ac-4437-8016-b914b4fc3e39\ne9c1461c-ff87-41de-b312-a14acccd7dec\n95ace7b2-bde8-4d2b-9a64-a991a7f6c00d\n04eec569-3c97-452a-8ed9-72becabf8088\nff650a0d-654f-4377-9bab-d1df9f053f49\n24a6fd6c-28e8-47af-a5f0-edbed127a029\n77153460-7311-440d-b799-ad9e56a3b722\n13749464-9b38-4bb5-bc9c-708c6afb3530\n9b4dd3de-ad8d-48a5-a0da-0681f3b6c6dc\na4dfa564-b829-4425-bbb3-75b652729e4d\n617021e2-5db9-4c6f-8443-a3103227cbf0\n4151d6ca-351e-4702-a738-37845e85540a\n39deb222-0561-4ff4-93ed-078cc0882956\ne80cf9e0-d489-42b4-8ab9-bfef467ad8ac\nfc2760ec-8b9d-4691-af2a-30deaf655636\nf5de3492-4a21-4df8-be21-6fc6c77becf9\nceabb3a5-ac67-49e9-8886-3599ddc24d74\n32ad8110-1086-4edb-a0bf-9c04a3861056\n2aa50ade-49a7-461f-97db-84172e55c7ff\n2f32b158-c61b-4178-b020-50fda96990fc\nbb718fb5-9ba6-4ef2-89b0-88c5fb4ed27d\nbd8f344b-8ce8-4216-a7f2-e6199495e225\nc1406c56-8d4e-40b0-8d42-6edc5260b8a2\n248adbaf-8085-4141-93b7-88844f13276f\ndc2695bc-9d14-4d15-baa3-d1f286d4ce1c\nd5a6617e-58b8-4abb-a21c-c2bf65ece011\n1cde273f-411e-4999-86f9-8c650932aa7f\n7d7ba498-f59c-44e6-9347-6491bf049ac0\na767dfd7-d7c4-479a-8b32-8982b403cba6\nd0361ae2-9d1a-48ea-be94-73158a1d55c4\n65369c52-469d-4f07-a5dd-3ca88cd3f629\n301137fd-da70-404b-833b-1d7251e51987\n0f9c0978-38bc-4057-bc61-83e602dbae7e\nb022ea0e-dfff-4de0-b7df-816a30f4ecad\n101fda71-792e-44f3-b55d-8948bb091f36\n6b63a289-ddbd-46d0-af74-dceff79d5d41\nf5859eee-2074-4fa8-beb1-61c3c1ae8004\n18880ccb-dc4a-4989-a0d2-734db4dc543f\n7ee9e740-398b-4e6c-a5c0-0a3133bf0e4e\nae887f37-d27a-411e-bb63-279a86d65d05\na264c6d4-1900-4674-a42c-5c092acbf4f3\n34d3f930-0894-4fde-9f88-279361975d23\n0c929d32-5259-4d25-bc3c-378388bac1fa\n29254e5c-91c9-46df-bd35-6d74ac5bd6e1\n0bd9741b-ce77-4dd0-84b7-ae7a48f3afbd\nfd6998da-90e6-4a7e-9c89-7ccbe5385131\n98f201c9-ff8e-4b4b-b085-86c709a0cf62\nf318e917-250b-48bf-842b-46cf7515b387\n61f061fd-9cd2-4962-a22f-482065f0f78d\n627fd3ae-4fad-411b-9f10-192bf3da3481\nec5aef5e-c333-400b-8922-70a329c2d37c\n142f69ea-0c10-4f9d-90c2-1fa99fa16ef2\nd8164957-efcd-49e7-8482-f99b3de13a42\n251405d0-464b-4db6-9453-ff89b65277fd\n042131ca-bf24-4537-a78d-1a8d033d25a7\n449b5ef3-8f88-4e05-af85-2df65dab6ca3\n7b4d42f6-3ddf-4c3f-b150-0f18908ef7e7\n227671c2-edeb-4b89-8144-450f25b2ae98\n735ea304-6019-4b3d-b45d-d13105935124\n816b1911-d481-44c6-a562-08f930a40eee\n7c2dd453-8aea-4cdc-a9b5-34b067bedc30\nda370c79-556b-4f7f-ba88-4094acf3c44e\nb8f9708b-e23f-459e-a38f-845750e25a16\nf3002be8-1071-45fa-940c-e1f961a20b70\n7e84a05e-a2bb-4e3d-b623-51ad677934e0\n3359b9d8-70b7-4008-9271-75e8ca4a6ab3\n8be63fa1-ffcd-4986-ae0a-1f83b7228c22\n325821f9-ac9e-42d3-8825-110d7af8d466\n2fe44e81-203b-4be9-9a5d-4894d7e32c7a\n7f299480-c0c5-4091-99f8-3d3f4eb22335\n297ad80f-09d0-4e67-ace2-ba071c042cbd\n8dc34002-9c41-44be-8863-d7432e8184e5\n2b8f8b65-7d13-4e53-9d9d-6c1bec87ffc8\n4deed7c8-56c9-4a90-8ded-fa85146ac877\n965077f5-b427-41c5-bb53-bbe57369a737\ne17d4738-aacc-4826-b62d-9d03e528bcc4\naf12ec2f-7f7d-4305-ac86-961e56d98740\n398ffe0f-8de6-4d14-b00d-f34ecf415200\n3077e849-7bdd-4819-8b98-7886e04c46f3\n4b0444b0-3770-4eef-ad51-3da8ad13d354\ne866e0e0-a22a-4eb7-915c-804edaab2eb2\nc132f33a-9e1d-402c-80c4-b4d75fcc7c3a\n1d809a80-4f1b-40f0-9acc-95d396ac6c4b\n6031539e-1f37-4c6d-8975-b325ab7ace89\n403ac6f6-9c3f-4b0f-bb71-76576a5ff3ef\n138db111-18e6-48e1-91d2-0f2edee7e2cc\nddf5db6f-d801-44ac-936e-dc93a4b70a74\nc174ad4b-36c4-4ad7-ab30-d9c4b8f1313e\na136ef65-2ef6-4efa-b9e1-5a6dbab4024c\na67f5ae3-2a4b-47cb-8351-43744e11541e\ndadee246-2208-4304-b12e-d6c8c5108243\ne507e950-2d4d-40f3-90b7-0500563a7f04\n8b8221e6-8e02-4a95-9362-750b63d2f205\n9bea5191-da2e-4637-b871-ecec2c207bfd\na0695b2d-e23a-4a44-8722-98ff3d512445\nf26a5b11-27e3-4a19-9d63-727d8c026372\naf2e8811-b9e2-4bf4-9795-05dac90ccb5b\n3fbabe35-f1b1-4769-96e9-6b04a4d62c2c\ncda843a6-e840-416d-bfe7-c17b60b090ad\ncb447871-4cd7-4b76-a652-d0fdac36d234\ne39b56cd-9a99-4e02-8e01-fe90f5200d34\n0673f4b2-18b0-42aa-83f4-8294f0ebdb26\n28a343d8-f059-4fc2-ade0-142eb9b31f1a\nfc608098-90dc-49ae-a9a1-7de3c3719d7c\nd2b3bdc8-fac0-46c5-aef7-13fd7078a301\neb11c23c-f14a-4884-bcc2-7a2872f2261f\n78d7442a-e60c-490f-a659-b79a53893fe4\n60ee9736-e2a6-4470-9c3d-d585abd3f65c\n78416a99-97a6-4cba-acb4-7bf78f5265cd\n034e1f21-54d6-4fbe-ab00-aeed1b44c512\n0d2d432b-1962-4352-afa5-55769de5d5a9\n43dd847d-9e16-462c-aa00-14c12e452c76\n83579adc-daae-4261-bc79-506e6c256ee0\n16416e7b-1620-4abe-ac5f-18a6f26a6ed8\n1107f7da-274f-486e-9a1e-3976dc31af25\n3e0da13c-1a8d-4deb-91a5-9105b1166971\n54807de5-6310-4180-a97b-8a65bcf8d237\nbc0016b0-cced-4840-af20-5952ea418630\n883a4d6e-7428-400a-8ec5-7af1fed9302d\n18ba1fed-561f-4678-8230-20413e142f6a\n2ac1a93b-0c77-4005-bd7b-47cced1e29a0\n756f7e64-0285-4399-939c-8e8afaf67277\n8e3a32f9-8252-4e5d-ab91-ecb0ec697b24\neab7d348-2bf6-4162-a98d-3272650719b8\nfbe4d57a-e696-4a91-b64c-6649bd5ddcac\nbb9b80d6-f51f-4930-a22d-d0e8ade2080c\nb6d4adb8-e791-4879-adc8-f3be61d1b23d\n1b251a0a-1e98-4011-88bd-695b67c6692d\n218c84ab-f3be-4671-8118-db94031b2953\n93f36107-7d79-4927-9e43-6699beb486ae\nea82c603-626f-4064-a55b-ea0353027419\n643eb15c-c96c-45c7-a027-e8ea350d239f\nd1d80094-ef62-4b54-b747-c6db0ed05227\nb8302b76-3c46-4fbf-aaff-7cbd8bd7170f\n12341648-2d59-45ad-8e01-6761a41b8432\n489ba645-4209-423b-9ad3-323e8cdf343c\n5b6cfbff-b5d1-4de4-8b71-29ab765054c6\nd78a9e70-f674-4f19-8418-6a1f2a90e3c9\n35eca9ce-77d1-49c4-aa0b-be11f7c7caba\nce259368-45f3-4403-854c-bb5dfdaa41b5\n883cb436-2fd2-4909-a75d-02250e25b61d\na4225142-87d5-4178-8cd3-66ebfde2ddbc\n32672497-ab55-4a80-a20d-960771a83ba1\n8d837615-585f-4881-ba4b-a91f9536ffe6\n41221bc8-6f5b-4213-ba84-06fd1d7a3d5b\n65f02fe8-f98a-4497-8ff5-7fd2ed3423ac\n48ed125b-7760-438d-9e57-72d1453aa363\n648a669c-7766-4020-8ab9-fc51df79b828\n29d0279e-dc9e-4dc3-a5c2-515d1841f4f9\n1880e36d-bb01-49f4-bd64-13c8bcfda69d\n5537d352-5e34-414c-b316-d6b26326e530\n8253dc04-983a-4277-913d-24b567b7a38b\nbffc9b3d-8b46-4195-88eb-83cff532db1a\n244ca46e-aa66-40d7-ad33-f780c20fa93f\n8b791ae9-b184-4236-b109-3836c3f3ecfc\ne8d39ebd-b040-41f7-9a7f-d81a67b697e3\nb6a09bcd-bafc-4255-9f7d-9b295e180f4f\n4dc16514-c1f2-446e-8857-c0e973d49997\nb375866a-cfc5-4b05-ba08-fa3f68998778\n64a918bf-f052-4a1f-bbff-5181a37429d8\nb2510dd3-dd2e-4154-9d0f-e057102007eb\nf10f9f04-2523-4c7e-a1bb-0c7d3a99b268\n4c1dfa4f-5a02-4335-9fb4-975249572775\nc5983092-d987-4861-bb03-ab8392c4a331\nb8a7125d-97a1-47b7-81cf-453ed6908dd6\n6c819fc0-60ca-40aa-b63d-bd7ac07ef4e7\n5b86912f-3f91-428f-a453-a15427b121bb\n4168d8f1-d046-421b-8986-ea43680d44f1\n4a27bdbc-a103-4e55-8b31-c7f2249e5fc1\n4d60a1e4-3e43-4561-b1d6-823ba82ae124\n12b779d6-83ea-4c29-9429-5edd59ab8259\nc5ea99a9-9d1f-41ad-98f4-e2501f74d388\nebe6cc09-e2ef-473e-b761-f1aec8b8c361\n607eeae0-9bb4-48e7-bfab-9567b75f2b84\n9b7f44ff-73dc-4173-a8b1-16345b5b9c5b\nce85e60d-9afd-43ab-a8d1-aaddb086987c\nb35c0c2b-1396-4277-9d95-07840b3295cd\n2ef0c709-8404-45a8-8161-e495d9934b72\n83d47d15-3a55-41f9-8401-e0f6ff0b69fb\nc02c7cde-1e50-4b7b-b053-788cc2b409d3\n6320b11b-5b01-48e0-8059-fed112dc8ed9\n6c951a9f-2c6f-4e0b-80fa-240c72b48286\n8a725482-8f4a-49dc-a631-6095120ec5a3\n5b858931-9e03-43c1-b72a-34f57b89e479\n54f593c4-3f30-4c8e-8320-23ccacbd2108\ndf60391c-9f8f-4956-84b8-0ae4ad5d5feb\na02b28b0-d3ba-4eb6-b5ad-6853a4c7a5b9\n1f734fcc-8166-4724-a8a3-05bce4b66e07\ndb6ee764-4613-4bf8-b35b-29cb2f04db5c\n9626b8fd-af3d-4b8f-94aa-0542efc3d520\ne29fd726-5cad-45af-bcef-865883509886\nc86912fa-b66b-4d59-aaf2-930c37fbd2ae\n75a89f82-ad0a-4d82-9a49-92beada2d508\n04ae3979-b5ce-4b78-98f6-1c2cbe593ca5\nf37f90fa-f410-4d28-919b-ac2ca365c46f\ne6f9b7cf-c3e6-49fa-9e32-301ee50881d0\n7149761c-3939-4db8-9412-ccccfac7c3cd\nbc9908b1-ddaa-40c3-bd7c-d377c5369d6b\n556725cd-f25d-4eef-92f9-ea63b7fd97cd\nfdb9eb85-ceda-4bfb-a965-1bcecbb05b67\nd7096eb8-6623-4fb0-bf9f-c596ab723506\nba5c9deb-204b-4467-a1ee-744e9f6712c1\n58a96c40-3369-4f94-be81-47ed2d301276\ne2ad68f2-2569-490d-a651-d9f76554cadb\nb6128047-8e37-474f-b1bc-6408cbece910\ne0f060bf-b6bd-43ac-85db-276f5e59b48c\n83bd3f25-fe5d-4fd3-8410-056689cb2c8e\n130058d9-8691-4549-b6d5-ec8ebaa2095c\nc58fa985-039a-4a82-ba3f-4b4a850030dd\neefb4778-32f6-4c6d-b839-1060b323bf34\n94a7259b-3531-4961-b95d-64b247193649\n94f92d2f-4b35-408c-ba08-00c436e5666c\nd98d97c3-d1e8-4c6a-98d0-71d291648442\nf4f6a474-2dcd-4111-afda-a9e50a903f7e\n937b2d78-bb35-4445-af3c-9466df082a40\n31e83840-19f2-4207-8e24-6309c2236d80\ndf4a9867-70b5-4787-b370-9a2e2f8dfb49\n9557e731-1680-46bd-80a4-031f080b5a0c\n6cffb9ae-683d-4d7b-9d22-4964db3d87c4\nf80cb89a-ee95-4864-9066-09688d3afa36\n8f8c5074-303f-4148-88b3-79fe93042f7d\n44d5eb34-7116-4573-a43c-1e8ab5417af8\nde89b0cf-bb8b-435d-8986-54a8d7a8bd37\n35ba05b2-92fb-4611-93dc-538f55898f7b\n8eb5a8d7-7a30-4bad-8b81-0466842d9cb9\nadc1d5b0-38a0-4730-84fc-88c1606a30f3\naa65155e-452c-4251-bb70-ff2204f66c25\n6d2cf8b5-c95f-4185-9004-daea1f3a402f\n36db68be-f274-48da-95da-ae13ce38d169\n2cb56f68-9f45-4229-bb1b-945ed9c73bbb\n9ae201ca-8459-4f45-a903-07f52fe222d9\n4d1e6f85-6c8d-4c19-a907-658580f4325f\n344619eb-4290-4351-8c08-beaf27ce31b7\nbc9857b8-eeb9-48c1-b994-01524f08473b\n6ebbee81-42e2-4d89-9edc-24e4bbb23f09\nccff59e8-f383-48ff-a605-356833c49363\nc3434e46-32c2-4c56-bff5-9429667cc9a5\n808e1744-2c8b-4c85-961b-a010d2da756b\n41e0b179-972f-4c3a-9f08-dac6ddf99643\n94ff1bc7-f462-46c1-9c9b-dac8a3ae53ee\nc03eab70-133e-4999-8cb3-2166e3eb4043\n36138b50-dcc6-443d-8622-080327438452\n74e2454f-539a-4225-a63d-1fe6c0d0fa3f\n15f5c90c-1920-41f8-81b3-f316f040384b\n920de0ed-2589-44ca-be0c-48d57be2c77b\n71fd5c86-cfae-400d-9d26-b9a7d334f35c\n8b662fe7-499a-41b9-b271-8850c979cec2\na9de4f1b-aae8-4827-acfb-b6cf1bf50166\n9203db34-7f11-4aff-b132-c04c93e2ec2a\n7f6e4e6a-d192-4c5f-8ee5-c49b591c2a9f\n8139463a-6948-4c09-847c-ab587002e700\nfbaec9d4-00e0-4399-9af6-406e6b60ac6f\n8e23929e-9c17-4d2c-8c6f-7f574b843e49\n7352f00f-4884-4200-8406-4009294940f3\nc7c863c4-11c9-4e81-800e-1c9ebb693bdf\n9e9ce259-c8cd-4cad-93ef-d4bd30b069f1\n25085d57-66fc-4e68-a83f-70873905b82f\n69981be6-6d2e-4ebc-ab62-32bb1a39c262\n71f182cb-f7aa-476e-9f17-752adbf43ee1\n9f33fbec-214e-4fa9-ac89-9b130cbf41d8\n169b09f8-6d6b-4bd8-818a-e6f25517d9c9\na7eb7209-1381-4db3-9108-8ae5bf56ac1a\nde79950b-5bb7-4ff7-93dc-455012665a62\na18a6ccd-18bf-4170-99cf-6c0fc0eafc86\n5daa9ed7-20fa-4d02-a95d-c2049c7ceac7\n9d2734b7-9010-4b98-bae2-3cd72220de0c\n038361f6-ee17-491e-bb04-cb396d6cec4d\nff7dc556-4752-48c2-af0d-80449199cc69\n4d4560ea-3053-4088-aa3e-44fc41cab70e\nad03cf1b-a2cc-4a94-8f0a-148e6b12a841\n156a4ea6-93b9-40a1-8ecd-840b28f8cd77\nb5f8e248-a1b6-45d8-8436-bf8750be5da9\n45085b67-75a8-46d9-9915-c67a72e66af5\nb3365436-6793-4123-b031-0e573c10a693\n86f0ea6e-44c7-4cbc-ba0a-6bd39e139524\n4c20749a-d80a-426e-a2db-38866e69804c\n748e8efb-6ae8-4818-beae-cfddd93b6924\n1d4b4c10-3368-40a4-be9b-7f1c5ab20738\n8f12a356-e367-4658-9ef1-d5e1cecb259c\n8b1ce24d-6304-4761-a918-fbb097ba5eff\n873f4b07-f349-47c4-8ee5-61ae7a9a0a8b\n0d1d9b37-dee4-4825-83e1-f87a6b501ac7\n71844d13-d356-4a34-992f-5151d50a184b\nf909d9f5-b54d-4b48-a24e-3141bed5d28f\ncef74f18-e6b9-4e56-95b4-cb4051bab68f\n7ba0e1ab-900a-40ea-86b1-42f3014d5501\n379ea27a-52f7-41a2-b29e-04da42d85d87\ndf1bcb55-aafb-4726-9f14-291068582b82\n1d80cf21-e633-48bd-8213-125c63e91668\n7f9b4c86-629e-4598-be95-092ef571b708\n236f1538-4bf4-4db9-85f6-8b54fb174728\n95420075-4414-43f8-9577-fc5b45dfd5a9\n32759fbc-2907-4cea-a952-06c97f59460d\n98e9620b-4382-4183-a0b8-78054bd2fb8e\nc08ff243-a182-4799-bc82-2478fb41b431\n47139fa2-601e-49bd-aac4-1b73ba4cea4c\n9bba8c61-8cac-4f53-9417-5889b0c58631\nb65a3b69-85cc-4304-96d9-2ab9c062a600\nb118ba88-10cd-456c-956b-e122c934ef9f\ndb0da1ae-d387-47d6-ba7b-01a16472d2cd\nd36f88f6-e0f2-4ac7-8479-f74b249e7745\nf9a7434b-36a2-4ca8-803e-deef5e9f166b\n326db0b0-26a9-4213-9339-ad6eb74e109c\n8afa013f-27e1-4d81-993a-e450f774ad84\n39215c5c-9160-4d96-b804-c191cfb69b2c\n4d45bfbe-438f-43b7-b9eb-22ea2cca38d9\n4973cf33-64d6-4ebd-8981-784e9ef86bcc\n02cefe24-227e-4428-b26b-91eafb0a6ca6\n5f8cad1f-dc91-4a1d-bbf3-51c52f215a55\n2f805336-ef8f-4d40-a780-0ecfe56d99b6\nb06f1c33-1845-4d8c-b0b8-47f7625ab87b\need56ed2-f16d-4658-857c-5d093b351e3e\n6d060ef5-bc47-454f-ae40-991c62d5e801\n1119fffb-216c-41d3-907d-7d2118489366\n7c827d83-dd91-445f-bf6a-7624a695ac1d\n5bea9518-1c7f-4ca0-9c19-3b429d4150f5\ne66dccd4-ccb9-4ae0-be2a-65a66e8eb481\n3a95a41c-54d7-4029-a2c8-9d9fb9f549fc\na1289828-254a-4207-bc4e-044a690b6f8e\n262def76-4dd5-4181-af4a-02586c7acfd8\nb6670226-edc8-4a1d-b0b0-f15e5930774b\na53998fc-81b2-42a2-bb47-35346c4d0fbd\n09349ee1-b167-4bd1-9c42-882c2308d023\nd527c2be-8ba3-462c-a823-986570e186f8\n232f240d-ec37-47ea-864e-bb4ef523b41a\n94754ea4-7693-4bb0-8591-08bc4aa2dac2\na2f196de-6c97-4d7c-8456-f90cc32251d7\nf68c286e-259f-4c3c-9c9c-992f6838cc97\n5fd2f975-6188-4b92-9727-bcc4d4e706ce\n4984e6de-cef8-4a0e-8992-efdb1d9f8730\nf843c9e0-523e-46f1-832d-e4a881c36c63\n544e688b-b02b-4715-aac2-94050fd125bb\nf6b7e575-8ffa-4fdd-92bf-b444aad3257b\n69a3cc04-3534-4134-9819-87826d7e2027\n83af15e6-1650-40ae-beac-7406815e6ec6\nbed2f96c-be25-416b-8feb-1fa79f709390\n2e58ff71-177d-4617-a057-76a4c5eebc9d\n806e4b22-166b-4477-9488-af23e6e003f7\nf077ff0d-684f-45dd-9349-bf033d42768d\nb118c981-3c46-4d62-8719-05f95907eb1c\n40c64039-d9ea-49d9-9b54-5c477daec950\na2667ae5-1504-4ca9-b9f7-3598c82be5e6\n74df232e-49ef-4992-8780-0f389988fa23\n7f9ee33a-276a-4481-8b83-beba181e2d47\n7ab6afd2-2de5-4eeb-8f91-d4a0b45b79f0\n47df36be-51f8-4e29-a67a-0aa1d5ac8855\n04580851-aee5-4088-bd74-eb98ec807dd3\nec4e1696-4f1c-41d8-addb-3d83b5bebe81\n559bff0a-9ab8-4905-8a86-79884e4ca19b\n0b120e03-4ee5-467f-9a52-92278f379d20\n13dd241a-e9b0-4441-a391-a5851a8f899a\ne5412955-1a50-49ea-b716-4daeb547db83\n94ce331c-5295-44ea-9f40-03055fceee1e\n2de4bc3b-567a-4300-aaeb-992a424d68f7\n4f326b12-a9b8-468d-9366-cc41723ecaef\nd8e0f365-774c-441b-a946-79da42c72520\n3fafed02-d8c9-4982-a63b-d4805dfae672\n8b886d1e-fa90-424d-a29c-8b04a142bd3f\n38bdabf2-ad8f-4b90-aad2-30cf36ff6c8e\nd5bf52d9-5734-44c6-b15c-e30f76271f94\n1c307613-a78f-4a48-bf0c-43bb6ef6e531\n7abcc8b5-130b-41e2-b547-2edb08fc215a\nef82e231-1933-414b-8a43-71583a0151b5\n431d0753-700f-45cf-85f1-0a51a00e07f8\n912b39c3-de99-4194-b3a9-85c621d88bcc\n3e1a42b4-5ba5-4ab2-bff5-cde2990515c9\n0c75cd48-80e7-4b65-a93b-a528cc6304f6\na88b0d96-2931-4bd3-862e-8813f0091fbd\n21dbd472-3a7d-4787-a137-e180b3b72860\n200283c5-d684-4d28-8d95-4eb2df2ce185\n98471471-69d5-48cc-95b3-9f3caf4d9146\n63d3e72e-e739-4d79-bc03-0d6fffaee38e\nf95c0775-6238-4c35-8787-7ba32b68a60e\n9d6f8ffd-5205-46ce-9421-aa9223fbe93b\n833c5476-f087-408e-a6c3-a2d248a8e9c8\n9f4e419d-3dd9-4d1b-8a79-6eb5aa5b8b17\n803c3b39-bc0e-4228-bbd8-aaf878975ef3\n3ff8e986-b336-4423-b859-5efa0826dc5b\nc935f76a-c0d2-4408-bd4d-74b0bebcff7c\n490d8cf5-a8de-4c6f-8d5a-28599795f0c4\n3efeb458-3529-4191-94eb-11964bd682a0\nefa7988a-4a20-4380-a118-6e0467af7649\ne05f8239-cfe8-4f90-b764-a92bd099bba8\nb0e702dc-aec9-45b7-bdd0-e61719dabd87\n404e89a2-09d1-4c88-8a4d-ca2d967ad893\ne07b6ca1-6193-4529-82c9-d52521e7610a\n971d94d6-ae34-4ea4-ba74-c3cc22161ad5\nd0130995-3d91-4373-8e51-d3fcff5581d9\ncf4e9f73-7609-4d76-82d7-b46d0b6808c9\ne50c0df7-c54b-4550-8d75-5fcaebb6058e\nd92c9fd3-ac89-46e9-85cf-f9699fcefa9d\n6a3a74d9-1bb6-4507-9316-1e6e0a8fb0b7\ndc74cabf-b01f-45e0-92ab-7753ec1b0544\n75133f6b-27c9-473e-8950-b3251bceeb4c\n2f60cdee-9374-415e-9140-a75d82d29a05\n1b64101a-7b06-4126-9f52-1dfd2c495215\n39c2e9e9-8ee7-4c84-92e7-bd5a3b7cde0f\nc790486f-cfc9-4379-af2c-6f6df432393d\n614d8ab0-92e0-4186-9bae-36e1fc44a14a\n2d7b5b22-6120-4a87-90bf-8eb0fd5e0652\nb1da4e3e-1856-4e7b-b9cc-44e01acff307\nd4d900a7-09a4-4614-8e29-fb5f51646947\n9e097c17-cce5-4a44-96a7-925121441875\n8ba77bbe-167e-4563-ad96-b93255d94a6c\nf0c40a7c-36e6-4825-aa8f-222aaded15ba\nc13a7cb9-d5ab-4f92-818d-ff11e0df62cf\nd6bc92d5-813d-4f68-bb79-731dea12349d\nc45ba627-afce-4c51-aa98-f899482aa707\nea999bf2-a512-4fff-a651-0eded777fb24\n15c73c50-499b-47eb-af5d-dc2e355493aa\nd29f757e-891c-42bc-8bfa-2474225f155a\nbf896287-04b4-46bd-8789-2f71bad91d9a\n09aa1c70-ceff-4117-b281-88c32803fd54\n423d3de5-81c0-4721-bc92-6b0ed2a355bc\n1921fb34-93b7-4470-8602-e26911896cb7\n30831cbe-a975-47b6-ad48-2eaa538cc6f2\nafbe8e36-2849-45af-8cf7-caf9e4327ff3\n2ea6b283-f47a-4c87-9239-2cfbb873035d\n1111d0a0-05be-43cb-ac4b-60d6a9715a27\nf27e1d60-1438-428b-8ab0-e88744bcb6f9\n9cd0962d-375a-4650-abe7-6fd5cb751f53\nf3b9662e-95c1-45a1-9188-cacb9afd0339\nbd7d1ab4-84d8-41a5-bb29-64b3e7aa25a7\nab570f0e-312a-4bdf-af38-45d06c2fb4b6\na896a85f-3204-4571-a18b-e3d47d1de777\n5ea32658-3fa6-4b4a-90f8-1f3001bf9ec3\n70be62e9-a2a0-4667-9cb0-c76bca95aa1b\n0f5fee96-1993-47a3-801d-53f08bc2a7a0\nf1c225f3-d2bc-437c-b906-4f328df5c354\nd810dcd3-b5d7-4ab5-9777-0388e49bad8d\nc40c576b-b276-476e-b410-8e92db560264\n4a1c5166-6591-4011-ba34-494edca22159\ne2a19d8e-81ea-4092-84ce-4803a297db73\n39c82cb9-f5d7-4123-8dfc-bfa1e0b9289d\n921a7623-a223-4bbf-9dfc-bfc3ca1750dc\nf23c1abb-c36c-4deb-8427-4f33a2c36580\n703a0877-5e91-4e42-b0ae-08772a1b59f9\nbb800e4f-0e3c-4203-9536-a0883b13eb7d\n7e635ed1-7405-439b-b1a9-10cd10d0a8f9\nea1c307f-2dd0-4c46-81da-b64902175690\n92eba6dc-768d-4e20-9d83-adb9f2f5f0a2\ncc8c2fdd-8087-42e4-a22c-3964ba493087\ned1771a4-b303-48a5-8671-0f09ac8832c7\nd921d048-9318-447e-82d4-5c938490d9a8\n76fc7fd3-39ea-4f49-aaf9-6c342bbd25d2\na37e9bca-908a-4cd8-9142-9007a15e41bb\nac1f3b62-9155-400c-945e-d02f9c036584\n5169a64c-b5a4-4697-82e6-07c64c95c04e\nf445ee1d-4aba-4e99-8594-5ada0a8b3578\n61b08ef3-4d11-4acb-bcc7-89438c2767ff\n299b31c6-a7ec-49af-91fd-7c1ac1260257\n3e764ddc-5db9-4bbc-b1cd-c93b380f30e9\n83ca6b91-1407-4a0c-812c-aab2242fee00\n024542c1-aef3-4a19-8e8e-b110ec6f7e65\na809ce0e-b9b1-4f86-967a-74f24d2042df\nefe9d562-e36f-47ef-9686-3ee18ae9f68c\n86b65c72-1379-4746-b434-e2e1aedee1f1\n0f29831d-1195-47e4-a147-2ef9026eafae\n94946d06-e470-4922-a3c6-53ac1857270b\nae6a3045-d693-4020-a093-c8c0ffc9a3d7\n5a511369-e201-493d-9a09-ec3e32b68764\nf452615f-cc7f-4b3f-8b5e-303a2712c67d\n35e564c7-ae3a-41a1-8881-ed89e2ef5543\nd4bb680b-e8c8-422c-811e-1eed026c5584\n34f3ad41-39bb-4588-bac5-dedbf256355e\na4619010-9e4a-4556-9f97-9bad5bc01082\n231374a4-674a-4f95-8bb6-0633c440951a\n957c959a-48f5-4739-b00c-05627d222939\nac67ed9b-faac-48f4-ae60-b500d42c0af2\n5b14cf32-b5ef-4321-86d0-1323874b8483\n144460b8-96e7-4851-99c1-201aa702bf54\nad86a6c1-4792-4571-8c91-381f81a3a11e\n9b726f8d-1ea6-49b1-906d-9b6d00421638\n9a6d7ff7-68b7-4071-85d4-783d328244aa\n4cb665d7-88fb-4a70-9d0a-f888f1560154\nd2456a22-da29-4630-aed9-03efa4740ac6\n0ca357e7-bfa3-4856-af0d-092537585447\nd3bdb172-cba7-48b6-84c1-01e68bc12909\n9bde458c-3891-49a5-8247-743d2efcc63b\ne72c43b9-aef1-4ce5-94a1-b6eef7eff64b\n08022773-e287-48d0-962b-4098407c38b1\n239336e0-7afc-4757-9bb1-68fb97acd352\na68021bd-456f-4465-ba9b-c00dcd299651\n291ce954-0069-4bcc-ac16-7ea652ff9173\n8e42141f-c244-456a-9773-bc2f6009d798\n1f0147be-eacf-4bf9-b432-1d25bf97a065\na4d6baee-83a6-49dc-9901-3b5eb6e1fa21\n79ed2b0b-ec84-4605-b2dd-c00aae7afa91\nf9c9119f-0c5a-4618-906a-112bec94941f\nc1f60c68-17cc-44fc-bb9b-f379ee0e003c\na2cb5be5-ca11-4336-82b2-da4ff29c29a0\ne4835aa6-5705-4856-ab24-6835cb750f61\n419bb824-63f4-4f1a-80ad-cb0c292ee84d\nda635978-f58c-4424-9e2e-d0f6f198acf4\nffa2401f-85f8-4d0b-ac35-e1faed6c6dff\ncf7c6e88-5add-468f-b56c-6ffb6c4c249e\n0e39e407-874c-4f82-a881-ed2a158ff273\n7113e2f2-daf2-4267-943d-da6d9bc7ebf4\n0c28e5ae-d366-419f-a45e-4072a8a3ef39\n358915e9-0dae-4420-b86b-749fc5ec1118\n7dca6093-14ea-403f-9ef5-0cc03bf05420\na63b904d-4e4d-4fa5-b91e-c2899ce6565d\n8a775145-c278-4154-9753-4107f10d6433\n5d76ac07-426b-4dae-bece-4aab793ec66b\n4c9c3f35-d3e2-4f8b-998d-90b4998a0c65\n096fdb6e-fba4-4816-8d2f-3f9e01615a8c\n7a58b391-2280-45f5-bdcf-08ee2b8c5de4\n37c98fb5-adb9-4951-846d-1ae1959a19da\ne0f0cd1e-3c6d-4bd3-b985-75b0253d91f0\n5ec76f51-f258-44fd-a4be-319757e8e6a9\n213c30d0-84f6-4c77-ba79-8f301594283c\n487e33e4-246e-4cbc-a106-bcff8921bbdf\ne19e31b8-a9c0-4671-a8eb-3d4ac00ab838\n3481d82d-6f71-4b6f-a65e-37a0a5b68131\n98feb173-bd0e-4913-b8a1-2ac24bef2eeb\nb3c709f5-b511-4096-b09e-813555992af7\nfd9b3429-c1c0-48b9-9bf4-fdc2f0e7cc3d\nd3b4bf67-6978-4a32-8064-c8a467127149\nff775822-6c7f-4f66-ab5b-e7897f72bb11\n6e3b3ad2-bae9-4f4f-b3e3-3b2bd83dd1e7\n9c344395-d821-416e-a1d3-1ae9f550a6e4\n1339c7c4-4156-418e-a836-956cdd731179\n486609d2-094a-4d24-93a1-84983dfcabb4\ne6dd80b4-8335-4b11-b8c6-b610c5ff6e78\n5ca8dec7-9668-44b1-b4ae-c39b85ecca6d\ndf0c1abe-4095-48a2-ac6a-25047c56ff19\n03f49fe6-4969-4d36-8c8c-b616ea98e620\n705e2440-cf83-4fa2-a46c-cbb28a0e8741\n180b1447-7975-4603-861e-f2b1ba0633ac\n6137ede5-1eb4-4068-95c8-924568f5ca04\n23e6303f-1769-4d76-8c70-3154016010c2\nfd496749-8638-4350-835e-072594a17c33\nedaa8b67-0d94-4342-b6ba-f2b0d1384c95\n50278ea0-3ba7-4a6b-825b-0627c5438698\n94521090-b666-4d81-9512-86105b0694e0\n1af9c1c4-2c4a-440c-aa05-d37c7a43573b\nedf95bb1-9f08-46c4-9e85-2b6ca07e3468\n3193f0af-cf5b-4ab0-8e20-62e493d8b576\n27c21e07-831f-4638-ab6f-f1978cb68f8f\n5c136abd-35a4-416c-a49d-a7ae3ae989d2\n381fc87e-2ba0-41da-8a02-9a2703fa6f1c\n560ec747-06f1-482e-81bf-42d244f1e161\n006ffe86-6c3d-4950-9034-4f1cc6804b71\na5c8aa15-c7f9-4bb2-8490-746594794f3d\nf8165920-7ca4-4b62-aba4-9ec78a7a6aac\ne958186c-49f8-40f4-9369-c8285859b783\n909be2ba-5b44-4a35-b7c5-58f500c408ce\n7171a410-ff88-4d29-8349-8e0eaac46b1f\nb4980823-4df3-4cde-a422-4618e2b68337\n2cfc81ae-0f84-41f5-a19e-b3af86ff1731\n92921722-eb4a-4b40-a034-b4684c5b83b4\n7a646786-2949-4f6f-ad79-355705dea15f\n5df8f00b-72b0-48c1-8d13-4d06db658471\n0059a524-198f-41e7-9cdd-0212eeb2ad62\nd1b72157-ab17-46ea-a740-90d11d44f143\n679eb940-1cc3-43cf-b4e5-09939936aa64\nebf2d882-e309-4907-a99d-dc03f863948d\n44dba94a-ddd7-4cf1-9b3e-663e01d48798\n5cd03b76-48f8-4b13-9a85-5ed8f3ec482b\n32efbf88-318f-4347-99b1-a91a3034689a\na3c6b90d-ab3b-44a9-ab90-129f0773d52e\n3562d5f4-02e0-4a8a-bb9b-52b516bb7b79\n6243d4e5-062e-41ea-8c03-3210a86c5a2c\n5c3114af-a0c6-447f-80ce-317cab072e4e\n858e805f-25c5-4a3f-97d6-55113be68896\n8a2ca15a-ba0b-495a-99ed-a954b31bc9ea\n642d065e-b580-48a4-b0f7-610cb3be816c\n58962ec4-cc7c-4cc2-9f67-3244cfd48983\nf1d20505-6626-49f8-9a38-2bcd97ff309b\n1ad63570-ae4f-4115-ab5a-3fd7c12cefd0\nf9200dd0-2519-4ce6-86d5-aab16c504021\neb808cf8-83fa-465c-a62d-5ee4d5141139\n38d1b644-9667-4cf4-9a74-651844b26b24\n47098f9a-fe8b-4000-a110-7927f2c05d9d\n5c38dc6e-a232-4c7a-afd9-4a85206c1003\n287160cb-ec26-4925-91d9-6ead236469dd\ne87373b9-86b9-4005-9a03-253a5c1d5e65\ne2e8bfa2-caf2-4f25-9228-23cf107d14cd\nd1a74214-f0c1-45f8-aefe-fb8b8fa10aae\nf9054ebd-98c3-42a6-8b10-7d1d6906cffd\n44b00dbe-cb28-4cc3-a06b-8036fe12af11\nba6ab341-7dca-4201-b46c-fb8b5671d9e8\n5ff20346-272e-4446-b28d-69723344b210\nc77980ab-5c44-4e70-9d1e-575e23b81539\n6f29f956-d665-46dd-8b77-ec0caedc4aed\n9895a950-d999-460f-9b49-9fdc6866c6a2\n8f032415-ce24-4bf4-94d6-b06f1aea3473\n1e3c7d83-de18-41cf-b00d-ee929ca7d2d9\n807e5d0a-ca23-4461-85f1-8c5602377912\n6794503a-60b2-4b65-ada4-499c6d9b60cd\n13a34178-b7e8-44ad-9a48-02c523cca83c\n8c5eab00-91a1-424c-afa6-bf3774d81970\nbd4c1617-97a8-49d1-88b2-29133f596e73\n601c834a-68c5-4f95-b3fc-0e2532442299\n5af093a1-7cf2-4fad-9c2d-cb278918b203\n56de1421-f27a-485f-82f0-1dcb6780430e\n2be16833-d7e0-4cf3-88e5-bca4c6e95887\nf9b22341-5ca5-4fd4-81f5-e68894b4c19a\nee9c756b-ccde-4ba5-a5de-f9b3a6d3a8ee\n7ff2d0d2-10f7-4cfa-934c-7ca35e80e58a\ncbf5b8c7-7cbf-4f82-a543-2713622449d1\nd8d76b75-a76f-48f3-82b0-3afc8231d049\n19a91284-0557-4ca7-97d2-f888600c592c\nb0db3c8e-429a-41d1-9186-2a9a9b475be9\n37a1beab-04f2-4f34-9a87-6d14141496bc\n19f2e6ea-beb7-4007-aa18-f347708bfad5\nf07cec6c-35ae-4c6e-9ab8-96c4693a5992\n5fa4de3d-4e7d-4eda-987a-97e0e25c7433\n1216908f-a40d-4d0b-8e38-b369e6e04d40\nd7c8eb93-8c3b-4bcf-96b1-504094f321ec\n86a925a2-31d9-4641-b230-382aa106a876\n372cfb2f-420f-4643-b5c6-fb1920c30f65\n3414ffb0-62bd-4ca2-bc6b-65ba1031f7cc\na3039fb4-a958-4eca-98aa-e372a0d2b514\n54c5650a-e7fb-4d83-a989-87f66e3e2d67\na50c43a8-4425-488a-ba7b-b4a2959a0e7c\n2685b5d8-5b5f-4a49-8abb-c608897cd600\n1a029b07-ff4c-4225-9e53-bc93ad0bf2ff\n74fec3db-9f30-46fa-971d-a647d72e4420\nfa872029-fdea-4e71-b1fe-b98ad4b667f7\n3f6b6259-9de3-4922-8530-24118aed2b08\n0a63bb0a-59bb-4e8f-97e2-33961deadf76\n239efc63-f6df-485b-9657-b5ae71c39da9\n4d151894-3b40-46aa-8148-41febbba6c7c\n5f9973bf-dc01-4475-966f-e93ea417a356\n5fac3f51-e7b0-4230-813b-4ce6cf49cd14\n7d524006-0ef3-4105-8924-b4a037a38b3d\n42151032-def9-4017-ade3-effc6f2ff8c1\n3f97ea91-ae17-4f58-82cc-4dd4bf0e5851\n567cb28c-b2a8-4a15-915f-e12776ee4b21\neab06a5d-5e0e-4a5d-a1f9-b2dabd3d9967\n627c453c-b8e0-4052-8215-31a62c59b0c8\nf06645e4-a32f-4497-96be-ead4446586dd\nb9b5640e-8aa5-4a9c-a215-c52b74eeac37\n323f3feb-dd98-444f-9d8e-48415ff79a85\n43948a6a-a8b2-48c2-af74-0a073faac296\n7367516a-b9c6-49e5-926a-a3403c604e58\n8cfbcc57-90b5-4ee0-b5af-4ac9cadbc34c\nb7cc8f10-01ba-4d50-96e4-396c93c01579\n4dabbee5-57fe-4571-83b6-fdbb65c51bc4\na06f8e1d-4be1-46f6-97ae-6dfd5ad77785\n103865b0-158d-4999-88da-c481cc1832ec\nbb0d380d-c391-4b4f-91b3-7c6a66995f36\n4fff5a48-1730-474a-9c09-b82ce8c845cb\naab7c3e8-e922-4eea-9bd0-5ec933587252\n0e470579-eb2b-40e0-87cf-d87e672851d3\n9d352b30-463b-4d33-b899-5ee714a1fd5c\n2c697679-efb5-46a2-9806-1feeffbc3208\n7f8827d6-01a0-4b88-8cd2-062641db7a57\nfdb46c10-bde8-403c-aacc-1b8b61d7f312\n71cfcfaa-f91a-493e-bb90-094679f84aef\n0ee530f1-6bcb-4986-8aa3-17c1f5707cad\n5cdd993a-f29a-4578-bd9d-a1c5c1f89817\ndd922771-d820-4e6e-bece-cf8cca60f72e\n43fdaad5-75d3-4f3d-9a25-e9fdb0e6702f\n3ec994fc-5f3d-4f17-bd9e-8f84645859b7\n5caccd4b-e71c-424c-962c-983b836a0968\naca4c418-cf9a-469c-87b2-aecdc3fd3968\ndf916e3c-5639-4bdf-b497-a12e30c8cfdc\n584e6e62-950b-4577-8e44-79afd65fbe96\nf95b9053-15d6-4761-8d20-795bf9c213e6\n836a4340-4d26-4b08-a89d-432be8c66fac\n9b21031b-a586-426c-bed2-58bb9f779d58\n8fd7d03a-1f71-4ac4-979f-77dcd82437b0\n4538838b-6e95-409f-b329-a74d16be1d8c\naf4cf7f7-9f28-47bd-b29c-c3a755978e2f\n0e45b250-0d3f-4712-8588-e0f9b36aca03\nd6e3dd6c-9795-4631-8956-29cb289f38fe\n1145da38-790a-4f00-8a5d-3a27036b72e6\n09d33e57-3395-411e-ac81-c4d5f7ddc32d\nc9a908c4-4814-4c11-a8ac-42bb69c1d253\nda637af2-a9a7-44ff-9f7f-a83c11a44302\nf91061e7-6bdc-4b8b-8ce6-c55fa832d8f3\nc8d7fd59-272f-48e1-b55b-c35466afebb7\na3ae688c-eac5-4c15-9cdd-34292988dcd4\n5b758120-5657-464b-96c2-8358ac13ff3e\n17b5df71-27da-4c86-9eed-af6f4386bb59\n4b21a700-d0ac-4728-b902-37f8738e9206\n0b9038f6-a260-494a-98eb-4910c8bc5e35\nefdafab8-e345-44c5-94ac-b9535e3e3586\n5296f4db-5a5b-41e5-92fa-2ee044634281\na9468f9f-8065-4fa8-acfb-9374110eb6f2\n25eaa0ca-f883-47e7-ace4-7f6751b67176\n7f38e270-b10d-4f65-b395-25b7cb845741\nf27206e4-bcdc-45c7-855e-21132930cbc9\n4f57aea5-6eda-432e-9768-7ac977848419\nd5095dc4-cf67-4fd8-8050-eadc9e542f5d\n09648f4f-4a2b-4f85-98e2-4a7e01b227a9\n23116993-64e9-4926-82ae-551cebe893d4\n88230cac-efcc-492d-8a89-7c93f84aad10\nb0f74ae0-43f5-4577-9f60-098387180bab\nd1f9f14b-4f86-404e-a5b0-2de0f04ade90\ned5d536f-1365-40e4-89f1-3b21a793d8e4\n09004c01-674d-49bf-82ae-b62d2c40e788\n6351b34e-7c7e-4380-bb8d-e086d7f05736\nacaf4d2e-9b9d-4856-8abe-b14cc5484a06\ncbc91c4f-86f6-43f6-a886-d215c8a10024\nb3d384f5-d04f-46bf-ac03-d937045da598\n639531a2-b346-4324-83ae-caee8ef3ac46\n07a33895-35ec-4064-8afe-0c025f33b5c8\n912f9989-14f5-4bd4-9b81-c5add76a6748\ne1cda6b1-1d40-440c-b0c8-9e024c57c4c5\n0cb47775-2419-434f-ba43-eab0bfde7c8e\n779a04b4-95a5-44c0-995b-7e7affbc7a01\ncf449c81-1b35-439b-9cbb-b292e7385161\n6e5d2fc2-0f13-4280-8792-20816696f29b\n44dab7c8-b6b3-4ef2-8094-efddf4df7b42\nc45e5cc9-8b72-49a2-8b9f-53d260e21c5c\n37bf25ee-a9c1-4432-afad-46196f39b8f2\n3432491d-6429-487e-88f9-4861405f26d0\ndc4be7cb-16bc-4bf8-8283-4f7d7800cd48\n687d3c2e-29a8-4132-b4f1-e79eed5d8da9\n94841ad0-0059-4281-945a-ad508985c3f8\n78d5f1dd-82ed-4785-be92-a1388f11d939\nb4a7e082-4363-43ab-adda-eb69a8a0f8e6\nd7a1fdb5-a809-4f2b-b775-18a8781e662a\n1977a0a1-fae8-495e-b4c4-943b9ffeabdd\n79230616-8386-48cb-909d-5f3c85faa084\nee705da7-660d-4673-b6ba-4d9adee7e433\nb7e54742-425f-42f1-9398-2b7bac249c55\n48de924f-6345-4a29-88eb-2d2a380651fa\nd87d54c1-4577-4e55-984f-576ef2d6de58\n01f6b09d-dc53-441d-95cf-5ad4a0a131c2\n8a862676-77b4-4d98-97c2-8c1676c537ec\n86082a55-bc85-4460-a40e-ef592e1fff15\nf0241290-bc13-44fa-8123-1ae7d9662c50\n4a20f717-f975-400a-aa3c-a9c42589d4ef\naeb6cc22-d0e1-48e5-a51b-25b079bc00d8\n9bed5a2f-6b6e-41cf-a999-5d8ca2122f52\ne45d657c-9b3b-4c6b-bcbd-d09d76305b80\n383859ef-5550-451b-bcb8-a6feabfa1ad2\nc23dab12-270f-4295-8e99-c772b35dcbd5\n587907a6-e3fe-4d0e-8c4d-e5ea1a870b01\n79949e9e-a121-4e25-ac4c-8622aaaef9ec\nc2dd0ded-a84d-4b46-8c45-7a5f714337c4\n97a41467-8b65-4241-9fad-9e0eb14a7b73\n3e68c234-464f-4749-87c9-8b5138ebc602\n1aba211a-5935-4d32-839d-75f2f38d045e\nf60439fe-3f9a-4ae4-88dc-01cbf113a5e2\n5951746a-684e-49a2-8991-ec265822050b\necd9b0d3-a25d-47eb-9367-d7b7a3a013c9\nce3cbba1-e130-479a-b276-da85b365f5ef\nd80c4902-f7c2-46ec-9695-7c156c4722c8\n3f1df484-1451-4b4e-a37a-73ce3625006c\n747f0638-36f3-4adb-9e94-4359ac0b73da\nd96f3fca-c8df-4654-b9e1-92f8567aa937\n5fa7048d-2286-449b-8c33-8315d8a29ae4\n8169da22-d0a6-4bfe-91b1-9c75a1eec6f5\nc297ae16-aab0-4725-9fcf-a3d76678d6d8\ne1b33788-6328-439d-9cf3-ae712a7a45eb\n06e987af-200b-496a-b059-616921374da2\n844d7ddb-5ef6-40e4-9478-352d847b1d90\n16f20428-891e-476e-999c-c85214f7d6ce\ne99e68e2-6ac9-4ef7-8a97-174da865660c\nd1e11d85-3ab8-4f54-9cd5-020feedf1559\naa028c95-090c-494c-b09e-119ae908e245\n1990dad5-4a81-4512-b786-f91dfacd0f23\nb716c93b-68eb-427f-ad7b-c42449deabe6\n30f3688b-2a09-4f21-9820-02ad87380212\n6248c3f2-9ba5-477c-bbfe-02d3a308b058\n5cafa6f1-46c7-40cf-9bf8-25ff147e2913\nf331fafc-bf59-4fab-8dbf-976d8cfdfba0\na42d9267-5e2b-4081-a797-511886ea8677\n684098ae-9de2-4a9f-8530-5013ec21af54\n8c9fdc6e-5a81-4e51-b69b-ad4791ade171\n6b8a8153-4c64-4c3b-9667-476f38bb9494\nf2111668-f123-450a-9009-b75b1aa3252e\ne353445b-4ddd-4743-a948-f8bf1f774470\n4d5b951f-2bd1-4689-97aa-b75fa1cfc265\n0e462116-fea6-431c-8f3b-badab174d783\nf130db7e-73a3-4aa0-835c-c2d610d60692\n53fbdbbc-c938-4a29-9525-90c48931b82b\n1b7d36e0-0638-4dea-b1fc-0b9fe3e96301\n123968c7-4b6f-44dc-bad0-26b22189e334\nc10ef6c6-6b11-4374-a409-b26749e47f47\n7ab6eb85-2df6-4c6a-a57d-25acfcb61df2\n06f6f459-b4f3-434b-8a27-59793274d438\n1480f738-eadf-4441-b460-6c850afe954e\nee60874f-c205-4dff-af53-02b28728d6f8\na369d40f-8ea1-4ad6-a187-adc8879ec225\n809580a2-1947-4626-8ca7-edf811c3e806\n643dc84a-98cd-44ad-a32d-b06b2c0bcec8\nb1e3c1a7-cd13-4b75-8fed-b105ff190e33\nc0bb5693-5c18-4d04-8dcc-3e08759c9d21\nf0002f1f-a8dc-437a-9344-cba624b3084f\n2bcfbebe-90e2-4b60-9fda-4e63689b0b4b\n0aa2c1ee-aea9-4b06-be4b-f0804e738892\n466e588e-8653-4036-832c-0b01642c8f0d\na8404518-5e35-4e80-bba5-fefbb3cdec11\ncce1276c-fa77-4313-8d06-1d01ca082d63\n2c5a4a11-6540-4175-926b-4794467860ed\n1eb2d5f7-9ba6-4915-9b5b-9bd1a6ab6a55\n64800778-f59d-4013-a050-922b64bee22f\n880590ad-d7af-4424-92e2-e6ce77405c6d\n9313e538-e714-4afd-8ff7-d5109e258b5e\n77543ea5-d801-4577-a4e8-8711006946a4\na4c46f6d-cdaa-4c3e-90ac-f28d24a62843\n61430a3f-52a3-44de-bb63-c4cba639cf6b\nee577017-4ac8-4ca5-a779-ae69da11dc96\n1fdcb1bd-8c21-4863-9c11-927df411ce28\n17d1d0bc-138b-459f-bd46-def54b11dcf1\n2a5fd15b-c249-4e33-87f1-dd590b6b6f29\n7aad99f1-c94e-4f7e-9622-cd3ca4ffae6e\n164e490e-c115-43b6-b274-9ee34565ba33\n1b5b218c-35ef-42e8-8784-baf73e510c09\n10627341-3a7d-4d5e-addd-d75127638479\n09f1f3fa-5649-4e18-b275-d88bed00093b\n0d746bee-1344-434d-af54-960b35694fd6\n81bf4e82-8cf7-4d87-8ba1-92c9396898f6\n2ff7615b-c143-4726-9702-a116e45dc8a2\nea06d228-8416-49d3-b909-23eac2f8ac8d\n5ec901f5-d7b6-46c4-b2d0-4c528eeae7e5\n8850aece-4a68-42b2-8b0d-8d018cc96f69\n2d6e02fa-8f4e-4cf7-ac7f-7a4cd919b90c\nd64d62ab-9f5d-48c7-a7c3-e405d602a399\nc1caea42-3276-4d27-b50f-4ff78382edb1\nbc0e5ad8-844e-4961-babe-25ff3aae12d6\n81ded1a7-596a-43e6-b283-599df089e686\n893b265f-36e7-4af2-a2e5-7e2e06fb0dc9\na39097d6-bfb5-4ca7-a385-7d5a1fac4572\nafb4421a-40c6-4208-91e6-3dbc9b394901\ndeceb27a-132c-4804-bcc6-53a53e665912\n1b3a27f7-8443-4647-9a5d-2fc96d4aa60d\nf014c10d-8a0f-4715-97f0-91e3e570b428\n30cea68e-8de4-4ceb-bdf9-dbcc445788e7\n0eebcf25-3634-4186-9fbe-76169f52422a\n54643d61-36a4-4bf7-8265-dfc5077e856d\n3c469639-35d1-4ee6-b14d-dcffb4f6b8be\n57a7464a-fc88-41b0-beb0-b92e7f3e2860\n6dde9f56-1bb0-4eb9-b482-3f8a757b81ad\n749af296-d5ce-48c4-8082-8751b90980aa\ncc66b2f8-ba27-4b4d-8f92-ab2ae115143f\nbe8ed955-2a89-4841-8487-646f30ad8823\nb6ba1424-e2ba-46b8-a44a-3a69f6885e53\n76eb751f-6dad-4d97-97cf-3183ba499fe6\nfe3ef0a5-cad2-4543-a1a2-911bf5b6ba05\n07a818eb-c7ed-470b-8c91-1655160a1d4a\ne370bd3a-f8b7-4bdf-9966-79454797a5d3\n557bf6b0-7059-4850-afaf-e61d949d8370\n1bbe657d-3da2-490b-b6c1-ba8936dc6b52\n33e6d72d-57f2-4f7c-97b0-4362a10447d8\n3cc04a15-b35a-4623-8d16-453bd8359e4a\nab88346e-b55a-471b-a993-94a4a6dee9f7\n6f1af86b-908e-46a8-ae0e-5a326993afc3\n4b956ba5-aadb-4b20-9da8-978d5f177b85\n5715bab0-ecf4-45a2-80e6-c622a88ef94f\n651fbce6-77c5-4fca-bcfe-253590a8464c\nfcd76cc4-73aa-430f-b9b2-37f25752a9f2\ne720871b-5757-4827-8234-795793d853f1\n45f418db-1f40-4c07-ae4d-d788b125a948\n2857404d-132b-4168-babf-85bed7cfd2f2\n8248fa2f-5430-466b-8a5a-dfc811b3daf6\n1864296a-3bbd-47c6-ab4f-4e7fc5a90c95\nebd8ed47-9798-4e45-8e2d-a0ddbff0dd30\n4eb2da86-a38b-4139-9d4e-a69971b669fd\n7b0d613a-20d9-4670-8798-5501ddfc8cb5\ne2142a6e-69bd-439b-a092-c58f8adaf6cc\naebb078f-fb17-48d7-8fed-156ea3e9ae31\neb630aa8-f4a2-4539-a2d6-1eab22470e6e\n38fb1640-6209-41d0-b369-52d5a06ca16c\n0f0fb928-7654-4a6a-9bcb-96536cd69444\ne85e5ba4-bf3c-4397-9066-10f4d9e6af28\nf489db43-adfb-4493-bdae-979774be86a5\nb0121882-ea2b-4136-a0fd-90250cb575fc\n4050e847-af3c-4965-8d09-e5efb88d1b9d\n20f33e43-4ea0-4085-935a-221b94828435\n9aa407db-108d-4bb6-84af-dcebf059e78f\n3a776421-af5e-46e7-85e8-873257bddeb1\nb4598dd8-0710-4e3b-99b2-d0228b7af608\na5898b2c-32b9-4277-8342-2dab6ba55801\ne1284582-60a3-4245-accf-edd01bc09183\nd41a1a59-3d24-4772-99b3-57c7fb65c2f6\nef18131f-eac7-439a-b81f-ce4b781c9d1f\n60de6759-525a-4df2-bc1d-024ae18d0485\nc857cb15-51e0-48ae-a507-c236c65dbd92\n0c9e8c0d-40da-4ac2-9cc9-b9b14b16ab0a\nb2ea0489-4294-4620-9d45-a553aa1c772d\n217f00d2-1781-4b5d-802f-9cf4c51a7701\n8b1011b0-cd61-4da7-8a4c-c438397cec6f\nfe20da61-40f7-47ea-8ec2-01fe9ec70088\nd8e78ecc-5e59-4f5e-8dba-71eb14c490cc\n06caa813-2b44-41d3-a3d2-79711e55943e\n63489fff-a1df-4c4f-9781-6137e2e9edb0\nc559330c-9202-4cba-8bdb-747585b39824\na5dd29e5-33ab-4ab1-95ec-d47f8951ff2a\nfa47384e-1309-46b8-98c2-eec1daaf2e5b\n9b9e04c0-e052-4634-9a26-8b9b72e301f8\n8bd1bb8d-1a54-4bc7-a632-efe02dbe3904\n8d2719f8-4dc4-4828-b14f-e25a66d67a60\nde736cc1-23da-435a-b058-ffec57938e2d\na8ccce93-eea5-437f-bfcc-ec35d94d7cd2\n32eec724-2d92-4de5-969e-fb5f963122a7\n8a3ff67a-5e8d-472e-9f06-4a60e575615e\n006ffaca-72ac-4967-a256-6a3b398e189b\naa5dadc4-9243-4d22-9089-05b9ba9a8e12\nc3823625-aa23-4edc-bef9-a1538956926e\ndd0dfd2f-7e71-48eb-be8b-c555ffbb714b\n4d07d410-df11-4ebb-aee3-c0598a5ccd00\nf6985994-4966-4f8c-b9a8-397c63640325\nc16125d4-b92e-4248-8612-61c39aaff164\n8c3451bb-e416-43b1-9e29-b98b10e078a5\n03265090-b2fd-4fcc-a516-f96682efff35\n4e647445-b732-4e39-b0f4-0fc473a00f4a\n41204870-80f9-42fa-9ab7-6b339690bcb5\na8152a80-97d5-4f39-b024-501de84b718d\n9dc8136f-3974-4fec-95e9-97a8594dc00d\n9345feda-e07d-4f1e-9892-fa2bcd4ff4c2\n57e518f1-b22f-4e5d-ad20-3d4717514f1f\n78c7b978-16f6-4543-90e7-7c444210c75e\nc950757a-18ba-486c-be8f-b55ca084968c\nc37e68bb-a673-418c-be9c-f9bbcc64f1da\n6ec5b0fc-73d4-4f58-8797-bdf7359e1637\n1aae2082-381f-43f9-b3a4-40edf5c2d973\nfb6b98cf-fc85-4ebb-a4a4-7e8384815933\n4857ac91-e2fc-4268-9750-f39ff59551d2\n3e336482-f290-4643-b194-d6caf693e835\n8be93d7f-25ca-487b-82e4-cef22d07f6e4\n07e9b24c-6e5b-4191-a224-4ad19ddbcebd\n61c2c255-f298-48cc-91b1-abe138d59059\n2bee65dc-f412-4656-ad9f-89253825354a\nf08dab9e-e1ae-4764-b901-6c63ce44263c\nea0cb076-f387-4f60-90cb-19e6fa62b9c0\n263843cd-77fe-4c79-8477-2cbeb9d5855f\n7dec865a-0d68-4d22-b2a7-c2c66c05a5b0\nbf1735a2-722d-4122-97a1-c2cff9152d0e\nf4b2b549-3f45-4b05-ac56-6e43f1708247\n50f7e2e7-8df7-4db7-89ac-03db92d81fc6\n11acc97f-4662-4a66-bdee-a8eb80d38081\nd9642d07-cadc-481a-b017-02f749edaa52\n57f9f2d2-00f4-4ea0-8891-30659acbce8b\ne2a6c89e-7ba9-4484-82fd-e4101e8641bc\n5d9e15d5-49ae-4595-b236-7df6b17060ba\n6bb614bf-5bba-4918-9e57-0dfe47bd5d17\n289593d4-7cd8-47a6-a924-ec22967022ba\ne779dd48-28dd-4a5f-8c0a-e8b1e612ab76\n71edf8b1-3398-46f5-af04-f77bf6147b09\n4e245cb9-69f6-43b4-961b-e6478f245e06\nafe6ed3b-24e4-4792-ab60-8a42be62627c\ncde2977f-4742-42a9-b3e3-d595604669eb\n2c055056-b2f9-473d-925a-0eeb030b0c03\n7d06667d-fd62-453d-b615-b72610fe8597\n07ab5c14-45e3-4749-b605-fe2da2338ca0\n7d10e240-1141-4706-ae45-f977de561046\n7872f217-89b8-45f2-9b79-4e24750b5390\ne664b713-7151-403e-a926-c965df83d1d4\n4232fbae-2b3d-4e8c-aa6a-4e57886d31f0\n2c018aba-ff9a-40c9-9b31-31bf9d8ce9ae\n010c6d42-6df9-4f63-8153-8115b0525235\n76b4a984-ac4d-4ffc-aa84-31c0c15c2b07\ncfd9f3ae-6ea4-4867-9109-d6b788e23aa2\na99b7904-692e-4f34-ab4d-6759e6ffe39b\n6fe7077a-6c83-456b-9958-69f8a98e97a8\n38e37a9b-bf4f-4b6d-ab19-4b4d2241b038\nea446b35-f8f0-4e10-b570-97b6483bb8f7\nd1273eec-bb6e-479b-83d6-e74e1d1a2b59\n93ce79e8-6bd9-42ed-87fb-ee2e6c36aa25\n9bf1451d-637d-483e-afdc-cb3e33987795\n28cd5723-0659-42ca-b2b9-af804be66e0e\n5a418a29-1ec2-46c1-90b7-78470b7ace4b\n5e26fe9d-bfa1-4716-a59b-74e8f3ae98c9\nd81d9ef6-b404-405b-8b2a-4bbbbeb35139\n3bbed5ed-277e-4996-9f7b-c8919adc4b54\n4b9eebcd-f1ea-4a13-8cff-a554b57a23d7\n7ff511b8-0b79-4233-b5f1-1a5cbc094c22\n866c014a-4ca1-4d47-bb64-fb48a2b43460\n6fa526ab-6da7-4651-8226-a11e1ff74099\naddb10c7-7304-42cd-80bd-3e631ded6794\nbe5d69ff-fc80-4cc8-b23c-2fd5a8d8d77d\n360f0e78-12b0-4685-82ec-5bef540b4ca3\nc588b73a-8704-4aa6-abb3-f71760de775a\n3343148d-6f11-4aa7-b1c1-2bf1da433f80\n43f549d6-ba1d-4637-a78f-b53bfb6054b2\ndaeef0eb-1f6b-47ac-979c-347f27ab0cf9\n5c38114f-834c-4770-9535-d5d1fe7326e8\nd6e4f904-4cfc-46ac-bcfb-11253ea00d06\ne4c59f7b-df8f-4ec8-94d5-359174eacea6\nbff13473-773c-4985-b7b9-6f3d9c6f7e5d\nf2b93be1-a1ea-46e7-94f5-74de019e2d61\nf1bc3344-2810-48e6-aacb-d376bf7c2cc4\n12ee7659-719d-4c95-b118-c59e5d85f960\n641f5f29-e571-4da6-8d25-afa6bcc13e7d\ne54dfbbf-bf7a-4a05-a0d6-8c0e2408708d\nd8de26ad-81a8-401d-a311-ab0710bfd2ca\nc88b4af2-6a47-4f38-8ec6-c029da0f44e6\nf19f275d-ce4d-4f7f-8731-4b52301def2d\nbd0ce157-2cba-43a6-b518-0984d7f33ede\ne635e359-d9e9-497c-9857-be40536336f9\n63686a11-d29f-4b12-8a76-e4f1e99783e6\n2a451b87-0e29-43b9-8847-beb827fd5275\n6ab9dc36-d81e-4a2a-b87e-256ead998bab\n9921da8c-9802-4582-b86e-5fa369f45fc5\n132319cf-54ac-422c-b439-f37cd8301c61\n3d8dc16d-e088-4f71-b966-59edbaa91eb3\ncd411a26-4e5a-4769-a798-2061e714ead2\n4c8afb67-f859-493f-896a-ece9fe9c09c3\n27a4df38-f048-431b-87d0-e5891b74e011\naf014ebf-9b6c-46f8-8165-ec23c11067ab\n7f8b99ce-0bf6-49b2-89ed-1362581f2a70\n50aa0247-27a2-4995-ab91-c5a63e65998c\n8f67f4fe-e169-48fc-b62c-b51fa7011156\n82a4f233-59dc-46ff-aa60-e23777d19e0f\n0428fa24-08b6-4292-a7df-b059fe1cb6fa\ne197f742-3f5e-4e54-a9de-67850195c9c5\n6f547706-3804-49e6-98f2-f2a4143a2009\n7a101d65-2854-41f5-b513-e16159e698d2\nbe984034-9207-45a6-b145-3d80f80f8f85\nd9d9c500-4085-4392-a7ea-c837ed8d9454\nfec8142c-55a8-41dd-92bf-ca12733fc610\nda2de62e-166d-44c0-a89d-3a6b1c0f972a\n268b4ea8-068b-41cd-bbe2-cc78555046bb\n268649ed-abed-468b-a735-3ff6258f54cf\neb8f8a24-7e77-45bd-aba7-90774959871c\n594976b3-9dc1-4245-b632-f02ec1267616\ncb65f8da-fb2d-4d62-8a4c-83d83f8284a4\n2305c931-910f-498c-8df3-75a4f1538ab9\n24da4182-1175-4f09-9995-a2ed6e8bf63d\n905f8410-89ec-4c50-8df4-7ee9aeef2f53\na847f1d6-0b37-42b5-b21b-62e0f132373d\n5a76c737-1634-4986-a06f-0ab41a860e7a\n2846a230-b498-43a5-80df-665007257686\nb8b80439-2958-47f8-ae74-fd4d18300abd\n5bc3fca9-a6c1-4ffc-94d7-9955819d9ffd\n9c0feaed-d21d-40b2-99d4-dae5cde6ccda\n5ed6e5d2-8391-43da-8108-41abbaf5de52\n6dfd98b5-0c70-4498-9cac-54769adebd45\n298f769b-39fc-4e43-8e13-0a686e19b064\n644e4b0a-42b9-45f2-a178-337f782bc707\n8c3e4630-42ea-458f-acd6-c55d1ea1cdad\ndf09bf98-b380-4698-a78c-308a385fa908\nc015a2e6-ed49-4afb-845d-f490a81e7d16\n3862fe90-dc37-42b4-85f2-1406a49393bd\n3d7f2438-d50a-4d45-b055-2caeaab29383\na20f3450-cc9d-457c-ae09-9da696638705\nde1f42ac-08c3-4a14-b58c-6bd70e5e6dba\nb6f4d50f-354d-4078-af42-0ba0ceb140ab\na04c0eb3-8ee4-4bc0-891d-06f5cbdab9e2\n71d9b6bb-d1b3-4042-b891-d6074b75c0cc\nd4bc28bf-ba8f-4681-9842-e7655ea41863\n6d00462a-facd-4a5c-b73d-b8d2832c8123\n8ff889ad-bcf0-4a25-a55c-bbdd4767ada5\n02b78bdd-03a3-4612-b795-f1536c3e70ef\ndb38e973-e667-4ffe-bff7-c754e163dbf8\nc0fa829a-6dc2-4512-9804-f68cb1715a88\n31adebd5-92e5-4e93-b034-bbc59fe291bf\nff38f806-be25-4d86-acea-f3da35b31293\nedbe14e5-82ee-4120-9f22-e254711c278d\n2dc45bb9-f810-49c7-832c-adbf588e2d53\na08fdbc1-2853-4865-a6eb-8fa438ab3dbb\n80ea5c5c-6de1-4c76-8fad-f8b66c672b14\n7c9edcc6-9fab-4c82-bdc2-9bd5bf90c267\n9b45b822-f2fe-4cbb-8e05-565841f3c359\n0141b14a-d7d9-40b3-b3c3-19624e6839c2\n9c3df605-a302-41f7-a038-103769fc27e7\n14b5ccb8-2ed9-4531-89c0-a9ae625f761e\nbd5f0581-8e18-4bd7-b1f1-a935caa138e6\n333d18e3-a014-40ec-b064-e6baa5690368\n3a75b477-2469-4086-9f97-73220b045171\n200be738-ba4e-46e6-b5d8-f231ab55f76e\ncff43937-17ba-4134-9d11-8581a559e158\n3fe480e1-8d10-48b2-bb86-614138713151\nc6809f90-6f60-4ee8-9f50-b8e5243d9fd1\n94df165a-eba3-4adb-bd93-de4d320c07d4\n3e01d669-5052-4f73-a756-559a7b4efca2\ndcd0b91b-4111-4b08-9cf3-195d80b3ec6d\n1b072147-dea9-480a-965b-ea9805bab85a\nd3a89f56-59fe-4b38-b7cd-b000f3f96c87\nc1f112c5-bda5-4449-a59e-f88c29151759\n46704ee8-8556-485b-ae00-1634258ea000\n21499099-5983-4367-b1c2-444301c9cba8\n80a98791-a4d6-4662-8593-1e8b7944b016\na29de039-1768-4da1-8dc9-cc47dd979ece\ne59a249a-e7e5-4c67-bb86-57dbe46e300a\n029ad22d-3e61-4384-b20c-f4d43efdb3e0\n6dae1eca-b819-4656-ac5e-ed94acabddfa\ndee8fad3-c475-4a78-bfd3-768116f36bd8\n66a0ef4c-dc17-45bb-969a-80523275eeac\n696d95b0-d46e-4e6b-9cc5-fb066935ab46\nd51eb6f7-2cf7-4bf4-b61c-0c0a064f8a1c\ndd964e04-9dd3-4c6a-9c6a-192fa57ee7fb\n9989d397-7074-4db9-91b3-67f7d6ba0a15\n5e408b39-1e25-4d2b-acfb-b2c06b8b5f47\n991f8b13-a37c-43a9-b10b-387eef0aaf2b\n176af28a-03c2-43cb-a1d9-4da59c41c5a5\n8042a646-ab3a-4453-b932-6a286a3709ee\n4ae25329-2ca3-419f-bfa4-0289f3279b15\n25413156-baac-4fe3-ade5-a3fd8fe69b80\n0f3d011d-df27-4d30-9852-a6c15efac33f\n07eaa626-c9a1-42d7-b29a-6e1ed8a3f60a\n86caf621-ef27-470f-bada-a6594cc44bad\n9a9a0037-533a-4f21-8f8a-c45f744b15e6\n7a5e79fb-ca28-42ce-9188-b57abf270278\n0ace9774-a85d-4672-909f-5a88debe8078\na137b9bb-454e-4285-86f0-814328220206\n6f6d80e4-a2f8-450a-842b-e8e338370fb8\n3b2d3188-8139-40e7-aa1b-75777090993e\n2f2673e1-b44d-4c90-be61-4371716f139b\n47a02cfd-1e27-48f5-afdd-74df7cf1e5cc\nc0eb96a1-8e15-41eb-be86-9efe42ea9ef1\nf004880c-69f3-4b7c-b36b-70408f62baf5\n4475992f-324b-4c9d-a2f4-5f2bdf162cf8\ndfa7e765-45cd-4820-a2b8-4c9e9f5e4907\n47f297fb-4689-4707-a3b1-394d4f4ce1b6\n6dc8f477-bb81-4156-a7d9-245db59c12d7\n96766bdc-f600-4cc9-99c6-17e8d27076dd\n3b9d655d-c998-4ded-9829-e0edeea8dba9\nadefe747-5fe2-47bc-b908-88d898e44eb6\n8b6bf31d-0024-493d-8fdd-65da44d5d82e\nd10c418a-a5a0-4045-b29e-a03c99fbadb2\n1d8d887e-cca5-4fe8-876b-bc4a21db06ac\ncf775dd6-0980-48fb-abc8-113027b8a806\n0b6c0d77-2a50-4006-9e90-c19e740da5db\ne8beccba-9da4-4a8c-982e-d7531d097472\nb6c3a383-aa66-42df-857b-0e88186ebce2\n71ef0a0e-0e6d-42f2-b666-530879b21ef6\n734c2d06-42de-4a7f-bf7d-00f54b39c449\n459a4e7e-968f-4bfa-ad42-da7ad6d0f1db\n4c2aeb1c-2148-4e7e-8cea-5c7ed98077dc\n73326d3e-1961-466f-9017-7471ef095640\n88829419-9f73-4c62-873b-a5416a5e1097\n88cd975a-bc6a-48a9-a4b1-db56e4ac8302\n814061de-3eb0-4276-b819-1cb9de632f31\ncc26de4e-dad9-465e-9e0d-e7233fb3c178\n65290568-46e5-494b-815c-8e93771ec5fe\n33d17fce-468f-4d51-b905-c6858c19ecfc\nf8f6c644-7e5e-4219-a417-e68ff9358dc4\n181ba86c-1a8d-47ec-931d-5845c4a9615d\nf6423587-af14-4026-abe3-4e1b577fc4b2\nb8fa3cc4-5f20-413c-8618-3b66111f0a23\ndbe5002f-74de-4bb4-bdd1-7d25ae0f4ccf\nc5c3252f-7ff6-4851-b58e-d483c6b4a870\n6ad37f0e-34d0-458a-a762-1717465b3d35\nabe828a6-6305-4fb9-bd63-8ca29dee4e49\na577d5df-1d6e-46a8-8317-3e0ee1d56925\nf83ecc24-8d30-4534-bb64-8494d727e247\n047cc386-3c0b-4e2d-b48b-cd3446135601\na4614f83-dc35-4592-a20d-5bbc634a2193\n77298f4d-a68d-4f5e-9279-8b3387c8f8ec\n21c8264d-3b3a-4b0b-b7a3-8d148f9a3e49\na022cb0f-f822-4377-b5b6-584e040d10e7\nd5900c33-fb24-40ae-b5b3-d0bf6b257ec0\nb26d10d9-de60-4f3d-bb67-62dd1e112711\n9a04df47-45be-4ae6-b32c-1ef0babfca7d\n19964a73-fe2f-4e16-b46e-cfbd58f282df\n9e9e3b45-7165-4e47-9f1c-6acd14c5beee\ne3f32eaf-09c9-456e-898b-0f8a0f9497c9\n314797c4-ef9f-41d8-a1f5-89fc1edf5de1\nbd32e920-0bc5-4e3f-871b-e3ee1369a0c0\n9a8182aa-2b93-4604-9013-9d4f0541ec54\n3821eb53-706b-477f-8960-f71dcc9b73dc\nb5a7c213-92c1-4a50-8fe0-4b7183fe57aa\n229ee439-ed18-42f6-bca8-bfb1f9775f69\n2a1c860f-4daf-4e19-befb-68af53d7a4c4\n4c6ba73f-4689-4ebf-a324-200f2597fc59\n643ec8f3-5a84-486c-9560-e6937e074d48\n5b05c8cf-767e-4dda-9856-3d284177cd10\n9c281065-f5bd-4132-b929-9352406a68d0\nad6d1dd2-41f4-404f-8d29-088f2f86b4a1\n536d8685-8ddc-4352-83c5-f4a90a8df811\n3343a78b-5f96-4a53-93c7-0a9af814316e\na8cad04a-d8c6-42ab-ad25-81bbab3e4cc0\n2d0119ad-d919-4c46-94e7-7a2049ac955a\ne3c98dac-0921-44f4-bc2b-a422e6456bf7\n93aa3aa5-66fb-4ee8-a524-d36703a0dd09\na22ec0d9-2df4-4971-8c31-a273a7900b89\n0b45b1f0-e3ad-478b-9a39-c0325c67bbf0\nc72064a7-2ac3-4287-b0c5-f83aac941c2e\n20c74672-ccb2-4ac1-8f20-de77b1f8465c\n4acb5b7e-1d01-4c2b-b92e-696400708e7f\na7958995-a50f-46d2-be2b-da9056567dfd\nf8fb24ae-52ef-477a-aa3f-32bce6556cbb\na9176d5f-53f5-4113-a2e3-df885b19091d\na49ceaff-0d4b-4d87-9daf-87bd640383c0\ndfe8af6d-bddf-4198-9ec5-96156fe85602\n55c1b558-2cff-4295-9a4f-6b9ea90ae633\ne679e0f5-879c-4ab0-8309-f7f8e2999d19\nb7f3787f-a834-434e-99ee-d825e0d02d4e\n81bd7aa3-63e5-497f-97f6-15d92c79b8c3\nac735d71-09b5-4de5-8b74-cd5af175e160\n121c385d-b676-46d9-8bb1-13aea8413431\n93395231-3fee-448f-826a-efd58b229a77\n92af4f3c-fbc0-47b8-8312-30f0bf904080\n15ab5b05-9db8-49f5-b9c1-f7c15c6c0858\n450e4223-5310-4d74-9b09-acdf6039c1c9\n89abe06d-323c-4503-865a-593983da51be\nec276a3e-1609-44a8-9d46-9a95a8d78f0c\ne289981a-bf58-496e-a207-fa8c2c02013e\n3a118514-cfe5-48d8-b8dc-0a46ab9df404\nf5e791f4-5868-4589-bb9d-5f7c7207a2e2\n28db81cd-998e-4d9e-9d9c-fd9a53a2b94c\nd58fdb30-0a74-4c27-94e5-972a08b4c174\nd0acec21-b310-4d8b-aa9a-3450779b2f5f\n56b89e91-f817-46f3-9799-e68d5c2a0e69\n1caf0f8c-f8c4-4b0e-8454-a051c6206e1e\n4e4eb922-dfd4-44d6-a3ae-6079a4e47f00\n5011f66a-8421-42ac-af16-9f52b143046e\na9a3bde3-905e-4677-9928-93fce784a0f8\n89c8f2af-9208-4e64-9ca8-cdf7306ab05f\nde15208e-a230-45d4-b7ec-824cdc958f4f\n17f00447-ebbc-42d3-936a-b695ec54683c\n50212af7-17cc-412a-8c09-7b5b63633d72\n8ef180d2-b32a-4836-aa79-5392bf5d4847\nb79c0a18-de98-451e-ad73-f73e9ab75cba\n8942aff3-fa5f-4969-a948-db01b5dd8ef3\nf99cb86e-b006-4635-b406-b9f10561d079\nf30d9554-acc3-4180-a4f0-8ff9dbe99250\ncf81fc94-015b-4f9a-a567-f652e4b1d6b0\n4cc0975d-ee6e-46eb-8003-6b5e370bbadd\n64c286e0-eca8-4e11-a152-37b60a5fadc9\n5e40a1ff-6efe-4424-93ce-c0fc7e79bc6c\n7f3cc6a7-dc28-45a1-898e-5186279771b8\ned41ed78-b8a1-4b86-8dbd-2732b2da9b9a\n227c6f10-42f0-45cc-ab56-158ee9d3062d\n3e3df52b-7776-4b35-9939-d8730e323578\nd429b9f3-4597-4eae-8fbe-93772a14a5c7\n5895c892-46b4-4b0d-9fdb-73229e12a679\n253f1196-95fa-4389-b046-56863f93e3ca\nd8d52bef-0e36-4dd2-ade1-90379bd71226\ncaf1a9ba-c5e1-4a38-9032-f79635d83c63\n3082aaa4-d303-4c59-a8ad-4fe0692afb1b\n8664bfda-9830-481c-b813-aa19a566be7c\n8a1ea23e-c307-439c-8853-852bde38ac8d\n4bce2676-f448-4d0a-abd7-7649ddc11566\n5ee71875-6cd8-4abe-bc28-e41a77f8d565\ndc97cfaa-e7c5-487a-9192-7cdf338f3906\n3ff16c8c-a5cb-4508-8eb2-a7a6bc51b5b4\n8c0de142-51b1-4d73-aaf1-f74143b1d379\ncd1dd32d-b961-4b6f-baf9-9cb2118f7d6f\n898c9932-8fce-418e-80ac-dece4a620d4c\n511e643e-0f2d-403b-b519-f4998eb6f112\nbe0030c9-82b9-41a3-bcf3-800a0dde0422\n955a2189-f1e9-4f11-9c21-60439893c75f\n35533868-52f4-4bf1-ba9c-a9da4076befb\n1b6c7194-1892-47b0-af21-cd4a31cd6ca5\n1299b3cb-799c-4341-a20a-2c929ce69f85\nef59df8b-a21d-40a4-bded-006435e30ff1\naebf710a-869e-46b0-999d-346343a15352\n2efd10af-8859-48ba-b6ed-9eed8ede2050\n13035359-6933-48bc-91fd-93a23e37aee7\n8de527a4-f5cc-4425-a193-6460f4cb1298\n0db7b719-de69-408b-8596-9139c851117c\nb1bbaf94-a30d-4371-a44b-d47a031addad\n4a2d4956-4fa2-484d-9e6c-d0982048fe03\n465b1b86-845a-4157-8d45-483dc6ad4d34\n90042aaa-c8af-4e16-8269-1c7b9ddf5cf9\nc73179a1-f40a-42a7-a8dd-d3a1a70541d2\nd1ca6e79-6abd-409a-a61c-bfe936345844\n46832e6d-544e-4858-9331-cf4d8650e18e\nab61a51c-239b-42c5-86d1-8ba39218ae67\n33f2c580-3de6-432d-8119-e22778b97e1d\n6eba4845-2276-498d-b47e-0b63d2d5cfe5\nd76f2681-c25c-455b-bfc0-27e3dae055c7\n2afde1f7-dd6a-4fcb-969e-a872c68f0c8a\n3110b4bd-7da4-448c-a709-60e16c227bc7\nbaf03eab-d7d4-4bae-be77-00153fec9012\nc0c0513a-1a2f-4c42-bae5-92c40a7c7386\na09ca2db-888a-4885-8fd2-7a34837fd51d\n835aba87-e474-4611-9313-f7d4ece19205\nf043a1c1-b13d-43b0-8b28-a4dabdad64a2\n427c836c-a255-46fd-8b0b-b8be1fc45fa1\n20c492c8-9923-4037-aeb0-2339ac750fd4\n12cf3713-fa8a-46d2-a830-15562ea73c59\n578356fe-9ed7-484a-bcde-b42ad2b149d4\n907cb7cd-c631-4db3-b4de-1491e6e14a49\nb4baaf59-a4f7-49ff-83a3-bec7d1723404\naccb2505-f5ca-4d25-bbac-51ec1e4b9000\nc39f719c-a7ea-4c5a-b442-377990486816\nf81e5634-02c3-4a73-89de-a735cc0ec7f1\n2ffe83a3-56f1-49c4-ac7e-36e4eda38eb9\n94d0432b-6088-4e06-9662-5fbcb6ea448b\nfee0f70f-11c5-487d-83a9-9d457abca93a\nac18f655-af14-4144-b2f3-bff5e1bdc424\nb18bb9e7-302b-402f-b742-4d87a14ed7ab\ndb96370e-ddff-4ba8-9233-dc47b9497363\na3dfa9b7-d14e-45a2-b39a-3c6d4d90bef2\na438fd3c-a890-4eca-9b31-353ecb615318\nad2d0627-d74b-4e01-8b40-cdc3f2af0eb3\na22ca892-ced7-4a76-b44b-2b160d5aa5b0\n0dea0449-469e-4962-a747-9afc8e2f8ba5\n2ad46fad-4d93-4721-8f2f-2c7203f1e180\n4c15a192-e969-4f2d-a06b-e1f4e6fc455b\n5fb2814b-6fed-47b8-ad46-9e5fd163b603\nab9ff1d4-0a02-4cb1-a454-fee654c06229\nef6a38e4-9926-45cc-90ef-6ea0ea06cb48\n57900122-14f4-44d5-a534-2b9153ef41ac\n03db795e-f556-46fd-aa40-de2f508cac6c\n74f5bed1-6a60-466c-879f-73350005f082\n51a6dc88-771d-467e-a5de-b124e5556157\n05885adf-f56d-4137-ba33-a1f1ce01db73\n430f61bf-810f-4afa-aa79-3d79318fe538\n3b18fb86-f6d0-42b8-a100-ed540f7587c8\n872cfc01-635c-460c-a440-a97177b759f4\n7e70f346-034c-4cf1-bde7-23ad0f38b12e\n503a74ba-6fdc-4581-851c-f5f0f16ddab3\n8d21575e-af25-4fd6-bcff-0018c3c9b0c3\nd6d33725-361f-4abb-b4f6-78edf95e7e9e\nfd280b83-20cc-422c-b21f-8db0de439bea\nb6399526-9b24-4606-9983-05f85b80aa3b\n1ddfc411-d623-44ef-a131-16a7c21a5bee\n6935fc28-ce40-4678-9a51-31829eec7ee1\na32dea53-f73d-42ee-b5b8-cb61d64353d4\nd606a847-e6aa-41f6-8c8d-424b9ff9a509\n09178462-438d-4761-8637-d8d56e692daa\n94be9d56-04d6-46fc-aafb-7dc0680c2c48\n0b5a9c95-adcb-4055-823e-3cb7f0374ef0\n2f30d8f8-aaf0-468e-bc8c-4b71c163a028\nb3482931-a07c-499a-9cef-40e4193da668\n360a8e56-4e57-4091-9f2f-9b8e86f11f54\n15942d53-45c5-4cdc-9a1a-d77eb65ffdeb\ncc2b5031-adbf-4893-906a-a8abc8163273\n183e3f74-daaf-41be-a9d7-a88a3cc45d43\n1a6269f2-501a-49b4-b684-4b0cdbe64187\n9c9e06a7-db64-44f2-87a0-47303f60e7ec\nd2d62678-4cc2-4f2f-91e1-97ed801c40b6\n3d344d7b-8aaf-452a-98b7-c0fc1a7726a0\n6c61ac87-699b-4980-a2ac-34361b0f344c\n64b7342b-cea9-4994-9458-cd4f9f0d5aca\n63d2f956-d591-4b2b-8047-9baa28e562de\n9709df37-ea5c-4ea8-af79-2883ccad9347\n80db626b-9883-4fc9-a5f0-94d7839057e2\n58101a45-e3bd-442e-821d-113a72ff134c\n84c7c8d1-a0fa-4a00-82a1-0dc697d9343f\ncba9f005-c020-4fd3-8d2d-401cc0d5e623\nb2007ffc-52d9-4c16-bdd4-ecba8b9c46a7\nd9234224-7d58-4069-9d1e-38c7862cfd11\n272070df-a9ce-4a77-8817-f0fc72b5b15e\n40f5fc9d-7071-4799-9cdf-4c6258f09e2d\ncc70e470-1afa-43f3-be5e-66cd977a9d4d\n31583c1d-3b8e-4569-bb7f-d7adf576a9ff\nc24ce72b-ed5a-482f-9b49-23e4f8fc47fe\nd1698a12-a038-4d16-8238-973e7834ebe7\nd433b537-4cb4-4f4a-870d-06a9830b4d34\n25ef4a85-39c0-4efc-853a-9d5404a05af0\n8bf7d76b-bc98-44b6-a0b9-c027d4f85377\n3d32d838-9d95-43a6-8a34-99b963bea362\ncfaba544-16bc-4fbc-b94d-7a09367656f1\n34227a9e-3da4-4f4a-80f1-9001ee985f37\n5baa5c3f-694c-4da5-ac5d-7c65fd4c980c\n552c9689-5d6a-45a6-a7fc-6a781241100d\n8c1c94f7-5a6a-4206-9035-256e356a45fa\nc922c23a-9496-48c5-8b9f-6687798e7402\n24c45659-1e0e-4061-8ec7-1f76fc487473\n71a6e7d6-b093-492a-8777-17fd73e99fd7\n8729995a-8f15-400d-9a5e-d061edde2c19\ncacfd45a-16dc-4311-b419-3d382ceb803d\n5fa9a6ce-2d16-4189-8737-3752000a3bd4\n60e0408a-1f1f-48d9-816b-cc776d95f2f8\n93234bef-7f98-4698-ac39-34c380c0d403\n0ec90841-bdbb-458c-91f1-d138653e31da\n68efa861-a7c0-4ced-91b8-e01ca990792f\nfef210fc-6cba-4a80-a1ab-8f92d933fe53\n1ec3b680-496e-49c8-9241-7cb785f31c50\n835c077d-0e1c-4a3b-aceb-9db11a18a0de\n71cb4647-989c-4f62-9c97-3be33b33ea4d\ndaf9c2ad-5c58-461b-8c91-ab9239471afd\ndf5cff8d-aeb1-4ddd-84f6-e57bb55320cc\n5c562c31-4bc9-4f2d-8c7f-75593d99192f\n3d6d2622-bb02-4849-9f97-2e7e7f732dd6\nfeaadc58-d34c-4592-a1bb-bc2bb196e46c\n6b080604-fd9c-4279-869d-aed32160c543\nb56a9a5e-5a27-4cfa-a718-cd0bca4e48e4\n4fbbf022-daa7-4bd2-b4d8-f36f5962da4a\n5bc4f24f-d684-4161-a08c-01f2d49aa820\n81371296-2b45-4b64-8855-12c213031ce9\nc81e589c-f68e-4586-bf8a-561d43d5cda2\n2b291d84-49ef-413f-bd54-418ac534c01d\n86fe3c1c-9186-42bd-95d4-3b49b573cd78\nb9116428-ffb3-46f1-9697-296d84bf2090\n67fe3c04-8fa5-44ea-81e6-adb9546aa069\n99d2697c-34d0-4213-be8c-72096cabf9de\n9897b4b6-adf5-4683-bf9f-bb56409f5731\na17e335f-f662-40c9-91bf-9db35eb019ab\n0cfd3be1-715f-4c8d-9c58-e80b3bc59aac\n9b0c25ca-3ba9-414a-ae39-681bce07a8b4\n443d4945-d078-4686-8adb-2c51d3503afb\n019cb5d6-3a2d-4ff6-b40e-82729f142e7e\ne572fcc2-f7a0-4029-ad78-e901a279f54e\n7e99281b-3002-4388-8abc-012e871941ba\n4ee49da4-29fb-4fe5-829c-cf997c45715e\nbe9f3b58-191b-4bb1-8379-c2e38658c984\nb9b9b858-0db8-4578-a0a4-82795646e6e6\n466d5ca8-514f-4199-9013-359e79139ecb\ne9948490-0153-42d4-9133-d0b24a4f6efd\nab8d0fdd-1686-4c2c-a186-495750174b05\n5f7faf4f-e4b1-4e7c-b2a2-dc02af035bd1\n830c8f14-1327-4ed2-a4e9-01508476476f\n8cb6764f-7c19-451f-b718-7040ca944d11\nce8c0669-b4c0-4848-a6a0-0db44107da72\n2bb2adc3-a75c-41a2-8e45-25cfec6ed44f\n62ac4343-5444-4748-b194-b7077f263d17\ncf71ddf5-1863-43a0-8375-bbfe3947c809\n2b617875-0ef5-4d44-8e31-580a3af14176\n9a0d616b-a8b2-496e-a660-77dc0f5ccb78\n45a97960-5ea8-4438-94e9-f192e286a461\nf79c5a2c-188f-4c4e-8538-7a13eabf0587\n798a46a7-56c6-4f2e-9149-a674ca10262b\n6473841f-927c-4f10-a76e-ac56668c214c\nee3fe812-54b9-4fbc-a60f-b15a306a346e\n478489b8-863f-490e-b2d1-b5dac69d3ab6\nc5a4f154-cd25-4d9c-b508-e15739155d8e\nf9fb645f-7261-4309-b621-5dfc2622bfba\neded2f33-c027-4714-ad48-89e61ac89c17\ne7676c80-8cff-4254-9332-dd16d411ecb2\nf01ecd6d-376e-4090-ac95-4b2c452c9533\n03a160db-8c77-48ec-a85a-b8b4aa6b6b07\n67472447-8def-4b25-a04a-c49c3a2b754a\nfdafdc92-de8a-4c6f-b442-01a984a5f16e\ne3dd518c-3842-4556-bcbb-4ac5ccb404ba\n92c065d9-26b6-4932-ae71-e692e2db3507\n6d1dd34f-8f9c-4a2d-87c8-b459c6a258e8\n267d7eb6-bdcf-43fc-b1dc-c935fa81c881\n228b2709-029b-40a8-a5ec-5fdfec78af34\nf8bdf7dd-fe53-4435-a0e8-f4392a71db03\na664cd25-5f2a-4f0d-a52c-e4108679ee73\n4ae5a2c0-77c4-42ad-b806-5eae7f233d36\n5cbfdf59-c157-4264-bd20-3ddc350d25a7\n4678a6b4-1168-47cf-8226-91a75b264dc0\n33f0658d-5e55-4f01-9966-9678ae67c98c\n29a53026-ab69-413c-bbfb-f1295236eb4a\n06a4ad9b-a3d3-420d-879e-d1d64235cc62\n8ecde128-9728-4bcc-876d-038a20ca7102\nb5a3c0bd-bd9d-4ee2-a2ef-66935faca7a0\n15e9b8a5-cf87-412b-bcac-e3023205ee2e\nbbb8955e-ba13-487c-b8d6-ba3b2024d86c\n2bee1f3f-d6c3-4b95-b098-15a51c2ee90c\n88de0b3b-d03b-4e44-8dd2-4c4dc5fa9c9d\nab3543f0-8c50-47ce-9a82-5807b93b5d56\nffd21c7a-5d59-4ee6-bb6e-9754ddc4612c\nce1a01f7-1680-454d-a25c-c609df366bef\ncd45d238-3ef5-432b-8834-850b1d281abe\n009b28a7-fafd-42f5-ad51-fd7b902f2963\n94c3e7ae-db33-486d-a902-5938b937bea6\nb6f86fb4-1c05-4556-ad67-2b973f4a2c79\nb9c305fc-43de-4e0b-a77f-fb2e7329c237\ncfd4b99e-0267-4401-ae08-8c726ff6d4da\nb9e06517-919f-4d04-9b1b-bc901ca2d48c\nfcb9e810-0bd8-49ac-8148-d2fd9343da13\ne2903ff3-c542-4592-ac28-bbc5b69abba6\ne1926b37-d917-4885-ba77-e48f569b5425\n1cb783bd-8737-4139-b8e1-bb9b651b1940\nd767e7d3-4928-4d2e-8d48-ca06c3ad8126\n2063757a-7e81-4dad-8e80-a36ceee60327\n6286598a-630a-474b-bf33-8d6323137e8c\nf1e21f38-ca7c-41f1-b863-3be620dea361\n9743a135-e9c7-4bfc-8811-db209daaacf2\n61a0c4a5-295d-4b11-acdd-5260cf07a067\nf1ef2e99-fbca-4cd5-9445-bd4d176609ba\nd9dd7835-6c1e-4970-b23f-c36fefd91f0d\n80b3ee1f-4b1e-4c05-9746-4da5764dea51\n4202619e-ca9f-4ae1-b41f-e904b3bdf76d\n0761ffc9-16a9-420a-b35c-5cf7517bc781\neaa060f2-2652-4a02-b695-ae7755eb92a7\ncfb3c733-ea91-4750-8fdf-418de0a28a18\nd430081c-288d-4917-9d8e-60e996055a5d\n70b2abd0-f5e7-4d58-8a19-003b214bad73\nd7175f64-c723-444d-a013-60eb35a63d23\nf0a40b1b-acac-4f81-8ff2-a41bb6f5ec3a\n240c4113-1a47-46c9-908b-661680f7d51b\nd3a3f175-5ed9-4ca3-9241-dabc735737dc\n9e179688-0609-4394-90f1-8601d7dd355c\n70850c03-dd5a-4a19-bcb7-372b5cfdcc7f\nf09e0f62-6ac0-4420-811b-f62c13c1fe95\nb38c2f57-73d5-48ad-9915-6406d89268fc\n76d4fef3-4bef-4ab8-a780-f6204c9be94b\n260f272c-0133-44bd-9fbf-cb873ae4a9d1\n78c64f72-8499-41d4-a894-448441ca8f68\n31467307-e23c-4dce-9d96-43463bd8f3e9\n1e28aa8c-e352-44b7-9f71-f614f7a60742\n52f6e20c-a26a-413d-b174-80baac2ac9ed\nd4ee7b9e-84ee-421a-a497-cc19d6804c46\nf12f2c8d-8588-41bc-bd52-0f53cee3284f\n5f8d5e6d-fe84-4ace-b3e7-d7b27726a894\n5819115d-9720-475d-b4b8-607f75f3cb90\n48375bd6-c8dc-4d68-90ed-07868f405e9b\nac9aa77f-552e-4cde-9435-abe2ea5c788d\n7dac68b1-138f-4be5-a47c-d4561e0f3413\n29bf83dd-eb71-474f-8b19-312a7a623035\n49138561-7f70-4d3c-a182-5eb41f36da2c\n9f6bbd30-96da-44b2-9896-211e4c206481\nf95549ea-d2df-42a0-80bc-da00a3f97e58\na691450e-0227-4f26-8264-33e0ed188164\ndd466cf5-f02e-4031-81ce-c450d2dcb9c3\ne5d073e7-c36a-4588-800c-a346364d7dca\n2c2e3fbf-55c5-48b0-8448-2ad4d529f273\n8ba3aab5-5e8f-4afd-8300-faa67d2165cf\n19570406-72e6-4f1f-a60b-e32b6cb4d685\naa56e129-62e6-4c5b-8f55-60b095f5a112\ndc4a496e-b6d3-46dd-b1e3-1b312377de19\n7126d9f4-4c5f-4ff0-9a72-c24aa3e4ee3b\n19955e99-8421-4505-a2fc-31a42d5f8b2a\ndb51ab74-f216-414d-a261-d3392879a57a\n00f54b26-8166-4929-9e74-d17c6f6df775\n507034eb-89bf-452a-adc9-8e6571864a58\n616ab3f5-5cbf-420d-8b54-1b804b88b875\n57320975-c2e4-4497-b9a5-22a46bd371fa\nd31293c4-ac89-47d2-9a9a-88dab95c04af\n6dae165f-375e-4734-a08b-22e327ff9cce\nbd21cd86-dd98-4bcd-921a-897ac4f355c7\n833ebe64-4ee2-4ed4-8432-6f83606ef6d6\n100d7510-3a36-4247-b701-0e28a69ffde8\n68f1a5b1-93e5-4322-9f2c-77609a303695\na14680ee-46e1-4da1-9c65-3d87b0d7612b\n8f375c63-3422-425a-bdd5-837be5dff046\n1097abd2-0b02-4b69-a7a1-59f0120dcc5b\ne1319eca-11e5-4ba8-9cf7-7eb0a54865cf\n89ffdb51-402b-423d-bd15-c810abc7d721\n2febe300-e53e-4cc6-a79e-aab23e3736fb\n68e8258e-516a-4268-8614-8c783b3fc3fe\n99618ab1-ecab-4afd-bab5-93d17aa143ca\nda95fa1d-1b71-4f3c-b8b2-a97bcd0b238a\n12a42ae4-831c-4367-acb6-3acef462b204\nab4b33b2-fdb1-4e95-917c-2ae3351a74c2\n68a09f17-cb7a-40bd-a3b3-e27c5b62bb12\n6121b7e6-b5a0-4bff-84ce-adb58da8058c\n2fd69f5a-ec18-4fa6-af46-049563913600\n09f0d486-5a7d-4109-8d67-8780e36351d5\n212256ba-c6e4-44cd-8a8c-c28695646274\n5c2fdc52-d22d-4186-972b-cb5ae6978de9\n55a98f4a-70d6-46fc-8964-92e752a74725\nafe9d15a-2662-4126-89ef-2055fb824489\na52a6be5-a987-41e2-9e63-2b09f36c95db\nd3f30b94-f15f-40c4-928c-c9566fd04e68\n45f9395b-920c-4da7-8229-b0c7b195db9e\n497268d9-d373-4f73-b2a7-60151416437e\nc58d2319-8f0b-458a-b42a-6f011840c67b\naa8d99bb-2721-4959-b1d7-2ce4dbeaf71f\n6b394726-70da-4828-8a58-2fe8f87f9872\n203d35b1-cac9-4aff-b6cc-7062c11937fd\naa025787-e161-48f3-8198-15ca85a44a79\n17d41b01-5e01-40f4-8dbb-4be179c5d3b9\n889c46d2-d655-4275-90de-a7936d882f19\n68aab905-b3aa-4784-9fe6-4a1e1536f0dc\n496ec994-8ab0-4c1b-9f50-8d244363ab0b\n621f13ba-e6be-46f9-8221-a2976324ef95\nd174a583-0628-494b-8d08-85cd099ebd03\n23486092-66ed-4b75-a05e-5fea32c09b03\n69d1463d-3d08-4a90-93fb-364e641739d8\n720e44dc-676b-40f4-8501-3fdfd3e2d8c7\n1d24b9a1-84ae-4499-b992-170fe9f3acfa\ne96bc2ba-d546-4f73-af17-3c9d396c172f\nb5705c51-0184-469c-a5ee-c582c29031c2\n253535d0-fbe1-42ec-ad2a-edd42e0e17b4\n249eac82-143d-48df-83e6-75d4be97ded3\na8dfecc1-4a9a-45cc-8be8-b533beefff58\nc08b7401-b125-41b9-a598-a5d5e1983d43\n4f60e6c6-d71f-4cf8-9bdb-c06bc7add4a7\n5a595362-9164-4596-aae5-c8911e3ef850\n605361bc-46f2-4466-90bf-cc8dce95be31\nededd87a-1099-456d-8759-a2957c679f07\nbce29235-3b0d-45ac-add7-a4c8aace6747\n77d77ade-abd4-4732-a2fb-c0fb5901a143\ne4e3e6e2-2015-484b-bcac-fd641971257e\n35aa0476-3850-4e88-9199-c7b69472c915\n6927ef3d-320c-4fd9-adc5-e9d38b0959ac\n7ebb8c9e-751f-4c06-af03-0e4a077b0b5e\n1e12fc1c-f2aa-47c1-b436-10ebd133d753\n0a5cee54-2948-42f1-94a4-41a448af4b34\n3000e952-a893-4690-baec-92d951c32be1\n0e7e5507-eeb8-4aa6-9fac-c621a8270d8d\n5690e977-ba31-42ab-b1d4-a3e8de12c297\n6f58cb7f-98d7-476a-a712-6e14b5d14606\n7f3868d3-2a9a-4314-8ff8-b53d3d1c28c5\ne0b6d75a-7a89-4bfc-bdb1-7bd7729037b3\nf8794fac-7f3e-4580-a66d-7d0302be6740\nbf016468-23f1-435b-9721-6c84a15f6306\nf26c1320-89c7-47e0-a5ba-7efab0789c38\n0d4c784e-4a74-42f8-9d63-b0570567e39a\n4e4664f5-e3f7-4246-909d-fc2402a23bb7\ndba29cbe-c9ae-4e0c-a9aa-7c5e9d08500b\na208e148-8829-4820-b8c9-38f578bae052\n344e4f06-c5d3-40aa-acbb-ecd21af38e23\n3f28687d-6fb1-4a04-b182-f9070619eb9e\n0e6ef5ff-1e27-4373-96fc-5c1362e9a5de\n18335122-f593-41f2-8c50-edd98f4a6301\n0f7c082c-6394-44f0-a230-5540f94991d9\nab0a57d5-ec57-4d14-a0e6-b98b145c5a3e\n67d17ad4-3192-46a7-9052-b0633e718c47\n98cc8658-40cd-4598-b696-299161102111\n126cccdf-0641-4623-a060-012fb644bee9\nf76f707b-7357-447e-ba32-763ccfd9770f\ncd9b5c4d-e8b7-4736-8ce0-124082853cdb\na8cb3d0f-dea7-4e90-9956-58d23c08e677\n0e20e623-2d69-4bdc-9ada-0710d7a1d42a\nd760d916-60c5-4382-b089-8421072887bb\nd4278451-8fae-41ae-87b1-107e2a61d8be\nf5b7b39e-165a-4bd6-970b-2b4125993972\ndb256657-db61-4981-8602-26b3f0c3ab31\n76b2885c-6b34-4583-a79d-2375e6e59836\n9bceef6f-9c9e-4957-b8e4-e8df687f3627\nea871ba7-ab3c-47d4-a2a0-6e26f9ef1a40\n759a0728-fb58-4cbb-ac93-da774fbf2ba6\nd21e5e55-3dad-4223-bb48-b6f60e4e790c\n46251473-2416-4b2c-ab85-60c7d34144cd\n554c66c8-2d0b-41b3-a773-48535fa38e09\na525d254-e7da-476f-8613-b22b8f27782c\n8205936a-3a5c-4d80-bf2b-f2791706edbe\n0c9e7db1-b327-4d2e-8964-e75a444c9442\nb1231960-a041-44ee-ae77-2d34aa9052ea\nead0fd1a-4cd9-4c0a-bed7-a5233c97375a\n96ff722e-76c0-4b74-ac86-3deb4f9ca941\n1c99d8d0-3fe6-41c7-a9d5-0c34d22e10ea\na929150f-66fa-4ce2-b4d9-f699e7a2fe7d\n96e933b1-1750-49ae-982e-3a5b6a72b40c\nfcb9ac88-9fc2-452f-bf32-f0fbd2010069\na3f73e02-8fec-4731-8abf-9e157c1f9296\n6f420f2d-8386-4bf6-9c66-090df1d3e945\ncf247d1d-d5bb-4d5d-8d94-62f87c1cbb2d\n46d9881f-4d6b-4d90-b4db-8e8fd307a30f\n9c80ea55-6f12-4349-94b1-686db5750a29\n3015cc19-65d4-43fe-9b90-7cd9db4d5b1e\nbffa45f0-a03a-4a81-879e-513892191ade\na53b8172-9406-4d0a-90db-4e93ae4de141\nd14875ca-a7cb-4491-9e60-063f8908042c\n73b7275c-217b-4479-ba77-b43b5eb60dbe\nf8bb5d25-8bc6-421d-8811-2d1ed1b37b54\n9e520b7c-f7e2-439e-9f1e-fd89c27e6983\n261b6330-6f81-4efb-b04c-8e99158f44fa\n7b5e121f-d14b-484c-95e8-4a2452aeae9f\n87565571-ed6a-4588-a9d3-6b581e8a43c8\nacb8f7c2-7457-4e6a-b245-01384e7b57bb\n74f76884-77ea-4898-9a7e-eae0a899840c\nccacd1a6-84ff-4020-b73a-e2170d943a83\n0eef142b-7dfd-49db-85de-c655a13ff385\n9d8fa173-5547-45e4-9bcd-5e92dda491d1\n9271576b-5790-4512-8893-c1ab32f6b01b\n7404273a-c1e3-4c9a-b129-11434abf1439\n9b3ff196-9a49-4ab9-b087-1dede62c9efc\n9128f302-4f93-47cd-a546-476a81bdcec0\n9abb5003-bf00-422d-892d-2a91a27a67ce\ne3e88da5-5d90-4494-b9cf-164798ada3e2\n7c060524-1728-4589-8aa4-3f3223cdbb2e\n3ec52539-3012-438f-bdc4-69e7d9565c91\n71349d88-7f6c-4e82-8e43-e04333cee09f\n2afce2d8-f5d1-4120-9750-6037754d7976\nc540a1cb-0b02-4957-af22-86fba3973906\ne1b5a090-54de-43e3-8241-83be8b1053de\n1233b5d1-6b1c-45fc-bf17-96f31b627aa3\na1df87a6-02ae-4cdb-8af4-429da2bfaf50\nbb2f6925-eab9-4cb3-be10-3c700a9a8c89\n8c5c63d9-e5e3-40c3-9d1e-e4ec6ce36cf2\ndb387a7c-ac1f-4e15-b12c-bc4544811710\nb86d2523-d943-40a6-8ffe-156641954a62\n25591c81-544e-42f5-9138-6646d6c108a3\n676a464d-c789-4c6e-b981-657e65b51c47\nc322bbf7-e8ce-4888-a66a-9db4b31606db\nd3c5c887-42c9-469e-a8e3-50c25b2dffbf\n891691c9-4df7-45ca-a4ec-b879d3e4519b\n03c51b29-2b2c-4413-97cf-84d15bc20ed0\nf27e2e91-e42e-458a-85f2-9dd16ffb59e8\nbef6e86f-1fa2-495b-8aeb-42fd1413c9f4\ne1eae6b5-227b-448f-a3fe-c05e7d0265e1\n667a9375-61b7-4cf7-9227-440365cc6a25\ne6058e54-8fec-4226-9e4c-5d512bba6fa9\nb5fa0956-1cb6-4056-b5ad-738b3a43838d\n9f49606d-dbfd-4272-979f-d07dd70f97d4\n4167f39e-66ba-485d-84b7-1637e17e5fe2\nac469694-9dc9-4199-aa30-f3c59b6b61d5\n1baaf7e6-5f5b-4602-9695-ab8991c6089e\nf65a1a59-4cc3-4c95-a62a-32a23e9919e9\n77ab1061-e6cd-4161-8ea4-9cd1d241186e\nca0b290f-bd1d-4c59-b20d-2d1d5b28157d\nb11295a0-648f-400f-a4df-1d9a0205b333\n1c3d8a05-fea3-4700-8368-09760326db1f\nedd03bee-d1e3-4104-b0c6-3f7950d21c39\n62824cfe-53ab-4953-8d91-cb3959d4d694\neb0b7f5a-6a08-4431-9b71-bb6ad8f6059f\n0615dc4a-7b42-4cbc-972d-c17b27b02843\ne84bc25f-402c-4f36-ab0a-3ac18d39648e\n62ff8e80-b15b-4b67-aa3e-22d30309f6c8\n8d4f44b8-c09c-43f5-b2a9-dbe136ba1795\n22ca66dc-2a35-42fa-934c-83d005a00378\n8ca87756-33c5-4c5e-a868-90f1a5709a2d\nca88d073-8afc-479f-bacd-57ce354aa382\nd8a213b1-722c-4d80-8894-3c74d79b0325\ne802de6f-dd3f-4915-b6ab-cdf32eb81127\n150e9d73-b1a8-4fc6-bddd-f3807b88ecc4\nd889241d-41cc-4266-a15c-1707136c8d52\nf5820132-ea5b-4ac4-bbfa-a803b77609be\n67609ea3-08d5-410c-b61e-33b7af9e971e\n375341db-2594-49da-9879-4ba73a299bf8\n71605dea-8198-4894-8a4b-f20740103a73\nd0cb6487-ad71-478c-8aab-3539ba7f67ad\nb7d244fa-0baf-475b-bda1-ec5b344e869a\nbf0f0f09-0449-49dc-bf2b-9f3244a3c33b\nec8fc94b-fcf5-41ba-bdf1-bc5f991173ef\ncbb9b581-95ac-43ee-bb9b-3e68da84cf9f\n2bbf6e9c-6c55-45cc-9717-380118c95ef1\ne132c6bb-3518-4a91-a4d7-92c4c6cbb1ce\ndc58a8d4-616f-4d18-8ea0-0ca4afd9b56f\n6d50a126-ebd3-48f7-b07f-6ebd8c037d49\n4e48de15-5e20-4160-8095-b59af861597c\nff441477-d431-489f-ba23-ba96081499d2\n20ee1fda-1229-4b42-a247-f49f16a98a19\nb074b2ab-334b-4d56-a580-432a723e2a3b\n9d078ea3-0fc2-4033-9541-504e81aa05a1\n40af1012-f279-40e9-94f5-f623f7dfdc15\n0d466488-739c-48da-850a-157d72c7939a\n9aa5421e-bb0c-44f0-80b9-bdd30fce81fb\na72680e1-db13-4cf8-bed4-3c9367f199dd\n8e209439-7266-4401-a02d-e0ee9f2cc392\nbe11e37c-aa1c-4b9b-8755-4262bea8a76f\n09c75793-3658-414c-a9ee-f76c07037206\n7370bcd6-6588-498f-b07d-11eac505e915\n1c66c2fd-5175-446e-8464-ea543c724228\n14844939-f3d5-4541-8386-066fcbd1f002\n7d56c6fa-13d1-4888-ad06-121ef2ce56a2\n1715c675-39f0-4c40-95e4-21b64862106f\nfbc6cd55-6e8a-4600-8148-3a4ca13fd40b\n56fc3736-333e-4166-9a18-be833f08596e\n58828329-fa02-4d87-8e4a-08b41eb227f2\n102b0574-da8b-4d6b-9994-fe9c95dad1d6\ndba46100-a277-4c6a-aa1a-a97bb8cea4fe\nc2df898a-40e9-43e4-a009-1afc3122b468\n2809a9c8-2f81-4759-ad1f-bb44f4f204a6\n9baea3bc-aba2-4b33-be36-a61d0641879e\nc06eb71d-a799-4cfc-96e3-cc65c29c5488\n2354e8e3-7b66-43a4-9f12-a7aeed85384b\n57064429-410b-4524-ab56-13b1ef2b54e7\n4173b6ef-5997-411e-8faf-1a5e23a36379\n8d2adad2-3b80-4de5-8992-75b69512559a\n5f207fb4-94ec-4d71-8144-1e817ec832ea\n8b9c9999-1ea6-43ea-9b33-23d49a018f63\n1802b908-f370-47a8-86bd-54d1202cbfcd\n282976ba-28c2-4d3b-8456-b54a4e004e99\nc34f5a35-7a7b-4729-955c-713c271bb12d\nce91dd81-be6b-417e-82d1-6ec9ef47c56f\n775caea2-d8c9-4ce4-baa9-29f22017d5fc\n61eed70c-4c5b-41ef-a130-6349706c30b2\n965c58f1-df6c-4bf8-abc5-28302085ff31\n46d0a22f-ce94-464c-98b1-81a0d331725b\nf4f74818-c227-4490-95da-06e79b5a6eb5\nce4cbbe0-2355-40db-b076-69c6db9755d8\ne7f7b979-fe09-4344-a4f3-3c3e0c9d404b\nd5952e78-d086-418b-b08a-729fd53d2932\nb38c9938-02f8-48d0-8a0c-ed6696bdd410\n32d56e12-2087-4052-86de-e83fd746490e\n55a50a56-3a23-4a04-898a-2d168f0aeb32\n65aa4e4c-fe35-4d4e-9767-93fb52b3697d\ne18d9014-eb82-4fa8-aa7a-c5524fef0f99\n4463c07b-118c-467c-9426-67c00107855a\n6d934321-0022-4e22-991c-1f895a66c473\nd5308359-5fea-4255-a952-d6f28c9e9d81\n0d755fe0-689c-4d17-b08c-d0181226a0cc\n40e4d177-e11a-411e-825f-a5297cf9ec6d\n906f5b3e-6e81-41fe-a880-e6c59f9c2d53\ndfa32faf-9474-46f0-b883-e1cb13dbbed2\n62b5329a-7b08-4b75-8d41-63d2e84cffd6\n6ed4de04-6df9-4678-9258-49d9030b9465\n59fb5d5a-77c6-482a-9803-6a95dbad7586\n22634c00-ad67-4e98-a78e-942650d05ab3\nd5011966-7141-4bb9-b93f-5037d6b6dfae\n0ef5a4af-a957-4938-aabb-26c571cabd2d\n12424c0d-0480-4423-833b-b84629889cb7\nf78c7933-6589-488d-b273-80d9cabd7cef\nce3dc242-2819-4d5a-ac8e-248c069c7216\n79c7cab0-87e1-4a68-8f68-dc6d8d25eddb\nbe161559-226e-49c5-9516-c91e21929e17\nc5492dde-1f5f-44e7-918c-a3e63164fa41\nb97f09c4-cbb3-4294-b998-074208764668\nc76b3793-d87b-4e27-a03d-ffbbe5ff7e3b\n83983c80-535b-4bcb-9f12-72434e400525\n083d2d40-0f98-4b89-b593-c5f9ecbfd385\n5c398723-f5dd-4c9c-9b8b-9e7fc24448c2\n89ccb222-d4da-416f-b8a6-175641e5008f\n322c5584-4668-4900-8693-c3790277fd17\n4eb8bf43-76a2-493c-8e6b-9d83508c4b9a\n7aff839f-5f7e-43fb-9fc4-784191319994\n528501f8-4bb4-4a68-9e25-c2a25f30500a\n3706bd5b-d8a6-454b-baa8-408d20b83807\nc8417859-b67a-4f72-a5d8-acca5878dc0d\nf56433cf-2197-46e2-8d4f-5b49bb0d6c23\nd77c2103-821b-4429-bf14-12cba9076cb6\n8c463d2c-9f9f-41ed-a20a-fbebbacc81f6\na3499894-11df-495a-8315-ea8d78f50acf\nff83b6b8-2462-4030-9c38-831db2b9ed1a\n17131286-1c9b-4a78-a29b-c43c80515c10\n75db2591-d420-4880-b01d-7befb61c98a7\nb38adcda-373f-4cec-a312-5f5791408b07\n52e89d60-0ec0-487a-b280-7dfbe04a62bb\n71059e72-99b7-42f4-b6b0-c0a3ee8486eb\n58799a79-c986-44a2-9dd4-f0beeb686228\n526d2156-4f10-4f3a-8aae-b7bd25ccf469\n96ecf752-1dbb-4272-89f7-d984a30a109b\ndf70b954-1e1b-4e4c-baa2-28fd7baa0c0b\nd0ed987f-f327-41ba-9b4e-695a32c0e53f\n60c00182-3190-46bb-ae6b-27e722a26601\n7d1ed66a-46c5-4eb2-ac07-7f73df261ad6\nbce77ee1-f364-4f7a-8c78-65363fc8dd63\n3476b181-0446-4389-9fd1-764c6ef357d1\n628272ff-887e-4350-9ab2-08d8b06a25fa\nfdc7d7ba-5836-489c-8f52-6339285c43d5\ne262d0b1-0d31-4876-b084-46ca50784c5c\nb4f414e0-f097-4f57-8aca-ab3cd0bc6c29\nb48adccb-935b-4a06-8900-62e3d141d763\naaa016ab-bcad-4c10-bc78-67067b9c0e89\nb1fa79a1-8396-4adc-896d-50364a1f5f43\n0d76f850-781a-4120-9f95-58ea900c8294\nd2f4de60-95b1-4a1d-8c4c-0f1f451bc5c1\n0159a31d-e183-41dc-9e52-32a8ff263fa8\nee302583-9580-482a-8b5d-a09f6fed74ec\nb344938e-057c-42cc-a061-07a5d9e6849a\n953b6bfb-0387-4d35-aa50-826ffac5e72d\nc4c81b56-f7d8-4756-a4ca-f4f487bab96e\n4503a5b8-9c0d-42b9-bca3-e2efb350287e\n13e5d0c1-179e-4864-b639-b89033bac192\nb614e4e1-147d-4c2f-a79c-ef207cffb0c4\n4c69e099-d959-4f5d-8000-63fa9ded614c\n12e7a392-f7c0-4824-a584-114998086d30\nc113777f-ae5a-4185-bef6-eafb6ff92dcf\ncfc9b7dc-e839-4ab5-8b82-5ed686ef8520\n9934a27f-76c3-421d-86fd-2f9ed62cce11\naf9cce50-bafc-4ddd-8d0e-da397377a274\n23348f06-e6cf-4ade-b898-13734ee07dc3\n6474696e-4c8c-4449-ba16-aadcde0b96a0\nefa6c976-5717-4a49-bd94-b6198b0ceb71\n7e39cf28-d7ad-491e-b386-ce767fed9ac2\nd8ce2bf4-6887-4937-86b9-4e841ca6a3fa\n1edacb35-9b0f-4a76-a09e-9319b2069693\n0c95e0cf-8541-4abe-bedf-4d19643e2f7f\n23fc1ddd-1d9b-4bf6-8c9b-86468730bb6e\n6d92b12e-0e7b-4805-8eba-77cdfaa62407\nbd01f63a-b1c6-4fad-a7d7-ce88b4c4e587\n5bdbed9b-7fa8-441c-a453-2a8edb261308\n691693c1-b59b-417b-b193-76a9591c1a12\n4bde6518-d319-4512-ae46-df8f24eca83f\n8a8c6463-7a8b-4152-92fc-945f2a115dd4\ned24a009-291f-41be-8556-ae6f0ae273f6\nb8cb5579-5764-428a-b76f-02159e0e8ed2\n27ca8e55-7619-4666-b029-5a5291483b24\n326bbb29-8f5d-419f-ad59-43c6f1afbc10\n04e42630-adb8-41a8-bf3b-60f69658431b\n78692cab-45a7-4d40-840b-f26dcf00c663\nca7fa93f-8388-45c0-b436-1a5c0241b6e0\n3b76d98f-c0c6-4a2b-a3b4-10c4837cf362\n8f6a7fe3-b4bc-479a-a5b0-1b1e5e7fe4d6\n9a1b120f-79b5-48f2-b29c-7e69f34ed7e8\n5bb263ab-fbf8-4b67-b329-66015e13d2da\ne69eba75-d8be-46bd-88f3-069385ce9146\n30516989-681d-4036-bef7-4831fd01171b\n0f596b24-9d20-4753-b80f-07c9ca4a9e94\n6ee58037-f169-4b1e-822b-cbdd762aed3a\n4d09516a-befa-469b-8cb8-fdf84d3d10fc\nc5f3b54f-e900-4c2b-86eb-afbf999d1416\n3b994c52-be6d-426c-b238-e277356636e9\n2dbfa13b-b5ef-4a83-a870-dcda2c29c2d8\ndffdd9cc-30eb-48aa-ab4c-c326a6b23759\n0f8d137b-ef60-42f6-a3ba-3862609dc90c\ndcccef02-16da-4f66-bc51-9ed99170e1ae\ne94b7883-2632-4118-8872-928e7846032d\nfd9c9dcb-924e-40f4-a44f-71dce4d08514\nc80b5042-40e6-4fb6-815e-534a2ec9615c\n88607959-c53d-46fe-9475-346a0d0d4d67\nc0c1ddf6-6a44-4ed6-84bf-29f29fca0a43\nb53ac900-26ac-49dd-a96f-04fdefd92190\ne32e51e0-a935-4481-b1c6-1273ece11276\n23050595-ac79-485d-96f0-a825129b443f\n6ceeefe7-4343-468f-a9c7-f7af6857c59f\n051cc94c-850e-4a19-992c-52b2c4ffa199\n50c5f6f5-cb88-4441-8540-3a5440b6ad38\na0815fa2-bdf9-406e-a60d-ef30aba460f5\n8741a3ee-f225-4a6c-bac1-fbc9eb15df1d\n11b74e62-5dc1-47d3-a3b1-fe66e048c6d7\nfaef000c-ffe2-4d8f-83ca-1fc28d825347\n906e60ee-51d2-4e7a-b586-52ea4456df6b\n4e762e38-6963-44dc-b454-d35bb9ac23a0\n0a445e1f-8343-4624-9d68-4767f17c3390\nd1b22b9e-3f6f-45e3-9a96-3aab20483434\n1474e69f-eebe-41f4-a828-09c3cd5ec270\n1a2ae1f0-3634-411f-8003-e322444dba77\n6e23817e-c232-47d7-a871-d25c52687f51\n401f9b1b-0cba-4bee-8e43-ca513e3a6a6e\n796c8a27-2ef9-43ac-87c1-5942468c1cb1\nfab715a6-f419-41fd-9603-de0c1f95c426\nfb9f5558-0833-4071-ad1d-798e256be4ed\n6fd63b71-9b15-4a0f-9d1b-5b6063741ab5\n0c30e087-e6f0-4b5e-9a28-dd188f14d00c\n83bf1ea0-2fa3-4c33-918b-87c779669729\n1bb27919-baa7-4fd6-8445-f514b5a0336d\nd458b2d9-c505-4a3c-aabf-9c8b5a9342f0\n4f793c1f-6e21-4756-b080-fbcda4b0fa66\nf788fa75-4ac2-4f7e-a4a2-6c2ea4f02211\n2f5b0538-caa1-49f1-93a4-1971e74ef5f2\n354f0707-e771-42d2-aa7b-ab047070adb7\n8c0c5fe4-1b73-4a10-8826-177666f7f730\nf96429f9-1a87-41dc-9b15-6cb39726f081\nd32707f1-d8cc-48de-ae12-9a1c5a8417e2\nd0bf215a-019d-4b90-9775-4bbd49537e23\nca78f1e3-7c7d-4770-acf2-a6d31b3a6ebd\n4df3080b-1040-4e27-b55d-52af0fa2fc9e\n897da608-469b-474a-9e9d-7cb6f272cff3\nb5135afa-a97e-4749-9218-37c3e6f90b8a\na0b3cde4-67e0-416f-acc9-9b55b2c6e576\n9165ee84-e356-4b7f-9a47-d1c75b5d7ed1\n7fcf71e2-f3fd-4c30-8db7-1b0be0ec8ab2\nb106811f-f271-4d9a-a876-d34e51fc6dd4\nb1ae790e-dfc8-4f87-9b5a-5661b9ccd923\n9fcc8232-c93e-4f1e-b6e0-91637a75ef46\nef7e4675-6eb8-421c-bbbe-5ebb5e00b016\n0f07ea99-d935-47b5-9ccb-e84adaa2fa17\n65fc979d-e066-4d77-b1e3-7edab1f6322a\n0700c90f-8616-4bf4-a311-54816e23e796\ncaf71db1-d28e-4b64-bf93-99ed8e16672a\n8c2aa060-2b0c-46a7-a1ee-0b1dce983a70\n0de39cdd-d3f0-439d-9771-460dc8429cdb\n1eb3d984-99e2-4fe1-a4ed-2142ad2daf4e\na7d2dc3a-b074-494d-ab36-9589d310a6d2\n08a8c2aa-f437-457c-814f-bb43598ac274\n7ce89a45-6d6f-4049-8b75-ac1679bc94e8\n42ea1fa2-f0ea-43bc-a45b-07ef40193402\nd077b15a-b999-4505-bf4c-6b5d1c375697\n830f37ce-004a-4cda-be76-29caf29622d1\ndf6d89af-c07c-4d90-b440-5d453ddefc0d\ne25e0910-a1cb-498d-9f5b-d1e3f3849f86\n38e56dc9-25b5-4327-b101-15b6b9b8f75e\ncb8335c9-4527-4036-8e4d-728e5ec4a359\n7a698cf4-8fad-4a02-ad38-ff562f602aee\n3a47554f-65dc-4fe0-9a3d-d277eae5f8f1\n99db1588-f7a6-456b-9b14-381e7f959fe9\ne5b529e3-5bf7-47f3-98ac-3b511b7768e4\na7cfe481-fb8f-4d72-9353-6da116d2c6be\n5faec722-341c-49c4-908f-6cc067875f89\n608f1d0d-db45-45b1-a34b-9cfea0d0ae70\ne78c7830-aa0b-4387-a8b2-02a273a79bbc\n9bc53b39-65eb-428e-8b8e-6dbf8abf5b3d\n1720567b-1406-4a11-b913-bb137d11e054\n9b1af551-5e42-48e3-a7cf-217a2fafe2ca\n423191a2-d30e-4495-9602-83fd8a0443f5\n373f0c9a-67e7-4a0e-84f8-e2b20d13ec80\n2d734ea4-20be-4f2e-a5b5-0416b0423845\n472dff2d-8064-4025-b54f-9234071fecf9\nf676d67f-496c-42a5-82e4-34300051de5e\nf4e2c567-05c3-4def-a368-d866c4cb42bf\nbfb4c67b-e38c-46a6-99a0-6b30f1a1c761\n1b62144f-cf43-4fea-84e6-2d2633d84c37\n156fd4fc-7655-47ee-b2de-760fb647b756\n107ecc8f-aed9-4580-98b2-a756cae51e4b\n97826681-c9ec-4d58-a584-1258f954b84a\nb28f67d5-1819-45b3-bfe6-23fea79fad77\nc632d667-6a49-4b95-9e7d-2fd42d392198\n8bae51d5-b6f2-4fc1-945a-216cdc07a0b2\nfa3ac17c-ab27-4204-bd87-eb00302519b3\n3b01908a-18f9-4e7a-bb31-1f06dfc44d57\n50a643e3-8ddb-4495-b172-fac6c88e13f1\ndcf0a908-940d-46c0-a022-381f4d13c586\ne60acada-c3d8-405a-a37e-7117c7e409ec\n37ca63bf-5572-4160-97b2-f9710d50827c\n05f1daa8-c4b6-43d5-8337-de822fef6b3b\n6e94db20-480d-4dd7-b07d-2905b7ef08dd\n4f5d1f85-f630-4832-a671-1d25e7acbd71\nf09e03aa-7cd4-44ab-a0e8-b5b95ca9ec2e\nc8f0679b-a1b0-4110-b9a6-7a289b43fa70\n0d54e7d2-996c-4f64-aa1d-e2c923e1275e\n7a987c76-e86c-45ad-aa66-d4d870a6f4cb\n475ec0ad-2ca1-44f5-aabd-12314613901a\n22ff0984-19a4-40be-aae3-7ed8dc338e36\nf65f8297-59f3-42a8-939a-eb4b83522238\n05efbdb4-919b-445a-9a77-b1c041ce5303\n74af497f-e401-49e0-a7b9-1c0f0e082de7\na7000700-7466-4684-82ff-cd60bcb80ad0\n4a8ab489-4bc1-44a9-a7a5-1e4b7c7de3ad\n28d0235f-6741-4ab5-90ec-5b202b3d73c5\n7a44b810-6198-4e45-9144-6c99add46f13\nbe142e23-2e61-4f4c-b9a7-1d7a5680c21a\n4f64728d-8030-4c41-a184-1996b34b48c5\n22f63cf1-e176-4e87-95aa-4aeea50f81bd\n6243414c-f2ff-40df-a0f0-c1368a2b2a37\n2bd5254c-2747-40ca-a4a2-0ea36b74b9f3\n0151ce04-b0fa-44f9-8344-3161fa8ee361\n926cb097-acfe-4c2f-a7da-a70c5eb7ace7\n81ec53e5-fb5e-4187-ab16-2d09a48799cb\nc9a7dcba-dd6d-44f0-96aa-830bdd02fae4\n4ff82e65-9683-4284-8041-27c24a50491e\nf7b470a5-87be-41ce-b399-bd082b4471fc\ne850768a-cbfc-4eca-8697-78178802f295\nff3ae78e-f98a-43d6-9408-6d6206fae637\n541d0af2-a6cf-4291-af25-dc8d36fea601\na99c9972-34d2-442b-94be-4043094894b7\n693a2764-c615-458b-937e-84cdb9dffac8\nf83c239c-d2a3-49d4-8716-3485db7b9eb0\neacecdac-0272-40bc-be7e-24d67b16b271\n7dc40daf-9537-46fa-9fd7-1a42571bc4a3\nd6075c0b-ec5c-45fe-8add-056ec54dcbbe\n8a53ff96-c9f2-4f38-b002-77a30ca01ed8\nf92eaad1-5aca-46d5-a680-25600ada3d62\n23c88a40-6232-4137-84de-01fe5c3a082a\na5748faa-eb54-4fcc-943d-70e34acc13c9\na46b65eb-ea6f-4312-bda3-27275378393b\nc056261a-4aa5-4425-9eca-b768a78054a0\n7e0beb05-b05d-4af4-93ce-b6146fc8e0fd\n6d65e951-58b3-4998-918d-5ddd46476c4c\nc36db9f0-8b4b-463e-8ed6-4eddd04ccc99\nb28e3708-8e1d-490a-89b4-4cb47093f204\n4460eebc-be86-4c38-b79f-5b435206aff7\nf7aebbe9-f913-4f58-9312-174d97a92759\n0137d5b6-a071-46fe-a7e4-d4466f83f4df\na9e798a8-08ca-447f-b3fd-1791e8b92e2b\n4fa621f2-17ff-41a3-8f97-23ec138bd7fd\n4f2f54cf-f63d-44c7-aef9-e4d334874bb1\n5981b9c2-5fd0-43c1-b527-9e312c485db4\n318935b1-74e9-48c9-844a-ad92161d9539\nae92835d-8a54-408b-83e2-c4978843dee0\n41181faa-1693-474f-b5b3-cf8babc7b426\n01d03ee2-9e8c-49f9-a0c7-16233478979d\nc1a46eb9-d5fc-4dcd-9e6b-86edeed26953\n5a3fd260-12fa-41af-ab05-71c7a26c0fc6\ncd86304f-e51f-4797-8024-66cc01e278c9\n34383a12-d544-4018-8b93-08be27ed96f5\n57cd0ee9-4d7e-4f9b-b537-71417664927e\nf05581f3-0043-4944-a0de-7ba976a6ba99\na10501f3-f4f6-4c43-836b-3abee45596d2\nc4a1dd6d-77ae-4625-a716-b015c5930b2e\nbf840979-97a5-4416-b2b2-7e62127608da\n91453125-a082-49fe-b3d4-55aa4d16481d\nb41855cc-b679-49a1-9364-30fdb3ec1c64\n516bd0ec-ed4e-421e-982d-a4a16f643335\nc6a78ce1-6ab9-41d9-ae43-1fdbe647c607\nef7b1037-57ae-4262-99e3-55571f3be608\n650923f5-199c-4dd9-9377-ded9570ef305\n162bbcc5-47a1-41d3-8b86-52f74a701465\n04830225-dfae-4f09-a037-b45ceac4ce5e\n293a0ffc-73df-4d0f-89d3-c396c37cc48f\nb0cf63d5-3a10-4666-a1c4-4450d185d611\n4daadd73-773d-4bab-a582-05ea3475d869\nf846d9b4-d288-46b9-8e82-0c56ba4b0a10\n41ce98d8-4328-441e-847a-4a1a55a96c21\n7f91846a-a2e5-4d2b-8d0c-c8c2e5c116ea\n38360f68-3bd6-4298-a5ca-ffeb70c8af61\nfdb2a8fd-f5d7-4bdf-bfb7-fd64bdb8ba0d\n7eaeec23-e73d-4cad-959e-57c65d16f84e\na163acfa-0f28-451c-a56e-0752dacd3010\n5048b5ac-7be3-4d4c-9cad-3f377076521e\n8a66b007-bab6-4525-addd-ca35bb77e0f8\n7e732d3a-97a4-4faf-a88a-a558a660578d\nb1cae250-bc90-4d67-8157-e0395c9c9bf7\nc7a58e9d-6c23-4a32-bb03-1943a177426c\n66d75580-b7b3-4b9a-b303-139e94e84fee\nf09476b6-2a72-4b01-9453-11a0af5c886c\n1c2efef1-f3fb-46d9-b831-9a28a2646806\n02b4b09e-1dc8-4f28-a2ca-fbab8c96dd4f\n25f62e9d-1cd9-49b9-91d4-d471cb568575\ne6aa3f8d-3104-4545-bdf9-b41d86333989\n8c841643-d768-40c8-9456-b39b9ec37f15\n580a44ab-8ab3-40bd-bd1f-a7e60f037cff\n597a5ec8-ecc9-4909-a224-cc90cd59ab78\n8e653a52-ab41-4db0-b7ae-352e81d93fac\n462513b1-649b-43a1-8e70-553e3f41f6b8\na1ad2243-154b-429f-8027-66f51e3a025f\n03b53d7e-fbe8-4bd3-9ae2-7a43e8580a2e\n8d47169c-c49d-4f4f-a038-165fbd657752\n5d643f49-c866-4c3e-995a-b2b6ce0bc776\ne828f95d-d2b9-4783-9ab8-fb7c694f854d\n70893761-8a72-4c63-b63c-19597c0f58c8\n7d919e5d-4da5-46b5-b627-ce366fc58b4c\n3d8529b0-d874-4977-969c-b3ac0af501b3\n1cff3d5d-a8d4-4012-a685-78169aa7ec67\n4344e088-4741-4433-8f60-c550d78571f2\n9356df71-8898-43dd-acb3-053d18b66837\n0c988607-e47c-4ca2-944c-06ce61c4f52e\nd49e0571-4556-4555-b778-b5bcfd5cf4fa\nc335139f-1a68-4dd4-91ab-7e902736dfa3\nf2237b68-14dc-4551-80d2-8ef255ddf2da\n23bf60f4-3ec2-4412-82df-8188909af627\n0766fc2d-fa39-4e3c-8e8b-2eabf68e7eab\n7203b61f-2d09-41c4-ba6f-3b808216985e\n4a1bcecd-1d4f-4f70-b676-68abebf1aefd\n440bc489-f4b6-497f-8636-a8d8d3a23c97\naf24c5ee-0149-4535-aef9-b1767f01ac87\n77839120-3e0a-46a8-835d-ca75b88726cb\naed22d9d-4909-430e-9953-636c2f279fce\n93b2516f-dacb-4b86-9ae3-f7e616c69508\n009a2d7b-aa1d-43b9-bfe1-fa3f41f5777b\n9723915f-7fca-4dc5-86d0-3088d9b2bfe9\n69bffc5e-91e2-4b5a-bd6d-a14e94c7a0e6\n0fc2f9c3-fbde-4bdd-a7f5-03c34b8e2028\nac69ca4e-6231-46f0-a361-94121ee973dd\n31787f66-cbe2-441c-beb4-3b245f72983a\n045ef1ca-8b54-4699-a57e-e59418e41331\n7b28da75-358c-416c-ab36-11f3c3fbba5f\n4be91823-7c45-442e-b12c-64393e2385e9\n4c8e05cd-de26-4dd8-8bd9-4759e51721eb\n3c238a2e-9e75-478e-a74a-bc67233fd68e\n0dd8bcb4-4420-4938-9f0a-9ba6953292fc\n200f752f-0582-43dd-84d3-28e9989431e9\n44b03f9a-144e-4c14-ad1a-5f4d49be0e23\n26625ce8-15ca-46d4-adaa-c9ddb48e02e9\n84f61cd8-16aa-4e58-bbb0-25637227fc90\nf1221195-6adc-46f9-b333-22ea9251b4dd\n42d549bc-f343-4f24-902a-99d732e59756\n6d793230-726a-410b-b710-ee66c4cc0453\n23b78761-a188-4bca-bedd-a60395ddad55\ncea6284e-5a78-4ede-b543-ea59f75b93b1\n8f6312a9-8d36-4c1b-a89f-3c28afd82cee\n76b440ed-5070-4c9b-9e94-7e83e4a669f8\nd6c57739-80d2-4e15-b0fd-fe4aa2a059e6\n83cb465e-5f8e-4587-a844-17c0d30453d8\n22f4dc17-ff90-449d-b726-e99a73f7d90f\n55f37251-0532-4a51-85ec-c0880cdfd2d2\nd3324412-cad2-482d-ac87-7023ba3de3fb\ne72715c5-09c2-4ce2-9e21-85b76660f339\n633744a4-d9f2-445a-8008-fbaa15ee065a\n5222deb6-c648-4ec8-bacf-c4c61f7e93e1\naa7dac0f-e833-4dad-8bdf-da61fbe37fd7\n8a960125-083a-4e00-8b11-833c6f532fde\n3cbe3f14-cdff-4595-a0b4-4787cdf57d34\n03276126-ddfc-4ed8-96f4-2983f999f34b\n20db5662-3355-4813-8fcd-9084ec2e542f\nf1ffbe7a-0edb-42c9-bf3d-9b15a5e0bd32\n3dcfb148-27db-4ad1-892c-f5dbc86d832e\n25a3dec4-b901-419b-bb75-48cd11430e1e\n63dc3d51-805c-4fae-bdd0-02d68b0dd82b\n58f19750-013d-4bd4-8be0-39b64fb63c59\ndd359abc-74de-4a4e-8a4a-29d823b444b2\n79c60e36-d5a2-43df-9fd0-03294f4eba66\n96a7637a-7107-4965-bd81-02267865311c\n75292bde-3cce-4094-982c-c89ed413eae0\n51c195ae-6081-49ee-8733-e977661d91e6\nc516d0e3-0843-4017-87b6-a5684bceb53b\nefa74967-b7eb-4185-8876-07a15fbfd808\n834a85a4-7662-4b53-a773-ea3de54825c2\n4b0d5361-dc3e-4d36-a7ef-6db25525f3eb\n01189724-2bcc-4e12-b9f2-eb5e96be86be\n1789f14d-8029-413a-86b6-d7df74ff05c0\n6d58c434-b03c-48c2-b36c-874ff6ac77ff\nce4f7fa9-196e-4a8c-822c-b8806c43b9c6\n82ef39de-9b7d-49aa-a35e-97c52d714a48\n777a8e43-c85e-4b64-a401-81ba01b030d1\n71fbe1ba-d493-4733-bbaf-c44b447bd4e6\n48e86979-cfa2-4c28-80b5-909c61468ad6\n658b6fe3-1d9e-489d-81a9-d271f647b3a4\nabb7f0c6-1d72-4471-870d-8d937c05a390\nb5127135-4f44-42bb-adc2-d124cde1e708\n0ef1a115-30ea-45b8-baf8-757418da15a7\nbc01c98d-738c-40cb-859e-03607b076a5c\nccec4894-163d-4d1d-9a06-bc85eadddabf\n2cc2bae7-f985-4149-98a8-375db9bfcd0c\n2a1cec54-9b0f-4b24-bf99-252626a3729f\n958adf0b-3fc6-487a-902b-e004c73efe19\n5b73f5ee-a91f-4476-bb5f-10d752d362bb\n911e193a-5926-4015-a363-14b562fbca5a\nab96f0e8-3d06-4d00-b16a-7b0bd8c23788\nea79bc03-77d8-4f9b-b6c0-0f8ebfb53549\n28896f3c-87a0-43d1-a6e9-b1ef0cf656f0\nce0edc7f-dfd6-48b6-bb19-251d957505b9\n0d95c81d-3445-4f03-8109-e1cae79f1fb5\n001945da-7f8a-421f-8891-2f64abc8631f\n697697fd-0dc1-4b4d-87da-9b116cf8c89e\n7b1122c9-9703-4ab3-892f-03fbd6b3f1e5\nf57e2939-32c7-4015-ad4e-3cb797de14f1\n6d561e67-e7a9-45b7-8793-ae66689c0b4d\n296142c9-682d-4da7-9521-409f615695f0\n64ca4ce9-c76f-4b41-adaf-2fc88fb77a5f\n6ee3fcd7-c2c4-4531-9d6b-52ecaaa62867\n960e6b3a-6eca-45fe-ae3c-6eae1c478416\n3033a20e-07f8-406b-89d0-04b04f5561c3\nfbc07fa7-cfb3-4023-b2d0-4bb8c25ca7ef\n77c038f5-bafa-4fdc-ad4b-70161f77b800\n5bc093d8-73a3-4d44-9865-28332eb8ff27\n0d4da605-b3db-45b6-8c05-a110c5658945\na74941bf-7ec1-4c06-8644-0e27b7521168\nc5a1a054-238f-4e91-96f3-690cc6ded0d0\n1ebcd4e0-2411-4582-8e34-f665c81869d3\na67cc3fc-3f41-4bfc-ac10-0d93b2532be0\n36efc58c-58ba-4c93-b884-2fa6bcd39b05\nf80bc870-3743-449f-b4e2-b8b04099b49c\n07068166-8768-49f3-9dc7-1aed6d2d756b\n0a0c0289-0da0-43ae-91ea-d4bbf98b87a7\nd1edaf68-e5f0-4b4c-aa14-fa220b01e4e1\n6938811a-08e2-40cb-9986-5c0f5e27cdc7\naf45285c-521f-49e0-8aef-08003a9072fd\n707f837c-e603-4327-92a8-72eb8c65d83f\n1e04f056-2f34-4a18-a7c0-3f83bcc13bec\n28d4badc-4bd1-404d-beb0-8cd211b86333\nd2ec336d-d18c-4642-8340-27303fbe420d\naf72bec2-2227-498d-9505-27488b05ee76\nb59e3897-1879-4038-a99a-057f204f2462\n1e333108-dd8b-4512-a26f-9d2eb5cece76\n38c8c2df-6f83-4a36-ad76-df0e36211657\n0c4ae3f4-c988-419d-8e68-ac9022f36460\n20d032c0-1e68-43aa-89d2-b3e65bca72a3\na7f554f8-849b-4868-82f8-70b19a4eb69d\n4b339baf-9fc6-44d0-9a6c-b52b6bf52b9d\ncd54d1a3-39c9-4ff5-acb2-2ad8b4290340\n8dee62e9-fe28-457e-8ed9-4b1c813faeb5\n8462c9cf-714e-4f09-87e5-41b1adbd78bb\n363a4805-96dd-4fac-a121-6a7a70ccf43c\n215005a6-f0d7-4282-942b-e3b4533584bf\n65406cae-cc69-4e23-8479-2c60f6379e4f\n0c512311-b02a-422e-bdbd-d716ab53c00d\nb1ec782e-cc43-4d28-a599-544aac5c0d25\n6d054643-c8bb-4e50-8dce-2a2887b7d888\n1be910c2-5b20-4c29-ac8f-a3eb1bbdd12f\n2f95e258-cc63-4193-a3b6-2b1a8a093c0d\n9ddf5a1c-9fa7-429d-9d40-57950f881d78\n3af02963-b825-4637-bb20-b6bc2dc7e331\na928994c-1e99-4358-a74f-f085bc98a6db\na9daf46d-2390-40e7-98f1-0d62d43e7da4\nea089bf4-5039-40bf-8bc7-64b3b1782664\na83b0a0c-edd7-4b9d-92fa-49ad5f99ebf6\n1b342a79-8393-45bc-a01d-067fca7dfc8b\nbe67b7a5-9dc4-437b-8cdc-8eaad12f062d\n9886aace-272f-4835-bf20-2efdcdfa1c25\n2a0c8e90-2077-4ff3-950d-d6606c7d490a\n3432aa7b-8ba1-45f5-9ea9-101315f99f46\nfe30937b-aa9e-46b0-a059-acf85bd9e78f\n72b9a632-65bf-40c7-bcb6-02e7e76a9a06\nb4fe12d2-d22c-4963-808c-e6c91ca384a2\nb0ed8714-15ed-4a4a-939b-82d3246f8469\nc84c204d-23c7-4d16-8511-68b9a4909f07\n2aaed058-01c7-488a-9b02-aa2ef6bcb847\nfe0b287a-2cac-467a-9bf0-fafcd378b6f0\n2c199f22-3e26-4c97-bd97-e9e1e5b6bbaa\n336ed4a0-e0af-4638-83b5-874336ae779a\na1f26667-f1a2-4b74-ab12-a09ab49d399a\ne958a156-dc2e-4677-bd6a-dc4965c6cc9e\n39faa96e-a9cc-4b4e-b577-d44cfef765ae\n8debc733-cd6d-41eb-983a-5a34fa20ee4e\n873f663d-fa5a-4cc9-b176-d0b39fb34106\n240a4b73-741a-4895-9889-44fe7a310d3d\n6c551f76-3ca3-4f7c-ac92-4413ea3d3e6d\n30316101-4bca-48d6-abef-c573eebc4d41\n08b1640b-bbe2-4ba7-b457-03aa1134365c\n6fda3fc1-2e4c-4363-9a7d-caf588ae0d97\n016d993b-c81b-4fdc-a8d8-3a8547105a81\n6b7fe68b-4753-458d-bec0-0f153f8d3af0\n9fa62262-97fd-4a73-ad74-0ee08684d722\n2566919e-535b-4daf-9416-bac1f713e310\n141ccbb8-b59f-4706-a698-1ac0b124b865\nd300e2de-cbe5-4590-bc37-60f6a7c152aa\ncb3a5145-3e9e-4236-952a-758b6c267c15\n18ebc143-b2cf-4c1d-a640-4e6f3f5fd02b\n3bae8dbf-2364-4514-850f-0842c9ed8a9e\na70d5009-e635-4b30-8efa-7368b05153f3\nc6ef5f6e-98ad-41b9-ab8e-f0974e4c7cf8\n220a50e4-1565-49cb-b767-13d85aaa0b0e\nffa4ef9d-a320-45aa-b210-abc5f4425c6e\n53783c2d-e745-431c-b8af-044bbfc7b1e5\neefef5f9-62ca-4c45-bf03-e76a92f62a1c\nd1c04d14-7e95-421f-b7d8-9641199a4c42\nad2bb6f4-e747-46a3-a7c8-1b80f2b326ec\n77ef87fa-edea-4ee2-8919-cd1ddb3ef9d5\n4148e687-8c19-4a82-b7a8-13dee431745b\n9de8a0e0-7929-4cd2-81e5-8b2927b7a5fe\nc495ccf4-db27-4850-a295-fe943144c9b5\n03b3ded7-5a5a-479e-9e8c-f5d8aca02e92\n06852dc2-31be-42b4-a61c-068880c79ffa\nb1a880f0-a8bc-4149-8efa-8df1b8d3aafb\n773a3545-a370-496f-a801-2e6e1b4e9713\ndbd695a6-5d41-435a-9109-359a474ccdc0\n081b1591-7147-495f-ba26-d3a5737918fe\n7f45f70c-48f7-4fc1-bb9b-ba048d9e2d6f\n4984e1b4-544f-4a2d-aa54-9b8a0f780afc\n0de105f8-239e-4dae-ae7c-002a06fc3186\n79167e5e-3647-4a66-a48b-b096f02fe4c9\nff7b2d4a-ab6a-4411-b161-b3b59cf57719\n3b83069c-e504-46a7-85af-9dc711d38902\ncc8e6923-667e-49e9-9a89-a4d2ba3fea81\n4f031978-8042-4e2c-bdb5-ef520fd9471c\n4d95b2b0-20e5-439f-994e-87420ffd1707\n7a46308c-d27b-468a-b745-ea0a5dfcae86\nde4016dc-72d4-47af-b35f-21adb919de2b\n21b90a9a-5634-489c-93d8-9e76405fbd1b\nb91037d2-bb33-480b-a630-342a601b6fa4\n224a77a0-8dfa-4958-82e8-7b22174cd9f2\n9ce28f14-d863-429e-84b8-fceb1f5c9963\n250166ba-30d9-4851-add1-a5ad07d8b9d1\n5d88b8dc-c296-4e82-ac0a-cecbdc9ff942\na5df453a-ca65-4048-b710-9f90caa37c72\na6626a78-644e-48a1-882a-857f582a6bf3\n1b17f3d2-33f7-451b-ab26-7d6075780f55\n17f7afa0-4670-4bff-b1a0-0febfe0a1145\ndae0afd0-bdf0-4227-bca2-fae04967bd3a\n65649531-8455-4db5-9cab-de294be99b3e\n027602af-5a81-45cf-8349-32b0a08bd903\ndf19c69d-f08f-414f-b5ec-3adfae51a037\n08fcb9f0-7afd-4f96-a7ae-8393a5486c68\nc39e63f4-e3cc-4ada-8282-5450194130c2\n1d8e5896-7e59-4f76-aed4-e6d11d229dec\nc58166b5-6636-4751-ae5d-f09ce7aac685\n264a92b2-2afb-4bbd-807d-e9aa789f3981\na5038518-194b-4834-a880-093f1b5f2b27\nc7d73d61-6aa1-4c6d-9cfe-c46ea6ce1f0d\n8e78ee73-1ff3-4f3c-9087-424e17da7137\nc68863dd-aaf7-4944-9c7b-0b1000d89191\ncf6879ba-d44f-4447-a96a-7e0fbb9b65ee\n66d16809-45e0-41af-89bc-58dc38a6adcc\nded7dd26-59e2-4a74-abc2-86bcb5f48f93\na1a4276d-ccea-481c-8f52-c50a80f6e258\n84b42bf8-d418-4cd6-9f1a-02149a85e81a\nafbc16f7-8241-4940-8224-b9652d4326dc\n0faa6455-614c-48b2-aeb2-2ba4bcd12691\ndfe0f8fa-23c0-44fd-9c54-5ce4eaf0762e\nea219313-93be-4db5-9571-29ea4ce0e3c3\n8c88c616-2ea2-4a6c-bf51-d38e16fddf8f\nf340fbbf-a9e0-463c-9e05-390f083285e4\n6857452b-fcf2-4f65-81fe-7a23ed9db681\ne7ccd187-11c3-4e75-bf70-2e9f166a3470\nf517fc43-e540-4d6a-8320-36430457fa4e\n027ec129-8625-4fd4-a5b2-a63f38588053\n0e42b849-ae40-42ee-82f1-356899af5b64\nbc0fe349-50ff-4c4e-a1e2-870606681c42\n8750bd19-639d-4d4d-a3a6-3db69fd822f2\n331f1954-b8f6-447b-84e6-143f230c91e8\na532a0ce-2dff-4715-aa3c-ef9fa5c055c1\n8d160b74-fc9b-463b-a0aa-be3607c728da\n1b599e0d-6bd7-4b60-be8e-beaa6030d369\n2e3f507d-2949-430e-a68a-918399916e41\n3f16c10f-183d-4c0b-b94b-ec9f8119912d\n7cc921c6-db3a-460d-8e1f-aaaf17dcfe7b\n80c108d8-c307-45f5-b285-c276dc2f63f3\n92ef525b-859c-4521-9e72-b2f5c420795e\n055541ca-e127-4e90-8e66-09dd343da385\n7dc736ed-2fb5-49a1-9641-8aacc019b07c\nde3535cf-952d-416a-8469-74695c2e4ce9\nb3103534-3806-4fd1-bea0-d6da8c7999fe\n46c4e9ed-1a8c-4f54-8cf0-397de4c1f371\n115c8b4f-e4d6-4f55-93c6-b48dd40fd4b5\n11829760-05bf-4e5d-8e5c-d7f55303dd99\n59496373-f0ec-4c2d-ac39-8d182ae7b49d\n0799222c-6e30-429f-8ac1-ac1856ceb58e\n633057fb-18cd-45c5-8e9a-5601518c4234\n4be70dc2-6a7d-46c1-bbe6-a140c8c29212\n1f9cb552-40a9-40d6-b80a-2225adbf370f\na257d251-5bf8-45dd-a059-b62b20397b38\n0cb828aa-a0f9-487d-8c9c-e7172b6b71e2\n1691fa07-37c5-4f7e-b08c-37c031cd9be9\nc393feb1-d0f1-4dcc-8738-a03942154535\ne48669f0-8d58-4dc6-8b94-d6c06db78df5\n58983702-fd56-4c66-bb4e-10eaefeeae16\n4f533684-c8a2-425b-b701-0c4f82b27313\n2ab2565d-9500-49b4-90f6-8c4c939d127b\n2f92edfe-929f-4316-9b69-05166c62fa88\nc2a987db-7a58-4957-94b7-55d8b3befd5b\ne290a500-499c-409c-ad04-cd6810dcc130\n670536b4-a540-42b2-8492-be3e1f94dd8f\n9437ad1f-3ff1-4c44-81ac-206edb1f39f7\n7abd69fe-2b25-4002-95a7-444a37ab611a\n68cc37bf-c84f-496f-bb40-d56e20d99061\n215266f2-cd92-42cf-9fac-e13566163ddf\n69a09f07-4230-4414-ac53-802f4968d7eb\ne2c35aa7-6821-4ff2-8984-37332da7dcdd\n30ca536f-d482-49a0-be78-384851b4cb6d\n5d94fd63-1c81-494f-87e0-45ae63ba806c\nb7eaf656-0acb-424f-90a8-9e290ea259e4\nfef69b53-b0e8-44bf-a026-b42786da1880\neb0320b7-dd2d-4144-af3f-70158c041cc5\n972406a4-eaeb-4275-aa3d-224d353280bb\ne96eeb93-a37f-4124-aa6f-d697d20b5620\n7ca0e31b-bf4b-4e41-90fe-6a8e8a1b5071\nb7d534b9-11f2-4230-8354-12ddab19359d\ne4076cd9-e148-41d3-9e2a-b120e668a243\n84d9849b-7f6d-45cb-a8c2-d965118a2d11\n064230e3-1438-447c-b1ba-16c5cd5edca6\n2c718965-5914-4328-960a-7a72f26cd613\n67ec017f-0de4-4c98-a564-05279deef686\n398eceaa-ccad-4dae-aad3-271351cdb4fa\n6172c7b1-a835-4258-9d27-59488d771d2a\n51ae20c7-177b-4a40-b55b-2d83c64aebd5\naea1a0cf-ea64-4362-b511-73a6681c4a1f\n38092049-33f3-4849-88a7-849bd4e38399\n6ed88d62-546d-47aa-8c81-ca142ee854a7\n1cc72497-7c4c-425b-bac3-d7fb518d4e43\n63d9f384-a5bc-417d-8841-3af0c893a031\n382b2ff3-7583-4436-879c-620fc80f4242\n22ac4c42-ff2b-4d00-894b-c8c786074b9b\ne22de98b-09c9-493d-8573-3efd4f61f8db\n525d5b30-5faf-4155-8954-bf63e11378c8\n16f239ec-882f-4880-98cc-01a5ff15bbb8\n63bc6d14-9269-4ce6-a36f-dbabcefdb942\ndb0109a7-8405-47da-b82d-7a5b96d3978c\n4dd4b493-68b8-43ce-be8f-65a2f5577f30\ne3bbf853-a715-413d-8c61-0b702775502b\n88ca34a0-3141-417e-8d98-2e8dbe5cc98a\n468b24ae-291f-4ef3-b4b6-14b400894d94\nf62c89ce-49da-407b-9e3a-bda50820679d\nf360ac66-ab64-46a6-a5ac-ac5015491864\n36059978-2f59-47eb-b89c-e0962329417d\n13dd3089-d1c6-4ab5-8847-7814c92f3324\n35bf5a6a-17c4-498f-92da-faa4a22f5f6e\n0978d464-f792-46eb-aed5-9038dab8fd23\n6575f10f-e2f4-465c-a1e4-c8f5cd8723e2\na41fbf85-5182-4a28-b7f6-a8ff69b03123\n31b7970c-33d7-4f50-8f37-afb9188b628b\nf50195de-8afc-41c0-8794-dadfa9391904\nff186398-da03-400c-82e2-1928ac9f0a41\n4e91d5bf-4782-4106-9803-b27eda24639b\nd73e9e1c-e082-41c0-822a-66433a95c83d\nd37a46d1-7bac-4b5f-8ade-313970688b56\n116544c9-a627-490b-ad52-f85a5dc60cac\nca75de52-43f6-48b5-880f-b17b0a2ecb04\n1604476b-922e-476d-8a3b-2f96aba282e6\n7606c570-4e54-4447-a928-40bdc1abe865\n366e082f-8004-4ddc-ab75-ae19676227de\n175931b1-7073-439e-9552-54f891650cb1\n278461e5-f298-4948-8cd6-503e8c756c2f\nb05ce23f-9b98-431c-9213-135ba8cdd3f5\n1929e244-e5bd-4dcb-b604-6d20742652c4\ne4a4a87a-496f-4248-92c6-fa2dd437d039\nfac170d6-72f1-481d-85ed-d68aeb87e8cd\n6fd97526-e822-48da-8871-654e169405f3\n446f7e37-922b-4681-ba5b-1d2001bd58db\nf868e7ae-700b-4cef-b9d3-292087c7802e\n91747699-40e4-4a30-9040-cdf0176b445e\nc6cf9b4f-d51b-4301-b225-8f6052063a8a\n3304e9fc-b1ad-4b68-9d2a-b894d7d06fff\nbd3c0f4f-8c1d-4974-b804-2e9bd9efae37\n6e9ba07c-cbff-4fca-9273-c89914f9213d\n3a6e0812-2c04-42e1-bcd8-6f842df00a90\na2e8b0c5-bb49-47a2-85a7-20cf12682dfe\n81f47a54-dbf0-4d3b-adbb-b8dd179295e8\nc626b1e5-7704-4938-adb6-2dab3cc85b29\ne14024e9-bcb4-4ba5-bbc9-a9ae378577eb\nd94726e0-00ab-4ef2-b3f9-4c461e40bf06\n3ca98d06-37b6-461c-b09f-fce82f0060a4\n1cd96a00-e5d0-4773-91d1-34163d87bc35\nd1d997f3-6e93-4a1d-bd99-ad13e6c52784\nff7c6a4b-64f2-4a14-b6ba-c4d21f60c89f\nbf9a09db-8969-4435-a015-cc5350108309\n363a7a9f-6ab1-4a92-9d5c-2541590186b5\nce971668-fbaf-425c-8c83-565281f86e57\n32003610-b268-45ef-8d5c-ba7582bcc853\n1b6776b4-09d8-4768-903a-56d82f324602\ndaab0fd5-5a5c-4a9a-921b-2476f0625235\n75909b8b-ca88-45f2-a38f-cd2d58b970b4\n008dfbc4-9c88-425c-a6f6-a5093a20bdae\ne2ee864b-1760-4313-a206-3f75dd19cb2e\ndd130772-88ad-4e44-80b7-7576e76fcb29\nb91b2488-928e-47d9-9f1c-31ed7511ce62\n54f5c2de-6dbe-4b9b-8a81-34cb7fcf0dda\n80c7f35b-1b1b-4ee2-afe6-52f1e91cd932\n34683687-b845-47b6-9a20-3755e8da9835\n88e83172-16fd-49cb-83cd-e32baa3fc8e1\n3ebf6ba4-8ffc-44a3-ad94-d43df9ae47e6\na44373b2-c20c-4528-8fda-98c0f8dbdca5\n09358b7c-b2b5-46e0-b5a6-6017a46e45cd\n1907e179-c24d-4fd0-ac22-4c86a840fdaa\ne54bf45d-72b0-4f01-a840-1a956f2d6b79\n110c10b4-88be-4466-85e0-13cc93334550\n5f5fd357-06eb-4fc0-a742-350a9aa3cc60\n32e4643a-6f2e-46cf-bc92-6a840493c643\n22ea9ec0-b681-47f1-8039-4284512f6c59\n8ba0de6b-860c-43e3-a276-50c8b17d806a\n1132c418-bb73-4a48-8bc8-51c82675488c\n1aa45bfb-7d9a-4fe1-9622-fac0e803529c\n4ee7edd9-a2df-4c1f-a068-c9a1729ff4b0\n27d3df06-7e2b-4273-a3ef-306eb4616718\n41725497-5028-44ce-b9ea-aefd3fde3caa\ne731d8ae-eb13-4922-8cfe-d85a460fd36a\nae33d730-40d5-4af3-b871-0688d74a112f\n5f1fb5fd-9de8-4104-8078-5f16c046e837\na4bbf580-c775-4cc5-a976-ed63e1ba1c99\n614cb350-eba2-4211-b390-55674f7f913a\n27d70643-5eb5-4b40-8c0b-c0a82bd905e7\nc016afe3-6a30-4c30-a882-4b456753ecf4\n3db6ce03-53c6-48b1-a51a-15476c576d4a\n56409ee8-e483-4877-83c7-0b0c7fa637ab\n41678ce9-325d-4c0e-abb3-078938b10d91\ncaccbab5-8418-4d24-bd6f-5fe19a316ba9\n676081cb-b7fc-4335-9442-50420010016f\n1db00dc6-330e-4b3a-b38f-f5717fffb73d\nbc1b5cf7-1829-4336-8d53-454a0df32657\nb6862277-201e-45c2-a064-f43752d0dff6\n046b90f8-47b6-424c-8a9c-594e0a904299\n80797843-6928-463c-a49c-0f29e8af39f7\n09eb4da0-6292-49cf-a69d-9807b084cbf7\n1723ca83-7843-4a64-9bdd-5aa25c8810cb\ne1932670-b603-46ec-a0cc-63d576fc2b17\n54befbcc-2570-4bdd-a7f6-bb14dc39d9c5\nbff4d37e-fb34-4ac2-8c9c-36d039c00819\n05d29405-9508-4026-bc6f-b556ee879610\n59a55885-6925-48da-b83c-be1482be334e\n50b4c90b-666f-4c7f-9478-1d5476db2ee6\naafbdd38-483e-4df3-b836-c7843a443d01\na0bb24cf-ebc9-475a-bb8b-a645312d6934\nd9730ca3-029b-433f-88c8-55e4565a7627\n9e824ca1-3eb2-4ffe-aea5-ce77a7fc3d52\n1dc9eb7a-c988-49a8-8a3d-bd3def62f9f5\n77cf163e-efeb-405b-9175-7081b93bd94d\n20806655-0fd9-4c0d-b35a-82816b280c00\nd84fa3e1-83b5-4ed5-8742-bbb25602a40c\n672140e5-6fa1-4015-bffe-a739c6e5ede5\nd4f37cde-0f72-4158-a124-322a7b764c7b\n5b90f492-0d2b-42b9-b802-e3cc9ea601a4\nc8dd31e5-31a3-402d-b887-5e500e67da64\nad10f96f-9e8f-48c4-bbad-4662fea6a291\n48115fbf-7ec5-492c-a6a4-3b4b6a65eb9d\n03b8a60d-a2e6-49f7-aac2-b386905cccbd\nf8872403-7d16-43e6-923d-f21a12edc2c9\ne6422bdc-e17c-4dd8-9896-160f75d08a2a\nb8bf9578-7b17-4b61-b549-95c0d8ef45f1\na9216904-7b30-47be-8bd0-e9b3e1221f80\nb3fe3926-9272-4248-9ed7-fbcb33b19c4d\n477a674a-5cf7-4d3a-9f87-85e137a5b914\n841a4b48-da52-4b37-bad0-1ed8de59894a\nd83abbdc-ed8e-4126-bbfa-99f43486262b\nac07643c-09bc-4ab5-ba09-5734760d031e\n0e2a38ec-e1cb-4890-8534-bdede7e307cb\ne5c1c195-9d01-4cf7-9a15-bce0285a6753\nefd3cbb0-b4a9-4b43-9e9a-9490bb1e0764\n414823cd-e865-49f8-83ad-0ae0946e42c2\n821bf406-0bf3-4b4a-87c2-a0891e6bbe0c\n121d561a-d660-462d-9424-4d9f04c4d254\ndbbb213c-8976-4a22-8924-731a75948bc8\n3646478b-aed5-41f3-bb42-8f7a0c53c693\nd03396b6-325c-4533-9213-6df1c8693c9c\nf9e2acc4-74d1-48fc-b091-134a869aff69\n3cf2591b-eee5-4a32-a5c1-d92feac8b731\n5ef06984-ef44-4e77-a7c7-9248d076563b\n3b8e49a2-c1c5-40db-b873-bb25fc5c57f5\ne1ad61be-7c62-456f-94da-1886336396ef\n6e2fdae6-da96-4faf-8916-28ace503d8fc\n35032d0c-c791-42e7-803a-8fea3fc010ef\n59e0ede0-fdda-4c54-a2cf-821202100b8a\na58851fb-b2b4-4f6d-946b-09d2fb6a08a1\n94371760-6604-4d59-9951-87ab2463c219\ne08a2d46-558a-4c53-a66e-b402156ea680\n131ffcd5-ee10-42ae-bbe5-808ee90e136b\ne507e589-7dfe-41de-8b78-f48c9cf4f932\na6f1c34b-ef89-4484-9ff7-dcd7007eb4b5\n576def90-e1e5-4e86-82f0-ccf81391b319\n18882d88-834e-4e35-b3ab-662300ce6f0e\n08d5ec48-68c9-48e7-b65b-30c9fb1ac0a6\neacedcf5-893a-49f8-8df0-a07dd0c42c94\n7b08267f-692d-4734-9dc4-2dd7502ed105\na3775c7e-6e44-4144-86cd-6bb6d3c289d0\nd65f0bef-a609-4bd5-9d96-076e0b610ae8\n0def36a4-463c-414d-87be-943736f38b56\n8e4c7a1e-09f2-4606-b066-d899cf7eff62\na51f4d9b-ac76-492f-ae68-5905ed95e419\nb172100f-43f4-4f52-bd0d-5cb372e3d624\n3fbdffdf-980c-4d50-b574-8445c9cf3c21\n50f23c00-e978-40a8-98b4-8d8b5ceb8e27\n0a409705-820b-4188-b163-56aef9f7c618\ne0393559-1380-4a51-ad8e-949d77983668\n3c977ae7-40fd-4f3e-b475-52cdda637a24\n6672fad1-0d67-4af9-8139-7d67003b97b4\n45af571d-60c9-42ec-ae43-172ab9f0aa3e\ne07518eb-7ebf-4578-b405-dd96362fcb54\nb2f8eabe-e664-4aa6-842b-16aed213503d\n0ad76b6f-2464-43a0-afb1-00b90b042187\na1f4e77d-079c-4c9f-bb69-8b56bc3f9005\nb3ccb497-4f2a-4673-8d3e-6b0d89759300\n125601ad-1864-44a0-88a2-8f2afb0936b8\n0f49504c-f5fb-439d-8fa5-ed18bad4fd22\n6d3a6bf5-a885-4bda-b231-286abb77a912\n3c3a0554-0c0d-4736-bc68-06af10cd0d8c\nab4a54f7-dfa9-475d-b84b-713037dcd154\n1925f5a8-3508-42b2-883a-adcc2db8495b\n9b1fc585-80a2-4612-8649-5ec172c7d75e\n749d4c81-e8d3-4e8c-8b18-cf777221f8dc\n992c1596-4d86-4d90-9b98-ba57c628b8ae\na5c2455c-59e7-44a3-8b5c-b30ba4d907d7\n25c010f5-0667-4aac-a705-2825340cacb2\nfb93b39c-4a81-4166-89de-78ffdd4bf803\nb1a0f730-1347-42c2-abc1-ea3e75d32b22\n57afb4bb-b267-45f2-a1a2-0ec0153fc104\n605a0170-e7cd-4b30-9f92-c9055c2a518c\na0ce1e07-1a88-4362-b518-6c42ea4b0b70\ndc72fcf5-dbaa-423a-ad20-f0f6ce972fca\n13c2502a-2f98-4cf4-8535-b22cfd6580cd\n0788dd51-7f04-4f76-8eec-07187b183613\ne87c4bc9-7c3b-42fa-93b7-f75d2ec56b17\n16d7a2a5-9419-4dc5-bb00-5f39b7c078e4\nc39caba2-57d3-4e19-8b96-30b63032fc6a\na72a216b-8170-4e2d-8b0b-47c9f352838a\n30fd5333-2687-472d-80ab-3b7687bb8caf\n1355d0b5-afdd-4279-a831-b20c0db74076\nabc94cf3-c8cd-4b7e-b40f-68f5df39aed8\na9c695d3-f482-4290-a9ad-2586058dbc24\n3080be08-cc79-4821-a045-a9f5b6168e03\n81d550ef-6403-433d-82b9-c0e7b6eb4e34\n570b2ffb-7e86-4868-b2d6-1682ed170888\n669d3419-f5f2-4293-af6a-6b36ac63f806\n77ebcfa1-1005-4ffa-818e-92b0d0c7c1b6\n9030a3e3-7ec6-48a1-b513-303055edb8b9\n78f2b448-d081-4ac5-81f8-3ad1bb420588\n53aba1d2-d835-4f90-beea-7433fe440f78\nbe002466-a393-439f-a91f-c46df5b7ed7e\n29f356d7-99a5-4e6f-860a-e5f53f7fe871\n15a610e7-5029-4cb1-8495-e158beb9f3e6\nfa08a666-6bbf-4356-92cb-cf72158aea2d\n0e89aca7-9b43-4733-83d2-466c71fec2e5\nc5d0e241-bdbc-4e24-97f1-bc3de22a0606\n646b7bb6-994b-404d-9ef4-be295cd5a259\n5230d184-8333-44b6-b6e7-740009098402\n0ac28f49-8b46-4718-8f8c-e0d780990aa3\na1ca0e07-9b2b-4a43-80ed-bced87d8589f\n5b92e5fa-04fa-4ddc-9adb-70f9b9d6b15e\n41126f66-fc13-4103-8af1-aba1ab4c408f\n75bd49a5-6d40-4859-9d79-c58112d19cc4\nb3c0ec95-5b34-4136-9c3f-35925e9edb4e\nf7927eb9-7245-4d51-acf0-a585e46a2b40\n53f69ab9-435c-46a6-97b7-84a4318e391f\n87863795-f994-493c-a22d-1427d4478d32\n2c5b4b56-e18b-4d5f-8453-b158647efad5\n30f5b06f-10b0-4795-8899-6016ee7a5351\nef880240-c0b8-4738-8b5b-9d94cff2199a\ne27d020d-7d0b-43e7-bca0-24e05fdaf9b3\n82e9cfc7-f888-4b60-830e-0816669e9745\na5462e38-1ae0-4146-9fe3-057d8bc77c9e\n07735248-1254-4f2d-afae-48521b37046d\n27f74264-4030-48e1-8932-e498b69e6510\n76bb6871-f1ba-4143-9833-f857508eb983\n41eea7b0-3073-4294-9a7c-5d71f992b1d4\ne2f21f94-c766-4efb-a912-cc21383b4677\n067878fd-d059-49a6-a912-e3e5b939fbe1\n6f1e58a3-36f6-4da7-8015-3bf597d11657\n76f9ca9f-ba4c-4bdc-bf9e-21be0c84db5d\n5a643dfb-f970-4d06-a1e3-c823039b7d1c\n5162f26d-05f8-47a6-8352-f036e4026713\n2a28be90-182e-4ad8-8e33-dbc826cc4c02\nbff921bc-d39a-495b-b62c-90d2d106ecf9\ne67a2ce4-68c1-4f32-bdd9-aeef76c304d5\nea65ac80-e6c3-476e-95c5-5ea63856e91b\n312a5092-0ad8-4e45-8de1-ea5b2d23783a\nd3918dda-ddb9-438f-8a2b-e4b514cba1f9\nc10794cb-358c-4b8e-85c0-8cc1e36e3fa5\nd38eb7aa-4784-49a3-a759-94f4eb8fb2e9\n43a47f69-d12e-497c-817c-d60b651d283f\nf3191bc7-36ce-45f7-88d0-9893d204f08b\nb29114af-4678-4891-88d8-1452eaf21842\n5b6f9f94-1a72-49e2-8f09-49b1b2fb3c88\nc068b718-9048-4dfa-8f82-85ebd0718637\nb8af1207-5b65-4fc8-8010-322d320af910\nd9c71261-4729-49c6-883f-556b76c4f883\n2720f139-03ad-4061-86d6-de6fd517dc6a\n07ac24de-305a-4d68-8e0d-e90ceacf9f76\ncd81773b-64db-42b4-9bea-08abc8dd719c\n1d1921c7-5e63-40cf-bfae-1c1fb41fe322\n5cf14b17-7276-4a8b-8a06-8abc1cf5ba24\n77ece571-5de4-41de-a4a2-bd9ff78f0a31\n60d69b40-863b-42ca-871e-d9bae7dce098\nd9a6e664-8f55-4946-9cfb-86e973218bb8\n1e8bf2bc-657b-4865-9c6e-5d1412155ef2\n00371054-7502-4492-add3-47af2221db15\n14f6be25-365f-4ef7-8c66-9029e1bb4ce6\ndcb8e345-704f-4405-a799-d4a0c9d5d633\n08ae8539-41b4-4166-baea-61270a35b48f\na98de3fc-f858-44fe-8e67-4507fe2da194\ncc513967-d07c-4e69-98f6-01f3e030abcc\ndb625d5b-245f-4c1e-9101-c48d0cb7239f\nb1188a37-4dad-4576-b492-786fe413cb9f\n209f9e7a-44c6-421c-9111-6c3cc027705c\ne77a861d-07a3-4212-a6a8-7709669fce3f\nf947b5e2-6c20-49bd-8c7d-934eb636f045\n148086a5-84b0-402b-97e5-7ce79cc54ef2\n5ba3a435-a961-4d18-aeeb-21079b389f24\n618e60c9-3ce2-494f-8ff1-1d39359e6a01\nc8076057-bc30-49e6-a317-372ce6509909\n513e6ab0-af6a-4123-9e73-2c753bcf9f64\n82310afd-0ce8-496e-bfef-ee8dab6cb46f\ne59c5934-cba0-4eb1-8c55-016cc9f0bf44\n1385ab8f-7a70-4ae0-a769-056885190adb\n1a472dd1-d480-4611-b755-73b44c0d8cfe\n384bfb45-a31f-4502-a82b-ed99a826436a\neaa6f98e-98b8-47df-ae95-0bbb8d571987\n393d1694-6ed7-4cae-a729-44e44d8aace3\nc03053b0-0346-419a-8fd9-76231745a4ff\n688e766e-5fbf-4d2a-9d78-473f4ba7fdb8\na1567447-9b08-408d-9292-7ab767a1ed35\nbcee7750-20e7-4d4e-9979-9b772540451f\n1010250f-dbbb-4db0-aa12-0dce2a311e89\n5987eaaf-b2a9-4e3e-9e20-04eaca3915f8\n314c09fb-3768-4dd2-8097-5d0525739c8e\n975657ff-fc90-4dd5-a84c-30e9a9e2b2d0\n419a1501-4554-42e8-a6c1-66ee1d3dcca0\ndb635279-32c4-4f98-96be-eeb5d920df52\nb696412e-6716-43a1-9a86-881148b8e8b0\n3215b775-2d12-4358-a5b6-67c81dff5b8a\nb5a452cc-2d6a-45eb-9a62-0f89fd9fb86c\nfa3854d0-c6af-4171-8193-90ccc9aeb726\necb9e264-3f1b-4b98-be2c-eb63b2cec63b\n6002da5f-248f-4d39-9a44-c292df790685\nca3a3b6e-95f3-4642-b1c2-65912baf3af1\n7f065524-2a4d-46c3-928b-a884b23cd49b\n72684b9f-bbd4-4858-9a26-4ac39ac5f582\n2b15642a-920a-42bd-aa70-ddacece46e8f\n01f03877-e74b-4149-9b4e-9668e3862359\n4c75bfba-9240-41f8-88f4-58900a416405\ne9907ec6-c1e7-4da0-9ee4-188c213536a9\nb7021e2b-bea6-466e-bd28-d6f531abd8bc\ne7463b3d-e6e3-47e9-a31e-243f8fc639e4\n1e666d26-729d-464d-aaa7-97eef647f24f\nd3d95a13-79ab-440d-80d0-35b5be075cb3\nb19388a7-1320-4bd2-b44e-6e8a908352ca\nbfba316b-6afe-4b50-acf9-3191fca25bc0\n797b6017-920c-4d31-b3d4-e64b7873fca8\ndc4780ca-6eea-4f3b-b986-f35d5f446922\n0675745b-3965-4e8d-b4f3-d6ed7bacef63\ncbed2247-86a4-40af-a4a2-5e88e7805096\nbef6076c-b79d-40b1-b62c-810b33744012\nbda3211b-d401-49b6-b608-57381f49e848\nb98df3db-d952-4758-8dd1-ddeac4b9b4e2\n3d6b33d5-a08e-4bec-9b8d-b8cae53db8b3\n7eb51be9-8db8-48a4-b562-6f5d7cd8b772\n5d0668e2-eef6-4597-86a1-389d7288357b\nba06625f-cca2-4b7b-9105-2cf3cd043f6b\n51b15469-2854-4d60-a979-e6862f108531\n122db7f9-61a3-4e42-8070-6f7ad7cb08ba\n0fa89909-7a85-4a61-bf6b-ee634190bcce\n647e5286-3b2e-47c3-a855-d3e725ad46e9\nc16dfd3a-19d1-461a-bf1a-191a4059cce2\nf3c5f5bf-baab-451a-97d7-9af137f9e893\n343a59ca-0215-476d-9901-33bd6098b660\naa50c64b-0f04-4b33-90c5-b18341d2825f\n246c636c-0948-4a46-b946-ba138045f10b\nbfa83b4a-c59c-47bf-8dcf-e6ddb7e6b1b8\nec805d3e-99ab-48bb-86b9-7ef7198244eb\n39fd55b4-2c06-4c63-88f9-cf600ffeacd4\nb9f8c78d-4cfc-416c-9e63-122b034f3632\n34842fd0-2dc5-4395-a9ab-a46ffb48e327\nc733a777-5f92-4c53-8799-26bdad613943\nc8aed86f-45fa-4163-8092-cb40db9224a9\n50965c2c-24b8-47cb-a0cc-a469e45baf5d\n72ade7f1-f6e6-41c1-83c9-b39fbe1e7dc3\n3b3db331-3463-478f-a9d2-fc58cbc81d44\n57fb67e5-d877-4c04-8732-34d3e593d8dd\n42d60776-18a4-45ff-806d-a04e8ef1590e\n8f6769c4-799c-4e17-9df2-9d92118c017e\n8fc279ba-335e-4919-9595-89f2cf3a1548\n7ec7fcc5-7446-468f-90ef-de2b8783ab03\nc2fed4ba-ae10-47b3-8411-3fa74b933885\n0874f37c-2058-4a96-9d8d-fff8aa61083b\n6091c785-e6a1-4c77-b515-5dea1f5fa8d1\n364876c2-a611-415f-945f-680343df52a2\n83f72846-6c9d-48ae-ba28-f4ed747e339a\naaa01536-b688-4e23-873e-9f0755df0960\nd569317e-00df-40bb-a552-eba6a852111b\nfc1db267-4c2b-4680-9adb-59c38c5225f6\n670d2383-5f99-44ed-90e3-20744d6a3918\n03e1a0d1-73f5-405f-8c27-181110c400ee\n279dca58-dd25-4406-902b-d0c4e3008540\n00cbe3bd-78e7-4c17-9a7d-4aab839882a3\n1b8d2894-e108-47e3-a905-ef83b3c6e5a8\n60b1662f-67d5-40de-b1c0-63c319bbb49b\nc854b64a-ca03-4010-81a3-ffbf39431ebb\n9da34ee1-ea7d-4d96-b952-767b74e8f852\n39a67a8c-bac8-4268-8183-f66b1047b28e\n8279bfee-7d2f-4c64-a81c-a9157c17713d\nbf527053-c7f6-4190-9de0-296c8c990286\nbb5c2e56-9f53-49e6-97cd-0ef86333adb4\n0d4494c5-aae5-49bf-bcbc-ff6f2f680daa\n0fe9b9b9-7681-4703-a9b4-ae1518c35075\nd9cc9d84-1c3f-41bf-8513-564e13eb6477\neeb40195-a7dc-462e-93c5-f074d9193bef\nf9f009c8-3e17-46cf-9e10-26c66d1fdeb3\n1c0b59ef-7304-407d-ab32-9905d02d3220\n8163b028-6044-4513-99b2-521899eecef7\n3266746b-d229-4c2c-b9ab-80651747c3f3\n46353d61-5acb-4c79-abcc-059cd15a14dc\n95f35f9c-b23a-46e6-8bd8-747d9d6aa221\n6de99667-cc82-493c-bb7c-8313ab5a3dcc\nbde7b9c7-331f-4c46-a337-57addfd01966\n4333eb43-f8a5-4e22-81c7-61f37bd08a53\n4bd52ac2-d7af-4ed5-bade-aeb23eaba5ed\n348b02d5-6a07-4645-a19f-b300595ae6ec\n2870c0e6-a498-4735-a1a9-2c470f68301f\nd1a144b9-6162-44f5-b74e-1e7805a55e7b\n810a4973-a5e5-4304-b064-21bb3322228a\n15f93882-af56-4883-88c3-9441f7237c3b\n33dc12d8-e5dc-4c4e-bd00-f13b46dedf5e\n80b3708f-d0f2-44a1-a9e5-01168b921001\n28bd34a5-ba51-48fe-bb5d-3283fe609bf7\ne3272f39-38e1-4944-a16d-db9cfec2a323\n9fc8a27e-8661-4641-a121-a25df3e6e553\n8d3e6c2e-b530-4215-9750-27ca995dc9a2\ne6970e5f-090f-4627-b321-037f1415b535\n55397d4f-fcaf-400d-b279-ac0eac2cbd81\n7eaff9a2-57ef-40bf-94d6-2c4012d0cd18\n2637bf2e-03f2-4547-84e6-46ae5615d193\nd2fc19f9-6918-4d0b-b877-b4e8a256a6f6\na60a9a5a-f801-4798-90f7-807f5b690455\nf2b1dfd7-94dd-41f6-981f-8ae9845fb627\n41e94a8d-2634-4c3a-935f-e1877bf5244a\n552501f4-d0a8-46a8-ab1b-f79f4b364cb1\n4e41800a-019b-4eed-9417-3354419a9317\n4b1b0c3d-3b33-4aa1-9869-520499e65b37\nb1b23858-c5fd-489c-bdf5-4f3cf6443d25\n9cb1ba88-533f-4133-914d-abcb81764fc1\nfa629dba-7426-46d1-8c96-6fd3c6591d3e\n6fc67034-9c88-48f7-865f-582ba4b36b36\n06cd30f9-1f73-40b1-b76c-b11cdb3f2c84\n6c1b5bdc-f7cf-4e8b-afae-b55b2d19a52d\n0e10c86f-6f31-4320-bf3b-86cc33f00316\nc8d21a4c-09fe-408a-8912-ab75436947c1\n769721eb-67f2-44db-9177-87b6f90cd1b3\n1241f376-d8c3-464d-b2b6-d7a4909f36e4\n56cc9013-d546-439b-952c-5f51117bde83\n0b31be09-f22f-4a5d-92a1-82101ebadcfc\nf55fda63-c787-4b22-80e8-f8ddf07cb39d\n5a62a98f-6f07-41e1-8bb6-c0936567b04d\n1e458534-9183-4464-bd95-dfa5f47b6927\n9850a0cb-0141-4525-8199-ed028800c2b3\n08904e42-e8c5-427d-8096-c4d9c2b6dc0f\nb1c07e81-e38e-45e8-bbd1-344d88ff366c\n150f6319-a39f-4fcb-841b-2b4451ff1faa\n43551353-110a-4863-a465-3d0a2ebfdc1b\n45fb4030-228f-43b0-85ce-e3558ec57f00\n7a8d1a46-629b-4a9d-b3b1-d976e9140bf1\n7847991f-1a2f-47eb-ad11-900102af49e7\nf4fb70d2-b489-421c-8aa0-76e914162191\na879bce7-f280-4bf6-a3ef-87cebc2a6c74\n791de446-a1e0-4b62-9c70-dda503c4f75e\nd1137681-63da-4cda-be99-1640ec00ae49\nf3f38b9c-a176-483f-a65c-10e296376b6d\n6298ad09-20a0-4f72-bd25-b9f1533dfd34\n86727bb6-740a-4b90-b7a0-c736b084f14a\n020c781b-7818-4e47-9b32-dd4f1f8f19b0\n822d33ce-693c-4151-921a-16cc2cdf8c45\nc0ae3913-f756-4af9-8f0f-1b33075ed6ee\n23c04be4-16b8-45e5-9412-4986f9d5f3c4\nf4e3edca-f2af-4c7f-8554-8d6ba398b1a7\n78750a05-2022-44b7-98f4-efa092288fed\nedf3cf67-33e3-4e3a-8f18-45ec5f3166f7\na0e2ddb5-6573-441b-bcdb-e75f6b04fb75\nf9c2d75b-813a-47c6-a18c-11d26b5a9528\nfd58dcca-d5fc-4dfd-85dc-f201b464009e\ncfb610df-a3e3-4385-89da-11ed967da663\n01bb81e9-529b-4f80-b501-49fbc676764d\n213482d8-eacf-4b55-a232-0ae80410144a\nd52121b7-7fef-4cd8-9a5c-b64a302dbee9\nc85f810f-2005-4715-aabe-8a5e2554c926\nb2de940a-9c87-4736-9ce4-b19d2d72dca5\n14513d8f-1070-4939-9848-eb7f0413eedf\naa6e79e0-fe34-4025-b26b-a388229de8be\n778a12a7-0fd8-47fb-b31a-226e44f2cbcc\n3daf66e3-b061-40ca-b003-12294fdb6159\n5ad224d5-a957-43f8-970f-6b53a73f625f\n742f5419-e406-49d6-93dd-c3fa6f08a88f\n90d4beb9-3e7b-4185-93a5-71510ad03b5d\nd25c58b9-32b6-4b4c-b43e-84cc4107d7f5\n64f1d67b-cb11-418f-8cb0-3a1ad762370e\ndefc9ca9-6527-4ba2-a782-06da6f3f4078\nea67bdfa-add2-466c-8ee1-1010ab3add0a\nfca266d1-d809-432f-a725-218cc3d42c71\nfdb06d1d-ac14-49bd-ac00-7d7e80589186\n82c4da1e-c6bc-478f-aa11-e730bff53501\n83416e43-11cc-48de-9b27-402a79eccac4\na1c52d31-0560-4ff7-9cba-d3f4085b3037\ne055df79-8cca-4757-8a84-2ed6c0428b55\n49141d7f-1bd2-4aa0-ad2b-65be62106a90\nb341e059-d59b-42d9-aef6-bd7e2943b88e\n56e2fea4-cd9d-44dc-b4a1-ca90486dccaf\n83d035f6-f755-4356-8a8e-17b2823fc502\n2113de62-5be3-4517-9107-10007b900767\n37940b29-74cb-4878-8479-d31d1a2f49c2\ncb396132-4cc8-46dd-9203-5028c981917c\ne12c3e33-9368-4db1-95d8-daa4d9fa2ffa\n37d43eac-a9a1-407f-8a5d-46301d1cd192\n9bc35792-ad52-428c-8b00-e4547bab8522\n161c40f8-e24d-4767-9ada-99bce7ad00fa\n5557829f-1876-46b9-aac5-3dad86e15eda\n2558821b-f8c6-416e-9570-1a39cf09cb41\naf12e7ff-64b5-48fd-8996-a1b0fc727168\n1a7e3934-595f-4649-861d-f68d79121311\n275025ff-bea0-4114-881c-51354cdf2e20\nffceb6b4-8379-4a10-8de4-70a88b05dcf2\na0b1937e-0a19-4cd1-8247-35db3e2b0762\n3a3fb95c-9e94-4499-a45b-1e8304c23a2e\na0df8e13-cf9c-418f-afd6-03ba0c0e3f0d\nf47a4cb0-9150-4dba-af5f-e5ddad406b59\nae042c92-89a6-4f54-bfda-ac9903d09cba\n669b34bb-c48f-4baf-b159-cf4f04b0f274\n3b8679c6-94b6-42f2-ade2-468bdd04b779\nb8d8a7f1-b4c0-4401-86de-91bd6846b4c5\n76b7897b-276d-46c0-b6e4-61f2ebfdc5c1\n0fd8bf6a-5d3b-4134-9769-cefefdf8329e\n9f7409c4-e6e6-42f9-a09b-a6eb81eb3981\nf792e470-9db8-4367-8872-6d1b2ebc382e\nef0a5fd6-8f6d-441d-9966-0485b38e25f0\n383d50cf-65bf-4659-ad97-5c431f9b1c3e\nf960f55a-b619-4984-ae07-2a7b89bb9ef2\n1a6ee21c-0853-450b-bfb3-ffd6a598c2db\ncc312dcf-7078-41d2-b324-866b14cbbe4d\nb6f37337-d4d8-4b40-839a-335d29cbb16d\nccb080d6-0a85-4ca6-8250-7f1884ec983e\n70fa7087-173a-4330-b4b9-c420e98139ce\n7a52d41e-9a87-4a50-b08f-f27a159ffd66\n989a6f8b-d0ae-4184-99ce-7b1d2b018a28\n17ff70e1-de2b-4d3e-a1b1-ad7b50d3a2c7\n6947a491-a6dd-4a9f-8cf6-b1a7a0f20d8c\n04ae731a-5414-43af-95b5-3335dc0b1131\nf68c815a-69d4-4851-af58-e6b545602723\nf4a72c05-3e1c-4466-bb4f-f6a137c01bd8\nbdfc0e6e-e8ab-48e5-af78-d20b5b201081\n253beec4-329c-4e2e-955c-5db783744f9d\n3b069b2a-c88f-4fe5-9b71-a043af614c67\n0f626ae7-8dfc-4e4b-b938-72015fa3ed56\nf1fcb42f-fa50-4080-8464-ac0d8fe90d7e\n67a5ebea-b1ad-49b6-8000-366d1f035e70\nf7685318-e400-44fa-8554-a495fe5c125e\nb4ff380e-62fe-43f3-94d5-b4d115972eae\n8e82e636-c139-434f-932c-1f476d4661d1\n4641755d-cc11-4950-9d9c-0c04447dbe8e\nde63a34d-1f9a-4a47-8e42-7b57215fdeb4\n77cad7ae-5381-4708-8b57-b222c1ecc628\n66028817-18aa-419b-9c91-64628335c500\n478b341d-565e-429e-aa6c-6fb16d0e89d0\na4b96cac-b648-4e15-ab1d-48e33f084d80\nf7e78c24-5a56-4187-98f8-072bd9dd8e0a\nbd1233a2-925a-409c-becc-e997b3cfb237\n977ceb5b-b4dc-4036-a5d3-31275c6f4435\n53098327-5fff-4c0f-9835-87b5881d2b85\nd48d1cb6-d46d-469a-a789-07c4ba996551\n8ee05432-fb2a-4419-9293-57685a251ccc\n4b8a764e-7bf7-432a-8221-641cf8c2624d\n181c13d5-b809-4248-a926-e6536ee570c2\nacbb76b2-ef4a-4e65-ac86-7943f23f7d13\nf0631ecf-c1ce-43bb-a407-913646f5e223\nee7badda-cc48-4273-8310-9eb3c7e1fa70\naf184340-2684-46a9-8fb1-0f5b5e939bcb\n663e288e-2a57-46be-9e53-5a7456c3199e\ne10b47c6-cffa-46c7-9b8f-365ac122bf65\n8af4844b-8750-45a3-87b0-a1a8ce3afc9a\n4d0d552c-fbc8-418b-8d46-6a9eac028801\n6860d61e-4a8c-4d5a-b2b0-d6d43205260d\ne5f1bf7e-578a-4aa5-be8a-dd2467bd45e5\n48f492c4-5f4b-476c-8585-d4adca3c08df\nf3b15ea0-3d79-4168-a9d7-004f824ac76a\n167c1960-d07a-4422-931b-001f9901cf38\na08dc7b0-abc1-4381-b6b3-d36e52d8815d\n00e42b5a-8330-4c1d-b5e6-9d8addb18408\nd100c55f-bff9-4d12-8fb3-5120a3566f73\n520fa664-30aa-4e7e-acac-c2dec29151bc\n3b18b93a-ea22-4a70-9e17-79ba78b4c308\ne0a521b2-a753-45af-8504-74f829b3e933\nb00d91be-9299-4f98-9968-20737fa62e50\n5a652ec4-8f5e-4b37-b704-6349f1b7b2db\nfb37c91d-8a4e-4abe-93c7-e5a4a4ea1394\nf1410cda-babd-4b1c-b7eb-037511eb3f3c\n1001ff11-bd33-4219-a433-72e237cf6b2c\n22cb33be-d26a-4dc1-a80b-5ece868e8e58\n389ae757-c70f-4b3f-871f-b97f33fe5f5b\nf0282a62-c062-41a8-93b9-3c6eef56e0f5\n47e25614-482a-4b68-8f86-55490b2f0223\n01a5e2e6-2245-49d0-9ddd-98d58989d2ba\n3f10b658-ca15-4bd9-9693-0ad26e95c6ff\n9f847835-b6bd-41b9-9b5e-007046ed4252\n185f7bdc-a462-4ef4-b1c0-389111450d8c\n99ebf56b-7998-45e4-af7c-9ffaa4c49fb2\nd2940c98-c002-45fe-8db5-d8010b153887\ne2a97c8c-dcf5-4727-b407-26a31089a7ba\n6bd05e24-f69b-4855-b6e3-363bb4406683\n38b93a57-6b9d-414d-ad26-4e0fed253f24\n0b4e2f29-6db7-41b0-a64f-2265f39a0432\n6fcd5220-3078-46e6-80a5-3339b78199dc\n60f8afcf-ab56-448d-b386-ca760e16354e\n906ac4fc-d07e-440d-970a-09e2b919610c\n4b22ed62-0e34-4b7e-8db9-bfac4cb5bd8f\na492935c-b885-49f7-88f7-215a2fa32154\n12ac198e-33e0-4d7c-ba22-ef9c4a27efcd\n7eaf4b49-5307-46aa-8b1c-de97f24b8fe6\nc7d7a5d8-c42f-4828-bc71-ea23baadd5c1\n62779f9a-53bd-4b99-a6a2-132b5ddc4342\na342afa3-bead-4d0d-8c47-14fdaf65a0a4\nc4b43c9c-72cd-451c-945e-ec0c1b87b72d\n1c1a41c2-4534-4f26-b245-0ff096296112\n870b07cb-8d9b-4209-bb57-98ddc9ccc69a\n8313d94e-08ef-4e73-86a3-fc22cc24f3c0\n0edff8b7-ebdb-4d44-a3eb-677aeb8501b7\n99cf603f-7e74-4a4c-afb3-ad0823562d4e\n47c0274c-97b8-4cd2-b685-ccdbc959d902\nb0904876-29ab-414f-a0bd-31de8854693a\nf73166a2-1d92-490d-8211-6b08e42aa6ea\n7f370c99-26c0-4807-abff-3dce0ba8918d\n2a5618f5-beb3-4b0d-a2d1-b48a8dd74bd4\naf891425-ef1b-478f-9bb5-6392af493d81\n7c312273-9b59-4b97-9be2-55a490a404a3\ne6b4d462-622f-4274-abe9-e6a8ff0d03b6\n34659320-a722-4a56-9377-733b897e4f07\nb05f6071-add1-445a-afb6-5406dab650b4\n2af116e5-260a-4323-a495-d537a1c547d6\n9309a1e9-0f51-41e3-bfaf-5ef82b887f69\n886b02ed-81ed-4d26-ad47-d5592da6be41\n0671486a-247a-46be-b1bc-848d3090b78c\ne3fb37b1-bf8f-44fe-bd5e-e5893a72865b\na3c1fcf1-dda2-4260-ba75-cae577cd60d0\n8efc738e-557f-403e-86f0-1aa50fe3ac14\n878a30e4-d39b-4fc9-970b-2eb4848854ca\n65e8d3b5-18bb-4a4c-933f-602ef4d42fae\na9190a85-12e7-41f9-886a-ce35afaa4f2f\n53c79ac7-1355-4852-b0dc-c2b34ee1fad4\n4b8086ed-8405-4a43-921f-aed744575f65\n09462957-68d7-4c4d-9875-a82b97037c65\nf1cf97f2-f14b-4e25-9ea6-9fe4ae9a1e8a\nfcca4d3d-c0e2-4b66-8ad4-a525df8fcea0\nd296bf7d-aeec-4d8c-bfbb-981dba9b0160\n5996cf48-8102-4e29-a195-30a73bc314ed\n8c84764f-0d95-4005-b48f-f6a98f0716f1\n1dd6653d-25f9-46b6-8fb0-f7518fc462b4\n58d7d745-a409-4a2d-811a-9e319cafdadc\nf3638966-d356-450a-b859-50f5f2a95082\n65b9ec9a-2772-4e6c-beff-845fcf20d4cb\nc2d5f0f6-1eff-4b8b-87a8-d3a45bc0aa66\n479edda7-535f-4168-b365-12d231a3fb96\n105e9aa9-6311-45d7-a398-362ad61aeee3\nce086242-9e02-4b34-a477-2cb43e21976f\n65d151d9-383c-4b03-b16a-d224450843c4\nfb7dbb88-6849-4ebe-a242-e0bb2211186c\nb8c1fc32-1699-455c-9fdf-38a23bd1c17e\ne7e36186-fdbf-4927-b92a-028cdcdcf86f\n22908ad4-1389-48a7-aae0-d4b9df0fcca9\n1b7bb4be-cedc-493e-af6b-617ffe1aa0e7\n5914a3e5-5a5c-4241-9614-3013fa895282\ned9af92a-44de-4f3b-b91b-5d8cdf6286fb\n66ce2628-94d2-4d78-b16f-e3a39109d0e4\ndc9174d8-d9a4-4ad5-a57b-59b231ad06a6\n2e0a0625-38dc-4c54-9ed7-bd8c87797516\n1e70350f-3642-46d1-830a-a781744714fd\ne5f08428-fb77-4ec7-95a8-695eeab71612\n4937ac00-6fb0-417e-8883-e9f51ae24712\n6be88a57-d678-443a-b2d8-9fe7b13d6936\nd73ca53f-7319-4496-8694-a8201a911df5\n3fb8528b-a13b-4abf-ae14-c364f2cad8b9\n93d77092-d460-493f-81ba-2a86ed50c4ec\nd7604d1e-520e-4af7-a5eb-c06af920243c\n6ed9b6d5-6469-443d-9af0-5c263c5b2dff\n15cd6dca-be06-4d9c-a54d-1262d2de00d6\n0ea48fd9-3b8d-422c-8232-a1a9aa66244a\n1d324bfd-21ae-4ffe-9d96-7648cc1076b5\n61e821fe-5511-4f5b-a14e-f170e00426eb\n9212b44f-8a4d-435d-a2d0-1a1435e597cd\neec87801-7ca5-464f-a370-acdf4b8cf2bd\nf09edf8f-b468-4bcd-87ab-21f751c0fd70\na547d57d-a3e5-4eab-a9a1-dc65b1696c5b\nf613477d-718f-41ec-862d-738e87278189\n5be110fc-c8d6-4b91-bc6c-65bc73b94a4b\n9fb12796-b8ab-4dcd-aba7-d26727777632\n2a624ce9-f62f-4b3d-bf46-ed380dc77206\n2b1de4a7-9846-4616-a642-b04117ce6998\n5e0e5922-6233-4893-aca9-a4293876d4dd\n7a595f22-f336-476f-847d-9e4f28cf5e43\n63c6424b-8bfd-4f24-a7b9-faa7be16b795\nf78cbdd1-2863-4e38-bd3a-04ced7d7a1b1\n97c7ff46-d1bd-4e5b-9662-95f5be848f0c\nc2791bf3-63bb-484e-8856-948ce36e3781\n20e1f93c-ae62-4516-8277-fd873ff90e5d\n53caeb58-07b0-45db-8c21-5abff6964b1a\n0a061afe-08cd-4606-afde-8e2e1d9cd2c3\nff669ed8-afb1-4b1b-a271-e9e0447daaec\n50a098ad-5d4a-4edd-a0ad-708416cbdcae\n7391c995-fe37-47f5-a5e4-abafdbd6154a\n529a8715-40fb-4980-83f6-2b3c671fb853\n987d2b04-1992-4563-8aec-5a5a74e24559\n2928d8d9-f371-4169-99a2-5fdb73e087f2\n836f0c04-e364-4d4b-ba77-dd850fd6791d\n8db68d18-1da9-4c49-a277-52194abac2fb\nad1c02e5-fe2f-4383-9aa2-ee6a480a49e4\n735280d7-40e0-4ca3-9884-f0ff9466cb3b\ne25ff187-bef6-4366-9b94-cc129301aac3\n3a78d21c-ef04-4218-8dd5-76cb22e374ea\n8507e66d-f28d-47c5-8911-d970c78258f5\ndbf9e303-d8a3-44c2-9e1a-55c7adca66b8\n52b76ebf-b023-4d3c-935e-f67cf15ecaa4\n02a0117b-1fa3-491c-92bd-24dd8f760e64\n59fb8318-c49c-49b1-81af-889fd00d6b66\n5ccb4537-d91e-444d-937d-17ec47d060ef\n763090e3-b8bb-4ad3-87f8-7eebfe907ea4\n7bb13583-15e2-473a-af36-fad569b389a3\nf0a813a7-5ab8-4ce0-acfa-54ea96f42a29\nacd6283e-3b48-462c-be7f-c351b8f2d0ef\n013bc1f6-a652-4796-af27-7b0e5c9b160c\n5a3359c4-0bfa-4566-9bcd-3f65fbe5f91e\n32d50350-72ed-4cbc-9465-b2e9a4f0a577\nc4014425-d54b-45e3-8085-bc58a00ef9ee\nac9ccc58-507e-4dd7-85f9-4734a0c125b4\nf96fe2cf-2abd-485c-8f3d-d9fb1b560cb7\n26c9b675-ff68-4a17-bb9b-f7428cd9dac5\nbfc6fcdb-1240-4453-a067-957cd022280d\n7a880cf1-f4f1-4614-815e-e132b6ae88ad\nff1825a8-a363-4536-8456-0e0e18f99f05\n51e51008-d222-4ce6-8eb6-9595729b8119\n475ef8f1-6705-45f9-824a-4acf5af063ac\nfc5a4566-209f-4247-8d32-cd2b0b81a76e\n7ffe5b35-8617-4791-9ffc-0f99eebfe21b\n9a934267-cf5c-4b6b-bb0c-5a31755c9015\n9eb7cfc9-ccd3-46e1-a167-1d97b7ce8c08\nf8a0eb34-31fd-429a-87f4-c6adc0d6c239\n962a06d7-517b-4c1a-badc-16b518a67780\nb1024afb-71b4-473f-8236-1bda8488872c\n86f2c7e0-6cb2-4bc6-93f6-db4c69e6e436\nfd0a105a-4e0f-4ef3-ab7d-712bfb2867bd\n41c94326-70a3-4a48-86ef-ace76c105228\nefa2cf95-543b-43f0-adc7-48f3302f3ccf\n4d43828c-ab9b-4043-898e-c4fde9cd1095\n50bbf70f-fa33-4b80-8419-171d3b61bba3\n5a2b0859-9b78-4662-9ce7-f9bd125c9be4\naa44f831-5dc5-434d-8305-369f9322cdae\ncfa3bf66-b9f8-41b4-8e5b-24828ddc29cd\n1a32bc6c-e20c-4209-9bfa-cb61f7098ecb\nae9b88aa-326b-4afa-8c70-fc195161189f\n73e065d7-4da9-43ce-90e0-589ebe584b43\nc8b7b20a-887e-42f4-9dec-141bb9952310\n292bd082-86c1-4ab6-9f0f-adea5b09ac43\n52c5c660-28a9-46e9-9760-ef2ceec76e05\n15db7a76-37fd-4578-ba97-ce69bdc0e13b\n7116fd9c-3041-4bfc-8966-459e5027868a\n8eb00434-313a-4018-9436-1ebae0878218\n5ef652f3-04fe-496a-9639-48da3280f121\nd345e0a1-12e8-4962-864d-9526b9085637\nd47890ee-bf37-494e-bc5a-b23336f9b5ca\n6d672e65-7779-4e56-8ac3-04e461bb5330\n56ba4340-6ddd-49ae-a554-08f413bc25f7\n4c8b32ec-4453-47ae-b144-05039b6f8c86\n49e6cb77-db71-4418-8fcd-9ae16d957f78\n4afc48cb-198c-40bb-b399-8035fc0ec611\n0669d7ad-87a5-4ec6-a990-b93f96dd92f0\n4511e381-fb09-4c15-b07f-f60888a66cfd\nd2ec1433-79ff-44d8-b01c-c3792540d132\ne1742abf-b659-4f8c-be0c-943b0f022c78\n59d5005a-6273-4b6a-8fa1-e8bbecbcaab2\n70db3676-857c-4295-9ff9-89a26159f81c\n35e9ebca-16ea-4540-a037-20b7875e1077\n9b483b4c-36f3-484b-94f3-80bb63564a1d\n039544e9-d39a-4091-875d-c883ac1d0eae\n4ac97e70-69bc-4e36-be1a-2da8a6617281\na3034797-3f09-4791-8faf-26203d7c4650\n2c3ae5e8-c10a-45b3-b64d-b4d63b5769c9\nff52ae77-f2ba-4841-8f44-0593caaf5851\n4a387f79-2744-4e6f-82d1-5c6b77502e0d\n1083d9ec-84af-4532-8fef-af0c6899de8e\ne49c1360-d379-4003-88c8-cc3dc7a11257\ne592ece0-b49d-4456-ac5b-dd20744a8d22\ncec2d8e4-2dc9-4c87-a0ee-450b2306cae7\n18a3ef14-3c0a-4835-ad2a-18d8fd5f9461\n8a9294e1-af7b-4fb0-b6be-16611489c0aa\n4a6d48cb-8ce8-4b92-8c0d-e0169e90a021\n89465ddf-3f79-4e4e-8453-efe64bf85e68\n99d399b1-8ca8-4962-b038-034ef615561f\nc5283a4a-1ad2-4457-bf6d-d0ab03f49a1b\n8733f8d6-d4c9-4b61-9a36-3f8895fc9590\nf0bdf916-abf0-4eac-ad7d-c4dbe9ecd461\n2601313e-787b-44fb-835e-8db3f89ba43b\n827c1df3-79ae-4acf-aca7-6fca5074f47b\n2376644f-1b98-4865-9e28-acbece53f454\na9267d8c-720d-46d3-8a59-4c33ebacab5c\n95de8695-c29c-4549-b868-f8d89aa630b4\nb8c5e53e-f6f4-43ec-a3e0-ee4442a18530\n62912a81-6285-4e96-9983-b1f089ab9606\nd7d951b8-c68a-4638-b7ab-7216bfdc8872\n1ea7b494-1c9a-4661-8dcb-75b6705f6485\nf0af4eaf-6014-40da-8d85-9effbc33dc8f\nd9385963-b02d-4179-9c6b-5b1122dda9fb\nd57566f9-b8bf-4b7f-822c-192b0aaccd7f\n414be1ac-87ee-4308-a0d6-5dcfce95897f\n178c19a5-3fc1-4767-bdcc-ad9114079a6e\n1c2363fc-b25d-482d-812b-b381856ab810\n9c3fe1c2-0981-4098-be45-c99668376504\n78bf8364-3bef-4a22-b8dc-bf33f7eb6834\n247e8c62-5ff0-4443-9ac1-c28046f242b3\nf99dd025-ab05-4f7e-9f0d-dfabd5490bd4\n256d0392-dafe-41ee-86a3-4a89d328e90f\n0b06c675-ad22-4dc1-86a8-15ff40575fdb\n1790e8f2-e1be-403e-9a1e-5e561372f5fa\n0964b365-efcf-4cef-93e7-91fbe9f691a9\ncc535b08-4c2e-429d-be88-b934936e9629\nb28bddd0-6713-4912-a9f1-61cca30ee663\n981d941b-df87-42bd-959e-881b4541ce70\ne7eea2fe-7abf-4a05-919c-eee8afa7d313\n66922d36-7d19-4cc3-b98f-693baef4edac\nda89c1a8-25d1-4344-9de0-1f26b0ad5763\n957f8b82-1581-4947-b1e6-542a90061966\ne64e8b16-5f43-4e39-933a-4604bc0921dc\n6d3252b7-2beb-4236-ac43-f90970d02838\nf716040d-244b-43b8-9889-3c8cd0470023\n571fea52-a485-413a-a71a-53d049c35707\nff722608-0f2a-42e8-a20e-3ce45fb95a00\n3a442afc-d9d4-4820-9eb5-a61e0665c388\n59c86fc0-98a9-4484-9a87-eaaeeca12052\ncb4da681-24dd-4cb5-83a9-ff4d505cece9\nadc96b3e-ac3a-4120-872d-24820e71cadd\n3c73f5b3-6ad1-4f9d-8d9b-481d1e3be165\n28ce30d2-c6a5-48de-969e-6b93cc2e01ca\n59134b62-64e4-49db-9c55-da9fd4ac6d57\n3ec985fb-da57-4250-ab74-49f57002409b\ncf2678c3-85e3-4b86-a176-a0ae477171fe\n927bebcc-b7a8-4aab-9166-32930ca5158d\na1ff1504-7029-4276-81db-e0cef47adc9c\n437d98c0-ac75-499e-ab3a-df47f92ae9f0\nb87cb275-7eb3-4cdb-871d-233fae02d17d\n7255b08c-a733-4c7f-843b-11c322c73d10\n13c76f47-856a-4ae6-a794-20614b6f2a22\nd40af1d5-9824-4d70-9013-068c687236a5\n4ce655b8-1799-44c0-9f16-f789d24f9384\nc737ecd9-ea9d-4c84-b9b6-b4f03e882023\ncddcbcdb-0b79-4c03-a56c-bc99ac0573ed\nfe57a954-aa33-4b5b-ada7-36f94c6bfa91\n5405f1ba-bfe2-4d04-a092-981bb5593c5e\nbbb8f477-8d0b-45cc-b263-d30db9705dd7\ne2fe9f07-2244-4622-adc4-39d65cbe306c\n7c9fd292-38b8-4b3e-9380-7dba0f80824d\nd63287c8-96fe-4cc2-b93d-d2618273e4e9\n9e558dd6-5763-4252-b66c-f517928a453e\n9147cd9d-914f-4e9d-a3a0-93a135be4c04\n460c6c86-ecd9-4bb9-a04f-3bc748a037a5\n2c33b8e7-a6d1-4fb4-a2ca-adcdb472f9d8\na54a74ae-e647-438b-9bc1-7c75148d28a2\ncbed7f4d-95d4-4d02-b5b6-a662fa21c05b\n2f96ed15-a46a-459b-bacc-ef221efe00a2\ne116e5e6-2ef4-49b9-91cf-931cafac428d\n7da0a8aa-c746-40f3-96f1-b958c758c022\na819ab34-edb3-4f8a-bc17-0f7ccf71ce4d\n25916579-cc69-4dbe-bbfa-ec04f2dc0435\ne7661eda-2d2f-4264-961d-e1bc57c8b3f5\n9599f666-98f6-44c0-85f1-2a82d49f4515\n8ea05d06-150c-495c-8506-78fa6476b809\nbaf58822-cf93-4a9d-8eb1-087b0a8231f2\n90e93c59-b92f-4839-87f3-a52f0ddce4e6\n76340a2d-a45c-47b0-8883-5e7d05fd8ded\n8ff27c33-9764-4a51-a3b9-51b73549f70a\nebd3f6c4-e452-48d7-81e0-d4e8dafc0f18\n9f144d15-b372-4a6b-bde4-15083c62904e\n2ef53814-50ce-4f71-847f-33a9a9217a8c\n0d28b620-7a51-457c-97a8-debd42bc7138\n5b90dda6-4e3f-447e-84cf-02ac50c56e10\nb8e62608-b5a1-43de-8673-e58fbf7723d6\n1cd0c150-05aa-410f-aafa-96ae1d15da98\nd24daf87-569b-414b-9f16-4c01ef5512d5\ne90db147-bd20-426d-8db9-fc2230d9293d\nabaf7cea-d8e4-42bd-bec2-f42121175535\na660a9b8-c136-4dcf-8680-622d4b1be290\n2fe73f5a-8cfc-42f6-b57e-3f97521f31c8\nf3d388f9-3a49-41d9-816b-d9a0c6911fb3\n9e0026a2-dded-4aa0-ab28-7771ca5c80a7\n720bf3d3-19db-4d1d-8c43-682e034680ca\ncfbbc207-45fa-479b-8961-284e87586887\n4784e8da-b9bb-4853-8898-91cc845755e1\nae8455d6-fcd0-4644-b46f-26072a45c2bd\n08ac6a25-1ec6-4527-8e11-35fca7d936cc\n81a97dcc-f9a6-435b-9bc7-f3649273814d\nd3f13dc8-6889-4ef9-b95f-72079e5a8ffa\neb6e2b42-f623-4c12-a967-79a52508f25d\nf18f7050-1e38-4dd3-b731-23ffdc96f1cf\na72ad9f6-75b4-4467-8534-f442695a7f91\n08fe2e9f-c58c-4081-b92c-17689dd015ed\n1edce610-bd1c-47ed-b719-536d66e65be5\n75e7268c-2ff3-4b26-bbef-bf01c7730960\n4607da43-3919-49ee-a260-a6bc680a9cb1\n4c106fe2-b764-438c-997d-f5a6d14f0477\n24cf0930-729d-476e-b224-6ed2fddd01b1\n7de0d0ee-5f6c-4497-b8d7-d2299ffaed08\n1b53aa39-da4e-4b28-ba2d-17d798b24cc6\ne5d62faa-7c7f-4f5d-9513-e0767739365d\ncf182f8e-4974-44c8-9489-66d7f0b884d0\na13d40cb-1bab-4623-863a-989ae2695153\n97a14dac-1d69-451c-ba18-ed8b635b0a7c\na2c7b1c1-f773-4f32-bce2-41a11236518d\n1efb01a0-14e7-477d-a66a-818440feb9e4\n269cf6a2-e2ba-46e5-aef4-eda66e0a3f88\nb943cf1c-1d95-4ae7-b7dd-b8124457ced1\na3174a71-9a97-4227-a1ce-85c11724cbe5\n577432c8-ecc8-4d64-9bc5-71187550da6e\nd9695f7e-5b2e-444a-9ca2-be54fda1d0c1\nd77845f8-1061-4037-b350-a894e1c09b7c\nc2c1407b-6901-4a01-9582-1049b2af7b9f\n8038e7a3-1024-4a6e-92f5-b83818c7f855\ne051cc0c-8bee-46ff-bfd5-86213374e586\n88d8cc28-8058-44fe-89af-4e1b10a0de39\ncb5c5dde-68e9-44bd-9b1a-b06d33e6628e\n28d2cdf0-9884-44b8-bb12-d55936f9b9d3\ncd3b9f1a-39fa-4849-b2d8-4496d9e49457\naae1449e-7c19-47ed-ae9a-89a33e15dd4b\n4865cc33-6e1e-47e2-92ee-a68b079ee002\nfcb34a5e-e759-4006-8314-139cb9510c24\nd82e90cd-6d39-4d6c-81ad-f2853df66103\n7264d6a5-37bf-4558-b96a-56438d469893\n9b6f34c9-6a65-4f7d-8a7a-3b483ed3a511\n74a9e3c6-7f7c-4c2e-b1de-55ed20bdcb7c\n8ed321bf-64d5-4b40-8d6c-93b5a4df8a96\n7ca8a334-22e6-4fe0-b34b-6f70503a61a1\n0521a2f4-b9d0-4fe0-a685-0a370c812a02\nc2b5eab1-02e7-4511-aa87-32b748e6598d\n55b4208a-6dd3-4d1e-8343-4c391a3673d9\n50bb0f0f-c264-4a32-b160-064ec0589b62\n7ba7b169-db11-4ec2-82f0-6d16b9b7389d\nd795d5c9-ae82-4e7a-950b-b8248404c524\n2e8e5b0b-1a45-4fea-8fa2-bc933e85c7d8\n9ae3bd9f-acbc-43be-a65a-66aaa9134014\n53bb357e-a7b1-41a3-a6e3-176cb2c69802\nb7fb2fe1-dec8-43c6-a020-5b7a27c47293\n13076b8d-a57e-4f6f-b38c-7e0ec12430be\n5f0e1850-ca9f-4a31-bd83-b6c3be843031\nc78ef1f9-be90-4d8d-8f05-32957bae1f28\ne710c665-9a7a-4d72-b869-6af8c34c4c98\n82809a75-09d7-42a4-872e-d73ef4966c15\nb3879a60-812f-48cb-ab69-909063d57df4\n5d9d3adb-6ffc-4ad1-98c6-0aeca7908eb4\ne73f861d-b40b-414c-9ec3-23ed1c73daee\n35271716-33eb-4142-ab94-b058776de0a0\nb0d2d4c3-fc86-4259-a958-59068d80bb1c\n55371ef8-d30c-4d73-b2fa-9d882e7f11ff\n37d6d3c1-e979-4297-9f91-e5db4a435aab\n4aed4630-c8a5-459c-b76e-2fdf65f1c4ff\n64e35c69-9cdc-4631-9959-9137917bede1\n18f7f401-50d1-4fe4-90d3-7a032258b5c2\n92df84cd-bb90-4543-82bf-203bd29deaa0\nc0dcc4ca-111a-4c7a-8bcb-35f8adafa07a\nbab0d59c-76ac-412a-8f57-d019de4c0ccd\nee65e437-d8aa-4360-a624-f3e450849cc0\nd975cb69-28cc-4b3e-b530-a5e193fe0008\n35ff39b0-3b62-400f-bc1c-e2931a6ddd46\n86c7c00b-be2d-4a03-a80a-812354c78815\n38270e6f-ad0c-4be1-95c9-3f829c4a9388\n006cb572-3f7a-4a73-8d2b-ea4019ea4822\n532b5b45-7a88-4858-91b1-c453668da2ae\n7c2bc9f2-c92f-4cda-aeed-135f6daf2118\nd6733bac-e048-461e-bcbb-350036f53714\n050a6f03-930a-4a43-bee3-88cb307aee7a\nd3840c4c-6de4-4fce-aec0-5cb79341ae96\nfd3ce2ec-1f22-4732-b382-90d9886a90b2\ncb9eb05d-5e6e-4646-8f58-0f7cb9618930\n1f594ecd-f8bb-4281-9798-8365f71bec50\n3609e4fe-e9e4-419b-836e-d357adc8cd2b\n3907b229-86ce-4915-9e88-b74828962086\n8b094434-6abe-40d3-a4a3-f240c8972483\n4e02af70-0eaf-4dc8-8f3d-c1a7f97fe24d\n025ca483-ed40-4ff1-9529-16b5e0ee7bfc\n54c44d91-ec5b-4612-98f3-2969a906fe0d\na9cb2c93-a882-40e8-9532-1f1ab64c480f\n20e762b9-7d35-43a0-aea2-917381f29e4a\n3b6c5ae3-dd8c-40e9-9e3e-fc0f198dd407\nc45c72b4-8cfa-4cde-abea-41e313d792ad\na7bab4ea-82b1-4295-b874-5b629a74442e\n045fbcc8-8e66-4d4a-baf4-d30b202e9e81\n92d1c7f1-b86e-4824-9b05-469a1080f886\n8e63f3e9-24a2-4205-8e87-c1126aac037e\nd9a591f9-3ff2-402a-9ae8-58394abdf6d8\nf0d35e95-5a9a-40b3-bf48-8b3adca6af63\nd84362a6-31f1-4ea3-a7cf-a306e1145287\n213d9244-b6f0-4ab0-a0be-e8751a35215d\nb741cb25-c7d4-477e-9c5c-8cc6ec1064d3\nb2387340-6770-43da-bced-161e5106c40c\n69ab1f93-0889-421e-8669-5d4d915a1f9c\n8bfdbd20-16c0-4b97-b44d-41719445f636\n025edfb4-745f-4ee8-b527-78923c3f4475\n08c61b55-2db3-4b5d-9312-f7646a3adef6\n9210b94f-1a15-42f1-87d1-f0240ed3f2f4\nad12dfef-ee3e-4582-a8c8-0ed7fbf4f5c8\n0900529e-8cf5-40ad-bfcc-062c9006a80e\n29f49bbe-aeee-4df6-81e3-45a3faf7b73a\n1220a975-a0b2-4049-82df-22c367e7fee9\n0e1e5ed9-9a25-43a9-9e63-2bf7c2df95b2\n82b9e99c-c76c-427f-aa06-5715ff802fcb\n5353fad8-b2ff-49cc-b868-004403a04af6\n5ad431b3-cc0a-4828-a60d-305d6cca73b2\nb1561d29-f70d-4c3c-a2ea-47cf640de4fb\n233223d1-9ea2-4079-8b19-6f16bbd02a41\n5f7dd723-2132-46b7-8452-7b6d3a424192\n7197b374-41b0-41f3-8431-e40471e5c826\n6f6b792b-2da3-4e17-8386-7b6c688a74fb\n104c483c-5846-4679-8452-c3b4ec41adc4\nb175aea5-e680-47cd-977e-1f9ce7ad2b8c\n55480e14-c812-4f71-a6c2-4cd7a7404d3c\nd0f5714b-23e3-4076-b28e-9a681df56bd8\nb72e6eb7-a7d3-4a73-9310-a5ab80bbe053\n6c916a67-64c4-4fce-9310-a5026b6fb106\nf27f47e6-fe61-4b35-93fb-272ce4570fb7\n3d701fe5-edfd-4f75-9e28-77a9c45808fa\nbdc2e826-e516-4d6a-9126-a33d77b0b092\n59bb438f-a1d2-497b-b48e-96dcf8439db0\nf664f47a-82c1-4642-bfe3-21d87016a465\n2c12b611-97cb-47fd-9c63-a9a8a71be33f\n31f5f0c7-0d87-4805-83c9-65157b038d7e\nd1a8e537-c0df-4cd7-a9ac-4561b724a457\n2bcc1ee1-9aad-4c97-90ea-55376170212a\na876b302-bb81-4513-adcf-3e914cd9ea73\n09e57ee2-793c-4d4c-ae4e-f8358edc0ea3\n6135ccf0-9563-432e-9263-6b7a226af9da\n1866fab3-db09-425f-abbd-4d936bb4366d\ndfec38f4-2384-4de6-bf26-f64cca71f487\n1b6cbcea-f66f-4f09-8cea-c26700c4dd46\nf22fc816-9744-4daa-9734-b3e6435cce8c\n08484875-41c8-400a-b031-ff4c4021c842\n514f4eba-2eae-408c-850d-db24e7964bc4\n4a2be80f-362d-47dc-9e0e-91cb7acb5add\na4c6a067-eaa6-454f-98ff-a6bee60c131c\n92f560e5-1a27-4d2f-8d4f-ccf386d32ac8\n375c0405-854f-4d2d-bd40-8100e04c268a\n1181f521-762d-46ec-a4b7-782663c8f8e8\nb76404e6-bd5e-4723-83ea-af1a217d0408\n870ad1da-3697-464e-9c94-a6ac41455f05\nc2f7ebb7-f051-4654-8244-02242d96c218\n8cfbb4c2-0869-42c8-93ec-2b9e5dd223e8\ned86b54a-49cf-452b-a835-f8b20008e14b\n81421fdb-73eb-4e0c-8f2d-ce7c7b79f411\n2dc1bf51-8308-4b1e-b5d9-c9d69efae605\ne19d3091-bda4-40e3-a475-f628f5cc1650\ndcfd7b97-2bff-4bab-9349-8a05bf3d7e70\n3020b85d-0ce0-4088-9a2a-ae7f8aa2fee3\n6bb2d022-155d-4a83-baa5-5d9473f87b5b\nd3049a0f-756c-4118-8590-a14309b8b4a7\n644d2986-0f84-4615-8729-2dda0a7a3f49\n5b636e27-b54a-4c71-b64d-f03e337420af\n3df58d66-2888-40e8-9341-4d2989ba42bb\n1bf66386-b234-4202-bb07-86a4ce5ffd56\nde5dae7d-2e35-48c9-a890-61646f1fa7fb\n45edc787-1a65-4237-a0f7-d60c5bd24a4f\nc4ff31d0-213a-4ef7-b7ee-1a7582aba0f7\n164f9955-17f4-4fca-9a81-6ba6adb9300c\n68c1d5dc-1617-49ca-8121-c3c9d26d6060\n72fedddb-4169-4c1a-962d-89611aafe706\n0aaa8283-4890-404a-bf0d-ff5aad76c32e\n7c4c0e90-123d-4498-aa2d-b72ef063b6a6\n30649bfc-4fe9-4d0b-9318-01eef31e2b30\n176c82ab-88b6-4aa9-a219-2f137f23fbaa\nbbc93fda-681f-49b9-9903-b9710bcb22ea\n13c9441e-c234-479d-ad02-3ef1660d5ca0\n5f36e35a-aa8f-4a5b-be49-0df44ba273aa\ndc1a2d3f-e0b6-4cb0-ac24-7d1fa8ad0fc4\n1ba7f1d4-ba7b-4ad7-bb8c-fdc9187d997a\n9d93659d-7aeb-4580-9bf4-e2471d293f9f\n1dcc9eeb-ad93-4229-b740-53186f634b3a\n92d7ca15-21a7-448b-b0c3-8c1532b1b19f\n3685c956-69b5-4c23-8eab-e31d976746c8\n96dc72a2-011f-49bf-b4fd-0c81c59f75a1\nd442b0c0-e6af-4ec1-99f8-d5dd5f2979cf\nc88d9220-6a90-4803-bc13-6823debed7b8\ne06dd4e3-bae1-40e6-8a44-a4ba06f3cfc7\n1517e9bb-3582-42a7-92c9-32960bbe0146\nb69c6640-8092-425e-8dd8-ed749a63ab01\n129587db-7219-488b-92b7-f57e879f830b\n0e098dcd-8232-4bd9-8419-db5355e6fc9a\n1460f8ce-831a-4ba2-985c-f39eb239bf91\n0e40d2c4-4a7d-4dd0-bd11-244dbe12610e\nb6de5028-8f60-48b6-80ce-43b58bbbdb8b\n9abf0e64-fd11-4bd6-8963-7cf54bb73457\n4a0fbf97-04a7-4dc6-9456-a26df57bd563\n39187643-c304-41e8-a007-41cf9126ea46\na71d2fc1-1d14-4fc8-8a8f-83b969c71762\n3f434402-b490-4a77-9d9a-68076c1afeb3\n43786f03-fffc-41b8-8143-bd64f00bb307\ne1589a77-7d29-4f63-82ec-32c5e8f99aa2\n7c4bf512-e059-46e0-b533-eaa9dfdbc691\n0aeae9e9-fc51-4e7a-867d-857cc8de739d\nfcd3b324-d1e1-4487-87aa-325cb91f55f7\n277a1890-ad3f-4070-91db-9a9b1faea0ae\n2c6d4ad6-df57-4c00-82e7-c43f66cc9aeb\n4c13857e-b110-4375-aedc-b6a14cc677d9\nfdf14201-5797-4a60-8514-62bc1073d9f4\nb2b81955-3d89-467c-a1d6-ce1cb1861090\n4348631e-de2c-42cb-a50f-66f11b0aa57e\na6bb4933-f631-43de-a16b-842e2a815159\n17ed69ac-bb72-4b2b-b7ef-c8b80112e9ed\n724bea3f-1ac0-4fd6-87a8-522baf323d8e\n1ae12912-5eb7-4345-a39c-9e9fbc28ca16\n781ca484-6210-4881-b9a4-c11457ca16cf\n8a06f0dd-06cf-4b6d-9b0a-2f36396f43f7\n88bb1a66-e3c0-417b-9b56-05c7b4383984\n6dd8d941-7694-4880-bd0b-aa80674888b6\n9ea14227-ce90-4d10-928a-659209835c84\na27df307-9b74-4087-854b-9ca91264fdc3\n2f76f0ee-1a6c-44ee-8a57-82ecc7a15162\n4520c220-82ab-492f-9706-7e1985ed54cd\nbb40f493-d318-4b7b-a122-e07e989ff006\n7df36108-3d58-44ee-bc46-71c300558329\n0f0e2308-d9fe-4b7e-8563-1f0d70e61b78\n2e6c4922-5cf8-4a87-bdc6-2ef5ee38c441\n7d6f90ff-581e-46be-8cba-107e39f4612d\n5aca3ef8-5809-498d-8930-4f02b5276595\nbd3517dc-2901-4f41-9d01-f0996a7ca80c\n67f05dc6-8122-449b-8c25-21b3ce181336\nd546520d-1aae-4ecf-8bea-9d3b946f5c90\n0ffc53ce-d06f-42a5-98a8-243576c8b357\n1621b280-fff7-4f95-b99f-f345685904e3\n5ecde73f-0129-4dc6-9670-1871e242fda0\n024a0069-81f3-4d0c-8732-c219a78b487c\n433db0fb-584e-4033-beed-0ddc1ec6add0\n9ba56830-37da-4821-98b2-3f7ec945d5d3\naec7bee3-2b66-47f5-ba84-c86d72d6dad0\nb7f659cc-1611-4679-8066-c879421ad3ca\n3fa886bb-b287-439d-b751-81f75ab9a4bb\n474ebe58-00a2-4d08-aa99-8eefc28b7cd2\nd45c3ddc-3a08-45dd-a547-aa1fc6750697\n71d1bf50-451b-4970-9dc9-96985b7d1762\nfb854485-ddd4-410f-a523-2918d6d41d0c\n4ef8de30-98bd-4e23-9dbf-66afe305d8ac\n689ba849-f299-41d0-a2ed-80cb50367649\ne68b5e26-3695-4ed3-a56e-72baba7c32ca\n97b343a4-d9f3-4ed0-bac9-ecbf0109e6a9\n5041fd02-d0b5-4860-8c50-c738c2c4ecd7\na4472bd1-4519-4ab3-9d7c-85ee850d319d\n5fb15d7f-1040-46df-8d00-62366d57cc59\n11a7d048-9cdf-45ef-b1b1-df4e4986aa8c\n8137728e-2167-43b7-a2ff-dfe17ad19f2b\n0e229dd1-73e3-43a1-b492-fd31be1a5ab9\n0a37315b-e7d4-4578-8bb1-6c043241ec78\n7c5d54c4-a030-49f0-91fb-0282f8cc344c\na4bb610e-b3dc-4b9b-8622-7617c9130237\ne0059612-c451-40be-8c1a-194a96005369\n4fea3c34-30d7-4f52-98cd-c7cc7e574e17\nd0eec098-5d20-41c6-a652-dc8220ff382f\n2f9970e4-4d6b-48ec-be79-8be5ce340088\n9be49155-104c-440c-9546-019579e91dd1\n039e1f00-6d67-4911-86bd-4770174a1bf5\n6e4f1cf4-7543-4fcb-b9b3-211f13eed4f5\n25b1f78d-7f95-47d2-a348-777d302d9256\n31ab88ae-1fa7-41cb-8119-bbb312f9e59c\ne9de358b-84b2-4dfb-ae6d-53514d9206e9\n63d88763-6c62-4769-9697-f0a32844c421\n1e07ebc3-6d28-4060-b909-fd9b5163f242\nc99c74a5-4247-46e7-93c9-9651aa36cdb0\n5d0992c4-b4a2-47d7-9d64-ec826d79f108\nfcd0052c-8f1c-4667-bf77-a52a60170204\n797765c6-c7e7-4dc4-83db-5b8027204184\na6a88ad7-ba28-4a90-9002-d647d35f2a32\n30fcffcf-6bbc-40bb-9c45-2b3671aa0335\n5d304b32-2b51-440b-a847-2c5eed4722bc\n8039c049-ec77-4630-8062-d51993be30e4\nbeadb6ef-0cc9-4222-b49a-8a4335fb8a23\n42bfe02b-6a31-44bb-a77d-35c11a99e930\n1ac67776-343d-4e03-ab93-f82b6d3888a9\n0c2f97e7-c3cd-489a-80b9-95c026c57da7\n22fea798-9ecb-471f-a7ae-ccb4513d542e\n1f564203-4973-4087-8796-546684b3366d\nd4488157-ca3d-47f4-9187-c3246bdb2cff\n4b995c48-2a33-4c03-8b79-41fdc1063f85\nc15ceac1-7b5c-4213-80dc-9d2ebf9e8731\nb2c13478-8666-4a63-8860-0abd8af9beee\n3625f607-e7f1-4ab7-9a8b-9e6841aba472\n77f4c448-e80f-4bb5-b465-b1b50ab82923\n8bdfc8fb-5c86-4a97-89a1-6b152efe31cd\nb40d4c1a-6c45-47aa-80cb-27bf1c0eb2c6\nc470b330-b323-41df-b721-3b0e9924ba38\nff29ebac-f138-450e-9aa3-68ff6c407afc\n8c98709f-e65c-4894-a23b-37486f7a482e\n0b9fe1e7-37da-4cb3-99ef-36cd7ca6f0f9\n44e7fe39-1b6d-4b64-bd78-075d0ee9d216\nf1eca893-c9f6-4557-8935-26364107da38\nfcc254a2-0481-4176-a865-531a87f595bd\nfb75bcd7-1361-4f88-8912-a05f5315ecf8\nd41b1951-acab-42eb-9142-c2d1142f4e90\n48770460-e9e6-4edb-8b98-32e856b6457c\n2bba4ea6-615c-4e52-bfae-0f97eced72c0\n2f51770a-034d-4674-85eb-be9fd5d50b85\nd5fbd600-b483-49b7-8e53-a3188f349ccc\n520d42aa-1df5-4836-9c72-fc80209dbb57\n8d9d76dc-aac0-4a1c-94fe-a86c8cf69cfe\n08dc38c9-be80-4352-907d-333d73bf6508\n02909751-7db0-4f67-a534-94956c172823\n6330672a-8f11-4f83-916b-f42f3e1ed09a\n38e0eb57-c3f3-4e90-aa1d-e8261b01ed35\n05973c38-d2a3-4177-8aeb-6d125c6f0873\nabead3b7-e04c-4b8a-84f8-f2acefe1b06c\n85d56f45-7d44-4614-ba84-b38898c9e735\n856aeb0a-8649-489d-bbf2-4d95cc0ac6da\n74e80920-4d39-4807-9682-162b41591428\nc1986e63-7d25-4d3a-b779-cea71ea535e2\n4cb7ecb0-b02d-4c37-865e-076fe8796389\nb3110964-5771-42f3-803b-f5572c86f275\n7f38a413-6c20-49aa-a0ca-483819cb5bf5\nd3180a86-1540-4dd5-aa8c-8b0180f4c269\n808bad33-dc51-4cbe-a07d-63c812645c3f\n37e34a90-b277-4d22-be37-7c8cac4544e5\nca50f571-1524-4051-848c-a38d601476d3\n099bd726-6e9e-405e-8099-fdc022911d3c\n2f5a1e9c-53ac-4255-8288-1972975c0c89\n3d0c1dcc-e0cb-4e75-a387-50cff4408e6e\n8ea6e9a4-d48b-473c-8342-fd761959ab03\n2db1bd2f-b188-4131-924d-436584fdb184\n866e269e-eb57-472a-99b9-c8556465f73b\n36cda6e4-0dcf-428b-880f-2a78f1f98a1f\n0abed123-df24-4dc4-84b8-b3770792ab2d\n20278583-1b58-47ee-95fa-b74f1e7ece5d\nac9dc7e9-5850-45fc-9c8f-269894fbc5aa\n2c311258-4523-4ac7-b65b-cefc32a5dc37\n97ba1fef-e2e5-4770-a19e-7afa71d8edd2\n291d3c9f-314d-4959-a90a-50c2b9fccd56\n9f989eee-406f-4ee6-b0f4-aa5a31c19a2a\nd9ae5ab4-51ed-4b0b-8080-88696e6594e4\nd8d5045f-c455-4f24-b029-86c4b6908a1b\n399f1823-450f-4671-8f45-b047b11f87a0\n5ebb3ea1-b515-415d-bc4c-146ee41a90fb\n4e6bd4ee-d22d-4ad0-8546-50aecb68ab9f\n26aa860e-3785-4273-a7bb-be496c8ad861\n79a171e8-25de-40ce-b70e-bc11adf23cd5\n8fa14e4c-aefe-469e-b990-75824fe14a4e\n0112e704-91b2-4add-ab6e-deca4c1d958b\nfecf63a2-c301-4bb4-a8aa-f996cf26952d\n9f06659d-8f0c-4d1e-b5a5-f27344f6e263\n9a50ace8-14bf-4ac5-80b8-442aa9aedd63\n16002cf5-9563-4076-96fe-40df348a281c\n9eebe8cd-3d6a-43dd-978b-53444a68f98d\n751dfb6e-2cc2-4ade-87b2-5284144d1ff7\n2e0bdac1-2957-4940-b435-6e2158757246\n9f3b2498-9e25-4f45-9474-9bdd173f5505\nb1dd39e0-3517-4fc0-99da-16191b116c85\n09d06897-f7dc-428c-b61e-ea7da6c7ba96\na51731ac-6336-47c6-9b3a-8a8566a98124\n35e092a3-5402-4f49-93df-d743382b15d0\n00f0c63c-7dea-4453-823b-0f402aed6b87\n465254eb-6504-4339-b02d-899432484641\n96aeab6a-918f-4205-8269-90b9f70ce528\nb0a3733c-a76a-4b68-86f2-49c2587c609d\n42a05937-fff0-4a09-9d00-5402554948a4\n888a1bf6-1228-4eb8-9c60-3f3142f987d0\nbde3f1c0-9209-4da1-ad9b-74ea5d078f09\n43fedf12-0fd4-4849-9197-bdaa96665859\ne0e4755f-3904-46b9-b118-857014e9338b\n5e4db843-342b-4bc1-a509-4bf02b04317f\n46b0fc19-4cc6-429b-9c56-4e960cc06111\n6336740d-895b-4206-b864-8ec3f50856dc\n044b38b4-6441-4cdd-a6ae-4a5c41167521\nfe8cf582-6cb3-48d7-b76f-7a5c86d8f46a\n4deb5909-a6d5-4c01-a0fb-49d4ae2ed70d\ndc1a2cba-1744-4f6d-82ee-d84929c6bad0\nfc664526-c92e-40fc-ae4a-d61e929d76e9\nbbfb1daa-fef7-412e-b17e-08dc9426dd0b\n6bb14d04-653b-400d-98c7-11ce0ca6a6ec\ned979831-b90b-4109-a7d3-b425e6ef1a43\n4940f548-c141-478f-9528-a3c0dc0cfb5a\nb8183798-aaa9-4c6e-ad38-d5eb50fb8cf2\na29a051b-4507-4417-9ae4-a80f297cc0d1\n8ce63c25-73e0-4847-ae4e-29d7228607b3\n0a90b1f6-45f6-4d22-83d9-37afd4ca1515\n2357f217-0cf8-4d24-837e-2f8e24396bd0\n58bb209a-1cf5-44f7-890b-c882fbb66c06\n6e70bbca-98f1-4bc5-b483-5aa4e1fc83fc\n8ec6dff2-9cc9-4bdb-bdc4-abfb7a2e3dd2\n45ad596e-6577-44e3-878f-a2cb34d5d33c\nde54f6cf-4cbf-41c8-a9b1-83af3d44e230\n4615300d-87de-43f1-a07d-46b27ea3148a\na80e7ced-e3a9-4dac-b3ab-39532f81daa4\nf4e521b3-a4bd-4387-ae43-562dd7b58428\ndf9e0dcd-10de-4913-b64a-740aa57010a0\n59385951-582a-4370-b46c-d004091ef6d8\nbb1ed9bf-2904-4fa6-9630-a37419d8b2f6\n457fb449-9cf4-48cf-91dd-d8d29d480c18\n47e0f884-4e61-4df2-8104-8b2c9def4525\na908fac0-cbc8-49b1-8d1c-91f70ff7008a\n8d944f8a-a5ca-4500-9d22-e46040644efc\n2d299d7f-b7db-49ef-9976-58b43143a53f\n214d9672-360e-4094-9405-da9941468110\n9bec8916-62fd-414e-83e9-eaa23ee022c7\n58f80b34-2fb1-4380-a314-6c4ed59812b8\nd682ea1e-30cf-41e2-860c-592dfa55f571\nbfa91b33-88cc-4635-b45d-776bc7acded4\n620933f1-e262-4a3c-8796-540a4bf131ca\n0d0795c7-9f5a-45d3-ac86-b2c377f80066\n04bd14ba-65ad-4e38-aba5-a5ff948ebd5e\naa42ec52-0576-4096-9237-3949edaeae62\nc48f25dc-3348-4576-ba66-08380848d663\nc0809c7a-33de-4105-bbc6-81d2ebe604a2\n83a14bdb-d1d4-4e51-836d-292d7e42d09f\n626be43e-7e8a-45c0-8e58-1731865718f8\n78543a01-7a4e-4221-a27f-a0c1dd34de96\nc3e77b44-0547-4029-a257-47b4249b5dae\n2388dab5-f8ef-4a05-9228-c2cbd1637181\n93544c3a-e27e-4da0-bc8d-4e9a3a6b2595\n7fbe77be-781c-44e8-a42c-9d2a54ef88de\n50183aec-0858-49f3-b68b-dd93553f7824\nfa351f6e-d22c-4129-a4b8-77d27a3fcb3a\n70480cfd-e8f9-48f7-84b8-4fe93736fb58\naa0c3335-c40e-42c4-8bbe-2ab4b48b4b59\n1ba430cb-94d8-4da6-ad3b-1bebafec0e36\n61a6f23c-51bc-4043-bfbc-d0a2793b060c\n022a7096-7dd0-4bfd-b9ac-e5a131349931\n1b5b45f2-9790-4458-9562-1fa788d1487e\n026f6a7c-8318-41dc-963a-6210ccd4c9d2\n8f60f593-e532-48a4-923e-bc125372c119\n83d8c384-e2c1-4518-94d9-0f26c02ed3a7\n5a2c428b-e05e-4392-b58d-17672e03fac8\n3d492eec-5941-4c69-a639-391562ec534b\n4b5ff192-5426-4d09-86cb-c7116359be17\n193b1eea-4313-49be-aabf-e537a20df347\n2e77c594-780c-4ebb-84e5-c46fe28f92f2\n7c1361e7-068f-4359-aaf9-b203f1db0c28\ne5b67db1-3655-48af-9772-24fd6de70e78\n96ce05b6-8aab-43dc-8aa6-0d0f06397224\nd2db1bb3-faa0-4801-80de-5b526a7e572a\nd6a9f18a-8014-40c6-ac4e-54a9c2044bbc\n2a3bc3d5-d6d1-4be4-9c1d-bd4f1f6a0c91\n02d163a5-fb18-4a99-ae94-3ae3fd471ffb\n8e2b0f85-b414-4383-beb3-56eab31bf19d\n1a659b86-ee91-48b5-9657-bcf241f9f045\n8409b01a-0cc4-4cf3-a102-686255841faa\n397a8920-1573-43e4-b5bd-f93f5ee10476\n938fc449-ee6c-45d5-9139-17fae9534712\nfacb9974-a97a-4876-abae-c4e3947c76d2\na9a254ee-62ca-4ba2-92d4-122516301cac\nb199e202-617b-400c-a9c0-ddbaf7e06d24\nab5f7128-5bed-4bdc-8bde-ee0abadb14fb\nb2bc0596-cbc3-4377-a893-4c49044624ed\n2cc21236-1eec-416e-a8b0-24dabeb39a10\n5923a430-17c3-4e42-8827-ff388fa81d0c\nd3f3087f-1f12-4767-a5db-780faed9227f\ne8b2ae6e-97e4-498d-92c5-a2a654e2d179\n7c9fb729-ab07-40c4-a0df-6e630536e14d\nae4c9090-d5a8-42d2-b66e-6a62e98498f8\n328f0536-1471-4d53-ba44-98a5784ba0b0\n475258fc-2717-4b3a-8235-ccafbba5bf1b\nf3ad6b9d-1ff8-4938-9ac1-15a2f017c3da\ne266ca56-65af-44a6-9cd5-2a6ef52c1e29\neb7c8da4-ed4c-4764-8eba-d97804635f92\n3b69d87a-758c-49e5-a772-b0375c7fd7d1\n4dc7dcda-13cd-4d43-af55-ccb433c7e99f\n698d18d4-c114-4eba-9815-8259e716a609\n6dd9c1d9-32ca-4299-b74f-acaca355cc49\n5f8c78e1-ceb5-4ab3-8d9c-d9abb1f7c624\n02044ff7-8947-402e-a49a-7359d1e3e48b\n840609e8-2eb8-4fcc-a850-a0bc4d066124\nb7d8274c-70cd-45c0-b5f6-7e1d48bc4562\n44c8bf13-5c66-473f-82e3-8bd5ba049215\nc1183194-d7ba-4d2a-9907-522ab89ea27e\n5f37c9fd-fbb8-4b97-ae1f-accbfc30256a\n22d8ad31-c3bc-4bd3-b150-66ca937b47cd\nedecf5f1-1a32-4eb2-a92c-6ea0a2873373\n99c050d1-9a5e-4149-9a81-a3d9071039db\n98fb1d11-a208-46f5-860f-be5a6933c024\n9f01b04d-10bd-41d0-940a-29d33b330911\n71607474-e427-4d41-b898-0ae13db2c7cd\n624da7db-a99e-49d3-95fb-ad4ad452c03a\nb6539918-9de7-445a-87ce-b93914b88477\n4a1d28cb-350f-4f2d-8652-6d86e4559497\nf5363de2-afb3-4033-a25b-de29fb98d78a\n9b68ab95-e92d-4fb4-b35a-049306b91217\n6f89ed2c-87f2-4b23-acf8-bda12d63dca9\n900380c5-5099-4786-ab2b-3b5c92b21419\n99afc3e9-641c-4d99-9a40-62ddfcbd1fc7\n903410ec-a096-4d8e-84af-bb10cef6ea01\n4d1b4e77-e3de-4a2c-9915-f17a4aabec0c\n3c5e076e-73ea-42fc-a1eb-0e40af57098e\n4a3e90dc-2888-4cf6-b139-0bb6a382bb12\ne58769df-17a6-4cb0-b304-1305fde427bc\n33c4e3aa-4f32-4bf5-9b72-717c3c9dc937\ne05c14f9-404b-4423-bac8-c25ec7950e9f\na60d73b4-ee35-435c-955d-6e12e0d45a3f\n0d334da6-af81-43d1-8dc9-3bee48b73cae\nf67e4f37-e3ae-4ea8-850b-613d078e3a48\n239aa6cc-2aff-49ba-bb3b-14b28c731eb8\n7a9ea058-5596-4901-b394-52e280e57d30\n3ca313fa-56fb-44ee-9ecb-ea719328a631\n0378e86c-b7d0-46e3-a117-a20820a2abb4\n012f65bd-e2b1-4448-95c8-739ecad23caa\n78f59bf5-4510-48dc-998b-234dffa37e19\n3a2e76d5-e6da-457a-92b7-6d1b82364cf5\n18f47c08-9a99-44be-8471-c3333cab2f6a\n92013bb3-d996-4235-bfa8-fdf0b97a916b\n327c39ac-3607-4339-95a7-b0df46fcf886\n0d945b65-f7d1-44ca-bce7-9b8cce808093\n3b8537da-162f-4fda-b5fb-3f7ef84ea94d\n3291c2d4-1bd3-4925-80f2-1c3ddc546991\n95af1d11-726e-4150-a268-d49cd0ee47a0\ncdfa3dc9-7678-4d1c-af42-ec3bd5c27379\n606d0df2-3db9-4b3f-b297-db47cc612a37\ndfdad060-7389-4fa4-aa9f-59bca235086e\n55d8adf4-7056-461f-9f48-c01b765ebcce\n35747993-4a6f-4102-8058-b68fb6222066\nebc6e4f0-d302-4495-89be-80c6ec8e8ca3\neab6afa9-8001-470d-9cf7-0055e9b1a1ff\n473b62d0-885e-4a24-9ea0-544ae60644a4\n9129a333-67b8-4d59-ab05-d8b785f07ae4\n81718f8d-45bd-432a-b7a3-0fe47cb3db32\n4cefb9cc-c72b-47c5-a71a-18bc6fbcbbb1\nda24599d-06bf-409a-a773-71dc486abc7c\ndfc71a1d-2305-44bb-a539-7ae221362ce7\n718d3aed-0da5-4deb-b1f4-9cc9b25fc8a8\nbd800b5d-3626-4d8e-a7f6-9b5c18f20cf2\nadffd1cf-9760-4507-a428-6b4adfc2f148\n9afe465b-feca-4be6-9a21-19d31693f891\nb91de1b6-5107-4e62-9cf8-c1aeb59ba338\n7e790eca-f036-47dc-b88e-ef643ac8e3f8\n36cd290d-7012-4ca0-b5bf-343436984ce4\n51b8a5e2-10ef-4d4b-a380-29d31c40a7f8\n08e8273a-422c-4b3a-bd13-035fc78310d6\n4018afac-f711-4753-96cb-b73efddf0584\n9d3f8fc9-d985-4a66-bff6-ecfcce70e95f\n7ab85115-0c70-4ddd-8d55-9ff5b89ce03c\nc51047af-0a42-4ab8-b23f-59e01eb9aa90\n2e21d4c7-9c3c-4717-a038-260e57cbf21a\n425c2498-769b-45f6-b7a1-b1bf4ee22d2c\n05e9e933-92f8-4d08-8fb4-0fd6659b8e62\n067fe16d-8ba7-4d8b-8e38-e02ee55d8378\n1be9e1c2-1c11-4602-b59c-8b658257bcf4\n34affa08-a5fc-4560-ac02-faeaffdb6486\n343d34b7-d34a-461e-995e-4526e6608daf\n86d36c0f-838e-4b12-b9e7-891d18e16579\n112cfb95-39b6-44c3-89a1-71a2a031fe43\n31be2376-3aeb-4964-a6aa-24be3c918375\n51e577fc-ef61-40c2-bb49-6c7a685bf4f7\nef9c6bbd-db5b-46e6-97da-5f475e40f500\n54eff752-fb76-44a7-8d10-2dfcf5c9cb1f\n7ad5cde1-52e9-4cf9-aae1-c53dd20034d1\n4014035c-ae3f-4e46-acdb-8a1813d7e6fc\n5e83b617-e393-4f88-9664-f4e8c1b3023f\n2ece22f7-a720-4b42-a355-01a81c4f2ac5\nd6fcc581-e159-44d3-91bf-0bab9145845b\na8168dfe-2d82-4f1c-b4c0-129f9dd85897\n085535c4-a460-4105-904b-daea6ba6863b\n18a54c0f-21ff-40a0-90c9-019a59482c60\n226c8ea3-b4cc-4b35-bc3f-bd73f6f02784\nce5a80ec-b2dc-4912-ba6a-e76c68adbace\n19e3de37-6e11-43eb-b024-222c2f18f239\n344d835e-837a-456f-884c-e946253dcf39\nf2270a32-9373-4dd8-ac62-33fb182572fe\n5f3170e4-b95e-4b99-80bd-c72662c815e6\n8fda6885-dd19-46d5-b663-0f7d84dce9a7\n501d2ebe-a72d-45f0-8de1-af489fe964d9\nde7cdeed-54b0-4b11-958a-08abb6731cc5\n4f5de56e-5d3e-40f2-9b6a-7e4f8a6fe14b\nbbb6245e-efd0-4ab5-ba71-06b4ceedf6f0\nc0817a2f-e831-431c-befd-064d25406084\n04e09299-d6db-4edb-abe9-a1dd24cb5295\ndfe70104-4265-410b-9718-edad779b423e\n4697e3dc-202c-4293-a7c3-5ac7263f73a0\n1d702ba9-5b20-4a02-9c9e-122fa0469afa\nc5f78917-6694-4032-a14b-291991f45f41\nf8f7f222-e2d8-43cf-ab24-4f40d90616eb\n9a08f541-7808-40d6-8e90-bc3e4f6b8f1e\n1f65b0bc-8838-45b2-b3a2-85d668380e01\n146fe147-4ff2-4e0e-91dc-34f59c089d61\n3c85a60e-79cc-4b85-be37-d91e8b73c89f\ne9bd6d5d-d5aa-4276-829a-521d5bc5877e\n31c728d0-5077-4da0-ba97-92525f589abe\n05fef82e-2a67-4b88-9848-3a4796d5c424\n659ac6f5-1aa7-48e2-8dc9-ffc9f1942e28\nfc9a9ad6-f92b-486e-8859-4411aeb79e78\n4b5beea1-9e29-4dc3-bdf8-36a234d9a1fa\n33baca07-98df-4732-a283-6fba7dd502c1\nc932030d-cefa-4199-86e2-0ffa49ff1eac\n362821ae-02e7-46ea-9a24-bd5a595899d8\ndd7cf512-d356-4481-bd2c-3f159273741f\n91eed596-d4b9-4c6f-951b-a65faa5059a2\n38cd150d-250a-4546-af93-7cba83728a1c\n0cd4850e-965b-4417-a3a6-c42488997dcf\n39fa5546-3e9a-42b1-9d96-db4401377289\nb5c2a14a-ec40-4aa1-93c1-ea456a0bcd8d\nd9f3d3d1-dd0f-419c-8735-ebe076d9ff4b\n54053024-ee19-40a2-95d7-da956740a77b\nf6ba3ef7-0c1b-4c7d-ac7a-6168e72d6782\n29ffb750-114f-4e2c-b056-644479b7b493\n21eb457b-f2fd-4e95-884c-bcb58d6b2025\n29dfa095-fe87-4afe-9121-fa9aa40e671e\n2bb554f1-ca17-499c-96a3-60762f823a90\n006079fe-8c1e-43ca-802a-04861cf741a2\n01fd6756-13ac-4d92-86aa-cde09df47dd7\nfcfcb86d-ab92-4b74-b707-881f2d530442\nf2dbc468-b312-47e7-a4c4-793b088bafd3\nfabc836f-3058-4f1c-8ebf-b2060afd5411\nf3da027f-1e89-413c-bbcd-2e30e462b96c\n28607ea4-8755-462d-a603-ed9d5c2abfcd\nc805787e-f924-4168-a6f6-d8a7400d435d\n9a07fcb6-74da-4427-bb06-404d13be1fb2\n87216eeb-1ba9-48b5-8f8b-b1552ab958a1\n2f1dfaa7-dfda-43b1-abff-b90a8c28dd5c\nadc6fdf5-1757-43d1-b056-b0e9c35b2104\n5e143c1d-f815-4d00-800a-4e5767566783\ndd9c67ae-e288-47f1-b0c2-97a766ede56e\naa30ca64-f29f-47eb-ae4b-fbcac9c1754c\nc5f5e45a-ae03-442d-92ca-295a42cadb06\n5ca133b3-5f24-4650-bf64-0bf222be1968\nde5ab079-6e84-4cc0-896f-751c6c5d018a\na2f6556c-0aac-4145-9c6b-e9d0fb3f50ac\n8c945852-9cf8-4764-8a1d-db17f5e46ee6\n4c53d087-5a05-4777-b925-b6a77a3af691\nf47176b8-061c-49b9-8699-a68fbc6a59ec\na0df25e6-e7b0-477f-ae99-149c06c57e74\n734c4bfa-eef0-411d-abee-80dcdd75eb23\n1efad64a-0539-4388-a0b9-8d3958adc167\n00fb1abd-5030-4c4c-81d1-e57cdfdbb0fe\nf8fcc0ec-2fea-4db0-8f74-194b53314100\nd81f6b28-d368-409c-86e3-4d1f21951d93\n44f00f0d-beb1-46c5-bb57-b0520ae1e0bf\n785332c9-ffe5-45a1-81e7-5a11d245be0e\n54923d9f-2386-4912-b59c-bce8d50814ce\na02f8a90-2f09-4d99-9246-6ed7cf07c7a2\n06fc94a7-e93b-42c4-9609-c8b7ad517a50\n8ba44460-6e51-47f3-85fb-a04e13d1922e\n1c57c46a-9699-497e-9891-ca3a70e314ec\n04f0dd77-1791-4554-acda-fe8fd8389eff\n9a58eeae-33c8-4b07-b2ea-738a376a44d9\n9e6175ad-fe22-4b63-827a-2d9dacf9bcbf\n902578aa-3347-4462-86f6-a50c531b466c\n431ce319-f45b-483d-a50c-2e301a6e60a4\n787f027f-02c1-4daa-b3cc-5ce50d158545\nf904af49-d8a4-47af-9c00-f710509e1ed1\nc97a5730-bb96-4d3f-911a-f0d93c8bdd0f\n9ec3ba30-d445-46ab-aa03-e9ee6d7be4d7\n9fbe517e-976d-4f1f-918f-ed88c135d7a9\n48b54fdc-a903-4a16-89db-cfc8c6842311\n0f3847e4-f147-4dad-a89d-ac47d856cf57\n5140e597-3914-4e76-b876-185eb5fe1e25\n995b24fd-856c-47f5-8685-e2360997d332\n8ae119ba-250e-4ec7-ad67-a8884f8188b4\n5ac62497-9974-4353-9ceb-0e0b80decc5c\n3bf11e50-ddb6-4a52-826f-895f39f1aeab\n02a65982-cc41-4f45-b54f-a1faa81d2eae\n47fdb0af-5259-4a79-b9c6-5d3be89d3823\n7f91e609-b1b8-418b-ad54-9c03f1eb82e3\n26008b4f-ce53-480c-853d-f9ef1732ddfd\n311d56af-18fc-4441-aef6-9c590ed3c0b6\n5435f92a-a685-420b-a8da-41dc5c3c0028\nf41047bb-36c7-4196-98ac-d51a82030987\n59d4e3dd-79b1-4ed5-9c64-c841dad940fc\n2764e9c3-7f57-47f4-bc8c-ef46d864a258\n68d030ce-2574-42de-88ac-ab22f43b1983\nf53fced5-23bc-474e-8ffb-e8680ce98f9a\n06e98534-e94e-4e72-921d-f768dca81050\n1bdf2ee3-eaf6-4a55-90bf-ae796ede5088\nf26f6f95-d9e7-403e-b311-a81886eb426a\n8d53992c-45ee-4e06-a5e6-6a8efe31b4ae\n9774b380-48d4-476b-b59d-621646d9c178\n561a490d-f85c-43e4-96e9-8899acc905c1\n1dbafc2d-752b-4b70-b13a-845cbec2b097\n61e34482-244f-45fa-a911-008095726470\nb17b181e-a2c4-4428-8143-22c1651693e1\n1a3f648d-97b6-4450-b692-2832f02a8581\nae6f4336-28ed-4f65-8d1c-6cf5861a4c94\ncd7afd85-5180-413c-a676-dfa5e4f7ce24\n3e2d3dde-6b73-464a-a1d8-e2a44ff13a2c\nbe745146-f213-4e23-bb26-7cd873605cbf\n134652c6-d7a0-41f8-a042-5e006b48c9a7\nea809d39-cb1b-4051-99d7-cac865680d02\n83680ffc-54f1-4347-a7b2-548760c01cc1\nb47d3def-d7a2-4523-bca1-bc5edf5740e3\n241cd364-e7a2-41b2-95a9-ecb149606f21\nc06c0ebb-c465-4dcd-871d-3ff439b2728e\n1d7f29d6-cac9-4485-8c4d-51e87e7250e1\n682e0933-dbba-440f-b5c9-89b07fe1f3a4\n292e2f4c-012d-4ee8-b5c1-c293819a6912\nf6e69418-8861-4c47-a3b2-194524e416f0\n845f1d0e-af80-435d-9ef7-bc65e9b51120\n9a107115-7a25-486c-a04a-3610499e3b55\n2704f76c-e87d-4d52-b123-c7a7f76ce646\nbbda130e-1c51-4a8a-8069-75cb1ad14f7c\nd4a29d5a-7e18-4842-9019-9d35319ac2ba\n408721d6-9950-4f4b-94c2-63b8eb6f6d4b\n71095bcc-de83-4a30-81c7-7dc2ecb89320\n66917337-b6f9-4137-844e-675bcc362418\n0f6c0b9b-7499-4233-9b90-3892c01efe4a\nefba4674-9b6a-4411-a1ba-b1bd6cac2aa9\nb6359663-5ea9-4e52-a240-47562027eb0d\n9cc49203-f893-4dc1-bcfc-bbcf5ffbde12\nd7280919-9c64-495b-be30-82db79624c17\nda0924af-9f40-438b-b452-eeb23851bc39\n4b754707-d79b-4027-93e3-d5858308c246\nf03949d4-027d-426b-9fc9-4dbb2d536b9c\n5e063e66-66f4-45dd-a6c3-854cff05e6df\n2745ad29-edcb-4eea-8442-3cfd30c0a06a\n91a46eea-8163-4e2e-8e8a-490b13bb067e\n7f450750-50f0-47a6-943e-a3b9e393e73b\nb7ca4d61-5329-4797-add2-d03cacb5ae52\n57f5d3a0-5b0b-426f-b178-f63387657614\nba3ea661-4505-4854-b3e6-703e94297c9e\n1f9088f6-9f6f-4ee4-8065-0a87ad9a935a\n224d6dfb-f0a1-4c1a-8519-55ec0e6812b4\n5f2b593a-844f-4b67-92d3-8361f74b68d2\ne23aebd0-7473-4231-bf8a-0260cd2170a9\nc3709c41-80a2-4c49-92a7-176b6fda66de\n2c839d9d-17b6-4225-98a6-cbe312c96659\n3a5ef378-f170-4189-aac8-f7cae65013cb\n7f20ead8-db97-49bb-984b-afc3f6d11b19\nf0248598-14ce-426b-8f64-2d3535091e60\nd8737db0-3ef2-4195-926e-be40ae1e1a2b\n5089a196-9fff-4da8-b4f1-5946674d3da4\nb8316e5d-35b0-46fc-9586-be972274c78d\nec9ba78e-bc6b-4842-b59e-bdbd30135489\na86702f3-67f4-4a93-bd46-bb35ac95f0bd\nd6f43c33-3ca3-4bbb-a848-d37afc23d3d8\n16d812fc-e4b6-4b67-a72e-a91d4ea3d5d8\nf0e93555-ae52-4083-9f8d-a215c3df0731\nc59eb195-53e2-4ca3-966f-b95efc0c415b\n33ded3eb-813d-4f91-af57-3b6bfdfabe67\n5bef44ed-6724-4b02-9b62-4375f4b3bf6a\nbaa5737e-58c8-46c4-895c-ad297b7f3d59\n6811e1ce-4e87-45bf-a785-bc66828233d2\n4c40a56d-7048-4fa9-93fb-13a45b68d05d\nff40c4c0-fbc9-4fa9-becf-e0237ee2de8b\n41fb702e-d778-4432-8c28-8af5a201cb8d\n18404f40-2412-4ca5-8e66-be3022d4c2e7\n4782bc3e-358f-4bec-bbee-c773f47962e9\n6f904fef-69ac-4ba6-ac1e-3286521cea8c\n62f56e05-d906-4ca0-acb3-d8bd53434252\nd83102c7-5e76-47c1-9314-87fd50e47501\nf06bbdd2-456c-41cd-af68-6f1d39b855bb\n1528ef63-4492-41c5-96ec-63b420725d7d\n7c76ecd3-3434-4b4f-a78e-3c582bbaca54\n60243faf-f415-4ae8-842f-b52cd0958bfc\n31412ae3-18c0-4456-a326-f0339e0a639e\n5848164e-3ce7-4884-99b1-84fe450eee7e\nc95dbdc6-a4d2-4140-9af1-427975b13de4\n59f8caa6-14d7-4606-8a19-19883b74dbca\n0f43c238-9539-49a2-9bf5-da4c379aa333\nf0e1d445-c4bf-45fc-8a49-ad3de6a7bae1\n8d547834-998c-44d6-838b-3a2db83efb20\n43b8e161-8f0a-440b-873d-b1e2454bdcae\n04873e2f-b8f8-4580-ae1d-3563715d220b\n5874eca7-80ab-47ca-afac-4c493f369f25\na63dea7e-80df-4ebd-b852-6cd3d63662f8\n1e4c0f8b-701e-4417-8997-2dc2d05c6f88\nf87e8107-6a73-44ca-b67c-352a6337bf27\ndf7d963d-d395-4833-a0f1-95586c530ca2\n7d05b6ae-7705-461f-9df7-ddb8e1abedbf\n66a6102b-289e-4919-b742-269d892d09a8\n51a161af-5d27-45bd-b1a6-ba35b9b89c2d\nf95e6210-5427-4995-8f75-1d0b0fcbf0a4\n946bf62b-0901-4ccc-b7dc-f6f95d31799e\n78427a98-d07b-4412-979c-eb62f8d3caad\n58564c43-2f94-46e9-bd70-77678d56afcf\ne1831f0d-480f-4ee1-b078-a8b519aa9f6a\n6a77423a-4e52-4b3f-82d9-41366d804bc0\nd92570d4-4092-49b6-9b4a-b546bbd06e96\n17817111-4bb2-4c96-8b26-b822053c9c32\n477c28e4-5965-4a9f-949e-4ea055112891\n15da5a43-0ba3-47a7-8139-0103630158e9\n41bc049d-30cf-45ac-9b26-0becacad2c0e\n28192679-544a-455d-807b-8c5828e80d51\n9ff7bd9f-11c1-4d7d-b257-0a062f69e37f\n726775ca-adfe-4f9e-beca-2eb3015873d7\n9ede20cb-b3e8-4dd7-8fb4-65d7ff5ecff6\n5b82fe51-0f52-4e65-88da-315d73c0e7d9\ne3dae893-faac-4577-8511-f414d61737a4\n0c1cf2d2-e538-4b3f-9e59-249893c2aa91\n4009841b-7b1e-46e9-97b2-f4b5ad7b88e1\na4b4f1dd-ff23-4461-b377-3971974711e3\nd96ed4ac-1363-4bc4-8baf-1b255bbb59a8\n2255332a-ed86-4546-904a-82ab6ad42427\n2a9fd1d8-0910-4c92-aa35-11e900067a73\naa5178d2-1dc5-4578-a304-ba67170553cb\n7d8fa301-c7bc-483d-8192-0309fa12a1f2\n5fc824fe-6b59-4502-b74e-b6c0e428d9d5\n4c26a8ff-a2a1-4f66-aed7-567de1240f11\n3554cb4c-cb2f-4e0a-a999-b06a86211e35\n9e0506d7-56e4-40bc-8356-78c27e1ef8e8\nc807bde5-a55a-47ae-924f-6609d2f76d6c\n7ab32212-f683-49ef-a9ae-73b4037eb446\n982045c5-a114-4f48-b8cb-fcf96426a884\nb9e430fb-27af-424e-ad6f-ae5fd8e515f0\n83d68fdd-224c-4442-92ed-f5fc96c17072\n30941c8c-d5f3-4f32-99e2-6959f542d081\n75ea4659-6b8c-4af5-a2d2-3246025cafa0\nfd14151a-a361-4203-83bf-61dbc43fc979\n2684b9eb-9d2c-45e5-a6e6-3e3819ba7427\nc1b1a7e8-421c-4c6f-b75a-ab10a10613ff\nb64e385a-464a-46b6-aaa9-483e8cda00cd\n40f79dc9-40a0-4ff2-bcc6-c7268ce9f5e8\n4a8bccd0-4428-43dd-b20b-57a8d6a28cad\n0e986fbf-218e-47e0-bda3-3ee9cc51a116\n2f116bea-63c8-492f-97d4-bbaa1ba4252a\na4590cd8-7ff6-469e-92a4-738dc8cdf633\nda71ecee-7b54-4e75-a4a0-2b69329efb5f\nda9a0f42-e403-4e27-b563-16c929c26d42\nf6215c00-f7b0-45aa-bd9f-d3b6322bf568\n008b9bfa-d465-4127-abe6-8d11b75305b5\nf5267c1f-3bd9-407c-a492-8654a81ea186\nb29d6da4-0d5e-4607-a5fd-02f9288ec3cc\n99ae7a14-6037-40d5-b43d-0e90307f4561\n1903a6b9-6a0d-427c-83e2-5d33d8ce9c2a\n4506adaa-9ae0-4428-8372-fdaac2f61a56\nd0dd0bac-bf56-4315-95ec-b762c83ae9a3\n798b43eb-2902-4586-99fe-365624693d0c\nff2e7d4b-761b-492c-b652-7ccc8ea4be3b\nce9c0ff0-99f3-4e02-8d82-61812b462120\n471cf2c8-0332-487c-826b-d4d477d2af02\n082c357f-32da-4334-b3ae-d01bc326a97a\n431eed45-bb36-448f-90e4-560325f89e43\n828e844d-88a1-41fb-a3b4-19ae1afbb018\n0dda1108-e875-40ea-a67a-3247509d1b95\n4815c881-9605-4b91-b400-433421bb26fc\n5c10943b-15e3-47f5-85c0-eeb33f7ae867\n6da355ff-13f5-44b3-a6f4-86759f378f66\na971aba7-032d-4626-8d17-1a8a39411b57\n42ba94ad-0d32-404e-bf7b-e373519d5294\n352cf6ac-d8b3-49f0-89aa-df099389130b\n8296c340-93c6-497f-b854-9935acdadf88\n93fa1cb4-429e-48dd-836e-5de89f852932\n02c2d08c-a5af-4943-87c7-04d3b2b7e7d0\n67214882-36d4-4335-a299-ce7c894cc952\n72514e3a-1ad0-4bc1-bfc6-6613b3776e71\n42edb2a3-fc4a-4128-abb9-34a75763f3e4\nf09c5f61-deaf-4a0e-8b33-cb2caa2a2b0a\n156c2e0e-42b8-4f8c-9f84-920b8d557ed9\nb3cc24cf-ea25-480c-bbfb-0e96df0ccb69\n2eee4025-078c-4e2e-b28d-51f7ebbffa6c\n47f8d316-2044-4743-b72a-5652686f46fd\ne136a131-2dc7-46bb-93d9-127bd17dce1c\n9521278d-56b9-4230-a00b-650e9ac7ce7f\nadc40782-0019-477a-bf64-4543efdfe1e7\n4095871d-e5f6-4c3b-80f3-1f888772f836\n63510bc4-ff90-49dd-ad14-8a02f0948bed\n1fdb6ff7-2767-416a-9b9f-9df63d568f78\ncf9b91e6-7e16-454c-a5bf-e3442a3c0c61\nc70b894b-bdbb-4b4d-85e2-25d16daecddd\n32c365ab-5bcd-4f4c-8d30-6622386d825d\n43e745c9-0d0e-4fbc-8099-861bde4f085b\n417b8a25-56dd-4e8f-b285-e4996a834ddc\n68fceddd-2206-481d-a61c-dd8bec62b3a2\n70b2f4de-efed-4c3d-99aa-9b4f5b93c57d\n475d2fb5-c86b-442a-9825-2fdd1461fdc5\n9b2c5362-a4fc-4dd5-bc72-732b720d19eb\n42b4e7ed-6205-4195-8302-303dfd8f0686\nbfa4ffb2-53ce-4aa7-a09e-2577fcb84655\n9c0b20a9-16b3-4dc4-85cf-6c4237325db3\n40faa09c-e5d2-4dd0-bdcd-bba0528a7b28\nf5a73ce8-8140-4af3-98be-fec1cfd8f76c\nf53e8b04-5253-4217-a954-8beb3f4a8186\n0f11797b-ff70-4c1a-b5da-7bf843531aa2\n9657a569-2bd4-41a8-94a6-4895411d6f4e\n76dd1af5-f35b-4e0b-83b4-bd5ddc2f2c0e\n0acc2f61-dc42-4134-8126-bb705bec66aa\nb8076f7c-7e5b-49f2-9bc7-60568dc8683d\n046cc3ec-18b1-4629-835d-759e270bee36\n0363d8a2-cd88-41e7-a180-0846668bff2c\nd3a33912-6a0e-4879-9ed7-3faf0dcf2593\ne8c3c1cc-1100-4b85-bb24-5226202bc53f\nc84d045d-3f37-445e-b42d-03efa231e6bf\n1777f339-bf9b-4f0c-acf0-b9b350977090\n7d2b08d0-5359-4d08-9a63-453993cd76b7\n48acd482-d5e4-40e6-beec-e0317eee787c\n0eb9264c-1668-4987-ac17-45e326a4991d\nce242841-a840-46f9-895e-3252194c506d\n02663d21-99c9-4889-b2d3-5943880a9051\n41042398-22c7-4c2f-abf8-223cf836c31e\n1adf5f6f-0a6e-4165-baef-d8d36704efba\n87abb033-5a03-46e3-9422-73bbcf4e180d\n33c126dd-ed35-4fce-8367-c03701658769\n81802854-f929-4323-90b7-de928982e1c7\nd7eff5cc-ba1b-47ab-8951-da03e8b63936\n7e2e65ec-c6ae-4eb3-9e44-0c9d1a78e9d9\nafce59c6-ec74-4f1f-a0b1-e42abc8cdf31\n6c6a93fd-bfd8-426b-9e5b-da021276404e\n529210cf-c540-4a8a-8089-40b16707103a\ndd49d12f-a02d-4ae8-ad21-5f07863e99a4\n8d2c3f8e-4e42-4404-93de-fcfbb4bc9492\n2b3cb381-69f0-4e8b-971f-098d1031fada\n31d105f4-b0e1-438b-b999-558caa6e2555\n8c21a4eb-3211-4345-82b4-3e62343c0cee\n98e777bd-ea47-451a-8756-c86d19330d2c\n29239482-d90b-4bbc-845c-623491854476\nb451fcca-4336-4cb8-8d0a-d5141175e52d\n15312af9-a099-4b34-80f4-cf6ef6051b81\n358b7028-f807-4c5f-99f8-542760fb2c2d\n35b637c0-6c2b-44ff-b6b6-9e28f10438d3\ne506f905-0c10-48e3-a6ab-7f5cc58e4b5a\nbd847ed2-efcd-4109-b430-c153f665a7d1\n27fa9f55-f4b9-4588-9302-027dfb0e9e9d\n6fa2f0f6-2137-4d51-bc02-820d05ba5974\n5cab4169-347b-4674-9933-f69ffeda9fd9\nab37204f-a2c2-4004-9254-d404ecb0b846\nbf4f52a6-c33c-4693-ba33-ca9b52aaa6dd\n984a6029-dc3e-428d-856a-0021697b12a3\n363f9767-7307-495f-b238-0ff598ee956e\naf150ace-11ce-406c-ad77-6aeba37eb2ee\n3ecfc734-6865-4b34-a50c-4ef78f834cec\n69d26cab-23bf-46a2-846c-35b3c8f7c01a\n0dc9186a-e879-4ab7-baed-81356e07c7af\n8ffa6995-ccb1-4085-9881-80b578e77caa\n56510a1a-a057-4e68-828f-3dc9ac7ad8e6\n187be28f-ef2e-4a0f-879b-f6ff9be58b63\nadba227d-a9c1-4c46-9f5c-b873fd1914b3\n4e2ae6d5-49d8-4657-85cf-210ca46d3256\n4fc1d612-ce99-4f8c-a6db-008acbc17d10\n33c37ddf-031d-4629-884a-af0646776b98\n870b3fbf-4286-468c-910f-79a95ff98f39\n68bb99dc-a1b9-4ff1-b278-5ae3cea81365\nf16ac1a7-b1b0-4485-a438-f38483bb206e\n69d462aa-8e0c-4aae-a341-486077ab0ae4\n72603bdb-1fd6-41a7-93ed-5f916186cb7c\n68831127-3554-43b1-9f06-f9eeac034ca9\nb02aba93-dcf4-45eb-981f-6fdacac381c0\nb3f22178-a43f-41ef-8ead-c4fb8ef35209\ncd9a95be-8555-4969-88be-726a2eccde42\n5d61d587-9878-4501-9ee6-b549585c1c68\n1a3e703a-abed-4107-a8b8-5d6196e98833\n50fd0957-2922-44e6-bc40-52fb66d2ad2c\nfaefa620-69b6-4815-8169-70bbafe80613\n50cefc1e-8ba7-4280-8159-090ce0f7568e\nbf1a84ed-8aa8-471e-afaf-249efe9ba567\n8ebdf2bf-ddb1-42f9-8390-852ae00d8506\ncda561d2-fa46-4ee6-937c-d8b8ae6a6e38\n6bf5470c-8512-4d0d-9c9b-92c112537be5\nb6e5cc84-c405-4fe8-98bf-9b326e3b5536\neb1b62e8-4aaf-4e73-8dce-60d06830854f\naffe627f-c763-4b69-ba28-a640cb15e4dc\n61f418b1-5776-441f-9982-7dc0c4d66596\n33d782a5-06f5-4361-a180-fec5f67b40b9\n3f0b28da-62d6-48a1-972d-1caf5e20d086\ndf269151-a325-49e8-bbdd-3cff6f1bc191\n3275ec4a-b688-41b3-913a-64433e94d5ed\ne7681677-9f3f-4052-ac02-fb83fa41725c\n54a4c0d0-4abd-48ce-80db-2217692bb37f\na805e306-ec34-405b-aa77-c9287c6aaf82\n4752b1ff-f558-41e9-9244-55fce12f6f70\na7e52eb5-f4b7-4b45-8388-a57376b16ef0\naceab13e-edde-4ad1-aa41-190e33405e48\n9311be36-34de-49f5-84e4-4586a352ae2e\n5d3276b1-8d3e-4a79-bea3-fa30ae683775\ne80612fa-8d0a-4df4-8894-19b5d9649bba\n7eddd9bc-fbc4-4892-98a8-7e85b744be2b\n9876ce80-21a4-4234-9650-2ae184129c78\nd62ee37f-6817-4872-9550-c4ed5196b87a\n0f8a6bce-9071-40f4-952f-5e0535b41d9c\n4bb36114-6210-46b6-819c-5229d16d79fe\n41ead464-3547-41c2-961e-c80ba9bf9248\neb63e035-6dc7-4d87-9e23-10d3084a325f\nd7f92431-feae-4e6d-b8e9-f46d03f49254\n64aee1fc-f305-4596-bbd5-3789430852bf\nfecacc8c-5e24-47f0-957c-3329aa32903c\nf9a7a85e-b6a6-4889-a6d9-feca966169cc\n74a1e038-42c0-4d7c-83c5-c6d3557c9d79\nbc24fe80-42b1-4082-a9d0-49df7ed5dfa6\n82f288f0-b906-412b-aa4b-51e1a4bee8e9\nd1308716-cb05-4952-9a8f-a34975ca2473\nef7de3ac-726f-4fe8-81d5-998fb4c0f2a6\nb9a2e671-55e9-4c23-94b7-b967e8d97fd2\n37ad418e-992c-470a-b27d-bdb24d1c5a75\nb2c8d2a1-c063-49c9-9f69-741d189f91a0\ncc9d5940-7e59-42a3-861b-0e195f42f4d0\n9a3cfe7c-61a3-4d1f-b07d-57f26ea92ece\ne5585bd9-6f98-4c41-adad-c57c7f0b84e4\nf8084aa4-00b4-4cfe-a284-f206bfdc468e\n723facb7-da15-48b3-ba5b-112620db4be9\n019d3940-9dc5-46d5-8cbb-8591b9b926cb\n1f905e9a-6f85-44c3-b7d9-d4d03c4f25b6\ned1ab9ad-2e5f-4858-ac4c-67afcb17f7cd\n1737d4b6-f5df-4103-8180-a49ab8839a58\nb7238ba7-fd42-46f9-ab9a-31f3c935240e\n0cf4d247-da46-4f07-998b-329ef4b269bd\n94811c8f-2baf-464f-a097-fa2e2068822b\n5843a798-bfdf-4809-9490-f47d1fcb90e0\n0d23f1c7-aaf1-4285-a1d8-11db4b7cd214\nb631cb31-689b-4e16-9f9f-4056dddbd8d8\n744f01df-294d-4c16-a704-cb7ebd2f1767\nee8bd2bc-b0e7-4d4d-96b6-fad0330e5136\n94178518-2d25-45bd-b48e-84ccfa351134\n9b3c1ed8-41bf-41e9-b60a-5a7730fb5148\n758e113a-0f45-484e-8944-e080bcc04984\nec38566a-131f-4c5d-98be-1b7cecef40aa\n21dc3819-b65b-47b2-aa92-f7723e0482a4\n468f81e3-2d4a-4bdf-a054-421b14f6a300\n6e7f7822-2c66-475d-859e-4605452c62ff\n38736288-edc5-4d48-8ae8-b973bb0ec13d\n694d31f1-731c-4937-9e81-d2fb81ebe935\n0ac6654f-277b-4bbb-b674-58e71905b79f\n4818362c-d16c-4326-b0e5-931a55e994b6\n9a9b6333-d638-443b-b71f-bf7f0fda0385\nc3b4776e-10f0-4bab-8b13-fc8305613d47\n69d0b1a3-5424-4d52-a89b-ade06c7c7946\ne15cc264-aba4-4460-941c-ae6fbc8845e2\nd5e3cd93-7ba7-4c86-a7cd-aee010aac45e\nf2708305-23de-4974-a24f-1d5854bbe71b\n7c760f03-a97b-4892-aea4-c4ba221437e5\n32a20764-669d-499c-b7c7-e32070f70ab9\n4a822617-b1ee-4a66-9f0a-2399457b4ad4\n085d0b9f-0e35-4feb-a3ac-686b22c92b8c\n06eb1980-5916-4fab-8647-51ab9da44612\n93437326-6ab7-4ef7-a98c-565beffd7fa3\n7afe722c-398d-47a5-80d6-685d02960cfa\n0ffc1219-0f55-42af-9dd1-dc7d52c48836\na5901796-5fd2-4e60-b498-27207e6e5ae9\nd26d3be7-cd06-4310-8e8f-ca68ceb1505e\n4a524c2a-45b4-4365-8893-cc5227e9c0dc\n1cb1adeb-1906-4d9f-9861-f525ce4b5d6d\n40ba04b6-da48-490f-934f-17ac5a4c8c19\ncc7cb1d4-c880-4293-b3d6-44d05e87fc47\n96a884fc-6c75-4442-adff-9fd3fe193663\n09e146ae-1445-4240-9bdb-4d5aec34e6a6\n0794b2ad-da0b-4350-8026-1934085c7033\nf991e91d-0994-4a05-88af-568eb6e24a82\na46bb18e-af29-43da-a30a-a0d83d2837ff\nbfb81465-ea48-4642-8bc2-5ec946682f24\n149893d4-4b3c-4e25-8713-f11262e03b93\nebad9b37-1029-40ff-b2bb-952a4d6cfddc\n8d8eb501-c6d7-4bbd-91f3-f353f6f68b9d\n446bcf20-d6e1-4602-bd2f-4ee93358c131\nef9dc031-f5df-4be3-b14f-12c05a5ef6c9\n1797b572-4dc7-40c5-ac49-ce482920b257\ncbd1cd30-62d6-49d6-8327-5c82a550d00c\nacff2e8b-380a-4fa9-a51b-bd479ed32f6b\n8ca0d8b1-e1fc-41b9-ac5b-3400f52f9a53\nebaed603-bff5-4f3d-88c0-98c134a65396\n378f45e0-b482-4f72-b842-8d9d59d560c8\n3dc0d6b5-a5e2-441e-a915-1a3b6ddac547\n6d38bcba-6a68-4982-98c7-f994b0598f9c\nbd47e63a-d8cf-4401-a07e-29357f6460d1\n4580ade8-09aa-4d82-bd51-7a6bf954effe\n076bdcf9-b556-4fee-bc94-88ad7aad6545\na7dc237d-b8da-42e3-8c33-bd22331eca04\na53cabdf-8a38-4f8d-93c2-bcd5054f6e98\nf8ce01d4-9e1e-4013-b353-e4231df3c211\n305adc68-8d09-4fa5-ac21-5411a1724994\ndf0af8c4-3f0a-4693-800e-a49ef98bfcd2\n4a440df9-dc23-401c-adeb-dcbe71355fd3\nd862527f-b516-4845-ab0f-ffd1ae5c6b35\n0e8c84e9-f1c2-4715-8158-4e7423ee4ce6\n2e1572eb-de0d-4314-89cd-1e0597584fff\nf69e8c42-0608-4260-8c36-16aeb4cfdd94\n13a03c7c-1701-48ca-acf2-c33383d656b4\n12fd34b3-bd63-4bc1-a771-fca55f7c363a\nb12d9cfd-7e58-4c1a-a447-0414e8c49167\nf65eaeed-345b-455e-8782-e838418602f4\nf2e687df-6b9f-451e-9e6f-5e06d3bf86f1\n1985c1cc-7467-415e-88f9-6faca89db88e\nbe2d3783-fdd8-49f2-87d8-fbc293bbdc77\ncbcd0474-bd50-4c4c-a448-1c243eb412a6\n92988b41-d8a4-43cc-95f7-2c258bb9f645\n2eaa0810-0b20-4edb-ad82-e8de1bf2f971\nf13d90a8-cf0d-430c-83a0-c2b65d9598da\n473844f5-5a69-49e2-bf6c-b8ed5a7125c4\n2485b9ac-610e-445f-81a3-57ade55cc6f7\nb79255fe-551d-4ff0-aa53-29f858e44fdc\nf857e811-5996-4c8c-8e50-f8acea7c1d8b\nabfbdf98-695d-4333-a8f1-e8e92183b25e\nde7d887a-806f-40a0-bb5c-2a6fbda2820a\nf6aebe51-2c43-4fb2-bc17-0a2353535200\nad69ee40-e4f8-4289-bb3a-f2e8b3d2bae3\nc84854de-c800-4f00-93f1-16764c7e5250\n6a83b89d-2e4e-421b-a4c3-f5ea68933e92\na22f2e1a-baf9-4652-81a8-f781404fc5e8\n473ac534-82a4-4aee-ae64-862feea20e9f\n27f5fbc8-fb5a-40ef-866e-4d2178845fd3\n6be0ff0c-5b5d-4b31-b7af-ec1262b3854d\nb5fcf4b5-a047-4d98-9900-311c822ef402\nd72dc131-bc21-4815-9e33-8ff3bd93b6c5\ne3fc114e-aabe-4e9f-b09a-65613c7fc8ee\n4bc5600c-19ff-4bba-8ca7-4f5409f5f68f\na4a67c3f-354f-49a8-8a54-a51d693e09d6\nf39c89ad-8cea-454f-9335-3ec326f6f383\n3d76799a-9d8f-44e6-bda0-b4bb5f0a20b2\n331be43a-3ca9-40c5-b953-f9d5acaac459\nac1c49ff-356d-4786-b043-92e34ee9f79a\n673430c4-c492-4026-9930-730ec3412315\n8ba3224c-4e7f-45c6-b340-629233b97931\nab71eedb-92be-40ac-b81d-5cc409629aff\n7a8d005c-18a0-4443-84e7-df352632f34d\n1fdc632d-33a8-407d-9c3c-8cc4fb2e1525\nc8715b02-59dd-4b0e-b74c-29dd1d16b328\ne082b101-87f9-4432-b315-bf916d6fd35c\n78e19eb7-2efb-4bba-af0a-7bd7fdcad623\nc0657759-3766-4f04-b0f5-afe87095b878\n43b86ec4-0623-439b-822f-ed7575f3f6b4\n47523439-2a42-4fd7-95f7-4940dcbf6726\n6d47fa97-913f-4ccf-88a3-b0103da2f0d8\n52a7deae-1fa3-40a5-8955-c06ba1173c0b\na912d679-4a10-4145-81d9-86b8aef13857\n5d6009a0-62ef-4c84-8d81-6cdd2636f975\ndf7418bb-55ef-427f-96e3-0e83800a75e4\n5501e50f-59ab-4178-8e69-535563a1893f\n788cc285-ba09-40b5-ba9b-a1d5802264ee\n70f16047-9fa8-4a8b-8f3b-45876e634d2a\ne40e9c8b-791d-444c-af23-24505f05c377\na4e4c0c8-1d4c-4a5e-b922-92a245a15506\n06919613-fc60-4506-a93d-6e54fc81f208\nee1b1d64-7cfb-43d6-a3fd-f8dd4d3ef067\n5d2cf2f2-a490-40c5-a0aa-a0f62652cf36\ne47598ea-2af5-4e48-b0fa-9cfa4ffb7c4d\n8bda8a9d-28e3-4f6b-9b1d-840e9e2a96c2\n8032bd9f-b9ad-4cc3-a6a5-48a244b10c62\n9eb0bada-0210-45aa-be19-ee40a69fb62a\n092c1844-a61b-4997-899c-1549770973ac\n098e3423-357d-4852-9305-cb1176fc42cf\nfec3bba7-9a84-4854-a6cc-a0614fe5025a\n8db8390c-fe60-4185-96ce-2cf699c5a8b9\n9109b45a-f467-4105-835c-402b5e9114d4\n67eec1fe-6507-407f-9430-e825eb5b605f\neb2e7a1b-0d1b-4c6d-bd1f-c18c68d2d514\nc1012268-751f-4a95-968d-455e003cb502\ncf9547d2-2e0a-4bb0-a4ce-554fd0753957\n4a8fc970-33f4-4bb4-8d69-82a384c540ba\n344d624b-c34d-4805-900f-a5198c820509\n451986b4-38c9-4b50-b2a3-566635f7e40b\n794046fd-7032-4be7-b3de-8db0436424cd\n5de98e8e-b33a-46ca-bdf0-4f09e25314d0\nb4319c6c-34d2-4b71-9dea-488ab1557b0b\n84d08135-6440-471b-bda8-4d8d0b9e4dc7\n4aebc28a-8f2f-492b-b752-7ed7ff7d8fff\ndeb157a3-6d95-4760-b8b6-22e8b0164c0b\n95a30544-8300-404b-9f70-d3c362897879\n37c0a3df-58d8-407a-8ab3-da7c51e8a8cb\n5dc59602-dd93-468b-95ab-cd3d12ec9eb3\n2802c272-6b9b-4843-8cc5-304291319612\n7f62aecb-9f7f-4087-beeb-95b77a62cb6a\nf7aa4965-a1fd-431c-9d39-d9871ecd58e4\n405735e2-c169-4850-8b89-f40472b9e70e\n2f7ad164-7ab6-43e1-a4b3-7ff0f928109a\n5d9acf86-2962-4e24-8f84-d0ac1a5924d4\ndee24f14-74fa-4365-b60d-efb9242e05bc\n7b44719e-475f-4578-bbd5-424b90e2a5fa\n3ba5aa8b-c31c-4566-afbe-7ba92a2a8608\nfd854ca9-38f7-49d0-a5ef-49fadab94228\n707478cc-546d-4742-94c8-be2205459837\n855ad878-e661-4e0f-91b3-e9d95e17d888\nc2fb49c9-adc3-4e2b-bcc7-865fa08deb62\n5829c71e-d2bf-47a1-a47f-760cc2fd5d03\nb28accc2-5139-4020-b827-9aae965aa0c1\n32ab6352-a408-40c6-adb3-ed13607d368d\n188a6d83-357e-481f-996a-5d31a7936efc\n7c50cecf-ae96-44f4-ba82-5261d75b61d6\necd202aa-c8d7-4ac8-a023-f1781909f436\ne6448dc3-3e60-4494-8669-162856f99ed4\n43e5999b-6ca6-42a6-b989-2652fdd2dd02\n1e8ac6ee-f262-444a-8800-c02f653971c2\ndee03bb6-7c9e-4f85-a2da-c9db5c4ad716\n89d0e96c-e8aa-4766-8d6c-c536ec39e75d\nb14fb516-77e5-4c6b-9103-825668f69948\n912a2974-71d5-41d4-a736-bfe701f722a2\ne8b0bfa4-4b19-48de-ad67-01134cc69baa\n0eb688c8-1b6b-45d5-87de-63c1dc1e43ba\nf85fad81-d486-4801-8dcc-b3966df6e540\nf011e68d-c1a6-4285-b86a-6285e91893e0\nd1da9c07-d7d6-4a05-bb7d-f5d1ed5c53be\nac3da710-a798-4bb4-b846-3a6f4de2311a\naf15744a-2c56-4bc0-950d-757a21a3c5cf\nf4741a62-0985-485b-8c32-a1b764022252\ncc6815e6-1587-4204-85d7-36f550420969\n9eac97c7-ca80-4ecf-b683-3197cbab99af\n90fd0e3a-9246-4760-a4de-b8eac59219b5\nb3c6e5df-660e-496a-81f4-c96439f9d8a1\neb942e37-c27f-458e-a913-bc3120d129fd\n66dccc8c-2071-4ee2-9aca-8291322df64f\nfbae33a9-892e-4235-8880-a84807fb924c\n168907b7-6001-43b5-a217-cf5df02e94e3\na97d1e87-b055-4bdc-bd87-4af4c2aaa17e\n15570cfc-4e19-4efd-9145-d586f937489b\ne8256818-388f-43b2-9937-a7ef1b19e503\n7b8d2ef2-724b-4ad0-a172-900ecb4aaf0b\n07085a17-ebd7-4d92-9463-9b7569b29538\n3226606b-0837-4e11-800b-90b3db106314\n5d114582-eb82-4217-b44d-38c179b37d1d\n86d3f186-38a0-4252-970e-c9c031b74446\n2671dce0-9434-4e54-8b89-7f88a588e6ea\n620dd28d-92df-4b68-a0f1-a829208d38fc\n0163e6d5-51fe-4d6b-a8f1-c069f0be74c1\nbb45bf72-0462-4b40-9488-760e1bb1f6a3\n232f2d0b-2ab9-41b6-8aee-5b158372631e\n00bbc916-2f78-4f7a-8e5c-308560fda3ef\nc61bedb9-a141-4095-b1fc-a1026228f962\n15d5455c-bcd0-4a64-b97a-9b469a31c52f\nbff5b089-a170-423c-a176-a41a14f54598\nc90c23fd-956a-4f84-982a-1b2ce78cdd04\n8aaa768e-7e73-4066-a31a-7a3dc86abc10\n4c1444b5-180b-473d-9715-87cff40baed2\na89c20a1-a5a2-4dbd-bbf0-f0a72b2513cc\n0aafdf46-07ac-43d5-968d-18c50a0fa0e2\n3d0c6de3-9043-43a4-9781-e30cd4010c70\nceb0d719-4db9-42ad-b2a0-ada09bd6a788\n55dec33c-14d6-4597-9de4-8ef664737860\nc2c6657e-cadb-406d-94cd-db2ba119b9c8\n842eef33-b6f9-4268-8edf-cfdf170859d6\n03d9cbef-b329-4c12-9f43-5c6abb3b0c0f\n501e0fc4-dfd8-4748-9149-596f44a89293\n667e1877-ce76-45a1-8c8d-5ba652790e3a\nab5b3ac7-68df-4c18-ab71-3b35b7100b9c\n29faa019-6640-400e-b244-d21dd4092073\n185e66b3-797c-4256-b2ce-2aa7eef9cfc0\n751995d3-3190-456d-bc55-d9f09d07c1d6\n33379f51-e0d5-4d9c-8d9b-23d9b9419b7c\n30e76d45-693a-46d0-8752-fb4a1b524ec6\nfcd9347e-b296-451a-874b-61bdeb742dfe\nb44f77da-b889-49c8-9ca0-53a81d3cbc8c\n6ac7e718-9eab-413a-8b4e-0c73db44871b\nb98e85be-9e32-46e5-ad22-d424c9f402d6\n9ff32cfa-9793-4a33-9b3f-f823647f22e0\n73b6d0f2-f4c3-46eb-8678-65ce16b62b11\nd32beed2-b2d8-44e7-ae2b-3e6d0ee0a40f\n74bfc055-a394-4bf8-963d-bdcfd10e2b8d\n4d4c1029-65f6-4d55-a7a6-fb5ccdecd45a\nda820b3a-f5fb-4724-9452-d9aaac2e42a0\nea216d8c-cbb0-4e8d-b94d-cfafc3b0b014\n5a02b08f-af80-4045-8e05-c51fbcc15f02\ne56da25c-7d86-4ee4-b5f8-ec0f3c1f0373\n29314364-a0d9-456e-9856-33afff43130f\nd9b6dbbf-5ac6-444b-b036-d896570409f0\nb865157d-84fe-4021-a2cc-7be3e6308c7b\ne39e5a60-1d97-44c1-967d-d73a6911c87e\n369f2322-df09-4097-bf40-dae65aed733f\ndc8642a7-35f1-4264-bcd1-82bf9c1c4d8b\n88ebb469-fdba-425b-a45f-844d14593787\n41eb2eb5-fb11-48a5-9f67-94660fcab49d\nab5c4d0e-77d3-4279-b31f-4a31338f899f\nd01a8d5e-46f6-4e09-ae2a-03194fb82799\n2e83646e-5d1b-49c2-a6fb-a3646682c856\n10b2c31a-ab2e-41be-b798-7044f32def94\n8a1bc473-04b9-4d8c-94c8-736ee8e84bf7\na96e636b-b51e-4661-89a5-b8d6da30f3d0\nf3b1356d-f3e1-448d-af2c-21fc57101074\n088a269a-8bd3-4023-b283-07795de6ea68\n86282594-7e56-4e0a-990c-dbfd36eec106\n20c28da5-076d-4b15-9225-1ab2341cc5f6\n41483ac5-29f1-42ff-9a2f-b4226b98f2a4\n909ba05d-c411-40df-b394-2d4dca86393b\n0bec24ba-751a-401f-88c2-5382af30fdaf\n329ee7b9-11df-45da-9de7-f472ef05918b\n3d335c57-684b-418a-bcca-da168c0ab1e9\ncc337027-a34b-43be-94eb-dc8b915512d6\nd656fee7-e551-4ef0-b05b-35fd35cab259\nf348fcba-cd54-4cb0-9b46-a67c4cf588d2\nc5672d77-041e-4f22-871a-5cacace6c0db\n86ee25f6-7f4e-4cbe-bd63-6b12a1e35f7c\n6472dea5-90ec-4d33-ba33-6a19866f0ce4\ne5d646fe-5938-4d39-9976-cf0490968b08\n7e08ffd1-8ef9-45bc-9234-553f4d77caf3\n09a0f6f6-112e-473b-a1c0-8d78e296dc3b\n76484c10-4fad-41d9-a1d3-f9e2ecc349fa\n2c03c25b-605e-4ef6-8845-237ff03f623c\n7385b51b-1b59-4bdd-95a6-718e58785777\n4ca9c09c-6650-4b6f-a0da-d176f6f67ad1\nac2b04fa-6578-49a4-9894-e5b80dcbb0d7\naef6e191-d3da-4e8a-a681-08155813eff7\n0d2cb6a8-396b-4e5b-9aa5-83360de2ded1\nacb5bb6b-dd9d-4cb3-a553-26a41492d69b\na87a6f58-2589-4bb3-afe1-6778e098fc4c\nca7e3f99-f8c1-4834-8824-f269e569f327\n51028d5a-b9c8-42e1-b28a-e6cf84e9e22e\nd274df8e-7ca2-4b90-97dd-34412123d598\nc8b23393-380e-46a5-a213-cf580116f420\n4c6d7935-d6e9-4c9d-b868-de37fc6d3dee\n6665acd8-79b5-40c0-b5a6-c9e7a596c608\n7316df97-9080-4d06-b642-d9dfbcaaaa96\n1b79a198-2502-4500-b700-22cad9b3dcc2\n07e3f960-76f4-44dc-bc77-ed3450cd9bf5\nbaa5181b-c17a-481b-93e9-a97d1073bd3e\n93adbda4-1deb-4d1c-b1a9-ef39df3a2d9e\n06dd77f0-8e21-4670-b192-a2037ad79e11\naf0f4ce0-d5fa-4653-b2ff-69f31423bc22\n92c31cbd-a6c0-4fa7-bb8e-4887697002f2\n6f35cc8c-89bb-48fa-9b35-b08a921af09b\nacfaf1a0-97ce-4018-b20d-75aada61037b\ndd43339f-8bb5-4242-9eb5-03c66bd231c7\n4d00132d-951e-4600-a537-1099f9db106b\n785cee2b-325f-47ce-aead-4e00040ef36b\n8732b86e-622c-4bbc-b054-1379c4d88147\nd2fcb8d0-d8b5-4a36-8bd8-edefef39c763\n75450540-3000-4840-83c2-1e79669f1e20\n10350d74-26a7-42ed-aaa0-ce7f94ff8105\n5df95c79-a2b9-4e0f-98b6-9a862ad09218\n753f338b-fd78-48f7-b036-48b0cfcff4dd\n76c30ac3-ff0d-49ce-b08e-d35fd352b62a\n88727dff-2e80-4b26-94bf-784a7e92b915\n7290c271-7a53-4a1d-9e3a-b32c6adf3545\nff51fd7f-4748-4562-a768-f4dd4ff6da16\nd88371cb-fc8f-46cc-adfe-1c5262203878\n909b616d-1f9d-4192-8355-1cc5c7896542\na2f0152d-0fa2-42c7-9a37-a88e60a2a0e6\n0d091a84-3529-4c2b-9bb0-e3de18a5f8db\na335f07c-2a33-412f-a1e5-52f564cf0399\nb4333b67-aced-4389-81a8-b61c79a16f12\n974db8dc-624c-448b-8b82-70809c9c239b\n4f76a9e4-f49f-4e65-849e-50d76fe0994c\n532f8822-1e2e-464a-b763-c656e42b29aa\nef25bc2e-e849-4102-b22a-cfd3a1966a49\n8e97bd5e-ce39-4a9a-8ca4-277de3d3a993\n1448fd25-1cd8-495b-8f50-5c4b19a7d5ba\n471a99a3-01fb-4762-9ab6-b6f6fc4ff3af\n6254a8f5-0aa0-4e3e-bb39-4e5644606d67\n1d642dad-111a-447d-8799-738951afebfe\n07441731-d1be-457b-9eff-e465bc082d70\nb69bf36b-37f6-4495-bd43-539b4f36ae56\n3957407c-a78c-493f-9a6b-53381f2777bb\nbe710e49-413e-434b-bab0-2c41858a3810\ne6d06382-3e4c-43ec-89a4-4f9aaaddca4a\n0416b238-096d-4ce5-a5f0-a8f3f86ed645\n6cc19946-8c08-4c64-b333-b066d0abc282\n97ab14e8-bbe6-4f11-b21d-8823eab4e885\n55d2da65-281a-4ea9-964d-5adf6111b70a\n9e1e2e71-4296-4505-a3c4-4a64616177fa\neb46691f-dfa1-4497-bb66-9ab5162ec5fd\n207c82be-00a1-4011-82a8-7c431af8dfda\n52d91e78-bab6-437d-a8c3-d7ffc0710a73\ne210dad1-f033-45b0-8b52-120a5f7d10e7\n5a676c24-a2ea-4a36-b564-ac31fd7dab72\n259fac2e-feb8-41e2-a5f9-9fd8d6b2f2da\naa1aa440-dbbb-41bf-8b78-53f0f8ce58cc\n53296561-c4c5-4f40-b279-740e43a38b56\n9ae4b1cc-8c32-4b57-a35d-d42d2b3b45f9\n5a57cce8-5afa-4099-b201-1a681b36d749\n1524fabb-ead3-49ae-b043-e4c27e59d2f2\nf7423b0a-5b1c-479f-bf8e-a41a04164f48\n90f06122-9772-49e6-9d31-a20bfc9d1f59\n5f1ba2cf-bef8-4994-87c4-d23e22bd9717\nddfbcf90-d881-4190-9e51-92f7fe9d5c0a\nf059ed99-ac1c-4b6b-9533-4909fc693d35\n366030a4-031f-42a1-aedb-c70ac671f8a9\n9ed65d6e-1d02-4949-a41d-dea70ab395f4\n8472edb3-970a-4f19-b31a-072242eeddba\n623767cd-f272-4f21-bc84-cd410708ffea\n00999cba-82e6-4363-82d9-b225009f0037\n776cb2f8-fa5e-4ece-8ed8-f5a075081827\n60538e6c-9513-4243-9ba0-1991fb1125c0\n15b9e262-6716-4396-85d8-7c6fbaa0d0da\n24a4ba3e-3317-49b3-9c86-35ca2e50b430\nbe39dfe1-eafa-44b6-a212-0b18fe661731\n37eeaa08-642b-4265-b9d3-e476ec71c4a6\n63ec6d25-7acd-46e1-92e0-4e81d58eaeac\n2c5e36ee-9202-49ec-9994-6dffed8fa023\nf5c383ea-78f9-4821-8d8f-18488a0800c3\n54ba101a-77d7-41a1-9707-3f761833c312\n1e58be69-fc87-42ab-886c-bb4fd909bb96\nbf2e876a-6ce8-43b8-be3a-e8984559508d\n2de920f5-7a50-4c0d-a8e2-d62c20748e01\nbfdebdf7-6236-42a5-bcdc-593fcefef549\n5d97f580-9a05-4049-ad81-40e481820c35\ncbebce83-eb69-40f9-b851-ab869197f148\n2cbdff93-3497-4666-95c8-7e596a970660\n75766bf6-8c28-411e-95ec-6ced17a34ae7\n8294b33d-a47d-4644-a6da-68b0e4e7632d\n1942f848-01b3-42c3-afd3-ec8f034dbd53\n674b192b-938c-44d1-a1f8-ea8e001e2544\nd2440add-1460-4892-b6c7-6883a9d7b58e\na5cd47ae-a148-4bad-8177-08afd8d9774c\n725eddf1-447b-42cc-ac8d-ccc07e0d3f26\n66e68be2-2f72-4bb9-9bb5-3e7494218ac5\n6c1811ab-2a27-4aba-afc8-2ae4878cb5de\nf55d8aed-2b93-421e-ace9-e07df904b94a\n59e7707f-3444-4dc4-a137-71373ba60320\nb4cc744c-058b-452d-9f35-3a07fe360544\n0b844e2e-bac0-4fd8-b338-d37b60226e21\nf96e4ddb-a197-484f-a15a-f55d1eb74aad\n5e333fed-e635-4c73-98fb-06606974bc67\nb292d006-5f20-41a4-931e-0de2970b0981\n684d34a6-c28c-4eb4-9adf-39d93281dfb2\n02fd42d2-d11e-4793-ba28-e4781c7e1c62\n9a7a749e-41a0-446f-87e2-4e979c88dbb7\n88e2088a-7286-4cf2-bd05-d22be7a6ed5f\nd48a9423-8302-430b-aa45-b509549eb18b\n3a267c8f-682c-4b53-bacf-6940c4c2a035\n3fb8535e-d15a-4df8-b969-c199e6a1f1b3\nc1af4751-328f-4547-82cd-1c9855b70501\n728fad69-4713-41fe-9d07-b49306551042\n0b343b11-2942-4fb3-9981-06f4e4879c92\n8c612430-be23-43ba-b234-d287e131376e\nf4fee118-d4a9-402a-92d3-35062128df52\n69ba57ae-1d63-4877-98b5-7cae600476c5\n686ea4dc-bb39-4af8-80ce-220a1796ef0a\nd0432eb3-54b7-4710-b4d2-ef2cbcc39c51\ne821ceb5-5869-43d0-b73b-8d5ba6587d75\n83005e43-a54e-4c86-97ed-eaeb325287a2\nd45c01fc-9e2a-4ab6-82eb-75654aa575cb\n4c0b0fed-8339-4297-bf8c-a15f68b7d7c4\na6696f97-ebb9-489b-b538-84d8f5b09536\nb16b160e-0bf2-49da-b6d5-c7f252100622\nc6220b76-c100-4770-8fb1-e79ddeb7a1e4\n255d79a3-3253-45b9-81bf-f70d567f7b33\n83019af9-bedb-491e-974a-ecbb099c647e\nc17d1e76-4622-477b-b2d2-04ceb991f27e\n4a5ab8a8-1eda-4341-9fff-f3486fa9e698\n47121577-0a38-4215-a68b-756e860e3bf0\nbeae5121-cdad-458b-ae9f-6b309796bee3\n6df99f2a-aed7-4bd1-a6bf-d7e9cd3f2e7d\n78eb2478-36e2-4f69-b02a-3bd039f1166a\ne905d48b-0404-48e7-b7ef-a11135209ad9\nc8abd952-63f3-4614-b587-232b0e3a1783\n2270a260-afa8-414a-9eff-7d6fdff92ccd\nbcf70370-dfda-4e0f-a131-5a79f5dbe686\nb4f018f9-5834-49ae-ad71-b2d5f1780719\n3fd4dfe8-befc-4fb0-a76d-09807466b234\n9397e69c-37ff-451f-933a-dfd942c14995\n41cbce3b-60bf-4a3e-a989-d0e0d8885f4a\n108364aa-0626-4aca-a2ac-bfbf85601551\n9e6be571-45b9-45ea-9e80-54453807e93f\ne2d3347f-cd23-4da2-ab2d-2e1543be6e29\n860fb224-c175-42a9-b4d4-a48f32f77b94\nec52f967-b7bf-45ce-849b-6c5c94d5a1e8\ne394cec0-089a-442b-b2fd-03686f73fa13\n15f8cf25-8ce1-4109-955c-47940670a562\n9d332305-0d6c-40ef-a723-a127de6e381a\n4d98fcd3-0db0-4486-9508-8caa14a25dcf\n09ea0018-bd64-4442-b1f3-560e4001cee8\ne60d9720-d151-4382-bdf5-10a186aff095\n7eb8a048-8516-4a3f-8e83-999db0d76cb7\n17a0c048-79a4-4dac-b163-766ab96f07ed\na521f9cd-be5a-43af-9cd2-33b13478805f\n0bfc3f77-59f6-4c5b-acfc-d74508420442\nac31d4da-a43d-4c3a-a66c-ff9ef3fd8711\ne9cfcfc4-7bcf-4ce3-affd-5283203d79c9\na2ebf90f-6990-4d9b-bb4a-19cb4a411a9d\n1dd4c470-04d0-4730-bdf8-d3db4ac9f643\nb4284c70-8327-46dc-9981-2ecfd2257c0a\n9e22ca1b-3a00-4a26-a46d-925e8d719aac\ndf0d4872-fccc-4dea-92c1-f79df39826e8\nca6b3c2b-997d-44d5-ad19-0b993464ef98\n760a2a44-b46b-4963-b890-b00398a65616\n90db1eb6-4fac-4597-bc20-04b77a21f1f8\ne9702b13-aec4-405c-8f96-12200fcd05a6\n72d028ac-cd63-413d-8fd1-298f334af7ce\nf6889662-7f41-43c0-bb6a-78bbdb6024cc\ne6aeaf0c-f2e3-46d9-8892-287a89da5211\nc187b2c8-01fc-48c5-8f22-70f06e9862f1\nc3b0fa1f-f974-4935-a05b-2c142d1f20e9\nbf7e9a95-e060-42bb-ad95-aadd814d37d5\n0a612b7f-cb50-417b-a128-15b80f3c450e\n7300fdc0-e56c-4839-b200-3238219128df\n84e97d1a-426a-44a8-ba09-8708a7d68838\n76009334-a90b-44a8-bde8-26b73a5095c4\n46df0ce6-cfdd-4219-95eb-ccc93ecd9b6a\ndf761c67-1ebe-44f6-bc92-f7708f6ffffc\nee02cd98-efb6-4f6b-8a61-8b5b493367a2\n7f650ec8-1720-4b09-a245-aaf83fb51b50\n79509372-777e-437b-afb0-26718daa617d\nf14da0d3-68ee-4cda-9e7a-c272e99588b5\nd3b6b01a-2bdc-4199-851f-26973110bd10\n56c41010-b063-4972-bdd9-497e7c71f23f\n3f903004-0433-4c2b-a2d2-0066c3bd8616\nb938fb33-9ed7-4658-9b88-faa82443645c\nd6501779-4c6d-4886-b28c-48ee53d84cec\n9fe62c88-9539-4627-97c4-3818f83d8266\na2910e4b-49ed-4dba-b8f7-25e9fd333980\n7f3c4286-60ca-4e7a-86a1-fc4493891ff2\neea0b2d6-530d-4217-9bb6-3147fae3498c\nfe08c072-0575-45bf-8847-53a67340dee1\nc5e943c9-e76b-4dea-b55e-b83ada953edf\n6b9b1680-e4ca-4798-844f-5e97d258b1f9\n20d04127-ea0c-4914-a0ce-66a4f961b725\n94ccee55-8508-4b2f-97aa-d7367b0a1e3d\nb88c6d3d-00d3-4d40-9058-fda184a13fab\nb9fb2ae5-2ee1-4d2e-a840-d41843fb6a2e\na084c1d9-2fcd-4879-8723-5b8879e52e95\ne6b74e92-a26a-4ab7-ab30-48d3c3444b14\n2ae04063-c34b-46dc-839b-69e96ef406f7\n3a829d58-e36f-44ef-ab04-707d55f54825\ncf41c55d-cfdd-4849-a0d0-9bf48e0de246\n1bacf198-d969-45cb-bfb9-64317185f130\n80a2d8b8-cc08-44b8-bfd7-11afaa4ea3ba\nd3a4e6a8-c20f-4339-8e11-d327c67f5940\ne72bbfd2-6f4b-4584-9708-7b79f9c12ea2\ncebcc48e-6f80-4449-94dd-027a406f03d3\neaa37a99-94b5-40d4-883c-1f698348c550\n9661ef69-55bc-402e-8771-10a94e3152bb\neaab814f-485f-4596-afdd-58bf6a8e7e40\n24a3025a-95d8-4c77-a64d-95e77a1e25a5\nddbb16d4-2772-42c7-b2d9-6f15cb202eda\n9065a4f8-3e8e-48b7-960b-b0acbafcd907\nb9139723-b804-4f7c-8ce8-bd064b285121\ne6909667-26d0-49a5-b7c3-9a50ea3045ab\ne1606638-c801-4c86-8372-2bb38997b8b0\n64a71d5d-bcdd-49da-95fe-0086cf0c5ff8\na543b806-aa40-4a06-844d-988353975f88\n69fd2359-0511-4bd1-b831-fba97ed79e43\n670be18f-5f5b-41a9-863f-4a553c9de56b\na428c205-5d29-4384-a0f3-d829e80dc347\n0b942124-81e9-4ac9-b78e-5314c0b70454\necc0a4f8-ac95-41b3-8da9-acede573de23\n5b311581-2f64-4d95-9482-62327c857192\nf033c3f5-0db9-4698-b4ad-226764945b0b\naf4b6c98-1c84-4b26-abaa-d583dd6b8cbb\nd2ae6347-506a-4253-93e6-7ab07686bc69\n3b1b331b-564e-456a-9f6d-408b620ff0c6\n5896fdf9-17fa-49a5-b730-b24ed30b816d\n5896ec37-c001-4c71-b93f-adbf382d8b47\n85a54ba6-83b1-4b0e-81b3-3a98db0d7bdc\n5bc11dea-1ae4-435c-bee5-eaa1e78f17e3\n8b003d5d-11ba-40ed-8447-f602de664341\n7915a76e-299b-4ef0-81d5-047517af3f9a\n6eea87c6-0756-4c8d-86bf-f28b6d222051\ndaa7032a-c3ce-4a25-b058-1ffcfdba02d9\ne3a3e881-37b3-48e9-862a-9337973e3375\ne685a4b3-24a0-4bc9-a532-cf9179bd41c5\n418afca2-127d-491c-b410-5018c278825d\ndf48ce36-a0d4-4390-b237-01a1beefb12c\n82741566-dfd4-4585-a3c3-273ed4d1305a\n6b1ff9c9-7ebb-48cd-bdfc-381ec9d2971b\n0ede8b51-36eb-472e-adb1-04c89d0527e2\n12748921-3516-44f8-bf24-c644f157c238\n43a17def-821a-4366-836a-a8d7bf0c5bb3\n0ec03158-2188-48a2-9b31-e5f9a81dfadd\ne3e1ec36-315f-4f93-b987-a92207ee50fb\n78563131-e82d-45a2-89b4-9373a50b3a2e\n17c74842-3149-4259-8db1-93d21e9a0967\n9c3b31d4-2be1-466f-9bc5-c0b9de50a1d1\n55d23500-6580-4afa-b008-66fd9fc3c2cf\n3415a70a-4c13-4195-b90b-6b2ad14fc0f1\nde7279ce-78c3-47f5-8e20-41cb5adc68f5\neab73ad7-6e83-439b-9f45-3e22c97309c6\n67f778d6-570d-41ef-a271-4866aa108abc\n973fe178-321e-4557-be95-456427458c52\n30c23bb6-490c-410d-8d7b-8abbfea4b3b5\n07bc2063-8a4a-4971-a220-6724229dbe47\n1743bf64-7606-4742-a1f3-e369182f9edb\nb1f4bef9-3adc-42dd-8aaf-c26af7a7128e\n7d6ffe3f-e972-487d-b216-df8668dedcc8\nae23f5d4-7825-4edf-8c12-9702fa5cf1bb\na9c65db2-c085-42b9-88b0-c70766c259b7\n38f1418d-b034-4648-b677-9685f5f7b47f\nd040bff8-7d03-4de5-a127-9bd4a30634c9\n199c3ddc-2561-4ed3-bb82-59c16d10df8f\nbcbdcbe9-03b5-46be-bfda-e152266d0e63\n4011a363-e867-41ab-81af-4f1120a6a129\n5f7d2fcc-4665-491a-b39a-e076b224f319\n917424a5-19f5-4095-a9e7-a973996b2102\ndd80d9f5-0dbe-43a9-a47a-8134a5fd53b4\n927a1cf9-383f-4baa-8419-dfb0bfbab818\n161f8b86-dded-4af3-9e7e-e02bf250ab74\na48c3441-501e-491e-9389-0698468bee2e\n0397898a-6eeb-4436-9cd2-7ddaa329d0c9\n3e3296e7-f802-435c-9ede-c14c7433ffad\nbba14be3-dd32-4e53-a38f-9b157df493e6\nd1862848-2395-4e26-865f-408d0c280999\n8c5db8f3-3052-45fa-b099-bd1b0e365646\n225f56a3-4d1b-4dbb-a109-948712c63221\nfc53a925-6562-4592-aa2d-eb7977dac305\n90235582-5e55-47d0-9b32-ca1ac4d59d9a\n819d7595-5a9a-4bde-a450-c87a336c8cd6\nc61e9240-a6ad-4968-9fb1-0ba91a5a1f49\n5c4e830c-f90c-4948-a6fa-869b07b06699\ncaad4432-120b-467f-8814-564a3d78e96a\ne2d25563-e466-4c3c-a22e-8bb17a9b9f01\n41ebd008-6a43-48f5-b049-195bf9239209\n7b2d6dbf-a8f5-4bb8-adb7-e3166a2964ea\nfd49b582-f572-4ce4-be8d-9d4f03a87e95\n487ba5f5-84ad-40fd-b3c8-0559e9c7ef88\n9cf61f23-f0bb-4a45-accb-37a41939aee9\na55f57e0-e122-4746-9e63-c9eda4969af8\nc99c1bda-a6df-41a8-9a1a-3386c0972f2b\n134da59c-8262-4ea2-a2a4-fbc9d7d9d6a5\na4d9f0d6-4291-49fd-a6b5-12f17c42010a\n3b8f0bb7-b091-4b4e-a8ab-8ebb9a586900\nb59c244a-4611-4d66-9c34-29127b802b7d\ncb1a68f5-da37-43c2-8219-750c3c2da72c\nd7dfbaf2-2a33-4660-b40e-a4494ac48cc4\n15a6af6d-849e-455e-ac3d-74de97e0828d\n3e8b0cde-2e36-4836-b912-c648ef566bc1\n9c73d8ec-fafc-48fa-980a-f002762ed66d\n1c6ef6e4-b5b6-4e33-ab6e-27c52c0c4ac3\n6e8d8f41-fae5-4f17-afac-ec7ccafc2ffc\n514131a1-fa08-43b2-a1ba-19c9cc5cdfb5\n795dd9fe-842c-4954-85a5-fe3e6f98cf98\nc5ee029a-07f5-41a9-b666-c4c09ca9817c\ne16bb710-391a-4352-a884-cc37aca19682\n8f814c4f-a5af-4649-88e6-9dbf3c1e44a0\nb23a529d-4ff6-4860-8d32-07cc8c8b516a\ncde8085f-09b3-42ff-8ff5-e1d5f0d71a37\nd5f56718-7408-424a-8dd6-918b46eca7a3\nfa7e0729-e990-4e58-be6e-0e982e49efde\nc41eec5c-73e8-45d1-933d-a2f1e45c43ab\n09ff16f2-a646-4f9b-b12f-b93012d9f471\nbb169121-0c56-433f-9364-c0232461a2b1\naf553b87-00c0-4523-93b7-c5830e250f40\n4f17c978-99df-4bd9-ba95-0237b965856e\ne01c607d-0b42-4764-b2be-6de81f408462\n51179901-4ae1-4046-b25e-f33e0f314c59\n438363e2-11bd-450e-9225-bc924a7fa633\nf68506ab-cc4c-4f3c-ac4c-2441eed1e2dd\n34d80e48-8e82-408d-abf9-7a05f2ec30ce\ncf4b7e65-14ae-49f6-bd26-47fcbee85fad\nc9a726bc-1cd2-42e0-89ff-958109ebeb1a\n051f4f57-99ab-4ab6-aef9-ff20a5c55609\ne45ac0e1-16e6-464d-8ed5-9aa926d6fdad\n585b1d97-daf6-4aa3-b666-3993ae2a48b2\na8601b98-3f56-446b-a234-9941ee46e734\n0382cf81-853b-422c-a333-4ebc5615df89\n85b7decf-b74a-4388-8ad4-6b03fa1abdb0\n8be58e77-da74-4f1f-82f2-4ff892b953fe\n57f2559a-bee3-4625-8441-e6b34982f089\na4daf957-049a-4269-9a4f-1c1376052495\n16939e56-a5a5-44fd-945f-83fadadc83ef\nd7c2d8ff-ac85-4267-b850-99fd7b0290f4\nadfedbcc-576e-4d7b-b641-258669376b6e\nf0d02d64-4827-4aeb-af6f-ea3ecce504de\n82d44d93-cb4f-4ba1-9ab2-50c014f20538\n50909bf8-f14a-4b81-bc27-d8127f90ddc4\n367e5549-140f-41e0-91fd-f46fa46c0e37\na86ddb2e-2146-4efa-8dc9-422ddddcf3cc\n4ce6dfa8-214a-4850-9a13-c2dd3a603443\nbfe55267-b3af-4b80-8a4f-a31cbd657b43\n57df710f-8b50-445c-977c-bf6c835034a9\n067681d8-659f-4996-907c-7339a57e6761\n0d310c26-cda0-4112-b45e-c1cb4fe68586\nb193ff89-5635-40c7-b77c-e283e56689df\n59d15d4a-c1e7-469d-97c2-332ebcedae03\n3fe63bfe-c422-408f-99a3-6be39874ad41\n4a3a3093-85d8-487f-9638-ab6305ac8dad\n0262f604-1548-423c-8e9c-f2aefa3a260d\neffe6f4e-c767-4b92-a0cc-2080b5960935\na7c4fc20-f2b5-4d76-bbc8-896638e09414\ne23207e6-cd81-417e-bafc-b8ab63239fdd\n3375dc85-b285-4a72-8307-886ab20a9c0b\nf5fe8ed9-1239-416c-8c72-3d39c01f4633\nc1525ddc-676d-4ac0-bbc0-4b5ca8ffb6c3\nb451502d-bcc9-4459-8c47-bb57d1ac9eac\na0803a3a-b5d8-4d9f-ac97-ccd1bfd3c51d\n507b4b5b-6f4b-4183-a395-edc6a3e30a7d\nde723205-852c-4fac-8eaa-6685199314fa\n94fa2dac-3880-4858-8736-8094810eedd4\n99b82a61-b419-424a-a590-4848564b98c6\n316eec7f-305d-4ca5-b6b3-c37c5855da4f\nebbc70e3-a058-4742-9cd6-b9e2cad4d50b\n65c84220-ede0-4bb2-994d-a5478f54846e\nefd62c88-dcda-4d16-bc59-3d65da9bed68\nca665f80-b538-4192-9799-bf76b93ea0c5\na5b9efa0-0369-4020-895a-59786cb13009\n52746475-8c82-45c2-abbf-a5caf45e57ed\n8dbde4bb-81bd-428e-9c77-6d94f6be8913\ncf8b4198-97e7-4b42-815d-c63ce9c5679c\n59b27e38-5e0c-45b5-adb2-72dad1071ede\n9079c09e-b6f6-467e-b7f4-1180a52ba7eb\nba2fad05-c2a3-46df-b517-38253642d292\n9e85aed6-d850-430e-9286-94e49033624c\ndaaa1f01-0755-4723-8246-7554143c4656\n2a1c4136-f7aa-4931-aab9-4fe9404553dd\n339cbf27-1656-4596-97c8-a3de4e6b3c58\nd5727bcb-32c0-425d-8871-53333b3dd227\nb9d8a20a-0f46-4a0f-9dcb-5393632ec194\ndb1a906f-b2c3-42a9-83c3-ffc05e9b9c2b\n6d6a3263-b7c9-49e7-88a6-850b1cb3dc2c\nb86bcb84-0c7c-4247-be48-acb79283d8f1\n78e579ff-cc03-42fe-b9e7-864c4871ddb5\n62d46287-27cf-46c8-9874-0a3fcfedad2e\n4893f8d3-b2a3-4bf6-afca-01446f5c3a50\n00db7cb3-f8e9-4763-b081-730fab090bfa\n5b6dec86-8c41-4362-b541-3de715964106\nf4310873-e80f-4c5c-a9de-3d31cd280e2f\nacad0150-adb6-4dd9-b62c-47858d78b1af\n7fd72fa4-a624-43ed-b0c8-dc8abf43e1b3\nd9c47be3-b182-4243-91d2-87a0b9cadec0\ne5a9d1ca-1d0b-46dc-9fb4-2230c8e897f9\n5210afba-add3-4753-baec-3e9ad130e792\nb8a01dd4-91ae-45a1-be8d-de6a5d7fc3f5\nefd489f9-dcf0-445e-a5ed-019d105de352\n2e08502d-03f6-4438-8317-5e9cb6c35284\n2ec25946-7e52-4612-8d43-4a2850a41645\nf36c8424-2416-498c-a463-0609fa4d358e\n6ac84ffb-194f-4cff-a47a-1cd37e68037a\n51bf5035-c3b9-4a98-8f01-1b3ac7f4caf6\n425646a7-2f51-4405-acb7-b3997908ed0b\n59821192-733e-4100-94d8-3ba64bbd581a\n725f6488-814a-4974-aaa1-0cdfe2cdfb57\n8db35da2-65ad-43da-9ebf-7545a324c4d5\nd535d6be-ebf6-449b-8053-97a1efcc8914\n76456c02-e3cd-4f03-b6ea-023fdec8457a\n1c3fd47b-5df7-4184-a758-c3d411ae36b3\nb8f071b4-04a1-418b-a27e-a2730eabc08d\na1cd607c-5a1b-4b1c-a454-2b4b817f0618\n4d6f98c0-11cd-4773-98f5-9c518e88e142\n3be5ee4c-6af5-4ff8-a384-9732af520b92\n107e185e-822b-4d94-826a-d91d9d717d1c\nbafe1998-d268-4927-8958-5a4a5719b807\na4938a88-5c8d-4afb-a59c-7e54e0e14f63\nbc8ccfb5-2133-48a2-8f49-0391723eb7e6\n5f342f5d-9e02-40be-821f-f4d3ed05fef5\neaca9bc6-a45c-4e4c-afb9-c25c323b3ec0\n1abb9ec8-2f5e-42af-b0da-717c6234b5e7\n977d7f85-d31c-40fd-a063-f730841402f2\n964da94c-96d3-43dc-acfc-74b79c1f716d\n1c87be4d-b4fc-4935-acb2-a3b6b9b0da77\n78e18e50-8b33-4dea-8e9d-e5199476b465\n5fdf90cb-2cea-4d6c-959c-66b80a648a38\nec662c35-02be-43c6-a2bf-d5ac68722f86\n0002de9c-a281-4532-97ed-f6531d672b99\n26d286ba-859a-4b76-97eb-4e668208ab83\n18d56090-f9e4-4d93-9f48-00ce2e3838f6\nea24e186-5a5e-406b-ac8a-116ea88105ae\nd6134312-4271-4fa0-8e48-71482c906c46\nda3f9947-1630-4293-902a-bf398411309d\n7cbb3643-8865-4515-a376-968c6333d919\n98600939-479c-4e70-b449-9323b0e08879\nffa8a73d-2169-4863-b68e-e1b3458c31e6\na919d3e8-7d6a-46fa-92ff-67bdcd553eaa\ne75f2cbf-eb9e-4726-bf45-51f88ec386c1\n37ab8424-27a7-4ac3-b01a-6c3304f4df19\n81e44438-c386-4fb7-a2e2-e9f18a325b1b\n25be47e8-765e-4bc3-b3ad-3c582f0e5e70\nd1994c94-b8f4-4d05-9d7f-a839ad797344\nc9d5a2b9-6ce6-47fb-99ac-eb21b2ca97cc\nb5475c46-33e8-48be-a549-bb32b02638dd\n6d603961-5713-4798-b4a3-26c7f1b55d9c\n5696b302-72ec-40f3-84c2-0693b1968a7c\n28e8e868-95ba-400b-91e1-c8b73628e07d\na6a6f1ac-12fb-4cc2-b6a2-bf4b14ff7983\n96315c84-25c3-4daf-b360-9b7a25dfd4c5\nb0ec399b-80d5-4b88-8005-bfe97a822ca6\n0772a13f-ec06-45ec-9073-aa86a73dc118\n684fc3ae-6f82-4f9d-b4bb-06602fd75c61\ne792041a-8eaa-4ecf-9474-71af08614d0b\n199e839b-3c64-4c5b-a8ef-eaebe1904c79\n7461d0d2-4bee-4539-9800-f344a9f4b490\n9faf5645-135d-46fa-8fc4-af88f85944d4\n9214d83e-c540-4e43-88f9-cba797c14f70\n78263969-9ac8-490b-bac5-4d9dbb3d77b2\na4ecf5ba-ef24-48be-bf56-bc05f8188234\n62146eef-03e9-4699-bc5d-a0f3a43a40fa\n40d366bc-b996-4e8b-93a0-3df6f1a49747\n0aa645dc-45e1-4746-9640-8d5ded3d2e2e\nd0e13315-5499-4bfb-aecb-44830b985ade\ne5c7a806-1e4c-411f-b1d0-6d7af6c65704\n9bb47c38-699f-4909-914f-a204aa8c29cd\na9c960b9-84cd-4104-9432-870c76f7ab89\n07c21ee8-da2e-4bb8-b7a2-2cebc001b23e\ne202948a-9490-4437-bf77-46b05aac8d0b\ne5b8afca-e567-49a0-831c-babfc4e5782e\n13146804-cd5c-4757-89bf-54e82a9cd551\nbfdafccd-312c-4c46-95f6-c37e8b3aef14\n4560c558-ae0c-4410-ae4d-f7c2eb41966d\n245aef1b-a709-4d0a-b6ef-7106cab91a8d\nd48e451d-24f4-413b-b3cd-5a9e0e89e58f\ndcff0438-16d4-46d0-91d8-c8e7d3766531\nd50a3f64-75eb-40f2-8495-e3caa98fa25d\n579be136-a8c5-40a9-8fca-85b3f8c24da9\n80746f6c-15f3-481a-9d13-baf901ca9b50\nfe5a05f4-1b39-46f4-87eb-c9e02c95d70c\nb30db319-0a5a-4028-a972-6bcb9a651178\n2efdf8bf-2585-45f8-9797-bf5acd269df0\n8f2a6707-40ef-40f7-8a11-3c704d5cd373\ne191a117-a1be-4acb-a22d-22f4239b7d00\n9911264a-6c94-42be-bb11-386ac4441c90\n9071f3fa-d29b-40d0-ad90-82dc93b73e4d\n01c5c480-dabf-409e-9281-9d7f954b8acf\n8f73a445-4816-4392-ba4d-4d5e10ec68bd\n2d89d38d-b5ba-4634-8a5d-fc76023a62d8\n7c9a9fd9-3fa7-429a-86ac-3b2aac273e28\n6e2940c9-c542-4943-b161-d0fe28b643f5\n65d64c45-998c-400a-a5df-e0cd178b9904\nac3cae60-d105-4d99-b0aa-3f1aa6f352a5\na68b295d-56ea-4c21-8d9f-317b31817086\n6fcb152e-1c74-4020-b93e-ba29630da592\nad87f093-0b50-47f5-8c06-7d43b037af9c\n87b33c9d-3a2b-4312-9dd3-43bdef439a9b\nea0168a3-a32a-49c6-8a8b-52196111e1e5\n13dfc432-9bf6-418e-8792-d1ebfca58ed1\n83ce8bc2-97b7-4cac-8f84-757fb8354955\nfdbb404d-86de-4f27-8ec9-4d4b106baec2\n41680c6e-3642-44eb-b734-cd9d6152c9b6\n542c2cf0-9ffc-4dad-93e9-f437a145222a\nec8433b5-10e8-434b-8232-ddf6c0f4ce7c\n05c43683-893c-416a-b7b1-4cf2748ed5be\nccfdefba-6139-4644-9634-f36ac04c438d\n444dfb87-8226-4d20-a5a6-0db35e358a24\n6d3078bc-da83-4330-8343-c287ecaa9647\nf2da6910-b219-4b4f-9e87-c8014186c5c2\n0f6ab68e-7e67-43dc-a6db-507f701fce94\n36059c9a-d924-4f1d-9e86-25007b3d5e08\nfe519f39-7cb0-434f-9778-1247e8186725\n4b5e101a-1ed5-4416-a6a8-2ea1e68c8552\nbca75281-2b97-4a4d-aaeb-553cd4ec1f3e\na9fbb82d-c8f7-4b97-be7c-4b52a64276ac\nf0f09426-d0c3-40e4-b0d5-1c49f5a4a68c\n673f95a5-3bc4-4548-8269-bf4b1cd61d0d\n0fa4cfb3-c315-4258-ae6e-022a9b56cf27\n2108e462-388b-4775-a525-38d2bfc416fd\n45ba789d-dcb7-4523-a7b4-d8a46e0b5a20\nea35c742-2b0e-4e34-9af0-34aa14820196\n44081041-ed60-4ddc-8d3a-c5fa4508e931\n7d9196e5-d716-4106-a648-6e362bf6b05a\n460a4e20-a916-4a44-b481-00a3d8c889cf\nf2ed43a9-03cd-42db-9aa6-01f92ca4a219\n4c29f602-aeaf-47f7-88c0-88e8e6c5bda2\n96985918-e0a3-427d-9c07-e1933dcbf111\nd026ef01-38ab-46c0-9b1e-d93ecebb41eb\n727909eb-ab77-4299-aaf8-353efad010cb\n0c75229d-a3ba-498d-b341-befe9f1a6967\n19b0e7bb-97a8-4f32-b324-1ed643740249\n48c7d4e1-298b-4dad-84cd-2baf9d85e0db\ncc6a51ce-39d2-4078-a182-1d0e486e4cef\nd1d889a4-0146-4626-8b36-16cf01b1bd7b\na679c2a4-f22c-4bd2-8b9e-c7214f857e56\nb3a39637-d8c7-4d27-aa1c-817e59881f98\neb13785e-40b0-436c-965e-dfcd67b5466c\nad292ed2-cd3f-4d59-95b4-a91f1ef42c22\n0e4da75d-8005-4edd-8c30-de9ef554d8b9\nade24748-22dc-4372-9836-a16a1eec50bb\n8bd27821-90b1-45e8-8061-a8f731bc223b\nfdd7116a-34f9-452d-a41a-15cf8416357f\n817e4b6f-0b3b-45d0-9406-1f4db05c1979\nb793ba90-0d4f-43c0-84af-076b73773599\n0e57b8da-11ed-4dc7-857f-50a1556f0330\n9d2d58c6-990a-497a-bb0f-73738bbddc65\n51fe8bb5-308c-4a94-be4b-c31190c20609\n60e2050d-e502-4ee6-98f5-da3bd06651d8\n0f191f1c-fe04-4f67-a3e0-9a9d7da123c3\n7b572e59-e814-42e7-8e91-72f0a2fcb94c\n117b0a6a-2d82-47d7-a550-c266798c3a64\n30a11b6a-d864-4304-b2f1-d6a88fef3df2\n806947b9-cbc9-4e2a-945e-2f656bebb000\n22562185-2a9d-45d3-8909-709510bb6c47\ne21e38ea-6b94-48ac-9af8-84f1516de887\n6558ec04-c051-40f2-ba41-a14360b956dc\nc363b22a-cef6-471d-9463-d8bd9b3e6e08\n393b1768-47f2-4af3-a28c-94178148db70\n1cc91630-94c6-43ce-acd1-26f51ea1e274\nd8fe8b8e-626e-48e8-8788-c8a1bb654f51\n478f1464-ca8d-40bd-92f4-3c12c1b5dbe9\n5b3722d0-be9b-474d-a52a-0e33435bf2d6\n55148e33-0065-4e4c-9e78-1f4ff4a9172a\n1337d721-c3f7-4232-acf0-02c28d561651\n47fffd28-2961-4d3c-9c3a-eb08a7a8414d\n685bc5c1-a606-4bfb-a64b-79dddf92768f\n75d167c2-e764-4fd1-a760-5a14984ec04b\nfaa44c3a-669b-43c3-bafb-e701eb296828\nb555170c-7f08-4205-b792-3c2c1ff864bd\nb83b87e4-5bd9-4a22-927e-9f146313f89b\n7fe0e7ce-6c96-41ec-a2a1-43be70fc0695\n80448a0b-7577-47a2-aa0b-fd514b6cefdf\n6624c9dd-c64f-46de-addc-52154e17bf05\nf489ad7a-9537-41a5-beea-f7dc67a14020\n3c8580cc-ea4d-4fc5-978c-e1ddbc25b7eb\nbb43fafb-daa6-42e0-b52d-46e8db654794\n6f758be5-0c6d-4652-bd45-66f94351e4d7\n7b779f9a-0349-40c7-8f82-44dc50405178\n5905e0ff-aa3a-4c32-9fa1-08083a7b3501\ne3025d99-9104-4efd-94c2-16654aae6270\n04551e2f-250e-450b-a879-d76912399c60\n6e1aa092-71e7-4ea9-9d0e-7af0cab4a12d\ne6380599-0145-4a74-adfd-22dcb4e8a2c8\ndfe06f93-96a5-4986-ab66-d6be047610d6\nd50ae08f-3393-4139-a1da-2ed825c15176\naa6b8135-392b-4991-a623-eeaba15f758f\n4e8c5d16-d507-4680-a64a-5cc3e31e212a\n6c26f3dd-e2fa-4105-b5a7-2055e645ec19\n895ed060-148f-48c7-9571-e5744b85778c\n92a1b365-5c40-4347-a95d-84c45d903204\nc6aefb80-d86a-41ff-b1b3-84ea85076918\n944cb680-fa3e-4a58-b046-b2525ecfada7\nefea2dab-90ff-4082-8cf4-63dd8f0999a6\n60f0a4d2-9c88-4a3b-98e2-237d90f01f2f\nacc3fced-9839-497e-8b46-f2046eefc492\n9b04c425-0f25-4e0f-813d-29f9e6a87a03\nff6e32ec-a8f8-4561-91d0-575ed6677be6\nddd5c2b5-ff37-4c0e-817d-66f4863d80b2\n7fffc96c-71b9-4527-8291-b8cd0751af3a\n0b6f5c9a-089c-4090-96c7-fa1eb2a80277\na8e2aabb-6438-4420-90d1-f705d886bc0d\nef6028e8-4eb6-4a49-9b5a-8e7c209b1521\n97cab810-e35b-483e-95df-55c75dce6edf\n32a3d37c-9534-4ca4-ba9b-6081183cd6aa\n47cdb43d-d4ac-437a-9831-94eb409a40af\nf78d8f1b-1cca-4ac7-a509-076f7b836da7\n53db1be5-85c5-41dd-a5b6-95ad3a219f4b\n59eb91cd-a42c-4c46-8514-81d0ad8f8e37\n49b5dd07-4fdf-4e40-8896-054b0a7e23b5\n74d60724-4562-4564-9541-24b64875d465\n8638b81c-376e-464c-80ee-fdd8f9b2a0a0\n03f49412-6d71-4fad-8bb9-e71a906f2443\ne5b05722-36d2-46ce-afb4-81080599ecf3\n2c9f13bd-81b2-4973-9d2b-3b74ae14ba37\n45d38631-0c1d-4c78-85cf-b86192e379f7\n68eaff1e-1961-4638-abb8-b5b600282ddf\n40b4608b-8aca-4324-b669-442432c8af77\n9f3724f9-7b41-47c8-9ab3-a062e33d38fd\n2a776917-c9f3-4be0-a01f-0b84c69d0c4d\n14adb790-075a-441e-bd0e-b5ae1203d384\nb8cd2eab-c533-4850-9b76-fb70c1c56c85\n8e8d0d75-cfd6-4e87-b179-2d5793b86a6f\nc11ef9c4-81e2-4252-a88f-9def91f16a5b\na8edf5a0-4862-47ff-8dad-ffc54335a4ef\nae0aad07-62ea-48bd-badd-156ad437eeeb\ne798443d-2faa-4250-89d5-95702c12b005\n69dee448-8524-4e7d-8844-a807a757fb04\n6fbfc489-33ec-451f-8129-9878007a8f7f\n5ede17fa-31b0-4ab2-81c8-2d3ec0364d30\n7db0bbbc-40c6-4660-9087-01d695741923\n18d5b0a9-9d35-40e1-b4b0-77013ccdb86f\n962646b0-47ee-4d4a-b8ad-ac9227ab104d\ncc0cc89f-3109-40e9-8628-41b8e6c4fc60\n79e56173-ddb0-41b1-976f-e4e9d88e07be\n3dfed7d5-077b-4201-a264-4a1ac5a8bed9\n7fc6b198-7310-4474-bd64-c61ed8a81329\nef384914-462f-4365-9fd7-063bc5d33d20\ncf1d5314-0a7a-429c-b869-bdb49d13b006\n656935ee-d313-4997-8bde-fb9b76148142\nd0810fc3-2eb4-4aa4-8f76-e8dc2978e4dd\n5f29bfcb-2e5e-4820-96ca-657d70bfdf66\nc1bd6c4a-3120-48ce-938e-1a47e88755f6\nad09c383-57db-4a0f-95d9-3fbd72a5401c\nbd7ab96d-b044-48cf-9617-2ad213107db6\n0969c261-5130-4434-a4ce-cbd4ac918157\n987136f1-0caf-45aa-a2a4-c59a35573f7d\n80bd4144-ecfa-45ee-acc5-1f370ddd457a\nbfbb2ff9-1d54-4eb6-933c-4e78ba3eba09\n897bf14a-2d75-4957-af38-74bc70fdec49\n3be75d86-c069-4734-ad4a-a2b03ce7222d\nfaea6616-fa35-4992-a6ac-e12f60dd44fd\n3410c76e-e106-4fad-88bb-806ead159407\nd7209242-900f-4fdf-ad17-0aa7e52f7315\n18dc4514-bbc6-4896-8a80-718cd2e4462f\na2a22bfb-a43a-4108-97ca-1b6beeaa701e\nc9c7f426-d985-4955-a672-31c2185b6146\n08596044-017b-4a07-ab3e-60b6abec7b9a\nbeb55d13-af5f-405a-bf72-fb8b030dd11f\n262396b0-4379-42b5-b9cf-db1a8ce42a75\n5fd9ac3b-85c2-4f65-8e9f-43b48d3d3495\n668c1206-aa65-4d1a-8c23-43364e672c52\n25ee3b4b-33c7-4768-b9fa-0f52e39f3eee\nbd5f8859-2b9f-4388-bdd4-61174271ca7e\nc32c98aa-03fc-420e-828a-aaa4c1e0a269\n12e0cbf5-b60d-4f49-a175-ec5ba9695892\nffaddaf2-75f9-4230-a803-d686a68096cb\n4d5e0ca0-b4c7-49b8-bbde-27780e171fdc\naef23509-8e8a-49e8-8543-25607047da98\n9788340d-e297-4b82-a57a-5982bde7217a\n4b5a45b8-69f7-4ff1-be29-4f6960488d3f\ncef667fa-847c-4bb4-8d87-d198b0a753da\neac0e7e2-7eea-40f5-95b4-714bcd18f24f\n893dc2a5-53c4-4109-bbb9-20e2dcbf6cba\nf3a58e48-398e-44cf-88fa-16aa93f54efe\n7c7e8df7-09d0-471d-b3e1-67c21a3dc2fc\ndfa11524-df7e-4c9b-ad9d-0f29f6e05427\nedd0936e-94d1-4daf-87ec-b7eaa916e12d\nb6baf7e6-f741-42e9-bcee-fa52dc36f0a9\na071bdc4-d7fc-4254-aab5-4481d55634fb\nde7110c1-f4ba-4a75-b579-244122d4410c\n3b6703d4-4ef5-417f-b049-5812375a7d8f\n25d6e4da-de13-4605-9153-c72b7559089a\nad8a3916-0f63-4bd3-a36b-d5b994a08f2b\nf60a5dd6-18d2-4b98-8e61-2058e34d9923\n28327a9f-bf24-495f-9efa-532c656c836b\n390c9b7b-9b31-4cfd-ac5b-10e0ca0ee5f9\n167470b5-8c29-4040-89f0-c12348a36b6b\nd4e0eebf-1b1e-42b3-8705-8c23f6fd7eb1\nb2a65c69-500a-4835-99a2-85fba2800522\nff8ca3cd-269c-4639-85dc-906b9469f597\n6fb511f2-6576-4db4-8b94-b500d670e136\n1f157ee7-be90-4df9-a1bd-303b8b8426b7\ne8f717fe-3841-4f90-be12-b50d46496b36\n94b6e95a-cf90-47f0-87f8-0cefdf16aa6e\n67bb5d1b-bd9f-46ec-9c3e-b3949a0cc65f\n8ea066b4-901d-4880-85a9-c115587a68f7\n229b8635-5d18-4e65-924b-1dbfb2495351\n0b426250-2946-4e86-9421-b35e8549f320\n1806a6d3-d497-4223-bcc9-3116b777ce15\n0c5fa646-1fbe-426b-b1ce-22e8f559867f\n6327208e-272e-4b58-8052-26af71843671\n768b17dd-c255-4c57-bb28-4a654ff5ac2a\n1b390299-20c3-4f3f-b8a2-a3e9d2b73497\n3323fa12-897f-4bda-8c0b-6e163706d804\nef837df7-de69-4e0e-b03a-d876268a2a62\n79c90f80-8148-4f8a-9245-1939de3ef0e1\n26f21fb3-f123-4ac3-bed2-1d197dff9b4f\n4fbcad31-e3c0-42dc-be50-54aebf644a99\ne60fa704-b9bb-4d0a-824d-d3316f13677b\n4862c1d1-05e4-4df1-95e6-05eefcffd1a4\n029be1d6-0f72-4d9a-8a93-b52fb7061df9\n0a07895d-a766-4632-aabb-11d09e1524c7\nafc9c1dd-0698-49db-b4b6-8918c03a8a3c\nf53f5027-5d2c-4179-b2c2-f500f12a7a39\n3394a766-3e6e-4c19-8490-1913a322b62f\n00fffd71-3d9b-4ea8-9795-14c2e7bb9c73\nf8c564f9-7cab-48b9-977b-ee22d2381f16\n9f6c108e-5f8d-47e2-8f76-ccc86c36873c\nd4a46d72-ee8d-4d68-9b74-c160b00ffbc0\n37d6575b-7666-4950-ab25-6e60d1233280\n98a3ec2b-5c91-4568-86eb-682189a6b2d5\nc63f4f8a-5016-47cb-a4b3-0d1504abc7b9\n4c3682a9-e46c-4a2d-a08d-d57f2a054614\n398b29a6-08ce-4fa4-95a6-24c245499ad7\n06ad6e43-34dd-486b-a2bd-f7d2a82b2862\nd602442b-250e-4468-b77e-b434c18050e6\n150d6e6b-7a3d-44ce-9fb4-90bd63509d8d\n02068cd3-44ad-4a26-b3c2-dfbf63494b7f\n46014cd2-65b8-4871-8238-df015b5e83a1\n4feb4468-5174-4f1e-8ae7-07e5bdcc2ed0\n8d953b14-35b7-4a32-a1e6-6baba4c16d60\n6e21c264-49ab-4b72-9a48-b639f37e534a\ned136156-c16f-4d5e-9d85-e734cbc7f90e\n03657d6f-2e3c-4687-86cf-a17c0d0017e6\nefad6097-e2f2-4d61-921d-f4bb848b22d4\n3d6aa81e-1273-4874-8628-d440ae4eb116\n2d3a03f6-2a17-461d-861e-5fa6e9de794a\naedade5c-7b9f-4379-83b5-43dcf7706083\n1677bdb2-43e9-4eaf-96e5-d39587bb0c22\n58e09783-ac17-4e17-8b8d-a13d1ef5410b\n38b78e58-ae0a-46ec-809d-120f899bb6e2\n12ef0f11-e972-46c6-b29f-e29d874963ea\n77d8279b-6d0c-4fb3-8475-5c45f4a6a243\nd81af2c5-7036-48d2-aa7a-c2f4b26d47c6\n7f560409-c97f-4bd9-8e58-65903f36693e\n730ad53e-d590-4a83-8d8d-3c0bfea667ad\n0fa851e0-e287-4a52-845e-9e15aa3f1919\nfbc75a3d-4b45-45a7-833f-6f85c0ecdde7\n68437ddc-8edb-41a7-aeca-a76acf1b36f7\nba377b84-04ea-4515-933d-eb70653530cc\n2a22d7b1-4ff3-4bcd-9fce-30e0e8c304f6\n49af747c-4368-485e-aac9-be857b1438e8\nf982f49d-7d12-448e-b17b-2d5b7aca6895\n7504acd6-efae-457c-9d40-690dfc3631c4\n218558c7-895c-4cfd-bed1-845d4121e240\na3513c72-29e2-48a3-b26b-56db3836c396\n91a1a740-933e-4950-8c43-c94cdb095406\n2ee64c1c-2ec3-4c7a-88c9-4946d1bc1716\n75f508b3-8133-43c2-a9bb-2a4c47f0f4c5\ne9c32dd6-86b6-4fe7-927a-f7ad89771539\n82de7c84-6030-4737-8cca-4812bb9947fa\n04b1f82c-f049-4927-9592-9480268465fd\n012c48b0-c290-4cf6-8e5a-bca2b506511f\n3ddaf48f-ccd4-4ec5-a307-9af8e6a89901\nd8fbc9eb-f8a1-4320-9b4d-df012c1143d7\nccc2d702-55ab-4a9e-8f40-2ddde4aaf189\n93ad6844-2c02-40b7-bf3f-43a81c960951\n728715ae-0afe-4361-990b-6e59a4385f3d\n56fada34-c5bd-435d-842a-82e38de4e1e2\n34e714d0-6626-4e44-bc0f-1143c61075c4\n0bd52aff-b261-46a1-a6dd-1e1efb639a8b\nf7b5dc1e-905d-40ae-9163-b0419296407a\n4c6f76eb-7a63-4ce9-bd2e-3410d113c75f\n743dea40-a303-4f44-9300-a37e69f4a909\n06cbb60d-9771-4e0d-b201-49c35cef14de\n105478b7-1d66-4f55-9482-5fc35a34ee9a\n2c203eae-3c5d-4da2-8201-a9b894b5dc91\n9bfa1088-81da-4d80-8167-9d4e3762b6a7\n5366c811-82cf-4836-8dc3-680d3b99b028\n17ffcd93-1169-4031-84e7-93366fbc3489\n58a90cc6-4729-4f46-a38d-0a662390181a\n9d086e68-efa5-41a7-a31b-7fe4745cc58e\n2a9d0f81-bdcb-44ef-a58c-d02bf913d81a\n44fa897c-eb08-4a60-a7bb-8c4693d952e6\n9374a97b-ed99-4f1b-9e72-d2159279e2dc\n1b820f30-4220-4c1d-bfef-310af2a0fb4d\n11845f2a-bc80-405d-a5cb-01d1839eaef8\nd604f9dc-8e3b-483e-8d2e-f48e42c86649\n4994837b-8f30-400c-80c5-93aa51008e32\n9d284b39-0ce4-4838-9bba-1e4f1ffd5704\n008ad43d-2097-4a25-b89f-3d878344a654\n0e445539-28f9-4527-806a-fb8f5cef181e\n0482cfde-f109-45bd-a7bc-43cefaee8306\n7cd0dc06-fe36-4c60-afd3-bb66cecf49c0\n4b0dd751-f5ab-48d0-8419-d9ce948dfe83\ncba63ff5-cd05-4f6e-9c0c-19ee55e4be51\nff8f8738-f85e-43c9-a6d0-73a6c50a010e\n97c9971e-c826-4986-b5eb-651b04373066\n6c716e77-1cc9-402a-b0bb-e5173d2e4078\n9796f7f2-3682-4ec8-9e33-b39151f7ff30\nc3b69b04-6d43-40fb-a8c4-278941a1b001\nea5feaaa-6580-4405-bc97-3ec29b3bb3af\n3fe6c9d4-07b7-4f24-a54b-f63134ba41ba\n72431e02-7ea2-4a38-8295-e20cc59ae16a\nda4ecfef-354b-462e-9964-5391f91f942d\n3605f5ce-0a86-499f-8093-293f53489c48\n10d83174-f072-4edc-bda9-7a6cb812d5ba\n139e810f-11b9-47fe-9409-a30abb8cd0b2\nb443f8bf-b475-430a-9e95-8d66eb6907c1\n899c9534-a6a5-435f-9037-1ff99e1b5236\n5f37e384-da1d-4ce3-a897-d0a8421783e7\n956416a7-5aee-4c9c-a50d-2a9e939cc363\n4246767d-cc42-4409-a424-0261f5ce0d22\ndeed74c2-bcd5-484d-8627-97b8b889b997\n43792f26-64dc-4976-84b9-3c13ea0d0791\n5cad909c-a1e9-4742-8b3a-c04a4cc7c55a\n3f78978d-82b9-4b59-a367-1aebc0e7f5d7\nb2034031-63f6-4d3f-899c-46639e944236\n39c6e385-3a7a-470c-87e2-096fefa232b9\n06b3a1f8-8030-4597-b37b-7c77b616d45e\nc9927b34-9242-459b-a51f-89b80e5a2389\nb01ae681-f52b-4fb5-a627-a0c4176fc2e1\n7529983a-316b-4c27-969e-0e0b282f4158\nb20be23d-8634-4ddf-a157-6da3a116361d\n6c4a16fd-e246-4d46-9fa5-eac26998c0d0\nbd41eaf1-1343-4503-aaec-c73bd09d34d5\nc1489cc5-13c5-46b8-91b0-18feb18bf583\ndb485e38-c59c-4bd6-b576-c3a188d57a82\n41378c27-ec99-4ed6-a7cb-94e49f35f0d7\n366810fd-4d93-427e-88cb-ac1a0c413588\n81034981-726c-4b2d-ae61-777d7341bbe9\ne1da0359-a38f-46ea-9c50-8d56e6edc950\n1ac65f23-e59d-48bc-9293-222f4eb7c71b\nbdb107da-df46-4387-9e62-0f947b99f8a9\n72f9bb8b-890d-436b-8b12-b17e662c7160\n309e009c-cf1a-4fd9-9ac1-2b762aaaec77\n804f348f-c849-443c-be3d-1efbcadbd0c5\neae8a9e4-a9c6-44d0-a429-18193b5e4982\n182806d9-7b61-47e4-86f0-9e21c1083388\nb734c0e9-5244-4ea2-a310-f6cabdc1f22d\n1dec9268-327d-4fc5-914d-70f3c7ab0518\n25f9b7d3-3407-4d53-b6d2-6d85b2a31828\nc92b3b78-d209-4527-a87d-e1da29cd29d3\nee14a320-01c3-4205-939a-867c56dadf15\n8c49eb67-d813-4fcb-9b16-51b8fc29ad54\n9657bc80-a038-460f-b11f-7c4474f5dfa7\n3b0cf8f4-90e0-49b5-848f-c322dd0106b6\n951ad92c-fefd-4416-9a26-d36abc59fbd7\nd3fa1b82-8aa7-4b7e-bd71-67c63556a90d\n95422c5a-c61d-4276-b839-18552d46bb05\nca0ce8bc-eeef-4bb0-ac86-9b03ae46479b\nfb25e831-8c47-43ce-aeb0-57d6f8198333\n060a8ab0-9243-4427-8aff-b229bffe695f\nc9abca21-c0aa-438a-aa96-ca2a95c23036\n9654c777-8b23-4ae2-84d0-6e88024eb4cd\n48e31d7f-989d-4793-ae68-738f16a9c364\n69a6f84a-2552-4107-b608-20ebdfc52492\ncc1d46fe-f2d3-4083-b1fd-b19415eb1ad0\n83d59d95-b334-4d35-bf27-136f1183c7ae\nd1224343-04cf-40ab-b1a2-20e5a7bc31ab\n872d153e-8594-4895-9544-dd0124d2802f\n3db7d4a4-8850-4e3d-9694-d6530b3fe4fa\nfa9caacf-030b-4c13-a779-a372cf770838\n076773bf-7fad-4695-b391-a27408e5cde9\n89a92d2b-3939-4234-8b40-6869db27f998\nbdca7e4a-0dfe-4168-b72c-124325b7377f\n95a062a4-3ff2-4711-bcd3-ec7463330b81\n36769c11-b867-470b-b431-1e16ae507ee2\ndc2ea874-3f3a-4f46-b9ac-dc4cc7f92fbb\ne6922af5-eda2-47e6-83a6-f96353b3c4c8\nadaa1df3-61bb-4bda-bfcd-c9a2cdf7f0d3\n84df44f4-fafd-49b7-825f-f5b70761576e\n13e10313-21ee-47a3-bf28-a77f37512f6e\n57c5c689-ec66-4f86-b1d8-b383c60f6f1c\n65a30353-d8a7-4d4c-8e9c-65f3fa0ee85c\n7172ccde-7280-41c0-a86f-6d6f6b39f16e\n5019374e-9ad5-4ab7-85ff-8cecc955441c\n01845178-d199-4583-b1fc-9afa302645fd\n25d20ba3-60ee-4e0d-ba6e-8856e66e0426\nb31037b7-7092-4406-982f-0ef02724c1c6\n6feabf22-62db-45c5-872c-2b0473036437\n0bb73efa-a459-422c-b846-5cceb2a8ed01\n914f3674-0b25-4e58-b1c1-15a0c2752207\n6242348f-a92d-4b36-9223-4a9496eb1f8d\n0282434e-13d1-4ffb-985c-292251759314\n83ba0df5-2c59-4ae1-aace-47d7520e5c09\n9375a642-4451-462e-b957-3eb8e78357ad\n72654662-df15-4516-b573-2e41e3371a26\nb6b22e60-e26f-476b-898d-59b28bf75835\n641cdff4-0abf-44cd-9f63-26f663e2b4eb\na7a9ae83-f686-47eb-adac-b75932744e44\n6cbdf1cf-6c6c-4c6a-9226-00993c829c96\n0d39d57c-952d-4854-aacc-5efda54747f1\n6a3f5f13-c8d3-41a7-a98c-d6fe6bc0e9a4\n72673ce8-4a74-4adf-9eab-6dad2fd294ef\n2d77cf75-247e-4a57-a67a-8f2160a67636\nba21b6b6-d2ba-413e-85ba-b333f64fb0e2\n60781f05-822c-44c5-9aaf-a087927fc2c1\ne653f37b-550d-4824-9c17-73c11f0d4d2d\n3272c709-23ec-4c82-b18b-daad3b4483a3\nd4879df2-c318-424f-98e8-6ce7ab1653c7\n186af2bc-10e4-4fc6-916f-7fa471225865\n1b993c54-8fbf-470b-9305-3ff8fb3c1ef4\n903cf9e6-1017-428e-bbe4-81d1799aa038\n7694d76f-1183-4990-8636-df6b3b6a485b\n2afcdef9-3a9a-4e4a-9bb8-d35af9d537b0\ndaeed6d7-a3cf-47cf-93f0-c8d08aa9d551\nceae8683-5231-444c-a41e-199e12aec70a\n7d01a6aa-54f7-432c-9273-7dd61287b6e1\n5a68d736-c1ee-4abc-a652-a7c87d363ef9\ndaebd219-0942-4d75-b79e-25473157e6de\n6e101384-022b-46cb-8445-8ace36db407b\nd13f2762-3fc5-403a-a323-e9ed120d9233\n7ce0e7e0-a885-41cd-a3b3-bd0e50f774b2\naa55bb0d-1994-44f3-9b7b-fc51a90bfe82\n5ea63ed9-cd0b-4a40-b365-58efaaf819a2\n9be759d0-bb75-4863-958b-11bc579577fb\n454a215f-d5a8-4530-9618-0e0502026b45\ne8d2abde-255f-4100-9773-0a2540ad901a\n38f0d878-f6cb-4ebe-bd88-3b4889850bfa\ncd776c40-e982-46d0-9836-d3c46a5d7ad1\n0c65ad03-eda5-4e99-a219-76c0aebb6b7c\na9eb29ac-d324-4245-9e8d-6fac2b75e65f\nbb171511-5f74-421c-b631-34d79dcd5eb2\n63929410-6869-413c-b300-3437da1d9613\na697e166-d185-4d6c-b510-6e51a9df875e\ne0194ef6-743c-43ee-9845-eba47d63d052\nb85d68cf-6f25-47cb-8377-8d856a610ce0\n6afe19fe-6af9-47fd-b167-7224d49766ed\nef517d62-67bf-4025-ace2-017c25904546\n53b9b0a7-7520-4533-b884-0e794d32bb51\n7e46d6ae-c703-47d6-86f8-8b9968c4d083\n50e7c32a-556d-40ba-a1cb-283020b9b2ac\na4049c7e-1fee-4a2a-b6e9-10251f95028d\n686a0f2a-b658-410b-9831-ed0f55023114\n84b5fa3b-4b63-40f5-a657-c8dd84a4906f\nb7c49e6c-3a69-4de3-8772-caddd28fb437\ndafec560-b231-46aa-b314-14841c1a9020\n5d4c6038-501f-4e12-8ce0-9f66ee852024\n9290026a-ab2b-4c7f-9467-d0a2b70c0c17\n4fa3c54d-8d85-4dab-acf1-9ffa825a5bac\n68c84d62-11f1-41db-aa54-e51f63ba5373\n3a49fa2a-16c8-4cd1-98aa-5a2777094ee9\na8ce65f6-a162-4d66-b9ed-3d5c82211587\n53a259d9-9bfc-4388-9b64-7859250a4333\nc7ae4c95-1eab-4fe6-88da-9dbaeae17565\na7f4ffd6-db83-42cc-ba56-d64bd9b9e961\n9c7f66e3-706d-42a9-b47e-a65278371013\nd4b0e23b-ab6d-4a28-9c4d-782c20519488\naf4c4421-ea56-4d64-9ad6-70a6f24fe9e1\n5130b7bc-69e1-49f0-946e-e543428ce265\n97cb4af5-a028-4155-a2b1-8dad7f31d10e\n393407f5-ccf5-43b1-828b-b0a1f9ae11fc\n5e6e6829-4aab-4dbe-a24b-f6253b22ba47\n39bf25e9-9f3a-44a1-87a4-3e7ac54cc295\n8ed7324e-1838-468e-b6a6-622d3be4fbca\ne13ea4b0-25b1-4ee4-9ea4-6102c5092193\n96ed3b41-ab7d-4319-853c-c2bf54fe8b53\n2ba6e118-06c3-46ee-987e-428c20646230\n83d5a032-4802-4ed2-a28a-ce3c8712f11a\n4a2a6ab5-7bac-4040-8c67-f458b06f1627\nbd6695f3-bf01-47c8-966a-fa2276f498fa\n644e48ec-831d-46ed-9dca-fbd3a29bc835\n84bef678-15b8-4f8a-badd-5951e97f6f62\n5344b292-fd35-47e6-9466-247f59108420\n059ca11f-415e-4690-8c16-5f8138eaac8a\n21322491-3dc8-4cf2-a653-43325a36e14d\nbd7597d6-45c3-49d7-bcf4-33800c575ba7\n8bf004ca-75b7-42f6-9799-60ff0a2f3792\n669717e9-a774-4014-961b-1fd847a37bd7\na662b8fe-fd80-4d69-a8b8-2f3b2a84962d\nda0b1c05-6f2b-475e-a0cb-4699b43e1d1e\n667e0b5c-94d3-4aa7-9637-dc931ce997a9\n2dded39a-3a3b-4695-b610-083db7c8e87a\n9bd2325a-e3e9-43a5-a584-9b2f918bbac0\na4f45f57-63c7-4707-9972-92c2a40ac901\n49316e75-e4d7-42b5-9fa3-342727c9686b\n6c2fb2e2-6d6e-4768-8e5a-e4a0edb42d20\nc7084f90-b778-4d00-ba32-8939044ad9a6\n5443fb7a-60e6-4a94-aa23-329ea7d48f78\ne906ac58-7105-40b2-98f0-d919dc0c5d38\n7fd97c95-5398-4038-afd5-6b8d1a9318fb\n1b448ae5-9fe4-4611-bf36-b82c2b70232e\ndf8d46f8-9705-47b6-a26d-02b5735d2af9\n9b7b65b2-e2a7-4235-aae7-35a92bf2f144\n9031be21-9248-4c7c-b26c-40ca026c1429\n14ae8bcc-a0e0-40b6-a332-7f17427bad26\ne4093eb1-9e79-444b-8b25-f750e4e17b11\n8132085d-cc60-4c60-9a49-413d468198a4\n9f6baf37-b355-4add-ba7c-c63242d2280d\n897107aa-e0ff-4c46-bba4-65f20e871aa5\n91f6491a-bab6-4d58-bd25-777c1511a4e2\n20924b45-53c0-4022-ad77-2fcbb5ac2c8d\nf6841672-7633-4abf-9ff2-fefa88dd362c\n9fcd71ed-aaf2-4b3e-bf86-c15bd728713e\nca664f1b-50ae-4c85-871a-790c71ddc044\n90217b5d-65a7-4b74-86cd-53444cdf754c\n0e51dec9-aa0d-403e-8043-f8e9d4e96b0d\n673faf08-4d6c-4ce8-a647-9fe9674a7475\n26f2e50d-1071-4504-8aaa-7262dab9c022\n31afae2c-f949-4986-86dd-e8c7fef73829\n1fd82e98-a8fb-45da-b78a-03555ae7b3e4\n8682d5cf-c3b6-458d-baa6-168a2e17da65\nff1d6e34-95f2-4fc6-8145-56c24775be89\na77c3c4c-dcdf-4d27-8f49-1e72c899719b\n5342f91a-d182-4225-934f-8f394f72d569\n2ee016c7-2308-4083-bb70-17b831b59c68\n37e5fa36-735f-4236-87b9-8b77a9b7df71\nfe312f82-b4e3-46dc-9245-d123a7e5bc52\nb77372ee-9eba-47ac-a1a3-1741f6a4b4be\nd55a70e5-cdf5-434b-9707-b4418bfe5182\nd140dba7-c5dd-4651-bfef-0ab982d9c4a6\nd24e3087-a050-4ca5-a7d7-3c24bd1cddd4\n035248ab-641e-48fa-a1ba-5b26edf8b0a8\n9ddf0cc4-046e-454a-b747-0a61c43b2147\nac9ba1da-4ada-4c28-bfdd-8da51c338efa\n5a28ed04-79a8-45c3-b455-40675894c021\n7915e432-ea26-4e4b-ba5c-025e531bcf2a\nde1df3e6-5626-44c2-a886-2e027d342984\nbd52a870-0d22-41c4-bab5-e4305b1cc337\n8a09cc4a-0202-4350-b6cd-6fecbf63ffe4\nef6164b5-4431-4b61-a967-daf726fe7e2c\n3155389f-a3f3-406e-adf0-18eab45cb609\n0e779c21-3d82-4e25-b217-678b0552644a\n654b70c4-431d-46af-9819-4eebf894f62d\nd6fb8e89-4e43-4069-ba6c-7ea83ddcf792\n66acaf63-1b71-4b23-833d-0f2b48122515\ne530f220-2822-4247-8ff9-eec0918419d5\ncfa185af-510f-4a84-a63d-6d5a431913df\n55cb2645-ad3b-43ff-9eb8-633c71289a16\n1f4b3547-eaed-41ce-aea0-9a7671d148a9\nbc8600ef-4e86-46b1-8aaa-cb47f4759c56\nb08dac33-376b-475e-a2aa-79184f526671\n586c2487-e948-4ead-8d4c-06a608e7687a\n6e5c1cc1-d899-4e99-a730-9404ff982705\n0682fc1a-f9d3-487e-88c0-badba2b9e968\n5f44c024-1712-401c-b48d-53470bd815bd\n980d90b2-630c-4f8d-a59e-c14c2bf6d582\nb93f482d-4bf7-4954-bea8-fccac5f28589\nb6afdaee-0849-4097-b247-be6cbbc1a38d\n56eedf4d-1280-4b0d-ac11-0f42a387d5e4\nb77b344b-980b-43f1-a4df-c23ee3963783\nb55a93ea-4e24-41a8-bd3e-9f698cefb76f\ncbd36c22-f423-4c6a-b177-26fdebb3b59c\nd2a5de8a-484a-431a-9572-da7a0c1a15f4\nd45c906b-c8d1-4156-942b-c562dd7ee19c\nd5c52bd2-433f-4a7d-a723-486a13de8cf7\n37fc4dfd-f0f2-45d3-ae10-861edc8bfe09\n9add9ab1-bc0d-4289-af4e-920664f80ea2\nb5ac4f1c-860a-4562-a10f-2ab9f0d57069\nedf07bdd-c4b6-4c98-95dd-869b3987d8d6\n18876d70-717a-4920-8476-76a6634f9967\n034655f1-2d3c-4762-8a40-7c6583a66a9a\n0762a82d-1fab-466f-8afe-ce53e4a20857\n60cbfb09-eedc-4351-87a2-944d4316c6af\n63902cb6-9ac7-42bb-ad4f-ccb424aa9e1c\n17255647-f4c0-4e71-8822-7c6b51bdd5a0\nefda2733-df1c-48e6-8ea6-6be1d6f191d3\n32637bb0-3b48-4914-b23f-493caee48798\nc307132f-db29-46da-9982-20ede5018e16\n07712b87-1474-4ec1-8d22-c2a87a38ae0d\n16df1f97-8faf-4129-adef-511791cc3e0e\nabfbec3d-0fcf-4b47-8a27-67826016a9a2\n69cf16a7-2a2d-43bc-b83e-2c98e3104ee9\n9dd477f4-fe87-40bd-86c4-0bb8f43b3529\na971993e-d580-4979-9ff2-991babebadcb\n4dae4313-c84c-490a-8dd5-148ff6cacbec\ndf17a596-e152-46f7-9619-5b6a64cd94d9\nfe5f71b2-8955-40f6-9397-8835bbaa7af4\ncc9a60e6-ece9-4418-b094-a16e09731dd8\n855d50c6-9ff2-47e3-8431-e2b1b4457cf3\n38a29d37-69c1-447e-bedc-e0de4437fa1d\na83b1d1b-9a49-487a-bee2-9aa8defee7fa\n01fcabd8-4dc1-4a0c-830c-751223b79a79\ne773229a-e940-40e8-92cd-390e9a3199eb\n33107656-853d-4d29-8052-f41fe630d798\nc786a1c3-7552-4bc2-8961-c24b059b3bcf\n60575b90-da04-4dde-9287-2b3d86318aa2\n660ed65e-351d-4d67-88c6-607c8d31839d\n24614675-1dfe-45a3-9144-dc3499504e96\n5c212619-a859-4fc9-9dad-7c7b13c6f582\nca073129-34f4-4661-a900-64c86de82fa4\n36ed5576-39b7-4b0d-be66-a0e826acf731\n8179b2f5-1428-4455-8bac-e0ad82ff12f4\ne669a171-289b-4f74-90b7-d2bbe0c02377\nbcb45381-4f3a-4d32-862d-40a5ad52bc84\n3cf33469-5fd5-4a93-a2bd-43d022bb9189\na5753ab4-bcdc-49aa-a053-0324733096bf\nf15f46c2-b3c5-4346-8c53-1b7ebe2af0ab\n57061ca3-f368-46e0-9352-f6ae40dc944b\n6d936bf0-379d-48c5-802b-fecaeb4dc9a5\n40ffe443-e26b-4350-8f38-880ca1c1bef0\n95c7dee0-1293-4a3b-acfb-086594de77f8\nc94a51cf-3238-436b-9f0d-43396eefd54c\n00d3972f-0d5d-4b7d-aadb-54327e74ff7c\nfbb67a16-198d-403a-ac9f-e257c5823cb3\n70a4811a-2ef0-4186-92ca-c3717e8f9ea5\n1c32b142-ef74-496a-a97c-1acc3371aff8\n83c52c13-177c-4951-bdd1-dd12f30ed472\n48a79b2d-7d21-4c78-b484-f99cb39fcadf\nff6df075-7cf4-49b5-93d5-8405980ab540\nbf24f159-c215-4de2-9a95-a530870e2558\n290ba3fd-3200-483a-b570-e0a0879767a0\n5e129a66-5812-48a1-bc83-667e7406d257\n72797e40-4169-4732-9860-1dc76d3177dc\n970297e6-6f73-452a-a360-de0785c4f245\na0c37b62-d63f-4a09-8473-d5c7cb71ee93\nea01db5b-2e3f-4ce9-ada9-a30b17e80911\n9cc74a1e-2b05-4af5-b4d4-546b40bc0d65\n3db32837-37ac-464e-9241-15c74b6aff7e\nda8fca20-30b5-4bad-b607-d0ea138b1221\nae6ff390-b120-4e5a-a566-d3977a971c1e\nccb3b807-dddc-49aa-9ea9-cded6e5a3d6b\n866ba676-1a7e-4d9b-846e-dc9d6a814e8e\n426ed847-386f-4ca0-93be-9551a0f61462\nf884bc21-d1d1-40dd-9e05-b0eb2c82879d\n7437d3d8-5747-49ae-a9a5-5c2e0a9c964e\n96ca149f-fd18-4356-ba0b-2cf77359892b\na2f6380b-ec01-450a-9f69-1098a3a51d14\n7b62df8b-5e08-4358-8542-70ccf09dabd8\nc972f34f-7cd5-4ee7-80f3-05e58979fc81\n770daecb-2ae8-4174-881d-4421efa78078\ne14840ab-5a75-4950-a346-c9f546138cfe\na47d4572-405d-4ecd-9431-92458a05a814\ndaaa52e0-4a44-4c72-9238-7f5ccdb3a644\n3d8d3b4e-0664-46c2-907a-09767ee488df\nf3d4ef2b-ed9b-457c-8d53-06414685f0c4\n4c31d3c8-7a1a-48c3-8e85-71daa44d3c5b\nb788433e-24a2-4364-9d3e-1d82e4aca52f\nf328f758-c388-4c2d-a258-67ac03388b44\n49b61eda-3e9b-4ec5-ae0a-81e32946ad1a\naf04b28a-3fde-41eb-b9d4-643f2e88e08e\n8e858916-1d7d-4e24-90f6-00ed78d879d9\n5d2c1250-ebc3-4467-9ffc-0c80a1762aad\n0a2ac658-331f-4cb4-9114-249ffd5eac73\n8a087a0d-2bf9-46a0-8cce-cc0af6f896e9\n7015c6e1-b2a9-40ef-967e-c6685e45162d\ne694f7f1-2f95-4b45-a944-dd0aa0267504\n5d785522-2c80-4404-847f-5595ac04c0f1\n220f8dd8-3f13-45cd-afc4-fba0c5e31ac6\nb47008cb-f43c-4923-8ece-de021a97c419\n1580865b-0811-4ab7-b3bc-ada046aba956\n3ec5fe87-24a9-41b7-b2e1-042b76a03531\n73b470ee-4c08-4a94-bebf-20c5eb44c18e\n6b586f6a-12e6-4996-a802-a332e7722d1d\nb10d61cc-1dba-45c3-9798-22fd57a90c98\n653b660d-866d-47c5-9ad5-f4946991974b\nc8031f61-1d98-4d0b-baca-d04023e001f2\nc89a6012-111c-407f-8110-4dec30616a07\n7830a52f-c086-4771-b88d-650e4b523329\n03bc0463-0920-416d-b5f1-9d0da42fccab\nfc759b36-4a79-4d81-b970-34ac87416057\n0be01815-08ef-4d59-85de-f54ed832b120\n2563c39d-f959-49ec-bcd2-e15ee3216402\n231eaabd-2444-47ea-b61d-943a396b78d5\ne0db3859-783e-43a4-b640-302f129b5513\n486168db-35e1-492d-aeb9-b2fee567103c\nd54bbbe7-b5bd-4d2d-b681-87e6b98f0d10\n79ee4068-1abc-435d-94cc-359750a1b807\n681fdd92-f7d9-4c79-829e-3979644981fc\ne55a904e-dd98-46a1-8f46-b923ba3bdfb6\n36eaba1e-d8d9-4a1a-bdb2-75efdbf91c70\n3fd9eb55-ca69-465e-b4cb-13d48e5d0bd3\nd5aba77e-4083-44c9-99d8-f7d15473ae9f\nf2c5976d-6007-44b8-a2fd-3942108606f0\nf0fb5e5d-b6a2-43ee-baea-be1116c71eee\nad2d0d39-3c69-4d75-a15a-869ee5a9d0b8\n8527b7ab-cf28-4324-bec8-2be19bedb443\na20e7ec8-598d-42ca-b787-35f14aac9ee4\n67fef8eb-fcfd-4ed8-a148-e652664cb6dd\nf79f056f-3ce9-45ad-8e59-4a0d27b002f3\nb5a302f8-0dc4-427c-aeed-f0a767563b61\n72b1e6a3-3d6a-431f-b18b-a3fe4835f8d6\nb8a8eb98-03c5-40c9-8786-9b632294f3bb\n251c716a-735c-4686-9fd6-6e0562e1aeb1\n9acc3e40-a9dd-4728-a33f-d8d04ac21182\n4335dd4c-852b-40f3-82a7-037fa3a12c51\na4dec2d4-f51e-4a84-8580-8ec2c4c012b7\nab1c1afd-9bbf-4729-bc23-5969b2350273\nfe787a8b-b32d-40b9-b788-61b8dc3fc1cf\n4a903dd1-ba52-4217-a5d5-ae2218c8295d\nda57bab0-d510-4fad-ae90-ce48ef5ca329\n8e7d05f8-e21f-41a9-9947-a18492a4b24e\nf60e7545-e618-4e6d-b380-04d50d00652a\n845daf15-b70f-45e7-88bf-633a1e5825dc\n1764e125-12ce-4aa3-a092-3475da7e926f\n2c7abd89-2ee8-4e66-8f49-3f1ab12ca5d7\ncdf0c586-2974-49fb-b87a-0c229db59a8f\ndcee22b3-1126-4004-a20f-bc53cd40b3d3\n404bec83-5eed-413f-9169-9b76af01a6b5\n438fa080-9d44-45cf-891f-5dc6f5f7d0b3\n89b91fb4-18be-4b44-acd7-d17389bcce03\ndfe66af1-29e7-4d21-a4e9-285e23c7d8b2\n66c2564c-2337-4b86-a538-65cdc9f90a0d\n51fbfcab-71ed-4f13-adfc-96d464f46938\n3ea4e9bb-4308-4746-a6d2-99175ef2f252\n31c55ee1-015d-4f84-92c3-b577ec71f949\nf15641ec-de6d-4282-b38a-462e1e3cfd5a\n0b0e119d-648e-43d8-8288-0e1e187c5a25\n6d9c9475-1986-4a9e-ba23-ed996427d1dd\n75842142-ba94-46b3-8140-42d2dd934d2c\n37a56bb4-07c2-4a9a-b9ef-a260a91932de\n89309285-791d-40e4-bfae-72acdbfc1395\nb3487cca-e978-4f04-97b0-dcdd0d9b6383\n4ab5815e-7df3-4615-8f12-12ac70a36c0d\n024a1710-3708-4f90-8b52-d6748b4ed8df\nc6263516-07fb-4249-95a2-37575d23cd81\n216aa862-5705-41f4-a0fe-0d3d5c94a0fb\n19f8bf79-9977-45cc-9fef-1ec484d3f1ec\nd120161e-c36b-4ab3-bb4f-6ea780859fc2\n2c2f26e6-e3c8-493d-b8ea-277ce9a6aa11\na7ceef55-dce3-40b2-abfc-6b367d7b97fb\nb185b278-59ac-4f5a-8a25-6988eb8c6aa1\nf602a316-966f-420c-8e9c-346071e7ae67\ne10c87e8-152f-4902-ae9f-b05371c18619\n58024404-71d3-4962-8d75-91bc305d6a54\nc069af2e-7f5e-4a83-9472-6baf00f334bc\nb105b4e4-01c7-4e87-9837-2bf826b90ca8\n5d4baf8a-c332-49e8-b787-bd0471bcec2a\n22d6503c-c165-4350-8c1e-234df8ecb81c\n6cd8372c-fa57-43d3-bef3-41b7bff52490\n09c051c3-53af-455f-bc40-72d1dfee619d\n76de625d-4ff8-47cf-b4fa-e67711823138\n0bb1f329-e373-45d4-b3a2-4570a4650c9e\nbac23d6b-e3ba-4a01-ab57-36d2d6bbb22e\nd436f39e-94c7-4643-bd3b-803a451dd654\n8c944925-0b13-4423-97b9-14d6c1e1ec6a\n5dc1e6d4-3bf6-4d9d-9d8e-a5d0fac9efcf\n07ea12e9-b0bb-4bed-88a4-9b7bd7235e9d\n2f80df70-cf32-4b81-92dc-0a2534ed3857\n61e788b3-61f8-4071-812e-0384c0b26356\nb0b53af4-d703-4d4b-af54-cb77428d2b66\na8df93f5-f4ba-4342-9db1-9a4d62ede0b5\nc179de1b-742d-455a-987f-01a6805c3634\n17d5b9e9-b23c-463e-99b7-fd9c2e50cd67\n461cf28f-a304-4306-bbcb-6841155dd165\n80681442-1b28-42e3-9625-912991ce2d76\n0c3a6dca-fb5b-4d1f-8528-237ed5e62e10\nf75d4ec7-3f74-472a-af7f-b96e76d35c75\nb4a82b4a-00b9-4984-9a2d-b0673d4e40d0\na50209d3-c4fa-4b7e-afac-0e0452770317\nc1a7b3c3-1c4d-4721-8c90-dcbe949d347b\ne68ec64b-4264-4d17-a77a-03f9ec2ffee2\n3e60a5cc-2b48-4cb0-82d2-084358c0ef2b\nf94187d1-7b31-4d4c-a16f-530e575252b8\n691f78c0-2833-4b0e-836b-0cb87f0a706b\n74493d32-2e7d-4ab7-9628-bc3545251e56\nff3e5aaa-81f6-4cfd-80f4-f201e08e78b1\n5153b1f6-1d01-4b10-920f-e34d68ad650f\nd9a1eb32-9eb3-465b-a38d-b153376dd88e\n8425cebe-953a-47b3-b26a-7d19e2adf5a2\n20bac5f4-42a9-4ee3-b8c5-1788b0a4dc57\nae8fe2cf-2f5e-463b-9251-57b9d8503a41\n376e96eb-4d7c-4234-af1f-63846d7b503c\n553aa30b-e787-48da-8ce6-28fa9a58f346\na361d6b4-e4d1-4e29-96bd-c963915c039f\n1d128ba1-1e94-4d9d-b85c-cc82259811ee\n14cbc217-18b6-424f-aff6-adeae36456a9\nc2df869d-6e0e-4335-8f85-c0d9cef209d6\n9982e98b-3d58-4e10-a1a6-90c65516e25a\n14edce39-0465-4d4d-8f02-a6ebf6c345ae\n7fbcb052-9b44-4b10-b3db-ee35f3d30203\n22d12a71-d977-4695-8f03-b06da141f092\n69a427c4-d307-4ba2-9b64-9033c6f9679c\n1aa88d24-7e3b-4dea-b084-39fd01e2ec7c\n71239f4a-8b46-4f8f-b826-b3475cf48770\n0cdd04a7-1929-4cbd-a480-8f04270a6d1d\n5395c18b-4385-4562-b30b-f5363c292b02\n8ab22ab1-27dd-4e69-a5b2-c7c25972cc8a\nca767602-11ae-4275-b3c4-d91fafd6d57d\n3571a9ec-a49f-4f26-a36b-97d87839be92\nd013c24e-4449-4eab-88f6-4a53556d323f\ne9f7dacd-d17f-4d36-b0a0-23011c51de51\n95695ff2-3bff-4239-8d91-b240f92fec4d\n893f3827-f000-4c1d-9a5e-d39289fcafc5\n5b0e3f4b-9fc4-4796-a2d0-7eb7344927ae\n006eadeb-abc5-4dd9-876c-a7cf6b3182d1\na97519b5-a06e-426a-a016-6f8186ff5c25\n7bd50561-70f2-4270-bb23-684a0e04d554\n810a5dd4-e6ac-4968-bd44-b5296c519348\n513aec17-a9a6-4939-84ce-645e827c592e\n74b242bb-cce0-49f1-a742-1c1da0f80e3e\nb3293792-f6ee-4711-91fc-df38c4c96aa0\n201b4c35-4c8e-4da9-ad47-2745f845c114\n0b4ea4cf-5a78-4410-b1e9-358b74bc469f\n7e723fdc-269d-425d-83c7-8c78f99fbc02\nada51def-39ca-4b17-baaa-322fbc9a3067\n4b272b10-b1de-42a9-abaf-d01bfa96820c\n45341c83-16f4-4792-a755-b7a675c4512a\n8fc8d050-d369-422a-a2fa-ec30b001a5ea\nccee2ba3-7f31-4c39-bb0c-20b2a4958e96\nbf1dd101-9013-4ea5-a539-9108262cbb1c\n5ac32513-b925-46a1-92cd-f97603eb081e\n471cd70a-ebc3-4abe-a46d-f7ec9ce36ac9\n6f35048f-42ee-4d04-910d-d430e32373b0\nd8bd2adf-4a81-4932-9b4a-f0e591121667\n4c0f8070-139a-4419-9d1d-6e31d1128a48\nf6fec566-fffa-4e87-8a98-4417d34c8d59\nf097771e-a53f-493a-9dbf-095c562a18a2\n8e01d4a7-4b5a-4cd5-b4a3-5db201043a8d\n234863df-becc-4dc8-b178-a551adfe6a97\n3dc5ad05-46f7-4639-9fc7-62cabf0777bc\n0697ecce-99c9-478c-a5e1-f8af5810d7ec\n8096dcba-1b96-4d27-ab9a-de2b733df531\n878ddedb-2748-4ee1-a71d-db90f6beab92\n40753f63-afbd-4951-858c-f441e41e5ca5\n261b5195-4242-46c5-8ebf-71b9c2fc71cc\na3b17514-9fb0-4e3f-b01d-1795ba040f93\n485181a9-5c11-41ec-9edf-4fc1452e48ff\n6c593b49-7cd5-47a3-92e5-7ce726ca9f15\nd9d69dde-28fd-4f6d-8a63-2998f174b3b3\nee6f2678-e138-4a91-8ff2-6bf7cc68769c\nac35f81d-d1cb-4925-a854-e16192136ce6\n10b193b4-5644-4776-89d3-f0b1213b5dbc\n9940c863-75f6-43b0-94a7-695558434868\n48b99c9f-6715-4662-be09-76ccea40634d\n48571aab-56db-4c83-bdef-7202f7d2e2db\n1aa037d7-455c-4ae8-b7a5-d7ada61cb0b5\n30ebc878-7d50-44eb-8d3c-dd8dd7d25d08\n5cc17210-0018-43ba-a865-5c7314c21a21\nf8a0155b-5e8f-4f46-80c8-d1b24eee7d83\nf94575a8-b8e6-4aab-8aeb-26cb053f3f02\na289e12d-d97d-4f51-82c4-73fa661a5043\nb24d90ce-a522-4705-8929-692d19cf6869\na333f6e4-c1ea-48c5-8688-eb1d13bce73f\n822d9975-2934-4d49-a6d2-35ab3c206926\nd56ab7f0-1618-4515-8db7-666516b9520a\n6a255ce1-fde4-4471-9206-f41a8d3126cd\ne03e7f16-baa9-4181-be29-bc33d114068d\n59db1ef5-1a7e-416c-bb8f-3c2abbcf286b\n0b99b21b-3578-44e9-a8ef-93da936283e0\n670f8156-7ca6-446c-be3e-420926aed942\nf575876d-4456-42e5-87d0-bb1b530fae6b\n7c699f00-b05f-410a-bc17-ffd19a696dd9\n055ac47a-4477-4c8d-9767-e7ec8a9291b2\n2cba03e0-69a6-48e3-b0af-e563a159a172\nd4d8865d-d190-422a-8fe3-4510a43d494b\ne71a0d8d-94c5-4a31-a50b-e04f8243ed8d\n19060457-6a6f-4552-8619-f68d29ac65e6\n272fef1d-3df1-4bf6-8ff5-abd444a2064c\n611e315f-7527-4ab0-9c83-fafa7b3248fb\nf712eaf4-755a-44a6-936f-d87d9041e79c\nccd759f2-7f68-4548-ae4f-b661ffa1c960\n0c77e347-ab84-4152-b46a-7d09f084d288\n1842adf0-6014-4ade-9ab9-564325158dfd\nde58d511-289a-4fcd-be32-22a1c14bc1d0\na3940298-6e29-4176-90d5-db930a7f3491\n9d8b7c2a-a810-4824-a6fd-6d23bcfc5d5d\n195950fd-088b-4054-9878-1c55a5fad24d\nd9bb520e-5874-4930-9388-d41c81ce6629\n6156dbf8-3acf-437f-ab4a-3fea052ad07b\n13c8a11d-a11f-427a-a532-f5496c064134\n66b7ff5d-c2b0-4aae-9d3b-3fdffa795fee\na6453d29-9506-4c53-b613-958a111c4e1a\nc928167b-0363-4611-8749-c2ff2a4bb4ec\n7e5ee635-f2ae-47e4-ba79-b003969d70c3\n376d4a2f-97d2-4c3f-99a0-37779f9c1502\n1a5ad0fa-adae-4d9a-9bf3-78b7a12edac4\ndbea842b-31da-4761-843d-c1590f3271f4\nb501789b-b3ba-4cd3-ab26-3fd76961d84f\n51c2e3ec-abca-48d1-8c8e-0c69029a6dcc\n24a6d926-43b3-4168-8d80-9ceebdabca2c\n7dac97eb-6e9d-408d-9263-eb1d3b19cfc7\nfb47df43-a045-4fb2-ab8b-420c58c2c32a\n90b7eb83-9592-4b12-bf81-29a4b7291aa2\naccaf645-e92e-4f6a-a934-94e7aad6276c\n8c39e6cc-ff55-454c-a4eb-c93f864c7f2a\n62463150-5e92-41f0-a99d-b58214752496\n3dbc460d-bfc3-45d4-8d20-7723b3fed2cb\n2ed23407-5555-4378-bcfd-6bbad8b81cf9\n191054b5-eae1-418b-b1d0-307e2dc111ef\n26849995-303f-4b8f-85d5-5569bb02ffd5\nae0d4146-57e1-49e0-a8cc-4de82ea7f005\ncd6f832d-1712-47cd-a2c7-0e9156449359\n97292d95-6128-424f-a828-76f077165d96\n88edf8f6-3f67-400b-a2f4-9c14dca0ef2f\nf4b96f91-0eb9-4170-a86e-af3059d48d87\nf7602bdf-9765-4638-9c3a-2a29198f2ff6\n0a57501b-8532-4ff6-975c-99f13fdaa204\n25649ae7-77b1-4e21-80b1-24c637eb099f\nd1075685-532a-48c3-9b7d-0d4a91f0b739\ncbd807d7-9c83-4884-b7ab-20af7b650173\n6e765380-a1bf-4cb5-ad7d-a4e8ac95b196\n1908ce71-c3ce-412d-9540-11da49307c46\n90557e93-3868-4aea-a1f1-a7352ad92ef9\nb73b35dd-465d-41c3-aa68-ffdf9fa5b9ca\n571c0e49-2a7a-4904-8ef5-329a922083e3\n031f6398-f981-4177-9233-1a949a000557\n0e95bce2-feec-4c87-a531-bdd48c5f301e\nafb1762f-932a-4222-baa2-d9145fe33c13\n74093151-603a-4894-a378-4f60c65f8ddd\n2c98e60d-f6b0-48da-8a24-61a9d0323a58\n366543a0-c144-45e8-90e8-77d8663af8b3\n52563679-9960-44d3-850a-834ba5414d0c\ne9e8f69b-d15b-4641-a86c-4f3829eb75f1\nc0aa7a8b-24ac-4b88-9118-4c41f0971e8a\n96d3551a-5ef4-4123-9d48-2686f2f5b676\n3f51a6fa-fe27-402a-9b1d-aefd80022230\n405ce4da-21e2-4029-89b1-81ef0c8bf5e5\n5b1f2824-6fc9-4cc2-98c7-138e31306dee\nf835467d-c942-4318-b660-ce945c8111e5\n8b77779d-c030-454c-b2d8-d5de51f370ed\nbf368dad-a2be-4651-aaf9-f65ce43acee0\n98330d26-6b60-4cbb-b7d8-86a3fa039d10\n7a5da91c-afec-499b-ad0e-1f653f9943d9\n05030974-ccbb-47b3-b1ac-43b973d333b6\nc71a73a7-cce9-4cc8-a27d-2cd79e6c45c1\n5b539c01-e043-432f-a417-ffe14fd75e4e\n4ee730be-1fce-44e6-a4d2-da6832c3f62d\ne215708b-8876-4c29-abd8-91ac8dc26d49\na9c72f52-a3d7-488b-aee9-3d8de1d97db6\n9e25c402-8224-40e3-90ef-2510bed50f51\n397bd57f-1d49-41f6-a759-5b58883afc6e\ne42a648f-d336-45de-bb0a-10481af658d6\nde053679-2a42-4bdf-9b98-ca06f9471c37\n9dbc4761-ee57-4bfd-86c3-14edbbffca99\n2d12c803-a473-4f9b-85e1-ff95b60d0f2f\n7e648942-1f10-4058-8a79-5f85654de5b5\n76ec056b-a4a1-43bc-a567-90b34118d062\nf992d535-f1c6-4485-ae60-a5e1fc87e26f\n70ddbf37-6376-4ccf-8346-6d118ee97e35\n0eb26668-30f8-47e2-b463-a3e207dcf182\nd1df493d-a6c7-4f6c-9ada-96472a7549b9\n4361bf95-3e57-4e7f-a373-f37a8e3f78cf\n5b82cc3c-567a-45b6-bd99-ac99ea4c7a4e\n0ee797f8-8367-407f-8d24-b405abb93dbb\ncac0242b-e63e-4b89-bbe7-ca6dde2a2c31\nc4d5edb2-8493-4a94-8e1d-13b0b5f1f1a8\n4654615c-7ea9-4fd5-982d-2dd298ff0e4c\n955bca75-71d4-4ff7-bf40-bf9c4926660e\n1d7c5810-6924-4cd4-b29f-5349483f150a\n5e783842-46ac-4fed-a2a2-31fe3b78a6a3\n55529e70-7b86-4f9c-a833-5b89765f0e36\n5e532028-5e50-4a45-90b5-cd9ae93ee2b0\n3579b8f3-f693-491f-84fb-e657b9c70b9f\n821de71c-f359-43ec-a34b-40507fce51de\n141453b2-67a4-4d41-9df8-8d7176581500\nb025f945-d921-4823-895e-544390f7f25b\nebb1c5ba-36bc-4835-9353-f811be33c237\nc101ffb3-15cd-465f-a37f-4493f31d40db\nfa898dae-3370-44e3-891a-04de4499f46d\ne6eee578-1cc9-4c3a-b0d6-ee0b5c6007c1\nd334042d-9860-4bcd-bd43-faa459ee44a0\n2a1d4f23-1778-4ec1-922e-85cb9d910dd9\n67921dfc-5933-4a38-a3ed-1028623ce351\n8f7f74b3-0153-42e0-bc35-a30bddd651f5\n27014313-c740-4092-8c7a-3c0044665c47\nbef200a3-ff43-4c91-bfe4-ca35d8ff3f99\nfc273225-52ab-4546-85ce-13cce8a70de9\ne7761f05-d16e-4890-8c43-f42422c7250d\n7a2c329e-1778-425e-b34e-0016b0031832\n6d28e6c6-e87f-4ed9-8a6f-99438974721e\n292b5a73-1527-480f-a913-7af3b3c35e61\n98fbfd1a-b157-4fa6-8a6f-3181b5786ded\nfd8a7be1-860d-419d-aee5-93cd6c4247a9\n449d5c10-12a0-483d-bd20-a67c3fe2d50b\n3b3ff524-3fdb-4fa2-8f14-4af850d02693\n0c3ab510-93cb-44ed-acd9-f6f6e2d6e0f7\n690e93ea-7517-4359-ae77-f3de6e428b22\naa9ab253-e1a5-4463-83e4-05898839b7c5\n6d92e421-e6f8-442b-8a72-4bc356a7a6b6\n2f516223-273d-4fe7-ad4c-e9f0eec8293e\n5b318c7a-2249-49d4-8064-cb07bd28cb57\ne661dbdd-8f3a-4e82-b374-247699f0863a\nce01cd81-89c1-4186-aa3c-1190e4319139\n1b9a2dae-4d8e-4381-b598-db105ee24baa\n2fc78dbd-70a8-4ad9-8034-cafb793d7306\ndf65a6db-1d02-4b37-8554-89104b23c5b8\n312b820c-1b3c-4304-8bf7-ee13cbe59773\n434032b4-82d9-4f9b-857d-8912733de7b0\ndec0d26a-6e82-4c0a-9ee3-b442dc5caf1d\ncbd96eed-f3bd-460f-b05b-54f0681f97ab\n0c797291-4e6d-47bb-8516-942cbaccbe89\n8024eacb-fc57-4d16-ae51-ad8a5636257a\n97953bcd-9bf0-4195-a45b-f983c4c2f083\ndb79de8b-f6dd-4872-9abd-7b5b6562c16c\n563fa26e-4c06-4a1b-ad63-dd8fac7e14d3\nbe2b42c5-f3a2-422f-8655-0ea16fc46161\n8e5c57f9-021b-41cc-a24d-c969f4d2d069\n64a07da3-d93a-4589-8890-dc8f577221a0\n50e953a3-771f-4537-ac89-c3916e3fa6f0\nd98d4f11-3301-4a5c-b754-32deba56f228\n50f95b3b-75ce-400e-b76d-18c64dd982b8\n6f791c5c-d59d-4267-9589-ebefa1a3ac9d\n68ca23ce-da7a-4c4a-a944-4115ee15a2f0\nd4e869e0-3f3a-4302-a034-9dd8b21c24db\nd73f34a6-7141-4c54-b533-129aa08e11ba\n838b3b27-f553-46eb-8f16-08e4bad0c3dc\n247d441e-3e76-456f-bf19-02e3ce48d626\n01dbb49f-bd17-48e9-a525-60c7969f1b99\n96c0605b-ae9d-4c64-a9f0-5e3d0887c0f0\n1fa15f23-6d66-495f-a825-eb551f6bae11\n8c6e5c32-5b50-40b0-9910-3ffaa2a5fa09\na5f504cd-0a85-481a-9cd1-f41425e70008\nfe794b5c-4dde-4736-9405-2f53f9fda675\ne1de54e8-c81a-41e9-8e4d-3d26665070ea\na7a8dc73-897e-4083-992a-71c649c004b5\n64d2cf9c-e9c7-4685-90fc-9a7d97aec12f\n1baaa7d5-b9b5-4881-b488-d8e355fba946\na40fb070-2bb8-45c4-91c5-075121b6a19a\n8952eed7-3264-4672-a7fc-d188c80e337a\ncdaa4cb3-8b26-4c27-8144-4cb38ca66a46\nd96e62b0-91d4-44b9-a819-4be9469c1575\nbd5a24b1-6855-4cb8-9e61-edc82b90e3a2\ncb055d1a-d4e7-4ee4-aca9-9fec6b39a6f1\n8ac63c7e-597c-48e4-b2b1-7a3f934413b3\n06551432-35b5-4d63-8b22-02c905fc638a\nd68a396f-0888-4046-b685-8c8676bba9f5\nc5a0c3ba-6f28-4e98-9639-2e1142fe94bc\nfa3e4f27-608a-45e8-8e39-dfd431bff2f1\n046625d2-bcd6-4f06-aea6-d2eada4b3644\n15193452-432a-4fd8-a93d-3bdd29c9b63f\n17a4020c-aa7a-4aed-89f9-64b76bfcfe1e\ne1c87098-9940-44ac-92d7-70f0bbcd059f\n59592cd2-3cec-4377-8f9c-93ccf080263b\neb390a57-bdc5-4a99-a25d-44c0c22e82bb\ne8745fc9-51ef-4525-9d1e-d56e8a8fa441\naa93f781-fe3e-4c48-84b7-850314b169da\n5890a131-65d0-404b-b992-c88300074dd7\nf5ee9c5b-59d3-4398-98fa-53e8b96399c2\nb4997ea3-7bef-46fc-b859-5e7b795e6c18\n8f2c5bff-98f0-49ad-9b93-dbc14eeecbbf\n59b1a0e7-646b-4092-be4a-b87fd30a19ae\nfca38075-234f-40f5-9567-38b79eba74f5\nf11c93c4-7139-432d-be90-f553f74d78d4\n6332652f-eca9-42ec-a7bd-cd111d375ad2\naaa167f2-4a6f-4987-8f05-350dcccb7c75\n770e947f-0964-46fb-8eac-da7de5756a33\n1977838b-e6bc-4850-80d0-a01ff633acaa\n25554bae-6e61-4dd9-bd88-25148f5e0a5a\n72f38060-a21d-4ee3-9df9-3aaacf8d2b19\nab963dbb-eded-4962-a634-7440277ffbb7\ndf11513c-3ccc-46ce-abc4-bdaf5e7462dd\ndbab3ac5-a566-4b36-9bd9-3582cb104df5\nccbe9c47-026f-48b4-87bf-cb2030c0c7ee\na22e6f53-7ca4-4bc4-bac0-a568089f5b66\n554f48e2-fcc0-44e6-980e-afcf38c9196c\nc5db36e2-d1b0-4b16-a765-a2326b55096b\nc3f9cfb2-2e6d-458e-a36d-97007a011fea\n3a904bbe-1154-40dc-8094-7ddbf61c23b4\n2f2c68ab-d01c-4848-b5bc-c1a2a6ed06ac\nf12ac1b7-321d-47a9-b372-f38b22bce178\n5d46abaa-de14-4a7c-a5c3-3901dd99c773\nf0bdef44-939d-4a4b-aa8e-b129ff86c443\n599ccf9a-64c4-4e93-aa4a-210ea25f6abf\nc167d969-89d6-4e4f-8d76-494061aee68e\n516bc497-dae9-462e-9230-2ae9c3eb7c49\n1fd3ed02-c68a-4117-a4fa-521bfd548f06\n7f7e39bf-f450-4fe1-a714-0abb48b6e78b\n0a2a3613-11cf-4a08-bd82-362d2a96e404\nb831b9fe-93c1-4752-9dcf-04bfbf23ad71\neff93baf-aa61-44c3-aa27-a3384d29498d\n86c9207b-6e3f-4035-9552-b4aa082728e0\nf70e0f4e-b700-4e12-99c9-9ef18e54b327\ndd9125e0-0444-4fe8-8680-bb605b2a42af\n5439fac8-7284-4ba4-a642-1eea57d6099f\nd59b2387-6289-45de-8372-708901d10756\n04d96c92-820a-45b4-9dac-473cf7c95b1d\n0b4e0727-a82f-41fc-8e69-0248b3e5b1b7\n7396ea09-4e7e-44b4-af6f-df6c260e2854\nb64ca445-58c5-41de-97c0-9d1c77bb5c6e\n62de3af1-33b4-4379-ab54-0a7fdff1c958\n35341fb5-5ae4-4bf0-b3ae-6e9fb83f087e\n56026078-95fc-4fc9-8e8d-2edbba105572\na26da972-7eed-4449-936a-5b7fce3d69c5\n0425086e-9959-41e5-8c68-0b072abccc97\n0249a3b0-e3f2-4f2b-959a-93d1a899628c\n4cd007a2-90bf-4f8b-b9fe-42e6be6b4c31\n1cf7e95c-dc84-4ba8-abbf-c2a85797a7ef\n2c5ed9f5-58d3-43f3-a277-67c8ed300c19\n68e60485-fc1d-450d-b584-d404422443af\nf2b607ea-9349-48dd-af1c-8f5d5d96967e\ne89fb3f2-ca30-483d-afe0-5e63b7f85e96\n131faf1e-d934-4c83-b531-5a67404a9d5c\nf8cb1526-70a4-40f4-b425-bc458eeced85\n1f1b3a27-a04d-4b1c-b55e-42f9e0abde56\ndee71751-ba36-4f62-9769-7ecd129dadb8\n762bef91-9527-4129-b85e-1a2f9048a57b\nb07c81a7-d786-4a04-b2a0-e99d63a33dfc\n7f2fbd17-006b-4f56-a679-1456b9df862b\nc7ed6df9-0bab-4a87-b975-c2547f99d771\n0d18beb3-fda8-401a-a32c-ac69feb494d9\nb096750a-0018-4631-985c-24d2ec9350a6\n0f7ed64c-032a-4f86-857f-5f2c33a69870\n20c0d698-52ad-458a-8d39-b9a32ea0cb10\n71be81a4-94bb-4987-863f-b1116bb4c662\na376e02a-cc8a-4968-b8c8-9f42e160669c\nb5aa3a06-037d-4ceb-a838-16d91dd73ce6\n91e787f9-5158-46eb-b0aa-7aef648e055a\n3b3be98f-b649-48e0-8485-c4549cd14158\nd86f56b3-7e5b-495e-a112-869977be20ce\n3fa02752-1e30-4975-bdc6-77e1c45755fc\n58caa99d-a7a1-44fb-8faa-3fa3b3436a4d\n28d11021-db9b-4a24-a76b-bb08dfe181d0\n21576faa-5334-469d-a0db-19b88af0e6aa\n22248090-3106-4b01-8bb8-dc4146c48881\n1e925617-4542-4c1f-9253-7a3270e07383\n72dae6df-44f2-46cd-b7bc-add1bfd53580\n5c7b312e-2315-477e-8b07-641a4c624857\nbaf97998-e952-47de-8e7f-01ce1d91a6de\neae22db6-dc92-4551-ba44-b56d836ad343\n9b11b9a3-5fef-4743-9349-3963884313cc\n88fcdbda-753a-4c9a-8e38-7c242b3f07ac\ne11a71e8-b40b-48ee-934f-1b6564dbb46a\n60810b24-76a1-4938-bbaf-816997e00f2d\n776626e9-2819-4383-80b3-e38b897a362e\n2e509e1b-f0ec-45f8-9009-509a3f281e26\n35cbf74d-6bba-4c70-bcef-c3761cd6d201\n6d69f67c-bf68-4d95-986c-62695bbbfd37\n681149b5-4f4b-4839-bf31-18ec486c8e26\n1aaba319-0d03-4b70-b52e-7077eb841d12\n95fc6ea0-d38a-4bd6-8b06-84a326d32e90\n082635bd-8993-49d3-b5c4-fd5359364d8b\n0d1f782e-1b69-4893-af26-2a867eac8568\n326e0ff1-8018-44e1-a26f-36d375d595b2\ncc860588-ae8e-46d6-841e-ffa55fefe4a3\n2cd91111-beb5-48f8-9a0b-2236ffe0f476\n601ae895-e5c1-4106-a8d2-b7998065964f\n27719749-ff37-4202-b3aa-3c90faab6a8d\nab602921-7bcb-40fe-9321-226d314a1a28\n8d60a049-494b-427c-8243-b870ce822d31\n9c4a21f1-6b20-4c27-860b-35ef74bd25ee\n7c3ff4d3-01d8-4d4a-b3dc-8404571038ec\ndaa98e5c-dac3-4f34-b628-d65a60c9825b\n1fc836ca-4d70-45ca-ab6b-78117ab70e18\n3f4a3f62-cce2-481f-916b-4fe1180811dd\n196f8ab4-89ba-47eb-a974-3e9b4e60581a\nede9df5f-215c-4dcf-906e-180bba3a6894\n88582e6d-8497-41ae-a78c-5c9000853b9f\n74b13530-05a8-4373-960c-9183193261cf\n47474445-3d6d-4661-9246-e0f25b0deb97\nd2956f9d-1ce1-45b4-a12f-2a8e83283cef\n8137cfa2-3281-44ef-998f-087a72a5b6a6\nacf872c7-2a23-4583-a117-f921bfc4d101\n1ca2a7ad-945d-4133-ab9c-185220c445bc\nc7960943-19d0-47bf-b553-937ce8cd66bd\n1672631c-0c84-45f0-9215-98def96a833c\n5c52e497-b809-410b-b80b-f754d2d8d04b\n642ea543-2e01-45c1-bba4-8d9c3e60c5ac\ncdeb61bc-0561-49d9-8b0a-a853ea918f07\n34a218f9-b155-4ed0-8c90-6221f358d0c2\n173c9629-1bbe-428b-84f7-6aa95575bebf\ndedadf7a-0ae3-4c8b-844a-bd02b0438647\nfc8a9b44-b973-47bc-9a83-6ec3a80ac963\n5fd89c48-81ff-4fe5-8131-16d0f79d19c4\ndd0355b3-6301-4030-bd5e-3cae1d0bdbc7\n6224ea1e-b382-46e8-84e3-e0a6f030156d\n2ff257b2-c258-41fa-994e-1a946bae4893\n6e316df3-3192-474d-be31-106b7b187327\n9486c418-f065-4933-98cc-de046041c10b\n336c76e7-757d-45f2-ad66-ba429faf1f72\n8a18eea4-d4c5-49e0-a7af-c34563520297\n9804f76c-f476-49c4-bd32-68b234c263a4\neb3f1b98-82ae-4a01-a53c-e1f5313c6959\nfeda0ae9-e85a-4474-92f5-2b922deab969\neef1e43b-ac36-4dd5-bf73-8307d5334fa9\n596ddd5d-edf7-444c-841d-9285540caf0c\n48b3336a-ad47-4cd8-ba75-116f58013e94\nbe85885c-56d7-4eae-842a-93184f23d01c\nf45340b4-ae30-4da0-ae7d-b1554a5a24ed\n47be9023-45e9-4553-b9a7-5b7bf2714fb9\ndf69803a-a3b8-480d-96dc-15fc20cf90f2\n12f5fca4-51c0-46a4-b423-1b2073592113\n785d1626-2328-456c-b48b-22018f85dc54\n53a7a157-8123-4c6f-a4a2-2a1777d5bd2d\nb6742d6d-9b1b-43a4-a250-0f6e40ffe49d\nd40cd808-d88d-47b9-8805-04281602de79\n3c7de623-ae8c-4294-a5d0-33ee83684496\nf0069a01-7be5-43bb-adfe-a94315805c66\nbf995061-2272-42bb-afd1-892da7e49358\nfd201e5b-3439-46c3-9559-eea6f5715cb6\n26ea4654-80e6-4bcc-aea4-5f33335d99f7\n88a2e636-7736-4456-8db1-9278f957d013\na8acc17b-ea62-407e-8dae-db8358790c7d\n62ee33cd-59fe-4ff4-ae51-1463615b6463\n05748a7d-770d-4de8-9918-df10d1554a26\n958bd9de-6759-47fa-ac10-e1e3de33e49a\n12c8b510-a3b2-4a3c-9541-a1f595d89faa\n217d52a9-fba9-4bf1-aeb1-f9b82f2996f9\na6645de2-cad0-4ce4-b8de-b721bb357002\n829ccd7b-d2a5-474c-b89b-848b92cabb01\n88365aef-7312-4020-936b-763611520551\nd0f81181-0c03-4aa0-a4d8-85a4250baa4e\nba447d9d-3dc6-4187-9fba-3de923454dfb\n2fb7d0f1-a835-42fc-9347-0b356f4b16da\n4b0873b4-4acb-4bae-845a-4ae6ed81cb3f\n50218195-6635-495e-ae77-498e67708687\n36db561d-68e5-4b86-8cdf-8f2ae37956d3\nc8565ef1-5d32-43ca-8095-56d7e2948268\n1dc6527b-8830-4b38-961e-619389f6683d\n35a80c0b-dcb3-489d-a0f0-e5be3994c963\n676fee02-6354-480c-839d-c7b5a6a7a0f5\na7532d3d-2bf5-4713-a4c9-3bc41f8d7a62\n262c8fdb-2d98-4339-ad32-176528c9fc6e\ne8612f37-8db4-4d67-86f5-a9468c9c9a77\n98b480f6-7575-48b0-b577-1c89a76bd58a\n1a0ed4df-71f2-4412-ae4b-005fb84a0ecf\nf2ab4d37-5556-4674-923a-8a1b68740e21\nf7486921-73be-4104-9e2e-a8073b56f6b0\n1b685691-30ee-4756-9032-9f14ba0972a2\neff957fd-6b35-4d8b-8f35-51722050f9d4\n2e7d117f-d51f-437c-a751-6c73ac4cd2c8\n8f0442a2-c36f-4c38-aa42-c4e2e88f37ec\nbe7d8dc6-74d3-4316-ad26-0c5a25003980\nffdba29b-7e3b-4994-bace-27ed634b9863\n9bd86b96-26ab-4ef7-8156-33d6a514918a\n1afa270f-9d7d-4233-9f70-26412e95c73e\n57e903f7-1a12-408d-ad11-c787622a0a5f\ne8fe0f7d-efb6-476b-9efd-6adeb891f606\nbe4e2064-a277-4cf7-99f0-1cdf47057e31\na0524434-751d-4284-bc4b-be67774760f2\nda0d278d-e56c-452f-a8cb-813a41e832b2\n8ef78f10-f9b3-4e21-a364-a883a37dd221\n464c89e2-5965-45ea-904f-fa4b1b8a139a\neba1214d-c064-49a1-9833-8edf89fccbba\na9a81174-1855-4b8f-b8ce-2446fde61298\nb11dd6a5-6a02-4b22-8840-2c8f178fec19\n64e032f1-97af-439a-9d50-c7ecde5bb47c\n1ebf9440-7175-4e13-a633-84621457e91d\nc69e3619-fa4e-45ef-b707-c2f62a9afb06\n8f7a0bb1-5708-4bdd-8550-b8d068d588bf\n0af7b424-ba8c-481d-a64f-e262135c3bbd\ne2b5d83e-9c32-4592-b85d-174b6b898502\nd16ed463-a8d4-494a-b9af-054b21e0ca39\ndedb8f71-feaf-4cf3-9204-4273c7496376\nfa8d056a-67e8-4b1a-8ca9-64a13c1eb1e5\n22823d03-8491-429d-8e81-370e0e31a217\n248f7879-139f-4627-8e17-86414683e59c\nb93f3c80-92f7-494f-b5d3-894b04942903\nf1291c0f-fc49-4f72-9162-9ce4d4c828d2\nd75ad924-8d0b-4643-be42-6448ac14e1dd\n09e0fe11-18e1-4c0e-ba7f-a39b61d13798\n00dde099-8324-49f2-b585-645193e56592\nd363257c-7c4b-4155-8783-a3b5570e877d\n4c41fe79-a424-498c-b909-ce594939ae6a\n7a3389bc-f563-4988-9a49-0a176bf6b86a\n6b95d633-67ff-4455-a3ea-6d96b6f5b11a\n81172029-da2c-40dd-a7bd-baf71a1c9c3d\nf2c47699-dd9d-4eff-adc1-056994dc3bd1\n811fd277-f44a-40d1-ab52-cff4957b25b6\n97f52cfe-3c60-4104-9ff7-16a83169e06a\n9b9fd4ff-a7f1-46d3-9928-aa4754237488\n744573c0-ee5c-4933-87ea-e210bd11f304\n1830c72c-4147-4320-991d-be96de8d0c79\n25a604ef-339e-46bc-b1ee-53752fd44e8f\n86cb595e-3950-4159-ad68-d388768ec8b1\nde7a9685-00fb-47cf-982c-fe0ccf03122c\n2c896620-b0dd-4944-9176-451475db686e\n4c472956-1234-42a8-adac-561a944a68ae\n83f62384-f8d8-4270-b7a5-16bdb4770d6a\nec73b4ca-4160-45ab-bb11-619d17ab327a\n4958c037-ffd1-4f7e-b5f9-7a27fcfa06b7\ne2f0fb2b-91fe-48bb-84c5-bf5e790eb620\n24dac860-27ca-4250-b222-fe028c1ceadc\n75649c61-eff1-419f-a5dc-b138e3d9ab5b\n651e2e78-7d12-462b-b915-cd747f583f7f\nda754565-1bbd-41c7-8ec7-34b64c515bdf\n91021df3-bf7e-4af4-891f-e756bc000f7f\na9540920-6193-4b69-a90b-c42cfc2434cf\na406e0e9-54c6-42b4-81cf-ba105d99bf2e\nce007b04-3693-4331-aa33-8e0d7bb9b9ef\n3572dc4f-c5a2-475b-8164-263c86ef62bd\nfc0b685b-e114-4ee7-9bf9-8a60cc028ff5\n2c2a488e-e1f8-4158-a5a7-23f1a1cb1f68\n64a755f2-39ac-4840-b5c0-07b1ae6e107d\n5488bfa2-432a-407e-8be3-760353261608\n66a01451-da27-4c39-9495-9f3c0fea4b6e\n21dbe85e-2723-4e05-8065-42738daca9b6\n76571073-7fe4-434d-83de-fe7f4dcf84db\n58edbfb8-c000-4cec-af57-914885f91a66\n7ec7efca-b544-4797-888c-52a03110b4f1\nf2bd2d7f-ffe3-48ab-8e02-b0e39bf77db7\n9210dd31-c246-4a09-8f0e-d976a9fa3b75\nbadea1e4-8f3d-4ec3-92b5-04ca13498a82\n05e52d55-9791-497f-8b15-104d02952345\nffcf9530-7426-43d0-9030-8bcbac0ec439\n44c6c9ae-01d8-413f-966e-3f88c40b1aa6\n808995cc-2489-48d9-ac67-55f27e552b09\n723a2c2b-51d3-4168-b30f-713130b2607b\n8a7590f2-c078-4a18-8393-9cfcea9b23de\n024f38d1-44b3-46e2-a34c-2d2def4d5182\n7a1d2d69-9b0a-4c1b-8e70-8372aa7ba87b\nb7e75d34-9b3d-4534-aff6-36821865ef63\n357fcfaf-a272-4c79-b01e-467fc60109a5\n0aa9c97a-abc3-4144-9748-8821354d23ea\n8318c7c9-999c-42e1-a4d7-ccf96fc396e5\nf3a30a5d-04d6-4071-bb79-6e9a161dc7cd\nfea51a9f-43a7-43a1-b042-b88a616b2c4c\nc0ec9f85-ffe6-411c-a29f-e7af8bfc07c1\n4a684570-57c0-46ab-995d-4ab6eb45e652\n1d064610-77af-4f1c-86f4-cfdb3866745c\nce132f4a-1192-47b5-b288-fe8f2bb456c0\n833003bd-94e8-4ae3-b350-85deabf3fc85\n111c68b9-c967-4164-93fe-117d54dc673e\nf7bdfe68-5593-4a2f-9206-5ba0cd002069\ne202b3fc-f7d0-4798-aa0b-9cbc1f597016\n128aca77-58e1-4831-9fa4-6eb272c42c0a\n746bbe71-6d49-4c20-a103-27fa4c93fad9\n1285989f-a313-4d63-8936-18c815379535\n1f6a596c-425a-42b7-b846-f08b75062814\nfef288ca-98d9-443f-ab3d-f97bd6d4b1db\n73de3ece-3bc9-4657-b41c-9b28f59675c3\nfe8dfe71-fd4f-4316-890e-4a93f2f2f43a\n0f117fe5-a4fd-4377-924f-0f1ef470760e\nc924f368-65c0-4b8b-8a44-41c44a00a299\n1d11c0a8-9159-4565-a313-b975574ede7b\nc4b84055-2475-4fb7-965a-b2df7f34c788\n996c908e-6c77-444a-8177-30cd4bed863e\n87b5f50f-5b52-4939-a123-8e8ba6576104\ncdc800e0-2d18-4a41-91fc-324d24441d4e\n7600462f-5b61-40e5-983a-df911dcf5c71\nebed7cd9-2001-4142-b8bd-3691e2561efd\n099b5b73-8192-45ca-ab09-99d8df036d72\ne3a49d98-02d6-4afc-88f0-b1389d4e8930\naaac3ffb-cf83-4f08-9073-e2e04a725c82\nebcf2921-32b2-4994-a04c-b85889a0feb8\nbdd6396c-4ddb-4e41-a320-1119e2bcdf0b\n675174e0-26ff-494e-a012-8822022cb3d9\n622c7050-2514-443f-852b-2a82ef10d0b9\n3527c384-81f1-4a7b-814c-eeae864396bc\ncd738b0a-0303-47cc-855f-e5ae4300c428\n4efcee80-610f-4bf5-83b7-f72eb3863e98\nc6e96820-484a-4085-8a4e-7e5a436f0217\n5f25c2b9-f7ca-4df7-a5d6-7cb0c11a7129\n30019cfb-5bbf-4b7d-822c-5cfdfb179dc7\n7c2a6bc6-0875-40cf-bd01-bb5c784b2170\n5994f408-cada-46c2-90d3-946939d528e5\n468d7ddf-1098-4afd-9767-147e36ccce24\n48cc7c3c-3f0b-4e7f-824a-4ac9c77b3218\n89f7e77f-9d5b-4e8f-830c-9fa02daa7a43\nb42f5ead-678e-4a4e-b795-aba927df5872\n10deb493-abd5-4e11-992f-2dcd2d06c77f\n30cc2fee-48a9-497f-bd60-469caabed68c\n90ac3b19-0736-4631-9617-83e54956d0e1\ncfc268b9-7648-41aa-a80d-c1dd56ede5ca\n37c6697f-0d75-4dee-a83b-5b6ef977e5d2\ndc2cb39a-4f44-4634-81df-3591e5b81fb4\n8c417ef9-e9b2-4345-9f1f-ddc8123fc688\n64e7a7a7-7831-4b70-8b75-27071714fb1f\n94a7650b-0b3b-47b4-92df-988b59b6f5bb\n708b27b6-27c4-45c7-b056-c147ce2adfaa\n2cfdca37-312b-4f1f-8d09-d109c870aac2\n5e4c4c62-95fa-47da-9178-dc4e248988a8\n430cea96-78f2-4467-afcb-4c6696625fbe\nc4aac263-c2d1-4bc8-9977-6e915f521da3\n3aa6d786-ecb9-4af6-8ff5-fcf5a4ebc557\n093250c1-7c43-4a03-8bea-37d17ec070e5\ndb41dc16-313e-4cbe-8ba0-80fbd6e2eda9\n2f1faa0b-c16b-4c83-8012-df76baf1e0f0\na0f7f695-38e5-4bc7-82f1-12571139da7b\nee13b5fa-9e8a-4525-8f01-f9a89f60233d\n7993a339-e7c4-4ab8-8141-c24337c39ed0\n66b3817d-e37d-4df9-a83e-ac06b5c36105\naade1bf8-c1b2-4344-8cc6-1a4cdeb36d2b\n1b8690d5-aca5-4b73-9db3-11b6066403a5\n35073d3d-b0dd-4a9f-8ec9-174e344e4fee\nb48d5805-df1b-4d1f-abec-f550ce9ef164\n02024392-8520-456f-85d8-5b1523230a07\n8947810e-2a10-410f-9b85-c5cacd5ff7bd\n4c1fa3c1-9adf-4e75-9502-f8bb158902ca\ncf7eb93c-aebf-4fa0-b683-4e28654cdeaa\n54fe128c-9941-400d-829b-e0526cc3b503\nf98353a0-92bb-4a1c-8661-79deec3225d5\n087f07a3-55d3-4e92-8ecf-950a1930dbc5\nf8e10808-8bf4-4e4d-9a5e-f2ea76ced1b6\n331ea768-9961-4353-9b69-d97b95774f37\n92550c46-61da-4d39-b991-2474133e1fa7\n72bfcbca-be4d-4da3-9255-092edab39bde\n6848b5f1-591b-4476-9841-14f097c19f0f\n687bc7cb-ccfe-46af-9337-98c5246a0a1a\n68c38e3d-6590-4bcf-ae99-87029d645d0b\nae4f4482-e048-4e79-afff-3a9cfa8acc30\n0305e03c-de23-4692-b1b4-4ebfa33b54f0\n3e56004c-04b6-44d1-88b4-9589ca28a0e6\nd5c2406d-7e10-4b2d-85c7-3313d55ce5e4\n32bbd71c-136d-4785-a199-1f5733c4a2f5\n8bd899fb-2a67-4ab6-b427-5aa7ef380e02\nc09c2423-a75d-4781-b7fe-6d0a45f0083b\n0bf21575-ebc1-4604-9f27-824a10bc078a\ne5fd4d71-4214-4bfb-8a01-2cd54c60c6b8\n92173c40-12b2-4b91-afb9-3f4d5beecf2f\n6f6b2ff6-6365-4875-9572-14db26b6686d\n91c3dcff-8247-45cb-bb67-21ab47a9ecd4\n8c6b43d1-7e0f-419c-8e99-d545250cecf9\n336695e9-a149-47e2-a225-c48d2708b98d\n85023a74-83d5-42e6-9366-2e23d811427d\n7bc3ce2d-b870-4ad1-ae1e-d52a67a56904\n5345b5eb-6749-4246-8b6c-8c51cdca6e22\na9543ff2-2105-4b06-8835-82203edf448a\n802d7026-a0af-4621-83fa-002bca973502\n9c8bdcc9-981e-484e-8000-4d186f498354\n3bca4810-dc24-44d7-8b64-2f60af397103\n96715c8d-1652-4807-ad4e-329839c43ce9\n211d3f4d-bc52-41b0-b2f2-ca596808d054\nbd6b71fc-5c1a-444d-af32-cd55d67c2b54\n77e96755-b2a7-4170-b26c-615c6572da9d\nd508670d-997c-4dfb-86d4-718c18e6486b\n9657126c-c9ad-4fc1-b319-80eaf7e53ccf\n371dfd8a-7b53-4fad-9c4e-caa6ccb30f7c\na1564f6c-d449-4cbb-8143-79dc736120df\n6e41fc37-53be-4bca-a842-0bfde8e71d6d\n359135e8-64f8-4332-a699-0e5d4b121d26\n0f3ffcaf-d056-4125-ad6b-dbea59653819\n5bf0f31a-203b-40cc-a69e-98222fe8c1d2\nbdad2c4e-2b8a-437e-8583-d10f606de489\n7f70bebb-af7b-4ad4-9efa-dc50b1ab3183\n860cb347-5ed1-42ff-8f95-143f5c5cb4c5\nc05a38ca-1962-419a-b605-4aa12d76c8da\nb5520bb2-90cc-49db-a031-a2473d09fe56\n675e6f2b-ea68-4ce0-8f05-022a449617bb\na5aac418-61c3-4072-aab9-9ed616e7928c\n1bf27e53-31b7-4c98-9ed7-13d4a987bf19\na27d5018-08f2-437b-9aa9-40ad82ef3f60\n897f476d-2e3e-4447-a371-59e142cd0429\n4f20ba7f-6a00-441e-b473-692400f0b5e6\n5b18f83d-c817-446d-82ba-d9e76ce211a5\n43cc22b9-6c5e-4468-8ce5-ea6020c65f94\n56ab17d2-db63-4bba-abc3-2269e4675fa3\n0024af42-792c-4988-8cab-aba05339836a\nd4e505d6-e258-403a-8936-478788ee70ea\nf44895e0-fe7f-4b3e-bbae-4a1159ffb29e\nec2ac11b-ac16-404c-af67-17db01755bfe\n42e796c7-67f5-49e7-ba10-7e78851cdb0d\nb3e89208-3e7b-46b6-acb5-46d333b6738d\na1474332-981a-4532-a355-78bc7114fee2\nb65576d4-730e-4dd5-a968-5089d890d3b7\nf8d9c975-ebf2-41eb-b0a8-062ef76959eb\nd55f7674-7cb7-4a88-9512-5c01f90cfdb9\n66fcc128-8b10-4fd8-9401-c85645019cea\nf6d43663-983f-46d0-baad-f6558d8e9d6e\nfc7d6ee5-0040-41d5-b007-2c9e46bbca88\nf5d0462b-e598-42b3-8bb1-ec72b98563f2\n9a8bd310-e6ff-4725-bc04-d7f1531c9085\nc6555bad-2ecb-4940-a2ac-b192f1eaacf5\ncfc8da93-9353-42ff-9cc2-0d0d2376ba13\n12216d90-854f-4955-9464-11596031088a\nb756edce-dfa9-4b9c-813e-b7183a70af6f\nc56517e6-9ff6-4ac7-b9a0-893f218acc1f\nea66cc0d-9117-4286-8e3c-011a02247693\nbe147ecb-6099-4e33-afcc-f331496fe1ed\n65b19e51-c717-42ac-9cbd-7d0cd8aa3198\ncf61307f-fef0-42cd-8bd4-3c8762d0af3d\nedf38fbe-5eb3-4604-b6be-c02524e22b1a\n933a541c-a24e-4691-af8e-c7441101af02\n0e2f3ee2-42fe-4cd8-9048-3f4681d092a2\nca406bd0-06b1-4b20-8462-68bee0e653c5\nd71edcb7-90e9-4a13-9b2e-93c7a44a02c2\n12fc6a30-0f3f-4d93-9e8b-873f27d2d5ed\n04b10360-cfdd-4b36-b782-a22be6f38956\n84a8a460-8bf8-494c-b3af-8e4d0ff0fad1\n6a3fe33a-d5e9-402c-bcd4-e75e45d3727e\n4f857253-f373-42b3-8fb1-f72f87459c22\n74448b87-f570-496e-9c1a-95a82693fdce\n3bb9fb17-6cad-4dd4-bf72-de9ddf39fe2d\nd38e1c9b-f275-459c-b9ee-8e23ea54a923\ndd8ca874-2f8c-415e-a046-6598de8c5913\nc26f9917-eade-4a4e-8af5-6b589c7de476\nf0f6b619-6cbe-4186-8377-541281e7365a\n0c3872c6-1299-4169-863f-355db380482a\nf54802a2-bd9b-4530-a590-237d3e84b54a\n57666ee6-0715-4237-a9fb-e9994e3aae6e\nd2ba4f32-1ec1-4528-81bd-7e0fd7d8ba1e\n44a1f4fb-cab2-4a70-85a6-78263112a2d7\n3ffe7a43-2c6d-4951-ac69-3747a433c876\ncaf4736d-3142-45ef-9498-19623edc77fc\n89f7e4af-519d-4814-90f6-0c545495c64d\n589b0098-0257-4fe6-a4e0-b2fd12dd4a1f\nbe8abc66-6cc2-4ead-abf8-5043ef02e8eb\na71708f9-c568-4a5b-b3c7-51ffcfe4bff8\ne431e569-6de3-4810-a289-aff7163fda90\n09832eaa-de0d-4c3f-8b47-3af5f26e3f6b\na30df4f4-1b85-44ea-8f4c-b48a799f9e48\n521c8399-9c6a-4cb3-aacf-fce99e6e4b62\ndbf22219-e882-4171-a6b4-16fdaf14065b\n28685656-f8f5-4f4e-9f1c-1f32729a07a1\n7b435563-43e3-45a0-bcd8-a2406009e374\n265ae86e-0a48-4432-893b-aae76bd4de72\n1a52e7c5-778c-458b-b9ec-7194e762ce50\n3065972d-75db-4136-b71b-d7ef01f95e83\nc6c5cda9-74ec-451b-8d48-9d9003b87799\n41fac60e-4784-4329-8231-95cb251314da\n514705a2-582a-4ede-87de-0e0864c36e91\nfe995875-a55f-4036-9fb5-01929e53a187\nd926cf1c-6394-49e9-a671-9aa4841ffa6c\n313e5592-134f-42aa-b15a-5521ec0ae015\nbd812a65-25c6-4af1-b516-f4cdffdf480b\n2f7d9cb9-91f8-4b80-94d0-c92b0bd7742f\n60da6320-0626-4ff6-ba42-18168744dec8\n59b9adab-b75f-4bca-b382-bbd7ee7519ff\n420e95a0-e14d-4c29-bd77-f78bc91c9bbc\n063714b7-8c4d-4f5e-bb90-a009151a8f43\n6fada954-ede0-433f-8592-02aa987cc8ae\naa7a5cfe-d232-4160-b44a-c2e15f1928f6\nf5eee954-4294-4ddb-bfc0-bab91ef67183\na7a2782d-f0f5-4fba-aedf-94252e6b2847\nd93213d9-8f39-4b67-9364-d508a2506c35\nf1b32f55-f5d0-489d-a7b2-75e65df3384e\n7aee2e21-0951-4cf8-96d2-40e1a274004c\n461bbd03-5d06-4758-b25e-a1a98c90f8a6\n2aecd5e7-9ddb-4bb4-97ca-29e6d7dabf61\nd56eca97-0249-4165-9259-7368f05a8712\n866409dd-8c47-4446-b33a-8171c7625552\ne05c3b23-97d9-4498-8256-dfe4f4b979b9\n535db36b-cdab-496d-804f-2ec438797c9a\n35e05651-9fe9-44d5-ba54-dbfdbd5e4b72\n386083a9-be22-46e7-8370-77259a855abb\n1349563c-0e2e-4d1d-8c2b-da0958a46f7e\n98b5d526-5b04-4340-973e-2581bc52a84d\nf60850ee-e296-4424-91d6-93aa70203941\ncee53aeb-2303-47b8-a905-41ab47fcb560\n01174d50-1b72-4b7e-855f-96e1b81b41bc\n09845269-63e3-4ff4-acdb-879bbd72822d\n76e9d0d2-fb2e-42d3-a81f-b174c4779596\n63af7ae1-cff2-475b-9d38-8ffa02e43be0\nebb0d827-488d-4b0c-8dd2-2eb4a919ed04\n33850574-fac4-4bae-8ede-61fce5af5780\nf8d98d12-fd19-4ef3-83aa-513578dd4e88\nf22c51ee-b68d-4dd7-ae4c-99c14723f62f\n617bc652-b0e0-4d57-ae99-6eef3f235812\n8242e255-54f8-4fa7-a501-67e260490fa8\nd6bac127-f525-4372-b4d8-5d8d1e3842c3\nac6adb3a-d601-424c-a76d-20da038e6e50\n058d2cc3-ad67-4320-bfa8-0fd2f4a8bfe6\nde4edc74-838f-46ac-b747-279313f39fb3\n745093a6-7901-4f67-82d0-5bc0eb89a6d1\n1b9e950c-4e07-4d2e-8332-b50f668556a4\nb46b21ea-1de6-43df-8251-46d5d1681b13\ne8e81bf2-031e-4754-bc97-229807f39f80\nfde61c2e-761f-4772-9d6d-a161863d8531\ncbb15b4a-bac3-4256-9196-a819e2fce7b6\n1f8e2d2b-f6f3-44e3-b0da-bc4ae761c325\nca6db773-da3b-4161-b9b0-4a180bff3648\n29e76bf8-d342-4201-9579-11da5c4040ca\n88c6d0cc-3644-423b-8148-fbcef54c9f9b\n300d03b8-f68d-4a87-953f-054b55f7e33f\nc65de3ce-0ac0-4ecd-8c85-871ce28edcbf\n838ac83a-e0bc-42b1-bdc2-c3be36a9a0e1\n21dbcd56-a36b-438b-a113-1197156d3660\n14d70344-a868-43b9-a62d-61dc55b13832\n2dfe647e-168c-4c85-b7a5-142d38b3f317\n7fe9f4b5-c6b0-4396-9794-a3c8bb71d045\ncc022ac1-a241-4e3e-841c-f1503a4a045b\n337280f7-1de9-4822-bd2b-1243664f09bf\n63110759-6169-4ce9-911b-9b5786a4d3ae\ncb3cdd16-6ba6-443e-82ae-84722ee65c20\ne25a96bd-ac6f-424c-aae6-3b6bbc9e2b4a\n469aac33-7ce0-45e5-b100-5dc75690d246\n5af589d4-6c0b-4e11-ab4a-69e7cdc467b2\ne69eeae9-a49c-45be-acb5-6d1a8aa01f48\n04484ba4-9d8a-4531-a5fb-c258fd37ad78\n8f82088d-2e91-4ee0-b6cb-723edb129986\n0028f6fd-0eed-4d26-9995-55d8dc460292\n63ab98d2-dcf0-4b4d-b12e-0e502d0d69b1\n067486f7-d0bd-4084-8edb-9fef09690e3f\nf6684101-9d53-4620-af5a-49f31bfaf1bc\n032f35e3-9832-49fb-9939-287f511a1ce8\nb0aa7b98-f0ae-4c9e-87bd-fd73daa15695\na433049b-9756-44f0-bb43-1dfa92e14df3\n170ba4b2-da3e-49a1-8792-b0922d10f42e\na06c9d82-4f9c-44bf-a0e8-a586f2c0b530\n5ea9e180-3702-4f98-9c28-d22adbeef5d1\n27c4845c-d9dd-4e5a-8b84-cdac95a3d2c7\n19b52feb-ae65-4f8d-9727-4ed9827c62ac\n05f0f885-257a-4191-938d-5c59c5b157c3\n0c47f4f7-22e2-4431-83eb-9bffb3a7dd4e\naca78cb9-310f-40ea-9ecb-7be543c27549\n5f7d07f3-b287-4dff-bb89-3ac8413a7859\n1ddc1727-c5e5-4b85-9a06-41b2f16e7ffb\nac5e9c2d-0dbe-4c13-a1cd-50384494fdfe\n1e08726f-1a0b-4ab9-9267-8c94857e8191\nbebd3013-f67c-44fa-b915-f6784f6494e9\n883c113b-548e-40c9-b245-84d370df9105\n542c7be0-ca86-4cc9-b1bb-4f07535acbac\n60231de0-db40-4836-a30a-61ddddea6c8a\n7472aeef-56ec-42f2-a68a-c0ff13908b10\n8f708cbe-c5a2-43f1-9686-b479e7def529\nc858e3b9-eea0-4b30-b62d-26f267abc37e\nee9c2666-8322-424c-90f3-f4a8f694dc6a\n1e532040-85a3-448f-a929-580c28813f0f\n069e6e46-a640-4304-b7e4-c668386b243b\n1eb0b19f-83fd-420c-86c8-12459f72c4f4\neaa14470-b79c-4513-b6a8-8dcc5162f8fe\n5627b2af-3559-48b2-8ef2-00e645a4689b\n405f5a5d-c4d5-4cbe-934b-380b2420846b\n69dacc6d-2616-4ccb-9c35-d4ef37d64ab6\n2c68ae14-c504-46ba-bfbd-2286da6035a5\nda4efc6e-4bd6-4923-bd98-d59e2a80cf4e\ne24ee8b5-c490-450b-8a89-2c307cf6e743\nf0e918c7-ca9f-40a7-b4be-b8b90c7d9668\n405ea84c-c169-43ef-8433-d4a7cb5a4f5a\n1aa13977-ad8a-4148-ac46-85614bc25f6d\nb7a6dc93-a5e1-425a-9d5a-2c280d777aca\nf0d04205-b6ab-4f0a-b301-9cd4e26cc9fd\n8bd649ba-b1e2-44a8-9d9c-c44cdf09e0ca\n3b4e5355-778a-44a1-82fb-e9906f50887d\nf4d88fd9-db2b-4842-922e-92ec12f32903\n2b397544-76c6-40c8-bbe8-bfc9b3234caf\n5b53012a-7afc-4451-bb50-e75602714a7e\n28dc3365-a45f-43e5-9371-c5042977bf7c\n35080f55-0a74-40a8-bff6-716fe74861f0\nf06055d2-63bd-42aa-ac8b-c354e27aacc2\ne6b30385-fe67-4849-9ef4-d7c775b451a6\n1cc82a7c-1753-4e80-b675-029398fec21f\n8727e217-dfe8-4d97-a5eb-d0a3ad1ea050\ne740807e-b57c-4084-b225-c993179f7480\nc0252520-f7ea-4f51-a6c1-044a7a82f3f8\n0865ffea-a0af-4166-838b-8873a75878bd\n4459c296-c660-42ed-b771-522d4f801554\n0a243fce-454f-4cce-a1cb-c5abe305265d\n7a0a8c60-e17c-4057-95f7-b4dca1582ab7\nea04d246-8075-491b-bfb3-cbb5a6df6872\neb0e98f8-24e5-4fe4-b559-df3f582618c3\n607063b2-d267-497c-8b9a-6f9e08e35de5\n68d229cc-a25c-4e31-b0ce-1e7cf0223cd3\na799c8e1-2f1e-442c-8430-9103af9acd01\nfd7a998b-ad28-43cf-8171-ee75dc97300a\na750901d-dcc3-4f3a-9326-daffdcabc318\nd8c7e5ba-5b01-450a-bd12-0d18f3674e61\n140fc87b-a027-4fbc-b526-b21d33d858a0\na38b8055-bc75-48be-b7fa-11e67b7ee56b\n29a60508-0ddb-4273-a38d-7af797e203c4\ndbe213e3-dcc2-4c98-82ac-9e7c3cac85a4\nb48d289a-dcea-40fa-b0a4-e046c8900532\n8c321194-b5ee-4f90-8249-8e2da24db0f9\n071fd007-eb42-402a-ace5-1efdcd2d5495\n49622344-2d28-446d-bc84-3a4c49396aa5\n30bac4c2-0908-471a-926e-98259a291f75\nad485d0d-67b5-47a1-9dbf-47f2dcc825da\n1471eeb8-9808-4602-bbd7-df39291bd139\n5918a4ba-f117-4fa4-9925-d519fd364a22\nb325c133-a575-4d66-8887-0fd9dc988da5\n4e2c55ce-9a4b-4f56-b1de-66e904048be3\nbc9af6de-7ff1-4ac3-b42a-d6de2b67e2b5\nda17fb49-f9f0-42a2-93bd-41ed9b99532a\nb011c069-6d87-4846-bbf3-6922400769d8\nb74c4ba4-2914-4f17-8699-768359e32475\n328600ae-25d9-4d61-833b-d445773a52e5\nb78bfab1-6905-4f17-8caf-4454a43e1f5e\n013d4572-9ccf-4a57-aad8-890c70f32506\nf7aacb9e-2d6e-4c73-b419-42334ee11bb7\n99432f0b-6950-4b37-b463-52f1a3bb99e6\n1898e6a7-a266-48f1-b2a8-065334f2b798\n94f6cec6-a41a-433d-9b0a-b1b9e4b1e791\n7c81bafa-dc31-41e1-b273-9c0e58d3d1b6\n5583e992-052f-4bf5-8425-8a11f9eabf9c\n05b7c3c0-5469-40c3-91a5-ae0683769298\n34d894b8-62aa-49bc-9e5e-8d05548d2de3\nba9d8bb1-ee0e-4062-a7bb-3306760bbc2b\n5f06f802-20ba-4ba4-99ee-0e46bc988bd8\nc683a844-811c-42b9-b3fa-499ef6366ba1\n2b96d206-cef2-41f2-bcfe-430b894f018d\n548d13f0-68cc-4eb4-bddc-e7361d6149cb\n1d92d30c-7d97-4bb0-9b25-e7281581b1b3\n63fc3a3f-53d5-42c5-83f4-9c3130ff50b7\ncb1a117c-e006-4475-af1f-84bf18d18458\nf4e43de4-c45d-4a3a-8a33-f698be6fe3a3\n8f1b2aef-ae94-48d4-99fb-d6dde026439d\nf66e8f2e-74b1-4831-baa1-948238dcfe13\nb4a7c439-354f-4d61-bac8-e598eaf7c5a7\n9f414e39-b547-451c-9aab-78d1e0e2acaf\n35b5b9f6-c14b-4574-ab02-51ddb7e678cc\n740eda92-3b06-4946-a83a-ac6fe37cd77e\n9bc51386-8d7c-4fd9-8281-a6b4b1db210f\n828fc313-0397-4a36-a203-eefb2c4345c2\nd69af21b-e7f2-4c26-be1e-05ee3a337d16\n16679692-5fd9-4633-bb41-47ff07348d9a\n6e5deb8a-010e-427e-a47c-a9e25b0d4cfe\neb5ee301-41b5-47b7-92d2-1477fb1cbc46\naf5bc791-9bc6-415c-8b5c-d30065620ee7\nc2913c2c-cd59-4fdb-b317-0b91cff3f9d4\ndc6c5473-b6e5-4b0a-8534-49f3d8a25f7f\n9cc9ba64-f177-4b3c-a2a1-941bb4e63db5\n27881190-66b2-444b-ad0e-68793a392589\n0448d21c-7384-4abd-8cf1-3e0d383bf002\n2c18a527-284f-4b52-b773-877855cac68c\n7fd6a47f-4a93-40f6-8987-2e0aad6ec2e7\naeff8075-53dc-4439-a687-4304449f9e4b\n5aeeafb8-98d3-4bae-b3a0-f438315cb81a\nf78fcd9b-b455-4ac7-b8a6-769e13515e8e\nd395d34c-4567-483d-bd93-d1427cf87ce0\nac2d10e5-c279-46d5-ac32-faefcafd2951\neade0c28-98c5-4e98-bc49-8c3abff087ba\nb4fbeb80-6a53-4bc7-a3fe-ef0a597e8233\n6b418de5-1511-463d-a73d-b35a2598d65c\nfa08df60-3f8c-4184-b62b-559f807d3c7f\n55fbc232-ee74-416d-9869-a4583b66beba\n8646bbef-6cf1-4f0b-83da-21caf5a6bb2b\nbf9ae177-9b93-4e0a-a557-004faa3775be\nc85f4ebd-8876-41a8-93eb-49767597fe82\n99dfb626-ab76-478b-a90b-e778730f26a3\nf4eab605-ba36-4e72-9bc6-0d93b1c13efc\n218ab4f4-7a15-42e0-b7ab-8a3d4fa092f6\n6d8cb3f8-e326-4ed2-9df1-149f53ced5a2\n7ae0c4c7-db26-4295-a49a-e2848a9cb59f\n1f492b0b-86f9-4f3c-a30a-71a0d14d2409\nd93020d5-c615-4c7b-91aa-7751256473ab\nddab3d12-0f6b-4083-80b7-120735bdb668\ne7575199-3a75-4375-8bf7-34b0244d47e8\n3d9720c4-c477-4507-aca5-1dae80e1185c\nb5359ef0-0fa0-424b-b8c0-7d23946d692b\nce268da6-9e8d-43d4-a5cb-e8e531757850\n17207892-2951-446b-9bc5-e517770fc683\n70813d88-76ea-408c-899a-18173a43219a\n7fa99ff5-9eec-43c6-a9a7-7cf515acd173\n5fea9810-be67-41f5-866f-e10743426abb\n004db71a-31f9-422d-bbc4-dcd687aa6367\n0dcda862-5a00-4643-a401-7c29315bc59b\n78676e50-0c8e-4bb9-b269-b0d1ffcadec3\n852a1329-ebe8-4d08-92af-c8126efc2b1d\n58f5e729-87a9-46ee-87b4-ee3b2ce2ec30\n004255e9-88e8-45a3-bbd4-dff6ba5c8d28\nfb6e9aee-865a-4e34-8d10-54847b9a0089\nb2b3e72c-8889-49b8-8b7d-e5b5524a1648\nd0247c2e-cb63-460d-a1ba-a2307834e322\n62e83ed7-de01-40bd-8df6-47d22459cc34\n4c127daa-2146-48be-a90c-3c8b83617115\nfc2cd8b1-5734-4987-bc4e-44fb5f6a4a61\ndbbe54a2-9237-40a9-93ca-26b002591ead\n560494d1-9fcf-48a0-9044-e9bc3bd3ac68\n4720190a-2075-4dff-947b-c6a801f84ce5\ncb775e07-9c16-47f2-827f-6e776535e894\n7b78f1d0-9cd3-4e1f-9446-29bba799278f\n2a5fcefb-8439-456b-807a-fd48885b6570\n561e9338-425b-46d8-b1f3-43dd1db89520\n993ab10e-e81c-425a-9ec5-f6be0887e2f0\ne521e2c5-6fc0-4c84-8497-e83ab6996a10\n17bd2168-f52a-4552-ba82-28c9a5d67f87\n920aeb3f-dd20-4eae-ab46-521b359fa5a0\nc3a42491-ad1e-4ba8-871c-2e5be7514603\n7e5a7ac1-4315-4f24-8d43-ae9677e70832\ndd87b8fe-d8af-4bd4-9c23-0c4a3bfb7a76\n08f1060d-da6e-458b-a46c-1a23de586676\n7855a4e3-ac5c-4733-84ca-ebfd6693d5a4\nfdb41b85-2f5b-4d57-984c-b5402a0560a1\nd31ea6d0-7fac-4be0-8ee3-e4d8af025e95\nfc7e814e-a1de-4cb8-9310-07bcf30b8d6b\n63fc2cbe-3ba2-4f34-81a3-94d64faeaa7f\nef7d6c5e-fa13-4e88-8b4f-de6c57680876\n0f2f7961-f885-4371-bc0d-71ac9f774491\nd0dd67d9-61b3-44a0-8796-9ce132f98aec\n36523753-c8ac-43b7-9239-033f393f45fa\n2c6b1898-985a-4153-b27b-bf2062b76053\nafba4b85-e83a-46c7-b589-131ba6f6f534\n1c0f929a-3204-4296-b4a4-4e818e992a09\n0a08d4b8-f73a-4ad6-9fd5-8275994a3edf\n78309892-9053-4f2b-8690-f5efef441368\n0f4734a3-19a1-4869-b197-cc252b32b3b3\n9c2872e2-8614-483c-b33a-a18194a125df\n003406d8-b4c9-4d94-8be6-d4cf5f6ecf4f\nd20df017-0b38-4402-932b-e37ac96555ee\n67cade94-6493-4ca0-b504-a0ca7753d75f\n5e824e42-fa6b-4ef4-ae6d-733951d0e62a\nabcb5516-3a16-4f40-809e-8b34b89dcc9b\nf25bb0cf-5fd7-46b2-b223-253f563381fc\n74d434f5-143c-49c2-9926-1f8cd8ed8766\nfcf6a6cf-362b-40ed-81de-47982941530f\n04645fef-b65b-4ca9-81fb-0a28b73e80a2\n7a237e73-03d7-47b6-bdc5-40b6573e0e54\nd5ce6c68-3f45-4f86-921d-7e66d10125f7\n98424cdb-af03-4ff1-a8ec-69b1213866c5\nd62dcfde-6ab0-4b89-a84c-bbba0b092fe9\n2c1b8019-5206-423d-a608-28c9520021a0\n4c88c74c-3817-48c6-a637-fb6fbbbfa8ee\n160e5bd9-ae5a-4e87-93df-76a16c80e781\ned8ad12e-f045-4569-b614-2ca684838587\n5a87c389-8579-4009-8d51-8ddd28a11edc\n86ec71bb-6864-451b-ac7e-b2ec3e9c07c1\n0dc9d4c5-5481-4812-bd99-abf5b5f191ba\n0598b3b8-c349-478c-bb41-dc9ccfacc5b4\n05a8ea38-795b-4494-b64c-3be81dbc7ed6\n0c55604f-146f-4139-bdcf-747b2f03d56b\n64104d69-b723-4c7b-b6f8-83277a946dce\nc65fa4cc-2023-4360-8712-491eb150c06f\ne48e691e-cb8d-4ceb-aec1-edbf5b09ea79\n4b3d8ec2-d980-43d3-9389-20b4d54a7657\n32fb137a-643c-497e-afaa-8eb641816a84\ncefd0419-7f11-4032-9e77-d377519a32ee\nf8b403e4-52e7-4a68-a153-915998cb6e77\nd217723c-e764-4b4d-9353-b2d2f5b5a5e7\n22176ec8-f82a-412e-8757-d268f6220dca\n8f0e6fdf-0b5f-471a-9707-a96ef7383fda\n55db9f5a-9c49-4499-b835-a1e4213343c7\nc7083f9e-7b06-48e2-94e5-e4cde6ed6af8\n04774f68-9ed6-46c3-aa38-dec56951bd9c\n9adff5d1-4ce0-4b52-a846-3565e07de821\n0135a1a9-0067-49b7-bcd2-797f48c7b8a6\n66c550a3-dfd0-413a-837a-377407a3013a\n70efbd35-c1db-452a-90ea-88aca6923081\nce216210-4735-4a04-9d0d-9fd43939113d\necfd0f69-51ad-46aa-90b6-2218b32ce7a3\na05e4399-aaa9-4e0c-a373-a5c5af2fef35\n2a45d3da-ac38-4b0a-b2fb-47e8758137e9\nfcf36adf-155e-4d6a-a2f7-a68c93768b37\nb177b97a-147f-481d-abb8-fc52e5bf6b81\nd4762922-96b1-4ed0-a826-0fbfb29091e3\n3edf7534-8dfc-4365-987e-741109940903\n5ba8e4a0-cd26-4b8f-91ae-838d352483d0\n3f887cfe-35c1-44e7-82a3-f62b07d7a825\n9a133c01-4a36-4bd9-bdae-31af571006bb\nf9e55d96-6953-41b3-bf52-1bff958b9731\nbd9dfc56-3914-47bf-a4d4-bde329099024\neccdaa6b-f372-49e8-9ab0-167fc424aaa8\n6b427504-2f9d-462d-9c97-0165b06f9139\ne31eaa0c-2430-40ff-bb71-ceaa9a39482b\n6859a068-228a-4b96-be79-a3c2fd765a8b\n9cd6f939-72a8-43fa-9564-41c14b3f1020\n6345700c-5a00-49e8-8a18-5b9d121f97b9\n5d50a746-3a00-4e40-8193-588ebec7cee4\nacdbf0da-8047-4613-a3b3-798400fb7dc1\n5104542c-c137-416d-a849-ac05550b9c7f\ncb17374a-ba18-474b-9cfb-a0f1c55a3d58\n80a96cb0-f486-45b7-89cc-4d9ee2b10ab8\nb62bb667-5a23-4a79-b905-1f02a6e8d3bf\n02695cd0-3f17-4b7d-aa6b-83309ca35817\nf58a6d5b-10f9-4fe9-b3e1-be5c3783a135\nd7a6e5a9-6125-42df-a9ae-9c745f7b99a1\nfcd16e4b-c79b-40f9-9d38-23be2497d548\nc27e974e-aaf6-4dde-8568-9aae0e955e4f\ndaf507fa-e40d-4235-b710-c9f0bdfbe8e5\n40820f7a-f4dd-4df0-b97c-178b0a476d36\n173fdcfe-1be0-4d21-a67e-849e2d5d8ee3\n0896b97b-7011-44fd-820c-6878ce323599\n1f8d37b1-7da1-416d-a65a-895465d1840d\n6c2522cc-b60c-4b2f-aeb4-61fda7eaec7e\nfae741ff-5541-4d68-9f5c-6eaceef35491\n1247b542-0c4a-44b6-bd05-9cba3392bf06\n3337d173-4c07-4fc8-8ff6-ac30572f195f\n0caf85d6-c71e-4c3c-8881-9a6ef840036d\nffa7bf02-f5f7-42c0-80bc-62977837811d\n57958910-9fe1-4a96-8fb9-f392b8833772\n78af098a-8e4a-4de3-bc9c-44d9fb40d04e\n7e7d97ed-2715-43ba-b07b-008a2cec8941\n8817fbb3-d3b5-468d-acdf-909e65fe4e0a\ne27cfa9f-efac-4df9-bd36-1315e5ca7647\n8e88f75f-c3bd-4502-bbc9-9bc54f2840cd\n78f4d8c2-04e8-47e5-833f-92bc790b21d1\n83e62d9e-55b0-4059-8c0f-2facf41a95fd\na5fc36c3-1845-41a5-bef3-39b8b6c90450\n473b5728-646b-49d1-a8f7-9af14fd97d01\n9828f2d9-ec1f-4958-bc6e-860e677fc27c\nb76ee9cd-8254-4674-98fd-cd717915eb74\n63f95514-9db9-4b30-91f6-2743b31cbaee\na8ed927c-32de-4960-9f9d-592ba5a9842f\n09051af9-48c8-4953-af7f-8e3ca35e467f\n15717ba0-d998-4c32-9fbc-4995443a5ad5\n899e1b35-de76-4f6d-bb9d-09c934a93355\n505b2af9-b6fd-4897-9777-791cda26e8eb\n2fdac523-5194-46fc-aa85-4f1bbc4aecc6\nf272a800-520d-40a7-aeac-e406aefc0778\nfd468878-346d-403f-94d0-47e9352ac3ac\n85e0d808-b6a9-4910-9641-921395a35557\n43d00f79-a926-4938-b255-3a0ce5294877\neeec8507-2f56-4dc9-a8f9-bfd8a1171b98\nfc09e794-c2f7-4733-952a-bce62ecc5708\n1ec21037-1228-43c7-bb11-be2e9c501491\nfc359a64-e930-4bb5-9330-70d0da8741a1\n2ea3f16c-132e-49fa-b76b-495f0ff22bf3\n347b1a7f-7ec6-4fe7-9897-e652e93997f1\nd069b949-f2c6-40a3-b797-3b18990505a5\ncb8b8588-949e-4085-a498-c49ba935a693\nc4f7ac1a-feda-45d7-a37c-7f0ae25fa385\n450f1916-c4eb-4272-b3d2-1f81dbe2740a\n8dee91cb-ffbf-4298-863c-879fd04a9b6c\n6471e2ba-6003-4e21-9c2f-f3894692c296\n8370fc4e-cb59-4ba8-a8ae-e24d11f6e7cd\n2ebf8ee4-d4ad-4fa4-8a97-ea8a12228b73\nf69d484c-d6ef-4276-bd6e-48e834c7b80a\ndddb0a47-3713-48eb-8c92-b60eecf185d3\ne391002e-aaac-4b4c-943f-b5377e3f8ff0\na93d9ad5-31ee-4eed-ac45-69f54d4d863b\nd7189cbc-e66c-46d8-be40-daea2e084397\n512f9eed-d326-4efe-8ecc-5aa3ae8328b9\n3d486fdc-890b-406e-84d2-62114726f60b\nd1931a22-2e4b-41b4-a3a1-17c46d7794c0\nac82905d-a661-4c8d-b46a-58cd89e16b92\ne2ff7c09-79f5-405c-84a6-43edb7d2796f\na2331727-ff32-4f25-81c4-27c8b97b0da5\n2f46f78a-650a-4c8a-9f63-cdfcd8709809\n3be43058-dd72-4d78-830c-e09c72e99399\n7aecc080-2822-4337-9ef3-d37ca6666363\n5d0ed684-9feb-42b1-ac94-6863c6a0ba7e\n2a840803-38a6-4ad7-9511-5285406d94f4\nfd9fbcbe-5cbf-42f3-b0a5-46a9fab7931d\n8e14c6a1-a54b-41eb-924e-0eb070ce708a\n34d4469d-cfb1-4f9d-ac99-0b1c48fa51fa\n39ac8112-3695-4060-8e6d-04706f93a9eb\n1305f92b-c18f-4e08-89cb-68c8831b083b\n2b01e94a-1715-44e5-8e81-266ed21a642e\n817d095e-6446-4546-86d5-90ccc01d3c15\n789f37dc-7e0d-4581-80c9-d93a3e0e3423\n9ddb6bcf-7cec-4b65-9b26-28e80ae3e762\n63aaec7a-57bf-43d2-ae3d-6f9ea1e2a9fb\n661113f4-0dce-41af-a9a1-ee68b5d44254\nfd859163-1feb-477a-93c3-bc5f074cf83c\n1152da2f-018f-49de-8fc3-44fef2772fc9\n32601b43-77f3-4176-9e35-cf98c29658ac\n062ada7e-d787-4520-b1fd-0f880dcb3545\nc2d733d6-a49f-4ab0-b780-bc200d47c93d\n8706f6cc-b868-4560-8254-c6f49153004c\n4e2a991d-ea64-4345-8d5e-da5fd6f9b601\n4825f4d6-c137-470a-b7fc-924428378776\n3495d321-0069-4e1d-83a9-bd8be5dd51b0\na6dba85d-6218-4441-a677-e060a04da6a3\n2a727c28-1061-406f-92b4-33bcad779d54\n38e22c0f-ed02-4264-9d9b-d7bc74fd4087\nb5196758-1209-41a5-8478-b0eb52c5033a\n46327d14-a012-4e63-b246-6415ee930849\n3ac0bdfa-25ee-4a98-8847-0d6577486bab\na195d287-b975-4fb7-8e47-5acd49132f90\n036fe6d1-5cde-4b4d-be78-19e0828adf1e\n05ad3334-a546-45ad-a2c7-650576c9cc3c\nf8d60800-2c48-4499-b0eb-a23309eccf45\n8df61fd5-5587-4b4c-b385-fead4411d351\n0da2f25d-bcf6-40c5-9555-38caaf825b84\ne25e08c1-98ee-4ebb-9d69-b38643ae8dce\n91f2202e-7d56-4170-8524-bae0da0673a7\nf2819dc9-d967-4aae-b8fd-f101beac71b5\n2f471a42-5013-424a-ac9c-6198cb93e4ef\nb6ca95fb-5fe2-4d33-b32a-503fdb2f7000\n263e8117-3846-4a1d-b6ab-306bec597bae\nb611af9a-a56b-4cfd-871f-459023a6bfdd\n8b6b3c62-0674-40dc-9620-aa0fea68637d\nf55645cf-b6e7-43f3-b0ea-483983128617\nf2746f5f-3968-4188-ad59-72f917f2c5ef\n1f2e64aa-ce97-431c-b818-c6de4fa99ea7\nfec8a7a7-7696-48e5-9356-fbe976ca1de2\n736b9409-58bb-4cbd-b071-4cd961b28a1d\n7c275938-ce93-4d0a-85c6-c55da1d0acbb\nf35e653d-8560-47b0-881d-d34307b13fa2\n4c8811c9-4ea7-4b44-bd09-3efd215ae405\n19dc9233-e19c-499a-9ca6-54adde9c53cb\n27c8d5f5-df0d-4a03-8fb6-f112a62b5c30\ne3904e44-cfa7-4eb9-93ad-9f583befb91d\nb3d2cc53-3612-4903-8cae-f9002970250e\nd1f42c56-9f99-4c39-a3e9-5f67b589f9c2\n278808db-8fbc-4f6d-a81e-9da98db2210e\ne88ea1ca-530e-4325-8420-4159274a1b04\n1da28515-098d-4d69-b203-c1cbb6a2077a\na4d04377-3157-4917-b777-7fde4f616bce\nf0a69ba8-38f4-4097-b7e6-71f21905cc65\nc4accd26-bd6a-4111-a842-9956fe9959bd\n88bc0c99-f885-41ec-8974-a77e93ce580e\nbbc4afd7-3ea2-45a1-af55-c7f16b9cb7cf\n33d681ed-0198-4369-a01c-396690d173a1\n8bcf5376-5410-40dc-a811-c27bb32b4b90\nd15f2ed9-ed7a-426d-9017-be34c2593497\nf2abe4b7-bea6-4e10-b306-096380bf8912\n6359f779-63ba-4716-a3cc-70e4676acb01\n3002ca9a-0d5c-4ac1-8361-b5e2040c2043\nec7cb1cd-4ece-404c-a10b-add9cf346289\n631fc4e2-dd3b-4029-8259-aeef71449903\nf2286de0-55b4-4201-ba29-9076f197c6cd\n1733f334-5148-4516-8e35-c837b892e4bf\n3cb379e2-d7ab-4c95-a5e9-bded195242f5\nca8002d2-2f36-4af9-a957-be093c4253ab\n18b15829-747f-4b04-8cb4-3d0bcd862b8c\n6b2b3fc7-171f-436b-8d5f-4d915a21d31b\nae426c19-d661-43d4-b058-bbb18a7c86c9\n36e75ca7-387b-48ba-a4e2-761cf324c5ee\n12f1103e-cd5e-4ed2-8e13-416f5356990b\ndc1c0121-0154-41ee-8f48-984d9e460dd2\n2cd26048-5f6d-402e-9efa-df2f35606928\nd67b14fb-d597-41f3-a0a4-93fc0453e1b8\n72a3ac51-67d8-4ebb-a1cd-dd370d0b6e0f\n555ccd86-7619-4c40-bb3a-6255e6e808e0\n58c95461-7e56-4250-9674-f4609f686fbb\n7edc2c1a-8a69-425c-bca1-a62c06728ba1\n0dbe9008-23e5-449a-b122-84161bf41dbb\n8047094b-d5db-433b-b5b5-142cc6fb65ef\n7d2a0706-69fa-44f9-bdfb-ec94fd823081\n15004c52-dd75-4336-9f39-6b7b5ce7e538\nb36de19d-b9c0-4949-98d8-c90d3b59d20a\n67bffccc-6bf0-469c-bc72-209afb422b2c\nc248bac2-e4b9-42f5-80cd-0d30de9f9268\nae95859a-038f-4ef7-9fa3-0dece1be779b\n544a5648-eea4-49e3-85ab-4c4ff8419391\n9691a37b-3ee4-4606-99b1-7bb2700113f6\nbc9e7167-ca33-4365-8745-b5976fdc33f6\n68965ea3-eeba-4724-ab64-113fe79d0e5c\n4e95cf5f-6f6c-4dea-8c7d-27f3b984c923\n061d895d-0f1b-44f0-9caa-2cc62d1e05c9\nb424b71b-cb54-4719-b438-6c15037a79d0\n4e9cb0aa-9d0a-4b42-b234-706d4cb6658a\n4ddff4ca-0dd2-423e-b0d6-15b3212da570\n340fde49-bf15-448c-abef-3fb3906dee67\n2ccf9710-0f13-414c-a6b1-2e26735adb87\n90d39230-d6bb-48a2-94f6-a706436483a4\nc9edea92-e3db-4509-9818-c4085b9e06c5\ne8ad4950-48ac-4565-a79a-509b97fd6881\ncd42e779-4425-4043-881d-c1d98d9ee80b\n03b76abd-2ae3-4dcc-8e46-185f4fd3d3ea\n8eb02bff-a27a-4dee-8ad4-e1894eb48b41\n2db25309-ffc8-4611-930a-cbcce900f44d\nfb122517-9d74-47de-a8d0-4d77c75a0bdb\n099e577e-8999-46bd-a61a-9a619be45760\n58f18bbb-4c33-4ac9-991b-44c6754b9c8d\n8876afbb-f42a-4205-8dfc-ce7afad580d0\nf34bad56-dcaa-4025-ac66-e30045c2959a\nbb464849-1cd4-48fe-b07c-ea3e047567d8\nc77ccb56-1f1e-4a8e-ac59-7451b5d52613\n2fac626b-ba05-40ea-872b-00b6106ea2d6\nd37985d3-9ffb-40a9-adad-8daf0fdfb6ea\n69b388eb-7240-415f-873b-63c39e10c27b\nf92314f5-0c98-4485-9102-3e9bf2ffbf1e\ne55ce109-c5da-4051-b3b9-bd6b08b9fac5\nbced097a-81c6-4a1e-bd20-799a7bb43aab\n02132860-2b72-4c73-87c4-c6c4d7470d8c\nab903d80-8862-415a-a806-18069fc45ffe\n0dee77c7-cb74-4bc2-8288-3842a5e5d639\nef0e1b1e-4cfc-472b-8e04-78fe59a15f47\n7cc953f6-73de-4c73-ac12-5f973935b207\n69b45df6-9da9-46f4-940b-83e47e598ba3\n7ee3dbff-96bd-4431-9863-8ede563dee58\nf02aa976-0fe3-484e-a96b-1cd2d85665dc\n69cb6132-e46f-473e-8655-6a032f19fafe\n45799e2a-0fdc-415a-a206-e1fe0aa89c18\nff4cdfe7-3d55-4703-b537-8e2eff20d1ab\n54092eb1-8b67-4bf4-b7ad-0111b9444c4a\n84e9cdde-0766-4042-90ed-25953f56a4ff\n82b52d82-24cc-4bc4-b284-501c61726143\nd7e21245-08b9-41cf-9fd5-6615fb235c7f\n589ce879-ff13-4103-a439-d2fc412e238b\nb5d4de29-1a22-475c-896c-f708474b9c81\ncbdf17d1-b980-47dd-828d-cf773daed200\nf50e7da7-7d7a-4ebd-9715-a44721c8b7fe\n6a868a43-1f36-4c1e-9782-baafa35a1365\n5a57892a-3c3f-453f-bb66-684225fa6ef5\nb3871ce7-2beb-439c-99c4-7a5ca4ac29a6\ne1f0cfa0-342c-4df9-b91c-27b0a297f8ed\n93da646a-0ef6-43da-8a08-fb43a1b34562\ndc54db8b-d2ca-4a87-bdd3-a1db17093e4e\nf64bb1db-6ddb-45c9-9b0f-21de35026456\nc76a231b-d5f4-4001-b0bd-4816b9310e0a\nc5978352-0346-4aac-b582-361795bd6302\nca946ce9-a8de-465d-883d-ecfff51fb581\nf688f3b9-b947-4498-a020-1cfec455ed4a\n82596428-1ac3-4657-928a-1f5b13dbedfe\nca2c93d3-f237-446e-9eb2-fbd45afa54a3\n420723c9-9f4b-4aac-8314-2bad80ad214f\n18d69dad-6103-4ffe-bc7d-93244e13d767\ne62feaba-67a6-4789-b10a-8873fc76ff3d\nb77c4999-c921-4169-9960-c5fc6733bd66\n4d5a1041-5224-4c07-a367-a49015bfae1a\n3ff0b2c0-781d-4344-9cf4-e61bd14a9971\na0cf6986-edc2-4148-8c59-49b495883b50\n0db89a9f-1fb8-4a7b-bf7f-b4133b2c45a1\n1c3612fa-18bb-4a6c-aba1-f35440bde2fe\n747e2c0e-68d8-4f26-a8f0-957db8e5046e\nbe604849-4bdd-403d-9e0e-55d82278a353\nae86379b-ac53-487c-b173-3933b5f253a1\n51ad26f3-fda6-4dd3-a3d7-57458be80e92\n6d2977ae-d63a-45c1-9aee-8b0b27850650\n6fede697-6b95-41c0-a2af-11b36198464d\n6e0bee89-7472-4f7b-8208-526a0d0c0a22\n1cb932b8-5a03-4e0e-8710-0a017dfe6c29\n33303d59-3f62-4680-8874-b1811a172342\n600e63b8-604b-41c6-9f7d-a8f2a2256b98\n2b4b12dd-7d80-4346-891d-b7f344ce0f15\n648e7e0d-2fd2-478c-9953-0e259b1b4374\nd4b2db35-a6b9-4a68-a654-3256668622ba\n9b39fbe4-28c7-4fdb-9340-78604b60174b\nde4bffab-4412-40a3-8d94-e82d008a0505\nb4dc1f7f-889f-4fd3-aca3-6f1bee497ada\na762dedd-5739-4b53-8227-3311955b07b5\n0a7f7beb-e1c5-45f4-93c1-2cc53d10d5cc\nfa60b059-1e2b-4f4b-a35e-dbbbf35c2538\nc8cc8af5-ad00-4515-a3cb-50d915105b85\na15c4bc9-84f3-4296-b196-a714b7c41126\naa08b785-4be3-432d-bdef-69273c6bd950\n9cf53902-4c2a-4771-8a1c-16978233ccf5\n33265be5-0e7e-43d7-8078-e716b5612b44\n2815f881-48a9-4346-8a10-c014c6c869ce\n88608cc2-2490-4ad0-8ccf-b62d84aefcff\nc455622f-a1a0-4704-a32e-567f4f5351fa\nf2a12388-6a4e-48b9-a956-efde8ccdcde6\n3f8d0aac-655e-433b-b92d-aa1bbe289645\ncc4f7812-da06-4ac8-8fa9-dbe8b266ea31\ne9513351-3aac-43ae-8d3f-446d06db7dc9\nfb9fdea3-bd43-436b-ae65-fcb07826a31c\n555ecc7c-c533-4917-909b-eafbb72deb58\nb70bb6ed-61c1-4e40-af46-fe6b1348d8d4\nd0d82dd5-b354-4a2b-8467-a4e03e3aa7a5\n72842e8a-c35e-47c9-b8d1-1ccfbf3e80d2\n7ad1451d-7069-4ca6-b9a1-f124579b0d20\na4cb491b-6079-400b-beff-1336d971bfc3\n0eb888ce-ae2f-4007-9cee-55cf761382ce\n35b463b4-e94a-4d6c-a026-da7948e8f6d5\n05df8304-f327-41ae-90c0-53e5d63498e9\n38dcf964-61da-4539-9174-bec44c5b973b\n5a10ffb4-a2ab-4826-aebb-2610f6bfe608\n5996186c-945d-4900-8331-dbc5b7586d1e\ndf7be7f5-8222-47e2-977b-b4723220a929\n49006d0d-2ec4-408a-a8e4-50d833b1dead\n852c4e9c-7fe6-40e6-b530-34cc1be01b1e\n78b91a6f-2243-467b-b346-0750c2761ff7\n92cc885d-4ada-44d3-96af-8bdb8f73ce78\n489e66a6-994e-4306-85cd-fcda20a1f074\ndb11fdfc-7354-446c-916f-0e99a6bb0b55\n3c2781d9-da8d-4e26-bbe7-ebef7c7754e4\nd8801e8a-8c9c-4682-8081-daaeb1616073\nada2dfe4-cdc4-4814-a9fd-03fcfdcc3eb3\n8bc3aaa0-f1bf-45b9-84c7-1fde1f4e066b\naedf9428-843f-4074-914b-b3e13f28c34b\nc7bb794f-7a3c-4646-90d7-e4b567d2104a\n628c1638-2fc8-49f5-bb76-3b4ba5073fa6\nf072311d-c379-4439-8c94-7cdc54a37b25\nf21ff2e6-25cb-45c3-86bc-84f0e01c2c18\nb83afab3-008e-4e19-b2f2-17799600414a\nb32b5e72-5108-49ad-8146-317d6433fd13\ncde2d136-bd02-4eed-9d9a-b5cfaa102561\n39fc0d9b-540c-42fd-b567-a954b18b89e8\na56b8d47-5dea-440e-ad7a-65383819cec2\n9a903277-da63-40f4-bd97-da9ba129f854\n128b054d-a7f6-46b1-a375-3c4d848d0afc\nce83fa41-7f05-4d0b-b67c-51e2c50fa7af\n08262a6d-ba5d-4683-9c62-446a38d4dca4\n814143df-2018-432f-b44e-7220259d25a1\nfbb49bb0-9e1d-49e1-bb82-6b19dcbb0b78\nae5813cf-0d5d-47bf-a194-4a1feffca050\nc7407407-2e15-478a-ae26-3af50dc7bf8b\n8738dd08-efed-49a7-bacd-91be2d50ecdd\n802d379a-7be5-4eb0-b8ed-43846e132541\n4e23cdc7-9f88-4e3e-9561-33ddb0ec5df9\n40ce22b9-f308-4d1d-8946-8aff1aadcc93\ne774b8a7-5dcd-4312-a9b6-3d3e761a1584\nac9b8115-5d25-4586-992e-1bdc57753071\n8a5cc871-177a-46f6-a636-86bfe957864d\na3e180a3-9eaf-46fa-9ff4-d9f7d6f4346a\n5b90fb64-4af6-40c3-af45-6462e319f43e\nf1dbb997-19e6-4ec6-86c8-0458ae621639\n98429357-bc36-4365-89f1-d94e82a5f691\n39d26c1f-2324-4c23-9b63-0dfdf530a254\nac8c99f7-b316-4a64-bce7-9af54c17ae68\n115c91a7-85e6-4659-bd33-03c877f89a4e\nc6b0005d-7c9a-458b-8eaf-404f2bdbc738\n1ece1a31-0764-46aa-930d-d7f9c66d0dab\n2e8d819d-b99c-41be-9e6f-fca7cdae3608\nb09c6e0b-84e3-4f67-8608-c64d91452ddf\nc83cb599-6591-40fa-8dbe-529f1863c12e\n49436fa2-4e4e-4127-a131-94f549dd27fb\n1aa59dd7-4798-4a67-b8e5-d166ea1b381d\n3766ad6f-bad6-4849-925f-9deda9930adf\n5576dca0-f7e1-4c30-b9f6-901769f9334a\n9f901311-390e-4313-9ecb-7e16831b8484\n8e995051-be85-42f7-acc2-c0740d43563f\nca712c3b-86a2-462e-9946-bd5bbbd0ca1a\n5b434579-65d5-4b2b-95bc-0200d8f36fbf\nc7946b93-6952-49ee-8b2e-c41ade14d98b\nf3f82eca-8665-41bc-b923-cacab9642f24\nc5e806ef-aa21-417b-a5b3-12be7c0b0a59\n6821a166-90ca-4878-b87d-53cb1ec41f2f\n238be8d6-6145-4a28-991a-6e48ac0e536f\ne328d193-8cd1-436b-9cd2-b2e6de82dbad\n5ebc7c63-6c85-4130-ab4b-a6b5e9424597\n7a9988cd-28d5-431e-908f-080bf4c76b92\n8129bc6c-61b3-4d7a-9b88-b869925cfaa4\n37c5d772-8b09-4b02-b1d6-cf4442df4ed1\nc3bfb7c0-a6f8-46dd-9039-22ed52a9f662\n76b375ca-e936-4e25-8837-d58559908ba6\n0ce85760-901f-4a3e-9742-d4e82c6daed8\n480b54bf-535f-4342-bf86-669ff4005e19\n2a5dc327-2f6a-4cc6-9865-0e94b65ca522\n97d352d1-240b-46e8-93d9-bae3c96d0b76\n0945d811-8af5-4fb2-9b55-95eb044957f7\n1d8c2608-ee20-43bc-9827-3a2ac8df9cfb\nb6f4b203-7060-4255-9d2d-02a4544f7bf1\n3e5cd05d-b938-49eb-893d-26ab87305dd0\n969f80e8-3ed3-40c2-9726-d8439404eef2\n0f64b5b0-8184-4e34-a21c-634f187c4382\n8432d0de-fb7d-400c-b3da-01e2abfd0472\ne6ef0d7e-43fa-4b7f-ba83-98698010073a\n29bf4acf-4255-4faf-9f15-6b973b529f06\n3c40136b-4b57-4de1-b2ae-c1745c7252bc\nf4851ab1-6233-4b3a-9d8a-77e605e2b976\n2b3ddb73-37ff-41c5-8e05-859124c08079\n62ddf054-3456-4f5e-b4f3-569087c91a7e\n66a9c81d-e859-433d-9cfc-7fa31c5247c2\n4d1aa767-441d-41c4-8ae2-47617ddb7939\nca3a4dfe-32b5-452c-a301-449f8d1a4c9d\nf9efadb4-0ef9-475f-926c-24490a2256bc\n0456c9c5-3246-44d2-b181-82001d5e1804\n8c30c737-eaa9-49bf-9b04-58f7183e525c\n88cf7bd2-6fc2-4e2a-b692-de7c31d03d98\n2dfd194a-8c3d-4375-846f-7640c36c89b7\n273ba006-b1d0-4a8e-ba1a-5abfba0598b1\nb7456fc2-01cb-4c4d-9d3d-efb63083e24e\nac1b28eb-c3e1-48e8-b371-f82f166a119a\nc4190a71-f7c5-4805-9f41-f7e3f6ff444a\n36e53b4b-4fce-453a-b0cf-aa08554ba2eb\n8582b272-d597-4acb-a70b-036f62128f3e\n17e798a2-5d21-4d0f-ac8f-9b5ad7578fdd\nf72dea50-05e9-4482-b398-73399f7faf4c\n43cf2e85-f151-4970-8bc1-c938b9ec4686\n1d975c5c-5b2d-4999-a4e1-604f1a6ebb6a\nde73fe71-2be8-4989-b2e0-d3238b72fe51\n36548fc3-cdcb-47a2-88c2-fb8cc1c37408\n044c1aeb-79c1-40ee-8866-0ca7b245a45b\n66fe783a-b4e7-4bb2-9401-63f83ab616c4\nd30b16ba-30a5-4485-b0b0-2013a3a594e5\nf1d8a136-4799-4376-80ce-fc8f8fd19687\n38e37b68-bdf5-41a8-ae96-72db09542be1\nab2f3131-761c-4203-99dd-d7ee95bed8e9\nca9d37de-171f-4570-bf5b-fb89c74a97ca\nd96e315f-5c83-492e-a8ea-04b71aa98e91\n728e1a5a-6f30-4129-843d-c8b540ba33eb\n647924bc-8dfb-4f40-877e-3bf576e10eb7\n0cd2962f-5415-4a7d-8b3b-83ede90a6687\na0261a51-3f96-4c29-aafa-bf7871f1d411\nfd4c1164-aabf-44c1-af97-2f74a3beec9f\n88f82c72-06d9-4cb7-9b4d-ccac904627ab\n8f45d917-ebb1-4024-a337-1205d9a35c79\n05df8fa1-5f9f-4929-887d-04116e216612\n69983c03-053d-400a-aefe-c5d077860825\ne2b2849a-1d57-4b66-98fc-65480daf745f\na8fb1a60-955c-45a8-a7c4-5242d28d6fc2\n62430edf-50b3-42c9-b9a2-ecb42153985a\nfebd38ab-4bfb-4e71-93e0-a15403d5eb24\n209b8585-6e31-4244-ba6a-d7e02d960b38\n24277b35-a484-4372-a6a2-08ca3882ae15\nc898856d-d435-40db-9371-aa90ff2173d2\n7aaf31fd-c205-418f-a15a-67bef53b8bb3\nfd892b63-ccba-4f2c-a474-ebf4e820bb3f\nd0b435c4-cfa5-4c3b-adcf-d15780fe0eca\n1b0427ae-3eaa-42cc-95bc-77a166860790\n04f892df-0844-4bb8-af8c-1c28985f6d44\nf90ce0a9-f06d-4958-a763-e15db335a751\n3a8fba10-d8e8-499b-bb05-609ea8008cbe\ne6bbf276-ab02-4103-aecb-3e9ce65015e9\nec86074d-b09d-4954-86e8-838c225e5220\na4bd2cad-29f8-41f8-bcd8-f8322941fca2\nb5fa82ee-8dac-4670-82e9-a97adcab7777\nfcc19728-4406-431a-b2ad-103db016fdbb\n110dd712-66aa-47e8-986a-ae072dcdecc2\nc2cd0e52-90f2-4a5a-9c8e-02fc4d9467e4\nb499967c-ed56-4ffb-b6a0-54cf30c09833\nf9721f69-4b47-44bc-8dcc-f13e744a4ccb\na010bdca-5d47-46ac-9243-88a558a95c2a\n8ad4ac2f-309e-4d92-8984-90c7b88503fe\n812e3290-7ca3-49db-b4b4-445fb74faff2\nd85a9ebe-e63d-4fb3-a8ca-ad22d4bcfff7\n54224c8f-657e-41f2-a798-323a6eaddd70\ndd9b00ae-b8a0-4cdb-bfef-d840ea8ec682\n4d1e3b5f-a914-46ed-939f-d33188c94bd1\nad65faef-25bc-4d94-8712-9da9851a8bc3\n35ef15f1-09c0-404b-89b7-4ded80c19dca\n83c8f602-3514-4659-b663-87f049e8d563\nc2e6d94c-55da-416c-b7d5-554d92bbf8c1\n34ce0648-0be7-4fdd-87c7-309640a0a165\n14f51462-eeac-41a4-9358-6fc2d6ddbbdf\nccc0f047-6844-41d2-9b2a-b6207c116b69\nb9229c6c-1048-42a5-89e1-79034bed2ff5\n7bc3f644-d037-4524-8ad9-083b4a74ecd8\n3d7a0df0-5514-438a-909e-2644df1048bc\n88607a97-b380-403f-be3a-71d3a79d8e20\na2a22176-0dc9-40d9-8716-40ba479d66a7\nc42c6425-e532-41eb-8812-bcacbcdc92cf\n5b9a3f26-e70d-4f89-b09c-2ce3c2ec9fb1\nfa740e0c-af5d-4034-b13a-b396b93d12b7\n6770561c-8577-4c61-b065-3e51a4d177eb\n63914fa8-ea48-43e5-9a20-ee010cb7f534\ndd60583a-767f-4a23-a906-de96fa6b363e\nf8861eac-e72c-4f71-b104-e484f6bdbbf1\n3c0940f4-7963-41b7-8481-3cae3325f99b\nb1f3b4ce-b4fe-4c68-a7fd-9447c398b67a\nbece4fd9-7978-443e-b974-fb2af1f4965a\nc62a1a63-fd4d-4e54-b844-0026523382b5\n079c90c0-aee7-4149-b042-110bfe57eb30\n7b9814b5-724b-4569-a1e6-66a6ce463c6e\n6134d37b-aaf0-4538-aa09-9540176bd4bf\ne32e9a71-699f-47a4-8988-24e26f0c8694\n00ecf29d-a4c1-458e-9910-7f0b4c1364ca\n43bf933d-4df3-4b89-9668-69124a0cf133\nac8e2a5b-4e79-420f-950c-f01542ea2a12\nb926e8e9-15dd-4f81-83a0-1c18e9a0b0bc\ndd15c133-8e33-4967-ae63-a9af68102ed3\nbc48e498-40b5-4383-9c84-d33f3bd74e1c\nabb2977f-638c-492a-8d6d-8036ef1cf9c7\n341e7423-630b-4264-9a8c-ca18bf8a92a2\nc9635725-447d-42f1-a65f-24b48c6460b3\n87310b05-f179-437b-b7d0-5ba6392531ac\n42548040-9f14-4835-8fcf-a096ddc7e56e\n772b39d3-3278-42ad-8496-b4e162a3a9e1\n889e22c1-58b8-4709-bc10-54acae287571\n62421d76-83f9-4d2f-9ce4-54dba3377fa0\ne929fdbc-701c-4a0d-9cc1-73375c484fb5\ne8ccb751-c978-4481-8c3f-9a680fc76a03\n04d4d6ab-6f52-4f0c-b74b-3e73da915313\n0e02bede-49ad-44c9-9ee1-ee1b5426af69\ncb198a40-df9f-43f0-b478-d6a8c36d214f\n033b11db-6ff8-4e35-b5d5-a672dae1bdfc\neb5db4b6-6e4f-4f55-9a26-c8df9916ab96\nef50717e-6158-4ab1-acf4-bc62a82dc020\n61d021d2-8293-4e37-88fe-ba6c01c131fc\n27a20220-1fa7-47e3-bf07-9de496b7eb8c\n71b3a304-8713-41f0-be47-3e66679b9dd4\nd0836b8c-38a7-4dc4-ab1b-66249f3dc281\n291398ae-7bf7-4946-b20d-9979b1f8bb93\n67c64704-35c5-4369-a9a6-0b8f9e37dbf3\n894733ab-b872-47b6-8dcb-1dd413ba9735\ne7d39f64-f8ae-48c6-981f-b069301e27f9\n7987ffa3-377a-4b3a-9198-66e5036632aa\ncd53986b-5f07-49ff-a47a-1f77a90b1443\na4f4c83b-87b5-4e4a-8a99-8c5bede7d139\n46575453-8d2c-4674-90d7-32c7bfa673ac\n08dae98a-7a5e-4a17-adf5-6408a114b8fa\n97c8118f-7f05-4892-ac83-33774fac0f7a\na250b9ea-14f6-4c3b-a1bd-09024560b86c\n297742b7-2d17-4a39-be11-50a6707e2a40\nbe891902-b48b-4a7b-903b-03c81418562c\nb9ff7e66-031c-4c8e-a476-cb981fc97885\n5bb17aa4-451a-44ed-b056-a6cd13bbc77f\nec87f3ac-cc46-4f5c-bd27-94e2fc5438e5\n8babe972-2d59-4314-aa1f-cd31d72346fc\n340ea352-5226-4083-b6c1-3b3a88f7d56f\nd70c8f44-d463-46c8-9875-18570b3cfe50\n2c89ed90-e13c-4a59-8345-7ce8c36e866c\n3d661bbc-d604-41bb-95e8-e018d32caaa8\n7b29fcbb-6194-4509-a376-8dd1d8abdb81\n6766c1a9-5e1b-44d6-89ee-2ce98a811378\n9e2e85d1-7862-4850-9c69-7bcbf927ef01\n795ec656-5be1-4963-9a24-a4bb0238207d\n4ab29510-240a-4803-8d28-2aac03cd8893\nff98af3d-b3c2-4471-9439-a83692683d57\n460f18cb-c729-4a7a-96d8-b98968ee0513\n34782e40-69c1-425c-9ad6-bf8c8322ad1b\n2369ef4b-3174-46d2-bfc5-b969120064fe\n0d34d409-ba77-4261-9a5f-339a67038096\nd9b6c410-e6ab-4445-bef7-32a08ab82237\n365cb341-c132-4b2a-9d7f-47f5d6eba510\n2f918cff-2280-4b7b-9b62-88f266e47eae\n3b6a0d0b-62ae-47eb-8daa-3c42a7e04bbc\nf66cadb9-c2ab-44e9-af37-f6b5be2d045f\n5283207a-e6fc-4672-8e1f-2546823da3fc\n88da40cc-3595-4854-92e2-7d26abe34fc4\n6ae19710-f752-4f70-bf34-825eb8a874fd\n909b26c3-5c6a-4554-9044-3e1b0030126e\nf03e922a-2b6b-459e-a21c-f898bd56cd01\n7d8b6169-0546-48fc-84fc-a3a07c2c5c92\n9e53551d-ac1c-46c8-b444-9f2d32e000ac\nc6dfee07-988a-4b7e-b365-cb5066b2965d\nb97d04a1-9971-47db-8430-83c86942404f\n35f3c7cc-87ae-42ea-8dd8-c3faaaf448bd\nbf6b02c4-de94-4493-850c-a23b4482a25c\nd8ac02bc-82d0-4fe8-8eba-b09a49a5e990\na37fca59-5962-42e7-856d-2d61ad9aa8c5\nc8e1df2d-a44f-42d7-aaf2-0353b7c31c7d\nd26e6410-8aa8-49c2-9ffd-0731dad63f06\nbaac9d71-d3a0-47ee-a671-39dcec77afdb\n54f1c83b-1880-4b92-868c-180add5cde26\n7e6d2d5e-206f-43b1-b079-ce9fc0d82a00\ncbd2eb4a-2292-4264-a46d-4b0ab50c0a02\n2cc43c5d-2724-490c-9468-2f4cdb9b6c55\n607b4695-307d-4d69-bfa5-aaa70d22460a\ncd37179f-0c23-4279-a2d5-f245f3d787c7\n8b665045-1d33-4c9e-b546-6c6112834fd5\nd9da0750-87c1-42c6-831c-a40217da5615\ncd32d86d-033a-406c-9fa0-6a0736036963\nbd5ad508-ddca-4036-8fdb-bf1f6f1e18d3\n7ad29b22-0547-4b24-b5a0-da71f309ec4f\n4c580c72-ea92-48b8-8c55-87469e9d1f17\n5a391107-a6aa-4318-a748-ebc7a06afd3f\nd4fb3be6-47da-4c95-a7be-8d7485fef514\n4fb699ea-c6c7-41ee-9e0a-40ccf1d91f82\n8bd0cb42-9c42-4793-a9ff-5c10d989d483\n7f47c78c-ce4f-4d5f-ba6c-44258ad226c1\ndfca6725-21c8-47cc-bcbc-b6c38adf74d3\ndb18dff5-b458-4f3b-bfca-c3fd8cad0f78\na7c8f022-18f7-4b13-bbd1-f73715ae0fea\n3472bf58-53e1-4a75-baf1-38e2c9a5e775\naadfb0f8-00d6-4178-b592-530a5fdb8ae4\n1637d225-5058-457e-95ae-69ba72fdadd9\n217f24ca-837b-45a0-a9c7-4330d5bc759a\nd435bd04-7215-4405-a6ff-166add9b0349\n3dab747a-d8f2-4166-b9f8-82ebc5423d24\n9517f072-d9c7-4978-aace-a7542e34b17d\nd95c8013-3f7c-47f3-b1a2-ce7691a14e8a\n67b94fcf-8aaf-4c18-aa1f-28446551b057\n2d8c6600-c90a-467f-9a98-b680adcc51d6\n142da3a8-8420-4cb2-ad9e-6d2a2fc4c633\n1ff402fc-3302-4a51-a95b-af874877a9f6\nfa213d14-8a7e-40ca-bc2c-cb18a8c550a6\nf6778e60-aa1f-41f2-bfc2-c00c75e14cbf\n640876a4-2501-4a45-9555-e5eb721617d5\neaac9136-3b6c-4fa5-a474-b74ec781f594\n83ca77a2-00a0-4210-8ec0-b7457d5250ab\n62f7a2cf-c53d-496e-97f2-b77cddd507ba\na4454768-4278-483d-93f7-77ffe7140424\nfe264da5-7ccb-4416-bfe0-b4f56c4ad313\n0f6dbbca-e947-4d28-912b-22856991c3e4\n3cc719ec-4015-49bf-938c-fe9f2f7bd01c\nf0421181-a302-4773-beee-8c66a7497ebc\n489b7fda-6d66-4a02-9c63-83f0f24a0d45\n24d3411c-1109-42c3-b967-7a98237b2cbd\n216117c2-093a-4ace-a2ce-51a5deab4bc9\n30814fb8-6597-466a-b28f-66f89665a807\n4d0dadc0-afd8-4757-a499-3c4686ab9af1\n5129b306-8b54-4754-8abe-756f78144314\nb2a98adf-031f-432d-85f2-04cd0a002377\n973c85ac-83e8-48c3-85f5-be128520e2e7\ned657439-fd4c-4381-a131-f94edf3acd1b\na2ebcf22-e7a1-4483-9985-923ddb27b618\n2a0f33dd-ef49-47a2-9520-3d80db4b6809\n25da2795-47bd-495e-b093-c1933a6ce03a\n7e4481cd-a250-453a-a11c-3f59f6e6cbab\n127cbe93-016d-4594-b74d-c59dc2946856\n9dabfcbc-c00f-4d99-a428-aa6a7af35d37\n7d4ad9d8-8238-443d-adc6-2d0f4c987746\n23061855-09af-4c69-abee-f66537b47cf5\n5b89c823-2891-4dca-aa96-52e27507aa5c\n0527b68c-8e74-442a-99ea-c78028d527ab\n4cd13dc8-b2c7-453d-a677-ea1abab6f48d\nabeaf672-5157-4051-9928-7a11c6e66054\ndad9a862-22d3-49c7-9f2d-142e83a86997\n005f6c7c-11fd-4ad5-97e5-7b7e2306c248\nf29e839d-c6d6-4908-9903-bb09319fad98\n99b696e8-8780-4f7d-b92b-c66d5b5d112c\n92a120fb-bc9c-4b3e-b665-026f06ce4847\n16de9347-808b-40ce-bb74-18595112a184\n0338267c-ef6f-4d60-ae98-bfd8fafaf42a\n6496cea5-ef39-4f84-a023-16a90be6ef7a\nb0cd3c4c-379f-40fc-a013-04484256b2d5\n8c015bfe-dd81-45ea-9c13-d31e2874f5b4\n1667de4d-8b52-47e7-a58d-81ce277a970f\ndd38420e-5644-4066-8481-a7691d88ce60\na50efebe-0428-46b6-8869-24efeecfa4db\nd654f4b1-0b6b-4836-bc98-27ce5bcacfef\n54ec86d7-747e-48b3-ad5b-55ff4c03eb2b\nfc1af9c7-ba07-4a8b-b0ba-9a8af9136f85\n51a0805e-b78c-437e-8303-5eed1ef9eb32\n7963e8a5-3739-4dba-ae14-da1e8f28bfdd\nfdfc6cdf-4e54-49f7-acbc-60ce3cd6dc55\n6f4d36e6-e6de-49dd-9955-1456a67a10db\n1f16f8ad-2c7f-47b2-b6a0-f4dbe9d13cd3\n96ca95e3-164f-4309-b123-ac0fa6b2fdec\n3e75d6ca-cb90-43d5-9e84-2215fc9fe8bf\n9a19f20e-94ea-4b2e-9830-98d8f68d855d\nfe274db9-c7e6-4bd9-a900-7494bb812ee8\n6cef3afe-648a-4fed-afac-a84ccf064443\n7239b419-1aff-4deb-9299-1be123f54361\n4a6aceea-55a9-4116-993f-443116a5babf\n100a9cf4-4c0f-4644-ba0b-35a2174ff1c7\n1abe3a14-0340-41f2-8219-aebe76c4da01\n20d0634d-77c0-4aae-bb79-0120b304ca04\nc39e831d-c778-4c14-a1b5-6678da677dfd\n5d2caa5b-c7cc-46da-880a-2788f79dfffd\n497e33e2-6d62-43e6-ac7f-54343944b8f7\na911e69e-7bb6-4118-909d-c65c7201a693\n69dd3b01-12f3-4882-87cb-c38df3772d52\n3fb7b213-7261-4f6c-af1f-5260dd1592ad\n58c31700-b0e5-4b3f-8ebf-ac17760efa99\ndd5c5d86-a7d1-47cf-8ae1-61183925c24e\n846997d8-6fa7-43d2-b031-065679450276\n23f6876c-133d-4d45-b05d-a92503051cc4\nc898561d-ffe2-48cf-99ab-a0197948abc9\n7488b213-ec9e-4cc7-9ae4-327bb084594d\n902f0074-d0c5-4e0a-a4d7-25730928882b\n3c3eae95-7fea-4720-a425-4cb3d71d1fe3\n46e79390-b07a-4b49-a3ee-1ca9850ad618\n58150025-0c8f-4040-867e-3e30e817eb45\n5cbe4a48-cde7-43eb-b525-f44a07ab9f5a\n02f86397-129e-499c-8c20-2a972d272a20\nc3089a0d-a91c-4a81-a39e-aaaaacf3805b\nc03cf127-08af-4b9a-b028-ece69db1e6bd\n4f3809db-e614-49ee-970d-5fc2fefaae3b\n72a2d5ae-a808-4cde-9145-c01737bba68c\n19a634c2-1a1f-4daa-82d7-9ffbfe915870\nb6968f03-719a-4b94-990c-6e806b1c2c5b\n708458d8-b8f2-455d-b317-5da956c5ee55\n7469727c-13e9-4234-b2ea-f52b04cd71b9\necaab835-9f2b-44b7-bfbe-c5e979c445fd\neb88c426-0ec6-4d08-8112-fb831069f660\n27ae6d1e-92cb-43f4-8d7d-a6bd4e9466b1\n8c8b379e-42b3-4bec-ab32-cb6cb3d28c6e\nb88bf9ea-bdf3-4c27-a518-834a737ff267\nf54d7352-ab31-4e6e-98dd-91bed2008725\nd7f23590-8fc1-4f7f-b7fc-ced070fb17bf\n62b40212-911b-4fbd-a09d-ece2cc8a50d2\nb609dc16-f0ae-4fd0-9620-cedfc3adc606\ndca24b37-0bec-474b-bd4b-05c16731365c\nb9938262-f237-40f9-9842-e9649285fdac\n2a125225-d731-43cf-988e-f2d7732cc422\nb2df974b-5a67-40c3-850a-cc0070301fdf\n7360e0a6-bbc1-4eb5-b78a-504f92a550a6\n698d9ff3-6df6-457b-8f9d-8772717a266b\nc7954911-6781-4d99-b9d6-4f61a11cba96\n10599b91-790c-450a-88ca-027f33dbf310\nd8807de4-fbe2-41cd-b99c-311e309f70f5\n94a8a5c8-6612-45a4-8d24-6e0c21ad7e44\n9138a394-3b64-4a93-9633-ef05b1dccdbe\nb6c8a75c-41b2-40e9-9c5b-3f1789e5774c\n7a6eb2e1-2e6f-46c2-ac15-c74ceb238c01\n7da087f3-a827-4dc9-ad1b-a6e1c0fb3c33\n0d5900f7-cabb-4695-b93c-2272eb87a308\nbd9f5087-2349-4c8e-bbcb-900cc83491f0\n43d7349f-6246-40de-bbbb-207899cca7de\nb3da05ca-1d34-43b5-949b-796f89638487\ndbf6bd95-0d05-43a4-b880-dc80e6479feb\nc49f1049-e1c0-4ddf-a4ee-7c663497bd3e\n6a278482-8821-4d7e-a2df-64525b4a8baa\n6769be93-0ef1-4989-873b-ba8adb55fdd4\n6966124d-e254-4de3-9d1a-629c053a73ee\nca6c571e-8f55-4a12-aeaf-ea4e43c521ff\n5bbff84b-afdb-4a5c-a1e0-8142536811cc\n6048ca5a-24bd-4c96-b79c-001af2479153\nf8f0b24a-be60-4bad-8119-33880cc4af4f\n2de6db9f-54ff-422f-bcb4-66c0237e6cc9\n3cad5e3f-319d-4d3d-b43d-ed64f69776a7\n2e47aadd-2cb6-4ab6-b087-bcabbfe96dcd\n295fdd98-e792-4a47-a64f-d1e30daeff6f\n913eab18-a54e-43a6-97c9-9bcfa5322eb0\nbcb16387-242d-4350-ad51-e5533e0032e8\n934e02da-29dd-499a-bbb4-db94391983c7\n51e13f75-71e3-4a56-a5fc-189d6c3935d5\n98314371-c2e4-4197-a434-c04b289f0846\n05e0b81e-a43c-4ff7-9bb2-7d09747195b7\n1e10ed33-69cf-44d9-8b6b-29f2f6a3800b\nffcab665-70c2-41a7-87c5-649d6a53f105\nba067e97-b8dc-4542-9a48-1d66d5308226\n0c82d74b-006b-48c5-b341-5c3256c3ab4b\n3671066b-5034-4e1f-949d-433e88bc9197\nfe09c6c0-e65a-439c-8cd2-d1ac055bafdd\nc93ac5fb-dbb9-4e42-ba1e-da3edbd90686\nca0d2278-e354-4001-b29d-2ddb8b92d7c2\n262d54fd-610c-45af-91c3-a8bbf838e74a\n3fed3a6c-15ae-41eb-803a-be0abf2a07bb\n818de5e5-45bc-4647-a9e3-412584c358f4\ndac06085-4d00-4cb4-87be-5342ce36b441\n2636490a-eb4d-42fe-8dc4-39761ed67db7\na4a887a9-3cf6-4d7b-908d-ed2bf0993b4e\n788cd0c7-87cd-4dc4-9a7b-3955bb9f8001\nc727c964-411e-4ecd-a0c3-36d9d1f76632\nf74b2d88-aeb3-44dd-8431-eeada1dd49de\nf2659e48-f232-4f90-b27a-74bde546cb4f\ne2cb47c3-e82d-4c12-a3f8-901c62b12b5c\ne044584b-0f25-49a9-8521-0a546f0236ad\nae2fd31a-86cb-49b9-9662-65432b587a60\n79ee397e-f7e9-4502-a068-c215cc8abd89\n62a1c5ae-1488-4db3-b8d6-a24d31e4c86d\n1741756d-6247-4f1c-b93f-59a31d33d572\n19533ad1-ae8e-4530-a77b-c675e9b9bf3e\n8d99a0c5-471d-468e-8794-3eb43901f236\ncf67ba22-7dae-4873-824b-641494e9b101\n6bf02106-75df-4fd0-9389-9d137307282e\n8fa46e1d-0733-44b4-9498-4bd0b7943189\n3b8a57b2-71ef-4c2d-9606-2fc6d2ee15c3\n78ea995d-4870-42d5-b42b-2f48ef6f525f\n9b9c3749-52e5-431c-9e67-764f1708b171\nbcade00c-1e33-490d-b445-df20e5250996\nc7d98183-4160-4f3c-b643-cd3244c073de\n69e8f698-22b6-4f56-b80e-c669607b3ab3\nfd7186ab-5a55-4b0e-87b1-28d8f4740a4c\n29661226-a9ac-44f9-8ea2-9754e8b766d1\nc7712c89-d15e-4178-bb64-3a12d60212d0\nca58dfaa-befa-4835-94eb-7071842bd08c\n583034ce-eff7-425d-ace2-58328a24b623\n6b0c734e-d3ce-43b4-9c67-6f2afdb97e07\nd9a41e3c-38da-4d19-b2fa-b622281b506a\n4dffa7e9-f9ec-4c07-b7f5-6b3187561aba\nfc7c74c5-bb91-42c2-a478-b42964fedb6a\n061b022a-e8d0-4d8a-9cf7-2612c3637596\n7ad43626-c288-48cd-9c01-5c407f472c66\n46cab11c-948b-421f-be69-ddc3ef00aaf9\nee8865ab-c1b1-4bca-97db-2ca137b37612\n2453e6a2-9441-4596-b05e-d816a7a08236\n06b5924b-dd45-4348-8e3c-4bb645a9e1f7\n54c31464-b301-490f-ba66-2e9ad739374a\n5edca9f1-6fa4-4887-ae44-11193acff56e\n028845d8-b5ad-4e1d-a78a-51da8df0eb28\n0b3afc71-bdeb-437f-9acf-98630b4540cd\ncd41e0a1-c199-4554-b3aa-d8d334194d06\nfefbf1e3-f155-497c-9ceb-02dd1115b906\n107d4de1-7ba0-4f19-98d9-33b4da426fb4\ndb5af70c-8cad-46d6-a8c4-93028cedaa4c\n6c8bad22-18f0-4823-92e1-7a07dec5488a\n9447559a-d927-4222-a3e6-7bc2bcdf3000\nb5bf73ae-8b40-4c91-9bc9-970997516588\nda484bda-15ca-49ab-9a9f-99a7d3f2011c\nf0a57e72-9815-4cec-9d05-10aac357a85d\n13996b25-91bc-44a7-bbc9-0593fe2a4dc1\n00a7a1ec-d1d8-4636-bc12-a0b3b87ff0fa\n98c32ed7-d036-447d-a347-3b2668d1ed6a\n50c27dee-2720-4fdd-ab9b-a9a0d252ec6b\n289e2c23-fc34-464e-a709-af5a1551e799\n93bf6366-aaa4-4266-89ad-2f592d94722c\nc9c31f60-ee40-43d3-82cf-e5632a6ad09e\na35b071e-85ee-4629-b533-741a7aa498aa\n1019727d-0561-4906-8f40-497910c145c0\n64dab9cd-5319-43f7-98d6-a8e7889c508c\nfac743b6-1cd0-4a34-8169-f68c697919ac\ncf920f38-226d-44c0-9b41-91c283f5368d\n847531c3-b409-4fec-a61b-ef57228f42da\n569c7b64-988b-419e-adb2-b9a03ec963bc\neb187a0c-fbcd-4aa4-8555-d07d3b2c98e6\n8836cba8-f9a6-4e76-a5cc-6e948e9951c2\nfcad5e19-6727-475c-b5cd-73d63900cfbc\n59a80594-e616-48be-b64a-4cbd1c1a6cac\n68a77e8f-daa8-4513-a851-feba0a30b8c6\n8c825be0-651f-46fd-a9fd-6aeccb4d9a19\n3031dda4-ba73-498b-950a-1d97e92a6f16\n206f489c-ae01-4612-9e21-b12e86c6ba4a\n33e51bc7-e03b-4ca9-be87-3e117f201e2e\nf0bdd493-526a-42fe-aa91-08b36b12f288\n30a3f7bc-a4fa-4e5a-b060-9a4420aea6f4\naee4865b-b562-498f-871c-586deeea4874\nef8fcd3b-6f27-4547-8162-951dfe550d5b\n32a80683-6843-4f12-82a8-e461a845cc90\n1d8564f7-8af2-455a-81bb-fd8178dc9b16\n2a8762f6-fe65-4f8b-8275-eaf911c958bf\nc2fa5f87-e1cf-4be3-bd72-44e55b205114\nafcd9c66-03f5-4c01-8b80-6ffed05fa894\na57eba02-f9ca-4501-a0b8-09fe6b18496c\n03ffcb2e-0c71-404d-aee2-fc92129c726b\n9fb6dc1a-2706-4255-82b3-5a2d2cc0731f\n3291fa72-f2bb-47c7-87d8-f5f6359dcc2f\nb21259b7-9489-400d-90d4-c39fa3b0f7d2\n5a1d8dcd-20dc-45ff-85e4-bb6245f7b52c\n1f413c62-2bbc-4cc2-90f8-d1eeb7de77da\n4ff49873-713e-446b-9c4f-e6e20b4eae21\n80397d1d-c320-4dde-b8d6-ecfb2a213c42\n8cf0677e-6e96-49fe-ac8e-2a814f6d44b6\nd8b732de-e546-4718-a140-83dc01286de6\ned459341-4d8d-4c2c-8068-f4fee2e61524\nf98d9272-2d45-4df5-be20-31d2b039b6da\n330fb104-8ce2-4359-81f5-b12ea5a9b279\n9ae01cf8-e258-48bf-81b6-df0febae7c8c\nebe0182a-14c2-4bbd-932d-a54ec1756ea6\n1ece5df4-5031-4807-8eeb-55f0915b8059\n154a163e-f8ea-4460-bfa1-9cd0ec99f340\n5a4eb7d5-a076-4925-b238-b2f1a3084650\n2379c64c-9d1d-4b2e-b9b0-4224b28fd4f4\n9cae869b-3293-4e63-bd23-a31d72c903d0\n47a2a861-ce0e-4c27-b359-4487a47d41f5\n1e717009-f0ee-4702-93b5-e42e1b035188\n23104502-3101-4152-a885-8bd35ebc35b3\n665fc403-0ced-4203-ac2b-de3a8e05a948\n6c980ed0-0a03-44ee-bf06-c04d8a58a1f0\n58b3e707-a91a-4690-863a-8ebcbca4d432\n633d03c1-91ed-4d68-8a7a-8bce211f62de\n18a2a934-e7d9-42ce-bc72-328bf7288b0f\n23c44aa1-b0b4-4b8a-a355-7c2687bf3c02\n0a311781-3f74-4624-afab-5eaeb56a828f\n8e8e385a-3c65-47a0-901f-9eb9ad2068cc\n3e713f48-2917-420d-b5d1-2b8b32f52797\na998f635-2888-4422-b933-14bd7735a6f2\n64424dab-865e-47a9-8bb1-f2fefc522845\n19175a79-01b5-46fa-bc62-6543ee517d93\nc58220b8-d04b-468c-bfe8-c9a9cde83644\nada96c8e-c922-4386-85d2-c711bcfb1924\n90004766-1d72-4905-95c4-48f008ef0436\ne40af23f-3798-4791-9c6f-1842e48d1653\n33d3d35b-6b12-4cd9-b657-640cefa509aa\n30641bd7-db01-41e3-be9e-269a88d59a4f\n9aeb6643-073f-4a58-a8de-ef2e347b92ec\n545dbb68-2ff8-4604-b4e1-46f9cf892c3a\n815f3a08-f8ce-423c-9d03-ea452c6ce0f1\n0200eef3-5198-47d0-ac9d-e3365b57311e\n31b687df-2260-4a5e-953e-68c5e7da83a6\nb04789e5-3bfc-4641-9d73-add78a861997\n14ffdcd7-af80-48dc-95a4-50907ca97777\n4f6bafc7-22d3-452c-a553-4e551d01a535\nffbb5e41-a890-4fde-aa8e-5e3e3eaa34a1\n17839d57-1c2c-4ac2-aebc-8d383b4b7965\nd606f804-8691-4c0d-bf73-696568b67bfb\n784fafc1-7167-4524-991e-312666afc8bb\n95008012-f5fc-47d7-8aff-c0d3c873fdbc\nb34b8908-66b9-47d4-bf18-3e0a873a8c7e\nd7c0d082-c70d-4cab-a174-c2c4f4e898f2\n49986799-2164-41f2-91fa-f665f2bbd20a\n651562e5-7b5d-425c-9b9d-c0688c58bc34\n774360fe-9139-488e-8bf0-68eaf0b8e059\na3d38877-2c1a-495e-97ba-52606a91fb8f\n4bd84577-2fc6-4304-82be-8a0d25159865\n27bdf25c-e168-4948-bd38-fd56857a0e86\n4e40c721-d738-469e-b228-86132d79b186\nff520319-0e5e-40c7-b000-b763ae872aba\n441ce442-482b-45fb-99b8-d36420d5608b\nf6bf9ef4-12a8-43f0-a532-0162f73b8b93\n55f42dcc-d635-4dbd-9488-4a0ac251e896\n685f2064-d968-45fb-bb54-ede02babef5c\n903fae11-6910-4a60-9006-30001b2fb0f5\ne82feab6-c5df-4c3e-971a-aac1a8d71c58\n690b9728-4bc5-4b9b-99ec-0c86cfa44c22\n6fae3951-4919-49d9-8f2a-13c39b75ed3c\n153633f6-ea4c-4f2f-bf1e-cd550ebb27e3\nc30edc0d-d947-4eb7-915d-07168c391344\n8f79c904-35aa-4e92-b1a6-b940b0cae1bf\nb391fc53-0475-4d2b-8197-a3b4618375cb\n29ed4780-48dc-46b2-96fd-7c8f4bab5695\nb12eb94a-3108-430b-b8d9-4a3e360d9a22\nb424249d-b190-42bd-87ec-5599af5edb6e\n1deb1c70-af68-46b6-82d7-c6a041030d05\n84e7aead-073e-47de-b5b5-1814d50a796b\n6a674365-5c69-49c2-98e1-536fef57df5f\n6bb14453-2d75-4e1d-a11b-da090b609018\n3a4f741e-8338-4368-9c90-33d66efbb67e\n64a77507-fb10-421e-8d7f-946de5b32217\n361eb228-947b-4371-8f2d-1cf35f5dc9c2\n1510387c-0c9c-4ef5-8360-174bed2e5af0\n5a37c93b-2d80-43e9-ada9-16fc9c53f032\n3e6abd1a-df5f-463a-8a92-94b53fd7c4c6\nb116656e-cff7-44fc-a279-28f52c5ca484\n47ec8942-5f60-4816-be50-b951e77a63af\n0cc8ee91-57ed-4f96-8a1d-894e7ca98b35\n499d127f-e68e-4a8f-b884-035bcac6e011\n06006c26-0f33-457c-bec5-6f4e195f6bd0\nf0881199-44e2-46b8-bcf2-679b3c8d98a0\nd9ab6068-70d0-4b6b-9726-c15d010bd141\nbf716bf8-ca88-4d1b-99b2-69cdd094b3b8\n076bb8ea-15f6-4554-997f-7183215b1f4b\n5619a732-0e9f-4f8f-8ccf-2fde163066b9\nefdbbfec-56dd-491c-9fad-8fb3a35cdcd7\n33179e7a-86aa-4388-bd8d-971d88a1fa52\n8c80de51-95f0-4675-9356-496bbf04edb8\nd59b498c-2542-4147-8a48-e1c1ad34a6bb\n90e2c92e-afb4-43be-83f3-cb473e5f2a34\n299c8f66-8e76-4941-9b76-d4903cba406c\n92dc9f62-55c6-47bc-9b9d-4ba27bee097f\nadac4d9a-0312-4236-9b69-3d79ef3cc605\nb37f76b6-e046-4ac9-afca-14afba6a14e0\ne76ee7cb-28a3-4dfa-a978-f98d223360d3\nb9d95a47-9680-4b92-bf75-a7391169ce24\nf965de17-5718-4942-96a8-0eaff6d83c88\n185e40de-bf80-4a00-aece-39bd301e2bd1\n9fb3db0e-b63d-4cfd-8885-8cd4399b33af\n57670762-6221-48bb-a82e-ff1a7ca3f51f\n9ac16774-5bdd-4784-84be-19dca4755470\n265b8a2a-805c-4164-a49e-5e50e0158662\ndb66a179-5ece-46d1-b515-8a0a9c0b842c\nb6c02558-ee51-4fbf-958c-5bf058303ab8\n407e3c2a-6be0-4a31-9099-d9457535449e\n51245a6e-97cf-437f-8051-24c336a266f6\na916a36c-bb02-4b24-8d2e-554ab5bbb9b4\n1a0a5f00-8d7b-47f4-9537-92a28a23119f\ncd41bd29-a775-4add-bc24-cb68467c4c1a\n5c9650f3-b1a4-40dc-9014-98ee6f1fc004\nb1e2d126-f3f9-495c-a761-128c65ac509b\n12b1c935-c678-461e-9b34-b41f5f5c5642\n697163c6-30a8-4cf5-8ebf-44e6860d5ffa\n1b4c1414-afa9-4919-8d3f-29f84abaf9ea\na30846b2-b68f-451c-9c8d-17281726ec85\n0ad8bab5-f2b9-443a-9f52-f4afcd5a4c8f\n7a1d50ac-7979-4098-a524-e9a83451c8c7\n47f903c3-c9ea-4836-aab3-bb49d609f232\n06becad9-b2bc-4d73-8112-64d3cb7eda8f\n1e5a95bf-6eca-468a-afe1-00925bfcf715\n53084f1d-fc97-4546-aaed-34a8793ee80e\n0bd03ca4-2de4-43e1-896d-9c9a9cddcd65\nb00116ee-c3c8-48a7-a3de-3542760f4364\nb31be402-fcfe-4b27-ab01-f3580d89a5a9\nc41d0886-e7a5-41a7-835a-a65c3d595d2a\n52a14766-1453-4afd-890b-fef4de926d4c\na20e7277-0b69-432a-b970-ede6a836dc37\n399ba742-4fa0-4453-accc-21966b16aaa0\nf3d65a3b-c2a3-414f-a52b-9634791db554\n33400d9a-ac0b-4678-98e6-1b6b97d25e33\n851f42ed-65cc-4676-9791-f29f5e95067e\n39a9e18b-314f-481b-8866-fafc2b39e886\n3a59055f-c1e6-4b4f-809b-368c13bec49b\n835907b1-bccf-4894-b59b-9494866c022e\ne89ad231-41ae-4a0c-a4ca-a7cba1374e55\n99cf6693-4cbc-44c7-ab5f-dbfec1d05c79\n475220dd-6d92-4912-9cfd-1c87e128bbc3\ne561d4fe-36e8-401e-b780-c7c63a38efa7\n91757cce-32b0-44c5-bebf-8a2a3ed1d625\nb9c6bcdc-8ef5-443b-a6ca-6aade99b6d8b\n5dcb6aab-bca6-497a-af95-7951b4940b3d\n4439325d-786e-43a7-b791-6e5d45e38f47\nc10f6bf7-2a6b-4af1-86eb-9a60351e9811\nfc98ffda-ef29-47b6-bf24-e94c9e428256\n19898583-5f49-4a98-9141-0adb1c4e5c5c\nfd4cb36b-cd5d-4854-a3d0-d5fef135ce43\ncc8862b0-cd80-4854-afcd-41f245c0102a\n7914aeb9-01ae-484e-a649-71e3b0b2457d\n6c2c2b8d-65d2-43a7-9d5b-9b7df93dd260\nb3e0d4d5-2f6b-472c-8cff-74682fa8615a\n203d16c2-bf6f-40dd-a105-a3c0060bbf7d\n72cce2d2-2e57-4db3-98ac-82d12e255bf0\n5dcff481-aef0-4727-a0d3-1ee37d0930ab\nf3780dbf-06b2-4e4e-825e-d386ef2dfa4f\n9a1c2a19-fb74-45e9-be6d-041ac6c6fd47\nc9d8b033-81f1-4c15-91a1-42deb843a839\nec5cba0a-3494-4775-8bcc-23e1463c4ab5\n29c498c5-5aad-4ec6-9f11-742220a67012\n47427882-a724-414d-910f-70c3bb3b422e\n7ce4e603-0ec6-4767-acbc-fa91029d7c28\n00e548b2-f68a-4ce3-b54a-52a008dec76c\n55153561-cdf2-42bb-b854-8346f259d5e3\nbf1cace0-2b39-4ba8-bd1f-ceb1c0082256\n2806302b-024a-483f-bd93-e5ba1ef6e5df\n4a78e6f8-b671-49f9-b099-99702e580f5b\n5c87acdf-fc4b-469d-b7bd-4cc526b70874\n44fb7101-f6c4-42b0-9131-fcc121eca866\ne0ecb396-74dd-40cf-a4f8-a7b55144c86b\nb00733a1-86cc-4b3b-bbe5-2b6cf24ebdd0\na56b8d57-1264-4827-b42a-4a3774abe1c4\n66c09e04-d76d-4b68-ba80-de7d0fc7b9bc\n870605ad-552e-4a0a-bbe7-493ba01c465e\nd06cb7e8-dafb-4835-b34d-743e5a663312\n86741cd2-c6ac-4ed9-8bcc-435655a18d50\n50a74287-cf90-49ff-9326-872dae222b99\n83a0812f-baa5-49bc-bae6-617bc052bfbf\na200fdd0-3fb9-47ef-84b8-399cecf476d9\nf34db6d5-a062-411d-944d-e42c1f0d730b\n34c86728-c2bf-437d-9cad-2a4679eea138\n6a03a2c6-9047-47f3-bda5-2fcfcafbbf9d\ndd3128f2-ee4d-4946-88b2-65b2c125bd16\nf0d612d7-cffe-4f21-bb7a-d580aebccb0c\n0b36a59c-552c-419e-bd87-96428eff20e3\na80cba96-3a91-432c-a73d-bbea4fef9c11\nbf3cae66-c784-42b0-a778-333eb35d6caa\n9c7b1938-f125-4134-87a7-d25ee07afb14\n4490fcdb-bd41-43c3-86d5-2628cd0b4df8\ne9851b6d-cc67-4ceb-990f-9d4bccc1b9b1\nd0f8acb0-0325-4aea-9a5c-faaa31f02e9f\n4c7f4d23-7232-4fc0-8131-dbb763f70cf9\neee4af10-0e93-4ebb-b1d4-a6a6cdfe3dec\n190696b8-f8cd-47e0-99f8-75b7ef775885\n109f8335-4910-4125-98eb-f4471583b172\n948eafd7-aafa-4285-a442-2420a996a256\n46bf94e9-712f-4fba-9f05-1251e1b607cf\n04de1f70-d27d-4312-9037-1514a68e6757\na376e233-719b-4ac0-95fc-cf4e6c64b188\n166e554f-0fd2-47cd-8b46-1b559745b54a\n9ad0f1d1-691c-49aa-8452-72e6abc808c9\nfac2580f-f56c-40c6-ba02-e3dbf8324b2b\nff6557d0-312c-4aa9-962d-ef24fffe9d54\n888de2de-534e-4a6a-9a1e-e4ca3678f043\n15c900d7-d5af-4450-9d6e-f3dd84d464a1\nc5df5946-4d2f-42c8-8a4a-0c187dcb339e\n7c199065-3f42-4f1c-8a42-094b6838691d\n2ce888c3-484b-488c-a9c8-d8152106c650\n54ba0349-a56d-4aab-bae3-d648864fdd50\nd0d06512-c2af-4827-9129-1b816ad9b285\n6d8f183f-7040-4580-a923-ed463edd3dbc\n0fafe81e-43e1-4488-80ce-44bd150b114f\n0d3f8c80-6c72-4087-9b1a-b3e0c7f52967\n60e638f7-2d0a-4599-af69-d6c46e1dba19\n7c942684-170d-46f4-ad9b-48d984bf8ac1\n995761ab-fa68-43c2-a77f-0899e50b399f\n8b063ab6-78b7-45c7-9326-935c942fffed\ne851a375-5ad6-42a9-9e70-2371d87f9ffd\n2d6bdf65-eabd-4a13-8e9f-a605c771216d\n9ac2a9a2-e48c-4b67-8ea5-0584caa2beaf\n7b53d2a8-ca81-4380-b7c4-80f5c6813b14\n80205dd9-65a8-47a7-b31f-ff043c09edba\n31982d59-4ae1-49f5-a43e-70a56b828178\n0ba26418-3c5f-4f29-9f70-1faf577ea63b\n44ff14d2-b9eb-4116-9649-8412373ae3ae\n7d19f7ef-ca89-474a-8d3e-7fd18e57feb8\n1919f5fe-8053-4e65-965c-d981a7c63cc4\n862b3da0-e534-4faf-a481-306d6743f443\n440539bd-c757-4431-9d50-8c49ad3bd886\n797ebaf7-7110-4f6c-a2d7-768672f5a4ef\n7eb98dff-efc5-42da-922d-826159a3efba\n1789c397-7355-401b-8f19-9b42d88f0db0\n8b945858-5ba7-4555-b3a3-cdd14e610a67\n3531aa29-e253-44bc-b401-6e69394e88f7\nd2da6920-74c5-4483-988e-114a2f0c6f93\nd1dee157-c251-4a4d-8264-b8be238330c9\n8d07ae7e-6286-4e85-8696-4293905f9ee0\n41f0243d-7624-46bf-84e9-721c11f125b5\n94070896-f13c-4a13-9065-abd6e96b7b86\na9fa91f7-3368-4c2f-8d55-c50d24b3ef02\ne648c4f3-335e-43d5-b5a4-fd6d52a50820\n7818bae2-40ae-448b-89ed-d6ed8410e559\n7852fdf9-11ed-4b10-a76f-e81ebd2f0da3\n49504b59-a047-4f5d-9d85-d1b933bc63b0\n45778048-d779-489e-955d-26c613a09914\naaa48f0e-6e61-4361-9c73-72e348ea1527\n11457695-6315-4066-a59b-c293a13a3468\neb687452-faa0-4757-a7aa-b3b3aed687a8\nf7491819-4bc3-4fcd-b003-ea32649badd0\nc5f762b8-5732-4002-be4c-793c94079ccc\naa5a5cb2-0a07-4484-80c6-47c0bcb555ce\n9f644c39-d25f-494c-abea-65ec7e0ad937\nb4ce2dff-37fa-48d9-8c1c-acfb73abed93\n31cbb09c-46d6-403c-89f4-d91a58863f11\n641c6ff1-b7c2-42a4-b9a7-6a11b545c0e7\n3203bbb1-784e-489b-8c84-baffabb694f7\n03cc2e30-c166-458e-abb7-de59d0f9f304\ndc75682d-a353-4d7b-b014-b02b1ba4674d\n400a7e23-de0a-439a-94cd-02e51c36a85b\n8ecb29d2-26c6-4dd0-924f-06f5191bc585\n6e09e506-95d2-4e76-b608-8f3f5f6891f3\n3678fde6-9930-4d74-9e48-13675022f817\n4fc5e8ab-a87f-40df-8ced-0ea3863fc21c\n9f1d96c6-63d5-4abc-90f9-08f0972f3c30\nb87a62a8-f6a4-4448-be5e-b17b105ffd96\nfe89fc13-e8db-429d-915e-699da0a370a4\n4d6ace4e-66e2-4717-b7c3-51814627f2bb\n03a28232-f387-4794-83c8-3714d17eac35\n791a227b-91b3-4aec-a652-a37d5f7bdcf0\n222211aa-325e-4d99-9661-f0656bc75cba\n0779e177-6a5d-4ca8-a7d4-2cbcb700c5e4\n8d6a7d89-5638-4723-bf45-1d211113ddf9\n4737d6ac-c2a4-447e-b6ea-3a3af703d40b\n8a9fc5b5-bb4f-4c7b-9f20-89b0a99bb8b7\n102dc71f-a633-4333-804b-5c7cc37fd751\n51678172-ecfc-4189-bce1-0d99d5fa6d97\n86e82666-0470-40c5-8cb0-1501eb068745\nf665a2a4-2a90-4d26-86cc-1c6539bf5cc3\n56766de7-f2bd-4e86-8980-38072eb62c6d\nefb017bc-c7bb-4042-b11c-941f8afa57c9\ne9842df7-4ddc-45fc-ba4b-35e3c8ed8200\n8779858b-cabd-43b8-9965-214d337bee90\n06c893f4-7161-4c0b-afcd-b6c8e2003935\na1d95cf3-4074-44a7-98b3-968327309f97\nc47a8e39-b31e-45a3-b697-11eba1032f86\n242ddb4e-1f05-4c98-b57e-2b6e18651a47\n3ed41de7-3907-4098-b3d2-328a74f4830a\n1735eab4-333f-409b-ac07-b7565b6e084d\nd9fe0025-3455-4405-b8d6-d6ae31f1eb70\n702b61d6-5318-4d40-9f62-6d8ddf82d3df\nafc8a815-df70-4144-9ffa-1a2ab62cd272\n1e5a92da-e5e8-4e7a-8335-4378bb1a4e9e\n7873c57b-1dec-4d7c-a49b-3f4339ea3146\n3a24a5e8-5321-4c5f-a75d-fb471263f08f\na60ce860-480d-4956-ac9f-20cb7f2bf476\n9871e0af-2c55-4225-99f6-11579fca4c99\ne41c7836-1382-4c98-801f-c90b32a0b47c\na81f9f88-505c-4308-bf42-1c75e8c0a702\n7f76be4b-f6b5-427e-a782-b89d7ce7a4b7\n0682677b-3aaa-4944-a019-65e0c53d676c\n05c40370-5d01-4311-b741-2b4d16893201\n25a39177-639d-4908-b2fc-fa3f22106f81\n07558e65-f704-4a30-a0ec-6e53065fbd43\n48caf102-1119-4aba-a6f9-6ba1425d2464\nb69aa309-1d09-43eb-8ed8-43f83170808a\n2e5232fc-3d80-4818-a0c1-01708f8bb489\nadef49f2-0c3d-4c69-8352-03c99c66427d\n91db9968-813b-4fca-ad4f-ca4e7b524276\nc5cf80a0-746b-4793-867b-4dd2c18cb82e\ndaaa1e9e-b4a2-4024-8ab4-9c2f7deda785\nd9508ca9-957e-413f-868b-39decafef63d\n8cee5ec8-00ee-45c9-9435-3e715796f598\nc4cd6dcb-74f6-4f63-a7d7-bd1f18f360c7\n01485141-d70c-4c20-b7fe-03080f0dbbed\n551999a6-c719-4cf3-b07b-10c329ac9c0b\n76d1e916-ad74-4885-a304-c81657b2d61c\n50404fe9-1675-4180-a2a6-b1d1d66b85b0\nd4fa5021-f6a7-43f7-9b8f-cacb7739c78c\n53cd18f9-1f56-4267-a34c-d11cedd82262\nbeab3b17-3d7e-49f6-80ce-599d29b503f2\na18d9d14-3945-4011-97ea-db87c9c5478a\n7ae8221a-c2fe-454b-80ba-c4708e4595b0\n6156b554-499d-43bc-a71f-0f976f7c5db6\n4a5d454f-f44f-4dc4-95ac-815435a65e49\n1e4839f7-ac73-49ea-9c27-03ac73cc1279\nb3b810bd-2c15-431b-bad9-08e4bec0e752\n39ef702b-8fc4-4162-9ae6-50a0ff847f9e\n4f1acd49-d8eb-4f52-91fe-1cb48b95a227\n73711c22-fe97-40e3-835c-1dd1adfd33f8\ne9b4e456-4d09-40ed-bcc0-3a3bb8bcce24\nd102a6ed-0872-47c0-8b25-6c88191cad41\n62154ef9-c01f-48e4-a4af-4271b5d85e2f\n451184bb-3d4d-4c06-add2-183aa58881c3\n6aee1b95-9226-45af-8426-c7d98add97e4\nd99427a2-214a-465a-bccb-5e4029366b77\n0174eee3-756c-4c89-bf2f-6ef500adac6b\nc750e97d-d05c-44ed-9641-82a448cc546a\n3e378daf-7171-4d17-a75d-c40ea17e880b\n5ff7b623-0e15-4b48-a8ad-74a5aac83496\n80f72296-8f4e-4ceb-b113-2855a1f66ee6\nbbd3aa83-b9a8-4ed2-a0fb-9ff2db442667\nc5a040e5-e39b-4e5a-805b-db50503bc743\ndfc07ee3-7c5a-4374-bff3-6dbcd082424a\nd3fb3a38-adb8-4b48-893c-b5b706697f77\n6458a8cd-8430-409b-8c95-eca3512b9bb4\n5f99b972-cc64-497c-a631-46370720174f\n150c8018-5d84-4319-ae15-4b59f422703c\n2a7b80cb-454e-40cb-8a48-c394689cc213\n5e03f76b-f68c-408f-a651-9b8dce0a59e2\nc40feaed-50fb-4a4e-9bf0-d9960e1ef073\n3548ec0d-feb3-4cc5-a272-045e06d48130\n080a2afb-078f-4236-a4a1-1e671b7186d6\nc620f63d-342b-4e88-82e4-9d979bdfd648\ned0a7ec7-bc5b-412b-aeea-c49a474f06a3\nf8e6dc58-ff51-4af3-99d1-720d425c133c\n651416e4-b1b1-4490-bc31-69c92e180f39\n987a92b8-751f-4c9d-9dd0-5700e0473c96\n45d0889f-ee52-45dd-8585-b226f445d517\n850b2bac-7a53-48cd-bcb5-e646c2f2408e\ndbad178b-774d-49f6-a1d2-7c9ee76ecf52\n37ea4dcf-5751-446a-bc5e-f1bfdff1ceb0\n02b48bc8-89cb-48b9-8f40-c411cd53c406\n04d44834-8dca-4cd9-8b8b-746f4a7d2bc0\n56859ff6-0327-4015-89d3-8ffee886d3bc\n1a4b33e6-8a19-44c5-8cda-2b7dbe608819\n67e19557-f701-40b4-83aa-6f90ae5b2923\nd633434c-e4df-4907-bd38-3bd96023ffd6\n89f1f459-65b1-4daa-8316-2351aaf08d2d\na934ad92-5ee0-4651-907e-41e6cbffe17f\n408bb600-7a6a-4f58-9897-bfffa82851b9\nd8cae26c-8363-4db1-936d-f312cf1d9eb3\n64fe162f-b600-4730-ae4d-18e0c817f15d\n48fb24bc-7f7c-4762-9db6-3251ba44a7f8\n5f012580-9df7-4788-8a3c-4895a6d2fd09\na21c28bf-f729-4526-960f-cdbbfb86f2d8\n3db037d2-cba3-4291-a2ee-fa61d60afb38\n36df50da-6b73-471e-bfbf-78a54e4db7ff\n7cb1e9a7-59fd-4b88-866b-ba694eda4ac2\n8a36defd-aedb-4c5b-a2ad-0bf68cef48f5\na04c5cb1-a17b-42f1-b34c-69add882cb40\nf273c18e-6fc1-4f19-b985-00c5b002dc75\n49eafb41-0829-42ba-8840-0efa0f4b9cd4\n3fa4dce3-71b5-447d-972b-3896a85c767a\nf3e42dfd-eece-47cf-aea9-2e023480187a\nd09b9187-78c2-434c-aee9-5e362e7dfc9e\nc804a50d-acbc-40c5-b807-d5b388649f1d\nc6e68aea-cb47-421f-bee7-df2a10830506\n8fa18c19-4fb0-4f38-8a67-9f63be4326d8\n75bb1e6c-d42d-4f30-9717-a3c4fefc35bd\n90f92635-532a-4077-9995-b3977f668186\nb88266ad-46cf-429e-ab6a-b6747ccc65c3\n001ed7d5-3d40-4cb8-b4f9-472a598f1221\n2c3ba588-8148-4f1f-b4e6-a270121704b2\nc6e0976d-31f8-4bad-8346-fb43f77625f0\n98fafb54-f498-41f6-bb6e-fc9c6a82f13f\n9fec4c1d-bda8-41e8-b40e-1c0cf9809f0c\nd359d526-bc39-48d3-9563-585443dbf005\n08121d14-fee2-4e2b-bd0d-96b5a8fc2b43\n9eaee0fc-59f9-40c6-861e-d1c87a6efeff\n48e447de-9dbb-422e-a1d8-849a1b88f1ac\nd86bd897-e133-483a-bd42-79505fa9db85\n14434ed3-a838-4dc0-a46f-3920e5499752\n71ef5f8b-ed8e-4585-8b18-2f763908b4ab\n4cddd330-9988-4228-ae62-23fb3a08d88b\n228f7ea5-2f09-42c4-af58-104e44253850\n2b795adb-b95e-4f50-827b-5119cae4c881\n536cf483-0e7a-427d-826d-132e6e221683\n7c6e8147-be4b-4ab4-b062-74a8e03a3ed3\n291403ca-9ce3-4acb-98a8-e25715da866f\n61a5e8dc-4e31-40b8-9c9a-0cf28fdec4b1\n1bfad259-80f8-4e55-b6c1-b1cab8552236\nee3a2a6d-8562-4d0f-9a4b-df3566383bf2\nc8ad6b8c-7be2-4e4e-b13f-9087db64099b\n6b3f25db-64c7-4fff-8854-856b12a3c974\n98f48661-ef48-4f4e-bd31-d4c45a923ad2\nb2098803-f078-4c87-8657-e6c9118b3834\nac0ead92-493b-4d1a-9600-f9c88408236d\nfcdebc4f-7e17-4771-bd74-55184f212298\n341a68d6-1a9b-4897-a7d1-f9e5f86fcad6\n2134f715-b381-477f-a984-5692dfc95b83\n7a300a52-5058-416f-84c9-42eccd1756f2\n78208155-f827-4961-bccf-be0c5bba031a\nee4183c5-7fcd-42d6-b80d-7f45b56a47ef\nceff84d4-5be0-4e19-ae55-9043c3a4ba75\n70b0289c-e65f-49bd-9bd6-d99bf2d5bd44\n68107fe5-f6b2-46ea-b75d-685fb153cb59\ne2cb9c4c-bb34-4cbd-93af-805d48139195\n0c0fc83a-8394-434f-9261-d972785a11ac\n88432f23-0d12-40eb-b348-ab37fc34c299\na6a2db9e-7719-42ff-8e95-960f2b333bf1\ne35d46c1-5d22-437b-946d-9d309e9c4a15\n1fa823ea-1f54-4988-b806-1ca70ee2b8fe\nc10e563b-84eb-4002-8482-2735cef84950\n4a37f581-2afc-4b21-a115-db8ac1acf9d3\nbe5d3b44-dd7b-4795-8943-998d91a378ba\nc10fc661-73c7-436f-85a3-60de3bba0ca0\nf3d5fc66-6e8f-4f55-aec0-0588ec5f434f\nfc6edb92-7eac-455b-9808-bb3e86bb35a6\n43d18635-6c69-4d86-a2cd-46d1d09c6059\n9683bd3d-3239-4148-b061-aeff4d3b4e2b\nc4e440d4-0a66-4ce2-8281-d53c22c5f9d8\n20b58bf9-6e03-4bcf-82dd-6729aa6f88f2\n492f562c-9759-4c8d-9d4f-3ce76a8c3828\n6af06250-9607-4584-bcdf-d5f12efc7fd6\n30c551f1-0873-4f68-a40e-a171ffd7f16a\n251344bd-af60-42a8-9449-a33354637e9f\n7e26753a-494e-4a8d-82e6-9a72070d245a\n48007fc4-ef78-4160-8850-0f41ec43fd90\n994b7820-dc90-4ff8-a091-42f835c00f39\n659bade5-d86f-4e08-b6f2-8835f39c1600\n49d664ee-b5e7-40c4-8742-9b127813f4e8\nd0261e4e-9dc2-4e68-8fc4-656abdbdd2b9\n7487d840-ec8a-4bd2-a214-ea1108949909\n4f09864d-08a0-49b4-9886-63749eb169ee\n495d3ee6-a775-45c1-a03a-5c8d41ad5a38\n8f015980-128b-4079-98d3-cd40ff205469\nac97d1b1-0b67-4411-814f-22d793698873\n7cb58391-b322-4eed-8018-6bc967b3c86d\n59fb0368-8c5d-4537-ba3f-9d1c56b0d0cc\n09796639-4f92-43c3-845e-52d917e9d467\nb61526f8-7a04-4c64-b657-0ca3e2d660e4\nc580446d-6ee7-42ec-aab3-c342ad5ed061\n49a4f9ff-9435-4857-bf51-eba9878954a4\n43e2dbf1-bcb5-47b1-a293-9986b0678996\n14e0e622-9db8-4f52-a0c2-c482ef9b8f40\n48526c35-dca0-4c48-9981-e8100b73e59a\ne7c18d3f-c744-4b16-9bd4-fa316b809872\n15befc04-7ef3-49f5-a1e7-2bbcf2044ca4\n392ed4a4-cff5-43b9-90fd-97dd3ff9680b\n6d0038c9-6c87-428e-8fc3-02a444a5061f\nc229e22a-150d-45bd-8ea1-303cbe1d40f1\n84130821-5b98-4fd4-bb57-ebfbb912c83c\n4bcf4785-11a1-4d25-a4bf-f5a3b386aa6e\n4f0e9a13-a43b-44bc-82b4-a0978a115239\nd2e76421-49ba-4308-bfe1-5c8e1e6914ae\n0dd50932-2141-4b30-9382-0e08a9a43644\n7c6395e6-2d51-44d6-a694-3e4ee7b817e0\nd1eeb2a9-5bb6-4d95-ac46-31ed58965f46\n1ca1c9ba-be5a-4895-a875-f989cd8b8112\ndee6b613-4462-43b7-82db-37893b1ba4e9\n0ac6d655-f08f-49d6-b768-2057055ea213\n08f477a4-6276-4bc1-9a72-4af76da3d293\n00bec8ce-118f-4696-9404-93f9c954295e\n3e7606b3-da2e-4bed-9482-d5de6c46d13e\nfd4e1f10-038f-47c0-bd9b-c9b5cb0af782\n0ec8a04a-5bf5-407a-872f-7f7008fc10c5\nf1a5ffb7-44eb-40db-8f60-3f8d6f225c1d\n992c8fe2-47ba-476c-9072-7c776eec0c95\n80c4e009-8cd4-4eba-867b-7dc21c5b0fc3\nc340fa1a-5ee8-42fb-b11a-014b5c1be8d1\n2cab0357-9922-4433-be37-44ee7e841962\n1f8ea4cc-dafa-4a6b-be94-ae5ecc3887f5\n58129cc0-2e33-46f3-9dd2-8688006e8fa3\nbca633ba-5690-4638-9ed4-bf0fe3c78695\nd006ab06-7b62-4389-85f5-0a996839cf66\nc24a29b4-cb33-400b-835d-0ab89a653f54\n25668edb-01c0-4baa-b290-f97ffaf34731\n282663f0-33ae-438d-8568-4d0824b9705b\nbef24209-ffb6-4a51-8b55-641a762e4884\na9324b4c-e57b-4f48-ac24-39bc8cc0a73e\n003bedc1-9a5c-4776-8b41-f54e20fa102d\nafb593eb-0fa3-4806-9d96-7369f9756f79\nc25613c4-4838-4e6d-a75d-6ee50278048a\nc532ea1b-2973-4391-9327-b4ba17f3500c\ned25d574-27e7-4d6c-a819-401ed365a94a\nd8f589f6-2091-4f5e-a81a-976f4b88915c\n0432c8c0-b233-43b7-93cd-df2772644ba8\n6ff52b37-c5b1-4a0e-961c-04368bdf1296\n91d2839a-651a-499a-84ad-fc5e93c309bd\n1027ac25-f0e1-4e14-bdd6-cf0a77b3a13b\n3c4f0963-48f7-4456-b8b5-dd3e1fd861a4\n327e1339-ff93-4bbe-9ffe-4a8750651bba\n6d2496ef-5ce6-4c85-af7c-6c0db68beee4\nad915184-4704-4def-9bb3-f5b5355f8b20\ne85fa512-f3ea-46fe-8bea-7c31c1ab1107\n79574179-9331-44f1-9292-d905dd6f9110\n05fb7005-5187-4b62-8ce6-5c7f18329123\n2d6a23cf-02e5-46f6-9581-c063c8505f4b\na81ef23a-d951-4412-ab97-a93a902aec86\n246bd89c-720c-40b0-957a-3ff8670b4804\n1c6f398b-2c91-447f-a6c6-45cc2c286113\n5666fb3f-1f87-41e0-bfa5-84ec29062ca5\nc1b1e5b5-cbc0-4a29-a01a-6e9fc6027ae1\n6641bf12-4232-4953-8cdc-fdb5eedb9f8d\n6835907c-b21d-4bf7-a5b9-2ab02c460cbc\n4d99c991-8c54-4de0-b288-9f3bd137f5cb\n98a81c3a-f9ee-4410-985e-74b37b0c5e64\n84966d81-741d-4ed2-b8f4-b4e411c55837\n860dfe45-393b-4b02-b5df-020b7e8d31bb\n6c93c4ee-fec5-4e6e-bcdc-3f35b74ed5a7\n40eb8098-8789-47a9-8df6-22d55798e08d\nb3d8b977-8743-4301-8719-f6530b8ed123\n5cfc5bad-e219-4697-b127-43c575f3f4c8\nee0a5b54-5a3c-47d3-bed5-ea758d64f5a8\na0b1261d-a774-4e26-91d2-99660f6e8cfc\nf96b40d8-73e5-4de9-8a48-514bbd985a36\nf12c1df3-9b4d-4a3f-a095-e1b3ed8ba2cb\ne94e1f80-4a28-4d47-935c-8f503cc1a7a1\n56d77deb-cc8a-47a1-9a03-c323e2fb891c\n9518ac1e-61b5-4762-8ebe-6bb9f68f19c5\n309ef385-7c27-4f7f-81e6-b38f3343f710\n20d6ddbc-af0d-40b7-8cc2-f1fa8314c003\n5c21fb57-cf55-4102-b86e-e9cc51520f55\nb71333a9-02e2-4ebd-a2e3-7e7a94a2e7ea\n9d6448c5-8b70-45d9-894f-0549e4f61a64\n3a4f842c-76a6-4de5-b24a-5c6fe8a8c0f1\ne0279a38-ac31-4430-ad86-4dad31e51f3a\n5af94f50-f2fc-460f-82c2-f2d56fd14fc3\n1850ddf8-505b-4879-8145-54b4056bb0aa\ne1db4adb-3b1d-450c-a18f-91333355ef0f\n642b2f96-7d20-4b31-b328-f5e3a809b99a\n66f08951-d304-4797-9d8e-46b87851c9fd\n2073e480-a646-4acd-ac55-301569ed8d5a\n06cafc48-1f07-4482-b24e-a6cc0718aae4\n667e6643-4e76-4b64-8e04-44764afda633\n3a4c94d9-f865-40e7-8acf-4eb1b842f826\n2ce5697e-faa7-461e-b06c-9ea139575b2b\naa828d63-5272-4c2b-b4a5-ad476bc8d27e\na2d45cce-0ad2-4b28-80b5-cc171317ed36\nde2257e0-7065-45cf-bc44-3c5e4c46123f\n590aa600-1da4-4835-923e-71d9f8220fde\na272bcf7-35a5-4b84-904b-c046668e48fc\necc2065d-8c87-4ceb-9c27-c943d30ef476\nfd18603a-4764-4012-9bfa-8de247f41a26\nb9256c4d-8cfd-4e0a-8056-6bebd6ce1def\nbe4ad40b-32e8-4b6e-9391-0ab73fd086f3\nb5580ef0-f790-4834-a50b-c1c33dcc19f0\n65697010-6e50-4e1f-96ad-7bb53c6f8165\nbf8ebcaf-00a7-4794-976a-7fa1504ec2c7\n8dfe786d-96c8-44f5-983e-9a126016f299\ncb8d3666-7619-46f5-8844-66cb90e2c72c\nd18f4a92-ccf3-419e-bed9-3e86df765bce\n84397dbe-4f68-4532-b2e6-f68f8b0cbdc1\nb586f29c-563d-491b-ae33-d56c4303dbcc\nfaebfc2a-0ae7-480d-bf37-7ee5774ffe77\n613b5d1f-2e34-43a6-8ee2-2988e3d71e32\nf259d020-f7d4-4137-a699-e585a0c5aa7c\n09a03cb4-54ce-4749-8044-40ce39d2e74a\n28b1b9c4-03c7-493e-9f09-51706a6583da\n28ade82d-5c68-440c-aeae-e829decda86b\ne4c0dcf7-6146-4b51-846e-85b0f7888b50\n26e0508b-f7a8-44ed-a4ca-baa0e388d8ab\n300495f2-c3cd-4f0b-91b8-92db8b8d9a80\nf128f39e-3250-484c-af09-3977aaad0b71\nb36f4ffa-3adc-4bc6-9ff6-1c8a0e0ad965\n52f7b214-4909-47b8-a15a-7c5fc5d94e1d\n8d94ef44-936c-46ac-9364-5fd077b85cd0\n28ae863a-88db-423e-b810-a26cd027461f\n4cabeecf-85f1-44fb-8eba-aedecf40e533\n0d857f4e-3319-42cd-8d5f-0d616df9d7cd\n232da76e-dccc-4b55-8b58-0d9d59ed82c1\ndc146f1d-ce24-47fc-8630-7ca2fb0880af\nea897c8f-e646-4e61-8c7c-3922f3634af8\n641e947e-ed68-48fd-b061-e0577f514fd6\n64caaf59-81d7-4503-af02-2e5f930f9733\n433fd50b-3a99-409d-8777-5a5ff079c5b7\n87e597d2-d3cf-4940-91e5-bf25cf80fbe6\na1f474ff-68fe-464c-aaa9-57ad10c8fda1\n03b7cc98-3957-4457-a670-b50fd609f786\n6b05d7aa-157c-43d0-94c1-0ae73672fc86\n8cecc9c9-1fd8-41f7-b69c-d3f26f486343\ncf42b548-aa95-49ff-b39f-ae4d77fcafca\nf22aa5a7-be4d-4898-b088-f67caaa37e67\n7b091660-3d85-4523-9bf0-a138f6c21523\nf751cd94-e251-4a44-8689-7b5cd12243ac\nec36c25b-5a8a-4b8f-a292-195d610d13b2\n7bdec949-e0c4-46dc-9d55-fc21fba84225\n2f512ec7-6bd2-46d6-ab80-6c55cb36eb6b\na6dcace3-9cd4-480e-9b1b-816fe401ecf3\n8735681d-c091-4293-a5f9-eeb12de3a63a\na9fa6278-f0aa-4d67-90bc-4718c5c71f53\n42ccaf7d-c124-4c54-a6a5-f0b51f99740d\n84a293d8-f0cc-48ce-aec1-de612715eeb2\ne32d6879-16c5-4b93-acb2-1c9ac31f98f2\n26af89f1-f508-4a2f-9040-56aa12c3c46d\n54635ecb-e241-4536-9c87-fea8f639ab55\nd2ad09e6-4cc8-4a4f-b366-350c892d8079\n3908c1f4-d56f-4b6d-ba2c-75b086d6d9a0\n72ffef7e-66dc-4577-aed5-466a5f5fce7d\nfdf82682-194c-42f0-8478-eba0499fe9d0\neb29a8ee-b24c-4c48-ab65-1c7f65703ee5\n9842da20-7064-4b62-b590-6b88cd43a4fa\n042c4da1-c841-4b5f-aa8d-bc2215fd7fdb\n583917ac-16ea-4f52-a686-62f220a3992f\n3b0b8cec-3515-4a14-9852-527dc813a575\na29393b7-cf82-472a-8836-04301fb774fa\n6da6ab6b-7ba3-47ac-baba-b71f00fa4994\n0d20a94a-544e-4533-93a6-20a9e6b09d6a\nd02b7379-63de-4cc7-8c2e-1640c50a61bc\nc5daecd0-596b-4010-918a-a07bd4a18d4e\n4ba486ba-6403-4918-a064-dede2e698587\n72c080eb-d3e4-4430-9bab-7d56ed23cac4\nfdca7122-4bed-4e78-a5ee-0838524f871f\ne1869686-c3db-45a6-888f-585a9437b3eb\n5bedde0b-fdc4-440c-b28d-8ed082d0504c\nfea204ad-2279-4208-a383-41122dccd13c\n4abec029-f7ff-4a02-b59d-cf4d3530d8a5\n5962281b-94e3-4781-876d-d26024d5322f\n0d625a94-dea0-401b-aaaf-1e1a456a08b4\n7dfb7733-f3ac-4c42-ae4b-6339cb0d4890\n41b46d0b-4be2-4d97-bf58-5b3761f0bdb2\nf8fb2be2-aa8d-4dfe-9a88-5bf81b397d92\n60f22242-d32e-4ef5-b818-30a881b8e664\na162df30-0090-493d-9e02-834f9e39c549\nc89f1c82-5649-4216-b7a0-7d6cb646b2cf\ncfa140a3-ffd0-4089-8d10-d4d0d8244375\ne90102ac-d7d2-4c13-ae63-20c26b1f1375\n5df0a1fc-cb4b-474c-9a0a-ba8849c221ca\n355e0b5b-5bc0-4ca8-a19b-4a3ed2a5991b\nf4d198da-383c-4576-bd20-d237e9f4b327\n17c221e4-65b7-47b4-ba4f-3c410aea7b8d\ne9266906-a8c2-4fa6-ba14-be35e599ee86\nb7c3b488-f10d-415a-96bc-71a0d5dc4192\n1df2d706-0d70-460d-971c-dffc122f46ae\n4d1420c1-96c4-4766-a336-82e4608761e7\nef43b974-9bb4-44eb-ae3d-a7291a687c51\n2cefe9f0-f55d-42d8-9387-51f11d21d867\n8ba948f6-c116-4e08-b951-157727b4cab2\nb4ac6e64-0296-4ce0-a4cb-0e3ab3c8584b\n0042ed86-343c-46bc-8822-fe96e247c3dd\n661d0b09-9f2a-443f-b6da-f80e552f3526\n216c7050-c0b0-4c81-856f-5324066254e5\na5658daa-5b36-4969-94ba-e2d51a19161e\n03c9dcfb-e469-48d4-a8d2-33314685d55c\n4dbf66bb-a2a2-45e8-85c5-226631a43e41\ndad734f6-c91c-45c9-98ce-90e6141c438b\n676633be-b27f-4c49-99e6-ade32d9b8886\nc6ca728c-3244-4cac-a641-a5dcd8c7fdbe\nc078f7c4-53d1-4dd9-9a50-b11b801e33fd\n4512fc02-5512-4d4c-8d63-6440764ab155\n93426968-5883-499e-ad9c-c359ffacb3a4\nbc640399-94e6-4ce8-9d00-ae1dfe26088f\ne2aaceb8-0e1f-4df3-b214-788a01ed97a8\n2d75b28a-9f19-473d-96ae-100d80221218\n0c1db744-e28d-4f41-9137-54dcddd5699a\nfac74695-5925-44e3-b95e-0a05cc838c5b\n38cafb5b-5fa8-4f35-a551-171f45295412\n2906a88d-d470-42c5-bf47-11a9dac4d153\n088994a8-f87d-45f2-bd2a-89bdcd3324c6\nfb620eda-7ea0-47ff-9fd5-405b820f2e3e\n3e3ec9c2-f16f-447e-a147-557fb2825755\n6271d142-47fe-4755-8ad0-5586b70ce35c\n3b12657c-d801-499f-a392-12af67180dbd\nc7518f96-9d39-4714-bd77-5fa2364c9ce9\n12c6226e-b680-4cba-b8e5-d6e703660480\n364fad39-015e-4d52-8378-ef6789f7cc1e\nddd25b3c-6fb6-4494-9fa5-928ab484c9b6\n181ae677-0f2b-46c3-b319-63966a010163\ne5565cca-01df-4860-9794-bc87f93b70c0\n44b8b663-643e-460e-80f9-aef9a6b13a16\nd27f9f7b-cd6c-4049-be0a-6e89a6dd2885\nc5bd7369-9b93-480d-89c8-75bacfd458c3\n08368764-91ca-4635-afa8-a55305b25b3d\ne55b2fed-a73e-4cb0-98d4-fa95d1b22067\n38e08fbc-ff77-4b04-b0e8-9692a82dd4a8\ne8a19ccc-26f5-456c-93f7-5afa1afec223\n5f6919fc-4b12-4637-94ed-7429f3776c9c\n80891f20-b9fd-43b4-9d1b-ab3343c9b00c\n4895e6d5-d5e2-4891-8099-c27806481933\nc4883b47-6586-440c-b6d9-9a61f4412bcc\n34456551-7338-4659-979d-d87285a9b0c3\n0990e06b-7540-4aae-a9de-a59746b4bb68\nbb3f2d03-ca14-4772-976e-d97e8eab2024\nb9ccd2b9-d8d6-4715-9e15-d03eaa898b3a\n3f257010-d0b2-4896-8198-289aad17749d\nced2f52d-6f11-47f8-b821-619021832c30\n2ad9b8a8-54c7-4530-b2c4-f2d6e9a44c75\n595020b4-3e7e-499a-ae3a-6e3a0e976fb5\n94a9dd83-d42e-4db0-ba35-86e5a7f6e170\nbb80ff54-37c3-414a-9e0c-89108d84b058\nf8ba7cab-0300-4a96-96ea-946553632d99\n3fd93889-4286-473e-a966-16e1603401cb\n5db9833e-f661-459b-b1ba-9f4f54e959d9\n8f65c320-db9e-47e3-abee-bc807ebfbe0c\n3e1f4869-9a94-45a5-b64d-cc4417583b21\n57503c86-62d0-4dae-ac20-5f6fcbbc58bf\n966e218b-4dbb-4889-9aac-65d7ea5e711f\n9afa1566-66ed-489e-991a-4c92efb0028c\ne492e7eb-33e1-4e0c-ab51-c876909f4fcd\ne5acd83a-6f10-4546-82f1-e7d530a8a7d3\n9728987b-ba73-415e-85a6-a574a31f7325\n50bd1f90-38bb-41a6-8002-2328e8e212a2\n77388476-14f4-40bf-861d-739f9d7aa38a\n5ed0d685-c533-4485-99f7-3d6a6fb85140\n954ffb20-f951-400e-b8de-d4513da739a6\nb3a45afb-f845-47f6-8f61-e302689f4235\n1dd1105d-3997-4083-a413-8e2b85bfed5d\n7e383976-2018-4de1-bae2-781928543645\nfcfe5467-45bb-47dc-8142-95c218dba416\nc78330ff-3a3a-4d8f-a41d-514bc3322a43\n4f0154f3-d987-4ad3-855a-10cf19137216\nb12acc78-989e-4b50-9353-c7751d7d1879\n8c909c25-488c-40f9-b646-94b8f2b2df41\nad78d3df-ca4f-4c14-bd09-049e25e1a563\n316d3627-d87a-4b9f-ade8-2f2a4fe67483\nc33e5ad8-c9a4-453a-96bb-162736b001a9\naed77795-9741-4fa6-bbed-78f788b13a7b\nd9566ed6-8ed9-4095-9ac9-5efc583a5f2e\n7a0c2dab-9f1c-4530-8673-57fb62eb443d\n940e0dfa-e771-4fdc-8661-bfc9a5902dad\nedff726c-e3da-48fa-9079-cb59ab03a814\n56d4e936-eef0-4cc1-94a1-05b67440358a\nbe4e7892-7239-44b1-94c5-fe157fe06280\nbc8f992e-3c29-481b-a493-67ab8c3e4d2d\n5b481c03-660b-4ee3-98fb-84c8840eed80\n8f0d0a42-d465-4cba-b3c1-a20b070bda49\ne1d241fa-5aa9-468f-8f1b-d6135e1c9e36\nd335e0c8-d669-4854-ae13-8d82c53486f3\n69f92a11-b6d9-4867-8542-934bcc7bbbf5\n74773c22-4820-418f-bcab-60a3c5113e5a\nd3ee4394-f4ff-49ae-8a5f-d0522533df2d\n6d3a992a-efbc-422d-93b0-b01c98d761e9\nd5717fce-0960-4251-9b25-fef431ed593b\n2aa4a04c-d253-4bdb-b5e4-23a583b45530\n024bd82a-f2aa-46dc-b770-b1a101806cba\n79b02f98-fc54-47cb-9156-2d275bbf5860\ne361f0b2-6f2b-40f2-b4ae-dad46e015fa4\n15348921-2f5f-4570-9f9e-6062098807d2\nf41ad6fa-9e31-4a40-a70d-29f34146ef43\n4efc538f-9633-4e04-adc9-479fb5dd569d\nc82dc33c-80f9-4291-8a86-a784c05f2391\n630a9349-b7f0-420f-a71a-715ccf7d0de5\n590f4320-e9e3-4295-a8ca-3f8604d479d3\nbc72b546-c744-4e6a-9cbf-b6f605ef0a45\nb9d79bcf-2000-4f8c-b9c1-c10c0af81bf0\n4aa1c7da-a729-4e4d-9729-81b0484abc21\na6352d9e-4e2c-4f46-9cc6-5c6581fa79fd\n01aa2805-5280-44ba-b7be-6c6b403a7ed3\n4878cfe8-0ade-4dad-ab53-65a26b73f1c8\n26af168f-e300-44e9-adcd-1db6d723431b\nc625b23b-e107-4631-8e11-4d1633657691\nd72ed146-687b-499f-9d12-16fb1b19b062\n9682fd97-46d6-43cd-912c-4d6eed9316f1\n95d89577-5de4-4740-bfcc-871775ed4247\n1bbc0526-2649-43e8-a4b2-b63ffca0e112\n9ca47af8-8244-4fe5-96b6-0e332bc568a6\nb33b6eda-a625-4351-badf-6c5822876180\nb621e247-eea7-4ef7-ae1e-06275c5d5693\n13446cab-d83b-4966-ac6a-282efcd23bb8\n6809cca8-4390-4904-b829-890df2e3b88d\nce317957-9604-45d2-a83e-452e20957f7b\nb19a97b6-ce78-4a48-93f9-7c09e34330ef\n2fbdc3c1-2c46-4cb9-ae25-87e3842bf048\ne987f60d-470b-40e5-b213-302aa1227be1\n2123ef09-cdba-4b85-98f3-416ce10385f9\n4b505ed7-1390-49ef-a910-fd05d454cb69\nefe7eca7-c9fa-4fca-a5ed-13314548d0c5\n0976ee9a-2b4f-4774-a7fa-4367a4f50b23\n20ef335f-dbcd-412d-a602-43ca7dc4f27d\n6f7c4851-57c2-4c24-b00f-607bd226df44\n116d9f6b-4d81-41d0-b5fd-8ce70e96c27a\n608a1b8d-bd6b-47f8-8135-347e67733f34\n557bbe1f-8d7b-4714-a732-2fbcaccb6b22\n9de51a0d-21f5-4a83-88d3-69d6e2513917\nbf3bd9a5-ad8b-4a48-94cd-e3cd073a4804\nd7e7f8ea-9ab7-46f4-8bc4-b14e044a95e2\n1ad30aa1-ed27-4b0f-b0d1-2e84eefd0088\nee2699eb-4a73-4dda-9b4f-d3941b67bee3\n7ac814f1-352a-4ef4-9a28-1d6732fddb5b\nfaca576b-1bf6-423e-b887-64a41f6fdd46\n32ccad48-d9c0-4e30-87d4-c668fb2088dc\n7a24840c-e3cc-4ec0-95eb-956958e6b7e7\n2e153400-290f-4868-a2e2-fef4cc7704c7\n17d3de9c-37d4-484d-9586-63ccffad61f3\n883afd23-d5c8-47fd-a687-913d6eef6bdc\n35c87ca8-6515-40cc-bcbf-b233b9657594\na6838e24-d046-4085-8ca1-11f96fa131c0\ne93b848e-72d7-4e49-862b-a630ef62ef42\n12bdbeaa-7e9f-47de-b04e-07944c5a2c17\n013c9b5e-a117-442b-9f4e-a1879b2e4ebb\n57fdb40a-ae89-4ea2-90bf-06f4b3415be4\n08448ce1-2d2e-40a0-9715-82afc3b7dec4\nfde5558d-0c0d-4ca4-b120-85f8bc7e0f38\nd385f0b6-329b-4528-a7f5-b6e879e1bfd3\nd20e4462-e021-4624-8572-622166121237\nbbbf8526-4d9e-4197-801d-7e705b915b0a\ncf29304b-a6c0-410e-8d11-0994b4948c0d\na8b98698-5c9a-4813-b834-f7c6127a2e1a\n628ef5c2-0b9f-4993-9796-03dfcd2a8893\n06658d78-44e3-4a81-9ec4-9325395ff897\ndb794678-6dfb-4976-9ccc-e1c8bb6cda5d\na5b23959-8d04-4547-8d15-1c41ead6ef49\n6e8786c8-144c-4016-a00d-775f8e9b1976\n7b8f9900-3da2-42bc-a19d-024548fa66b0\n3e54c621-b9c4-4701-b365-a03adea7a8ec\n10a194d9-bbba-43a1-ae78-a23043548177\ne7b481ab-4e3f-4cf8-97d7-df90765d43be\nbe103435-246d-41fc-8e77-952434524b2a\n018905be-7f46-4b96-b1aa-753f293d66c9\nc48197b1-746d-4e3b-b46c-c38243abbcbc\n81d424cf-1ee8-4b6d-abf3-2cff84b8b56d\n8d64dcd3-54df-44aa-b2f3-e46da3fbe612\n93cec6a5-42e6-48d3-ac89-01dfcf1a3da0\nddb1069a-63d6-434c-b8c8-1010aa72d309\ne358ebad-ebad-43f4-847d-ae9774cd557d\n20cc2324-b665-4581-8700-8aa86ea86d80\n9a12c489-1e97-4765-9a23-38a9765c59c3\n3a949957-d7f4-4090-a5dd-5ce17ce4b308\ndddcab9d-835e-41b2-9499-fab160570716\n934f2404-98cc-4d78-b5bd-4967981fb577\n7de30178-67f9-4870-82ef-a23f7495ac75\na4b4b36d-f6cd-4a55-8f77-a12c092f41d0\n48faaa0e-5e03-4e07-8c42-7980b01daaf1\n56fd088d-8577-420b-a5cd-bded3fdef72d\n1aebead6-920f-427d-b3d7-45480f71fa62\nda7ea492-9452-4f13-ba5d-af686019cf31\nbcede1ce-f7e4-4e22-8e34-03cb6c2f7ce9\n1f1d29ae-0d22-49aa-af80-221fb1a1eac6\ne35f6e13-52e7-4ebf-8fe3-ee2d727695dc\nbc1e85f4-1d39-4da8-9e8c-9a44fe6375b1\n55676ba5-d74a-4db0-bf41-fa207dcabf82\n892c9409-2a28-432f-96c7-7cf156105f19\n345094a8-f44c-4a64-9603-3a4ceaa1b655\n2206f811-d5be-4e71-9326-60728e5de09b\nc20f6d90-de87-4b84-9b0d-3af04799914f\n800ad99c-f127-45dd-8f09-ac4ca877ada1\nf1761cdb-3714-4170-b13d-ad9d0c95bcc8\n784720ad-8945-4b72-af41-41b1d88a3c66\n9b570c0c-c634-4d88-b5d9-6350b41c9686\n3c13593a-4e0e-4cfa-b75c-fc2b96e49716\n2b356dcb-a65e-440d-a250-1ece8b0e8ec7\n0ebfcae4-bb8c-4be4-810b-e28bc41c69e9\nf7299d86-2191-4f19-ac73-54c6cd749b7b\nf9e88d62-f5b8-4351-ac18-37a9520ada13\n5af41724-5a0f-4379-9f34-5495ff42459d\n10f3f357-b431-4e8d-9e6a-7d2f7148b321\ne2fab27d-cd50-4c64-bea7-481f9092fa3e\na08668a7-c473-4292-8590-d8dcfe9f9f85\ncfa20fcc-1869-496f-b027-dd62f0b63744\n94c93ffc-2922-4af9-ada8-a0e3780b7cae\n34410f05-f36f-49d4-b24b-3204f4ea5c7f\nafbd3d76-17ad-420e-8224-205cceb13b1a\n51ef33ee-546a-4586-832b-a8d618891071\n74905b2f-4067-49c2-a83d-2bd60f4d44fc\nb59d9caa-7199-4a3b-b91a-bf3708726759\n56fbca22-79a5-4545-a537-737ac9a034e7\n9f240bd3-dd68-4703-8e39-6617b4b5f77f\nadd535a5-c27e-4ccf-bf17-bf2335c3c3f6\nd881c61e-b4ce-4855-9f83-85887e5fa5db\nf2e87d4f-10d6-45b3-a0e3-7a94d8055e1e\ncd1543c4-3804-444e-af91-8db66ea1f1b8\nfb81f1d3-2066-4e08-bc4e-d32d7f949c27\n30b53cad-fc30-4bbf-bf09-70fb1fd35c93\n910612c9-f349-435c-b8bd-465278c12775\nae9d47b6-c184-4bc7-b980-f79943469dc8\na28d8e55-800c-49a3-b8f1-5b484b595a86\ne9e0260e-ddc7-4621-b019-d0dc0a12f386\nde4e0cf9-7e3e-4918-bb1f-1b6b63e5535e\n351e9509-210c-4be8-b372-70395215a128\n22009843-34bd-49ea-8dc5-fa5219358068\n2a4de4ae-ae7a-48a8-bf5c-fe399e4179de\ndbbb26a6-78a0-4954-81bf-972936215960\nbe780d4f-eb62-4e19-9f7d-83e8b1e0fb1e\nd25263e4-3533-4151-af20-71e7f4e6fe2b\n89de8b0a-8402-469d-bf7c-eeb4ea2af65d\nff45050f-9f04-429d-a6e1-2407e8ce4365\n55074c03-2152-41c7-b8b7-751625231368\nbe9367ad-c6a8-429e-ac20-8b21728e77cf\n43ec6bb6-857f-4949-ad21-817bd9a08dbb\nb10f5c34-32d9-4f7e-a854-1dc98a1e820a\nfe13116a-f255-41a2-a02d-0e971cd2295c\n08b27575-f96d-4810-a9a2-96aa018a7541\nd9852c3c-20f0-4f65-bbdf-89c2ef9ac02d\n640de00c-63c9-47bb-b8b4-52375a0a07e2\n068d8e70-9062-47c3-bd15-a737c87c6d97\n98be56e7-02fd-4e9a-ae85-43ce032aaaaa\n56a9fcb6-8c0b-4f86-9004-a9fc0b96b79d\n77a163fd-f00b-4168-a2b0-cc595da9af51\n406df41f-0982-4735-87d7-cd07ab5a92f7\n8f748f4e-71d9-416b-afb9-26ddb4ea9761\n66af1032-7364-438f-93f2-30151758a469\n417f0c72-2d93-486f-a1d6-f5ec59c737ba\nf200b0bb-6bc6-4eef-b903-0fd5da6fea4f\n35a3b9dd-4aa1-40fc-9af8-6905e0118e0b\n792ea184-d350-4c35-be4b-a6df28a0df8d\n23fd4eb8-bca8-4351-890d-9a093192e4ce\ndded9337-4f44-4cd9-aa6e-bc4862332e21\nb084007c-e52d-4803-83c7-1456f279c90d\n2c822451-300d-47a3-a4b9-12e1ff134e58\n83e9ad93-b4b7-4f2f-8ba3-bdbafb697dbe\nad5a2f4b-bd99-4dca-b38d-74a1aa4594bc\naf56867c-0e7b-465c-8295-548fd51abe88\n3996f4de-30b4-4e06-be97-ff8b34c88b09\nfdd95c9f-e536-4b5d-8381-756a2425f392\n9a734ed1-d8e1-4fa4-a9a2-3fe25712e36e\nd1c757ad-95b4-4205-b478-2817e232bfaf\n1e94d447-4732-424d-b777-cbfcb143b5f4\n508bcff9-725d-403d-96da-4081f63459ee\nac971d8c-abc7-4f1b-b009-e4eb8c661fad\nb8d7318b-30c0-4dca-8276-6bc0549fedad\n2991ea7e-bd42-4ecf-a1b2-a7aab6631967\n1f1aac59-49c3-462d-8c91-5e366d45bfd0\n40243972-e009-4be9-9f78-a251c9f7117f\nf01ceb3a-d39f-4736-a7a4-4c7a136d49c3\ne69dece4-6071-424f-bd34-93ceb62da219\n69e74d2d-1676-440f-8a3e-dba0fca44f2c\ne7f8efa4-a0e7-4ef9-af91-80091c965c68\n6fdbc780-0271-4c8a-915d-00068ce7b0fd\n30cb36c4-07a2-409e-8023-9511a0c411e9\n68c02b3d-18b5-4100-bc9e-0ee0db0371d4\n24d97ecd-e340-4367-8be3-87e16ee797ce\n3920ac19-1d00-4e00-9531-9071395bf1f2\n6a32b3ac-7f4d-4706-b446-f3edc904a9e8\n89367073-ebd9-406a-9d59-6ccacdb2e636\n9f4bf021-e539-45fc-94a5-59d25780f971\n979810c1-b21b-45fa-b9e1-3c9d665cd442\nc61e3eb2-df59-447a-90fa-884e0811c906\n365b6e23-547a-4719-b841-8aa6eec1be5a\n3290e93d-939e-4e37-8372-c974524b99f4\n9e847d4a-7a6d-4e8e-99b7-173936451b2e\n5561eaad-85cd-41a1-91ec-96ad20e0f918\n10a14359-08fe-48f9-8c59-fd8a66184fb6\nba482022-59d3-4c47-a099-b9b2711f74c3\n5aa0fe57-c201-4270-8100-50fbe21609bf\nb11596d9-821c-44ae-847f-6069ce88ebda\n59be37fc-16ce-463b-beef-449c2133fc59\n18759e25-93a8-4a00-85c0-d439a4856ae4\n544fddc7-48a0-4984-b21d-e5a20ccf97a7\nbc9f945c-4fe0-466e-a710-035fd418c607\n816dee6b-3f0c-435c-aab1-7ad3f38746f1\n97df6dd4-986e-4594-b8cb-58a46ecb9066\ndbaf8c06-8f0c-4247-904b-4f755a3f8de5\n7533967f-5e73-4405-ad6b-1550a82a11a5\n036f8a5c-e9dd-46a4-a3e7-e7bfbb5ace20\n4002b003-e99a-4a5f-99a2-4d4e95422674\n3c3163c8-4c61-4937-a0c3-97cf418b6498\n65c4fda2-19b8-40ba-b587-8206f690a10d\n2f89671d-d056-4e0e-a504-e95401555ea9\ne16b295c-5e90-465d-b756-6e1a03e47396\n207aaac9-58b4-41f9-88e3-8cf810fbf758\n27b294cc-1e3b-4a6b-958e-cf188c60b9bc\n0b3e6594-826d-44d3-bf81-23b8ac907bba\ncea0dc32-8d5b-497f-93b0-1b5ce84bd4a3\n5ada0cd4-7220-4d25-8d2a-2ddb8049c4ef\n47caf084-36de-4698-bdb0-3a45bbdb1063\n2da23578-6ea2-4ad7-b2bf-7cd2e3011936\n717bff68-8bfb-477c-b29c-e8f54cb4fec4\nec77b036-f7f6-440b-ac79-d7a6f4708073\n43896375-086d-466a-8ddc-f9128c2b3072\n6b318ac6-185a-4e2c-aa3a-e686a79a28ed\nf0eed575-dccf-4d84-b93a-a1e9eb3142fe\n1235fb78-52be-4437-aa20-9d67ae45d27b\nd23d1c0f-a867-462f-bf10-4b257fa324f4\n54b61ba1-e937-4354-aaed-4edb36238704\n6e40edb4-bdef-45b3-8128-d7fa55e43af9\nfccef572-c61c-48f8-8f94-7271b51c1792\n674b2df4-a6d9-4154-add5-ae39c4ee399e\nc845e3fa-5ea1-46ee-b48e-515364472f8c\ndc9207ba-0cf8-47b9-8461-7932a6a17ef6\n24f9a8eb-0202-4192-ae0d-dbee22b5c25c\n6dda2cf8-5411-472b-830a-e06470e7cec4\n9fc3db90-472f-4940-8e8e-3a7572886751\n8aa87a28-4c1d-44ba-8298-a3f96fb252f6\n9dbaa725-a386-4e4f-a9f6-9d1ce6a3fe42\na5fcdbdb-7bd5-4585-962a-278fcb7ab234\n0a7ca74e-2d24-4fd6-8960-9986f7d11113\nde03d1d1-5bfc-44a6-a35c-d90607e3efcc\nac21c598-9496-4ba4-b574-f79e3c34b41c\n7cdccdb3-7ea8-4ee3-bed7-5420739bc46b\nbdab84e4-ab66-45cb-abd6-a590d8c3707c\n9cde49e8-5cf9-4045-9a10-c6e9d1f05d9f\n1b2f7ef8-43b7-4a43-9837-ad8868980206\n202e4359-6dbc-4d2f-a8c9-f041d31465cf\nf0e4e35f-e4f4-4585-8b62-2fe043763a14\n4a13193e-20fb-42a4-8819-83e6c253ff4c\na7e36b69-3bdc-4833-a919-afd26898eb98\n431b1690-9c78-4d35-819a-eca95f9885bf\nb9cd2bf1-0ff5-47f5-a3a8-535f2d66231e\nc3882b6e-75d7-4218-8fe9-32f701ac04c1\n787dce20-7d71-48c8-b410-b5103a95fee3\ne0853d68-445f-4159-a28a-564dec02ffe9\ndac96457-7555-4a24-991c-2fc0e564bce4\n39d28cec-a8eb-410f-a073-697dddbb5fff\nf6127a48-aa0d-45ec-b343-5d6da77a0550\n85dd914e-029a-4b05-a252-d2c40e0bc57c\n7db4c5a8-9e62-43c1-adbf-7e67da81b3e3\ncdd7b63d-6656-40dc-9494-3dabce45f43d\ne86f01ec-e852-4dfb-ae40-26636299de62\n676675ef-dc62-4f08-adc3-1440467a41d9\n1091121d-0a0c-477f-928e-5ae5fd60e044\n56cc75a5-82be-4f97-9bad-75885b316505\n8daa4176-96bf-4f49-aa73-010076046b99\n6dff35c5-2cd3-4939-858c-826cf95fb01a\n8fe33037-cbee-4256-85e5-b8f0caa46248\neeb28b34-d12f-4077-955a-da0b8046111d\n3d08eb65-ffcf-4de8-aadf-092b69d390b0\n7ce23d5c-ce95-4449-b9d9-1ece49768046\n155fa6d8-ad5a-4810-aa1d-54e6d55d5bd3\nc19c5b66-3363-47bf-85dc-9b8d43dc79b3\n9d76528e-7a8b-4c26-a5ca-6cd6b8db30c7\nebda6618-18c9-431b-a59c-23fb2b69450d\nc1566475-3429-40d7-b1cb-9edfc41e068e\nae5c2b04-9297-43fc-8eab-445c544d49d2\n8b5a706d-255b-41db-a63b-6a25faec573d\na91d1bb1-9972-4a7a-a122-e4787554200d\n85b910a0-138d-4794-b5f6-047f5bd5c5b8\na3d7dde4-a7c6-4e1c-83c6-de8209c971e7\n8ad187e4-828b-4923-9e64-819521549ad4\na7b32f50-a6b9-4877-a643-203b1f61163b\n625bb4c4-bcd3-45e6-9944-f206e2612ee6\n46de6cf3-fda3-482c-85e0-4c2d0ce11754\n910065d3-8358-440e-8c0d-889efd6bb502\n353e074e-0e70-42af-8475-25b610694fd6\nfa6b3eee-fa57-4d6b-acf5-2203ea7257d1\ne87b8a6d-a6bd-48cb-a328-da0073ab8eec\nea2b7a9f-3b95-42d3-87cc-845dede8f6f7\n89ba29ee-41db-440d-9c55-b51c2400b453\ncbf0032e-770f-4fd2-994e-d6ecdb01255c\n61de9901-78dc-4578-a62c-d65d0ba7f412\nf7cd459b-17fc-4e31-9ec9-b08a2deef1f0\nf0283a7f-d7f8-4f78-99ee-981b82f61da4\na0983818-1bf8-46a9-b904-a05d2814166b\n04f5bce0-c0b3-42f0-83c0-04dbf8d09274\n7d6c4973-f64c-4789-856d-d0596a26213b\n2d10dd23-9704-4ff7-8807-d699634f7027\n23bc2b59-cc76-4d14-9b80-f50330c3f8bd\nbec89f10-0406-4ce1-94ab-5c70350af2d1\n51e68dea-433e-4d8b-90b6-8169d97e82d4\n8a7a09ed-07d3-4e6d-8a06-84f764924cf1\n6384f747-1c5a-4cae-b506-4fab19da503b\n78627616-282e-4a39-bbdf-cd7acd3c24eb\n81ccfcb6-33c8-42e3-b6fc-105044b2bc85\n918b1e0e-bd50-4e71-be9a-3a629181b40b\n5a979fd4-69a7-4054-9bfb-d0bd8df61d32\nce515df9-a013-4ea3-84a9-ff9b1d56ea1d\ne1cba782-7ce8-4d63-b91e-3adbc9cf6652\nc5bcc20d-90ea-4e9b-8668-cf23f7399730\ndac00ce7-d60e-4197-af76-56c4b0b082ab\n4893a0d2-3e2b-4787-bf22-6b71161fe0ac\n33c95557-34af-4c9b-9dae-0e9e02a85f37\n505512b2-d56b-4d12-8175-a8dde1b0ebf7\n6fb36094-4582-474b-a974-d2e1a896a655\nc3b0fac1-f6a1-4356-8dfa-48f42ef60830\na9724c43-ea5a-450d-ac57-26405e8c8b6c\ne22041d3-f3a1-424a-88b4-fa84f890ff16\n5b973bd7-48b3-42d0-b724-603d5778fa20\n7f0d2b76-a0e5-4edb-a9b9-787672237242\n99b92b39-1c24-449d-be4e-436665be32d9\ndc27c1e9-c223-4a6e-93bd-16f039101a21\nc5a4fa85-7e1f-4966-ad09-cea5c00b7994\ncbb21f2c-300d-4371-88f4-83cdb9ac515a\n1232273f-9e1d-440e-ad88-6d8e62e8f394\nc3866cd2-61ee-4fb7-a717-8553149d651e\ne6373faa-a0e7-410c-92ca-588fbb1a4bbe\n3a20c014-47b7-418e-a62d-5ac5fb6bc45a\n51912ede-f767-44e0-bcbe-29c1875eed77\n8f18f3f3-67d1-4a0e-97ee-77fcf6b2b40a\nf7edeec9-4c7e-4688-98f5-8e90ff4b313f\nd0d687e2-410d-4a5c-aec0-0c76b5bb6349\n89d42d0a-66a7-4959-9151-94ae7d220341\nc4ca1434-5e2a-442f-9362-89a658378731\nd3f29b43-7eda-4ab6-a0fd-9c376572c594\n3e29cb36-2373-4446-b302-27c35d89eefc\n19bca0ea-569b-4ce8-890b-cf5179c07c90\nc86409bd-dd36-40ed-8e17-4df2f67ba77c\n8401bed0-7457-4e92-9970-e0c3caedb34c\n1ca0aa83-f0a7-44d3-a1e7-e14677404f03\na9f23f3e-2e63-481d-bc4c-50ef468455fe\nb21f69e1-75ef-4b26-949d-8c2c4036a9a4\n13c82360-437c-4457-a999-cc6f1f950e13\n32b659d9-c2c3-4819-bf09-c7b690586c0c\n0f450f93-4488-44bf-a5bf-88d012ba3cb3\n86500425-52b6-4ee7-94c8-19079f65ee7d\n83353d58-3bd1-4bfc-9e1e-fb10e437a51d\n5df7a278-12c6-4775-9e7e-01df7c1bdb95\n50727777-8e15-4b47-8acc-ff1bcc81598f\naf6741f4-734e-42d1-aa0e-b6619288dd6d\n5754479f-08c6-4dda-aa81-e8b6710f3ca3\n57b5c3ca-38ea-47fd-824d-e67269a14c3e\nbd3b0c13-5bea-43a1-b097-c683dbbfcb3a\nfcfb02c5-9020-48d4-b4e4-de8ae4ab220b\n9ae50895-c7ad-40b2-889f-bef17b445bf8\n28e69c99-2ce3-414c-b694-a39f387106fa\n86518840-2c03-430f-a852-581ef8b9e6cb\n92aa3a98-f849-4b9e-901d-a816530878be\nc672b8b1-6373-4298-b45c-8b5888bde90c\n731bad28-9edf-4457-b3ce-d5a90037802c\n89b2b174-5e0b-4b76-87da-4446935d311b\n4bf5c021-0a72-49e3-88da-5ed98803bb06\n3ba6d2e7-bd5f-47fd-a448-b9f73948da03\n63976a6e-ee0b-4835-b826-47943e59bf10\n91eacbed-8587-4f41-ac5f-0e77d5f1feff\n6d8426ed-7d93-454e-88ca-4d0ebd7dfb37\n13527fbf-51f1-4e52-b85f-55dafc5690f4\nbb053840-5a71-432a-934e-933b30fd8d45\n5f620449-94f9-4ef3-8e17-9d109bdf5e50\n96529f3b-cc88-47ae-8265-88ab89b75b7d\nf8f203da-6b2c-4a46-88de-9a620f7707cd\n1dacd60b-900a-4db1-a751-947ec26f59ed\ne0be3e06-e008-43bf-a806-2a106d94dfcc\n6a3f5432-ac3c-40a4-8cd0-fac665ea6e3b\n1c343869-970f-4d79-87c0-344a03983740\n1c774fba-877c-4905-b79c-68708b38f3a8\n0f133043-404a-425a-9e0a-11fb40d86e80\nd994f774-cb7b-4ba1-b658-1fa3bd354265\nba1af500-a8dd-40e8-a28a-ce54b32971bf\na99438be-4873-4e24-a1ab-d8f9d7821ad1\n8b27b8a8-41b1-4cd0-a838-76815ec4037d\n5066cc13-422a-4c75-8583-9db7a0f2011f\n38fb51e0-97a1-4422-8d0f-d1a30b87c1ab\n6f7bc668-4cc3-4d38-b8f2-4daf554b7f5b\n565edeee-b13a-4a43-80ca-fd7f29f783ee\n9283a2a8-61ab-4517-9f91-1ab628b5f4ac\n808ff007-2442-41f1-8d87-3f7b33a62675\n239c72a8-1140-4ff4-be45-b972e88feddd\nc5d85bb4-92ce-46aa-b9b3-244a62fea370\n36656e40-5a90-4323-ae01-74d3664dc7ba\ne5843c1b-6d9d-4c6c-8923-03e2c3fea971\n6dc59450-b0ec-499f-bede-e806081d4df0\nc11d58eb-d716-4ad0-a041-da121d0b6b05\n4cea4faf-95c7-4e7c-acf8-2a77ecd61308\n80499a42-9fb6-4ad7-b598-e73cb81005fb\nc740caeb-fe0c-4d45-bdb7-84cb76c01066\nddd32725-a60c-4db9-a433-27dff53054c7\n648e606b-f95e-46ca-82cf-1a392259cb78\n9f899e83-5239-4e0c-839a-c750e8861a14\n8e3f2208-4854-4d4f-8278-1f54fe4f9952\n561c37e3-0191-423c-acb2-ab1edbc6e7ab\nff3dee93-c996-477b-8b09-0a946db23e71\n6c2bf2d2-6e50-443d-82eb-bde92dd35548\nbf1d391f-2251-4b55-8c62-c34417041878\nb07d4b5d-c668-4d57-be02-413e444778dc\n025e59bf-4e88-4bdf-ade0-ea920a6839ca\ncee08ac9-6722-4fd0-ab4a-3e2e8ee7757f\n99866e19-a6db-4e41-8d8f-c133ee85bdbd\na3fa2632-7d43-4dfe-92c5-2c13f95883a5\n40ba9bb0-a938-4e2b-b52d-cc5057163cda\ne5ee1073-3fbb-476d-9ca3-737d329afc12\nf6196c02-ccd8-4d6a-80fc-41c4dc4f4891\n8debeb7a-01e7-4437-accd-ac752b0968d4\n9a74f76e-ca99-4eb5-b1dc-00a92c80d440\nadaa9358-9a4c-479a-a913-221c540af2a7\n8d5aa4c6-e797-48a4-9033-b8bb8a1db65d\n3301fe73-4ae2-415f-baea-ff5c7913fb34\nea7c2b96-fb30-4a52-af22-4165cfcf9947\n37dc7b17-90a2-4a5d-926a-8bc322305cd0\n5f47a195-a4ca-4f3e-a17e-a6c43dbe2778\n9f2b2090-cd5b-4bdd-9bb9-11a7df38eea5\n66ca252f-49a0-4b4c-9c1c-44b4d90b954f\n3168e6be-6914-4977-a9e0-9b9f58ae9eab\nbecb1868-69eb-41d0-b210-2e49162c7109\n1cec07dd-ce67-4f47-ac3c-a6df11147878\nf6d3408b-65f1-4f94-aa9b-8bebf5122a0d\n1d3bb32d-10e9-4984-a4dd-91608e9cca67\n6b7e2080-7a21-4192-953a-61e9d00e47e1\nb47e5c95-429b-428d-9333-b0a6177f7b63\n4486c3a5-4131-4edd-b7d9-286981114131\n452da534-183c-4e3c-a026-f073ab26b5d5\n32faf8e2-c660-4717-85ed-30935a351ea9\n86b3a838-4711-4650-96f3-e7563fa74acf\na95045e5-2890-4fd7-a9c4-4369c2e783fa\n8cb36fe7-c236-4973-9e09-4b44b90281b1\nb49fd679-e4f6-4096-8f42-20ae960d8a59\n5d4c4a3b-34cb-4fe0-8754-52a3614d0248\n51249e27-d18e-4fe9-8701-f3393e21295d\nb550f2e2-be4c-4437-8860-26dee8538b2d\nd700077b-e7ae-4463-885c-7578ef55eed2\nb2b4ad17-25d5-4489-9c08-4563ffd89a9a\n93e6e00c-1277-419e-8c6d-b7ca9a31a96e\n1b2eccaf-2d3c-4c5c-a254-2619270f943d\n302c0ee5-6c8c-4a7b-a5f5-f7c282cff3d1\n2d6ab626-c574-41ba-ae2a-7db70a0818eb\nea5f5517-9056-4cee-8415-b7405b70070a\n74d230d0-0a5b-4662-abdf-bc02ae4d1b2f\nac3002bd-c5da-4982-8916-99aac306e9a7\ndce5ca10-290b-4ee1-9973-aa150a0f54f5\n5346a7a5-4f65-44d0-869d-0de0509392e3\n91d020f7-c99f-4dd9-8f2b-89b4837a834c\n6d631639-71d5-4304-b4b7-ab6d14513537\nbe37e81f-251a-46dc-907a-ae9b9b9991b7\n24e00868-640c-407f-96d1-174c86bfe100\n45973a9b-4e21-48b0-85b5-895b2a9052aa\na53db360-cc70-4a76-8b80-acdf105ea8b4\nfd6aaf2f-09b1-428e-85c5-a620a99b61d9\ne24095c4-c09f-4ec9-bfea-1b445db30207\nface324b-3002-4c6c-9446-23aeee700c09\n9cabad35-0591-45b6-a32e-0dfb69fa417b\nd3ed62c0-634c-46c5-b95b-46067cab0586\na17b956c-438c-4932-aff8-7e66093022d8\n4e0d1b25-c22d-45c3-966c-465fb7326b19\n273c82c4-9b20-4bdd-90ad-83375ddb9fcc\n905e5cd5-558e-48ec-a276-37810d829b66\nacdd4429-7f4b-4a19-bd8e-27896d131962\n5a62e9e7-51c8-4a28-a52d-7709b3541481\n9fa23a28-51f7-4171-8d85-138a3b1d7909\ndbcf03b5-d28e-4a22-a5de-657138dd518d\ne3493755-5070-476e-b780-08f3cb5cefda\nd16d7dca-4506-4d4c-8f27-1bca75a3bef6\n3447ca5b-e3c5-4b2c-b962-6af5f56e54dc\n373d64b1-439b-40bd-ab18-0ca3243e1973\n824aff66-9d03-4dc1-8a03-0a1a34262d67\n0cc4f74b-6e50-4cb5-ad56-ec90d9bc26fa\na6f9b314-7d50-4de1-95b0-0a1be0024eef\n4226c054-1974-410b-b64e-4ba9e5841c62\n427ecdba-ac14-4dca-b53c-12931a77fddb\n637b1b39-74a1-4596-838e-951693406f48\nd77720a1-e1fe-4936-86fa-a37ebcae6f00\n3bdb1076-a69e-4827-be54-e134ed49e82c\n49e0a8df-4833-49d0-ad12-4aa7d1110380\n66f36d7b-4e08-44eb-a764-0d7f4023486f\n0f87ded9-88e9-49ed-ac6e-8245286508fd\n9ad760b9-b96e-40b3-9132-e856e637e6ab\nb6be1154-ba3c-43cd-8847-0938efcedab4\nf4edb24a-3231-4e00-985c-0ce63f08aed5\n23069c11-6b1e-4fae-a97a-d83a95499f3f\nd5166e44-3c74-402f-a73c-fdf64ab1f3e8\nd95107bd-cc1e-4dd7-a887-afd5c35565a3\n9ef8e567-5aa0-4574-991c-5e303e3c3238\ne9e712cd-8ff2-4381-8bce-153934ed6c6f\n61e3d025-97b3-40cb-9d2e-382c1be45701\n6cd6be4e-a532-473c-8d3f-0873f7a1cc17\n0cc8465e-cfec-44ce-8d96-ed4267b71695\na392c669-a954-4d8a-917c-00cbc0113ad3\n4d30cf09-0bb2-423b-adb8-bbccd644029e\nf7e6b92c-e62c-43d2-8ea0-067548a02e5a\n16b08e84-4d3c-45c4-ae11-ecbfb44ab8d2\n91e23250-ac7e-4dcf-bf43-41e1cda9225e\n73af10eb-ced7-460a-8bfe-3ae77fb0f0d0\n9b9f9be3-ae85-4cc2-9989-612d6613705f\n3a2836f3-c1d2-413b-8af0-59bffb015123\n64254403-8a96-48cc-9e45-4abdc4c16b0b\n95d7a9f7-6dc3-4998-a387-b18671edad4b\n9d048b42-6c10-403d-ac50-8eacc668fb45\n85cbb17e-8602-41ea-af88-6198cabb432a\n0aecc27d-70da-4d81-895e-eb3c6a251d5b\n7c163915-d96c-4aba-8a8a-3931f27afa28\nabf844ba-fc3a-42a7-ad7e-2303984c7958\nb01a3adc-57b4-4dd4-b975-891c9a927efb\n04058281-77f1-4bdc-83d9-29cc59c46358\nb2ecb73b-821e-4b10-9ac4-315ac399d8e8\ncee61d43-8213-4179-9efa-d711d36248df\nec899533-181d-4e5b-8988-9a124dc0d043\nf6a36aa8-0175-489f-971e-3a166af14fab\nf8975f0e-1121-48ce-aa43-ab62d885fd59\ne6eb881c-eb7b-4961-9589-142540a402c5\nd66a561e-5ea6-4535-9961-543983105f1b\naf94f071-e7a9-40cc-9ee4-3c8711461481\nd54c97a0-b684-4469-b29c-cb96e1627ed0\n212cc849-740d-4e5a-bf3e-585a0bf904b7\n982acc9d-9eb8-4c3d-a2c1-97585e8a1243\n739b9730-45fc-4b10-b862-8b4c6af465b6\nc08bc71e-c84f-4fba-8c19-dc28b9bb515e\n654d8abd-c667-44e6-8d47-f2348edfc7f1\n5b17d30b-27f6-4727-8f88-c2342e4ffc64\n29cf5ac1-6fb0-4e24-a48f-efdd65c1492c\nbe74a8e0-e610-490d-ba84-ec2c34878018\ndc3f141d-52df-4634-be35-c5ddad2843c8\nc361b1b5-a2ce-4b8f-b2da-8ed37b90900d\nb82b8e6c-6b7c-44bc-b7b9-cf2027126196\nf9be0fe0-79c5-4029-b7e4-eaff6ac201f8\nc0667b5a-9559-487e-b421-2d55e88c1ae9\nce1a2637-6cca-4d16-98ad-ea72cf70fc54\n70d5b964-7bd1-44c9-8275-19744e16d2a5\n50847e3c-17ca-41ce-a308-9e472b6c39a0\n2c879c8a-1872-44d5-98f9-7c27271db988\n6e6a169f-d30d-45a5-abde-390ea77b4960\nbcc18248-4a36-4a26-b375-792983fe4d31\n472735ec-2658-497b-ac26-fa0d7c39c4fd\n780ab9a1-b6fa-4e15-acf0-2af3414c4e34\nb9dbc6e4-4acb-4389-a9c8-0072dbdc87ea\nb5ecf6f6-f9f1-4ae7-9e35-049e552f5226\nc750aa05-d61b-4fed-9920-2ae580bd2ccd\n8c5e3415-9049-4a2b-ac24-215e8ef2f48b\na20ab1fe-bd74-413e-9692-a0848b660203\n752ea987-ddff-450b-9dbb-561d2ce9f21c\n05017de0-8a4e-4f2f-9663-5b610856f8b5\n7c72f863-067c-479f-b736-95f5fc7051a4\n4d44f3ae-fdc3-4e16-b927-074d91586246\n012c42e8-6cd8-467a-b528-f7ec6603e6ce\n01e1ee3d-d3d5-4e59-8b53-c64451103c18\n5fcabf2f-2ca1-4dc0-a7f3-9024af452d38\nae009185-6c49-4b3d-ad33-7b02babf667e\nb0d6016f-a059-42fd-951a-bd021ce7f99f\n8f959793-1018-4b88-bb53-20b8881836ce\n3701871f-f0eb-4680-a957-5da503f0bb74\nd4c04e95-7f1b-4c32-87b1-c97ed80c312a\n007f42ed-2a44-46a1-83b7-076499297cc4\n4857ed97-f145-4e87-8e6d-9cd3ddfd8916\n46f07c46-8176-4c42-aa0d-3c45f85b5383\nd086b067-8ab4-48fd-a579-4e769a95d42a\n6d285345-489a-42da-97e3-d01fadf0cf73\n2b40cb8a-4bb1-4733-b191-93d17a95508a\nc4867455-6f41-4fce-9550-0f9bb2f0c7b1\n04458dc3-28f9-474b-888d-bc3fbca0d286\nb70eee24-b0cd-43c7-ad9d-ab0339b66ea6\n979ded14-8438-4a27-a3d8-3e66f9bfef3a\n623d312f-273d-480f-a20a-be36a01bbb0a\n1a319238-c979-4044-b848-c8665f48b49f\n7272332f-c3fe-4d8b-b382-750119bf9986\n7b0bcbe1-a099-49ae-bcd9-30d1a8d965f7\nde161c7a-789c-4bbd-a0d1-229722849d18\n5bc63833-f750-4132-8991-342200950513\nae29530e-e8c2-4ba2-9cab-41def240bbd7\na9f74b3d-5e65-4063-aeb8-033f380051cb\ne3cfb7b3-b4d1-4006-b094-1b4750328ca7\ne9ce44d9-e7b1-40a8-bdda-57bc557bb9af\n790f3d9d-79b7-41bd-a06d-fb37dfdcebc3\nf68e7514-9d12-4a44-8464-7729c3213bff\ne2e18189-7e51-49f1-9a0d-0eac9e441d96\n6f2cc956-0b2e-4d53-ba14-3c7898552874\n66b2b592-2603-4b39-b460-2b8788993249\n927b76ab-7f3c-4019-b954-8dff1e7df179\n5461d834-993b-4ae0-847e-2b0adc03cd8a\n95c95c99-1aea-4ebc-9c9b-cc2892e8ac3e\n112ea9d2-e338-445e-a805-dd3bcb933c56\n608f568a-0622-41ec-b7a6-842f9c2d2ec1\n1a7ecc4b-0a59-4bc4-a52c-a095b0256172\n53dcec90-427f-4664-96ad-0dcef6efc399\n0c598b12-3db6-452b-bd7b-ccd7ec0b7db5\nb337b5fb-b605-4cdd-9a42-846463446bde\n0e6ef321-7b3f-40ce-a674-d34237e9b63e\nfcecc7ae-22a7-4ddb-a531-7dd77cf986b4\n2b2e2ee7-c293-4e2b-ad98-cee517d430b9\nfde37c37-cd63-4fc9-82dd-7a3c7bae9e96\n70377f2a-e8d8-4cdd-9d46-1b10096cdec4\n82dc13ce-4b4c-4170-b8c7-56527300643c\n18a3d075-fed3-45fb-a7bc-36356e794743\n7d73ed87-311b-4ab7-b8db-242010eefdf0\n88e2f742-922c-49d2-94bc-6247f3b40f90\n867be0c6-e5c4-48f5-98d2-5145dc777b1b\ne657f3a2-79fb-400b-ab94-f19fe6744fe4\n01ee155a-5ccf-4606-acbb-f54dfff21d53\nd8df3029-9bef-4fbc-afa4-994153d2f114\n59c41147-895e-465a-9717-36cd8b80e213\n8b70a75d-2b82-48f7-aae4-9c5665439fa5\n04113d30-dbf4-4abb-84b0-8dd756043e1a\n63e524ef-4dd4-4ede-911d-c5a9d18ce6cf\n5d85422c-81df-43b3-9a38-bf8ba6d4825f\n1c296560-59d2-40b5-813f-920b5a5f36ae\nf998d842-d1a7-4770-8f44-435bbcac64c8\nf5bb13ab-1956-4143-bc5f-8c9c2e65f93f\n8d592024-b46d-4b26-a680-b72ac896f8df\ne751b689-afee-465d-831e-f3b5ee611229\ndff7f65f-ea14-43c3-a3a4-cf93c69af6ae\n382b0384-c6b2-4248-95e6-993f27eace0e\nc2b92bbc-c451-4ab5-a1e2-7f5e1994e84f\n124c368a-ec6d-4c41-8dc7-6fef735ca5fc\n8f4369e3-da2a-46bf-b8ea-f83c36f44b0a\n348e6ed0-c26d-4339-92ef-9defcb121612\n035bfeb3-9474-49f9-a0f8-115fdff87ecb\na9462422-a9b8-4f9b-8233-67e4db28d39b\n255ea201-6cb4-4e94-8423-b3833a1be37e\n95e3f46c-32b2-462a-977f-f21fd95bd05e\n9c43e788-54db-471b-b488-fa0974a3471d\nbee7ab26-99dd-408b-98ff-a04db0a79e68\nde325019-9ac8-4a6b-bdce-bd0bfdbb3a29\n89409807-c0e2-403a-86e4-129cf7effece\n5d370a84-0ff1-42d2-bf5d-206304815d9f\n7e9b1cc5-e7b1-45cf-87ea-52d61c9bf492\ncd4ca0ba-d115-4e54-a0ab-cf613427a503\nb0bccfce-bbac-4197-90dd-6a90c55a586e\n8b44f685-d4ef-4508-84cc-8cffd6da0b9d\n4b7f7120-5ecb-403a-a47d-fd6284cff72b\n99f8c976-1dec-44ee-9e6e-875651ecb565\n28aabde6-c0b4-42c1-a1c3-745dd576989c\n84ec2407-0a3c-40b4-b202-43a0c031243f\nfd1ec826-b302-4189-a63b-d0543c440cdf\nff4ee482-2262-497c-9189-84d34a112c1b\n2ebbcb32-ad82-4b09-bd9c-ab150df34212\ndca4b77d-f4a4-45de-a3a1-f3aac6fe7a31\n5d2bed74-05af-4a4c-96b9-9e8638aa2c25\ncef48ac8-7c4a-4e7d-8bc3-ad210698cc4a\ne790880c-a6c6-4505-9307-9ba568678e06\n3c4f313f-f3a4-4cb2-860e-a9578334f12f\nc3f81354-2fd1-4ca9-8ecc-ed09f3cb3975\n709ea612-c305-4dbd-be83-488d46e44401\n4b047583-5012-4b30-9148-d99577616fb7\na4d6a8ff-ceb8-40c5-aefc-5c753554b41b\n05f270f9-8050-4b33-baf7-43035ffc24ad\nf5b27d09-b371-4cd9-9b8a-d26afab85f9d\naf5880a2-c578-4911-ba1a-6e675fafb53b\na76a031b-c24a-472c-ba41-1083c5237b45\n3158940a-866b-48ed-815f-2c3e6585a737\n7aa03d67-4a38-4607-beb6-c1eb124392e3\n40668327-e2b8-433a-9396-4eb02b55e634\n668d65e7-9514-4d9b-aafd-6060c138f4b1\nad58837e-ff2a-46ae-ab75-a6f4f16d95fb\n0570376e-e646-43ca-8e1c-d49434274132\nc071f58c-885a-41b9-a29f-0e9f262969e7\n77155e5d-6ce8-477c-b5c6-617b6f2ebe68\n56ddefa6-adf0-4b55-99b8-c4d632614205\n853f9c97-a995-4675-8687-dfa9c77760d5\nb22e5e47-c850-4d48-886a-6452c7ea513a\na04e43a8-9fcd-4358-bc19-e112759c16e9\na55ad511-b56f-4cba-a125-2694643cf882\n6abe907f-3f41-4d42-a005-752a5c3238a6\nc6642cc4-06ae-480d-99a6-d7d7dcbd3997\n3a903091-cd5a-440d-b903-946f4c5b29eb\n69729ee4-02bd-4dc1-9ecc-127495538414\n5abbf7b2-d59a-40fb-b074-e15074fe1fc4\n2889f86f-c439-4e27-ae57-a7e65b7343b0\n9314be91-6ff7-4426-9f7b-b92862e7086a\n48274d94-f85a-41c4-bfd3-c66750c8dc81\n9a4b9a35-e911-44bc-964c-e3463d4c122a\na1f1d8a6-a7c2-479a-82e1-c9fc2c66a65f\nff1351a4-43bd-43ce-96bd-c8e3149fbc85\nc4c213d8-ca97-42e0-8f7d-f421c39eedb0\n02dc637d-5eda-469b-86a2-fceaa96c74d7\nc39f8593-830c-4f40-a06b-8fb16976cdc5\n8e20e4b3-6aad-448d-80b2-8b3b472b2799\n11f58bb6-7165-49d2-a581-d1d4a7e880f2\nbc6408d5-6aac-4ce6-a556-41520ac2b933\nc28a2d64-d87b-41e6-85f5-94642dd193e7\nfa8e0eeb-b840-4062-8025-670d59617226\n992ba501-3304-4097-a870-e94c5d2cd432\na46749ea-8e48-4a60-90d2-7019bb8f8afe\n29f8c15d-87ee-4673-acda-9a81c92de6f5\n0214d07a-6c9b-4b1f-82a2-57af10d10baa\nf2fac046-0215-4925-acdc-71f3b51a3eb1\n4ad83e90-080d-4e03-b374-42360d814f52\nedf1ab62-847e-464e-8f48-5f39346f3248\n1b94c874-9238-406f-adbc-7deedb0797ee\n72c5c6b3-01d6-4b26-a896-d142775971da\nfd6aac42-f7b2-485b-8552-df4b968202b3\n9c0fa3aa-d4e6-4302-b42b-9319ea0360b9\n022bdac4-d13b-4279-a31a-826cf19fae67\ne1db9c08-f1fb-4cd2-8b04-e3481104bb79\na170b7e3-9353-43d1-bedc-7787e9d15eed\n02852356-0e23-4d9c-9ea8-e65cc7c222d6\n31183595-df74-4165-ab9f-53c3615ebdf4\n7ceba45c-8ea0-400a-a0ad-390eb080746f\nfe8a92fb-9740-4dd7-9909-a54d9205df00\ne55de67a-79e5-43cc-9808-b7dcebe9d0df\n216e9a14-ea44-4dd2-9ac1-af6ec6f54573\n4b064efb-f627-4553-8a3f-565f3d43dcfd\nff26bacc-f8c3-43a7-a2ab-ae0b68868c7a\n69be19d0-4a4b-432b-9209-bcd83673cbc4\n3e5930fd-b762-49b4-89a6-bc5ccf5642be\nfd0d97e6-0c6f-42b5-a81d-209f550a8009\n0ab30c2e-5779-4483-a8f0-ee73996f41b2\nf68d5c45-00ff-49ce-b970-18324d51618d\n4ac41536-ee97-46fe-a8d8-229ec841e13d\n9efaf3ab-c580-4537-84d5-8fbe66971894\nb621a124-95c4-410f-8617-e5a60de087eb\nfa38de8b-e8b5-4f1b-b4d2-38234905b302\n4627917c-7bfe-47b6-88f2-30410c4fe3dc\ne5163baf-594e-4e13-962e-33085b8849e5\n24e5203a-87c0-45bc-b8ad-bc515cb7c23e\n1d56411b-4e39-4357-948e-95dffdc1fa22\n3bfa3868-bb22-4a73-a8e8-4cdae40cf5e6\nc243c292-0b7a-4778-8a84-20d658c48720\ne9537c49-9bf4-4e60-9bcf-1cd19dfc0e4f\n0aff2f45-a6ac-48f9-aa7b-c820d7c5b2ee\n265d66d9-58e4-4abf-9fa7-67e52cf631c2\nb9f407c2-b112-4b23-bb74-6d1b39f0960d\n88b9069b-af20-4ee8-a7d6-a3d83fb7f0d7\n08557893-f8a8-4cfc-9865-5f9163ba9428\nbb8d4227-26d6-4f77-bd98-ae724ebecb5a\n41584406-d439-4b41-8dc8-7d32fcd9f9f5\n0ba5f5ca-c407-4828-8345-56c5d9774a36\n8aa4946d-5d7d-4607-a79b-935f490d4aaa\n02aea879-4be1-419b-924a-1902cf368530\ncfba2b2a-d155-4420-86f2-a3b11cbd41d9\nf1a2f6f9-cb8f-4ced-a773-68078863eced\na12e8d91-8a4b-48df-8770-4593522c4777\n10b788ac-f253-4537-98bc-a027f2715a4b\n24a33e72-0c65-4837-9144-2a2ce82f8890\nbe70d914-bea4-4582-84f1-bb258fe7788e\n248c792e-fb2c-475b-9281-01d888079568\n7a2ccb4e-e818-43a2-9723-e56c2cba1bff\n1ee4f2b2-1a39-4125-a784-03b07813a858\n6b437666-8d7f-45c3-b944-59f37265c4ac\n5f6bedb9-9abc-4755-9edf-202fe7883784\n58b14863-266b-4942-9939-75e7891f0e59\n314d8ca0-b012-4ff0-85e9-d9f5c2570e91\nde448e27-d13c-499c-a6cd-d8c695dfb569\n17a1371e-d508-4408-91db-2045038fd635\n026cd6c8-f19a-4d85-b380-d442e2e3771d\n03661b2b-3661-49f0-95cd-25eab15624c8\nd07b508c-9e2c-42e6-83f0-f48520a0dcf7\na01285db-d9aa-4a1a-8662-8a0bacb02ede\ne87d6f24-936f-40ff-b6b2-a719c6b36572\n8ab7039c-dd12-437e-98f5-ee3d241bbc75\ne441daff-9f6e-4014-a481-8fb49e762f85\n02dd6b88-24c8-4ed4-b39b-29e56c55b356\nbdece5e5-21dd-4935-a461-da526da9baf7\n568e29db-57f8-4caa-8214-3978e05a4bce\n7318a309-98bf-49a7-a137-87d7fcf822c0\nf3791feb-d4f6-41fb-bf1d-753f8f2ad1d0\n5c59f4db-2344-4cd6-9dfa-ac934617641b\n1d8566f6-1224-4b79-bb66-12ba73ca4c55\na8a4e4b6-6f5b-4ecc-8e47-b05c3431223f\na5c83457-cf69-47ea-86a2-8e81e99ff435\n4f5cc665-97e8-4efd-bc2f-7827ff864366\ne253576b-ef18-40a1-ab00-8f64c36ae034\n9d7a2f5e-8651-43c6-81ca-b4613d1bd08b\nd490e9c7-f8d7-46c0-b9b1-4d011ace3487\n31d3e03e-1fdd-4fac-bd07-e286a5b612cf\n6339aa7f-e6f6-4a2d-a636-c07aff4fc792\n63f03a01-c9ad-4cfd-8162-f977af6e6b17\n0bcad285-acc2-4d6f-9d30-88059f76c821\n1080e4b2-dec6-4833-a505-ffb20a024817\n2a54d8f6-daa5-48ae-8684-d6afed5bdda3\n26988785-aa65-425e-988e-87e0c35d6f4a\n7ac5d10a-d7ab-4c1f-9341-026a6c84bcbe\n756532f0-b75c-48a1-bfec-a632184bb356\n6b3167d5-1443-4c68-8ca0-bf185a7d1bc4\n1d9e95e4-03a1-4a00-b58d-7c22f5a57363\n5d88b359-b1d1-470a-a73a-5b456d776961\na87502c3-1b77-4e51-81bb-cd3353036acf\n9de4c1b6-3637-451e-a202-6e8a1529b633\n325ffa26-d1df-4bbd-9c57-9e33588e2c1b\nd1c5ec7b-083c-40c8-949a-d51167d28d77\n26523e16-4e04-42e5-89bd-ba84250a75ce\n2198ed32-e8ca-452c-b805-005099afa1ec\n537c209e-95ee-4a56-a246-c298b2967721\n34f066d7-063a-4455-867d-50f7f13f6c19\n4b33a8d6-4faf-4e9c-a3e9-139b06c2956b\n1f4e1ac7-f30d-413b-84ea-638e82111360\n3444dd6c-cf60-4947-a968-c4a600bddeab\n18984eed-e95f-4d57-81db-c04f9e78081a\ne6c4be0f-4d7a-4f6e-b0db-94f1c24d8d0f\n3662ea46-445a-4390-a839-63e28282c32f\ncb0423ff-ff66-4b7d-a20c-adc89a17f0e9\ndc368dc1-1d27-4de6-90b2-436760a400f2\nf5d35b2d-3735-433f-8c7e-314c4e464de5\n9d0efc6e-0372-486b-876d-f506da950d02\nbc3833a6-864d-488c-831b-38646b48651c\n995c546b-dcaa-46b2-a4e6-982b9a01a564\n4bee168a-126e-44be-8cab-b63771b2627e\n78b7c367-b487-4db5-a224-0433ac79e60c\n632cb3b8-cd55-4f20-9cf1-13690d99ec8e\n70a558a6-4187-4c10-9bd6-05ce12ebc052\n04a73c1e-338b-4796-a09a-1b62c71ed480\n42441603-198e-475f-9b89-c6d23241429d\naf44fcdb-80e4-462e-91b2-2760ef93f2e9\ne65342ec-3426-49af-98e4-cfa8ede908d9\nb890739a-305d-40cf-ac58-75a620f26ca4\nf46a7e16-e3ec-42b8-b3d4-01cd8e61a812\n8b8f57f0-86f5-43db-a54d-dfa5f74d81df\n5f309ab1-c9cd-40b8-acfa-53255871c540\nc27faa4e-837c-4b33-8049-da490d5c2d85\nbc784f35-ca0b-48a7-bc31-3e6ed9899e14\nee52e927-1109-486d-a71b-5337e08b0b31\n5be64a62-760d-4eb9-9be7-aa14e0214539\n39f6e912-b6a1-43ff-a4e9-488677fc26ee\n575f20c4-1a58-49d6-a4b6-aed72cfc2c67\n7eb27266-2fa2-44b5-b5cc-5c8ccbc154f2\n6feacc6b-68af-4185-aecc-c2d7cbbd51b1\n3766b4aa-1845-4b09-919c-3575e6a66262\n26872313-bf8b-43e2-82dc-2a55ca1af028\nb1db5246-ba11-49b5-a44a-3470d415524e\n3b8b6c70-07b0-4d8e-9bd3-a78a26a871cf\ne0e029ed-ff62-432a-8a4c-d25dffa10f17\n74e45179-6729-4dc0-ad3d-84e3872fc7fa\n6a636bb4-20a4-4810-ac98-7f48b9949aa0\n173da4ab-d738-4726-b41c-732e82daafda\ncb2f174d-062a-410c-be33-d4d9ea4f1ffb\n208ee88c-c379-42ab-9ab4-7f97709043ce\n71e29d78-5647-4f7f-a6ea-981303bb04b9\ned3a343e-b96a-40cb-86ef-a243c8644a92\n392fa731-ee48-49f2-a461-937a9fe39f91\nf5fae95a-4375-4163-91cb-eab799e1fac1\n7c8a1d36-da89-4589-b8c2-bb49a902eef1\nd4769be0-1ebf-4e64-a6d5-2f37b1754048\nd5bed4b9-d01f-4f16-8153-afc44c866391\n45326a22-1212-4911-aaac-176c5db93b42\nb3647d50-341a-4c56-a39a-ebd2577ab9ff\n4ecb5dd2-304d-43cf-a5cd-c82330f622c4\nd19a3871-2091-476f-876f-600539a1941b\n4606aa8e-23f4-4be3-8aac-b7cbf148adfc\n810d7383-76b9-4e77-aa0f-f2b2bf2cddbd\n28d5fd50-72bf-4295-908f-7dc3f65ea99f\n5f5800c1-ad17-4160-9ea3-d8cafcf7f76d\n8c4c1a79-ecc5-40fc-8508-582fb80f8b64\nb58f25e6-bd22-4bf0-abbb-25b9bd2c5925\n92b6d409-0b17-4083-a558-180be3313298\n2ff7c99c-d534-48a6-af3d-fcde3b78899d\n91cfa46d-91fc-4bea-a66a-67187f943c2b\n3dc73e64-9db4-4ef1-aad5-8bd9d3ff3601\n8d61f5f5-faac-4e0c-bfa6-bea7b97393b2\n51ef8273-73cf-481f-87da-5ff62a8b0667\n2c6fbc47-8055-4fc7-9b58-2f96284dc949\nc330522b-c0d7-4762-8697-002aa17eb75c\n310fb97f-f07d-4f7d-bc71-0c0be63bc9be\ne27dd737-bb6a-4dba-9c54-d7447a8bfd7e\n9ab9da06-040f-4044-8651-955c1c26be61\nff16cd67-4520-4c6d-941e-ecfbd398b77b\nf53255ef-6bee-4b6c-8550-e3d2efcad798\n41e09e44-2ef1-4e44-97d6-d7d2caa041a7\nf097f74f-a887-4504-beb9-ec949f899c03\n6e0fa3af-4893-4e0f-aa8b-768a6357cd1b\nd0aa7689-189a-4c5a-8f17-634b07dd35c9\n0eccbc03-09c7-4719-ab15-662c03f15af2\n6a1e0d2f-1758-4055-8911-720de73deef2\n6cd53a2d-c8dd-4343-9d1a-765240fced1c\n7a68e425-45e1-4d20-a5ba-9914cfd58377\na58e2c09-538b-476e-bed6-265c4848b81e\nd9386431-0e37-4ee0-b259-eafc80d61d7c\n0470b280-fee0-4d84-82f8-253591bd8262\n9f357311-2902-42e7-917b-2f3b5d2bd721\nada896bc-000f-46e3-95a1-eb40154bca21\n5c51a0b0-b35d-4f92-b809-14cbf5735ece\n237b7a61-1c3c-4c4d-844b-a2e78ffc1ba9\n34991f85-5795-43c8-8a08-23c33eea8749\nb7e4df25-7123-4a4a-94f7-0f0025241980\nc8b9d3f9-efab-4ff3-a95a-3841d05ccce5\n5d720146-8b97-4a66-81b5-db0169ece14c\n17f9cd2d-4e7d-41eb-b89a-b760341a4185\na6c36ae3-f246-4df0-92f2-8fc4c99f0cf0\n8bde6f43-4107-4f7c-9e13-e3d7c9dde0fb\n0d4cf80a-72c1-42cc-9c93-794bafb90de6\n76132dba-d2ae-4561-9277-e2dab5e6cd6b\nc37781fc-16f2-430f-8319-a104d29a2cea\n89aa84db-2876-4ef8-9804-13c0baaa7fb0\n3abe729c-38aa-4b25-89de-c89f5f032aff\nb4b3f1b9-5ade-4ad0-85a7-2273cdf6c421\naac5ac1c-7f86-4ecc-a9b1-c8579e96a032\n96aaed6b-93a9-4cc2-8908-11a6db1e182a\n85bc0ce1-9a52-476e-99e8-c82a977b135d\n13cf7855-6997-44dc-bcb4-40be9f56bd13\n9022a6d2-7ce4-4e81-9b5b-94719fbf6e90\n3b67ba57-27de-4349-8593-2ec88a972be7\n028c2110-52a6-4d73-b2fe-3e3a1e26a234\n6bc7ef26-5d11-4ad4-a2e0-c3eb61583098\n98d1b8f6-ee11-4dbd-b746-ab9074238b5e\naf8d51e1-7219-4a66-8494-bf33418e90ca\ncc4bcd5b-a222-45fc-8b64-b98281ce8fe8\n7f12e9ab-c4a5-4b36-abe2-1150c37b0f78\n8481809a-4bd7-477f-82c1-cef236d39567\na563b58a-3227-4b2b-8474-f4c68711ede1\nb8f8e09b-f998-4b7b-8ec7-ac2f65ffbc13\n345225c2-2284-4628-a502-f3667c9fcdb7\ncbc20800-ddcb-4dce-8bef-f36330028bb2\na861eef9-07a5-4fb3-93aa-96d3bb50e41b\n76de8c4f-5f4d-48a9-b1d1-ee7207266242\n6f60bdb4-bd79-414a-b385-c116e92e3d57\n59fa35e7-2929-4fb6-ae4d-7690e355ca38\n19e01767-9626-4b0d-a6c4-43b29e2370a1\nf5c58662-2d1b-42a3-af56-d209ee977329\n8c47ad58-aab0-44c3-907e-9b88961c3746\n136159ea-590a-4fdd-94bd-a647db7ce9a6\n04d541a5-6772-41a3-92a3-05a9f0ff0f2a\n0505f6de-6cad-456f-bed2-0eb6d2acfdf5\n37808250-288a-4025-816a-454866ebaf59\nfcd4fa07-bc81-4d7a-acec-6668da4c2f52\n813b4e3f-efc1-46cd-b818-4c17ff856f3b\ne6d1fd77-1f33-4724-a81f-7bce6a2dbc0e\n6d2def08-5591-4552-a648-71fae21cca49\nf0dd509a-378e-44ba-865c-96032209b6f2\nf5f05fc7-0b6b-4f2f-b92c-54e54b6c869c\ndb0a2e35-ecc2-4593-be89-b770bea161f0\n1d0848ec-1836-4fd4-afde-cbacf438f960\n41630119-a967-4783-9216-ec27818060d2\ne1fc8605-5c36-43f3-b3c8-00a07bf4ae58\n21e425c3-ed67-44a8-99e3-a724df721b69\nc267e71e-705b-47d6-942e-349db307854a\n60e11183-ba4a-4983-ac88-92a6c4d46443\n780c35c3-d15a-4fac-aa4e-2de164589bb9\nd9bfcd46-c575-4f89-86e6-cc88569a3308\n59e8fc6c-4f74-4de5-8105-5e7f534a3481\nf01249af-11fd-4c30-acbc-36b30ffeeb25\n605e9418-85c4-44a4-9d7b-04af5f05cf7e\n0f533893-2dac-4398-a22b-ef8ed5aa1c08\n52131a06-bd8f-4246-81ca-5bba7e4d554c\ndea7467f-60af-476f-a6c7-8e85d6c39367\n6790058c-bf70-41e1-9bb7-c5bd6ff5b60b\nd2309456-b000-4796-aee1-882dc49f9a4d\n2218c518-6807-421c-ae58-236a2ae904c5\n600c05cf-c64b-498d-8b7f-9ef548f24564\ne9d3af8c-74e9-4499-9982-a022583f9466\n8477844f-7ca3-4292-be7f-4b963fe6dd3d\nceec7614-abbb-4a30-bce7-31486111408c\n22751000-ab07-4956-858f-a71447bc3dd9\nc30f4227-4e1e-4b9e-a3fe-16a864e9543f\n5bf49457-4a8e-4908-8f19-81d9b568fb26\n9904e32f-81c5-4e70-9abe-3b2844a92b0a\n6e62463a-3673-43d1-a2b1-beb768fd8234\n0611d9ff-67af-49a7-8027-c71d96463c93\nc7085db2-7d2e-41c2-b872-d610c8f93e9d\n7bff9f73-0cf6-4d6a-a3e9-de574775ff7e\nf282cdfc-63f2-42d1-b436-67536807596f\n059a43c0-c499-4619-8ca6-a0b9c3ecef52\n509f063e-5205-4757-983b-34bfaed9d1fe\n68cc1eaa-a325-4ed2-b48f-2595c3fa57b6\nbbf20d45-a137-4f90-b1f0-fa59ee1a0d5d\n16968200-8530-4906-8b48-9a2f7a3e48e8\nf4e9587a-b0fd-40be-a96f-0297cd2b2c0e\ne56a25f0-ed5f-4ff2-8967-182b8bbd391b\nb580beae-de9d-426c-a664-ba15932c8e12\n26a8a370-47e8-4922-9199-ba0cda0bd6ea\n0088720c-731d-45e3-98b4-0c99c80d840c\nc09b2415-71c2-441e-a6e0-17ec08c2f7be\n8e4aeceb-7fc5-47b1-865b-4e5ee22be3eb\naadedd73-f189-4428-8239-ba77a6c2e132\n52cd7f5e-6011-44a1-8afd-eca968c5164e\nabc6aadf-bb69-47dd-861d-ba7ffff8d4fa\nfbe587a5-911e-4eb4-bee9-704710e2dc8c\n47d688ea-0d46-45a6-a4af-fd944b359bba\nca4ad4fb-4a5d-4c31-8bd0-706034d1f8af\naebd376b-a1b3-499c-bc87-8999e84c8572\nf272d2bb-f762-49a5-871c-9efa22e89c0b\n60777d72-b178-4a35-ab59-02851231e957\nb9835089-6448-4bf1-92b6-6d64374aad83\n7f5e37a2-21f4-42c1-8d0e-ef0d0b39382c\n475ee09a-8911-43a2-b52f-821a89fba504\n9351dcfd-a1d7-4bc6-bdb4-371fddb6792d\nd865be9c-c98a-47a9-bdd4-48c132c8700d\n73b66d48-2593-44b7-abee-d005b0952246\na772c0eb-d407-4b94-a652-23f50962c831\na313a891-2f47-40a8-a53d-4cf018696705\nb68038ad-c976-4c52-aad1-ac7fb7dd321c\n60e612b4-587b-4559-b721-cd12f7e9e05c\n24c72950-7e4b-4a9e-b170-f010822d00a9\n89ed900b-3091-40ab-9d14-a5eeb1866a35\ne28eb8a0-4f0a-4940-b690-6f8a0a4bbb8b\n548ded43-47a9-4fac-875a-4f43ae35023d\ne52d3a60-a038-448f-bb13-98bb9cc677bc\n3349b4a5-7234-40b8-9fef-f49573348a5e\n90f6b97c-d01a-4890-aa8f-616d78fd78ad\n3a86a86e-ad13-44e6-b8c1-732f827cbad9\n8fff7c2a-fad7-4ee0-92eb-94eae5c8f132\n3b09f23c-3bc1-44ee-992c-1f8d6895a400\n17975ffd-5ee6-4b05-896a-0eb35b635444\nff0e4023-5fc2-43e6-abe2-a03904ef320b\n795d6368-c9f2-4b2c-863c-94130a549661\n45950af2-9017-41ff-8e0a-62c8bb8c82d4\nbd0398de-6ff3-4ff0-a672-e5e1e760e818\n45190248-74c4-4da7-9b2d-7207d56085d2\n45000efd-adab-4dd8-b539-01678c409294\n74e8c8d5-dce0-4fc7-87e4-2ce99ac45078\n5ce60bef-9580-43b8-b43c-76712b78d5df\n4e268b12-066b-4ed5-9c9b-b03bfc7a5f52\n49dd236d-b423-4c68-a4c7-a452681394fa\nd5285b74-80a2-4f84-8cad-e0cbbbebe21a\n1b37a6f4-f05c-4f5f-b3f1-d21bc53bb294\n023f7e83-c84e-488f-9700-8244a9a7560c\ncc0273bc-4cf3-4c73-8173-13e4d19710bd\n1def6de9-028f-4347-bab9-849dd98796c0\n49a9e93a-54d7-4b79-af44-1fde025f772a\n08d8d793-e33e-4497-a1fa-c234435d28d0\n64c970a4-6360-41eb-b5a2-2810b319f8b9\n177a55d6-d200-45ac-bbc7-3dd94d580e7d\n1de48d8f-f96a-4c4e-aec5-0165713c21c4\ne5235b74-327c-4a6d-8d5b-1eec7270d928\nac27769e-ba14-41cb-a578-1b378d219c46\nea5785ad-4495-4daa-b0c1-4d2f068dac53\n4fd11792-ab03-4fad-bab6-ce9582b61692\n940e5295-3306-404d-8c30-b03896b7d367\n8ebbd6c7-b7f5-447d-9e7d-a1186ffd5d56\n975f4e14-d280-4746-a37b-19047a80d551\n907bf633-7d8b-44c0-a4d0-1c4c754a8329\n01f13576-cfdf-4d57-ae7a-bb3db9513ea7\n8824ab6f-987a-443d-bf8f-6c959608adc3\n21df04a4-b2ee-4d27-81b7-84b59b1ac938\nda636929-06a5-4810-a6d3-fa8d45b02328\n888b6443-3fa1-4b56-8e26-30bf87c508f3\ndb27173d-427b-4c63-82a5-1885035dd3b6\ne14e4461-f522-4f90-a86d-3c3fbeabe9fa\n72394442-71a8-495d-8d48-caf9a94a3bdc\naebd90fd-8c5c-41f2-af7d-64bf703488e8\n0a735356-d99c-4fff-9289-159ef6476d97\n772b2292-5ccb-4df3-9347-f010505e1f69\n906d96a1-573f-48eb-89a3-831b18552212\na01b3a18-5eaa-437f-aded-e2c89deb5552\n4b8f8e3a-c157-4751-912b-b20e9621969c\n6a5bacd3-c559-46b1-a885-e531e6a29648\n357df06b-f513-43ae-9f54-47bbca0da586\nf8154193-0783-44e0-aa4a-4e67c06fa559\nfa68bd5a-c877-465a-bc87-11b6ceb26a75\na327c1b9-eec2-4748-82e7-2c788ec0bffc\n7ac3670d-ae67-4628-a04e-1ec84e01bc70\neb6b550c-16fa-42bd-8329-af7e298093a7\nbe2afe29-3a88-4307-a384-932b12f8bbc6\nd3d36830-8a52-42fd-9199-3927730e7929\n1b9de3be-ba19-4402-bd73-07ff4fb42ae6\nba2cd193-aa00-4380-891b-42ee5b461d78\n10a66f9a-ed02-43c0-ba15-134b0d715525\n0922b3aa-ecc1-41b5-bfd1-0044e6d581bd\n11431e5c-c421-47b8-a6d1-b5cd83525deb\n316cffd9-9270-438b-a160-1bbd7868aab2\nb0edb391-d7b0-43f2-b369-3f5433d34474\n3cc24397-5b50-4d90-9422-0346667e3210\neaffd9c9-ad5d-4993-a9a9-9ba5f5d61cee\n6ca09e7a-eba2-4b0b-b038-a0b23af1d7c2\n69e0a4ee-6ee9-43bb-bda6-15865a6b40b8\n6bd2e171-56b1-490f-a2ee-9424a3d5f48e\n0e1d57dc-b112-4cd5-898f-c1a67bcb9176\n9047c4e4-5104-4936-9e16-ce85c07e510c\nad715d3b-340d-48f5-8bb1-fe8ffb1db283\nf0f6b24f-70dc-4ccc-88d2-d92138fd9b30\n5e441471-57e3-4907-adca-1dd76db1fc74\n2dd6c27d-934d-42b8-b845-746ab9e27801\nba4b6207-6952-4291-8213-57c58074fb29\nb226428f-8e21-4979-aa06-a4c4cf34cc1f\n6d14f7b6-3ff3-4ed5-af6a-5b91527a3680\nadfc28ac-4835-45ad-889e-1691ed8be57b\nc0c264df-0cd0-487c-a4f1-5c107d2bcd7f\nce9009a7-8000-48dd-bfb0-e03c8b733196\n45a55c4e-7d29-4f53-be9d-caf35c1affff\n2e9b1bbb-93f9-40de-b3f1-459906cdad12\nb346c4bd-7b18-4827-b018-48d28348b012\ndd364edf-bb55-4942-bbc0-a58fdbe8feb6\nfe2e6c5f-8f06-4412-8909-934eca95fb4f\n3da60b6b-59c0-4e83-b0ea-4a3a2d75d62b\nfca6ca87-2272-448f-be53-b3fa174e3d0f\n175dcf4a-8324-48c8-b490-e2fa77dd7816\n3db86a8c-1b7d-4ad1-ba60-753436276d7b\nc23eb826-94c3-4184-91a4-6f3df5a688cf\n1465b793-8131-4e2f-bbe7-793b5572bf7f\nd521d9fe-02ae-45f8-bc16-d41cd6120073\n1d1a615b-6a53-4a3c-a5e2-cd95a258db4b\n1dc22ed1-d36f-496b-aab8-4def6bb4facb\n5b9cfdf3-d3fb-4c4e-8f50-6babffe1d840\ncc1bef2a-8f49-48b9-9fa3-39957c7d0689\n8a878669-b5c6-428d-8d05-c8a771dceec3\n83340098-c5bd-425e-9d91-8140813620cd\nb9b1564a-b4f4-40c7-aedf-ea53e39a3d68\n653b0654-93b9-4583-95cf-5a7f0e8e0c2c\n8b9d894b-f5db-4dd6-be9f-0e1b995f7b25\n7292e509-5471-464b-91ba-421ce185f268\nf2a4740c-be2f-4780-bc16-044a8165b6e6\n3fabcfcd-fbe7-4d4b-a5f1-c7d4173c49a4\n098ee3ec-6718-4230-a56d-79eb68b11d95\nd7dea0bc-2c74-40c4-a9d8-181f077cf5bc\nefd45b12-11e1-4593-a85d-7c2104d05b75\na1c82777-99f4-4f83-a84e-4a3b34c045ec\n2c8e8183-00b4-4eb9-93c7-4da1ce93eed6\na9140a8e-5cda-44bd-a39b-0f992e1d050b\n8f05fe7f-062b-4af1-b02f-d6c750141f58\nd12ca600-9b77-43cd-a58f-920060881039\n74f107bc-c398-4ff4-92de-44435aef3058\nc317fd0f-ab28-43b5-bc1b-dd31fe1b9fc9\ne05006fc-b54c-4b1c-843c-4f62137c053b\nb6b0fbe6-b8ff-43a6-bc4f-59d4bb486eef\n15f70ea7-5d9e-480e-baaf-9bd7fe4598d9\ncb92670a-1c93-47fa-83ab-0eb03a573f13\n727c1568-87a6-4148-acf8-f90a417aba3d\nfaec30c2-a278-4daf-a587-454ce18cae6a\nff735f3f-8cab-4dfc-9a64-dce7a0e87050\n21ceedf0-a4e2-4b3f-903c-57d336e8f839\n274aa332-408d-4c6e-8fbf-f3228bd3623c\n3413b801-06a6-4e08-8061-f9dcae7ae493\ne1de9350-421f-45a9-9103-db826d0117fa\n7d25bb91-babd-470b-ae9b-18eec11f3dc1\n444d70b8-e036-481c-be37-c4a9bb39a25a\na1f33524-c864-4e44-b663-ce99c7a28e11\ne2dc2b21-bfb3-40f3-92a0-185d3fa379c7\nd70c46a6-3d5b-4462-bb01-2045da7e2e8b\n4f474869-c845-4d59-9303-7836a10f1c89\n942b6ed7-5785-4ffd-ad8a-4e1ad0675534\nd4ee4a59-c04d-4fb6-af44-54c51ba256ff\nc0fefa26-1e13-47b5-8385-999d3e4324d2\n1212f75d-e6e3-4478-a06e-e17fb2336c9d\n067c632e-85a4-4b2d-875a-ecdc9658b0e6\nc3c84b0b-b244-4813-8f0a-811d5e0507e1\ncd301802-5908-45dd-8208-85312a138147\n6b90c732-e3fa-47af-a875-650b36b33d82\n5485f239-913d-44d1-8803-a12acf5e0217\n2eb380d3-0461-4e42-bf77-a235b029a53a\ne6a5d4d4-2f3d-41da-a8cf-e78c71a3fdd6\nf311ae8f-5627-4114-9bb8-422051fc2b2c\n9f4e5756-b7e4-430b-b451-93f8ffade8c9\n61420b58-2c85-41fa-98b6-7a7e8bf7e507\n304c3683-f4be-4203-8eaa-3dce1de63486\nc8c4ad45-2456-4afd-9647-1ef5c8510155\n495a6980-3bcd-49ab-9187-c5a5859724f8\nd3038c93-f928-4ef0-b642-c18f23949bb0\n4e4f221e-a35b-4946-aba4-f983998fd955\n785de16b-1115-42b1-808d-e2908adcba0e\n1eb81f1c-b5bd-4073-9aaa-cd627624d328\ndad242ca-85ef-484c-bfe9-911e9ed03c7a\nfc19fbff-7297-4261-8f67-71d3d3f01f02\nab45c040-321a-42a6-a9ed-a86976bec37a\nb88bfd92-9259-4dcf-a3c0-201bdf63c675\nd935751c-6c90-4476-9a64-c92c51f108ee\nef815636-b03b-4cdb-bf6c-85fe76663e04\nd18d153b-f01e-4b33-ac3b-c830e8347757\n45070a5c-5330-4131-8c01-797e1150a9a9\nb305d5b0-eb79-4624-abbf-0be1b43d517d\nff209e22-dbb4-4904-8e80-714403bce57b\n49cb8d83-7199-4389-a363-6386b26d84a6\n9c54f2ca-4d48-4f6e-8456-baa6700d30fe\na9dbb933-944c-44bc-91a5-7a2015b1c629\n7ddd30d8-acca-4faa-b967-cfbb4edb92be\n0d64f4c3-f660-4f46-a2ab-d9e56e45e6b0\ne1e6d628-f20c-42bc-bc3f-07361a4506ec\n3e8730f5-df53-42e3-93e7-a960d5bfc6c4\n3d17f477-0db4-40db-b10b-5137ddb45c93\nd5a4900c-0ed8-4024-8b18-5fa76811edc2\n48aa7e2b-d7ef-4746-b691-49904e33278e\nce552de1-5b53-4a07-99a3-8eab114f9f4d\n2cd246b4-6051-43cd-ae56-c9ce463ce5ee\n640135ac-8a6a-4680-99d6-d2a489c24286\n4c5b3dca-7d08-473f-a918-6b77af155574\n9904c9d0-f6a6-4e5a-b22c-451a3bade9e9\n4320a08e-e1cd-4744-a03f-f159887c5e30\n2540f33f-e1b2-4db8-9804-510b9d5d75ff\nd5cba9b1-275d-4050-91da-9837eae43043\nfaf3d860-31d2-4aa9-9d49-b5d6d5ea0f66\n3b696854-ea80-45cd-8195-0b9de705cd75\n0ef297af-06f3-47dd-b378-f78b4cc1106b\n2a739418-c587-4819-9ee7-aa9d71b67c26\n7da3fa02-2634-46dc-bc8c-39a8d2609509\n11b63651-263d-4003-b630-55231a521acc\n02d37aab-7cc8-4209-8079-079a32118c17\nbf40e7c4-c6ef-4220-bfef-902f9ae95f15\n19baa21f-54ce-4fcc-9204-de6cd7892c85\n88449673-d968-4b74-993b-a4159ea97b53\nf4f0d920-7d4c-4138-9b30-41da9934829e\n6c87193f-522d-451d-8709-0f8e5cef2495\ndac8809b-3284-406e-9d59-2c6623ddd9f9\n107c3145-884e-4f24-933a-c3a108ccadc1\nb5b8650a-eac1-448d-9405-f85302b3a7db\nfdb5b848-f4ee-4711-857c-f6e6981d3a09\n1dc7deef-768a-4f1b-897d-c8dbaa3761b6\nab9ee6cf-c30d-4bc6-a567-c63d6c9b8c5a\nf8423958-f9ab-481a-a202-80232d06e50e\nee23e752-6d6e-41af-85a5-ba75939646da\n1b62d221-a8f8-48c0-8570-82ec058fc722\n6ba65b94-c455-4425-8fa4-79ac56a5374d\nb60356c6-198a-44e8-9118-0658c1ea5b2e\nc9516777-990d-4cd0-8dbc-b16097ddfcb8\nb52457fc-de5c-403d-9033-d91071c5a5aa\n124bf5d2-7e25-4f69-800d-2eb8218cac4c\nb78bd412-f518-4116-9dc1-feabe5cda308\ne1081352-cce6-4da5-a799-89368a146407\n451f3df4-41b2-40c6-b243-141fb89d745c\n754025c5-1d53-4613-9269-baaf453414b9\n175bbcfa-42ca-4e80-90ac-f79fe792dda3\n16f6330e-d642-4747-8d70-c1fc627d6e8a\n6d10bcfc-ca24-448e-8efa-ec32b24ed790\n578ba007-24b2-463d-8dc8-c4cf60445384\n173eb145-10f9-477c-b0f0-08e1af32f7e2\n280d3729-e267-468b-9229-1cf87ef05002\ndfce4c06-26fc-4459-b95b-9acbd3bec7dc\n678aad94-3112-408f-8ced-8264100b4b09\ne3d5f7a0-eebc-4860-9d2e-dc66fa81f0ea\n44557099-8b95-4856-9ea5-7956a37594a2\na41112e0-675f-4060-b70a-45345807126a\nedacc387-7e34-46a2-9004-10747fba65d9\n0b7e6187-09b3-4cbf-abcb-ae9e0abfb37b\nee5df352-a785-42cb-916c-f319dd027ea3\n87bd93a8-e383-46cc-9d85-7b2b5fc8af35\n1cbf5661-13f3-4183-8a50-61f02644bd03\ne70353b2-df0b-49d2-80c0-f956ee5d4be2\nc4bd03aa-d017-43de-97d6-9ab62675e79e\nfdc2e854-25d2-413a-94b1-05013a74664f\nc95ca026-5215-430a-9857-7d997c7f9353\n4de9439c-a58a-4778-b7ea-1d601f1d9dfb\naf8c78e1-c819-4504-888e-8515e04dbb9d\nfc3264fd-dc78-4032-9a66-d86e5ac882bc\n68113efa-97de-4683-8c8b-34ef1110cb18\nd4a8a16d-4993-4b66-b644-36ce7fd5b14e\n5777c0e8-63e5-43a4-aa81-8d1928812277\nc929c614-f104-49cf-b037-08bf972ebb6c\n5dac67a3-ac5b-48dd-bae1-13fc0140c158\n66f861bd-4615-4592-99e3-406a7e2ac518\nbfa54b3b-af73-4bea-821e-96b4b3f9c201\n6b9c0318-7b63-4d45-a302-4670a02c932e\n3ea1be75-28dd-40d1-9d51-983cc546971a\naca31144-b3de-4a8b-b9a5-aac4f840adc0\n04df0980-a0ba-4146-9aab-32c2e1ea855e\n54b8a0fe-25b1-4cc7-9cac-809396c0228f\n80416dae-b7ea-41ad-9ebc-90b9d3652bd6\n82a67f5f-3b27-4ba6-8979-92d8bba52dd9\n734c773e-47c9-4da8-bcb1-bdb4509275cb\n3de63dd7-d5d3-4ce1-b46c-06f407400226\na3f6c308-f6ee-4bc0-a839-321129bf57c9\n29ec2033-4db8-41ca-bf3c-6ac74200ec64\n055f600f-7ef3-4c44-b313-14f210cecdc6\n8bbe90cc-2bf2-4991-a907-5318b5c09d14\n6506f421-e47e-4b9b-be1d-8355bdf3b6d9\n9ba5b6be-2973-44cc-8dba-ba91b68c7ec1\nd3355746-3a3a-4a82-958f-0e967d917837\n470f7de5-0c23-45d3-b5a0-254ac99411b6\ncb486214-1b73-461a-8c42-51698e489a25\n0876ff60-badb-4e72-8d32-b0c97a8b4599\nea73e3d6-41f7-4236-addb-d4501163e573\nffde2c11-71ef-451e-b3bf-e8b6af161d83\nb064e487-70ac-40f1-8d43-af06073c1a26\nb437b409-34ce-4746-b3bf-e2d042f6f654\nbb1e5830-1058-4276-bf13-cc674a8e4303\n07632408-2369-4e8d-ae48-317606a1d481\n3a1d571b-3fe7-4b87-9659-f4a4af259d0a\n4ed6b314-7af2-4056-9bb8-a03e182c729f\n92978e53-f2b4-49e2-ba88-f1e87cc99e42\n54f89505-c6dc-4a89-aaf1-3f31bc573084\nd6031485-1241-4a71-9628-d87494dee829\n46a797ee-f47d-44a7-aa3c-2462386751c8\nf053ebb0-8f2f-4e39-8f85-6b028ee7b923\nf2f1e585-2a53-4ed0-9fd1-feeda35f21a3\nbc8f6e45-3d34-462d-bc4c-4510a23f8ccc\n4494e1b0-7b05-4526-bafc-2745f0c80dcc\nbfcfebde-9b65-4ca3-83f2-aac3c195c84f\nb42cc75d-ba0a-4edd-87c0-d22986dcdc36\n87237a15-4cc9-4a0a-a29b-38be3434ff08\n8e527904-7e26-4da1-9db6-f806b4a995f5\n0c8fc85b-586a-494d-8bef-ba3c7a9d3c83\nfc24819e-0b6f-495e-a1d4-9f98d077343a\n74114154-5813-47bc-9be0-f88570371568\n990e4433-8cc8-4750-b52e-ba481c20b3e5\n5ef25e27-6957-4ac2-8914-a5a9db8fa44b\n674df008-ec4d-4c04-a758-c231394be004\n799de1e1-8bee-4b56-9e59-31bc7b11caae\n7fed6b52-efe8-4903-83f3-e2ef3f30b668\nd8739878-da28-41e2-a15c-1571910bf44b\n9d8b9475-6e39-4f85-9ba4-cac3628467e9\n10bab76a-1cd2-4cd4-a49a-e790966ec265\ndb4ad603-501c-4e7a-8ded-d94266a09efb\n7cceda7d-0687-47e9-87fe-adbc723c3c4b\n2add256d-44dd-49d6-a307-f13bdb3a2542\n05589a99-e8fa-4189-9433-1e4174bbc045\n0c94faf0-dded-40a2-ab08-c044527d4ebb\n2dd1fa64-96ab-4e8f-a56b-190532e54264\n933fa435-a3f6-4116-896c-8d9bfe2696e4\n1d471686-57d9-4269-bb12-041fea4a090a\nd732bd2a-643a-4ce7-a00b-9f8197341b50\nb724cc5b-9899-4559-b3c9-fcbf3bda6d62\n111767d8-0b88-4a00-a316-83cc23cf8e79\n7bb22217-b74d-4694-b3b1-670657758894\n53a8fd30-81ad-48ab-975f-6b60695a6b51\n8fba589e-1066-40c8-ac8f-3120a0fff685\nfbfe5249-5260-4bd3-ab32-21bc011cd708\n4876cf68-8383-4784-8801-a66fff66ec32\n84bd8be4-c37c-4905-afeb-b0de63710e7b\na67cde90-31c0-42b3-ad19-460701437d66\n4ab88bbf-7418-41e5-948e-875e55dda0aa\nd599a143-7988-48d4-8444-5b7a68c26a5e\nce443089-7997-41fb-96e4-c5b5fd7cc34b\n4a201a97-15e3-4e9b-95df-49cd15dd12e8\nf6871810-dcb2-43a7-ba84-dc305b188d06\n30d7d02a-0a95-4d80-9ab2-7f537dc2cfa4\n78caa91c-b20d-47b6-b9aa-42a6290e3cd3\nc6f5d628-3809-49f8-97dd-7a760aade296\nf0d836bf-662d-4da1-9924-a959708f81b4\n1a195c5a-0611-405f-961b-c1f9a11f1340\nf8f6b72d-4e49-4e6e-bd6d-acb9411134ce\n8db4f7fa-ed84-48ec-9251-b361c306fd71\n1f1438a3-01ef-4433-9598-8950c5be6268\n2d93012a-cddd-4339-9f44-faa07c09f477\n70310e4c-e046-4311-90b7-f8d9e5ee65a6\n0298e384-9820-44a2-8fc1-2194b923a37b\nf6af46b3-9839-4adc-8bfb-010b7114490f\n89d2f598-90f3-455d-b095-deb3018964b2\nb935310d-43e8-4d8b-9dbd-d734364c3670\nd55fd77c-e543-4f02-8058-78ced503ad20\ncdf2ef1f-1787-4b83-b3e6-b8d2a388e596\n14736f80-3781-4a6d-b890-c27579e09536\n49a4b095-9b92-4550-9975-344dda5ae5bd\n2bd9a74c-c574-4ca3-9e71-60467c4edaf4\nace25a7f-c86f-46cf-8842-62067ce0644b\nea162c02-6e7d-4372-9e7b-6b3db76ca70e\n85f55d8c-91b2-4b4b-9c0c-02ea38cabd33\n69e68d63-8e8d-4bc1-b035-d01999185ce0\n5d0211e0-7beb-416e-bf62-6abbf0b58809\n5e6d4914-aadf-4003-9e0a-1b578a2ced08\n85e4318e-6434-4027-be69-02d12353b58e\n0b0e334b-13d0-440b-8ce4-5a988c3ff1d0\n0edf181d-f86f-4503-959f-a66a1ba2449f\n195be03c-e99d-47d6-abb4-6a23da35b44e\na9730b98-976f-4905-a2c9-36104cf81392\nfff891a6-5bbf-4c26-b1b6-33ff76fb9f37\nf0fbe6aa-a983-4766-b85d-6df166b9a03f\n537a24e1-fcc2-4128-8b1f-a221eea63095\n6c8ea613-f03d-4879-b83d-de98702fa8da\n20beb1b8-b144-4b64-95c0-7e47898b04a3\na3658d47-31eb-4c43-bdc5-dde6c6dfeb67\n7841d7a1-fb4b-46e0-92a2-f7eb4097c28a\nec71bc11-2cac-4dfb-aa56-f4c4741fd6a2\ndea27cdd-5ab9-411a-9c6b-7e352089dced\n446357ed-1d9d-4720-9ada-b489d05542e0\nf1e4bb88-c842-460c-91fa-7153e6876ba9\n5dae9618-3a81-411c-9688-1785847f24ee\nf438f51a-cb50-4bb4-804e-fc5f1b4a8246\ne0ba78dc-02b7-452b-851f-1362e2d80b98\ncc0ad1a7-9e91-4671-87a4-19752fff2fec\nbddf1010-ed29-4fdb-90fa-45390b9e49d4\naf294f7f-7774-4f27-8354-3928e44cb34f\na0039002-27a5-4eb3-bb90-1e01ff23125d\n72343a90-7d11-494c-872d-fe94a6a31b40\nab390eeb-c471-4132-8834-d8686c3d3dea\nc4790eb7-06e0-479f-85bb-8f5a138f233b\n05d10d5e-ef82-4728-99bd-8b86b74481a2\n1da4992c-6fe5-430d-bb62-c4d26ae5af90\nc19750fc-4cd2-466c-8272-f098afeb71c7\n5b3a129b-e8da-4c02-9b10-c4d5d1516c2b\ncbbe38ff-38d9-4acb-b2a9-0dcdcb456d4c\n9147c8e6-d2e0-471a-af41-d9dd5a08e862\n6594605c-e443-4cb4-8595-297549d235f0\nc9bf3ef7-11c2-4880-a1d8-8d4135fbc6fc\n3060f3ee-f564-4a68-84ab-7c49350fb1da\nc43cf327-ce89-4860-8c3e-6e1ef8301a19\n698e9faf-e0d4-402a-986f-4fe217c44b8e\n2fac6b6e-bd97-48ac-bc85-b279a28145b8\nf597ae21-2e95-4a63-a914-87fc91ff5a18\n20e38bce-8a3a-45ef-a09a-c814c78ff582\n5a07c873-a0ca-4dc5-a317-10bd8248af08\n5793896a-3f93-4a8f-ba4d-f0f575eac8c3\nc4883ccf-2780-4f3a-9350-37efecc3a50c\nc1e80c30-29cf-473f-91e5-52e467368766\n10698101-285a-46d4-ba41-dca1637e9d46\n7b0070d8-ca9e-4eb3-ba54-4f950ecd5a12\n1a9f7306-52e8-4f2f-bc1f-82e8d503ece4\nb0daa79d-3736-4447-905b-a6455d516a0d\nf36d8017-b894-4319-a2a7-f182290863c0\ne018353e-a37f-44ee-ac1a-ebe400e32bd4\nefcd9f14-0016-420b-ac64-99e79233d49f\n2257cb1c-ce6a-4d45-b2fd-392a914b697d\n9667ffc5-49a4-4f35-9b92-6acdd26ac6a6\n0f3f299b-b58b-4e61-9290-315cf4368da0\nb6266bbb-1ce9-47c0-b7f3-0cd5730f0580\n9350b36e-4d79-4771-b46a-09ed4b0199cf\n7a4325cd-5e02-46de-9012-f35d30a72c34\n818425d3-9e00-4b93-b3b2-51219b1df109\n2c7e7ff2-7a34-444b-b2c7-8c094ecceb39\n9828ca0c-aa5f-4609-86bd-9e78a270c83f\nffa4ebda-1a97-44ce-a822-ae1eb1a4cc63\n35c2c6c5-8c11-4c95-9d6c-953cfbe7f1ac\n775c838b-1900-4ead-8b9d-35a712492308\n786d8a7c-cea2-4634-92ee-93158ef347c0\n308e2c14-4497-4064-96e2-1c8cf0f996d5\n66401171-3ac0-4d50-aa3e-6dc6ca68fe61\n5838647f-26ac-45b7-a637-c4c631ac8fb5\n79730df8-e034-43c1-a29e-997bb6dc9da3\nad85fd90-8f11-4288-a6d1-4d590ef00b37\n51af7fdf-ce2b-480e-b850-fdd779164f39\n49a35e2a-14dc-494f-b8a8-985d97d28aab\nd8cab7e5-a867-43b7-8e1c-0821134d0191\n5676c30a-1582-4484-989e-4a05448e1d46\n488477a6-3687-454b-8e1e-9cfec957f39c\n60e28935-92e1-432a-9863-82206044e311\ndc64554f-c9d2-4e49-8dfa-d681850de290\n67161fce-cbc1-4a5c-bd97-bfac0b68d131\n1688e09a-3409-4e5e-bdd6-48880820a679\nbee4322e-10b9-433e-b8c6-aab64bfb9bd7\nd7c61b39-4672-462f-9fa6-932071e14d20\n99ec39d1-1637-4b81-a933-4e81c846b967\n059fe3ac-4031-4c0a-8ca5-46eed717cec6\ne84a24f0-85f6-48a4-bb68-bf0b3fb6514a\n29ecc2f2-27f6-4c7a-8609-4004ab206e63\n0ecdcef6-132f-406f-83c7-783f1be02ea1\n18039faf-ad02-4f61-86e2-94201b66867b\n6793637a-ade6-4784-b335-b54884fe1dfa\nec8f4c17-27f6-48dc-bcd3-f0620d184761\n60d2d6a9-5996-4b61-a222-9cbc179d46bf\n91e34eca-a5fa-4559-81ae-dd1c4409c5e5\nf8087477-813a-4014-9f02-924579f81dc0\n11f0818a-2668-4b93-a368-025581cb92ea\n5772ec84-6ef9-4332-8cfa-64dfe6ba9bae\ndb024d74-4a12-4556-9d69-c60cbb4f82a0\n70cbe7b0-8085-45f2-8de9-10220c3c9909\na44b71ef-5be2-4532-88a8-53ff5f5cb69e\n706997d7-5065-4ccb-b9e4-4a281fa4c0c3\n06016eb7-ee8f-4c6e-8a2d-311ea26a31a8\n895cd59f-055f-46e6-be67-c4dffebadf5d\n9828e569-e555-440b-855d-80c52513a5b1\n7409eddb-65b6-4c2e-b506-3284f9487429\n68cdb8c9-694e-46a0-89cb-6712fa4e9dd7\n58745b9e-c63d-4fdd-bef4-cd621fe85a13\ne7686e9f-3bb3-4124-ab4a-0cc87bbbe5a5\nc8851131-5e2e-472a-a867-b793896dd8f7\n6b592d40-230a-48bf-993f-a2473cc615a0\nd3b24087-1094-43f3-969a-7a687b440a7d\nd2055cc2-988a-4e79-99df-42bd72e7110e\n1d379b16-af4f-44be-a1d6-61a875381fbb\n5ed81d8b-b0dd-4e99-bd23-f4d81c620793\n29c50e67-1ac2-480d-a48d-2b7be8ec4507\n1d7035c3-1fdf-4c9c-b84b-de96ffbef2d9\n31784195-cd7c-4f06-bab0-92eb5fe4ac68\neb9101ee-86a3-4bd7-b1d7-b45b7b5aa913\n3baa1e51-e093-415a-949b-91630fe61c74\n30c08807-101a-4983-be92-f663c54beb31\naba47ecb-d990-4082-b6aa-04c1b6707813\n22e146cd-6b33-4c1e-b185-6476bac57287\nb6599709-f583-4a52-990d-9c5082975fd4\n0adc88c2-1b93-48af-8840-edb3ef80853e\n995ac83d-9486-4ca0-9854-777c74392f26\n3087b573-076c-44ad-9d0e-81fc055032a7\nf7ec7f9e-c068-4201-a29c-41a03e3ba4ab\n6cf78931-53f3-40ce-a7a7-f4b9e611aff3\n18fcd777-361f-436f-9fae-94a693ed9ab1\n536b2008-1a08-4931-9d28-82794eda6f1a\n2e25910e-1ab8-4724-a982-addd1c0cd5fb\n89065f6c-2091-4a7f-8ede-4eb9abe3268b\ne0eff3d0-e627-446d-b397-87ee4f6cd7e5\n3674c00f-99e8-4ffa-9ea4-fd6805b265d4\n4a4d8ab8-35d8-4875-854d-1c5f200ca94e\nb4c4a104-f236-491f-8e5b-e1a4f8f24d7c\neb40a59b-eba9-4b1a-bed3-b246d03c8857\n1002fa27-4558-4ec6-bfac-5561edd0874c\nc6dd9285-3aa4-4f38-8eed-c64c3467c04e\n80f8076f-7ce8-4cbe-bbbf-50f4b1bda055\nb5e8bd58-12a9-42d0-ac86-36296c7a885e\na2d0c3d8-921a-4f0c-bcbb-9dec6743e735\n5762f26b-e500-4c2b-bc7c-b883aaf2199b\n74bbd1ac-72be-4de1-b334-2d1bf8a4c1a1\nee862468-bb92-46d4-84d0-b4da37a03374\na9c08cea-c1e6-4a8e-a399-49abc483b258\n9751f77f-e0e1-4337-9646-726c77031f41\n957ed36f-df34-40ce-9d50-8c25575fc733\ndf0ef32b-a883-4816-a68f-b6e9158a9739\n698f6408-5dd8-4fd6-888e-22e79719ed86\nce742e92-1dbd-42c8-8c53-27c0e7846a23\n17be0c03-c22b-4a7b-a45e-cad8acd54bf7\ne5e9c8f9-669a-440a-9a7c-6bb7d6691815\n8a98e336-9403-4a10-8be9-4e73c5677a24\n25b3b35d-dac5-42a8-9f83-9983cac7016d\n7b5ae4c3-e90a-4a3f-9ec7-90a276c7c574\n1925e16c-7004-4f37-aecf-67b8a824220a\nf065699c-b1be-4990-9362-0ab88b40e17b\n19a3de4c-4627-4474-be31-285216e385d0\nc48df589-bb13-40e8-98e1-969310711c41\n6e4f53c9-0de7-4ef3-baa3-41f357242586\n17a05058-8c17-47f5-a907-aeb9cf073560\n6674f34e-f9d2-4d6f-b827-d41bed613f4a\n7032781e-6060-42af-8b0f-70d33caff514\n142b6e91-3960-4190-a1b7-e5b94b33901c\nac17b92b-3563-4465-8d7b-5e5f96ce0879\ne0d9c8b0-202c-467d-b532-a74e278bc448\nd7107bd8-370a-4b8d-9672-69fbfa1c36a1\n4293b37e-482a-40a4-a16a-f38e38f9c6ce\n6621f0e7-71f7-461e-9bf0-89f5343f90b7\n8c6ba9ba-7ebd-4b3b-ad48-4b3035f36dba\n8d377a42-68b8-4d93-98f3-18ce364a8104\n3ed2f856-b8b7-446e-beab-e5a788e71f7c\ndf795ec0-289c-4043-bf03-dbafadb707a0\na88ba261-72c5-4a0c-965a-9efc5b75cd42\n40d474a9-65d5-4fb4-ada9-bb511449f2e6\nb99dc63e-896a-40f0-883f-03d27905160d\nea565c42-1eca-448b-8bf9-3193f0b66c98\n8182d7f5-1ff0-4669-a531-a7226498f6a2\na22a156e-8405-4d47-ba12-df1ba91e19af\nb1d3e1c1-21b0-445c-98bf-899478a78533\n55b0eb96-0f68-4669-8315-abf0e472e5bd\n3438b312-343f-45cd-880f-c34799a61cd7\n2c3b10e7-8cd6-4c51-a350-ddd2f8fe3b1f\necb8532c-e484-4c33-8fca-c182ae13b232\n40050426-98c4-4f49-bea9-57751e43e1d4\nc0968ab7-d31e-48c9-a2c8-2b08afe8cabd\n2de5a080-ee73-495a-a1a3-67200d4c094a\nd4fdbace-8adb-47f9-8597-9ccf0775d644\n542d560b-e340-4a72-87a8-21221ebd044e\n3b3a98b0-d27d-4486-88c6-889106b16520\nb142aa01-3433-4731-a035-a323de712e1f\n9e6748f9-c541-4e4f-9d64-e7e216742335\n44f532e0-c711-41f2-8ef6-077b3ea3e67e\n27cede1b-2754-42d1-ac66-582fed68e9e9\nac96ee90-64f6-4d53-93a2-bdaa89e61ae7\nda61b99a-edf7-44fc-a2ae-e36475a6fcc1\n28327e5e-c6ae-41d2-ad4a-755cca49c9b8\nde2b3dbf-417a-479f-8f12-130b3d528a8b\n8774930e-532a-438f-8c6f-e9536f631c41\n8299d469-17ca-4489-b1ad-456505f74f07\n4e48e5d4-aa73-4d31-9ac9-9be371ac8440\nc5471116-fd96-442d-a9d9-e9e628f53b31\nf2d51f64-2f74-4cdd-97ad-a0c838752af3\na19ee724-903c-4a5d-9022-7d72cf3265d0\n1ffe628f-bde1-4e0c-afa3-9ff4153a1f64\n0d041ead-75fe-4769-bb4d-9b579177837c\n86ee8ebb-db94-40ac-bab6-a96f0d45b001\n8ebf6227-f4ff-47cb-bdc7-cee29d9c5909\nbf84ee36-d656-4a64-94cf-8ab38e64eb66\n8ea31c4d-f606-4026-b0ff-1d1785e72ca0\n4e7d5591-a233-4207-861d-103884f8f576\n635dcd7c-4b0d-420c-81d6-9ff6465931b1\na9d73029-47db-4d29-9c2d-3afb57189b46\n85287c24-6646-4c8c-9842-70ca21947133\n23a5ec86-595e-4f00-a7b5-612899c2594e\ncdeed937-5d2a-4ad5-afc3-fa92d3c16685\ndb422b81-336f-4ad7-8563-d4e47ae0e27c\n182f969f-d8bb-4b51-8c5d-ff5e0c97a3a7\nd9982866-e113-4924-a2cb-751becfce016\n59a141f6-b351-4ff7-b91f-f15cecba7688\n6180accb-01dc-4dc0-a8e4-91331254f002\n722ee1d7-0a6c-46c7-ba6f-936ec4e0c34b\ned9267bd-2d15-43ce-805f-532a81289544\nb638d61f-b409-439b-9ac2-490185005434\n7d55e0d6-38b4-4201-a1f7-499eb04a61aa\n10d9901d-d54a-4eca-acea-3dc859a77f0c\n140811e9-b9c3-423c-be8c-2db15b5c48f7\n3d9a3367-93a8-4627-92c4-167fa9116c8f\n958dc39d-e849-4034-892b-3d643ac2ef38\n70bc3617-c2c0-4777-a92b-bc5c8894f77d\n50d8be58-717a-47bf-8f22-e37806d6edb1\nbf0449f6-b508-4287-82ce-b83a78d6250d\n0270de29-56f8-42a1-a0ef-0a0ffeff3664\nbe110117-6c28-46f1-bf68-e1b3dfef65a7\n48f83939-2b53-4f60-aaa3-b87ed7454563\nc202ba44-5073-4355-861d-c0da0cfdb2f9\nbd13429a-9d76-45c5-8372-a5a19e89691b\n2cb7250c-b365-45bb-bbb4-44f85c0e07e5\ne3203291-ee0d-40c7-aa44-aa22f66da0be\nbc526991-0f50-4b8f-990e-4a3d0f3f397b\n80658ee4-6e75-4adc-94a2-c3019254e057\n4d85a96e-a994-4635-bcd7-b73bff1c443c\n2d060ef6-9da7-47d9-a3a8-d4e852f8ad1b\n07af66a0-5823-44b8-87a8-1d27b91a79d2\n9049220c-75a2-4550-8b07-72c8834e19f4\n328af399-6166-4d6d-882d-9263f8786ffc\nea0668a9-df93-4ff1-8f05-39fb36d139d3\n7cc9322f-45a7-4623-a9fc-3c988e4c25fc\n77652d11-4d7a-4370-a124-d84375c9b789\n0d2a4fda-dea9-4b6e-b25b-31a1ea066117\n28305984-f95c-4d59-942d-188d86d2ebb8\n1b9698ff-7d16-4d8e-99ca-1995b3df4897\n8b8d21d0-3b94-437e-b107-fcd7986a8ef8\n74c8ff53-fab4-4d8a-a324-53bb66f7c66c\ndae98701-c4f8-4adc-b66c-cb6c2ae6a5e2\n64a377e2-9e50-46fd-91e6-d56196173340\n57a17786-f093-4700-8a3e-fdf9c24eec67\n96546f0c-d723-469f-b633-768a451d06f5\n882503cf-fe20-4632-9797-551ce9320d69\n524c897e-e63a-4fc2-8529-5dac85fd2e36\n6281115d-837a-4805-89fb-a1719ec58a42\nf8d8bd3b-05ac-42f1-94d9-d92660d3aa14\na844c835-cbca-4138-9dd5-0e65732b0895\n11bed1c8-2af1-46e4-9853-bb7b33a55103\na175685e-3341-4483-bd2c-5b094ea2d633\n8a85b8af-1e63-4cbd-a8df-1314a62439d4\n11f46933-9f10-4cdf-9a15-544639df33ed\nbad60d45-2066-47bc-86a2-0196b4f0baa2\n597424f5-6f02-4aae-a35c-29790b5c69b0\n74eb1a5f-c24a-4d97-99c5-d0cf63d1980f\nfaebdb5d-2379-421e-87a8-b2aa1402bd86\nb54cd140-9505-4917-8357-22a1a0b638f9\n13c0dd3c-43ed-47d8-8568-20e90107695c\n30bd4cbd-4e68-4221-89eb-b8c91caf70a5\n00970692-b01f-4d1d-b4c8-a143c7cb1b57\n313a7906-c47e-451a-bb91-0acaa6b67e74\n86112ec9-a45b-4a2d-883c-d646f60833fe\n1f7ae7cb-b1dd-4acc-8547-32bd2ede6c35\n37f76fc4-0354-4d4b-b099-0d84dfa89763\nf753236a-eb4e-433e-8677-3c7410e69e89\n16fa20cc-4205-4a23-bc58-6c2436c302e4\n0637b8ed-94fb-47ac-ad7f-a843a2c245a0\n9401988e-11bf-429f-aab7-b65f96f2cbea\n4fb06a1f-a83a-445c-b659-70e598340a30\n7b781e68-aba0-4bef-9c80-ea95c8cfd0db\nf1c44086-74e4-499d-afc8-ebabc9efb7dc\n75fce963-0ca0-440a-a155-307d165ce6a9\n3b9ce049-2d2c-43a3-be85-ef5216bd3654\nc48d5f86-3b9b-457e-a0ee-7b278b322048\n3e694150-a52d-4de7-aa01-923eea575a97\n0c3495eb-89cd-4200-ba6a-1f2a801986db\na2963a85-df47-45e3-9fe8-94b2c2b52be8\nd7a5e397-487b-482d-80c0-780a816f8283\nb714d5c8-500c-4e0e-9d84-7ced4fe8dba2\n991284b0-1133-4794-9c0e-49a6957bcf65\ne7a979ca-655e-4588-b8e8-c928878dde61\n52640a76-232c-44c6-96a0-2e7cc2c2451d\n4eb24ef7-b960-4865-866a-c5ce299ebb43\n8007aa08-835c-4188-b87e-f94ac178f969\ne89c4e01-7ec6-410a-bd45-6e1f05c2ae04\nd89757bf-2816-42f5-9522-c620fd664882\n944f0099-3788-46ac-8508-c08a9e9d505e\n4766dd07-8e5c-4e72-86a3-32ec97b5bcf6\nb7c40032-5151-492f-a8c8-e084a4921cf6\n10571ce9-35b8-4fba-bcc4-3c9ce33c6ee5\n17831984-e90c-495f-83fa-a1b9c754ed75\na50e38be-9a68-49e8-8c96-a03381ddf79e\n85121f4a-41e3-4710-9eaa-d284b53ecfde\n4cff7c71-19d4-4f8c-bf1d-8d600ca759b6\nb33a75c1-e2bc-4e9f-8813-14250dab71e1\n5b2ea21f-ac96-4c6c-9c57-b277ad12e7e3\n63350f79-9eca-4a29-a209-8d90b247bf3c\n3e8557b8-02b7-4c26-8122-1bab1bdc16eb\ne8e37ac4-9ba7-4245-9c4a-1c388c9d8273\n21deb50c-95fd-4312-a1fe-42f6c1cba6e3\n3d7fa272-19c7-4ded-832e-6e6d4d5ab7cf\n9be99aaf-dcbe-4824-b42b-d1e387b86c7c\nc0a8a142-7bd7-425c-9bf0-6e8068423eda\n6550aec2-f639-4825-b1fb-2625c2c29996\na4fb599a-84ce-4082-823f-94fb6fa7b1f5\n5665ae6c-6be0-478e-8604-6f5c37a8878f\nf4c5f0bf-d65f-4110-b56f-dbf02a3ceacd\nc06970dd-d3a3-4e8c-be99-7af4ece1dd20\n9783b81d-5d9c-443b-9a0c-d31448fafed4\n2c400057-837f-4c05-a400-b05464036dbc\n35400811-f2ac-44a0-aa25-8d2664c8cb0e\nbf3b31ff-319d-45fe-b638-bf578bcd603b\n2aa08912-6c8c-4e14-a637-96c890a21671\n22f6ad63-71f2-4416-8028-ace98ae1fb2d\n8dc2f3d1-0d98-4d32-97f4-6b48ee4062be\nc9eaf43c-06e9-40c0-89fc-4d120f9d77bc\n122d16fb-5da6-4857-8bc6-f4bca5246c73\nf2c04201-af59-4fd4-8bb6-1ba19a3b85c0\n52798bce-b017-4f03-a729-c105bc15264a\n107dc437-263a-49d1-9587-c8957459f889\n762ea940-146b-4f58-9baa-c6b2f89026b8\na1bf1ceb-5337-4986-9599-17075475b7de\n1fbe2601-0078-4863-8bb3-89eb63fe9145\n88ea6bb8-fd18-44ce-9c90-9f0aaf0ef069\nd8e3db0a-da1e-4854-8bcb-9de14dba53c6\n8eb7eed0-ecb6-467b-a317-e1ad6b1e805d\na8dff2d1-a4d9-4281-9734-6dc5692812a4\n7a5ab324-bea7-4f53-ba86-4cb8cb3f0196\n60cb9938-f47e-4828-a33a-fa5a9b33b63b\n1d51ee3a-61b3-4367-a103-ca9ebd5fccda\nf668153c-fc93-4e50-b300-e6fad4c627a4\n111babdc-0375-4ba4-83be-2693aa50462e\na88eb53b-064e-4a91-b929-6269f1f63794\n3d87a965-fbbb-42f1-a4db-e4505d64790a\n6e9f46a0-9e64-460c-958f-b45aaf62a1d7\n283af27b-b24a-42e5-af23-18f7256923ba\nf4abb106-b44f-4e17-ad5d-3f54510c8d6d\n3e302df2-1581-41e7-b230-5e746f3df003\n0411028f-99bc-4386-b7ed-405192ee1680\n7f4d9f18-afbd-467f-9d8e-c2e83a62afbd\n71e67be5-0d41-4470-9fcb-0a2e66aa04ef\nea7ecb6a-d186-4f76-a397-38ffd96efaa7\nd510bf53-f8b5-440a-ba9c-7b025a61f0f4\n4051c6a2-1210-4a14-9e39-2f57f6b992e1\n13ca3591-6684-4584-8346-db22225a75e7\n3107c7cf-f0c2-4c8c-b28c-6e9ae8c829e8\n56d6c7ae-4167-40b6-8973-fb40145d545a\n85207244-2260-4a86-bcaf-9bb69accc7fe\nfd99dae4-888d-41e1-901c-71e70989906f\n6bc02aa9-7e52-462a-bc1d-57d5aefc6431\nc906c89a-7433-4370-a9f5-8c068752ec23\n33945529-5ca6-40c0-9347-9cf172103d53\nec7d722d-9763-430d-ab2c-9b39f6614eff\n060dffe2-4d99-41d0-8da0-2b57c9884cea\n39b4e081-1940-4644-b0d4-47bb683e3f90\n6e7f7762-46be-483a-8a8b-4afbf110c942\ndec3fbf2-10e9-467b-98b0-96ba3c6a0b2d\n8d64427e-6279-4614-809f-e48f50864770\ne014cc19-f31c-41f3-9d84-a257fa6d04c7\nc5ddb545-07a2-46ec-a734-b9655ae37fee\n6f66d740-460d-4e3b-bca8-430ca80c58be\ndf243c40-14a0-4770-83fa-c3e5b8ca035b\n7fae3a5b-1583-4d97-a077-a54681c63a7a\ne24f86dd-105b-466a-a132-3beab3acdd85\nd7684aff-ea03-47c5-bb04-5e27e3e6eb77\n150f4883-1054-4d89-bbb8-489edc424d62\n8eac4925-7f5a-4b10-8500-f4e0b26e161b\n9c91baad-7433-47f9-a58f-3e783045a2a8\nb6406c1b-06a7-4ed4-b735-329f2e418887\na743bb95-fb71-413b-9f0b-0655bf062eb7\n3d7f8ca3-59b4-4230-8a20-d12b7e0328a3\n752763e5-ea68-4159-af69-44fd9d2ccafd\n9403120b-f15c-4ac9-88f0-c371d4cc65cc\na4c8b1ae-08a2-4db2-8006-cc2550ac8521\n8699789d-2dc0-41bd-a0fc-ae43d0b77541\n6650fea0-2c70-408f-a843-a012be7e3ebd\n50a7ab60-dfaf-469b-9267-707db63e9ad9\ne1f00ec9-662e-4d2a-9ee0-1da5fff20461\n09b21473-12d6-47ca-8187-6cddcf28c4b7\n305daa15-b78a-47a7-8d33-082ed353320b\n412d1ce0-7ee4-4458-ab65-bd478446168b\n48432883-bf0b-4928-8857-3efae1716f8d\ne08c305a-bdae-46d5-aad0-a2cd47564391\nc80202dc-cdf7-4739-a6f0-307f08d7a76a\nf2e0f620-917b-4861-8cc2-900a3d855759\nefd9cf98-ca24-40f6-b3a1-6382903c8be4\n66d7e9c0-46bf-4940-8c7e-860b9a996bdd\n58775e7a-f734-492b-b22a-c8c0726465c1\n0a77fe89-d9b7-4f19-8a45-d22f69e699a1\nb0c63c1a-fe2b-49a3-98f6-c4abf9ad2722\nb4ce79f2-0d8c-414f-bdbf-a7510dbc80e5\nf82ac7f7-1fe6-4a3e-8901-188d4faf0132\ndc4375e7-f2ff-4df0-8350-482b6e7484ae\n70a19c6b-4f82-432a-ba66-27bac3629e43\nc1c800e1-9a5d-4c35-9190-5f7972175ec3\n4f851b8a-ca1d-414e-8635-6b0756196f90\n3c38970f-8559-4674-99f0-76a0215d8d93\ne8758573-a8d8-477b-8f65-659e0c7f2448\ne0fc169f-d930-4148-9874-894266b6d0a4\n5c8ee229-fe7d-4180-85af-c54f45c6523e\nace7c802-0fbb-459f-b2c7-83c1253b8227\nc529d05d-8d73-4a0d-9752-359762ac1297\nbe083c34-0ee7-4466-859d-42731abd8e2b\n3e4b398f-863c-482a-ac85-88df3e37ebd5\n7357ff02-2b3f-4869-a021-c6df43bb2dd6\n62549c38-8ee8-4de0-8d48-39e1af872498\n0d162208-c6d2-4601-9118-f6be0e17086e\n107f6a63-66a0-4104-9b5a-8ac4be4ebb0b\nea8ed03c-920f-4207-9e71-12366f102617\nbf1cbced-4007-4c9b-a1d1-4003c7d6ed49\nbe52f19a-b841-4aa8-b871-c5fc5dc94872\ncc8eb289-16d7-42c7-a1ca-acc48722cd37\nf7e85f63-09ef-4e2a-8d7c-8901e87a475f\nd699786d-2001-458f-a1e3-3e859e7bc424\nb8771f10-e6fe-4ec3-878b-3996398c857f\n422c2e66-642c-4a8b-bd59-90300514826e\n56733832-9125-40f9-b2b9-2424735cbb5d\n8ccb9c17-d7a7-4cd7-9a7b-7e4b22484319\n78bf04cc-45b3-49f5-a84e-e24261a72fce\n10d31c11-9d81-420d-808f-c3612e745f6c\ncac7c672-0701-4f7a-b7fc-0dc0757788ac\n77d5aaea-7c8b-4760-bc4b-c407c1607aaf\nf6e406d4-babb-4b77-8ea3-a1feead3067d\n9200e2a9-e94d-45fe-9180-b49326676e04\nbda9b085-4dde-42d8-aed8-d4ff6b98af69\n01d5bfd8-9e14-40d2-bd52-269523da98ea\nde6d2849-a3f7-471d-98d6-0728338885ff\n1b3ac8f1-846c-45ad-95b3-913d548026f1\need842f3-cc0f-4bd2-9366-ea7618593a66\n3f94c030-8946-493f-a66b-f489d4720564\nbe8dd90a-3b35-4de9-99a1-27b2f95abb68\n48e8436c-c1e3-41ef-9c59-340964ed084b\na720cf4c-661a-44c6-8e39-8eb5e9d0b4fc\n05755ac8-cb32-48e2-a7de-dbbde1cf72ed\n2b0388c8-fa1f-4e1e-8d1f-395755324e79\n858be2e2-716a-4654-bbc6-d14f7da6a975\na7090263-44df-4ae7-bcb0-38150d98d4ac\n5bed5f91-e727-451d-ab67-a3ccd22fadea\n3182c3ce-e6c9-4f71-a132-d1057d5549d0\n7f8e5974-d0c2-4002-94fe-c43bb1f41dd9\nb2388bc1-2724-4fb4-af22-a0776f8de3b6\n153df508-81c0-47db-8b30-38c93cef840b\nf509ba48-6006-49a5-8dba-ea0ef066f82b\n9f780434-7e0e-460c-93c9-b1ee4f07fdaf\nbf5f414a-5bc3-424c-a65d-6189ee3f29a1\n949de422-12b5-4bf2-a6f7-e9915ca68eaa\nfb9cad08-afd6-434e-91d5-58d9edfba586\n19d1e031-e7c5-4b87-8dcc-94b67905f600\ndbb30f87-273e-4a5e-8cb2-953402002a37\n11c1b96f-f06f-48df-8707-3c5f9cf310ff\n904d0bd9-b5c7-4ced-ad83-7817547fadf1\ncd0b4a03-c7ed-4ece-a2e9-e5d6200ab97a\nf4b514c1-48b3-47b2-9cf0-3ca24917642b\nb3120d5d-e314-4b2c-a072-9068c33dea7a\n1f0af56a-4e06-4031-991a-903df9a35822\n3aa8bad8-cf4c-46c4-a7cc-cadd380a6e71\n20055ecb-bacf-42e8-83d1-f6c838e50a9e\na23064e8-ea7f-49af-89bd-bb5bcf790d5f\ne427da8b-89e0-49d6-8dd3-4ce4bc33db64\n4688bd60-f8e7-481d-bf93-b7d7015fb25f\n1026cd72-b215-4992-8234-70a5e6f77e0e\n4b3ee894-55d7-4a37-9c2e-9ce9bbe737bb\n56c36db1-be3f-4c0b-b9f3-c3fec66ce233\n6ed5e111-0c28-4e70-a9b3-b3437d28e893\n390e1364-830b-4065-a8a2-407019ca6354\nb1926f5b-1797-4729-aa31-1e8b9d66e3f8\n12957d3d-320e-4f5c-b101-06d2e2274c44\nb1c01848-f70a-4751-9a98-f1c4a1d28fa0\n10b67220-c6d7-493a-970f-197f4671e627\n40c4dbc5-c03b-4786-985f-0b95b78ba030\n12faf833-8bd9-46e6-ae9e-5c8fd69d43c4\n3f936afc-93b2-487d-b453-d84600f284f0\nba726cb6-ea16-4dc0-955e-54f18ead08f2\n15dbf948-40aa-4042-9f18-3f5ad5e55117\n495e57f6-6c0b-43c3-99fb-ead325865d9a\nc107acce-61af-410e-a036-aa8410d51c7e\n727f1a29-aeaa-440f-a82f-8363bc16746b\nf990c4b5-ca92-441f-ac34-1bb9e02154e0\ndd3034e7-f086-4932-927a-1837cfbeeafa\nf1e5bdfe-4b64-41a6-a5a9-11784f32af8c\nfc075c61-6d24-4cee-a5ee-4fb5f212aab0\ne640a796-c513-4751-8a96-ccfbe2308baf\n22c51071-a859-4820-9a77-136faa4c5174\nad802937-6e30-4472-8c63-9a1ed611c635\ndb24c964-07b7-49fd-af73-8b447621ec4e\n748759f5-879a-48a4-bc35-efd7e096f6c8\n808baa62-1bce-4617-aa78-fdea05e34f40\n2c6ebf17-13ce-43b1-b939-9df740fcc081\ne7150d48-4173-4857-9f7e-ce1bf784ae3a\n5ac8e429-9a91-4e10-9625-04b8c0bea32f\nfd45b34d-46dd-4c4f-b4cf-ceca6423bd21\n010d2766-d9d2-4078-8ba1-aa204aac274d\nb77b928c-df3a-4d2f-8eef-7ad6b7d15c4d\n9944bac3-0b49-499a-9eb2-34f17f06f2d2\n0c25ebdc-ac6a-4e26-afe3-ea8142e60951\n7dbc55ec-ea25-43e0-9f3b-4261ebd379e0\n6cc807eb-79b0-4207-9c83-be0321312f43\n89e02873-c4b5-4731-b96d-ecccac5f463c\n45509fa0-a5bd-45f6-a1ec-393e5bf49d2e\n6cb13551-b955-4a87-a3ef-8d732626591c\n64b72881-ec14-41b9-a49f-f20efa7c83b3\nbc8feacc-3bca-4d3d-ad4c-756f1f21df38\nc16c8ff7-d71b-4a41-89f5-2f8a4923acc4\nae07dccd-a67f-4f95-861c-012756b084b2\n537c1784-6b32-44d2-acb9-80e57f31ce83\n2805eecb-2fb5-4a0d-9e99-2bf3142c75ff\nc183ce39-1406-42ee-af45-445162f69284\n060a5902-ec5b-46b1-9653-b7f1362aa4c0\na11d2499-4547-4801-befe-b72c2e1cff10\n6226248d-f3ae-4197-8d9d-c0c1d4138886\n47b3510a-625d-4233-963b-3f0705fa0aa5\nb195130d-580a-4154-80e5-73d0dc0340c6\n5ad161fd-b7b4-4575-9ae5-226133e157ad\n27248fef-25b2-4c69-91ff-f2a3a067bb28\n242b30d9-bfa3-4f66-b7ae-156dbcdc3d77\n60fab31c-0295-4347-b2f6-d0ad0abcea99\n3d7aba0f-43fd-48b7-b4bc-75c08d74c083\n659914a1-b98d-4418-892a-36f1756d65c3\n64e210aa-7a32-46f5-a395-e383a95249a3\n7afeb7f0-1b02-4a93-9538-d8abdb3da984\ncc9e2a12-270c-4218-8a98-8330b072f7f8\n08c449b9-524a-4f69-a10c-de75c55359d7\neb368bc9-601d-47c2-9ac2-46113adc5788\na66652ae-149a-45a6-b17a-49e445e78148\nf07232dc-256c-42f8-913b-0a4a0098a9ce\n607fe1ba-13e2-4e24-bb62-5817db876cd5\ne2d3fe50-38aa-455a-aa79-4701e60f5295\n2726f52a-f4b9-4501-bc79-45cedfe1eade\nb45bc4be-6c34-4ec1-bd9a-c3a4ef6455fa\n6f1aafa9-708f-47dc-98bf-21671cace3d5\na97648bc-83c5-4069-8e23-afbe8fade017\n81f147e4-1dec-41e6-b1a1-e499f6bae853\n0fdac52d-6a99-45f3-8502-8e7cb86c7adf\n99122dc9-5e7c-4e6d-b07f-d2603a314490\n041b95eb-7112-4843-9f10-9637863310e6\n3d3f8a24-eaf1-49e3-bb16-93b774024774\nc805083d-4b02-401a-a2d5-1a7332a791e6\n2cf89936-7cd6-46bc-8143-c459082f6d80\n720dfa65-2fef-4b3f-90ae-fe08d491d867\n8e8433cd-5f75-4f43-b697-90186af6d0bf\nf4a2365e-2892-4e65-8f44-aef18cf69a0b\nf2627f0b-bca7-459c-8d7d-07838af0fe7e\n940020e3-580b-4034-b5b8-d8021ea64367\n45e39e12-00cd-45dc-beda-b1d41651020e\n9818faea-ba71-46db-acce-f64e4b72a316\nbfd31963-5265-42e0-b331-f40e18d966d1\n8bac7c68-0b27-492d-b313-8c0d7c8ff102\nc9340c75-d2c3-459e-b2fc-4e142978e660\n2ac999c4-4946-47dd-b67e-0b4131ddafa1\n7f216480-439c-4abc-a7c0-486c2f280899\n005e3e41-1bcb-4ce9-ab41-f1b8abff6720\nbd2fa054-e2f3-4167-b091-7a9a4a7cc22b\ne1a50887-5266-47c2-9d26-723ee4178294\n4d0c562b-abb5-4d77-ad77-594a73c1a17c\n891845d5-2a0c-4779-9849-373ff8548208\nb557982b-3596-4183-9649-9edfd28d6237\n9be77ee0-e461-4101-9981-0275cc73e5a2\n462dc99c-d5dc-45ea-8c3e-d5516ec0d037\na2a2376a-1db3-4944-9630-7282ad1a716a\naa626ef5-f49b-4047-84e2-85e103f639ad\n65cb457f-c7b5-4e86-97c1-241d7b9cc248\n96aad089-341e-4c3d-9e2b-817429ef6e93\n6c895e00-159b-4b3e-8121-0ca87593485f\n12e32d1f-5391-4c86-9d1f-c356cbba8e39\n0584ac1c-4857-442f-9833-431aa2d6e720\n3d06c9ff-e268-45af-ab8c-31b0211edc13\nc3dd7e53-eb2b-4e43-874d-ec756d948011\ne6a1d99c-5ab8-4965-9f9c-0e64e8d31fc5\n7aa31006-06fa-4d2c-8b0e-0fd71ff75a1f\n891c439e-5073-43ba-922e-47398148ca7c\n9ea44a20-f11b-45fb-bd4e-bc623e2e8ebd\n8f4541f2-ee55-41e6-a879-90d3ea6bb9ca\n98c4c89f-1939-4a9a-8b45-4ce436097d36\n0391e8c7-a1aa-4914-847b-8bd0b2cfca5b\n25ca8a43-6e21-45a9-93df-dfa46b7fbce7\n8fcfb1b0-6042-43d8-adfc-20042d3bacd3\n298e06e7-5939-4741-9242-3c6c2977bf35\n617e921d-46c3-4515-87eb-a7989e61211a\n40b6d8c5-f6de-48d9-9733-215dc2141bf4\n6446e071-bf7b-4e0a-9f71-ce180454810f\n33bba37b-cf1a-4865-aea0-bcb1613a2c7b\nc619e17f-28d5-4126-9dfa-06e3bee1b8ec\nd92653a7-eceb-4549-808c-0294012a2544\nc4acafc6-02d3-4e1f-957b-35f1516757db\n2df821a5-6f54-40d3-b7b1-97fd43aad5ec\n25528cf6-d2df-432c-b9d4-d52a6d9dd635\n9aea4f19-4208-4abd-9d71-65898cd03324\na476a861-fa63-4b0a-b377-2cf3996c72fd\n67623184-ec61-4bfb-8d2a-e2d1c7a4ded4\n24237363-a1de-444f-bc30-e3f40b31760f\ne329d6ff-debf-4439-a891-004144de2ec4\ne4304b8b-7ae9-4dec-b43c-5faee7a71d75\nff56bdb3-6082-484a-aaa6-f75d055c0b8c\n0f514331-82e8-435f-8a0d-5eb09bff29a0\nb03ecf33-6486-41ab-8ad7-3516508ab85e\na8fe8f39-cd47-4acc-ac18-255dac052e98\n704b36ca-524f-47ae-89c9-d864ea4f3403\nd2e796fd-9cba-4a0f-a395-d3a779e8cd9f\nc2fee72a-c8d0-451b-9875-382cab4c0c39\n1e7ec6af-7c68-4f83-a3f3-4d854b61a067\nc5e9ce2d-8b96-4920-9f7a-061ecb0420ec\na6e4ac7f-01d0-49ed-ab22-597483696c68\n2fc6fb7d-7979-42fc-99f8-c91b4839bf2f\n11f84924-2a68-48ae-859e-6cce0dde6314\n744c7bd6-8a54-403b-be94-1edec30b4548\n2240dce6-4311-477c-aa07-ae97cc8b42ba\n223fe93e-0c5b-4c1c-b9ad-f995c5ab1833\nb305f293-0cc2-4bd8-8bac-7bed3d412cb1\n38d00339-20ef-416d-b348-351d830b1e9b\n9ecfd09a-837e-4d07-86bb-bba02d031714\n40bf70f9-9fc8-4d18-93ea-18e2ce045210\n081cff40-2a1a-4eec-be02-f2dd0c12889b\nf9f27982-1c95-4452-9259-f72751b30103\n003eecce-ab94-4a38-a214-5061a03acbc0\n5cc57f4f-b486-43da-9af4-7aa073ad45c6\n640538c3-a659-4fbe-8d23-f1cb300723b8\nc728eabf-a7bb-443a-841a-b5c638f4b5de\n296294e0-cdb2-4a29-9ce8-08ecd6a85b20\n29b4b510-ac1f-4257-af1b-c1662b881d3e\n6b4ac209-0746-4df6-b298-d8004db87254\n316e11c0-a5cb-4182-9462-d1c447227f58\n7f148705-637a-465b-8b98-b163f65b4ff4\na89d7d56-87f6-442a-b826-b66984d991ad\n288bfccb-7e28-4053-a519-e16fbfcdc508\n4d2b0db7-e51a-4ed2-b242-d091a13b1b23\nbf07b0a4-6f43-4aed-9cf5-d72e34b18d59\n25832c8b-0a46-410a-b54f-63b24311fbcf\n6c203876-6a76-4001-9b44-c631162c9a2f\nb0aeab9c-2988-48f2-a456-d283f28af33c\n3abe4e2a-6001-4467-b38f-55ce2ccde6cf\nee9f39de-52ca-45c7-af7a-35b8bf46e54b\nb6f89698-0791-4625-8821-856d818397aa\n2a085770-2255-4258-80bd-4d6a5282ea52\n0ca61f24-237b-47e1-93e1-c459ae7416d0\n56662867-8ddc-4620-aae5-287e6b8e4e1c\n365ae2c0-5f7a-4474-8ef2-13b826d4eb8a\ne885d2c5-2292-4995-afa3-3beb2ebee4a9\nacb44815-e49b-4e2c-b60c-79d759cb6f3d\n1efb18b1-ed3e-4fa4-b3b0-19e9d55eb1ca\n0788f0bc-2a43-4965-9e6a-21c02c1e8ce5\n18a8996f-30ff-4e7e-901d-5f88005aac42\n504da4ff-bd11-421b-850f-5702863ff277\n4372617b-e74c-486d-8705-c531959a0e1e\nd0d0fd87-b90d-4e13-b8c3-772460d93cb1\n7936d0a3-638d-4656-8110-d6d8540f573f\n9bb2dc64-dadb-4160-a78c-67e3b7d1bc7a\n814a7ff8-ae29-47dc-9237-3662ca1ffe46\n2049862e-0167-43c4-8f9f-b24c9e6a5b43\ncfea7014-9c6d-4d34-9250-666e3ed0a2ba\nd8c5569f-01f1-406b-95b7-ab7191b96e14\n3bfa1eca-4de1-49bc-b86b-72b0189d48db\n78cdf5c9-4216-4c45-8bee-ebdfed3b9e8d\n454423b5-e326-4230-ae40-0b2453427d18\n980bd734-d0de-4585-9eb7-36e5c3b24b31\nd70813d2-789e-4381-a96c-310a45c61962\ne8dd8fbc-2cb0-4ed9-ace8-bd44149c4163\n463ace5b-8640-46cd-be6a-7620a5f2c07d\nc606e8e8-4dcf-410c-88d9-53a7e0957369\n209a10ee-8ad5-4859-8254-a5cddf9ecdfa\ncb1922f7-08bf-43d6-b65e-9f1a471f2101\n51ecc504-7faa-4136-9673-df2da3226d96\n43861b0a-07fa-4cb6-8f31-4c3a43f1292b\nf02355c3-28be-40e1-bd2d-23b08f8b6d8a\nfb583753-dd68-4536-9ad7-9979e4711737\na9ca4c58-8c50-4c65-a8ce-cdd11c777347\n1f9604ad-29b7-4659-b743-70fcea3755f8\nf621b84b-3560-4765-8670-c850bfcc6acd\nb786961a-be46-41dc-93e0-3e8d4e9dc3a1\nb70e2cc1-e7e2-4fb8-b86b-770dbd424fd8\n4caebeff-d961-47b0-a75c-00afdb97aaec\n74d48336-bc8e-4258-bf96-dbae0f212316\n2c7f7aaa-5330-4caa-86b9-4e181ff69e13\nef8fafce-4fe5-4089-8a76-a4fe61d978e8\n14720bf5-f8d0-47e4-8941-f920d3a0f84e\n598f6c02-2efd-4269-ac4d-9fc9679d27d3\n69ae8d9c-26ec-46d9-9eb3-41c01bba376e\n3c5930dd-f6a0-40dc-b32d-ae74736f7563\nc6ba3f90-27b6-4687-9ecb-1e40b9060a04\n7872ed87-1b4e-4e15-a6fa-33f0dbb85cbc\nfa4c91ff-79d9-4f09-98d5-fc2c4f3da0ea\nec6998e0-3fc9-4cf1-9b1e-20633d33f694\n0b61a42f-8da6-44ed-a207-662d338d8f11\n7b0ce1cc-463e-4b52-bec6-5db72f8635ea\n1bcef04a-53d4-4d76-bf95-2d10ba225889\nc95460b4-37f5-4193-9300-b6b091b8a2f8\n9a11a124-815b-46b7-9f3c-54922d625609\n23e556f1-545c-41e1-bbe3-1a89cbd41f9f\n10d6dad7-92b5-403d-874e-36ff906a7a48\n5fde150e-8f9d-41ca-8496-7e8063d0c2e4\nfdef2c8e-921d-4bc4-988c-31d33f4afd3d\nbce98cf5-9784-45c2-9083-63bd3f76c961\nf8a31eec-d9f4-4c67-a86f-e5ffad85a3e4\nf20eca63-f911-42ef-a5a2-1615848c6316\ncca5941d-ab5a-4781-b5b1-b1123c9682dd\nd6204ff1-1948-45eb-b0b9-c4c9ef347a26\n89110212-11b0-42d8-a49e-03e06ff50dbe\nf9e20566-9b79-4130-8969-c6168ab3f299\n7a6b2211-361a-4204-acfe-a16a0e6e1bc2\nc031a0c9-aa25-4276-9d39-8e47fe5cd336\nc940189b-d47b-4891-bb6d-3a6053336084\n8254f395-4665-4330-84ac-71f97eb7a75b\n2a98e3be-9b57-4149-b3c4-c88d1d007cd6\n98ede620-b234-4000-aae7-39dec5683a12\n73343683-0a60-44b0-8050-69f24beb54bb\nafebb631-e08f-4651-a488-8d8cfc20ef4f\n2743007f-40a8-446f-b61f-64f0c3c90408\n16043741-2604-4cdb-8b94-dc78cb9d9abb\n6efdb8dc-4563-4000-add6-ef98f5fcc10a\na3c24e3b-71c1-4dd4-a89d-93135b6554d9\ne879119a-a949-4145-99e2-cc526da31fd8\nbec6afe8-7e1a-410f-a8b1-6565a15671d1\n5bd4e24f-d291-46b7-975f-41bd146fddca\n7ec942d0-d3a4-4cfc-90da-50359daacb10\n7decba4c-dea6-466c-be89-023e93763772\n0b9aae59-acf8-4806-a5ce-511a6d53b2fd\n7470bc03-7f24-4f71-92c2-65633df8d88c\nd6608fa0-dd4b-464d-8af7-658bb2aade05\n0f77c57d-ea13-4307-909a-1163bb09ec9a\n804bb404-5ffc-4c1c-b7ac-63fd56e35998\n5fdd90a4-d3b5-4005-b086-acbedbaf3fa2\n310284f6-88d1-4a88-98b6-c8e8f4379f63\n89c9973b-1765-41a2-9140-1ee047f5980f\n78996145-93ab-4595-a312-95d29e4ea98c\n17342eb2-851d-48e9-9393-d7fb69d01c54\n7ff45c0a-95a3-488c-b7c3-f68f447e61ab\n3f8c208c-52e3-47fa-b0aa-3072e320a4de\n86847383-3f7b-40ea-b4cf-a73dc83649fe\n28779d2c-4ab3-4b96-b7d8-547ed7decc15\n10b54ae6-c7a4-483f-aede-3d3292200113\nf8131376-5900-47ee-b1ce-b61c71250e38\n97df0f40-dba9-4020-afbf-61103acbe68e\nd4a165e5-bb17-416b-bcd1-2355a8c59025\n312d9b88-f7be-488b-a66d-46c5d207d5fd\n9b0f18db-8a7a-4a3f-b81f-dfc959da1148\n35c7b8df-8675-4d26-9d27-c78f56fe95f7\n6cb39b8f-b45b-4a7f-9d3f-36ef243ea740\n7d71fa7e-c6fd-4646-a95e-7a32822daf57\n665775fa-a6d8-441c-8858-54e01683158b\n60ce197c-0b3f-4291-aee9-48cb0d6ba52a\nbc784f13-01cf-470d-a67d-b246e20167d4\n3184a96f-eaab-4de9-8b92-dda11ebd230d\ne16da9c7-e633-4458-a42b-d7686adf08ad\nd18db4f5-e0ab-4c62-9a74-ad5c23ea2092\n3054ac5a-89ef-43a3-917f-3c7831e9e915\nd18a6aed-6901-4989-be0e-e7c7f894c782\nc85d3b73-8e6c-44b9-a394-aef1ecc542b0\nd584390c-e519-4bf8-b526-88d1d3a17e5f\n5266b697-ca83-4291-8517-04b0b5abc897\n2d242634-55f6-4841-8cf1-7ec0e8db1244\n3de8a3d9-4c82-4ec8-8003-071217d2a5f3\n7f7c31f6-7a58-4964-bd41-0c8e8e9950e0\nec443e0d-e2f9-4281-89c8-0271eaee9034\n66cad50d-a3e1-4ad7-9bf0-f74b44cfd559\n2cd54bdc-2460-4fd8-ba39-50547c681127\n9ee970a1-e668-4314-b949-747c2ef8b3eb\n9347f355-8c1f-4c6c-8b8e-9a52131ebeba\n274826a5-e6f7-4570-a90d-cdc092aa587b\n6ecc0953-87a3-4fe2-bf0c-b491d059ed14\n3ef17641-a2c1-4026-b3b3-912b04416d55\ne6c040c4-364b-440e-ac9e-fe05f5a873f9\nab1da3f1-b5f9-4ea2-8508-f7330f08747a\n4e73a536-2096-4171-9404-1a29761abf5b\n1cb98ec6-1583-453a-aebd-1a2bdeb74d09\n06868501-d2f2-4874-b380-07b9579bcefa\n42a73273-17b1-477e-a0b0-a1a243102e95\n2ebd9f00-b2c6-42ad-86cb-18c39fd38731\ne80bb6aa-aafe-4645-93fb-914a5a17d80e\n50da5bbd-1b81-4200-9184-9c01a71eea3b\n032d3082-f665-4a84-b025-90dc0a7c4442\n0401e410-038c-4134-991b-1e516f9a9842\na19dcd66-3fa1-4536-ae69-c3dfaf795029\na58ec9f4-c5c9-4cf3-aa85-ec4aa0d16ca8\n50dabd7b-fa76-4b68-92f7-f5e65222d251\n253ca9ef-f8f9-45d8-83b8-800b78881ecb\n16344f3b-82cf-48d1-be1c-c27578963a11\naf796500-4251-47cf-bbb0-926bcf489e86\n2b495ce5-ae90-4b92-bacf-39d363009601\n9a4a42f5-aeb5-4249-8699-e447b411edaf\naeaeff18-69e6-4deb-a0c6-48355cc0e4d1\na607caa8-2386-4322-9499-918ceda8e85a\n28c82a4a-5196-41c6-908f-ef0bec39469a\ne84e5b2e-68c6-422f-836f-8bc1ce1ad3ea\n98f6111e-f63a-478f-acb5-1d571ffc269f\n88e1cda1-fa0b-41af-a8e3-cd50f7a0aabb\neb836c13-0715-46a7-b3f0-7a0a00315f0b\n37939514-a6ab-4f32-87c3-a9d5b19cb3f6\n6ce5caca-f283-4e68-9b6e-2f199e68b797\n784cb132-c6f3-40be-8f29-fdee269e5da3\n18f40497-47a5-4375-902c-45b196b44271\n9535791e-15e9-46ec-a760-7b3febcc6aa2\n70a5beae-3f32-420c-bed9-8b5628665383\n3305cce0-ad35-41a6-b4dc-50083e63ff0e\ndf8d3ad4-993e-49fa-85f6-6d146dfe0507\nd69cd540-5fe3-4217-83f2-613b5c53751e\n15346d5b-84b8-49f3-baaf-21dc969de7a1\nc4ff34ec-b2b2-4459-b49e-2ee1b4119b82\n924d2088-b651-4727-a8ea-8e1215b1c7ef\n1a0d5f3a-5b1e-4f77-a522-80115faa6214\nfb2d8e3e-c5ce-44ef-a0ba-55568e7046f8\n1a7304fd-06d8-411b-8905-265f3037aeda\neb76452b-c066-4abf-adb5-5fa8460c530f\n11212451-e605-477d-af00-4c0d42177b30\ncadb1438-ebd6-4b93-9822-75b4b00d1a78\n4f12207c-d07f-43e5-ba60-b5377c7998c9\n54a4c76f-72a8-4186-8317-2e8c6883cd8e\n9328fe75-4c1b-4d18-b03e-912284cd1a59\ndc990791-1b99-4d7b-af71-9ecb82adb7d9\n2dffa045-24b2-47ae-88d3-fc5a791a6743\n9385b603-c229-48f3-a300-3669c1121a11\ndc91b505-322c-4019-8b8f-c624ba72fa3c\na918e00b-2529-4ca9-99c6-1dcc7157a70d\nb31fac9e-6f71-4f3d-9a13-ad52275a9eb4\nd6a67129-1668-4591-aebe-78991e2d6640\n9a2c6f28-6c87-4fb1-8bbc-7d31f53a935a\n4a9bab52-019e-43bd-8a32-78de2fbb5133\ncebff757-f61e-445b-a19c-a8b0d3ba2e40\n1cc60228-d19d-4137-ac4d-73f81f4fca7b\ndb875694-a6f6-42d9-950c-ccf3274f230a\n2ef7d3b3-2a42-4e8b-ba0b-24ce482fc006\n27e84841-cc73-439e-a7c8-e6b1beec5cca\n803fd62b-6c6c-4050-9f89-58d952f26e2c\n9b667165-8193-4c23-a08b-0da0d7f1dae2\ne3b8db9a-d515-482e-9b0c-941e657a4943\n8592c306-900b-4004-ac8b-1787e12ac723\n7e90362c-4742-4e39-bf17-c4406dd2edd2\n57fc3333-96f7-48bd-8530-f76021cd86cb\n1802c46e-ccfd-44a7-a6c0-0e21d82e5d51\n75fd18f9-88a5-4cf5-8f44-7ab4a377766a\n6e03c0bd-8c14-4957-b032-ea8b1aba4046\n9b5275ca-bd5a-44dc-b49e-d31d1de5a6db\n22157411-a0fd-46a5-9d54-48950d886e4b\n49d7447d-0444-499b-b419-57814f74f621\n3079d698-701f-48f4-8372-963e90c67d26\nf796e06b-9b70-4fff-9a96-8bc0e2038e86\nb5667bbd-6513-4304-8978-6f407c71273d\nb71d353a-1fb4-40a5-9176-06cc7d3533ed\n39caa167-a9cc-471a-9d65-b36ef888475f\n62c2fe7e-1df7-46ff-91f4-5facacdbe32a\n1640b1a4-4d05-4c7a-a653-df3c0e0c4dc5\n8c655bbe-7a08-47b6-a7fd-3764d4055a73\n271d4a69-1ea5-470d-8cd6-a246be6d7b82\n4ee89e65-15c4-4253-a989-fa704caed9d9\n0f9377c0-22c6-488a-b64c-6e15612ea6c6\n428a7681-1920-4e77-a306-98a2b79ab392\n20a5d033-d2b6-434d-b217-58648b7c6539\n1108c23d-b0b0-4e53-a5f4-2bde2260faf3\n19778682-9fa8-4dfe-ae45-6db7b9e99c76\ndfb4592b-238d-48d8-8f12-847ab3a24735\n608f9704-90cb-4b39-98fc-9c344bdd3b5d\n4529115c-d36a-466c-9e99-2ab8d86e1f01\nac265131-518d-4b60-a21e-b41dd107ee53\n4cdc66fe-8770-451b-b6c4-e6f448d995b6\n1552da82-b379-4f3e-9ae2-974133263d36\n5c4fc4e8-73e1-4a21-8bbf-029782acef89\nff472293-9d22-40a2-b46f-ed3ebfe2e907\nff4c43a9-711a-4b90-ad57-631d19aed8a5\nf1577207-1e66-4561-9a8c-0a49acc7e7ec\n3d25f8fb-23b6-4076-a180-31c8e9d81aab\n7cf038b6-8a23-4e50-8902-26073bccba6a\n9a47a270-c893-42c5-b182-a41b4091e7e8\nfbea616a-7c1c-46e9-9d9f-37b65eb26816\n38f78c2a-e9df-473e-b988-3c0bd9c20eb9\n909f8090-df4b-44c2-ac33-5cd111c9faba\n80418b48-3b72-4125-ba2a-d65bc2f32dcf\n4f593574-dd17-46c3-8649-da129f9ececd\n95d0ca8f-20f5-42ef-a2b4-b34152f21385\n6f473d7c-86d4-4ba0-810f-c6676f5619f9\nee18ae7c-6223-4cc5-9391-439d2480485e\n20458d8e-f4ec-4f01-a717-9e03f0cc4f16\n7cf54ce9-43c9-4ba8-a66c-961cc5a80f2f\na0b7a383-369d-47ce-9852-2492f1e78c31\n7b7db8d4-0b12-49b4-8978-79703b6230a3\n30e6f7d9-0871-4951-9cb2-34079e5bc18c\n390538a3-4b4e-4bbe-a1bb-ad94e549cc80\n509a5dcc-eaf0-4526-8fa0-1ef0a540f57d\n2ea0925f-4d8c-4f2d-b6e5-6091ca9beb17\n560538ab-d863-4056-92cf-467126aee061\n39bc2179-b2b1-40b4-a671-c75e2711e859\nf7d5aa0f-be5e-4a33-b892-520e97dfe51b\nfada0bb3-0c85-4bc9-8798-53315f4386ec\ne57215a1-d085-4a74-b9dd-39adf70086bc\nf899daf0-dc45-4279-b708-31a580527672\n80bc9a58-f284-46c4-b25a-8c885eb5fc01\n65fba6c2-90fd-46ba-a625-a99061cb6e5e\na42ef57b-c3bc-4b41-a2f8-26dc4c39c4fc\n5bf4d666-0aa1-4f3d-a407-a7d1ea3ab779\n25f8bf50-d30a-4e92-bbec-0f1624a82d30\n634fa30e-6036-42ea-bc2d-6f7ef4d92ee4\n89a52ce7-c11b-46bf-b96c-8709a78bcdfb\neadf8be5-66fc-4fe0-9116-e8ef98b93e0e\n770055be-daa8-4f80-8708-e3a69293e7ab\nfbdb1865-1ad5-42d8-a7b2-fca48bade2aa\n2d118793-c2a4-4d9c-90a6-6ddc874d6531\n24c5d161-3126-444b-8ab5-afd27c0279d1\nba654d80-6289-4a46-9b45-1a72ff82c1a4\n038427a1-2459-4f97-9d4b-81dbb6176ebd\n24978f36-9406-4d36-beeb-8e0f14c76d1d\nc5e1bbfa-c15b-46dc-a92b-b6f0f8dd630f\ne253d5dc-2205-4569-8a9e-7f1edf01f8b1\n49835854-de4b-4b48-b51d-03b8b3104756\n9c30bee7-417d-4eff-a578-2a1791be946c\nd77d6c08-5118-4af8-9741-94ed2a8121c5\nff5bd7b3-e929-45cf-8fdf-e482234c14a9\ne95c056c-5be4-475d-9ddf-4b0b0b686fe0\ne04bb97c-87f6-4230-8adf-8ee7c2cbc489\n1b297d68-0a63-43cc-ac56-3a18a2ef89f1\n29921bee-349d-4212-a829-b6cf00b76d59\nf7abf564-3d8e-4dc9-9801-a96196b35e02\n7a70c36a-112b-4854-9a7d-8b1c295f6572\nea492f3c-f48e-4153-95d1-35f108d4fb85\ne5fa4f68-128d-44f5-bb6a-99b160e71e51\nd0c60086-708f-4a8d-a3e4-ba1c3b796171\nc4108c3b-3f3c-42c2-91ca-2d69ee17cb27\n160a1a7d-3b10-4661-8f81-ba91e252625d\n60beb5ac-cd51-4bc7-bed9-e183e04688a7\n9bfdb502-fe7c-49e4-875f-c66d65c18702\nf835414f-298f-49b5-81e4-568b32f7a948\n9730fca9-399d-49b4-8122-3eaccc5d1e6f\neefee307-1fd8-42bc-a535-121f8589d021\n4f4a191a-9951-4fed-b69b-7b2d7a2f3629\n866299fd-1309-4204-a9ee-ee479d2083d0\n2b0fc030-6935-49d5-82eb-01ecec698aab\n9bfdbb89-f25e-4a18-9b2d-73227e3f72b3\n527f6ea3-b787-4e4f-a135-71e73c60efd8\n31f5fdb0-b3a9-4177-b419-a71d15c405c1\n3cf0cd5e-a9a7-4f82-9ccf-4141d87ef03f\nd37423dd-f2ba-4cd1-a36a-aadf63f9a305\n1d43c2a6-70c0-4ee0-8bef-7d024fb2205f\n986e3a7c-3340-4102-987e-764d8a402f31\n3e053b6c-ddb2-4e6a-8a1e-6e1fb92fd40b\n85823060-ce2e-4557-8b10-920c5bf1c3e8\nd80b6796-adb3-4cfb-a14d-3cb01e429c65\n8a888d16-86cd-40d2-8256-25dc847cb5f7\nd8bc8646-279e-4ff1-bf95-a02550af0fef\n802ce47b-1754-40d3-9944-c347394088cd\nb81574a6-550f-42f3-a780-91537a6e82dc\ndc8d8e8e-12c4-4b4f-952e-0d061cd572de\n144824ba-1660-4285-b026-123cb71d724f\n039c286f-c37a-461c-95ab-ba0642c52753\n2cca53af-6d46-436c-a6ae-199386f30153\nf6ede99d-de4b-4b28-a3da-64300c50c231\n6ee2633f-d24b-44d0-a856-445820b4aac2\n88bc33e5-d290-4244-b896-a7b6b80bd30f\n9214952b-5801-4682-9833-0df7e8eea956\n96cc6314-9d8e-4789-bba7-0d4df6335e38\n7cec5f34-d73e-42db-bbe8-277faabb822c\n68e990a3-a2f6-4dce-96f2-c01c901ed0a1\nbd533da0-7367-4d9a-8d1f-a03c3270f704\nf75db18b-d4c8-4782-bf38-dc8bc14b52e0\n5cb97525-c0e1-4c2a-8668-1cf6e82c4b1c\nb12f05b5-22a8-462d-8bb1-253cfc4e6a31\nff7a14e2-a780-4e8f-bf1b-46c23b56e247\nce2b7df2-9bf6-4a9a-ba5d-dfc01e5b6af2\nb99589b4-388d-4473-8754-b4d858f687c3\n3b54c494-4c2a-485f-ae21-8b11190bc21f\n7658d05f-a088-43ce-8a49-c5b660369c9b\n546a01d7-ac7f-42a9-a1b1-bf10608733b3\n83860400-3b12-49e8-a980-9ca3b87043cc\nf6437a20-5b76-4f95-8c9a-6109b52e6f38\na5d556eb-df97-4f53-8a54-68c28389b8be\n9fa89e6c-f5a0-41d8-8ef8-4e342091605c\n356b19e3-c892-4002-9e7f-54bb9e097b51\nfa75469c-38b7-4df0-bad1-aac098c0ba92\n05fd1fa8-e8a4-404c-abac-7750b18ca7db\n2a187139-e314-475b-932f-b119d6a5162f\n60cdb135-0003-46d0-9564-cb1e92703b1d\nf7ba1fe9-f8f1-46fc-b68c-1713c7d36c27\nec432a98-ffd3-44b5-9c89-ee5076afdea8\n4406c41b-d7db-4096-8c93-43d394dda3c5\n44ebd9e9-a656-48ec-b3c5-3a44e17fa634\nc93ba585-502b-4bda-b2ed-260bd64ee790\n8328917d-904e-4531-8a22-65fb3c2d7bfa\n24e3ad54-4f7e-492b-8372-bfe79bbc2ee8\n04452c3b-4e2b-4b7e-aef8-d500fe13089f\n6ed9fc70-5dd9-4708-aa56-83faa6328cf4\nc698e18c-5bc3-40d6-9bca-d06f60239738\nf3d8fe7b-c2b9-445e-afb9-d7e3ac2c7703\n6c93132e-9c9b-40aa-9879-673822745711\n17ff768d-f7e6-4f40-9db7-573afe8ee15c\nee2f0aad-0e9b-44cc-90c5-cb74081382c5\n8a60993e-ee10-4be9-919d-a2f7c10bc481\n83834204-a58b-4394-b927-73a7d82741ea\nf864225c-ba7e-4ff7-be5d-544374635fb4\nc46c7cd1-3659-4d17-bbc6-fd29d835493e\n256fd89b-9041-4e0e-a12f-558b0c1b8820\nb0510e5a-0fe7-4a70-bf5a-f6cbea14c85e\n02f9b809-1d5f-45f8-8510-082225e80860\n6d99ecb8-b19f-498e-8b79-2a9c2690faaf\ndb0710da-6191-4ad1-ba03-44b8353824a3\n7d2e7429-26d8-4ce1-979d-77280296e1b0\n856afbd5-bee6-465a-8a48-9b0b50f76995\n991acfa1-4178-4580-8ee6-0894a871bbd9\n412936a6-12e3-42fa-9371-53ac1241be52\n93555bad-2a7d-44ec-a15a-f92c4d4246e6\n7e0f6878-08d7-4e74-8601-9ac3c16c01b6\nab753cc5-be58-4b4d-973d-23c4fd5f7c8a\nf8826204-80c1-4fcd-8e71-ca061dc6feac\n9b0e8207-e7f3-4844-bf13-e61f3ca3b006\n041e3451-4f55-48f2-aa18-3f0b0e4bc786\n0537406a-9b1e-4a8f-add1-f47cb45331ab\nf0e8b032-67c6-49ed-ab23-759a32d4e14a\n1f064851-9110-440a-8d86-e88859255a8f\nf38b901c-1b92-4af9-b241-f825502beec9\n9a2d2d9d-47ba-488d-a8d9-6ea8f7d5ede4\n7d1547d5-afe9-4674-ad00-460876b3d0e5\ned68cd1f-4b0c-4183-936c-6a72579c8584\nd4369943-d17d-4319-9e52-654481ecd353\nd004f87f-0727-45e1-9ff6-b96b0c1fa107\n1a883dc5-8550-4b33-9e52-e905d1f3ed23\nbefb5d9c-6fe5-484c-b79c-999d4ccfe44f\ndac86b7a-6eb6-4f63-b0f5-e10f3ccd4341\n4bf81e81-d17a-447c-81e7-8dc41caf6698\nb2b5ae26-83c7-432e-aac4-3d367d51c142\nea244740-8b8e-45d8-b1c3-30700d24fbb8\ncbc48dd9-0c4e-4639-b1f9-32b2a4707723\ndbc41b1f-4cf5-4594-bc6e-a0164123e810\nc81a5da5-d5c5-4c86-8206-5d2fcd695028\n02e14eb7-96a9-4d58-a7c5-f6b3a3793263\n5144b55d-7c32-4688-9a8b-3ceb99815de7\nafc08a74-0b21-4fc6-9bbb-b68224dc5e11\na91c0384-f62a-43fc-9fda-271bf136ef9e\nef510e91-069f-41e4-aae0-8dd0cf095ff5\n7fa4b338-edd7-48f9-9a1d-f866cb8c7bd9\n17947969-7016-4ce1-bee8-cccff50da296\n687ee06d-2529-423a-881e-e51261580d75\nf565026a-10e1-447c-a8a0-69235ab2ffd8\nde4aa965-42cc-41af-a76d-d8e17cb74759\n31be6b68-f6c8-4347-8d0a-03345893afcb\na20e8610-37f5-4e37-954a-bd20ef3cdd8f\n97fd3934-1576-41e9-ba52-e4bdc963d872\n232c69c0-1fe9-48a6-b75f-320f6d2c7ad4\n377b4437-8ddb-41ec-a23d-7b8f083e5bd9\na276f5fd-0e73-4d91-b21b-284806ffb81f\n67c21b28-b750-46c8-a630-ddad234bb80f\n7a52b1a8-fb0e-4afd-bd51-7104d6cd0556\nc3a80748-8649-4d7b-844f-f0888d2b4eeb\n7f90655f-300c-41de-9ad9-2b08b1e472e5\nc3aafbad-b228-41d3-a381-4d2b2995c715\n81f84781-56cd-4ac8-abfa-353e8e953bd9\n050eb1ee-b957-4b12-abb3-b9dc7fc7b122\n252e8114-c9f0-4047-afec-a6c680f823b3\nd89454ad-eaeb-47ba-b225-bd90040d94d5\n133f8565-ae52-4499-b316-331cb2c3f2cd\nb43665df-d4c2-4ad7-a0da-a88c2608dcf4\n88c39d58-df8e-49a1-802f-b41d9a24f046\n8288c9e5-0600-46f0-89b0-db4507c34686\na03c2c8b-0051-42fc-a5d5-9619e7c0bb39\n909b5684-7e5b-48d3-b774-c069a6a73163\n21b46010-fa3e-4fad-960f-c29ab291dfb7\nde9122ed-e54c-4f15-99e1-369c9a5d7d85\ne37797cb-5684-43e1-b2e4-ea563c74de60\nc8fa1637-1b3b-4175-bd5d-8c25128f6916\n39fe7936-8369-4e6a-ab80-f7bb4d423375\n75d7bef4-5815-445b-863d-f56637f7f91c\n89972ced-2c67-4565-96fb-65ae56627605\n56a4cb03-6978-4059-939e-97c35f8bdb0c\n608fc2fd-919d-44c7-8408-d36f36ea6059\n6971fb12-3745-4630-9945-bcda9ae9c75f\n823192dc-5d8a-4910-9d08-fe34d71cc6f4\n563c9415-221b-47aa-9c89-bb0d41255592\ncbcf0c56-2f57-484d-b5b7-5d2aee09bb79\nf6f91f91-ab83-446b-9b6d-5f6b4bf8fa29\nfdcc6cd3-6c04-4dec-a06a-9bc5dede69d6\nd38e19ef-aee0-4cfa-80f2-e986d314e64b\nf940d55b-81ea-4abf-b541-f7eaba354b41\n7c7bc95f-c585-4b7b-b504-29a4a46f8e30\n5138aaf7-589d-4db1-9a13-9c20347be45f\n2747bfd5-5f44-461a-b144-70146a58044a\n47f777c2-6696-4843-a3d7-e0f0f9c70494\n247e45ae-8ccf-42fa-8114-1ca48dc8bffd\nc3dc78d0-742b-4def-8f56-c5adfc9aec65\n024f40f9-1732-4b12-875f-0567a4f62df7\n660d1862-4ed6-4cf6-bbf5-eef03f711249\nb46ec006-7798-4e4b-b0bc-258d064f40f5\n5a401bb5-9086-473f-a295-3d62c9ca7c13\n5c0a3a24-08f5-447a-8f65-bc84c3f04d5d\n9d28d7d4-ea4a-495a-97a2-0dba4d56f259\n4bc25ea9-5a7e-4ff4-8207-9310200b5068\n9f0a397b-6eea-4d0a-998e-a256eafd7257\nb430d4e2-5a70-42aa-a081-2f6daaeb056a\n0f5d61e9-a2c0-4278-bfe0-17529e259649\n09c35a90-2ec0-4141-860d-7c9ea61a3587\n48ff7206-147a-475d-96fc-01f80d2a1b77\nffa79e06-fb74-4ae2-9d20-fcb7f3e71b69\n1a7ad399-448b-4b60-b3cb-ef854739f053\n7414bba4-c09c-4c25-b701-46a636f7f968\n188ea8dc-53eb-465d-8f3f-bbef814c971f\n097cca60-f96b-484a-a2c6-b8a2f99b7f4e\ndcf18e40-a481-4577-be8e-a7f285a08cab\neba0c30a-b2ba-4755-ab84-dd9dc368daa6\n9adc94f9-431a-46f1-b033-18bfa96c740f\n6eb688d1-c7a5-4f6f-aa60-d5b78db1cc86\n9077c201-7ac9-47a9-91c9-190244f55b57\nb2b90497-48e6-4948-bd0a-d986d2c215f0\n8c396ca4-4538-4f41-a1cb-31f72f95e4f9\n70549d6e-b7a9-4220-aa8d-98757ed1f792\n214bdbe9-0a28-4928-831c-be54bf9593b0\nbba05c32-d64a-45af-ad2d-fb35bac703ee\nf71f9c48-943e-496e-b9fe-f9092ef158b3\n9da12cf8-0b3e-429c-a0a1-bce2f7c76ed1\na713e20f-2f22-48cf-850b-7427540e25ae\n1c934d6f-5d44-42f5-a201-a592fc545809\n6dce96a8-c870-41aa-9221-b4db19539757\n34d5ee5c-ddf4-4e2c-8684-0deb7f30fccf\n061b80ac-b5a9-42a8-9ccd-60ad2c17f45e\ndb7ac469-4140-4546-b1ae-09637ba1c1ad\n0d6666b0-8e0a-4532-875d-26b686ad6765\n869c8741-4518-4956-ad0c-9efbc588f1ef\n46b4246d-8fd0-4d75-a147-5e631c228338\n90e2e32f-7ac0-42c7-96df-e1f54ee4081a\n4d0481d9-9509-4e58-8d10-00603ef4724f\n138cf4c6-c372-405d-8d0e-727b8f6c284c\n2b99a030-2949-4e5c-bbae-cd726baf37f5\n488b1a33-cc6e-45b6-9f7b-6fe6734149a9\n04a1e43f-d609-48ec-beff-29ea9ca872a1\n3bd254b1-6fef-46f0-9763-86749234a73f\n6a901c08-714a-4be8-a3be-f8acd50b1090\n416cc86e-a392-47dc-a580-12fd7c5daa22\n3d2a7eec-c3f9-44cf-8615-6dbb7da0d8cf\n27fd4d42-1597-4d8b-977f-0e45d039a123\n029061ad-7504-40dd-8104-fdb49e3b86e8\n94178883-8c44-49c8-9476-cae9f63dcf88\n4e141aa8-4c41-431b-8eee-7f4a0de5e32b\n4501f681-2afb-4f7e-b409-081945dd2365\nbac3c113-6ee3-4289-a107-137867dd3647\neaac2f55-f5f6-4397-98c1-b7be82510636\n67f4ee21-8c11-47be-a5b6-3d405ee7e548\n58147288-0cf5-442d-9bb3-20bc7a7ffd35\n94e0f9de-2dc8-4c61-bc99-f1added50c02\n26ad109f-286b-4dbc-b2e4-8ce0f8240a7e\n9e1fed81-7dec-40f2-b8f3-183616eb3853\n4e70fdcb-8807-4cd3-95c6-830be25d2066\n657e71d5-46ac-4b66-a906-4f4d138d5528\nea0c5ed8-438e-4c9e-8ee2-e9adf7fbe565\nefcd3e98-a72e-4672-a864-05f893cd48e7\n4671261a-d5d6-4764-8373-25d5735b5438\n965b5837-0650-4637-88dd-78a557260412\n039f03f4-95c5-4925-b78d-31003e1d6778\nb5b4aeea-fb48-4814-a3fa-ba1617979684\nbedd8d78-5b57-40a2-a514-219d29b621e0\n621110cd-3074-4df9-a138-f82bb84a0585\n27daee02-4473-4e9b-ac83-a90a86a9be90\nb92ae9d3-e67a-4c2c-ab50-fbaa067908c3\n32a96a9a-3328-440a-9a89-0f326e18387f\n89136436-3ccf-4bc7-8dbe-faa116755116\n68c9cdfa-2da3-44aa-b8e5-204ef8cd7ab1\n50e1e849-4933-4ea9-98fb-71b775a36e6c\nfd72a9da-5edb-420b-b590-35a082f3d782\nf648776a-e422-43b3-a763-ad58f33107e3\n44776007-70c6-475c-a121-ab5a5fb12ccd\n72283419-d136-4730-9a02-10d318c9d5c1\n9ad30791-8348-4343-878a-5755d91e50b4\nb5a2bd95-d97b-4b50-b015-c480455e2034\n3f1c8aaf-34d9-4b48-9776-e0dce0bd1f5b\n127bd9f1-3ff4-4db0-900e-f640c642c53d\n6a2a959f-8339-42ef-90a9-96944861dc14\n84b8d46e-dca4-4874-8ebf-6f7c24d08817\nc2b776df-16b1-4248-a3a8-b4d02fbb8cb9\n1bb2b65e-7187-424b-940a-eadddbf892eb\n034d2b14-1216-47d4-862c-c3f15d100760\nd0b9b8db-982d-459d-a7b7-46ac7036d686\n157572cb-6c59-4a00-a4fb-2137c2413352\neef796a6-e73e-4efb-861e-76e24c708ea1\na41e1652-0d8e-4cfa-a705-afa1bd5a0edb\nc7b6779b-2e20-4246-96a5-5015c41bcbab\n304d872e-0525-4bea-9c1e-bf84fdfcb4fb\n0703fc3b-6808-4a9a-9f49-cca695a4c583\n590762d3-fd9c-4e60-b90c-7ce4ea336cb2\n0fed61b1-7bfe-4424-9e40-bc5ed9700c9b\n0d9ca160-1c5f-4913-a5d3-9c06764c6be9\n02b8a3dc-89ed-4d48-ab95-3a7619beb291\n674d924e-4dc8-4d5a-8272-8da36f13adf1\n93c8c775-a441-4271-b33a-36675610d08f\n00b05773-5899-42da-aa29-d75c5dd23eef\n1e3096e4-7f1d-4bd7-8306-8a7c7c875472\n5657d6c3-af86-405b-9a77-43e34b9050d2\n6e3bb1be-f12f-4ca0-b138-5dff14fe26e4\n3b9952dd-6299-4809-a238-a46205b51167\n1f68a592-14e1-4a95-8918-07fc8eaa442b\nb6912173-b687-4333-a956-739a63925551\n58231107-d0a0-4c09-8e0b-ffdd2354bf69\n0bbf81bc-28dc-4b57-81ff-a6bf84b18e56\n08b3dd94-52ab-49ba-b55c-fb1061138d4f\n96c3d9ea-68c8-47e3-be7e-5d99b4661200\n334b6d1c-decc-489a-91ee-b821b2ea28c9\n9e1abc06-4087-4d3f-b303-e0130ae27bbd\ne8377f97-9fad-4491-a632-a217fe8330fa\nebaab53f-ec1a-4139-8bd5-d07668b504f6\n73673e99-cb61-4f58-ac3b-240951029cee\n48b94f0a-9e3a-498b-b270-cad6f4035812\nb4c7cc2c-7a02-4860-b8b6-6ba1359e17b5\n4e768ba5-7ccd-457f-91ff-de2d8fc0caa3\n407a4262-f3ae-409e-9200-2b98023c25b5\nc71ed2d3-13e0-48bc-acf4-3c0731b48d0c\n9af41e14-739a-4a0a-a388-57526b326f47\na807ccac-5920-43d7-a991-c78a2eb4a1ae\ndbdcc31e-29b2-4c16-b0f5-70360264330d\n8cf27189-cf7b-41a1-962f-9bd95550590e\ncd3af50d-31a3-4574-ba2c-1f2b312468cc\n89787406-dc16-4cd0-9782-475057ff3bcb\necb47dd5-000f-4058-a414-76bcc0eac095\nce8737de-c28a-427c-adda-5486d1dc6b7d\n1c4dd5e9-2465-47ac-82d2-aa7aa193a0e2\ne2cdafcd-8310-4e7d-ab62-1be41e616d3f\nfb755782-8079-4d8a-976a-85b4d11a3859\nb6f1124d-cf4a-4b18-94a1-fb7aa073a4d6\n3b99abfd-85e3-4ae4-ab4d-ac58234ff535\n858c9f57-9b93-4581-9d75-e8df5c99f760\na36c819f-07d1-4bdb-a349-b84176bc1f2b\n5c184e72-64d4-45b6-903e-cfa24dfa1b49\n498dcc27-c3fb-461f-84fa-844641e6713f\n4d4ac4b6-7adf-481c-9cf9-e6d039be8f52\n060c91ba-4db5-4ba9-8968-9e6f6a9d4696\n41bbffed-aef4-4463-bb78-21f003b6f3da\n089f551a-5907-4a83-b7f2-2bf59b6e9592\n3b50c3f4-9caa-413a-a550-441d0f9568b8\n70db0b45-fdbf-40a5-aaad-a0dc8731ff34\ndb656ec3-fcd5-4662-b472-d4019f0de975\n6b45d969-c59d-4861-af16-258d732d14d1\n9f1d3f09-5ae0-4831-9c98-ee0075484ea0\n89585950-5807-4f91-986e-35e1bc3dc45f\n719b425e-e166-44cf-ba24-bda657ecdea5\necd54446-f8f2-4feb-8ad0-7eba4a40080d\n1434e577-8f35-4c9f-85e7-2d771e80715b\n890c73f6-0dfc-4c68-9403-b35b31694a16\n61420f46-4409-4a28-9bc8-9430b31a4f43\n2e23b166-0a18-462f-b70d-92ca5fcd442f\n2eb484f8-4219-4608-8f51-dc3ec40b0178\n75f298ee-a814-41e6-a47b-775503998e2d\ncee0e876-ca8f-4d29-96af-3e7bcf47e3a8\nfdf8d467-4a48-455e-9174-23e0dcc53dc8\n8c78e531-8c78-447d-b066-cc813acb5460\n22f0e332-7d04-4193-a6c8-c83c252e892a\n5d045cab-0196-43ea-b0ed-fc38aa08f517\n6f012c11-e235-44b4-80ec-f4ed5b0e745b\n2f95ed37-73ab-49a4-b1ec-4ad35805816d\n82a45048-3876-4318-b7ee-9b4dc70f6b0d\n0a63ce21-7b9b-4477-bdce-868ce1b3e22f\n4d8cb173-0bd2-47c5-a82d-b3746c6579a0\n9b1ee361-ebde-4197-aa6c-b5692c35c871\n67635849-2c63-4a28-ab96-4c181a8d6154\nc370af42-fbf7-45c3-b22d-44958696c276\n5f93900e-3962-4721-90af-5c8396ce038d\nebd69af5-21a5-4e37-910a-ae5b934b822b\nd049c6a2-f8b6-4788-ab62-00e86f4de45f\n975f6c30-28a3-4556-b8c0-64189bc08796\nb2e204b1-1894-4b2c-ba2c-b705a3ccd51c\nb87db17b-31d1-44df-b7fe-58c5215763d9\n8ddd334f-c4d4-434e-accf-ca9373ec939e\n61ade247-81ee-48e9-aa07-5deaa7c0158a\nc832f5c0-3cb8-43aa-9bae-ead35d3c8cf4\n11f9189c-97a8-499a-bcf3-64640049f5db\nd9e3f7e9-62b0-4477-8d76-f85e951fa217\n8ad09007-e934-47a5-99e9-ad3d3c902879\n4fbfbcad-84a2-4c43-8418-c68ae45defc7\na4719bf4-f340-4ae8-9c24-ee3bc0f06a5b\ne0a66a37-e896-4bde-b8fc-56bc24293cc6\n0ce01f01-c836-4d71-b790-a7a6e3d0be88\nc893f96f-d406-4f27-afb3-a63c0f004c57\n5607312e-fa06-4949-884a-3299c7805948\n7ebbb663-3643-45e4-ad77-fef7aa4b4aea\n8b3865b1-6cf4-4bd9-9035-00bfc996387b\n69e0c73e-9792-4664-aa85-096834e115bb\n0257a25a-91be-4925-848a-b0be09d3b756\n5a6e5c15-df06-40d4-bf3e-b744dabaced9\n01276138-4db7-43aa-b687-29d7ea05e2a2\n2639437c-a5c8-4d36-9caf-03614ccda6d0\n7e980393-4f8b-4e36-9eab-19db3769cfa3\nec42659e-3fea-4066-acf1-0381e51fbd56\n63daf0d1-3b03-4979-b826-adcfc6e9d466\n37215c12-f426-4706-a6bc-8490946358dd\nb9d01144-2c4d-4600-94be-a5e67ccbdc0c\na756d568-c772-4ca8-bd65-6bdde5fe8da1\n83f4aae7-893b-4d31-b31c-5de077e0dfc2\n6c0b6751-0494-4fc7-ba09-44446a2c5d9e\n362616ce-6c4e-4469-941f-53acfe400e27\n22fc8538-76d3-4be6-bb53-30473746ef33\nf99fd7f4-9d92-43da-82b2-4e085aa8092d\n9b5ecd84-1961-4fe9-8ebc-1b2dcab84348\n795b527c-c05a-44a0-b4d2-3266ab05428c\n3a099552-5841-4dd9-9077-a43aeb42464e\n96195d5d-3385-410b-afd3-784de1f3ca9a\ndad4103b-c8d6-4a41-a2f2-4faa03b48283\n6420409d-3b28-45d8-8e22-acf6852b3f68\nb4b816b5-eca3-4bbb-bf2b-a5a15e71a7b1\nd74e5b35-b775-4fd9-9720-9d0966435940\nfa79c098-1ef6-4790-816e-044d56a5e608\n4a55a8ad-24ba-4272-923c-e31673711c96\n2d3be876-929f-450f-97b2-d9a1de1b57e5\n727eb3c4-4c36-4078-87ed-bf01e86751b1\nd31a2b1b-5da9-4a14-a02c-dd0507fb966a\n9faa7f06-adb6-4811-b11b-b39312455eb8\n4b2ba0ae-3f90-4c33-aae6-7e8ba2c41482\n22da9abe-fbf3-406c-aa72-0056f852def1\nc463f407-9a4e-49a1-a3fc-bc9018c33e85\neeaa61b5-afaf-4825-ae71-76ff445bb059\na8ccea2b-f575-46eb-af96-11eab4e45651\nde1bea52-cd16-458e-b951-c909e5c9e992\n5ec93294-5994-4f36-b361-5bcbd8938154\nd186924e-b6f7-4194-8407-c4c30de9c70e\nf3a19960-2df2-49ff-b791-3f33448faef5\n8e582739-e578-4716-b3fc-c13602f18f7c\n7749f5f9-7ab7-42d3-91da-4defc4a466dd\nf08bc4ef-1d93-4cfd-8e63-c8d54aef86f5\nd15928cb-83ef-4c97-83cd-6e4ed77671fb\ncce97553-14e3-4869-8f1d-8fd7ff915acc\n13168b12-1991-42b2-8af1-a7cfcf50cf75\n866537c6-c453-4582-8581-acc16ece4a62\nb3c8b720-8c93-4a10-8b94-afab818b9aad\n9c85ae0d-e411-4fba-83f9-c937ef27f238\n1a43a2b3-84e5-4fe8-ad05-709fae6e8796\ne8f33b71-1129-4059-82d1-08df42ebbfff\n50d11a3a-9f14-43e1-98c2-31e8e915fa1a\nacd72a9a-a137-4f5e-a3ab-5b9b34d8106d\n11355bdc-c2e9-45fa-ae2b-9e2ce180177e\n766399ec-6e83-4832-9073-4a8c4c9b1c22\nbee0d686-4a81-49b6-8a33-b9350c32549e\nd901f30b-4e75-4a08-b0ee-81bc4e5683c2\n17d19110-a409-44cc-a9c8-3692eab13a4b\nd0a4cd9e-48f9-4c4e-8f71-5287c582d544\n9e2d0390-3542-4bf3-a328-4f06ef77ffae\n14d13eec-2e67-4e92-8c5d-93358585cdf6\n153f58ce-5325-4335-ab73-90855c94ce7b\ne6efa260-41cd-4ce4-a3cc-53d5371f7dd3\nb75d012d-b5ee-49dc-814c-362e6ac7044e\n806d2710-8b9d-4c8c-9bdf-a3015a860db1\ne4492f0f-5ee8-4ea8-929b-4d88e8082886\nb8cd5aa6-1aff-4f39-9b2b-04f90b3c45f3\n8aec491a-392b-422e-aa96-2fc35bbd32c0\n53025710-34af-4f23-ba56-c0d796a51d5c\n908131ea-4f3f-4745-aaee-10caf74a7367\n50a60cc8-94de-4df7-9a69-e7c91c69d623\n5368b979-394f-4ec1-aeac-8ed9f7280828\n68c5eabe-9d6b-409c-aa2b-9c88182acde2\nf2af3465-c65f-46eb-98ba-193ca12acb7d\naa1d9e44-b849-4ee7-a8ca-bc4032bac35b\naced2e8f-f17f-4ef4-962c-02eb79531396\nfacd4e07-4bd6-45aa-9fcd-91f9b600dac2\n175cd2b3-60fc-4f6d-bd51-17b34f2a5166\n97213274-508e-435b-bdd0-55d79e00933d\n1f4974da-bf95-457c-a94a-01af20f1c98d\nbf02e05d-64d9-48ff-820a-a8dea5c19d1a\n23882729-c148-491f-91b8-b92d07e44cdf\na4ac9a8d-a9eb-4906-83ed-57bd2842a5a0\n7ef50f55-6733-476f-a1b8-83efa5ba86d9\n0a587932-4b8b-4c4a-9818-e87dbb65fd4d\nc236324d-88d5-4634-90e4-b4b4bb866c90\n57564153-d43c-422b-a8f8-19d9d2749e25\nc28b2dcb-1e44-4730-86a1-1614d2c8e252\n19841720-efe6-4fc4-b939-5234b38a0795\n451965b3-58d8-4a84-98a6-f9381fec889a\n1541c21a-984e-4c3a-bfc2-652f8bef73e3\n1c1f16fa-a5be-4d42-86f5-213cab7fc20c\nb801bfe7-d332-4cf4-a253-269dc6b91121\n"
  },
  {
    "path": "watchman/thirdparty/libart/tests/words.txt",
    "content": "A\na\naa\naal\naalii\naam\nAani\naardvark\naardwolf\nAaron\nAaronic\nAaronical\nAaronite\nAaronitic\nAaru\nAb\naba\nAbabdeh\nAbabua\nabac\nabaca\nabacate\nabacay\nabacinate\nabacination\nabaciscus\nabacist\naback\nabactinal\nabactinally\nabaction\nabactor\nabaculus\nabacus\nAbadite\nabaff\nabaft\nabaisance\nabaiser\nabaissed\nabalienate\nabalienation\nabalone\nAbama\nabampere\nabandon\nabandonable\nabandoned\nabandonedly\nabandonee\nabandoner\nabandonment\nAbanic\nAbantes\nabaptiston\nAbarambo\nAbaris\nabarthrosis\nabarticular\nabarticulation\nabas\nabase\nabased\nabasedly\nabasedness\nabasement\nabaser\nAbasgi\nabash\nabashed\nabashedly\nabashedness\nabashless\nabashlessly\nabashment\nabasia\nabasic\nabask\nAbassin\nabastardize\nabatable\nabate\nabatement\nabater\nabatis\nabatised\nabaton\nabator\nabattoir\nAbatua\nabature\nabave\nabaxial\nabaxile\nabaze\nabb\nAbba\nabbacomes\nabbacy\nAbbadide\nabbas\nabbasi\nabbassi\nAbbasside\nabbatial\nabbatical\nabbess\nabbey\nabbeystede\nAbbie\nabbot\nabbotcy\nabbotnullius\nabbotship\nabbreviate\nabbreviately\nabbreviation\nabbreviator\nabbreviatory\nabbreviature\nAbby\nabcoulomb\nabdal\nabdat\nAbderian\nAbderite\nabdest\nabdicable\nabdicant\nabdicate\nabdication\nabdicative\nabdicator\nAbdiel\nabditive\nabditory\nabdomen\nabdominal\nAbdominales\nabdominalian\nabdominally\nabdominoanterior\nabdominocardiac\nabdominocentesis\nabdominocystic\nabdominogenital\nabdominohysterectomy\nabdominohysterotomy\nabdominoposterior\nabdominoscope\nabdominoscopy\nabdominothoracic\nabdominous\nabdominovaginal\nabdominovesical\nabduce\nabducens\nabducent\nabduct\nabduction\nabductor\nAbe\nabeam\nabear\nabearance\nabecedarian\nabecedarium\nabecedary\nabed\nabeigh\nAbel\nabele\nAbelia\nAbelian\nAbelicea\nAbelite\nabelite\nAbelmoschus\nabelmosk\nAbelonian\nabeltree\nAbencerrages\nabenteric\nabepithymia\nAberdeen\naberdevine\nAberdonian\nAberia\naberrance\naberrancy\naberrant\naberrate\naberration\naberrational\naberrator\naberrometer\naberroscope\naberuncator\nabet\nabetment\nabettal\nabettor\nabevacuation\nabey\nabeyance\nabeyancy\nabeyant\nabfarad\nabhenry\nabhiseka\nabhominable\nabhor\nabhorrence\nabhorrency\nabhorrent\nabhorrently\nabhorrer\nabhorrible\nabhorring\nAbhorson\nabidal\nabidance\nabide\nabider\nabidi\nabiding\nabidingly\nabidingness\nAbie\nAbies\nabietate\nabietene\nabietic\nabietin\nAbietineae\nabietineous\nabietinic\nAbiezer\nAbigail\nabigail\nabigailship\nabigeat\nabigeus\nabilao\nability\nabilla\nabilo\nabintestate\nabiogenesis\nabiogenesist\nabiogenetic\nabiogenetical\nabiogenetically\nabiogenist\nabiogenous\nabiogeny\nabiological\nabiologically\nabiology\nabiosis\nabiotic\nabiotrophic\nabiotrophy\nAbipon\nabir\nabirritant\nabirritate\nabirritation\nabirritative\nabiston\nAbitibi\nabiuret\nabject\nabjectedness\nabjection\nabjective\nabjectly\nabjectness\nabjoint\nabjudge\nabjudicate\nabjudication\nabjunction\nabjunctive\nabjuration\nabjuratory\nabjure\nabjurement\nabjurer\nabkar\nabkari\nAbkhas\nAbkhasian\nablach\nablactate\nablactation\nablare\nablastemic\nablastous\nablate\nablation\nablatitious\nablatival\nablative\nablator\nablaut\nablaze\nable\nableeze\nablegate\nableness\nablepharia\nablepharon\nablepharous\nAblepharus\nablepsia\nableptical\nableptically\nabler\nablest\nablewhackets\nablins\nabloom\nablow\nablude\nabluent\nablush\nablution\nablutionary\nabluvion\nably\nabmho\nAbnaki\nabnegate\nabnegation\nabnegative\nabnegator\nAbner\nabnerval\nabnet\nabneural\nabnormal\nabnormalism\nabnormalist\nabnormality\nabnormalize\nabnormally\nabnormalness\nabnormity\nabnormous\nabnumerable\nAbo\naboard\nAbobra\nabode\nabodement\nabody\nabohm\naboil\nabolish\nabolisher\nabolishment\nabolition\nabolitionary\nabolitionism\nabolitionist\nabolitionize\nabolla\naboma\nabomasum\nabomasus\nabominable\nabominableness\nabominably\nabominate\nabomination\nabominator\nabomine\nAbongo\naboon\naborad\naboral\naborally\nabord\naboriginal\naboriginality\naboriginally\naboriginary\naborigine\nabort\naborted\naborticide\nabortient\nabortifacient\nabortin\nabortion\nabortional\nabortionist\nabortive\nabortively\nabortiveness\nabortus\nabouchement\nabound\nabounder\nabounding\naboundingly\nabout\nabouts\nabove\naboveboard\nabovedeck\naboveground\naboveproof\nabovestairs\nabox\nabracadabra\nabrachia\nabradant\nabrade\nabrader\nAbraham\nAbrahamic\nAbrahamidae\nAbrahamite\nAbrahamitic\nabraid\nAbram\nAbramis\nabranchial\nabranchialism\nabranchian\nAbranchiata\nabranchiate\nabranchious\nabrasax\nabrase\nabrash\nabrasiometer\nabrasion\nabrasive\nabrastol\nabraum\nabraxas\nabreact\nabreaction\nabreast\nabrenounce\nabret\nabrico\nabridge\nabridgeable\nabridged\nabridgedly\nabridger\nabridgment\nabrim\nabrin\nabristle\nabroach\nabroad\nAbrocoma\nabrocome\nabrogable\nabrogate\nabrogation\nabrogative\nabrogator\nAbroma\nAbronia\nabrook\nabrotanum\nabrotine\nabrupt\nabruptedly\nabruption\nabruptly\nabruptness\nAbrus\nAbsalom\nabsampere\nAbsaroka\nabsarokite\nabscess\nabscessed\nabscession\nabscessroot\nabscind\nabscise\nabscision\nabsciss\nabscissa\nabscissae\nabscisse\nabscission\nabsconce\nabscond\nabsconded\nabscondedly\nabscondence\nabsconder\nabsconsa\nabscoulomb\nabsence\nabsent\nabsentation\nabsentee\nabsenteeism\nabsenteeship\nabsenter\nabsently\nabsentment\nabsentmindedly\nabsentness\nabsfarad\nabshenry\nAbsi\nabsinthe\nabsinthial\nabsinthian\nabsinthiate\nabsinthic\nabsinthin\nabsinthine\nabsinthism\nabsinthismic\nabsinthium\nabsinthol\nabsit\nabsmho\nabsohm\nabsolute\nabsolutely\nabsoluteness\nabsolution\nabsolutism\nabsolutist\nabsolutistic\nabsolutistically\nabsolutive\nabsolutization\nabsolutize\nabsolutory\nabsolvable\nabsolvatory\nabsolve\nabsolvent\nabsolver\nabsolvitor\nabsolvitory\nabsonant\nabsonous\nabsorb\nabsorbability\nabsorbable\nabsorbed\nabsorbedly\nabsorbedness\nabsorbefacient\nabsorbency\nabsorbent\nabsorber\nabsorbing\nabsorbingly\nabsorbition\nabsorpt\nabsorptance\nabsorptiometer\nabsorptiometric\nabsorption\nabsorptive\nabsorptively\nabsorptiveness\nabsorptivity\nabsquatulate\nabstain\nabstainer\nabstainment\nabstemious\nabstemiously\nabstemiousness\nabstention\nabstentionist\nabstentious\nabsterge\nabstergent\nabstersion\nabstersive\nabstersiveness\nabstinence\nabstinency\nabstinent\nabstinential\nabstinently\nabstract\nabstracted\nabstractedly\nabstractedness\nabstracter\nabstraction\nabstractional\nabstractionism\nabstractionist\nabstractitious\nabstractive\nabstractively\nabstractiveness\nabstractly\nabstractness\nabstractor\nabstrahent\nabstricted\nabstriction\nabstruse\nabstrusely\nabstruseness\nabstrusion\nabstrusity\nabsume\nabsumption\nabsurd\nabsurdity\nabsurdly\nabsurdness\nabsvolt\nAbsyrtus\nabterminal\nabthain\nabthainrie\nabthainry\nabthanage\nAbu\nabu\nabucco\nabulia\nabulic\nabulomania\nabuna\nabundance\nabundancy\nabundant\nAbundantia\nabundantly\nabura\naburabozu\naburban\naburst\naburton\nabusable\nabuse\nabusedly\nabusee\nabuseful\nabusefully\nabusefulness\nabuser\nabusion\nabusious\nabusive\nabusively\nabusiveness\nabut\nAbuta\nAbutilon\nabutment\nabuttal\nabutter\nabutting\nabuzz\nabvolt\nabwab\naby\nabysm\nabysmal\nabysmally\nabyss\nabyssal\nAbyssinian\nabyssobenthonic\nabyssolith\nabyssopelagic\nacacatechin\nacacatechol\nacacetin\nAcacia\nAcacian\nacaciin\nacacin\nacademe\nacademial\nacademian\nAcademic\nacademic\nacademical\nacademically\nacademicals\nacademician\nacademicism\nacademism\nacademist\nacademite\nacademization\nacademize\nAcademus\nacademy\nAcadia\nacadialite\nAcadian\nAcadie\nAcaena\nacajou\nacaleph\nAcalepha\nAcalephae\nacalephan\nacalephoid\nacalycal\nacalycine\nacalycinous\nacalyculate\nAcalypha\nAcalypterae\nAcalyptrata\nAcalyptratae\nacalyptrate\nAcamar\nacampsia\nacana\nacanaceous\nacanonical\nacanth\nacantha\nAcanthaceae\nacanthaceous\nacanthad\nAcantharia\nAcanthia\nacanthial\nacanthin\nacanthine\nacanthion\nacanthite\nacanthocarpous\nAcanthocephala\nacanthocephalan\nAcanthocephali\nacanthocephalous\nAcanthocereus\nacanthocladous\nAcanthodea\nacanthodean\nAcanthodei\nAcanthodes\nacanthodian\nAcanthodidae\nAcanthodii\nAcanthodini\nacanthoid\nAcantholimon\nacanthological\nacanthology\nacantholysis\nacanthoma\nAcanthomeridae\nacanthon\nAcanthopanax\nAcanthophis\nacanthophorous\nacanthopod\nacanthopodous\nacanthopomatous\nacanthopore\nacanthopteran\nAcanthopteri\nacanthopterous\nacanthopterygian\nAcanthopterygii\nacanthosis\nacanthous\nAcanthuridae\nAcanthurus\nacanthus\nacapnia\nacapnial\nacapsular\nacapu\nacapulco\nacara\nAcarapis\nacardia\nacardiac\nacari\nacarian\nacariasis\nacaricidal\nacaricide\nacarid\nAcarida\nAcaridea\nacaridean\nacaridomatium\nacariform\nAcarina\nacarine\nacarinosis\nacarocecidium\nacarodermatitis\nacaroid\nacarol\nacarologist\nacarology\nacarophilous\nacarophobia\nacarotoxic\nacarpelous\nacarpous\nAcarus\nAcastus\nacatalectic\nacatalepsia\nacatalepsy\nacataleptic\nacatallactic\nacatamathesia\nacataphasia\nacataposis\nacatastasia\nacatastatic\nacate\nacategorical\nacatery\nacatharsia\nacatharsy\nacatholic\nacaudal\nacaudate\nacaulescent\nacauline\nacaulose\nacaulous\nacca\naccede\naccedence\nacceder\naccelerable\naccelerando\naccelerant\naccelerate\naccelerated\nacceleratedly\nacceleration\naccelerative\naccelerator\nacceleratory\naccelerograph\naccelerometer\naccend\naccendibility\naccendible\naccension\naccensor\naccent\naccentless\naccentor\naccentuable\naccentual\naccentuality\naccentually\naccentuate\naccentuation\naccentuator\naccentus\naccept\nacceptability\nacceptable\nacceptableness\nacceptably\nacceptance\nacceptancy\nacceptant\nacceptation\naccepted\nacceptedly\naccepter\nacceptilate\nacceptilation\nacception\nacceptive\nacceptor\nacceptress\naccerse\naccersition\naccersitor\naccess\naccessarily\naccessariness\naccessary\naccessaryship\naccessibility\naccessible\naccessibly\naccession\naccessional\naccessioner\naccessive\naccessively\naccessless\naccessorial\naccessorily\naccessoriness\naccessorius\naccessory\naccidence\naccidency\naccident\naccidental\naccidentalism\naccidentalist\naccidentality\naccidentally\naccidentalness\naccidented\naccidential\naccidentiality\naccidently\naccidia\naccidie\naccinge\naccipient\nAccipiter\naccipitral\naccipitrary\nAccipitres\naccipitrine\naccismus\naccite\nacclaim\nacclaimable\nacclaimer\nacclamation\nacclamator\nacclamatory\nacclimatable\nacclimatation\nacclimate\nacclimatement\nacclimation\nacclimatizable\nacclimatization\nacclimatize\nacclimatizer\nacclimature\nacclinal\nacclinate\nacclivitous\nacclivity\nacclivous\naccloy\naccoast\naccoil\naccolade\naccoladed\naccolated\naccolent\naccolle\naccombination\naccommodable\naccommodableness\naccommodate\naccommodately\naccommodateness\naccommodating\naccommodatingly\naccommodation\naccommodational\naccommodative\naccommodativeness\naccommodator\naccompanier\naccompaniment\naccompanimental\naccompanist\naccompany\naccompanyist\naccompletive\naccomplice\naccompliceship\naccomplicity\naccomplish\naccomplishable\naccomplished\naccomplisher\naccomplishment\naccomplisht\naccompt\naccord\naccordable\naccordance\naccordancy\naccordant\naccordantly\naccorder\naccording\naccordingly\naccordion\naccordionist\naccorporate\naccorporation\naccost\naccostable\naccosted\naccouche\naccouchement\naccoucheur\naccoucheuse\naccount\naccountability\naccountable\naccountableness\naccountably\naccountancy\naccountant\naccountantship\naccounting\naccountment\naccouple\naccouplement\naccouter\naccouterment\naccoy\naccredit\naccreditate\naccreditation\naccredited\naccreditment\naccrementitial\naccrementition\naccresce\naccrescence\naccrescent\naccretal\naccrete\naccretion\naccretionary\naccretive\naccroach\naccroides\naccrual\naccrue\naccruement\naccruer\naccubation\naccubitum\naccubitus\naccultural\nacculturate\nacculturation\nacculturize\naccumbency\naccumbent\naccumber\naccumulable\naccumulate\naccumulation\naccumulativ\naccumulative\naccumulatively\naccumulativeness\naccumulator\naccuracy\naccurate\naccurately\naccurateness\naccurse\naccursed\naccursedly\naccursedness\naccusable\naccusably\naccusal\naccusant\naccusation\naccusatival\naccusative\naccusatively\naccusatorial\naccusatorially\naccusatory\naccusatrix\naccuse\naccused\naccuser\naccusingly\naccusive\naccustom\naccustomed\naccustomedly\naccustomedness\nace\naceacenaphthene\naceanthrene\naceanthrenequinone\nacecaffine\naceconitic\nacedia\nacediamine\nacediast\nacedy\nAceldama\nAcemetae\nAcemetic\nacenaphthene\nacenaphthenyl\nacenaphthylene\nacentric\nacentrous\naceologic\naceology\nacephal\nAcephala\nacephalan\nAcephali\nacephalia\nAcephalina\nacephaline\nacephalism\nacephalist\nAcephalite\nacephalocyst\nacephalous\nacephalus\nAcer\nAceraceae\naceraceous\nAcerae\nAcerata\nacerate\nAcerates\nacerathere\nAceratherium\naceratosis\nacerb\nAcerbas\nacerbate\nacerbic\nacerbity\nacerdol\nacerin\nacerose\nacerous\nacerra\nacertannin\nacervate\nacervately\nacervation\nacervative\nacervose\nacervuline\nacervulus\nacescence\nacescency\nacescent\naceship\nacesodyne\nAcestes\nacetabular\nAcetabularia\nacetabuliferous\nacetabuliform\nacetabulous\nacetabulum\nacetacetic\nacetal\nacetaldehydase\nacetaldehyde\nacetaldehydrase\nacetalization\nacetalize\nacetamide\nacetamidin\nacetamidine\nacetamido\nacetaminol\nacetanilid\nacetanilide\nacetanion\nacetaniside\nacetanisidide\nacetannin\nacetarious\nacetarsone\nacetate\nacetated\nacetation\nacetbromamide\nacetenyl\nacethydrazide\nacetic\nacetification\nacetifier\nacetify\nacetimeter\nacetimetry\nacetin\nacetize\nacetmethylanilide\nacetnaphthalide\nacetoacetanilide\nacetoacetate\nacetoacetic\nacetoamidophenol\nacetoarsenite\nAcetobacter\nacetobenzoic\nacetobromanilide\nacetochloral\nacetocinnamene\nacetoin\nacetol\nacetolysis\nacetolytic\nacetometer\nacetometrical\nacetometrically\nacetometry\nacetomorphine\nacetonaphthone\nacetonate\nacetonation\nacetone\nacetonemia\nacetonemic\nacetonic\nacetonitrile\nacetonization\nacetonize\nacetonuria\nacetonurometer\nacetonyl\nacetonylacetone\nacetonylidene\nacetophenetide\nacetophenin\nacetophenine\nacetophenone\nacetopiperone\nacetopyrin\nacetosalicylic\nacetose\nacetosity\nacetosoluble\nacetothienone\nacetotoluide\nacetotoluidine\nacetous\nacetoveratrone\nacetoxime\nacetoxyl\nacetoxyphthalide\nacetphenetid\nacetphenetidin\nacetract\nacettoluide\nacetum\naceturic\nacetyl\nacetylacetonates\nacetylacetone\nacetylamine\nacetylate\nacetylation\nacetylator\nacetylbenzene\nacetylbenzoate\nacetylbenzoic\nacetylbiuret\nacetylcarbazole\nacetylcellulose\nacetylcholine\nacetylcyanide\nacetylenation\nacetylene\nacetylenediurein\nacetylenic\nacetylenyl\nacetylfluoride\nacetylglycine\nacetylhydrazine\nacetylic\nacetylide\nacetyliodide\nacetylizable\nacetylization\nacetylize\nacetylizer\nacetylmethylcarbinol\nacetylperoxide\nacetylphenol\nacetylphenylhydrazine\nacetylrosaniline\nacetylsalicylate\nacetylsalol\nacetyltannin\nacetylthymol\nacetyltropeine\nacetylurea\nach\nAchaean\nAchaemenian\nAchaemenid\nAchaemenidae\nAchaemenidian\nAchaenodon\nAchaeta\nachaetous\nachage\nAchagua\nAchakzai\nachalasia\nAchamoth\nAchango\nachar\nAchariaceae\nAchariaceous\nachate\nAchates\nAchatina\nAchatinella\nAchatinidae\nache\nacheilia\nacheilous\nacheiria\nacheirous\nacheirus\nAchen\nachene\nachenial\nachenium\nachenocarp\nachenodium\nacher\nAchernar\nAcheronian\nAcherontic\nAcherontical\nachete\nAchetidae\nAcheulean\nacheweed\nachievable\nachieve\nachievement\nachiever\nachigan\nachilary\nachill\nAchillea\nAchillean\nAchilleid\nachilleine\nAchillize\nachillobursitis\nachillodynia\nachime\nAchimenes\nAchinese\naching\nachingly\nachira\nAchitophel\nachlamydate\nAchlamydeae\nachlamydeous\nachlorhydria\nachlorophyllous\nachloropsia\nAchmetha\nacholia\nacholic\nAcholoe\nacholous\nacholuria\nacholuric\nAchomawi\nachondrite\nachondritic\nachondroplasia\nachondroplastic\nachor\nachordal\nAchordata\nachordate\nAchorion\nAchras\nachree\nachroacyte\nAchroanthes\nachrodextrin\nachrodextrinase\nachroglobin\nachroiocythaemia\nachroiocythemia\nachroite\nachroma\nachromacyte\nachromasia\nachromat\nachromate\nAchromatiaceae\nachromatic\nachromatically\nachromaticity\nachromatin\nachromatinic\nachromatism\nAchromatium\nachromatizable\nachromatization\nachromatize\nachromatocyte\nachromatolysis\nachromatope\nachromatophile\nachromatopia\nachromatopsia\nachromatopsy\nachromatosis\nachromatous\nachromaturia\nachromia\nachromic\nAchromobacter\nAchromobacterieae\nachromoderma\nachromophilous\nachromotrichia\nachromous\nachronical\nachroodextrin\nachroodextrinase\nachroous\nachropsia\nachtehalber\nachtel\nachtelthaler\nAchuas\nachy\nachylia\nachylous\nachymia\nachymous\nAchyranthes\nAchyrodes\nacichloride\nacicula\nacicular\nacicularly\naciculate\naciculated\naciculum\nacid\nAcidanthera\nAcidaspis\nacidemia\nacider\nacidic\nacidiferous\nacidifiable\nacidifiant\nacidific\nacidification\nacidifier\nacidify\nacidimeter\nacidimetric\nacidimetrical\nacidimetrically\nacidimetry\nacidite\nacidity\nacidize\nacidly\nacidness\nacidoid\nacidology\nacidometer\nacidometry\nacidophile\nacidophilic\nacidophilous\nacidoproteolytic\nacidosis\nacidosteophyte\nacidotic\nacidproof\nacidulate\nacidulent\nacidulous\naciduric\nacidyl\nacier\nacierage\nAcieral\nacierate\nacieration\naciform\naciliate\naciliated\nAcilius\nacinaceous\nacinaces\nacinacifolious\nacinaciform\nacinar\nacinarious\nacinary\nAcineta\nAcinetae\nacinetan\nAcinetaria\nacinetarian\nacinetic\nacinetiform\nAcinetina\nacinetinan\nacinic\naciniform\nacinose\nacinotubular\nacinous\nacinus\nAcipenser\nAcipenseres\nacipenserid\nAcipenseridae\nacipenserine\nacipenseroid\nAcipenseroidei\nAcis\naciurgy\nacker\nackey\nackman\nacknow\nacknowledge\nacknowledgeable\nacknowledged\nacknowledgedly\nacknowledger\naclastic\nacle\nacleidian\nacleistous\nAclemon\naclidian\naclinal\naclinic\nacloud\naclys\nAcmaea\nAcmaeidae\nacmatic\nacme\nacmesthesia\nacmic\nAcmispon\nacmite\nacne\nacneform\nacneiform\nacnemia\nAcnida\nacnodal\nacnode\nAcocanthera\nacocantherin\nacock\nacockbill\nacocotl\nAcoela\nAcoelomata\nacoelomate\nacoelomatous\nAcoelomi\nacoelomous\nacoelous\nAcoemetae\nAcoemeti\nAcoemetic\nacoin\nacoine\nAcolapissa\nacold\nAcolhua\nAcolhuan\nacologic\nacology\nacolous\nacoluthic\nacolyte\nacolythate\nAcoma\nacoma\nacomia\nacomous\naconative\nacondylose\nacondylous\nacone\naconic\naconin\naconine\naconital\naconite\naconitia\naconitic\naconitin\naconitine\nAconitum\nAcontias\nacontium\nAcontius\naconuresis\nacopic\nacopon\nacopyrin\nacopyrine\nacor\nacorea\nacoria\nacorn\nacorned\nAcorus\nacosmic\nacosmism\nacosmist\nacosmistic\nacotyledon\nacotyledonous\nacouasm\nacouchi\nacouchy\nacoumeter\nacoumetry\nacouometer\nacouophonia\nacoupa\nacousmata\nacousmatic\nacoustic\nacoustical\nacoustically\nacoustician\nacousticolateral\nAcousticon\nacoustics\nacquaint\nacquaintance\nacquaintanceship\nacquaintancy\nacquaintant\nacquainted\nacquaintedness\nacquest\nacquiesce\nacquiescement\nacquiescence\nacquiescency\nacquiescent\nacquiescently\nacquiescer\nacquiescingly\nacquirability\nacquirable\nacquire\nacquired\nacquirement\nacquirenda\nacquirer\nacquisible\nacquisite\nacquisited\nacquisition\nacquisitive\nacquisitively\nacquisitiveness\nacquisitor\nacquisitum\nacquist\nacquit\nacquitment\nacquittal\nacquittance\nacquitter\nAcrab\nacracy\nacraein\nAcraeinae\nacraldehyde\nAcrania\nacranial\nacraniate\nacrasia\nAcrasiaceae\nAcrasiales\nAcrasida\nAcrasieae\nAcraspeda\nacraspedote\nacratia\nacraturesis\nacrawl\nacraze\nacre\nacreable\nacreage\nacreak\nacream\nacred\nAcredula\nacreman\nacrestaff\nacrid\nacridan\nacridian\nacridic\nAcrididae\nAcridiidae\nacridine\nacridinic\nacridinium\nacridity\nAcridium\nacridly\nacridness\nacridone\nacridonium\nacridophagus\nacridyl\nacriflavin\nacriflavine\nacrimonious\nacrimoniously\nacrimoniousness\nacrimony\nacrindoline\nacrinyl\nacrisia\nAcrisius\nAcrita\nacritan\nacrite\nacritical\nacritol\nAcroa\nacroaesthesia\nacroama\nacroamatic\nacroamatics\nacroanesthesia\nacroarthritis\nacroasphyxia\nacroataxia\nacroatic\nacrobacy\nacrobat\nAcrobates\nacrobatholithic\nacrobatic\nacrobatical\nacrobatically\nacrobatics\nacrobatism\nacroblast\nacrobryous\nacrobystitis\nAcrocarpi\nacrocarpous\nacrocephalia\nacrocephalic\nacrocephalous\nacrocephaly\nAcrocera\nAcroceratidae\nAcroceraunian\nAcroceridae\nAcrochordidae\nAcrochordinae\nacrochordon\nAcroclinium\nAcrocomia\nacroconidium\nacrocontracture\nacrocoracoid\nacrocyanosis\nacrocyst\nacrodactylum\nacrodermatitis\nacrodont\nacrodontism\nacrodrome\nacrodromous\nAcrodus\nacrodynia\nacroesthesia\nacrogamous\nacrogamy\nacrogen\nacrogenic\nacrogenous\nacrogenously\nacrography\nAcrogynae\nacrogynae\nacrogynous\nacrolein\nacrolith\nacrolithan\nacrolithic\nacrologic\nacrologically\nacrologism\nacrologue\nacrology\nacromania\nacromastitis\nacromegalia\nacromegalic\nacromegaly\nacromelalgia\nacrometer\nacromial\nacromicria\nacromioclavicular\nacromiocoracoid\nacromiodeltoid\nacromiohumeral\nacromiohyoid\nacromion\nacromioscapular\nacromiosternal\nacromiothoracic\nacromonogrammatic\nacromphalus\nAcromyodi\nacromyodian\nacromyodic\nacromyodous\nacromyotonia\nacromyotonus\nacron\nacronarcotic\nacroneurosis\nacronical\nacronically\nacronyc\nacronych\nAcronycta\nacronyctous\nacronym\nacronymic\nacronymize\nacronymous\nacronyx\nacrook\nacroparalysis\nacroparesthesia\nacropathology\nacropathy\nacropetal\nacropetally\nacrophobia\nacrophonetic\nacrophonic\nacrophony\nacropodium\nacropoleis\nacropolis\nacropolitan\nAcropora\nacrorhagus\nacrorrheuma\nacrosarc\nacrosarcum\nacroscleriasis\nacroscleroderma\nacroscopic\nacrose\nacrosome\nacrosphacelus\nacrospire\nacrospore\nacrosporous\nacross\nacrostic\nacrostical\nacrostically\nacrostichal\nAcrosticheae\nacrostichic\nacrostichoid\nAcrostichum\nacrosticism\nacrostolion\nacrostolium\nacrotarsial\nacrotarsium\nacroteleutic\nacroterial\nacroteric\nacroterium\nAcrothoracica\nacrotic\nacrotism\nacrotomous\nAcrotreta\nAcrotretidae\nacrotrophic\nacrotrophoneurosis\nAcrux\nAcrydium\nacryl\nacrylaldehyde\nacrylate\nacrylic\nacrylonitrile\nacrylyl\nact\nacta\nactability\nactable\nActaea\nActaeaceae\nActaeon\nActaeonidae\nActiad\nActian\nactification\nactifier\nactify\nactin\nactinal\nactinally\nactinautographic\nactinautography\nactine\nactinenchyma\nacting\nActinia\nactinian\nActiniaria\nactiniarian\nactinic\nactinically\nActinidia\nActinidiaceae\nactiniferous\nactiniform\nactinine\nactiniochrome\nactiniohematin\nActiniomorpha\nactinism\nActinistia\nactinium\nactinobacillosis\nActinobacillus\nactinoblast\nactinobranch\nactinobranchia\nactinocarp\nactinocarpic\nactinocarpous\nactinochemistry\nactinocrinid\nActinocrinidae\nactinocrinite\nActinocrinus\nactinocutitis\nactinodermatitis\nactinodielectric\nactinodrome\nactinodromous\nactinoelectric\nactinoelectrically\nactinoelectricity\nactinogonidiate\nactinogram\nactinograph\nactinography\nactinoid\nActinoida\nActinoidea\nactinolite\nactinolitic\nactinologous\nactinologue\nactinology\nactinomere\nactinomeric\nactinometer\nactinometric\nactinometrical\nactinometry\nactinomorphic\nactinomorphous\nactinomorphy\nActinomyces\nActinomycetaceae\nActinomycetales\nactinomycete\nactinomycetous\nactinomycin\nactinomycoma\nactinomycosis\nactinomycotic\nActinomyxidia\nActinomyxidiida\nactinon\nActinonema\nactinoneuritis\nactinophone\nactinophonic\nactinophore\nactinophorous\nactinophryan\nActinophrys\nActinopoda\nactinopraxis\nactinopteran\nActinopteri\nactinopterous\nactinopterygian\nActinopterygii\nactinopterygious\nactinoscopy\nactinosoma\nactinosome\nActinosphaerium\nactinost\nactinostereoscopy\nactinostomal\nactinostome\nactinotherapeutic\nactinotherapeutics\nactinotherapy\nactinotoxemia\nactinotrichium\nactinotrocha\nactinouranium\nActinozoa\nactinozoal\nactinozoan\nactinozoon\nactinula\naction\nactionable\nactionably\nactional\nactionary\nactioner\nactionize\nactionless\nActipylea\nActium\nactivable\nactivate\nactivation\nactivator\nactive\nactively\nactiveness\nactivin\nactivism\nactivist\nactivital\nactivity\nactivize\nactless\nactomyosin\nacton\nactor\nactorship\nactress\nActs\nactu\nactual\nactualism\nactualist\nactualistic\nactuality\nactualization\nactualize\nactually\nactualness\nactuarial\nactuarially\nactuarian\nactuary\nactuaryship\nactuation\nactuator\nacture\nacturience\nactutate\nacuaesthesia\nAcuan\nacuate\nacuation\nAcubens\nacuclosure\nacuductor\nacuesthesia\nacuity\naculea\nAculeata\naculeate\naculeated\naculeiform\naculeolate\naculeolus\naculeus\nacumen\nacuminate\nacumination\nacuminose\nacuminous\nacuminulate\nacupress\nacupressure\nacupunctuate\nacupunctuation\nacupuncturation\nacupuncturator\nacupuncture\nacurative\nacushla\nacutangular\nacutate\nacute\nacutely\nacutenaculum\nacuteness\nacutiator\nacutifoliate\nAcutilinguae\nacutilingual\nacutilobate\nacutiplantar\nacutish\nacutograve\nacutonodose\nacutorsion\nacyanoblepsia\nacyanopsia\nacyclic\nacyesis\nacyetic\nacyl\nacylamido\nacylamidobenzene\nacylamino\nacylate\nacylation\nacylogen\nacyloin\nacyloxy\nacyloxymethane\nacyrological\nacyrology\nacystia\nad\nAda\nadactyl\nadactylia\nadactylism\nadactylous\nAdad\nadad\nadage\nadagial\nadagietto\nadagio\nAdai\nAdaize\nAdam\nadamant\nadamantean\nadamantine\nadamantinoma\nadamantoblast\nadamantoblastoma\nadamantoid\nadamantoma\nadamas\nAdamastor\nadambulacral\nadamellite\nAdamhood\nAdamic\nAdamical\nAdamically\nadamine\nAdamite\nadamite\nAdamitic\nAdamitical\nAdamitism\nAdamsia\nadamsite\nadance\nadangle\nAdansonia\nAdapa\nadapid\nAdapis\nadapt\nadaptability\nadaptable\nadaptation\nadaptational\nadaptationally\nadaptative\nadaptedness\nadapter\nadaption\nadaptional\nadaptionism\nadaptitude\nadaptive\nadaptively\nadaptiveness\nadaptometer\nadaptor\nadaptorial\nAdar\nadarme\nadat\nadati\nadatom\nadaunt\nadaw\nadawe\nadawlut\nadawn\nadaxial\naday\nadays\nadazzle\nadcraft\nadd\nAdda\nadda\naddability\naddable\naddax\naddebted\nadded\naddedly\naddend\naddenda\naddendum\nadder\nadderbolt\nadderfish\nadderspit\nadderwort\naddibility\naddible\naddicent\naddict\naddicted\naddictedness\naddiction\nAddie\naddiment\nAddisonian\nAddisoniana\nadditament\nadditamentary\naddition\nadditional\nadditionally\nadditionary\nadditionist\naddititious\nadditive\nadditively\nadditivity\nadditory\naddle\naddlebrain\naddlebrained\naddlehead\naddleheaded\naddleheadedly\naddleheadedness\naddlement\naddleness\naddlepate\naddlepated\naddlepatedness\naddleplot\naddlings\naddlins\naddorsed\naddress\naddressee\naddresser\naddressful\nAddressograph\naddressor\naddrest\nAddu\nadduce\nadducent\nadducer\nadducible\nadduct\nadduction\nadductive\nadductor\nAddy\nAde\nade\nadead\nadeem\nadeep\nAdela\nAdelaide\nAdelarthra\nAdelarthrosomata\nadelarthrosomatous\nAdelbert\nAdelea\nAdeleidae\nAdelges\nAdelia\nAdelina\nAdeline\nadeling\nadelite\nAdeliza\nadelocerous\nAdelochorda\nadelocodonic\nadelomorphic\nadelomorphous\nadelopod\nAdelops\nAdelphi\nAdelphian\nadelphogamy\nAdelphoi\nadelpholite\nadelphophagy\nademonist\nadempted\nademption\nadenalgia\nadenalgy\nAdenanthera\nadenase\nadenasthenia\nadendric\nadendritic\nadenectomy\nadenectopia\nadenectopic\nadenemphractic\nadenemphraxis\nadenia\nadeniform\nadenine\nadenitis\nadenization\nadenoacanthoma\nadenoblast\nadenocancroid\nadenocarcinoma\nadenocarcinomatous\nadenocele\nadenocellulitis\nadenochondroma\nadenochondrosarcoma\nadenochrome\nadenocyst\nadenocystoma\nadenocystomatous\nadenodermia\nadenodiastasis\nadenodynia\nadenofibroma\nadenofibrosis\nadenogenesis\nadenogenous\nadenographer\nadenographic\nadenographical\nadenography\nadenohypersthenia\nadenoid\nadenoidal\nadenoidism\nadenoliomyofibroma\nadenolipoma\nadenolipomatosis\nadenologaditis\nadenological\nadenology\nadenolymphocele\nadenolymphoma\nadenoma\nadenomalacia\nadenomatome\nadenomatous\nadenomeningeal\nadenometritis\nadenomycosis\nadenomyofibroma\nadenomyoma\nadenomyxoma\nadenomyxosarcoma\nadenoncus\nadenoneural\nadenoneure\nadenopathy\nadenopharyngeal\nadenopharyngitis\nadenophlegmon\nAdenophora\nadenophore\nadenophorous\nadenophthalmia\nadenophyllous\nadenophyma\nadenopodous\nadenosarcoma\nadenosclerosis\nadenose\nadenosine\nadenosis\nadenostemonous\nAdenostoma\nadenotome\nadenotomic\nadenotomy\nadenotyphoid\nadenotyphus\nadenyl\nadenylic\nAdeodatus\nAdeona\nAdephaga\nadephagan\nadephagia\nadephagous\nadept\nadeptness\nadeptship\nadequacy\nadequate\nadequately\nadequateness\nadequation\nadequative\nadermia\nadermin\nAdessenarian\nadet\nadevism\nadfected\nadfix\nadfluxion\nadglutinate\nAdhafera\nadhaka\nadhamant\nAdhara\nadharma\nadhere\nadherence\nadherency\nadherent\nadherently\nadherer\nadherescence\nadherescent\nadhesion\nadhesional\nadhesive\nadhesively\nadhesivemeter\nadhesiveness\nadhibit\nadhibition\nadiabatic\nadiabatically\nadiabolist\nadiactinic\nadiadochokinesis\nadiagnostic\nadiantiform\nAdiantum\nadiaphon\nadiaphonon\nadiaphoral\nadiaphoresis\nadiaphoretic\nadiaphorism\nadiaphorist\nadiaphoristic\nadiaphorite\nadiaphoron\nadiaphorous\nadiate\nadiathermal\nadiathermancy\nadiathermanous\nadiathermic\nadiathetic\nadiation\nAdib\nAdicea\nadicity\nAdiel\nadieu\nadieux\nAdigei\nAdighe\nAdigranth\nadigranth\nAdin\nAdinida\nadinidan\nadinole\nadion\nadipate\nadipescent\nadipic\nadipinic\nadipocele\nadipocellulose\nadipocere\nadipoceriform\nadipocerous\nadipocyte\nadipofibroma\nadipogenic\nadipogenous\nadipoid\nadipolysis\nadipolytic\nadipoma\nadipomatous\nadipometer\nadipopexia\nadipopexis\nadipose\nadiposeness\nadiposis\nadiposity\nadiposogenital\nadiposuria\nadipous\nadipsia\nadipsic\nadipsous\nadipsy\nadipyl\nAdirondack\nadit\nadital\naditus\nadjacency\nadjacent\nadjacently\nadjag\nadject\nadjection\nadjectional\nadjectival\nadjectivally\nadjective\nadjectively\nadjectivism\nadjectivitis\nadjiger\nadjoin\nadjoined\nadjoinedly\nadjoining\nadjoint\nadjourn\nadjournal\nadjournment\nadjudge\nadjudgeable\nadjudger\nadjudgment\nadjudicate\nadjudication\nadjudicative\nadjudicator\nadjudicature\nadjunct\nadjunction\nadjunctive\nadjunctively\nadjunctly\nadjuration\nadjuratory\nadjure\nadjurer\nadjust\nadjustable\nadjustably\nadjustage\nadjustation\nadjuster\nadjustive\nadjustment\nadjutage\nadjutancy\nadjutant\nadjutantship\nadjutorious\nadjutory\nadjutrice\nadjuvant\nAdlai\nadlay\nadless\nadlet\nAdlumia\nadlumidine\nadlumine\nadman\nadmarginate\nadmaxillary\nadmeasure\nadmeasurement\nadmeasurer\nadmedial\nadmedian\nadmensuration\nadmi\nadminicle\nadminicula\nadminicular\nadminiculary\nadminiculate\nadminiculation\nadminiculum\nadminister\nadministerd\nadministerial\nadministrable\nadministrant\nadministrate\nadministration\nadministrational\nadministrative\nadministratively\nadministrator\nadministratorship\nadministratress\nadministratrices\nadministratrix\nadmirability\nadmirable\nadmirableness\nadmirably\nadmiral\nadmiralship\nadmiralty\nadmiration\nadmirative\nadmirator\nadmire\nadmired\nadmiredly\nadmirer\nadmiring\nadmiringly\nadmissibility\nadmissible\nadmissibleness\nadmissibly\nadmission\nadmissive\nadmissory\nadmit\nadmittable\nadmittance\nadmitted\nadmittedly\nadmittee\nadmitter\nadmittible\nadmix\nadmixtion\nadmixture\nadmonish\nadmonisher\nadmonishingly\nadmonishment\nadmonition\nadmonitioner\nadmonitionist\nadmonitive\nadmonitively\nadmonitor\nadmonitorial\nadmonitorily\nadmonitory\nadmonitrix\nadmortization\nadnascence\nadnascent\nadnate\nadnation\nadnephrine\nadnerval\nadneural\nadnex\nadnexal\nadnexed\nadnexitis\nadnexopexy\nadnominal\nadnominally\nadnomination\nadnoun\nado\nadobe\nadolesce\nadolescence\nadolescency\nadolescent\nadolescently\nAdolph\nAdolphus\nAdonai\nAdonean\nAdonia\nAdoniad\nAdonian\nAdonic\nadonidin\nadonin\nAdoniram\nAdonis\nadonite\nadonitol\nadonize\nadoperate\nadoperation\nadopt\nadoptability\nadoptable\nadoptant\nadoptative\nadopted\nadoptedly\nadoptee\nadopter\nadoptian\nadoptianism\nadoptianist\nadoption\nadoptional\nadoptionism\nadoptionist\nadoptious\nadoptive\nadoptively\nadorability\nadorable\nadorableness\nadorably\nadoral\nadorally\nadorant\nAdorantes\nadoration\nadoratory\nadore\nadorer\nAdoretus\nadoringly\nadorn\nadorner\nadorningly\nadornment\nadosculation\nadossed\nadoulie\nadown\nAdoxa\nAdoxaceae\nadoxaceous\nadoxography\nadoxy\nadoze\nadpao\nadpress\nadpromission\nadradial\nadradially\nadradius\nAdramelech\nAdrammelech\nadread\nadream\nadreamed\nadreamt\nadrectal\nadrenal\nadrenalectomize\nadrenalectomy\nAdrenalin\nadrenaline\nadrenalize\nadrenalone\nadrenergic\nadrenin\nadrenine\nadrenochrome\nadrenocortical\nadrenocorticotropic\nadrenolysis\nadrenolytic\nadrenotropic\nAdrian\nAdriana\nAdriatic\nAdrienne\nadrift\nadrip\nadroit\nadroitly\nadroitness\nadroop\nadrop\nadrostral\nadrowse\nadrue\nadry\nadsbud\nadscendent\nadscititious\nadscititiously\nadscript\nadscripted\nadscription\nadscriptitious\nadscriptitius\nadscriptive\nadsessor\nadsheart\nadsignification\nadsignify\nadsmith\nadsmithing\nadsorb\nadsorbable\nadsorbate\nadsorbent\nadsorption\nadsorptive\nadstipulate\nadstipulation\nadstipulator\nadterminal\nadtevac\nadular\nadularescence\nadularia\nadulate\nadulation\nadulator\nadulatory\nadulatress\nAdullam\nAdullamite\nadult\nadulter\nadulterant\nadulterate\nadulterately\nadulterateness\nadulteration\nadulterator\nadulterer\nadulteress\nadulterine\nadulterize\nadulterous\nadulterously\nadultery\nadulthood\nadulticidal\nadulticide\nadultness\nadultoid\nadumbral\nadumbrant\nadumbrate\nadumbration\nadumbrative\nadumbratively\nadunc\naduncate\naduncated\naduncity\naduncous\nadusk\nadust\nadustion\nadustiosis\nAdvaita\nadvance\nadvanceable\nadvanced\nadvancedness\nadvancement\nadvancer\nadvancing\nadvancingly\nadvancive\nadvantage\nadvantageous\nadvantageously\nadvantageousness\nadvection\nadvectitious\nadvective\nadvehent\nadvene\nadvenience\nadvenient\nAdvent\nadvential\nAdventism\nAdventist\nadventitia\nadventitious\nadventitiously\nadventitiousness\nadventive\nadventual\nadventure\nadventureful\nadventurement\nadventurer\nadventureship\nadventuresome\nadventuresomely\nadventuresomeness\nadventuress\nadventurish\nadventurous\nadventurously\nadventurousness\nadverb\nadverbial\nadverbiality\nadverbialize\nadverbially\nadverbiation\nadversant\nadversaria\nadversarious\nadversary\nadversative\nadversatively\nadverse\nadversely\nadverseness\nadversifoliate\nadversifolious\nadversity\nadvert\nadvertence\nadvertency\nadvertent\nadvertently\nadvertisable\nadvertise\nadvertisee\nadvertisement\nadvertiser\nadvertising\nadvice\nadviceful\nadvisability\nadvisable\nadvisableness\nadvisably\nadvisal\nadvisatory\nadvise\nadvised\nadvisedly\nadvisedness\nadvisee\nadvisement\nadviser\nadvisership\nadvisive\nadvisiveness\nadvisor\nadvisorily\nadvisory\nadvocacy\nadvocate\nadvocateship\nadvocatess\nadvocation\nadvocator\nadvocatory\nadvocatress\nadvocatrice\nadvocatrix\nadvolution\nadvowee\nadvowson\nady\nadynamia\nadynamic\nadynamy\nadyta\nadyton\nadytum\nadz\nadze\nadzer\nadzooks\nae\nAeacides\nAeacus\nAeaean\nAechmophorus\naecial\nAecidiaceae\naecidial\naecidioform\nAecidiomycetes\naecidiospore\naecidiostage\naecidium\naeciospore\naeciostage\naecioteliospore\naeciotelium\naecium\naedeagus\nAedes\naedicula\naedile\naedileship\naedilian\naedilic\naedilitian\naedility\naedoeagus\naefald\naefaldness\naefaldy\naefauld\naegagropila\naegagropile\naegagrus\nAegean\naegerian\naegeriid\nAegeriidae\nAegialitis\naegicrania\nAegina\nAeginetan\nAeginetic\nAegipan\naegirine\naegirinolite\naegirite\naegis\nAegisthus\nAegithalos\nAegithognathae\naegithognathism\naegithognathous\nAegle\nAegopodium\naegrotant\naegyptilla\naegyrite\naeluroid\nAeluroidea\naelurophobe\naelurophobia\naeluropodous\naenach\naenean\naeneolithic\naeneous\naenigmatite\naeolharmonica\nAeolia\nAeolian\nAeolic\nAeolicism\naeolid\nAeolidae\nAeolididae\naeolina\naeoline\naeolipile\nAeolis\nAeolism\nAeolist\naeolistic\naeolodicon\naeolodion\naeolomelodicon\naeolopantalon\naeolotropic\naeolotropism\naeolotropy\naeolsklavier\naeon\naeonial\naeonian\naeonist\nAepyceros\nAepyornis\nAepyornithidae\nAepyornithiformes\nAequi\nAequian\nAequiculi\nAequipalpia\naequoreal\naer\naerage\naerarian\naerarium\naerate\naeration\naerator\naerenchyma\naerenterectasia\naerial\naerialist\naeriality\naerially\naerialness\naeric\naerical\nAerides\naerie\naeried\naerifaction\naeriferous\naerification\naeriform\naerify\naero\nAerobacter\naerobate\naerobatic\naerobatics\naerobe\naerobian\naerobic\naerobically\naerobiologic\naerobiological\naerobiologically\naerobiologist\naerobiology\naerobion\naerobiont\naerobioscope\naerobiosis\naerobiotic\naerobiotically\naerobious\naerobium\naeroboat\nAerobranchia\naerobranchiate\naerobus\naerocamera\naerocartograph\nAerocharidae\naerocolpos\naerocraft\naerocurve\naerocyst\naerodermectasia\naerodone\naerodonetic\naerodonetics\naerodrome\naerodromics\naerodynamic\naerodynamical\naerodynamicist\naerodynamics\naerodyne\naeroembolism\naeroenterectasia\naerofoil\naerogel\naerogen\naerogenes\naerogenesis\naerogenic\naerogenically\naerogenous\naerogeologist\naerogeology\naerognosy\naerogram\naerograph\naerographer\naerographic\naerographical\naerographics\naerography\naerogun\naerohydrodynamic\naerohydropathy\naerohydroplane\naerohydrotherapy\naerohydrous\naeroides\naerolite\naerolith\naerolithology\naerolitic\naerolitics\naerologic\naerological\naerologist\naerology\naeromaechanic\naeromancer\naeromancy\naeromantic\naeromarine\naeromechanical\naeromechanics\naerometeorograph\naerometer\naerometric\naerometry\naeromotor\naeronat\naeronaut\naeronautic\naeronautical\naeronautically\naeronautics\naeronautism\naeronef\naeroneurosis\naeropathy\nAerope\naeroperitoneum\naeroperitonia\naerophagia\naerophagist\naerophagy\naerophane\naerophilatelic\naerophilatelist\naerophilately\naerophile\naerophilic\naerophilous\naerophobia\naerophobic\naerophone\naerophor\naerophore\naerophotography\naerophysical\naerophysics\naerophyte\naeroplane\naeroplaner\naeroplanist\naeropleustic\naeroporotomy\naeroscepsis\naeroscepsy\naeroscope\naeroscopic\naeroscopically\naeroscopy\naerose\naerosiderite\naerosiderolite\nAerosol\naerosol\naerosphere\naerosporin\naerostat\naerostatic\naerostatical\naerostatics\naerostation\naerosteam\naerotactic\naerotaxis\naerotechnical\naerotherapeutics\naerotherapy\naerotonometer\naerotonometric\naerotonometry\naerotropic\naerotropism\naeroyacht\naeruginous\naerugo\naery\naes\nAeschylean\nAeschynanthus\nAeschynomene\naeschynomenous\nAesculaceae\naesculaceous\nAesculapian\nAesculapius\nAesculus\nAesopian\nAesopic\naesthete\naesthetic\naesthetical\naesthetically\naesthetician\naestheticism\naestheticist\naestheticize\naesthetics\naesthiology\naesthophysiology\nAestii\naethalioid\naethalium\naetheogam\naetheogamic\naetheogamous\naethered\nAethionema\naethogen\naethrioscope\nAethusa\nAetian\naetiogenic\naetiotropic\naetiotropically\nAetobatidae\nAetobatus\nAetolian\nAetomorphae\naetosaur\naetosaurian\nAetosaurus\naevia\naface\nafaint\nAfar\nafar\nafara\nafear\nafeard\nafeared\nafebrile\nAfenil\nafernan\nafetal\naffa\naffability\naffable\naffableness\naffably\naffabrous\naffair\naffaite\naffect\naffectable\naffectate\naffectation\naffectationist\naffected\naffectedly\naffectedness\naffecter\naffectibility\naffectible\naffecting\naffectingly\naffection\naffectional\naffectionally\naffectionate\naffectionately\naffectionateness\naffectioned\naffectious\naffective\naffectively\naffectivity\naffeer\naffeerer\naffeerment\naffeir\naffenpinscher\naffenspalte\nafferent\naffettuoso\naffiance\naffiancer\naffiant\naffidation\naffidavit\naffidavy\naffiliable\naffiliate\naffiliation\naffinal\naffination\naffine\naffined\naffinely\naffinitative\naffinitatively\naffinite\naffinition\naffinitive\naffinity\naffirm\naffirmable\naffirmably\naffirmance\naffirmant\naffirmation\naffirmative\naffirmatively\naffirmatory\naffirmer\naffirmingly\naffix\naffixal\naffixation\naffixer\naffixion\naffixture\nafflation\nafflatus\nafflict\nafflicted\nafflictedness\nafflicter\nafflicting\nafflictingly\naffliction\nafflictionless\nafflictive\nafflictively\naffluence\naffluent\naffluently\naffluentness\nafflux\naffluxion\nafforce\nafforcement\nafford\naffordable\nafforest\nafforestable\nafforestation\nafforestment\nafformative\naffranchise\naffranchisement\naffray\naffrayer\naffreight\naffreighter\naffreightment\naffricate\naffricated\naffrication\naffricative\naffright\naffrighted\naffrightedly\naffrighter\naffrightful\naffrightfully\naffrightingly\naffrightment\naffront\naffronte\naffronted\naffrontedly\naffrontedness\naffronter\naffronting\naffrontingly\naffrontingness\naffrontive\naffrontiveness\naffrontment\naffuse\naffusion\naffy\nAfghan\nafghani\nafield\nAfifi\nafikomen\nafire\naflagellar\naflame\naflare\naflat\naflaunt\naflicker\naflight\nafloat\naflow\naflower\nafluking\naflush\naflutter\nafoam\nafoot\nafore\naforehand\naforenamed\naforesaid\naforethought\naforetime\naforetimes\nafortiori\nafoul\nafraid\nafraidness\nAframerican\nAfrasia\nAfrasian\nafreet\nafresh\nafret\nAfric\nAfrican\nAfricana\nAfricanism\nAfricanist\nAfricanization\nAfricanize\nAfricanoid\nAfricanthropus\nAfridi\nAfrikaans\nAfrikander\nAfrikanderdom\nAfrikanderism\nAfrikaner\nAfrogaea\nAfrogaean\nafront\nafrown\nAfshah\nAfshar\naft\naftaba\nafter\nafteract\nafterage\nafterattack\nafterband\nafterbeat\nafterbirth\nafterblow\nafterbody\nafterbrain\nafterbreach\nafterbreast\nafterburner\nafterburning\naftercare\naftercareer\naftercast\naftercataract\naftercause\nafterchance\nafterchrome\nafterchurch\nafterclap\nafterclause\naftercome\naftercomer\naftercoming\naftercooler\naftercost\naftercourse\naftercrop\naftercure\nafterdamp\nafterdate\nafterdays\nafterdeck\nafterdinner\nafterdrain\nafterdrops\naftereffect\nafterend\naftereye\nafterfall\nafterfame\nafterfeed\nafterfermentation\nafterform\nafterfriend\nafterfruits\nafterfuture\naftergame\naftergas\nafterglide\nafterglow\naftergo\naftergood\naftergrass\naftergrave\naftergrief\naftergrind\naftergrowth\nafterguard\nafterguns\nafterhand\nafterharm\nafterhatch\nafterhelp\nafterhend\nafterhold\nafterhope\nafterhours\nafterimage\nafterimpression\nafterings\nafterking\nafterknowledge\nafterlife\nafterlifetime\nafterlight\nafterloss\nafterlove\naftermark\naftermarriage\naftermass\naftermast\naftermath\naftermatter\naftermeal\naftermilk\naftermost\nafternight\nafternoon\nafternoons\nafternose\nafternote\nafteroar\nafterpain\nafterpart\nafterpast\nafterpeak\nafterpiece\nafterplanting\nafterplay\nafterpressure\nafterproof\nafterrake\nafterreckoning\nafterrider\nafterripening\nafterroll\nafterschool\naftersend\naftersensation\naftershaft\naftershafted\naftershine\naftership\naftershock\naftersong\naftersound\nafterspeech\nafterspring\nafterstain\nafterstate\nafterstorm\nafterstrain\nafterstretch\nafterstudy\nafterswarm\nafterswarming\nafterswell\naftertan\naftertask\naftertaste\nafterthinker\nafterthought\nafterthoughted\nafterthrift\naftertime\naftertimes\naftertouch\naftertreatment\naftertrial\nafterturn\naftervision\nafterwale\nafterwar\nafterward\nafterwards\nafterwash\nafterwhile\nafterwisdom\nafterwise\nafterwit\nafterwitted\nafterwork\nafterworking\nafterworld\nafterwrath\nafterwrist\naftmost\nAftonian\naftosa\naftward\naftwards\nafunction\nafunctional\nafwillite\nAfzelia\naga\nagabanee\nagacante\nagacella\nAgaces\nAgade\nAgag\nagain\nagainst\nagainstand\nagal\nagalactia\nagalactic\nagalactous\nagalawood\nagalaxia\nagalaxy\nAgalena\nAgalenidae\nAgalinis\nagalite\nagalloch\nagallochum\nagallop\nagalma\nagalmatolite\nagalwood\nAgama\nagama\nAgamae\nAgamemnon\nagamete\nagami\nagamian\nagamic\nagamically\nagamid\nAgamidae\nagamobium\nagamogenesis\nagamogenetic\nagamogenetically\nagamogony\nagamoid\nagamont\nagamospore\nagamous\nagamy\naganglionic\nAganice\nAganippe\nAgao\nAgaonidae\nAgapanthus\nagape\nAgapemone\nAgapemonian\nAgapemonist\nAgapemonite\nagapetae\nagapeti\nagapetid\nAgapetidae\nAgapornis\nagar\nagaric\nagaricaceae\nagaricaceous\nAgaricales\nagaricic\nagariciform\nagaricin\nagaricine\nagaricoid\nAgaricus\nAgaristidae\nagarita\nAgarum\nagarwal\nagasp\nAgastache\nAgastreae\nagastric\nagastroneuria\nagate\nagateware\nAgatha\nAgathaea\nAgathaumas\nagathin\nAgathis\nagathism\nagathist\nagathodaemon\nagathodaemonic\nagathokakological\nagathology\nAgathosma\nagatiferous\nagatiform\nagatine\nagatize\nagatoid\nagaty\nAgau\nAgave\nagavose\nAgawam\nAgaz\nagaze\nagazed\nAgdistis\nage\naged\nagedly\nagedness\nagee\nAgelacrinites\nAgelacrinitidae\nAgelaius\nAgelaus\nageless\nagelessness\nagelong\nagen\nAgena\nagency\nagenda\nagendum\nagenesia\nagenesic\nagenesis\nagennetic\nagent\nagentess\nagential\nagentival\nagentive\nagentry\nagentship\nageometrical\nager\nAgeratum\nageusia\nageusic\nageustia\nagger\naggerate\naggeration\naggerose\nAggie\nagglomerant\nagglomerate\nagglomerated\nagglomeratic\nagglomeration\nagglomerative\nagglomerator\nagglutinability\nagglutinable\nagglutinant\nagglutinate\nagglutination\nagglutinationist\nagglutinative\nagglutinator\nagglutinin\nagglutinize\nagglutinogen\nagglutinogenic\nagglutinoid\nagglutinoscope\nagglutogenic\naggradation\naggradational\naggrade\naggrandizable\naggrandize\naggrandizement\naggrandizer\naggrate\naggravate\naggravating\naggravatingly\naggravation\naggravative\naggravator\naggregable\naggregant\nAggregata\nAggregatae\naggregate\naggregately\naggregateness\naggregation\naggregative\naggregator\naggregatory\naggress\naggressin\naggression\naggressionist\naggressive\naggressively\naggressiveness\naggressor\naggrievance\naggrieve\naggrieved\naggrievedly\naggrievedness\naggrievement\naggroup\naggroupment\naggry\naggur\nagha\nAghan\naghanee\naghast\naghastness\nAghlabite\nAghorapanthi\nAghori\nAgialid\nAgib\nAgiel\nagilawood\nagile\nagilely\nagileness\nagility\nagillawood\naging\nagio\nagiotage\nagist\nagistator\nagistment\nagistor\nagitable\nagitant\nagitate\nagitatedly\nagitation\nagitational\nagitationist\nagitative\nagitator\nagitatorial\nagitatrix\nagitprop\nAgkistrodon\nagla\nAglaia\naglance\nAglaonema\nAglaos\naglaozonia\naglare\nAglaspis\nAglauros\nagleaf\nagleam\naglet\naglethead\nagley\naglimmer\naglint\nAglipayan\nAglipayano\naglitter\naglobulia\nAglossa\naglossal\naglossate\naglossia\naglow\naglucon\naglutition\naglycosuric\nAglypha\naglyphodont\nAglyphodonta\nAglyphodontia\naglyphous\nagmatine\nagmatology\nagminate\nagminated\nagnail\nagname\nagnamed\nagnate\nAgnatha\nagnathia\nagnathic\nAgnathostomata\nagnathostomatous\nagnathous\nagnatic\nagnatically\nagnation\nagnel\nAgnes\nagnification\nagnize\nAgnoetae\nAgnoete\nAgnoetism\nagnoiology\nAgnoite\nagnomen\nagnomical\nagnominal\nagnomination\nagnosia\nagnosis\nagnostic\nagnostically\nagnosticism\nAgnostus\nagnosy\nAgnotozoic\nagnus\nago\nagog\nagoge\nagogic\nagogics\nagoho\nagoing\nagomensin\nagomphiasis\nagomphious\nagomphosis\nagon\nagonal\nagone\nagoniada\nagoniadin\nagoniatite\nAgoniatites\nagonic\nagonied\nagonist\nAgonista\nagonistarch\nagonistic\nagonistically\nagonistics\nagonium\nagonize\nagonizedly\nagonizer\nagonizingly\nAgonostomus\nagonothete\nagonothetic\nagony\nagora\nagoranome\nagoraphobia\nagouara\nagouta\nagouti\nagpaite\nagpaitic\nAgra\nagraffee\nagrah\nagral\nagrammatical\nagrammatism\nAgrania\nagranulocyte\nagranulocytosis\nagranuloplastic\nAgrapha\nagraphia\nagraphic\nagrarian\nagrarianism\nagrarianize\nagrarianly\nAgrauleum\nagre\nagree\nagreeability\nagreeable\nagreeableness\nagreeably\nagreed\nagreeing\nagreeingly\nagreement\nagreer\nagregation\nagrege\nagrestal\nagrestial\nagrestian\nagrestic\nagria\nagricere\nagricole\nagricolist\nagricolite\nagricolous\nagricultor\nagricultural\nagriculturalist\nagriculturally\nagriculture\nagriculturer\nagriculturist\nAgrilus\nAgrimonia\nagrimony\nagrimotor\nagrin\nAgriochoeridae\nAgriochoerus\nagriological\nagriologist\nagriology\nAgrionia\nagrionid\nAgrionidae\nAgriotes\nAgriotypidae\nAgriotypus\nagrise\nagrito\nagroan\nagrobiologic\nagrobiological\nagrobiologically\nagrobiologist\nagrobiology\nagrogeological\nagrogeologically\nagrogeology\nagrologic\nagrological\nagrologically\nagrology\nagrom\nAgromyza\nagromyzid\nAgromyzidae\nagronome\nagronomial\nagronomic\nagronomical\nagronomics\nagronomist\nagronomy\nagroof\nagrope\nAgropyron\nAgrostemma\nagrosteral\nAgrostis\nagrostographer\nagrostographic\nagrostographical\nagrostography\nagrostologic\nagrostological\nagrostologist\nagrostology\nagrotechny\nAgrotis\naground\nagrufe\nagruif\nagrypnia\nagrypnotic\nagsam\nagua\naguacate\nAguacateca\naguavina\nAgudist\nague\naguelike\nagueproof\nagueweed\naguey\naguilarite\naguilawood\naguinaldo\naguirage\naguish\naguishly\naguishness\nagunah\nagush\nagust\nagy\nAgyieus\nagynarious\nagynary\nagynous\nagyrate\nagyria\nAh\nah\naha\nahaaina\nahankara\nAhantchuyuk\nahartalav\nahaunch\nahead\naheap\nahem\nAhepatokla\nAhet\nahey\nahimsa\nahind\nahint\nAhir\nahluwalia\nahmadi\nAhmadiya\nAhmed\nAhmet\nAhnfeltia\naho\nAhom\nahong\nahorse\nahorseback\nAhousaht\nahoy\nAhrendahronon\nAhriman\nAhrimanian\nahsan\nAht\nAhtena\nahu\nahuatle\nahuehuete\nahull\nahum\nahungered\nahungry\nahunt\nahura\nahush\nahwal\nahypnia\nai\nAias\nAiawong\naichmophobia\naid\naidable\naidance\naidant\naide\nAidenn\naider\nAides\naidful\naidless\naiel\naigialosaur\nAigialosauridae\nAigialosaurus\naiglet\naigremore\naigrette\naiguille\naiguillesque\naiguillette\naiguilletted\naikinite\nail\nailantery\nailanthic\nAilanthus\nailantine\nailanto\naile\nAileen\naileron\nailette\nAilie\nailing\naillt\nailment\nailsyte\nAiluridae\nailuro\nailuroid\nAiluroidea\nAiluropoda\nAiluropus\nAilurus\nailweed\naim\nAimak\naimara\nAimee\naimer\naimful\naimfully\naiming\naimless\naimlessly\naimlessness\nAimore\naimworthiness\nainaleh\nainhum\nainoi\nainsell\naint\nAinu\naion\naionial\nair\nAira\nairable\nairampo\nairan\nairbound\nairbrained\nairbrush\naircraft\naircraftman\naircraftsman\naircraftswoman\naircraftwoman\naircrew\naircrewman\nairdock\nairdrome\nairdrop\naire\nAiredale\nairedale\nairer\nairfield\nairfoil\nairframe\nairfreight\nairfreighter\nairgraphics\nairhead\nairiferous\nairified\nairily\nairiness\nairing\nairish\nairless\nairlift\nairlike\nairliner\nairmail\nairman\nairmanship\nairmark\nairmarker\nairmonger\nairohydrogen\nairometer\nairpark\nairphobia\nairplane\nairplanist\nairport\nairproof\nairscape\nairscrew\nairship\nairsick\nairsickness\nairstrip\nairt\nairtight\nairtightly\nairtightness\nairward\nairwards\nairway\nairwayman\nairwoman\nairworthiness\nairworthy\nairy\naischrolatreia\naiseweed\naisle\naisled\naisleless\naisling\nAissaoua\nAissor\naisteoir\nAistopoda\nAistopodes\nait\naitch\naitchbone\naitchless\naitchpiece\naitesis\naithochroi\naition\naitiotropic\nAitkenite\nAitutakian\naiwan\nAix\naizle\nAizoaceae\naizoaceous\nAizoon\nAjaja\najaja\najangle\najar\najari\nAjatasatru\najava\najhar\najivika\najog\najoint\najowan\nAjuga\najutment\nak\nAka\naka\nAkal\nakala\nAkali\nakalimba\nakamatsu\nAkamnik\nAkan\nAkanekunik\nAkania\nAkaniaceae\nakaroa\nakasa\nAkawai\nakazga\nakazgine\nakcheh\nake\nakeake\nakebi\nAkebia\nakee\nakeki\nakeley\nakenobeite\nakepiro\nakerite\nakey\nAkha\nAkhissar\nAkhlame\nAkhmimic\nakhoond\nakhrot\nakhyana\nakia\nAkim\nakimbo\nakin\nakindle\nakinesia\nakinesic\nakinesis\nakinete\nakinetic\nAkiskemikinik\nAkiyenik\nAkka\nAkkad\nAkkadian\nAkkadist\nakmudar\nakmuddar\naknee\nako\nakoasm\nakoasma\nakoluthia\nakonge\nAkontae\nAkoulalion\nakov\nakpek\nAkra\nakra\nAkrabattine\nakroasis\nakrochordite\nakroterion\nAktistetae\nAktistete\nAktivismus\nAktivist\naku\nakuammine\nakule\nakund\nAkwapim\nAl\nal\nala\nAlabama\nAlabaman\nAlabamian\nalabamide\nalabamine\nalabandite\nalabarch\nalabaster\nalabastos\nalabastrian\nalabastrine\nalabastrites\nalabastron\nalabastrum\nalacha\nalack\nalackaday\nalacreatine\nalacreatinine\nalacrify\nalacritous\nalacrity\nAlactaga\nalada\nAladdin\nAladdinize\nAladfar\nAladinist\nalaihi\nAlain\nalaite\nAlaki\nAlala\nalala\nalalite\nalalonga\nalalunga\nalalus\nAlamanni\nAlamannian\nAlamannic\nalameda\nalamo\nalamodality\nalamonti\nalamosite\nalamoth\nAlan\nalan\naland\nAlangiaceae\nalangin\nalangine\nAlangium\nalani\nalanine\nalannah\nAlans\nalantic\nalantin\nalantol\nalantolactone\nalantolic\nalanyl\nalar\nAlarbus\nalares\nAlaria\nAlaric\nalarm\nalarmable\nalarmed\nalarmedly\nalarming\nalarmingly\nalarmism\nalarmist\nAlarodian\nalarum\nalary\nalas\nAlascan\nAlaska\nalaskaite\nAlaskan\nalaskite\nAlastair\nAlaster\nalastrim\nalate\nalated\nalatern\nalaternus\nalation\nAlauda\nAlaudidae\nalaudine\nAlaunian\nAlawi\nAlb\nalb\nalba\nalbacore\nalbahaca\nAlbainn\nAlban\nalban\nAlbanenses\nAlbanensian\nAlbania\nAlbanian\nalbanite\nAlbany\nalbarco\nalbardine\nalbarello\nalbarium\nalbaspidin\nalbata\nAlbatros\nalbatross\nalbe\nalbedo\nalbedograph\nalbee\nalbeit\nAlberene\nAlbert\nAlberta\nalbertin\nAlbertina\nAlbertine\nAlbertinian\nAlbertist\nalbertite\nAlberto\nalbertustaler\nalbertype\nalbescence\nalbescent\nalbespine\nalbetad\nAlbi\nAlbian\nalbicans\nalbicant\nalbication\nalbiculi\nalbification\nalbificative\nalbiflorous\nalbify\nAlbigenses\nAlbigensian\nAlbigensianism\nAlbin\nalbinal\nalbiness\nalbinic\nalbinism\nalbinistic\nalbino\nalbinoism\nalbinotic\nalbinuria\nAlbion\nAlbireo\nalbite\nalbitic\nalbitite\nalbitization\nalbitophyre\nAlbizzia\nalbocarbon\nalbocinereous\nAlbococcus\nalbocracy\nAlboin\nalbolite\nalbolith\nalbopannin\nalbopruinose\nalboranite\nAlbrecht\nAlbright\nalbronze\nAlbruna\nAlbuca\nAlbuginaceae\nalbuginea\nalbugineous\nalbuginitis\nalbugo\nalbum\nalbumean\nalbumen\nalbumenization\nalbumenize\nalbumenizer\nalbumimeter\nalbumin\nalbuminate\nalbuminaturia\nalbuminiferous\nalbuminiform\nalbuminimeter\nalbuminimetry\nalbuminiparous\nalbuminization\nalbuminize\nalbuminocholia\nalbuminofibrin\nalbuminogenous\nalbuminoid\nalbuminoidal\nalbuminolysis\nalbuminometer\nalbuminometry\nalbuminone\nalbuminorrhea\nalbuminoscope\nalbuminose\nalbuminosis\nalbuminous\nalbuminousness\nalbuminuria\nalbuminuric\nalbumoid\nalbumoscope\nalbumose\nalbumosuria\nalburn\nalburnous\nalburnum\nalbus\nalbutannin\nAlbyn\nAlca\nAlcaaba\nAlcae\nAlcaic\nalcaide\nalcalde\nalcaldeship\nalcaldia\nAlcaligenes\nalcalizate\nAlcalzar\nalcamine\nalcanna\nAlcantara\nAlcantarines\nalcarraza\nalcatras\nalcazar\nAlcedines\nAlcedinidae\nAlcedininae\nAlcedo\nalcelaphine\nAlcelaphus\nAlces\nalchemic\nalchemical\nalchemically\nAlchemilla\nalchemist\nalchemistic\nalchemistical\nalchemistry\nalchemize\nalchemy\nalchera\nalcheringa\nalchimy\nalchitran\nalchochoden\nAlchornea\nalchymy\nAlcibiadean\nAlcicornium\nAlcidae\nalcidine\nalcine\nAlcippe\nalclad\nalco\nalcoate\nalcogel\nalcogene\nalcohate\nalcohol\nalcoholate\nalcoholature\nalcoholdom\nalcoholemia\nalcoholic\nalcoholically\nalcoholicity\nalcoholimeter\nalcoholism\nalcoholist\nalcoholizable\nalcoholization\nalcoholize\nalcoholmeter\nalcoholmetric\nalcoholomania\nalcoholometer\nalcoholometric\nalcoholometrical\nalcoholometry\nalcoholophilia\nalcoholuria\nalcoholysis\nalcoholytic\nAlcor\nAlcoran\nAlcoranic\nAlcoranist\nalcornoco\nalcornoque\nalcosol\nAlcotate\nalcove\nalcovinometer\nAlcuinian\nalcyon\nAlcyonacea\nalcyonacean\nAlcyonaria\nalcyonarian\nAlcyone\nAlcyones\nAlcyoniaceae\nalcyonic\nalcyoniform\nAlcyonium\nalcyonoid\naldamine\naldane\naldazin\naldazine\naldeament\nAldebaran\naldebaranium\naldehol\naldehydase\naldehyde\naldehydic\naldehydine\naldehydrol\nalder\nAlderamin\nalderman\naldermanate\naldermancy\naldermaness\naldermanic\naldermanical\naldermanity\naldermanlike\naldermanly\naldermanry\naldermanship\naldern\nAlderney\nalderwoman\nAldhafara\nAldhafera\naldim\naldime\naldimine\nAldine\naldine\naldoheptose\naldohexose\naldoketene\naldol\naldolization\naldolize\naldononose\naldopentose\naldose\naldoside\naldoxime\nAldrovanda\nAldus\nale\nAlea\naleak\naleatory\nalebench\naleberry\nAlebion\nalec\nalecithal\nalecize\nAleck\naleconner\nalecost\nAlectoria\nalectoria\nAlectorides\nalectoridine\nalectorioid\nAlectoris\nalectoromachy\nalectoromancy\nAlectoromorphae\nalectoromorphous\nAlectoropodes\nalectoropodous\nAlectrion\nAlectrionidae\nalectryomachy\nalectryomancy\nAlectryon\nalecup\nalee\nalef\nalefnull\naleft\nalefzero\nalegar\nalehoof\nalehouse\nAlejandro\nalem\nalemana\nAlemanni\nAlemannian\nAlemannic\nAlemannish\nalembic\nalembicate\nalembroth\nAlemite\nalemite\nalemmal\nalemonger\nalen\nAlencon\nAleochara\naleph\nalephs\nalephzero\nalepidote\nalepole\nalepot\nAleppine\nAleppo\nalerce\nalerse\nalert\nalertly\nalertness\nalesan\nalestake\naletap\naletaster\nAlethea\nalethiology\nalethopteis\nalethopteroid\nalethoscope\naletocyte\nAletris\nalette\naleukemic\nAleurites\naleuritic\nAleurobius\nAleurodes\nAleurodidae\naleuromancy\naleurometer\naleuronat\naleurone\naleuronic\naleuroscope\nAleut\nAleutian\nAleutic\naleutite\nalevin\nalewife\nAlex\nAlexander\nalexanders\nAlexandra\nAlexandreid\nAlexandrian\nAlexandrianism\nAlexandrina\nAlexandrine\nalexandrite\nAlexas\nAlexia\nalexia\nAlexian\nalexic\nalexin\nalexinic\nalexipharmacon\nalexipharmacum\nalexipharmic\nalexipharmical\nalexipyretic\nAlexis\nalexiteric\nalexiterical\nAlexius\naleyard\nAleyrodes\naleyrodid\nAleyrodidae\nAlf\nalf\nalfa\nalfaje\nalfalfa\nalfaqui\nalfaquin\nalfenide\nalfet\nalfilaria\nalfileria\nalfilerilla\nalfilerillo\nalfiona\nAlfirk\nalfonsin\nalfonso\nalforja\nAlfred\nAlfreda\nalfresco\nalfridaric\nalfridary\nAlfur\nAlfurese\nAlfuro\nalga\nalgae\nalgaecide\nalgaeological\nalgaeologist\nalgaeology\nalgaesthesia\nalgaesthesis\nalgal\nalgalia\nAlgaroth\nalgarroba\nalgarrobilla\nalgarrobin\nAlgarsife\nAlgarsyf\nalgate\nAlgebar\nalgebra\nalgebraic\nalgebraical\nalgebraically\nalgebraist\nalgebraization\nalgebraize\nAlgedi\nalgedo\nalgedonic\nalgedonics\nalgefacient\nAlgenib\nAlgerian\nAlgerine\nalgerine\nAlgernon\nalgesia\nalgesic\nalgesis\nalgesthesis\nalgetic\nAlgic\nalgic\nalgid\nalgidity\nalgidness\nAlgieba\nalgific\nalgin\nalginate\nalgine\nalginic\nalginuresis\nalgiomuscular\nalgist\nalgivorous\nalgocyan\nalgodoncillo\nalgodonite\nalgoesthesiometer\nalgogenic\nalgoid\nAlgol\nalgolagnia\nalgolagnic\nalgolagnist\nalgolagny\nalgological\nalgologist\nalgology\nAlgoman\nalgometer\nalgometric\nalgometrical\nalgometrically\nalgometry\nAlgomian\nAlgomic\nAlgonkian\nAlgonquian\nAlgonquin\nalgophilia\nalgophilist\nalgophobia\nalgor\nAlgorab\nAlgores\nalgorism\nalgorismic\nalgorist\nalgoristic\nalgorithm\nalgorithmic\nalgosis\nalgous\nalgovite\nalgraphic\nalgraphy\nalguazil\nalgum\nAlgy\nAlhagi\nAlhambra\nAlhambraic\nAlhambresque\nAlhena\nalhenna\nalias\nAlibamu\nalibangbang\nalibi\nalibility\nalible\nAlicant\nAlice\nalichel\nAlichino\nAlicia\nAlick\nalicoche\nalictisal\nalicyclic\nAlida\nalidade\nAlids\nalien\nalienability\nalienable\nalienage\nalienate\nalienation\nalienator\naliency\nalienee\naliener\nalienicola\nalienigenate\nalienism\nalienist\nalienize\nalienor\nalienship\naliethmoid\naliethmoidal\nalif\naliferous\naliform\naligerous\nalight\nalign\naligner\nalignment\naligreek\naliipoe\nalike\nalikeness\nalikewise\nAlikuluf\nAlikulufan\nalilonghi\nalima\naliment\nalimental\nalimentally\nalimentariness\nalimentary\nalimentation\nalimentative\nalimentatively\nalimentativeness\nalimenter\nalimentic\nalimentive\nalimentiveness\nalimentotherapy\nalimentum\nalimonied\nalimony\nalin\nalinasal\nAline\nalineation\nalintatao\naliofar\nAlioth\nalipata\naliped\naliphatic\nalipterion\naliptes\naliptic\naliquant\naliquot\naliseptal\nalish\nalisier\nAlisma\nAlismaceae\nalismaceous\nalismad\nalismal\nAlismales\nAlismataceae\nalismoid\naliso\nAlison\nalison\nalisonite\nalisp\nalisphenoid\nalisphenoidal\nalist\nAlister\nalit\nalite\nalitrunk\naliturgic\naliturgical\naliunde\nalive\naliveness\nalivincular\nAlix\naliyah\nalizarate\nalizari\nalizarin\naljoba\nalk\nalkahest\nalkahestic\nalkahestica\nalkahestical\nAlkaid\nalkalamide\nalkalemia\nalkalescence\nalkalescency\nalkalescent\nalkali\nalkalic\nalkaliferous\nalkalifiable\nalkalify\nalkaligen\nalkaligenous\nalkalimeter\nalkalimetric\nalkalimetrical\nalkalimetrically\nalkalimetry\nalkaline\nalkalinity\nalkalinization\nalkalinize\nalkalinuria\nalkalizable\nalkalizate\nalkalization\nalkalize\nalkalizer\nalkaloid\nalkaloidal\nalkalometry\nalkalosis\nalkalous\nAlkalurops\nalkamin\nalkamine\nalkane\nalkanet\nAlkanna\nalkannin\nAlkaphrah\nalkapton\nalkaptonuria\nalkaptonuric\nalkargen\nalkarsin\nalkekengi\nalkene\nalkenna\nalkenyl\nalkermes\nAlkes\nalkide\nalkine\nalkool\nAlkoran\nAlkoranic\nalkoxide\nalkoxy\nalkoxyl\nalky\nalkyd\nalkyl\nalkylamine\nalkylate\nalkylation\nalkylene\nalkylic\nalkylidene\nalkylize\nalkylogen\nalkyloxy\nalkyne\nall\nallabuta\nallactite\nallaeanthus\nallagite\nallagophyllous\nallagostemonous\nAllah\nallalinite\nAllamanda\nallamotti\nAllan\nallan\nallanite\nallanitic\nallantiasis\nallantochorion\nallantoic\nallantoid\nallantoidal\nAllantoidea\nallantoidean\nallantoidian\nallantoin\nallantoinase\nallantoinuria\nallantois\nallantoxaidin\nallanturic\nAllasch\nallassotonic\nallative\nallatrate\nallay\nallayer\nallayment\nallbone\nAlle\nallecret\nallectory\nallegate\nallegation\nallegator\nallege\nallegeable\nallegedly\nallegement\nalleger\nAlleghenian\nAllegheny\nallegiance\nallegiancy\nallegiant\nallegoric\nallegorical\nallegorically\nallegoricalness\nallegorism\nallegorist\nallegorister\nallegoristic\nallegorization\nallegorize\nallegorizer\nallegory\nallegretto\nallegro\nallele\nallelic\nallelism\nallelocatalytic\nallelomorph\nallelomorphic\nallelomorphism\nallelotropic\nallelotropism\nallelotropy\nalleluia\nalleluiatic\nallemand\nallemande\nallemontite\nAllen\nallenarly\nallene\nAllentiac\nAllentiacan\naller\nallergen\nallergenic\nallergia\nallergic\nallergin\nallergist\nallergy\nallerion\nallesthesia\nalleviate\nalleviatingly\nalleviation\nalleviative\nalleviator\nalleviatory\nalley\nalleyed\nalleyite\nalleyway\nallgood\nAllhallow\nAllhallowtide\nallheal\nalliable\nalliably\nAlliaceae\nalliaceous\nalliance\nalliancer\nAlliaria\nallicampane\nallice\nallicholly\nalliciency\nallicient\nAllie\nallied\nAllies\nallies\nalligate\nalligator\nalligatored\nallineate\nallineation\nAllionia\nAllioniaceae\nallision\nalliteral\nalliterate\nalliteration\nalliterational\nalliterationist\nalliterative\nalliteratively\nalliterativeness\nalliterator\nAllium\nallivalite\nallmouth\nallness\nAllobroges\nallocable\nallocaffeine\nallocatable\nallocate\nallocatee\nallocation\nallocator\nallochetia\nallochetite\nallochezia\nallochiral\nallochirally\nallochiria\nallochlorophyll\nallochroic\nallochroite\nallochromatic\nallochroous\nallochthonous\nallocinnamic\nalloclase\nalloclasite\nallocochick\nallocrotonic\nallocryptic\nallocute\nallocution\nallocutive\nallocyanine\nallodelphite\nallodesmism\nalloeosis\nalloeostropha\nalloeotic\nalloerotic\nalloerotism\nallogamous\nallogamy\nallogene\nallogeneity\nallogeneous\nallogenic\nallogenically\nallograph\nalloiogenesis\nalloisomer\nalloisomeric\nalloisomerism\nallokinesis\nallokinetic\nallokurtic\nallomerism\nallomerous\nallometric\nallometry\nallomorph\nallomorphic\nallomorphism\nallomorphite\nallomucic\nallonomous\nallonym\nallonymous\nallopalladium\nallopath\nallopathetic\nallopathetically\nallopathic\nallopathically\nallopathist\nallopathy\nallopatric\nallopatrically\nallopatry\nallopelagic\nallophanamide\nallophanates\nallophane\nallophanic\nallophone\nallophyle\nallophylian\nallophylic\nAllophylus\nallophytoid\nalloplasm\nalloplasmatic\nalloplasmic\nalloplast\nalloplastic\nalloplasty\nalloploidy\nallopolyploid\nallopsychic\nalloquial\nalloquialism\nalloquy\nallorhythmia\nallorrhyhmia\nallorrhythmic\nallosaur\nAllosaurus\nallose\nallosematic\nallosome\nallosyndesis\nallosyndetic\nallot\nallotee\nallotelluric\nallotheism\nAllotheria\nallothigene\nallothigenetic\nallothigenetically\nallothigenic\nallothigenous\nallothimorph\nallothimorphic\nallothogenic\nallothogenous\nallotment\nallotriodontia\nAllotriognathi\nallotriomorphic\nallotriophagia\nallotriophagy\nallotriuria\nallotrope\nallotrophic\nallotropic\nallotropical\nallotropically\nallotropicity\nallotropism\nallotropize\nallotropous\nallotropy\nallotrylic\nallottable\nallottee\nallotter\nallotype\nallotypical\nallover\nallow\nallowable\nallowableness\nallowably\nallowance\nallowedly\nallower\nalloxan\nalloxanate\nalloxanic\nalloxantin\nalloxuraemia\nalloxuremia\nalloxuric\nalloxyproteic\nalloy\nalloyage\nallozooid\nallseed\nallspice\nallthing\nallthorn\nalltud\nallude\nallure\nallurement\nallurer\nalluring\nalluringly\nalluringness\nallusion\nallusive\nallusively\nallusiveness\nalluvia\nalluvial\nalluviate\nalluviation\nalluvion\nalluvious\nalluvium\nallwhere\nallwhither\nallwork\nAllworthy\nAlly\nally\nallyl\nallylamine\nallylate\nallylation\nallylene\nallylic\nallylthiourea\nAlma\nalma\nAlmach\nalmaciga\nalmacigo\nalmadia\nalmadie\nalmagest\nalmagra\nAlmain\nAlman\nalmanac\nalmandine\nalmandite\nalme\nalmeidina\nalmemar\nAlmerian\nalmeriite\nAlmida\nalmightily\nalmightiness\nalmighty\nalmique\nAlmira\nalmirah\nalmochoden\nAlmohad\nAlmohade\nAlmohades\nalmoign\nAlmon\nalmon\nalmond\nalmondy\nalmoner\nalmonership\nalmonry\nAlmoravid\nAlmoravide\nAlmoravides\nalmost\nalmous\nalms\nalmsdeed\nalmsfolk\nalmsful\nalmsgiver\nalmsgiving\nalmshouse\nalmsman\nalmswoman\nalmucantar\nalmuce\nalmud\nalmude\nalmug\nAlmuredin\nalmuten\naln\nalnage\nalnager\nalnagership\nAlnaschar\nAlnascharism\nalnein\nalnico\nAlnilam\nalniresinol\nAlnitak\nAlnitham\nalniviridol\nalnoite\nalnuin\nAlnus\nalo\nAloadae\nAlocasia\nalochia\nalod\nalodial\nalodialism\nalodialist\nalodiality\nalodially\nalodian\nalodiary\nalodification\nalodium\nalody\naloe\naloed\naloelike\naloemodin\naloeroot\naloesol\naloeswood\naloetic\naloetical\naloewood\naloft\nalogia\nAlogian\nalogical\nalogically\nalogism\nalogy\naloid\naloin\nAlois\naloisiite\naloma\nalomancy\nalone\naloneness\nalong\nalongshore\nalongshoreman\nalongside\nalongst\nAlonso\nAlonsoa\nAlonzo\naloof\naloofly\naloofness\naloose\nalop\nalopecia\nAlopecias\nalopecist\nalopecoid\nAlopecurus\nalopeke\nAlopias\nAlopiidae\nAlosa\nalose\nAlouatta\nalouatte\naloud\nalow\nalowe\nAloxite\nAloysia\nAloysius\nalp\nalpaca\nalpasotes\nAlpax\nalpeen\nAlpen\nalpenglow\nalpenhorn\nalpenstock\nalpenstocker\nalpestral\nalpestrian\nalpestrine\nalpha\nalphabet\nalphabetarian\nalphabetic\nalphabetical\nalphabetically\nalphabetics\nalphabetiform\nalphabetism\nalphabetist\nalphabetization\nalphabetize\nalphabetizer\nAlphard\nalphatoluic\nAlphean\nAlphecca\nalphenic\nAlpheratz\nalphitomancy\nalphitomorphous\nalphol\nAlphonist\nAlphonse\nAlphonsine\nAlphonsism\nAlphonso\nalphorn\nalphos\nalphosis\nalphyl\nAlpian\nAlpid\nalpieu\nalpigene\nAlpine\nalpine\nalpinely\nalpinery\nalpinesque\nAlpinia\nAlpiniaceae\nAlpinism\nAlpinist\nalpist\nAlpujarra\nalqueire\nalquier\nalquifou\nalraun\nalreadiness\nalready\nalright\nalrighty\nalroot\nalruna\nAlsatia\nAlsatian\nalsbachite\nAlshain\nAlsinaceae\nalsinaceous\nAlsine\nalso\nalsoon\nAlsophila\nAlstonia\nalstonidine\nalstonine\nalstonite\nAlstroemeria\nalsweill\nalt\nAltaian\nAltaic\nAltaid\nAltair\naltaite\nAltamira\naltar\naltarage\naltared\naltarist\naltarlet\naltarpiece\naltarwise\naltazimuth\nalter\nalterability\nalterable\nalterableness\nalterably\nalterant\nalterate\nalteration\nalterative\naltercate\naltercation\naltercative\nalteregoism\nalteregoistic\nalterer\nalterity\naltern\nalternacy\nalternance\nalternant\nAlternanthera\nAlternaria\nalternariose\nalternate\nalternately\nalternateness\nalternating\nalternatingly\nalternation\nalternationist\nalternative\nalternatively\nalternativeness\nalternativity\nalternator\nalterne\nalternifoliate\nalternipetalous\nalternipinnate\nalternisepalous\nalternize\nalterocentric\nAlthaea\nalthaein\nAlthea\nalthea\nalthein\naltheine\nalthionic\naltho\nalthorn\nalthough\nAltica\nAlticamelus\naltigraph\naltilik\naltiloquence\naltiloquent\naltimeter\naltimetrical\naltimetrically\naltimetry\naltin\naltincar\nAltingiaceae\naltingiaceous\naltininck\naltiplano\naltiscope\naltisonant\naltisonous\naltissimo\naltitude\naltitudinal\naltitudinarian\nalto\naltogether\naltogetherness\naltometer\naltoun\naltrices\naltricial\naltropathy\naltrose\naltruism\naltruist\naltruistic\naltruistically\naltschin\naltun\nAluco\nAluconidae\nAluconinae\naludel\nAludra\nalula\nalular\nalulet\nAlulim\nalum\nalumbloom\nAlumel\nalumic\nalumiferous\nalumina\naluminaphone\naluminate\nalumine\naluminic\naluminide\naluminiferous\naluminiform\naluminish\naluminite\naluminium\naluminize\naluminoferric\naluminographic\naluminography\naluminose\naluminosilicate\naluminosis\naluminosity\naluminothermic\naluminothermics\naluminothermy\naluminotype\naluminous\naluminum\naluminyl\nalumish\nalumite\nalumium\nalumna\nalumnae\nalumnal\nalumni\nalumniate\nAlumnol\nalumnus\nalumohydrocalcite\nalumroot\nAlundum\naluniferous\nalunite\nalunogen\nalupag\nAlur\nalure\nalurgite\nalushtite\naluta\nalutaceous\nAlvah\nAlvan\nalvar\nalvearium\nalveary\nalveloz\nalveola\nalveolar\nalveolariform\nalveolary\nalveolate\nalveolated\nalveolation\nalveole\nalveolectomy\nalveoli\nalveoliform\nalveolite\nAlveolites\nalveolitis\nalveoloclasia\nalveolocondylean\nalveolodental\nalveololabial\nalveololingual\nalveolonasal\nalveolosubnasal\nalveolotomy\nalveolus\nalveus\nalviducous\nAlvin\nAlvina\nalvine\nAlvissmal\nalvite\nalvus\nalway\nalways\naly\nAlya\nalycompaine\nalymphia\nalymphopotent\nalypin\nalysson\nAlyssum\nalytarch\nAlytes\nam\nama\namaas\nAmabel\namability\namacratic\namacrinal\namacrine\namadavat\namadelphous\nAmadi\nAmadis\namadou\nAmaethon\nAmafingo\namaga\namah\nAmahuaca\namain\namaister\namakebe\nAmakosa\namala\namalaita\namalaka\nAmalfian\nAmalfitan\namalgam\namalgamable\namalgamate\namalgamation\namalgamationist\namalgamative\namalgamatize\namalgamator\namalgamist\namalgamization\namalgamize\nAmalings\nAmalrician\namaltas\namamau\nAmampondo\nAmanda\namandin\nAmandus\namang\namani\namania\nAmanist\nAmanita\namanitin\namanitine\nAmanitopsis\namanori\namanous\namantillo\namanuenses\namanuensis\namapa\nAmapondo\namar\nAmara\nAmarantaceae\namarantaceous\namaranth\nAmaranthaceae\namaranthaceous\namaranthine\namaranthoid\nAmaranthus\namarantite\nAmarantus\namarelle\namarevole\namargoso\namarillo\namarin\namarine\namaritude\namarity\namaroid\namaroidal\nAmarth\namarthritis\namaryllid\nAmaryllidaceae\namaryllidaceous\namaryllideous\nAmaryllis\namasesis\namass\namassable\namasser\namassment\nAmasta\namasthenic\namastia\namasty\nAmatembu\namaterialistic\namateur\namateurish\namateurishly\namateurishness\namateurism\namateurship\nAmati\namative\namatively\namativeness\namatol\namatorial\namatorially\namatorian\namatorious\namatory\namatrice\namatungula\namaurosis\namaurotic\namaze\namazed\namazedly\namazedness\namazeful\namazement\namazia\nAmazilia\namazing\namazingly\nAmazon\nAmazona\nAmazonian\nAmazonism\namazonite\nAmazulu\namba\nambage\nambagiosity\nambagious\nambagiously\nambagiousness\nambagitory\nambalam\namban\nambar\nambaree\nambarella\nambary\nambash\nambassade\nAmbassadeur\nambassador\nambassadorial\nambassadorially\nambassadorship\nambassadress\nambassage\nambassy\nambatch\nambatoarinite\nambay\nambeer\namber\namberfish\nambergris\namberiferous\namberite\namberoid\namberous\nambery\nambicolorate\nambicoloration\nambidexter\nambidexterity\nambidextral\nambidextrous\nambidextrously\nambidextrousness\nambience\nambiency\nambiens\nambient\nambier\nambigenous\nambiguity\nambiguous\nambiguously\nambiguousness\nambilateral\nambilateralaterally\nambilaterality\nambilevous\nambilian\nambilogy\nambiopia\nambiparous\nambisinister\nambisinistrous\nambisporangiate\nambisyllabic\nambit\nambital\nambitendency\nambition\nambitionist\nambitionless\nambitionlessly\nambitious\nambitiously\nambitiousness\nambitty\nambitus\nambivalence\nambivalency\nambivalent\nambivert\namble\nambler\nambling\namblingly\namblotic\namblyacousia\namblyaphia\nAmblycephalidae\nAmblycephalus\namblychromatic\nAmblydactyla\namblygeusia\namblygon\namblygonal\namblygonite\namblyocarpous\nAmblyomma\namblyope\namblyopia\namblyopic\nAmblyopsidae\nAmblyopsis\namblyoscope\namblypod\nAmblypoda\namblypodous\nAmblyrhynchus\namblystegite\nAmblystoma\nambo\namboceptoid\namboceptor\nAmbocoelia\nAmboina\nAmboinese\nambomalleal\nambon\nambonite\nAmbonnay\nambos\nambosexous\nambosexual\nambrain\nambrein\nambrette\nAmbrica\nambrite\nambroid\nambrology\nAmbrose\nambrose\nambrosia\nambrosiac\nAmbrosiaceae\nambrosiaceous\nambrosial\nambrosially\nAmbrosian\nambrosian\nambrosiate\nambrosin\nambrosine\nAmbrosio\nambrosterol\nambrotype\nambry\nambsace\nambulacral\nambulacriform\nambulacrum\nambulance\nambulancer\nambulant\nambulate\nambulatio\nambulation\nambulative\nambulator\nAmbulatoria\nambulatorial\nambulatorium\nambulatory\nambuling\nambulomancy\namburbial\nambury\nambuscade\nambuscader\nambush\nambusher\nambushment\nAmbystoma\nAmbystomidae\namchoor\name\namebiform\nAmedeo\nameed\nameen\nAmeiuridae\nAmeiurus\nAmeiva\nAmelanchier\namelcorn\nAmelia\namelia\namelification\nameliorable\nameliorableness\nameliorant\nameliorate\namelioration\nameliorativ\nameliorative\nameliorator\namellus\nameloblast\nameloblastic\namelu\namelus\nAmen\namen\namenability\namenable\namenableness\namenably\namend\namendable\namendableness\namendatory\namende\namender\namendment\namends\namene\namenia\nAmenism\nAmenite\namenity\namenorrhea\namenorrheal\namenorrheic\namenorrhoea\nament\namentaceous\namental\namentia\nAmentiferae\namentiferous\namentiform\namentulum\namentum\namerce\namerceable\namercement\namercer\namerciament\nAmerica\nAmerican\nAmericana\nAmericanese\nAmericanism\nAmericanist\nAmericanistic\nAmericanitis\nAmericanization\nAmericanize\nAmericanizer\nAmericanly\nAmericanoid\nAmericaward\nAmericawards\namericium\nAmericomania\nAmericophobe\nAmerimnon\nAmerind\nAmerindian\nAmerindic\namerism\nameristic\namesite\nAmetabola\nametabole\nametabolia\nametabolian\nametabolic\nametabolism\nametabolous\nametaboly\nametallous\namethodical\namethodically\namethyst\namethystine\nametoecious\nametria\nametrometer\nametrope\nametropia\nametropic\nametrous\nAmex\namgarn\namhar\namherstite\namhran\nAmi\nami\nAmia\namiability\namiable\namiableness\namiably\namianth\namianthiform\namianthine\nAmianthium\namianthoid\namianthoidal\namianthus\namic\namicability\namicable\namicableness\namicably\namical\namice\namiced\namicicide\namicrobic\namicron\namicronucleate\namid\namidase\namidate\namidation\namide\namidic\namidid\namidide\namidin\namidine\nAmidism\nAmidist\namido\namidoacetal\namidoacetic\namidoacetophenone\namidoaldehyde\namidoazo\namidoazobenzene\namidoazobenzol\namidocaffeine\namidocapric\namidofluorid\namidofluoride\namidogen\namidoguaiacol\namidohexose\namidoketone\namidol\namidomyelin\namidon\namidophenol\namidophosphoric\namidoplast\namidoplastid\namidopyrine\namidosuccinamic\namidosulphonal\namidothiazole\namidoxime\namidoxy\namidoxyl\namidrazone\namidship\namidships\namidst\namidstream\namidulin\nAmigo\nAmiidae\namil\nAmiles\nAmiloun\namimia\namimide\namin\naminate\namination\namine\namini\naminic\naminity\naminization\naminize\namino\naminoacetal\naminoacetanilide\naminoacetic\naminoacetone\naminoacetophenetidine\naminoacetophenone\naminoacidemia\naminoaciduria\naminoanthraquinone\naminoazobenzene\naminobarbituric\naminobenzaldehyde\naminobenzamide\naminobenzene\naminobenzoic\naminocaproic\naminodiphenyl\naminoethionic\naminoformic\naminogen\naminoglutaric\naminoguanidine\naminoid\naminoketone\naminolipin\naminolysis\naminolytic\naminomalonic\naminomyelin\naminophenol\naminoplast\naminoplastic\naminopropionic\naminopurine\naminopyrine\naminoquinoline\naminosis\naminosuccinamic\naminosulphonic\naminothiophen\naminovaleric\naminoxylol\nAminta\nAmintor\nAmioidei\nAmir\namir\nAmiranha\namiray\namirship\nAmish\nAmishgo\namiss\namissibility\namissible\namissness\nAmita\nAmitabha\namitosis\namitotic\namitotically\namity\namixia\nAmizilis\namla\namli\namlikar\namlong\nAmma\namma\namman\nAmmanite\nammelide\nammelin\nammeline\nammer\nammeter\nAmmi\nAmmiaceae\nammiaceous\nammine\namminochloride\namminolysis\namminolytic\nammiolite\nammo\nAmmobium\nammochaeta\nammochryse\nammocoete\nammocoetes\nammocoetid\nAmmocoetidae\nammocoetiform\nammocoetoid\nAmmodytes\nAmmodytidae\nammodytoid\nammonal\nammonate\nammonation\nAmmonea\nammonia\nammoniacal\nammoniacum\nammoniate\nammoniation\nammonic\nammonical\nammoniemia\nammonification\nammonifier\nammonify\nammoniojarosite\nammonion\nammonionitrate\nAmmonite\nammonite\nAmmonites\nAmmonitess\nammonitic\nammoniticone\nammonitiferous\nAmmonitish\nammonitoid\nAmmonitoidea\nammonium\nammoniuria\nammonization\nammono\nammonobasic\nammonocarbonic\nammonocarbonous\nammonoid\nAmmonoidea\nammonoidean\nammonolysis\nammonolytic\nammonolyze\nAmmophila\nammophilous\nammoresinol\nammotherapy\nammu\nammunition\namnemonic\namnesia\namnesic\namnestic\namnesty\namnia\namniac\namniatic\namnic\nAmnigenia\namnioallantoic\namniocentesis\namniochorial\namnioclepsis\namniomancy\namnion\nAmnionata\namnionate\namnionic\namniorrhea\nAmniota\namniote\namniotic\namniotitis\namniotome\namober\namobyr\namoeba\namoebae\nAmoebaea\namoebaean\namoebaeum\namoebalike\namoeban\namoebian\namoebiasis\namoebic\namoebicide\namoebid\nAmoebida\nAmoebidae\namoebiform\nAmoebobacter\nAmoebobacterieae\namoebocyte\nAmoebogeniae\namoeboid\namoeboidism\namoebous\namoebula\namok\namoke\namole\namolilla\namomal\nAmomales\nAmomis\namomum\namong\namongst\namontillado\namor\namorado\namoraic\namoraim\namoral\namoralism\namoralist\namorality\namoralize\nAmores\namoret\namoretto\nAmoreuxia\namorism\namorist\namoristic\nAmorite\nAmoritic\nAmoritish\namorosity\namoroso\namorous\namorously\namorousness\nAmorpha\namorphia\namorphic\namorphinism\namorphism\nAmorphophallus\namorphophyte\namorphotae\namorphous\namorphously\namorphousness\namorphus\namorphy\namort\namortisseur\namortizable\namortization\namortize\namortizement\nAmorua\nAmos\nAmoskeag\namotion\namotus\namount\namour\namourette\namovability\namovable\namove\nAmoy\nAmoyan\nAmoyese\nampalaya\nampalea\nampangabeite\nampasimenite\nAmpelidaceae\nampelidaceous\nAmpelidae\nampelideous\nAmpelis\nampelite\nampelitic\nampelographist\nampelography\nampelopsidin\nampelopsin\nAmpelopsis\nAmpelosicyos\nampelotherapy\namper\namperage\nampere\namperemeter\nAmperian\namperometer\nampersand\nampery\namphanthium\nampheclexis\nampherotokous\nampherotoky\namphetamine\namphiarthrodial\namphiarthrosis\namphiaster\namphibalus\nAmphibia\namphibial\namphibian\namphibichnite\namphibiety\namphibiological\namphibiology\namphibion\namphibiotic\nAmphibiotica\namphibious\namphibiously\namphibiousness\namphibium\namphiblastic\namphiblastula\namphiblestritis\nAmphibola\namphibole\namphibolia\namphibolic\namphiboliferous\namphiboline\namphibolite\namphibolitic\namphibological\namphibologically\namphibologism\namphibology\namphibolous\namphiboly\namphibrach\namphibrachic\namphibryous\nAmphicarpa\nAmphicarpaea\namphicarpic\namphicarpium\namphicarpogenous\namphicarpous\namphicentric\namphichroic\namphichrom\namphichromatic\namphichrome\namphicoelian\namphicoelous\nAmphicondyla\namphicondylous\namphicrania\namphicreatinine\namphicribral\namphictyon\namphictyonian\namphictyonic\namphictyony\nAmphicyon\nAmphicyonidae\namphicyrtic\namphicyrtous\namphicytula\namphid\namphide\namphidesmous\namphidetic\namphidiarthrosis\namphidiploid\namphidiploidy\namphidisc\nAmphidiscophora\namphidiscophoran\namphierotic\namphierotism\nAmphigaea\namphigam\nAmphigamae\namphigamous\namphigastrium\namphigastrula\namphigean\namphigen\namphigene\namphigenesis\namphigenetic\namphigenous\namphigenously\namphigonic\namphigonium\namphigonous\namphigony\namphigoric\namphigory\namphigouri\namphikaryon\namphilogism\namphilogy\namphimacer\namphimictic\namphimictical\namphimictically\namphimixis\namphimorula\nAmphinesian\nAmphineura\namphineurous\namphinucleus\nAmphion\nAmphionic\nAmphioxi\nAmphioxidae\nAmphioxides\nAmphioxididae\namphioxus\namphipeptone\namphiphloic\namphiplatyan\nAmphipleura\namphiploid\namphiploidy\namphipneust\nAmphipneusta\namphipneustic\nAmphipnous\namphipod\nAmphipoda\namphipodal\namphipodan\namphipodiform\namphipodous\namphiprostylar\namphiprostyle\namphiprotic\namphipyrenin\nAmphirhina\namphirhinal\namphirhine\namphisarca\namphisbaena\namphisbaenian\namphisbaenic\nAmphisbaenidae\namphisbaenoid\namphisbaenous\namphiscians\namphiscii\nAmphisile\nAmphisilidae\namphispermous\namphisporangiate\namphispore\nAmphistoma\namphistomatic\namphistome\namphistomoid\namphistomous\nAmphistomum\namphistylar\namphistylic\namphistyly\namphitene\namphitheater\namphitheatered\namphitheatral\namphitheatric\namphitheatrical\namphitheatrically\namphithecial\namphithecium\namphithect\namphithyron\namphitokal\namphitokous\namphitoky\namphitriaene\namphitrichous\nAmphitrite\namphitropal\namphitropous\nAmphitruo\nAmphitryon\nAmphiuma\nAmphiumidae\namphivasal\namphivorous\nAmphizoidae\namphodarch\namphodelite\namphodiplopia\namphogenous\nampholyte\namphopeptone\namphophil\namphophile\namphophilic\namphophilous\namphora\namphoral\namphore\namphorette\namphoric\namphoricity\namphoriloquy\namphorophony\namphorous\namphoteric\nAmphrysian\nample\namplectant\nampleness\namplexation\namplexicaudate\namplexicaul\namplexicauline\namplexifoliate\namplexus\nampliate\nampliation\nampliative\namplicative\namplidyne\namplification\namplificative\namplificator\namplificatory\namplifier\namplify\namplitude\namply\nampollosity\nampongue\nampoule\nampul\nampulla\nampullaceous\nampullar\nAmpullaria\nAmpullariidae\nampullary\nampullate\nampullated\nampulliform\nampullitis\nampullula\namputate\namputation\namputational\namputative\namputator\namputee\nampyx\namra\namreeta\namrita\nAmritsar\namsath\namsel\nAmsonia\nAmsterdamer\namt\namtman\nAmuchco\namuck\nAmueixa\namuguis\namula\namulet\namuletic\namulla\namunam\namurca\namurcosity\namurcous\nAmurru\namusable\namuse\namused\namusedly\namusee\namusement\namuser\namusette\nAmusgo\namusia\namusing\namusingly\namusingness\namusive\namusively\namusiveness\namutter\namuyon\namuyong\namuze\namvis\nAmy\namy\nAmyclaean\nAmyclas\namyelencephalia\namyelencephalic\namyelencephalous\namyelia\namyelic\namyelinic\namyelonic\namyelous\namygdal\namygdala\nAmygdalaceae\namygdalaceous\namygdalase\namygdalate\namygdalectomy\namygdalic\namygdaliferous\namygdaliform\namygdalin\namygdaline\namygdalinic\namygdalitis\namygdaloid\namygdaloidal\namygdalolith\namygdaloncus\namygdalopathy\namygdalothripsis\namygdalotome\namygdalotomy\nAmygdalus\namygdonitrile\namygdophenin\namygdule\namyl\namylaceous\namylamine\namylan\namylase\namylate\namylemia\namylene\namylenol\namylic\namylidene\namyliferous\namylin\namylo\namylocellulose\namyloclastic\namylocoagulase\namylodextrin\namylodyspepsia\namylogen\namylogenesis\namylogenic\namylohydrolysis\namylohydrolytic\namyloid\namyloidal\namyloidosis\namyloleucite\namylolysis\namylolytic\namylom\namylometer\namylon\namylopectin\namylophagia\namylophosphate\namylophosphoric\namyloplast\namyloplastic\namyloplastid\namylopsin\namylose\namylosis\namylosynthesis\namylum\namyluria\nAmynodon\namynodont\namyosthenia\namyosthenic\namyotaxia\namyotonia\namyotrophia\namyotrophic\namyotrophy\namyous\nAmyraldism\nAmyraldist\nAmyridaceae\namyrin\nAmyris\namyrol\namyroot\nAmytal\namyxorrhea\namyxorrhoea\nan\nAna\nana\nAnabaena\nAnabantidae\nAnabaptism\nAnabaptist\nAnabaptistic\nAnabaptistical\nAnabaptistically\nAnabaptistry\nanabaptize\nAnabas\nanabasine\nanabasis\nanabasse\nanabata\nanabathmos\nanabatic\nanaberoga\nanabibazon\nanabiosis\nanabiotic\nAnablepidae\nAnableps\nanabo\nanabohitsite\nanabolic\nanabolin\nanabolism\nanabolite\nanabolize\nanabong\nanabranch\nanabrosis\nanabrotic\nanacahuita\nanacahuite\nanacalypsis\nanacampsis\nanacamptic\nanacamptically\nanacamptics\nanacamptometer\nanacanth\nanacanthine\nAnacanthini\nanacanthous\nanacara\nanacard\nAnacardiaceae\nanacardiaceous\nanacardic\nAnacardium\nanacatadidymus\nanacatharsis\nanacathartic\nanacephalaeosis\nanacephalize\nAnaces\nAnacharis\nanachorism\nanachromasis\nanachronic\nanachronical\nanachronically\nanachronism\nanachronismatical\nanachronist\nanachronistic\nanachronistical\nanachronistically\nanachronize\nanachronous\nanachronously\nanachueta\nanacid\nanacidity\nanaclasis\nanaclastic\nanaclastics\nAnaclete\nanacleticum\nanaclinal\nanaclisis\nanaclitic\nanacoenosis\nanacoluthia\nanacoluthic\nanacoluthically\nanacoluthon\nanaconda\nAnacreon\nAnacreontic\nAnacreontically\nanacrisis\nAnacrogynae\nanacrogynae\nanacrogynous\nanacromyodian\nanacrotic\nanacrotism\nanacrusis\nanacrustic\nanacrustically\nanaculture\nanacusia\nanacusic\nanacusis\nAnacyclus\nanadem\nanadenia\nanadicrotic\nanadicrotism\nanadidymus\nanadiplosis\nanadipsia\nanadipsic\nanadrom\nanadromous\nAnadyomene\nanaematosis\nanaemia\nanaemic\nanaeretic\nanaerobation\nanaerobe\nanaerobia\nanaerobian\nanaerobic\nanaerobically\nanaerobies\nanaerobion\nanaerobiont\nanaerobiosis\nanaerobiotic\nanaerobiotically\nanaerobious\nanaerobism\nanaerobium\nanaerophyte\nanaeroplastic\nanaeroplasty\nanaesthesia\nanaesthesiant\nanaesthetically\nanaesthetizer\nanaetiological\nanagalactic\nAnagallis\nanagap\nanagenesis\nanagenetic\nanagep\nanagignoskomena\nanaglyph\nanaglyphic\nanaglyphical\nanaglyphics\nanaglyphoscope\nanaglyphy\nanaglyptic\nanaglyptical\nanaglyptics\nanaglyptograph\nanaglyptographic\nanaglyptography\nanaglypton\nanagnorisis\nanagnost\nanagoge\nanagogic\nanagogical\nanagogically\nanagogics\nanagogy\nanagram\nanagrammatic\nanagrammatical\nanagrammatically\nanagrammatism\nanagrammatist\nanagrammatize\nanagrams\nanagraph\nanagua\nanagyrin\nanagyrine\nAnagyris\nanahau\nAnahita\nAnaitis\nAnakes\nanakinesis\nanakinetic\nanakinetomer\nanakinetomeric\nanakoluthia\nanakrousis\nanaktoron\nanal\nanalabos\nanalav\nanalcime\nanalcimite\nanalcite\nanalcitite\nanalecta\nanalectic\nanalects\nanalemma\nanalemmatic\nanalepsis\nanalepsy\nanaleptic\nanaleptical\nanalgen\nanalgesia\nanalgesic\nAnalgesidae\nanalgesis\nanalgesist\nanalgetic\nanalgia\nanalgic\nanalgize\nanalkalinity\nanallagmatic\nanallantoic\nAnallantoidea\nanallantoidean\nanallergic\nanally\nanalogic\nanalogical\nanalogically\nanalogicalness\nanalogion\nanalogism\nanalogist\nanalogistic\nanalogize\nanalogon\nanalogous\nanalogously\nanalogousness\nanalogue\nanalogy\nanalphabet\nanalphabete\nanalphabetic\nanalphabetical\nanalphabetism\nanalysability\nanalysable\nanalysand\nanalysation\nanalyse\nanalyser\nanalyses\nanalysis\nanalyst\nanalytic\nanalytical\nanalytically\nanalytics\nanalyzability\nanalyzable\nanalyzation\nanalyze\nanalyzer\nAnam\nanam\nanama\nanamesite\nanametadromous\nAnamirta\nanamirtin\nAnamite\nanamite\nanammonid\nanammonide\nanamnesis\nanamnestic\nanamnestically\nAnamnia\nAnamniata\nAnamnionata\nanamnionic\nAnamniota\nanamniote\nanamniotic\nanamorphic\nanamorphism\nanamorphoscope\nanamorphose\nanamorphosis\nanamorphote\nanamorphous\nanan\nanana\nananaplas\nananaples\nananas\nananda\nanandrarious\nanandria\nanandrous\nananepionic\nanangioid\nanangular\nAnanias\nAnanism\nAnanite\nanankastic\nAnansi\nAnanta\nanantherate\nanantherous\nananthous\nananym\nanapaest\nanapaestic\nanapaestical\nanapaestically\nanapaganize\nanapaite\nanapanapa\nanapeiratic\nanaphalantiasis\nAnaphalis\nanaphase\nAnaphe\nanaphia\nanaphora\nanaphoral\nanaphoria\nanaphoric\nanaphorical\nanaphrodisia\nanaphrodisiac\nanaphroditic\nanaphroditous\nanaphylactic\nanaphylactin\nanaphylactogen\nanaphylactogenic\nanaphylactoid\nanaphylatoxin\nanaphylaxis\nanaphyte\nanaplasia\nanaplasis\nanaplasm\nAnaplasma\nanaplasmosis\nanaplastic\nanaplasty\nanaplerosis\nanaplerotic\nanapnea\nanapneic\nanapnoeic\nanapnograph\nanapnoic\nanapnometer\nanapodeictic\nanapophysial\nanapophysis\nanapsid\nAnapsida\nanapsidan\nAnapterygota\nanapterygote\nanapterygotism\nanapterygotous\nAnaptomorphidae\nAnaptomorphus\nanaptotic\nanaptychus\nanaptyctic\nanaptyctical\nanaptyxis\nanaqua\nanarcestean\nAnarcestes\nanarch\nanarchal\nanarchial\nanarchic\nanarchical\nanarchically\nanarchism\nanarchist\nanarchistic\nanarchize\nanarchoindividualist\nanarchosocialist\nanarchosyndicalism\nanarchosyndicalist\nanarchy\nanarcotin\nanareta\nanaretic\nanaretical\nanargyros\nanarthria\nanarthric\nanarthropod\nAnarthropoda\nanarthropodous\nanarthrosis\nanarthrous\nanarthrously\nanarthrousness\nanartismos\nanarya\nAnaryan\nAnas\nAnasa\nanasarca\nanasarcous\nAnasazi\nanaschistic\nanaseismic\nAnasitch\nanaspadias\nanaspalin\nAnaspida\nAnaspidacea\nAnaspides\nanastalsis\nanastaltic\nAnastasia\nAnastasian\nanastasimon\nanastasimos\nanastasis\nAnastasius\nanastate\nanastatic\nAnastatica\nAnastatus\nanastigmat\nanastigmatic\nanastomose\nanastomosis\nanastomotic\nAnastomus\nanastrophe\nAnastrophia\nAnat\nanatase\nanatexis\nanathema\nanathematic\nanathematical\nanathematically\nanathematism\nanathematization\nanathematize\nanathematizer\nanatheme\nanathemize\nAnatherum\nAnatidae\nanatifa\nAnatifae\nanatifer\nanatiferous\nAnatinacea\nAnatinae\nanatine\nanatocism\nAnatole\nAnatolian\nAnatolic\nAnatoly\nanatomic\nanatomical\nanatomically\nanatomicobiological\nanatomicochirurgical\nanatomicomedical\nanatomicopathologic\nanatomicopathological\nanatomicophysiologic\nanatomicophysiological\nanatomicosurgical\nanatomism\nanatomist\nanatomization\nanatomize\nanatomizer\nanatomopathologic\nanatomopathological\nanatomy\nanatopism\nanatox\nanatoxin\nanatreptic\nanatripsis\nanatripsology\nanatriptic\nanatron\nanatropal\nanatropia\nanatropous\nAnatum\nanaudia\nanaunter\nanaunters\nAnax\nAnaxagorean\nAnaxagorize\nanaxial\nAnaximandrian\nanaxon\nanaxone\nAnaxonia\nanay\nanazoturia\nanba\nanbury\nAncerata\nancestor\nancestorial\nancestorially\nancestral\nancestrally\nancestress\nancestrial\nancestrian\nancestry\nAncha\nAnchat\nAnchietea\nanchietin\nanchietine\nanchieutectic\nanchimonomineral\nAnchisaurus\nAnchises\nAnchistea\nAnchistopoda\nanchithere\nanchitherioid\nanchor\nanchorable\nanchorage\nanchorate\nanchored\nanchorer\nanchoress\nanchoret\nanchoretic\nanchoretical\nanchoretish\nanchoretism\nanchorhold\nanchorite\nanchoritess\nanchoritic\nanchoritical\nanchoritish\nanchoritism\nanchorless\nanchorlike\nanchorwise\nanchovy\nAnchtherium\nAnchusa\nanchusin\nanchusine\nanchylose\nanchylosis\nancience\nanciency\nancient\nancientism\nanciently\nancientness\nancientry\nancienty\nancile\nancilla\nancillary\nancipital\nancipitous\nAncistrocladaceae\nancistrocladaceous\nAncistrocladus\nancistroid\nancon\nAncona\nanconad\nanconagra\nanconal\nancone\nanconeal\nanconeous\nanconeus\nanconitis\nanconoid\nancony\nancora\nancoral\nAncyloceras\nAncylocladus\nAncylodactyla\nancylopod\nAncylopoda\nAncylostoma\nancylostome\nancylostomiasis\nAncylostomum\nAncylus\nAncyrean\nAncyrene\nand\nanda\nandabatarian\nAndalusian\nandalusite\nAndaman\nAndamanese\nandante\nandantino\nAndaqui\nAndaquian\nAndarko\nAndaste\nAnde\nAndean\nAnderson\nAndesic\nandesine\nandesinite\nandesite\nandesitic\nAndevo\nAndhra\nAndi\nAndian\nAndine\nAndira\nandirin\nandirine\nandiroba\nandiron\nAndoke\nandorite\nAndorobo\nAndorran\nandouillet\nandradite\nandranatomy\nandrarchy\nAndre\nAndrea\nAndreaea\nAndreaeaceae\nAndreaeales\nAndreas\nAndrena\nandrenid\nAndrenidae\nAndrew\nandrewsite\nAndria\nAndriana\nAndrias\nandric\nAndries\nandrocentric\nandrocephalous\nandrocephalum\nandroclinium\nAndroclus\nandroconium\nandrocracy\nandrocratic\nandrocyte\nandrodioecious\nandrodioecism\nandrodynamous\nandroecial\nandroecium\nandrogametangium\nandrogametophore\nandrogen\nandrogenesis\nandrogenetic\nandrogenic\nandrogenous\nandroginous\nandrogone\nandrogonia\nandrogonial\nandrogonidium\nandrogonium\nAndrographis\nandrographolide\nandrogynal\nandrogynary\nandrogyne\nandrogyneity\nandrogynia\nandrogynism\nandrogynous\nandrogynus\nandrogyny\nandroid\nandroidal\nandrokinin\nandrol\nandrolepsia\nandrolepsy\nAndromache\nandromania\nAndromaque\nAndromeda\nAndromede\nandromedotoxin\nandromonoecious\nandromonoecism\nandromorphous\nandron\nAndronicus\nandronitis\nandropetalar\nandropetalous\nandrophagous\nandrophobia\nandrophonomania\nandrophore\nandrophorous\nandrophorum\nandrophyll\nAndropogon\nAndrosace\nAndroscoggin\nandroseme\nandrosin\nandrosphinx\nandrosporangium\nandrospore\nandrosterone\nandrotauric\nandrotomy\nAndy\nanear\naneath\nanecdota\nanecdotage\nanecdotal\nanecdotalism\nanecdote\nanecdotic\nanecdotical\nanecdotically\nanecdotist\nanele\nanelectric\nanelectrode\nanelectrotonic\nanelectrotonus\nanelytrous\nanematosis\nAnemia\nanemia\nanemic\nanemobiagraph\nanemochord\nanemoclastic\nanemogram\nanemograph\nanemographic\nanemographically\nanemography\nanemological\nanemology\nanemometer\nanemometric\nanemometrical\nanemometrically\nanemometrograph\nanemometrographic\nanemometrographically\nanemometry\nanemonal\nanemone\nAnemonella\nanemonin\nanemonol\nanemony\nanemopathy\nanemophile\nanemophilous\nanemophily\nAnemopsis\nanemoscope\nanemosis\nanemotaxis\nanemotropic\nanemotropism\nanencephalia\nanencephalic\nanencephalotrophia\nanencephalous\nanencephalus\nanencephaly\nanend\nanenergia\nanenst\nanent\nanenterous\nanepia\nanepigraphic\nanepigraphous\nanepiploic\nanepithymia\nanerethisia\naneretic\nanergia\nanergic\nanergy\nanerly\naneroid\naneroidograph\nanerotic\nanerythroplasia\nanerythroplastic\nanes\nanesis\nanesthesia\nanesthesiant\nanesthesimeter\nanesthesiologist\nanesthesiology\nanesthesis\nanesthetic\nanesthetically\nanesthetist\nanesthetization\nanesthetize\nanesthetizer\nanesthyl\nanethole\nAnethum\nanetiological\naneuploid\naneuploidy\naneuria\naneuric\naneurilemmic\naneurin\naneurism\naneurismally\naneurysm\naneurysmal\naneurysmally\naneurysmatic\nanew\nAnezeh\nanfractuose\nanfractuosity\nanfractuous\nanfractuousness\nanfracture\nAngami\nAngara\nangaralite\nangaria\nangary\nAngdistis\nangekok\nangel\nAngela\nangelate\nangeldom\nAngeleno\nangelet\nangeleyes\nangelfish\nangelhood\nangelic\nAngelica\nangelica\nAngelical\nangelical\nangelically\nangelicalness\nAngelican\nangelicic\nangelicize\nangelico\nangelin\nAngelina\nangeline\nangelique\nangelize\nangellike\nAngelo\nangelocracy\nangelographer\nangelolater\nangelolatry\nangelologic\nangelological\nangelology\nangelomachy\nAngelonia\nangelophany\nangelot\nangelship\nAngelus\nanger\nangerly\nAngerona\nAngeronalia\nAngers\nAngetenar\nAngevin\nangeyok\nangiasthenia\nangico\nAngie\nangiectasis\nangiectopia\nangiemphraxis\nangiitis\nangild\nangili\nangina\nanginal\nanginiform\nanginoid\nanginose\nanginous\nangioasthenia\nangioataxia\nangioblast\nangioblastic\nangiocarditis\nangiocarp\nangiocarpian\nangiocarpic\nangiocarpous\nangiocavernous\nangiocholecystitis\nangiocholitis\nangiochondroma\nangioclast\nangiocyst\nangiodermatitis\nangiodiascopy\nangioelephantiasis\nangiofibroma\nangiogenesis\nangiogenic\nangiogeny\nangioglioma\nangiograph\nangiography\nangiohyalinosis\nangiohydrotomy\nangiohypertonia\nangiohypotonia\nangioid\nangiokeratoma\nangiokinesis\nangiokinetic\nangioleucitis\nangiolipoma\nangiolith\nangiology\nangiolymphitis\nangiolymphoma\nangioma\nangiomalacia\nangiomatosis\nangiomatous\nangiomegaly\nangiometer\nangiomyocardiac\nangiomyoma\nangiomyosarcoma\nangioneoplasm\nangioneurosis\nangioneurotic\nangionoma\nangionosis\nangioparalysis\nangioparalytic\nangioparesis\nangiopathy\nangiophorous\nangioplany\nangioplasty\nangioplerosis\nangiopoietic\nangiopressure\nangiorrhagia\nangiorrhaphy\nangiorrhea\nangiorrhexis\nangiosarcoma\nangiosclerosis\nangiosclerotic\nangioscope\nangiosis\nangiospasm\nangiospastic\nangiosperm\nAngiospermae\nangiospermal\nangiospermatous\nangiospermic\nangiospermous\nangiosporous\nangiostegnosis\nangiostenosis\nangiosteosis\nangiostomize\nangiostomy\nangiostrophy\nangiosymphysis\nangiotasis\nangiotelectasia\nangiothlipsis\nangiotome\nangiotomy\nangiotonic\nangiotonin\nangiotribe\nangiotripsy\nangiotrophic\nAngka\nanglaise\nangle\nangleberry\nangled\nanglehook\nanglepod\nangler\nAngles\nanglesite\nanglesmith\nangletouch\nangletwitch\nanglewing\nanglewise\nangleworm\nAnglian\nAnglic\nAnglican\nAnglicanism\nAnglicanize\nAnglicanly\nAnglicanum\nAnglicism\nAnglicist\nAnglicization\nanglicization\nAnglicize\nanglicize\nAnglification\nAnglify\nanglimaniac\nangling\nAnglish\nAnglist\nAnglistics\nAnglogaea\nAnglogaean\nangloid\nAngloman\nAnglomane\nAnglomania\nAnglomaniac\nAnglophile\nAnglophobe\nAnglophobia\nAnglophobiac\nAnglophobic\nAnglophobist\nango\nAngola\nangolar\nAngolese\nangor\nAngora\nangostura\nAngouleme\nAngoumian\nAngraecum\nangrily\nangriness\nangrite\nangry\nangst\nangster\nAngstrom\nangstrom\nanguid\nAnguidae\nanguiform\nAnguilla\nAnguillaria\nAnguillidae\nanguilliform\nanguilloid\nAnguillula\nAnguillulidae\nAnguimorpha\nanguine\nanguineal\nanguineous\nAnguinidae\nanguiped\nAnguis\nanguis\nanguish\nanguished\nanguishful\nanguishous\nanguishously\nangula\nangular\nangulare\nangularity\nangularization\nangularize\nangularly\nangularness\nangulate\nangulated\nangulately\nangulateness\nangulation\nangulatogibbous\nangulatosinuous\nanguliferous\nangulinerved\nAnguloa\nangulodentate\nangulometer\nangulosity\nangulosplenial\nangulous\nanguria\nAngus\nangusticlave\nangustifoliate\nangustifolious\nangustirostrate\nangustisellate\nangustiseptal\nangustiseptate\nangwantibo\nanhalamine\nanhaline\nanhalonine\nAnhalonium\nanhalouidine\nanhang\nAnhanga\nanharmonic\nanhedonia\nanhedral\nanhedron\nanhelation\nanhelous\nanhematosis\nanhemolytic\nanhidrosis\nanhidrotic\nanhima\nAnhimae\nAnhimidae\nanhinga\nanhistic\nanhistous\nanhungered\nanhungry\nanhydrate\nanhydration\nanhydremia\nanhydremic\nanhydric\nanhydride\nanhydridization\nanhydridize\nanhydrite\nanhydrization\nanhydrize\nanhydroglocose\nanhydromyelia\nanhydrous\nanhydroxime\nanhysteretic\nani\nAniba\nAnice\naniconic\naniconism\nanicular\nanicut\nanidian\nanidiomatic\nanidiomatical\nanidrosis\nAniellidae\naniente\nanigh\nanight\nanights\nanil\nanilao\nanilau\nanile\nanileness\nanilic\nanilid\nanilide\nanilidic\nanilidoxime\naniline\nanilinism\nanilinophile\nanilinophilous\nanility\nanilla\nanilopyrin\nanilopyrine\nanima\nanimability\nanimable\nanimableness\nanimadversion\nanimadversional\nanimadversive\nanimadversiveness\nanimadvert\nanimadverter\nanimal\nanimalcula\nanimalculae\nanimalcular\nanimalcule\nanimalculine\nanimalculism\nanimalculist\nanimalculous\nanimalculum\nanimalhood\nAnimalia\nanimalian\nanimalic\nanimalier\nanimalish\nanimalism\nanimalist\nanimalistic\nanimality\nAnimalivora\nanimalivore\nanimalivorous\nanimalization\nanimalize\nanimally\nanimastic\nanimastical\nanimate\nanimated\nanimatedly\nanimately\nanimateness\nanimater\nanimating\nanimatingly\nanimation\nanimatism\nanimatistic\nanimative\nanimatograph\nanimator\nanime\nanimi\nAnimikean\nanimikite\nanimism\nanimist\nanimistic\nanimize\nanimosity\nanimotheism\nanimous\nanimus\nanion\nanionic\naniridia\nanis\nanisal\nanisalcohol\nanisaldehyde\nanisaldoxime\nanisamide\nanisandrous\nanisanilide\nanisate\nanischuria\nanise\naniseed\naniseikonia\naniseikonic\naniselike\naniseroot\nanisette\nanisic\nanisidin\nanisidine\nanisil\nanisilic\nanisobranchiate\nanisocarpic\nanisocarpous\nanisocercal\nanisochromatic\nanisochromia\nanisocoria\nanisocotyledonous\nanisocotyly\nanisocratic\nanisocycle\nanisocytosis\nanisodactyl\nAnisodactyla\nAnisodactyli\nanisodactylic\nanisodactylous\nanisodont\nanisogamete\nanisogamous\nanisogamy\nanisogenous\nanisogeny\nanisognathism\nanisognathous\nanisogynous\nanisoin\nanisole\nanisoleucocytosis\nAnisomeles\nanisomelia\nanisomelus\nanisomeric\nanisomerous\nanisometric\nanisometrope\nanisometropia\nanisometropic\nanisomyarian\nAnisomyodi\nanisomyodian\nanisomyodous\nanisopetalous\nanisophyllous\nanisophylly\nanisopia\nanisopleural\nanisopleurous\nanisopod\nAnisopoda\nanisopodal\nanisopodous\nanisopogonous\nAnisoptera\nanisopterous\nanisosepalous\nanisospore\nanisostaminous\nanisostemonous\nanisosthenic\nanisostichous\nAnisostichus\nanisostomous\nanisotonic\nanisotropal\nanisotrope\nanisotropic\nanisotropical\nanisotropically\nanisotropism\nanisotropous\nanisotropy\nanisoyl\nanisum\nanisuria\nanisyl\nanisylidene\nAnita\nanither\nanitrogenous\nanjan\nAnjou\nankaramite\nankaratrite\nankee\nanker\nankerite\nankh\nankle\nanklebone\nanklejack\nanklet\nanklong\nAnkoli\nAnkou\nankus\nankusha\nankylenteron\nankyloblepharon\nankylocheilia\nankylodactylia\nankylodontia\nankyloglossia\nankylomele\nankylomerism\nankylophobia\nankylopodia\nankylopoietic\nankyloproctia\nankylorrhinia\nAnkylosaurus\nankylose\nankylosis\nankylostoma\nankylotia\nankylotic\nankylotome\nankylotomy\nankylurethria\nankyroid\nanlace\nanlaut\nAnn\nann\nAnna\nanna\nAnnabel\nannabergite\nannal\nannale\nannaline\nannalism\nannalist\nannalistic\nannalize\nannals\nAnnam\nAnnamese\nAnnamite\nAnnamitic\nAnnapurna\nAnnard\nannat\nannates\nannatto\nAnne\nanneal\nannealer\nannectent\nannection\nannelid\nAnnelida\nannelidan\nAnnelides\nannelidian\nannelidous\nannelism\nAnnellata\nanneloid\nannerodite\nAnneslia\nannet\nAnnette\nannex\nannexa\nannexable\nannexal\nannexation\nannexational\nannexationist\nannexer\nannexion\nannexionist\nannexitis\nannexive\nannexment\nannexure\nannidalin\nAnnie\nAnniellidae\nannihilability\nannihilable\nannihilate\nannihilation\nannihilationism\nannihilationist\nannihilative\nannihilator\nannihilatory\nAnnist\nannite\nanniversarily\nanniversariness\nanniversary\nanniverse\nannodated\nAnnona\nannona\nAnnonaceae\nannonaceous\nannotate\nannotater\nannotation\nannotative\nannotator\nannotatory\nannotine\nannotinous\nannounce\nannounceable\nannouncement\nannouncer\nannoy\nannoyance\nannoyancer\nannoyer\nannoyful\nannoying\nannoyingly\nannoyingness\nannoyment\nannual\nannualist\nannualize\nannually\nannuary\nannueler\nannuent\nannuitant\nannuity\nannul\nannular\nAnnularia\nannularity\nannularly\nannulary\nAnnulata\nannulate\nannulated\nannulation\nannulet\nannulettee\nannulism\nannullable\nannullate\nannullation\nannuller\nannulment\nannuloid\nAnnuloida\nAnnulosa\nannulosan\nannulose\nannulus\nannunciable\nannunciate\nannunciation\nannunciative\nannunciator\nannunciatory\nanoa\nAnobiidae\nanocarpous\nanociassociation\nanococcygeal\nanodal\nanode\nanodendron\nanodic\nanodically\nanodize\nAnodon\nAnodonta\nanodontia\nanodos\nanodyne\nanodynia\nanodynic\nanodynous\nanoegenetic\nanoesia\nanoesis\nanoestrous\nanoestrum\nanoestrus\nanoetic\nanogenic\nanogenital\nAnogra\nanoil\nanoine\nanoint\nanointer\nanointment\nanole\nanoli\nanolian\nAnolis\nAnolympiad\nanolyte\nAnomala\nanomaliflorous\nanomaliped\nanomalism\nanomalist\nanomalistic\nanomalistical\nanomalistically\nanomalocephalus\nanomaloflorous\nAnomalogonatae\nanomalogonatous\nAnomalon\nanomalonomy\nAnomalopteryx\nanomaloscope\nanomalotrophy\nanomalous\nanomalously\nanomalousness\nanomalure\nAnomaluridae\nAnomalurus\nanomaly\nAnomatheca\nAnomia\nAnomiacea\nAnomiidae\nanomite\nanomocarpous\nanomodont\nAnomodontia\nAnomoean\nAnomoeanism\nanomophyllous\nanomorhomboid\nanomorhomboidal\nanomphalous\nAnomura\nanomural\nanomuran\nanomurous\nanomy\nanon\nanonang\nanoncillo\nanonol\nanonychia\nanonym\nanonyma\nanonymity\nanonymous\nanonymously\nanonymousness\nanonymuncule\nanoopsia\nanoperineal\nanophele\nAnopheles\nAnophelinae\nanopheline\nanophoria\nanophthalmia\nanophthalmos\nAnophthalmus\nanophyte\nanopia\nanopisthographic\nAnopla\nAnoplanthus\nanoplocephalic\nanoplonemertean\nAnoplonemertini\nanoplothere\nAnoplotheriidae\nanoplotherioid\nAnoplotherium\nanoplotheroid\nAnoplura\nanopluriform\nanopsia\nanopubic\nanorak\nanorchia\nanorchism\nanorchous\nanorchus\nanorectal\nanorectic\nanorectous\nanorexia\nanorexy\nanorgana\nanorganic\nanorganism\nanorganology\nanormal\nanormality\nanorogenic\nanorth\nanorthic\nanorthite\nanorthitic\nanorthitite\nanorthoclase\nanorthographic\nanorthographical\nanorthographically\nanorthography\nanorthophyre\nanorthopia\nanorthoscope\nanorthose\nanorthosite\nanoscope\nanoscopy\nAnosia\nanosmatic\nanosmia\nanosmic\nanosphrasia\nanosphresia\nanospinal\nanostosis\nAnostraca\nanoterite\nanother\nanotherkins\nanotia\nanotropia\nanotta\nanotto\nanotus\nanounou\nAnous\nanovesical\nanoxemia\nanoxemic\nanoxia\nanoxic\nanoxidative\nanoxybiosis\nanoxybiotic\nanoxyscope\nansa\nansar\nansarian\nAnsarie\nansate\nansation\nAnseis\nAnsel\nAnselm\nAnselmian\nAnser\nanserated\nAnseres\nAnseriformes\nAnserinae\nanserine\nanserous\nanspessade\nansu\nansulate\nanswer\nanswerability\nanswerable\nanswerableness\nanswerably\nanswerer\nansweringly\nanswerless\nanswerlessly\nant\nAnta\nanta\nantacid\nantacrid\nantadiform\nAntaean\nAntaeus\nantagonism\nantagonist\nantagonistic\nantagonistical\nantagonistically\nantagonization\nantagonize\nantagonizer\nantagony\nAntaimerina\nAntaios\nAntaiva\nantal\nantalgesic\nantalgol\nantalkali\nantalkaline\nantambulacral\nantanacathartic\nantanaclasis\nAntanandro\nantanemic\nantapex\nantaphrodisiac\nantaphroditic\nantapocha\nantapodosis\nantapology\nantapoplectic\nAntar\nAntara\nantarchism\nantarchist\nantarchistic\nantarchistical\nantarchy\nAntarctalia\nAntarctalian\nantarctic\nAntarctica\nantarctica\nantarctical\nantarctically\nAntarctogaea\nAntarctogaean\nAntares\nantarthritic\nantasphyctic\nantasthenic\nantasthmatic\nantatrophic\nantdom\nante\nanteact\nanteal\nanteambulate\nanteambulation\nanteater\nantebaptismal\nantebath\nantebrachial\nantebrachium\nantebridal\nantecabinet\nantecaecal\nantecardium\nantecavern\nantecedaneous\nantecedaneously\nantecede\nantecedence\nantecedency\nantecedent\nantecedental\nantecedently\nantecessor\nantechamber\nantechapel\nAntechinomys\nantechoir\nantechurch\nanteclassical\nantecloset\nantecolic\nantecommunion\nanteconsonantal\nantecornu\nantecourt\nantecoxal\nantecubital\nantecurvature\nantedate\nantedawn\nantediluvial\nantediluvially\nantediluvian\nAntedon\nantedonin\nantedorsal\nantefebrile\nantefix\nantefixal\nanteflected\nanteflexed\nanteflexion\nantefurca\nantefurcal\nantefuture\nantegarden\nantegrade\nantehall\nantehistoric\nantehuman\nantehypophysis\nanteinitial\nantejentacular\nantejudiciary\nantejuramentum\nantelabium\nantelegal\nantelocation\nantelope\nantelopian\nantelucan\nantelude\nanteluminary\nantemarginal\nantemarital\nantemedial\nantemeridian\nantemetallic\nantemetic\nantemillennial\nantemingent\nantemortal\nantemundane\nantemural\nantenarial\nantenatal\nantenatalitial\nantenati\nantenave\nantenna\nantennae\nantennal\nAntennaria\nantennariid\nAntennariidae\nAntennarius\nantennary\nAntennata\nantennate\nantenniferous\nantenniform\nantennula\nantennular\nantennulary\nantennule\nantenodal\nantenoon\nAntenor\nantenumber\nanteoccupation\nanteocular\nanteopercle\nanteoperculum\nanteorbital\nantepagmenta\nantepagments\nantepalatal\nantepaschal\nantepast\nantepatriarchal\nantepectoral\nantepectus\nantependium\nantepenult\nantepenultima\nantepenultimate\nantephialtic\nantepileptic\nantepirrhema\nanteporch\nanteportico\nanteposition\nanteposthumous\nanteprandial\nantepredicament\nantepredicamental\nantepreterit\nantepretonic\nanteprohibition\nanteprostate\nanteprostatic\nantepyretic\nantequalm\nantereformation\nantereformational\nanteresurrection\nanterethic\nanterevolutional\nanterevolutionary\nanteriad\nanterior\nanteriority\nanteriorly\nanteriorness\nanteroclusion\nanterodorsal\nanteroexternal\nanterofixation\nanteroflexion\nanterofrontal\nanterograde\nanteroinferior\nanterointerior\nanterointernal\nanterolateral\nanterolaterally\nanteromedial\nanteromedian\nanteroom\nanteroparietal\nanteroposterior\nanteroposteriorly\nanteropygal\nanterospinal\nanterosuperior\nanteroventral\nanteroventrally\nantes\nantescript\nantesignanus\nantespring\nantestature\nantesternal\nantesternum\nantesunrise\nantesuperior\nantetemple\nantetype\nAnteva\nantevenient\nanteversion\nantevert\nantevocalic\nantewar\nanthecological\nanthecologist\nanthecology\nAntheia\nanthela\nanthelion\nanthelmintic\nanthem\nanthema\nanthemene\nanthemia\nAnthemideae\nanthemion\nAnthemis\nanthemwise\nanthemy\nanther\nAntheraea\nantheral\nAnthericum\nantherid\nantheridial\nantheridiophore\nantheridium\nantheriferous\nantheriform\nantherless\nantherogenous\nantheroid\nantherozoid\nantherozoidal\nantherozooid\nantherozooidal\nanthesis\nAnthesteria\nAnthesteriac\nanthesterin\nAnthesterion\nanthesterol\nantheximeter\nAnthicidae\nAnthidium\nanthill\nAnthinae\nanthine\nanthobiology\nanthocarp\nanthocarpous\nanthocephalous\nAnthoceros\nAnthocerotaceae\nAnthocerotales\nanthocerote\nanthochlor\nanthochlorine\nanthoclinium\nanthocyan\nanthocyanidin\nanthocyanin\nanthodium\nanthoecological\nanthoecologist\nanthoecology\nanthogenesis\nanthogenetic\nanthogenous\nanthography\nanthoid\nanthokyan\nantholite\nanthological\nanthologically\nanthologion\nanthologist\nanthologize\nanthology\nantholysis\nAntholyza\nanthomania\nanthomaniac\nAnthomedusae\nanthomedusan\nAnthomyia\nanthomyiid\nAnthomyiidae\nAnthonin\nAnthonomus\nAnthony\nanthood\nanthophagous\nAnthophila\nanthophile\nanthophilian\nanthophilous\nanthophobia\nAnthophora\nanthophore\nAnthophoridae\nanthophorous\nanthophyllite\nanthophyllitic\nAnthophyta\nanthophyte\nanthorine\nanthosiderite\nAnthospermum\nanthotaxis\nanthotaxy\nanthotropic\nanthotropism\nanthoxanthin\nAnthoxanthum\nAnthozoa\nanthozoan\nanthozoic\nanthozooid\nanthozoon\nanthracemia\nanthracene\nanthraceniferous\nanthrachrysone\nanthracia\nanthracic\nanthraciferous\nanthracin\nanthracite\nanthracitic\nanthracitiferous\nanthracitious\nanthracitism\nanthracitization\nanthracnose\nanthracnosis\nanthracocide\nanthracoid\nanthracolithic\nanthracomancy\nAnthracomarti\nanthracomartian\nAnthracomartus\nanthracometer\nanthracometric\nanthraconecrosis\nanthraconite\nAnthracosaurus\nanthracosis\nanthracothere\nAnthracotheriidae\nAnthracotherium\nanthracotic\nanthracyl\nanthradiol\nanthradiquinone\nanthraflavic\nanthragallol\nanthrahydroquinone\nanthramine\nanthranil\nanthranilate\nanthranilic\nanthranol\nanthranone\nanthranoyl\nanthranyl\nanthraphenone\nanthrapurpurin\nanthrapyridine\nanthraquinol\nanthraquinone\nanthraquinonyl\nanthrarufin\nanthratetrol\nanthrathiophene\nanthratriol\nanthrax\nanthraxolite\nanthraxylon\nAnthrenus\nanthribid\nAnthribidae\nAnthriscus\nanthrohopobiological\nanthroic\nanthrol\nanthrone\nanthropic\nanthropical\nAnthropidae\nanthropobiologist\nanthropobiology\nanthropocentric\nanthropocentrism\nanthropoclimatologist\nanthropoclimatology\nanthropocosmic\nanthropodeoxycholic\nAnthropodus\nanthropogenesis\nanthropogenetic\nanthropogenic\nanthropogenist\nanthropogenous\nanthropogeny\nanthropogeographer\nanthropogeographical\nanthropogeography\nanthropoglot\nanthropogony\nanthropography\nanthropoid\nanthropoidal\nAnthropoidea\nanthropoidean\nanthropolater\nanthropolatric\nanthropolatry\nanthropolite\nanthropolithic\nanthropolitic\nanthropological\nanthropologically\nanthropologist\nanthropology\nanthropomancy\nanthropomantic\nanthropomantist\nanthropometer\nanthropometric\nanthropometrical\nanthropometrically\nanthropometrist\nanthropometry\nanthropomorph\nAnthropomorpha\nanthropomorphic\nanthropomorphical\nanthropomorphically\nAnthropomorphidae\nanthropomorphism\nanthropomorphist\nanthropomorphite\nanthropomorphitic\nanthropomorphitical\nanthropomorphitism\nanthropomorphization\nanthropomorphize\nanthropomorphological\nanthropomorphologically\nanthropomorphology\nanthropomorphosis\nanthropomorphotheist\nanthropomorphous\nanthropomorphously\nanthroponomical\nanthroponomics\nanthroponomist\nanthroponomy\nanthropopathia\nanthropopathic\nanthropopathically\nanthropopathism\nanthropopathite\nanthropopathy\nanthropophagi\nanthropophagic\nanthropophagical\nanthropophaginian\nanthropophagism\nanthropophagist\nanthropophagistic\nanthropophagite\nanthropophagize\nanthropophagous\nanthropophagously\nanthropophagy\nanthropophilous\nanthropophobia\nanthropophuism\nanthropophuistic\nanthropophysiography\nanthropophysite\nAnthropopithecus\nanthropopsychic\nanthropopsychism\nAnthropos\nanthroposcopy\nanthroposociologist\nanthroposociology\nanthroposomatology\nanthroposophical\nanthroposophist\nanthroposophy\nanthropoteleoclogy\nanthropoteleological\nanthropotheism\nanthropotomical\nanthropotomist\nanthropotomy\nanthropotoxin\nAnthropozoic\nanthropurgic\nanthroropolith\nanthroxan\nanthroxanic\nanthryl\nanthrylene\nAnthurium\nAnthus\nAnthyllis\nanthypophora\nanthypophoretic\nAnti\nanti\nantiabolitionist\nantiabrasion\nantiabrin\nantiabsolutist\nantiacid\nantiadiaphorist\nantiaditis\nantiadministration\nantiae\nantiaesthetic\nantiager\nantiagglutinating\nantiagglutinin\nantiaggression\nantiaggressionist\nantiaggressive\nantiaircraft\nantialbumid\nantialbumin\nantialbumose\nantialcoholic\nantialcoholism\nantialcoholist\nantialdoxime\nantialexin\nantialien\nantiamboceptor\nantiamusement\nantiamylase\nantianaphylactogen\nantianaphylaxis\nantianarchic\nantianarchist\nantiangular\nantiannexation\nantiannexationist\nantianopheline\nantianthrax\nantianthropocentric\nantianthropomorphism\nantiantibody\nantiantidote\nantiantienzyme\nantiantitoxin\nantiaphrodisiac\nantiaphthic\nantiapoplectic\nantiapostle\nantiaquatic\nantiar\nAntiarcha\nAntiarchi\nantiarin\nAntiaris\nantiaristocrat\nantiarthritic\nantiascetic\nantiasthmatic\nantiastronomical\nantiatheism\nantiatheist\nantiatonement\nantiattrition\nantiautolysin\nantibacchic\nantibacchius\nantibacterial\nantibacteriolytic\nantiballooner\nantibalm\nantibank\nantibasilican\nantibenzaldoxime\nantiberiberin\nantibibliolatry\nantibigotry\nantibilious\nantibiont\nantibiosis\nantibiotic\nantibishop\nantiblastic\nantiblennorrhagic\nantiblock\nantiblue\nantibody\nantiboxing\nantibreakage\nantibridal\nantibromic\nantibubonic\nAntiburgher\nantic\nanticachectic\nantical\nanticalcimine\nanticalculous\nanticalligraphic\nanticancer\nanticapital\nanticapitalism\nanticapitalist\nanticardiac\nanticardium\nanticarious\nanticarnivorous\nanticaste\nanticatalase\nanticatalyst\nanticatalytic\nanticatalyzer\nanticatarrhal\nanticathexis\nanticathode\nanticaustic\nanticensorship\nanticentralization\nanticephalalgic\nanticeremonial\nanticeremonialism\nanticeremonialist\nanticheater\nantichlor\nantichlorine\nantichloristic\nantichlorotic\nanticholagogue\nanticholinergic\nantichoromanic\nantichorus\nantichresis\nantichretic\nantichrist\nantichristian\nantichristianity\nantichristianly\nantichrome\nantichronical\nantichronically\nantichthon\nantichurch\nantichurchian\nantichymosin\nanticipant\nanticipatable\nanticipate\nanticipation\nanticipative\nanticipatively\nanticipator\nanticipatorily\nanticipatory\nanticivic\nanticivism\nanticize\nanticker\nanticlactic\nanticlassical\nanticlassicist\nAnticlea\nanticlergy\nanticlerical\nanticlericalism\nanticlimactic\nanticlimax\nanticlinal\nanticline\nanticlinorium\nanticlockwise\nanticlogging\nanticly\nanticnemion\nanticness\nanticoagulant\nanticoagulating\nanticoagulative\nanticoagulin\nanticogitative\nanticolic\nanticombination\nanticomet\nanticomment\nanticommercial\nanticommunist\nanticomplement\nanticomplementary\nanticomplex\nanticonceptionist\nanticonductor\nanticonfederationist\nanticonformist\nanticonscience\nanticonscription\nanticonscriptive\nanticonstitutional\nanticonstitutionalist\nanticonstitutionally\nanticontagion\nanticontagionist\nanticontagious\nanticonventional\nanticonventionalism\nanticonvulsive\nanticor\nanticorn\nanticorrosion\nanticorrosive\nanticorset\nanticosine\nanticosmetic\nanticouncil\nanticourt\nanticourtier\nanticous\nanticovenanter\nanticovenanting\nanticreation\nanticreative\nanticreator\nanticreep\nanticreeper\nanticreeping\nanticrepuscular\nanticrepuscule\nanticrisis\nanticritic\nanticritique\nanticrochet\nanticrotalic\nanticryptic\nanticum\nanticyclic\nanticyclone\nanticyclonic\nanticyclonically\nanticynic\nanticytolysin\nanticytotoxin\nantidactyl\nantidancing\nantidecalogue\nantideflation\nantidemocrat\nantidemocratic\nantidemocratical\nantidemoniac\nantidetonant\nantidetonating\nantidiabetic\nantidiastase\nAntidicomarian\nAntidicomarianite\nantidictionary\nantidiffuser\nantidinic\nantidiphtheria\nantidiphtheric\nantidiphtherin\nantidiphtheritic\nantidisciplinarian\nantidivine\nantidivorce\nantidogmatic\nantidomestic\nantidominican\nAntidorcas\nantidoron\nantidotal\nantidotally\nantidotary\nantidote\nantidotical\nantidotically\nantidotism\nantidraft\nantidrag\nantidromal\nantidromic\nantidromically\nantidromous\nantidromy\nantidrug\nantiduke\nantidumping\nantidynamic\nantidynastic\nantidyscratic\nantidysenteric\nantidysuric\nantiecclesiastic\nantiecclesiastical\nantiedemic\nantieducation\nantieducational\nantiegotism\nantiejaculation\nantiemetic\nantiemperor\nantiempirical\nantiendotoxin\nantiendowment\nantienergistic\nantienthusiastic\nantienzyme\nantienzymic\nantiepicenter\nantiepileptic\nantiepiscopal\nantiepiscopist\nantiepithelial\nantierosion\nantierysipelas\nAntietam\nantiethnic\nantieugenic\nantievangelical\nantievolution\nantievolutionist\nantiexpansionist\nantiexporting\nantiextreme\nantieyestrain\nantiface\nantifaction\nantifame\nantifanatic\nantifat\nantifatigue\nantifebrile\nantifederal\nantifederalism\nantifederalist\nantifelon\nantifelony\nantifeminism\nantifeminist\nantiferment\nantifermentative\nantifertilizer\nantifeudal\nantifeudalism\nantifibrinolysin\nantifibrinolysis\nantifideism\nantifire\nantiflash\nantiflattering\nantiflatulent\nantiflux\nantifoam\nantifoaming\nantifogmatic\nantiforeign\nantiforeignism\nantiformin\nantifouler\nantifouling\nantifowl\nantifreeze\nantifreezing\nantifriction\nantifrictional\nantifrost\nantifundamentalist\nantifungin\nantigalactagogue\nantigalactic\nantigambling\nantiganting\nantigen\nantigenic\nantigenicity\nantighostism\nantigigmanic\nantiglare\nantiglyoxalase\nantigod\nAntigone\nantigonococcic\nAntigonon\nantigonorrheic\nAntigonus\nantigorite\nantigovernment\nantigraft\nantigrammatical\nantigraph\nantigravitate\nantigravitational\nantigropelos\nantigrowth\nAntiguan\nantiguggler\nantigyrous\nantihalation\nantiharmonist\nantihectic\nantihelix\nantihelminthic\nantihemagglutinin\nantihemisphere\nantihemoglobin\nantihemolysin\nantihemolytic\nantihemorrhagic\nantihemorrheidal\nantihero\nantiheroic\nantiheroism\nantiheterolysin\nantihidrotic\nantihierarchical\nantihierarchist\nantihistamine\nantihistaminic\nantiholiday\nantihormone\nantihuff\nantihum\nantihuman\nantihumbuggist\nantihunting\nantihydrophobic\nantihydropic\nantihydropin\nantihygienic\nantihylist\nantihypnotic\nantihypochondriac\nantihypophora\nantihysteric\nAntikamnia\nantikathode\nantikenotoxin\nantiketogen\nantiketogenesis\nantiketogenic\nantikinase\nantiking\nantiknock\nantilabor\nantilaborist\nantilacrosse\nantilacrosser\nantilactase\nantilapsarian\nantileague\nantilegalist\nantilegomena\nantilemic\nantilens\nantilepsis\nantileptic\nantilethargic\nantileveling\nAntilia\nantiliberal\nantilibration\nantilift\nantilipase\nantilipoid\nantiliquor\nantilithic\nantiliturgical\nantiliturgist\nAntillean\nantilobium\nAntilocapra\nAntilocapridae\nAntilochus\nantiloemic\nantilogarithm\nantilogic\nantilogical\nantilogism\nantilogous\nantilogy\nantiloimic\nAntilope\nAntilopinae\nantilottery\nantiluetin\nantilynching\nantilysin\nantilysis\nantilyssic\nantilytic\nantimacassar\nantimachine\nantimachinery\nantimagistratical\nantimalaria\nantimalarial\nantimallein\nantimaniac\nantimaniacal\nAntimarian\nantimark\nantimartyr\nantimask\nantimasker\nAntimason\nAntimasonic\nAntimasonry\nantimasque\nantimasquer\nantimasquerade\nantimaterialist\nantimaterialistic\nantimatrimonial\nantimatrimonialist\nantimedical\nantimedieval\nantimelancholic\nantimellin\nantimeningococcic\nantimension\nantimensium\nantimephitic\nantimere\nantimerger\nantimeric\nAntimerina\nantimerism\nantimeristem\nantimetabole\nantimetathesis\nantimetathetic\nantimeter\nantimethod\nantimetrical\nantimetropia\nantimetropic\nantimiasmatic\nantimicrobic\nantimilitarism\nantimilitarist\nantimilitary\nantiministerial\nantiministerialist\nantiminsion\nantimiscegenation\nantimission\nantimissionary\nantimissioner\nantimixing\nantimnemonic\nantimodel\nantimodern\nantimonarchial\nantimonarchic\nantimonarchical\nantimonarchically\nantimonarchicalness\nantimonarchist\nantimonate\nantimonial\nantimoniate\nantimoniated\nantimonic\nantimonid\nantimonide\nantimoniferous\nantimonious\nantimonite\nantimonium\nantimoniuret\nantimoniureted\nantimoniuretted\nantimonopolist\nantimonopoly\nantimonsoon\nantimony\nantimonyl\nantimoral\nantimoralism\nantimoralist\nantimosquito\nantimusical\nantimycotic\nantimythic\nantimythical\nantinarcotic\nantinarrative\nantinational\nantinationalist\nantinationalistic\nantinatural\nantinegro\nantinegroism\nantineologian\nantinephritic\nantinepotic\nantineuralgic\nantineuritic\nantineurotoxin\nantineutral\nantinial\nantinicotine\nantinion\nantinode\nantinoise\nantinome\nantinomian\nantinomianism\nantinomic\nantinomical\nantinomist\nantinomy\nantinormal\nantinosarian\nAntinous\nAntiochene\nAntiochian\nAntiochianism\nantiodont\nantiodontalgic\nAntiope\nantiopelmous\nantiophthalmic\nantiopium\nantiopiumist\nantiopiumite\nantioptimist\nantioptionist\nantiorgastic\nantiorthodox\nantioxidant\nantioxidase\nantioxidizer\nantioxidizing\nantioxygen\nantioxygenation\nantioxygenator\nantioxygenic\nantipacifist\nantipapacy\nantipapal\nantipapalist\nantipapism\nantipapist\nantipapistical\nantiparabema\nantiparagraphe\nantiparagraphic\nantiparallel\nantiparallelogram\nantiparalytic\nantiparalytical\nantiparasitic\nantiparastatitis\nantiparliament\nantiparliamental\nantiparliamentarist\nantiparliamentary\nantipart\nAntipasch\nAntipascha\nantipass\nantipastic\nAntipatharia\nantipatharian\nantipathetic\nantipathetical\nantipathetically\nantipatheticalness\nantipathic\nAntipathida\nantipathist\nantipathize\nantipathogen\nantipathy\nantipatriarch\nantipatriarchal\nantipatriot\nantipatriotic\nantipatriotism\nantipedal\nAntipedobaptism\nAntipedobaptist\nantipeduncular\nantipellagric\nantipepsin\nantipeptone\nantiperiodic\nantiperistalsis\nantiperistaltic\nantiperistasis\nantiperistatic\nantiperistatical\nantiperistatically\nantipersonnel\nantiperthite\nantipestilential\nantipetalous\nantipewism\nantiphagocytic\nantipharisaic\nantipharmic\nantiphase\nantiphilosophic\nantiphilosophical\nantiphlogistian\nantiphlogistic\nantiphon\nantiphonal\nantiphonally\nantiphonary\nantiphoner\nantiphonetic\nantiphonic\nantiphonical\nantiphonically\nantiphonon\nantiphony\nantiphrasis\nantiphrastic\nantiphrastical\nantiphrastically\nantiphthisic\nantiphthisical\nantiphylloxeric\nantiphysic\nantiphysical\nantiphysician\nantiplague\nantiplanet\nantiplastic\nantiplatelet\nantipleion\nantiplenist\nantiplethoric\nantipleuritic\nantiplurality\nantipneumococcic\nantipodagric\nantipodagron\nantipodal\nantipode\nantipodean\nantipodes\nantipodic\nantipodism\nantipodist\nantipoetic\nantipoints\nantipolar\nantipole\nantipolemist\nantipolitical\nantipollution\nantipolo\nantipolygamy\nantipolyneuritic\nantipool\nantipooling\nantipope\nantipopery\nantipopular\nantipopulationist\nantiportable\nantiposition\nantipoverty\nantipragmatic\nantipragmatist\nantiprecipitin\nantipredeterminant\nantiprelate\nantiprelatic\nantiprelatist\nantipreparedness\nantiprestidigitation\nantipriest\nantipriestcraft\nantiprime\nantiprimer\nantipriming\nantiprinciple\nantiprism\nantiproductionist\nantiprofiteering\nantiprohibition\nantiprohibitionist\nantiprojectivity\nantiprophet\nantiprostate\nantiprostatic\nantiprotease\nantiproteolysis\nantiprotozoal\nantiprudential\nantipruritic\nantipsalmist\nantipsoric\nantiptosis\nantipudic\nantipuritan\nantiputrefaction\nantiputrefactive\nantiputrescent\nantiputrid\nantipyic\nantipyonin\nantipyresis\nantipyretic\nAntipyrine\nantipyrotic\nantipyryl\nantiqua\nantiquarian\nantiquarianism\nantiquarianize\nantiquarianly\nantiquarism\nantiquartan\nantiquary\nantiquate\nantiquated\nantiquatedness\nantiquation\nantique\nantiquely\nantiqueness\nantiquer\nantiquing\nantiquist\nantiquitarian\nantiquity\nantirabic\nantirabies\nantiracemate\nantiracer\nantirachitic\nantirachitically\nantiracing\nantiradiating\nantiradiation\nantiradical\nantirailwayist\nantirational\nantirationalism\nantirationalist\nantirationalistic\nantirattler\nantireactive\nantirealism\nantirealistic\nantirebating\nantirecruiting\nantired\nantireducer\nantireform\nantireformer\nantireforming\nantireformist\nantireligion\nantireligious\nantiremonstrant\nantirennet\nantirennin\nantirent\nantirenter\nantirentism\nantirepublican\nantireservationist\nantirestoration\nantireticular\nantirevisionist\nantirevolutionary\nantirevolutionist\nantirheumatic\nantiricin\nantirickets\nantiritual\nantiritualistic\nantirobin\nantiromance\nantiromantic\nantiromanticism\nantiroyal\nantiroyalist\nAntirrhinum\nantirumor\nantirun\nantirust\nantisacerdotal\nantisacerdotalist\nantisaloon\nantisalooner\nantisavage\nantiscabious\nantiscale\nantischolastic\nantischool\nantiscians\nantiscientific\nantiscion\nantiscolic\nantiscorbutic\nantiscorbutical\nantiscrofulous\nantiseismic\nantiselene\nantisensitizer\nantisensuous\nantisensuousness\nantisepalous\nantisepsin\nantisepsis\nantiseptic\nantiseptical\nantiseptically\nantisepticism\nantisepticist\nantisepticize\nantiseption\nantiseptize\nantiserum\nantishipping\nAntisi\nantisialagogue\nantisialic\nantisiccative\nantisideric\nantisilverite\nantisimoniacal\nantisine\nantisiphon\nantisiphonal\nantiskeptical\nantiskid\nantiskidding\nantislavery\nantislaveryism\nantislickens\nantislip\nantismoking\nantisnapper\nantisocial\nantisocialist\nantisocialistic\nantisocialistically\nantisociality\nantisolar\nantisophist\nantisoporific\nantispace\nantispadix\nantispasis\nantispasmodic\nantispast\nantispastic\nantispectroscopic\nantispermotoxin\nantispiritual\nantispirochetic\nantisplasher\nantisplenetic\nantisplitting\nantispreader\nantispreading\nantisquama\nantisquatting\nantistadholder\nantistadholderian\nantistalling\nantistaphylococcic\nantistate\nantistatism\nantistatist\nantisteapsin\nantisterility\nantistes\nantistimulant\nantistock\nantistreptococcal\nantistreptococcic\nantistreptococcin\nantistreptococcus\nantistrike\nantistrophal\nantistrophe\nantistrophic\nantistrophically\nantistrophize\nantistrophon\nantistrumatic\nantistrumous\nantisubmarine\nantisubstance\nantisudoral\nantisudorific\nantisuffrage\nantisuffragist\nantisun\nantisupernaturalism\nantisupernaturalist\nantisurplician\nantisymmetrical\nantisyndicalism\nantisyndicalist\nantisynod\nantisyphilitic\nantitabetic\nantitabloid\nantitangent\nantitank\nantitarnish\nantitartaric\nantitax\nantiteetotalism\nantitegula\nantitemperance\nantitetanic\nantitetanolysin\nantithalian\nantitheft\nantitheism\nantitheist\nantitheistic\nantitheistical\nantitheistically\nantithenar\nantitheologian\nantitheological\nantithermic\nantithermin\nantitheses\nantithesis\nantithesism\nantithesize\nantithet\nantithetic\nantithetical\nantithetically\nantithetics\nantithrombic\nantithrombin\nantitintinnabularian\nantitobacco\nantitobacconal\nantitobacconist\nantitonic\nantitorpedo\nantitoxic\nantitoxin\nantitrade\nantitrades\nantitraditional\nantitragal\nantitragic\nantitragicus\nantitragus\nantitrismus\nantitrochanter\nantitropal\nantitrope\nantitropic\nantitropical\nantitropous\nantitropy\nantitrust\nantitrypsin\nantitryptic\nantituberculin\nantituberculosis\nantituberculotic\nantituberculous\nantiturnpikeism\nantitwilight\nantitypal\nantitype\nantityphoid\nantitypic\nantitypical\nantitypically\nantitypy\nantityrosinase\nantiunion\nantiunionist\nantiuratic\nantiurease\nantiusurious\nantiutilitarian\nantivaccination\nantivaccinationist\nantivaccinator\nantivaccinist\nantivariolous\nantivenefic\nantivenereal\nantivenin\nantivenom\nantivenomous\nantivermicular\nantivibrating\nantivibrator\nantivibratory\nantivice\nantiviral\nantivirus\nantivitalist\nantivitalistic\nantivitamin\nantivivisection\nantivivisectionist\nantivolition\nantiwar\nantiwarlike\nantiwaste\nantiwedge\nantiweed\nantiwit\nantixerophthalmic\nantizealot\nantizymic\nantizymotic\nantler\nantlered\nantlerite\nantlerless\nantlia\nantliate\nAntlid\nantling\nantluetic\nantodontalgic\nantoeci\nantoecian\nantoecians\nAntoinette\nAnton\nAntonella\nAntonia\nAntonina\nantoninianus\nAntonio\nantonomasia\nantonomastic\nantonomastical\nantonomastically\nantonomasy\nAntony\nantonym\nantonymous\nantonymy\nantorbital\nantproof\nantra\nantral\nantralgia\nantre\nantrectomy\nantrin\nantritis\nantrocele\nantronasal\nantrophore\nantrophose\nantrorse\nantrorsely\nantroscope\nantroscopy\nAntrostomus\nantrotome\nantrotomy\nantrotympanic\nantrotympanitis\nantrum\nantrustion\nantrustionship\nantship\nAntu\nantu\nAntum\nAntwerp\nantwise\nanubing\nAnubis\nanucleate\nanukabiet\nAnukit\nanuloma\nAnura\nanuran\nanuresis\nanuretic\nanuria\nanuric\nanurous\nanury\nanus\nanusim\nanusvara\nanutraminosa\nanvasser\nanvil\nanvilsmith\nanxietude\nanxiety\nanxious\nanxiously\nanxiousness\nany\nanybody\nAnychia\nanyhow\nanyone\nanyplace\nAnystidae\nanything\nanythingarian\nanythingarianism\nanyway\nanyways\nanywhen\nanywhere\nanywhereness\nanywheres\nanywhy\nanywise\nanywither\nAnzac\nAnzanian\nAo\naogiri\nAoife\naonach\nAonian\naorist\naoristic\naoristically\naorta\naortal\naortarctia\naortectasia\naortectasis\naortic\naorticorenal\naortism\naortitis\naortoclasia\naortoclasis\naortolith\naortomalacia\naortomalaxis\naortopathy\naortoptosia\naortoptosis\naortorrhaphy\naortosclerosis\naortostenosis\naortotomy\naosmic\nAotea\nAotearoa\nAotes\nAotus\naoudad\nAouellimiden\nAoul\napa\napabhramsa\napace\nApache\napache\nApachette\napachism\napachite\napadana\napagoge\napagogic\napagogical\napagogically\napaid\nApalachee\napalit\nApama\napandry\nApanteles\nApantesis\napanthropia\napanthropy\napar\nAparai\naparaphysate\naparejo\nApargia\naparithmesis\napart\napartheid\naparthrosis\napartment\napartmental\napartness\napasote\napastron\napatan\nApatela\napatetic\napathetic\napathetical\napathetically\napathic\napathism\napathist\napathistical\napathogenic\nApathus\napathy\napatite\nApatornis\nApatosaurus\nApaturia\nApayao\nape\napeak\napectomy\napedom\napehood\napeiron\napelet\napelike\napeling\napellous\nApemantus\nApennine\napenteric\napepsia\napepsinia\napepsy\napeptic\naper\naperch\naperea\naperient\naperiodic\naperiodically\naperiodicity\naperispermic\naperistalsis\naperitive\napert\napertly\napertness\napertometer\napertural\naperture\napertured\nAperu\napery\napesthesia\napesthetic\napesthetize\nApetalae\napetaloid\napetalose\napetalous\napetalousness\napetaly\napex\napexed\naphaeresis\naphaeretic\naphagia\naphakia\naphakial\naphakic\nAphanapteryx\nAphanes\naphanesite\nAphaniptera\naphanipterous\naphanite\naphanitic\naphanitism\nAphanomyces\naphanophyre\naphanozygous\nApharsathacites\naphasia\naphasiac\naphasic\nAphelandra\nAphelenchus\naphelian\nAphelinus\naphelion\napheliotropic\napheliotropically\napheliotropism\nAphelops\naphemia\naphemic\naphengescope\naphengoscope\naphenoscope\napheresis\napheretic\naphesis\napheta\naphetic\naphetically\naphetism\naphetize\naphicidal\naphicide\naphid\naphides\naphidian\naphidicide\naphidicolous\naphidid\nAphididae\nAphidiinae\naphidious\nAphidius\naphidivorous\naphidolysin\naphidophagous\naphidozer\naphilanthropy\nAphis\naphlaston\naphlebia\naphlogistic\naphnology\naphodal\naphodian\nAphodius\naphodus\naphonia\naphonic\naphonous\naphony\naphoria\naphorism\naphorismatic\naphorismer\naphorismic\naphorismical\naphorismos\naphorist\naphoristic\naphoristically\naphorize\naphorizer\nAphoruridae\naphotic\naphototactic\naphototaxis\naphototropic\naphototropism\nAphra\naphrasia\naphrite\naphrizite\naphrodisia\naphrodisiac\naphrodisiacal\naphrodisian\nAphrodision\nAphrodistic\nAphrodite\nAphroditeum\naphroditic\nAphroditidae\naphroditous\naphrolite\naphronia\naphrosiderite\naphtha\nAphthartodocetae\nAphthartodocetic\nAphthartodocetism\naphthic\naphthitalite\naphthoid\naphthong\naphthongal\naphthongia\naphthous\naphydrotropic\naphydrotropism\naphyllose\naphyllous\naphylly\naphyric\nApiaca\nApiaceae\napiaceous\nApiales\napian\napiarian\napiarist\napiary\napiator\napicad\napical\napically\napices\nApician\napicifixed\napicilar\napicillary\napicitis\napickaback\napicoectomy\napicolysis\napicula\napicular\napiculate\napiculated\napiculation\napicultural\napiculture\napiculturist\napiculus\nApidae\napiece\napieces\napigenin\napii\napiin\napikoros\napilary\nApina\nApinae\nApinage\napinch\naping\napinoid\napio\nApioceridae\napioid\napioidal\napiole\napiolin\napiologist\napiology\napionol\nApios\napiose\nApiosoma\napiphobia\nApis\napish\napishamore\napishly\napishness\napism\napitong\napitpat\nApium\napivorous\napjohnite\naplacental\nAplacentalia\nAplacentaria\nAplacophora\naplacophoran\naplacophorous\naplanat\naplanatic\naplanatically\naplanatism\nAplanobacter\naplanogamete\naplanospore\naplasia\naplastic\nAplectrum\naplenty\naplite\naplitic\naplobasalt\naplodiorite\nAplodontia\nAplodontiidae\naplomb\naplome\nAplopappus\naploperistomatous\naplostemonous\naplotaxene\naplotomy\nApluda\naplustre\nAplysia\napnea\napneal\napneic\napneumatic\napneumatosis\nApneumona\napneumonous\napneustic\napoaconitine\napoatropine\napobiotic\napoblast\napocaffeine\napocalypse\napocalypst\napocalypt\napocalyptic\napocalyptical\napocalyptically\napocalypticism\napocalyptism\napocalyptist\napocamphoric\napocarp\napocarpous\napocarpy\napocatastasis\napocatastatic\napocatharsis\napocenter\napocentric\napocentricity\napocha\napocholic\napochromat\napochromatic\napochromatism\napocinchonine\napocodeine\napocopate\napocopated\napocopation\napocope\napocopic\napocrenic\napocrisiary\nApocrita\napocrustic\napocryph\nApocrypha\napocryphal\napocryphalist\napocryphally\napocryphalness\napocryphate\napocryphon\nApocynaceae\napocynaceous\napocyneous\nApocynum\napod\nApoda\napodal\napodan\napodeipnon\napodeixis\napodema\napodemal\napodematal\napodeme\nApodes\nApodia\napodia\napodictic\napodictical\napodictically\napodictive\nApodidae\napodixis\napodosis\napodous\napodyterium\napoembryony\napofenchene\napogaeic\napogalacteum\napogamic\napogamically\napogamous\napogamously\napogamy\napogeal\napogean\napogee\napogeic\napogenous\napogeny\napogeotropic\napogeotropically\napogeotropism\nApogon\nApogonidae\napograph\napographal\napoharmine\napohyal\nApoidea\napoise\napojove\napokrea\napokreos\napolar\napolarity\napolaustic\napolegamic\nApolista\nApolistan\nApollinarian\nApollinarianism\nApolline\nApollo\nApollonia\nApollonian\nApollonic\napollonicon\nApollonistic\nApolloship\nApollyon\napologal\napologete\napologetic\napologetical\napologetically\napologetics\napologia\napologist\napologize\napologizer\napologue\napology\napolousis\nApolysin\napolysis\napolytikion\napomecometer\napomecometry\napometabolic\napometabolism\napometabolous\napometaboly\napomictic\napomictical\napomixis\napomorphia\napomorphine\naponeurology\naponeurorrhaphy\naponeurosis\naponeurositis\naponeurotic\naponeurotome\naponeurotomy\naponia\naponic\nAponogeton\nAponogetonaceae\naponogetonaceous\napoop\napopenptic\napopetalous\napophantic\napophasis\napophatic\nApophis\napophlegmatic\napophonia\napophony\napophorometer\napophthegm\napophthegmatist\napophyge\napophylactic\napophylaxis\napophyllite\napophyllous\napophysary\napophysate\napophyseal\napophysis\napophysitis\napoplasmodial\napoplastogamous\napoplectic\napoplectical\napoplectically\napoplectiform\napoplectoid\napoplex\napoplexy\napopyle\napoquinamine\napoquinine\naporetic\naporetical\naporhyolite\naporia\nAporobranchia\naporobranchian\nAporobranchiata\nAporocactus\nAporosa\naporose\naporphin\naporphine\nAporrhaidae\nAporrhais\naporrhaoid\naporrhegma\naport\naportoise\naposafranine\naposaturn\naposaturnium\naposematic\naposematically\naposepalous\naposia\naposiopesis\naposiopetic\napositia\napositic\naposoro\naposporogony\naposporous\napospory\napostasis\napostasy\napostate\napostatic\napostatical\napostatically\napostatism\napostatize\napostaxis\napostemate\napostematic\napostemation\napostematous\naposteme\naposteriori\naposthia\napostil\napostle\napostlehood\napostleship\napostolate\napostoless\napostoli\nApostolian\nApostolic\napostolic\napostolical\napostolically\napostolicalness\nApostolici\napostolicism\napostolicity\napostolize\nApostolos\napostrophal\napostrophation\napostrophe\napostrophic\napostrophied\napostrophize\napostrophus\nApotactic\nApotactici\napotelesm\napotelesmatic\napotelesmatical\napothecal\napothecary\napothecaryship\napothece\napothecial\napothecium\napothegm\napothegmatic\napothegmatical\napothegmatically\napothegmatist\napothegmatize\napothem\napotheose\napotheoses\napotheosis\napotheosize\napothesine\napothesis\napotome\napotracheal\napotropaic\napotropaion\napotropaism\napotropous\napoturmeric\napotype\napotypic\napout\napoxesis\nApoxyomenos\napozem\napozema\napozemical\napozymase\nAppalachia\nAppalachian\nappall\nappalling\nappallingly\nappallment\nappalment\nappanage\nappanagist\napparatus\napparel\napparelment\napparence\napparency\napparent\napparently\napparentness\napparition\napparitional\napparitor\nappassionata\nappassionato\nappay\nappeal\nappealability\nappealable\nappealer\nappealing\nappealingly\nappealingness\nappear\nappearance\nappearanced\nappearer\nappeasable\nappeasableness\nappeasably\nappease\nappeasement\nappeaser\nappeasing\nappeasingly\nappeasive\nappellability\nappellable\nappellancy\nappellant\nappellate\nappellation\nappellational\nappellative\nappellatived\nappellatively\nappellativeness\nappellatory\nappellee\nappellor\nappend\nappendage\nappendaged\nappendalgia\nappendance\nappendancy\nappendant\nappendectomy\nappendical\nappendicalgia\nappendice\nappendicectasis\nappendicectomy\nappendices\nappendicial\nappendicious\nappendicitis\nappendicle\nappendicocaecostomy\nappendicostomy\nappendicular\nAppendicularia\nappendicularian\nAppendiculariidae\nAppendiculata\nappendiculate\nappendiculated\nappenditious\nappendix\nappendorontgenography\nappendotome\nappentice\napperceive\napperception\napperceptionism\napperceptionist\napperceptionistic\napperceptive\napperceptively\nappercipient\nappersonation\nappertain\nappertainment\nappertinent\nappet\nappete\nappetence\nappetency\nappetent\nappetently\nappetibility\nappetible\nappetibleness\nappetite\nappetition\nappetitional\nappetitious\nappetitive\nappetize\nappetizement\nappetizer\nappetizingly\nappinite\nAppius\napplanate\napplanation\napplaud\napplaudable\napplaudably\napplauder\napplaudingly\napplause\napplausive\napplausively\napple\nappleberry\nappleblossom\napplecart\nappledrane\napplegrower\napplejack\napplejohn\napplemonger\napplenut\nappleringy\nappleroot\napplesauce\napplewife\napplewoman\nappliable\nappliableness\nappliably\nappliance\nappliant\napplicability\napplicable\napplicableness\napplicably\napplicancy\napplicant\napplicate\napplication\napplicative\napplicatively\napplicator\napplicatorily\napplicatory\napplied\nappliedly\napplier\napplique\napplosion\napplosive\napplot\napplotment\napply\napplyingly\napplyment\nappoggiatura\nappoint\nappointable\nappointe\nappointee\nappointer\nappointive\nappointment\nappointor\nAppomatox\nAppomattoc\napport\napportion\napportionable\napportioner\napportionment\napposability\napposable\nappose\napposer\napposiopestic\napposite\nappositely\nappositeness\napposition\nappositional\nappositionally\nappositive\nappositively\nappraisable\nappraisal\nappraise\nappraisement\nappraiser\nappraising\nappraisingly\nappraisive\nappreciable\nappreciably\nappreciant\nappreciate\nappreciatingly\nappreciation\nappreciational\nappreciativ\nappreciative\nappreciatively\nappreciativeness\nappreciator\nappreciatorily\nappreciatory\nappredicate\napprehend\napprehender\napprehendingly\napprehensibility\napprehensible\napprehensibly\napprehension\napprehensive\napprehensively\napprehensiveness\napprend\napprense\napprentice\napprenticehood\napprenticement\napprenticeship\nappressed\nappressor\nappressorial\nappressorium\nappreteur\napprise\napprize\napprizement\napprizer\napproach\napproachability\napproachabl\napproachable\napproachableness\napproacher\napproaching\napproachless\napproachment\napprobate\napprobation\napprobative\napprobativeness\napprobator\napprobatory\napproof\nappropinquate\nappropinquation\nappropinquity\nappropre\nappropriable\nappropriate\nappropriately\nappropriateness\nappropriation\nappropriative\nappropriativeness\nappropriator\napprovable\napprovableness\napproval\napprovance\napprove\napprovedly\napprovedness\napprovement\napprover\napprovingly\napproximal\napproximate\napproximately\napproximation\napproximative\napproximatively\napproximativeness\napproximator\nappulse\nappulsion\nappulsive\nappulsively\nappurtenance\nappurtenant\napractic\napraxia\napraxic\napricate\naprication\naprickle\napricot\nApril\nAprilesque\nApriline\nAprilis\napriori\napriorism\napriorist\naprioristic\napriority\nAprocta\naproctia\naproctous\napron\naproneer\napronful\napronless\napronlike\napropos\naprosexia\naprosopia\naprosopous\naproterodont\napse\napselaphesia\napselaphesis\napsidal\napsidally\napsides\napsidiole\napsis\napsychia\napsychical\napt\nAptal\nAptenodytes\nAptera\napteral\napteran\napterial\napterium\napteroid\napterous\nApteryges\napterygial\nApterygidae\nApterygiformes\nApterygogenea\nApterygota\napterygote\napterygotous\nApteryx\nAptian\nAptiana\naptitude\naptitudinal\naptitudinally\naptly\naptness\naptote\naptotic\naptyalia\naptyalism\naptychus\nApulian\napulmonic\napulse\napurpose\nApus\napyonin\napyrene\napyretic\napyrexia\napyrexial\napyrexy\napyrotype\napyrous\naqua\naquabelle\naquabib\naquacade\naquacultural\naquaculture\naquaemanale\naquafortist\naquage\naquagreen\naquamarine\naquameter\naquaplane\naquapuncture\naquarelle\naquarellist\naquaria\naquarial\nAquarian\naquarian\nAquarid\nAquarii\naquariist\naquarium\nAquarius\naquarter\naquascutum\naquatic\naquatical\naquatically\naquatile\naquatint\naquatinta\naquatinter\naquation\naquativeness\naquatone\naquavalent\naquavit\naqueduct\naqueoglacial\naqueoigneous\naqueomercurial\naqueous\naqueously\naqueousness\naquicolous\naquicultural\naquiculture\naquiculturist\naquifer\naquiferous\nAquifoliaceae\naquifoliaceous\naquiform\nAquila\nAquilaria\naquilawood\naquilege\nAquilegia\nAquilian\nAquilid\naquiline\naquilino\naquincubital\naquincubitalism\nAquinist\naquintocubital\naquintocubitalism\naquiparous\nAquitanian\naquiver\naquo\naquocapsulitis\naquocarbonic\naquocellolitis\naquopentamminecobaltic\naquose\naquosity\naquotization\naquotize\nar\nara\nArab\naraba\naraban\narabana\nArabella\narabesque\narabesquely\narabesquerie\nArabian\nArabianize\nArabic\nArabicism\nArabicize\nArabidopsis\narability\narabin\narabinic\narabinose\narabinosic\nArabis\nArabism\nArabist\narabit\narabitol\narabiyeh\nArabize\narable\nArabophil\nAraby\naraca\nAracana\naracanga\naracari\nAraceae\naraceous\narachic\narachidonic\narachin\nArachis\narachnactis\nArachne\narachnean\narachnid\nArachnida\narachnidan\narachnidial\narachnidism\narachnidium\narachnism\nArachnites\narachnitis\narachnoid\narachnoidal\nArachnoidea\narachnoidea\narachnoidean\narachnoiditis\narachnological\narachnologist\narachnology\nArachnomorphae\narachnophagous\narachnopia\narad\nAradidae\narado\naraeostyle\naraeosystyle\nAragallus\nAragonese\nAragonian\naragonite\naraguato\narain\nArains\nArakanese\narakawaite\narake\nArales\nAralia\nAraliaceae\naraliaceous\naraliad\nAraliaephyllum\naralie\nAraliophyllum\naralkyl\naralkylated\nAramaean\nAramaic\nAramaicize\nAramaism\naramayoite\nAramidae\naramina\nAraminta\nAramis\nAramitess\nAramu\nAramus\nAranea\nAraneae\naraneid\nAraneida\naraneidan\naraneiform\nAraneiformes\nAraneiformia\naranein\nAraneina\nAraneoidea\naraneologist\naraneology\naraneous\naranga\narango\nAranyaka\naranzada\narapahite\nArapaho\narapaima\naraphorostic\narapunga\nAraquaju\narar\nArara\narara\nararacanga\nararao\nararauna\narariba\nararoba\narati\naration\naratory\nAraua\nArauan\nAraucan\nAraucanian\nAraucano\nAraucaria\nAraucariaceae\naraucarian\nAraucarioxylon\nAraujia\nArauna\nArawa\nArawak\nArawakan\nArawakian\narba\nArbacia\narbacin\narbalest\narbalester\narbalestre\narbalestrier\narbalist\narbalister\narbalo\nArbela\narbiter\narbitrable\narbitrager\narbitragist\narbitral\narbitrament\narbitrarily\narbitrariness\narbitrary\narbitrate\narbitration\narbitrational\narbitrationist\narbitrative\narbitrator\narbitratorship\narbitratrix\narbitrement\narbitrer\narbitress\narboloco\narbor\narboraceous\narboral\narborary\narborator\narboreal\narboreally\narborean\narbored\narboreous\narborescence\narborescent\narborescently\narboresque\narboret\narboreta\narboretum\narborical\narboricole\narboricoline\narboricolous\narboricultural\narboriculture\narboriculturist\narboriform\narborist\narborization\narborize\narboroid\narborolatry\narborous\narborvitae\narborway\narbuscle\narbuscula\narbuscular\narbuscule\narbusterol\narbustum\narbutase\narbute\narbutean\narbutin\narbutinase\narbutus\narc\narca\nArcacea\narcade\nArcadia\nArcadian\narcadian\nArcadianism\nArcadianly\nArcadic\nArcady\narcana\narcanal\narcane\narcanite\narcanum\narcate\narcature\nArcella\nArceuthobium\narch\narchabomination\narchae\narchaecraniate\nArchaeoceti\nArchaeocyathidae\nArchaeocyathus\narchaeogeology\narchaeographic\narchaeographical\narchaeography\narchaeolatry\narchaeolith\narchaeolithic\narchaeologer\narchaeologian\narchaeologic\narchaeological\narchaeologically\narchaeologist\narchaeology\nArchaeopithecus\nArchaeopteris\nArchaeopterygiformes\nArchaeopteryx\nArchaeornis\nArchaeornithes\narchaeostoma\nArchaeostomata\narchaeostomatous\narchagitator\narchaic\narchaical\narchaically\narchaicism\narchaism\narchaist\narchaistic\narchaize\narchaizer\narchangel\narchangelic\nArchangelica\narchangelical\narchangelship\narchantagonist\narchantiquary\narchapostate\narchapostle\narcharchitect\narcharios\narchartist\narchband\narchbeacon\narchbeadle\narchbishop\narchbishopess\narchbishopric\narchbishopry\narchbotcher\narchboutefeu\narchbuffoon\narchbuilder\narchchampion\narchchaplain\narchcharlatan\narchcheater\narchchemic\narchchief\narchchronicler\narchcity\narchconfraternity\narchconsoler\narchconspirator\narchcorrupter\narchcorsair\narchcount\narchcozener\narchcriminal\narchcritic\narchcrown\narchcupbearer\narchdapifer\narchdapifership\narchdeacon\narchdeaconate\narchdeaconess\narchdeaconry\narchdeaconship\narchdean\narchdeanery\narchdeceiver\narchdefender\narchdemon\narchdepredator\narchdespot\narchdetective\narchdevil\narchdiocesan\narchdiocese\narchdiplomatist\narchdissembler\narchdisturber\narchdivine\narchdogmatist\narchdolt\narchdruid\narchducal\narchduchess\narchduchy\narchduke\narchdukedom\narche\narcheal\nArchean\narchearl\narchebiosis\narchecclesiastic\narchecentric\narched\narchegone\narchegonial\nArchegoniata\nArchegoniatae\narchegoniate\narchegoniophore\narchegonium\narchegony\nArchegosaurus\narcheion\nArchelaus\nArchelenis\narchelogy\nArchelon\narchemperor\nArchencephala\narchencephalic\narchenemy\narchengineer\narchenteric\narchenteron\narcheocyte\nArcheozoic\nArcher\narcher\narcheress\narcherfish\narchership\narchery\narches\narchespore\narchesporial\narchesporium\narchetypal\narchetypally\narchetype\narchetypic\narchetypical\narchetypically\narchetypist\narcheunuch\narcheus\narchexorcist\narchfelon\narchfiend\narchfire\narchflamen\narchflatterer\narchfoe\narchfool\narchform\narchfounder\narchfriend\narchgenethliac\narchgod\narchgomeral\narchgovernor\narchgunner\narchhead\narchheart\narchheresy\narchheretic\narchhost\narchhouse\narchhumbug\narchhypocrisy\narchhypocrite\nArchiannelida\narchiater\nArchibald\narchibenthal\narchibenthic\narchibenthos\narchiblast\narchiblastic\narchiblastoma\narchiblastula\nArchibuteo\narchicantor\narchicarp\narchicerebrum\nArchichlamydeae\narchichlamydeous\narchicleistogamous\narchicleistogamy\narchicoele\narchicontinent\narchicyte\narchicytula\nArchidamus\nArchidiaceae\narchidiaconal\narchidiaconate\narchididascalian\narchididascalos\nArchidiskodon\nArchidium\narchidome\nArchie\narchiepiscopacy\narchiepiscopal\narchiepiscopally\narchiepiscopate\narchiereus\narchigaster\narchigastrula\narchigenesis\narchigonic\narchigonocyte\narchigony\narchiheretical\narchikaryon\narchil\narchilithic\nArchilochian\narchilowe\narchimage\nArchimago\narchimagus\narchimandrite\nArchimedean\nArchimedes\narchimime\narchimorphic\narchimorula\narchimperial\narchimperialism\narchimperialist\narchimperialistic\narchimpressionist\nArchimycetes\narchineuron\narchinfamy\narchinformer\narching\narchipallial\narchipallium\narchipelagian\narchipelagic\narchipelago\narchipin\narchiplasm\narchiplasmic\nArchiplata\narchiprelatical\narchipresbyter\narchipterygial\narchipterygium\narchisperm\nArchispermae\narchisphere\narchispore\narchistome\narchisupreme\narchisymbolical\narchitect\narchitective\narchitectonic\nArchitectonica\narchitectonically\narchitectonics\narchitectress\narchitectural\narchitecturalist\narchitecturally\narchitecture\narchitecturesque\nArchiteuthis\narchitis\narchitraval\narchitrave\narchitraved\narchitypographer\narchival\narchive\narchivist\narchivolt\narchizoic\narchjockey\narchking\narchknave\narchleader\narchlecher\narchleveler\narchlexicographer\narchliar\narchlute\narchly\narchmachine\narchmagician\narchmagirist\narchmarshal\narchmediocrity\narchmessenger\narchmilitarist\narchmime\narchminister\narchmock\narchmocker\narchmockery\narchmonarch\narchmonarchist\narchmonarchy\narchmugwump\narchmurderer\narchmystagogue\narchness\narchocele\narchocystosyrinx\narchology\narchon\narchonship\narchont\narchontate\nArchontia\narchontic\narchoplasm\narchoplasmic\narchoptoma\narchoptosis\narchorrhagia\narchorrhea\narchostegnosis\narchostenosis\narchosyrinx\narchoverseer\narchpall\narchpapist\narchpastor\narchpatriarch\narchpatron\narchphilosopher\narchphylarch\narchpiece\narchpilferer\narchpillar\narchpirate\narchplagiarist\narchplagiary\narchplayer\narchplotter\narchplunderer\narchplutocrat\narchpoet\narchpolitician\narchpontiff\narchpractice\narchprelate\narchprelatic\narchprelatical\narchpresbyter\narchpresbyterate\narchpresbytery\narchpretender\narchpriest\narchpriesthood\narchpriestship\narchprimate\narchprince\narchprophet\narchprotopope\narchprototype\narchpublican\narchpuritan\narchradical\narchrascal\narchreactionary\narchrebel\narchregent\narchrepresentative\narchrobber\narchrogue\narchruler\narchsacrificator\narchsacrificer\narchsaint\narchsatrap\narchscoundrel\narchseducer\narchsee\narchsewer\narchshepherd\narchsin\narchsnob\narchspirit\narchspy\narchsteward\narchswindler\narchsynagogue\narchtempter\narchthief\narchtraitor\narchtreasurer\narchtreasurership\narchturncoat\narchtyrant\narchurger\narchvagabond\narchvampire\narchvestryman\narchvillain\narchvillainy\narchvisitor\narchwag\narchway\narchwench\narchwise\narchworker\narchworkmaster\nArchy\narchy\nArcidae\nArcifera\narciferous\narcifinious\narciform\narcing\nArcite\narcked\narcking\narcocentrous\narcocentrum\narcograph\nArcos\nArctalia\nArctalian\nArctamerican\narctation\nArctia\narctian\narctic\narctically\narctician\narcticize\narcticward\narcticwards\narctiid\nArctiidae\nArctisca\nArctium\nArctocephalus\nArctogaea\nArctogaeal\nArctogaean\narctoid\nArctoidea\narctoidean\nArctomys\nArctos\nArctosis\nArctostaphylos\nArcturia\nArcturus\narcual\narcuale\narcuate\narcuated\narcuately\narcuation\narcubalist\narcubalister\narcula\narculite\nardassine\nArdea\nArdeae\nardeb\nArdeidae\nArdelia\nardella\nardency\nardennite\nardent\nardently\nardentness\nArdhamagadhi\nArdhanari\nardish\nArdisia\nArdisiaceae\nardoise\nardor\nardri\nardu\narduinite\narduous\narduously\narduousness\nardurous\nare\narea\nareach\naread\nareal\nareality\nArean\narear\nareasoner\nareaway\nAreca\nArecaceae\narecaceous\narecaidin\narecaidine\narecain\narecaine\nArecales\narecolidin\narecolidine\narecolin\narecoline\nArecuna\nared\nareek\nareel\narefact\narefaction\naregenerative\naregeneratory\nareito\narena\narenaceous\narenae\nArenaria\narenariae\narenarious\narenation\narend\narendalite\nareng\nArenga\nArenicola\narenicole\narenicolite\narenicolous\nArenig\narenilitic\narenoid\narenose\narenosity\narent\nareocentric\nareographer\nareographic\nareographical\nareographically\nareography\nareola\nareolar\nareolate\nareolated\nareolation\nareole\nareolet\nareologic\nareological\nareologically\nareologist\nareology\nareometer\nareometric\nareometrical\nareometry\nAreopagist\nAreopagite\nAreopagitic\nAreopagitica\nAreopagus\nareotectonics\nareroscope\naretaics\narete\nArethusa\nArethuse\nAretinian\narfvedsonite\nargal\nargala\nargali\nargans\nArgante\nArgas\nargasid\nArgasidae\nArgean\nargeers\nargel\nArgemone\nargemony\nargenol\nargent\nargental\nargentamid\nargentamide\nargentamin\nargentamine\nargentate\nargentation\nargenteous\nargenter\nargenteum\nargentic\nargenticyanide\nargentide\nargentiferous\nArgentina\nArgentine\nargentine\nArgentinean\nArgentinian\nArgentinidae\nargentinitrate\nArgentinize\nArgentino\nargention\nargentite\nargentojarosite\nargentol\nargentometric\nargentometrically\nargentometry\nargenton\nargentoproteinum\nargentose\nargentous\nargentum\nArgestes\narghan\narghel\narghool\nArgid\nargil\nargillaceous\nargilliferous\nargillite\nargillitic\nargilloarenaceous\nargillocalcareous\nargillocalcite\nargilloferruginous\nargilloid\nargillomagnesian\nargillous\narginine\nargininephosphoric\nArgiope\nArgiopidae\nArgiopoidea\nArgive\nArgo\nargo\nArgoan\nargol\nargolet\nArgolian\nArgolic\nArgolid\nargon\nArgonaut\nArgonauta\nArgonautic\nArgonne\nargosy\nargot\nargotic\nArgovian\narguable\nargue\narguer\nargufier\nargufy\nArgulus\nargument\nargumental\nargumentation\nargumentatious\nargumentative\nargumentatively\nargumentativeness\nargumentator\nargumentatory\nArgus\nargusfish\nArgusianus\nArguslike\nargute\nargutely\narguteness\nArgyle\nArgyll\nArgynnis\nargyranthemous\nargyranthous\nArgyraspides\nargyria\nargyric\nargyrite\nargyrocephalous\nargyrodite\nArgyrol\nArgyroneta\nArgyropelecus\nargyrose\nargyrosis\nArgyrosomus\nargyrythrose\narhar\narhat\narhatship\nArhauaco\narhythmic\naria\nAriadne\nArian\nAriana\nArianism\nArianistic\nArianistical\nArianize\nArianizer\nArianrhod\naribine\nArician\naricine\narid\nArided\naridge\naridian\naridity\naridly\naridness\nariegite\nAriel\nariel\narienzo\nAries\narietation\nArietid\narietinous\narietta\naright\narightly\narigue\nAriidae\nArikara\naril\nariled\narillary\narillate\narillated\narilliform\narillode\narillodium\narilloid\narillus\nArimasp\nArimaspian\nArimathaean\nAriocarpus\nArioi\nArioian\nArion\nariose\narioso\nariot\naripple\nArisaema\narisard\narise\narisen\narist\narista\nAristarch\nAristarchian\naristarchy\naristate\nAristeas\nAristida\nAristides\nAristippus\naristocracy\naristocrat\naristocratic\naristocratical\naristocratically\naristocraticalness\naristocraticism\naristocraticness\naristocratism\naristodemocracy\naristodemocratical\naristogenesis\naristogenetic\naristogenic\naristogenics\nAristol\nAristolochia\nAristolochiaceae\naristolochiaceous\nAristolochiales\naristolochin\naristolochine\naristological\naristologist\naristology\naristomonarchy\nAristophanic\naristorepublicanism\nAristotelian\nAristotelianism\nAristotelic\nAristotelism\naristotype\naristulate\narite\narithmetic\narithmetical\narithmetically\narithmetician\narithmetization\narithmetize\narithmic\narithmocracy\narithmocratic\narithmogram\narithmograph\narithmography\narithmomania\narithmometer\nArius\nArivaipa\nArizona\nArizonan\nArizonian\narizonite\narjun\nark\nArkab\nArkansan\nArkansas\nArkansawyer\narkansite\nArkite\narkite\narkose\narkosic\narksutite\nArlene\nArleng\narles\nArline\narm\narmada\narmadilla\nArmadillididae\nArmadillidium\narmadillo\nArmado\nArmageddon\nArmageddonist\narmagnac\narmament\narmamentarium\narmamentary\narmangite\narmariolum\narmarium\nArmata\nArmatoles\nArmatoli\narmature\narmbone\narmchair\narmchaired\narmed\narmeniaceous\nArmenian\nArmenic\nArmenize\nArmenoid\narmer\nArmeria\nArmeriaceae\narmet\narmful\narmgaunt\narmhole\narmhoop\nArmida\narmied\narmiferous\narmiger\narmigeral\narmigerous\narmil\narmilla\nArmillaria\narmillary\narmillate\narmillated\narming\nArminian\nArminianism\nArminianize\nArminianizer\narmipotence\narmipotent\narmisonant\narmisonous\narmistice\narmless\narmlet\narmload\narmoire\narmonica\narmor\nArmoracia\narmored\narmorer\narmorial\nArmoric\nArmorican\nArmorician\narmoried\narmorist\narmorproof\narmorwise\narmory\nArmouchiquois\narmozeen\narmpiece\narmpit\narmplate\narmrack\narmrest\narms\narmscye\narmure\narmy\narn\narna\nArnaut\narnberry\nArne\nArneb\nArnebia\narnee\narni\narnica\nArnold\nArnoldist\nArnoseris\narnotta\narnotto\nArnusian\narnut\nAro\naroar\naroast\narock\naroeira\naroid\naroideous\nAroides\naroint\narolium\narolla\naroma\naromacity\naromadendrin\naromatic\naromatically\naromaticness\naromatite\naromatites\naromatization\naromatize\naromatizer\naromatophor\naromatophore\nAronia\naroon\nAroras\nArosaguntacook\narose\naround\narousal\narouse\narousement\narouser\narow\naroxyl\narpeggiando\narpeggiated\narpeggiation\narpeggio\narpeggioed\narpen\narpent\narquerite\narquifoux\narracach\narracacha\nArracacia\narrack\narrah\narraign\narraigner\narraignment\narrame\narrange\narrangeable\narrangement\narranger\narrant\narrantly\nArras\narras\narrased\narrasene\narrastra\narrastre\narratel\narrau\narray\narrayal\narrayer\narrayment\narrear\narrearage\narrect\narrector\narrendation\narrenotokous\narrenotoky\narrent\narrentable\narrentation\narreptitious\narrest\narrestable\narrestation\narrestee\narrester\narresting\narrestingly\narrestive\narrestment\narrestor\nArretine\narrhenal\nArrhenatherum\narrhenoid\narrhenotokous\narrhenotoky\narrhinia\narrhizal\narrhizous\narrhythmia\narrhythmic\narrhythmical\narrhythmically\narrhythmous\narrhythmy\narriage\narriba\narride\narridge\narrie\narriere\nArriet\narrimby\narris\narrish\narrisways\narriswise\narrival\narrive\narriver\narroba\narrogance\narrogancy\narrogant\narrogantly\narrogantness\narrogate\narrogatingly\narrogation\narrogative\narrogator\narrojadite\narrope\narrosive\narrow\narrowbush\narrowed\narrowhead\narrowheaded\narrowleaf\narrowless\narrowlet\narrowlike\narrowplate\narrowroot\narrowsmith\narrowstone\narrowweed\narrowwood\narrowworm\narrowy\narroyo\nArruague\nArry\nArryish\nArsacid\nArsacidan\narsanilic\narse\narsedine\narsenal\narsenate\narsenation\narseneted\narsenetted\narsenfast\narsenferratose\narsenhemol\narseniasis\narseniate\narsenic\narsenical\narsenicalism\narsenicate\narsenicism\narsenicize\narsenicophagy\narsenide\narseniferous\narsenillo\narseniopleite\narseniosiderite\narsenious\narsenism\narsenite\narsenium\narseniuret\narseniureted\narsenization\narseno\narsenobenzene\narsenobenzol\narsenobismite\narsenoferratin\narsenofuran\narsenohemol\narsenolite\narsenophagy\narsenophen\narsenophenol\narsenophenylglycin\narsenopyrite\narsenostyracol\narsenotherapy\narsenotungstates\narsenotungstic\narsenous\narsenoxide\narsenyl\narses\narsesmart\narsheen\narshin\narshine\narsine\narsinic\narsino\nArsinoitherium\narsis\narsle\narsmetrik\narsmetrike\narsnicker\narsoite\narson\narsonate\narsonation\narsonic\narsonist\narsonite\narsonium\narsono\narsonvalization\narsphenamine\narsyl\narsylene\nArt\nart\nartaba\nartabe\nartal\nArtamidae\nArtamus\nartar\nartarine\nartcraft\nartefact\nartel\nArtemas\nArtemia\nArtemis\nArtemisia\nartemisic\nartemisin\nArtemision\nArtemisium\narteriagra\narterial\narterialization\narterialize\narterially\narteriarctia\narteriasis\narteriectasia\narteriectasis\narteriectopia\narterin\narterioarctia\narteriocapillary\narteriococcygeal\narteriodialysis\narteriodiastasis\narteriofibrosis\narteriogenesis\narteriogram\narteriograph\narteriography\narteriole\narteriolith\narteriology\narteriolosclerosis\narteriomalacia\narteriometer\narteriomotor\narterionecrosis\narteriopalmus\narteriopathy\narteriophlebotomy\narterioplania\narterioplasty\narteriopressor\narteriorenal\narteriorrhagia\narteriorrhaphy\narteriorrhexis\narteriosclerosis\narteriosclerotic\narteriospasm\narteriostenosis\narteriostosis\narteriostrepsis\narteriosympathectomy\narteriotome\narteriotomy\narteriotrepsis\narterious\narteriovenous\narterioversion\narterioverter\narteritis\nartery\nArtesian\nartesian\nartful\nartfully\nartfulness\nArtgum\nartha\narthel\narthemis\narthragra\narthral\narthralgia\narthralgic\narthrectomy\narthredema\narthrempyesis\narthresthesia\narthritic\narthritical\narthriticine\narthritis\narthritism\narthrobacterium\narthrobranch\narthrobranchia\narthrocace\narthrocarcinoma\narthrocele\narthrochondritis\narthroclasia\narthrocleisis\narthroclisis\narthroderm\narthrodesis\narthrodia\narthrodial\narthrodic\nArthrodira\narthrodiran\narthrodire\narthrodirous\nArthrodonteae\narthrodynia\narthrodynic\narthroempyema\narthroempyesis\narthroendoscopy\nArthrogastra\narthrogastran\narthrogenous\narthrography\narthrogryposis\narthrolite\narthrolith\narthrolithiasis\narthrology\narthromeningitis\narthromere\narthromeric\narthrometer\narthrometry\narthroncus\narthroneuralgia\narthropathic\narthropathology\narthropathy\narthrophlogosis\narthrophyma\narthroplastic\narthroplasty\narthropleura\narthropleure\narthropod\nArthropoda\narthropodal\narthropodan\narthropodous\nArthropomata\narthropomatous\narthropterous\narthropyosis\narthrorheumatism\narthrorrhagia\narthrosclerosis\narthrosia\narthrosis\narthrospore\narthrosporic\narthrosporous\narthrosteitis\narthrosterigma\narthrostome\narthrostomy\nArthrostraca\narthrosynovitis\narthrosyrinx\narthrotome\narthrotomy\narthrotrauma\narthrotropic\narthrotyphoid\narthrous\narthroxerosis\nArthrozoa\narthrozoan\narthrozoic\nArthur\nArthurian\nArthuriana\nartiad\nartichoke\narticle\narticled\narticulability\narticulable\narticulacy\narticulant\narticular\narticulare\narticularly\narticulary\nArticulata\narticulate\narticulated\narticulately\narticulateness\narticulation\narticulationist\narticulative\narticulator\narticulatory\narticulite\narticulus\nArtie\nartifact\nartifactitious\nartifice\nartificer\nartificership\nartificial\nartificialism\nartificiality\nartificialize\nartificially\nartificialness\nartiller\nartillerist\nartillery\nartilleryman\nartilleryship\nartiness\nartinite\nArtinskian\nartiodactyl\nArtiodactyla\nartiodactylous\nartiphyllous\nartisan\nartisanship\nartist\nartistdom\nartiste\nartistic\nartistical\nartistically\nartistry\nartless\nartlessly\nartlessness\nartlet\nartlike\nArtocarpaceae\nartocarpad\nartocarpeous\nartocarpous\nArtocarpus\nartolater\nartophagous\nartophorion\nartotype\nartotypy\nArtotyrite\nartware\narty\naru\nAruac\narui\naruke\nArulo\nArum\narumin\nAruncus\narundiferous\narundinaceous\nArundinaria\narundineous\nArundo\nArunta\narupa\narusa\narusha\narustle\narval\narvel\nArverni\nArvicola\narvicole\nArvicolinae\narvicoline\narvicolous\narviculture\narx\nary\nArya\nAryan\nAryanism\nAryanization\nAryanize\naryballoid\naryballus\naryepiglottic\naryl\narylamine\narylamino\narylate\narytenoid\narytenoidal\narzan\nArzava\nArzawa\narzrunite\narzun\nAs\nas\nAsa\nasaddle\nasafetida\nAsahel\nasak\nasale\nasana\nAsaph\nasaphia\nAsaphic\nasaphid\nAsaphidae\nAsaphus\nasaprol\nasarabacca\nAsaraceae\nAsarh\nasarite\nasaron\nasarone\nasarotum\nAsarum\nasbest\nasbestic\nasbestiform\nasbestine\nasbestinize\nasbestoid\nasbestoidal\nasbestos\nasbestosis\nasbestous\nasbestus\nasbolin\nasbolite\nAscabart\nAscalabota\nascan\nAscanian\nAscanius\nascare\nascariasis\nascaricidal\nascaricide\nascarid\nAscaridae\nascarides\nAscaridia\nascaridiasis\nascaridole\nAscaris\nascaron\nAscella\nascellus\nascend\nascendable\nascendance\nascendancy\nascendant\nascendence\nascendency\nascendent\nascender\nascendible\nascending\nascendingly\nascension\nascensional\nascensionist\nAscensiontide\nascensive\nascent\nascertain\nascertainable\nascertainableness\nascertainably\nascertainer\nascertainment\nascescency\nascescent\nascetic\nascetical\nascetically\nasceticism\nAscetta\naschaffite\nascham\naschistic\nasci\nascian\nAscidia\nAscidiacea\nAscidiae\nascidian\nascidiate\nascidicolous\nascidiferous\nascidiform\nascidioid\nAscidioida\nAscidioidea\nAscidiozoa\nascidiozooid\nascidium\nasciferous\nascigerous\nascii\nascites\nascitic\nascitical\nascititious\nasclent\nAsclepiad\nasclepiad\nAsclepiadaceae\nasclepiadaceous\nAsclepiadae\nAsclepiadean\nasclepiadeous\nAsclepiadic\nAsclepian\nAsclepias\nasclepidin\nasclepidoid\nAsclepieion\nasclepin\nAsclepius\nascocarp\nascocarpous\nAscochyta\nascogenous\nascogone\nascogonial\nascogonidium\nascogonium\nascolichen\nAscolichenes\nascoma\nascomycetal\nascomycete\nAscomycetes\nascomycetous\nascon\nAscones\nascophore\nascophorous\nAscophyllum\nascorbic\nascospore\nascosporic\nascosporous\nAscot\nascot\nAscothoracica\nascribable\nascribe\nascript\nascription\nascriptitii\nascriptitious\nascriptitius\nascry\nascula\nAscupart\nascus\nascyphous\nAscyrum\nasdic\nase\nasearch\nasecretory\naseethe\naseismatic\naseismic\naseismicity\naseity\naselgeia\nasellate\nAselli\nAsellidae\nAselline\nAsellus\nasem\nasemasia\nasemia\nasepsis\naseptate\naseptic\naseptically\nasepticism\nasepticize\naseptify\naseptol\naseptolin\nasexual\nasexuality\nasexualization\nasexualize\nasexually\nasfetida\nash\nAsha\nashake\nashame\nashamed\nashamedly\nashamedness\nashamnu\nAshangos\nAshantee\nAshanti\nAsharasi\nashberry\nashcake\nashen\nAsher\nasherah\nAsherites\nashery\nashes\nashet\nashily\nashimmer\nashine\nashiness\nashipboard\nAshir\nashiver\nAshkenazic\nAshkenazim\nashkoko\nashlar\nashlared\nashlaring\nashless\nashling\nAshluslay\nashman\nAshmolean\nAshochimi\nashore\nashpan\nashpit\nashplant\nashraf\nashrafi\nashthroat\nAshur\nashur\nashweed\nashwort\nashy\nasialia\nAsian\nAsianic\nAsianism\nAsiarch\nAsiarchate\nAsiatic\nAsiatical\nAsiatically\nAsiatican\nAsiaticism\nAsiaticization\nAsiaticize\nAsiatize\naside\nasidehand\nasideness\nasiderite\nasideu\nasiento\nasilid\nAsilidae\nAsilus\nasimen\nAsimina\nasimmer\nasinego\nasinine\nasininely\nasininity\nasiphonate\nasiphonogama\nasitia\nask\naskable\naskance\naskant\naskar\naskari\nasker\naskew\naskingly\naskip\nasklent\nAsklepios\naskos\nAskr\naslant\naslantwise\naslaver\nasleep\naslop\naslope\naslumber\nasmack\nasmalte\nasmear\nasmile\nasmoke\nasmolder\nasniffle\nasnort\nasoak\nasocial\nasok\nasoka\nasomatophyte\nasomatous\nasonant\nasonia\nasop\nasor\nasouth\nasp\naspace\naspalathus\nAspalax\nasparagic\nasparagine\nasparaginic\nasparaginous\nasparagus\nasparagyl\nasparkle\naspartate\naspartic\naspartyl\nAspasia\nAspatia\naspect\naspectable\naspectant\naspection\naspectual\naspen\nasper\nasperate\nasperation\naspergation\nasperge\nasperger\nAsperges\naspergil\naspergill\nAspergillaceae\nAspergillales\naspergilliform\naspergillin\naspergillosis\naspergillum\naspergillus\nAsperifoliae\nasperifoliate\nasperifolious\nasperite\nasperity\naspermatic\naspermatism\naspermatous\naspermia\naspermic\naspermous\nasperous\nasperously\nasperse\naspersed\nasperser\naspersion\naspersive\naspersively\naspersor\naspersorium\naspersory\nAsperugo\nAsperula\nasperuloside\nasperulous\nasphalt\nasphaltene\nasphalter\nasphaltic\nasphaltite\nasphaltum\naspheterism\naspheterize\nasphodel\nAsphodelaceae\nAsphodeline\nAsphodelus\nasphyctic\nasphyctous\nasphyxia\nasphyxial\nasphyxiant\nasphyxiate\nasphyxiation\nasphyxiative\nasphyxiator\nasphyxied\nasphyxy\naspic\naspiculate\naspiculous\naspidate\naspidiaria\naspidinol\nAspidiotus\nAspidiske\nAspidistra\naspidium\nAspidobranchia\nAspidobranchiata\naspidobranchiate\nAspidocephali\nAspidochirota\nAspidoganoidei\naspidomancy\nAspidosperma\naspidospermine\naspirant\naspirata\naspirate\naspiration\naspirator\naspiratory\naspire\naspirer\naspirin\naspiring\naspiringly\naspiringness\naspish\nasplanchnic\nAsplenieae\nasplenioid\nAsplenium\nasporogenic\nasporogenous\nasporous\nasport\nasportation\nasporulate\naspout\nasprawl\naspread\nAspredinidae\nAspredo\naspring\nasprout\nasquare\nasquat\nasqueal\nasquint\nasquirm\nass\nassacu\nassagai\nassai\nassail\nassailable\nassailableness\nassailant\nassailer\nassailment\nAssam\nAssamese\nAssamites\nassapan\nassapanic\nassarion\nassart\nassary\nassassin\nassassinate\nassassination\nassassinative\nassassinator\nassassinatress\nassassinist\nassate\nassation\nassault\nassaultable\nassaulter\nassaut\nassay\nassayable\nassayer\nassaying\nassbaa\nasse\nassecuration\nassecurator\nassedation\nassegai\nasself\nassemblable\nassemblage\nassemble\nassembler\nassembly\nassemblyman\nassent\nassentaneous\nassentation\nassentatious\nassentator\nassentatorily\nassentatory\nassented\nassenter\nassentient\nassenting\nassentingly\nassentive\nassentiveness\nassentor\nassert\nassertable\nassertative\nasserter\nassertible\nassertion\nassertional\nassertive\nassertively\nassertiveness\nassertor\nassertorial\nassertorially\nassertoric\nassertorical\nassertorically\nassertorily\nassertory\nassertress\nassertrix\nassertum\nassess\nassessable\nassessably\nassessed\nassessee\nassession\nassessionary\nassessment\nassessor\nassessorial\nassessorship\nassessory\nasset\nassets\nassever\nasseverate\nasseveratingly\nasseveration\nasseverative\nasseveratively\nasseveratory\nasshead\nassi\nassibilate\nassibilation\nAssidean\nassident\nassidual\nassidually\nassiduity\nassiduous\nassiduously\nassiduousness\nassientist\nassiento\nassify\nassign\nassignability\nassignable\nassignably\nassignat\nassignation\nassigned\nassignee\nassigneeship\nassigner\nassignment\nassignor\nassilag\nassimilability\nassimilable\nassimilate\nassimilation\nassimilationist\nassimilative\nassimilativeness\nassimilator\nassimilatory\nAssiniboin\nassis\nAssisan\nassise\nassish\nassishly\nassishness\nassist\nassistance\nassistant\nassistanted\nassistantship\nassistency\nassister\nassistful\nassistive\nassistless\nassistor\nassize\nassizement\nassizer\nassizes\nasslike\nassman\nAssmannshauser\nassmanship\nassociability\nassociable\nassociableness\nassociate\nassociated\nassociatedness\nassociateship\nassociation\nassociational\nassociationalism\nassociationalist\nassociationism\nassociationist\nassociationistic\nassociative\nassociatively\nassociativeness\nassociator\nassociatory\nassoil\nassoilment\nassoilzie\nassonance\nassonanced\nassonant\nassonantal\nassonantic\nassonate\nAssonia\nassort\nassortative\nassorted\nassortedness\nassorter\nassortive\nassortment\nassuade\nassuage\nassuagement\nassuager\nassuasive\nassubjugate\nassuetude\nassumable\nassumably\nassume\nassumed\nassumedly\nassumer\nassuming\nassumingly\nassumingness\nassumpsit\nassumption\nAssumptionist\nassumptious\nassumptiousness\nassumptive\nassumptively\nassurable\nassurance\nassurant\nassure\nassured\nassuredly\nassuredness\nassurer\nassurge\nassurgency\nassurgent\nassuring\nassuringly\nassyntite\nAssyrian\nAssyrianize\nAssyriological\nAssyriologist\nAssyriologue\nAssyriology\nAssyroid\nassythment\nast\nasta\nAstacidae\nAstacus\nAstakiwi\nastalk\nastarboard\nastare\nastart\nAstarte\nAstartian\nAstartidae\nastasia\nastatic\nastatically\nastaticism\nastatine\nastatize\nastatizer\nastay\nasteam\nasteatosis\nasteep\nasteer\nasteism\nastelic\nastely\naster\nAsteraceae\nasteraceous\nAsterales\nAsterella\nastereognosis\nasteria\nasterial\nAsterias\nasteriated\nAsteriidae\nasterikos\nasterin\nAsterina\nAsterinidae\nasterioid\nAsterion\nasterion\nAsterionella\nasterisk\nasterism\nasterismal\nastern\nasternal\nAsternata\nasternia\nAsterochiton\nasteroid\nasteroidal\nAsteroidea\nasteroidean\nAsterolepidae\nAsterolepis\nAsterope\nasterophyllite\nAsterophyllites\nAsterospondyli\nasterospondylic\nasterospondylous\nAsteroxylaceae\nAsteroxylon\nAsterozoa\nasterwort\nasthenia\nasthenic\nasthenical\nasthenobiosis\nasthenobiotic\nasthenolith\nasthenology\nasthenopia\nasthenopic\nasthenosphere\nastheny\nasthma\nasthmatic\nasthmatical\nasthmatically\nasthmatoid\nasthmogenic\nasthore\nasthorin\nAstian\nastichous\nastigmatic\nastigmatical\nastigmatically\nastigmatism\nastigmatizer\nastigmatometer\nastigmatoscope\nastigmatoscopy\nastigmia\nastigmism\nastigmometer\nastigmometry\nAstilbe\nastilbe\nastint\nastipulate\nastir\nastite\nastomatal\nastomatous\nastomia\nastomous\nastonied\nastonish\nastonishedly\nastonisher\nastonishing\nastonishingly\nastonishingness\nastonishment\nastony\nastoop\nastor\nastound\nastoundable\nastounding\nastoundingly\nastoundment\nAstrachan\nastraddle\nAstraea\nAstraean\nastraean\nastraeid\nAstraeidae\nastraeiform\nastragal\nastragalar\nastragalectomy\nastragali\nastragalocalcaneal\nastragalocentral\nastragalomancy\nastragalonavicular\nastragaloscaphoid\nastragalotibial\nAstragalus\nastragalus\nastrain\nastrakanite\nastrakhan\nastral\nastrally\nastrand\nAstrantia\nastraphobia\nastrapophobia\nastray\nastream\nastrer\nastrict\nastriction\nastrictive\nastrictively\nastrictiveness\nAstrid\nastride\nastrier\nastriferous\nastrild\nastringe\nastringency\nastringent\nastringently\nastringer\nastroalchemist\nastroblast\nAstrocaryum\nastrochemist\nastrochemistry\nastrochronological\nastrocyte\nastrocytoma\nastrocytomata\nastrodiagnosis\nastrodome\nastrofel\nastrogeny\nastroglia\nastrognosy\nastrogonic\nastrogony\nastrograph\nastrographic\nastrography\nastroid\nastroite\nastrolabe\nastrolabical\nastrolater\nastrolatry\nastrolithology\nastrologaster\nastrologer\nastrologian\nastrologic\nastrological\nastrologically\nastrologistic\nastrologize\nastrologous\nastrology\nastromancer\nastromancy\nastromantic\nastrometeorological\nastrometeorologist\nastrometeorology\nastrometer\nastrometrical\nastrometry\nastronaut\nastronautics\nastronomer\nastronomic\nastronomical\nastronomically\nastronomics\nastronomize\nastronomy\nAstropecten\nAstropectinidae\nastrophil\nastrophobia\nastrophotographic\nastrophotography\nastrophotometer\nastrophotometrical\nastrophotometry\nastrophyllite\nastrophysical\nastrophysicist\nastrophysics\nAstrophyton\nastroscope\nAstroscopus\nastroscopy\nastrospectral\nastrospectroscopic\nastrosphere\nastrotheology\nastrut\nastucious\nastuciously\nastucity\nAstur\nAsturian\nastute\nastutely\nastuteness\nastylar\nAstylospongia\nAstylosternus\nasudden\nasunder\nAsuri\naswail\naswarm\nasway\nasweat\naswell\naswim\naswing\naswirl\naswoon\naswooned\nasyla\nasyllabia\nasyllabic\nasyllabical\nasylum\nasymbiotic\nasymbolia\nasymbolic\nasymbolical\nasymmetric\nasymmetrical\nasymmetrically\nAsymmetron\nasymmetry\nasymptomatic\nasymptote\nasymptotic\nasymptotical\nasymptotically\nasynapsis\nasynaptic\nasynartete\nasynartetic\nasynchronism\nasynchronous\nasyndesis\nasyndetic\nasyndetically\nasyndeton\nasynergia\nasynergy\nasyngamic\nasyngamy\nasyntactic\nasyntrophy\nasystole\nasystolic\nasystolism\nasyzygetic\nat\nAta\natabal\natabeg\natabek\nAtabrine\nAtacaman\nAtacamenan\nAtacamenian\nAtacameno\natacamite\natactic\natactiform\nAtaentsic\natafter\nAtaigal\nAtaiyal\nAtalan\nataman\natamasco\nAtamosco\natangle\natap\nataraxia\nataraxy\natatschite\nataunt\natavi\natavic\natavism\natavist\natavistic\natavistically\natavus\nataxaphasia\nataxia\nataxiagram\nataxiagraph\nataxiameter\nataxiaphasia\nataxic\nataxinomic\nataxite\nataxonomic\nataxophemia\nataxy\natazir\natbash\natchison\nate\nAteba\natebrin\natechnic\natechnical\natechny\nateeter\natef\natelectasis\natelectatic\nateleological\nAteles\natelestite\natelets\natelier\nateliosis\nAtellan\natelo\natelocardia\natelocephalous\nateloglossia\natelognathia\natelomitic\natelomyelia\natelopodia\nateloprosopia\natelorachidia\natelostomia\natemporal\nAten\nAtenism\nAtenist\nAterian\nates\nAtestine\nateuchi\nateuchus\nAtfalati\nAthabasca\nAthabascan\nathalamous\nathalline\nAthamantid\nathanasia\nAthanasian\nAthanasianism\nAthanasianist\nathanasy\nathanor\nAthapascan\nathar\nAtharvan\nAthecae\nAthecata\nathecate\natheism\natheist\natheistic\natheistical\natheistically\natheisticalness\natheize\natheizer\nathelia\natheling\nathematic\nAthena\nAthenaea\nathenaeum\nathenee\nAthenian\nAthenianly\nathenor\nAthens\natheological\natheologically\natheology\natheous\nAthericera\nathericeran\nathericerous\natherine\nAtherinidae\nAtheriogaea\nAtheriogaean\nAtheris\nathermancy\nathermanous\nathermic\nathermous\natheroma\natheromasia\natheromata\natheromatosis\natheromatous\natherosclerosis\nAtherosperma\nAtherurus\nathetesis\nathetize\nathetoid\nathetosic\nathetosis\nathing\nathirst\nathlete\nathletehood\nathletic\nathletical\nathletically\nathleticism\nathletics\nathletism\nathletocracy\nathlothete\nathlothetes\nathodyd\nathort\nathrepsia\nathreptic\nathrill\nathrive\nathrob\nathrocyte\nathrocytosis\nathrogenic\nathrong\nathrough\nathwart\nathwarthawse\nathwartship\nathwartships\nathwartwise\nathymia\nathymic\nathymy\nathyreosis\nathyria\nathyrid\nAthyridae\nAthyris\nAthyrium\nathyroid\nathyroidism\nathyrosis\nAti\nAtik\nAtikokania\natilt\natimon\natinga\natingle\natinkle\natip\natis\nAtka\nAtlanta\natlantad\natlantal\nAtlantean\natlantes\nAtlantic\natlantic\nAtlantica\nAtlantid\nAtlantides\natlantite\natlantoaxial\natlantodidymus\natlantomastoid\natlantoodontoid\nAtlantosaurus\nAtlas\natlas\nAtlaslike\natlatl\natle\natlee\natloaxoid\natloid\natloidean\natloidoaxoid\natma\natman\natmiatrics\natmiatry\natmid\natmidalbumin\natmidometer\natmidometry\natmo\natmocausis\natmocautery\natmoclastic\natmogenic\natmograph\natmologic\natmological\natmologist\natmology\natmolysis\natmolyzation\natmolyze\natmolyzer\natmometer\natmometric\natmometry\natmos\natmosphere\natmosphereful\natmosphereless\natmospheric\natmospherical\natmospherically\natmospherics\natmospherology\natmostea\natmosteal\natmosteon\nAtnah\natocha\natocia\natokal\natoke\natokous\natoll\natom\natomatic\natomechanics\natomerg\natomic\natomical\natomically\natomician\natomicism\natomicity\natomics\natomiferous\natomism\natomist\natomistic\natomistical\natomistically\natomistics\natomity\natomization\natomize\natomizer\natomology\natomy\natonable\natonal\natonalism\natonalistic\natonality\natonally\natone\natonement\natoneness\natoner\natonia\natonic\natonicity\natoningly\natony\natop\nAtophan\natophan\natopic\natopite\natopy\nAtorai\nAtossa\natour\natoxic\nAtoxyl\natoxyl\natrabilarian\natrabilarious\natrabiliar\natrabiliarious\natrabiliary\natrabilious\natrabiliousness\natracheate\nAtractaspis\nAtragene\natragene\natrail\natrament\natramental\natramentary\natramentous\natraumatic\nAtrebates\nAtremata\natrematous\natremble\natrepsy\natreptic\natresia\natresic\natresy\natretic\natria\natrial\natrichia\natrichosis\natrichous\natrickle\nAtridean\natrienses\natriensis\natriocoelomic\natrioporal\natriopore\natrioventricular\natrip\nAtriplex\natrium\natrocha\natrochal\natrochous\natrocious\natrociously\natrociousness\natrocity\natrolactic\nAtropa\natropaceous\natropal\natropamine\natrophia\natrophiated\natrophic\natrophied\natrophoderma\natrophy\natropia\natropic\nAtropidae\natropine\natropinism\natropinization\natropinize\natropism\natropous\natrorubent\natrosanguineous\natroscine\natrous\natry\nAtrypa\nAtta\natta\nAttacapan\nattacco\nattach\nattachable\nattachableness\nattache\nattached\nattachedly\nattacher\nattacheship\nattachment\nattack\nattackable\nattacker\nattacolite\nAttacus\nattacus\nattagen\nattaghan\nattain\nattainability\nattainable\nattainableness\nattainder\nattainer\nattainment\nattaint\nattaintment\nattainture\nAttalea\nattaleh\nAttalid\nattar\nattargul\nattask\nattemper\nattemperament\nattemperance\nattemperate\nattemperately\nattemperation\nattemperator\nattempt\nattemptability\nattemptable\nattempter\nattemptless\nattend\nattendance\nattendancy\nattendant\nattendantly\nattender\nattendingly\nattendment\nattendress\nattensity\nattent\nattention\nattentional\nattentive\nattentively\nattentiveness\nattently\nattenuable\nattenuant\nattenuate\nattenuation\nattenuative\nattenuator\natter\nattercop\nattercrop\natterminal\nattermine\natterminement\nattern\nattery\nattest\nattestable\nattestant\nattestation\nattestative\nattestator\nattester\nattestive\nAttic\nattic\nAttical\nAtticism\natticism\nAtticist\nAtticize\natticize\natticomastoid\nattid\nAttidae\nattinge\nattingence\nattingency\nattingent\nattire\nattired\nattirement\nattirer\nattitude\nattitudinal\nattitudinarian\nattitudinarianism\nattitudinize\nattitudinizer\nAttiwendaronk\nattorn\nattorney\nattorneydom\nattorneyism\nattorneyship\nattornment\nattract\nattractability\nattractable\nattractableness\nattractant\nattracter\nattractile\nattractingly\nattraction\nattractionally\nattractive\nattractively\nattractiveness\nattractivity\nattractor\nattrahent\nattrap\nattributable\nattributal\nattribute\nattributer\nattribution\nattributive\nattributively\nattributiveness\nattrist\nattrite\nattrited\nattriteness\nattrition\nattritive\nattritus\nattune\nattunely\nattunement\nAtuami\natule\natumble\natune\natwain\natweel\natween\natwin\natwirl\natwist\natwitch\natwitter\natwixt\natwo\natypic\natypical\natypically\natypy\nauantic\naube\naubepine\nAubrey\nAubrietia\naubrietia\naubrite\nauburn\naubusson\nAuca\nauca\nAucan\nAucaner\nAucanian\nAuchenia\nauchenia\nauchenium\nauchlet\nauction\nauctionary\nauctioneer\nauctorial\nAucuba\naucuba\naucupate\naudacious\naudaciously\naudaciousness\naudacity\nAudaean\nAudian\nAudibertia\naudibility\naudible\naudibleness\naudibly\naudience\naudiencier\naudient\naudile\naudio\naudiogenic\naudiogram\naudiologist\naudiology\naudiometer\naudiometric\naudiometry\nAudion\naudion\naudiophile\naudiphone\naudit\naudition\nauditive\nauditor\nauditoria\nauditorial\nauditorially\nauditorily\nauditorium\nauditorship\nauditory\nauditress\nauditual\naudivise\naudiviser\naudivision\nAudrey\nAudubonistic\nAueto\nauganite\nauge\nAugean\naugelite\naugen\naugend\nauger\naugerer\naugh\naught\naughtlins\naugite\naugitic\naugitite\naugitophyre\naugment\naugmentable\naugmentation\naugmentationer\naugmentative\naugmentatively\naugmented\naugmentedly\naugmenter\naugmentive\naugur\naugural\naugurate\naugurial\naugurous\naugurship\naugury\nAugust\naugust\nAugusta\naugustal\nAugustan\nAugusti\nAugustin\nAugustinian\nAugustinianism\nAugustinism\naugustly\naugustness\nAugustus\nauh\nauhuhu\nAuk\nauk\nauklet\naula\naulacocarpous\nAulacodus\nAulacomniaceae\nAulacomnium\naulae\naularian\nauld\nauldfarrantlike\nauletai\naulete\nauletes\nauletic\nauletrides\nauletris\naulic\naulicism\nauloi\naulophyte\naulos\nAulostoma\nAulostomatidae\nAulostomi\naulostomid\nAulostomidae\nAulostomus\naulu\naum\naumaga\naumail\naumbry\naumery\naumil\naumildar\naumous\naumrie\nauncel\naune\nAunjetitz\naunt\naunthood\nauntie\nauntish\nauntlike\nauntly\nauntsary\nauntship\naupaka\naura\naurae\naural\naurally\nauramine\nAurantiaceae\naurantiaceous\nAurantium\naurantium\naurar\naurate\naurated\naureate\naureately\naureateness\naureation\naureity\nAurelia\naurelia\naurelian\nAurelius\nAureocasidium\naureola\naureole\naureolin\naureoline\naureomycin\naureous\naureously\nauresca\naureus\nauribromide\nauric\naurichalcite\naurichalcum\naurichloride\naurichlorohydric\nauricle\nauricled\nauricomous\nAuricula\nauricula\nauriculae\nauricular\nauriculare\nauriculares\nAuricularia\nauricularia\nAuriculariaceae\nauriculariae\nAuriculariales\nauricularian\nauricularis\nauricularly\nauriculate\nauriculated\nauriculately\nAuriculidae\nauriculocranial\nauriculoparietal\nauriculotemporal\nauriculoventricular\nauriculovertical\nauricyanhydric\nauricyanic\nauricyanide\nauride\nauriferous\naurific\naurification\nauriform\naurify\nAuriga\naurigal\naurigation\naurigerous\nAurigid\nAurignacian\naurilave\naurin\naurinasal\nauriphone\nauriphrygia\nauriphrygiate\nauripuncture\naurir\nauriscalp\nauriscalpia\nauriscalpium\nauriscope\nauriscopy\naurist\naurite\naurivorous\nauroauric\naurobromide\naurochloride\naurochs\naurocyanide\naurodiamine\nauronal\naurophobia\naurophore\naurora\naurorae\nauroral\naurorally\naurore\naurorean\nAurorian\naurorium\naurotellurite\naurothiosulphate\naurothiosulphuric\naurous\naurrescu\naurulent\naurum\naurure\nauryl\nAus\nauscult\nauscultascope\nauscultate\nauscultation\nauscultative\nauscultator\nauscultatory\nAuscultoscope\nauscultoscope\nAushar\nauslaut\nauslaute\nAusones\nAusonian\nauspex\nauspicate\nauspice\nauspices\nauspicial\nauspicious\nauspiciously\nauspiciousness\nauspicy\nAussie\nAustafrican\naustenite\naustenitic\nAuster\naustere\nausterely\naustereness\nausterity\nAusterlitz\nAustin\nAustral\naustral\nAustralasian\naustralene\nAustralia\nAustralian\nAustralianism\nAustralianize\nAustralic\nAustralioid\naustralite\nAustraloid\nAustralopithecinae\naustralopithecine\nAustralopithecus\nAustralorp\nAustrasian\nAustrian\nAustrianize\nAustric\naustrium\nAustroasiatic\nAustrogaea\nAustrogaean\naustromancy\nAustronesian\nAustrophil\nAustrophile\nAustrophilism\nAustroriparian\nausu\nausubo\nautacoid\nautacoidal\nautallotriomorphic\nautantitypy\nautarch\nautarchic\nautarchical\nAutarchoglossa\nautarchy\nautarkic\nautarkical\nautarkist\nautarky\naute\nautechoscope\nautecious\nauteciously\nauteciousness\nautecism\nautecologic\nautecological\nautecologically\nautecologist\nautecology\nautecy\nautem\nauthentic\nauthentical\nauthentically\nauthenticalness\nauthenticate\nauthentication\nauthenticator\nauthenticity\nauthenticly\nauthenticness\nauthigene\nauthigenetic\nauthigenic\nauthigenous\nauthor\nauthorcraft\nauthoress\nauthorhood\nauthorial\nauthorially\nauthorish\nauthorism\nauthoritarian\nauthoritarianism\nauthoritative\nauthoritatively\nauthoritativeness\nauthority\nauthorizable\nauthorization\nauthorize\nauthorized\nauthorizer\nauthorless\nauthorling\nauthorly\nauthorship\nauthotype\nautism\nautist\nautistic\nauto\nautoabstract\nautoactivation\nautoactive\nautoaddress\nautoagglutinating\nautoagglutination\nautoagglutinin\nautoalarm\nautoalkylation\nautoallogamous\nautoallogamy\nautoanalysis\nautoanalytic\nautoantibody\nautoanticomplement\nautoantitoxin\nautoasphyxiation\nautoaspiration\nautoassimilation\nautobahn\nautobasidia\nAutobasidiomycetes\nautobasidiomycetous\nautobasidium\nAutobasisii\nautobiographal\nautobiographer\nautobiographic\nautobiographical\nautobiographically\nautobiographist\nautobiography\nautobiology\nautoblast\nautoboat\nautoboating\nautobolide\nautobus\nautocab\nautocade\nautocall\nautocamp\nautocamper\nautocamping\nautocar\nautocarist\nautocarpian\nautocarpic\nautocarpous\nautocatalepsy\nautocatalysis\nautocatalytic\nautocatalytically\nautocatalyze\nautocatheterism\nautocephalia\nautocephality\nautocephalous\nautocephaly\nautoceptive\nautochemical\nautocholecystectomy\nautochrome\nautochromy\nautochronograph\nautochthon\nautochthonal\nautochthonic\nautochthonism\nautochthonous\nautochthonously\nautochthonousness\nautochthony\nautocide\nautocinesis\nautoclasis\nautoclastic\nautoclave\nautocoenobium\nautocoherer\nautocoid\nautocollimation\nautocollimator\nautocolony\nautocombustible\nautocombustion\nautocomplexes\nautocondensation\nautoconduction\nautoconvection\nautoconverter\nautocopist\nautocoprophagous\nautocorrosion\nautocracy\nautocrat\nautocratic\nautocratical\nautocratically\nautocrator\nautocratoric\nautocratorical\nautocratrix\nautocratship\nautocremation\nautocriticism\nautocystoplasty\nautocytolysis\nautocytolytic\nautodecomposition\nautodepolymerization\nautodermic\nautodestruction\nautodetector\nautodiagnosis\nautodiagnostic\nautodiagrammatic\nautodidact\nautodidactic\nautodifferentiation\nautodiffusion\nautodigestion\nautodigestive\nautodrainage\nautodrome\nautodynamic\nautodyne\nautoecholalia\nautoecic\nautoecious\nautoeciously\nautoeciousness\nautoecism\nautoecous\nautoecy\nautoeducation\nautoeducative\nautoelectrolysis\nautoelectrolytic\nautoelectronic\nautoelevation\nautoepigraph\nautoepilation\nautoerotic\nautoerotically\nautoeroticism\nautoerotism\nautoexcitation\nautofecundation\nautofermentation\nautoformation\nautofrettage\nautogamic\nautogamous\nautogamy\nautogauge\nautogeneal\nautogenesis\nautogenetic\nautogenetically\nautogenic\nautogenous\nautogenously\nautogeny\nAutogiro\nautogiro\nautognosis\nautognostic\nautograft\nautografting\nautogram\nautograph\nautographal\nautographer\nautographic\nautographical\nautographically\nautographism\nautographist\nautographometer\nautography\nautogravure\nAutoharp\nautoharp\nautoheader\nautohemic\nautohemolysin\nautohemolysis\nautohemolytic\nautohemorrhage\nautohemotherapy\nautoheterodyne\nautoheterosis\nautohexaploid\nautohybridization\nautohypnosis\nautohypnotic\nautohypnotism\nautohypnotization\nautoicous\nautoignition\nautoimmunity\nautoimmunization\nautoinduction\nautoinductive\nautoinfection\nautoinfusion\nautoinhibited\nautoinoculable\nautoinoculation\nautointellectual\nautointoxicant\nautointoxication\nautoirrigation\nautoist\nautojigger\nautojuggernaut\nautokinesis\nautokinetic\nautokrator\nautolaryngoscope\nautolaryngoscopic\nautolaryngoscopy\nautolater\nautolatry\nautolavage\nautolesion\nautolimnetic\nautolith\nautoloading\nautological\nautologist\nautologous\nautology\nautoluminescence\nautoluminescent\nautolysate\nautolysin\nautolysis\nautolytic\nAutolytus\nautolyzate\nautolyze\nautoma\nautomacy\nautomanual\nautomat\nautomata\nautomatic\nautomatical\nautomatically\nautomaticity\nautomatin\nautomatism\nautomatist\nautomatization\nautomatize\nautomatograph\nautomaton\nautomatonlike\nautomatous\nautomechanical\nautomelon\nautometamorphosis\nautometric\nautometry\nautomobile\nautomobilism\nautomobilist\nautomobilistic\nautomobility\nautomolite\nautomonstration\nautomorph\nautomorphic\nautomorphically\nautomorphism\nautomotive\nautomotor\nautomower\nautomysophobia\nautonegation\nautonephrectomy\nautonephrotoxin\nautoneurotoxin\nautonitridation\nautonoetic\nautonomasy\nautonomic\nautonomical\nautonomically\nautonomist\nautonomize\nautonomous\nautonomously\nautonomy\nautonym\nautoparasitism\nautopathic\nautopathography\nautopathy\nautopelagic\nautopepsia\nautophagi\nautophagia\nautophagous\nautophagy\nautophobia\nautophoby\nautophon\nautophone\nautophonoscope\nautophonous\nautophony\nautophotoelectric\nautophotograph\nautophotometry\nautophthalmoscope\nautophyllogeny\nautophyte\nautophytic\nautophytically\nautophytograph\nautophytography\nautopilot\nautoplagiarism\nautoplasmotherapy\nautoplast\nautoplastic\nautoplasty\nautopneumatic\nautopoint\nautopoisonous\nautopolar\nautopolo\nautopoloist\nautopolyploid\nautopore\nautoportrait\nautoportraiture\nautopositive\nautopotent\nautoprogressive\nautoproteolysis\nautoprothesis\nautopsic\nautopsical\nautopsy\nautopsychic\nautopsychoanalysis\nautopsychology\nautopsychorhythmia\nautopsychosis\nautoptic\nautoptical\nautoptically\nautopticity\nautopyotherapy\nautoracemization\nautoradiograph\nautoradiographic\nautoradiography\nautoreduction\nautoregenerator\nautoregulation\nautoreinfusion\nautoretardation\nautorhythmic\nautorhythmus\nautoriser\nautorotation\nautorrhaphy\nAutosauri\nAutosauria\nautoschediasm\nautoschediastic\nautoschediastical\nautoschediastically\nautoschediaze\nautoscience\nautoscope\nautoscopic\nautoscopy\nautosender\nautosensitization\nautosensitized\nautosepticemia\nautoserotherapy\nautoserum\nautosexing\nautosight\nautosign\nautosite\nautositic\nautoskeleton\nautosled\nautoslip\nautosomal\nautosomatognosis\nautosomatognostic\nautosome\nautosoteric\nautosoterism\nautospore\nautosporic\nautospray\nautostability\nautostage\nautostandardization\nautostarter\nautostethoscope\nautostylic\nautostylism\nautostyly\nautosuggestibility\nautosuggestible\nautosuggestion\nautosuggestionist\nautosuggestive\nautosuppression\nautosymbiontic\nautosymbolic\nautosymbolical\nautosymbolically\nautosymnoia\nAutosyn\nautosyndesis\nautotelegraph\nautotelic\nautotetraploid\nautotetraploidy\nautothaumaturgist\nautotheater\nautotheism\nautotheist\nautotherapeutic\nautotherapy\nautothermy\nautotomic\nautotomize\nautotomous\nautotomy\nautotoxaemia\nautotoxic\nautotoxication\nautotoxicity\nautotoxicosis\nautotoxin\nautotoxis\nautotractor\nautotransformer\nautotransfusion\nautotransplant\nautotransplantation\nautotrepanation\nautotriploid\nautotriploidy\nautotroph\nautotrophic\nautotrophy\nautotropic\nautotropically\nautotropism\nautotruck\nautotuberculin\nautoturning\nautotype\nautotyphization\nautotypic\nautotypography\nautotypy\nautourine\nautovaccination\nautovaccine\nautovalet\nautovalve\nautovivisection\nautoxeny\nautoxidation\nautoxidator\nautoxidizability\nautoxidizable\nautoxidize\nautoxidizer\nautozooid\nautrefois\nautumn\nautumnal\nautumnally\nautumnian\nautumnity\nAutunian\nautunite\nauxamylase\nauxanogram\nauxanology\nauxanometer\nauxesis\nauxetic\nauxetical\nauxetically\nauxiliar\nauxiliarly\nauxiliary\nauxiliate\nauxiliation\nauxiliator\nauxiliatory\nauxilium\nauximone\nauxin\nauxinic\nauxinically\nauxoaction\nauxoamylase\nauxoblast\nauxobody\nauxocardia\nauxochrome\nauxochromic\nauxochromism\nauxochromous\nauxocyte\nauxoflore\nauxofluor\nauxograph\nauxographic\nauxohormone\nauxology\nauxometer\nauxospore\nauxosubstance\nauxotonic\nauxotox\nava\navadana\navadavat\navadhuta\navahi\navail\navailability\navailable\navailableness\navailably\navailingly\navailment\naval\navalanche\navalent\navalvular\nAvanguardisti\navania\navanious\nAvanti\navanturine\nAvar\nAvaradrano\navaremotemo\nAvarian\navarice\navaricious\navariciously\navariciousness\nAvarish\nAvars\navascular\navast\navaunt\nAve\nave\navellan\navellane\navellaneous\navellano\navelonge\naveloz\nAvena\navenaceous\navenage\navenalin\navener\navenge\navengeful\navengement\navenger\navengeress\navenging\navengingly\navenin\navenolith\navenous\navens\naventail\nAventine\naventurine\navenue\naver\navera\naverage\naveragely\naverager\naverah\naveril\naverin\naverment\nAvernal\nAvernus\naverrable\naverral\nAverrhoa\nAverroism\nAverroist\nAverroistic\naverruncate\naverruncation\naverruncator\naversant\naversation\naverse\naversely\naverseness\naversion\naversive\navert\navertable\naverted\navertedly\naverter\navertible\nAvertin\nAvery\nAves\nAvesta\nAvestan\navian\navianization\navianize\naviarist\naviary\naviate\naviatic\naviation\naviator\naviatorial\naviatoriality\naviatory\naviatress\naviatrices\naviatrix\nAvicennia\nAvicenniaceae\nAvicennism\navichi\navicide\navick\navicolous\nAvicula\navicular\nAvicularia\navicularia\navicularian\nAviculariidae\nAvicularimorphae\navicularium\nAviculidae\naviculture\naviculturist\navid\navidious\navidiously\navidity\navidly\navidous\navidya\navifauna\navifaunal\navigate\navigation\navigator\nAvignonese\navijja\nAvikom\navine\naviolite\navirulence\navirulent\nAvis\naviso\navital\navitaminosis\navitaminotic\navitic\navives\navizandum\navo\navocado\navocate\navocation\navocative\navocatory\navocet\navodire\navogadrite\navoid\navoidable\navoidably\navoidance\navoider\navoidless\navoidment\navoirdupois\navolate\navolation\navolitional\navondbloem\navouch\navouchable\navoucher\navouchment\navourneen\navow\navowable\navowableness\navowably\navowal\navowance\navowant\navowed\navowedly\navowedness\navower\navowry\navoyer\navoyership\nAvshar\navulse\navulsion\navuncular\navunculate\naw\nawa\nAwabakal\nawabi\nAwadhi\nawaft\nawag\nawait\nawaiter\nAwaitlala\nawakable\nawake\nawaken\nawakenable\nawakener\nawakening\nawakeningly\nawakenment\nawald\nawalim\nawalt\nAwan\nawane\nawanting\nawapuhi\naward\nawardable\nawarder\nawardment\naware\nawaredom\nawareness\nawaruite\nawash\nawaste\nawat\nawatch\nawater\nawave\naway\nawayness\nawber\nawd\nawe\nawearied\naweary\naweather\naweband\nawedness\nawee\naweek\naweel\naweigh\nAwellimiden\nawesome\nawesomely\nawesomeness\nawest\naweto\nawfu\nawful\nawfully\nawfulness\nawheel\nawheft\nawhet\nawhile\nawhir\nawhirl\nawide\nawiggle\nawikiwiki\nawin\nawing\nawink\nawiwi\nawkward\nawkwardish\nawkwardly\nawkwardness\nawl\nawless\nawlessness\nawlwort\nawmous\nawn\nawned\nawner\nawning\nawninged\nawnless\nawnlike\nawny\nawoke\nAwol\nawork\nawreck\nawrist\nawrong\nawry\nAwshar\nax\naxal\naxbreaker\naxe\naxed\nAxel\naxenic\naxes\naxfetch\naxhammer\naxhammered\naxhead\naxial\naxiality\naxially\naxiate\naxiation\nAxifera\naxiform\naxifugal\naxil\naxile\naxilemma\naxilemmata\naxilla\naxillae\naxillant\naxillar\naxillary\naxine\naxinite\naxinomancy\naxiolite\naxiolitic\naxiological\naxiologically\naxiologist\naxiology\naxiom\naxiomatic\naxiomatical\naxiomatically\naxiomatization\naxiomatize\naxion\naxiopisty\nAxis\naxis\naxised\naxisymmetric\naxisymmetrical\naxite\naxle\naxled\naxlesmith\naxletree\naxmaker\naxmaking\naxman\naxmanship\naxmaster\nAxminster\naxodendrite\naxofugal\naxogamy\naxoid\naxoidean\naxolemma\naxolotl\naxolysis\naxometer\naxometric\naxometry\naxon\naxonal\naxoneure\naxoneuron\nAxonia\nAxonolipa\naxonolipous\naxonometric\naxonometry\nAxonophora\naxonophorous\nAxonopus\naxonost\naxopetal\naxophyte\naxoplasm\naxopodia\naxopodium\naxospermous\naxostyle\naxseed\naxstone\naxtree\nAxumite\naxunge\naxweed\naxwise\naxwort\nAy\nay\nayacahuite\nayah\nAyahuca\nAydendron\naye\nayegreen\nayelp\nayenbite\nayin\nAylesbury\nayless\naylet\nayllu\nAymara\nAymaran\nAymoro\nayond\nayont\nayous\nAyrshire\nAythya\nayu\nAyubite\nAyyubid\nazadrachta\nazafrin\nAzalea\nazalea\nAzande\nazarole\nazedarach\nazelaic\nazelate\nAzelfafage\nazeotrope\nazeotropic\nazeotropism\nazeotropy\nAzerbaijanese\nAzerbaijani\nAzerbaijanian\nAzha\nazide\naziethane\nAzilian\nazilut\nAzimech\nazimene\nazimethylene\nazimide\nazimine\nazimino\naziminobenzene\nazimuth\nazimuthal\nazimuthally\nazine\naziola\nazlactone\nazo\nazobacter\nazobenzene\nazobenzil\nazobenzoic\nazobenzol\nazoblack\nazoch\nazocochineal\nazocoralline\nazocorinth\nazocyanide\nazocyclic\nazodicarboxylic\nazodiphenyl\nazodisulphonic\nazoeosin\nazoerythrin\nazofication\nazofier\nazoflavine\nazoformamide\nazoformic\nazofy\nazogallein\nazogreen\nazogrenadine\nazohumic\nazoic\nazoimide\nazoisobutyronitrile\nazole\nazolitmin\nAzolla\nazomethine\nazon\nazonal\nazonaphthalene\nazonic\nazonium\nazoospermia\nazoparaffin\nazophen\nazophenetole\nazophenine\nazophenol\nazophenyl\nazophenylene\nazophosphin\nazophosphore\nazoprotein\nAzorian\nazorite\nazorubine\nazosulphine\nazosulphonic\nazotate\nazote\nazoted\nazotemia\nazotenesis\nazotetrazole\nazoth\nazothionium\nazotic\nazotine\nazotite\nazotize\nAzotobacter\nAzotobacterieae\nazotoluene\nazotometer\nazotorrhoea\nazotous\nazoturia\nazovernine\nazox\nazoxazole\nazoxime\nazoxine\nazoxonium\nazoxy\nazoxyanisole\nazoxybenzene\nazoxybenzoic\nazoxynaphthalene\nazoxyphenetole\nazoxytoluidine\nAztec\nAzteca\nazteca\nAztecan\nazthionium\nazulene\nazulite\nazulmic\nazumbre\nazure\nazurean\nazured\nazureous\nazurine\nazurite\nazurmalachite\nazurous\nazury\nAzygobranchia\nAzygobranchiata\nazygobranchiate\nazygomatous\nazygos\nazygosperm\nazygospore\nazygous\nazyme\nazymite\nazymous\nB\nb\nba\nbaa\nbaahling\nBaal\nbaal\nBaalath\nBaalish\nBaalism\nBaalist\nBaalite\nBaalitical\nBaalize\nBaalshem\nbaar\nBab\nbaba\nbabacoote\nbabai\nbabasco\nbabassu\nbabaylan\nBabbie\nBabbitt\nbabbitt\nbabbitter\nBabbittess\nBabbittian\nBabbittism\nBabbittry\nbabblative\nbabble\nbabblement\nbabbler\nbabblesome\nbabbling\nbabblingly\nbabblish\nbabblishly\nbabbly\nbabby\nBabcock\nbabe\nbabehood\nBabel\nBabeldom\nbabelet\nBabelic\nbabelike\nBabelish\nBabelism\nBabelize\nbabery\nbabeship\nBabesia\nbabesiasis\nBabhan\nBabi\nBabiana\nbabiche\nbabied\nBabiism\nbabillard\nBabine\nbabingtonite\nbabirusa\nbabish\nbabished\nbabishly\nbabishness\nBabism\nBabist\nBabite\nbablah\nbabloh\nbaboen\nBabongo\nbaboo\nbaboodom\nbabooism\nbaboon\nbaboonery\nbaboonish\nbaboonroot\nbaboot\nbabouche\nBabouvism\nBabouvist\nbabroot\nBabs\nbabu\nBabua\nbabudom\nbabuina\nbabuism\nbabul\nBabuma\nBabungera\nbabushka\nbaby\nbabydom\nbabyfied\nbabyhood\nbabyhouse\nbabyish\nbabyishly\nbabyishness\nbabyism\nbabylike\nBabylon\nBabylonian\nBabylonic\nBabylonish\nBabylonism\nBabylonite\nBabylonize\nbabyolatry\nbabyship\nbac\nbacaba\nbacach\nbacalao\nbacao\nbacbakiri\nbacca\nbaccaceous\nbaccae\nbaccalaurean\nbaccalaureate\nbaccara\nbaccarat\nbaccate\nbaccated\nBacchae\nbacchanal\nBacchanalia\nbacchanalian\nbacchanalianism\nbacchanalianly\nbacchanalism\nbacchanalization\nbacchanalize\nbacchant\nbacchante\nbacchantes\nbacchantic\nbacchar\nbaccharis\nbaccharoid\nbaccheion\nbacchiac\nbacchian\nBacchic\nbacchic\nBacchical\nBacchides\nbacchii\nbacchius\nBacchus\nBacchuslike\nbacciferous\nbacciform\nbaccivorous\nbach\nBacharach\nbache\nbachel\nbachelor\nbachelordom\nbachelorhood\nbachelorism\nbachelorize\nbachelorlike\nbachelorly\nbachelorship\nbachelorwise\nbachelry\nBachichi\nBacillaceae\nbacillar\nBacillariaceae\nbacillariaceous\nBacillariales\nBacillarieae\nBacillariophyta\nbacillary\nbacillemia\nbacilli\nbacillian\nbacillicidal\nbacillicide\nbacillicidic\nbacilliculture\nbacilliform\nbacilligenic\nbacilliparous\nbacillite\nbacillogenic\nbacillogenous\nbacillophobia\nbacillosis\nbacilluria\nbacillus\nBacis\nbacitracin\nback\nbackache\nbackaching\nbackachy\nbackage\nbackband\nbackbearing\nbackbencher\nbackbite\nbackbiter\nbackbitingly\nbackblow\nbackboard\nbackbone\nbackboned\nbackboneless\nbackbonelessness\nbackbrand\nbackbreaker\nbackbreaking\nbackcap\nbackcast\nbackchain\nbackchat\nbackcourt\nbackcross\nbackdoor\nbackdown\nbackdrop\nbacked\nbacken\nbacker\nbacket\nbackfall\nbackfatter\nbackfield\nbackfill\nbackfiller\nbackfilling\nbackfire\nbackfiring\nbackflap\nbackflash\nbackflow\nbackfold\nbackframe\nbackfriend\nbackfurrow\nbackgame\nbackgammon\nbackground\nbackhand\nbackhanded\nbackhandedly\nbackhandedness\nbackhander\nbackhatch\nbackheel\nbackhooker\nbackhouse\nbackie\nbackiebird\nbacking\nbackjaw\nbackjoint\nbacklands\nbacklash\nbacklashing\nbackless\nbacklet\nbacklings\nbacklog\nbacklotter\nbackmost\nbackpedal\nbackpiece\nbackplate\nbackrope\nbackrun\nbacksaw\nbackscraper\nbackset\nbacksetting\nbacksettler\nbackshift\nbackside\nbacksight\nbackslap\nbackslapper\nbackslapping\nbackslide\nbackslider\nbackslidingness\nbackspace\nbackspacer\nbackspang\nbackspier\nbackspierer\nbackspin\nbackspread\nbackspringing\nbackstaff\nbackstage\nbackstamp\nbackstay\nbackster\nbackstick\nbackstitch\nbackstone\nbackstop\nbackstrap\nbackstretch\nbackstring\nbackstrip\nbackstroke\nbackstromite\nbackswept\nbackswing\nbacksword\nbackswording\nbackswordman\nbackswordsman\nbacktack\nbacktender\nbacktenter\nbacktrack\nbacktracker\nbacktrick\nbackup\nbackveld\nbackvelder\nbackwall\nbackward\nbackwardation\nbackwardly\nbackwardness\nbackwards\nbackwash\nbackwasher\nbackwashing\nbackwater\nbackwatered\nbackway\nbackwood\nbackwoods\nbackwoodsiness\nbackwoodsman\nbackwoodsy\nbackword\nbackworm\nbackwort\nbackyarder\nbaclin\nbacon\nbaconer\nBaconian\nBaconianism\nBaconic\nBaconism\nBaconist\nbaconize\nbaconweed\nbacony\nBacopa\nbacteremia\nbacteria\nBacteriaceae\nbacteriaceous\nbacterial\nbacterially\nbacterian\nbacteric\nbactericholia\nbactericidal\nbactericide\nbactericidin\nbacterid\nbacteriemia\nbacteriform\nbacterin\nbacterioagglutinin\nbacterioblast\nbacteriocyte\nbacteriodiagnosis\nbacteriofluorescin\nbacteriogenic\nbacteriogenous\nbacteriohemolysin\nbacterioid\nbacterioidal\nbacteriologic\nbacteriological\nbacteriologically\nbacteriologist\nbacteriology\nbacteriolysin\nbacteriolysis\nbacteriolytic\nbacteriolyze\nbacteriopathology\nbacteriophage\nbacteriophagia\nbacteriophagic\nbacteriophagous\nbacteriophagy\nbacteriophobia\nbacterioprecipitin\nbacterioprotein\nbacteriopsonic\nbacteriopsonin\nbacteriopurpurin\nbacterioscopic\nbacterioscopical\nbacterioscopically\nbacterioscopist\nbacterioscopy\nbacteriosis\nbacteriosolvent\nbacteriostasis\nbacteriostat\nbacteriostatic\nbacteriotherapeutic\nbacteriotherapy\nbacteriotoxic\nbacteriotoxin\nbacteriotropic\nbacteriotropin\nbacteriotrypsin\nbacterious\nbacteritic\nbacterium\nbacteriuria\nbacterization\nbacterize\nbacteroid\nbacteroidal\nBacteroideae\nBacteroides\nBactrian\nBactris\nBactrites\nbactriticone\nbactritoid\nbacula\nbacule\nbaculi\nbaculiferous\nbaculiform\nbaculine\nbaculite\nBaculites\nbaculitic\nbaculiticone\nbaculoid\nbaculum\nbaculus\nbacury\nbad\nBadaga\nbadan\nBadarian\nbadarrah\nBadawi\nbaddeleyite\nbadderlocks\nbaddish\nbaddishly\nbaddishness\nbaddock\nbade\nbadenite\nbadge\nbadgeless\nbadgeman\nbadger\nbadgerbrush\nbadgerer\nbadgeringly\nbadgerlike\nbadgerly\nbadgerweed\nbadiaga\nbadian\nbadigeon\nbadinage\nbadious\nbadland\nbadlands\nbadly\nbadminton\nbadness\nBadon\nBaduhenna\nbae\nBaedeker\nBaedekerian\nBaeria\nbaetuli\nbaetulus\nbaetyl\nbaetylic\nbaetylus\nbaetzner\nbafaro\nbaff\nbaffeta\nbaffle\nbafflement\nbaffler\nbaffling\nbafflingly\nbafflingness\nbaffy\nbaft\nbafta\nBafyot\nbag\nbaga\nBaganda\nbagani\nbagasse\nbagataway\nbagatelle\nbagatine\nbagattini\nbagattino\nBagaudae\nBagdad\nBagdi\nbagel\nbagful\nbaggage\nbaggageman\nbaggagemaster\nbaggager\nbaggala\nbagganet\nBaggara\nbagged\nbagger\nbaggie\nbaggily\nbagginess\nbagging\nbaggit\nbaggy\nBagheli\nbaghouse\nBaginda\nBagirmi\nbagleaves\nbaglike\nbagmaker\nbagmaking\nbagman\nbagnio\nbagnut\nbago\nBagobo\nbagonet\nbagpipe\nbagpiper\nbagpipes\nbagplant\nbagrationite\nbagre\nbagreef\nbagroom\nbaguette\nbagwig\nbagwigged\nbagworm\nbagwyn\nbah\nBahai\nBahaism\nBahaist\nBaham\nBahama\nBahamian\nbahan\nbahar\nBahaullah\nbahawder\nbahay\nbahera\nbahiaite\nBahima\nbahisti\nBahmani\nBahmanid\nbahnung\nbaho\nbahoe\nbahoo\nbaht\nBahuma\nbahur\nbahut\nBahutu\nbahuvrihi\nBaianism\nbaidarka\nBaidya\nBaiera\nbaiginet\nbaignet\nbaikalite\nbaikerinite\nbaikerite\nbaikie\nbail\nbailable\nbailage\nbailee\nbailer\nbailey\nbailie\nbailiery\nbailieship\nbailiff\nbailiffry\nbailiffship\nbailiwick\nbailliage\nbaillone\nBaillonella\nbailment\nbailor\nbailpiece\nbailsman\nbailwood\nbain\nbainie\nBaining\nbaioc\nbaiocchi\nbaiocco\nbairagi\nBairam\nbairn\nbairnie\nbairnish\nbairnishness\nbairnliness\nbairnly\nbairnteam\nbairntime\nbairnwort\nBais\nBaisakh\nbaister\nbait\nbaiter\nbaith\nbaittle\nbaitylos\nbaize\nbajada\nbajan\nBajardo\nbajarigar\nBajau\nBajocian\nbajra\nbajree\nbajri\nbajury\nbaka\nBakairi\nbakal\nBakalai\nBakalei\nBakatan\nbake\nbakeboard\nbaked\nbakehouse\nBakelite\nbakelite\nbakelize\nbaken\nbakeoven\nbakepan\nbaker\nbakerdom\nbakeress\nbakerite\nbakerless\nbakerly\nbakership\nbakery\nbakeshop\nbakestone\nBakhtiari\nbakie\nbaking\nbakingly\nbakli\nBakongo\nBakshaish\nbaksheesh\nbaktun\nBaku\nbaku\nBakuba\nbakula\nBakunda\nBakuninism\nBakuninist\nbakupari\nBakutu\nBakwiri\nBal\nbal\nBala\nBalaam\nBalaamite\nBalaamitical\nbalachong\nbalaclava\nbaladine\nBalaena\nBalaenicipites\nbalaenid\nBalaenidae\nbalaenoid\nBalaenoidea\nbalaenoidean\nBalaenoptera\nBalaenopteridae\nbalafo\nbalagan\nbalaghat\nbalai\nBalaic\nBalak\nBalaklava\nbalalaika\nBalan\nbalance\nbalanceable\nbalanced\nbalancedness\nbalancelle\nbalanceman\nbalancement\nbalancer\nbalancewise\nbalancing\nbalander\nbalandra\nbalandrana\nbalaneutics\nbalangay\nbalanic\nbalanid\nBalanidae\nbalaniferous\nbalanism\nbalanite\nBalanites\nbalanitis\nbalanoblennorrhea\nbalanocele\nBalanoglossida\nBalanoglossus\nbalanoid\nBalanophora\nBalanophoraceae\nbalanophoraceous\nbalanophore\nbalanophorin\nbalanoplasty\nbalanoposthitis\nbalanopreputial\nBalanops\nBalanopsidaceae\nBalanopsidales\nbalanorrhagia\nBalanta\nBalante\nbalantidial\nbalantidiasis\nbalantidic\nbalantidiosis\nBalantidium\nBalanus\nBalao\nbalao\nBalarama\nbalas\nbalata\nbalatong\nbalatron\nbalatronic\nbalausta\nbalaustine\nbalaustre\nBalawa\nBalawu\nbalboa\nbalbriggan\nbalbutiate\nbalbutient\nbalbuties\nbalconet\nbalconied\nbalcony\nbald\nbaldachin\nbaldachined\nbaldachini\nbaldachino\nbaldberry\nbaldcrown\nbalden\nbalder\nbalderdash\nbaldhead\nbaldicoot\nBaldie\nbaldish\nbaldling\nbaldly\nbaldmoney\nbaldness\nbaldpate\nbaldrib\nbaldric\nbaldricked\nbaldricwise\nbalductum\nBaldwin\nbaldy\nbale\nBalearian\nBalearic\nBalearica\nbaleen\nbalefire\nbaleful\nbalefully\nbalefulness\nbalei\nbaleise\nbaleless\nbaler\nbalete\nBali\nbali\nbalibago\nBalija\nBalilla\nbaline\nBalinese\nbalinger\nbalinghasay\nbalisaur\nbalistarius\nBalistes\nbalistid\nBalistidae\nbalistraria\nbalita\nbalk\nBalkan\nBalkanic\nBalkanization\nBalkanize\nBalkar\nbalker\nbalkingly\nBalkis\nbalky\nball\nballad\nballade\nballadeer\nballader\nballaderoyal\nballadic\nballadical\nballadier\nballadism\nballadist\nballadize\nballadlike\nballadling\nballadmonger\nballadmongering\nballadry\nballadwise\nballahoo\nballam\nballan\nballant\nballast\nballastage\nballaster\nballasting\nballata\nballate\nballatoon\nballdom\nballed\nballer\nballerina\nballet\nballetic\nballetomane\nBallhausplatz\nballi\nballist\nballista\nballistae\nballistic\nballistically\nballistician\nballistics\nBallistite\nballistocardiograph\nballium\nballmine\nballogan\nballonet\nballoon\nballoonation\nballooner\nballoonery\nballoonet\nballoonfish\nballoonflower\nballoonful\nballooning\nballoonish\nballoonist\nballoonlike\nballot\nBallota\nballotade\nballotage\nballoter\nballoting\nballotist\nballottement\nballow\nBallplatz\nballplayer\nballproof\nballroom\nballstock\nballup\nballweed\nbally\nballyhack\nballyhoo\nballyhooer\nballywack\nballywrack\nbalm\nbalmacaan\nBalmarcodes\nBalmawhapple\nbalmily\nbalminess\nbalmlike\nbalmony\nBalmoral\nbalmy\nbalneal\nbalneary\nbalneation\nbalneatory\nbalneographer\nbalneography\nbalneologic\nbalneological\nbalneologist\nbalneology\nbalneophysiology\nbalneotechnics\nbalneotherapeutics\nbalneotherapia\nbalneotherapy\nBalnibarbi\nBaloch\nBaloghia\nBalolo\nbalonea\nbaloney\nbaloo\nBalopticon\nBalor\nBaloskion\nBaloskionaceae\nbalow\nbalsa\nbalsam\nbalsamation\nBalsamea\nBalsameaceae\nbalsameaceous\nbalsamer\nbalsamic\nbalsamical\nbalsamically\nbalsamiferous\nbalsamina\nBalsaminaceae\nbalsaminaceous\nbalsamine\nbalsamitic\nbalsamiticness\nbalsamize\nbalsamo\nBalsamodendron\nBalsamorrhiza\nbalsamous\nbalsamroot\nbalsamum\nbalsamweed\nbalsamy\nBalt\nbaltei\nbalter\nbalteus\nBalthasar\nBalti\nBaltic\nBaltimore\nBaltimorean\nbaltimorite\nBaltis\nbalu\nBaluba\nBaluch\nBaluchi\nBaluchistan\nbaluchithere\nbaluchitheria\nBaluchitherium\nbaluchitherium\nBaluga\nBalunda\nbalushai\nbaluster\nbalustered\nbalustrade\nbalustraded\nbalustrading\nbalut\nbalwarra\nbalza\nBalzacian\nbalzarine\nbam\nBamalip\nBamangwato\nbamban\nBambara\nbambini\nbambino\nbambocciade\nbamboo\nbamboozle\nbamboozlement\nbamboozler\nBambos\nbamboula\nBambuba\nBambusa\nBambuseae\nBambute\nbamoth\nBan\nban\nBana\nbanaba\nbanago\nbanak\nbanakite\nbanal\nbanality\nbanally\nbanana\nBananaland\nBananalander\nBanande\nbananist\nbananivorous\nbanat\nBanate\nbanatite\nbanausic\nBanba\nBanbury\nbanc\nbanca\nbancal\nbanchi\nbanco\nbancus\nband\nBanda\nbanda\nbandage\nbandager\nbandagist\nbandaite\nbandaka\nbandala\nbandalore\nbandanna\nbandannaed\nbandar\nbandarlog\nbandbox\nbandboxical\nbandboxy\nbandcase\nbandcutter\nbande\nbandeau\nbanded\nbandelet\nbander\nBanderma\nbanderole\nbandersnatch\nbandfish\nbandhava\nbandhook\nBandhor\nbandhu\nbandi\nbandicoot\nbandicoy\nbandie\nbandikai\nbandiness\nbanding\nbandit\nbanditism\nbanditry\nbanditti\nbandle\nbandless\nbandlessly\nbandlessness\nbandlet\nbandman\nbandmaster\nbando\nbandog\nbandoleer\nbandoleered\nbandoline\nbandonion\nBandor\nbandore\nbandrol\nbandsman\nbandstand\nbandster\nbandstring\nBandusia\nBandusian\nbandwork\nbandy\nbandyball\nbandyman\nbane\nbaneberry\nbaneful\nbanefully\nbanefulness\nbanewort\nBanff\nbang\nbanga\nBangala\nbangalay\nbangalow\nBangash\nbangboard\nbange\nbanger\nbanghy\nBangia\nBangiaceae\nbangiaceous\nBangiales\nbanging\nbangkok\nbangle\nbangled\nbangling\nbangster\nbangtail\nBangwaketsi\nbani\nbanian\nbanig\nbanilad\nbanish\nbanisher\nbanishment\nbanister\nBaniva\nbaniwa\nbaniya\nbanjo\nbanjoist\nbanjore\nbanjorine\nbanjuke\nbank\nbankable\nBankalachi\nbankbook\nbanked\nbanker\nbankera\nbankerdom\nbankeress\nbanket\nbankfull\nbanking\nbankman\nbankrider\nbankrupt\nbankruptcy\nbankruptism\nbankruptlike\nbankruptly\nbankruptship\nbankrupture\nbankshall\nBanksia\nBanksian\nbankside\nbanksman\nbankweed\nbanky\nbanner\nbannered\nbannerer\nbanneret\nbannerfish\nbannerless\nbannerlike\nbannerman\nbannerol\nbannerwise\nbannet\nbanning\nbannister\nBannock\nbannock\nBannockburn\nbanns\nbannut\nbanovina\nbanquet\nbanqueteer\nbanqueteering\nbanqueter\nbanquette\nbansalague\nbanshee\nbanstickle\nbant\nBantam\nbantam\nbantamize\nbantamweight\nbantay\nbantayan\nbanteng\nbanter\nbanterer\nbanteringly\nbantery\nBantingism\nbantingize\nbantling\nBantoid\nBantu\nbanty\nbanuyo\nbanxring\nbanya\nBanyai\nbanyan\nBanyoro\nBanyuls\nbanzai\nbaobab\nbap\nBaphia\nBaphomet\nBaphometic\nBaptanodon\nBaptisia\nbaptisin\nbaptism\nbaptismal\nbaptismally\nBaptist\nbaptistery\nbaptistic\nbaptizable\nbaptize\nbaptizee\nbaptizement\nbaptizer\nBaptornis\nbar\nbara\nbarabara\nbarabora\nBarabra\nBaraca\nbarad\nbaragnosis\nbaragouin\nbaragouinish\nBaraithas\nbarajillo\nBaralipton\nBaramika\nbarandos\nbarangay\nbarasingha\nbarathea\nbarathra\nbarathrum\nbarauna\nbarb\nBarbacoa\nBarbacoan\nbarbacou\nBarbadian\nBarbados\nbarbal\nbarbaloin\nBarbara\nbarbaralalia\nBarbarea\nbarbaresque\nBarbarian\nbarbarian\nbarbarianism\nbarbarianize\nbarbaric\nbarbarical\nbarbarically\nbarbarious\nbarbariousness\nbarbarism\nbarbarity\nbarbarization\nbarbarize\nbarbarous\nbarbarously\nbarbarousness\nBarbary\nbarbary\nbarbas\nbarbasco\nbarbastel\nbarbate\nbarbated\nbarbatimao\nbarbe\nbarbecue\nbarbed\nbarbeiro\nbarbel\nbarbellate\nbarbellula\nbarbellulate\nbarber\nbarberess\nbarberfish\nbarberish\nbarberry\nbarbershop\nbarbet\nbarbette\nBarbeyaceae\nbarbican\nbarbicel\nbarbigerous\nbarbion\nbarbital\nbarbitalism\nbarbiton\nbarbitone\nbarbitos\nbarbiturate\nbarbituric\nbarbless\nbarblet\nbarbone\nbarbotine\nBarbra\nbarbudo\nBarbula\nbarbulate\nbarbule\nbarbulyie\nbarbwire\nBarcan\nbarcarole\nbarcella\nbarcelona\nBarcoo\nbard\nbardane\nbardash\nbardcraft\nbardel\nBardesanism\nBardesanist\nBardesanite\nbardess\nbardic\nbardie\nbardiglio\nbardily\nbardiness\nbarding\nbardish\nbardism\nbardlet\nbardlike\nbardling\nbardo\nBardolater\nBardolatry\nBardolph\nBardolphian\nbardship\nBardulph\nbardy\nBare\nbare\nbareback\nbarebacked\nbareboat\nbarebone\nbareboned\nbareca\nbarefaced\nbarefacedly\nbarefacedness\nbarefit\nbarefoot\nbarefooted\nbarehanded\nbarehead\nbareheaded\nbareheadedness\nbarelegged\nbarely\nbarenecked\nbareness\nbarer\nbaresark\nbaresma\nbaretta\nbarff\nbarfish\nbarfly\nbarful\nbargain\nbargainee\nbargainer\nbargainor\nbargainwise\nbargander\nbarge\nbargeboard\nbargee\nbargeer\nbargeese\nbargehouse\nbargelike\nbargeload\nbargeman\nbargemaster\nbarger\nbargh\nbargham\nbarghest\nbargoose\nBari\nbari\nbaria\nbaric\nbarid\nbarie\nbarile\nbarilla\nbaring\nbaris\nbarish\nbarit\nbarite\nbaritone\nbarium\nbark\nbarkbound\nbarkcutter\nbarkeeper\nbarken\nbarkentine\nbarker\nbarkery\nbarkevikite\nbarkevikitic\nbarkey\nbarkhan\nbarking\nbarkingly\nBarkinji\nbarkle\nbarkless\nbarklyite\nbarkometer\nbarkpeel\nbarkpeeler\nbarkpeeling\nbarksome\nbarky\nbarlafumble\nbarlafummil\nbarless\nbarley\nbarleybird\nbarleybreak\nbarleycorn\nbarleyhood\nbarleymow\nbarleysick\nbarling\nbarlock\nbarlow\nbarm\nbarmaid\nbarman\nbarmaster\nbarmbrack\nbarmcloth\nBarmecidal\nBarmecide\nbarmkin\nbarmote\nbarmskin\nbarmy\nbarmybrained\nbarn\nBarnabas\nBarnabite\nBarnaby\nbarnacle\nBarnard\nbarnard\nbarnbrack\nBarnburner\nBarney\nbarney\nbarnful\nbarnhardtite\nbarnman\nbarnstorm\nbarnstormer\nbarnstorming\nBarnumism\nBarnumize\nbarny\nbarnyard\nBaroco\nbarocyclonometer\nbarodynamic\nbarodynamics\nbarognosis\nbarogram\nbarograph\nbarographic\nbaroi\nbarolo\nbarology\nBarolong\nbarometer\nbarometric\nbarometrical\nbarometrically\nbarometrograph\nbarometrography\nbarometry\nbarometz\nbaromotor\nbaron\nbaronage\nbaroness\nbaronet\nbaronetage\nbaronetcy\nbaronethood\nbaronetical\nbaronetship\nbarong\nBaronga\nbaronial\nbaronize\nbaronry\nbaronship\nbarony\nBaroque\nbaroque\nbaroscope\nbaroscopic\nbaroscopical\nBarosma\nbarosmin\nbarotactic\nbarotaxis\nbarotaxy\nbarothermograph\nbarothermohygrograph\nbaroto\nBarotse\nbarouche\nbarouchet\nBarouni\nbaroxyton\nbarpost\nbarquantine\nbarra\nbarrabkie\nbarrable\nbarrabora\nbarracan\nbarrack\nbarracker\nbarraclade\nbarracoon\nbarracouta\nbarracuda\nbarrad\nbarragan\nbarrage\nbarragon\nbarramunda\nbarramundi\nbarranca\nbarrandite\nbarras\nbarrator\nbarratrous\nbarratrously\nbarratry\nbarred\nbarrel\nbarrelage\nbarreled\nbarreler\nbarrelet\nbarrelful\nbarrelhead\nbarrelmaker\nbarrelmaking\nbarrelwise\nbarren\nbarrenly\nbarrenness\nbarrenwort\nbarrer\nbarret\nBarrett\nbarrette\nbarretter\nbarricade\nbarricader\nbarricado\nbarrico\nbarrier\nbarriguda\nbarrigudo\nbarrikin\nbarriness\nbarring\nBarrington\nBarringtonia\nBarrio\nbarrio\nbarrister\nbarristerial\nbarristership\nbarristress\nbarroom\nbarrow\nbarrowful\nBarrowist\nbarrowman\nbarrulee\nbarrulet\nbarrulety\nbarruly\nBarry\nbarry\nBarsac\nbarse\nbarsom\nBart\nbartender\nbartending\nbarter\nbarterer\nbarth\nbarthite\nbartholinitis\nBartholomean\nBartholomew\nBartholomewtide\nBartholomite\nbartizan\nbartizaned\nBartlemy\nBartlett\nBarton\nbarton\nBartonella\nBartonia\nBartram\nBartramia\nBartramiaceae\nBartramian\nBartsia\nbaru\nBaruch\nBarundi\nbaruria\nbarvel\nbarwal\nbarway\nbarways\nbarwise\nbarwood\nbarycenter\nbarycentric\nbarye\nbaryecoia\nbaryglossia\nbarylalia\nbarylite\nbaryphonia\nbaryphonic\nbaryphony\nbarysilite\nbarysphere\nbaryta\nbarytes\nbarythymia\nbarytic\nbarytine\nbarytocalcite\nbarytocelestine\nbarytocelestite\nbaryton\nbarytone\nbarytophyllite\nbarytostrontianite\nbarytosulphate\nbas\nbasal\nbasale\nbasalia\nbasally\nbasalt\nbasaltes\nbasaltic\nbasaltiform\nbasaltine\nbasaltoid\nbasanite\nbasaree\nBascology\nbascule\nbase\nbaseball\nbaseballdom\nbaseballer\nbaseboard\nbaseborn\nbasebred\nbased\nbasehearted\nbaseheartedness\nbaselard\nbaseless\nbaselessly\nbaselessness\nbaselike\nbaseliner\nBasella\nBasellaceae\nbasellaceous\nbasely\nbaseman\nbasement\nbasementward\nbaseness\nbasenji\nbases\nbash\nbashaw\nbashawdom\nbashawism\nbashawship\nbashful\nbashfully\nbashfulness\nBashilange\nBashkir\nbashlyk\nBashmuric\nbasial\nbasialveolar\nbasiarachnitis\nbasiarachnoiditis\nbasiate\nbasiation\nBasibracteolate\nbasibranchial\nbasibranchiate\nbasibregmatic\nbasic\nbasically\nbasichromatic\nbasichromatin\nbasichromatinic\nbasichromiole\nbasicity\nbasicranial\nbasicytoparaplastin\nbasidia\nbasidial\nbasidigital\nbasidigitale\nbasidiogenetic\nbasidiolichen\nBasidiolichenes\nbasidiomycete\nBasidiomycetes\nbasidiomycetous\nbasidiophore\nbasidiospore\nbasidiosporous\nbasidium\nbasidorsal\nbasifacial\nbasification\nbasifier\nbasifixed\nbasifugal\nbasify\nbasigamous\nbasigamy\nbasigenic\nbasigenous\nbasiglandular\nbasigynium\nbasihyal\nbasihyoid\nBasil\nbasil\nbasilar\nBasilarchia\nbasilary\nbasilateral\nbasilemma\nbasileus\nBasilian\nbasilic\nBasilica\nbasilica\nBasilicae\nbasilical\nbasilican\nbasilicate\nbasilicon\nBasilics\nBasilidian\nBasilidianism\nbasilinna\nbasiliscan\nbasiliscine\nBasiliscus\nbasilisk\nbasilissa\nBasilosauridae\nBasilosaurus\nbasilweed\nbasilysis\nbasilyst\nbasimesostasis\nbasin\nbasinasal\nbasinasial\nbasined\nbasinerved\nbasinet\nbasinlike\nbasioccipital\nbasion\nbasiophitic\nbasiophthalmite\nbasiophthalmous\nbasiotribe\nbasiotripsy\nbasiparachromatin\nbasiparaplastin\nbasipetal\nbasiphobia\nbasipodite\nbasipoditic\nbasipterygial\nbasipterygium\nbasipterygoid\nbasiradial\nbasirhinal\nbasirostral\nbasis\nbasiscopic\nbasisphenoid\nbasisphenoidal\nbasitemporal\nbasiventral\nbasivertebral\nbask\nbasker\nBaskerville\nbasket\nbasketball\nbasketballer\nbasketful\nbasketing\nbasketmaker\nbasketmaking\nbasketry\nbasketware\nbasketwoman\nbasketwood\nbasketwork\nbasketworm\nBaskish\nBaskonize\nBasoche\nBasoga\nbasoid\nBasoko\nBasommatophora\nbasommatophorous\nbason\nBasongo\nbasophile\nbasophilia\nbasophilic\nbasophilous\nbasophobia\nbasos\nbasote\nBasque\nbasque\nbasqued\nbasquine\nbass\nBassa\nBassalia\nBassalian\nbassan\nbassanello\nbassanite\nbassara\nbassarid\nBassaris\nBassariscus\nbassarisk\nbasset\nbassetite\nbassetta\nBassia\nbassie\nbassine\nbassinet\nbassist\nbassness\nbasso\nbassoon\nbassoonist\nbassorin\nbassus\nbasswood\nBast\nbast\nbasta\nBastaard\nBastard\nbastard\nbastardism\nbastardization\nbastardize\nbastardliness\nbastardly\nbastardy\nbaste\nbasten\nbaster\nbastide\nbastille\nbastinade\nbastinado\nbasting\nbastion\nbastionary\nbastioned\nbastionet\nbastite\nbastnasite\nbasto\nbaston\nbasurale\nBasuto\nBat\nbat\nbataan\nbatad\nBatak\nbatakan\nbataleur\nBatan\nbatara\nbatata\nBatatas\nbatatilla\nBatavi\nBatavian\nbatch\nbatcher\nbate\nbatea\nbateau\nbateaux\nbated\nBatekes\nbatel\nbateman\nbatement\nbater\nBatetela\nbatfish\nbatfowl\nbatfowler\nbatfowling\nBath\nbath\nBathala\nbathe\nbatheable\nbather\nbathetic\nbathflower\nbathhouse\nbathic\nbathing\nbathless\nbathman\nbathmic\nbathmism\nbathmotropic\nbathmotropism\nbathochromatic\nbathochromatism\nbathochrome\nbathochromic\nbathochromy\nbathoflore\nbathofloric\nbatholite\nbatholith\nbatholithic\nbatholitic\nbathometer\nBathonian\nbathophobia\nbathorse\nbathos\nbathrobe\nbathroom\nbathroomed\nbathroot\nbathtub\nbathukolpian\nbathukolpic\nbathvillite\nbathwort\nbathyal\nbathyanesthesia\nbathybian\nbathybic\nbathybius\nbathycentesis\nbathychrome\nbathycolpian\nbathycolpic\nbathycurrent\nbathyesthesia\nbathygraphic\nbathyhyperesthesia\nbathyhypesthesia\nbathylimnetic\nbathylite\nbathylith\nbathylithic\nbathylitic\nbathymeter\nbathymetric\nbathymetrical\nbathymetrically\nbathymetry\nbathyorographical\nbathypelagic\nbathyplankton\nbathyseism\nbathysmal\nbathysophic\nbathysophical\nbathysphere\nbathythermograph\nBatidaceae\nbatidaceous\nbatik\nbatiker\nbatikulin\nbatikuling\nbating\nbatino\nBatis\nbatiste\nbatitinan\nbatlan\nbatlike\nbatling\nbatlon\nbatman\nBatocrinidae\nBatocrinus\nBatodendron\nbatoid\nBatoidei\nBatoka\nbaton\nBatonga\nbatonistic\nbatonne\nbatophobia\nBatrachia\nbatrachian\nbatrachiate\nBatrachidae\nBatrachium\nbatrachoid\nBatrachoididae\nbatrachophagous\nBatrachophidia\nbatrachophobia\nbatrachoplasty\nBatrachospermum\nbats\nbatsman\nbatsmanship\nbatster\nbatswing\nbatt\nBatta\nbatta\nbattailous\nBattak\nBattakhin\nbattalia\nbattalion\nbattarism\nbattarismus\nbattel\nbatteler\nbatten\nbattener\nbattening\nbatter\nbatterable\nbattercake\nbatterdock\nbattered\nbatterer\nbatterfang\nbatteried\nbatterman\nbattery\nbatteryman\nbattik\nbatting\nbattish\nbattle\nbattled\nbattledore\nbattlefield\nbattleful\nbattleground\nbattlement\nbattlemented\nbattleplane\nbattler\nbattleship\nbattlesome\nbattlestead\nbattlewagon\nbattleward\nbattlewise\nbattological\nbattologist\nbattologize\nbattology\nbattue\nbatty\nbatukite\nbatule\nBatussi\nBatwa\nbatwing\nbatyphone\nbatz\nbatzen\nbauble\nbaublery\nbaubling\nBaubo\nbauch\nbauchle\nbauckie\nbauckiebird\nbaud\nbaudekin\nbaudrons\nBauera\nBauhinia\nbaul\nbauleah\nBaume\nbaumhauerite\nbaun\nbauno\nBaure\nbauson\nbausond\nbauta\nbauxite\nbauxitite\nBavarian\nbavaroy\nbavary\nbavenite\nbaviaantje\nBavian\nbavian\nbaviere\nbavin\nBavius\nbavoso\nbaw\nbawarchi\nbawbee\nbawcock\nbawd\nbawdily\nbawdiness\nbawdry\nbawdship\nbawdyhouse\nbawl\nbawler\nbawley\nbawn\nBawra\nbawtie\nbaxter\nBaxterian\nBaxterianism\nbaxtone\nbay\nBaya\nbaya\nbayadere\nbayal\nbayamo\nBayard\nbayard\nbayardly\nbayberry\nbaybolt\nbaybush\nbaycuru\nbayed\nbayeta\nbaygall\nbayhead\nbayish\nbayldonite\nbaylet\nbaylike\nbayman\nbayness\nBayogoula\nbayok\nbayonet\nbayoneted\nbayoneteer\nbayou\nbaywood\nbazaar\nbaze\nBazigar\nbazoo\nbazooka\nbazzite\nbdellid\nBdellidae\nbdellium\nbdelloid\nBdelloida\nBdellostoma\nBdellostomatidae\nBdellostomidae\nbdellotomy\nBdelloura\nBdellouridae\nbe\nBea\nbeach\nbeachcomb\nbeachcomber\nbeachcombing\nbeached\nbeachhead\nbeachlamar\nbeachless\nbeachman\nbeachmaster\nbeachward\nbeachy\nbeacon\nbeaconage\nbeaconless\nbeaconwise\nbead\nbeaded\nbeader\nbeadflush\nbeadhouse\nbeadily\nbeadiness\nbeading\nbeadle\nbeadledom\nbeadlehood\nbeadleism\nbeadlery\nbeadleship\nbeadlet\nbeadlike\nbeadman\nbeadroll\nbeadrow\nbeadsman\nbeadswoman\nbeadwork\nbeady\nBeagle\nbeagle\nbeagling\nbeak\nbeaked\nbeaker\nbeakerful\nbeakerman\nbeakermen\nbeakful\nbeakhead\nbeakiron\nbeaklike\nbeaky\nbeal\nbeala\nbealing\nbeallach\nbealtared\nBealtine\nBealtuinn\nbeam\nbeamage\nbeambird\nbeamed\nbeamer\nbeamfilling\nbeamful\nbeamhouse\nbeamily\nbeaminess\nbeaming\nbeamingly\nbeamish\nbeamless\nbeamlet\nbeamlike\nbeamman\nbeamsman\nbeamster\nbeamwork\nbeamy\nbean\nbeanbag\nbeanbags\nbeancod\nbeanery\nbeanfeast\nbeanfeaster\nbeanfield\nbeanie\nbeano\nbeansetter\nbeanshooter\nbeanstalk\nbeant\nbeanweed\nbeany\nbeaproned\nbear\nbearable\nbearableness\nbearably\nbearance\nbearbaiter\nbearbaiting\nbearbane\nbearberry\nbearbind\nbearbine\nbearcoot\nbeard\nbearded\nbearder\nbeardie\nbearding\nbeardless\nbeardlessness\nbeardom\nbeardtongue\nbeardy\nbearer\nbearess\nbearfoot\nbearherd\nbearhide\nbearhound\nbearing\nbearish\nbearishly\nbearishness\nbearlet\nbearlike\nbearm\nbearship\nbearskin\nbeartongue\nbearward\nbearwood\nbearwort\nbeast\nbeastbane\nbeastdom\nbeasthood\nbeastie\nbeastily\nbeastish\nbeastishness\nbeastlike\nbeastlily\nbeastliness\nbeastling\nbeastlings\nbeastly\nbeastman\nbeastship\nbeat\nBeata\nbeata\nbeatable\nbeatae\nbeatee\nbeaten\nbeater\nbeaterman\nbeath\nbeatific\nbeatifical\nbeatifically\nbeatificate\nbeatification\nbeatify\nbeatinest\nbeating\nbeatitude\nBeatrice\nBeatrix\nbeatster\nbeatus\nbeau\nBeauclerc\nbeaufin\nBeaufort\nbeauish\nbeauism\nBeaujolais\nBeaumontia\nBeaune\nbeaupere\nbeauseant\nbeauship\nbeauteous\nbeauteously\nbeauteousness\nbeauti\nbeautician\nbeautied\nbeautification\nbeautifier\nbeautiful\nbeautifully\nbeautifulness\nbeautify\nbeautihood\nbeauty\nbeautydom\nbeautyship\nbeaux\nbeaver\nBeaverboard\nbeaverboard\nbeavered\nbeaverette\nbeaverish\nbeaverism\nbeaverite\nbeaverize\nBeaverkill\nbeaverkin\nbeaverlike\nbeaverpelt\nbeaverroot\nbeaverteen\nbeaverwood\nbeavery\nbeback\nbebait\nbeballed\nbebang\nbebannered\nbebar\nbebaron\nbebaste\nbebat\nbebathe\nbebatter\nbebay\nbebeast\nbebed\nbebeerine\nbebeeru\nbebelted\nbebilya\nbebite\nbebization\nbeblain\nbeblear\nbebled\nbebless\nbeblister\nbeblood\nbebloom\nbeblotch\nbeblubber\nbebog\nbebop\nbeboss\nbebotch\nbebothered\nbebouldered\nbebrave\nbebreech\nbebrine\nbebrother\nbebrush\nbebump\nbebusy\nbebuttoned\nbecall\nbecalm\nbecalmment\nbecap\nbecard\nbecarpet\nbecarve\nbecassocked\nbecater\nbecause\nbeccafico\nbecense\nbechained\nbechalk\nbechance\nbecharm\nbechase\nbechatter\nbechauffeur\nbecheck\nbecher\nbechern\nbechignoned\nbechirp\nBechtler\nBechuana\nbecircled\nbecivet\nBeck\nbeck\nbeckelite\nbecker\nbecket\nBeckie\nbeckiron\nbeckon\nbeckoner\nbeckoning\nbeckoningly\nBecky\nbeclad\nbeclamor\nbeclamour\nbeclang\nbeclart\nbeclasp\nbeclatter\nbeclaw\nbecloak\nbeclog\nbeclothe\nbecloud\nbeclout\nbeclown\nbecluster\nbecobweb\nbecoiffed\nbecollier\nbecolme\nbecolor\nbecombed\nbecome\nbecomes\nbecoming\nbecomingly\nbecomingness\nbecomma\nbecompass\nbecompliment\nbecoom\nbecoresh\nbecost\nbecousined\nbecovet\nbecoward\nbecquerelite\nbecram\nbecramp\nbecrampon\nbecrawl\nbecreep\nbecrime\nbecrimson\nbecrinolined\nbecripple\nbecroak\nbecross\nbecrowd\nbecrown\nbecrush\nbecrust\nbecry\nbecudgel\nbecuffed\nbecuiba\nbecumber\nbecuna\nbecurl\nbecurry\nbecurse\nbecurtained\nbecushioned\nbecut\nbed\nbedabble\nbedad\nbedaggered\nbedamn\nbedamp\nbedangled\nbedare\nbedark\nbedarken\nbedash\nbedaub\nbedawn\nbeday\nbedaze\nbedazement\nbedazzle\nbedazzlement\nbedazzling\nbedazzlingly\nbedboard\nbedbug\nbedcap\nbedcase\nbedchair\nbedchamber\nbedclothes\nbedcord\nbedcover\nbedded\nbedder\nbedding\nbedead\nbedeaf\nbedeafen\nbedebt\nbedeck\nbedecorate\nbedeguar\nbedel\nbeden\nbedene\nbedesman\nbedevil\nbedevilment\nbedew\nbedewer\nbedewoman\nbedfast\nbedfellow\nbedfellowship\nbedflower\nbedfoot\nBedford\nbedframe\nbedgery\nbedgoer\nbedgown\nbediademed\nbediamonded\nbediaper\nbedight\nbedikah\nbedim\nbedimple\nbedin\nbedip\nbedirt\nbedirter\nbedirty\nbedismal\nbedizen\nbedizenment\nbedkey\nbedlam\nbedlamer\nBedlamic\nbedlamism\nbedlamite\nbedlamitish\nbedlamize\nbedlar\nbedless\nbedlids\nbedmaker\nbedmaking\nbedman\nbedmate\nbedoctor\nbedog\nbedolt\nbedot\nbedote\nBedouin\nBedouinism\nbedouse\nbedown\nbedoyo\nbedpan\nbedplate\nbedpost\nbedquilt\nbedrabble\nbedraggle\nbedragglement\nbedrail\nbedral\nbedrape\nbedravel\nbedrench\nbedress\nbedribble\nbedrid\nbedridden\nbedriddenness\nbedrift\nbedright\nbedrip\nbedrivel\nbedrizzle\nbedrock\nbedroll\nbedroom\nbedrop\nbedrown\nbedrowse\nbedrug\nbedscrew\nbedsick\nbedside\nbedsite\nbedsock\nbedsore\nbedspread\nbedspring\nbedstaff\nbedstand\nbedstaves\nbedstead\nbedstock\nbedstraw\nbedstring\nbedtick\nbedticking\nbedtime\nbedub\nbeduchess\nbeduck\nbeduke\nbedull\nbedumb\nbedunce\nbedunch\nbedung\nbedur\nbedusk\nbedust\nbedwarf\nbedway\nbedways\nbedwell\nbedye\nBee\nbee\nbeearn\nbeebread\nbeech\nbeechdrops\nbeechen\nbeechnut\nbeechwood\nbeechwoods\nbeechy\nbeedged\nbeedom\nbeef\nbeefeater\nbeefer\nbeefhead\nbeefheaded\nbeefily\nbeefin\nbeefiness\nbeefish\nbeefishness\nbeefless\nbeeflower\nbeefsteak\nbeeftongue\nbeefwood\nbeefy\nbeegerite\nbeehead\nbeeheaded\nbeeherd\nbeehive\nbeehouse\nbeeish\nbeeishness\nbeek\nbeekeeper\nbeekeeping\nbeekite\nBeekmantown\nbeelbow\nbeelike\nbeeline\nbeelol\nBeelzebub\nBeelzebubian\nBeelzebul\nbeeman\nbeemaster\nbeen\nbeennut\nbeer\nbeerage\nbeerbachite\nbeerbibber\nbeerhouse\nbeerily\nbeeriness\nbeerish\nbeerishly\nbeermaker\nbeermaking\nbeermonger\nbeerocracy\nBeerothite\nbeerpull\nbeery\nbees\nbeest\nbeestings\nbeeswax\nbeeswing\nbeeswinged\nbeet\nbeeth\nBeethovenian\nBeethovenish\nBeethovian\nbeetle\nbeetled\nbeetlehead\nbeetleheaded\nbeetler\nbeetlestock\nbeetlestone\nbeetleweed\nbeetmister\nbeetrave\nbeetroot\nbeetrooty\nbeety\nbeeve\nbeevish\nbeeware\nbeeway\nbeeweed\nbeewise\nbeewort\nbefall\nbefame\nbefamilied\nbefamine\nbefan\nbefancy\nbefanned\nbefathered\nbefavor\nbefavour\nbefeather\nbeferned\nbefetished\nbefetter\nbefezzed\nbefiddle\nbefilch\nbefile\nbefilleted\nbefilmed\nbefilth\nbefinger\nbefire\nbefist\nbefit\nbefitting\nbefittingly\nbefittingness\nbeflag\nbeflannel\nbeflap\nbeflatter\nbeflea\nbefleck\nbeflounce\nbeflour\nbeflout\nbeflower\nbeflum\nbefluster\nbefoam\nbefog\nbefool\nbefoolment\nbefop\nbefore\nbeforehand\nbeforeness\nbeforested\nbeforetime\nbeforetimes\nbefortune\nbefoul\nbefouler\nbefoulment\nbefountained\nbefraught\nbefreckle\nbefreeze\nbefreight\nbefret\nbefriend\nbefriender\nbefriendment\nbefrill\nbefringe\nbefriz\nbefrocked\nbefrogged\nbefrounce\nbefrumple\nbefuddle\nbefuddlement\nbefuddler\nbefume\nbefurbelowed\nbefurred\nbeg\nbegabled\nbegad\nbegall\nbegani\nbegar\nbegari\nbegarlanded\nbegarnish\nbegartered\nbegash\nbegat\nbegaud\nbegaudy\nbegay\nbegaze\nbegeck\nbegem\nbeget\nbegettal\nbegetter\nbeggable\nbeggar\nbeggardom\nbeggarer\nbeggaress\nbeggarhood\nbeggarism\nbeggarlike\nbeggarliness\nbeggarly\nbeggarman\nbeggarweed\nbeggarwise\nbeggarwoman\nbeggary\nBeggiatoa\nBeggiatoaceae\nbeggiatoaceous\nbegging\nbeggingly\nbeggingwise\nBeghard\nbegift\nbegiggle\nbegild\nbegin\nbeginger\nbeginner\nbeginning\nbegird\nbegirdle\nbeglad\nbeglamour\nbeglare\nbeglerbeg\nbeglerbeglic\nbeglerbegluc\nbeglerbegship\nbeglerbey\nbeglic\nbeglide\nbeglitter\nbeglobed\nbegloom\nbegloze\nbegluc\nbeglue\nbegnaw\nbego\nbegob\nbegobs\nbegoggled\nbegohm\nbegone\nbegonia\nBegoniaceae\nbegoniaceous\nBegoniales\nbegorra\nbegorry\nbegotten\nbegottenness\nbegoud\nbegowk\nbegowned\nbegrace\nbegrain\nbegrave\nbegray\nbegrease\nbegreen\nbegrett\nbegrim\nbegrime\nbegrimer\nbegroan\nbegrown\nbegrudge\nbegrudgingly\nbegruntle\nbegrutch\nbegrutten\nbeguard\nbeguess\nbeguile\nbeguileful\nbeguilement\nbeguiler\nbeguiling\nbeguilingly\nBeguin\nBeguine\nbeguine\nbegulf\nbegum\nbegun\nbegunk\nbegut\nbehale\nbehalf\nbehallow\nbehammer\nbehap\nbehatted\nbehave\nbehavior\nbehavioral\nbehaviored\nbehaviorism\nbehaviorist\nbehavioristic\nbehavioristically\nbehead\nbeheadal\nbeheader\nbeheadlined\nbehear\nbehears\nbehearse\nbehedge\nbeheld\nbehelp\nbehemoth\nbehen\nbehenate\nbehenic\nbehest\nbehind\nbehinder\nbehindhand\nbehindsight\nbehint\nbehn\nbehold\nbeholdable\nbeholden\nbeholder\nbeholding\nbeholdingness\nbehoney\nbehoof\nbehooped\nbehoot\nbehoove\nbehooveful\nbehoovefully\nbehoovefulness\nbehooves\nbehooving\nbehoovingly\nbehorn\nbehorror\nbehowl\nbehung\nbehusband\nbehymn\nbehypocrite\nbeice\nBeid\nbeige\nbeing\nbeingless\nbeingness\nbeinked\nbeira\nbeisa\nBeja\nbejabers\nbejade\nbejan\nbejant\nbejaundice\nbejazz\nbejel\nbejewel\nbejezebel\nbejig\nbejuggle\nbejumble\nbekah\nbekerchief\nbekick\nbekilted\nbeking\nbekinkinite\nbekiss\nbekko\nbeknave\nbeknight\nbeknit\nbeknived\nbeknotted\nbeknottedly\nbeknottedness\nbeknow\nbeknown\nBel\nbel\nbela\nbelabor\nbelaced\nbeladle\nbelady\nbelage\nbelah\nBelait\nBelaites\nbelam\nBelamcanda\nbelanda\nbelar\nbelard\nbelash\nbelate\nbelated\nbelatedly\nbelatedness\nbelatticed\nbelaud\nbelauder\nbelavendered\nbelay\nbelayer\nbelch\nbelcher\nbeld\nbeldam\nbeldamship\nbelderroot\nbelduque\nbeleaf\nbeleaguer\nbeleaguerer\nbeleaguerment\nbeleap\nbeleave\nbelecture\nbeledgered\nbelee\nbelemnid\nbelemnite\nBelemnites\nbelemnitic\nBelemnitidae\nbelemnoid\nBelemnoidea\nbeletter\nbelfried\nbelfry\nbelga\nBelgae\nBelgian\nBelgic\nBelgophile\nBelgrade\nBelgravia\nBelgravian\nBelial\nBelialic\nBelialist\nbelibel\nbelick\nbelie\nbelief\nbeliefful\nbelieffulness\nbeliefless\nbelier\nbelievability\nbelievable\nbelievableness\nbelieve\nbeliever\nbelieving\nbelievingly\nbelight\nbeliked\nBelili\nbelimousined\nBelinda\nBelinuridae\nBelinurus\nbelion\nbeliquor\nBelis\nbelite\nbelitter\nbelittle\nbelittlement\nbelittler\nbelive\nbell\nBella\nBellabella\nBellacoola\nbelladonna\nbellarmine\nBellatrix\nbellbind\nbellbird\nbellbottle\nbellboy\nbelle\nbelled\nbelledom\nBelleek\nbellehood\nbelleric\nBellerophon\nBellerophontidae\nbelletrist\nbelletristic\nbellflower\nbellhanger\nbellhanging\nbellhop\nbellhouse\nbellicism\nbellicose\nbellicosely\nbellicoseness\nbellicosity\nbellied\nbelliferous\nbelligerence\nbelligerency\nbelligerent\nbelligerently\nbelling\nbellipotent\nBellis\nbellite\nbellmaker\nbellmaking\nbellman\nbellmanship\nbellmaster\nbellmouth\nbellmouthed\nBellona\nBellonian\nbellonion\nbellote\nBellovaci\nbellow\nbellower\nbellows\nbellowsful\nbellowslike\nbellowsmaker\nbellowsmaking\nbellowsman\nbellpull\nbelltail\nbelltopper\nbelltopperdom\nbellware\nbellwaver\nbellweed\nbellwether\nbellwind\nbellwine\nbellwood\nbellwort\nbelly\nbellyache\nbellyband\nbellyer\nbellyfish\nbellyflaught\nbellyful\nbellying\nbellyland\nbellylike\nbellyman\nbellypiece\nbellypinch\nbeloam\nbeloeilite\nbeloid\nbelomancy\nBelone\nbelonesite\nbelong\nbelonger\nbelonging\nbelonid\nBelonidae\nbelonite\nbelonoid\nbelonosphaerite\nbelord\nBelostoma\nBelostomatidae\nBelostomidae\nbelout\nbelove\nbeloved\nbelow\nbelowstairs\nbelozenged\nBelshazzar\nBelshazzaresque\nbelsire\nbelt\nBeltane\nbelted\nBeltene\nbelter\nBeltian\nbeltie\nbeltine\nbelting\nBeltir\nBeltis\nbeltmaker\nbeltmaking\nbeltman\nbelton\nbeltwise\nBeluchi\nBelucki\nbeluga\nbelugite\nbelute\nbelve\nbelvedere\nBelverdian\nbely\nbelying\nbelyingly\nbelzebuth\nbema\nbemad\nbemadam\nbemaddening\nbemail\nbemaim\nbemajesty\nbeman\nbemangle\nbemantle\nbemar\nbemartyr\nbemask\nbemaster\nbemat\nbemata\nbemaul\nbemazed\nBemba\nBembecidae\nBembex\nbemeal\nbemean\nbemedaled\nbemedalled\nbementite\nbemercy\nbemingle\nbeminstrel\nbemire\nbemirement\nbemirror\nbemirrorment\nbemist\nbemistress\nbemitered\nbemitred\nbemix\nbemoan\nbemoanable\nbemoaner\nbemoaning\nbemoaningly\nbemoat\nbemock\nbemoil\nbemoisten\nbemole\nbemolt\nbemonster\nbemoon\nbemotto\nbemoult\nbemouth\nbemuck\nbemud\nbemuddle\nbemuddlement\nbemuddy\nbemuffle\nbemurmur\nbemuse\nbemused\nbemusedly\nbemusement\nbemusk\nbemuslined\nbemuzzle\nBen\nben\nbena\nbenab\nBenacus\nbename\nbenami\nbenamidar\nbenasty\nbenben\nbench\nbenchboard\nbencher\nbenchership\nbenchfellow\nbenchful\nbenching\nbenchland\nbenchlet\nbenchman\nbenchwork\nbenchy\nbencite\nbend\nbenda\nbendability\nbendable\nbended\nbender\nbending\nbendingly\nbendlet\nbendsome\nbendwise\nbendy\nbene\nbeneaped\nbeneath\nbeneception\nbeneceptive\nbeneceptor\nbenedicite\nBenedict\nbenedict\nBenedicta\nBenedictine\nBenedictinism\nbenediction\nbenedictional\nbenedictionary\nbenedictive\nbenedictively\nbenedictory\nBenedictus\nbenedight\nbenefaction\nbenefactive\nbenefactor\nbenefactorship\nbenefactory\nbenefactress\nbenefic\nbenefice\nbeneficed\nbeneficeless\nbeneficence\nbeneficent\nbeneficential\nbeneficently\nbeneficial\nbeneficially\nbeneficialness\nbeneficiary\nbeneficiaryship\nbeneficiate\nbeneficiation\nbenefit\nbenefiter\nbeneighbored\nBenelux\nbenempt\nbenempted\nbeneplacito\nbenet\nBenetnasch\nbenettle\nBeneventan\nBeneventana\nbenevolence\nbenevolent\nbenevolently\nbenevolentness\nbenevolist\nbeng\nBengal\nBengalese\nBengali\nBengalic\nbengaline\nBengola\nBeni\nbeni\nbenight\nbenighted\nbenightedness\nbenighten\nbenighter\nbenightmare\nbenightment\nbenign\nbenignancy\nbenignant\nbenignantly\nbenignity\nbenignly\nBenin\nBenincasa\nbenison\nbenitoite\nbenj\nBenjamin\nbenjamin\nbenjaminite\nBenjamite\nBenjy\nbenjy\nBenkulen\nbenmost\nbenn\nbenne\nbennel\nBennet\nbennet\nBennettitaceae\nbennettitaceous\nBennettitales\nBennettites\nbennetweed\nBenny\nbenny\nbeno\nbenorth\nbenote\nbensel\nbensh\nbenshea\nbenshee\nbenshi\nBenson\nbent\nbentang\nbenthal\nBenthamic\nBenthamism\nBenthamite\nbenthic\nbenthon\nbenthonic\nbenthos\nBentincks\nbentiness\nbenting\nBenton\nbentonite\nbentstar\nbentwood\nbenty\nBenu\nbenumb\nbenumbed\nbenumbedness\nbenumbing\nbenumbingly\nbenumbment\nbenward\nbenweed\nbenzacridine\nbenzal\nbenzalacetone\nbenzalacetophenone\nbenzalaniline\nbenzalazine\nbenzalcohol\nbenzalcyanhydrin\nbenzaldehyde\nbenzaldiphenyl\nbenzaldoxime\nbenzalethylamine\nbenzalhydrazine\nbenzalphenylhydrazone\nbenzalphthalide\nbenzamide\nbenzamido\nbenzamine\nbenzaminic\nbenzamino\nbenzanalgen\nbenzanilide\nbenzanthrone\nbenzantialdoxime\nbenzazide\nbenzazimide\nbenzazine\nbenzazole\nbenzbitriazole\nbenzdiazine\nbenzdifuran\nbenzdioxazine\nbenzdioxdiazine\nbenzdioxtriazine\nBenzedrine\nbenzein\nbenzene\nbenzenediazonium\nbenzenoid\nbenzenyl\nbenzhydrol\nbenzhydroxamic\nbenzidine\nbenzidino\nbenzil\nbenzilic\nbenzimidazole\nbenziminazole\nbenzinduline\nbenzine\nbenzo\nbenzoate\nbenzoated\nbenzoazurine\nbenzobis\nbenzocaine\nbenzocoumaran\nbenzodiazine\nbenzodiazole\nbenzoflavine\nbenzofluorene\nbenzofulvene\nbenzofuran\nbenzofuroquinoxaline\nbenzofuryl\nbenzoglycolic\nbenzoglyoxaline\nbenzohydrol\nbenzoic\nbenzoid\nbenzoin\nbenzoinated\nbenzoiodohydrin\nbenzol\nbenzolate\nbenzole\nbenzolize\nbenzomorpholine\nbenzonaphthol\nbenzonitrile\nbenzonitrol\nbenzoperoxide\nbenzophenanthrazine\nbenzophenanthroline\nbenzophenazine\nbenzophenol\nbenzophenone\nbenzophenothiazine\nbenzophenoxazine\nbenzophloroglucinol\nbenzophosphinic\nbenzophthalazine\nbenzopinacone\nbenzopyran\nbenzopyranyl\nbenzopyrazolone\nbenzopyrylium\nbenzoquinoline\nbenzoquinone\nbenzoquinoxaline\nbenzosulphimide\nbenzotetrazine\nbenzotetrazole\nbenzothiazine\nbenzothiazole\nbenzothiazoline\nbenzothiodiazole\nbenzothiofuran\nbenzothiophene\nbenzothiopyran\nbenzotoluide\nbenzotriazine\nbenzotriazole\nbenzotrichloride\nbenzotrifuran\nbenzoxate\nbenzoxy\nbenzoxyacetic\nbenzoxycamphor\nbenzoxyphenanthrene\nbenzoyl\nbenzoylate\nbenzoylation\nbenzoylformic\nbenzoylglycine\nbenzpinacone\nbenzthiophen\nbenztrioxazine\nbenzyl\nbenzylamine\nbenzylic\nbenzylidene\nbenzylpenicillin\nbeode\nBeothuk\nBeothukan\nBeowulf\nbepaid\nBepaint\nbepale\nbepaper\nbeparch\nbeparody\nbeparse\nbepart\nbepaste\nbepastured\nbepat\nbepatched\nbepaw\nbepearl\nbepelt\nbepen\nbepepper\nbeperiwigged\nbepester\nbepewed\nbephilter\nbephrase\nbepicture\nbepiece\nbepierce\nbepile\nbepill\nbepillared\nbepimple\nbepinch\nbepistoled\nbepity\nbeplague\nbeplaided\nbeplaster\nbeplumed\nbepommel\nbepowder\nbepraise\nbepraisement\nbepraiser\nbeprank\nbepray\nbepreach\nbepress\nbepretty\nbepride\nbeprose\nbepuddle\nbepuff\nbepun\nbepurple\nbepuzzle\nbepuzzlement\nbequalm\nbequeath\nbequeathable\nbequeathal\nbequeather\nbequeathment\nbequest\nbequirtle\nbequote\nber\nberain\nberairou\nberakah\nberake\nberakoth\nberapt\nberascal\nberat\nberate\nberattle\nberaunite\nberay\nberbamine\nBerber\nBerberi\nBerberian\nberberid\nBerberidaceae\nberberidaceous\nberberine\nBerberis\nberberry\nBerchemia\nBerchta\nberdache\nbere\nBerean\nbereason\nbereave\nbereavement\nbereaven\nbereaver\nbereft\nberend\nBerengaria\nBerengarian\nBerengarianism\nberengelite\nBerenice\nBereshith\nberesite\nberet\nberewick\nberg\nbergalith\nBergama\nBergamask\nbergamiol\nBergamo\nBergamot\nbergamot\nbergander\nbergaptene\nberger\nberghaan\nberginization\nberginize\nberglet\nbergschrund\nBergsonian\nBergsonism\nbergut\nbergy\nbergylt\nberhyme\nBeri\nberibanded\nberibboned\nberiberi\nberiberic\nberide\nberigora\nberinged\nberingite\nberingleted\nberinse\nberith\nBerkeleian\nBerkeleianism\nBerkeleyism\nBerkeleyite\nberkelium\nberkovets\nberkowitz\nBerkshire\nberley\nberlin\nberline\nBerliner\nberlinite\nBerlinize\nberm\nBermuda\nBermudian\nbermudite\nBern\nBernard\nBernardina\nBernardine\nberne\nBernese\nBernice\nBernicia\nbernicle\nBernie\nBerninesque\nBernoullian\nberobed\nBeroe\nBeroida\nBeroidae\nberoll\nBerossos\nberouged\nberound\nberrendo\nberret\nberri\nberried\nberrier\nberrigan\nberrugate\nberry\nberrybush\nberryless\nberrylike\nberrypicker\nberrypicking\nberseem\nberserk\nberserker\nBersiamite\nBersil\nBert\nBertat\nBerteroa\nberth\nBertha\nberthage\nberthed\nberther\nberthierite\nberthing\nBerthold\nBertholletia\nBertie\nBertolonia\nBertram\nbertram\nBertrand\nbertrandite\nbertrum\nberuffed\nberuffled\nberust\nbervie\nberycid\nBerycidae\nberyciform\nberycine\nberycoid\nBerycoidea\nberycoidean\nBerycoidei\nBerycomorphi\nberyl\nberylate\nberyllia\nberylline\nberylliosis\nberyllium\nberylloid\nberyllonate\nberyllonite\nberyllosis\nBerytidae\nBeryx\nberzelianite\nberzeliite\nbes\nbesa\nbesagne\nbesaiel\nbesaint\nbesan\nbesanctify\nbesauce\nbescab\nbescarf\nbescatter\nbescent\nbescorch\nbescorn\nbescoundrel\nbescour\nbescourge\nbescramble\nbescrape\nbescratch\nbescrawl\nbescreen\nbescribble\nbescurf\nbescurvy\nbescutcheon\nbeseam\nbesee\nbeseech\nbeseecher\nbeseeching\nbeseechingly\nbeseechingness\nbeseechment\nbeseem\nbeseeming\nbeseemingly\nbeseemingness\nbeseemliness\nbeseemly\nbeseen\nbeset\nbesetment\nbesetter\nbesetting\nbeshackle\nbeshade\nbeshadow\nbeshag\nbeshake\nbeshame\nbeshawled\nbeshear\nbeshell\nbeshield\nbeshine\nbeshiver\nbeshlik\nbeshod\nbeshout\nbeshow\nbeshower\nbeshrew\nbeshriek\nbeshrivel\nbeshroud\nbesiclometer\nbeside\nbesides\nbesiege\nbesieged\nbesiegement\nbesieger\nbesieging\nbesiegingly\nbesigh\nbesilver\nbesin\nbesing\nbesiren\nbesit\nbeslab\nbeslap\nbeslash\nbeslave\nbeslaver\nbesleeve\nbeslime\nbeslimer\nbeslings\nbeslipper\nbeslobber\nbeslow\nbeslubber\nbeslur\nbeslushed\nbesmear\nbesmearer\nbesmell\nbesmile\nbesmirch\nbesmircher\nbesmirchment\nbesmoke\nbesmooth\nbesmother\nbesmouch\nbesmudge\nbesmut\nbesmutch\nbesnare\nbesneer\nbesnivel\nbesnow\nbesnuff\nbesodden\nbesogne\nbesognier\nbesoil\nbesom\nbesomer\nbesonnet\nbesoot\nbesoothe\nbesoothement\nbesot\nbesotment\nbesotted\nbesottedly\nbesottedness\nbesotting\nbesottingly\nbesought\nbesoul\nbesour\nbespangle\nbespate\nbespatter\nbespatterer\nbespatterment\nbespawl\nbespeak\nbespeakable\nbespeaker\nbespecked\nbespeckle\nbespecklement\nbespectacled\nbesped\nbespeech\nbespeed\nbespell\nbespelled\nbespend\nbespete\nbespew\nbespice\nbespill\nbespin\nbespirit\nbespit\nbesplash\nbesplatter\nbesplit\nbespoke\nbespoken\nbespot\nbespottedness\nbespouse\nbespout\nbespray\nbespread\nbesprent\nbesprinkle\nbesprinkler\nbespurred\nbesputter\nbespy\nbesqueeze\nbesquib\nbesra\nBess\nBessarabian\nBesselian\nBessemer\nbessemer\nBessemerize\nbessemerize\nBessera\nBessi\nBessie\nBessy\nbest\nbestab\nbestain\nbestamp\nbestar\nbestare\nbestarve\nbestatued\nbestay\nbestayed\nbestead\nbesteer\nbestench\nbester\nbestial\nbestialism\nbestialist\nbestiality\nbestialize\nbestially\nbestiarian\nbestiarianism\nbestiary\nbestick\nbestill\nbestink\nbestir\nbestness\nbestock\nbestore\nbestorm\nbestove\nbestow\nbestowable\nbestowage\nbestowal\nbestower\nbestowing\nbestowment\nbestraddle\nbestrapped\nbestraught\nbestraw\nbestreak\nbestream\nbestrew\nbestrewment\nbestride\nbestripe\nbestrode\nbestubbled\nbestuck\nbestud\nbesugar\nbesuit\nbesully\nbeswarm\nbesweatered\nbesweeten\nbeswelter\nbeswim\nbeswinge\nbeswitch\nbet\nBeta\nbeta\nbetacism\nbetacismus\nbetafite\nbetag\nbetail\nbetailor\nbetaine\nbetainogen\nbetalk\nbetallow\nbetangle\nbetanglement\nbetask\nbetassel\nbetatron\nbetattered\nbetaxed\nbetear\nbeteela\nbeteem\nbetel\nBetelgeuse\nBeth\nbeth\nbethabara\nbethankit\nbethel\nBethesda\nbethflower\nbethink\nBethlehem\nBethlehemite\nbethought\nbethrall\nbethreaten\nbethroot\nBethuel\nbethumb\nbethump\nbethunder\nbethwack\nBethylidae\nbetide\nbetimber\nbetimes\nbetinge\nbetipple\nbetire\nbetis\nbetitle\nbetocsin\nbetoil\nbetoken\nbetokener\nbetone\nbetongue\nBetonica\nbetony\nbetorcin\nbetorcinol\nbetoss\nbetowel\nbetowered\nBetoya\nBetoyan\nbetrace\nbetrail\nbetrample\nbetrap\nbetravel\nbetray\nbetrayal\nbetrayer\nbetrayment\nbetread\nbetrend\nbetrim\nbetrinket\nbetroth\nbetrothal\nbetrothed\nbetrothment\nbetrough\nbetrousered\nbetrumpet\nbetrunk\nBetsey\nBetsileos\nBetsimisaraka\nbetso\nBetsy\nBetta\nbetted\nbetter\nbetterer\nbettergates\nbettering\nbetterly\nbetterment\nbettermost\nbetterness\nbetters\nBettina\nBettine\nbetting\nbettong\nbettonga\nBettongia\nbettor\nBetty\nbetty\nbetuckered\nBetula\nBetulaceae\nbetulaceous\nbetulin\nbetulinamaric\nbetulinic\nbetulinol\nBetulites\nbeturbaned\nbetusked\nbetutor\nbetutored\nbetwattled\nbetween\nbetweenbrain\nbetweenity\nbetweenmaid\nbetweenness\nbetweenwhiles\nbetwine\nbetwit\nbetwixen\nbetwixt\nbeudantite\nBeulah\nbeuniformed\nbevatron\nbeveil\nbevel\nbeveled\nbeveler\nbevelled\nbevelment\nbevenom\nbever\nbeverage\nBeverly\nbeverse\nbevesseled\nbevesselled\nbeveto\nbevillain\nbevined\nbevoiled\nbevomit\nbevue\nbevy\nbewail\nbewailable\nbewailer\nbewailing\nbewailingly\nbewailment\nbewaitered\nbewall\nbeware\nbewash\nbewaste\nbewater\nbeweary\nbeweep\nbeweeper\nbewelcome\nbewelter\nbewept\nbewest\nbewet\nbewhig\nbewhiskered\nbewhisper\nbewhistle\nbewhite\nbewhiten\nbewidow\nbewig\nbewigged\nbewilder\nbewildered\nbewilderedly\nbewilderedness\nbewildering\nbewilderingly\nbewilderment\nbewimple\nbewinged\nbewinter\nbewired\nbewitch\nbewitchedness\nbewitcher\nbewitchery\nbewitchful\nbewitching\nbewitchingly\nbewitchingness\nbewitchment\nbewith\nbewizard\nbework\nbeworm\nbeworn\nbeworry\nbeworship\nbewrap\nbewrathed\nbewray\nbewrayer\nbewrayingly\nbewrayment\nbewreath\nbewreck\nbewrite\nbey\nbeydom\nbeylic\nbeylical\nbeyond\nbeyrichite\nbeyship\nBezaleel\nBezaleelian\nbezant\nbezantee\nbezanty\nbezel\nbezesteen\nbezetta\nbezique\nbezoar\nbezoardic\nbezonian\nBezpopovets\nbezzi\nbezzle\nbezzo\nbhabar\nBhadon\nBhaga\nbhagavat\nbhagavata\nbhaiachari\nbhaiyachara\nbhakta\nbhakti\nbhalu\nbhandar\nbhandari\nbhang\nbhangi\nBhar\nbhara\nbharal\nBharata\nbhat\nbhava\nBhavani\nbheesty\nbhikku\nbhikshu\nBhil\nBhili\nBhima\nBhojpuri\nbhoosa\nBhotia\nBhotiya\nBhowani\nbhoy\nBhumij\nbhungi\nbhungini\nbhut\nBhutanese\nBhutani\nbhutatathata\nBhutia\nbiabo\nbiacetyl\nbiacetylene\nbiacid\nbiacromial\nbiacuminate\nbiacuru\nbialate\nbiallyl\nbialveolar\nBianca\nBianchi\nbianchite\nbianco\nbiangular\nbiangulate\nbiangulated\nbiangulous\nbianisidine\nbiannual\nbiannually\nbiannulate\nbiarchy\nbiarcuate\nbiarcuated\nbiarticular\nbiarticulate\nbiarticulated\nbias\nbiasness\nbiasteric\nbiaswise\nbiatomic\nbiauricular\nbiauriculate\nbiaxal\nbiaxial\nbiaxiality\nbiaxially\nbiaxillary\nbib\nbibacious\nbibacity\nbibasic\nbibation\nbibb\nbibber\nbibble\nbibbler\nbibbons\nbibcock\nbibenzyl\nbibi\nBibio\nbibionid\nBibionidae\nbibiri\nbibitory\nBible\nbibless\nBiblic\nBiblical\nBiblicality\nBiblically\nBiblicism\nBiblicist\nBiblicistic\nBiblicolegal\nBiblicoliterary\nBiblicopsychological\nbiblioclasm\nbiblioclast\nbibliofilm\nbibliogenesis\nbibliognost\nbibliognostic\nbibliogony\nbibliograph\nbibliographer\nbibliographic\nbibliographical\nbibliographically\nbibliographize\nbibliography\nbiblioklept\nbibliokleptomania\nbibliokleptomaniac\nbibliolater\nbibliolatrous\nbibliolatry\nbibliological\nbibliologist\nbibliology\nbibliomancy\nbibliomane\nbibliomania\nbibliomaniac\nbibliomaniacal\nbibliomanian\nbibliomanianism\nbibliomanism\nbibliomanist\nbibliopegic\nbibliopegist\nbibliopegistic\nbibliopegy\nbibliophage\nbibliophagic\nbibliophagist\nbibliophagous\nbibliophile\nbibliophilic\nbibliophilism\nbibliophilist\nbibliophilistic\nbibliophily\nbibliophobia\nbibliopolar\nbibliopole\nbibliopolery\nbibliopolic\nbibliopolical\nbibliopolically\nbibliopolism\nbibliopolist\nbibliopolistic\nbibliopoly\nbibliosoph\nbibliotaph\nbibliotaphic\nbibliothec\nbibliotheca\nbibliothecal\nbibliothecarial\nbibliothecarian\nbibliothecary\nbibliotherapeutic\nbibliotherapist\nbibliotherapy\nbibliothetic\nbibliotic\nbibliotics\nbibliotist\nBiblism\nBiblist\nbiblus\nbiborate\nbibracteate\nbibracteolate\nbibulosity\nbibulous\nbibulously\nbibulousness\nBibulus\nbicalcarate\nbicameral\nbicameralism\nbicamerist\nbicapitate\nbicapsular\nbicarbonate\nbicarbureted\nbicarinate\nbicarpellary\nbicarpellate\nbicaudal\nbicaudate\nBice\nbice\nbicellular\nbicentenary\nbicentennial\nbicephalic\nbicephalous\nbiceps\nbicetyl\nbichir\nbichloride\nbichord\nbichromate\nbichromatic\nbichromatize\nbichrome\nbichromic\nbichy\nbiciliate\nbiciliated\nbicipital\nbicipitous\nbicircular\nbicirrose\nbick\nbicker\nbickerer\nbickern\nbiclavate\nbiclinium\nbicollateral\nbicollaterality\nbicolligate\nbicolor\nbicolored\nbicolorous\nbiconcave\nbiconcavity\nbicondylar\nbicone\nbiconic\nbiconical\nbiconically\nbiconjugate\nbiconsonantal\nbiconvex\nbicorn\nbicornate\nbicorne\nbicorned\nbicornous\nbicornuate\nbicornuous\nbicornute\nbicorporal\nbicorporate\nbicorporeal\nbicostate\nbicrenate\nbicrescentic\nbicrofarad\nbicron\nbicrural\nbicursal\nbicuspid\nbicuspidate\nbicyanide\nbicycle\nbicycler\nbicyclic\nbicyclism\nbicyclist\nbicyclo\nbicycloheptane\nbicylindrical\nbid\nbidactyl\nbidactyle\nbidactylous\nbidar\nbidarka\nbidcock\nbiddable\nbiddableness\nbiddably\nbiddance\nBiddelian\nbidder\nbidding\nBiddulphia\nBiddulphiaceae\nBiddy\nbiddy\nbide\nBidens\nbident\nbidental\nbidentate\nbidented\nbidential\nbidenticulate\nbider\nbidet\nbidigitate\nbidimensional\nbiding\nbidirectional\nbidiurnal\nBidpai\nbidri\nbiduous\nbieberite\nBiedermeier\nbield\nbieldy\nbielectrolysis\nbielenite\nBielid\nBielorouss\nbien\nbienly\nbienness\nbiennia\nbiennial\nbiennially\nbiennium\nbier\nbierbalk\nbiethnic\nbietle\nbifacial\nbifanged\nbifara\nbifarious\nbifariously\nbifer\nbiferous\nbiff\nbiffin\nbifid\nbifidate\nbifidated\nbifidity\nbifidly\nbifilar\nbifilarly\nbifistular\nbiflabellate\nbiflagellate\nbiflecnode\nbiflected\nbiflex\nbiflorate\nbiflorous\nbifluoride\nbifocal\nbifoil\nbifold\nbifolia\nbifoliate\nbifoliolate\nbifolium\nbiforked\nbiform\nbiformed\nbiformity\nbiforous\nbifront\nbifrontal\nbifronted\nbifurcal\nbifurcate\nbifurcated\nbifurcately\nbifurcation\nbig\nbiga\nbigamic\nbigamist\nbigamistic\nbigamize\nbigamous\nbigamously\nbigamy\nbigarade\nbigaroon\nbigarreau\nbigbloom\nbigemina\nbigeminal\nbigeminate\nbigeminated\nbigeminum\nbigener\nbigeneric\nbigential\nbigeye\nbigg\nbiggah\nbiggen\nbigger\nbiggest\nbiggin\nbiggish\nbiggonet\nbigha\nbighead\nbighearted\nbigheartedness\nbighorn\nbight\nbiglandular\nbiglenoid\nbiglot\nbigmouth\nbigmouthed\nbigness\nBignonia\nBignoniaceae\nbignoniaceous\nbignoniad\nbignou\nbigoniac\nbigonial\nbigot\nbigoted\nbigotedly\nbigotish\nbigotry\nbigotty\nbigroot\nbigthatch\nbiguanide\nbiguttate\nbiguttulate\nbigwig\nbigwigged\nbigwiggedness\nbigwiggery\nbigwiggism\nBihai\nBiham\nbihamate\nBihari\nbiharmonic\nbihourly\nbihydrazine\nbija\nbijasal\nbijou\nbijouterie\nbijoux\nbijugate\nbijugular\nbike\nbikh\nbikhaconitine\nbikini\nBikol\nBikram\nBikukulla\nBilaan\nbilabe\nbilabial\nbilabiate\nbilalo\nbilamellar\nbilamellate\nbilamellated\nbilaminar\nbilaminate\nbilaminated\nbilander\nbilateral\nbilateralism\nbilaterality\nbilaterally\nbilateralness\nBilati\nbilberry\nbilbie\nbilbo\nbilboquet\nbilby\nbilch\nbilcock\nbildar\nbilders\nbile\nbilestone\nbilge\nbilgy\nBilharzia\nbilharzial\nbilharziasis\nbilharzic\nbilharziosis\nbilianic\nbiliary\nbiliate\nbiliation\nbilic\nbilicyanin\nbilifaction\nbiliferous\nbilification\nbilifuscin\nbilify\nbilihumin\nbilimbi\nbilimbing\nbiliment\nBilin\nbilinear\nbilineate\nbilingual\nbilingualism\nbilingually\nbilinguar\nbilinguist\nbilinigrin\nbilinite\nbilio\nbilious\nbiliously\nbiliousness\nbiliprasin\nbilipurpurin\nbilipyrrhin\nbilirubin\nbilirubinemia\nbilirubinic\nbilirubinuria\nbiliteral\nbiliteralism\nbilith\nbilithon\nbiliverdic\nbiliverdin\nbilixanthin\nbilk\nbilker\nBill\nbill\nbilla\nbillable\nbillabong\nbillback\nbillbeetle\nBillbergia\nbillboard\nbillbroking\nbillbug\nbilled\nbiller\nbillet\nbilleter\nbillethead\nbilleting\nbilletwood\nbillety\nbillfish\nbillfold\nbillhead\nbillheading\nbillholder\nbillhook\nbillian\nbilliard\nbilliardist\nbilliardly\nbilliards\nBillie\nBilliken\nbillikin\nbilling\nbillingsgate\nbillion\nbillionaire\nbillionism\nbillionth\nbillitonite\nBilljim\nbillman\nbillon\nbillot\nbillow\nbillowiness\nbillowy\nbillposter\nbillposting\nbillsticker\nbillsticking\nBilly\nbilly\nbillyboy\nbillycan\nbillycock\nbillyer\nbillyhood\nbillywix\nbilo\nbilobated\nbilobe\nbilobed\nbilobiate\nbilobular\nbilocation\nbilocellate\nbilocular\nbiloculate\nBiloculina\nbiloculine\nbilophodont\nBiloxi\nbilsh\nBilskirnir\nbilsted\nbiltong\nbiltongue\nBim\nbimaculate\nbimaculated\nbimalar\nBimana\nbimanal\nbimane\nbimanous\nbimanual\nbimanually\nbimarginate\nbimarine\nbimastic\nbimastism\nbimastoid\nbimasty\nbimaxillary\nbimbil\nBimbisara\nbimeby\nbimensal\nbimester\nbimestrial\nbimetalic\nbimetallism\nbimetallist\nbimetallistic\nbimillenary\nbimillennium\nbimillionaire\nBimini\nBimmeler\nbimodal\nbimodality\nbimolecular\nbimonthly\nbimotored\nbimotors\nbimucronate\nbimuscular\nbin\nbinal\nbinaphthyl\nbinarium\nbinary\nbinate\nbinately\nbination\nbinational\nbinaural\nbinauricular\nbinbashi\nbind\nbinder\nbindery\nbindheimite\nbinding\nbindingly\nbindingness\nbindle\nbindlet\nbindoree\nbindweb\nbindweed\nbindwith\nbindwood\nbine\nbinervate\nbineweed\nbing\nbinge\nbingey\nbinghi\nbingle\nbingo\nbingy\nbinh\nBini\nbiniodide\nBinitarian\nBinitarianism\nbink\nbinman\nbinna\nbinnacle\nbinning\nbinnite\nbinnogue\nbino\nbinocle\nbinocular\nbinocularity\nbinocularly\nbinoculate\nbinodal\nbinode\nbinodose\nbinodous\nbinomenclature\nbinomial\nbinomialism\nbinomially\nbinominal\nbinominated\nbinominous\nbinormal\nbinotic\nbinotonous\nbinous\nbinoxalate\nbinoxide\nbint\nbintangor\nbinturong\nbinuclear\nbinucleate\nbinucleated\nbinucleolate\nbinukau\nBinzuru\nbiobibliographical\nbiobibliography\nbioblast\nbioblastic\nbiocatalyst\nbiocellate\nbiocentric\nbiochemic\nbiochemical\nbiochemically\nbiochemics\nbiochemist\nbiochemistry\nbiochemy\nbiochore\nbioclimatic\nbioclimatology\nbiocoenose\nbiocoenosis\nbiocoenotic\nbiocycle\nbiod\nbiodynamic\nbiodynamical\nbiodynamics\nbiodyne\nbioecologic\nbioecological\nbioecologically\nbioecologist\nbioecology\nbiogen\nbiogenase\nbiogenesis\nbiogenesist\nbiogenetic\nbiogenetical\nbiogenetically\nbiogenetics\nbiogenous\nbiogeny\nbiogeochemistry\nbiogeographic\nbiogeographical\nbiogeographically\nbiogeography\nbiognosis\nbiograph\nbiographee\nbiographer\nbiographic\nbiographical\nbiographically\nbiographist\nbiographize\nbiography\nbioherm\nbiokinetics\nbiolinguistics\nbiolith\nbiologese\nbiologic\nbiological\nbiologically\nbiologicohumanistic\nbiologism\nbiologist\nbiologize\nbiology\nbioluminescence\nbioluminescent\nbiolysis\nbiolytic\nbiomagnetic\nbiomagnetism\nbiomathematics\nbiome\nbiomechanical\nbiomechanics\nbiometeorology\nbiometer\nbiometric\nbiometrical\nbiometrically\nbiometrician\nbiometricist\nbiometrics\nbiometry\nbiomicroscopy\nbion\nbionergy\nbionomic\nbionomical\nbionomically\nbionomics\nbionomist\nbionomy\nbiophagism\nbiophagous\nbiophagy\nbiophilous\nbiophore\nbiophotophone\nbiophysical\nbiophysicochemical\nbiophysics\nbiophysiography\nbiophysiological\nbiophysiologist\nbiophysiology\nbiophyte\nbioplasm\nbioplasmic\nbioplast\nbioplastic\nbioprecipitation\nbiopsic\nbiopsy\nbiopsychic\nbiopsychical\nbiopsychological\nbiopsychologist\nbiopsychology\nbiopyribole\nbioral\nbiorbital\nbiordinal\nbioreaction\nbiorgan\nbios\nbioscope\nbioscopic\nbioscopy\nbiose\nbiosis\nbiosocial\nbiosociological\nbiosphere\nbiostatic\nbiostatical\nbiostatics\nbiostatistics\nbiosterin\nbiosterol\nbiostratigraphy\nbiosynthesis\nbiosynthetic\nbiosystematic\nbiosystematics\nbiosystematist\nbiosystematy\nBiota\nbiota\nbiotaxy\nbiotechnics\nbiotic\nbiotical\nbiotics\nbiotin\nbiotite\nbiotitic\nbiotome\nbiotomy\nbiotope\nbiotype\nbiotypic\nbiovular\nbiovulate\nbioxalate\nbioxide\nbipack\nbipaleolate\nBipaliidae\nBipalium\nbipalmate\nbiparasitic\nbiparental\nbiparietal\nbiparous\nbiparted\nbipartible\nbipartient\nbipartile\nbipartisan\nbipartisanship\nbipartite\nbipartitely\nbipartition\nbiparty\nbipaschal\nbipectinate\nbipectinated\nbiped\nbipedal\nbipedality\nbipedism\nbipeltate\nbipennate\nbipennated\nbipenniform\nbiperforate\nbipersonal\nbipetalous\nbiphase\nbiphasic\nbiphenol\nbiphenyl\nbiphenylene\nbipinnaria\nbipinnate\nbipinnated\nbipinnately\nbipinnatifid\nbipinnatiparted\nbipinnatipartite\nbipinnatisect\nbipinnatisected\nbiplanal\nbiplanar\nbiplane\nbiplicate\nbiplicity\nbiplosion\nbiplosive\nbipod\nbipolar\nbipolarity\nbipolarize\nBipont\nBipontine\nbiporose\nbiporous\nbiprism\nbiprong\nbipunctal\nbipunctate\nbipunctual\nbipupillate\nbipyramid\nbipyramidal\nbipyridine\nbipyridyl\nbiquadrantal\nbiquadrate\nbiquadratic\nbiquarterly\nbiquartz\nbiquintile\nbiracial\nbiracialism\nbiradial\nbiradiate\nbiradiated\nbiramous\nbirational\nbirch\nbirchbark\nbirchen\nbirching\nbirchman\nbirchwood\nbird\nbirdbander\nbirdbanding\nbirdbath\nbirdberry\nbirdcall\nbirdcatcher\nbirdcatching\nbirdclapper\nbirdcraft\nbirddom\nbirdeen\nbirder\nbirdglue\nbirdhood\nbirdhouse\nbirdie\nbirdikin\nbirding\nbirdland\nbirdless\nbirdlet\nbirdlike\nbirdlime\nbirdling\nbirdlore\nbirdman\nbirdmouthed\nbirdnest\nbirdnester\nbirdseed\nbirdstone\nbirdweed\nbirdwise\nbirdwoman\nbirdy\nbirectangular\nbirefracting\nbirefraction\nbirefractive\nbirefringence\nbirefringent\nbireme\nbiretta\nBirgus\nbiri\nbiriba\nbirimose\nbirk\nbirken\nBirkenhead\nBirkenia\nBirkeniidae\nbirkie\nbirkremite\nbirl\nbirle\nbirler\nbirlie\nbirlieman\nbirlinn\nbirma\nBirmingham\nBirminghamize\nbirn\nbirny\nBiron\nbirostrate\nbirostrated\nbirotation\nbirotatory\nbirr\nbirse\nbirsle\nbirsy\nbirth\nbirthbed\nbirthday\nbirthland\nbirthless\nbirthmark\nbirthmate\nbirthnight\nbirthplace\nbirthright\nbirthroot\nbirthstone\nbirthstool\nbirthwort\nbirthy\nbis\nbisabol\nbisaccate\nbisacromial\nbisalt\nBisaltae\nbisantler\nbisaxillary\nbisbeeite\nbiscacha\nBiscanism\nBiscayan\nBiscayanism\nbiscayen\nBiscayner\nbischofite\nbiscotin\nbiscuit\nbiscuiting\nbiscuitlike\nbiscuitmaker\nbiscuitmaking\nbiscuitroot\nbiscuitry\nbisdiapason\nbisdimethylamino\nbisect\nbisection\nbisectional\nbisectionally\nbisector\nbisectrices\nbisectrix\nbisegment\nbiseptate\nbiserial\nbiserially\nbiseriate\nbiseriately\nbiserrate\nbisetose\nbisetous\nbisexed\nbisext\nbisexual\nbisexualism\nbisexuality\nbisexually\nbisexuous\nbisglyoxaline\nBishareen\nBishari\nBisharin\nbishop\nbishopdom\nbishopess\nbishopful\nbishophood\nbishopless\nbishoplet\nbishoplike\nbishopling\nbishopric\nbishopship\nbishopweed\nbisiliac\nbisilicate\nbisiliquous\nbisimine\nbisinuate\nbisinuation\nbisischiadic\nbisischiatic\nBisley\nbislings\nbismar\nBismarck\nBismarckian\nBismarckianism\nbismarine\nbismerpund\nbismillah\nbismite\nBismosol\nbismuth\nbismuthal\nbismuthate\nbismuthic\nbismuthide\nbismuthiferous\nbismuthine\nbismuthinite\nbismuthite\nbismuthous\nbismuthyl\nbismutite\nbismutoplagionite\nbismutosmaltite\nbismutosphaerite\nbisnaga\nbison\nbisonant\nbisontine\nbisphenoid\nbispinose\nbispinous\nbispore\nbisporous\nbisque\nbisquette\nbissext\nbissextile\nbisson\nbistate\nbistephanic\nbister\nbistered\nbistetrazole\nbisti\nbistipular\nbistipulate\nbistipuled\nbistort\nBistorta\nbistournage\nbistoury\nbistratal\nbistratose\nbistriate\nbistriazole\nbistro\nbisubstituted\nbisubstitution\nbisulcate\nbisulfid\nbisulphate\nbisulphide\nbisulphite\nbisyllabic\nbisyllabism\nbisymmetric\nbisymmetrical\nbisymmetrically\nbisymmetry\nbit\nbitable\nbitangent\nbitangential\nbitanhol\nbitartrate\nbitbrace\nbitch\nbite\nbitemporal\nbitentaculate\nbiter\nbiternate\nbiternately\nbitesheep\nbitewing\nbitheism\nBithynian\nbiti\nbiting\nbitingly\nbitingness\nBitis\nbitless\nbito\nbitolyl\nbitonality\nbitreadle\nbitripartite\nbitripinnatifid\nbitriseptate\nbitrochanteric\nbitstock\nbitstone\nbitt\nbitted\nbitten\nbitter\nbitterbark\nbitterblain\nbitterbloom\nbitterbur\nbitterbush\nbitterful\nbitterhead\nbitterhearted\nbitterheartedness\nbittering\nbitterish\nbitterishness\nbitterless\nbitterling\nbitterly\nbittern\nbitterness\nbitternut\nbitterroot\nbitters\nbittersweet\nbitterweed\nbitterwood\nbitterworm\nbitterwort\nbitthead\nbittie\nBittium\nbittock\nbitty\nbitubercular\nbituberculate\nbituberculated\nBitulithic\nbitulithic\nbitume\nbitumed\nbitumen\nbituminate\nbituminiferous\nbituminization\nbituminize\nbituminoid\nbituminous\nbitwise\nbityite\nbitypic\nbiune\nbiunial\nbiunity\nbiunivocal\nbiurate\nbiurea\nbiuret\nbivalence\nbivalency\nbivalent\nbivalve\nbivalved\nBivalvia\nbivalvian\nbivalvous\nbivalvular\nbivariant\nbivariate\nbivascular\nbivaulted\nbivector\nbiventer\nbiventral\nbiverbal\nbivinyl\nbivious\nbivittate\nbivocal\nbivocalized\nbivoltine\nbivoluminous\nbivouac\nbiwa\nbiweekly\nbiwinter\nBixa\nBixaceae\nbixaceous\nbixbyite\nbixin\nbiyearly\nbiz\nbizardite\nbizarre\nbizarrely\nbizarreness\nBizen\nbizet\nbizonal\nbizone\nBizonia\nbizygomatic\nbizz\nBjorne\nblab\nblabber\nblabberer\nblachong\nblack\nblackacre\nblackamoor\nblackback\nblackball\nblackballer\nblackband\nBlackbeard\nblackbelly\nblackberry\nblackbine\nblackbird\nblackbirder\nblackbirding\nblackboard\nblackboy\nblackbreast\nblackbush\nblackbutt\nblackcap\nblackcoat\nblackcock\nblackdamp\nblacken\nblackener\nblackening\nblacker\nblacketeer\nblackey\nblackeyes\nblackface\nBlackfeet\nblackfellow\nblackfellows\nblackfin\nblackfire\nblackfish\nblackfisher\nblackfishing\nBlackfoot\nblackfoot\nBlackfriars\nblackguard\nblackguardism\nblackguardize\nblackguardly\nblackguardry\nBlackhander\nblackhead\nblackheads\nblackheart\nblackhearted\nblackheartedness\nblackie\nblacking\nblackish\nblackishly\nblackishness\nblackit\nblackjack\nblackland\nblackleg\nblackleggery\nblacklegism\nblacklegs\nblackly\nblackmail\nblackmailer\nblackneb\nblackneck\nblackness\nblacknob\nblackout\nblackpoll\nblackroot\nblackseed\nblackshirted\nblacksmith\nblacksmithing\nblackstick\nblackstrap\nblacktail\nblackthorn\nblacktongue\nblacktree\nblackwash\nblackwasher\nblackwater\nblackwood\nblackwork\nblackwort\nblacky\nblad\nbladder\nbladderet\nbladderless\nbladderlike\nbladdernose\nbladdernut\nbladderpod\nbladderseed\nbladderweed\nbladderwort\nbladdery\nblade\nbladebone\nbladed\nbladelet\nbladelike\nblader\nbladesmith\nbladewise\nblading\nbladish\nblady\nbladygrass\nblae\nblaeberry\nblaeness\nblaewort\nblaff\nblaffert\nblaflum\nblah\nblahlaut\nblain\nBlaine\nBlair\nblair\nblairmorite\nBlake\nblake\nblakeberyed\nblamable\nblamableness\nblamably\nblame\nblamed\nblameful\nblamefully\nblamefulness\nblameless\nblamelessly\nblamelessness\nblamer\nblameworthiness\nblameworthy\nblaming\nblamingly\nblan\nblanc\nblanca\nblancard\nBlanch\nblanch\nblancher\nblanching\nblanchingly\nblancmange\nblancmanger\nblanco\nbland\nblanda\nBlandfordia\nblandiloquence\nblandiloquious\nblandiloquous\nblandish\nblandisher\nblandishing\nblandishingly\nblandishment\nblandly\nblandness\nblank\nblankard\nblankbook\nblanked\nblankeel\nblanket\nblanketed\nblanketeer\nblanketflower\nblanketing\nblanketless\nblanketmaker\nblanketmaking\nblanketry\nblanketweed\nblankety\nblanking\nblankish\nBlankit\nblankite\nblankly\nblankness\nblanky\nblanque\nblanquillo\nblare\nBlarina\nblarney\nblarneyer\nblarnid\nblarny\nblart\nblas\nblase\nblash\nblashy\nBlasia\nblaspheme\nblasphemer\nblasphemous\nblasphemously\nblasphemousness\nblasphemy\nblast\nblasted\nblastema\nblastemal\nblastematic\nblastemic\nblaster\nblastful\nblasthole\nblastid\nblastie\nblasting\nblastment\nblastocarpous\nblastocheme\nblastochyle\nblastocoele\nblastocolla\nblastocyst\nblastocyte\nblastoderm\nblastodermatic\nblastodermic\nblastodisk\nblastogenesis\nblastogenetic\nblastogenic\nblastogeny\nblastogranitic\nblastoid\nBlastoidea\nblastoma\nblastomata\nblastomere\nblastomeric\nBlastomyces\nblastomycete\nBlastomycetes\nblastomycetic\nblastomycetous\nblastomycosis\nblastomycotic\nblastoneuropore\nBlastophaga\nblastophitic\nblastophoral\nblastophore\nblastophoric\nblastophthoria\nblastophthoric\nblastophyllum\nblastoporal\nblastopore\nblastoporic\nblastoporphyritic\nblastosphere\nblastospheric\nblastostylar\nblastostyle\nblastozooid\nblastplate\nblastula\nblastulae\nblastular\nblastulation\nblastule\nblasty\nblat\nblatancy\nblatant\nblatantly\nblate\nblately\nblateness\nblather\nblatherer\nblatherskite\nblathery\nblatjang\nBlatta\nblatta\nBlattariae\nblatter\nblatterer\nblatti\nblattid\nBlattidae\nblattiform\nBlattodea\nblattoid\nBlattoidea\nblaubok\nBlaugas\nblauwbok\nblaver\nblaw\nblawort\nblay\nBlayne\nblaze\nblazer\nblazing\nblazingly\nblazon\nblazoner\nblazoning\nblazonment\nblazonry\nblazy\nbleaberry\nbleach\nbleachability\nbleachable\nbleached\nbleacher\nbleacherite\nbleacherman\nbleachery\nbleachfield\nbleachground\nbleachhouse\nbleaching\nbleachman\nbleachworks\nbleachyard\nbleak\nbleakish\nbleakly\nbleakness\nbleaky\nblear\nbleared\nblearedness\nbleareye\nbleariness\nblearness\nbleary\nbleat\nbleater\nbleating\nbleatingly\nbleaty\nbleb\nblebby\nblechnoid\nBlechnum\nbleck\nblee\nbleed\nbleeder\nbleeding\nbleekbok\nbleery\nbleeze\nbleezy\nblellum\nblemish\nblemisher\nblemishment\nBlemmyes\nblench\nblencher\nblenching\nblenchingly\nblencorn\nblend\nblendcorn\nblende\nblended\nblender\nblending\nblendor\nblendure\nblendwater\nblennadenitis\nblennemesis\nblennenteria\nblennenteritis\nblenniid\nBlenniidae\nblenniiform\nBlenniiformes\nblennioid\nBlennioidea\nblennocele\nblennocystitis\nblennoemesis\nblennogenic\nblennogenous\nblennoid\nblennoma\nblennometritis\nblennophlogisma\nblennophlogosis\nblennophthalmia\nblennoptysis\nblennorrhagia\nblennorrhagic\nblennorrhea\nblennorrheal\nblennorrhinia\nblennosis\nblennostasis\nblennostatic\nblennothorax\nblennotorrhea\nblennuria\nblenny\nblennymenitis\nblent\nbleo\nblephara\nblepharadenitis\nblepharal\nblepharanthracosis\nblepharedema\nblepharelcosis\nblepharemphysema\nBlephariglottis\nblepharism\nblepharitic\nblepharitis\nblepharoadenitis\nblepharoadenoma\nblepharoatheroma\nblepharoblennorrhea\nblepharocarcinoma\nBlepharocera\nBlepharoceridae\nblepharochalasis\nblepharochromidrosis\nblepharoclonus\nblepharocoloboma\nblepharoconjunctivitis\nblepharodiastasis\nblepharodyschroia\nblepharohematidrosis\nblepharolithiasis\nblepharomelasma\nblepharoncosis\nblepharoncus\nblepharophimosis\nblepharophryplasty\nblepharophthalmia\nblepharophyma\nblepharoplast\nblepharoplastic\nblepharoplasty\nblepharoplegia\nblepharoptosis\nblepharopyorrhea\nblepharorrhaphy\nblepharospasm\nblepharospath\nblepharosphincterectomy\nblepharostat\nblepharostenosis\nblepharosymphysis\nblepharosyndesmitis\nblepharosynechia\nblepharotomy\nblepharydatis\nBlephillia\nblesbok\nblesbuck\nbless\nblessed\nblessedly\nblessedness\nblesser\nblessing\nblessingly\nblest\nblet\nbletheration\nBletia\nBletilla\nblewits\nblibe\nblick\nblickey\nBlighia\nblight\nblightbird\nblighted\nblighter\nblighting\nblightingly\nblighty\nblimbing\nblimp\nblimy\nblind\nblindage\nblindball\nblinded\nblindedly\nblinder\nblindeyes\nblindfast\nblindfish\nblindfold\nblindfolded\nblindfoldedness\nblindfolder\nblindfoldly\nblinding\nblindingly\nblindish\nblindless\nblindling\nblindly\nblindness\nblindstory\nblindweed\nblindworm\nblink\nblinkard\nblinked\nblinker\nblinkered\nblinking\nblinkingly\nblinks\nblinky\nblinter\nblintze\nblip\nbliss\nblissful\nblissfully\nblissfulness\nblissless\nblissom\nblister\nblistered\nblistering\nblisteringly\nblisterweed\nblisterwort\nblistery\nblite\nblithe\nblithebread\nblitheful\nblithefully\nblithehearted\nblithelike\nblithely\nblithemeat\nblithen\nblitheness\nblither\nblithering\nblithesome\nblithesomely\nblithesomeness\nblitter\nBlitum\nblitz\nblitzbuggy\nblitzkrieg\nblizz\nblizzard\nblizzardly\nblizzardous\nblizzardy\nblo\nbloat\nbloated\nbloatedness\nbloater\nbloating\nblob\nblobbed\nblobber\nblobby\nbloc\nblock\nblockade\nblockader\nblockage\nblockbuster\nblocked\nblocker\nblockhead\nblockheaded\nblockheadedly\nblockheadedness\nblockheadish\nblockheadishness\nblockheadism\nblockholer\nblockhouse\nblockiness\nblocking\nblockish\nblockishly\nblockishness\nblocklayer\nblocklike\nblockmaker\nblockmaking\nblockman\nblockpate\nblockship\nblocky\nblodite\nbloke\nblolly\nblomstrandine\nblonde\nblondeness\nblondine\nblood\nbloodalley\nbloodalp\nbloodbeat\nbloodberry\nbloodbird\nbloodcurdler\nbloodcurdling\nblooddrop\nblooddrops\nblooded\nbloodfin\nbloodflower\nbloodguilt\nbloodguiltiness\nbloodguiltless\nbloodguilty\nbloodhound\nbloodied\nbloodily\nbloodiness\nbloodleaf\nbloodless\nbloodlessly\nbloodlessness\nbloodletter\nbloodletting\nbloodline\nbloodmobile\nbloodmonger\nbloodnoun\nbloodripe\nbloodripeness\nbloodroot\nbloodshed\nbloodshedder\nbloodshedding\nbloodshot\nbloodshotten\nbloodspiller\nbloodspilling\nbloodstain\nbloodstained\nbloodstainedness\nbloodstanch\nbloodstock\nbloodstone\nbloodstroke\nbloodsuck\nbloodsucker\nbloodsucking\nbloodthirst\nbloodthirster\nbloodthirstily\nbloodthirstiness\nbloodthirsting\nbloodthirsty\nbloodweed\nbloodwite\nbloodwood\nbloodworm\nbloodwort\nbloodworthy\nbloody\nbloodybones\nblooey\nbloom\nbloomage\nbloomer\nBloomeria\nbloomerism\nbloomers\nbloomery\nbloomfell\nblooming\nbloomingly\nbloomingness\nbloomkin\nbloomless\nBloomsburian\nBloomsbury\nbloomy\nbloop\nblooper\nblooping\nblore\nblosmy\nblossom\nblossombill\nblossomed\nblossomhead\nblossomless\nblossomry\nblossomtime\nblossomy\nblot\nblotch\nblotched\nblotchy\nblotless\nblotter\nblottesque\nblottesquely\nblotting\nblottingly\nblotto\nblotty\nbloubiskop\nblouse\nbloused\nblousing\nblout\nblow\nblowback\nblowball\nblowcock\nblowdown\nblowen\nblower\nblowfish\nblowfly\nblowgun\nblowhard\nblowhole\nblowiness\nblowing\nblowings\nblowiron\nblowlamp\nblowline\nblown\nblowoff\nblowout\nblowpipe\nblowpoint\nblowproof\nblowspray\nblowth\nblowtorch\nblowtube\nblowup\nblowy\nblowze\nblowzed\nblowzing\nblowzy\nblub\nblubber\nblubberer\nblubbering\nblubberingly\nblubberman\nblubberous\nblubbery\nblucher\nbludgeon\nbludgeoned\nbludgeoneer\nbludgeoner\nblue\nblueback\nbluebead\nBluebeard\nbluebeard\nBluebeardism\nbluebell\nbluebelled\nblueberry\nbluebill\nbluebird\nblueblaw\nbluebonnet\nbluebook\nbluebottle\nbluebreast\nbluebuck\nbluebush\nbluebutton\nbluecap\nbluecoat\nbluecup\nbluefish\nbluegill\nbluegown\nbluegrass\nbluehearted\nbluehearts\nblueing\nbluejack\nbluejacket\nbluejoint\nblueleg\nbluelegs\nbluely\nblueness\nbluenose\nBluenoser\nblueprint\nblueprinter\nbluer\nblues\nbluesides\nbluestem\nbluestocking\nbluestockingish\nbluestockingism\nbluestone\nbluestoner\nbluet\nbluethroat\nbluetongue\nbluetop\nblueweed\nbluewing\nbluewood\nbluey\nbluff\nbluffable\nbluffer\nbluffly\nbluffness\nbluffy\nbluggy\nbluing\nbluish\nbluishness\nbluism\nBlumea\nblunder\nblunderbuss\nblunderer\nblunderful\nblunderhead\nblunderheaded\nblunderheadedness\nblundering\nblunderingly\nblundersome\nblunge\nblunger\nblunk\nblunker\nblunks\nblunnen\nblunt\nblunter\nblunthead\nblunthearted\nbluntie\nbluntish\nbluntly\nbluntness\nblup\nblur\nblurb\nblurbist\nblurred\nblurredness\nblurrer\nblurry\nblurt\nblush\nblusher\nblushful\nblushfully\nblushfulness\nblushiness\nblushing\nblushingly\nblushless\nblushwort\nblushy\nbluster\nblusteration\nblusterer\nblustering\nblusteringly\nblusterous\nblusterously\nblustery\nblype\nbo\nboa\nBoaedon\nboagane\nBoanbura\nBoanerges\nboanergism\nboar\nboarcite\nboard\nboardable\nboarder\nboarding\nboardinghouse\nboardlike\nboardly\nboardman\nboardwalk\nboardy\nboarfish\nboarhound\nboarish\nboarishly\nboarishness\nboarship\nboarskin\nboarspear\nboarstaff\nboarwood\nboast\nboaster\nboastful\nboastfully\nboastfulness\nboasting\nboastive\nboastless\nboat\nboatable\nboatage\nboatbill\nboatbuilder\nboatbuilding\nboater\nboatfalls\nboatful\nboathead\nboatheader\nboathouse\nboatie\nboating\nboatkeeper\nboatless\nboatlike\nboatlip\nboatload\nboatloader\nboatloading\nboatly\nboatman\nboatmanship\nboatmaster\nboatowner\nboatsetter\nboatshop\nboatside\nboatsman\nboatswain\nboattail\nboatward\nboatwise\nboatwoman\nboatwright\nBob\nbob\nboba\nbobac\nBobadil\nBobadilian\nBobadilish\nBobadilism\nbobbed\nbobber\nbobbery\nBobbie\nbobbin\nbobbiner\nbobbinet\nbobbing\nBobbinite\nbobbinwork\nbobbish\nbobbishly\nbobble\nBobby\nbobby\nbobcat\nbobcoat\nbobeche\nbobfly\nbobierrite\nbobization\nbobjerom\nbobo\nbobolink\nbobotie\nbobsled\nbobsleigh\nbobstay\nbobtail\nbobtailed\nbobwhite\nbobwood\nbocaccio\nbocal\nbocardo\nbocasine\nbocca\nboccale\nboccarella\nboccaro\nbocce\nBocconia\nboce\nbocedization\nBoche\nbocher\nBochism\nbock\nbockerel\nbockeret\nbocking\nbocoy\nbod\nbodach\nbodacious\nbodaciously\nbode\nbodeful\nbodega\nbodement\nboden\nbodenbenderite\nboder\nbodewash\nbodge\nbodger\nbodgery\nbodhi\nbodhisattva\nbodice\nbodiced\nbodicemaker\nbodicemaking\nbodied\nbodier\nbodieron\nbodikin\nbodiless\nbodilessness\nbodiliness\nbodily\nbodiment\nboding\nbodingly\nbodkin\nbodkinwise\nbodle\nBodleian\nBodo\nbodock\nBodoni\nbody\nbodybending\nbodybuilder\nbodyguard\nbodyhood\nbodyless\nbodymaker\nbodymaking\nbodyplate\nbodywise\nbodywood\nbodywork\nBoebera\nBoedromion\nBoehmenism\nBoehmenist\nBoehmenite\nBoehmeria\nboeotarch\nBoeotian\nBoeotic\nBoer\nBoerdom\nBoerhavia\nBoethian\nBoethusian\nbog\nboga\nbogan\nbogard\nbogart\nbogberry\nbogey\nbogeyman\nboggart\nboggin\nbogginess\nboggish\nboggle\nbogglebo\nboggler\nboggy\nboghole\nbogie\nbogieman\nbogier\nBogijiab\nbogland\nboglander\nbogle\nbogledom\nboglet\nbogman\nbogmire\nBogo\nbogo\nBogomil\nBogomile\nBogomilian\nbogong\nBogota\nbogsucker\nbogtrot\nbogtrotter\nbogtrotting\nbogue\nbogum\nbogus\nbogusness\nbogway\nbogwood\nbogwort\nbogy\nbogydom\nbogyism\nbogyland\nBohairic\nbohawn\nbohea\nBohemia\nBohemian\nBohemianism\nbohemium\nbohereen\nbohireen\nboho\nbohor\nbohunk\nboid\nBoidae\nBoii\nBoiko\nboil\nboilable\nboildown\nboiled\nboiler\nboilerful\nboilerhouse\nboilerless\nboilermaker\nboilermaking\nboilerman\nboilersmith\nboilerworks\nboilery\nboiling\nboilinglike\nboilingly\nboilover\nboily\nBois\nboist\nboisterous\nboisterously\nboisterousness\nbojite\nbojo\nbokadam\nbokard\nbokark\nboke\nBokhara\nBokharan\nbokom\nbola\nBolag\nbolar\nBolboxalis\nbold\nbolden\nBolderian\nboldhearted\nboldine\nboldly\nboldness\nboldo\nBoldu\nbole\nbolection\nbolectioned\nboled\nboleite\nBolelia\nbolelike\nbolero\nBoletaceae\nboletaceous\nbolete\nBoletus\nboleweed\nbolewort\nbolide\nbolimba\nbolis\nbolivar\nbolivarite\nbolivia\nBolivian\nboliviano\nbolk\nboll\nBollandist\nbollard\nbolled\nboller\nbolling\nbollock\nbollworm\nbolly\nBolo\nbolo\nBologna\nBolognan\nBolognese\nbolograph\nbolographic\nbolographically\nbolography\nBoloism\nboloman\nbolometer\nbolometric\nboloney\nboloroot\nBolshevik\nBolsheviki\nBolshevikian\nBolshevism\nBolshevist\nBolshevistic\nBolshevistically\nBolshevize\nBolshie\nbolson\nbolster\nbolsterer\nbolsterwork\nbolt\nboltage\nboltant\nboltcutter\nboltel\nbolter\nbolthead\nboltheader\nboltheading\nbolthole\nbolti\nbolting\nboltless\nboltlike\nboltmaker\nboltmaking\nBoltonia\nboltonite\nboltrope\nboltsmith\nboltstrake\nboltuprightness\nboltwork\nbolus\nBolyaian\nbom\nboma\nBomarea\nbomb\nbombable\nBombacaceae\nbombacaceous\nbombard\nbombarde\nbombardelle\nbombarder\nbombardier\nbombardment\nbombardon\nbombast\nbombaster\nbombastic\nbombastically\nbombastry\nBombax\nBombay\nbombazet\nbombazine\nbombed\nbomber\nbombiccite\nBombidae\nbombilate\nbombilation\nBombinae\nbombinate\nbombination\nbombo\nbombola\nbombonne\nbombous\nbombproof\nbombshell\nbombsight\nBombus\nbombycid\nBombycidae\nbombyciform\nBombycilla\nBombycillidae\nBombycina\nbombycine\nBombyliidae\nBombyx\nBon\nbon\nbonaci\nbonagh\nbonaght\nbonair\nbonairly\nbonairness\nbonally\nbonang\nbonanza\nBonapartean\nBonapartism\nBonapartist\nBonasa\nbonasus\nbonaventure\nBonaveria\nbonavist\nBonbo\nbonbon\nbonce\nbond\nbondage\nbondager\nbondar\nbonded\nBondelswarts\nbonder\nbonderman\nbondfolk\nbondholder\nbondholding\nbonding\nbondless\nbondman\nbondmanship\nbondsman\nbondstone\nbondswoman\nbonduc\nbondwoman\nbone\nboneache\nbonebinder\nboneblack\nbonebreaker\nboned\nbonedog\nbonefish\nboneflower\nbonehead\nboneheaded\nboneless\nbonelessly\nbonelessness\nbonelet\nbonelike\nBonellia\nboner\nboneset\nbonesetter\nbonesetting\nboneshaker\nboneshaw\nbonetail\nbonewood\nbonework\nbonewort\nBoney\nbonfire\nbong\nBongo\nbongo\nbonhomie\nBoni\nboniata\nBoniface\nbonification\nboniform\nbonify\nboniness\nboninite\nbonitarian\nbonitary\nbonito\nbonk\nbonnaz\nbonnet\nbonneted\nbonneter\nbonnethead\nbonnetless\nbonnetlike\nbonnetman\nbonnibel\nBonnie\nbonnily\nbonniness\nBonny\nbonny\nbonnyclabber\nbonnyish\nbonnyvis\nBononian\nbonsai\nbonspiel\nbontebok\nbontebuck\nbontequagga\nBontok\nbonus\nbonxie\nbony\nbonyfish\nbonze\nbonzer\nbonzery\nbonzian\nboo\nboob\nboobery\nboobily\nboobook\nbooby\nboobyalla\nboobyish\nboobyism\nbood\nboodie\nboodle\nboodledom\nboodleism\nboodleize\nboodler\nboody\nboof\nbooger\nboogiewoogie\nboohoo\nboojum\nbook\nbookable\nbookbinder\nbookbindery\nbookbinding\nbookboard\nbookcase\nbookcraft\nbookdealer\nbookdom\nbooked\nbooker\nbookery\nbookfold\nbookful\nbookholder\nbookhood\nbookie\nbookiness\nbooking\nbookish\nbookishly\nbookishness\nbookism\nbookkeeper\nbookkeeping\nbookland\nbookless\nbooklet\nbooklike\nbookling\nbooklore\nbooklover\nbookmaker\nbookmaking\nBookman\nbookman\nbookmark\nbookmarker\nbookmate\nbookmobile\nbookmonger\nbookplate\nbookpress\nbookrack\nbookrest\nbookroom\nbookseller\nbooksellerish\nbooksellerism\nbookselling\nbookshelf\nbookshop\nbookstack\nbookstall\nbookstand\nbookstore\nbookward\nbookwards\nbookways\nbookwise\nbookwork\nbookworm\nbookwright\nbooky\nbool\nBoolian\nbooly\nboolya\nboom\nboomable\nboomage\nboomah\nboomboat\nboomdas\nboomer\nboomerang\nbooming\nboomingly\nboomless\nboomlet\nboomorah\nboomslang\nboomslange\nboomster\nboomy\nboon\nboondock\nboondocks\nboondoggle\nboondoggler\nBoone\nboonfellow\nboongary\nboonk\nboonless\nBoophilus\nboopis\nboor\nboorish\nboorishly\nboorishness\nboort\nboose\nboost\nbooster\nboosterism\nboosy\nboot\nbootblack\nbootboy\nbooted\nbootee\nbooter\nbootery\nBootes\nbootful\nbooth\nboother\nBoothian\nboothite\nbootholder\nboothose\nBootid\nbootied\nbootikin\nbooting\nbootjack\nbootlace\nbootleg\nbootlegger\nbootlegging\nbootless\nbootlessly\nbootlessness\nbootlick\nbootlicker\nbootmaker\nbootmaking\nboots\nbootstrap\nbooty\nbootyless\nbooze\nboozed\nboozer\nboozily\nbooziness\nboozy\nbop\nbopeep\nboppist\nbopyrid\nBopyridae\nbopyridian\nBopyrus\nbor\nbora\nborable\nborachio\nboracic\nboraciferous\nboracous\nborage\nBoraginaceae\nboraginaceous\nBorago\nBorak\nborak\nboral\nBoran\nBorana\nBorani\nborasca\nborasque\nBorassus\nborate\nborax\nBorboridae\nBorborus\nborborygmic\nborborygmus\nbord\nbordage\nbordar\nbordarius\nBordeaux\nbordel\nbordello\nborder\nbordered\nborderer\nBorderies\nbordering\nborderism\nborderland\nborderlander\nborderless\nborderline\nbordermark\nBorderside\nbordroom\nbordure\nbordured\nbore\nboreable\nboread\nBoreades\nboreal\nborealis\nborean\nBoreas\nborecole\nboredom\nboree\nboreen\nboregat\nborehole\nBoreiad\nboreism\nborele\nborer\nboresome\nBoreus\nborg\nborgh\nborghalpenny\nBorghese\nborh\nboric\nborickite\nboride\nborine\nboring\nboringly\nboringness\nBorinqueno\nBoris\nborish\nborism\nbority\nborize\nborlase\nborn\nborne\nBornean\nBorneo\nborneol\nborning\nbornite\nbornitic\nbornyl\nBoro\nboro\nBorocaine\nborocalcite\nborocarbide\nborocitrate\nborofluohydric\nborofluoric\nborofluoride\nborofluorin\nboroglycerate\nboroglyceride\nboroglycerine\nborolanite\nboron\nboronatrocalcite\nBoronia\nboronic\nborophenol\nborophenylic\nBororo\nBororoan\nborosalicylate\nborosalicylic\nborosilicate\nborosilicic\nborotungstate\nborotungstic\nborough\nboroughlet\nboroughmaster\nboroughmonger\nboroughmongering\nboroughmongery\nboroughship\nborowolframic\nborracha\nborrel\nBorrelia\nBorrelomycetaceae\nBorreria\nBorrichia\nBorromean\nBorrovian\nborrow\nborrowable\nborrower\nborrowing\nborsch\nborscht\nborsholder\nborsht\nborstall\nbort\nbortsch\nborty\nbortz\nBoruca\nBorussian\nborwort\nboryl\nBorzicactus\nborzoi\nBos\nBosc\nboscage\nbosch\nboschbok\nBoschneger\nboschvark\nboschveld\nbose\nBoselaphus\nboser\nbosh\nBoshas\nbosher\nBosjesman\nbosjesman\nbosk\nbosker\nbosket\nboskiness\nbosky\nbosn\nBosniac\nBosniak\nBosnian\nBosnisch\nbosom\nbosomed\nbosomer\nbosomy\nBosporan\nBosporanic\nBosporian\nbosporus\nboss\nbossage\nbossdom\nbossed\nbosselated\nbosselation\nbosser\nbosset\nbossiness\nbossing\nbossism\nbosslet\nbossship\nbossy\nbostangi\nbostanji\nbosthoon\nBoston\nboston\nBostonese\nBostonian\nbostonite\nbostrychid\nBostrychidae\nbostrychoid\nbostrychoidal\nbostryx\nbosun\nBoswellia\nBoswellian\nBoswelliana\nBoswellism\nBoswellize\nbot\nbota\nbotanic\nbotanical\nbotanically\nbotanist\nbotanize\nbotanizer\nbotanomancy\nbotanophile\nbotanophilist\nbotany\nbotargo\nBotaurinae\nBotaurus\nbotch\nbotched\nbotchedly\nbotcher\nbotcherly\nbotchery\nbotchily\nbotchiness\nbotchka\nbotchy\nbote\nBotein\nbotella\nboterol\nbotfly\nboth\nbother\nbotheration\nbotherer\nbotherheaded\nbotherment\nbothersome\nbothlike\nBothnian\nBothnic\nbothrenchyma\nBothriocephalus\nBothriocidaris\nBothriolepis\nbothrium\nBothrodendron\nbothropic\nBothrops\nbothros\nbothsided\nbothsidedness\nbothway\nbothy\nBotocudo\nbotonee\nbotong\nBotrychium\nBotrydium\nBotryllidae\nBotryllus\nbotryogen\nbotryoid\nbotryoidal\nbotryoidally\nbotryolite\nBotryomyces\nbotryomycoma\nbotryomycosis\nbotryomycotic\nBotryopteriaceae\nbotryopterid\nBotryopteris\nbotryose\nbotryotherapy\nBotrytis\nbott\nbottekin\nBotticellian\nbottine\nbottle\nbottlebird\nbottled\nbottleflower\nbottleful\nbottlehead\nbottleholder\nbottlelike\nbottlemaker\nbottlemaking\nbottleman\nbottleneck\nbottlenest\nbottlenose\nbottler\nbottling\nbottom\nbottomchrome\nbottomed\nbottomer\nbottoming\nbottomless\nbottomlessly\nbottomlessness\nbottommost\nbottomry\nbottstick\nbotuliform\nbotulin\nbotulinum\nbotulism\nbotulismus\nbouchal\nbouchaleen\nboucharde\nbouche\nboucher\nboucherism\nboucherize\nbouchette\nboud\nboudoir\nbouffancy\nbouffant\nBougainvillaea\nBougainvillea\nBougainvillia\nBougainvilliidae\nbougar\nbouge\nbouget\nbough\nboughed\nboughless\nboughpot\nbought\nboughten\nboughy\nbougie\nbouillabaisse\nbouillon\nbouk\nboukit\nboulangerite\nBoulangism\nBoulangist\nboulder\nboulderhead\nbouldering\nbouldery\nboule\nboulevard\nboulevardize\nboultel\nboulter\nboulterer\nboun\nbounce\nbounceable\nbounceably\nbouncer\nbouncing\nbouncingly\nbound\nboundable\nboundary\nbounded\nboundedly\nboundedness\nbounden\nbounder\nbounding\nboundingly\nboundless\nboundlessly\nboundlessness\nboundly\nboundness\nbounteous\nbounteously\nbounteousness\nbountied\nbountiful\nbountifully\nbountifulness\nbountith\nbountree\nbounty\nbountyless\nbouquet\nbourasque\nBourbon\nbourbon\nBourbonesque\nBourbonian\nBourbonism\nBourbonist\nbourbonize\nbourd\nbourder\nbourdon\nbourette\nbourg\nbourgeois\nbourgeoise\nbourgeoisie\nbourgeoisitic\nBourignian\nBourignianism\nBourignianist\nBourignonism\nBourignonist\nbourn\nbournless\nbournonite\nbourock\nBourout\nbourse\nbourtree\nbouse\nbouser\nBoussingaultia\nboussingaultite\nboustrophedon\nboustrophedonic\nbousy\nbout\nboutade\nBouteloua\nbouto\nboutonniere\nboutylka\nBouvardia\nbouw\nbovarism\nbovarysm\nbovate\nbovenland\nbovicide\nboviculture\nbovid\nBovidae\nboviform\nbovine\nbovinely\nbovinity\nBovista\nbovoid\nbovovaccination\nbovovaccine\nbow\nbowable\nbowback\nbowbells\nbowbent\nbowboy\nBowdichia\nbowdlerism\nbowdlerization\nbowdlerize\nbowed\nbowedness\nbowel\nboweled\nbowelless\nbowellike\nbowels\nbowenite\nbower\nbowerbird\nbowerlet\nbowermaiden\nbowermay\nbowerwoman\nBowery\nbowery\nBoweryish\nbowet\nbowfin\nbowgrace\nbowhead\nbowie\nbowieful\nbowing\nbowingly\nbowk\nbowkail\nbowker\nbowknot\nbowl\nbowla\nbowleg\nbowlegged\nbowleggedness\nbowler\nbowless\nbowlful\nbowlike\nbowline\nbowling\nbowllike\nbowlmaker\nbowls\nbowly\nbowmaker\nbowmaking\nbowman\nbowpin\nbowralite\nbowshot\nbowsprit\nbowstave\nbowstring\nbowstringed\nbowwoman\nbowwood\nbowwort\nbowwow\nbowyer\nboxberry\nboxboard\nboxbush\nboxcar\nboxen\nBoxer\nboxer\nBoxerism\nboxfish\nboxful\nboxhaul\nboxhead\nboxing\nboxkeeper\nboxlike\nboxmaker\nboxmaking\nboxman\nboxthorn\nboxty\nboxwallah\nboxwood\nboxwork\nboxy\nboy\nboyang\nboyar\nboyard\nboyardism\nboyardom\nboyarism\nBoyce\nboycott\nboycottage\nboycotter\nboycottism\nBoyd\nboydom\nboyer\nboyhood\nboyish\nboyishly\nboyishness\nboyism\nboyla\nboylike\nboyology\nboysenberry\nboyship\nboza\nbozal\nbozo\nbozze\nbra\nbrab\nbrabagious\nbrabant\nBrabanter\nBrabantine\nbrabble\nbrabblement\nbrabbler\nbrabblingly\nBrabejum\nbraca\nbraccate\nbraccia\nbracciale\nbraccianite\nbraccio\nbrace\nbraced\nbracelet\nbraceleted\nbracer\nbracero\nbraces\nbrach\nBrachelytra\nbrachelytrous\nbracherer\nbrachering\nbrachet\nbrachial\nbrachialgia\nbrachialis\nBrachiata\nbrachiate\nbrachiation\nbrachiator\nbrachiferous\nbrachigerous\nBrachinus\nbrachiocephalic\nbrachiocrural\nbrachiocubital\nbrachiocyllosis\nbrachiofacial\nbrachiofaciolingual\nbrachioganoid\nBrachioganoidei\nbrachiolaria\nbrachiolarian\nbrachiopod\nBrachiopoda\nbrachiopode\nbrachiopodist\nbrachiopodous\nbrachioradial\nbrachioradialis\nbrachiorrhachidian\nbrachiorrheuma\nbrachiosaur\nBrachiosaurus\nbrachiostrophosis\nbrachiotomy\nbrachistocephali\nbrachistocephalic\nbrachistocephalous\nbrachistocephaly\nbrachistochrone\nbrachistochronic\nbrachistochronous\nbrachium\nbrachtmema\nbrachyaxis\nbrachycardia\nbrachycatalectic\nbrachycephal\nbrachycephalic\nbrachycephalism\nbrachycephalization\nbrachycephalize\nbrachycephalous\nbrachycephaly\nBrachycera\nbrachyceral\nbrachyceric\nbrachycerous\nbrachychronic\nbrachycnemic\nBrachycome\nbrachycranial\nbrachydactyl\nbrachydactylic\nbrachydactylism\nbrachydactylous\nbrachydactyly\nbrachydiagonal\nbrachydodrome\nbrachydodromous\nbrachydomal\nbrachydomatic\nbrachydome\nbrachydont\nbrachydontism\nbrachyfacial\nbrachyglossal\nbrachygnathia\nbrachygnathism\nbrachygnathous\nbrachygrapher\nbrachygraphic\nbrachygraphical\nbrachygraphy\nbrachyhieric\nbrachylogy\nbrachymetropia\nbrachymetropic\nBrachyoura\nbrachyphalangia\nBrachyphyllum\nbrachypinacoid\nbrachypinacoidal\nbrachypleural\nbrachypnea\nbrachypodine\nbrachypodous\nbrachyprism\nbrachyprosopic\nbrachypterous\nbrachypyramid\nbrachyrrhinia\nbrachysclereid\nbrachyskelic\nbrachysm\nbrachystaphylic\nBrachystegia\nbrachystochrone\nBrachystomata\nbrachystomatous\nbrachystomous\nbrachytic\nbrachytypous\nBrachyura\nbrachyural\nbrachyuran\nbrachyuranic\nbrachyure\nbrachyurous\nBrachyurus\nbracing\nbracingly\nbracingness\nbrack\nbrackebuschite\nbracken\nbrackened\nbracker\nbracket\nbracketing\nbracketwise\nbrackish\nbrackishness\nbrackmard\nbracky\nBracon\nbraconid\nBraconidae\nbract\nbractea\nbracteal\nbracteate\nbracted\nbracteiform\nbracteolate\nbracteole\nbracteose\nbractless\nbractlet\nBrad\nbrad\nbradawl\nBradbury\nBradburya\nbradenhead\nBradford\nBradley\nbradmaker\nBradshaw\nbradsot\nbradyacousia\nbradycardia\nbradycauma\nbradycinesia\nbradycrotic\nbradydactylia\nbradyesthesia\nbradyglossia\nbradykinesia\nbradykinetic\nbradylalia\nbradylexia\nbradylogia\nbradynosus\nbradypepsia\nbradypeptic\nbradyphagia\nbradyphasia\nbradyphemia\nbradyphrasia\nbradyphrenia\nbradypnea\nbradypnoea\nbradypod\nbradypode\nBradypodidae\nbradypodoid\nBradypus\nbradyseism\nbradyseismal\nbradyseismic\nbradyseismical\nbradyseismism\nbradyspermatism\nbradysphygmia\nbradystalsis\nbradyteleocinesia\nbradyteleokinesis\nbradytocia\nbradytrophic\nbradyuria\nbrae\nbraeface\nbraehead\nbraeman\nbraeside\nbrag\nbraggardism\nbraggart\nbraggartism\nbraggartly\nbraggartry\nbraggat\nbragger\nbraggery\nbragget\nbragging\nbraggingly\nbraggish\nbraggishly\nBragi\nbragite\nbragless\nbraguette\nBrahm\nBrahma\nbrahmachari\nBrahmahood\nBrahmaic\nBrahman\nBrahmana\nBrahmanaspati\nBrahmanda\nBrahmaness\nBrahmanhood\nBrahmani\nBrahmanic\nBrahmanical\nBrahmanism\nBrahmanist\nBrahmanistic\nBrahmanize\nBrahmany\nBrahmi\nBrahmic\nBrahmin\nBrahminic\nBrahminism\nBrahmoism\nBrahmsian\nBrahmsite\nBrahui\nbraid\nbraided\nbraider\nbraiding\nBraidism\nBraidist\nbrail\nBraille\nBraillist\nbrain\nbrainache\nbraincap\nbraincraft\nbrainer\nbrainfag\nbrainge\nbraininess\nbrainless\nbrainlessly\nbrainlessness\nbrainlike\nbrainpan\nbrains\nbrainsick\nbrainsickly\nbrainsickness\nbrainstone\nbrainward\nbrainwash\nbrainwasher\nbrainwashing\nbrainwater\nbrainwood\nbrainwork\nbrainworker\nbrainy\nbraird\nbraireau\nbrairo\nbraise\nbrake\nbrakeage\nbrakehand\nbrakehead\nbrakeless\nbrakeload\nbrakemaker\nbrakemaking\nbrakeman\nbraker\nbrakeroot\nbrakesman\nbrakie\nbraky\nBram\nBramantesque\nBramantip\nbramble\nbrambleberry\nbramblebush\nbrambled\nbrambling\nbrambly\nbrambrack\nBramia\nbran\nbrancard\nbranch\nbranchage\nbranched\nBranchellion\nbrancher\nbranchery\nbranchful\nbranchi\nbranchia\nbranchiae\nbranchial\nBranchiata\nbranchiate\nbranchicolous\nbranchiferous\nbranchiform\nbranchihyal\nbranchiness\nbranching\nBranchiobdella\nbranchiocardiac\nbranchiogenous\nbranchiomere\nbranchiomeric\nbranchiomerism\nbranchiopallial\nbranchiopod\nBranchiopoda\nbranchiopodan\nbranchiopodous\nBranchiopulmonata\nbranchiopulmonate\nbranchiosaur\nBranchiosauria\nbranchiosaurian\nBranchiosaurus\nbranchiostegal\nBranchiostegidae\nbranchiostegite\nbranchiostegous\nBranchiostoma\nbranchiostomid\nBranchiostomidae\nBranchipodidae\nBranchipus\nbranchireme\nBranchiura\nbranchiurous\nbranchless\nbranchlet\nbranchlike\nbranchling\nbranchman\nbranchstand\nbranchway\nbranchy\nbrand\nbranded\nBrandenburg\nBrandenburger\nbrander\nbrandering\nBrandi\nbrandied\nbrandify\nbrandise\nbrandish\nbrandisher\nbrandisite\nbrandless\nbrandling\nBrandon\nbrandreth\nBrandy\nbrandy\nbrandyball\nbrandyman\nbrandywine\nbrangle\nbrangled\nbranglement\nbrangler\nbrangling\nbranial\nbrank\nbrankie\nbrankursine\nbranle\nbranner\nbrannerite\nbranny\nbransle\nbransolder\nbrant\nBranta\nbrantail\nbrantness\nBrasenia\nbrash\nbrashiness\nbrashness\nbrashy\nbrasiletto\nbrasque\nbrass\nbrassage\nbrassard\nbrassart\nBrassavola\nbrassbound\nbrassbounder\nbrasse\nbrasser\nbrasset\nBrassia\nbrassic\nBrassica\nBrassicaceae\nbrassicaceous\nbrassidic\nbrassie\nbrassiere\nbrassily\nbrassiness\nbrassish\nbrasslike\nbrassware\nbrasswork\nbrassworker\nbrassworks\nbrassy\nbrassylic\nbrat\nbratling\nbratstvo\nbrattach\nbrattice\nbratticer\nbratticing\nbrattie\nbrattish\nbrattishing\nbrattle\nbrauna\nBrauneberger\nBrauneria\nbraunite\nBrauronia\nBrauronian\nBrava\nbravade\nbravado\nbravadoism\nbrave\nbravehearted\nbravely\nbraveness\nbraver\nbravery\nbraving\nbravish\nbravo\nbravoite\nbravura\nbravuraish\nbraw\nbrawl\nbrawler\nbrawling\nbrawlingly\nbrawlsome\nbrawly\nbrawlys\nbrawn\nbrawned\nbrawnedness\nbrawner\nbrawnily\nbrawniness\nbrawny\nbraws\nbraxy\nbray\nbrayer\nbrayera\nbrayerin\nbraystone\nbraza\nbraze\nbrazen\nbrazenface\nbrazenfaced\nbrazenfacedly\nbrazenly\nbrazenness\nbrazer\nbrazera\nbrazier\nbraziery\nbrazil\nbrazilein\nbrazilette\nBrazilian\nbrazilin\nbrazilite\nbrazilwood\nbreach\nbreacher\nbreachful\nbreachy\nbread\nbreadbasket\nbreadberry\nbreadboard\nbreadbox\nbreadearner\nbreadearning\nbreaden\nbreadfruit\nbreadless\nbreadlessness\nbreadmaker\nbreadmaking\nbreadman\nbreadnut\nbreadroot\nbreadseller\nbreadstuff\nbreadth\nbreadthen\nbreadthless\nbreadthriders\nbreadthways\nbreadthwise\nbreadwinner\nbreadwinning\nbreaghe\nbreak\nbreakable\nbreakableness\nbreakably\nbreakage\nbreakaway\nbreakax\nbreakback\nbreakbones\nbreakdown\nbreaker\nbreakerman\nbreakfast\nbreakfaster\nbreakfastless\nbreaking\nbreakless\nbreakneck\nbreakoff\nbreakout\nbreakover\nbreakshugh\nbreakstone\nbreakthrough\nbreakup\nbreakwater\nbreakwind\nbream\nbreards\nbreast\nbreastband\nbreastbeam\nbreastbone\nbreasted\nbreaster\nbreastfeeding\nbreastful\nbreastheight\nbreasthook\nbreastie\nbreasting\nbreastless\nbreastmark\nbreastpiece\nbreastpin\nbreastplate\nbreastplow\nbreastrail\nbreastrope\nbreastsummer\nbreastweed\nbreastwise\nbreastwood\nbreastwork\nbreath\nbreathable\nbreathableness\nbreathe\nbreathed\nbreather\nbreathful\nbreathiness\nbreathing\nbreathingly\nbreathless\nbreathlessly\nbreathlessness\nbreathseller\nbreathy\nbreba\nbreccia\nbreccial\nbrecciated\nbrecciation\nbrecham\nBrechites\nbreck\nbrecken\nbred\nbredbergite\nbrede\nbredi\nbree\nbreech\nbreechblock\nbreechcloth\nbreechclout\nbreeched\nbreeches\nbreechesflower\nbreechesless\nbreeching\nbreechless\nbreechloader\nbreed\nbreedable\nbreedbate\nbreeder\nbreediness\nbreeding\nbreedy\nbreek\nbreekless\nbreekums\nbreeze\nbreezeful\nbreezeless\nbreezelike\nbreezeway\nbreezily\nbreeziness\nbreezy\nbregma\nbregmata\nbregmate\nbregmatic\nbrehon\nbrehonship\nbrei\nbreislakite\nbreithauptite\nbrekkle\nbrelaw\nbreloque\nbreme\nbremely\nbremeness\nBremia\nbremsstrahlung\nBrenda\nBrendan\nBrender\nbrennage\nBrent\nbrent\nBrenthis\nbrephic\nBrescian\nBret\nbret\nbretelle\nbretesse\nbreth\nbrethren\nBreton\nBretonian\nBretschneideraceae\nBrett\nbrett\nbrettice\nBretwalda\nBretwaldadom\nBretwaldaship\nbreunnerite\nbreva\nbreve\nbrevet\nbrevetcy\nbreviary\nbreviate\nbreviature\nbrevicaudate\nbrevicipitid\nBrevicipitidae\nbreviconic\nbrevier\nbrevifoliate\nbreviger\nbrevilingual\nbreviloquence\nbreviloquent\nbreviped\nbrevipen\nbrevipennate\nbreviradiate\nbrevirostral\nbrevirostrate\nBrevirostrines\nbrevit\nbrevity\nbrew\nbrewage\nbrewer\nbrewership\nbrewery\nbrewhouse\nbrewing\nbrewis\nbrewmaster\nbrewst\nbrewster\nbrewsterite\nbrey\nBrian\nbriar\nbriarberry\nBriard\nBriarean\nBriareus\nbriarroot\nbribe\nbribee\nbribegiver\nbribegiving\nbribemonger\nbriber\nbribery\nbribetaker\nbribetaking\nbribeworthy\nBribri\nbrichen\nbrichette\nbrick\nbrickbat\nbrickcroft\nbrickel\nbricken\nbrickfield\nbrickfielder\nbrickhood\nbricking\nbrickish\nbrickkiln\nbricklayer\nbricklaying\nbrickle\nbrickleness\nbricklike\nbrickliner\nbricklining\nbrickly\nbrickmaker\nbrickmaking\nbrickmason\nbrickset\nbricksetter\nbricktimber\nbrickwise\nbrickwork\nbricky\nbrickyard\nbricole\nbridal\nbridale\nbridaler\nbridally\nBride\nbride\nbridebed\nbridebowl\nbridecake\nbridechamber\nbridecup\nbridegod\nbridegroom\nbridegroomship\nbridehead\nbridehood\nbrideknot\nbridelace\nbrideless\nbridelike\nbridely\nbridemaid\nbridemaiden\nbridemaidship\nbrideship\nbridesmaid\nbridesmaiding\nbridesman\nbridestake\nbridewain\nbrideweed\nbridewell\nbridewort\nbridge\nbridgeable\nbridgeboard\nbridgebote\nbridgebuilder\nbridgebuilding\nbridged\nbridgehead\nbridgekeeper\nbridgeless\nbridgelike\nbridgemaker\nbridgemaking\nbridgeman\nbridgemaster\nbridgepot\nBridger\nbridger\nBridget\nbridgetree\nbridgeward\nbridgewards\nbridgeway\nbridgework\nbridging\nbridle\nbridled\nbridleless\nbridleman\nbridler\nbridling\nbridoon\nbrief\nbriefing\nbriefless\nbrieflessly\nbrieflessness\nbriefly\nbriefness\nbriefs\nbrier\nbrierberry\nbriered\nbrierroot\nbrierwood\nbriery\nbrieve\nbrig\nbrigade\nbrigadier\nbrigadiership\nbrigalow\nbrigand\nbrigandage\nbrigander\nbrigandine\nbrigandish\nbrigandishly\nbrigandism\nBrigantes\nBrigantia\nbrigantine\nbrigatry\nbrigbote\nbrigetty\nBriggs\nBriggsian\nBrighella\nBrighid\nbright\nbrighten\nbrightener\nbrightening\nBrighteyes\nbrighteyes\nbrightish\nbrightly\nbrightness\nbrightsmith\nbrightsome\nbrightsomeness\nbrightwork\nBrigid\nBrigittine\nbrill\nbrilliance\nbrilliancy\nbrilliandeer\nbrilliant\nbrilliantine\nbrilliantly\nbrilliantness\nbrilliantwise\nbrilliolette\nbrillolette\nbrills\nbrim\nbrimborion\nbrimborium\nbrimful\nbrimfully\nbrimfulness\nbriming\nbrimless\nbrimmed\nbrimmer\nbrimming\nbrimmingly\nbrimstone\nbrimstonewort\nbrimstony\nbrin\nbrindlish\nbrine\nbrinehouse\nbrineless\nbrineman\nbriner\nbring\nbringal\nbringall\nbringer\nbrininess\nbrinish\nbrinishness\nbrinjal\nbrinjarry\nbrink\nbrinkless\nbriny\nbrioche\nbriolette\nbrique\nbriquette\nbrisk\nbrisken\nbrisket\nbriskish\nbriskly\nbriskness\nbrisling\nbrisque\nbriss\nBrissotin\nBrissotine\nbristle\nbristlebird\nbristlecone\nbristled\nbristleless\nbristlelike\nbristler\nbristletail\nbristlewort\nbristliness\nbristly\nBristol\nbrisure\nbrit\nBritain\nBritannia\nBritannian\nBritannic\nBritannically\nbritchka\nbrith\nbrither\nBriticism\nBritish\nBritisher\nBritishhood\nBritishism\nBritishly\nBritishness\nBriton\nBritoness\nbritska\nBrittany\nbritten\nbrittle\nbrittlebush\nbrittlely\nbrittleness\nbrittlestem\nbrittlewood\nbrittlewort\nbrittling\nBriza\nbrizz\nbroach\nbroacher\nbroad\nbroadacre\nbroadax\nbroadbill\nBroadbrim\nbroadbrim\nbroadcast\nbroadcaster\nbroadcloth\nbroaden\nbroadhead\nbroadhearted\nbroadhorn\nbroadish\nbroadleaf\nbroadloom\nbroadly\nbroadmouth\nbroadness\nbroadpiece\nbroadshare\nbroadsheet\nbroadside\nbroadspread\nbroadsword\nbroadtail\nbroadthroat\nBroadway\nbroadway\nBroadwayite\nbroadways\nbroadwife\nbroadwise\nbrob\nBrobdingnag\nBrobdingnagian\nbrocade\nbrocaded\nbrocard\nbrocardic\nbrocatel\nbrocatello\nbroccoli\nbroch\nbrochan\nbrochant\nbrochantite\nbroche\nbrochette\nbrochidodromous\nbrocho\nbrochure\nbrock\nbrockage\nbrocked\nbrocket\nbrockle\nbrod\nbrodder\nbrodeglass\nbrodequin\nbroderer\nBrodiaea\nBrodie\nbrog\nbrogan\nbrogger\nbroggerite\nbroggle\nbrogue\nbrogueful\nbrogueneer\nbroguer\nbroguery\nbroguish\nbroider\nbroiderer\nbroideress\nbroidery\nbroigne\nbroil\nbroiler\nbroiling\nbroilingly\nbrokage\nbroke\nbroken\nbrokenhearted\nbrokenheartedly\nbrokenheartedness\nbrokenly\nbrokenness\nbroker\nbrokerage\nbrokeress\nbrokership\nbroking\nbrolga\nbroll\nbrolly\nbroma\nbromacetanilide\nbromacetate\nbromacetic\nbromacetone\nbromal\nbromalbumin\nbromamide\nbromargyrite\nbromate\nbromaurate\nbromauric\nbrombenzamide\nbrombenzene\nbrombenzyl\nbromcamphor\nbromcresol\nbrome\nbromeigon\nBromeikon\nbromeikon\nBromelia\nBromeliaceae\nbromeliaceous\nbromeliad\nbromelin\nbromellite\nbromethyl\nbromethylene\nbromgelatin\nbromhidrosis\nbromhydrate\nbromhydric\nBromian\nbromic\nbromide\nbromidic\nbromidically\nbromidrosis\nbrominate\nbromination\nbromindigo\nbromine\nbrominism\nbrominize\nbromiodide\nBromios\nbromism\nbromite\nBromius\nbromization\nbromize\nbromizer\nbromlite\nbromoacetone\nbromoaurate\nbromoauric\nbromobenzene\nbromobenzyl\nbromocamphor\nbromochlorophenol\nbromocresol\nbromocyanidation\nbromocyanide\nbromocyanogen\nbromoethylene\nbromoform\nbromogelatin\nbromohydrate\nbromohydrin\nbromoil\nbromoiodide\nbromoiodism\nbromoiodized\nbromoketone\nbromol\nbromomania\nbromomenorrhea\nbromomethane\nbromometric\nbromometrical\nbromometrically\nbromometry\nbromonaphthalene\nbromophenol\nbromopicrin\nbromopnea\nbromoprotein\nbromothymol\nbromous\nbromphenol\nbrompicrin\nbromthymol\nbromuret\nBromus\nbromvogel\nbromyrite\nbronc\nbronchadenitis\nbronchi\nbronchia\nbronchial\nbronchially\nbronchiarctia\nbronchiectasis\nbronchiectatic\nbronchiloquy\nbronchiocele\nbronchiocrisis\nbronchiogenic\nbronchiolar\nbronchiole\nbronchioli\nbronchiolitis\nbronchiolus\nbronchiospasm\nbronchiostenosis\nbronchitic\nbronchitis\nbronchium\nbronchoadenitis\nbronchoalveolar\nbronchoaspergillosis\nbronchoblennorrhea\nbronchocavernous\nbronchocele\nbronchocephalitis\nbronchoconstriction\nbronchoconstrictor\nbronchodilatation\nbronchodilator\nbronchoegophony\nbronchoesophagoscopy\nbronchogenic\nbronchohemorrhagia\nbroncholemmitis\nbroncholith\nbroncholithiasis\nbronchomotor\nbronchomucormycosis\nbronchomycosis\nbronchopathy\nbronchophonic\nbronchophony\nbronchophthisis\nbronchoplasty\nbronchoplegia\nbronchopleurisy\nbronchopneumonia\nbronchopneumonic\nbronchopulmonary\nbronchorrhagia\nbronchorrhaphy\nbronchorrhea\nbronchoscope\nbronchoscopic\nbronchoscopist\nbronchoscopy\nbronchospasm\nbronchostenosis\nbronchostomy\nbronchotetany\nbronchotome\nbronchotomist\nbronchotomy\nbronchotracheal\nbronchotyphoid\nbronchotyphus\nbronchovesicular\nbronchus\nbronco\nbroncobuster\nbrongniardite\nbronk\nBronteana\nbronteon\nbrontephobia\nBrontesque\nbronteum\nbrontide\nbrontogram\nbrontograph\nbrontolite\nbrontology\nbrontometer\nbrontophobia\nBrontops\nBrontosaurus\nbrontoscopy\nBrontotherium\nBrontozoum\nBronx\nbronze\nbronzed\nbronzelike\nbronzen\nbronzer\nbronzesmith\nbronzewing\nbronzify\nbronzine\nbronzing\nbronzite\nbronzitite\nbronzy\nbroo\nbrooch\nbrood\nbrooder\nbroodiness\nbrooding\nbroodingly\nbroodless\nbroodlet\nbroodling\nbroody\nbrook\nbrookable\nBrooke\nbrooked\nbrookflower\nbrookie\nbrookite\nbrookless\nbrooklet\nbrooklike\nbrooklime\nBrooklynite\nbrookside\nbrookweed\nbrooky\nbrool\nbroom\nbroombush\nbroomcorn\nbroomer\nbroommaker\nbroommaking\nbroomrape\nbroomroot\nbroomshank\nbroomstaff\nbroomstick\nbroomstraw\nbroomtail\nbroomweed\nbroomwood\nbroomwort\nbroomy\nbroon\nbroose\nbroozled\nbrose\nBrosimum\nbrosot\nbrosy\nbrot\nbrotan\nbrotany\nbroth\nbrothel\nbrotheler\nbrothellike\nbrothelry\nbrother\nbrotherhood\nbrotherless\nbrotherlike\nbrotherliness\nbrotherly\nbrothership\nBrotherton\nbrotherwort\nbrothy\nbrotocrystal\nBrotula\nbrotulid\nBrotulidae\nbrotuliform\nbrough\nbrougham\nbrought\nBroussonetia\nbrow\nbrowache\nBrowallia\nbrowallia\nbrowband\nbrowbeat\nbrowbeater\nbrowbound\nbrowden\nbrowed\nbrowis\nbrowless\nbrowman\nbrown\nbrownback\nbrowner\nBrownian\nbrownie\nbrowniness\nbrowning\nBrowningesque\nbrownish\nBrownism\nBrownist\nBrownistic\nBrownistical\nbrownly\nbrownness\nbrownout\nbrownstone\nbrowntail\nbrowntop\nbrownweed\nbrownwort\nbrowny\nbrowpiece\nbrowpost\nbrowse\nbrowser\nbrowsick\nbrowsing\nbrowst\nbruang\nBruce\nBrucella\nbrucellosis\nBruchidae\nBruchus\nbrucia\nbrucina\nbrucine\nbrucite\nbruckle\nbruckled\nbruckleness\nBructeri\nbrugh\nbrugnatellite\nbruin\nbruise\nbruiser\nbruisewort\nbruising\nbruit\nbruiter\nbruke\nBrule\nbrulee\nbrulyie\nbrulyiement\nbrumal\nBrumalia\nbrumby\nbrume\nBrummagem\nbrummagem\nbrumous\nbrumstane\nbrumstone\nbrunch\nBrunella\nBrunellia\nBrunelliaceae\nbrunelliaceous\nbrunet\nbrunetness\nbrunette\nbrunetteness\nBrunfelsia\nbrunissure\nBrunistic\nbrunneous\nBrunnichia\nBruno\nBrunonia\nBrunoniaceae\nBrunonian\nBrunonism\nBrunswick\nbrunswick\nbrunt\nbruscus\nbrush\nbrushable\nbrushball\nbrushbird\nbrushbush\nbrushed\nbrusher\nbrushes\nbrushet\nbrushful\nbrushiness\nbrushing\nbrushite\nbrushland\nbrushless\nbrushlessness\nbrushlet\nbrushlike\nbrushmaker\nbrushmaking\nbrushman\nbrushoff\nbrushproof\nbrushwood\nbrushwork\nbrushy\nbrusque\nbrusquely\nbrusqueness\nBrussels\nbrustle\nbrut\nBruta\nbrutage\nbrutal\nbrutalism\nbrutalist\nbrutalitarian\nbrutality\nbrutalization\nbrutalize\nbrutally\nbrute\nbrutedom\nbrutelike\nbrutely\nbruteness\nbrutification\nbrutify\nbruting\nbrutish\nbrutishly\nbrutishness\nbrutism\nbrutter\nBrutus\nbruzz\nBryaceae\nbryaceous\nBryales\nBryan\nBryanism\nBryanite\nBryanthus\nBryce\nbryogenin\nbryological\nbryologist\nbryology\nBryonia\nbryonidin\nbryonin\nbryony\nBryophyllum\nBryophyta\nbryophyte\nbryophytic\nBryozoa\nbryozoan\nbryozoon\nbryozoum\nBrython\nBrythonic\nBryum\nBu\nbu\nbual\nbuaze\nbub\nbuba\nbubal\nbubaline\nBubalis\nbubalis\nBubastid\nBubastite\nbubble\nbubbleless\nbubblement\nbubbler\nbubbling\nbubblingly\nbubblish\nbubbly\nbubby\nbubbybush\nBube\nbubinga\nBubo\nbubo\nbuboed\nbubonalgia\nbubonic\nBubonidae\nbubonocele\nbubukle\nbucare\nbucca\nbuccal\nbuccally\nbuccan\nbuccaneer\nbuccaneerish\nbuccate\nBuccellarius\nbuccina\nbuccinal\nbuccinator\nbuccinatory\nBuccinidae\nbucciniform\nbuccinoid\nBuccinum\nBucco\nbuccobranchial\nbuccocervical\nbuccogingival\nbuccolabial\nbuccolingual\nbucconasal\nBucconidae\nBucconinae\nbuccopharyngeal\nbuccula\nBucculatrix\nbucentaur\nBucephala\nBucephalus\nBuceros\nBucerotes\nBucerotidae\nBucerotinae\nBuchanan\nBuchanite\nbuchite\nBuchloe\nBuchmanism\nBuchmanite\nBuchnera\nbuchnerite\nbuchonite\nbuchu\nbuck\nbuckaroo\nbuckberry\nbuckboard\nbuckbrush\nbuckbush\nbucked\nbuckeen\nbucker\nbucket\nbucketer\nbucketful\nbucketing\nbucketmaker\nbucketmaking\nbucketman\nbuckety\nbuckeye\nbuckhorn\nbuckhound\nbuckie\nbucking\nbuckish\nbuckishly\nbuckishness\nbuckjump\nbuckjumper\nbucklandite\nbuckle\nbuckled\nbuckleless\nbuckler\nBuckleya\nbuckling\nbucklum\nbucko\nbuckplate\nbuckpot\nbuckra\nbuckram\nbucksaw\nbuckshee\nbuckshot\nbuckskin\nbuckskinned\nbuckstall\nbuckstay\nbuckstone\nbucktail\nbuckthorn\nbucktooth\nbuckwagon\nbuckwash\nbuckwasher\nbuckwashing\nbuckwheat\nbuckwheater\nbuckwheatlike\nBucky\nbucky\nbucoliast\nbucolic\nbucolical\nbucolically\nbucolicism\nBucorvinae\nBucorvus\nbucrane\nbucranium\nBud\nbud\nbuda\nbuddage\nbudder\nBuddh\nBuddha\nBuddhahood\nBuddhaship\nbuddhi\nBuddhic\nBuddhism\nBuddhist\nBuddhistic\nBuddhistical\nBuddhology\nbudding\nbuddle\nBuddleia\nbuddleman\nbuddler\nbuddy\nbudge\nbudger\nbudgeree\nbudgereegah\nbudgerigar\nbudgerow\nbudget\nbudgetary\nbudgeteer\nbudgeter\nbudgetful\nBudh\nbudless\nbudlet\nbudlike\nbudmash\nBudorcas\nbudtime\nBudukha\nBuduma\nbudwood\nbudworm\nbudzat\nBuettneria\nBuettneriaceae\nbufagin\nbuff\nbuffable\nbuffalo\nbuffaloback\nbuffball\nbuffcoat\nbuffed\nbuffer\nbuffet\nbuffeter\nbuffing\nbuffle\nbufflehead\nbufflehorn\nbuffont\nbuffoon\nbuffoonery\nbuffoonesque\nbuffoonish\nbuffoonism\nbuffware\nbuffy\nbufidin\nbufo\nBufonidae\nbufonite\nbufotalin\nbug\nbugaboo\nbugan\nbugbane\nbugbear\nbugbeardom\nbugbearish\nbugbite\nbugdom\nbugfish\nbugger\nbuggery\nbugginess\nbuggy\nbuggyman\nbughead\nbughouse\nBugi\nBuginese\nBuginvillaea\nbugle\nbugled\nbugler\nbuglet\nbugleweed\nbuglewort\nbugloss\nbugologist\nbugology\nbugproof\nbugre\nbugseed\nbugweed\nbugwort\nbuhl\nbuhr\nbuhrstone\nbuild\nbuildable\nbuilder\nbuilding\nbuildingless\nbuildress\nbuildup\nbuilt\nbuirdly\nbuisson\nbuist\nBukat\nBukeyef\nbukh\nBukidnon\nbukshi\nbulak\nBulanda\nbulb\nbulbaceous\nbulbar\nbulbed\nbulbiferous\nbulbiform\nbulbil\nBulbilis\nbulbilla\nbulbless\nbulblet\nbulblike\nbulbocapnin\nbulbocapnine\nbulbocavernosus\nbulbocavernous\nBulbochaete\nBulbocodium\nbulbomedullary\nbulbomembranous\nbulbonuclear\nBulbophyllum\nbulborectal\nbulbose\nbulbospinal\nbulbotuber\nbulbous\nbulbul\nbulbule\nbulby\nbulchin\nBulgar\nBulgari\nBulgarian\nBulgaric\nBulgarophil\nbulge\nbulger\nbulginess\nbulgy\nbulimia\nbulimiac\nbulimic\nbulimiform\nbulimoid\nBulimulidae\nBulimus\nbulimy\nbulk\nbulked\nbulker\nbulkhead\nbulkheaded\nbulkily\nbulkiness\nbulkish\nbulky\nbull\nbulla\nbullace\nbullamacow\nbullan\nbullary\nbullate\nbullated\nbullation\nbullback\nbullbaiting\nbullbat\nbullbeggar\nbullberry\nbullbird\nbullboat\nbullcart\nbullcomber\nbulldog\nbulldogged\nbulldoggedness\nbulldoggy\nbulldogism\nbulldoze\nbulldozer\nbuller\nbullet\nbulleted\nbullethead\nbulletheaded\nbulletheadedness\nbulletin\nbulletless\nbulletlike\nbulletmaker\nbulletmaking\nbulletproof\nbulletwood\nbullety\nbullfeast\nbullfight\nbullfighter\nbullfighting\nbullfinch\nbullfist\nbullflower\nbullfoot\nbullfrog\nbullhead\nbullheaded\nbullheadedly\nbullheadedness\nbullhide\nbullhoof\nbullhorn\nBullidae\nbulliform\nbullimong\nbulling\nbullion\nbullionism\nbullionist\nbullionless\nbullish\nbullishly\nbullishness\nbullism\nbullit\nbullneck\nbullnose\nbullnut\nbullock\nbullocker\nBullockite\nbullockman\nbullocky\nBullom\nbullous\nbullpates\nbullpoll\nbullpout\nbullskin\nbullsticker\nbullsucker\nbullswool\nbulltoad\nbullule\nbullweed\nbullwhack\nbullwhacker\nbullwhip\nbullwort\nbully\nbullyable\nbullydom\nbullyhuff\nbullying\nbullyism\nbullyrag\nbullyragger\nbullyragging\nbullyrook\nbulrush\nbulrushlike\nbulrushy\nbulse\nbult\nbulter\nbultey\nbultong\nbultow\nbulwand\nbulwark\nbum\nbumbailiff\nbumbailiffship\nbumbarge\nbumbaste\nbumbaze\nbumbee\nbumbershoot\nbumble\nbumblebee\nbumbleberry\nBumbledom\nbumblefoot\nbumblekite\nbumblepuppy\nbumbler\nbumbo\nbumboat\nbumboatman\nbumboatwoman\nbumclock\nBumelia\nbumicky\nbummalo\nbummaree\nbummed\nbummer\nbummerish\nbummie\nbumming\nbummler\nbummock\nbump\nbumpee\nbumper\nbumperette\nbumpily\nbumpiness\nbumping\nbumpingly\nbumpkin\nbumpkinet\nbumpkinish\nbumpkinly\nbumpology\nbumptious\nbumptiously\nbumptiousness\nbumpy\nbumtrap\nbumwood\nbun\nBuna\nbuna\nbuncal\nbunce\nbunch\nbunchberry\nbuncher\nbunchflower\nbunchily\nbunchiness\nbunchy\nbuncombe\nbund\nBunda\nBundahish\nBundeli\nbunder\nBundestag\nbundle\nbundler\nbundlerooted\nbundlet\nbundobust\nbundook\nBundu\nbundweed\nbundy\nbunemost\nbung\nBunga\nbungaloid\nbungalow\nbungarum\nBungarus\nbungee\nbungerly\nbungey\nbungfu\nbungfull\nbunghole\nbungle\nbungler\nbunglesome\nbungling\nbunglingly\nbungmaker\nbungo\nbungwall\nbungy\nBuninahua\nbunion\nbunk\nbunker\nbunkerman\nbunkery\nbunkhouse\nbunkie\nbunkload\nbunko\nbunkum\nbunnell\nbunny\nbunnymouth\nbunodont\nBunodonta\nbunolophodont\nBunomastodontidae\nbunoselenodont\nbunsenite\nbunt\nbuntal\nbunted\nBunter\nbunter\nbunting\nbuntline\nbunton\nbunty\nbunya\nbunyah\nbunyip\nBunyoro\nbuoy\nbuoyage\nbuoyance\nbuoyancy\nbuoyant\nbuoyantly\nbuoyantness\nBuphaga\nbuphthalmia\nbuphthalmic\nBuphthalmum\nbupleurol\nBupleurum\nbuplever\nbuprestid\nBuprestidae\nbuprestidan\nBuprestis\nbur\nburan\nburao\nBurbank\nburbank\nburbankian\nBurbankism\nburbark\nBurberry\nburble\nburbler\nburbly\nburbot\nburbush\nburd\nburdalone\nburden\nburdener\nburdenless\nburdenous\nburdensome\nburdensomely\nburdensomeness\nburdie\nBurdigalian\nburdock\nburdon\nbure\nbureau\nbureaucracy\nbureaucrat\nbureaucratic\nbureaucratical\nbureaucratically\nbureaucratism\nbureaucratist\nbureaucratization\nbureaucratize\nbureaux\nburel\nburele\nburet\nburette\nburfish\nburg\nburgage\nburgality\nburgall\nburgee\nburgensic\nburgeon\nburgess\nburgessdom\nburggrave\nburgh\nburghal\nburghalpenny\nburghbote\nburghemot\nburgher\nburgherage\nburgherdom\nburgheress\nburgherhood\nburghermaster\nburghership\nburghmaster\nburghmoot\nburglar\nburglarious\nburglariously\nburglarize\nburglarproof\nburglary\nburgle\nburgomaster\nburgomastership\nburgonet\nburgoo\nburgoyne\nburgrave\nburgraviate\nburgul\nBurgundian\nBurgundy\nburgus\nburgware\nburhead\nBurhinidae\nBurhinus\nBuri\nburi\nburial\nburian\nBuriat\nburied\nburier\nburin\nburinist\nburion\nburiti\nburka\nburke\nburker\nburkundaz\nburl\nburlap\nburled\nburler\nburlesque\nburlesquely\nburlesquer\nburlet\nburletta\nBurley\nburlily\nburliness\nBurlington\nburly\nBurman\nBurmannia\nBurmanniaceae\nburmanniaceous\nBurmese\nburmite\nburn\nburnable\nburnbeat\nburned\nburner\nburnet\nburnetize\nburnfire\nburnie\nburniebee\nburning\nburningly\nburnish\nburnishable\nburnisher\nburnishing\nburnishment\nburnoose\nburnoosed\nburnous\nburnout\nburnover\nBurnsian\nburnside\nburnsides\nburnt\nburntweed\nburnut\nburnwood\nburny\nburo\nburp\nburr\nburrah\nburrawang\nburred\nburrel\nburrer\nburrgrailer\nburring\nburrish\nburrito\nburrknot\nburro\nburrobrush\nburrow\nburroweed\nburrower\nburrowstown\nburry\nbursa\nbursal\nbursar\nbursarial\nbursarship\nbursary\nbursate\nbursattee\nbursautee\nburse\nburseed\nBursera\nBurseraceae\nBurseraceous\nbursicle\nbursiculate\nbursiform\nbursitis\nburst\nburster\nburstwort\nburt\nburthenman\nburton\nburtonization\nburtonize\nburucha\nBurushaski\nBurut\nburweed\nbury\nburying\nbus\nBusaos\nbusby\nbuscarl\nbuscarle\nbush\nbushbeater\nbushbuck\nbushcraft\nbushed\nbushel\nbusheler\nbushelful\nbushelman\nbushelwoman\nbusher\nbushfighter\nbushfighting\nbushful\nbushhammer\nbushi\nbushily\nbushiness\nbushing\nbushland\nbushless\nbushlet\nbushlike\nbushmaker\nbushmaking\nBushman\nbushmanship\nbushmaster\nbushment\nBushongo\nbushranger\nbushranging\nbushrope\nbushveld\nbushwa\nbushwhack\nbushwhacker\nbushwhacking\nbushwife\nbushwoman\nbushwood\nbushy\nbusied\nbusily\nbusine\nbusiness\nbusinesslike\nbusinesslikeness\nbusinessman\nbusinesswoman\nbusk\nbusked\nbusker\nbusket\nbuskin\nbuskined\nbuskle\nbusky\nbusman\nbuss\nbusser\nbussock\nbussu\nbust\nbustard\nbusted\nbustee\nbuster\nbusthead\nbustic\nbusticate\nbustle\nbustled\nbustler\nbustling\nbustlingly\nbusy\nbusybodied\nbusybody\nbusybodyish\nbusybodyism\nbusybodyness\nBusycon\nbusyhead\nbusying\nbusyish\nbusyness\nbusywork\nbut\nbutadiene\nbutadiyne\nbutanal\nbutane\nbutanoic\nbutanol\nbutanolid\nbutanolide\nbutanone\nbutch\nbutcher\nbutcherbird\nbutcherdom\nbutcherer\nbutcheress\nbutchering\nbutcherless\nbutcherliness\nbutcherly\nbutcherous\nbutchery\nBute\nButea\nbutein\nbutene\nbutenyl\nButeo\nbuteonine\nbutic\nbutine\nButler\nbutler\nbutlerage\nbutlerdom\nbutleress\nbutlerism\nbutlerlike\nbutlership\nbutlery\nbutment\nButomaceae\nbutomaceous\nButomus\nbutoxy\nbutoxyl\nButsu\nbutt\nbutte\nbutter\nbutteraceous\nbutterback\nbutterball\nbutterbill\nbutterbird\nbutterbox\nbutterbump\nbutterbur\nbutterbush\nbuttercup\nbuttered\nbutterfat\nbutterfingered\nbutterfingers\nbutterfish\nbutterflower\nbutterfly\nbutterflylike\nbutterhead\nbutterine\nbutteriness\nbutteris\nbutterjags\nbutterless\nbutterlike\nbuttermaker\nbuttermaking\nbutterman\nbuttermilk\nbuttermonger\nbuttermouth\nbutternose\nbutternut\nbutterroot\nbutterscotch\nbutterweed\nbutterwife\nbutterwoman\nbutterworker\nbutterwort\nbutterwright\nbuttery\nbutteryfingered\nbuttgenbachite\nbutting\nbuttinsky\nbuttle\nbuttock\nbuttocked\nbuttocker\nbutton\nbuttonball\nbuttonbur\nbuttonbush\nbuttoned\nbuttoner\nbuttonhold\nbuttonholder\nbuttonhole\nbuttonholer\nbuttonhook\nbuttonless\nbuttonlike\nbuttonmold\nbuttons\nbuttonweed\nbuttonwood\nbuttony\nbuttress\nbuttressless\nbuttresslike\nbuttstock\nbuttwoman\nbuttwood\nbutty\nbuttyman\nbutyl\nbutylamine\nbutylation\nbutylene\nbutylic\nButyn\nbutyne\nbutyr\nbutyraceous\nbutyral\nbutyraldehyde\nbutyrate\nbutyric\nbutyrically\nbutyrin\nbutyrinase\nbutyrochloral\nbutyrolactone\nbutyrometer\nbutyrometric\nbutyrone\nbutyrous\nbutyrousness\nbutyryl\nBuxaceae\nbuxaceous\nBuxbaumia\nBuxbaumiaceae\nbuxerry\nbuxom\nbuxomly\nbuxomness\nBuxus\nbuy\nbuyable\nbuyer\nBuyides\nbuzane\nbuzylene\nbuzz\nbuzzard\nbuzzardlike\nbuzzardly\nbuzzer\nbuzzerphone\nbuzzgloak\nbuzzies\nbuzzing\nbuzzingly\nbuzzle\nbuzzwig\nbuzzy\nby\nByblidaceae\nByblis\nbycoket\nbye\nbyee\nbyegaein\nbyeman\nbyepath\nbyerite\nbyerlite\nbyestreet\nbyeworker\nbyeworkman\nbygane\nbyganging\nbygo\nbygoing\nbygone\nbyhand\nbylaw\nbylawman\nbyname\nbynedestin\nBynin\nbyon\nbyordinar\nbyordinary\nbyous\nbyously\nbypass\nbypasser\nbypast\nbypath\nbyplay\nbyre\nbyreman\nbyrewards\nbyrewoman\nbyrlaw\nbyrlawman\nbyrnie\nbyroad\nByron\nByronesque\nByronian\nByroniana\nByronic\nByronically\nByronics\nByronish\nByronism\nByronist\nByronite\nByronize\nbyrrus\nByrsonima\nbyrthynsak\nBysacki\nbysen\nbysmalith\nbyspell\nbyssaceous\nbyssal\nbyssiferous\nbyssin\nbyssine\nbyssinosis\nbyssogenous\nbyssoid\nbyssolite\nbyssus\nbystander\nbystreet\nbyth\nbytime\nbytownite\nbytownitite\nbywalk\nbywalker\nbyway\nbywoner\nbyword\nbywork\nByzantian\nByzantine\nByzantinesque\nByzantinism\nByzantinize\nC\nc\nca\ncaam\ncaama\ncaaming\ncaapeba\ncaatinga\ncab\ncaba\ncabaan\ncaback\ncabaho\ncabal\ncabala\ncabalassou\ncabaletta\ncabalic\ncabalism\ncabalist\ncabalistic\ncabalistical\ncabalistically\ncaballer\ncaballine\ncaban\ncabana\ncabaret\ncabas\ncabasset\ncabassou\ncabbage\ncabbagehead\ncabbagewood\ncabbagy\ncabber\ncabble\ncabbler\ncabby\ncabda\ncabdriver\ncabdriving\ncabellerote\ncaber\ncabernet\ncabestro\ncabezon\ncabilliau\ncabin\nCabinda\ncabinet\ncabinetmaker\ncabinetmaking\ncabinetry\ncabinetwork\ncabinetworker\ncabinetworking\ncabio\nCabirean\nCabiri\nCabiria\nCabirian\nCabiric\nCabiritic\ncable\ncabled\ncablegram\ncableless\ncablelike\ncableman\ncabler\ncablet\ncableway\ncabling\ncabman\ncabob\ncaboceer\ncabochon\ncabocle\nCabomba\nCabombaceae\ncaboodle\ncabook\ncaboose\ncaboshed\ncabot\ncabotage\ncabree\ncabrerite\ncabreuva\ncabrilla\ncabriole\ncabriolet\ncabrit\ncabstand\ncabureiba\ncabuya\nCaca\nCacajao\nCacalia\ncacam\nCacan\nCacana\ncacanthrax\ncacao\nCacara\nCacatua\nCacatuidae\nCacatuinae\nCaccabis\ncacesthesia\ncacesthesis\ncachalot\ncachaza\ncache\ncachectic\ncachemia\ncachemic\ncachet\ncachexia\ncachexic\ncachexy\ncachibou\ncachinnate\ncachinnation\ncachinnator\ncachinnatory\ncacholong\ncachou\ncachrys\ncachucha\ncachunde\nCacicus\ncacidrosis\ncaciocavallo\ncacique\ncaciqueship\ncaciquism\ncack\ncackerel\ncackle\ncackler\ncacocholia\ncacochroia\ncacochylia\ncacochymia\ncacochymic\ncacochymical\ncacochymy\ncacocnemia\ncacodaemoniac\ncacodaemonial\ncacodaemonic\ncacodemon\ncacodemonia\ncacodemoniac\ncacodemonial\ncacodemonic\ncacodemonize\ncacodemonomania\ncacodontia\ncacodorous\ncacodoxian\ncacodoxical\ncacodoxy\ncacodyl\ncacodylate\ncacodylic\ncacoeconomy\ncacoepist\ncacoepistic\ncacoepy\ncacoethes\ncacoethic\ncacogalactia\ncacogastric\ncacogenesis\ncacogenic\ncacogenics\ncacogeusia\ncacoglossia\ncacographer\ncacographic\ncacographical\ncacography\ncacology\ncacomagician\ncacomelia\ncacomistle\ncacomixl\ncacomixle\ncacomorphia\ncacomorphosis\ncaconychia\ncaconym\ncaconymic\ncacoon\ncacopathy\ncacopharyngia\ncacophonia\ncacophonic\ncacophonical\ncacophonically\ncacophonist\ncacophonize\ncacophonous\ncacophonously\ncacophony\ncacophthalmia\ncacoplasia\ncacoplastic\ncacoproctia\ncacorhythmic\ncacorrhachis\ncacorrhinia\ncacosmia\ncacospermia\ncacosplanchnia\ncacostomia\ncacothansia\ncacotheline\ncacothesis\ncacothymia\ncacotrichia\ncacotrophia\ncacotrophic\ncacotrophy\ncacotype\ncacoxene\ncacoxenite\ncacozeal\ncacozealous\ncacozyme\nCactaceae\ncactaceous\nCactales\ncacti\ncactiform\ncactoid\nCactus\ncacuminal\ncacuminate\ncacumination\ncacuminous\ncacur\ncad\ncadalene\ncadamba\ncadastral\ncadastration\ncadastre\ncadaver\ncadaveric\ncadaverine\ncadaverize\ncadaverous\ncadaverously\ncadaverousness\ncadbait\ncadbit\ncadbote\ncaddice\ncaddiced\nCaddie\ncaddie\ncaddis\ncaddised\ncaddish\ncaddishly\ncaddishness\ncaddle\nCaddo\nCaddoan\ncaddow\ncaddy\ncade\ncadelle\ncadence\ncadenced\ncadency\ncadent\ncadential\ncadenza\ncader\ncaderas\nCadet\ncadet\ncadetcy\ncadetship\ncadette\ncadew\ncadge\ncadger\ncadgily\ncadginess\ncadgy\ncadi\ncadilesker\ncadinene\ncadism\ncadiueio\ncadjan\ncadlock\nCadmean\ncadmia\ncadmic\ncadmide\ncadmiferous\ncadmium\ncadmiumize\nCadmopone\nCadmus\ncados\ncadrans\ncadre\ncadua\ncaduac\ncaduca\ncaducary\ncaducean\ncaduceus\ncaduciary\ncaducibranch\nCaducibranchiata\ncaducibranchiate\ncaducicorn\ncaducity\ncaducous\ncadus\nCadwal\nCadwallader\ncadweed\ncaeca\ncaecal\ncaecally\ncaecectomy\ncaeciform\nCaecilia\nCaeciliae\ncaecilian\nCaeciliidae\ncaecitis\ncaecocolic\ncaecostomy\ncaecotomy\ncaecum\nCaedmonian\nCaedmonic\nCaelian\ncaelometer\nCaelum\nCaelus\nCaenogaea\nCaenogaean\nCaenolestes\ncaenostylic\ncaenostyly\ncaeoma\ncaeremoniarius\nCaerphilly\nCaesalpinia\nCaesalpiniaceae\ncaesalpiniaceous\nCaesar\nCaesardom\nCaesarean\nCaesareanize\nCaesarian\nCaesarism\nCaesarist\nCaesarize\ncaesaropapacy\ncaesaropapism\ncaesaropopism\nCaesarotomy\nCaesarship\ncaesious\ncaesura\ncaesural\ncaesuric\ncafeneh\ncafenet\ncafeteria\ncaffa\ncaffeate\ncaffeic\ncaffeina\ncaffeine\ncaffeinic\ncaffeinism\ncaffeism\ncaffeol\ncaffeone\ncaffetannic\ncaffetannin\ncaffiso\ncaffle\ncaffoline\ncaffoy\ncafh\ncafiz\ncaftan\ncaftaned\ncag\nCagayan\ncage\ncaged\ncageful\ncageless\ncagelike\ncageling\ncageman\ncager\ncagester\ncagework\ncagey\ncaggy\ncagily\ncagit\ncagmag\nCagn\nCahenslyism\nCahill\ncahincic\nCahita\ncahiz\nCahnite\nCahokia\ncahoot\ncahot\ncahow\nCahuapana\nCahuilla\ncaickle\ncaid\ncailcedra\ncailleach\ncaimacam\ncaimakam\ncaiman\ncaimitillo\ncaimito\nCain\ncain\nCaingang\nCaingua\nCainian\nCainish\nCainism\nCainite\nCainitic\ncaique\ncaiquejee\nCairba\ncaird\nCairene\ncairn\ncairned\ncairngorm\ncairngorum\ncairny\nCairo\ncaisson\ncaissoned\nCaitanyas\nCaite\ncaitiff\nCajan\nCajanus\ncajeput\ncajole\ncajolement\ncajoler\ncajolery\ncajoling\ncajolingly\ncajuela\nCajun\ncajun\ncajuput\ncajuputene\ncajuputol\nCakavci\nCakchikel\ncake\ncakebox\ncakebread\ncakehouse\ncakemaker\ncakemaking\ncaker\ncakette\ncakewalk\ncakewalker\ncakey\nCakile\ncaky\ncal\ncalaba\nCalabar\nCalabari\ncalabash\ncalabaza\ncalabazilla\ncalaber\ncalaboose\ncalabrasella\nCalabrese\ncalabrese\nCalabrian\ncalade\nCaladium\ncalais\ncalalu\nCalamagrostis\ncalamanco\ncalamansi\nCalamariaceae\ncalamariaceous\nCalamariales\ncalamarian\ncalamarioid\ncalamaroid\ncalamary\ncalambac\ncalambour\ncalamiferous\ncalamiform\ncalaminary\ncalamine\ncalamint\nCalamintha\ncalamistral\ncalamistrum\ncalamite\ncalamitean\nCalamites\ncalamitoid\ncalamitous\ncalamitously\ncalamitousness\ncalamity\nCalamodendron\ncalamondin\nCalamopitys\nCalamospermae\nCalamostachys\ncalamus\ncalander\nCalandra\ncalandria\nCalandridae\nCalandrinae\nCalandrinia\ncalangay\ncalantas\nCalanthe\ncalapite\nCalappa\nCalappidae\nCalas\ncalascione\ncalash\nCalathea\ncalathian\ncalathidium\ncalathiform\ncalathiscus\ncalathus\nCalatrava\ncalaverite\ncalbroben\ncalcaneal\ncalcaneoastragalar\ncalcaneoastragaloid\ncalcaneocuboid\ncalcaneofibular\ncalcaneonavicular\ncalcaneoplantar\ncalcaneoscaphoid\ncalcaneotibial\ncalcaneum\ncalcaneus\ncalcar\ncalcarate\nCalcarea\ncalcareoargillaceous\ncalcareobituminous\ncalcareocorneous\ncalcareosiliceous\ncalcareosulphurous\ncalcareous\ncalcareously\ncalcareousness\ncalcariferous\ncalcariform\ncalcarine\ncalced\ncalceiform\ncalcemia\nCalceolaria\ncalceolate\nCalchaqui\nCalchaquian\ncalcic\ncalciclase\ncalcicole\ncalcicolous\ncalcicosis\ncalciferol\nCalciferous\ncalciferous\ncalcific\ncalcification\ncalcified\ncalciform\ncalcifugal\ncalcifuge\ncalcifugous\ncalcify\ncalcigenous\ncalcigerous\ncalcimeter\ncalcimine\ncalciminer\ncalcinable\ncalcination\ncalcinatory\ncalcine\ncalcined\ncalciner\ncalcinize\ncalciobiotite\ncalciocarnotite\ncalcioferrite\ncalcioscheelite\ncalciovolborthite\ncalcipexy\ncalciphile\ncalciphilia\ncalciphilous\ncalciphobe\ncalciphobous\ncalciphyre\ncalciprivic\ncalcisponge\nCalcispongiae\ncalcite\ncalcitestaceous\ncalcitic\ncalcitrant\ncalcitrate\ncalcitreation\ncalcium\ncalcivorous\ncalcographer\ncalcographic\ncalcography\ncalcrete\ncalculability\ncalculable\nCalculagraph\ncalculary\ncalculate\ncalculated\ncalculatedly\ncalculating\ncalculatingly\ncalculation\ncalculational\ncalculative\ncalculator\ncalculatory\ncalculi\ncalculiform\ncalculist\ncalculous\ncalculus\nCalcydon\ncalden\ncaldron\ncalean\nCaleb\nCaledonia\nCaledonian\ncaledonite\ncalefacient\ncalefaction\ncalefactive\ncalefactor\ncalefactory\ncalelectric\ncalelectrical\ncalelectricity\nCalemes\ncalendal\ncalendar\ncalendarer\ncalendarial\ncalendarian\ncalendaric\ncalender\ncalenderer\ncalendric\ncalendrical\ncalendry\ncalends\nCalendula\ncalendulin\ncalentural\ncalenture\ncalenturist\ncalepin\ncalescence\ncalescent\ncalf\ncalfbound\ncalfhood\ncalfish\ncalfkill\ncalfless\ncalflike\ncalfling\ncalfskin\nCaliban\nCalibanism\ncaliber\ncalibered\ncalibogus\ncalibrate\ncalibration\ncalibrator\ncalibre\nCaliburn\nCaliburno\ncalicate\ncalices\ncaliciform\ncalicle\ncalico\ncalicoback\ncalicoed\ncalicular\ncaliculate\nCalicut\ncalid\ncalidity\ncaliduct\nCalifornia\nCalifornian\ncalifornite\ncalifornium\ncaliga\ncaligated\ncaliginous\ncaliginously\ncaligo\nCalimeris\nCalinago\ncalinda\ncalinut\ncaliological\ncaliologist\ncaliology\ncalipash\ncalipee\ncaliper\ncaliperer\ncalipers\ncaliph\ncaliphal\ncaliphate\ncaliphship\nCalista\ncalistheneum\ncalisthenic\ncalisthenical\ncalisthenics\nCalite\ncaliver\ncalix\nCalixtin\nCalixtus\ncalk\ncalkage\ncalker\ncalkin\ncalking\ncall\nCalla\ncallable\ncallainite\ncallant\ncallboy\ncaller\ncallet\ncalli\nCallianassa\nCallianassidae\nCalliandra\nCallicarpa\nCallicebus\ncallid\ncallidity\ncallidness\ncalligraph\ncalligrapha\ncalligrapher\ncalligraphic\ncalligraphical\ncalligraphically\ncalligraphist\ncalligraphy\ncalling\nCallionymidae\nCallionymus\nCalliope\ncalliophone\nCalliopsis\ncalliper\ncalliperer\nCalliphora\ncalliphorid\nCalliphoridae\ncalliphorine\ncallipygian\ncallipygous\nCallirrhoe\nCallisaurus\ncallisection\ncallisteia\nCallistemon\nCallistephus\nCallithrix\ncallithump\ncallithumpian\nCallitrichaceae\ncallitrichaceous\nCallitriche\nCallitrichidae\nCallitris\ncallitype\ncallo\nCallorhynchidae\nCallorhynchus\ncallosal\ncallose\ncallosity\ncallosomarginal\ncallosum\ncallous\ncallously\ncallousness\nCallovian\ncallow\ncallower\ncallowman\ncallowness\nCalluna\ncallus\nCallynteria\ncalm\ncalmant\ncalmative\ncalmer\ncalmierer\ncalmingly\ncalmly\ncalmness\ncalmy\nCalocarpum\nCalochortaceae\nCalochortus\ncalodemon\ncalography\ncalomba\ncalomel\ncalomorphic\nCalonectria\nCalonyction\ncalool\nCalophyllum\nCalopogon\ncalor\ncalorescence\ncalorescent\ncaloric\ncaloricity\ncalorie\ncalorifacient\ncalorific\ncalorifical\ncalorifically\ncalorification\ncalorifics\ncalorifier\ncalorify\ncalorigenic\ncalorimeter\ncalorimetric\ncalorimetrical\ncalorimetrically\ncalorimetry\ncalorimotor\ncaloris\ncalorisator\ncalorist\nCalorite\ncalorize\ncalorizer\nCalosoma\nCalotermes\ncalotermitid\nCalotermitidae\nCalothrix\ncalotte\ncalotype\ncalotypic\ncalotypist\ncaloyer\ncalp\ncalpac\ncalpack\ncalpacked\ncalpulli\nCaltha\ncaltrap\ncaltrop\ncalumba\ncalumet\ncalumniate\ncalumniation\ncalumniative\ncalumniator\ncalumniatory\ncalumnious\ncalumniously\ncalumniousness\ncalumny\nCalusa\ncalutron\nCalvados\ncalvaria\ncalvarium\nCalvary\nCalvatia\ncalve\ncalved\ncalver\ncalves\nCalvin\nCalvinian\nCalvinism\nCalvinist\nCalvinistic\nCalvinistical\nCalvinistically\nCalvinize\ncalvish\ncalvities\ncalvity\ncalvous\ncalx\ncalycanth\nCalycanthaceae\ncalycanthaceous\ncalycanthemous\ncalycanthemy\ncalycanthine\nCalycanthus\ncalycate\nCalyceraceae\ncalyceraceous\ncalyces\ncalyciferous\ncalycifloral\ncalyciflorate\ncalyciflorous\ncalyciform\ncalycinal\ncalycine\ncalycle\ncalycled\nCalycocarpum\ncalycoid\ncalycoideous\nCalycophora\nCalycophorae\ncalycophoran\nCalycozoa\ncalycozoan\ncalycozoic\ncalycozoon\ncalycular\ncalyculate\ncalyculated\ncalycule\ncalyculus\nCalydon\nCalydonian\nCalymene\ncalymma\ncalyphyomy\ncalypsist\nCalypso\ncalypso\ncalypsonian\ncalypter\nCalypterae\nCalyptoblastea\ncalyptoblastic\nCalyptorhynchus\ncalyptra\nCalyptraea\nCalyptranthes\nCalyptrata\nCalyptratae\ncalyptrate\ncalyptriform\ncalyptrimorphous\ncalyptro\ncalyptrogen\nCalyptrogyne\nCalystegia\ncalyx\ncam\ncamaca\nCamacan\ncamagon\ncamail\ncamailed\nCamaldolensian\nCamaldolese\nCamaldolesian\nCamaldolite\nCamaldule\nCamaldulian\ncamalote\ncaman\ncamansi\ncamara\ncamaraderie\nCamarasaurus\ncamarilla\ncamass\nCamassia\ncamata\ncamatina\nCamaxtli\ncamb\nCamball\nCambalo\nCambarus\ncambaye\ncamber\nCambeva\ncambial\ncambiform\ncambiogenetic\ncambism\ncambist\ncambistry\ncambium\nCambodian\ncambogia\ncambrel\ncambresine\nCambrian\nCambric\ncambricleaf\ncambuca\nCambuscan\nCambyuskan\nCame\ncame\ncameist\ncamel\ncamelback\ncameleer\nCamelid\nCamelidae\nCamelina\ncameline\ncamelish\ncamelishness\ncamelkeeper\nCamellia\nCamelliaceae\ncamellike\ncamellin\nCamellus\ncamelman\ncameloid\nCameloidea\ncamelopard\nCamelopardalis\nCamelopardid\nCamelopardidae\nCamelopardus\ncamelry\nCamelus\nCamembert\nCamenae\nCamenes\ncameo\ncameograph\ncameography\ncamera\ncameral\ncameralism\ncameralist\ncameralistic\ncameralistics\ncameraman\nCamerata\ncamerate\ncamerated\ncameration\ncamerier\nCamerina\nCamerinidae\ncamerist\ncamerlingo\nCameronian\nCamestres\ncamilla\ncamillus\ncamion\ncamisado\nCamisard\ncamise\ncamisia\ncamisole\ncamlet\ncamleteen\nCammarum\ncammed\ncammock\ncammocky\ncamomile\ncamoodi\ncamoodie\nCamorra\nCamorrism\nCamorrist\nCamorrista\ncamouflage\ncamouflager\ncamp\nCampa\ncampagna\ncampagnol\ncampaign\ncampaigner\ncampana\ncampane\ncampanero\nCampanian\ncampaniform\ncampanile\ncampaniliform\ncampanilla\ncampanini\ncampanist\ncampanistic\ncampanologer\ncampanological\ncampanologically\ncampanologist\ncampanology\nCampanula\nCampanulaceae\ncampanulaceous\nCampanulales\ncampanular\nCampanularia\nCampanulariae\ncampanularian\nCampanularidae\nCampanulatae\ncampanulate\ncampanulated\ncampanulous\nCampaspe\nCampbellism\nCampbellite\ncampbellite\ncampcraft\nCampe\nCampephagidae\ncampephagine\nCampephilus\ncamper\ncampestral\ncampfight\ncampfire\ncampground\ncamphane\ncamphanic\ncamphanone\ncamphanyl\ncamphene\ncamphine\ncamphire\ncampho\ncamphocarboxylic\ncamphoid\ncamphol\ncampholic\ncampholide\ncampholytic\ncamphor\ncamphoraceous\ncamphorate\ncamphoric\ncamphorize\ncamphorone\ncamphoronic\ncamphoroyl\ncamphorphorone\ncamphorwood\ncamphory\ncamphoryl\ncamphylene\nCampignian\ncampimeter\ncampimetrical\ncampimetry\nCampine\ncampion\ncample\ncampmaster\ncampo\nCampodea\ncampodeid\nCampodeidae\ncampodeiform\ncampodeoid\ncampody\nCamponotus\ncampoo\ncamporee\ncampshed\ncampshedding\ncampsheeting\ncampshot\ncampstool\ncamptodrome\ncamptonite\nCamptosorus\ncampulitropal\ncampulitropous\ncampus\ncampward\ncampylite\ncampylodrome\ncampylometer\nCampyloneuron\ncampylospermous\ncampylotropal\ncampylotropous\ncamshach\ncamshachle\ncamshaft\ncamstane\ncamstone\ncamuning\ncamus\ncamused\ncamwood\ncan\nCana\nCanaan\nCanaanite\nCanaanitess\nCanaanitic\nCanaanitish\ncanaba\nCanacee\nCanada\ncanada\nCanadian\nCanadianism\nCanadianization\nCanadianize\ncanadine\ncanadite\ncanadol\ncanaigre\ncanaille\ncanajong\ncanal\ncanalage\ncanalboat\ncanalicular\ncanaliculate\ncanaliculated\ncanaliculation\ncanaliculi\ncanaliculization\ncanaliculus\ncanaliferous\ncanaliform\ncanalization\ncanalize\ncanaller\ncanalling\ncanalman\ncanalside\nCanamary\ncanamo\nCananaean\nCananga\nCanangium\ncanape\ncanapina\ncanard\nCanari\ncanari\nCanarian\ncanarin\nCanariote\nCanarium\nCanarsee\ncanary\ncanasta\ncanaster\ncanaut\nCanavali\nCanavalia\ncanavalin\nCanberra\ncancan\ncancel\ncancelable\ncancelation\ncanceleer\ncanceler\ncancellarian\ncancellate\ncancellated\ncancellation\ncancelli\ncancellous\ncancellus\ncancelment\ncancer\ncancerate\ncanceration\ncancerdrops\ncancered\ncancerigenic\ncancerism\ncancerophobe\ncancerophobia\ncancerous\ncancerously\ncancerousness\ncancerroot\ncancerweed\ncancerwort\ncanch\ncanchalagua\nCanchi\nCancri\nCancrid\ncancriform\ncancrinite\ncancrisocial\ncancrivorous\ncancrizans\ncancroid\ncancrophagous\ncancrum\ncand\nCandace\ncandareen\ncandela\ncandelabra\ncandelabrum\ncandelilla\ncandent\ncandescence\ncandescent\ncandescently\ncandid\ncandidacy\ncandidate\ncandidateship\ncandidature\ncandidly\ncandidness\ncandied\ncandier\ncandify\nCandiot\ncandiru\ncandle\ncandleball\ncandlebeam\ncandleberry\ncandlebomb\ncandlebox\ncandlefish\ncandleholder\ncandlelight\ncandlelighted\ncandlelighter\ncandlelighting\ncandlelit\ncandlemaker\ncandlemaking\nCandlemas\ncandlenut\ncandlepin\ncandler\ncandlerent\ncandleshine\ncandleshrift\ncandlestand\ncandlestick\ncandlesticked\ncandlestickward\ncandlewaster\ncandlewasting\ncandlewick\ncandlewood\ncandlewright\ncandock\nCandollea\nCandolleaceae\ncandolleaceous\ncandor\ncandroy\ncandy\ncandymaker\ncandymaking\ncandys\ncandystick\ncandytuft\ncandyweed\ncane\ncanebrake\ncanel\ncanelike\ncanella\nCanellaceae\ncanellaceous\nCanelo\ncanelo\ncaneology\ncanephor\ncanephore\ncanephoros\ncanephroi\ncaner\ncanescence\ncanescent\ncanette\ncanewise\ncanework\nCanfield\ncanfieldite\ncanful\ncangan\ncangia\ncangle\ncangler\ncangue\ncanhoop\nCanichana\nCanichanan\ncanicola\nCanicula\ncanicular\ncanicule\ncanid\nCanidae\nCanidia\ncanille\ncaninal\ncanine\ncaniniform\ncaninity\ncaninus\ncanioned\ncanions\nCanis\nCanisiana\ncanistel\ncanister\ncanities\ncanjac\ncank\ncanker\ncankerberry\ncankerbird\ncankereat\ncankered\ncankeredly\ncankeredness\ncankerflower\ncankerous\ncankerroot\ncankerweed\ncankerworm\ncankerwort\ncankery\ncanmaker\ncanmaking\ncanman\nCanna\ncanna\ncannabic\nCannabinaceae\ncannabinaceous\ncannabine\ncannabinol\nCannabis\ncannabism\nCannaceae\ncannaceous\ncannach\ncanned\ncannel\ncannelated\ncannelure\ncannelured\ncannequin\ncanner\ncannery\ncannet\ncannibal\ncannibalean\ncannibalic\ncannibalish\ncannibalism\ncannibalistic\ncannibalistically\ncannibality\ncannibalization\ncannibalize\ncannibally\ncannikin\ncannily\ncanniness\ncanning\ncannon\ncannonade\ncannoned\ncannoneer\ncannoneering\nCannonism\ncannonproof\ncannonry\ncannot\nCannstatt\ncannula\ncannular\ncannulate\ncannulated\ncanny\ncanoe\ncanoeing\nCanoeiro\ncanoeist\ncanoeload\ncanoeman\ncanoewood\ncanon\ncanoncito\ncanoness\ncanonic\ncanonical\ncanonically\ncanonicalness\ncanonicals\ncanonicate\ncanonicity\ncanonics\ncanonist\ncanonistic\ncanonistical\ncanonizant\ncanonization\ncanonize\ncanonizer\ncanonlike\ncanonry\ncanonship\ncanoodle\ncanoodler\nCanopic\ncanopic\nCanopus\ncanopy\ncanorous\ncanorously\ncanorousness\nCanossa\ncanroy\ncanroyer\ncanso\ncant\nCantab\ncantabank\ncantabile\nCantabri\nCantabrian\nCantabrigian\nCantabrize\ncantala\ncantalite\ncantaloupe\ncantankerous\ncantankerously\ncantankerousness\ncantar\ncantara\ncantaro\ncantata\nCantate\ncantation\ncantative\ncantatory\ncantboard\ncanted\ncanteen\ncantefable\ncanter\nCanterburian\nCanterburianism\nCanterbury\ncanterer\ncanthal\nCantharellus\nCantharidae\ncantharidal\ncantharidate\ncantharides\ncantharidian\ncantharidin\ncantharidism\ncantharidize\ncantharis\ncantharophilous\ncantharus\ncanthectomy\ncanthitis\ncantholysis\ncanthoplasty\ncanthorrhaphy\ncanthotomy\ncanthus\ncantic\ncanticle\ncantico\ncantilena\ncantilene\ncantilever\ncantilevered\ncantillate\ncantillation\ncantily\ncantina\ncantiness\ncanting\ncantingly\ncantingness\ncantion\ncantish\ncantle\ncantlet\ncanto\nCanton\ncanton\ncantonal\ncantonalism\ncantoned\ncantoner\nCantonese\ncantonment\ncantoon\ncantor\ncantoral\nCantorian\ncantoris\ncantorous\ncantorship\ncantred\ncantref\ncantrip\ncantus\ncantwise\ncanty\nCanuck\ncanun\ncanvas\ncanvasback\ncanvasman\ncanvass\ncanvassy\ncany\ncanyon\ncanzon\ncanzonet\ncaoba\nCaodaism\nCaodaist\ncaoutchouc\ncaoutchoucin\ncap\ncapability\ncapable\ncapableness\ncapably\ncapacious\ncapaciously\ncapaciousness\ncapacitance\ncapacitate\ncapacitation\ncapacitative\ncapacitativly\ncapacitive\ncapacitor\ncapacity\ncapanna\ncapanne\ncaparison\ncapax\ncapcase\nCape\ncape\ncaped\ncapel\ncapelet\ncapelin\ncapeline\nCapella\ncapellet\ncaper\ncaperbush\ncapercaillie\ncapercally\ncapercut\ncaperer\ncapering\ncaperingly\nCapernaism\nCapernaite\nCapernaitic\nCapernaitical\nCapernaitically\nCapernaitish\ncapernoited\ncapernoitie\ncapernoity\ncapersome\ncaperwort\ncapes\ncapeskin\nCapetian\nCapetonian\ncapeweed\ncapewise\ncapful\nCaph\ncaph\ncaphar\ncaphite\nCaphtor\nCaphtorim\ncapias\ncapicha\ncapillaceous\ncapillaire\ncapillament\ncapillarectasia\ncapillarily\ncapillarimeter\ncapillariness\ncapillariomotor\ncapillarity\ncapillary\ncapillation\ncapilliculture\ncapilliform\ncapillitial\ncapillitium\ncapillose\ncapistrate\ncapital\ncapitaldom\ncapitaled\ncapitalism\ncapitalist\ncapitalistic\ncapitalistically\ncapitalizable\ncapitalization\ncapitalize\ncapitally\ncapitalness\ncapitan\ncapitate\ncapitated\ncapitatim\ncapitation\ncapitative\ncapitatum\ncapitellar\ncapitellate\ncapitelliform\ncapitellum\nCapito\nCapitol\nCapitolian\nCapitoline\nCapitolium\nCapitonidae\nCapitoninae\ncapitoul\ncapitoulate\ncapitulant\ncapitular\ncapitularly\ncapitulary\ncapitulate\ncapitulation\ncapitulator\ncapitulatory\ncapituliform\ncapitulum\ncapivi\ncapkin\ncapless\ncaplin\ncapmaker\ncapmaking\ncapman\ncapmint\nCapnodium\nCapnoides\ncapnomancy\ncapocchia\ncapomo\ncapon\ncaponier\ncaponize\ncaponizer\ncaporal\ncapot\ncapote\ncappadine\nCappadocian\nCapparidaceae\ncapparidaceous\nCapparis\ncapped\ncappelenite\ncapper\ncappie\ncapping\ncapple\ncappy\nCapra\ncaprate\nCaprella\nCaprellidae\ncaprelline\ncapreol\ncapreolar\ncapreolary\ncapreolate\ncapreoline\nCapreolus\nCapri\ncapric\ncapriccetto\ncapricci\ncapriccio\ncaprice\ncapricious\ncapriciously\ncapriciousness\nCapricorn\nCapricornid\nCapricornus\ncaprid\ncaprificate\ncaprification\ncaprificator\ncaprifig\nCaprifoliaceae\ncaprifoliaceous\nCaprifolium\ncaprifolium\ncapriform\ncaprigenous\nCaprimulgi\nCaprimulgidae\nCaprimulgiformes\ncaprimulgine\nCaprimulgus\ncaprin\ncaprine\ncaprinic\nCapriola\ncapriole\nCapriote\ncapriped\ncapripede\ncaprizant\ncaproate\ncaproic\ncaproin\nCapromys\ncaprone\ncapronic\ncapronyl\ncaproyl\ncapryl\ncaprylate\ncaprylene\ncaprylic\ncaprylin\ncaprylone\ncaprylyl\ncapsa\ncapsaicin\nCapsella\ncapsheaf\ncapshore\nCapsian\ncapsicin\nCapsicum\ncapsicum\ncapsid\nCapsidae\ncapsizal\ncapsize\ncapstan\ncapstone\ncapsula\ncapsulae\ncapsular\ncapsulate\ncapsulated\ncapsulation\ncapsule\ncapsulectomy\ncapsuler\ncapsuliferous\ncapsuliform\ncapsuligerous\ncapsulitis\ncapsulociliary\ncapsulogenous\ncapsulolenticular\ncapsulopupillary\ncapsulorrhaphy\ncapsulotome\ncapsulotomy\ncapsumin\ncaptaculum\ncaptain\ncaptaincy\ncaptainess\ncaptainly\ncaptainry\ncaptainship\ncaptance\ncaptation\ncaption\ncaptious\ncaptiously\ncaptiousness\ncaptivate\ncaptivately\ncaptivating\ncaptivatingly\ncaptivation\ncaptivative\ncaptivator\ncaptivatrix\ncaptive\ncaptivity\ncaptor\ncaptress\ncapturable\ncapture\ncapturer\nCapuan\ncapuche\ncapuched\nCapuchin\ncapuchin\ncapucine\ncapulet\ncapulin\ncapybara\nCaquetio\ncar\nCara\ncarabao\ncarabeen\ncarabid\nCarabidae\ncarabidan\ncarabideous\ncarabidoid\ncarabin\ncarabineer\nCarabini\ncaraboid\nCarabus\ncarabus\ncaracal\ncaracara\ncaracol\ncaracole\ncaracoler\ncaracoli\ncaracolite\ncaracoller\ncaracore\ncaract\nCaractacus\ncaracter\nCaradoc\ncarafe\nCaragana\nCaraguata\ncaraguata\nCaraho\ncaraibe\nCaraipa\ncaraipi\nCaraja\nCarajas\ncarajura\ncaramba\ncarambola\ncarambole\ncaramel\ncaramelan\ncaramelen\ncaramelin\ncaramelization\ncaramelize\ncaramoussal\ncarancha\ncaranda\nCarandas\ncaranday\ncarane\nCaranga\ncarangid\nCarangidae\ncarangoid\nCarangus\ncaranna\nCaranx\nCarapa\ncarapace\ncarapaced\nCarapache\nCarapacho\ncarapacic\ncarapato\ncarapax\nCarapidae\ncarapine\ncarapo\nCarapus\nCarara\ncarat\ncaratch\ncaraunda\ncaravan\ncaravaneer\ncaravanist\ncaravanner\ncaravansary\ncaravanserai\ncaravanserial\ncaravel\ncaraway\nCarayan\ncarbacidometer\ncarbamate\ncarbamic\ncarbamide\ncarbamido\ncarbamine\ncarbamino\ncarbamyl\ncarbanil\ncarbanilic\ncarbanilide\ncarbarn\ncarbasus\ncarbazic\ncarbazide\ncarbazine\ncarbazole\ncarbazylic\ncarbeen\ncarbene\ncarberry\ncarbethoxy\ncarbethoxyl\ncarbide\ncarbimide\ncarbine\ncarbinol\ncarbinyl\ncarbo\ncarboazotine\ncarbocinchomeronic\ncarbodiimide\ncarbodynamite\ncarbogelatin\ncarbohemoglobin\ncarbohydrase\ncarbohydrate\ncarbohydraturia\ncarbohydrazide\ncarbohydride\ncarbohydrogen\ncarbolate\ncarbolated\ncarbolfuchsin\ncarbolic\ncarbolineate\nCarbolineum\ncarbolize\nCarboloy\ncarboluria\ncarbolxylol\ncarbomethene\ncarbomethoxy\ncarbomethoxyl\ncarbon\ncarbona\ncarbonaceous\ncarbonade\ncarbonado\nCarbonari\nCarbonarism\nCarbonarist\ncarbonatation\ncarbonate\ncarbonation\ncarbonatization\ncarbonator\ncarbonemia\ncarbonero\ncarbonic\ncarbonide\nCarboniferous\ncarboniferous\ncarbonification\ncarbonify\ncarbonigenous\ncarbonimeter\ncarbonimide\ncarbonite\ncarbonitride\ncarbonium\ncarbonizable\ncarbonization\ncarbonize\ncarbonizer\ncarbonless\nCarbonnieux\ncarbonometer\ncarbonometry\ncarbonous\ncarbonuria\ncarbonyl\ncarbonylene\ncarbonylic\ncarbophilous\ncarbora\nCarborundum\ncarborundum\ncarbosilicate\ncarbostyril\ncarboxide\ncarboxy\nCarboxydomonas\ncarboxyhemoglobin\ncarboxyl\ncarboxylase\ncarboxylate\ncarboxylation\ncarboxylic\ncarboy\ncarboyed\ncarbro\ncarbromal\ncarbuilder\ncarbuncle\ncarbuncled\ncarbuncular\ncarbungi\ncarburant\ncarburate\ncarburation\ncarburator\ncarbure\ncarburet\ncarburetant\ncarburetor\ncarburization\ncarburize\ncarburizer\ncarburometer\ncarbyl\ncarbylamine\ncarcajou\ncarcake\ncarcanet\ncarcaneted\ncarcass\nCarcavelhos\ncarceag\ncarcel\ncarceral\ncarcerate\ncarceration\nCarcharhinus\nCarcharias\ncarchariid\nCarchariidae\ncarcharioid\nCarcharodon\ncarcharodont\ncarcinemia\ncarcinogen\ncarcinogenesis\ncarcinogenic\ncarcinoid\ncarcinological\ncarcinologist\ncarcinology\ncarcinolysin\ncarcinolytic\ncarcinoma\ncarcinomata\ncarcinomatoid\ncarcinomatosis\ncarcinomatous\ncarcinomorphic\ncarcinophagous\ncarcinopolypus\ncarcinosarcoma\ncarcinosarcomata\nCarcinoscorpius\ncarcinosis\ncarcoon\ncard\ncardaissin\nCardamine\ncardamom\nCardanic\ncardboard\ncardcase\ncardecu\ncarded\ncardel\ncarder\ncardholder\ncardia\ncardiac\ncardiacal\nCardiacea\ncardiacean\ncardiagra\ncardiagram\ncardiagraph\ncardiagraphy\ncardial\ncardialgia\ncardialgy\ncardiameter\ncardiamorphia\ncardianesthesia\ncardianeuria\ncardiant\ncardiaplegia\ncardiarctia\ncardiasthenia\ncardiasthma\ncardiataxia\ncardiatomy\ncardiatrophia\ncardiauxe\nCardiazol\ncardicentesis\ncardiectasis\ncardiectomize\ncardiectomy\ncardielcosis\ncardiemphraxia\ncardiform\nCardigan\ncardigan\nCardiidae\ncardin\ncardinal\ncardinalate\ncardinalic\nCardinalis\ncardinalism\ncardinalist\ncardinalitial\ncardinalitian\ncardinally\ncardinalship\ncardines\ncarding\ncardioaccelerator\ncardioarterial\ncardioblast\ncardiocarpum\ncardiocele\ncardiocentesis\ncardiocirrhosis\ncardioclasia\ncardioclasis\ncardiodilator\ncardiodynamics\ncardiodynia\ncardiodysesthesia\ncardiodysneuria\ncardiogenesis\ncardiogenic\ncardiogram\ncardiograph\ncardiographic\ncardiography\ncardiohepatic\ncardioid\ncardiokinetic\ncardiolith\ncardiological\ncardiologist\ncardiology\ncardiolysis\ncardiomalacia\ncardiomegaly\ncardiomelanosis\ncardiometer\ncardiometric\ncardiometry\ncardiomotility\ncardiomyoliposis\ncardiomyomalacia\ncardioncus\ncardionecrosis\ncardionephric\ncardioneural\ncardioneurosis\ncardionosus\ncardioparplasis\ncardiopathic\ncardiopathy\ncardiopericarditis\ncardiophobe\ncardiophobia\ncardiophrenia\ncardioplasty\ncardioplegia\ncardiopneumatic\ncardiopneumograph\ncardioptosis\ncardiopulmonary\ncardiopuncture\ncardiopyloric\ncardiorenal\ncardiorespiratory\ncardiorrhaphy\ncardiorrheuma\ncardiorrhexis\ncardioschisis\ncardiosclerosis\ncardioscope\ncardiospasm\nCardiospermum\ncardiosphygmogram\ncardiosphygmograph\ncardiosymphysis\ncardiotherapy\ncardiotomy\ncardiotonic\ncardiotoxic\ncardiotrophia\ncardiotrophotherapy\ncardiovascular\ncardiovisceral\ncardipaludism\ncardipericarditis\ncardisophistical\ncarditic\ncarditis\nCardium\ncardlike\ncardmaker\ncardmaking\ncardo\ncardol\ncardon\ncardona\ncardoncillo\ncardooer\ncardoon\ncardophagus\ncardplayer\ncardroom\ncardsharp\ncardsharping\ncardstock\nCarduaceae\ncarduaceous\nCarduelis\nCarduus\ncare\ncarecloth\ncareen\ncareenage\ncareener\ncareer\ncareerer\ncareering\ncareeringly\ncareerist\ncarefree\ncareful\ncarefully\ncarefulness\ncareless\ncarelessly\ncarelessness\ncarene\ncarer\ncaress\ncaressant\ncaresser\ncaressing\ncaressingly\ncaressive\ncaressively\ncarest\ncaret\ncaretaker\ncaretaking\nCaretta\nCarettochelydidae\ncareworn\nCarex\ncarfare\ncarfax\ncarfuffle\ncarful\ncarga\ncargo\ncargoose\ncarhop\ncarhouse\ncariacine\nCariacus\ncariama\nCariamae\nCarian\nCarib\nCaribal\nCariban\nCaribbean\nCaribbee\nCaribi\nCaribisi\ncaribou\nCarica\nCaricaceae\ncaricaceous\ncaricatura\ncaricaturable\ncaricatural\ncaricature\ncaricaturist\ncaricetum\ncaricographer\ncaricography\ncaricologist\ncaricology\ncaricous\ncarid\nCarida\nCaridea\ncaridean\ncaridoid\nCaridomorpha\ncaries\nCarijona\ncarillon\ncarillonneur\ncarina\ncarinal\nCarinaria\nCarinatae\ncarinate\ncarinated\ncarination\nCariniana\ncariniform\nCarinthian\ncariole\ncarioling\ncariosity\ncarious\ncariousness\nCaripuna\nCariri\nCaririan\nCarisa\nCarissa\ncaritative\ncaritive\nCariyo\ncark\ncarking\ncarkingly\ncarkled\nCarl\ncarl\ncarless\ncarlet\ncarlie\ncarlin\nCarlina\ncarline\ncarling\ncarlings\ncarlish\ncarlishness\nCarlisle\nCarlism\nCarlist\nCarlo\ncarload\ncarloading\ncarloadings\nCarlos\ncarlot\nCarlovingian\ncarls\nCarludovica\nCarlylean\nCarlyleian\nCarlylese\nCarlylesque\nCarlylian\nCarlylism\ncarmagnole\ncarmalum\nCarman\ncarman\nCarmanians\nCarmel\nCarmela\ncarmele\nCarmelite\nCarmelitess\ncarmeloite\nCarmen\ncarminative\nCarmine\ncarmine\ncarminette\ncarminic\ncarminite\ncarminophilous\ncarmoisin\ncarmot\nCarnacian\ncarnage\ncarnaged\ncarnal\ncarnalism\ncarnalite\ncarnality\ncarnalize\ncarnallite\ncarnally\ncarnalness\ncarnaptious\nCarnaria\ncarnassial\ncarnate\ncarnation\ncarnationed\ncarnationist\ncarnauba\ncarnaubic\ncarnaubyl\nCarnegie\nCarnegiea\ncarnelian\ncarneol\ncarneole\ncarneous\ncarney\ncarnic\ncarniferous\ncarniferrin\ncarnifex\ncarnification\ncarnifices\ncarnificial\ncarniform\ncarnify\nCarniolan\ncarnival\ncarnivaler\ncarnivalesque\nCarnivora\ncarnivoracity\ncarnivoral\ncarnivore\ncarnivorism\ncarnivorous\ncarnivorously\ncarnivorousness\ncarnose\ncarnosine\ncarnosity\ncarnotite\ncarnous\nCaro\ncaroa\ncarob\ncaroba\ncaroche\nCaroid\nCarol\ncarol\nCarolan\nCarole\nCarolean\ncaroler\ncaroli\ncarolin\nCarolina\nCaroline\ncaroline\nCaroling\nCarolingian\nCarolinian\ncarolus\nCarolyn\ncarom\ncarombolette\ncarone\ncaronic\ncaroome\ncaroon\ncarotene\ncarotenoid\ncarotic\ncarotid\ncarotidal\ncarotidean\ncarotin\ncarotinemia\ncarotinoid\ncaroubier\ncarousal\ncarouse\ncarouser\ncarousing\ncarousingly\ncarp\ncarpaine\ncarpal\ncarpale\ncarpalia\nCarpathian\ncarpel\ncarpellary\ncarpellate\ncarpent\ncarpenter\nCarpenteria\ncarpentering\ncarpentership\ncarpentry\ncarper\ncarpet\ncarpetbag\ncarpetbagger\ncarpetbaggery\ncarpetbaggism\ncarpetbagism\ncarpetbeater\ncarpeting\ncarpetlayer\ncarpetless\ncarpetmaker\ncarpetmaking\ncarpetmonger\ncarpetweb\ncarpetweed\ncarpetwork\ncarpetwoven\nCarphiophiops\ncarpholite\nCarphophis\ncarphosiderite\ncarpid\ncarpidium\ncarpincho\ncarping\ncarpingly\ncarpintero\nCarpinus\nCarpiodes\ncarpitis\ncarpium\ncarpocace\nCarpocapsa\ncarpocarpal\ncarpocephala\ncarpocephalum\ncarpocerite\ncarpocervical\nCarpocratian\nCarpodacus\nCarpodetus\ncarpogam\ncarpogamy\ncarpogenic\ncarpogenous\ncarpogone\ncarpogonial\ncarpogonium\nCarpoidea\ncarpolite\ncarpolith\ncarpological\ncarpologically\ncarpologist\ncarpology\ncarpomania\ncarpometacarpal\ncarpometacarpus\ncarpopedal\nCarpophaga\ncarpophagous\ncarpophalangeal\ncarpophore\ncarpophyll\ncarpophyte\ncarpopodite\ncarpopoditic\ncarpoptosia\ncarpoptosis\ncarport\ncarpos\ncarposperm\ncarposporangia\ncarposporangial\ncarposporangium\ncarpospore\ncarposporic\ncarposporous\ncarpostome\ncarpus\ncarquaise\ncarr\ncarrack\ncarrageen\ncarrageenin\nCarrara\nCarraran\ncarrel\ncarriable\ncarriage\ncarriageable\ncarriageful\ncarriageless\ncarriagesmith\ncarriageway\nCarrick\ncarrick\nCarrie\ncarried\ncarrier\ncarrion\ncarritch\ncarritches\ncarriwitchet\nCarrizo\ncarrizo\ncarroch\ncarrollite\ncarronade\ncarrot\ncarrotage\ncarroter\ncarrotiness\ncarrottop\ncarrotweed\ncarrotwood\ncarroty\ncarrousel\ncarrow\nCarry\ncarry\ncarryall\ncarrying\ncarrytale\ncarse\ncarshop\ncarsick\ncarsmith\nCarsten\ncart\ncartable\ncartaceous\ncartage\ncartboot\ncartbote\ncarte\ncartel\ncartelism\ncartelist\ncartelization\ncartelize\nCarter\ncarter\nCartesian\nCartesianism\ncartful\nCarthaginian\ncarthame\ncarthamic\ncarthamin\nCarthamus\nCarthusian\nCartier\ncartilage\ncartilaginean\nCartilaginei\ncartilagineous\nCartilagines\ncartilaginification\ncartilaginoid\ncartilaginous\ncartisane\nCartist\ncartload\ncartmaker\ncartmaking\ncartman\ncartobibliography\ncartogram\ncartograph\ncartographer\ncartographic\ncartographical\ncartographically\ncartography\ncartomancy\ncarton\ncartonnage\ncartoon\ncartoonist\ncartouche\ncartridge\ncartsale\ncartulary\ncartway\ncartwright\ncartwrighting\ncarty\ncarua\ncarucage\ncarucal\ncarucate\ncarucated\nCarum\ncaruncle\ncaruncula\ncarunculae\ncaruncular\ncarunculate\ncarunculated\ncarunculous\ncarvacrol\ncarvacryl\ncarval\ncarve\ncarvel\ncarven\ncarvene\ncarver\ncarvership\ncarvestrene\ncarving\ncarvoepra\ncarvol\ncarvomenthene\ncarvone\ncarvyl\ncarwitchet\nCary\nCarya\ncaryatic\ncaryatid\ncaryatidal\ncaryatidean\ncaryatidic\ncaryl\nCaryocar\nCaryocaraceae\ncaryocaraceous\nCaryophyllaceae\ncaryophyllaceous\ncaryophyllene\ncaryophylleous\ncaryophyllin\ncaryophyllous\nCaryophyllus\ncaryopilite\ncaryopses\ncaryopsides\ncaryopsis\nCaryopteris\nCaryota\ncasaba\ncasabe\ncasal\ncasalty\nCasamarca\nCasanovanic\nCasasia\ncasate\ncasaun\ncasava\ncasave\ncasavi\ncasbah\ncascabel\ncascade\nCascadia\nCascadian\ncascadite\ncascado\ncascalho\ncascalote\ncascara\ncascarilla\ncascaron\ncasco\ncascol\nCase\ncase\nCasearia\ncasease\ncaseate\ncaseation\ncasebook\ncasebox\ncased\ncaseful\ncasefy\ncaseharden\ncaseic\ncasein\ncaseinate\ncaseinogen\ncasekeeper\nCasel\ncaseless\ncaselessly\ncasemaker\ncasemaking\ncasemate\ncasemated\ncasement\ncasemented\ncaseolysis\ncaseose\ncaseous\ncaser\ncasern\ncaseum\ncaseweed\ncasewood\ncasework\ncaseworker\ncaseworm\nCasey\ncash\ncasha\ncashable\ncashableness\ncashaw\ncashbook\ncashbox\ncashboy\ncashcuttee\ncashel\ncashew\ncashgirl\nCashibo\ncashier\ncashierer\ncashierment\ncashkeeper\ncashment\nCashmere\ncashmere\ncashmerette\nCashmirian\nCasimir\nCasimiroa\ncasing\ncasino\ncasiri\ncask\ncasket\ncasking\ncasklike\nCaslon\nCaspar\nCasparian\nCasper\nCaspian\ncasque\ncasqued\ncasquet\ncasquetel\ncasquette\ncass\ncassabanana\ncassabully\ncassady\nCassandra\ncassareep\ncassation\ncasse\nCassegrain\nCassegrainian\ncasselty\ncassena\ncasserole\nCassia\ncassia\nCassiaceae\nCassian\ncassican\nCassicus\nCassida\ncassideous\ncassidid\nCassididae\nCassidinae\ncassidony\nCassidulina\ncassiduloid\nCassiduloidea\nCassie\ncassie\nCassiepeia\ncassimere\ncassina\ncassine\nCassinese\ncassinette\nCassinian\ncassino\ncassinoid\ncassioberry\nCassiope\nCassiopeia\nCassiopeian\nCassiopeid\ncassiopeium\nCassis\ncassis\ncassiterite\nCassius\ncassock\ncassolette\ncasson\ncassonade\ncassoon\ncassowary\ncassumunar\nCassytha\nCassythaceae\ncast\ncastable\ncastagnole\nCastalia\nCastalian\nCastalides\nCastalio\nCastanea\ncastanean\ncastaneous\ncastanet\nCastanopsis\nCastanospermum\ncastaway\ncaste\ncasteless\ncastelet\ncastellan\ncastellano\ncastellanship\ncastellany\ncastellar\ncastellate\ncastellated\ncastellation\ncaster\ncasterless\ncasthouse\ncastice\ncastigable\ncastigate\ncastigation\ncastigative\ncastigator\ncastigatory\nCastilian\nCastilla\nCastilleja\nCastilloa\ncasting\ncastle\ncastled\ncastlelike\ncastlet\ncastlewards\ncastlewise\ncastling\ncastock\ncastoff\nCastor\ncastor\nCastores\ncastoreum\ncastorial\nCastoridae\ncastorin\ncastorite\ncastorized\nCastoroides\ncastory\ncastra\ncastral\ncastrametation\ncastrate\ncastrater\ncastration\ncastrator\ncastrensial\ncastrensian\ncastrum\ncastuli\ncasual\ncasualism\ncasualist\ncasuality\ncasually\ncasualness\ncasualty\nCasuariidae\nCasuariiformes\nCasuarina\nCasuarinaceae\ncasuarinaceous\nCasuarinales\nCasuarius\ncasuary\ncasuist\ncasuistess\ncasuistic\ncasuistical\ncasuistically\ncasuistry\ncasula\ncaswellite\nCasziel\nCat\ncat\ncatabaptist\ncatabases\ncatabasis\ncatabatic\ncatabibazon\ncatabiotic\ncatabolic\ncatabolically\ncatabolin\ncatabolism\ncatabolite\ncatabolize\ncatacaustic\ncatachreses\ncatachresis\ncatachrestic\ncatachrestical\ncatachrestically\ncatachthonian\ncataclasm\ncataclasmic\ncataclastic\ncataclinal\ncataclysm\ncataclysmal\ncataclysmatic\ncataclysmatist\ncataclysmic\ncataclysmically\ncataclysmist\ncatacomb\ncatacorolla\ncatacoustics\ncatacromyodian\ncatacrotic\ncatacrotism\ncatacumbal\ncatadicrotic\ncatadicrotism\ncatadioptric\ncatadioptrical\ncatadioptrics\ncatadromous\ncatafalco\ncatafalque\ncatagenesis\ncatagenetic\ncatagmatic\nCataian\ncatakinesis\ncatakinetic\ncatakinetomer\ncatakinomeric\nCatalan\nCatalanganes\nCatalanist\ncatalase\nCatalaunian\ncatalecta\ncatalectic\ncatalecticant\ncatalepsis\ncatalepsy\ncataleptic\ncataleptiform\ncataleptize\ncataleptoid\ncatalexis\ncatalina\ncatalineta\ncatalinite\ncatallactic\ncatallactically\ncatallactics\ncatallum\ncatalogia\ncatalogic\ncatalogical\ncatalogist\ncatalogistic\ncatalogue\ncataloguer\ncataloguish\ncataloguist\ncataloguize\nCatalonian\ncatalowne\nCatalpa\ncatalpa\ncatalufa\ncatalyses\ncatalysis\ncatalyst\ncatalyte\ncatalytic\ncatalytical\ncatalytically\ncatalyzator\ncatalyze\ncatalyzer\ncatamaran\nCatamarcan\nCatamarenan\ncatamenia\ncatamenial\ncatamite\ncatamited\ncatamiting\ncatamount\ncatamountain\ncatan\nCatananche\ncatapan\ncatapasm\ncatapetalous\ncataphasia\ncataphatic\ncataphora\ncataphoresis\ncataphoretic\ncataphoria\ncataphoric\ncataphract\nCataphracta\nCataphracti\ncataphrenia\ncataphrenic\nCataphrygian\ncataphrygianism\ncataphyll\ncataphylla\ncataphyllary\ncataphyllum\ncataphysical\ncataplasia\ncataplasis\ncataplasm\ncatapleiite\ncataplexy\ncatapult\ncatapultic\ncatapultier\ncataract\ncataractal\ncataracted\ncataractine\ncataractous\ncataractwise\ncataria\ncatarinite\ncatarrh\ncatarrhal\ncatarrhally\ncatarrhed\nCatarrhina\ncatarrhine\ncatarrhinian\ncatarrhous\ncatasarka\nCatasetum\ncatasta\ncatastaltic\ncatastasis\ncatastate\ncatastatic\ncatasterism\ncatastrophal\ncatastrophe\ncatastrophic\ncatastrophical\ncatastrophically\ncatastrophism\ncatastrophist\ncatathymic\ncatatonia\ncatatoniac\ncatatonic\ncatawampous\ncatawampously\ncatawamptious\ncatawamptiously\ncatawampus\nCatawba\ncatberry\ncatbird\ncatboat\ncatcall\ncatch\ncatchable\ncatchall\ncatchcry\ncatcher\ncatchfly\ncatchiness\ncatching\ncatchingly\ncatchingness\ncatchland\ncatchment\ncatchpenny\ncatchplate\ncatchpole\ncatchpolery\ncatchpoleship\ncatchpoll\ncatchpollery\ncatchup\ncatchwater\ncatchweed\ncatchweight\ncatchword\ncatchwork\ncatchy\ncatclaw\ncatdom\ncate\ncatechesis\ncatechetic\ncatechetical\ncatechetically\ncatechin\ncatechism\ncatechismal\ncatechist\ncatechistic\ncatechistical\ncatechistically\ncatechizable\ncatechization\ncatechize\ncatechizer\ncatechol\ncatechu\ncatechumen\ncatechumenal\ncatechumenate\ncatechumenical\ncatechumenically\ncatechumenism\ncatechumenship\ncatechutannic\ncategorem\ncategorematic\ncategorematical\ncategorematically\ncategorial\ncategoric\ncategorical\ncategorically\ncategoricalness\ncategorist\ncategorization\ncategorize\ncategory\ncatelectrotonic\ncatelectrotonus\ncatella\ncatena\ncatenae\ncatenarian\ncatenary\ncatenate\ncatenated\ncatenation\ncatenoid\ncatenulate\ncatepuce\ncater\ncateran\ncatercap\ncatercorner\ncaterer\ncaterership\ncateress\ncaterpillar\ncaterpillared\ncaterpillarlike\ncaterva\ncaterwaul\ncaterwauler\ncaterwauling\nCatesbaea\ncateye\ncatface\ncatfaced\ncatfacing\ncatfall\ncatfish\ncatfoot\ncatfooted\ncatgut\nCatha\nCathari\nCatharina\nCatharine\nCatharism\nCatharist\nCatharistic\ncatharization\ncatharize\ncatharpin\ncatharping\nCathars\ncatharsis\nCathartae\nCathartes\ncathartic\ncathartical\ncathartically\ncatharticalness\nCathartidae\nCathartides\nCathartolinum\nCathay\nCathayan\ncathead\ncathect\ncathectic\ncathection\ncathedra\ncathedral\ncathedraled\ncathedralesque\ncathedralic\ncathedrallike\ncathedralwise\ncathedratic\ncathedratica\ncathedratical\ncathedratically\ncathedraticum\ncathepsin\nCatherine\ncatheter\ncatheterism\ncatheterization\ncatheterize\ncatheti\ncathetometer\ncathetometric\ncathetus\ncathexion\ncathexis\ncathidine\ncathin\ncathine\ncathinine\ncathion\ncathisma\ncathodal\ncathode\ncathodic\ncathodical\ncathodically\ncathodofluorescence\ncathodograph\ncathodography\ncathodoluminescence\ncathograph\ncathography\ncathole\ncatholic\ncatholical\ncatholically\ncatholicalness\ncatholicate\ncatholicism\ncatholicist\ncatholicity\ncatholicize\ncatholicizer\ncatholicly\ncatholicness\ncatholicon\ncatholicos\ncatholicus\ncatholyte\ncathood\ncathop\nCathrin\ncathro\nCathryn\nCathy\nCatilinarian\ncation\ncationic\ncativo\ncatjang\ncatkin\ncatkinate\ncatlap\ncatlike\ncatlin\ncatling\ncatlinite\ncatmalison\ncatmint\ncatnip\ncatoblepas\nCatocala\ncatocalid\ncatocathartic\ncatoctin\nCatodon\ncatodont\ncatogene\ncatogenic\nCatoism\nCatonian\nCatonic\nCatonically\nCatonism\ncatoptric\ncatoptrical\ncatoptrically\ncatoptrics\ncatoptrite\ncatoptromancy\ncatoptromantic\nCatoquina\ncatostomid\nCatostomidae\ncatostomoid\nCatostomus\ncatpiece\ncatpipe\ncatproof\nCatskill\ncatskin\ncatstep\ncatstick\ncatstitch\ncatstitcher\ncatstone\ncatsup\ncattabu\ncattail\ncattalo\ncattery\nCatti\ncattily\ncattimandoo\ncattiness\ncatting\ncattish\ncattishly\ncattishness\ncattle\ncattlebush\ncattlegate\ncattleless\ncattleman\nCattleya\ncattleya\ncattleyak\nCatty\ncatty\ncattyman\nCatullian\ncatvine\ncatwalk\ncatwise\ncatwood\ncatwort\ncaubeen\ncauboge\nCaucasian\nCaucasic\nCaucasoid\ncauch\ncauchillo\ncaucho\ncaucus\ncauda\ncaudad\ncaudae\ncaudal\ncaudally\ncaudalward\nCaudata\ncaudata\ncaudate\ncaudated\ncaudation\ncaudatolenticular\ncaudatory\ncaudatum\ncaudex\ncaudices\ncaudicle\ncaudiform\ncaudillism\ncaudle\ncaudocephalad\ncaudodorsal\ncaudofemoral\ncaudolateral\ncaudotibial\ncaudotibialis\nCaughnawaga\ncaught\ncauk\ncaul\ncauld\ncauldrife\ncauldrifeness\nCaulerpa\nCaulerpaceae\ncaulerpaceous\ncaules\ncaulescent\ncaulicle\ncaulicole\ncaulicolous\ncaulicule\ncauliculus\ncauliferous\ncauliflorous\ncauliflory\ncauliflower\ncauliform\ncauligenous\ncaulinar\ncaulinary\ncauline\ncaulis\nCaulite\ncaulivorous\ncaulocarpic\ncaulocarpous\ncaulome\ncaulomer\ncaulomic\ncaulophylline\nCaulophyllum\nCaulopteris\ncaulopteris\ncaulosarc\ncaulotaxis\ncaulotaxy\ncaulote\ncaum\ncauma\ncaumatic\ncaunch\nCaunos\nCaunus\ncaup\ncaupo\ncaupones\nCauqui\ncaurale\nCaurus\ncausability\ncausable\ncausal\ncausalgia\ncausality\ncausally\ncausate\ncausation\ncausational\ncausationism\ncausationist\ncausative\ncausatively\ncausativeness\ncausativity\ncause\ncauseful\ncauseless\ncauselessly\ncauselessness\ncauser\ncauserie\ncauseway\ncausewayman\ncausey\ncausidical\ncausing\ncausingness\ncausse\ncausson\ncaustic\ncaustical\ncaustically\ncausticiser\ncausticism\ncausticity\ncausticization\ncausticize\ncausticizer\ncausticly\ncausticness\ncaustification\ncaustify\nCausus\ncautel\ncautelous\ncautelously\ncautelousness\ncauter\ncauterant\ncauterization\ncauterize\ncautery\ncaution\ncautionary\ncautioner\ncautionry\ncautious\ncautiously\ncautiousness\ncautivo\ncava\ncavae\ncaval\ncavalcade\ncavalero\ncavalier\ncavalierish\ncavalierishness\ncavalierism\ncavalierly\ncavalierness\ncavaliero\ncavaliership\ncavalla\ncavalry\ncavalryman\ncavascope\ncavate\ncavatina\ncave\ncaveat\ncaveator\ncavekeeper\ncavel\ncavelet\ncavelike\ncavendish\ncavern\ncavernal\ncaverned\ncavernicolous\ncavernitis\ncavernlike\ncavernoma\ncavernous\ncavernously\ncavernulous\ncavesson\ncavetto\nCavia\ncaviar\ncavicorn\nCavicornia\nCavidae\ncavie\ncavil\ncaviler\ncaviling\ncavilingly\ncavilingness\ncavillation\nCavina\ncaving\ncavings\ncavish\ncavitary\ncavitate\ncavitation\ncavitied\ncavity\ncaviya\ncavort\ncavus\ncavy\ncaw\ncawk\ncawky\ncawney\ncawquaw\ncaxiri\ncaxon\nCaxton\nCaxtonian\ncay\nCayapa\nCayapo\nCayenne\ncayenne\ncayenned\nCayleyan\ncayman\nCayubaba\nCayubaban\nCayuga\nCayugan\nCayuse\nCayuvava\ncaza\ncazimi\nCcoya\nce\nCeanothus\ncearin\ncease\nceaseless\nceaselessly\nceaselessness\nceasmic\nCebalrai\nCebatha\ncebell\ncebian\ncebid\nCebidae\ncebil\ncebine\nceboid\ncebollite\ncebur\nCebus\ncecidiologist\ncecidiology\ncecidium\ncecidogenous\ncecidologist\ncecidology\ncecidomyian\ncecidomyiid\nCecidomyiidae\ncecidomyiidous\nCecil\nCecile\nCecilia\ncecilite\ncecils\nCecily\ncecity\ncecograph\nCecomorphae\ncecomorphic\ncecostomy\nCecropia\nCecrops\ncecutiency\ncedar\ncedarbird\ncedared\ncedarn\ncedarware\ncedarwood\ncedary\ncede\ncedent\nceder\ncedilla\ncedrat\ncedrate\ncedre\nCedrela\ncedrene\nCedric\ncedrin\ncedrine\ncedriret\ncedrium\ncedrol\ncedron\nCedrus\ncedry\ncedula\ncee\nCeiba\nceibo\nceil\nceile\nceiler\nceilidh\nceiling\nceilinged\nceilingward\nceilingwards\nceilometer\nCeladon\nceladon\nceladonite\nCelaeno\ncelandine\nCelanese\nCelarent\nCelastraceae\ncelastraceous\nCelastrus\ncelation\ncelative\ncelature\nCelebesian\ncelebrant\ncelebrate\ncelebrated\ncelebratedness\ncelebrater\ncelebration\ncelebrative\ncelebrator\ncelebratory\ncelebrity\ncelemin\ncelemines\nceleomorph\nCeleomorphae\nceleomorphic\nceleriac\ncelerity\ncelery\ncelesta\nCeleste\nceleste\ncelestial\ncelestiality\ncelestialize\ncelestially\ncelestialness\ncelestina\nCelestine\ncelestine\nCelestinian\ncelestite\ncelestitude\nCelia\nceliac\nceliadelphus\nceliagra\ncelialgia\ncelibacy\ncelibatarian\ncelibate\ncelibatic\ncelibatist\ncelibatory\ncelidographer\ncelidography\nceliectasia\nceliectomy\nceliemia\nceliitis\nceliocele\nceliocentesis\nceliocolpotomy\nceliocyesis\nceliodynia\ncelioelytrotomy\ncelioenterotomy\nceliogastrotomy\nceliohysterotomy\nceliolymph\nceliomyalgia\nceliomyodynia\nceliomyomectomy\nceliomyomotomy\nceliomyositis\ncelioncus\ncelioparacentesis\nceliopyosis\nceliorrhaphy\nceliorrhea\nceliosalpingectomy\nceliosalpingotomy\ncelioschisis\ncelioscope\ncelioscopy\nceliotomy\ncelite\ncell\ncella\ncellae\ncellar\ncellarage\ncellarer\ncellaress\ncellaret\ncellaring\ncellarless\ncellarman\ncellarous\ncellarway\ncellarwoman\ncellated\ncelled\nCellepora\ncellepore\nCellfalcicula\ncelliferous\ncelliform\ncellifugal\ncellipetal\ncellist\nCellite\ncello\ncellobiose\ncelloid\ncelloidin\ncelloist\ncellophane\ncellose\nCellucotton\ncellular\ncellularity\ncellularly\ncellulase\ncellulate\ncellulated\ncellulation\ncellule\ncellulicidal\ncelluliferous\ncellulifugal\ncellulifugally\ncellulin\ncellulipetal\ncellulipetally\ncellulitis\ncellulocutaneous\ncellulofibrous\nCelluloid\ncelluloid\ncelluloided\nCellulomonadeae\nCellulomonas\ncellulose\ncellulosic\ncellulosity\ncellulotoxic\ncellulous\nCellvibrio\nCelosia\nCelotex\ncelotomy\nCelsia\ncelsian\nCelsius\nCelt\ncelt\nCeltdom\nCeltiberi\nCeltiberian\nCeltic\nCeltically\nCelticism\nCelticist\nCelticize\nCeltidaceae\nceltiform\nCeltillyrians\nCeltis\nCeltish\nCeltism\nCeltist\nceltium\nCeltization\nCeltologist\nCeltologue\nCeltomaniac\nCeltophil\nCeltophobe\nCeltophobia\nceltuce\ncembalist\ncembalo\ncement\ncemental\ncementation\ncementatory\ncementer\ncementification\ncementin\ncementite\ncementitious\ncementless\ncementmaker\ncementmaking\ncementoblast\ncementoma\ncementum\ncemeterial\ncemetery\ncenacle\ncenaculum\ncenanthous\ncenanthy\ncencerro\nCenchrus\ncendre\ncenobian\ncenobite\ncenobitic\ncenobitical\ncenobitically\ncenobitism\ncenobium\ncenoby\ncenogenesis\ncenogenetic\ncenogenetically\ncenogonous\nCenomanian\ncenosite\ncenosity\ncenospecies\ncenospecific\ncenospecifically\ncenotaph\ncenotaphic\ncenotaphy\nCenozoic\ncenozoology\ncense\ncenser\ncenserless\ncensive\ncensor\ncensorable\ncensorate\ncensorial\ncensorious\ncensoriously\ncensoriousness\ncensorship\ncensual\ncensurability\ncensurable\ncensurableness\ncensurably\ncensure\ncensureless\ncensurer\ncensureship\ncensus\ncent\ncentage\ncental\ncentare\ncentaur\ncentaurdom\nCentaurea\ncentauress\ncentauri\ncentaurial\ncentaurian\ncentauric\nCentaurid\nCentauridium\nCentaurium\ncentauromachia\ncentauromachy\nCentaurus\ncentaurus\ncentaury\ncentavo\ncentena\ncentenar\ncentenarian\ncentenarianism\ncentenary\ncentenier\ncentenionalis\ncentennial\ncentennially\ncenter\ncenterable\ncenterboard\ncentered\ncenterer\ncentering\ncenterless\ncentermost\ncenterpiece\ncentervelic\ncenterward\ncenterwise\ncentesimal\ncentesimally\ncentesimate\ncentesimation\ncentesimi\ncentesimo\ncentesis\nCentetes\ncentetid\nCentetidae\ncentgener\ncentiar\ncentiare\ncentibar\ncentifolious\ncentigrade\ncentigram\ncentile\ncentiliter\ncentillion\ncentillionth\nCentiloquy\ncentime\ncentimeter\ncentimo\ncentimolar\ncentinormal\ncentipedal\ncentipede\ncentiplume\ncentipoise\ncentistere\ncentistoke\ncentner\ncento\ncentonical\ncentonism\ncentrad\ncentral\ncentrale\nCentrales\ncentralism\ncentralist\ncentralistic\ncentrality\ncentralization\ncentralize\ncentralizer\ncentrally\ncentralness\ncentranth\nCentranthus\ncentrarchid\nCentrarchidae\ncentrarchoid\nCentraxonia\ncentraxonial\nCentrechinoida\ncentric\nCentricae\ncentrical\ncentricality\ncentrically\ncentricalness\ncentricipital\ncentriciput\ncentricity\ncentriffed\ncentrifugal\ncentrifugalization\ncentrifugalize\ncentrifugaller\ncentrifugally\ncentrifugate\ncentrifugation\ncentrifuge\ncentrifugence\ncentriole\ncentripetal\ncentripetalism\ncentripetally\ncentripetence\ncentripetency\ncentriscid\nCentriscidae\ncentrisciform\ncentriscoid\nCentriscus\ncentrist\ncentroacinar\ncentrobaric\ncentrobarical\ncentroclinal\ncentrode\ncentrodesmose\ncentrodesmus\ncentrodorsal\ncentrodorsally\ncentroid\ncentroidal\ncentrolecithal\nCentrolepidaceae\ncentrolepidaceous\ncentrolinead\ncentrolineal\ncentromere\ncentronucleus\ncentroplasm\nCentropomidae\nCentropomus\nCentrosema\ncentrosome\ncentrosomic\nCentrosoyus\nCentrospermae\ncentrosphere\ncentrosymmetric\ncentrosymmetry\nCentrotus\ncentrum\ncentry\ncentum\ncentumvir\ncentumviral\ncentumvirate\nCentunculus\ncentuple\ncentuplicate\ncentuplication\ncentuply\ncenturia\ncenturial\ncenturiate\ncenturiation\ncenturiator\ncenturied\ncenturion\ncentury\nceorl\nceorlish\ncep\ncepa\ncepaceous\ncepe\ncephaeline\nCephaelis\nCephalacanthidae\nCephalacanthus\ncephalad\ncephalagra\ncephalalgia\ncephalalgic\ncephalalgy\ncephalanthium\ncephalanthous\nCephalanthus\nCephalaspis\nCephalata\ncephalate\ncephaldemae\ncephalemia\ncephaletron\nCephaleuros\ncephalhematoma\ncephalhydrocele\ncephalic\ncephalin\nCephalina\ncephaline\ncephalism\ncephalitis\ncephalization\ncephaloauricular\nCephalobranchiata\ncephalobranchiate\ncephalocathartic\ncephalocaudal\ncephalocele\ncephalocentesis\ncephalocercal\nCephalocereus\ncephalochord\nCephalochorda\ncephalochordal\nCephalochordata\ncephalochordate\ncephaloclasia\ncephaloclast\ncephalocone\ncephaloconic\ncephalocyst\ncephalodiscid\nCephalodiscida\nCephalodiscus\ncephalodymia\ncephalodymus\ncephalodynia\ncephalofacial\ncephalogenesis\ncephalogram\ncephalograph\ncephalohumeral\ncephalohumeralis\ncephaloid\ncephalology\ncephalomancy\ncephalomant\ncephalomelus\ncephalomenia\ncephalomeningitis\ncephalomere\ncephalometer\ncephalometric\ncephalometry\ncephalomotor\ncephalomyitis\ncephalon\ncephalonasal\ncephalopagus\ncephalopathy\ncephalopharyngeal\ncephalophine\ncephalophorous\nCephalophus\ncephalophyma\ncephaloplegia\ncephaloplegic\ncephalopod\nCephalopoda\ncephalopodan\ncephalopodic\ncephalopodous\nCephalopterus\ncephalorachidian\ncephalorhachidian\ncephalosome\ncephalospinal\nCephalosporium\ncephalostyle\nCephalotaceae\ncephalotaceous\nCephalotaxus\ncephalotheca\ncephalothecal\ncephalothoracic\ncephalothoracopagus\ncephalothorax\ncephalotome\ncephalotomy\ncephalotractor\ncephalotribe\ncephalotripsy\ncephalotrocha\nCephalotus\ncephalous\nCephas\nCepheid\ncephid\nCephidae\nCephus\nCepolidae\nceps\nceptor\ncequi\nceraceous\ncerago\nceral\nceramal\ncerambycid\nCerambycidae\nCeramiaceae\nceramiaceous\nceramic\nceramicite\nceramics\nceramidium\nceramist\nCeramium\nceramographic\nceramography\ncerargyrite\nceras\ncerasein\ncerasin\ncerastes\nCerastium\nCerasus\ncerata\ncerate\nceratectomy\ncerated\nceratiasis\nceratiid\nCeratiidae\nceratioid\nceration\nceratite\nCeratites\nceratitic\nCeratitidae\nCeratitis\nceratitoid\nCeratitoidea\nCeratium\nCeratobatrachinae\nceratoblast\nceratobranchial\nceratocricoid\nCeratodidae\nCeratodontidae\nCeratodus\nceratofibrous\nceratoglossal\nceratoglossus\nceratohyal\nceratohyoid\nceratoid\nceratomandibular\nceratomania\nCeratonia\nCeratophrys\nCeratophyllaceae\nceratophyllaceous\nCeratophyllum\nCeratophyta\nceratophyte\nCeratops\nCeratopsia\nceratopsian\nceratopsid\nCeratopsidae\nCeratopteridaceae\nceratopteridaceous\nCeratopteris\nceratorhine\nCeratosa\nCeratosaurus\nCeratospongiae\nceratospongian\nCeratostomataceae\nCeratostomella\nceratotheca\nceratothecal\nCeratozamia\nceraunia\nceraunics\nceraunogram\nceraunograph\nceraunomancy\nceraunophone\nceraunoscope\nceraunoscopy\nCerberean\nCerberic\nCerberus\ncercal\ncercaria\ncercarial\ncercarian\ncercariform\ncercelee\ncerci\nCercidiphyllaceae\nCercis\nCercocebus\nCercolabes\nCercolabidae\ncercomonad\nCercomonadidae\nCercomonas\ncercopid\nCercopidae\ncercopithecid\nCercopithecidae\ncercopithecoid\nCercopithecus\ncercopod\nCercospora\nCercosporella\ncercus\nCerdonian\ncere\ncereal\ncerealian\ncerealin\ncerealism\ncerealist\ncerealose\ncerebella\ncerebellar\ncerebellifugal\ncerebellipetal\ncerebellocortex\ncerebellopontile\ncerebellopontine\ncerebellorubral\ncerebellospinal\ncerebellum\ncerebra\ncerebral\ncerebralgia\ncerebralism\ncerebralist\ncerebralization\ncerebralize\ncerebrally\ncerebrasthenia\ncerebrasthenic\ncerebrate\ncerebration\ncerebrational\nCerebratulus\ncerebric\ncerebricity\ncerebriform\ncerebriformly\ncerebrifugal\ncerebrin\ncerebripetal\ncerebritis\ncerebrize\ncerebrocardiac\ncerebrogalactose\ncerebroganglion\ncerebroganglionic\ncerebroid\ncerebrology\ncerebroma\ncerebromalacia\ncerebromedullary\ncerebromeningeal\ncerebromeningitis\ncerebrometer\ncerebron\ncerebronic\ncerebroparietal\ncerebropathy\ncerebropedal\ncerebrophysiology\ncerebropontile\ncerebropsychosis\ncerebrorachidian\ncerebrosclerosis\ncerebroscope\ncerebroscopy\ncerebrose\ncerebrosensorial\ncerebroside\ncerebrosis\ncerebrospinal\ncerebrospinant\ncerebrosuria\ncerebrotomy\ncerebrotonia\ncerebrotonic\ncerebrovisceral\ncerebrum\ncerecloth\ncered\ncereless\ncerement\nceremonial\nceremonialism\nceremonialist\nceremonialize\nceremonially\nceremonious\nceremoniously\nceremoniousness\nceremony\ncereous\ncerer\nceresin\nCereus\ncerevis\nceria\nCerialia\ncerianthid\nCerianthidae\ncerianthoid\nCerianthus\nceric\nceride\nceriferous\ncerigerous\ncerillo\nceriman\ncerin\ncerine\nCerinthe\nCerinthian\nCeriomyces\nCerion\nCerionidae\nceriops\nCeriornis\ncerise\ncerite\nCerithiidae\ncerithioid\nCerithium\ncerium\ncermet\ncern\ncerniture\ncernuous\ncero\ncerograph\ncerographic\ncerographist\ncerography\nceroline\ncerolite\nceroma\nceromancy\ncerophilous\nceroplast\nceroplastic\nceroplastics\nceroplasty\ncerotate\ncerote\ncerotene\ncerotic\ncerotin\ncerotype\ncerous\nceroxyle\nCeroxylon\ncerrero\ncerrial\ncerris\ncertain\ncertainly\ncertainty\nCerthia\nCerthiidae\ncertie\ncertifiable\ncertifiableness\ncertifiably\ncertificate\ncertification\ncertificative\ncertificator\ncertificatory\ncertified\ncertifier\ncertify\ncertiorari\ncertiorate\ncertioration\ncertis\ncertitude\ncertosina\ncertosino\ncerty\ncerule\ncerulean\ncerulein\nceruleite\nceruleolactite\nceruleous\ncerulescent\nceruleum\ncerulignol\ncerulignone\ncerumen\nceruminal\nceruminiferous\nceruminous\ncerumniparous\nceruse\ncerussite\nCervantist\ncervantite\ncervical\nCervicapra\ncervicaprine\ncervicectomy\ncervicicardiac\ncervicide\ncerviciplex\ncervicispinal\ncervicitis\ncervicoauricular\ncervicoaxillary\ncervicobasilar\ncervicobrachial\ncervicobregmatic\ncervicobuccal\ncervicodorsal\ncervicodynia\ncervicofacial\ncervicohumeral\ncervicolabial\ncervicolingual\ncervicolumbar\ncervicomuscular\ncerviconasal\ncervicorn\ncervicoscapular\ncervicothoracic\ncervicovaginal\ncervicovesical\ncervid\nCervidae\nCervinae\ncervine\ncervisia\ncervisial\ncervix\ncervoid\ncervuline\nCervulus\nCervus\nceryl\nCerynean\nCesare\ncesarevitch\ncesarolite\ncesious\ncesium\ncespititous\ncespitose\ncespitosely\ncespitulose\ncess\ncessantly\ncessation\ncessative\ncessavit\ncesser\ncession\ncessionaire\ncessionary\ncessor\ncesspipe\ncesspit\ncesspool\ncest\nCestida\nCestidae\nCestoda\nCestodaria\ncestode\ncestoid\nCestoidea\ncestoidean\nCestracion\ncestraciont\nCestraciontes\nCestraciontidae\nCestrian\nCestrum\ncestrum\ncestus\nCetacea\ncetacean\ncetaceous\ncetaceum\ncetane\nCete\ncetene\nceterach\nceti\ncetic\nceticide\nCetid\ncetin\nCetiosauria\ncetiosaurian\nCetiosaurus\ncetological\ncetologist\ncetology\nCetomorpha\ncetomorphic\nCetonia\ncetonian\nCetoniides\nCetoniinae\ncetorhinid\nCetorhinidae\ncetorhinoid\nCetorhinus\ncetotolite\nCetraria\ncetraric\ncetrarin\nCetus\ncetyl\ncetylene\ncetylic\ncevadilla\ncevadilline\ncevadine\nCevennian\nCevenol\nCevenole\ncevine\ncevitamic\nceylanite\nCeylon\nCeylonese\nceylonite\nceyssatite\nCeyx\nCezannesque\ncha\nchaa\nchab\nchabasie\nchabazite\nChablis\nchabot\nchabouk\nchabuk\nchabutra\nChac\nchacate\nchachalaca\nChachapuya\nchack\nChackchiuma\nchacker\nchackle\nchackler\nchacma\nChaco\nchacona\nchacte\nchad\nchadacryst\nChaenactis\nChaenolobus\nChaenomeles\nchaeta\nChaetangiaceae\nChaetangium\nChaetetes\nChaetetidae\nChaetifera\nchaetiferous\nChaetites\nChaetitidae\nChaetochloa\nChaetodon\nchaetodont\nchaetodontid\nChaetodontidae\nchaetognath\nChaetognatha\nchaetognathan\nchaetognathous\nChaetophora\nChaetophoraceae\nchaetophoraceous\nChaetophorales\nchaetophorous\nchaetopod\nChaetopoda\nchaetopodan\nchaetopodous\nchaetopterin\nChaetopterus\nchaetosema\nChaetosoma\nChaetosomatidae\nChaetosomidae\nchaetotactic\nchaetotaxy\nChaetura\nchafe\nchafer\nchafery\nchafewax\nchafeweed\nchaff\nchaffcutter\nchaffer\nchafferer\nchaffinch\nchaffiness\nchaffing\nchaffingly\nchaffless\nchafflike\nchaffman\nchaffseed\nchaffwax\nchaffweed\nchaffy\nchaft\nchafted\nChaga\nchagan\nChagga\nchagrin\nchaguar\nchagul\nchahar\nchai\nChailletiaceae\nchain\nchainage\nchained\nchainer\nchainette\nchainless\nchainlet\nchainmaker\nchainmaking\nchainman\nchainon\nchainsmith\nchainwale\nchainwork\nchair\nchairer\nchairless\nchairmaker\nchairmaking\nchairman\nchairmanship\nchairmender\nchairmending\nchairwarmer\nchairwoman\nchais\nchaise\nchaiseless\nChait\nchaitya\nchaja\nchaka\nchakar\nchakari\nChakavski\nchakazi\nchakdar\nchakobu\nchakra\nchakram\nchakravartin\nchaksi\nchal\nchalaco\nchalana\nchalastic\nChalastogastra\nchalaza\nchalazal\nchalaze\nchalazian\nchalaziferous\nchalazion\nchalazogam\nchalazogamic\nchalazogamy\nchalazoidite\nchalcanthite\nChalcedonian\nchalcedonic\nchalcedonous\nchalcedony\nchalcedonyx\nchalchuite\nchalcid\nChalcidian\nChalcidic\nchalcidicum\nchalcidid\nChalcididae\nchalcidiform\nchalcidoid\nChalcidoidea\nChalcioecus\nChalcis\nchalcites\nchalcocite\nchalcograph\nchalcographer\nchalcographic\nchalcographical\nchalcographist\nchalcography\nchalcolite\nchalcolithic\nchalcomancy\nchalcomenite\nchalcon\nchalcone\nchalcophanite\nchalcophyllite\nchalcopyrite\nchalcosiderite\nchalcosine\nchalcostibite\nchalcotrichite\nchalcotript\nchalcus\nChaldaei\nChaldaic\nChaldaical\nChaldaism\nChaldean\nChaldee\nchalder\nchaldron\nchalet\nchalice\nchaliced\nchalicosis\nchalicothere\nchalicotheriid\nChalicotheriidae\nchalicotherioid\nChalicotherium\nChalina\nChalinidae\nchalinine\nChalinitis\nchalk\nchalkcutter\nchalker\nchalkiness\nchalklike\nchalkography\nchalkosideric\nchalkstone\nchalkstony\nchalkworker\nchalky\nchallah\nchallenge\nchallengeable\nchallengee\nchallengeful\nchallenger\nchallengingly\nchallie\nchallis\nchallote\nchalmer\nchalon\nchalone\nChalons\nchalque\nchalta\nChalukya\nChalukyan\nchalumeau\nchalutz\nchalutzim\nChalybean\nchalybeate\nchalybeous\nChalybes\nchalybite\nCham\ncham\nChama\nChamacea\nChamacoco\nChamaebatia\nChamaecistus\nchamaecranial\nChamaecrista\nChamaecyparis\nChamaedaphne\nChamaeleo\nChamaeleon\nChamaeleontidae\nChamaelirium\nChamaenerion\nChamaepericlymenum\nchamaeprosopic\nChamaerops\nchamaerrhine\nChamaesaura\nChamaesiphon\nChamaesiphonaceae\nChamaesiphonaceous\nChamaesiphonales\nChamaesyce\nchamal\nChamar\nchamar\nchamber\nchamberdeacon\nchambered\nchamberer\nchambering\nchamberlain\nchamberlainry\nchamberlainship\nchamberlet\nchamberleted\nchamberletted\nchambermaid\nChambertin\nchamberwoman\nChambioa\nchambray\nchambrel\nchambul\nchamecephalic\nchamecephalous\nchamecephalus\nchamecephaly\nchameleon\nchameleonic\nchameleonize\nchameleonlike\nchamfer\nchamferer\nchamfron\nChamian\nChamicuro\nChamidae\nchamisal\nchamiso\nChamite\nchamite\nChamkanni\nchamma\nchamois\nChamoisette\nchamoisite\nchamoline\nChamomilla\nChamorro\nChamos\nchamp\nChampa\nchampac\nchampaca\nchampacol\nchampagne\nchampagneless\nchampagnize\nchampaign\nchampain\nchampaka\nchamper\nchampertor\nchampertous\nchamperty\nchampignon\nchampion\nchampioness\nchampionize\nchampionless\nchampionlike\nchampionship\nChamplain\nChamplainic\nchampleve\nchampy\nChanabal\nChanca\nchance\nchanceful\nchancefully\nchancefulness\nchancel\nchanceled\nchanceless\nchancellery\nchancellor\nchancellorate\nchancelloress\nchancellorism\nchancellorship\nchancer\nchancery\nchancewise\nchanche\nchanchito\nchanco\nchancre\nchancriform\nchancroid\nchancroidal\nchancrous\nchancy\nchandala\nchandam\nchandelier\nChandi\nchandi\nchandler\nchandleress\nchandlering\nchandlery\nchandoo\nchandu\nchandul\nChane\nchanfrin\nChang\nchang\nchanga\nchangar\nchange\nchangeability\nchangeable\nchangeableness\nchangeably\nchangedale\nchangedness\nchangeful\nchangefully\nchangefulness\nchangeless\nchangelessly\nchangelessness\nchangeling\nchangement\nchanger\nChangoan\nChangos\nChanguina\nChanguinan\nChanidae\nchank\nchankings\nchannel\nchannelbill\nchanneled\nchanneler\nchanneling\nchannelization\nchannelize\nchannelled\nchanneller\nchannelling\nchannelwards\nchanner\nchanson\nchansonnette\nchanst\nchant\nchantable\nchanter\nchanterelle\nchantership\nchantey\nchanteyman\nchanticleer\nchanting\nchantingly\nchantlate\nchantress\nchantry\nchao\nchaogenous\nchaology\nchaos\nchaotic\nchaotical\nchaotically\nchaoticness\nChaouia\nchap\nChapacura\nChapacuran\nchapah\nChapanec\nchaparral\nchaparro\nchapatty\nchapbook\nchape\nchapeau\nchapeaux\nchaped\nchapel\nchapeless\nchapelet\nchapelgoer\nchapelgoing\nchapellage\nchapellany\nchapelman\nchapelmaster\nchapelry\nchapelward\nchaperno\nchaperon\nchaperonage\nchaperone\nchaperonless\nchapfallen\nchapin\nchapiter\nchapitral\nchaplain\nchaplaincy\nchaplainry\nchaplainship\nchapless\nchaplet\nchapleted\nchapman\nchapmanship\nchapournet\nchapournetted\nchappaul\nchapped\nchapper\nchappie\nchappin\nchapping\nchappow\nchappy\nchaps\nchapt\nchaptalization\nchaptalize\nchapter\nchapteral\nchapterful\nchapwoman\nchar\nChara\ncharabanc\ncharabancer\ncharac\nCharaceae\ncharaceous\ncharacetum\ncharacin\ncharacine\ncharacinid\nCharacinidae\ncharacinoid\ncharacter\ncharacterful\ncharacterial\ncharacterical\ncharacterism\ncharacterist\ncharacteristic\ncharacteristical\ncharacteristically\ncharacteristicalness\ncharacteristicness\ncharacterizable\ncharacterization\ncharacterize\ncharacterizer\ncharacterless\ncharacterlessness\ncharacterological\ncharacterologist\ncharacterology\ncharactery\ncharade\nCharadrii\nCharadriidae\ncharadriiform\nCharadriiformes\ncharadrine\ncharadrioid\nCharadriomorphae\nCharadrius\nCharales\ncharas\ncharbon\nCharca\ncharcoal\ncharcoaly\ncharcutier\nchard\nchardock\nchare\ncharer\ncharet\ncharette\ncharge\nchargeability\nchargeable\nchargeableness\nchargeably\nchargee\nchargeless\nchargeling\nchargeman\ncharger\nchargeship\ncharging\nCharicleia\ncharier\ncharily\nchariness\nchariot\ncharioted\nchariotee\ncharioteer\ncharioteership\nchariotlike\nchariotman\nchariotry\nchariotway\ncharism\ncharisma\ncharismatic\nCharissa\ncharisticary\ncharitable\ncharitableness\ncharitably\nCharites\ncharity\ncharityless\ncharivari\nchark\ncharka\ncharkha\ncharkhana\ncharlady\ncharlatan\ncharlatanic\ncharlatanical\ncharlatanically\ncharlatanish\ncharlatanism\ncharlatanistic\ncharlatanry\ncharlatanship\nCharleen\nCharlene\nCharles\nCharleston\nCharley\nCharlie\ncharlock\nCharlotte\ncharm\ncharmedly\ncharmel\ncharmer\ncharmful\ncharmfully\ncharmfulness\ncharming\ncharmingly\ncharmingness\ncharmless\ncharmlessly\ncharmwise\ncharnel\ncharnockite\nCharon\nCharonian\nCharonic\nCharontas\nCharophyta\ncharpit\ncharpoy\ncharqued\ncharqui\ncharr\nCharruan\nCharruas\ncharry\ncharshaf\ncharsingha\nchart\nchartaceous\ncharter\ncharterable\ncharterage\nchartered\ncharterer\ncharterhouse\nCharterist\ncharterless\nchartermaster\ncharthouse\ncharting\nChartism\nChartist\nchartist\nchartless\nchartographist\nchartology\nchartometer\nchartophylax\nchartreuse\nChartreux\nchartroom\nchartula\nchartulary\ncharuk\ncharwoman\nchary\nCharybdian\nCharybdis\nchasable\nchase\nchaseable\nchaser\nChasidim\nchasing\nchasm\nchasma\nchasmal\nchasmed\nchasmic\nchasmogamic\nchasmogamous\nchasmogamy\nchasmophyte\nchasmy\nchasse\nChasselas\nchassepot\nchasseur\nchassignite\nchassis\nChastacosta\nchaste\nchastely\nchasten\nchastener\nchasteness\nchasteningly\nchastenment\nchasteweed\nchastisable\nchastise\nchastisement\nchastiser\nchastity\nchasuble\nchasubled\nchat\nchataka\nChateau\nchateau\nchateaux\nchatelain\nchatelaine\nchatelainry\nchatellany\nchathamite\nchati\nChatillon\nChatino\nChatot\nchatoyance\nchatoyancy\nchatoyant\nchatsome\nchatta\nchattable\nChattanooga\nChattanoogan\nchattation\nchattel\nchattelhood\nchattelism\nchattelization\nchattelize\nchattelship\nchatter\nchatteration\nchatterbag\nchatterbox\nchatterer\nchattering\nchatteringly\nchattermag\nchattermagging\nChattertonian\nchattery\nChatti\nchattily\nchattiness\nchatting\nchattingly\nchatty\nchatwood\nChaucerian\nChauceriana\nChaucerianism\nChaucerism\nChauchat\nchaudron\nchauffer\nchauffeur\nchauffeurship\nChaui\nchauk\nchaukidari\nChauliodes\nchaulmoogra\nchaulmoograte\nchaulmoogric\nChauna\nchaus\nchausseemeile\nChautauqua\nChautauquan\nchaute\nchauth\nchauvinism\nchauvinist\nchauvinistic\nchauvinistically\nChavante\nChavantean\nchavender\nchavibetol\nchavicin\nchavicine\nchavicol\nchavish\nchaw\nchawan\nchawbacon\nchawer\nChawia\nchawk\nchawl\nchawstick\nchay\nchaya\nchayaroot\nChayma\nChayota\nchayote\nchayroot\nchazan\nChazy\nche\ncheap\ncheapen\ncheapener\ncheapery\ncheaping\ncheapish\ncheaply\ncheapness\nCheapside\ncheat\ncheatable\ncheatableness\ncheatee\ncheater\ncheatery\ncheating\ncheatingly\ncheatrie\nChebacco\nchebec\nchebel\nchebog\nchebule\nchebulinic\nChechehet\nChechen\ncheck\ncheckable\ncheckage\ncheckbird\ncheckbite\ncheckbook\nchecked\nchecker\ncheckerbelly\ncheckerberry\ncheckerbloom\ncheckerboard\ncheckerbreast\ncheckered\ncheckerist\ncheckers\ncheckerwise\ncheckerwork\ncheckhook\ncheckless\ncheckman\ncheckmate\ncheckoff\ncheckrack\ncheckrein\ncheckroll\ncheckroom\ncheckrope\ncheckrow\ncheckrowed\ncheckrower\ncheckstone\ncheckstrap\ncheckstring\ncheckup\ncheckweigher\ncheckwork\nchecky\ncheddaring\ncheddite\ncheder\nchedlock\nchee\ncheecha\ncheechako\ncheek\ncheekbone\ncheeker\ncheekily\ncheekiness\ncheekish\ncheekless\ncheekpiece\ncheeky\ncheep\ncheeper\ncheepily\ncheepiness\ncheepy\ncheer\ncheered\ncheerer\ncheerful\ncheerfulize\ncheerfully\ncheerfulness\ncheerfulsome\ncheerily\ncheeriness\ncheering\ncheeringly\ncheerio\ncheerleader\ncheerless\ncheerlessly\ncheerlessness\ncheerly\ncheery\ncheese\ncheeseboard\ncheesebox\ncheeseburger\ncheesecake\ncheesecloth\ncheesecurd\ncheesecutter\ncheeseflower\ncheeselip\ncheesemonger\ncheesemongering\ncheesemongerly\ncheesemongery\ncheeseparer\ncheeseparing\ncheeser\ncheesery\ncheesewood\ncheesiness\ncheesy\ncheet\ncheetah\ncheeter\ncheetie\nchef\nChefrinia\nchegoe\nchegre\nChehalis\nCheilanthes\ncheilitis\nCheilodipteridae\nCheilodipterus\nCheilostomata\ncheilostomatous\ncheir\ncheiragra\nCheiranthus\nCheirogaleus\nCheiroglossa\ncheirognomy\ncheirography\ncheirolin\ncheirology\ncheiromancy\ncheiromegaly\ncheiropatagium\ncheiropodist\ncheiropody\ncheiropompholyx\nCheiroptera\ncheiropterygium\ncheirosophy\ncheirospasm\nCheirotherium\nCheka\nchekan\ncheke\ncheki\nChekist\nchekmak\nchela\nchelaship\nchelate\nchelation\nchelem\nchelerythrine\nchelicer\nchelicera\ncheliceral\nchelicerate\nchelicere\nchelide\nchelidon\nchelidonate\nchelidonian\nchelidonic\nchelidonine\nChelidonium\nChelidosaurus\nCheliferidea\ncheliferous\ncheliform\nchelingo\ncheliped\nChellean\nchello\nChelodina\nchelodine\nchelone\nChelonia\nchelonian\nchelonid\nChelonidae\ncheloniid\nCheloniidae\nchelonin\nchelophore\nchelp\nCheltenham\nChelura\nChelydidae\nChelydra\nChelydridae\nchelydroid\nchelys\nChemakuan\nchemasthenia\nchemawinite\nChemehuevi\nchemesthesis\nchemiatric\nchemiatrist\nchemiatry\nchemic\nchemical\nchemicalization\nchemicalize\nchemically\nchemicker\nchemicoastrological\nchemicobiologic\nchemicobiology\nchemicocautery\nchemicodynamic\nchemicoengineering\nchemicoluminescence\nchemicomechanical\nchemicomineralogical\nchemicopharmaceutical\nchemicophysical\nchemicophysics\nchemicophysiological\nchemicovital\nchemigraph\nchemigraphic\nchemigraphy\nchemiloon\nchemiluminescence\nchemiotactic\nchemiotaxic\nchemiotaxis\nchemiotropic\nchemiotropism\nchemiphotic\nchemis\nchemise\nchemisette\nchemism\nchemisorb\nchemisorption\nchemist\nchemistry\nchemitype\nchemitypy\nchemoceptor\nchemokinesis\nchemokinetic\nchemolysis\nchemolytic\nchemolyze\nchemoreception\nchemoreceptor\nchemoreflex\nchemoresistance\nchemoserotherapy\nchemosis\nchemosmosis\nchemosmotic\nchemosynthesis\nchemosynthetic\nchemotactic\nchemotactically\nchemotaxis\nchemotaxy\nchemotherapeutic\nchemotherapeutics\nchemotherapist\nchemotherapy\nchemotic\nchemotropic\nchemotropically\nchemotropism\nChemung\nchemurgic\nchemurgical\nchemurgy\nChen\nchena\nchende\nchenevixite\nCheney\ncheng\nchenica\nchenille\ncheniller\nchenopod\nChenopodiaceae\nchenopodiaceous\nChenopodiales\nChenopodium\ncheoplastic\nchepster\ncheque\nChequers\nChera\nchercock\ncherem\nCheremiss\nCheremissian\ncherimoya\ncherish\ncherishable\ncherisher\ncherishing\ncherishingly\ncherishment\nCherkess\nCherkesser\nChermes\nChermidae\nChermish\nChernomorish\nchernozem\nCherokee\ncheroot\ncherried\ncherry\ncherryblossom\ncherrylike\nchersonese\nChersydridae\nchert\ncherte\ncherty\ncherub\ncherubic\ncherubical\ncherubically\ncherubim\ncherubimic\ncherubimical\ncherubin\nCherusci\nChervante\nchervil\nchervonets\nChesapeake\nCheshire\ncheson\nchess\nchessboard\nchessdom\nchessel\nchesser\nchessist\nchessman\nchessmen\nchesstree\nchessylite\nchest\nChester\nchester\nchesterfield\nChesterfieldian\nchesterlite\nchestful\nchestily\nchestiness\nchestnut\nchestnutty\nchesty\nChet\ncheth\nchettik\nchetty\nchetverik\nchetvert\nchevage\ncheval\nchevalier\nchevaline\nchevance\ncheve\ncheven\nchevener\nchevesaile\nchevin\nCheviot\nchevisance\nchevise\nchevon\nchevrette\nchevron\nchevrone\nchevronel\nchevronelly\nchevronwise\nchevrony\nchevrotain\nchevy\nchew\nchewbark\nchewer\nchewink\nchewstick\nchewy\nCheyenne\ncheyney\nchhatri\nchi\nchia\nChiam\nChian\nChianti\nChiapanec\nChiapanecan\nchiaroscurist\nchiaroscuro\nchiasm\nchiasma\nchiasmal\nchiasmatype\nchiasmatypy\nchiasmic\nChiasmodon\nchiasmodontid\nChiasmodontidae\nchiasmus\nchiastic\nchiastolite\nchiastoneural\nchiastoneurous\nchiastoneury\nchiaus\nChibcha\nChibchan\nchibinite\nchibouk\nchibrit\nchic\nchicane\nchicaner\nchicanery\nchicaric\nchicayote\nChicha\nchichi\nchichicaste\nChichimec\nchichimecan\nchichipate\nchichipe\nchichituna\nchick\nchickabiddy\nchickadee\nChickahominy\nChickamauga\nchickaree\nChickasaw\nchickasaw\nchickell\nchicken\nchickenberry\nchickenbill\nchickenbreasted\nchickenhearted\nchickenheartedly\nchickenheartedness\nchickenhood\nchickenweed\nchickenwort\nchicker\nchickhood\nchickling\nchickstone\nchickweed\nchickwit\nchicky\nchicle\nchicness\nChico\nchico\nChicomecoatl\nchicory\nchicot\nchicote\nchicqued\nchicquer\nchicquest\nchicquing\nchid\nchidden\nchide\nchider\nchiding\nchidingly\nchidingness\nchidra\nchief\nchiefdom\nchiefery\nchiefess\nchiefest\nchiefish\nchiefless\nchiefling\nchiefly\nchiefship\nchieftain\nchieftaincy\nchieftainess\nchieftainry\nchieftainship\nchieftess\nchield\nChien\nchien\nchiffer\nchiffon\nchiffonade\nchiffonier\nchiffony\nchifforobe\nchigetai\nchiggak\nchigger\nchiggerweed\nchignon\nchignoned\nchigoe\nchih\nchihfu\nChihuahua\nchikara\nchil\nchilacavote\nchilalgia\nchilarium\nchilblain\nChilcat\nchild\nchildbearing\nchildbed\nchildbirth\nchildcrowing\nchilde\nchilded\nChildermas\nchildhood\nchilding\nchildish\nchildishly\nchildishness\nchildkind\nchildless\nchildlessness\nchildlike\nchildlikeness\nchildly\nchildness\nchildrenite\nchildridden\nchildship\nchildward\nchile\nChilean\nChileanization\nChileanize\nchilectropion\nchilenite\nchili\nchiliad\nchiliadal\nchiliadic\nchiliagon\nchiliahedron\nchiliarch\nchiliarchia\nchiliarchy\nchiliasm\nchiliast\nchiliastic\nchilicote\nchilicothe\nchilidium\nChilina\nChilinidae\nchiliomb\nChilion\nchilitis\nChilkat\nchill\nchilla\nchillagite\nchilled\nchiller\nchillily\nchilliness\nchilling\nchillingly\nchillish\nChilliwack\nchillness\nchillo\nchillroom\nchillsome\nchillum\nchillumchee\nchilly\nchilognath\nChilognatha\nchilognathan\nchilognathous\nchilogrammo\nchiloma\nChilomastix\nchiloncus\nchiloplasty\nchilopod\nChilopoda\nchilopodan\nchilopodous\nChilopsis\nChilostoma\nChilostomata\nchilostomatous\nchilostome\nchilotomy\nChiltern\nchilver\nchimaera\nchimaerid\nChimaeridae\nchimaeroid\nChimaeroidei\nChimakuan\nChimakum\nChimalakwe\nChimalapa\nChimane\nchimango\nChimaphila\nChimarikan\nChimariko\nchimble\nchime\nchimer\nchimera\nchimeric\nchimerical\nchimerically\nchimericalness\nchimesmaster\nchiminage\nChimmesyan\nchimney\nchimneyhead\nchimneyless\nchimneyman\nChimonanthus\nchimopeelagic\nchimpanzee\nChimu\nChin\nchin\nchina\nchinaberry\nchinalike\nChinaman\nchinamania\nchinamaniac\nchinampa\nchinanta\nChinantecan\nChinantecs\nchinaphthol\nchinar\nchinaroot\nChinatown\nchinaware\nchinawoman\nchinband\nchinch\nchincha\nChinchasuyu\nchinchayote\nchinche\nchincherinchee\nchinchilla\nchinching\nchincloth\nchincough\nchine\nchined\nChinee\nChinese\nChinesery\nching\nchingma\nChingpaw\nChinhwan\nchinik\nchinin\nChink\nchink\nchinkara\nchinker\nchinkerinchee\nchinking\nchinkle\nchinks\nchinky\nchinless\nchinnam\nchinned\nchinny\nchino\nchinoa\nchinol\nChinook\nChinookan\nchinotoxine\nchinotti\nchinpiece\nchinquapin\nchinse\nchint\nchintz\nchinwood\nChiococca\nchiococcine\nChiogenes\nchiolite\nchionablepsia\nChionanthus\nChionaspis\nChionididae\nChionis\nChionodoxa\nChiot\nchiotilla\nChip\nchip\nchipchap\nchipchop\nChipewyan\nchiplet\nchipling\nchipmunk\nchippable\nchippage\nchipped\nChippendale\nchipper\nchipping\nchippy\nchips\nchipwood\nChiquitan\nChiquito\nchiragra\nchiral\nchiralgia\nchirality\nchirapsia\nchirarthritis\nchirata\nChiriana\nChiricahua\nChiriguano\nchirimen\nChirino\nchirinola\nchiripa\nchirivita\nchirk\nchirm\nchiro\nchirocosmetics\nchirogale\nchirognomic\nchirognomically\nchirognomist\nchirognomy\nchirognostic\nchirograph\nchirographary\nchirographer\nchirographic\nchirographical\nchirography\nchirogymnast\nchirological\nchirologically\nchirologist\nchirology\nchiromance\nchiromancer\nchiromancist\nchiromancy\nchiromant\nchiromantic\nchiromantical\nChiromantis\nchiromegaly\nchirometer\nChiromyidae\nChiromys\nChiron\nchironomic\nchironomid\nChironomidae\nChironomus\nchironomy\nchironym\nchiropatagium\nchiroplasty\nchiropod\nchiropodial\nchiropodic\nchiropodical\nchiropodist\nchiropodistry\nchiropodous\nchiropody\nchiropompholyx\nchiropractic\nchiropractor\nchiropraxis\nchiropter\nChiroptera\nchiropteran\nchiropterite\nchiropterophilous\nchiropterous\nchiropterygian\nchiropterygious\nchiropterygium\nchirosophist\nchirospasm\nChirotes\nchirotherian\nChirotherium\nchirothesia\nchirotonsor\nchirotonsory\nchirotony\nchirotype\nchirp\nchirper\nchirpily\nchirpiness\nchirping\nchirpingly\nchirpling\nchirpy\nchirr\nchirrup\nchirruper\nchirrupy\nchirurgeon\nchirurgery\nChisedec\nchisel\nchiseled\nchiseler\nchisellike\nchiselly\nchiselmouth\nchit\nChita\nchitak\nchital\nchitchat\nchitchatty\nChitimacha\nChitimachan\nchitin\nchitinization\nchitinized\nchitinocalcareous\nchitinogenous\nchitinoid\nchitinous\nchiton\nchitosamine\nchitosan\nchitose\nchitra\nChitrali\nchittamwood\nchitter\nchitterling\nchitty\nchivalresque\nchivalric\nchivalrous\nchivalrously\nchivalrousness\nchivalry\nchive\nchivey\nchiviatite\nChiwere\nchkalik\nchladnite\nchlamyd\nchlamydate\nchlamydeous\nChlamydobacteriaceae\nchlamydobacteriaceous\nChlamydobacteriales\nChlamydomonadaceae\nChlamydomonadidae\nChlamydomonas\nChlamydosaurus\nChlamydoselachidae\nChlamydoselachus\nchlamydospore\nChlamydozoa\nchlamydozoan\nchlamyphore\nChlamyphorus\nchlamys\nChleuh\nchloanthite\nchloasma\nChloe\nchlor\nchloracetate\nchloragogen\nchloral\nchloralformamide\nchloralide\nchloralism\nchloralization\nchloralize\nchloralose\nchloralum\nchloramide\nchloramine\nchloramphenicol\nchloranemia\nchloranemic\nchloranhydride\nchloranil\nChloranthaceae\nchloranthaceous\nChloranthus\nchloranthy\nchlorapatite\nchlorastrolite\nchlorate\nchlorazide\nchlorcosane\nchlordan\nchlordane\nchlore\nChlorella\nChlorellaceae\nchlorellaceous\nchloremia\nchlorenchyma\nchlorhydrate\nchlorhydric\nchloric\nchloridate\nchloridation\nchloride\nChloridella\nChloridellidae\nchlorider\nchloridize\nchlorimeter\nchlorimetric\nchlorimetry\nchlorinate\nchlorination\nchlorinator\nchlorine\nchlorinize\nchlorinous\nchloriodide\nChlorion\nChlorioninae\nchlorite\nchloritic\nchloritization\nchloritize\nchloritoid\nchlorize\nchlormethane\nchlormethylic\nchloroacetate\nchloroacetic\nchloroacetone\nchloroacetophenone\nchloroamide\nchloroamine\nchloroanaemia\nchloroanemia\nchloroaurate\nchloroauric\nchloroaurite\nchlorobenzene\nchlorobromide\nchlorocalcite\nchlorocarbonate\nchlorochromates\nchlorochromic\nchlorochrous\nChlorococcaceae\nChlorococcales\nChlorococcum\nChlorococcus\nchlorocresol\nchlorocruorin\nchlorodize\nchloroform\nchloroformate\nchloroformic\nchloroformism\nchloroformist\nchloroformization\nchloroformize\nchlorogenic\nchlorogenine\nchlorohydrin\nchlorohydrocarbon\nchloroiodide\nchloroleucite\nchloroma\nchloromelanite\nchlorometer\nchloromethane\nchlorometric\nchlorometry\nChloromycetin\nchloronitrate\nchloropal\nchloropalladates\nchloropalladic\nchlorophane\nchlorophenol\nchlorophoenicite\nChlorophora\nChlorophyceae\nchlorophyceous\nchlorophyl\nchlorophyll\nchlorophyllaceous\nchlorophyllan\nchlorophyllase\nchlorophyllian\nchlorophyllide\nchlorophylliferous\nchlorophylligenous\nchlorophylligerous\nchlorophyllin\nchlorophyllite\nchlorophylloid\nchlorophyllose\nchlorophyllous\nchloropia\nchloropicrin\nchloroplast\nchloroplastic\nchloroplastid\nchloroplatinate\nchloroplatinic\nchloroplatinite\nchloroplatinous\nchloroprene\nchloropsia\nchloroquine\nchlorosilicate\nchlorosis\nchlorospinel\nchlorosulphonic\nchlorotic\nchlorous\nchlorozincate\nchlorsalol\nchloryl\nChnuphis\ncho\nchoachyte\nchoana\nchoanate\nChoanephora\nchoanocytal\nchoanocyte\nChoanoflagellata\nchoanoflagellate\nChoanoflagellida\nChoanoflagellidae\nchoanoid\nchoanophorous\nchoanosomal\nchoanosome\nchoate\nchoaty\nchob\nchoca\nchocard\nChocho\nchocho\nchock\nchockablock\nchocker\nchockler\nchockman\nChoco\nChocoan\nchocolate\nChoctaw\nchoel\nchoenix\nChoeropsis\nChoes\nchoffer\nchoga\nchogak\nchogset\nChoiak\nchoice\nchoiceful\nchoiceless\nchoicelessness\nchoicely\nchoiceness\nchoicy\nchoil\nchoiler\nchoir\nchoirboy\nchoirlike\nchoirman\nchoirmaster\nchoirwise\nChoisya\nchokage\nchoke\nchokeberry\nchokebore\nchokecherry\nchokedamp\nchoker\nchokered\nchokerman\nchokestrap\nchokeweed\nchokidar\nchoking\nchokingly\nchokra\nchoky\nChol\nchol\nChola\nchola\ncholagogic\ncholagogue\ncholalic\ncholane\ncholangioitis\ncholangitis\ncholanic\ncholanthrene\ncholate\nchold\ncholeate\ncholecyanine\ncholecyst\ncholecystalgia\ncholecystectasia\ncholecystectomy\ncholecystenterorrhaphy\ncholecystenterostomy\ncholecystgastrostomy\ncholecystic\ncholecystitis\ncholecystnephrostomy\ncholecystocolostomy\ncholecystocolotomy\ncholecystoduodenostomy\ncholecystogastrostomy\ncholecystogram\ncholecystography\ncholecystoileostomy\ncholecystojejunostomy\ncholecystokinin\ncholecystolithiasis\ncholecystolithotripsy\ncholecystonephrostomy\ncholecystopexy\ncholecystorrhaphy\ncholecystostomy\ncholecystotomy\ncholedoch\ncholedochal\ncholedochectomy\ncholedochitis\ncholedochoduodenostomy\ncholedochoenterostomy\ncholedocholithiasis\ncholedocholithotomy\ncholedocholithotripsy\ncholedochoplasty\ncholedochorrhaphy\ncholedochostomy\ncholedochotomy\ncholehematin\ncholeic\ncholeine\ncholeinic\ncholelith\ncholelithiasis\ncholelithic\ncholelithotomy\ncholelithotripsy\ncholelithotrity\ncholemia\ncholeokinase\ncholepoietic\ncholer\ncholera\ncholeraic\ncholeric\ncholericly\ncholericness\ncholeriform\ncholerigenous\ncholerine\ncholeroid\ncholeromania\ncholerophobia\ncholerrhagia\ncholestane\ncholestanol\ncholesteatoma\ncholesteatomatous\ncholestene\ncholesterate\ncholesteremia\ncholesteric\ncholesterin\ncholesterinemia\ncholesterinic\ncholesterinuria\ncholesterol\ncholesterolemia\ncholesteroluria\ncholesterosis\ncholesteryl\ncholetelin\ncholetherapy\ncholeuria\ncholi\ncholiamb\ncholiambic\ncholiambist\ncholic\ncholine\ncholinergic\ncholinesterase\ncholinic\ncholla\ncholler\nCholo\ncholochrome\ncholocyanine\nCholoepus\nchologenetic\ncholoidic\ncholoidinic\nchololith\nchololithic\nCholonan\nCholones\ncholophein\ncholorrhea\ncholoscopy\ncholterheaded\ncholum\ncholuria\nCholuteca\nchomp\nchondral\nchondralgia\nchondrarsenite\nchondre\nchondrectomy\nchondrenchyma\nchondric\nchondrification\nchondrify\nchondrigen\nchondrigenous\nChondrilla\nchondrin\nchondrinous\nchondriocont\nchondriome\nchondriomere\nchondriomite\nchondriosomal\nchondriosome\nchondriosphere\nchondrite\nchondritic\nchondritis\nchondroadenoma\nchondroalbuminoid\nchondroangioma\nchondroarthritis\nchondroblast\nchondroblastoma\nchondrocarcinoma\nchondrocele\nchondroclasis\nchondroclast\nchondrocoracoid\nchondrocostal\nchondrocranial\nchondrocranium\nchondrocyte\nchondrodite\nchondroditic\nchondrodynia\nchondrodystrophia\nchondrodystrophy\nchondroendothelioma\nchondroepiphysis\nchondrofetal\nchondrofibroma\nchondrofibromatous\nChondroganoidei\nchondrogen\nchondrogenesis\nchondrogenetic\nchondrogenous\nchondrogeny\nchondroglossal\nchondroglossus\nchondrography\nchondroid\nchondroitic\nchondroitin\nchondrolipoma\nchondrology\nchondroma\nchondromalacia\nchondromatous\nchondromucoid\nChondromyces\nchondromyoma\nchondromyxoma\nchondromyxosarcoma\nchondropharyngeal\nchondropharyngeus\nchondrophore\nchondrophyte\nchondroplast\nchondroplastic\nchondroplasty\nchondroprotein\nchondropterygian\nChondropterygii\nchondropterygious\nchondrosamine\nchondrosarcoma\nchondrosarcomatous\nchondroseptum\nchondrosin\nchondrosis\nchondroskeleton\nchondrostean\nChondrostei\nchondrosteoma\nchondrosteous\nchondrosternal\nchondrotome\nchondrotomy\nchondroxiphoid\nchondrule\nchondrus\nchonolith\nchonta\nChontal\nChontalan\nChontaquiro\nchontawood\nchoop\nchoosable\nchoosableness\nchoose\nchooser\nchoosing\nchoosingly\nchoosy\nchop\nchopa\nchopboat\nchopfallen\nchophouse\nchopin\nchopine\nchoplogic\nchopped\nchopper\nchoppered\nchopping\nchoppy\nchopstick\nChopunnish\nChora\nchoragic\nchoragion\nchoragium\nchoragus\nchoragy\nChorai\nchoral\nchoralcelo\nchoraleon\nchoralist\nchorally\nChorasmian\nchord\nchorda\nChordaceae\nchordacentrous\nchordacentrum\nchordaceous\nchordal\nchordally\nchordamesoderm\nChordata\nchordate\nchorded\nChordeiles\nchorditis\nchordoid\nchordomesoderm\nchordotomy\nchordotonal\nchore\nchorea\nchoreal\nchoreatic\nchoree\nchoregic\nchoregus\nchoregy\nchoreic\nchoreiform\nchoreograph\nchoreographer\nchoreographic\nchoreographical\nchoreography\nchoreoid\nchoreomania\nchorepiscopal\nchorepiscopus\nchoreus\nchoreutic\nchorial\nchoriamb\nchoriambic\nchoriambize\nchoriambus\nchoric\nchorine\nchorioadenoma\nchorioallantoic\nchorioallantoid\nchorioallantois\nchoriocapillaris\nchoriocapillary\nchoriocarcinoma\nchoriocele\nchorioepithelioma\nchorioid\nchorioidal\nchorioiditis\nchorioidocyclitis\nchorioidoiritis\nchorioidoretinitis\nchorioma\nchorion\nchorionepithelioma\nchorionic\nChorioptes\nchorioptic\nchorioretinal\nchorioretinitis\nChoripetalae\nchoripetalous\nchoriphyllous\nchorisepalous\nchorisis\nchorism\nchorist\nchoristate\nchorister\nchoristership\nchoristic\nchoristoblastoma\nchoristoma\nchoristry\nchorization\nchorizont\nchorizontal\nchorizontes\nchorizontic\nchorizontist\nchorogi\nchorograph\nchorographer\nchorographic\nchorographical\nchorographically\nchorography\nchoroid\nchoroidal\nchoroidea\nchoroiditis\nchoroidocyclitis\nchoroidoiritis\nchoroidoretinitis\nchorological\nchorologist\nchorology\nchoromania\nchoromanic\nchorometry\nchorook\nChorotega\nChoroti\nchort\nchorten\nChorti\nchortle\nchortler\nchortosterol\nchorus\nchoruser\nchoruslike\nChorwat\nchoryos\nchose\nchosen\nchott\nChou\nChouan\nChouanize\nchouette\nchough\nchouka\nchoultry\nchoup\nchouquette\nchous\nchouse\nchouser\nchousingha\nchow\nChowanoc\nchowchow\nchowder\nchowderhead\nchowderheaded\nchowk\nchowry\nchoya\nchoyroot\nChozar\nchrematheism\nchrematist\nchrematistic\nchrematistics\nchreotechnics\nchresmology\nchrestomathic\nchrestomathics\nchrestomathy\nchria\nchrimsel\nChris\nchrism\nchrisma\nchrismal\nchrismary\nchrismatine\nchrismation\nchrismatite\nchrismatize\nchrismatory\nchrismon\nchrisom\nchrisomloosing\nchrisroot\nChrissie\nChrist\nChristabel\nChristadelphian\nChristadelphianism\nchristcross\nChristdom\nChristed\nchristen\nChristendie\nChristendom\nchristened\nchristener\nchristening\nChristenmas\nChristhood\nChristiad\nChristian\nChristiana\nChristiania\nChristianiadeal\nChristianism\nchristianite\nChristianity\nChristianization\nChristianize\nChristianizer\nChristianlike\nChristianly\nChristianness\nChristianogentilism\nChristianography\nChristianomastix\nChristianopaganism\nChristicide\nChristie\nChristiform\nChristina\nChristine\nChristless\nChristlessness\nChristlike\nChristlikeness\nChristliness\nChristly\nChristmas\nChristmasberry\nChristmasing\nChristmastide\nChristmasy\nChristocentric\nChristofer\nChristogram\nChristolatry\nChristological\nChristologist\nChristology\nChristophany\nChristophe\nChristopher\nChristos\nchroatol\nChrobat\nchroma\nchromaffin\nchromaffinic\nchromammine\nchromaphil\nchromaphore\nchromascope\nchromate\nchromatic\nchromatical\nchromatically\nchromatician\nchromaticism\nchromaticity\nchromatics\nchromatid\nchromatin\nchromatinic\nChromatioideae\nchromatism\nchromatist\nChromatium\nchromatize\nchromatocyte\nchromatodysopia\nchromatogenous\nchromatogram\nchromatograph\nchromatographic\nchromatography\nchromatoid\nchromatology\nchromatolysis\nchromatolytic\nchromatometer\nchromatone\nchromatopathia\nchromatopathic\nchromatopathy\nchromatophil\nchromatophile\nchromatophilia\nchromatophilic\nchromatophilous\nchromatophobia\nchromatophore\nchromatophoric\nchromatophorous\nchromatoplasm\nchromatopsia\nchromatoptometer\nchromatoptometry\nchromatoscope\nchromatoscopy\nchromatosis\nchromatosphere\nchromatospheric\nchromatrope\nchromaturia\nchromatype\nchromazurine\nchromdiagnosis\nchrome\nchromene\nchromesthesia\nchromic\nchromicize\nchromid\nChromidae\nChromides\nchromidial\nChromididae\nchromidiogamy\nchromidiosome\nchromidium\nchromidrosis\nchromiferous\nchromiole\nchromism\nchromite\nchromitite\nchromium\nchromo\nChromobacterieae\nChromobacterium\nchromoblast\nchromocenter\nchromocentral\nchromochalcographic\nchromochalcography\nchromocollograph\nchromocollographic\nchromocollography\nchromocollotype\nchromocollotypy\nchromocratic\nchromocyte\nchromocytometer\nchromodermatosis\nchromodiascope\nchromogen\nchromogene\nchromogenesis\nchromogenetic\nchromogenic\nchromogenous\nchromogram\nchromograph\nchromoisomer\nchromoisomeric\nchromoisomerism\nchromoleucite\nchromolipoid\nchromolith\nchromolithic\nchromolithograph\nchromolithographer\nchromolithographic\nchromolithography\nchromolysis\nchromomere\nchromometer\nchromone\nchromonema\nchromoparous\nchromophage\nchromophane\nchromophile\nchromophilic\nchromophilous\nchromophobic\nchromophore\nchromophoric\nchromophorous\nchromophotograph\nchromophotographic\nchromophotography\nchromophotolithograph\nchromophyll\nchromoplasm\nchromoplasmic\nchromoplast\nchromoplastid\nchromoprotein\nchromopsia\nchromoptometer\nchromoptometrical\nchromosantonin\nchromoscope\nchromoscopic\nchromoscopy\nchromosomal\nchromosome\nchromosphere\nchromospheric\nchromotherapist\nchromotherapy\nchromotrope\nchromotropic\nchromotropism\nchromotropy\nchromotype\nchromotypic\nchromotypographic\nchromotypography\nchromotypy\nchromous\nchromoxylograph\nchromoxylography\nchromule\nchromy\nchromyl\nchronal\nchronanagram\nchronaxia\nchronaxie\nchronaxy\nchronic\nchronical\nchronically\nchronicity\nchronicle\nchronicler\nchronicon\nchronisotherm\nchronist\nchronobarometer\nchronocinematography\nchronocrator\nchronocyclegraph\nchronodeik\nchronogeneous\nchronogenesis\nchronogenetic\nchronogram\nchronogrammatic\nchronogrammatical\nchronogrammatically\nchronogrammatist\nchronogrammic\nchronograph\nchronographer\nchronographic\nchronographical\nchronographically\nchronography\nchronoisothermal\nchronologer\nchronologic\nchronological\nchronologically\nchronologist\nchronologize\nchronology\nchronomancy\nchronomantic\nchronometer\nchronometric\nchronometrical\nchronometrically\nchronometry\nchrononomy\nchronopher\nchronophotograph\nchronophotographic\nchronophotography\nChronos\nchronoscope\nchronoscopic\nchronoscopically\nchronoscopy\nchronosemic\nchronostichon\nchronothermal\nchronothermometer\nchronotropic\nchronotropism\nChroococcaceae\nchroococcaceous\nChroococcales\nchroococcoid\nChroococcus\nChrosperma\nchrotta\nchrysal\nchrysalid\nchrysalidal\nchrysalides\nchrysalidian\nchrysaline\nchrysalis\nchrysaloid\nchrysamine\nchrysammic\nchrysamminic\nChrysamphora\nchrysaniline\nchrysanisic\nchrysanthemin\nchrysanthemum\nchrysanthous\nChrysaor\nchrysarobin\nchrysatropic\nchrysazin\nchrysazol\nchryselectrum\nchryselephantine\nChrysemys\nchrysene\nchrysenic\nchrysid\nChrysidella\nchrysidid\nChrysididae\nchrysin\nChrysippus\nChrysis\nchrysoaristocracy\nChrysobalanaceae\nChrysobalanus\nchrysoberyl\nchrysobull\nchrysocarpous\nchrysochlore\nChrysochloridae\nChrysochloris\nchrysochlorous\nchrysochrous\nchrysocolla\nchrysocracy\nchrysoeriol\nchrysogen\nchrysograph\nchrysographer\nchrysography\nchrysohermidin\nchrysoidine\nchrysolite\nchrysolitic\nchrysology\nChrysolophus\nchrysomelid\nChrysomelidae\nchrysomonad\nChrysomonadales\nChrysomonadina\nchrysomonadine\nChrysomyia\nChrysopa\nchrysopal\nchrysopee\nchrysophan\nchrysophanic\nChrysophanus\nchrysophenine\nchrysophilist\nchrysophilite\nChrysophlyctis\nchrysophyll\nChrysophyllum\nchrysopid\nChrysopidae\nchrysopoeia\nchrysopoetic\nchrysopoetics\nchrysoprase\nChrysops\nChrysopsis\nchrysorin\nchrysosperm\nChrysosplenium\nChrysothamnus\nChrysothrix\nchrysotile\nChrysotis\nchrystocrene\nchthonian\nchthonic\nchthonophagia\nchthonophagy\nchub\nchubbed\nchubbedness\nchubbily\nchubbiness\nchubby\nChuchona\nChuck\nchuck\nchucker\nchuckhole\nchuckies\nchucking\nchuckingly\nchuckle\nchucklehead\nchuckleheaded\nchuckler\nchucklingly\nchuckrum\nchuckstone\nchuckwalla\nchucky\nChud\nchuddar\nChude\nChudic\nChueta\nchufa\nchuff\nchuffy\nchug\nchugger\nchuhra\nChuje\nchukar\nChukchi\nchukker\nchukor\nchulan\nchullpa\nchum\nChumashan\nChumawi\nchummage\nchummer\nchummery\nchummily\nchummy\nchump\nchumpaka\nchumpish\nchumpishness\nChumpivilca\nchumpy\nchumship\nChumulu\nChun\nchun\nchunari\nChuncho\nchunga\nchunk\nchunkhead\nchunkily\nchunkiness\nchunky\nchunner\nchunnia\nchunter\nchupak\nchupon\nchuprassie\nchuprassy\nchurch\nchurchanity\nchurchcraft\nchurchdom\nchurchful\nchurchgoer\nchurchgoing\nchurchgrith\nchurchianity\nchurchified\nchurchiness\nchurching\nchurchish\nchurchism\nchurchite\nchurchless\nchurchlet\nchurchlike\nchurchliness\nchurchly\nchurchman\nchurchmanly\nchurchmanship\nchurchmaster\nchurchscot\nchurchward\nchurchwarden\nchurchwardenism\nchurchwardenize\nchurchwardenship\nchurchwards\nchurchway\nchurchwise\nchurchwoman\nchurchy\nchurchyard\nchurel\nchuringa\nchurl\nchurled\nchurlhood\nchurlish\nchurlishly\nchurlishness\nchurly\nchurm\nchurn\nchurnability\nchurnful\nchurning\nchurnmilk\nchurnstaff\nChuroya\nChuroyan\nchurr\nChurrigueresque\nchurruck\nchurrus\nchurrworm\nchut\nchute\nchuter\nchutney\nChuvash\nChwana\nchyack\nchyak\nchylaceous\nchylangioma\nchylaqueous\nchyle\nchylemia\nchylidrosis\nchylifaction\nchylifactive\nchylifactory\nchyliferous\nchylific\nchylification\nchylificatory\nchyliform\nchylify\nchylocaulous\nchylocauly\nchylocele\nchylocyst\nchyloid\nchylomicron\nchylopericardium\nchylophyllous\nchylophylly\nchylopoiesis\nchylopoietic\nchylosis\nchylothorax\nchylous\nchyluria\nchymaqueous\nchymase\nchyme\nchymia\nchymic\nchymiferous\nchymification\nchymify\nchymosin\nchymosinogen\nchymotrypsin\nchymotrypsinogen\nchymous\nchypre\nchytra\nchytrid\nChytridiaceae\nchytridiaceous\nchytridial\nChytridiales\nchytridiose\nchytridiosis\nChytridium\nChytroi\ncibarial\ncibarian\ncibarious\ncibation\ncibol\nCibola\nCibolan\nCiboney\ncibophobia\nciborium\ncibory\nciboule\ncicad\ncicada\nCicadellidae\ncicadid\nCicadidae\ncicala\ncicatrice\ncicatrices\ncicatricial\ncicatricle\ncicatricose\ncicatricula\ncicatricule\ncicatrisive\ncicatrix\ncicatrizant\ncicatrizate\ncicatrization\ncicatrize\ncicatrizer\ncicatrose\nCicely\ncicely\ncicer\nciceronage\ncicerone\nciceroni\nCiceronian\nCiceronianism\nCiceronianize\nCiceronic\nCiceronically\nciceronism\nciceronize\ncichlid\nCichlidae\ncichloid\ncichoraceous\nCichoriaceae\ncichoriaceous\nCichorium\nCicindela\ncicindelid\ncicindelidae\ncicisbeism\nciclatoun\nCiconia\nCiconiae\nciconian\nciconiid\nCiconiidae\nciconiiform\nCiconiiformes\nciconine\nciconioid\nCicuta\ncicutoxin\nCid\ncidarid\nCidaridae\ncidaris\nCidaroida\ncider\nciderish\nciderist\nciderkin\ncig\ncigala\ncigar\ncigaresque\ncigarette\ncigarfish\ncigarillo\ncigarito\ncigarless\ncigua\nciguatera\ncilectomy\ncilia\nciliary\nCiliata\nciliate\nciliated\nciliately\nciliation\ncilice\nCilician\ncilicious\nCilicism\nciliella\nciliferous\nciliform\nciliiferous\nciliiform\nCilioflagellata\ncilioflagellate\nciliograde\nciliolate\nciliolum\nCiliophora\ncilioretinal\ncilioscleral\nciliospinal\nciliotomy\ncilium\ncillosis\ncimbia\nCimbri\nCimbrian\nCimbric\ncimelia\ncimex\ncimicid\nCimicidae\ncimicide\ncimiciform\nCimicifuga\ncimicifugin\ncimicoid\nciminite\ncimline\nCimmeria\nCimmerian\nCimmerianism\ncimolite\ncinch\ncincher\ncincholoipon\ncincholoiponic\ncinchomeronic\nCinchona\nCinchonaceae\ncinchonaceous\ncinchonamine\ncinchonate\ncinchonia\ncinchonic\ncinchonicine\ncinchonidia\ncinchonidine\ncinchonine\ncinchoninic\ncinchonism\ncinchonization\ncinchonize\ncinchonology\ncinchophen\ncinchotine\ncinchotoxine\ncincinnal\nCincinnati\nCincinnatia\nCincinnatian\ncincinnus\nCinclidae\nCinclidotus\ncinclis\nCinclus\ncinct\ncincture\ncinder\nCinderella\ncinderlike\ncinderman\ncinderous\ncindery\nCindie\nCindy\ncine\ncinecamera\ncinefilm\ncinel\ncinema\nCinemascope\ncinematic\ncinematical\ncinematically\ncinematize\ncinematograph\ncinematographer\ncinematographic\ncinematographical\ncinematographically\ncinematographist\ncinematography\ncinemelodrama\ncinemize\ncinemograph\ncinenchyma\ncinenchymatous\ncinene\ncinenegative\ncineole\ncineolic\ncinephone\ncinephotomicrography\ncineplastics\ncineplasty\ncineraceous\nCinerama\nCineraria\ncinerarium\ncinerary\ncineration\ncinerator\ncinerea\ncinereal\ncinereous\ncineritious\ncinevariety\ncingle\ncingular\ncingulate\ncingulated\ncingulum\ncinnabar\ncinnabaric\ncinnabarine\ncinnamal\ncinnamaldehyde\ncinnamate\ncinnamein\ncinnamene\ncinnamenyl\ncinnamic\nCinnamodendron\ncinnamol\ncinnamomic\nCinnamomum\ncinnamon\ncinnamoned\ncinnamonic\ncinnamonlike\ncinnamonroot\ncinnamonwood\ncinnamyl\ncinnamylidene\ncinnoline\ncinnyl\ncinquain\ncinque\ncinquecentism\ncinquecentist\ncinquecento\ncinquefoil\ncinquefoiled\ncinquepace\ncinter\nCinura\ncinuran\ncinurous\ncion\ncionectomy\ncionitis\ncionocranial\ncionocranian\ncionoptosis\ncionorrhaphia\ncionotome\ncionotomy\nCipango\ncipher\ncipherable\ncipherdom\ncipherer\ncipherhood\ncipo\ncipolin\ncippus\ncirca\nCircaea\nCircaeaceae\nCircaetus\nCircassian\nCircassic\nCirce\nCircean\nCircensian\ncircinal\ncircinate\ncircinately\ncircination\nCircinus\ncirciter\ncircle\ncircled\ncircler\ncirclet\ncirclewise\ncircling\ncircovarian\ncircuit\ncircuitable\ncircuital\ncircuiteer\ncircuiter\ncircuition\ncircuitman\ncircuitor\ncircuitous\ncircuitously\ncircuitousness\ncircuity\ncirculable\ncirculant\ncircular\ncircularism\ncircularity\ncircularization\ncircularize\ncircularizer\ncircularly\ncircularness\ncircularwise\ncirculate\ncirculation\ncirculative\ncirculator\ncirculatory\ncircumagitate\ncircumagitation\ncircumambages\ncircumambagious\ncircumambience\ncircumambiency\ncircumambient\ncircumambulate\ncircumambulation\ncircumambulator\ncircumambulatory\ncircumanal\ncircumantarctic\ncircumarctic\ncircumarticular\ncircumaviate\ncircumaviation\ncircumaviator\ncircumaxial\ncircumaxile\ncircumaxillary\ncircumbasal\ncircumbendibus\ncircumboreal\ncircumbuccal\ncircumbulbar\ncircumcallosal\nCircumcellion\ncircumcenter\ncircumcentral\ncircumcinct\ncircumcincture\ncircumcircle\ncircumcise\ncircumciser\ncircumcision\ncircumclude\ncircumclusion\ncircumcolumnar\ncircumcone\ncircumconic\ncircumcorneal\ncircumcrescence\ncircumcrescent\ncircumdenudation\ncircumdiction\ncircumduce\ncircumduct\ncircumduction\ncircumesophagal\ncircumesophageal\ncircumference\ncircumferential\ncircumferentially\ncircumferentor\ncircumflant\ncircumflect\ncircumflex\ncircumflexion\ncircumfluence\ncircumfluent\ncircumfluous\ncircumforaneous\ncircumfulgent\ncircumfuse\ncircumfusile\ncircumfusion\ncircumgenital\ncircumgyrate\ncircumgyration\ncircumgyratory\ncircumhorizontal\ncircumincession\ncircuminsession\ncircuminsular\ncircumintestinal\ncircumitineration\ncircumjacence\ncircumjacency\ncircumjacent\ncircumlental\ncircumlitio\ncircumlittoral\ncircumlocute\ncircumlocution\ncircumlocutional\ncircumlocutionary\ncircumlocutionist\ncircumlocutory\ncircummeridian\ncircummeridional\ncircummigration\ncircummundane\ncircummure\ncircumnatant\ncircumnavigable\ncircumnavigate\ncircumnavigation\ncircumnavigator\ncircumnavigatory\ncircumneutral\ncircumnuclear\ncircumnutate\ncircumnutation\ncircumnutatory\ncircumocular\ncircumoesophagal\ncircumoral\ncircumorbital\ncircumpacific\ncircumpallial\ncircumparallelogram\ncircumpentagon\ncircumplicate\ncircumplication\ncircumpolar\ncircumpolygon\ncircumpose\ncircumposition\ncircumradius\ncircumrenal\ncircumrotate\ncircumrotation\ncircumrotatory\ncircumsail\ncircumscissile\ncircumscribable\ncircumscribe\ncircumscribed\ncircumscriber\ncircumscript\ncircumscription\ncircumscriptive\ncircumscriptively\ncircumscriptly\ncircumsinous\ncircumspangle\ncircumspatial\ncircumspect\ncircumspection\ncircumspective\ncircumspectively\ncircumspectly\ncircumspectness\ncircumspheral\ncircumstance\ncircumstanced\ncircumstantiability\ncircumstantiable\ncircumstantial\ncircumstantiality\ncircumstantially\ncircumstantialness\ncircumstantiate\ncircumstantiation\ncircumtabular\ncircumterraneous\ncircumterrestrial\ncircumtonsillar\ncircumtropical\ncircumumbilical\ncircumundulate\ncircumundulation\ncircumvallate\ncircumvallation\ncircumvascular\ncircumvent\ncircumventer\ncircumvention\ncircumventive\ncircumventor\ncircumviate\ncircumvolant\ncircumvolute\ncircumvolution\ncircumvolutory\ncircumvolve\ncircumzenithal\ncircus\ncircusy\ncirque\ncirrate\ncirrated\nCirratulidae\nCirratulus\nCirrhopetalum\ncirrhosed\ncirrhosis\ncirrhotic\ncirrhous\ncirri\ncirribranch\ncirriferous\ncirriform\ncirrigerous\ncirrigrade\ncirriped\nCirripedia\ncirripedial\ncirrolite\ncirropodous\ncirrose\nCirrostomi\ncirrous\ncirrus\ncirsectomy\nCirsium\ncirsocele\ncirsoid\ncirsomphalos\ncirsophthalmia\ncirsotome\ncirsotomy\nciruela\ncirurgian\nCisalpine\ncisalpine\nCisalpinism\ncisandine\ncisatlantic\ncisco\ncise\ncisele\ncisgangetic\ncisjurane\ncisleithan\ncismarine\nCismontane\ncismontane\nCismontanism\ncisoceanic\ncispadane\ncisplatine\ncispontine\ncisrhenane\nCissampelos\ncissing\ncissoid\ncissoidal\nCissus\ncist\ncista\nCistaceae\ncistaceous\ncistae\ncisted\nCistercian\nCistercianism\ncistern\ncisterna\ncisternal\ncistic\ncistophoric\ncistophorus\nCistudo\nCistus\ncistvaen\ncit\ncitable\ncitadel\ncitation\ncitator\ncitatory\ncite\ncitee\nCitellus\nciter\ncitess\ncithara\nCitharexylum\ncitharist\ncitharista\ncitharoedi\ncitharoedic\ncitharoedus\ncither\ncitied\ncitification\ncitified\ncitify\nCitigradae\ncitigrade\ncitizen\ncitizendom\ncitizeness\ncitizenhood\ncitizenish\ncitizenism\ncitizenize\ncitizenly\ncitizenry\ncitizenship\ncitole\ncitraconate\ncitraconic\ncitral\ncitramide\ncitramontane\ncitrange\ncitrangeade\ncitrate\ncitrated\ncitrean\ncitrene\ncitreous\ncitric\ncitriculture\ncitriculturist\ncitril\ncitrin\ncitrination\ncitrine\ncitrinin\ncitrinous\ncitrometer\nCitromyces\ncitron\ncitronade\ncitronella\ncitronellal\ncitronelle\ncitronellic\ncitronellol\ncitronin\ncitronwood\nCitropsis\ncitropten\ncitrous\ncitrullin\nCitrullus\nCitrus\ncitrus\ncitrylidene\ncittern\ncitua\ncity\ncitycism\ncitydom\ncityfolk\ncityful\ncityish\ncityless\ncityness\ncityscape\ncityward\ncitywards\ncive\ncivet\ncivetlike\ncivetone\ncivic\ncivically\ncivicism\ncivics\ncivil\ncivilian\ncivility\ncivilizable\ncivilization\ncivilizational\ncivilizatory\ncivilize\ncivilized\ncivilizedness\ncivilizee\ncivilizer\ncivilly\ncivilness\ncivism\nCivitan\ncivvy\ncixiid\nCixiidae\nCixo\nclabber\nclabbery\nclachan\nclack\nClackama\nclackdish\nclacker\nclacket\nclackety\nclad\ncladanthous\ncladautoicous\ncladding\ncladine\ncladocarpous\nCladocera\ncladoceran\ncladocerous\ncladode\ncladodial\ncladodont\ncladodontid\nCladodontidae\nCladodus\ncladogenous\nCladonia\nCladoniaceae\ncladoniaceous\ncladonioid\nCladophora\nCladophoraceae\ncladophoraceous\nCladophorales\ncladophyll\ncladophyllum\ncladoptosis\ncladose\nCladoselache\nCladoselachea\ncladoselachian\nCladoselachidae\ncladosiphonic\nCladosporium\nCladothrix\nCladrastis\ncladus\nclag\nclaggum\nclaggy\nClaiborne\nClaibornian\nclaim\nclaimable\nclaimant\nclaimer\nclaimless\nclairaudience\nclairaudient\nclairaudiently\nclairce\nClaire\nclairecole\nclairecolle\nclairschach\nclairschacher\nclairsentience\nclairsentient\nclairvoyance\nclairvoyancy\nclairvoyant\nclairvoyantly\nclaith\nclaithes\nclaiver\nClallam\nclam\nclamant\nclamantly\nclamative\nClamatores\nclamatorial\nclamatory\nclamb\nclambake\nclamber\nclamberer\nclamcracker\nclame\nclamer\nclammed\nclammer\nclammily\nclamminess\nclamming\nclammish\nclammy\nclammyweed\nclamor\nclamorer\nclamorist\nclamorous\nclamorously\nclamorousness\nclamorsome\nclamp\nclamper\nclamshell\nclamworm\nclan\nclancular\nclancularly\nclandestine\nclandestinely\nclandestineness\nclandestinity\nclanfellow\nclang\nclangful\nclangingly\nclangor\nclangorous\nclangorously\nClangula\nclanjamfray\nclanjamfrey\nclanjamfrie\nclanjamphrey\nclank\nclankety\nclanking\nclankingly\nclankingness\nclankless\nclanless\nclanned\nclanning\nclannishly\nclannishness\nclansfolk\nclanship\nclansman\nclansmanship\nclanswoman\nClaosaurus\nclap\nclapboard\nclapbread\nclapmatch\nclapnet\nclapped\nclapper\nclapperclaw\nclapperclawer\nclapperdudgeon\nclappermaclaw\nclapping\nclapt\nclaptrap\nclapwort\nclaque\nclaquer\nClara\nclarabella\nclarain\nClare\nClarence\nClarenceux\nClarenceuxship\nClarencieux\nclarendon\nclaret\nClaretian\nClaribel\nclaribella\nClarice\nclarifiant\nclarification\nclarifier\nclarify\nclarigation\nclarin\nClarinda\nclarinet\nclarinetist\nclarinettist\nclarion\nclarionet\nClarissa\nClarisse\nClarist\nclarity\nClark\nclark\nclarkeite\nClarkia\nclaro\nClaromontane\nclarshech\nclart\nclarty\nclary\nclash\nclasher\nclashingly\nclashy\nclasmatocyte\nclasmatosis\nclasp\nclasper\nclasping\nclaspt\nclass\nclassable\nclassbook\nclassed\nclasser\nclasses\nclassfellow\nclassic\nclassical\nclassicalism\nclassicalist\nclassicality\nclassicalize\nclassically\nclassicalness\nclassicism\nclassicist\nclassicistic\nclassicize\nclassicolatry\nclassifiable\nclassific\nclassifically\nclassification\nclassificational\nclassificator\nclassificatory\nclassified\nclassifier\nclassis\nclassism\nclassman\nclassmanship\nclassmate\nclassroom\nclasswise\nclasswork\nclassy\nclastic\nclat\nclatch\nClathraceae\nclathraceous\nClathraria\nclathrarian\nclathrate\nClathrina\nClathrinidae\nclathroid\nclathrose\nclathrulate\nClathrus\nClatsop\nclatter\nclatterer\nclatteringly\nclattertrap\nclattery\nclatty\nClaude\nclaudent\nclaudetite\nClaudia\nClaudian\nclaudicant\nclaudicate\nclaudication\nClaudio\nClaudius\nclaught\nclausal\nclause\nClausilia\nClausiliidae\nclausthalite\nclaustra\nclaustral\nclaustration\nclaustrophobia\nclaustrum\nclausula\nclausular\nclausule\nclausure\nclaut\nclava\nclavacin\nclaval\nClavaria\nClavariaceae\nclavariaceous\nclavate\nclavated\nclavately\nclavation\nclave\nclavecin\nclavecinist\nclavel\nclavelization\nclavelize\nclavellate\nclavellated\nclaver\nclavial\nclaviature\nclavicembalo\nClaviceps\nclavichord\nclavichordist\nclavicithern\nclavicle\nclavicorn\nclavicornate\nClavicornes\nClavicornia\nclavicotomy\nclavicular\nclavicularium\nclaviculate\nclaviculus\nclavicylinder\nclavicymbal\nclavicytherium\nclavier\nclavierist\nclaviform\nclaviger\nclavigerous\nclaviharp\nclavilux\nclaviol\nclavipectoral\nclavis\nclavodeltoid\nclavodeltoideus\nclavola\nclavolae\nclavolet\nclavus\nclavy\nclaw\nclawed\nclawer\nclawk\nclawker\nclawless\nClay\nclay\nclaybank\nclaybrained\nclayen\nclayer\nclayey\nclayiness\nclayish\nclaylike\nclayman\nclaymore\nClayoquot\nclaypan\nClayton\nClaytonia\nclayware\nclayweed\ncleach\nclead\ncleaded\ncleading\ncleam\ncleamer\nclean\ncleanable\ncleaner\ncleanhanded\ncleanhandedness\ncleanhearted\ncleaning\ncleanish\ncleanlily\ncleanliness\ncleanly\ncleanness\ncleanout\ncleansable\ncleanse\ncleanser\ncleansing\ncleanskins\ncleanup\nclear\nclearable\nclearage\nclearance\nclearcole\nclearedness\nclearer\nclearheaded\nclearheadedly\nclearheadedness\nclearhearted\nclearing\nclearinghouse\nclearish\nclearly\nclearness\nclearskins\nclearstarch\nclearweed\nclearwing\ncleat\ncleavability\ncleavable\ncleavage\ncleave\ncleaveful\ncleavelandite\ncleaver\ncleavers\ncleaverwort\ncleaving\ncleavingly\ncleche\ncleck\ncled\ncledge\ncledgy\ncledonism\nclee\ncleek\ncleeked\ncleeky\nclef\ncleft\nclefted\ncleg\ncleidagra\ncleidarthritis\ncleidocostal\ncleidocranial\ncleidohyoid\ncleidomancy\ncleidomastoid\ncleidorrhexis\ncleidoscapular\ncleidosternal\ncleidotomy\ncleidotripsy\ncleistocarp\ncleistocarpous\ncleistogamic\ncleistogamically\ncleistogamous\ncleistogamously\ncleistogamy\ncleistogene\ncleistogenous\ncleistogeny\ncleistothecium\nCleistothecopsis\ncleithral\ncleithrum\nClem\nclem\nClematis\nclematite\nClemclemalats\nclemence\nclemency\nClement\nclement\nClementina\nClementine\nclemently\nclench\ncleoid\nCleome\nCleopatra\nclep\nClepsine\nclepsydra\ncleptobiosis\ncleptobiotic\nclerestoried\nclerestory\nclergy\nclergyable\nclergylike\nclergyman\nclergywoman\ncleric\nclerical\nclericalism\nclericalist\nclericality\nclericalize\nclerically\nclericate\nclericature\nclericism\nclericity\nclerid\nCleridae\nclerihew\nclerisy\nclerk\nclerkage\nclerkdom\nclerkery\nclerkess\nclerkhood\nclerking\nclerkish\nclerkless\nclerklike\nclerkliness\nclerkly\nclerkship\nClerodendron\ncleromancy\ncleronomy\ncleruch\ncleruchial\ncleruchic\ncleruchy\nClerus\ncletch\nClethra\nClethraceae\nclethraceous\ncleuch\ncleve\ncleveite\nclever\ncleverality\ncleverish\ncleverishly\ncleverly\ncleverness\nclevis\nclew\ncliack\nclianthus\ncliche\nclick\nclicker\nclicket\nclickless\nclicky\nClidastes\ncliency\nclient\nclientage\ncliental\ncliented\nclientelage\nclientele\nclientless\nclientry\nclientship\nCliff\ncliff\ncliffed\ncliffless\nclifflet\nclifflike\nClifford\ncliffside\ncliffsman\ncliffweed\ncliffy\nclift\nCliftonia\ncliftonite\nclifty\nclima\nClimaciaceae\nclimaciaceous\nClimacium\nclimacteric\nclimacterical\nclimacterically\nclimactic\nclimactical\nclimactically\nclimacus\nclimata\nclimatal\nclimate\nclimath\nclimatic\nclimatical\nclimatically\nClimatius\nclimatize\nclimatographical\nclimatography\nclimatologic\nclimatological\nclimatologically\nclimatologist\nclimatology\nclimatometer\nclimatotherapeutics\nclimatotherapy\nclimature\nclimax\nclimb\nclimbable\nclimber\nclimbing\nclime\nclimograph\nclinal\nclinamen\nclinamina\nclinandria\nclinandrium\nclinanthia\nclinanthium\nclinch\nclincher\nclinchingly\nclinchingness\ncline\ncling\nclinger\nclingfish\nclinging\nclingingly\nclingingness\nclingstone\nclingy\nclinia\nclinic\nclinical\nclinically\nclinician\nclinicist\nclinicopathological\nclinium\nclink\nclinker\nclinkerer\nclinkery\nclinking\nclinkstone\nclinkum\nclinoaxis\nclinocephalic\nclinocephalism\nclinocephalous\nclinocephalus\nclinocephaly\nclinochlore\nclinoclase\nclinoclasite\nclinodiagonal\nclinodomatic\nclinodome\nclinograph\nclinographic\nclinohedral\nclinohedrite\nclinohumite\nclinoid\nclinologic\nclinology\nclinometer\nclinometric\nclinometrical\nclinometry\nclinopinacoid\nclinopinacoidal\nClinopodium\nclinoprism\nclinopyramid\nclinopyroxene\nclinorhombic\nclinospore\nclinostat\nclinquant\nclint\nclinting\nClinton\nClintonia\nclintonite\nclinty\nClio\nCliona\nClione\nclip\nclipei\nclipeus\nclippable\nclipped\nclipper\nclipperman\nclipping\nclips\nclipse\nclipsheet\nclipsome\nclipt\nclique\ncliquedom\ncliqueless\ncliquish\ncliquishly\ncliquishness\ncliquism\ncliquy\ncliseometer\nclisere\nclishmaclaver\nClisiocampa\nClistogastra\nclit\nclitch\nclite\nclitella\nclitellar\nclitelliferous\nclitelline\nclitellum\nclitellus\nclites\nclithe\nclithral\nclithridiate\nclitia\nclition\nClitocybe\nClitoria\nclitoridauxe\nclitoridean\nclitoridectomy\nclitoriditis\nclitoridotomy\nclitoris\nclitorism\nclitoritis\nclitter\nclitterclatter\nclival\nclive\nclivers\nClivia\nclivis\nclivus\ncloaca\ncloacal\ncloacaline\ncloacean\ncloacinal\ncloacinean\ncloacitis\ncloak\ncloakage\ncloaked\ncloakedly\ncloaking\ncloakless\ncloaklet\ncloakmaker\ncloakmaking\ncloakroom\ncloakwise\ncloam\ncloamen\ncloamer\nclobber\nclobberer\nclochan\ncloche\nclocher\nclochette\nclock\nclockbird\nclockcase\nclocked\nclocker\nclockface\nclockhouse\nclockkeeper\nclockless\nclocklike\nclockmaker\nclockmaking\nclockmutch\nclockroom\nclocksmith\nclockwise\nclockwork\nclod\nclodbreaker\nclodder\ncloddily\ncloddiness\ncloddish\ncloddishly\ncloddishness\ncloddy\nclodhead\nclodhopper\nclodhopping\nclodlet\nclodpate\nclodpated\nclodpoll\ncloff\nclog\nclogdogdo\nclogger\ncloggily\nclogginess\ncloggy\ncloghad\ncloglike\nclogmaker\nclogmaking\nclogwood\nclogwyn\ncloiochoanitic\ncloisonless\ncloisonne\ncloister\ncloisteral\ncloistered\ncloisterer\ncloisterless\ncloisterlike\ncloisterliness\ncloisterly\ncloisterwise\ncloistral\ncloistress\ncloit\nclomb\nclomben\nclonal\nclone\nclonic\nclonicity\nclonicotonic\nclonism\nclonorchiasis\nClonorchis\nClonothrix\nclonus\ncloof\ncloop\ncloot\nclootie\nclop\ncloragen\nclorargyrite\ncloriodid\nclosable\nclose\nclosecross\nclosed\nclosefisted\nclosefistedly\nclosefistedness\nclosehanded\nclosehearted\nclosely\nclosemouth\nclosemouthed\nclosen\ncloseness\ncloser\nclosestool\ncloset\nclosewing\nclosh\nclosish\ncloster\nClosterium\nclostridial\nClostridium\nclosure\nclot\nclotbur\nclote\ncloth\nclothbound\nclothe\nclothes\nclothesbag\nclothesbasket\nclothesbrush\nclotheshorse\nclothesline\nclothesman\nclothesmonger\nclothespin\nclothespress\nclothesyard\nclothier\nclothify\nClothilda\nclothing\nclothmaker\nclothmaking\nClotho\nclothworker\nclothy\nclottage\nclottedness\nclotter\nclotty\ncloture\nclotweed\ncloud\ncloudage\ncloudberry\ncloudburst\ncloudcap\nclouded\ncloudful\ncloudily\ncloudiness\nclouding\ncloudland\ncloudless\ncloudlessly\ncloudlessness\ncloudlet\ncloudlike\ncloudling\ncloudology\ncloudscape\ncloudship\ncloudward\ncloudwards\ncloudy\nclough\nclour\nclout\nclouted\nclouter\nclouterly\nclouty\nclove\ncloven\nclovene\nclover\nclovered\ncloverlay\ncloverleaf\ncloveroot\ncloverroot\nclovery\nclow\nclown\nclownade\nclownage\nclownery\nclownheal\nclownish\nclownishly\nclownishness\nclownship\nclowring\ncloy\ncloyedness\ncloyer\ncloying\ncloyingly\ncloyingness\ncloyless\ncloysome\nclub\nclubbability\nclubbable\nclubbed\nclubber\nclubbily\nclubbing\nclubbish\nclubbism\nclubbist\nclubby\nclubdom\nclubfellow\nclubfisted\nclubfoot\nclubfooted\nclubhand\nclubhaul\nclubhouse\nclubionid\nClubionidae\nclubland\nclubman\nclubmate\nclubmobile\nclubmonger\nclubridden\nclubroom\nclubroot\nclubstart\nclubster\nclubweed\nclubwoman\nclubwood\ncluck\nclue\ncluff\nclump\nclumpish\nclumproot\nclumpy\nclumse\nclumsily\nclumsiness\nclumsy\nclunch\nclung\nCluniac\nCluniacensian\nClunisian\nClunist\nclunk\nclupanodonic\nClupea\nclupeid\nClupeidae\nclupeiform\nclupeine\nClupeodei\nclupeoid\ncluricaune\nClusia\nClusiaceae\nclusiaceous\ncluster\nclusterberry\nclustered\nclusterfist\nclustering\nclusteringly\nclustery\nclutch\nclutchman\ncluther\nclutter\nclutterer\nclutterment\ncluttery\ncly\nClyde\nClydesdale\nClydeside\nClydesider\nclyer\nclyfaker\nclyfaking\nClymenia\nclype\nclypeal\nClypeaster\nClypeastridea\nClypeastrina\nclypeastroid\nClypeastroida\nClypeastroidea\nclypeate\nclypeiform\nclypeolar\nclypeolate\nclypeole\nclypeus\nclysis\nclysma\nclysmian\nclysmic\nclyster\nclysterize\nClytemnestra\ncnemapophysis\ncnemial\ncnemidium\nCnemidophorus\ncnemis\nCneoraceae\ncneoraceous\nCneorum\ncnicin\nCnicus\ncnida\nCnidaria\ncnidarian\nCnidian\ncnidoblast\ncnidocell\ncnidocil\ncnidocyst\ncnidophore\ncnidophorous\ncnidopod\ncnidosac\nCnidoscolus\ncnidosis\ncoabode\ncoabound\ncoabsume\ncoacceptor\ncoacervate\ncoacervation\ncoach\ncoachability\ncoachable\ncoachbuilder\ncoachbuilding\ncoachee\ncoacher\ncoachfellow\ncoachful\ncoaching\ncoachlet\ncoachmaker\ncoachmaking\ncoachman\ncoachmanship\ncoachmaster\ncoachsmith\ncoachsmithing\ncoachway\ncoachwhip\ncoachwise\ncoachwoman\ncoachwork\ncoachwright\ncoachy\ncoact\ncoaction\ncoactive\ncoactively\ncoactivity\ncoactor\ncoadamite\ncoadapt\ncoadaptation\ncoadequate\ncoadjacence\ncoadjacency\ncoadjacent\ncoadjacently\ncoadjudicator\ncoadjust\ncoadjustment\ncoadjutant\ncoadjutator\ncoadjute\ncoadjutement\ncoadjutive\ncoadjutor\ncoadjutorship\ncoadjutress\ncoadjutrix\ncoadjuvancy\ncoadjuvant\ncoadjuvate\ncoadminister\ncoadministration\ncoadministrator\ncoadministratrix\ncoadmiration\ncoadmire\ncoadmit\ncoadnate\ncoadore\ncoadsorbent\ncoadunate\ncoadunation\ncoadunative\ncoadunatively\ncoadunite\ncoadventure\ncoadventurer\ncoadvice\ncoaffirmation\ncoafforest\ncoaged\ncoagency\ncoagent\ncoaggregate\ncoaggregated\ncoaggregation\ncoagitate\ncoagitator\ncoagment\ncoagonize\ncoagriculturist\ncoagula\ncoagulability\ncoagulable\ncoagulant\ncoagulase\ncoagulate\ncoagulation\ncoagulative\ncoagulator\ncoagulatory\ncoagulin\ncoagulometer\ncoagulose\ncoagulum\nCoahuiltecan\ncoaid\ncoaita\ncoak\ncoakum\ncoal\ncoalbag\ncoalbagger\ncoalbin\ncoalbox\ncoaldealer\ncoaler\ncoalesce\ncoalescence\ncoalescency\ncoalescent\ncoalfish\ncoalfitter\ncoalhole\ncoalification\ncoalify\nCoalite\ncoalition\ncoalitional\ncoalitioner\ncoalitionist\ncoalize\ncoalizer\ncoalless\ncoalmonger\ncoalmouse\ncoalpit\ncoalrake\ncoalsack\ncoalternate\ncoalternation\ncoalternative\ncoaltitude\ncoaly\ncoalyard\ncoambassador\ncoambulant\ncoamiable\ncoaming\nCoan\ncoanimate\ncoannex\ncoannihilate\ncoapostate\ncoapparition\ncoappear\ncoappearance\ncoapprehend\ncoapprentice\ncoappriser\ncoapprover\ncoapt\ncoaptate\ncoaptation\ncoaration\ncoarb\ncoarbiter\ncoarbitrator\ncoarctate\ncoarctation\ncoardent\ncoarrange\ncoarrangement\ncoarse\ncoarsely\ncoarsen\ncoarseness\ncoarsish\ncoascend\ncoassert\ncoasserter\ncoassession\ncoassessor\ncoassignee\ncoassist\ncoassistance\ncoassistant\ncoassume\ncoast\ncoastal\ncoastally\ncoaster\nCoastguard\ncoastguardman\ncoasting\ncoastland\ncoastman\ncoastside\ncoastwaiter\ncoastward\ncoastwards\ncoastways\ncoastwise\ncoat\ncoated\ncoatee\ncoater\ncoati\ncoatie\ncoatimondie\ncoatimundi\ncoating\ncoatless\ncoatroom\ncoattail\ncoattailed\ncoattend\ncoattest\ncoattestation\ncoattestator\ncoaudience\ncoauditor\ncoaugment\ncoauthor\ncoauthority\ncoauthorship\ncoawareness\ncoax\ncoaxal\ncoaxation\ncoaxer\ncoaxial\ncoaxially\ncoaxing\ncoaxingly\ncoaxy\ncob\ncobaea\ncobalt\ncobaltammine\ncobaltic\ncobalticyanic\ncobalticyanides\ncobaltiferous\ncobaltinitrite\ncobaltite\ncobaltocyanic\ncobaltocyanide\ncobaltous\ncobang\ncobbed\ncobber\ncobberer\ncobbing\ncobble\ncobbler\ncobblerfish\ncobblerism\ncobblerless\ncobblership\ncobblery\ncobblestone\ncobbling\ncobbly\ncobbra\ncobby\ncobcab\nCobdenism\nCobdenite\ncobego\ncobelief\ncobeliever\ncobelligerent\ncobenignity\ncoberger\ncobewail\ncobhead\ncobia\ncobiron\ncobishop\nCobitidae\nCobitis\ncoble\ncobleman\nCoblentzian\nCobleskill\ncobless\ncobloaf\ncobnut\ncobola\ncoboundless\ncobourg\ncobra\ncobreathe\ncobridgehead\ncobriform\ncobrother\ncobstone\ncoburg\ncoburgess\ncoburgher\ncoburghership\nCobus\ncobweb\ncobwebbery\ncobwebbing\ncobwebby\ncobwork\ncoca\ncocaceous\ncocaine\ncocainism\ncocainist\ncocainization\ncocainize\ncocainomania\ncocainomaniac\nCocama\nCocamama\ncocamine\nCocanucos\ncocarboxylase\ncocash\ncocashweed\ncocause\ncocautioner\nCoccaceae\ncoccagee\ncoccal\nCocceian\nCocceianism\ncoccerin\ncocci\ncoccid\nCoccidae\ncoccidia\ncoccidial\ncoccidian\nCoccidiidea\ncoccidioidal\nCoccidioides\nCoccidiomorpha\ncoccidiosis\ncoccidium\ncoccidology\ncocciferous\ncocciform\ncoccigenic\ncoccinella\ncoccinellid\nCoccinellidae\ncoccionella\ncocco\ncoccobacillus\ncoccochromatic\nCoccogonales\ncoccogone\nCoccogoneae\ncoccogonium\ncoccoid\ncoccolite\ncoccolith\ncoccolithophorid\nCoccolithophoridae\nCoccoloba\nCoccolobis\nCoccomyces\ncoccosphere\ncoccostean\ncoccosteid\nCoccosteidae\nCoccosteus\nCoccothraustes\ncoccothraustine\nCoccothrinax\ncoccous\ncoccule\ncocculiferous\nCocculus\ncocculus\ncoccus\ncoccydynia\ncoccygalgia\ncoccygeal\ncoccygean\ncoccygectomy\ncoccygerector\ncoccyges\ncoccygeus\ncoccygine\ncoccygodynia\ncoccygomorph\nCoccygomorphae\ncoccygomorphic\ncoccygotomy\ncoccyodynia\ncoccyx\nCoccyzus\ncocentric\ncochairman\ncochal\ncochief\nCochin\ncochineal\ncochlea\ncochlear\ncochleare\nCochlearia\ncochlearifoliate\ncochleariform\ncochleate\ncochleated\ncochleiform\ncochleitis\ncochleous\ncochlidiid\nCochlidiidae\ncochliodont\nCochliodontidae\nCochliodus\nCochlospermaceae\ncochlospermaceous\nCochlospermum\nCochranea\ncochurchwarden\ncocillana\ncocircular\ncocircularity\ncocitizen\ncocitizenship\ncock\ncockade\ncockaded\nCockaigne\ncockal\ncockalorum\ncockamaroo\ncockarouse\ncockateel\ncockatoo\ncockatrice\ncockawee\ncockbell\ncockbill\ncockbird\ncockboat\ncockbrain\ncockchafer\ncockcrow\ncockcrower\ncockcrowing\ncocked\nCocker\ncocker\ncockerel\ncockermeg\ncockernony\ncocket\ncockeye\ncockeyed\ncockfight\ncockfighting\ncockhead\ncockhorse\ncockieleekie\ncockily\ncockiness\ncocking\ncockish\ncockle\ncockleboat\ncocklebur\ncockled\ncockler\ncockleshell\ncocklet\ncocklewife\ncocklight\ncockling\ncockloft\ncockly\ncockmaster\ncockmatch\ncockmate\ncockneian\ncockneity\ncockney\ncockneybred\ncockneydom\ncockneyese\ncockneyess\ncockneyfication\ncockneyfy\ncockneyish\ncockneyishly\ncockneyism\ncockneyize\ncockneyland\ncockneyship\ncockpit\ncockroach\ncockscomb\ncockscombed\ncocksfoot\ncockshead\ncockshot\ncockshut\ncockshy\ncockshying\ncockspur\ncockstone\ncocksure\ncocksuredom\ncocksureism\ncocksurely\ncocksureness\ncocksurety\ncocktail\ncockthrowing\ncockup\ncockweed\ncocky\nCocle\ncoco\ncocoa\ncocoach\ncocobolo\nCoconino\ncoconnection\ncoconqueror\ncoconscious\ncoconsciously\ncoconsciousness\ncoconsecrator\ncoconspirator\ncoconstituent\ncocontractor\nCoconucan\nCoconuco\ncoconut\ncocoon\ncocoonery\ncocorico\ncocoroot\nCocos\ncocotte\ncocovenantor\ncocowood\ncocowort\ncocozelle\ncocreate\ncocreator\ncocreatorship\ncocreditor\ncocrucify\ncoctile\ncoction\ncoctoantigen\ncoctoprecipitin\ncocuisa\ncocullo\ncocurator\ncocurrent\ncocuswood\ncocuyo\nCocytean\nCocytus\ncod\ncoda\ncodamine\ncodbank\ncodder\ncodding\ncoddle\ncoddler\ncode\ncodebtor\ncodeclination\ncodecree\ncodefendant\ncodeine\ncodeless\ncodelight\ncodelinquency\ncodelinquent\ncodenization\ncodeposit\ncoder\ncoderive\ncodescendant\ncodespairer\ncodex\ncodfish\ncodfisher\ncodfishery\ncodger\ncodhead\ncodheaded\nCodiaceae\ncodiaceous\nCodiaeum\nCodiales\ncodical\ncodices\ncodicil\ncodicilic\ncodicillary\ncodictatorship\ncodification\ncodifier\ncodify\ncodilla\ncodille\ncodiniac\ncodirectional\ncodirector\ncodiscoverer\ncodisjunct\ncodist\nCodium\ncodivine\ncodling\ncodman\ncodo\ncodol\ncodomestication\ncodominant\ncodon\ncodpiece\ncodpitchings\nCodrus\ncodshead\ncodworm\ncoe\ncoecal\ncoecum\ncoed\ncoeditor\ncoeditorship\ncoeducate\ncoeducation\ncoeducational\ncoeducationalism\ncoeducationalize\ncoeducationally\ncoeffect\ncoefficacy\ncoefficient\ncoefficiently\ncoeffluent\ncoeffluential\ncoelacanth\ncoelacanthid\nCoelacanthidae\ncoelacanthine\nCoelacanthini\ncoelacanthoid\ncoelacanthous\ncoelanaglyphic\ncoelar\ncoelarium\nCoelastraceae\ncoelastraceous\nCoelastrum\nCoelata\ncoelder\ncoeldership\nCoelebogyne\ncoelect\ncoelection\ncoelector\ncoelectron\ncoelelminth\nCoelelminthes\ncoelelminthic\nCoelentera\nCoelenterata\ncoelenterate\ncoelenteric\ncoelenteron\ncoelestine\ncoelevate\ncoelho\ncoelia\ncoeliac\ncoelialgia\ncoelian\nCoelicolae\nCoelicolist\ncoeligenous\ncoelin\ncoeline\ncoeliomyalgia\ncoeliorrhea\ncoeliorrhoea\ncoelioscopy\ncoeliotomy\ncoeloblastic\ncoeloblastula\nCoelococcus\ncoelodont\ncoelogastrula\nCoeloglossum\nCoelogyne\ncoelom\ncoeloma\nCoelomata\ncoelomate\ncoelomatic\ncoelomatous\ncoelomesoblast\ncoelomic\nCoelomocoela\ncoelomopore\ncoelonavigation\ncoelongated\ncoeloplanula\ncoelosperm\ncoelospermous\ncoelostat\ncoelozoic\ncoemanate\ncoembedded\ncoembody\ncoembrace\ncoeminency\ncoemperor\ncoemploy\ncoemployee\ncoemployment\ncoempt\ncoemption\ncoemptional\ncoemptionator\ncoemptive\ncoemptor\ncoenact\ncoenactor\ncoenaculous\ncoenamor\ncoenamorment\ncoenamourment\ncoenanthium\ncoendear\nCoendidae\nCoendou\ncoendure\ncoenenchym\ncoenenchyma\ncoenenchymal\ncoenenchymatous\ncoenenchyme\ncoenesthesia\ncoenesthesis\ncoenflame\ncoengage\ncoengager\ncoenjoy\ncoenobe\ncoenobiar\ncoenobic\ncoenobioid\ncoenobium\ncoenoblast\ncoenoblastic\ncoenocentrum\ncoenocyte\ncoenocytic\ncoenodioecism\ncoenoecial\ncoenoecic\ncoenoecium\ncoenogamete\ncoenomonoecism\ncoenosarc\ncoenosarcal\ncoenosarcous\ncoenosite\ncoenospecies\ncoenospecific\ncoenospecifically\ncoenosteal\ncoenosteum\ncoenotrope\ncoenotype\ncoenotypic\ncoenthrone\ncoenurus\ncoenzyme\ncoequal\ncoequality\ncoequalize\ncoequally\ncoequalness\ncoequate\ncoequated\ncoequation\ncoerce\ncoercement\ncoercer\ncoercibility\ncoercible\ncoercibleness\ncoercibly\ncoercion\ncoercionary\ncoercionist\ncoercitive\ncoercive\ncoercively\ncoerciveness\ncoercivity\nCoerebidae\ncoeruleolactite\ncoessential\ncoessentiality\ncoessentially\ncoessentialness\ncoestablishment\ncoestate\ncoetaneity\ncoetaneous\ncoetaneously\ncoetaneousness\ncoeternal\ncoeternally\ncoeternity\ncoetus\ncoeval\ncoevality\ncoevally\ncoexchangeable\ncoexclusive\ncoexecutant\ncoexecutor\ncoexecutrix\ncoexert\ncoexertion\ncoexist\ncoexistence\ncoexistency\ncoexistent\ncoexpand\ncoexpanded\ncoexperiencer\ncoexpire\ncoexplosion\ncoextend\ncoextension\ncoextensive\ncoextensively\ncoextensiveness\ncoextent\ncofactor\nCofane\ncofaster\ncofather\ncofathership\ncofeature\ncofeoffee\ncoferment\ncofermentation\ncoff\nCoffea\ncoffee\ncoffeebush\ncoffeecake\ncoffeegrower\ncoffeegrowing\ncoffeehouse\ncoffeeleaf\ncoffeepot\ncoffeeroom\ncoffeetime\ncoffeeweed\ncoffeewood\ncoffer\ncofferdam\ncofferer\ncofferfish\ncoffering\ncofferlike\ncofferwork\ncoffin\ncoffinless\ncoffinmaker\ncoffinmaking\ncoffle\ncoffret\ncofighter\ncoforeknown\ncoformulator\ncofounder\ncofoundress\ncofreighter\ncoft\ncofunction\ncog\ncogence\ncogency\ncogener\ncogeneric\ncogent\ncogently\ncogged\ncogger\ncoggie\ncogging\ncoggle\ncoggledy\ncogglety\ncoggly\ncoghle\ncogitability\ncogitable\ncogitabund\ncogitabundity\ncogitabundly\ncogitabundous\ncogitant\ncogitantly\ncogitate\ncogitatingly\ncogitation\ncogitative\ncogitatively\ncogitativeness\ncogitativity\ncogitator\ncoglorify\ncoglorious\ncogman\ncognac\ncognate\ncognateness\ncognatic\ncognatical\ncognation\ncognisable\ncognisance\ncognition\ncognitional\ncognitive\ncognitively\ncognitum\ncognizability\ncognizable\ncognizableness\ncognizably\ncognizance\ncognizant\ncognize\ncognizee\ncognizer\ncognizor\ncognomen\ncognominal\ncognominate\ncognomination\ncognosce\ncognoscent\ncognoscibility\ncognoscible\ncognoscitive\ncognoscitively\ncogon\ncogonal\ncogovernment\ncogovernor\ncogracious\ncograil\ncogrediency\ncogredient\ncogroad\nCogswellia\ncoguarantor\ncoguardian\ncogue\ncogway\ncogwheel\ncogwood\ncohabit\ncohabitancy\ncohabitant\ncohabitation\ncoharmonious\ncoharmoniously\ncoharmonize\ncoheartedness\ncoheir\ncoheiress\ncoheirship\ncohelper\ncohelpership\nCohen\ncohenite\ncoherald\ncohere\ncoherence\ncoherency\ncoherent\ncoherently\ncoherer\ncoheretic\ncoheritage\ncoheritor\ncohesibility\ncohesible\ncohesion\ncohesive\ncohesively\ncohesiveness\ncohibit\ncohibition\ncohibitive\ncohibitor\ncoho\ncohoba\ncohobate\ncohobation\ncohobator\ncohol\ncohort\ncohortation\ncohortative\ncohosh\ncohune\ncohusband\ncoidentity\ncoif\ncoifed\ncoiffure\ncoign\ncoigue\ncoil\ncoiled\ncoiler\ncoiling\ncoilsmith\ncoimmense\ncoimplicant\ncoimplicate\ncoimplore\ncoin\ncoinable\ncoinage\ncoincide\ncoincidence\ncoincidency\ncoincident\ncoincidental\ncoincidentally\ncoincidently\ncoincider\ncoinclination\ncoincline\ncoinclude\ncoincorporate\ncoindicant\ncoindicate\ncoindication\ncoindwelling\ncoiner\ncoinfeftment\ncoinfer\ncoinfinite\ncoinfinity\ncoinhabit\ncoinhabitant\ncoinhabitor\ncoinhere\ncoinherence\ncoinherent\ncoinheritance\ncoinheritor\ncoining\ncoinitial\ncoinmaker\ncoinmaking\ncoinmate\ncoinspire\ncoinstantaneity\ncoinstantaneous\ncoinstantaneously\ncoinstantaneousness\ncoinsurance\ncoinsure\ncointense\ncointension\ncointensity\ncointer\ncointerest\ncointersecting\ncointise\nCointreau\ncoinventor\ncoinvolve\ncoiny\ncoir\ncoislander\ncoistrel\ncoistril\ncoital\ncoition\ncoiture\ncoitus\nCoix\ncojudge\ncojuror\ncojusticiar\ncoke\ncokelike\ncokeman\ncoker\ncokernut\ncokery\ncoking\ncoky\ncol\nCola\ncola\ncolaborer\nColada\ncolalgia\nColan\ncolander\ncolane\ncolarin\ncolate\ncolation\ncolatitude\ncolatorium\ncolature\ncolauxe\ncolback\ncolberter\ncolbertine\nColbertism\ncolcannon\nColchian\nColchicaceae\ncolchicine\nColchicum\nColchis\ncolchyte\nColcine\ncolcothar\ncold\ncolder\ncoldfinch\ncoldhearted\ncoldheartedly\ncoldheartedness\ncoldish\ncoldly\ncoldness\ncoldproof\ncoldslaw\nCole\ncole\ncoleader\ncolecannon\ncolectomy\nColeen\ncolegatee\ncolegislator\ncolemanite\ncolemouse\nColeochaetaceae\ncoleochaetaceous\nColeochaete\nColeophora\nColeophoridae\ncoleopter\nColeoptera\ncoleopteral\ncoleopteran\ncoleopterist\ncoleopteroid\ncoleopterological\ncoleopterology\ncoleopteron\ncoleopterous\ncoleoptile\ncoleoptilum\ncoleorhiza\nColeosporiaceae\nColeosporium\ncoleplant\ncoleseed\ncoleslaw\ncolessee\ncolessor\ncoletit\ncoleur\nColeus\ncolewort\ncoli\nColias\ncolibacillosis\ncolibacterin\ncolibri\ncolic\ncolical\ncolichemarde\ncolicky\ncolicolitis\ncolicroot\ncolicweed\ncolicwort\ncolicystitis\ncolicystopyelitis\ncoliform\nColiidae\nColiiformes\ncolilysin\nColima\ncolima\nColin\ncolin\ncolinear\ncolinephritis\ncoling\nColinus\ncoliplication\ncolipuncture\ncolipyelitis\ncolipyuria\ncolisepsis\nColiseum\ncoliseum\ncolitic\ncolitis\ncolitoxemia\ncoliuria\nColius\ncolk\ncoll\nColla\ncollaborate\ncollaboration\ncollaborationism\ncollaborationist\ncollaborative\ncollaboratively\ncollaborator\ncollage\ncollagen\ncollagenic\ncollagenous\ncollapse\ncollapsibility\ncollapsible\ncollar\ncollarband\ncollarbird\ncollarbone\ncollard\ncollare\ncollared\ncollaret\ncollarino\ncollarless\ncollarman\ncollatable\ncollate\ncollatee\ncollateral\ncollaterality\ncollaterally\ncollateralness\ncollation\ncollationer\ncollatitious\ncollative\ncollator\ncollatress\ncollaud\ncollaudation\ncolleague\ncolleagueship\ncollect\ncollectability\ncollectable\ncollectanea\ncollectarium\ncollected\ncollectedly\ncollectedness\ncollectibility\ncollectible\ncollection\ncollectional\ncollectioner\ncollective\ncollectively\ncollectiveness\ncollectivism\ncollectivist\ncollectivistic\ncollectivistically\ncollectivity\ncollectivization\ncollectivize\ncollector\ncollectorate\ncollectorship\ncollectress\ncolleen\ncollegatary\ncollege\ncolleger\ncollegial\ncollegialism\ncollegiality\ncollegian\ncollegianer\nCollegiant\ncollegiate\ncollegiately\ncollegiateness\ncollegiation\ncollegium\nCollembola\ncollembolan\ncollembole\ncollembolic\ncollembolous\ncollenchyma\ncollenchymatic\ncollenchymatous\ncollenchyme\ncollencytal\ncollencyte\nColleri\nColleries\nCollery\ncollery\ncollet\ncolleter\ncolleterial\ncolleterium\nColletes\nColletia\ncolletic\nColletidae\ncolletin\nColletotrichum\ncolletside\ncolley\ncollibert\ncolliculate\ncolliculus\ncollide\ncollidine\ncollie\ncollied\ncollier\ncolliery\ncollieshangie\ncolliform\ncolligate\ncolligation\ncolligative\ncolligible\ncollimate\ncollimation\ncollimator\nCollin\ncollin\ncollinal\ncolline\ncollinear\ncollinearity\ncollinearly\ncollineate\ncollineation\ncolling\ncollingly\ncollingual\nCollins\ncollins\nCollinsia\ncollinsite\nCollinsonia\ncolliquate\ncolliquation\ncolliquative\ncolliquativeness\ncollision\ncollisional\ncollisive\ncolloblast\ncollobrierite\ncollocal\nCollocalia\ncollocate\ncollocation\ncollocationable\ncollocative\ncollocatory\ncollochemistry\ncollochromate\ncollock\ncollocution\ncollocutor\ncollocutory\ncollodiochloride\ncollodion\ncollodionization\ncollodionize\ncollodiotype\ncollodium\ncollogue\ncolloid\ncolloidal\ncolloidality\ncolloidize\ncolloidochemical\nCollomia\ncollop\ncolloped\ncollophanite\ncollophore\ncolloque\ncolloquia\ncolloquial\ncolloquialism\ncolloquialist\ncolloquiality\ncolloquialize\ncolloquially\ncolloquialness\ncolloquist\ncolloquium\ncolloquize\ncolloquy\ncollothun\ncollotype\ncollotypic\ncollotypy\ncolloxylin\ncolluctation\ncollude\ncolluder\ncollum\ncollumelliaceous\ncollusion\ncollusive\ncollusively\ncollusiveness\ncollutorium\ncollutory\ncolluvial\ncolluvies\ncolly\ncollyba\nCollybia\nCollyridian\ncollyrite\ncollyrium\ncollywest\ncollyweston\ncollywobbles\ncolmar\ncolobin\ncolobium\ncoloboma\nColobus\nColocasia\ncolocentesis\nColocephali\ncolocephalous\ncoloclysis\ncolocola\ncolocolic\ncolocynth\ncolocynthin\ncolodyspepsia\ncoloenteritis\ncologarithm\nCologne\ncololite\nColombian\ncolombier\ncolombin\nColombina\ncolometric\ncolometrically\ncolometry\ncolon\ncolonalgia\ncolonate\ncolonel\ncolonelcy\ncolonelship\ncolongitude\ncolonial\ncolonialism\ncolonialist\ncolonialize\ncolonially\ncolonialness\ncolonic\ncolonist\ncolonitis\ncolonizability\ncolonizable\ncolonization\ncolonizationist\ncolonize\ncolonizer\ncolonnade\ncolonnaded\ncolonnette\ncolonopathy\ncolonopexy\ncolonoscope\ncolonoscopy\ncolony\ncolopexia\ncolopexotomy\ncolopexy\ncolophane\ncolophany\ncolophene\ncolophenic\ncolophon\ncolophonate\nColophonian\ncolophonic\ncolophonist\ncolophonite\ncolophonium\ncolophony\ncoloplication\ncoloproctitis\ncoloptosis\ncolopuncture\ncoloquintid\ncoloquintida\ncolor\ncolorability\ncolorable\ncolorableness\ncolorably\nColoradan\nColorado\ncolorado\ncoloradoite\ncolorant\ncolorate\ncoloration\ncolorational\ncolorationally\ncolorative\ncoloratura\ncolorature\ncolorcast\ncolorectitis\ncolorectostomy\ncolored\ncolorer\ncolorfast\ncolorful\ncolorfully\ncolorfulness\ncolorific\ncolorifics\ncolorimeter\ncolorimetric\ncolorimetrical\ncolorimetrically\ncolorimetrics\ncolorimetrist\ncolorimetry\ncolorin\ncoloring\ncolorist\ncoloristic\ncolorization\ncolorize\ncolorless\ncolorlessly\ncolorlessness\ncolormaker\ncolormaking\ncolorman\ncolorrhaphy\ncolors\ncolortype\nColorum\ncolory\ncoloss\ncolossal\ncolossality\ncolossally\ncolossean\nColosseum\ncolossi\nColossian\nColossochelys\ncolossus\nColossuswise\ncolostomy\ncolostral\ncolostration\ncolostric\ncolostrous\ncolostrum\ncolotomy\ncolotyphoid\ncolove\ncolp\ncolpenchyma\ncolpeo\ncolpeurynter\ncolpeurysis\ncolpindach\ncolpitis\ncolpocele\ncolpocystocele\ncolpohyperplasia\ncolpohysterotomy\ncolpoperineoplasty\ncolpoperineorrhaphy\ncolpoplastic\ncolpoplasty\ncolpoptosis\ncolporrhagia\ncolporrhaphy\ncolporrhea\ncolporrhexis\ncolport\ncolportage\ncolporter\ncolporteur\ncolposcope\ncolposcopy\ncolpotomy\ncolpus\nColt\ncolt\ncolter\ncolthood\ncoltish\ncoltishly\ncoltishness\ncoltpixie\ncoltpixy\ncoltsfoot\ncoltskin\nColuber\ncolubrid\nColubridae\ncolubriform\nColubriformes\nColubriformia\nColubrina\nColubrinae\ncolubrine\ncolubroid\ncolugo\nColumba\ncolumbaceous\nColumbae\nColumban\nColumbanian\ncolumbarium\ncolumbary\ncolumbate\ncolumbeion\nColumbella\nColumbia\ncolumbiad\nColumbian\ncolumbic\nColumbid\nColumbidae\ncolumbier\ncolumbiferous\nColumbiformes\ncolumbin\nColumbine\ncolumbine\ncolumbite\ncolumbium\ncolumbo\ncolumboid\ncolumbotantalate\ncolumbotitanate\ncolumella\ncolumellar\ncolumellate\nColumellia\nColumelliaceae\ncolumelliform\ncolumn\ncolumnal\ncolumnar\ncolumnarian\ncolumnarity\ncolumnated\ncolumned\ncolumner\ncolumniation\ncolumniferous\ncolumniform\ncolumning\ncolumnist\ncolumnization\ncolumnwise\ncolunar\ncolure\nColutea\nColville\ncoly\nColymbidae\ncolymbiform\ncolymbion\nColymbriformes\nColymbus\ncolyone\ncolyonic\ncolytic\ncolyum\ncolyumist\ncolza\ncoma\ncomacine\ncomagistracy\ncomagmatic\ncomaker\ncomal\ncomamie\nComan\nComanche\nComanchean\nComandra\ncomanic\ncomart\nComarum\ncomate\ncomatose\ncomatosely\ncomatoseness\ncomatosity\ncomatous\ncomatula\ncomatulid\ncomb\ncombaron\ncombat\ncombatable\ncombatant\ncombater\ncombative\ncombatively\ncombativeness\ncombativity\ncombed\ncomber\ncombfish\ncombflower\ncombinable\ncombinableness\ncombinant\ncombinantive\ncombinate\ncombination\ncombinational\ncombinative\ncombinator\ncombinatorial\ncombinatory\ncombine\ncombined\ncombinedly\ncombinedness\ncombinement\ncombiner\ncombing\ncombining\ncomble\ncombless\ncomblessness\ncombmaker\ncombmaking\ncomboloio\ncomboy\nCombretaceae\ncombretaceous\nCombretum\ncombure\ncomburendo\ncomburent\ncomburgess\ncomburimeter\ncomburimetry\ncomburivorous\ncombust\ncombustibility\ncombustible\ncombustibleness\ncombustibly\ncombustion\ncombustive\ncombustor\ncombwise\ncombwright\ncomby\ncome\ncomeback\nComecrudo\ncomedial\ncomedian\ncomediant\ncomedic\ncomedical\ncomedienne\ncomedietta\ncomedist\ncomedo\ncomedown\ncomedy\ncomelily\ncomeliness\ncomeling\ncomely\ncomendite\ncomenic\ncomephorous\ncomer\ncomes\ncomestible\ncomet\ncometarium\ncometary\ncomether\ncometic\ncometical\ncometlike\ncometographer\ncometographical\ncometography\ncometoid\ncometology\ncometwise\ncomeuppance\ncomfit\ncomfiture\ncomfort\ncomfortable\ncomfortableness\ncomfortably\ncomforter\ncomfortful\ncomforting\ncomfortingly\ncomfortless\ncomfortlessly\ncomfortlessness\ncomfortress\ncomfortroot\ncomfrey\ncomfy\nComiakin\ncomic\ncomical\ncomicality\ncomically\ncomicalness\ncomicocratic\ncomicocynical\ncomicodidactic\ncomicography\ncomicoprosaic\ncomicotragedy\ncomicotragic\ncomicotragical\ncomicry\nComid\ncomiferous\nCominform\ncoming\ncomingle\ncomino\nComintern\ncomism\ncomital\ncomitant\ncomitatensian\ncomitative\ncomitatus\ncomitia\ncomitial\nComitium\ncomitragedy\ncomity\ncomma\ncommand\ncommandable\ncommandant\ncommandedness\ncommandeer\ncommander\ncommandership\ncommandery\ncommanding\ncommandingly\ncommandingness\ncommandless\ncommandment\ncommando\ncommandoman\ncommandress\ncommassation\ncommassee\ncommatic\ncommation\ncommatism\ncommeasurable\ncommeasure\ncommeddle\nCommelina\nCommelinaceae\ncommelinaceous\ncommemorable\ncommemorate\ncommemoration\ncommemorational\ncommemorative\ncommemoratively\ncommemorativeness\ncommemorator\ncommemoratory\ncommemorize\ncommence\ncommenceable\ncommencement\ncommencer\ncommend\ncommendable\ncommendableness\ncommendably\ncommendador\ncommendam\ncommendatary\ncommendation\ncommendator\ncommendatory\ncommender\ncommendingly\ncommendment\ncommensal\ncommensalism\ncommensalist\ncommensalistic\ncommensality\ncommensally\ncommensurability\ncommensurable\ncommensurableness\ncommensurably\ncommensurate\ncommensurately\ncommensurateness\ncommensuration\ncomment\ncommentarial\ncommentarialism\ncommentary\ncommentate\ncommentation\ncommentator\ncommentatorial\ncommentatorially\ncommentatorship\ncommenter\ncommerce\ncommerceless\ncommercer\ncommerciable\ncommercial\ncommercialism\ncommercialist\ncommercialistic\ncommerciality\ncommercialization\ncommercialize\ncommercially\ncommercium\ncommerge\ncommie\ncomminate\ncommination\ncomminative\ncomminator\ncomminatory\ncommingle\ncomminglement\ncommingler\ncomminister\ncomminuate\ncomminute\ncomminution\ncomminutor\nCommiphora\ncommiserable\ncommiserate\ncommiseratingly\ncommiseration\ncommiserative\ncommiseratively\ncommiserator\ncommissar\ncommissarial\ncommissariat\ncommissary\ncommissaryship\ncommission\ncommissionaire\ncommissional\ncommissionate\ncommissioner\ncommissionership\ncommissionship\ncommissive\ncommissively\ncommissural\ncommissure\ncommissurotomy\ncommit\ncommitment\ncommittable\ncommittal\ncommittee\ncommitteeism\ncommitteeman\ncommitteeship\ncommitteewoman\ncommittent\ncommitter\ncommittible\ncommittor\ncommix\ncommixt\ncommixtion\ncommixture\ncommodatary\ncommodate\ncommodation\ncommodatum\ncommode\ncommodious\ncommodiously\ncommodiousness\ncommoditable\ncommodity\ncommodore\ncommon\ncommonable\ncommonage\ncommonality\ncommonalty\ncommoner\ncommonership\ncommoney\ncommonish\ncommonition\ncommonize\ncommonly\ncommonness\ncommonplace\ncommonplaceism\ncommonplacely\ncommonplaceness\ncommonplacer\ncommons\ncommonsensible\ncommonsensibly\ncommonsensical\ncommonsensically\ncommonty\ncommonweal\ncommonwealth\ncommonwealthism\ncommorancy\ncommorant\ncommorient\ncommorth\ncommot\ncommotion\ncommotional\ncommotive\ncommove\ncommuna\ncommunal\ncommunalism\ncommunalist\ncommunalistic\ncommunality\ncommunalization\ncommunalize\ncommunalizer\ncommunally\ncommunard\ncommune\ncommuner\ncommunicability\ncommunicable\ncommunicableness\ncommunicably\ncommunicant\ncommunicate\ncommunicatee\ncommunicating\ncommunication\ncommunicative\ncommunicatively\ncommunicativeness\ncommunicator\ncommunicatory\ncommunion\ncommunionist\ncommunique\ncommunism\ncommunist\ncommunistery\ncommunistic\ncommunistically\ncommunital\ncommunitarian\ncommunitary\ncommunitive\ncommunitorium\ncommunity\ncommunization\ncommunize\ncommutability\ncommutable\ncommutableness\ncommutant\ncommutate\ncommutation\ncommutative\ncommutatively\ncommutator\ncommute\ncommuter\ncommuting\ncommutual\ncommutuality\nComnenian\ncomoid\ncomolecule\ncomortgagee\ncomose\ncomourn\ncomourner\ncomournful\ncomous\nComox\ncompact\ncompacted\ncompactedly\ncompactedness\ncompacter\ncompactible\ncompaction\ncompactly\ncompactness\ncompactor\ncompacture\ncompages\ncompaginate\ncompagination\ncompanator\ncompanion\ncompanionability\ncompanionable\ncompanionableness\ncompanionably\ncompanionage\ncompanionate\ncompanionize\ncompanionless\ncompanionship\ncompanionway\ncompany\ncomparability\ncomparable\ncomparableness\ncomparably\ncomparascope\ncomparate\ncomparatival\ncomparative\ncomparatively\ncomparativeness\ncomparativist\ncomparator\ncompare\ncomparer\ncomparison\ncomparition\ncomparograph\ncompart\ncompartition\ncompartment\ncompartmental\ncompartmentalization\ncompartmentalize\ncompartmentally\ncompartmentize\ncompass\ncompassable\ncompasser\ncompasses\ncompassing\ncompassion\ncompassionable\ncompassionate\ncompassionately\ncompassionateness\ncompassionless\ncompassive\ncompassivity\ncompassless\ncompaternity\ncompatibility\ncompatible\ncompatibleness\ncompatibly\ncompatriot\ncompatriotic\ncompatriotism\ncompear\ncompearance\ncompearant\ncompeer\ncompel\ncompellable\ncompellably\ncompellation\ncompellative\ncompellent\ncompeller\ncompelling\ncompellingly\ncompend\ncompendency\ncompendent\ncompendia\ncompendiary\ncompendiate\ncompendious\ncompendiously\ncompendiousness\ncompendium\ncompenetrate\ncompenetration\ncompensable\ncompensate\ncompensating\ncompensatingly\ncompensation\ncompensational\ncompensative\ncompensativeness\ncompensator\ncompensatory\ncompense\ncompenser\ncompesce\ncompete\ncompetence\ncompetency\ncompetent\ncompetently\ncompetentness\ncompetition\ncompetitioner\ncompetitive\ncompetitively\ncompetitiveness\ncompetitor\ncompetitorship\ncompetitory\ncompetitress\ncompetitrix\ncompilation\ncompilator\ncompilatory\ncompile\ncompilement\ncompiler\ncompital\nCompitalia\ncompitum\ncomplacence\ncomplacency\ncomplacent\ncomplacential\ncomplacentially\ncomplacently\ncomplain\ncomplainable\ncomplainant\ncomplainer\ncomplainingly\ncomplainingness\ncomplaint\ncomplaintive\ncomplaintiveness\ncomplaisance\ncomplaisant\ncomplaisantly\ncomplaisantness\ncomplanar\ncomplanate\ncomplanation\ncomplect\ncomplected\ncomplement\ncomplemental\ncomplementally\ncomplementalness\ncomplementariness\ncomplementarism\ncomplementary\ncomplementation\ncomplementative\ncomplementer\ncomplementoid\ncomplete\ncompletedness\ncompletely\ncompletement\ncompleteness\ncompleter\ncompletion\ncompletive\ncompletively\ncompletory\ncomplex\ncomplexedness\ncomplexification\ncomplexify\ncomplexion\ncomplexionably\ncomplexional\ncomplexionally\ncomplexioned\ncomplexionist\ncomplexionless\ncomplexity\ncomplexively\ncomplexly\ncomplexness\ncomplexus\ncompliable\ncompliableness\ncompliably\ncompliance\ncompliancy\ncompliant\ncompliantly\ncomplicacy\ncomplicant\ncomplicate\ncomplicated\ncomplicatedly\ncomplicatedness\ncomplication\ncomplicative\ncomplice\ncomplicitous\ncomplicity\ncomplier\ncompliment\ncomplimentable\ncomplimental\ncomplimentally\ncomplimentalness\ncomplimentarily\ncomplimentariness\ncomplimentary\ncomplimentation\ncomplimentative\ncomplimenter\ncomplimentingly\ncomplin\ncomplot\ncomplotter\nComplutensian\ncompluvium\ncomply\ncompo\ncompoer\ncompole\ncompone\ncomponed\ncomponency\ncomponendo\ncomponent\ncomponental\ncomponented\ncompony\ncomport\ncomportment\ncompos\ncompose\ncomposed\ncomposedly\ncomposedness\ncomposer\ncomposita\nCompositae\ncomposite\ncompositely\ncompositeness\ncomposition\ncompositional\ncompositionally\ncompositive\ncompositively\ncompositor\ncompositorial\ncompositous\ncomposograph\ncompossibility\ncompossible\ncompost\ncomposture\ncomposure\ncompotation\ncompotationship\ncompotator\ncompotatory\ncompote\ncompotor\ncompound\ncompoundable\ncompoundedness\ncompounder\ncompounding\ncompoundness\ncomprachico\ncomprador\ncomprecation\ncompreg\ncompregnate\ncomprehend\ncomprehender\ncomprehendible\ncomprehendingly\ncomprehense\ncomprehensibility\ncomprehensible\ncomprehensibleness\ncomprehensibly\ncomprehension\ncomprehensive\ncomprehensively\ncomprehensiveness\ncomprehensor\ncompresbyter\ncompresbyterial\ncompresence\ncompresent\ncompress\ncompressed\ncompressedly\ncompressibility\ncompressible\ncompressibleness\ncompressingly\ncompression\ncompressional\ncompressive\ncompressively\ncompressometer\ncompressor\ncompressure\ncomprest\ncompriest\ncomprisable\ncomprisal\ncomprise\ncomprised\ncompromise\ncompromiser\ncompromising\ncompromisingly\ncompromissary\ncompromission\ncompromissorial\ncompromit\ncompromitment\ncomprovincial\nCompsilura\nCompsoa\nCompsognathus\nCompsothlypidae\ncompter\nComptometer\nComptonia\ncomptroller\ncomptrollership\ncompulsative\ncompulsatively\ncompulsatorily\ncompulsatory\ncompulsed\ncompulsion\ncompulsitor\ncompulsive\ncompulsively\ncompulsiveness\ncompulsorily\ncompulsoriness\ncompulsory\ncompunction\ncompunctionary\ncompunctionless\ncompunctious\ncompunctiously\ncompunctive\ncompurgation\ncompurgator\ncompurgatorial\ncompurgatory\ncompursion\ncomputability\ncomputable\ncomputably\ncomputation\ncomputational\ncomputative\ncomputativeness\ncompute\ncomputer\ncomputist\ncomputus\ncomrade\ncomradely\ncomradery\ncomradeship\nComsomol\ncomstockery\nComtian\nComtism\nComtist\ncomurmurer\nComus\ncon\nconacaste\nconacre\nconal\nconalbumin\nconamed\nConant\nconarial\nconarium\nconation\nconational\nconationalistic\nconative\nconatus\nconaxial\nconcamerate\nconcamerated\nconcameration\nconcanavalin\nconcaptive\nconcassation\nconcatenary\nconcatenate\nconcatenation\nconcatenator\nconcausal\nconcause\nconcavation\nconcave\nconcavely\nconcaveness\nconcaver\nconcavity\nconceal\nconcealable\nconcealed\nconcealedly\nconcealedness\nconcealer\nconcealment\nconcede\nconceded\nconcededly\nconceder\nconceit\nconceited\nconceitedly\nconceitedness\nconceitless\nconceity\nconceivability\nconceivable\nconceivableness\nconceivably\nconceive\nconceiver\nconcelebrate\nconcelebration\nconcent\nconcenter\nconcentive\nconcentralization\nconcentrate\nconcentrated\nconcentration\nconcentrative\nconcentrativeness\nconcentrator\nconcentric\nconcentrically\nconcentricity\nconcentual\nconcentus\nconcept\nconceptacle\nconceptacular\nconceptaculum\nconception\nconceptional\nconceptionist\nconceptism\nconceptive\nconceptiveness\nconceptual\nconceptualism\nconceptualist\nconceptualistic\nconceptuality\nconceptualization\nconceptualize\nconceptually\nconceptus\nconcern\nconcerned\nconcernedly\nconcernedness\nconcerning\nconcerningly\nconcerningness\nconcernment\nconcert\nconcerted\nconcertedly\nconcertgoer\nconcertina\nconcertinist\nconcertist\nconcertize\nconcertizer\nconcertmaster\nconcertmeister\nconcertment\nconcerto\nconcertstuck\nconcessible\nconcession\nconcessionaire\nconcessional\nconcessionary\nconcessioner\nconcessionist\nconcessive\nconcessively\nconcessiveness\nconcessor\nconcettism\nconcettist\nconch\nconcha\nconchal\nconchate\nconche\nconched\nconcher\nConchifera\nconchiferous\nconchiform\nconchinine\nconchiolin\nconchitic\nconchitis\nConchobor\nconchoid\nconchoidal\nconchoidally\nconchological\nconchologically\nconchologist\nconchologize\nconchology\nconchometer\nconchometry\nConchostraca\nconchotome\nConchubar\nConchucu\nconchuela\nconchy\nconchyliated\nconchyliferous\nconchylium\nconcierge\nconcile\nconciliable\nconciliabule\nconciliabulum\nconciliar\nconciliate\nconciliating\nconciliatingly\nconciliation\nconciliationist\nconciliative\nconciliator\nconciliatorily\nconciliatoriness\nconciliatory\nconcilium\nconcinnity\nconcinnous\nconcionator\nconcipiency\nconcipient\nconcise\nconcisely\nconciseness\nconcision\nconclamant\nconclamation\nconclave\nconclavist\nconcludable\nconclude\nconcluder\nconcluding\nconcludingly\nconclusion\nconclusional\nconclusionally\nconclusive\nconclusively\nconclusiveness\nconclusory\nconcoagulate\nconcoagulation\nconcoct\nconcocter\nconcoction\nconcoctive\nconcoctor\nconcolor\nconcolorous\nconcomitance\nconcomitancy\nconcomitant\nconcomitantly\nconconscious\nConcord\nconcord\nconcordal\nconcordance\nconcordancer\nconcordant\nconcordantial\nconcordantly\nconcordat\nconcordatory\nconcorder\nconcordial\nconcordist\nconcordity\nconcorporate\nConcorrezanes\nconcourse\nconcreate\nconcremation\nconcrement\nconcresce\nconcrescence\nconcrescible\nconcrescive\nconcrete\nconcretely\nconcreteness\nconcreter\nconcretion\nconcretional\nconcretionary\nconcretism\nconcretive\nconcretively\nconcretize\nconcretor\nconcubinage\nconcubinal\nconcubinarian\nconcubinary\nconcubinate\nconcubine\nconcubinehood\nconcubitancy\nconcubitant\nconcubitous\nconcubitus\nconcupiscence\nconcupiscent\nconcupiscible\nconcupiscibleness\nconcupy\nconcur\nconcurrence\nconcurrency\nconcurrent\nconcurrently\nconcurrentness\nconcurring\nconcurringly\nconcursion\nconcurso\nconcursus\nconcuss\nconcussant\nconcussion\nconcussional\nconcussive\nconcutient\nconcyclic\nconcyclically\ncond\nCondalia\ncondemn\ncondemnable\ncondemnably\ncondemnate\ncondemnation\ncondemnatory\ncondemned\ncondemner\ncondemning\ncondemningly\ncondensability\ncondensable\ncondensance\ncondensary\ncondensate\ncondensation\ncondensational\ncondensative\ncondensator\ncondense\ncondensed\ncondensedly\ncondensedness\ncondenser\ncondensery\ncondensity\ncondescend\ncondescendence\ncondescendent\ncondescender\ncondescending\ncondescendingly\ncondescendingness\ncondescension\ncondescensive\ncondescensively\ncondescensiveness\ncondiction\ncondictious\ncondiddle\ncondiddlement\ncondign\ncondigness\ncondignity\ncondignly\ncondiment\ncondimental\ncondimentary\ncondisciple\ncondistillation\ncondite\ncondition\nconditional\nconditionalism\nconditionalist\nconditionality\nconditionalize\nconditionally\nconditionate\nconditioned\nconditioner\ncondivision\ncondolatory\ncondole\ncondolement\ncondolence\ncondolent\ncondoler\ncondoling\ncondolingly\ncondominate\ncondominium\ncondonable\ncondonance\ncondonation\ncondonative\ncondone\ncondonement\ncondoner\ncondor\nconduce\nconducer\nconducing\nconducingly\nconducive\nconduciveness\nconduct\nconductance\nconductibility\nconductible\nconductility\nconductimeter\nconductio\nconduction\nconductional\nconductitious\nconductive\nconductively\nconductivity\nconductometer\nconductometric\nconductor\nconductorial\nconductorless\nconductorship\nconductory\nconductress\nconductus\nconduit\nconduplicate\nconduplicated\nconduplication\ncondurangin\ncondurango\ncondylar\ncondylarth\nCondylarthra\ncondylarthrosis\ncondylarthrous\ncondyle\ncondylectomy\ncondylion\ncondyloid\ncondyloma\ncondylomatous\ncondylome\ncondylopod\nCondylopoda\ncondylopodous\ncondylos\ncondylotomy\nCondylura\ncondylure\ncone\nconed\nconeen\nconeflower\nconehead\nconeighboring\nconeine\nconelet\nconemaker\nconemaking\nConemaugh\nconenose\nconepate\nconer\ncones\nconessine\nConestoga\nconfab\nconfabular\nconfabulate\nconfabulation\nconfabulator\nconfabulatory\nconfact\nconfarreate\nconfarreation\nconfated\nconfect\nconfection\nconfectionary\nconfectioner\nconfectionery\nConfed\nconfederacy\nconfederal\nconfederalist\nconfederate\nconfederater\nconfederatio\nconfederation\nconfederationist\nconfederatism\nconfederative\nconfederatize\nconfederator\nconfelicity\nconferee\nconference\nconferential\nconferment\nconferrable\nconferral\nconferrer\nconferruminate\nconferted\nConferva\nConfervaceae\nconfervaceous\nconferval\nConfervales\nconfervoid\nConfervoideae\nconfervous\nconfess\nconfessable\nconfessant\nconfessarius\nconfessary\nconfessedly\nconfesser\nconfessing\nconfessingly\nconfession\nconfessional\nconfessionalian\nconfessionalism\nconfessionalist\nconfessionary\nconfessionist\nconfessor\nconfessorship\nconfessory\nconfidant\nconfide\nconfidence\nconfidency\nconfident\nconfidential\nconfidentiality\nconfidentially\nconfidentialness\nconfidentiary\nconfidently\nconfidentness\nconfider\nconfiding\nconfidingly\nconfidingness\nconfigural\nconfigurate\nconfiguration\nconfigurational\nconfigurationally\nconfigurationism\nconfigurationist\nconfigurative\nconfigure\nconfinable\nconfine\nconfineable\nconfined\nconfinedly\nconfinedness\nconfineless\nconfinement\nconfiner\nconfining\nconfinity\nconfirm\nconfirmable\nconfirmand\nconfirmation\nconfirmative\nconfirmatively\nconfirmatorily\nconfirmatory\nconfirmed\nconfirmedly\nconfirmedness\nconfirmee\nconfirmer\nconfirming\nconfirmingly\nconfirmity\nconfirmment\nconfirmor\nconfiscable\nconfiscatable\nconfiscate\nconfiscation\nconfiscator\nconfiscatory\nconfitent\nconfiteor\nconfiture\nconfix\nconflagrant\nconflagrate\nconflagration\nconflagrative\nconflagrator\nconflagratory\nconflate\nconflated\nconflation\nconflict\nconflicting\nconflictingly\nconfliction\nconflictive\nconflictory\nconflow\nconfluence\nconfluent\nconfluently\nconflux\nconfluxibility\nconfluxible\nconfluxibleness\nconfocal\nconform\nconformability\nconformable\nconformableness\nconformably\nconformal\nconformance\nconformant\nconformate\nconformation\nconformator\nconformer\nconformist\nconformity\nconfound\nconfoundable\nconfounded\nconfoundedly\nconfoundedness\nconfounder\nconfounding\nconfoundingly\nconfrater\nconfraternal\nconfraternity\nconfraternization\nconfrere\nconfriar\nconfrication\nconfront\nconfrontal\nconfrontation\nconfronte\nconfronter\nconfrontment\nConfucian\nConfucianism\nConfucianist\nconfusability\nconfusable\nconfusably\nconfuse\nconfused\nconfusedly\nconfusedness\nconfusingly\nconfusion\nconfusional\nconfusticate\nconfustication\nconfutable\nconfutation\nconfutative\nconfutator\nconfute\nconfuter\nconga\ncongeable\ncongeal\ncongealability\ncongealable\ncongealableness\ncongealedness\ncongealer\ncongealment\ncongee\ncongelation\ncongelative\ncongelifraction\ncongeliturbate\ncongeliturbation\ncongener\ncongeneracy\ncongeneric\ncongenerical\ncongenerous\ncongenerousness\ncongenetic\ncongenial\ncongeniality\ncongenialize\ncongenially\ncongenialness\ncongenital\ncongenitally\ncongenitalness\nconger\ncongeree\ncongest\ncongested\ncongestible\ncongestion\ncongestive\ncongiary\ncongius\nconglobate\nconglobately\nconglobation\nconglobe\nconglobulate\nconglomerate\nconglomeratic\nconglomeration\nconglutin\nconglutinant\nconglutinate\nconglutination\nconglutinative\nCongo\nCongoese\nCongolese\nCongoleum\ncongou\ncongratulable\ncongratulant\ncongratulate\ncongratulation\ncongratulational\ncongratulator\ncongratulatory\ncongredient\ncongreet\ncongregable\ncongreganist\ncongregant\ncongregate\ncongregation\ncongregational\ncongregationalism\nCongregationalist\ncongregationalize\ncongregationally\nCongregationer\ncongregationist\ncongregative\ncongregativeness\ncongregator\nCongreso\ncongress\ncongresser\ncongressional\ncongressionalist\ncongressionally\ncongressionist\ncongressist\ncongressive\ncongressman\nCongresso\ncongresswoman\nCongreve\nCongridae\ncongroid\ncongruence\ncongruency\ncongruent\ncongruential\ncongruently\ncongruism\ncongruist\ncongruistic\ncongruity\ncongruous\ncongruously\ncongruousness\nconhydrine\nConiacian\nconic\nconical\nconicality\nconically\nconicalness\nconiceine\nconichalcite\nconicine\nconicity\nconicle\nconicoid\nconicopoly\nconics\nConidae\nconidia\nconidial\nconidian\nconidiiferous\nconidioid\nconidiophore\nconidiophorous\nconidiospore\nconidium\nconifer\nConiferae\nconiferin\nconiferophyte\nconiferous\nconification\nconiform\nConilurus\nconima\nconimene\nconin\nconine\nConiogramme\nConiophora\nConiopterygidae\nConioselinum\nconiosis\nConiothyrium\nconiroster\nconirostral\nConirostres\nConium\nconject\nconjective\nconjecturable\nconjecturably\nconjectural\nconjecturalist\nconjecturality\nconjecturally\nconjecture\nconjecturer\nconjobble\nconjoin\nconjoined\nconjoinedly\nconjoiner\nconjoint\nconjointly\nconjointment\nconjointness\nconjubilant\nconjugable\nconjugacy\nconjugal\nConjugales\nconjugality\nconjugally\nconjugant\nconjugata\nConjugatae\nconjugate\nconjugated\nconjugately\nconjugateness\nconjugation\nconjugational\nconjugationally\nconjugative\nconjugator\nconjugial\nconjugium\nconjunct\nconjunction\nconjunctional\nconjunctionally\nconjunctiva\nconjunctival\nconjunctive\nconjunctively\nconjunctiveness\nconjunctivitis\nconjunctly\nconjunctur\nconjunctural\nconjuncture\nconjuration\nconjurator\nconjure\nconjurement\nconjurer\nconjurership\nconjuror\nconjury\nconk\nconkanee\nconker\nconkers\nconky\nconn\nconnach\nConnaraceae\nconnaraceous\nconnarite\nConnarus\nconnascency\nconnascent\nconnatal\nconnate\nconnately\nconnateness\nconnation\nconnatural\nconnaturality\nconnaturalize\nconnaturally\nconnaturalness\nconnature\nconnaught\nconnect\nconnectable\nconnectant\nconnected\nconnectedly\nconnectedness\nconnectible\nconnection\nconnectional\nconnectival\nconnective\nconnectively\nconnectivity\nconnector\nconnellite\nconner\nconnex\nconnexion\nconnexionalism\nconnexity\nconnexive\nconnexivum\nconnexus\nConnie\nconning\nconniption\nconnivance\nconnivancy\nconnivant\nconnivantly\nconnive\nconnivent\nconniver\nConnochaetes\nconnoissance\nconnoisseur\nconnoisseurship\nconnotation\nconnotative\nconnotatively\nconnote\nconnotive\nconnotively\nconnubial\nconnubiality\nconnubially\nconnubiate\nconnubium\nconnumerate\nconnumeration\nConocarpus\nConocephalum\nConocephalus\nconoclinium\nconocuneus\nconodont\nconoid\nconoidal\nconoidally\nconoidic\nconoidical\nconoidically\nConolophus\nconominee\ncononintelligent\nConopholis\nconopid\nConopidae\nconoplain\nconopodium\nConopophaga\nConopophagidae\nConor\nConorhinus\nconormal\nconoscope\nconourish\nConoy\nconphaseolin\nconplane\nconquedle\nconquer\nconquerable\nconquerableness\nconqueress\nconquering\nconqueringly\nconquerment\nconqueror\nconquest\nconquian\nconquinamine\nconquinine\nconquistador\nConrad\nconrector\nconrectorship\nconred\nConringia\nconsanguine\nconsanguineal\nconsanguinean\nconsanguineous\nconsanguineously\nconsanguinity\nconscience\nconscienceless\nconsciencelessly\nconsciencelessness\nconsciencewise\nconscient\nconscientious\nconscientiously\nconscientiousness\nconscionable\nconscionableness\nconscionably\nconscious\nconsciously\nconsciousness\nconscribe\nconscript\nconscription\nconscriptional\nconscriptionist\nconscriptive\nconsecrate\nconsecrated\nconsecratedness\nconsecrater\nconsecration\nconsecrative\nconsecrator\nconsecratory\nconsectary\nconsecute\nconsecution\nconsecutive\nconsecutively\nconsecutiveness\nconsecutives\nconsenescence\nconsenescency\nconsension\nconsensual\nconsensually\nconsensus\nconsent\nconsentable\nconsentaneity\nconsentaneous\nconsentaneously\nconsentaneousness\nconsentant\nconsenter\nconsentful\nconsentfully\nconsentience\nconsentient\nconsentiently\nconsenting\nconsentingly\nconsentingness\nconsentive\nconsentively\nconsentment\nconsequence\nconsequency\nconsequent\nconsequential\nconsequentiality\nconsequentially\nconsequentialness\nconsequently\nconsertal\nconservable\nconservacy\nconservancy\nconservant\nconservate\nconservation\nconservational\nconservationist\nconservatism\nconservatist\nconservative\nconservatively\nconservativeness\nconservatize\nconservatoire\nconservator\nconservatorio\nconservatorium\nconservatorship\nconservatory\nconservatrix\nconserve\nconserver\nconsider\nconsiderability\nconsiderable\nconsiderableness\nconsiderably\nconsiderance\nconsiderate\nconsiderately\nconsiderateness\nconsideration\nconsiderative\nconsideratively\nconsiderativeness\nconsiderator\nconsidered\nconsiderer\nconsidering\nconsideringly\nconsign\nconsignable\nconsignatary\nconsignation\nconsignatory\nconsignee\nconsigneeship\nconsigner\nconsignificant\nconsignificate\nconsignification\nconsignificative\nconsignificator\nconsignify\nconsignment\nconsignor\nconsiliary\nconsilience\nconsilient\nconsimilar\nconsimilarity\nconsimilate\nconsist\nconsistence\nconsistency\nconsistent\nconsistently\nconsistorial\nconsistorian\nconsistory\nconsociate\nconsociation\nconsociational\nconsociationism\nconsociative\nconsocies\nconsol\nconsolable\nconsolableness\nconsolably\nConsolamentum\nconsolation\nConsolato\nconsolatorily\nconsolatoriness\nconsolatory\nconsolatrix\nconsole\nconsolement\nconsoler\nconsolidant\nconsolidate\nconsolidated\nconsolidation\nconsolidationist\nconsolidative\nconsolidator\nconsoling\nconsolingly\nconsolute\nconsomme\nconsonance\nconsonancy\nconsonant\nconsonantal\nconsonantic\nconsonantism\nconsonantize\nconsonantly\nconsonantness\nconsonate\nconsonous\nconsort\nconsortable\nconsorter\nconsortial\nconsortion\nconsortism\nconsortium\nconsortship\nconsound\nconspecies\nconspecific\nconspectus\nconsperse\nconspersion\nconspicuity\nconspicuous\nconspicuously\nconspicuousness\nconspiracy\nconspirant\nconspiration\nconspirative\nconspirator\nconspiratorial\nconspiratorially\nconspiratory\nconspiratress\nconspire\nconspirer\nconspiring\nconspiringly\nconspue\nconstable\nconstablery\nconstableship\nconstabless\nconstablewick\nconstabular\nconstabulary\nConstance\nconstancy\nconstant\nconstantan\nConstantine\nConstantinian\nConstantinopolitan\nconstantly\nconstantness\nconstat\nconstatation\nconstate\nconstatory\nconstellate\nconstellation\nconstellatory\nconsternate\nconsternation\nconstipate\nconstipation\nconstituency\nconstituent\nconstituently\nconstitute\nconstituter\nconstitution\nconstitutional\nconstitutionalism\nconstitutionalist\nconstitutionality\nconstitutionalization\nconstitutionalize\nconstitutionally\nconstitutionary\nconstitutioner\nconstitutionist\nconstitutive\nconstitutively\nconstitutiveness\nconstitutor\nconstrain\nconstrainable\nconstrained\nconstrainedly\nconstrainedness\nconstrainer\nconstraining\nconstrainingly\nconstrainment\nconstraint\nconstrict\nconstricted\nconstriction\nconstrictive\nconstrictor\nconstringe\nconstringency\nconstringent\nconstruability\nconstruable\nconstruct\nconstructer\nconstructible\nconstruction\nconstructional\nconstructionally\nconstructionism\nconstructionist\nconstructive\nconstructively\nconstructiveness\nconstructivism\nconstructivist\nconstructor\nconstructorship\nconstructure\nconstrue\nconstruer\nconstuprate\nconstupration\nconsubsist\nconsubsistency\nconsubstantial\nconsubstantialism\nconsubstantialist\nconsubstantiality\nconsubstantially\nconsubstantiate\nconsubstantiation\nconsubstantiationist\nconsubstantive\nconsuete\nconsuetitude\nconsuetude\nconsuetudinal\nconsuetudinary\nconsul\nconsulage\nconsular\nconsularity\nconsulary\nconsulate\nconsulship\nconsult\nconsultable\nconsultant\nconsultary\nconsultation\nconsultative\nconsultatory\nconsultee\nconsulter\nconsulting\nconsultive\nconsultively\nconsultor\nconsultory\nconsumable\nconsume\nconsumedly\nconsumeless\nconsumer\nconsuming\nconsumingly\nconsumingness\nconsummate\nconsummately\nconsummation\nconsummative\nconsummatively\nconsummativeness\nconsummator\nconsummatory\nconsumpt\nconsumpted\nconsumptible\nconsumption\nconsumptional\nconsumptive\nconsumptively\nconsumptiveness\nconsumptivity\nconsute\ncontabescence\ncontabescent\ncontact\ncontactor\ncontactual\ncontactually\ncontagion\ncontagioned\ncontagionist\ncontagiosity\ncontagious\ncontagiously\ncontagiousness\ncontagium\ncontain\ncontainable\ncontainer\ncontainment\ncontakion\ncontaminable\ncontaminant\ncontaminate\ncontamination\ncontaminative\ncontaminator\ncontaminous\ncontangential\ncontango\nconte\ncontect\ncontection\ncontemn\ncontemner\ncontemnible\ncontemnibly\ncontemning\ncontemningly\ncontemnor\ncontemper\ncontemperate\ncontemperature\ncontemplable\ncontemplamen\ncontemplant\ncontemplate\ncontemplatingly\ncontemplation\ncontemplatist\ncontemplative\ncontemplatively\ncontemplativeness\ncontemplator\ncontemplature\ncontemporanean\ncontemporaneity\ncontemporaneous\ncontemporaneously\ncontemporaneousness\ncontemporarily\ncontemporariness\ncontemporary\ncontemporize\ncontempt\ncontemptful\ncontemptibility\ncontemptible\ncontemptibleness\ncontemptibly\ncontemptuous\ncontemptuously\ncontemptuousness\ncontendent\ncontender\ncontending\ncontendingly\ncontendress\ncontent\ncontentable\ncontented\ncontentedly\ncontentedness\ncontentful\ncontention\ncontentional\ncontentious\ncontentiously\ncontentiousness\ncontentless\ncontently\ncontentment\ncontentness\ncontents\nconter\nconterminal\nconterminant\ncontermine\nconterminous\nconterminously\nconterminousness\ncontest\ncontestable\ncontestableness\ncontestably\ncontestant\ncontestation\ncontestee\ncontester\ncontestingly\ncontestless\ncontext\ncontextive\ncontextual\ncontextually\ncontextural\ncontexture\ncontextured\nconticent\ncontignation\ncontiguity\ncontiguous\ncontiguously\ncontiguousness\ncontinence\ncontinency\ncontinent\ncontinental\nContinentaler\ncontinentalism\ncontinentalist\ncontinentality\nContinentalize\ncontinentally\ncontinently\ncontingence\ncontingency\ncontingent\ncontingential\ncontingentialness\ncontingently\ncontingentness\ncontinuable\ncontinual\ncontinuality\ncontinually\ncontinualness\ncontinuance\ncontinuancy\ncontinuando\ncontinuant\ncontinuantly\ncontinuate\ncontinuately\ncontinuateness\ncontinuation\ncontinuative\ncontinuatively\ncontinuativeness\ncontinuator\ncontinue\ncontinued\ncontinuedly\ncontinuedness\ncontinuer\ncontinuingly\ncontinuist\ncontinuity\ncontinuous\ncontinuously\ncontinuousness\ncontinuum\ncontise\ncontline\nconto\ncontorniate\ncontorsive\ncontort\nContortae\ncontorted\ncontortedly\ncontortedness\ncontortion\ncontortional\ncontortionate\ncontortioned\ncontortionist\ncontortionistic\ncontortive\ncontour\ncontourne\ncontra\ncontraband\ncontrabandage\ncontrabandery\ncontrabandism\ncontrabandist\ncontrabandista\ncontrabass\ncontrabassist\ncontrabasso\ncontracapitalist\ncontraception\ncontraceptionist\ncontraceptive\ncontracivil\ncontraclockwise\ncontract\ncontractable\ncontractant\ncontractation\ncontracted\ncontractedly\ncontractedness\ncontractee\ncontracter\ncontractibility\ncontractible\ncontractibleness\ncontractibly\ncontractile\ncontractility\ncontraction\ncontractional\ncontractionist\ncontractive\ncontractively\ncontractiveness\ncontractor\ncontractual\ncontractually\ncontracture\ncontractured\ncontradebt\ncontradict\ncontradictable\ncontradictedness\ncontradicter\ncontradiction\ncontradictional\ncontradictious\ncontradictiously\ncontradictiousness\ncontradictive\ncontradictively\ncontradictiveness\ncontradictor\ncontradictorily\ncontradictoriness\ncontradictory\ncontradiscriminate\ncontradistinct\ncontradistinction\ncontradistinctive\ncontradistinctively\ncontradistinctly\ncontradistinguish\ncontradivide\ncontrafacture\ncontrafagotto\ncontrafissura\ncontraflexure\ncontraflow\ncontrafocal\ncontragredience\ncontragredient\ncontrahent\ncontrail\ncontraindicate\ncontraindication\ncontraindicative\ncontralateral\ncontralto\ncontramarque\ncontranatural\ncontrantiscion\ncontraoctave\ncontraparallelogram\ncontraplex\ncontrapolarization\ncontrapone\ncontraponend\nContraposaune\ncontrapose\ncontraposit\ncontraposita\ncontraposition\ncontrapositive\ncontraprogressist\ncontraprop\ncontraproposal\ncontraption\ncontraptious\ncontrapuntal\ncontrapuntalist\ncontrapuntally\ncontrapuntist\ncontrapunto\ncontrarational\ncontraregular\ncontraregularity\ncontraremonstrance\ncontraremonstrant\ncontrarevolutionary\ncontrariant\ncontrariantly\ncontrariety\ncontrarily\ncontrariness\ncontrarious\ncontrariously\ncontrariousness\ncontrariwise\ncontrarotation\ncontrary\ncontrascriptural\ncontrast\ncontrastable\ncontrastably\ncontrastedly\ncontrastimulant\ncontrastimulation\ncontrastimulus\ncontrastingly\ncontrastive\ncontrastively\ncontrastment\ncontrasty\ncontrasuggestible\ncontratabular\ncontrate\ncontratempo\ncontratenor\ncontravalence\ncontravallation\ncontravariant\ncontravene\ncontravener\ncontravention\ncontraversion\ncontravindicate\ncontravindication\ncontrawise\ncontrayerva\ncontrectation\ncontreface\ncontrefort\ncontretemps\ncontributable\ncontribute\ncontribution\ncontributional\ncontributive\ncontributively\ncontributiveness\ncontributor\ncontributorial\ncontributorship\ncontributory\ncontrite\ncontritely\ncontriteness\ncontrition\ncontriturate\ncontrivance\ncontrivancy\ncontrive\ncontrivement\ncontriver\ncontrol\ncontrollability\ncontrollable\ncontrollableness\ncontrollably\ncontroller\ncontrollership\ncontrolless\ncontrollingly\ncontrolment\ncontroversial\ncontroversialism\ncontroversialist\ncontroversialize\ncontroversially\ncontroversion\ncontroversional\ncontroversionalism\ncontroversionalist\ncontroversy\ncontrovert\ncontroverter\ncontrovertible\ncontrovertibly\ncontrovertist\ncontubernal\ncontubernial\ncontubernium\ncontumacious\ncontumaciously\ncontumaciousness\ncontumacity\ncontumacy\ncontumelious\ncontumeliously\ncontumeliousness\ncontumely\ncontund\nconturbation\ncontuse\ncontusion\ncontusioned\ncontusive\nconubium\nConularia\nconumerary\nconumerous\nconundrum\nconundrumize\nconurbation\nconure\nConuropsis\nConurus\nconus\nconusable\nconusance\nconusant\nconusee\nconusor\nconutrition\nconuzee\nconuzor\nconvalesce\nconvalescence\nconvalescency\nconvalescent\nconvalescently\nconvallamarin\nConvallaria\nConvallariaceae\nconvallariaceous\nconvallarin\nconvect\nconvection\nconvectional\nconvective\nconvectively\nconvector\nconvenable\nconvenably\nconvene\nconvenee\nconvener\nconvenership\nconvenience\nconveniency\nconvenient\nconveniently\nconvenientness\nconvent\nconventical\nconventically\nconventicle\nconventicler\nconventicular\nconvention\nconventional\nconventionalism\nconventionalist\nconventionality\nconventionalization\nconventionalize\nconventionally\nconventionary\nconventioner\nconventionism\nconventionist\nconventionize\nconventual\nconventually\nconverge\nconvergement\nconvergence\nconvergency\nconvergent\nconvergescence\nconverging\nconversable\nconversableness\nconversably\nconversance\nconversancy\nconversant\nconversantly\nconversation\nconversationable\nconversational\nconversationalist\nconversationally\nconversationism\nconversationist\nconversationize\nconversative\nconverse\nconversely\nconverser\nconversibility\nconversible\nconversion\nconversional\nconversionism\nconversionist\nconversive\nconvert\nconverted\nconvertend\nconverter\nconvertibility\nconvertible\nconvertibleness\nconvertibly\nconverting\nconvertingness\nconvertise\nconvertism\nconvertite\nconvertive\nconvertor\nconveth\nconvex\nconvexed\nconvexedly\nconvexedness\nconvexity\nconvexly\nconvexness\nconvey\nconveyable\nconveyal\nconveyance\nconveyancer\nconveyancing\nconveyer\nconvict\nconvictable\nconviction\nconvictional\nconvictism\nconvictive\nconvictively\nconvictiveness\nconvictment\nconvictor\nconvince\nconvinced\nconvincedly\nconvincedness\nconvincement\nconvincer\nconvincibility\nconvincible\nconvincing\nconvincingly\nconvincingness\nconvival\nconvive\nconvivial\nconvivialist\nconviviality\nconvivialize\nconvivially\nconvocant\nconvocate\nconvocation\nconvocational\nconvocationally\nconvocationist\nconvocative\nconvocator\nconvoke\nconvoker\nConvoluta\nconvolute\nconvoluted\nconvolutely\nconvolution\nconvolutional\nconvolutionary\nconvolutive\nconvolve\nconvolvement\nConvolvulaceae\nconvolvulaceous\nconvolvulad\nconvolvuli\nconvolvulic\nconvolvulin\nconvolvulinic\nconvolvulinolic\nConvolvulus\nconvoy\nconvulsant\nconvulse\nconvulsedly\nconvulsibility\nconvulsible\nconvulsion\nconvulsional\nconvulsionary\nconvulsionism\nconvulsionist\nconvulsive\nconvulsively\nconvulsiveness\ncony\nconycatcher\nconyrine\ncoo\ncooba\ncoodle\ncooee\ncooer\ncoof\nCoohee\ncooing\ncooingly\ncooja\ncook\ncookable\ncookbook\ncookdom\ncookee\ncookeite\ncooker\ncookery\ncookhouse\ncooking\ncookish\ncookishly\ncookless\ncookmaid\ncookout\ncookroom\ncookshack\ncookshop\ncookstove\ncooky\ncool\ncoolant\ncoolen\ncooler\ncoolerman\ncoolheaded\ncoolheadedly\ncoolheadedness\ncoolhouse\ncoolibah\ncoolie\ncooling\ncoolingly\ncoolingness\ncoolish\ncoolly\ncoolness\ncoolth\ncoolung\ncoolweed\ncoolwort\ncooly\ncoom\ncoomb\ncoomy\ncoon\ncooncan\ncoonily\ncooniness\ncoonroot\ncoonskin\ncoontail\ncoontie\ncoony\ncoop\ncooper\ncooperage\nCooperia\ncoopering\ncoopery\ncooree\nCoorg\ncoorie\ncooruptibly\nCoos\ncooser\ncoost\nCoosuc\ncoot\ncooter\ncootfoot\ncoothay\ncootie\ncop\ncopa\ncopable\ncopacetic\ncopaene\ncopaiba\ncopaibic\nCopaifera\nCopaiva\ncopaivic\ncopaiye\ncopal\ncopalche\ncopalcocote\ncopaliferous\ncopalite\ncopalm\ncoparallel\ncoparcenary\ncoparcener\ncoparceny\ncoparent\ncopart\ncopartaker\ncopartner\ncopartnership\ncopartnery\ncoparty\ncopassionate\ncopastor\ncopastorate\ncopatain\ncopatentee\ncopatriot\ncopatron\ncopatroness\ncope\nCopehan\ncopei\nCopelata\nCopelatae\ncopelate\ncopellidine\ncopeman\ncopemate\ncopen\ncopending\ncopenetrate\nCopeognatha\ncopepod\nCopepoda\ncopepodan\ncopepodous\ncoper\ncoperception\ncoperiodic\nCopernican\nCopernicanism\nCopernicia\ncoperta\ncopesman\ncopesmate\ncopestone\ncopetitioner\ncophasal\nCophetua\ncophosis\ncopiability\ncopiable\ncopiapite\ncopied\ncopier\ncopilot\ncoping\ncopiopia\ncopiopsia\ncopiosity\ncopious\ncopiously\ncopiousness\ncopis\ncopist\ncopita\ncoplaintiff\ncoplanar\ncoplanarity\ncopleased\ncoplotter\ncoploughing\ncoplowing\ncopolar\ncopolymer\ncopolymerization\ncopolymerize\ncoppaelite\ncopped\ncopper\ncopperas\ncopperbottom\ncopperer\ncopperhead\ncopperheadism\ncoppering\ncopperish\ncopperization\ncopperize\ncopperleaf\ncoppernose\ncoppernosed\ncopperplate\ncopperproof\ncoppersidesman\ncopperskin\ncoppersmith\ncoppersmithing\ncopperware\ncopperwing\ncopperworks\ncoppery\ncopperytailed\ncoppet\ncoppice\ncoppiced\ncoppicing\ncoppin\ncopping\ncopple\ncopplecrown\ncoppled\ncoppy\ncopr\ncopra\ncoprecipitate\ncoprecipitation\ncopremia\ncopremic\ncopresbyter\ncopresence\ncopresent\nCoprides\nCoprinae\ncoprincipal\ncoprincipate\nCoprinus\ncoprisoner\ncoprodaeum\ncoproduce\ncoproducer\ncoprojector\ncoprolagnia\ncoprolagnist\ncoprolalia\ncoprolaliac\ncoprolite\ncoprolith\ncoprolitic\ncoprology\ncopromisor\ncopromoter\ncoprophagan\ncoprophagia\ncoprophagist\ncoprophagous\ncoprophagy\ncoprophilia\ncoprophiliac\ncoprophilic\ncoprophilism\ncoprophilous\ncoprophyte\ncoproprietor\ncoproprietorship\ncoprose\nCoprosma\ncoprostasis\ncoprosterol\ncoprozoic\ncopse\ncopsewood\ncopsewooded\ncopsing\ncopsy\nCopt\ncopter\nCoptic\nCoptis\ncopula\ncopulable\ncopular\ncopularium\ncopulate\ncopulation\ncopulative\ncopulatively\ncopulatory\ncopunctal\ncopurchaser\ncopus\ncopy\ncopybook\ncopycat\ncopygraph\ncopygraphed\ncopyhold\ncopyholder\ncopyholding\ncopyism\ncopyist\ncopyman\ncopyreader\ncopyright\ncopyrightable\ncopyrighter\ncopywise\ncoque\ncoquecigrue\ncoquelicot\ncoqueluche\ncoquet\ncoquetoon\ncoquetry\ncoquette\ncoquettish\ncoquettishly\ncoquettishness\ncoquicken\ncoquilla\nCoquille\ncoquille\ncoquimbite\ncoquina\ncoquita\nCoquitlam\ncoquito\ncor\nCora\ncora\nCorabeca\nCorabecan\ncorach\nCoraciae\ncoracial\nCoracias\nCoracii\nCoraciidae\ncoraciiform\nCoraciiformes\ncoracine\ncoracle\ncoracler\ncoracoacromial\ncoracobrachial\ncoracobrachialis\ncoracoclavicular\ncoracocostal\ncoracohumeral\ncoracohyoid\ncoracoid\ncoracoidal\ncoracomandibular\ncoracomorph\nCoracomorphae\ncoracomorphic\ncoracopectoral\ncoracoprocoracoid\ncoracoradialis\ncoracoscapular\ncoracovertebral\ncoradical\ncoradicate\ncorah\ncoraise\ncoral\ncoralberry\ncoralbush\ncoraled\ncoralflower\ncoralist\ncorallet\nCorallian\ncorallic\nCorallidae\ncorallidomous\ncoralliferous\ncoralliform\nCoralligena\ncoralligenous\ncoralligerous\ncorallike\nCorallina\nCorallinaceae\ncorallinaceous\ncoralline\ncorallite\nCorallium\ncoralloid\ncoralloidal\nCorallorhiza\ncorallum\nCorallus\ncoralroot\ncoralwort\ncoram\nCorambis\ncoranto\ncorban\ncorbeau\ncorbeil\ncorbel\ncorbeling\ncorbicula\ncorbiculate\ncorbiculum\ncorbie\ncorbiestep\ncorbovinum\ncorbula\ncorcass\nCorchorus\ncorcir\ncorcopali\nCorcyraean\ncord\ncordage\nCordaitaceae\ncordaitaceous\ncordaitalean\nCordaitales\ncordaitean\nCordaites\ncordant\ncordate\ncordately\ncordax\nCordeau\ncorded\ncordel\nCordelia\nCordelier\ncordeliere\ncordelle\ncorder\nCordery\ncordewane\nCordia\ncordial\ncordiality\ncordialize\ncordially\ncordialness\ncordiceps\ncordicole\ncordierite\ncordies\ncordiform\ncordigeri\ncordillera\ncordilleran\ncordiner\ncording\ncordite\ncorditis\ncordleaf\ncordmaker\ncordoba\ncordon\ncordonnet\nCordovan\nCordula\ncorduroy\ncorduroyed\ncordwain\ncordwainer\ncordwainery\ncordwood\ncordy\nCordyceps\ncordyl\nCordylanthus\nCordyline\ncore\ncorebel\ncoreceiver\ncoreciprocal\ncorectome\ncorectomy\ncorector\ncored\ncoredeem\ncoredeemer\ncoredemptress\ncoreductase\nCoree\ncoreflexed\ncoregence\ncoregency\ncoregent\ncoregnancy\ncoregnant\ncoregonid\nCoregonidae\ncoregonine\ncoregonoid\nCoregonus\ncoreid\nCoreidae\ncoreign\ncoreigner\ncorejoice\ncoreless\ncoreligionist\ncorella\ncorelysis\nCorema\ncoremaker\ncoremaking\ncoremium\ncoremorphosis\ncorenounce\ncoreometer\nCoreopsis\ncoreplastic\ncoreplasty\ncorer\ncoresidence\ncoresidual\ncoresign\ncoresonant\ncoresort\ncorespect\ncorespondency\ncorespondent\ncoretomy\ncoreveler\ncoreveller\ncorevolve\nCorey\ncorf\nCorfiote\nCorflambo\ncorge\ncorgi\ncoriaceous\ncorial\ncoriamyrtin\ncoriander\ncoriandrol\nCoriandrum\nCoriaria\nCoriariaceae\ncoriariaceous\ncoriin\nCorimelaena\nCorimelaenidae\nCorin\ncorindon\nCorineus\ncoring\nCorinna\ncorinne\nCorinth\nCorinthian\nCorinthianesque\nCorinthianism\nCorinthianize\nCoriolanus\ncoriparian\ncorium\nCorixa\nCorixidae\ncork\ncorkage\ncorkboard\ncorke\ncorked\ncorker\ncorkiness\ncorking\ncorkish\ncorkite\ncorkmaker\ncorkmaking\ncorkscrew\ncorkscrewy\ncorkwing\ncorkwood\ncorky\ncorm\nCormac\ncormel\ncormidium\ncormoid\nCormophyta\ncormophyte\ncormophytic\ncormorant\ncormous\ncormus\ncorn\nCornaceae\ncornaceous\ncornage\ncornbell\ncornberry\ncornbin\ncornbinks\ncornbird\ncornbole\ncornbottle\ncornbrash\ncorncake\ncorncob\ncorncracker\ncorncrib\ncorncrusher\ncorndodger\ncornea\ncorneagen\ncorneal\ncornein\ncorneitis\ncornel\nCornelia\ncornelian\nCornelius\ncornemuse\ncorneocalcareous\ncorneosclerotic\ncorneosiliceous\ncorneous\ncorner\ncornerbind\ncornered\ncornerer\ncornerpiece\ncornerstone\ncornerways\ncornerwise\ncornet\ncornetcy\ncornettino\ncornettist\ncorneule\ncorneum\ncornfield\ncornfloor\ncornflower\ncorngrower\ncornhouse\ncornhusk\ncornhusker\ncornhusking\ncornic\ncornice\ncornicle\ncorniculate\ncorniculer\ncorniculum\nCorniferous\ncornific\ncornification\ncornified\ncorniform\ncornigerous\ncornin\ncorning\ncorniplume\nCornish\nCornishman\ncornland\ncornless\ncornloft\ncornmaster\ncornmonger\ncornopean\ncornpipe\ncornrick\ncornroot\ncornstalk\ncornstarch\ncornstook\ncornu\ncornual\ncornuate\ncornuated\ncornubianite\ncornucopia\nCornucopiae\ncornucopian\ncornucopiate\ncornule\ncornulite\nCornulites\ncornupete\nCornus\ncornute\ncornuted\ncornutine\ncornuto\ncornwallis\ncornwallite\ncorny\ncoroa\nCoroado\ncorocleisis\ncorodiary\ncorodiastasis\ncorodiastole\ncorody\ncorol\ncorolla\ncorollaceous\ncorollarial\ncorollarially\ncorollary\ncorollate\ncorollated\ncorolliferous\ncorolliform\ncorollike\ncorolline\ncorollitic\ncorometer\ncorona\ncoronach\ncoronad\ncoronadite\ncoronae\ncoronagraph\ncoronagraphic\ncoronal\ncoronale\ncoronaled\ncoronally\ncoronamen\ncoronary\ncoronate\ncoronated\ncoronation\ncoronatorial\ncoroner\ncoronership\ncoronet\ncoroneted\ncoronetted\ncoronetty\ncoroniform\nCoronilla\ncoronillin\ncoronion\ncoronitis\ncoronium\ncoronize\ncoronobasilar\ncoronofacial\ncoronofrontal\ncoronoid\nCoronopus\ncoronule\ncoroparelcysis\ncoroplast\ncoroplasta\ncoroplastic\nCoropo\ncoroscopy\ncorotomy\ncorozo\ncorp\ncorpora\ncorporal\ncorporalism\ncorporality\ncorporally\ncorporalship\ncorporas\ncorporate\ncorporately\ncorporateness\ncorporation\ncorporational\ncorporationer\ncorporationism\ncorporative\ncorporator\ncorporature\ncorporeal\ncorporealist\ncorporeality\ncorporealization\ncorporealize\ncorporeally\ncorporealness\ncorporeals\ncorporeity\ncorporeous\ncorporification\ncorporify\ncorporosity\ncorposant\ncorps\ncorpsbruder\ncorpse\ncorpsman\ncorpulence\ncorpulency\ncorpulent\ncorpulently\ncorpulentness\ncorpus\ncorpuscle\ncorpuscular\ncorpuscularian\ncorpuscularity\ncorpusculated\ncorpuscule\ncorpusculous\ncorpusculum\ncorrade\ncorradial\ncorradiate\ncorradiation\ncorral\ncorrasion\ncorrasive\nCorrea\ncorreal\ncorreality\ncorrect\ncorrectable\ncorrectant\ncorrected\ncorrectedness\ncorrectible\ncorrecting\ncorrectingly\ncorrection\ncorrectional\ncorrectionalist\ncorrectioner\ncorrectitude\ncorrective\ncorrectively\ncorrectiveness\ncorrectly\ncorrectness\ncorrector\ncorrectorship\ncorrectress\ncorrectrice\ncorregidor\ncorrelatable\ncorrelate\ncorrelated\ncorrelation\ncorrelational\ncorrelative\ncorrelatively\ncorrelativeness\ncorrelativism\ncorrelativity\ncorreligionist\ncorrente\ncorreption\ncorresol\ncorrespond\ncorrespondence\ncorrespondency\ncorrespondent\ncorrespondential\ncorrespondentially\ncorrespondently\ncorrespondentship\ncorresponder\ncorresponding\ncorrespondingly\ncorresponsion\ncorresponsive\ncorresponsively\ncorridor\ncorridored\ncorrie\nCorriedale\ncorrige\ncorrigenda\ncorrigendum\ncorrigent\ncorrigibility\ncorrigible\ncorrigibleness\ncorrigibly\nCorrigiola\nCorrigiolaceae\ncorrival\ncorrivality\ncorrivalry\ncorrivalship\ncorrivate\ncorrivation\ncorrobboree\ncorroborant\ncorroborate\ncorroboration\ncorroborative\ncorroboratively\ncorroborator\ncorroboratorily\ncorroboratory\ncorroboree\ncorrode\ncorrodent\nCorrodentia\ncorroder\ncorrodiary\ncorrodibility\ncorrodible\ncorrodier\ncorroding\ncorrosibility\ncorrosible\ncorrosibleness\ncorrosion\ncorrosional\ncorrosive\ncorrosively\ncorrosiveness\ncorrosivity\ncorrugate\ncorrugated\ncorrugation\ncorrugator\ncorrupt\ncorrupted\ncorruptedly\ncorruptedness\ncorrupter\ncorruptful\ncorruptibility\ncorruptible\ncorruptibleness\ncorrupting\ncorruptingly\ncorruption\ncorruptionist\ncorruptive\ncorruptively\ncorruptly\ncorruptness\ncorruptor\ncorruptress\ncorsac\ncorsage\ncorsaint\ncorsair\ncorse\ncorselet\ncorsepresent\ncorsesque\ncorset\ncorseting\ncorsetless\ncorsetry\nCorsican\ncorsie\ncorsite\ncorta\nCortaderia\ncortege\nCortes\ncortex\ncortez\ncortical\ncortically\ncorticate\ncorticated\ncorticating\ncortication\ncortices\ncorticiferous\ncorticiform\ncorticifugal\ncorticifugally\ncorticipetal\ncorticipetally\nCorticium\ncorticoafferent\ncorticoefferent\ncorticoline\ncorticopeduncular\ncorticose\ncorticospinal\ncorticosterone\ncorticostriate\ncorticous\ncortin\ncortina\ncortinarious\nCortinarius\ncortinate\ncortisone\ncortlandtite\nCorton\ncoruco\ncoruler\nCoruminacan\ncorundophilite\ncorundum\ncorupay\ncoruscant\ncoruscate\ncoruscation\ncorver\ncorvette\ncorvetto\nCorvidae\ncorviform\ncorvillosum\ncorvina\nCorvinae\ncorvine\ncorvoid\nCorvus\nCory\nCorybant\nCorybantian\ncorybantiasm\nCorybantic\ncorybantic\nCorybantine\ncorybantish\ncorybulbin\ncorybulbine\ncorycavamine\ncorycavidin\ncorycavidine\ncorycavine\nCorycia\nCorycian\ncorydalin\ncorydaline\nCorydalis\ncorydine\nCorydon\ncoryl\nCorylaceae\ncorylaceous\ncorylin\nCorylopsis\nCorylus\ncorymb\ncorymbed\ncorymbiate\ncorymbiated\ncorymbiferous\ncorymbiform\ncorymbose\ncorymbous\ncorynebacterial\nCorynebacterium\nCoryneum\ncorynine\nCorynocarpaceae\ncorynocarpaceous\nCorynocarpus\nCorypha\nCoryphaena\ncoryphaenid\nCoryphaenidae\ncoryphaenoid\nCoryphaenoididae\ncoryphaeus\ncoryphee\ncoryphene\nCoryphodon\ncoryphodont\ncoryphylly\ncorytuberine\ncoryza\ncos\ncosalite\ncosaque\ncosavior\ncoscet\nCoscinodiscaceae\nCoscinodiscus\ncoscinomancy\ncoscoroba\ncoseasonal\ncoseat\ncosec\ncosecant\ncosech\ncosectarian\ncosectional\ncosegment\ncoseism\ncoseismal\ncoseismic\ncosenator\ncosentiency\ncosentient\ncoservant\ncosession\ncoset\ncosettler\ncosh\ncosharer\ncosheath\ncosher\ncosherer\ncoshering\ncoshery\ncosignatory\ncosigner\ncosignitary\ncosily\ncosinage\ncosine\ncosiness\ncosingular\ncosinusoid\nCosmati\ncosmecology\ncosmesis\ncosmetic\ncosmetical\ncosmetically\ncosmetician\ncosmetiste\ncosmetological\ncosmetologist\ncosmetology\ncosmic\ncosmical\ncosmicality\ncosmically\ncosmism\ncosmist\ncosmocracy\ncosmocrat\ncosmocratic\ncosmogenesis\ncosmogenetic\ncosmogenic\ncosmogeny\ncosmogonal\ncosmogoner\ncosmogonic\ncosmogonical\ncosmogonist\ncosmogonize\ncosmogony\ncosmographer\ncosmographic\ncosmographical\ncosmographically\ncosmographist\ncosmography\ncosmolabe\ncosmolatry\ncosmologic\ncosmological\ncosmologically\ncosmologist\ncosmology\ncosmometry\ncosmopathic\ncosmoplastic\ncosmopoietic\ncosmopolicy\ncosmopolis\ncosmopolitan\ncosmopolitanism\ncosmopolitanization\ncosmopolitanize\ncosmopolitanly\ncosmopolite\ncosmopolitic\ncosmopolitical\ncosmopolitics\ncosmopolitism\ncosmorama\ncosmoramic\ncosmorganic\ncosmos\ncosmoscope\ncosmosophy\ncosmosphere\ncosmotellurian\ncosmotheism\ncosmotheist\ncosmotheistic\ncosmothetic\ncosmotron\ncosmozoan\ncosmozoic\ncosmozoism\ncosonant\ncosounding\ncosovereign\ncosovereignty\ncospecies\ncospecific\ncosphered\ncosplendor\ncosplendour\ncoss\nCossack\nCossaean\ncossas\ncosse\ncosset\ncossette\ncossid\nCossidae\ncossnent\ncossyrite\ncost\ncosta\nCostaea\ncostal\ncostalgia\ncostally\ncostander\nCostanoan\ncostar\ncostard\nCostata\ncostate\ncostated\ncostean\ncosteaning\ncostectomy\ncostellate\ncoster\ncosterdom\ncostermonger\ncosticartilage\ncosticartilaginous\ncosticervical\ncostiferous\ncostiform\ncosting\ncostipulator\ncostispinal\ncostive\ncostively\ncostiveness\ncostless\ncostlessness\ncostliness\ncostly\ncostmary\ncostoabdominal\ncostoapical\ncostocentral\ncostochondral\ncostoclavicular\ncostocolic\ncostocoracoid\ncostodiaphragmatic\ncostogenic\ncostoinferior\ncostophrenic\ncostopleural\ncostopneumopexy\ncostopulmonary\ncostoscapular\ncostosternal\ncostosuperior\ncostothoracic\ncostotome\ncostotomy\ncostotrachelian\ncostotransversal\ncostotransverse\ncostovertebral\ncostoxiphoid\ncostraight\ncostrel\ncostula\ncostulation\ncostume\ncostumer\ncostumery\ncostumic\ncostumier\ncostumiere\ncostuming\ncostumist\ncostusroot\ncosubject\ncosubordinate\ncosuffer\ncosufferer\ncosuggestion\ncosuitor\ncosurety\ncosustain\ncoswearer\ncosy\ncosymmedian\ncot\ncotangent\ncotangential\ncotarius\ncotarnine\ncotch\ncote\ncoteful\ncoteline\ncoteller\ncotemporane\ncotemporanean\ncotemporaneous\ncotemporaneously\ncotemporary\ncotenancy\ncotenant\ncotenure\ncoterell\ncoterie\ncoterminous\nCotesian\ncoth\ncothamore\ncothe\ncotheorist\ncothish\ncothon\ncothurn\ncothurnal\ncothurnate\ncothurned\ncothurnian\ncothurnus\ncothy\ncotidal\ncotillage\ncotillion\nCotinga\ncotingid\nCotingidae\ncotingoid\nCotinus\ncotise\ncotitular\ncotland\ncotman\ncoto\ncotoin\nCotonam\nCotoneaster\ncotonier\ncotorment\ncotoro\ncotorture\nCotoxo\ncotquean\ncotraitor\ncotransfuse\ncotranslator\ncotranspire\ncotransubstantiate\ncotrine\ncotripper\ncotrustee\ncotset\ncotsetla\ncotsetle\ncotta\ncottabus\ncottage\ncottaged\ncottager\ncottagers\ncottagey\ncotte\ncotted\ncotter\ncotterel\ncotterite\ncotterway\ncottid\nCottidae\ncottier\ncottierism\ncottiform\ncottoid\ncotton\ncottonade\ncottonbush\ncottonee\ncottoneer\ncottoner\nCottonian\ncottonization\ncottonize\ncottonless\ncottonmouth\ncottonocracy\nCottonopolis\ncottonseed\ncottontail\ncottontop\ncottonweed\ncottonwood\ncottony\nCottus\ncotty\ncotuit\ncotula\ncotunnite\nCoturnix\ncotutor\ncotwin\ncotwinned\ncotwist\ncotyla\ncotylar\ncotyledon\ncotyledonal\ncotyledonar\ncotyledonary\ncotyledonous\ncotyliform\ncotyligerous\ncotyliscus\ncotyloid\nCotylophora\ncotylophorous\ncotylopubic\ncotylosacral\ncotylosaur\nCotylosauria\ncotylosaurian\ncotype\nCotys\nCotyttia\ncouac\ncoucal\ncouch\ncouchancy\ncouchant\ncouched\ncouchee\ncoucher\ncouching\ncouchmaker\ncouchmaking\ncouchmate\ncouchy\ncoude\ncoudee\ncoue\nCoueism\ncougar\ncough\ncougher\ncoughroot\ncoughweed\ncoughwort\ncougnar\ncoul\ncould\ncouldron\ncoulee\ncoulisse\ncoulomb\ncoulometer\ncoulterneb\ncoulure\ncouma\ncoumalic\ncoumalin\ncoumara\ncoumaran\ncoumarate\ncoumaric\ncoumarilic\ncoumarin\ncoumarinic\ncoumarone\ncoumarou\nCoumarouna\ncouncil\ncouncilist\ncouncilman\ncouncilmanic\ncouncilor\ncouncilorship\ncouncilwoman\ncounderstand\ncounite\ncouniversal\ncounsel\ncounselable\ncounselee\ncounselful\ncounselor\ncounselorship\ncount\ncountable\ncountableness\ncountably\ncountdom\ncountenance\ncountenancer\ncounter\ncounterabut\ncounteraccusation\ncounteracquittance\ncounteract\ncounteractant\ncounteracter\ncounteracting\ncounteractingly\ncounteraction\ncounteractive\ncounteractively\ncounteractivity\ncounteractor\ncounteraddress\ncounteradvance\ncounteradvantage\ncounteradvice\ncounteradvise\ncounteraffirm\ncounteraffirmation\ncounteragency\ncounteragent\ncounteragitate\ncounteragitation\ncounteralliance\ncounterambush\ncounterannouncement\ncounteranswer\ncounterappeal\ncounterappellant\ncounterapproach\ncounterapse\ncounterarch\ncounterargue\ncounterargument\ncounterartillery\ncounterassertion\ncounterassociation\ncounterassurance\ncounterattack\ncounterattestation\ncounterattired\ncounterattraction\ncounterattractive\ncounterattractively\ncounteraverment\ncounteravouch\ncounteravouchment\ncounterbalance\ncounterbarrage\ncounterbase\ncounterbattery\ncounterbeating\ncounterbend\ncounterbewitch\ncounterbid\ncounterblast\ncounterblow\ncounterbond\ncounterborder\ncounterbore\ncounterboycott\ncounterbrace\ncounterbranch\ncounterbrand\ncounterbreastwork\ncounterbuff\ncounterbuilding\ncountercampaign\ncountercarte\ncountercause\ncounterchange\ncounterchanged\ncountercharge\ncountercharm\ncountercheck\ncountercheer\ncounterclaim\ncounterclaimant\ncounterclockwise\ncountercolored\ncountercommand\ncountercompetition\ncountercomplaint\ncountercompony\ncountercondemnation\ncounterconquest\ncounterconversion\ncountercouchant\ncountercoupe\ncountercourant\ncountercraft\ncountercriticism\ncountercross\ncountercry\ncountercurrent\ncountercurrently\ncountercurrentwise\ncounterdance\ncounterdash\ncounterdecision\ncounterdeclaration\ncounterdecree\ncounterdefender\ncounterdemand\ncounterdemonstration\ncounterdeputation\ncounterdesire\ncounterdevelopment\ncounterdifficulty\ncounterdigged\ncounterdike\ncounterdiscipline\ncounterdisengage\ncounterdisengagement\ncounterdistinction\ncounterdistinguish\ncounterdoctrine\ncounterdogmatism\ncounterdraft\ncounterdrain\ncounterdrive\ncounterearth\ncounterefficiency\ncountereffort\ncounterembattled\ncounterembowed\ncounterenamel\ncounterend\ncounterenergy\ncounterengagement\ncounterengine\ncounterenthusiasm\ncounterentry\ncounterequivalent\ncounterermine\ncounterespionage\ncounterestablishment\ncounterevidence\ncounterexaggeration\ncounterexcitement\ncounterexcommunication\ncounterexercise\ncounterexplanation\ncounterexposition\ncounterexpostulation\ncounterextend\ncounterextension\ncounterfact\ncounterfallacy\ncounterfaller\ncounterfeit\ncounterfeiter\ncounterfeitly\ncounterfeitment\ncounterfeitness\ncounterferment\ncounterfessed\ncounterfire\ncounterfix\ncounterflange\ncounterflashing\ncounterflight\ncounterflory\ncounterflow\ncounterflux\ncounterfoil\ncounterforce\ncounterformula\ncounterfort\ncounterfugue\ncountergabble\ncountergabion\ncountergambit\ncountergarrison\ncountergauge\ncountergauger\ncountergift\ncountergirded\ncounterglow\ncounterguard\ncounterhaft\ncounterhammering\ncounterhypothesis\ncounteridea\ncounterideal\ncounterimagination\ncounterimitate\ncounterimitation\ncounterimpulse\ncounterindentation\ncounterindented\ncounterindicate\ncounterindication\ncounterinfluence\ncounterinsult\ncounterintelligence\ncounterinterest\ncounterinterpretation\ncounterintrigue\ncounterinvective\ncounterirritant\ncounterirritate\ncounterirritation\ncounterjudging\ncounterjumper\ncounterlath\ncounterlathing\ncounterlatration\ncounterlaw\ncounterleague\ncounterlegislation\ncounterlife\ncounterlocking\ncounterlode\ncounterlove\ncounterly\ncountermachination\ncounterman\ncountermand\ncountermandable\ncountermaneuver\ncountermanifesto\ncountermarch\ncountermark\ncountermarriage\ncountermeasure\ncountermeet\ncountermessage\ncountermigration\ncountermine\ncountermission\ncountermotion\ncountermount\ncountermove\ncountermovement\ncountermure\ncountermutiny\ncounternaiant\ncounternarrative\ncounternatural\ncounternecromancy\ncounternoise\ncounternotice\ncounterobjection\ncounterobligation\ncounteroffensive\ncounteroffer\ncounteropening\ncounteropponent\ncounteropposite\ncounterorator\ncounterorder\ncounterorganization\ncounterpaled\ncounterpaly\ncounterpane\ncounterpaned\ncounterparadox\ncounterparallel\ncounterparole\ncounterparry\ncounterpart\ncounterpassant\ncounterpassion\ncounterpenalty\ncounterpendent\ncounterpetition\ncounterpicture\ncounterpillar\ncounterplan\ncounterplay\ncounterplayer\ncounterplea\ncounterplead\ncounterpleading\ncounterplease\ncounterplot\ncounterpoint\ncounterpointe\ncounterpointed\ncounterpoise\ncounterpoison\ncounterpole\ncounterponderate\ncounterpose\ncounterposition\ncounterposting\ncounterpotence\ncounterpotency\ncounterpotent\ncounterpractice\ncounterpray\ncounterpreach\ncounterpreparation\ncounterpressure\ncounterprick\ncounterprinciple\ncounterprocess\ncounterproject\ncounterpronunciamento\ncounterproof\ncounterpropaganda\ncounterpropagandize\ncounterprophet\ncounterproposal\ncounterproposition\ncounterprotection\ncounterprotest\ncounterprove\ncounterpull\ncounterpunch\ncounterpuncture\ncounterpush\ncounterquartered\ncounterquarterly\ncounterquery\ncounterquestion\ncounterquip\ncounterradiation\ncounterraid\ncounterraising\ncounterrampant\ncounterrate\ncounterreaction\ncounterreason\ncounterreckoning\ncounterrecoil\ncounterreconnaissance\ncounterrefer\ncounterreflected\ncounterreform\ncounterreformation\ncounterreligion\ncounterremonstrant\ncounterreply\ncounterreprisal\ncounterresolution\ncounterrestoration\ncounterretreat\ncounterrevolution\ncounterrevolutionary\ncounterrevolutionist\ncounterrevolutionize\ncounterriposte\ncounterroll\ncounterround\ncounterruin\ncountersale\ncountersalient\ncounterscale\ncounterscalloped\ncounterscarp\ncounterscoff\ncountersconce\ncounterscrutiny\ncountersea\ncounterseal\ncountersecure\ncountersecurity\ncounterselection\ncountersense\ncounterservice\ncountershade\ncountershaft\ncountershafting\ncountershear\ncountershine\ncountershout\ncounterside\ncountersiege\ncountersign\ncountersignal\ncountersignature\ncountersink\ncountersleight\ncounterslope\ncountersmile\ncountersnarl\ncounterspying\ncounterstain\ncounterstamp\ncounterstand\ncounterstatant\ncounterstatement\ncounterstatute\ncounterstep\ncounterstimulate\ncounterstimulation\ncounterstimulus\ncounterstock\ncounterstratagem\ncounterstream\ncounterstrike\ncounterstroke\ncounterstruggle\ncountersubject\ncountersuggestion\ncountersuit\ncountersun\ncountersunk\ncountersurprise\ncounterswing\ncountersworn\ncountersympathy\ncountersynod\ncountertack\ncountertail\ncountertally\ncountertaste\ncountertechnicality\ncountertendency\ncountertenor\ncounterterm\ncounterterror\ncountertheme\ncountertheory\ncounterthought\ncounterthreat\ncounterthrust\ncounterthwarting\ncountertierce\ncountertime\ncountertouch\ncountertraction\ncountertrades\ncountertransference\ncountertranslation\ncountertraverse\ncountertreason\ncountertree\ncountertrench\ncountertrespass\ncountertrippant\ncountertripping\ncountertruth\ncountertug\ncounterturn\ncounterturned\ncountertype\ncountervail\ncountervair\ncountervairy\ncountervallation\ncountervaunt\ncountervene\ncountervengeance\ncountervenom\ncountervibration\ncounterview\ncountervindication\ncountervolition\ncountervolley\ncountervote\ncounterwager\ncounterwall\ncounterwarmth\ncounterwave\ncounterweigh\ncounterweight\ncounterweighted\ncounterwheel\ncounterwill\ncounterwilling\ncounterwind\ncounterwitness\ncounterword\ncounterwork\ncounterworker\ncounterwrite\ncountess\ncountfish\ncounting\ncountinghouse\ncountless\ncountor\ncountrified\ncountrifiedness\ncountry\ncountryfolk\ncountryman\ncountrypeople\ncountryseat\ncountryside\ncountryward\ncountrywoman\ncountship\ncounty\ncoup\ncoupage\ncoupe\ncouped\ncoupee\ncoupelet\ncouper\ncouple\ncoupled\ncouplement\ncoupler\ncoupleress\ncouplet\ncoupleteer\ncoupling\ncoupon\ncouponed\ncouponless\ncoupstick\ncoupure\ncourage\ncourageous\ncourageously\ncourageousness\ncourager\ncourant\ncourante\ncourap\ncouratari\ncourb\ncourbache\ncourbaril\ncourbash\ncourge\ncourida\ncourier\ncouril\ncourlan\nCours\ncourse\ncoursed\ncourser\ncoursing\ncourt\ncourtbred\ncourtcraft\ncourteous\ncourteously\ncourteousness\ncourtepy\ncourter\ncourtesan\ncourtesanry\ncourtesanship\ncourtesy\ncourtezanry\ncourtezanship\ncourthouse\ncourtier\ncourtierism\ncourtierly\ncourtiership\ncourtin\ncourtless\ncourtlet\ncourtlike\ncourtliness\ncourtling\ncourtly\ncourtman\nCourtney\ncourtroom\ncourtship\ncourtyard\ncourtzilite\ncouscous\ncouscousou\ncouseranite\ncousin\ncousinage\ncousiness\ncousinhood\ncousinly\ncousinry\ncousinship\ncousiny\ncoussinet\ncoustumier\ncoutel\ncoutelle\ncouter\nCoutet\ncouth\ncouthie\ncouthily\ncouthiness\ncouthless\ncoutil\ncoutumier\ncouvade\ncouxia\ncovado\ncovalence\ncovalent\nCovarecan\nCovarecas\ncovariable\ncovariance\ncovariant\ncovariation\ncovassal\ncove\ncoved\ncovelline\ncovellite\ncovenant\ncovenantal\ncovenanted\ncovenantee\nCovenanter\ncovenanter\ncovenanting\ncovenantor\ncovent\ncoventrate\ncoventrize\nCoventry\ncover\ncoverage\ncoveralls\ncoverchief\ncovercle\ncovered\ncoverer\ncovering\ncoverless\ncoverlet\ncoverlid\ncoversed\ncoverside\ncoversine\ncoverslut\ncovert\ncovertical\ncovertly\ncovertness\ncoverture\ncovet\ncovetable\ncoveter\ncoveting\ncovetingly\ncovetiveness\ncovetous\ncovetously\ncovetousness\ncovey\ncovibrate\ncovibration\ncovid\nCoviello\ncovillager\nCovillea\ncovin\ncoving\ncovinous\ncovinously\ncovisit\ncovisitor\ncovite\ncovolume\ncovotary\ncow\ncowal\nCowan\ncoward\ncowardice\ncowardliness\ncowardly\ncowardness\ncowardy\ncowbane\ncowbell\ncowberry\ncowbind\ncowbird\ncowboy\ncowcatcher\ncowdie\ncoween\ncower\ncowfish\ncowgate\ncowgram\ncowhage\ncowheart\ncowhearted\ncowheel\ncowherb\ncowherd\ncowhide\ncowhiding\ncowhorn\nCowichan\ncowish\ncowitch\ncowkeeper\ncowl\ncowle\ncowled\ncowleech\ncowleeching\ncowlick\ncowlicks\ncowlike\ncowling\nCowlitz\ncowlstaff\ncowman\ncowpath\ncowpea\ncowpen\nCowperian\ncowperitis\ncowpock\ncowpox\ncowpuncher\ncowquake\ncowrie\ncowroid\ncowshed\ncowskin\ncowslip\ncowslipped\ncowsucker\ncowtail\ncowthwort\ncowtongue\ncowweed\ncowwheat\ncowy\ncowyard\ncox\ncoxa\ncoxal\ncoxalgia\ncoxalgic\ncoxankylometer\ncoxarthritis\ncoxarthrocace\ncoxarthropathy\ncoxbones\ncoxcomb\ncoxcombess\ncoxcombhood\ncoxcombic\ncoxcombical\ncoxcombicality\ncoxcombically\ncoxcombity\ncoxcombry\ncoxcomby\ncoxcomical\ncoxcomically\ncoxite\ncoxitis\ncoxocerite\ncoxoceritic\ncoxodynia\ncoxofemoral\ncoxopodite\ncoxswain\ncoxy\ncoy\ncoyan\ncoydog\ncoyish\ncoyishness\ncoyly\ncoyness\ncoynye\ncoyo\ncoyol\ncoyote\nCoyotero\ncoyotillo\ncoyoting\ncoypu\ncoyure\ncoz\ncoze\ncozen\ncozenage\ncozener\ncozening\ncozeningly\ncozier\ncozily\ncoziness\ncozy\ncrab\ncrabbed\ncrabbedly\ncrabbedness\ncrabber\ncrabbery\ncrabbing\ncrabby\ncrabcatcher\ncrabeater\ncraber\ncrabhole\ncrablet\ncrablike\ncrabman\ncrabmill\ncrabsidle\ncrabstick\ncrabweed\ncrabwise\ncrabwood\nCracca\nCracidae\nCracinae\ncrack\ncrackable\ncrackajack\ncrackbrain\ncrackbrained\ncrackbrainedness\ncrackdown\ncracked\ncrackedness\ncracker\ncrackerberry\ncrackerjack\ncrackers\ncrackhemp\ncrackiness\ncracking\ncrackjaw\ncrackle\ncrackled\ncrackless\ncrackleware\ncrackling\ncrackly\ncrackmans\ncracknel\ncrackpot\ncrackskull\ncracksman\ncracky\ncracovienne\ncraddy\ncradge\ncradle\ncradleboard\ncradlechild\ncradlefellow\ncradleland\ncradlelike\ncradlemaker\ncradlemaking\ncradleman\ncradlemate\ncradler\ncradleside\ncradlesong\ncradletime\ncradling\nCradock\ncraft\ncraftily\ncraftiness\ncraftless\ncraftsman\ncraftsmanship\ncraftsmaster\ncraftswoman\ncraftwork\ncraftworker\ncrafty\ncrag\ncraggan\ncragged\ncraggedness\ncraggily\ncragginess\ncraggy\ncraglike\ncragsman\ncragwork\ncraichy\nCraig\ncraigmontite\ncrain\ncraisey\ncraizey\ncrajuru\ncrake\ncrakefeet\ncrakow\ncram\ncramasie\ncrambambulee\ncrambambuli\nCrambe\ncrambe\ncramberry\ncrambid\nCrambidae\nCrambinae\ncramble\ncrambly\ncrambo\nCrambus\ncrammer\ncramp\ncramped\ncrampedness\ncramper\ncrampet\ncrampfish\ncramping\ncrampingly\ncrampon\ncramponnee\ncrampy\ncran\ncranage\ncranberry\ncrance\ncrandall\ncrandallite\ncrane\ncranelike\ncraneman\ncraner\ncranesman\ncraneway\ncraney\nCrania\ncrania\ncraniacromial\ncraniad\ncranial\ncranially\ncranian\nCraniata\ncraniate\ncranic\ncraniectomy\ncraniocele\ncraniocerebral\ncranioclasis\ncranioclasm\ncranioclast\ncranioclasty\ncraniodidymus\ncraniofacial\ncraniognomic\ncraniognomy\ncraniognosy\ncraniograph\ncraniographer\ncraniography\ncraniological\ncraniologically\ncraniologist\ncraniology\ncraniomalacia\ncraniomaxillary\ncraniometer\ncraniometric\ncraniometrical\ncraniometrically\ncraniometrist\ncraniometry\ncraniopagus\ncraniopathic\ncraniopathy\ncraniopharyngeal\ncraniophore\ncranioplasty\ncraniopuncture\ncraniorhachischisis\ncraniosacral\ncranioschisis\ncranioscopical\ncranioscopist\ncranioscopy\ncraniospinal\ncraniostenosis\ncraniostosis\nCraniota\ncraniotabes\ncraniotome\ncraniotomy\ncraniotopography\ncraniotympanic\ncraniovertebral\ncranium\ncrank\ncrankbird\ncrankcase\ncranked\ncranker\ncrankery\ncrankily\ncrankiness\ncrankle\ncrankless\ncrankly\ncrankman\ncrankous\ncrankpin\ncrankshaft\ncrankum\ncranky\ncrannage\ncrannied\ncrannock\ncrannog\ncrannoger\ncranny\ncranreuch\ncrantara\ncrants\ncrap\ncrapaud\ncrapaudine\ncrape\ncrapefish\ncrapehanger\ncrapelike\ncrappie\ncrappin\ncrapple\ncrappo\ncraps\ncrapshooter\ncrapulate\ncrapulence\ncrapulent\ncrapulous\ncrapulously\ncrapulousness\ncrapy\ncraquelure\ncrare\ncrash\ncrasher\ncrasis\ncraspedal\ncraspedodromous\ncraspedon\nCraspedota\ncraspedotal\ncraspedote\ncrass\ncrassamentum\ncrassier\ncrassilingual\nCrassina\ncrassitude\ncrassly\ncrassness\nCrassula\nCrassulaceae\ncrassulaceous\nCrataegus\nCrataeva\ncratch\ncratchens\ncratches\ncrate\ncrateful\ncratemaker\ncratemaking\ncrateman\ncrater\ncrateral\ncratered\nCraterellus\nCraterid\ncrateriform\ncrateris\ncraterkin\ncraterless\ncraterlet\ncraterlike\ncraterous\ncraticular\nCratinean\ncratometer\ncratometric\ncratometry\ncraunch\ncraunching\ncraunchingly\ncravat\ncrave\ncraven\nCravenette\ncravenette\ncravenhearted\ncravenly\ncravenness\ncraver\ncraving\ncravingly\ncravingness\ncravo\ncraw\ncrawberry\ncrawdad\ncrawfish\ncrawfoot\ncrawful\ncrawl\ncrawler\ncrawlerize\ncrawley\ncrawleyroot\ncrawling\ncrawlingly\ncrawlsome\ncrawly\ncrawm\ncrawtae\nCrawthumper\nCrax\ncrayer\ncrayfish\ncrayon\ncrayonist\ncrayonstone\ncraze\ncrazed\ncrazedly\ncrazedness\ncrazily\ncraziness\ncrazingmill\ncrazy\ncrazycat\ncrazyweed\ncrea\ncreagh\ncreaght\ncreak\ncreaker\ncreakily\ncreakiness\ncreakingly\ncreaky\ncream\ncreambush\ncreamcake\ncreamcup\ncreamer\ncreamery\ncreameryman\ncreamfruit\ncreamily\ncreaminess\ncreamless\ncreamlike\ncreammaker\ncreammaking\ncreamometer\ncreamsacs\ncreamware\ncreamy\ncreance\ncreancer\ncreant\ncrease\ncreaseless\ncreaser\ncreashaks\ncreasing\ncreasy\ncreat\ncreatable\ncreate\ncreatedness\ncreatic\ncreatine\ncreatinephosphoric\ncreatinine\ncreatininemia\ncreatinuria\ncreation\ncreational\ncreationary\ncreationism\ncreationist\ncreationistic\ncreative\ncreatively\ncreativeness\ncreativity\ncreatophagous\ncreator\ncreatorhood\ncreatorrhea\ncreatorship\ncreatotoxism\ncreatress\ncreatrix\ncreatural\ncreature\ncreaturehood\ncreatureless\ncreatureliness\ncreatureling\ncreaturely\ncreatureship\ncreaturize\ncrebricostate\ncrebrisulcate\ncrebrity\ncrebrous\ncreche\ncreddock\ncredence\ncredencive\ncredenciveness\ncredenda\ncredensive\ncredensiveness\ncredent\ncredential\ncredently\ncredenza\ncredibility\ncredible\ncredibleness\ncredibly\ncredit\ncreditability\ncreditable\ncreditableness\ncreditably\ncreditive\ncreditless\ncreditor\ncreditorship\ncreditress\ncreditrix\ncrednerite\nCredo\ncredulity\ncredulous\ncredulously\ncredulousness\nCree\ncree\ncreed\ncreedal\ncreedalism\ncreedalist\ncreeded\ncreedist\ncreedite\ncreedless\ncreedlessness\ncreedmore\ncreedsman\nCreek\ncreek\ncreeker\ncreekfish\ncreekside\ncreekstuff\ncreeky\ncreel\ncreeler\ncreem\ncreen\ncreep\ncreepage\ncreeper\ncreepered\ncreeperless\ncreephole\ncreepie\ncreepiness\ncreeping\ncreepingly\ncreepmouse\ncreepmousy\ncreepy\ncreese\ncreesh\ncreeshie\ncreeshy\ncreirgist\ncremaster\ncremasterial\ncremasteric\ncremate\ncremation\ncremationism\ncremationist\ncremator\ncrematorial\ncrematorium\ncrematory\ncrembalum\ncremnophobia\ncremocarp\ncremometer\ncremone\ncremor\ncremorne\ncremule\ncrena\ncrenate\ncrenated\ncrenately\ncrenation\ncrenature\ncrenel\ncrenelate\ncrenelated\ncrenelation\ncrenele\ncreneled\ncrenelet\ncrenellate\ncrenellation\ncrenic\ncrenitic\ncrenology\ncrenotherapy\nCrenothrix\ncrenula\ncrenulate\ncrenulated\ncrenulation\ncreodont\nCreodonta\ncreole\ncreoleize\ncreolian\nCreolin\ncreolism\ncreolization\ncreolize\ncreophagia\ncreophagism\ncreophagist\ncreophagous\ncreophagy\ncreosol\ncreosote\ncreosoter\ncreosotic\ncrepance\ncrepe\ncrepehanger\nCrepidula\ncrepine\ncrepiness\nCrepis\ncrepitaculum\ncrepitant\ncrepitate\ncrepitation\ncrepitous\ncrepitus\ncrepon\ncrept\ncrepuscle\ncrepuscular\ncrepuscule\ncrepusculine\ncrepusculum\ncrepy\ncresamine\ncrescendo\ncrescent\ncrescentade\ncrescentader\nCrescentia\ncrescentic\ncrescentiform\ncrescentlike\ncrescentoid\ncrescentwise\ncrescive\ncrescograph\ncrescographic\ncresegol\ncresol\ncresolin\ncresorcinol\ncresotate\ncresotic\ncresotinic\ncresoxide\ncresoxy\ncresphontes\ncress\ncressed\ncresselle\ncresset\nCressida\ncresson\ncressweed\ncresswort\ncressy\ncrest\ncrested\ncrestfallen\ncrestfallenly\ncrestfallenness\ncresting\ncrestless\ncrestline\ncrestmoreite\ncresyl\ncresylate\ncresylene\ncresylic\ncresylite\ncreta\nCretaceous\ncretaceous\ncretaceously\nCretacic\nCretan\nCrete\ncretefaction\nCretic\ncretic\ncretification\ncretify\ncretin\ncretinic\ncretinism\ncretinization\ncretinize\ncretinoid\ncretinous\ncretion\ncretionary\nCretism\ncretonne\ncrevalle\ncrevasse\ncrevice\ncreviced\ncrew\ncrewel\ncrewelist\ncrewellery\ncrewelwork\ncrewer\ncrewless\ncrewman\nCrex\ncrib\ncribbage\ncribber\ncribbing\ncribble\ncribellum\ncribo\ncribral\ncribrate\ncribrately\ncribration\ncribriform\ncribrose\ncribwork\ncric\nCricetidae\ncricetine\nCricetus\ncrick\ncricket\ncricketer\ncricketing\ncrickety\ncrickey\ncrickle\ncricoarytenoid\ncricoid\ncricopharyngeal\ncricothyreoid\ncricothyreotomy\ncricothyroid\ncricothyroidean\ncricotomy\ncricotracheotomy\nCricotus\ncried\ncrier\ncriey\ncrig\ncrile\ncrime\nCrimean\ncrimeful\ncrimeless\ncrimelessness\ncrimeproof\ncriminal\ncriminaldom\ncriminalese\ncriminalism\ncriminalist\ncriminalistic\ncriminalistician\ncriminalistics\ncriminality\ncriminally\ncriminalness\ncriminaloid\ncriminate\ncrimination\ncriminative\ncriminator\ncriminatory\ncrimine\ncriminogenesis\ncriminogenic\ncriminologic\ncriminological\ncriminologist\ncriminology\ncriminosis\ncriminous\ncriminously\ncriminousness\ncrimogenic\ncrimp\ncrimpage\ncrimper\ncrimping\ncrimple\ncrimpness\ncrimpy\ncrimson\ncrimsonly\ncrimsonness\ncrimsony\ncrin\ncrinal\ncrinanite\ncrinated\ncrinatory\ncrine\ncrined\ncrinet\ncringe\ncringeling\ncringer\ncringing\ncringingly\ncringingness\ncringle\ncrinicultural\ncriniculture\ncriniferous\nCriniger\ncrinigerous\ncriniparous\ncrinite\ncrinitory\ncrinivorous\ncrink\ncrinkle\ncrinkleroot\ncrinkly\ncrinoid\ncrinoidal\nCrinoidea\ncrinoidean\ncrinoline\ncrinose\ncrinosity\ncrinula\nCrinum\ncriobolium\ncriocephalus\nCrioceras\ncrioceratite\ncrioceratitic\nCrioceris\ncriophore\nCriophoros\ncriosphinx\ncripes\ncrippingly\ncripple\ncrippledom\ncrippleness\ncrippler\ncrippling\ncripply\nCris\ncrises\ncrisic\ncrisis\ncrisp\ncrispate\ncrispated\ncrispation\ncrispature\ncrisped\ncrisper\ncrispily\nCrispin\ncrispine\ncrispiness\ncrisping\ncrisply\ncrispness\ncrispy\ncriss\ncrissal\ncrisscross\ncrissum\ncrista\ncristate\nCristatella\nCristi\ncristiform\nCristina\nCristineaux\nCristino\nCristispira\nCristivomer\ncristobalite\nCristopher\ncritch\ncriteria\ncriteriology\ncriterion\ncriterional\ncriterium\ncrith\nCrithidia\ncrithmene\ncrithomancy\ncritic\ncritical\ncriticality\ncritically\ncriticalness\ncriticaster\ncriticasterism\ncriticastry\ncriticisable\ncriticism\ncriticist\ncriticizable\ncriticize\ncriticizer\ncriticizingly\ncritickin\ncriticship\ncriticule\ncritique\ncritling\ncrizzle\ncro\ncroak\nCroaker\ncroaker\ncroakily\ncroakiness\ncroaky\nCroat\nCroatan\nCroatian\ncroc\nCrocanthemum\ncrocard\ncroceic\ncrocein\ncroceine\ncroceous\ncrocetin\ncroche\ncrochet\ncrocheter\ncrocheting\ncroci\ncrocidolite\nCrocidura\ncrocin\ncrock\ncrocker\ncrockery\ncrockeryware\ncrocket\ncrocketed\ncrocky\ncrocodile\nCrocodilia\ncrocodilian\nCrocodilidae\ncrocodiline\ncrocodilite\ncrocodiloid\nCrocodilus\nCrocodylidae\nCrocodylus\ncrocoisite\ncrocoite\ncroconate\ncroconic\nCrocosmia\nCrocus\ncrocus\ncrocused\ncroft\ncrofter\ncrofterization\ncrofterize\ncrofting\ncroftland\ncroisette\ncroissante\nCrokinole\nCrom\ncromaltite\ncrome\nCromer\nCromerian\ncromfordite\ncromlech\ncromorna\ncromorne\nCromwell\nCromwellian\nCronartium\ncrone\ncroneberry\ncronet\nCronian\ncronish\ncronk\ncronkness\ncronstedtite\ncrony\ncrood\ncroodle\ncrook\ncrookback\ncrookbacked\ncrookbill\ncrookbilled\ncrooked\ncrookedly\ncrookedness\ncrooken\ncrookesite\ncrookfingered\ncrookheaded\ncrookkneed\ncrookle\ncrooklegged\ncrookneck\ncrooknecked\ncrooknosed\ncrookshouldered\ncrooksided\ncrooksterned\ncrooktoothed\ncrool\nCroomia\ncroon\ncrooner\ncrooning\ncrooningly\ncrop\ncrophead\ncropland\ncropman\ncroppa\ncropper\ncroppie\ncropplecrown\ncroppy\ncropshin\ncropsick\ncropsickness\ncropweed\ncroquet\ncroquette\ncrore\ncrosa\nCrosby\ncrosier\ncrosiered\ncrosnes\ncross\ncrossability\ncrossable\ncrossarm\ncrossband\ncrossbar\ncrossbeak\ncrossbeam\ncrossbelt\ncrossbill\ncrossbolt\ncrossbolted\ncrossbones\ncrossbow\ncrossbowman\ncrossbred\ncrossbreed\ncrosscurrent\ncrosscurrented\ncrosscut\ncrosscutter\ncrosscutting\ncrosse\ncrossed\ncrosser\ncrossette\ncrossfall\ncrossfish\ncrossflow\ncrossflower\ncrossfoot\ncrosshackle\ncrosshand\ncrosshatch\ncrosshaul\ncrosshauling\ncrosshead\ncrossing\ncrossite\ncrossjack\ncrosslegs\ncrosslet\ncrossleted\ncrosslight\ncrosslighted\ncrossline\ncrossly\ncrossness\ncrossopodia\ncrossopterygian\nCrossopterygii\nCrossosoma\nCrossosomataceae\ncrossosomataceous\ncrossover\ncrosspatch\ncrosspath\ncrosspiece\ncrosspoint\ncrossrail\ncrossroad\ncrossroads\ncrossrow\ncrossruff\ncrosstail\ncrosstie\ncrosstied\ncrosstoes\ncrosstrack\ncrosstree\ncrosswalk\ncrossway\ncrossways\ncrossweb\ncrossweed\ncrosswise\ncrossword\ncrosswort\ncrostarie\ncrotal\nCrotalaria\ncrotalic\nCrotalidae\ncrotaliform\nCrotalinae\ncrotaline\ncrotalism\ncrotalo\ncrotaloid\ncrotalum\nCrotalus\ncrotaphic\ncrotaphion\ncrotaphite\ncrotaphitic\nCrotaphytus\ncrotch\ncrotched\ncrotchet\ncrotcheteer\ncrotchetiness\ncrotchety\ncrotchy\ncrotin\nCroton\ncrotonaldehyde\ncrotonate\ncrotonic\ncrotonization\ncrotonyl\ncrotonylene\nCrotophaga\ncrottels\ncrottle\ncrotyl\ncrouch\ncrouchant\ncrouched\ncroucher\ncrouching\ncrouchingly\ncrounotherapy\ncroup\ncroupade\ncroupal\ncroupe\ncrouperbush\ncroupier\ncroupily\ncroupiness\ncroupous\ncroupy\ncrouse\ncrousely\ncrout\ncroute\ncrouton\ncrow\ncrowbait\ncrowbar\ncrowberry\ncrowbill\ncrowd\ncrowded\ncrowdedly\ncrowdedness\ncrowder\ncrowdweed\ncrowdy\ncrower\ncrowflower\ncrowfoot\ncrowfooted\ncrowhop\ncrowing\ncrowingly\ncrowkeeper\ncrowl\ncrown\ncrownbeard\ncrowned\ncrowner\ncrownless\ncrownlet\ncrownling\ncrownmaker\ncrownwork\ncrownwort\ncrowshay\ncrowstep\ncrowstepped\ncrowstick\ncrowstone\ncrowtoe\ncroy\ncroyden\ncroydon\ncroze\ncrozer\ncrozzle\ncrozzly\ncrubeen\ncruce\ncruces\ncrucethouse\ncruche\ncrucial\ncruciality\ncrucially\ncrucian\nCrucianella\ncruciate\ncruciately\ncruciation\ncrucible\nCrucibulum\ncrucifer\nCruciferae\ncruciferous\ncrucificial\ncrucified\ncrucifier\ncrucifix\ncrucifixion\ncruciform\ncruciformity\ncruciformly\ncrucify\ncrucigerous\ncrucilly\ncrucily\ncruck\ncrude\ncrudely\ncrudeness\ncrudity\ncrudwort\ncruel\ncruelhearted\ncruelize\ncruelly\ncruelness\ncruels\ncruelty\ncruent\ncruentation\ncruet\ncruety\ncruise\ncruiser\ncruisken\ncruive\ncruller\ncrum\ncrumb\ncrumbable\ncrumbcloth\ncrumber\ncrumble\ncrumblement\ncrumblet\ncrumbliness\ncrumblingness\ncrumblings\ncrumbly\ncrumby\ncrumen\ncrumenal\ncrumlet\ncrummie\ncrummier\ncrummiest\ncrummock\ncrummy\ncrump\ncrumper\ncrumpet\ncrumple\ncrumpled\ncrumpler\ncrumpling\ncrumply\ncrumpy\ncrunch\ncrunchable\ncrunchiness\ncrunching\ncrunchingly\ncrunchingness\ncrunchweed\ncrunchy\ncrunk\ncrunkle\ncrunodal\ncrunode\ncrunt\ncruor\ncrupper\ncrural\ncrureus\ncrurogenital\ncruroinguinal\ncrurotarsal\ncrus\ncrusade\ncrusader\ncrusado\nCrusca\ncruse\ncrush\ncrushability\ncrushable\ncrushed\ncrusher\ncrushing\ncrushingly\ncrusie\ncrusily\ncrust\ncrusta\nCrustacea\ncrustaceal\ncrustacean\ncrustaceological\ncrustaceologist\ncrustaceology\ncrustaceous\ncrustade\ncrustal\ncrustalogical\ncrustalogist\ncrustalogy\ncrustate\ncrustated\ncrustation\ncrusted\ncrustedly\ncruster\ncrustific\ncrustification\ncrustily\ncrustiness\ncrustless\ncrustose\ncrustosis\ncrusty\ncrutch\ncrutched\ncrutcher\ncrutching\ncrutchlike\ncruth\ncrutter\ncrux\ncruzeiro\ncry\ncryable\ncryaesthesia\ncryalgesia\ncryanesthesia\ncrybaby\ncryesthesia\ncrying\ncryingly\ncrymodynia\ncrymotherapy\ncryoconite\ncryogen\ncryogenic\ncryogenics\ncryogeny\ncryohydrate\ncryohydric\ncryolite\ncryometer\ncryophile\ncryophilic\ncryophoric\ncryophorus\ncryophyllite\ncryophyte\ncryoplankton\ncryoscope\ncryoscopic\ncryoscopy\ncryosel\ncryostase\ncryostat\ncrypt\ncrypta\ncryptal\ncryptamnesia\ncryptamnesic\ncryptanalysis\ncryptanalyst\ncryptarch\ncryptarchy\ncrypted\nCrypteronia\nCrypteroniaceae\ncryptesthesia\ncryptesthetic\ncryptic\ncryptical\ncryptically\ncryptoagnostic\ncryptobatholithic\ncryptobranch\nCryptobranchia\nCryptobranchiata\ncryptobranchiate\nCryptobranchidae\nCryptobranchus\ncryptocarp\ncryptocarpic\ncryptocarpous\nCryptocarya\nCryptocephala\ncryptocephalous\nCryptocerata\ncryptocerous\ncryptoclastic\nCryptocleidus\ncryptococci\ncryptococcic\nCryptococcus\ncryptococcus\ncryptocommercial\ncryptocrystalline\ncryptocrystallization\ncryptodeist\nCryptodira\ncryptodiran\ncryptodire\ncryptodirous\ncryptodouble\ncryptodynamic\ncryptogam\nCryptogamia\ncryptogamian\ncryptogamic\ncryptogamical\ncryptogamist\ncryptogamous\ncryptogamy\ncryptogenetic\ncryptogenic\ncryptogenous\nCryptoglaux\ncryptoglioma\ncryptogram\nCryptogramma\ncryptogrammatic\ncryptogrammatical\ncryptogrammatist\ncryptogrammic\ncryptograph\ncryptographal\ncryptographer\ncryptographic\ncryptographical\ncryptographically\ncryptographist\ncryptography\ncryptoheresy\ncryptoheretic\ncryptoinflationist\ncryptolite\ncryptologist\ncryptology\ncryptolunatic\ncryptomere\nCryptomeria\ncryptomerous\ncryptomnesia\ncryptomnesic\ncryptomonad\nCryptomonadales\nCryptomonadina\ncryptonema\nCryptonemiales\ncryptoneurous\ncryptonym\ncryptonymous\ncryptopapist\ncryptoperthite\nCryptophagidae\ncryptophthalmos\nCryptophyceae\ncryptophyte\ncryptopine\ncryptoporticus\nCryptoprocta\ncryptoproselyte\ncryptoproselytism\ncryptopyic\ncryptopyrrole\ncryptorchid\ncryptorchidism\ncryptorchis\nCryptorhynchus\ncryptorrhesis\ncryptorrhetic\ncryptoscope\ncryptoscopy\ncryptosplenetic\nCryptostegia\ncryptostoma\nCryptostomata\ncryptostomate\ncryptostome\nCryptotaenia\ncryptous\ncryptovalence\ncryptovalency\ncryptozonate\nCryptozonia\ncryptozygosity\ncryptozygous\nCrypturi\nCrypturidae\ncrystal\ncrystallic\ncrystalliferous\ncrystalliform\ncrystalligerous\ncrystallin\ncrystalline\ncrystallinity\ncrystallite\ncrystallitic\ncrystallitis\ncrystallizability\ncrystallizable\ncrystallization\ncrystallize\ncrystallized\ncrystallizer\ncrystalloblastic\ncrystallochemical\ncrystallochemistry\ncrystallogenesis\ncrystallogenetic\ncrystallogenic\ncrystallogenical\ncrystallogeny\ncrystallogram\ncrystallographer\ncrystallographic\ncrystallographical\ncrystallographically\ncrystallography\ncrystalloid\ncrystalloidal\ncrystallology\ncrystalloluminescence\ncrystallomagnetic\ncrystallomancy\ncrystallometric\ncrystallometry\ncrystallophyllian\ncrystallose\ncrystallurgy\ncrystalwort\ncrystic\ncrystograph\ncrystoleum\nCrystolon\ncrystosphene\ncsardas\nCtenacanthus\nctene\nctenidial\nctenidium\ncteniform\nCtenocephalus\nctenocyst\nctenodactyl\nCtenodipterini\nctenodont\nCtenodontidae\nCtenodus\nctenoid\nctenoidean\nCtenoidei\nctenoidian\nctenolium\nCtenophora\nctenophoral\nctenophoran\nctenophore\nctenophoric\nctenophorous\nCtenoplana\nCtenostomata\nctenostomatous\nctenostome\nctetology\ncuadra\nCuailnge\ncuapinole\ncuarenta\ncuarta\ncuarteron\ncuartilla\ncuartillo\ncub\nCuba\ncubage\nCuban\ncubangle\ncubanite\nCubanize\ncubatory\ncubature\ncubbing\ncubbish\ncubbishly\ncubbishness\ncubby\ncubbyhole\ncubbyhouse\ncubbyyew\ncubdom\ncube\ncubeb\ncubelet\nCubelium\ncuber\ncubhood\ncubi\ncubic\ncubica\ncubical\ncubically\ncubicalness\ncubicity\ncubicle\ncubicly\ncubicone\ncubicontravariant\ncubicovariant\ncubicular\ncubiculum\ncubiform\ncubism\ncubist\ncubit\ncubital\ncubitale\ncubited\ncubitiere\ncubito\ncubitocarpal\ncubitocutaneous\ncubitodigital\ncubitometacarpal\ncubitopalmar\ncubitoplantar\ncubitoradial\ncubitus\ncubmaster\ncubocalcaneal\ncuboctahedron\ncubocube\ncubocuneiform\ncubododecahedral\ncuboid\ncuboidal\ncuboides\ncubomancy\nCubomedusae\ncubomedusan\ncubometatarsal\ncubonavicular\nCuchan\nCuchulainn\ncuck\ncuckhold\ncuckold\ncuckoldom\ncuckoldry\ncuckoldy\ncuckoo\ncuckooflower\ncuckoomaid\ncuckoopint\ncuckoopintle\ncuckstool\ncucoline\nCucujid\nCucujidae\nCucujus\nCuculi\nCuculidae\ncuculiform\nCuculiformes\ncuculine\ncuculla\ncucullaris\ncucullate\ncucullately\ncuculliform\ncucullus\ncuculoid\nCuculus\nCucumaria\nCucumariidae\ncucumber\ncucumiform\nCucumis\ncucurbit\nCucurbita\nCucurbitaceae\ncucurbitaceous\ncucurbite\ncucurbitine\ncud\ncudava\ncudbear\ncudden\ncuddle\ncuddleable\ncuddlesome\ncuddly\nCuddy\ncuddy\ncuddyhole\ncudgel\ncudgeler\ncudgerie\ncudweed\ncue\ncueball\ncueca\ncueist\ncueman\ncuemanship\ncuerda\ncuesta\nCueva\ncuff\ncuffer\ncuffin\ncuffy\ncuffyism\ncuggermugger\ncuichunchulli\ncuinage\ncuir\ncuirass\ncuirassed\ncuirassier\ncuisinary\ncuisine\ncuissard\ncuissart\ncuisse\ncuissen\ncuisten\nCuitlateco\ncuittikin\nCujam\ncuke\nCulavamsa\nculbut\nCuldee\nculebra\nculet\nculeus\nCulex\nculgee\nculicid\nCulicidae\nculicidal\nculicide\nculiciform\nculicifugal\nculicifuge\nCulicinae\nculicine\nCulicoides\nculilawan\nculinarily\nculinary\ncull\nculla\ncullage\nCullen\nculler\ncullet\nculling\ncullion\ncullis\ncully\nculm\nculmen\nculmicolous\nculmiferous\nculmigenous\nculminal\nculminant\nculminate\nculmination\nculmy\nculotte\nculottes\nculottic\nculottism\nculpa\nculpability\nculpable\nculpableness\nculpably\nculpatory\nculpose\nculprit\ncult\ncultch\ncultellation\ncultellus\nculteranismo\ncultic\ncultigen\ncultirostral\nCultirostres\ncultish\ncultism\ncultismo\ncultist\ncultivability\ncultivable\ncultivably\ncultivar\ncultivatability\ncultivatable\ncultivate\ncultivated\ncultivation\ncultivator\ncultrate\ncultrated\ncultriform\ncultrirostral\nCultrirostres\ncultual\nculturable\ncultural\nculturally\nculture\ncultured\nculturine\nculturist\nculturization\nculturize\nculturological\nculturologically\nculturologist\nculturology\ncultus\nculver\nculverfoot\nculverhouse\nculverin\nculverineer\nculverkey\nculvert\nculvertage\nculverwort\ncum\nCumacea\ncumacean\ncumaceous\nCumaean\ncumal\ncumaldehyde\nCumanagoto\ncumaphyte\ncumaphytic\ncumaphytism\nCumar\ncumay\ncumbent\ncumber\ncumberer\ncumberlandite\ncumberless\ncumberment\ncumbersome\ncumbersomely\ncumbersomeness\ncumberworld\ncumbha\ncumbly\ncumbraite\ncumbrance\ncumbre\nCumbrian\ncumbrous\ncumbrously\ncumbrousness\ncumbu\ncumene\ncumengite\ncumenyl\ncumflutter\ncumhal\ncumic\ncumidin\ncumidine\ncumin\ncuminal\ncuminic\ncuminoin\ncuminol\ncuminole\ncuminseed\ncuminyl\ncummer\ncummerbund\ncummin\ncummingtonite\ncumol\ncump\ncumshaw\ncumulant\ncumular\ncumulate\ncumulately\ncumulation\ncumulatist\ncumulative\ncumulatively\ncumulativeness\ncumuli\ncumuliform\ncumulite\ncumulophyric\ncumulose\ncumulous\ncumulus\ncumyl\nCuna\ncunabular\nCunan\nCunarder\nCunas\ncunctation\ncunctatious\ncunctative\ncunctator\ncunctatorship\ncunctatury\ncunctipotent\ncundeamor\ncuneal\ncuneate\ncuneately\ncuneatic\ncuneator\ncuneiform\ncuneiformist\ncuneocuboid\ncuneonavicular\ncuneoscaphoid\ncunette\ncuneus\ncungeboi\ncunicular\ncuniculus\ncunila\ncunjah\ncunjer\ncunjevoi\ncunner\ncunnilinctus\ncunnilingus\ncunning\nCunninghamia\ncunningly\ncunningness\nCunonia\nCunoniaceae\ncunoniaceous\ncunye\nCunza\nCuon\ncuorin\ncup\nCupania\ncupay\ncupbearer\ncupboard\ncupcake\ncupel\ncupeler\ncupellation\ncupflower\ncupful\nCuphea\ncuphead\ncupholder\nCupid\ncupidinous\ncupidity\ncupidon\ncupidone\ncupless\ncupmaker\ncupmaking\ncupman\ncupmate\ncupola\ncupolaman\ncupolar\ncupolated\ncupped\ncupper\ncupping\ncuppy\ncuprammonia\ncuprammonium\ncupreine\ncuprene\ncupreous\nCupressaceae\ncupressineous\nCupressinoxylon\nCupressus\ncupric\ncupride\ncupriferous\ncuprite\ncuproammonium\ncuprobismutite\ncuprocyanide\ncuprodescloizite\ncuproid\ncuproiodargyrite\ncupromanganese\ncupronickel\ncuproplumbite\ncuproscheelite\ncuprose\ncuprosilicon\ncuprotungstite\ncuprous\ncuprum\ncupseed\ncupstone\ncupula\ncupulate\ncupule\nCupuliferae\ncupuliferous\ncupuliform\ncur\ncurability\ncurable\ncurableness\ncurably\ncuracao\ncuracy\ncurare\ncurarine\ncurarization\ncurarize\ncurassow\ncuratage\ncurate\ncuratel\ncurateship\ncuratess\ncuratial\ncuratic\ncuration\ncurative\ncuratively\ncurativeness\ncuratize\ncuratolatry\ncurator\ncuratorial\ncuratorium\ncuratorship\ncuratory\ncuratrix\nCuravecan\ncurb\ncurbable\ncurber\ncurbing\ncurbless\ncurblike\ncurbstone\ncurbstoner\ncurby\ncurcas\ncurch\ncurcuddoch\nCurculio\ncurculionid\nCurculionidae\ncurculionist\nCurcuma\ncurcumin\ncurd\ncurdiness\ncurdle\ncurdler\ncurdly\ncurdwort\ncurdy\ncure\ncureless\ncurelessly\ncuremaster\ncurer\ncurettage\ncurette\ncurettement\ncurfew\ncurial\ncurialism\ncurialist\ncurialistic\ncuriality\ncuriate\nCuriatii\ncuriboca\ncurie\ncuriescopy\ncurietherapy\ncurin\ncurine\ncuring\ncurio\ncuriologic\ncuriologically\ncuriologics\ncuriology\ncuriomaniac\ncuriosa\ncuriosity\ncurioso\ncurious\ncuriously\ncuriousness\ncurite\nCuritis\ncurium\ncurl\ncurled\ncurledly\ncurledness\ncurler\ncurlew\ncurlewberry\ncurlicue\ncurliewurly\ncurlike\ncurlily\ncurliness\ncurling\ncurlingly\ncurlpaper\ncurly\ncurlycue\ncurlyhead\ncurlylocks\ncurmudgeon\ncurmudgeonery\ncurmudgeonish\ncurmudgeonly\ncurmurring\ncurn\ncurney\ncurnock\ncurple\ncurr\ncurrach\ncurrack\ncurragh\ncurrant\ncurratow\ncurrawang\ncurrency\ncurrent\ncurrently\ncurrentness\ncurrentwise\ncurricle\ncurricula\ncurricular\ncurricularization\ncurricularize\ncurriculum\ncurried\ncurrier\ncurriery\ncurrish\ncurrishly\ncurrishness\ncurry\ncurrycomb\ncurryfavel\nCursa\ncursal\ncurse\ncursed\ncursedly\ncursedness\ncurser\ncurship\ncursitor\ncursive\ncursively\ncursiveness\ncursor\ncursorary\nCursores\nCursoria\ncursorial\nCursoriidae\ncursorily\ncursoriness\ncursorious\nCursorius\ncursory\ncurst\ncurstful\ncurstfully\ncurstly\ncurstness\ncursus\nCurt\ncurt\ncurtail\ncurtailed\ncurtailedly\ncurtailer\ncurtailment\ncurtain\ncurtaining\ncurtainless\ncurtainwise\ncurtal\nCurtana\ncurtate\ncurtation\ncurtesy\ncurtilage\nCurtis\nCurtise\ncurtly\ncurtness\ncurtsy\ncurua\ncuruba\nCurucaneca\nCurucanecan\ncurucucu\ncurule\nCuruminaca\nCuruminacan\nCurupira\ncururo\ncurvaceous\ncurvaceousness\ncurvacious\ncurvant\ncurvate\ncurvation\ncurvature\ncurve\ncurved\ncurvedly\ncurvedness\ncurver\ncurvesome\ncurvesomeness\ncurvet\ncurvicaudate\ncurvicostate\ncurvidentate\ncurvifoliate\ncurviform\ncurvilineal\ncurvilinear\ncurvilinearity\ncurvilinearly\ncurvimeter\ncurvinervate\ncurvinerved\ncurvirostral\nCurvirostres\ncurviserial\ncurvital\ncurvity\ncurvograph\ncurvometer\ncurvous\ncurvulate\ncurvy\ncurwhibble\ncurwillet\ncuscohygrine\ncusconine\nCuscus\ncuscus\nCuscuta\nCuscutaceae\ncuscutaceous\ncusec\ncuselite\ncush\ncushag\ncushat\ncushaw\ncushewbird\ncushion\ncushioned\ncushionflower\ncushionless\ncushionlike\ncushiony\nCushite\nCushitic\ncushlamochree\ncushy\ncusie\ncusinero\ncusk\ncusp\ncuspal\ncusparidine\ncusparine\ncuspate\ncusped\ncuspid\ncuspidal\ncuspidate\ncuspidation\ncuspidine\ncuspidor\ncuspule\ncuss\ncussed\ncussedly\ncussedness\ncusser\ncusso\ncustard\ncusterite\ncustodee\ncustodes\ncustodial\ncustodiam\ncustodian\ncustodianship\ncustodier\ncustody\ncustom\ncustomable\ncustomarily\ncustomariness\ncustomary\ncustomer\ncustomhouse\ncustoms\ncustumal\ncut\ncutaneal\ncutaneous\ncutaneously\ncutaway\ncutback\ncutch\ncutcher\ncutcherry\ncute\ncutely\ncuteness\nCuterebra\nCuthbert\ncutheal\ncuticle\ncuticolor\ncuticula\ncuticular\ncuticularization\ncuticularize\ncuticulate\ncutidure\ncutie\ncutification\ncutigeral\ncutin\ncutinization\ncutinize\ncutireaction\ncutis\ncutisector\nCutiterebra\ncutitis\ncutization\ncutlass\ncutler\ncutleress\nCutleria\nCutleriaceae\ncutleriaceous\nCutleriales\ncutlery\ncutlet\ncutling\ncutlips\ncutocellulose\ncutoff\ncutout\ncutover\ncutpurse\ncuttable\ncuttage\ncuttail\ncuttanee\ncutted\ncutter\ncutterhead\ncutterman\ncutthroat\ncutting\ncuttingly\ncuttingness\ncuttle\ncuttlebone\ncuttlefish\ncuttler\ncuttoo\ncutty\ncuttyhunk\ncutup\ncutwater\ncutweed\ncutwork\ncutworm\ncuvette\nCuvierian\ncuvy\ncuya\nCuzceno\ncwierc\ncwm\ncyamelide\nCyamus\ncyan\ncyanacetic\ncyanamide\ncyananthrol\nCyanastraceae\nCyanastrum\ncyanate\ncyanaurate\ncyanauric\ncyanbenzyl\ncyancarbonic\nCyanea\ncyanean\ncyanemia\ncyaneous\ncyanephidrosis\ncyanformate\ncyanformic\ncyanhidrosis\ncyanhydrate\ncyanhydric\ncyanhydrin\ncyanic\ncyanicide\ncyanidation\ncyanide\ncyanidin\ncyanidine\ncyanidrosis\ncyanimide\ncyanin\ncyanine\ncyanite\ncyanize\ncyanmethemoglobin\ncyanoacetate\ncyanoacetic\ncyanoaurate\ncyanoauric\ncyanobenzene\ncyanocarbonic\ncyanochlorous\ncyanochroia\ncyanochroic\nCyanocitta\ncyanocrystallin\ncyanoderma\ncyanogen\ncyanogenesis\ncyanogenetic\ncyanogenic\ncyanoguanidine\ncyanohermidin\ncyanohydrin\ncyanol\ncyanole\ncyanomaclurin\ncyanometer\ncyanomethaemoglobin\ncyanomethemoglobin\ncyanometric\ncyanometry\ncyanopathic\ncyanopathy\ncyanophile\ncyanophilous\ncyanophoric\ncyanophose\nCyanophyceae\ncyanophycean\ncyanophyceous\ncyanophycin\ncyanopia\ncyanoplastid\ncyanoplatinite\ncyanoplatinous\ncyanopsia\ncyanose\ncyanosed\ncyanosis\nCyanospiza\ncyanotic\ncyanotrichite\ncyanotype\ncyanuramide\ncyanurate\ncyanuret\ncyanuric\ncyanurine\ncyanus\ncyaphenine\ncyath\nCyathaspis\nCyathea\nCyatheaceae\ncyatheaceous\ncyathiform\ncyathium\ncyathoid\ncyatholith\nCyathophyllidae\ncyathophylline\ncyathophylloid\nCyathophyllum\ncyathos\ncyathozooid\ncyathus\ncybernetic\ncyberneticist\ncybernetics\nCybister\ncycad\nCycadaceae\ncycadaceous\nCycadales\ncycadean\ncycadeoid\nCycadeoidea\ncycadeous\ncycadiform\ncycadlike\ncycadofilicale\nCycadofilicales\nCycadofilices\ncycadofilicinean\nCycadophyta\nCycas\nCycladic\ncyclamen\ncyclamin\ncyclamine\ncyclammonium\ncyclane\nCyclanthaceae\ncyclanthaceous\nCyclanthales\nCyclanthus\ncyclar\ncyclarthrodial\ncyclarthrsis\ncyclas\ncycle\ncyclecar\ncycledom\ncyclene\ncycler\ncyclesmith\nCycliae\ncyclian\ncyclic\ncyclical\ncyclically\ncyclicism\ncyclide\ncycling\ncyclism\ncyclist\ncyclistic\ncyclitic\ncyclitis\ncyclization\ncyclize\ncycloalkane\nCyclobothra\ncyclobutane\ncyclocoelic\ncyclocoelous\nCycloconium\ncyclodiolefin\ncycloganoid\nCycloganoidei\ncyclogram\ncyclograph\ncyclographer\ncycloheptane\ncycloheptanone\ncyclohexane\ncyclohexanol\ncyclohexanone\ncyclohexene\ncyclohexyl\ncycloid\ncycloidal\ncycloidally\ncycloidean\nCycloidei\ncycloidian\ncycloidotrope\ncyclolith\nCycloloma\ncyclomania\ncyclometer\ncyclometric\ncyclometrical\ncyclometry\nCyclomyaria\ncyclomyarian\ncyclonal\ncyclone\ncyclonic\ncyclonical\ncyclonically\ncyclonist\ncyclonite\ncyclonologist\ncyclonology\ncyclonometer\ncyclonoscope\ncycloolefin\ncycloparaffin\ncyclope\nCyclopean\ncyclopean\ncyclopedia\ncyclopedic\ncyclopedical\ncyclopedically\ncyclopedist\ncyclopentadiene\ncyclopentane\ncyclopentanone\ncyclopentene\nCyclopes\ncyclopes\ncyclophoria\ncyclophoric\nCyclophorus\ncyclophrenia\ncyclopia\nCyclopic\ncyclopism\ncyclopite\ncycloplegia\ncycloplegic\ncyclopoid\ncyclopropane\nCyclops\nCyclopteridae\ncyclopteroid\ncyclopterous\ncyclopy\ncyclorama\ncycloramic\nCyclorrhapha\ncyclorrhaphous\ncycloscope\ncyclose\ncyclosis\ncyclospermous\nCyclospondyli\ncyclospondylic\ncyclospondylous\nCyclosporales\nCyclosporeae\nCyclosporinae\ncyclosporous\nCyclostoma\nCyclostomata\ncyclostomate\nCyclostomatidae\ncyclostomatous\ncyclostome\nCyclostomes\nCyclostomi\nCyclostomidae\ncyclostomous\ncyclostrophic\ncyclostyle\nCyclotella\ncyclothem\ncyclothure\ncyclothurine\nCyclothurus\ncyclothyme\ncyclothymia\ncyclothymiac\ncyclothymic\ncyclotome\ncyclotomic\ncyclotomy\nCyclotosaurus\ncyclotron\ncyclovertebral\ncyclus\nCydippe\ncydippian\ncydippid\nCydippida\nCydonia\nCydonian\ncydonium\ncyesiology\ncyesis\ncygneous\ncygnet\nCygnid\nCygninae\ncygnine\nCygnus\ncyke\ncylinder\ncylindered\ncylinderer\ncylinderlike\ncylindraceous\ncylindrarthrosis\nCylindrella\ncylindrelloid\ncylindrenchyma\ncylindric\ncylindrical\ncylindricality\ncylindrically\ncylindricalness\ncylindricity\ncylindricule\ncylindriform\ncylindrite\ncylindrocellular\ncylindrocephalic\ncylindroconical\ncylindroconoidal\ncylindrocylindric\ncylindrodendrite\ncylindrograph\ncylindroid\ncylindroidal\ncylindroma\ncylindromatous\ncylindrometric\ncylindroogival\nCylindrophis\nCylindrosporium\ncylindruria\ncylix\nCyllenian\nCyllenius\ncyllosis\ncyma\ncymagraph\ncymaphen\ncymaphyte\ncymaphytic\ncymaphytism\ncymar\ncymation\ncymatium\ncymba\ncymbaeform\ncymbal\nCymbalaria\ncymbaleer\ncymbaler\ncymbaline\ncymbalist\ncymballike\ncymbalo\ncymbalon\ncymbate\nCymbella\ncymbiform\nCymbium\ncymbling\ncymbocephalic\ncymbocephalous\ncymbocephaly\nCymbopogon\ncyme\ncymelet\ncymene\ncymiferous\ncymling\nCymodoceaceae\ncymogene\ncymograph\ncymographic\ncymoid\nCymoidium\ncymometer\ncymophane\ncymophanous\ncymophenol\ncymoscope\ncymose\ncymosely\ncymotrichous\ncymotrichy\ncymous\nCymraeg\nCymric\nCymry\ncymule\ncymulose\ncynanche\nCynanchum\ncynanthropy\nCynara\ncynaraceous\ncynarctomachy\ncynareous\ncynaroid\ncynebot\ncynegetic\ncynegetics\ncynegild\ncynhyena\nCynias\ncyniatria\ncyniatrics\ncynic\ncynical\ncynically\ncynicalness\ncynicism\ncynicist\ncynipid\nCynipidae\ncynipidous\ncynipoid\nCynipoidea\nCynips\ncynism\ncynocephalic\ncynocephalous\ncynocephalus\ncynoclept\nCynocrambaceae\ncynocrambaceous\nCynocrambe\nCynodon\ncynodont\nCynodontia\nCynogale\ncynogenealogist\ncynogenealogy\nCynoglossum\nCynognathus\ncynography\ncynoid\nCynoidea\ncynology\nCynomoriaceae\ncynomoriaceous\nCynomorium\nCynomorpha\ncynomorphic\ncynomorphous\nCynomys\ncynophile\ncynophilic\ncynophilist\ncynophobe\ncynophobia\nCynopithecidae\ncynopithecoid\ncynopodous\ncynorrhodon\nCynosarges\nCynoscion\nCynosura\ncynosural\ncynosure\nCynosurus\ncynotherapy\nCynoxylon\nCynthia\nCynthian\nCynthiidae\nCynthius\ncyp\nCyperaceae\ncyperaceous\nCyperus\ncyphella\ncyphellate\nCyphomandra\ncyphonautes\ncyphonism\nCypraea\ncypraeid\nCypraeidae\ncypraeiform\ncypraeoid\ncypre\ncypres\ncypress\ncypressed\ncypressroot\nCypria\nCyprian\nCyprididae\nCypridina\nCypridinidae\ncypridinoid\nCyprina\ncyprine\ncyprinid\nCyprinidae\ncypriniform\ncyprinine\ncyprinodont\nCyprinodontes\nCyprinodontidae\ncyprinodontoid\ncyprinoid\nCyprinoidea\ncyprinoidean\nCyprinus\nCypriote\nCypripedium\nCypris\ncypsela\nCypseli\nCypselid\nCypselidae\ncypseliform\nCypseliformes\ncypseline\ncypseloid\ncypselomorph\nCypselomorphae\ncypselomorphic\ncypselous\nCypselus\ncyptozoic\nCyrano\nCyrenaic\nCyrenaicism\nCyrenian\nCyril\nCyrilla\nCyrillaceae\ncyrillaceous\nCyrillian\nCyrillianism\nCyrillic\ncyriologic\ncyriological\nCyrtandraceae\nCyrtidae\ncyrtoceracone\nCyrtoceras\ncyrtoceratite\ncyrtoceratitic\ncyrtograph\ncyrtolite\ncyrtometer\nCyrtomium\ncyrtopia\ncyrtosis\nCyrus\ncyrus\ncyst\ncystadenoma\ncystadenosarcoma\ncystal\ncystalgia\ncystamine\ncystaster\ncystatrophia\ncystatrophy\ncystectasia\ncystectasy\ncystectomy\ncysted\ncysteine\ncysteinic\ncystelcosis\ncystenchyma\ncystenchymatous\ncystencyte\ncysterethism\ncystic\ncysticarpic\ncysticarpium\ncysticercoid\ncysticercoidal\ncysticercosis\ncysticercus\ncysticolous\ncystid\nCystidea\ncystidean\ncystidicolous\ncystidium\ncystiferous\ncystiform\ncystigerous\nCystignathidae\ncystignathine\ncystine\ncystinuria\ncystirrhea\ncystis\ncystitis\ncystitome\ncystoadenoma\ncystocarcinoma\ncystocarp\ncystocarpic\ncystocele\ncystocolostomy\ncystocyte\ncystodynia\ncystoelytroplasty\ncystoenterocele\ncystoepiplocele\ncystoepithelioma\ncystofibroma\nCystoflagellata\ncystoflagellate\ncystogenesis\ncystogenous\ncystogram\ncystoid\nCystoidea\ncystoidean\ncystolith\ncystolithectomy\ncystolithiasis\ncystolithic\ncystoma\ncystomatous\ncystomorphous\ncystomyoma\ncystomyxoma\nCystonectae\ncystonectous\ncystonephrosis\ncystoneuralgia\ncystoparalysis\nCystophora\ncystophore\ncystophotography\ncystophthisis\ncystoplasty\ncystoplegia\ncystoproctostomy\nCystopteris\ncystoptosis\nCystopus\ncystopyelitis\ncystopyelography\ncystopyelonephritis\ncystoradiography\ncystorrhagia\ncystorrhaphy\ncystorrhea\ncystosarcoma\ncystoschisis\ncystoscope\ncystoscopic\ncystoscopy\ncystose\ncystospasm\ncystospastic\ncystospore\ncystostomy\ncystosyrinx\ncystotome\ncystotomy\ncystotrachelotomy\ncystoureteritis\ncystourethritis\ncystous\ncytase\ncytasic\nCytherea\nCytherean\nCytherella\nCytherellidae\nCytinaceae\ncytinaceous\nCytinus\ncytioderm\ncytisine\nCytisus\ncytitis\ncytoblast\ncytoblastema\ncytoblastemal\ncytoblastematous\ncytoblastemic\ncytoblastemous\ncytochemistry\ncytochrome\ncytochylema\ncytocide\ncytoclasis\ncytoclastic\ncytococcus\ncytocyst\ncytode\ncytodendrite\ncytoderm\ncytodiagnosis\ncytodieresis\ncytodieretic\ncytogamy\ncytogene\ncytogenesis\ncytogenetic\ncytogenetical\ncytogenetically\ncytogeneticist\ncytogenetics\ncytogenic\ncytogenous\ncytogeny\ncytoglobin\ncytohyaloplasm\ncytoid\ncytokinesis\ncytolist\ncytologic\ncytological\ncytologically\ncytologist\ncytology\ncytolymph\ncytolysin\ncytolysis\ncytolytic\ncytoma\ncytomere\ncytometer\ncytomicrosome\ncytomitome\ncytomorphosis\ncyton\ncytoparaplastin\ncytopathologic\ncytopathological\ncytopathologically\ncytopathology\nCytophaga\ncytophagous\ncytophagy\ncytopharynx\ncytophil\ncytophysics\ncytophysiology\ncytoplasm\ncytoplasmic\ncytoplast\ncytoplastic\ncytoproct\ncytopyge\ncytoreticulum\ncytoryctes\ncytosine\ncytosome\nCytospora\nCytosporina\ncytost\ncytostomal\ncytostome\ncytostroma\ncytostromatic\ncytotactic\ncytotaxis\ncytotoxic\ncytotoxin\ncytotrophoblast\ncytotrophy\ncytotropic\ncytotropism\ncytozoic\ncytozoon\ncytozymase\ncytozyme\ncytula\nCyzicene\ncyzicene\nczar\nczardas\nczardom\nczarevitch\nczarevna\nczarian\nczaric\nczarina\nczarinian\nczarish\nczarism\nczarist\nczaristic\nczaritza\nczarowitch\nczarowitz\nczarship\nCzech\nCzechic\nCzechish\nCzechization\nCzechoslovak\nCzechoslovakian\nD\nd\nda\ndaalder\ndab\ndabb\ndabba\ndabber\ndabble\ndabbler\ndabbling\ndabblingly\ndabblingness\ndabby\ndabchick\nDabih\nDabitis\ndablet\ndaboia\ndaboya\ndabster\ndace\nDacelo\nDaceloninae\ndacelonine\ndachshound\ndachshund\nDacian\ndacite\ndacitic\ndacker\ndacoit\ndacoitage\ndacoity\ndacryadenalgia\ndacryadenitis\ndacryagogue\ndacrycystalgia\nDacrydium\ndacryelcosis\ndacryoadenalgia\ndacryoadenitis\ndacryoblenorrhea\ndacryocele\ndacryocyst\ndacryocystalgia\ndacryocystitis\ndacryocystoblennorrhea\ndacryocystocele\ndacryocystoptosis\ndacryocystorhinostomy\ndacryocystosyringotomy\ndacryocystotome\ndacryocystotomy\ndacryohelcosis\ndacryohemorrhea\ndacryolite\ndacryolith\ndacryolithiasis\ndacryoma\ndacryon\ndacryops\ndacryopyorrhea\ndacryopyosis\ndacryosolenitis\ndacryostenosis\ndacryosyrinx\ndacryuria\nDactyl\ndactyl\ndactylar\ndactylate\ndactylic\ndactylically\ndactylioglyph\ndactylioglyphic\ndactylioglyphist\ndactylioglyphtic\ndactylioglyphy\ndactyliographer\ndactyliographic\ndactyliography\ndactyliology\ndactyliomancy\ndactylion\ndactyliotheca\nDactylis\ndactylist\ndactylitic\ndactylitis\ndactylogram\ndactylograph\ndactylographic\ndactylography\ndactyloid\ndactylology\ndactylomegaly\ndactylonomy\ndactylopatagium\nDactylopius\ndactylopodite\ndactylopore\nDactylopteridae\nDactylopterus\ndactylorhiza\ndactyloscopic\ndactyloscopy\ndactylose\ndactylosternal\ndactylosymphysis\ndactylotheca\ndactylous\ndactylozooid\ndactylus\nDacus\ndacyorrhea\ndad\nDada\ndada\nDadaism\nDadaist\ndadap\nDadayag\ndadder\ndaddle\ndaddock\ndaddocky\ndaddy\ndaddynut\ndade\ndadenhudd\ndado\nDadoxylon\nDadu\ndaduchus\nDadupanthi\ndae\nDaedal\ndaedal\nDaedalea\nDaedalean\nDaedalian\nDaedalic\nDaedalidae\nDaedalist\ndaedaloid\nDaedalus\ndaemon\nDaemonelix\ndaemonic\ndaemonurgist\ndaemonurgy\ndaemony\ndaer\ndaff\ndaffery\ndaffing\ndaffish\ndaffle\ndaffodil\ndaffodilly\ndaffy\ndaffydowndilly\nDafla\ndaft\ndaftberry\ndaftlike\ndaftly\ndaftness\ndag\ndagaba\ndagame\ndagassa\nDagbamba\nDagbane\ndagesh\nDagestan\ndagga\ndagger\ndaggerbush\ndaggered\ndaggerlike\ndaggerproof\ndaggers\ndaggle\ndaggletail\ndaggletailed\ndaggly\ndaggy\ndaghesh\ndaglock\nDagmar\nDago\ndagoba\nDagomba\ndags\nDaguerrean\ndaguerreotype\ndaguerreotyper\ndaguerreotypic\ndaguerreotypist\ndaguerreotypy\ndah\ndahabeah\nDahlia\nDahoman\nDahomeyan\ndahoon\nDaibutsu\ndaidle\ndaidly\nDaijo\ndaiker\ndaikon\nDail\nDailamite\ndailiness\ndaily\ndaimen\ndaimiate\ndaimio\ndaimon\ndaimonic\ndaimonion\ndaimonistic\ndaimonology\ndain\ndaincha\ndainteth\ndaintify\ndaintihood\ndaintily\ndaintiness\ndaintith\ndainty\nDaira\ndaira\ndairi\ndairy\ndairying\ndairymaid\ndairyman\ndairywoman\ndais\ndaisied\ndaisy\ndaisybush\ndaitya\ndaiva\ndak\ndaker\nDakhini\ndakir\nDakota\ndaktylon\ndaktylos\ndal\ndalar\nDalarnian\nDalbergia\nDalcassian\nDale\ndale\nDalea\nDalecarlian\ndaleman\ndaler\ndalesfolk\ndalesman\ndalespeople\ndaleswoman\ndaleth\ndali\nDalibarda\ndalk\ndallack\ndalle\ndalles\ndalliance\ndallier\ndally\ndallying\ndallyingly\nDalmania\nDalmanites\nDalmatian\nDalmatic\ndalmatic\nDalradian\ndalt\ndalteen\nDalton\ndalton\nDaltonian\nDaltonic\nDaltonism\nDaltonist\ndam\ndama\ndamage\ndamageability\ndamageable\ndamageableness\ndamageably\ndamagement\ndamager\ndamages\ndamagingly\ndaman\nDamara\nDamascene\ndamascene\ndamascened\ndamascener\ndamascenine\nDamascus\ndamask\ndamaskeen\ndamasse\ndamassin\nDamayanti\ndambonitol\ndambose\ndambrod\ndame\ndamenization\ndamewort\nDamgalnunna\nDamia\ndamiana\nDamianist\ndamie\ndamier\ndamine\ndamkjernite\ndamlike\ndammar\nDammara\ndamme\ndammer\ndammish\ndamn\ndamnability\ndamnable\ndamnableness\ndamnably\ndamnation\ndamnatory\ndamned\ndamner\ndamnification\ndamnify\nDamnii\ndamning\ndamningly\ndamningness\ndamnonians\nDamnonii\ndamnous\ndamnously\nDamoclean\nDamocles\nDamoetas\ndamoiseau\nDamon\nDamone\ndamonico\ndamourite\ndamp\ndampang\ndamped\ndampen\ndampener\ndamper\ndamping\ndampish\ndampishly\ndampishness\ndamply\ndampness\ndampproof\ndampproofer\ndampproofing\ndampy\ndamsel\ndamselfish\ndamselhood\ndamson\nDan\ndan\nDana\nDanaan\nDanagla\nDanai\nDanaid\ndanaid\nDanaidae\ndanaide\nDanaidean\nDanainae\ndanaine\nDanais\ndanaite\nDanakil\ndanalite\ndanburite\ndancalite\ndance\ndancer\ndanceress\ndancery\ndancette\ndancing\ndancingly\ndand\ndanda\ndandelion\ndander\ndandiacal\ndandiacally\ndandically\ndandification\ndandify\ndandilly\ndandily\ndandiprat\ndandizette\ndandle\ndandler\ndandling\ndandlingly\ndandruff\ndandruffy\ndandy\ndandydom\ndandyish\ndandyism\ndandyize\ndandyling\nDane\nDaneball\nDaneflower\nDanegeld\nDanelaw\nDaneweed\nDanewort\ndang\ndanger\ndangerful\ndangerfully\ndangerless\ndangerous\ndangerously\ndangerousness\ndangersome\ndangle\ndangleberry\ndanglement\ndangler\ndanglin\ndangling\ndanglingly\nDani\nDanian\nDanic\ndanicism\nDaniel\nDaniele\nDanielic\nDanielle\nDaniglacial\ndanio\nDanish\nDanism\nDanite\nDanization\nDanize\ndank\nDankali\ndankish\ndankishness\ndankly\ndankness\ndanli\nDannebrog\ndannemorite\ndanner\nDannie\ndannock\nDanny\ndanoranja\ndansant\ndanseuse\ndanta\nDantean\nDantesque\nDanthonia\nDantist\nDantology\nDantomania\ndanton\nDantonesque\nDantonist\nDantophilist\nDantophily\nDanube\nDanubian\nDanuri\nDanzig\nDanziger\ndao\ndaoine\ndap\nDapedium\nDapedius\nDaphnaceae\nDaphne\nDaphnean\nDaphnephoria\ndaphnetin\nDaphnia\ndaphnin\ndaphnioid\nDaphnis\ndaphnoid\ndapicho\ndapico\ndapifer\ndapper\ndapperling\ndapperly\ndapperness\ndapple\ndappled\ndar\ndarabukka\ndarac\ndaraf\nDarapti\ndarat\ndarbha\ndarby\nDarbyism\nDarbyite\nDarci\nDard\nDardan\ndardanarius\nDardani\ndardanium\ndardaol\nDardic\nDardistan\ndare\ndareall\ndaredevil\ndaredevilism\ndaredevilry\ndaredeviltry\ndareful\nDaren\ndarer\nDares\ndaresay\ndarg\ndargah\ndarger\nDarghin\nDargo\ndargsman\ndargue\ndari\ndaribah\ndaric\nDarien\nDarii\nDarin\ndaring\ndaringly\ndaringness\ndariole\nDarius\nDarjeeling\ndark\ndarken\ndarkener\ndarkening\ndarkful\ndarkhearted\ndarkheartedness\ndarkish\ndarkishness\ndarkle\ndarkling\ndarklings\ndarkly\ndarkmans\ndarkness\ndarkroom\ndarkskin\ndarksome\ndarksomeness\ndarky\ndarling\ndarlingly\ndarlingness\nDarlingtonia\ndarn\ndarnation\ndarned\ndarnel\ndarner\ndarnex\ndarning\ndaroga\ndaroo\ndarr\ndarrein\nDarrell\nDarren\nDarryl\ndarshana\nDarsonval\nDarsonvalism\ndarst\ndart\nDartagnan\ndartars\ndartboard\ndarter\ndarting\ndartingly\ndartingness\ndartle\ndartlike\ndartman\nDartmoor\ndartoic\ndartoid\ndartos\ndartre\ndartrose\ndartrous\ndarts\ndartsman\nDarwinian\nDarwinical\nDarwinically\nDarwinism\nDarwinist\nDarwinistic\nDarwinite\nDarwinize\nDaryl\ndarzee\ndas\nDaschagga\ndash\ndashboard\ndashed\ndashedly\ndashee\ndasheen\ndasher\ndashing\ndashingly\ndashmaker\nDashnak\nDashnakist\nDashnaktzutiun\ndashplate\ndashpot\ndashwheel\ndashy\ndasi\nDasiphora\ndasnt\ndassie\ndassy\ndastard\ndastardize\ndastardliness\ndastardly\ndastur\ndasturi\nDasya\nDasyatidae\nDasyatis\nDasycladaceae\ndasycladaceous\nDasylirion\ndasymeter\ndasypaedal\ndasypaedes\ndasypaedic\nDasypeltis\ndasyphyllous\nDasypodidae\ndasypodoid\nDasyprocta\nDasyproctidae\ndasyproctine\nDasypus\nDasystephana\ndasyure\nDasyuridae\ndasyurine\ndasyuroid\nDasyurus\nDasyus\ndata\ndatable\ndatableness\ndatably\ndataria\ndatary\ndatch\ndatcha\ndate\ndateless\ndatemark\ndater\ndatil\ndating\ndation\nDatisca\nDatiscaceae\ndatiscaceous\ndatiscetin\ndatiscin\ndatiscoside\nDatisi\nDatism\ndatival\ndative\ndatively\ndativogerundial\ndatolite\ndatolitic\ndattock\ndatum\nDatura\ndaturic\ndaturism\ndaub\ndaube\nDaubentonia\nDaubentoniidae\ndauber\ndaubery\ndaubing\ndaubingly\ndaubreeite\ndaubreelite\ndaubster\ndauby\nDaucus\ndaud\ndaughter\ndaughterhood\ndaughterkin\ndaughterless\ndaughterlike\ndaughterliness\ndaughterling\ndaughterly\ndaughtership\nDaulias\ndaunch\ndauncy\nDaunii\ndaunt\ndaunter\ndaunting\ndauntingly\ndauntingness\ndauntless\ndauntlessly\ndauntlessness\ndaunton\ndauphin\ndauphine\ndauphiness\nDaur\nDauri\ndaut\ndautie\ndauw\ndavach\nDavallia\nDave\ndaven\ndavenport\ndaver\ndaverdy\nDavid\nDavidian\nDavidic\nDavidical\nDavidist\ndavidsonite\nDaviesia\ndaviesite\ndavit\ndavoch\nDavy\ndavy\ndavyne\ndaw\ndawdle\ndawdler\ndawdling\ndawdlingly\ndawdy\ndawish\ndawkin\nDawn\ndawn\ndawning\ndawnlight\ndawnlike\ndawnstreak\ndawnward\ndawny\nDawson\nDawsonia\nDawsoniaceae\ndawsoniaceous\ndawsonite\ndawtet\ndawtit\ndawut\nday\ndayabhaga\nDayakker\ndayal\ndaybeam\ndayberry\ndayblush\ndaybook\ndaybreak\ndaydawn\ndaydream\ndaydreamer\ndaydreamy\ndaydrudge\ndayflower\ndayfly\ndaygoing\ndayless\ndaylight\ndaylit\ndaylong\ndayman\ndaymare\ndaymark\ndayroom\ndays\ndayshine\ndaysman\ndayspring\ndaystar\ndaystreak\ndaytale\ndaytide\ndaytime\ndaytimes\ndayward\ndaywork\ndayworker\ndaywrit\nDaza\ndaze\ndazed\ndazedly\ndazedness\ndazement\ndazingly\ndazy\ndazzle\ndazzlement\ndazzler\ndazzlingly\nde\ndeacetylate\ndeacetylation\ndeacidification\ndeacidify\ndeacon\ndeaconal\ndeaconate\ndeaconess\ndeaconhood\ndeaconize\ndeaconry\ndeaconship\ndeactivate\ndeactivation\ndead\ndeadbeat\ndeadborn\ndeadcenter\ndeaden\ndeadener\ndeadening\ndeader\ndeadeye\ndeadfall\ndeadhead\ndeadheadism\ndeadhearted\ndeadheartedly\ndeadheartedness\ndeadhouse\ndeading\ndeadish\ndeadishly\ndeadishness\ndeadlatch\ndeadlight\ndeadlily\ndeadline\ndeadliness\ndeadlock\ndeadly\ndeadman\ndeadmelt\ndeadness\ndeadpan\ndeadpay\ndeadtongue\ndeadwood\ndeadwort\ndeaerate\ndeaeration\ndeaerator\ndeaf\ndeafen\ndeafening\ndeafeningly\ndeafforest\ndeafforestation\ndeafish\ndeafly\ndeafness\ndeair\ndeal\ndealable\ndealate\ndealated\ndealation\ndealbate\ndealbation\ndealbuminize\ndealcoholist\ndealcoholization\ndealcoholize\ndealer\ndealerdom\ndealership\ndealfish\ndealing\ndealkalize\ndealkylate\ndealkylation\ndealt\ndeambulation\ndeambulatory\ndeamidase\ndeamidate\ndeamidation\ndeamidization\ndeamidize\ndeaminase\ndeaminate\ndeamination\ndeaminization\ndeaminize\ndeammonation\nDean\ndean\ndeanathematize\ndeaner\ndeanery\ndeaness\ndeanimalize\ndeanship\ndeanthropomorphic\ndeanthropomorphism\ndeanthropomorphization\ndeanthropomorphize\ndeappetizing\ndeaquation\ndear\ndearborn\ndearie\ndearly\ndearness\ndearomatize\ndearsenicate\ndearsenicator\ndearsenicize\ndearth\ndearthfu\ndearticulation\ndearworth\ndearworthily\ndearworthiness\ndeary\ndeash\ndeasil\ndeaspirate\ndeaspiration\ndeassimilation\ndeath\ndeathbed\ndeathblow\ndeathday\ndeathful\ndeathfully\ndeathfulness\ndeathify\ndeathin\ndeathiness\ndeathless\ndeathlessly\ndeathlessness\ndeathlike\ndeathliness\ndeathling\ndeathly\ndeathroot\ndeathshot\ndeathsman\ndeathtrap\ndeathward\ndeathwards\ndeathwatch\ndeathweed\ndeathworm\ndeathy\ndeave\ndeavely\nDeb\ndeb\ndebacle\ndebadge\ndebamboozle\ndebar\ndebarbarization\ndebarbarize\ndebark\ndebarkation\ndebarkment\ndebarment\ndebarrance\ndebarrass\ndebarration\ndebase\ndebasedness\ndebasement\ndebaser\ndebasingly\ndebatable\ndebate\ndebateful\ndebatefully\ndebatement\ndebater\ndebating\ndebatingly\ndebauch\ndebauched\ndebauchedly\ndebauchedness\ndebauchee\ndebaucher\ndebauchery\ndebauchment\nDebbie\nDebby\ndebby\ndebeige\ndebellate\ndebellation\ndebellator\ndeben\ndebenture\ndebentured\ndebenzolize\nDebi\ndebile\ndebilissima\ndebilitant\ndebilitate\ndebilitated\ndebilitation\ndebilitative\ndebility\ndebind\ndebit\ndebiteuse\ndebituminization\ndebituminize\ndeblaterate\ndeblateration\ndeboistly\ndeboistness\ndebonair\ndebonaire\ndebonairity\ndebonairly\ndebonairness\ndebonnaire\nDeborah\ndebord\ndebordment\ndebosh\ndeboshed\ndebouch\ndebouchment\ndebride\ndebrief\ndebris\ndebrominate\ndebromination\ndebruise\ndebt\ndebtee\ndebtful\ndebtless\ndebtor\ndebtorship\ndebullition\ndebunk\ndebunker\ndebunkment\ndebus\nDebussyan\nDebussyanize\ndebut\ndebutant\ndebutante\ndecachord\ndecad\ndecadactylous\ndecadal\ndecadally\ndecadarch\ndecadarchy\ndecadary\ndecadation\ndecade\ndecadence\ndecadency\ndecadent\ndecadentism\ndecadently\ndecadescent\ndecadianome\ndecadic\ndecadist\ndecadrachm\ndecadrachma\ndecaesarize\ndecaffeinate\ndecaffeinize\ndecafid\ndecagon\ndecagonal\ndecagram\ndecagramme\ndecahedral\ndecahedron\ndecahydrate\ndecahydrated\ndecahydronaphthalene\nDecaisnea\ndecal\ndecalcification\ndecalcifier\ndecalcify\ndecalcomania\ndecalcomaniac\ndecalescence\ndecalescent\nDecalin\ndecaliter\ndecalitre\ndecalobate\nDecalogist\nDecalogue\ndecalvant\ndecalvation\ndecameral\nDecameron\nDecameronic\ndecamerous\ndecameter\ndecametre\ndecamp\ndecampment\ndecan\ndecanal\ndecanally\ndecanate\ndecane\ndecangular\ndecani\ndecanically\ndecannulation\ndecanonization\ndecanonize\ndecant\ndecantate\ndecantation\ndecanter\ndecantherous\ndecap\ndecapetalous\ndecaphyllous\ndecapitable\ndecapitalization\ndecapitalize\ndecapitate\ndecapitation\ndecapitator\ndecapod\nDecapoda\ndecapodal\ndecapodan\ndecapodiform\ndecapodous\ndecapper\ndecapsulate\ndecapsulation\ndecarbonate\ndecarbonator\ndecarbonization\ndecarbonize\ndecarbonized\ndecarbonizer\ndecarboxylate\ndecarboxylation\ndecarboxylization\ndecarboxylize\ndecarburation\ndecarburization\ndecarburize\ndecarch\ndecarchy\ndecardinalize\ndecare\ndecarhinus\ndecarnate\ndecarnated\ndecart\ndecasemic\ndecasepalous\ndecaspermal\ndecaspermous\ndecast\ndecastellate\ndecastere\ndecastich\ndecastyle\ndecasualization\ndecasualize\ndecasyllabic\ndecasyllable\ndecasyllabon\ndecate\ndecathlon\ndecatholicize\ndecatize\ndecatizer\ndecatoic\ndecator\ndecatyl\ndecaudate\ndecaudation\ndecay\ndecayable\ndecayed\ndecayedness\ndecayer\ndecayless\ndecease\ndeceased\ndecedent\ndeceit\ndeceitful\ndeceitfully\ndeceitfulness\ndeceivability\ndeceivable\ndeceivableness\ndeceivably\ndeceive\ndeceiver\ndeceiving\ndeceivingly\ndecelerate\ndeceleration\ndecelerator\ndecelerometer\nDecember\nDecemberish\nDecemberly\nDecembrist\ndecemcostate\ndecemdentate\ndecemfid\ndecemflorous\ndecemfoliate\ndecemfoliolate\ndecemjugate\ndecemlocular\ndecempartite\ndecempeda\ndecempedal\ndecempedate\ndecempennate\ndecemplex\ndecemplicate\ndecempunctate\ndecemstriate\ndecemuiri\ndecemvir\ndecemviral\ndecemvirate\ndecemvirship\ndecenary\ndecence\ndecency\ndecene\ndecennal\ndecennary\ndecennia\ndecenniad\ndecennial\ndecennially\ndecennium\ndecennoval\ndecent\ndecenter\ndecently\ndecentness\ndecentralism\ndecentralist\ndecentralization\ndecentralize\ndecentration\ndecentre\ndecenyl\ndecephalization\ndeceptibility\ndeceptible\ndeception\ndeceptious\ndeceptiously\ndeceptitious\ndeceptive\ndeceptively\ndeceptiveness\ndeceptivity\ndecerebrate\ndecerebration\ndecerebrize\ndecern\ndecerniture\ndecernment\ndecess\ndecession\ndechemicalization\ndechemicalize\ndechenite\nDechlog\ndechlore\ndechlorination\ndechoralize\ndechristianization\ndechristianize\nDecian\ndeciare\ndeciatine\ndecibel\ndeciceronize\ndecidable\ndecide\ndecided\ndecidedly\ndecidedness\ndecider\ndecidingly\ndecidua\ndecidual\ndeciduary\nDeciduata\ndeciduate\ndeciduitis\ndeciduoma\ndeciduous\ndeciduously\ndeciduousness\ndecigram\ndecigramme\ndecil\ndecile\ndeciliter\ndecillion\ndecillionth\ndecima\ndecimal\ndecimalism\ndecimalist\ndecimalization\ndecimalize\ndecimally\ndecimate\ndecimation\ndecimator\ndecimestrial\ndecimeter\ndecimolar\ndecimole\ndecimosexto\nDecimus\ndecinormal\ndecipher\ndecipherability\ndecipherable\ndecipherably\ndecipherer\ndecipherment\ndecipium\ndecipolar\ndecision\ndecisional\ndecisive\ndecisively\ndecisiveness\ndecistere\ndecitizenize\nDecius\ndecivilization\ndecivilize\ndeck\ndecke\ndecked\ndeckel\ndecker\ndeckhead\ndeckhouse\ndeckie\ndecking\ndeckle\ndeckload\ndeckswabber\ndeclaim\ndeclaimant\ndeclaimer\ndeclamation\ndeclamatoriness\ndeclamatory\ndeclarable\ndeclarant\ndeclaration\ndeclarative\ndeclaratively\ndeclarator\ndeclaratorily\ndeclaratory\ndeclare\ndeclared\ndeclaredly\ndeclaredness\ndeclarer\ndeclass\ndeclassicize\ndeclassify\ndeclension\ndeclensional\ndeclensionally\ndeclericalize\ndeclimatize\ndeclinable\ndeclinal\ndeclinate\ndeclination\ndeclinational\ndeclinatory\ndeclinature\ndecline\ndeclined\ndeclinedness\ndecliner\ndeclinograph\ndeclinometer\ndeclivate\ndeclive\ndeclivitous\ndeclivity\ndeclivous\ndeclutch\ndecoagulate\ndecoagulation\ndecoat\ndecocainize\ndecoct\ndecoctible\ndecoction\ndecoctive\ndecoctum\ndecode\nDecodon\ndecohere\ndecoherence\ndecoherer\ndecohesion\ndecoic\ndecoke\ndecollate\ndecollated\ndecollation\ndecollator\ndecolletage\ndecollete\ndecolor\ndecolorant\ndecolorate\ndecoloration\ndecolorimeter\ndecolorization\ndecolorize\ndecolorizer\ndecolour\ndecommission\ndecompensate\ndecompensation\ndecomplex\ndecomponible\ndecomposability\ndecomposable\ndecompose\ndecomposed\ndecomposer\ndecomposite\ndecomposition\ndecomposure\ndecompound\ndecompoundable\ndecompoundly\ndecompress\ndecompressing\ndecompression\ndecompressive\ndeconcatenate\ndeconcentrate\ndeconcentration\ndeconcentrator\ndecongestive\ndeconsecrate\ndeconsecration\ndeconsider\ndeconsideration\ndecontaminate\ndecontamination\ndecontrol\ndeconventionalize\ndecopperization\ndecopperize\ndecorability\ndecorable\ndecorably\ndecorament\ndecorate\ndecorated\ndecoration\ndecorationist\ndecorative\ndecoratively\ndecorativeness\ndecorator\ndecoratory\ndecorist\ndecorous\ndecorously\ndecorousness\ndecorrugative\ndecorticate\ndecortication\ndecorticator\ndecorticosis\ndecorum\ndecostate\ndecoy\ndecoyer\ndecoyman\ndecrassify\ndecream\ndecrease\ndecreaseless\ndecreasing\ndecreasingly\ndecreation\ndecreative\ndecree\ndecreeable\ndecreement\ndecreer\ndecreet\ndecrement\ndecrementless\ndecremeter\ndecrepit\ndecrepitate\ndecrepitation\ndecrepitly\ndecrepitness\ndecrepitude\ndecrescence\ndecrescendo\ndecrescent\ndecretal\ndecretalist\ndecrete\ndecretist\ndecretive\ndecretively\ndecretorial\ndecretorily\ndecretory\ndecretum\ndecrew\ndecrial\ndecried\ndecrier\ndecrown\ndecrudescence\ndecrustation\ndecry\ndecrystallization\ndecubital\ndecubitus\ndecultivate\ndeculturate\ndecuman\ndecumana\ndecumanus\nDecumaria\ndecumary\ndecumbence\ndecumbency\ndecumbent\ndecumbently\ndecumbiture\ndecuple\ndecuplet\ndecuria\ndecurion\ndecurionate\ndecurrence\ndecurrency\ndecurrent\ndecurrently\ndecurring\ndecursion\ndecursive\ndecursively\ndecurtate\ndecurvation\ndecurvature\ndecurve\ndecury\ndecus\ndecussate\ndecussated\ndecussately\ndecussation\ndecussis\ndecussorium\ndecyl\ndecylene\ndecylenic\ndecylic\ndecyne\nDedan\nDedanim\nDedanite\ndedecorate\ndedecoration\ndedecorous\ndedendum\ndedentition\ndedicant\ndedicate\ndedicatee\ndedication\ndedicational\ndedicative\ndedicator\ndedicatorial\ndedicatorily\ndedicatory\ndedicature\ndedifferentiate\ndedifferentiation\ndedimus\ndeditician\ndediticiancy\ndedition\ndedo\ndedoggerelize\ndedogmatize\ndedolation\ndeduce\ndeducement\ndeducibility\ndeducible\ndeducibleness\ndeducibly\ndeducive\ndeduct\ndeductible\ndeduction\ndeductive\ndeductively\ndeductory\ndeduplication\ndee\ndeed\ndeedbox\ndeedeed\ndeedful\ndeedfully\ndeedily\ndeediness\ndeedless\ndeedy\ndeem\ndeemer\ndeemie\ndeemster\ndeemstership\ndeep\ndeepen\ndeepener\ndeepening\ndeepeningly\nDeepfreeze\ndeeping\ndeepish\ndeeplier\ndeeply\ndeepmost\ndeepmouthed\ndeepness\ndeepsome\ndeepwater\ndeepwaterman\ndeer\ndeerberry\ndeerdog\ndeerdrive\ndeerfood\ndeerhair\ndeerherd\ndeerhorn\ndeerhound\ndeerlet\ndeermeat\ndeerskin\ndeerstalker\ndeerstalking\ndeerstand\ndeerstealer\ndeertongue\ndeerweed\ndeerwood\ndeeryard\ndeevey\ndeevilick\ndeface\ndefaceable\ndefacement\ndefacer\ndefacing\ndefacingly\ndefalcate\ndefalcation\ndefalcator\ndefalk\ndefamation\ndefamatory\ndefame\ndefamed\ndefamer\ndefamingly\ndefassa\ndefat\ndefault\ndefaultant\ndefaulter\ndefaultless\ndefaulture\ndefeasance\ndefeasanced\ndefease\ndefeasibility\ndefeasible\ndefeasibleness\ndefeat\ndefeater\ndefeatism\ndefeatist\ndefeatment\ndefeature\ndefecant\ndefecate\ndefecation\ndefecator\ndefect\ndefectibility\ndefectible\ndefection\ndefectionist\ndefectious\ndefective\ndefectively\ndefectiveness\ndefectless\ndefectology\ndefector\ndefectoscope\ndefedation\ndefeminize\ndefence\ndefend\ndefendable\ndefendant\ndefender\ndefendress\ndefenestration\ndefensative\ndefense\ndefenseless\ndefenselessly\ndefenselessness\ndefensibility\ndefensible\ndefensibleness\ndefensibly\ndefension\ndefensive\ndefensively\ndefensiveness\ndefensor\ndefensorship\ndefensory\ndefer\ndeferable\ndeference\ndeferent\ndeferentectomy\ndeferential\ndeferentiality\ndeferentially\ndeferentitis\ndeferment\ndeferrable\ndeferral\ndeferred\ndeferrer\ndeferrization\ndeferrize\ndefervesce\ndefervescence\ndefervescent\ndefeudalize\ndefiable\ndefial\ndefiance\ndefiant\ndefiantly\ndefiantness\ndefiber\ndefibrinate\ndefibrination\ndefibrinize\ndeficience\ndeficiency\ndeficient\ndeficiently\ndeficit\ndefier\ndefiguration\ndefilade\ndefile\ndefiled\ndefiledness\ndefilement\ndefiler\ndefiliation\ndefiling\ndefilingly\ndefinability\ndefinable\ndefinably\ndefine\ndefined\ndefinedly\ndefinement\ndefiner\ndefiniendum\ndefiniens\ndefinite\ndefinitely\ndefiniteness\ndefinition\ndefinitional\ndefinitiones\ndefinitive\ndefinitively\ndefinitiveness\ndefinitization\ndefinitize\ndefinitor\ndefinitude\ndeflagrability\ndeflagrable\ndeflagrate\ndeflagration\ndeflagrator\ndeflate\ndeflation\ndeflationary\ndeflationist\ndeflator\ndeflect\ndeflectable\ndeflected\ndeflection\ndeflectionization\ndeflectionize\ndeflective\ndeflectometer\ndeflector\ndeflesh\ndeflex\ndeflexibility\ndeflexible\ndeflexion\ndeflexure\ndeflocculant\ndeflocculate\ndeflocculation\ndeflocculator\ndeflorate\ndefloration\ndeflorescence\ndeflower\ndeflowerer\ndefluent\ndefluous\ndefluvium\ndefluxion\ndefoedation\ndefog\ndefoliage\ndefoliate\ndefoliated\ndefoliation\ndefoliator\ndeforce\ndeforcement\ndeforceor\ndeforcer\ndeforciant\ndeforest\ndeforestation\ndeforester\ndeform\ndeformability\ndeformable\ndeformalize\ndeformation\ndeformational\ndeformative\ndeformed\ndeformedly\ndeformedness\ndeformer\ndeformeter\ndeformism\ndeformity\ndefortify\ndefoul\ndefraud\ndefraudation\ndefrauder\ndefraudment\ndefray\ndefrayable\ndefrayal\ndefrayer\ndefrayment\ndefreeze\ndefrication\ndefrock\ndefrost\ndefroster\ndeft\ndefterdar\ndeftly\ndeftness\ndefunct\ndefunction\ndefunctionalization\ndefunctionalize\ndefunctness\ndefuse\ndefusion\ndefy\ndefyingly\ndeg\ndeganglionate\ndegarnish\ndegas\ndegasification\ndegasifier\ndegasify\ndegasser\ndegauss\ndegelatinize\ndegelation\ndegeneracy\ndegeneralize\ndegenerate\ndegenerately\ndegenerateness\ndegeneration\ndegenerationist\ndegenerative\ndegenerescence\ndegenerescent\ndegentilize\ndegerm\ndegerminate\ndegerminator\ndegged\ndegger\ndeglaciation\ndeglaze\ndeglutinate\ndeglutination\ndeglutition\ndeglutitious\ndeglutitive\ndeglutitory\ndeglycerin\ndeglycerine\ndegorge\ndegradable\ndegradand\ndegradation\ndegradational\ndegradative\ndegrade\ndegraded\ndegradedly\ndegradedness\ndegradement\ndegrader\ndegrading\ndegradingly\ndegradingness\ndegraduate\ndegraduation\ndegrain\ndegrease\ndegreaser\ndegree\ndegreeless\ndegreewise\ndegression\ndegressive\ndegressively\ndegu\nDeguelia\ndeguelin\ndegum\ndegummer\ndegust\ndegustation\ndehair\ndehairer\nDehaites\ndeheathenize\ndehematize\ndehepatize\nDehgan\ndehisce\ndehiscence\ndehiscent\ndehistoricize\nDehkan\ndehnstufe\ndehonestate\ndehonestation\ndehorn\ndehorner\ndehors\ndehort\ndehortation\ndehortative\ndehortatory\ndehorter\ndehull\ndehumanization\ndehumanize\ndehumidification\ndehumidifier\ndehumidify\ndehusk\nDehwar\ndehydrant\ndehydrase\ndehydrate\ndehydration\ndehydrator\ndehydroascorbic\ndehydrocorydaline\ndehydrofreezing\ndehydrogenase\ndehydrogenate\ndehydrogenation\ndehydrogenization\ndehydrogenize\ndehydromucic\ndehydrosparteine\ndehypnotize\ndeice\ndeicer\ndeicidal\ndeicide\ndeictic\ndeictical\ndeictically\ndeidealize\nDeidesheimer\ndeific\ndeifical\ndeification\ndeificatory\ndeifier\ndeiform\ndeiformity\ndeify\ndeign\nDeimos\ndeincrustant\ndeindividualization\ndeindividualize\ndeindividuate\ndeindustrialization\ndeindustrialize\ndeink\nDeino\nDeinocephalia\nDeinoceras\nDeinodon\nDeinodontidae\ndeinos\nDeinosauria\nDeinotherium\ndeinsularize\ndeintellectualization\ndeintellectualize\ndeionize\nDeipara\ndeiparous\nDeiphobus\ndeipnodiplomatic\ndeipnophobia\ndeipnosophism\ndeipnosophist\ndeipnosophistic\ndeipotent\nDeirdre\ndeiseal\ndeisidaimonia\ndeism\ndeist\ndeistic\ndeistical\ndeistically\ndeisticalness\ndeity\ndeityship\ndeject\ndejecta\ndejected\ndejectedly\ndejectedness\ndejectile\ndejection\ndejectly\ndejectory\ndejecture\ndejerate\ndejeration\ndejerator\ndejeune\ndejeuner\ndejunkerize\nDekabrist\ndekaparsec\ndekapode\ndekko\ndekle\ndeknight\nDel\ndelabialization\ndelabialize\ndelacrimation\ndelactation\ndelaine\ndelaminate\ndelamination\ndelapse\ndelapsion\ndelate\ndelater\ndelatinization\ndelatinize\ndelation\ndelator\ndelatorian\nDelaware\nDelawarean\ndelawn\ndelay\ndelayable\ndelayage\ndelayer\ndelayful\ndelaying\ndelayingly\nDelbert\ndele\ndelead\ndelectability\ndelectable\ndelectableness\ndelectably\ndelectate\ndelectation\ndelectus\ndelegable\ndelegacy\ndelegalize\ndelegant\ndelegate\ndelegatee\ndelegateship\ndelegation\ndelegative\ndelegator\ndelegatory\ndelenda\nDelesseria\nDelesseriaceae\ndelesseriaceous\ndelete\ndeleterious\ndeleteriously\ndeleteriousness\ndeletion\ndeletive\ndeletory\ndelf\ndelft\ndelftware\nDelhi\nDelia\nDelian\ndeliberalization\ndeliberalize\ndeliberant\ndeliberate\ndeliberately\ndeliberateness\ndeliberation\ndeliberative\ndeliberatively\ndeliberativeness\ndeliberator\ndelible\ndelicacy\ndelicate\ndelicately\ndelicateness\ndelicatesse\ndelicatessen\ndelicense\nDelichon\ndelicioso\nDelicious\ndelicious\ndeliciously\ndeliciousness\ndelict\ndelictum\ndeligated\ndeligation\ndelight\ndelightable\ndelighted\ndelightedly\ndelightedness\ndelighter\ndelightful\ndelightfully\ndelightfulness\ndelighting\ndelightingly\ndelightless\ndelightsome\ndelightsomely\ndelightsomeness\ndelignate\ndelignification\nDelilah\ndelime\ndelimit\ndelimitate\ndelimitation\ndelimitative\ndelimiter\ndelimitize\ndelineable\ndelineament\ndelineate\ndelineation\ndelineative\ndelineator\ndelineatory\ndelineature\ndelinquence\ndelinquency\ndelinquent\ndelinquently\ndelint\ndelinter\ndeliquesce\ndeliquescence\ndeliquescent\ndeliquium\ndeliracy\ndelirament\ndeliration\ndeliriant\ndelirifacient\ndelirious\ndeliriously\ndeliriousness\ndelirium\ndelitescence\ndelitescency\ndelitescent\ndeliver\ndeliverable\ndeliverance\ndeliverer\ndeliveress\ndeliveror\ndelivery\ndeliveryman\ndell\nDella\ndellenite\nDelobranchiata\ndelocalization\ndelocalize\ndelomorphic\ndelomorphous\ndeloul\ndelouse\ndelphacid\nDelphacidae\nDelphian\nDelphin\nDelphinapterus\ndelphine\ndelphinic\nDelphinid\nDelphinidae\ndelphinin\ndelphinine\ndelphinite\nDelphinium\nDelphinius\ndelphinoid\nDelphinoidea\ndelphinoidine\nDelphinus\ndelphocurarine\nDelsarte\nDelsartean\nDelsartian\nDelta\ndelta\ndeltafication\ndeltaic\ndeltal\ndeltarium\ndeltation\ndelthyrial\ndelthyrium\ndeltic\ndeltidial\ndeltidium\ndeltiology\ndeltohedron\ndeltoid\ndeltoidal\ndelubrum\ndeludable\ndelude\ndeluder\ndeludher\ndeluding\ndeludingly\ndeluge\ndeluminize\ndelundung\ndelusion\ndelusional\ndelusionist\ndelusive\ndelusively\ndelusiveness\ndelusory\ndeluster\ndeluxe\ndelve\ndelver\ndemagnetizable\ndemagnetization\ndemagnetize\ndemagnetizer\ndemagog\ndemagogic\ndemagogical\ndemagogically\ndemagogism\ndemagogue\ndemagoguery\ndemagogy\ndemal\ndemand\ndemandable\ndemandant\ndemander\ndemanding\ndemandingly\ndemanganization\ndemanganize\ndemantoid\ndemarcate\ndemarcation\ndemarcator\ndemarch\ndemarchy\ndemargarinate\ndemark\ndemarkation\ndemast\ndematerialization\ndematerialize\nDematiaceae\ndematiaceous\ndeme\ndemean\ndemeanor\ndemegoric\ndemency\ndement\ndementate\ndementation\ndemented\ndementedly\ndementedness\ndementholize\ndementia\ndemephitize\ndemerit\ndemeritorious\ndemeritoriously\nDemerol\ndemersal\ndemersed\ndemersion\ndemesman\ndemesmerize\ndemesne\ndemesnial\ndemetallize\ndemethylate\ndemethylation\nDemetrian\ndemetricize\ndemi\ndemiadult\ndemiangel\ndemiassignation\ndemiatheism\ndemiatheist\ndemibarrel\ndemibastion\ndemibastioned\ndemibath\ndemibeast\ndemibelt\ndemibob\ndemibombard\ndemibrassart\ndemibrigade\ndemibrute\ndemibuckram\ndemicadence\ndemicannon\ndemicanon\ndemicanton\ndemicaponier\ndemichamfron\ndemicircle\ndemicircular\ndemicivilized\ndemicolumn\ndemicoronal\ndemicritic\ndemicuirass\ndemiculverin\ndemicylinder\ndemicylindrical\ndemidandiprat\ndemideify\ndemideity\ndemidevil\ndemidigested\ndemidistance\ndemiditone\ndemidoctor\ndemidog\ndemidolmen\ndemidome\ndemieagle\ndemifarthing\ndemifigure\ndemiflouncing\ndemifusion\ndemigardebras\ndemigauntlet\ndemigentleman\ndemiglobe\ndemigod\ndemigoddess\ndemigoddessship\ndemigorge\ndemigriffin\ndemigroat\ndemihag\ndemihearse\ndemiheavenly\ndemihigh\ndemihogshead\ndemihorse\ndemihuman\ndemijambe\ndemijohn\ndemikindred\ndemiking\ndemilance\ndemilancer\ndemilawyer\ndemilegato\ndemilion\ndemilitarization\ndemilitarize\ndemiliterate\ndemilune\ndemiluster\ndemilustre\ndemiman\ndemimark\ndemimentoniere\ndemimetope\ndemimillionaire\ndemimondaine\ndemimonde\ndemimonk\ndeminatured\ndemineralization\ndemineralize\ndeminude\ndeminudity\ndemioctagonal\ndemioctangular\ndemiofficial\ndemiorbit\ndemiourgoi\ndemiowl\ndemiox\ndemipagan\ndemiparallel\ndemipauldron\ndemipectinate\ndemipesade\ndemipike\ndemipillar\ndemipique\ndemiplacate\ndemiplate\ndemipomada\ndemipremise\ndemipremiss\ndemipriest\ndemipronation\ndemipuppet\ndemiquaver\ndemiracle\ndemiram\ndemirelief\ndemirep\ndemirevetment\ndemirhumb\ndemirilievo\ndemirobe\ndemisability\ndemisable\ndemisacrilege\ndemisang\ndemisangue\ndemisavage\ndemise\ndemiseason\ndemisecond\ndemisemiquaver\ndemisemitone\ndemisheath\ndemishirt\ndemisovereign\ndemisphere\ndemiss\ndemission\ndemissionary\ndemissly\ndemissness\ndemissory\ndemisuit\ndemit\ndemitasse\ndemitint\ndemitoilet\ndemitone\ndemitrain\ndemitranslucence\ndemitube\ndemiturned\ndemiurge\ndemiurgeous\ndemiurgic\ndemiurgical\ndemiurgically\ndemiurgism\ndemivambrace\ndemivirgin\ndemivoice\ndemivol\ndemivolt\ndemivotary\ndemiwivern\ndemiwolf\ndemnition\ndemob\ndemobilization\ndemobilize\ndemocracy\ndemocrat\ndemocratian\ndemocratic\ndemocratical\ndemocratically\ndemocratifiable\ndemocratism\ndemocratist\ndemocratization\ndemocratize\ndemodectic\ndemoded\nDemodex\nDemodicidae\nDemodocus\ndemodulation\ndemodulator\ndemogenic\nDemogorgon\ndemographer\ndemographic\ndemographical\ndemographically\ndemographist\ndemography\ndemoid\ndemoiselle\ndemolish\ndemolisher\ndemolishment\ndemolition\ndemolitionary\ndemolitionist\ndemological\ndemology\nDemon\ndemon\ndemonastery\ndemoness\ndemonetization\ndemonetize\ndemoniac\ndemoniacal\ndemoniacally\ndemoniacism\ndemonial\ndemonian\ndemonianism\ndemoniast\ndemonic\ndemonical\ndemonifuge\ndemonish\ndemonism\ndemonist\ndemonize\ndemonkind\ndemonland\ndemonlike\ndemonocracy\ndemonograph\ndemonographer\ndemonography\ndemonolater\ndemonolatrous\ndemonolatrously\ndemonolatry\ndemonologer\ndemonologic\ndemonological\ndemonologically\ndemonologist\ndemonology\ndemonomancy\ndemonophobia\ndemonry\ndemonship\ndemonstrability\ndemonstrable\ndemonstrableness\ndemonstrably\ndemonstrant\ndemonstratable\ndemonstrate\ndemonstratedly\ndemonstrater\ndemonstration\ndemonstrational\ndemonstrationist\ndemonstrative\ndemonstratively\ndemonstrativeness\ndemonstrator\ndemonstratorship\ndemonstratory\ndemophil\ndemophilism\ndemophobe\nDemophon\nDemophoon\ndemoralization\ndemoralize\ndemoralizer\ndemorphinization\ndemorphism\ndemos\nDemospongiae\nDemosthenean\nDemosthenic\ndemote\ndemotic\ndemotics\ndemotion\ndemotist\ndemount\ndemountability\ndemountable\ndempster\ndemulce\ndemulcent\ndemulsibility\ndemulsify\ndemulsion\ndemure\ndemurely\ndemureness\ndemurity\ndemurrable\ndemurrage\ndemurral\ndemurrant\ndemurrer\ndemurring\ndemurringly\ndemutization\ndemy\ndemyship\nden\ndenarcotization\ndenarcotize\ndenarius\ndenaro\ndenary\ndenat\ndenationalization\ndenationalize\ndenaturalization\ndenaturalize\ndenaturant\ndenaturate\ndenaturation\ndenature\ndenaturization\ndenaturize\ndenaturizer\ndenazify\ndenda\ndendrachate\ndendral\nDendraspis\ndendraxon\ndendric\ndendriform\ndendrite\nDendrites\ndendritic\ndendritical\ndendritically\ndendritiform\nDendrium\nDendrobates\nDendrobatinae\ndendrobe\nDendrobium\nDendrocalamus\nDendroceratina\ndendroceratine\nDendrochirota\ndendrochronological\ndendrochronologist\ndendrochronology\ndendroclastic\nDendrocoela\ndendrocoelan\ndendrocoele\ndendrocoelous\nDendrocolaptidae\ndendrocolaptine\nDendroctonus\nDendrocygna\ndendrodont\nDendrodus\nDendroeca\nDendrogaea\nDendrogaean\ndendrograph\ndendrography\nDendrohyrax\nDendroica\ndendroid\ndendroidal\nDendroidea\nDendrolagus\ndendrolatry\nDendrolene\ndendrolite\ndendrologic\ndendrological\ndendrologist\ndendrologous\ndendrology\nDendromecon\ndendrometer\ndendron\ndendrophil\ndendrophile\ndendrophilous\nDendropogon\nDene\ndene\nDeneb\nDenebola\ndenegate\ndenegation\ndenehole\ndenervate\ndenervation\ndeneutralization\ndengue\ndeniable\ndenial\ndenicotinize\ndenier\ndenierage\ndenierer\ndenigrate\ndenigration\ndenigrator\ndenim\nDenis\ndenitrate\ndenitration\ndenitrator\ndenitrificant\ndenitrification\ndenitrificator\ndenitrifier\ndenitrify\ndenitrize\ndenization\ndenizen\ndenizenation\ndenizenize\ndenizenship\nDenmark\ndennet\nDennis\nDennstaedtia\ndenominable\ndenominate\ndenomination\ndenominational\ndenominationalism\ndenominationalist\ndenominationalize\ndenominationally\ndenominative\ndenominatively\ndenominator\ndenotable\ndenotation\ndenotative\ndenotatively\ndenotativeness\ndenotatum\ndenote\ndenotement\ndenotive\ndenouement\ndenounce\ndenouncement\ndenouncer\ndense\ndensely\ndensen\ndenseness\ndenshare\ndensher\ndenshire\ndensification\ndensifier\ndensify\ndensimeter\ndensimetric\ndensimetrically\ndensimetry\ndensitometer\ndensity\ndent\ndentagra\ndental\ndentale\ndentalgia\nDentaliidae\ndentalism\ndentality\nDentalium\ndentalization\ndentalize\ndentally\ndentaphone\nDentaria\ndentary\ndentata\ndentate\ndentated\ndentately\ndentation\ndentatoangulate\ndentatocillitate\ndentatocostate\ndentatocrenate\ndentatoserrate\ndentatosetaceous\ndentatosinuate\ndentel\ndentelated\ndentelle\ndentelure\ndenter\ndentex\ndentical\ndenticate\nDenticeti\ndenticle\ndenticular\ndenticulate\ndenticulately\ndenticulation\ndenticule\ndentiferous\ndentification\ndentiform\ndentifrice\ndentigerous\ndentil\ndentilabial\ndentilated\ndentilation\ndentile\ndentilingual\ndentiloquist\ndentiloquy\ndentimeter\ndentin\ndentinal\ndentinalgia\ndentinasal\ndentine\ndentinitis\ndentinoblast\ndentinocemental\ndentinoid\ndentinoma\ndentiparous\ndentiphone\ndentiroster\ndentirostral\ndentirostrate\nDentirostres\ndentiscalp\ndentist\ndentistic\ndentistical\ndentistry\ndentition\ndentoid\ndentolabial\ndentolingual\ndentonasal\ndentosurgical\ndentural\ndenture\ndenty\ndenucleate\ndenudant\ndenudate\ndenudation\ndenudative\ndenude\ndenuder\ndenumerable\ndenumerably\ndenumeral\ndenumerant\ndenumerantive\ndenumeration\ndenumerative\ndenunciable\ndenunciant\ndenunciate\ndenunciation\ndenunciative\ndenunciatively\ndenunciator\ndenunciatory\ndenutrition\ndeny\ndenyingly\ndeobstruct\ndeobstruent\ndeoccidentalize\ndeoculate\ndeodand\ndeodara\ndeodorant\ndeodorization\ndeodorize\ndeodorizer\ndeontological\ndeontologist\ndeontology\ndeoperculate\ndeoppilant\ndeoppilate\ndeoppilation\ndeoppilative\ndeordination\ndeorganization\ndeorganize\ndeorientalize\ndeorsumvergence\ndeorsumversion\ndeorusumduction\ndeossification\ndeossify\ndeota\ndeoxidant\ndeoxidate\ndeoxidation\ndeoxidative\ndeoxidator\ndeoxidization\ndeoxidize\ndeoxidizer\ndeoxygenate\ndeoxygenation\ndeoxygenization\ndeozonization\ndeozonize\ndeozonizer\ndepa\ndepaganize\ndepaint\ndepancreatization\ndepancreatize\ndepark\ndeparliament\ndepart\ndeparted\ndeparter\ndepartisanize\ndepartition\ndepartment\ndepartmental\ndepartmentalism\ndepartmentalization\ndepartmentalize\ndepartmentally\ndepartmentization\ndepartmentize\ndeparture\ndepas\ndepascent\ndepass\ndepasturable\ndepasturage\ndepasturation\ndepasture\ndepatriate\ndepauperate\ndepauperation\ndepauperization\ndepauperize\ndepencil\ndepend\ndependability\ndependable\ndependableness\ndependably\ndependence\ndependency\ndependent\ndependently\ndepender\ndepending\ndependingly\ndepeople\ndeperdite\ndeperditely\ndeperition\ndepersonalization\ndepersonalize\ndepersonize\ndepetalize\ndepeter\ndepetticoat\ndephase\ndephilosophize\ndephlegmate\ndephlegmation\ndephlegmatize\ndephlegmator\ndephlegmatory\ndephlegmedness\ndephlogisticate\ndephlogisticated\ndephlogistication\ndephosphorization\ndephosphorize\ndephysicalization\ndephysicalize\ndepickle\ndepict\ndepicter\ndepiction\ndepictive\ndepicture\ndepiedmontize\ndepigment\ndepigmentate\ndepigmentation\ndepigmentize\ndepilate\ndepilation\ndepilator\ndepilatory\ndepilitant\ndepilous\ndeplaceable\ndeplane\ndeplasmolysis\ndeplaster\ndeplenish\ndeplete\ndeplethoric\ndepletion\ndepletive\ndepletory\ndeploitation\ndeplorability\ndeplorable\ndeplorableness\ndeplorably\ndeploration\ndeplore\ndeplored\ndeploredly\ndeploredness\ndeplorer\ndeploringly\ndeploy\ndeployment\ndeplumate\ndeplumated\ndeplumation\ndeplume\ndeplump\ndepoetize\ndepoh\ndepolarization\ndepolarize\ndepolarizer\ndepolish\ndepolishing\ndepolymerization\ndepolymerize\ndepone\ndeponent\ndepopularize\ndepopulate\ndepopulation\ndepopulative\ndepopulator\ndeport\ndeportable\ndeportation\ndeportee\ndeporter\ndeportment\ndeposable\ndeposal\ndepose\ndeposer\ndeposit\ndepositary\ndepositation\ndepositee\ndeposition\ndepositional\ndepositive\ndepositor\ndepository\ndepositum\ndepositure\ndepot\ndepotentiate\ndepotentiation\ndepravation\ndeprave\ndepraved\ndepravedly\ndepravedness\ndepraver\ndepravingly\ndepravity\ndeprecable\ndeprecate\ndeprecatingly\ndeprecation\ndeprecative\ndeprecator\ndeprecatorily\ndeprecatoriness\ndeprecatory\ndepreciable\ndepreciant\ndepreciate\ndepreciatingly\ndepreciation\ndepreciative\ndepreciatively\ndepreciator\ndepreciatoriness\ndepreciatory\ndepredate\ndepredation\ndepredationist\ndepredator\ndepredatory\ndepress\ndepressant\ndepressed\ndepressibility\ndepressible\ndepressing\ndepressingly\ndepressingness\ndepression\ndepressive\ndepressively\ndepressiveness\ndepressomotor\ndepressor\ndepreter\ndeprint\ndepriorize\ndeprivable\ndeprival\ndeprivate\ndeprivation\ndeprivative\ndeprive\ndeprivement\ndepriver\ndeprovincialize\ndepside\ndepth\ndepthen\ndepthing\ndepthless\ndepthometer\ndepthwise\ndepullulation\ndepurant\ndepurate\ndepuration\ndepurative\ndepurator\ndepuratory\ndepursement\ndeputable\ndeputation\ndeputational\ndeputationist\ndeputationize\ndeputative\ndeputatively\ndeputator\ndepute\ndeputize\ndeputy\ndeputyship\ndequeen\nderabbinize\nderacialize\nderacinate\nderacination\nderadelphus\nderadenitis\nderadenoncus\nderah\nderaign\nderail\nderailer\nderailment\nderange\nderangeable\nderanged\nderangement\nderanger\nderat\nderate\nderater\nderationalization\nderationalize\nderatization\nderay\nDerbend\nDerby\nderby\nderbylite\ndere\nderegister\nderegulationize\ndereism\ndereistic\ndereistically\nDerek\nderelict\ndereliction\nderelictly\nderelictness\ndereligion\ndereligionize\nderencephalocele\nderencephalus\nderesinate\nderesinize\nderic\nderide\nderider\nderidingly\nDeringa\nDeripia\nderisible\nderision\nderisive\nderisively\nderisiveness\nderisory\nderivability\nderivable\nderivably\nderival\nderivant\nderivate\nderivately\nderivation\nderivational\nderivationally\nderivationist\nderivatist\nderivative\nderivatively\nderivativeness\nderive\nderived\nderivedly\nderivedness\nderiver\nderm\nderma\nDermacentor\ndermad\ndermahemia\ndermal\ndermalgia\ndermalith\ndermamyiasis\ndermanaplasty\ndermapostasis\nDermaptera\ndermapteran\ndermapterous\ndermaskeleton\ndermasurgery\ndermatagra\ndermatalgia\ndermataneuria\ndermatatrophia\ndermatauxe\ndermathemia\ndermatic\ndermatine\ndermatitis\nDermatobia\ndermatocele\ndermatocellulitis\ndermatoconiosis\nDermatocoptes\ndermatocoptic\ndermatocyst\ndermatodynia\ndermatogen\ndermatoglyphics\ndermatograph\ndermatographia\ndermatography\ndermatoheteroplasty\ndermatoid\ndermatological\ndermatologist\ndermatology\ndermatolysis\ndermatoma\ndermatome\ndermatomere\ndermatomic\ndermatomuscular\ndermatomyces\ndermatomycosis\ndermatomyoma\ndermatoneural\ndermatoneurology\ndermatoneurosis\ndermatonosus\ndermatopathia\ndermatopathic\ndermatopathology\ndermatopathophobia\nDermatophagus\ndermatophobia\ndermatophone\ndermatophony\ndermatophyte\ndermatophytic\ndermatophytosis\ndermatoplasm\ndermatoplast\ndermatoplastic\ndermatoplasty\ndermatopnagic\ndermatopsy\nDermatoptera\ndermatoptic\ndermatorrhagia\ndermatorrhea\ndermatorrhoea\ndermatosclerosis\ndermatoscopy\ndermatosis\ndermatoskeleton\ndermatotherapy\ndermatotome\ndermatotomy\ndermatotropic\ndermatoxerasia\ndermatozoon\ndermatozoonosis\ndermatrophia\ndermatrophy\ndermenchysis\nDermestes\ndermestid\nDermestidae\ndermestoid\ndermic\ndermis\ndermitis\ndermoblast\nDermobranchia\ndermobranchiata\ndermobranchiate\nDermochelys\ndermochrome\ndermococcus\ndermogastric\ndermographia\ndermographic\ndermographism\ndermography\ndermohemal\ndermohemia\ndermohumeral\ndermoid\ndermoidal\ndermoidectomy\ndermol\ndermolysis\ndermomuscular\ndermomycosis\ndermoneural\ndermoneurosis\ndermonosology\ndermoosseous\ndermoossification\ndermopathic\ndermopathy\ndermophlebitis\ndermophobe\ndermophyte\ndermophytic\ndermoplasty\nDermoptera\ndermopteran\ndermopterous\ndermoreaction\nDermorhynchi\ndermorhynchous\ndermosclerite\ndermoskeletal\ndermoskeleton\ndermostenosis\ndermostosis\ndermosynovitis\ndermotropic\ndermovaccine\ndermutation\ndern\ndernier\nderodidymus\nderogate\nderogately\nderogation\nderogative\nderogatively\nderogator\nderogatorily\nderogatoriness\nderogatory\nDerotrema\nDerotremata\nderotremate\nderotrematous\nderotreme\nderout\nDerrick\nderrick\nderricking\nderrickman\nderride\nderries\nderringer\nDerris\nderry\ndertrotheca\ndertrum\nderuinate\nderuralize\nderust\ndervish\ndervishhood\ndervishism\ndervishlike\ndesaccharification\ndesacralization\ndesacralize\ndesalt\ndesamidization\ndesand\ndesaturate\ndesaturation\ndesaurin\ndescale\ndescant\ndescanter\ndescantist\ndescend\ndescendable\ndescendance\ndescendant\ndescendence\ndescendent\ndescendental\ndescendentalism\ndescendentalist\ndescendentalistic\ndescender\ndescendibility\ndescendible\ndescending\ndescendingly\ndescension\ndescensional\ndescensionist\ndescensive\ndescent\nDeschampsia\ndescloizite\ndescort\ndescribability\ndescribable\ndescribably\ndescribe\ndescriber\ndescrier\ndescript\ndescription\ndescriptionist\ndescriptionless\ndescriptive\ndescriptively\ndescriptiveness\ndescriptory\ndescrive\ndescry\ndeseasonalize\ndesecrate\ndesecrater\ndesecration\ndesectionalize\ndeseed\ndesegmentation\ndesegmented\ndesensitization\ndesensitize\ndesensitizer\ndesentimentalize\ndeseret\ndesert\ndeserted\ndesertedly\ndesertedness\ndeserter\ndesertful\ndesertfully\ndesertic\ndeserticolous\ndesertion\ndesertism\ndesertless\ndesertlessly\ndesertlike\ndesertness\ndesertress\ndesertrice\ndesertward\ndeserve\ndeserved\ndeservedly\ndeservedness\ndeserveless\ndeserver\ndeserving\ndeservingly\ndeservingness\ndesex\ndesexualization\ndesexualize\ndeshabille\ndesi\ndesiccant\ndesiccate\ndesiccation\ndesiccative\ndesiccator\ndesiccatory\ndesiderant\ndesiderata\ndesiderate\ndesideration\ndesiderative\ndesideratum\ndesight\ndesightment\ndesign\ndesignable\ndesignate\ndesignation\ndesignative\ndesignator\ndesignatory\ndesignatum\ndesigned\ndesignedly\ndesignedness\ndesignee\ndesigner\ndesignful\ndesignfully\ndesignfulness\ndesigning\ndesigningly\ndesignless\ndesignlessly\ndesignlessness\ndesilicate\ndesilicification\ndesilicify\ndesiliconization\ndesiliconize\ndesilver\ndesilverization\ndesilverize\ndesilverizer\ndesinence\ndesinent\ndesiodothyroxine\ndesipience\ndesipiency\ndesipient\ndesirability\ndesirable\ndesirableness\ndesirably\ndesire\ndesired\ndesiredly\ndesiredness\ndesireful\ndesirefulness\ndesireless\ndesirer\ndesiringly\ndesirous\ndesirously\ndesirousness\ndesist\ndesistance\ndesistive\ndesition\ndesize\ndesk\ndesklike\ndeslime\ndesma\ndesmachymatous\ndesmachyme\ndesmacyte\ndesman\nDesmanthus\nDesmarestia\nDesmarestiaceae\ndesmarestiaceous\nDesmatippus\ndesmectasia\ndesmepithelium\ndesmic\ndesmid\nDesmidiaceae\ndesmidiaceous\nDesmidiales\ndesmidiologist\ndesmidiology\ndesmine\ndesmitis\ndesmocyte\ndesmocytoma\nDesmodactyli\nDesmodium\ndesmodont\nDesmodontidae\nDesmodus\ndesmodynia\ndesmogen\ndesmogenous\nDesmognathae\ndesmognathism\ndesmognathous\ndesmography\ndesmohemoblast\ndesmoid\ndesmology\ndesmoma\nDesmomyaria\ndesmon\nDesmoncus\ndesmoneoplasm\ndesmonosology\ndesmopathologist\ndesmopathology\ndesmopathy\ndesmopelmous\ndesmopexia\ndesmopyknosis\ndesmorrhexis\nDesmoscolecidae\nDesmoscolex\ndesmosis\ndesmosite\nDesmothoraca\ndesmotomy\ndesmotrope\ndesmotropic\ndesmotropism\ndesocialization\ndesocialize\ndesolate\ndesolately\ndesolateness\ndesolater\ndesolating\ndesolatingly\ndesolation\ndesolative\ndesonation\ndesophisticate\ndesophistication\ndesorption\ndesoxalate\ndesoxyanisoin\ndesoxybenzoin\ndesoxycinchonine\ndesoxycorticosterone\ndesoxymorphine\ndesoxyribonucleic\ndespair\ndespairer\ndespairful\ndespairfully\ndespairfulness\ndespairing\ndespairingly\ndespairingness\ndespecialization\ndespecialize\ndespecificate\ndespecification\ndespect\ndesperacy\ndesperado\ndesperadoism\ndesperate\ndesperately\ndesperateness\ndesperation\ndespicability\ndespicable\ndespicableness\ndespicably\ndespiritualization\ndespiritualize\ndespisable\ndespisableness\ndespisal\ndespise\ndespisedness\ndespisement\ndespiser\ndespisingly\ndespite\ndespiteful\ndespitefully\ndespitefulness\ndespiteous\ndespiteously\ndespoil\ndespoiler\ndespoilment\ndespoliation\ndespond\ndespondence\ndespondency\ndespondent\ndespondently\ndesponder\ndesponding\ndespondingly\ndespot\ndespotat\nDespotes\ndespotic\ndespotically\ndespoticalness\ndespoticly\ndespotism\ndespotist\ndespotize\ndespumate\ndespumation\ndesquamate\ndesquamation\ndesquamative\ndesquamatory\ndess\ndessa\ndessert\ndessertspoon\ndessertspoonful\ndessiatine\ndessil\ndestabilize\ndestain\ndestandardize\ndesterilization\ndesterilize\ndestinate\ndestination\ndestine\ndestinezite\ndestinism\ndestinist\ndestiny\ndestitute\ndestitutely\ndestituteness\ndestitution\ndestour\ndestress\ndestrier\ndestroy\ndestroyable\ndestroyer\ndestroyingly\ndestructibility\ndestructible\ndestructibleness\ndestruction\ndestructional\ndestructionism\ndestructionist\ndestructive\ndestructively\ndestructiveness\ndestructivism\ndestructivity\ndestructor\ndestructuralize\ndesubstantiate\ndesucration\ndesuete\ndesuetude\ndesugar\ndesugarize\nDesulfovibrio\ndesulphur\ndesulphurate\ndesulphuration\ndesulphurization\ndesulphurize\ndesulphurizer\ndesultor\ndesultorily\ndesultoriness\ndesultorious\ndesultory\ndesuperheater\ndesyatin\ndesyl\ndesynapsis\ndesynaptic\ndesynonymization\ndesynonymize\ndetach\ndetachability\ndetachable\ndetachableness\ndetachably\ndetached\ndetachedly\ndetachedness\ndetacher\ndetachment\ndetail\ndetailed\ndetailedly\ndetailedness\ndetailer\ndetailism\ndetailist\ndetain\ndetainable\ndetainal\ndetainer\ndetainingly\ndetainment\ndetar\ndetassel\ndetax\ndetect\ndetectability\ndetectable\ndetectably\ndetectaphone\ndetecter\ndetectible\ndetection\ndetective\ndetectivism\ndetector\ndetenant\ndetent\ndetention\ndetentive\ndeter\ndeterge\ndetergence\ndetergency\ndetergent\ndetergible\ndeteriorate\ndeterioration\ndeteriorationist\ndeteriorative\ndeteriorator\ndeteriorism\ndeteriority\ndeterment\ndeterminability\ndeterminable\ndeterminableness\ndeterminably\ndeterminacy\ndeterminant\ndeterminantal\ndeterminate\ndeterminately\ndeterminateness\ndetermination\ndeterminative\ndeterminatively\ndeterminativeness\ndeterminator\ndetermine\ndetermined\ndeterminedly\ndeterminedness\ndeterminer\ndeterminism\ndeterminist\ndeterministic\ndeterminoid\ndeterrence\ndeterrent\ndetersion\ndetersive\ndetersively\ndetersiveness\ndetest\ndetestability\ndetestable\ndetestableness\ndetestably\ndetestation\ndetester\ndethronable\ndethrone\ndethronement\ndethroner\ndethyroidism\ndetin\ndetinet\ndetinue\ndetonable\ndetonate\ndetonation\ndetonative\ndetonator\ndetorsion\ndetour\ndetoxicant\ndetoxicate\ndetoxication\ndetoxicator\ndetoxification\ndetoxify\ndetract\ndetracter\ndetractingly\ndetraction\ndetractive\ndetractively\ndetractiveness\ndetractor\ndetractory\ndetractress\ndetrain\ndetrainment\ndetribalization\ndetribalize\ndetriment\ndetrimental\ndetrimentality\ndetrimentally\ndetrimentalness\ndetrital\ndetrited\ndetrition\ndetritus\nDetroiter\ndetrude\ndetruncate\ndetruncation\ndetrusion\ndetrusive\ndetrusor\ndetubation\ndetumescence\ndetune\ndetur\ndeuce\ndeuced\ndeucedly\ndeul\ndeurbanize\ndeutencephalic\ndeutencephalon\ndeuteragonist\ndeuteranomal\ndeuteranomalous\ndeuteranope\ndeuteranopia\ndeuteranopic\ndeuteric\ndeuteride\ndeuterium\ndeuteroalbumose\ndeuterocanonical\ndeuterocasease\ndeuterocone\ndeuteroconid\ndeuterodome\ndeuteroelastose\ndeuterofibrinose\ndeuterogamist\ndeuterogamy\ndeuterogelatose\ndeuterogenic\ndeuteroglobulose\ndeuteromorphic\nDeuteromycetes\ndeuteromyosinose\ndeuteron\nDeuteronomic\nDeuteronomical\nDeuteronomist\nDeuteronomistic\nDeuteronomy\ndeuteropathic\ndeuteropathy\ndeuteroplasm\ndeuteroprism\ndeuteroproteose\ndeuteroscopic\ndeuteroscopy\ndeuterostoma\nDeuterostomata\ndeuterostomatous\ndeuterotokous\ndeuterotoky\ndeuterotype\ndeuterovitellose\ndeuterozooid\ndeutobromide\ndeutocarbonate\ndeutochloride\ndeutomala\ndeutomalal\ndeutomalar\ndeutomerite\ndeuton\ndeutonephron\ndeutonymph\ndeutonymphal\ndeutoplasm\ndeutoplasmic\ndeutoplastic\ndeutoscolex\ndeutoxide\nDeutzia\ndev\ndeva\ndevachan\ndevadasi\ndevall\ndevaloka\ndevalorize\ndevaluate\ndevaluation\ndevalue\ndevance\ndevaporate\ndevaporation\ndevast\ndevastate\ndevastating\ndevastatingly\ndevastation\ndevastative\ndevastator\ndevastavit\ndevaster\ndevata\ndevelin\ndevelop\ndevelopability\ndevelopable\ndevelopedness\ndeveloper\ndevelopist\ndevelopment\ndevelopmental\ndevelopmentalist\ndevelopmentally\ndevelopmentarian\ndevelopmentary\ndevelopmentist\ndevelopoid\ndevertebrated\ndevest\ndeviability\ndeviable\ndeviancy\ndeviant\ndeviate\ndeviation\ndeviationism\ndeviationist\ndeviative\ndeviator\ndeviatory\ndevice\ndeviceful\ndevicefully\ndevicefulness\ndevil\ndevilbird\ndevildom\ndeviled\ndeviler\ndeviless\ndevilet\ndevilfish\ndevilhood\ndeviling\ndevilish\ndevilishly\ndevilishness\ndevilism\ndevilize\ndevilkin\ndevillike\ndevilman\ndevilment\ndevilmonger\ndevilry\ndevilship\ndeviltry\ndevilward\ndevilwise\ndevilwood\ndevily\ndevious\ndeviously\ndeviousness\ndevirginate\ndevirgination\ndevirginator\ndevirilize\ndevisable\ndevisal\ndeviscerate\ndevisceration\ndevise\ndevisee\ndeviser\ndevisor\ndevitalization\ndevitalize\ndevitalized\ndevitaminize\ndevitrification\ndevitrify\ndevocalization\ndevocalize\ndevoice\ndevoid\ndevoir\ndevolatilize\ndevolute\ndevolution\ndevolutionary\ndevolutionist\ndevolve\ndevolvement\nDevon\nDevonian\nDevonic\ndevonite\ndevonport\ndevonshire\ndevorative\ndevote\ndevoted\ndevotedly\ndevotedness\ndevotee\ndevoteeism\ndevotement\ndevoter\ndevotion\ndevotional\ndevotionalism\ndevotionalist\ndevotionality\ndevotionally\ndevotionalness\ndevotionate\ndevotionist\ndevour\ndevourable\ndevourer\ndevouress\ndevouring\ndevouringly\ndevouringness\ndevourment\ndevout\ndevoutless\ndevoutlessly\ndevoutlessness\ndevoutly\ndevoutness\ndevow\ndevulcanization\ndevulcanize\ndevulgarize\ndevvel\ndew\ndewan\ndewanee\ndewanship\ndewater\ndewaterer\ndewax\ndewbeam\ndewberry\ndewclaw\ndewclawed\ndewcup\ndewdamp\ndewdrop\ndewdropper\ndewer\nDewey\ndeweylite\ndewfall\ndewflower\ndewily\ndewiness\ndewlap\ndewlapped\ndewless\ndewlight\ndewlike\ndewool\ndeworm\ndewret\ndewtry\ndewworm\ndewy\ndexiocardia\ndexiotrope\ndexiotropic\ndexiotropism\ndexiotropous\nDexter\ndexter\ndexterical\ndexterity\ndexterous\ndexterously\ndexterousness\ndextrad\ndextral\ndextrality\ndextrally\ndextran\ndextraural\ndextrin\ndextrinase\ndextrinate\ndextrinize\ndextrinous\ndextro\ndextroaural\ndextrocardia\ndextrocardial\ndextrocerebral\ndextrocular\ndextrocularity\ndextroduction\ndextroglucose\ndextrogyrate\ndextrogyration\ndextrogyratory\ndextrogyrous\ndextrolactic\ndextrolimonene\ndextropinene\ndextrorotary\ndextrorotatary\ndextrorotation\ndextrorsal\ndextrorse\ndextrorsely\ndextrosazone\ndextrose\ndextrosinistral\ndextrosinistrally\ndextrosuria\ndextrotartaric\ndextrotropic\ndextrotropous\ndextrous\ndextrously\ndextrousness\ndextroversion\ndey\ndeyhouse\ndeyship\ndeywoman\nDezaley\ndezinc\ndezincation\ndezincification\ndezincify\ndezymotize\ndha\ndhabb\ndhai\ndhak\ndhamnoo\ndhan\ndhangar\ndhanuk\ndhanush\nDhanvantari\ndharana\ndharani\ndharma\ndharmakaya\ndharmashastra\ndharmasmriti\ndharmasutra\ndharmsala\ndharna\ndhaura\ndhauri\ndhava\ndhaw\nDheneb\ndheri\ndhobi\ndhole\ndhoni\ndhoon\ndhoti\ndhoul\ndhow\nDhritarashtra\ndhu\ndhunchee\ndhunchi\nDhundia\ndhurra\ndhyal\ndhyana\ndi\ndiabase\ndiabasic\ndiabetes\ndiabetic\ndiabetogenic\ndiabetogenous\ndiabetometer\ndiablerie\ndiabolarch\ndiabolarchy\ndiabolatry\ndiabolepsy\ndiaboleptic\ndiabolic\ndiabolical\ndiabolically\ndiabolicalness\ndiabolification\ndiabolify\ndiabolism\ndiabolist\ndiabolization\ndiabolize\ndiabological\ndiabology\ndiabolology\ndiabrosis\ndiabrotic\nDiabrotica\ndiacanthous\ndiacaustic\ndiacetamide\ndiacetate\ndiacetic\ndiacetin\ndiacetine\ndiacetonuria\ndiaceturia\ndiacetyl\ndiacetylene\ndiachoretic\ndiachronic\ndiachylon\ndiachylum\ndiacid\ndiacipiperazine\ndiaclase\ndiaclasis\ndiaclastic\ndiacle\ndiaclinal\ndiacodion\ndiacoele\ndiacoelia\ndiaconal\ndiaconate\ndiaconia\ndiaconicon\ndiaconicum\ndiacope\ndiacranterian\ndiacranteric\ndiacrisis\ndiacritic\ndiacritical\ndiacritically\nDiacromyodi\ndiacromyodian\ndiact\ndiactin\ndiactinal\ndiactinic\ndiactinism\nDiadelphia\ndiadelphian\ndiadelphic\ndiadelphous\ndiadem\nDiadema\nDiadematoida\ndiaderm\ndiadermic\ndiadoche\nDiadochi\nDiadochian\ndiadochite\ndiadochokinesia\ndiadochokinetic\ndiadromous\ndiadumenus\ndiaene\ndiaereses\ndiaeresis\ndiaeretic\ndiaetetae\ndiagenesis\ndiagenetic\ndiageotropic\ndiageotropism\ndiaglyph\ndiaglyphic\ndiagnosable\ndiagnose\ndiagnoseable\ndiagnoses\ndiagnosis\ndiagnostic\ndiagnostically\ndiagnosticate\ndiagnostication\ndiagnostician\ndiagnostics\ndiagometer\ndiagonal\ndiagonality\ndiagonalize\ndiagonally\ndiagonalwise\ndiagonic\ndiagram\ndiagrammatic\ndiagrammatical\ndiagrammatician\ndiagrammatize\ndiagrammeter\ndiagrammitically\ndiagraph\ndiagraphic\ndiagraphical\ndiagraphics\ndiagredium\ndiagrydium\nDiaguitas\nDiaguite\ndiaheliotropic\ndiaheliotropically\ndiaheliotropism\ndiakinesis\ndial\ndialcohol\ndialdehyde\ndialect\ndialectal\ndialectalize\ndialectally\ndialectic\ndialectical\ndialectically\ndialectician\ndialecticism\ndialecticize\ndialectics\ndialectologer\ndialectological\ndialectologist\ndialectology\ndialector\ndialer\ndialin\ndialing\ndialist\nDialister\ndialkyl\ndialkylamine\ndiallage\ndiallagic\ndiallagite\ndiallagoid\ndiallel\ndiallelon\ndiallelus\ndiallyl\ndialogic\ndialogical\ndialogically\ndialogism\ndialogist\ndialogistic\ndialogistical\ndialogistically\ndialogite\ndialogize\ndialogue\ndialoguer\nDialonian\ndialuric\ndialycarpous\nDialypetalae\ndialypetalous\ndialyphyllous\ndialysepalous\ndialysis\ndialystaminous\ndialystelic\ndialystely\ndialytic\ndialytically\ndialyzability\ndialyzable\ndialyzate\ndialyzation\ndialyzator\ndialyze\ndialyzer\ndiamagnet\ndiamagnetic\ndiamagnetically\ndiamagnetism\ndiamantiferous\ndiamantine\ndiamantoid\ndiamb\ndiambic\ndiamesogamous\ndiameter\ndiametral\ndiametrally\ndiametric\ndiametrical\ndiametrically\ndiamicton\ndiamide\ndiamidogen\ndiamine\ndiaminogen\ndiaminogene\ndiammine\ndiamminobromide\ndiamminonitrate\ndiammonium\ndiamond\ndiamondback\ndiamonded\ndiamondiferous\ndiamondize\ndiamondlike\ndiamondwise\ndiamondwork\ndiamorphine\ndiamylose\nDian\ndian\nDiana\nDiancecht\ndiander\nDiandria\ndiandrian\ndiandrous\nDiane\ndianetics\nDianil\ndianilid\ndianilide\ndianisidin\ndianisidine\ndianite\ndianodal\ndianoetic\ndianoetical\ndianoetically\nDianthaceae\nDianthera\nDianthus\ndiapalma\ndiapase\ndiapasm\ndiapason\ndiapasonal\ndiapause\ndiapedesis\ndiapedetic\nDiapensia\nDiapensiaceae\ndiapensiaceous\ndiapente\ndiaper\ndiapering\ndiaphane\ndiaphaneity\ndiaphanie\ndiaphanometer\ndiaphanometric\ndiaphanometry\ndiaphanoscope\ndiaphanoscopy\ndiaphanotype\ndiaphanous\ndiaphanously\ndiaphanousness\ndiaphany\ndiaphone\ndiaphonia\ndiaphonic\ndiaphonical\ndiaphony\ndiaphoresis\ndiaphoretic\ndiaphoretical\ndiaphorite\ndiaphote\ndiaphototropic\ndiaphototropism\ndiaphragm\ndiaphragmal\ndiaphragmatic\ndiaphragmatically\ndiaphtherin\ndiaphysial\ndiaphysis\ndiaplasma\ndiaplex\ndiaplexal\ndiaplexus\ndiapnoic\ndiapnotic\ndiapophysial\ndiapophysis\nDiaporthe\ndiapositive\ndiapsid\nDiapsida\ndiapsidan\ndiapyesis\ndiapyetic\ndiarch\ndiarchial\ndiarchic\ndiarchy\ndiarhemia\ndiarial\ndiarian\ndiarist\ndiaristic\ndiarize\ndiarrhea\ndiarrheal\ndiarrheic\ndiarrhetic\ndiarsenide\ndiarthric\ndiarthrodial\ndiarthrosis\ndiarticular\ndiary\ndiaschisis\ndiaschisma\ndiaschistic\nDiascia\ndiascope\ndiascopy\ndiascord\ndiascordium\ndiaskeuasis\ndiaskeuast\nDiaspidinae\ndiaspidine\nDiaspinae\ndiaspine\ndiaspirin\nDiaspora\ndiaspore\ndiastaltic\ndiastase\ndiastasic\ndiastasimetry\ndiastasis\ndiastataxic\ndiastataxy\ndiastatic\ndiastatically\ndiastem\ndiastema\ndiastematic\ndiastematomyelia\ndiaster\ndiastole\ndiastolic\ndiastomatic\ndiastral\ndiastrophe\ndiastrophic\ndiastrophism\ndiastrophy\ndiasynthesis\ndiasyrm\ndiatessaron\ndiathermacy\ndiathermal\ndiathermancy\ndiathermaneity\ndiathermanous\ndiathermic\ndiathermize\ndiathermometer\ndiathermotherapy\ndiathermous\ndiathermy\ndiathesic\ndiathesis\ndiathetic\ndiatom\nDiatoma\nDiatomaceae\ndiatomacean\ndiatomaceoid\ndiatomaceous\nDiatomales\nDiatomeae\ndiatomean\ndiatomic\ndiatomicity\ndiatomiferous\ndiatomin\ndiatomist\ndiatomite\ndiatomous\ndiatonic\ndiatonical\ndiatonically\ndiatonous\ndiatoric\ndiatreme\ndiatribe\ndiatribist\ndiatropic\ndiatropism\nDiatryma\nDiatrymiformes\nDiau\ndiaulic\ndiaulos\ndiaxial\ndiaxon\ndiazenithal\ndiazeuctic\ndiazeuxis\ndiazide\ndiazine\ndiazoamine\ndiazoamino\ndiazoaminobenzene\ndiazoanhydride\ndiazoate\ndiazobenzene\ndiazohydroxide\ndiazoic\ndiazoimide\ndiazoimido\ndiazole\ndiazoma\ndiazomethane\ndiazonium\ndiazotate\ndiazotic\ndiazotizability\ndiazotizable\ndiazotization\ndiazotize\ndiazotype\ndib\ndibase\ndibasic\ndibasicity\ndibatag\nDibatis\ndibber\ndibble\ndibbler\ndibbuk\ndibenzophenazine\ndibenzopyrrole\ndibenzoyl\ndibenzyl\ndibhole\ndiblastula\ndiborate\nDibothriocephalus\ndibrach\ndibranch\nDibranchia\nDibranchiata\ndibranchiate\ndibranchious\ndibrom\ndibromid\ndibromide\ndibromoacetaldehyde\ndibromobenzene\ndibs\ndibstone\ndibutyrate\ndibutyrin\ndicacodyl\nDicaeidae\ndicaeology\ndicalcic\ndicalcium\ndicarbonate\ndicarbonic\ndicarboxylate\ndicarboxylic\ndicarpellary\ndicaryon\ndicaryophase\ndicaryophyte\ndicaryotic\ndicast\ndicastery\ndicastic\ndicatalectic\ndicatalexis\nDiccon\ndice\ndiceboard\ndicebox\ndicecup\ndicellate\ndiceman\nDicentra\ndicentrine\ndicephalism\ndicephalous\ndicephalus\ndiceplay\ndicer\nDiceras\nDiceratidae\ndicerion\ndicerous\ndicetyl\ndich\nDichapetalaceae\nDichapetalum\ndichas\ndichasial\ndichasium\ndichastic\nDichelyma\ndichlamydeous\ndichloramine\ndichlorhydrin\ndichloride\ndichloroacetic\ndichlorohydrin\ndichloromethane\ndichocarpism\ndichocarpous\ndichogamous\ndichogamy\nDichondra\nDichondraceae\ndichopodial\ndichoptic\ndichord\ndichoree\nDichorisandra\ndichotic\ndichotomal\ndichotomic\ndichotomically\ndichotomist\ndichotomistic\ndichotomization\ndichotomize\ndichotomous\ndichotomously\ndichotomy\ndichroic\ndichroiscope\ndichroism\ndichroite\ndichroitic\ndichromasy\ndichromat\ndichromate\ndichromatic\ndichromatism\ndichromic\ndichromism\ndichronous\ndichrooscope\ndichroous\ndichroscope\ndichroscopic\nDichter\ndicing\nDick\ndick\ndickcissel\ndickens\nDickensian\nDickensiana\ndicker\ndickey\ndickeybird\ndickinsonite\nDicksonia\ndicky\nDiclidantheraceae\ndiclinic\ndiclinism\ndiclinous\nDiclytra\ndicoccous\ndicodeine\ndicoelious\ndicolic\ndicolon\ndicondylian\ndicot\ndicotyl\ndicotyledon\ndicotyledonary\nDicotyledones\ndicotyledonous\nDicotyles\nDicotylidae\ndicotylous\ndicoumarin\nDicranaceae\ndicranaceous\ndicranoid\ndicranterian\nDicranum\nDicrostonyx\ndicrotal\ndicrotic\ndicrotism\ndicrotous\nDicruridae\ndicta\nDictaen\nDictamnus\nDictaphone\ndictate\ndictatingly\ndictation\ndictational\ndictative\ndictator\ndictatorial\ndictatorialism\ndictatorially\ndictatorialness\ndictatorship\ndictatory\ndictatress\ndictatrix\ndictature\ndictic\ndiction\ndictionary\nDictograph\ndictum\ndictynid\nDictynidae\nDictyoceratina\ndictyoceratine\ndictyodromous\ndictyogen\ndictyogenous\nDictyograptus\ndictyoid\nDictyonema\nDictyonina\ndictyonine\nDictyophora\ndictyopteran\nDictyopteris\nDictyosiphon\nDictyosiphonaceae\ndictyosiphonaceous\ndictyosome\ndictyostele\ndictyostelic\nDictyota\nDictyotaceae\ndictyotaceous\nDictyotales\ndictyotic\nDictyoxylon\ndicyanide\ndicyanine\ndicyanodiamide\ndicyanogen\ndicycle\ndicyclic\nDicyclica\ndicyclist\nDicyema\nDicyemata\ndicyemid\nDicyemida\nDicyemidae\nDicynodon\ndicynodont\nDicynodontia\nDicynodontidae\ndid\nDidache\nDidachist\ndidactic\ndidactical\ndidacticality\ndidactically\ndidactician\ndidacticism\ndidacticity\ndidactics\ndidactive\ndidactyl\ndidactylism\ndidactylous\ndidapper\ndidascalar\ndidascaliae\ndidascalic\ndidascalos\ndidascaly\ndidder\ndiddle\ndiddler\ndiddy\ndidelph\nDidelphia\ndidelphian\ndidelphic\ndidelphid\nDidelphidae\ndidelphine\nDidelphis\ndidelphoid\ndidelphous\nDidelphyidae\ndidepsid\ndidepside\nDididae\ndidie\ndidine\nDidinium\ndidle\ndidna\ndidnt\nDido\ndidodecahedral\ndidodecahedron\ndidrachma\ndidrachmal\ndidromy\ndidst\ndiductor\nDidunculidae\nDidunculinae\nDidunculus\nDidus\ndidym\ndidymate\ndidymia\ndidymitis\ndidymium\ndidymoid\ndidymolite\ndidymous\ndidymus\nDidynamia\ndidynamian\ndidynamic\ndidynamous\ndidynamy\ndie\ndieb\ndieback\ndiectasis\ndiedral\ndiedric\nDieffenbachia\nDiego\nDiegueno\ndiehard\ndielectric\ndielectrically\ndielike\nDielytra\ndiem\ndiemaker\ndiemaking\ndiencephalic\ndiencephalon\ndiene\ndier\nDieri\nDiervilla\ndiesel\ndieselization\ndieselize\ndiesinker\ndiesinking\ndiesis\ndiestock\ndiet\ndietal\ndietarian\ndietary\nDieter\ndieter\ndietetic\ndietetically\ndietetics\ndietetist\ndiethanolamine\ndiethyl\ndiethylamine\ndiethylenediamine\ndiethylstilbestrol\ndietic\ndietician\ndietics\ndietine\ndietist\ndietitian\ndietotherapeutics\ndietotherapy\ndietotoxic\ndietotoxicity\ndietrichite\ndietzeite\ndiewise\nDieyerie\ndiezeugmenon\nDifda\ndiferrion\ndiffame\ndiffarreation\ndiffer\ndifference\ndifferencingly\ndifferent\ndifferentia\ndifferentiable\ndifferential\ndifferentialize\ndifferentially\ndifferentiant\ndifferentiate\ndifferentiation\ndifferentiator\ndifferently\ndifferentness\ndifferingly\ndifficile\ndifficileness\ndifficult\ndifficultly\ndifficultness\ndifficulty\ndiffidation\ndiffide\ndiffidence\ndiffident\ndiffidently\ndiffidentness\ndiffinity\ndiffluence\ndiffluent\nDifflugia\ndifform\ndifformed\ndifformity\ndiffract\ndiffraction\ndiffractive\ndiffractively\ndiffractiveness\ndiffractometer\ndiffrangibility\ndiffrangible\ndiffugient\ndiffusate\ndiffuse\ndiffused\ndiffusedly\ndiffusely\ndiffuseness\ndiffuser\ndiffusibility\ndiffusible\ndiffusibleness\ndiffusibly\ndiffusimeter\ndiffusiometer\ndiffusion\ndiffusionism\ndiffusionist\ndiffusive\ndiffusively\ndiffusiveness\ndiffusivity\ndiffusor\ndiformin\ndig\ndigallate\ndigallic\ndigametic\ndigamist\ndigamma\ndigammated\ndigammic\ndigamous\ndigamy\ndigastric\nDigenea\ndigeneous\ndigenesis\ndigenetic\nDigenetica\ndigenic\ndigenous\ndigeny\ndigerent\ndigest\ndigestant\ndigested\ndigestedly\ndigestedness\ndigester\ndigestibility\ndigestible\ndigestibleness\ndigestibly\ndigestion\ndigestional\ndigestive\ndigestively\ndigestiveness\ndigestment\ndiggable\ndigger\ndigging\ndiggings\ndight\ndighter\ndigit\ndigital\ndigitalein\ndigitalin\ndigitalis\ndigitalism\ndigitalization\ndigitalize\ndigitally\nDigitaria\ndigitate\ndigitated\ndigitately\ndigitation\ndigitiform\nDigitigrada\ndigitigrade\ndigitigradism\ndigitinervate\ndigitinerved\ndigitipinnate\ndigitize\ndigitizer\ndigitogenin\ndigitonin\ndigitoplantar\ndigitorium\ndigitoxin\ndigitoxose\ndigitule\ndigitus\ndigladiate\ndigladiation\ndigladiator\ndiglossia\ndiglot\ndiglottic\ndiglottism\ndiglottist\ndiglucoside\ndiglyceride\ndiglyph\ndiglyphic\ndigmeat\ndignification\ndignified\ndignifiedly\ndignifiedness\ndignify\ndignitarial\ndignitarian\ndignitary\ndignity\ndigoneutic\ndigoneutism\ndigonoporous\ndigonous\nDigor\ndigram\ndigraph\ndigraphic\ndigredience\ndigrediency\ndigredient\ndigress\ndigressingly\ndigression\ndigressional\ndigressionary\ndigressive\ndigressively\ndigressiveness\ndigressory\ndigs\ndiguanide\nDigynia\ndigynian\ndigynous\ndihalide\ndihalo\ndihalogen\ndihedral\ndihedron\ndihexagonal\ndihexahedral\ndihexahedron\ndihybrid\ndihybridism\ndihydrate\ndihydrated\ndihydrazone\ndihydric\ndihydride\ndihydrite\ndihydrocupreine\ndihydrocuprin\ndihydrogen\ndihydrol\ndihydronaphthalene\ndihydronicotine\ndihydrotachysterol\ndihydroxy\ndihydroxysuccinic\ndihydroxytoluene\ndihysteria\ndiiamb\ndiiambus\ndiiodide\ndiiodo\ndiiodoform\ndiipenates\nDiipolia\ndiisatogen\ndijudicate\ndijudication\ndika\ndikage\ndikamali\ndikaryon\ndikaryophase\ndikaryophasic\ndikaryophyte\ndikaryophytic\ndikaryotic\nDike\ndike\ndikegrave\ndikelocephalid\nDikelocephalus\ndiker\ndikereeve\ndikeside\ndiketo\ndiketone\ndikkop\ndiktyonite\ndilacerate\ndilaceration\ndilambdodont\ndilamination\nDilantin\ndilapidate\ndilapidated\ndilapidation\ndilapidator\ndilatability\ndilatable\ndilatableness\ndilatably\ndilatancy\ndilatant\ndilatate\ndilatation\ndilatative\ndilatator\ndilatatory\ndilate\ndilated\ndilatedly\ndilatedness\ndilater\ndilatingly\ndilation\ndilative\ndilatometer\ndilatometric\ndilatometry\ndilator\ndilatorily\ndilatoriness\ndilatory\ndildo\ndilection\nDilemi\nDilemite\ndilemma\ndilemmatic\ndilemmatical\ndilemmatically\ndilettant\ndilettante\ndilettanteish\ndilettanteism\ndilettanteship\ndilettanti\ndilettantish\ndilettantism\ndilettantist\ndiligence\ndiligency\ndiligent\ndiligentia\ndiligently\ndiligentness\ndilker\ndill\nDillenia\nDilleniaceae\ndilleniaceous\ndilleniad\ndilli\ndillier\ndilligrout\ndilling\ndillseed\ndillue\ndilluer\ndillweed\ndilly\ndillydallier\ndillydally\ndillyman\ndilo\ndilogy\ndiluent\ndilute\ndiluted\ndilutedly\ndilutedness\ndilutee\ndilutely\ndiluteness\ndilutent\ndiluter\ndilution\ndilutive\ndilutor\ndiluvia\ndiluvial\ndiluvialist\ndiluvian\ndiluvianism\ndiluvion\ndiluvium\ndim\ndimagnesic\ndimanganion\ndimanganous\nDimaris\ndimastigate\nDimatis\ndimber\ndimberdamber\ndimble\ndime\ndimensible\ndimension\ndimensional\ndimensionality\ndimensionally\ndimensioned\ndimensionless\ndimensive\ndimer\nDimera\ndimeran\ndimercuric\ndimercurion\ndimercury\ndimeric\ndimeride\ndimerism\ndimerization\ndimerlie\ndimerous\ndimetallic\ndimeter\ndimethoxy\ndimethyl\ndimethylamine\ndimethylamino\ndimethylaniline\ndimethylbenzene\ndimetria\ndimetric\nDimetry\ndimication\ndimidiate\ndimidiation\ndiminish\ndiminishable\ndiminishableness\ndiminisher\ndiminishingly\ndiminishment\ndiminuendo\ndiminutal\ndiminute\ndiminution\ndiminutival\ndiminutive\ndiminutively\ndiminutiveness\ndiminutivize\ndimiss\ndimission\ndimissorial\ndimissory\ndimit\nDimitry\nDimittis\ndimity\ndimly\ndimmed\ndimmedness\ndimmer\ndimmest\ndimmet\ndimmish\nDimna\ndimness\ndimolecular\ndimoric\ndimorph\ndimorphic\ndimorphism\nDimorphotheca\ndimorphous\ndimple\ndimplement\ndimply\ndimps\ndimpsy\nDimyaria\ndimyarian\ndimyaric\ndin\nDinah\ndinamode\nDinantian\ndinaphthyl\ndinar\nDinaric\nDinarzade\ndinder\ndindle\nDindymene\nDindymus\ndine\ndiner\ndinergate\ndineric\ndinero\ndinette\ndineuric\nding\ndingar\ndingbat\ndingdong\ndinge\ndingee\ndinghee\ndinghy\ndingily\ndinginess\ndingle\ndingleberry\ndinglebird\ndingledangle\ndingly\ndingmaul\ndingo\ndingus\nDingwall\ndingy\ndinheiro\ndinic\ndinical\nDinichthys\ndining\ndinitrate\ndinitril\ndinitrile\ndinitro\ndinitrobenzene\ndinitrocellulose\ndinitrophenol\ndinitrotoluene\ndink\nDinka\ndinkey\ndinkum\ndinky\ndinmont\ndinner\ndinnerless\ndinnerly\ndinnertime\ndinnerware\ndinnery\nDinobryon\nDinoceras\nDinocerata\ndinoceratan\ndinoceratid\nDinoceratidae\nDinoflagellata\nDinoflagellatae\ndinoflagellate\nDinoflagellida\ndinomic\nDinomys\nDinophilea\nDinophilus\nDinophyceae\nDinornis\nDinornithes\ndinornithic\ndinornithid\nDinornithidae\nDinornithiformes\ndinornithine\ndinornithoid\ndinosaur\nDinosauria\ndinosaurian\ndinothere\nDinotheres\ndinotherian\nDinotheriidae\nDinotherium\ndinsome\ndint\ndintless\ndinus\ndiobely\ndiobol\ndiocesan\ndiocese\nDiocletian\ndioctahedral\nDioctophyme\ndiode\nDiodia\nDiodon\ndiodont\nDiodontidae\nDioecia\ndioecian\ndioeciodimorphous\ndioeciopolygamous\ndioecious\ndioeciously\ndioeciousness\ndioecism\ndioecy\ndioestrous\ndioestrum\ndioestrus\nDiogenean\nDiogenic\ndiogenite\ndioicous\ndiol\ndiolefin\ndiolefinic\nDiomedea\nDiomedeidae\nDion\nDionaea\nDionaeaceae\nDione\ndionise\ndionym\ndionymal\nDionysia\nDionysiac\nDionysiacal\nDionysiacally\nDioon\nDiophantine\nDiopsidae\ndiopside\nDiopsis\ndioptase\ndiopter\nDioptidae\ndioptograph\ndioptometer\ndioptometry\ndioptoscopy\ndioptra\ndioptral\ndioptrate\ndioptric\ndioptrical\ndioptrically\ndioptrics\ndioptrometer\ndioptrometry\ndioptroscopy\ndioptry\ndiorama\ndioramic\ndiordinal\ndiorite\ndioritic\ndiorthosis\ndiorthotic\nDioscorea\nDioscoreaceae\ndioscoreaceous\ndioscorein\ndioscorine\nDioscuri\nDioscurian\ndiose\nDiosma\ndiosmin\ndiosmose\ndiosmosis\ndiosmotic\ndiosphenol\nDiospyraceae\ndiospyraceous\nDiospyros\ndiota\ndiotic\nDiotocardia\ndiovular\ndioxane\ndioxide\ndioxime\ndioxindole\ndioxy\ndip\nDipala\ndiparentum\ndipartite\ndipartition\ndipaschal\ndipentene\ndipeptid\ndipeptide\ndipetalous\ndipetto\ndiphase\ndiphaser\ndiphasic\ndiphead\ndiphenol\ndiphenyl\ndiphenylamine\ndiphenylchloroarsine\ndiphenylene\ndiphenylenimide\ndiphenylguanidine\ndiphenylmethane\ndiphenylquinomethane\ndiphenylthiourea\ndiphosgene\ndiphosphate\ndiphosphide\ndiphosphoric\ndiphosphothiamine\ndiphrelatic\ndiphtheria\ndiphtherial\ndiphtherian\ndiphtheric\ndiphtheritic\ndiphtheritically\ndiphtheritis\ndiphtheroid\ndiphtheroidal\ndiphtherotoxin\ndiphthong\ndiphthongal\ndiphthongalize\ndiphthongally\ndiphthongation\ndiphthongic\ndiphthongization\ndiphthongize\ndiphycercal\ndiphycercy\nDiphyes\ndiphygenic\ndiphyletic\nDiphylla\nDiphylleia\nDiphyllobothrium\ndiphyllous\ndiphyodont\ndiphyozooid\nDiphysite\nDiphysitism\ndiphyzooid\ndipicrate\ndipicrylamin\ndipicrylamine\nDiplacanthidae\nDiplacanthus\ndiplacusis\nDipladenia\ndiplanar\ndiplanetic\ndiplanetism\ndiplantidian\ndiplarthrism\ndiplarthrous\ndiplasiasmus\ndiplasic\ndiplasion\ndiplegia\ndipleidoscope\ndipleura\ndipleural\ndipleurogenesis\ndipleurogenetic\ndiplex\ndiplobacillus\ndiplobacterium\ndiploblastic\ndiplocardia\ndiplocardiac\nDiplocarpon\ndiplocaulescent\ndiplocephalous\ndiplocephalus\ndiplocephaly\ndiplochlamydeous\ndiplococcal\ndiplococcemia\ndiplococcic\ndiplococcoid\ndiplococcus\ndiploconical\ndiplocoria\nDiplodia\nDiplodocus\nDiplodus\ndiploe\ndiploetic\ndiplogangliate\ndiplogenesis\ndiplogenetic\ndiplogenic\nDiploglossata\ndiploglossate\ndiplograph\ndiplographic\ndiplographical\ndiplography\ndiplohedral\ndiplohedron\ndiploic\ndiploid\ndiploidic\ndiploidion\ndiploidy\ndiplois\ndiplokaryon\ndiploma\ndiplomacy\ndiplomat\ndiplomate\ndiplomatic\ndiplomatical\ndiplomatically\ndiplomatics\ndiplomatism\ndiplomatist\ndiplomatize\ndiplomatology\ndiplomyelia\ndiplonema\ndiplonephridia\ndiploneural\ndiplont\ndiploperistomic\ndiplophase\ndiplophyte\ndiplopia\ndiplopic\ndiploplacula\ndiploplacular\ndiploplaculate\ndiplopod\nDiplopoda\ndiplopodic\nDiploptera\ndiplopterous\nDiplopteryga\ndiplopy\ndiplosis\ndiplosome\ndiplosphenal\ndiplosphene\nDiplospondyli\ndiplospondylic\ndiplospondylism\ndiplostemonous\ndiplostemony\ndiplostichous\nDiplotaxis\ndiplotegia\ndiplotene\nDiplozoon\ndiplumbic\nDipneumona\nDipneumones\ndipneumonous\ndipneustal\nDipneusti\ndipnoan\nDipnoi\ndipnoid\ndipnoous\ndipode\ndipodic\nDipodidae\nDipodomyinae\nDipodomys\ndipody\ndipolar\ndipolarization\ndipolarize\ndipole\ndiporpa\ndipotassic\ndipotassium\ndipped\ndipper\ndipperful\ndipping\ndiprimary\ndiprismatic\ndipropargyl\ndipropyl\nDiprotodon\ndiprotodont\nDiprotodontia\nDipsacaceae\ndipsacaceous\nDipsaceae\ndipsaceous\nDipsacus\nDipsadinae\ndipsas\ndipsetic\ndipsey\ndipsomania\ndipsomaniac\ndipsomaniacal\nDipsosaurus\ndipsosis\ndipter\nDiptera\nDipteraceae\ndipteraceous\ndipterad\ndipteral\ndipteran\ndipterist\ndipterocarp\nDipterocarpaceae\ndipterocarpaceous\ndipterocarpous\nDipterocarpus\ndipterocecidium\ndipterological\ndipterologist\ndipterology\ndipteron\ndipteros\ndipterous\nDipteryx\ndiptote\ndiptych\nDipus\ndipware\ndipygus\ndipylon\ndipyre\ndipyrenous\ndipyridyl\nDirca\nDircaean\ndird\ndirdum\ndire\ndirect\ndirectable\ndirected\ndirecter\ndirection\ndirectional\ndirectionally\ndirectionless\ndirectitude\ndirective\ndirectively\ndirectiveness\ndirectivity\ndirectly\ndirectness\nDirectoire\ndirector\ndirectoral\ndirectorate\ndirectorial\ndirectorially\ndirectorship\ndirectory\ndirectress\ndirectrices\ndirectrix\ndireful\ndirefully\ndirefulness\ndirely\ndirempt\ndiremption\ndireness\ndireption\ndirge\ndirgeful\ndirgelike\ndirgeman\ndirgler\ndirhem\nDirian\nDirichletian\ndirigent\ndirigibility\ndirigible\ndirigomotor\ndiriment\nDirk\ndirk\ndirl\ndirndl\ndirt\ndirtbird\ndirtboard\ndirten\ndirtily\ndirtiness\ndirtplate\ndirty\ndis\nDisa\ndisability\ndisable\ndisabled\ndisablement\ndisabusal\ndisabuse\ndisacceptance\ndisaccharide\ndisaccharose\ndisaccommodate\ndisaccommodation\ndisaccord\ndisaccordance\ndisaccordant\ndisaccustom\ndisaccustomed\ndisaccustomedness\ndisacidify\ndisacknowledge\ndisacknowledgement\ndisacquaint\ndisacquaintance\ndisadjust\ndisadorn\ndisadvance\ndisadvantage\ndisadvantageous\ndisadvantageously\ndisadvantageousness\ndisadventure\ndisadventurous\ndisadvise\ndisaffect\ndisaffectation\ndisaffected\ndisaffectedly\ndisaffectedness\ndisaffection\ndisaffectionate\ndisaffiliate\ndisaffiliation\ndisaffirm\ndisaffirmance\ndisaffirmation\ndisaffirmative\ndisafforest\ndisafforestation\ndisafforestment\ndisagglomeration\ndisaggregate\ndisaggregation\ndisaggregative\ndisagio\ndisagree\ndisagreeability\ndisagreeable\ndisagreeableness\ndisagreeably\ndisagreed\ndisagreement\ndisagreer\ndisalicylide\ndisalign\ndisalignment\ndisalike\ndisallow\ndisallowable\ndisallowableness\ndisallowance\ndisally\ndisamenity\nDisamis\ndisanagrammatize\ndisanalogous\ndisangularize\ndisanimal\ndisanimate\ndisanimation\ndisannex\ndisannexation\ndisannul\ndisannuller\ndisannulment\ndisanoint\ndisanswerable\ndisapostle\ndisapparel\ndisappear\ndisappearance\ndisappearer\ndisappearing\ndisappoint\ndisappointed\ndisappointedly\ndisappointer\ndisappointing\ndisappointingly\ndisappointingness\ndisappointment\ndisappreciate\ndisappreciation\ndisapprobation\ndisapprobative\ndisapprobatory\ndisappropriate\ndisappropriation\ndisapprovable\ndisapproval\ndisapprove\ndisapprover\ndisapprovingly\ndisaproned\ndisarchbishop\ndisarm\ndisarmament\ndisarmature\ndisarmed\ndisarmer\ndisarming\ndisarmingly\ndisarrange\ndisarrangement\ndisarray\ndisarticulate\ndisarticulation\ndisarticulator\ndisasinate\ndisasinize\ndisassemble\ndisassembly\ndisassimilate\ndisassimilation\ndisassimilative\ndisassociate\ndisassociation\ndisaster\ndisastimeter\ndisastrous\ndisastrously\ndisastrousness\ndisattaint\ndisattire\ndisattune\ndisauthenticate\ndisauthorize\ndisavow\ndisavowable\ndisavowal\ndisavowedly\ndisavower\ndisavowment\ndisawa\ndisazo\ndisbalance\ndisbalancement\ndisband\ndisbandment\ndisbar\ndisbark\ndisbarment\ndisbelief\ndisbelieve\ndisbeliever\ndisbelieving\ndisbelievingly\ndisbench\ndisbenchment\ndisbloom\ndisbody\ndisbosom\ndisbowel\ndisbrain\ndisbranch\ndisbud\ndisbudder\ndisburden\ndisburdenment\ndisbursable\ndisburse\ndisbursement\ndisburser\ndisburthen\ndisbury\ndisbutton\ndisc\ndiscage\ndiscal\ndiscalceate\ndiscalced\ndiscanonization\ndiscanonize\ndiscanter\ndiscantus\ndiscapacitate\ndiscard\ndiscardable\ndiscarder\ndiscardment\ndiscarnate\ndiscarnation\ndiscase\ndiscastle\ndiscept\ndisceptation\ndisceptator\ndiscern\ndiscerner\ndiscernible\ndiscernibleness\ndiscernibly\ndiscerning\ndiscerningly\ndiscernment\ndiscerp\ndiscerpibility\ndiscerpible\ndiscerpibleness\ndiscerptibility\ndiscerptible\ndiscerptibleness\ndiscerption\ndischaracter\ndischarge\ndischargeable\ndischargee\ndischarger\ndischarging\ndischarity\ndischarm\ndischase\nDisciflorae\ndiscifloral\ndisciform\ndiscigerous\nDiscina\ndiscinct\ndiscinoid\ndisciple\ndisciplelike\ndiscipleship\ndisciplinability\ndisciplinable\ndisciplinableness\ndisciplinal\ndisciplinant\ndisciplinarian\ndisciplinarianism\ndisciplinarily\ndisciplinary\ndisciplinative\ndisciplinatory\ndiscipline\ndiscipliner\ndiscipular\ndiscircumspection\ndiscission\ndiscitis\ndisclaim\ndisclaimant\ndisclaimer\ndisclamation\ndisclamatory\ndisclass\ndisclassify\ndisclike\ndisclimax\ndiscloister\ndisclose\ndisclosed\ndiscloser\ndisclosive\ndisclosure\ndiscloud\ndiscoach\ndiscoactine\ndiscoblastic\ndiscoblastula\ndiscobolus\ndiscocarp\ndiscocarpium\ndiscocarpous\ndiscocephalous\ndiscodactyl\ndiscodactylous\ndiscogastrula\ndiscoglossid\nDiscoglossidae\ndiscoglossoid\ndiscographical\ndiscography\ndiscohexaster\ndiscoid\ndiscoidal\nDiscoidea\nDiscoideae\ndiscolichen\ndiscolith\ndiscolor\ndiscolorate\ndiscoloration\ndiscolored\ndiscoloredness\ndiscolorization\ndiscolorment\ndiscolourization\nDiscomedusae\ndiscomedusan\ndiscomedusoid\ndiscomfit\ndiscomfiter\ndiscomfiture\ndiscomfort\ndiscomfortable\ndiscomfortableness\ndiscomforting\ndiscomfortingly\ndiscommend\ndiscommendable\ndiscommendableness\ndiscommendably\ndiscommendation\ndiscommender\ndiscommode\ndiscommodious\ndiscommodiously\ndiscommodiousness\ndiscommodity\ndiscommon\ndiscommons\ndiscommunity\ndiscomorula\ndiscompliance\ndiscompose\ndiscomposed\ndiscomposedly\ndiscomposedness\ndiscomposing\ndiscomposingly\ndiscomposure\ndiscomycete\nDiscomycetes\ndiscomycetous\nDisconanthae\ndisconanthous\ndisconcert\ndisconcerted\ndisconcertedly\ndisconcertedness\ndisconcerting\ndisconcertingly\ndisconcertingness\ndisconcertion\ndisconcertment\ndisconcord\ndisconduce\ndisconducive\nDisconectae\ndisconform\ndisconformable\ndisconformity\ndiscongruity\ndisconjure\ndisconnect\ndisconnected\ndisconnectedly\ndisconnectedness\ndisconnecter\ndisconnection\ndisconnective\ndisconnectiveness\ndisconnector\ndisconsider\ndisconsideration\ndisconsolate\ndisconsolately\ndisconsolateness\ndisconsolation\ndisconsonancy\ndisconsonant\ndiscontent\ndiscontented\ndiscontentedly\ndiscontentedness\ndiscontentful\ndiscontenting\ndiscontentive\ndiscontentment\ndiscontiguity\ndiscontiguous\ndiscontiguousness\ndiscontinuable\ndiscontinuance\ndiscontinuation\ndiscontinue\ndiscontinuee\ndiscontinuer\ndiscontinuity\ndiscontinuor\ndiscontinuous\ndiscontinuously\ndiscontinuousness\ndisconula\ndisconvenience\ndisconvenient\ndisconventicle\ndiscophile\nDiscophora\ndiscophoran\ndiscophore\ndiscophorous\ndiscoplacenta\ndiscoplacental\nDiscoplacentalia\ndiscoplacentalian\ndiscoplasm\ndiscopodous\ndiscord\ndiscordance\ndiscordancy\ndiscordant\ndiscordantly\ndiscordantness\ndiscordful\nDiscordia\ndiscording\ndiscorporate\ndiscorrespondency\ndiscorrespondent\ndiscount\ndiscountable\ndiscountenance\ndiscountenancer\ndiscounter\ndiscouple\ndiscourage\ndiscourageable\ndiscouragement\ndiscourager\ndiscouraging\ndiscouragingly\ndiscouragingness\ndiscourse\ndiscourseless\ndiscourser\ndiscoursive\ndiscoursively\ndiscoursiveness\ndiscourteous\ndiscourteously\ndiscourteousness\ndiscourtesy\ndiscous\ndiscovenant\ndiscover\ndiscoverability\ndiscoverable\ndiscoverably\ndiscovered\ndiscoverer\ndiscovert\ndiscoverture\ndiscovery\ndiscreate\ndiscreation\ndiscredence\ndiscredit\ndiscreditability\ndiscreditable\ndiscreet\ndiscreetly\ndiscreetness\ndiscrepance\ndiscrepancy\ndiscrepant\ndiscrepantly\ndiscrepate\ndiscrepation\ndiscrested\ndiscrete\ndiscretely\ndiscreteness\ndiscretion\ndiscretional\ndiscretionally\ndiscretionarily\ndiscretionary\ndiscretive\ndiscretively\ndiscretiveness\ndiscriminability\ndiscriminable\ndiscriminal\ndiscriminant\ndiscriminantal\ndiscriminate\ndiscriminately\ndiscriminateness\ndiscriminating\ndiscriminatingly\ndiscrimination\ndiscriminational\ndiscriminative\ndiscriminatively\ndiscriminator\ndiscriminatory\ndiscrown\ndisculpate\ndisculpation\ndisculpatory\ndiscumber\ndiscursative\ndiscursativeness\ndiscursify\ndiscursion\ndiscursive\ndiscursively\ndiscursiveness\ndiscursory\ndiscursus\ndiscurtain\ndiscus\ndiscuss\ndiscussable\ndiscussant\ndiscusser\ndiscussible\ndiscussion\ndiscussional\ndiscussionism\ndiscussionist\ndiscussive\ndiscussment\ndiscutable\ndiscutient\ndisdain\ndisdainable\ndisdainer\ndisdainful\ndisdainfully\ndisdainfulness\ndisdainly\ndisdeceive\ndisdenominationalize\ndisdiaclast\ndisdiaclastic\ndisdiapason\ndisdiazo\ndisdiplomatize\ndisdodecahedroid\ndisdub\ndisease\ndiseased\ndiseasedly\ndiseasedness\ndiseaseful\ndiseasefulness\ndisecondary\ndisedge\ndisedification\ndisedify\ndiseducate\ndiselder\ndiselectrification\ndiselectrify\ndiselenide\ndisematism\ndisembargo\ndisembark\ndisembarkation\ndisembarkment\ndisembarrass\ndisembarrassment\ndisembattle\ndisembed\ndisembellish\ndisembitter\ndisembocation\ndisembodiment\ndisembody\ndisembogue\ndisemboguement\ndisembosom\ndisembowel\ndisembowelment\ndisembower\ndisembroil\ndisemburden\ndiseme\ndisemic\ndisemplane\ndisemploy\ndisemployment\ndisempower\ndisenable\ndisenablement\ndisenact\ndisenactment\ndisenamor\ndisenamour\ndisenchain\ndisenchant\ndisenchanter\ndisenchantingly\ndisenchantment\ndisenchantress\ndisencharm\ndisenclose\ndisencumber\ndisencumberment\ndisencumbrance\ndisendow\ndisendower\ndisendowment\ndisenfranchise\ndisenfranchisement\ndisengage\ndisengaged\ndisengagedness\ndisengagement\ndisengirdle\ndisenjoy\ndisenjoyment\ndisenmesh\ndisennoble\ndisennui\ndisenshroud\ndisenslave\ndisensoul\ndisensure\ndisentail\ndisentailment\ndisentangle\ndisentanglement\ndisentangler\ndisenthral\ndisenthrall\ndisenthrallment\ndisenthralment\ndisenthrone\ndisenthronement\ndisentitle\ndisentomb\ndisentombment\ndisentrain\ndisentrainment\ndisentrammel\ndisentrance\ndisentrancement\ndisentwine\ndisenvelop\ndisepalous\ndisequalize\ndisequalizer\ndisequilibrate\ndisequilibration\ndisequilibrium\ndisestablish\ndisestablisher\ndisestablishment\ndisestablishmentarian\ndisesteem\ndisesteemer\ndisestimation\ndisexcommunicate\ndisfaith\ndisfame\ndisfashion\ndisfavor\ndisfavorer\ndisfeature\ndisfeaturement\ndisfellowship\ndisfen\ndisfiguration\ndisfigurative\ndisfigure\ndisfigurement\ndisfigurer\ndisfiguringly\ndisflesh\ndisfoliage\ndisforest\ndisforestation\ndisfranchise\ndisfranchisement\ndisfranchiser\ndisfrequent\ndisfriar\ndisfrock\ndisfurnish\ndisfurnishment\ndisgarland\ndisgarnish\ndisgarrison\ndisgavel\ndisgeneric\ndisgenius\ndisgig\ndisglorify\ndisglut\ndisgood\ndisgorge\ndisgorgement\ndisgorger\ndisgospel\ndisgown\ndisgrace\ndisgraceful\ndisgracefully\ndisgracefulness\ndisgracement\ndisgracer\ndisgracious\ndisgradation\ndisgrade\ndisgregate\ndisgregation\ndisgruntle\ndisgruntlement\ndisguisable\ndisguisal\ndisguise\ndisguised\ndisguisedly\ndisguisedness\ndisguiseless\ndisguisement\ndisguiser\ndisguising\ndisgulf\ndisgust\ndisgusted\ndisgustedly\ndisgustedness\ndisguster\ndisgustful\ndisgustfully\ndisgustfulness\ndisgusting\ndisgustingly\ndisgustingness\ndish\ndishabilitate\ndishabilitation\ndishabille\ndishabituate\ndishallow\ndishallucination\ndisharmonic\ndisharmonical\ndisharmonious\ndisharmonism\ndisharmonize\ndisharmony\ndishboard\ndishcloth\ndishclout\ndisheart\ndishearten\ndisheartener\ndisheartening\ndishearteningly\ndisheartenment\ndisheaven\ndished\ndishellenize\ndishelm\ndisher\ndisherent\ndisherison\ndisherit\ndisheritment\ndishevel\ndisheveled\ndishevelment\ndishexecontahedroid\ndishful\nDishley\ndishlike\ndishling\ndishmaker\ndishmaking\ndishmonger\ndishome\ndishonest\ndishonestly\ndishonor\ndishonorable\ndishonorableness\ndishonorably\ndishonorary\ndishonorer\ndishorn\ndishorner\ndishorse\ndishouse\ndishpan\ndishpanful\ndishrag\ndishumanize\ndishwasher\ndishwashing\ndishwashings\ndishwater\ndishwatery\ndishwiper\ndishwiping\ndisidentify\ndisilane\ndisilicane\ndisilicate\ndisilicic\ndisilicid\ndisilicide\ndisillude\ndisilluminate\ndisillusion\ndisillusionist\ndisillusionize\ndisillusionizer\ndisillusionment\ndisillusive\ndisimagine\ndisimbitter\ndisimitate\ndisimitation\ndisimmure\ndisimpark\ndisimpassioned\ndisimprison\ndisimprisonment\ndisimprove\ndisimprovement\ndisincarcerate\ndisincarceration\ndisincarnate\ndisincarnation\ndisinclination\ndisincline\ndisincorporate\ndisincorporation\ndisincrust\ndisincrustant\ndisincrustion\ndisindividualize\ndisinfect\ndisinfectant\ndisinfecter\ndisinfection\ndisinfective\ndisinfector\ndisinfest\ndisinfestation\ndisinfeudation\ndisinflame\ndisinflate\ndisinflation\ndisingenuity\ndisingenuous\ndisingenuously\ndisingenuousness\ndisinherison\ndisinherit\ndisinheritable\ndisinheritance\ndisinhume\ndisinsulation\ndisinsure\ndisintegrable\ndisintegrant\ndisintegrate\ndisintegration\ndisintegrationist\ndisintegrative\ndisintegrator\ndisintegratory\ndisintegrity\ndisintegrous\ndisintensify\ndisinter\ndisinterest\ndisinterested\ndisinterestedly\ndisinterestedness\ndisinteresting\ndisinterment\ndisintertwine\ndisintrench\ndisintricate\ndisinvagination\ndisinvest\ndisinvestiture\ndisinvigorate\ndisinvite\ndisinvolve\ndisjasked\ndisject\ndisjection\ndisjoin\ndisjoinable\ndisjoint\ndisjointed\ndisjointedly\ndisjointedness\ndisjointly\ndisjointure\ndisjunct\ndisjunction\ndisjunctive\ndisjunctively\ndisjunctor\ndisjuncture\ndisjune\ndisk\ndiskelion\ndiskless\ndisklike\ndislaurel\ndisleaf\ndislegitimate\ndislevelment\ndislicense\ndislikable\ndislike\ndislikelihood\ndisliker\ndisliking\ndislimn\ndislink\ndislip\ndisload\ndislocability\ndislocable\ndislocate\ndislocated\ndislocatedly\ndislocatedness\ndislocation\ndislocator\ndislocatory\ndislodge\ndislodgeable\ndislodgement\ndislove\ndisloyal\ndisloyalist\ndisloyally\ndisloyalty\ndisluster\ndismain\ndismal\ndismality\ndismalize\ndismally\ndismalness\ndisman\ndismantle\ndismantlement\ndismantler\ndismarble\ndismark\ndismarket\ndismask\ndismast\ndismastment\ndismay\ndismayable\ndismayed\ndismayedness\ndismayful\ndismayfully\ndismayingly\ndisme\ndismember\ndismembered\ndismemberer\ndismemberment\ndismembrate\ndismembrator\ndisminion\ndisminister\ndismiss\ndismissable\ndismissal\ndismissible\ndismissingly\ndismission\ndismissive\ndismissory\ndismoded\ndismount\ndismountable\ndismutation\ndisna\ndisnaturalization\ndisnaturalize\ndisnature\ndisnest\ndisnew\ndisniche\ndisnosed\ndisnumber\ndisobedience\ndisobedient\ndisobediently\ndisobey\ndisobeyal\ndisobeyer\ndisobligation\ndisoblige\ndisobliger\ndisobliging\ndisobligingly\ndisobligingness\ndisoccupation\ndisoccupy\ndisodic\ndisodium\ndisomatic\ndisomatous\ndisomic\ndisomus\ndisoperculate\ndisorb\ndisorchard\ndisordained\ndisorder\ndisordered\ndisorderedly\ndisorderedness\ndisorderer\ndisorderliness\ndisorderly\ndisordinated\ndisordination\ndisorganic\ndisorganization\ndisorganize\ndisorganizer\ndisorient\ndisorientate\ndisorientation\ndisown\ndisownable\ndisownment\ndisoxygenate\ndisoxygenation\ndisozonize\ndispapalize\ndisparage\ndisparageable\ndisparagement\ndisparager\ndisparaging\ndisparagingly\ndisparate\ndisparately\ndisparateness\ndisparation\ndisparity\ndispark\ndispart\ndispartment\ndispassionate\ndispassionately\ndispassionateness\ndispassioned\ndispatch\ndispatcher\ndispatchful\ndispatriated\ndispauper\ndispauperize\ndispeace\ndispeaceful\ndispel\ndispeller\ndispend\ndispender\ndispendious\ndispendiously\ndispenditure\ndispensability\ndispensable\ndispensableness\ndispensary\ndispensate\ndispensation\ndispensational\ndispensative\ndispensatively\ndispensator\ndispensatorily\ndispensatory\ndispensatress\ndispensatrix\ndispense\ndispenser\ndispensingly\ndispeople\ndispeoplement\ndispeopler\ndispergate\ndispergation\ndispergator\ndispericraniate\ndisperiwig\ndispermic\ndispermous\ndispermy\ndispersal\ndispersant\ndisperse\ndispersed\ndispersedly\ndispersedness\ndispersement\ndisperser\ndispersibility\ndispersible\ndispersion\ndispersity\ndispersive\ndispersively\ndispersiveness\ndispersoid\ndispersoidological\ndispersoidology\ndispersonalize\ndispersonate\ndispersonification\ndispersonify\ndispetal\ndisphenoid\ndispiece\ndispireme\ndispirit\ndispirited\ndispiritedly\ndispiritedness\ndispiritingly\ndispiritment\ndispiteous\ndispiteously\ndispiteousness\ndisplace\ndisplaceability\ndisplaceable\ndisplacement\ndisplacency\ndisplacer\ndisplant\ndisplay\ndisplayable\ndisplayed\ndisplayer\ndisplease\ndispleased\ndispleasedly\ndispleaser\ndispleasing\ndispleasingly\ndispleasingness\ndispleasurable\ndispleasurably\ndispleasure\ndispleasurement\ndisplenish\ndisplicency\ndisplume\ndispluviate\ndispondaic\ndispondee\ndispone\ndisponee\ndisponent\ndisponer\ndispope\ndispopularize\ndisporous\ndisport\ndisportive\ndisportment\nDisporum\ndisposability\ndisposable\ndisposableness\ndisposal\ndispose\ndisposed\ndisposedly\ndisposedness\ndisposer\ndisposingly\ndisposition\ndispositional\ndispositioned\ndispositive\ndispositively\ndispossess\ndispossession\ndispossessor\ndispossessory\ndispost\ndisposure\ndispowder\ndispractice\ndispraise\ndispraiser\ndispraisingly\ndispread\ndispreader\ndisprejudice\ndisprepare\ndisprince\ndisprison\ndisprivacied\ndisprivilege\ndisprize\ndisprobabilization\ndisprobabilize\ndisprobative\ndispromise\ndisproof\ndisproportion\ndisproportionable\ndisproportionableness\ndisproportionably\ndisproportional\ndisproportionality\ndisproportionally\ndisproportionalness\ndisproportionate\ndisproportionately\ndisproportionateness\ndisproportionation\ndisprovable\ndisproval\ndisprove\ndisprovement\ndisproven\ndisprover\ndispulp\ndispunct\ndispunishable\ndispunitive\ndisputability\ndisputable\ndisputableness\ndisputably\ndisputant\ndisputation\ndisputatious\ndisputatiously\ndisputatiousness\ndisputative\ndisputatively\ndisputativeness\ndisputator\ndispute\ndisputeless\ndisputer\ndisqualification\ndisqualify\ndisquantity\ndisquiet\ndisquieted\ndisquietedly\ndisquietedness\ndisquieten\ndisquieter\ndisquieting\ndisquietingly\ndisquietly\ndisquietness\ndisquietude\ndisquiparancy\ndisquiparant\ndisquiparation\ndisquisite\ndisquisition\ndisquisitional\ndisquisitionary\ndisquisitive\ndisquisitively\ndisquisitor\ndisquisitorial\ndisquisitory\ndisquixote\ndisrank\ndisrate\ndisrealize\ndisrecommendation\ndisregard\ndisregardable\ndisregardance\ndisregardant\ndisregarder\ndisregardful\ndisregardfully\ndisregardfulness\ndisrelated\ndisrelation\ndisrelish\ndisrelishable\ndisremember\ndisrepair\ndisreputability\ndisreputable\ndisreputableness\ndisreputably\ndisreputation\ndisrepute\ndisrespect\ndisrespecter\ndisrespectful\ndisrespectfully\ndisrespectfulness\ndisrestore\ndisring\ndisrobe\ndisrobement\ndisrober\ndisroof\ndisroost\ndisroot\ndisrudder\ndisrump\ndisrupt\ndisruptability\ndisruptable\ndisrupter\ndisruption\ndisruptionist\ndisruptive\ndisruptively\ndisruptiveness\ndisruptment\ndisruptor\ndisrupture\ndiss\ndissatisfaction\ndissatisfactoriness\ndissatisfactory\ndissatisfied\ndissatisfiedly\ndissatisfiedness\ndissatisfy\ndissaturate\ndisscepter\ndisseat\ndissect\ndissected\ndissectible\ndissecting\ndissection\ndissectional\ndissective\ndissector\ndisseize\ndisseizee\ndisseizin\ndisseizor\ndisseizoress\ndisselboom\ndissemblance\ndissemble\ndissembler\ndissemblingly\ndissembly\ndissemilative\ndisseminate\ndissemination\ndisseminative\ndisseminator\ndisseminule\ndissension\ndissensualize\ndissent\ndissentaneous\ndissentaneousness\ndissenter\ndissenterism\ndissentience\ndissentiency\ndissentient\ndissenting\ndissentingly\ndissentious\ndissentiously\ndissentism\ndissentment\ndissepiment\ndissepimental\ndissert\ndissertate\ndissertation\ndissertational\ndissertationist\ndissertative\ndissertator\ndisserve\ndisservice\ndisserviceable\ndisserviceableness\ndisserviceably\ndissettlement\ndissever\ndisseverance\ndisseverment\ndisshadow\ndissheathe\ndisshroud\ndissidence\ndissident\ndissidently\ndissight\ndissightly\ndissiliency\ndissilient\ndissimilar\ndissimilarity\ndissimilarly\ndissimilars\ndissimilate\ndissimilation\ndissimilatory\ndissimile\ndissimilitude\ndissimulate\ndissimulation\ndissimulative\ndissimulator\ndissimule\ndissimuler\ndissipable\ndissipate\ndissipated\ndissipatedly\ndissipatedness\ndissipater\ndissipation\ndissipative\ndissipativity\ndissipator\ndissociability\ndissociable\ndissociableness\ndissocial\ndissociality\ndissocialize\ndissociant\ndissociate\ndissociation\ndissociative\ndissoconch\ndissogeny\ndissogony\ndissolubility\ndissoluble\ndissolubleness\ndissolute\ndissolutely\ndissoluteness\ndissolution\ndissolutional\ndissolutionism\ndissolutionist\ndissolutive\ndissolvable\ndissolvableness\ndissolve\ndissolveability\ndissolvent\ndissolver\ndissolving\ndissolvingly\ndissonance\ndissonancy\ndissonant\ndissonantly\ndissonous\ndissoul\ndissuade\ndissuader\ndissuasion\ndissuasive\ndissuasively\ndissuasiveness\ndissuasory\ndissuit\ndissuitable\ndissuited\ndissyllabic\ndissyllabification\ndissyllabify\ndissyllabism\ndissyllabize\ndissyllable\ndissymmetric\ndissymmetrical\ndissymmetrically\ndissymmetry\ndissympathize\ndissympathy\ndistad\ndistaff\ndistain\ndistal\ndistale\ndistally\ndistalwards\ndistance\ndistanceless\ndistancy\ndistannic\ndistant\ndistantly\ndistantness\ndistaste\ndistasted\ndistasteful\ndistastefully\ndistastefulness\ndistater\ndistemonous\ndistemper\ndistemperature\ndistempered\ndistemperedly\ndistemperedness\ndistemperer\ndistenant\ndistend\ndistendedly\ndistender\ndistensibility\ndistensible\ndistensive\ndistent\ndistention\ndisthene\ndisthrall\ndisthrone\ndistich\nDistichlis\ndistichous\ndistichously\ndistill\ndistillable\ndistillage\ndistilland\ndistillate\ndistillation\ndistillatory\ndistilled\ndistiller\ndistillery\ndistilling\ndistillmint\ndistinct\ndistinctify\ndistinction\ndistinctional\ndistinctionless\ndistinctive\ndistinctively\ndistinctiveness\ndistinctly\ndistinctness\ndistingue\ndistinguish\ndistinguishability\ndistinguishable\ndistinguishableness\ndistinguishably\ndistinguished\ndistinguishedly\ndistinguisher\ndistinguishing\ndistinguishingly\ndistinguishment\ndistoclusion\nDistoma\nDistomatidae\ndistomatosis\ndistomatous\ndistome\ndistomian\ndistomiasis\nDistomidae\nDistomum\ndistort\ndistorted\ndistortedly\ndistortedness\ndistorter\ndistortion\ndistortional\ndistortionist\ndistortionless\ndistortive\ndistract\ndistracted\ndistractedly\ndistractedness\ndistracter\ndistractibility\ndistractible\ndistractingly\ndistraction\ndistractive\ndistractively\ndistrain\ndistrainable\ndistrainee\ndistrainer\ndistrainment\ndistrainor\ndistraint\ndistrait\ndistraite\ndistraught\ndistress\ndistressed\ndistressedly\ndistressedness\ndistressful\ndistressfully\ndistressfulness\ndistressing\ndistressingly\ndistributable\ndistributary\ndistribute\ndistributed\ndistributedly\ndistributee\ndistributer\ndistribution\ndistributional\ndistributionist\ndistributival\ndistributive\ndistributively\ndistributiveness\ndistributor\ndistributress\ndistrict\ndistrouser\ndistrust\ndistruster\ndistrustful\ndistrustfully\ndistrustfulness\ndistrustingly\ndistune\ndisturb\ndisturbance\ndisturbative\ndisturbed\ndisturbedly\ndisturber\ndisturbing\ndisturbingly\ndisturn\ndisturnpike\ndisubstituted\ndisubstitution\ndisulfonic\ndisulfuric\ndisulphate\ndisulphide\ndisulphonate\ndisulphone\ndisulphonic\ndisulphoxide\ndisulphuret\ndisulphuric\ndisuniform\ndisuniformity\ndisunify\ndisunion\ndisunionism\ndisunionist\ndisunite\ndisuniter\ndisunity\ndisusage\ndisusance\ndisuse\ndisutility\ndisutilize\ndisvaluation\ndisvalue\ndisvertebrate\ndisvisage\ndisvoice\ndisvulnerability\ndiswarren\ndiswench\ndiswood\ndisworth\ndisyllabic\ndisyllable\ndisyoke\ndit\ndita\ndital\nditch\nditchbank\nditchbur\nditchdigger\nditchdown\nditcher\nditchless\nditchside\nditchwater\ndite\nditer\nditerpene\nditertiary\nditetragonal\ndithalous\ndithecal\nditheism\nditheist\nditheistic\nditheistical\ndithematic\ndither\ndithery\ndithiobenzoic\ndithioglycol\ndithioic\ndithion\ndithionate\ndithionic\ndithionite\ndithionous\ndithymol\ndithyramb\ndithyrambic\ndithyrambically\nDithyrambos\nDithyrambus\nditokous\nditolyl\nditone\nditrematous\nditremid\nDitremidae\nditrichotomous\nditriglyph\nditriglyphic\nditrigonal\nditrigonally\nDitrocha\nditrochean\nditrochee\nditrochous\nditroite\ndittamy\ndittander\ndittany\ndittay\ndittied\nditto\ndittogram\ndittograph\ndittographic\ndittography\ndittology\nditty\ndiumvirate\ndiuranate\ndiureide\ndiuresis\ndiuretic\ndiuretically\ndiureticalness\nDiurna\ndiurnal\ndiurnally\ndiurnalness\ndiurnation\ndiurne\ndiurnule\ndiuturnal\ndiuturnity\ndiv\ndiva\ndivagate\ndivagation\ndivalence\ndivalent\ndivan\ndivariant\ndivaricate\ndivaricately\ndivaricating\ndivaricatingly\ndivarication\ndivaricator\ndivata\ndive\ndivekeeper\ndivel\ndivellent\ndivellicate\ndiver\ndiverge\ndivergement\ndivergence\ndivergency\ndivergent\ndivergently\ndiverging\ndivergingly\ndivers\ndiverse\ndiversely\ndiverseness\ndiversicolored\ndiversifiability\ndiversifiable\ndiversification\ndiversified\ndiversifier\ndiversiflorate\ndiversiflorous\ndiversifoliate\ndiversifolious\ndiversiform\ndiversify\ndiversion\ndiversional\ndiversionary\ndiversipedate\ndiversisporous\ndiversity\ndiversly\ndiversory\ndivert\ndivertedly\ndiverter\ndivertibility\ndivertible\ndiverticle\ndiverticular\ndiverticulate\ndiverticulitis\ndiverticulosis\ndiverticulum\ndiverting\ndivertingly\ndivertingness\ndivertisement\ndivertive\ndivertor\ndivest\ndivestible\ndivestitive\ndivestiture\ndivestment\ndivesture\ndividable\ndividableness\ndivide\ndivided\ndividedly\ndividedness\ndividend\ndivider\ndividing\ndividingly\ndividual\ndividualism\ndividually\ndividuity\ndividuous\ndivinable\ndivinail\ndivination\ndivinator\ndivinatory\ndivine\ndivinely\ndivineness\ndiviner\ndivineress\ndiving\ndivinify\ndivining\ndiviningly\ndivinity\ndivinityship\ndivinization\ndivinize\ndivinyl\ndivisibility\ndivisible\ndivisibleness\ndivisibly\ndivision\ndivisional\ndivisionally\ndivisionary\ndivisionism\ndivisionist\ndivisionistic\ndivisive\ndivisively\ndivisiveness\ndivisor\ndivisorial\ndivisory\ndivisural\ndivorce\ndivorceable\ndivorcee\ndivorcement\ndivorcer\ndivorcible\ndivorcive\ndivot\ndivoto\ndivulgate\ndivulgater\ndivulgation\ndivulgatory\ndivulge\ndivulgement\ndivulgence\ndivulger\ndivulse\ndivulsion\ndivulsive\ndivulsor\ndivus\nDivvers\ndivvy\ndiwata\ndixenite\nDixie\ndixie\nDixiecrat\ndixit\ndixy\ndizain\ndizen\ndizenment\ndizoic\ndizygotic\ndizzard\ndizzily\ndizziness\ndizzy\nDjagatay\ndjasakid\ndjave\ndjehad\ndjerib\ndjersa\nDjuka\ndo\ndoab\ndoable\ndoarium\ndoat\ndoated\ndoater\ndoating\ndoatish\nDob\ndob\ndobbed\ndobber\ndobbin\ndobbing\ndobby\ndobe\ndobla\ndoblon\ndobra\ndobrao\ndobson\ndoby\ndoc\ndocent\ndocentship\nDocetae\nDocetic\nDocetically\nDocetism\nDocetist\nDocetistic\nDocetize\ndochmiac\ndochmiacal\ndochmiasis\ndochmius\ndocibility\ndocible\ndocibleness\ndocile\ndocilely\ndocility\ndocimasia\ndocimastic\ndocimastical\ndocimasy\ndocimology\ndocity\ndock\ndockage\ndocken\ndocker\ndocket\ndockhead\ndockhouse\ndockization\ndockize\ndockland\ndockmackie\ndockman\ndockmaster\ndockside\ndockyard\ndockyardman\ndocmac\nDocoglossa\ndocoglossan\ndocoglossate\ndocosane\ndoctor\ndoctoral\ndoctorally\ndoctorate\ndoctorbird\ndoctordom\ndoctoress\ndoctorfish\ndoctorhood\ndoctorial\ndoctorially\ndoctorization\ndoctorize\ndoctorless\ndoctorlike\ndoctorly\ndoctorship\ndoctress\ndoctrinaire\ndoctrinairism\ndoctrinal\ndoctrinalism\ndoctrinalist\ndoctrinality\ndoctrinally\ndoctrinarian\ndoctrinarianism\ndoctrinarily\ndoctrinarity\ndoctrinary\ndoctrinate\ndoctrine\ndoctrinism\ndoctrinist\ndoctrinization\ndoctrinize\ndoctrix\ndocument\ndocumental\ndocumentalist\ndocumentarily\ndocumentary\ndocumentation\ndocumentize\ndod\ndodd\ndoddart\ndodded\ndodder\ndoddered\ndodderer\ndoddering\ndoddery\ndoddie\ndodding\ndoddle\ndoddy\ndoddypoll\nDode\ndodecade\ndodecadrachm\ndodecafid\ndodecagon\ndodecagonal\ndodecahedral\ndodecahedric\ndodecahedron\ndodecahydrate\ndodecahydrated\ndodecamerous\ndodecane\nDodecanesian\ndodecanoic\ndodecant\ndodecapartite\ndodecapetalous\ndodecarch\ndodecarchy\ndodecasemic\ndodecastyle\ndodecastylos\ndodecasyllabic\ndodecasyllable\ndodecatemory\nDodecatheon\ndodecatoic\ndodecatyl\ndodecatylic\ndodecuplet\ndodecyl\ndodecylene\ndodecylic\ndodge\ndodgeful\ndodger\ndodgery\ndodgily\ndodginess\ndodgy\ndodkin\ndodlet\ndodman\ndodo\ndodoism\nDodona\nDodonaea\nDodonaeaceae\nDodonaean\nDodonean\nDodonian\ndodrans\ndoe\ndoebird\nDoedicurus\nDoeg\ndoeglic\ndoegling\ndoer\ndoes\ndoeskin\ndoesnt\ndoest\ndoff\ndoffer\ndoftberry\ndog\ndogal\ndogate\ndogbane\nDogberry\ndogberry\nDogberrydom\nDogberryism\ndogbite\ndogblow\ndogboat\ndogbolt\ndogbush\ndogcart\ndogcatcher\ndogdom\ndoge\ndogedom\ndogeless\ndogeship\ndogface\ndogfall\ndogfight\ndogfish\ndogfoot\ndogged\ndoggedly\ndoggedness\ndogger\ndoggerel\ndoggereler\ndoggerelism\ndoggerelist\ndoggerelize\ndoggerelizer\ndoggery\ndoggess\ndoggish\ndoggishly\ndoggishness\ndoggo\ndoggone\ndoggoned\ndoggrel\ndoggrelize\ndoggy\ndoghead\ndoghearted\ndoghole\ndoghood\ndoghouse\ndogie\ndogless\ndoglike\ndogly\ndogma\ndogman\ndogmata\ndogmatic\ndogmatical\ndogmatically\ndogmaticalness\ndogmatician\ndogmatics\ndogmatism\ndogmatist\ndogmatization\ndogmatize\ndogmatizer\ndogmouth\ndogplate\ndogproof\nDogra\nDogrib\ndogs\ndogship\ndogshore\ndogskin\ndogsleep\ndogstone\ndogtail\ndogtie\ndogtooth\ndogtoothing\ndogtrick\ndogtrot\ndogvane\ndogwatch\ndogwood\ndogy\ndoigt\ndoiled\ndoily\ndoina\ndoing\ndoings\ndoit\ndoited\ndoitkin\ndoitrified\ndoke\nDoketic\nDoketism\ndokhma\ndokimastic\nDokmarok\nDoko\nDol\ndola\ndolabra\ndolabrate\ndolabriform\ndolcan\ndolcian\ndolciano\ndolcino\ndoldrum\ndoldrums\ndole\ndolefish\ndoleful\ndolefully\ndolefulness\ndolefuls\ndolent\ndolently\ndolerite\ndoleritic\ndolerophanite\ndolesman\ndolesome\ndolesomely\ndolesomeness\ndoless\ndoli\ndolia\ndolichoblond\ndolichocephal\ndolichocephali\ndolichocephalic\ndolichocephalism\ndolichocephalize\ndolichocephalous\ndolichocephaly\ndolichocercic\ndolichocnemic\ndolichocranial\ndolichofacial\nDolichoglossus\ndolichohieric\nDolicholus\ndolichopellic\ndolichopodous\ndolichoprosopic\nDolichopsyllidae\nDolichos\ndolichos\ndolichosaur\nDolichosauri\nDolichosauria\nDolichosaurus\nDolichosoma\ndolichostylous\ndolichotmema\ndolichuric\ndolichurus\nDoliidae\ndolina\ndoline\ndolioform\nDoliolidae\nDoliolum\ndolium\ndoll\ndollar\ndollarbird\ndollardee\ndollardom\ndollarfish\ndollarleaf\ndollbeer\ndolldom\ndollface\ndollfish\ndollhood\ndollhouse\ndollier\ndolliness\ndollish\ndollishly\ndollishness\ndollmaker\ndollmaking\ndollop\ndollship\ndolly\ndollyman\ndollyway\ndolman\ndolmen\ndolmenic\nDolomedes\ndolomite\ndolomitic\ndolomitization\ndolomitize\ndolomization\ndolomize\ndolor\nDolores\ndoloriferous\ndolorific\ndolorifuge\ndolorous\ndolorously\ndolorousness\ndolose\ndolous\nDolph\ndolphin\ndolphinlike\nDolphus\ndolt\ndolthead\ndoltish\ndoltishly\ndoltishness\ndom\ndomain\ndomainal\ndomal\ndomanial\ndomatium\ndomatophobia\ndomba\nDombeya\nDomdaniel\ndome\ndomelike\ndoment\ndomer\ndomesday\ndomestic\ndomesticable\ndomesticality\ndomestically\ndomesticate\ndomestication\ndomesticative\ndomesticator\ndomesticity\ndomesticize\ndomett\ndomeykite\ndomic\ndomical\ndomically\nDomicella\ndomicile\ndomicilement\ndomiciliar\ndomiciliary\ndomiciliate\ndomiciliation\ndominance\ndominancy\ndominant\ndominantly\ndominate\ndominated\ndominatingly\ndomination\ndominative\ndominator\ndomine\ndomineer\ndomineerer\ndomineering\ndomineeringly\ndomineeringness\ndominial\nDominic\ndominical\ndominicale\nDominican\nDominick\ndominie\ndominion\ndominionism\ndominionist\nDominique\ndominium\ndomino\ndominus\ndomitable\ndomite\nDomitian\ndomitic\ndomn\ndomnei\ndomoid\ndompt\ndomy\nDon\ndon\ndonable\nDonacidae\ndonaciform\nDonal\nDonald\nDonar\ndonary\ndonatary\ndonate\ndonated\ndonatee\nDonatiaceae\ndonation\nDonatism\nDonatist\nDonatistic\nDonatistical\ndonative\ndonatively\ndonator\ndonatory\ndonatress\ndonax\ndoncella\nDondia\ndone\ndonee\nDonet\ndoney\ndong\ndonga\nDongola\nDongolese\ndongon\nDonia\ndonjon\ndonkey\ndonkeyback\ndonkeyish\ndonkeyism\ndonkeyman\ndonkeywork\nDonmeh\nDonn\nDonna\ndonna\nDonne\ndonnered\ndonnert\nDonnie\ndonnish\ndonnishness\ndonnism\ndonnot\ndonor\ndonorship\ndonought\nDonovan\ndonship\ndonsie\ndont\ndonum\ndoob\ndoocot\ndoodab\ndoodad\nDoodia\ndoodle\ndoodlebug\ndoodler\ndoodlesack\ndoohickey\ndoohickus\ndoohinkey\ndoohinkus\ndooja\ndook\ndooket\ndookit\ndool\ndoolee\ndooley\ndooli\ndoolie\ndooly\ndoom\ndoomage\ndoombook\ndoomer\ndoomful\ndooms\ndoomsday\ndoomsman\ndoomstead\ndoon\ndoor\ndoorba\ndoorbell\ndoorboy\ndoorbrand\ndoorcase\ndoorcheek\ndoored\ndoorframe\ndoorhead\ndoorjamb\ndoorkeeper\ndoorknob\ndoorless\ndoorlike\ndoormaid\ndoormaker\ndoormaking\ndoorman\ndoornail\ndoorplate\ndoorpost\ndoorsill\ndoorstead\ndoorstep\ndoorstone\ndoorstop\ndoorward\ndoorway\ndoorweed\ndoorwise\ndooryard\ndop\ndopa\ndopamelanin\ndopaoxidase\ndopatta\ndope\ndopebook\ndoper\ndopester\ndopey\ndoppelkummel\nDopper\ndopper\ndoppia\nDoppler\ndopplerite\nDor\ndor\nDora\ndorab\ndorad\nDoradidae\ndorado\ndoraphobia\nDorask\nDoraskean\ndorbeetle\nDorcas\ndorcastry\nDorcatherium\nDorcopsis\ndoree\ndorestane\ndorhawk\nDori\ndoria\nDorian\nDoric\nDorical\nDoricism\nDoricize\nDorididae\nDorine\nDoris\nDorism\nDorize\ndorje\nDorking\ndorlach\ndorlot\ndorm\ndormancy\ndormant\ndormer\ndormered\ndormie\ndormient\ndormilona\ndormition\ndormitive\ndormitory\ndormouse\ndormy\ndorn\ndorneck\ndornic\ndornick\ndornock\nDorobo\nDoronicum\nDorosoma\nDorothea\nDorothy\ndorp\ndorsabdominal\ndorsabdominally\ndorsad\ndorsal\ndorsale\ndorsalgia\ndorsalis\ndorsally\ndorsalmost\ndorsalward\ndorsalwards\ndorsel\ndorser\ndorsibranch\nDorsibranchiata\ndorsibranchiate\ndorsicollar\ndorsicolumn\ndorsicommissure\ndorsicornu\ndorsiduct\ndorsiferous\ndorsifixed\ndorsiflex\ndorsiflexion\ndorsiflexor\ndorsigrade\ndorsilateral\ndorsilumbar\ndorsimedian\ndorsimesal\ndorsimeson\ndorsiparous\ndorsispinal\ndorsiventral\ndorsiventrality\ndorsiventrally\ndorsoabdominal\ndorsoanterior\ndorsoapical\nDorsobranchiata\ndorsocaudad\ndorsocaudal\ndorsocentral\ndorsocephalad\ndorsocephalic\ndorsocervical\ndorsocervically\ndorsodynia\ndorsoepitrochlear\ndorsointercostal\ndorsointestinal\ndorsolateral\ndorsolumbar\ndorsomedial\ndorsomedian\ndorsomesal\ndorsonasal\ndorsonuchal\ndorsopleural\ndorsoposteriad\ndorsoposterior\ndorsoradial\ndorsosacral\ndorsoscapular\ndorsosternal\ndorsothoracic\ndorsoventrad\ndorsoventral\ndorsoventrally\nDorstenia\ndorsulum\ndorsum\ndorsumbonal\ndorter\ndortiness\ndortiship\ndorts\ndorty\ndoruck\nDory\ndory\nDoryanthes\nDorylinae\ndoryphorus\ndos\ndosa\ndosadh\ndosage\ndose\ndoser\ndosimeter\ndosimetric\ndosimetrician\ndosimetrist\ndosimetry\nDosinia\ndosiology\ndosis\nDositheans\ndosology\ndoss\ndossal\ndossel\ndosser\ndosseret\ndossier\ndossil\ndossman\nDot\ndot\ndotage\ndotal\ndotard\ndotardism\ndotardly\ndotardy\ndotate\ndotation\ndotchin\ndote\ndoted\ndoter\nDothideacea\ndothideaceous\nDothideales\nDothidella\ndothienenteritis\nDothiorella\ndotiness\ndoting\ndotingly\ndotingness\ndotish\ndotishness\ndotkin\ndotless\ndotlike\nDoto\nDotonidae\ndotriacontane\ndotted\ndotter\ndotterel\ndottily\ndottiness\ndotting\ndottle\ndottler\nDottore\nDotty\ndotty\ndoty\ndouar\ndouble\ndoubled\ndoubledamn\ndoubleganger\ndoublegear\ndoublehanded\ndoublehandedly\ndoublehandedness\ndoublehatching\ndoublehearted\ndoubleheartedness\ndoublehorned\ndoubleleaf\ndoublelunged\ndoubleness\ndoubler\ndoublet\ndoubleted\ndoubleton\ndoubletone\ndoubletree\ndoublets\ndoubling\ndoubloon\ndoubly\ndoubt\ndoubtable\ndoubtably\ndoubtedly\ndoubter\ndoubtful\ndoubtfully\ndoubtfulness\ndoubting\ndoubtingly\ndoubtingness\ndoubtless\ndoubtlessly\ndoubtlessness\ndoubtmonger\ndoubtous\ndoubtsome\ndouc\ndouce\ndoucely\ndouceness\ndoucet\ndouche\ndoucin\ndoucine\ndoudle\nDoug\ndough\ndoughbird\ndoughboy\ndoughface\ndoughfaceism\ndoughfoot\ndoughhead\ndoughiness\ndoughlike\ndoughmaker\ndoughmaking\ndoughman\ndoughnut\ndought\ndoughtily\ndoughtiness\ndoughty\ndoughy\nDouglas\ndoulocracy\ndoum\ndoundake\ndoup\ndouping\ndour\ndourine\ndourly\ndourness\ndouse\ndouser\ndout\ndouter\ndoutous\ndouzepers\ndouzieme\ndove\ndovecot\ndoveflower\ndovefoot\ndovehouse\ndovekey\ndovekie\ndovelet\ndovelike\ndoveling\ndover\ndovetail\ndovetailed\ndovetailer\ndovetailwise\ndoveweed\ndovewood\ndovish\nDovyalis\ndow\ndowable\ndowager\ndowagerism\ndowcet\ndowd\ndowdily\ndowdiness\ndowdy\ndowdyish\ndowdyism\ndowed\ndowel\ndower\ndoweral\ndoweress\ndowerless\ndowery\ndowf\ndowie\nDowieism\nDowieite\ndowily\ndowiness\ndowitch\ndowitcher\ndowl\ndowlas\ndowless\ndown\ndownbear\ndownbeard\ndownbeat\ndownby\ndowncast\ndowncastly\ndowncastness\ndowncome\ndowncomer\ndowncoming\ndowncry\ndowncurved\ndowncut\ndowndale\ndowndraft\ndowner\ndownface\ndownfall\ndownfallen\ndownfalling\ndownfeed\ndownflow\ndownfold\ndownfolded\ndowngate\ndowngone\ndowngrade\ndowngrowth\ndownhanging\ndownhaul\ndownheaded\ndownhearted\ndownheartedly\ndownheartedness\ndownhill\ndownily\ndowniness\nDowning\nDowningia\ndownland\ndownless\ndownlie\ndownlier\ndownligging\ndownlike\ndownline\ndownlooked\ndownlooker\ndownlying\ndownmost\ndownness\ndownpour\ndownpouring\ndownright\ndownrightly\ndownrightness\ndownrush\ndownrushing\ndownset\ndownshare\ndownshore\ndownside\ndownsinking\ndownsitting\ndownsliding\ndownslip\ndownslope\ndownsman\ndownspout\ndownstage\ndownstairs\ndownstate\ndownstater\ndownstream\ndownstreet\ndownstroke\ndownswing\ndowntake\ndownthrow\ndownthrown\ndownthrust\nDownton\ndowntown\ndowntrampling\ndowntreading\ndowntrend\ndowntrodden\ndowntroddenness\ndownturn\ndownward\ndownwardly\ndownwardness\ndownway\ndownweed\ndownweigh\ndownweight\ndownweighted\ndownwind\ndownwith\ndowny\ndowp\ndowry\ndowsabel\ndowse\ndowser\ndowset\ndoxa\nDoxantha\ndoxastic\ndoxasticon\ndoxographer\ndoxographical\ndoxography\ndoxological\ndoxologically\ndoxologize\ndoxology\ndoxy\nDoyle\ndoze\ndozed\ndozen\ndozener\ndozenth\ndozer\ndozily\ndoziness\ndozy\ndozzled\ndrab\nDraba\ndrabbet\ndrabbish\ndrabble\ndrabbler\ndrabbletail\ndrabbletailed\ndrabby\ndrably\ndrabness\nDracaena\nDracaenaceae\ndrachm\ndrachma\ndrachmae\ndrachmai\ndrachmal\ndracma\nDraco\nDracocephalum\nDraconian\nDraconianism\nDraconic\ndraconic\nDraconically\nDraconid\nDraconis\nDraconism\ndraconites\ndraconitic\ndracontian\ndracontiasis\ndracontic\ndracontine\ndracontites\nDracontium\ndracunculus\ndraegerman\ndraff\ndraffman\ndraffy\ndraft\ndraftage\ndraftee\ndrafter\ndraftily\ndraftiness\ndrafting\ndraftman\ndraftmanship\ndraftproof\ndraftsman\ndraftsmanship\ndraftswoman\ndraftswomanship\ndraftwoman\ndrafty\ndrag\ndragade\ndragbar\ndragbolt\ndragged\ndragger\ndraggily\ndragginess\ndragging\ndraggingly\ndraggle\ndraggletail\ndraggletailed\ndraggletailedly\ndraggletailedness\ndraggly\ndraggy\ndraghound\ndragline\ndragman\ndragnet\ndrago\ndragoman\ndragomanate\ndragomanic\ndragomanish\ndragon\ndragonesque\ndragoness\ndragonet\ndragonfish\ndragonfly\ndragonhead\ndragonhood\ndragonish\ndragonism\ndragonize\ndragonkind\ndragonlike\ndragonnade\ndragonroot\ndragontail\ndragonwort\ndragoon\ndragoonable\ndragoonade\ndragoonage\ndragooner\ndragrope\ndragsaw\ndragsawing\ndragsman\ndragstaff\ndrail\ndrain\ndrainable\ndrainage\ndrainboard\ndraine\ndrained\ndrainer\ndrainerman\ndrainless\ndrainman\ndrainpipe\ndraintile\ndraisine\ndrake\ndrakestone\ndrakonite\ndram\ndrama\ndramalogue\nDramamine\ndramatic\ndramatical\ndramatically\ndramaticism\ndramatics\ndramaticule\ndramatism\ndramatist\ndramatizable\ndramatization\ndramatize\ndramatizer\ndramaturge\ndramaturgic\ndramaturgical\ndramaturgist\ndramaturgy\ndramm\ndrammage\ndramme\ndrammed\ndrammer\ndramming\ndrammock\ndramseller\ndramshop\ndrang\ndrank\ndrant\ndrapable\nDraparnaldia\ndrape\ndrapeable\ndraper\ndraperess\ndraperied\ndrapery\ndrapetomania\ndrapping\ndrassid\nDrassidae\ndrastic\ndrastically\ndrat\ndratchell\ndrate\ndratted\ndratting\ndraught\ndraughtboard\ndraughthouse\ndraughtman\ndraughtmanship\ndraughts\ndraughtsman\ndraughtsmanship\ndraughtswoman\ndraughtswomanship\nDravida\nDravidian\nDravidic\ndravya\ndraw\ndrawable\ndrawarm\ndrawback\ndrawbar\ndrawbeam\ndrawbench\ndrawboard\ndrawbolt\ndrawbore\ndrawboy\ndrawbridge\nDrawcansir\ndrawcut\ndrawdown\ndrawee\ndrawer\ndrawers\ndrawfile\ndrawfiling\ndrawgate\ndrawgear\ndrawglove\ndrawhead\ndrawhorse\ndrawing\ndrawk\ndrawknife\ndrawknot\ndrawl\ndrawlatch\ndrawler\ndrawling\ndrawlingly\ndrawlingness\ndrawlink\ndrawloom\ndrawly\ndrawn\ndrawnet\ndrawoff\ndrawout\ndrawplate\ndrawpoint\ndrawrod\ndrawshave\ndrawsheet\ndrawspan\ndrawspring\ndrawstop\ndrawstring\ndrawtongs\ndrawtube\ndray\ndrayage\ndrayman\ndrazel\ndread\ndreadable\ndreader\ndreadful\ndreadfully\ndreadfulness\ndreadingly\ndreadless\ndreadlessly\ndreadlessness\ndreadly\ndreadness\ndreadnought\ndream\ndreamage\ndreamer\ndreamery\ndreamful\ndreamfully\ndreamfulness\ndreamhole\ndreamily\ndreaminess\ndreamingly\ndreamish\ndreamland\ndreamless\ndreamlessly\ndreamlessness\ndreamlet\ndreamlike\ndreamlit\ndreamlore\ndreamsily\ndreamsiness\ndreamsy\ndreamt\ndreamtide\ndreamwhile\ndreamwise\ndreamworld\ndreamy\ndrear\ndrearfully\ndrearily\ndreariment\ndreariness\ndrearisome\ndrearly\ndrearness\ndreary\ndredge\ndredgeful\ndredger\ndredging\ndree\ndreep\ndreepiness\ndreepy\ndreg\ndreggily\ndregginess\ndreggish\ndreggy\ndregless\ndregs\ndreiling\nDreissensia\ndreissiger\ndrench\ndrencher\ndrenching\ndrenchingly\ndreng\ndrengage\nDrepanaspis\nDrepanidae\nDrepanididae\ndrepaniform\nDrepanis\ndrepanium\ndrepanoid\nDreparnaudia\ndress\ndressage\ndressed\ndresser\ndressership\ndressily\ndressiness\ndressing\ndressline\ndressmaker\ndressmakership\ndressmakery\ndressmaking\ndressy\ndrest\nDrew\ndrew\ndrewite\nDreyfusism\nDreyfusist\ndrias\ndrib\ndribble\ndribblement\ndribbler\ndriblet\ndriddle\ndried\ndrier\ndrierman\ndriest\ndrift\ndriftage\ndriftbolt\ndrifter\ndrifting\ndriftingly\ndriftland\ndriftless\ndriftlessness\ndriftlet\ndriftman\ndriftpiece\ndriftpin\ndriftway\ndriftweed\ndriftwind\ndriftwood\ndrifty\ndrightin\ndrill\ndriller\ndrillet\ndrilling\ndrillman\ndrillmaster\ndrillstock\nDrimys\ndringle\ndrink\ndrinkability\ndrinkable\ndrinkableness\ndrinkably\ndrinker\ndrinking\ndrinkless\ndrinkproof\ndrinn\ndrip\ndripper\ndripping\ndripple\ndripproof\ndrippy\ndripstick\ndripstone\ndrisheen\ndrisk\ndrivable\ndrivage\ndrive\ndriveaway\ndriveboat\ndrivebolt\ndrivehead\ndrivel\ndriveler\ndrivelingly\ndriven\ndrivepipe\ndriver\ndriverless\ndrivership\ndrivescrew\ndriveway\ndrivewell\ndriving\ndrivingly\ndrizzle\ndrizzly\ndrochuil\ndroddum\ndrofland\ndrogh\ndrogher\ndrogherman\ndrogue\ndroit\ndroitsman\ndroitural\ndroiturel\nDrokpa\ndroll\ndrollery\ndrollingly\ndrollish\ndrollishness\ndrollist\ndrollness\ndrolly\nDromaeognathae\ndromaeognathism\ndromaeognathous\nDromaeus\ndrome\ndromedarian\ndromedarist\ndromedary\ndrometer\nDromiacea\ndromic\nDromiceiidae\nDromiceius\nDromicia\ndromograph\ndromomania\ndromometer\ndromond\nDromornis\ndromos\ndromotropic\ndrona\ndronage\ndrone\ndronepipe\ndroner\ndrongo\ndroningly\ndronish\ndronishly\ndronishness\ndronkgrass\ndrony\ndrool\ndroop\ndrooper\ndrooping\ndroopingly\ndroopingness\ndroopt\ndroopy\ndrop\ndropberry\ndropcloth\ndropflower\ndrophead\ndroplet\ndroplight\ndroplike\ndropling\ndropman\ndropout\ndropper\ndropping\ndroppingly\ndroppy\ndropseed\ndropsical\ndropsically\ndropsicalness\ndropsied\ndropsy\ndropsywort\ndropt\ndropwise\ndropworm\ndropwort\nDroschken\nDrosera\nDroseraceae\ndroseraceous\ndroshky\ndrosky\ndrosograph\ndrosometer\nDrosophila\nDrosophilidae\nDrosophyllum\ndross\ndrossel\ndrosser\ndrossiness\ndrossless\ndrossy\ndrostdy\ndroud\ndrought\ndroughtiness\ndroughty\ndrouk\ndrove\ndrover\ndrovy\ndrow\ndrown\ndrowner\ndrowningly\ndrowse\ndrowsily\ndrowsiness\ndrowsy\ndrub\ndrubber\ndrubbing\ndrubbly\ndrucken\ndrudge\ndrudger\ndrudgery\ndrudgingly\ndrudgism\ndruery\ndrug\ndrugeteria\ndrugger\ndruggery\ndrugget\ndruggeting\ndruggist\ndruggister\ndruggy\ndrugless\ndrugman\ndrugshop\ndrugstore\ndruid\ndruidess\ndruidic\ndruidical\ndruidism\ndruidry\ndruith\nDrukpa\ndrum\ndrumbeat\ndrumble\ndrumbledore\ndrumbler\ndrumfire\ndrumfish\ndrumhead\ndrumheads\ndrumlike\ndrumlin\ndrumline\ndrumlinoid\ndrumloid\ndrumloidal\ndrumly\ndrummer\ndrumming\ndrummy\ndrumskin\ndrumstick\ndrumwood\ndrung\ndrungar\ndrunk\ndrunkard\ndrunken\ndrunkenly\ndrunkenness\ndrunkensome\ndrunkenwise\ndrunkery\nDrupa\nDrupaceae\ndrupaceous\ndrupal\ndrupe\ndrupel\ndrupelet\ndrupeole\ndrupetum\ndrupiferous\nDruse\ndruse\nDrusean\nDrusedom\ndrusy\ndruxiness\ndruxy\ndry\ndryad\ndryadetum\ndryadic\ndryas\ndryasdust\ndrybeard\ndrybrained\ndrycoal\nDrydenian\nDrydenism\ndryfoot\ndrygoodsman\ndryhouse\ndrying\ndryish\ndryly\nDrynaria\ndryness\nDryobalanops\nDryope\nDryopes\nDryophyllum\nDryopians\ndryopithecid\nDryopithecinae\ndryopithecine\nDryopithecus\nDryops\nDryopteris\ndryopteroid\ndrysalter\ndrysaltery\ndryster\ndryth\ndryworker\nDschubba\nduad\nduadic\ndual\nDuala\nduali\ndualin\ndualism\ndualist\ndualistic\ndualistically\nduality\ndualization\ndualize\ndually\nDualmutef\ndualogue\nDuane\nduarch\nduarchy\ndub\ndubash\ndubb\ndubba\ndubbah\ndubbeltje\ndubber\ndubbing\ndubby\nDubhe\nDubhgall\ndubiety\ndubiocrystalline\ndubiosity\ndubious\ndubiously\ndubiousness\ndubitable\ndubitably\ndubitancy\ndubitant\ndubitate\ndubitatingly\ndubitation\ndubitative\ndubitatively\nDuboisia\nduboisin\nduboisine\nDubonnet\ndubs\nducal\nducally\nducamara\nducape\nducat\nducato\nducatoon\nducdame\nduces\nDuchesnea\nDuchess\nduchess\nduchesse\nduchesslike\nduchy\nduck\nduckbill\nduckblind\nduckboard\nduckboat\nducker\nduckery\nduckfoot\nduckhearted\nduckhood\nduckhouse\nduckhunting\nduckie\nducking\nduckling\nducklingship\nduckmeat\nduckpin\nduckpond\nduckstone\nduckweed\nduckwife\nduckwing\nDuco\nduct\nducted\nductibility\nductible\nductile\nductilely\nductileness\nductilimeter\nductility\nductilize\nduction\nductless\nductor\nductule\nDucula\nDuculinae\ndud\ndudaim\ndudder\nduddery\nduddies\ndude\ndudeen\ndudgeon\ndudine\ndudish\ndudishness\ndudism\ndudler\ndudley\nDudleya\ndudleyite\ndudman\ndue\nduel\ndueler\ndueling\nduelist\nduelistic\nduello\ndueness\nduenna\nduennadom\nduennaship\nduer\nDuessa\nduet\nduettist\nduff\nduffadar\nduffel\nduffer\ndufferdom\nduffing\ndufoil\ndufrenite\ndufrenoysite\ndufter\ndufterdar\nduftery\ndug\ndugal\ndugdug\nduggler\ndugong\nDugongidae\ndugout\ndugway\nduhat\nDuhr\nduiker\nduikerbok\nduim\nDuit\nduit\ndujan\nDuke\nduke\ndukedom\ndukeling\ndukely\ndukery\ndukeship\ndukhn\ndukker\ndukkeripen\nDulanganes\nDulat\ndulbert\ndulcet\ndulcetly\ndulcetness\ndulcian\ndulciana\ndulcification\ndulcifluous\ndulcify\ndulcigenic\ndulcimer\nDulcin\nDulcinea\nDulcinist\ndulcitol\ndulcitude\ndulcose\nduledge\nduler\ndulia\ndull\ndullard\ndullardism\ndullardness\ndullbrained\nduller\ndullery\ndullhead\ndullhearted\ndullification\ndullify\ndullish\ndullity\ndullness\ndullpate\ndullsome\ndully\ndulosis\ndulotic\ndulse\ndulseman\ndult\ndultie\ndulwilly\nduly\ndum\nduma\ndumaist\ndumb\ndumba\ndumbbell\ndumbbeller\ndumbcow\ndumbfounder\ndumbfounderment\ndumbhead\ndumbledore\ndumbly\ndumbness\ndumdum\ndumetose\ndumfound\ndumfounder\ndumfounderment\ndummel\ndummered\ndumminess\ndummy\ndummyism\ndummyweed\nDumontia\nDumontiaceae\ndumontite\ndumortierite\ndumose\ndumosity\ndump\ndumpage\ndumpcart\ndumper\ndumpily\ndumpiness\ndumping\ndumpish\ndumpishly\ndumpishness\ndumple\ndumpling\ndumpoke\ndumpy\ndumsola\ndun\ndunair\ndunal\ndunbird\nDuncan\ndunce\nduncedom\nduncehood\nduncery\ndunch\nDunciad\nduncical\nduncify\nduncish\nduncishly\nduncishness\ndundasite\ndunder\ndunderhead\ndunderheaded\ndunderheadedness\ndunderpate\ndune\ndunelike\ndunfish\ndung\nDungan\ndungannonite\ndungaree\ndungbeck\ndungbird\ndungbred\ndungeon\ndungeoner\ndungeonlike\ndunger\ndunghill\ndunghilly\ndungol\ndungon\ndungy\ndungyard\ndunite\ndunk\ndunkadoo\nDunkard\nDunker\ndunker\nDunkirk\nDunkirker\nDunlap\ndunlin\nDunlop\ndunnage\ndunne\ndunner\ndunness\ndunnish\ndunnite\ndunnock\ndunny\ndunpickle\nDuns\ndunst\ndunstable\ndunt\nduntle\nduny\ndunziekte\nduo\nduocosane\nduodecahedral\nduodecahedron\nduodecane\nduodecennial\nduodecillion\nduodecimal\nduodecimality\nduodecimally\nduodecimfid\nduodecimo\nduodecimole\nduodecuple\nduodena\nduodenal\nduodenary\nduodenate\nduodenation\nduodene\nduodenectomy\nduodenitis\nduodenocholangitis\nduodenocholecystostomy\nduodenocholedochotomy\nduodenocystostomy\nduodenoenterostomy\nduodenogram\nduodenojejunal\nduodenojejunostomy\nduodenopancreatectomy\nduodenoscopy\nduodenostomy\nduodenotomy\nduodenum\nduodrama\nduograph\nduogravure\nduole\nduoliteral\nduologue\nduomachy\nduopod\nduopolistic\nduopoly\nduopsonistic\nduopsony\nduosecant\nduotone\nduotriacontane\nduotype\ndup\ndupability\ndupable\ndupe\ndupedom\nduper\ndupery\ndupion\ndupla\nduplation\nduple\nduplet\nduplex\nduplexity\nduplicability\nduplicable\nduplicand\nduplicate\nduplication\nduplicative\nduplicator\nduplicature\nduplicia\nduplicident\nDuplicidentata\nduplicidentate\nduplicipennate\nduplicitas\nduplicity\nduplification\nduplify\nduplone\ndupondius\nduppy\ndura\ndurability\ndurable\ndurableness\ndurably\ndurain\ndural\nDuralumin\nduramatral\nduramen\ndurance\nDurandarte\ndurangite\nDurango\nDurani\ndurant\nDuranta\nduraplasty\nduraquara\nduraspinalis\nduration\ndurational\ndurationless\ndurative\ndurax\ndurbachite\nDurban\ndurbar\ndurdenite\ndure\ndurene\ndurenol\nduress\nduressor\ndurgan\nDurham\ndurian\nduridine\nDurindana\nduring\nduringly\nDurio\ndurity\ndurmast\ndurn\nduro\nDuroc\ndurometer\nduroquinone\ndurra\ndurrie\ndurrin\ndurry\ndurst\ndurukuli\ndurwaun\nduryl\nDuryodhana\nDurzada\ndusack\nduscle\ndush\ndusio\ndusk\ndusken\nduskily\nduskiness\nduskingtide\nduskish\nduskishly\nduskishness\nduskly\nduskness\ndusky\ndust\ndustbin\ndustbox\ndustcloth\ndustee\nduster\ndusterman\ndustfall\ndustily\nDustin\ndustiness\ndusting\ndustless\ndustlessness\ndustman\ndustpan\ndustproof\ndustuck\ndustwoman\ndusty\ndustyfoot\nDusun\nDutch\ndutch\nDutcher\nDutchify\nDutchman\nDutchy\nduteous\nduteously\nduteousness\ndutiability\ndutiable\ndutied\ndutiful\ndutifully\ndutifulness\ndutra\nduty\ndutymonger\nduumvir\nduumviral\nduumvirate\nduvet\nduvetyn\ndux\nduyker\ndvaita\ndvandva\ndwale\ndwalm\nDwamish\ndwang\ndwarf\ndwarfish\ndwarfishly\ndwarfishness\ndwarfism\ndwarfling\ndwarfness\ndwarfy\ndwayberry\nDwayne\ndwell\ndwelled\ndweller\ndwelling\ndwelt\nDwight\ndwindle\ndwindlement\ndwine\nDwyka\ndyad\ndyadic\nDyak\ndyakisdodecahedron\nDyakish\ndyarchic\ndyarchical\ndyarchy\nDyas\nDyassic\ndyaster\nDyaus\ndyce\ndye\ndyeable\ndyehouse\ndyeing\ndyeleaves\ndyemaker\ndyemaking\ndyer\ndyester\ndyestuff\ndyeware\ndyeweed\ndyewood\ndygogram\ndying\ndyingly\ndyingness\ndyke\ndykehopper\ndyker\ndykereeve\nDylan\ndynagraph\ndynameter\ndynametric\ndynametrical\ndynamic\ndynamical\ndynamically\ndynamics\ndynamis\ndynamism\ndynamist\ndynamistic\ndynamitard\ndynamite\ndynamiter\ndynamitic\ndynamitical\ndynamitically\ndynamiting\ndynamitish\ndynamitism\ndynamitist\ndynamization\ndynamize\ndynamo\ndynamoelectric\ndynamoelectrical\ndynamogenesis\ndynamogenic\ndynamogenous\ndynamogenously\ndynamogeny\ndynamometamorphic\ndynamometamorphism\ndynamometamorphosed\ndynamometer\ndynamometric\ndynamometrical\ndynamometry\ndynamomorphic\ndynamoneure\ndynamophone\ndynamostatic\ndynamotor\ndynast\nDynastes\ndynastical\ndynastically\ndynasticism\ndynastid\ndynastidan\nDynastides\nDynastinae\ndynasty\ndynatron\ndyne\ndyophone\nDyophysite\nDyophysitic\nDyophysitical\nDyophysitism\ndyotheism\nDyothelete\nDyotheletian\nDyotheletic\nDyotheletical\nDyotheletism\nDyothelism\ndyphone\ndysacousia\ndysacousis\ndysanalyte\ndysaphia\ndysarthria\ndysarthric\ndysarthrosis\ndysbulia\ndysbulic\ndyschiria\ndyschroa\ndyschroia\ndyschromatopsia\ndyschromatoptic\ndyschronous\ndyscrasia\ndyscrasial\ndyscrasic\ndyscrasite\ndyscratic\ndyscrystalline\ndysenteric\ndysenterical\ndysentery\ndysepulotic\ndysepulotical\ndyserethisia\ndysergasia\ndysergia\ndysesthesia\ndysesthetic\ndysfunction\ndysgenesic\ndysgenesis\ndysgenetic\ndysgenic\ndysgenical\ndysgenics\ndysgeogenous\ndysgnosia\ndysgraphia\ndysidrosis\ndyskeratosis\ndyskinesia\ndyskinetic\ndyslalia\ndyslexia\ndyslogia\ndyslogistic\ndyslogistically\ndyslogy\ndysluite\ndyslysin\ndysmenorrhea\ndysmenorrheal\ndysmerism\ndysmeristic\ndysmerogenesis\ndysmerogenetic\ndysmeromorph\ndysmeromorphic\ndysmetria\ndysmnesia\ndysmorphism\ndysmorphophobia\ndysneuria\ndysnomy\ndysodile\ndysodontiasis\ndysorexia\ndysorexy\ndysoxidation\ndysoxidizable\ndysoxidize\ndyspathetic\ndyspathy\ndyspepsia\ndyspepsy\ndyspeptic\ndyspeptical\ndyspeptically\ndysphagia\ndysphagic\ndysphasia\ndysphasic\ndysphemia\ndysphonia\ndysphonic\ndysphoria\ndysphoric\ndysphotic\ndysphrasia\ndysphrenia\ndyspituitarism\ndysplasia\ndysplastic\ndyspnea\ndyspneal\ndyspneic\ndyspnoic\ndysprosia\ndysprosium\ndysraphia\ndyssnite\nDyssodia\ndysspermatism\ndyssynergia\ndyssystole\ndystaxia\ndystectic\ndysteleological\ndysteleologist\ndysteleology\ndysthyroidism\ndystocia\ndystocial\ndystome\ndystomic\ndystomous\ndystrophia\ndystrophic\ndystrophy\ndysuria\ndysuric\ndysyntribite\ndytiscid\nDytiscidae\nDytiscus\ndzeren\nDzungar\nE\ne\nea\neach\neachwhere\neager\neagerly\neagerness\neagle\neaglelike\neagless\neaglestone\neaglet\neaglewood\neagre\nean\near\nearache\nearbob\nearcap\nearcockle\neardrop\neardropper\neardrum\neared\nearflower\nearful\nearhole\nearing\nearjewel\nEarl\nearl\nearlap\nearldom\nEarle\nearless\nearlet\nearlike\nearliness\nearlish\nearlock\nearlship\nearly\nearmark\nearn\nearner\nearnest\nearnestly\nearnestness\nearnful\nEarnie\nearning\nearnings\nearphone\nearpick\nearpiece\nearplug\nearreach\nearring\nearringed\nearscrew\nearshot\nearsore\nearsplitting\neartab\nearth\nearthboard\nearthborn\nearthbred\nearthdrake\nearthed\nearthen\nearthenhearted\nearthenware\nearthfall\nearthfast\nearthgall\nearthgrubber\nearthian\nearthiness\nearthkin\nearthless\nearthlight\nearthlike\nearthliness\nearthling\nearthly\nearthmaker\nearthmaking\nearthnut\nearthpea\nearthquake\nearthquaked\nearthquaken\nearthquaking\nEarthshaker\nearthshine\nearthshock\nearthslide\nearthsmoke\nearthstar\nearthtongue\nearthwall\nearthward\nearthwards\nearthwork\nearthworm\nearthy\nearwax\nearwig\nearwigginess\nearwiggy\nearwitness\nearworm\nearwort\nease\neaseful\neasefully\neasefulness\neasel\neaseless\neasement\neaser\neasier\neasiest\neasily\neasiness\neasing\neast\neastabout\neastbound\nEaster\neaster\neasterling\neasterly\nEastern\neastern\neasterner\nEasternism\nEasternly\neasternmost\nEastertide\neasting\nEastlake\neastland\neastmost\nEastre\neastward\neastwardly\neasy\neasygoing\neasygoingness\neat\neatability\neatable\neatableness\neatage\nEatanswill\neatberry\neaten\neater\neatery\neating\neats\neave\neaved\neavedrop\neaver\neaves\neavesdrop\neavesdropper\neavesdropping\nebb\nebbman\nEben\nEbenaceae\nebenaceous\nEbenales\nebeneous\nEbenezer\nEberthella\nEbionism\nEbionite\nEbionitic\nEbionitism\nEbionize\nEboe\neboe\nebon\nebonist\nebonite\nebonize\nebony\nebracteate\nebracteolate\nebriate\nebriety\nebriosity\nebrious\nebriously\nebullate\nebullience\nebulliency\nebullient\nebulliently\nebulliometer\nebullioscope\nebullioscopic\nebullioscopy\nebullition\nebullitive\nebulus\neburated\neburine\nEburna\neburnated\neburnation\neburnean\neburneoid\neburneous\neburnian\neburnification\necad\necalcarate\necanda\necardinal\nEcardines\necarinate\necarte\nEcaudata\necaudate\nEcballium\necbatic\necblastesis\necbole\necbolic\nEcca\neccaleobion\neccentrate\neccentric\neccentrical\neccentrically\neccentricity\neccentring\neccentrometer\necchondroma\necchondrosis\necchondrotome\necchymoma\necchymose\necchymosis\necclesia\necclesial\necclesiarch\necclesiarchy\necclesiast\nEcclesiastes\necclesiastic\necclesiastical\necclesiastically\necclesiasticism\necclesiasticize\necclesiastics\nEcclesiasticus\necclesiastry\necclesioclastic\necclesiography\necclesiolater\necclesiolatry\necclesiologic\necclesiological\necclesiologically\necclesiologist\necclesiology\necclesiophobia\neccoprotic\neccoproticophoric\neccrinology\neccrisis\neccritic\neccyclema\neccyesis\necdemic\necdemite\necderon\necderonic\necdysiast\necdysis\necesic\necesis\necgonine\neche\nechea\nechelette\nechelon\nechelonment\nEcheloot\nEcheneidae\necheneidid\nEcheneididae\necheneidoid\nEcheneis\nEcheveria\nechidna\nEchidnidae\nEchimys\nEchinacea\nechinal\nechinate\nechinid\nEchinidea\nechinital\nechinite\nEchinocactus\nEchinocaris\nEchinocereus\nEchinochloa\nechinochrome\nechinococcus\nEchinoderes\nEchinoderidae\nechinoderm\nEchinoderma\nechinodermal\nEchinodermata\nechinodermatous\nechinodermic\nEchinodorus\nechinoid\nEchinoidea\nechinologist\nechinology\nEchinomys\nEchinopanax\nEchinops\nechinopsine\nEchinorhinidae\nEchinorhinus\nEchinorhynchus\nEchinospermum\nEchinosphaerites\nEchinosphaeritidae\nEchinostoma\nEchinostomatidae\nechinostome\nechinostomiasis\nEchinozoa\nechinulate\nechinulated\nechinulation\nechinuliform\nechinus\nEchis\nechitamine\nEchites\nEchium\nechiurid\nEchiurida\nechiuroid\nEchiuroidea\nEchiurus\necho\nechoer\nechoic\nechoingly\nechoism\nechoist\nechoize\necholalia\necholalic\necholess\nechometer\nechopractic\nechopraxia\nechowise\nEchuca\neciliate\nEciton\necize\nEckehart\necklein\neclair\neclampsia\neclamptic\neclat\neclectic\neclectical\neclectically\neclecticism\neclecticize\nEclectics\neclectism\neclectist\neclegm\neclegma\neclipsable\neclipsareon\neclipsation\neclipse\neclipser\neclipsis\necliptic\necliptical\necliptically\neclogite\neclogue\neclosion\necmnesia\necoid\necole\necologic\necological\necologically\necologist\necology\neconometer\neconometric\neconometrician\neconometrics\neconomic\neconomical\neconomically\neconomics\neconomism\neconomist\nEconomite\neconomization\neconomize\neconomizer\neconomy\necophene\necophobia\necorticate\necospecies\necospecific\necospecifically\necostate\necosystem\necotonal\necotone\necotype\necotypic\necotypically\necphonesis\necphorable\necphore\necphoria\necphorization\necphorize\necphrasis\necrasite\necru\necrustaceous\necstasis\necstasize\necstasy\necstatic\necstatica\necstatical\necstatically\necstaticize\necstrophy\nectad\nectadenia\nectal\nectally\nectasia\nectasis\nectatic\nectene\nectental\nectepicondylar\nectethmoid\nectethmoidal\nEcthesis\necthetically\necthlipsis\necthyma\nectiris\nectobatic\nectoblast\nectoblastic\nectobronchium\nectocardia\nEctocarpaceae\nectocarpaceous\nEctocarpales\nectocarpic\nectocarpous\nEctocarpus\nectocinerea\nectocinereal\nectocoelic\nectocondylar\nectocondyle\nectocondyloid\nectocornea\nectocranial\nectocuneiform\nectocuniform\nectocyst\nectodactylism\nectoderm\nectodermal\nectodermic\nectodermoidal\nectodermosis\nectodynamomorphic\nectoentad\nectoenzyme\nectoethmoid\nectogenesis\nectogenic\nectogenous\nectoglia\nEctognatha\nectolecithal\nectoloph\nectomere\nectomeric\nectomesoblast\nectomorph\nectomorphic\nectomorphy\nectonephridium\nectoparasite\nectoparasitic\nEctoparasitica\nectopatagium\nectophloic\nectophyte\nectophytic\nectopia\nectopic\nEctopistes\nectoplacenta\nectoplasm\nectoplasmatic\nectoplasmic\nectoplastic\nectoplasy\nEctoprocta\nectoproctan\nectoproctous\nectopterygoid\nectopy\nectoretina\nectorganism\nectorhinal\nectosarc\nectosarcous\nectoskeleton\nectosomal\nectosome\nectosphenoid\nectosphenotic\nectosphere\nectosteal\nectosteally\nectostosis\nectotheca\nectotoxin\nEctotrophi\nectotrophic\nectozoa\nectozoan\nectozoic\nectozoon\nectrodactylia\nectrodactylism\nectrodactyly\nectrogenic\nectrogeny\nectromelia\nectromelian\nectromelic\nectromelus\nectropion\nectropium\nectropometer\nectrosyndactyly\nectypal\nectype\nectypography\nEcuadoran\nEcuadorian\necuelling\necumenic\necumenical\necumenicalism\necumenicality\necumenically\necumenicity\necyphellate\neczema\neczematization\neczematoid\neczematosis\neczematous\nEd\nedacious\nedaciously\nedaciousness\nedacity\nEdana\nedaphic\nedaphology\nedaphon\nEdaphosauria\nEdaphosaurus\nEdda\nEddaic\nedder\nEddic\nEddie\neddish\neddo\nEddy\neddy\neddyroot\nedea\nedeagra\nedeitis\nedelweiss\nedema\nedematous\nedemic\nEden\nEdenic\nedenite\nEdenization\nEdenize\nedental\nedentalous\nEdentata\nedentate\nedentulate\nedentulous\nedeodynia\nedeology\nedeomania\nedeoscopy\nedeotomy\nEdessan\nedestan\nedestin\nEdestosaurus\nEdgar\nedge\nedgebone\nedged\nedgeless\nedgemaker\nedgemaking\nedgeman\nedger\nedgerman\nedgeshot\nedgestone\nedgeways\nedgeweed\nedgewise\nedginess\nedging\nedgingly\nedgrew\nedgy\nedh\nedibility\nedible\nedibleness\nedict\nedictal\nedictally\nedicule\nedificable\nedification\nedificator\nedificatory\nedifice\nedificial\nedifier\nedify\nedifying\nedifyingly\nedifyingness\nedingtonite\nedit\nedital\nEdith\nedition\neditor\neditorial\neditorialize\neditorially\neditorship\neditress\nEdiya\nEdmond\nEdmund\nEdna\nEdo\nEdomite\nEdomitish\nEdoni\nEdriasteroidea\nEdrioasteroid\nEdrioasteroidea\nEdriophthalma\nedriophthalmatous\nedriophthalmian\nedriophthalmic\nedriophthalmous\nEduardo\nEducabilia\neducabilian\neducability\neducable\neducand\neducatable\neducate\neducated\neducatee\neducation\neducationable\neducational\neducationalism\neducationalist\neducationally\neducationary\neducationist\neducative\neducator\neducatory\neducatress\neduce\neducement\neducible\neducive\neduct\neduction\neductive\neductor\nedulcorate\nedulcoration\nedulcorative\nedulcorator\nEduskunta\nEdward\nEdwardean\nEdwardeanism\nEdwardian\nEdwardine\nEdwardsia\nEdwardsiidae\nEdwin\nEdwina\neegrass\neel\neelboat\neelbob\neelbobber\neelcake\neelcatcher\neeler\neelery\neelfare\neelfish\neelgrass\neellike\neelpot\neelpout\neelshop\neelskin\neelspear\neelware\neelworm\neely\neer\neerie\neerily\neeriness\neerisome\neffable\nefface\neffaceable\neffacement\neffacer\neffect\neffecter\neffectful\neffectible\neffective\neffectively\neffectiveness\neffectivity\neffectless\neffector\neffects\neffectual\neffectuality\neffectualize\neffectually\neffectualness\neffectuate\neffectuation\neffeminacy\neffeminate\neffeminately\neffeminateness\neffemination\neffeminatize\neffeminization\neffeminize\neffendi\nefferent\neffervesce\neffervescence\neffervescency\neffervescent\neffervescible\neffervescingly\neffervescive\neffete\neffeteness\neffetman\nefficacious\nefficaciously\nefficaciousness\nefficacity\nefficacy\nefficience\nefficiency\nefficient\nefficiently\nEffie\neffigial\neffigiate\neffigiation\neffigurate\neffiguration\neffigy\nefflate\nefflation\neffloresce\nefflorescence\nefflorescency\nefflorescent\nefflower\neffluence\neffluency\neffluent\neffluvia\neffluvial\neffluviate\neffluviography\neffluvious\neffluvium\nefflux\neffluxion\neffodient\nEffodientia\nefform\nefformation\nefformative\neffort\neffortful\neffortless\neffortlessly\neffossion\neffraction\neffranchise\neffranchisement\neffrontery\neffulge\neffulgence\neffulgent\neffulgently\neffund\neffuse\neffusiometer\neffusion\neffusive\neffusively\neffusiveness\nEfik\neflagelliferous\nefoliolate\nefoliose\nefoveolate\neft\neftest\neftsoons\negad\negalitarian\negalitarianism\negality\nEgba\nEgbert\nEgbo\negence\negeran\nEgeria\negest\negesta\negestion\negestive\negg\neggberry\neggcup\neggcupful\neggeater\negger\neggfish\neggfruit\negghead\negghot\negging\neggler\neggless\negglike\neggnog\neggplant\neggshell\neggy\negilops\negipto\nEglamore\neglandular\neglandulose\neglantine\neglatere\neglestonite\negma\nego\negocentric\negocentricity\negocentrism\nEgocerus\negohood\negoism\negoist\negoistic\negoistical\negoistically\negoity\negoize\negoizer\negol\negolatrous\negomania\negomaniac\negomaniacal\negomism\negophonic\negophony\negosyntonic\negotheism\negotism\negotist\negotistic\negotistical\negotistically\negotize\negregious\negregiously\negregiousness\negress\negression\negressive\negressor\negret\nEgretta\negrimony\negueiite\negurgitate\neguttulate\nEgypt\nEgyptian\nEgyptianism\nEgyptianization\nEgyptianize\nEgyptize\nEgyptologer\nEgyptologic\nEgyptological\nEgyptologist\nEgyptology\neh\nEhatisaht\neheu\nehlite\nEhretia\nEhretiaceae\nehrwaldite\nehuawa\neichbergite\nEichhornia\neichwaldite\neicosane\neident\neidently\neider\neidetic\neidograph\neidolic\neidolism\neidology\neidolology\neidolon\neidoptometry\neidouranion\neigenfunction\neigenvalue\neight\neighteen\neighteenfold\neighteenmo\neighteenth\neighteenthly\neightfoil\neightfold\neighth\neighthly\neightieth\neightling\neightpenny\neightscore\neightsman\neightsome\neighty\neightyfold\neigne\nEikonogen\neikonology\nEileen\nEimak\neimer\nEimeria\neinkorn\nEinsteinian\nEireannach\nEirene\neiresione\neisegesis\neisegetical\neisodic\neisteddfod\neisteddfodic\neisteddfodism\neither\nejaculate\nejaculation\nejaculative\nejaculator\nejaculatory\nEjam\neject\nejecta\nejectable\nejection\nejective\nejectively\nejectivity\nejectment\nejector\nejicient\nejoo\nekaboron\nekacaesium\nekaha\nekamanganese\nekasilicon\nekatantalum\neke\nekebergite\neker\nekerite\neking\nekka\nEkoi\nekphore\nEkron\nEkronite\nektene\nektenes\nektodynamorphic\nel\nelaborate\nelaborately\nelaborateness\nelaboration\nelaborative\nelaborator\nelaboratory\nelabrate\nElachista\nElachistaceae\nelachistaceous\nElaeagnaceae\nelaeagnaceous\nElaeagnus\nElaeis\nelaeoblast\nelaeoblastic\nElaeocarpaceae\nelaeocarpaceous\nElaeocarpus\nElaeococca\nElaeodendron\nelaeodochon\nelaeomargaric\nelaeometer\nelaeoptene\nelaeosaccharum\nelaeothesium\nelaidate\nelaidic\nelaidin\nelaidinic\nelain\nElaine\nelaine\nelaioleucite\nelaioplast\nelaiosome\nElamite\nElamitic\nElamitish\nelance\neland\nelanet\nElanus\nElaphe\nElaphebolion\nelaphine\nElaphodus\nElaphoglossum\nElaphomyces\nElaphomycetaceae\nElaphrium\nelaphure\nelaphurine\nElaphurus\nelapid\nElapidae\nElapinae\nelapine\nelapoid\nElaps\nelapse\nElapsoidea\nelasmobranch\nelasmobranchian\nelasmobranchiate\nElasmobranchii\nelasmosaur\nElasmosaurus\nelasmothere\nElasmotherium\nelastance\nelastic\nelastica\nelastically\nelastician\nelasticin\nelasticity\nelasticize\nelasticizer\nelasticness\nelastin\nelastivity\nelastomer\nelastomeric\nelastometer\nelastometry\nelastose\nelatcha\nelate\nelated\nelatedly\nelatedness\nelater\nelaterid\nElateridae\nelaterin\nelaterite\nelaterium\nelateroid\nElatha\nElatinaceae\nelatinaceous\nElatine\nelation\nelative\nelator\nelatrometer\nelb\nElbert\nElberta\nelbow\nelbowboard\nelbowbush\nelbowchair\nelbowed\nelbower\nelbowpiece\nelbowroom\nelbowy\nelcaja\nelchee\neld\nelder\nelderberry\nelderbrotherhood\nelderbrotherish\nelderbrotherly\nelderbush\nelderhood\nelderliness\nelderly\nelderman\neldership\neldersisterly\nelderwoman\nelderwood\nelderwort\neldest\neldin\nelding\nEldred\neldress\neldritch\nElean\nEleanor\nEleatic\nEleaticism\nEleazar\nelecampane\nelect\nelectable\nelectee\nelecticism\nelection\nelectionary\nelectioneer\nelectioneerer\nelective\nelectively\nelectiveness\nelectivism\nelectivity\nelectly\nelector\nelectoral\nelectorally\nelectorate\nelectorial\nelectorship\nElectra\nelectragist\nelectragy\nelectralize\nelectrepeter\nelectress\nelectret\nelectric\nelectrical\nelectricalize\nelectrically\nelectricalness\nelectrician\nelectricity\nelectricize\nelectrics\nelectriferous\nelectrifiable\nelectrification\nelectrifier\nelectrify\nelectrion\nelectrionic\nelectrizable\nelectrization\nelectrize\nelectrizer\nelectro\nelectroacoustic\nelectroaffinity\nelectroamalgamation\nelectroanalysis\nelectroanalytic\nelectroanalytical\nelectroanesthesia\nelectroballistic\nelectroballistics\nelectrobath\nelectrobiological\nelectrobiologist\nelectrobiology\nelectrobioscopy\nelectroblasting\nelectrobrasser\nelectrobus\nelectrocapillarity\nelectrocapillary\nelectrocardiogram\nelectrocardiograph\nelectrocardiographic\nelectrocardiography\nelectrocatalysis\nelectrocatalytic\nelectrocataphoresis\nelectrocataphoretic\nelectrocauterization\nelectrocautery\nelectroceramic\nelectrochemical\nelectrochemically\nelectrochemist\nelectrochemistry\nelectrochronograph\nelectrochronographic\nelectrochronometer\nelectrochronometric\nelectrocoagulation\nelectrocoating\nelectrocolloidal\nelectrocontractility\nelectrocorticogram\nelectroculture\nelectrocute\nelectrocution\nelectrocutional\nelectrocutioner\nelectrocystoscope\nelectrode\nelectrodeless\nelectrodentistry\nelectrodeposit\nelectrodepositable\nelectrodeposition\nelectrodepositor\nelectrodesiccate\nelectrodesiccation\nelectrodiagnosis\nelectrodialysis\nelectrodialyze\nelectrodialyzer\nelectrodiplomatic\nelectrodispersive\nelectrodissolution\nelectrodynamic\nelectrodynamical\nelectrodynamics\nelectrodynamism\nelectrodynamometer\nelectroencephalogram\nelectroencephalograph\nelectroencephalography\nelectroendosmose\nelectroendosmosis\nelectroendosmotic\nelectroengrave\nelectroengraving\nelectroergometer\nelectroetching\nelectroethereal\nelectroextraction\nelectroform\nelectroforming\nelectrofuse\nelectrofused\nelectrofusion\nelectrogalvanic\nelectrogalvanize\nelectrogenesis\nelectrogenetic\nelectrogild\nelectrogilding\nelectrogilt\nelectrograph\nelectrographic\nelectrographite\nelectrography\nelectroharmonic\nelectrohemostasis\nelectrohomeopathy\nelectrohorticulture\nelectrohydraulic\nelectroimpulse\nelectroindustrial\nelectroionic\nelectroirrigation\nelectrokinematics\nelectrokinetic\nelectrokinetics\nelectrolier\nelectrolithotrity\nelectrologic\nelectrological\nelectrologist\nelectrology\nelectroluminescence\nelectroluminescent\nelectrolysis\nelectrolyte\nelectrolytic\nelectrolytical\nelectrolytically\nelectrolyzability\nelectrolyzable\nelectrolyzation\nelectrolyze\nelectrolyzer\nelectromagnet\nelectromagnetic\nelectromagnetical\nelectromagnetically\nelectromagnetics\nelectromagnetism\nelectromagnetist\nelectromassage\nelectromechanical\nelectromechanics\nelectromedical\nelectromer\nelectromeric\nelectromerism\nelectrometallurgical\nelectrometallurgist\nelectrometallurgy\nelectrometer\nelectrometric\nelectrometrical\nelectrometrically\nelectrometry\nelectromobile\nelectromobilism\nelectromotion\nelectromotive\nelectromotivity\nelectromotograph\nelectromotor\nelectromuscular\nelectromyographic\nelectron\nelectronarcosis\nelectronegative\nelectronervous\nelectronic\nelectronics\nelectronographic\nelectrooptic\nelectrooptical\nelectrooptically\nelectrooptics\nelectroosmosis\nelectroosmotic\nelectroosmotically\nelectrootiatrics\nelectropathic\nelectropathology\nelectropathy\nelectropercussive\nelectrophobia\nelectrophone\nelectrophore\nelectrophoresis\nelectrophoretic\nelectrophoric\nElectrophoridae\nelectrophorus\nelectrophotometer\nelectrophotometry\nelectrophototherapy\nelectrophrenic\nelectrophysics\nelectrophysiological\nelectrophysiologist\nelectrophysiology\nelectropism\nelectroplate\nelectroplater\nelectroplating\nelectroplax\nelectropneumatic\nelectropneumatically\nelectropoion\nelectropolar\nelectropositive\nelectropotential\nelectropower\nelectropsychrometer\nelectropult\nelectropuncturation\nelectropuncture\nelectropuncturing\nelectropyrometer\nelectroreceptive\nelectroreduction\nelectrorefine\nelectroscission\nelectroscope\nelectroscopic\nelectrosherardizing\nelectroshock\nelectrosmosis\nelectrostatic\nelectrostatical\nelectrostatically\nelectrostatics\nelectrosteel\nelectrostenolysis\nelectrostenolytic\nelectrostereotype\nelectrostriction\nelectrosurgery\nelectrosurgical\nelectrosynthesis\nelectrosynthetic\nelectrosynthetically\nelectrotactic\nelectrotautomerism\nelectrotaxis\nelectrotechnic\nelectrotechnical\nelectrotechnician\nelectrotechnics\nelectrotechnology\nelectrotelegraphic\nelectrotelegraphy\nelectrotelethermometer\nelectrotellurograph\nelectrotest\nelectrothanasia\nelectrothanatosis\nelectrotherapeutic\nelectrotherapeutical\nelectrotherapeutics\nelectrotherapeutist\nelectrotherapist\nelectrotherapy\nelectrothermal\nelectrothermancy\nelectrothermic\nelectrothermics\nelectrothermometer\nelectrothermostat\nelectrothermostatic\nelectrothermotic\nelectrotitration\nelectrotonic\nelectrotonicity\nelectrotonize\nelectrotonus\nelectrotrephine\nelectrotropic\nelectrotropism\nelectrotype\nelectrotyper\nelectrotypic\nelectrotyping\nelectrotypist\nelectrotypy\nelectrovalence\nelectrovalency\nelectrovection\nelectroviscous\nelectrovital\nelectrowin\nelectrum\nelectuary\neleemosynarily\neleemosynariness\neleemosynary\nelegance\nelegancy\nelegant\nelegantly\nelegiac\nelegiacal\nelegiambic\nelegiambus\nelegiast\nelegist\nelegit\nelegize\nelegy\neleidin\nelement\nelemental\nelementalism\nelementalist\nelementalistic\nelementalistically\nelementality\nelementalize\nelementally\nelementarily\nelementariness\nelementary\nelementoid\nelemi\nelemicin\nelemin\nelench\nelenchi\nelenchic\nelenchical\nelenchically\nelenchize\nelenchtic\nelenchtical\nelenctic\nelenge\neleoblast\nEleocharis\neleolite\neleomargaric\neleometer\neleonorite\neleoptene\neleostearate\neleostearic\nelephant\nelephanta\nelephantiac\nelephantiasic\nelephantiasis\nelephantic\nelephanticide\nElephantidae\nelephantine\nelephantlike\nelephantoid\nelephantoidal\nElephantopus\nelephantous\nelephantry\nElephas\nElettaria\nEleusine\nEleusinia\nEleusinian\nEleusinion\nEleut\neleutherarch\nEleutheri\nEleutheria\nEleutherian\nEleutherios\neleutherism\neleutherodactyl\nEleutherodactyli\nEleutherodactylus\neleutheromania\neleutheromaniac\neleutheromorph\neleutheropetalous\neleutherophyllous\neleutherosepalous\nEleutherozoa\neleutherozoan\nelevate\nelevated\nelevatedly\nelevatedness\nelevating\nelevatingly\nelevation\nelevational\nelevator\nelevatory\neleven\nelevener\nelevenfold\neleventh\neleventhly\nelevon\nelf\nelfenfolk\nelfhood\nelfic\nelfin\nelfinwood\nelfish\nelfishly\nelfishness\nelfkin\nelfland\nelflike\nelflock\nelfship\nelfwife\nelfwort\nEli\nElia\nElian\nElianic\nElias\neliasite\nelicit\nelicitable\nelicitate\nelicitation\nelicitor\nelicitory\nelide\nelidible\neligibility\neligible\neligibleness\neligibly\nElihu\nElijah\neliminable\neliminand\neliminant\neliminate\nelimination\neliminative\neliminator\neliminatory\nElinor\nElinvar\nEliot\nEliphalet\neliquate\neliquation\nElisabeth\nElisha\nElishah\nelision\nelisor\nElissa\nelite\nelixir\nEliza\nElizabeth\nElizabethan\nElizabethanism\nElizabethanize\nelk\nElkanah\nElkdom\nElkesaite\nelkhorn\nelkhound\nElkoshite\nelkslip\nElkuma\nelkwood\nell\nElla\nellachick\nellagate\nellagic\nellagitannin\nEllasar\nelle\nelleck\nEllen\nellenyard\nEllerian\nellfish\nEllice\nEllick\nElliot\nElliott\nellipse\nellipses\nellipsis\nellipsograph\nellipsoid\nellipsoidal\nellipsone\nellipsonic\nelliptic\nelliptical\nelliptically\nellipticalness\nellipticity\nelliptograph\nelliptoid\nellops\nellwand\nelm\nElmer\nelmy\nEloah\nelocular\nelocute\nelocution\nelocutionary\nelocutioner\nelocutionist\nelocutionize\nelod\nElodea\nElodeaceae\nElodes\neloge\nelogium\nElohim\nElohimic\nElohism\nElohist\nElohistic\neloign\neloigner\neloignment\nEloise\nElon\nelongate\nelongated\nelongation\nelongative\nElonite\nelope\nelopement\neloper\nElopidae\nelops\neloquence\neloquent\neloquential\neloquently\neloquentness\nElotherium\nelotillo\nelpasolite\nelpidite\nElric\nels\nElsa\nelse\nelsehow\nelsewards\nelseways\nelsewhen\nelsewhere\nelsewheres\nelsewhither\nelsewise\nElsholtzia\nelsin\nelt\neluate\nelucidate\nelucidation\nelucidative\nelucidator\nelucidatory\nelucubrate\nelucubration\nelude\neluder\nelusion\nelusive\nelusively\nelusiveness\nelusoriness\nelusory\nelute\nelution\nelutor\nelutriate\nelutriation\nelutriator\neluvial\neluviate\neluviation\neluvium\nelvan\nelvanite\nelvanitic\nelver\nelves\nelvet\nElvira\nElvis\nelvish\nelvishly\nElwood\nelydoric\nElymi\nElymus\nElysee\nElysia\nelysia\nElysian\nElysiidae\nElysium\nelytral\nelytriferous\nelytriform\nelytrigerous\nelytrin\nelytrocele\nelytroclasia\nelytroid\nelytron\nelytroplastic\nelytropolypus\nelytroposis\nelytrorhagia\nelytrorrhagia\nelytrorrhaphy\nelytrostenosis\nelytrotomy\nelytrous\nelytrum\nElzevir\nElzevirian\nEm\nem\nemaciate\nemaciation\nemajagua\nemanant\nemanate\nemanation\nemanational\nemanationism\nemanationist\nemanatism\nemanatist\nemanatistic\nemanativ\nemanative\nemanatively\nemanator\nemanatory\nemancipate\nemancipation\nemancipationist\nemancipatist\nemancipative\nemancipator\nemancipatory\nemancipatress\nemancipist\nemandibulate\nemanium\nemarcid\nemarginate\nemarginately\nemargination\nEmarginula\nemasculate\nemasculation\nemasculative\nemasculator\nemasculatory\nEmbadomonas\nemball\nemballonurid\nEmballonuridae\nemballonurine\nembalm\nembalmer\nembalmment\nembank\nembankment\nembannered\nembar\nembargo\nembargoist\nembark\nembarkation\nembarkment\nembarras\nembarrass\nembarrassed\nembarrassedly\nembarrassing\nembarrassingly\nembarrassment\nembarrel\nembassage\nembassy\nembastioned\nembathe\nembatholithic\nembattle\nembattled\nembattlement\nembay\nembayment\nEmbden\nembed\nembedment\nembeggar\nEmbelia\nembelic\nembellish\nembellisher\nembellishment\nember\nembergoose\nEmberiza\nemberizidae\nEmberizinae\nemberizine\nembezzle\nembezzlement\nembezzler\nEmbiidae\nEmbiidina\nembind\nEmbiodea\nEmbioptera\nembiotocid\nEmbiotocidae\nembiotocoid\nembira\nembitter\nembitterer\nembitterment\nemblaze\nemblazer\nemblazon\nemblazoner\nemblazonment\nemblazonry\nemblem\nemblema\nemblematic\nemblematical\nemblematically\nemblematicalness\nemblematicize\nemblematist\nemblematize\nemblematology\nemblement\nemblemist\nemblemize\nemblemology\nemblic\nemblossom\nembodier\nembodiment\nembody\nembog\nemboitement\nembolden\nemboldener\nembole\nembolectomy\nembolemia\nembolic\nemboliform\nembolism\nembolismic\nembolismus\nembolite\nembolium\nembolize\nembolo\nembololalia\nEmbolomeri\nembolomerism\nembolomerous\nembolomycotic\nembolum\nembolus\nemboly\nemborder\nemboscata\nembosom\nemboss\nembossage\nembosser\nembossing\nembossman\nembossment\nembosture\nembottle\nembouchure\nembound\nembow\nembowed\nembowel\nemboweler\nembowelment\nembower\nembowerment\nembowment\nembox\nembrace\nembraceable\nembraceably\nembracement\nembraceor\nembracer\nembracery\nembracing\nembracingly\nembracingness\nembracive\nembrail\nembranchment\nembrangle\nembranglement\nembrasure\nembreathe\nembreathement\nEmbrica\nembright\nembrittle\nembrittlement\nembroaden\nembrocate\nembrocation\nembroider\nembroiderer\nembroideress\nembroidery\nembroil\nembroiler\nembroilment\nembronze\nembrown\nembryectomy\nembryo\nembryocardia\nembryoctonic\nembryoctony\nembryoferous\nembryogenesis\nembryogenetic\nembryogenic\nembryogeny\nembryogony\nembryographer\nembryographic\nembryography\nembryoid\nembryoism\nembryologic\nembryological\nembryologically\nembryologist\nembryology\nembryoma\nembryon\nembryonal\nembryonary\nembryonate\nembryonated\nembryonic\nembryonically\nembryoniferous\nembryoniform\nembryony\nembryopathology\nembryophagous\nembryophore\nEmbryophyta\nembryophyte\nembryoplastic\nembryoscope\nembryoscopic\nembryotega\nembryotic\nembryotome\nembryotomy\nembryotrophic\nembryotrophy\nembryous\nembryulcia\nembryulcus\nembubble\nembuia\nembus\nembusk\nembuskin\nemcee\neme\nemeer\nemeership\nEmeline\nemend\nemendable\nemendandum\nemendate\nemendation\nemendator\nemendatory\nemender\nemerald\nemeraldine\nemeraude\nemerge\nemergence\nemergency\nemergent\nemergently\nemergentness\nEmerita\nemerited\nemeritus\nemerize\nemerse\nemersed\nemersion\nEmersonian\nEmersonianism\nEmery\nemery\nEmesa\nEmesidae\nemesis\nemetatrophia\nemetic\nemetically\nemetine\nemetocathartic\nemetology\nemetomorphine\nemgalla\nemication\nemiction\nemictory\nemigrant\nemigrate\nemigration\nemigrational\nemigrationist\nemigrative\nemigrator\nemigratory\nemigree\nEmil\nEmilia\nEmily\nEmim\neminence\neminency\neminent\neminently\nemir\nemirate\nemirship\nemissarium\nemissary\nemissaryship\nemissile\nemission\nemissive\nemissivity\nemit\nemittent\nemitter\nEmm\nEmma\nemma\nEmmanuel\nemmarble\nemmarvel\nemmenagogic\nemmenagogue\nemmenic\nemmeniopathy\nemmenology\nemmensite\nEmmental\nemmer\nemmergoose\nemmet\nemmetrope\nemmetropia\nemmetropic\nemmetropism\nemmetropy\nEmmett\nemodin\nemollescence\nemolliate\nemollient\nemoloa\nemolument\nemolumental\nemolumentary\nemote\nemotion\nemotionable\nemotional\nemotionalism\nemotionalist\nemotionality\nemotionalization\nemotionalize\nemotionally\nemotioned\nemotionist\nemotionize\nemotionless\nemotionlessness\nemotive\nemotively\nemotiveness\nemotivity\nempacket\nempaistic\nempall\nempanel\nempanelment\nempanoply\nempaper\nemparadise\nemparchment\nempark\nempasm\nempathic\nempathically\nempathize\nempathy\nEmpedoclean\nempeirema\nEmpeo\nemperor\nemperorship\nempery\nEmpetraceae\nempetraceous\nEmpetrum\nemphases\nemphasis\nemphasize\nemphatic\nemphatical\nemphatically\nemphaticalness\nemphlysis\nemphractic\nemphraxis\nemphysema\nemphysematous\nemphyteusis\nemphyteuta\nemphyteutic\nempicture\nEmpididae\nEmpidonax\nempiecement\nEmpire\nempire\nempirema\nempiric\nempirical\nempiricalness\nempiricism\nempiricist\nempirics\nempiriocritcism\nempiriocritical\nempiriological\nempirism\nempiristic\nemplace\nemplacement\nemplane\nemplastic\nemplastration\nemplastrum\nemplectite\nempleomania\nemploy\nemployability\nemployable\nemployed\nemployee\nemployer\nemployless\nemployment\nemplume\nempocket\nempodium\nempoison\nempoisonment\nemporetic\nemporeutic\nemporia\nemporial\nemporium\nempower\nempowerment\nempress\nemprise\nemprosthotonic\nemprosthotonos\nemprosthotonus\nempt\nemptier\nemptily\nemptiness\nemptings\nemptins\nemption\nemptional\nemptor\nempty\nemptyhearted\nemptysis\nempurple\nEmpusa\nempyema\nempyemic\nempyesis\nempyocele\nempyreal\nempyrean\nempyreuma\nempyreumatic\nempyreumatical\nempyreumatize\nempyromancy\nemu\nemulable\nemulant\nemulate\nemulation\nemulative\nemulatively\nemulator\nemulatory\nemulatress\nemulgence\nemulgent\nemulous\nemulously\nemulousness\nemulsibility\nemulsible\nemulsifiability\nemulsifiable\nemulsification\nemulsifier\nemulsify\nemulsin\nemulsion\nemulsionize\nemulsive\nemulsoid\nemulsor\nemunctory\nemundation\nemyd\nEmydea\nemydian\nEmydidae\nEmydinae\nEmydosauria\nemydosaurian\nEmys\nen\nenable\nenablement\nenabler\nenact\nenactable\nenaction\nenactive\nenactment\nenactor\nenactory\nenaena\nenage\nEnajim\nenalid\nEnaliornis\nenaliosaur\nEnaliosauria\nenaliosaurian\nenallachrome\nenallage\nenaluron\nenam\nenamber\nenambush\nenamdar\nenamel\nenameler\nenameling\nenamelist\nenamelless\nenamellist\nenameloma\nenamelware\nenamor\nenamorato\nenamored\nenamoredness\nenamorment\nenamourment\nenanguish\nenanthem\nenanthema\nenanthematous\nenanthesis\nenantiobiosis\nenantioblastic\nenantioblastous\nenantiomer\nenantiomeride\nenantiomorph\nenantiomorphic\nenantiomorphism\nenantiomorphous\nenantiomorphously\nenantiomorphy\nenantiopathia\nenantiopathic\nenantiopathy\nenantiosis\nenantiotropic\nenantiotropy\nenantobiosis\nenapt\nenarbor\nenarbour\nenarch\nenarched\nenargite\nenarm\nenarme\nenarthrodia\nenarthrodial\nenarthrosis\nenate\nenatic\nenation\nenbrave\nencaenia\nencage\nencake\nencalendar\nencallow\nencamp\nencampment\nencanker\nencanthis\nencapsulate\nencapsulation\nencapsule\nencarditis\nencarnadine\nencarnalize\nencarpium\nencarpus\nencase\nencasement\nencash\nencashable\nencashment\nencasserole\nencastage\nencatarrhaphy\nencauma\nencaustes\nencaustic\nencaustically\nencave\nencefalon\nEncelia\nencell\nencenter\nencephala\nencephalalgia\nEncephalartos\nencephalasthenia\nencephalic\nencephalin\nencephalitic\nencephalitis\nencephalocele\nencephalocoele\nencephalodialysis\nencephalogram\nencephalograph\nencephalography\nencephaloid\nencephalolith\nencephalology\nencephaloma\nencephalomalacia\nencephalomalacosis\nencephalomalaxis\nencephalomeningitis\nencephalomeningocele\nencephalomere\nencephalomeric\nencephalometer\nencephalometric\nencephalomyelitis\nencephalomyelopathy\nencephalon\nencephalonarcosis\nencephalopathia\nencephalopathic\nencephalopathy\nencephalophyma\nencephalopsychesis\nencephalopyosis\nencephalorrhagia\nencephalosclerosis\nencephaloscope\nencephaloscopy\nencephalosepsis\nencephalospinal\nencephalothlipsis\nencephalotome\nencephalotomy\nencephalous\nenchain\nenchainment\nenchair\nenchalice\nenchannel\nenchant\nenchanter\nenchanting\nenchantingly\nenchantingness\nenchantment\nenchantress\nencharge\nencharnel\nenchase\nenchaser\nenchasten\nEnchelycephali\nenchequer\nenchest\nenchilada\nenchiridion\nEnchodontid\nEnchodontidae\nEnchodontoid\nEnchodus\nenchondroma\nenchondromatous\nenchondrosis\nenchorial\nenchurch\nenchylema\nenchylematous\nenchymatous\nenchytrae\nenchytraeid\nEnchytraeidae\nEnchytraeus\nencina\nencinal\nencincture\nencinder\nencinillo\nencipher\nencircle\nencirclement\nencircler\nencist\nencitadel\nenclaret\nenclasp\nenclave\nenclavement\nenclisis\nenclitic\nenclitical\nenclitically\nencloak\nencloister\nenclose\nencloser\nenclosure\nenclothe\nencloud\nencoach\nencode\nencoffin\nencoignure\nencoil\nencolden\nencollar\nencolor\nencolpion\nencolumn\nencomendero\nencomia\nencomiast\nencomiastic\nencomiastical\nencomiastically\nencomic\nencomienda\nencomiologic\nencomium\nencommon\nencompass\nencompasser\nencompassment\nencoop\nencorbelment\nencore\nencoronal\nencoronate\nencoronet\nencounter\nencounterable\nencounterer\nencourage\nencouragement\nencourager\nencouraging\nencouragingly\nencowl\nencraal\nencradle\nencranial\nencratic\nEncratism\nEncratite\nencraty\nencreel\nencrimson\nencrinal\nencrinic\nEncrinidae\nencrinidae\nencrinital\nencrinite\nencrinitic\nencrinitical\nencrinoid\nEncrinoidea\nEncrinus\nencrisp\nencroach\nencroacher\nencroachingly\nencroachment\nencrotchet\nencrown\nencrownment\nencrust\nencrustment\nencrypt\nencryption\nencuirassed\nencumber\nencumberer\nencumberingly\nencumberment\nencumbrance\nencumbrancer\nencup\nencurl\nencurtain\nencushion\nencyclic\nencyclical\nencyclopedia\nencyclopediac\nencyclopediacal\nencyclopedial\nencyclopedian\nencyclopediast\nencyclopedic\nencyclopedically\nencyclopedism\nencyclopedist\nencyclopedize\nencyrtid\nEncyrtidae\nencyst\nencystation\nencystment\nend\nendable\nendamage\nendamageable\nendamagement\nendamask\nendameba\nendamebic\nEndamoeba\nendamoebiasis\nendamoebic\nEndamoebidae\nendanger\nendangerer\nendangerment\nendangium\nendaortic\nendaortitis\nendarch\nendarchy\nendarterial\nendarteritis\nendarterium\nendaspidean\nendaze\nendboard\nendbrain\nendear\nendearance\nendeared\nendearedly\nendearedness\nendearing\nendearingly\nendearingness\nendearment\nendeavor\nendeavorer\nended\nendeictic\nendellionite\nendemial\nendemic\nendemically\nendemicity\nendemiological\nendemiology\nendemism\nendenizen\nender\nendere\nendermatic\nendermic\nendermically\nenderon\nenderonic\nendevil\nendew\nendgate\nendiadem\nendiaper\nending\nendite\nendive\nendless\nendlessly\nendlessness\nendlichite\nendlong\nendmatcher\nendmost\nendoabdominal\nendoangiitis\nendoaortitis\nendoappendicitis\nendoarteritis\nendoauscultation\nendobatholithic\nendobiotic\nendoblast\nendoblastic\nendobronchial\nendobronchially\nendobronchitis\nendocannibalism\nendocardiac\nendocardial\nendocarditic\nendocarditis\nendocardium\nendocarp\nendocarpal\nendocarpic\nendocarpoid\nendocellular\nendocentric\nEndoceras\nEndoceratidae\nendoceratite\nendoceratitic\nendocervical\nendocervicitis\nendochondral\nendochorion\nendochorionic\nendochrome\nendochylous\nendoclinal\nendocline\nendocoelar\nendocoele\nendocoeliac\nendocolitis\nendocolpitis\nendocondensation\nendocone\nendoconidium\nendocorpuscular\nendocortex\nendocranial\nendocranium\nendocrinal\nendocrine\nendocrinic\nendocrinism\nendocrinological\nendocrinologist\nendocrinology\nendocrinopathic\nendocrinopathy\nendocrinotherapy\nendocrinous\nendocritic\nendocycle\nendocyclic\nendocyemate\nendocyst\nendocystitis\nendoderm\nendodermal\nendodermic\nendodermis\nendodontia\nendodontic\nendodontist\nendodynamomorphic\nendoenteritis\nendoenzyme\nendoesophagitis\nendofaradism\nendogalvanism\nendogamic\nendogamous\nendogamy\nendogastric\nendogastrically\nendogastritis\nendogen\nEndogenae\nendogenesis\nendogenetic\nendogenic\nendogenous\nendogenously\nendogeny\nendoglobular\nendognath\nendognathal\nendognathion\nendogonidium\nendointoxication\nendokaryogamy\nendolabyrinthitis\nendolaryngeal\nendolemma\nendolumbar\nendolymph\nendolymphangial\nendolymphatic\nendolymphic\nendolysin\nendomastoiditis\nendome\nendomesoderm\nendometrial\nendometritis\nendometrium\nendometry\nendomitosis\nendomitotic\nendomixis\nendomorph\nendomorphic\nendomorphism\nendomorphy\nEndomyces\nEndomycetaceae\nendomysial\nendomysium\nendoneurial\nendoneurium\nendonuclear\nendonucleolus\nendoparasite\nendoparasitic\nEndoparasitica\nendopathic\nendopelvic\nendopericarditis\nendoperidial\nendoperidium\nendoperitonitis\nendophagous\nendophagy\nendophasia\nendophasic\nendophlebitis\nendophragm\nendophragmal\nEndophyllaceae\nendophyllous\nEndophyllum\nendophytal\nendophyte\nendophytic\nendophytically\nendophytous\nendoplasm\nendoplasma\nendoplasmic\nendoplast\nendoplastron\nendoplastular\nendoplastule\nendopleura\nendopleural\nendopleurite\nendopleuritic\nendopod\nendopodite\nendopoditic\nendoproct\nEndoprocta\nendoproctous\nendopsychic\nEndopterygota\nendopterygote\nendopterygotic\nendopterygotism\nendopterygotous\nendorachis\nendoral\nendore\nendorhinitis\nendorsable\nendorsation\nendorse\nendorsed\nendorsee\nendorsement\nendorser\nendorsingly\nendosalpingitis\nendosarc\nendosarcode\nendosarcous\nendosclerite\nendoscope\nendoscopic\nendoscopy\nendosecretory\nendosepsis\nendosiphon\nendosiphonal\nendosiphonate\nendosiphuncle\nendoskeletal\nendoskeleton\nendosmometer\nendosmometric\nendosmosic\nendosmosis\nendosmotic\nendosmotically\nendosome\nendosperm\nendospermic\nendospore\nendosporium\nendosporous\nendoss\nendosteal\nendosteally\nendosteitis\nendosteoma\nendosternite\nendosternum\nendosteum\nendostitis\nendostoma\nendostome\nendostosis\nendostracal\nendostracum\nendostylar\nendostyle\nendostylic\nendotheca\nendothecal\nendothecate\nendothecial\nendothecium\nendothelia\nendothelial\nendothelioblastoma\nendotheliocyte\nendothelioid\nendotheliolysin\nendotheliolytic\nendothelioma\nendotheliomyoma\nendotheliomyxoma\nendotheliotoxin\nendothelium\nendothermal\nendothermic\nendothermous\nendothermy\nEndothia\nendothoracic\nendothorax\nEndothrix\nendothys\nendotoxic\nendotoxin\nendotoxoid\nendotracheitis\nendotrachelitis\nEndotrophi\nendotrophic\nendotys\nendovaccination\nendovasculitis\nendovenous\nendow\nendower\nendowment\nendozoa\nendpiece\nEndromididae\nEndromis\nendue\nenduement\nendungeon\nendura\nendurability\nendurable\nendurableness\nendurably\nendurance\nendurant\nendure\nendurer\nenduring\nenduringly\nenduringness\nendways\nendwise\nendyma\nendymal\nEndymion\nendysis\nEneas\neneclann\nenema\nenemy\nenemylike\nenemyship\nenepidermic\nenergeia\nenergesis\nenergetic\nenergetical\nenergetically\nenergeticalness\nenergeticist\nenergetics\nenergetistic\nenergic\nenergical\nenergid\nenergism\nenergist\nenergize\nenergizer\nenergumen\nenergumenon\nenergy\nenervate\nenervation\nenervative\nenervator\neneuch\neneugh\nenface\nenfacement\nenfamous\nenfasten\nenfatico\nenfeature\nenfeeble\nenfeeblement\nenfeebler\nenfelon\nenfeoff\nenfeoffment\nenfester\nenfetter\nenfever\nenfigure\nenfilade\nenfilading\nenfile\nenfiled\nenflagellate\nenflagellation\nenflesh\nenfleurage\nenflower\nenfoil\nenfold\nenfolden\nenfolder\nenfoldment\nenfonced\nenforce\nenforceability\nenforceable\nenforced\nenforcedly\nenforcement\nenforcer\nenforcibility\nenforcible\nenforcingly\nenfork\nenfoul\nenframe\nenframement\nenfranchisable\nenfranchise\nenfranchisement\nenfranchiser\nenfree\nenfrenzy\nenfuddle\nenfurrow\nengage\nengaged\nengagedly\nengagedness\nengagement\nengager\nengaging\nengagingly\nengagingness\nengaol\nengarb\nengarble\nengarland\nengarment\nengarrison\nengastrimyth\nengastrimythic\nengaud\nengaze\nEngelmannia\nengem\nengender\nengenderer\nengenderment\nengerminate\nenghosted\nengild\nengine\nengineer\nengineering\nengineership\nenginehouse\nengineless\nenginelike\nengineman\nenginery\nenginous\nengird\nengirdle\nengirt\nengjateigur\nenglacial\nenglacially\nenglad\nengladden\nEnglander\nEngler\nEnglerophoenix\nEnglifier\nEnglify\nEnglish\nEnglishable\nEnglisher\nEnglishhood\nEnglishism\nEnglishize\nEnglishly\nEnglishman\nEnglishness\nEnglishry\nEnglishwoman\nenglobe\nenglobement\nengloom\nenglory\nenglut\nenglyn\nengnessang\nengobe\nengold\nengolden\nengore\nengorge\nengorgement\nengouled\nengrace\nengraff\nengraft\nengraftation\nengrafter\nengraftment\nengrail\nengrailed\nengrailment\nengrain\nengrained\nengrainedly\nengrainer\nengram\nengramma\nengrammatic\nengrammic\nengrandize\nengrandizement\nengraphia\nengraphic\nengraphically\nengraphy\nengrapple\nengrasp\nEngraulidae\nEngraulis\nengrave\nengraved\nengravement\nengraver\nengraving\nengreen\nengrieve\nengroove\nengross\nengrossed\nengrossedly\nengrosser\nengrossing\nengrossingly\nengrossingness\nengrossment\nenguard\nengulf\nengulfment\nengyscope\nengysseismology\nEngystomatidae\nenhallow\nenhalo\nenhamper\nenhance\nenhanced\nenhancement\nenhancer\nenhancive\nenharmonic\nenharmonical\nenharmonically\nenhat\nenhaunt\nenhearse\nenheart\nenhearten\nenhedge\nenhelm\nenhemospore\nenherit\nenheritage\nenheritance\nenhorror\nenhunger\nenhusk\nEnhydra\nEnhydrinae\nEnhydris\nenhydrite\nenhydritic\nenhydros\nenhydrous\nenhypostasia\nenhypostasis\nenhypostatic\nenhypostatize\neniac\nEnicuridae\nEnid\nEnif\nenigma\nenigmatic\nenigmatical\nenigmatically\nenigmaticalness\nenigmatist\nenigmatization\nenigmatize\nenigmatographer\nenigmatography\nenigmatology\nenisle\nenjail\nenjamb\nenjambed\nenjambment\nenjelly\nenjeopard\nenjeopardy\nenjewel\nenjoin\nenjoinder\nenjoiner\nenjoinment\nenjoy\nenjoyable\nenjoyableness\nenjoyably\nenjoyer\nenjoying\nenjoyingly\nenjoyment\nenkerchief\nenkernel\nEnki\nEnkidu\nenkindle\nenkindler\nenkraal\nenlace\nenlacement\nenlard\nenlarge\nenlargeable\nenlargeableness\nenlarged\nenlargedly\nenlargedness\nenlargement\nenlarger\nenlarging\nenlargingly\nenlaurel\nenleaf\nenleague\nenlevement\nenlief\nenlife\nenlight\nenlighten\nenlightened\nenlightenedly\nenlightenedness\nenlightener\nenlightening\nenlighteningly\nenlightenment\nenlink\nenlinkment\nenlist\nenlisted\nenlister\nenlistment\nenliven\nenlivener\nenlivening\nenliveningly\nenlivenment\nenlock\nenlodge\nenlodgement\nenmarble\nenmask\nenmass\nenmesh\nenmeshment\nenmist\nenmity\nenmoss\nenmuffle\nenneacontahedral\nenneacontahedron\nennead\nenneadianome\nenneadic\nenneagon\nenneagynous\nenneahedral\nenneahedria\nenneahedron\nenneapetalous\nenneaphyllous\nenneasemic\nenneasepalous\nenneaspermous\nenneastyle\nenneastylos\nenneasyllabic\nenneateric\nenneatic\nenneatical\nennerve\nenniche\nennoble\nennoblement\nennobler\nennobling\nennoblingly\nennoic\nennomic\nennui\nEnoch\nEnochic\nenocyte\nenodal\nenodally\nenoil\nenol\nenolate\nenolic\nenolizable\nenolization\nenolize\nenomania\nenomaniac\nenomotarch\nenomoty\nenophthalmos\nenophthalmus\nEnopla\nenoplan\nenoptromancy\nenorganic\nenorm\nenormity\nenormous\nenormously\nenormousness\nEnos\nenostosis\nenough\nenounce\nenouncement\nenow\nenphytotic\nenplane\nenquicken\nenquire\nenquirer\nenquiry\nenrace\nenrage\nenraged\nenragedly\nenragement\nenrange\nenrank\nenrapt\nenrapture\nenrapturer\nenravish\nenravishingly\nenravishment\nenray\nenregiment\nenregister\nenregistration\nenregistry\nenrib\nenrich\nenricher\nenriching\nenrichingly\nenrichment\nenring\nenrive\nenrobe\nenrobement\nenrober\nenrockment\nenrol\nenroll\nenrolled\nenrollee\nenroller\nenrollment\nenrolment\nenroot\nenrough\nenruin\nenrut\nens\nensaffron\nensaint\nensample\nensand\nensandal\nensanguine\nensate\nenscene\nensconce\nenscroll\nensculpture\nense\nenseam\nenseat\nenseem\nensellure\nensemble\nensepulcher\nensepulchre\nenseraph\nenserf\nensete\nenshade\nenshadow\nenshawl\nensheathe\nenshell\nenshelter\nenshield\nenshrine\nenshrinement\nenshroud\nEnsiferi\nensiform\nensign\nensigncy\nensignhood\nensignment\nensignry\nensignship\nensilage\nensilate\nensilation\nensile\nensilist\nensilver\nensisternum\nensky\nenslave\nenslavedness\nenslavement\nenslaver\nensmall\nensnare\nensnarement\nensnarer\nensnaring\nensnaringly\nensnarl\nensnow\nensorcelize\nensorcell\nensoul\nenspell\nensphere\nenspirit\nenstamp\nenstar\nenstate\nenstatite\nenstatitic\nenstatolite\nensteel\nenstool\nenstore\nenstrengthen\nensuable\nensuance\nensuant\nensue\nensuer\nensuingly\nensulphur\nensure\nensurer\nenswathe\nenswathement\nensweep\nentablature\nentablatured\nentablement\nentach\nentad\nEntada\nentail\nentailable\nentailer\nentailment\nental\nentame\nEntamoeba\nentamoebiasis\nentamoebic\nentangle\nentangled\nentangledly\nentangledness\nentanglement\nentangler\nentangling\nentanglingly\nentapophysial\nentapophysis\nentarthrotic\nentasia\nentasis\nentelam\nentelechy\nentellus\nEntelodon\nentelodont\nentempest\nentemple\nentente\nEntentophil\nentepicondylar\nenter\nenterable\nenteraden\nenteradenographic\nenteradenography\nenteradenological\nenteradenology\nenteral\nenteralgia\nenterate\nenterauxe\nenterclose\nenterectomy\nenterer\nentergogenic\nenteria\nenteric\nentericoid\nentering\nenteritidis\nenteritis\nentermete\nenteroanastomosis\nenterobiliary\nenterocele\nenterocentesis\nenterochirurgia\nenterochlorophyll\nenterocholecystostomy\nenterocinesia\nenterocinetic\nenterocleisis\nenteroclisis\nenteroclysis\nEnterocoela\nenterocoele\nenterocoelic\nenterocoelous\nenterocolitis\nenterocolostomy\nenterocrinin\nenterocyst\nenterocystoma\nenterodynia\nenteroepiplocele\nenterogastritis\nenterogastrone\nenterogenous\nenterogram\nenterograph\nenterography\nenterohelcosis\nenterohemorrhage\nenterohepatitis\nenterohydrocele\nenteroid\nenterointestinal\nenteroischiocele\nenterokinase\nenterokinesia\nenterokinetic\nenterolith\nenterolithiasis\nEnterolobium\nenterology\nenteromegalia\nenteromegaly\nenteromere\nenteromesenteric\nEnteromorpha\nenteromycosis\nenteromyiasis\nenteron\nenteroneuritis\nenteroparalysis\nenteroparesis\nenteropathy\nenteropexia\nenteropexy\nenterophthisis\nenteroplasty\nenteroplegia\nenteropneust\nEnteropneusta\nenteropneustan\nenteroptosis\nenteroptotic\nenterorrhagia\nenterorrhaphy\nenterorrhea\nenteroscope\nenterosepsis\nenterospasm\nenterostasis\nenterostenosis\nenterostomy\nenterosyphilis\nenterotome\nenterotomy\nenterotoxemia\nenterotoxication\nenterozoa\nenterozoan\nenterozoic\nenterprise\nenterpriseless\nenterpriser\nenterprising\nenterprisingly\nenterritoriality\nentertain\nentertainable\nentertainer\nentertaining\nentertainingly\nentertainingness\nentertainment\nenthalpy\nentheal\nenthelmintha\nenthelminthes\nenthelminthic\nenthetic\nenthral\nenthraldom\nenthrall\nenthralldom\nenthraller\nenthralling\nenthrallingly\nenthrallment\nenthralment\nenthrone\nenthronement\nenthronization\nenthronize\nenthuse\nenthusiasm\nenthusiast\nenthusiastic\nenthusiastical\nenthusiastically\nenthusiastly\nenthymematic\nenthymematical\nenthymeme\nentia\nentice\nenticeable\nenticeful\nenticement\nenticer\nenticing\nenticingly\nenticingness\nentifical\nentification\nentify\nentincture\nentire\nentirely\nentireness\nentirety\nentiris\nentitative\nentitatively\nentitle\nentitlement\nentity\nentoblast\nentoblastic\nentobranchiate\nentobronchium\nentocalcaneal\nentocarotid\nentocele\nentocnemial\nentocoele\nentocoelic\nentocondylar\nentocondyle\nentocondyloid\nentocone\nentoconid\nentocornea\nentocranial\nentocuneiform\nentocuniform\nentocyemate\nentocyst\nentoderm\nentodermal\nentodermic\nentogastric\nentogenous\nentoglossal\nentohyal\nentoil\nentoilment\nEntoloma\nentomb\nentombment\nentomere\nentomeric\nentomic\nentomical\nentomion\nentomogenous\nentomoid\nentomologic\nentomological\nentomologically\nentomologist\nentomologize\nentomology\nEntomophaga\nentomophagan\nentomophagous\nEntomophila\nentomophilous\nentomophily\nEntomophthora\nEntomophthoraceae\nentomophthoraceous\nEntomophthorales\nentomophthorous\nentomophytous\nEntomosporium\nEntomostraca\nentomostracan\nentomostracous\nentomotaxy\nentomotomist\nentomotomy\nentone\nentonement\nentoolitic\nentoparasite\nentoparasitic\nentoperipheral\nentophytal\nentophyte\nentophytic\nentophytically\nentophytous\nentopic\nentopical\nentoplasm\nentoplastic\nentoplastral\nentoplastron\nentopopliteal\nEntoprocta\nentoproctous\nentopterygoid\nentoptic\nentoptical\nentoptically\nentoptics\nentoptoscope\nentoptoscopic\nentoptoscopy\nentoretina\nentorganism\nentosarc\nentosclerite\nentosphenal\nentosphenoid\nentosphere\nentosternal\nentosternite\nentosternum\nentothorax\nentotic\nEntotrophi\nentotympanic\nentourage\nentozoa\nentozoal\nentozoan\nentozoarian\nentozoic\nentozoological\nentozoologically\nentozoologist\nentozoology\nentozoon\nentracte\nentrail\nentrails\nentrain\nentrainer\nentrainment\nentrammel\nentrance\nentrancedly\nentrancement\nentranceway\nentrancing\nentrancingly\nentrant\nentrap\nentrapment\nentrapper\nentrappingly\nentreasure\nentreat\nentreating\nentreatingly\nentreatment\nentreaty\nentree\nentremets\nentrench\nentrenchment\nentrepas\nentrepot\nentrepreneur\nentrepreneurial\nentrepreneurship\nentresol\nentrochite\nentrochus\nentropion\nentropionize\nentropium\nentropy\nentrough\nentrust\nentrustment\nentry\nentryman\nentryway\nenturret\nentwine\nentwinement\nentwist\nEntyloma\nenucleate\nenucleation\nenucleator\nEnukki\nenumerable\nenumerate\nenumeration\nenumerative\nenumerator\nenunciability\nenunciable\nenunciate\nenunciation\nenunciative\nenunciatively\nenunciator\nenunciatory\nenure\nenuresis\nenuretic\nenurny\nenvapor\nenvapour\nenvassal\nenvassalage\nenvault\nenveil\nenvelop\nenvelope\nenveloper\nenvelopment\nenvenom\nenvenomation\nenverdure\nenvermeil\nenviable\nenviableness\nenviably\nenvied\nenvier\nenvineyard\nenvious\nenviously\nenviousness\nenviron\nenvironage\nenvironal\nenvironic\nenvironment\nenvironmental\nenvironmentalism\nenvironmentalist\nenvironmentally\nenvirons\nenvisage\nenvisagement\nenvision\nenvolume\nenvoy\nenvoyship\nenvy\nenvying\nenvyingly\nenwallow\nenwiden\nenwind\nenwisen\nenwoman\nenwomb\nenwood\nenworthed\nenwound\nenwrap\nenwrapment\nenwreathe\nenwrite\nenwrought\nenzone\nenzootic\nenzooty\nenzym\nenzymatic\nenzyme\nenzymic\nenzymically\nenzymologist\nenzymology\nenzymolysis\nenzymolytic\nenzymosis\nenzymotic\neoan\nEoanthropus\nEocarboniferous\nEocene\nEodevonian\nEogaea\nEogaean\nEoghanacht\nEohippus\neolation\neolith\neolithic\nEomecon\neon\neonism\nEopalaeozoic\nEopaleozoic\neophyte\neophytic\neophyton\neorhyolite\neosate\nEosaurus\neoside\neosin\neosinate\neosinic\neosinoblast\neosinophile\neosinophilia\neosinophilic\neosinophilous\neosphorite\nEozoic\neozoon\neozoonal\nepacmaic\nepacme\nepacrid\nEpacridaceae\nepacridaceous\nEpacris\nepact\nepactal\nepagoge\nepagogic\nepagomenae\nepagomenal\nepagomenic\nepagomenous\nepaleaceous\nepalpate\nepanadiplosis\nEpanagoge\nepanalepsis\nepanaleptic\nepanaphora\nepanaphoral\nepanastrophe\nepanisognathism\nepanisognathous\nepanodos\nepanody\nEpanorthidae\nepanorthosis\nepanorthotic\nepanthous\nepapillate\nepappose\neparch\neparchate\nEparchean\neparchial\neparchy\neparcuale\neparterial\nepaule\nepaulement\nepaulet\nepauleted\nepauletted\nepauliere\nepaxial\nepaxially\nepedaphic\nepee\nepeeist\nEpeira\nepeiric\nepeirid\nEpeiridae\nepeirogenesis\nepeirogenetic\nepeirogenic\nepeirogeny\nepeisodion\nepembryonic\nepencephal\nepencephalic\nepencephalon\nependyma\nependymal\nependyme\nependymitis\nependymoma\nependytes\nepenthesis\nepenthesize\nepenthetic\nepephragmal\nepepophysial\nepepophysis\nepergne\neperotesis\nEperua\nepexegesis\nepexegetic\nepexegetical\nepexegetically\nepha\nephah\nepharmonic\nepharmony\nephebe\nephebeion\nephebeum\nephebic\nephebos\nephebus\nephectic\nEphedra\nEphedraceae\nephedrine\nephelcystic\nephelis\nEphemera\nephemera\nephemerae\nephemeral\nephemerality\nephemerally\nephemeralness\nephemeran\nephemerid\nEphemerida\nEphemeridae\nephemerides\nephemeris\nephemerist\nephemeromorph\nephemeromorphic\nephemeron\nEphemeroptera\nephemerous\nEphesian\nEphesine\nephetae\nephete\nephetic\nephialtes\nephidrosis\nephippial\nephippium\nephod\nephor\nephoral\nephoralty\nephorate\nephoric\nephorship\nephorus\nephphatha\nEphraim\nEphraimite\nEphraimitic\nEphraimitish\nEphraitic\nEphrathite\nEphthalite\nEphthianura\nephthianure\nEphydra\nephydriad\nephydrid\nEphydridae\nephymnium\nephyra\nephyrula\nepibasal\nEpibaterium\nepibatholithic\nepibenthic\nepibenthos\nepiblast\nepiblastema\nepiblastic\nepiblema\nepibole\nepibolic\nepibolism\nepiboly\nepiboulangerite\nepibranchial\nepic\nepical\nepically\nepicalyx\nepicanthic\nepicanthus\nepicardia\nepicardiac\nepicardial\nepicardium\nepicarid\nepicaridan\nEpicaridea\nEpicarides\nepicarp\nEpicauta\nepicede\nepicedial\nepicedian\nepicedium\nepicele\nepicene\nepicenism\nepicenity\nepicenter\nepicentral\nepicentrum\nEpiceratodus\nepicerebral\nepicheirema\nepichil\nepichile\nepichilium\nepichindrotic\nepichirema\nepichondrosis\nepichordal\nepichorial\nepichoric\nepichorion\nepichoristic\nEpichristian\nepicism\nepicist\nepiclastic\nepicleidian\nepicleidium\nepiclesis\nepiclidal\nepiclinal\nepicly\nepicnemial\nEpicoela\nepicoelar\nepicoele\nepicoelia\nepicoeliac\nepicoelian\nepicoeloma\nepicoelous\nepicolic\nepicondylar\nepicondyle\nepicondylian\nepicondylic\nepicontinental\nepicoracohumeral\nepicoracoid\nepicoracoidal\nepicormic\nepicorolline\nepicortical\nepicostal\nepicotyl\nepicotyleal\nepicotyledonary\nepicranial\nepicranium\nepicranius\nEpicrates\nepicrisis\nepicritic\nepicrystalline\nEpictetian\nepicure\nEpicurean\nEpicureanism\nepicurish\nepicurishly\nEpicurism\nEpicurize\nepicycle\nepicyclic\nepicyclical\nepicycloid\nepicycloidal\nepicyemate\nepicyesis\nepicystotomy\nepicyte\nepideictic\nepideictical\nepideistic\nepidemic\nepidemical\nepidemically\nepidemicalness\nepidemicity\nepidemiographist\nepidemiography\nepidemiological\nepidemiologist\nepidemiology\nepidemy\nepidendral\nepidendric\nEpidendron\nEpidendrum\nepiderm\nepiderma\nepidermal\nepidermatic\nepidermatoid\nepidermatous\nepidermic\nepidermical\nepidermically\nepidermidalization\nepidermis\nepidermization\nepidermoid\nepidermoidal\nepidermolysis\nepidermomycosis\nEpidermophyton\nepidermophytosis\nepidermose\nepidermous\nepidesmine\nepidialogue\nepidiascope\nepidiascopic\nepidictic\nepidictical\nepididymal\nepididymectomy\nepididymis\nepididymite\nepididymitis\nepididymodeferentectomy\nepididymodeferential\nepididymovasostomy\nepidiorite\nepidiorthosis\nepidosite\nepidote\nepidotic\nepidotiferous\nepidotization\nepidural\nepidymides\nepifascial\nepifocal\nepifolliculitis\nEpigaea\nepigamic\nepigaster\nepigastraeum\nepigastral\nepigastrial\nepigastric\nepigastrical\nepigastriocele\nepigastrium\nepigastrocele\nepigeal\nepigean\nepigeic\nepigene\nepigenesis\nepigenesist\nepigenetic\nepigenetically\nepigenic\nepigenist\nepigenous\nepigeous\nepiglottal\nepiglottic\nepiglottidean\nepiglottiditis\nepiglottis\nepiglottitis\nepignathous\nepigonal\nepigonation\nepigone\nEpigoni\nepigonic\nEpigonichthyidae\nEpigonichthys\nepigonium\nepigonos\nepigonous\nEpigonus\nepigram\nepigrammatic\nepigrammatical\nepigrammatically\nepigrammatism\nepigrammatist\nepigrammatize\nepigrammatizer\nepigraph\nepigrapher\nepigraphic\nepigraphical\nepigraphically\nepigraphist\nepigraphy\nepiguanine\nepigyne\nepigynous\nepigynum\nepigyny\nEpihippus\nepihyal\nepihydric\nepihydrinic\nepikeia\nepiklesis\nEpikouros\nepilabrum\nEpilachna\nEpilachnides\nepilamellar\nepilaryngeal\nepilate\nepilation\nepilatory\nepilegomenon\nepilemma\nepilemmal\nepilepsy\nepileptic\nepileptically\nepileptiform\nepileptogenic\nepileptogenous\nepileptoid\nepileptologist\nepileptology\nepilimnion\nepilobe\nEpilobiaceae\nEpilobium\nepilogation\nepilogic\nepilogical\nepilogist\nepilogistic\nepilogize\nepilogue\nEpimachinae\nepimacus\nepimandibular\nepimanikia\nEpimedium\nEpimenidean\nepimer\nepimeral\nepimere\nepimeric\nepimeride\nepimerite\nepimeritic\nepimeron\nepimerum\nepimorphic\nepimorphosis\nepimysium\nepimyth\nepinaos\nepinastic\nepinastically\nepinasty\nepineolithic\nEpinephelidae\nEpinephelus\nepinephrine\nepinette\nepineural\nepineurial\nepineurium\nepinglette\nepinicial\nepinician\nepinicion\nepinine\nepiopticon\nepiotic\nEpipactis\nepipaleolithic\nepiparasite\nepiparodos\nepipastic\nepiperipheral\nepipetalous\nepiphanous\nEpiphany\nepipharyngeal\nepipharynx\nEpiphegus\nepiphenomenal\nepiphenomenalism\nepiphenomenalist\nepiphenomenon\nepiphloedal\nepiphloedic\nepiphloeum\nepiphonema\nepiphora\nepiphragm\nepiphylline\nepiphyllous\nEpiphyllum\nepiphysary\nepiphyseal\nepiphyseolysis\nepiphysial\nepiphysis\nepiphysitis\nepiphytal\nepiphyte\nepiphytic\nepiphytical\nepiphytically\nepiphytism\nepiphytology\nepiphytotic\nepiphytous\nepipial\nepiplankton\nepiplanktonic\nepiplasm\nepiplasmic\nepiplastral\nepiplastron\nepiplectic\nepipleura\nepipleural\nepiplexis\nepiploce\nepiplocele\nepiploic\nepiploitis\nepiploon\nepiplopexy\nepipodial\nepipodiale\nepipodite\nepipoditic\nepipodium\nepipolic\nepipolism\nepipolize\nepiprecoracoid\nEpipsychidion\nepipteric\nepipterous\nepipterygoid\nepipubic\nepipubis\nepirhizous\nepirogenic\nepirogeny\nEpirote\nEpirotic\nepirotulian\nepirrhema\nepirrhematic\nepirrheme\nepisarcine\nepiscenium\nepisclera\nepiscleral\nepiscleritis\nepiscopable\nepiscopacy\nEpiscopal\nepiscopal\nepiscopalian\nEpiscopalianism\nEpiscopalianize\nepiscopalism\nepiscopality\nEpiscopally\nepiscopally\nepiscopate\nepiscopature\nepiscope\nepiscopicide\nepiscopization\nepiscopize\nepiscopolatry\nepiscotister\nepisematic\nepisepalous\nepisiocele\nepisiohematoma\nepisioplasty\nepisiorrhagia\nepisiorrhaphy\nepisiostenosis\nepisiotomy\nepiskeletal\nepiskotister\nepisodal\nepisode\nepisodial\nepisodic\nepisodical\nepisodically\nepispadiac\nepispadias\nepispastic\nepisperm\nepispermic\nepispinal\nepisplenitis\nepisporangium\nepispore\nepisporium\nepistapedial\nepistasis\nepistatic\nepistaxis\nepistemic\nepistemolog\nepistemological\nepistemologically\nepistemologist\nepistemology\nepistemonic\nepistemonical\nepistemophilia\nepistemophiliac\nepistemophilic\nepisternal\nepisternalia\nepisternite\nepisternum\nepistilbite\nepistlar\nepistle\nepistler\nepistolarian\nepistolarily\nepistolary\nepistolatory\nepistoler\nepistolet\nepistolic\nepistolical\nepistolist\nepistolizable\nepistolization\nepistolize\nepistolizer\nepistolographer\nepistolographic\nepistolographist\nepistolography\nepistoma\nepistomal\nepistome\nepistomian\nepistroma\nepistrophe\nepistropheal\nepistropheus\nepistrophic\nepistrophy\nepistylar\nepistyle\nEpistylis\nepisyllogism\nepisynaloephe\nepisynthetic\nepisyntheton\nepitactic\nepitaph\nepitapher\nepitaphial\nepitaphian\nepitaphic\nepitaphical\nepitaphist\nepitaphize\nepitaphless\nepitasis\nepitela\nepitendineum\nepitenon\nepithalamia\nepithalamial\nepithalamiast\nepithalamic\nepithalamion\nepithalamium\nepithalamize\nepithalamus\nepithalamy\nepithalline\nepitheca\nepithecal\nepithecate\nepithecium\nepithelia\nepithelial\nepithelioblastoma\nepithelioceptor\nepitheliogenetic\nepithelioglandular\nepithelioid\nepitheliolysin\nepitheliolysis\nepitheliolytic\nepithelioma\nepitheliomatous\nepitheliomuscular\nepitheliosis\nepitheliotoxin\nepithelium\nepithelization\nepithelize\nepitheloid\nepithem\nepithesis\nepithet\nepithetic\nepithetical\nepithetically\nepithetician\nepithetize\nepitheton\nepithumetic\nepithyme\nepithymetic\nepithymetical\nepitimesis\nepitoke\nepitomator\nepitomatory\nepitome\nepitomic\nepitomical\nepitomically\nepitomist\nepitomization\nepitomize\nepitomizer\nepitonic\nEpitoniidae\nepitonion\nEpitonium\nepitoxoid\nepitrachelion\nepitrichial\nepitrichium\nepitrite\nepitritic\nepitrochlea\nepitrochlear\nepitrochoid\nepitrochoidal\nepitrope\nepitrophic\nepitrophy\nepituberculosis\nepituberculous\nepitympanic\nepitympanum\nepityphlitis\nepityphlon\nepiural\nepivalve\nepixylous\nepizeuxis\nEpizoa\nepizoa\nepizoal\nepizoan\nepizoarian\nepizoic\nepizoicide\nepizoon\nepizootic\nepizootiology\nepoch\nepocha\nepochal\nepochally\nepochism\nepochist\nepode\nepodic\nepollicate\nEpomophorus\neponychium\neponym\neponymic\neponymism\neponymist\neponymize\neponymous\neponymus\neponymy\nepoophoron\nepopee\nepopoean\nepopoeia\nepopoeist\nepopt\nepoptes\nepoptic\nepoptist\nepornitic\nepornitically\nepos\nEppie\nEppy\nEproboscidea\nepruinose\nepsilon\nEpsom\nepsomite\nEptatretidae\nEptatretus\nepulary\nepulation\nepulis\nepulo\nepuloid\nepulosis\nepulotic\nepupillate\nepural\nepurate\nepuration\nepyllion\nequability\nequable\nequableness\nequably\nequaeval\nequal\nequalable\nequaling\nequalist\nequalitarian\nequalitarianism\nequality\nequalization\nequalize\nequalizer\nequalizing\nequalling\nequally\nequalness\nequangular\nequanimity\nequanimous\nequanimously\nequanimousness\nequant\nequatable\nequate\nequation\nequational\nequationally\nequationism\nequationist\nequator\nequatorial\nequatorially\nequatorward\nequatorwards\nequerry\nequerryship\nequestrial\nequestrian\nequestrianism\nequestrianize\nequestrianship\nequestrienne\nequianchorate\nequiangle\nequiangular\nequiangularity\nequianharmonic\nequiarticulate\nequiatomic\nequiaxed\nequiaxial\nequibalance\nequibiradiate\nequicellular\nequichangeable\nequicohesive\nequiconvex\nequicostate\nequicrural\nequicurve\nequid\nequidense\nequidensity\nequidiagonal\nequidifferent\nequidimensional\nequidistance\nequidistant\nequidistantial\nequidistantly\nequidistribution\nequidiurnal\nequidivision\nequidominant\nequidurable\nequielliptical\nequiexcellency\nequiform\nequiformal\nequiformity\nequiglacial\nequigranular\nequijacent\nequilateral\nequilaterally\nequilibrant\nequilibrate\nequilibration\nequilibrative\nequilibrator\nequilibratory\nequilibria\nequilibrial\nequilibriate\nequilibrio\nequilibrious\nequilibrist\nequilibristat\nequilibristic\nequilibrity\nequilibrium\nequilibrize\nequilobate\nequilobed\nequilocation\nequilucent\nequimodal\nequimolar\nequimolecular\nequimomental\nequimultiple\nequinate\nequine\nequinecessary\nequinely\nequinia\nequinity\nequinoctial\nequinoctially\nequinovarus\nequinox\nequinumerally\nequinus\nequiomnipotent\nequip\nequipaga\nequipage\nequiparant\nequiparate\nequiparation\nequipartile\nequipartisan\nequipartition\nequiped\nequipedal\nequiperiodic\nequipluve\nequipment\nequipoise\nequipollence\nequipollency\nequipollent\nequipollently\nequipollentness\nequiponderance\nequiponderancy\nequiponderant\nequiponderate\nequiponderation\nequipostile\nequipotent\nequipotential\nequipotentiality\nequipper\nequiprobabilism\nequiprobabilist\nequiprobability\nequiproducing\nequiproportional\nequiproportionality\nequiradial\nequiradiate\nequiradical\nequirotal\nequisegmented\nEquisetaceae\nequisetaceous\nEquisetales\nequisetic\nEquisetum\nequisided\nequisignal\nequisized\nequison\nequisonance\nequisonant\nequispaced\nequispatial\nequisufficiency\nequisurface\nequitable\nequitableness\nequitably\nequitangential\nequitant\nequitation\nequitative\nequitemporal\nequitemporaneous\nequites\nequitist\nequitriangular\nequity\nequivalence\nequivalenced\nequivalency\nequivalent\nequivalently\nequivaliant\nequivalue\nequivaluer\nequivalve\nequivalved\nequivalvular\nequivelocity\nequivocacy\nequivocal\nequivocality\nequivocally\nequivocalness\nequivocate\nequivocatingly\nequivocation\nequivocator\nequivocatory\nequivoluminal\nequivoque\nequivorous\nequivote\nequoid\nequoidean\nequuleus\nEquus\ner\nera\nerade\neradiate\neradiation\neradicable\neradicant\neradicate\neradication\neradicative\neradicator\neradicatory\neradiculose\nEragrostis\neral\neranist\nEranthemum\nEranthis\nerasable\nerase\nerased\nerasement\neraser\nerasion\nErasmian\nErasmus\nErastian\nErastianism\nErastianize\nErastus\nerasure\nErava\nerbia\nerbium\nerd\nerdvark\nere\nErechtheum\nErechtheus\nErechtites\nerect\nerectable\nerecter\nerectile\nerectility\nerecting\nerection\nerective\nerectly\nerectness\nerectopatent\nerector\nerelong\neremacausis\nEremian\neremic\neremital\neremite\neremiteship\neremitic\neremitical\neremitish\neremitism\nEremochaeta\neremochaetous\neremology\neremophyte\nEremopteris\nEremurus\nerenach\nerenow\nerepsin\nerept\nereptase\nereptic\nereption\nerethic\nerethisia\nerethism\nerethismic\nerethistic\nerethitic\nErethizon\nErethizontidae\nEretrian\nerewhile\nerewhiles\nerg\nergal\nergamine\nErgane\nergasia\nergasterion\nergastic\nergastoplasm\nergastoplasmic\nergastulum\nergatandromorph\nergatandromorphic\nergatandrous\nergatandry\nergates\nergatocracy\nergatocrat\nergatogyne\nergatogynous\nergatogyny\nergatoid\nergatomorph\nergatomorphic\nergatomorphism\nergmeter\nergodic\nergogram\nergograph\nergographic\nergoism\nergology\nergomaniac\nergometer\nergometric\nergometrine\nergon\nergonovine\nergophile\nergophobia\nergophobiac\nergoplasm\nergostat\nergosterin\nergosterol\nergot\nergotamine\nergotaminine\nergoted\nergothioneine\nergotic\nergotin\nergotinine\nergotism\nergotist\nergotization\nergotize\nergotoxin\nergotoxine\nergusia\neria\nErian\nErianthus\nEric\neric\nErica\nEricaceae\nericaceous\nericad\nerical\nEricales\nericetal\nericeticolous\nericetum\nerichthus\nerichtoid\nericineous\nericius\nErick\nericoid\nericolin\nericophyte\nEridanid\nErie\nErigenia\nErigeron\nerigible\nEriglossa\neriglossate\nErik\nerika\nerikite\nErinaceidae\nerinaceous\nErinaceus\nerineum\nerinite\nErinize\nerinose\nEriobotrya\nEriocaulaceae\neriocaulaceous\nEriocaulon\nEriocomi\nEriodendron\nEriodictyon\nerioglaucine\nEriogonum\neriometer\nerionite\nEriophorum\nEriophyes\nEriophyidae\neriophyllous\nEriosoma\nEriphyle\nEristalis\neristic\neristical\neristically\nErithacus\nEritrean\nerizo\nerlking\nErma\nErmanaric\nErmani\nErmanrich\nermelin\nermine\nermined\nerminee\nermines\nerminites\nerminois\nerne\nErnest\nErnestine\nErnie\nErnst\nerode\neroded\nerodent\nerodible\nErodium\nerogeneity\nerogenesis\nerogenetic\nerogenic\nerogenous\nerogeny\nEros\neros\nerose\nerosely\nerosible\nerosion\nerosional\nerosionist\nerosive\nerostrate\neroteme\nerotesis\nerotetic\nerotic\nerotica\nerotical\nerotically\neroticism\neroticize\neroticomania\nerotism\nerotogenesis\nerotogenetic\nerotogenic\nerotogenicity\nerotomania\nerotomaniac\nerotopath\nerotopathic\nerotopathy\nErotylidae\nErpetoichthys\nerpetologist\nerr\nerrability\nerrable\nerrableness\nerrabund\nerrancy\nerrand\nerrant\nErrantia\nerrantly\nerrantness\nerrantry\nerrata\nerratic\nerratical\nerratically\nerraticalness\nerraticism\nerraticness\nerratum\nerrhine\nerring\nerringly\nerrite\nerroneous\nerroneously\nerroneousness\nerror\nerrorful\nerrorist\nerrorless\ners\nErsar\nersatz\nErse\nErtebolle\nerth\nerthen\nerthling\nerthly\nerubescence\nerubescent\nerubescite\neruc\nEruca\neruca\nerucic\neruciform\nerucin\nerucivorous\neruct\neructance\neructation\neructative\neruction\nerudit\nerudite\neruditely\neruditeness\neruditical\nerudition\neruditional\neruditionist\nerugate\nerugation\nerugatory\nerumpent\nerupt\neruption\neruptional\neruptive\neruptively\neruptiveness\neruptivity\nervenholder\nErvipiame\nErvum\nErwin\nErwinia\neryhtrism\nErymanthian\nEryngium\neryngo\nEryon\nEryops\nErysibe\nErysimum\nerysipelas\nerysipelatoid\nerysipelatous\nerysipeloid\nErysipelothrix\nerysipelous\nErysiphaceae\nErysiphe\nErythea\nerythema\nerythematic\nerythematous\nerythemic\nErythraea\nErythraean\nErythraeidae\nerythrasma\nerythrean\nerythremia\nerythremomelalgia\nerythrene\nerythrin\nErythrina\nerythrine\nErythrinidae\nErythrinus\nerythrismal\nerythristic\nerythrite\nerythritic\nerythritol\nerythroblast\nerythroblastic\nerythroblastosis\nerythrocarpous\nerythrocatalysis\nErythrochaete\nerythrochroic\nerythrochroism\nerythroclasis\nerythroclastic\nerythrocyte\nerythrocytic\nerythrocytoblast\nerythrocytolysin\nerythrocytolysis\nerythrocytolytic\nerythrocytometer\nerythrocytorrhexis\nerythrocytoschisis\nerythrocytosis\nerythrodegenerative\nerythrodermia\nerythrodextrin\nerythrogenesis\nerythrogenic\nerythroglucin\nerythrogonium\nerythroid\nerythrol\nerythrolein\nerythrolitmin\nerythrolysin\nerythrolysis\nerythrolytic\nerythromelalgia\nerythron\nerythroneocytosis\nErythronium\nerythronium\nerythropenia\nerythrophage\nerythrophagous\nerythrophilous\nerythrophleine\nerythrophobia\nerythrophore\nerythrophyll\nerythrophyllin\nerythropia\nerythroplastid\nerythropoiesis\nerythropoietic\nerythropsia\nerythropsin\nerythrorrhexis\nerythroscope\nerythrose\nerythrosiderite\nerythrosin\nerythrosinophile\nerythrosis\nErythroxylaceae\nerythroxylaceous\nerythroxyline\nErythroxylon\nErythroxylum\nerythrozincite\nerythrozyme\nerythrulose\nEryx\nes\nesca\nescadrille\nescalade\nescalader\nescalado\nescalan\nescalate\nEscalator\nescalator\nescalin\nEscallonia\nEscalloniaceae\nescalloniaceous\nescalop\nescaloped\nescambio\nescambron\nescapable\nescapade\nescapage\nescape\nescapee\nescapeful\nescapeless\nescapement\nescaper\nescapingly\nescapism\nescapist\nescarbuncle\nescargatoire\nescarole\nescarp\nescarpment\neschalot\neschar\neschara\nescharine\nescharoid\nescharotic\neschatocol\neschatological\neschatologist\neschatology\nescheat\nescheatable\nescheatage\nescheatment\nescheator\nescheatorship\nEscherichia\neschew\neschewal\neschewance\neschewer\nEschscholtzia\neschynite\nesclavage\nescoba\nescobadura\nescobilla\nescobita\nescolar\nesconson\nescopette\nEscorial\nescort\nescortage\nescortee\nescortment\nescribe\nescritoire\nescritorial\nescrol\nescropulo\nescrow\nescruage\nescudo\nEsculapian\nesculent\nesculetin\nesculin\nescutcheon\nescutcheoned\nescutellate\nesdragol\nEsdras\nEsebrias\nesemplastic\nesemplasy\neseptate\nesere\neserine\nesexual\neshin\nesiphonal\nesker\nEskimauan\nEskimo\nEskimoic\nEskimoid\nEskimoized\nEskualdun\nEskuara\nEsmeralda\nEsmeraldan\nesmeraldite\nesne\nesoanhydride\nesocataphoria\nEsocidae\nesociform\nesocyclic\nesodic\nesoenteritis\nesoethmoiditis\nesogastritis\nesonarthex\nesoneural\nesophagal\nesophagalgia\nesophageal\nesophagean\nesophagectasia\nesophagectomy\nesophagi\nesophagism\nesophagismus\nesophagitis\nesophago\nesophagocele\nesophagodynia\nesophagogastroscopy\nesophagogastrostomy\nesophagomalacia\nesophagometer\nesophagomycosis\nesophagopathy\nesophagoplasty\nesophagoplegia\nesophagoplication\nesophagoptosis\nesophagorrhagia\nesophagoscope\nesophagoscopy\nesophagospasm\nesophagostenosis\nesophagostomy\nesophagotome\nesophagotomy\nesophagus\nesophoria\nesophoric\nEsopus\nesoteric\nesoterica\nesoterical\nesoterically\nesotericism\nesotericist\nesoterics\nesoterism\nesoterist\nesoterize\nesotery\nesothyropexy\nesotrope\nesotropia\nesotropic\nEsox\nespacement\nespadon\nespalier\nespantoon\nesparcet\nesparsette\nesparto\nespathate\nespave\nespecial\nespecially\nespecialness\nesperance\nEsperantic\nEsperantidist\nEsperantido\nEsperantism\nEsperantist\nEsperanto\nespial\nespichellite\nespier\nespinal\nespingole\nespinillo\nespino\nespionage\nesplanade\nesplees\nesponton\nespousal\nespouse\nespousement\nespouser\nEspriella\nespringal\nespundia\nespy\nesquamate\nesquamulose\nEsquiline\nesquire\nesquirearchy\nesquiredom\nesquireship\ness\nessang\nessay\nessayer\nessayette\nessayical\nessayish\nessayism\nessayist\nessayistic\nessayistical\nessaylet\nessed\nEssedones\nEsselen\nEsselenian\nessence\nessency\nEssene\nEssenian\nEssenianism\nEssenic\nEssenical\nEssenis\nEssenism\nEssenize\nessentia\nessential\nessentialism\nessentialist\nessentiality\nessentialize\nessentially\nessentialness\nessenwood\nEssex\nessexite\nEssie\nessling\nessoin\nessoinee\nessoiner\nessoinment\nessonite\nessorant\nestablish\nestablishable\nestablished\nestablisher\nestablishment\nestablishmentarian\nestablishmentarianism\nestablishmentism\nestacade\nestadal\nestadio\nestado\nestafette\nestafetted\nestamene\nestamp\nestampage\nestampede\nestampedero\nestate\nestatesman\nesteem\nesteemable\nesteemer\nEstella\nester\nesterase\nesterellite\nesteriferous\nesterification\nesterify\nesterization\nesterize\nesterlin\nesterling\nestevin\nEsth\nEsthacyte\nesthematology\nEsther\nEstheria\nestherian\nEstheriidae\nesthesia\nesthesio\nesthesioblast\nesthesiogen\nesthesiogenic\nesthesiogeny\nesthesiography\nesthesiology\nesthesiometer\nesthesiometric\nesthesiometry\nesthesioneurosis\nesthesiophysiology\nesthesis\nesthetology\nesthetophore\nesthiomene\nestimable\nestimableness\nestimably\nestimate\nestimatingly\nestimation\nestimative\nestimator\nestipulate\nestivage\nestival\nestivate\nestivation\nestivator\nestmark\nestoc\nestoile\nEstonian\nestop\nestoppage\nestoppel\nEstotiland\nestovers\nestrade\nestradiol\nestradiot\nestragole\nestrange\nestrangedness\nestrangement\nestranger\nestrapade\nestray\nestre\nestreat\nestrepe\nestrepement\nestriate\nestriche\nestrin\nestriol\nestrogen\nestrogenic\nestrone\nestrous\nestrual\nestruate\nestruation\nestuarial\nestuarine\nestuary\nestufa\nestuous\nestus\nesugarization\nesurience\nesurient\nesuriently\neta\netaballi\netacism\netacist\netalon\nEtamin\netamine\netch\nEtchareottine\netcher\nEtchimin\netching\nEteoclus\nEteocretes\nEteocreton\neternal\neternalism\neternalist\neternalization\neternalize\neternally\neternalness\neternity\neternization\neternize\netesian\nethal\nethaldehyde\nEthan\nethanal\nethanamide\nethane\nethanedial\nethanediol\nethanedithiol\nethanethial\nethanethiol\nEthanim\nethanol\nethanolamine\nethanolysis\nethanoyl\nEthel\nethel\nethene\nEtheneldeli\nethenic\nethenoid\nethenoidal\nethenol\nethenyl\nEtheostoma\nEtheostomidae\nEtheostominae\netheostomoid\nether\netherate\nethereal\netherealism\nethereality\netherealization\netherealize\nethereally\netherealness\netherean\nethered\nethereous\nEtheria\netheric\netherification\netheriform\netherify\nEtheriidae\netherin\netherion\netherism\netherization\netherize\netherizer\netherolate\netherous\nethic\nethical\nethicalism\nethicality\nethically\nethicalness\nethician\nethicism\nethicist\nethicize\nethicoaesthetic\nethicophysical\nethicopolitical\nethicoreligious\nethicosocial\nethics\nethid\nethide\nethidene\nethine\nethiodide\nethionic\nEthiop\nEthiopia\nEthiopian\nEthiopic\nethiops\nethmofrontal\nethmoid\nethmoidal\nethmoiditis\nethmolachrymal\nethmolith\nethmomaxillary\nethmonasal\nethmopalatal\nethmopalatine\nethmophysal\nethmopresphenoidal\nethmosphenoid\nethmosphenoidal\nethmoturbinal\nethmoturbinate\nethmovomer\nethmovomerine\nethmyphitis\nethnal\nethnarch\nethnarchy\nethnic\nethnical\nethnically\nethnicism\nethnicist\nethnicize\nethnicon\nethnize\nethnobiological\nethnobiology\nethnobotanic\nethnobotanical\nethnobotanist\nethnobotany\nethnocentric\nethnocentrism\nethnocracy\nethnodicy\nethnoflora\nethnogenic\nethnogeny\nethnogeographer\nethnogeographic\nethnogeographical\nethnogeographically\nethnogeography\nethnographer\nethnographic\nethnographical\nethnographically\nethnographist\nethnography\nethnologer\nethnologic\nethnological\nethnologically\nethnologist\nethnology\nethnomaniac\nethnopsychic\nethnopsychological\nethnopsychology\nethnos\nethnotechnics\nethnotechnography\nethnozoological\nethnozoology\nethography\netholide\nethologic\nethological\nethology\nethonomic\nethonomics\nethopoeia\nethos\nethoxide\nethoxycaffeine\nethoxyl\nethrog\nethyl\nethylamide\nethylamine\nethylate\nethylation\nethylene\nethylenediamine\nethylenic\nethylenimine\nethylenoid\nethylhydrocupreine\nethylic\nethylidene\nethylidyne\nethylin\nethylmorphine\nethylsulphuric\nethyne\nethynyl\netiogenic\netiolate\netiolation\netiolin\netiolize\netiological\netiologically\netiologist\netiologue\netiology\netiophyllin\netioporphyrin\netiotropic\netiotropically\netiquette\netiquettical\netna\nEtnean\nEtonian\nEtrurian\nEtruscan\nEtruscologist\nEtruscology\nEtta\nEttarre\nettle\netua\netude\netui\netym\netymic\netymography\netymologer\netymologic\netymological\netymologically\netymologicon\netymologist\netymologization\netymologize\netymology\netymon\netymonic\netypic\netypical\netypically\neu\nEuahlayi\neuangiotic\nEuascomycetes\neuaster\nEubacteriales\neubacterium\nEubasidii\nEuboean\nEuboic\nEubranchipus\neucaine\neucairite\neucalypt\neucalypteol\neucalyptian\neucalyptic\neucalyptography\neucalyptol\neucalyptole\nEucalyptus\neucalyptus\nEucarida\neucatropine\neucephalous\nEucharis\nEucharist\neucharistial\neucharistic\neucharistical\nEucharistically\neucharistically\neucharistize\nEucharitidae\nEuchite\nEuchlaena\neuchlorhydria\neuchloric\neuchlorine\nEuchlorophyceae\neuchological\neuchologion\neuchology\nEuchorda\neuchre\neuchred\neuchroic\neuchroite\neuchromatic\neuchromatin\neuchrome\neuchromosome\neuchrone\nEucirripedia\neuclase\nEuclea\nEucleidae\nEuclid\nEuclidean\nEuclideanism\nEucnemidae\neucolite\nEucommia\nEucommiaceae\neucone\neuconic\nEuconjugatae\nEucopepoda\nEucosia\neucosmid\nEucosmidae\neucrasia\neucrasite\neucrasy\neucrite\nEucryphia\nEucryphiaceae\neucryphiaceous\neucryptite\neucrystalline\neuctical\neucyclic\neudaemon\neudaemonia\neudaemonic\neudaemonical\neudaemonics\neudaemonism\neudaemonist\neudaemonistic\neudaemonistical\neudaemonistically\neudaemonize\neudaemony\neudaimonia\neudaimonism\neudaimonist\nEudemian\nEudendrium\nEudeve\neudiagnostic\neudialyte\neudiaphoresis\neudidymite\neudiometer\neudiometric\neudiometrical\neudiometrically\neudiometry\neudipleural\nEudist\nEudora\nEudorina\nEudoxian\nEudromias\nEudyptes\nEuergetes\neuge\nEugene\neugenesic\neugenesis\neugenetic\nEugenia\neugenic\neugenical\neugenically\neugenicist\neugenics\nEugenie\neugenism\neugenist\neugenol\neugenolate\neugeny\nEuglandina\nEuglena\nEuglenaceae\nEuglenales\nEuglenida\nEuglenidae\nEuglenineae\neuglenoid\nEuglenoidina\neuglobulin\neugranitic\nEugregarinida\nEugubine\nEugubium\neuharmonic\neuhedral\neuhemerism\neuhemerist\neuhemeristic\neuhemeristically\neuhemerize\neuhyostylic\neuhyostyly\neuktolite\neulachon\nEulalia\neulalia\neulamellibranch\nEulamellibranchia\nEulamellibranchiata\nEulima\nEulimidae\neulogia\neulogic\neulogical\neulogically\neulogious\neulogism\neulogist\neulogistic\neulogistical\neulogistically\neulogium\neulogization\neulogize\neulogizer\neulogy\neulysite\neulytine\neulytite\nEumenes\neumenid\nEumenidae\nEumenidean\nEumenides\neumenorrhea\neumerism\neumeristic\neumerogenesis\neumerogenetic\neumeromorph\neumeromorphic\neumitosis\neumitotic\neumoiriety\neumoirous\nEumolpides\nEumolpus\neumorphous\neumycete\nEumycetes\neumycetic\nEunectes\nEunice\neunicid\nEunicidae\nEunomia\nEunomian\nEunomianism\neunomy\neunuch\neunuchal\neunuchism\neunuchize\neunuchoid\neunuchoidism\neunuchry\neuomphalid\nEuomphalus\neuonym\neuonymin\neuonymous\nEuonymus\neuonymy\nEuornithes\neuornithic\nEuorthoptera\neuosmite\neuouae\neupad\nEupanorthidae\nEupanorthus\neupathy\neupatoriaceous\neupatorin\nEupatorium\neupatory\neupatrid\neupatridae\neupepsia\neupepsy\neupeptic\neupepticism\neupepticity\nEuphausia\nEuphausiacea\neuphausiid\nEuphausiidae\nEuphemia\neuphemian\neuphemious\neuphemiously\neuphemism\neuphemist\neuphemistic\neuphemistical\neuphemistically\neuphemize\neuphemizer\neuphemous\neuphemy\neuphon\neuphone\neuphonetic\neuphonetics\neuphonia\neuphonic\neuphonical\neuphonically\neuphonicalness\neuphonious\neuphoniously\neuphoniousness\neuphonism\neuphonium\neuphonize\neuphonon\neuphonous\neuphony\neuphonym\nEuphorbia\nEuphorbiaceae\neuphorbiaceous\neuphorbium\neuphoria\neuphoric\neuphory\nEuphrasia\neuphrasy\nEuphratean\neuphroe\nEuphrosyne\nEuphues\neuphuism\neuphuist\neuphuistic\neuphuistical\neuphuistically\neuphuize\nEuphyllopoda\neupione\neupittonic\neuplastic\nEuplectella\nEuplexoptera\nEuplocomi\nEuploeinae\neuploid\neuploidy\neupnea\nEupolidean\nEupolyzoa\neupolyzoan\nEupomatia\nEupomatiaceae\neupractic\neupraxia\nEuprepia\nEuproctis\neupsychics\nEuptelea\nEupterotidae\neupyrchroite\neupyrene\neupyrion\nEurafric\nEurafrican\nEuraquilo\nEurasian\nEurasianism\nEurasiatic\neureka\neurhodine\neurhodol\nEurindic\nEuripidean\neuripus\neurite\nEuroaquilo\neurobin\nEuroclydon\nEuropa\nEuropasian\nEuropean\nEuropeanism\nEuropeanization\nEuropeanize\nEuropeanly\nEuropeward\neuropium\nEuropocentric\nEurus\nEuryalae\nEuryale\nEuryaleae\neuryalean\nEuryalida\neuryalidan\nEuryalus\neurybathic\neurybenthic\neurycephalic\neurycephalous\nEurycerotidae\nEuryclea\nEurydice\nEurygaea\nEurygaean\neurygnathic\neurygnathism\neurygnathous\neuryhaline\nEurylaimi\nEurylaimidae\neurylaimoid\nEurylaimus\nEurymus\neuryon\nEurypelma\nEurypharyngidae\nEurypharynx\neuryprognathous\neuryprosopic\neurypterid\nEurypterida\neurypteroid\nEurypteroidea\nEurypterus\nEurypyga\nEurypygae\nEurypygidae\neurypylous\neuryscope\nEurystheus\neurystomatous\neurythermal\neurythermic\neurythmic\neurythmical\neurythmics\neurythmy\neurytomid\nEurytomidae\nEurytus\neuryzygous\nEuscaro\nEusebian\nEuselachii\nEuskaldun\nEuskara\nEuskarian\nEuskaric\nEuskera\neusol\nEuspongia\neusporangiate\nEustace\nEustachian\neustachium\nEustathian\neustatic\nEusthenopteron\neustomatous\neustyle\nEusuchia\neusuchian\neusynchite\nEutaenia\neutannin\neutaxic\neutaxite\neutaxitic\neutaxy\neutechnic\neutechnics\neutectic\neutectoid\nEuterpe\nEuterpean\neutexia\nEuthamia\neuthanasia\neuthanasy\neuthenics\neuthenist\nEutheria\neutherian\neuthermic\nEuthycomi\neuthycomic\nEuthyneura\neuthyneural\neuthyneurous\neuthytatic\neuthytropic\neutomous\neutony\nEutopia\nEutopian\neutrophic\neutrophy\neutropic\neutropous\nEutychian\nEutychianism\neuxanthate\neuxanthic\neuxanthone\neuxenite\nEuxine\nEva\nevacuant\nevacuate\nevacuation\nevacuative\nevacuator\nevacue\nevacuee\nevadable\nevade\nevader\nevadingly\nEvadne\nevagation\nevaginable\nevaginate\nevagination\nevaluable\nevaluate\nevaluation\nevaluative\nevalue\nEvan\nevanesce\nevanescence\nevanescency\nevanescent\nevanescently\nevanescible\nevangel\nevangelary\nevangelian\nevangeliarium\nevangeliary\nevangelical\nevangelicalism\nevangelicality\nevangelically\nevangelicalness\nevangelican\nevangelicism\nevangelicity\nEvangeline\nevangelion\nevangelism\nevangelist\nevangelistarion\nevangelistarium\nevangelistary\nevangelistic\nevangelistically\nevangelistics\nevangelistship\nevangelium\nevangelization\nevangelize\nevangelizer\nEvaniidae\nevanish\nevanishment\nevanition\nevansite\nevaporability\nevaporable\nevaporate\nevaporation\nevaporative\nevaporativity\nevaporator\nevaporimeter\nevaporize\nevaporometer\nevase\nevasible\nevasion\nevasional\nevasive\nevasively\nevasiveness\nEve\neve\nEvea\nevechurr\nevection\nevectional\nEvehood\nevejar\nEveless\nevelight\nEvelina\nEveline\nevelong\nEvelyn\neven\nevenblush\nevendown\nevener\nevenfall\nevenforth\nevenglow\nevenhanded\nevenhandedly\nevenhandedness\nevening\nevenlight\nevenlong\nevenly\nevenmete\nevenminded\nevenmindedness\nevenness\nevens\nevensong\nevent\neventful\neventfully\neventfulness\neventide\neventime\neventless\neventlessly\neventlessness\neventognath\nEventognathi\neventognathous\neventration\neventual\neventuality\neventualize\neventually\neventuate\neventuation\nevenwise\nevenworthy\neveque\never\nEverard\neverbearer\neverbearing\neverbloomer\neverblooming\neverduring\nEverett\neverglade\nevergreen\nevergreenery\nevergreenite\neverlasting\neverlastingly\neverlastingness\neverliving\nevermore\nEvernia\nevernioid\neversible\neversion\neversive\neversporting\nevert\nevertebral\nEvertebrata\nevertebrate\nevertile\nevertor\neverwhich\neverwho\nevery\neverybody\neveryday\neverydayness\neveryhow\neverylike\nEveryman\neveryman\neveryness\neveryone\neverything\neverywhen\neverywhence\neverywhere\neverywhereness\neverywheres\neverywhither\nevestar\nevetide\neveweed\nevict\neviction\nevictor\nevidence\nevidencive\nevident\nevidential\nevidentially\nevidentiary\nevidently\nevidentness\nevil\nevildoer\nevilhearted\nevilly\nevilmouthed\nevilness\nevilproof\nevilsayer\nevilspeaker\nevilspeaking\nevilwishing\nevince\nevincement\nevincible\nevincibly\nevincingly\nevincive\nevirate\neviration\neviscerate\nevisceration\nevisite\nevitable\nevitate\nevitation\nevittate\nevocable\nevocate\nevocation\nevocative\nevocatively\nevocator\nevocatory\nevocatrix\nEvodia\nevoe\nevoke\nevoker\nevolute\nevolution\nevolutional\nevolutionally\nevolutionary\nevolutionism\nevolutionist\nevolutionize\nevolutive\nevolutoid\nevolvable\nevolve\nevolvement\nevolvent\nevolver\nEvonymus\nevovae\nevulgate\nevulgation\nevulse\nevulsion\nevzone\newder\nEwe\newe\newelease\newer\newerer\newery\newry\nex\nexacerbate\nexacerbation\nexacerbescence\nexacerbescent\nexact\nexactable\nexacter\nexacting\nexactingly\nexactingness\nexaction\nexactitude\nexactive\nexactiveness\nexactly\nexactment\nexactness\nexactor\nexactress\nexadversum\nexaggerate\nexaggerated\nexaggeratedly\nexaggerating\nexaggeratingly\nexaggeration\nexaggerative\nexaggeratively\nexaggerativeness\nexaggerator\nexaggeratory\nexagitate\nexagitation\nexairesis\nexalate\nexalbuminose\nexalbuminous\nexallotriote\nexalt\nexaltation\nexaltative\nexalted\nexaltedly\nexaltedness\nexalter\nexam\nexamen\nexaminability\nexaminable\nexaminant\nexaminate\nexamination\nexaminational\nexaminationism\nexaminationist\nexaminative\nexaminator\nexaminatorial\nexaminatory\nexamine\nexaminee\nexaminer\nexaminership\nexamining\nexaminingly\nexample\nexampleless\nexampleship\nexanimate\nexanimation\nexanthem\nexanthema\nexanthematic\nexanthematous\nexappendiculate\nexarate\nexaration\nexarch\nexarchal\nexarchate\nexarchateship\nExarchic\nExarchist\nexarchist\nexarchy\nexareolate\nexarillate\nexaristate\nexarteritis\nexarticulate\nexarticulation\nexasperate\nexasperated\nexasperatedly\nexasperater\nexasperating\nexasperatingly\nexasperation\nexasperative\nexaspidean\nExaudi\nexaugurate\nexauguration\nexcalate\nexcalation\nexcalcarate\nexcalceate\nexcalceation\nExcalibur\nexcamb\nexcamber\nexcambion\nexcandescence\nexcandescency\nexcandescent\nexcantation\nexcarnate\nexcarnation\nexcathedral\nexcaudate\nexcavate\nexcavation\nexcavationist\nexcavator\nexcavatorial\nexcavatory\nexcave\nexcecate\nexcecation\nexcedent\nexceed\nexceeder\nexceeding\nexceedingly\nexceedingness\nexcel\nexcelente\nexcellence\nexcellency\nexcellent\nexcellently\nexcelsin\nExcelsior\nexcelsior\nexcelsitude\nexcentral\nexcentric\nexcentrical\nexcentricity\nexcept\nexceptant\nexcepting\nexception\nexceptionable\nexceptionableness\nexceptionably\nexceptional\nexceptionality\nexceptionally\nexceptionalness\nexceptionary\nexceptionless\nexceptious\nexceptiousness\nexceptive\nexceptively\nexceptiveness\nexceptor\nexcerebration\nexcerpt\nexcerptible\nexcerption\nexcerptive\nexcerptor\nexcess\nexcessive\nexcessively\nexcessiveness\nexcessman\nexchange\nexchangeability\nexchangeable\nexchangeably\nexchanger\nExchangite\nExchequer\nexchequer\nexcide\nexcipient\nexciple\nExcipulaceae\nexcipular\nexcipule\nexcipuliform\nexcipulum\nexcircle\nexcisable\nexcise\nexciseman\nexcisemanship\nexcision\nexcisor\nexcitability\nexcitable\nexcitableness\nexcitancy\nexcitant\nexcitation\nexcitative\nexcitator\nexcitatory\nexcite\nexcited\nexcitedly\nexcitedness\nexcitement\nexciter\nexciting\nexcitingly\nexcitive\nexcitoglandular\nexcitometabolic\nexcitomotion\nexcitomotor\nexcitomotory\nexcitomuscular\nexcitonutrient\nexcitor\nexcitory\nexcitosecretory\nexcitovascular\nexclaim\nexclaimer\nexclaiming\nexclaimingly\nexclamation\nexclamational\nexclamative\nexclamatively\nexclamatorily\nexclamatory\nexclave\nexclosure\nexcludable\nexclude\nexcluder\nexcluding\nexcludingly\nexclusion\nexclusionary\nexclusioner\nexclusionism\nexclusionist\nexclusive\nexclusively\nexclusiveness\nexclusivism\nexclusivist\nexclusivity\nexclusory\nExcoecaria\nexcogitable\nexcogitate\nexcogitation\nexcogitative\nexcogitator\nexcommunicable\nexcommunicant\nexcommunicate\nexcommunication\nexcommunicative\nexcommunicator\nexcommunicatory\nexconjugant\nexcoriable\nexcoriate\nexcoriation\nexcoriator\nexcorticate\nexcortication\nexcrement\nexcremental\nexcrementary\nexcrementitial\nexcrementitious\nexcrementitiously\nexcrementitiousness\nexcrementive\nexcresce\nexcrescence\nexcrescency\nexcrescent\nexcrescential\nexcreta\nexcretal\nexcrete\nexcreter\nexcretes\nexcretion\nexcretionary\nexcretitious\nexcretive\nexcretory\nexcriminate\nexcruciable\nexcruciate\nexcruciating\nexcruciatingly\nexcruciation\nexcruciator\nexcubant\nexcudate\nexculpable\nexculpate\nexculpation\nexculpative\nexculpatorily\nexculpatory\nexcurrent\nexcurse\nexcursion\nexcursional\nexcursionary\nexcursioner\nexcursionism\nexcursionist\nexcursionize\nexcursive\nexcursively\nexcursiveness\nexcursory\nexcursus\nexcurvate\nexcurvated\nexcurvation\nexcurvature\nexcurved\nexcusability\nexcusable\nexcusableness\nexcusably\nexcusal\nexcusative\nexcusator\nexcusatory\nexcuse\nexcuseful\nexcusefully\nexcuseless\nexcuser\nexcusing\nexcusingly\nexcusive\nexcuss\nexcyst\nexcystation\nexcysted\nexcystment\nexdelicto\nexdie\nexeat\nexecrable\nexecrableness\nexecrably\nexecrate\nexecration\nexecrative\nexecratively\nexecrator\nexecratory\nexecutable\nexecutancy\nexecutant\nexecute\nexecuted\nexecuter\nexecution\nexecutional\nexecutioneering\nexecutioner\nexecutioneress\nexecutionist\nexecutive\nexecutively\nexecutiveness\nexecutiveship\nexecutor\nexecutorial\nexecutorship\nexecutory\nexecutress\nexecutrices\nexecutrix\nexecutrixship\nexecutry\nexedent\nexedra\nexegeses\nexegesis\nexegesist\nexegete\nexegetic\nexegetical\nexegetically\nexegetics\nexegetist\nexemplar\nexemplaric\nexemplarily\nexemplariness\nexemplarism\nexemplarity\nexemplary\nexemplifiable\nexemplification\nexemplificational\nexemplificative\nexemplificator\nexemplifier\nexemplify\nexempt\nexemptible\nexemptile\nexemption\nexemptionist\nexemptive\nexencephalia\nexencephalic\nexencephalous\nexencephalus\nexendospermic\nexendospermous\nexenterate\nexenteration\nexequatur\nexequial\nexequy\nexercisable\nexercise\nexerciser\nexercitant\nexercitation\nexercitor\nexercitorial\nexercitorian\nexeresis\nexergual\nexergue\nexert\nexertion\nexertionless\nexertive\nexes\nexeunt\nexfiguration\nexfigure\nexfiltration\nexflagellate\nexflagellation\nexflect\nexfodiate\nexfodiation\nexfoliate\nexfoliation\nexfoliative\nexfoliatory\nexgorgitation\nexhalable\nexhalant\nexhalation\nexhalatory\nexhale\nexhaust\nexhausted\nexhaustedly\nexhaustedness\nexhauster\nexhaustibility\nexhaustible\nexhausting\nexhaustingly\nexhaustion\nexhaustive\nexhaustively\nexhaustiveness\nexhaustless\nexhaustlessly\nexhaustlessness\nexheredate\nexheredation\nexhibit\nexhibitable\nexhibitant\nexhibiter\nexhibition\nexhibitional\nexhibitioner\nexhibitionism\nexhibitionist\nexhibitionistic\nexhibitionize\nexhibitive\nexhibitively\nexhibitor\nexhibitorial\nexhibitorship\nexhibitory\nexhilarant\nexhilarate\nexhilarating\nexhilaratingly\nexhilaration\nexhilarative\nexhilarator\nexhilaratory\nexhort\nexhortation\nexhortative\nexhortatively\nexhortator\nexhortatory\nexhorter\nexhortingly\nexhumate\nexhumation\nexhumator\nexhumatory\nexhume\nexhumer\nexigence\nexigency\nexigent\nexigenter\nexigently\nexigible\nexiguity\nexiguous\nexiguously\nexiguousness\nexilarch\nexilarchate\nexile\nexiledom\nexilement\nexiler\nexilian\nexilic\nexility\neximious\neximiously\neximiousness\nexinanite\nexinanition\nexindusiate\nexinguinal\nexist\nexistability\nexistence\nexistent\nexistential\nexistentialism\nexistentialist\nexistentialistic\nexistentialize\nexistentially\nexistently\nexister\nexistibility\nexistible\nexistlessness\nexit\nexite\nexition\nexitus\nexlex\nexmeridian\nExmoor\nexoarteritis\nExoascaceae\nexoascaceous\nExoascales\nExoascus\nExobasidiaceae\nExobasidiales\nExobasidium\nexocannibalism\nexocardia\nexocardiac\nexocardial\nexocarp\nexocataphoria\nexoccipital\nexocentric\nExochorda\nexochorion\nexoclinal\nexocline\nexocoelar\nexocoele\nexocoelic\nexocoelom\nExocoetidae\nExocoetus\nexocolitis\nexocone\nexocrine\nexoculate\nexoculation\nexocyclic\nExocyclica\nExocycloida\nexode\nexoderm\nexodermis\nexodic\nexodist\nexodontia\nexodontist\nexodos\nexodromic\nexodromy\nexodus\nexody\nexoenzyme\nexoenzymic\nexoerythrocytic\nexogamic\nexogamous\nexogamy\nexogastric\nexogastrically\nexogastritis\nexogen\nExogenae\nexogenetic\nexogenic\nexogenous\nexogenously\nexogeny\nexognathion\nexognathite\nExogonium\nExogyra\nexolemma\nexometritis\nexomion\nexomis\nexomologesis\nexomorphic\nexomorphism\nexomphalos\nexomphalous\nexomphalus\nExon\nexon\nexonarthex\nexoner\nexonerate\nexoneration\nexonerative\nexonerator\nexoneural\nExonian\nexonship\nexopathic\nexoperidium\nexophagous\nexophagy\nexophasia\nexophasic\nexophoria\nexophoric\nexophthalmic\nexophthalmos\nexoplasm\nexopod\nexopodite\nexopoditic\nExopterygota\nexopterygotic\nexopterygotism\nexopterygotous\nexorability\nexorable\nexorableness\nexorbital\nexorbitance\nexorbitancy\nexorbitant\nexorbitantly\nexorbitate\nexorbitation\nexorcisation\nexorcise\nexorcisement\nexorciser\nexorcism\nexorcismal\nexorcisory\nexorcist\nexorcistic\nexorcistical\nexordia\nexordial\nexordium\nexordize\nexorganic\nexorhason\nexormia\nexornation\nexosepsis\nexoskeletal\nexoskeleton\nexosmic\nexosmose\nexosmosis\nexosmotic\nexosperm\nexosporal\nexospore\nexosporium\nexosporous\nExostema\nexostome\nexostosed\nexostosis\nexostotic\nexostra\nexostracism\nexostracize\nexoteric\nexoterical\nexoterically\nexotericism\nexoterics\nexotheca\nexothecal\nexothecate\nexothecium\nexothermal\nexothermic\nexothermous\nexotic\nexotically\nexoticalness\nexoticism\nexoticist\nexoticity\nexoticness\nexotism\nexotospore\nexotoxic\nexotoxin\nexotropia\nexotropic\nexotropism\nexpalpate\nexpand\nexpanded\nexpandedly\nexpandedness\nexpander\nexpanding\nexpandingly\nexpanse\nexpansibility\nexpansible\nexpansibleness\nexpansibly\nexpansile\nexpansion\nexpansional\nexpansionary\nexpansionism\nexpansionist\nexpansive\nexpansively\nexpansiveness\nexpansivity\nexpansometer\nexpansure\nexpatiate\nexpatiater\nexpatiatingly\nexpatiation\nexpatiative\nexpatiator\nexpatiatory\nexpatriate\nexpatriation\nexpect\nexpectable\nexpectance\nexpectancy\nexpectant\nexpectantly\nexpectation\nexpectative\nexpectedly\nexpecter\nexpectingly\nexpective\nexpectorant\nexpectorate\nexpectoration\nexpectorative\nexpectorator\nexpede\nexpediate\nexpedience\nexpediency\nexpedient\nexpediential\nexpedientially\nexpedientist\nexpediently\nexpeditate\nexpeditation\nexpedite\nexpedited\nexpeditely\nexpediteness\nexpediter\nexpedition\nexpeditionary\nexpeditionist\nexpeditious\nexpeditiously\nexpeditiousness\nexpel\nexpellable\nexpellant\nexpellee\nexpeller\nexpend\nexpendability\nexpendable\nexpender\nexpendible\nexpenditor\nexpenditrix\nexpenditure\nexpense\nexpenseful\nexpensefully\nexpensefulness\nexpenseless\nexpensilation\nexpensive\nexpensively\nexpensiveness\nexpenthesis\nexpergefacient\nexpergefaction\nexperience\nexperienceable\nexperienced\nexperienceless\nexperiencer\nexperiencible\nexperient\nexperiential\nexperientialism\nexperientialist\nexperientially\nexperiment\nexperimental\nexperimentalism\nexperimentalist\nexperimentalize\nexperimentally\nexperimentarian\nexperimentation\nexperimentative\nexperimentator\nexperimented\nexperimentee\nexperimenter\nexperimentist\nexperimentize\nexperimently\nexpert\nexpertism\nexpertize\nexpertly\nexpertness\nexpertship\nexpiable\nexpiate\nexpiation\nexpiational\nexpiatist\nexpiative\nexpiator\nexpiatoriness\nexpiatory\nexpilate\nexpilation\nexpilator\nexpirable\nexpirant\nexpirate\nexpiration\nexpirator\nexpiratory\nexpire\nexpiree\nexpirer\nexpiring\nexpiringly\nexpiry\nexpiscate\nexpiscation\nexpiscator\nexpiscatory\nexplain\nexplainable\nexplainer\nexplaining\nexplainingly\nexplanate\nexplanation\nexplanative\nexplanatively\nexplanator\nexplanatorily\nexplanatoriness\nexplanatory\nexplant\nexplantation\nexplement\nexplemental\nexpletive\nexpletively\nexpletiveness\nexpletory\nexplicable\nexplicableness\nexplicate\nexplication\nexplicative\nexplicatively\nexplicator\nexplicatory\nexplicit\nexplicitly\nexplicitness\nexplodable\nexplode\nexploded\nexplodent\nexploder\nexploit\nexploitable\nexploitage\nexploitation\nexploitationist\nexploitative\nexploiter\nexploitive\nexploiture\nexplorable\nexploration\nexplorational\nexplorative\nexploratively\nexplorativeness\nexplorator\nexploratory\nexplore\nexplorement\nexplorer\nexploring\nexploringly\nexplosibility\nexplosible\nexplosion\nexplosionist\nexplosive\nexplosively\nexplosiveness\nexpone\nexponence\nexponency\nexponent\nexponential\nexponentially\nexponentiation\nexponible\nexport\nexportability\nexportable\nexportation\nexporter\nexposal\nexpose\nexposed\nexposedness\nexposer\nexposit\nexposition\nexpositional\nexpositionary\nexpositive\nexpositively\nexpositor\nexpositorial\nexpositorially\nexpositorily\nexpositoriness\nexpository\nexpositress\nexpostulate\nexpostulating\nexpostulatingly\nexpostulation\nexpostulative\nexpostulatively\nexpostulator\nexpostulatory\nexposure\nexpound\nexpoundable\nexpounder\nexpress\nexpressable\nexpressage\nexpressed\nexpresser\nexpressibility\nexpressible\nexpressibly\nexpression\nexpressionable\nexpressional\nexpressionful\nexpressionism\nexpressionist\nexpressionistic\nexpressionless\nexpressionlessly\nexpressionlessness\nexpressive\nexpressively\nexpressiveness\nexpressivism\nexpressivity\nexpressless\nexpressly\nexpressman\nexpressness\nexpressway\nexprimable\nexprobrate\nexprobration\nexprobratory\nexpromission\nexpromissor\nexpropriable\nexpropriate\nexpropriation\nexpropriator\nexpugn\nexpugnable\nexpuition\nexpulsatory\nexpulse\nexpulser\nexpulsion\nexpulsionist\nexpulsive\nexpulsory\nexpunction\nexpunge\nexpungeable\nexpungement\nexpunger\nexpurgate\nexpurgation\nexpurgative\nexpurgator\nexpurgatorial\nexpurgatory\nexpurge\nexquisite\nexquisitely\nexquisiteness\nexquisitism\nexquisitively\nexradio\nexradius\nexrupeal\nexsanguinate\nexsanguination\nexsanguine\nexsanguineous\nexsanguinity\nexsanguinous\nexsanguious\nexscind\nexscissor\nexscriptural\nexsculptate\nexscutellate\nexsect\nexsectile\nexsection\nexsector\nexsequatur\nexsert\nexserted\nexsertile\nexsertion\nexship\nexsibilate\nexsibilation\nexsiccant\nexsiccatae\nexsiccate\nexsiccation\nexsiccative\nexsiccator\nexsiliency\nexsomatic\nexspuition\nexsputory\nexstipulate\nexstrophy\nexsuccous\nexsuction\nexsufflate\nexsufflation\nexsufflicate\nexsurge\nexsurgent\nextant\nextemporal\nextemporally\nextemporalness\nextemporaneity\nextemporaneous\nextemporaneously\nextemporaneousness\nextemporarily\nextemporariness\nextemporary\nextempore\nextemporization\nextemporize\nextemporizer\nextend\nextended\nextendedly\nextendedness\nextender\nextendibility\nextendible\nextending\nextense\nextensibility\nextensible\nextensibleness\nextensile\nextensimeter\nextension\nextensional\nextensionist\nextensity\nextensive\nextensively\nextensiveness\nextensometer\nextensor\nextensory\nextensum\nextent\nextenuate\nextenuating\nextenuatingly\nextenuation\nextenuative\nextenuator\nextenuatory\nexter\nexterior\nexteriorate\nexterioration\nexteriority\nexteriorization\nexteriorize\nexteriorly\nexteriorness\nexterminable\nexterminate\nextermination\nexterminative\nexterminator\nexterminatory\nexterminatress\nexterminatrix\nexterminist\nextern\nexternal\nexternalism\nexternalist\nexternalistic\nexternality\nexternalization\nexternalize\nexternally\nexternals\nexternate\nexternation\nexterne\nexternity\nexternization\nexternize\nexternomedian\nexternum\nexteroceptist\nexteroceptive\nexteroceptor\nexterraneous\nexterrestrial\nexterritorial\nexterritoriality\nexterritorialize\nexterritorially\nextima\nextinct\nextinction\nextinctionist\nextinctive\nextinctor\nextine\nextinguish\nextinguishable\nextinguishant\nextinguished\nextinguisher\nextinguishment\nextipulate\nextirpate\nextirpation\nextirpationist\nextirpative\nextirpator\nextirpatory\nextispex\nextispicious\nextispicy\nextogenous\nextol\nextoll\nextollation\nextoller\nextollingly\nextollment\nextolment\nextoolitic\nextorsive\nextorsively\nextort\nextorter\nextortion\nextortionary\nextortionate\nextortionately\nextortioner\nextortionist\nextortive\nextra\nextrabold\nextrabranchial\nextrabronchial\nextrabuccal\nextrabulbar\nextrabureau\nextraburghal\nextracalendar\nextracalicular\nextracanonical\nextracapsular\nextracardial\nextracarpal\nextracathedral\nextracellular\nextracellularly\nextracerebral\nextracivic\nextracivically\nextraclassroom\nextraclaustral\nextracloacal\nextracollegiate\nextracolumella\nextraconscious\nextraconstellated\nextraconstitutional\nextracorporeal\nextracorpuscular\nextracosmic\nextracosmical\nextracostal\nextracranial\nextract\nextractable\nextractant\nextracted\nextractible\nextractiform\nextraction\nextractive\nextractor\nextractorship\nextracultural\nextracurial\nextracurricular\nextracurriculum\nextracutaneous\nextracystic\nextradecretal\nextradialectal\nextraditable\nextradite\nextradition\nextradomestic\nextrados\nextradosed\nextradotal\nextraduction\nextradural\nextraembryonic\nextraenteric\nextraepiphyseal\nextraequilibrium\nextraessential\nextraessentially\nextrafascicular\nextrafloral\nextrafocal\nextrafoliaceous\nextraforaneous\nextraformal\nextragalactic\nextragastric\nextrait\nextrajudicial\nextrajudicially\nextralateral\nextralite\nextrality\nextramarginal\nextramatrical\nextramedullary\nextramental\nextrameridian\nextrameridional\nextrametaphysical\nextrametrical\nextrametropolitan\nextramodal\nextramolecular\nextramorainal\nextramorainic\nextramoral\nextramoralist\nextramundane\nextramural\nextramurally\nextramusical\nextranational\nextranatural\nextranean\nextraneity\nextraneous\nextraneously\nextraneousness\nextranidal\nextranormal\nextranuclear\nextraocular\nextraofficial\nextraoral\nextraorbital\nextraorbitally\nextraordinarily\nextraordinariness\nextraordinary\nextraorganismal\nextraovate\nextraovular\nextraparenchymal\nextraparental\nextraparietal\nextraparliamentary\nextraparochial\nextraparochially\nextrapatriarchal\nextrapelvic\nextraperineal\nextraperiodic\nextraperiosteal\nextraperitoneal\nextraphenomenal\nextraphysical\nextraphysiological\nextrapituitary\nextraplacental\nextraplanetary\nextrapleural\nextrapoetical\nextrapolar\nextrapolate\nextrapolation\nextrapolative\nextrapolator\nextrapopular\nextraprofessional\nextraprostatic\nextraprovincial\nextrapulmonary\nextrapyramidal\nextraquiz\nextrared\nextraregarding\nextraregular\nextraregularly\nextrarenal\nextraretinal\nextrarhythmical\nextrasacerdotal\nextrascholastic\nextraschool\nextrascientific\nextrascriptural\nextrascripturality\nextrasensible\nextrasensory\nextrasensuous\nextraserous\nextrasocial\nextrasolar\nextrasomatic\nextraspectral\nextraspherical\nextraspinal\nextrastapedial\nextrastate\nextrasterile\nextrastomachal\nextrasyllabic\nextrasyllogistic\nextrasyphilitic\nextrasystole\nextrasystolic\nextratabular\nextratarsal\nextratellurian\nextratelluric\nextratemporal\nextratension\nextratensive\nextraterrene\nextraterrestrial\nextraterritorial\nextraterritoriality\nextraterritorially\nextrathecal\nextratheistic\nextrathermodynamic\nextrathoracic\nextratorrid\nextratracheal\nextratribal\nextratropical\nextratubal\nextratympanic\nextrauterine\nextravagance\nextravagancy\nextravagant\nExtravagantes\nextravagantly\nextravagantness\nextravaganza\nextravagate\nextravaginal\nextravasate\nextravasation\nextravascular\nextraventricular\nextraversion\nextravert\nextravillar\nextraviolet\nextravisceral\nextrazodiacal\nextreme\nextremeless\nextremely\nextremeness\nextremism\nextremist\nextremistic\nextremital\nextremity\nextricable\nextricably\nextricate\nextricated\nextrication\nextrinsic\nextrinsical\nextrinsicality\nextrinsically\nextrinsicalness\nextrinsicate\nextrinsication\nextroitive\nextropical\nextrorsal\nextrorse\nextrorsely\nextrospect\nextrospection\nextrospective\nextroversion\nextroversive\nextrovert\nextrovertish\nextrude\nextruder\nextruding\nextrusile\nextrusion\nextrusive\nextrusory\nextubate\nextubation\nextumescence\nextund\nextusion\nexuberance\nexuberancy\nexuberant\nexuberantly\nexuberantness\nexuberate\nexuberation\nexudate\nexudation\nexudative\nexude\nexudence\nexulcerate\nexulceration\nexulcerative\nexulceratory\nexult\nexultance\nexultancy\nexultant\nexultantly\nexultation\nexultet\nexultingly\nexululate\nexumbral\nexumbrella\nexumbrellar\nexundance\nexundancy\nexundate\nexundation\nexuviability\nexuviable\nexuviae\nexuvial\nexuviate\nexuviation\nexzodiacal\ney\neyah\neyalet\neyas\neye\neyeball\neyebalm\neyebar\neyebeam\neyeberry\neyeblink\neyebolt\neyebree\neyebridled\neyebright\neyebrow\neyecup\neyed\neyedness\neyedot\neyedrop\neyeflap\neyeful\neyeglance\neyeglass\neyehole\nEyeish\neyelash\neyeless\neyelessness\neyelet\neyeleteer\neyeletter\neyelid\neyelight\neyelike\neyeline\neyemark\neyen\neyepiece\neyepit\neyepoint\neyer\neyereach\neyeroot\neyesalve\neyeseed\neyeservant\neyeserver\neyeservice\neyeshade\neyeshield\neyeshot\neyesight\neyesome\neyesore\neyespot\neyestalk\neyestone\neyestrain\neyestring\neyetooth\neyewaiter\neyewash\neyewater\neyewear\neyewink\neyewinker\neyewitness\neyewort\neyey\neying\neyn\neyne\neyot\neyoty\neyra\neyre\neyrie\neyrir\nezba\nEzekiel\nEzra\nF\nf\nfa\nFaba\nFabaceae\nfabaceous\nfabella\nfabes\nFabian\nFabianism\nFabianist\nfabiform\nfable\nfabled\nfabledom\nfableist\nfableland\nfablemaker\nfablemonger\nfablemongering\nfabler\nfabliau\nfabling\nFabraea\nfabric\nfabricant\nfabricate\nfabrication\nfabricative\nfabricator\nfabricatress\nFabrikoid\nfabrikoid\nFabronia\nFabroniaceae\nfabular\nfabulist\nfabulosity\nfabulous\nfabulously\nfabulousness\nfaburden\nfacadal\nfacade\nface\nfaceable\nfacebread\nfacecloth\nfaced\nfaceless\nfacellite\nfacemaker\nfacemaking\nfaceman\nfacemark\nfacepiece\nfaceplate\nfacer\nfacet\nfacete\nfaceted\nfacetely\nfaceteness\nfacetiae\nfacetiation\nfacetious\nfacetiously\nfacetiousness\nfacewise\nfacework\nfacia\nfacial\nfacially\nfaciation\nfaciend\nfacient\nfacies\nfacile\nfacilely\nfacileness\nfacilitate\nfacilitation\nfacilitative\nfacilitator\nfacility\nfacing\nfacingly\nfacinorous\nfacinorousness\nfaciobrachial\nfaciocervical\nfaciolingual\nfacioplegia\nfacioscapulohumeral\nfack\nfackeltanz\nfackings\nfackins\nfacks\nfacsimile\nfacsimilist\nfacsimilize\nfact\nfactable\nfactabling\nfactful\nFactice\nfacticide\nfaction\nfactional\nfactionalism\nfactionary\nfactioneer\nfactionist\nfactionistism\nfactious\nfactiously\nfactiousness\nfactish\nfactitial\nfactitious\nfactitiously\nfactitive\nfactitively\nfactitude\nfactive\nfactor\nfactorability\nfactorable\nfactorage\nfactordom\nfactoress\nfactorial\nfactorially\nfactorist\nfactorization\nfactorize\nfactorship\nfactory\nfactoryship\nfactotum\nfactrix\nfactual\nfactuality\nfactually\nfactualness\nfactum\nfacture\nfacty\nfacula\nfacular\nfaculous\nfacultate\nfacultative\nfacultatively\nfacultied\nfacultize\nfaculty\nfacund\nfacy\nfad\nfadable\nfaddiness\nfaddish\nfaddishness\nfaddism\nfaddist\nfaddle\nfaddy\nfade\nfadeaway\nfaded\nfadedly\nfadedness\nfadeless\nfaden\nfader\nfadge\nfading\nfadingly\nfadingness\nfadmonger\nfadmongering\nfadmongery\nfadridden\nfady\nfae\nfaerie\nFaeroe\nfaery\nfaeryland\nfaff\nfaffle\nfaffy\nfag\nFagaceae\nfagaceous\nfagald\nFagales\nFagara\nfage\nFagelia\nfager\nfagger\nfaggery\nfagging\nfaggingly\nfagine\nfagopyrism\nfagopyrismus\nFagopyrum\nfagot\nfagoter\nfagoting\nfagottino\nfagottist\nfagoty\nFagus\nfaham\nfahlerz\nfahlore\nfahlunite\nFahrenheit\nfaience\nfail\nfailing\nfailingly\nfailingness\nfaille\nfailure\nfain\nfainaigue\nfainaiguer\nfaineance\nfaineancy\nfaineant\nfaineantism\nfainly\nfainness\nfains\nfaint\nfainter\nfaintful\nfaintheart\nfainthearted\nfaintheartedly\nfaintheartedness\nfainting\nfaintingly\nfaintish\nfaintishness\nfaintly\nfaintness\nfaints\nfainty\nfaipule\nfair\nfairer\nfairfieldite\nfairgoer\nfairgoing\nfairgrass\nfairground\nfairily\nfairing\nfairish\nfairishly\nfairkeeper\nfairlike\nfairling\nfairly\nfairm\nfairness\nfairstead\nfairtime\nfairwater\nfairway\nfairy\nfairydom\nfairyfolk\nfairyhood\nfairyish\nfairyism\nfairyland\nfairylike\nfairyologist\nfairyology\nfairyship\nfaith\nfaithbreach\nfaithbreaker\nfaithful\nfaithfully\nfaithfulness\nfaithless\nfaithlessly\nfaithlessness\nfaithwise\nfaithworthiness\nfaithworthy\nfaitour\nfake\nfakement\nfaker\nfakery\nfakiness\nfakir\nfakirism\nFakofo\nfaky\nfalanaka\nFalange\nFalangism\nFalangist\nFalasha\nfalbala\nfalcade\nFalcata\nfalcate\nfalcated\nfalcation\nfalcer\nfalces\nfalchion\nfalcial\nFalcidian\nfalciform\nFalcinellus\nfalciparum\nFalco\nfalcon\nfalconbill\nfalconelle\nfalconer\nFalcones\nfalconet\nFalconidae\nFalconiformes\nFalconinae\nfalconine\nfalconlike\nfalconoid\nfalconry\nfalcopern\nfalcula\nfalcular\nfalculate\nFalcunculus\nfaldage\nfalderal\nfaldfee\nfaldstool\nFalerian\nFalernian\nFalerno\nFaliscan\nFalisci\nFalkland\nfall\nfallace\nfallacious\nfallaciously\nfallaciousness\nfallacy\nfallage\nfallation\nfallaway\nfallback\nfallectomy\nfallen\nfallenness\nfaller\nfallfish\nfallibility\nfallible\nfallibleness\nfallibly\nfalling\nFallopian\nfallostomy\nfallotomy\nfallow\nfallowist\nfallowness\nfalltime\nfallway\nfally\nfalsary\nfalse\nfalsehearted\nfalseheartedly\nfalseheartedness\nfalsehood\nfalsely\nfalsen\nfalseness\nfalser\nfalsettist\nfalsetto\nfalsework\nfalsidical\nfalsie\nfalsifiable\nfalsificate\nfalsification\nfalsificator\nfalsifier\nfalsify\nfalsism\nFalstaffian\nfaltboat\nfaltche\nfalter\nfalterer\nfaltering\nfalteringly\nFalunian\nFaluns\nfalutin\nfalx\nfam\nFama\nfamatinite\nfamble\nfame\nfameflower\nfameful\nfameless\nfamelessly\nfamelessness\nFameuse\nfameworthy\nfamilia\nfamilial\nfamiliar\nfamiliarism\nfamiliarity\nfamiliarization\nfamiliarize\nfamiliarizer\nfamiliarizingly\nfamiliarly\nfamiliarness\nfamilism\nfamilist\nfamilistery\nfamilistic\nfamilistical\nfamily\nfamilyish\nfamine\nfamish\nfamishment\nfamous\nfamously\nfamousness\nfamulary\nfamulus\nFan\nfan\nfana\nfanal\nfanam\nfanatic\nfanatical\nfanatically\nfanaticalness\nfanaticism\nfanaticize\nfanback\nfanbearer\nfanciable\nfancical\nfancied\nfancier\nfanciful\nfancifully\nfancifulness\nfancify\nfanciless\nfancy\nfancymonger\nfancysick\nfancywork\nfand\nfandangle\nfandango\nfandom\nfanega\nfanegada\nfanfarade\nFanfare\nfanfare\nfanfaron\nfanfaronade\nfanfaronading\nfanflower\nfanfoot\nfang\nfanged\nfangle\nfangled\nfanglement\nfangless\nfanglet\nfanglomerate\nfangot\nfangy\nfanhouse\nfaniente\nfanion\nfanioned\nfanlight\nfanlike\nfanmaker\nfanmaking\nfanman\nfannel\nfanner\nFannia\nfannier\nfanning\nFanny\nfanon\nfant\nfantail\nfantasia\nfantasie\nfantasied\nfantasist\nfantasque\nfantassin\nfantast\nfantastic\nfantastical\nfantasticality\nfantastically\nfantasticalness\nfantasticate\nfantastication\nfantasticism\nfantasticly\nfantasticness\nfantastico\nfantastry\nfantasy\nFanti\nfantigue\nfantoccini\nfantocine\nfantod\nfantoddish\nFanwe\nfanweed\nfanwise\nfanwork\nfanwort\nfanwright\nFany\nfaon\nFapesmo\nfar\nfarad\nfaradaic\nfaraday\nfaradic\nfaradism\nfaradization\nfaradize\nfaradizer\nfaradmeter\nfaradocontractility\nfaradomuscular\nfaradonervous\nfaradopalpation\nfarandole\nfarasula\nfaraway\nfarawayness\nfarce\nfarcelike\nfarcer\nfarcetta\nfarcial\nfarcialize\nfarcical\nfarcicality\nfarcically\nfarcicalness\nfarcied\nfarcify\nfarcing\nfarcinoma\nfarcist\nfarctate\nfarcy\nfarde\nfardel\nfardelet\nfardh\nfardo\nfare\nfarer\nfarewell\nfarfara\nfarfel\nfarfetched\nfarfetchedness\nFarfugium\nfargoing\nfargood\nfarina\nfarinaceous\nfarinaceously\nfaring\nfarinometer\nfarinose\nfarinosely\nfarinulent\nFarish\nfarish\nfarkleberry\nfarl\nfarleu\nfarm\nfarmable\nfarmage\nfarmer\nfarmeress\nfarmerette\nfarmerlike\nfarmership\nfarmery\nfarmhold\nfarmhouse\nfarmhousey\nfarming\nfarmost\nfarmplace\nfarmstead\nfarmsteading\nfarmtown\nfarmy\nfarmyard\nfarmyardy\nfarnesol\nfarness\nFarnovian\nfaro\nFaroeish\nFaroese\nfarolito\nFarouk\nfarraginous\nfarrago\nfarrand\nfarrandly\nfarrantly\nfarreate\nfarreation\nfarrier\nfarrierlike\nfarriery\nfarrisite\nfarrow\nfarruca\nfarsalah\nfarse\nfarseeing\nfarseeingness\nfarseer\nfarset\nFarsi\nfarsighted\nfarsightedly\nfarsightedness\nfarther\nfarthermost\nfarthest\nfarthing\nfarthingale\nfarthingless\nfarweltered\nfasces\nfascet\nfascia\nfascial\nfasciate\nfasciated\nfasciately\nfasciation\nfascicle\nfascicled\nfascicular\nfascicularly\nfasciculate\nfasciculated\nfasciculately\nfasciculation\nfascicule\nfasciculus\nfascinate\nfascinated\nfascinatedly\nfascinating\nfascinatingly\nfascination\nfascinative\nfascinator\nfascinatress\nfascine\nfascinery\nFascio\nfasciodesis\nfasciola\nfasciolar\nFasciolaria\nFasciolariidae\nfasciole\nfasciolet\nfascioliasis\nFasciolidae\nfascioloid\nfascioplasty\nfasciotomy\nfascis\nfascism\nfascist\nFascista\nFascisti\nfascisticization\nfascisticize\nfascistization\nfascistize\nfash\nfasher\nfashery\nfashion\nfashionability\nfashionable\nfashionableness\nfashionably\nfashioned\nfashioner\nfashionist\nfashionize\nfashionless\nfashionmonger\nfashionmonging\nfashious\nfashiousness\nfasibitikite\nfasinite\nfass\nfassalite\nfast\nfasten\nfastener\nfastening\nfaster\nfastgoing\nfasthold\nfastidiosity\nfastidious\nfastidiously\nfastidiousness\nfastidium\nfastigate\nfastigated\nfastigiate\nfastigium\nfasting\nfastingly\nfastish\nfastland\nfastness\nfastuous\nfastuously\nfastuousness\nfastus\nfat\nFatagaga\nfatal\nfatalism\nfatalist\nfatalistic\nfatalistically\nfatality\nfatalize\nfatally\nfatalness\nfatbird\nfatbrained\nfate\nfated\nfateful\nfatefully\nfatefulness\nfatelike\nfathead\nfatheaded\nfatheadedness\nfathearted\nfather\nfathercraft\nfathered\nfatherhood\nfatherland\nfatherlandish\nfatherless\nfatherlessness\nfatherlike\nfatherliness\nfatherling\nfatherly\nfathership\nfathmur\nfathom\nfathomable\nfathomage\nfathomer\nFathometer\nfathomless\nfathomlessly\nfathomlessness\nfatidic\nfatidical\nfatidically\nfatiferous\nfatigability\nfatigable\nfatigableness\nfatigue\nfatigueless\nfatiguesome\nfatiguing\nfatiguingly\nfatiha\nfatil\nfatiloquent\nFatima\nFatimid\nfatiscence\nfatiscent\nfatless\nfatling\nfatly\nfatness\nfatsia\nfattable\nfatten\nfattenable\nfattener\nfatter\nfattily\nfattiness\nfattish\nfattishness\nfattrels\nfatty\nfatuism\nfatuitous\nfatuitousness\nfatuity\nfatuoid\nfatuous\nfatuously\nfatuousness\nfatwood\nfaucal\nfaucalize\nfauces\nfaucet\nfauchard\nfaucial\nfaucitis\nfaucre\nfaugh\nfaujasite\nfauld\nFaulkland\nfault\nfaultage\nfaulter\nfaultfind\nfaultfinder\nfaultfinding\nfaultful\nfaultfully\nfaultily\nfaultiness\nfaulting\nfaultless\nfaultlessly\nfaultlessness\nfaultsman\nfaulty\nfaun\nFauna\nfaunal\nfaunally\nfaunated\nfaunish\nfaunist\nfaunistic\nfaunistical\nfaunistically\nfaunlike\nfaunological\nfaunology\nfaunule\nfause\nfaussebraie\nfaussebrayed\nfaust\nFaustian\nfauterer\nfautor\nfautorship\nfauve\nFauvism\nFauvist\nfavaginous\nfavella\nfavellidium\nfavelloid\nFaventine\nfaveolate\nfaveolus\nfaviform\nfavilla\nfavillous\nfavism\nfavissa\nfavn\nfavonian\nFavonius\nfavor\nfavorable\nfavorableness\nfavorably\nfavored\nfavoredly\nfavoredness\nfavorer\nfavoress\nfavoring\nfavoringly\nfavorite\nfavoritism\nfavorless\nfavose\nfavosely\nfavosite\nFavosites\nFavositidae\nfavositoid\nfavous\nfavus\nfawn\nfawner\nfawnery\nfawning\nfawningly\nfawningness\nfawnlike\nfawnskin\nfawny\nFay\nfay\nFayal\nfayalite\nFayettism\nfayles\nFayumic\nfaze\nfazenda\nfe\nfeaberry\nfeague\nfeak\nfeal\nfealty\nfear\nfearable\nfeared\nfearedly\nfearedness\nfearer\nfearful\nfearfully\nfearfulness\nfearingly\nfearless\nfearlessly\nfearlessness\nfearnought\nfearsome\nfearsomely\nfearsomeness\nfeasance\nfeasibility\nfeasible\nfeasibleness\nfeasibly\nfeasor\nfeast\nfeasten\nfeaster\nfeastful\nfeastfully\nfeastless\nfeat\nfeather\nfeatherback\nfeatherbed\nfeatherbedding\nfeatherbird\nfeatherbone\nfeatherbrain\nfeatherbrained\nfeatherdom\nfeathered\nfeatheredge\nfeatheredged\nfeatherer\nfeatherfew\nfeatherfoil\nfeatherhead\nfeatherheaded\nfeatheriness\nfeathering\nfeatherleaf\nfeatherless\nfeatherlessness\nfeatherlet\nfeatherlike\nfeatherman\nfeathermonger\nfeatherpate\nfeatherpated\nfeatherstitch\nfeatherstitching\nfeathertop\nfeatherway\nfeatherweed\nfeatherweight\nfeatherwing\nfeatherwise\nfeatherwood\nfeatherwork\nfeatherworker\nfeathery\nfeatliness\nfeatly\nfeatness\nfeatous\nfeatural\nfeaturally\nfeature\nfeatured\nfeatureful\nfeatureless\nfeatureliness\nfeaturely\nfeaty\nfeaze\nfeazings\nfebricant\nfebricide\nfebricity\nfebricula\nfebrifacient\nfebriferous\nfebrific\nfebrifugal\nfebrifuge\nfebrile\nfebrility\nFebronian\nFebronianism\nFebruarius\nFebruary\nfebruation\nfecal\nfecalith\nfecaloid\nfeces\nFechnerian\nfeck\nfeckful\nfeckfully\nfeckless\nfecklessly\nfecklessness\nfeckly\nfecula\nfeculence\nfeculency\nfeculent\nfecund\nfecundate\nfecundation\nfecundative\nfecundator\nfecundatory\nfecundify\nfecundity\nfecundize\nfed\nfeddan\nfederacy\nFederal\nfederal\nfederalism\nfederalist\nfederalization\nfederalize\nfederally\nfederalness\nfederate\nfederation\nfederationist\nfederatist\nfederative\nfederatively\nfederator\nFedia\nFedora\nfee\nfeeable\nfeeble\nfeeblebrained\nfeeblehearted\nfeebleheartedly\nfeebleheartedness\nfeebleness\nfeebling\nfeeblish\nfeebly\nfeed\nfeedable\nfeedback\nfeedbin\nfeedboard\nfeedbox\nfeeder\nfeedhead\nfeeding\nfeedman\nfeedsman\nfeedstuff\nfeedway\nfeedy\nfeel\nfeelable\nfeeler\nfeeless\nfeeling\nfeelingful\nfeelingless\nfeelinglessly\nfeelingly\nfeelingness\nfeer\nfeere\nfeering\nfeetage\nfeetless\nfeeze\nfefnicute\nfegary\nFegatella\nFehmic\nfei\nfeif\nfeigher\nfeign\nfeigned\nfeignedly\nfeignedness\nfeigner\nfeigning\nfeigningly\nFeijoa\nfeil\nfeint\nfeis\nfeist\nfeisty\nFelapton\nfeldsher\nfeldspar\nfeldsparphyre\nfeldspathic\nfeldspathization\nfeldspathoid\nFelichthys\nfelicide\nfelicific\nfelicitate\nfelicitation\nfelicitator\nfelicitous\nfelicitously\nfelicitousness\nfelicity\nfelid\nFelidae\nfeliform\nFelinae\nfeline\nfelinely\nfelineness\nfelinity\nfelinophile\nfelinophobe\nFelis\nFelix\nfell\nfellable\nfellage\nfellah\nfellaheen\nfellahin\nFellani\nFellata\nFellatah\nfellatio\nfellation\nfellen\nfeller\nfellic\nfelliducous\nfellifluous\nfelling\nfellingbird\nfellinic\nfellmonger\nfellmongering\nfellmongery\nfellness\nfelloe\nfellow\nfellowcraft\nfellowess\nfellowheirship\nfellowless\nfellowlike\nfellowship\nfellside\nfellsman\nfelly\nfeloid\nfelon\nfeloness\nfelonious\nfeloniously\nfeloniousness\nfelonry\nfelonsetter\nfelonsetting\nfelonweed\nfelonwood\nfelonwort\nfelony\nfels\nfelsite\nfelsitic\nfelsobanyite\nfelsophyre\nfelsophyric\nfelsosphaerite\nfelstone\nfelt\nfelted\nfelter\nfelting\nfeltlike\nfeltmaker\nfeltmaking\nfeltmonger\nfeltness\nfeltwork\nfeltwort\nfelty\nfeltyfare\nfelucca\nFelup\nfelwort\nfemale\nfemalely\nfemaleness\nfemality\nfemalize\nFeme\nfeme\nfemerell\nfemic\nfemicide\nfeminacy\nfeminal\nfeminality\nfeminate\nfemineity\nfeminie\nfeminility\nfeminin\nfeminine\nfemininely\nfeminineness\nfemininism\nfemininity\nfeminism\nfeminist\nfeministic\nfeministics\nfeminity\nfeminization\nfeminize\nfeminologist\nfeminology\nfeminophobe\nfemora\nfemoral\nfemorocaudal\nfemorocele\nfemorococcygeal\nfemorofibular\nfemoropopliteal\nfemororotulian\nfemorotibial\nfemur\nfen\nfenbank\nfenberry\nfence\nfenceful\nfenceless\nfencelessness\nfencelet\nfenceplay\nfencer\nfenceress\nfenchene\nfenchone\nfenchyl\nfencible\nfencing\nfend\nfendable\nfender\nfendering\nfenderless\nfendillate\nfendillation\nfendy\nfeneration\nfenestella\nFenestellidae\nfenestra\nfenestral\nfenestrate\nfenestrated\nfenestration\nfenestrato\nfenestrule\nFenian\nFenianism\nfenite\nfenks\nfenland\nfenlander\nfenman\nfennec\nfennel\nfennelflower\nfennig\nfennish\nFennoman\nfenny\nfenouillet\nFenrir\nfensive\nfent\nfenter\nfenugreek\nFenzelia\nfeod\nfeodal\nfeodality\nfeodary\nfeodatory\nfeoff\nfeoffee\nfeoffeeship\nfeoffment\nfeoffor\nfeower\nferacious\nferacity\nFerae\nFerahan\nferal\nferalin\nFeramorz\nferash\nferberite\nFerdiad\nferdwit\nferetory\nferetrum\nferfathmur\nferfet\nferganite\nFergus\nfergusite\nFerguson\nfergusonite\nferia\nferial\nferidgi\nferie\nferine\nferinely\nferineness\nFeringi\nFerio\nFerison\nferity\nferk\nferling\nferly\nfermail\nFermatian\nferme\nferment\nfermentability\nfermentable\nfermentarian\nfermentation\nfermentative\nfermentatively\nfermentativeness\nfermentatory\nfermenter\nfermentescible\nfermentitious\nfermentive\nfermentology\nfermentor\nfermentum\nfermerer\nfermery\nfermila\nfermorite\nfern\nfernandinite\nFernando\nfernbird\nfernbrake\nferned\nfernery\nferngale\nferngrower\nfernland\nfernleaf\nfernless\nfernlike\nfernshaw\nfernsick\nferntickle\nferntickled\nfernwort\nferny\nFerocactus\nferocious\nferociously\nferociousness\nferocity\nferoher\nFeronia\nferrado\nferrament\nFerrara\nFerrarese\nferrate\nferrated\nferrateen\nferratin\nferrean\nferreous\nferret\nferreter\nferreting\nferretto\nferrety\nferri\nferriage\nferric\nferrichloride\nferricyanate\nferricyanhydric\nferricyanic\nferricyanide\nferricyanogen\nferrier\nferriferous\nferrihydrocyanic\nferriprussiate\nferriprussic\nferrite\nferritization\nferritungstite\nferrivorous\nferroalloy\nferroaluminum\nferroboron\nferrocalcite\nferrocerium\nferrochrome\nferrochromium\nferroconcrete\nferroconcretor\nferrocyanate\nferrocyanhydric\nferrocyanic\nferrocyanide\nferrocyanogen\nferroglass\nferrogoslarite\nferrohydrocyanic\nferroinclave\nferromagnesian\nferromagnetic\nferromagnetism\nferromanganese\nferromolybdenum\nferronatrite\nferronickel\nferrophosphorus\nferroprint\nferroprussiate\nferroprussic\nferrosilicon\nferrotitanium\nferrotungsten\nferrotype\nferrotyper\nferrous\nferrovanadium\nferrozirconium\nferruginate\nferrugination\nferruginean\nferruginous\nferrule\nferruler\nferrum\nferruminate\nferrumination\nferry\nferryboat\nferryhouse\nferryman\nferryway\nferthumlungur\nFertil\nfertile\nfertilely\nfertileness\nfertility\nfertilizable\nfertilization\nfertilizational\nfertilize\nfertilizer\nferu\nferula\nferulaceous\nferule\nferulic\nfervanite\nfervency\nfervent\nfervently\nferventness\nfervescence\nfervescent\nfervid\nfervidity\nfervidly\nfervidness\nFervidor\nfervor\nfervorless\nFesapo\nFescennine\nfescenninity\nfescue\nfess\nfessely\nfesswise\nfest\nfestal\nfestally\nFeste\nfester\nfesterment\nfestilogy\nfestinance\nfestinate\nfestinately\nfestination\nfestine\nFestino\nfestival\nfestivally\nfestive\nfestively\nfestiveness\nfestivity\nfestivous\nfestology\nfestoon\nfestoonery\nfestoony\nfestuca\nfestucine\nfet\nfetal\nfetalism\nfetalization\nfetation\nfetch\nfetched\nfetcher\nfetching\nfetchingly\nfeteless\nfeterita\nfetial\nfetiales\nfetichmonger\nfeticidal\nfeticide\nfetid\nfetidity\nfetidly\nfetidness\nfetiferous\nfetiparous\nfetish\nfetisheer\nfetishic\nfetishism\nfetishist\nfetishistic\nfetishization\nfetishize\nfetishmonger\nfetishry\nfetlock\nfetlocked\nfetlow\nfetography\nfetometry\nfetoplacental\nfetor\nfetter\nfetterbush\nfetterer\nfetterless\nfetterlock\nfetticus\nfettle\nfettler\nfettling\nfetus\nfeu\nfeuage\nfeuar\nfeucht\nfeud\nfeudal\nfeudalism\nfeudalist\nfeudalistic\nfeudality\nfeudalizable\nfeudalization\nfeudalize\nfeudally\nfeudatorial\nfeudatory\nfeudee\nfeudist\nfeudovassalism\nfeued\nFeuillants\nfeuille\nfeuilletonism\nfeuilletonist\nfeuilletonistic\nfeulamort\nfever\nfeverberry\nfeverbush\nfevercup\nfeveret\nfeverfew\nfevergum\nfeverish\nfeverishly\nfeverishness\nfeverless\nfeverlike\nfeverous\nfeverously\nfeverroot\nfevertrap\nfevertwig\nfevertwitch\nfeverweed\nfeverwort\nfew\nfewness\nfewsome\nfewter\nfewterer\nfewtrils\nfey\nfeyness\nfez\nFezzan\nfezzed\nFezziwig\nfezzy\nfi\nfiacre\nfiance\nfiancee\nfianchetto\nFianna\nfiar\nfiard\nfiasco\nfiat\nfiatconfirmatio\nfib\nfibber\nfibbery\nfibdom\nFiber\nfiber\nfiberboard\nfibered\nFiberglas\nfiberize\nfiberizer\nfiberless\nfiberware\nfibration\nfibreless\nfibreware\nfibriform\nfibril\nfibrilla\nfibrillar\nfibrillary\nfibrillate\nfibrillated\nfibrillation\nfibrilled\nfibrilliferous\nfibrilliform\nfibrillose\nfibrillous\nfibrin\nfibrinate\nfibrination\nfibrine\nfibrinemia\nfibrinoalbuminous\nfibrinocellular\nfibrinogen\nfibrinogenetic\nfibrinogenic\nfibrinogenous\nfibrinolysin\nfibrinolysis\nfibrinolytic\nfibrinoplastic\nfibrinoplastin\nfibrinopurulent\nfibrinose\nfibrinosis\nfibrinous\nfibrinuria\nfibroadenia\nfibroadenoma\nfibroadipose\nfibroangioma\nfibroareolar\nfibroblast\nfibroblastic\nfibrobronchitis\nfibrocalcareous\nfibrocarcinoma\nfibrocartilage\nfibrocartilaginous\nfibrocaseose\nfibrocaseous\nfibrocellular\nfibrochondritis\nfibrochondroma\nfibrochondrosteal\nfibrocrystalline\nfibrocyst\nfibrocystic\nfibrocystoma\nfibrocyte\nfibroelastic\nfibroenchondroma\nfibrofatty\nfibroferrite\nfibroglia\nfibroglioma\nfibrohemorrhagic\nfibroid\nfibroin\nfibrointestinal\nfibroligamentous\nfibrolipoma\nfibrolipomatous\nfibrolite\nfibrolitic\nfibroma\nfibromata\nfibromatoid\nfibromatosis\nfibromatous\nfibromembrane\nfibromembranous\nfibromucous\nfibromuscular\nfibromyectomy\nfibromyitis\nfibromyoma\nfibromyomatous\nfibromyomectomy\nfibromyositis\nfibromyotomy\nfibromyxoma\nfibromyxosarcoma\nfibroneuroma\nfibronuclear\nfibronucleated\nfibropapilloma\nfibropericarditis\nfibroplastic\nfibropolypus\nfibropsammoma\nfibropurulent\nfibroreticulate\nfibrosarcoma\nfibrose\nfibroserous\nfibrosis\nfibrositis\nFibrospongiae\nfibrotic\nfibrotuberculosis\nfibrous\nfibrously\nfibrousness\nfibrovasal\nfibrovascular\nfibry\nfibster\nfibula\nfibulae\nfibular\nfibulare\nfibulocalcaneal\nFicaria\nficary\nfice\nficelle\nfiche\nFichtean\nFichteanism\nfichtelite\nfichu\nficiform\nfickle\nficklehearted\nfickleness\nficklety\nficklewise\nfickly\nfico\nficoid\nFicoidaceae\nFicoideae\nficoides\nfictation\nfictile\nfictileness\nfictility\nfiction\nfictional\nfictionalize\nfictionally\nfictionary\nfictioneer\nfictioner\nfictionist\nfictionistic\nfictionization\nfictionize\nfictionmonger\nfictious\nfictitious\nfictitiously\nfictitiousness\nfictive\nfictively\nFicula\nFicus\nfid\nFidac\nfidalgo\nfidate\nfidation\nfiddle\nfiddleback\nfiddlebrained\nfiddlecome\nfiddledeedee\nfiddlefaced\nfiddlehead\nfiddleheaded\nfiddler\nfiddlerfish\nfiddlery\nfiddlestick\nfiddlestring\nfiddlewood\nfiddley\nfiddling\nfide\nfideicommiss\nfideicommissary\nfideicommission\nfideicommissioner\nfideicommissor\nfideicommissum\nfideism\nfideist\nfidejussion\nfidejussionary\nfidejussor\nfidejussory\nFidele\nFidelia\nFidelio\nfidelity\nfidepromission\nfidepromissor\nFides\nFidessa\nfidfad\nfidge\nfidget\nfidgeter\nfidgetily\nfidgetiness\nfidgeting\nfidgetingly\nfidgety\nFidia\nfidicinal\nfidicinales\nfidicula\nFido\nfiducia\nfiducial\nfiducially\nfiduciarily\nfiduciary\nfiducinales\nfie\nfiedlerite\nfiefdom\nfield\nfieldball\nfieldbird\nfielded\nfielder\nfieldfare\nfieldish\nfieldman\nfieldpiece\nfieldsman\nfieldward\nfieldwards\nfieldwork\nfieldworker\nfieldwort\nfieldy\nfiend\nfiendful\nfiendfully\nfiendhead\nfiendish\nfiendishly\nfiendishness\nfiendism\nfiendlike\nfiendliness\nfiendly\nfiendship\nfient\nFierabras\nFierasfer\nfierasferid\nFierasferidae\nfierasferoid\nfierce\nfiercehearted\nfiercely\nfiercen\nfierceness\nfierding\nfierily\nfieriness\nfiery\nfiesta\nfieulamort\nFife\nfife\nfifer\nfifie\nfifish\nfifo\nfifteen\nfifteener\nfifteenfold\nfifteenth\nfifteenthly\nfifth\nfifthly\nfiftieth\nfifty\nfiftyfold\nfig\nfigaro\nfigbird\nfigeater\nfigent\nfigged\nfiggery\nfigging\nfiggle\nfiggy\nfight\nfightable\nfighter\nfighteress\nfighting\nfightingly\nfightwite\nFigitidae\nfigless\nfiglike\nfigment\nfigmental\nfigpecker\nfigshell\nfigulate\nfigulated\nfiguline\nfigurability\nfigurable\nfigural\nfigurant\nfigurante\nfigurate\nfigurately\nfiguration\nfigurative\nfiguratively\nfigurativeness\nfigure\nfigured\nfiguredly\nfigurehead\nfigureheadless\nfigureheadship\nfigureless\nfigurer\nfiguresome\nfigurette\nfigurial\nfigurine\nfigurism\nfigurist\nfigurize\nfigury\nfigworm\nfigwort\nFiji\nFijian\nfike\nfikie\nfilace\nfilaceous\nfilacer\nFilago\nfilament\nfilamentar\nfilamentary\nfilamented\nfilamentiferous\nfilamentoid\nfilamentose\nfilamentous\nfilamentule\nfilander\nfilanders\nfilao\nfilar\nFilaria\nfilaria\nfilarial\nfilarian\nfilariasis\nfilaricidal\nfilariform\nfilariid\nFilariidae\nfilarious\nfilasse\nfilate\nfilator\nfilature\nfilbert\nfilch\nfilcher\nfilchery\nfilching\nfilchingly\nfile\nfilefish\nfilelike\nfilemaker\nfilemaking\nfilemot\nfiler\nfilesmith\nfilet\nfilial\nfiliality\nfilially\nfilialness\nfiliate\nfiliation\nfilibeg\nfilibranch\nFilibranchia\nfilibranchiate\nfilibuster\nfilibusterer\nfilibusterism\nfilibusterous\nfilical\nFilicales\nfilicauline\nFilices\nfilicic\nfilicidal\nfilicide\nfiliciform\nfilicin\nFilicineae\nfilicinean\nfilicite\nFilicites\nfilicologist\nfilicology\nFilicornia\nfiliety\nfiliferous\nfiliform\nfiliformed\nFiligera\nfiligerous\nfiligree\nfiling\nfilings\nfilionymic\nfiliopietistic\nfilioque\nFilipendula\nfilipendulous\nFilipina\nFilipiniana\nFilipinization\nFilipinize\nFilipino\nfilippo\nfilipuncture\nfilite\nFilix\nfill\nfillable\nfilled\nfillemot\nfiller\nfillercap\nfillet\nfilleter\nfilleting\nfilletlike\nfilletster\nfilleul\nfilling\nfillingly\nfillingness\nfillip\nfillipeen\nfillister\nfillmass\nfillock\nfillowite\nfilly\nfilm\nfilmable\nfilmdom\nfilmet\nfilmgoer\nfilmgoing\nfilmic\nfilmiform\nfilmily\nfilminess\nfilmish\nfilmist\nfilmize\nfilmland\nfilmlike\nfilmogen\nfilmslide\nfilmstrip\nfilmy\nfilo\nfiloplumaceous\nfiloplume\nfilopodium\nFilosa\nfilose\nfiloselle\nfils\nfilter\nfilterability\nfilterable\nfilterableness\nfilterer\nfiltering\nfilterman\nfilth\nfilthify\nfilthily\nfilthiness\nfilthless\nfilthy\nfiltrability\nfiltrable\nfiltratable\nfiltrate\nfiltration\nfimble\nfimbria\nfimbrial\nfimbriate\nfimbriated\nfimbriation\nfimbriatum\nfimbricate\nfimbricated\nfimbrilla\nfimbrillate\nfimbrilliferous\nfimbrillose\nfimbriodentate\nFimbristylis\nfimetarious\nfimicolous\nFin\nfin\nfinable\nfinableness\nfinagle\nfinagler\nfinal\nfinale\nfinalism\nfinalist\nfinality\nfinalize\nfinally\nfinance\nfinancial\nfinancialist\nfinancially\nfinancier\nfinanciery\nfinancist\nfinback\nfinch\nfinchbacked\nfinched\nfinchery\nfind\nfindability\nfindable\nfindal\nfinder\nfindfault\nfinding\nfindjan\nfine\nfineable\nfinebent\nfineish\nfineleaf\nfineless\nfinely\nfinement\nfineness\nfiner\nfinery\nfinespun\nfinesse\nfinesser\nfinestill\nfinestiller\nfinetop\nfinfish\nfinfoot\nFingal\nFingall\nFingallian\nfingent\nfinger\nfingerable\nfingerberry\nfingerbreadth\nfingered\nfingerer\nfingerfish\nfingerflower\nfingerhold\nfingerhook\nfingering\nfingerleaf\nfingerless\nfingerlet\nfingerlike\nfingerling\nfingernail\nfingerparted\nfingerprint\nfingerprinting\nfingerroot\nfingersmith\nfingerspin\nfingerstall\nfingerstone\nfingertip\nfingerwise\nfingerwork\nfingery\nfingrigo\nFingu\nfinial\nfinialed\nfinical\nfinicality\nfinically\nfinicalness\nfinicism\nfinick\nfinickily\nfinickiness\nfinicking\nfinickingly\nfinickingness\nfinific\nfinify\nFiniglacial\nfinikin\nfiniking\nfining\nfinis\nfinish\nfinishable\nfinished\nfinisher\nfinishing\nfinite\nfinitely\nfiniteness\nfinitesimal\nfinitive\nfinitude\nfinity\nfinjan\nfink\nfinkel\nfinland\nFinlander\nfinless\nfinlet\nfinlike\nFinmark\nFinn\nfinnac\nfinned\nfinner\nfinnesko\nFinnic\nFinnicize\nfinnip\nFinnish\nfinny\nfinochio\nFionnuala\nfiord\nfiorded\nFioretti\nfiorin\nfiorite\nFiot\nfip\nfipenny\nfipple\nfique\nfir\nFirbolg\nfirca\nfire\nfireable\nfirearm\nfirearmed\nfireback\nfireball\nfirebird\nfireblende\nfireboard\nfireboat\nfirebolt\nfirebolted\nfirebote\nfirebox\nfireboy\nfirebrand\nfirebrat\nfirebreak\nfirebrick\nfirebug\nfireburn\nfirecoat\nfirecracker\nfirecrest\nfired\nfiredamp\nfiredog\nfiredrake\nfirefall\nfirefang\nfirefanged\nfireflaught\nfireflirt\nfireflower\nfirefly\nfireguard\nfirehouse\nfireless\nfirelight\nfirelike\nfireling\nfirelit\nfirelock\nfireman\nfiremanship\nfiremaster\nfireplace\nfireplug\nfirepower\nfireproof\nfireproofing\nfireproofness\nfirer\nfireroom\nfiresafe\nfiresafeness\nfiresafety\nfireshaft\nfireshine\nfireside\nfiresider\nfiresideship\nfirespout\nfirestone\nfirestopping\nfiretail\nfiretop\nfiretrap\nfirewarden\nfirewater\nfireweed\nfirewood\nfirework\nfireworkless\nfireworky\nfireworm\nfiring\nfirk\nfirker\nfirkin\nfirlot\nfirm\nfirmament\nfirmamental\nfirman\nfirmance\nfirmer\nfirmhearted\nfirmisternal\nFirmisternia\nfirmisternial\nfirmisternous\nfirmly\nfirmness\nfirn\nFirnismalerei\nFiroloida\nfirring\nfirry\nfirst\nfirstcomer\nfirsthand\nfirstling\nfirstly\nfirstness\nfirstship\nfirth\nfisc\nfiscal\nfiscalify\nfiscalism\nfiscalization\nfiscalize\nfiscally\nfischerite\nfise\nfisetin\nfish\nfishable\nfishback\nfishbed\nfishberry\nfishbolt\nfishbone\nfisheater\nfished\nfisher\nfisherboat\nfisherboy\nfisheress\nfisherfolk\nfishergirl\nfisherman\nfisherpeople\nfisherwoman\nfishery\nfishet\nfisheye\nfishfall\nfishful\nfishgarth\nfishgig\nfishhood\nfishhook\nfishhooks\nfishhouse\nfishify\nfishily\nfishiness\nfishing\nfishingly\nfishless\nfishlet\nfishlike\nfishline\nfishling\nfishman\nfishmonger\nfishmouth\nfishplate\nfishpond\nfishpool\nfishpot\nfishpotter\nfishpound\nfishskin\nfishtail\nfishway\nfishweed\nfishweir\nfishwife\nfishwoman\nfishwood\nfishworker\nfishworks\nfishworm\nfishy\nfishyard\nfisnoga\nfissate\nfissicostate\nfissidactyl\nFissidens\nFissidentaceae\nfissidentaceous\nfissile\nfissileness\nfissilingual\nFissilinguia\nfissility\nfission\nfissionable\nfissipalmate\nfissipalmation\nfissiparation\nfissiparism\nfissiparity\nfissiparous\nfissiparously\nfissiparousness\nfissiped\nFissipeda\nfissipedal\nfissipedate\nFissipedia\nfissipedial\nFissipes\nfissirostral\nfissirostrate\nFissirostres\nfissive\nfissural\nfissuration\nfissure\nfissureless\nFissurella\nFissurellidae\nfissuriform\nfissury\nfist\nfisted\nfister\nfistful\nfistiana\nfistic\nfistical\nfisticuff\nfisticuffer\nfisticuffery\nfistify\nfistiness\nfisting\nfistlike\nfistmele\nfistnote\nfistuca\nfistula\nFistulana\nfistular\nFistularia\nFistulariidae\nfistularioid\nfistulate\nfistulated\nfistulatome\nfistulatous\nfistule\nfistuliform\nFistulina\nfistulize\nfistulose\nfistulous\nfistwise\nfisty\nfit\nfitch\nfitched\nfitchee\nfitcher\nfitchery\nfitchet\nfitchew\nfitful\nfitfully\nfitfulness\nfitly\nfitment\nfitness\nfitout\nfitroot\nfittable\nfittage\nfitted\nfittedness\nfitten\nfitter\nfitters\nfittily\nfittiness\nfitting\nfittingly\nfittingness\nFittonia\nfitty\nfittyfied\nfittyways\nfittywise\nfitweed\nFitzclarence\nFitzroy\nFitzroya\nFiuman\nfive\nfivebar\nfivefold\nfivefoldness\nfiveling\nfivepence\nfivepenny\nfivepins\nfiver\nfives\nfivescore\nfivesome\nfivestones\nfix\nfixable\nfixage\nfixate\nfixatif\nfixation\nfixative\nfixator\nfixature\nfixed\nfixedly\nfixedness\nfixer\nfixidity\nfixing\nfixity\nfixture\nfixtureless\nfixure\nfizelyite\nfizgig\nfizz\nfizzer\nfizzle\nfizzy\nfjarding\nfjeld\nfjerding\nFjorgyn\nflabbergast\nflabbergastation\nflabbily\nflabbiness\nflabby\nflabellarium\nflabellate\nflabellation\nflabellifoliate\nflabelliform\nflabellinerved\nflabellum\nflabrum\nflaccid\nflaccidity\nflaccidly\nflaccidness\nflacherie\nFlacian\nFlacianism\nFlacianist\nflack\nflacked\nflacker\nflacket\nFlacourtia\nFlacourtiaceae\nflacourtiaceous\nflaff\nflaffer\nflag\nflagboat\nflagellant\nflagellantism\nflagellar\nFlagellaria\nFlagellariaceae\nflagellariaceous\nFlagellata\nFlagellatae\nflagellate\nflagellated\nflagellation\nflagellative\nflagellator\nflagellatory\nflagelliferous\nflagelliform\nflagellist\nflagellosis\nflagellula\nflagellum\nflageolet\nflagfall\nflagger\nflaggery\nflaggily\nflagginess\nflagging\nflaggingly\nflaggish\nflaggy\nflagitate\nflagitation\nflagitious\nflagitiously\nflagitiousness\nflagleaf\nflagless\nflaglet\nflaglike\nflagmaker\nflagmaking\nflagman\nflagon\nflagonet\nflagonless\nflagpole\nflagrance\nflagrancy\nflagrant\nflagrantly\nflagrantness\nflagroot\nflagship\nflagstaff\nflagstick\nflagstone\nflagworm\nflail\nflaillike\nflair\nflaith\nflaithship\nflajolotite\nflak\nflakage\nflake\nflakeless\nflakelet\nflaker\nflakily\nflakiness\nflaky\nflam\nFlamandization\nFlamandize\nflamant\nflamb\nflambeau\nflambeaux\nflamberg\nflamboyance\nflamboyancy\nflamboyant\nflamboyantism\nflamboyantize\nflamboyantly\nflamboyer\nflame\nflamed\nflameflower\nflameless\nflamelet\nflamelike\nflamen\nflamenco\nflamenship\nflameproof\nflamer\nflamfew\nflamineous\nflaming\nFlamingant\nflamingly\nflamingo\nFlaminian\nflaminica\nflaminical\nflammability\nflammable\nflammeous\nflammiferous\nflammulated\nflammulation\nflammule\nflamy\nflan\nflancard\nflanch\nflanched\nflanconade\nflandan\nflandowser\nflane\nflange\nflangeless\nflanger\nflangeway\nflank\nflankard\nflanked\nflanker\nflanking\nflankwise\nflanky\nflannel\nflannelbush\nflanneled\nflannelette\nflannelflower\nflannelleaf\nflannelly\nflannelmouth\nflannelmouthed\nflannels\nflanque\nflap\nflapcake\nflapdock\nflapdoodle\nflapdragon\nflapjack\nflapmouthed\nflapper\nflapperdom\nflapperhood\nflapperish\nflapperism\nflare\nflareback\nflareboard\nflareless\nflaring\nflaringly\nflary\nflaser\nflash\nflashboard\nflasher\nflashet\nflashily\nflashiness\nflashing\nflashingly\nflashlight\nflashlike\nflashly\nflashness\nflashover\nflashpan\nflashproof\nflashtester\nflashy\nflask\nflasker\nflasket\nflasklet\nflasque\nflat\nflatboat\nflatbottom\nflatcap\nflatcar\nflatdom\nflated\nflatfish\nflatfoot\nflathat\nflathead\nflatiron\nflatland\nflatlet\nflatling\nflatly\nflatman\nflatness\nflatnose\nflatten\nflattener\nflattening\nflatter\nflatterable\nflattercap\nflatterdock\nflatterer\nflattering\nflatteringly\nflatteringness\nflattery\nflattie\nflatting\nflattish\nflattop\nflatulence\nflatulency\nflatulent\nflatulently\nflatulentness\nflatus\nflatware\nflatway\nflatways\nflatweed\nflatwise\nflatwoods\nflatwork\nflatworm\nFlaubertian\nflaught\nflaughter\nflaunt\nflaunter\nflauntily\nflauntiness\nflaunting\nflauntingly\nflaunty\nflautino\nflautist\nflavanilin\nflavaniline\nflavanthrene\nflavanthrone\nflavedo\nFlaveria\nflavescence\nflavescent\nFlavia\nFlavian\nflavic\nflavicant\nflavid\nflavin\nflavine\nFlavius\nflavo\nFlavobacterium\nflavone\nflavoprotein\nflavopurpurin\nflavor\nflavored\nflavorer\nflavorful\nflavoring\nflavorless\nflavorous\nflavorsome\nflavory\nflavour\nflaw\nflawed\nflawflower\nflawful\nflawless\nflawlessly\nflawlessness\nflawn\nflawy\nflax\nflaxboard\nflaxbush\nflaxdrop\nflaxen\nflaxlike\nflaxman\nflaxseed\nflaxtail\nflaxweed\nflaxwench\nflaxwife\nflaxwoman\nflaxwort\nflaxy\nflay\nflayer\nflayflint\nflea\nfleabane\nfleabite\nfleadock\nfleam\nfleaseed\nfleaweed\nfleawood\nfleawort\nfleay\nflebile\nfleche\nflechette\nfleck\nflecken\nflecker\nfleckiness\nfleckled\nfleckless\nflecklessly\nflecky\nflecnodal\nflecnode\nflection\nflectional\nflectionless\nflector\nfled\nfledge\nfledgeless\nfledgling\nfledgy\nflee\nfleece\nfleeceable\nfleeced\nfleeceflower\nfleeceless\nfleecelike\nfleecer\nfleech\nfleechment\nfleecily\nfleeciness\nfleecy\nfleer\nfleerer\nfleering\nfleeringly\nfleet\nfleeter\nfleetful\nfleeting\nfleetingly\nfleetingness\nfleetings\nfleetly\nfleetness\nfleetwing\nFlem\nFleming\nFlemish\nflemish\nflench\nflense\nflenser\nflerry\nflesh\nfleshbrush\nfleshed\nfleshen\nflesher\nfleshful\nfleshhood\nfleshhook\nfleshiness\nfleshing\nfleshings\nfleshless\nfleshlike\nfleshlily\nfleshliness\nfleshly\nfleshment\nfleshmonger\nfleshpot\nfleshy\nflet\nFleta\nfletch\nFletcher\nfletcher\nFletcherism\nFletcherite\nFletcherize\nflether\nfleuret\nfleurettee\nfleuronnee\nfleury\nflew\nflewed\nflewit\nflews\nflex\nflexanimous\nflexed\nflexibility\nflexible\nflexibleness\nflexibly\nflexile\nflexility\nflexion\nflexionless\nflexor\nflexuose\nflexuosity\nflexuous\nflexuously\nflexuousness\nflexural\nflexure\nflexured\nfley\nfleyedly\nfleyedness\nfleyland\nfleysome\nflibbertigibbet\nflicflac\nflick\nflicker\nflickering\nflickeringly\nflickerproof\nflickertail\nflickery\nflicky\nflidder\nflier\nfligger\nflight\nflighted\nflighter\nflightful\nflightily\nflightiness\nflighting\nflightless\nflightshot\nflighty\nflimflam\nflimflammer\nflimflammery\nflimmer\nflimp\nflimsily\nflimsiness\nflimsy\nflinch\nflincher\nflinching\nflinchingly\nflinder\nFlindersia\nflindosa\nflindosy\nfling\nflinger\nflingy\nflinkite\nflint\nflinter\nflinthearted\nflintify\nflintily\nflintiness\nflintless\nflintlike\nflintlock\nflintwood\nflintwork\nflintworker\nflinty\nflioma\nflip\nflipe\nflipjack\nflippancy\nflippant\nflippantly\nflippantness\nflipper\nflipperling\nflippery\nflirt\nflirtable\nflirtation\nflirtational\nflirtationless\nflirtatious\nflirtatiously\nflirtatiousness\nflirter\nflirtigig\nflirting\nflirtingly\nflirtish\nflirtishness\nflirtling\nflirty\nflisk\nflisky\nflit\nflitch\nflitchen\nflite\nflitfold\nfliting\nflitter\nflitterbat\nflittermouse\nflittern\nflitting\nflittingly\nflitwite\nflivver\nflix\nflixweed\nFlo\nfloat\nfloatability\nfloatable\nfloatage\nfloatation\nfloatative\nfloatboard\nfloater\nfloatiness\nfloating\nfloatingly\nfloative\nfloatless\nfloatmaker\nfloatman\nfloatplane\nfloatsman\nfloatstone\nfloaty\nflob\nflobby\nfloc\nfloccillation\nfloccipend\nfloccose\nfloccosely\nflocculable\nflocculant\nfloccular\nflocculate\nflocculation\nflocculator\nfloccule\nflocculence\nflocculency\nflocculent\nflocculently\nflocculose\nflocculus\nfloccus\nflock\nflocker\nflocking\nflockless\nflocklike\nflockman\nflockmaster\nflockowner\nflockwise\nflocky\nflocoon\nflodge\nfloe\nfloeberg\nFloerkea\nfloey\nflog\nfloggable\nflogger\nflogging\nfloggingly\nflogmaster\nflogster\nflokite\nflong\nflood\nfloodable\nfloodage\nfloodboard\nfloodcock\nflooded\nflooder\nfloodgate\nflooding\nfloodless\nfloodlet\nfloodlight\nfloodlighting\nfloodlike\nfloodmark\nfloodometer\nfloodproof\nfloodtime\nfloodwater\nfloodway\nfloodwood\nfloody\nfloor\nfloorage\nfloorcloth\nfloorer\nfloorhead\nflooring\nfloorless\nfloorman\nfloorwalker\nfloorward\nfloorway\nfloorwise\nfloozy\nflop\nflophouse\nflopover\nflopper\nfloppers\nfloppily\nfloppiness\nfloppy\nflopwing\nFlora\nflora\nfloral\nFloralia\nfloralize\nflorally\nfloramor\nfloran\nflorate\nfloreal\nfloreate\nFlorence\nflorence\nflorent\nFlorentine\nFlorentinism\nflorentium\nflores\nflorescence\nflorescent\nfloressence\nfloret\nfloreted\nfloretum\nFloria\nFlorian\nfloriate\nfloriated\nfloriation\nflorican\nfloricin\nfloricultural\nfloriculturally\nfloriculture\nfloriculturist\nflorid\nFlorida\nFloridan\nFlorideae\nfloridean\nflorideous\nFloridian\nfloridity\nfloridly\nfloridness\nfloriferous\nfloriferously\nfloriferousness\nflorification\nfloriform\nflorigen\nflorigenic\nflorigraphy\nflorikan\nfloriken\nflorilegium\nflorimania\nflorimanist\nflorin\nFlorinda\nfloriparous\nfloripondio\nfloriscope\nFlorissant\nflorist\nfloristic\nfloristically\nfloristics\nfloristry\nflorisugent\nflorivorous\nfloroon\nfloroscope\nflorula\nflorulent\nflory\nfloscular\nFloscularia\nfloscularian\nFlosculariidae\nfloscule\nflosculose\nflosculous\nflosh\nfloss\nflosser\nflossflower\nFlossie\nflossification\nflossing\nflossy\nflot\nflota\nflotage\nflotant\nflotation\nflotative\nflotilla\nflotorial\nflotsam\nflounce\nflouncey\nflouncing\nflounder\nfloundering\nflounderingly\nflour\nflourish\nflourishable\nflourisher\nflourishing\nflourishingly\nflourishment\nflourishy\nflourlike\nfloury\nflouse\nflout\nflouter\nflouting\nfloutingly\nflow\nflowable\nflowage\nflower\nflowerage\nflowered\nflowerer\nfloweret\nflowerful\nflowerily\nfloweriness\nflowering\nflowerist\nflowerless\nflowerlessness\nflowerlet\nflowerlike\nflowerpecker\nflowerpot\nflowerwork\nflowery\nflowing\nflowingly\nflowingness\nflowmanostat\nflowmeter\nflown\nflowoff\nFloyd\nflu\nfluate\nfluavil\nflub\nflubdub\nflubdubbery\nflucan\nfluctiferous\nfluctigerous\nfluctisonant\nfluctisonous\nfluctuability\nfluctuable\nfluctuant\nfluctuate\nfluctuation\nfluctuosity\nfluctuous\nflue\nflued\nflueless\nfluellen\nfluellite\nflueman\nfluency\nfluent\nfluently\nfluentness\nfluer\nfluework\nfluey\nfluff\nfluffer\nfluffily\nfluffiness\nfluffy\nFlugelhorn\nflugelman\nfluible\nfluid\nfluidacetextract\nfluidal\nfluidally\nfluidextract\nfluidglycerate\nfluidible\nfluidic\nfluidification\nfluidifier\nfluidify\nfluidimeter\nfluidism\nfluidist\nfluidity\nfluidization\nfluidize\nfluidly\nfluidness\nfluidram\nfluigram\nfluitant\nfluke\nfluked\nflukeless\nflukeworm\nflukewort\nflukily\nflukiness\nfluking\nfluky\nflumdiddle\nflume\nflumerin\nfluminose\nflummadiddle\nflummer\nflummery\nflummox\nflummydiddle\nflump\nflung\nflunk\nflunker\nflunkeydom\nflunkeyhood\nflunkeyish\nflunkeyize\nflunky\nflunkydom\nflunkyhood\nflunkyish\nflunkyism\nflunkyistic\nflunkyite\nflunkyize\nfluoaluminate\nfluoaluminic\nfluoarsenate\nfluoborate\nfluoboric\nfluoborid\nfluoboride\nfluoborite\nfluobromide\nfluocarbonate\nfluocerine\nfluocerite\nfluochloride\nfluohydric\nfluophosphate\nfluor\nfluoran\nfluoranthene\nfluorapatite\nfluorate\nfluorbenzene\nfluorene\nfluorenyl\nfluoresage\nfluoresce\nfluorescein\nfluorescence\nfluorescent\nfluorescigenic\nfluorescigenous\nfluorescin\nfluorhydric\nfluoric\nfluoridate\nfluoridation\nfluoride\nfluoridization\nfluoridize\nfluorimeter\nfluorinate\nfluorination\nfluorindine\nfluorine\nfluorite\nfluormeter\nfluorobenzene\nfluoroborate\nfluoroform\nfluoroformol\nfluorogen\nfluorogenic\nfluorography\nfluoroid\nfluorometer\nfluoroscope\nfluoroscopic\nfluoroscopy\nfluorosis\nfluorotype\nfluorspar\nfluoryl\nfluosilicate\nfluosilicic\nfluotantalate\nfluotantalic\nfluotitanate\nfluotitanic\nfluozirconic\nflurn\nflurr\nflurried\nflurriedly\nflurriment\nflurry\nflush\nflushboard\nflusher\nflusherman\nflushgate\nflushing\nflushingly\nflushness\nflushy\nflusk\nflusker\nfluster\nflusterate\nflusteration\nflusterer\nflusterment\nflustery\nFlustra\nflustrine\nflustroid\nflustrum\nflute\nflutebird\nfluted\nflutelike\nflutemouth\nfluter\nflutework\nFlutidae\nflutina\nfluting\nflutist\nflutter\nflutterable\nflutteration\nflutterer\nfluttering\nflutteringly\nflutterless\nflutterment\nfluttersome\nfluttery\nfluty\nfluvial\nfluvialist\nfluviatic\nfluviatile\nfluvicoline\nfluvioglacial\nfluviograph\nfluviolacustrine\nfluviology\nfluviomarine\nfluviometer\nfluviose\nfluvioterrestrial\nfluviovolcanic\nflux\nfluxation\nfluxer\nfluxibility\nfluxible\nfluxibleness\nfluxibly\nfluxile\nfluxility\nfluxion\nfluxional\nfluxionally\nfluxionary\nfluxionist\nfluxmeter\nfluxroot\nfluxweed\nfly\nflyable\nflyaway\nflyback\nflyball\nflybane\nflybelt\nflyblow\nflyblown\nflyboat\nflyboy\nflycatcher\nflyeater\nflyer\nflyflap\nflyflapper\nflyflower\nflying\nflyingly\nflyleaf\nflyless\nflyman\nflyness\nflypaper\nflype\nflyproof\nFlysch\nflyspeck\nflytail\nflytier\nflytrap\nflyway\nflyweight\nflywheel\nflywinch\nflywort\nFo\nfoal\nfoalfoot\nfoalhood\nfoaly\nfoam\nfoambow\nfoamer\nfoamflower\nfoamily\nfoaminess\nfoaming\nfoamingly\nfoamless\nfoamlike\nfoamy\nfob\nfocal\nfocalization\nfocalize\nfocally\nfocaloid\nfoci\nfocimeter\nfocimetry\nfocoids\nfocometer\nfocometry\nfocsle\nfocus\nfocusable\nfocuser\nfocusless\nfod\nfodda\nfodder\nfodderer\nfoddering\nfodderless\nfoder\nfodge\nfodgel\nfodient\nFodientia\nfoe\nfoehn\nfoehnlike\nfoeish\nfoeless\nfoelike\nfoeman\nfoemanship\nFoeniculum\nfoenngreek\nfoeship\nfoetalization\nfog\nfogbound\nfogbow\nfogdog\nfogdom\nfogeater\nfogey\nfogfruit\nfoggage\nfogged\nfogger\nfoggily\nfogginess\nfoggish\nfoggy\nfoghorn\nfogle\nfogless\nfogman\nfogo\nfogon\nfogou\nfogproof\nfogram\nfogramite\nfogramity\nfogscoffer\nfogus\nfogy\nfogydom\nfogyish\nfogyism\nfohat\nfoible\nfoil\nfoilable\nfoiler\nfoiling\nfoilsman\nfoining\nfoiningly\nFoism\nfoison\nfoisonless\nFoist\nfoist\nfoister\nfoistiness\nfoisty\nfoiter\nFokker\nfold\nfoldable\nfoldage\nfoldboat\nfoldcourse\nfolded\nfoldedly\nfolden\nfolder\nfolding\nfoldless\nfoldskirt\nfoldure\nfoldwards\nfoldy\nfole\nfolgerite\nfolia\nfoliaceous\nfoliaceousness\nfoliage\nfoliaged\nfoliageous\nfolial\nfoliar\nfoliary\nfoliate\nfoliated\nfoliation\nfoliature\nfolie\nfoliicolous\nfoliiferous\nfoliiform\nfolio\nfoliobranch\nfoliobranchiate\nfoliocellosis\nfoliolate\nfoliole\nfolioliferous\nfoliolose\nfoliose\nfoliosity\nfoliot\nfolious\nfoliously\nfolium\nfolk\nfolkcraft\nfolkfree\nfolkland\nfolklore\nfolkloric\nfolklorish\nfolklorism\nfolklorist\nfolkloristic\nfolkmoot\nfolkmooter\nfolkmot\nfolkmote\nfolkmoter\nfolkright\nfolksiness\nfolksy\nFolkvang\nFolkvangr\nfolkway\nfolky\nfolles\nfolletage\nfollicle\nfollicular\nfolliculate\nfolliculated\nfollicule\nfolliculin\nFolliculina\nfolliculitis\nfolliculose\nfolliculosis\nfolliculous\nfolliful\nfollis\nfollow\nfollowable\nfollower\nfollowership\nfollowing\nfollowingly\nfolly\nfollyproof\nFomalhaut\nfoment\nfomentation\nfomenter\nfomes\nfomites\nFon\nfondak\nfondant\nfondish\nfondle\nfondler\nfondlesome\nfondlike\nfondling\nfondlingly\nfondly\nfondness\nfondu\nfondue\nfonduk\nfonly\nfonnish\nfono\nfons\nfont\nFontainea\nfontal\nfontally\nfontanel\nfontange\nfonted\nfontful\nfonticulus\nfontinal\nFontinalaceae\nfontinalaceous\nFontinalis\nfontlet\nfoo\nFoochow\nFoochowese\nfood\nfooder\nfoodful\nfoodless\nfoodlessness\nfoodstuff\nfoody\nfoofaraw\nfool\nfooldom\nfoolery\nfooless\nfoolfish\nfoolhardihood\nfoolhardily\nfoolhardiness\nfoolhardiship\nfoolhardy\nfooling\nfoolish\nfoolishly\nfoolishness\nfoollike\nfoolocracy\nfoolproof\nfoolproofness\nfoolscap\nfoolship\nfooner\nfooster\nfoosterer\nfoot\nfootage\nfootback\nfootball\nfootballer\nfootballist\nfootband\nfootblower\nfootboard\nfootboy\nfootbreadth\nfootbridge\nfootcloth\nfooted\nfooteite\nfooter\nfootfall\nfootfarer\nfootfault\nfootfolk\nfootful\nfootganger\nfootgear\nfootgeld\nfoothalt\nfoothill\nfoothold\nfoothook\nfoothot\nfooting\nfootingly\nfootings\nfootle\nfootler\nfootless\nfootlicker\nfootlight\nfootlights\nfootling\nfootlining\nfootlock\nfootmaker\nfootman\nfootmanhood\nfootmanry\nfootmanship\nfootmark\nfootnote\nfootnoted\nfootpace\nfootpad\nfootpaddery\nfootpath\nfootpick\nfootplate\nfootprint\nfootrail\nfootrest\nfootrill\nfootroom\nfootrope\nfoots\nfootscald\nfootslog\nfootslogger\nfootsore\nfootsoreness\nfootstalk\nfootstall\nfootstep\nfootstick\nfootstock\nfootstone\nfootstool\nfootwalk\nfootwall\nfootway\nfootwear\nfootwork\nfootworn\nfooty\nfooyoung\nfoozle\nfoozler\nfop\nfopling\nfoppery\nfoppish\nfoppishly\nfoppishness\nfoppy\nfopship\nFor\nfor\nfora\nforage\nforagement\nforager\nforalite\nforamen\nforaminated\nforamination\nforaminifer\nForaminifera\nforaminiferal\nforaminiferan\nforaminiferous\nforaminose\nforaminous\nforaminulate\nforaminule\nforaminulose\nforaminulous\nforane\nforaneen\nforaneous\nforasmuch\nforay\nforayer\nforb\nforbade\nforbar\nforbathe\nforbear\nforbearable\nforbearance\nforbearant\nforbearantly\nforbearer\nforbearing\nforbearingly\nforbearingness\nforbesite\nforbid\nforbiddable\nforbiddal\nforbiddance\nforbidden\nforbiddenly\nforbiddenness\nforbidder\nforbidding\nforbiddingly\nforbiddingness\nforbit\nforbled\nforblow\nforbore\nforborne\nforbow\nforby\nforce\nforceable\nforced\nforcedly\nforcedness\nforceful\nforcefully\nforcefulness\nforceless\nforcemeat\nforcement\nforceps\nforcepslike\nforcer\nforchase\nforche\nforcibility\nforcible\nforcibleness\nforcibly\nforcing\nforcingly\nforcipate\nforcipated\nforcipes\nforcipiform\nforcipressure\nForcipulata\nforcipulate\nforcleave\nforconceit\nford\nfordable\nfordableness\nfordays\nFordicidia\nfording\nfordless\nfordo\nfordone\nfordwine\nfordy\nfore\nforeaccounting\nforeaccustom\nforeacquaint\nforeact\nforeadapt\nforeadmonish\nforeadvertise\nforeadvice\nforeadvise\nforeallege\nforeallot\nforeannounce\nforeannouncement\nforeanswer\nforeappoint\nforeappointment\nforearm\nforeassign\nforeassurance\nforebackwardly\nforebay\nforebear\nforebemoan\nforebemoaned\nforebespeak\nforebitt\nforebitten\nforebitter\nforebless\nforeboard\nforebode\nforebodement\nforeboder\nforeboding\nforebodingly\nforebodingness\nforebody\nforeboot\nforebowels\nforebowline\nforebrace\nforebrain\nforebreast\nforebridge\nforeburton\nforebush\nforecar\nforecarriage\nforecast\nforecaster\nforecasting\nforecastingly\nforecastle\nforecastlehead\nforecastleman\nforecatching\nforecatharping\nforechamber\nforechase\nforechoice\nforechoose\nforechurch\nforecited\nforeclaw\nforeclosable\nforeclose\nforeclosure\nforecome\nforecomingness\nforecommend\nforeconceive\nforeconclude\nforecondemn\nforeconscious\nforeconsent\nforeconsider\nforecontrive\nforecool\nforecooler\nforecounsel\nforecount\nforecourse\nforecourt\nforecover\nforecovert\nforedate\nforedawn\nforeday\nforedeck\nforedeclare\nforedecree\nforedeep\nforedefeated\nforedefine\nforedenounce\nforedescribe\nforedeserved\nforedesign\nforedesignment\nforedesk\nforedestine\nforedestiny\nforedetermination\nforedetermine\nforedevised\nforedevote\nforediscern\nforedispose\nforedivine\nforedone\nforedoom\nforedoomer\nforedoor\nforeface\nforefather\nforefatherly\nforefault\nforefeel\nforefeeling\nforefeelingly\nforefelt\nforefield\nforefigure\nforefin\nforefinger\nforefit\nforeflank\nforeflap\nforeflipper\nforefoot\nforefront\nforegallery\nforegame\nforeganger\nforegate\nforegift\nforegirth\nforeglance\nforegleam\nforeglimpse\nforeglow\nforego\nforegoer\nforegoing\nforegone\nforegoneness\nforeground\nforeguess\nforeguidance\nforehalf\nforehall\nforehammer\nforehand\nforehanded\nforehandedness\nforehandsel\nforehard\nforehatch\nforehatchway\nforehead\nforeheaded\nforehear\nforehearth\nforeheater\nforehill\nforehinting\nforehold\nforehood\nforehoof\nforehook\nforeign\nforeigneering\nforeigner\nforeignership\nforeignism\nforeignization\nforeignize\nforeignly\nforeignness\nforeimagination\nforeimagine\nforeimpressed\nforeimpression\nforeinclined\nforeinstruct\nforeintend\nforeiron\nforejudge\nforejudgment\nforekeel\nforeking\nforeknee\nforeknow\nforeknowable\nforeknower\nforeknowing\nforeknowingly\nforeknowledge\nforel\nforelady\nforeland\nforelay\nforeleech\nforeleg\nforelimb\nforelive\nforellenstein\nforelock\nforelook\nforeloop\nforelooper\nforeloper\nforemade\nforeman\nforemanship\nforemarch\nforemark\nforemartyr\nforemast\nforemasthand\nforemastman\nforemean\nforemeant\nforemelt\nforemention\nforementioned\nforemessenger\nforemilk\nforemisgiving\nforemistress\nforemost\nforemostly\nforemother\nforename\nforenamed\nforenews\nforenight\nforenoon\nforenote\nforenoted\nforenotice\nforenotion\nforensal\nforensic\nforensical\nforensicality\nforensically\nforeordain\nforeordainment\nforeorder\nforeordinate\nforeordination\nforeorlop\nforepad\nforepale\nforeparents\nforepart\nforepassed\nforepast\nforepaw\nforepayment\nforepeak\nforeperiod\nforepiece\nforeplace\nforeplan\nforeplanting\nforepole\nforeporch\nforepossessed\nforepost\nforepredicament\nforepreparation\nforeprepare\nforepretended\nforeproduct\nforeproffer\nforepromise\nforepromised\nforeprovided\nforeprovision\nforepurpose\nforequarter\nforequoted\nforeran\nforerank\nforereach\nforereaching\nforeread\nforereading\nforerecited\nforereckon\nforerehearsed\nforeremembered\nforereport\nforerequest\nforerevelation\nforerib\nforerigging\nforeright\nforeroom\nforeroyal\nforerun\nforerunner\nforerunnership\nforerunnings\nforesaddle\nforesaid\nforesail\nforesay\nforescene\nforescent\nforeschool\nforeschooling\nforescript\nforeseason\nforeseat\nforesee\nforeseeability\nforeseeable\nforeseeingly\nforeseer\nforeseize\nforesend\nforesense\nforesentence\nforeset\nforesettle\nforesettled\nforeshadow\nforeshadower\nforeshaft\nforeshank\nforeshape\nforesheet\nforeshift\nforeship\nforeshock\nforeshoe\nforeshop\nforeshore\nforeshorten\nforeshortening\nforeshot\nforeshoulder\nforeshow\nforeshower\nforeshroud\nforeside\nforesight\nforesighted\nforesightedness\nforesightful\nforesightless\nforesign\nforesignify\nforesin\nforesing\nforesinger\nforeskin\nforeskirt\nforesleeve\nforesound\nforespeak\nforespecified\nforespeed\nforespencer\nforest\nforestaff\nforestage\nforestair\nforestal\nforestall\nforestaller\nforestallment\nforestarling\nforestate\nforestation\nforestay\nforestaysail\nforestcraft\nforested\nforesteep\nforestem\nforestep\nforester\nforestership\nforestful\nforestial\nForestian\nforestick\nForestiera\nforestine\nforestish\nforestless\nforestlike\nforestology\nforestral\nforestress\nforestry\nforestside\nforestudy\nforestwards\nforesty\nforesummer\nforesummon\nforesweat\nforetack\nforetackle\nforetalk\nforetalking\nforetaste\nforetaster\nforetell\nforetellable\nforeteller\nforethink\nforethinker\nforethought\nforethoughted\nforethoughtful\nforethoughtfully\nforethoughtfulness\nforethoughtless\nforethrift\nforetime\nforetimed\nforetoken\nforetold\nforetop\nforetopman\nforetrace\nforetrysail\nforeturn\nforetype\nforetypified\nforeuse\nforeutter\nforevalue\nforever\nforevermore\nforeview\nforevision\nforevouch\nforevouched\nforevow\nforewarm\nforewarmer\nforewarn\nforewarner\nforewarning\nforewarningly\nforewaters\nforeween\nforeweep\nforeweigh\nforewing\nforewinning\nforewisdom\nforewish\nforewoman\nforewonted\nforeword\nforeworld\nforeworn\nforewritten\nforewrought\nforeyard\nforeyear\nforfairn\nforfar\nforfare\nforfars\nforfault\nforfaulture\nforfeit\nforfeiter\nforfeits\nforfeiture\nforfend\nforficate\nforficated\nforfication\nforficiform\nForficula\nforficulate\nForficulidae\nforfouchten\nforfoughen\nforfoughten\nforgainst\nforgather\nforge\nforgeability\nforgeable\nforged\nforgedly\nforgeful\nforgeman\nforger\nforgery\nforget\nforgetful\nforgetfully\nforgetfulness\nforgetive\nforgetness\nforgettable\nforgetter\nforgetting\nforgettingly\nforgie\nforging\nforgivable\nforgivableness\nforgivably\nforgive\nforgiveless\nforgiveness\nforgiver\nforgiving\nforgivingly\nforgivingness\nforgo\nforgoer\nforgot\nforgotten\nforgottenness\nforgrow\nforgrown\nforhoo\nforhooy\nforhow\nforinsec\nforint\nforisfamiliate\nforisfamiliation\nforjesket\nforjudge\nforjudger\nfork\nforkable\nforkbeard\nforked\nforkedly\nforkedness\nforker\nforkful\nforkhead\nforkiness\nforkless\nforklike\nforkman\nforksmith\nforktail\nforkwise\nforky\nforleft\nforlet\nforlorn\nforlornity\nforlornly\nforlornness\nform\nformability\nformable\nformably\nformagen\nformagenic\nformal\nformalazine\nformaldehyde\nformaldehydesulphoxylate\nformaldehydesulphoxylic\nformaldoxime\nformalesque\nFormalin\nformalism\nformalist\nformalistic\nformalith\nformality\nformalization\nformalize\nformalizer\nformally\nformalness\nformamide\nformamidine\nformamido\nformamidoxime\nformanilide\nformant\nformat\nformate\nformation\nformational\nformative\nformatively\nformativeness\nformature\nformazyl\nforme\nformed\nformedon\nformee\nformel\nformene\nformenic\nformer\nformeret\nformerly\nformerness\nformful\nformiate\nformic\nFormica\nformican\nFormicariae\nformicarian\nFormicariidae\nformicarioid\nformicarium\nformicaroid\nformicary\nformicate\nformication\nformicative\nformicicide\nformicid\nFormicidae\nformicide\nFormicina\nFormicinae\nformicine\nFormicivora\nformicivorous\nFormicoidea\nformidability\nformidable\nformidableness\nformidably\nformin\nforminate\nforming\nformless\nformlessly\nformlessness\nFormol\nformolite\nformonitrile\nFormosan\nformose\nformoxime\nformula\nformulable\nformulae\nformulaic\nformular\nformularism\nformularist\nformularistic\nformularization\nformularize\nformulary\nformulate\nformulation\nformulator\nformulatory\nformule\nformulism\nformulist\nformulistic\nformulization\nformulize\nformulizer\nformwork\nformy\nformyl\nformylal\nformylate\nformylation\nfornacic\nFornax\nfornaxid\nfornenst\nfornent\nfornical\nfornicate\nfornicated\nfornication\nfornicator\nfornicatress\nfornicatrix\nforniciform\nforninst\nfornix\nforpet\nforpine\nforpit\nforprise\nforrad\nforrard\nforride\nforrit\nforritsome\nforrue\nforsake\nforsaken\nforsakenly\nforsakenness\nforsaker\nforset\nforslow\nforsooth\nforspeak\nforspend\nforspread\nForst\nforsterite\nforswear\nforswearer\nforsworn\nforswornness\nForsythia\nfort\nfortalice\nforte\nfortescue\nfortescure\nforth\nforthbring\nforthbringer\nforthcome\nforthcomer\nforthcoming\nforthcomingness\nforthcut\nforthfare\nforthfigured\nforthgaze\nforthgo\nforthgoing\nforthink\nforthputting\nforthright\nforthrightly\nforthrightness\nforthrights\nforthtell\nforthteller\nforthwith\nforthy\nforties\nfortieth\nfortifiable\nfortification\nfortifier\nfortify\nfortifying\nfortifyingly\nfortin\nfortis\nfortissimo\nfortitude\nfortitudinous\nfortlet\nfortnight\nfortnightly\nfortravail\nfortread\nfortress\nfortuitism\nfortuitist\nfortuitous\nfortuitously\nfortuitousness\nfortuity\nfortunate\nfortunately\nfortunateness\nfortune\nfortuned\nfortuneless\nFortunella\nfortunetell\nfortuneteller\nfortunetelling\nfortunite\nforty\nfortyfold\nforum\nforumize\nforwander\nforward\nforwardal\nforwardation\nforwarder\nforwarding\nforwardly\nforwardness\nforwards\nforwean\nforweend\nforwent\nforwoden\nforworden\nfosh\nfosie\nFosite\nfossa\nfossage\nfossane\nfossarian\nfosse\nfossed\nfossette\nfossick\nfossicker\nfossiform\nfossil\nfossilage\nfossilated\nfossilation\nfossildom\nfossiled\nfossiliferous\nfossilification\nfossilify\nfossilism\nfossilist\nfossilizable\nfossilization\nfossilize\nfossillike\nfossilogist\nfossilogy\nfossilological\nfossilologist\nfossilology\nfossor\nFossores\nFossoria\nfossorial\nfossorious\nfossula\nfossulate\nfossule\nfossulet\nfostell\nFoster\nfoster\nfosterable\nfosterage\nfosterer\nfosterhood\nfostering\nfosteringly\nfosterite\nfosterland\nfosterling\nfostership\nfostress\nfot\nfotch\nfother\nFothergilla\nfotmal\nfotui\nfou\nfoud\nfoudroyant\nfouette\nfougade\nfougasse\nfought\nfoughten\nfoughty\nfoujdar\nfoujdary\nfoul\nfoulage\nfoulard\nfouler\nfouling\nfoulish\nfoully\nfoulmouthed\nfoulmouthedly\nfoulmouthedness\nfoulness\nfoulsome\nfoumart\nfoun\nfound\nfoundation\nfoundational\nfoundationally\nfoundationary\nfoundationed\nfoundationer\nfoundationless\nfoundationlessness\nfounder\nfounderous\nfoundership\nfoundery\nfounding\nfoundling\nfoundress\nfoundry\nfoundryman\nfount\nfountain\nfountained\nfountaineer\nfountainhead\nfountainless\nfountainlet\nfountainous\nfountainously\nfountainwise\nfountful\nFouquieria\nFouquieriaceae\nfouquieriaceous\nfour\nfourble\nfourche\nfourchee\nfourcher\nfourchette\nfourchite\nfourer\nfourflusher\nfourfold\nFourierian\nFourierism\nFourierist\nFourieristic\nFourierite\nfourling\nfourpence\nfourpenny\nfourpounder\nfourre\nfourrier\nfourscore\nfoursome\nfoursquare\nfoursquarely\nfoursquareness\nfourstrand\nfourteen\nfourteener\nfourteenfold\nfourteenth\nfourteenthly\nfourth\nfourther\nfourthly\nfoussa\nfoute\nfouter\nfouth\nfovea\nfoveal\nfoveate\nfoveated\nfoveation\nfoveiform\nfoveola\nfoveolarious\nfoveolate\nfoveolated\nfoveole\nfoveolet\nfow\nfowk\nfowl\nfowler\nfowlerite\nfowlery\nfowlfoot\nfowling\nfox\nfoxbane\nfoxberry\nfoxchop\nfoxer\nfoxery\nfoxfeet\nfoxfinger\nfoxfish\nfoxglove\nfoxhole\nfoxhound\nfoxily\nfoxiness\nfoxing\nfoxish\nfoxlike\nfoxproof\nfoxship\nfoxskin\nfoxtail\nfoxtailed\nfoxtongue\nfoxwood\nfoxy\nfoy\nfoyaite\nfoyaitic\nfoyboat\nfoyer\nfoziness\nfozy\nfra\nfrab\nfrabbit\nfrabjous\nfrabjously\nfrabous\nfracas\nfracedinous\nfrache\nfrack\nfractable\nfractabling\nfracted\nFracticipita\nfractile\nfraction\nfractional\nfractionalism\nfractionalize\nfractionally\nfractionary\nfractionate\nfractionating\nfractionation\nfractionator\nfractionization\nfractionize\nfractionlet\nfractious\nfractiously\nfractiousness\nfractocumulus\nfractonimbus\nfractostratus\nfractuosity\nfracturable\nfractural\nfracture\nfractureproof\nfrae\nFragaria\nfraghan\nFragilaria\nFragilariaceae\nfragile\nfragilely\nfragileness\nfragility\nfragment\nfragmental\nfragmentally\nfragmentarily\nfragmentariness\nfragmentary\nfragmentation\nfragmented\nfragmentist\nfragmentitious\nfragmentize\nfragrance\nfragrancy\nfragrant\nfragrantly\nfragrantness\nfraid\nfraik\nfrail\nfrailejon\nfrailish\nfrailly\nfrailness\nfrailty\nfraise\nfraiser\nFram\nframable\nframableness\nframbesia\nframe\nframea\nframeable\nframeableness\nframed\nframeless\nframer\nframesmith\nframework\nframing\nframmit\nframpler\nframpold\nfranc\nFrances\nfranchisal\nfranchise\nfranchisement\nfranchiser\nFrancic\nFrancis\nfrancisc\nfrancisca\nFranciscan\nFranciscanism\nFrancisco\nfrancium\nFrancize\nfranco\nFrancois\nfrancolin\nfrancolite\nFrancomania\nFranconian\nFrancophile\nFrancophilism\nFrancophobe\nFrancophobia\nfrangent\nFrangi\nfrangibility\nfrangible\nfrangibleness\nfrangipane\nfrangipani\nfrangula\nFrangulaceae\nfrangulic\nfrangulin\nfrangulinic\nFrank\nfrank\nfrankability\nfrankable\nfrankalmoign\nFrankenia\nFrankeniaceae\nfrankeniaceous\nFrankenstein\nfranker\nfrankfurter\nfrankhearted\nfrankheartedly\nfrankheartedness\nFrankify\nfrankincense\nfrankincensed\nfranking\nFrankish\nFrankist\nfranklandite\nFranklin\nfranklin\nFranklinia\nFranklinian\nFrankliniana\nFranklinic\nFranklinism\nFranklinist\nfranklinite\nFranklinization\nfrankly\nfrankmarriage\nfrankness\nfrankpledge\nfrantic\nfrantically\nfranticly\nfranticness\nfranzy\nfrap\nfrappe\nfrapping\nfrasco\nfrase\nFrasera\nfrasier\nfrass\nfrat\nfratch\nfratched\nfratcheous\nfratcher\nfratchety\nfratchy\nfrater\nFratercula\nfraternal\nfraternalism\nfraternalist\nfraternality\nfraternally\nfraternate\nfraternation\nfraternism\nfraternity\nfraternization\nfraternize\nfraternizer\nfratery\nFraticelli\nFraticellian\nfratority\nFratricelli\nfratricidal\nfratricide\nfratry\nfraud\nfraudful\nfraudfully\nfraudless\nfraudlessly\nfraudlessness\nfraudproof\nfraudulence\nfraudulency\nfraudulent\nfraudulently\nfraudulentness\nfraughan\nfraught\nfrawn\nfraxetin\nfraxin\nfraxinella\nFraxinus\nfray\nfrayed\nfrayedly\nfrayedness\nfraying\nfrayn\nfrayproof\nfraze\nfrazer\nfrazil\nfrazzle\nfrazzling\nfreak\nfreakdom\nfreakery\nfreakful\nfreakily\nfreakiness\nfreakish\nfreakishly\nfreakishness\nfreaky\nfream\nfreath\nfreck\nfrecken\nfreckened\nfrecket\nfreckle\nfreckled\nfreckledness\nfreckleproof\nfreckling\nfrecklish\nfreckly\nFred\nFreddie\nFreddy\nFrederic\nFrederica\nFrederick\nfrederik\nfredricite\nfree\nfreeboard\nfreeboot\nfreebooter\nfreebootery\nfreebooting\nfreeborn\nFreechurchism\nfreed\nfreedman\nfreedom\nfreedwoman\nfreehand\nfreehanded\nfreehandedly\nfreehandedness\nfreehearted\nfreeheartedly\nfreeheartedness\nfreehold\nfreeholder\nfreeholdership\nfreeholding\nfreeing\nfreeish\nFreekirker\nfreelage\nfreeloving\nfreelovism\nfreely\nfreeman\nfreemanship\nfreemartin\nfreemason\nfreemasonic\nfreemasonical\nfreemasonism\nfreemasonry\nfreeness\nfreer\nFreesia\nfreesilverism\nfreesilverite\nfreestanding\nfreestone\nfreet\nfreethinker\nfreethinking\nfreetrader\nfreety\nfreeward\nfreeway\nfreewheel\nfreewheeler\nfreewheeling\nfreewill\nfreewoman\nfreezable\nfreeze\nfreezer\nfreezing\nfreezingly\nFregata\nFregatae\nFregatidae\nfreibergite\nfreieslebenite\nfreight\nfreightage\nfreighter\nfreightless\nfreightment\nfreir\nfreit\nfreity\nfremd\nfremdly\nfremdness\nfremescence\nfremescent\nfremitus\nFremontia\nFremontodendron\nfrenal\nFrenatae\nfrenate\nFrench\nfrenched\nFrenchification\nfrenchification\nFrenchify\nfrenchify\nFrenchily\nFrenchiness\nfrenching\nFrenchism\nFrenchize\nFrenchless\nFrenchly\nFrenchman\nFrenchness\nFrenchwise\nFrenchwoman\nFrenchy\nfrenetic\nfrenetical\nfrenetically\nFrenghi\nfrenular\nfrenulum\nfrenum\nfrenzelite\nfrenzied\nfrenziedly\nfrenzy\nFreon\nfrequence\nfrequency\nfrequent\nfrequentable\nfrequentage\nfrequentation\nfrequentative\nfrequenter\nfrequently\nfrequentness\nfrescade\nfresco\nfrescoer\nfrescoist\nfresh\nfreshen\nfreshener\nfreshet\nfreshhearted\nfreshish\nfreshly\nfreshman\nfreshmanhood\nfreshmanic\nfreshmanship\nfreshness\nfreshwoman\nFresison\nfresnel\nfresno\nfret\nfretful\nfretfully\nfretfulness\nfretless\nfretsome\nfrett\nfrettage\nfrettation\nfrette\nfretted\nfretter\nfretting\nfrettingly\nfretty\nfretum\nfretways\nfretwise\nfretwork\nfretworked\nFreudian\nFreudianism\nFreudism\nFreudist\nFreya\nfreyalite\nFreycinetia\nFreyja\nFreyr\nfriability\nfriable\nfriableness\nfriand\nfriandise\nfriar\nfriarbird\nfriarhood\nfriarling\nfriarly\nfriary\nfrib\nfribble\nfribbleism\nfribbler\nfribblery\nfribbling\nfribblish\nfribby\nfricandeau\nfricandel\nfricassee\nfrication\nfricative\nfricatrice\nfriction\nfrictionable\nfrictional\nfrictionally\nfrictionize\nfrictionless\nfrictionlessly\nfrictionproof\nFriday\nFridila\nfridstool\nfried\nFrieda\nfriedcake\nfriedelite\nfriedrichsdor\nfriend\nfriended\nfriendless\nfriendlessness\nfriendlike\nfriendlily\nfriendliness\nfriendliwise\nfriendly\nfriendship\nfrier\nfrieseite\nFriesian\nFriesic\nFriesish\nfrieze\nfriezer\nfriezy\nfrig\nfrigate\nfrigatoon\nfriggle\nfright\nfrightable\nfrighten\nfrightenable\nfrightened\nfrightenedly\nfrightenedness\nfrightener\nfrightening\nfrighteningly\nfrighter\nfrightful\nfrightfully\nfrightfulness\nfrightless\nfrightment\nfrighty\nfrigid\nFrigidaire\nfrigidarium\nfrigidity\nfrigidly\nfrigidness\nfrigiferous\nfrigolabile\nfrigoric\nfrigorific\nfrigorifical\nfrigorify\nfrigorimeter\nfrigostable\nfrigotherapy\nFrija\nfrijol\nfrijolillo\nfrijolito\nfrike\nfrill\nfrillback\nfrilled\nfriller\nfrillery\nfrillily\nfrilliness\nfrilling\nfrilly\nfrim\nFrimaire\nfringe\nfringed\nfringeflower\nfringeless\nfringelet\nfringent\nfringepod\nFringetail\nFringilla\nfringillaceous\nFringillidae\nfringilliform\nFringilliformes\nfringilline\nfringilloid\nfringing\nfringy\nfripperer\nfrippery\nfrisca\nFrisesomorum\nfrisette\nFrisian\nFrisii\nfrisk\nfrisker\nfrisket\nfriskful\nfriskily\nfriskiness\nfrisking\nfriskingly\nfrisky\nfrisolee\nfrison\nfrist\nfrisure\nfrit\nfrith\nfrithborh\nfrithbot\nfrithles\nfrithsoken\nfrithstool\nfrithwork\nFritillaria\nfritillary\nfritt\nfritter\nfritterer\nFritz\nFriulian\nfrivol\nfrivoler\nfrivolism\nfrivolist\nfrivolity\nfrivolize\nfrivolous\nfrivolously\nfrivolousness\nfrixion\nfriz\nfrize\nfrizer\nfrizz\nfrizzer\nfrizzily\nfrizziness\nfrizzing\nfrizzle\nfrizzler\nfrizzly\nfrizzy\nfro\nfrock\nfrocking\nfrockless\nfrocklike\nfrockmaker\nfroe\nFroebelian\nFroebelism\nFroebelist\nfrog\nfrogbit\nfrogeater\nfrogeye\nfrogface\nfrogfish\nfrogflower\nfrogfoot\nfrogged\nfroggery\nfrogginess\nfrogging\nfroggish\nfroggy\nfroghood\nfroghopper\nfrogland\nfrogleaf\nfrogleg\nfroglet\nfroglike\nfrogling\nfrogman\nfrogmouth\nfrognose\nfrogskin\nfrogstool\nfrogtongue\nfrogwort\nfroise\nfrolic\nfrolicful\nfrolicker\nfrolicky\nfrolicly\nfrolicness\nfrolicsome\nfrolicsomely\nfrolicsomeness\nfrom\nfromward\nfromwards\nfrond\nfrondage\nfronded\nfrondent\nfrondesce\nfrondescence\nfrondescent\nfrondiferous\nfrondiform\nfrondigerous\nfrondivorous\nfrondlet\nfrondose\nfrondosely\nfrondous\nfront\nfrontad\nfrontage\nfrontager\nfrontal\nfrontalis\nfrontality\nfrontally\nfrontbencher\nfronted\nfronter\nfrontier\nfrontierlike\nfrontierman\nfrontiersman\nFrontignan\nfronting\nfrontingly\nFrontirostria\nfrontispiece\nfrontless\nfrontlessly\nfrontlessness\nfrontlet\nfrontoauricular\nfrontoethmoid\nfrontogenesis\nfrontolysis\nfrontomallar\nfrontomaxillary\nfrontomental\nfrontonasal\nfrontooccipital\nfrontoorbital\nfrontoparietal\nfrontopontine\nfrontosphenoidal\nfrontosquamosal\nfrontotemporal\nfrontozygomatic\nfrontpiece\nfrontsman\nfrontstall\nfrontward\nfrontways\nfrontwise\nfroom\nfrore\nfrory\nfrosh\nfrost\nfrostation\nfrostbird\nfrostbite\nfrostbow\nfrosted\nfroster\nfrostfish\nfrostflower\nfrostily\nfrostiness\nfrosting\nfrostless\nfrostlike\nfrostproof\nfrostproofing\nfrostroot\nfrostweed\nfrostwork\nfrostwort\nfrosty\nfrot\nfroth\nfrother\nFrothi\nfrothily\nfrothiness\nfrothing\nfrothless\nfrothsome\nfrothy\nfrotton\nfroufrou\nfrough\nfroughy\nfrounce\nfrounceless\nfrow\nfroward\nfrowardly\nfrowardness\nfrower\nfrowl\nfrown\nfrowner\nfrownful\nfrowning\nfrowningly\nfrownless\nfrowny\nfrowst\nfrowstily\nfrowstiness\nfrowsty\nfrowy\nfrowze\nfrowzily\nfrowziness\nfrowzled\nfrowzly\nfrowzy\nfroze\nfrozen\nfrozenhearted\nfrozenly\nfrozenness\nfruchtschiefer\nfructed\nfructescence\nfructescent\nfructicultural\nfructiculture\nFructidor\nfructiferous\nfructiferously\nfructification\nfructificative\nfructifier\nfructiform\nfructify\nfructiparous\nfructivorous\nfructose\nfructoside\nfructuary\nfructuosity\nfructuous\nfructuously\nfructuousness\nfrugal\nfrugalism\nfrugalist\nfrugality\nfrugally\nfrugalness\nfruggan\nFrugivora\nfrugivorous\nfruit\nfruitade\nfruitage\nfruitarian\nfruitarianism\nfruitcake\nfruited\nfruiter\nfruiterer\nfruiteress\nfruitery\nfruitful\nfruitfullness\nfruitfully\nfruitgrower\nfruitgrowing\nfruitiness\nfruiting\nfruition\nfruitist\nfruitive\nfruitless\nfruitlessly\nfruitlessness\nfruitlet\nfruitling\nfruitstalk\nfruittime\nfruitwise\nfruitwoman\nfruitwood\nfruitworm\nfruity\nfrumentaceous\nfrumentarious\nfrumentation\nfrumenty\nfrump\nfrumpery\nfrumpily\nfrumpiness\nfrumpish\nfrumpishly\nfrumpishness\nfrumple\nfrumpy\nfrush\nfrustrate\nfrustrately\nfrustrater\nfrustration\nfrustrative\nfrustratory\nfrustule\nfrustulent\nfrustulose\nfrustum\nfrutescence\nfrutescent\nfruticetum\nfruticose\nfruticous\nfruticulose\nfrutify\nfry\nfryer\nfu\nfub\nfubby\nfubsy\nFucaceae\nfucaceous\nFucales\nfucate\nfucation\nfucatious\nFuchsia\nFuchsian\nfuchsin\nfuchsine\nfuchsinophil\nfuchsinophilous\nfuchsite\nfuchsone\nfuci\nfucinita\nfuciphagous\nfucoid\nfucoidal\nFucoideae\nfucosan\nfucose\nfucous\nfucoxanthin\nfucus\nfud\nfuddle\nfuddler\nfuder\nfudge\nfudger\nfudgy\nFuegian\nfuel\nfueler\nfuelizer\nfuerte\nfuff\nfuffy\nfugacious\nfugaciously\nfugaciousness\nfugacity\nfugal\nfugally\nfuggy\nfugient\nfugitate\nfugitation\nfugitive\nfugitively\nfugitiveness\nfugitivism\nfugitivity\nfugle\nfugleman\nfuglemanship\nfugler\nfugu\nfugue\nfuguist\nfuidhir\nfuirdays\nFuirena\nfuji\nFulah\nfulciform\nfulcral\nfulcrate\nfulcrum\nfulcrumage\nfulfill\nfulfiller\nfulfillment\nFulfulde\nfulgent\nfulgently\nfulgentness\nfulgid\nfulgide\nfulgidity\nfulgor\nFulgora\nfulgorid\nFulgoridae\nFulgoroidea\nfulgorous\nFulgur\nfulgural\nfulgurant\nfulgurantly\nfulgurata\nfulgurate\nfulgurating\nfulguration\nfulgurator\nfulgurite\nfulgurous\nfulham\nFulica\nFulicinae\nfulicine\nfuliginosity\nfuliginous\nfuliginously\nfuliginousness\nFuligula\nFuligulinae\nfuliguline\nfulk\nfull\nfullam\nfullback\nfuller\nfullering\nfullery\nfullface\nfullhearted\nfulling\nfullish\nfullmouth\nfullmouthed\nfullmouthedly\nfullness\nfullom\nFullonian\nfully\nfulmar\nFulmarus\nfulmicotton\nfulminancy\nfulminant\nfulminate\nfulminating\nfulmination\nfulminator\nfulminatory\nfulmine\nfulmineous\nfulminic\nfulminous\nfulminurate\nfulminuric\nfulsome\nfulsomely\nfulsomeness\nfulth\nFultz\nFulup\nfulvene\nfulvescent\nfulvid\nfulvidness\nfulvous\nfulwa\nfulyie\nfulzie\nfum\nfumacious\nfumado\nfumage\nfumagine\nFumago\nfumarate\nFumaria\nFumariaceae\nfumariaceous\nfumaric\nfumarine\nfumarium\nfumaroid\nfumaroidal\nfumarole\nfumarolic\nfumaryl\nfumatorium\nfumatory\nfumble\nfumbler\nfumbling\nfume\nfumeless\nfumer\nfumeroot\nfumet\nfumette\nfumewort\nfumiduct\nfumiferous\nfumigant\nfumigate\nfumigation\nfumigator\nfumigatorium\nfumigatory\nfumily\nfuminess\nfuming\nfumingly\nfumistery\nfumitory\nfumose\nfumosity\nfumous\nfumously\nfumy\nfun\nfunambulate\nfunambulation\nfunambulator\nfunambulatory\nfunambulic\nfunambulism\nfunambulist\nfunambulo\nFunaria\nFunariaceae\nfunariaceous\nfunction\nfunctional\nfunctionalism\nfunctionalist\nfunctionality\nfunctionalize\nfunctionally\nfunctionarism\nfunctionary\nfunctionate\nfunctionation\nfunctionize\nfunctionless\nfund\nfundable\nfundal\nfundament\nfundamental\nfundamentalism\nfundamentalist\nfundamentality\nfundamentally\nfundamentalness\nfundatorial\nfundatrix\nfunded\nfunder\nfundholder\nfundi\nfundic\nfundiform\nfunditor\nfundless\nfundmonger\nfundmongering\nfunds\nFundulinae\nfunduline\nFundulus\nfundungi\nfundus\nfunebrial\nfuneral\nfuneralize\nfunerary\nfunereal\nfunereally\nfunest\nfungaceous\nfungal\nFungales\nfungate\nfungation\nfungi\nFungia\nfungian\nfungibility\nfungible\nfungic\nfungicidal\nfungicide\nfungicolous\nfungiferous\nfungiform\nfungilliform\nfungin\nfungistatic\nfungivorous\nfungo\nfungoid\nfungoidal\nfungological\nfungologist\nfungology\nfungose\nfungosity\nfungous\nfungus\nfungused\nfunguslike\nfungusy\nfunicle\nfunicular\nfuniculate\nfunicule\nfuniculitis\nfuniculus\nfuniform\nfunipendulous\nfunis\nFunje\nfunk\nfunker\nFunkia\nfunkiness\nfunky\nfunmaker\nfunmaking\nfunnel\nfunneled\nfunnelform\nfunnellike\nfunnelwise\nfunnily\nfunniment\nfunniness\nfunny\nfunnyman\nfunori\nfunt\nFuntumia\nFur\nfur\nfuracious\nfuraciousness\nfuracity\nfural\nfuraldehyde\nfuran\nfuranoid\nfurazan\nfurazane\nfurbelow\nfurbish\nfurbishable\nfurbisher\nfurbishment\nfurca\nfurcal\nfurcate\nfurcately\nfurcation\nFurcellaria\nfurcellate\nfurciferine\nfurciferous\nfurciform\nFurcraea\nfurcula\nfurcular\nfurculum\nfurdel\nFurfooz\nfurfur\nfurfuraceous\nfurfuraceously\nfurfural\nfurfuralcohol\nfurfuraldehyde\nfurfuramide\nfurfuran\nfurfuration\nfurfurine\nfurfuroid\nfurfurole\nfurfurous\nfurfuryl\nfurfurylidene\nfuriant\nfuribund\nfuried\nFuries\nfurify\nfuril\nfurilic\nfuriosa\nfuriosity\nfurioso\nfurious\nfuriously\nfuriousness\nfurison\nfurl\nfurlable\nFurlan\nfurler\nfurless\nfurlong\nfurlough\nfurnace\nfurnacelike\nfurnaceman\nfurnacer\nfurnacite\nfurnage\nFurnariidae\nFurnariides\nFurnarius\nfurner\nfurnish\nfurnishable\nfurnished\nfurnisher\nfurnishing\nfurnishment\nfurniture\nfurnitureless\nfurodiazole\nfuroic\nfuroid\nfuroin\nfurole\nfuromethyl\nfuromonazole\nfuror\nfurore\nfurphy\nfurred\nfurrier\nfurriered\nfurriery\nfurrily\nfurriness\nfurring\nfurrow\nfurrower\nfurrowless\nfurrowlike\nfurrowy\nfurry\nfurstone\nfurther\nfurtherance\nfurtherer\nfurtherest\nfurtherly\nfurthermore\nfurthermost\nfurthersome\nfurthest\nfurtive\nfurtively\nfurtiveness\nFurud\nfuruncle\nfuruncular\nfurunculoid\nfurunculosis\nfurunculous\nfury\nfuryl\nfurze\nfurzechat\nfurzed\nfurzeling\nfurzery\nfurzetop\nfurzy\nfusain\nfusarial\nfusariose\nfusariosis\nFusarium\nfusarole\nfusate\nfusc\nfuscescent\nfuscin\nfuscohyaline\nfuscous\nfuse\nfuseboard\nfused\nfusee\nfuselage\nfuseplug\nfusht\nfusibility\nfusible\nfusibleness\nfusibly\nFusicladium\nFusicoccum\nfusiform\nFusiformis\nfusil\nfusilier\nfusillade\nfusilly\nfusinist\nfusion\nfusional\nfusionism\nfusionist\nfusionless\nfusoid\nfuss\nfusser\nfussification\nfussify\nfussily\nfussiness\nfussock\nfussy\nfust\nfustanella\nfustee\nfusteric\nfustet\nfustian\nfustianish\nfustianist\nfustianize\nfustic\nfustigate\nfustigation\nfustigator\nfustigatory\nfustilugs\nfustily\nfustin\nfustiness\nfustle\nfusty\nFusulina\nfusuma\nfusure\nFusus\nfut\nfutchel\nfute\nfuthorc\nfutile\nfutilely\nfutileness\nfutilitarian\nfutilitarianism\nfutility\nfutilize\nfuttermassel\nfuttock\nfutural\nfuture\nfutureless\nfutureness\nfuturic\nfuturism\nfuturist\nfuturistic\nfuturition\nfuturity\nfuturize\nfutwa\nfuye\nfuze\nfuzz\nfuzzball\nfuzzily\nfuzziness\nfuzzy\nfyke\nfylfot\nfyrd\nG\ng\nGa\nga\ngab\ngabardine\ngabbard\ngabber\ngabble\ngabblement\ngabbler\ngabbro\ngabbroic\ngabbroid\ngabbroitic\ngabby\nGabe\ngabelle\ngabelled\ngabelleman\ngabeller\ngaberdine\ngaberlunzie\ngabgab\ngabi\ngabion\ngabionade\ngabionage\ngabioned\ngablatores\ngable\ngableboard\ngablelike\ngablet\ngablewise\ngablock\nGaboon\nGabriel\nGabriella\nGabrielrache\nGabunese\ngaby\nGad\ngad\nGadaba\ngadabout\nGadarene\nGadaria\ngadbee\ngadbush\nGaddang\ngadded\ngadder\nGaddi\ngaddi\ngadding\ngaddingly\ngaddish\ngaddishness\ngade\ngadfly\ngadge\ngadger\ngadget\ngadid\nGadidae\ngadinine\nGaditan\ngadling\ngadman\ngadoid\nGadoidea\ngadolinia\ngadolinic\ngadolinite\ngadolinium\ngadroon\ngadroonage\nGadsbodikins\nGadsbud\nGadslid\ngadsman\nGadswoons\ngaduin\nGadus\ngadwall\nGadzooks\nGael\nGaeldom\nGaelic\nGaelicism\nGaelicist\nGaelicization\nGaelicize\nGaeltacht\ngaen\nGaertnerian\ngaet\nGaetulan\nGaetuli\nGaetulian\ngaff\ngaffe\ngaffer\nGaffkya\ngaffle\ngaffsman\ngag\ngagate\ngage\ngageable\ngagee\ngageite\ngagelike\ngager\ngagership\ngagger\ngaggery\ngaggle\ngaggler\ngagman\ngagor\ngagroot\ngagtooth\ngahnite\nGahrwali\nGaia\ngaiassa\nGaidropsaridae\ngaiety\nGail\nGaillardia\ngaily\ngain\ngainable\ngainage\ngainbirth\ngaincall\ngaincome\ngaine\ngainer\ngainful\ngainfully\ngainfulness\ngaining\ngainless\ngainlessness\ngainliness\ngainly\ngains\ngainsay\ngainsayer\ngainset\ngainsome\ngainspeaker\ngainspeaking\ngainst\ngainstrive\ngainturn\ngaintwist\ngainyield\ngair\ngairfish\ngaisling\ngait\ngaited\ngaiter\ngaiterless\ngaiting\ngaize\ngaj\ngal\ngala\nGalacaceae\ngalactagogue\ngalactagoguic\ngalactan\ngalactase\ngalactemia\ngalacthidrosis\nGalactia\ngalactic\ngalactidrosis\ngalactite\ngalactocele\ngalactodendron\ngalactodensimeter\ngalactogenetic\ngalactohemia\ngalactoid\ngalactolipide\ngalactolipin\ngalactolysis\ngalactolytic\ngalactoma\ngalactometer\ngalactometry\ngalactonic\ngalactopathy\ngalactophagist\ngalactophagous\ngalactophlebitis\ngalactophlysis\ngalactophore\ngalactophoritis\ngalactophorous\ngalactophthysis\ngalactophygous\ngalactopoiesis\ngalactopoietic\ngalactopyra\ngalactorrhea\ngalactorrhoea\ngalactoscope\ngalactose\ngalactoside\ngalactosis\ngalactostasis\ngalactosuria\ngalactotherapy\ngalactotrophy\ngalacturia\ngalagala\nGalaginae\nGalago\ngalah\ngalanas\ngalanga\ngalangin\ngalant\nGalanthus\ngalantine\ngalany\ngalapago\nGalatae\ngalatea\nGalatian\nGalatic\ngalatotrophic\nGalax\ngalaxian\nGalaxias\nGalaxiidae\ngalaxy\ngalban\ngalbanum\nGalbula\nGalbulae\nGalbulidae\nGalbulinae\ngalbulus\nGalcha\nGalchic\nGale\ngale\ngalea\ngaleage\ngaleate\ngaleated\ngalee\ngaleeny\nGalega\ngalegine\nGalei\ngaleid\nGaleidae\ngaleiform\ngalempung\nGalen\ngalena\nGalenian\nGalenic\ngalenic\nGalenical\ngalenical\nGalenism\nGalenist\ngalenite\ngalenobismutite\ngalenoid\nGaleodes\nGaleodidae\ngaleoid\nGaleopithecus\nGaleopsis\nGaleorchis\nGaleorhinidae\nGaleorhinus\ngaleproof\ngalera\ngalericulate\ngalerum\ngalerus\nGalesaurus\ngalet\nGaleus\ngalewort\ngaley\nGalga\ngalgal\nGalgulidae\ngali\nGalibi\nGalician\nGalictis\nGalidia\nGalidictis\nGalik\nGalilean\ngalilee\ngalimatias\ngalingale\nGalinsoga\ngaliongee\ngaliot\ngalipidine\ngalipine\ngalipoidin\ngalipoidine\ngalipoipin\ngalipot\nGalium\ngall\nGalla\ngalla\ngallacetophenone\ngallah\ngallanilide\ngallant\ngallantize\ngallantly\ngallantness\ngallantry\ngallate\ngallature\ngallberry\ngallbush\ngalleass\ngalled\nGallegan\ngallein\ngalleon\ngaller\nGalleria\ngallerian\ngalleried\nGalleriidae\ngallery\ngallerylike\ngallet\ngalley\ngalleylike\ngalleyman\ngalleyworm\ngallflower\ngallfly\nGalli\ngalliambic\ngalliambus\nGallian\ngalliard\ngalliardise\ngalliardly\ngalliardness\nGallic\ngallic\nGallican\nGallicanism\nGallicism\nGallicization\nGallicize\nGallicizer\ngallicola\nGallicolae\ngallicole\ngallicolous\ngalliferous\nGallification\ngallification\ngalliform\nGalliformes\nGallify\ngalligaskin\ngallimaufry\nGallinaceae\ngallinacean\nGallinacei\ngallinaceous\nGallinae\nGallinago\ngallinazo\ngalline\ngalling\ngallingly\ngallingness\ngallinipper\nGallinula\ngallinule\nGallinulinae\ngallinuline\ngallipot\nGallirallus\ngallisin\ngallium\ngallivant\ngallivanter\ngallivat\ngallivorous\ngalliwasp\ngallnut\ngallocyanin\ngallocyanine\ngalloflavine\ngalloglass\nGalloman\nGallomania\nGallomaniac\ngallon\ngallonage\ngalloner\ngalloon\ngallooned\ngallop\ngallopade\ngalloper\nGalloperdix\nGallophile\nGallophilism\nGallophobe\nGallophobia\ngalloping\ngalloptious\ngallotannate\ngallotannic\ngallotannin\ngallous\nGallovidian\nGalloway\ngalloway\ngallowglass\ngallows\ngallowsmaker\ngallowsness\ngallowsward\ngallstone\nGallus\ngalluses\ngallweed\ngallwort\ngally\ngallybagger\ngallybeggar\ngallycrow\nGaloisian\ngaloot\ngalop\ngalore\ngalosh\ngalp\ngalravage\ngalravitch\ngalt\nGaltonia\nGaltonian\ngaluchat\ngalumph\ngalumptious\nGalusha\ngaluth\ngalvanic\ngalvanical\ngalvanically\ngalvanism\ngalvanist\ngalvanization\ngalvanize\ngalvanized\ngalvanizer\ngalvanocauterization\ngalvanocautery\ngalvanocontractility\ngalvanofaradization\ngalvanoglyph\ngalvanoglyphy\ngalvanograph\ngalvanographic\ngalvanography\ngalvanologist\ngalvanology\ngalvanolysis\ngalvanomagnet\ngalvanomagnetic\ngalvanomagnetism\ngalvanometer\ngalvanometric\ngalvanometrical\ngalvanometrically\ngalvanometry\ngalvanoplastic\ngalvanoplastical\ngalvanoplastically\ngalvanoplastics\ngalvanoplasty\ngalvanopsychic\ngalvanopuncture\ngalvanoscope\ngalvanoscopic\ngalvanoscopy\ngalvanosurgery\ngalvanotactic\ngalvanotaxis\ngalvanotherapy\ngalvanothermometer\ngalvanothermy\ngalvanotonic\ngalvanotropic\ngalvanotropism\ngalvayne\ngalvayning\nGalways\nGalwegian\ngalyac\ngalyak\ngalziekte\ngam\ngamahe\nGamaliel\ngamashes\ngamasid\nGamasidae\nGamasoidea\ngamb\ngamba\ngambade\ngambado\ngambang\ngambeer\ngambeson\ngambet\ngambette\ngambia\ngambier\ngambist\ngambit\ngamble\ngambler\ngamblesome\ngamblesomeness\ngambling\ngambodic\ngamboge\ngambogian\ngambogic\ngamboised\ngambol\ngambrel\ngambreled\ngambroon\nGambusia\ngamdeboo\ngame\ngamebag\ngameball\ngamecock\ngamecraft\ngameful\ngamekeeper\ngamekeeping\ngamelang\ngameless\ngamelike\nGamelion\ngamelotte\ngamely\ngamene\ngameness\ngamesome\ngamesomely\ngamesomeness\ngamester\ngamestress\ngametal\ngametange\ngametangium\ngamete\ngametic\ngametically\ngametocyst\ngametocyte\ngametogenesis\ngametogenic\ngametogenous\ngametogeny\ngametogonium\ngametogony\ngametoid\ngametophagia\ngametophore\ngametophyll\ngametophyte\ngametophytic\ngamic\ngamily\ngamin\ngaminesque\ngaminess\ngaming\ngaminish\ngamma\ngammacism\ngammacismus\ngammadion\ngammarid\nGammaridae\ngammarine\ngammaroid\nGammarus\ngammation\ngammelost\ngammer\ngammerel\ngammerstang\nGammexane\ngammick\ngammock\ngammon\ngammoner\ngammoning\ngammy\ngamobium\ngamodesmic\ngamodesmy\ngamogenesis\ngamogenetic\ngamogenetical\ngamogenetically\ngamogony\nGamolepis\ngamomania\ngamont\nGamopetalae\ngamopetalous\ngamophagia\ngamophagy\ngamophyllous\ngamori\ngamosepalous\ngamostele\ngamostelic\ngamostely\ngamotropic\ngamotropism\ngamp\ngamphrel\ngamut\ngamy\ngan\nganam\nganancial\nGanapati\nganch\nGanda\ngander\nganderess\ngandergoose\ngandermooner\nganderteeth\nGandhara\nGandharva\nGandhiism\nGandhism\nGandhist\ngandul\ngandum\ngandurah\ngane\nganef\ngang\nGanga\nganga\nGangamopteris\ngangan\ngangava\ngangboard\ngangdom\ngange\nganger\nGangetic\nganggang\nganging\ngangism\ngangland\nganglander\nganglia\ngangliac\nganglial\ngangliar\ngangliasthenia\ngangliate\ngangliated\ngangliectomy\ngangliform\ngangliitis\ngangling\nganglioblast\ngangliocyte\nganglioform\nganglioid\nganglioma\nganglion\nganglionary\nganglionate\nganglionectomy\nganglioneural\nganglioneure\nganglioneuroma\nganglioneuron\nganglionic\nganglionitis\nganglionless\nganglioplexus\ngangly\ngangman\ngangmaster\ngangplank\ngangrel\ngangrene\ngangrenescent\ngangrenous\ngangsman\ngangster\ngangsterism\ngangtide\ngangue\nGanguela\ngangway\ngangwayman\nganister\nganja\nganner\ngannet\nGanocephala\nganocephalan\nganocephalous\nganodont\nGanodonta\nGanodus\nganoid\nganoidal\nganoidean\nGanoidei\nganoidian\nganoin\nganomalite\nganophyllite\nganosis\nGanowanian\ngansel\ngansey\ngansy\ngant\nganta\ngantang\ngantlet\ngantline\nganton\ngantries\ngantry\ngantryman\ngantsl\nGanymede\nGanymedes\nganza\nganzie\ngaol\ngaolbird\ngaoler\nGaon\nGaonate\nGaonic\ngap\nGapa\ngapa\ngape\ngaper\ngapes\ngapeseed\ngapeworm\ngaping\ngapingly\ngapingstock\ngapo\ngappy\ngapy\ngar\ngara\ngarabato\ngarad\ngarage\ngarageman\nGaramond\ngarance\ngarancine\ngarapata\ngarava\ngaravance\ngarawi\ngarb\ngarbage\ngarbardine\ngarbel\ngarbell\ngarbill\ngarble\ngarbleable\ngarbler\ngarbless\ngarbling\ngarboard\ngarboil\ngarbure\ngarce\nGarcinia\ngardant\ngardeen\ngarden\ngardenable\ngardencraft\ngardened\ngardener\ngardenership\ngardenesque\ngardenful\ngardenhood\nGardenia\ngardenin\ngardening\ngardenize\ngardenless\ngardenlike\ngardenly\ngardenmaker\ngardenmaking\ngardenwards\ngardenwise\ngardeny\ngarderobe\ngardevin\ngardy\ngardyloo\ngare\ngarefowl\ngareh\ngaretta\ngarewaite\ngarfish\ngarganey\nGargantua\nGargantuan\ngarget\ngargety\ngargle\ngargol\ngargoyle\ngargoyled\ngargoyley\ngargoylish\ngargoylishly\ngargoylism\nGarhwali\ngarial\ngariba\ngaribaldi\nGaribaldian\ngarish\ngarishly\ngarishness\ngarland\ngarlandage\ngarlandless\ngarlandlike\ngarlandry\ngarlandwise\ngarle\ngarlic\ngarlicky\ngarliclike\ngarlicmonger\ngarlicwort\ngarment\ngarmentless\ngarmentmaker\ngarmenture\ngarmentworker\ngarn\ngarnel\ngarner\ngarnerage\ngarnet\ngarnetberry\ngarneter\ngarnetiferous\ngarnets\ngarnett\ngarnetter\ngarnetwork\ngarnetz\ngarnice\ngarniec\ngarnierite\ngarnish\ngarnishable\ngarnished\ngarnishee\ngarnisheement\ngarnisher\ngarnishment\ngarnishry\ngarniture\nGaro\ngaroo\ngarookuh\ngarrafa\ngarran\nGarret\ngarret\ngarreted\ngarreteer\ngarretmaster\ngarrison\nGarrisonian\nGarrisonism\ngarrot\ngarrote\ngarroter\nGarrulinae\ngarruline\ngarrulity\ngarrulous\ngarrulously\ngarrulousness\nGarrulus\ngarrupa\nGarrya\nGarryaceae\ngarse\nGarshuni\ngarsil\ngarston\ngarten\ngarter\ngartered\ngartering\ngarterless\ngarth\ngarthman\nGaruda\ngarum\ngarvanzo\ngarvey\ngarvock\nGary\ngas\nGasan\ngasbag\ngascoigny\nGascon\ngasconade\ngasconader\nGasconism\ngascromh\ngaseity\ngaselier\ngaseosity\ngaseous\ngaseousness\ngasfiring\ngash\ngashes\ngashful\ngashliness\ngashly\ngasholder\ngashouse\ngashy\ngasifiable\ngasification\ngasifier\ngasiform\ngasify\ngasket\ngaskin\ngasking\ngaskins\ngasless\ngaslight\ngaslighted\ngaslighting\ngaslit\ngaslock\ngasmaker\ngasman\ngasogenic\ngasoliery\ngasoline\ngasolineless\ngasoliner\ngasometer\ngasometric\ngasometrical\ngasometry\ngasp\nGaspar\ngasparillo\ngasper\ngaspereau\ngaspergou\ngaspiness\ngasping\ngaspingly\ngasproof\ngaspy\ngasser\nGasserian\ngassiness\ngassing\ngassy\ngast\ngastaldite\ngastaldo\ngaster\ngasteralgia\nGasterolichenes\ngasteromycete\nGasteromycetes\ngasteromycetous\nGasterophilus\ngasteropod\nGasteropoda\ngasterosteid\nGasterosteidae\ngasterosteiform\ngasterosteoid\nGasterosteus\ngasterotheca\ngasterothecal\nGasterotricha\ngasterotrichan\ngasterozooid\ngastight\ngastightness\nGastornis\nGastornithidae\ngastradenitis\ngastraea\ngastraead\nGastraeadae\ngastraeal\ngastraeum\ngastral\ngastralgia\ngastralgic\ngastralgy\ngastraneuria\ngastrasthenia\ngastratrophia\ngastrectasia\ngastrectasis\ngastrectomy\ngastrelcosis\ngastric\ngastricism\ngastrilegous\ngastriloquial\ngastriloquism\ngastriloquist\ngastriloquous\ngastriloquy\ngastrin\ngastritic\ngastritis\ngastroadenitis\ngastroadynamic\ngastroalbuminorrhea\ngastroanastomosis\ngastroarthritis\ngastroatonia\ngastroatrophia\ngastroblennorrhea\ngastrocatarrhal\ngastrocele\ngastrocentrous\nGastrochaena\nGastrochaenidae\ngastrocnemial\ngastrocnemian\ngastrocnemius\ngastrocoel\ngastrocolic\ngastrocoloptosis\ngastrocolostomy\ngastrocolotomy\ngastrocolpotomy\ngastrocystic\ngastrocystis\ngastrodialysis\ngastrodiaphanoscopy\ngastrodidymus\ngastrodisk\ngastroduodenal\ngastroduodenitis\ngastroduodenoscopy\ngastroduodenotomy\ngastrodynia\ngastroelytrotomy\ngastroenteralgia\ngastroenteric\ngastroenteritic\ngastroenteritis\ngastroenteroanastomosis\ngastroenterocolitis\ngastroenterocolostomy\ngastroenterological\ngastroenterologist\ngastroenterology\ngastroenteroptosis\ngastroenterostomy\ngastroenterotomy\ngastroepiploic\ngastroesophageal\ngastroesophagostomy\ngastrogastrotomy\ngastrogenital\ngastrograph\ngastrohelcosis\ngastrohepatic\ngastrohepatitis\ngastrohydrorrhea\ngastrohyperneuria\ngastrohypertonic\ngastrohysterectomy\ngastrohysteropexy\ngastrohysterorrhaphy\ngastrohysterotomy\ngastroid\ngastrointestinal\ngastrojejunal\ngastrojejunostomy\ngastrolater\ngastrolatrous\ngastrolienal\ngastrolith\nGastrolobium\ngastrologer\ngastrological\ngastrologist\ngastrology\ngastrolysis\ngastrolytic\ngastromalacia\ngastromancy\ngastromelus\ngastromenia\ngastromyces\ngastromycosis\ngastromyxorrhea\ngastronephritis\ngastronome\ngastronomer\ngastronomic\ngastronomical\ngastronomically\ngastronomist\ngastronomy\ngastronosus\ngastropancreatic\ngastropancreatitis\ngastroparalysis\ngastroparesis\ngastroparietal\ngastropathic\ngastropathy\ngastroperiodynia\ngastropexy\ngastrophile\ngastrophilism\ngastrophilist\ngastrophilite\nGastrophilus\ngastrophrenic\ngastrophthisis\ngastroplasty\ngastroplenic\ngastropleuritis\ngastroplication\ngastropneumatic\ngastropneumonic\ngastropod\nGastropoda\ngastropodan\ngastropodous\ngastropore\ngastroptosia\ngastroptosis\ngastropulmonary\ngastropulmonic\ngastropyloric\ngastrorrhagia\ngastrorrhaphy\ngastrorrhea\ngastroschisis\ngastroscope\ngastroscopic\ngastroscopy\ngastrosoph\ngastrosopher\ngastrosophy\ngastrospasm\ngastrosplenic\ngastrostaxis\ngastrostegal\ngastrostege\ngastrostenosis\ngastrostomize\nGastrostomus\ngastrostomy\ngastrosuccorrhea\ngastrotheca\ngastrothecal\ngastrotome\ngastrotomic\ngastrotomy\nGastrotricha\ngastrotrichan\ngastrotubotomy\ngastrotympanites\ngastrovascular\ngastroxynsis\ngastrozooid\ngastrula\ngastrular\ngastrulate\ngastrulation\ngasworker\ngasworks\ngat\ngata\ngatch\ngatchwork\ngate\ngateado\ngateage\ngated\ngatehouse\ngatekeeper\ngateless\ngatelike\ngatemaker\ngateman\ngatepost\ngater\ngatetender\ngateward\ngatewards\ngateway\ngatewayman\ngatewise\ngatewoman\ngateworks\ngatewright\nGatha\ngather\ngatherable\ngatherer\ngathering\nGathic\ngating\ngator\ngatter\ngatteridge\ngau\ngaub\ngauby\ngauche\ngauchely\ngaucheness\ngaucherie\nGaucho\ngaud\ngaudery\nGaudete\ngaudful\ngaudily\ngaudiness\ngaudless\ngaudsman\ngaudy\ngaufer\ngauffer\ngauffered\ngauffre\ngaufre\ngaufrette\ngauge\ngaugeable\ngauger\ngaugership\ngauging\nGaul\ngaulding\ngauleiter\nGaulic\ngaulin\nGaulish\nGaullism\nGaullist\nGault\ngault\ngaulter\ngaultherase\nGaultheria\ngaultherin\ngaum\ngaumish\ngaumless\ngaumlike\ngaumy\ngaun\ngaunt\ngaunted\ngauntlet\ngauntleted\ngauntly\ngauntness\ngauntry\ngaunty\ngaup\ngaupus\ngaur\nGaura\nGaurian\ngaus\ngauss\ngaussage\ngaussbergite\nGaussian\ngauster\ngausterer\ngaut\ngauteite\ngauze\ngauzelike\ngauzewing\ngauzily\ngauziness\ngauzy\ngavall\ngave\ngavel\ngaveler\ngavelkind\ngavelkinder\ngavelman\ngavelock\nGavia\nGaviae\ngavial\nGavialis\ngavialoid\nGaviiformes\ngavotte\ngavyuti\ngaw\ngawby\ngawcie\ngawk\ngawkhammer\ngawkihood\ngawkily\ngawkiness\ngawkish\ngawkishly\ngawkishness\ngawky\ngawm\ngawn\ngawney\ngawsie\ngay\ngayal\ngayatri\ngaybine\ngaycat\ngaydiang\ngayish\nGaylussacia\ngaylussite\ngayment\ngayness\nGaypoo\ngaysome\ngaywings\ngayyou\ngaz\ngazabo\ngazangabin\nGazania\ngaze\ngazebo\ngazee\ngazehound\ngazel\ngazeless\nGazella\ngazelle\ngazelline\ngazement\ngazer\ngazettal\ngazette\ngazetteer\ngazetteerage\ngazetteerish\ngazetteership\ngazi\ngazing\ngazingly\ngazingstock\ngazogene\ngazon\ngazophylacium\ngazy\ngazzetta\nGe\nge\nGeadephaga\ngeadephagous\ngeal\ngean\ngeanticlinal\ngeanticline\ngear\ngearbox\ngeared\ngearing\ngearksutite\ngearless\ngearman\ngearset\ngearshift\ngearwheel\ngease\ngeason\nGeaster\nGeat\ngeat\nGeatas\ngebang\ngebanga\ngebbie\ngebur\nGecarcinidae\nGecarcinus\ngeck\ngecko\ngeckoid\ngeckotian\ngeckotid\nGeckotidae\ngeckotoid\nGed\nged\ngedackt\ngedanite\ngedder\ngedeckt\ngedecktwork\nGederathite\nGederite\ngedrite\nGee\ngee\ngeebong\ngeebung\nGeechee\ngeejee\ngeek\ngeelbec\ngeeldikkop\ngeelhout\ngeepound\ngeerah\ngeest\ngeet\nGeez\ngeezer\nGegenschein\ngegg\ngeggee\ngegger\ngeggery\nGeheimrat\nGehenna\ngehlenite\nGeikia\ngeikielite\ngein\ngeira\nGeisenheimer\ngeisha\ngeison\ngeisotherm\ngeisothermal\nGeissoloma\nGeissolomataceae\nGeissolomataceous\nGeissorhiza\ngeissospermin\ngeissospermine\ngeitjie\ngeitonogamous\ngeitonogamy\nGekko\nGekkones\ngekkonid\nGekkonidae\ngekkonoid\nGekkota\ngel\ngelable\ngelada\ngelandejump\ngelandelaufer\ngelandesprung\nGelasian\nGelasimus\ngelastic\nGelastocoridae\ngelatification\ngelatigenous\ngelatin\ngelatinate\ngelatination\ngelatined\ngelatiniferous\ngelatiniform\ngelatinify\ngelatinigerous\ngelatinity\ngelatinizability\ngelatinizable\ngelatinization\ngelatinize\ngelatinizer\ngelatinobromide\ngelatinochloride\ngelatinoid\ngelatinotype\ngelatinous\ngelatinously\ngelatinousness\ngelation\ngelatose\ngeld\ngeldability\ngeldable\ngeldant\ngelder\ngelding\nGelechia\ngelechiid\nGelechiidae\nGelfomino\ngelid\nGelidiaceae\ngelidity\nGelidium\ngelidly\ngelidness\ngelignite\ngelilah\ngelinotte\ngell\nGellert\ngelly\ngelogenic\ngelong\ngeloscopy\ngelose\ngelosin\ngelotherapy\ngelotometer\ngelotoscopy\ngelototherapy\ngelsemic\ngelsemine\ngelseminic\ngelseminine\nGelsemium\ngelt\ngem\nGemara\nGemaric\nGemarist\ngematria\ngematrical\ngemauve\ngemel\ngemeled\ngemellione\ngemellus\ngeminate\ngeminated\ngeminately\ngemination\ngeminative\nGemini\nGeminid\ngeminiflorous\ngeminiform\ngeminous\nGemitores\ngemitorial\ngemless\ngemlike\nGemma\ngemma\ngemmaceous\ngemmae\ngemmate\ngemmation\ngemmative\ngemmeous\ngemmer\ngemmiferous\ngemmiferousness\ngemmification\ngemmiform\ngemmily\ngemminess\nGemmingia\ngemmipara\ngemmipares\ngemmiparity\ngemmiparous\ngemmiparously\ngemmoid\ngemmology\ngemmula\ngemmulation\ngemmule\ngemmuliferous\ngemmy\ngemot\ngemsbok\ngemsbuck\ngemshorn\ngemul\ngemuti\ngemwork\ngen\ngena\ngenal\ngenapp\ngenapper\ngenarch\ngenarcha\ngenarchaship\ngenarchship\ngendarme\ngendarmery\ngender\ngenderer\ngenderless\nGene\ngene\ngenealogic\ngenealogical\ngenealogically\ngenealogist\ngenealogize\ngenealogizer\ngenealogy\ngenear\ngeneat\ngenecologic\ngenecological\ngenecologically\ngenecologist\ngenecology\ngeneki\ngenep\ngenera\ngenerability\ngenerable\ngenerableness\ngeneral\ngeneralate\ngeneralcy\ngenerale\ngeneralia\nGeneralidad\ngeneralific\ngeneralism\ngeneralissima\ngeneralissimo\ngeneralist\ngeneralistic\ngenerality\ngeneralizable\ngeneralization\ngeneralize\ngeneralized\ngeneralizer\ngenerall\ngenerally\ngeneralness\ngeneralship\ngeneralty\ngenerant\ngenerate\ngenerating\ngeneration\ngenerational\ngenerationism\ngenerative\ngeneratively\ngenerativeness\ngenerator\ngeneratrix\ngeneric\ngenerical\ngenerically\ngenericalness\ngenerification\ngenerosity\ngenerous\ngenerously\ngenerousness\nGenesee\ngeneserine\nGenesiac\nGenesiacal\ngenesial\ngenesic\ngenesiology\ngenesis\nGenesitic\ngenesiurgic\ngenet\ngenethliac\ngenethliacal\ngenethliacally\ngenethliacon\ngenethliacs\ngenethlialogic\ngenethlialogical\ngenethlialogy\ngenethlic\ngenetic\ngenetical\ngenetically\ngeneticism\ngeneticist\ngenetics\ngenetmoil\ngenetous\nGenetrix\ngenetrix\nGenetta\nGeneura\nGeneva\ngeneva\nGenevan\nGenevese\nGenevieve\nGenevois\ngenevoise\ngenial\ngeniality\ngenialize\ngenially\ngenialness\ngenian\ngenic\ngenicular\ngeniculate\ngeniculated\ngeniculately\ngeniculation\ngeniculum\ngenie\ngenii\ngenin\ngenioglossal\ngenioglossi\ngenioglossus\ngeniohyoglossal\ngeniohyoglossus\ngeniohyoid\ngeniolatry\ngenion\ngenioplasty\ngenip\nGenipa\ngenipa\ngenipap\ngenipapada\ngenisaro\nGenista\ngenista\ngenistein\ngenital\ngenitalia\ngenitals\ngenitival\ngenitivally\ngenitive\ngenitocrural\ngenitofemoral\ngenitor\ngenitorial\ngenitory\ngenitourinary\ngeniture\ngenius\ngenizah\ngenizero\nGenny\nGenoa\ngenoblast\ngenoblastic\ngenocidal\ngenocide\nGenoese\ngenoese\ngenom\ngenome\ngenomic\ngenonema\ngenos\ngenotype\ngenotypic\ngenotypical\ngenotypically\nGenoveva\ngenovino\ngenre\ngenro\ngens\ngenson\ngent\ngenteel\ngenteelish\ngenteelism\ngenteelize\ngenteelly\ngenteelness\ngentes\ngenthite\ngentian\nGentiana\nGentianaceae\ngentianaceous\nGentianales\ngentianella\ngentianic\ngentianin\ngentianose\ngentianwort\ngentile\ngentiledom\ngentilesse\ngentilic\ngentilism\ngentilitial\ngentilitian\ngentilitious\ngentility\ngentilization\ngentilize\ngentiobiose\ngentiopicrin\ngentisein\ngentisic\ngentisin\ngentle\ngentlefolk\ngentlehearted\ngentleheartedly\ngentleheartedness\ngentlehood\ngentleman\ngentlemanhood\ngentlemanism\ngentlemanize\ngentlemanlike\ngentlemanlikeness\ngentlemanliness\ngentlemanly\ngentlemanship\ngentlemens\ngentlemouthed\ngentleness\ngentlepeople\ngentleship\ngentlewoman\ngentlewomanhood\ngentlewomanish\ngentlewomanlike\ngentlewomanliness\ngentlewomanly\ngently\ngentman\nGentoo\ngentrice\ngentry\ngenty\ngenu\ngenua\ngenual\ngenuclast\ngenuflect\ngenuflection\ngenuflector\ngenuflectory\ngenuflex\ngenuflexuous\ngenuine\ngenuinely\ngenuineness\ngenus\ngenyantrum\nGenyophrynidae\ngenyoplasty\ngenys\ngeo\ngeoaesthesia\ngeoagronomic\ngeobiologic\ngeobiology\ngeobiont\ngeobios\ngeoblast\ngeobotanic\ngeobotanical\ngeobotanist\ngeobotany\ngeocarpic\ngeocentric\ngeocentrical\ngeocentrically\ngeocentricism\ngeocerite\ngeochemical\ngeochemist\ngeochemistry\ngeochronic\ngeochronology\ngeochrony\nGeococcyx\ngeocoronium\ngeocratic\ngeocronite\ngeocyclic\ngeodaesia\ngeodal\ngeode\ngeodesic\ngeodesical\ngeodesist\ngeodesy\ngeodete\ngeodetic\ngeodetical\ngeodetically\ngeodetician\ngeodetics\ngeodiatropism\ngeodic\ngeodiferous\ngeodist\ngeoduck\ngeodynamic\ngeodynamical\ngeodynamics\ngeoethnic\nGeoff\nGeoffrey\ngeoffroyin\ngeoffroyine\ngeoform\ngeogenesis\ngeogenetic\ngeogenic\ngeogenous\ngeogeny\nGeoglossaceae\nGeoglossum\ngeoglyphic\ngeognosis\ngeognosist\ngeognost\ngeognostic\ngeognostical\ngeognostically\ngeognosy\ngeogonic\ngeogonical\ngeogony\ngeographer\ngeographic\ngeographical\ngeographically\ngeographics\ngeographism\ngeographize\ngeography\ngeohydrologist\ngeohydrology\ngeoid\ngeoidal\ngeoisotherm\ngeolatry\ngeologer\ngeologian\ngeologic\ngeological\ngeologically\ngeologician\ngeologist\ngeologize\ngeology\ngeomagnetic\ngeomagnetician\ngeomagnetics\ngeomagnetist\ngeomalic\ngeomalism\ngeomaly\ngeomance\ngeomancer\ngeomancy\ngeomant\ngeomantic\ngeomantical\ngeomantically\ngeometer\ngeometric\ngeometrical\ngeometrically\ngeometrician\ngeometricize\ngeometrid\nGeometridae\ngeometriform\nGeometrina\ngeometrine\ngeometrize\ngeometroid\nGeometroidea\ngeometry\ngeomoroi\ngeomorphic\ngeomorphist\ngeomorphogenic\ngeomorphogenist\ngeomorphogeny\ngeomorphological\ngeomorphology\ngeomorphy\ngeomyid\nGeomyidae\nGeomys\nGeon\ngeonavigation\ngeonegative\nGeonic\nGeonim\nGeonoma\ngeonoma\ngeonyctinastic\ngeonyctitropic\ngeoparallelotropic\ngeophagia\ngeophagism\ngeophagist\ngeophagous\ngeophagy\nGeophila\ngeophilid\nGeophilidae\ngeophilous\nGeophilus\nGeophone\ngeophone\ngeophysical\ngeophysicist\ngeophysics\ngeophyte\ngeophytic\ngeoplagiotropism\nGeoplana\nGeoplanidae\ngeopolar\ngeopolitic\ngeopolitical\ngeopolitically\ngeopolitician\ngeopolitics\nGeopolitik\ngeoponic\ngeoponical\ngeoponics\ngeopony\ngeopositive\nGeoprumnon\ngeorama\nGeordie\nGeorge\nGeorgemas\nGeorgette\nGeorgia\ngeorgiadesite\nGeorgian\nGeorgiana\ngeorgic\nGeorgie\ngeoscopic\ngeoscopy\ngeoselenic\ngeosid\ngeoside\ngeosphere\nGeospiza\ngeostatic\ngeostatics\ngeostrategic\ngeostrategist\ngeostrategy\ngeostrophic\ngeosynclinal\ngeosyncline\ngeotactic\ngeotactically\ngeotaxis\ngeotaxy\ngeotechnic\ngeotechnics\ngeotectology\ngeotectonic\ngeotectonics\nGeoteuthis\ngeotherm\ngeothermal\ngeothermic\ngeothermometer\nGeothlypis\ngeotic\ngeotical\ngeotilla\ngeotonic\ngeotonus\ngeotropic\ngeotropically\ngeotropism\ngeotropy\ngeoty\nGepeoo\nGephyrea\ngephyrean\ngephyrocercal\ngephyrocercy\nGepidae\nger\ngerah\nGerald\nGeraldine\nGeraniaceae\ngeraniaceous\ngeranial\nGeraniales\ngeranic\ngeraniol\nGeranium\ngeranium\ngeranomorph\nGeranomorphae\ngeranomorphic\ngeranyl\nGerard\ngerardia\nGerasene\ngerastian\ngerate\ngerated\ngeratic\ngeratologic\ngeratologous\ngeratology\ngeraty\ngerb\ngerbe\nGerbera\nGerberia\ngerbil\nGerbillinae\nGerbillus\ngercrow\ngereagle\ngerefa\ngerenda\ngerendum\ngerent\ngerenuk\ngerfalcon\ngerhardtite\ngeriatric\ngeriatrician\ngeriatrics\ngerim\ngerip\ngerm\ngermal\nGerman\ngerman\ngermander\ngermane\ngermanely\ngermaneness\nGermanesque\nGermanhood\nGermania\nGermanic\ngermanic\nGermanical\nGermanically\nGermanics\nGermanification\nGermanify\ngermanious\nGermanish\nGermanism\nGermanist\nGermanistic\ngermanite\nGermanity\ngermanity\ngermanium\nGermanization\ngermanization\nGermanize\ngermanize\nGermanizer\nGermanly\nGermanness\nGermanocentric\nGermanomania\nGermanomaniac\nGermanophile\nGermanophilist\nGermanophobe\nGermanophobia\nGermanophobic\nGermanophobist\ngermanous\nGermantown\ngermanyl\ngermarium\ngermen\ngermfree\ngermicidal\ngermicide\ngermifuge\ngermigenous\ngermin\ngermina\ngerminability\ngerminable\nGerminal\ngerminal\ngerminally\ngerminance\ngerminancy\ngerminant\ngerminate\ngermination\ngerminative\ngerminatively\ngerminator\ngerming\ngerminogony\ngermiparity\ngermless\ngermlike\ngermling\ngermon\ngermproof\ngermule\ngermy\ngernitz\ngerocomia\ngerocomical\ngerocomy\ngeromorphism\nGeronomite\ngeront\ngerontal\ngerontes\ngerontic\ngerontine\ngerontism\ngeronto\ngerontocracy\ngerontocrat\ngerontocratic\ngerontogeous\ngerontology\ngerontophilia\ngerontoxon\nGerres\ngerrhosaurid\nGerrhosauridae\nGerridae\ngerrymander\ngerrymanderer\ngers\ngersdorffite\nGershom\nGershon\nGershonite\ngersum\nGertie\nGertrude\ngerund\ngerundial\ngerundially\ngerundival\ngerundive\ngerundively\ngerusia\nGervais\ngervao\nGervas\nGervase\nGerygone\ngerygone\nGeryonia\ngeryonid\nGeryonidae\nGeryoniidae\nGes\nGesan\nGeshurites\ngesith\ngesithcund\ngesithcundman\nGesnera\nGesneraceae\ngesneraceous\nGesneria\ngesneria\nGesneriaceae\ngesneriaceous\nGesnerian\ngesning\ngessamine\ngesso\ngest\nGestalt\ngestalter\ngestaltist\ngestant\nGestapo\ngestate\ngestation\ngestational\ngestative\ngestatorial\ngestatorium\ngestatory\ngeste\ngested\ngesten\ngestening\ngestic\ngestical\ngesticulacious\ngesticulant\ngesticular\ngesticularious\ngesticulate\ngesticulation\ngesticulative\ngesticulatively\ngesticulator\ngesticulatory\ngestion\ngestning\ngestural\ngesture\ngestureless\ngesturer\nget\ngeta\nGetae\ngetah\ngetaway\ngether\nGethsemane\ngethsemane\nGethsemanic\ngethsemanic\nGetic\ngetling\ngetpenny\nGetsul\ngettable\ngetter\ngetting\ngetup\nGeullah\nGeum\ngeum\ngewgaw\ngewgawed\ngewgawish\ngewgawry\ngewgawy\ngey\ngeyan\ngeyerite\ngeyser\ngeyseral\ngeyseric\ngeyserine\ngeyserish\ngeyserite\ngez\nghafir\nghaist\nghalva\nGhan\ngharial\ngharnao\ngharry\nGhassanid\nghastily\nghastlily\nghastliness\nghastly\nghat\nghatti\nghatwal\nghatwazi\nghazi\nghazism\nGhaznevid\nGheber\nghebeta\nGhedda\nghee\nGheg\nGhegish\ngheleem\nGhent\ngherkin\nghetchoo\nghetti\nghetto\nghettoization\nghettoize\nGhibelline\nGhibellinism\nGhilzai\nGhiordes\nghizite\nghoom\nghost\nghostcraft\nghostdom\nghoster\nghostess\nghostfish\nghostflower\nghosthood\nghostified\nghostily\nghostish\nghostism\nghostland\nghostless\nghostlet\nghostlify\nghostlike\nghostlily\nghostliness\nghostly\nghostmonger\nghostology\nghostship\nghostweed\nghostwrite\nghosty\nghoul\nghoulery\nghoulish\nghoulishly\nghoulishness\nghrush\nghurry\nGhuz\nGi\nGiansar\ngiant\ngiantesque\ngiantess\ngianthood\ngiantish\ngiantism\ngiantize\ngiantkind\ngiantlike\ngiantly\ngiantry\ngiantship\nGiardia\ngiardia\ngiardiasis\ngiarra\ngiarre\nGib\ngib\ngibaro\ngibbals\ngibbed\ngibber\nGibberella\ngibbergunyah\ngibberish\ngibberose\ngibberosity\ngibbet\ngibbetwise\nGibbi\ngibblegabble\ngibblegabbler\ngibbles\ngibbon\ngibbose\ngibbosity\ngibbous\ngibbously\ngibbousness\ngibbsite\ngibbus\ngibby\ngibe\ngibel\ngibelite\nGibeonite\ngiber\ngibing\ngibingly\ngibleh\ngiblet\ngiblets\nGibraltar\nGibson\ngibstaff\ngibus\ngid\ngiddap\ngiddea\ngiddify\ngiddily\ngiddiness\ngiddy\ngiddyberry\ngiddybrain\ngiddyhead\ngiddyish\nGideon\nGideonite\ngidgee\ngie\ngied\ngien\nGienah\ngieseckite\ngif\ngiffgaff\nGifola\ngift\ngifted\ngiftedly\ngiftedness\ngiftie\ngiftless\ngiftling\ngiftware\ngig\ngigantean\ngigantesque\ngigantic\ngigantical\ngigantically\ngiganticidal\ngiganticide\ngiganticness\ngigantism\ngigantize\ngigantoblast\ngigantocyte\ngigantolite\ngigantological\ngigantology\ngigantomachy\nGigantopithecus\nGigantosaurus\nGigantostraca\ngigantostracan\ngigantostracous\nGigartina\nGigartinaceae\ngigartinaceous\nGigartinales\ngigback\ngigelira\ngigeria\ngigerium\ngigful\ngigger\ngiggish\ngiggit\ngiggle\ngiggledom\ngigglement\ngiggler\ngigglesome\ngiggling\ngigglingly\ngigglish\ngiggly\nGigi\ngiglet\ngigliato\ngiglot\ngigman\ngigmaness\ngigmanhood\ngigmania\ngigmanic\ngigmanically\ngigmanism\ngigmanity\ngignate\ngignitive\ngigolo\ngigot\ngigsman\ngigster\ngigtree\ngigunu\nGil\nGila\nGilaki\nGilbert\ngilbert\ngilbertage\nGilbertese\nGilbertian\nGilbertianism\ngilbertite\ngild\ngildable\ngilded\ngilden\ngilder\ngilding\nGileadite\nGileno\nGiles\ngilguy\nGilia\ngilia\nGiliak\ngilim\nGill\ngill\ngillaroo\ngillbird\ngilled\nGillenia\ngiller\nGilles\ngillflirt\ngillhooter\nGillian\ngillie\ngilliflirt\ngilling\ngilliver\ngillotage\ngillotype\ngillstoup\ngilly\ngillyflower\ngillygaupus\ngilo\ngilpy\ngilravage\ngilravager\ngilse\ngilsonite\ngilt\ngiltcup\ngilthead\ngilttail\ngim\ngimbal\ngimbaled\ngimbaljawed\ngimberjawed\ngimble\ngimcrack\ngimcrackery\ngimcrackiness\ngimcracky\ngimel\nGimirrai\ngimlet\ngimleteyed\ngimlety\ngimmal\ngimmer\ngimmerpet\ngimmick\ngimp\ngimped\ngimper\ngimping\ngin\nging\nginger\ngingerade\ngingerberry\ngingerbread\ngingerbready\ngingerin\ngingerleaf\ngingerline\ngingerliness\ngingerly\ngingerness\ngingernut\ngingerol\ngingerous\ngingerroot\ngingersnap\ngingerspice\ngingerwork\ngingerwort\ngingery\ngingham\nginghamed\ngingili\ngingiva\ngingivae\ngingival\ngingivalgia\ngingivectomy\ngingivitis\ngingivoglossitis\ngingivolabial\nginglyform\nginglymoarthrodia\nginglymoarthrodial\nGinglymodi\nginglymodian\nginglymoid\nginglymoidal\nGinglymostoma\nginglymostomoid\nginglymus\nginglyni\nginhouse\ngink\nGinkgo\nginkgo\nGinkgoaceae\nginkgoaceous\nGinkgoales\nginned\nginner\nginners\nginnery\nginney\nginning\nginnle\nGinny\nginny\nginseng\nginward\ngio\ngiobertite\ngiornata\ngiornatate\nGiottesque\nGiovanni\ngip\ngipon\ngipper\nGippy\ngipser\ngipsire\ngipsyweed\nGiraffa\ngiraffe\ngiraffesque\nGiraffidae\ngiraffine\ngiraffoid\ngirandola\ngirandole\ngirasol\ngirasole\ngirba\ngird\ngirder\ngirderage\ngirderless\ngirding\ngirdingly\ngirdle\ngirdlecake\ngirdlelike\ngirdler\ngirdlestead\ngirdling\ngirdlingly\nGirella\nGirellidae\nGirgashite\nGirgasite\ngirl\ngirleen\ngirlery\ngirlfully\ngirlhood\ngirlie\ngirliness\ngirling\ngirlish\ngirlishly\ngirlishness\ngirlism\ngirllike\ngirly\ngirn\ngirny\ngiro\ngiroflore\nGirondin\nGirondism\nGirondist\ngirouette\ngirouettism\ngirr\ngirse\ngirsh\ngirsle\ngirt\ngirth\ngirtline\ngisarme\ngish\ngisla\ngisler\ngismondine\ngismondite\ngist\ngit\ngitaligenin\ngitalin\nGitanemuck\ngith\nGitksan\ngitonin\ngitoxigenin\ngitoxin\ngittern\nGittite\ngittith\nGiuseppe\ngiustina\ngive\ngiveable\ngiveaway\ngiven\ngivenness\ngiver\ngivey\ngiving\ngizz\ngizzard\ngizzen\ngizzern\nglabella\nglabellae\nglabellar\nglabellous\nglabellum\nglabrate\nglabrescent\nglabrous\nglace\nglaceed\nglaceing\nglaciable\nglacial\nglacialism\nglacialist\nglacialize\nglacially\nglaciaria\nglaciarium\nglaciate\nglaciation\nglacier\nglaciered\nglacieret\nglacierist\nglacification\nglacioaqueous\nglaciolacustrine\nglaciological\nglaciologist\nglaciology\nglaciomarine\nglaciometer\nglacionatant\nglacis\nglack\nglad\ngladden\ngladdener\ngladdon\ngladdy\nglade\ngladelike\ngladeye\ngladful\ngladfully\ngladfulness\ngladhearted\ngladiate\ngladiator\ngladiatorial\ngladiatorism\ngladiatorship\ngladiatrix\ngladify\ngladii\ngladiola\ngladiolar\ngladiole\ngladioli\ngladiolus\ngladius\ngladkaite\ngladless\ngladly\ngladness\ngladsome\ngladsomely\ngladsomeness\nGladstone\nGladstonian\nGladstonianism\nglady\nGladys\nglaga\nGlagol\nGlagolic\nGlagolitic\nGlagolitsa\nglaieul\nglaik\nglaiket\nglaiketness\nglair\nglaireous\nglairiness\nglairy\nglaister\nglaive\nglaived\nglaked\nglaky\nglam\nglamberry\nglamorize\nglamorous\nglamorously\nglamour\nglamoury\nglance\nglancer\nglancing\nglancingly\ngland\nglandaceous\nglandarious\nglandered\nglanderous\nglanders\nglandes\nglandiferous\nglandiform\nglandless\nglandlike\nglandular\nglandularly\nglandule\nglanduliferous\nglanduliform\nglanduligerous\nglandulose\nglandulosity\nglandulous\nglandulousness\nGlaniostomi\nglans\nglar\nglare\nglareless\nGlareola\nglareole\nGlareolidae\nglareous\nglareproof\nglareworm\nglarily\nglariness\nglaring\nglaringly\nglaringness\nglarry\nglary\nGlaserian\nglaserite\nglashan\nglass\nglassen\nglasser\nglasses\nglassfish\nglassful\nglasshouse\nglassie\nglassily\nglassine\nglassiness\nGlassite\nglassless\nglasslike\nglassmaker\nglassmaking\nglassman\nglassophone\nglassrope\nglassteel\nglassware\nglassweed\nglasswork\nglassworker\nglassworking\nglassworks\nglasswort\nglassy\nGlaswegian\nGlathsheim\nGlathsheimr\nglauberite\nglaucescence\nglaucescent\nGlaucidium\nglaucin\nglaucine\nGlaucionetta\nGlaucium\nglaucochroite\nglaucodot\nglaucolite\nglaucoma\nglaucomatous\nGlaucomys\nGlauconia\nglauconiferous\nGlauconiidae\nglauconite\nglauconitic\nglauconitization\nglaucophane\nglaucophanite\nglaucophanization\nglaucophanize\nglaucophyllous\nGlaucopis\nglaucosuria\nglaucous\nglaucously\nGlauke\nglaum\nglaumrie\nglaur\nglaury\nGlaux\nglaver\nglaze\nglazed\nglazen\nglazer\nglazework\nglazier\nglaziery\nglazily\nglaziness\nglazing\nglazy\ngleam\ngleamily\ngleaminess\ngleaming\ngleamingly\ngleamless\ngleamy\nglean\ngleanable\ngleaner\ngleaning\ngleary\ngleba\nglebal\nglebe\nglebeless\nglebous\nGlecoma\nglede\nGleditsia\ngledy\nglee\ngleed\ngleeful\ngleefully\ngleefulness\ngleeishly\ngleek\ngleemaiden\ngleeman\ngleesome\ngleesomely\ngleesomeness\ngleet\ngleety\ngleewoman\ngleg\nglegly\nglegness\nGlen\nglen\nGlengarry\nGlenn\nglenohumeral\nglenoid\nglenoidal\nglent\nglessite\ngleyde\nglia\ngliadin\nglial\nglib\nglibbery\nglibly\nglibness\nglidder\ngliddery\nglide\nglideless\nglideness\nglider\ngliderport\nglidewort\ngliding\nglidingly\ngliff\ngliffing\nglime\nglimmer\nglimmering\nglimmeringly\nglimmerite\nglimmerous\nglimmery\nglimpse\nglimpser\nglink\nglint\nglioma\ngliomatous\ngliosa\ngliosis\nGlires\nGliridae\ngliriform\nGliriformia\nglirine\nGlis\nglisk\nglisky\nglissade\nglissader\nglissando\nglissette\nglisten\nglistening\nglisteningly\nglister\nglisteringly\nGlitnir\nglitter\nglitterance\nglittering\nglitteringly\nglittersome\nglittery\ngloam\ngloaming\ngloat\ngloater\ngloating\ngloatingly\nglobal\nglobally\nglobate\nglobated\nglobe\nglobed\nglobefish\nglobeflower\nglobeholder\nglobelet\nGlobicephala\nglobiferous\nGlobigerina\nglobigerine\nGlobigerinidae\nglobin\nGlobiocephalus\ngloboid\nglobose\nglobosely\ngloboseness\nglobosite\nglobosity\nglobosphaerite\nglobous\nglobously\nglobousness\nglobular\nGlobularia\nGlobulariaceae\nglobulariaceous\nglobularity\nglobularly\nglobularness\nglobule\nglobulet\nglobulicidal\nglobulicide\nglobuliferous\nglobuliform\nglobulimeter\nglobulin\nglobulinuria\nglobulite\nglobulitic\nglobuloid\nglobulolysis\nglobulose\nglobulous\nglobulousness\nglobulysis\ngloby\nglochid\nglochideous\nglochidia\nglochidial\nglochidian\nglochidiate\nglochidium\nglochis\nglockenspiel\ngloea\ngloeal\nGloeocapsa\ngloeocapsoid\ngloeosporiose\nGloeosporium\nGloiopeltis\nGloiosiphonia\nGloiosiphoniaceae\nglom\nglome\nglomerate\nglomeration\nGlomerella\nglomeroporphyritic\nglomerular\nglomerulate\nglomerule\nglomerulitis\nglomerulonephritis\nglomerulose\nglomerulus\nglommox\nglomus\nglonoin\nglonoine\ngloom\ngloomful\ngloomfully\ngloomily\ngloominess\nglooming\ngloomingly\ngloomless\ngloomth\ngloomy\nglop\ngloppen\nglor\nglore\nGloria\nGloriana\ngloriation\ngloriette\nglorifiable\nglorification\nglorifier\nglorify\ngloriole\nGloriosa\ngloriosity\nglorious\ngloriously\ngloriousness\nglory\ngloryful\nglorying\ngloryingly\ngloryless\ngloss\nglossa\nglossagra\nglossal\nglossalgia\nglossalgy\nglossanthrax\nglossarial\nglossarially\nglossarian\nglossarist\nglossarize\nglossary\nGlossata\nglossate\nglossator\nglossatorial\nglossectomy\nglossed\nglosser\nglossic\nglossily\nGlossina\nglossiness\nglossing\nglossingly\nGlossiphonia\nGlossiphonidae\nglossist\nglossitic\nglossitis\nglossless\nglossmeter\nglossocarcinoma\nglossocele\nglossocoma\nglossocomon\nglossodynamometer\nglossodynia\nglossoepiglottic\nglossoepiglottidean\nglossograph\nglossographer\nglossographical\nglossography\nglossohyal\nglossoid\nglossokinesthetic\nglossolabial\nglossolabiolaryngeal\nglossolabiopharyngeal\nglossolalia\nglossolalist\nglossolaly\nglossolaryngeal\nglossological\nglossologist\nglossology\nglossolysis\nglossoncus\nglossopalatine\nglossopalatinus\nglossopathy\nglossopetra\nGlossophaga\nglossophagine\nglossopharyngeal\nglossopharyngeus\nGlossophora\nglossophorous\nglossophytia\nglossoplasty\nglossoplegia\nglossopode\nglossopodium\nGlossopteris\nglossoptosis\nglossopyrosis\nglossorrhaphy\nglossoscopia\nglossoscopy\nglossospasm\nglossosteresis\nGlossotherium\nglossotomy\nglossotype\nglossy\nglost\nglottal\nglottalite\nglottalize\nglottic\nglottid\nglottidean\nglottis\nglottiscope\nglottogonic\nglottogonist\nglottogony\nglottologic\nglottological\nglottologist\nglottology\nGloucester\nglout\nglove\ngloveless\nglovelike\nglovemaker\nglovemaking\nglover\ngloveress\nglovey\ngloving\nglow\nglower\nglowerer\nglowering\ngloweringly\nglowfly\nglowing\nglowingly\nglowworm\nGloxinia\ngloy\ngloze\nglozing\nglozingly\nglub\nglucase\nglucemia\nglucid\nglucide\nglucidic\nglucina\nglucine\nglucinic\nglucinium\nglucinum\ngluck\nglucofrangulin\nglucokinin\nglucolipid\nglucolipide\nglucolipin\nglucolipine\nglucolysis\nglucosaemia\nglucosamine\nglucosan\nglucosane\nglucosazone\nglucose\nglucosemia\nglucosic\nglucosid\nglucosidal\nglucosidase\nglucoside\nglucosidic\nglucosidically\nglucosin\nglucosine\nglucosone\nglucosuria\nglucuronic\nglue\nglued\ngluemaker\ngluemaking\ngluepot\ngluer\ngluey\nglueyness\nglug\ngluish\ngluishness\nglum\ngluma\nGlumaceae\nglumaceous\nglumal\nGlumales\nglume\nglumiferous\nGlumiflorae\nglumly\nglummy\nglumness\nglumose\nglumosity\nglump\nglumpily\nglumpiness\nglumpish\nglumpy\nglunch\nGluneamie\nglusid\ngluside\nglut\nglutamic\nglutamine\nglutaminic\nglutaric\nglutathione\nglutch\ngluteal\nglutelin\ngluten\nglutenin\nglutenous\ngluteofemoral\ngluteoinguinal\ngluteoperineal\ngluteus\nglutin\nglutinate\nglutination\nglutinative\nglutinize\nglutinose\nglutinosity\nglutinous\nglutinously\nglutinousness\nglutition\nglutoid\nglutose\nglutter\ngluttery\nglutting\ngluttingly\nglutton\ngluttoness\ngluttonish\ngluttonism\ngluttonize\ngluttonous\ngluttonously\ngluttonousness\ngluttony\nglyceraldehyde\nglycerate\nGlyceria\nglyceric\nglyceride\nglycerin\nglycerinate\nglycerination\nglycerine\nglycerinize\nglycerite\nglycerize\nglycerizin\nglycerizine\nglycerogel\nglycerogelatin\nglycerol\nglycerolate\nglycerole\nglycerolize\nglycerophosphate\nglycerophosphoric\nglycerose\nglyceroxide\nglyceryl\nglycid\nglycide\nglycidic\nglycidol\nGlycine\nglycine\nglycinin\nglycocholate\nglycocholic\nglycocin\nglycocoll\nglycogelatin\nglycogen\nglycogenesis\nglycogenetic\nglycogenic\nglycogenize\nglycogenolysis\nglycogenous\nglycogeny\nglycohaemia\nglycohemia\nglycol\nglycolaldehyde\nglycolate\nglycolic\nglycolide\nglycolipid\nglycolipide\nglycolipin\nglycolipine\nglycoluric\nglycoluril\nglycolyl\nglycolylurea\nglycolysis\nglycolytic\nglycolytically\nGlyconian\nGlyconic\nglyconic\nglyconin\nglycoproteid\nglycoprotein\nglycosaemia\nglycose\nglycosemia\nglycosin\nglycosine\nglycosuria\nglycosuric\nglycuresis\nglycuronic\nglycyl\nglycyphyllin\nGlycyrrhiza\nglycyrrhizin\nGlynn\nglyoxal\nglyoxalase\nglyoxalic\nglyoxalin\nglyoxaline\nglyoxim\nglyoxime\nglyoxyl\nglyoxylic\nglyph\nglyphic\nglyphograph\nglyphographer\nglyphographic\nglyphography\nglyptic\nglyptical\nglyptician\nGlyptodon\nglyptodont\nGlyptodontidae\nglyptodontoid\nglyptograph\nglyptographer\nglyptographic\nglyptography\nglyptolith\nglyptological\nglyptologist\nglyptology\nglyptotheca\nGlyptotherium\nglyster\nGmelina\ngmelinite\ngnabble\nGnaeus\ngnaphalioid\nGnaphalium\ngnar\ngnarl\ngnarled\ngnarliness\ngnarly\ngnash\ngnashingly\ngnat\ngnatcatcher\ngnatflower\ngnathal\ngnathalgia\ngnathic\ngnathidium\ngnathion\ngnathism\ngnathite\ngnathitis\nGnatho\ngnathobase\ngnathobasic\nGnathobdellae\nGnathobdellida\ngnathometer\ngnathonic\ngnathonical\ngnathonically\ngnathonism\ngnathonize\ngnathophorous\ngnathoplasty\ngnathopod\nGnathopoda\ngnathopodite\ngnathopodous\ngnathostegite\nGnathostoma\nGnathostomata\ngnathostomatous\ngnathostome\nGnathostomi\ngnathostomous\ngnathotheca\ngnatling\ngnatproof\ngnatsnap\ngnatsnapper\ngnatter\ngnatty\ngnatworm\ngnaw\ngnawable\ngnawer\ngnawing\ngnawingly\ngnawn\ngneiss\ngneissic\ngneissitic\ngneissoid\ngneissose\ngneissy\nGnetaceae\ngnetaceous\nGnetales\nGnetum\ngnocchetti\ngnome\ngnomed\ngnomesque\ngnomic\ngnomical\ngnomically\ngnomide\ngnomish\ngnomist\ngnomologic\ngnomological\ngnomologist\ngnomology\ngnomon\nGnomonia\nGnomoniaceae\ngnomonic\ngnomonical\ngnomonics\ngnomonological\ngnomonologically\ngnomonology\ngnosiological\ngnosiology\ngnosis\nGnostic\ngnostic\ngnostical\ngnostically\nGnosticism\ngnosticity\ngnosticize\ngnosticizer\ngnostology\ngnu\ngo\ngoa\ngoad\ngoadsman\ngoadster\ngoaf\nGoajiro\ngoal\nGoala\ngoalage\ngoalee\ngoalie\ngoalkeeper\ngoalkeeping\ngoalless\ngoalmouth\nGoan\nGoanese\ngoanna\nGoasila\ngoat\ngoatbeard\ngoatbrush\ngoatbush\ngoatee\ngoateed\ngoatfish\ngoatherd\ngoatherdess\ngoatish\ngoatishly\ngoatishness\ngoatland\ngoatlike\ngoatling\ngoatly\ngoatroot\ngoatsbane\ngoatsbeard\ngoatsfoot\ngoatskin\ngoatstone\ngoatsucker\ngoatweed\ngoaty\ngoave\ngob\ngoback\ngoban\ngobang\ngobbe\ngobber\ngobbet\ngobbin\ngobbing\ngobble\ngobbledygook\ngobbler\ngobby\nGobelin\ngobelin\ngobernadora\ngobi\nGobia\nGobian\ngobiesocid\nGobiesocidae\ngobiesociform\nGobiesox\ngobiid\nGobiidae\ngobiiform\nGobiiformes\nGobinism\nGobinist\nGobio\ngobioid\nGobioidea\nGobioidei\ngoblet\ngobleted\ngobletful\ngoblin\ngobline\ngoblinesque\ngoblinish\ngoblinism\ngoblinize\ngoblinry\ngobmouthed\ngobo\ngobonated\ngobony\ngobstick\ngoburra\ngoby\ngobylike\ngocart\nGoclenian\nGod\ngod\ngodchild\nGoddam\nGoddard\ngoddard\ngoddaughter\ngodded\ngoddess\ngoddesshood\ngoddessship\ngoddikin\ngoddize\ngode\ngodet\nGodetia\ngodfather\ngodfatherhood\ngodfathership\nGodforsaken\nGodfrey\nGodful\ngodhead\ngodhood\nGodiva\ngodkin\ngodless\ngodlessly\ngodlessness\ngodlet\ngodlike\ngodlikeness\ngodlily\ngodliness\ngodling\ngodly\ngodmaker\ngodmaking\ngodmamma\ngodmother\ngodmotherhood\ngodmothership\ngodown\ngodpapa\ngodparent\nGodsake\ngodsend\ngodship\ngodson\ngodsonship\nGodspeed\nGodward\nGodwin\nGodwinian\ngodwit\ngoeduck\ngoel\ngoelism\nGoemagot\nGoemot\ngoer\ngoes\nGoetae\nGoethian\ngoetia\ngoetic\ngoetical\ngoety\ngoff\ngoffer\ngoffered\ngofferer\ngoffering\ngoffle\ngog\ngogga\ngoggan\ngoggle\ngoggled\ngoggler\ngogglers\ngoggly\ngoglet\nGogo\ngogo\nGohila\ngoi\ngoiabada\nGoidel\nGoidelic\ngoing\ngoitcho\ngoiter\ngoitered\ngoitral\ngoitrogen\ngoitrogenic\ngoitrous\nGokuraku\ngol\ngola\ngolach\ngoladar\ngolandaas\ngolandause\nGolaseccan\nGolconda\nGold\ngold\ngoldbeater\ngoldbeating\nGoldbird\ngoldbrick\ngoldbricker\ngoldbug\ngoldcrest\ngoldcup\ngolden\ngoldenback\ngoldeneye\ngoldenfleece\ngoldenhair\ngoldenknop\ngoldenlocks\ngoldenly\nGoldenmouth\ngoldenmouthed\ngoldenness\ngoldenpert\ngoldenrod\ngoldenseal\ngoldentop\ngoldenwing\ngolder\ngoldfielder\ngoldfinch\ngoldfinny\ngoldfish\ngoldflower\ngoldhammer\ngoldhead\nGoldi\nGoldic\ngoldie\ngoldilocks\ngoldin\ngoldish\ngoldless\ngoldlike\nGoldonian\ngoldseed\ngoldsinny\ngoldsmith\ngoldsmithery\ngoldsmithing\ngoldspink\ngoldstone\ngoldtail\ngoldtit\ngoldwater\ngoldweed\ngoldwork\ngoldworker\nGoldy\ngoldy\ngolee\ngolem\ngolf\ngolfdom\ngolfer\nGolgi\nGolgotha\ngoli\ngoliard\ngoliardery\ngoliardic\nGoliath\ngoliath\ngoliathize\ngolkakra\nGoll\ngolland\ngollar\ngolliwogg\ngolly\nGolo\ngoloe\ngolpe\nGoma\ngomari\nGomarian\nGomarist\nGomarite\ngomart\ngomashta\ngomavel\ngombay\ngombeen\ngombeenism\ngombroon\nGomeisa\ngomer\ngomeral\ngomlah\ngommelin\nGomontia\nGomorrhean\nGomphocarpus\ngomphodont\nGompholobium\ngomphosis\nGomphrena\ngomuti\ngon\nGona\ngonad\ngonadal\ngonadial\ngonadic\ngonadotropic\ngonadotropin\ngonaduct\ngonagra\ngonakie\ngonal\ngonalgia\ngonangial\ngonangium\ngonapod\ngonapophysal\ngonapophysial\ngonapophysis\ngonarthritis\nGond\ngondang\nGondi\ngondite\ngondola\ngondolet\ngondolier\ngone\ngoneness\ngoneoclinic\ngonepoiesis\ngonepoietic\ngoner\nGoneril\ngonesome\ngonfalcon\ngonfalonier\ngonfalonierate\ngonfaloniership\ngonfanon\ngong\ngongman\nGongoresque\nGongorism\nGongorist\ngongoristic\ngonia\ngoniac\ngonial\ngoniale\nGoniaster\ngoniatite\nGoniatites\ngoniatitic\ngoniatitid\nGoniatitidae\ngoniatitoid\ngonid\ngonidangium\ngonidia\ngonidial\ngonidic\ngonidiferous\ngonidiogenous\ngonidioid\ngonidiophore\ngonidiose\ngonidiospore\ngonidium\ngonimic\ngonimium\ngonimolobe\ngonimous\ngoniocraniometry\nGoniodoridae\nGoniodorididae\nGoniodoris\ngoniometer\ngoniometric\ngoniometrical\ngoniometrically\ngoniometry\ngonion\nGoniopholidae\nGoniopholis\ngoniostat\ngoniotropous\ngonitis\nGonium\ngonium\ngonnardite\ngonne\ngonoblast\ngonoblastic\ngonoblastidial\ngonoblastidium\ngonocalycine\ngonocalyx\ngonocheme\ngonochorism\ngonochorismal\ngonochorismus\ngonochoristic\ngonococcal\ngonococcic\ngonococcoid\ngonococcus\ngonocoel\ngonocyte\ngonoecium\nGonolobus\ngonomere\ngonomery\ngonophore\ngonophoric\ngonophorous\ngonoplasm\ngonopoietic\ngonorrhea\ngonorrheal\ngonorrheic\ngonosomal\ngonosome\ngonosphere\ngonostyle\ngonotheca\ngonothecal\ngonotokont\ngonotome\ngonotype\ngonozooid\ngony\ngonyalgia\ngonydeal\ngonydial\ngonyocele\ngonyoncus\ngonys\nGonystylaceae\ngonystylaceous\nGonystylus\ngonytheca\nGonzalo\ngoo\ngoober\ngood\nGoodenia\nGoodeniaceae\ngoodeniaceous\nGoodenoviaceae\ngoodhearted\ngoodheartedly\ngoodheartedness\ngooding\ngoodish\ngoodishness\ngoodlihead\ngoodlike\ngoodliness\ngoodly\ngoodman\ngoodmanship\ngoodness\ngoods\ngoodsome\ngoodwife\ngoodwill\ngoodwillit\ngoodwilly\ngoody\ngoodyear\nGoodyera\ngoodyish\ngoodyism\ngoodyness\ngoodyship\ngoof\ngoofer\ngoofily\ngoofiness\ngoofy\ngoogly\ngoogol\ngoogolplex\ngoogul\ngook\ngool\ngoolah\ngools\ngooma\ngoon\ngoondie\ngoonie\nGoop\ngoosander\ngoose\ngoosebeak\ngooseberry\ngoosebill\ngoosebird\ngoosebone\ngooseboy\ngoosecap\ngoosefish\ngooseflower\ngoosefoot\ngoosegirl\ngoosegog\ngooseherd\ngoosehouse\ngooselike\ngoosemouth\ngooseneck\ngoosenecked\ngooserumped\ngoosery\ngoosetongue\ngooseweed\ngoosewing\ngoosewinged\ngoosish\ngoosishly\ngoosishness\ngoosy\ngopher\ngopherberry\ngopherroot\ngopherwood\ngopura\nGor\ngor\ngora\ngoracco\ngoral\ngoran\ngorb\ngorbal\ngorbellied\ngorbelly\ngorbet\ngorble\ngorblimy\ngorce\ngorcock\ngorcrow\nGordiacea\ngordiacean\ngordiaceous\nGordian\nGordiidae\nGordioidea\nGordius\ngordolobo\nGordon\nGordonia\ngordunite\nGordyaean\ngore\ngorer\ngorevan\ngorfly\ngorge\ngorgeable\ngorged\ngorgedly\ngorgelet\ngorgeous\ngorgeously\ngorgeousness\ngorger\ngorgerin\ngorget\ngorgeted\ngorglin\nGorgon\nGorgonacea\ngorgonacean\ngorgonaceous\ngorgonesque\ngorgoneum\nGorgonia\nGorgoniacea\ngorgoniacean\ngorgoniaceous\nGorgonian\ngorgonian\ngorgonin\ngorgonize\ngorgonlike\nGorgonzola\nGorgosaurus\ngorhen\ngoric\ngorilla\ngorillaship\ngorillian\ngorilline\ngorilloid\ngorily\ngoriness\ngoring\nGorkhali\nGorkiesque\ngorlin\ngorlois\ngormandize\ngormandizer\ngormaw\ngormed\ngorra\ngorraf\ngorry\ngorse\ngorsebird\ngorsechat\ngorsedd\ngorsehatch\ngorsy\nGortonian\nGortonite\ngory\ngos\ngosain\ngoschen\ngosh\ngoshawk\nGoshen\ngoshenite\ngoslarite\ngoslet\ngosling\ngosmore\ngospel\ngospeler\ngospelist\ngospelize\ngospellike\ngospelly\ngospelmonger\ngospelwards\nGosplan\ngospodar\ngosport\ngossamer\ngossamered\ngossamery\ngossampine\ngossan\ngossaniferous\ngossard\ngossip\ngossipdom\ngossipee\ngossiper\ngossiphood\ngossipiness\ngossiping\ngossipingly\ngossipmonger\ngossipred\ngossipry\ngossipy\ngossoon\ngossy\ngossypine\nGossypium\ngossypol\ngossypose\ngot\ngotch\ngote\nGoth\nGotha\nGotham\nGothamite\nGothic\nGothically\nGothicism\nGothicist\nGothicity\nGothicize\nGothicizer\nGothicness\nGothish\nGothism\ngothite\nGothlander\nGothonic\nGotiglacial\ngotra\ngotraja\ngotten\nGottfried\nGottlieb\ngouaree\nGouda\nGoudy\ngouge\ngouger\ngoujon\ngoulash\ngoumi\ngoup\nGoura\ngourami\ngourd\ngourde\ngourdful\ngourdhead\ngourdiness\ngourdlike\ngourdworm\ngourdy\nGourinae\ngourmand\ngourmander\ngourmanderie\ngourmandism\ngourmet\ngourmetism\ngourounut\ngoustrous\ngousty\ngout\ngoutify\ngoutily\ngoutiness\ngoutish\ngoutte\ngoutweed\ngoutwort\ngouty\ngove\ngovern\ngovernability\ngovernable\ngovernableness\ngovernably\ngovernail\ngovernance\ngoverness\ngovernessdom\ngovernesshood\ngovernessy\ngoverning\ngoverningly\ngovernment\ngovernmental\ngovernmentalism\ngovernmentalist\ngovernmentalize\ngovernmentally\ngovernmentish\ngovernor\ngovernorate\ngovernorship\ngowan\ngowdnie\ngowf\ngowfer\ngowiddie\ngowk\ngowked\ngowkedly\ngowkedness\ngowkit\ngowl\ngown\ngownlet\ngownsman\ngowpen\ngoy\nGoyana\ngoyazite\nGoyetian\ngoyim\ngoyin\ngoyle\ngozell\ngozzard\ngra\nGraafian\ngrab\ngrabbable\ngrabber\ngrabble\ngrabbler\ngrabbling\ngrabbots\ngraben\ngrabhook\ngrabouche\nGrace\ngrace\ngraceful\ngracefully\ngracefulness\ngraceless\ngracelessly\ngracelessness\ngracelike\ngracer\nGracilaria\ngracilariid\nGracilariidae\ngracile\ngracileness\ngracilescent\ngracilis\ngracility\ngraciosity\ngracioso\ngracious\ngraciously\ngraciousness\ngrackle\nGraculus\ngrad\ngradable\ngradal\ngradate\ngradation\ngradational\ngradationally\ngradationately\ngradative\ngradatively\ngradatory\ngraddan\ngrade\ngraded\ngradefinder\ngradely\ngrader\nGradgrind\ngradgrind\nGradgrindian\nGradgrindish\nGradgrindism\ngradient\ngradienter\nGradientia\ngradin\ngradine\ngrading\ngradiometer\ngradiometric\ngradometer\ngradual\ngradualism\ngradualist\ngradualistic\ngraduality\ngradually\ngradualness\ngraduand\ngraduate\ngraduated\ngraduateship\ngraduatical\ngraduating\ngraduation\ngraduator\ngradus\nGraeae\nGraeculus\nGraeme\ngraff\ngraffage\ngraffer\nGraffias\ngraffito\ngrafship\ngraft\ngraftage\ngraftdom\ngrafted\ngrafter\ngrafting\ngraftonite\ngraftproof\nGraham\ngraham\ngrahamite\nGraian\ngrail\ngrailer\ngrailing\ngrain\ngrainage\ngrained\ngrainedness\ngrainer\ngrainering\ngrainery\ngrainfield\ngraininess\ngraining\ngrainland\ngrainless\ngrainman\ngrainsick\ngrainsickness\ngrainsman\ngrainways\ngrainy\ngraip\ngraisse\ngraith\nGrallae\nGrallatores\ngrallatorial\ngrallatory\ngrallic\nGrallina\ngralline\ngralloch\ngram\ngrama\ngramarye\ngramashes\ngrame\ngramenite\ngramicidin\nGraminaceae\ngraminaceous\nGramineae\ngramineal\ngramineous\ngramineousness\ngraminicolous\ngraminiferous\ngraminifolious\ngraminiform\ngraminin\ngraminivore\ngraminivorous\ngraminological\ngraminology\ngraminous\ngrammalogue\ngrammar\ngrammarian\ngrammarianism\ngrammarless\ngrammatic\ngrammatical\ngrammatically\ngrammaticalness\ngrammaticaster\ngrammaticism\ngrammaticize\ngrammatics\ngrammatist\ngrammatistical\ngrammatite\ngrammatolator\ngrammatolatry\nGrammatophyllum\ngramme\nGrammontine\ngramoches\nGramophone\ngramophone\ngramophonic\ngramophonical\ngramophonically\ngramophonist\ngramp\ngrampa\ngrampus\ngranada\ngranadilla\ngranadillo\nGranadine\ngranage\ngranary\ngranate\ngranatum\ngranch\ngrand\ngrandam\ngrandame\ngrandaunt\ngrandchild\ngranddad\ngranddaddy\ngranddaughter\ngranddaughterly\ngrandee\ngrandeeism\ngrandeeship\ngrandesque\ngrandeur\ngrandeval\ngrandfather\ngrandfatherhood\ngrandfatherish\ngrandfatherless\ngrandfatherly\ngrandfathership\ngrandfer\ngrandfilial\ngrandiloquence\ngrandiloquent\ngrandiloquently\ngrandiloquous\ngrandiose\ngrandiosely\ngrandiosity\ngrandisonant\nGrandisonian\nGrandisonianism\ngrandisonous\ngrandly\ngrandma\ngrandmaternal\nGrandmontine\ngrandmother\ngrandmotherhood\ngrandmotherism\ngrandmotherliness\ngrandmotherly\ngrandnephew\ngrandness\ngrandniece\ngrandpa\ngrandparent\ngrandparentage\ngrandparental\ngrandpaternal\ngrandsire\ngrandson\ngrandsonship\ngrandstand\ngrandstander\ngranduncle\ngrane\ngrange\ngranger\ngrangerism\ngrangerite\ngrangerization\ngrangerize\ngrangerizer\nGrangousier\ngraniform\ngranilla\ngranite\ngranitelike\ngraniteware\ngranitic\ngranitical\ngraniticoline\ngranitiferous\ngranitification\ngranitiform\ngranitite\ngranitization\ngranitize\ngranitoid\ngranivore\ngranivorous\ngranjeno\ngrank\ngrannom\ngranny\ngrannybush\ngrano\ngranoblastic\ngranodiorite\ngranogabbro\ngranolite\ngranolith\ngranolithic\ngranomerite\ngranophyre\ngranophyric\ngranose\ngranospherite\nGrant\ngrant\ngrantable\ngrantedly\ngrantee\ngranter\nGranth\nGrantha\nGrantia\nGrantiidae\ngrantor\ngranula\ngranular\ngranularity\ngranularly\ngranulary\ngranulate\ngranulated\ngranulater\ngranulation\ngranulative\ngranulator\ngranule\ngranulet\ngranuliferous\ngranuliform\ngranulite\ngranulitic\ngranulitis\ngranulitization\ngranulitize\ngranulize\ngranuloadipose\ngranulocyte\ngranuloma\ngranulomatous\ngranulometric\ngranulosa\ngranulose\ngranulous\nGranville\ngranza\ngranzita\ngrape\ngraped\ngrapeflower\ngrapefruit\ngrapeful\ngrapeless\ngrapelet\ngrapelike\ngrapenuts\ngraperoot\ngrapery\ngrapeshot\ngrapeskin\ngrapestalk\ngrapestone\ngrapevine\ngrapewise\ngrapewort\ngraph\ngraphalloy\ngraphic\ngraphical\ngraphically\ngraphicalness\ngraphicly\ngraphicness\ngraphics\nGraphidiaceae\nGraphiola\ngraphiological\ngraphiologist\ngraphiology\nGraphis\ngraphite\ngraphiter\ngraphitic\ngraphitization\ngraphitize\ngraphitoid\ngraphitoidal\nGraphium\ngraphologic\ngraphological\ngraphologist\ngraphology\ngraphomania\ngraphomaniac\ngraphometer\ngraphometric\ngraphometrical\ngraphometry\ngraphomotor\nGraphophone\ngraphophone\ngraphophonic\ngraphorrhea\ngraphoscope\ngraphospasm\ngraphostatic\ngraphostatical\ngraphostatics\ngraphotype\ngraphotypic\ngraphy\ngraping\ngrapnel\ngrappa\ngrapple\ngrappler\ngrappling\nGrapsidae\ngrapsoid\nGrapsus\nGrapta\ngraptolite\nGraptolitha\nGraptolithida\nGraptolithina\ngraptolitic\nGraptolitoidea\nGraptoloidea\ngraptomancy\ngrapy\ngrasp\ngraspable\ngrasper\ngrasping\ngraspingly\ngraspingness\ngraspless\ngrass\ngrassant\ngrassation\ngrassbird\ngrasschat\ngrasscut\ngrasscutter\ngrassed\ngrasser\ngrasset\ngrassflat\ngrassflower\ngrasshop\ngrasshopper\ngrasshopperdom\ngrasshopperish\ngrasshouse\ngrassiness\ngrassing\ngrassland\ngrassless\ngrasslike\ngrassman\ngrassnut\ngrassplot\ngrassquit\ngrasswards\ngrassweed\ngrasswidowhood\ngrasswork\ngrassworm\ngrassy\ngrat\ngrate\ngrateful\ngratefully\ngratefulness\ngrateless\ngrateman\ngrater\ngratewise\ngrather\nGratia\nGratiano\ngraticulate\ngraticulation\ngraticule\ngratification\ngratified\ngratifiedly\ngratifier\ngratify\ngratifying\ngratifyingly\ngratility\ngratillity\ngratinate\ngrating\nGratiola\ngratiolin\ngratiosolin\ngratis\ngratitude\ngratten\ngrattoir\ngratuitant\ngratuitous\ngratuitously\ngratuitousness\ngratuity\ngratulant\ngratulate\ngratulation\ngratulatorily\ngratulatory\ngraupel\ngravamen\ngravamina\ngrave\ngraveclod\ngravecloth\ngraveclothes\ngraved\ngravedigger\ngravegarth\ngravel\ngraveless\ngravelike\ngraveling\ngravelish\ngravelliness\ngravelly\ngravelroot\ngravelstone\ngravelweed\ngravely\ngravemaker\ngravemaking\ngraveman\ngravemaster\ngraven\ngraveness\nGravenstein\ngraveolence\ngraveolency\ngraveolent\ngraver\nGraves\ngraveship\ngraveside\ngravestead\ngravestone\ngraveward\ngravewards\ngraveyard\ngravic\ngravicembalo\ngravid\ngravidity\ngravidly\ngravidness\nGravigrada\ngravigrade\ngravimeter\ngravimetric\ngravimetrical\ngravimetrically\ngravimetry\ngraving\ngravitate\ngravitater\ngravitation\ngravitational\ngravitationally\ngravitative\ngravitometer\ngravity\ngravure\ngravy\ngrawls\ngray\ngrayback\ngraybeard\ngraycoat\ngrayfish\ngrayfly\ngrayhead\ngrayish\ngraylag\ngrayling\ngrayly\ngraymalkin\ngraymill\ngrayness\ngraypate\ngraywacke\ngrayware\ngraywether\ngrazable\ngraze\ngrazeable\ngrazer\ngrazier\ngrazierdom\ngraziery\ngrazing\ngrazingly\ngrease\ngreasebush\ngreasehorn\ngreaseless\ngreaselessness\ngreaseproof\ngreaseproofness\ngreaser\ngreasewood\ngreasily\ngreasiness\ngreasy\ngreat\ngreatcoat\ngreatcoated\ngreaten\ngreater\ngreathead\ngreatheart\ngreathearted\ngreatheartedness\ngreatish\ngreatly\ngreatmouthed\ngreatness\ngreave\ngreaved\ngreaves\ngrebe\nGrebo\ngrece\nGrecian\nGrecianize\nGrecism\nGrecize\nGrecomania\nGrecomaniac\nGrecophil\ngree\ngreed\ngreedily\ngreediness\ngreedless\ngreedsome\ngreedy\ngreedygut\ngreedyguts\nGreek\nGreekdom\nGreekery\nGreekess\nGreekish\nGreekism\nGreekist\nGreekize\nGreekless\nGreekling\ngreen\ngreenable\ngreenage\ngreenalite\ngreenback\nGreenbacker\nGreenbackism\ngreenbark\ngreenbone\ngreenbrier\nGreencloth\ngreencoat\ngreener\ngreenery\ngreeney\ngreenfinch\ngreenfish\ngreengage\ngreengill\ngreengrocer\ngreengrocery\ngreenhead\ngreenheaded\ngreenheart\ngreenhearted\ngreenhew\ngreenhide\ngreenhood\ngreenhorn\ngreenhornism\ngreenhouse\ngreening\ngreenish\ngreenishness\ngreenkeeper\ngreenkeeping\nGreenland\nGreenlander\nGreenlandic\nGreenlandish\ngreenlandite\nGreenlandman\ngreenleek\ngreenless\ngreenlet\ngreenling\ngreenly\ngreenness\ngreenockite\ngreenovite\ngreenroom\ngreensand\ngreensauce\ngreenshank\ngreensick\ngreensickness\ngreenside\ngreenstone\ngreenstuff\ngreensward\ngreenswarded\ngreentail\ngreenth\ngreenuk\ngreenweed\nGreenwich\ngreenwing\ngreenwithe\ngreenwood\ngreenwort\ngreeny\ngreenyard\ngreet\ngreeter\ngreeting\ngreetingless\ngreetingly\ngreffier\ngreffotome\nGreg\ngregal\ngregale\ngregaloid\ngregarian\ngregarianism\nGregarina\nGregarinae\nGregarinaria\ngregarine\nGregarinida\ngregarinidal\ngregariniform\nGregarinina\nGregarinoidea\ngregarinosis\ngregarinous\ngregarious\ngregariously\ngregariousness\ngregaritic\ngrege\nGregg\nGregge\ngreggle\ngrego\nGregor\nGregorian\nGregorianist\nGregorianize\nGregorianizer\nGregory\ngreige\ngrein\ngreisen\ngremial\ngremlin\ngrenade\nGrenadian\ngrenadier\ngrenadierial\ngrenadierly\ngrenadiership\ngrenadin\ngrenadine\nGrendel\nGrenelle\nGressoria\ngressorial\ngressorious\nGreta\nGretchen\nGretel\ngreund\nGrevillea\ngrew\ngrewhound\nGrewia\ngrey\ngreyhound\nGreyiaceae\ngreyly\ngreyness\ngribble\ngrice\ngrid\ngriddle\ngriddlecake\ngriddler\ngride\ngridelin\ngridiron\ngriece\ngrieced\ngrief\ngriefful\ngrieffully\ngriefless\ngrieflessness\ngrieshoch\ngrievance\ngrieve\ngrieved\ngrievedly\ngriever\ngrieveship\ngrieving\ngrievingly\ngrievous\ngrievously\ngrievousness\nGriff\ngriff\ngriffade\ngriffado\ngriffaun\ngriffe\ngriffin\ngriffinage\ngriffinesque\ngriffinhood\ngriffinish\ngriffinism\nGriffith\ngriffithite\nGriffon\ngriffon\ngriffonage\ngriffonne\ngrift\ngrifter\ngrig\ngriggles\ngrignet\ngrigri\ngrihastha\ngrihyasutra\ngrike\ngrill\ngrillade\ngrillage\ngrille\ngrilled\ngriller\ngrillroom\ngrillwork\ngrilse\ngrim\ngrimace\ngrimacer\ngrimacier\ngrimacing\ngrimacingly\ngrimalkin\ngrime\ngrimful\ngrimgribber\ngrimily\ngriminess\ngrimliness\ngrimly\ngrimme\nGrimmia\nGrimmiaceae\ngrimmiaceous\ngrimmish\ngrimness\ngrimp\ngrimy\ngrin\ngrinagog\ngrinch\ngrind\ngrindable\nGrindelia\ngrinder\ngrinderman\ngrindery\ngrinding\ngrindingly\ngrindle\ngrindstone\ngringo\ngringolee\ngringophobia\nGrinnellia\ngrinner\ngrinning\ngrinningly\ngrinny\ngrintern\ngrip\ngripe\ngripeful\ngriper\ngripgrass\ngriphite\nGriphosaurus\ngriping\ngripingly\ngripless\ngripman\ngripment\ngrippal\ngrippe\ngripper\ngrippiness\ngripping\ngrippingly\ngrippingness\ngripple\ngrippleness\ngrippotoxin\ngrippy\ngripsack\ngripy\nGriqua\ngriquaite\nGriqualander\ngris\ngrisaille\ngrisard\nGriselda\ngriseous\ngrisette\ngrisettish\ngrisgris\ngriskin\ngrisliness\ngrisly\nGrison\ngrison\ngrisounite\ngrisoutine\nGrissel\ngrissens\ngrissons\ngrist\ngristbite\ngrister\nGristhorbia\ngristle\ngristliness\ngristly\ngristmill\ngristmiller\ngristmilling\ngristy\ngrit\ngrith\ngrithbreach\ngrithman\ngritless\ngritrock\ngrits\ngritstone\ngritten\ngritter\ngrittily\ngrittiness\ngrittle\ngritty\ngrivet\ngrivna\nGrizel\nGrizzel\ngrizzle\ngrizzled\ngrizzler\ngrizzly\ngrizzlyman\ngroan\ngroaner\ngroanful\ngroaning\ngroaningly\ngroat\ngroats\ngroatsworth\ngrobian\ngrobianism\ngrocer\ngrocerdom\ngroceress\ngrocerly\ngrocerwise\ngrocery\ngroceryman\nGroenendael\ngroff\ngrog\ngroggery\ngroggily\ngrogginess\ngroggy\ngrogram\ngrogshop\ngroin\ngroined\ngroinery\ngroining\nGrolier\nGrolieresque\ngromatic\ngromatics\nGromia\ngrommet\ngromwell\ngroom\ngroomer\ngroomish\ngroomishly\ngroomlet\ngroomling\ngroomsman\ngroomy\ngroop\ngroose\ngroot\ngrooty\ngroove\ngrooveless\ngroovelike\ngroover\ngrooverhead\ngrooviness\ngrooving\ngroovy\ngrope\ngroper\ngroping\ngropingly\ngropple\ngrorudite\ngros\ngrosbeak\ngroschen\ngroser\ngroset\ngrosgrain\ngrosgrained\ngross\ngrossart\ngrossen\ngrosser\ngrossification\ngrossify\ngrossly\ngrossness\ngrosso\ngrossulaceous\ngrossular\nGrossularia\ngrossularia\nGrossulariaceae\ngrossulariaceous\ngrossularious\ngrossularite\ngrosz\ngroszy\ngrot\ngrotesque\ngrotesquely\ngrotesqueness\ngrotesquerie\ngrothine\ngrothite\nGrotian\nGrotianism\ngrottesco\ngrotto\ngrottoed\ngrottolike\ngrottowork\ngrouch\ngrouchily\ngrouchiness\ngrouchingly\ngrouchy\ngrouf\ngrough\nground\ngroundable\ngroundably\ngroundage\ngroundberry\ngroundbird\ngrounded\ngroundedly\ngroundedness\ngroundenell\ngrounder\ngroundflower\ngrounding\ngroundless\ngroundlessly\ngroundlessness\ngroundliness\ngroundling\ngroundly\ngroundman\ngroundmass\ngroundneedle\ngroundnut\ngroundplot\ngrounds\ngroundsel\ngroundsill\ngroundsman\ngroundward\ngroundwood\ngroundwork\ngroundy\ngroup\ngroupage\ngroupageness\ngrouped\ngrouper\ngrouping\ngroupist\ngrouplet\ngroupment\ngroupwise\ngrouse\ngrouseberry\ngrouseless\ngrouser\ngrouseward\ngrousewards\ngrousy\ngrout\ngrouter\ngrouthead\ngrouts\ngrouty\ngrouze\ngrove\ngroved\ngrovel\ngroveler\ngroveless\ngroveling\ngrovelingly\ngrovelings\ngrovy\ngrow\ngrowable\ngrowan\ngrowed\ngrower\ngrowing\ngrowingly\ngrowingupness\ngrowl\ngrowler\ngrowlery\ngrowling\ngrowlingly\ngrowly\ngrown\ngrownup\ngrowse\ngrowsome\ngrowth\ngrowthful\ngrowthiness\ngrowthless\ngrowthy\ngrozart\ngrozet\ngrr\ngrub\ngrubbed\ngrubber\ngrubbery\ngrubbily\ngrubbiness\ngrubby\ngrubhood\ngrubless\ngrubroot\ngrubs\ngrubstake\ngrubstaker\nGrubstreet\ngrubstreet\ngrubworm\ngrudge\ngrudgeful\ngrudgefully\ngrudgekin\ngrudgeless\ngrudger\ngrudgery\ngrudging\ngrudgingly\ngrudgingness\ngrudgment\ngrue\ngruel\ngrueler\ngrueling\ngruelly\nGrues\ngruesome\ngruesomely\ngruesomeness\ngruff\ngruffily\ngruffiness\ngruffish\ngruffly\ngruffness\ngruffs\ngruffy\ngrufted\ngrugru\nGruidae\ngruiform\nGruiformes\ngruine\nGruis\ngrum\ngrumble\ngrumbler\ngrumblesome\nGrumbletonian\ngrumbling\ngrumblingly\ngrumbly\ngrume\nGrumium\ngrumly\ngrummel\ngrummels\ngrummet\ngrummeter\ngrumness\ngrumose\ngrumous\ngrumousness\ngrump\ngrumph\ngrumphie\ngrumphy\ngrumpily\ngrumpiness\ngrumpish\ngrumpy\ngrun\nGrundified\nGrundlov\ngrundy\nGrundyism\nGrundyist\nGrundyite\ngrunerite\ngruneritization\ngrunion\ngrunt\ngrunter\nGrunth\ngrunting\ngruntingly\ngruntle\ngruntled\ngruntling\nGrus\ngrush\ngrushie\nGrusian\nGrusinian\ngruss\ngrutch\ngrutten\ngryde\ngrylli\ngryllid\nGryllidae\ngryllos\nGryllotalpa\nGryllus\ngryllus\ngrypanian\nGryphaea\nGryphosaurus\ngryposis\nGrypotherium\ngrysbok\nguaba\nguacacoa\nguachamaca\nguacharo\nguachipilin\nGuacho\nGuacico\nguacimo\nguacin\nguaco\nguaconize\nGuadagnini\nguadalcazarite\nGuaharibo\nGuahiban\nGuahibo\nGuahivo\nguaiac\nguaiacol\nguaiacolize\nguaiaconic\nguaiacum\nguaiaretic\nguaiasanol\nguaiol\nguaka\nGualaca\nguama\nguan\nGuana\nguana\nguanabana\nguanabano\nguanaco\nguanajuatite\nguanamine\nguanase\nguanay\nGuanche\nguaneide\nguango\nguanidine\nguanidopropionic\nguaniferous\nguanine\nguanize\nguano\nguanophore\nguanosine\nguanyl\nguanylic\nguao\nguapena\nguapilla\nguapinol\nGuaque\nguar\nguara\nguarabu\nguaracha\nguaraguao\nguarana\nGuarani\nguarani\nGuaranian\nguaranine\nguarantee\nguaranteeship\nguarantor\nguarantorship\nguaranty\nguarapucu\nGuaraunan\nGuarauno\nguard\nguardable\nguardant\nguarded\nguardedly\nguardedness\nguardeen\nguarder\nguardfish\nguardful\nguardfully\nguardhouse\nguardian\nguardiancy\nguardianess\nguardianless\nguardianly\nguardianship\nguarding\nguardingly\nguardless\nguardlike\nguardo\nguardrail\nguardroom\nguardship\nguardsman\nguardstone\nGuarea\nguariba\nguarinite\nguarneri\nGuarnerius\nGuarnieri\nGuarrau\nguarri\nGuaruan\nguasa\nGuastalline\nguatambu\nGuatemalan\nGuatemaltecan\nguativere\nGuato\nGuatoan\nGuatusan\nGuatuso\nGuauaenok\nguava\nguavaberry\nguavina\nguayaba\nguayabi\nguayabo\nguayacan\nGuayaqui\nGuaycuru\nGuaycuruan\nGuaymie\nguayroto\nguayule\nguaza\nGuazuma\ngubbertush\nGubbin\ngubbo\ngubernacula\ngubernacular\ngubernaculum\ngubernative\ngubernator\ngubernatorial\ngubernatrix\nguberniya\ngucki\ngud\ngudame\nguddle\ngude\ngudebrother\ngudefather\ngudemother\ngudesake\ngudesakes\ngudesire\ngudewife\ngudge\ngudgeon\ngudget\ngudok\ngue\nguebucu\nguejarite\nGuelph\nGuelphic\nGuelphish\nGuelphism\nguemal\nguenepe\nguenon\nguepard\nguerdon\nguerdonable\nguerdoner\nguerdonless\nguereza\nGuerickian\nGuerinet\nGuernsey\nguernsey\nguernseyed\nguerrilla\nguerrillaism\nguerrillaship\nGuesdism\nGuesdist\nguess\nguessable\nguesser\nguessing\nguessingly\nguesswork\nguessworker\nguest\nguestchamber\nguesten\nguester\nguesthouse\nguesting\nguestive\nguestless\nGuestling\nguestling\nguestmaster\nguestship\nguestwise\nGuetar\nGuetare\ngufa\nguff\nguffaw\nguffer\nguffin\nguffy\ngugal\nguggle\ngugglet\nguglet\nguglia\nguglio\ngugu\nGuha\nGuhayna\nguhr\nGuiana\nGuianan\nGuianese\nguib\nguiba\nguidable\nguidage\nguidance\nguide\nguideboard\nguidebook\nguidebookish\nguidecraft\nguideless\nguideline\nguidepost\nguider\nguideress\nguidership\nguideship\nguideway\nguidman\nGuido\nguidon\nGuidonian\nguidwilly\nguige\nGuignardia\nguignol\nguijo\nGuilandina\nguild\nguilder\nguildhall\nguildic\nguildry\nguildship\nguildsman\nguile\nguileful\nguilefully\nguilefulness\nguileless\nguilelessly\nguilelessness\nguilery\nguillemet\nguillemot\nGuillermo\nguillevat\nguilloche\nguillochee\nguillotinade\nguillotine\nguillotinement\nguillotiner\nguillotinism\nguillotinist\nguilt\nguiltily\nguiltiness\nguiltless\nguiltlessly\nguiltlessness\nguiltsick\nguilty\nguily\nguimbard\nguimpe\nGuinea\nguinea\nGuineaman\nGuinean\nGuinevere\nguipure\nGuisard\nguisard\nguise\nguiser\nGuisian\nguising\nguitar\nguitarfish\nguitarist\nguitermanite\nguitguit\nGuittonian\nGujar\nGujarati\nGujrati\ngul\ngula\ngulae\ngulaman\ngulancha\nGulanganes\ngular\ngularis\ngulch\ngulden\nguldengroschen\ngule\ngules\nGulf\ngulf\ngulflike\ngulfside\ngulfwards\ngulfweed\ngulfy\ngulgul\ngulinula\ngulinulae\ngulinular\ngulix\ngull\nGullah\ngullery\ngullet\ngulleting\ngullibility\ngullible\ngullibly\ngullion\ngullish\ngullishly\ngullishness\ngully\ngullyhole\nGulo\ngulonic\ngulose\ngulosity\ngulp\ngulper\ngulpin\ngulping\ngulpingly\ngulpy\ngulravage\ngulsach\nGum\ngum\ngumbo\ngumboil\ngumbotil\ngumby\ngumchewer\ngumdigger\ngumdigging\ngumdrop\ngumfield\ngumflower\ngumihan\ngumless\ngumlike\ngumly\ngumma\ngummage\ngummaker\ngummaking\ngummata\ngummatous\ngummed\ngummer\ngummiferous\ngumminess\ngumming\ngummite\ngummose\ngummosis\ngummosity\ngummous\ngummy\ngump\ngumphion\ngumption\ngumptionless\ngumptious\ngumpus\ngumshoe\ngumweed\ngumwood\ngun\nguna\ngunate\ngunation\ngunbearer\ngunboat\ngunbright\ngunbuilder\nguncotton\ngundi\ngundy\ngunebo\ngunfire\ngunflint\ngunge\ngunhouse\nGunite\ngunite\ngunj\ngunk\ngunl\ngunless\ngunlock\ngunmaker\ngunmaking\ngunman\ngunmanship\ngunnage\nGunnar\ngunne\ngunnel\ngunner\nGunnera\nGunneraceae\ngunneress\ngunnership\ngunnery\ngunnies\ngunning\ngunnung\ngunny\ngunocracy\ngunong\ngunpaper\ngunplay\ngunpowder\ngunpowderous\ngunpowdery\ngunpower\ngunrack\ngunreach\ngunrunner\ngunrunning\ngunsel\ngunshop\ngunshot\ngunsman\ngunsmith\ngunsmithery\ngunsmithing\ngunster\ngunstick\ngunstock\ngunstocker\ngunstocking\ngunstone\nGunter\ngunter\nGunther\ngunwale\ngunyah\ngunyang\ngunyeh\nGunz\nGunzian\ngup\nguppy\nguptavidya\ngur\nGuran\ngurdfish\ngurdle\ngurdwara\ngurge\ngurgeon\ngurgeons\ngurges\ngurgitation\ngurgle\ngurglet\ngurgling\ngurglingly\ngurgly\ngurgoyle\ngurgulation\nGurian\nGuric\nGurish\nGurjara\ngurjun\ngurk\nGurkha\ngurl\ngurly\nGurmukhi\ngurnard\ngurnet\ngurnetty\nGurneyite\ngurniad\ngurr\ngurrah\ngurry\ngurt\nguru\nguruship\nGus\ngush\ngusher\ngushet\ngushily\ngushiness\ngushing\ngushingly\ngushingness\ngushy\ngusla\ngusle\nguss\ngusset\nGussie\ngussie\ngust\ngustable\ngustation\ngustative\ngustativeness\ngustatory\nGustavus\ngustful\ngustfully\ngustfulness\ngustily\ngustiness\ngustless\ngusto\ngustoish\nGustus\ngusty\ngut\nGuti\nGutium\ngutless\ngutlike\ngutling\nGutnic\nGutnish\ngutt\ngutta\nguttable\nguttate\nguttated\nguttatim\nguttation\ngutte\ngutter\nGuttera\ngutterblood\nguttering\ngutterlike\ngutterling\ngutterman\nguttersnipe\nguttersnipish\ngutterspout\ngutterwise\nguttery\ngutti\nguttide\nguttie\nGuttiferae\nguttiferal\nGuttiferales\nguttiferous\nguttiform\nguttiness\nguttle\nguttler\nguttula\nguttulae\nguttular\nguttulate\nguttule\nguttural\ngutturalism\ngutturality\ngutturalization\ngutturalize\ngutturally\ngutturalness\ngutturize\ngutturonasal\ngutturopalatal\ngutturopalatine\ngutturotetany\nguttus\ngutty\ngutweed\ngutwise\ngutwort\nguvacine\nguvacoline\nGuy\nguy\nGuyandot\nguydom\nguyer\nguytrash\nguz\nguze\nGuzmania\nguzmania\nGuzul\nguzzle\nguzzledom\nguzzler\ngwag\ngweduc\ngweed\ngweeon\ngwely\nGwen\nGwendolen\ngwine\ngwyniad\nGyarung\ngyascutus\nGyges\nGygis\ngyle\ngym\ngymel\ngymkhana\nGymnadenia\nGymnadeniopsis\nGymnanthes\ngymnanthous\nGymnarchidae\nGymnarchus\ngymnasia\ngymnasial\ngymnasiarch\ngymnasiarchy\ngymnasiast\ngymnasic\ngymnasium\ngymnast\ngymnastic\ngymnastically\ngymnastics\ngymnemic\ngymnetrous\ngymnic\ngymnical\ngymnics\ngymnite\nGymnoblastea\ngymnoblastic\nGymnocalycium\ngymnocarpic\ngymnocarpous\nGymnocerata\ngymnoceratous\ngymnocidium\nGymnocladus\nGymnoconia\nGymnoderinae\nGymnodiniaceae\ngymnodiniaceous\nGymnodiniidae\nGymnodinium\ngymnodont\nGymnodontes\ngymnogen\ngymnogenous\nGymnoglossa\ngymnoglossate\ngymnogynous\nGymnogyps\nGymnolaema\nGymnolaemata\ngymnolaematous\nGymnonoti\nGymnopaedes\ngymnopaedic\ngymnophiona\ngymnoplast\nGymnorhina\ngymnorhinal\nGymnorhininae\ngymnosoph\ngymnosophist\ngymnosophy\ngymnosperm\nGymnospermae\ngymnospermal\ngymnospermic\ngymnospermism\nGymnospermous\ngymnospermy\nGymnosporangium\ngymnospore\ngymnosporous\nGymnostomata\nGymnostomina\ngymnostomous\nGymnothorax\ngymnotid\nGymnotidae\nGymnotoka\ngymnotokous\nGymnotus\nGymnura\ngymnure\nGymnurinae\ngymnurine\ngympie\ngyn\ngynaecea\ngynaeceum\ngynaecocoenic\ngynander\ngynandrarchic\ngynandrarchy\nGynandria\ngynandria\ngynandrian\ngynandrism\ngynandroid\ngynandromorph\ngynandromorphic\ngynandromorphism\ngynandromorphous\ngynandromorphy\ngynandrophore\ngynandrosporous\ngynandrous\ngynandry\ngynantherous\ngynarchic\ngynarchy\ngyne\ngynecic\ngynecidal\ngynecide\ngynecocentric\ngynecocracy\ngynecocrat\ngynecocratic\ngynecocratical\ngynecoid\ngynecolatry\ngynecologic\ngynecological\ngynecologist\ngynecology\ngynecomania\ngynecomastia\ngynecomastism\ngynecomasty\ngynecomazia\ngynecomorphous\ngyneconitis\ngynecopathic\ngynecopathy\ngynecophore\ngynecophoric\ngynecophorous\ngynecotelic\ngynecratic\ngyneocracy\ngyneolater\ngyneolatry\ngynephobia\nGynerium\ngynethusia\ngyniatrics\ngyniatry\ngynic\ngynics\ngynobase\ngynobaseous\ngynobasic\ngynocardia\ngynocardic\ngynocracy\ngynocratic\ngynodioecious\ngynodioeciously\ngynodioecism\ngynoecia\ngynoecium\ngynogenesis\ngynomonecious\ngynomonoeciously\ngynomonoecism\ngynophagite\ngynophore\ngynophoric\ngynosporangium\ngynospore\ngynostegia\ngynostegium\ngynostemium\nGynura\ngyp\nGypaetus\ngype\ngypper\nGyppo\nGyps\ngyps\ngypseian\ngypseous\ngypsiferous\ngypsine\ngypsiologist\ngypsite\ngypsography\ngypsologist\ngypsology\nGypsophila\ngypsophila\ngypsophilous\ngypsophily\ngypsoplast\ngypsous\ngypster\ngypsum\nGypsy\ngypsy\ngypsydom\ngypsyesque\ngypsyfy\ngypsyhead\ngypsyhood\ngypsyish\ngypsyism\ngypsylike\ngypsyry\ngypsyweed\ngypsywise\ngypsywort\nGyracanthus\ngyral\ngyrally\ngyrant\ngyrate\ngyration\ngyrational\ngyrator\ngyratory\ngyre\nGyrencephala\ngyrencephalate\ngyrencephalic\ngyrencephalous\ngyrene\ngyrfalcon\ngyri\ngyric\ngyrinid\nGyrinidae\nGyrinus\ngyro\ngyrocar\ngyroceracone\ngyroceran\nGyroceras\ngyrochrome\ngyrocompass\nGyrodactylidae\nGyrodactylus\ngyrogonite\ngyrograph\ngyroidal\ngyroidally\ngyrolite\ngyrolith\ngyroma\ngyromagnetic\ngyromancy\ngyromele\ngyrometer\nGyromitra\ngyron\ngyronny\nGyrophora\nGyrophoraceae\nGyrophoraceous\ngyrophoric\ngyropigeon\ngyroplane\ngyroscope\ngyroscopic\ngyroscopically\ngyroscopics\ngyrose\ngyrostabilizer\nGyrostachys\ngyrostat\ngyrostatic\ngyrostatically\ngyrostatics\nGyrotheca\ngyrous\ngyrovagi\ngyrovagues\ngyrowheel\ngyrus\ngyte\ngytling\ngyve\nH\nh\nha\nhaab\nhaaf\nHabab\nhabanera\nHabbe\nhabble\nhabdalah\nHabe\nhabeas\nhabena\nhabenal\nhabenar\nHabenaria\nhabendum\nhabenula\nhabenular\nhaberdash\nhaberdasher\nhaberdasheress\nhaberdashery\nhaberdine\nhabergeon\nhabilable\nhabilatory\nhabile\nhabiliment\nhabilimentation\nhabilimented\nhabilitate\nhabilitation\nhabilitator\nhability\nhabille\nHabiri\nHabiru\nhabit\nhabitability\nhabitable\nhabitableness\nhabitably\nhabitacle\nhabitacule\nhabitally\nhabitan\nhabitance\nhabitancy\nhabitant\nhabitat\nhabitate\nhabitation\nhabitational\nhabitative\nhabited\nhabitual\nhabituality\nhabitualize\nhabitually\nhabitualness\nhabituate\nhabituation\nhabitude\nhabitudinal\nhabitue\nhabitus\nhabnab\nhaboob\nHabronema\nhabronemiasis\nhabronemic\nhabu\nhabutai\nhabutaye\nhache\nHachiman\nhachure\nhacienda\nhack\nhackamatak\nhackamore\nhackbarrow\nhackberry\nhackbolt\nhackbush\nhackbut\nhackbuteer\nhacked\nhackee\nhacker\nhackery\nhackin\nhacking\nhackingly\nhackle\nhackleback\nhackler\nhacklog\nhackly\nhackmack\nhackman\nhackmatack\nhackney\nhackneyed\nhackneyer\nhackneyism\nhackneyman\nhacksaw\nhacksilber\nhackster\nhackthorn\nhacktree\nhackwood\nhacky\nhad\nHadassah\nhadbot\nhadden\nhaddie\nhaddo\nhaddock\nhaddocker\nhade\nHadean\nHadendoa\nHadendowa\nhadentomoid\nHadentomoidea\nHades\nHadhramautian\nhading\nHadith\nhadj\nHadjemi\nhadji\nhadland\nHadramautian\nhadrome\nHadromerina\nhadromycosis\nhadrosaur\nHadrosaurus\nhaec\nhaecceity\nHaeckelian\nHaeckelism\nhaem\nHaemamoeba\nHaemanthus\nHaemaphysalis\nhaemaspectroscope\nhaematherm\nhaemathermal\nhaemathermous\nhaematinon\nhaematinum\nhaematite\nHaematobranchia\nhaematobranchiate\nHaematocrya\nhaematocryal\nHaematophilina\nhaematophiline\nHaematopus\nhaematorrhachis\nhaematosepsis\nHaematotherma\nhaematothermal\nhaematoxylic\nhaematoxylin\nHaematoxylon\nhaemoconcentration\nhaemodilution\nHaemodoraceae\nhaemodoraceous\nhaemoglobin\nhaemogram\nHaemogregarina\nHaemogregarinidae\nhaemonchiasis\nhaemonchosis\nHaemonchus\nhaemony\nhaemophile\nHaemoproteus\nhaemorrhage\nhaemorrhagia\nhaemorrhagic\nhaemorrhoid\nhaemorrhoidal\nhaemosporid\nHaemosporidia\nhaemosporidian\nHaemosporidium\nHaemulidae\nhaemuloid\nhaeremai\nhaet\nhaff\nhaffet\nhaffkinize\nhaffle\nHafgan\nhafiz\nhafnium\nhafnyl\nhaft\nhafter\nhag\nHaganah\nHagarite\nhagberry\nhagboat\nhagborn\nhagbush\nhagdon\nhageen\nHagenia\nhagfish\nhaggada\nhaggaday\nhaggadic\nhaggadical\nhaggadist\nhaggadistic\nhaggard\nhaggardly\nhaggardness\nhagged\nhagger\nhaggis\nhaggish\nhaggishly\nhaggishness\nhaggister\nhaggle\nhaggler\nhaggly\nhaggy\nhagi\nhagia\nhagiarchy\nhagiocracy\nHagiographa\nhagiographal\nhagiographer\nhagiographic\nhagiographical\nhagiographist\nhagiography\nhagiolater\nhagiolatrous\nhagiolatry\nhagiologic\nhagiological\nhagiologist\nhagiology\nhagiophobia\nhagioscope\nhagioscopic\nhaglet\nhaglike\nhaglin\nhagride\nhagrope\nhagseed\nhagship\nhagstone\nhagtaper\nhagweed\nhagworm\nhah\nHahnemannian\nHahnemannism\nHaiathalah\nHaida\nHaidan\nHaidee\nhaidingerite\nHaiduk\nhaik\nhaikai\nhaikal\nHaikh\nhaikwan\nhail\nhailer\nhailproof\nhailse\nhailshot\nhailstone\nhailstorm\nhailweed\nhaily\nHaimavati\nhain\nHainai\nHainan\nHainanese\nhainberry\nhaine\nhair\nhairband\nhairbeard\nhairbird\nhairbrain\nhairbreadth\nhairbrush\nhaircloth\nhaircut\nhaircutter\nhaircutting\nhairdo\nhairdress\nhairdresser\nhairdressing\nhaire\nhaired\nhairen\nhairhoof\nhairhound\nhairif\nhairiness\nhairlace\nhairless\nhairlessness\nhairlet\nhairline\nhairlock\nhairmeal\nhairmonger\nhairpin\nhairsplitter\nhairsplitting\nhairspring\nhairstone\nhairstreak\nhairtail\nhairup\nhairweed\nhairwood\nhairwork\nhairworm\nhairy\nHaisla\nHaithal\nHaitian\nhaje\nhajib\nhajilij\nhak\nhakam\nhakdar\nhake\nHakea\nhakeem\nhakenkreuz\nHakenkreuzler\nhakim\nHakka\nhako\nhaku\nHal\nhala\nhalakah\nhalakic\nhalakist\nhalakistic\nhalal\nhalalcor\nhalation\nHalawi\nhalazone\nhalberd\nhalberdier\nhalberdman\nhalberdsman\nhalbert\nhalch\nhalcyon\nhalcyonian\nhalcyonic\nHalcyonidae\nHalcyoninae\nhalcyonine\nHaldanite\nhale\nhalebi\nHalecomorphi\nhaleness\nHalenia\nhaler\nhalerz\nHalesia\nhalesome\nhalf\nhalfback\nhalfbeak\nhalfer\nhalfheaded\nhalfhearted\nhalfheartedly\nhalfheartedness\nhalfling\nhalfman\nhalfness\nhalfpace\nhalfpaced\nhalfpenny\nhalfpennyworth\nhalfway\nhalfwise\nHaliaeetus\nhalibios\nhalibiotic\nhalibiu\nhalibut\nhalibuter\nHalicarnassean\nHalicarnassian\nHalichondriae\nhalichondrine\nhalichondroid\nHalicore\nHalicoridae\nhalide\nhalidom\nhalieutic\nhalieutically\nhalieutics\nHaligonian\nHalimeda\nhalimous\nhalinous\nhaliographer\nhaliography\nHaliotidae\nHaliotis\nhaliotoid\nhaliplankton\nhaliplid\nHaliplidae\nHaliserites\nhalisteresis\nhalisteretic\nhalite\nHalitheriidae\nHalitherium\nhalitosis\nhalituosity\nhalituous\nhalitus\nhall\nhallabaloo\nhallage\nhallah\nhallan\nhallanshaker\nhallebardier\nhallecret\nhalleflinta\nhalleflintoid\nhallel\nhallelujah\nhallelujatic\nhallex\nHalleyan\nhalliblash\nhalling\nhallman\nhallmark\nhallmarked\nhallmarker\nhallmoot\nhalloo\nHallopididae\nhallopodous\nHallopus\nhallow\nHallowday\nhallowed\nhallowedly\nhallowedness\nHalloween\nhallower\nHallowmas\nHallowtide\nhalloysite\nHallstatt\nHallstattian\nhallucal\nhallucinate\nhallucination\nhallucinational\nhallucinative\nhallucinator\nhallucinatory\nhallucined\nhallucinosis\nhallux\nhallway\nhalma\nhalmalille\nhalmawise\nhalo\nHaloa\nHalobates\nhalobios\nhalobiotic\nhalochromism\nhalochromy\nHalocynthiidae\nhaloesque\nhalogen\nhalogenate\nhalogenation\nhalogenoid\nhalogenous\nHalogeton\nhalohydrin\nhaloid\nhalolike\nhalolimnic\nhalomancy\nhalometer\nhalomorphic\nhalophile\nhalophilism\nhalophilous\nhalophyte\nhalophytic\nhalophytism\nHalopsyche\nHalopsychidae\nHaloragidaceae\nhaloragidaceous\nHalosauridae\nHalosaurus\nhaloscope\nHalosphaera\nhalotrichite\nhaloxene\nhals\nhalse\nhalsen\nhalsfang\nhalt\nhalter\nhalterbreak\nhalteres\nHalteridium\nhalterproof\nHaltica\nhalting\nhaltingly\nhaltingness\nhaltless\nhalucket\nhalukkah\nhalurgist\nhalurgy\nhalutz\nhalvaner\nhalvans\nhalve\nhalved\nhalvelings\nhalver\nhalves\nhalyard\nHalysites\nham\nhamacratic\nHamadan\nhamadryad\nHamal\nhamal\nhamald\nHamamelidaceae\nhamamelidaceous\nHamamelidanthemum\nhamamelidin\nHamamelidoxylon\nhamamelin\nHamamelis\nHamamelites\nhamartiologist\nhamartiology\nhamartite\nhamate\nhamated\nHamathite\nhamatum\nhambergite\nhamble\nhambroline\nhamburger\nhame\nhameil\nhamel\nHamelia\nhamesucken\nhamewith\nhamfat\nhamfatter\nhami\nHamidian\nHamidieh\nhamiform\nHamilton\nHamiltonian\nHamiltonianism\nHamiltonism\nhamingja\nhamirostrate\nHamital\nHamite\nHamites\nHamitic\nHamiticized\nHamitism\nHamitoid\nhamlah\nhamlet\nhamleted\nhamleteer\nhamletization\nhamletize\nhamlinite\nhammada\nhammam\nhammer\nhammerable\nhammerbird\nhammercloth\nhammerdress\nhammerer\nhammerfish\nhammerhead\nhammerheaded\nhammering\nhammeringly\nhammerkop\nhammerless\nhammerlike\nhammerman\nhammersmith\nhammerstone\nhammertoe\nhammerwise\nhammerwork\nhammerwort\nhammochrysos\nhammock\nhammy\nhamose\nhamous\nhamper\nhamperedly\nhamperedness\nhamperer\nhamperman\nHampshire\nhamrongite\nhamsa\nhamshackle\nhamster\nhamstring\nhamular\nhamulate\nhamule\nHamulites\nhamulose\nhamulus\nhamus\nhamza\nhan\nHanafi\nHanafite\nhanaper\nhanaster\nHanbalite\nhanbury\nhance\nhanced\nhanch\nhancockite\nhand\nhandbag\nhandball\nhandballer\nhandbank\nhandbanker\nhandbarrow\nhandbill\nhandblow\nhandbolt\nhandbook\nhandbow\nhandbreadth\nhandcar\nhandcart\nhandclap\nhandclasp\nhandcloth\nhandcraft\nhandcraftman\nhandcraftsman\nhandcuff\nhanded\nhandedness\nHandelian\nhander\nhandersome\nhandfast\nhandfasting\nhandfastly\nhandfastness\nhandflower\nhandful\nhandgrasp\nhandgravure\nhandgrip\nhandgriping\nhandgun\nhandhaving\nhandhold\nhandhole\nhandicap\nhandicapped\nhandicapper\nhandicraft\nhandicraftship\nhandicraftsman\nhandicraftsmanship\nhandicraftswoman\nhandicuff\nhandily\nhandiness\nhandistroke\nhandiwork\nhandkercher\nhandkerchief\nhandkerchiefful\nhandlaid\nhandle\nhandleable\nhandled\nhandleless\nhandler\nhandless\nhandlike\nhandling\nhandmade\nhandmaid\nhandmaiden\nhandmaidenly\nhandout\nhandpost\nhandprint\nhandrail\nhandrailing\nhandreader\nhandreading\nhandsale\nhandsaw\nhandsbreadth\nhandscrape\nhandsel\nhandseller\nhandset\nhandshake\nhandshaker\nhandshaking\nhandsmooth\nhandsome\nhandsomeish\nhandsomely\nhandsomeness\nhandspade\nhandspike\nhandspoke\nhandspring\nhandstaff\nhandstand\nhandstone\nhandstroke\nhandwear\nhandwheel\nhandwhile\nhandwork\nhandworkman\nhandwrist\nhandwrite\nhandwriting\nhandy\nhandyblow\nhandybook\nhandygrip\nhangability\nhangable\nhangalai\nhangar\nhangbird\nhangby\nhangdog\nhange\nhangee\nhanger\nhangfire\nhangie\nhanging\nhangingly\nhangkang\nhangle\nhangman\nhangmanship\nhangment\nhangnail\nhangnest\nhangout\nhangul\nhangwoman\nhangworm\nhangworthy\nhanif\nhanifism\nhanifite\nhanifiya\nHank\nhank\nhanker\nhankerer\nhankering\nhankeringly\nhankie\nhankle\nhanksite\nhanky\nhanna\nhannayite\nHannibal\nHannibalian\nHannibalic\nHano\nHanoverian\nHanoverianize\nHanoverize\nHans\nhansa\nHansard\nHansardization\nHansardize\nHanse\nhanse\nHanseatic\nhansel\nhansgrave\nhansom\nhant\nhantle\nHanukkah\nHanuman\nhao\nhaole\nhaoma\nhaori\nhap\nHapale\nHapalidae\nhapalote\nHapalotis\nhapaxanthous\nhaphazard\nhaphazardly\nhaphazardness\nhaphtarah\nHapi\nhapless\nhaplessly\nhaplessness\nhaplite\nhaplocaulescent\nhaplochlamydeous\nHaplodoci\nHaplodon\nhaplodont\nhaplodonty\nhaplography\nhaploid\nhaploidic\nhaploidy\nhaplolaly\nhaplologic\nhaplology\nhaploma\nHaplomi\nhaplomid\nhaplomous\nhaplont\nhaploperistomic\nhaploperistomous\nhaplopetalous\nhaplophase\nhaplophyte\nhaploscope\nhaploscopic\nhaplosis\nhaplostemonous\nhaplotype\nhaply\nhappen\nhappening\nhappenstance\nhappier\nhappiest\nhappify\nhappiless\nhappily\nhappiness\nhapping\nhappy\nhapten\nhaptene\nhaptenic\nhaptere\nhapteron\nhaptic\nhaptics\nhaptometer\nhaptophor\nhaptophoric\nhaptophorous\nhaptotropic\nhaptotropically\nhaptotropism\nhapu\nhapuku\nhaqueton\nharakeke\nharangue\nharangueful\nharanguer\nHararese\nHarari\nharass\nharassable\nharassedly\nharasser\nharassingly\nharassment\nharatch\nHaratin\nHaraya\nHarb\nharbergage\nharbi\nharbinge\nharbinger\nharbingership\nharbingery\nharbor\nharborage\nharborer\nharborless\nharborous\nharborside\nharborward\nhard\nhardanger\nhardback\nhardbake\nhardbeam\nhardberry\nharden\nhardenable\nHardenbergia\nhardener\nhardening\nhardenite\nharder\nHarderian\nhardfern\nhardfist\nhardfisted\nhardfistedness\nhardhack\nhardhanded\nhardhandedness\nhardhead\nhardheaded\nhardheadedly\nhardheadedness\nhardhearted\nhardheartedly\nhardheartedness\nhardihood\nhardily\nhardim\nhardiment\nhardiness\nhardish\nhardishrew\nhardly\nhardmouth\nhardmouthed\nhardness\nhardock\nhardpan\nhardship\nhardstand\nhardstanding\nhardtack\nhardtail\nhardware\nhardwareman\nHardwickia\nhardwood\nhardy\nhardystonite\nhare\nharebell\nharebottle\nharebrain\nharebrained\nharebrainedly\nharebrainedness\nharebur\nharefoot\nharefooted\nharehearted\nharehound\nHarelda\nharelike\nharelip\nharelipped\nharem\nharemism\nharemlik\nharengiform\nharfang\nharicot\nharigalds\nhariolate\nhariolation\nhariolize\nharish\nhark\nharka\nharl\nHarleian\nHarlemese\nHarlemite\nharlequin\nharlequina\nharlequinade\nharlequinery\nharlequinesque\nharlequinic\nharlequinism\nharlequinize\nharling\nharlock\nharlot\nharlotry\nharm\nHarmachis\nharmal\nharmala\nharmaline\nharman\nharmattan\nharmel\nharmer\nharmful\nharmfully\nharmfulness\nharmine\nharminic\nharmless\nharmlessly\nharmlessness\nHarmon\nharmonia\nharmoniacal\nharmonial\nharmonic\nharmonica\nharmonical\nharmonically\nharmonicalness\nharmonichord\nharmonici\nharmonicism\nharmonicon\nharmonics\nharmonious\nharmoniously\nharmoniousness\nharmoniphon\nharmoniphone\nharmonist\nharmonistic\nharmonistically\nHarmonite\nharmonium\nharmonizable\nharmonization\nharmonize\nharmonizer\nharmonogram\nharmonograph\nharmonometer\nharmony\nharmost\nharmotome\nharmotomic\nharmproof\nharn\nharness\nharnesser\nharnessry\nharnpan\nHarold\nharp\nHarpa\nharpago\nharpagon\nHarpagornis\nHarpalides\nHarpalinae\nHarpalus\nharper\nharperess\nHarpidae\nharpier\nharpings\nharpist\nharpless\nharplike\nHarpocrates\nharpoon\nharpooner\nHarporhynchus\nharpress\nharpsichord\nharpsichordist\nharpula\nHarpullia\nharpwaytuning\nharpwise\nHarpy\nHarpyia\nharpylike\nharquebus\nharquebusade\nharquebusier\nharr\nharrateen\nharridan\nharrier\nHarris\nHarrisia\nharrisite\nHarrovian\nharrow\nharrower\nharrowing\nharrowingly\nharrowingness\nharrowment\nHarry\nharry\nharsh\nharshen\nharshish\nharshly\nharshness\nharshweed\nharstigite\nhart\nhartal\nhartberry\nhartebeest\nhartin\nhartite\nHartleian\nHartleyan\nHartmann\nHartmannia\nHartogia\nhartshorn\nhartstongue\nharttite\nHartungen\nharuspex\nharuspical\nharuspicate\nharuspication\nharuspice\nharuspices\nharuspicy\nHarv\nHarvard\nHarvardian\nHarvardize\nHarveian\nharvest\nharvestbug\nharvester\nharvestless\nharvestman\nharvestry\nharvesttime\nHarvey\nHarveyize\nharzburgite\nhasan\nhasenpfeffer\nhash\nhashab\nhasher\nHashimite\nhashish\nHashiya\nhashy\nHasidean\nHasidic\nHasidim\nHasidism\nHasinai\nhask\nHaskalah\nhaskness\nhasky\nhaslet\nhaslock\nHasmonaean\nhasp\nhassar\nhassel\nhassle\nhassock\nhassocky\nhasta\nhastate\nhastately\nhastati\nhastatolanceolate\nhastatosagittate\nhaste\nhasteful\nhastefully\nhasteless\nhastelessness\nhasten\nhastener\nhasteproof\nhaster\nhastilude\nhastily\nhastiness\nhastings\nhastingsite\nhastish\nhastler\nhasty\nhat\nhatable\nhatband\nhatbox\nhatbrim\nhatbrush\nhatch\nhatchability\nhatchable\nhatchel\nhatcheler\nhatcher\nhatchery\nhatcheryman\nhatchet\nhatchetback\nhatchetfish\nhatchetlike\nhatchetman\nhatchettine\nhatchettolite\nhatchety\nhatchgate\nhatching\nhatchling\nhatchman\nhatchment\nhatchminder\nhatchway\nhatchwayman\nhate\nhateable\nhateful\nhatefully\nhatefulness\nhateless\nhatelessness\nhater\nhatful\nhath\nhatherlite\nhathi\nHathor\nHathoric\nHati\nHatikvah\nhatless\nhatlessness\nhatlike\nhatmaker\nhatmaking\nhatpin\nhatrack\nhatrail\nhatred\nhatress\nhatstand\nhatt\nhatted\nHattemist\nhatter\nHatteria\nhattery\nHatti\nHattic\nHattie\nhatting\nHattism\nHattize\nhattock\nHatty\nhatty\nhau\nhauberget\nhauberk\nhauchecornite\nhauerite\nhaugh\nhaughland\nhaught\nhaughtily\nhaughtiness\nhaughtly\nhaughtness\nhaughtonite\nhaughty\nhaul\nhaulabout\nhaulage\nhaulageway\nhaulback\nhauld\nhauler\nhaulier\nhaulm\nhaulmy\nhaulster\nhaunch\nhaunched\nhauncher\nhaunching\nhaunchless\nhaunchy\nhaunt\nhaunter\nhauntingly\nhaunty\nHauranitic\nhauriant\nhaurient\nHausa\nhause\nhausen\nhausmannite\nhausse\nHaussmannization\nHaussmannize\nhaustellate\nhaustellated\nhaustellous\nhaustellum\nhaustement\nhaustorial\nhaustorium\nhaustral\nhaustrum\nhautboy\nhautboyist\nhauteur\nhauynite\nhauynophyre\nhavage\nHavaiki\nHavaikian\nHavana\nHavanese\nhave\nhaveable\nhaveage\nhavel\nhaveless\nhavelock\nhaven\nhavenage\nhavener\nhavenership\nhavenet\nhavenful\nhavenless\nhavent\nhavenward\nhaver\nhavercake\nhaverel\nhaverer\nhavergrass\nhavermeal\nhavers\nhaversack\nHaversian\nhaversine\nhavier\nhavildar\nhavingness\nhavoc\nhavocker\nhaw\nHawaiian\nhawaiite\nhawbuck\nhawcubite\nhawer\nhawfinch\nHawiya\nhawk\nhawkbill\nhawkbit\nhawked\nhawker\nhawkery\nHawkeye\nhawkie\nhawking\nhawkish\nhawklike\nhawknut\nhawkweed\nhawkwise\nhawky\nhawm\nhawok\nHaworthia\nhawse\nhawsehole\nhawseman\nhawsepiece\nhawsepipe\nhawser\nhawserwise\nhawthorn\nhawthorned\nhawthorny\nhay\nhaya\nhayband\nhaybird\nhaybote\nhaycap\nhaycart\nhaycock\nhaydenite\nhayey\nhayfield\nhayfork\nhaygrower\nhaylift\nhayloft\nhaymaker\nhaymaking\nhaymarket\nhaymow\nhayrack\nhayrake\nhayraker\nhayrick\nhayseed\nhaysel\nhaystack\nhaysuck\nhaytime\nhayward\nhayweed\nhaywire\nhayz\nHazara\nhazard\nhazardable\nhazarder\nhazardful\nhazardize\nhazardless\nhazardous\nhazardously\nhazardousness\nhazardry\nhaze\nHazel\nhazel\nhazeled\nhazeless\nhazelly\nhazelnut\nhazelwood\nhazelwort\nhazen\nhazer\nhazily\nhaziness\nhazing\nhazle\nhaznadar\nhazy\nhazzan\nhe\nhead\nheadache\nheadachy\nheadband\nheadbander\nheadboard\nheadborough\nheadcap\nheadchair\nheadcheese\nheadchute\nheadcloth\nheaddress\nheaded\nheadender\nheader\nheadfirst\nheadforemost\nheadframe\nheadful\nheadgear\nheadily\nheadiness\nheading\nheadkerchief\nheadland\nheadledge\nheadless\nheadlessness\nheadlight\nheadlighting\nheadlike\nheadline\nheadliner\nheadlock\nheadlong\nheadlongly\nheadlongs\nheadlongwise\nheadman\nheadmark\nheadmaster\nheadmasterly\nheadmastership\nheadmistress\nheadmistressship\nheadmold\nheadmost\nheadnote\nheadpenny\nheadphone\nheadpiece\nheadplate\nheadpost\nheadquarter\nheadquarters\nheadrace\nheadrail\nheadreach\nheadrent\nheadrest\nheadright\nheadring\nheadroom\nheadrope\nheadsail\nheadset\nheadshake\nheadship\nheadsill\nheadskin\nheadsman\nheadspring\nheadstall\nheadstand\nheadstick\nheadstock\nheadstone\nheadstream\nheadstrong\nheadstrongly\nheadstrongness\nheadwaiter\nheadwall\nheadward\nheadwark\nheadwater\nheadway\nheadwear\nheadwork\nheadworker\nheadworking\nheady\nheaf\nheal\nhealable\nheald\nhealder\nhealer\nhealful\nhealing\nhealingly\nhealless\nhealsome\nhealsomeness\nhealth\nhealthcraft\nhealthful\nhealthfully\nhealthfulness\nhealthguard\nhealthily\nhealthiness\nhealthless\nhealthlessness\nhealthsome\nhealthsomely\nhealthsomeness\nhealthward\nhealthy\nheap\nheaper\nheaps\nheapstead\nheapy\nhear\nhearable\nhearer\nhearing\nhearingless\nhearken\nhearkener\nhearsay\nhearse\nhearsecloth\nhearselike\nhearst\nheart\nheartache\nheartaching\nheartbeat\nheartbird\nheartblood\nheartbreak\nheartbreaker\nheartbreaking\nheartbreakingly\nheartbroken\nheartbrokenly\nheartbrokenness\nheartburn\nheartburning\nheartdeep\nheartease\nhearted\nheartedly\nheartedness\nhearten\nheartener\nheartening\nhearteningly\nheartfelt\nheartful\nheartfully\nheartfulness\nheartgrief\nhearth\nhearthless\nhearthman\nhearthpenny\nhearthrug\nhearthstead\nhearthstone\nhearthward\nhearthwarming\nheartikin\nheartily\nheartiness\nhearting\nheartland\nheartleaf\nheartless\nheartlessly\nheartlessness\nheartlet\nheartling\nheartly\nheartnut\nheartpea\nheartquake\nheartroot\nhearts\nheartscald\nheartsease\nheartseed\nheartsette\nheartsick\nheartsickening\nheartsickness\nheartsome\nheartsomely\nheartsomeness\nheartsore\nheartstring\nheartthrob\nheartward\nheartwater\nheartweed\nheartwise\nheartwood\nheartwort\nhearty\nheat\nheatable\nheatdrop\nheatedly\nheater\nheaterman\nheatful\nheath\nheathberry\nheathbird\nheathen\nheathendom\nheatheness\nheathenesse\nheathenhood\nheathenish\nheathenishly\nheathenishness\nheathenism\nheathenize\nheathenness\nheathenry\nheathenship\nHeather\nheather\nheathered\nheatheriness\nheathery\nheathless\nheathlike\nheathwort\nheathy\nheating\nheatingly\nheatless\nheatlike\nheatmaker\nheatmaking\nheatproof\nheatronic\nheatsman\nheatstroke\nheaume\nheaumer\nheautarit\nheautomorphism\nHeautontimorumenos\nheautophany\nheave\nheaveless\nheaven\nHeavenese\nheavenful\nheavenhood\nheavenish\nheavenishly\nheavenize\nheavenless\nheavenlike\nheavenliness\nheavenly\nheavens\nheavenward\nheavenwardly\nheavenwardness\nheavenwards\nheaver\nheavies\nheavily\nheaviness\nheaving\nheavisome\nheavity\nheavy\nheavyback\nheavyhanded\nheavyhandedness\nheavyheaded\nheavyhearted\nheavyheartedness\nheavyweight\nhebamic\nhebdomad\nhebdomadal\nhebdomadally\nhebdomadary\nhebdomader\nhebdomarian\nhebdomary\nhebeanthous\nhebecarpous\nhebecladous\nhebegynous\nhebenon\nhebeosteotomy\nhebepetalous\nhebephrenia\nhebephrenic\nhebetate\nhebetation\nhebetative\nhebete\nhebetic\nhebetomy\nhebetude\nhebetudinous\nHebraean\nHebraic\nHebraica\nHebraical\nHebraically\nHebraicize\nHebraism\nHebraist\nHebraistic\nHebraistical\nHebraistically\nHebraization\nHebraize\nHebraizer\nHebrew\nHebrewdom\nHebrewess\nHebrewism\nHebrician\nHebridean\nHebronite\nhebronite\nhecastotheism\nHecate\nHecatean\nHecatic\nHecatine\nhecatomb\nHecatombaeon\nhecatomped\nhecatompedon\nhecatonstylon\nhecatontarchy\nhecatontome\nhecatophyllous\nhech\nHechtia\nheck\nheckelphone\nHeckerism\nheckimal\nheckle\nheckler\nhectare\nhecte\nhectic\nhectical\nhectically\nhecticly\nhecticness\nhectocotyl\nhectocotyle\nhectocotyliferous\nhectocotylization\nhectocotylize\nhectocotylus\nhectogram\nhectograph\nhectographic\nhectography\nhectoliter\nhectometer\nHector\nhector\nHectorean\nHectorian\nhectoringly\nhectorism\nhectorly\nhectorship\nhectostere\nhectowatt\nheddle\nheddlemaker\nheddler\nhedebo\nhedenbergite\nHedeoma\nheder\nHedera\nhederaceous\nhederaceously\nhederated\nhederic\nhederiferous\nhederiform\nhederigerent\nhederin\nhederose\nhedge\nhedgeberry\nhedgeborn\nhedgebote\nhedgebreaker\nhedgehog\nhedgehoggy\nhedgehop\nhedgehopper\nhedgeless\nhedgemaker\nhedgemaking\nhedger\nhedgerow\nhedgesmith\nhedgeweed\nhedgewise\nhedgewood\nhedging\nhedgingly\nhedgy\nhedonic\nhedonical\nhedonically\nhedonics\nhedonism\nhedonist\nhedonistic\nhedonistically\nhedonology\nhedriophthalmous\nhedrocele\nhedrumite\nHedychium\nhedyphane\nHedysarum\nheed\nheeder\nheedful\nheedfully\nheedfulness\nheedily\nheediness\nheedless\nheedlessly\nheedlessness\nheedy\nheehaw\nheel\nheelball\nheelband\nheelcap\nheeled\nheeler\nheelgrip\nheelless\nheelmaker\nheelmaking\nheelpath\nheelpiece\nheelplate\nheelpost\nheelprint\nheelstrap\nheeltap\nheeltree\nheemraad\nheer\nheeze\nheezie\nheezy\nheft\nhefter\nheftily\nheftiness\nhefty\nhegari\nHegelian\nHegelianism\nHegelianize\nHegelizer\nhegemon\nhegemonic\nhegemonical\nhegemonist\nhegemonizer\nhegemony\nhegira\nhegumen\nhegumene\nHehe\nhei\nheiau\nHeidi\nheifer\nheiferhood\nheigh\nheighday\nheight\nheighten\nheightener\nheii\nHeikum\nHeiltsuk\nheimin\nHein\nHeinesque\nHeinie\nheinous\nheinously\nheinousness\nHeinrich\nheintzite\nHeinz\nheir\nheirdom\nheiress\nheiressdom\nheiresshood\nheirless\nheirloom\nheirship\nheirskip\nheitiki\nHejazi\nHejazian\nhekteus\nhelbeh\nhelcoid\nhelcology\nhelcoplasty\nhelcosis\nhelcotic\nheldentenor\nhelder\nHelderbergian\nhele\nHelen\nHelena\nhelenin\nhelenioid\nHelenium\nHelenus\nhelepole\nHelge\nheliacal\nheliacally\nHeliaea\nheliaean\nHeliamphora\nHeliand\nhelianthaceous\nHelianthemum\nhelianthic\nhelianthin\nHelianthium\nHelianthoidea\nHelianthoidean\nHelianthus\nheliast\nheliastic\nheliazophyte\nhelical\nhelically\nheliced\nhelices\nhelichryse\nhelichrysum\nHelicidae\nheliciform\nhelicin\nHelicina\nhelicine\nHelicinidae\nhelicitic\nhelicline\nhelicograph\nhelicogyrate\nhelicogyre\nhelicoid\nhelicoidal\nhelicoidally\nhelicometry\nhelicon\nHeliconia\nHeliconian\nHeliconiidae\nHeliconiinae\nheliconist\nHeliconius\nhelicoprotein\nhelicopter\nhelicorubin\nhelicotrema\nHelicteres\nhelictite\nhelide\nHeligmus\nheling\nhelio\nheliocentric\nheliocentrical\nheliocentrically\nheliocentricism\nheliocentricity\nheliochrome\nheliochromic\nheliochromoscope\nheliochromotype\nheliochromy\nhelioculture\nheliodon\nheliodor\nhelioelectric\nhelioengraving\nheliofugal\nHeliogabalize\nHeliogabalus\nheliogram\nheliograph\nheliographer\nheliographic\nheliographical\nheliographically\nheliography\nheliogravure\nhelioid\nheliolater\nheliolatrous\nheliolatry\nheliolite\nHeliolites\nheliolithic\nHeliolitidae\nheliologist\nheliology\nheliometer\nheliometric\nheliometrical\nheliometrically\nheliometry\nheliomicrometer\nHelion\nheliophilia\nheliophiliac\nheliophilous\nheliophobe\nheliophobia\nheliophobic\nheliophobous\nheliophotography\nheliophyllite\nheliophyte\nHeliopora\nHelioporidae\nHeliopsis\nheliopticon\nHeliornis\nHeliornithes\nHeliornithidae\nHelios\nhelioscope\nhelioscopic\nhelioscopy\nheliosis\nheliostat\nheliostatic\nheliotactic\nheliotaxis\nheliotherapy\nheliothermometer\nHeliothis\nheliotrope\nheliotroper\nHeliotropiaceae\nheliotropian\nheliotropic\nheliotropical\nheliotropically\nheliotropine\nheliotropism\nHeliotropium\nheliotropy\nheliotype\nheliotypic\nheliotypically\nheliotypography\nheliotypy\nHeliozoa\nheliozoan\nheliozoic\nheliport\nHelipterum\nhelispheric\nhelispherical\nhelium\nhelix\nhelizitic\nhell\nHelladian\nHelladic\nHelladotherium\nhellandite\nhellanodic\nhellbender\nhellborn\nhellbox\nhellbred\nhellbroth\nhellcat\nhelldog\nhelleboraceous\nhelleboraster\nhellebore\nhelleborein\nhelleboric\nhelleborin\nHelleborine\nhelleborism\nHelleborus\nHellelt\nHellen\nHellene\nHellenian\nHellenic\nHellenically\nHellenicism\nHellenism\nHellenist\nHellenistic\nHellenistical\nHellenistically\nHellenisticism\nHellenization\nHellenize\nHellenizer\nHellenocentric\nHellenophile\nheller\nhelleri\nHellespont\nHellespontine\nhellgrammite\nhellhag\nhellhole\nhellhound\nhellicat\nhellier\nhellion\nhellish\nhellishly\nhellishness\nhellkite\nhellness\nhello\nhellroot\nhellship\nhelluo\nhellward\nhellweed\nhelly\nhelm\nhelmage\nhelmed\nhelmet\nhelmeted\nhelmetlike\nhelmetmaker\nhelmetmaking\nHelmholtzian\nhelminth\nhelminthagogic\nhelminthagogue\nHelminthes\nhelminthiasis\nhelminthic\nhelminthism\nhelminthite\nHelminthocladiaceae\nhelminthoid\nhelminthologic\nhelminthological\nhelminthologist\nhelminthology\nhelminthosporiose\nHelminthosporium\nhelminthosporoid\nhelminthous\nhelmless\nhelmsman\nhelmsmanship\nhelobious\nheloderm\nHeloderma\nHelodermatidae\nhelodermatoid\nhelodermatous\nhelodes\nheloe\nheloma\nHelonias\nhelonin\nhelosis\nHelot\nhelotage\nhelotism\nhelotize\nhelotomy\nhelotry\nhelp\nhelpable\nhelper\nhelpful\nhelpfully\nhelpfulness\nhelping\nhelpingly\nhelpless\nhelplessly\nhelplessness\nhelply\nhelpmate\nhelpmeet\nhelpsome\nhelpworthy\nhelsingkite\nhelve\nhelvell\nHelvella\nHelvellaceae\nhelvellaceous\nHelvellales\nhelvellic\nhelver\nHelvetia\nHelvetian\nHelvetic\nHelvetii\nHelvidian\nhelvite\nhem\nhemabarometer\nhemachate\nhemachrome\nhemachrosis\nhemacite\nhemad\nhemadrometer\nhemadrometry\nhemadromograph\nhemadromometer\nhemadynameter\nhemadynamic\nhemadynamics\nhemadynamometer\nhemafibrite\nhemagglutinate\nhemagglutination\nhemagglutinative\nhemagglutinin\nhemagogic\nhemagogue\nhemal\nhemalbumen\nhemamoeba\nhemangioma\nhemangiomatosis\nhemangiosarcoma\nhemaphein\nhemapod\nhemapodous\nhemapoiesis\nhemapoietic\nhemapophyseal\nhemapophysial\nhemapophysis\nhemarthrosis\nhemase\nhemaspectroscope\nhemastatics\nhematachometer\nhematachometry\nhematal\nhematein\nhematemesis\nhematemetic\nhematencephalon\nhematherapy\nhematherm\nhemathermal\nhemathermous\nhemathidrosis\nhematic\nhematid\nhematidrosis\nhematimeter\nhematin\nhematinic\nhematinometer\nhematinometric\nhematinuria\nhematite\nhematitic\nhematobic\nhematobious\nhematobium\nhematoblast\nhematobranchiate\nhematocatharsis\nhematocathartic\nhematocele\nhematochezia\nhematochrome\nhematochyluria\nhematoclasia\nhematoclasis\nhematocolpus\nhematocrit\nhematocryal\nhematocrystallin\nhematocyanin\nhematocyst\nhematocystis\nhematocyte\nhematocytoblast\nhematocytogenesis\nhematocytometer\nhematocytotripsis\nhematocytozoon\nhematocyturia\nhematodynamics\nhematodynamometer\nhematodystrophy\nhematogen\nhematogenesis\nhematogenetic\nhematogenic\nhematogenous\nhematoglobulin\nhematography\nhematohidrosis\nhematoid\nhematoidin\nhematolin\nhematolite\nhematological\nhematologist\nhematology\nhematolymphangioma\nhematolysis\nhematolytic\nhematoma\nhematomancy\nhematometer\nhematometra\nhematometry\nhematomphalocele\nhematomyelia\nhematomyelitis\nhematonephrosis\nhematonic\nhematopathology\nhematopericardium\nhematopexis\nhematophobia\nhematophyte\nhematoplast\nhematoplastic\nhematopoiesis\nhematopoietic\nhematoporphyrin\nhematoporphyrinuria\nhematorrhachis\nhematorrhea\nhematosalpinx\nhematoscope\nhematoscopy\nhematose\nhematosepsis\nhematosin\nhematosis\nhematospectrophotometer\nhematospectroscope\nhematospermatocele\nhematospermia\nhematostibiite\nhematotherapy\nhematothermal\nhematothorax\nhematoxic\nhematozoal\nhematozoan\nhematozoic\nhematozoon\nhematozymosis\nhematozymotic\nhematuresis\nhematuria\nhematuric\nhemautogram\nhemautograph\nhemautographic\nhemautography\nheme\nhemellitene\nhemellitic\nhemelytral\nhemelytron\nhemen\nhemera\nhemeralope\nhemeralopia\nhemeralopic\nHemerobaptism\nHemerobaptist\nHemerobian\nHemerobiid\nHemerobiidae\nHemerobius\nHemerocallis\nhemerologium\nhemerology\nhemerythrin\nhemiablepsia\nhemiacetal\nhemiachromatopsia\nhemiageusia\nhemiageustia\nhemialbumin\nhemialbumose\nhemialbumosuria\nhemialgia\nhemiamaurosis\nhemiamb\nhemiamblyopia\nhemiamyosthenia\nhemianacusia\nhemianalgesia\nhemianatropous\nhemianesthesia\nhemianopia\nhemianopic\nhemianopsia\nhemianoptic\nhemianosmia\nhemiapraxia\nHemiascales\nHemiasci\nHemiascomycetes\nhemiasynergia\nhemiataxia\nhemiataxy\nhemiathetosis\nhemiatrophy\nhemiazygous\nHemibasidiales\nHemibasidii\nHemibasidiomycetes\nhemibasidium\nhemibathybian\nhemibenthic\nhemibenthonic\nhemibranch\nhemibranchiate\nHemibranchii\nhemic\nhemicanities\nhemicardia\nhemicardiac\nhemicarp\nhemicatalepsy\nhemicataleptic\nhemicellulose\nhemicentrum\nhemicephalous\nhemicerebrum\nHemichorda\nhemichordate\nhemichorea\nhemichromatopsia\nhemicircle\nhemicircular\nhemiclastic\nhemicollin\nhemicrane\nhemicrania\nhemicranic\nhemicrany\nhemicrystalline\nhemicycle\nhemicyclic\nhemicyclium\nhemicylindrical\nhemidactylous\nHemidactylus\nhemidemisemiquaver\nhemidiapente\nhemidiaphoresis\nhemiditone\nhemidomatic\nhemidome\nhemidrachm\nhemidysergia\nhemidysesthesia\nhemidystrophy\nhemiekton\nhemielliptic\nhemiepilepsy\nhemifacial\nhemiform\nHemigale\nHemigalus\nHemiganus\nhemigastrectomy\nhemigeusia\nhemiglossal\nhemiglossitis\nhemiglyph\nhemignathous\nhemihdry\nhemihedral\nhemihedrally\nhemihedric\nhemihedrism\nhemihedron\nhemiholohedral\nhemihydrate\nhemihydrated\nhemihydrosis\nhemihypalgesia\nhemihyperesthesia\nhemihyperidrosis\nhemihypertonia\nhemihypertrophy\nhemihypesthesia\nhemihypoesthesia\nhemihypotonia\nhemikaryon\nhemikaryotic\nhemilaminectomy\nhemilaryngectomy\nHemileia\nhemilethargy\nhemiligulate\nhemilingual\nhemimellitene\nhemimellitic\nhemimelus\nHemimeridae\nHemimerus\nHemimetabola\nhemimetabole\nhemimetabolic\nhemimetabolism\nhemimetabolous\nhemimetaboly\nhemimetamorphic\nhemimetamorphosis\nhemimetamorphous\nhemimorph\nhemimorphic\nhemimorphism\nhemimorphite\nhemimorphy\nHemimyaria\nhemin\nhemina\nhemine\nheminee\nhemineurasthenia\nhemiobol\nhemiolia\nhemiolic\nhemionus\nhemiope\nhemiopia\nhemiopic\nhemiorthotype\nhemiparalysis\nhemiparanesthesia\nhemiparaplegia\nhemiparasite\nhemiparasitic\nhemiparasitism\nhemiparesis\nhemiparesthesia\nhemiparetic\nhemipenis\nhemipeptone\nhemiphrase\nhemipic\nhemipinnate\nhemiplane\nhemiplankton\nhemiplegia\nhemiplegic\nhemiplegy\nhemipodan\nhemipode\nHemipodii\nHemipodius\nhemiprism\nhemiprismatic\nhemiprotein\nhemipter\nHemiptera\nhemipteral\nhemipteran\nhemipteroid\nhemipterological\nhemipterology\nhemipteron\nhemipterous\nhemipyramid\nhemiquinonoid\nhemiramph\nHemiramphidae\nHemiramphinae\nhemiramphine\nHemiramphus\nhemisaprophyte\nhemisaprophytic\nhemiscotosis\nhemisect\nhemisection\nhemispasm\nhemispheral\nhemisphere\nhemisphered\nhemispherical\nhemispherically\nhemispheroid\nhemispheroidal\nhemispherule\nhemistater\nhemistich\nhemistichal\nhemistrumectomy\nhemisymmetrical\nhemisymmetry\nhemisystole\nhemiterata\nhemiteratic\nhemiteratics\nhemiteria\nhemiterpene\nhemitery\nhemithyroidectomy\nhemitone\nhemitremor\nhemitrichous\nhemitriglyph\nhemitropal\nhemitrope\nhemitropic\nhemitropism\nhemitropous\nhemitropy\nhemitype\nhemitypic\nhemivagotony\nheml\nhemlock\nhemmel\nhemmer\nhemoalkalimeter\nhemoblast\nhemochromatosis\nhemochrome\nhemochromogen\nhemochromometer\nhemochromometry\nhemoclasia\nhemoclasis\nhemoclastic\nhemocoel\nhemocoele\nhemocoelic\nhemocoelom\nhemoconcentration\nhemoconia\nhemoconiosis\nhemocry\nhemocrystallin\nhemoculture\nhemocyanin\nhemocyte\nhemocytoblast\nhemocytogenesis\nhemocytolysis\nhemocytometer\nhemocytotripsis\nhemocytozoon\nhemocyturia\nhemodiagnosis\nhemodilution\nhemodrometer\nhemodrometry\nhemodromograph\nhemodromometer\nhemodynameter\nhemodynamic\nhemodynamics\nhemodystrophy\nhemoerythrin\nhemoflagellate\nhemofuscin\nhemogastric\nhemogenesis\nhemogenetic\nhemogenic\nhemogenous\nhemoglobic\nhemoglobin\nhemoglobinemia\nhemoglobiniferous\nhemoglobinocholia\nhemoglobinometer\nhemoglobinophilic\nhemoglobinous\nhemoglobinuria\nhemoglobinuric\nhemoglobulin\nhemogram\nhemogregarine\nhemoid\nhemokonia\nhemokoniosis\nhemol\nhemoleucocyte\nhemoleucocytic\nhemologist\nhemology\nhemolymph\nhemolymphatic\nhemolysin\nhemolysis\nhemolytic\nhemolyze\nhemomanometer\nhemometer\nhemometry\nhemonephrosis\nhemopathology\nhemopathy\nhemopericardium\nhemoperitoneum\nhemopexis\nhemophage\nhemophagia\nhemophagocyte\nhemophagocytosis\nhemophagous\nhemophagy\nhemophile\nHemophileae\nhemophilia\nhemophiliac\nhemophilic\nHemophilus\nhemophobia\nhemophthalmia\nhemophthisis\nhemopiezometer\nhemoplasmodium\nhemoplastic\nhemopneumothorax\nhemopod\nhemopoiesis\nhemopoietic\nhemoproctia\nhemoptoe\nhemoptysis\nhemopyrrole\nhemorrhage\nhemorrhagic\nhemorrhagin\nhemorrhea\nhemorrhodin\nhemorrhoid\nhemorrhoidal\nhemorrhoidectomy\nhemosalpinx\nhemoscope\nhemoscopy\nhemosiderin\nhemosiderosis\nhemospasia\nhemospastic\nhemospermia\nhemosporid\nhemosporidian\nhemostasia\nhemostasis\nhemostat\nhemostatic\nhemotachometer\nhemotherapeutics\nhemotherapy\nhemothorax\nhemotoxic\nhemotoxin\nhemotrophe\nhemotropic\nhemozoon\nhemp\nhempbush\nhempen\nhemplike\nhempseed\nhempstring\nhempweed\nhempwort\nhempy\nhemstitch\nhemstitcher\nhen\nhenad\nhenbane\nhenbill\nhenbit\nhence\nhenceforth\nhenceforward\nhenceforwards\nhenchboy\nhenchman\nhenchmanship\nhencoop\nhencote\nhend\nhendecacolic\nhendecagon\nhendecagonal\nhendecahedron\nhendecane\nhendecasemic\nhendecasyllabic\nhendecasyllable\nhendecatoic\nhendecoic\nhendecyl\nhendiadys\nhendly\nhendness\nheneicosane\nhenequen\nhenfish\nhenhearted\nhenhouse\nhenhussy\nhenism\nhenlike\nhenmoldy\nhenna\nHennebique\nhennery\nhennin\nhennish\nhenny\nhenogeny\nhenotheism\nhenotheist\nhenotheistic\nhenotic\nhenpeck\nhenpen\nHenrician\nHenrietta\nhenroost\nHenry\nhenry\nhent\nHentenian\nhenter\nhentriacontane\nhenware\nhenwife\nhenwise\nhenwoodite\nhenyard\nheortological\nheortologion\nheortology\nhep\nhepar\nheparin\nheparinize\nhepatalgia\nhepatatrophia\nhepatatrophy\nhepatauxe\nhepatectomy\nhepatic\nHepatica\nhepatica\nHepaticae\nhepatical\nhepaticoduodenostomy\nhepaticoenterostomy\nhepaticogastrostomy\nhepaticologist\nhepaticology\nhepaticopulmonary\nhepaticostomy\nhepaticotomy\nhepatite\nhepatitis\nhepatization\nhepatize\nhepatocele\nhepatocirrhosis\nhepatocolic\nhepatocystic\nhepatoduodenal\nhepatoduodenostomy\nhepatodynia\nhepatodysentery\nhepatoenteric\nhepatoflavin\nhepatogastric\nhepatogenic\nhepatogenous\nhepatography\nhepatoid\nhepatolenticular\nhepatolith\nhepatolithiasis\nhepatolithic\nhepatological\nhepatologist\nhepatology\nhepatolysis\nhepatolytic\nhepatoma\nhepatomalacia\nhepatomegalia\nhepatomegaly\nhepatomelanosis\nhepatonephric\nhepatopathy\nhepatoperitonitis\nhepatopexia\nhepatopexy\nhepatophlebitis\nhepatophlebotomy\nhepatophyma\nhepatopneumonic\nhepatoportal\nhepatoptosia\nhepatoptosis\nhepatopulmonary\nhepatorenal\nhepatorrhagia\nhepatorrhaphy\nhepatorrhea\nhepatorrhexis\nhepatorrhoea\nhepatoscopy\nhepatostomy\nhepatotherapy\nhepatotomy\nhepatotoxemia\nhepatoumbilical\nhepcat\nHephaesteum\nHephaestian\nHephaestic\nHephaestus\nhephthemimer\nhephthemimeral\nhepialid\nHepialidae\nHepialus\nheppen\nhepper\nheptacapsular\nheptace\nheptachord\nheptachronous\nheptacolic\nheptacosane\nheptad\nheptadecane\nheptadecyl\nheptaglot\nheptagon\nheptagonal\nheptagynous\nheptahedral\nheptahedrical\nheptahedron\nheptahexahedral\nheptahydrate\nheptahydrated\nheptahydric\nheptahydroxy\nheptal\nheptameride\nHeptameron\nheptamerous\nheptameter\nheptamethylene\nheptametrical\nheptanaphthene\nHeptanchus\nheptandrous\nheptane\nHeptanesian\nheptangular\nheptanoic\nheptanone\nheptapetalous\nheptaphyllous\nheptaploid\nheptaploidy\nheptapodic\nheptapody\nheptarch\nheptarchal\nheptarchic\nheptarchical\nheptarchist\nheptarchy\nheptasemic\nheptasepalous\nheptaspermous\nheptastich\nheptastrophic\nheptastylar\nheptastyle\nheptasulphide\nheptasyllabic\nHeptateuch\nheptatomic\nheptatonic\nHeptatrema\nheptavalent\nheptene\nhepteris\nheptine\nheptite\nheptitol\nheptoic\nheptorite\nheptose\nheptoxide\nHeptranchias\nheptyl\nheptylene\nheptylic\nheptyne\nher\nHeraclean\nHeracleidan\nHeracleonite\nHeracleopolitan\nHeracleopolite\nHeracleum\nHeraclid\nHeraclidae\nHeraclidan\nHeraclitean\nHeracliteanism\nHeraclitic\nHeraclitical\nHeraclitism\nHerakles\nherald\nheraldess\nheraldic\nheraldical\nheraldically\nheraldist\nheraldize\nheraldress\nheraldry\nheraldship\nherapathite\nHerat\nHerb\nherb\nherbaceous\nherbaceously\nherbage\nherbaged\nherbager\nherbagious\nherbal\nherbalism\nherbalist\nherbalize\nherbane\nherbaria\nherbarial\nherbarian\nherbarism\nherbarist\nherbarium\nherbarize\nHerbartian\nHerbartianism\nherbary\nHerbert\nherbescent\nherbicidal\nherbicide\nherbicolous\nherbiferous\nherbish\nherbist\nHerbivora\nherbivore\nherbivority\nherbivorous\nherbless\nherblet\nherblike\nherbman\nherborist\nherborization\nherborize\nherborizer\nherbose\nherbosity\nherbous\nherbwife\nherbwoman\nherby\nhercogamous\nhercogamy\nHerculanean\nHerculanensian\nHerculanian\nHerculean\nHercules\nHerculid\nHercynian\nhercynite\nherd\nherdbook\nherdboy\nherder\nherderite\nherdic\nherding\nherdship\nherdsman\nherdswoman\nherdwick\nhere\nhereabout\nhereadays\nhereafter\nhereafterward\nhereamong\nhereat\nhereaway\nhereaways\nherebefore\nhereby\nheredipetous\nheredipety\nhereditability\nhereditable\nhereditably\nhereditament\nhereditarian\nhereditarianism\nhereditarily\nhereditariness\nhereditarist\nhereditary\nhereditation\nhereditative\nhereditism\nhereditist\nhereditivity\nheredity\nheredium\nheredofamilial\nheredolues\nheredoluetic\nheredosyphilis\nheredosyphilitic\nheredosyphilogy\nheredotuberculosis\nHereford\nherefrom\nheregeld\nherein\nhereinabove\nhereinafter\nhereinbefore\nhereinto\nherem\nhereness\nhereniging\nhereof\nhereon\nhereright\nHerero\nheresiarch\nheresimach\nheresiographer\nheresiography\nheresiologer\nheresiologist\nheresiology\nheresy\nheresyphobia\nheresyproof\nheretic\nheretical\nheretically\nhereticalness\nhereticate\nheretication\nhereticator\nhereticide\nhereticize\nhereto\nheretoch\nheretofore\nheretoforetime\nheretoga\nheretrix\nhereunder\nhereunto\nhereupon\nhereward\nherewith\nherewithal\nherile\nheriot\nheriotable\nherisson\nheritability\nheritable\nheritably\nheritage\nheritance\nHeritiera\nheritor\nheritress\nheritrix\nherl\nherling\nherma\nhermaean\nhermaic\nHerman\nhermaphrodite\nhermaphroditic\nhermaphroditical\nhermaphroditically\nhermaphroditish\nhermaphroditism\nhermaphroditize\nHermaphroditus\nhermeneut\nhermeneutic\nhermeneutical\nhermeneutically\nhermeneutics\nhermeneutist\nHermes\nHermesian\nHermesianism\nHermetic\nhermetic\nhermetical\nhermetically\nhermeticism\nHermetics\nHermetism\nHermetist\nhermidin\nHerminone\nHermione\nHermit\nhermit\nhermitage\nhermitary\nhermitess\nhermitic\nhermitical\nhermitically\nhermitish\nhermitism\nhermitize\nhermitry\nhermitship\nHermo\nhermodact\nhermodactyl\nHermogenian\nhermoglyphic\nhermoglyphist\nhermokopid\nhern\nHernandia\nHernandiaceae\nhernandiaceous\nhernanesell\nhernani\nhernant\nherne\nhernia\nhernial\nHerniaria\nherniarin\nherniary\nherniate\nherniated\nherniation\nhernioenterotomy\nhernioid\nherniology\nherniopuncture\nherniorrhaphy\nherniotome\nherniotomist\nherniotomy\nhero\nheroarchy\nHerodian\nherodian\nHerodianic\nHerodii\nHerodiones\nherodionine\nheroess\nherohead\nherohood\nheroic\nheroical\nheroically\nheroicalness\nheroicity\nheroicly\nheroicness\nheroicomic\nheroicomical\nheroid\nHeroides\nheroify\nHeroin\nheroin\nheroine\nheroineship\nheroinism\nheroinize\nheroism\nheroistic\nheroization\nheroize\nherolike\nheromonger\nheron\nheroner\nheronite\nheronry\nheroogony\nheroologist\nheroology\nHerophile\nHerophilist\nheroship\nherotheism\nherpes\nHerpestes\nHerpestinae\nherpestine\nherpetic\nherpetiform\nherpetism\nherpetography\nherpetoid\nherpetologic\nherpetological\nherpetologically\nherpetologist\nherpetology\nherpetomonad\nHerpetomonas\nherpetophobia\nherpetotomist\nherpetotomy\nherpolhode\nHerpotrichia\nherrengrundite\nHerrenvolk\nherring\nherringbone\nherringer\nHerrnhuter\nhers\nHerschelian\nherschelite\nherse\nhersed\nherself\nhership\nhersir\nhertz\nhertzian\nHeruli\nHerulian\nHervati\nHerve\nHerzegovinian\nHesiodic\nHesione\nHesionidae\nhesitance\nhesitancy\nhesitant\nhesitantly\nhesitate\nhesitater\nhesitating\nhesitatingly\nhesitatingness\nhesitation\nhesitative\nhesitatively\nhesitatory\nHesper\nHespera\nHesperia\nHesperian\nHesperic\nHesperid\nhesperid\nhesperidate\nhesperidene\nhesperideous\nHesperides\nHesperidian\nhesperidin\nhesperidium\nhesperiid\nHesperiidae\nhesperinon\nHesperis\nhesperitin\nHesperornis\nHesperornithes\nhesperornithid\nHesperornithiformes\nhesperornithoid\nHesperus\nHessian\nhessite\nhessonite\nhest\nHester\nhestern\nhesternal\nHesther\nhesthogenous\nHesychasm\nHesychast\nhesychastic\nhet\nhetaera\nhetaeria\nhetaeric\nhetaerism\nHetaerist\nhetaerist\nhetaeristic\nhetaerocracy\nhetaerolite\nhetaery\nheteradenia\nheteradenic\nheterakid\nHeterakis\nHeteralocha\nheterandrous\nheterandry\nheteratomic\nheterauxesis\nheteraxial\nheteric\nheterically\nhetericism\nhetericist\nheterism\nheterization\nheterize\nhetero\nheteroagglutinin\nheteroalbumose\nheteroauxin\nheteroblastic\nheteroblastically\nheteroblasty\nheterocarpism\nheterocarpous\nHeterocarpus\nheterocaseose\nheterocellular\nheterocentric\nheterocephalous\nHeterocera\nheterocerc\nheterocercal\nheterocercality\nheterocercy\nheterocerous\nheterochiral\nheterochlamydeous\nHeterochloridales\nheterochromatic\nheterochromatin\nheterochromatism\nheterochromatization\nheterochromatized\nheterochrome\nheterochromia\nheterochromic\nheterochromosome\nheterochromous\nheterochromy\nheterochronic\nheterochronism\nheterochronistic\nheterochronous\nheterochrony\nheterochrosis\nheterochthon\nheterochthonous\nheterocline\nheteroclinous\nheteroclital\nheteroclite\nheteroclitica\nheteroclitous\nHeterocoela\nheterocoelous\nHeterocotylea\nheterocycle\nheterocyclic\nheterocyst\nheterocystous\nheterodactyl\nHeterodactylae\nheterodactylous\nHeterodera\nHeterodon\nheterodont\nHeterodonta\nHeterodontidae\nheterodontism\nheterodontoid\nHeterodontus\nheterodox\nheterodoxal\nheterodoxical\nheterodoxly\nheterodoxness\nheterodoxy\nheterodromous\nheterodromy\nheterodyne\nheteroecious\nheteroeciously\nheteroeciousness\nheteroecism\nheteroecismal\nheteroecy\nheteroepic\nheteroepy\nheteroerotic\nheteroerotism\nheterofermentative\nheterofertilization\nheterogalactic\nheterogamete\nheterogametic\nheterogametism\nheterogamety\nheterogamic\nheterogamous\nheterogamy\nheterogangliate\nheterogen\nheterogene\nheterogeneal\nheterogenean\nheterogeneity\nheterogeneous\nheterogeneously\nheterogeneousness\nheterogenesis\nheterogenetic\nheterogenic\nheterogenicity\nheterogenist\nheterogenous\nheterogeny\nheteroglobulose\nheterognath\nHeterognathi\nheterogone\nheterogonism\nheterogonous\nheterogonously\nheterogony\nheterograft\nheterographic\nheterographical\nheterography\nHeterogyna\nheterogynal\nheterogynous\nheteroicous\nheteroimmune\nheteroinfection\nheteroinoculable\nheteroinoculation\nheterointoxication\nheterokaryon\nheterokaryosis\nheterokaryotic\nheterokinesis\nheterokinetic\nHeterokontae\nheterokontan\nheterolalia\nheterolateral\nheterolecithal\nheterolith\nheterolobous\nheterologic\nheterological\nheterologically\nheterologous\nheterology\nheterolysin\nheterolysis\nheterolytic\nheteromallous\nheteromastigate\nheteromastigote\nHeteromeles\nHeteromera\nheteromeral\nHeteromeran\nHeteromeri\nheteromeric\nheteromerous\nHeterometabola\nheterometabole\nheterometabolic\nheterometabolism\nheterometabolous\nheterometaboly\nheterometric\nHeteromi\nHeteromita\nHeteromorpha\nHeteromorphae\nheteromorphic\nheteromorphism\nheteromorphite\nheteromorphosis\nheteromorphous\nheteromorphy\nHeteromya\nHeteromyaria\nheteromyarian\nHeteromyidae\nHeteromys\nheteronereid\nheteronereis\nHeteroneura\nheteronomous\nheteronomously\nheteronomy\nheteronuclear\nheteronym\nheteronymic\nheteronymous\nheteronymously\nheteronymy\nheteroousia\nHeteroousian\nheteroousian\nHeteroousiast\nheteroousious\nheteropathic\nheteropathy\nheteropelmous\nheteropetalous\nHeterophaga\nHeterophagi\nheterophagous\nheterophasia\nheterophemism\nheterophemist\nheterophemistic\nheterophemize\nheterophemy\nheterophile\nheterophoria\nheterophoric\nheterophylesis\nheterophyletic\nheterophyllous\nheterophylly\nheterophyly\nheterophyte\nheterophytic\nHeteropia\nHeteropidae\nheteroplasia\nheteroplasm\nheteroplastic\nheteroplasty\nheteroploid\nheteroploidy\nheteropod\nHeteropoda\nheteropodal\nheteropodous\nheteropolar\nheteropolarity\nheteropoly\nheteroproteide\nheteroproteose\nheteropter\nHeteroptera\nheteropterous\nheteroptics\nheteropycnosis\nHeterorhachis\nheteroscope\nheteroscopy\nheterosexual\nheterosexuality\nheteroside\nHeterosiphonales\nheterosis\nHeterosomata\nHeterosomati\nheterosomatous\nheterosome\nHeterosomi\nheterosomous\nHeterosporeae\nheterosporic\nHeterosporium\nheterosporous\nheterospory\nheterostatic\nheterostemonous\nHeterostraca\nheterostracan\nHeterostraci\nheterostrophic\nheterostrophous\nheterostrophy\nheterostyled\nheterostylism\nheterostylous\nheterostyly\nheterosuggestion\nheterosyllabic\nheterotactic\nheterotactous\nheterotaxia\nheterotaxic\nheterotaxis\nheterotaxy\nheterotelic\nheterothallic\nheterothallism\nheterothermal\nheterothermic\nheterotic\nheterotopia\nheterotopic\nheterotopism\nheterotopous\nheterotopy\nheterotransplant\nheterotransplantation\nheterotrich\nHeterotricha\nHeterotrichales\nHeterotrichida\nheterotrichosis\nheterotrichous\nheterotropal\nheterotroph\nheterotrophic\nheterotrophy\nheterotropia\nheterotropic\nheterotropous\nheterotype\nheterotypic\nheterotypical\nheteroxanthine\nheteroxenous\nheterozetesis\nheterozygosis\nheterozygosity\nheterozygote\nheterozygotic\nheterozygous\nheterozygousness\nhething\nhetman\nhetmanate\nhetmanship\nhetter\nhetterly\nHettie\nHetty\nheuau\nHeuchera\nheugh\nheulandite\nheumite\nheuretic\nheuristic\nheuristically\nHevea\nhevi\nhew\nhewable\nhewel\nhewer\nhewettite\nhewhall\nhewn\nhewt\nhex\nhexa\nhexabasic\nHexabiblos\nhexabiose\nhexabromide\nhexacanth\nhexacanthous\nhexacapsular\nhexacarbon\nhexace\nhexachloride\nhexachlorocyclohexane\nhexachloroethane\nhexachord\nhexachronous\nhexacid\nhexacolic\nHexacoralla\nhexacorallan\nHexacorallia\nhexacosane\nhexacosihedroid\nhexact\nhexactinal\nhexactine\nhexactinellid\nHexactinellida\nhexactinellidan\nhexactinelline\nhexactinian\nhexacyclic\nhexad\nhexadactyle\nhexadactylic\nhexadactylism\nhexadactylous\nhexadactyly\nhexadecahedroid\nhexadecane\nhexadecanoic\nhexadecene\nhexadecyl\nhexadic\nhexadiene\nhexadiyne\nhexafoil\nhexaglot\nhexagon\nhexagonal\nhexagonally\nhexagonial\nhexagonical\nhexagonous\nhexagram\nHexagrammidae\nhexagrammoid\nHexagrammos\nhexagyn\nHexagynia\nhexagynian\nhexagynous\nhexahedral\nhexahedron\nhexahydrate\nhexahydrated\nhexahydric\nhexahydride\nhexahydrite\nhexahydrobenzene\nhexahydroxy\nhexakisoctahedron\nhexakistetrahedron\nhexameral\nhexameric\nhexamerism\nhexameron\nhexamerous\nhexameter\nhexamethylenamine\nhexamethylene\nhexamethylenetetramine\nhexametral\nhexametric\nhexametrical\nhexametrist\nhexametrize\nhexametrographer\nHexamita\nhexamitiasis\nhexammine\nhexammino\nhexanaphthene\nHexanchidae\nHexanchus\nHexandria\nhexandric\nhexandrous\nhexandry\nhexane\nhexanedione\nhexangular\nhexangularly\nhexanitrate\nhexanitrodiphenylamine\nhexapartite\nhexaped\nhexapetaloid\nhexapetaloideous\nhexapetalous\nhexaphyllous\nhexapla\nhexaplar\nhexaplarian\nhexaplaric\nhexaploid\nhexaploidy\nhexapod\nHexapoda\nhexapodal\nhexapodan\nhexapodous\nhexapody\nhexapterous\nhexaradial\nhexarch\nhexarchy\nhexaseme\nhexasemic\nhexasepalous\nhexaspermous\nhexastemonous\nhexaster\nhexastich\nhexastichic\nhexastichon\nhexastichous\nhexastichy\nhexastigm\nhexastylar\nhexastyle\nhexastylos\nhexasulphide\nhexasyllabic\nhexatetrahedron\nHexateuch\nHexateuchal\nhexathlon\nhexatomic\nhexatriacontane\nhexatriose\nhexavalent\nhexecontane\nhexenbesen\nhexene\nhexer\nhexerei\nhexeris\nhexestrol\nhexicological\nhexicology\nhexine\nhexiological\nhexiology\nhexis\nhexitol\nhexoctahedral\nhexoctahedron\nhexode\nhexoestrol\nhexogen\nhexoic\nhexokinase\nhexone\nhexonic\nhexosamine\nhexosaminic\nhexosan\nhexose\nhexosediphosphoric\nhexosemonophosphoric\nhexosephosphatase\nhexosephosphoric\nhexoylene\nhexpartite\nhexyl\nhexylene\nhexylic\nhexylresorcinol\nhexyne\nhey\nheyday\nHezron\nHezronites\nhi\nhia\nHianakoto\nhiant\nhiatal\nhiate\nhiation\nhiatus\nHibbertia\nhibbin\nhibernacle\nhibernacular\nhibernaculum\nhibernal\nhibernate\nhibernation\nhibernator\nHibernia\nHibernian\nHibernianism\nHibernic\nHibernical\nHibernically\nHibernicism\nHibernicize\nHibernization\nHibernize\nHibernologist\nHibernology\nHibiscus\nHibito\nHibitos\nHibunci\nhic\nhicatee\nhiccup\nhick\nhickey\nhickory\nHicksite\nhickwall\nHicoria\nhidable\nhidage\nhidalgism\nhidalgo\nhidalgoism\nhidated\nhidation\nHidatsa\nhidden\nhiddenite\nhiddenly\nhiddenmost\nhiddenness\nhide\nhideaway\nhidebind\nhidebound\nhideboundness\nhided\nhideland\nhideless\nhideling\nhideosity\nhideous\nhideously\nhideousness\nhider\nhidling\nhidlings\nhidradenitis\nhidrocystoma\nhidromancy\nhidropoiesis\nhidrosis\nhidrotic\nhie\nhieder\nhielaman\nhield\nhielmite\nhiemal\nhiemation\nHienz\nHieracian\nHieracium\nhieracosphinx\nhierapicra\nhierarch\nhierarchal\nhierarchic\nhierarchical\nhierarchically\nhierarchism\nhierarchist\nhierarchize\nhierarchy\nhieratic\nhieratical\nhieratically\nhieraticism\nhieratite\nHierochloe\nhierocracy\nhierocratic\nhierocratical\nhierodule\nhierodulic\nHierofalco\nhierogamy\nhieroglyph\nhieroglypher\nhieroglyphic\nhieroglyphical\nhieroglyphically\nhieroglyphist\nhieroglyphize\nhieroglyphology\nhieroglyphy\nhierogram\nhierogrammat\nhierogrammate\nhierogrammateus\nhierogrammatic\nhierogrammatical\nhierogrammatist\nhierograph\nhierographer\nhierographic\nhierographical\nhierography\nhierolatry\nhierologic\nhierological\nhierologist\nhierology\nhieromachy\nhieromancy\nhieromnemon\nhieromonach\nhieron\nHieronymic\nHieronymite\nhieropathic\nhierophancy\nhierophant\nhierophantes\nhierophantic\nhierophantically\nhierophanticly\nhieros\nhieroscopy\nHierosolymitan\nHierosolymite\nhierurgical\nhierurgy\nhifalutin\nhigdon\nhiggaion\nhigginsite\nhiggle\nhigglehaggle\nhiggler\nhigglery\nhigh\nhighball\nhighbelia\nhighbinder\nhighborn\nhighboy\nhighbred\nhigher\nhighermost\nhighest\nhighfalutin\nhighfaluting\nhighfalutinism\nhighflying\nhighhanded\nhighhandedly\nhighhandedness\nhighhearted\nhighheartedly\nhighheartedness\nhighish\nhighjack\nhighjacker\nhighland\nhighlander\nhighlandish\nHighlandman\nHighlandry\nhighlight\nhighliving\nhighly\nhighman\nhighmoor\nhighmost\nhighness\nhighroad\nhight\nhightoby\nhightop\nhighway\nhighwayman\nhiguero\nhijack\nhike\nhiker\nHilaria\nhilarious\nhilariously\nhilariousness\nhilarity\nHilary\nHilarymas\nHilarytide\nhilasmic\nhilch\nHilda\nHildebrand\nHildebrandian\nHildebrandic\nHildebrandine\nHildebrandism\nHildebrandist\nHildebrandslied\nHildegarde\nhilding\nhiliferous\nhill\nHillary\nhillberry\nhillbilly\nhillculture\nhillebrandite\nHillel\nhiller\nhillet\nHillhousia\nhilliness\nhillman\nhillock\nhillocked\nhillocky\nhillsale\nhillsalesman\nhillside\nhillsman\nhilltop\nhilltrot\nhillward\nhillwoman\nhilly\nhilsa\nhilt\nhiltless\nhilum\nhilus\nhim\nHima\nHimalaya\nHimalayan\nHimantopus\nhimation\nHimawan\nhimp\nhimself\nhimward\nhimwards\nHimyaric\nHimyarite\nHimyaritic\nhin\nhinau\nHinayana\nhinch\nhind\nhindberry\nhindbrain\nhindcast\nhinddeck\nhinder\nhinderance\nhinderer\nhinderest\nhinderful\nhinderfully\nhinderingly\nhinderlands\nhinderlings\nhinderlins\nhinderly\nhinderment\nhindermost\nhindersome\nhindhand\nhindhead\nHindi\nhindmost\nhindquarter\nhindrance\nhindsaddle\nhindsight\nHindu\nHinduism\nHinduize\nHindustani\nhindward\nhing\nhinge\nhingecorner\nhingeflower\nhingeless\nhingelike\nhinger\nhingeways\nhingle\nhinney\nhinnible\nHinnites\nhinny\nhinoid\nhinoideous\nhinoki\nhinsdalite\nhint\nhintedly\nhinter\nhinterland\nhintingly\nhintproof\nhintzeite\nHiodon\nhiodont\nHiodontidae\nhiortdahlite\nhip\nhipbone\nhipe\nhiper\nhiphalt\nhipless\nhipmold\nHippa\nhippalectryon\nhipparch\nHipparion\nHippeastrum\nhipped\nHippelates\nhippen\nHippia\nhippian\nhippiater\nhippiatric\nhippiatrical\nhippiatrics\nhippiatrist\nhippiatry\nhippic\nHippidae\nHippidion\nHippidium\nhipping\nhippish\nhipple\nhippo\nHippobosca\nhippoboscid\nHippoboscidae\nhippocamp\nhippocampal\nhippocampi\nhippocampine\nhippocampus\nHippocastanaceae\nhippocastanaceous\nhippocaust\nhippocentaur\nhippocentauric\nhippocerf\nhippocoprosterol\nhippocras\nHippocratea\nHippocrateaceae\nhippocrateaceous\nHippocratian\nHippocratic\nHippocratical\nHippocratism\nHippocrene\nHippocrenian\nhippocrepian\nhippocrepiform\nHippodamia\nhippodamous\nhippodrome\nhippodromic\nhippodromist\nhippogastronomy\nHippoglosinae\nHippoglossidae\nHippoglossus\nhippogriff\nhippogriffin\nhippoid\nhippolite\nhippolith\nhippological\nhippologist\nhippology\nHippolytan\nHippolyte\nHippolytidae\nHippolytus\nhippomachy\nhippomancy\nhippomanes\nHippomedon\nhippomelanin\nHippomenes\nhippometer\nhippometric\nhippometry\nHipponactean\nhipponosological\nhipponosology\nhippopathological\nhippopathology\nhippophagi\nhippophagism\nhippophagist\nhippophagistical\nhippophagous\nhippophagy\nhippophile\nhippophobia\nhippopod\nhippopotami\nhippopotamian\nhippopotamic\nHippopotamidae\nhippopotamine\nhippopotamoid\nhippopotamus\nHipposelinum\nhippotigrine\nHippotigris\nhippotomical\nhippotomist\nhippotomy\nhippotragine\nHippotragus\nhippurate\nhippuric\nhippurid\nHippuridaceae\nHippuris\nhippurite\nHippurites\nhippuritic\nHippuritidae\nhippuritoid\nhippus\nhippy\nhipshot\nhipwort\nhirable\nhiragana\nHiram\nHiramite\nhircarra\nhircine\nhircinous\nhircocerf\nhircocervus\nhircosity\nhire\nhired\nhireless\nhireling\nhireman\nHiren\nhirer\nhirmologion\nhirmos\nHirneola\nhiro\nHirofumi\nhirondelle\nHirotoshi\nHiroyuki\nhirple\nhirrient\nhirse\nhirsel\nhirsle\nhirsute\nhirsuteness\nhirsuties\nhirsutism\nhirsutulous\nHirtella\nhirtellous\nHirudin\nhirudine\nHirudinea\nhirudinean\nhirudiniculture\nHirudinidae\nhirudinize\nhirudinoid\nHirudo\nhirundine\nHirundinidae\nhirundinous\nHirundo\nhis\nhish\nhisingerite\nhisn\nHispa\nHispania\nHispanic\nHispanicism\nHispanicize\nhispanidad\nHispaniolate\nHispaniolize\nHispanist\nHispanize\nHispanophile\nHispanophobe\nhispid\nhispidity\nhispidulate\nhispidulous\nHispinae\nhiss\nhisser\nhissing\nhissingly\nhissproof\nhist\nhistaminase\nhistamine\nhistaminic\nhistidine\nhistie\nhistiocyte\nhistiocytic\nhistioid\nhistiology\nHistiophoridae\nHistiophorus\nhistoblast\nhistochemic\nhistochemical\nhistochemistry\nhistoclastic\nhistocyte\nhistodiagnosis\nhistodialysis\nhistodialytic\nhistogen\nhistogenesis\nhistogenetic\nhistogenetically\nhistogenic\nhistogenous\nhistogeny\nhistogram\nhistographer\nhistographic\nhistographical\nhistography\nhistoid\nhistologic\nhistological\nhistologically\nhistologist\nhistology\nhistolysis\nhistolytic\nhistometabasis\nhistomorphological\nhistomorphologically\nhistomorphology\nhiston\nhistonal\nhistone\nhistonomy\nhistopathologic\nhistopathological\nhistopathologist\nhistopathology\nhistophyly\nhistophysiological\nhistophysiology\nHistoplasma\nhistoplasmin\nhistoplasmosis\nhistorial\nhistorian\nhistoriated\nhistoric\nhistorical\nhistorically\nhistoricalness\nhistorician\nhistoricism\nhistoricity\nhistoricize\nhistoricocabbalistical\nhistoricocritical\nhistoricocultural\nhistoricodogmatic\nhistoricogeographical\nhistoricophilosophica\nhistoricophysical\nhistoricopolitical\nhistoricoprophetic\nhistoricoreligious\nhistorics\nhistoricus\nhistoried\nhistorier\nhistoriette\nhistorify\nhistoriograph\nhistoriographer\nhistoriographership\nhistoriographic\nhistoriographical\nhistoriographically\nhistoriography\nhistoriological\nhistoriology\nhistoriometric\nhistoriometry\nhistorionomer\nhistorious\nhistorism\nhistorize\nhistory\nhistotherapist\nhistotherapy\nhistotome\nhistotomy\nhistotrophic\nhistotrophy\nhistotropic\nhistozoic\nhistozyme\nhistrio\nHistriobdella\nHistriomastix\nhistrion\nhistrionic\nhistrionical\nhistrionically\nhistrionicism\nhistrionism\nhit\nhitch\nhitcher\nhitchhike\nhitchhiker\nhitchily\nhitchiness\nHitchiti\nhitchproof\nhitchy\nhithe\nhither\nhithermost\nhitherto\nhitherward\nHitlerism\nHitlerite\nhitless\nHitoshi\nhittable\nhitter\nHittite\nHittitics\nHittitology\nHittology\nhive\nhiveless\nhiver\nhives\nhiveward\nHivite\nhizz\nHler\nHlidhskjalf\nHlithskjalf\nHlorrithi\nHo\nho\nhoar\nhoard\nhoarder\nhoarding\nhoardward\nhoarfrost\nhoarhead\nhoarheaded\nhoarhound\nhoarily\nhoariness\nhoarish\nhoarness\nhoarse\nhoarsely\nhoarsen\nhoarseness\nhoarstone\nhoarwort\nhoary\nhoaryheaded\nhoast\nhoastman\nhoatzin\nhoax\nhoaxee\nhoaxer\nhoaxproof\nhob\nhobber\nHobbesian\nhobbet\nHobbian\nhobbil\nHobbism\nHobbist\nHobbistical\nhobble\nhobblebush\nhobbledehoy\nhobbledehoydom\nhobbledehoyhood\nhobbledehoyish\nhobbledehoyishness\nhobbledehoyism\nhobbledygee\nhobbler\nhobbling\nhobblingly\nhobbly\nhobby\nhobbyhorse\nhobbyhorsical\nhobbyhorsically\nhobbyism\nhobbyist\nhobbyless\nhobgoblin\nhoblike\nhobnail\nhobnailed\nhobnailer\nhobnob\nhobo\nhoboism\nHobomoco\nhobthrush\nhocco\nHochelaga\nHochheimer\nhock\nHockday\nhockelty\nhocker\nhocket\nhockey\nhockshin\nHocktide\nhocky\nhocus\nhod\nhodden\nhodder\nhoddle\nhoddy\nhodening\nhodful\nhodgepodge\nHodgkin\nhodgkinsonite\nhodiernal\nhodman\nhodmandod\nhodograph\nhodometer\nhodometrical\nhoe\nhoecake\nhoedown\nhoeful\nhoer\nhoernesite\nHoffmannist\nHoffmannite\nhog\nhoga\nhogan\nHogarthian\nhogback\nhogbush\nhogfish\nhogframe\nhogged\nhogger\nhoggerel\nhoggery\nhogget\nhoggie\nhoggin\nhoggish\nhoggishly\nhoggishness\nhoggism\nhoggy\nhogherd\nhoghide\nhoghood\nhoglike\nhogling\nhogmace\nhogmanay\nHogni\nhognose\nhognut\nhogpen\nhogreeve\nhogrophyte\nhogshead\nhogship\nhogshouther\nhogskin\nhogsty\nhogward\nhogwash\nhogweed\nhogwort\nhogyard\nHohe\nHohenzollern\nHohenzollernism\nHohn\nHohokam\nhoi\nhoick\nhoin\nhoise\nhoist\nhoistaway\nhoister\nhoisting\nhoistman\nhoistway\nhoit\nhoju\nHokan\nhokey\nhokeypokey\nhokum\nholagogue\nholarctic\nholard\nholarthritic\nholarthritis\nholaspidean\nholcad\nholcodont\nHolconoti\nHolcus\nhold\nholdable\nholdall\nholdback\nholden\nholdenite\nholder\nholdership\nholdfast\nholdfastness\nholding\nholdingly\nholdout\nholdover\nholdsman\nholdup\nhole\nholeable\nHolectypina\nholectypoid\nholeless\nholeman\nholeproof\nholer\nholethnic\nholethnos\nholewort\nholey\nholia\nholiday\nholidayer\nholidayism\nholidaymaker\nholidaymaking\nholily\nholiness\nholing\nholinight\nholism\nholistic\nholistically\nholl\nholla\nhollaite\nHolland\nhollandaise\nHollander\nHollandish\nhollandite\nHollands\nHollantide\nholler\nhollin\nholliper\nhollo\nhollock\nhollong\nhollow\nhollower\nhollowfaced\nhollowfoot\nhollowhearted\nhollowheartedness\nhollowly\nhollowness\nholluschick\nHolly\nholly\nhollyhock\nHollywood\nHollywooder\nHollywoodize\nholm\nholmberry\nholmgang\nholmia\nholmic\nholmium\nholmos\nholobaptist\nholobenthic\nholoblastic\nholoblastically\nholobranch\nholocaine\nholocarpic\nholocarpous\nholocaust\nholocaustal\nholocaustic\nHolocene\nholocentrid\nHolocentridae\nholocentroid\nHolocentrus\nHolocephala\nholocephalan\nHolocephali\nholocephalian\nholocephalous\nHolochoanites\nholochoanitic\nholochoanoid\nHolochoanoida\nholochoanoidal\nholochordate\nholochroal\nholoclastic\nholocrine\nholocryptic\nholocrystalline\nholodactylic\nholodedron\nHolodiscus\nhologamous\nhologamy\nhologastrula\nhologastrular\nHolognatha\nholognathous\nhologonidium\nholograph\nholographic\nholographical\nholohedral\nholohedric\nholohedrism\nholohemihedral\nholohyaline\nholomastigote\nHolometabola\nholometabole\nholometabolian\nholometabolic\nholometabolism\nholometabolous\nholometaboly\nholometer\nholomorph\nholomorphic\nholomorphism\nholomorphosis\nholomorphy\nHolomyaria\nholomyarian\nHolomyarii\nholoparasite\nholoparasitic\nHolophane\nholophane\nholophotal\nholophote\nholophotometer\nholophrase\nholophrasis\nholophrasm\nholophrastic\nholophyte\nholophytic\nholoplankton\nholoplanktonic\nholoplexia\nholopneustic\nholoproteide\nholoptic\nholoptychian\nholoptychiid\nHoloptychiidae\nHoloptychius\nholoquinoid\nholoquinoidal\nholoquinonic\nholoquinonoid\nholorhinal\nholosaprophyte\nholosaprophytic\nholosericeous\nholoside\nholosiderite\nHolosiphona\nholosiphonate\nHolosomata\nholosomatous\nholospondaic\nholostean\nHolostei\nholosteous\nholosteric\nHolosteum\nHolostomata\nholostomate\nholostomatous\nholostome\nholostomous\nholostylic\nholosymmetric\nholosymmetrical\nholosymmetry\nholosystematic\nholosystolic\nholothecal\nholothoracic\nHolothuria\nholothurian\nHolothuridea\nholothurioid\nHolothurioidea\nholotonia\nholotonic\nholotony\nholotrich\nHolotricha\nholotrichal\nHolotrichida\nholotrichous\nholotype\nholour\nholozoic\nHolstein\nholster\nholstered\nholt\nholy\nholyday\nholyokeite\nholystone\nholytide\nhomage\nhomageable\nhomager\nHomalocenchrus\nhomalogonatous\nhomalographic\nhomaloid\nhomaloidal\nHomalonotus\nHomalopsinae\nHomaloptera\nHomalopterous\nhomalosternal\nHomalosternii\nHomam\nHomaridae\nhomarine\nhomaroid\nHomarus\nhomatomic\nhomaxial\nhomaxonial\nhomaxonic\nHomburg\nhome\nhomebody\nhomeborn\nhomebound\nhomebred\nhomecomer\nhomecraft\nhomecroft\nhomecrofter\nhomecrofting\nhomefarer\nhomefelt\nhomegoer\nhomekeeper\nhomekeeping\nhomeland\nhomelander\nhomeless\nhomelessly\nhomelessness\nhomelet\nhomelike\nhomelikeness\nhomelily\nhomeliness\nhomeling\nhomely\nhomelyn\nhomemade\nhomemaker\nhomemaking\nhomeoblastic\nhomeochromatic\nhomeochromatism\nhomeochronous\nhomeocrystalline\nhomeogenic\nhomeogenous\nhomeoid\nhomeoidal\nhomeoidality\nhomeokinesis\nhomeokinetic\nhomeomerous\nhomeomorph\nhomeomorphic\nhomeomorphism\nhomeomorphous\nhomeomorphy\nhomeopath\nhomeopathic\nhomeopathically\nhomeopathician\nhomeopathicity\nhomeopathist\nhomeopathy\nhomeophony\nhomeoplasia\nhomeoplastic\nhomeoplasy\nhomeopolar\nhomeosis\nhomeostasis\nhomeostatic\nhomeotic\nhomeotransplant\nhomeotransplantation\nhomeotype\nhomeotypic\nhomeotypical\nhomeowner\nhomeozoic\nHomer\nhomer\nHomerian\nHomeric\nHomerical\nHomerically\nHomerid\nHomeridae\nHomeridian\nHomerist\nHomerologist\nHomerology\nHomeromastix\nhomeseeker\nhomesick\nhomesickly\nhomesickness\nhomesite\nhomesome\nhomespun\nhomestall\nhomestead\nhomesteader\nhomester\nhomestretch\nhomeward\nhomewardly\nhomework\nhomeworker\nhomewort\nhomey\nhomeyness\nhomicidal\nhomicidally\nhomicide\nhomicidious\nhomiculture\nhomilete\nhomiletic\nhomiletical\nhomiletically\nhomiletics\nhomiliarium\nhomiliary\nhomilist\nhomilite\nhomilize\nhomily\nhominal\nhominess\nHominian\nhominid\nHominidae\nhominiform\nhominify\nhominine\nhominisection\nhominivorous\nhominoid\nhominy\nhomish\nhomishness\nhomo\nhomoanisaldehyde\nhomoanisic\nhomoarecoline\nhomobaric\nhomoblastic\nhomoblasty\nhomocarpous\nhomocategoric\nhomocentric\nhomocentrical\nhomocentrically\nhomocerc\nhomocercal\nhomocercality\nhomocercy\nhomocerebrin\nhomochiral\nhomochlamydeous\nhomochromatic\nhomochromatism\nhomochrome\nhomochromic\nhomochromosome\nhomochromous\nhomochromy\nhomochronous\nhomoclinal\nhomocline\nHomocoela\nhomocoelous\nhomocreosol\nhomocyclic\nhomodermic\nhomodermy\nhomodont\nhomodontism\nhomodox\nhomodoxian\nhomodromal\nhomodrome\nhomodromous\nhomodromy\nhomodynamic\nhomodynamous\nhomodynamy\nhomodyne\nHomoean\nHomoeanism\nhomoecious\nhomoeoarchy\nhomoeoblastic\nhomoeochromatic\nhomoeochronous\nhomoeocrystalline\nhomoeogenic\nhomoeogenous\nhomoeography\nhomoeokinesis\nhomoeomerae\nHomoeomeri\nhomoeomeria\nhomoeomerian\nhomoeomerianism\nhomoeomeric\nhomoeomerical\nhomoeomerous\nhomoeomery\nhomoeomorph\nhomoeomorphic\nhomoeomorphism\nhomoeomorphous\nhomoeomorphy\nhomoeopath\nhomoeopathic\nhomoeopathically\nhomoeopathician\nhomoeopathicity\nhomoeopathist\nhomoeopathy\nhomoeophony\nhomoeophyllous\nhomoeoplasia\nhomoeoplastic\nhomoeoplasy\nhomoeopolar\nhomoeosis\nhomoeotel\nhomoeoteleutic\nhomoeoteleuton\nhomoeotic\nhomoeotopy\nhomoeotype\nhomoeotypic\nhomoeotypical\nhomoeozoic\nhomoerotic\nhomoerotism\nhomofermentative\nhomogametic\nhomogamic\nhomogamous\nhomogamy\nhomogangliate\nhomogen\nhomogenate\nhomogene\nhomogeneal\nhomogenealness\nhomogeneate\nhomogeneity\nhomogeneization\nhomogeneize\nhomogeneous\nhomogeneously\nhomogeneousness\nhomogenesis\nhomogenetic\nhomogenetical\nhomogenic\nhomogenization\nhomogenize\nhomogenizer\nhomogenous\nhomogentisic\nhomogeny\nhomoglot\nhomogone\nhomogonous\nhomogonously\nhomogony\nhomograft\nhomograph\nhomographic\nhomography\nhomohedral\nhomoiotherm\nhomoiothermal\nhomoiothermic\nhomoiothermism\nhomoiothermous\nhomoiousia\nHomoiousian\nhomoiousian\nHomoiousianism\nhomoiousious\nhomolateral\nhomolecithal\nhomolegalis\nhomologate\nhomologation\nhomologic\nhomological\nhomologically\nhomologist\nhomologize\nhomologizer\nhomologon\nhomologoumena\nhomologous\nhomolographic\nhomolography\nhomologue\nhomology\nhomolosine\nhomolysin\nhomolysis\nhomomallous\nhomomeral\nhomomerous\nhomometrical\nhomometrically\nhomomorph\nHomomorpha\nhomomorphic\nhomomorphism\nhomomorphosis\nhomomorphous\nhomomorphy\nHomoneura\nhomonomous\nhomonomy\nhomonuclear\nhomonym\nhomonymic\nhomonymous\nhomonymously\nhomonymy\nhomoousia\nHomoousian\nHomoousianism\nHomoousianist\nHomoousiast\nHomoousion\nhomoousious\nhomopathy\nhomoperiodic\nhomopetalous\nhomophene\nhomophenous\nhomophone\nhomophonic\nhomophonous\nhomophony\nhomophthalic\nhomophylic\nhomophyllous\nhomophyly\nhomopiperonyl\nhomoplasis\nhomoplasmic\nhomoplasmy\nhomoplast\nhomoplastic\nhomoplasy\nhomopolar\nhomopolarity\nhomopolic\nhomopter\nHomoptera\nhomopteran\nhomopteron\nhomopterous\nHomorelaps\nhomorganic\nhomoseismal\nhomosexual\nhomosexualism\nhomosexualist\nhomosexuality\nhomosporous\nhomospory\nHomosteus\nhomostyled\nhomostylic\nhomostylism\nhomostylous\nhomostyly\nhomosystemic\nhomotactic\nhomotatic\nhomotaxeous\nhomotaxia\nhomotaxial\nhomotaxially\nhomotaxic\nhomotaxis\nhomotaxy\nhomothallic\nhomothallism\nhomothetic\nhomothety\nhomotonic\nhomotonous\nhomotonously\nhomotony\nhomotopic\nhomotransplant\nhomotransplantation\nhomotropal\nhomotropous\nhomotypal\nhomotype\nhomotypic\nhomotypical\nhomotypy\nhomovanillic\nhomovanillin\nhomoveratric\nhomoveratrole\nhomozygosis\nhomozygosity\nhomozygote\nhomozygous\nhomozygousness\nhomrai\nhomuncle\nhomuncular\nhomunculus\nhomy\nHon\nhonda\nhondo\nHonduran\nHonduranean\nHonduranian\nHondurean\nHondurian\nhone\nhonest\nhonestly\nhonestness\nhonestone\nhonesty\nhonewort\nhoney\nhoneybee\nhoneyberry\nhoneybind\nhoneyblob\nhoneybloom\nhoneycomb\nhoneycombed\nhoneydew\nhoneydewed\nhoneydrop\nhoneyed\nhoneyedly\nhoneyedness\nhoneyfall\nhoneyflower\nhoneyfogle\nhoneyful\nhoneyhearted\nhoneyless\nhoneylike\nhoneylipped\nhoneymoon\nhoneymooner\nhoneymoonlight\nhoneymoonshine\nhoneymoonstruck\nhoneymoony\nhoneymouthed\nhoneypod\nhoneypot\nhoneystone\nhoneysuck\nhoneysucker\nhoneysuckle\nhoneysuckled\nhoneysweet\nhoneyware\nHoneywood\nhoneywood\nhoneywort\nhong\nhonied\nhonily\nhonk\nhonker\nhonor\nHonora\nhonorability\nhonorable\nhonorableness\nhonorableship\nhonorably\nhonorance\nhonoraria\nhonorarily\nhonorarium\nhonorary\nhonoree\nhonorer\nhonoress\nhonorific\nhonorifically\nhonorless\nhonorous\nhonorsman\nhonorworthy\nhontish\nhontous\nHonzo\nhooch\nhoochinoo\nhood\nhoodcap\nhooded\nhoodedness\nhoodful\nhoodie\nhoodless\nhoodlike\nhoodlum\nhoodlumish\nhoodlumism\nhoodlumize\nhoodman\nhoodmold\nhoodoo\nhoodsheaf\nhoodshy\nhoodshyness\nhoodwink\nhoodwinkable\nhoodwinker\nhoodwise\nhoodwort\nhooey\nhoof\nhoofbeat\nhoofbound\nhoofed\nhoofer\nhoofiness\nhoofish\nhoofless\nhooflet\nhooflike\nhoofmark\nhoofprint\nhoofrot\nhoofs\nhoofworm\nhoofy\nhook\nhookah\nhookaroon\nhooked\nhookedness\nhookedwise\nhooker\nHookera\nhookerman\nhookers\nhookheal\nhookish\nhookless\nhooklet\nhooklike\nhookmaker\nhookmaking\nhookman\nhooknose\nhooksmith\nhooktip\nhookum\nhookup\nhookweed\nhookwise\nhookworm\nhookwormer\nhookwormy\nhooky\nhooligan\nhooliganism\nhooliganize\nhoolock\nhooly\nhoon\nhoonoomaun\nhoop\nhooped\nhooper\nhooping\nhoopla\nhoople\nhoopless\nhooplike\nhoopmaker\nhoopman\nhoopoe\nhoopstick\nhoopwood\nhoose\nhoosegow\nhoosh\nHoosier\nHoosierdom\nHoosierese\nHoosierize\nhoot\nhootay\nhooter\nhootingly\nhoove\nhooven\nHooverism\nHooverize\nhoovey\nhop\nhopbine\nhopbush\nHopcalite\nhopcrease\nhope\nhoped\nhopeful\nhopefully\nhopefulness\nhopeite\nhopeless\nhopelessly\nhopelessness\nhoper\nHopi\nhopi\nhopingly\nHopkinsian\nHopkinsianism\nHopkinsonian\nhoplite\nhoplitic\nhoplitodromos\nHoplocephalus\nhoplology\nhoplomachic\nhoplomachist\nhoplomachos\nhoplomachy\nHoplonemertea\nhoplonemertean\nhoplonemertine\nHoplonemertini\nhopoff\nhopped\nhopper\nhopperburn\nhopperdozer\nhopperette\nhoppergrass\nhopperings\nhopperman\nhoppers\nhoppestere\nhoppet\nhoppingly\nhoppity\nhopple\nhoppy\nhopscotch\nhopscotcher\nhoptoad\nhopvine\nhopyard\nhora\nhoral\nhorary\nHoratian\nHoratio\nHoratius\nhorbachite\nhordarian\nhordary\nhorde\nhordeaceous\nhordeiform\nhordein\nhordenine\nHordeum\nhorehound\nHorim\nhorismology\nhorizometer\nhorizon\nhorizonless\nhorizontal\nhorizontalism\nhorizontality\nhorizontalization\nhorizontalize\nhorizontally\nhorizontalness\nhorizontic\nhorizontical\nhorizontically\nhorizonward\nhorme\nhormic\nhormigo\nhormion\nhormist\nhormogon\nHormogonales\nHormogoneae\nHormogoneales\nhormogonium\nhormogonous\nhormonal\nhormone\nhormonic\nhormonize\nhormonogenesis\nhormonogenic\nhormonology\nhormonopoiesis\nhormonopoietic\nhormos\nhorn\nhornbeam\nhornbill\nhornblende\nhornblendic\nhornblendite\nhornblendophyre\nhornblower\nhornbook\nhorned\nhornedness\nhorner\nhornerah\nhornet\nhornety\nhornfair\nhornfels\nhornfish\nhornful\nhorngeld\nHornie\nhornify\nhornily\nhorniness\nhorning\nhornish\nhornist\nhornito\nhornless\nhornlessness\nhornlet\nhornlike\nhornotine\nhornpipe\nhornplant\nhornsman\nhornstay\nhornstone\nhornswoggle\nhorntail\nhornthumb\nhorntip\nhornwood\nhornwork\nhornworm\nhornwort\nhorny\nhornyhanded\nhornyhead\nhorograph\nhorographer\nhorography\nhorokaka\nhorologe\nhorologer\nhorologic\nhorological\nhorologically\nhorologiography\nhorologist\nhorologium\nhorologue\nhorology\nhorometrical\nhorometry\nHoronite\nhoropito\nhoropter\nhoropteric\nhoroptery\nhoroscopal\nhoroscope\nhoroscoper\nhoroscopic\nhoroscopical\nhoroscopist\nhoroscopy\nHorouta\nhorrendous\nhorrendously\nhorrent\nhorrescent\nhorreum\nhorribility\nhorrible\nhorribleness\nhorribly\nhorrid\nhorridity\nhorridly\nhorridness\nhorrific\nhorrifically\nhorrification\nhorrify\nhorripilant\nhorripilate\nhorripilation\nhorrisonant\nhorror\nhorrorful\nhorrorish\nhorrorist\nhorrorize\nhorrormonger\nhorrormongering\nhorrorous\nhorrorsome\nhorse\nhorseback\nhorsebacker\nhorseboy\nhorsebreaker\nhorsecar\nhorsecloth\nhorsecraft\nhorsedom\nhorsefair\nhorsefettler\nhorsefight\nhorsefish\nhorseflesh\nhorsefly\nhorsefoot\nhorsegate\nhorsehair\nhorsehaired\nhorsehead\nhorseherd\nhorsehide\nhorsehood\nhorsehoof\nhorsejockey\nhorsekeeper\nhorselaugh\nhorselaugher\nhorselaughter\nhorseleech\nhorseless\nhorselike\nhorseload\nhorseman\nhorsemanship\nhorsemastership\nhorsemint\nhorsemonger\nhorseplay\nhorseplayful\nhorsepond\nhorsepower\nhorsepox\nhorser\nhorseshoe\nhorseshoer\nhorsetail\nhorsetongue\nHorsetown\nhorsetree\nhorseway\nhorseweed\nhorsewhip\nhorsewhipper\nhorsewoman\nhorsewomanship\nhorsewood\nhorsfordite\nhorsify\nhorsily\nhorsiness\nhorsing\nHorst\nhorst\nhorsy\nhorsyism\nhortation\nhortative\nhortatively\nhortator\nhortatorily\nhortatory\nHortense\nHortensia\nhortensial\nHortensian\nhortensian\nhorticultural\nhorticulturally\nhorticulture\nhorticulturist\nhortite\nhortonolite\nhortulan\nHorvatian\nhory\nHosackia\nhosanna\nhose\nhosed\nhosel\nhoseless\nhoselike\nhoseman\nhosier\nhosiery\nhosiomartyr\nhospice\nhospitable\nhospitableness\nhospitably\nhospitage\nhospital\nhospitalary\nhospitaler\nhospitalism\nhospitality\nhospitalization\nhospitalize\nhospitant\nhospitate\nhospitation\nhospitator\nhospitious\nhospitium\nhospitize\nhospodar\nhospodariat\nhospodariate\nhost\nHosta\nhostage\nhostager\nhostageship\nhostel\nhosteler\nhostelry\nhoster\nhostess\nhostie\nhostile\nhostilely\nhostileness\nhostility\nhostilize\nhosting\nhostler\nhostlership\nhostlerwife\nhostless\nhostly\nhostry\nhostship\nhot\nhotbed\nhotblood\nhotbox\nhotbrained\nhotch\nhotchpot\nhotchpotch\nhotchpotchly\nhotel\nhoteldom\nhotelhood\nhotelier\nhotelization\nhotelize\nhotelkeeper\nhotelless\nhotelward\nhotfoot\nhothead\nhotheaded\nhotheadedly\nhotheadedness\nhothearted\nhotheartedly\nhotheartedness\nhothouse\nhoti\nhotly\nhotmouthed\nhotness\nhotspur\nhotspurred\nHotta\nHottentot\nHottentotese\nHottentotic\nHottentotish\nHottentotism\nhotter\nhottery\nhottish\nHottonia\nhoubara\nHoudan\nhough\nhoughband\nhougher\nhoughite\nhoughmagandy\nHoughton\nhounce\nhound\nhounder\nhoundfish\nhounding\nhoundish\nhoundlike\nhoundman\nhoundsbane\nhoundsberry\nhoundshark\nhoundy\nhouppelande\nhour\nhourful\nhourglass\nhouri\nhourless\nhourly\nhousage\nhousal\nHousatonic\nhouse\nhouseball\nhouseboat\nhouseboating\nhousebote\nhousebound\nhouseboy\nhousebreak\nhousebreaker\nhousebreaking\nhousebroke\nhousebroken\nhousebug\nhousebuilder\nhousebuilding\nhousecarl\nhousecoat\nhousecraft\nhousefast\nhousefather\nhousefly\nhouseful\nhousefurnishings\nhousehold\nhouseholder\nhouseholdership\nhouseholding\nhouseholdry\nhousekeep\nhousekeeper\nhousekeeperlike\nhousekeeperly\nhousekeeping\nhousel\nhouseleek\nhouseless\nhouselessness\nhouselet\nhouseline\nhouseling\nhousemaid\nhousemaidenly\nhousemaiding\nhousemaidy\nhouseman\nhousemaster\nhousemastership\nhousemate\nhousemating\nhouseminder\nhousemistress\nhousemother\nhousemotherly\nhouseowner\nhouser\nhouseridden\nhouseroom\nhousesmith\nhousetop\nhouseward\nhousewares\nhousewarm\nhousewarmer\nhousewarming\nhousewear\nhousewife\nhousewifeliness\nhousewifely\nhousewifery\nhousewifeship\nhousewifish\nhousewive\nhousework\nhousewright\nhousing\nHoustonia\nhousty\nhousy\nhoutou\nhouvari\nHova\nhove\nhovedance\nhovel\nhoveler\nhoven\nHovenia\nhover\nhoverer\nhovering\nhoveringly\nhoverly\nhow\nhowadji\nHoward\nhowardite\nhowbeit\nhowdah\nhowder\nhowdie\nhowdy\nhowe\nHowea\nhowel\nhowever\nhowff\nhowish\nhowitzer\nhowk\nhowkit\nhowl\nhowler\nhowlet\nhowling\nhowlingly\nhowlite\nhowso\nhowsoever\nhowsomever\nhox\nhoy\nHoya\nhoyden\nhoydenhood\nhoydenish\nhoydenism\nhoyle\nhoyman\nHrimfaxi\nHrothgar\nHsi\nHsuan\nHu\nhuaca\nhuaco\nhuajillo\nhuamuchil\nhuantajayite\nhuaracho\nHuari\nhuarizo\nHuashi\nHuastec\nHuastecan\nHuave\nHuavean\nhub\nhubb\nhubba\nhubber\nHubbite\nhubble\nhubbly\nhubbub\nhubbuboo\nhubby\nHubert\nhubmaker\nhubmaking\nhubnerite\nhubristic\nhubshi\nhuccatoon\nhuchen\nHuchnom\nhucho\nhuck\nhuckaback\nhuckle\nhuckleback\nhucklebacked\nhuckleberry\nhucklebone\nhuckmuck\nhuckster\nhucksterage\nhucksterer\nhucksteress\nhucksterize\nhuckstery\nhud\nhuddle\nhuddledom\nhuddlement\nhuddler\nhuddling\nhuddlingly\nhuddock\nhuddroun\nhuddup\nHudibras\nHudibrastic\nHudibrastically\nHudsonia\nHudsonian\nhudsonite\nhue\nhued\nhueful\nhueless\nhuelessness\nhuer\nHuey\nhuff\nhuffier\nhuffily\nhuffiness\nhuffingly\nhuffish\nhuffishly\nhuffishness\nhuffle\nhuffler\nhuffy\nhug\nhuge\nHugelia\nhugelite\nhugely\nhugeness\nhugeous\nhugeously\nhugeousness\nhuggable\nhugger\nhuggermugger\nhuggermuggery\nHuggin\nhugging\nhuggingly\nhuggle\nHugh\nHughes\nHughoc\nHugo\nHugoesque\nhugsome\nHuguenot\nHuguenotic\nHuguenotism\nhuh\nHui\nhuia\nhuipil\nhuisache\nhuiscoyol\nhuitain\nHuk\nHukbalahap\nhuke\nhula\nHuldah\nhuldee\nhulk\nhulkage\nhulking\nhulky\nhull\nhullabaloo\nhuller\nhullock\nhulloo\nhulotheism\nHulsean\nhulsite\nhulster\nhulu\nhulver\nhulverhead\nhulverheaded\nhum\nHuma\nhuman\nhumane\nhumanely\nhumaneness\nhumanhood\nhumanics\nhumanification\nhumaniform\nhumaniformian\nhumanify\nhumanish\nhumanism\nhumanist\nhumanistic\nhumanistical\nhumanistically\nhumanitarian\nhumanitarianism\nhumanitarianist\nhumanitarianize\nhumanitary\nhumanitian\nhumanity\nhumanitymonger\nhumanization\nhumanize\nhumanizer\nhumankind\nhumanlike\nhumanly\nhumanness\nhumanoid\nhumate\nhumble\nhumblebee\nhumblehearted\nhumblemouthed\nhumbleness\nhumbler\nhumblie\nhumblingly\nhumbly\nhumbo\nhumboldtilite\nhumboldtine\nhumboldtite\nhumbug\nhumbugability\nhumbugable\nhumbugger\nhumbuggery\nhumbuggism\nhumbuzz\nhumdinger\nhumdrum\nhumdrumminess\nhumdrummish\nhumdrummishness\nhumdudgeon\nHume\nHumean\nhumect\nhumectant\nhumectate\nhumectation\nhumective\nhumeral\nhumeri\nhumeroabdominal\nhumerocubital\nhumerodigital\nhumerodorsal\nhumerometacarpal\nhumeroradial\nhumeroscapular\nhumeroulnar\nhumerus\nhumet\nhumetty\nhumhum\nhumic\nhumicubation\nhumid\nhumidate\nhumidification\nhumidifier\nhumidify\nhumidistat\nhumidity\nhumidityproof\nhumidly\nhumidness\nhumidor\nhumific\nhumification\nhumifuse\nhumify\nhumiliant\nhumiliate\nhumiliating\nhumiliatingly\nhumiliation\nhumiliative\nhumiliator\nhumiliatory\nhumilific\nhumilitude\nhumility\nhumin\nHumiria\nHumiriaceae\nHumiriaceous\nHumism\nHumist\nhumistratous\nhumite\nhumlie\nhummel\nhummeler\nhummer\nhummie\nhumming\nhummingbird\nhummock\nhummocky\nhumor\nhumoral\nhumoralism\nhumoralist\nhumoralistic\nhumoresque\nhumoresquely\nhumorful\nhumorific\nhumorism\nhumorist\nhumoristic\nhumoristical\nhumorize\nhumorless\nhumorlessness\nhumorology\nhumorous\nhumorously\nhumorousness\nhumorproof\nhumorsome\nhumorsomely\nhumorsomeness\nhumourful\nhumous\nhump\nhumpback\nhumpbacked\nhumped\nhumph\nHumphrey\nhumpiness\nhumpless\nhumpty\nhumpy\nhumstrum\nhumulene\nhumulone\nHumulus\nhumus\nhumuslike\nHun\nHunanese\nhunch\nHunchakist\nhunchback\nhunchbacked\nhunchet\nhunchy\nhundi\nhundred\nhundredal\nhundredary\nhundreder\nhundredfold\nhundredman\nhundredpenny\nhundredth\nhundredweight\nhundredwork\nhung\nHungaria\nHungarian\nhungarite\nhunger\nhungerer\nhungeringly\nhungerless\nhungerly\nhungerproof\nhungerweed\nhungrify\nhungrily\nhungriness\nhungry\nhunh\nhunk\nHunker\nhunker\nHunkerism\nhunkerous\nhunkerousness\nhunkers\nhunkies\nHunkpapa\nhunks\nhunky\nHunlike\nHunnian\nHunnic\nHunnican\nHunnish\nHunnishness\nhunt\nhuntable\nhuntedly\nHunter\nHunterian\nhunterlike\nhuntilite\nhunting\nhuntress\nhuntsman\nhuntsmanship\nhuntswoman\nHunyak\nhup\nHupa\nhupaithric\nHura\nhura\nhurcheon\nhurdies\nhurdis\nhurdle\nhurdleman\nhurdler\nhurdlewise\nhurds\nhure\nhureaulite\nhureek\nHurf\nhurgila\nhurkle\nhurl\nhurlbarrow\nhurled\nhurler\nhurley\nhurleyhouse\nhurling\nhurlock\nhurly\nHuron\nhuron\nHuronian\nhurr\nhurrah\nHurri\nHurrian\nhurricane\nhurricanize\nhurricano\nhurried\nhurriedly\nhurriedness\nhurrier\nhurrisome\nhurrock\nhurroo\nhurroosh\nhurry\nhurryingly\nhurryproof\nhursinghar\nhurst\nhurt\nhurtable\nhurted\nhurter\nhurtful\nhurtfully\nhurtfulness\nhurting\nhurtingest\nhurtle\nhurtleberry\nhurtless\nhurtlessly\nhurtlessness\nhurtlingly\nhurtsome\nhurty\nhusband\nhusbandable\nhusbandage\nhusbander\nhusbandfield\nhusbandhood\nhusbandland\nhusbandless\nhusbandlike\nhusbandliness\nhusbandly\nhusbandman\nhusbandress\nhusbandry\nhusbandship\nhuse\nhush\nhushable\nhushaby\nhushcloth\nhushedly\nhusheen\nhushel\nhusher\nhushful\nhushfully\nhushing\nhushingly\nhushion\nhusho\nhusk\nhuskanaw\nhusked\nhuskened\nhusker\nhuskershredder\nhuskily\nhuskiness\nhusking\nhuskroot\nhuskwort\nHusky\nhusky\nhuso\nhuspil\nhuss\nhussar\nHussite\nHussitism\nhussy\nhussydom\nhussyness\nhusting\nhustle\nhustlecap\nhustlement\nhustler\nhut\nhutch\nhutcher\nhutchet\nHutchinsonian\nHutchinsonianism\nhutchinsonite\nHuterian\nhuthold\nhutholder\nhutia\nhutkeeper\nhutlet\nhutment\nHutsulian\nHutterites\nHuttonian\nHuttonianism\nhuttoning\nhuttonweed\nhutukhtu\nhuvelyk\nHuxleian\nHuygenian\nhuzoor\nHuzvaresh\nhuzz\nhuzza\nhuzzard\nHwa\nHy\nhyacinth\nHyacinthia\nhyacinthian\nhyacinthine\nHyacinthus\nHyades\nhyaena\nHyaenanche\nHyaenarctos\nHyaenidae\nHyaenodon\nhyaenodont\nhyaenodontoid\nHyakume\nhyalescence\nhyalescent\nhyaline\nhyalinization\nhyalinize\nhyalinocrystalline\nhyalinosis\nhyalite\nhyalitis\nhyaloandesite\nhyalobasalt\nhyalocrystalline\nhyalodacite\nhyalogen\nhyalograph\nhyalographer\nhyalography\nhyaloid\nhyaloiditis\nhyaloliparite\nhyalolith\nhyalomelan\nhyalomucoid\nHyalonema\nhyalophagia\nhyalophane\nhyalophyre\nhyalopilitic\nhyaloplasm\nhyaloplasma\nhyaloplasmic\nhyalopsite\nhyalopterous\nhyalosiderite\nHyalospongia\nhyalotekite\nhyalotype\nhyaluronic\nhyaluronidase\nHybanthus\nHybla\nHyblaea\nHyblaean\nHyblan\nhybodont\nHybodus\nhybosis\nhybrid\nhybridal\nhybridation\nhybridism\nhybridist\nhybridity\nhybridizable\nhybridization\nhybridize\nhybridizer\nhybridous\nhydantoate\nhydantoic\nhydantoin\nhydathode\nhydatid\nhydatidiform\nhydatidinous\nhydatidocele\nhydatiform\nhydatigenous\nHydatina\nhydatogenesis\nhydatogenic\nhydatogenous\nhydatoid\nhydatomorphic\nhydatomorphism\nhydatopneumatic\nhydatopneumatolytic\nhydatopyrogenic\nhydatoscopy\nHydnaceae\nhydnaceous\nhydnocarpate\nhydnocarpic\nHydnocarpus\nhydnoid\nHydnora\nHydnoraceae\nhydnoraceous\nHydnum\nHydra\nhydracetin\nHydrachna\nhydrachnid\nHydrachnidae\nhydracid\nhydracoral\nhydracrylate\nhydracrylic\nHydractinia\nhydractinian\nHydradephaga\nhydradephagan\nhydradephagous\nhydragogue\nhydragogy\nhydramine\nhydramnion\nhydramnios\nHydrangea\nHydrangeaceae\nhydrangeaceous\nhydrant\nhydranth\nhydrarch\nhydrargillite\nhydrargyrate\nhydrargyria\nhydrargyriasis\nhydrargyric\nhydrargyrism\nhydrargyrosis\nhydrargyrum\nhydrarthrosis\nhydrarthrus\nhydrastine\nHydrastis\nhydrate\nhydrated\nhydration\nhydrator\nhydratropic\nhydraucone\nhydraulic\nhydraulically\nhydraulician\nhydraulicity\nhydraulicked\nhydraulicon\nhydraulics\nhydraulist\nhydraulus\nhydrazide\nhydrazidine\nhydrazimethylene\nhydrazine\nhydrazino\nhydrazo\nhydrazoate\nhydrazobenzene\nhydrazoic\nhydrazone\nhydrazyl\nhydremia\nhydremic\nhydrencephalocele\nhydrencephaloid\nhydrencephalus\nhydria\nhydriatric\nhydriatrist\nhydriatry\nhydric\nhydrically\nHydrid\nhydride\nhydriform\nhydrindene\nhydriodate\nhydriodic\nhydriodide\nhydriotaphia\nHydriote\nhydro\nhydroa\nhydroadipsia\nhydroaeric\nhydroalcoholic\nhydroaromatic\nhydroatmospheric\nhydroaviation\nhydrobarometer\nHydrobates\nHydrobatidae\nhydrobenzoin\nhydrobilirubin\nhydrobiological\nhydrobiologist\nhydrobiology\nhydrobiosis\nhydrobiplane\nhydrobomb\nhydroboracite\nhydroborofluoric\nhydrobranchiate\nhydrobromate\nhydrobromic\nhydrobromide\nhydrocarbide\nhydrocarbon\nhydrocarbonaceous\nhydrocarbonate\nhydrocarbonic\nhydrocarbonous\nhydrocarbostyril\nhydrocardia\nHydrocaryaceae\nhydrocaryaceous\nhydrocatalysis\nhydrocauline\nhydrocaulus\nhydrocele\nhydrocellulose\nhydrocephalic\nhydrocephalocele\nhydrocephaloid\nhydrocephalous\nhydrocephalus\nhydrocephaly\nhydroceramic\nhydrocerussite\nHydrocharidaceae\nhydrocharidaceous\nHydrocharis\nHydrocharitaceae\nhydrocharitaceous\nHydrochelidon\nhydrochemical\nhydrochemistry\nhydrochlorate\nhydrochlorauric\nhydrochloric\nhydrochloride\nhydrochlorplatinic\nhydrochlorplatinous\nHydrochoerus\nhydrocholecystis\nhydrocinchonine\nhydrocinnamic\nhydrocirsocele\nhydrocladium\nhydroclastic\nHydrocleis\nhydroclimate\nhydrocobalticyanic\nhydrocoele\nhydrocollidine\nhydroconion\nHydrocorallia\nHydrocorallinae\nhydrocoralline\nHydrocores\nHydrocorisae\nhydrocorisan\nhydrocotarnine\nHydrocotyle\nhydrocoumaric\nhydrocupreine\nhydrocyanate\nhydrocyanic\nhydrocyanide\nhydrocycle\nhydrocyclic\nhydrocyclist\nHydrocyon\nhydrocyst\nhydrocystic\nHydrodamalidae\nHydrodamalis\nHydrodictyaceae\nHydrodictyon\nhydrodrome\nHydrodromica\nhydrodromican\nhydrodynamic\nhydrodynamical\nhydrodynamics\nhydrodynamometer\nhydroeconomics\nhydroelectric\nhydroelectricity\nhydroelectrization\nhydroergotinine\nhydroextract\nhydroextractor\nhydroferricyanic\nhydroferrocyanate\nhydroferrocyanic\nhydrofluate\nhydrofluoboric\nhydrofluoric\nhydrofluorid\nhydrofluoride\nhydrofluosilicate\nhydrofluosilicic\nhydrofluozirconic\nhydrofoil\nhydroforming\nhydrofranklinite\nhydrofuge\nhydrogalvanic\nhydrogel\nhydrogen\nhydrogenase\nhydrogenate\nhydrogenation\nhydrogenator\nhydrogenic\nhydrogenide\nhydrogenium\nhydrogenization\nhydrogenize\nhydrogenolysis\nHydrogenomonas\nhydrogenous\nhydrogeological\nhydrogeology\nhydroglider\nhydrognosy\nhydrogode\nhydrograph\nhydrographer\nhydrographic\nhydrographical\nhydrographically\nhydrography\nhydrogymnastics\nhydrohalide\nhydrohematite\nhydrohemothorax\nhydroid\nHydroida\nHydroidea\nhydroidean\nhydroiodic\nhydrokinetic\nhydrokinetical\nhydrokinetics\nhydrol\nhydrolase\nhydrolatry\nHydrolea\nHydroleaceae\nhydrolize\nhydrologic\nhydrological\nhydrologically\nhydrologist\nhydrology\nhydrolysis\nhydrolyst\nhydrolyte\nhydrolytic\nhydrolyzable\nhydrolyzate\nhydrolyzation\nhydrolyze\nhydromagnesite\nhydromancer\nhydromancy\nhydromania\nhydromaniac\nhydromantic\nhydromantical\nhydromantically\nhydrome\nhydromechanical\nhydromechanics\nhydromedusa\nHydromedusae\nhydromedusan\nhydromedusoid\nhydromel\nhydromeningitis\nhydromeningocele\nhydrometallurgical\nhydrometallurgically\nhydrometallurgy\nhydrometamorphism\nhydrometeor\nhydrometeorological\nhydrometeorology\nhydrometer\nhydrometra\nhydrometric\nhydrometrical\nhydrometrid\nHydrometridae\nhydrometry\nhydromica\nhydromicaceous\nhydromonoplane\nhydromorph\nhydromorphic\nhydromorphous\nhydromorphy\nhydromotor\nhydromyelia\nhydromyelocele\nhydromyoma\nHydromys\nhydrone\nhydronegative\nhydronephelite\nhydronephrosis\nhydronephrotic\nhydronitric\nhydronitroprussic\nhydronitrous\nhydronium\nhydroparacoumaric\nHydroparastatae\nhydropath\nhydropathic\nhydropathical\nhydropathist\nhydropathy\nhydropericarditis\nhydropericardium\nhydroperiod\nhydroperitoneum\nhydroperitonitis\nhydroperoxide\nhydrophane\nhydrophanous\nhydrophid\nHydrophidae\nhydrophil\nhydrophile\nhydrophilic\nhydrophilid\nHydrophilidae\nhydrophilism\nhydrophilite\nhydrophiloid\nhydrophilous\nhydrophily\nHydrophinae\nHydrophis\nhydrophobe\nhydrophobia\nhydrophobic\nhydrophobical\nhydrophobist\nhydrophobophobia\nhydrophobous\nhydrophoby\nhydrophoid\nhydrophone\nHydrophora\nhydrophoran\nhydrophore\nhydrophoria\nhydrophorous\nhydrophthalmia\nhydrophthalmos\nhydrophthalmus\nhydrophylacium\nhydrophyll\nHydrophyllaceae\nhydrophyllaceous\nhydrophylliaceous\nhydrophyllium\nHydrophyllum\nhydrophysometra\nhydrophyte\nhydrophytic\nhydrophytism\nhydrophyton\nhydrophytous\nhydropic\nhydropical\nhydropically\nhydropigenous\nhydroplane\nhydroplanula\nhydroplatinocyanic\nhydroplutonic\nhydropneumatic\nhydropneumatosis\nhydropneumopericardium\nhydropneumothorax\nhydropolyp\nhydroponic\nhydroponicist\nhydroponics\nhydroponist\nhydropositive\nhydropot\nHydropotes\nhydropropulsion\nhydrops\nhydropsy\nHydropterideae\nhydroptic\nhydropult\nhydropultic\nhydroquinine\nhydroquinol\nhydroquinoline\nhydroquinone\nhydrorachis\nhydrorhiza\nhydrorhizal\nhydrorrhachis\nhydrorrhachitis\nhydrorrhea\nhydrorrhoea\nhydrorubber\nhydrosalpinx\nhydrosalt\nhydrosarcocele\nhydroscope\nhydroscopic\nhydroscopical\nhydroscopicity\nhydroscopist\nhydroselenic\nhydroselenide\nhydroselenuret\nhydroseparation\nhydrosilicate\nhydrosilicon\nhydrosol\nhydrosomal\nhydrosomatous\nhydrosome\nhydrosorbic\nhydrosphere\nhydrospire\nhydrospiric\nhydrostat\nhydrostatic\nhydrostatical\nhydrostatically\nhydrostatician\nhydrostatics\nhydrostome\nhydrosulphate\nhydrosulphide\nhydrosulphite\nhydrosulphocyanic\nhydrosulphurated\nhydrosulphuret\nhydrosulphureted\nhydrosulphuric\nhydrosulphurous\nhydrosulphuryl\nhydrotachymeter\nhydrotactic\nhydrotalcite\nhydrotasimeter\nhydrotaxis\nhydrotechnic\nhydrotechnical\nhydrotechnologist\nhydrotechny\nhydroterpene\nhydrotheca\nhydrothecal\nhydrotherapeutic\nhydrotherapeutics\nhydrotherapy\nhydrothermal\nhydrothoracic\nhydrothorax\nhydrotic\nhydrotical\nhydrotimeter\nhydrotimetric\nhydrotimetry\nhydrotomy\nhydrotropic\nhydrotropism\nhydroturbine\nhydrotype\nhydrous\nhydrovane\nhydroxamic\nhydroxamino\nhydroxide\nhydroximic\nhydroxy\nhydroxyacetic\nhydroxyanthraquinone\nhydroxybutyricacid\nhydroxyketone\nhydroxyl\nhydroxylactone\nhydroxylamine\nhydroxylate\nhydroxylation\nhydroxylic\nhydroxylization\nhydroxylize\nhydrozincite\nHydrozoa\nhydrozoal\nhydrozoan\nhydrozoic\nhydrozoon\nhydrula\nHydruntine\nHydrurus\nHydrus\nhydurilate\nhydurilic\nhyena\nhyenadog\nhyenanchin\nhyenic\nhyeniform\nhyenine\nhyenoid\nhyetal\nhyetograph\nhyetographic\nhyetographical\nhyetographically\nhyetography\nhyetological\nhyetology\nhyetometer\nhyetometrograph\nHygeia\nHygeian\nhygeiolatry\nhygeist\nhygeistic\nhygeology\nhygiantic\nhygiantics\nhygiastic\nhygiastics\nhygieist\nhygienal\nhygiene\nhygienic\nhygienical\nhygienically\nhygienics\nhygienist\nhygienization\nhygienize\nhygiologist\nhygiology\nhygric\nhygrine\nhygroblepharic\nhygrodeik\nhygroexpansivity\nhygrograph\nhygrology\nhygroma\nhygromatous\nhygrometer\nhygrometric\nhygrometrical\nhygrometrically\nhygrometry\nhygrophaneity\nhygrophanous\nhygrophilous\nhygrophobia\nhygrophthalmic\nhygrophyte\nhygrophytic\nhygroplasm\nhygroplasma\nhygroscope\nhygroscopic\nhygroscopical\nhygroscopically\nhygroscopicity\nhygroscopy\nhygrostat\nhygrostatics\nhygrostomia\nhygrothermal\nhygrothermograph\nhying\nhyke\nHyla\nhylactic\nhylactism\nhylarchic\nhylarchical\nhyle\nhyleg\nhylegiacal\nhylic\nhylicism\nhylicist\nHylidae\nhylism\nhylist\nHyllus\nHylobates\nhylobatian\nhylobatic\nhylobatine\nHylocereus\nHylocichla\nHylocomium\nHylodes\nhylogenesis\nhylogeny\nhyloid\nhylology\nhylomorphic\nhylomorphical\nhylomorphism\nhylomorphist\nhylomorphous\nHylomys\nhylopathism\nhylopathist\nhylopathy\nhylophagous\nhylotheism\nhylotheist\nhylotheistic\nhylotheistical\nhylotomous\nhylozoic\nhylozoism\nhylozoist\nhylozoistic\nhylozoistically\nhymen\nHymenaea\nHymenaeus\nHymenaic\nhymenal\nhymeneal\nhymeneally\nhymeneals\nhymenean\nhymenial\nhymenic\nhymenicolar\nhymeniferous\nhymeniophore\nhymenium\nHymenocallis\nHymenochaete\nHymenogaster\nHymenogastraceae\nhymenogeny\nhymenoid\nHymenolepis\nhymenomycetal\nhymenomycete\nHymenomycetes\nhymenomycetoid\nhymenomycetous\nhymenophore\nhymenophorum\nHymenophyllaceae\nhymenophyllaceous\nHymenophyllites\nHymenophyllum\nhymenopter\nHymenoptera\nhymenopteran\nhymenopterist\nhymenopterological\nhymenopterologist\nhymenopterology\nhymenopteron\nhymenopterous\nhymenotomy\nHymettian\nHymettic\nhymn\nhymnal\nhymnarium\nhymnary\nhymnbook\nhymner\nhymnic\nhymnist\nhymnless\nhymnlike\nhymnode\nhymnodical\nhymnodist\nhymnody\nhymnographer\nhymnography\nhymnologic\nhymnological\nhymnologically\nhymnologist\nhymnology\nhymnwise\nhynde\nhyne\nhyobranchial\nhyocholalic\nhyocholic\nhyoepiglottic\nhyoepiglottidean\nhyoglossal\nhyoglossus\nhyoglycocholic\nhyoid\nhyoidal\nhyoidan\nhyoideal\nhyoidean\nhyoides\nHyolithes\nhyolithid\nHyolithidae\nhyolithoid\nhyomandibula\nhyomandibular\nhyomental\nhyoplastral\nhyoplastron\nhyoscapular\nhyoscine\nhyoscyamine\nHyoscyamus\nhyosternal\nhyosternum\nhyostylic\nhyostyly\nhyothere\nHyotherium\nhyothyreoid\nhyothyroid\nhyp\nhypabyssal\nhypaethral\nhypaethron\nhypaethros\nhypaethrum\nhypalgesia\nhypalgia\nhypalgic\nhypallactic\nhypallage\nhypanthial\nhypanthium\nhypantrum\nHypapante\nhypapophysial\nhypapophysis\nhyparterial\nhypaspist\nhypate\nhypaton\nhypautomorphic\nhypaxial\nHypenantron\nhyper\nhyperabelian\nhyperabsorption\nhyperaccurate\nhyperacid\nhyperacidaminuria\nhyperacidity\nhyperacoustics\nhyperaction\nhyperactive\nhyperactivity\nhyperacuity\nhyperacusia\nhyperacusis\nhyperacute\nhyperacuteness\nhyperadenosis\nhyperadiposis\nhyperadiposity\nhyperadrenalemia\nhyperaeolism\nhyperalbuminosis\nhyperalgebra\nhyperalgesia\nhyperalgesic\nhyperalgesis\nhyperalgetic\nhyperalimentation\nhyperalkalinity\nhyperaltruism\nhyperaminoacidemia\nhyperanabolic\nhyperanarchy\nhyperangelical\nhyperaphia\nhyperaphic\nhyperapophyseal\nhyperapophysial\nhyperapophysis\nhyperarchaeological\nhyperarchepiscopal\nhyperazotemia\nhyperbarbarous\nhyperbatic\nhyperbatically\nhyperbaton\nhyperbola\nhyperbolaeon\nhyperbole\nhyperbolic\nhyperbolically\nhyperbolicly\nhyperbolism\nhyperbolize\nhyperboloid\nhyperboloidal\nhyperboreal\nHyperborean\nhyperborean\nhyperbrachycephal\nhyperbrachycephalic\nhyperbrachycephaly\nhyperbrachycranial\nhyperbrachyskelic\nhyperbranchia\nhyperbrutal\nhyperbulia\nhypercalcemia\nhypercarbamidemia\nhypercarbureted\nhypercarburetted\nhypercarnal\nhypercatalectic\nhypercatalexis\nhypercatharsis\nhypercathartic\nhypercathexis\nhypercenosis\nhyperchamaerrhine\nhyperchlorhydria\nhyperchloric\nhypercholesterinemia\nhypercholesterolemia\nhypercholia\nhypercivilization\nhypercivilized\nhyperclassical\nhyperclimax\nhypercoagulability\nhypercoagulable\nhypercomplex\nhypercomposite\nhyperconcentration\nhypercone\nhyperconfident\nhyperconformist\nhyperconscientious\nhyperconscientiousness\nhyperconscious\nhyperconsciousness\nhyperconservatism\nhyperconstitutional\nhypercoracoid\nhypercorrect\nhypercorrection\nhypercorrectness\nhypercosmic\nhypercreaturely\nhypercritic\nhypercritical\nhypercritically\nhypercriticism\nhypercriticize\nhypercryalgesia\nhypercube\nhypercyanotic\nhypercycle\nhypercylinder\nhyperdactyl\nhyperdactylia\nhyperdactyly\nhyperdeify\nhyperdelicacy\nhyperdelicate\nhyperdemocracy\nhyperdemocratic\nhyperdeterminant\nhyperdiabolical\nhyperdialectism\nhyperdiapason\nhyperdiapente\nhyperdiastole\nhyperdiatessaron\nhyperdiazeuxis\nhyperdicrotic\nhyperdicrotism\nhyperdicrotous\nhyperdimensional\nhyperdimensionality\nhyperdissyllable\nhyperdistention\nhyperditone\nhyperdivision\nhyperdolichocephal\nhyperdolichocephalic\nhyperdolichocephaly\nhyperdolichocranial\nhyperdoricism\nhyperdulia\nhyperdulic\nhyperdulical\nhyperelegant\nhyperelliptic\nhyperemesis\nhyperemetic\nhyperemia\nhyperemic\nhyperemotivity\nhyperemphasize\nhyperenthusiasm\nhypereosinophilia\nhyperephidrosis\nhyperequatorial\nhypererethism\nhyperessence\nhyperesthesia\nhyperesthetic\nhyperethical\nhypereuryprosopic\nhypereutectic\nhypereutectoid\nhyperexaltation\nhyperexcitability\nhyperexcitable\nhyperexcitement\nhyperexcursive\nhyperexophoria\nhyperextend\nhyperextension\nhyperfastidious\nhyperfederalist\nhyperfine\nhyperflexion\nhyperfocal\nhyperfunction\nhyperfunctional\nhyperfunctioning\nhypergalactia\nhypergamous\nhypergamy\nhypergenesis\nhypergenetic\nhypergeometric\nhypergeometrical\nhypergeometry\nhypergeusia\nhypergeustia\nhyperglycemia\nhyperglycemic\nhyperglycorrhachia\nhyperglycosuria\nhypergoddess\nhypergol\nhypergolic\nHypergon\nhypergrammatical\nhyperhedonia\nhyperhemoglobinemia\nhyperhilarious\nhyperhypocrisy\nHypericaceae\nhypericaceous\nHypericales\nhypericin\nhypericism\nHypericum\nhypericum\nhyperidealistic\nhyperideation\nhyperimmune\nhyperimmunity\nhyperimmunization\nhyperimmunize\nhyperingenuity\nhyperinosis\nhyperinotic\nhyperinsulinization\nhyperinsulinize\nhyperintellectual\nhyperintelligence\nhyperinvolution\nhyperirritability\nhyperirritable\nhyperisotonic\nhyperite\nhyperkeratosis\nhyperkinesia\nhyperkinesis\nhyperkinetic\nhyperlactation\nhyperleptoprosopic\nhyperleucocytosis\nhyperlipemia\nhyperlipoidemia\nhyperlithuria\nhyperlogical\nhyperlustrous\nhypermagical\nhypermakroskelic\nhypermedication\nhypermenorrhea\nhypermetabolism\nhypermetamorphic\nhypermetamorphism\nhypermetamorphosis\nhypermetamorphotic\nhypermetaphorical\nhypermetaphysical\nhypermetaplasia\nhypermeter\nhypermetric\nhypermetrical\nhypermetron\nhypermetrope\nhypermetropia\nhypermetropic\nhypermetropical\nhypermetropy\nhypermiraculous\nhypermixolydian\nhypermnesia\nhypermnesic\nhypermnesis\nhypermnestic\nhypermodest\nhypermonosyllable\nhypermoral\nhypermorph\nhypermorphism\nhypermorphosis\nhypermotile\nhypermotility\nhypermyotonia\nhypermyotrophy\nhypermyriorama\nhypermystical\nhypernatural\nhypernephroma\nhyperneuria\nhyperneurotic\nhypernic\nhypernitrogenous\nhypernomian\nhypernomic\nhypernormal\nhypernote\nhypernutrition\nHyperoartia\nhyperoartian\nhyperobtrusive\nhyperodontogeny\nHyperoodon\nhyperoon\nhyperope\nhyperopia\nhyperopic\nhyperorganic\nhyperorthognathic\nhyperorthognathous\nhyperorthognathy\nhyperosmia\nhyperosmic\nhyperostosis\nhyperostotic\nhyperothodox\nhyperothodoxy\nHyperotreta\nhyperotretan\nHyperotreti\nhyperotretous\nhyperoxidation\nhyperoxide\nhyperoxygenate\nhyperoxygenation\nhyperoxygenize\nhyperpanegyric\nhyperparasite\nhyperparasitic\nhyperparasitism\nhyperparasitize\nhyperparoxysm\nhyperpathetic\nhyperpatriotic\nhyperpencil\nhyperpepsinia\nhyperper\nhyperperistalsis\nhyperperistaltic\nhyperpersonal\nhyperphalangeal\nhyperphalangism\nhyperpharyngeal\nhyperphenomena\nhyperphoria\nhyperphoric\nhyperphosphorescence\nhyperphysical\nhyperphysically\nhyperphysics\nhyperpiesia\nhyperpiesis\nhyperpietic\nhyperpietist\nhyperpigmentation\nhyperpigmented\nhyperpinealism\nhyperpituitarism\nhyperplagiarism\nhyperplane\nhyperplasia\nhyperplasic\nhyperplastic\nhyperplatyrrhine\nhyperploid\nhyperploidy\nhyperpnea\nhyperpnoea\nhyperpolysyllabic\nhyperpredator\nhyperprism\nhyperproduction\nhyperprognathous\nhyperprophetical\nhyperprosexia\nhyperpulmonary\nhyperpure\nhyperpurist\nhyperpyramid\nhyperpyretic\nhyperpyrexia\nhyperpyrexial\nhyperquadric\nhyperrational\nhyperreactive\nhyperrealize\nhyperresonance\nhyperresonant\nhyperreverential\nhyperrhythmical\nhyperridiculous\nhyperritualism\nhypersacerdotal\nhypersaintly\nhypersalivation\nhypersceptical\nhyperscholastic\nhyperscrupulosity\nhypersecretion\nhypersensibility\nhypersensitive\nhypersensitiveness\nhypersensitivity\nhypersensitization\nhypersensitize\nhypersensual\nhypersensualism\nhypersensuous\nhypersentimental\nhypersolid\nhypersomnia\nhypersonic\nhypersophisticated\nhyperspace\nhyperspatial\nhyperspeculative\nhypersphere\nhyperspherical\nhyperspiritualizing\nhypersplenia\nhypersplenism\nhypersthene\nhypersthenia\nhypersthenic\nhypersthenite\nhyperstoic\nhyperstrophic\nhypersubtlety\nhypersuggestibility\nhypersuperlative\nhypersurface\nhypersusceptibility\nhypersusceptible\nhypersystole\nhypersystolic\nhypertechnical\nhypertelic\nhypertely\nhypertense\nhypertensin\nhypertension\nhypertensive\nhyperterrestrial\nhypertetrahedron\nhyperthermal\nhyperthermalgesia\nhyperthermesthesia\nhyperthermia\nhyperthermic\nhyperthermy\nhyperthesis\nhyperthetic\nhyperthetical\nhyperthyreosis\nhyperthyroid\nhyperthyroidism\nhyperthyroidization\nhyperthyroidize\nhypertonia\nhypertonic\nhypertonicity\nhypertonus\nhypertorrid\nhypertoxic\nhypertoxicity\nhypertragical\nhypertragically\nhypertranscendent\nhypertrichosis\nhypertridimensional\nhypertrophic\nhypertrophied\nhypertrophous\nhypertrophy\nhypertropia\nhypertropical\nhypertype\nhypertypic\nhypertypical\nhyperurbanism\nhyperuresis\nhypervascular\nhypervascularity\nhypervenosity\nhyperventilate\nhyperventilation\nhypervigilant\nhyperviscosity\nhypervitalization\nhypervitalize\nhypervitaminosis\nhypervolume\nhyperwrought\nhypesthesia\nhypesthesic\nhypethral\nhypha\nHyphaene\nhyphaeresis\nhyphal\nhyphedonia\nhyphema\nhyphen\nhyphenate\nhyphenated\nhyphenation\nhyphenic\nhyphenism\nhyphenization\nhyphenize\nhypho\nhyphodrome\nHyphomycetales\nhyphomycete\nHyphomycetes\nhyphomycetic\nhyphomycetous\nhyphomycosis\nhypidiomorphic\nhypidiomorphically\nhypinosis\nhypinotic\nHypnaceae\nhypnaceous\nhypnagogic\nhypnesthesis\nhypnesthetic\nhypnoanalysis\nhypnobate\nhypnocyst\nhypnody\nhypnoetic\nhypnogenesis\nhypnogenetic\nhypnoid\nhypnoidal\nhypnoidization\nhypnoidize\nhypnologic\nhypnological\nhypnologist\nhypnology\nhypnone\nhypnophobia\nhypnophobic\nhypnophoby\nhypnopompic\nHypnos\nhypnoses\nhypnosis\nhypnosperm\nhypnosporangium\nhypnospore\nhypnosporic\nhypnotherapy\nhypnotic\nhypnotically\nhypnotism\nhypnotist\nhypnotistic\nhypnotizability\nhypnotizable\nhypnotization\nhypnotize\nhypnotizer\nhypnotoid\nhypnotoxin\nHypnum\nhypo\nhypoacid\nhypoacidity\nhypoactive\nhypoactivity\nhypoadenia\nhypoadrenia\nhypoaeolian\nhypoalimentation\nhypoalkaline\nhypoalkalinity\nhypoaminoacidemia\nhypoantimonate\nhypoazoturia\nhypobasal\nhypobatholithic\nhypobenthonic\nhypobenthos\nhypoblast\nhypoblastic\nhypobole\nhypobranchial\nhypobranchiate\nhypobromite\nhypobromous\nhypobulia\nhypobulic\nhypocalcemia\nhypocarp\nhypocarpium\nhypocarpogean\nhypocatharsis\nhypocathartic\nhypocathexis\nhypocaust\nhypocentrum\nhypocephalus\nHypochaeris\nhypochil\nhypochilium\nhypochlorhydria\nhypochlorhydric\nhypochloric\nhypochlorite\nhypochlorous\nhypochloruria\nHypochnaceae\nhypochnose\nHypochnus\nhypochondria\nhypochondriac\nhypochondriacal\nhypochondriacally\nhypochondriacism\nhypochondrial\nhypochondriasis\nhypochondriast\nhypochondrium\nhypochondry\nhypochordal\nhypochromia\nhypochrosis\nhypochylia\nhypocist\nhypocleidian\nhypocleidium\nhypocoelom\nhypocondylar\nhypocone\nhypoconid\nhypoconule\nhypoconulid\nhypocoracoid\nhypocorism\nhypocoristic\nhypocoristical\nhypocoristically\nhypocotyl\nhypocotyleal\nhypocotyledonary\nhypocotyledonous\nhypocotylous\nhypocrater\nhypocrateriform\nhypocraterimorphous\nHypocreaceae\nhypocreaceous\nHypocreales\nhypocrisis\nhypocrisy\nhypocrital\nhypocrite\nhypocritic\nhypocritical\nhypocritically\nhypocrize\nhypocrystalline\nhypocycloid\nhypocycloidal\nhypocystotomy\nhypocytosis\nhypodactylum\nhypoderm\nhypoderma\nhypodermal\nhypodermatic\nhypodermatically\nhypodermatoclysis\nhypodermatomy\nHypodermella\nhypodermic\nhypodermically\nhypodermis\nhypodermoclysis\nhypodermosis\nhypodermous\nhypodiapason\nhypodiapente\nhypodiastole\nhypodiatessaron\nhypodiazeuxis\nhypodicrotic\nhypodicrotous\nhypoditone\nhypodorian\nhypodynamia\nhypodynamic\nhypoeliminator\nhypoendocrinism\nhypoeosinophilia\nhypoeutectic\nhypoeutectoid\nhypofunction\nhypogastric\nhypogastrium\nhypogastrocele\nhypogeal\nhypogean\nhypogee\nhypogeic\nhypogeiody\nhypogene\nhypogenesis\nhypogenetic\nhypogenic\nhypogenous\nhypogeocarpous\nhypogeous\nhypogeum\nhypogeusia\nhypoglobulia\nhypoglossal\nhypoglossitis\nhypoglossus\nhypoglottis\nhypoglycemia\nhypoglycemic\nhypognathism\nhypognathous\nhypogonation\nhypogynic\nhypogynium\nhypogynous\nhypogyny\nhypohalous\nhypohemia\nhypohidrosis\nHypohippus\nhypohyal\nhypohyaline\nhypoid\nhypoiodite\nhypoiodous\nhypoionian\nhypoischium\nhypoisotonic\nhypokeimenometry\nhypokinesia\nhypokinesis\nhypokinetic\nhypokoristikon\nhypolemniscus\nhypoleptically\nhypoleucocytosis\nhypolimnion\nhypolocrian\nhypolydian\nhypomania\nhypomanic\nhypomelancholia\nhypomeral\nhypomere\nhypomeron\nhypometropia\nhypomixolydian\nhypomnematic\nhypomnesis\nhypomochlion\nhypomorph\nhypomotility\nhypomyotonia\nhyponastic\nhyponastically\nhyponasty\nhyponeuria\nhyponitric\nhyponitrite\nhyponitrous\nhyponoetic\nhyponoia\nhyponome\nhyponomic\nhyponychial\nhyponychium\nhyponym\nhyponymic\nhyponymous\nHypoparia\nhypopepsia\nhypopepsinia\nhypopepsy\nhypopetalous\nhypopetaly\nhypophalangism\nhypophamin\nhypophamine\nhypophare\nhypopharyngeal\nhypopharynx\nhypophloeodal\nhypophloeodic\nhypophloeous\nhypophonic\nhypophonous\nhypophora\nhypophoria\nhypophosphate\nhypophosphite\nhypophosphoric\nhypophosphorous\nhypophrenia\nhypophrenic\nhypophrenosis\nhypophrygian\nhypophyge\nhypophyll\nhypophyllium\nhypophyllous\nhypophyllum\nhypophyse\nhypophyseal\nhypophysectomize\nhypophysectomy\nhypophyseoprivic\nhypophyseoprivous\nhypophysial\nhypophysical\nhypophysics\nhypophysis\nhypopial\nhypopinealism\nhypopituitarism\nHypopitys\nhypoplankton\nhypoplanktonic\nhypoplasia\nhypoplastic\nhypoplastral\nhypoplastron\nhypoplasty\nhypoplasy\nhypoploid\nhypoploidy\nhypopodium\nhypopraxia\nhypoprosexia\nhypopselaphesia\nhypopteral\nhypopteron\nhypoptilar\nhypoptilum\nhypoptosis\nhypoptyalism\nhypopus\nhypopygial\nhypopygidium\nhypopygium\nhypopyon\nhyporadial\nhyporadiolus\nhyporadius\nhyporchema\nhyporchematic\nhyporcheme\nhyporchesis\nhyporhachidian\nhyporhachis\nhyporhined\nhyporit\nhyporrhythmic\nhyposcenium\nhyposcleral\nhyposcope\nhyposecretion\nhyposensitization\nhyposensitize\nhyposkeletal\nhyposmia\nhypospadiac\nhypospadias\nhyposphene\nhypospray\nhypostase\nhypostasis\nhypostasization\nhypostasize\nhypostasy\nhypostatic\nhypostatical\nhypostatically\nhypostatization\nhypostatize\nhyposternal\nhyposternum\nhyposthenia\nhyposthenic\nhyposthenuria\nhypostigma\nhypostilbite\nhypostoma\nHypostomata\nhypostomatic\nhypostomatous\nhypostome\nhypostomial\nHypostomides\nhypostomous\nhypostrophe\nhypostyle\nhypostypsis\nhypostyptic\nhyposulphite\nhyposulphurous\nhyposuprarenalism\nhyposyllogistic\nhyposynaphe\nhyposynergia\nhyposystole\nhypotactic\nhypotarsal\nhypotarsus\nhypotaxia\nhypotaxic\nhypotaxis\nhypotension\nhypotensive\nhypotensor\nhypotenusal\nhypotenuse\nhypothalamic\nhypothalamus\nhypothalline\nhypothallus\nhypothec\nhypotheca\nhypothecal\nhypothecary\nhypothecate\nhypothecation\nhypothecative\nhypothecator\nhypothecatory\nhypothecial\nhypothecium\nhypothenal\nhypothenar\nHypotheria\nhypothermal\nhypothermia\nhypothermic\nhypothermy\nhypotheses\nhypothesis\nhypothesist\nhypothesize\nhypothesizer\nhypothetic\nhypothetical\nhypothetically\nhypothetics\nhypothetist\nhypothetize\nhypothetizer\nhypothyreosis\nhypothyroid\nhypothyroidism\nhypotonia\nhypotonic\nhypotonicity\nhypotonus\nhypotony\nhypotoxic\nhypotoxicity\nhypotrachelium\nHypotremata\nhypotrich\nHypotricha\nHypotrichida\nhypotrichosis\nhypotrichous\nhypotrochanteric\nhypotrochoid\nhypotrochoidal\nhypotrophic\nhypotrophy\nhypotympanic\nhypotypic\nhypotypical\nhypotyposis\nhypovalve\nhypovanadate\nhypovanadic\nhypovanadious\nhypovanadous\nhypovitaminosis\nhypoxanthic\nhypoxanthine\nHypoxis\nHypoxylon\nhypozeugma\nhypozeuxis\nHypozoa\nhypozoan\nhypozoic\nhyppish\nhypsibrachycephalic\nhypsibrachycephalism\nhypsibrachycephaly\nhypsicephalic\nhypsicephaly\nhypsidolichocephalic\nhypsidolichocephalism\nhypsidolichocephaly\nhypsiliform\nhypsiloid\nHypsilophodon\nhypsilophodont\nhypsilophodontid\nHypsilophodontidae\nhypsilophodontoid\nHypsiprymninae\nHypsiprymnodontinae\nHypsiprymnus\nHypsistarian\nhypsistenocephalic\nhypsistenocephalism\nhypsistenocephaly\nhypsobathymetric\nhypsocephalous\nhypsochrome\nhypsochromic\nhypsochromy\nhypsodont\nhypsodontism\nhypsodonty\nhypsographic\nhypsographical\nhypsography\nhypsoisotherm\nhypsometer\nhypsometric\nhypsometrical\nhypsometrically\nhypsometrist\nhypsometry\nhypsophobia\nhypsophonous\nhypsophyll\nhypsophyllar\nhypsophyllary\nhypsophyllous\nhypsophyllum\nhypsothermometer\nhypural\nhyraces\nhyraceum\nHyrachyus\nhyracid\nHyracidae\nhyraciform\nHyracina\nHyracodon\nhyracodont\nhyracodontid\nHyracodontidae\nhyracodontoid\nhyracoid\nHyracoidea\nhyracoidean\nhyracothere\nhyracotherian\nHyracotheriinae\nHyracotherium\nhyrax\nHyrcan\nHyrcanian\nhyson\nhyssop\nHyssopus\nhystazarin\nhysteralgia\nhysteralgic\nhysteranthous\nhysterectomy\nhysterelcosis\nhysteresial\nhysteresis\nhysteretic\nhysteretically\nhysteria\nhysteriac\nHysteriales\nhysteric\nhysterical\nhysterically\nhystericky\nhysterics\nhysteriform\nhysterioid\nHysterocarpus\nhysterocatalepsy\nhysterocele\nhysterocleisis\nhysterocrystalline\nhysterocystic\nhysterodynia\nhysterogen\nhysterogenetic\nhysterogenic\nhysterogenous\nhysterogeny\nhysteroid\nhysterolaparotomy\nhysterolith\nhysterolithiasis\nhysterology\nhysterolysis\nhysteromania\nhysterometer\nhysterometry\nhysteromorphous\nhysteromyoma\nhysteromyomectomy\nhysteron\nhysteroneurasthenia\nhysteropathy\nhysteropexia\nhysteropexy\nhysterophore\nHysterophyta\nhysterophytal\nhysterophyte\nhysteroproterize\nhysteroptosia\nhysteroptosis\nhysterorrhaphy\nhysterorrhexis\nhysteroscope\nhysterosis\nhysterotome\nhysterotomy\nhysterotraumatism\nhystriciasis\nhystricid\nHystricidae\nHystricinae\nhystricine\nhystricism\nhystricismus\nhystricoid\nhystricomorph\nHystricomorpha\nhystricomorphic\nhystricomorphous\nHystrix\nI\ni\nIacchic\nIacchos\nIacchus\nIachimo\niamatology\niamb\nIambe\niambelegus\niambi\niambic\niambically\niambist\niambize\niambographer\niambus\nIan\nIanthina\nianthine\nianthinite\nIanus\niao\nIapetus\nIapyges\nIapygian\nIapygii\niatraliptic\niatraliptics\niatric\niatrical\niatrochemic\niatrochemical\niatrochemist\niatrochemistry\niatrological\niatrology\niatromathematical\niatromathematician\niatromathematics\niatromechanical\niatromechanist\niatrophysical\niatrophysicist\niatrophysics\niatrotechnics\niba\nIbad\nIbadite\nIban\nIbanag\nIberes\nIberi\nIberia\nIberian\nIberic\nIberis\nIberism\niberite\nibex\nibices\nibid\nIbididae\nIbidinae\nibidine\nIbidium\nIbilao\nibis\nibisbill\nIbo\nibolium\nibota\nIbsenian\nIbsenic\nIbsenish\nIbsenism\nIbsenite\nIbycter\nIbycus\nIcacinaceae\nicacinaceous\nicaco\nIcacorea\nIcaria\nIcarian\nIcarianism\nIcarus\nice\niceberg\niceblink\niceboat\nicebone\nicebound\nicebox\nicebreaker\nicecap\nicecraft\niced\nicefall\nicefish\nicehouse\nIceland\niceland\nIcelander\nIcelandian\nIcelandic\niceleaf\niceless\nIcelidae\nicelike\niceman\nIceni\nicequake\niceroot\nIcerya\nicework\nich\nIchneumia\nichneumon\nichneumoned\nIchneumones\nichneumonid\nIchneumonidae\nichneumonidan\nIchneumonides\nichneumoniform\nichneumonized\nichneumonoid\nIchneumonoidea\nichneumonology\nichneumous\nichneutic\nichnite\nichnographic\nichnographical\nichnographically\nichnography\nichnolite\nichnolithology\nichnolitic\nichnological\nichnology\nichnomancy\nicho\nichoglan\nichor\nichorous\nichorrhea\nichorrhemia\nichthulin\nichthulinic\nichthus\nichthyal\nichthyic\nichthyism\nichthyismus\nichthyization\nichthyized\nichthyobatrachian\nIchthyocephali\nichthyocephalous\nichthyocol\nichthyocolla\nichthyocoprolite\nIchthyodea\nIchthyodectidae\nichthyodian\nichthyodont\nichthyodorulite\nichthyofauna\nichthyoform\nichthyographer\nichthyographia\nichthyographic\nichthyography\nichthyoid\nichthyoidal\nIchthyoidea\nIchthyol\nichthyolatrous\nichthyolatry\nichthyolite\nichthyolitic\nichthyologic\nichthyological\nichthyologically\nichthyologist\nichthyology\nichthyomancy\nichthyomantic\nIchthyomorpha\nichthyomorphic\nichthyomorphous\nichthyonomy\nichthyopaleontology\nichthyophagan\nichthyophagi\nichthyophagian\nichthyophagist\nichthyophagize\nichthyophagous\nichthyophagy\nichthyophile\nichthyophobia\nichthyophthalmite\nichthyophthiriasis\nichthyopolism\nichthyopolist\nichthyopsid\nIchthyopsida\nichthyopsidan\nIchthyopterygia\nichthyopterygian\nichthyopterygium\nIchthyornis\nIchthyornithes\nichthyornithic\nIchthyornithidae\nIchthyornithiformes\nichthyornithoid\nichthyosaur\nIchthyosauria\nichthyosaurian\nichthyosaurid\nIchthyosauridae\nichthyosauroid\nIchthyosaurus\nichthyosis\nichthyosism\nichthyotic\nIchthyotomi\nichthyotomist\nichthyotomous\nichthyotomy\nichthyotoxin\nichthyotoxism\nichthytaxidermy\nichu\nicica\nicicle\nicicled\nicily\niciness\nicing\nicon\nIconian\niconic\niconical\niconism\niconoclasm\niconoclast\niconoclastic\niconoclastically\niconoclasticism\niconodule\niconodulic\niconodulist\niconoduly\niconograph\niconographer\niconographic\niconographical\niconographist\niconography\niconolater\niconolatrous\niconolatry\niconological\niconologist\niconology\niconomachal\niconomachist\niconomachy\niconomania\niconomatic\niconomatically\niconomaticism\niconomatography\niconometer\niconometric\niconometrical\niconometrically\niconometry\niconophile\niconophilism\niconophilist\niconophily\niconoplast\niconoscope\niconostas\niconostasion\niconostasis\niconotype\nicosahedral\nIcosandria\nicosasemic\nicosian\nicositetrahedron\nicosteid\nIcosteidae\nicosteine\nIcosteus\nicotype\nicteric\nicterical\nIcteridae\nicterine\nicteritious\nicterode\nicterogenetic\nicterogenic\nicterogenous\nicterohematuria\nicteroid\nicterus\nictic\nIctonyx\nictuate\nictus\nicy\nid\nIda\nIdaean\nIdaho\nIdahoan\nIdaic\nidalia\nIdalian\nidant\niddat\nIddio\nide\nidea\nideaed\nideaful\nideagenous\nideal\nidealess\nidealism\nidealist\nidealistic\nidealistical\nidealistically\nideality\nidealization\nidealize\nidealizer\nidealless\nideally\nidealness\nideamonger\nIdean\nideate\nideation\nideational\nideationally\nideative\nideist\nidempotent\nidentic\nidentical\nidenticalism\nidentically\nidenticalness\nidentifiable\nidentifiableness\nidentification\nidentifier\nidentify\nidentism\nidentity\nideogenetic\nideogenical\nideogenous\nideogeny\nideoglyph\nideogram\nideogrammic\nideograph\nideographic\nideographical\nideographically\nideography\nideolatry\nideologic\nideological\nideologically\nideologist\nideologize\nideologue\nideology\nideomotion\nideomotor\nideophone\nideophonetics\nideophonous\nideoplastia\nideoplastic\nideoplastics\nideoplasty\nideopraxist\nides\nidgah\nidiasm\nidic\nidiobiology\nidioblast\nidioblastic\nidiochromatic\nidiochromatin\nidiochromosome\nidiocrasis\nidiocrasy\nidiocratic\nidiocratical\nidiocy\nidiocyclophanous\nidioelectric\nidioelectrical\nIdiogastra\nidiogenesis\nidiogenetic\nidiogenous\nidioglossia\nidioglottic\nidiograph\nidiographic\nidiographical\nidiohypnotism\nidiolalia\nidiolatry\nidiologism\nidiolysin\nidiom\nidiomatic\nidiomatical\nidiomatically\nidiomaticalness\nidiomelon\nidiometer\nidiomography\nidiomology\nidiomorphic\nidiomorphically\nidiomorphism\nidiomorphous\nidiomuscular\nidiopathetic\nidiopathic\nidiopathical\nidiopathically\nidiopathy\nidiophanism\nidiophanous\nidiophonic\nidioplasm\nidioplasmatic\nidioplasmic\nidiopsychological\nidiopsychology\nidioreflex\nidiorepulsive\nidioretinal\nidiorrhythmic\nIdiosepiidae\nIdiosepion\nidiosome\nidiospasm\nidiospastic\nidiostatic\nidiosyncrasy\nidiosyncratic\nidiosyncratical\nidiosyncratically\nidiot\nidiotcy\nidiothalamous\nidiothermous\nidiothermy\nidiotic\nidiotical\nidiotically\nidioticalness\nidioticon\nidiotish\nidiotism\nidiotize\nidiotropian\nidiotry\nidiotype\nidiotypic\nIdism\nIdist\nIdistic\nidite\niditol\nidle\nidleful\nidleheaded\nidlehood\nidleman\nidlement\nidleness\nidler\nidleset\nidleship\nidlety\nidlish\nidly\nIdo\nidocrase\nIdoism\nIdoist\nIdoistic\nidol\nidola\nidolaster\nidolater\nidolatress\nidolatric\nidolatrize\nidolatrizer\nidolatrous\nidolatrously\nidolatrousness\nidolatry\nidolify\nidolism\nidolist\nidolistic\nidolization\nidolize\nidolizer\nidoloclast\nidoloclastic\nidolodulia\nidolographical\nidololatrical\nidololatry\nidolomancy\nidolomania\nidolothyte\nidolothytic\nidolous\nidolum\nIdomeneus\nidoneal\nidoneity\nidoneous\nidoneousness\nidorgan\nidosaccharic\nidose\nIdotea\nIdoteidae\nIdothea\nIdotheidae\nidrialin\nidrialine\nidrialite\nIdrisid\nIdrisite\nidryl\nIdumaean\nidyl\nidyler\nidylism\nidylist\nidylize\nidyllian\nidyllic\nidyllical\nidyllically\nidyllicism\nie\nIerne\nif\nife\niffy\nIfugao\nIgara\nIgbira\nIgdyr\nigelstromite\nigloo\nIglulirmiut\nignatia\nIgnatian\nIgnatianist\nIgnatius\nignavia\nigneoaqueous\nigneous\nignescent\nignicolist\nigniferous\nigniferousness\nigniform\nignifuge\nignify\nignigenous\nignipotent\nignipuncture\nignitability\nignite\nigniter\nignitibility\nignitible\nignition\nignitive\nignitor\nignitron\nignivomous\nignivomousness\nignobility\nignoble\nignobleness\nignoblesse\nignobly\nignominious\nignominiously\nignominiousness\nignominy\nignorable\nignoramus\nignorance\nignorant\nIgnorantine\nignorantism\nignorantist\nignorantly\nignorantness\nignoration\nignore\nignorement\nignorer\nignote\nIgorot\niguana\nIguania\niguanian\niguanid\nIguanidae\niguaniform\nIguanodon\niguanodont\nIguanodontia\nIguanodontidae\niguanodontoid\nIguanodontoidea\niguanoid\nIguvine\nihi\nIhlat\nihleite\nihram\niiwi\nijma\nIjo\nijolite\nIjore\nijussite\nikat\nIke\nikey\nikeyness\nIkhwan\nikona\nikra\nIla\nileac\nileectomy\nileitis\nileocaecal\nileocaecum\nileocolic\nileocolitis\nileocolostomy\nileocolotomy\nileon\nileosigmoidostomy\nileostomy\nileotomy\nilesite\nileum\nileus\nilex\nilia\nIliac\niliac\niliacus\nIliad\nIliadic\nIliadist\nIliadize\niliahi\nilial\nIlian\niliau\nIlicaceae\nilicaceous\nilicic\nilicin\nilima\niliocaudal\niliocaudalis\niliococcygeal\niliococcygeus\niliococcygian\niliocostal\niliocostalis\niliodorsal\niliofemoral\niliohypogastric\nilioinguinal\nilioischiac\nilioischiatic\niliolumbar\niliopectineal\niliopelvic\nilioperoneal\niliopsoas\niliopsoatic\niliopubic\niliosacral\niliosciatic\nilioscrotal\niliospinal\niliotibial\niliotrochanteric\nIlissus\nilium\nilk\nilka\nilkane\nill\nillaborate\nillachrymable\nillachrymableness\nIllaenus\nIllano\nIllanun\nillapsable\nillapse\nillapsive\nillaqueate\nillaqueation\nillation\nillative\nillatively\nillaudable\nillaudably\nillaudation\nillaudatory\nIllecebraceae\nillecebrous\nilleck\nillegal\nillegality\nillegalize\nillegally\nillegalness\nillegibility\nillegible\nillegibleness\nillegibly\nillegitimacy\nillegitimate\nillegitimately\nillegitimateness\nillegitimation\nillegitimatize\nilleism\nilleist\nilless\nillfare\nillguide\nilliberal\nilliberalism\nilliberality\nilliberalize\nilliberally\nilliberalness\nillicit\nillicitly\nillicitness\nIllicium\nillimitability\nillimitable\nillimitableness\nillimitably\nillimitate\nillimitation\nillimited\nillimitedly\nillimitedness\nillinition\nillinium\nIllinoian\nIllinois\nIllinoisan\nIllinoisian\nIllipe\nillipene\nilliquation\nilliquid\nilliquidity\nilliquidly\nillish\nillision\nilliteracy\nilliteral\nilliterate\nilliterately\nilliterateness\nilliterature\nillium\nillness\nillocal\nillocality\nillocally\nillogic\nillogical\nillogicality\nillogically\nillogicalness\nillogician\nillogicity\nIlloricata\nilloricate\nilloricated\nilloyal\nilloyalty\nillth\nillucidate\nillucidation\nillucidative\nillude\nilludedly\nilluder\nillume\nillumer\nilluminability\nilluminable\nilluminance\nilluminant\nilluminate\nilluminated\nilluminati\nilluminating\nilluminatingly\nillumination\nilluminational\nilluminatism\nilluminatist\nilluminative\nilluminato\nilluminator\nilluminatory\nilluminatus\nillumine\nilluminee\nilluminer\nIlluminism\nilluminist\nIlluministic\nIlluminize\nilluminometer\nilluminous\nillupi\nillure\nillurement\nillusible\nillusion\nillusionable\nillusional\nillusionary\nillusioned\nillusionism\nillusionist\nillusionistic\nillusive\nillusively\nillusiveness\nillusor\nillusorily\nillusoriness\nillusory\nillustrable\nillustratable\nillustrate\nillustration\nillustrational\nillustrative\nillustratively\nillustrator\nillustratory\nillustratress\nillustre\nillustricity\nillustrious\nillustriously\nillustriousness\nillutate\nillutation\nilluvial\nilluviate\nilluviation\nilly\nIllyrian\nIllyric\nilmenite\nilmenitite\nilmenorutile\nIlocano\nIlokano\nIloko\nIlongot\nilot\nIlpirra\nilvaite\nIlya\nIlysanthes\nIlysia\nIlysiidae\nilysioid\nIma\nimage\nimageable\nimageless\nimager\nimagerial\nimagerially\nimagery\nimaginability\nimaginable\nimaginableness\nimaginably\nimaginal\nimaginant\nimaginarily\nimaginariness\nimaginary\nimaginate\nimagination\nimaginational\nimaginationalism\nimaginative\nimaginatively\nimaginativeness\nimaginator\nimagine\nimaginer\nimagines\nimaginist\nimaginous\nimagism\nimagist\nimagistic\nimago\nimam\nimamah\nimamate\nimambarah\nimamic\nimamship\nImantophyllum\nimaret\nimbalance\nimban\nimband\nimbannered\nimbarge\nimbark\nimbarn\nimbased\nimbastardize\nimbat\nimbauba\nimbe\nimbecile\nimbecilely\nimbecilic\nimbecilitate\nimbecility\nimbed\nimbellious\nimber\nimbibe\nimbiber\nimbibition\nimbibitional\nimbibitory\nimbirussu\nimbitter\nimbitterment\nimbolish\nimbondo\nimbonity\nimbordure\nimborsation\nimbosom\nimbower\nimbreathe\nimbreviate\nimbrex\nimbricate\nimbricated\nimbricately\nimbrication\nimbricative\nimbroglio\nimbrue\nimbruement\nimbrute\nimbrutement\nimbue\nimbuement\nimburse\nimbursement\nImer\nImerina\nImeritian\nimi\nimidazole\nimidazolyl\nimide\nimidic\nimidogen\niminazole\nimine\nimino\niminohydrin\nimitability\nimitable\nimitableness\nimitancy\nimitant\nimitate\nimitatee\nimitation\nimitational\nimitationist\nimitative\nimitatively\nimitativeness\nimitator\nimitatorship\nimitatress\nimitatrix\nimmaculacy\nimmaculance\nimmaculate\nimmaculately\nimmaculateness\nimmalleable\nimmanacle\nimmanation\nimmane\nimmanely\nimmanence\nimmanency\nimmaneness\nimmanent\nimmanental\nimmanentism\nimmanentist\nimmanently\nImmanes\nimmanifest\nimmanifestness\nimmanity\nimmantle\nImmanuel\nimmarble\nimmarcescible\nimmarcescibly\nimmarcibleness\nimmarginate\nimmask\nimmatchable\nimmaterial\nimmaterialism\nimmaterialist\nimmateriality\nimmaterialize\nimmaterially\nimmaterialness\nimmaterials\nimmateriate\nimmatriculate\nimmatriculation\nimmature\nimmatured\nimmaturely\nimmatureness\nimmaturity\nimmeability\nimmeasurability\nimmeasurable\nimmeasurableness\nimmeasurably\nimmeasured\nimmechanical\nimmechanically\nimmediacy\nimmedial\nimmediate\nimmediately\nimmediateness\nimmediatism\nimmediatist\nimmedicable\nimmedicableness\nimmedicably\nimmelodious\nimmember\nimmemorable\nimmemorial\nimmemorially\nimmense\nimmensely\nimmenseness\nimmensity\nimmensive\nimmensurability\nimmensurable\nimmensurableness\nimmensurate\nimmerd\nimmerge\nimmergence\nimmergent\nimmerit\nimmerited\nimmeritorious\nimmeritoriously\nimmeritous\nimmerse\nimmersement\nimmersible\nimmersion\nimmersionism\nimmersionist\nimmersive\nimmethodic\nimmethodical\nimmethodically\nimmethodicalness\nimmethodize\nimmetrical\nimmetrically\nimmetricalness\nimmew\nimmi\nimmigrant\nimmigrate\nimmigration\nimmigrator\nimmigratory\nimminence\nimminency\nimminent\nimminently\nimminentness\nimmingle\nimminution\nimmiscibility\nimmiscible\nimmiscibly\nimmission\nimmit\nimmitigability\nimmitigable\nimmitigably\nimmix\nimmixable\nimmixture\nimmobile\nimmobility\nimmobilization\nimmobilize\nimmoderacy\nimmoderate\nimmoderately\nimmoderateness\nimmoderation\nimmodest\nimmodestly\nimmodesty\nimmodulated\nimmolate\nimmolation\nimmolator\nimmoment\nimmomentous\nimmonastered\nimmoral\nimmoralism\nimmoralist\nimmorality\nimmoralize\nimmorally\nimmorigerous\nimmorigerousness\nimmortability\nimmortable\nimmortal\nimmortalism\nimmortalist\nimmortality\nimmortalizable\nimmortalization\nimmortalize\nimmortalizer\nimmortally\nimmortalness\nimmortalship\nimmortelle\nimmortification\nimmortified\nimmotile\nimmotioned\nimmotive\nimmound\nimmovability\nimmovable\nimmovableness\nimmovably\nimmund\nimmundity\nimmune\nimmunist\nimmunity\nimmunization\nimmunize\nimmunochemistry\nimmunogen\nimmunogenetic\nimmunogenetics\nimmunogenic\nimmunogenically\nimmunogenicity\nimmunologic\nimmunological\nimmunologically\nimmunologist\nimmunology\nimmunoreaction\nimmunotoxin\nimmuration\nimmure\nimmurement\nimmusical\nimmusically\nimmutability\nimmutable\nimmutableness\nimmutably\nimmutation\nimmute\nimmutilate\nimmutual\nImogen\nImolinda\nimonium\nimp\nimpacability\nimpacable\nimpack\nimpackment\nimpact\nimpacted\nimpaction\nimpactionize\nimpactment\nimpactual\nimpages\nimpaint\nimpair\nimpairable\nimpairer\nimpairment\nimpala\nimpalace\nimpalatable\nimpale\nimpalement\nimpaler\nimpall\nimpalm\nimpalpability\nimpalpable\nimpalpably\nimpalsy\nimpaludism\nimpanate\nimpanation\nimpanator\nimpane\nimpanel\nimpanelment\nimpapase\nimpapyrate\nimpar\nimparadise\nimparalleled\nimparasitic\nimpardonable\nimpardonably\nimparidigitate\nimparipinnate\nimparisyllabic\nimparity\nimpark\nimparkation\nimparl\nimparlance\nimparsonee\nimpart\nimpartable\nimpartance\nimpartation\nimparter\nimpartial\nimpartialism\nimpartialist\nimpartiality\nimpartially\nimpartialness\nimpartibilibly\nimpartibility\nimpartible\nimpartibly\nimparticipable\nimpartite\nimpartive\nimpartivity\nimpartment\nimpassability\nimpassable\nimpassableness\nimpassably\nimpasse\nimpassibilibly\nimpassibility\nimpassible\nimpassibleness\nimpassion\nimpassionable\nimpassionate\nimpassionately\nimpassioned\nimpassionedly\nimpassionedness\nimpassionment\nimpassive\nimpassively\nimpassiveness\nimpassivity\nimpastation\nimpaste\nimpasto\nimpasture\nimpaternate\nimpatible\nimpatience\nimpatiency\nImpatiens\nimpatient\nImpatientaceae\nimpatientaceous\nimpatiently\nimpatientness\nimpatronize\nimpave\nimpavid\nimpavidity\nimpavidly\nimpawn\nimpayable\nimpeach\nimpeachability\nimpeachable\nimpeacher\nimpeachment\nimpearl\nimpeccability\nimpeccable\nimpeccably\nimpeccance\nimpeccancy\nimpeccant\nimpectinate\nimpecuniary\nimpecuniosity\nimpecunious\nimpecuniously\nimpecuniousness\nimpedance\nimpede\nimpeder\nimpedibility\nimpedible\nimpedient\nimpediment\nimpedimenta\nimpedimental\nimpedimentary\nimpeding\nimpedingly\nimpedite\nimpedition\nimpeditive\nimpedometer\nimpeevish\nimpel\nimpellent\nimpeller\nimpen\nimpend\nimpendence\nimpendency\nimpendent\nimpending\nimpenetrability\nimpenetrable\nimpenetrableness\nimpenetrably\nimpenetrate\nimpenetration\nimpenetrative\nimpenitence\nimpenitent\nimpenitently\nimpenitentness\nimpenitible\nimpenitibleness\nimpennate\nImpennes\nimpent\nimperance\nimperant\nImperata\nimperate\nimperation\nimperatival\nimperative\nimperatively\nimperativeness\nimperator\nimperatorial\nimperatorially\nimperatorian\nimperatorious\nimperatorship\nimperatory\nimperatrix\nimperceivable\nimperceivableness\nimperceivably\nimperceived\nimperceiverant\nimperceptibility\nimperceptible\nimperceptibleness\nimperceptibly\nimperception\nimperceptive\nimperceptiveness\nimperceptivity\nimpercipience\nimpercipient\nimperence\nimperent\nimperfect\nimperfected\nimperfectibility\nimperfectible\nimperfection\nimperfectious\nimperfective\nimperfectly\nimperfectness\nimperforable\nImperforata\nimperforate\nimperforated\nimperforation\nimperformable\nimperia\nimperial\nimperialin\nimperialine\nimperialism\nimperialist\nimperialistic\nimperialistically\nimperiality\nimperialization\nimperialize\nimperially\nimperialness\nimperialty\nimperil\nimperilment\nimperious\nimperiously\nimperiousness\nimperish\nimperishability\nimperishable\nimperishableness\nimperishably\nimperite\nimperium\nimpermanence\nimpermanency\nimpermanent\nimpermanently\nimpermeability\nimpermeabilization\nimpermeabilize\nimpermeable\nimpermeableness\nimpermeably\nimpermeated\nimpermeator\nimpermissible\nimpermutable\nimperscriptible\nimperscrutable\nimpersonable\nimpersonal\nimpersonality\nimpersonalization\nimpersonalize\nimpersonally\nimpersonate\nimpersonation\nimpersonative\nimpersonator\nimpersonatress\nimpersonatrix\nimpersonification\nimpersonify\nimpersonization\nimpersonize\nimperspicuity\nimperspicuous\nimperspirability\nimperspirable\nimpersuadable\nimpersuadableness\nimpersuasibility\nimpersuasible\nimpersuasibleness\nimpersuasibly\nimpertinacy\nimpertinence\nimpertinency\nimpertinent\nimpertinently\nimpertinentness\nimpertransible\nimperturbability\nimperturbable\nimperturbableness\nimperturbably\nimperturbation\nimperturbed\nimperverse\nimpervertible\nimpervestigable\nimperviability\nimperviable\nimperviableness\nimpervial\nimpervious\nimperviously\nimperviousness\nimpest\nimpestation\nimpester\nimpeticos\nimpetiginous\nimpetigo\nimpetition\nimpetrate\nimpetration\nimpetrative\nimpetrator\nimpetratory\nimpetre\nimpetulant\nimpetulantly\nimpetuosity\nimpetuous\nimpetuously\nimpetuousness\nimpetus\nImpeyan\nimphee\nimpi\nimpicture\nimpierceable\nimpiety\nimpignorate\nimpignoration\nimpinge\nimpingement\nimpingence\nimpingent\nimpinger\nimpinguate\nimpious\nimpiously\nimpiousness\nimpish\nimpishly\nimpishness\nimpiteous\nimpitiably\nimplacability\nimplacable\nimplacableness\nimplacably\nimplacement\nimplacental\nImplacentalia\nimplacentate\nimplant\nimplantation\nimplanter\nimplastic\nimplasticity\nimplate\nimplausibility\nimplausible\nimplausibleness\nimplausibly\nimpleach\nimplead\nimpleadable\nimpleader\nimpledge\nimplement\nimplemental\nimplementation\nimplementiferous\nimplete\nimpletion\nimpletive\nimplex\nimpliable\nimplial\nimplicant\nimplicate\nimplicately\nimplicateness\nimplication\nimplicational\nimplicative\nimplicatively\nimplicatory\nimplicit\nimplicitly\nimplicitness\nimpliedly\nimpliedness\nimpling\nimplode\nimplodent\nimplorable\nimploration\nimplorator\nimploratory\nimplore\nimplorer\nimploring\nimploringly\nimploringness\nimplosion\nimplosive\nimplosively\nimplume\nimplumed\nimplunge\nimpluvium\nimply\nimpocket\nimpofo\nimpoison\nimpoisoner\nimpolarizable\nimpolicy\nimpolished\nimpolite\nimpolitely\nimpoliteness\nimpolitic\nimpolitical\nimpolitically\nimpoliticalness\nimpoliticly\nimpoliticness\nimpollute\nimponderabilia\nimponderability\nimponderable\nimponderableness\nimponderably\nimponderous\nimpone\nimponent\nimpoor\nimpopular\nimpopularly\nimporosity\nimporous\nimport\nimportability\nimportable\nimportableness\nimportably\nimportance\nimportancy\nimportant\nimportantly\nimportation\nimporter\nimportless\nimportment\nimportraiture\nimportray\nimportunacy\nimportunance\nimportunate\nimportunately\nimportunateness\nimportunator\nimportune\nimportunely\nimportunement\nimportuner\nimportunity\nimposable\nimposableness\nimposal\nimpose\nimposement\nimposer\nimposing\nimposingly\nimposingness\nimposition\nimpositional\nimpositive\nimpossibilification\nimpossibilism\nimpossibilist\nimpossibilitate\nimpossibility\nimpossible\nimpossibleness\nimpossibly\nimpost\nimposter\nimposterous\nimpostor\nimpostorism\nimpostorship\nimpostress\nimpostrix\nimpostrous\nimpostumate\nimpostumation\nimpostume\nimposture\nimposturism\nimposturous\nimposure\nimpot\nimpotable\nimpotence\nimpotency\nimpotent\nimpotently\nimpotentness\nimpound\nimpoundable\nimpoundage\nimpounder\nimpoundment\nimpoverish\nimpoverisher\nimpoverishment\nimpracticability\nimpracticable\nimpracticableness\nimpracticably\nimpractical\nimpracticality\nimpracticalness\nimprecant\nimprecate\nimprecation\nimprecator\nimprecatorily\nimprecatory\nimprecise\nimprecisely\nimprecision\nimpredicability\nimpredicable\nimpreg\nimpregn\nimpregnability\nimpregnable\nimpregnableness\nimpregnably\nimpregnant\nimpregnate\nimpregnation\nimpregnative\nimpregnator\nimpregnatory\nimprejudice\nimpremeditate\nimpreparation\nimpresa\nimpresario\nimprescience\nimprescribable\nimprescriptibility\nimprescriptible\nimprescriptibly\nimprese\nimpress\nimpressable\nimpressedly\nimpresser\nimpressibility\nimpressible\nimpressibleness\nimpressibly\nimpression\nimpressionability\nimpressionable\nimpressionableness\nimpressionably\nimpressional\nimpressionalist\nimpressionality\nimpressionally\nimpressionary\nimpressionism\nimpressionist\nimpressionistic\nimpressionistically\nimpressionless\nimpressive\nimpressively\nimpressiveness\nimpressment\nimpressor\nimpressure\nimprest\nimprestable\nimpreventability\nimpreventable\nimprevisibility\nimprevisible\nimprevision\nimprimatur\nimprime\nimprimitive\nimprimitivity\nimprint\nimprinter\nimprison\nimprisonable\nimprisoner\nimprisonment\nimprobability\nimprobabilize\nimprobable\nimprobableness\nimprobably\nimprobation\nimprobative\nimprobatory\nimprobity\nimprocreant\nimprocurability\nimprocurable\nimproducible\nimproficience\nimproficiency\nimprogressive\nimprogressively\nimprogressiveness\nimprolificical\nimpromptitude\nimpromptu\nimpromptuary\nimpromptuist\nimproof\nimproper\nimproperation\nimproperly\nimproperness\nimpropriate\nimpropriation\nimpropriator\nimpropriatrix\nimpropriety\nimprovability\nimprovable\nimprovableness\nimprovably\nimprove\nimprovement\nimprover\nimprovership\nimprovidence\nimprovident\nimprovidentially\nimprovidently\nimproving\nimprovingly\nimprovisate\nimprovisation\nimprovisational\nimprovisator\nimprovisatorial\nimprovisatorially\nimprovisatorize\nimprovisatory\nimprovise\nimprovisedly\nimproviser\nimprovision\nimproviso\nimprovisor\nimprudence\nimprudency\nimprudent\nimprudential\nimprudently\nimprudentness\nimpship\nimpuberal\nimpuberate\nimpuberty\nimpubic\nimpudence\nimpudency\nimpudent\nimpudently\nimpudentness\nimpudicity\nimpugn\nimpugnability\nimpugnable\nimpugnation\nimpugner\nimpugnment\nimpuissance\nimpuissant\nimpulse\nimpulsion\nimpulsive\nimpulsively\nimpulsiveness\nimpulsivity\nimpulsory\nimpunctate\nimpunctual\nimpunctuality\nimpunely\nimpunible\nimpunibly\nimpunity\nimpure\nimpurely\nimpureness\nimpuritan\nimpuritanism\nimpurity\nimputability\nimputable\nimputableness\nimputably\nimputation\nimputative\nimputatively\nimputativeness\nimpute\nimputedly\nimputer\nimputrescence\nimputrescibility\nimputrescible\nimputrid\nimpy\nimshi\nimsonic\nimu\nin\ninability\ninabordable\ninabstinence\ninaccentuated\ninaccentuation\ninacceptable\ninaccessibility\ninaccessible\ninaccessibleness\ninaccessibly\ninaccordance\ninaccordancy\ninaccordant\ninaccordantly\ninaccuracy\ninaccurate\ninaccurately\ninaccurateness\ninachid\nInachidae\ninachoid\nInachus\ninacquaintance\ninacquiescent\ninactinic\ninaction\ninactionist\ninactivate\ninactivation\ninactive\ninactively\ninactiveness\ninactivity\ninactuate\ninactuation\ninadaptability\ninadaptable\ninadaptation\ninadaptive\ninadept\ninadequacy\ninadequate\ninadequately\ninadequateness\ninadequation\ninadequative\ninadequatively\ninadherent\ninadhesion\ninadhesive\ninadjustability\ninadjustable\ninadmissibility\ninadmissible\ninadmissibly\ninadventurous\ninadvertence\ninadvertency\ninadvertent\ninadvertently\ninadvisability\ninadvisable\ninadvisableness\ninadvisedly\ninaesthetic\ninaffability\ninaffable\ninaffectation\ninagglutinability\ninagglutinable\ninaggressive\ninagile\ninaidable\ninaja\ninalacrity\ninalienability\ninalienable\ninalienableness\ninalienably\ninalimental\ninalterability\ninalterable\ninalterableness\ninalterably\ninamissibility\ninamissible\ninamissibleness\ninamorata\ninamorate\ninamoration\ninamorato\ninamovability\ninamovable\ninane\ninanely\ninanga\ninangulate\ninanimadvertence\ninanimate\ninanimated\ninanimately\ninanimateness\ninanimation\ninanition\ninanity\ninantherate\ninapathy\ninapostate\ninapparent\ninappealable\ninappeasable\ninappellability\ninappellable\ninappendiculate\ninapperceptible\ninappertinent\ninappetence\ninappetency\ninappetent\ninappetible\ninapplicability\ninapplicable\ninapplicableness\ninapplicably\ninapplication\ninapposite\ninappositely\ninappositeness\ninappreciable\ninappreciably\ninappreciation\ninappreciative\ninappreciatively\ninappreciativeness\ninapprehensible\ninapprehension\ninapprehensive\ninapprehensiveness\ninapproachability\ninapproachable\ninapproachably\ninappropriable\ninappropriableness\ninappropriate\ninappropriately\ninappropriateness\ninapt\ninaptitude\ninaptly\ninaptness\ninaqueous\ninarable\ninarch\ninarculum\ninarguable\ninarguably\ninarm\ninarticulacy\nInarticulata\ninarticulate\ninarticulated\ninarticulately\ninarticulateness\ninarticulation\ninartificial\ninartificiality\ninartificially\ninartificialness\ninartistic\ninartistical\ninartisticality\ninartistically\ninasmuch\ninassimilable\ninassimilation\ninassuageable\ninattackable\ninattention\ninattentive\ninattentively\ninattentiveness\ninaudibility\ninaudible\ninaudibleness\ninaudibly\ninaugur\ninaugural\ninaugurate\ninauguration\ninaugurative\ninaugurator\ninauguratory\ninaugurer\ninaurate\ninauration\ninauspicious\ninauspiciously\ninauspiciousness\ninauthentic\ninauthenticity\ninauthoritative\ninauthoritativeness\ninaxon\ninbe\ninbeaming\ninbearing\ninbeing\ninbending\ninbent\ninbirth\ninblow\ninblowing\ninblown\ninboard\ninbond\ninborn\ninbound\ninbread\ninbreak\ninbreaking\ninbreathe\ninbreather\ninbred\ninbreed\ninbring\ninbringer\ninbuilt\ninburning\ninburnt\ninburst\ninby\nInca\nIncaic\nincalculability\nincalculable\nincalculableness\nincalculably\nincalescence\nincalescency\nincalescent\nincaliculate\nincalver\nincalving\nincameration\nIncan\nincandent\nincandesce\nincandescence\nincandescency\nincandescent\nincandescently\nincanous\nincantation\nincantational\nincantator\nincantatory\nincanton\nincapability\nincapable\nincapableness\nincapably\nincapacious\nincapaciousness\nincapacitate\nincapacitation\nincapacity\nincapsulate\nincapsulation\nincaptivate\nincarcerate\nincarceration\nincarcerator\nincardinate\nincardination\nIncarial\nincarmined\nincarn\nincarnadine\nincarnant\nincarnate\nincarnation\nincarnational\nincarnationist\nincarnative\nIncarvillea\nincase\nincasement\nincast\nincatenate\nincatenation\nincaution\nincautious\nincautiously\nincautiousness\nincavate\nincavated\nincavation\nincavern\nincedingly\nincelebrity\nincendiarism\nincendiary\nincendivity\nincensation\nincense\nincenseless\nincensement\nincensory\nincensurable\nincensurably\nincenter\nincentive\nincentively\nincentor\nincept\ninception\ninceptive\ninceptively\ninceptor\ninceration\nincertitude\nincessable\nincessably\nincessancy\nincessant\nincessantly\nincessantness\nincest\nincestuous\nincestuously\nincestuousness\ninch\ninched\ninchmeal\ninchoacy\ninchoant\ninchoate\ninchoately\ninchoateness\ninchoation\ninchoative\ninchpin\ninchworm\nincide\nincidence\nincident\nincidental\nincidentalist\nincidentally\nincidentalness\nincidentless\nincidently\nincinerable\nincinerate\nincineration\nincinerator\nincipience\nincipient\nincipiently\nincircumscription\nincircumspect\nincircumspection\nincircumspectly\nincircumspectness\nincisal\nincise\nincisely\nincisiform\nincision\nincisive\nincisively\nincisiveness\nincisor\nincisorial\nincisory\nincisure\nincitability\nincitable\nincitant\nincitation\nincite\nincitement\ninciter\nincitingly\nincitive\nincitress\nincivic\nincivility\nincivilization\nincivism\ninclemency\ninclement\ninclemently\ninclementness\ninclinable\ninclinableness\ninclination\ninclinational\ninclinator\ninclinatorily\ninclinatorium\ninclinatory\nincline\nincliner\ninclinograph\ninclinometer\ninclip\ninclose\ninclosure\nincludable\ninclude\nincluded\nincludedness\nincluder\ninclusa\nincluse\ninclusion\ninclusionist\ninclusive\ninclusively\ninclusiveness\ninclusory\nincoagulable\nincoalescence\nincoercible\nincog\nincogent\nincogitability\nincogitable\nincogitancy\nincogitant\nincogitantly\nincogitative\nincognita\nincognitive\nincognito\nincognizability\nincognizable\nincognizance\nincognizant\nincognoscent\nincognoscibility\nincognoscible\nincoherence\nincoherency\nincoherent\nincoherentific\nincoherently\nincoherentness\nincohering\nincohesion\nincohesive\nincoincidence\nincoincident\nincombustibility\nincombustible\nincombustibleness\nincombustibly\nincombustion\nincome\nincomeless\nincomer\nincoming\nincommensurability\nincommensurable\nincommensurableness\nincommensurably\nincommensurate\nincommensurately\nincommensurateness\nincommiscibility\nincommiscible\nincommodate\nincommodation\nincommode\nincommodement\nincommodious\nincommodiously\nincommodiousness\nincommodity\nincommunicability\nincommunicable\nincommunicableness\nincommunicably\nincommunicado\nincommunicative\nincommunicatively\nincommunicativeness\nincommutability\nincommutable\nincommutableness\nincommutably\nincompact\nincompactly\nincompactness\nincomparability\nincomparable\nincomparableness\nincomparably\nincompassionate\nincompassionately\nincompassionateness\nincompatibility\nincompatible\nincompatibleness\nincompatibly\nincompendious\nincompensated\nincompensation\nincompetence\nincompetency\nincompetent\nincompetently\nincompetentness\nincompletability\nincompletable\nincompletableness\nincomplete\nincompleted\nincompletely\nincompleteness\nincompletion\nincomplex\nincompliance\nincompliancy\nincompliant\nincompliantly\nincomplicate\nincomplying\nincomposed\nincomposedly\nincomposedness\nincomposite\nincompossibility\nincompossible\nincomprehended\nincomprehending\nincomprehendingly\nincomprehensibility\nincomprehensible\nincomprehensibleness\nincomprehensibly\nincomprehension\nincomprehensive\nincomprehensively\nincomprehensiveness\nincompressibility\nincompressible\nincompressibleness\nincompressibly\nincomputable\ninconcealable\ninconceivability\ninconceivable\ninconceivableness\ninconceivably\ninconcinnate\ninconcinnately\ninconcinnity\ninconcinnous\ninconcludent\ninconcluding\ninconclusion\ninconclusive\ninconclusively\ninconclusiveness\ninconcrete\ninconcurrent\ninconcurring\nincondensability\nincondensable\nincondensibility\nincondensible\nincondite\ninconditionate\ninconditioned\ninconducive\ninconfirm\ninconformable\ninconformably\ninconformity\ninconfused\ninconfusedly\ninconfusion\ninconfutable\ninconfutably\nincongealable\nincongealableness\nincongenerous\nincongenial\nincongeniality\ninconglomerate\nincongruence\nincongruent\nincongruently\nincongruity\nincongruous\nincongruously\nincongruousness\ninconjoinable\ninconnected\ninconnectedness\ninconnu\ninconscience\ninconscient\ninconsciently\ninconscious\ninconsciously\ninconsecutive\ninconsecutively\ninconsecutiveness\ninconsequence\ninconsequent\ninconsequential\ninconsequentiality\ninconsequentially\ninconsequently\ninconsequentness\ninconsiderable\ninconsiderableness\ninconsiderably\ninconsiderate\ninconsiderately\ninconsiderateness\ninconsideration\ninconsidered\ninconsistence\ninconsistency\ninconsistent\ninconsistently\ninconsistentness\ninconsolability\ninconsolable\ninconsolableness\ninconsolably\ninconsolate\ninconsolately\ninconsonance\ninconsonant\ninconsonantly\ninconspicuous\ninconspicuously\ninconspicuousness\ninconstancy\ninconstant\ninconstantly\ninconstantness\ninconstruable\ninconsultable\ninconsumable\ninconsumably\ninconsumed\nincontaminable\nincontaminate\nincontaminateness\nincontemptible\nincontestability\nincontestable\nincontestableness\nincontestably\nincontinence\nincontinency\nincontinent\nincontinently\nincontinuity\nincontinuous\nincontracted\nincontractile\nincontraction\nincontrollable\nincontrollably\nincontrolled\nincontrovertibility\nincontrovertible\nincontrovertibleness\nincontrovertibly\ninconvenience\ninconveniency\ninconvenient\ninconveniently\ninconvenientness\ninconversable\ninconversant\ninconversibility\ninconvertibility\ninconvertible\ninconvertibleness\ninconvertibly\ninconvinced\ninconvincedly\ninconvincibility\ninconvincible\ninconvincibly\nincopresentability\nincopresentable\nincoronate\nincoronated\nincoronation\nincorporable\nincorporate\nincorporated\nincorporatedness\nincorporation\nincorporative\nincorporator\nincorporeal\nincorporealism\nincorporealist\nincorporeality\nincorporealize\nincorporeally\nincorporeity\nincorporeous\nincorpse\nincorrect\nincorrection\nincorrectly\nincorrectness\nincorrespondence\nincorrespondency\nincorrespondent\nincorresponding\nincorrigibility\nincorrigible\nincorrigibleness\nincorrigibly\nincorrodable\nincorrodible\nincorrosive\nincorrupt\nincorrupted\nincorruptibility\nIncorruptible\nincorruptible\nincorruptibleness\nincorruptibly\nincorruption\nincorruptly\nincorruptness\nincourteous\nincourteously\nincrash\nincrassate\nincrassated\nincrassation\nincrassative\nincreasable\nincreasableness\nincrease\nincreasedly\nincreaseful\nincreasement\nincreaser\nincreasing\nincreasingly\nincreate\nincreately\nincreative\nincredibility\nincredible\nincredibleness\nincredibly\nincreditable\nincredited\nincredulity\nincredulous\nincredulously\nincredulousness\nincreep\nincremate\nincremation\nincrement\nincremental\nincrementation\nincrepate\nincrepation\nincrescence\nincrescent\nincrest\nincretion\nincretionary\nincretory\nincriminate\nincrimination\nincriminator\nincriminatory\nincross\nincrossbred\nincrossing\nincrotchet\nincruent\nincruental\nincruentous\nincrust\nincrustant\nIncrustata\nincrustate\nincrustation\nincrustator\nincrustive\nincrustment\nincrystal\nincrystallizable\nincubate\nincubation\nincubational\nincubative\nincubator\nincubatorium\nincubatory\nincubi\nincubous\nincubus\nincudal\nincudate\nincudectomy\nincudes\nincudomalleal\nincudostapedial\ninculcate\ninculcation\ninculcative\ninculcator\ninculcatory\ninculpability\ninculpable\ninculpableness\ninculpably\ninculpate\ninculpation\ninculpative\ninculpatory\nincult\nincultivation\ninculture\nincumbence\nincumbency\nincumbent\nincumbentess\nincumbently\nincumber\nincumberment\nincumbrance\nincumbrancer\nincunable\nincunabula\nincunabular\nincunabulist\nincunabulum\nincuneation\nincur\nincurability\nincurable\nincurableness\nincurably\nincuriosity\nincurious\nincuriously\nincuriousness\nincurrable\nincurrence\nincurrent\nincurse\nincursion\nincursionist\nincursive\nincurvate\nincurvation\nincurvature\nincurve\nincus\nincuse\nincut\nincutting\nInd\nindaba\nindaconitine\nindagate\nindagation\nindagative\nindagator\nindagatory\nindamine\nindan\nindane\nIndanthrene\nindanthrene\nindart\nindazin\nindazine\nindazol\nindazole\ninde\nindebt\nindebted\nindebtedness\nindebtment\nindecence\nindecency\nindecent\nindecently\nindecentness\nIndecidua\nindeciduate\nindeciduous\nindecipherability\nindecipherable\nindecipherableness\nindecipherably\nindecision\nindecisive\nindecisively\nindecisiveness\nindeclinable\nindeclinableness\nindeclinably\nindecomponible\nindecomposable\nindecomposableness\nindecorous\nindecorously\nindecorousness\nindecorum\nindeed\nindeedy\nindefaceable\nindefatigability\nindefatigable\nindefatigableness\nindefatigably\nindefeasibility\nindefeasible\nindefeasibleness\nindefeasibly\nindefeatable\nindefectibility\nindefectible\nindefectibly\nindefective\nindefensibility\nindefensible\nindefensibleness\nindefensibly\nindefensive\nindeficiency\nindeficient\nindeficiently\nindefinable\nindefinableness\nindefinably\nindefinite\nindefinitely\nindefiniteness\nindefinitive\nindefinitively\nindefinitiveness\nindefinitude\nindefinity\nindeflectible\nindefluent\nindeformable\nindehiscence\nindehiscent\nindelectable\nindelegability\nindelegable\nindeliberate\nindeliberately\nindeliberateness\nindeliberation\nindelibility\nindelible\nindelibleness\nindelibly\nindelicacy\nindelicate\nindelicately\nindelicateness\nindemnification\nindemnificator\nindemnificatory\nindemnifier\nindemnify\nindemnitee\nindemnitor\nindemnity\nindemnization\nindemoniate\nindemonstrability\nindemonstrable\nindemonstrableness\nindemonstrably\nindene\nindent\nindentation\nindented\nindentedly\nindentee\nindenter\nindention\nindentment\nindentor\nindenture\nindentured\nindentureship\nindentwise\nindependable\nindependence\nindependency\nindependent\nindependentism\nindependently\nIndependista\nindeposable\nindeprehensible\nindeprivability\nindeprivable\ninderivative\nindescribability\nindescribable\nindescribableness\nindescribably\nindescript\nindescriptive\nindesert\nindesignate\nindesirable\nindestructibility\nindestructible\nindestructibleness\nindestructibly\nindetectable\nindeterminable\nindeterminableness\nindeterminably\nindeterminacy\nindeterminate\nindeterminately\nindeterminateness\nindetermination\nindeterminative\nindetermined\nindeterminism\nindeterminist\nindeterministic\nindevirginate\nindevoted\nindevotion\nindevotional\nindevout\nindevoutly\nindevoutness\nindex\nindexed\nindexer\nindexical\nindexically\nindexing\nindexless\nindexlessness\nindexterity\nIndia\nindiadem\nIndiaman\nIndian\nIndiana\nindianaite\nIndianan\nIndianeer\nIndianesque\nIndianhood\nIndianian\nIndianism\nIndianist\nindianite\nindianization\nindianize\nIndic\nindic\nindicable\nindican\nindicant\nindicanuria\nindicate\nindication\nindicative\nindicatively\nindicator\nIndicatoridae\nIndicatorinae\nindicatory\nindicatrix\nindices\nindicia\nindicial\nindicible\nindicium\nindicolite\nindict\nindictable\nindictably\nindictee\nindicter\nindiction\nindictional\nindictive\nindictment\nindictor\nIndies\nindiferous\nindifference\nindifferency\nindifferent\nindifferential\nindifferentism\nindifferentist\nindifferentistic\nindifferently\nindigena\nindigenal\nindigenate\nindigence\nindigency\nindigene\nindigeneity\nIndigenismo\nindigenist\nindigenity\nindigenous\nindigenously\nindigenousness\nindigent\nindigently\nindigested\nindigestedness\nindigestibility\nindigestible\nindigestibleness\nindigestibly\nindigestion\nindigestive\nindigitamenta\nindigitate\nindigitation\nindign\nindignance\nindignancy\nindignant\nindignantly\nindignation\nindignatory\nindignify\nindignity\nindignly\nindigo\nindigoberry\nIndigofera\nindigoferous\nindigoid\nindigotic\nindigotin\nindigotindisulphonic\nindiguria\nindimensible\nindimensional\nindiminishable\nindimple\nindirect\nindirected\nindirection\nindirectly\nindirectness\nindirubin\nindiscernibility\nindiscernible\nindiscernibleness\nindiscernibly\nindiscerptibility\nindiscerptible\nindiscerptibleness\nindiscerptibly\nindisciplinable\nindiscipline\nindisciplined\nindiscoverable\nindiscoverably\nindiscovered\nindiscreet\nindiscreetly\nindiscreetness\nindiscrete\nindiscretely\nindiscretion\nindiscretionary\nindiscriminate\nindiscriminated\nindiscriminately\nindiscriminateness\nindiscriminating\nindiscriminatingly\nindiscrimination\nindiscriminative\nindiscriminatively\nindiscriminatory\nindiscussable\nindiscussible\nindispellable\nindispensability\nindispensable\nindispensableness\nindispensably\nindispose\nindisposed\nindisposedness\nindisposition\nindisputability\nindisputable\nindisputableness\nindisputably\nindissipable\nindissociable\nindissolubility\nindissoluble\nindissolubleness\nindissolubly\nindissolute\nindissolvability\nindissolvable\nindissolvableness\nindissolvably\nindissuadable\nindissuadably\nindistinct\nindistinction\nindistinctive\nindistinctively\nindistinctiveness\nindistinctly\nindistinctness\nindistinguishability\nindistinguishable\nindistinguishableness\nindistinguishably\nindistinguished\nindistortable\nindistributable\nindisturbable\nindisturbance\nindisturbed\nindite\ninditement\ninditer\nindium\nindivertible\nindivertibly\nindividable\nindividua\nindividual\nindividualism\nindividualist\nindividualistic\nindividualistically\nindividuality\nindividualization\nindividualize\nindividualizer\nindividualizingly\nindividually\nindividuate\nindividuation\nindividuative\nindividuator\nindividuity\nindividuum\nindivinable\nindivisibility\nindivisible\nindivisibleness\nindivisibly\nindivision\nindocibility\nindocible\nindocibleness\nindocile\nindocility\nindoctrinate\nindoctrination\nindoctrinator\nindoctrine\nindoctrinization\nindoctrinize\nIndogaea\nIndogaean\nindogen\nindogenide\nindole\nindolence\nindolent\nindolently\nindoles\nindoline\nIndologian\nIndologist\nIndologue\nIndology\nindoloid\nindolyl\nindomitability\nindomitable\nindomitableness\nindomitably\nIndone\nIndonesian\nindoor\nindoors\nindophenin\nindophenol\nIndophile\nIndophilism\nIndophilist\nindorsation\nindorse\nindoxyl\nindoxylic\nindoxylsulphuric\nIndra\nindraft\nindraught\nindrawal\nindrawing\nindrawn\nindri\nIndris\nindubious\nindubiously\nindubitable\nindubitableness\nindubitably\nindubitatively\ninduce\ninduced\ninducedly\ninducement\ninducer\ninduciae\ninducible\ninducive\ninduct\ninductance\ninductee\ninducteous\ninductile\ninductility\ninduction\ninductional\ninductionally\ninductionless\ninductive\ninductively\ninductiveness\ninductivity\ninductometer\ninductophone\ninductor\ninductorium\ninductory\ninductoscope\nindue\ninduement\nindulge\nindulgeable\nindulgement\nindulgence\nindulgenced\nindulgency\nindulgent\nindulgential\nindulgentially\nindulgently\nindulgentness\nindulger\nindulging\nindulgingly\ninduline\nindult\nindulto\nindument\nindumentum\ninduna\ninduplicate\ninduplication\ninduplicative\nindurable\nindurate\ninduration\nindurative\nindurite\nIndus\nindusial\nindusiate\nindusiated\nindusiform\nindusioid\nindusium\nindustrial\nindustrialism\nindustrialist\nindustrialization\nindustrialize\nindustrially\nindustrialness\nindustrious\nindustriously\nindustriousness\nindustrochemical\nindustry\ninduviae\ninduvial\ninduviate\nindwell\nindweller\nindy\nindyl\nindylic\ninearth\ninebriacy\ninebriant\ninebriate\ninebriation\ninebriative\ninebriety\ninebrious\nineconomic\nineconomy\ninedibility\ninedible\ninedited\nIneducabilia\nineducabilian\nineducability\nineducable\nineducation\nineffability\nineffable\nineffableness\nineffably\nineffaceability\nineffaceable\nineffaceably\nineffectible\nineffectibly\nineffective\nineffectively\nineffectiveness\nineffectual\nineffectuality\nineffectually\nineffectualness\nineffervescence\nineffervescent\nineffervescibility\nineffervescible\ninefficacious\ninefficaciously\ninefficaciousness\ninefficacity\ninefficacy\ninefficience\ninefficiency\ninefficient\ninefficiently\nineffulgent\ninelaborate\ninelaborated\ninelaborately\ninelastic\ninelasticate\ninelasticity\ninelegance\ninelegancy\ninelegant\ninelegantly\nineligibility\nineligible\nineligibleness\nineligibly\nineliminable\nineloquence\nineloquent\nineloquently\nineluctability\nineluctable\nineluctably\nineludible\nineludibly\ninembryonate\ninemendable\ninemotivity\ninemulous\ninenarrable\ninenergetic\ninenubilable\ninenucleable\ninept\nineptitude\nineptly\nineptness\ninequable\ninequal\ninequalitarian\ninequality\ninequally\ninequalness\ninequation\ninequiaxial\ninequicostate\ninequidistant\ninequigranular\ninequilateral\ninequilibrium\ninequilobate\ninequilobed\ninequipotential\ninequipotentiality\ninequitable\ninequitableness\ninequitably\ninequity\ninequivalent\ninequivalve\ninequivalvular\nineradicable\nineradicableness\nineradicably\ninerasable\ninerasableness\ninerasably\ninerasible\nIneri\ninerm\nInermes\nInermi\nInermia\ninermous\ninerrability\ninerrable\ninerrableness\ninerrably\ninerrancy\ninerrant\ninerrantly\ninerratic\ninerring\ninerringly\ninerroneous\ninert\ninertance\ninertia\ninertial\ninertion\ninertly\ninertness\ninerubescent\ninerudite\nineruditely\ninerudition\ninescapable\ninescapableness\ninescapably\ninesculent\ninescutcheon\ninesite\ninessential\ninessentiality\ninestimability\ninestimable\ninestimableness\ninestimably\ninestivation\ninethical\nineunt\nineuphonious\ninevadible\ninevadibly\ninevaporable\ninevasible\ninevidence\ninevident\ninevitability\ninevitable\ninevitableness\ninevitably\ninexact\ninexacting\ninexactitude\ninexactly\ninexactness\ninexcellence\ninexcitability\ninexcitable\ninexclusive\ninexclusively\ninexcommunicable\ninexcusability\ninexcusable\ninexcusableness\ninexcusably\ninexecutable\ninexecution\ninexertion\ninexhausted\ninexhaustedly\ninexhaustibility\ninexhaustible\ninexhaustibleness\ninexhaustibly\ninexhaustive\ninexhaustively\ninexigible\ninexist\ninexistence\ninexistency\ninexistent\ninexorability\ninexorable\ninexorableness\ninexorably\ninexpansible\ninexpansive\ninexpectancy\ninexpectant\ninexpectation\ninexpected\ninexpectedly\ninexpectedness\ninexpedience\ninexpediency\ninexpedient\ninexpediently\ninexpensive\ninexpensively\ninexpensiveness\ninexperience\ninexperienced\ninexpert\ninexpertly\ninexpertness\ninexpiable\ninexpiableness\ninexpiably\ninexpiate\ninexplainable\ninexplicability\ninexplicable\ninexplicableness\ninexplicables\ninexplicably\ninexplicit\ninexplicitly\ninexplicitness\ninexplorable\ninexplosive\ninexportable\ninexposable\ninexposure\ninexpress\ninexpressibility\ninexpressible\ninexpressibleness\ninexpressibles\ninexpressibly\ninexpressive\ninexpressively\ninexpressiveness\ninexpugnability\ninexpugnable\ninexpugnableness\ninexpugnably\ninexpungeable\ninexpungible\ninextant\ninextended\ninextensibility\ninextensible\ninextensile\ninextension\ninextensional\ninextensive\ninexterminable\ninextinct\ninextinguishable\ninextinguishably\ninextirpable\ninextirpableness\ninextricability\ninextricable\ninextricableness\ninextricably\nInez\ninface\ninfall\ninfallibilism\ninfallibilist\ninfallibility\ninfallible\ninfallibleness\ninfallibly\ninfalling\ninfalsificable\ninfame\ninfamiliar\ninfamiliarity\ninfamize\ninfamonize\ninfamous\ninfamously\ninfamousness\ninfamy\ninfancy\ninfand\ninfandous\ninfang\ninfanglement\ninfangthief\ninfant\ninfanta\ninfantado\ninfante\ninfanthood\ninfanticidal\ninfanticide\ninfantile\ninfantilism\ninfantility\ninfantine\ninfantlike\ninfantry\ninfantryman\ninfarct\ninfarctate\ninfarcted\ninfarction\ninfare\ninfatuate\ninfatuatedly\ninfatuation\ninfatuator\ninfaust\ninfeasibility\ninfeasible\ninfeasibleness\ninfect\ninfectant\ninfected\ninfectedness\ninfecter\ninfectible\ninfection\ninfectionist\ninfectious\ninfectiously\ninfectiousness\ninfective\ninfectiveness\ninfectivity\ninfector\ninfectress\ninfectuous\ninfecund\ninfecundity\ninfeed\ninfeft\ninfeftment\ninfelicific\ninfelicitous\ninfelicitously\ninfelicitousness\ninfelicity\ninfelonious\ninfelt\ninfeminine\ninfer\ninferable\ninference\ninferent\ninferential\ninferentialism\ninferentialist\ninferentially\ninferior\ninferiorism\ninferiority\ninferiorize\ninferiorly\ninfern\ninfernal\ninfernalism\ninfernality\ninfernalize\ninfernally\ninfernalry\ninfernalship\ninferno\ninferoanterior\ninferobranchiate\ninferofrontal\ninferolateral\ninferomedian\ninferoposterior\ninferrer\ninferribility\ninferrible\ninferringly\ninfertile\ninfertilely\ninfertileness\ninfertility\ninfest\ninfestant\ninfestation\ninfester\ninfestive\ninfestivity\ninfestment\ninfeudation\ninfibulate\ninfibulation\ninficete\ninfidel\ninfidelic\ninfidelical\ninfidelism\ninfidelistic\ninfidelity\ninfidelize\ninfidelly\ninfield\ninfielder\ninfieldsman\ninfighter\ninfighting\ninfill\ninfilling\ninfilm\ninfilter\ninfiltrate\ninfiltration\ninfiltrative\ninfinitant\ninfinitarily\ninfinitary\ninfinitate\ninfinitation\ninfinite\ninfinitely\ninfiniteness\ninfinitesimal\ninfinitesimalism\ninfinitesimality\ninfinitesimally\ninfinitesimalness\ninfiniteth\ninfinitieth\ninfinitival\ninfinitivally\ninfinitive\ninfinitively\ninfinitize\ninfinitude\ninfinituple\ninfinity\ninfirm\ninfirmarer\ninfirmaress\ninfirmarian\ninfirmary\ninfirmate\ninfirmation\ninfirmative\ninfirmity\ninfirmly\ninfirmness\ninfissile\ninfit\ninfitter\ninfix\ninfixion\ninflame\ninflamed\ninflamedly\ninflamedness\ninflamer\ninflaming\ninflamingly\ninflammability\ninflammable\ninflammableness\ninflammably\ninflammation\ninflammative\ninflammatorily\ninflammatory\ninflatable\ninflate\ninflated\ninflatedly\ninflatedness\ninflater\ninflatile\ninflatingly\ninflation\ninflationary\ninflationism\ninflationist\ninflative\ninflatus\ninflect\ninflected\ninflectedness\ninflection\ninflectional\ninflectionally\ninflectionless\ninflective\ninflector\ninflex\ninflexed\ninflexibility\ninflexible\ninflexibleness\ninflexibly\ninflexive\ninflict\ninflictable\ninflicter\ninfliction\ninflictive\ninflood\ninflorescence\ninflorescent\ninflow\ninflowering\ninfluence\ninfluenceable\ninfluencer\ninfluencive\ninfluent\ninfluential\ninfluentiality\ninfluentially\ninfluenza\ninfluenzal\ninfluenzic\ninflux\ninfluxable\ninfluxible\ninfluxibly\ninfluxion\ninfluxionism\ninfold\ninfolder\ninfolding\ninfoldment\ninfoliate\ninform\ninformable\ninformal\ninformality\ninformalize\ninformally\ninformant\ninformation\ninformational\ninformative\ninformatively\ninformatory\ninformed\ninformedly\ninformer\ninformidable\ninformingly\ninformity\ninfortiate\ninfortitude\ninfortunate\ninfortunately\ninfortunateness\ninfortune\ninfra\ninfrabasal\ninfrabestial\ninfrabranchial\ninfrabuccal\ninfracanthal\ninfracaudal\ninfracelestial\ninfracentral\ninfracephalic\ninfraclavicle\ninfraclavicular\ninfraclusion\ninfraconscious\ninfracortical\ninfracostal\ninfracostalis\ninfracotyloid\ninfract\ninfractible\ninfraction\ninfractor\ninfradentary\ninfradiaphragmatic\ninfragenual\ninfraglacial\ninfraglenoid\ninfraglottic\ninfragrant\ninfragular\ninfrahuman\ninfrahyoid\ninfralabial\ninfralapsarian\ninfralapsarianism\ninfralinear\ninfralittoral\ninframammary\ninframammillary\ninframandibular\ninframarginal\ninframaxillary\ninframedian\ninframercurial\ninframercurian\ninframolecular\ninframontane\ninframundane\ninfranatural\ninfranaturalism\ninfrangibility\ninfrangible\ninfrangibleness\ninfrangibly\ninfranodal\ninfranuclear\ninfraoccipital\ninfraocclusion\ninfraocular\ninfraoral\ninfraorbital\ninfraordinary\ninfrapapillary\ninfrapatellar\ninfraperipherial\ninfrapose\ninfraposition\ninfraprotein\ninfrapubian\ninfraradular\ninfrared\ninfrarenal\ninfrarenally\ninfrarimal\ninfrascapular\ninfrascapularis\ninfrascientific\ninfraspinal\ninfraspinate\ninfraspinatus\ninfraspinous\ninfrastapedial\ninfrasternal\ninfrastigmatal\ninfrastipular\ninfrastructure\ninfrasutral\ninfratemporal\ninfraterrene\ninfraterritorial\ninfrathoracic\ninfratonsillar\ninfratracheal\ninfratrochanteric\ninfratrochlear\ninfratubal\ninfraturbinal\ninfravaginal\ninfraventral\ninfrequency\ninfrequent\ninfrequently\ninfrigidate\ninfrigidation\ninfrigidative\ninfringe\ninfringement\ninfringer\ninfringible\ninfructiferous\ninfructuose\ninfructuosity\ninfructuous\ninfructuously\ninfrugal\ninfrustrable\ninfrustrably\ninfula\ninfumate\ninfumated\ninfumation\ninfundibular\nInfundibulata\ninfundibulate\ninfundibuliform\ninfundibulum\ninfuriate\ninfuriately\ninfuriatingly\ninfuriation\ninfuscate\ninfuscation\ninfuse\ninfusedly\ninfuser\ninfusibility\ninfusible\ninfusibleness\ninfusile\ninfusion\ninfusionism\ninfusionist\ninfusive\nInfusoria\ninfusorial\ninfusorian\ninfusoriform\ninfusorioid\ninfusorium\ninfusory\nIng\ning\nInga\nIngaevones\nIngaevonic\ningallantry\ningate\ningather\ningatherer\ningathering\ningeldable\ningeminate\ningemination\ningenerability\ningenerable\ningenerably\ningenerate\ningenerately\ningeneration\ningenerative\ningeniosity\ningenious\ningeniously\ningeniousness\ningenit\ningenue\ningenuity\ningenuous\ningenuously\ningenuousness\nInger\ningerminate\ningest\ningesta\ningestible\ningestion\ningestive\nInghamite\nInghilois\ningiver\ningiving\ningle\ninglenook\ningleside\ninglobate\ninglobe\ninglorious\ningloriously\ningloriousness\ninglutition\ningluvial\ningluvies\ningluviitis\ningoing\nIngomar\ningot\ningotman\ningraft\ningrain\ningrained\ningrainedly\ningrainedness\nIngram\ningrammaticism\ningrandize\ningrate\ningrateful\ningratefully\ningratefulness\ningrately\ningratiate\ningratiating\ningratiatingly\ningratiation\ningratiatory\ningratitude\ningravescent\ningravidate\ningravidation\ningredient\ningress\ningression\ningressive\ningressiveness\ningross\ningrow\ningrown\ningrownness\ningrowth\ninguen\ninguinal\ninguinoabdominal\ninguinocrural\ninguinocutaneous\ninguinodynia\ninguinolabial\ninguinoscrotal\nInguklimiut\ningulf\ningulfment\ningurgitate\ningurgitation\nIngush\ninhabit\ninhabitability\ninhabitable\ninhabitancy\ninhabitant\ninhabitation\ninhabitative\ninhabitativeness\ninhabited\ninhabitedness\ninhabiter\ninhabitiveness\ninhabitress\ninhalant\ninhalation\ninhalator\ninhale\ninhalement\ninhalent\ninhaler\ninharmonic\ninharmonical\ninharmonious\ninharmoniously\ninharmoniousness\ninharmony\ninhaul\ninhauler\ninhaust\ninhaustion\ninhearse\ninheaven\ninhere\ninherence\ninherency\ninherent\ninherently\ninherit\ninheritability\ninheritable\ninheritableness\ninheritably\ninheritage\ninheritance\ninheritor\ninheritress\ninheritrice\ninheritrix\ninhesion\ninhiate\ninhibit\ninhibitable\ninhibiter\ninhibition\ninhibitionist\ninhibitive\ninhibitor\ninhibitory\ninhomogeneity\ninhomogeneous\ninhomogeneously\ninhospitable\ninhospitableness\ninhospitably\ninhospitality\ninhuman\ninhumane\ninhumanely\ninhumanism\ninhumanity\ninhumanize\ninhumanly\ninhumanness\ninhumate\ninhumation\ninhumationist\ninhume\ninhumer\ninhumorous\ninhumorously\nInia\ninial\ninidoneity\ninidoneous\nInigo\ninimicable\ninimical\ninimicality\ninimically\ninimicalness\ninimitability\ninimitable\ninimitableness\ninimitably\niniome\nIniomi\niniomous\ninion\niniquitable\niniquitably\niniquitous\niniquitously\niniquitousness\niniquity\ninirritability\ninirritable\ninirritant\ninirritative\ninissuable\ninitial\ninitialer\ninitialist\ninitialize\ninitially\ninitiant\ninitiary\ninitiate\ninitiation\ninitiative\ninitiatively\ninitiator\ninitiatorily\ninitiatory\ninitiatress\ninitiatrix\ninitis\ninitive\ninject\ninjectable\ninjection\ninjector\ninjelly\ninjudicial\ninjudicially\ninjudicious\ninjudiciously\ninjudiciousness\nInjun\ninjunct\ninjunction\ninjunctive\ninjunctively\ninjurable\ninjure\ninjured\ninjuredly\ninjuredness\ninjurer\ninjurious\ninjuriously\ninjuriousness\ninjury\ninjustice\nink\ninkberry\ninkbush\ninken\ninker\nInkerman\ninket\ninkfish\ninkholder\ninkhorn\ninkhornism\ninkhornist\ninkhornize\ninkhornizer\ninkindle\ninkiness\ninkish\ninkle\ninkless\ninklike\ninkling\ninkmaker\ninkmaking\ninknot\ninkosi\ninkpot\nInkra\ninkroot\ninks\ninkshed\ninkslinger\ninkslinging\ninkstain\ninkstand\ninkstandish\ninkstone\ninkweed\ninkwell\ninkwood\ninkwriter\ninky\ninlagation\ninlaid\ninlaik\ninlake\ninland\ninlander\ninlandish\ninlaut\ninlaw\ninlawry\ninlay\ninlayer\ninlaying\ninleague\ninleak\ninleakage\ninlet\ninlier\ninlook\ninlooker\ninly\ninlying\ninmate\ninmeats\ninmixture\ninmost\ninn\ninnascibility\ninnascible\ninnate\ninnately\ninnateness\ninnatism\ninnative\ninnatural\ninnaturality\ninnaturally\ninneity\ninner\ninnerly\ninnermore\ninnermost\ninnermostly\ninnerness\ninnervate\ninnervation\ninnervational\ninnerve\ninness\ninnest\ninnet\ninnholder\ninning\ninninmorite\nInnisfail\ninnkeeper\ninnless\ninnocence\ninnocency\ninnocent\ninnocently\ninnocentness\ninnocuity\ninnocuous\ninnocuously\ninnocuousness\ninnominable\ninnominables\ninnominata\ninnominate\ninnominatum\ninnovant\ninnovate\ninnovation\ninnovational\ninnovationist\ninnovative\ninnovator\ninnovatory\ninnoxious\ninnoxiously\ninnoxiousness\ninnuendo\nInnuit\ninnumerability\ninnumerable\ninnumerableness\ninnumerably\ninnumerous\ninnutrient\ninnutrition\ninnutritious\ninnutritive\ninnyard\nIno\ninobedience\ninobedient\ninobediently\ninoblast\ninobnoxious\ninobscurable\ninobservable\ninobservance\ninobservancy\ninobservant\ninobservantly\ninobservantness\ninobservation\ninobtainable\ninobtrusive\ninobtrusively\ninobtrusiveness\ninobvious\nInocarpus\ninoccupation\nInoceramus\ninochondritis\ninochondroma\ninoculability\ninoculable\ninoculant\ninocular\ninoculate\ninoculation\ninoculative\ninoculator\ninoculum\ninocystoma\ninocyte\nInodes\ninodorous\ninodorously\ninodorousness\ninoepithelioma\ninoffending\ninoffensive\ninoffensively\ninoffensiveness\ninofficial\ninofficially\ninofficiosity\ninofficious\ninofficiously\ninofficiousness\ninogen\ninogenesis\ninogenic\ninogenous\ninoglia\ninohymenitic\ninolith\ninoma\ninominous\ninomyoma\ninomyositis\ninomyxoma\ninone\ninoneuroma\ninoperable\ninoperative\ninoperativeness\ninopercular\nInoperculata\ninoperculate\ninopinable\ninopinate\ninopinately\ninopine\ninopportune\ninopportunely\ninopportuneness\ninopportunism\ninopportunist\ninopportunity\ninoppressive\ninoppugnable\ninopulent\ninorb\ninorderly\ninordinacy\ninordinary\ninordinate\ninordinately\ninordinateness\ninorganic\ninorganical\ninorganically\ninorganizable\ninorganization\ninorganized\ninoriginate\ninornate\ninosclerosis\ninoscopy\ninosculate\ninosculation\ninosic\ninosin\ninosinic\ninosite\ninositol\ninostensible\ninostensibly\ninotropic\ninower\ninoxidability\ninoxidable\ninoxidizable\ninoxidize\ninparabola\ninpardonable\ninpatient\ninpayment\ninpensioner\ninphase\ninpolygon\ninpolyhedron\ninport\ninpour\ninpush\ninput\ninquaintance\ninquartation\ninquest\ninquestual\ninquiet\ninquietation\ninquietly\ninquietness\ninquietude\nInquilinae\ninquiline\ninquilinism\ninquilinity\ninquilinous\ninquinate\ninquination\ninquirable\ninquirant\ninquiration\ninquire\ninquirendo\ninquirent\ninquirer\ninquiring\ninquiringly\ninquiry\ninquisite\ninquisition\ninquisitional\ninquisitionist\ninquisitive\ninquisitively\ninquisitiveness\ninquisitor\ninquisitorial\ninquisitorially\ninquisitorialness\ninquisitorious\ninquisitorship\ninquisitory\ninquisitress\ninquisitrix\ninquisiturient\ninradius\ninreality\ninrigged\ninrigger\ninrighted\ninring\ninro\ninroad\ninroader\ninroll\ninrooted\ninrub\ninrun\ninrunning\ninruption\ninrush\ninsack\ninsagacity\ninsalivate\ninsalivation\ninsalubrious\ninsalubrity\ninsalutary\ninsalvability\ninsalvable\ninsane\ninsanely\ninsaneness\ninsanify\ninsanitariness\ninsanitary\ninsanitation\ninsanity\ninsapiency\ninsapient\ninsatiability\ninsatiable\ninsatiableness\ninsatiably\ninsatiate\ninsatiated\ninsatiately\ninsatiateness\ninsatiety\ninsatisfaction\ninsatisfactorily\ninsaturable\ninscenation\ninscibile\ninscience\ninscient\ninscribable\ninscribableness\ninscribe\ninscriber\ninscript\ninscriptible\ninscription\ninscriptional\ninscriptioned\ninscriptionist\ninscriptionless\ninscriptive\ninscriptively\ninscriptured\ninscroll\ninscrutability\ninscrutable\ninscrutableness\ninscrutables\ninscrutably\ninsculp\ninsculpture\ninsea\ninseam\ninsect\nInsecta\ninsectan\ninsectarium\ninsectary\ninsectean\ninsected\ninsecticidal\ninsecticide\ninsectiferous\ninsectiform\ninsectifuge\ninsectile\ninsectine\ninsection\ninsectival\nInsectivora\ninsectivore\ninsectivorous\ninsectlike\ninsectmonger\ninsectologer\ninsectologist\ninsectology\ninsectproof\ninsecure\ninsecurely\ninsecureness\ninsecurity\ninsee\ninseer\ninselberg\ninseminate\ninsemination\ninsenescible\ninsensate\ninsensately\ninsensateness\ninsense\ninsensibility\ninsensibilization\ninsensibilize\ninsensibilizer\ninsensible\ninsensibleness\ninsensibly\ninsensitive\ninsensitiveness\ninsensitivity\ninsensuous\ninsentience\ninsentiency\ninsentient\ninseparability\ninseparable\ninseparableness\ninseparably\ninseparate\ninseparately\ninsequent\ninsert\ninsertable\ninserted\ninserter\ninsertion\ninsertional\ninsertive\ninserviceable\ninsessor\nInsessores\ninsessorial\ninset\ninsetter\ninseverable\ninseverably\ninshave\ninsheathe\ninshell\ninshining\ninship\ninshoe\ninshoot\ninshore\ninside\ninsider\ninsidiosity\ninsidious\ninsidiously\ninsidiousness\ninsight\ninsightful\ninsigne\ninsignia\ninsignificance\ninsignificancy\ninsignificant\ninsignificantly\ninsimplicity\ninsincere\ninsincerely\ninsincerity\ninsinking\ninsinuant\ninsinuate\ninsinuating\ninsinuatingly\ninsinuation\ninsinuative\ninsinuatively\ninsinuativeness\ninsinuator\ninsinuatory\ninsinuendo\ninsipid\ninsipidity\ninsipidly\ninsipidness\ninsipience\ninsipient\ninsipiently\ninsist\ninsistence\ninsistency\ninsistent\ninsistently\ninsister\ninsistingly\ninsistive\ninsititious\ninsnare\ninsnarement\ninsnarer\ninsobriety\ninsociability\ninsociable\ninsociableness\ninsociably\ninsocial\ninsocially\ninsofar\ninsolate\ninsolation\ninsole\ninsolence\ninsolency\ninsolent\ninsolently\ninsolentness\ninsolid\ninsolidity\ninsolubility\ninsoluble\ninsolubleness\ninsolubly\ninsolvability\ninsolvable\ninsolvably\ninsolvence\ninsolvency\ninsolvent\ninsomnia\ninsomniac\ninsomnious\ninsomnolence\ninsomnolency\ninsomnolent\ninsomuch\ninsonorous\ninsooth\ninsorb\ninsorbent\ninsouciance\ninsouciant\ninsouciantly\ninsoul\ninspan\ninspeak\ninspect\ninspectability\ninspectable\ninspectingly\ninspection\ninspectional\ninspectioneer\ninspective\ninspector\ninspectoral\ninspectorate\ninspectorial\ninspectorship\ninspectress\ninspectrix\ninspheration\ninsphere\ninspirability\ninspirable\ninspirant\ninspiration\ninspirational\ninspirationalism\ninspirationally\ninspirationist\ninspirative\ninspirator\ninspiratory\ninspiratrix\ninspire\ninspired\ninspiredly\ninspirer\ninspiring\ninspiringly\ninspirit\ninspiriter\ninspiriting\ninspiritingly\ninspiritment\ninspirometer\ninspissant\ninspissate\ninspissation\ninspissator\ninspissosis\ninspoke\ninspoken\ninspreith\ninstability\ninstable\ninstall\ninstallant\ninstallation\ninstaller\ninstallment\ninstance\ninstancy\ninstanding\ninstant\ninstantaneity\ninstantaneous\ninstantaneously\ninstantaneousness\ninstanter\ninstantial\ninstantly\ninstantness\ninstar\ninstate\ninstatement\ninstaurate\ninstauration\ninstaurator\ninstead\ninstealing\ninsteam\ninsteep\ninstellation\ninstep\ninstigant\ninstigate\ninstigatingly\ninstigation\ninstigative\ninstigator\ninstigatrix\ninstill\ninstillation\ninstillator\ninstillatory\ninstiller\ninstillment\ninstinct\ninstinctive\ninstinctively\ninstinctivist\ninstinctivity\ninstinctual\ninstipulate\ninstitor\ninstitorial\ninstitorian\ninstitory\ninstitute\ninstituter\ninstitution\ninstitutional\ninstitutionalism\ninstitutionalist\ninstitutionality\ninstitutionalization\ninstitutionalize\ninstitutionally\ninstitutionary\ninstitutionize\ninstitutive\ninstitutively\ninstitutor\ninstitutress\ninstitutrix\ninstonement\ninstratified\ninstreaming\ninstrengthen\ninstressed\ninstroke\ninstruct\ninstructed\ninstructedly\ninstructedness\ninstructer\ninstructible\ninstruction\ninstructional\ninstructionary\ninstructive\ninstructively\ninstructiveness\ninstructor\ninstructorship\ninstructress\ninstrument\ninstrumental\ninstrumentalism\ninstrumentalist\ninstrumentality\ninstrumentalize\ninstrumentally\ninstrumentary\ninstrumentate\ninstrumentation\ninstrumentative\ninstrumentist\ninstrumentman\ninsuavity\ninsubduable\ninsubjection\ninsubmergible\ninsubmersible\ninsubmission\ninsubmissive\ninsubordinate\ninsubordinately\ninsubordinateness\ninsubordination\ninsubstantial\ninsubstantiality\ninsubstantiate\ninsubstantiation\ninsubvertible\ninsuccess\ninsuccessful\ninsucken\ninsuetude\ninsufferable\ninsufferableness\ninsufferably\ninsufficience\ninsufficiency\ninsufficient\ninsufficiently\ninsufflate\ninsufflation\ninsufflator\ninsula\ninsulance\ninsulant\ninsular\ninsularism\ninsularity\ninsularize\ninsularly\ninsulary\ninsulate\ninsulated\ninsulating\ninsulation\ninsulator\ninsulin\ninsulize\ninsulse\ninsulsity\ninsult\ninsultable\ninsultant\ninsultation\ninsulter\ninsulting\ninsultingly\ninsultproof\ninsunk\ninsuperability\ninsuperable\ninsuperableness\ninsuperably\ninsupportable\ninsupportableness\ninsupportably\ninsupposable\ninsuppressible\ninsuppressibly\ninsuppressive\ninsurability\ninsurable\ninsurance\ninsurant\ninsure\ninsured\ninsurer\ninsurge\ninsurgence\ninsurgency\ninsurgent\ninsurgentism\ninsurgescence\ninsurmountability\ninsurmountable\ninsurmountableness\ninsurmountably\ninsurpassable\ninsurrect\ninsurrection\ninsurrectional\ninsurrectionally\ninsurrectionary\ninsurrectionism\ninsurrectionist\ninsurrectionize\ninsurrectory\ninsusceptibility\ninsusceptible\ninsusceptibly\ninsusceptive\ninswamp\ninswarming\ninsweeping\ninswell\ninswept\ninswing\ninswinger\nintabulate\nintact\nintactile\nintactly\nintactness\nintagliated\nintagliation\nintaglio\nintagliotype\nintake\nintaker\nintangibility\nintangible\nintangibleness\nintangibly\nintarissable\nintarsia\nintarsiate\nintarsist\nintastable\nintaxable\nintechnicality\ninteger\nintegrability\nintegrable\nintegral\nintegrality\nintegralization\nintegralize\nintegrally\nintegrand\nintegrant\nintegraph\nintegrate\nintegration\nintegrative\nintegrator\nintegrifolious\nintegrious\nintegriously\nintegripalliate\nintegrity\nintegrodifferential\nintegropallial\nIntegropallialia\nIntegropalliata\nintegropalliate\nintegument\nintegumental\nintegumentary\nintegumentation\ninteind\nintellect\nintellectation\nintellected\nintellectible\nintellection\nintellective\nintellectively\nintellectual\nintellectualism\nintellectualist\nintellectualistic\nintellectualistically\nintellectuality\nintellectualization\nintellectualize\nintellectualizer\nintellectually\nintellectualness\nintelligence\nintelligenced\nintelligencer\nintelligency\nintelligent\nintelligential\nintelligently\nintelligentsia\nintelligibility\nintelligible\nintelligibleness\nintelligibly\nintelligize\nintemerate\nintemerately\nintemerateness\nintemeration\nintemperable\nintemperably\nintemperament\nintemperance\nintemperate\nintemperately\nintemperateness\nintemperature\nintempestive\nintempestively\nintempestivity\nintemporal\nintemporally\nintenability\nintenable\nintenancy\nintend\nintendance\nintendancy\nintendant\nintendantism\nintendantship\nintended\nintendedly\nintendedness\nintendence\nintender\nintendible\nintending\nintendingly\nintendit\nintendment\nintenerate\ninteneration\nintenible\nintensate\nintensation\nintensative\nintense\nintensely\nintenseness\nintensification\nintensifier\nintensify\nintension\nintensional\nintensionally\nintensitive\nintensity\nintensive\nintensively\nintensiveness\nintent\nintention\nintentional\nintentionalism\nintentionality\nintentionally\nintentioned\nintentionless\nintentive\nintentively\nintentiveness\nintently\nintentness\ninter\ninterabsorption\ninteracademic\ninteraccessory\ninteraccuse\ninteracinar\ninteracinous\ninteract\ninteraction\ninteractional\ninteractionism\ninteractionist\ninteractive\ninteractivity\ninteradaptation\ninteradditive\ninteradventual\ninteraffiliation\ninteragency\ninteragent\ninteragglutinate\ninteragglutination\ninteragree\ninteragreement\ninteralar\ninterallied\ninterally\ninteralveolar\ninterambulacral\ninterambulacrum\ninteramnian\ninterangular\ninteranimate\ninterannular\ninterantagonism\ninterantennal\ninterantennary\ninterapophyseal\ninterapplication\ninterarboration\ninterarch\ninterarcualis\ninterarmy\ninterarticular\ninterartistic\ninterarytenoid\ninterassociation\ninterassure\ninterasteroidal\ninterastral\ninteratomic\ninteratrial\ninterattrition\ninteraulic\ninteraural\ninterauricular\ninteravailability\ninteravailable\ninteraxal\ninteraxial\ninteraxillary\ninteraxis\ninterbalance\ninterbanded\ninterbank\ninterbedded\ninterbelligerent\ninterblend\ninterbody\ninterbonding\ninterborough\ninterbourse\ninterbrachial\ninterbrain\ninterbranch\ninterbranchial\ninterbreath\ninterbreed\ninterbrigade\ninterbring\ninterbronchial\nintercadence\nintercadent\nintercalare\nintercalarily\nintercalarium\nintercalary\nintercalate\nintercalation\nintercalative\nintercalatory\nintercale\nintercalm\nintercanal\nintercanalicular\nintercapillary\nintercardinal\nintercarotid\nintercarpal\nintercarpellary\nintercarrier\nintercartilaginous\nintercaste\nintercatenated\nintercausative\nintercavernous\nintercede\ninterceder\nintercellular\nintercensal\nintercentral\nintercentrum\nintercept\nintercepter\nintercepting\ninterception\ninterceptive\ninterceptor\ninterceptress\nintercerebral\nintercession\nintercessional\nintercessionary\nintercessionment\nintercessive\nintercessor\nintercessorial\nintercessory\ninterchaff\ninterchange\ninterchangeability\ninterchangeable\ninterchangeableness\ninterchangeably\ninterchanger\ninterchapter\nintercharge\ninterchase\nintercheck\ninterchoke\ninterchondral\ninterchurch\nIntercidona\ninterciliary\nintercilium\nintercircle\nintercirculate\nintercirculation\nintercision\nintercitizenship\nintercity\nintercivic\nintercivilization\ninterclash\ninterclasp\ninterclass\ninterclavicle\ninterclavicular\ninterclerical\nintercloud\ninterclub\nintercoastal\nintercoccygeal\nintercoccygean\nintercohesion\nintercollege\nintercollegian\nintercollegiate\nintercolline\nintercolonial\nintercolonially\nintercolonization\nintercolumn\nintercolumnal\nintercolumnar\nintercolumniation\nintercom\nintercombat\nintercombination\nintercombine\nintercome\nintercommission\nintercommon\nintercommonable\nintercommonage\nintercommoner\nintercommunal\nintercommune\nintercommuner\nintercommunicability\nintercommunicable\nintercommunicate\nintercommunication\nintercommunicative\nintercommunicator\nintercommunion\nintercommunity\nintercompany\nintercomparable\nintercompare\nintercomparison\nintercomplexity\nintercomplimentary\ninterconal\ninterconciliary\nintercondenser\nintercondylar\nintercondylic\nintercondyloid\ninterconfessional\ninterconfound\ninterconnect\ninterconnection\nintercontinental\nintercontorted\nintercontradiction\nintercontradictory\ninterconversion\ninterconvertibility\ninterconvertible\ninterconvertibly\nintercooler\nintercooling\nintercoracoid\nintercorporate\nintercorpuscular\nintercorrelate\nintercorrelation\nintercortical\nintercosmic\nintercosmically\nintercostal\nintercostally\nintercostobrachial\nintercostohumeral\nintercotylar\nintercounty\nintercourse\nintercoxal\nintercranial\nintercreate\nintercrescence\nintercrinal\nintercrop\nintercross\nintercrural\nintercrust\nintercrystalline\nintercrystallization\nintercrystallize\nintercultural\ninterculture\nintercurl\nintercurrence\nintercurrent\nintercurrently\nintercursation\nintercuspidal\nintercutaneous\nintercystic\ninterdash\ninterdebate\ninterdenominational\ninterdental\ninterdentally\ninterdentil\ninterdepartmental\ninterdepartmentally\ninterdepend\ninterdependable\ninterdependence\ninterdependency\ninterdependent\ninterdependently\ninterderivative\ninterdespise\ninterdestructive\ninterdestructiveness\ninterdetermination\ninterdetermine\ninterdevour\ninterdict\ninterdiction\ninterdictive\ninterdictor\ninterdictory\ninterdictum\ninterdifferentiation\ninterdiffuse\ninterdiffusion\ninterdiffusive\ninterdiffusiveness\ninterdigital\ninterdigitate\ninterdigitation\ninterdine\ninterdiscal\ninterdispensation\ninterdistinguish\ninterdistrict\ninterdivision\ninterdome\ninterdorsal\ninterdrink\nintereat\ninterelectrode\ninterelectrodic\ninterempire\ninterenjoy\ninterentangle\ninterentanglement\ninterepidemic\ninterepimeral\ninterepithelial\ninterequinoctial\ninteressee\ninterest\ninterested\ninterestedly\ninterestedness\ninterester\ninteresting\ninterestingly\ninterestingness\ninterestless\ninterestuarine\ninterface\ninterfacial\ninterfactional\ninterfamily\ninterfascicular\ninterfault\ninterfector\ninterfederation\ninterfemoral\ninterfenestral\ninterfenestration\ninterferant\ninterfere\ninterference\ninterferent\ninterferential\ninterferer\ninterfering\ninterferingly\ninterferingness\ninterferometer\ninterferometry\ninterferric\ninterfertile\ninterfertility\ninterfibrillar\ninterfibrillary\ninterfibrous\ninterfilamentar\ninterfilamentary\ninterfilamentous\ninterfilar\ninterfiltrate\ninterfinger\ninterflange\ninterflashing\ninterflow\ninterfluence\ninterfluent\ninterfluminal\ninterfluous\ninterfluve\ninterfluvial\ninterflux\ninterfold\ninterfoliaceous\ninterfoliar\ninterfoliate\ninterfollicular\ninterforce\ninterfraternal\ninterfraternity\ninterfret\ninterfretted\ninterfriction\ninterfrontal\ninterfruitful\ninterfulgent\ninterfuse\ninterfusion\ninterganglionic\nintergenerant\nintergenerating\nintergeneration\nintergential\nintergesture\nintergilt\ninterglacial\ninterglandular\ninterglobular\ninterglyph\nintergossip\nintergovernmental\nintergradation\nintergrade\nintergradient\nintergraft\nintergranular\nintergrapple\nintergrave\nintergroupal\nintergrow\nintergrown\nintergrowth\nintergular\nintergyral\ninterhabitation\ninterhemal\ninterhemispheric\ninterhostile\ninterhuman\ninterhyal\ninterhybridize\ninterim\ninterimist\ninterimistic\ninterimistical\ninterimistically\ninterimperial\ninterincorporation\ninterindependence\ninterindicate\ninterindividual\ninterinfluence\ninterinhibition\ninterinhibitive\ninterinsert\ninterinsular\ninterinsurance\ninterinsurer\ninterinvolve\ninterionic\ninterior\ninteriority\ninteriorize\ninteriorly\ninteriorness\ninterirrigation\ninterisland\ninterjacence\ninterjacency\ninterjacent\ninterjaculate\ninterjaculatory\ninterjangle\ninterjealousy\ninterject\ninterjection\ninterjectional\ninterjectionalize\ninterjectionally\ninterjectionary\ninterjectionize\ninterjectiveness\ninterjector\ninterjectorily\ninterjectory\ninterjectural\ninterjoin\ninterjoist\ninterjudgment\ninterjunction\ninterkinesis\ninterkinetic\ninterknit\ninterknot\ninterknow\ninterknowledge\ninterlaboratory\ninterlace\ninterlaced\ninterlacedly\ninterlacement\ninterlacery\ninterlacustrine\ninterlaid\ninterlake\ninterlamellar\ninterlamellation\ninterlaminar\ninterlaminate\ninterlamination\ninterlanguage\ninterlap\ninterlapse\ninterlard\ninterlardation\ninterlardment\ninterlatitudinal\ninterlaudation\ninterlay\ninterleaf\ninterleague\ninterleave\ninterleaver\ninterlibel\ninterlibrary\ninterlie\ninterligamentary\ninterligamentous\ninterlight\ninterlimitation\ninterline\ninterlineal\ninterlineally\ninterlinear\ninterlinearily\ninterlinearly\ninterlineary\ninterlineate\ninterlineation\ninterlinement\ninterliner\nInterlingua\ninterlingual\ninterlinguist\ninterlinguistic\ninterlining\ninterlink\ninterloan\ninterlobar\ninterlobate\ninterlobular\ninterlocal\ninterlocally\ninterlocate\ninterlocation\ninterlock\ninterlocker\ninterlocular\ninterloculus\ninterlocution\ninterlocutive\ninterlocutor\ninterlocutorily\ninterlocutory\ninterlocutress\ninterlocutrice\ninterlocutrix\ninterloop\ninterlope\ninterloper\ninterlot\ninterlucation\ninterlucent\ninterlude\ninterluder\ninterludial\ninterlunar\ninterlunation\ninterlying\nintermalleolar\nintermammary\nintermammillary\nintermandibular\nintermanorial\nintermarginal\nintermarine\nintermarriage\nintermarriageable\nintermarry\nintermason\nintermastoid\nintermat\nintermatch\nintermaxilla\nintermaxillar\nintermaxillary\nintermaze\nintermeasurable\nintermeasure\nintermeddle\nintermeddlement\nintermeddler\nintermeddlesome\nintermeddlesomeness\nintermeddling\nintermeddlingly\nintermediacy\nintermediae\nintermedial\nintermediary\nintermediate\nintermediately\nintermediateness\nintermediation\nintermediator\nintermediatory\nintermedium\nintermedius\nintermeet\nintermelt\nintermembral\nintermembranous\nintermeningeal\nintermenstrual\nintermenstruum\ninterment\nintermental\nintermention\nintermercurial\nintermesenterial\nintermesenteric\nintermesh\nintermessage\nintermessenger\nintermetacarpal\nintermetallic\nintermetameric\nintermetatarsal\nintermew\nintermewed\nintermewer\nintermezzo\nintermigration\ninterminability\ninterminable\ninterminableness\ninterminably\ninterminant\ninterminate\nintermine\nintermingle\nintermingledom\ninterminglement\ninterminister\ninterministerial\ninterministerium\nintermission\nintermissive\nintermit\nintermitted\nintermittedly\nintermittence\nintermittency\nintermittent\nintermittently\nintermitter\nintermitting\nintermittingly\nintermix\nintermixedly\nintermixtly\nintermixture\nintermobility\nintermodification\nintermodillion\nintermodulation\nintermolar\nintermolecular\nintermomentary\nintermontane\nintermorainic\nintermotion\nintermountain\nintermundane\nintermundial\nintermundian\nintermundium\nintermunicipal\nintermunicipality\nintermural\nintermuscular\nintermutation\nintermutual\nintermutually\nintermutule\nintern\ninternal\ninternality\ninternalization\ninternalize\ninternally\ninternalness\ninternals\ninternarial\ninternasal\ninternation\ninternational\ninternationalism\ninternationalist\ninternationality\ninternationalization\ninternationalize\ninternationally\ninterneciary\ninternecinal\ninternecine\ninternecion\ninternecive\ninternee\ninternetted\ninterneural\ninterneuronic\ninternidal\ninternist\ninternment\ninternobasal\ninternodal\ninternode\ninternodial\ninternodian\ninternodium\ninternodular\ninternship\ninternuclear\ninternuncial\ninternunciary\ninternunciatory\ninternuncio\ninternuncioship\ninternuncius\ninternuptial\ninterobjective\ninteroceanic\ninteroceptive\ninteroceptor\ninterocular\ninteroffice\ninterolivary\ninteropercle\ninteropercular\ninteroperculum\ninteroptic\ninterorbital\ninterorbitally\ninteroscillate\ninterosculant\ninterosculate\ninterosculation\ninterosseal\ninterosseous\ninterownership\ninterpage\ninterpalatine\ninterpalpebral\ninterpapillary\ninterparenchymal\ninterparental\ninterparenthetical\ninterparenthetically\ninterparietal\ninterparietale\ninterparliament\ninterparliamentary\ninterparoxysmal\ninterparty\ninterpause\ninterpave\ninterpeal\ninterpectoral\ninterpeduncular\ninterpel\ninterpellant\ninterpellate\ninterpellation\ninterpellator\ninterpenetrable\ninterpenetrant\ninterpenetrate\ninterpenetration\ninterpenetrative\ninterpenetratively\ninterpermeate\ninterpersonal\ninterpervade\ninterpetaloid\ninterpetiolar\ninterpetiolary\ninterphalangeal\ninterphase\ninterphone\ninterpiece\ninterpilaster\ninterpilastering\ninterplacental\ninterplait\ninterplanetary\ninterplant\ninterplanting\ninterplay\ninterplea\ninterplead\ninterpleader\ninterpledge\ninterpleural\ninterplical\ninterplicate\ninterplication\ninterplight\ninterpoint\ninterpolable\ninterpolar\ninterpolary\ninterpolate\ninterpolater\ninterpolation\ninterpolative\ninterpolatively\ninterpolator\ninterpole\ninterpolitical\ninterpolity\ninterpollinate\ninterpolymer\ninterpone\ninterportal\ninterposable\ninterposal\ninterpose\ninterposer\ninterposing\ninterposingly\ninterposition\ninterposure\ninterpour\ninterprater\ninterpressure\ninterpret\ninterpretability\ninterpretable\ninterpretableness\ninterpretably\ninterpretament\ninterpretation\ninterpretational\ninterpretative\ninterpretatively\ninterpreter\ninterpretership\ninterpretive\ninterpretively\ninterpretorial\ninterpretress\ninterprismatic\ninterproduce\ninterprofessional\ninterproglottidal\ninterproportional\ninterprotoplasmic\ninterprovincial\ninterproximal\ninterproximate\ninterpterygoid\ninterpubic\ninterpulmonary\ninterpunct\ninterpunction\ninterpunctuate\ninterpunctuation\ninterpupillary\ninterquarrel\ninterquarter\ninterrace\ninterracial\ninterracialism\ninterradial\ninterradially\ninterradiate\ninterradiation\ninterradium\ninterradius\ninterrailway\ninterramal\ninterramicorn\ninterramification\ninterreceive\ninterreflection\ninterregal\ninterregimental\ninterregional\ninterregna\ninterregnal\ninterregnum\ninterreign\ninterrelate\ninterrelated\ninterrelatedly\ninterrelatedness\ninterrelation\ninterrelationship\ninterreligious\ninterrenal\ninterrenalism\ninterrepellent\ninterrepulsion\ninterrer\ninterresponsibility\ninterresponsible\ninterreticular\ninterreticulation\ninterrex\ninterrhyme\ninterright\ninterriven\ninterroad\ninterrogability\ninterrogable\ninterrogant\ninterrogate\ninterrogatedness\ninterrogatee\ninterrogatingly\ninterrogation\ninterrogational\ninterrogative\ninterrogatively\ninterrogator\ninterrogatorily\ninterrogatory\ninterrogatrix\ninterrogee\ninterroom\ninterrule\ninterrun\ninterrupt\ninterrupted\ninterruptedly\ninterruptedness\ninterrupter\ninterruptible\ninterrupting\ninterruptingly\ninterruption\ninterruptive\ninterruptively\ninterruptor\ninterruptory\nintersale\nintersalute\ninterscapilium\ninterscapular\ninterscapulum\ninterscene\ninterscholastic\ninterschool\ninterscience\ninterscribe\ninterscription\ninterseaboard\ninterseamed\nintersect\nintersectant\nintersection\nintersectional\nintersegmental\ninterseminal\nintersentimental\ninterseptal\nintersertal\nintersesamoid\nintersession\nintersessional\ninterset\nintersex\nintersexual\nintersexualism\nintersexuality\nintershade\nintershifting\nintershock\nintershoot\nintershop\nintersidereal\nintersituate\nintersocial\nintersocietal\nintersociety\nintersole\nintersolubility\nintersoluble\nintersomnial\nintersomnious\nintersonant\nintersow\ninterspace\ninterspatial\ninterspatially\ninterspeaker\ninterspecial\ninterspecific\ninterspersal\nintersperse\ninterspersedly\ninterspersion\ninterspheral\nintersphere\ninterspicular\ninterspinal\ninterspinalis\ninterspinous\ninterspiral\ninterspiration\nintersporal\nintersprinkle\nintersqueeze\ninterstadial\ninterstage\ninterstaminal\ninterstapedial\ninterstate\ninterstation\ninterstellar\ninterstellary\nintersterile\nintersterility\nintersternal\ninterstice\nintersticed\ninterstimulate\ninterstimulation\ninterstitial\ninterstitially\ninterstitious\ninterstratification\ninterstratify\ninterstreak\ninterstream\ninterstreet\ninterstrial\ninterstriation\ninterstrive\nintersubjective\nintersubsistence\nintersubstitution\nintersuperciliary\nintersusceptation\nintersystem\nintersystematical\nintertalk\nintertangle\nintertanglement\nintertarsal\ninterteam\nintertentacular\nintertergal\ninterterminal\ninterterritorial\nintertessellation\nintertexture\ninterthing\ninterthreaded\ninterthronging\nintertidal\nintertie\nintertill\nintertillage\nintertinge\nintertissued\nintertone\nintertongue\nintertonic\nintertouch\nintertown\nintertrabecular\nintertrace\nintertrade\nintertrading\nintertraffic\nintertragian\nintertransformability\nintertransformable\nintertransmissible\nintertransmission\nintertranspicuous\nintertransversal\nintertransversalis\nintertransversary\nintertransverse\nintertrappean\nintertribal\nintertriginous\nintertriglyph\nintertrigo\nintertrinitarian\nintertrochanteric\nintertropic\nintertropical\nintertropics\nintertrude\nintertuberal\nintertubercular\nintertubular\nintertwin\nintertwine\nintertwinement\nintertwining\nintertwiningly\nintertwist\nintertwistingly\nIntertype\ninterungular\ninterungulate\ninterunion\ninteruniversity\ninterurban\ninterureteric\nintervaginal\ninterval\nintervale\nintervalley\nintervallic\nintervallum\nintervalvular\nintervarietal\nintervary\nintervascular\nintervein\ninterveinal\nintervenant\nintervene\nintervener\nintervenience\ninterveniency\nintervenient\nintervenium\nintervention\ninterventional\ninterventionism\ninterventionist\ninterventive\ninterventor\ninterventral\ninterventralia\ninterventricular\nintervenular\ninterverbal\ninterversion\nintervert\nintervertebra\nintervertebral\nintervertebrally\nintervesicular\ninterview\ninterviewable\ninterviewee\ninterviewer\nintervillous\nintervisibility\nintervisible\nintervisit\nintervisitation\nintervital\nintervocal\nintervocalic\nintervolute\nintervolution\nintervolve\ninterwar\ninterweave\ninterweavement\ninterweaver\ninterweaving\ninterweavingly\ninterwed\ninterweld\ninterwhiff\ninterwhile\ninterwhistle\ninterwind\ninterwish\ninterword\ninterwork\ninterworks\ninterworld\ninterworry\ninterwound\ninterwove\ninterwoven\ninterwovenly\ninterwrap\ninterwreathe\ninterwrought\ninterxylary\ninterzonal\ninterzone\ninterzooecial\ninterzygapophysial\nintestable\nintestacy\nintestate\nintestation\nintestinal\nintestinally\nintestine\nintestineness\nintestiniform\nintestinovesical\nintext\nintextine\nintexture\ninthrall\ninthrallment\ninthrong\ninthronistic\ninthronization\ninthronize\ninthrow\ninthrust\nintil\nintima\nintimacy\nintimal\nintimate\nintimately\nintimateness\nintimater\nintimation\nintimidate\nintimidation\nintimidator\nintimidatory\nintimidity\nintimity\nintinction\nintine\nintitule\ninto\nintoed\nintolerability\nintolerable\nintolerableness\nintolerably\nintolerance\nintolerancy\nintolerant\nintolerantly\nintolerantness\nintolerated\nintolerating\nintoleration\nintonable\nintonate\nintonation\nintonator\nintone\nintonement\nintoner\nintoothed\nintorsion\nintort\nintortillage\nintown\nintoxation\nintoxicable\nintoxicant\nintoxicate\nintoxicated\nintoxicatedly\nintoxicatedness\nintoxicating\nintoxicatingly\nintoxication\nintoxicative\nintoxicator\nintrabiontic\nintrabranchial\nintrabred\nintrabronchial\nintrabuccal\nintracalicular\nintracanalicular\nintracanonical\nintracapsular\nintracardiac\nintracardial\nintracarpal\nintracarpellary\nintracartilaginous\nintracellular\nintracellularly\nintracephalic\nintracerebellar\nintracerebral\nintracerebrally\nintracervical\nintrachordal\nintracistern\nintracity\nintraclitelline\nintracloacal\nintracoastal\nintracoelomic\nintracolic\nintracollegiate\nintracommunication\nintracompany\nintracontinental\nintracorporeal\nintracorpuscular\nintracortical\nintracosmic\nintracosmical\nintracosmically\nintracostal\nintracranial\nintracranially\nintractability\nintractable\nintractableness\nintractably\nintractile\nintracutaneous\nintracystic\nintrada\nintradepartmental\nintradermal\nintradermally\nintradermic\nintradermically\nintradermo\nintradistrict\nintradivisional\nintrados\nintraduodenal\nintradural\nintraecclesiastical\nintraepiphyseal\nintraepithelial\nintrafactory\nintrafascicular\nintrafissural\nintrafistular\nintrafoliaceous\nintraformational\nintrafusal\nintragastric\nintragemmal\nintraglacial\nintraglandular\nintraglobular\nintragroup\nintragroupal\nintragyral\nintrahepatic\nintrahyoid\nintraimperial\nintrait\nintrajugular\nintralamellar\nintralaryngeal\nintralaryngeally\nintraleukocytic\nintraligamentary\nintraligamentous\nintralingual\nintralobar\nintralobular\nintralocular\nintralogical\nintralumbar\nintramammary\nintramarginal\nintramastoid\nintramatrical\nintramatrically\nintramedullary\nintramembranous\nintrameningeal\nintramental\nintrametropolitan\nintramolecular\nintramontane\nintramorainic\nintramundane\nintramural\nintramuralism\nintramuscular\nintramuscularly\nintramyocardial\nintranarial\nintranasal\nintranatal\nintranational\nintraneous\nintraneural\nintranidal\nintranquil\nintranquillity\nintranscalency\nintranscalent\nintransferable\nintransformable\nintransfusible\nintransgressible\nintransient\nintransigency\nintransigent\nintransigentism\nintransigentist\nintransigently\nintransitable\nintransitive\nintransitively\nintransitiveness\nintransitivity\nintranslatable\nintransmissible\nintransmutability\nintransmutable\nintransparency\nintransparent\nintrant\nintranuclear\nintraoctave\nintraocular\nintraoral\nintraorbital\nintraorganization\nintraossal\nintraosseous\nintraosteal\nintraovarian\nintrapair\nintraparenchymatous\nintraparietal\nintraparochial\nintraparty\nintrapelvic\nintrapericardiac\nintrapericardial\nintraperineal\nintraperiosteal\nintraperitoneal\nintraperitoneally\nintrapetiolar\nintraphilosophic\nintrapial\nintraplacental\nintraplant\nintrapleural\nintrapolar\nintrapontine\nintraprostatic\nintraprotoplasmic\nintrapsychic\nintrapsychical\nintrapsychically\nintrapulmonary\nintrapyretic\nintrarachidian\nintrarectal\nintrarelation\nintrarenal\nintraretinal\nintrarhachidian\nintraschool\nintrascrotal\nintrasegmental\nintraselection\nintrasellar\nintraseminal\nintraseptal\nintraserous\nintrashop\nintraspecific\nintraspinal\nintrastate\nintrastromal\nintrasusception\nintrasynovial\nintratarsal\nintratelluric\nintraterritorial\nintratesticular\nintrathecal\nintrathoracic\nintrathyroid\nintratomic\nintratonsillar\nintratrabecular\nintratracheal\nintratracheally\nintratropical\nintratubal\nintratubular\nintratympanic\nintravaginal\nintravalvular\nintravasation\nintravascular\nintravenous\nintravenously\nintraventricular\nintraverbal\nintraversable\nintravertebral\nintravertebrally\nintravesical\nintravital\nintravitelline\nintravitreous\nintraxylary\nintreat\nintrench\nintrenchant\nintrencher\nintrenchment\nintrepid\nintrepidity\nintrepidly\nintrepidness\nintricacy\nintricate\nintricately\nintricateness\nintrication\nintrigant\nintrigue\nintrigueproof\nintriguer\nintriguery\nintriguess\nintriguing\nintriguingly\nintrine\nintrinse\nintrinsic\nintrinsical\nintrinsicality\nintrinsically\nintrinsicalness\nintroactive\nintroceptive\nintroconversion\nintroconvertibility\nintroconvertible\nintrodden\nintroduce\nintroducee\nintroducement\nintroducer\nintroducible\nintroduction\nintroductive\nintroductively\nintroductor\nintroductorily\nintroductoriness\nintroductory\nintroductress\nintroflex\nintroflexion\nintrogression\nintrogressive\nintroinflection\nintroit\nintroitus\nintroject\nintrojection\nintrojective\nintromissibility\nintromissible\nintromission\nintromissive\nintromit\nintromittence\nintromittent\nintromitter\nintropression\nintropulsive\nintroreception\nintrorsal\nintrorse\nintrorsely\nintrosensible\nintrosentient\nintrospect\nintrospectable\nintrospection\nintrospectional\nintrospectionism\nintrospectionist\nintrospective\nintrospectively\nintrospectiveness\nintrospectivism\nintrospectivist\nintrospector\nintrosuction\nintrosuscept\nintrosusception\nintrothoracic\nintrotraction\nintrovenient\nintroverse\nintroversibility\nintroversible\nintroversion\nintroversive\nintroversively\nintrovert\nintroverted\nintrovertive\nintrovision\nintrovolution\nintrudance\nintrude\nintruder\nintruding\nintrudingly\nintrudress\nintruse\nintrusion\nintrusional\nintrusionism\nintrusionist\nintrusive\nintrusively\nintrusiveness\nintrust\nintubate\nintubation\nintubationist\nintubator\nintube\nintue\nintuent\nintuicity\nintuit\nintuitable\nintuition\nintuitional\nintuitionalism\nintuitionalist\nintuitionally\nintuitionism\nintuitionist\nintuitionistic\nintuitionless\nintuitive\nintuitively\nintuitiveness\nintuitivism\nintuitivist\nintumesce\nintumescence\nintumescent\ninturbidate\ninturn\ninturned\ninturning\nintussuscept\nintussusception\nintussusceptive\nintwist\ninula\ninulaceous\ninulase\ninulin\ninuloid\ninumbrate\ninumbration\ninunct\ninunction\ninunctum\ninunctuosity\ninunctuous\ninundable\ninundant\ninundate\ninundation\ninundator\ninundatory\ninunderstandable\ninurbane\ninurbanely\ninurbaneness\ninurbanity\ninure\ninured\ninuredness\ninurement\ninurn\ninusitate\ninusitateness\ninusitation\ninustion\ninutile\ninutilely\ninutility\ninutilized\ninutterable\ninvaccinate\ninvaccination\ninvadable\ninvade\ninvader\ninvaginable\ninvaginate\ninvagination\ninvalescence\ninvalid\ninvalidate\ninvalidation\ninvalidator\ninvalidcy\ninvalidhood\ninvalidish\ninvalidism\ninvalidity\ninvalidly\ninvalidness\ninvalidship\ninvalorous\ninvaluable\ninvaluableness\ninvaluably\ninvalued\nInvar\ninvariability\ninvariable\ninvariableness\ninvariably\ninvariance\ninvariancy\ninvariant\ninvariantive\ninvariantively\ninvariantly\ninvaried\ninvasion\ninvasionist\ninvasive\ninvecked\ninvected\ninvection\ninvective\ninvectively\ninvectiveness\ninvectivist\ninvector\ninveigh\ninveigher\ninveigle\ninveiglement\ninveigler\ninveil\ninvein\ninvendibility\ninvendible\ninvendibleness\ninvenient\ninvent\ninventable\ninventary\ninventer\ninventful\ninventibility\ninventible\ninventibleness\ninvention\ninventional\ninventionless\ninventive\ninventively\ninventiveness\ninventor\ninventoriable\ninventorial\ninventorially\ninventory\ninventress\ninventurous\ninveracious\ninveracity\ninverisimilitude\ninverity\ninverminate\ninvermination\ninvernacular\nInverness\ninversable\ninversatile\ninverse\ninversed\ninversedly\ninversely\ninversion\ninversionist\ninversive\ninvert\ninvertase\ninvertebracy\ninvertebral\nInvertebrata\ninvertebrate\ninvertebrated\ninverted\ninvertedly\ninvertend\ninverter\ninvertibility\ninvertible\ninvertile\ninvertin\ninvertive\ninvertor\ninvest\ninvestable\ninvestible\ninvestigable\ninvestigatable\ninvestigate\ninvestigating\ninvestigatingly\ninvestigation\ninvestigational\ninvestigative\ninvestigator\ninvestigatorial\ninvestigatory\ninvestitive\ninvestitor\ninvestiture\ninvestment\ninvestor\ninveteracy\ninveterate\ninveterately\ninveterateness\ninviability\ninvictive\ninvidious\ninvidiously\ninvidiousness\ninvigilance\ninvigilancy\ninvigilation\ninvigilator\ninvigor\ninvigorant\ninvigorate\ninvigorating\ninvigoratingly\ninvigoratingness\ninvigoration\ninvigorative\ninvigoratively\ninvigorator\ninvinate\ninvination\ninvincibility\ninvincible\ninvincibleness\ninvincibly\ninviolability\ninviolable\ninviolableness\ninviolably\ninviolacy\ninviolate\ninviolated\ninviolately\ninviolateness\ninvirile\ninvirility\ninvirtuate\ninviscate\ninviscation\ninviscid\ninviscidity\ninvised\ninvisibility\ninvisible\ninvisibleness\ninvisibly\ninvitable\ninvital\ninvitant\ninvitation\ninvitational\ninvitatory\ninvite\ninvitee\ninvitement\ninviter\ninvitiate\ninviting\ninvitingly\ninvitingness\ninvitress\ninvitrifiable\ninvivid\ninvocable\ninvocant\ninvocate\ninvocation\ninvocative\ninvocator\ninvocatory\ninvoice\ninvoke\ninvoker\ninvolatile\ninvolatility\ninvolucel\ninvolucellate\ninvolucellated\ninvolucral\ninvolucrate\ninvolucre\ninvolucred\ninvolucriform\ninvolucrum\ninvoluntarily\ninvoluntariness\ninvoluntary\ninvolute\ninvoluted\ninvolutedly\ninvolutely\ninvolution\ninvolutional\ninvolutionary\ninvolutorial\ninvolutory\ninvolve\ninvolved\ninvolvedly\ninvolvedness\ninvolvement\ninvolvent\ninvolver\ninvulnerability\ninvulnerable\ninvulnerableness\ninvulnerably\ninvultuation\ninwale\ninwall\ninwandering\ninward\ninwardly\ninwardness\ninwards\ninweave\ninwedged\ninweed\ninweight\ninwick\ninwind\ninwit\ninwith\ninwood\ninwork\ninworn\ninwound\ninwoven\ninwrap\ninwrapment\ninwreathe\ninwrit\ninwrought\ninyoite\ninyoke\nIo\nio\nIodamoeba\niodate\niodation\niodhydrate\niodhydric\niodhydrin\niodic\niodide\niodiferous\niodinate\niodination\niodine\niodinium\niodinophil\niodinophilic\niodinophilous\niodism\niodite\niodization\niodize\niodizer\niodo\niodobehenate\niodobenzene\niodobromite\niodocasein\niodochloride\niodochromate\niodocresol\niododerma\niodoethane\niodoform\niodogallicin\niodohydrate\niodohydric\niodohydrin\niodol\niodomercurate\niodomercuriate\niodomethane\niodometric\niodometrical\niodometry\niodonium\niodopsin\niodoso\niodosobenzene\niodospongin\niodotannic\niodotherapy\niodothyrin\niodous\niodoxy\niodoxybenzene\niodyrite\niolite\nion\nIone\nIoni\nIonian\nIonic\nionic\nIonicism\nIonicization\nIonicize\nIonidium\nIonism\nIonist\nionium\nionizable\nIonization\nionization\nIonize\nionize\nionizer\nionogen\nionogenic\nionone\nIonornis\nionosphere\nionospheric\nIonoxalis\niontophoresis\nIoskeha\niota\niotacism\niotacismus\niotacist\niotization\niotize\nIowa\nIowan\nIpalnemohuani\nipecac\nipecacuanha\nipecacuanhic\nIphimedia\nIphis\nipid\nIpidae\nipil\nipomea\nIpomoea\nipomoein\nipseand\nipsedixitish\nipsedixitism\nipsedixitist\nipseity\nipsilateral\nIra\niracund\niracundity\niracundulous\nirade\nIran\nIrani\nIranian\nIranic\nIranism\nIranist\nIranize\nIraq\nIraqi\nIraqian\nirascent\nirascibility\nirascible\nirascibleness\nirascibly\nirate\nirately\nire\nireful\nirefully\nirefulness\nIrelander\nireless\nIrena\nirenarch\nIrene\nirene\nirenic\nirenical\nirenically\nirenicism\nirenicist\nirenicon\nirenics\nirenicum\nIresine\nIrfan\nIrgun\nIrgunist\nirian\nIriartea\nIriarteaceae\nIricism\nIricize\nirid\nIridaceae\niridaceous\niridadenosis\niridal\niridalgia\niridate\niridauxesis\niridectome\niridectomize\niridectomy\niridectropium\niridemia\niridencleisis\niridentropium\nirideous\nirideremia\nirides\niridesce\niridescence\niridescency\niridescent\niridescently\niridial\niridian\niridiate\niridic\niridical\niridin\niridine\niridiocyte\niridiophore\niridioplatinum\niridious\niridite\niridium\niridization\niridize\niridoavulsion\niridocapsulitis\niridocele\niridoceratitic\niridochoroiditis\niridocoloboma\niridoconstrictor\niridocyclitis\niridocyte\niridodesis\niridodiagnosis\niridodialysis\niridodonesis\niridokinesia\niridomalacia\niridomotor\nIridomyrmex\niridoncus\niridoparalysis\niridophore\niridoplegia\niridoptosis\niridopupillary\niridorhexis\niridosclerotomy\niridosmine\niridosmium\niridotasis\niridotome\niridotomy\niris\nirisated\nirisation\niriscope\nirised\nIrish\nIrisher\nIrishian\nIrishism\nIrishize\nIrishly\nIrishman\nIrishness\nIrishry\nIrishwoman\nIrishy\nirisin\nirislike\nirisroot\niritic\niritis\nirk\nirksome\nirksomely\nirksomeness\nIrma\nIroha\nirok\niroko\niron\nironback\nironbark\nironbound\nironbush\nironclad\nirone\nironer\nironfisted\nironflower\nironhanded\nironhandedly\nironhandedness\nironhard\nironhead\nironheaded\nironhearted\nironheartedly\nironheartedness\nironical\nironically\nironicalness\nironice\nironish\nironism\nironist\nironize\nironless\nironlike\nironly\nironmaker\nironmaking\nironman\nironmaster\nironmonger\nironmongering\nironmongery\nironness\nironshod\nironshot\nironside\nironsided\nironsides\nironsmith\nironstone\nironware\nironweed\nironwood\nironwork\nironworked\nironworker\nironworking\nironworks\nironwort\nirony\nIroquoian\nIroquois\nIrpex\nirradiance\nirradiancy\nirradiant\nirradiate\nirradiated\nirradiatingly\nirradiation\nirradiative\nirradiator\nirradicable\nirradicate\nirrarefiable\nirrationability\nirrationable\nirrationably\nirrational\nirrationalism\nirrationalist\nirrationalistic\nirrationality\nirrationalize\nirrationally\nirrationalness\nirreality\nirrealizable\nirrebuttable\nirreceptive\nirreceptivity\nirreciprocal\nirreciprocity\nirreclaimability\nirreclaimable\nirreclaimableness\nirreclaimably\nirreclaimed\nirrecognition\nirrecognizability\nirrecognizable\nirrecognizably\nirrecognizant\nirrecollection\nirreconcilability\nirreconcilable\nirreconcilableness\nirreconcilably\nirreconcile\nirreconcilement\nirreconciliability\nirreconciliable\nirreconciliableness\nirreconciliably\nirreconciliation\nirrecordable\nirrecoverable\nirrecoverableness\nirrecoverably\nirrecusable\nirrecusably\nirredeemability\nirredeemable\nirredeemableness\nirredeemably\nirredeemed\nirredenta\nirredential\nIrredentism\nIrredentist\nirredressibility\nirredressible\nirredressibly\nirreducibility\nirreducible\nirreducibleness\nirreducibly\nirreductibility\nirreductible\nirreduction\nirreferable\nirreflection\nirreflective\nirreflectively\nirreflectiveness\nirreflexive\nirreformability\nirreformable\nirrefragability\nirrefragable\nirrefragableness\nirrefragably\nirrefrangibility\nirrefrangible\nirrefrangibleness\nirrefrangibly\nirrefusable\nirrefutability\nirrefutable\nirrefutableness\nirrefutably\nirregardless\nirregeneracy\nirregenerate\nirregeneration\nirregular\nirregularism\nirregularist\nirregularity\nirregularize\nirregularly\nirregularness\nirregulate\nirregulated\nirregulation\nirrelate\nirrelated\nirrelation\nirrelative\nirrelatively\nirrelativeness\nirrelevance\nirrelevancy\nirrelevant\nirrelevantly\nirreliability\nirrelievable\nirreligion\nirreligionism\nirreligionist\nirreligionize\nirreligiosity\nirreligious\nirreligiously\nirreligiousness\nirreluctant\nirremeable\nirremeably\nirremediable\nirremediableness\nirremediably\nirrememberable\nirremissibility\nirremissible\nirremissibleness\nirremissibly\nirremission\nirremissive\nirremovability\nirremovable\nirremovableness\nirremovably\nirremunerable\nirrenderable\nirrenewable\nirrenunciable\nirrepair\nirrepairable\nirreparability\nirreparable\nirreparableness\nirreparably\nirrepassable\nirrepealability\nirrepealable\nirrepealableness\nirrepealably\nirrepentance\nirrepentant\nirrepentantly\nirreplaceable\nirreplaceably\nirrepleviable\nirreplevisable\nirreportable\nirreprehensible\nirreprehensibleness\nirreprehensibly\nirrepresentable\nirrepresentableness\nirrepressibility\nirrepressible\nirrepressibleness\nirrepressibly\nirrepressive\nirreproachability\nirreproachable\nirreproachableness\nirreproachably\nirreproducible\nirreproductive\nirreprovable\nirreprovableness\nirreprovably\nirreptitious\nirrepublican\nirresilient\nirresistance\nirresistibility\nirresistible\nirresistibleness\nirresistibly\nirresoluble\nirresolubleness\nirresolute\nirresolutely\nirresoluteness\nirresolution\nirresolvability\nirresolvable\nirresolvableness\nirresolved\nirresolvedly\nirresonance\nirresonant\nirrespectability\nirrespectable\nirrespectful\nirrespective\nirrespectively\nirrespirable\nirrespondence\nirresponsibility\nirresponsible\nirresponsibleness\nirresponsibly\nirresponsive\nirresponsiveness\nirrestrainable\nirrestrainably\nirrestrictive\nirresultive\nirresuscitable\nirresuscitably\nirretention\nirretentive\nirretentiveness\nirreticence\nirreticent\nirretraceable\nirretraceably\nirretractable\nirretractile\nirretrievability\nirretrievable\nirretrievableness\nirretrievably\nirrevealable\nirrevealably\nirreverence\nirreverend\nirreverendly\nirreverent\nirreverential\nirreverentialism\nirreverentially\nirreverently\nirreversibility\nirreversible\nirreversibleness\nirreversibly\nirrevertible\nirreviewable\nirrevisable\nirrevocability\nirrevocable\nirrevocableness\nirrevocably\nirrevoluble\nirrigable\nirrigably\nirrigant\nirrigate\nirrigation\nirrigational\nirrigationist\nirrigative\nirrigator\nirrigatorial\nirrigatory\nirriguous\nirriguousness\nirrision\nirrisor\nIrrisoridae\nirrisory\nirritability\nirritable\nirritableness\nirritably\nirritament\nirritancy\nirritant\nirritate\nirritatedly\nirritating\nirritatingly\nirritation\nirritative\nirritativeness\nirritator\nirritatory\nIrritila\nirritomotile\nirritomotility\nirrorate\nirrotational\nirrotationally\nirrubrical\nirrupt\nirruptible\nirruption\nirruptive\nirruptively\nIrvin\nIrving\nIrvingesque\nIrvingiana\nIrvingism\nIrvingite\nIrwin\nis\nIsaac\nIsabel\nisabelina\nisabelita\nIsabella\nIsabelle\nIsabelline\nisabnormal\nisaconitine\nisacoustic\nisadelphous\nIsadora\nisagoge\nisagogic\nisagogical\nisagogically\nisagogics\nisagon\nIsaiah\nIsaian\nisallobar\nisallotherm\nisamine\nIsander\nisandrous\nisanemone\nisanomal\nisanomalous\nisanthous\nisapostolic\nIsaria\nisarioid\nisatate\nisatic\nisatide\nisatin\nisatinic\nIsatis\nisatogen\nisatogenic\nIsaurian\nIsawa\nisazoxy\nisba\nIscariot\nIscariotic\nIscariotical\nIscariotism\nischemia\nischemic\nischiac\nischiadic\nischiadicus\nischial\nischialgia\nischialgic\nischiatic\nischidrosis\nischioanal\nischiobulbar\nischiocapsular\nischiocaudal\nischiocavernosus\nischiocavernous\nischiocele\nischiocerite\nischiococcygeal\nischiofemoral\nischiofibular\nischioiliac\nischioneuralgia\nischioperineal\nischiopodite\nischiopubic\nischiopubis\nischiorectal\nischiorrhogic\nischiosacral\nischiotibial\nischiovaginal\nischiovertebral\nischium\nischocholia\nischuretic\nischuria\nischury\nIschyodus\nIsegrim\nisenergic\nisentropic\nisepiptesial\nisepiptesis\niserine\niserite\nisethionate\nisethionic\nIseum\nIsfahan\nIshmael\nIshmaelite\nIshmaelitic\nIshmaelitish\nIshmaelitism\nishpingo\nishshakku\nIsiac\nIsiacal\nIsidae\nisidiiferous\nisidioid\nisidiophorous\nisidiose\nisidium\nisidoid\nIsidore\nIsidorian\nIsidoric\nIsinai\nisindazole\nisinglass\nIsis\nIslam\nIslamic\nIslamism\nIslamist\nIslamistic\nIslamite\nIslamitic\nIslamitish\nIslamization\nIslamize\nisland\nislander\nislandhood\nislandic\nislandish\nislandless\nislandlike\nislandman\nislandress\nislandry\nislandy\nislay\nisle\nisleless\nislesman\nislet\nIsleta\nisleted\nisleward\nislot\nism\nIsmaelism\nIsmaelite\nIsmaelitic\nIsmaelitical\nIsmaelitish\nIsmaili\nIsmailian\nIsmailite\nismal\nismatic\nismatical\nismaticalness\nismdom\nismy\nIsnardia\niso\nisoabnormal\nisoagglutination\nisoagglutinative\nisoagglutinin\nisoagglutinogen\nisoalantolactone\nisoallyl\nisoamarine\nisoamide\nisoamyl\nisoamylamine\nisoamylene\nisoamylethyl\nisoamylidene\nisoantibody\nisoantigen\nisoapiole\nisoasparagine\nisoaurore\nisobar\nisobarbaloin\nisobarbituric\nisobare\nisobaric\nisobarism\nisobarometric\nisobase\nisobath\nisobathic\nisobathytherm\nisobathythermal\nisobathythermic\nisobenzofuran\nisobilateral\nisobilianic\nisobiogenetic\nisoborneol\nisobornyl\nisobront\nisobronton\nisobutane\nisobutyl\nisobutylene\nisobutyraldehyde\nisobutyrate\nisobutyric\nisobutyryl\nisocamphor\nisocamphoric\nisocaproic\nisocarbostyril\nIsocardia\nIsocardiidae\nisocarpic\nisocarpous\nisocellular\nisocephalic\nisocephalism\nisocephalous\nisocephaly\nisocercal\nisocercy\nisochasm\nisochasmic\nisocheim\nisocheimal\nisocheimenal\nisocheimic\nisocheimonal\nisochlor\nisochlorophyll\nisochlorophyllin\nisocholanic\nisocholesterin\nisocholesterol\nisochor\nisochoric\nisochromatic\nisochronal\nisochronally\nisochrone\nisochronic\nisochronical\nisochronism\nisochronize\nisochronon\nisochronous\nisochronously\nisochroous\nisocinchomeronic\nisocinchonine\nisocitric\nisoclasite\nisoclimatic\nisoclinal\nisocline\nisoclinic\nisocodeine\nisocola\nisocolic\nisocolon\nisocoria\nisocorybulbin\nisocorybulbine\nisocorydine\nisocoumarin\nisocracy\nisocrat\nisocratic\nisocreosol\nisocrotonic\nisocrymal\nisocryme\nisocrymic\nisocyanate\nisocyanic\nisocyanide\nisocyanine\nisocyano\nisocyanogen\nisocyanurate\nisocyanuric\nisocyclic\nisocymene\nisocytic\nisodactylism\nisodactylous\nisodiabatic\nisodialuric\nisodiametric\nisodiametrical\nisodiazo\nisodiazotate\nisodimorphic\nisodimorphism\nisodimorphous\nisodomic\nisodomous\nisodomum\nisodont\nisodontous\nisodrome\nisodulcite\nisodurene\nisodynamia\nisodynamic\nisodynamical\nisoelectric\nisoelectrically\nisoelectronic\nisoelemicin\nisoemodin\nisoenergetic\nisoerucic\nIsoetaceae\nIsoetales\nIsoetes\nisoeugenol\nisoflavone\nisoflor\nisogamete\nisogametic\nisogametism\nisogamic\nisogamous\nisogamy\nisogen\nisogenesis\nisogenetic\nisogenic\nisogenotype\nisogenotypic\nisogenous\nisogeny\nisogeotherm\nisogeothermal\nisogeothermic\nisogloss\nisoglossal\nisognathism\nisognathous\nisogon\nisogonal\nisogonality\nisogonally\nisogonic\nisogoniostat\nisogonism\nisograft\nisogram\nisograph\nisographic\nisographical\nisographically\nisography\nisogynous\nisohaline\nisohalsine\nisohel\nisohemopyrrole\nisoheptane\nisohesperidin\nisohexyl\nisohydric\nisohydrocyanic\nisohydrosorbic\nisohyet\nisohyetal\nisoimmune\nisoimmunity\nisoimmunization\nisoimmunize\nisoindazole\nisoindigotin\nisoindole\nisoionone\nisokeraunic\nisokeraunographic\nisokeraunophonic\nIsokontae\nisokontan\nisokurtic\nisolability\nisolable\nisolapachol\nisolate\nisolated\nisolatedly\nisolating\nisolation\nisolationism\nisolationist\nisolative\nIsolde\nisolecithal\nisoleucine\nisolichenin\nisolinolenic\nisologous\nisologue\nisology\nIsoloma\nisolysin\nisolysis\nisomagnetic\nisomaltose\nisomastigate\nisomelamine\nisomenthone\nisomer\nIsomera\nisomere\nisomeric\nisomerical\nisomerically\nisomeride\nisomerism\nisomerization\nisomerize\nisomeromorphism\nisomerous\nisomery\nisometric\nisometrical\nisometrically\nisometrograph\nisometropia\nisometry\nisomorph\nisomorphic\nisomorphism\nisomorphous\nIsomyaria\nisomyarian\nisoneph\nisonephelic\nisonergic\nisonicotinic\nisonitramine\nisonitrile\nisonitroso\nisonomic\nisonomous\nisonomy\nisonuclear\nisonym\nisonymic\nisonymy\nisooleic\nisoosmosis\nisopachous\nisopag\nisoparaffin\nisopectic\nisopelletierin\nisopelletierine\nisopentane\nisoperimeter\nisoperimetric\nisoperimetrical\nisoperimetry\nisopetalous\nisophanal\nisophane\nisophasal\nisophene\nisophenomenal\nisophoria\nisophorone\nisophthalic\nisophthalyl\nisophyllous\nisophylly\nisopicramic\nisopiestic\nisopiestically\nisopilocarpine\nisoplere\nisopleth\nIsopleura\nisopleural\nisopleuran\nisopleurous\nisopod\nIsopoda\nisopodan\nisopodiform\nisopodimorphous\nisopodous\nisopogonous\nisopolite\nisopolitical\nisopolity\nisopoly\nisoprene\nisopropenyl\nisopropyl\nisopropylacetic\nisopropylamine\nisopsephic\nisopsephism\nIsoptera\nisopterous\nisoptic\nisopulegone\nisopurpurin\nisopycnic\nisopyre\nisopyromucic\nisopyrrole\nisoquercitrin\nisoquinine\nisoquinoline\nisorcinol\nisorhamnose\nisorhodeose\nisorithm\nisorosindone\nisorrhythmic\nisorropic\nisosaccharic\nisosaccharin\nisoscele\nisosceles\nisoscope\nisoseismal\nisoseismic\nisoseismical\nisoseist\nisoserine\nisosmotic\nIsospondyli\nisospondylous\nisospore\nisosporic\nisosporous\nisospory\nisostasist\nisostasy\nisostatic\nisostatical\nisostatically\nisostemonous\nisostemony\nisostere\nisosteric\nisosterism\nisostrychnine\nisosuccinic\nisosulphide\nisosulphocyanate\nisosulphocyanic\nisosultam\nisotac\nisoteles\nisotely\nisotheral\nisothere\nisotherm\nisothermal\nisothermally\nisothermic\nisothermical\nisothermobath\nisothermobathic\nisothermous\nisotherombrose\nisothiocyanates\nisothiocyanic\nisothiocyano\nisothujone\nisotimal\nisotome\nisotomous\nisotonia\nisotonic\nisotonicity\nisotony\nisotope\nisotopic\nisotopism\nisotopy\nisotrehalose\nIsotria\nisotrimorphic\nisotrimorphism\nisotrimorphous\nisotron\nisotrope\nisotropic\nisotropism\nisotropous\nisotropy\nisotype\nisotypic\nisotypical\nisovalerate\nisovalerianate\nisovalerianic\nisovaleric\nisovalerone\nisovaline\nisovanillic\nisovoluminal\nisoxanthine\nisoxazine\nisoxazole\nisoxime\nisoxylene\nisoyohimbine\nisozooid\nispaghul\nispravnik\nIsrael\nIsraeli\nIsraelite\nIsraeliteship\nIsraelitic\nIsraelitish\nIsraelitism\nIsraelitize\nissanguila\nIssedoi\nIssedones\nissei\nissite\nissuable\nissuably\nissuance\nissuant\nissue\nissueless\nissuer\nissuing\nist\nisthmi\nIsthmia\nisthmial\nisthmian\nisthmiate\nisthmic\nisthmoid\nisthmus\nistiophorid\nIstiophoridae\nIstiophorus\nistle\nistoke\nIstrian\nIstvaeones\nisuret\nisuretine\nIsuridae\nisuroid\nIsurus\nIswara\nit\nIta\nitabirite\nitacism\nitacist\nitacistic\nitacolumite\nitaconate\nitaconic\nItala\nItali\nItalian\nItalianate\nItalianately\nItalianation\nItalianesque\nItalianish\nItalianism\nItalianist\nItalianity\nItalianization\nItalianize\nItalianizer\nItalianly\nItalic\nItalical\nItalically\nItalican\nItalicanist\nItalici\nItalicism\nitalicization\nitalicize\nitalics\nItaliote\nitalite\nItalomania\nItalon\nItalophile\nitamalate\nitamalic\nitatartaric\nitatartrate\nItaves\nitch\nitchiness\nitching\nitchingly\nitchless\nitchproof\nitchreed\nitchweed\nitchy\nitcze\nItea\nIteaceae\nItelmes\nitem\niteming\nitemization\nitemize\nitemizer\nitemy\nIten\nItenean\niter\niterable\niterance\niterancy\niterant\niterate\niteration\niterative\niteratively\niterativeness\nIthaca\nIthacan\nIthacensian\nithagine\nIthaginis\nither\nIthiel\nithomiid\nIthomiidae\nIthomiinae\nithyphallic\nIthyphallus\nithyphyllous\nitineracy\nitinerancy\nitinerant\nitinerantly\nitinerarian\nItinerarium\nitinerary\nitinerate\nitineration\nitmo\nIto\nItoism\nItoist\nItoland\nItonama\nItonaman\nItonia\nitonidid\nItonididae\nitoubou\nits\nitself\nIturaean\niturite\nItylus\nItys\nItza\nitzebu\niva\nIvan\nivied\nivin\nivoried\nivorine\nivoriness\nivorist\nivory\nivorylike\nivorytype\nivorywood\nivy\nivybells\nivyberry\nivyflower\nivylike\nivyweed\nivywood\nivywort\niwa\niwaiwa\niwis\nIxia\nIxiaceae\nIxiama\nIxil\nIxion\nIxionian\nIxodes\nixodian\nixodic\nixodid\nIxodidae\nIxora\niyo\nIzar\nizar\nizard\nIzcateco\nIzchak\nIzdubar\nizle\nizote\niztle\nIzumi\nizzard\nIzzy\nJ\nj\nJaalin\njab\nJabarite\njabbed\njabber\njabberer\njabbering\njabberingly\njabberment\nJabberwock\njabberwockian\nJabberwocky\njabbing\njabbingly\njabble\njabers\njabia\njabiru\njaborandi\njaborine\njabot\njaboticaba\njabul\njacal\nJacaltec\nJacalteca\njacamar\nJacamaralcyon\njacameropine\nJacamerops\njacami\njacamin\nJacana\njacana\nJacanidae\nJacaranda\njacare\njacate\njacchus\njacent\njacinth\njacinthe\nJack\njack\njackal\njackanapes\njackanapish\njackaroo\njackass\njackassery\njackassification\njackassism\njackassness\njackbird\njackbox\njackboy\njackdaw\njackeen\njacker\njacket\njacketed\njacketing\njacketless\njacketwise\njackety\njackfish\njackhammer\njackknife\njackleg\njackman\njacko\njackpudding\njackpuddinghood\njackrod\njacksaw\njackscrew\njackshaft\njackshay\njacksnipe\nJackson\nJacksonia\nJacksonian\nJacksonite\njackstay\njackstone\njackstraw\njacktan\njackweed\njackwood\nJacky\nJackye\nJacob\njacobaea\njacobaean\nJacobean\nJacobian\nJacobic\nJacobin\nJacobinia\nJacobinic\nJacobinical\nJacobinically\nJacobinism\nJacobinization\nJacobinize\nJacobite\nJacobitely\nJacobitiana\nJacobitic\nJacobitical\nJacobitically\nJacobitish\nJacobitishly\nJacobitism\njacobsite\nJacobson\njacobus\njacoby\njaconet\nJacqueminot\nJacques\njactance\njactancy\njactant\njactation\njactitate\njactitation\njacu\njacuaru\njaculate\njaculation\njaculative\njaculator\njaculatorial\njaculatory\njaculiferous\nJacunda\njacutinga\njadder\njade\njaded\njadedly\njadedness\njadeite\njadery\njadesheen\njadeship\njadestone\njadish\njadishly\njadishness\njady\njaeger\njag\nJaga\nJagannath\nJagannatha\njagat\nJagatai\nJagataic\nJagath\njager\njagged\njaggedly\njaggedness\njagger\njaggery\njaggy\njagir\njagirdar\njagla\njagless\njagong\njagrata\njagua\njaguar\njaguarete\nJahve\nJahvist\nJahvistic\njail\njailage\njailbird\njaildom\njailer\njaileress\njailering\njailership\njailhouse\njailish\njailkeeper\njaillike\njailmate\njailward\njailyard\nJaime\nJain\nJaina\nJainism\nJainist\nJaipuri\njajman\nJake\njake\njakes\njako\nJakob\nJakun\nJalalaean\njalap\njalapa\njalapin\njalkar\njalloped\njalopy\njalouse\njalousie\njalousied\njalpaite\nJam\njam\njama\nJamaica\nJamaican\njaman\njamb\njambalaya\njambeau\njambo\njambolan\njambone\njambool\njamboree\nJambos\njambosa\njambstone\njamdani\nJames\nJamesian\nJamesina\njamesonite\njami\nJamie\njamlike\njammedness\njammer\njammy\nJamnia\njampan\njampani\njamrosade\njamwood\nJan\njanapa\njanapan\nJane\njane\nJanet\njangada\nJanghey\njangkar\njangle\njangler\njangly\nJanice\njaniceps\nJaniculan\nJaniculum\nJaniform\njanissary\njanitor\njanitorial\njanitorship\njanitress\njanitrix\nJanizarian\nJanizary\njank\njanker\njann\njannock\nJanos\nJansenism\nJansenist\nJansenistic\nJansenistical\nJansenize\nJanthina\nJanthinidae\njantu\njanua\nJanuarius\nJanuary\nJanus\nJanuslike\njaob\nJap\njap\njapaconine\njapaconitine\nJapan\njapan\nJapanee\nJapanese\nJapanesque\nJapanesquely\nJapanesquery\nJapanesy\nJapanicize\nJapanism\nJapanization\nJapanize\njapanned\nJapanner\njapanner\njapannery\nJapannish\nJapanolatry\nJapanologist\nJapanology\nJapanophile\nJapanophobe\nJapanophobia\njape\njaper\njapery\nJapetus\nJapheth\nJaphetic\nJaphetide\nJaphetite\njaping\njapingly\njapish\njapishly\njapishness\nJaponic\njaponica\nJaponically\nJaponicize\nJaponism\nJaponize\nJaponizer\nJapygidae\njapygoid\nJapyx\nJaqueline\nJaquesian\njaquima\njar\njara\njaragua\njararaca\njararacussu\njarbird\njarble\njarbot\njardiniere\nJared\njarfly\njarful\njarg\njargon\njargonal\njargoneer\njargonelle\njargoner\njargonesque\njargonic\njargonish\njargonist\njargonistic\njargonium\njargonization\njargonize\njarkman\nJarl\njarl\njarldom\njarless\njarlship\nJarmo\njarnut\njarool\njarosite\njarra\njarrah\njarring\njarringly\njarringness\njarry\njarvey\nJarvis\njasey\njaseyed\nJasione\nJasminaceae\njasmine\njasmined\njasminewood\nJasminum\njasmone\nJason\njaspachate\njaspagate\nJasper\njasper\njasperated\njaspered\njasperize\njasperoid\njaspery\njaspidean\njaspideous\njaspilite\njaspis\njaspoid\njasponyx\njaspopal\njass\njassid\nJassidae\njassoid\nJat\njatamansi\nJateorhiza\njateorhizine\njatha\njati\nJatki\nJatni\njato\nJatropha\njatrophic\njatrorrhizine\nJatulian\njaudie\njauk\njaun\njaunce\njaunder\njaundice\njaundiceroot\njaunt\njauntie\njauntily\njauntiness\njauntingly\njaunty\njaup\nJava\nJavahai\njavali\nJavan\nJavanee\nJavanese\njavelin\njavelina\njaveline\njavelineer\njaver\nJavitero\njaw\njawab\njawbation\njawbone\njawbreaker\njawbreaking\njawbreakingly\njawed\njawfall\njawfallen\njawfish\njawfoot\njawfooted\njawless\njawsmith\njawy\nJay\njay\nJayant\nJayesh\njayhawk\njayhawker\njaypie\njaywalk\njaywalker\njazerant\nJazyges\njazz\njazzer\njazzily\njazziness\njazzy\njealous\njealously\njealousness\njealousy\nJeames\nJean\njean\nJean-Christophe\nJean-Pierre\nJeanette\nJeanie\nJeanne\nJeannette\nJeannie\nJeanpaulia\njeans\nJeany\nJebus\nJebusi\nJebusite\nJebusitic\nJebusitical\nJebusitish\njecoral\njecorin\njecorize\njed\njedcock\njedding\njeddock\njeel\njeep\njeer\njeerer\njeering\njeeringly\njeerproof\njeery\njeewhillijers\njeewhillikens\nJef\nJeff\njeff\njefferisite\nJeffersonia\nJeffersonian\nJeffersonianism\njeffersonite\nJeffery\nJeffie\nJeffrey\nJehovah\nJehovic\nJehovism\nJehovist\nJehovistic\njehu\njehup\njejunal\njejunator\njejune\njejunely\njejuneness\njejunitis\njejunity\njejunoduodenal\njejunoileitis\njejunostomy\njejunotomy\njejunum\njelab\njelerang\njelick\njell\njellica\njellico\njellied\njelliedness\njellification\njellify\njellily\njelloid\njelly\njellydom\njellyfish\njellyleaf\njellylike\nJelske\njelutong\nJem\njemadar\nJemez\nJemima\njemmily\njemminess\nJemmy\njemmy\nJenine\njenkin\njenna\njennerization\njennerize\njennet\njenneting\nJennie\njennier\nJennifer\nJenny\njenny\nJenson\njentacular\njeofail\njeopard\njeoparder\njeopardize\njeopardous\njeopardously\njeopardousness\njeopardy\njequirity\nJerahmeel\nJerahmeelites\nJerald\njerboa\njereed\njeremejevite\njeremiad\nJeremiah\nJeremian\nJeremianic\nJeremias\nJeremy\njerez\njerib\njerk\njerker\njerkily\njerkin\njerkined\njerkiness\njerkingly\njerkish\njerksome\njerkwater\njerky\njerl\njerm\njermonal\nJeroboam\nJerome\nJeromian\nJeronymite\njerque\njerquer\nJerrie\nJerry\njerry\njerryism\nJersey\njersey\nJerseyan\njerseyed\nJerseyite\nJerseyman\njert\nJerusalem\njervia\njervina\njervine\nJesper\nJess\njess\njessakeed\njessamine\njessamy\njessant\nJesse\nJessean\njessed\nJessica\nJessie\njessur\njest\njestbook\njestee\njester\njestful\njesting\njestingly\njestingstock\njestmonger\njestproof\njestwise\njestword\nJesu\nJesuate\nJesuit\nJesuited\nJesuitess\nJesuitic\nJesuitical\nJesuitically\nJesuitish\nJesuitism\nJesuitist\nJesuitize\nJesuitocracy\nJesuitry\nJesus\njet\njetbead\njete\nJethro\nJethronian\njetsam\njettage\njetted\njetter\njettied\njettiness\njettingly\njettison\njetton\njetty\njettyhead\njettywise\njetware\nJew\njewbird\njewbush\nJewdom\njewel\njeweler\njewelhouse\njeweling\njewelless\njewellike\njewelry\njewelsmith\njewelweed\njewely\nJewess\njewfish\nJewhood\nJewish\nJewishly\nJewishness\nJewism\nJewless\nJewlike\nJewling\nJewry\nJewship\nJewstone\nJewy\njezail\nJezebel\nJezebelian\nJezebelish\njezekite\njeziah\nJezreelite\njharal\njheel\njhool\njhow\nJhuria\nJi\nJianyun\njib\njibbah\njibber\njibbings\njibby\njibe\njibhead\njibi\njibman\njiboa\njibstay\njicama\nJicaque\nJicaquean\njicara\nJicarilla\njiff\njiffle\njiffy\njig\njigamaree\njigger\njiggerer\njiggerman\njiggers\njigget\njiggety\njigginess\njiggish\njiggle\njiggly\njiggumbob\njiggy\njiglike\njigman\njihad\njikungu\nJill\njillet\njillflirt\njilt\njiltee\njilter\njiltish\nJim\njimbang\njimberjaw\njimberjawed\njimjam\nJimmy\njimmy\njimp\njimply\njimpness\njimpricute\njimsedge\nJin\njina\njincamas\nJincan\nJinchao\njing\njingal\nJingbai\njingbang\njingle\njingled\njinglejangle\njingler\njinglet\njingling\njinglingly\njingly\njingo\njingodom\njingoish\njingoism\njingoist\njingoistic\njinja\njinjili\njink\njinker\njinket\njinkle\njinks\njinn\njinnestan\njinni\njinniwink\njinniyeh\nJinny\njinny\njinriki\njinrikiman\njinrikisha\njinshang\njinx\njipijapa\njipper\njiqui\njirble\njirga\nJiri\njirkinet\nJisheng\nJitendra\njiti\njitneur\njitneuse\njitney\njitneyman\njitro\njitter\njitterbug\njitters\njittery\njiva\nJivaran\nJivaro\nJivaroan\njive\njixie\nJo\njo\nJoachim\nJoachimite\nJoan\nJoanna\nJoanne\nJoannite\njoaquinite\nJob\njob\njobade\njobarbe\njobation\njobber\njobbernowl\njobbernowlism\njobbery\njobbet\njobbing\njobbish\njobble\njobholder\njobless\njoblessness\njobman\njobmaster\njobmistress\njobmonger\njobo\njobsmith\nJocasta\nJocelin\nJoceline\nJocelyn\njoch\nJochen\nJock\njock\njocker\njockey\njockeydom\njockeyish\njockeyism\njockeylike\njockeyship\njocko\njockteleg\njocoque\njocose\njocosely\njocoseness\njocoseriosity\njocoserious\njocosity\njocote\njocu\njocular\njocularity\njocularly\njocularness\njoculator\njocum\njocuma\njocund\njocundity\njocundly\njocundness\njodel\njodelr\njodhpurs\nJodo\nJoe\njoe\njoebush\nJoel\njoewood\nJoey\njoey\njog\njogger\njoggle\njoggler\njogglety\njogglework\njoggly\njogtrottism\nJohan\nJohann\nJohanna\nJohannean\nJohannes\njohannes\nJohannine\nJohannisberger\nJohannist\nJohannite\njohannite\nJohn\nJohnadreams\nJohnathan\nJohnian\njohnin\nJohnnie\nJohnny\njohnnycake\njohnnydom\nJohnsmas\nJohnsonese\nJohnsonian\nJohnsoniana\nJohnsonianism\nJohnsonianly\nJohnsonism\njohnstrupite\njoin\njoinable\njoinant\njoinder\njoiner\njoinery\njoining\njoiningly\njoint\njointage\njointed\njointedly\njointedness\njointer\njointing\njointist\njointless\njointly\njointress\njointure\njointureless\njointuress\njointweed\njointworm\njointy\njoist\njoisting\njoistless\njojoba\njoke\njokeless\njokelet\njokeproof\njoker\njokesmith\njokesome\njokesomeness\njokester\njokingly\njokish\njokist\njokul\njoky\njoll\njolleyman\njollier\njollification\njollify\njollily\njolliness\njollity\njollop\njolloped\njolly\njollytail\nJoloano\njolt\njolter\njolterhead\njolterheaded\njolterheadedness\njolthead\njoltiness\njolting\njoltingly\njoltless\njoltproof\njolty\nJon\nJonah\nJonahesque\nJonahism\nJonas\nJonathan\nJonathanization\nJones\nJonesian\nJong\njonglery\njongleur\nJoni\njonque\njonquil\njonquille\nJonsonian\nJonval\njonvalization\njonvalize\njookerie\njoola\njoom\nJoon\nJophiel\nJordan\njordan\nJordanian\njordanite\njoree\nJorge\nJorist\njorum\nJos\nJose\njosefite\njoseite\nJoseph\nJosepha\nJosephine\nJosephinism\njosephinite\nJosephism\nJosephite\nJosh\njosh\njosher\njoshi\nJoshua\nJosiah\njosie\nJosip\njoskin\njoss\njossakeed\njosser\njostle\njostlement\njostler\njot\njota\njotation\njotisi\nJotnian\njotter\njotting\njotty\njoubarb\nJoubert\njoug\njough\njouk\njoukerypawkery\njoule\njoulean\njoulemeter\njounce\njournal\njournalese\njournalish\njournalism\njournalist\njournalistic\njournalistically\njournalization\njournalize\njournalizer\njourney\njourneycake\njourneyer\njourneying\njourneyman\njourneywoman\njourneywork\njourneyworker\njours\njoust\njouster\nJova\nJove\nJovial\njovial\njovialist\njovialistic\njoviality\njovialize\njovially\njovialness\njovialty\nJovian\nJovianly\nJovicentric\nJovicentrical\nJovicentrically\njovilabe\nJoviniamish\nJovinian\nJovinianist\nJovite\njow\njowar\njowari\njowel\njower\njowery\njowl\njowler\njowlish\njowlop\njowly\njowpy\njowser\njowter\njoy\njoyance\njoyancy\njoyant\nJoyce\njoyful\njoyfully\njoyfulness\njoyhop\njoyleaf\njoyless\njoylessly\njoylessness\njoylet\njoyous\njoyously\njoyousness\njoyproof\njoysome\njoyweed\nJozy\nJu\nJuan\nJuang\njuba\njubate\njubbah\njubbe\njube\njuberous\njubilance\njubilancy\njubilant\njubilantly\njubilarian\njubilate\njubilatio\njubilation\njubilatory\njubilean\njubilee\njubilist\njubilization\njubilize\njubilus\njuck\njuckies\nJucuna\njucundity\njud\nJudaeomancy\nJudaeophile\nJudaeophilism\nJudaeophobe\nJudaeophobia\nJudah\nJudahite\nJudaic\nJudaica\nJudaical\nJudaically\nJudaism\nJudaist\nJudaistic\nJudaistically\nJudaization\nJudaize\nJudaizer\nJudas\nJudaslike\njudcock\nJude\nJudean\njudex\nJudge\njudge\njudgeable\njudgelike\njudger\njudgeship\njudgingly\njudgmatic\njudgmatical\njudgmatically\njudgment\nJudica\njudicable\njudicate\njudication\njudicative\njudicator\njudicatorial\njudicatory\njudicature\njudices\njudiciable\njudicial\njudiciality\njudicialize\njudicially\njudicialness\njudiciarily\njudiciary\njudicious\njudiciously\njudiciousness\nJudith\njudo\nJudophobism\nJudy\nJuergen\njufti\njug\nJuga\njugal\njugale\nJugatae\njugate\njugated\njugation\njuger\njugerum\njugful\njugger\nJuggernaut\njuggernaut\nJuggernautish\njuggins\njuggle\njugglement\njuggler\njugglery\njuggling\njugglingly\nJuglandaceae\njuglandaceous\nJuglandales\njuglandin\nJuglans\njuglone\njugular\nJugulares\njugulary\njugulate\njugulum\njugum\nJugurthine\nJuha\njuice\njuiceful\njuiceless\njuicily\njuiciness\njuicy\njujitsu\njuju\njujube\njujuism\njujuist\njuke\njukebox\nJule\njulep\nJules\nJuletta\nJulia\nJulian\nJuliana\nJuliane\nJulianist\nJulianto\njulid\nJulidae\njulidan\nJulie\nJulien\njulienite\njulienne\nJuliet\nJulietta\njulio\nJulius\njuloid\nJuloidea\njuloidian\njulole\njulolidin\njulolidine\njulolin\njuloline\nJulus\nJuly\nJulyflower\nJumada\nJumana\njumart\njumba\njumble\njumblement\njumbler\njumblingly\njumbly\njumbo\njumboesque\njumboism\njumbuck\njumby\njumelle\njument\njumentous\njumfru\njumillite\njumma\njump\njumpable\njumper\njumperism\njumpiness\njumpingly\njumpness\njumprock\njumpseed\njumpsome\njumpy\nJun\nJuncaceae\njuncaceous\nJuncaginaceae\njuncaginaceous\njuncagineous\njunciform\njuncite\nJunco\nJuncoides\njuncous\njunction\njunctional\njunctive\njuncture\nJuncus\nJune\njune\nJuneberry\nJunebud\njunectomy\nJuneflower\nJungermannia\nJungermanniaceae\njungermanniaceous\nJungermanniales\njungle\njungled\njungleside\njunglewards\njunglewood\njungli\njungly\njuniata\njunior\njuniorate\njuniority\njuniorship\njuniper\nJuniperaceae\nJuniperus\nJunius\njunk\njunkboard\nJunker\njunker\nJunkerdom\njunkerdom\njunkerish\nJunkerism\njunkerism\njunket\njunketer\njunketing\njunking\njunkman\nJuno\nJunoesque\nJunonia\nJunonian\njunt\njunta\njunto\njupati\njupe\nJupiter\njupon\nJur\nJura\njural\njurally\njurament\njuramentado\njuramental\njuramentally\njuramentum\nJurane\njurant\njurara\nJurassic\njurat\njuration\njurative\njurator\njuratorial\njuratory\njure\njurel\nJurevis\nJuri\njuridic\njuridical\njuridically\njuring\njurisconsult\njurisdiction\njurisdictional\njurisdictionalism\njurisdictionally\njurisdictive\njurisprudence\njurisprudent\njurisprudential\njurisprudentialist\njurisprudentially\njurist\njuristic\njuristical\njuristically\njuror\njurupaite\njury\njuryless\njuryman\njurywoman\njusquaboutisme\njusquaboutist\njussel\nJussi\nJussiaea\nJussiaean\nJussieuan\njussion\njussive\njussory\njust\njusten\njustice\njusticehood\njusticeless\njusticelike\njusticer\njusticeship\njusticeweed\nJusticia\njusticiability\njusticiable\njusticial\njusticiar\njusticiarship\njusticiary\njusticiaryship\njusticies\njustifiability\njustifiable\njustifiableness\njustifiably\njustification\njustificative\njustificator\njustificatory\njustifier\njustify\njustifying\njustifyingly\nJustin\nJustina\nJustine\nJustinian\nJustinianian\nJustinianist\njustly\njustment\njustness\njusto\nJustus\njut\nJute\njute\nJutic\nJutish\njutka\nJutlander\nJutlandish\njutting\njuttingly\njutty\nJuturna\nJuvavian\njuvenal\nJuvenalian\njuvenate\njuvenescence\njuvenescent\njuvenile\njuvenilely\njuvenileness\njuvenilify\njuvenilism\njuvenility\njuvenilize\nJuventas\njuventude\nJuverna\njuvia\njuvite\njuxtalittoral\njuxtamarine\njuxtapose\njuxtaposit\njuxtaposition\njuxtapositional\njuxtapositive\njuxtapyloric\njuxtaspinal\njuxtaterrestrial\njuxtatropical\nJuyas\nJuza\nJwahar\nJynginae\njyngine\nJynx\njynx\nK\nk\nka\nKababish\nKabaka\nkabaragoya\nKabard\nKabardian\nkabaya\nKabbeljaws\nkabel\nkaberu\nkabiet\nKabirpanthi\nKabistan\nKabonga\nkabuki\nKabuli\nKabyle\nKachari\nKachin\nkachin\nKadaga\nKadarite\nkadaya\nKadayan\nKaddish\nkadein\nkadikane\nkadischi\nKadmi\nkados\nKadu\nkaempferol\nKaf\nKafa\nkaferita\nKaffir\nkaffir\nkaffiyeh\nKaffraria\nKaffrarian\nKafir\nkafir\nKafiri\nkafirin\nkafiz\nKafka\nKafkaesque\nkafta\nkago\nkagu\nkaha\nkahar\nkahau\nkahikatea\nkahili\nkahu\nkahuna\nkai\nKaibab\nKaibartha\nkaid\nkaik\nkaikara\nkaikawaka\nkail\nkailyard\nkailyarder\nkailyardism\nKaimo\nKainah\nkainga\nkainite\nkainsi\nkainyn\nkairine\nkairoline\nkaiser\nkaiserdom\nkaiserism\nkaisership\nkaitaka\nKaithi\nkaiwhiria\nkaiwi\nKaj\nKajar\nkajawah\nkajugaru\nkaka\nKakan\nkakapo\nkakar\nkakarali\nkakariki\nKakatoe\nKakatoidae\nkakawahie\nkaki\nkakidrosis\nkakistocracy\nkakkak\nkakke\nkakortokite\nkala\nkaladana\nkalamalo\nkalamansanai\nKalamian\nKalanchoe\nKalandariyah\nKalang\nKalapooian\nkalashnikov\nkalasie\nKaldani\nkale\nkaleidophon\nkaleidophone\nkaleidoscope\nkaleidoscopic\nkaleidoscopical\nkaleidoscopically\nKalekah\nkalema\nKalendae\nkalends\nkalewife\nkaleyard\nkali\nkalian\nKaliana\nkaliborite\nkalidium\nkaliform\nkaligenous\nKalinga\nkalinite\nkaliophilite\nkalipaya\nKalispel\nkalium\nkallah\nkallege\nkallilite\nKallima\nkallitype\nKalmarian\nKalmia\nKalmuck\nkalo\nkalogeros\nkalokagathia\nkalon\nkalong\nkalpis\nkalsomine\nkalsominer\nkalumpang\nkalumpit\nKalwar\nkalymmaukion\nkalymmocyte\nkamachile\nkamacite\nkamahi\nkamala\nkamaloka\nkamansi\nkamao\nKamares\nkamarezite\nkamarupa\nkamarupic\nkamas\nKamasin\nKamass\nkamassi\nKamba\nkambal\nkamboh\nKamchadal\nKamchatkan\nkame\nkameeldoorn\nkameelthorn\nKamel\nkamelaukion\nkamerad\nkamias\nkamichi\nkamik\nkamikaze\nKamiya\nkammalan\nkammererite\nkamperite\nkampong\nkamptomorph\nkan\nkana\nkanae\nkanagi\nKanaka\nkanap\nkanara\nKanarese\nkanari\nkanat\nKanauji\nKanawari\nKanawha\nkanchil\nkande\nKandelia\nkandol\nkaneh\nkanephore\nkanephoros\nKaneshite\nKanesian\nkang\nkanga\nkangani\nkangaroo\nkangarooer\nKangli\nKanji\nKankanai\nkankie\nkannume\nkanoon\nKanred\nkans\nKansa\nKansan\nkantele\nkanteletar\nkanten\nKanthan\nKantian\nKantianism\nKantism\nKantist\nKanuri\nKanwar\nkaoliang\nkaolin\nkaolinate\nkaolinic\nkaolinite\nkaolinization\nkaolinize\nkapa\nkapai\nkapeika\nkapok\nkapp\nkappa\nkappe\nkappland\nkapur\nkaput\nKarabagh\nkaragan\nKaraism\nKaraite\nKaraitism\nkaraka\nKarakatchan\nKarakul\nkarakul\nKaramojo\nkaramu\nkaraoke\nKaratas\nkarate\nKaraya\nkaraya\nkarbi\nkarch\nkareao\nkareeta\nKarel\nkarela\nKarelian\nKaren\nKarharbari\nKari\nkarite\nKarl\nKarling\nKarluk\nkarma\nKarmathian\nkarmic\nkarmouth\nkaro\nkaross\nkarou\nkarree\nkarri\nKarroo\nkarroo\nkarrusel\nkarsha\nKarshuni\nKarst\nkarst\nkarstenite\nkarstic\nkartel\nKarthli\nkartometer\nkartos\nKartvel\nKartvelian\nkarwar\nKarwinskia\nkaryaster\nkaryenchyma\nkaryochrome\nkaryochylema\nkaryogamic\nkaryogamy\nkaryokinesis\nkaryokinetic\nkaryologic\nkaryological\nkaryologically\nkaryology\nkaryolymph\nKaryolysidae\nkaryolysis\nKaryolysus\nkaryolytic\nkaryomere\nkaryomerite\nkaryomicrosome\nkaryomitoic\nkaryomitome\nkaryomiton\nkaryomitosis\nkaryomitotic\nkaryon\nkaryoplasm\nkaryoplasma\nkaryoplasmatic\nkaryoplasmic\nkaryopyknosis\nkaryorrhexis\nkaryoschisis\nkaryosome\nkaryotin\nkaryotype\nkasa\nkasbah\nkasbeke\nkascamiol\nKasha\nKashan\nkasher\nkashga\nkashi\nkashima\nKashmiri\nKashmirian\nKashoubish\nkashruth\nKashube\nKashubian\nKashyapa\nkasida\nKasikumuk\nKaska\nKaskaskia\nkasm\nkasolite\nkassabah\nKassak\nKassite\nkassu\nkastura\nKasubian\nkat\nKatabanian\nkatabasis\nkatabatic\nkatabella\nkatabolic\nkatabolically\nkatabolism\nkatabolite\nkatabolize\nkatabothron\nkatachromasis\nkatacrotic\nkatacrotism\nkatagenesis\nkatagenetic\nkatakana\nkatakinesis\nkatakinetic\nkatakinetomer\nkatakinetomeric\nkatakiribori\nkatalase\nkatalysis\nkatalyst\nkatalytic\nkatalyze\nkatamorphism\nkataphoresis\nkataphoretic\nkataphoric\nkataphrenia\nkataplasia\nkataplectic\nkataplexy\nkatar\nkatastate\nkatastatic\nkatathermometer\nkatatonia\nkatatonic\nkatatype\nkatchung\nkatcina\nKate\nkath\nKatha\nkatha\nkathal\nKatharina\nKatharine\nkatharometer\nkatharsis\nkathartic\nkathemoglobin\nkathenotheism\nKathleen\nkathodic\nKathopanishad\nKathryn\nKathy\nKatie\nKatik\nKatinka\nkatipo\nKatipunan\nKatipuneros\nkatmon\nkatogle\nKatrine\nKatrinka\nkatsup\nKatsuwonidae\nkatuka\nKatukina\nkatun\nkaturai\nKaty\nkatydid\nKauravas\nkauri\nkava\nkavaic\nkavass\nKavi\nKaw\nkawaka\nKawchodinne\nkawika\nKay\nkay\nkayak\nkayaker\nKayan\nKayasth\nKayastha\nkayles\nkayo\nKayvan\nKazak\nkazi\nkazoo\nKazuhiro\nkea\nkeach\nkeacorn\nKeatsian\nkeawe\nkeb\nkebab\nkebbie\nkebbuck\nkechel\nkeck\nkeckle\nkeckling\nkecksy\nkecky\nked\nKedar\nKedarite\nkeddah\nkedge\nkedger\nkedgeree\nkedlock\nKedushshah\nKee\nkeech\nkeek\nkeeker\nkeel\nkeelage\nkeelbill\nkeelblock\nkeelboat\nkeelboatman\nkeeled\nkeeler\nkeelfat\nkeelhale\nkeelhaul\nkeelie\nkeeling\nkeelivine\nkeelless\nkeelman\nkeelrake\nkeelson\nkeen\nkeena\nkeened\nkeener\nkeenly\nkeenness\nkeep\nkeepable\nkeeper\nkeeperess\nkeepering\nkeeperless\nkeepership\nkeeping\nkeepsake\nkeepsaky\nkeepworthy\nkeerogue\nKees\nkeeshond\nkeest\nkeet\nkeeve\nKeewatin\nkef\nkeffel\nkefir\nkefiric\nKefti\nKeftian\nKeftiu\nkeg\nkegler\nkehaya\nkehillah\nkehoeite\nKeid\nkeilhauite\nkeita\nKeith\nkeitloa\nKekchi\nkekotene\nkekuna\nkelchin\nkeld\nKele\nkele\nkelebe\nkelectome\nkeleh\nkelek\nkelep\nKelima\nkelk\nkell\nkella\nkellion\nkellupweed\nKelly\nkelly\nkeloid\nkeloidal\nkelp\nkelper\nkelpfish\nkelpie\nkelpware\nkelpwort\nkelpy\nkelt\nkelter\nKeltoi\nkelty\nKelvin\nkelvin\nkelyphite\nKemal\nKemalism\nKemalist\nkemb\nkemp\nkemperyman\nkempite\nkemple\nkempster\nkempt\nkempy\nKen\nken\nkenaf\nKenai\nkenareh\nkench\nkend\nkendir\nkendyr\nKenelm\nKenipsim\nkenlore\nkenmark\nKenn\nKennebec\nkennebecker\nkennebunker\nKennedya\nkennel\nkennelly\nkennelman\nkenner\nKenneth\nkenning\nkenningwort\nkenno\nkeno\nkenogenesis\nkenogenetic\nkenogenetically\nkenogeny\nkenosis\nkenotic\nkenoticism\nkenoticist\nkenotism\nkenotist\nkenotoxin\nkenotron\nKenseikai\nkensington\nKensitite\nkenspac\nkenspeck\nkenspeckle\nKent\nkent\nkentallenite\nKentia\nKenticism\nKentish\nKentishman\nkentledge\nKenton\nkentrogon\nkentrolite\nKentuckian\nKentucky\nkenyte\nkep\nkepi\nKeplerian\nkept\nKer\nkeracele\nkeralite\nkerana\nkeraphyllocele\nkeraphyllous\nkerasin\nkerasine\nkerat\nkeratalgia\nkeratectasia\nkeratectomy\nKeraterpeton\nkeratin\nkeratinization\nkeratinize\nkeratinoid\nkeratinose\nkeratinous\nkeratitis\nkeratoangioma\nkeratocele\nkeratocentesis\nkeratoconjunctivitis\nkeratoconus\nkeratocricoid\nkeratode\nkeratodermia\nkeratogenic\nkeratogenous\nkeratoglobus\nkeratoglossus\nkeratohelcosis\nkeratohyal\nkeratoid\nKeratoidea\nkeratoiritis\nKeratol\nkeratoleukoma\nkeratolysis\nkeratolytic\nkeratoma\nkeratomalacia\nkeratome\nkeratometer\nkeratometry\nkeratomycosis\nkeratoncus\nkeratonosus\nkeratonyxis\nkeratophyre\nkeratoplastic\nkeratoplasty\nkeratorrhexis\nkeratoscope\nkeratoscopy\nkeratose\nkeratosis\nkeratotome\nkeratotomy\nkeratto\nkeraulophon\nkeraulophone\nKeraunia\nkeraunion\nkeraunograph\nkeraunographic\nkeraunography\nkeraunophone\nkeraunophonic\nkeraunoscopia\nkeraunoscopy\nkerbstone\nkerchief\nkerchiefed\nkerchoo\nkerchug\nkerchunk\nkerectomy\nkerel\nKeres\nKeresan\nKerewa\nkerf\nkerflap\nkerflop\nkerflummox\nKerite\nKermanji\nKermanshah\nkermes\nkermesic\nkermesite\nkermis\nkern\nkernel\nkerneled\nkernelless\nkernelly\nkerner\nkernetty\nkernish\nkernite\nkernos\nkerogen\nkerosene\nkerplunk\nKerri\nKerria\nkerrie\nkerrikerri\nkerril\nkerrite\nKerry\nkerry\nkersantite\nkersey\nkerseymere\nkerslam\nkerslosh\nkersmash\nkerugma\nkerwham\nkerygma\nkerygmatic\nkerykeion\nkerystic\nkerystics\nKeryx\nkesslerman\nkestrel\nket\nketa\nketal\nketapang\nketazine\nketch\nketchcraft\nketchup\nketembilla\nketen\nketene\nketimide\nketimine\nketipate\nketipic\nketo\nketogen\nketogenesis\nketogenic\nketoheptose\nketohexose\nketoketene\nketol\nketole\nketolysis\nketolytic\nketone\nketonemia\nketonic\nketonimid\nketonimide\nketonimin\nketonimine\nketonization\nketonize\nketonuria\nketose\nketoside\nketosis\nketosuccinic\nketoxime\nkette\nketting\nkettle\nkettlecase\nkettledrum\nkettledrummer\nkettleful\nkettlemaker\nkettlemaking\nkettler\nketty\nKetu\nketuba\nketupa\nketyl\nkeup\nKeuper\nkeurboom\nkevalin\nKevan\nkevel\nkevelhead\nKevin\nkevutzah\nKevyn\nKeweenawan\nkeweenawite\nkewpie\nkex\nkexy\nkey\nkeyage\nkeyboard\nkeyed\nkeyhole\nkeyless\nkeylet\nkeylock\nKeynesian\nKeynesianism\nkeynote\nkeynoter\nkeyseater\nkeyserlick\nkeysmith\nkeystone\nkeystoned\nKeystoner\nkeyway\nKha\nkhaddar\nkhadi\nkhagiarite\nkhahoon\nkhaiki\nkhair\nkhaja\nkhajur\nkhakanship\nkhaki\nkhakied\nKhaldian\nkhalifa\nKhalifat\nKhalkha\nkhalsa\nKhami\nkhamsin\nKhamti\nkhan\nkhanate\nkhanda\nkhandait\nkhanjar\nkhanjee\nkhankah\nkhansamah\nkhanum\nkhar\nkharaj\nKharia\nKharijite\nKharoshthi\nkharouba\nkharroubah\nKhartoumer\nkharua\nKharwar\nKhasa\nKhasi\nkhass\nkhat\nkhatib\nkhatri\nKhatti\nKhattish\nKhaya\nKhazar\nKhazarian\nkhediva\nkhedival\nkhedivate\nkhedive\nkhediviah\nkhedivial\nkhediviate\nkhepesh\nKherwari\nKherwarian\nkhet\nKhevzur\nkhidmatgar\nKhila\nkhilat\nkhir\nkhirka\nKhitan\nKhivan\nKhlysti\nKhmer\nKhoja\nkhoja\nkhoka\nKhokani\nKhond\nKhorassan\nkhot\nKhotan\nKhotana\nKhowar\nkhu\nKhuai\nkhubber\nkhula\nkhuskhus\nKhussak\nkhutbah\nkhutuktu\nKhuzi\nkhvat\nKhwarazmian\nkiack\nkiaki\nkialee\nkiang\nKiangan\nkiaugh\nkibber\nkibble\nkibbler\nkibblerman\nkibe\nkibei\nkibitka\nkibitz\nkibitzer\nkiblah\nkibosh\nkiby\nkick\nkickable\nKickapoo\nkickback\nkickee\nkicker\nkicking\nkickish\nkickless\nkickoff\nkickout\nkickseys\nkickshaw\nkickup\nKidder\nkidder\nKidderminster\nkiddier\nkiddish\nkiddush\nkiddushin\nkiddy\nkidhood\nkidlet\nkidling\nkidnap\nkidnapee\nkidnaper\nkidney\nkidneyroot\nkidneywort\nKids\nkidskin\nkidsman\nkiefekil\nKieffer\nkiekie\nkiel\nkier\nKieran\nkieselguhr\nkieserite\nkiestless\nkieye\nKiho\nkikar\nKikatsik\nkikawaeo\nkike\nKiki\nkiki\nKikki\nKikongo\nkiku\nkikuel\nkikumon\nKikuyu\nkil\nkiladja\nkilah\nkilampere\nkilan\nkilbrickenite\nkildee\nkilderkin\nkileh\nkilerg\nkiley\nKilhamite\nkilhig\nkiliare\nkilim\nkill\nkillable\nkilladar\nKillarney\nkillas\nkillcalf\nkillcrop\nkillcu\nkilldeer\nkilleekillee\nkilleen\nkiller\nkillick\nkillifish\nkilling\nkillingly\nkillingness\nkillinite\nkillogie\nkillweed\nkillwort\nkilly\nKilmarnock\nkiln\nkilneye\nkilnhole\nkilnman\nkilnrib\nkilo\nkiloampere\nkilobar\nkilocalorie\nkilocycle\nkilodyne\nkilogauss\nkilogram\nkilojoule\nkiloliter\nkilolumen\nkilometer\nkilometrage\nkilometric\nkilometrical\nkiloparsec\nkilostere\nkiloton\nkilovar\nkilovolt\nkilowatt\nkilp\nkilt\nkilter\nkiltie\nkilting\nKiluba\nKim\nkim\nkimbang\nkimberlin\nkimberlite\nKimberly\nKimbundu\nKimeridgian\nkimigayo\nKimmo\nkimnel\nkimono\nkimonoed\nkin\nkina\nkinaesthesia\nkinaesthesis\nkinah\nkinase\nkinbote\nKinch\nkinch\nkinchin\nkinchinmort\nkincob\nkind\nkindergarten\nkindergartener\nkindergartening\nkindergartner\nKinderhook\nkindheart\nkindhearted\nkindheartedly\nkindheartedness\nkindle\nkindler\nkindlesome\nkindlily\nkindliness\nkindling\nkindly\nkindness\nkindred\nkindredless\nkindredly\nkindredness\nkindredship\nkinematic\nkinematical\nkinematically\nkinematics\nkinematograph\nkinemometer\nkineplasty\nkinepox\nkinesalgia\nkinescope\nkinesiatric\nkinesiatrics\nkinesic\nkinesics\nkinesimeter\nkinesiologic\nkinesiological\nkinesiology\nkinesiometer\nkinesis\nkinesitherapy\nkinesodic\nkinesthesia\nkinesthesis\nkinesthetic\nkinetic\nkinetical\nkinetically\nkinetics\nkinetochore\nkinetogenesis\nkinetogenetic\nkinetogenetically\nkinetogenic\nkinetogram\nkinetograph\nkinetographer\nkinetographic\nkinetography\nkinetomer\nkinetomeric\nkinetonema\nkinetonucleus\nkinetophone\nkinetophonograph\nkinetoplast\nkinetoscope\nkinetoscopic\nKing\nking\nkingbird\nkingbolt\nkingcob\nkingcraft\nkingcup\nkingdom\nkingdomed\nkingdomful\nkingdomless\nkingdomship\nkingfish\nkingfisher\nkinghead\nkinghood\nkinghunter\nkingless\nkinglessness\nkinglet\nkinglihood\nkinglike\nkinglily\nkingliness\nkingling\nkingly\nkingmaker\nkingmaking\nkingpiece\nkingpin\nkingrow\nkingship\nkingsman\nKingu\nkingweed\nkingwood\nKinipetu\nkink\nkinkable\nkinkaider\nkinkajou\nkinkcough\nkinkhab\nkinkhost\nkinkily\nkinkiness\nkinkle\nkinkled\nkinkly\nkinksbush\nkinky\nkinless\nkinnikinnick\nkino\nkinofluous\nkinology\nkinoplasm\nkinoplasmic\nKinorhyncha\nkinospore\nKinosternidae\nKinosternon\nkinotannic\nkinsfolk\nkinship\nkinsman\nkinsmanly\nkinsmanship\nkinspeople\nkinswoman\nkintar\nKintyre\nkioea\nKioko\nkiosk\nkiotome\nKiowa\nKiowan\nKioway\nkip\nkipage\nKipchak\nkipe\nKiplingese\nKiplingism\nkippeen\nkipper\nkipperer\nkippy\nkipsey\nkipskin\nKiranti\nKirghiz\nKirghizean\nkiri\nKirillitsa\nkirimon\nKirk\nkirk\nkirker\nkirkify\nkirking\nkirkinhead\nkirklike\nkirkman\nkirktown\nkirkward\nkirkyard\nKirman\nkirmew\nkirn\nkirombo\nkirsch\nKirsten\nKirsty\nkirtle\nkirtled\nKirundi\nkirve\nkirver\nkischen\nkish\nKishambala\nkishen\nkishon\nkishy\nkiskatom\nKislev\nkismet\nkismetic\nkisra\nkiss\nkissability\nkissable\nkissableness\nkissage\nkissar\nkisser\nkissing\nkissingly\nkissproof\nkisswise\nkissy\nkist\nkistful\nkiswa\nKiswahili\nKit\nkit\nkitab\nkitabis\nKitalpha\nKitamat\nKitan\nkitar\nkitcat\nkitchen\nkitchendom\nkitchener\nkitchenette\nkitchenful\nkitchenless\nkitchenmaid\nkitchenman\nkitchenry\nkitchenward\nkitchenwards\nkitchenware\nkitchenwife\nkitcheny\nkite\nkiteflier\nkiteflying\nkith\nkithe\nkithless\nkitish\nKitkahaxki\nKitkehahki\nkitling\nKitlope\nKittatinny\nkittel\nkitten\nkittendom\nkittenhearted\nkittenhood\nkittenish\nkittenishly\nkittenishness\nkittenless\nkittenship\nkitter\nkittereen\nkitthoge\nkittiwake\nkittle\nkittlepins\nkittles\nkittlish\nkittly\nkittock\nkittul\nKitty\nkitty\nkittysol\nKitunahan\nkiva\nkiver\nkivikivi\nkivu\nKiwai\nKiwanian\nKiwanis\nkiwi\nkiwikiwi\nkiyas\nkiyi\nKizil\nKizilbash\nKjeldahl\nkjeldahlization\nkjeldahlize\nklafter\nklaftern\nklam\nKlamath\nKlan\nKlanism\nKlansman\nKlanswoman\nklaprotholite\nKlaskino\nKlaudia\nKlaus\nklavern\nKlaxon\nklaxon\nKlebsiella\nkleeneboc\nKleinian\nKleistian\nklendusic\nklendusity\nklendusive\nklepht\nklephtic\nklephtism\nkleptic\nkleptistic\nkleptomania\nkleptomaniac\nkleptomanist\nkleptophobia\nklicket\nKlikitat\nKling\nKlingsor\nklip\nklipbok\nklipdachs\nklipdas\nklipfish\nklippe\nklippen\nklipspringer\nklister\nklockmannite\nklom\nKlondike\nKlondiker\nklootchman\nklop\nklops\nklosh\nKluxer\nklystron\nkmet\nknab\nknabble\nknack\nknackebrod\nknacker\nknackery\nknacky\nknag\nknagged\nknaggy\nknap\nknapbottle\nknape\nknappan\nKnapper\nknapper\nknappish\nknappishly\nknapsack\nknapsacked\nknapsacking\nknapweed\nknar\nknark\nknarred\nknarry\nKnautia\nknave\nknavery\nknaveship\nknavess\nknavish\nknavishly\nknavishness\nknawel\nknead\nkneadability\nkneadable\nkneader\nkneading\nkneadingly\nknebelite\nknee\nkneebrush\nkneecap\nkneed\nkneehole\nkneel\nkneeler\nkneelet\nkneeling\nkneelingly\nkneepad\nkneepan\nkneepiece\nkneestone\nKneiffia\nKneippism\nknell\nknelt\nKnesset\nknet\nknew\nknez\nknezi\nkniaz\nkniazi\nknick\nknicker\nKnickerbocker\nknickerbockered\nknickerbockers\nknickered\nknickers\nknickknack\nknickknackatory\nknickknacked\nknickknackery\nknickknacket\nknickknackish\nknickknacky\nknickpoint\nknife\nknifeboard\nknifeful\nknifeless\nknifelike\nknifeman\nknifeproof\nknifer\nknifesmith\nknifeway\nknight\nknightage\nknightess\nknighthead\nknighthood\nKnightia\nknightless\nknightlihood\nknightlike\nknightliness\nknightling\nknightly\nknightship\nknightswort\nKniphofia\nKnisteneaux\nknit\nknitback\nknitch\nknitted\nknitter\nknitting\nknittle\nknitwear\nknitweed\nknitwork\nknived\nknivey\nknob\nknobbed\nknobber\nknobbiness\nknobble\nknobbler\nknobbly\nknobby\nknobkerrie\nknoblike\nknobstick\nknobstone\nknobular\nknobweed\nknobwood\nknock\nknockabout\nknockdown\nknockemdown\nknocker\nknocking\nknockless\nknockoff\nknockout\nknockstone\nknockup\nknoll\nknoller\nknolly\nknop\nknopite\nknopped\nknopper\nknoppy\nknopweed\nknorhaan\nKnorria\nknosp\nknosped\nKnossian\nknot\nknotberry\nknotgrass\nknothole\nknothorn\nknotless\nknotlike\nknotroot\nknotted\nknotter\nknottily\nknottiness\nknotting\nknotty\nknotweed\nknotwork\nknotwort\nknout\nknow\nknowability\nknowable\nknowableness\nknowe\nknower\nknowing\nknowingly\nknowingness\nknowledge\nknowledgeable\nknowledgeableness\nknowledgeably\nknowledged\nknowledgeless\nknowledgement\nknowledging\nknown\nknowperts\nKnoxian\nKnoxville\nknoxvillite\nknub\nknubbly\nknubby\nknublet\nknuckle\nknucklebone\nknuckled\nknuckler\nknuckling\nknuckly\nknuclesome\nKnudsen\nknur\nknurl\nknurled\nknurling\nknurly\nKnut\nknut\nKnute\nknutty\nknyaz\nknyazi\nKo\nko\nkoa\nkoae\nkoala\nkoali\nKoasati\nkob\nkoban\nkobellite\nkobi\nkobird\nkobold\nkobong\nkobu\nKobus\nKoch\nKochab\nKochia\nkochliarion\nkoda\nKodagu\nKodak\nkodak\nkodaker\nkodakist\nkodakry\nKodashim\nkodro\nkodurite\nKoeberlinia\nKoeberliniaceae\nkoeberliniaceous\nkoechlinite\nKoeksotenok\nkoel\nKoellia\nKoelreuteria\nkoenenite\nKoeri\nkoff\nkoft\nkoftgar\nkoftgari\nkoggelmannetje\nKogia\nKohathite\nKoheleth\nkohemp\nKohen\nKohistani\nKohl\nkohl\nKohlan\nkohlrabi\nkohua\nkoi\nKoiari\nKoibal\nkoil\nkoila\nkoilanaglyphic\nkoilon\nkoimesis\nKoine\nkoine\nkoinon\nkoinonia\nKoipato\nKoitapu\nkojang\nKojiki\nkokako\nkokam\nkokan\nkokerboom\nkokil\nkokio\nkoklas\nkoklass\nKoko\nkoko\nkokoon\nKokoona\nkokoromiko\nkokowai\nkokra\nkoksaghyz\nkoku\nkokum\nkokumin\nkokumingun\nKol\nkola\nkolach\nKolarian\nKoldaji\nkolea\nkoleroga\nkolhoz\nKoli\nkolinski\nkolinsky\nKolis\nkolkhos\nkolkhoz\nKolkka\nkollast\nkollaster\nkoller\nkollergang\nkolo\nkolobion\nkolobus\nkolokolo\nkolsun\nkoltunna\nkoltunnor\nKoluschan\nKolush\nKomati\nkomatik\nkombu\nKome\nKomi\nkominuter\nkommetje\nkommos\nkomondor\nkompeni\nKomsomol\nkon\nkona\nkonak\nKonariot\nKonde\nKongo\nKongoese\nKongolese\nkongoni\nkongsbergite\nkongu\nKonia\nKoniaga\nKoniga\nkonimeter\nkoninckite\nkonini\nkoniology\nkoniscope\nkonjak\nKonkani\nKonomihu\nKonrad\nkonstantin\nKonstantinos\nkontakion\nKonyak\nkooka\nkookaburra\nkookeree\nkookery\nkookri\nkoolah\nkooletah\nkooliman\nkoolokamba\nKoolooly\nkoombar\nkoomkie\nKoorg\nkootcha\nKootenay\nkop\nKopagmiut\nkopeck\nkoph\nkopi\nkoppa\nkoppen\nkoppite\nKoprino\nkor\nKora\nkora\nkoradji\nKorah\nKorahite\nKorahitic\nkorait\nkorakan\nKoran\nKorana\nKoranic\nKoranist\nkorari\nKore\nkore\nKorean\nkorec\nkoreci\nKoreish\nKoreishite\nkorero\nKoreshan\nKoreshanity\nkori\nkorimako\nkorin\nKornephorus\nkornerupine\nkornskeppa\nkornskeppur\nkorntonde\nkorntonder\nkorntunna\nkorntunnur\nKoroa\nkoromika\nkoromiko\nkorona\nkorova\nkorrel\nkorrigum\nkorumburra\nkoruna\nKorwa\nKory\nKoryak\nkorymboi\nkorymbos\nkorzec\nkos\nKosalan\nKoschei\nkosher\nKosimo\nkosin\nkosmokrator\nKoso\nkosong\nkosotoxin\nKossaean\nKossean\nKosteletzkya\nkoswite\nKota\nkotal\nKotar\nkoto\nKotoko\nkotschubeite\nkottigite\nkotuku\nkotukutuku\nkotwal\nkotwalee\nkotyle\nkotylos\nkou\nkoulan\nKoungmiut\nkouza\nkovil\nKowagmiut\nkowhai\nkowtow\nkoyan\nkozo\nKpuesi\nKra\nkra\nkraal\nkraft\nKrag\nkragerite\nkrageroite\nkrait\nkraken\nkrakowiak\nkral\nKrama\nkrama\nKrameria\nKrameriaceae\nkrameriaceous\nkran\nkrantzite\nKrapina\nkras\nkrasis\nkratogen\nkratogenic\nKraunhia\nkraurite\nkraurosis\nkraurotic\nkrausen\nkrausite\nkraut\nkreis\nKreistag\nkreistle\nkreittonite\nkrelos\nkremersite\nkremlin\nkrems\nkreng\nkrennerite\nKrepi\nkreplech\nkreutzer\nkriegspiel\nkrieker\nKrigia\nkrimmer\nkrina\nKriophoros\nKris\nKrishna\nKrishnaism\nKrishnaist\nKrishnaite\nKrishnaitic\nKristen\nKristi\nKristian\nKristin\nKristinaux\nkrisuvigite\nkritarchy\nKrithia\nKriton\nkritrima\nkrobyloi\nkrobylos\nkrocket\nkrohnkite\nkrome\nkromeski\nkromogram\nkromskop\nkrona\nkrone\nkronen\nkroner\nKronion\nkronor\nkronur\nKroo\nkroon\nkrosa\nkrouchka\nkroushka\nKru\nKrugerism\nKrugerite\nKruman\nkrummhorn\nkryokonite\nkrypsis\nkryptic\nkrypticism\nkryptocyanine\nkryptol\nkryptomere\nkrypton\nKrzysztof\nKshatriya\nKshatriyahood\nKua\nKuan\nkuan\nKuar\nKuba\nkuba\nKubachi\nKubanka\nkubba\nKubera\nkubuklion\nKuchean\nkuchen\nkudize\nkudos\nKudrun\nkudu\nkudzu\nKuehneola\nkuei\nKufic\nkuge\nkugel\nKuhnia\nKui\nkuichua\nKuki\nkukoline\nkukri\nkuku\nkukui\nKukulcan\nkukupa\nKukuruku\nkula\nkulack\nKulah\nkulah\nkulaite\nkulak\nkulakism\nKulanapan\nkulang\nKuldip\nKuli\nkulimit\nkulkarni\nkullaite\nKullani\nkulm\nkulmet\nKulturkampf\nKulturkreis\nKuman\nkumbi\nkumhar\nkumiss\nkummel\nKumni\nkumquat\nkumrah\nKumyk\nkunai\nKunbi\nKundry\nKuneste\nkung\nkunk\nkunkur\nKunmiut\nkunzite\nKuomintang\nkupfernickel\nkupfferite\nkuphar\nkupper\nKuranko\nkurbash\nkurchicine\nkurchine\nKurd\nKurdish\nKurdistan\nkurgan\nKuri\nKurilian\nKurku\nkurmburra\nKurmi\nKuroshio\nkurrajong\nKurt\nkurtosis\nKuruba\nKurukh\nkuruma\nkurumaya\nKurumba\nkurung\nkurus\nkurvey\nkurveyor\nkusa\nkusam\nKusan\nkusha\nKushshu\nkusimansel\nkuskite\nkuskos\nkuskus\nKuskwogmiut\nKustenau\nkusti\nKusum\nkusum\nkutcha\nKutchin\nKutenai\nkuttab\nkuttar\nkuttaur\nkuvasz\nKuvera\nkvass\nkvint\nkvinter\nKwakiutl\nkwamme\nkwan\nKwannon\nKwapa\nkwarta\nkwarterka\nkwazoku\nkyack\nkyah\nkyar\nkyat\nkyaung\nKybele\nKyklopes\nKyklops\nkyl\nKyle\nkyle\nkylite\nkylix\nKylo\nkymation\nkymatology\nkymbalon\nkymogram\nkymograph\nkymographic\nkynurenic\nkynurine\nkyphoscoliosis\nkyphoscoliotic\nKyphosidae\nkyphosis\nkyphotic\nKyrie\nkyrine\nkyschtymite\nkyte\nKyu\nKyung\nKyurin\nKyurinish\nL\nl\nla\nlaager\nlaang\nlab\nLaban\nlabara\nlabarum\nlabba\nlabber\nlabdacism\nlabdacismus\nlabdanum\nlabefact\nlabefactation\nlabefaction\nlabefy\nlabel\nlabeler\nlabella\nlabellate\nlabeller\nlabelloid\nlabellum\nlabia\nlabial\nlabialism\nlabialismus\nlabiality\nlabialization\nlabialize\nlabially\nLabiatae\nlabiate\nlabiated\nlabidophorous\nLabidura\nLabiduridae\nlabiella\nlabile\nlability\nlabilization\nlabilize\nlabioalveolar\nlabiocervical\nlabiodental\nlabioglossal\nlabioglossolaryngeal\nlabioglossopharyngeal\nlabiograph\nlabioguttural\nlabiolingual\nlabiomancy\nlabiomental\nlabionasal\nlabiopalatal\nlabiopalatalize\nlabiopalatine\nlabiopharyngeal\nlabioplasty\nlabiose\nlabiotenaculum\nlabiovelar\nlabioversion\nlabis\nlabium\nlablab\nlabor\nlaborability\nlaborable\nlaborage\nlaborant\nlaboratorial\nlaboratorian\nlaboratory\nlabordom\nlabored\nlaboredly\nlaboredness\nlaborer\nlaboress\nlaborhood\nlaboring\nlaboringly\nlaborious\nlaboriously\nlaboriousness\nlaborism\nlaborist\nlaborite\nlaborless\nlaborous\nlaborously\nlaborousness\nlaborsaving\nlaborsome\nlaborsomely\nlaborsomeness\nLaboulbenia\nLaboulbeniaceae\nlaboulbeniaceous\nLaboulbeniales\nlabour\nlabra\nLabrador\nLabradorean\nlabradorite\nlabradoritic\nlabral\nlabret\nlabretifery\nLabridae\nlabroid\nLabroidea\nlabrosaurid\nlabrosauroid\nLabrosaurus\nlabrose\nlabrum\nLabrus\nlabrusca\nlabrys\nLaburnum\nlabyrinth\nlabyrinthal\nlabyrinthally\nlabyrinthian\nlabyrinthibranch\nlabyrinthibranchiate\nLabyrinthibranchii\nlabyrinthic\nlabyrinthical\nlabyrinthically\nLabyrinthici\nlabyrinthiform\nlabyrinthine\nlabyrinthitis\nLabyrinthodon\nlabyrinthodont\nLabyrinthodonta\nlabyrinthodontian\nlabyrinthodontid\nlabyrinthodontoid\nLabyrinthula\nLabyrinthulidae\nlac\nlacca\nlaccaic\nlaccainic\nlaccase\nlaccol\nlaccolith\nlaccolithic\nlaccolitic\nlace\nlacebark\nlaced\nLacedaemonian\nlaceflower\nlaceleaf\nlaceless\nlacelike\nlacemaker\nlacemaking\nlaceman\nlacepiece\nlacepod\nlacer\nlacerability\nlacerable\nlacerant\nlacerate\nlacerated\nlacerately\nlaceration\nlacerative\nLacerta\nLacertae\nlacertian\nLacertid\nLacertidae\nlacertiform\nLacertilia\nlacertilian\nlacertiloid\nlacertine\nlacertoid\nlacertose\nlacery\nlacet\nlacewing\nlacewoman\nlacewood\nlacework\nlaceworker\nlaceybark\nlache\nLachenalia\nlaches\nLachesis\nLachnanthes\nLachnosterna\nlachryma\nlachrymae\nlachrymaeform\nlachrymal\nlachrymally\nlachrymalness\nlachrymary\nlachrymation\nlachrymator\nlachrymatory\nlachrymiform\nlachrymist\nlachrymogenic\nlachrymonasal\nlachrymosal\nlachrymose\nlachrymosely\nlachrymosity\nlachrymous\nlachsa\nlacily\nLacinaria\nlaciness\nlacing\nlacinia\nlaciniate\nlaciniated\nlaciniation\nlaciniform\nlaciniola\nlaciniolate\nlaciniose\nlacinula\nlacinulate\nlacinulose\nlacis\nlack\nlackadaisical\nlackadaisicality\nlackadaisically\nlackadaisicalness\nlackadaisy\nlackaday\nlacker\nlackey\nlackeydom\nlackeyed\nlackeyism\nlackeyship\nlackland\nlackluster\nlacklusterness\nlacklustrous\nlacksense\nlackwit\nlackwittedly\nlackwittedness\nlacmoid\nlacmus\nLaconian\nLaconic\nlaconic\nlaconica\nlaconically\nlaconicalness\nlaconicism\nlaconicum\nlaconism\nlaconize\nlaconizer\nLacosomatidae\nlacquer\nlacquerer\nlacquering\nlacquerist\nlacroixite\nlacrosse\nlacrosser\nlacrym\nlactagogue\nlactalbumin\nlactam\nlactamide\nlactant\nlactarene\nlactarious\nlactarium\nLactarius\nlactary\nlactase\nlactate\nlactation\nlactational\nlacteal\nlactean\nlactenin\nlacteous\nlactesce\nlactescence\nlactescency\nlactescent\nlactic\nlacticinia\nlactid\nlactide\nlactiferous\nlactiferousness\nlactific\nlactifical\nlactification\nlactiflorous\nlactifluous\nlactiform\nlactifuge\nlactify\nlactigenic\nlactigenous\nlactigerous\nlactim\nlactimide\nlactinate\nlactivorous\nlacto\nlactobacilli\nLactobacillus\nlactobacillus\nlactobutyrometer\nlactocele\nlactochrome\nlactocitrate\nlactodensimeter\nlactoflavin\nlactoglobulin\nlactoid\nlactol\nlactometer\nlactone\nlactonic\nlactonization\nlactonize\nlactophosphate\nlactoproteid\nlactoprotein\nlactoscope\nlactose\nlactoside\nlactosuria\nlactothermometer\nlactotoxin\nlactovegetarian\nLactuca\nlactucarium\nlactucerin\nlactucin\nlactucol\nlactucon\nlactyl\nlacuna\nlacunae\nlacunal\nlacunar\nlacunaria\nlacunary\nlacune\nlacunose\nlacunosity\nlacunule\nlacunulose\nlacuscular\nlacustral\nlacustrian\nlacustrine\nlacwork\nlacy\nlad\nLadakhi\nladakin\nladanigerous\nladanum\nladder\nladdered\nladdering\nladderlike\nladderway\nladderwise\nladdery\nladdess\nladdie\nladdikie\nladdish\nladdock\nlade\nlademan\nladen\nlader\nladhood\nladies\nladify\nLadik\nLadin\nlading\nLadino\nladkin\nladle\nladleful\nladler\nladlewood\nladrone\nladronism\nladronize\nlady\nladybird\nladybug\nladyclock\nladydom\nladyfinger\nladyfish\nladyfly\nladyfy\nladyhood\nladyish\nladyism\nladykin\nladykind\nladyless\nladylike\nladylikely\nladylikeness\nladyling\nladylintywhite\nladylove\nladyly\nladyship\nLadytide\nLaelia\nlaemodipod\nLaemodipoda\nlaemodipodan\nlaemodipodiform\nlaemodipodous\nlaemoparalysis\nlaemostenosis\nlaeotropic\nlaeotropism\nLaestrygones\nlaet\nlaeti\nlaetic\nLaevigrada\nlaevoduction\nlaevogyrate\nlaevogyre\nlaevogyrous\nlaevolactic\nlaevorotation\nlaevorotatory\nlaevotartaric\nlaevoversion\nlafayette\nLafite\nlag\nlagan\nlagarto\nlagen\nlagena\nLagenaria\nlagend\nlageniform\nlager\nLagerstroemia\nLagetta\nlagetto\nlaggar\nlaggard\nlaggardism\nlaggardly\nlaggardness\nlagged\nlaggen\nlagger\nlaggin\nlagging\nlaglast\nlagna\nlagniappe\nlagomorph\nLagomorpha\nlagomorphic\nlagomorphous\nLagomyidae\nlagonite\nlagoon\nlagoonal\nlagoonside\nlagophthalmos\nlagopode\nlagopodous\nlagopous\nLagopus\nLagorchestes\nlagostoma\nLagostomus\nLagothrix\nLagrangian\nLagthing\nLagting\nLaguncularia\nLagunero\nLagurus\nlagwort\nLahnda\nLahontan\nLahuli\nLai\nlai\nLaibach\nlaic\nlaical\nlaicality\nlaically\nlaich\nlaicism\nlaicity\nlaicization\nlaicize\nlaicizer\nlaid\nlaigh\nlain\nlaine\nlaiose\nlair\nlairage\nlaird\nlairdess\nlairdie\nlairdly\nlairdocracy\nlairdship\nlairless\nlairman\nlairstone\nlairy\nlaitance\nlaity\nLak\nlak\nlakarpite\nlakatoi\nlake\nlakeland\nlakelander\nlakeless\nlakelet\nlakelike\nlakemanship\nlaker\nlakeside\nlakeward\nlakeweed\nlakie\nlaking\nlakish\nlakishness\nlakism\nlakist\nLakota\nLakshmi\nlaky\nlalang\nlall\nLallan\nLalland\nlallation\nlalling\nlalo\nlaloneurosis\nlalopathy\nlalophobia\nlaloplegia\nlam\nlama\nlamaic\nLamaism\nLamaist\nLamaistic\nLamaite\nLamanism\nLamanite\nLamano\nlamantin\nlamany\nLamarckia\nLamarckian\nLamarckianism\nLamarckism\nlamasary\nlamasery\nlamastery\nlamb\nLamba\nlamba\nLambadi\nlambale\nlambaste\nlambda\nlambdacism\nlambdoid\nlambdoidal\nlambeau\nlambency\nlambent\nlambently\nlamber\nLambert\nlambert\nlambhood\nlambie\nlambiness\nlambish\nlambkill\nlambkin\nLamblia\nlambliasis\nlamblike\nlambling\nlambly\nlamboys\nlambrequin\nlambsdown\nlambskin\nlambsuccory\nlamby\nlame\nlamedh\nlameduck\nlamel\nlamella\nlamellar\nLamellaria\nLamellariidae\nlamellarly\nlamellary\nlamellate\nlamellated\nlamellately\nlamellation\nlamellibranch\nLamellibranchia\nLamellibranchiata\nlamellibranchiate\nlamellicorn\nlamellicornate\nLamellicornes\nLamellicornia\nlamellicornous\nlamelliferous\nlamelliform\nlamellirostral\nlamellirostrate\nLamellirostres\nlamelloid\nlamellose\nlamellosity\nlamellule\nlamely\nlameness\nlament\nlamentable\nlamentableness\nlamentably\nlamentation\nlamentational\nlamentatory\nlamented\nlamentedly\nlamenter\nlamentful\nlamenting\nlamentingly\nlamentive\nlamentory\nlamester\nlamestery\nlameter\nlametta\nlamia\nLamiaceae\nlamiaceous\nlamiger\nlamiid\nLamiidae\nLamiides\nLamiinae\nlamin\nlamina\nlaminability\nlaminable\nlaminae\nlaminar\nLaminaria\nLaminariaceae\nlaminariaceous\nLaminariales\nlaminarian\nlaminarin\nlaminarioid\nlaminarite\nlaminary\nlaminate\nlaminated\nlamination\nlaminboard\nlaminectomy\nlaminiferous\nlaminiform\nlaminiplantar\nlaminiplantation\nlaminitis\nlaminose\nlaminous\nlamish\nLamista\nlamiter\nLamium\nLammas\nlammas\nLammastide\nlammer\nlammergeier\nlammock\nlammy\nLamna\nlamnectomy\nlamnid\nLamnidae\nlamnoid\nlamp\nlampad\nlampadary\nlampadedromy\nlampadephore\nlampadephoria\nlampadite\nlampas\nlampatia\nlampblack\nlamper\nlampern\nlampers\nlampflower\nlampfly\nlampful\nlamphole\nlamping\nlampion\nlampist\nlampistry\nlampless\nlamplet\nlamplight\nlamplighted\nlamplighter\nlamplit\nlampmaker\nlampmaking\nlampman\nLampong\nlampoon\nlampooner\nlampoonery\nlampoonist\nlamppost\nlamprey\nLampridae\nlamprophony\nlamprophyre\nlamprophyric\nlamprotype\nLampsilis\nLampsilus\nlampstand\nlampwick\nlampyrid\nLampyridae\nlampyrine\nLampyris\nLamus\nLamut\nlamziekte\nlan\nLana\nlanameter\nLanao\nLanarkia\nlanarkite\nlanas\nlanate\nlanated\nlanaz\nLancaster\nLancasterian\nLancastrian\nLance\nlance\nlanced\nlancegay\nlancelet\nlancelike\nlancely\nlanceman\nlanceolar\nlanceolate\nlanceolated\nlanceolately\nlanceolation\nlancepesade\nlancepod\nlanceproof\nlancer\nlances\nlancet\nlanceted\nlanceteer\nlancewood\nlancha\nlanciers\nlanciferous\nlanciform\nlancinate\nlancination\nland\nlandamman\nlandau\nlandaulet\nlandaulette\nlandblink\nlandbook\nlanddrost\nlanded\nlander\nlandesite\nlandfall\nlandfast\nlandflood\nlandgafol\nlandgravate\nlandgrave\nlandgraveship\nlandgravess\nlandgraviate\nlandgravine\nlandholder\nlandholdership\nlandholding\nlandimere\nlanding\nlandlady\nlandladydom\nlandladyhood\nlandladyish\nlandladyship\nlandless\nlandlessness\nlandlike\nlandline\nlandlock\nlandlocked\nlandlook\nlandlooker\nlandloper\nlandlord\nlandlordism\nlandlordly\nlandlordry\nlandlordship\nlandlouper\nlandlouping\nlandlubber\nlandlubberish\nlandlubberly\nlandlubbing\nlandman\nlandmark\nLandmarker\nlandmil\nlandmonger\nlandocracy\nlandocrat\nLandolphia\nlandolphia\nlandowner\nlandownership\nlandowning\nlandplane\nlandraker\nlandreeve\nlandright\nlandsale\nlandscape\nlandscapist\nlandshard\nlandship\nlandsick\nlandside\nlandskip\nlandslide\nlandslip\nLandsmaal\nlandsman\nlandspout\nlandspringy\nLandsting\nlandstorm\nLandsturm\nLanduman\nlandwaiter\nlandward\nlandwash\nlandways\nLandwehr\nlandwhin\nlandwire\nlandwrack\nlane\nlanete\nlaneway\nlaney\nlangaha\nlangarai\nlangbanite\nlangbeinite\nlangca\nLanghian\nlangi\nlangite\nlanglauf\nlanglaufer\nlangle\nLango\nLangobard\nLangobardic\nlangoon\nlangooty\nlangrage\nlangsat\nLangsdorffia\nlangsettle\nLangshan\nlangspiel\nlangsyne\nlanguage\nlanguaged\nlanguageless\nlangued\nLanguedocian\nlanguescent\nlanguet\nlanguid\nlanguidly\nlanguidness\nlanguish\nlanguisher\nlanguishing\nlanguishingly\nlanguishment\nlanguor\nlanguorous\nlanguorously\nlangur\nlaniariform\nlaniary\nlaniate\nlaniferous\nlanific\nlaniflorous\nlaniform\nlanigerous\nLaniidae\nlaniiform\nLaniinae\nlanioid\nlanista\nLanital\nLanius\nlank\nlanket\nlankily\nlankiness\nlankish\nlankly\nlankness\nlanky\nlanner\nlanneret\nLanny\nlanolin\nlanose\nlanosity\nlansat\nlansdowne\nlanseh\nlansfordite\nlansknecht\nlanson\nlansquenet\nlant\nlantaca\nLantana\nlanterloo\nlantern\nlanternflower\nlanternist\nlanternleaf\nlanternman\nlanthana\nlanthanide\nlanthanite\nLanthanotidae\nLanthanotus\nlanthanum\nlanthopine\nlantum\nlanuginose\nlanuginous\nlanuginousness\nlanugo\nlanum\nLanuvian\nlanx\nlanyard\nLao\nLaodicean\nLaodiceanism\nLaotian\nlap\nlapacho\nlapachol\nlapactic\nLapageria\nlaparectomy\nlaparocele\nlaparocholecystotomy\nlaparocolectomy\nlaparocolostomy\nlaparocolotomy\nlaparocolpohysterotomy\nlaparocolpotomy\nlaparocystectomy\nlaparocystotomy\nlaparoelytrotomy\nlaparoenterostomy\nlaparoenterotomy\nlaparogastroscopy\nlaparogastrotomy\nlaparohepatotomy\nlaparohysterectomy\nlaparohysteropexy\nlaparohysterotomy\nlaparoileotomy\nlaparomyitis\nlaparomyomectomy\nlaparomyomotomy\nlaparonephrectomy\nlaparonephrotomy\nlaparorrhaphy\nlaparosalpingectomy\nlaparosalpingotomy\nlaparoscopy\nlaparosplenectomy\nlaparosplenotomy\nlaparostict\nLaparosticti\nlaparothoracoscopy\nlaparotome\nlaparotomist\nlaparotomize\nlaparotomy\nlaparotrachelotomy\nlapboard\nlapcock\nLapeirousia\nlapel\nlapeler\nlapelled\nlapful\nlapicide\nlapidarian\nlapidarist\nlapidary\nlapidate\nlapidation\nlapidator\nlapideon\nlapideous\nlapidescent\nlapidicolous\nlapidific\nlapidification\nlapidify\nlapidist\nlapidity\nlapidose\nlapilliform\nlapillo\nlapillus\nLapith\nLapithae\nLapithaean\nLaplacian\nLapland\nLaplander\nLaplandian\nLaplandic\nLaplandish\nlapon\nLaportea\nLapp\nLappa\nlappaceous\nlappage\nlapped\nlapper\nlappet\nlappeted\nLappic\nlapping\nLappish\nLapponese\nLapponian\nLappula\nlapsability\nlapsable\nLapsana\nlapsation\nlapse\nlapsed\nlapser\nlapsi\nlapsing\nlapsingly\nlapstone\nlapstreak\nlapstreaked\nlapstreaker\nLaputa\nLaputan\nlaputically\nlapwing\nlapwork\nlaquear\nlaquearian\nlaqueus\nLar\nlar\nLaralia\nLaramide\nLaramie\nlarboard\nlarbolins\nlarbowlines\nlarcener\nlarcenic\nlarcenish\nlarcenist\nlarcenous\nlarcenously\nlarceny\nlarch\nlarchen\nlard\nlardacein\nlardaceous\nlarder\nlarderellite\nlarderer\nlarderful\nlarderlike\nlardiform\nlardite\nLardizabalaceae\nlardizabalaceous\nlardon\nlardworm\nlardy\nlareabell\nLarentiidae\nlarge\nlargebrained\nlargehanded\nlargehearted\nlargeheartedness\nlargely\nlargemouth\nlargemouthed\nlargen\nlargeness\nlargess\nlarghetto\nlargifical\nlargish\nlargition\nlargitional\nlargo\nLari\nlari\nLaria\nlariat\nlarick\nlarid\nLaridae\nlaridine\nlarigo\nlarigot\nlariid\nLariidae\nlarin\nLarinae\nlarine\nlarithmics\nLarix\nlarixin\nlark\nlarker\nlarkiness\nlarking\nlarkingly\nlarkish\nlarkishness\nlarklike\nlarkling\nlarksome\nlarkspur\nlarky\nlarmier\nlarmoyant\nLarnaudian\nlarnax\nlaroid\nlarrigan\nlarrikin\nlarrikinalian\nlarrikiness\nlarrikinism\nlarriman\nlarrup\nLarry\nlarry\nLars\nlarsenite\nLarunda\nLarus\nlarva\nLarvacea\nlarvae\nlarval\nLarvalia\nlarvarium\nlarvate\nlarve\nlarvicidal\nlarvicide\nlarvicolous\nlarviform\nlarvigerous\nlarvikite\nlarviparous\nlarviposit\nlarviposition\nlarvivorous\nlarvule\nlaryngal\nlaryngalgia\nlaryngeal\nlaryngeally\nlaryngean\nlaryngeating\nlaryngectomy\nlaryngemphraxis\nlaryngendoscope\nlarynges\nlaryngic\nlaryngismal\nlaryngismus\nlaryngitic\nlaryngitis\nlaryngocele\nlaryngocentesis\nlaryngofission\nlaryngofissure\nlaryngograph\nlaryngography\nlaryngological\nlaryngologist\nlaryngology\nlaryngometry\nlaryngoparalysis\nlaryngopathy\nlaryngopharyngeal\nlaryngopharyngitis\nlaryngophony\nlaryngophthisis\nlaryngoplasty\nlaryngoplegia\nlaryngorrhagia\nlaryngorrhea\nlaryngoscleroma\nlaryngoscope\nlaryngoscopic\nlaryngoscopical\nlaryngoscopist\nlaryngoscopy\nlaryngospasm\nlaryngostasis\nlaryngostenosis\nlaryngostomy\nlaryngostroboscope\nlaryngotome\nlaryngotomy\nlaryngotracheal\nlaryngotracheitis\nlaryngotracheoscopy\nlaryngotracheotomy\nlaryngotyphoid\nlaryngovestibulitis\nlarynx\nlas\nlasa\nlasarwort\nlascar\nlascivious\nlasciviously\nlasciviousness\nlaser\nLaserpitium\nlaserwort\nlash\nlasher\nlashingly\nlashless\nlashlite\nLasi\nlasianthous\nLasiocampa\nlasiocampid\nLasiocampidae\nLasiocampoidea\nlasiocarpous\nLasius\nlask\nlasket\nLaspeyresia\nlaspring\nlasque\nlass\nlasset\nlassie\nlassiehood\nlassieish\nlassitude\nlasslorn\nlasso\nlassock\nlassoer\nlast\nlastage\nlaster\nlasting\nlastingly\nlastingness\nlastly\nlastness\nlastre\nlastspring\nlasty\nlat\nlata\nlatah\nLatakia\nLatania\nLatax\nlatch\nlatcher\nlatchet\nlatching\nlatchkey\nlatchless\nlatchman\nlatchstring\nlate\nlatebra\nlatebricole\nlatecomer\nlatecoming\nlated\nlateen\nlateener\nlately\nlaten\nlatence\nlatency\nlateness\nlatensification\nlatent\nlatentize\nlatently\nlatentness\nlater\nlatera\nlaterad\nlateral\nlateralis\nlaterality\nlateralization\nlateralize\nlaterally\nLateran\nlatericumbent\nlateriflexion\nlaterifloral\nlateriflorous\nlaterifolious\nLaterigradae\nlaterigrade\nlaterinerved\nlaterite\nlateritic\nlateritious\nlateriversion\nlaterization\nlateroabdominal\nlateroanterior\nlaterocaudal\nlaterocervical\nlaterodeviation\nlaterodorsal\nlateroduction\nlateroflexion\nlateromarginal\nlateronuchal\nlateroposition\nlateroposterior\nlateropulsion\nlaterostigmatal\nlaterostigmatic\nlaterotemporal\nlaterotorsion\nlateroventral\nlateroversion\nlatescence\nlatescent\nlatesome\nlatest\nlatewhile\nlatex\nlatexosis\nlath\nlathe\nlathee\nlatheman\nlathen\nlather\nlatherability\nlatherable\nlathereeve\nlatherer\nlatherin\nlatheron\nlatherwort\nlathery\nlathesman\nlathhouse\nlathing\nLathraea\nlathwork\nlathy\nlathyric\nlathyrism\nLathyrus\nLatian\nlatibulize\nlatices\nlaticiferous\nlaticlave\nlaticostate\nlatidentate\nlatifundian\nlatifundium\nlatigo\nLatimeria\nLatin\nLatinate\nLatiner\nLatinesque\nLatinian\nLatinic\nLatiniform\nLatinism\nlatinism\nLatinist\nLatinistic\nLatinistical\nLatinitaster\nLatinity\nLatinization\nLatinize\nLatinizer\nLatinless\nLatinus\nlation\nlatipennate\nlatiplantar\nlatirostral\nLatirostres\nlatirostrous\nLatirus\nlatisept\nlatiseptal\nlatiseptate\nlatish\nlatisternal\nlatitancy\nlatitant\nlatitat\nlatite\nlatitude\nlatitudinal\nlatitudinally\nlatitudinarian\nlatitudinarianisn\nlatitudinary\nlatitudinous\nlatomy\nLatona\nLatonian\nLatooka\nlatrant\nlatration\nlatreutic\nlatria\nLatrididae\nlatrine\nLatris\nlatro\nlatrobe\nlatrobite\nlatrocinium\nLatrodectus\nlatron\nlatten\nlattener\nlatter\nlatterkin\nlatterly\nlattermath\nlattermost\nlatterness\nlattice\nlatticed\nlatticewise\nlatticework\nlatticing\nlatticinio\nLatuka\nlatus\nLatvian\nlauan\nlaubanite\nlaud\nlaudability\nlaudable\nlaudableness\nlaudably\nlaudanidine\nlaudanin\nlaudanine\nlaudanosine\nlaudanum\nlaudation\nlaudative\nlaudator\nlaudatorily\nlaudatory\nlauder\nLaudian\nLaudianism\nlaudification\nLaudism\nLaudist\nlaudist\nlaugh\nlaughable\nlaughableness\nlaughably\nlaughee\nlaugher\nlaughful\nlaughing\nlaughingly\nlaughingstock\nlaughsome\nlaughter\nlaughterful\nlaughterless\nlaughworthy\nlaughy\nlauia\nlaumonite\nlaumontite\nlaun\nlaunce\nlaunch\nlauncher\nlaunchful\nlaunchways\nlaund\nlaunder\nlaunderability\nlaunderable\nlaunderer\nlaundry\nlaundrymaid\nlaundryman\nlaundryowner\nlaundrywoman\nlaur\nLaura\nlaura\nLauraceae\nlauraceous\nlauraldehyde\nlaurate\nlaurdalite\nlaureate\nlaureated\nlaureateship\nlaureation\nLaurel\nlaurel\nlaureled\nlaurellike\nlaurelship\nlaurelwood\nLaurence\nLaurencia\nLaurent\nLaurentian\nLaurentide\nlaureole\nLaurianne\nlauric\nLaurie\nlaurin\nlaurinoxylon\nlaurionite\nlaurite\nLaurocerasus\nlaurone\nlaurotetanine\nLaurus\nlaurustine\nlaurustinus\nlaurvikite\nlauryl\nlautarite\nlautitious\nlava\nlavable\nlavabo\nlavacre\nlavage\nlavaliere\nlavalike\nLavandula\nlavanga\nlavant\nlavaret\nLavatera\nlavatic\nlavation\nlavational\nlavatorial\nlavatory\nlave\nlaveer\nLavehr\nlavement\nlavender\nlavenite\nlaver\nLaverania\nlaverock\nlaverwort\nlavialite\nlavic\nLavinia\nlavish\nlavisher\nlavishing\nlavishingly\nlavishly\nlavishment\nlavishness\nlavolta\nlavrovite\nlaw\nlawbook\nlawbreaker\nlawbreaking\nlawcraft\nlawful\nlawfully\nlawfulness\nlawgiver\nlawgiving\nlawing\nlawish\nlawk\nlawlants\nlawless\nlawlessly\nlawlessness\nlawlike\nlawmaker\nlawmaking\nlawman\nlawmonger\nlawn\nlawned\nlawner\nlawnlet\nlawnlike\nlawny\nlawproof\nLawrence\nlawrencite\nLawrie\nlawrightman\nLawson\nLawsoneve\nLawsonia\nlawsonite\nlawsuit\nlawsuiting\nlawter\nLawton\nlawyer\nlawyeress\nlawyerism\nlawyerlike\nlawyerling\nlawyerly\nlawyership\nlawyery\nlawzy\nlax\nlaxate\nlaxation\nlaxative\nlaxatively\nlaxativeness\nlaxiflorous\nlaxifoliate\nlaxifolious\nlaxism\nlaxist\nlaxity\nlaxly\nlaxness\nlay\nlayaway\nlayback\nlayboy\nlayer\nlayerage\nlayered\nlayery\nlayette\nLayia\nlaying\nlayland\nlayman\nlaymanship\nlayne\nlayoff\nlayout\nlayover\nlayship\nlaystall\nlaystow\nlaywoman\nLaz\nlazar\nlazaret\nlazaretto\nLazarist\nlazarlike\nlazarly\nlazarole\nLazarus\nlaze\nlazily\nlaziness\nlazule\nlazuli\nlazuline\nlazulite\nlazulitic\nlazurite\nlazy\nlazybird\nlazybones\nlazyboots\nlazyhood\nlazyish\nlazylegs\nlazyship\nlazzarone\nlazzaroni\nLea\nlea\nleach\nleacher\nleachman\nleachy\nLead\nlead\nleadable\nleadableness\nleadage\nleadback\nleaded\nleaden\nleadenhearted\nleadenheartedness\nleadenly\nleadenness\nleadenpated\nleader\nleaderess\nleaderette\nleaderless\nleadership\nleadhillite\nleadin\nleadiness\nleading\nleadingly\nleadless\nleadman\nleadoff\nleadout\nleadproof\nLeads\nleadsman\nleadstone\nleadway\nleadwood\nleadwork\nleadwort\nleady\nleaf\nleafage\nleafboy\nleafcup\nleafdom\nleafed\nleafen\nleafer\nleafery\nleafgirl\nleafit\nleafless\nleaflessness\nleaflet\nleafleteer\nleaflike\nleafstalk\nleafwork\nleafy\nleague\nleaguelong\nleaguer\nLeah\nleak\nleakage\nleakance\nleaker\nleakiness\nleakless\nleakproof\nleaky\nleal\nlealand\nleally\nlealness\nlealty\nleam\nleamer\nlean\nLeander\nleaner\nleaning\nleanish\nleanly\nleanness\nleant\nleap\nleapable\nleaper\nleapfrog\nleapfrogger\nleapfrogging\nleaping\nleapingly\nleapt\nLear\nlear\nLearchus\nlearn\nlearnable\nlearned\nlearnedly\nlearnedness\nlearner\nlearnership\nlearning\nlearnt\nLearoyd\nleasable\nlease\nleasehold\nleaseholder\nleaseholding\nleaseless\nleasemonger\nleaser\nleash\nleashless\nleasing\nleasow\nleast\nleastways\nleastwise\nleat\nleath\nleather\nleatherback\nleatherbark\nleatherboard\nleatherbush\nleathercoat\nleathercraft\nleatherer\nLeatherette\nleatherfish\nleatherflower\nleatherhead\nleatherine\nleatheriness\nleathering\nleatherize\nleatherjacket\nleatherleaf\nleatherlike\nleathermaker\nleathermaking\nleathern\nleatherneck\nLeatheroid\nleatherroot\nleatherside\nLeatherstocking\nleatherware\nleatherwing\nleatherwood\nleatherwork\nleatherworker\nleatherworking\nleathery\nleathwake\nleatman\nleave\nleaved\nleaveless\nleavelooker\nleaven\nleavening\nleavenish\nleavenless\nleavenous\nleaver\nleaverwood\nleaves\nleaving\nleavy\nleawill\nleban\nLebanese\nlebbek\nlebensraum\nLebistes\nlebrancho\nlecama\nlecaniid\nLecaniinae\nlecanine\nLecanium\nlecanomancer\nlecanomancy\nlecanomantic\nLecanora\nLecanoraceae\nlecanoraceous\nlecanorine\nlecanoroid\nlecanoscopic\nlecanoscopy\nlech\nLechea\nlecher\nlecherous\nlecherously\nlecherousness\nlechery\nlechriodont\nLechriodonta\nlechuguilla\nlechwe\nLecidea\nLecideaceae\nlecideaceous\nlecideiform\nlecideine\nlecidioid\nlecithal\nlecithalbumin\nlecithality\nlecithin\nlecithinase\nlecithoblast\nlecithoprotein\nleck\nlecker\nlecontite\nlecotropal\nlectern\nlection\nlectionary\nlectisternium\nlector\nlectorate\nlectorial\nlectorship\nlectotype\nlectress\nlectrice\nlectual\nlecture\nlecturee\nlectureproof\nlecturer\nlectureship\nlecturess\nlecturette\nlecyth\nlecythid\nLecythidaceae\nlecythidaceous\nLecythis\nlecythoid\nlecythus\nled\nLeda\nlede\nleden\nlederite\nledge\nledged\nledgeless\nledger\nledgerdom\nledging\nledgment\nledgy\nLedidae\nledol\nLedum\nLee\nlee\nleeangle\nleeboard\nleech\nleecheater\nleecher\nleechery\nleeches\nleechkin\nleechlike\nleechwort\nleed\nleefang\nleeftail\nleek\nleekish\nleeky\nleep\nleepit\nleer\nleerily\nleeringly\nleerish\nleerness\nleeroway\nLeersia\nleery\nlees\nleet\nleetman\nleewan\nleeward\nleewardly\nleewardmost\nleewardness\nleeway\nleewill\nleft\nleftish\nleftism\nleftist\nleftments\nleftmost\nleftness\nleftover\nleftward\nleftwardly\nleftwards\nleg\nlegacy\nlegal\nlegalese\nlegalism\nlegalist\nlegalistic\nlegalistically\nlegality\nlegalization\nlegalize\nlegally\nlegalness\nlegantine\nlegatary\nlegate\nlegatee\nlegateship\nlegatine\nlegation\nlegationary\nlegative\nlegato\nlegator\nlegatorial\nlegend\nlegenda\nlegendarian\nlegendary\nlegendic\nlegendist\nlegendless\nLegendrian\nlegendry\nleger\nlegerdemain\nlegerdemainist\nlegerity\nleges\nlegged\nlegger\nlegginess\nlegging\nlegginged\nleggy\nleghorn\nlegibility\nlegible\nlegibleness\nlegibly\nlegific\nlegion\nlegionary\nlegioned\nlegioner\nlegionnaire\nlegionry\nlegislate\nlegislation\nlegislational\nlegislativ\nlegislative\nlegislatively\nlegislator\nlegislatorial\nlegislatorially\nlegislatorship\nlegislatress\nlegislature\nlegist\nlegit\nlegitim\nlegitimacy\nlegitimate\nlegitimately\nlegitimateness\nlegitimation\nlegitimatist\nlegitimatize\nlegitimism\nlegitimist\nlegitimistic\nlegitimity\nlegitimization\nlegitimize\nleglen\nlegless\nleglessness\nleglet\nleglike\nlegman\nlegoa\nlegpiece\nlegpull\nlegpuller\nlegpulling\nlegrope\nlegua\nleguan\nLeguatia\nleguleian\nleguleious\nlegume\nlegumelin\nlegumen\nlegumin\nleguminiform\nLeguminosae\nleguminose\nleguminous\nLehi\nlehr\nlehrbachite\nlehrman\nlehua\nlei\nLeibnitzian\nLeibnitzianism\nLeicester\nLeif\nLeigh\nleighton\nLeila\nleimtype\nleiocephalous\nleiocome\nleiodermatous\nleiodermia\nleiomyofibroma\nleiomyoma\nleiomyomatous\nleiomyosarcoma\nleiophyllous\nLeiophyllum\nLeiothrix\nLeiotrichan\nLeiotriches\nLeiotrichi\nLeiotrichidae\nLeiotrichinae\nleiotrichine\nleiotrichous\nleiotrichy\nleiotropic\nLeipoa\nLeishmania\nleishmaniasis\nLeisten\nleister\nleisterer\nleisurable\nleisurably\nleisure\nleisured\nleisureful\nleisureless\nleisureliness\nleisurely\nleisureness\nLeith\nleitmotiv\nLeitneria\nLeitneriaceae\nleitneriaceous\nLeitneriales\nlek\nlekach\nlekane\nlekha\nLelia\nLemaireocereus\nleman\nLemanea\nLemaneaceae\nlemel\nlemma\nlemmata\nlemming\nlemmitis\nlemmoblastic\nlemmocyte\nLemmus\nLemna\nLemnaceae\nlemnaceous\nlemnad\nLemnian\nlemniscate\nlemniscatic\nlemniscus\nlemography\nlemology\nlemon\nlemonade\nLemonias\nLemoniidae\nLemoniinae\nlemonish\nlemonlike\nlemonweed\nlemonwood\nlemony\nLemosi\nLemovices\nlempira\nLemuel\nlemur\nlemures\nLemuria\nLemurian\nlemurian\nlemurid\nLemuridae\nlemuriform\nLemurinae\nlemurine\nlemuroid\nLemuroidea\nLen\nLena\nlenad\nLenaea\nLenaean\nLenaeum\nLenaeus\nLenape\nlenard\nLenca\nLencan\nlench\nlend\nlendable\nlendee\nlender\nLendu\nlene\nlength\nlengthen\nlengthener\nlengther\nlengthful\nlengthily\nlengthiness\nlengthsman\nlengthsome\nlengthsomeness\nlengthways\nlengthwise\nlengthy\nlenience\nleniency\nlenient\nleniently\nlenify\nLeninism\nLeninist\nLeninite\nlenis\nlenitic\nlenitive\nlenitively\nlenitiveness\nlenitude\nlenity\nlennilite\nLennoaceae\nlennoaceous\nlennow\nLenny\nleno\nLenora\nlens\nlensed\nlensless\nlenslike\nLent\nlent\nLenten\nLententide\nlenth\nlenthways\nLentibulariaceae\nlentibulariaceous\nlenticel\nlenticellate\nlenticle\nlenticonus\nlenticula\nlenticular\nlenticulare\nlenticularis\nlenticularly\nlenticulate\nlenticulated\nlenticule\nlenticulostriate\nlenticulothalamic\nlentiform\nlentigerous\nlentiginous\nlentigo\nlentil\nLentilla\nlentisc\nlentiscine\nlentisco\nlentiscus\nlentisk\nlentitude\nlentitudinous\nlento\nlentoid\nlentor\nlentous\nlenvoi\nlenvoy\nLenzites\nLeo\nLeon\nLeonard\nLeonardesque\nLeonato\nleoncito\nLeonese\nleonhardite\nLeonid\nLeonine\nleonine\nleoninely\nleonines\nLeonis\nLeonist\nleonite\nLeonnoys\nLeonora\nLeonotis\nleontiasis\nLeontocebus\nleontocephalous\nLeontodon\nLeontopodium\nLeonurus\nleopard\nleoparde\nleopardess\nleopardine\nleopardite\nleopardwood\nLeopold\nLeopoldinia\nleopoldite\nLeora\nleotard\nlepa\nLepadidae\nlepadoid\nLepanto\nlepargylic\nLepargyraea\nLepas\nLepcha\nleper\nleperdom\nlepered\nlepidene\nlepidine\nLepidium\nlepidoblastic\nLepidodendraceae\nlepidodendraceous\nlepidodendrid\nlepidodendroid\nLepidodendron\nlepidoid\nLepidoidei\nlepidolite\nlepidomelane\nLepidophloios\nlepidophyllous\nLepidophyllum\nlepidophyte\nlepidophytic\nlepidoporphyrin\nlepidopter\nLepidoptera\nlepidopteral\nlepidopteran\nlepidopterid\nlepidopterist\nlepidopterological\nlepidopterologist\nlepidopterology\nlepidopteron\nlepidopterous\nLepidosauria\nlepidosaurian\nLepidosiren\nLepidosirenidae\nlepidosirenoid\nlepidosis\nLepidosperma\nLepidospermae\nLepidosphes\nLepidostei\nlepidosteoid\nLepidosteus\nLepidostrobus\nlepidote\nLepidotes\nlepidotic\nLepidotus\nLepidurus\nLepilemur\nLepiota\nLepisma\nLepismatidae\nLepismidae\nlepismoid\nLepisosteidae\nLepisosteus\nlepocyte\nLepomis\nleporid\nLeporidae\nleporide\nleporiform\nleporine\nLeporis\nLepospondyli\nlepospondylous\nLeposternidae\nLeposternon\nlepothrix\nlepra\nLepralia\nlepralian\nleprechaun\nlepric\nleproid\nleprologic\nleprologist\nleprology\nleproma\nlepromatous\nleprosarium\nleprose\nleprosery\nleprosied\nleprosis\nleprosity\nleprosy\nleprous\nleprously\nleprousness\nLeptamnium\nLeptandra\nleptandrin\nleptid\nLeptidae\nleptiform\nLeptilon\nleptinolite\nLeptinotarsa\nleptite\nLeptocardia\nleptocardian\nLeptocardii\nleptocentric\nleptocephalan\nleptocephali\nleptocephalia\nleptocephalic\nleptocephalid\nLeptocephalidae\nleptocephaloid\nleptocephalous\nLeptocephalus\nleptocephalus\nleptocephaly\nleptocercal\nleptochlorite\nleptochroa\nleptochrous\nleptoclase\nleptodactyl\nLeptodactylidae\nleptodactylous\nLeptodactylus\nleptodermatous\nleptodermous\nLeptodora\nLeptodoridae\nLeptogenesis\nleptokurtic\nLeptolepidae\nLeptolepis\nLeptolinae\nleptomatic\nleptome\nLeptomedusae\nleptomedusan\nleptomeningeal\nleptomeninges\nleptomeningitis\nleptomeninx\nleptometer\nleptomonad\nLeptomonas\nLepton\nlepton\nleptonecrosis\nleptonema\nleptopellic\nLeptophis\nleptophyllous\nleptoprosope\nleptoprosopic\nleptoprosopous\nleptoprosopy\nLeptoptilus\nLeptorchis\nleptorrhin\nleptorrhine\nleptorrhinian\nleptorrhinism\nleptosome\nleptosperm\nLeptospermum\nLeptosphaeria\nLeptospira\nleptospirosis\nleptosporangiate\nLeptostraca\nleptostracan\nleptostracous\nLeptostromataceae\nLeptosyne\nleptotene\nLeptothrix\nLeptotrichia\nLeptotyphlopidae\nLeptotyphlops\nleptus\nleptynite\nLepus\nLer\nLernaea\nLernaeacea\nLernaean\nLernaeidae\nlernaeiform\nlernaeoid\nLernaeoides\nlerot\nlerp\nlerret\nLerwa\nLes\nLesath\nLesbia\nLesbian\nLesbianism\nlesche\nLesgh\nlesion\nlesional\nlesiy\nLeskea\nLeskeaceae\nleskeaceous\nLesleya\nLeslie\nLespedeza\nLesquerella\nless\nlessee\nlesseeship\nlessen\nlessener\nlesser\nlessive\nlessn\nlessness\nlesson\nlessor\nlest\nLester\nlestiwarite\nlestobiosis\nlestobiotic\nLestodon\nLestosaurus\nlestrad\nLestrigon\nLestrigonian\nlet\nletch\nletchy\nletdown\nlete\nlethal\nlethality\nlethalize\nlethally\nlethargic\nlethargical\nlethargically\nlethargicalness\nlethargize\nlethargus\nlethargy\nLethe\nLethean\nlethiferous\nLethocerus\nlethologica\nLetitia\nLeto\nletoff\nLett\nlettable\nletten\nletter\nlettered\nletterer\nletteret\nlettergram\nletterhead\nletterin\nlettering\nletterleaf\nletterless\nletterpress\nletterspace\nletterweight\nletterwood\nLettic\nLettice\nLettish\nlettrin\nlettsomite\nlettuce\nLetty\nletup\nleu\nLeucadendron\nLeucadian\nleucaemia\nleucaemic\nLeucaena\nleucaethiop\nleucaethiopic\nleucaniline\nleucanthous\nleucaugite\nleucaurin\nleucemia\nleucemic\nLeucetta\nleuch\nleuchaemia\nleuchemia\nleuchtenbergite\nLeucichthys\nLeucifer\nLeuciferidae\nleucine\nLeucippus\nleucism\nleucite\nleucitic\nleucitis\nleucitite\nleucitohedron\nleucitoid\nLeuckartia\nLeuckartiidae\nleuco\nleucobasalt\nleucoblast\nleucoblastic\nLeucobryaceae\nLeucobryum\nleucocarpous\nleucochalcite\nleucocholic\nleucocholy\nleucochroic\nleucocidic\nleucocidin\nleucocism\nleucocrate\nleucocratic\nLeucocrinum\nleucocyan\nleucocytal\nleucocyte\nleucocythemia\nleucocythemic\nleucocytic\nleucocytoblast\nleucocytogenesis\nleucocytoid\nleucocytology\nleucocytolysin\nleucocytolysis\nleucocytolytic\nleucocytometer\nleucocytopenia\nleucocytopenic\nleucocytoplania\nleucocytopoiesis\nleucocytosis\nleucocytotherapy\nleucocytotic\nLeucocytozoon\nleucoderma\nleucodermatous\nleucodermic\nleucoencephalitis\nleucogenic\nleucoid\nleucoindigo\nleucoindigotin\nLeucojaceae\nLeucojum\nleucolytic\nleucoma\nleucomaine\nleucomatous\nleucomelanic\nleucomelanous\nleucon\nLeuconostoc\nleucopenia\nleucopenic\nleucophane\nleucophanite\nleucophoenicite\nleucophore\nleucophyllous\nleucophyre\nleucoplakia\nleucoplakial\nleucoplast\nleucoplastid\nleucopoiesis\nleucopoietic\nleucopyrite\nleucoquinizarin\nleucorrhea\nleucorrheal\nleucoryx\nleucosis\nLeucosolenia\nLeucosoleniidae\nleucospermous\nleucosphenite\nleucosphere\nleucospheric\nleucostasis\nLeucosticte\nleucosyenite\nleucotactic\nLeucothea\nLeucothoe\nleucotic\nleucotome\nleucotomy\nleucotoxic\nleucous\nleucoxene\nleucyl\nleud\nleuk\nleukemia\nleukemic\nleukocidic\nleukocidin\nleukosis\nleukotic\nleuma\nLeung\nlev\nLevana\nlevance\nLevant\nlevant\nLevanter\nlevanter\nLevantine\nlevator\nlevee\nlevel\nleveler\nlevelheaded\nlevelheadedly\nlevelheadedness\nleveling\nlevelish\nlevelism\nlevelly\nlevelman\nlevelness\nlever\nleverage\nleverer\nleveret\nleverman\nlevers\nleverwood\nLevi\nleviable\nleviathan\nlevier\nlevigable\nlevigate\nlevigation\nlevigator\nlevin\nlevining\nlevir\nlevirate\nleviratical\nleviration\nLevis\nLevisticum\nlevitant\nlevitate\nlevitation\nlevitational\nlevitative\nlevitator\nLevite\nLevitical\nLeviticalism\nLeviticality\nLevitically\nLeviticalness\nLeviticism\nLeviticus\nLevitism\nlevity\nlevo\nlevoduction\nlevogyrate\nlevogyre\nlevogyrous\nlevolactic\nlevolimonene\nlevorotation\nlevorotatory\nlevotartaric\nlevoversion\nlevulic\nlevulin\nlevulinic\nlevulose\nlevulosuria\nlevy\nlevyist\nlevynite\nLew\nlew\nLewanna\nlewd\nlewdly\nlewdness\nLewie\nLewis\nlewis\nLewisia\nLewisian\nlewisite\nlewisson\nlewth\nLex\nlexia\nlexical\nlexicalic\nlexicality\nlexicographer\nlexicographian\nlexicographic\nlexicographical\nlexicographically\nlexicographist\nlexicography\nlexicologic\nlexicological\nlexicologist\nlexicology\nlexicon\nlexiconist\nlexiconize\nlexigraphic\nlexigraphical\nlexigraphically\nlexigraphy\nlexiphanic\nlexiphanicism\nley\nleyland\nleysing\nLezghian\nlherzite\nlherzolite\nLhota\nli\nliability\nliable\nliableness\nliaison\nliana\nliang\nliar\nliard\nLias\nLiassic\nLiatris\nlibament\nlibaniferous\nlibanophorous\nlibanotophorous\nlibant\nlibate\nlibation\nlibationary\nlibationer\nlibatory\nlibber\nlibbet\nlibbra\nLibby\nlibel\nlibelant\nlibelee\nlibeler\nlibelist\nlibellary\nlibellate\nLibellula\nlibellulid\nLibellulidae\nlibelluloid\nlibelous\nlibelously\nLiber\nliber\nliberal\nLiberalia\nliberalism\nliberalist\nliberalistic\nliberality\nliberalization\nliberalize\nliberalizer\nliberally\nliberalness\nliberate\nliberation\nliberationism\nliberationist\nliberative\nliberator\nliberatory\nliberatress\nLiberia\nLiberian\nliberomotor\nlibertarian\nlibertarianism\nLibertas\nliberticidal\nliberticide\nlibertinage\nlibertine\nlibertinism\nliberty\nlibertyless\nlibethenite\nlibidibi\nlibidinal\nlibidinally\nlibidinosity\nlibidinous\nlibidinously\nlibidinousness\nlibido\nLibitina\nlibken\nLibocedrus\nLibra\nlibra\nlibral\nlibrarian\nlibrarianess\nlibrarianship\nlibrarious\nlibrarius\nlibrary\nlibraryless\nlibrate\nlibration\nlibratory\nlibretti\nlibrettist\nlibretto\nLibrid\nlibriform\nlibroplast\nLibyan\nLibytheidae\nLibytheinae\nLicania\nlicareol\nlicca\nlicensable\nlicense\nlicensed\nlicensee\nlicenseless\nlicenser\nlicensor\nlicensure\nlicentiate\nlicentiateship\nlicentiation\nlicentious\nlicentiously\nlicentiousness\nlich\nlicham\nlichanos\nlichen\nlichenaceous\nlichened\nLichenes\nlicheniasis\nlichenic\nlichenicolous\nlicheniform\nlichenin\nlichenism\nlichenist\nlichenivorous\nlichenization\nlichenize\nlichenlike\nlichenographer\nlichenographic\nlichenographical\nlichenographist\nlichenography\nlichenoid\nlichenologic\nlichenological\nlichenologist\nlichenology\nLichenopora\nLichenoporidae\nlichenose\nlicheny\nlichi\nLichnophora\nLichnophoridae\nLicinian\nlicit\nlicitation\nlicitly\nlicitness\nlick\nlicker\nlickerish\nlickerishly\nlickerishness\nlicking\nlickpenny\nlickspit\nlickspittle\nlickspittling\nlicorice\nlicorn\nlicorne\nlictor\nlictorian\nLicuala\nlid\nLida\nlidded\nlidder\nLide\nlidflower\nlidgate\nlidless\nlie\nliebenerite\nLiebfraumilch\nliebigite\nlied\nlief\nliege\nliegedom\nliegeful\nliegefully\nliegeless\nliegely\nliegeman\nlieger\nlien\nlienal\nlienculus\nlienee\nlienic\nlienitis\nlienocele\nlienogastric\nlienointestinal\nlienomalacia\nlienomedullary\nlienomyelogenous\nlienopancreatic\nlienor\nlienorenal\nlienotoxin\nlienteria\nlienteric\nlientery\nlieproof\nlieprooflier\nlieproofliest\nlier\nlierne\nlierre\nliesh\nliespfund\nlieu\nlieue\nlieutenancy\nlieutenant\nlieutenantry\nlieutenantship\nLievaart\nlieve\nlievrite\nLif\nlife\nlifeblood\nlifeboat\nlifeboatman\nlifeday\nlifedrop\nlifeful\nlifefully\nlifefulness\nlifeguard\nlifehold\nlifeholder\nlifeless\nlifelessly\nlifelessness\nlifelet\nlifelike\nlifelikeness\nlifeline\nlifelong\nlifer\nliferent\nliferenter\nliferentrix\nliferoot\nlifesaver\nlifesaving\nlifesome\nlifesomely\nlifesomeness\nlifespring\nlifetime\nlifeward\nlifework\nlifey\nlifo\nlift\nliftable\nlifter\nlifting\nliftless\nliftman\nligable\nligament\nligamental\nligamentary\nligamentous\nligamentously\nligamentum\nligas\nligate\nligation\nligator\nligature\nligeance\nligger\nlight\nlightable\nlightboat\nlightbrained\nlighten\nlightener\nlightening\nlighter\nlighterage\nlighterful\nlighterman\nlightface\nlightful\nlightfulness\nlighthead\nlightheaded\nlightheadedly\nlightheadedness\nlighthearted\nlightheartedly\nlightheartedness\nlighthouse\nlighthouseman\nlighting\nlightish\nlightkeeper\nlightless\nlightlessness\nlightly\nlightman\nlightmanship\nlightmouthed\nlightness\nlightning\nlightninglike\nlightningproof\nlightproof\nlightroom\nlightscot\nlightship\nlightsman\nlightsome\nlightsomely\nlightsomeness\nlighttight\nlightwards\nlightweight\nlightwood\nlightwort\nlignaloes\nlignatile\nligne\nligneous\nlignescent\nlignicole\nlignicoline\nlignicolous\nligniferous\nlignification\nligniform\nlignify\nlignin\nligninsulphonate\nligniperdous\nlignite\nlignitic\nlignitiferous\nlignitize\nlignivorous\nlignocellulose\nlignoceric\nlignography\nlignone\nlignose\nlignosity\nlignosulphite\nlignosulphonate\nlignum\nligroine\nligula\nligular\nLigularia\nligulate\nligulated\nligule\nLiguliflorae\nliguliflorous\nliguliform\nligulin\nliguloid\nLiguorian\nligure\nLigurian\nligurite\nligurition\nLigusticum\nligustrin\nLigustrum\nLigyda\nLigydidae\nLihyanite\nliin\nlija\nlikability\nlikable\nlikableness\nlike\nlikelihead\nlikelihood\nlikeliness\nlikely\nliken\nlikeness\nliker\nlikesome\nlikeways\nlikewise\nlikin\nliking\nliknon\nLila\nlilac\nlilaceous\nlilacin\nlilacky\nlilacthroat\nlilactide\nLilaeopsis\nlile\nLiliaceae\nliliaceous\nLiliales\nLilian\nlilied\nliliform\nLiliiflorae\nLilith\nLilium\nlill\nlillianite\nlillibullero\nLilliput\nLilliputian\nLilliputianize\nlilt\nliltingly\nliltingness\nlily\nlilyfy\nlilyhanded\nlilylike\nlilywood\nlilywort\nlim\nLima\nLimacea\nlimacel\nlimaceous\nLimacidae\nlimaciform\nLimacina\nlimacine\nlimacinid\nLimacinidae\nlimacoid\nlimacon\nlimaille\nliman\nlimation\nLimawood\nLimax\nlimb\nlimbal\nlimbat\nlimbate\nlimbation\nlimbeck\nlimbed\nlimber\nlimberham\nlimberly\nlimberness\nlimbers\nlimbic\nlimbie\nlimbiferous\nlimbless\nlimbmeal\nlimbo\nlimboinfantum\nlimbous\nLimbu\nLimburger\nlimburgite\nlimbus\nlimby\nlime\nlimeade\nLimean\nlimeberry\nlimebush\nlimehouse\nlimekiln\nlimeless\nlimelight\nlimelighter\nlimelike\nlimeman\nlimen\nlimequat\nlimer\nLimerick\nlimes\nlimestone\nlimetta\nlimettin\nlimewash\nlimewater\nlimewort\nlimey\nLimicolae\nlimicoline\nlimicolous\nLimidae\nliminal\nliminary\nliminess\nliming\nlimit\nlimitable\nlimitableness\nlimital\nlimitarian\nlimitary\nlimitate\nlimitation\nlimitative\nlimitatively\nlimited\nlimitedly\nlimitedness\nlimiter\nlimiting\nlimitive\nlimitless\nlimitlessly\nlimitlessness\nlimitrophe\nlimivorous\nlimma\nlimmer\nlimmock\nlimmu\nlimn\nlimnanth\nLimnanthaceae\nlimnanthaceous\nLimnanthemum\nLimnanthes\nlimner\nlimnery\nlimnetic\nLimnetis\nlimniad\nlimnimeter\nlimnimetric\nlimnite\nlimnobiologic\nlimnobiological\nlimnobiologically\nlimnobiology\nlimnobios\nLimnobium\nLimnocnida\nlimnograph\nlimnologic\nlimnological\nlimnologically\nlimnologist\nlimnology\nlimnometer\nlimnophile\nlimnophilid\nLimnophilidae\nlimnophilous\nlimnoplankton\nLimnorchis\nLimnoria\nLimnoriidae\nlimnorioid\nLimodorum\nlimoid\nlimonene\nlimoniad\nlimonin\nlimonite\nlimonitic\nlimonitization\nlimonium\nLimosa\nlimose\nLimosella\nLimosi\nlimous\nlimousine\nlimp\nlimper\nlimpet\nlimphault\nlimpid\nlimpidity\nlimpidly\nlimpidness\nlimpily\nlimpin\nlimpiness\nlimping\nlimpingly\nlimpingness\nlimpish\nlimpkin\nlimply\nlimpness\nlimpsy\nlimpwort\nlimpy\nlimsy\nlimu\nlimulid\nLimulidae\nlimuloid\nLimuloidea\nLimulus\nlimurite\nlimy\nLin\nlin\nLina\nlina\nlinable\nLinaceae\nlinaceous\nlinaga\nlinage\nlinaloa\nlinalol\nlinalool\nlinamarin\nLinanthus\nLinaria\nlinarite\nlinch\nlinchbolt\nlinchet\nlinchpin\nlinchpinned\nlincloth\nLincoln\nLincolnian\nLincolniana\nLincolnlike\nlinctus\nLinda\nlindackerite\nlindane\nlinden\nLinder\nlinder\nLindera\nLindleyan\nlindo\nlindoite\nLindsay\nLindsey\nline\nlinea\nlineage\nlineaged\nlineal\nlineality\nlineally\nlineament\nlineamental\nlineamentation\nlineameter\nlinear\nlinearifolius\nlinearity\nlinearization\nlinearize\nlinearly\nlineate\nlineated\nlineation\nlineature\nlinecut\nlined\nlineiform\nlineless\nlinelet\nlineman\nlinen\nLinene\nlinenette\nlinenize\nlinenizer\nlinenman\nlineocircular\nlineograph\nlineolate\nlineolated\nliner\nlinesman\nLinet\nlinewalker\nlinework\nling\nlinga\nLingayat\nlingberry\nlingbird\nlinge\nlingel\nlingenberry\nlinger\nlingerer\nlingerie\nlingo\nlingonberry\nLingoum\nlingtow\nlingtowman\nlingua\nlinguacious\nlinguaciousness\nlinguadental\nlinguaeform\nlingual\nlinguale\nlinguality\nlingualize\nlingually\nlinguanasal\nLinguata\nLinguatula\nLinguatulida\nLinguatulina\nlinguatuline\nlinguatuloid\nlinguet\nlinguidental\nlinguiform\nlinguipotence\nlinguist\nlinguister\nlinguistic\nlinguistical\nlinguistically\nlinguistician\nlinguistics\nlinguistry\nlingula\nlingulate\nlingulated\nLingulella\nlingulid\nLingulidae\nlinguliferous\nlinguliform\nlinguloid\nlinguodental\nlinguodistal\nlinguogingival\nlinguopalatal\nlinguopapillitis\nlinguoversion\nlingwort\nlingy\nlinha\nlinhay\nlinie\nliniment\nlinin\nlininess\nlining\nlinitis\nliniya\nlinja\nlinje\nlink\nlinkable\nlinkage\nlinkboy\nlinked\nlinkedness\nlinker\nlinking\nlinkman\nlinks\nlinksmith\nlinkwork\nlinky\nLinley\nlinn\nLinnaea\nLinnaean\nLinnaeanism\nlinnaeite\nLinne\nlinnet\nlino\nlinolate\nlinoleic\nlinolein\nlinolenate\nlinolenic\nlinolenin\nlinoleum\nlinolic\nlinolin\nlinometer\nlinon\nLinopteris\nLinos\nLinotype\nlinotype\nlinotyper\nlinotypist\nlinous\nlinoxin\nlinoxyn\nlinpin\nLinsang\nlinseed\nlinsey\nlinstock\nlint\nlintel\nlinteled\nlinteling\nlinten\nlinter\nlintern\nlintie\nlintless\nlintonite\nlintseed\nlintwhite\nlinty\nLinum\nLinus\nlinwood\nliny\nLinyphia\nLinyphiidae\nliodermia\nliomyofibroma\nliomyoma\nlion\nlioncel\nLionel\nlionel\nlionesque\nlioness\nlionet\nlionheart\nlionhearted\nlionheartedness\nlionhood\nlionism\nlionizable\nlionization\nlionize\nlionizer\nlionlike\nlionly\nlionproof\nlionship\nLiothrix\nLiotrichi\nLiotrichidae\nliotrichine\nlip\nlipa\nlipacidemia\nlipaciduria\nLipan\nLiparian\nliparian\nliparid\nLiparidae\nLiparididae\nLiparis\nliparite\nliparocele\nliparoid\nliparomphalus\nliparous\nlipase\nlipectomy\nlipemia\nLipeurus\nlipide\nlipin\nlipless\nliplet\nliplike\nlipoblast\nlipoblastoma\nLipobranchia\nlipocaic\nlipocardiac\nlipocele\nlipoceratous\nlipocere\nlipochondroma\nlipochrome\nlipochromogen\nlipoclasis\nlipoclastic\nlipocyte\nlipodystrophia\nlipodystrophy\nlipoferous\nlipofibroma\nlipogenesis\nlipogenetic\nlipogenic\nlipogenous\nlipogram\nlipogrammatic\nlipogrammatism\nlipogrammatist\nlipography\nlipohemia\nlipoid\nlipoidal\nlipoidemia\nlipoidic\nlipolysis\nlipolytic\nlipoma\nlipomata\nlipomatosis\nlipomatous\nlipometabolic\nlipometabolism\nlipomorph\nlipomyoma\nlipomyxoma\nlipopexia\nlipophagic\nlipophore\nlipopod\nLipopoda\nlipoprotein\nliposarcoma\nliposis\nliposome\nlipostomy\nlipothymial\nlipothymic\nlipothymy\nlipotrophic\nlipotrophy\nlipotropic\nlipotropy\nlipotype\nLipotyphla\nlipovaccine\nlipoxenous\nlipoxeny\nlipped\nlippen\nlipper\nlipperings\nLippia\nlippiness\nlipping\nlippitude\nlippitudo\nlippy\nlipsanographer\nlipsanotheca\nlipstick\nlipuria\nlipwork\nliquable\nliquamen\nliquate\nliquation\nliquefacient\nliquefaction\nliquefactive\nliquefiable\nliquefier\nliquefy\nliquesce\nliquescence\nliquescency\nliquescent\nliqueur\nliquid\nliquidable\nLiquidambar\nliquidamber\nliquidate\nliquidation\nliquidator\nliquidatorship\nliquidity\nliquidize\nliquidizer\nliquidless\nliquidly\nliquidness\nliquidogenic\nliquidogenous\nliquidy\nliquiform\nliquor\nliquorer\nliquorish\nliquorishly\nliquorishness\nliquorist\nliquorless\nlira\nlirate\nliration\nlire\nlirella\nlirellate\nlirelliform\nlirelline\nlirellous\nLiriodendron\nliripipe\nliroconite\nlis\nLisa\nLisbon\nLise\nlisere\nLisette\nlish\nlisk\nLisle\nlisle\nlisp\nlisper\nlispingly\nlispund\nliss\nLissamphibia\nlissamphibian\nLissencephala\nlissencephalic\nlissencephalous\nLissoflagellata\nlissoflagellate\nlissom\nlissome\nlissomely\nlissomeness\nlissotrichan\nLissotriches\nlissotrichous\nlissotrichy\nList\nlist\nlistable\nlisted\nlistedness\nlistel\nlisten\nlistener\nlistening\nlister\nListera\nlisterellosis\nListeria\nListerian\nListerine\nListerism\nListerize\nlisting\nlistless\nlistlessly\nlistlessness\nlistred\nlistwork\nLisuarte\nlit\nlitaneutical\nlitany\nlitanywise\nlitas\nlitation\nlitch\nlitchi\nlite\nliter\nliteracy\nliteraily\nliteral\nliteralism\nliteralist\nliteralistic\nliterality\nliteralization\nliteralize\nliteralizer\nliterally\nliteralminded\nliteralmindedness\nliteralness\nliterarian\nliterariness\nliterary\nliteraryism\nliterate\nliterati\nliteration\nliteratist\nliterato\nliterator\nliterature\nliteratus\nliterose\nliterosity\nlith\nlithagogue\nlithangiuria\nlithanthrax\nlitharge\nlithe\nlithectasy\nlithectomy\nlithely\nlithemia\nlithemic\nlitheness\nlithesome\nlithesomeness\nlithi\nlithia\nlithiasis\nlithiastic\nlithiate\nlithic\nlithifaction\nlithification\nlithify\nlithite\nlithium\nlitho\nlithobiid\nLithobiidae\nlithobioid\nLithobius\nLithocarpus\nlithocenosis\nlithochemistry\nlithochromatic\nlithochromatics\nlithochromatographic\nlithochromatography\nlithochromography\nlithochromy\nlithoclase\nlithoclast\nlithoclastic\nlithoclasty\nlithoculture\nlithocyst\nlithocystotomy\nLithodes\nlithodesma\nlithodialysis\nlithodid\nLithodidae\nlithodomous\nLithodomus\nlithofracteur\nlithofractor\nlithogenesis\nlithogenetic\nlithogenous\nlithogeny\nlithoglyph\nlithoglypher\nlithoglyphic\nlithoglyptic\nlithoglyptics\nlithograph\nlithographer\nlithographic\nlithographical\nlithographically\nlithographize\nlithography\nlithogravure\nlithoid\nlithoidite\nlitholabe\nlitholapaxy\nlitholatrous\nlitholatry\nlithologic\nlithological\nlithologically\nlithologist\nlithology\nlitholysis\nlitholyte\nlitholytic\nlithomancy\nlithomarge\nlithometer\nlithonephria\nlithonephritis\nlithonephrotomy\nlithontriptic\nlithontriptist\nlithontriptor\nlithopedion\nlithopedium\nlithophagous\nlithophane\nlithophanic\nlithophany\nlithophilous\nlithophone\nlithophotography\nlithophotogravure\nlithophthisis\nlithophyl\nlithophyllous\nlithophysa\nlithophysal\nlithophyte\nlithophytic\nlithophytous\nlithopone\nlithoprint\nlithoscope\nlithosian\nlithosiid\nLithosiidae\nLithosiinae\nlithosis\nlithosol\nlithosperm\nlithospermon\nlithospermous\nLithospermum\nlithosphere\nlithotint\nlithotome\nlithotomic\nlithotomical\nlithotomist\nlithotomize\nlithotomous\nlithotomy\nlithotony\nlithotresis\nlithotripsy\nlithotriptor\nlithotrite\nlithotritic\nlithotritist\nlithotrity\nlithotype\nlithotypic\nlithotypy\nlithous\nlithoxyl\nlithsman\nLithuanian\nLithuanic\nlithuresis\nlithuria\nlithy\nliticontestation\nlitigable\nlitigant\nlitigate\nlitigation\nlitigationist\nlitigator\nlitigatory\nlitigiosity\nlitigious\nlitigiously\nlitigiousness\nLitiopa\nlitiscontest\nlitiscontestation\nlitiscontestational\nlitmus\nLitopterna\nLitorina\nLitorinidae\nlitorinoid\nlitotes\nlitra\nLitsea\nlitster\nlitten\nlitter\nlitterateur\nlitterer\nlittermate\nlittery\nlittle\nlittleleaf\nlittleneck\nlittleness\nlittlewale\nlittling\nlittlish\nlittoral\nLittorella\nlittress\nlituiform\nlituite\nLituites\nLituitidae\nLituola\nlituoline\nlituoloid\nliturate\nliturgical\nliturgically\nliturgician\nliturgics\nliturgiological\nliturgiologist\nliturgiology\nliturgism\nliturgist\nliturgistic\nliturgistical\nliturgize\nliturgy\nlitus\nlituus\nLitvak\nLityerses\nlitz\nLiukiu\nLiv\nlivability\nlivable\nlivableness\nlive\nliveborn\nlived\nlivedo\nlivelihood\nlivelily\nliveliness\nlivelong\nlively\nliven\nliveness\nliver\nliverance\nliverberry\nlivered\nliverhearted\nliverheartedness\nliveried\nliverish\nliverishness\nliverleaf\nliverless\nLiverpudlian\nliverwort\nliverwurst\nlivery\nliverydom\nliveryless\nliveryman\nlivestock\nLivian\nlivid\nlividity\nlividly\nlividness\nlivier\nliving\nlivingless\nlivingly\nlivingness\nlivingstoneite\nLivish\nLivistona\nLivonian\nlivor\nlivre\nliwan\nlixive\nlixivial\nlixiviate\nlixiviation\nlixiviator\nlixivious\nlixivium\nLiyuan\nLiz\nLiza\nlizard\nlizardtail\nLizzie\nllama\nLlanberisslate\nLlandeilo\nLlandovery\nllano\nllautu\nLleu\nLlew\nLloyd\nLludd\nllyn\nLo\nlo\nLoa\nloa\nloach\nload\nloadage\nloaded\nloaden\nloader\nloading\nloadless\nloadpenny\nloadsome\nloadstone\nloaf\nloafer\nloaferdom\nloaferish\nloafing\nloafingly\nloaflet\nloaghtan\nloam\nloamily\nloaminess\nloaming\nloamless\nLoammi\nloamy\nloan\nloanable\nloaner\nloanin\nloanmonger\nloanword\nLoasa\nLoasaceae\nloasaceous\nloath\nloathe\nloather\nloathful\nloathfully\nloathfulness\nloathing\nloathingly\nloathliness\nloathly\nloathness\nloathsome\nloathsomely\nloathsomeness\nLoatuko\nloave\nlob\nLobachevskian\nlobal\nLobale\nlobar\nLobaria\nLobata\nLobatae\nlobate\nlobated\nlobately\nlobation\nlobber\nlobbish\nlobby\nlobbyer\nlobbyism\nlobbyist\nlobbyman\nlobcock\nlobe\nlobectomy\nlobed\nlobefoot\nlobefooted\nlobeless\nlobelet\nLobelia\nLobeliaceae\nlobeliaceous\nlobelin\nlobeline\nlobellated\nlobfig\nlobiform\nlobigerous\nlobing\nlobiped\nloblolly\nlobo\nlobola\nlobopodium\nLobosa\nlobose\nlobotomy\nlobscourse\nlobscouse\nlobscouser\nlobster\nlobstering\nlobsterish\nlobsterlike\nlobsterproof\nlobtail\nlobular\nLobularia\nlobularly\nlobulate\nlobulated\nlobulation\nlobule\nlobulette\nlobulose\nlobulous\nlobworm\nloca\nlocable\nlocal\nlocale\nlocalism\nlocalist\nlocalistic\nlocality\nlocalizable\nlocalization\nlocalize\nlocalizer\nlocally\nlocalness\nlocanda\nLocarnist\nLocarnite\nLocarnize\nLocarno\nlocate\nlocation\nlocational\nlocative\nlocator\nlocellate\nlocellus\nloch\nlochage\nlochan\nlochetic\nlochia\nlochial\nlochiocolpos\nlochiocyte\nlochiometra\nlochiometritis\nlochiopyra\nlochiorrhagia\nlochiorrhea\nlochioschesis\nLochlin\nlochometritis\nlochoperitonitis\nlochopyra\nlochus\nlochy\nloci\nlociation\nlock\nlockable\nlockage\nLockatong\nlockbox\nlocked\nlocker\nlockerman\nlocket\nlockful\nlockhole\nLockian\nLockianism\nlocking\nlockjaw\nlockless\nlocklet\nlockmaker\nlockmaking\nlockman\nlockout\nlockpin\nLockport\nlockram\nlocksman\nlocksmith\nlocksmithery\nlocksmithing\nlockspit\nlockup\nlockwork\nlocky\nloco\nlocodescriptive\nlocofoco\nLocofocoism\nlocoism\nlocomobile\nlocomobility\nlocomote\nlocomotility\nlocomotion\nlocomotive\nlocomotively\nlocomotiveman\nlocomotiveness\nlocomotivity\nlocomotor\nlocomotory\nlocomutation\nlocoweed\nLocrian\nLocrine\nloculament\nloculamentose\nloculamentous\nlocular\nloculate\nloculated\nloculation\nlocule\nloculicidal\nloculicidally\nloculose\nloculus\nlocum\nlocus\nlocust\nlocusta\nlocustal\nlocustberry\nlocustelle\nlocustid\nLocustidae\nlocusting\nlocustlike\nlocution\nlocutor\nlocutorship\nlocutory\nlod\nLoddigesia\nlode\nlodemanage\nlodesman\nlodestar\nlodestone\nlodestuff\nlodge\nlodgeable\nlodged\nlodgeful\nlodgeman\nlodgepole\nlodger\nlodgerdom\nlodging\nlodginghouse\nlodgings\nlodgment\nLodha\nlodicule\nLodoicea\nLodowic\nLodowick\nLodur\nLoegria\nloess\nloessal\nloessial\nloessic\nloessland\nloessoid\nlof\nlofstelle\nloft\nlofter\nloftily\nloftiness\nlofting\nloftless\nloftman\nloftsman\nlofty\nlog\nloganberry\nLogania\nLoganiaceae\nloganiaceous\nloganin\nlogaoedic\nlogarithm\nlogarithmal\nlogarithmetic\nlogarithmetical\nlogarithmetically\nlogarithmic\nlogarithmical\nlogarithmically\nlogarithmomancy\nlogbook\nlogcock\nloge\nlogeion\nlogeum\nloggat\nlogged\nlogger\nloggerhead\nloggerheaded\nloggia\nloggin\nlogging\nloggish\nloghead\nlogheaded\nlogia\nlogic\nlogical\nlogicalist\nlogicality\nlogicalization\nlogicalize\nlogically\nlogicalness\nlogicaster\nlogician\nlogicism\nlogicist\nlogicity\nlogicize\nlogicless\nlogie\nlogin\nlogion\nlogistic\nlogistical\nlogistician\nlogistics\nlogium\nloglet\nloglike\nlogman\nlogocracy\nlogodaedaly\nlogogogue\nlogogram\nlogogrammatic\nlogograph\nlogographer\nlogographic\nlogographical\nlogographically\nlogography\nlogogriph\nlogogriphic\nlogoi\nlogolatry\nlogology\nlogomach\nlogomacher\nlogomachic\nlogomachical\nlogomachist\nlogomachize\nlogomachy\nlogomancy\nlogomania\nlogomaniac\nlogometer\nlogometric\nlogometrical\nlogometrically\nlogopedia\nlogopedics\nlogorrhea\nlogos\nlogothete\nlogotype\nlogotypy\nLogres\nLogria\nLogris\nlogroll\nlogroller\nlogrolling\nlogway\nlogwise\nlogwood\nlogwork\nlogy\nlohan\nLohana\nLohar\nlohoch\nloimic\nloimography\nloimology\nloin\nloincloth\nloined\nloir\nLois\nLoiseleuria\nloiter\nloiterer\nloiteringly\nloiteringness\nloka\nlokao\nlokaose\nlokapala\nloke\nloket\nlokiec\nLokindra\nLokman\nLola\nLoliginidae\nLoligo\nLolium\nloll\nLollard\nLollardian\nLollardism\nLollardist\nLollardize\nLollardlike\nLollardry\nLollardy\nloller\nlollingite\nlollingly\nlollipop\nlollop\nlollopy\nlolly\nLolo\nloma\nlomastome\nlomatine\nlomatinous\nLomatium\nLombard\nlombard\nLombardeer\nLombardesque\nLombardian\nLombardic\nlomboy\nLombrosian\nloment\nlomentaceous\nLomentaria\nlomentariaceous\nlomentum\nlomita\nlommock\nLonchocarpus\nLonchopteridae\nLondinensian\nLondoner\nLondonese\nLondonesque\nLondonian\nLondonish\nLondonism\nLondonization\nLondonize\nLondony\nLondres\nlone\nlonelihood\nlonelily\nloneliness\nlonely\nloneness\nlonesome\nlonesomely\nlonesomeness\nlong\nlonga\nlongan\nlonganimity\nlonganimous\nLongaville\nlongbeak\nlongbeard\nlongboat\nlongbow\nlongcloth\nlonge\nlongear\nlonger\nlongeval\nlongevity\nlongevous\nlongfelt\nlongfin\nlongful\nlonghair\nlonghand\nlonghead\nlongheaded\nlongheadedly\nlongheadedness\nlonghorn\nlongicaudal\nlongicaudate\nlongicone\nlongicorn\nLongicornia\nlongilateral\nlongilingual\nlongiloquence\nlongimanous\nlongimetric\nlongimetry\nlonging\nlongingly\nlongingness\nLonginian\nlonginquity\nlongipennate\nlongipennine\nlongirostral\nlongirostrate\nlongirostrine\nLongirostrines\nlongisection\nlongish\nlongitude\nlongitudinal\nlongitudinally\nlongjaw\nlongleaf\nlonglegs\nlongly\nlongmouthed\nlongness\nLongobard\nLongobardi\nLongobardian\nLongobardic\nlongs\nlongshanks\nlongshore\nlongshoreman\nlongsome\nlongsomely\nlongsomeness\nlongspun\nlongspur\nlongtail\nlongue\nlongulite\nlongway\nlongways\nlongwise\nlongwool\nlongwork\nlongwort\nLonhyn\nLonicera\nLonk\nlonquhard\nlontar\nloo\nlooby\nlood\nloof\nloofah\nloofie\nloofness\nlook\nlooker\nlooking\nlookout\nlookum\nloom\nloomer\nloomery\nlooming\nloon\nloonery\nlooney\nloony\nloop\nlooper\nloopful\nloophole\nlooping\nloopist\nlooplet\nlooplike\nloopy\nloose\nloosely\nloosemouthed\nloosen\nloosener\nlooseness\nlooser\nloosestrife\nloosing\nloosish\nloot\nlootable\nlooten\nlooter\nlootie\nlootiewallah\nlootsman\nlop\nlope\nloper\nLopezia\nlophiid\nLophiidae\nlophine\nLophiodon\nlophiodont\nLophiodontidae\nlophiodontoid\nLophiola\nLophiomyidae\nLophiomyinae\nLophiomys\nlophiostomate\nlophiostomous\nlophobranch\nlophobranchiate\nLophobranchii\nlophocalthrops\nlophocercal\nLophocome\nLophocomi\nLophodermium\nlophodont\nLophophora\nlophophoral\nlophophore\nLophophorinae\nlophophorine\nLophophorus\nlophophytosis\nLophopoda\nLophornis\nLophortyx\nlophosteon\nlophotriaene\nlophotrichic\nlophotrichous\nLophura\nlopolith\nloppard\nlopper\nloppet\nlopping\nloppy\nlopseed\nlopsided\nlopsidedly\nlopsidedness\nlopstick\nloquacious\nloquaciously\nloquaciousness\nloquacity\nloquat\nloquence\nloquent\nloquently\nLora\nlora\nloral\nloran\nlorandite\nloranskite\nLoranthaceae\nloranthaceous\nLoranthus\nlorarius\nlorate\nlorcha\nLord\nlord\nlording\nlordkin\nlordless\nlordlet\nlordlike\nlordlily\nlordliness\nlordling\nlordly\nlordolatry\nlordosis\nlordotic\nlordship\nlordwood\nlordy\nlore\nloreal\nlored\nloreless\nLoren\nLorenzan\nlorenzenite\nLorenzo\nLorettine\nlorettoite\nlorgnette\nLori\nlori\nloric\nlorica\nloricarian\nLoricariidae\nloricarioid\nLoricata\nloricate\nLoricati\nlorication\nloricoid\nLorien\nlorikeet\nlorilet\nlorimer\nloriot\nloris\nLorius\nlormery\nlorn\nlornness\nloro\nLorraine\nLorrainer\nLorrainese\nlorriker\nlorry\nlors\nlorum\nlory\nlosable\nlosableness\nlose\nlosel\nloselism\nlosenger\nloser\nlosh\nlosing\nloss\nlossenite\nlossless\nlossproof\nlost\nlostling\nlostness\nLot\nlot\nLota\nlota\nlotase\nlote\nlotebush\nLotharingian\nlotic\nlotiform\nlotion\nlotment\nLotophagi\nlotophagous\nlotophagously\nlotrite\nlots\nLotta\nLotte\nlotter\nlottery\nLottie\nlotto\nLotuko\nlotus\nlotusin\nlotuslike\nLou\nlouch\nlouchettes\nloud\nlouden\nloudering\nloudish\nloudly\nloudmouthed\nloudness\nlouey\nlough\nlougheen\nLouie\nLouiqa\nLouis\nLouisa\nLouise\nLouisiana\nLouisianian\nlouisine\nlouk\nLoukas\nloukoum\nloulu\nlounder\nlounderer\nlounge\nlounger\nlounging\nloungingly\nloungy\nLoup\nloup\nloupe\nlour\nlourdy\nlouse\nlouseberry\nlousewort\nlousily\nlousiness\nlouster\nlousy\nlout\nlouter\nlouther\nloutish\nloutishly\nloutishness\nloutrophoros\nlouty\nlouvar\nlouver\nlouvered\nlouvering\nlouverwork\nLouvre\nlovability\nlovable\nlovableness\nlovably\nlovage\nlove\nlovebird\nloveflower\nloveful\nlovelass\nloveless\nlovelessly\nlovelessness\nlovelihead\nlovelily\nloveliness\nloveling\nlovelock\nlovelorn\nlovelornness\nlovely\nloveman\nlovemate\nlovemonger\nloveproof\nlover\nloverdom\nlovered\nloverhood\nlovering\nloverless\nloverliness\nloverly\nlovership\nloverwise\nlovesick\nlovesickness\nlovesome\nlovesomely\nlovesomeness\nloveworth\nloveworthy\nloving\nlovingly\nlovingness\nlow\nlowa\nlowan\nlowbell\nlowborn\nlowboy\nlowbred\nlowdah\nlowder\nloweite\nLowell\nlower\nlowerable\nlowerclassman\nlowerer\nlowering\nloweringly\nloweringness\nlowermost\nlowery\nlowigite\nlowish\nlowishly\nlowishness\nlowland\nlowlander\nlowlily\nlowliness\nlowly\nlowmen\nlowmost\nlown\nlowness\nlownly\nlowth\nLowville\nlowwood\nlowy\nlox\nloxia\nloxic\nLoxiinae\nloxoclase\nloxocosm\nloxodograph\nLoxodon\nloxodont\nLoxodonta\nloxodontous\nloxodrome\nloxodromic\nloxodromical\nloxodromically\nloxodromics\nloxodromism\nLoxolophodon\nloxolophodont\nLoxomma\nloxophthalmus\nLoxosoma\nLoxosomidae\nloxotic\nloxotomy\nloy\nloyal\nloyalism\nloyalist\nloyalize\nloyally\nloyalness\nloyalty\nLoyd\nLoyolism\nLoyolite\nlozenge\nlozenged\nlozenger\nlozengeways\nlozengewise\nlozengy\nLu\nLuba\nlubber\nlubbercock\nLubberland\nlubberlike\nlubberliness\nlubberly\nlube\nlubra\nlubric\nlubricant\nlubricate\nlubrication\nlubricational\nlubricative\nlubricator\nlubricatory\nlubricious\nlubricity\nlubricous\nlubrifaction\nlubrification\nlubrify\nlubritorian\nlubritorium\nLuc\nLucan\nLucania\nlucanid\nLucanidae\nLucanus\nlucarne\nLucayan\nlucban\nLucchese\nluce\nlucence\nlucency\nlucent\nLucentio\nlucently\nLuceres\nlucern\nlucernal\nLucernaria\nlucernarian\nLucernariidae\nlucerne\nlucet\nLuchuan\nLucia\nLucian\nLuciana\nlucible\nlucid\nlucida\nlucidity\nlucidly\nlucidness\nlucifee\nLucifer\nluciferase\nLuciferian\nLuciferidae\nluciferin\nluciferoid\nluciferous\nluciferously\nluciferousness\nlucific\nluciform\nlucifugal\nlucifugous\nlucigen\nLucile\nLucilia\nlucimeter\nLucina\nLucinacea\nLucinda\nLucinidae\nlucinoid\nLucite\nLucius\nlucivee\nluck\nlucken\nluckful\nluckie\nluckily\nluckiness\nluckless\nlucklessly\nlucklessness\nLucknow\nlucky\nlucration\nlucrative\nlucratively\nlucrativeness\nlucre\nLucrece\nLucretia\nLucretian\nLucretius\nlucriferous\nlucriferousness\nlucrific\nlucrify\nLucrine\nluctation\nluctiferous\nluctiferousness\nlucubrate\nlucubration\nlucubrator\nlucubratory\nlucule\nluculent\nluculently\nLucullan\nlucullite\nLucuma\nlucumia\nLucumo\nlucumony\nLucy\nlucy\nludden\nLuddism\nLuddite\nLudditism\nludefisk\nLudgate\nLudgathian\nLudgatian\nLudian\nludibrious\nludibry\nludicropathetic\nludicroserious\nludicrosity\nludicrosplenetic\nludicrous\nludicrously\nludicrousness\nludification\nludlamite\nLudlovian\nLudlow\nludo\nLudolphian\nLudwig\nludwigite\nlue\nLuella\nlues\nluetic\nluetically\nlufberry\nlufbery\nluff\nLuffa\nLug\nlug\nLuganda\nluge\nluger\nluggage\nluggageless\nluggar\nlugged\nlugger\nluggie\nLuggnagg\nlugmark\nLugnas\nlugsail\nlugsome\nlugubriosity\nlugubrious\nlugubriously\nlugubriousness\nlugworm\nluhinga\nLui\nLuian\nLuigi\nluigino\nLuis\nLuiseno\nLuite\nlujaurite\nLukas\nLuke\nluke\nlukely\nlukeness\nlukewarm\nlukewarmish\nlukewarmly\nlukewarmness\nlukewarmth\nLula\nlulab\nlull\nlullaby\nluller\nLullian\nlulliloo\nlullingly\nLulu\nlulu\nLum\nlum\nlumachel\nlumbaginous\nlumbago\nlumbang\nlumbar\nlumbarization\nlumbayao\nlumber\nlumberdar\nlumberdom\nlumberer\nlumbering\nlumberingly\nlumberingness\nlumberjack\nlumberless\nlumberly\nlumberman\nlumbersome\nlumberyard\nlumbocolostomy\nlumbocolotomy\nlumbocostal\nlumbodorsal\nlumbodynia\nlumbosacral\nlumbovertebral\nlumbrical\nlumbricalis\nLumbricidae\nlumbriciform\nlumbricine\nlumbricoid\nlumbricosis\nLumbricus\nlumbrous\nlumen\nluminaire\nLuminal\nluminal\nluminance\nluminant\nluminarious\nluminarism\nluminarist\nluminary\nluminate\nlumination\nluminative\nluminator\nlumine\nluminesce\nluminescence\nluminescent\nluminiferous\nluminificent\nluminism\nluminist\nluminologist\nluminometer\nluminosity\nluminous\nluminously\nluminousness\nlummox\nlummy\nlump\nlumper\nlumpet\nlumpfish\nlumpily\nlumpiness\nlumping\nlumpingly\nlumpish\nlumpishly\nlumpishness\nlumpkin\nlumpman\nlumpsucker\nlumpy\nluna\nlunacy\nlunambulism\nlunar\nlunare\nLunaria\nlunarian\nlunarist\nlunarium\nlunary\nlunate\nlunatellus\nlunately\nlunatic\nlunatically\nlunation\nlunatize\nlunatum\nlunch\nluncheon\nluncheoner\nluncheonette\nluncheonless\nluncher\nlunchroom\nLunda\nLundinarium\nlundress\nlundyfoot\nlune\nLunel\nlunes\nlunette\nlung\nlunge\nlunged\nlungeous\nlunger\nlungfish\nlungflower\nlungful\nlungi\nlungie\nlungis\nlungless\nlungmotor\nlungsick\nlungworm\nlungwort\nlungy\nlunicurrent\nluniform\nlunisolar\nlunistice\nlunistitial\nlunitidal\nLunka\nlunkhead\nlunn\nlunoid\nlunt\nlunula\nlunular\nLunularia\nlunulate\nlunulated\nlunule\nlunulet\nlunulite\nLunulites\nLuo\nlupanarian\nlupanine\nlupe\nlupeol\nlupeose\nLupercal\nLupercalia\nLupercalian\nLuperci\nlupetidine\nlupicide\nLupid\nlupiform\nlupinaster\nlupine\nlupinin\nlupinine\nlupinosis\nlupinous\nLupinus\nlupis\nlupoid\nlupous\nlupulic\nlupulin\nlupuline\nlupulinic\nlupulinous\nlupulinum\nlupulus\nlupus\nlupuserythematosus\nLur\nlura\nlural\nlurch\nlurcher\nlurchingfully\nlurchingly\nlurchline\nlurdan\nlurdanism\nlure\nlureful\nlurement\nlurer\nluresome\nlurg\nlurgworm\nLuri\nlurid\nluridity\nluridly\nluridness\nluringly\nlurk\nlurker\nlurkingly\nlurkingness\nlurky\nlurrier\nlurry\nLusatian\nLuscinia\nluscious\nlusciously\nlusciousness\nlush\nLushai\nlushburg\nLushei\nlusher\nlushly\nlushness\nlushy\nLusiad\nLusian\nLusitania\nLusitanian\nlusk\nlusky\nlusory\nlust\nluster\nlusterer\nlusterless\nlusterware\nlustful\nlustfully\nlustfulness\nlustihead\nlustily\nlustiness\nlustless\nlustra\nlustral\nlustrant\nlustrate\nlustration\nlustrative\nlustratory\nlustreless\nlustrical\nlustrification\nlustrify\nlustrine\nlustring\nlustrous\nlustrously\nlustrousness\nlustrum\nlusty\nlut\nlutaceous\nlutanist\nlutany\nLutao\nlutation\nLutayo\nlute\nluteal\nlutecia\nlutecium\nlutein\nluteinization\nluteinize\nlutelet\nlutemaker\nlutemaking\nluteo\nluteocobaltic\nluteofulvous\nluteofuscescent\nluteofuscous\nluteolin\nluteolous\nluteoma\nluteorufescent\nluteous\nluteovirescent\nluter\nlutescent\nlutestring\nLutetia\nLutetian\nlutetium\nluteway\nlutfisk\nLuther\nLutheran\nLutheranic\nLutheranism\nLutheranize\nLutheranizer\nLutherism\nLutherist\nluthern\nluthier\nlutianid\nLutianidae\nlutianoid\nLutianus\nlutidine\nlutidinic\nluting\nlutist\nLutjanidae\nLutjanus\nlutose\nLutra\nLutraria\nLutreola\nlutrin\nLutrinae\nlutrine\nlutulence\nlutulent\nLuvaridae\nLuvian\nLuvish\nLuwian\nlux\nluxate\nluxation\nluxe\nLuxemburger\nLuxemburgian\nluxulianite\nluxuriance\nluxuriancy\nluxuriant\nluxuriantly\nluxuriantness\nluxuriate\nluxuriation\nluxurious\nluxuriously\nluxuriousness\nluxurist\nluxury\nluxus\nLuzula\nLwo\nly\nlyam\nlyard\nLyas\nLycaena\nlycaenid\nLycaenidae\nlycanthrope\nlycanthropia\nlycanthropic\nlycanthropist\nlycanthropize\nlycanthropous\nlycanthropy\nlyceal\nlyceum\nLychnic\nLychnis\nlychnomancy\nlychnoscope\nlychnoscopic\nLycian\nlycid\nLycidae\nLycium\nLycodes\nLycodidae\nlycodoid\nlycopene\nLycoperdaceae\nlycoperdaceous\nLycoperdales\nlycoperdoid\nLycoperdon\nlycoperdon\nLycopersicon\nlycopin\nlycopod\nlycopode\nLycopodiaceae\nlycopodiaceous\nLycopodiales\nLycopodium\nLycopsida\nLycopsis\nLycopus\nlycorine\nLycosa\nlycosid\nLycosidae\nlyctid\nLyctidae\nLyctus\nLycus\nlyddite\nLydia\nLydian\nlydite\nlye\nLyencephala\nlyencephalous\nlyery\nlygaeid\nLygaeidae\nLygeum\nLygodium\nLygosoma\nlying\nlyingly\nLymantria\nlymantriid\nLymantriidae\nlymhpangiophlebitis\nLymnaea\nlymnaean\nlymnaeid\nLymnaeidae\nlymph\nlymphad\nlymphadenectasia\nlymphadenectasis\nlymphadenia\nlymphadenitis\nlymphadenoid\nlymphadenoma\nlymphadenopathy\nlymphadenosis\nlymphaemia\nlymphagogue\nlymphangeitis\nlymphangial\nlymphangiectasis\nlymphangiectatic\nlymphangiectodes\nlymphangiitis\nlymphangioendothelioma\nlymphangiofibroma\nlymphangiology\nlymphangioma\nlymphangiomatous\nlymphangioplasty\nlymphangiosarcoma\nlymphangiotomy\nlymphangitic\nlymphangitis\nlymphatic\nlymphatical\nlymphation\nlymphatism\nlymphatitis\nlymphatolysin\nlymphatolysis\nlymphatolytic\nlymphectasia\nlymphedema\nlymphemia\nlymphenteritis\nlymphoblast\nlymphoblastic\nlymphoblastoma\nlymphoblastosis\nlymphocele\nlymphocyst\nlymphocystosis\nlymphocyte\nlymphocythemia\nlymphocytic\nlymphocytoma\nlymphocytomatosis\nlymphocytosis\nlymphocytotic\nlymphocytotoxin\nlymphodermia\nlymphoduct\nlymphogenic\nlymphogenous\nlymphoglandula\nlymphogranuloma\nlymphoid\nlymphoidectomy\nlymphology\nlymphoma\nlymphomatosis\nlymphomatous\nlymphomonocyte\nlymphomyxoma\nlymphopathy\nlymphopenia\nlymphopenial\nlymphopoiesis\nlymphopoietic\nlymphoprotease\nlymphorrhage\nlymphorrhagia\nlymphorrhagic\nlymphorrhea\nlymphosarcoma\nlymphosarcomatosis\nlymphosarcomatous\nlymphosporidiosis\nlymphostasis\nlymphotaxis\nlymphotome\nlymphotomy\nlymphotoxemia\nlymphotoxin\nlymphotrophic\nlymphotrophy\nlymphous\nlymphuria\nlymphy\nlyncean\nLynceus\nlynch\nlynchable\nlyncher\nLyncid\nlyncine\nLyndon\nLynette\nLyngbyaceae\nLyngbyeae\nLynn\nLynne\nLynnette\nlynnhaven\nlynx\nLyomeri\nlyomerous\nLyon\nLyonese\nLyonetia\nlyonetiid\nLyonetiidae\nLyonnais\nlyonnaise\nLyonnesse\nlyophile\nlyophilization\nlyophilize\nlyophobe\nLyopoma\nLyopomata\nlyopomatous\nlyotrope\nlypemania\nLyperosia\nlypothymia\nlyra\nLyraid\nlyrate\nlyrated\nlyrately\nlyraway\nlyre\nlyrebird\nlyreflower\nlyreman\nlyretail\nlyric\nlyrical\nlyrically\nlyricalness\nlyrichord\nlyricism\nlyricist\nlyricize\nLyrid\nlyriform\nlyrism\nlyrist\nLyrurus\nlys\nLysander\nlysate\nlyse\nLysenkoism\nlysidine\nlysigenic\nlysigenous\nlysigenously\nLysiloma\nLysimachia\nLysimachus\nlysimeter\nlysin\nlysine\nlysis\nLysistrata\nlysogen\nlysogenesis\nlysogenetic\nlysogenic\nlysozyme\nlyssa\nlyssic\nlyssophobia\nlyterian\nLythraceae\nlythraceous\nLythrum\nlytic\nlytta\nlyxose\nM\nm\nMa\nma\nmaam\nmaamselle\nMaarten\nMab\nMaba\nMabel\nMabellona\nmabi\nMabinogion\nmabolo\nMac\nmac\nmacaasim\nmacabre\nmacabresque\nMacaca\nmacaco\nMacacus\nmacadam\nMacadamia\nmacadamite\nmacadamization\nmacadamize\nmacadamizer\nMacaglia\nmacan\nmacana\nMacanese\nmacao\nmacaque\nMacaranga\nMacarani\nMacareus\nmacarism\nmacarize\nmacaroni\nmacaronic\nmacaronical\nmacaronically\nmacaronicism\nmacaronism\nmacaroon\nMacartney\nMacassar\nMacassarese\nmacaw\nMacbeth\nMaccabaeus\nMaccabean\nMaccabees\nmaccaboy\nmacco\nmaccoboy\nMacduff\nmace\nmacedoine\nMacedon\nMacedonian\nMacedonic\nmacehead\nmaceman\nmacer\nmacerate\nmacerater\nmaceration\nMacflecknoe\nmachairodont\nMachairodontidae\nMachairodontinae\nMachairodus\nmachan\nmachar\nmachete\nMachetes\nmachi\nMachiavel\nMachiavellian\nMachiavellianism\nMachiavellianly\nMachiavellic\nMachiavellism\nmachiavellist\nMachiavellistic\nmachicolate\nmachicolation\nmachicoulis\nMachicui\nmachila\nMachilidae\nMachilis\nmachin\nmachinability\nmachinable\nmachinal\nmachinate\nmachination\nmachinator\nmachine\nmachineful\nmachineless\nmachinelike\nmachinely\nmachineman\nmachinemonger\nmachiner\nmachinery\nmachinification\nmachinify\nmachinism\nmachinist\nmachinization\nmachinize\nmachinoclast\nmachinofacture\nmachinotechnique\nmachinule\nMachogo\nmachopolyp\nmachree\nmacies\nMacigno\nmacilence\nmacilency\nmacilent\nmack\nmackenboy\nmackerel\nmackereler\nmackereling\nMackinaw\nmackins\nmackintosh\nmackintoshite\nmackle\nmacklike\nmacle\nMacleaya\nmacled\nMaclura\nMaclurea\nmaclurin\nMacmillanite\nmaco\nMacon\nmaconite\nMacracanthorhynchus\nmacracanthrorhynchiasis\nmacradenous\nmacrame\nmacrander\nmacrandrous\nmacrauchene\nMacrauchenia\nmacraucheniid\nMacraucheniidae\nmacraucheniiform\nmacrauchenioid\nmacrencephalic\nmacrencephalous\nmacro\nmacroanalysis\nmacroanalyst\nmacroanalytical\nmacrobacterium\nmacrobian\nmacrobiosis\nmacrobiote\nmacrobiotic\nmacrobiotics\nMacrobiotus\nmacroblast\nmacrobrachia\nmacrocarpous\nMacrocentrinae\nMacrocentrus\nmacrocephalia\nmacrocephalic\nmacrocephalism\nmacrocephalous\nmacrocephalus\nmacrocephaly\nmacrochaeta\nmacrocheilia\nMacrochelys\nmacrochemical\nmacrochemically\nmacrochemistry\nMacrochira\nmacrochiran\nMacrochires\nmacrochiria\nMacrochiroptera\nmacrochiropteran\nmacrocladous\nmacroclimate\nmacroclimatic\nmacrococcus\nmacrocoly\nmacroconidial\nmacroconidium\nmacroconjugant\nmacrocornea\nmacrocosm\nmacrocosmic\nmacrocosmical\nmacrocosmology\nmacrocosmos\nmacrocrystalline\nmacrocyst\nMacrocystis\nmacrocyte\nmacrocythemia\nmacrocytic\nmacrocytosis\nmacrodactyl\nmacrodactylia\nmacrodactylic\nmacrodactylism\nmacrodactylous\nmacrodactyly\nmacrodiagonal\nmacrodomatic\nmacrodome\nmacrodont\nmacrodontia\nmacrodontism\nmacroelement\nmacroergate\nmacroevolution\nmacrofarad\nmacrogamete\nmacrogametocyte\nmacrogamy\nmacrogastria\nmacroglossate\nmacroglossia\nmacrognathic\nmacrognathism\nmacrognathous\nmacrogonidium\nmacrograph\nmacrographic\nmacrography\nmacrolepidoptera\nmacrolepidopterous\nmacrology\nmacromandibular\nmacromania\nmacromastia\nmacromazia\nmacromelia\nmacromeral\nmacromere\nmacromeric\nmacromerite\nmacromeritic\nmacromesentery\nmacrometer\nmacromethod\nmacromolecule\nmacromyelon\nmacromyelonal\nmacron\nmacronuclear\nmacronucleus\nmacronutrient\nmacropetalous\nmacrophage\nmacrophagocyte\nmacrophagus\nMacrophoma\nmacrophotograph\nmacrophotography\nmacrophyllous\nmacrophysics\nmacropia\nmacropinacoid\nmacropinacoidal\nmacroplankton\nmacroplasia\nmacroplastia\nmacropleural\nmacropodia\nMacropodidae\nMacropodinae\nmacropodine\nmacropodous\nmacroprism\nmacroprosopia\nmacropsia\nmacropteran\nmacropterous\nMacropus\nMacropygia\nmacropyramid\nmacroreaction\nMacrorhamphosidae\nMacrorhamphosus\nmacrorhinia\nMacrorhinus\nmacroscelia\nMacroscelides\nmacroscian\nmacroscopic\nmacroscopical\nmacroscopically\nmacroseism\nmacroseismic\nmacroseismograph\nmacrosepalous\nmacroseptum\nmacrosmatic\nmacrosomatia\nmacrosomatous\nmacrosomia\nmacrosplanchnic\nmacrosporange\nmacrosporangium\nmacrospore\nmacrosporic\nMacrosporium\nmacrosporophore\nmacrosporophyl\nmacrosporophyll\nMacrostachya\nmacrostomatous\nmacrostomia\nmacrostructural\nmacrostructure\nmacrostylospore\nmacrostylous\nmacrosymbiont\nmacrothere\nMacrotheriidae\nmacrotherioid\nMacrotherium\nmacrotherm\nmacrotia\nmacrotin\nMacrotolagus\nmacrotome\nmacrotone\nmacrotous\nmacrourid\nMacrouridae\nMacrourus\nMacrozamia\nmacrozoogonidium\nmacrozoospore\nMacrura\nmacrural\nmacruran\nmacruroid\nmacrurous\nmactation\nMactra\nMactridae\nmactroid\nmacuca\nmacula\nmacular\nmaculate\nmaculated\nmaculation\nmacule\nmaculicole\nmaculicolous\nmaculiferous\nmaculocerebral\nmaculopapular\nmaculose\nMacusi\nmacuta\nmad\nMadagascan\nMadagascar\nMadagascarian\nMadagass\nmadam\nmadame\nmadapollam\nmadarosis\nmadarotic\nmadbrain\nmadbrained\nmadcap\nmadden\nmaddening\nmaddeningly\nmaddeningness\nmadder\nmadderish\nmadderwort\nmadding\nmaddingly\nmaddish\nmaddle\nmade\nMadecase\nmadefaction\nmadefy\nMadegassy\nMadeira\nMadeiran\nMadeline\nmadeline\nMadelon\nmadescent\nMadge\nmadhouse\nmadhuca\nMadhva\nMadi\nMadia\nmadid\nmadidans\nMadiga\nmadisterium\nmadling\nmadly\nmadman\nmadnep\nmadness\nmado\nMadoc\nMadonna\nMadonnahood\nMadonnaish\nMadonnalike\nmadoqua\nMadotheca\nmadrague\nMadras\nmadrasah\nMadrasi\nmadreperl\nMadrepora\nMadreporacea\nmadreporacean\nMadreporaria\nmadreporarian\nmadrepore\nmadreporian\nmadreporic\nmadreporiform\nmadreporite\nmadreporitic\nMadrid\nmadrier\nmadrigal\nmadrigaler\nmadrigaletto\nmadrigalian\nmadrigalist\nMadrilene\nMadrilenian\nmadrona\nmadship\nmadstone\nMadurese\nmaduro\nmadweed\nmadwoman\nmadwort\nmae\nMaeandra\nMaeandrina\nmaeandrine\nmaeandriniform\nmaeandrinoid\nmaeandroid\nMaecenas\nMaecenasship\nmaegbote\nMaelstrom\nMaemacterion\nmaenad\nmaenadic\nmaenadism\nmaenaite\nMaenalus\nMaenidae\nMaeonian\nMaeonides\nmaestri\nmaestro\nmaffia\nmaffick\nmafficker\nmaffle\nmafflin\nmafic\nmafoo\nmafura\nmag\nMaga\nMagadhi\nmagadis\nmagadize\nMagahi\nMagalensia\nmagani\nmagas\nmagazinable\nmagazinage\nmagazine\nmagazinelet\nmagaziner\nmagazinette\nmagazinish\nmagazinism\nmagazinist\nmagaziny\nMagdalen\nMagdalene\nMagdalenian\nmage\nMagellan\nMagellanian\nMagellanic\nmagenta\nmagged\nMaggie\nmaggle\nmaggot\nmaggotiness\nmaggotpie\nmaggoty\nMaggy\nMagh\nMaghi\nMaghrib\nMaghribi\nMagi\nmagi\nMagian\nMagianism\nmagic\nmagical\nmagicalize\nmagically\nmagicdom\nmagician\nmagicianship\nmagicked\nmagicking\nMagindanao\nmagiric\nmagirics\nmagirist\nmagiristic\nmagirological\nmagirologist\nmagirology\nMagism\nmagister\nmagisterial\nmagisteriality\nmagisterially\nmagisterialness\nmagistery\nmagistracy\nmagistral\nmagistrality\nmagistrally\nmagistrand\nmagistrant\nmagistrate\nmagistrateship\nmagistratic\nmagistratical\nmagistratically\nmagistrative\nmagistrature\nMaglemose\nMaglemosean\nMaglemosian\nmagma\nmagmatic\nmagnanimity\nmagnanimous\nmagnanimously\nmagnanimousness\nmagnascope\nmagnascopic\nmagnate\nmagnecrystallic\nmagnelectric\nmagneoptic\nmagnes\nmagnesia\nmagnesial\nmagnesian\nmagnesic\nmagnesioferrite\nmagnesite\nmagnesium\nmagnet\nmagneta\nmagnetic\nmagnetical\nmagnetically\nmagneticalness\nmagnetician\nmagnetics\nmagnetiferous\nmagnetification\nmagnetify\nmagnetimeter\nmagnetism\nmagnetist\nmagnetite\nmagnetitic\nmagnetizability\nmagnetizable\nmagnetization\nmagnetize\nmagnetizer\nmagneto\nmagnetobell\nmagnetochemical\nmagnetochemistry\nmagnetod\nmagnetodynamo\nmagnetoelectric\nmagnetoelectrical\nmagnetoelectricity\nmagnetogenerator\nmagnetogram\nmagnetograph\nmagnetographic\nmagnetoid\nmagnetomachine\nmagnetometer\nmagnetometric\nmagnetometrical\nmagnetometrically\nmagnetometry\nmagnetomotive\nmagnetomotor\nmagneton\nmagnetooptic\nmagnetooptical\nmagnetooptics\nmagnetophone\nmagnetophonograph\nmagnetoplumbite\nmagnetoprinter\nmagnetoscope\nmagnetostriction\nmagnetotelegraph\nmagnetotelephone\nmagnetotherapy\nmagnetotransmitter\nmagnetron\nmagnicaudate\nmagnicaudatous\nmagnifiable\nmagnific\nmagnifical\nmagnifically\nMagnificat\nmagnification\nmagnificative\nmagnifice\nmagnificence\nmagnificent\nmagnificently\nmagnificentness\nmagnifico\nmagnifier\nmagnify\nmagniloquence\nmagniloquent\nmagniloquently\nmagniloquy\nmagnipotence\nmagnipotent\nmagnirostrate\nmagnisonant\nmagnitude\nmagnitudinous\nmagnochromite\nmagnoferrite\nMagnolia\nmagnolia\nMagnoliaceae\nmagnoliaceous\nmagnum\nMagnus\nMagog\nmagot\nmagpie\nmagpied\nmagpieish\nmagsman\nmaguari\nmaguey\nMagyar\nMagyaran\nMagyarism\nMagyarization\nMagyarize\nMah\nmaha\nmahaleb\nmahalla\nmahant\nmahar\nmaharaja\nmaharajrana\nmaharana\nmaharanee\nmaharani\nmaharao\nMaharashtri\nmaharawal\nmaharawat\nmahatma\nmahatmaism\nMahayana\nMahayanism\nMahayanist\nMahayanistic\nMahdi\nMahdian\nMahdiship\nMahdism\nMahdist\nMahesh\nMahi\nMahican\nmahmal\nMahmoud\nmahmudi\nmahoe\nmahoganize\nmahogany\nmahoitre\nmaholi\nmaholtine\nMahomet\nMahometry\nmahone\nMahonia\nMahori\nMahound\nmahout\nMahra\nMahran\nMahri\nmahseer\nmahua\nmahuang\nMaia\nMaiacca\nMaianthemum\nmaid\nMaida\nmaidan\nmaiden\nmaidenhair\nmaidenhead\nmaidenhood\nmaidenish\nmaidenism\nmaidenlike\nmaidenliness\nmaidenly\nmaidenship\nmaidenweed\nmaidhood\nMaidie\nmaidish\nmaidism\nmaidkin\nmaidlike\nmaidling\nmaidservant\nMaidu\nmaidy\nmaiefic\nmaieutic\nmaieutical\nmaieutics\nmaigre\nmaiid\nMaiidae\nmail\nmailable\nmailbag\nmailbox\nmailclad\nmailed\nmailer\nmailguard\nmailie\nmaillechort\nmailless\nmailman\nmailplane\nmaim\nmaimed\nmaimedly\nmaimedness\nmaimer\nmaimon\nMaimonidean\nMaimonist\nmain\nMainan\nMaine\nmainferre\nmainlander\nmainly\nmainmast\nmainmortable\nmainour\nmainpast\nmainpernable\nmainpernor\nmainpin\nmainport\nmainpost\nmainprise\nmains\nmainsail\nmainsheet\nmainspring\nmainstay\nMainstreeter\nMainstreetism\nmaint\nmaintain\nmaintainable\nmaintainableness\nmaintainer\nmaintainment\nmaintainor\nmaintenance\nMaintenon\nmaintop\nmaintopman\nmaioid\nMaioidea\nmaioidean\nMaioli\nMaiongkong\nMaipure\nmairatour\nmaire\nmaisonette\nMaithili\nmaitlandite\nMaitreya\nMaius\nmaize\nmaizebird\nmaizenic\nmaizer\nMaja\nMajagga\nmajagua\nMajesta\nmajestic\nmajestical\nmajestically\nmajesticalness\nmajesticness\nmajestious\nmajesty\nmajestyship\nMajlis\nmajo\nmajolica\nmajolist\nmajoon\nMajor\nmajor\nmajorate\nmajoration\nMajorcan\nmajorette\nMajorism\nMajorist\nMajoristic\nmajority\nmajorize\nmajorship\nmajuscular\nmajuscule\nmakable\nMakah\nMakaraka\nMakari\nMakassar\nmake\nmakebate\nmakedom\nmakefast\nmaker\nmakeress\nmakership\nmakeshift\nmakeshiftiness\nmakeshiftness\nmakeshifty\nmakeweight\nmakhzan\nmaki\nmakimono\nmaking\nmakluk\nmako\nMakonde\nmakroskelic\nMaku\nMakua\nmakuk\nmal\nmala\nmalaanonang\nMalabar\nMalabarese\nmalabathrum\nmalacanthid\nMalacanthidae\nmalacanthine\nMalacanthus\nMalacca\nMalaccan\nmalaccident\nMalaceae\nmalaceous\nmalachite\nmalacia\nMalaclemys\nMalaclypse\nMalacobdella\nMalacocotylea\nmalacoderm\nMalacodermatidae\nmalacodermatous\nMalacodermidae\nmalacodermous\nmalacoid\nmalacolite\nmalacological\nmalacologist\nmalacology\nmalacon\nmalacophilous\nmalacophonous\nmalacophyllous\nmalacopod\nMalacopoda\nmalacopodous\nmalacopterygian\nMalacopterygii\nmalacopterygious\nMalacoscolices\nMalacoscolicine\nMalacosoma\nMalacostraca\nmalacostracan\nmalacostracology\nmalacostracous\nmalactic\nmaladaptation\nmaladdress\nmaladive\nmaladjust\nmaladjusted\nmaladjustive\nmaladjustment\nmaladminister\nmaladministration\nmaladministrator\nmaladroit\nmaladroitly\nmaladroitness\nmaladventure\nmalady\nMalaga\nMalagasy\nMalagigi\nmalagma\nmalaguena\nmalahack\nmalaise\nmalakin\nmalalignment\nmalambo\nmalandered\nmalanders\nmalandrous\nmalanga\nmalapaho\nmalapert\nmalapertly\nmalapertness\nmalapi\nmalapplication\nmalappointment\nmalappropriate\nmalappropriation\nmalaprop\nmalapropian\nmalapropish\nmalapropism\nmalapropoism\nmalapropos\nMalapterurus\nmalar\nmalaria\nmalarial\nmalariaproof\nmalarin\nmalarioid\nmalariologist\nmalariology\nmalarious\nmalarkey\nmalaroma\nmalarrangement\nmalasapsap\nmalassimilation\nmalassociation\nmalate\nmalati\nmalattress\nmalax\nmalaxable\nmalaxage\nmalaxate\nmalaxation\nmalaxator\nmalaxerman\nMalaxis\nMalay\nMalayalam\nMalayalim\nMalayan\nMalayic\nMalayize\nMalayoid\nMalaysian\nmalbehavior\nmalbrouck\nmalchite\nMalchus\nMalcolm\nmalconceived\nmalconduct\nmalconformation\nmalconstruction\nmalcontent\nmalcontented\nmalcontentedly\nmalcontentedness\nmalcontentism\nmalcontently\nmalcontentment\nmalconvenance\nmalcreated\nmalcultivation\nmaldeveloped\nmaldevelopment\nmaldigestion\nmaldirection\nmaldistribution\nMaldivian\nmaldonite\nmalduck\nMale\nmale\nmalease\nmaleate\nMalebolge\nMalebolgian\nMalebolgic\nMalebranchism\nMalecite\nmaledicent\nmaledict\nmalediction\nmaledictive\nmaledictory\nmaleducation\nmalefaction\nmalefactor\nmalefactory\nmalefactress\nmalefical\nmalefically\nmaleficence\nmaleficent\nmaleficial\nmaleficiate\nmaleficiation\nmaleic\nmaleinoid\nmalella\nMalemute\nmaleness\nmalengine\nmaleo\nmaleruption\nMalesherbia\nMalesherbiaceae\nmalesherbiaceous\nmalevolence\nmalevolency\nmalevolent\nmalevolently\nmalexecution\nmalfeasance\nmalfeasant\nmalfed\nmalformation\nmalformed\nmalfortune\nmalfunction\nmalgovernment\nmalgrace\nmalguzar\nmalguzari\nmalhonest\nmalhygiene\nmali\nmalic\nmalice\nmaliceful\nmaliceproof\nmalicho\nmalicious\nmaliciously\nmaliciousness\nmalicorium\nmalidentification\nmaliferous\nmaliform\nmalign\nmalignance\nmalignancy\nmalignant\nmalignantly\nmalignation\nmaligner\nmalignify\nmalignity\nmalignly\nmalignment\nmalik\nmalikadna\nmalikala\nmalikana\nMaliki\nMalikite\nmaline\nmalines\nmalinfluence\nmalinger\nmalingerer\nmalingery\nMalinois\nmalinowskite\nmalinstitution\nmalinstruction\nmalintent\nmalism\nmalison\nmalist\nmalistic\nmalkin\nMalkite\nmall\nmalladrite\nmallangong\nmallard\nmallardite\nmalleability\nmalleabilization\nmalleable\nmalleableize\nmalleableized\nmalleableness\nmalleablize\nmalleal\nmallear\nmalleate\nmalleation\nmallee\nMalleifera\nmalleiferous\nmalleiform\nmallein\nmalleinization\nmalleinize\nmallemaroking\nmallemuck\nmalleoincudal\nmalleolable\nmalleolar\nmalleolus\nmallet\nmalleus\nMalling\nMallophaga\nmallophagan\nmallophagous\nmalloseismic\nMallotus\nmallow\nmallowwort\nMalloy\nmallum\nmallus\nmalm\nMalmaison\nmalmignatte\nmalmsey\nmalmstone\nmalmy\nmalnourished\nmalnourishment\nmalnutrite\nmalnutrition\nmalo\nmalobservance\nmalobservation\nmaloccluded\nmalocclusion\nmalodor\nmalodorant\nmalodorous\nmalodorously\nmalodorousness\nmalojilla\nmalonate\nmalonic\nmalonyl\nmalonylurea\nMalope\nmaloperation\nmalorganization\nmalorganized\nmalouah\nmalpais\nMalpighia\nMalpighiaceae\nmalpighiaceous\nMalpighian\nmalplaced\nmalpoise\nmalposed\nmalposition\nmalpractice\nmalpractioner\nmalpraxis\nmalpresentation\nmalproportion\nmalproportioned\nmalpropriety\nmalpublication\nmalreasoning\nmalrotation\nmalshapen\nmalt\nmaltable\nmaltase\nmalter\nMaltese\nmaltha\nMalthe\nmalthouse\nMalthusian\nMalthusianism\nMalthusiast\nmaltiness\nmalting\nmaltman\nMalto\nmaltobiose\nmaltodextrin\nmaltodextrine\nmaltolte\nmaltose\nmaltreat\nmaltreatment\nmaltreator\nmaltster\nmalturned\nmaltworm\nmalty\nmalunion\nMalurinae\nmalurine\nMalurus\nMalus\nMalva\nMalvaceae\nmalvaceous\nMalvales\nmalvasia\nmalvasian\nMalvastrum\nmalversation\nmalverse\nmalvoisie\nmalvolition\nMam\nmamba\nmambo\nmameliere\nmamelonation\nmameluco\nMameluke\nMamercus\nMamers\nMamertine\nMamie\nMamilius\nmamlatdar\nmamma\nmammal\nmammalgia\nMammalia\nmammalian\nmammaliferous\nmammality\nmammalogical\nmammalogist\nmammalogy\nmammary\nmammate\nMammea\nmammectomy\nmammee\nmammer\nMammifera\nmammiferous\nmammiform\nmammilla\nmammillaplasty\nmammillar\nMammillaria\nmammillary\nmammillate\nmammillated\nmammillation\nmammilliform\nmammilloid\nmammitis\nmammock\nmammogen\nmammogenic\nmammogenically\nmammon\nmammondom\nmammoniacal\nmammonish\nmammonism\nmammonist\nmammonistic\nmammonite\nmammonitish\nmammonization\nmammonize\nmammonolatry\nMammonteus\nmammoth\nmammothrept\nmammula\nmammular\nMammut\nMammutidae\nmammy\nmamo\nman\nmana\nManabozho\nmanacle\nManacus\nmanage\nmanageability\nmanageable\nmanageableness\nmanageably\nmanagee\nmanageless\nmanagement\nmanagemental\nmanager\nmanagerdom\nmanageress\nmanagerial\nmanagerially\nmanagership\nmanagery\nmanaism\nmanakin\nmanal\nmanas\nManasquan\nmanatee\nManatidae\nmanatine\nmanatoid\nManatus\nmanavel\nmanavelins\nManavendra\nmanbird\nmanbot\nmanche\nManchester\nManchesterdom\nManchesterism\nManchesterist\nManchestrian\nmanchet\nmanchineel\nManchu\nManchurian\nmancinism\nmancipable\nmancipant\nmancipate\nmancipation\nmancipative\nmancipatory\nmancipee\nmancipium\nmanciple\nmancipleship\nmancipular\nmancono\nMancunian\nmancus\nmand\nMandaean\nMandaeism\nMandaic\nMandaite\nmandala\nMandalay\nmandament\nmandamus\nMandan\nmandant\nmandarah\nmandarin\nmandarinate\nmandarindom\nmandariness\nmandarinic\nmandarinism\nmandarinize\nmandarinship\nmandatary\nmandate\nmandatee\nmandation\nmandative\nmandator\nmandatorily\nmandatory\nmandatum\nMande\nmandelate\nmandelic\nmandible\nmandibula\nmandibular\nmandibulary\nMandibulata\nmandibulate\nmandibulated\nmandibuliform\nmandibulohyoid\nmandibulomaxillary\nmandibulopharyngeal\nmandibulosuspensorial\nmandil\nmandilion\nMandingan\nMandingo\nmandola\nmandolin\nmandolinist\nmandolute\nmandom\nmandora\nmandore\nmandra\nmandragora\nmandrake\nmandrel\nmandriarch\nmandrill\nmandrin\nmandruka\nmandua\nmanducable\nmanducate\nmanducation\nmanducatory\nmandyas\nmane\nmaned\nmanege\nmanei\nmaneless\nmanent\nmanerial\nmanes\nmanesheet\nmaness\nManetti\nManettia\nmaneuver\nmaneuverability\nmaneuverable\nmaneuverer\nmaneuvrability\nmaneuvrable\nmaney\nManfred\nManfreda\nmanful\nmanfully\nmanfulness\nmang\nmanga\nmangabeira\nmangabey\nmangal\nmanganapatite\nmanganate\nmanganblende\nmanganbrucite\nmanganeisen\nmanganese\nmanganesian\nmanganetic\nmanganhedenbergite\nmanganic\nmanganiferous\nmanganite\nmanganium\nmanganize\nManganja\nmanganocalcite\nmanganocolumbite\nmanganophyllite\nmanganosiderite\nmanganosite\nmanganostibiite\nmanganotantalite\nmanganous\nmanganpectolite\nMangar\nMangbattu\nmange\nmangeao\nmangel\nmangelin\nmanger\nmangerite\nmangi\nMangifera\nmangily\nmanginess\nmangle\nmangleman\nmangler\nmangling\nmanglingly\nmango\nmangona\nmangonel\nmangonism\nmangonization\nmangonize\nmangosteen\nmangrass\nmangrate\nmangrove\nMangue\nmangue\nmangy\nMangyan\nmanhandle\nManhattan\nManhattanite\nManhattanize\nmanhead\nmanhole\nmanhood\nmani\nmania\nmaniable\nmaniac\nmaniacal\nmaniacally\nmanic\nManicaria\nmanicate\nManichaean\nManichaeanism\nManichaeanize\nManichaeism\nManichaeist\nManichee\nmanichord\nmanicole\nmanicure\nmanicurist\nmanid\nManidae\nmanienie\nmanifest\nmanifestable\nmanifestant\nmanifestation\nmanifestational\nmanifestationist\nmanifestative\nmanifestatively\nmanifested\nmanifestedness\nmanifester\nmanifestive\nmanifestly\nmanifestness\nmanifesto\nmanifold\nmanifolder\nmanifoldly\nmanifoldness\nmanifoldwise\nmaniform\nmanify\nManihot\nmanikin\nmanikinism\nManila\nmanila\nmanilla\nmanille\nmanioc\nmaniple\nmanipulable\nmanipular\nmanipulatable\nmanipulate\nmanipulation\nmanipulative\nmanipulatively\nmanipulator\nmanipulatory\nManipuri\nManis\nmanism\nmanist\nmanistic\nmanito\nManitoban\nmanitrunk\nmaniu\nManius\nManiva\nmanjak\nManjeri\nmank\nmankeeper\nmankin\nmankind\nmanless\nmanlessly\nmanlessness\nmanlet\nmanlihood\nmanlike\nmanlikely\nmanlikeness\nmanlily\nmanliness\nmanling\nmanly\nMann\nmanna\nmannan\nmannequin\nmanner\nmannerable\nmannered\nmannerhood\nmannering\nmannerism\nmannerist\nmanneristic\nmanneristical\nmanneristically\nmannerize\nmannerless\nmannerlessness\nmannerliness\nmannerly\nmanners\nmannersome\nmanness\nMannheimar\nmannide\nmannie\nmanniferous\nmannify\nmannikinism\nmanning\nmannish\nmannishly\nmannishness\nmannite\nmannitic\nmannitol\nmannitose\nmannoheptite\nmannoheptitol\nmannoheptose\nmannoketoheptose\nmannonic\nmannosan\nmannose\nManny\nmanny\nmano\nManobo\nmanoc\nmanograph\nManolis\nmanometer\nmanometric\nmanometrical\nmanometry\nmanomin\nmanor\nmanorial\nmanorialism\nmanorialize\nmanorship\nmanoscope\nmanostat\nmanostatic\nmanque\nmanred\nmanrent\nmanroot\nmanrope\nMans\nmansard\nmansarded\nmanscape\nmanse\nmanservant\nmanship\nmansion\nmansional\nmansionary\nmansioned\nmansioneer\nmansionry\nmanslaughter\nmanslaughterer\nmanslaughtering\nmanslaughterous\nmanslayer\nmanslaying\nmanso\nmansonry\nmanstealer\nmanstealing\nmanstopper\nmanstopping\nmansuete\nmansuetely\nmansuetude\nmant\nmanta\nmantal\nmanteau\nmantel\nmantelet\nmanteline\nmantelletta\nmantellone\nmantelpiece\nmantelshelf\nmanteltree\nmanter\nmantes\nmantevil\nmantic\nmanticism\nmanticore\nmantid\nMantidae\nmantilla\nMantinean\nmantis\nMantisia\nMantispa\nmantispid\nMantispidae\nmantissa\nmantistic\nmantle\nmantled\nmantlet\nmantling\nManto\nmanto\nMantodea\nmantoid\nMantoidea\nmantologist\nmantology\nmantra\nmantrap\nmantua\nmantuamaker\nmantuamaking\nMantuan\nMantzu\nmanual\nmanualii\nmanualism\nmanualist\nmanualiter\nmanually\nmanuao\nmanubrial\nmanubriated\nmanubrium\nmanucaption\nmanucaptor\nmanucapture\nmanucode\nManucodia\nmanucodiata\nmanuduce\nmanuduction\nmanuductor\nmanuductory\nManuel\nmanufactory\nmanufacturable\nmanufactural\nmanufacture\nmanufacturer\nmanufacturess\nmanuka\nmanul\nmanuma\nmanumea\nmanumisable\nmanumission\nmanumissive\nmanumit\nmanumitter\nmanumotive\nmanurable\nmanurage\nmanurance\nmanure\nmanureless\nmanurer\nmanurial\nmanurially\nmanus\nmanuscript\nmanuscriptal\nmanuscription\nmanuscriptural\nmanusina\nmanustupration\nmanutagi\nManvantara\nmanward\nmanwards\nmanway\nmanweed\nmanwise\nManx\nManxman\nManxwoman\nmany\nmanyberry\nManyema\nmanyfold\nmanyness\nmanyplies\nmanyroot\nmanyways\nmanywhere\nmanywise\nmanzana\nmanzanilla\nmanzanillo\nmanzanita\nManzas\nmanzil\nmao\nmaomao\nMaori\nMaoridom\nMaoriland\nMaorilander\nmap\nmapach\nmapau\nmaphrian\nmapland\nmaple\nmaplebush\nmapo\nmappable\nmapper\nMappila\nmappist\nmappy\nMapuche\nmapwise\nmaquahuitl\nmaquette\nmaqui\nMaquiritare\nmaquis\nMar\nmar\nMara\nmarabotin\nmarabou\nMarabout\nmarabuto\nmaraca\nMaracaibo\nmaracan\nmaracock\nmarae\nMaragato\nmarajuana\nmarakapas\nmaral\nmaranatha\nmarang\nMaranha\nMaranham\nMaranhao\nMaranta\nMarantaceae\nmarantaceous\nmarantic\nmarara\nmararie\nmarasca\nmaraschino\nmarasmic\nMarasmius\nmarasmoid\nmarasmous\nmarasmus\nMaratha\nMarathi\nmarathon\nmarathoner\nMarathonian\nMaratism\nMaratist\nMarattia\nMarattiaceae\nmarattiaceous\nMarattiales\nmaraud\nmarauder\nmaravedi\nMaravi\nmarbelize\nmarble\nmarbled\nmarblehead\nmarbleheader\nmarblehearted\nmarbleization\nmarbleize\nmarbleizer\nmarblelike\nmarbleness\nmarbler\nmarbles\nmarblewood\nmarbling\nmarblish\nmarbly\nmarbrinus\nMarc\nmarc\nMarcan\nmarcantant\nmarcasite\nmarcasitic\nmarcasitical\nMarcel\nmarcel\nmarceline\nMarcella\nmarcella\nmarceller\nMarcellian\nMarcellianism\nmarcello\nmarcescence\nmarcescent\nMarcgravia\nMarcgraviaceae\nmarcgraviaceous\nMarch\nmarch\nMarchantia\nMarchantiaceae\nmarchantiaceous\nMarchantiales\nmarcher\nmarchetto\nmarchioness\nmarchite\nmarchland\nmarchman\nMarchmont\nmarchpane\nMarci\nMarcia\nmarcid\nMarcionism\nMarcionist\nMarcionite\nMarcionitic\nMarcionitish\nMarcionitism\nMarcite\nMarco\nmarco\nMarcobrunner\nMarcomanni\nMarconi\nmarconi\nmarconigram\nmarconigraph\nmarconigraphy\nmarcor\nMarcos\nMarcosian\nmarcottage\nmardy\nmare\nmareblob\nMareca\nmarechal\nMarehan\nMarek\nmarekanite\nmaremma\nmaremmatic\nmaremmese\nmarengo\nmarennin\nMareotic\nMareotid\nMarfik\nmarfire\nmargarate\nMargarelon\nMargaret\nmargaric\nmargarin\nmargarine\nmargarita\nmargaritaceous\nmargarite\nmargaritiferous\nmargaritomancy\nMargarodes\nmargarodid\nMargarodinae\nmargarodite\nMargaropus\nmargarosanite\nmargay\nmarge\nmargeline\nmargent\nMargery\nMargie\nmargin\nmarginal\nmarginalia\nmarginality\nmarginalize\nmarginally\nmarginate\nmarginated\nmargination\nmargined\nMarginella\nMarginellidae\nmarginelliform\nmarginiform\nmargining\nmarginirostral\nmarginoplasty\nmargosa\nMargot\nmargravate\nmargrave\nmargravely\nmargravial\nmargraviate\nmargravine\nMarguerite\nmarguerite\nmarhala\nMarheshvan\nMari\nMaria\nmaria\nmarialite\nMariamman\nMarian\nMariana\nMarianic\nMarianne\nMarianolatrist\nMarianolatry\nmaricolous\nmarid\nMarie\nmariengroschen\nmarigenous\nmarigold\nmarigram\nmarigraph\nmarigraphic\nmarijuana\nmarikina\nMarilla\nMarilyn\nmarimba\nmarimonda\nmarina\nmarinade\nmarinate\nmarinated\nmarine\nmariner\nmarinheiro\nmarinist\nmarinorama\nMario\nmariola\nMariolater\nMariolatrous\nMariolatry\nMariology\nMarion\nmarionette\nMariou\nMariposan\nmariposite\nmaris\nmarish\nmarishness\nMarist\nmaritage\nmarital\nmaritality\nmaritally\nmariticidal\nmariticide\nMaritime\nmaritime\nmaritorious\nmariupolite\nmarjoram\nMarjorie\nMark\nmark\nmarka\nMarkab\nmarkdown\nMarkeb\nmarked\nmarkedly\nmarkedness\nmarker\nmarket\nmarketability\nmarketable\nmarketableness\nmarketably\nmarketeer\nmarketer\nmarketing\nmarketman\nmarketstead\nmarketwise\nmarkfieldite\nMarkgenossenschaft\nmarkhor\nmarking\nmarkka\nmarkless\nmarkman\nmarkmoot\nMarko\nmarkshot\nmarksman\nmarksmanly\nmarksmanship\nmarkswoman\nmarkup\nMarkus\nmarkweed\nmarkworthy\nmarl\nMarla\nmarlaceous\nmarlberry\nmarled\nMarlena\nmarler\nmarli\nmarlin\nmarline\nmarlinespike\nmarlite\nmarlitic\nmarllike\nmarlock\nMarlovian\nMarlowesque\nMarlowish\nMarlowism\nmarlpit\nmarly\nmarm\nmarmalade\nmarmalady\nMarmar\nmarmarization\nmarmarize\nmarmarosis\nmarmatite\nmarmelos\nmarmennill\nmarmit\nmarmite\nmarmolite\nmarmoraceous\nmarmorate\nmarmorated\nmarmoration\nmarmoreal\nmarmoreally\nmarmorean\nmarmoric\nMarmosa\nmarmose\nmarmoset\nmarmot\nMarmota\nMarnix\nmaro\nmarocain\nmarok\nMaronian\nMaronist\nMaronite\nmaroon\nmarooner\nmaroquin\nMarpessa\nmarplot\nmarplotry\nmarque\nmarquee\nMarquesan\nmarquess\nmarquetry\nmarquis\nmarquisal\nmarquisate\nmarquisdom\nmarquise\nmarquisette\nmarquisina\nmarquisotte\nmarquisship\nmarquito\nmarranism\nmarranize\nmarrano\nmarree\nMarrella\nmarrer\nmarriable\nmarriage\nmarriageability\nmarriageable\nmarriageableness\nmarriageproof\nmarried\nmarrier\nmarron\nmarrot\nmarrow\nmarrowbone\nmarrowed\nmarrowfat\nmarrowish\nmarrowless\nmarrowlike\nmarrowsky\nmarrowskyer\nmarrowy\nMarrubium\nMarrucinian\nmarry\nmarryer\nmarrying\nmarrymuffe\nMars\nMarsala\nMarsdenia\nmarseilles\nMarsh\nmarsh\nMarsha\nmarshal\nmarshalate\nmarshalcy\nmarshaler\nmarshaless\nMarshall\nmarshalman\nmarshalment\nMarshalsea\nmarshalship\nmarshberry\nmarshbuck\nmarshfire\nmarshflower\nmarshiness\nmarshite\nmarshland\nmarshlander\nmarshlike\nmarshlocks\nmarshman\nmarshwort\nmarshy\nMarsi\nMarsian\nMarsilea\nMarsileaceae\nmarsileaceous\nMarsilia\nMarsiliaceae\nmarsipobranch\nMarsipobranchia\nMarsipobranchiata\nmarsipobranchiate\nMarsipobranchii\nmarsoon\nMarspiter\nMarssonia\nMarssonina\nmarsupial\nMarsupialia\nmarsupialian\nmarsupialization\nmarsupialize\nmarsupian\nMarsupiata\nmarsupiate\nmarsupium\nMart\nmart\nmartagon\nmartel\nmarteline\nmartellate\nmartellato\nmarten\nmartensite\nmartensitic\nMartes\nmartext\nMartha\nmartial\nmartialism\nMartialist\nmartiality\nmartialization\nmartialize\nmartially\nmartialness\nMartian\nMartin\nmartin\nmartinet\nmartineta\nmartinetish\nmartinetishness\nmartinetism\nmartinetship\nMartinez\nmartingale\nmartinico\nMartinism\nMartinist\nMartinmas\nmartinoe\nmartite\nMartius\nmartlet\nMartu\nMarty\nMartyn\nMartynia\nMartyniaceae\nmartyniaceous\nmartyr\nmartyrdom\nmartyress\nmartyrium\nmartyrization\nmartyrize\nmartyrizer\nmartyrlike\nmartyrly\nmartyrolatry\nmartyrologic\nmartyrological\nmartyrologist\nmartyrologistic\nmartyrologium\nmartyrology\nmartyrship\nmartyry\nmaru\nmarvel\nmarvelment\nmarvelous\nmarvelously\nmarvelousness\nmarvelry\nmarver\nMarvin\nMarwari\nMarxian\nMarxianism\nMarxism\nMarxist\nMary\nmary\nmarybud\nMaryland\nMarylander\nMarylandian\nMarymass\nmarysole\nmarzipan\nmas\nmasa\nMasai\nMasanao\nMasanobu\nmasaridid\nMasarididae\nMasaridinae\nMasaris\nmascagnine\nmascagnite\nmascally\nmascara\nmascaron\nmascled\nmascleless\nmascot\nmascotism\nmascotry\nMascouten\nmascularity\nmasculate\nmasculation\nmasculine\nmasculinely\nmasculineness\nmasculinism\nmasculinist\nmasculinity\nmasculinization\nmasculinize\nmasculist\nmasculofeminine\nmasculonucleus\nmasculy\nmasdeu\nMasdevallia\nmash\nmasha\nmashal\nmashallah\nmashelton\nmasher\nmashie\nmashing\nmashman\nMashona\nMashpee\nmashru\nmashy\nmasjid\nmask\nmasked\nMaskegon\nmaskelynite\nmasker\nmaskette\nmaskflower\nMaskins\nmasklike\nMaskoi\nmaskoid\nmaslin\nmasochism\nmasochist\nmasochistic\nMason\nmason\nmasoned\nmasoner\nmasonic\nMasonite\nmasonite\nmasonry\nmasonwork\nmasooka\nmasoola\nMasora\nMasorete\nMasoreth\nMasoretic\nMaspiter\nmasque\nmasquer\nmasquerade\nmasquerader\nMass\nmass\nmassa\nmassacre\nmassacrer\nmassage\nmassager\nmassageuse\nmassagist\nMassalia\nMassalian\nmassaranduba\nmassasauga\nmasse\nmassebah\nmassecuite\nmassedly\nmassedness\nMassekhoth\nmassel\nmasser\nmasseter\nmasseteric\nmasseur\nmasseuse\nmassicot\nmassier\nmassiest\nmassif\nMassilia\nMassilian\nmassily\nmassiness\nmassive\nmassively\nmassiveness\nmassivity\nmasskanne\nmassless\nmasslike\nMassmonger\nmassotherapy\nmassoy\nmassula\nmassy\nmast\nmastaba\nmastadenitis\nmastadenoma\nmastage\nmastalgia\nmastatrophia\nmastatrophy\nmastauxe\nmastax\nmastectomy\nmasted\nmaster\nmasterable\nmasterate\nmasterdom\nmasterer\nmasterful\nmasterfully\nmasterfulness\nmasterhood\nmasterless\nmasterlessness\nmasterlike\nmasterlily\nmasterliness\nmasterling\nmasterly\nmasterman\nmastermind\nmasterous\nmasterpiece\nmasterproof\nmastership\nmasterwork\nmasterwort\nmastery\nmastful\nmasthead\nmasthelcosis\nmastic\nmasticability\nmasticable\nmasticate\nmastication\nmasticator\nmasticatory\nmastiche\nmasticic\nMasticura\nmasticurous\nmastiff\nMastigamoeba\nmastigate\nmastigium\nmastigobranchia\nmastigobranchial\nMastigophora\nmastigophoran\nmastigophoric\nmastigophorous\nmastigopod\nMastigopoda\nmastigopodous\nmastigote\nmastigure\nmasting\nmastitis\nmastless\nmastlike\nmastman\nmastocarcinoma\nmastoccipital\nmastochondroma\nmastochondrosis\nmastodon\nmastodonsaurian\nMastodonsaurus\nmastodont\nmastodontic\nMastodontidae\nmastodontine\nmastodontoid\nmastodynia\nmastoid\nmastoidal\nmastoidale\nmastoideal\nmastoidean\nmastoidectomy\nmastoideocentesis\nmastoideosquamous\nmastoiditis\nmastoidohumeral\nmastoidohumeralis\nmastoidotomy\nmastological\nmastologist\nmastology\nmastomenia\nmastoncus\nmastooccipital\nmastoparietal\nmastopathy\nmastopexy\nmastoplastia\nmastorrhagia\nmastoscirrhus\nmastosquamose\nmastotomy\nmastotympanic\nmasturbate\nmasturbation\nmasturbational\nmasturbator\nmasturbatory\nmastwood\nmasty\nmasu\nMasulipatam\nmasurium\nMat\nmat\nMatabele\nMatacan\nmatachin\nmatachina\nmataco\nmatadero\nmatador\nmataeological\nmataeologue\nmataeology\nMatagalpa\nMatagalpan\nmatagory\nmatagouri\nmatai\nmatajuelo\nmatalan\nmatamata\nmatamoro\nmatanza\nmatapan\nmatapi\nMatar\nmatara\nMatatua\nMatawan\nmatax\nmatboard\nmatch\nmatchable\nmatchableness\nmatchably\nmatchboard\nmatchboarding\nmatchbook\nmatchbox\nmatchcloth\nmatchcoat\nmatcher\nmatching\nmatchless\nmatchlessly\nmatchlessness\nmatchlock\nmatchmaker\nmatchmaking\nmatchmark\nMatchotic\nmatchsafe\nmatchstick\nmatchwood\nmatchy\nmate\nmategriffon\nmatehood\nmateless\nmatelessness\nmatelote\nmately\nmater\nmaterfamilias\nmaterial\nmaterialism\nmaterialist\nmaterialistic\nmaterialistical\nmaterialistically\nmateriality\nmaterialization\nmaterialize\nmaterializee\nmaterializer\nmaterially\nmaterialman\nmaterialness\nmateriate\nmateriation\nmateriel\nmaternal\nmaternality\nmaternalize\nmaternally\nmaternalness\nmaternity\nmaternology\nmateship\nmatey\nmatezite\nmatfelon\nmatgrass\nmath\nmathematic\nmathematical\nmathematically\nmathematicals\nmathematician\nmathematicize\nmathematics\nmathematize\nmathemeg\nmathes\nmathesis\nmathetic\nMathurin\nmatico\nmatildite\nmatin\nmatinal\nmatinee\nmating\nmatins\nmatipo\nmatka\nmatless\nmatlockite\nmatlow\nmatmaker\nmatmaking\nmatra\nmatral\nMatralia\nmatranee\nmatrass\nmatreed\nmatriarch\nmatriarchal\nmatriarchalism\nmatriarchate\nmatriarchic\nmatriarchist\nmatriarchy\nmatric\nmatrical\nMatricaria\nmatrices\nmatricidal\nmatricide\nmatricula\nmatriculable\nmatriculant\nmatricular\nmatriculate\nmatriculation\nmatriculator\nmatriculatory\nMatrigan\nmatriheritage\nmatriherital\nmatrilineal\nmatrilineally\nmatrilinear\nmatrilinearism\nmatriliny\nmatrilocal\nmatrimonial\nmatrimonially\nmatrimonious\nmatrimoniously\nmatrimony\nmatriotism\nmatripotestal\nmatris\nmatrix\nmatroclinic\nmatroclinous\nmatrocliny\nmatron\nmatronage\nmatronal\nMatronalia\nmatronhood\nmatronism\nmatronize\nmatronlike\nmatronliness\nmatronly\nmatronship\nmatronymic\nmatross\nMats\nmatsu\nmatsuri\nMatt\nmatta\nmattamore\nMattapony\nmattaro\nmattboard\nmatte\nmatted\nmattedly\nmattedness\nmatter\nmatterate\nmatterative\nmatterful\nmatterfulness\nmatterless\nmattery\nMatteuccia\nMatthaean\nMatthew\nMatthias\nMatthieu\nMatthiola\nMatti\nmatti\nmatting\nmattock\nmattoid\nmattoir\nmattress\nmattulla\nMatty\nmaturable\nmaturate\nmaturation\nmaturative\nmature\nmaturely\nmaturement\nmatureness\nmaturer\nmaturescence\nmaturescent\nmaturing\nmaturish\nmaturity\nmatutinal\nmatutinally\nmatutinary\nmatutine\nmatutinely\nmatweed\nmaty\nmatzo\nmatzoon\nmatzos\nmatzoth\nmau\nmaucherite\nMaud\nmaud\nmaudle\nmaudlin\nmaudlinism\nmaudlinize\nmaudlinly\nmaudlinwort\nmauger\nmaugh\nMaugis\nmaul\nMaulawiyah\nmauler\nmauley\nmauling\nmaulstick\nMaumee\nmaumet\nmaumetry\nMaun\nmaun\nmaund\nmaunder\nmaunderer\nmaundful\nmaundy\nmaunge\nMaurandia\nMaureen\nMauretanian\nMauri\nMaurice\nMaurist\nMauritia\nMauritian\nMauser\nmausolea\nmausoleal\nmausolean\nmausoleum\nmauther\nmauve\nmauveine\nmauvette\nmauvine\nmaux\nmaverick\nmavis\nMavortian\nmavournin\nmavrodaphne\nmaw\nmawbound\nmawk\nmawkish\nmawkishly\nmawkishness\nmawky\nmawp\nMax\nmaxilla\nmaxillar\nmaxillary\nmaxilliferous\nmaxilliform\nmaxilliped\nmaxillipedary\nmaxillodental\nmaxillofacial\nmaxillojugal\nmaxillolabial\nmaxillomandibular\nmaxillopalatal\nmaxillopalatine\nmaxillopharyngeal\nmaxillopremaxillary\nmaxilloturbinal\nmaxillozygomatic\nmaxim\nmaxima\nmaximal\nMaximalism\nMaximalist\nmaximally\nmaximate\nmaximation\nmaximed\nmaximist\nmaximistic\nmaximite\nmaximization\nmaximize\nmaximizer\nMaximon\nmaximum\nmaximus\nmaxixe\nmaxwell\nMay\nmay\nMaya\nmaya\nMayaca\nMayacaceae\nmayacaceous\nMayan\nMayance\nMayathan\nmaybe\nMaybird\nMaybloom\nmaybush\nMaycock\nmaycock\nMayda\nmayday\nMayer\nMayey\nMayeye\nMayfair\nmayfish\nMayflower\nMayfowl\nmayhap\nmayhappen\nmayhem\nMaying\nMaylike\nmaynt\nMayo\nMayologist\nmayonnaise\nmayor\nmayoral\nmayoralty\nmayoress\nmayorship\nMayoruna\nMaypole\nMaypoling\nmaypop\nmaysin\nmayten\nMaytenus\nMaythorn\nMaytide\nMaytime\nmayweed\nMaywings\nMaywort\nmaza\nmazalgia\nMazama\nmazame\nMazanderani\nmazapilite\nmazard\nmazarine\nMazatec\nMazateco\nMazda\nMazdaism\nMazdaist\nMazdakean\nMazdakite\nMazdean\nmaze\nmazed\nmazedly\nmazedness\nmazeful\nmazement\nmazer\nMazhabi\nmazic\nmazily\nmaziness\nmazocacothesis\nmazodynia\nmazolysis\nmazolytic\nmazopathia\nmazopathic\nmazopexy\nMazovian\nmazuca\nmazuma\nMazur\nMazurian\nmazurka\nmazut\nmazy\nmazzard\nMazzinian\nMazzinianism\nMazzinist\nmbalolo\nMbaya\nmbori\nMbuba\nMbunda\nMcintosh\nMckay\nMdewakanton\nme\nmeable\nmeaching\nmead\nmeader\nmeadow\nmeadowbur\nmeadowed\nmeadower\nmeadowing\nmeadowink\nmeadowland\nmeadowless\nmeadowsweet\nmeadowwort\nmeadowy\nmeadsman\nmeager\nmeagerly\nmeagerness\nmeagre\nmeak\nmeal\nmealable\nmealberry\nmealer\nmealies\nmealily\nmealiness\nmealless\nmealman\nmealmonger\nmealmouth\nmealmouthed\nmealproof\nmealtime\nmealy\nmealymouth\nmealymouthed\nmealymouthedly\nmealymouthedness\nmealywing\nmean\nmeander\nmeanderingly\nmeandrine\nmeandriniform\nmeandrite\nmeandrous\nmeaned\nmeaner\nmeaning\nmeaningful\nmeaningfully\nmeaningless\nmeaninglessly\nmeaninglessness\nmeaningly\nmeaningness\nmeanish\nmeanly\nmeanness\nmeant\nMeantes\nmeantone\nmeanwhile\nmease\nmeasle\nmeasled\nmeasledness\nmeasles\nmeaslesproof\nmeasly\nmeasondue\nmeasurability\nmeasurable\nmeasurableness\nmeasurably\nmeasuration\nmeasure\nmeasured\nmeasuredly\nmeasuredness\nmeasureless\nmeasurelessly\nmeasurelessness\nmeasurely\nmeasurement\nmeasurer\nmeasuring\nmeat\nmeatal\nmeatbird\nmeatcutter\nmeated\nmeathook\nmeatily\nmeatiness\nmeatless\nmeatman\nmeatometer\nmeatorrhaphy\nmeatoscope\nmeatoscopy\nmeatotome\nmeatotomy\nmeatus\nmeatworks\nmeaty\nMebsuta\nMecaptera\nmecate\nMecca\nMeccan\nMeccano\nMeccawee\nMechael\nmechanal\nmechanality\nmechanalize\nmechanic\nmechanical\nmechanicalism\nmechanicalist\nmechanicality\nmechanicalization\nmechanicalize\nmechanically\nmechanicalness\nmechanician\nmechanicochemical\nmechanicocorpuscular\nmechanicointellectual\nmechanicotherapy\nmechanics\nmechanism\nmechanist\nmechanistic\nmechanistically\nmechanization\nmechanize\nmechanizer\nmechanolater\nmechanology\nmechanomorphic\nmechanomorphism\nmechanotherapeutic\nmechanotherapeutics\nmechanotherapist\nmechanotherapy\nMechir\nMechitaristican\nMechlin\nmechoacan\nmeckelectomy\nMeckelian\nMecklenburgian\nmecodont\nMecodonta\nmecometer\nmecometry\nmecon\nmeconic\nmeconidium\nmeconin\nmeconioid\nmeconium\nmeconology\nmeconophagism\nmeconophagist\nMecoptera\nmecopteran\nmecopteron\nmecopterous\nmedal\nmedaled\nmedalet\nmedalist\nmedalize\nmedallary\nmedallic\nmedallically\nmedallion\nmedallionist\nmeddle\nmeddlecome\nmeddlement\nmeddler\nmeddlesome\nmeddlesomely\nmeddlesomeness\nmeddling\nmeddlingly\nMede\nMedellin\nMedeola\nMedia\nmedia\nmediacid\nmediacy\nmediad\nmediaevalize\nmediaevally\nmedial\nmedialization\nmedialize\nmedialkaline\nmedially\nMedian\nmedian\nmedianic\nmedianimic\nmedianimity\nmedianism\nmedianity\nmedianly\nmediant\nmediastinal\nmediastine\nmediastinitis\nmediastinotomy\nmediastinum\nmediate\nmediately\nmediateness\nmediating\nmediatingly\nmediation\nmediative\nmediatization\nmediatize\nmediator\nmediatorial\nmediatorialism\nmediatorially\nmediatorship\nmediatory\nmediatress\nmediatrice\nmediatrix\nMedic\nmedic\nmedicable\nMedicago\nmedical\nmedically\nmedicament\nmedicamental\nmedicamentally\nmedicamentary\nmedicamentation\nmedicamentous\nmedicaster\nmedicate\nmedication\nmedicative\nmedicator\nmedicatory\nMedicean\nMedici\nmedicinable\nmedicinableness\nmedicinal\nmedicinally\nmedicinalness\nmedicine\nmedicinelike\nmedicinemonger\nmediciner\nmedico\nmedicobotanical\nmedicochirurgic\nmedicochirurgical\nmedicodental\nmedicolegal\nmedicolegally\nmedicomania\nmedicomechanic\nmedicomechanical\nmedicomoral\nmedicophysical\nmedicopsychological\nmedicopsychology\nmedicostatistic\nmedicosurgical\nmedicotopographic\nmedicozoologic\nmediety\nMedieval\nmedieval\nmedievalism\nmedievalist\nmedievalistic\nmedievalize\nmedievally\nmedifixed\nmediglacial\nmedimn\nmedimno\nmedimnos\nmedimnus\nMedina\nMedinilla\nmedino\nmedio\nmedioanterior\nmediocarpal\nmedioccipital\nmediocre\nmediocrist\nmediocrity\nmediocubital\nmediodepressed\nmediodigital\nmediodorsal\nmediodorsally\nmediofrontal\nmediolateral\nmediopalatal\nmediopalatine\nmediopassive\nmediopectoral\nmedioperforate\nmediopontine\nmedioposterior\nmediosilicic\nmediostapedial\nmediotarsal\nmedioventral\nmedisance\nmedisect\nmedisection\nMedish\nMedism\nmeditant\nmeditate\nmeditating\nmeditatingly\nmeditation\nmeditationist\nmeditatist\nmeditative\nmeditatively\nmeditativeness\nmeditator\nmediterranean\nMediterraneanism\nMediterraneanization\nMediterraneanize\nmediterraneous\nmedithorax\nMeditrinalia\nmeditullium\nmedium\nmediumism\nmediumistic\nmediumization\nmediumize\nmediumship\nmedius\nMedize\nMedizer\nmedjidie\nmedlar\nmedley\nMedoc\nmedregal\nmedrick\nmedrinaque\nmedulla\nmedullar\nmedullary\nmedullate\nmedullated\nmedullation\nmedullispinal\nmedullitis\nmedullization\nmedullose\nMedusa\nMedusaean\nmedusal\nmedusalike\nmedusan\nmedusiferous\nmedusiform\nmedusoid\nmeebos\nmeece\nmeed\nmeedless\nMeehan\nmeek\nmeeken\nmeekhearted\nmeekheartedness\nmeekling\nmeekly\nmeekness\nMeekoceras\nMeeks\nmeered\nmeerkat\nmeerschaum\nmeese\nmeet\nmeetable\nmeeten\nmeeter\nmeeterly\nmeethelp\nmeethelper\nmeeting\nmeetinger\nmeetinghouse\nmeetly\nmeetness\nMeg\nmegabar\nmegacephalia\nmegacephalic\nmegacephaly\nmegacerine\nMegaceros\nmegacerotine\nMegachile\nmegachilid\nMegachilidae\nMegachiroptera\nmegachiropteran\nmegachiropterous\nmegacolon\nmegacosm\nmegacoulomb\nmegacycle\nmegadont\nMegadrili\nmegadynamics\nmegadyne\nMegaera\nmegaerg\nmegafarad\nmegafog\nmegagamete\nmegagametophyte\nmegajoule\nmegakaryocyte\nMegalactractus\nMegaladapis\nMegalaema\nMegalaemidae\nMegalania\nmegaleme\nMegalensian\nmegalerg\nMegalesia\nMegalesian\nmegalesthete\nmegalethoscope\nMegalichthyidae\nMegalichthys\nmegalith\nmegalithic\nMegalobatrachus\nmegaloblast\nmegaloblastic\nmegalocardia\nmegalocarpous\nmegalocephalia\nmegalocephalic\nmegalocephalous\nmegalocephaly\nMegaloceros\nmegalochirous\nmegalocornea\nmegalocyte\nmegalocytosis\nmegalodactylia\nmegalodactylism\nmegalodactylous\nMegalodon\nmegalodont\nmegalodontia\nMegalodontidae\nmegaloenteron\nmegalogastria\nmegaloglossia\nmegalograph\nmegalography\nmegalohepatia\nmegalokaryocyte\nmegalomania\nmegalomaniac\nmegalomaniacal\nmegalomelia\nMegalonychidae\nMegalonyx\nmegalopa\nmegalopenis\nmegalophonic\nmegalophonous\nmegalophthalmus\nmegalopia\nmegalopic\nMegalopidae\nMegalopinae\nmegalopine\nmegaloplastocyte\nmegalopolis\nmegalopolitan\nmegalopolitanism\nmegalopore\nmegalops\nmegalopsia\nMegaloptera\nMegalopyge\nMegalopygidae\nMegalornis\nMegalornithidae\nmegalosaur\nmegalosaurian\nMegalosauridae\nmegalosauroid\nMegalosaurus\nmegaloscope\nmegaloscopy\nmegalosphere\nmegalospheric\nmegalosplenia\nmegalosyndactyly\nmegaloureter\nMegaluridae\nMegamastictora\nmegamastictoral\nmegamere\nmegameter\nmegampere\nMeganeura\nMeganthropus\nmeganucleus\nmegaparsec\nmegaphone\nmegaphonic\nmegaphotographic\nmegaphotography\nmegaphyllous\nMegaphyton\nmegapod\nmegapode\nMegapodidae\nMegapodiidae\nMegapodius\nmegaprosopous\nMegaptera\nMegapterinae\nmegapterine\nMegarensian\nMegarhinus\nMegarhyssa\nMegarian\nMegarianism\nMegaric\nmegaron\nmegasclere\nmegascleric\nmegasclerous\nmegasclerum\nmegascope\nmegascopic\nmegascopical\nmegascopically\nmegaseism\nmegaseismic\nmegaseme\nMegasoma\nmegasporange\nmegasporangium\nmegaspore\nmegasporic\nmegasporophyll\nmegasynthetic\nmegathere\nmegatherian\nMegatheriidae\nmegatherine\nmegatherioid\nMegatherium\nmegatherm\nmegathermic\nmegatheroid\nmegaton\nmegatype\nmegatypy\nmegavolt\nmegawatt\nmegaweber\nmegazooid\nmegazoospore\nmegerg\nMeggy\nmegilp\nmegmho\nmegohm\nmegohmit\nmegohmmeter\nmegophthalmus\nmegotalc\nMegrel\nMegrez\nmegrim\nmegrimish\nmehalla\nmehari\nmeharist\nMehelya\nmehmandar\nMehrdad\nmehtar\nmehtarship\nMeibomia\nMeibomian\nmeile\nmein\nmeinie\nmeio\nmeiobar\nmeionite\nmeiophylly\nmeiosis\nmeiotaxy\nmeiotic\nMeissa\nMeistersinger\nmeith\nMeithei\nmeizoseismal\nmeizoseismic\nmejorana\nMekbuda\nMekhitarist\nmekometer\nmel\nmela\nmelaconite\nmelada\nmeladiorite\nmelagabbro\nmelagra\nmelagranite\nMelaleuca\nmelalgia\nmelam\nmelamed\nmelamine\nmelampodium\nMelampsora\nMelampsoraceae\nMelampus\nmelampyritol\nMelampyrum\nmelanagogal\nmelanagogue\nmelancholia\nmelancholiac\nmelancholic\nmelancholically\nmelancholily\nmelancholiness\nmelancholious\nmelancholiously\nmelancholiousness\nmelancholish\nmelancholist\nmelancholize\nmelancholomaniac\nmelancholy\nmelancholyish\nMelanchthonian\nMelanconiaceae\nmelanconiaceous\nMelanconiales\nMelanconium\nmelanemia\nmelanemic\nMelanesian\nmelange\nmelanger\nmelangeur\nMelania\nmelanian\nmelanic\nmelaniferous\nMelaniidae\nmelanilin\nmelaniline\nmelanin\nMelanippe\nMelanippus\nmelanism\nmelanistic\nmelanite\nmelanitic\nmelanize\nmelano\nmelanoblast\nmelanocarcinoma\nmelanocerite\nMelanochroi\nMelanochroid\nmelanochroite\nmelanochroous\nmelanocomous\nmelanocrate\nmelanocratic\nmelanocyte\nMelanodendron\nmelanoderma\nmelanodermia\nmelanodermic\nMelanogaster\nmelanogen\nMelanoi\nmelanoid\nmelanoidin\nmelanoma\nmelanopathia\nmelanopathy\nmelanophore\nmelanoplakia\nMelanoplus\nmelanorrhagia\nmelanorrhea\nMelanorrhoea\nmelanosarcoma\nmelanosarcomatosis\nmelanoscope\nmelanose\nmelanosed\nmelanosis\nmelanosity\nmelanospermous\nmelanotekite\nmelanotic\nmelanotrichous\nmelanous\nmelanterite\nMelanthaceae\nmelanthaceous\nMelanthium\nmelanure\nmelanuresis\nmelanuria\nmelanuric\nmelaphyre\nMelas\nmelasma\nmelasmic\nmelassigenic\nMelastoma\nMelastomaceae\nmelastomaceous\nmelastomad\nmelatope\nmelaxuma\nMelburnian\nMelcarth\nmelch\nMelchite\nMelchora\nmeld\nmelder\nmeldometer\nmeldrop\nmele\nMeleager\nMeleagridae\nMeleagrina\nMeleagrinae\nmeleagrine\nMeleagris\nmelebiose\nmelee\nmelena\nmelene\nmelenic\nMeles\nMeletian\nMeletski\nmelezitase\nmelezitose\nMelia\nMeliaceae\nmeliaceous\nMeliadus\nMelian\nMelianthaceae\nmelianthaceous\nMelianthus\nmeliatin\nmelibiose\nmelic\nMelica\nMelicent\nmelicera\nmeliceric\nmeliceris\nmelicerous\nMelicerta\nMelicertidae\nmelichrous\nmelicitose\nMelicocca\nmelicraton\nmelilite\nmelilitite\nmelilot\nMelilotus\nMelinae\nMelinda\nmeline\nMelinis\nmelinite\nMeliola\nmeliorability\nmeliorable\nmeliorant\nmeliorate\nmeliorater\nmelioration\nmeliorative\nmeliorator\nmeliorism\nmeliorist\nmelioristic\nmeliority\nmeliphagan\nMeliphagidae\nmeliphagidan\nmeliphagous\nmeliphanite\nMelipona\nMeliponinae\nmeliponine\nmelisma\nmelismatic\nmelismatics\nMelissa\nmelissyl\nmelissylic\nMelitaea\nmelitemia\nmelithemia\nmelitis\nmelitose\nmelitriose\nmelittologist\nmelittology\nmelituria\nmelituric\nmell\nmellaginous\nmellate\nmellay\nmelleous\nmeller\nMellifera\nmelliferous\nmellificate\nmellification\nmellifluence\nmellifluent\nmellifluently\nmellifluous\nmellifluously\nmellifluousness\nmellimide\nmellisonant\nmellisugent\nmellit\nmellitate\nmellite\nmellitic\nMellivora\nMellivorinae\nmellivorous\nmellon\nmellonides\nmellophone\nmellow\nmellowly\nmellowness\nmellowy\nmellsman\nMelocactus\nmelocoton\nmelodeon\nmelodia\nmelodial\nmelodially\nmelodic\nmelodica\nmelodically\nmelodicon\nmelodics\nmelodiograph\nmelodion\nmelodious\nmelodiously\nmelodiousness\nmelodism\nmelodist\nmelodize\nmelodizer\nmelodram\nmelodrama\nmelodramatic\nmelodramatical\nmelodramatically\nmelodramaticism\nmelodramatics\nmelodramatist\nmelodramatize\nmelodrame\nmelody\nmelodyless\nmeloe\nmelogram\nMelogrammataceae\nmelograph\nmelographic\nmeloid\nMeloidae\nmelologue\nMelolontha\nMelolonthidae\nmelolonthidan\nMelolonthides\nMelolonthinae\nmelolonthine\nmelomane\nmelomania\nmelomaniac\nmelomanic\nmelon\nmeloncus\nMelonechinus\nmelongena\nmelongrower\nmelonist\nmelonite\nMelonites\nmelonlike\nmelonmonger\nmelonry\nmelophone\nmelophonic\nmelophonist\nmelopiano\nmeloplast\nmeloplastic\nmeloplasty\nmelopoeia\nmelopoeic\nmelos\nmelosa\nMelospiza\nMelothria\nmelotragedy\nmelotragic\nmelotrope\nmelt\nmeltability\nmeltable\nmeltage\nmelted\nmeltedness\nmelteigite\nmelter\nmelters\nmelting\nmeltingly\nmeltingness\nmelton\nMeltonian\nMelungeon\nMelursus\nmem\nmember\nmembered\nmemberless\nmembership\nmembracid\nMembracidae\nmembracine\nmembral\nmembrally\nmembrana\nmembranaceous\nmembranaceously\nmembranate\nmembrane\nmembraned\nmembraneless\nmembranelike\nmembranelle\nmembraneous\nmembraniferous\nmembraniform\nmembranin\nMembranipora\nMembraniporidae\nmembranocalcareous\nmembranocartilaginous\nmembranocoriaceous\nmembranocorneous\nmembranogenic\nmembranoid\nmembranology\nmembranonervous\nmembranosis\nmembranous\nmembranously\nmembranula\nmembranule\nmembretto\nmemento\nmeminna\nMemnon\nMemnonian\nMemnonium\nmemo\nmemoir\nmemoirism\nmemoirist\nmemorabilia\nmemorability\nmemorable\nmemorableness\nmemorably\nmemoranda\nmemorandist\nmemorandize\nmemorandum\nmemorative\nmemoria\nmemorial\nmemorialist\nmemorialization\nmemorialize\nmemorializer\nmemorially\nmemoried\nmemorious\nmemorist\nmemorizable\nmemorization\nmemorize\nmemorizer\nmemory\nmemoryless\nMemphian\nMemphite\nmen\nmenaccanite\nmenaccanitic\nmenace\nmenaceable\nmenaceful\nmenacement\nmenacer\nmenacing\nmenacingly\nmenacme\nmenadione\nmenage\nmenagerie\nmenagerist\nmenald\nMenangkabau\nmenarche\nMenaspis\nmend\nmendable\nmendacious\nmendaciously\nmendaciousness\nmendacity\nMendaite\nMende\nmendee\nMendelian\nMendelianism\nMendelianist\nMendelism\nMendelist\nMendelize\nMendelssohnian\nMendelssohnic\nmendelyeevite\nmender\nMendi\nmendicancy\nmendicant\nmendicate\nmendication\nmendicity\nmending\nmendipite\nmendole\nmendozite\nmends\nmeneghinite\nmenfolk\nMenfra\nmeng\nMengwe\nmenhaden\nmenhir\nmenial\nmenialism\nmeniality\nmenially\nMenic\nmenilite\nmeningeal\nmeninges\nmeningic\nmeningina\nmeningism\nmeningitic\nmeningitis\nmeningocele\nmeningocephalitis\nmeningocerebritis\nmeningococcal\nmeningococcemia\nmeningococcic\nmeningococcus\nmeningocortical\nmeningoencephalitis\nmeningoencephalocele\nmeningomalacia\nmeningomyclitic\nmeningomyelitis\nmeningomyelocele\nmeningomyelorrhaphy\nmeningorachidian\nmeningoradicular\nmeningorhachidian\nmeningorrhagia\nmeningorrhea\nmeningorrhoea\nmeningosis\nmeningospinal\nmeningotyphoid\nmeninting\nmeninx\nmeniscal\nmeniscate\nmenisciform\nmeniscitis\nmeniscoid\nmeniscoidal\nMeniscotheriidae\nMeniscotherium\nmeniscus\nmenisperm\nMenispermaceae\nmenispermaceous\nmenispermine\nMenispermum\nMenkalinan\nMenkar\nMenkib\nmenkind\nmennom\nMennonist\nMennonite\nMenobranchidae\nMenobranchus\nmenognath\nmenognathous\nmenologium\nmenology\nmenometastasis\nMenominee\nmenopausal\nmenopause\nmenopausic\nmenophania\nmenoplania\nMenopoma\nMenorah\nMenorhyncha\nmenorhynchous\nmenorrhagia\nmenorrhagic\nmenorrhagy\nmenorrhea\nmenorrheic\nmenorrhoea\nmenorrhoeic\nmenoschesis\nmenoschetic\nmenosepsis\nmenostasia\nmenostasis\nmenostatic\nmenostaxis\nMenotyphla\nmenotyphlic\nmenoxenia\nmensa\nmensal\nmensalize\nmense\nmenseful\nmenseless\nmenses\nMenshevik\nMenshevism\nMenshevist\nmensk\nmenstrual\nmenstruant\nmenstruate\nmenstruation\nmenstruous\nmenstruousness\nmenstruum\nmensual\nmensurability\nmensurable\nmensurableness\nmensurably\nmensural\nmensuralist\nmensurate\nmensuration\nmensurational\nmensurative\nMent\nmentagra\nmental\nmentalis\nmentalism\nmentalist\nmentalistic\nmentality\nmentalization\nmentalize\nmentally\nmentary\nmentation\nMentha\nMenthaceae\nmenthaceous\nmenthadiene\nmenthane\nmenthene\nmenthenol\nmenthenone\nmenthol\nmentholated\nmenthone\nmenthyl\nmenticide\nmenticultural\nmenticulture\nmentiferous\nmentiform\nmentigerous\nmentimeter\nmentimutation\nmention\nmentionability\nmentionable\nmentionless\nmentoanterior\nmentobregmatic\nmentocondylial\nmentohyoid\nmentolabial\nmentomeckelian\nmentonniere\nmentoposterior\nmentor\nmentorial\nmentorism\nmentorship\nmentum\nMentzelia\nmenu\nMenura\nMenurae\nMenuridae\nmeny\nMenyanthaceae\nMenyanthaceous\nMenyanthes\nmenyie\nmenzie\nMenziesia\nMeo\nMephisto\nMephistophelean\nMephistopheleanly\nMephistopheles\nMephistophelic\nMephistophelistic\nmephitic\nmephitical\nMephitinae\nmephitine\nmephitis\nmephitism\nMer\nMerak\nmeralgia\nmeraline\nMerat\nMeratia\nmerbaby\nmercal\nmercantile\nmercantilely\nmercantilism\nmercantilist\nmercantilistic\nmercantility\nmercaptal\nmercaptan\nmercaptides\nmercaptids\nmercapto\nmercaptol\nmercaptole\nMercator\nMercatorial\nmercatorial\nMercedarian\nMercedes\nMercedinus\nMercedonius\nmercenarily\nmercenariness\nmercenary\nmercer\nmerceress\nmercerization\nmercerize\nmercerizer\nmercership\nmercery\nmerch\nmerchandisable\nmerchandise\nmerchandiser\nmerchant\nmerchantable\nmerchantableness\nmerchanter\nmerchanthood\nmerchantish\nmerchantlike\nmerchantly\nmerchantman\nmerchantry\nmerchantship\nmerchet\nMercian\nmerciful\nmercifully\nmercifulness\nmerciless\nmercilessly\nmercilessness\nmerciment\nmercurate\nmercuration\nMercurean\nmercurial\nMercurialis\nmercurialism\nmercuriality\nmercurialization\nmercurialize\nmercurially\nmercurialness\nmercuriamines\nmercuriammonium\nMercurian\nmercuriate\nmercuric\nmercuride\nmercurification\nmercurify\nMercurius\nmercurization\nmercurize\nMercurochrome\nmercurophen\nmercurous\nMercury\nmercy\nmercyproof\nmerdivorous\nmere\nMeredithian\nmerel\nmerely\nmerenchyma\nmerenchymatous\nmeresman\nmerestone\nmeretricious\nmeretriciously\nmeretriciousness\nmeretrix\nmerfold\nmerfolk\nmerganser\nmerge\nmergence\nmerger\nmergh\nMerginae\nMergulus\nMergus\nmeriah\nmericarp\nmerice\nMerida\nmeridian\nMeridion\nMeridionaceae\nMeridional\nmeridional\nmeridionality\nmeridionally\nmeril\nmeringue\nmeringued\nMerino\nMeriones\nmeriquinoid\nmeriquinoidal\nmeriquinone\nmeriquinonic\nmeriquinonoid\nmerism\nmerismatic\nmerismoid\nmerist\nmeristele\nmeristelic\nmeristem\nmeristematic\nmeristematically\nmeristic\nmeristically\nmeristogenous\nmerit\nmeritable\nmerited\nmeritedly\nmeriter\nmeritful\nmeritless\nmeritmonger\nmeritmongering\nmeritmongery\nmeritorious\nmeritoriously\nmeritoriousness\nmerk\nmerkhet\nmerkin\nmerl\nmerle\nmerlette\nmerlin\nmerlon\nMerlucciidae\nMerluccius\nmermaid\nmermaiden\nmerman\nMermis\nmermithaner\nmermithergate\nMermithidae\nmermithization\nmermithized\nmermithogyne\nMermnad\nMermnadae\nmermother\nmero\nmeroblastic\nmeroblastically\nmerocele\nmerocelic\nmerocerite\nmeroceritic\nmerocrystalline\nmerocyte\nMerodach\nmerogamy\nmerogastrula\nmerogenesis\nmerogenetic\nmerogenic\nmerognathite\nmerogonic\nmerogony\nmerohedral\nmerohedric\nmerohedrism\nmeroistic\nMeroitic\nmeromorphic\nMeromyaria\nmeromyarian\nmerop\nMerope\nMeropes\nmeropia\nMeropidae\nmeropidan\nmeroplankton\nmeroplanktonic\nmeropodite\nmeropoditic\nMerops\nmerorganization\nmerorganize\nmeros\nmerosomal\nMerosomata\nmerosomatous\nmerosome\nmerosthenic\nMerostomata\nmerostomatous\nmerostome\nmerostomous\nmerosymmetrical\nmerosymmetry\nmerosystematic\nmerotomize\nmerotomy\nmerotropism\nmerotropy\nMerovingian\nmeroxene\nMerozoa\nmerozoite\nmerpeople\nmerribauks\nmerribush\nMerril\nmerriless\nmerrily\nmerriment\nmerriness\nmerrow\nmerry\nmerrymake\nmerrymaker\nmerrymaking\nmerryman\nmerrymeeting\nmerrythought\nmerrytrotter\nmerrywing\nmerse\nMertensia\nMerton\nMerula\nmeruline\nmerulioid\nMerulius\nmerveileux\nmerwinite\nmerwoman\nMerychippus\nmerycism\nmerycismus\nMerycoidodon\nMerycoidodontidae\nMerycopotamidae\nMerycopotamus\nMes\nmesa\nmesabite\nmesaconate\nmesaconic\nmesad\nMesadenia\nmesadenia\nmesail\nmesal\nmesalike\nmesally\nmesameboid\nmesange\nmesaortitis\nmesaraic\nmesaraical\nmesarch\nmesarteritic\nmesarteritis\nMesartim\nmesaticephal\nmesaticephali\nmesaticephalic\nmesaticephalism\nmesaticephalous\nmesaticephaly\nmesatipellic\nmesatipelvic\nmesatiskelic\nmesaxonic\nmescal\nMescalero\nmescaline\nmescalism\nmesdames\nmese\nmesectoderm\nmesem\nMesembryanthemaceae\nMesembryanthemum\nmesembryo\nmesembryonic\nmesencephalic\nmesencephalon\nmesenchyma\nmesenchymal\nmesenchymatal\nmesenchymatic\nmesenchymatous\nmesenchyme\nmesendoderm\nmesenna\nmesenterial\nmesenteric\nmesenterical\nmesenterically\nmesenteriform\nmesenteriolum\nmesenteritic\nmesenteritis\nmesenteron\nmesenteronic\nmesentery\nmesentoderm\nmesepimeral\nmesepimeron\nmesepisternal\nmesepisternum\nmesepithelial\nmesepithelium\nmesethmoid\nmesethmoidal\nmesh\nMeshech\nmeshed\nmeshrabiyeh\nmeshwork\nmeshy\nmesiad\nmesial\nmesially\nmesian\nmesic\nmesically\nmesilla\nmesiobuccal\nmesiocervical\nmesioclusion\nmesiodistal\nmesiodistally\nmesiogingival\nmesioincisal\nmesiolabial\nmesiolingual\nmesion\nmesioocclusal\nmesiopulpal\nmesioversion\nMesitae\nMesites\nMesitidae\nmesitite\nmesityl\nmesitylene\nmesitylenic\nmesmerian\nmesmeric\nmesmerical\nmesmerically\nmesmerism\nmesmerist\nmesmerite\nmesmerizability\nmesmerizable\nmesmerization\nmesmerize\nmesmerizee\nmesmerizer\nmesmeromania\nmesmeromaniac\nmesnality\nmesnalty\nmesne\nmeso\nmesoappendicitis\nmesoappendix\nmesoarial\nmesoarium\nmesobar\nmesobenthos\nmesoblast\nmesoblastema\nmesoblastemic\nmesoblastic\nmesobranchial\nmesobregmate\nmesocaecal\nmesocaecum\nmesocardia\nmesocardium\nmesocarp\nmesocentrous\nmesocephal\nmesocephalic\nmesocephalism\nmesocephalon\nmesocephalous\nmesocephaly\nmesochilium\nmesochondrium\nmesochroic\nmesocoele\nmesocoelian\nmesocoelic\nmesocolic\nmesocolon\nmesocoracoid\nmesocranial\nmesocratic\nmesocuneiform\nmesode\nmesoderm\nmesodermal\nmesodermic\nMesodesma\nMesodesmatidae\nMesodesmidae\nMesodevonian\nMesodevonic\nmesodic\nmesodisilicic\nmesodont\nMesoenatides\nmesofurca\nmesofurcal\nmesogaster\nmesogastral\nmesogastric\nmesogastrium\nmesogloea\nmesogloeal\nmesognathic\nmesognathion\nmesognathism\nmesognathous\nmesognathy\nmesogyrate\nmesohepar\nMesohippus\nmesokurtic\nmesolabe\nmesole\nmesolecithal\nmesolimnion\nmesolite\nmesolithic\nmesologic\nmesological\nmesology\nmesomere\nmesomeric\nmesomerism\nmesometral\nmesometric\nmesometrium\nmesomorph\nmesomorphic\nmesomorphous\nmesomorphy\nMesomyodi\nmesomyodian\nmesomyodous\nmeson\nmesonasal\nMesonemertini\nmesonephric\nmesonephridium\nmesonephritic\nmesonephros\nmesonic\nmesonotal\nmesonotum\nMesonychidae\nMesonyx\nmesoparapteral\nmesoparapteron\nmesopectus\nmesoperiodic\nmesopetalum\nmesophile\nmesophilic\nmesophilous\nmesophragm\nmesophragma\nmesophragmal\nmesophryon\nmesophyll\nmesophyllous\nmesophyllum\nmesophyte\nmesophytic\nmesophytism\nmesopic\nmesoplankton\nmesoplanktonic\nmesoplast\nmesoplastic\nmesoplastral\nmesoplastron\nmesopleural\nmesopleuron\nMesoplodon\nmesoplodont\nmesopodial\nmesopodiale\nmesopodium\nmesopotamia\nMesopotamian\nmesopotamic\nmesoprescutal\nmesoprescutum\nmesoprosopic\nmesopterygial\nmesopterygium\nmesopterygoid\nmesorchial\nmesorchium\nMesore\nmesorectal\nmesorectum\nMesoreodon\nmesorrhin\nmesorrhinal\nmesorrhinian\nmesorrhinism\nmesorrhinium\nmesorrhiny\nmesosalpinx\nmesosaur\nMesosauria\nMesosaurus\nmesoscapula\nmesoscapular\nmesoscutal\nmesoscutellar\nmesoscutellum\nmesoscutum\nmesoseismal\nmesoseme\nmesosiderite\nmesosigmoid\nmesoskelic\nmesosoma\nmesosomatic\nmesosome\nmesosperm\nmesospore\nmesosporic\nmesosporium\nmesostasis\nmesosternal\nmesosternebra\nmesosternebral\nmesosternum\nmesostethium\nMesostoma\nMesostomatidae\nmesostomid\nmesostyle\nmesostylous\nMesosuchia\nmesosuchian\nMesotaeniaceae\nMesotaeniales\nmesotarsal\nmesotartaric\nMesothelae\nmesothelial\nmesothelium\nmesotherm\nmesothermal\nmesothesis\nmesothet\nmesothetic\nmesothetical\nmesothoracic\nmesothoracotheca\nmesothorax\nmesothorium\nmesotonic\nmesotroch\nmesotrocha\nmesotrochal\nmesotrochous\nmesotron\nmesotropic\nmesotympanic\nmesotype\nmesovarian\nmesovarium\nmesoventral\nmesoventrally\nmesoxalate\nmesoxalic\nmesoxalyl\nMesozoa\nmesozoan\nMesozoic\nmespil\nMespilus\nMespot\nmesquite\nMesropian\nmess\nmessage\nmessagery\nMessalian\nmessaline\nmessan\nMessapian\nmesse\nmesselite\nmessenger\nmessengership\nmesser\nmesset\nMessiah\nMessiahship\nMessianic\nMessianically\nmessianically\nMessianism\nMessianist\nMessianize\nMessias\nmessieurs\nmessily\nmessin\nMessines\nMessinese\nmessiness\nmessing\nmessman\nmessmate\nmessor\nmessroom\nmessrs\nmesstin\nmessuage\nmessy\nmestee\nmester\nmestiza\nmestizo\nmestome\nMesua\nMesvinian\nmesymnion\nmet\nmeta\nmetabasis\nmetabasite\nmetabatic\nmetabiological\nmetabiology\nmetabiosis\nmetabiotic\nmetabiotically\nmetabismuthic\nmetabisulphite\nmetabletic\nMetabola\nmetabola\nmetabole\nMetabolia\nmetabolian\nmetabolic\nmetabolism\nmetabolite\nmetabolizable\nmetabolize\nmetabolon\nmetabolous\nmetaboly\nmetaborate\nmetaboric\nmetabranchial\nmetabrushite\nmetabular\nmetacarpal\nmetacarpale\nmetacarpophalangeal\nmetacarpus\nmetacenter\nmetacentral\nmetacentric\nmetacentricity\nmetachemic\nmetachemistry\nMetachlamydeae\nmetachlamydeous\nmetachromasis\nmetachromatic\nmetachromatin\nmetachromatinic\nmetachromatism\nmetachrome\nmetachronism\nmetachrosis\nmetacinnabarite\nmetacism\nmetacismus\nmetaclase\nmetacneme\nmetacoele\nmetacoelia\nmetaconal\nmetacone\nmetaconid\nmetaconule\nmetacoracoid\nmetacrasis\nmetacresol\nmetacromial\nmetacromion\nmetacryst\nmetacyclic\nmetacymene\nmetad\nmetadiabase\nmetadiazine\nmetadiorite\nmetadiscoidal\nmetadromous\nmetafluidal\nmetaformaldehyde\nmetafulminuric\nmetagalactic\nmetagalaxy\nmetagaster\nmetagastric\nmetagastrula\nmetage\nMetageitnion\nmetagelatin\nmetagenesis\nmetagenetic\nmetagenetically\nmetagenic\nmetageometer\nmetageometrical\nmetageometry\nmetagnath\nmetagnathism\nmetagnathous\nmetagnomy\nmetagnostic\nmetagnosticism\nmetagram\nmetagrammatism\nmetagrammatize\nmetagraphic\nmetagraphy\nmetahewettite\nmetahydroxide\nmetaigneous\nmetainfective\nmetakinesis\nmetakinetic\nmetal\nmetalammonium\nmetalanguage\nmetalbumin\nmetalcraft\nmetaldehyde\nmetalepsis\nmetaleptic\nmetaleptical\nmetaleptically\nmetaler\nmetaline\nmetalined\nmetaling\nmetalinguistic\nmetalinguistics\nmetalism\nmetalist\nmetalization\nmetalize\nmetallary\nmetalleity\nmetallic\nmetallical\nmetallically\nmetallicity\nmetallicize\nmetallicly\nmetallics\nmetallide\nmetallifacture\nmetalliferous\nmetallification\nmetalliform\nmetallify\nmetallik\nmetalline\nmetallism\nmetallization\nmetallize\nmetallochrome\nmetallochromy\nmetallogenetic\nmetallogenic\nmetallogeny\nmetallograph\nmetallographer\nmetallographic\nmetallographical\nmetallographist\nmetallography\nmetalloid\nmetalloidal\nmetallometer\nmetallophone\nmetalloplastic\nmetallorganic\nmetallotherapeutic\nmetallotherapy\nmetallurgic\nmetallurgical\nmetallurgically\nmetallurgist\nmetallurgy\nmetalmonger\nmetalogic\nmetalogical\nmetaloph\nmetalorganic\nmetaloscope\nmetaloscopy\nmetaluminate\nmetaluminic\nmetalware\nmetalwork\nmetalworker\nmetalworking\nmetalworks\nmetamathematical\nmetamathematics\nmetamer\nmetameral\nmetamere\nmetameric\nmetamerically\nmetameride\nmetamerism\nmetamerization\nmetamerized\nmetamerous\nmetamery\nmetamorphic\nmetamorphism\nmetamorphize\nmetamorphopsia\nmetamorphopsy\nmetamorphosable\nmetamorphose\nmetamorphoser\nmetamorphoses\nmetamorphosian\nmetamorphosic\nmetamorphosical\nmetamorphosis\nmetamorphostical\nmetamorphotic\nmetamorphous\nmetamorphy\nMetamynodon\nmetanalysis\nmetanauplius\nMetanemertini\nmetanephric\nmetanephritic\nmetanephron\nmetanephros\nmetanepionic\nmetanilic\nmetanitroaniline\nmetanomen\nmetanotal\nmetanotum\nmetantimonate\nmetantimonic\nmetantimonious\nmetantimonite\nmetantimonous\nmetanym\nmetaorganism\nmetaparapteral\nmetaparapteron\nmetapectic\nmetapectus\nmetapepsis\nmetapeptone\nmetaperiodic\nmetaphase\nmetaphenomenal\nmetaphenomenon\nmetaphenylene\nmetaphenylenediamin\nmetaphenylenediamine\nmetaphloem\nmetaphonical\nmetaphonize\nmetaphony\nmetaphor\nmetaphoric\nmetaphorical\nmetaphorically\nmetaphoricalness\nmetaphorist\nmetaphorize\nmetaphosphate\nmetaphosphoric\nmetaphosphorous\nmetaphragm\nmetaphragmal\nmetaphrase\nmetaphrasis\nmetaphrast\nmetaphrastic\nmetaphrastical\nmetaphrastically\nmetaphyseal\nmetaphysic\nmetaphysical\nmetaphysically\nmetaphysician\nmetaphysicianism\nmetaphysicist\nmetaphysicize\nmetaphysicous\nmetaphysics\nmetaphysis\nmetaphyte\nmetaphytic\nmetaphyton\nmetaplasia\nmetaplasis\nmetaplasm\nmetaplasmic\nmetaplast\nmetaplastic\nmetapleural\nmetapleure\nmetapleuron\nmetaplumbate\nmetaplumbic\nmetapneumonic\nmetapneustic\nmetapodial\nmetapodiale\nmetapodium\nmetapolitic\nmetapolitical\nmetapolitician\nmetapolitics\nmetapophyseal\nmetapophysial\nmetapophysis\nmetapore\nmetapostscutellar\nmetapostscutellum\nmetaprescutal\nmetaprescutum\nmetaprotein\nmetapsychic\nmetapsychical\nmetapsychics\nmetapsychism\nmetapsychist\nmetapsychological\nmetapsychology\nmetapsychosis\nmetapterygial\nmetapterygium\nmetapterygoid\nmetarabic\nmetarhyolite\nmetarossite\nmetarsenic\nmetarsenious\nmetarsenite\nmetasaccharinic\nmetascutal\nmetascutellar\nmetascutellum\nmetascutum\nmetasedimentary\nmetasilicate\nmetasilicic\nmetasoma\nmetasomal\nmetasomasis\nmetasomatic\nmetasomatism\nmetasomatosis\nmetasome\nmetasperm\nMetaspermae\nmetaspermic\nmetaspermous\nmetastability\nmetastable\nmetastannate\nmetastannic\nmetastasis\nmetastasize\nmetastatic\nmetastatical\nmetastatically\nmetasternal\nmetasternum\nmetasthenic\nmetastibnite\nmetastigmate\nmetastoma\nmetastome\nmetastrophe\nmetastrophic\nmetastyle\nmetatantalic\nmetatarsal\nmetatarsale\nmetatarse\nmetatarsophalangeal\nmetatarsus\nmetatatic\nmetatatically\nmetataxic\nmetate\nmetathalamus\nmetatheology\nMetatheria\nmetatherian\nmetatheses\nmetathesis\nmetathetic\nmetathetical\nmetathetically\nmetathoracic\nmetathorax\nmetatitanate\nmetatitanic\nmetatoluic\nmetatoluidine\nmetatracheal\nmetatrophic\nmetatungstic\nmetatype\nmetatypic\nMetaurus\nmetavanadate\nmetavanadic\nmetavauxite\nmetavoltine\nmetaxenia\nmetaxite\nmetaxylem\nmetaxylene\nmetayer\nMetazoa\nmetazoal\nmetazoan\nmetazoea\nmetazoic\nmetazoon\nmete\nmetel\nmetempiric\nmetempirical\nmetempirically\nmetempiricism\nmetempiricist\nmetempirics\nmetempsychic\nmetempsychosal\nmetempsychose\nmetempsychoses\nmetempsychosical\nmetempsychosis\nmetempsychosize\nmetemptosis\nmetencephalic\nmetencephalon\nmetensarcosis\nmetensomatosis\nmetenteron\nmetenteronic\nmeteogram\nmeteograph\nmeteor\nmeteorgraph\nmeteoric\nmeteorical\nmeteorically\nmeteorism\nmeteorist\nmeteoristic\nmeteorital\nmeteorite\nmeteoritic\nmeteoritics\nmeteorization\nmeteorize\nmeteorlike\nmeteorogram\nmeteorograph\nmeteorographic\nmeteorography\nmeteoroid\nmeteoroidal\nmeteorolite\nmeteorolitic\nmeteorologic\nmeteorological\nmeteorologically\nmeteorologist\nmeteorology\nmeteorometer\nmeteoroscope\nmeteoroscopy\nmeteorous\nmetepencephalic\nmetepencephalon\nmetepimeral\nmetepimeron\nmetepisternal\nmetepisternum\nmeter\nmeterage\nmetergram\nmeterless\nmeterman\nmetership\nmetestick\nmetewand\nmeteyard\nmethacrylate\nmethacrylic\nmethadone\nmethanal\nmethanate\nmethane\nmethanoic\nmethanolysis\nmethanometer\nmetheglin\nmethemoglobin\nmethemoglobinemia\nmethemoglobinuria\nmethenamine\nmethene\nmethenyl\nmether\nmethid\nmethide\nmethine\nmethinks\nmethiodide\nmethionic\nmethionine\nmethobromide\nmethod\nmethodaster\nmethodeutic\nmethodic\nmethodical\nmethodically\nmethodicalness\nmethodics\nmethodism\nMethodist\nmethodist\nMethodistic\nMethodistically\nMethodisty\nmethodization\nMethodize\nmethodize\nmethodizer\nmethodless\nmethodological\nmethodologically\nmethodologist\nmethodology\nMethody\nmethought\nmethoxide\nmethoxychlor\nmethoxyl\nmethronic\nMethuselah\nmethyl\nmethylacetanilide\nmethylal\nmethylamine\nmethylaniline\nmethylanthracene\nmethylate\nmethylation\nmethylator\nmethylcholanthrene\nmethylene\nmethylenimine\nmethylenitan\nmethylethylacetic\nmethylglycine\nmethylglycocoll\nmethylglyoxal\nmethylic\nmethylmalonic\nmethylnaphthalene\nmethylol\nmethylolurea\nmethylosis\nmethylotic\nmethylpentose\nmethylpentoses\nmethylpropane\nmethylsulfanol\nmetic\nmeticulosity\nmeticulous\nmeticulously\nmeticulousness\nmetier\nMetin\nmetis\nMetoac\nmetochous\nmetochy\nmetoestrous\nmetoestrum\nMetol\nmetonym\nmetonymic\nmetonymical\nmetonymically\nmetonymous\nmetonymously\nmetonymy\nmetope\nMetopias\nmetopic\nmetopion\nmetopism\nMetopoceros\nmetopomancy\nmetopon\nmetoposcopic\nmetoposcopical\nmetoposcopist\nmetoposcopy\nmetosteal\nmetosteon\nmetoxazine\nmetoxenous\nmetoxeny\nmetra\nmetralgia\nmetranate\nmetranemia\nmetratonia\nMetrazol\nmetrectasia\nmetrectatic\nmetrectomy\nmetrectopia\nmetrectopic\nmetrectopy\nmetreless\nmetreship\nmetreta\nmetrete\nmetretes\nmetria\nmetric\nmetrical\nmetrically\nmetrician\nmetricism\nmetricist\nmetricize\nmetrics\nMetridium\nmetrification\nmetrifier\nmetrify\nmetriocephalic\nmetrist\nmetritis\nmetrocampsis\nmetrocarat\nmetrocarcinoma\nmetrocele\nmetroclyst\nmetrocolpocele\nmetrocracy\nmetrocratic\nmetrocystosis\nmetrodynia\nmetrofibroma\nmetrological\nmetrologist\nmetrologue\nmetrology\nmetrolymphangitis\nmetromalacia\nmetromalacoma\nmetromalacosis\nmetromania\nmetromaniac\nmetromaniacal\nmetrometer\nmetroneuria\nmetronome\nmetronomic\nmetronomical\nmetronomically\nmetronymic\nmetronymy\nmetroparalysis\nmetropathia\nmetropathic\nmetropathy\nmetroperitonitis\nmetrophlebitis\nmetrophotography\nmetropole\nmetropolis\nmetropolitan\nmetropolitanate\nmetropolitancy\nmetropolitanism\nmetropolitanize\nmetropolitanship\nmetropolite\nmetropolitic\nmetropolitical\nmetropolitically\nmetroptosia\nmetroptosis\nmetroradioscope\nmetrorrhagia\nmetrorrhagic\nmetrorrhea\nmetrorrhexis\nmetrorthosis\nmetrosalpingitis\nmetrosalpinx\nmetroscirrhus\nmetroscope\nmetroscopy\nMetrosideros\nmetrostaxis\nmetrostenosis\nmetrosteresis\nmetrostyle\nmetrosynizesis\nmetrotherapist\nmetrotherapy\nmetrotome\nmetrotomy\nMetroxylon\nmettar\nmettle\nmettled\nmettlesome\nmettlesomely\nmettlesomeness\nmetusia\nmetze\nMeum\nmeuse\nmeute\nMev\nmew\nmeward\nmewer\nmewl\nmewler\nMexica\nMexican\nMexicanize\nMexitl\nMexitli\nmeyerhofferite\nmezcal\nMezentian\nMezentism\nMezentius\nmezereon\nmezereum\nmezuzah\nmezzanine\nmezzo\nmezzograph\nmezzotint\nmezzotinter\nmezzotinto\nmho\nmhometer\nmi\nMiami\nmiamia\nmian\nMiao\nMiaotse\nMiaotze\nmiaow\nmiaower\nMiaplacidus\nmiargyrite\nmiarolitic\nmias\nmiaskite\nmiasm\nmiasma\nmiasmal\nmiasmata\nmiasmatic\nmiasmatical\nmiasmatically\nmiasmatize\nmiasmatology\nmiasmatous\nmiasmic\nmiasmology\nmiasmous\nMiastor\nmiaul\nmiauler\nmib\nmica\nmicaceous\nmicacious\nmicacite\nMicah\nmicasization\nmicasize\nmicate\nmication\nMicawberish\nMicawberism\nmice\nmicellar\nmicelle\nMichabo\nMichabou\nMichael\nMichaelites\nMichaelmas\nMichaelmastide\nmiche\nMicheal\nMichel\nMichelangelesque\nMichelangelism\nMichelia\nMichelle\nmicher\nMichiel\nMichigamea\nMichigan\nmichigan\nMichigander\nMichiganite\nmiching\nMichoacan\nMichoacano\nmicht\nMick\nmick\nMickey\nmickle\nMicky\nMicmac\nmico\nmiconcave\nMiconia\nmicramock\nMicrampelis\nmicranatomy\nmicrander\nmicrandrous\nmicraner\nmicranthropos\nMicraster\nmicrencephalia\nmicrencephalic\nmicrencephalous\nmicrencephalus\nmicrencephaly\nmicrergate\nmicresthete\nmicrify\nmicro\nmicroammeter\nmicroampere\nmicroanalysis\nmicroanalyst\nmicroanalytical\nmicroangstrom\nmicroapparatus\nmicrobal\nmicrobalance\nmicrobar\nmicrobarograph\nmicrobattery\nmicrobe\nmicrobeless\nmicrobeproof\nmicrobial\nmicrobian\nmicrobic\nmicrobicidal\nmicrobicide\nmicrobiologic\nmicrobiological\nmicrobiologically\nmicrobiologist\nmicrobiology\nmicrobion\nmicrobiosis\nmicrobiota\nmicrobiotic\nmicrobious\nmicrobism\nmicrobium\nmicroblast\nmicroblepharia\nmicroblepharism\nmicroblephary\nmicrobrachia\nmicrobrachius\nmicroburet\nmicroburette\nmicroburner\nmicrocaltrop\nmicrocardia\nmicrocardius\nmicrocarpous\nMicrocebus\nmicrocellular\nmicrocentrosome\nmicrocentrum\nmicrocephal\nmicrocephalia\nmicrocephalic\nmicrocephalism\nmicrocephalous\nmicrocephalus\nmicrocephaly\nmicroceratous\nmicrochaeta\nmicrocharacter\nmicrocheilia\nmicrocheiria\nmicrochemic\nmicrochemical\nmicrochemically\nmicrochemistry\nmicrochiria\nMicrochiroptera\nmicrochiropteran\nmicrochiropterous\nmicrochromosome\nmicrochronometer\nmicrocinema\nmicrocinematograph\nmicrocinematographic\nmicrocinematography\nMicrocitrus\nmicroclastic\nmicroclimate\nmicroclimatic\nmicroclimatologic\nmicroclimatological\nmicroclimatology\nmicrocline\nmicrocnemia\nmicrocoat\nmicrococcal\nMicrococceae\nMicrococcus\nmicrocoleoptera\nmicrocolon\nmicrocolorimeter\nmicrocolorimetric\nmicrocolorimetrically\nmicrocolorimetry\nmicrocolumnar\nmicrocombustion\nmicroconidial\nmicroconidium\nmicroconjugant\nMicroconodon\nmicroconstituent\nmicrocopy\nmicrocoria\nmicrocosm\nmicrocosmal\nmicrocosmian\nmicrocosmic\nmicrocosmical\nmicrocosmography\nmicrocosmology\nmicrocosmos\nmicrocosmus\nmicrocoulomb\nmicrocranous\nmicrocrith\nmicrocryptocrystalline\nmicrocrystal\nmicrocrystalline\nmicrocrystallogeny\nmicrocrystallography\nmicrocrystalloscopy\nmicrocurie\nMicrocyprini\nmicrocyst\nmicrocyte\nmicrocythemia\nmicrocytosis\nmicrodactylia\nmicrodactylism\nmicrodactylous\nmicrodentism\nmicrodentous\nmicrodetection\nmicrodetector\nmicrodetermination\nmicrodiactine\nmicrodissection\nmicrodistillation\nmicrodont\nmicrodontism\nmicrodontous\nmicrodose\nmicrodrawing\nMicrodrili\nmicrodrive\nmicroelectrode\nmicroelectrolysis\nmicroelectroscope\nmicroelement\nmicroerg\nmicroestimation\nmicroeutaxitic\nmicroevolution\nmicroexamination\nmicrofarad\nmicrofauna\nmicrofelsite\nmicrofelsitic\nmicrofilaria\nmicrofilm\nmicroflora\nmicrofluidal\nmicrofoliation\nmicrofossil\nmicrofungus\nmicrofurnace\nMicrogadus\nmicrogalvanometer\nmicrogamete\nmicrogametocyte\nmicrogametophyte\nmicrogamy\nMicrogaster\nmicrogastria\nMicrogastrinae\nmicrogastrine\nmicrogeological\nmicrogeologist\nmicrogeology\nmicrogilbert\nmicroglia\nmicroglossia\nmicrognathia\nmicrognathic\nmicrognathous\nmicrogonidial\nmicrogonidium\nmicrogram\nmicrogramme\nmicrogranite\nmicrogranitic\nmicrogranitoid\nmicrogranular\nmicrogranulitic\nmicrograph\nmicrographer\nmicrographic\nmicrographical\nmicrographically\nmicrographist\nmicrography\nmicrograver\nmicrogravimetric\nmicrogroove\nmicrogyne\nmicrogyria\nmicrohenry\nmicrohepatia\nmicrohistochemical\nmicrohistology\nmicrohm\nmicrohmmeter\nMicrohymenoptera\nmicrohymenopteron\nmicroinjection\nmicrojoule\nmicrolepidopter\nmicrolepidoptera\nmicrolepidopteran\nmicrolepidopterist\nmicrolepidopteron\nmicrolepidopterous\nmicroleukoblast\nmicrolevel\nmicrolite\nmicroliter\nmicrolith\nmicrolithic\nmicrolitic\nmicrologic\nmicrological\nmicrologically\nmicrologist\nmicrologue\nmicrology\nmicrolux\nmicromania\nmicromaniac\nmicromanipulation\nmicromanipulator\nmicromanometer\nMicromastictora\nmicromazia\nmicromeasurement\nmicromechanics\nmicromelia\nmicromelic\nmicromelus\nmicromembrane\nmicromeral\nmicromere\nMicromeria\nmicromeric\nmicromerism\nmicromeritic\nmicromeritics\nmicromesentery\nmicrometallographer\nmicrometallography\nmicrometallurgy\nmicrometer\nmicromethod\nmicrometrical\nmicrometrically\nmicrometry\nmicromicrofarad\nmicromicron\nmicromil\nmicromillimeter\nmicromineralogical\nmicromineralogy\nmicromorph\nmicromotion\nmicromotoscope\nmicromyelia\nmicromyeloblast\nmicron\nMicronesian\nmicronization\nmicronize\nmicronometer\nmicronuclear\nmicronucleus\nmicronutrient\nmicroorganic\nmicroorganism\nmicroorganismal\nmicropaleontology\nmicropantograph\nmicroparasite\nmicroparasitic\nmicropathological\nmicropathologist\nmicropathology\nmicropegmatite\nmicropegmatitic\nmicropenis\nmicroperthite\nmicroperthitic\nmicropetalous\nmicropetrography\nmicropetrologist\nmicropetrology\nmicrophage\nmicrophagocyte\nmicrophagous\nmicrophagy\nmicrophakia\nmicrophallus\nmicrophone\nmicrophonic\nmicrophonics\nmicrophonograph\nmicrophot\nmicrophotograph\nmicrophotographic\nmicrophotography\nmicrophotometer\nmicrophotoscope\nmicrophthalmia\nmicrophthalmic\nmicrophthalmos\nmicrophthalmus\nmicrophyllous\nmicrophysical\nmicrophysics\nmicrophysiography\nmicrophytal\nmicrophyte\nmicrophytic\nmicrophytology\nmicropia\nmicropin\nmicropipette\nmicroplakite\nmicroplankton\nmicroplastocyte\nmicroplastometer\nmicropodal\nMicropodi\nmicropodia\nMicropodidae\nMicropodiformes\nmicropoecilitic\nmicropoicilitic\nmicropoikilitic\nmicropolariscope\nmicropolarization\nmicropore\nmicroporosity\nmicroporous\nmicroporphyritic\nmicroprint\nmicroprojector\nmicropsia\nmicropsy\nmicropterism\nmicropterous\nMicropterus\nmicropterygid\nMicropterygidae\nmicropterygious\nMicropterygoidea\nMicropteryx\nMicropus\nmicropylar\nmicropyle\nmicropyrometer\nmicroradiometer\nmicroreaction\nmicrorefractometer\nmicrorhabdus\nmicrorheometer\nmicrorheometric\nmicrorheometrical\nMicrorhopias\nMicrosauria\nmicrosaurian\nmicrosclere\nmicrosclerous\nmicrosclerum\nmicroscopal\nmicroscope\nmicroscopial\nmicroscopic\nmicroscopical\nmicroscopically\nmicroscopics\nMicroscopid\nmicroscopist\nMicroscopium\nmicroscopize\nmicroscopy\nmicrosecond\nmicrosection\nmicroseism\nmicroseismic\nmicroseismical\nmicroseismograph\nmicroseismology\nmicroseismometer\nmicroseismometrograph\nmicroseismometry\nmicroseme\nmicroseptum\nmicrosmatic\nmicrosmatism\nmicrosoma\nmicrosomatous\nmicrosome\nmicrosomia\nmicrosommite\nMicrosorex\nmicrospecies\nmicrospectroscope\nmicrospectroscopic\nmicrospectroscopy\nMicrospermae\nmicrospermous\nMicrosphaera\nmicrosphaeric\nmicrosphere\nmicrospheric\nmicrospherulitic\nmicrosplanchnic\nmicrosplenia\nmicrosplenic\nmicrosporange\nmicrosporangium\nmicrospore\nmicrosporiasis\nmicrosporic\nMicrosporidia\nmicrosporidian\nMicrosporon\nmicrosporophore\nmicrosporophyll\nmicrosporosis\nmicrosporous\nMicrosporum\nmicrostat\nmicrosthene\nMicrosthenes\nmicrosthenic\nmicrostomatous\nmicrostome\nmicrostomia\nmicrostomous\nmicrostructural\nmicrostructure\nMicrostylis\nmicrostylospore\nmicrostylous\nmicrosublimation\nmicrotasimeter\nmicrotechnic\nmicrotechnique\nmicrotelephone\nmicrotelephonic\nMicrothelyphonida\nmicrotheos\nmicrotherm\nmicrothermic\nmicrothorax\nMicrothyriaceae\nmicrotia\nMicrotinae\nmicrotine\nmicrotitration\nmicrotome\nmicrotomic\nmicrotomical\nmicrotomist\nmicrotomy\nmicrotone\nMicrotus\nmicrotypal\nmicrotype\nmicrotypical\nmicrovolt\nmicrovolume\nmicrovolumetric\nmicrowatt\nmicrowave\nmicroweber\nmicrozoa\nmicrozoal\nmicrozoan\nmicrozoaria\nmicrozoarian\nmicrozoary\nmicrozoic\nmicrozone\nmicrozooid\nmicrozoology\nmicrozoon\nmicrozoospore\nmicrozyma\nmicrozyme\nmicrozymian\nmicrurgic\nmicrurgical\nmicrurgist\nmicrurgy\nMicrurus\nmiction\nmicturate\nmicturition\nmid\nmidafternoon\nmidautumn\nmidaxillary\nmidbrain\nmidday\nmidden\nmiddenstead\nmiddle\nmiddlebreaker\nmiddlebuster\nmiddleman\nmiddlemanism\nmiddlemanship\nmiddlemost\nmiddler\nmiddlesplitter\nmiddlewards\nmiddleway\nmiddleweight\nmiddlewoman\nmiddling\nmiddlingish\nmiddlingly\nmiddlingness\nmiddlings\nmiddorsal\nmiddy\nmide\nMider\nmidevening\nmidewiwin\nmidfacial\nmidforenoon\nmidfrontal\nmidge\nmidget\nmidgety\nmidgy\nmidheaven\nMidianite\nMidianitish\nMididae\nmidiron\nmidland\nMidlander\nMidlandize\nmidlandward\nmidlatitude\nmidleg\nmidlenting\nmidmain\nmidmandibular\nmidmonth\nmidmonthly\nmidmorn\nmidmorning\nmidmost\nmidnight\nmidnightly\nmidnoon\nmidparent\nmidparentage\nmidparental\nmidpit\nmidrange\nmidrash\nmidrashic\nmidrib\nmidribbed\nmidriff\nmids\nmidseason\nmidsentence\nmidship\nmidshipman\nmidshipmanship\nmidshipmite\nmidships\nmidspace\nmidst\nmidstory\nmidstout\nmidstream\nmidstreet\nmidstroke\nmidstyled\nmidsummer\nmidsummerish\nmidsummery\nmidtap\nmidvein\nmidverse\nmidward\nmidwatch\nmidway\nmidweek\nmidweekly\nMidwest\nMidwestern\nMidwesterner\nmidwestward\nmidwife\nmidwifery\nmidwinter\nmidwinterly\nmidwintry\nmidwise\nmidyear\nMiek\nmien\nmiersite\nMiescherian\nmiff\nmiffiness\nmiffy\nmig\nmight\nmightily\nmightiness\nmightless\nmightnt\nmighty\nmightyhearted\nmightyship\nmiglio\nmigmatite\nmigniardise\nmignon\nmignonette\nmignonne\nmignonness\nMigonitis\nmigraine\nmigrainoid\nmigrainous\nmigrant\nmigrate\nmigration\nmigrational\nmigrationist\nmigrative\nmigrator\nmigratorial\nmigratory\nMiguel\nmiharaite\nmihrab\nmijakite\nmijl\nmikado\nmikadoate\nmikadoism\nMikael\nMikania\nMikasuki\nMike\nmike\nMikey\nMiki\nmikie\nMikir\nMil\nmil\nmila\nmilady\nmilammeter\nMilan\nMilanese\nMilanion\nmilarite\nmilch\nmilcher\nmilchy\nmild\nmilden\nmilder\nmildew\nmildewer\nmildewy\nmildhearted\nmildheartedness\nmildish\nmildly\nmildness\nMildred\nmile\nmileage\nMiledh\nmilepost\nmiler\nMiles\nMilesian\nmilesima\nMilesius\nmilestone\nmileway\nmilfoil\nmilha\nmiliaceous\nmiliarensis\nmiliaria\nmiliarium\nmiliary\nMilicent\nmilieu\nMiliola\nmilioliform\nmilioline\nmiliolite\nmiliolitic\nmilitancy\nmilitant\nmilitantly\nmilitantness\nmilitarily\nmilitariness\nmilitarism\nmilitarist\nmilitaristic\nmilitaristically\nmilitarization\nmilitarize\nmilitary\nmilitaryism\nmilitaryment\nmilitaster\nmilitate\nmilitation\nmilitia\nmilitiaman\nmilitiate\nmilium\nmilk\nmilkbush\nmilken\nmilker\nmilkeress\nmilkfish\nmilkgrass\nmilkhouse\nmilkily\nmilkiness\nmilking\nmilkless\nmilklike\nmilkmaid\nmilkman\nmilkness\nmilkshed\nmilkshop\nmilksick\nmilksop\nmilksopism\nmilksoppery\nmilksopping\nmilksoppish\nmilksoppy\nmilkstone\nmilkweed\nmilkwood\nmilkwort\nmilky\nmill\nMilla\nmilla\nmillable\nmillage\nmillboard\nmillclapper\nmillcourse\nmilldam\nmille\nmilled\nmillefiori\nmilleflorous\nmillefoliate\nmillenarian\nmillenarianism\nmillenarist\nmillenary\nmillennia\nmillennial\nmillennialism\nmillennialist\nmillennially\nmillennian\nmillenniarism\nmillenniary\nmillennium\nmillepede\nMillepora\nmillepore\nmilleporiform\nmilleporine\nmilleporite\nmilleporous\nmillepunctate\nmiller\nmilleress\nmillering\nMillerism\nMillerite\nmillerite\nmillerole\nmillesimal\nmillesimally\nmillet\nMillettia\nmillfeed\nmillful\nmillhouse\nmilliad\nmilliammeter\nmilliamp\nmilliampere\nmilliamperemeter\nmilliangstrom\nmilliard\nmilliardaire\nmilliare\nmilliarium\nmilliary\nmillibar\nmillicron\nmillicurie\nMillie\nmillieme\nmilliequivalent\nmillifarad\nmillifold\nmilliform\nmilligal\nmilligrade\nmilligram\nmilligramage\nmillihenry\nmillilambert\nmillile\nmilliliter\nmillilux\nmillimeter\nmillimicron\nmillimolar\nmillimole\nmillincost\nmilline\nmilliner\nmillinerial\nmillinering\nmillinery\nmilling\nMillingtonia\nmillinormal\nmillinormality\nmillioctave\nmillioersted\nmillion\nmillionaire\nmillionairedom\nmillionairess\nmillionairish\nmillionairism\nmillionary\nmillioned\nmillioner\nmillionfold\nmillionism\nmillionist\nmillionize\nmillionocracy\nmillions\nmillionth\nmilliphot\nmillipoise\nmillisecond\nmillistere\nMillite\nmillithrum\nmillivolt\nmillivoltmeter\nmillman\nmillocracy\nmillocrat\nmillocratism\nmillosevichite\nmillowner\nmillpond\nmillpool\nmillpost\nmillrace\nmillrynd\nmillsite\nmillstock\nmillstone\nmillstream\nmilltail\nmillward\nmillwork\nmillworker\nmillwright\nmillwrighting\nMilly\nMilner\nmilner\nMilo\nmilo\nmilord\nmilpa\nmilreis\nmilsey\nmilsie\nmilt\nmilter\nmiltlike\nMiltonia\nMiltonian\nMiltonic\nMiltonically\nMiltonism\nMiltonist\nMiltonize\nMiltos\nmiltsick\nmiltwaste\nmilty\nMilvago\nMilvinae\nmilvine\nmilvinous\nMilvus\nmilzbrand\nmim\nmima\nmimbar\nmimble\nMimbreno\nMime\nmime\nmimeo\nmimeograph\nmimeographic\nmimeographically\nmimeographist\nmimer\nmimesis\nmimester\nmimetene\nmimetesite\nmimetic\nmimetical\nmimetically\nmimetism\nmimetite\nMimi\nmimiambi\nmimiambic\nmimiambics\nmimic\nmimical\nmimically\nmimicism\nmimicker\nmimicry\nMimidae\nMiminae\nmimine\nmiminypiminy\nmimly\nmimmation\nmimmest\nmimmock\nmimmocking\nmimmocky\nmimmood\nmimmoud\nmimmouthed\nmimmouthedness\nmimodrama\nmimographer\nmimography\nmimologist\nMimosa\nMimosaceae\nmimosaceous\nmimosis\nmimosite\nmimotype\nmimotypic\nmimp\nMimpei\nmimsey\nMimulus\nMimus\nMimusops\nmin\nMina\nmina\nminable\nminacious\nminaciously\nminaciousness\nminacity\nMinaean\nMinahassa\nMinahassan\nMinahassian\nminar\nminaret\nminareted\nminargent\nminasragrite\nminatorial\nminatorially\nminatorily\nminatory\nminaway\nmince\nmincemeat\nmincer\nminchery\nminchiate\nmincing\nmincingly\nmincingness\nMincopi\nMincopie\nmind\nminded\nMindel\nMindelian\nminder\nMindererus\nmindful\nmindfully\nmindfulness\nminding\nmindless\nmindlessly\nmindlessness\nmindsight\nmine\nmineowner\nminer\nmineragraphic\nmineragraphy\nmineraiogic\nmineral\nmineralizable\nmineralization\nmineralize\nmineralizer\nmineralogical\nmineralogically\nmineralogist\nmineralogize\nmineralogy\nMinerva\nminerval\nMinervan\nMinervic\nminery\nmines\nminette\nmineworker\nMing\nming\nminge\nmingelen\nmingle\nmingleable\nmingledly\nminglement\nmingler\nminglingly\nMingo\nMingrelian\nminguetite\nmingwort\nmingy\nminhag\nminhah\nminiaceous\nminiate\nminiator\nminiature\nminiaturist\nminibus\nminicam\nminicamera\nMiniconjou\nminienize\nminification\nminify\nminikin\nminikinly\nminim\nminima\nminimacid\nminimal\nminimalism\nMinimalist\nminimalkaline\nminimally\nminimetric\nminimifidian\nminimifidianism\nminimism\nminimistic\nMinimite\nminimitude\nminimization\nminimize\nminimizer\nminimum\nminimus\nminimuscular\nmining\nminion\nminionette\nminionism\nminionly\nminionship\nminish\nminisher\nminishment\nminister\nministeriable\nministerial\nministerialism\nministerialist\nministeriality\nministerially\nministerialness\nministerium\nministership\nministrable\nministrant\nministration\nministrative\nministrator\nministrer\nministress\nministry\nministryship\nminitant\nMinitari\nminium\nminiver\nminivet\nmink\nminkery\nminkish\nMinkopi\nMinnehaha\nminnesinger\nminnesong\nMinnesotan\nMinnetaree\nMinnie\nminnie\nminniebush\nminning\nminnow\nminny\nmino\nMinoan\nminoize\nminometer\nminor\nminorage\nminorate\nminoration\nMinorca\nMinorcan\nMinoress\nminoress\nMinorist\nMinorite\nminority\nminorship\nMinos\nminot\nMinotaur\nMinseito\nminsitive\nminster\nminsteryard\nminstrel\nminstreless\nminstrelship\nminstrelsy\nmint\nmintage\nMintaka\nmintbush\nminter\nmintmaker\nmintmaking\nmintman\nmintmaster\nminty\nminuend\nminuet\nminuetic\nminuetish\nminus\nminuscular\nminuscule\nminutary\nminutation\nminute\nminutely\nminuteman\nminuteness\nminuter\nminuthesis\nminutia\nminutiae\nminutial\nminutiose\nminutiously\nminutissimic\nminverite\nminx\nminxish\nminxishly\nminxishness\nminxship\nminy\nMinyadidae\nMinyae\nMinyan\nminyan\nMinyas\nmiocardia\nMiocene\nMiocenic\nMiohippus\nmiolithic\nmioplasmia\nmiothermic\nmiqra\nmiquelet\nmir\nMira\nMirabel\nMirabell\nmirabiliary\nMirabilis\nmirabilite\nMirac\nMirach\nmirach\nmiracidial\nmiracidium\nmiracle\nmiraclemonger\nmiraclemongering\nmiraclist\nmiraculist\nmiraculize\nmiraculosity\nmiraculous\nmiraculously\nmiraculousness\nmirador\nmirage\nmiragy\nMirak\nMiramolin\nMirana\nMiranda\nmirandous\nMiranha\nMiranhan\nmirate\nmirbane\nmird\nmirdaha\nmire\nmirepoix\nMirfak\nMiriam\nMiriamne\nmirid\nMiridae\nmirific\nmiriness\nmirish\nmirk\nmirkiness\nmirksome\nmirliton\nMiro\nmiro\nMirounga\nmirror\nmirrored\nmirrorize\nmirrorlike\nmirrorscope\nmirrory\nmirth\nmirthful\nmirthfully\nmirthfulness\nmirthless\nmirthlessly\nmirthlessness\nmirthsome\nmirthsomeness\nmiry\nmiryachit\nmirza\nmisaccent\nmisaccentuation\nmisachievement\nmisacknowledge\nmisact\nmisadapt\nmisadaptation\nmisadd\nmisaddress\nmisadjust\nmisadmeasurement\nmisadministration\nmisadvantage\nmisadventure\nmisadventurer\nmisadventurous\nmisadventurously\nmisadvertence\nmisadvice\nmisadvise\nmisadvised\nmisadvisedly\nmisadvisedness\nmisaffected\nmisaffection\nmisaffirm\nmisagent\nmisaim\nmisalienate\nmisalignment\nmisallegation\nmisallege\nmisalliance\nmisallotment\nmisallowance\nmisally\nmisalphabetize\nmisalter\nmisanalyze\nmisandry\nmisanswer\nmisanthrope\nmisanthropia\nmisanthropic\nmisanthropical\nmisanthropically\nmisanthropism\nmisanthropist\nmisanthropize\nmisanthropy\nmisapparel\nmisappear\nmisappearance\nmisappellation\nmisapplication\nmisapplier\nmisapply\nmisappoint\nmisappointment\nmisappraise\nmisappraisement\nmisappreciate\nmisappreciation\nmisappreciative\nmisapprehend\nmisapprehendingly\nmisapprehensible\nmisapprehension\nmisapprehensive\nmisapprehensively\nmisapprehensiveness\nmisappropriate\nmisappropriately\nmisappropriation\nmisarchism\nmisarchist\nmisarrange\nmisarrangement\nmisarray\nmisascribe\nmisascription\nmisasperse\nmisassay\nmisassent\nmisassert\nmisassign\nmisassociate\nmisassociation\nmisatone\nmisattend\nmisattribute\nmisattribution\nmisaunter\nmisauthorization\nmisauthorize\nmisaward\nmisbandage\nmisbaptize\nmisbecome\nmisbecoming\nmisbecomingly\nmisbecomingness\nmisbefitting\nmisbeget\nmisbegin\nmisbegotten\nmisbehave\nmisbehavior\nmisbeholden\nmisbelief\nmisbelieve\nmisbeliever\nmisbelievingly\nmisbelove\nmisbeseem\nmisbestow\nmisbestowal\nmisbetide\nmisbias\nmisbill\nmisbind\nmisbirth\nmisbode\nmisborn\nmisbrand\nmisbuild\nmisbusy\nmiscalculate\nmiscalculation\nmiscalculator\nmiscall\nmiscaller\nmiscanonize\nmiscarriage\nmiscarriageable\nmiscarry\nmiscast\nmiscasualty\nmisceability\nmiscegenate\nmiscegenation\nmiscegenationist\nmiscegenator\nmiscegenetic\nmiscegine\nmiscellanarian\nmiscellanea\nmiscellaneity\nmiscellaneous\nmiscellaneously\nmiscellaneousness\nmiscellanist\nmiscellany\nmischallenge\nmischance\nmischanceful\nmischancy\nmischaracterization\nmischaracterize\nmischarge\nmischief\nmischiefful\nmischieve\nmischievous\nmischievously\nmischievousness\nmischio\nmischoice\nmischoose\nmischristen\nmiscibility\nmiscible\nmiscipher\nmisclaim\nmisclaiming\nmisclass\nmisclassification\nmisclassify\nmiscognizant\nmiscoin\nmiscoinage\nmiscollocation\nmiscolor\nmiscoloration\nmiscommand\nmiscommit\nmiscommunicate\nmiscompare\nmiscomplacence\nmiscomplain\nmiscomplaint\nmiscompose\nmiscomprehend\nmiscomprehension\nmiscomputation\nmiscompute\nmisconceive\nmisconceiver\nmisconception\nmisconclusion\nmiscondition\nmisconduct\nmisconfer\nmisconfidence\nmisconfident\nmisconfiguration\nmisconjecture\nmisconjugate\nmisconjugation\nmisconjunction\nmisconsecrate\nmisconsequence\nmisconstitutional\nmisconstruable\nmisconstruct\nmisconstruction\nmisconstructive\nmisconstrue\nmisconstruer\nmiscontinuance\nmisconvenient\nmisconvey\nmiscook\nmiscookery\nmiscorrect\nmiscorrection\nmiscounsel\nmiscount\nmiscovet\nmiscreancy\nmiscreant\nmiscreate\nmiscreation\nmiscreative\nmiscreator\nmiscredited\nmiscredulity\nmiscreed\nmiscript\nmiscrop\nmiscue\nmiscultivated\nmisculture\nmiscurvature\nmiscut\nmisdate\nmisdateful\nmisdaub\nmisdeal\nmisdealer\nmisdecide\nmisdecision\nmisdeclaration\nmisdeclare\nmisdeed\nmisdeem\nmisdeemful\nmisdefine\nmisdeformed\nmisdeliver\nmisdelivery\nmisdemean\nmisdemeanant\nmisdemeanist\nmisdemeanor\nmisdentition\nmisderivation\nmisderive\nmisdescribe\nmisdescriber\nmisdescription\nmisdescriptive\nmisdesire\nmisdetermine\nmisdevise\nmisdevoted\nmisdevotion\nmisdiet\nmisdirect\nmisdirection\nmisdispose\nmisdisposition\nmisdistinguish\nmisdistribute\nmisdistribution\nmisdivide\nmisdivision\nmisdo\nmisdoer\nmisdoing\nmisdoubt\nmisdower\nmisdraw\nmisdread\nmisdrive\nmise\nmisease\nmisecclesiastic\nmisedit\nmiseducate\nmiseducation\nmiseducative\nmiseffect\nmisemphasis\nmisemphasize\nmisemploy\nmisemployment\nmisencourage\nmisendeavor\nmisenforce\nmisengrave\nmisenite\nmisenjoy\nmisenroll\nmisentitle\nmisenunciation\nMisenus\nmiser\nmiserabilism\nmiserabilist\nmiserabilistic\nmiserability\nmiserable\nmiserableness\nmiserably\nmiserdom\nmiserected\nMiserere\nmiserhood\nmisericord\nMisericordia\nmiserism\nmiserliness\nmiserly\nmisery\nmisesteem\nmisestimate\nmisestimation\nmisexample\nmisexecute\nmisexecution\nmisexpectation\nmisexpend\nmisexpenditure\nmisexplain\nmisexplanation\nmisexplication\nmisexposition\nmisexpound\nmisexpress\nmisexpression\nmisexpressive\nmisfaith\nmisfare\nmisfashion\nmisfather\nmisfault\nmisfeasance\nmisfeasor\nmisfeature\nmisfield\nmisfigure\nmisfile\nmisfire\nmisfit\nmisfond\nmisform\nmisformation\nmisfortunate\nmisfortunately\nmisfortune\nmisfortuned\nmisfortuner\nmisframe\nmisgauge\nmisgesture\nmisgive\nmisgiving\nmisgivingly\nmisgo\nmisgotten\nmisgovern\nmisgovernance\nmisgovernment\nmisgovernor\nmisgracious\nmisgraft\nmisgrave\nmisground\nmisgrow\nmisgrown\nmisgrowth\nmisguess\nmisguggle\nmisguidance\nmisguide\nmisguided\nmisguidedly\nmisguidedness\nmisguider\nmisguiding\nmisguidingly\nmishandle\nmishap\nmishappen\nMishikhwutmetunne\nmishmash\nmishmee\nMishmi\nMishnah\nMishnaic\nMishnic\nMishnical\nMishongnovi\nmisidentification\nmisidentify\nMisima\nmisimagination\nmisimagine\nmisimpression\nmisimprove\nmisimprovement\nmisimputation\nmisimpute\nmisincensed\nmisincite\nmisinclination\nmisincline\nmisinfer\nmisinference\nmisinflame\nmisinform\nmisinformant\nmisinformation\nmisinformer\nmisingenuity\nmisinspired\nmisinstruct\nmisinstruction\nmisinstructive\nmisintelligence\nmisintelligible\nmisintend\nmisintention\nmisinter\nmisinterment\nmisinterpret\nmisinterpretable\nmisinterpretation\nmisinterpreter\nmisintimation\nmisjoin\nmisjoinder\nmisjudge\nmisjudgement\nmisjudger\nmisjudgingly\nmisjudgment\nmiskeep\nmisken\nmiskenning\nmiskill\nmiskindle\nmisknow\nmisknowledge\nmisky\nmislabel\nmislabor\nmislanguage\nmislay\nmislayer\nmislead\nmisleadable\nmisleader\nmisleading\nmisleadingly\nmisleadingness\nmislear\nmisleared\nmislearn\nmisled\nmislest\nmislight\nmislike\nmisliken\nmislikeness\nmisliker\nmislikingly\nmislippen\nmislive\nmislocate\nmislocation\nmislodge\nmismade\nmismake\nmismanage\nmismanageable\nmismanagement\nmismanager\nmismarriage\nmismarry\nmismatch\nmismatchment\nmismate\nmismeasure\nmismeasurement\nmismenstruation\nmisminded\nmismingle\nmismotion\nmismove\nmisname\nmisnarrate\nmisnatured\nmisnavigation\nMisniac\nmisnomed\nmisnomer\nmisnumber\nmisnurture\nmisnutrition\nmisobedience\nmisobey\nmisobservance\nmisobserve\nmisocapnic\nmisocapnist\nmisocatholic\nmisoccupy\nmisogallic\nmisogamic\nmisogamist\nmisogamy\nmisogyne\nmisogynic\nmisogynical\nmisogynism\nmisogynist\nmisogynistic\nmisogynistical\nmisogynous\nmisogyny\nmisohellene\nmisologist\nmisology\nmisomath\nmisoneism\nmisoneist\nmisoneistic\nmisopaterist\nmisopedia\nmisopedism\nmisopedist\nmisopinion\nmisopolemical\nmisorder\nmisordination\nmisorganization\nmisorganize\nmisoscopist\nmisosophist\nmisosophy\nmisotheism\nmisotheist\nmisotheistic\nmisotramontanism\nmisotyranny\nmisoxene\nmisoxeny\nmispage\nmispagination\nmispaint\nmisparse\nmispart\nmispassion\nmispatch\nmispay\nmisperceive\nmisperception\nmisperform\nmisperformance\nmispersuade\nmisperuse\nmisphrase\nmispick\nmispickel\nmisplace\nmisplacement\nmisplant\nmisplay\nmisplead\nmispleading\nmisplease\nmispoint\nmispoise\nmispolicy\nmisposition\nmispossessed\nmispractice\nmispraise\nmisprejudiced\nmisprincipled\nmisprint\nmisprisal\nmisprision\nmisprize\nmisprizer\nmisproceeding\nmisproduce\nmisprofess\nmisprofessor\nmispronounce\nmispronouncement\nmispronunciation\nmisproportion\nmisproposal\nmispropose\nmisproud\nmisprovide\nmisprovidence\nmisprovoke\nmispunctuate\nmispunctuation\nmispurchase\nmispursuit\nmisput\nmisqualify\nmisquality\nmisquotation\nmisquote\nmisquoter\nmisraise\nmisrate\nmisread\nmisreader\nmisrealize\nmisreason\nmisreceive\nmisrecital\nmisrecite\nmisreckon\nmisrecognition\nmisrecognize\nmisrecollect\nmisrefer\nmisreference\nmisreflect\nmisreform\nmisregulate\nmisrehearsal\nmisrehearse\nmisrelate\nmisrelation\nmisreliance\nmisremember\nmisremembrance\nmisrender\nmisrepeat\nmisreport\nmisreporter\nmisreposed\nmisrepresent\nmisrepresentation\nmisrepresentative\nmisrepresenter\nmisreprint\nmisrepute\nmisresemblance\nmisresolved\nmisresult\nmisreward\nmisrhyme\nmisrhymer\nmisrule\nmiss\nmissable\nmissal\nmissay\nmissayer\nmisseem\nmissel\nmissemblance\nmissentence\nmisserve\nmisservice\nmisset\nmisshape\nmisshapen\nmisshapenly\nmisshapenness\nmisshood\nmissible\nmissile\nmissileproof\nmissiness\nmissing\nmissingly\nmission\nmissional\nmissionarize\nmissionary\nmissionaryship\nmissioner\nmissionize\nmissionizer\nmissis\nMissisauga\nmissish\nmissishness\nMississippi\nMississippian\nmissive\nmissmark\nmissment\nMissouri\nMissourian\nMissourianism\nmissourite\nmisspeak\nmisspeech\nmisspell\nmisspelling\nmisspend\nmisspender\nmisstate\nmisstatement\nmisstater\nmisstay\nmisstep\nmissuade\nmissuggestion\nmissummation\nmissuppose\nmissy\nmissyish\nmissyllabication\nmissyllabify\nmist\nmistakable\nmistakableness\nmistakably\nmistake\nmistakeful\nmistaken\nmistakenly\nmistakenness\nmistakeproof\nmistaker\nmistaking\nmistakingly\nmistassini\nmistaught\nmistbow\nmisteach\nmisteacher\nmisted\nmistell\nmistempered\nmistend\nmistendency\nMister\nmister\nmisterm\nmistetch\nmistfall\nmistflower\nmistful\nmisthink\nmisthought\nmisthread\nmisthrift\nmisthrive\nmisthrow\nmistic\nmistide\nmistify\nmistigris\nmistily\nmistime\nmistiness\nmistitle\nmistle\nmistless\nmistletoe\nmistone\nmistonusk\nmistook\nmistouch\nmistradition\nmistrain\nmistral\nmistranscribe\nmistranscript\nmistranscription\nmistranslate\nmistranslation\nmistreat\nmistreatment\nmistress\nmistressdom\nmistresshood\nmistressless\nmistressly\nmistrial\nmistrist\nmistrust\nmistruster\nmistrustful\nmistrustfully\nmistrustfulness\nmistrusting\nmistrustingly\nmistrustless\nmistry\nmistryst\nmisturn\nmistutor\nmisty\nmistyish\nmisunderstand\nmisunderstandable\nmisunderstander\nmisunderstanding\nmisunderstandingly\nmisunderstood\nmisunderstoodness\nmisura\nmisusage\nmisuse\nmisuseful\nmisusement\nmisuser\nmisusurped\nmisvaluation\nmisvalue\nmisventure\nmisventurous\nmisvouch\nmiswed\nmiswisdom\nmiswish\nmisword\nmisworship\nmisworshiper\nmisworshipper\nmiswrite\nmisyoke\nmiszealous\nMitakshara\nMitanni\nMitannian\nMitannish\nmitapsis\nMitch\nmitchboard\nMitchell\nMitchella\nmite\nMitella\nmiteproof\nmiter\nmitered\nmiterer\nmiterflower\nmiterwort\nMithra\nMithraea\nMithraeum\nMithraic\nMithraicism\nMithraicist\nMithraicize\nMithraism\nMithraist\nMithraistic\nMithraitic\nMithraize\nMithras\nMithratic\nMithriac\nmithridate\nMithridatic\nmithridatic\nmithridatism\nmithridatize\nmiticidal\nmiticide\nmitigable\nmitigant\nmitigate\nmitigatedly\nmitigation\nmitigative\nmitigator\nmitigatory\nmitis\nmitochondria\nmitochondrial\nmitogenetic\nmitome\nmitosis\nmitosome\nmitotic\nmitotically\nMitra\nmitra\nmitrailleuse\nmitral\nmitrate\nmitre\nmitrer\nMitridae\nmitriform\nMitsukurina\nMitsukurinidae\nmitsumata\nmitt\nmittelhand\nMittelmeer\nmitten\nmittened\nmittimus\nmitty\nMitu\nMitua\nmity\nmiurus\nmix\nmixable\nmixableness\nmixblood\nMixe\nmixed\nmixedly\nmixedness\nmixen\nmixer\nmixeress\nmixhill\nmixible\nmixite\nmixobarbaric\nmixochromosome\nMixodectes\nMixodectidae\nmixolydian\nmixoploid\nmixoploidy\nMixosaurus\nmixotrophic\nMixtec\nMixtecan\nmixtiform\nmixtilineal\nmixtilion\nmixtion\nmixture\nmixy\nMizar\nmizmaze\nMizpah\nMizraim\nmizzen\nmizzenmast\nmizzenmastman\nmizzentopman\nmizzle\nmizzler\nmizzly\nmizzonite\nmizzy\nmlechchha\nmneme\nmnemic\nMnemiopsis\nmnemonic\nmnemonical\nmnemonicalist\nmnemonically\nmnemonicon\nmnemonics\nmnemonism\nmnemonist\nmnemonization\nmnemonize\nMnemosyne\nmnemotechnic\nmnemotechnical\nmnemotechnics\nmnemotechnist\nmnemotechny\nmnesic\nmnestic\nMnevis\nMniaceae\nmniaceous\nmnioid\nMniotiltidae\nMnium\nMo\nmo\nMoabite\nMoabitess\nMoabitic\nMoabitish\nmoan\nmoanful\nmoanfully\nmoanification\nmoaning\nmoaningly\nmoanless\nMoaria\nMoarian\nmoat\nMoattalite\nmob\nmobable\nmobbable\nmobber\nmobbish\nmobbishly\nmobbishness\nmobbism\nmobbist\nmobby\nmobcap\nmobed\nmobile\nMobilian\nmobilianer\nmobiliary\nmobility\nmobilizable\nmobilization\nmobilize\nmobilometer\nmoble\nmoblike\nmobocracy\nmobocrat\nmobocratic\nmobocratical\nmobolatry\nmobproof\nmobship\nmobsman\nmobster\nMobula\nMobulidae\nmoccasin\nMocha\nmocha\nMochica\nmochras\nmock\nmockable\nmockado\nmockbird\nmocker\nmockernut\nmockery\nmockful\nmockfully\nmockground\nmockingbird\nmockingstock\nmocmain\nMocoa\nMocoan\nmocomoco\nmocuck\nMod\nmodal\nmodalism\nmodalist\nmodalistic\nmodality\nmodalize\nmodally\nmode\nmodel\nmodeler\nmodeless\nmodelessness\nmodeling\nmodelist\nmodeller\nmodelmaker\nmodelmaking\nmodena\nModenese\nmoderant\nmoderantism\nmoderantist\nmoderate\nmoderately\nmoderateness\nmoderation\nmoderationist\nmoderatism\nmoderatist\nmoderato\nmoderator\nmoderatorship\nmoderatrix\nModern\nmodern\nmoderner\nmodernicide\nmodernish\nmodernism\nmodernist\nmodernistic\nmodernity\nmodernizable\nmodernization\nmodernize\nmodernizer\nmodernly\nmodernness\nmodest\nmodestly\nmodestness\nmodesty\nmodiation\nmodicity\nmodicum\nmodifiability\nmodifiable\nmodifiableness\nmodifiably\nmodificability\nmodificable\nmodification\nmodificationist\nmodificative\nmodificator\nmodificatory\nmodifier\nmodify\nmodillion\nmodiolar\nModiolus\nmodiolus\nmodish\nmodishly\nmodishness\nmodist\nmodiste\nmodistry\nmodius\nModoc\nModred\nmodulability\nmodulant\nmodular\nmodulate\nmodulation\nmodulative\nmodulator\nmodulatory\nmodule\nModulidae\nmodulo\nmodulus\nmodumite\nMoe\nMoed\nMoehringia\nmoellon\nmoerithere\nmoeritherian\nMoeritheriidae\nMoeritherium\nmofette\nmoff\nmofussil\nmofussilite\nmog\nmogador\nmogadore\nmogdad\nmoggan\nmoggy\nMoghan\nmogigraphia\nmogigraphic\nmogigraphy\nmogilalia\nmogilalism\nmogiphonia\nmogitocia\nmogo\nmogographia\nMogollon\nMograbi\nMogrebbin\nmoguey\nMogul\nmogulship\nMoguntine\nmoha\nmohabat\nmohair\nMohammad\nMohammedan\nMohammedanism\nMohammedanization\nMohammedanize\nMohammedism\nMohammedist\nMohammedization\nMohammedize\nmohar\nMohave\nMohawk\nMohawkian\nmohawkite\nMohegan\nmohel\nMohican\nMohineyam\nmohnseed\nmoho\nMohock\nMohockism\nmohr\nMohrodendron\nmohur\nMoi\nmoider\nmoidore\nmoieter\nmoiety\nmoil\nmoiler\nmoiles\nmoiley\nmoiling\nmoilingly\nmoilsome\nmoineau\nMoingwena\nmoio\nMoira\nmoire\nmoirette\nmoise\nMoism\nmoissanite\nmoist\nmoisten\nmoistener\nmoistful\nmoistify\nmoistish\nmoistishness\nmoistless\nmoistly\nmoistness\nmoisture\nmoistureless\nmoistureproof\nmoisty\nmoit\nmoity\nmojarra\nMojo\nmojo\nmokaddam\nmoke\nmoki\nmokihana\nmoko\nmoksha\nmokum\nmoky\nMola\nmola\nmolal\nMolala\nmolality\nmolar\nmolariform\nmolarimeter\nmolarity\nmolary\nMolasse\nmolasses\nmolassied\nmolassy\nmolave\nmold\nmoldability\nmoldable\nmoldableness\nMoldavian\nmoldavite\nmoldboard\nmolder\nmoldery\nmoldiness\nmolding\nmoldmade\nmoldproof\nmoldwarp\nmoldy\nMole\nmole\nmolecast\nmolecula\nmolecular\nmolecularist\nmolecularity\nmolecularly\nmolecule\nmolehead\nmoleheap\nmolehill\nmolehillish\nmolehilly\nmoleism\nmolelike\nmolendinar\nmolendinary\nmolengraaffite\nmoleproof\nmoler\nmoleskin\nmolest\nmolestation\nmolester\nmolestful\nmolestfully\nMolge\nMolgula\nMolidae\nmolimen\nmoliminous\nmolinary\nmoline\nMolinia\nMolinism\nMolinist\nMolinistic\nmolka\nMoll\nmolland\nMollberg\nmolle\nmollescence\nmollescent\nmolleton\nmollichop\nmollicrush\nmollie\nmollienisia\nmollient\nmolliently\nmollifiable\nmollification\nmollifiedly\nmollifier\nmollify\nmollifying\nmollifyingly\nmollifyingness\nmolligrant\nmolligrubs\nmollipilose\nMollisiaceae\nmollisiose\nmollities\nmollitious\nmollitude\nMolluginaceae\nMollugo\nMollusca\nmolluscan\nmolluscivorous\nmolluscoid\nMolluscoida\nmolluscoidal\nmolluscoidan\nMolluscoidea\nmolluscoidean\nmolluscous\nmolluscousness\nmolluscum\nmollusk\nMolly\nmolly\nmollycoddle\nmollycoddler\nmollycoddling\nmollycosset\nmollycot\nmollyhawk\nmolman\nMoloch\nMolochize\nMolochship\nmoloid\nmoloker\nmolompi\nmolosse\nMolossian\nmolossic\nMolossidae\nmolossine\nmolossoid\nmolossus\nMolothrus\nmolpe\nmolrooken\nmolt\nmolten\nmoltenly\nmolter\nMolucca\nMoluccan\nMoluccella\nMoluche\nmoly\nmolybdate\nmolybdena\nmolybdenic\nmolybdeniferous\nmolybdenite\nmolybdenous\nmolybdenum\nmolybdic\nmolybdite\nmolybdocardialgia\nmolybdocolic\nmolybdodyspepsia\nmolybdomancy\nmolybdomenite\nmolybdonosus\nmolybdoparesis\nmolybdophyllite\nmolybdosis\nmolybdous\nmolysite\nmombin\nmomble\nMombottu\nmome\nmoment\nmomenta\nmomental\nmomentally\nmomentaneall\nmomentaneity\nmomentaneous\nmomentaneously\nmomentaneousness\nmomentarily\nmomentariness\nmomentary\nmomently\nmomentous\nmomentously\nmomentousness\nmomentum\nmomiology\nmomism\nmomme\nmommet\nmommy\nmomo\nMomordica\nMomotidae\nMomotinae\nMomotus\nMomus\nMon\nmon\nmona\nMonacan\nmonacanthid\nMonacanthidae\nmonacanthine\nmonacanthous\nMonacha\nmonachal\nmonachate\nMonachi\nmonachism\nmonachist\nmonachization\nmonachize\nmonactin\nmonactine\nmonactinellid\nmonactinellidan\nmonad\nmonadelph\nMonadelphia\nmonadelphian\nmonadelphous\nmonadic\nmonadical\nmonadically\nmonadiform\nmonadigerous\nMonadina\nmonadism\nmonadistic\nmonadnock\nmonadology\nmonaene\nmonal\nmonamniotic\nMonanday\nmonander\nMonandria\nmonandrian\nmonandric\nmonandrous\nmonandry\nmonanthous\nmonapsal\nmonarch\nmonarchal\nmonarchally\nmonarchess\nmonarchial\nmonarchian\nmonarchianism\nmonarchianist\nmonarchianistic\nmonarchic\nmonarchical\nmonarchically\nmonarchism\nmonarchist\nmonarchistic\nmonarchize\nmonarchizer\nmonarchlike\nmonarchomachic\nmonarchomachist\nmonarchy\nMonarda\nMonardella\nmonarthritis\nmonarticular\nmonas\nMonasa\nMonascidiae\nmonascidian\nmonase\nmonaster\nmonasterial\nmonasterially\nmonastery\nmonastic\nmonastical\nmonastically\nmonasticism\nmonasticize\nmonatomic\nmonatomicity\nmonatomism\nmonaulos\nmonaural\nmonaxial\nmonaxile\nmonaxon\nmonaxonial\nmonaxonic\nMonaxonida\nmonazine\nmonazite\nMonbuttu\nmonchiquite\nMonday\nMondayish\nMondayishness\nMondayland\nmone\nMonegasque\nMonel\nmonel\nmonembryary\nmonembryonic\nmonembryony\nmonepic\nmonepiscopacy\nmonepiscopal\nmoner\nMonera\nmoneral\nmoneran\nmonergic\nmonergism\nmonergist\nmonergistic\nmoneric\nmoneron\nMonerozoa\nmonerozoan\nmonerozoic\nmonerula\nMoneses\nmonesia\nmonetarily\nmonetary\nmonetite\nmonetization\nmonetize\nmoney\nmoneyage\nmoneybag\nmoneybags\nmoneyed\nmoneyer\nmoneyflower\nmoneygrub\nmoneygrubber\nmoneygrubbing\nmoneylender\nmoneylending\nmoneyless\nmoneymonger\nmoneymongering\nmoneysaving\nmoneywise\nmoneywort\nmong\nmongcorn\nmonger\nmongering\nmongery\nMonghol\nMongholian\nMongibel\nmongler\nMongo\nMongol\nMongolian\nMongolianism\nMongolic\nMongolioid\nMongolish\nMongolism\nMongolization\nMongolize\nMongoloid\nmongoose\nMongoyo\nmongrel\nmongreldom\nmongrelish\nmongrelism\nmongrelity\nmongrelization\nmongrelize\nmongrelly\nmongrelness\nmongst\nmonheimite\nmonial\nMonias\nMonica\nmoniker\nmonilated\nmonilethrix\nMonilia\nMoniliaceae\nmoniliaceous\nMoniliales\nmonilicorn\nmoniliform\nmoniliformly\nmonilioid\nmoniment\nMonimia\nMonimiaceae\nmonimiaceous\nmonimolite\nmonimostylic\nmonism\nmonist\nmonistic\nmonistical\nmonistically\nmonition\nmonitive\nmonitor\nmonitorial\nmonitorially\nmonitorish\nmonitorship\nmonitory\nmonitress\nmonitrix\nmonk\nmonkbird\nmonkcraft\nmonkdom\nmonkery\nmonkess\nmonkey\nmonkeyboard\nmonkeyface\nmonkeyfy\nmonkeyhood\nmonkeyish\nmonkeyishly\nmonkeyishness\nmonkeylike\nmonkeynut\nmonkeypod\nmonkeypot\nmonkeyry\nmonkeyshine\nmonkeytail\nmonkfish\nmonkflower\nmonkhood\nmonkish\nmonkishly\nmonkishness\nmonkism\nmonklike\nmonkliness\nmonkly\nmonkmonger\nmonkship\nmonkshood\nMonmouth\nmonmouthite\nmonny\nMono\nmono\nmonoacetate\nmonoacetin\nmonoacid\nmonoacidic\nmonoamide\nmonoamine\nmonoamino\nmonoammonium\nmonoazo\nmonobacillary\nmonobase\nmonobasic\nmonobasicity\nmonoblastic\nmonoblepsia\nmonoblepsis\nmonobloc\nmonobranchiate\nmonobromacetone\nmonobromated\nmonobromide\nmonobrominated\nmonobromination\nmonobromized\nmonobromoacetanilide\nmonobromoacetone\nmonobutyrin\nmonocalcium\nmonocarbide\nmonocarbonate\nmonocarbonic\nmonocarboxylic\nmonocardian\nmonocarp\nmonocarpal\nmonocarpellary\nmonocarpian\nmonocarpic\nmonocarpous\nmonocellular\nmonocentric\nmonocentrid\nMonocentridae\nMonocentris\nmonocentroid\nmonocephalous\nmonocercous\nmonoceros\nmonocerous\nmonochasial\nmonochasium\nMonochlamydeae\nmonochlamydeous\nmonochlor\nmonochloracetic\nmonochloranthracene\nmonochlorbenzene\nmonochloride\nmonochlorinated\nmonochlorination\nmonochloro\nmonochloroacetic\nmonochlorobenzene\nmonochloromethane\nmonochoanitic\nmonochord\nmonochordist\nmonochordize\nmonochroic\nmonochromasy\nmonochromat\nmonochromate\nmonochromatic\nmonochromatically\nmonochromatism\nmonochromator\nmonochrome\nmonochromic\nmonochromical\nmonochromically\nmonochromist\nmonochromous\nmonochromy\nmonochronic\nmonochronous\nmonociliated\nmonocle\nmonocled\nmonocleid\nmonoclinal\nmonoclinally\nmonocline\nmonoclinian\nmonoclinic\nmonoclinism\nmonoclinometric\nmonoclinous\nMonoclonius\nMonocoelia\nmonocoelian\nmonocoelic\nMonocondyla\nmonocondylar\nmonocondylian\nmonocondylic\nmonocondylous\nmonocormic\nmonocot\nmonocotyledon\nMonocotyledones\nmonocotyledonous\nmonocracy\nmonocrat\nmonocratic\nmonocrotic\nmonocrotism\nmonocular\nmonocularity\nmonocularly\nmonoculate\nmonocule\nmonoculist\nmonoculous\nmonocultural\nmonoculture\nmonoculus\nmonocyanogen\nmonocycle\nmonocyclic\nMonocyclica\nmonocystic\nMonocystidae\nMonocystidea\nMonocystis\nmonocyte\nmonocytic\nmonocytopoiesis\nmonodactyl\nmonodactylate\nmonodactyle\nmonodactylism\nmonodactylous\nmonodactyly\nmonodelph\nMonodelphia\nmonodelphian\nmonodelphic\nmonodelphous\nmonodermic\nmonodic\nmonodically\nmonodimetric\nmonodist\nmonodize\nmonodomous\nMonodon\nmonodont\nMonodonta\nmonodontal\nmonodram\nmonodrama\nmonodramatic\nmonodramatist\nmonodromic\nmonodromy\nmonody\nmonodynamic\nmonodynamism\nMonoecia\nmonoecian\nmonoecious\nmonoeciously\nmonoeciousness\nmonoecism\nmonoeidic\nmonoestrous\nmonoethanolamine\nmonoethylamine\nmonofilament\nmonofilm\nmonoflagellate\nmonoformin\nmonogamian\nmonogamic\nmonogamist\nmonogamistic\nmonogamous\nmonogamously\nmonogamousness\nmonogamy\nmonoganglionic\nmonogastric\nmonogene\nMonogenea\nmonogeneity\nmonogeneous\nmonogenesis\nmonogenesist\nmonogenesy\nmonogenetic\nMonogenetica\nmonogenic\nmonogenism\nmonogenist\nmonogenistic\nmonogenous\nmonogeny\nmonoglot\nmonoglycerid\nmonoglyceride\nmonogoneutic\nmonogonoporic\nmonogonoporous\nmonogony\nmonogram\nmonogrammatic\nmonogrammatical\nmonogrammed\nmonogrammic\nmonograph\nmonographer\nmonographic\nmonographical\nmonographically\nmonographist\nmonography\nmonograptid\nMonograptidae\nMonograptus\nmonogynic\nmonogynious\nmonogynist\nmonogynoecial\nmonogynous\nmonogyny\nmonohybrid\nmonohydrate\nmonohydrated\nmonohydric\nmonohydrogen\nmonohydroxy\nmonoicous\nmonoid\nmonoketone\nmonolater\nmonolatrist\nmonolatrous\nmonolatry\nmonolayer\nmonoline\nmonolingual\nmonolinguist\nmonoliteral\nmonolith\nmonolithal\nmonolithic\nmonolobular\nmonolocular\nmonologian\nmonologic\nmonological\nmonologist\nmonologize\nmonologue\nmonologuist\nmonology\nmonomachist\nmonomachy\nmonomania\nmonomaniac\nmonomaniacal\nmonomastigate\nmonomeniscous\nmonomer\nmonomeric\nmonomerous\nmonometallic\nmonometallism\nmonometallist\nmonometer\nmonomethyl\nmonomethylated\nmonomethylic\nmonometric\nmonometrical\nmonomial\nmonomict\nmonomineral\nmonomineralic\nmonomolecular\nmonomolybdate\nMonomorium\nmonomorphic\nmonomorphism\nmonomorphous\nMonomya\nMonomyaria\nmonomyarian\nmononaphthalene\nmononch\nMononchus\nmononeural\nMonongahela\nmononitrate\nmononitrated\nmononitration\nmononitride\nmononitrobenzene\nmononomial\nmononomian\nmonont\nmononuclear\nmononucleated\nmononucleosis\nmononychous\nmononym\nmononymic\nmononymization\nmononymize\nmononymy\nmonoousian\nmonoousious\nmonoparental\nmonoparesis\nmonoparesthesia\nmonopathic\nmonopathy\nmonopectinate\nmonopersonal\nmonopersulfuric\nmonopersulphuric\nMonopetalae\nmonopetalous\nmonophagism\nmonophagous\nmonophagy\nmonophase\nmonophasia\nmonophasic\nmonophobia\nmonophone\nmonophonic\nmonophonous\nmonophony\nmonophotal\nmonophote\nmonophthalmic\nmonophthalmus\nmonophthong\nmonophthongal\nmonophthongization\nmonophthongize\nmonophyletic\nmonophyleticism\nmonophylite\nmonophyllous\nmonophyodont\nmonophyodontism\nMonophysite\nMonophysitic\nMonophysitical\nMonophysitism\nmonopitch\nmonoplacula\nmonoplacular\nmonoplaculate\nmonoplane\nmonoplanist\nmonoplasmatic\nmonoplast\nmonoplastic\nmonoplegia\nmonoplegic\nMonopneumoa\nmonopneumonian\nmonopneumonous\nmonopode\nmonopodial\nmonopodially\nmonopodic\nmonopodium\nmonopodous\nmonopody\nmonopolar\nmonopolaric\nmonopolarity\nmonopole\nmonopolism\nmonopolist\nmonopolistic\nmonopolistically\nmonopolitical\nmonopolizable\nmonopolization\nmonopolize\nmonopolizer\nmonopolous\nmonopoly\nmonopolylogist\nmonopolylogue\nmonopotassium\nmonoprionid\nmonoprionidian\nmonopsonistic\nmonopsony\nmonopsychism\nmonopteral\nMonopteridae\nmonopteroid\nmonopteron\nmonopteros\nmonopterous\nmonoptic\nmonoptical\nmonoptote\nmonoptotic\nMonopylaea\nMonopylaria\nmonopylean\nmonopyrenous\nmonorail\nmonorailroad\nmonorailway\nmonorchid\nmonorchidism\nmonorchis\nmonorchism\nmonorganic\nMonorhina\nmonorhinal\nmonorhine\nmonorhyme\nmonorhymed\nmonorhythmic\nmonosaccharide\nmonosaccharose\nmonoschemic\nmonoscope\nmonose\nmonosemic\nmonosepalous\nmonoservice\nmonosilane\nmonosilicate\nmonosilicic\nmonosiphonic\nmonosiphonous\nmonosodium\nmonosomatic\nmonosomatous\nmonosome\nmonosomic\nmonosperm\nmonospermal\nmonospermic\nmonospermous\nmonospermy\nmonospherical\nmonospondylic\nmonosporangium\nmonospore\nmonospored\nmonosporiferous\nmonosporous\nmonostele\nmonostelic\nmonostelous\nmonostely\nmonostich\nmonostichous\nMonostomata\nMonostomatidae\nmonostomatous\nmonostome\nMonostomidae\nmonostomous\nMonostomum\nmonostromatic\nmonostrophe\nmonostrophic\nmonostrophics\nmonostylous\nmonosubstituted\nmonosubstitution\nmonosulfone\nmonosulfonic\nmonosulphide\nmonosulphone\nmonosulphonic\nmonosyllabic\nmonosyllabical\nmonosyllabically\nmonosyllabism\nmonosyllabize\nmonosyllable\nmonosymmetric\nmonosymmetrical\nmonosymmetrically\nmonosymmetry\nmonosynthetic\nmonotelephone\nmonotelephonic\nmonotellurite\nMonothalama\nmonothalamian\nmonothalamous\nmonothecal\nmonotheism\nmonotheist\nmonotheistic\nmonotheistical\nmonotheistically\nMonothelete\nMonotheletian\nMonotheletic\nMonotheletism\nmonothelious\nMonothelism\nMonothelitic\nMonothelitism\nmonothetic\nmonotic\nmonotint\nMonotocardia\nmonotocardiac\nmonotocardian\nmonotocous\nmonotomous\nmonotone\nmonotonic\nmonotonical\nmonotonically\nmonotonist\nmonotonize\nmonotonous\nmonotonously\nmonotonousness\nmonotony\nmonotremal\nMonotremata\nmonotremate\nmonotrematous\nmonotreme\nmonotremous\nmonotrichous\nmonotriglyph\nmonotriglyphic\nMonotrocha\nmonotrochal\nmonotrochian\nmonotrochous\nMonotropa\nMonotropaceae\nmonotropaceous\nmonotrophic\nmonotropic\nMonotropsis\nmonotropy\nmonotypal\nmonotype\nmonotypic\nmonotypical\nmonotypous\nmonoureide\nmonovalence\nmonovalency\nmonovalent\nmonovariant\nmonoverticillate\nmonovoltine\nmonovular\nmonoxenous\nmonoxide\nmonoxime\nmonoxyle\nmonoxylic\nmonoxylon\nmonoxylous\nMonozoa\nmonozoan\nmonozoic\nmonozygotic\nMonroeism\nMonroeist\nmonrolite\nmonseigneur\nmonsieur\nmonsieurship\nmonsignor\nmonsignorial\nMonsoni\nmonsoon\nmonsoonal\nmonsoonish\nmonsoonishly\nmonster\nMonstera\nmonsterhood\nmonsterlike\nmonstership\nmonstrance\nmonstrate\nmonstration\nmonstrator\nmonstricide\nmonstriferous\nmonstrification\nmonstrify\nmonstrosity\nmonstrous\nmonstrously\nmonstrousness\nMont\nmontage\nMontagnac\nMontagnais\nMontana\nmontana\nMontanan\nmontane\nmontanic\nmontanin\nMontanism\nMontanist\nMontanistic\nMontanistical\nmontanite\nMontanize\nmontant\nMontargis\nMontauk\nmontbretia\nmonte\nmontebrasite\nmonteith\nmontem\nMontenegrin\nMontepulciano\nMonterey\nMontes\nMontesco\nMontesinos\nMontessorian\nMontessorianism\nMontezuma\nmontgolfier\nmonth\nmonthly\nmonthon\nMontia\nmonticellite\nmonticle\nmonticoline\nmonticulate\nmonticule\nMonticulipora\nMonticuliporidae\nmonticuliporidean\nmonticuliporoid\nmonticulose\nmonticulous\nmonticulus\nmontiform\nmontigeneous\nmontilla\nmontjoy\nmontmartrite\nMontmorency\nmontmorilonite\nmonton\nMontrachet\nmontroydite\nMontu\nmonture\nMonty\nMonumbo\nmonument\nmonumental\nmonumentalism\nmonumentality\nmonumentalization\nmonumentalize\nmonumentally\nmonumentary\nmonumentless\nmonumentlike\nmonzodiorite\nmonzogabbro\nmonzonite\nmonzonitic\nmoo\nMooachaht\nmooch\nmoocha\nmoocher\nmoochulka\nmood\nmooder\nmoodily\nmoodiness\nmoodish\nmoodishly\nmoodishness\nmoodle\nmoody\nmooing\nmool\nmoolet\nmoolings\nmools\nmoolum\nmoon\nmoonack\nmoonbeam\nmoonbill\nmoonblink\nmooncalf\nmooncreeper\nmoondown\nmoondrop\nmooned\nmooner\nmoonery\nmooneye\nmoonface\nmoonfaced\nmoonfall\nmoonfish\nmoonflower\nmoonglade\nmoonglow\nmoonhead\nmoonily\nmooniness\nmooning\nmoonish\nmoonite\nmoonja\nmoonjah\nmoonless\nmoonlet\nmoonlight\nmoonlighted\nmoonlighter\nmoonlighting\nmoonlighty\nmoonlike\nmoonlikeness\nmoonlit\nmoonlitten\nmoonman\nmoonpath\nmoonpenny\nmoonproof\nmoonraker\nmoonraking\nmoonrise\nmoonsail\nmoonscape\nmoonseed\nmoonset\nmoonshade\nmoonshine\nmoonshiner\nmoonshining\nmoonshiny\nmoonsick\nmoonsickness\nmoonstone\nmoontide\nmoonwalker\nmoonwalking\nmoonward\nmoonwards\nmoonway\nmoonwort\nmoony\nmoop\nMoor\nmoor\nmoorage\nmoorball\nmoorband\nmoorberry\nmoorbird\nmoorburn\nmoorburner\nmoorburning\nMoore\nmoorflower\nmoorfowl\nmooring\nMoorish\nmoorish\nmoorishly\nmoorishness\nmoorland\nmoorlander\nMoorman\nmoorman\nmoorn\nmoorpan\nmoors\nMoorship\nmoorsman\nmoorstone\nmoortetter\nmoorup\nmoorwort\nmoory\nmoosa\nmoose\nmooseberry\nmoosebird\nmoosebush\nmoosecall\nmooseflower\nmoosehood\nmoosemise\nmoosetongue\nmoosewob\nmoosewood\nmoosey\nmoost\nmoot\nmootable\nmooter\nmooth\nmooting\nmootman\nmootstead\nmootworthy\nmop\nMopan\nmopane\nmopboard\nmope\nmoper\nmoph\nmophead\nmopheaded\nmoping\nmopingly\nmopish\nmopishly\nmopishness\nmopla\nmopper\nmoppet\nmoppy\nmopstick\nmopsy\nmopus\nMoquelumnan\nmoquette\nMoqui\nmor\nmora\nMoraceae\nmoraceous\nMoraea\nmorainal\nmoraine\nmorainic\nmoral\nmorale\nmoralism\nmoralist\nmoralistic\nmoralistically\nmorality\nmoralization\nmoralize\nmoralizer\nmoralizingly\nmoralless\nmorally\nmoralness\nmorals\nMoran\nmorass\nmorassic\nmorassweed\nmorassy\nmorat\nmorate\nmoration\nmoratoria\nmoratorium\nmoratory\nMoravian\nMoravianism\nMoravianized\nMoravid\nmoravite\nmoray\nmorbid\nmorbidity\nmorbidize\nmorbidly\nmorbidness\nmorbiferal\nmorbiferous\nmorbific\nmorbifical\nmorbifically\nmorbify\nmorbility\nmorbillary\nmorbilli\nmorbilliform\nmorbillous\nmorcellate\nmorcellated\nmorcellation\nMorchella\nMorcote\nmordacious\nmordaciously\nmordacity\nmordancy\nmordant\nmordantly\nMordella\nmordellid\nMordellidae\nmordelloid\nmordenite\nmordent\nmordicate\nmordication\nmordicative\nmordore\nMordv\nMordva\nMordvin\nMordvinian\nmore\nmoreen\nmorefold\nmoreish\nmorel\nmorella\nmorello\nmorencite\nmoreness\nmorenita\nmorenosite\nMoreote\nmoreover\nmorepork\nmores\nMoresque\nmorfrey\nmorg\nmorga\nMorgan\nmorgan\nMorgana\nmorganatic\nmorganatical\nmorganatically\nmorganic\nmorganite\nmorganize\nmorgay\nmorgen\nmorgengift\nmorgenstern\nmorglay\nmorgue\nmoribund\nmoribundity\nmoribundly\nmoric\nmoriche\nmoriform\nmorigerate\nmorigeration\nmorigerous\nmorigerously\nmorigerousness\nmorillon\nmorin\nMorinaceae\nMorinda\nmorindin\nmorindone\nmorinel\nMoringa\nMoringaceae\nmoringaceous\nmoringad\nMoringua\nmoringuid\nMoringuidae\nmoringuoid\nmorion\nMoriori\nMoriscan\nMorisco\nMorisonian\nMorisonianism\nmorkin\nmorlop\nmormaor\nmormaordom\nmormaorship\nmormo\nMormon\nmormon\nMormondom\nMormoness\nMormonism\nMormonist\nMormonite\nMormonweed\nMormoops\nmormyr\nmormyre\nmormyrian\nmormyrid\nMormyridae\nmormyroid\nMormyrus\nmorn\nmorne\nmorned\nmorning\nmorningless\nmorningly\nmornings\nmorningtide\nmorningward\nmornless\nmornlike\nmorntime\nmornward\nMoro\nmoro\nmoroc\nMoroccan\nMorocco\nmorocco\nmorocota\nmorological\nmorologically\nmorologist\nmorology\nmoromancy\nmoron\nmoroncy\nmorong\nmoronic\nMoronidae\nmoronism\nmoronity\nmoronry\nMoropus\nmorosaurian\nmorosauroid\nMorosaurus\nmorose\nmorosely\nmoroseness\nmorosis\nmorosity\nmoroxite\nmorph\nmorphallaxis\nmorphea\nMorphean\nmorpheme\nmorphemic\nmorphemics\nmorphetic\nMorpheus\nmorphew\nmorphia\nmorphiate\nmorphic\nmorphically\nmorphinate\nmorphine\nmorphinic\nmorphinism\nmorphinist\nmorphinization\nmorphinize\nmorphinomania\nmorphinomaniac\nmorphiomania\nmorphiomaniac\nMorpho\nmorphogenesis\nmorphogenetic\nmorphogenic\nmorphogeny\nmorphographer\nmorphographic\nmorphographical\nmorphographist\nmorphography\nmorpholine\nmorphologic\nmorphological\nmorphologically\nmorphologist\nmorphology\nmorphometrical\nmorphometry\nmorphon\nmorphonomic\nmorphonomy\nmorphophonemic\nmorphophonemically\nmorphophonemics\nmorphophyly\nmorphoplasm\nmorphoplasmic\nmorphosis\nmorphotic\nmorphotropic\nmorphotropism\nmorphotropy\nmorphous\nMorrenian\nMorrhua\nmorrhuate\nmorrhuine\nmorricer\nMorris\nmorris\nMorrisean\nmorrow\nmorrowing\nmorrowless\nmorrowmass\nmorrowspeech\nmorrowtide\nmorsal\nMorse\nmorse\nmorsel\nmorselization\nmorselize\nmorsing\nmorsure\nmort\nmortacious\nmortal\nmortalism\nmortalist\nmortality\nmortalize\nmortally\nmortalness\nmortalwise\nmortar\nmortarboard\nmortarize\nmortarless\nmortarlike\nmortarware\nmortary\nmortbell\nmortcloth\nmortersheen\nmortgage\nmortgageable\nmortgagee\nmortgagor\nmorth\nmorthwyrtha\nmortician\nmortier\nmortiferous\nmortiferously\nmortiferousness\nmortific\nmortification\nmortified\nmortifiedly\nmortifiedness\nmortifier\nmortify\nmortifying\nmortifyingly\nMortimer\nmortise\nmortiser\nmortling\nmortmain\nmortmainer\nMorton\nmortuarian\nmortuary\nmortuous\nmorula\nmorular\nmorulation\nmorule\nmoruloid\nMorus\nmorvin\nmorwong\nMosaic\nmosaic\nMosaical\nmosaical\nmosaically\nmosaicism\nmosaicist\nMosaicity\nMosaism\nMosaist\nmosaist\nmosandrite\nmosasaur\nMosasauri\nMosasauria\nmosasaurian\nmosasaurid\nMosasauridae\nmosasauroid\nMosasaurus\nMosatenan\nmoschate\nmoschatel\nmoschatelline\nMoschi\nMoschidae\nmoschiferous\nMoschinae\nmoschine\nMoschus\nMoscow\nMose\nMoselle\nMoses\nmosesite\nMosetena\nmosette\nmosey\nMosgu\nmoskeneer\nmosker\nMoslem\nMoslemah\nMoslemic\nMoslemin\nMoslemism\nMoslemite\nMoslemize\nmoslings\nmosque\nmosquelet\nmosquish\nmosquital\nMosquito\nmosquito\nmosquitobill\nmosquitocidal\nmosquitocide\nmosquitoey\nmosquitoish\nmosquitoproof\nmoss\nmossback\nmossberry\nmossbunker\nmossed\nmosser\nmossery\nmossful\nmosshead\nMossi\nmossiness\nmossless\nmosslike\nmosstrooper\nmosstroopery\nmosstrooping\nmosswort\nmossy\nmossyback\nmost\nmoste\nMosting\nmostlike\nmostlings\nmostly\nmostness\nMosul\nMosur\nmot\nMotacilla\nmotacillid\nMotacillidae\nMotacillinae\nmotacilline\nmotatorious\nmotatory\nMotazilite\nmote\nmoted\nmotel\nmoteless\nmoter\nmotet\nmotettist\nmotey\nmoth\nmothed\nmother\nmotherdom\nmothered\nmotherer\nmothergate\nmotherhood\nmotheriness\nmothering\nmotherkin\nmotherland\nmotherless\nmotherlessness\nmotherlike\nmotherliness\nmotherling\nmotherly\nmothership\nmothersome\nmotherward\nmotherwise\nmotherwort\nmothery\nmothless\nmothlike\nmothproof\nmothworm\nmothy\nmotif\nmotific\nmotile\nmotility\nmotion\nmotionable\nmotional\nmotionless\nmotionlessly\nmotionlessness\nmotitation\nmotivate\nmotivation\nmotivational\nmotive\nmotiveless\nmotivelessly\nmotivelessness\nmotiveness\nmotivity\nmotley\nmotleyness\nmotmot\nmotofacient\nmotograph\nmotographic\nmotomagnetic\nmotoneuron\nmotophone\nmotor\nmotorable\nmotorboat\nmotorboatman\nmotorbus\nmotorcab\nmotorcade\nmotorcar\nmotorcycle\nmotorcyclist\nmotordom\nmotordrome\nmotored\nmotorial\nmotoric\nmotoring\nmotorism\nmotorist\nmotorium\nmotorization\nmotorize\nmotorless\nmotorman\nmotorneer\nmotorphobe\nmotorphobia\nmotorphobiac\nmotorway\nmotory\nMotozintlec\nMotozintleca\nmotricity\nMott\nmott\nmotte\nmottle\nmottled\nmottledness\nmottlement\nmottler\nmottling\nmotto\nmottoed\nmottoless\nmottolike\nmottramite\nmotyka\nmou\nmoucharaby\nmouchardism\nmouche\nmouchrabieh\nmoud\nmoudie\nmoudieman\nmoudy\nmouflon\nMougeotia\nMougeotiaceae\nmouillation\nmouille\nmouillure\nmoujik\nmoul\nmould\nmoulded\nmoule\nmoulin\nmoulinage\nmoulinet\nmoulleen\nmoulrush\nmouls\nmoulter\nmouly\nmound\nmoundiness\nmoundlet\nmoundwork\nmoundy\nmount\nmountable\nmountably\nmountain\nmountained\nmountaineer\nmountainet\nmountainette\nmountainless\nmountainlike\nmountainous\nmountainously\nmountainousness\nmountainside\nmountaintop\nmountainward\nmountainwards\nmountainy\nmountant\nmountebank\nmountebankery\nmountebankish\nmountebankism\nmountebankly\nmounted\nmounter\nMountie\nmounting\nmountingly\nmountlet\nmounture\nmoup\nmourn\nmourner\nmourneress\nmournful\nmournfully\nmournfulness\nmourning\nmourningly\nmournival\nmournsome\nmouse\nmousebane\nmousebird\nmousefish\nmousehawk\nmousehole\nmousehound\nMouseion\nmousekin\nmouselet\nmouselike\nmouseproof\nmouser\nmousery\nmouseship\nmousetail\nmousetrap\nmouseweb\nmousey\nmousily\nmousiness\nmousing\nmousingly\nmousle\nmousmee\nMousoni\nmousquetaire\nmousse\nMousterian\nmoustoc\nmousy\nmout\nmoutan\nmouth\nmouthable\nmouthbreeder\nmouthed\nmouther\nmouthful\nmouthily\nmouthiness\nmouthing\nmouthingly\nmouthishly\nmouthless\nmouthlike\nmouthpiece\nmouthroot\nmouthwash\nmouthwise\nmouthy\nmouton\nmoutonnee\nmouzah\nmouzouna\nmovability\nmovable\nmovableness\nmovably\nmovant\nmove\nmoveability\nmoveableness\nmoveably\nmoveless\nmovelessly\nmovelessness\nmovement\nmover\nmovie\nmoviedom\nmovieize\nmovieland\nmoving\nmovingly\nmovingness\nmow\nmowable\nmowana\nmowburn\nmowburnt\nmowch\nmowcht\nmower\nmowha\nmowie\nmowing\nmowland\nmown\nmowra\nmowrah\nmowse\nmowstead\nmowt\nmowth\nmoxa\nmoxieberry\nMoxo\nmoy\nmoyen\nmoyenless\nmoyenne\nmoyite\nmoyle\nmoyo\nMozambican\nmozambique\nMozarab\nMozarabian\nMozarabic\nMozartean\nmozemize\nmozing\nmozzetta\nMpangwe\nMpondo\nmpret\nMr\nMrs\nMru\nmu\nmuang\nmubarat\nmucago\nmucaro\nmucedin\nmucedinaceous\nmucedine\nmucedinous\nmuch\nmuchfold\nmuchly\nmuchness\nmucic\nmucid\nmucidness\nmuciferous\nmucific\nmuciform\nmucigen\nmucigenous\nmucilage\nmucilaginous\nmucilaginously\nmucilaginousness\nmucin\nmucinogen\nmucinoid\nmucinous\nmuciparous\nmucivore\nmucivorous\nmuck\nmuckender\nMucker\nmucker\nmuckerish\nmuckerism\nmucket\nmuckiness\nmuckite\nmuckle\nmuckluck\nmuckman\nmuckment\nmuckmidden\nmuckna\nmuckrake\nmuckraker\nmucksweat\nmucksy\nmuckthrift\nmuckweed\nmuckworm\nmucky\nmucluc\nmucocele\nmucocellulose\nmucocellulosic\nmucocutaneous\nmucodermal\nmucofibrous\nmucoflocculent\nmucoid\nmucomembranous\nmuconic\nmucoprotein\nmucopurulent\nmucopus\nmucor\nMucoraceae\nmucoraceous\nMucorales\nmucorine\nmucorioid\nmucormycosis\nmucorrhea\nmucosa\nmucosal\nmucosanguineous\nmucose\nmucoserous\nmucosity\nmucosocalcareous\nmucosogranular\nmucosopurulent\nmucososaccharine\nmucous\nmucousness\nmucro\nmucronate\nmucronately\nmucronation\nmucrones\nmucroniferous\nmucroniform\nmucronulate\nmucronulatous\nmuculent\nMucuna\nmucus\nmucusin\nmud\nmudar\nmudbank\nmudcap\nmudd\nmudde\nmudden\nmuddify\nmuddily\nmuddiness\nmudding\nmuddish\nmuddle\nmuddlebrained\nmuddledom\nmuddlehead\nmuddleheaded\nmuddleheadedness\nmuddlement\nmuddleproof\nmuddler\nmuddlesome\nmuddlingly\nmuddy\nmuddybrained\nmuddybreast\nmuddyheaded\nmudee\nMudejar\nmudfish\nmudflow\nmudguard\nmudhead\nmudhole\nmudhopper\nmudir\nmudiria\nmudland\nmudlark\nmudlarker\nmudless\nmudproof\nmudra\nmudsill\nmudskipper\nmudslinger\nmudslinging\nmudspate\nmudstain\nmudstone\nmudsucker\nmudtrack\nmudweed\nmudwort\nMuehlenbeckia\nmuermo\nmuezzin\nmuff\nmuffed\nmuffet\nmuffetee\nmuffin\nmuffineer\nmuffish\nmuffishness\nmuffle\nmuffled\nmuffleman\nmuffler\nmufflin\nmuffy\nmufti\nmufty\nmug\nmuga\nmugearite\nmugful\nmugg\nmugger\nmugget\nmuggily\nmugginess\nmuggins\nmuggish\nmuggles\nMuggletonian\nMuggletonianism\nmuggy\nmughouse\nmugience\nmugiency\nmugient\nMugil\nMugilidae\nmugiliform\nmugiloid\nmugweed\nmugwort\nmugwump\nmugwumpery\nmugwumpian\nmugwumpism\nmuhammadi\nMuharram\nMuhlenbergia\nmuid\nMuilla\nmuir\nmuirburn\nmuircock\nmuirfowl\nmuishond\nmuist\nmujtahid\nMukden\nmukluk\nMukri\nmuktar\nmuktatma\nmukti\nmulaprakriti\nmulatta\nmulatto\nmulattoism\nmulattress\nmulberry\nmulch\nmulcher\nMulciber\nMulcibirian\nmulct\nmulctable\nmulctary\nmulctation\nmulctative\nmulctatory\nmulctuary\nmulder\nmule\nmuleback\nmulefoot\nmulefooted\nmuleman\nmuleta\nmuleteer\nmuletress\nmuletta\nmulewort\nmuley\nmulga\nmuliebral\nmuliebria\nmuliebrile\nmuliebrity\nmuliebrous\nmulier\nmulierine\nmulierose\nmulierosity\nmulish\nmulishly\nmulishness\nmulism\nmulita\nmulk\nmull\nmulla\nmullah\nmullar\nmullein\nmullenize\nmuller\nMullerian\nmullet\nmulletry\nmullets\nmulley\nmullid\nMullidae\nmulligan\nmulligatawny\nmulligrubs\nmullion\nmullite\nmullock\nmullocker\nmullocky\nmulloid\nmulloway\nmulmul\nmulse\nmulsify\nmult\nmultangular\nmultangularly\nmultangularness\nmultangulous\nmultangulum\nMultani\nmultanimous\nmultarticulate\nmulteity\nmultiangular\nmultiareolate\nmultiarticular\nmultiarticulate\nmultiarticulated\nmultiaxial\nmultiblade\nmultibladed\nmultibranched\nmultibranchiate\nmultibreak\nmulticamerate\nmulticapitate\nmulticapsular\nmulticarinate\nmulticarinated\nmulticellular\nmulticentral\nmulticentric\nmulticharge\nmultichord\nmultichrome\nmulticiliate\nmulticiliated\nmulticipital\nmulticircuit\nmulticoccous\nmulticoil\nmulticolor\nmulticolored\nmulticolorous\nmulticomponent\nmulticonductor\nmulticonstant\nmulticore\nmulticorneal\nmulticostate\nmulticourse\nmulticrystalline\nmulticuspid\nmulticuspidate\nmulticycle\nmulticylinder\nmulticylindered\nmultidentate\nmultidenticulate\nmultidenticulated\nmultidigitate\nmultidimensional\nmultidirectional\nmultidisperse\nmultiengine\nmultiengined\nmultiexhaust\nmultifaced\nmultifaceted\nmultifactorial\nmultifamilial\nmultifarious\nmultifariously\nmultifariousness\nmultiferous\nmultifetation\nmultifibered\nmultifid\nmultifidly\nmultifidous\nmultifidus\nmultifilament\nmultifistular\nmultiflagellate\nmultiflagellated\nmultiflash\nmultiflorous\nmultiflow\nmultiflue\nmultifocal\nmultifoil\nmultifoiled\nmultifold\nmultifoliate\nmultifoliolate\nmultiform\nmultiformed\nmultiformity\nmultifurcate\nmultiganglionic\nmultigap\nmultigranulate\nmultigranulated\nMultigraph\nmultigraph\nmultigrapher\nmultiguttulate\nmultigyrate\nmultihead\nmultihearth\nmultihued\nmultijet\nmultijugate\nmultijugous\nmultilaciniate\nmultilamellar\nmultilamellate\nmultilamellous\nmultilaminar\nmultilaminate\nmultilaminated\nmultilateral\nmultilaterally\nmultilighted\nmultilineal\nmultilinear\nmultilingual\nmultilinguist\nmultilirate\nmultiliteral\nmultilobar\nmultilobate\nmultilobe\nmultilobed\nmultilobular\nmultilobulate\nmultilobulated\nmultilocation\nmultilocular\nmultiloculate\nmultiloculated\nmultiloquence\nmultiloquent\nmultiloquious\nmultiloquous\nmultiloquy\nmultimacular\nmultimammate\nmultimarble\nmultimascular\nmultimedial\nmultimetalic\nmultimetallism\nmultimetallist\nmultimillion\nmultimillionaire\nmultimodal\nmultimodality\nmultimolecular\nmultimotor\nmultimotored\nmultinational\nmultinervate\nmultinervose\nmultinodal\nmultinodate\nmultinodous\nmultinodular\nmultinomial\nmultinominal\nmultinominous\nmultinuclear\nmultinucleate\nmultinucleated\nmultinucleolar\nmultinucleolate\nmultinucleolated\nmultiovular\nmultiovulate\nmultipara\nmultiparient\nmultiparity\nmultiparous\nmultipartisan\nmultipartite\nmultiped\nmultiperforate\nmultiperforated\nmultipersonal\nmultiphase\nmultiphaser\nmultiphotography\nmultipinnate\nmultiplane\nmultiple\nmultiplepoinding\nmultiplet\nmultiplex\nmultipliable\nmultipliableness\nmultiplicability\nmultiplicable\nmultiplicand\nmultiplicate\nmultiplication\nmultiplicational\nmultiplicative\nmultiplicatively\nmultiplicator\nmultiplicity\nmultiplier\nmultiply\nmultiplying\nmultipointed\nmultipolar\nmultipole\nmultiported\nmultipotent\nmultipresence\nmultipresent\nmultiradial\nmultiradiate\nmultiradiated\nmultiradicate\nmultiradicular\nmultiramified\nmultiramose\nmultiramous\nmultirate\nmultireflex\nmultirooted\nmultirotation\nmultirotatory\nmultisaccate\nmultisacculate\nmultisacculated\nmultiscience\nmultiseated\nmultisect\nmultisector\nmultisegmental\nmultisegmentate\nmultisegmented\nmultisensual\nmultiseptate\nmultiserial\nmultiserially\nmultiseriate\nmultishot\nmultisiliquous\nmultisonous\nmultispeed\nmultispermous\nmultispicular\nmultispiculate\nmultispindle\nmultispinous\nmultispiral\nmultispired\nmultistage\nmultistaminate\nmultistoried\nmultistory\nmultistratified\nmultistratous\nmultistriate\nmultisulcate\nmultisulcated\nmultisyllabic\nmultisyllability\nmultisyllable\nmultitarian\nmultitentaculate\nmultitheism\nmultithreaded\nmultititular\nmultitoed\nmultitoned\nmultitube\nMultituberculata\nmultituberculate\nmultituberculated\nmultituberculism\nmultituberculy\nmultitubular\nmultitude\nmultitudinal\nmultitudinary\nmultitudinism\nmultitudinist\nmultitudinistic\nmultitudinosity\nmultitudinous\nmultitudinously\nmultitudinousness\nmultiturn\nmultivagant\nmultivalence\nmultivalency\nmultivalent\nmultivalve\nmultivalved\nmultivalvular\nmultivane\nmultivariant\nmultivarious\nmultiversant\nmultiverse\nmultivibrator\nmultivincular\nmultivious\nmultivocal\nmultivocalness\nmultivoiced\nmultivolent\nmultivoltine\nmultivolumed\nmultivorous\nmultocular\nmultum\nmultungulate\nmulture\nmulturer\nmum\nmumble\nmumblebee\nmumblement\nmumbler\nmumbling\nmumblingly\nmummer\nmummery\nmummichog\nmummick\nmummied\nmummification\nmummiform\nmummify\nmumming\nmummy\nmummydom\nmummyhood\nmummylike\nmumness\nmump\nmumper\nmumphead\nmumpish\nmumpishly\nmumpishness\nmumps\nmumpsimus\nmumruffin\nmun\nMunandi\nMuncerian\nmunch\nMunchausenism\nMunchausenize\nmuncheel\nmuncher\nmunchet\nmund\nMunda\nmundane\nmundanely\nmundaneness\nmundanism\nmundanity\nMundari\nmundatory\nmundic\nmundificant\nmundification\nmundifier\nmundify\nmundil\nmundivagant\nmundle\nmung\nmunga\nmunge\nmungey\nmungo\nmungofa\nmunguba\nmungy\nMunia\nMunich\nMunichism\nmunicipal\nmunicipalism\nmunicipalist\nmunicipality\nmunicipalization\nmunicipalize\nmunicipalizer\nmunicipally\nmunicipium\nmunific\nmunificence\nmunificency\nmunificent\nmunificently\nmunificentness\nmuniment\nmunition\nmunitionary\nmunitioneer\nmunitioner\nmunitions\nmunity\nmunj\nmunjeet\nmunjistin\nmunnion\nMunnopsidae\nMunnopsis\nMunsee\nmunshi\nmunt\nMuntiacus\nmuntin\nMuntingia\nmuntjac\nMunychia\nMunychian\nMunychion\nMuong\nMuphrid\nMura\nmura\nMuradiyah\nMuraena\nMuraenidae\nmuraenoid\nmurage\nmural\nmuraled\nmuralist\nmurally\nMuran\nMuranese\nmurasakite\nMurat\nMuratorian\nmurchy\nmurder\nmurderer\nmurderess\nmurdering\nmurderingly\nmurderish\nmurderment\nmurderous\nmurderously\nmurderousness\nmurdrum\nmure\nmurenger\nmurex\nmurexan\nmurexide\nmurga\nmurgavi\nmurgeon\nmuriate\nmuriated\nmuriatic\nmuricate\nmuricid\nMuricidae\nmuriciform\nmuricine\nmuricoid\nmuriculate\nmurid\nMuridae\nmuridism\nMuriel\nmuriform\nmuriformly\nMurillo\nMurinae\nmurine\nmurinus\nmuriti\nmurium\nmurk\nmurkily\nmurkiness\nmurkish\nmurkly\nmurkness\nmurksome\nmurky\nmurlin\nmurly\nMurmi\nmurmur\nmurmuration\nmurmurator\nmurmurer\nmurmuring\nmurmuringly\nmurmurish\nmurmurless\nmurmurlessly\nmurmurous\nmurmurously\nmuromontite\nMurph\nmurphy\nmurra\nmurrain\nMurray\nMurraya\nmurre\nmurrelet\nmurrey\nmurrhine\nmurrina\nmurrnong\nmurshid\nMurthy\nmurumuru\nMurut\nmuruxi\nmurva\nmurza\nMurzim\nMus\nMusa\nMusaceae\nmusaceous\nMusaeus\nmusal\nMusales\nMusalmani\nmusang\nmusar\nMusca\nmuscade\nmuscadel\nmuscadine\nMuscadinia\nmuscardine\nMuscardinidae\nMuscardinus\nMuscari\nmuscariform\nmuscarine\nmuscat\nmuscatel\nmuscatorium\nMusci\nMuscicapa\nMuscicapidae\nmuscicapine\nmuscicide\nmuscicole\nmuscicoline\nmuscicolous\nmuscid\nMuscidae\nmusciform\nMuscinae\nmuscle\nmuscled\nmuscleless\nmusclelike\nmuscling\nmuscly\nMuscogee\nmuscoid\nMuscoidea\nmuscologic\nmuscological\nmuscologist\nmuscology\nmuscone\nmuscose\nmuscoseness\nmuscosity\nmuscot\nmuscovadite\nmuscovado\nMuscovi\nMuscovite\nmuscovite\nMuscovitic\nmuscovitization\nmuscovitize\nmuscovy\nmuscular\nmuscularity\nmuscularize\nmuscularly\nmusculation\nmusculature\nmuscule\nmusculin\nmusculoarterial\nmusculocellular\nmusculocutaneous\nmusculodermic\nmusculoelastic\nmusculofibrous\nmusculointestinal\nmusculoligamentous\nmusculomembranous\nmusculopallial\nmusculophrenic\nmusculospinal\nmusculospiral\nmusculotegumentary\nmusculotendinous\nMuse\nmuse\nmused\nmuseful\nmusefully\nmuseist\nmuseless\nmuselike\nmuseographist\nmuseography\nmuseologist\nmuseology\nmuser\nmusery\nmusette\nmuseum\nmuseumize\nMusgu\nmush\nmusha\nmushaa\nMushabbihite\nmushed\nmusher\nmushhead\nmushheaded\nmushheadedness\nmushily\nmushiness\nmushla\nmushmelon\nmushrebiyeh\nmushroom\nmushroomer\nmushroomic\nmushroomlike\nmushroomy\nmushru\nmushy\nmusic\nmusical\nmusicale\nmusicality\nmusicalization\nmusicalize\nmusically\nmusicalness\nmusicate\nmusician\nmusiciana\nmusicianer\nmusicianly\nmusicianship\nmusicker\nmusicless\nmusiclike\nmusicmonger\nmusico\nmusicoartistic\nmusicodramatic\nmusicofanatic\nmusicographer\nmusicography\nmusicological\nmusicologist\nmusicologue\nmusicology\nmusicomania\nmusicomechanical\nmusicophilosophical\nmusicophobia\nmusicophysical\nmusicopoetic\nmusicotherapy\nmusicproof\nmusie\nmusily\nmusimon\nmusing\nmusingly\nmusk\nmuskat\nmuskeg\nmuskeggy\nmuskellunge\nmusket\nmusketade\nmusketeer\nmusketlike\nmusketoon\nmusketproof\nmusketry\nmuskflower\nMuskhogean\nmuskie\nmuskiness\nmuskish\nmusklike\nmuskmelon\nMuskogee\nmuskrat\nmuskroot\nMuskwaki\nmuskwood\nmusky\nmuslin\nmuslined\nmuslinet\nmusnud\nMusophaga\nMusophagi\nMusophagidae\nmusophagine\nmusquash\nmusquashroot\nmusquashweed\nmusquaspen\nmusquaw\nmusrol\nmuss\nmussable\nmussably\nMussaenda\nmussal\nmussalchee\nmussel\nmusseled\nmusseler\nmussily\nmussiness\nmussitate\nmussitation\nmussuk\nMussulman\nMussulmanic\nMussulmanish\nMussulmanism\nMussulwoman\nmussurana\nmussy\nmust\nmustache\nmustached\nmustachial\nmustachio\nmustachioed\nmustafina\nMustahfiz\nmustang\nmustanger\nmustard\nmustarder\nmustee\nMustela\nmustelid\nMustelidae\nmusteline\nmustelinous\nmusteloid\nMustelus\nmuster\nmusterable\nmusterdevillers\nmusterer\nmustermaster\nmustify\nmustily\nmustiness\nmustnt\nmusty\nmuta\nMutabilia\nmutability\nmutable\nmutableness\nmutably\nmutafacient\nmutage\nmutagenic\nmutant\nmutarotate\nmutarotation\nmutase\nmutate\nmutation\nmutational\nmutationally\nmutationism\nmutationist\nmutative\nmutatory\nmutawalli\nMutazala\nmutch\nmute\nmutedly\nmutely\nmuteness\nMuter\nmutesarif\nmutescence\nmutessarifat\nmuth\nmuthmannite\nmuthmassel\nmutic\nmuticous\nmutilate\nmutilation\nmutilative\nmutilator\nmutilatory\nMutilla\nmutillid\nMutillidae\nmutilous\nmutineer\nmutinous\nmutinously\nmutinousness\nmutiny\nMutisia\nMutisiaceae\nmutism\nmutist\nmutistic\nmutive\nmutivity\nmutoscope\nmutoscopic\nmutsje\nmutsuddy\nmutt\nmutter\nmutterer\nmuttering\nmutteringly\nmutton\nmuttonbird\nmuttonchop\nmuttonfish\nmuttonhead\nmuttonheaded\nmuttonhood\nmuttonmonger\nmuttonwood\nmuttony\nmutual\nmutualism\nmutualist\nmutualistic\nmutuality\nmutualization\nmutualize\nmutually\nmutualness\nmutuary\nmutuatitious\nmutulary\nmutule\nmutuum\nmux\nMuysca\nmuyusa\nmuzhik\nMuzo\nmuzz\nmuzzily\nmuzziness\nmuzzle\nmuzzler\nmuzzlewood\nmuzzy\nMwa\nmy\nMya\nMyacea\nmyal\nmyalgia\nmyalgic\nmyalism\nmyall\nMyaria\nmyarian\nmyasthenia\nmyasthenic\nmyatonia\nmyatonic\nmyatony\nmyatrophy\nmycele\nmycelia\nmycelial\nmycelian\nmycelioid\nmycelium\nmyceloid\nMycenaean\nMycetes\nmycetism\nmycetocyte\nmycetogenesis\nmycetogenetic\nmycetogenic\nmycetogenous\nmycetoid\nmycetological\nmycetology\nmycetoma\nmycetomatous\nMycetophagidae\nmycetophagous\nmycetophilid\nMycetophilidae\nmycetous\nMycetozoa\nmycetozoan\nmycetozoon\nMycobacteria\nMycobacteriaceae\nMycobacterium\nmycocecidium\nmycocyte\nmycoderm\nmycoderma\nmycodermatoid\nmycodermatous\nmycodermic\nmycodermitis\nmycodesmoid\nmycodomatium\nmycogastritis\nMycogone\nmycohaemia\nmycohemia\nmycoid\nmycologic\nmycological\nmycologically\nmycologist\nmycologize\nmycology\nmycomycete\nMycomycetes\nmycomycetous\nmycomyringitis\nmycophagist\nmycophagous\nmycophagy\nmycophyte\nMycoplana\nmycoplasm\nmycoplasmic\nmycoprotein\nmycorhiza\nmycorhizal\nmycorrhizal\nmycose\nmycosin\nmycosis\nmycosozin\nMycosphaerella\nMycosphaerellaceae\nmycosterol\nmycosymbiosis\nmycotic\nmycotrophic\nMycteria\nmycteric\nmycterism\nMyctodera\nmyctophid\nMyctophidae\nMyctophum\nMydaidae\nmydaleine\nmydatoxine\nMydaus\nmydine\nmydriasine\nmydriasis\nmydriatic\nmydriatine\nmyectomize\nmyectomy\nmyectopia\nmyectopy\nmyelalgia\nmyelapoplexy\nmyelasthenia\nmyelatrophy\nmyelauxe\nmyelemia\nmyelencephalic\nmyelencephalon\nmyelencephalous\nmyelic\nmyelin\nmyelinate\nmyelinated\nmyelination\nmyelinic\nmyelinization\nmyelinogenesis\nmyelinogenetic\nmyelinogeny\nmyelitic\nmyelitis\nmyeloblast\nmyeloblastic\nmyelobrachium\nmyelocele\nmyelocerebellar\nmyelocoele\nmyelocyst\nmyelocystic\nmyelocystocele\nmyelocyte\nmyelocythaemia\nmyelocythemia\nmyelocytic\nmyelocytosis\nmyelodiastasis\nmyeloencephalitis\nmyeloganglitis\nmyelogenesis\nmyelogenetic\nmyelogenous\nmyelogonium\nmyeloic\nmyeloid\nmyelolymphangioma\nmyelolymphocyte\nmyeloma\nmyelomalacia\nmyelomatoid\nmyelomatosis\nmyelomenia\nmyelomeningitis\nmyelomeningocele\nmyelomere\nmyelon\nmyelonal\nmyeloneuritis\nmyelonic\nmyeloparalysis\nmyelopathic\nmyelopathy\nmyelopetal\nmyelophthisis\nmyeloplast\nmyeloplastic\nmyeloplax\nmyeloplegia\nmyelopoiesis\nmyelopoietic\nmyelorrhagia\nmyelorrhaphy\nmyelosarcoma\nmyelosclerosis\nmyelospasm\nmyelospongium\nmyelosyphilis\nmyelosyphilosis\nmyelosyringosis\nmyelotherapy\nMyelozoa\nmyelozoan\nmyentasis\nmyenteric\nmyenteron\nmyesthesia\nmygale\nmygalid\nmygaloid\nMyiarchus\nmyiasis\nmyiferous\nmyiodesopsia\nmyiosis\nmyitis\nmykiss\nmyliobatid\nMyliobatidae\nmyliobatine\nmyliobatoid\nMylodon\nmylodont\nMylodontidae\nmylohyoid\nmylohyoidean\nmylonite\nmylonitic\nMymar\nmymarid\nMymaridae\nmyna\nMynheer\nmynpacht\nmynpachtbrief\nmyoalbumin\nmyoalbumose\nmyoatrophy\nmyoblast\nmyoblastic\nmyocardiac\nmyocardial\nmyocardiogram\nmyocardiograph\nmyocarditic\nmyocarditis\nmyocardium\nmyocele\nmyocellulitis\nmyoclonic\nmyoclonus\nmyocoele\nmyocoelom\nmyocolpitis\nmyocomma\nmyocyte\nmyodegeneration\nMyodes\nmyodiastasis\nmyodynamia\nmyodynamic\nmyodynamics\nmyodynamiometer\nmyodynamometer\nmyoedema\nmyoelectric\nmyoendocarditis\nmyoepicardial\nmyoepithelial\nmyofibril\nmyofibroma\nmyogen\nmyogenesis\nmyogenetic\nmyogenic\nmyogenous\nmyoglobin\nmyoglobulin\nmyogram\nmyograph\nmyographer\nmyographic\nmyographical\nmyographist\nmyography\nmyohematin\nmyoid\nmyoidema\nmyokinesis\nmyolemma\nmyolipoma\nmyoliposis\nmyologic\nmyological\nmyologist\nmyology\nmyolysis\nmyoma\nmyomalacia\nmyomancy\nmyomantic\nmyomatous\nmyomectomy\nmyomelanosis\nmyomere\nmyometritis\nmyometrium\nmyomohysterectomy\nmyomorph\nMyomorpha\nmyomorphic\nmyomotomy\nmyoneme\nmyoneural\nmyoneuralgia\nmyoneurasthenia\nmyoneure\nmyoneuroma\nmyoneurosis\nmyonosus\nmyopachynsis\nmyoparalysis\nmyoparesis\nmyopathia\nmyopathic\nmyopathy\nmyope\nmyoperitonitis\nmyophan\nmyophore\nmyophorous\nmyophysical\nmyophysics\nmyopia\nmyopic\nmyopical\nmyopically\nmyoplasm\nmyoplastic\nmyoplasty\nmyopolar\nMyoporaceae\nmyoporaceous\nmyoporad\nMyoporum\nmyoproteid\nmyoprotein\nmyoproteose\nmyops\nmyopy\nmyorrhaphy\nmyorrhexis\nmyosalpingitis\nmyosarcoma\nmyosarcomatous\nmyosclerosis\nmyoscope\nmyoseptum\nmyosin\nmyosinogen\nmyosinose\nmyosis\nmyositic\nmyositis\nmyosote\nMyosotis\nmyospasm\nmyospasmia\nMyosurus\nmyosuture\nmyosynizesis\nmyotacismus\nMyotalpa\nMyotalpinae\nmyotasis\nmyotenotomy\nmyothermic\nmyotic\nmyotome\nmyotomic\nmyotomy\nmyotonia\nmyotonic\nmyotonus\nmyotony\nmyotrophy\nmyowun\nMyoxidae\nmyoxine\nMyoxus\nMyra\nmyrabalanus\nmyrabolam\nmyrcene\nMyrcia\nmyrcia\nmyriacanthous\nmyriacoulomb\nmyriad\nmyriaded\nmyriadfold\nmyriadly\nmyriadth\nmyriagram\nmyriagramme\nmyrialiter\nmyrialitre\nmyriameter\nmyriametre\nMyrianida\nmyriapod\nMyriapoda\nmyriapodan\nmyriapodous\nmyriarch\nmyriarchy\nmyriare\nMyrica\nmyrica\nMyricaceae\nmyricaceous\nMyricales\nmyricetin\nmyricin\nMyrick\nmyricyl\nmyricylic\nMyrientomata\nmyringa\nmyringectomy\nmyringitis\nmyringodectomy\nmyringodermatitis\nmyringomycosis\nmyringoplasty\nmyringotome\nmyringotomy\nmyriological\nmyriologist\nmyriologue\nmyriophyllite\nmyriophyllous\nMyriophyllum\nMyriopoda\nmyriopodous\nmyriorama\nmyrioscope\nmyriosporous\nmyriotheism\nMyriotrichia\nMyriotrichiaceae\nmyriotrichiaceous\nmyristate\nmyristic\nMyristica\nmyristica\nMyristicaceae\nmyristicaceous\nMyristicivora\nmyristicivorous\nmyristin\nmyristone\nMyrmecia\nMyrmecobiinae\nmyrmecobine\nMyrmecobius\nmyrmecochorous\nmyrmecochory\nmyrmecoid\nmyrmecoidy\nmyrmecological\nmyrmecologist\nmyrmecology\nMyrmecophaga\nMyrmecophagidae\nmyrmecophagine\nmyrmecophagoid\nmyrmecophagous\nmyrmecophile\nmyrmecophilism\nmyrmecophilous\nmyrmecophily\nmyrmecophobic\nmyrmecophyte\nmyrmecophytic\nmyrmekite\nMyrmeleon\nMyrmeleonidae\nMyrmeleontidae\nMyrmica\nmyrmicid\nMyrmicidae\nmyrmicine\nmyrmicoid\nMyrmidon\nMyrmidonian\nmyrmotherine\nmyrobalan\nMyron\nmyron\nmyronate\nmyronic\nmyrosin\nmyrosinase\nMyrothamnaceae\nmyrothamnaceous\nMyrothamnus\nMyroxylon\nmyrrh\nmyrrhed\nmyrrhic\nmyrrhine\nMyrrhis\nmyrrhol\nmyrrhophore\nmyrrhy\nMyrsinaceae\nmyrsinaceous\nmyrsinad\nMyrsiphyllum\nMyrtaceae\nmyrtaceous\nmyrtal\nMyrtales\nmyrtiform\nMyrtilus\nmyrtle\nmyrtleberry\nmyrtlelike\nmyrtol\nMyrtus\nmysel\nmyself\nmysell\nMysian\nmysid\nMysidacea\nMysidae\nmysidean\nMysis\nmysogynism\nmysoid\nmysophobia\nMysore\nmysosophist\nmysost\nmyst\nmystacial\nMystacocete\nMystacoceti\nmystagogic\nmystagogical\nmystagogically\nmystagogue\nmystagogy\nmystax\nmysterial\nmysteriarch\nmysteriosophic\nmysteriosophy\nmysterious\nmysteriously\nmysteriousness\nmysterize\nmystery\nmystes\nmystic\nmystical\nmysticality\nmystically\nmysticalness\nMysticete\nmysticete\nMysticeti\nmysticetous\nmysticism\nmysticity\nmysticize\nmysticly\nmystific\nmystifically\nmystification\nmystificator\nmystificatory\nmystifiedly\nmystifier\nmystify\nmystifyingly\nmytacism\nmyth\nmythical\nmythicalism\nmythicality\nmythically\nmythicalness\nmythicism\nmythicist\nmythicize\nmythicizer\nmythification\nmythify\nmythism\nmythist\nmythize\nmythland\nmythmaker\nmythmaking\nmythoclast\nmythoclastic\nmythogenesis\nmythogonic\nmythogony\nmythographer\nmythographist\nmythography\nmythogreen\nmythoheroic\nmythohistoric\nmythologema\nmythologer\nmythological\nmythologically\nmythologist\nmythologize\nmythologizer\nmythologue\nmythology\nmythomania\nmythomaniac\nmythometer\nmythonomy\nmythopastoral\nmythopoeic\nmythopoeism\nmythopoeist\nmythopoem\nmythopoesis\nmythopoesy\nmythopoet\nmythopoetic\nmythopoetize\nmythopoetry\nmythos\nmythus\nMytilacea\nmytilacean\nmytilaceous\nMytiliaspis\nmytilid\nMytilidae\nmytiliform\nmytiloid\nmytilotoxine\nMytilus\nmyxa\nmyxadenitis\nmyxadenoma\nmyxaemia\nmyxamoeba\nmyxangitis\nmyxasthenia\nmyxedema\nmyxedematoid\nmyxedematous\nmyxedemic\nmyxemia\nMyxine\nMyxinidae\nmyxinoid\nMyxinoidei\nmyxo\nMyxobacteria\nMyxobacteriaceae\nmyxobacteriaceous\nMyxobacteriales\nmyxoblastoma\nmyxochondroma\nmyxochondrosarcoma\nMyxococcus\nmyxocystoma\nmyxocyte\nmyxoenchondroma\nmyxofibroma\nmyxofibrosarcoma\nmyxoflagellate\nmyxogaster\nMyxogasteres\nMyxogastrales\nMyxogastres\nmyxogastric\nmyxogastrous\nmyxoglioma\nmyxoid\nmyxoinoma\nmyxolipoma\nmyxoma\nmyxomatosis\nmyxomatous\nMyxomycetales\nmyxomycete\nMyxomycetes\nmyxomycetous\nmyxomyoma\nmyxoneuroma\nmyxopapilloma\nMyxophyceae\nmyxophycean\nMyxophyta\nmyxopod\nMyxopoda\nmyxopodan\nmyxopodium\nmyxopodous\nmyxopoiesis\nmyxorrhea\nmyxosarcoma\nMyxospongiae\nmyxospongian\nMyxospongida\nmyxospore\nMyxosporidia\nmyxosporidian\nMyxosporidiida\nMyxosporium\nmyxosporous\nMyxothallophyta\nmyxotheca\nMyzodendraceae\nmyzodendraceous\nMyzodendron\nMyzomyia\nmyzont\nMyzontes\nMyzostoma\nMyzostomata\nmyzostomatous\nmyzostome\nmyzostomid\nMyzostomida\nMyzostomidae\nmyzostomidan\nmyzostomous\nN\nn\nna\nnaa\nnaam\nNaaman\nNaassenes\nnab\nnabak\nNabal\nNabalism\nNabalite\nNabalitic\nNabaloi\nNabalus\nNabataean\nNabatean\nNabathaean\nNabathean\nNabathite\nnabber\nNabby\nnabk\nnabla\nnable\nnabob\nnabobery\nnabobess\nnabobical\nnabobish\nnabobishly\nnabobism\nnabobry\nnabobship\nNabothian\nnabs\nNabu\nnacarat\nnacarine\nnace\nnacelle\nnach\nnachani\nNachitoch\nNachitoches\nNachschlag\nNacionalista\nnacket\nnacre\nnacred\nnacreous\nnacrine\nnacrite\nnacrous\nnacry\nnadder\nNadeem\nnadir\nnadiral\nnadorite\nnae\nnaebody\nnaegate\nnaegates\nnael\nNaemorhedinae\nnaemorhedine\nNaemorhedus\nnaether\nnaething\nnag\nNaga\nnaga\nnagaika\nnagana\nnagara\nNagari\nnagatelite\nnagger\nnaggin\nnagging\nnaggingly\nnaggingness\nnaggish\nnaggle\nnaggly\nnaggy\nnaght\nnagkassar\nnagmaal\nnagman\nnagnag\nnagnail\nnagor\nnagsman\nnagster\nnagual\nnagualism\nnagualist\nnagyagite\nNahanarvali\nNahane\nNahani\nNaharvali\nNahor\nNahua\nNahuan\nNahuatl\nNahuatlac\nNahuatlan\nNahuatleca\nNahuatlecan\nNahum\nnaiad\nNaiadaceae\nnaiadaceous\nNaiadales\nNaiades\nnaiant\nNaias\nnaid\nnaif\nnaifly\nnaig\nnaigie\nnaik\nnail\nnailbin\nnailbrush\nnailer\nnaileress\nnailery\nnailhead\nnailing\nnailless\nnaillike\nnailprint\nnailproof\nnailrod\nnailshop\nnailsick\nnailsmith\nnailwort\nnaily\nNaim\nnain\nnainsel\nnainsook\nnaio\nnaipkin\nNair\nnairy\nnais\nnaish\nnaissance\nnaissant\nnaither\nnaive\nnaively\nnaiveness\nnaivete\nnaivety\nNaja\nnak\nnake\nnaked\nnakedish\nnakedize\nnakedly\nnakedness\nnakedweed\nnakedwood\nnaker\nnakhlite\nnakhod\nnakhoda\nNakir\nnako\nNakomgilisala\nnakong\nnakoo\nNakula\nNalita\nnallah\nnam\nNama\nnamability\nnamable\nNamaqua\nnamaqua\nNamaquan\nnamaycush\nnamaz\nnamazlik\nNambe\nnamda\nname\nnameability\nnameable\nnameboard\nnameless\nnamelessly\nnamelessness\nnameling\nnamely\nnamer\nnamesake\nnaming\nnammad\nNan\nnan\nNana\nnana\nNanaimo\nnanawood\nNance\nNancy\nnancy\nNanda\nNandi\nnandi\nNandina\nnandine\nnandow\nnandu\nnane\nnanes\nnanga\nnanism\nnanization\nnankeen\nNankin\nnankin\nNanking\nNankingese\nnannander\nnannandrium\nnannandrous\nNannette\nnannoplankton\nNanny\nnanny\nnannyberry\nnannybush\nnanocephalia\nnanocephalic\nnanocephalism\nnanocephalous\nnanocephalus\nnanocephaly\nnanoid\nnanomelia\nnanomelous\nnanomelus\nnanosoma\nnanosomia\nnanosomus\nnanpie\nnant\nNanticoke\nnantle\nnantokite\nNantz\nnaological\nnaology\nnaometry\nNaomi\nNaos\nnaos\nNaosaurus\nNaoto\nnap\nnapa\nNapaea\nNapaean\nnapal\nnapalm\nnape\nnapead\nnapecrest\nnapellus\nnaperer\nnapery\nnaphtha\nnaphthacene\nnaphthalate\nnaphthalene\nnaphthaleneacetic\nnaphthalenesulphonic\nnaphthalenic\nnaphthalenoid\nnaphthalic\nnaphthalidine\nnaphthalin\nnaphthaline\nnaphthalization\nnaphthalize\nnaphthalol\nnaphthamine\nnaphthanthracene\nnaphthene\nnaphthenic\nnaphthinduline\nnaphthionate\nnaphtho\nnaphthoic\nnaphthol\nnaphtholate\nnaphtholize\nnaphtholsulphonate\nnaphtholsulphonic\nnaphthoquinone\nnaphthoresorcinol\nnaphthosalol\nnaphthous\nnaphthoxide\nnaphthyl\nnaphthylamine\nnaphthylaminesulphonic\nnaphthylene\nnaphthylic\nnaphtol\nNapierian\nnapiform\nnapkin\nnapkining\nnapless\nnaplessness\nNapoleon\nnapoleon\nNapoleonana\nNapoleonic\nNapoleonically\nNapoleonism\nNapoleonist\nNapoleonistic\nnapoleonite\nNapoleonize\nnapoo\nnappe\nnapped\nnapper\nnappiness\nnapping\nnappishness\nnappy\nnaprapath\nnaprapathy\nnapron\nnapthionic\nnapu\nnar\nNarcaciontes\nNarcaciontidae\nnarceine\nnarcism\nNarciss\nNarcissan\nnarcissi\nNarcissine\nnarcissism\nnarcissist\nnarcissistic\nNarcissus\nnarcist\nnarcistic\nnarcoanalysis\nnarcoanesthesia\nNarcobatidae\nNarcobatoidea\nNarcobatus\nnarcohypnia\nnarcohypnosis\nnarcolepsy\nnarcoleptic\nnarcoma\nnarcomania\nnarcomaniac\nnarcomaniacal\nnarcomatous\nNarcomedusae\nnarcomedusan\nnarcose\nnarcosis\nnarcostimulant\nnarcosynthesis\nnarcotherapy\nnarcotia\nnarcotic\nnarcotical\nnarcotically\nnarcoticalness\nnarcoticism\nnarcoticness\nnarcotina\nnarcotine\nnarcotinic\nnarcotism\nnarcotist\nnarcotization\nnarcotize\nnarcous\nnard\nnardine\nnardoo\nNardus\nNaren\nNarendra\nnares\nNaresh\nnarghile\nnargil\nnarial\nnaric\nnarica\nnaricorn\nnariform\nnarine\nnaringenin\nnaringin\nnark\nnarky\nnarr\nnarra\nNarraganset\nnarras\nnarratable\nnarrate\nnarrater\nnarration\nnarrational\nnarrative\nnarratively\nnarrator\nnarratory\nnarratress\nnarratrix\nnarrawood\nnarrow\nnarrower\nnarrowhearted\nnarrowheartedness\nnarrowingness\nnarrowish\nnarrowly\nnarrowness\nnarrowy\nnarsarsukite\nnarsinga\nnarthecal\nNarthecium\nnarthex\nnarwhal\nnarwhalian\nnary\nnasab\nnasal\nNasalis\nnasalis\nnasalism\nnasality\nnasalization\nnasalize\nnasally\nnasalward\nnasalwards\nnasard\nNascan\nNascapi\nnascence\nnascency\nnascent\nnasch\nnaseberry\nnasethmoid\nnash\nnashgab\nnashgob\nNashim\nNashira\nNashua\nnasi\nnasial\nnasicorn\nNasicornia\nnasicornous\nNasiei\nnasiform\nnasilabial\nnasillate\nnasillation\nnasioalveolar\nnasiobregmatic\nnasioinial\nnasiomental\nnasion\nnasitis\nNaskhi\nnasoalveola\nnasoantral\nnasobasilar\nnasobronchial\nnasobuccal\nnasoccipital\nnasociliary\nnasoethmoidal\nnasofrontal\nnasolabial\nnasolachrymal\nnasological\nnasologist\nnasology\nnasomalar\nnasomaxillary\nnasonite\nnasoorbital\nnasopalatal\nnasopalatine\nnasopharyngeal\nnasopharyngitis\nnasopharynx\nnasoprognathic\nnasoprognathism\nnasorostral\nnasoscope\nnasoseptal\nnasosinuitis\nnasosinusitis\nnasosubnasal\nnasoturbinal\nnasrol\nNassa\nNassau\nNassellaria\nnassellarian\nNassidae\nnassology\nnast\nnastaliq\nnastic\nnastika\nnastily\nnastiness\nnasturtion\nnasturtium\nnasty\nNasua\nnasus\nnasute\nnasuteness\nnasutiform\nnasutus\nnat\nnatability\nnataka\nNatal\nnatal\nNatalia\nNatalian\nNatalie\nnatality\nnataloin\nnatals\nnatant\nnatantly\nNataraja\nnatation\nnatational\nnatator\nnatatorial\nnatatorious\nnatatorium\nnatatory\nnatch\nnatchbone\nNatchez\nNatchezan\nNatchitoches\nnatchnee\nNate\nnates\nNathan\nNathanael\nNathaniel\nnathe\nnather\nnathless\nNatica\nNaticidae\nnaticiform\nnaticine\nNatick\nnaticoid\nnatiform\nnatimortality\nnation\nnational\nnationalism\nnationalist\nnationalistic\nnationalistically\nnationality\nnationalization\nnationalize\nnationalizer\nnationally\nnationalness\nnationalty\nnationhood\nnationless\nnationwide\nnative\nnatively\nnativeness\nnativism\nnativist\nnativistic\nnativity\nnatr\nNatraj\nNatricinae\nnatricine\nnatrium\nNatrix\nnatrochalcite\nnatrojarosite\nnatrolite\nnatron\nNatt\nnatter\nnattered\nnatteredness\nnatterjack\nnattily\nnattiness\nnattle\nnatty\nnatuary\nnatural\nnaturalesque\nnaturalism\nnaturalist\nnaturalistic\nnaturalistically\nnaturality\nnaturalization\nnaturalize\nnaturalizer\nnaturally\nnaturalness\nnature\nnaturecraft\nnaturelike\nnaturing\nnaturism\nnaturist\nnaturistic\nnaturistically\nnaturize\nnaturopath\nnaturopathic\nnaturopathist\nnaturopathy\nnaucrar\nnaucrary\nnaufragous\nnauger\nnaught\nnaughtily\nnaughtiness\nnaughty\nnaujaite\nnaumachia\nnaumachy\nnaumannite\nNaumburgia\nnaumk\nnaumkeag\nnaumkeager\nnaunt\nnauntle\nnaupathia\nnauplial\nnaupliiform\nnauplioid\nnauplius\nnauropometer\nnauscopy\nnausea\nnauseant\nnauseaproof\nnauseate\nnauseatingly\nnauseation\nnauseous\nnauseously\nnauseousness\nNauset\nnaut\nnautch\nnauther\nnautic\nnautical\nnauticality\nnautically\nnautics\nnautiform\nNautilacea\nnautilacean\nnautilicone\nnautiliform\nnautilite\nnautiloid\nNautiloidea\nnautiloidean\nnautilus\nNavaho\nNavajo\nnaval\nnavalese\nnavalism\nnavalist\nnavalistic\nnavalistically\nnavally\nnavar\nnavarch\nnavarchy\nNavarrese\nNavarrian\nnave\nnavel\nnaveled\nnavellike\nnavelwort\nnavet\nnavette\nnavew\nnavicella\nnavicert\nnavicula\nNaviculaceae\nnaviculaeform\nnavicular\nnaviculare\nnaviculoid\nnaviform\nnavigability\nnavigable\nnavigableness\nnavigably\nnavigant\nnavigate\nnavigation\nnavigational\nnavigator\nnavigerous\nnavipendular\nnavipendulum\nnavite\nnavvy\nnavy\nnaw\nnawab\nnawabship\nnawt\nnay\nNayar\nNayarit\nNayarita\nnayaur\nnaysay\nnaysayer\nnayward\nnayword\nNazarate\nNazarean\nNazarene\nNazarenism\nNazarite\nNazariteship\nNazaritic\nNazaritish\nNazaritism\nnaze\nNazerini\nNazi\nNazify\nNaziism\nnazim\nnazir\nNazirate\nNazirite\nNaziritic\nNazism\nne\nnea\nNeal\nneal\nneallotype\nNeanderthal\nNeanderthaler\nNeanderthaloid\nneanic\nneanthropic\nneap\nneaped\nNeapolitan\nnearable\nnearabout\nnearabouts\nnearaivays\nnearaway\nnearby\nNearctic\nNearctica\nnearest\nnearish\nnearly\nnearmost\nnearness\nnearsighted\nnearsightedly\nnearsightedness\nnearthrosis\nneat\nneaten\nneath\nneatherd\nneatherdess\nneathmost\nneatify\nneatly\nneatness\nneb\nneback\nNebaioth\nNebalia\nNebaliacea\nnebalian\nNebaliidae\nnebalioid\nnebbed\nnebbuck\nnebbuk\nnebby\nnebel\nnebelist\nnebenkern\nNebiim\nNebraskan\nnebris\nnebula\nnebulae\nnebular\nnebularization\nnebularize\nnebulated\nnebulation\nnebule\nnebulescent\nnebuliferous\nnebulite\nnebulium\nnebulization\nnebulize\nnebulizer\nnebulose\nnebulosity\nnebulous\nnebulously\nnebulousness\nNecator\nnecessar\nnecessarian\nnecessarianism\nnecessarily\nnecessariness\nnecessary\nnecessism\nnecessist\nnecessitarian\nnecessitarianism\nnecessitate\nnecessitatedly\nnecessitatingly\nnecessitation\nnecessitative\nnecessitous\nnecessitously\nnecessitousness\nnecessitude\nnecessity\nneck\nneckar\nneckatee\nneckband\nneckcloth\nnecked\nnecker\nneckercher\nneckerchief\nneckful\nneckguard\nnecking\nneckinger\nnecklace\nnecklaced\nnecklaceweed\nneckless\nnecklet\nnecklike\nneckline\nneckmold\nneckpiece\nneckstock\nnecktie\nnecktieless\nneckward\nneckwear\nneckweed\nneckyoke\nnecrectomy\nnecremia\nnecrobacillary\nnecrobacillosis\nnecrobiosis\nnecrobiotic\nnecrogenic\nnecrogenous\nnecrographer\nnecrolatry\nnecrologic\nnecrological\nnecrologically\nnecrologist\nnecrologue\nnecrology\nnecromancer\nnecromancing\nnecromancy\nnecromantic\nnecromantically\nnecromorphous\nnecronite\nnecropathy\nNecrophaga\nnecrophagan\nnecrophagous\nnecrophile\nnecrophilia\nnecrophilic\nnecrophilism\nnecrophilistic\nnecrophilous\nnecrophily\nnecrophobia\nnecrophobic\nNecrophorus\nnecropoleis\nnecropoles\nnecropolis\nnecropolitan\nnecropsy\nnecroscopic\nnecroscopical\nnecroscopy\nnecrose\nnecrosis\nnecrotic\nnecrotization\nnecrotize\nnecrotomic\nnecrotomist\nnecrotomy\nnecrotype\nnecrotypic\nNectandra\nnectar\nnectareal\nnectarean\nnectared\nnectareous\nnectareously\nnectareousness\nnectarial\nnectarian\nnectaried\nnectariferous\nnectarine\nNectarinia\nNectariniidae\nnectarious\nnectarium\nnectarivorous\nnectarize\nnectarlike\nnectarous\nnectary\nnectiferous\nnectocalycine\nnectocalyx\nNectonema\nnectophore\nnectopod\nNectria\nnectriaceous\nNectrioidaceae\nNecturidae\nNecturus\nNed\nnedder\nneddy\nNederlands\nnee\nneebor\nneebour\nneed\nneeder\nneedfire\nneedful\nneedfully\nneedfulness\nneedgates\nneedham\nneedily\nneediness\nneeding\nneedle\nneedlebill\nneedlebook\nneedlebush\nneedlecase\nneedled\nneedlefish\nneedleful\nneedlelike\nneedlemaker\nneedlemaking\nneedleman\nneedlemonger\nneedleproof\nneedler\nneedles\nneedless\nneedlessly\nneedlessness\nneedlestone\nneedlewoman\nneedlewood\nneedlework\nneedleworked\nneedleworker\nneedling\nneedly\nneedments\nneeds\nneedsome\nneedy\nneeger\nneeld\nneele\nneelghan\nneem\nneencephalic\nneencephalon\nNeengatu\nneep\nneepour\nneer\nneese\nneet\nneetup\nneeze\nnef\nnefandous\nnefandousness\nnefarious\nnefariously\nnefariousness\nnefast\nneffy\nneftgil\nnegate\nnegatedness\nnegation\nnegationalist\nnegationist\nnegative\nnegatively\nnegativeness\nnegativer\nnegativism\nnegativist\nnegativistic\nnegativity\nnegator\nnegatory\nnegatron\nneger\nneginoth\nneglect\nneglectable\nneglectedly\nneglectedness\nneglecter\nneglectful\nneglectfully\nneglectfulness\nneglectingly\nneglection\nneglective\nneglectively\nneglector\nneglectproof\nnegligee\nnegligence\nnegligency\nnegligent\nnegligently\nnegligibility\nnegligible\nnegligibleness\nnegligibly\nnegotiability\nnegotiable\nnegotiant\nnegotiate\nnegotiation\nnegotiator\nnegotiatory\nnegotiatress\nnegotiatrix\nNegress\nnegrillo\nnegrine\nNegritian\nNegritic\nNegritize\nNegrito\nNegritoid\nNegro\nnegro\nnegrodom\nNegrofy\nnegrohead\nnegrohood\nNegroid\nNegroidal\nnegroish\nNegroism\nNegroization\nNegroize\nnegrolike\nNegroloid\nNegrophil\nNegrophile\nNegrophilism\nNegrophilist\nNegrophobe\nNegrophobia\nNegrophobiac\nNegrophobist\nNegrotic\nNegundo\nNegus\nnegus\nNehantic\nNehemiah\nnehiloth\nnei\nneif\nneigh\nneighbor\nneighbored\nneighborer\nneighboress\nneighborhood\nneighboring\nneighborless\nneighborlike\nneighborliness\nneighborly\nneighborship\nneighborstained\nneighbourless\nneighbourlike\nneighbourship\nneigher\nNeil\nNeillia\nneiper\nNeisseria\nNeisserieae\nneist\nneither\nNejd\nNejdi\nNekkar\nnekton\nnektonic\nNelken\nNell\nNellie\nNelly\nnelson\nnelsonite\nnelumbian\nNelumbium\nNelumbo\nNelumbonaceae\nnema\nnemaline\nNemalion\nNemalionaceae\nNemalionales\nnemalite\nNemastomaceae\nNematelmia\nnematelminth\nNematelminthes\nnemathece\nnemathecial\nnemathecium\nNemathelmia\nnemathelminth\nNemathelminthes\nnematic\nnematoblast\nnematoblastic\nNematocera\nnematoceran\nnematocerous\nnematocide\nnematocyst\nnematocystic\nNematoda\nnematode\nnematodiasis\nnematogene\nnematogenic\nnematogenous\nnematognath\nNematognathi\nnematognathous\nnematogone\nnematogonous\nnematoid\nNematoidea\nnematoidean\nnematologist\nnematology\nNematomorpha\nnematophyton\nNematospora\nnematozooid\nNembutal\nNemean\nNemertea\nnemertean\nNemertina\nnemertine\nNemertinea\nnemertinean\nNemertini\nnemertoid\nnemeses\nNemesia\nnemesic\nNemesis\nNemichthyidae\nNemichthys\nNemocera\nnemoceran\nnemocerous\nNemopanthus\nNemophila\nnemophilist\nnemophilous\nnemophily\nnemoral\nNemorensian\nnemoricole\nNengahiba\nnenta\nnenuphar\nneo\nneoacademic\nneoanthropic\nNeoarctic\nneoarsphenamine\nNeobalaena\nNeobeckia\nneoblastic\nneobotanist\nneobotany\nNeocene\nNeoceratodus\nneocerotic\nneoclassic\nneoclassicism\nneoclassicist\nNeocomian\nneocosmic\nneocracy\nneocriticism\nneocyanine\nneocyte\nneocytosis\nneodamode\nneodidymium\nneodymium\nNeofabraea\nneofetal\nneofetus\nNeofiber\nneoformation\nneoformative\nNeogaea\nNeogaean\nneogamous\nneogamy\nNeogene\nneogenesis\nneogenetic\nNeognathae\nneognathic\nneognathous\nneogrammarian\nneogrammatical\nneographic\nneohexane\nNeohipparion\nneoholmia\nneoholmium\nneoimpressionism\nneoimpressionist\nneolalia\nneolater\nneolatry\nneolith\nneolithic\nneologian\nneologianism\nneologic\nneological\nneologically\nneologism\nneologist\nneologistic\nneologistical\nneologization\nneologize\nneology\nneomedievalism\nneomenia\nneomenian\nNeomeniidae\nneomiracle\nneomodal\nneomorph\nNeomorpha\nneomorphic\nneomorphism\nNeomylodon\nneon\nneonatal\nneonate\nneonatus\nneonomian\nneonomianism\nneontology\nneonychium\nneopagan\nneopaganism\nneopaganize\nNeopaleozoic\nneopallial\nneopallium\nneoparaffin\nneophilism\nneophilological\nneophilologist\nneophobia\nneophobic\nneophrastic\nNeophron\nneophyte\nneophytic\nneophytish\nneophytism\nNeopieris\nneoplasia\nneoplasm\nneoplasma\nneoplasmata\nneoplastic\nneoplasticism\nneoplasty\nNeoplatonic\nNeoplatonician\nNeoplatonism\nNeoplatonist\nneoprene\nneorama\nneorealism\nNeornithes\nneornithic\nNeosalvarsan\nNeosorex\nNeosporidia\nneossin\nneossology\nneossoptile\nneostriatum\nneostyle\nneoteinia\nneoteinic\nneotenia\nneotenic\nneoteny\nneoteric\nneoterically\nneoterism\nneoterist\nneoteristic\nneoterize\nneothalamus\nNeotoma\nNeotragus\nNeotremata\nNeotropic\nNeotropical\nneotype\nneovitalism\nneovolcanic\nNeowashingtonia\nneoytterbium\nneoza\nNeozoic\nNep\nnep\nNepa\nNepal\nNepalese\nNepali\nNepenthaceae\nnepenthaceous\nnepenthe\nnepenthean\nNepenthes\nnepenthes\nneper\nNeperian\nNepeta\nnephalism\nnephalist\nNephele\nnephele\nnepheligenous\nnepheline\nnephelinic\nnephelinite\nnephelinitic\nnephelinitoid\nnephelite\nNephelium\nnephelognosy\nnepheloid\nnephelometer\nnephelometric\nnephelometrical\nnephelometrically\nnephelometry\nnephelorometer\nnepheloscope\nnephesh\nnephew\nnephewship\nNephila\nNephilinae\nNephite\nnephogram\nnephograph\nnephological\nnephologist\nnephology\nnephoscope\nnephradenoma\nnephralgia\nnephralgic\nnephrapostasis\nnephratonia\nnephrauxe\nnephrectasia\nnephrectasis\nnephrectomize\nnephrectomy\nnephrelcosis\nnephremia\nnephremphraxis\nnephria\nnephric\nnephridia\nnephridial\nnephridiopore\nnephridium\nnephrism\nnephrite\nnephritic\nnephritical\nnephritis\nnephroabdominal\nnephrocardiac\nnephrocele\nnephrocoele\nnephrocolic\nnephrocolopexy\nnephrocoloptosis\nnephrocystitis\nnephrocystosis\nnephrocyte\nnephrodinic\nNephrodium\nnephroerysipelas\nnephrogastric\nnephrogenetic\nnephrogenic\nnephrogenous\nnephrogonaduct\nnephrohydrosis\nnephrohypertrophy\nnephroid\nNephrolepis\nnephrolith\nnephrolithic\nnephrolithotomy\nnephrologist\nnephrology\nnephrolysin\nnephrolysis\nnephrolytic\nnephromalacia\nnephromegaly\nnephromere\nnephron\nnephroncus\nnephroparalysis\nnephropathic\nnephropathy\nnephropexy\nnephrophthisis\nnephropore\nNephrops\nNephropsidae\nnephroptosia\nnephroptosis\nnephropyelitis\nnephropyeloplasty\nnephropyosis\nnephrorrhagia\nnephrorrhaphy\nnephros\nnephrosclerosis\nnephrosis\nnephrostoma\nnephrostome\nnephrostomial\nnephrostomous\nnephrostomy\nnephrotome\nnephrotomize\nnephrotomy\nnephrotoxic\nnephrotoxicity\nnephrotoxin\nnephrotuberculosis\nnephrotyphoid\nnephrotyphus\nnephrozymosis\nNepidae\nnepionic\nnepman\nnepotal\nnepote\nnepotic\nnepotious\nnepotism\nnepotist\nnepotistical\nnepouite\nNeptune\nNeptunean\nNeptunian\nneptunism\nneptunist\nneptunium\nNereid\nNereidae\nnereidiform\nNereidiformia\nNereis\nnereite\nNereocystis\nNeri\nNerine\nnerine\nNerita\nneritic\nNeritidae\nNeritina\nneritoid\nNerium\nNeroic\nNeronian\nNeronic\nNeronize\nnerterology\nNerthridae\nNerthrus\nnerval\nnervate\nnervation\nnervature\nnerve\nnerveless\nnervelessly\nnervelessness\nnervelet\nnerveproof\nnerver\nnerveroot\nnervid\nnerviduct\nNervii\nnervily\nnervimotion\nnervimotor\nnervimuscular\nnervine\nnerviness\nnerving\nnervish\nnervism\nnervomuscular\nnervosanguineous\nnervose\nnervosism\nnervosity\nnervous\nnervously\nnervousness\nnervular\nnervule\nnervulet\nnervulose\nnervuration\nnervure\nnervy\nnescience\nnescient\nnese\nnesh\nneshly\nneshness\nNesiot\nnesiote\nNeskhi\nNeslia\nNesogaea\nNesogaean\nNesokia\nNesonetta\nNesotragus\nNespelim\nnesquehonite\nness\nnesslerization\nNesslerize\nnesslerize\nnest\nnestable\nnestage\nnester\nnestful\nnestiatria\nnestitherapy\nnestle\nnestler\nnestlike\nnestling\nNestor\nNestorian\nNestorianism\nNestorianize\nNestorianizer\nnestorine\nnesty\nNet\nnet\nnetball\nnetbraider\nnetbush\nnetcha\nNetchilik\nnete\nneter\nnetful\nneth\nnetheist\nnether\nNetherlander\nNetherlandian\nNetherlandic\nNetherlandish\nnethermore\nnethermost\nnetherstock\nnetherstone\nnetherward\nnetherwards\nNethinim\nneti\nnetleaf\nnetlike\nnetmaker\nnetmaking\nnetman\nnetmonger\nnetop\nnetsman\nnetsuke\nnettable\nNettapus\nnetted\nnetter\nNettie\nnetting\nNettion\nnettle\nnettlebed\nnettlebird\nnettlefire\nnettlefish\nnettlefoot\nnettlelike\nnettlemonger\nnettler\nnettlesome\nnettlewort\nnettling\nnettly\nNetty\nnetty\nnetwise\nnetwork\nNeudeckian\nneugroschen\nneuma\nneumatic\nneumatize\nneume\nneumic\nneurad\nneuradynamia\nneural\nneurale\nneuralgia\nneuralgiac\nneuralgic\nneuralgiform\nneuralgy\nneuralist\nneurapophyseal\nneurapophysial\nneurapophysis\nneurarthropathy\nneurasthenia\nneurasthenic\nneurasthenical\nneurasthenically\nneurataxia\nneurataxy\nneuration\nneuratrophia\nneuratrophic\nneuratrophy\nneuraxial\nneuraxis\nneuraxon\nneuraxone\nneurectasia\nneurectasis\nneurectasy\nneurectome\nneurectomic\nneurectomy\nneurectopia\nneurectopy\nneurenteric\nneurepithelium\nneurergic\nneurexairesis\nneurhypnology\nneurhypnotist\nneuriatry\nneuric\nneurilema\nneurilematic\nneurilemma\nneurilemmal\nneurilemmatic\nneurilemmatous\nneurilemmitis\nneurility\nneurin\nneurine\nneurinoma\nneurism\nneurite\nneuritic\nneuritis\nneuroanatomical\nneuroanatomy\nneurobiotactic\nneurobiotaxis\nneuroblast\nneuroblastic\nneuroblastoma\nneurocanal\nneurocardiac\nneurocele\nneurocentral\nneurocentrum\nneurochemistry\nneurochitin\nneurochondrite\nneurochord\nneurochorioretinitis\nneurocirculatory\nneurocity\nneuroclonic\nneurocoele\nneurocoelian\nneurocyte\nneurocytoma\nneurodegenerative\nneurodendrite\nneurodendron\nneurodermatitis\nneurodermatosis\nneurodermitis\nneurodiagnosis\nneurodynamic\nneurodynia\nneuroepidermal\nneuroepithelial\nneuroepithelium\nneurofibril\nneurofibrilla\nneurofibrillae\nneurofibrillar\nneurofibroma\nneurofibromatosis\nneurofil\nneuroganglion\nneurogastralgia\nneurogastric\nneurogenesis\nneurogenetic\nneurogenic\nneurogenous\nneuroglandular\nneuroglia\nneurogliac\nneuroglial\nneurogliar\nneuroglic\nneuroglioma\nneurogliosis\nneurogram\nneurogrammic\nneurographic\nneurography\nneurohistology\nneurohumor\nneurohumoral\nneurohypnology\nneurohypnotic\nneurohypnotism\nneurohypophysis\nneuroid\nneurokeratin\nneurokyme\nneurological\nneurologist\nneurologize\nneurology\nneurolymph\nneurolysis\nneurolytic\nneuroma\nneuromalacia\nneuromalakia\nneuromast\nneuromastic\nneuromatosis\nneuromatous\nneuromere\nneuromerism\nneuromerous\nneuromimesis\nneuromimetic\nneuromotor\nneuromuscular\nneuromusculature\nneuromyelitis\nneuromyic\nneuron\nneuronal\nneurone\nneuronic\nneuronism\nneuronist\nneuronophagia\nneuronophagy\nneuronym\nneuronymy\nneuroparalysis\nneuroparalytic\nneuropath\nneuropathic\nneuropathical\nneuropathically\nneuropathist\nneuropathological\nneuropathologist\nneuropathology\nneuropathy\nNeurope\nneurophagy\nneurophil\nneurophile\nneurophilic\nneurophysiological\nneurophysiology\nneuropile\nneuroplasm\nneuroplasmic\nneuroplasty\nneuroplexus\nneuropodial\nneuropodium\nneuropodous\nneuropore\nneuropsychiatric\nneuropsychiatrist\nneuropsychiatry\nneuropsychic\nneuropsychological\nneuropsychologist\nneuropsychology\nneuropsychopathic\nneuropsychopathy\nneuropsychosis\nneuropter\nNeuroptera\nneuropteran\nNeuropteris\nneuropterist\nneuropteroid\nNeuropteroidea\nneuropterological\nneuropterology\nneuropteron\nneuropterous\nneuroretinitis\nneurorrhaphy\nNeurorthoptera\nneurorthopteran\nneurorthopterous\nneurosal\nneurosarcoma\nneurosclerosis\nneuroses\nneurosis\nneuroskeletal\nneuroskeleton\nneurosome\nneurospasm\nneurospongium\nneurosthenia\nneurosurgeon\nneurosurgery\nneurosurgical\nneurosuture\nneurosynapse\nneurosyphilis\nneurotendinous\nneurotension\nneurotherapeutics\nneurotherapist\nneurotherapy\nneurothlipsis\nneurotic\nneurotically\nneuroticism\nneuroticize\nneurotization\nneurotome\nneurotomical\nneurotomist\nneurotomize\nneurotomy\nneurotonic\nneurotoxia\nneurotoxic\nneurotoxin\nneurotripsy\nneurotrophic\nneurotrophy\nneurotropic\nneurotropism\nneurovaccination\nneurovaccine\nneurovascular\nneurovisceral\nneurula\nneurypnological\nneurypnologist\nneurypnology\nNeustrian\nneuter\nneuterdom\nneuterlike\nneuterly\nneuterness\nneutral\nneutralism\nneutralist\nneutrality\nneutralization\nneutralize\nneutralizer\nneutrally\nneutralness\nneutrino\nneutroceptive\nneutroceptor\nneutroclusion\nNeutrodyne\nneutrologistic\nneutron\nneutropassive\nneutrophile\nneutrophilia\nneutrophilic\nneutrophilous\nNevada\nNevadan\nnevadite\nneve\nnevel\nnever\nneverland\nnevermore\nnevertheless\nNeville\nnevo\nnevoid\nNevome\nnevoy\nnevus\nnevyanskite\nnew\nNewar\nNewari\nnewberyite\nnewcal\nNewcastle\nnewcome\nnewcomer\nnewel\nnewelty\nnewfangle\nnewfangled\nnewfangledism\nnewfangledly\nnewfangledness\nnewfanglement\nNewfoundland\nNewfoundlander\nNewichawanoc\nnewing\nnewings\nnewish\nnewlandite\nnewly\nnewlywed\nNewmanism\nNewmanite\nNewmanize\nnewmarket\nnewness\nNewport\nnews\nnewsbill\nnewsboard\nnewsboat\nnewsboy\nnewscast\nnewscaster\nnewscasting\nnewsful\nnewsiness\nnewsless\nnewslessness\nnewsletter\nnewsman\nnewsmonger\nnewsmongering\nnewsmongery\nnewspaper\nnewspaperdom\nnewspaperese\nnewspaperish\nnewspaperized\nnewspaperman\nnewspaperwoman\nnewspapery\nnewsprint\nnewsreader\nnewsreel\nnewsroom\nnewssheet\nnewsstand\nnewsteller\nnewsworthiness\nnewsworthy\nnewsy\nnewt\nnewtake\nnewton\nNewtonian\nNewtonianism\nNewtonic\nNewtonist\nnewtonite\nnexal\nnext\nnextly\nnextness\nnexum\nnexus\nneyanda\nngai\nngaio\nngapi\nNgoko\nNguyen\nNhan\nNheengatu\nni\nniacin\nNiagara\nNiagaran\nNiall\nNiantic\nNias\nNiasese\nniata\nnib\nnibbana\nnibbed\nnibber\nnibble\nnibbler\nnibblingly\nnibby\nniblick\nniblike\nnibong\nnibs\nnibsome\nNicaean\nNicaragua\nNicaraguan\nNicarao\nniccolic\nniccoliferous\nniccolite\nniccolous\nNice\nnice\nniceish\nniceling\nnicely\nNicene\nniceness\nNicenian\nNicenist\nnicesome\nnicetish\nnicety\nNichael\nniche\nnichelino\nnicher\nNicholas\nNici\nNick\nnick\nnickel\nnickelage\nnickelic\nnickeliferous\nnickeline\nnickeling\nnickelization\nnickelize\nnickellike\nnickelodeon\nnickelous\nnickeltype\nnicker\nnickerpecker\nnickey\nNickie\nNickieben\nnicking\nnickle\nnickname\nnicknameable\nnicknamee\nnicknameless\nnicknamer\nNickneven\nnickstick\nnicky\nNicobar\nNicobarese\nNicodemite\nNicodemus\nNicol\nNicolaitan\nNicolaitanism\nNicolas\nnicolayite\nNicolette\nNicolo\nnicolo\nNicomachean\nnicotia\nnicotian\nNicotiana\nnicotianin\nnicotic\nnicotinamide\nnicotine\nnicotinean\nnicotined\nnicotineless\nnicotinian\nnicotinic\nnicotinism\nnicotinize\nnicotism\nnicotize\nnictate\nnictation\nnictitant\nnictitate\nnictitation\nnid\nnidal\nnidamental\nnidana\nnidation\nnidatory\nniddering\nniddick\nniddle\nnide\nnidge\nnidget\nnidgety\nnidi\nnidicolous\nnidificant\nnidificate\nnidification\nnidificational\nnidifugous\nnidify\nniding\nnidologist\nnidology\nnidor\nnidorosity\nnidorous\nnidorulent\nnidulant\nNidularia\nNidulariaceae\nnidulariaceous\nNidulariales\nnidulate\nnidulation\nnidulus\nnidus\nniece\nnieceless\nnieceship\nniellated\nnielled\nniellist\nniello\nNiels\nniepa\nNierembergia\nNiersteiner\nNietzschean\nNietzscheanism\nNietzscheism\nnieve\nnieveta\nnievling\nnife\nnifesima\nniffer\nnific\nnifle\nnifling\nnifty\nnig\nNigel\nNigella\nNigerian\nniggard\nniggardize\nniggardliness\nniggardling\nniggardly\nniggardness\nnigger\nniggerdom\nniggerfish\nniggergoose\nniggerhead\nniggerish\nniggerism\nniggerling\nniggertoe\nniggerweed\nniggery\nniggle\nniggler\nniggling\nnigglingly\nniggly\nnigh\nnighly\nnighness\nnight\nnightcap\nnightcapped\nnightcaps\nnightchurr\nnightdress\nnighted\nnightfall\nnightfish\nnightflit\nnightfowl\nnightgown\nnighthawk\nnightie\nnightingale\nnightingalize\nnightjar\nnightless\nnightlessness\nnightlike\nnightlong\nnightly\nnightman\nnightmare\nnightmarish\nnightmarishly\nnightmary\nnights\nnightshade\nnightshine\nnightshirt\nnightstock\nnightstool\nnighttide\nnighttime\nnightwalker\nnightwalking\nnightward\nnightwards\nnightwear\nnightwork\nnightworker\nnignay\nnignye\nnigori\nnigranilin\nnigraniline\nnigre\nnigrescence\nnigrescent\nnigresceous\nnigrescite\nnigrification\nnigrified\nnigrify\nnigrine\nNigritian\nnigrities\nnigritude\nnigritudinous\nnigrosine\nnigrous\nnigua\nNihal\nnihilianism\nnihilianistic\nnihilification\nnihilify\nnihilism\nnihilist\nnihilistic\nnihilitic\nnihility\nnikau\nNikeno\nnikethamide\nNikko\nniklesite\nNikolai\nnil\nNile\nnilgai\nNilometer\nNilometric\nNiloscope\nNilot\nNilotic\nNilous\nnilpotent\nNils\nnim\nnimb\nnimbated\nnimbed\nnimbi\nnimbiferous\nnimbification\nnimble\nnimblebrained\nnimbleness\nnimbly\nnimbose\nnimbosity\nnimbus\nnimbused\nnimiety\nniminy\nnimious\nNimkish\nnimmer\nNimrod\nNimrodian\nNimrodic\nNimrodical\nNimrodize\nnimshi\nNina\nnincom\nnincompoop\nnincompoopery\nnincompoophood\nnincompoopish\nnine\nninebark\nninefold\nnineholes\nninepegs\nninepence\nninepenny\nninepin\nninepins\nninescore\nnineted\nnineteen\nnineteenfold\nnineteenth\nnineteenthly\nninetieth\nninety\nninetyfold\nninetyish\nninetyknot\nNinevite\nNinevitical\nNinevitish\nNing\nNingpo\nNinja\nninny\nninnyhammer\nninnyish\nninnyism\nninnyship\nninnywatch\nNinon\nninon\nNinox\nninth\nninthly\nnintu\nninut\nniobate\nNiobe\nNiobean\nniobic\nNiobid\nNiobite\nniobite\nniobium\nniobous\nniog\nniota\nNip\nnip\nnipa\nnipcheese\nniphablepsia\nniphotyphlosis\nNipissing\nNipmuc\nnipper\nnipperkin\nnippers\nnippily\nnippiness\nnipping\nnippingly\nnippitate\nnipple\nnippleless\nnipplewort\nNipponese\nNipponism\nnipponium\nNipponize\nnippy\nnipter\nNiquiran\nnirles\nnirmanakaya\nnirvana\nnirvanic\nNisaean\nNisan\nnisei\nNishada\nnishiki\nnisnas\nnispero\nNisqualli\nnisse\nnisus\nnit\nnitch\nnitchevo\nNitella\nnitency\nnitently\nniter\nniterbush\nnitered\nnither\nnithing\nnitid\nnitidous\nnitidulid\nNitidulidae\nnito\nniton\nnitramine\nnitramino\nnitranilic\nnitraniline\nnitrate\nnitratine\nnitration\nnitrator\nNitrian\nnitriary\nnitric\nnitridation\nnitride\nnitriding\nnitridization\nnitridize\nnitrifaction\nnitriferous\nnitrifiable\nnitrification\nnitrifier\nnitrify\nnitrile\nNitriot\nnitrite\nnitro\nnitroalizarin\nnitroamine\nnitroaniline\nNitrobacter\nnitrobacteria\nNitrobacteriaceae\nNitrobacterieae\nnitrobarite\nnitrobenzene\nnitrobenzol\nnitrobenzole\nnitrocalcite\nnitrocellulose\nnitrocellulosic\nnitrochloroform\nnitrocotton\nnitroform\nnitrogelatin\nnitrogen\nnitrogenate\nnitrogenation\nnitrogenic\nnitrogenization\nnitrogenize\nnitrogenous\nnitroglycerin\nnitrohydrochloric\nnitrolamine\nnitrolic\nnitrolime\nnitromagnesite\nnitrometer\nnitrometric\nnitromuriate\nnitromuriatic\nnitronaphthalene\nnitroparaffin\nnitrophenol\nnitrophilous\nnitrophyte\nnitrophytic\nnitroprussiate\nnitroprussic\nnitroprusside\nnitrosamine\nnitrosate\nnitrosification\nnitrosify\nnitrosite\nnitrosobacteria\nnitrosochloride\nNitrosococcus\nNitrosomonas\nnitrososulphuric\nnitrostarch\nnitrosulphate\nnitrosulphonic\nnitrosulphuric\nnitrosyl\nnitrosylsulphuric\nnitrotoluene\nnitrous\nnitroxyl\nnitryl\nnitter\nnitty\nnitwit\nNitzschia\nNitzschiaceae\nNiuan\nNiue\nnival\nnivation\nnivellate\nnivellation\nnivellator\nnivellization\nnivenite\nniveous\nnivicolous\nnivosity\nnix\nnixie\nniyoga\nNizam\nnizam\nnizamate\nnizamut\nnizy\nnjave\nNo\nno\nnoa\nNoachian\nNoachic\nNoachical\nNoachite\nNoah\nNoahic\nNoam\nnob\nnobber\nnobbily\nnobble\nnobbler\nnobbut\nnobby\nnobiliary\nnobilify\nnobilitate\nnobilitation\nnobility\nnoble\nnoblehearted\nnobleheartedly\nnobleheartedness\nnobleman\nnoblemanly\nnobleness\nnoblesse\nnoblewoman\nnobley\nnobly\nnobody\nnobodyness\nnobs\nnocake\nNocardia\nnocardiosis\nnocent\nnocerite\nnociassociation\nnociceptive\nnociceptor\nnociperception\nnociperceptive\nnock\nnocket\nnocktat\nnoctambulant\nnoctambulation\nnoctambule\nnoctambulism\nnoctambulist\nnoctambulistic\nnoctambulous\nNocten\nnoctidial\nnoctidiurnal\nnoctiferous\nnoctiflorous\nNoctilio\nNoctilionidae\nNoctiluca\nnoctiluca\nnoctilucal\nnoctilucan\nnoctilucence\nnoctilucent\nNoctilucidae\nnoctilucin\nnoctilucine\nnoctilucous\nnoctiluminous\nnoctipotent\nnoctivagant\nnoctivagation\nnoctivagous\nnoctograph\nnoctovision\nNoctuae\nnoctuid\nNoctuidae\nnoctuiform\nnoctule\nnocturia\nnocturn\nnocturnal\nnocturnally\nnocturne\nnocuity\nnocuous\nnocuously\nnocuousness\nnod\nnodal\nnodality\nnodated\nnodder\nnodding\nnoddingly\nnoddle\nnoddy\nnode\nnoded\nnodi\nnodiak\nnodical\nnodicorn\nnodiferous\nnodiflorous\nnodiform\nNodosaria\nnodosarian\nnodosariform\nnodosarine\nnodose\nnodosity\nnodous\nnodular\nnodulate\nnodulated\nnodulation\nnodule\nnoduled\nnodulize\nnodulose\nnodulous\nnodulus\nnodus\nnoegenesis\nnoegenetic\nNoel\nnoel\nnoematachograph\nnoematachometer\nnoematachometic\nNoemi\nNoetic\nnoetic\nnoetics\nnog\nnogada\nNogai\nnogal\nnoggen\nnoggin\nnogging\nnoghead\nnogheaded\nnohow\nNohuntsik\nnoibwood\nnoil\nnoilage\nnoiler\nnoily\nnoint\nnointment\nnoir\nnoise\nnoiseful\nnoisefully\nnoiseless\nnoiselessly\nnoiselessness\nnoisemaker\nnoisemaking\nnoiseproof\nnoisette\nnoisily\nnoisiness\nnoisome\nnoisomely\nnoisomeness\nnoisy\nnokta\nNolascan\nnolition\nNoll\nnoll\nnolle\nnolleity\nnollepros\nnolo\nnoma\nnomad\nnomadian\nnomadic\nnomadical\nnomadically\nNomadidae\nnomadism\nnomadization\nnomadize\nnomancy\nnomarch\nnomarchy\nNomarthra\nnomarthral\nnombril\nnome\nNomeidae\nnomenclate\nnomenclative\nnomenclator\nnomenclatorial\nnomenclatorship\nnomenclatory\nnomenclatural\nnomenclature\nnomenclaturist\nNomeus\nnomial\nnomic\nnomina\nnominable\nnominal\nnominalism\nnominalist\nnominalistic\nnominality\nnominally\nnominate\nnominated\nnominately\nnomination\nnominatival\nnominative\nnominatively\nnominator\nnominatrix\nnominature\nnominee\nnomineeism\nnominy\nnomism\nnomisma\nnomismata\nnomistic\nnomocanon\nnomocracy\nnomogenist\nnomogenous\nnomogeny\nnomogram\nnomograph\nnomographer\nnomographic\nnomographical\nnomographically\nnomography\nnomological\nnomologist\nnomology\nnomopelmous\nnomophylax\nnomophyllous\nnomos\nnomotheism\nnomothete\nnomothetes\nnomothetic\nnomothetical\nnon\nNona\nnonabandonment\nnonabdication\nnonabiding\nnonability\nnonabjuration\nnonabjurer\nnonabolition\nnonabridgment\nnonabsentation\nnonabsolute\nnonabsolution\nnonabsorbable\nnonabsorbent\nnonabsorptive\nnonabstainer\nnonabstaining\nnonabstemious\nnonabstention\nnonabstract\nnonacademic\nnonacceding\nnonacceleration\nnonaccent\nnonacceptance\nnonacceptant\nnonacceptation\nnonaccess\nnonaccession\nnonaccessory\nnonaccidental\nnonaccompaniment\nnonaccompanying\nnonaccomplishment\nnonaccredited\nnonaccretion\nnonachievement\nnonacid\nnonacknowledgment\nnonacosane\nnonacoustic\nnonacquaintance\nnonacquiescence\nnonacquiescent\nnonacquisitive\nnonacquittal\nnonact\nnonactinic\nnonaction\nnonactionable\nnonactive\nnonactuality\nnonaculeate\nnonacute\nnonadditive\nnonadecane\nnonadherence\nnonadherent\nnonadhesion\nnonadhesive\nnonadjacent\nnonadjectival\nnonadjournment\nnonadjustable\nnonadjustive\nnonadjustment\nnonadministrative\nnonadmiring\nnonadmission\nnonadmitted\nnonadoption\nNonadorantes\nnonadornment\nnonadult\nnonadvancement\nnonadvantageous\nnonadventitious\nnonadventurous\nnonadverbial\nnonadvertence\nnonadvertency\nnonadvocate\nnonaerating\nnonaerobiotic\nnonaesthetic\nnonaffection\nnonaffiliated\nnonaffirmation\nnonage\nnonagenarian\nnonagency\nnonagent\nnonagesimal\nnonagglutinative\nnonagglutinator\nnonaggression\nnonaggressive\nnonagon\nnonagrarian\nnonagreement\nnonagricultural\nnonahydrate\nnonaid\nnonair\nnonalarmist\nnonalcohol\nnonalcoholic\nnonalgebraic\nnonalienating\nnonalienation\nnonalignment\nnonalkaloidal\nnonallegation\nnonallegorical\nnonalliterated\nnonalliterative\nnonallotment\nnonalluvial\nnonalphabetic\nnonaltruistic\nnonaluminous\nnonamalgamable\nnonamendable\nnonamino\nnonamotion\nnonamphibious\nnonamputation\nnonanalogy\nnonanalytical\nnonanalyzable\nnonanalyzed\nnonanaphoric\nnonanaphthene\nnonanatomical\nnonancestral\nnonane\nnonanesthetized\nnonangelic\nnonangling\nnonanimal\nnonannexation\nnonannouncement\nnonannuitant\nnonannulment\nnonanoic\nnonanonymity\nnonanswer\nnonantagonistic\nnonanticipative\nnonantigenic\nnonapologetic\nnonapostatizing\nnonapostolic\nnonapparent\nnonappealable\nnonappearance\nnonappearer\nnonappearing\nnonappellate\nnonappendicular\nnonapplication\nnonapply\nnonappointment\nnonapportionable\nnonapposable\nnonappraisal\nnonappreciation\nnonapprehension\nnonappropriation\nnonapproval\nnonaqueous\nnonarbitrable\nnonarcing\nnonargentiferous\nnonaristocratic\nnonarithmetical\nnonarmament\nnonarmigerous\nnonaromatic\nnonarraignment\nnonarrival\nnonarsenical\nnonarterial\nnonartesian\nnonarticulated\nnonarticulation\nnonartistic\nnonary\nnonascendancy\nnonascertainable\nnonascertaining\nnonascetic\nnonascription\nnonaseptic\nnonaspersion\nnonasphalt\nnonaspirate\nnonaspiring\nnonassault\nnonassent\nnonassentation\nnonassented\nnonassenting\nnonassertion\nnonassertive\nnonassessable\nnonassessment\nnonassignable\nnonassignment\nnonassimilable\nnonassimilating\nnonassimilation\nnonassistance\nnonassistive\nnonassociable\nnonassortment\nnonassurance\nnonasthmatic\nnonastronomical\nnonathletic\nnonatmospheric\nnonatonement\nnonattached\nnonattachment\nnonattainment\nnonattendance\nnonattendant\nnonattention\nnonattestation\nnonattribution\nnonattributive\nnonaugmentative\nnonauricular\nnonauriferous\nnonauthentication\nnonauthoritative\nnonautomatic\nnonautomotive\nnonavoidance\nnonaxiomatic\nnonazotized\nnonbachelor\nnonbacterial\nnonbailable\nnonballoting\nnonbanishment\nnonbankable\nnonbarbarous\nnonbaronial\nnonbase\nnonbasement\nnonbasic\nnonbasing\nnonbathing\nnonbearded\nnonbearing\nnonbeing\nnonbeliever\nnonbelieving\nnonbelligerent\nnonbending\nnonbenevolent\nnonbetrayal\nnonbeverage\nnonbilabiate\nnonbilious\nnonbinomial\nnonbiological\nnonbitter\nnonbituminous\nnonblack\nnonblameless\nnonbleeding\nnonblended\nnonblockaded\nnonblocking\nnonblooded\nnonblooming\nnonbodily\nnonbookish\nnonborrower\nnonbotanical\nnonbourgeois\nnonbranded\nnonbreakable\nnonbreeder\nnonbreeding\nnonbroodiness\nnonbroody\nnonbrowsing\nnonbudding\nnonbulbous\nnonbulkhead\nnonbureaucratic\nnonburgage\nnonburgess\nnonburnable\nnonburning\nnonbursting\nnonbusiness\nnonbuying\nnoncabinet\nnoncaffeine\nnoncaking\nNoncalcarea\nnoncalcareous\nnoncalcified\nnoncallability\nnoncallable\nnoncancellable\nnoncannibalistic\nnoncanonical\nnoncanonization\nnoncanvassing\nnoncapillarity\nnoncapillary\nnoncapital\nnoncapitalist\nnoncapitalistic\nnoncapitulation\nnoncapsizable\nnoncapture\nnoncarbonate\nnoncareer\nnoncarnivorous\nnoncarrier\nnoncartelized\nnoncaste\nnoncastigation\nnoncataloguer\nnoncatarrhal\nnoncatechizable\nnoncategorical\nnoncathedral\nnoncatholicity\nnoncausality\nnoncausation\nnonce\nnoncelebration\nnoncelestial\nnoncellular\nnoncellulosic\nnoncensored\nnoncensorious\nnoncensus\nnoncentral\nnoncereal\nnoncerebral\nnonceremonial\nnoncertain\nnoncertainty\nnoncertified\nnonchafing\nnonchalance\nnonchalant\nnonchalantly\nnonchalantness\nnonchalky\nnonchallenger\nnonchampion\nnonchangeable\nnonchanging\nnoncharacteristic\nnonchargeable\nnonchastisement\nnonchastity\nnonchemical\nnonchemist\nnonchivalrous\nnonchokable\nnonchokebore\nnonchronological\nnonchurch\nnonchurched\nnonchurchgoer\nnonciliate\nnoncircuit\nnoncircuital\nnoncircular\nnoncirculation\nnoncitation\nnoncitizen\nnoncivilized\nnonclaim\nnonclaimable\nnonclassable\nnonclassical\nnonclassifiable\nnonclassification\nnonclastic\nnonclearance\nnoncleistogamic\nnonclergyable\nnonclerical\nnonclimbable\nnonclinical\nnonclose\nnonclosure\nnonclotting\nnoncoagulability\nnoncoagulable\nnoncoagulation\nnoncoalescing\nnoncock\nnoncoercion\nnoncoercive\nnoncognate\nnoncognition\nnoncognitive\nnoncognizable\nnoncognizance\nnoncoherent\nnoncohesion\nnoncohesive\nnoncoinage\nnoncoincidence\nnoncoincident\nnoncoincidental\nnoncoking\nnoncollaboration\nnoncollaborative\nnoncollapsible\nnoncollectable\nnoncollection\nnoncollegiate\nnoncollinear\nnoncolloid\nnoncollusion\nnoncollusive\nnoncolonial\nnoncoloring\nnoncom\nnoncombat\nnoncombatant\nnoncombination\nnoncombining\nnoncombustible\nnoncombustion\nnoncome\nnoncoming\nnoncommemoration\nnoncommencement\nnoncommendable\nnoncommensurable\nnoncommercial\nnoncommissioned\nnoncommittal\nnoncommittalism\nnoncommittally\nnoncommittalness\nnoncommonable\nnoncommorancy\nnoncommunal\nnoncommunicable\nnoncommunicant\nnoncommunicating\nnoncommunication\nnoncommunion\nnoncommunist\nnoncommunistic\nnoncommutative\nnoncompearance\nnoncompensating\nnoncompensation\nnoncompetency\nnoncompetent\nnoncompeting\nnoncompetitive\nnoncompetitively\nnoncomplaisance\nnoncompletion\nnoncompliance\nnoncomplicity\nnoncomplying\nnoncomposite\nnoncompoundable\nnoncompounder\nnoncomprehension\nnoncompressible\nnoncompression\nnoncompulsion\nnoncomputation\nnoncon\nnonconcealment\nnonconceiving\nnonconcentration\nnonconception\nnonconcern\nnonconcession\nnonconciliating\nnonconcludency\nnonconcludent\nnonconcluding\nnonconclusion\nnonconcordant\nnonconcur\nnonconcurrence\nnonconcurrency\nnonconcurrent\nnoncondensable\nnoncondensation\nnoncondensible\nnoncondensing\nnoncondimental\nnonconditioned\nnoncondonation\nnonconducive\nnonconductibility\nnonconductible\nnonconducting\nnonconduction\nnonconductive\nnonconductor\nnonconfederate\nnonconferrable\nnonconfession\nnonconficient\nnonconfident\nnonconfidential\nnonconfinement\nnonconfirmation\nnonconfirmative\nnonconfiscable\nnonconfiscation\nnonconfitent\nnonconflicting\nnonconform\nnonconformable\nnonconformably\nnonconformance\nnonconformer\nnonconforming\nnonconformism\nnonconformist\nnonconformistical\nnonconformistically\nnonconformitant\nnonconformity\nnonconfutation\nnoncongealing\nnoncongenital\nnoncongestion\nnoncongratulatory\nnoncongruent\nnonconjectural\nnonconjugal\nnonconjugate\nnonconjunction\nnonconnection\nnonconnective\nnonconnivance\nnonconnotative\nnonconnubial\nnonconscientious\nnonconscious\nnonconscription\nnonconsecration\nnonconsecutive\nnonconsent\nnonconsenting\nnonconsequence\nnonconsequent\nnonconservation\nnonconservative\nnonconserving\nnonconsideration\nnonconsignment\nnonconsistorial\nnonconsoling\nnonconsonant\nnonconsorting\nnonconspirator\nnonconspiring\nnonconstituent\nnonconstitutional\nnonconstraint\nnonconstruable\nnonconstruction\nnonconstructive\nnonconsular\nnonconsultative\nnonconsumable\nnonconsumption\nnoncontact\nnoncontagion\nnoncontagionist\nnoncontagious\nnoncontagiousness\nnoncontamination\nnoncontemplative\nnoncontending\nnoncontent\nnoncontention\nnoncontentious\nnoncontentiously\nnonconterminous\nnoncontiguity\nnoncontiguous\nnoncontinental\nnoncontingent\nnoncontinuance\nnoncontinuation\nnoncontinuous\nnoncontraband\nnoncontraction\nnoncontradiction\nnoncontradictory\nnoncontributing\nnoncontribution\nnoncontributor\nnoncontributory\nnoncontrivance\nnoncontrolled\nnoncontrolling\nnoncontroversial\nnonconvective\nnonconvenable\nnonconventional\nnonconvergent\nnonconversable\nnonconversant\nnonconversational\nnonconversion\nnonconvertible\nnonconveyance\nnonconviction\nnonconvivial\nnoncoplanar\nnoncopying\nnoncoring\nnoncorporate\nnoncorporeality\nnoncorpuscular\nnoncorrection\nnoncorrective\nnoncorrelation\nnoncorrespondence\nnoncorrespondent\nnoncorresponding\nnoncorroboration\nnoncorroborative\nnoncorrodible\nnoncorroding\nnoncorrosive\nnoncorruption\nnoncortical\nnoncosmic\nnoncosmopolitism\nnoncostraight\nnoncottager\nnoncotyledonous\nnoncounty\nnoncranking\nnoncreation\nnoncreative\nnoncredence\nnoncredent\nnoncredibility\nnoncredible\nnoncreditor\nnoncreeping\nnoncrenate\nnoncretaceous\nnoncriminal\nnoncriminality\nnoncrinoid\nnoncritical\nnoncrucial\nnoncruciform\nnoncrusading\nnoncrushability\nnoncrushable\nnoncrustaceous\nnoncrystalline\nnoncrystallizable\nnoncrystallized\nnoncrystallizing\nnonculmination\nnonculpable\nnoncultivated\nnoncultivation\nnonculture\nnoncumulative\nnoncurantist\nnoncurling\nnoncurrency\nnoncurrent\nnoncursive\nnoncurtailment\nnoncuspidate\nnoncustomary\nnoncutting\nnoncyclic\nnoncyclical\nnonda\nnondamageable\nnondamnation\nnondancer\nnondangerous\nnondatival\nnondealer\nnondebtor\nnondecadence\nnondecadent\nnondecalcified\nnondecane\nnondecasyllabic\nnondecatoic\nnondecaying\nnondeceivable\nnondeception\nnondeceptive\nNondeciduata\nnondeciduate\nnondeciduous\nnondecision\nnondeclarant\nnondeclaration\nnondeclarer\nnondecomposition\nnondecoration\nnondedication\nnondeduction\nnondefalcation\nnondefamatory\nnondefaulting\nnondefection\nnondefendant\nnondefense\nnondefensive\nnondeference\nnondeferential\nnondefiance\nnondefilement\nnondefining\nnondefinition\nnondefinitive\nnondeforestation\nnondegenerate\nnondegeneration\nnondegerming\nnondegradation\nnondegreased\nnondehiscent\nnondeist\nnondelegable\nnondelegate\nnondelegation\nnondeleterious\nnondeliberate\nnondeliberation\nnondelineation\nnondeliquescent\nnondelirious\nnondeliverance\nnondelivery\nnondemand\nnondemise\nnondemobilization\nnondemocratic\nnondemonstration\nnondendroid\nnondenial\nnondenominational\nnondenominationalism\nnondense\nnondenumerable\nnondenunciation\nnondepartmental\nnondeparture\nnondependence\nnondependent\nnondepletion\nnondeportation\nnondeported\nnondeposition\nnondepositor\nnondepravity\nnondepreciating\nnondepressed\nnondepression\nnondeprivable\nnonderivable\nnonderivative\nnonderogatory\nnondescript\nnondesecration\nnondesignate\nnondesigned\nnondesire\nnondesirous\nnondesisting\nnondespotic\nnondesquamative\nnondestructive\nnondesulphurized\nnondetachable\nnondetailed\nnondetention\nnondetermination\nnondeterminist\nnondeterrent\nnondetest\nnondetonating\nnondetrimental\nnondevelopable\nnondevelopment\nnondeviation\nnondevotional\nnondexterous\nnondiabetic\nnondiabolic\nnondiagnosis\nnondiagonal\nnondiagrammatic\nnondialectal\nnondialectical\nnondialyzing\nnondiametral\nnondiastatic\nnondiathermanous\nnondiazotizable\nnondichogamous\nnondichogamy\nnondichotomous\nnondictation\nnondictatorial\nnondictionary\nnondidactic\nnondieting\nnondifferentation\nnondifferentiable\nnondiffractive\nnondiffusing\nnondigestion\nnondilatable\nnondilution\nnondiocesan\nnondiphtheritic\nnondiphthongal\nnondiplomatic\nnondipterous\nnondirection\nnondirectional\nnondisagreement\nnondisappearing\nnondisarmament\nnondisbursed\nnondiscernment\nnondischarging\nnondisciplinary\nnondisclaim\nnondisclosure\nnondiscontinuance\nnondiscordant\nnondiscountable\nnondiscovery\nnondiscretionary\nnondiscrimination\nnondiscriminatory\nnondiscussion\nnondisestablishment\nnondisfigurement\nnondisfranchised\nnondisingenuous\nnondisintegration\nnondisinterested\nnondisjunct\nnondisjunction\nnondisjunctional\nnondisjunctive\nnondismemberment\nnondismissal\nnondisparaging\nnondisparate\nnondispensation\nnondispersal\nnondispersion\nnondisposal\nnondisqualifying\nnondissenting\nnondissolution\nnondistant\nnondistinctive\nnondistortion\nnondistribution\nnondistributive\nnondisturbance\nnondivergence\nnondivergent\nnondiversification\nnondivinity\nnondivisible\nnondivisiblity\nnondivision\nnondivisional\nnondivorce\nnondo\nnondoctrinal\nnondocumentary\nnondogmatic\nnondoing\nnondomestic\nnondomesticated\nnondominant\nnondonation\nnondramatic\nnondrinking\nnondropsical\nnondrying\nnonduality\nnondumping\nnonduplication\nnondutiable\nnondynastic\nnondyspeptic\nnone\nnonearning\nnoneastern\nnoneatable\nnonecclesiastical\nnonechoic\nnoneclectic\nnoneclipsing\nnonecompense\nnoneconomic\nnonedible\nnoneditor\nnoneditorial\nnoneducable\nnoneducation\nnoneducational\nnoneffective\nnoneffervescent\nnoneffete\nnonefficacious\nnonefficacy\nnonefficiency\nnonefficient\nnoneffusion\nnonego\nnonegoistical\nnonejection\nnonelastic\nnonelasticity\nnonelect\nnonelection\nnonelective\nnonelector\nnonelectric\nnonelectrical\nnonelectrification\nnonelectrified\nnonelectrized\nnonelectrocution\nnonelectrolyte\nnoneleemosynary\nnonelemental\nnonelementary\nnonelimination\nnonelopement\nnonemanating\nnonemancipation\nnonembarkation\nnonembellishment\nnonembezzlement\nnonembryonic\nnonemendation\nnonemergent\nnonemigration\nnonemission\nnonemotional\nnonemphatic\nnonemphatical\nnonempirical\nnonemploying\nnonemployment\nnonemulative\nnonenactment\nnonenclosure\nnonencroachment\nnonencyclopedic\nnonendemic\nnonendorsement\nnonenduring\nnonene\nnonenemy\nnonenergic\nnonenforceability\nnonenforceable\nnonenforcement\nnonengagement\nnonengineering\nnonenrolled\nnonent\nnonentailed\nnonenteric\nnonentertainment\nnonentitative\nnonentitive\nnonentitize\nnonentity\nnonentityism\nnonentomological\nnonentrant\nnonentres\nnonentry\nnonenumerated\nnonenunciation\nnonenvious\nnonenzymic\nnonephemeral\nnonepic\nnonepicurean\nnonepileptic\nnonepiscopal\nnonepiscopalian\nnonepithelial\nnonepochal\nnonequal\nnonequation\nnonequatorial\nnonequestrian\nnonequilateral\nnonequilibrium\nnonequivalent\nnonequivocating\nnonerasure\nnonerecting\nnonerection\nnonerotic\nnonerroneous\nnonerudite\nnoneruption\nnones\nnonescape\nnonespionage\nnonespousal\nnonessential\nnonesthetic\nnonesuch\nnonet\nnoneternal\nnoneternity\nnonetheless\nnonethereal\nnonethical\nnonethnological\nnonethyl\nnoneugenic\nnoneuphonious\nnonevacuation\nnonevanescent\nnonevangelical\nnonevaporation\nnonevasion\nnonevasive\nnoneviction\nnonevident\nnonevidential\nnonevil\nnonevolutionary\nnonevolutionist\nnonevolving\nnonexaction\nnonexaggeration\nnonexamination\nnonexcavation\nnonexcepted\nnonexcerptible\nnonexcessive\nnonexchangeability\nnonexchangeable\nnonexciting\nnonexclamatory\nnonexclusion\nnonexclusive\nnonexcommunicable\nnonexculpation\nnonexcusable\nnonexecution\nnonexecutive\nnonexemplary\nnonexemplificatior\nnonexempt\nnonexercise\nnonexertion\nnonexhibition\nnonexistence\nnonexistent\nnonexistential\nnonexisting\nnonexoneration\nnonexotic\nnonexpansion\nnonexpansive\nnonexpansively\nnonexpectation\nnonexpendable\nnonexperience\nnonexperienced\nnonexperimental\nnonexpert\nnonexpiation\nnonexpiry\nnonexploitation\nnonexplosive\nnonexportable\nnonexportation\nnonexposure\nnonexpulsion\nnonextant\nnonextempore\nnonextended\nnonextensile\nnonextension\nnonextensional\nnonextensive\nnonextenuatory\nnonexteriority\nnonextermination\nnonexternal\nnonexternality\nnonextinction\nnonextortion\nnonextracted\nnonextraction\nnonextraditable\nnonextradition\nnonextraneous\nnonextreme\nnonextrication\nnonextrinsic\nnonexuding\nnonexultation\nnonfabulous\nnonfacetious\nnonfacial\nnonfacility\nnonfacing\nnonfact\nnonfactious\nnonfactory\nnonfactual\nnonfacultative\nnonfaculty\nnonfaddist\nnonfading\nnonfailure\nnonfalse\nnonfamily\nnonfamous\nnonfanatical\nnonfanciful\nnonfarm\nnonfastidious\nnonfat\nnonfatal\nnonfatalistic\nnonfatty\nnonfavorite\nnonfeasance\nnonfeasor\nnonfeatured\nnonfebrile\nnonfederal\nnonfederated\nnonfeldspathic\nnonfelonious\nnonfelony\nnonfenestrated\nnonfermentability\nnonfermentable\nnonfermentation\nnonfermentative\nnonferrous\nnonfertile\nnonfertility\nnonfestive\nnonfeudal\nnonfibrous\nnonfiction\nnonfictional\nnonfiduciary\nnonfighter\nnonfigurative\nnonfilamentous\nnonfimbriate\nnonfinancial\nnonfinding\nnonfinishing\nnonfinite\nnonfireproof\nnonfiscal\nnonfisherman\nnonfissile\nnonfixation\nnonflaky\nnonflammable\nnonfloatation\nnonfloating\nnonfloriferous\nnonflowering\nnonflowing\nnonfluctuating\nnonfluid\nnonfluorescent\nnonflying\nnonfocal\nnonfood\nnonforeclosure\nnonforeign\nnonforeknowledge\nnonforest\nnonforested\nnonforfeitable\nnonforfeiting\nnonforfeiture\nnonform\nnonformal\nnonformation\nnonformulation\nnonfortification\nnonfortuitous\nnonfossiliferous\nnonfouling\nnonfrat\nnonfraternity\nnonfrauder\nnonfraudulent\nnonfreedom\nnonfreeman\nnonfreezable\nnonfreeze\nnonfreezing\nnonfricative\nnonfriction\nnonfrosted\nnonfruition\nnonfrustration\nnonfulfillment\nnonfunctional\nnonfundable\nnonfundamental\nnonfungible\nnonfuroid\nnonfusion\nnonfuturition\nnonfuturity\nnongalactic\nnongalvanized\nnonganglionic\nnongas\nnongaseous\nnongassy\nnongelatinizing\nnongelatinous\nnongenealogical\nnongenerative\nnongenetic\nnongentile\nnongeographical\nnongeological\nnongeometrical\nnongermination\nnongerundial\nnongildsman\nnongipsy\nnonglacial\nnonglandered\nnonglandular\nnonglare\nnonglucose\nnonglucosidal\nnonglucosidic\nnongod\nnongold\nnongolfer\nnongospel\nnongovernmental\nnongraduate\nnongraduated\nnongraduation\nnongrain\nnongranular\nnongraphitic\nnongrass\nnongratuitous\nnongravitation\nnongravity\nnongray\nnongreasy\nnongreen\nnongregarious\nnongremial\nnongrey\nnongrooming\nnonguarantee\nnonguard\nnonguttural\nnongymnast\nnongypsy\nnonhabitable\nnonhabitual\nnonhalation\nnonhallucination\nnonhandicap\nnonhardenable\nnonharmonic\nnonharmonious\nnonhazardous\nnonheading\nnonhearer\nnonheathen\nnonhedonistic\nnonhepatic\nnonhereditarily\nnonhereditary\nnonheritable\nnonheritor\nnonhero\nnonhieratic\nnonhistoric\nnonhistorical\nnonhomaloidal\nnonhomogeneity\nnonhomogeneous\nnonhomogenous\nnonhostile\nnonhouseholder\nnonhousekeeping\nnonhuman\nnonhumanist\nnonhumorous\nnonhumus\nnonhunting\nnonhydrogenous\nnonhydrolyzable\nnonhygrometric\nnonhygroscopic\nnonhypostatic\nnonic\nnoniconoclastic\nnonideal\nnonidealist\nnonidentical\nnonidentity\nnonidiomatic\nnonidolatrous\nnonidyllic\nnonignitible\nnonignominious\nnonignorant\nnonillion\nnonillionth\nnonillumination\nnonillustration\nnonimaginary\nnonimbricating\nnonimitative\nnonimmateriality\nnonimmersion\nnonimmigrant\nnonimmigration\nnonimmune\nnonimmunity\nnonimmunized\nnonimpact\nnonimpairment\nnonimpartment\nnonimpatience\nnonimpeachment\nnonimperative\nnonimperial\nnonimplement\nnonimportation\nnonimporting\nnonimposition\nnonimpregnated\nnonimpressionist\nnonimprovement\nnonimputation\nnonincandescent\nnonincarnated\nnonincitement\nnoninclination\nnoninclusion\nnoninclusive\nnonincrease\nnonincreasing\nnonincrusting\nnonindependent\nnonindictable\nnonindictment\nnonindividual\nnonindividualistic\nnoninductive\nnoninductively\nnoninductivity\nnonindurated\nnonindustrial\nnoninfallibilist\nnoninfallible\nnoninfantry\nnoninfected\nnoninfection\nnoninfectious\nnoninfinite\nnoninfinitely\nnoninflammability\nnoninflammable\nnoninflammatory\nnoninflectional\nnoninfluence\nnoninformative\nnoninfraction\nnoninhabitant\nnoninheritable\nnoninherited\nnoninitial\nnoninjurious\nnoninjury\nnoninoculation\nnoninquiring\nnoninsect\nnoninsertion\nnoninstitution\nnoninstruction\nnoninstructional\nnoninstructress\nnoninstrumental\nnoninsurance\nnonintegrable\nnonintegrity\nnonintellectual\nnonintelligence\nnonintelligent\nnonintent\nnonintention\nnoninterchangeability\nnoninterchangeable\nnonintercourse\nnoninterference\nnoninterferer\nnoninterfering\nnonintermittent\nnoninternational\nnoninterpolation\nnoninterposition\nnoninterrupted\nnonintersecting\nnonintersector\nnonintervention\nnoninterventionalist\nnoninterventionist\nnonintoxicant\nnonintoxicating\nnonintrospective\nnonintrospectively\nnonintrusion\nnonintrusionism\nnonintrusionist\nnonintuitive\nnoninverted\nnoninvidious\nnoninvincibility\nnoniodized\nnonion\nnonionized\nnonionizing\nnonirate\nnonirradiated\nnonirrational\nnonirreparable\nnonirrevocable\nnonirrigable\nnonirrigated\nnonirrigating\nnonirrigation\nnonirritable\nnonirritant\nnonirritating\nnonisobaric\nnonisotropic\nnonissuable\nnonius\nnonjoinder\nnonjudicial\nnonjurable\nnonjurant\nnonjuress\nnonjuring\nnonjurist\nnonjuristic\nnonjuror\nnonjurorism\nnonjury\nnonjurying\nnonknowledge\nnonkosher\nnonlabeling\nnonlactescent\nnonlaminated\nnonlanguage\nnonlaying\nnonleaded\nnonleaking\nnonlegal\nnonlegato\nnonlegume\nnonlepidopterous\nnonleprous\nnonlevel\nnonlevulose\nnonliability\nnonliable\nnonliberation\nnonlicensed\nnonlicentiate\nnonlicet\nnonlicking\nnonlife\nnonlimitation\nnonlimiting\nnonlinear\nnonlipoidal\nnonliquefying\nnonliquid\nnonliquidating\nnonliquidation\nnonlister\nnonlisting\nnonliterary\nnonlitigious\nnonliturgical\nnonliving\nnonlixiviated\nnonlocal\nnonlocalized\nnonlogical\nnonlosable\nnonloser\nnonlover\nnonloving\nnonloxodromic\nnonluminescent\nnonluminosity\nnonluminous\nnonluster\nnonlustrous\nnonly\nnonmagnetic\nnonmagnetizable\nnonmaintenance\nnonmajority\nnonmalarious\nnonmalicious\nnonmalignant\nnonmalleable\nnonmammalian\nnonmandatory\nnonmanifest\nnonmanifestation\nnonmanila\nnonmannite\nnonmanual\nnonmanufacture\nnonmanufactured\nnonmanufacturing\nnonmarine\nnonmarital\nnonmaritime\nnonmarket\nnonmarriage\nnonmarriageable\nnonmarrying\nnonmartial\nnonmastery\nnonmaterial\nnonmaterialistic\nnonmateriality\nnonmaternal\nnonmathematical\nnonmathematician\nnonmatrimonial\nnonmatter\nnonmechanical\nnonmechanistic\nnonmedical\nnonmedicinal\nnonmedullated\nnonmelodious\nnonmember\nnonmembership\nnonmenial\nnonmental\nnonmercantile\nnonmetal\nnonmetallic\nnonmetalliferous\nnonmetallurgical\nnonmetamorphic\nnonmetaphysical\nnonmeteoric\nnonmeteorological\nnonmetric\nnonmetrical\nnonmetropolitan\nnonmicrobic\nnonmicroscopical\nnonmigratory\nnonmilitant\nnonmilitary\nnonmillionaire\nnonmimetic\nnonmineral\nnonmineralogical\nnonminimal\nnonministerial\nnonministration\nnonmiraculous\nnonmischievous\nnonmiscible\nnonmissionary\nnonmobile\nnonmodal\nnonmodern\nnonmolar\nnonmolecular\nnonmomentary\nnonmonarchical\nnonmonarchist\nnonmonastic\nnonmonist\nnonmonogamous\nnonmonotheistic\nnonmorainic\nnonmoral\nnonmorality\nnonmortal\nnonmotile\nnonmotoring\nnonmotorist\nnonmountainous\nnonmucilaginous\nnonmucous\nnonmulched\nnonmultiple\nnonmunicipal\nnonmuscular\nnonmusical\nnonmussable\nnonmutationally\nnonmutative\nnonmutual\nnonmystical\nnonmythical\nnonmythological\nnonnant\nnonnarcotic\nnonnasal\nnonnat\nnonnational\nnonnative\nnonnatural\nnonnaturalism\nnonnaturalistic\nnonnaturality\nnonnaturalness\nnonnautical\nnonnaval\nnonnavigable\nnonnavigation\nnonnebular\nnonnecessary\nnonnecessity\nnonnegligible\nnonnegotiable\nnonnegotiation\nnonnephritic\nnonnervous\nnonnescience\nnonnescient\nnonneutral\nnonneutrality\nnonnitrogenized\nnonnitrogenous\nnonnoble\nnonnomination\nnonnotification\nnonnotional\nnonnucleated\nnonnumeral\nnonnutrient\nnonnutritious\nnonnutritive\nnonobedience\nnonobedient\nnonobjection\nnonobjective\nnonobligatory\nnonobservable\nnonobservance\nnonobservant\nnonobservation\nnonobstetrical\nnonobstructive\nnonobvious\nnonoccidental\nnonocculting\nnonoccupant\nnonoccupation\nnonoccupational\nnonoccurrence\nnonodorous\nnonoecumenic\nnonoffender\nnonoffensive\nnonofficeholding\nnonofficial\nnonofficially\nnonofficinal\nnonoic\nnonoily\nnonolfactory\nnonomad\nnononerous\nnonopacity\nnonopening\nnonoperating\nnonoperative\nnonopposition\nnonoppressive\nnonoptical\nnonoptimistic\nnonoptional\nnonorchestral\nnonordination\nnonorganic\nnonorganization\nnonoriental\nnonoriginal\nnonornamental\nnonorthodox\nnonorthographical\nnonoscine\nnonostentation\nnonoutlawry\nnonoutrage\nnonoverhead\nnonoverlapping\nnonowner\nnonoxidating\nnonoxidizable\nnonoxidizing\nnonoxygenated\nnonoxygenous\nnonpacific\nnonpacification\nnonpacifist\nnonpagan\nnonpaid\nnonpainter\nnonpalatal\nnonpapal\nnonpapist\nnonpar\nnonparallel\nnonparalytic\nnonparasitic\nnonparasitism\nnonpareil\nnonparent\nnonparental\nnonpariello\nnonparishioner\nnonparliamentary\nnonparlor\nnonparochial\nnonparous\nnonpartial\nnonpartiality\nnonparticipant\nnonparticipating\nnonparticipation\nnonpartisan\nnonpartisanship\nnonpartner\nnonparty\nnonpassenger\nnonpasserine\nnonpastoral\nnonpatentable\nnonpatented\nnonpaternal\nnonpathogenic\nnonpause\nnonpaying\nnonpayment\nnonpeak\nnonpeaked\nnonpearlitic\nnonpecuniary\nnonpedestrian\nnonpedigree\nnonpelagic\nnonpeltast\nnonpenal\nnonpenalized\nnonpending\nnonpensionable\nnonpensioner\nnonperception\nnonperceptual\nnonperfection\nnonperforated\nnonperforating\nnonperformance\nnonperformer\nnonperforming\nnonperiodic\nnonperiodical\nnonperishable\nnonperishing\nnonperjury\nnonpermanent\nnonpermeability\nnonpermeable\nnonpermissible\nnonpermission\nnonperpendicular\nnonperpetual\nnonperpetuity\nnonpersecution\nnonperseverance\nnonpersistence\nnonpersistent\nnonperson\nnonpersonal\nnonpersonification\nnonpertinent\nnonperversive\nnonphagocytic\nnonpharmaceutical\nnonphenolic\nnonphenomenal\nnonphilanthropic\nnonphilological\nnonphilosophical\nnonphilosophy\nnonphonetic\nnonphosphatic\nnonphosphorized\nnonphotobiotic\nnonphysical\nnonphysiological\nnonpickable\nnonpigmented\nnonplacental\nnonplacet\nnonplanar\nnonplane\nnonplanetary\nnonplantowning\nnonplastic\nnonplate\nnonplausible\nnonpleading\nnonplus\nnonplusation\nnonplushed\nnonplutocratic\nnonpoet\nnonpoetic\nnonpoisonous\nnonpolar\nnonpolarizable\nnonpolarizing\nnonpolitical\nnonponderosity\nnonponderous\nnonpopery\nnonpopular\nnonpopularity\nnonporous\nnonporphyritic\nnonport\nnonportability\nnonportable\nnonportrayal\nnonpositive\nnonpossession\nnonposthumous\nnonpostponement\nnonpotential\nnonpower\nnonpractical\nnonpractice\nnonpraedial\nnonpreaching\nnonprecious\nnonprecipitation\nnonpredatory\nnonpredestination\nnonpredicative\nnonpredictable\nnonpreference\nnonpreferential\nnonpreformed\nnonpregnant\nnonprehensile\nnonprejudicial\nnonprelatical\nnonpremium\nnonpreparation\nnonprepayment\nnonprepositional\nnonpresbyter\nnonprescribed\nnonprescriptive\nnonpresence\nnonpresentation\nnonpreservation\nnonpresidential\nnonpress\nnonpressure\nnonprevalence\nnonprevalent\nnonpriestly\nnonprimitive\nnonprincipiate\nnonprincipled\nnonprobable\nnonprocreation\nnonprocurement\nnonproducer\nnonproducing\nnonproduction\nnonproductive\nnonproductively\nnonproductiveness\nnonprofane\nnonprofessed\nnonprofession\nnonprofessional\nnonprofessionalism\nnonprofessorial\nnonproficience\nnonproficiency\nnonproficient\nnonprofit\nnonprofiteering\nnonprognostication\nnonprogressive\nnonprohibitable\nnonprohibition\nnonprohibitive\nnonprojection\nnonprojective\nnonprojectively\nnonproletarian\nnonproliferous\nnonprolific\nnonprolongation\nnonpromiscuous\nnonpromissory\nnonpromotion\nnonpromulgation\nnonpronunciation\nnonpropagandistic\nnonpropagation\nnonprophetic\nnonpropitiation\nnonproportional\nnonproprietary\nnonproprietor\nnonprorogation\nnonproscriptive\nnonprosecution\nnonprospect\nnonprotection\nnonprotective\nnonproteid\nnonprotein\nnonprotestation\nnonprotractile\nnonprotractility\nnonproven\nnonprovided\nnonprovidential\nnonprovocation\nnonpsychic\nnonpsychological\nnonpublic\nnonpublication\nnonpublicity\nnonpueblo\nnonpulmonary\nnonpulsating\nnonpumpable\nnonpunctual\nnonpunctuation\nnonpuncturable\nnonpunishable\nnonpunishing\nnonpunishment\nnonpurchase\nnonpurchaser\nnonpurgative\nnonpurification\nnonpurposive\nnonpursuit\nnonpurulent\nnonpurveyance\nnonputrescent\nnonputrescible\nnonputting\nnonpyogenic\nnonpyritiferous\nnonqualification\nnonquality\nnonquota\nnonracial\nnonradiable\nnonradiating\nnonradical\nnonrailroader\nnonranging\nnonratability\nnonratable\nnonrated\nnonratifying\nnonrational\nnonrationalist\nnonrationalized\nnonrayed\nnonreaction\nnonreactive\nnonreactor\nnonreader\nnonreading\nnonrealistic\nnonreality\nnonrealization\nnonreasonable\nnonreasoner\nnonrebel\nnonrebellious\nnonreceipt\nnonreceiving\nnonrecent\nnonreception\nnonrecess\nnonrecipient\nnonreciprocal\nnonreciprocating\nnonreciprocity\nnonrecital\nnonreclamation\nnonrecluse\nnonrecognition\nnonrecognized\nnonrecoil\nnonrecollection\nnonrecommendation\nnonreconciliation\nnonrecourse\nnonrecoverable\nnonrecovery\nnonrectangular\nnonrectified\nnonrecuperation\nnonrecurrent\nnonrecurring\nnonredemption\nnonredressing\nnonreducing\nnonreference\nnonrefillable\nnonreflector\nnonreformation\nnonrefraction\nnonrefrigerant\nnonrefueling\nnonrefutation\nnonregardance\nnonregarding\nnonregenerating\nnonregenerative\nnonregent\nnonregimented\nnonregistered\nnonregistrability\nnonregistrable\nnonregistration\nnonregression\nnonregulation\nnonrehabilitation\nnonreigning\nnonreimbursement\nnonreinforcement\nnonreinstatement\nnonrejection\nnonrejoinder\nnonrelapsed\nnonrelation\nnonrelative\nnonrelaxation\nnonrelease\nnonreliance\nnonreligion\nnonreligious\nnonreligiousness\nnonrelinquishment\nnonremanie\nnonremedy\nnonremembrance\nnonremission\nnonremonstrance\nnonremuneration\nnonremunerative\nnonrendition\nnonrenewable\nnonrenewal\nnonrenouncing\nnonrenunciation\nnonrepair\nnonreparation\nnonrepayable\nnonrepealing\nnonrepeat\nnonrepeater\nnonrepentance\nnonrepetition\nnonreplacement\nnonreplicate\nnonreportable\nnonreprehensible\nnonrepresentation\nnonrepresentational\nnonrepresentationalism\nnonrepresentative\nnonrepression\nnonreprisal\nnonreproduction\nnonreproductive\nnonrepublican\nnonrepudiation\nnonrequirement\nnonrequisition\nnonrequital\nnonrescue\nnonresemblance\nnonreservation\nnonreserve\nnonresidence\nnonresidency\nnonresident\nnonresidental\nnonresidenter\nnonresidential\nnonresidentiary\nnonresidentor\nnonresidual\nnonresignation\nnonresinifiable\nnonresistance\nnonresistant\nnonresisting\nnonresistive\nnonresolvability\nnonresolvable\nnonresonant\nnonrespectable\nnonrespirable\nnonresponsibility\nnonrestitution\nnonrestraint\nnonrestricted\nnonrestriction\nnonrestrictive\nnonresumption\nnonresurrection\nnonresuscitation\nnonretaliation\nnonretention\nnonretentive\nnonreticence\nnonretinal\nnonretirement\nnonretiring\nnonretraceable\nnonretractation\nnonretractile\nnonretraction\nnonretrenchment\nnonretroactive\nnonreturn\nnonreturnable\nnonrevaluation\nnonrevealing\nnonrevelation\nnonrevenge\nnonrevenue\nnonreverse\nnonreversed\nnonreversible\nnonreversing\nnonreversion\nnonrevertible\nnonreviewable\nnonrevision\nnonrevival\nnonrevocation\nnonrevolting\nnonrevolutionary\nnonrevolving\nnonrhetorical\nnonrhymed\nnonrhyming\nnonrhythmic\nnonriding\nnonrigid\nnonrioter\nnonriparian\nnonritualistic\nnonrival\nnonromantic\nnonrotatable\nnonrotating\nnonrotative\nnonround\nnonroutine\nnonroyal\nnonroyalist\nnonrubber\nnonruminant\nNonruminantia\nnonrun\nnonrupture\nnonrural\nnonrustable\nnonsabbatic\nnonsaccharine\nnonsacerdotal\nnonsacramental\nnonsacred\nnonsacrifice\nnonsacrificial\nnonsailor\nnonsalable\nnonsalaried\nnonsale\nnonsaline\nnonsalutary\nnonsalutation\nnonsalvation\nnonsanctification\nnonsanction\nnonsanctity\nnonsane\nnonsanguine\nnonsanity\nnonsaponifiable\nnonsatisfaction\nnonsaturated\nnonsaturation\nnonsaving\nnonsawing\nnonscalding\nnonscaling\nnonscandalous\nnonschematized\nnonschismatic\nnonscholastic\nnonscience\nnonscientific\nnonscientist\nnonscoring\nnonscraping\nnonscriptural\nnonscripturalist\nnonscrutiny\nnonseasonal\nnonsecession\nnonseclusion\nnonsecrecy\nnonsecret\nnonsecretarial\nnonsecretion\nnonsecretive\nnonsecretory\nnonsectarian\nnonsectional\nnonsectorial\nnonsecular\nnonsecurity\nnonsedentary\nnonseditious\nnonsegmented\nnonsegregation\nnonseizure\nnonselected\nnonselection\nnonselective\nnonself\nnonselfregarding\nnonselling\nnonsenatorial\nnonsense\nnonsensible\nnonsensical\nnonsensicality\nnonsensically\nnonsensicalness\nnonsensification\nnonsensify\nnonsensitive\nnonsensitiveness\nnonsensitized\nnonsensorial\nnonsensuous\nnonsentence\nnonsentient\nnonseparation\nnonseptate\nnonseptic\nnonsequacious\nnonsequaciousness\nnonsequestration\nnonserial\nnonserif\nnonserious\nnonserous\nnonserviential\nnonservile\nnonsetter\nnonsetting\nnonsettlement\nnonsexual\nnonsexually\nnonshaft\nnonsharing\nnonshatter\nnonshedder\nnonshipper\nnonshipping\nnonshredding\nnonshrinkable\nnonshrinking\nnonsiccative\nnonsidereal\nnonsignatory\nnonsignature\nnonsignificance\nnonsignificant\nnonsignification\nnonsignificative\nnonsilicated\nnonsiliceous\nnonsilver\nnonsimplification\nnonsine\nnonsinging\nnonsingular\nnonsinkable\nnonsinusoidal\nnonsiphonage\nnonsister\nnonsitter\nnonsitting\nnonskeptical\nnonskid\nnonskidding\nnonskipping\nnonslaveholding\nnonslip\nnonslippery\nnonslipping\nnonsludging\nnonsmoker\nnonsmoking\nnonsmutting\nnonsocial\nnonsocialist\nnonsocialistic\nnonsociety\nnonsociological\nnonsolar\nnonsoldier\nnonsolicitation\nnonsolid\nnonsolidified\nnonsolution\nnonsolvency\nnonsolvent\nnonsonant\nnonsovereign\nnonspalling\nnonsparing\nnonsparking\nnonspeaker\nnonspeaking\nnonspecial\nnonspecialist\nnonspecialized\nnonspecie\nnonspecific\nnonspecification\nnonspecificity\nnonspecified\nnonspectacular\nnonspectral\nnonspeculation\nnonspeculative\nnonspherical\nnonspill\nnonspillable\nnonspinning\nnonspinose\nnonspiny\nnonspiral\nnonspirit\nnonspiritual\nnonspirituous\nnonspontaneous\nnonspored\nnonsporeformer\nnonsporeforming\nnonsporting\nnonspottable\nnonsprouting\nnonstainable\nnonstaining\nnonstampable\nnonstandard\nnonstandardized\nnonstanzaic\nnonstaple\nnonstarch\nnonstarter\nnonstarting\nnonstatement\nnonstatic\nnonstationary\nnonstatistical\nnonstatutory\nnonstellar\nnonsticky\nnonstimulant\nnonstipulation\nnonstock\nnonstooping\nnonstop\nnonstrategic\nnonstress\nnonstretchable\nnonstretchy\nnonstriated\nnonstriker\nnonstriking\nnonstriped\nnonstructural\nnonstudent\nnonstudious\nnonstylized\nnonsubject\nnonsubjective\nnonsubmission\nnonsubmissive\nnonsubordination\nnonsubscriber\nnonsubscribing\nnonsubscription\nnonsubsiding\nnonsubsidy\nnonsubsistence\nnonsubstantial\nnonsubstantialism\nnonsubstantialist\nnonsubstantiality\nnonsubstantiation\nnonsubstantive\nnonsubstitution\nnonsubtraction\nnonsuccess\nnonsuccessful\nnonsuccession\nnonsuccessive\nnonsuccour\nnonsuction\nnonsuctorial\nnonsufferance\nnonsuffrage\nnonsugar\nnonsuggestion\nnonsuit\nnonsulphurous\nnonsummons\nnonsupplication\nnonsupport\nnonsupporter\nnonsupporting\nnonsuppositional\nnonsuppressed\nnonsuppression\nnonsuppurative\nnonsurface\nnonsurgical\nnonsurrender\nnonsurvival\nnonsurvivor\nnonsuspect\nnonsustaining\nnonsustenance\nnonswearer\nnonswearing\nnonsweating\nnonswimmer\nnonswimming\nnonsyllabic\nnonsyllabicness\nnonsyllogistic\nnonsyllogizing\nnonsymbiotic\nnonsymbiotically\nnonsymbolic\nnonsymmetrical\nnonsympathetic\nnonsympathizer\nnonsympathy\nnonsymphonic\nnonsymptomatic\nnonsynchronous\nnonsyndicate\nnonsynodic\nnonsynonymous\nnonsyntactic\nnonsyntactical\nnonsynthesized\nnonsyntonic\nnonsystematic\nnontabular\nnontactical\nnontan\nnontangential\nnontannic\nnontannin\nnontariff\nnontarnishable\nnontarnishing\nnontautomeric\nnontautomerizable\nnontax\nnontaxability\nnontaxable\nnontaxonomic\nnonteachable\nnonteacher\nnonteaching\nnontechnical\nnontechnological\nnonteetotaler\nnontelegraphic\nnonteleological\nnontelephonic\nnontemporal\nnontemporizing\nnontenant\nnontenure\nnontenurial\nnonterm\nnonterminating\nnonterrestrial\nnonterritorial\nnonterritoriality\nnontestamentary\nnontextual\nnontheatrical\nnontheistic\nnonthematic\nnontheological\nnontheosophical\nnontherapeutic\nnonthinker\nnonthinking\nnonthoracic\nnonthoroughfare\nnonthreaded\nnontidal\nnontillable\nnontimbered\nnontitaniferous\nnontitular\nnontolerated\nnontopographical\nnontourist\nnontoxic\nnontraction\nnontrade\nnontrader\nnontrading\nnontraditional\nnontragic\nnontrailing\nnontransferability\nnontransferable\nnontransgression\nnontransient\nnontransitional\nnontranslocation\nnontransmission\nnontransparency\nnontransparent\nnontransportation\nnontransposing\nnontransposition\nnontraveler\nnontraveling\nnontreasonable\nnontreated\nnontreatment\nnontreaty\nnontrespass\nnontrial\nnontribal\nnontribesman\nnontributary\nnontrier\nnontrigonometrical\nnontronite\nnontropical\nnontrunked\nnontruth\nnontuberculous\nnontuned\nnonturbinated\nnontutorial\nnontyphoidal\nnontypical\nnontypicalness\nnontypographical\nnontyrannical\nnonubiquitous\nnonulcerous\nnonultrafilterable\nnonumbilical\nnonumbilicate\nnonumbrellaed\nnonunanimous\nnonuncial\nnonundergraduate\nnonunderstandable\nnonunderstanding\nnonunderstandingly\nnonunderstood\nnonundulatory\nnonuniform\nnonuniformist\nnonuniformitarian\nnonuniformity\nnonuniformly\nnonunion\nnonunionism\nnonunionist\nnonunique\nnonunison\nnonunited\nnonuniversal\nnonuniversity\nnonupholstered\nnonuple\nnonuplet\nnonupright\nnonurban\nnonurgent\nnonusage\nnonuse\nnonuser\nnonusing\nnonusurping\nnonuterine\nnonutile\nnonutilitarian\nnonutility\nnonutilized\nnonutterance\nnonvacant\nnonvaccination\nnonvacuous\nnonvaginal\nnonvalent\nnonvalidity\nnonvaluation\nnonvalve\nnonvanishing\nnonvariable\nnonvariant\nnonvariation\nnonvascular\nnonvassal\nnonvegetative\nnonvenereal\nnonvenomous\nnonvenous\nnonventilation\nnonverbal\nnonverdict\nnonverminous\nnonvernacular\nnonvertebral\nnonvertical\nnonvertically\nnonvesicular\nnonvesting\nnonvesture\nnonveteran\nnonveterinary\nnonviable\nnonvibratile\nnonvibration\nnonvibrator\nnonvibratory\nnonvicarious\nnonvictory\nnonvillager\nnonvillainous\nnonvindication\nnonvinous\nnonvintage\nnonviolation\nnonviolence\nnonvirginal\nnonvirile\nnonvirtue\nnonvirtuous\nnonvirulent\nnonviruliferous\nnonvisaed\nnonvisceral\nnonviscid\nnonviscous\nnonvisional\nnonvisitation\nnonvisiting\nnonvisual\nnonvisualized\nnonvital\nnonvitreous\nnonvitrified\nnonviviparous\nnonvocal\nnonvocalic\nnonvocational\nnonvolant\nnonvolatile\nnonvolatilized\nnonvolcanic\nnonvolition\nnonvoluntary\nnonvortical\nnonvortically\nnonvoter\nnonvoting\nnonvulcanizable\nnonvulvar\nnonwalking\nnonwar\nnonwasting\nnonwatertight\nnonweakness\nnonwestern\nnonwetted\nnonwhite\nnonwinged\nnonwoody\nnonworker\nnonworking\nnonworship\nnonwrinkleable\nnonya\nnonyielding\nnonyl\nnonylene\nnonylenic\nnonylic\nnonzealous\nnonzero\nnonzodiacal\nnonzonal\nnonzonate\nnonzoological\nnoodle\nnoodledom\nnoodleism\nnook\nnooked\nnookery\nnooking\nnooklet\nnooklike\nnooky\nnoological\nnoologist\nnoology\nnoometry\nnoon\nnoonday\nnoonflower\nnooning\nnoonlight\nnoonlit\nnoonstead\nnoontide\nnoontime\nnoonwards\nnoop\nnooscopic\nnoose\nnooser\nNootka\nnopal\nNopalea\nnopalry\nnope\nnopinene\nnor\nNora\nNorah\nnorard\nnorate\nnoration\nnorbergite\nNorbert\nNorbertine\nnorcamphane\nnordcaper\nnordenskioldine\nNordic\nNordicism\nNordicist\nNordicity\nNordicization\nNordicize\nnordmarkite\nnoreast\nnoreaster\nnorelin\nNorfolk\nNorfolkian\nnorgine\nnori\nnoria\nNoric\nnorie\nnorimon\nnorite\nnorland\nnorlander\nnorlandism\nnorleucine\nNorm\nnorm\nNorma\nnorma\nnormal\nnormalcy\nnormalism\nnormalist\nnormality\nnormalization\nnormalize\nnormalizer\nnormally\nnormalness\nNorman\nNormanesque\nNormanish\nNormanism\nNormanist\nNormanization\nNormanize\nNormanizer\nNormanly\nNormannic\nnormated\nnormative\nnormatively\nnormativeness\nnormless\nnormoblast\nnormoblastic\nnormocyte\nnormocytic\nnormotensive\nNorn\nNorna\nnornicotine\nnornorwest\nnoropianic\nnorpinic\nNorridgewock\nNorroway\nNorroy\nNorse\nnorsel\nNorseland\nnorseler\nNorseman\nNorsk\nnorth\nnorthbound\nnortheast\nnortheaster\nnortheasterly\nnortheastern\nnortheasternmost\nnortheastward\nnortheastwardly\nnortheastwards\nnorther\nnortherliness\nnortherly\nnorthern\nnortherner\nnorthernize\nnorthernly\nnorthernmost\nnorthernness\nnorthest\nnorthfieldite\nnorthing\nnorthland\nnorthlander\nnorthlight\nNorthman\nnorthmost\nnorthness\nNorthumber\nNorthumbrian\nnorthupite\nnorthward\nnorthwardly\nnorthwards\nnorthwest\nnorthwester\nnorthwesterly\nnorthwestern\nnorthwestward\nnorthwestwardly\nnorthwestwards\nNorumbega\nnorward\nnorwards\nNorway\nNorwegian\nnorwest\nnorwester\nnorwestward\nNosairi\nNosairian\nnosarian\nnose\nnosean\nnoseanite\nnoseband\nnosebanded\nnosebleed\nnosebone\nnoseburn\nnosed\nnosegay\nnosegaylike\nnoseherb\nnosehole\nnoseless\nnoselessly\nnoselessness\nnoselike\nnoselite\nNosema\nNosematidae\nnosepiece\nnosepinch\nnoser\nnosesmart\nnosethirl\nnosetiology\nnosewards\nnosewheel\nnosewise\nnosey\nnosine\nnosing\nnosism\nnosocomial\nnosocomium\nnosogenesis\nnosogenetic\nnosogenic\nnosogeny\nnosogeography\nnosographer\nnosographic\nnosographical\nnosographically\nnosography\nnosohaemia\nnosohemia\nnosological\nnosologically\nnosologist\nnosology\nnosomania\nnosomycosis\nnosonomy\nnosophobia\nnosophyte\nnosopoetic\nnosopoietic\nnosotaxy\nnosotrophy\nnostalgia\nnostalgic\nnostalgically\nnostalgy\nnostic\nNostoc\nNostocaceae\nnostocaceous\nnostochine\nnostologic\nnostology\nnostomania\nNostradamus\nnostrificate\nnostrification\nnostril\nnostriled\nnostrility\nnostrilsome\nnostrum\nnostrummonger\nnostrummongership\nnostrummongery\nNosu\nnosy\nnot\nnotabilia\nnotability\nnotable\nnotableness\nnotably\nnotacanthid\nNotacanthidae\nnotacanthoid\nnotacanthous\nNotacanthus\nnotaeal\nnotaeum\nnotal\nnotalgia\nnotalgic\nNotalia\nnotan\nnotandum\nnotanencephalia\nnotarial\nnotarially\nnotariate\nnotarikon\nnotarize\nnotary\nnotaryship\nnotate\nnotation\nnotational\nnotative\nnotator\nnotch\nnotchboard\nnotched\nnotchel\nnotcher\nnotchful\nnotching\nnotchweed\nnotchwing\nnotchy\nnote\nnotebook\nnotecase\nnoted\nnotedly\nnotedness\nnotehead\nnoteholder\nnotekin\nNotelaea\nnoteless\nnotelessly\nnotelessness\nnotelet\nnotencephalocele\nnotencephalus\nnoter\nnotewise\nnoteworthily\nnoteworthiness\nnoteworthy\nnotharctid\nNotharctidae\nNotharctus\nnother\nnothing\nnothingarian\nnothingarianism\nnothingism\nnothingist\nnothingize\nnothingless\nnothingly\nnothingness\nnothingology\nNothofagus\nNotholaena\nnothosaur\nNothosauri\nnothosaurian\nNothosauridae\nNothosaurus\nnothous\nnotice\nnoticeability\nnoticeable\nnoticeably\nnoticer\nNotidani\nnotidanian\nnotidanid\nNotidanidae\nnotidanidan\nnotidanoid\nNotidanus\nnotifiable\nnotification\nnotified\nnotifier\nnotify\nnotifyee\nnotion\nnotionable\nnotional\nnotionalist\nnotionality\nnotionally\nnotionalness\nnotionary\nnotionate\nnotioned\nnotionist\nnotionless\nNotiosorex\nnotitia\nNotkerian\nnotocentrous\nnotocentrum\nnotochord\nnotochordal\nnotodontian\nnotodontid\nNotodontidae\nnotodontoid\nNotogaea\nNotogaeal\nNotogaean\nNotogaeic\nnotommatid\nNotommatidae\nNotonecta\nnotonectal\nnotonectid\nNotonectidae\nnotopodial\nnotopodium\nnotopterid\nNotopteridae\nnotopteroid\nNotopterus\nnotorhizal\nNotorhynchus\nnotoriety\nnotorious\nnotoriously\nnotoriousness\nNotornis\nNotoryctes\nNotostraca\nNototherium\nNototrema\nnototribe\nnotour\nnotourly\nNotropis\nnotself\nNottoway\nnotum\nNotungulata\nnotungulate\nNotus\nnotwithstanding\nNou\nnougat\nnougatine\nnought\nnoumeaite\nnoumeite\nnoumenal\nnoumenalism\nnoumenalist\nnoumenality\nnoumenalize\nnoumenally\nnoumenism\nnoumenon\nnoun\nnounal\nnounally\nnounize\nnounless\nnoup\nnourice\nnourish\nnourishable\nnourisher\nnourishing\nnourishingly\nnourishment\nnouriture\nnous\nnouther\nnova\nnovaculite\nnovalia\nNovanglian\nNovanglican\nnovantique\nnovarsenobenzene\nnovate\nNovatian\nNovatianism\nNovatianist\nnovation\nnovative\nnovator\nnovatory\nnovatrix\nnovcic\nnovel\nnovelcraft\nnoveldom\nnovelese\nnovelesque\nnovelet\nnovelette\nnoveletter\nnovelettish\nnovelettist\nnoveletty\nnovelish\nnovelism\nnovelist\nnovelistic\nnovelistically\nnovelization\nnovelize\nnovella\nnovelless\nnovellike\nnovelly\nnovelmongering\nnovelness\nnovelry\nnovelty\nnovelwright\nnovem\nnovemarticulate\nNovember\nNovemberish\nnovemcostate\nnovemdigitate\nnovemfid\nnovemlobate\nnovemnervate\nnovemperfoliate\nnovena\nnovenary\nnovendial\nnovene\nnovennial\nnovercal\nNovial\nnovice\nnovicehood\nnovicelike\nnoviceship\nnoviciate\nnovilunar\nnovitial\nnovitiate\nnovitiateship\nnovitiation\nnovity\nNovo\nNovocain\nnovodamus\nNovorolsky\nnow\nnowaday\nnowadays\nnowanights\nnoway\nnoways\nnowed\nnowel\nnowhat\nnowhen\nnowhence\nnowhere\nnowhereness\nnowheres\nnowhit\nnowhither\nnowise\nnowness\nNowroze\nnowt\nnowy\nnoxa\nnoxal\nnoxally\nnoxious\nnoxiously\nnoxiousness\nnoy\nnoyade\nnoyau\nNozi\nnozzle\nnozzler\nnth\nnu\nnuance\nnub\nNuba\nnubbin\nnubble\nnubbling\nnubbly\nnubby\nnubecula\nnubia\nNubian\nnubiferous\nnubiform\nnubigenous\nnubilate\nnubilation\nnubile\nnubility\nnubilous\nNubilum\nnucal\nnucament\nnucamentaceous\nnucellar\nnucellus\nnucha\nnuchal\nnuchalgia\nnuciculture\nnuciferous\nnuciform\nnucin\nnucivorous\nnucleal\nnuclear\nnucleary\nnuclease\nnucleate\nnucleation\nnucleator\nnuclei\nnucleiferous\nnucleiform\nnuclein\nnucleinase\nnucleoalbumin\nnucleoalbuminuria\nnucleofugal\nnucleohistone\nnucleohyaloplasm\nnucleohyaloplasma\nnucleoid\nnucleoidioplasma\nnucleolar\nnucleolated\nnucleole\nnucleoli\nnucleolinus\nnucleolocentrosome\nnucleoloid\nnucleolus\nnucleolysis\nnucleomicrosome\nnucleon\nnucleone\nnucleonics\nnucleopetal\nnucleoplasm\nnucleoplasmatic\nnucleoplasmic\nnucleoprotein\nnucleoside\nnucleotide\nnucleus\nnuclide\nnuclidic\nNucula\nNuculacea\nnuculanium\nnucule\nnuculid\nNuculidae\nnuculiform\nnuculoid\nNuda\nnudate\nnudation\nNudd\nnuddle\nnude\nnudely\nnudeness\nNudens\nnudge\nnudger\nnudibranch\nNudibranchia\nnudibranchian\nnudibranchiate\nnudicaudate\nnudicaul\nnudifier\nnudiflorous\nnudiped\nnudish\nnudism\nnudist\nnuditarian\nnudity\nnugacious\nnugaciousness\nnugacity\nnugator\nnugatoriness\nnugatory\nnuggar\nnugget\nnuggety\nnugify\nnugilogue\nNugumiut\nnuisance\nnuisancer\nnuke\nNukuhivan\nnul\nnull\nnullable\nnullah\nnullibicity\nnullibility\nnullibiquitous\nnullibist\nnullification\nnullificationist\nnullificator\nnullifidian\nnullifier\nnullify\nnullipara\nnulliparity\nnulliparous\nnullipennate\nNullipennes\nnulliplex\nnullipore\nnulliporous\nnullism\nnullisome\nnullisomic\nnullity\nnulliverse\nnullo\nNuma\nNumantine\nnumb\nnumber\nnumberable\nnumberer\nnumberful\nnumberless\nnumberous\nnumbersome\nnumbfish\nnumbing\nnumbingly\nnumble\nnumbles\nnumbly\nnumbness\nnumda\nnumdah\nnumen\nNumenius\nnumerable\nnumerableness\nnumerably\nnumeral\nnumerant\nnumerary\nnumerate\nnumeration\nnumerative\nnumerator\nnumerical\nnumerically\nnumericalness\nnumerist\nnumero\nnumerology\nnumerose\nnumerosity\nnumerous\nnumerously\nnumerousness\nNumida\nNumidae\nNumidian\nNumididae\nNumidinae\nnuminism\nnuminous\nnuminously\nnumismatic\nnumismatical\nnumismatically\nnumismatician\nnumismatics\nnumismatist\nnumismatography\nnumismatologist\nnumismatology\nnummary\nnummi\nnummiform\nnummular\nNummularia\nnummulary\nnummulated\nnummulation\nnummuline\nNummulinidae\nnummulite\nNummulites\nnummulitic\nNummulitidae\nnummulitoid\nnummuloidal\nnummus\nnumskull\nnumskulled\nnumskulledness\nnumskullery\nnumskullism\nnumud\nnun\nnunatak\nnunbird\nnunch\nnuncheon\nnunciate\nnunciative\nnunciatory\nnunciature\nnuncio\nnuncioship\nnuncle\nnuncupate\nnuncupation\nnuncupative\nnuncupatively\nnundinal\nnundination\nnundine\nnunhood\nNunki\nnunky\nnunlet\nnunlike\nnunnari\nnunnated\nnunnation\nnunnery\nnunni\nnunnify\nnunnish\nnunnishness\nnunship\nNupe\nNuphar\nnuptial\nnuptiality\nnuptialize\nnuptially\nnuptials\nnuque\nnuraghe\nnurhag\nnurly\nnursable\nnurse\nnursedom\nnursegirl\nnursehound\nnursekeeper\nnursekin\nnurselet\nnurselike\nnursemaid\nnurser\nnursery\nnurserydom\nnurseryful\nnurserymaid\nnurseryman\nnursetender\nnursing\nnursingly\nnursle\nnursling\nnursy\nnurturable\nnurtural\nnurture\nnurtureless\nnurturer\nnurtureship\nNusairis\nNusakan\nnusfiah\nnut\nnutant\nnutarian\nnutate\nnutation\nnutational\nnutbreaker\nnutcake\nnutcrack\nnutcracker\nnutcrackers\nnutcrackery\nnutgall\nnuthatch\nnuthook\nnutjobber\nnutlet\nnutlike\nnutmeg\nnutmegged\nnutmeggy\nnutpecker\nnutpick\nnutramin\nnutria\nnutrice\nnutricial\nnutricism\nnutrient\nnutrify\nnutriment\nnutrimental\nnutritial\nnutrition\nnutritional\nnutritionally\nnutritionist\nnutritious\nnutritiously\nnutritiousness\nnutritive\nnutritively\nnutritiveness\nnutritory\nnutseed\nnutshell\nNuttallia\nnuttalliasis\nnuttalliosis\nnutted\nnutter\nnuttery\nnuttily\nnuttiness\nnutting\nnuttish\nnuttishness\nnutty\nnuzzer\nnuzzerana\nnuzzle\nNyamwezi\nNyanja\nnyanza\nNyaya\nnychthemer\nnychthemeral\nnychthemeron\nNyctaginaceae\nnyctaginaceous\nNyctaginia\nnyctalope\nnyctalopia\nnyctalopic\nnyctalopy\nNyctanthes\nNyctea\nNyctereutes\nnycteribiid\nNycteribiidae\nNycteridae\nnycterine\nNycteris\nNycticorax\nNyctimene\nnyctinastic\nnyctinasty\nnyctipelagic\nNyctipithecinae\nnyctipithecine\nNyctipithecus\nnyctitropic\nnyctitropism\nnyctophobia\nnycturia\nNydia\nnye\nnylast\nnylon\nnymil\nnymph\nnympha\nnymphae\nNymphaea\nNymphaeaceae\nnymphaeaceous\nnymphaeum\nnymphal\nnymphalid\nNymphalidae\nNymphalinae\nnymphaline\nnympheal\nnymphean\nnymphet\nnymphic\nnymphical\nnymphid\nnymphine\nNymphipara\nnymphiparous\nnymphish\nnymphitis\nnymphlike\nnymphlin\nnymphly\nNymphoides\nnympholepsia\nnympholepsy\nnympholept\nnympholeptic\nnymphomania\nnymphomaniac\nnymphomaniacal\nNymphonacea\nnymphosis\nnymphotomy\nnymphwise\nNyoro\nNyroca\nNyssa\nNyssaceae\nnystagmic\nnystagmus\nnyxis\nO\no\noadal\noaf\noafdom\noafish\noafishly\noafishness\noak\noakberry\nOakboy\noaken\noakenshaw\nOakesia\noaklet\noaklike\noakling\noaktongue\noakum\noakweb\noakwood\noaky\noam\nOannes\noar\noarage\noarcock\noared\noarfish\noarhole\noarial\noarialgia\noaric\noariocele\noariopathic\noariopathy\noariotomy\noaritic\noaritis\noarium\noarless\noarlike\noarlock\noarlop\noarman\noarsman\noarsmanship\noarswoman\noarweed\noary\noasal\noasean\noases\noasis\noasitic\noast\noasthouse\noat\noatbin\noatcake\noatear\noaten\noatenmeal\noatfowl\noath\noathay\noathed\noathful\noathlet\noathworthy\noatland\noatlike\noatmeal\noatseed\noaty\nObadiah\nobambulate\nobambulation\nobambulatory\noban\nObbenite\nobbligato\nobclavate\nobclude\nobcompressed\nobconical\nobcordate\nobcordiform\nobcuneate\nobdeltoid\nobdiplostemonous\nobdiplostemony\nobdormition\nobduction\nobduracy\nobdurate\nobdurately\nobdurateness\nobduration\nobe\nobeah\nobeahism\nobeche\nobedience\nobediency\nobedient\nobediential\nobedientially\nobedientialness\nobedientiar\nobedientiary\nobediently\nobeisance\nobeisant\nobeisantly\nobeism\nobelia\nobeliac\nobelial\nobelion\nobeliscal\nobeliscar\nobelisk\nobeliskoid\nobelism\nobelize\nobelus\nOberon\nobese\nobesely\nobeseness\nobesity\nobex\nobey\nobeyable\nobeyer\nobeyingly\nobfuscable\nobfuscate\nobfuscation\nobfuscator\nobfuscity\nobfuscous\nobi\nObidicut\nobispo\nobit\nobitual\nobituarian\nobituarily\nobituarist\nobituarize\nobituary\nobject\nobjectable\nobjectation\nobjectative\nobjectee\nobjecthood\nobjectification\nobjectify\nobjection\nobjectionability\nobjectionable\nobjectionableness\nobjectionably\nobjectional\nobjectioner\nobjectionist\nobjectival\nobjectivate\nobjectivation\nobjective\nobjectively\nobjectiveness\nobjectivism\nobjectivist\nobjectivistic\nobjectivity\nobjectivize\nobjectization\nobjectize\nobjectless\nobjectlessly\nobjectlessness\nobjector\nobjicient\nobjuration\nobjure\nobjurgate\nobjurgation\nobjurgative\nobjurgatively\nobjurgator\nobjurgatorily\nobjurgatory\nobjurgatrix\noblanceolate\noblate\noblately\noblateness\noblation\noblational\noblationary\noblatory\noblectate\noblectation\nobley\nobligable\nobligancy\nobligant\nobligate\nobligation\nobligational\nobligative\nobligativeness\nobligator\nobligatorily\nobligatoriness\nobligatory\nobligatum\noblige\nobliged\nobligedly\nobligedness\nobligee\nobligement\nobliger\nobliging\nobligingly\nobligingness\nobligistic\nobligor\nobliquangular\nobliquate\nobliquation\noblique\nobliquely\nobliqueness\nobliquitous\nobliquity\nobliquus\nobliterable\nobliterate\nobliteration\nobliterative\nobliterator\noblivescence\noblivial\nobliviality\noblivion\noblivionate\noblivionist\noblivionize\noblivious\nobliviously\nobliviousness\nobliviscence\nobliviscible\noblocutor\noblong\noblongatal\noblongated\noblongish\noblongitude\noblongitudinal\noblongly\noblongness\nobloquial\nobloquious\nobloquy\nobmutescence\nobmutescent\nobnebulate\nobnounce\nobnoxiety\nobnoxious\nobnoxiously\nobnoxiousness\nobnubilate\nobnubilation\nobnunciation\noboe\noboist\nobol\nObolaria\nobolary\nobole\nobolet\nobolus\nobomegoid\nObongo\noboval\nobovate\nobovoid\nobpyramidal\nobpyriform\nObrazil\nobreption\nobreptitious\nobreptitiously\nobrogate\nobrogation\nobrotund\nobscene\nobscenely\nobsceneness\nobscenity\nobscurancy\nobscurant\nobscurantic\nobscurantism\nobscurantist\nobscuration\nobscurative\nobscure\nobscuredly\nobscurely\nobscurement\nobscureness\nobscurer\nobscurism\nobscurist\nobscurity\nobsecrate\nobsecration\nobsecrationary\nobsecratory\nobsede\nobsequence\nobsequent\nobsequial\nobsequience\nobsequiosity\nobsequious\nobsequiously\nobsequiousness\nobsequity\nobsequium\nobsequy\nobservability\nobservable\nobservableness\nobservably\nobservance\nobservancy\nobservandum\nobservant\nObservantine\nObservantist\nobservantly\nobservantness\nobservation\nobservational\nobservationalism\nobservationally\nobservative\nobservatorial\nobservatory\nobserve\nobservedly\nobserver\nobservership\nobserving\nobservingly\nobsess\nobsessingly\nobsession\nobsessional\nobsessionist\nobsessive\nobsessor\nobsidian\nobsidianite\nobsidional\nobsidionary\nobsidious\nobsignate\nobsignation\nobsignatory\nobsolesce\nobsolescence\nobsolescent\nobsolescently\nobsolete\nobsoletely\nobsoleteness\nobsoletion\nobsoletism\nobstacle\nobstetric\nobstetrical\nobstetrically\nobstetricate\nobstetrication\nobstetrician\nobstetrics\nobstetricy\nobstetrist\nobstetrix\nobstinacious\nobstinacy\nobstinance\nobstinate\nobstinately\nobstinateness\nobstination\nobstinative\nobstipation\nobstreperate\nobstreperosity\nobstreperous\nobstreperously\nobstreperousness\nobstriction\nobstringe\nobstruct\nobstructant\nobstructedly\nobstructer\nobstructingly\nobstruction\nobstructionism\nobstructionist\nobstructive\nobstructively\nobstructiveness\nobstructivism\nobstructivity\nobstructor\nobstruent\nobstupefy\nobtain\nobtainable\nobtainal\nobtainance\nobtainer\nobtainment\nobtect\nobtected\nobtemper\nobtemperate\nobtenebrate\nobtenebration\nobtention\nobtest\nobtestation\nobtriangular\nobtrude\nobtruder\nobtruncate\nobtruncation\nobtruncator\nobtrusion\nobtrusionist\nobtrusive\nobtrusively\nobtrusiveness\nobtund\nobtundent\nobtunder\nobtundity\nobturate\nobturation\nobturator\nobturatory\nobturbinate\nobtusangular\nobtuse\nobtusely\nobtuseness\nobtusifid\nobtusifolious\nobtusilingual\nobtusilobous\nobtusion\nobtusipennate\nobtusirostrate\nobtusish\nobtusity\nobumbrant\nobumbrate\nobumbration\nobvallate\nobvelation\nobvention\nobverse\nobversely\nobversion\nobvert\nobvertend\nobviable\nobviate\nobviation\nobviative\nobviator\nobvious\nobviously\nobviousness\nobvolute\nobvoluted\nobvolution\nobvolutive\nobvolve\nobvolvent\nocarina\nOccamism\nOccamist\nOccamistic\nOccamite\noccamy\noccasion\noccasionable\noccasional\noccasionalism\noccasionalist\noccasionalistic\noccasionality\noccasionally\noccasionalness\noccasionary\noccasioner\noccasionless\noccasive\noccident\noccidental\nOccidentalism\nOccidentalist\noccidentality\nOccidentalization\nOccidentalize\noccidentally\nocciduous\noccipital\noccipitalis\noccipitally\noccipitoanterior\noccipitoatlantal\noccipitoatloid\noccipitoaxial\noccipitoaxoid\noccipitobasilar\noccipitobregmatic\noccipitocalcarine\noccipitocervical\noccipitofacial\noccipitofrontal\noccipitofrontalis\noccipitohyoid\noccipitoiliac\noccipitomastoid\noccipitomental\noccipitonasal\noccipitonuchal\noccipitootic\noccipitoparietal\noccipitoposterior\noccipitoscapular\noccipitosphenoid\noccipitosphenoidal\noccipitotemporal\noccipitothalamic\nocciput\noccitone\nocclude\noccludent\nocclusal\noccluse\nocclusion\nocclusive\nocclusiveness\nocclusocervical\nocclusocervically\nocclusogingival\nocclusometer\nocclusor\noccult\noccultate\noccultation\nocculter\nocculting\noccultism\noccultist\noccultly\noccultness\noccupable\noccupance\noccupancy\noccupant\noccupation\noccupational\noccupationalist\noccupationally\noccupationless\noccupative\noccupiable\noccupier\noccupy\noccur\noccurrence\noccurrent\noccursive\nocean\noceaned\noceanet\noceanful\nOceanian\noceanic\nOceanican\noceanity\noceanographer\noceanographic\noceanographical\noceanographically\noceanographist\noceanography\noceanology\noceanophyte\noceanside\noceanward\noceanwards\noceanways\noceanwise\nocellar\nocellary\nocellate\nocellated\nocellation\nocelli\nocellicyst\nocellicystic\nocelliferous\nocelliform\nocelligerous\nocellus\noceloid\nocelot\noch\nochava\nochavo\nocher\nocherish\nocherous\nochery\nochidore\nochlesis\nochlesitic\nochletic\nochlocracy\nochlocrat\nochlocratic\nochlocratical\nochlocratically\nochlophobia\nochlophobist\nOchna\nOchnaceae\nochnaceous\nochone\nOchotona\nOchotonidae\nOchozoma\nochraceous\nOchrana\nochrea\nochreate\nochreous\nochro\nochrocarpous\nochroid\nochroleucous\nochrolite\nOchroma\nochronosis\nochronosus\nochronotic\nochrous\nocht\nOcimum\nock\noclock\nOcneria\nocote\nOcotea\nocotillo\nocque\nocracy\nocrea\nocreaceous\nOcreatae\nocreate\nocreated\noctachloride\noctachord\noctachordal\noctachronous\nOctacnemus\noctacolic\noctactinal\noctactine\nOctactiniae\noctactinian\noctad\noctadecahydrate\noctadecane\noctadecanoic\noctadecyl\noctadic\noctadrachm\noctaemeron\noctaeteric\noctaeterid\noctagon\noctagonal\noctagonally\noctahedral\noctahedric\noctahedrical\noctahedrite\noctahedroid\noctahedron\noctahedrous\noctahydrate\noctahydrated\noctakishexahedron\noctamerism\noctamerous\noctameter\noctan\noctanaphthene\nOctandria\noctandrian\noctandrious\noctane\noctangle\noctangular\noctangularness\nOctans\noctant\noctantal\noctapla\noctaploid\noctaploidic\noctaploidy\noctapodic\noctapody\noctarch\noctarchy\noctarius\noctarticulate\noctary\noctasemic\noctastich\noctastichon\noctastrophic\noctastyle\noctastylos\noctateuch\noctaval\noctavalent\noctavarium\noctave\nOctavia\nOctavian\noctavic\noctavina\nOctavius\noctavo\noctenary\noctene\noctennial\noctennially\noctet\noctic\noctillion\noctillionth\noctine\noctingentenary\noctoad\noctoalloy\noctoate\noctobass\nOctober\noctobrachiate\nOctobrist\noctocentenary\noctocentennial\noctochord\nOctocoralla\noctocorallan\nOctocorallia\noctocoralline\noctocotyloid\noctodactyl\noctodactyle\noctodactylous\noctodecimal\noctodecimo\noctodentate\noctodianome\nOctodon\noctodont\nOctodontidae\nOctodontinae\noctoechos\noctofid\noctofoil\noctofoiled\noctogamy\noctogenarian\noctogenarianism\noctogenary\noctogild\noctoglot\nOctogynia\noctogynian\noctogynious\noctogynous\noctoic\noctoid\noctolateral\noctolocular\noctomeral\noctomerous\noctometer\noctonal\noctonare\noctonarian\noctonarius\noctonary\noctonematous\noctonion\noctonocular\noctoon\noctopartite\noctopean\noctoped\noctopede\noctopetalous\noctophthalmous\noctophyllous\noctopi\noctopine\noctoploid\noctoploidic\noctoploidy\noctopod\nOctopoda\noctopodan\noctopodes\noctopodous\noctopolar\noctopus\noctoradial\noctoradiate\noctoradiated\noctoreme\noctoroon\noctose\noctosepalous\noctospermous\noctospore\noctosporous\noctostichous\noctosyllabic\noctosyllable\noctovalent\noctoyl\noctroi\noctroy\noctuor\noctuple\noctuplet\noctuplex\noctuplicate\noctuplication\noctuply\noctyl\noctylene\noctyne\nocuby\nocular\nocularist\nocularly\noculary\noculate\noculated\noculauditory\noculiferous\noculiform\noculigerous\nOculina\noculinid\nOculinidae\noculinoid\noculist\noculistic\noculocephalic\noculofacial\noculofrontal\noculomotor\noculomotory\noculonasal\noculopalpebral\noculopupillary\noculospinal\noculozygomatic\noculus\nocydrome\nocydromine\nOcydromus\nOcypete\nOcypoda\nocypodan\nOcypode\nocypodian\nOcypodidae\nocypodoid\nOcyroe\nOcyroidae\nOd\nod\noda\nOdacidae\nodacoid\nodal\nodalborn\nodalisk\nodalisque\nodaller\nodalman\nodalwoman\nOdax\nodd\noddish\noddity\noddlegs\noddly\noddman\noddment\noddments\noddness\nOdds\nodds\nOddsbud\noddsman\node\nodel\nodelet\nOdelsthing\nOdelsting\nodeon\nodeum\nodic\nodically\nOdin\nOdinian\nOdinic\nOdinism\nOdinist\nodinite\nOdinitic\nodiometer\nodious\nodiously\nodiousness\nodist\nodium\nodiumproof\nOdobenidae\nOdobenus\nOdocoileus\nodograph\nodology\nodometer\nodometrical\nodometry\nOdonata\nodontagra\nodontalgia\nodontalgic\nOdontaspidae\nOdontaspididae\nOdontaspis\nodontatrophia\nodontatrophy\nodontexesis\nodontiasis\nodontic\nodontist\nodontitis\nodontoblast\nodontoblastic\nodontocele\nOdontocete\nodontocete\nOdontoceti\nodontocetous\nodontochirurgic\nodontoclasis\nodontoclast\nodontodynia\nodontogen\nodontogenesis\nodontogenic\nodontogeny\nOdontoglossae\nodontoglossal\nodontoglossate\nOdontoglossum\nOdontognathae\nodontognathic\nodontognathous\nodontograph\nodontographic\nodontography\nodontohyperesthesia\nodontoid\nOdontolcae\nodontolcate\nodontolcous\nodontolite\nodontolith\nodontological\nodontologist\nodontology\nodontoloxia\nodontoma\nodontomous\nodontonecrosis\nodontoneuralgia\nodontonosology\nodontopathy\nodontophoral\nodontophore\nOdontophoridae\nOdontophorinae\nodontophorine\nodontophorous\nOdontophorus\nodontoplast\nodontoplerosis\nOdontopteris\nOdontopteryx\nodontorhynchous\nOdontormae\nOdontornithes\nodontornithic\nodontorrhagia\nodontorthosis\nodontoschism\nodontoscope\nodontosis\nodontostomatous\nodontostomous\nOdontosyllis\nodontotechny\nodontotherapia\nodontotherapy\nodontotomy\nOdontotormae\nodontotripsis\nodontotrypy\nodoom\nodophone\nodor\nodorant\nodorate\nodorator\nodored\nodorful\nodoriferant\nodoriferosity\nodoriferous\nodoriferously\nodoriferousness\nodorific\nodorimeter\nodorimetry\nodoriphore\nodorivector\nodorize\nodorless\nodorometer\nodorosity\nodorous\nodorously\nodorousness\nodorproof\nOdostemon\nOds\nodso\nodum\nodyl\nodylic\nodylism\nodylist\nodylization\nodylize\nOdynerus\nOdyssean\nOdyssey\nOdz\nOdzookers\nOdzooks\noe\nOecanthus\noecist\noecodomic\noecodomical\noecoparasite\noecoparasitism\noecophobia\noecumenian\noecumenic\noecumenical\noecumenicalism\noecumenicity\noecus\noedemerid\nOedemeridae\noedicnemine\nOedicnemus\nOedipal\nOedipean\nOedipus\nOedogoniaceae\noedogoniaceous\nOedogoniales\nOedogonium\noenanthaldehyde\noenanthate\nOenanthe\noenanthic\noenanthol\noenanthole\noenanthyl\noenanthylate\noenanthylic\noenin\nOenocarpus\noenochoe\noenocyte\noenocytic\noenolin\noenological\noenologist\noenology\noenomancy\nOenomaus\noenomel\noenometer\noenophilist\noenophobist\noenopoetic\nOenothera\nOenotheraceae\noenotheraceous\nOenotrian\noer\noersted\noes\noesophageal\noesophagi\noesophagismus\noesophagostomiasis\nOesophagostomum\noesophagus\noestradiol\nOestrelata\noestrian\noestriasis\noestrid\nOestridae\noestrin\noestriol\noestroid\noestrous\noestrual\noestruate\noestruation\noestrum\noestrus\nof\nOfer\noff\noffal\noffaling\noffbeat\noffcast\noffcome\noffcut\noffend\noffendable\noffendant\noffended\noffendedly\noffendedness\noffender\noffendible\noffendress\noffense\noffenseful\noffenseless\noffenselessly\noffenseproof\noffensible\noffensive\noffensively\noffensiveness\noffer\nofferable\nofferee\nofferer\noffering\nofferor\noffertorial\noffertory\noffgoing\noffgrade\noffhand\noffhanded\noffhandedly\noffhandedness\noffice\nofficeholder\nofficeless\nofficer\nofficerage\nofficeress\nofficerhood\nofficerial\nofficerism\nofficerless\nofficership\nofficial\nofficialdom\nofficialese\nofficialism\nofficiality\nofficialization\nofficialize\nofficially\nofficialty\nofficiant\nofficiary\nofficiate\nofficiation\nofficiator\nofficinal\nofficinally\nofficious\nofficiously\nofficiousness\noffing\noffish\noffishly\noffishness\nofflet\nofflook\noffprint\noffsaddle\noffscape\noffscour\noffscourer\noffscouring\noffscum\noffset\noffshoot\noffshore\noffsider\noffspring\nofftake\nofftype\noffuscate\noffuscation\noffward\noffwards\noflete\nOfo\noft\noften\noftenness\noftens\noftentime\noftentimes\nofter\noftest\noftly\noftness\nofttime\nofttimes\noftwhiles\nOg\nogaire\nOgallala\nogam\nogamic\nOgboni\nOgcocephalidae\nOgcocephalus\nogdoad\nogdoas\nogee\nogeed\nogganition\nogham\noghamic\nOghuz\nogival\nogive\nogived\nOglala\nogle\nogler\nogmic\nOgor\nOgpu\nogre\nogreish\nogreishly\nogreism\nogress\nogrish\nogrism\nogtiern\nogum\nOgygia\nOgygian\noh\nohelo\nohia\nOhio\nOhioan\nohm\nohmage\nohmic\nohmmeter\noho\nohoy\noidioid\noidiomycosis\noidiomycotic\nOidium\noii\noikology\noikoplast\noil\noilberry\noilbird\noilcan\noilcloth\noilcoat\noilcup\noildom\noiled\noiler\noilery\noilfish\noilhole\noilily\noiliness\noilless\noillessness\noillet\noillike\noilman\noilmonger\noilmongery\noilometer\noilpaper\noilproof\noilproofing\noilseed\noilskin\noilskinned\noilstock\noilstone\noilstove\noiltight\noiltightness\noilway\noily\noilyish\noime\noinochoe\noinology\noinomancy\noinomania\noinomel\noint\nointment\nOireachtas\noisin\noisivity\noitava\noiticica\nOjibwa\nOjibway\nOk\noka\nokapi\nOkapia\nokee\nokenite\noket\noki\nokia\nOkie\nOkinagan\nOklafalaya\nOklahannali\nOklahoma\nOklahoman\nokoniosis\nokonite\nokra\nokrug\nokshoofd\nokthabah\nOkuari\nokupukupu\nOlacaceae\nolacaceous\nOlaf\nolam\nolamic\nOlax\nOlcha\nOlchi\nOld\nold\nolden\nOldenburg\nolder\noldermost\noldfangled\noldfangledness\nOldfieldia\nOldhamia\noldhamite\noldhearted\noldish\noldland\noldness\noldster\noldwife\nOle\nOlea\nOleaceae\noleaceous\nOleacina\nOleacinidae\noleaginous\noleaginousness\noleana\noleander\noleandrin\nOlearia\nolease\noleaster\noleate\nolecranal\nolecranarthritis\nolecranial\nolecranian\nolecranoid\nolecranon\nolefiant\nolefin\nolefine\nolefinic\nOleg\noleic\noleiferous\nolein\nolena\nolenellidian\nOlenellus\nolenid\nOlenidae\nolenidian\nolent\nOlenus\noleo\noleocalcareous\noleocellosis\noleocyst\noleoduct\noleograph\noleographer\noleographic\noleography\noleomargaric\noleomargarine\noleometer\noleoptene\noleorefractometer\noleoresin\noleoresinous\noleosaccharum\noleose\noleosity\noleostearate\noleostearin\noleothorax\noleous\nOleraceae\noleraceous\nolericultural\nolericulturally\nolericulture\nOleron\nOlethreutes\nolethreutid\nOlethreutidae\nolfact\nolfactible\nolfaction\nolfactive\nolfactology\nolfactometer\nolfactometric\nolfactometry\nolfactor\nolfactorily\nolfactory\nolfacty\nOlga\noliban\nolibanum\nolid\noligacanthous\noligaemia\noligandrous\noliganthous\noligarch\noligarchal\noligarchic\noligarchical\noligarchically\noligarchism\noligarchist\noligarchize\noligarchy\noligemia\noligidria\noligist\noligistic\noligistical\noligocarpous\nOligocene\nOligochaeta\noligochaete\noligochaetous\noligochete\noligocholia\noligochrome\noligochromemia\noligochronometer\noligochylia\noligoclase\noligoclasite\noligocystic\noligocythemia\noligocythemic\noligodactylia\noligodendroglia\noligodendroglioma\noligodipsia\noligodontous\noligodynamic\noligogalactia\noligohemia\noligohydramnios\noligolactia\noligomenorrhea\noligomerous\noligomery\noligometochia\noligometochic\nOligomyodae\noligomyodian\noligomyoid\nOligonephria\noligonephric\noligonephrous\noligonite\noligopepsia\noligopetalous\noligophagous\noligophosphaturia\noligophrenia\noligophrenic\noligophyllous\noligoplasmia\noligopnea\noligopolistic\noligopoly\noligoprothesy\noligoprothetic\noligopsonistic\noligopsony\noligopsychia\noligopyrene\noligorhizous\noligosepalous\noligosialia\noligosideric\noligosiderite\noligosite\noligospermia\noligospermous\noligostemonous\noligosyllabic\noligosyllable\noligosynthetic\noligotokous\noligotrichia\noligotrophic\noligotrophy\noligotropic\noliguresis\noliguretic\noliguria\nOlinia\nOliniaceae\noliniaceous\nolio\noliphant\noliprance\nolitory\nOliva\noliva\nolivaceous\nolivary\nOlive\nolive\nOlivean\nolived\nOlivella\noliveness\nolivenite\nOliver\nOliverian\noliverman\noliversmith\nolivescent\nolivet\nOlivetan\nOlivette\nolivewood\nOlivia\nOlividae\nOlivier\noliviferous\noliviform\nolivil\nolivile\nolivilin\nolivine\nolivinefels\nolivinic\nolivinite\nolivinitic\nolla\nollamh\nollapod\nollenite\nOllie\nollock\nolm\nOlneya\nOlof\nological\nologist\nologistic\nology\nolomao\nolona\nOlonets\nOlonetsian\nOlonetsish\nOlor\noloroso\nolpe\nOlpidiaster\nOlpidium\nOlson\noltonde\noltunna\nolycook\nolykoek\nOlympia\nOlympiad\nOlympiadic\nOlympian\nOlympianism\nOlympianize\nOlympianly\nOlympianwise\nOlympic\nOlympicly\nOlympicness\nOlympieion\nOlympionic\nOlympus\nOlynthiac\nOlynthian\nOlynthus\nom\nomadhaun\nomagra\nOmagua\nOmaha\nomalgia\nOman\nOmani\nomao\nOmar\nomarthritis\nomasitis\nomasum\nomber\nombrette\nombrifuge\nombrograph\nombrological\nombrology\nombrometer\nombrophile\nombrophilic\nombrophilous\nombrophily\nombrophobe\nombrophobous\nombrophoby\nombrophyte\nombudsman\nombudsmanship\nomega\nomegoid\nomelet\nomelette\nomen\nomened\nomenology\nomental\nomentectomy\nomentitis\nomentocele\nomentofixation\nomentopexy\nomentoplasty\nomentorrhaphy\nomentosplenopexy\nomentotomy\nomentulum\nomentum\nomer\nomicron\nomina\nominous\nominously\nominousness\nomissible\nomission\nomissive\nomissively\nomit\nomitis\nomittable\nomitter\nomlah\nOmmastrephes\nOmmastrephidae\nommateal\nommateum\nommatidial\nommatidium\nommatophore\nommatophorous\nOmmiad\nOmmiades\nomneity\nomniactive\nomniactuality\nomniana\nomniarch\nomnibenevolence\nomnibenevolent\nomnibus\nomnibusman\nomnicausality\nomnicompetence\nomnicompetent\nomnicorporeal\nomnicredulity\nomnicredulous\nomnidenominational\nomnierudite\nomniessence\nomnifacial\nomnifarious\nomnifariously\nomnifariousness\nomniferous\nomnific\nomnificent\nomnifidel\nomniform\nomniformal\nomniformity\nomnify\nomnigenous\nomnigerent\nomnigraph\nomnihuman\nomnihumanity\nomnilegent\nomnilingual\nomniloquent\nomnilucent\nomnimental\nomnimeter\nomnimode\nomnimodous\nomninescience\nomninescient\nomniparent\nomniparient\nomniparity\nomniparous\nomnipatient\nomnipercipience\nomnipercipiency\nomnipercipient\nomniperfect\nomnipotence\nomnipotency\nomnipotent\nomnipotentiality\nomnipotently\nomnipregnant\nomnipresence\nomnipresent\nomnipresently\nomniprevalence\nomniprevalent\nomniproduction\nomniprudent\nomnirange\nomniregency\nomnirepresentative\nomnirepresentativeness\nomnirevealing\nomniscience\nomnisciency\nomniscient\nomnisciently\nomniscope\nomniscribent\nomniscriptive\nomnisentience\nomnisentient\nomnisignificance\nomnisignificant\nomnispective\nomnist\nomnisufficiency\nomnisufficient\nomnitemporal\nomnitenent\nomnitolerant\nomnitonal\nomnitonality\nomnitonic\nomnitude\nomnium\nomnivagant\nomnivalence\nomnivalent\nomnivalous\nomnivarious\nomnividence\nomnivident\nomnivision\nomnivolent\nOmnivora\nomnivoracious\nomnivoracity\nomnivorant\nomnivore\nomnivorous\nomnivorously\nomnivorousness\nomodynia\nomohyoid\nomoideum\nomophagia\nomophagist\nomophagous\nomophagy\nomophorion\nomoplate\nomoplatoscopy\nomostegite\nomosternal\nomosternum\nomphacine\nomphacite\nomphalectomy\nomphalic\nomphalism\nomphalitis\nomphalocele\nomphalode\nomphalodium\nomphalogenous\nomphaloid\nomphaloma\nomphalomesaraic\nomphalomesenteric\nomphaloncus\nomphalopagus\nomphalophlebitis\nomphalopsychic\nomphalopsychite\nomphalorrhagia\nomphalorrhea\nomphalorrhexis\nomphalos\nomphalosite\nomphaloskepsis\nomphalospinous\nomphalotomy\nomphalotripsy\nomphalus\non\nOna\nona\nonager\nOnagra\nonagra\nOnagraceae\nonagraceous\nOnan\nonanism\nonanist\nonanistic\nonca\nonce\noncetta\nOnchidiidae\nOnchidium\nOnchocerca\nonchocerciasis\nonchocercosis\noncia\nOncidium\noncin\noncograph\noncography\noncologic\noncological\noncology\noncome\noncometer\noncometric\noncometry\noncoming\nOncorhynchus\noncosimeter\noncosis\noncosphere\noncost\noncostman\noncotomy\nondagram\nondagraph\nondameter\nondascope\nondatra\nondine\nondogram\nondograph\nondometer\nondoscope\nondy\none\noneanother\noneberry\nonefold\nonefoldness\nonegite\nonehearted\nonehow\nOneida\noneiric\noneirocrit\noneirocritic\noneirocritical\noneirocritically\noneirocriticism\noneirocritics\noneirodynia\noneirologist\noneirology\noneiromancer\noneiromancy\noneiroscopic\noneiroscopist\noneiroscopy\noneirotic\noneism\nonement\noneness\noner\nonerary\nonerative\nonerosity\nonerous\nonerously\nonerousness\nonery\noneself\nonesigned\nonetime\nonewhere\noneyer\nonfall\nonflemed\nonflow\nonflowing\nongaro\nongoing\nonhanger\nonicolo\noniomania\noniomaniac\nonion\nonionet\nonionized\nonionlike\nonionpeel\nonionskin\noniony\nonirotic\nOniscidae\nonisciform\noniscoid\nOniscoidea\noniscoidean\nOniscus\nonium\nonkilonite\nonkos\nonlay\nonlepy\nonliest\nonliness\nonlook\nonlooker\nonlooking\nonly\nonmarch\nOnmun\nOnobrychis\nonocentaur\nOnoclea\nonofrite\nOnohippidium\nonolatry\nonomancy\nonomantia\nonomastic\nonomasticon\nonomatologist\nonomatology\nonomatomania\nonomatope\nonomatoplasm\nonomatopoeia\nonomatopoeial\nonomatopoeian\nonomatopoeic\nonomatopoeical\nonomatopoeically\nonomatopoesis\nonomatopoesy\nonomatopoetic\nonomatopoetically\nonomatopy\nonomatous\nonomomancy\nOnondaga\nOnondagan\nOnonis\nOnopordon\nOnosmodium\nonrush\nonrushing\nons\nonset\nonsetter\nonshore\nonside\nonsight\nonslaught\nonstand\nonstanding\nonstead\nonsweep\nonsweeping\nontal\nOntarian\nOntaric\nonto\nontocycle\nontocyclic\nontogenal\nontogenesis\nontogenetic\nontogenetical\nontogenetically\nontogenic\nontogenically\nontogenist\nontogeny\nontography\nontologic\nontological\nontologically\nontologism\nontologist\nontologistic\nontologize\nontology\nontosophy\nonus\nonwaiting\nonward\nonwardly\nonwardness\nonwards\nonycha\nonychatrophia\nonychauxis\nonychia\nonychin\nonychitis\nonychium\nonychogryposis\nonychoid\nonycholysis\nonychomalacia\nonychomancy\nonychomycosis\nonychonosus\nonychopathic\nonychopathology\nonychopathy\nonychophagist\nonychophagy\nOnychophora\nonychophoran\nonychophorous\nonychophyma\nonychoptosis\nonychorrhexis\nonychoschizia\nonychosis\nonychotrophy\nonym\nonymal\nonymancy\nonymatic\nonymity\nonymize\nonymous\nonymy\nonyx\nonyxis\nonyxitis\nonza\nooangium\nooblast\nooblastic\noocyesis\noocyst\nOocystaceae\noocystaceous\noocystic\nOocystis\noocyte\noodles\nooecial\nooecium\noofbird\nooftish\noofy\noogamete\noogamous\noogamy\noogenesis\noogenetic\noogeny\nooglea\noogone\noogonial\noogoniophore\noogonium\noograph\nooid\nooidal\nookinesis\nookinete\nookinetic\noolak\noolemma\noolite\noolitic\noolly\noologic\noological\noologically\noologist\noologize\noology\noolong\noomancy\noomantia\noometer\noometric\noometry\noomycete\nOomycetes\noomycetous\noons\noont\noopak\noophoralgia\noophorauxe\noophore\noophorectomy\noophoreocele\noophorhysterectomy\noophoric\noophoridium\noophoritis\noophoroepilepsy\noophoroma\noophoromalacia\noophoromania\noophoron\noophoropexy\noophororrhaphy\noophorosalpingectomy\noophorostomy\noophorotomy\noophyte\noophytic\nooplasm\nooplasmic\nooplast\noopod\noopodal\nooporphyrin\noorali\noord\nooscope\nooscopy\noosperm\noosphere\noosporange\noosporangium\noospore\nOosporeae\noosporic\noosporiferous\noosporous\noostegite\noostegitic\nootheca\noothecal\nootid\nootocoid\nOotocoidea\nootocoidean\nootocous\nootype\nooze\noozily\nooziness\noozooid\noozy\nopacate\nopacification\nopacifier\nopacify\nopacite\nopacity\nopacous\nopacousness\nopah\nopal\nopaled\nopalesce\nopalescence\nopalescent\nopalesque\nOpalina\nopaline\nopalinid\nOpalinidae\nopalinine\nopalish\nopalize\nopaloid\nopaque\nopaquely\nopaqueness\nOpata\nopdalite\nope\nOpegrapha\nopeidoscope\nopelet\nopen\nopenable\nopenband\nopenbeak\nopenbill\nopencast\nopener\nopenhanded\nopenhandedly\nopenhandedness\nopenhead\nopenhearted\nopenheartedly\nopenheartedness\nopening\nopenly\nopenmouthed\nopenmouthedly\nopenmouthedness\nopenness\nopenside\nopenwork\nopera\noperability\noperabily\noperable\noperae\noperagoer\noperalogue\noperameter\noperance\noperancy\noperand\noperant\noperatable\noperate\noperatee\noperatic\noperatical\noperatically\noperating\noperation\noperational\noperationalism\noperationalist\noperationism\noperationist\noperative\noperatively\noperativeness\noperativity\noperatize\noperator\noperatory\noperatrix\nopercle\nopercled\nopercula\nopercular\nOperculata\noperculate\noperculated\noperculiferous\noperculiform\noperculigenous\noperculigerous\noperculum\noperetta\noperette\noperettist\noperose\noperosely\noperoseness\noperosity\nOphelia\nophelimity\nOphian\nophiasis\nophic\nophicalcite\nOphicephalidae\nophicephaloid\nOphicephalus\nOphichthyidae\nophichthyoid\nophicleide\nophicleidean\nophicleidist\nOphidia\nophidian\nOphidiidae\nOphidiobatrachia\nophidioid\nOphidion\nophidiophobia\nophidious\nophidologist\nophidology\nOphiobatrachia\nOphiobolus\nOphioglossaceae\nophioglossaceous\nOphioglossales\nOphioglossum\nophiography\nophioid\nophiolater\nophiolatrous\nophiolatry\nophiolite\nophiolitic\nophiologic\nophiological\nophiologist\nophiology\nophiomancy\nophiomorph\nOphiomorpha\nophiomorphic\nophiomorphous\nOphion\nophionid\nOphioninae\nophionine\nophiophagous\nophiophilism\nophiophilist\nophiophobe\nophiophobia\nophiophoby\nophiopluteus\nOphiosaurus\nophiostaphyle\nophiouride\nOphis\nOphisaurus\nOphism\nOphite\nophite\nOphitic\nophitic\nOphitism\nOphiuchid\nOphiuchus\nophiuran\nophiurid\nOphiurida\nophiuroid\nOphiuroidea\nophiuroidean\nophryon\nOphrys\nophthalaiater\nophthalmagra\nophthalmalgia\nophthalmalgic\nophthalmatrophia\nophthalmectomy\nophthalmencephalon\nophthalmetrical\nophthalmia\nophthalmiac\nophthalmiatrics\nophthalmic\nophthalmious\nophthalmist\nophthalmite\nophthalmitic\nophthalmitis\nophthalmoblennorrhea\nophthalmocarcinoma\nophthalmocele\nophthalmocopia\nophthalmodiagnosis\nophthalmodiastimeter\nophthalmodynamometer\nophthalmodynia\nophthalmography\nophthalmoleucoscope\nophthalmolith\nophthalmologic\nophthalmological\nophthalmologist\nophthalmology\nophthalmomalacia\nophthalmometer\nophthalmometric\nophthalmometry\nophthalmomycosis\nophthalmomyositis\nophthalmomyotomy\nophthalmoneuritis\nophthalmopathy\nophthalmophlebotomy\nophthalmophore\nophthalmophorous\nophthalmophthisis\nophthalmoplasty\nophthalmoplegia\nophthalmoplegic\nophthalmopod\nophthalmoptosis\nophthalmorrhagia\nophthalmorrhea\nophthalmorrhexis\nOphthalmosaurus\nophthalmoscope\nophthalmoscopic\nophthalmoscopical\nophthalmoscopist\nophthalmoscopy\nophthalmostasis\nophthalmostat\nophthalmostatometer\nophthalmothermometer\nophthalmotomy\nophthalmotonometer\nophthalmotonometry\nophthalmotrope\nophthalmotropometer\nophthalmy\nopianic\nopianyl\nopiate\nopiateproof\nopiatic\nOpiconsivia\nopificer\nopiism\nOpilia\nOpiliaceae\nopiliaceous\nOpiliones\nOpilionina\nopilionine\nOpilonea\nOpimian\nopinability\nopinable\nopinably\nopinant\nopination\nopinative\nopinatively\nopinator\nopine\nopiner\nopiniaster\nopiniastre\nopiniastrety\nopiniastrous\nopiniater\nopiniative\nopiniatively\nopiniativeness\nopiniatreness\nopiniatrety\nopinion\nopinionable\nopinionaire\nopinional\nopinionate\nopinionated\nopinionatedly\nopinionatedness\nopinionately\nopinionative\nopinionatively\nopinionativeness\nopinioned\nopinionedness\nopinionist\nopiomania\nopiomaniac\nopiophagism\nopiophagy\nopiparous\nopisometer\nopisthenar\nopisthion\nopisthobranch\nOpisthobranchia\nopisthobranchiate\nOpisthocoelia\nopisthocoelian\nopisthocoelous\nopisthocome\nOpisthocomi\nOpisthocomidae\nopisthocomine\nopisthocomous\nopisthodetic\nopisthodome\nopisthodomos\nopisthodomus\nopisthodont\nopisthogastric\nOpisthoglossa\nopisthoglossal\nopisthoglossate\nopisthoglyph\nOpisthoglypha\nopisthoglyphic\nopisthoglyphous\nOpisthognathidae\nopisthognathism\nopisthognathous\nopisthograph\nopisthographal\nopisthographic\nopisthographical\nopisthography\nopisthogyrate\nopisthogyrous\nOpisthoparia\nopisthoparian\nopisthophagic\nopisthoporeia\nopisthorchiasis\nOpisthorchis\nopisthosomal\nOpisthothelae\nopisthotic\nopisthotonic\nopisthotonoid\nopisthotonos\nopisthotonus\nopium\nopiumism\nopobalsam\nopodeldoc\nopodidymus\nopodymus\nopopanax\nOporto\nopossum\nopotherapy\nOppian\noppidan\noppilate\noppilation\noppilative\nopponency\nopponent\nopportune\nopportuneless\nopportunely\nopportuneness\nopportunism\nopportunist\nopportunistic\nopportunistically\nopportunity\nopposability\nopposable\noppose\nopposed\nopposeless\nopposer\nopposing\nopposingly\nopposit\nopposite\noppositely\noppositeness\noppositiflorous\noppositifolious\nopposition\noppositional\noppositionary\noppositionism\noppositionist\noppositionless\noppositious\noppositipetalous\noppositipinnate\noppositipolar\noppositisepalous\noppositive\noppositively\noppositiveness\nopposure\noppress\noppressed\noppressible\noppression\noppressionist\noppressive\noppressively\noppressiveness\noppressor\nopprobriate\nopprobrious\nopprobriously\nopprobriousness\nopprobrium\nopprobry\noppugn\noppugnacy\noppugnance\noppugnancy\noppugnant\noppugnate\noppugnation\noppugner\nopsigamy\nopsimath\nopsimathy\nopsiometer\nopsisform\nopsistype\nopsonic\nopsoniferous\nopsonification\nopsonify\nopsonin\nopsonist\nopsonium\nopsonization\nopsonize\nopsonogen\nopsonoid\nopsonology\nopsonometry\nopsonophilia\nopsonophilic\nopsonophoric\nopsonotherapy\nopsy\nopt\noptable\noptableness\noptably\noptant\noptate\noptation\noptative\noptatively\nopthalmophorium\nopthalmoplegy\nopthalmothermometer\noptic\noptical\noptically\noptician\nopticist\nopticity\nopticochemical\nopticociliary\nopticon\nopticopapillary\nopticopupillary\noptics\noptigraph\noptimacy\noptimal\noptimate\noptimates\noptime\noptimism\noptimist\noptimistic\noptimistical\noptimistically\noptimity\noptimization\noptimize\noptimum\noption\noptional\noptionality\noptionalize\noptionally\noptionary\noptionee\noptionor\noptive\noptoblast\noptogram\noptography\noptological\noptologist\noptology\noptomeninx\noptometer\noptometrical\noptometrist\noptometry\noptophone\noptotechnics\noptotype\nOpulaster\nopulence\nopulency\nopulent\nopulently\nopulus\nOpuntia\nOpuntiaceae\nOpuntiales\nopuntioid\nopus\nopuscular\nopuscule\nopusculum\noquassa\nor\nora\norabassu\norach\noracle\noracular\noracularity\noracularly\noracularness\noraculate\noraculous\noraculously\noraculousness\noraculum\norad\norage\noragious\nOrakzai\noral\noraler\noralism\noralist\norality\noralization\noralize\norally\noralogist\noralogy\nOrang\norang\norange\norangeade\norangebird\nOrangeism\nOrangeist\norangeleaf\nOrangeman\norangeman\noranger\norangeroot\norangery\norangewoman\norangewood\norangey\norangism\norangist\norangite\norangize\norangutan\norant\nOraon\norarian\norarion\norarium\norary\norate\noration\norational\norationer\norator\noratorial\noratorially\nOratorian\noratorian\nOratorianism\nOratorianize\noratoric\noratorical\noratorically\noratorio\noratorize\noratorlike\noratorship\noratory\noratress\noratrix\norb\norbed\norbic\norbical\nOrbicella\norbicle\norbicular\norbicularis\norbicularity\norbicularly\norbicularness\norbiculate\norbiculated\norbiculately\norbiculation\norbiculatocordate\norbiculatoelliptical\nOrbiculoidea\norbific\nOrbilian\nOrbilius\norbit\norbital\norbitale\norbitar\norbitary\norbite\norbitelar\nOrbitelariae\norbitelarian\norbitele\norbitelous\norbitofrontal\nOrbitoides\nOrbitolina\norbitolite\nOrbitolites\norbitomalar\norbitomaxillary\norbitonasal\norbitopalpebral\norbitosphenoid\norbitosphenoidal\norbitostat\norbitotomy\norbitozygomatic\norbless\norblet\nOrbulina\norby\norc\nOrca\nOrcadian\norcanet\norcein\norchamus\norchard\norcharding\norchardist\norchardman\norchat\norchel\norchella\norchesis\norchesography\norchester\nOrchestia\norchestian\norchestic\norchestiid\nOrchestiidae\norchestra\norchestral\norchestraless\norchestrally\norchestrate\norchestrater\norchestration\norchestrator\norchestre\norchestric\norchestrina\norchestrion\norchialgia\norchic\norchichorea\norchid\nOrchidaceae\norchidacean\norchidaceous\nOrchidales\norchidalgia\norchidectomy\norchideous\norchideously\norchidist\norchiditis\norchidocele\norchidocelioplasty\norchidologist\norchidology\norchidomania\norchidopexy\norchidoplasty\norchidoptosis\norchidorrhaphy\norchidotherapy\norchidotomy\norchiectomy\norchiencephaloma\norchiepididymitis\norchil\norchilla\norchilytic\norchiocatabasis\norchiocele\norchiodynia\norchiomyeloma\norchioncus\norchioneuralgia\norchiopexy\norchioplasty\norchiorrhaphy\norchioscheocele\norchioscirrhus\norchiotomy\nOrchis\norchitic\norchitis\norchotomy\norcin\norcinol\nOrcinus\nordain\nordainable\nordainer\nordainment\nordanchite\nordeal\norder\norderable\nordered\norderedness\norderer\norderless\norderliness\norderly\nordinable\nordinal\nordinally\nordinance\nordinand\nordinant\nordinar\nordinarily\nordinariness\nordinarius\nordinary\nordinaryship\nordinate\nordinately\nordination\nordinative\nordinatomaculate\nordinator\nordinee\nordines\nordnance\nordonnance\nordonnant\nordosite\nOrdovian\nOrdovices\nOrdovician\nordu\nordure\nordurous\nore\noread\nOreamnos\nOreas\norecchion\norectic\norective\noreillet\norellin\noreman\norenda\norendite\nOreocarya\nOreodon\noreodont\nOreodontidae\noreodontine\noreodontoid\nOreodoxa\nOreophasinae\noreophasine\nOreophasis\nOreortyx\noreotragine\nOreotragus\nOreotrochilus\nOrestean\nOresteia\noreweed\norewood\norexis\norf\norfgild\norgan\norganal\norganbird\norgandy\norganella\norganelle\norganer\norganette\norganic\norganical\norganically\norganicalness\norganicism\norganicismal\norganicist\norganicistic\norganicity\norganific\norganing\norganism\norganismal\norganismic\norganist\norganistic\norganistrum\norganistship\norganity\norganizability\norganizable\norganization\norganizational\norganizationally\norganizationist\norganizatory\norganize\norganized\norganizer\norganless\norganoantimony\norganoarsenic\norganobismuth\norganoboron\norganochordium\norganogel\norganogen\norganogenesis\norganogenetic\norganogenic\norganogenist\norganogeny\norganogold\norganographic\norganographical\norganographist\norganography\norganoid\norganoiron\norganolead\norganoleptic\norganolithium\norganologic\norganological\norganologist\norganology\norganomagnesium\norganomercury\norganometallic\norganon\norganonomic\norganonomy\norganonym\norganonymal\norganonymic\norganonymy\norganopathy\norganophil\norganophile\norganophilic\norganophone\norganophonic\norganophyly\norganoplastic\norganoscopy\norganosilicon\norganosilver\norganosodium\norganosol\norganotherapy\norganotin\norganotrophic\norganotropic\norganotropically\norganotropism\norganotropy\norganozinc\norganry\norganule\norganum\norganzine\norgasm\norgasmic\norgastic\norgeat\norgia\norgiac\norgiacs\norgiasm\norgiast\norgiastic\norgiastical\norgic\norgue\norguinette\norgulous\norgulously\norgy\norgyia\nOrias\nOribatidae\noribi\norichalceous\norichalch\norichalcum\noriconic\noricycle\noriel\noriency\norient\nOriental\noriental\nOrientalia\norientalism\norientalist\norientality\norientalization\norientalize\norientally\nOrientalogy\norientate\norientation\norientative\norientator\norientite\norientization\norientize\noriently\norientness\norifacial\norifice\norificial\noriflamb\noriflamme\noriform\norigan\noriganized\nOriganum\nOrigenian\nOrigenic\nOrigenical\nOrigenism\nOrigenist\nOrigenistic\nOrigenize\norigin\noriginable\noriginal\noriginalist\noriginality\noriginally\noriginalness\noriginant\noriginarily\noriginary\noriginate\norigination\noriginative\noriginatively\noriginator\noriginatress\noriginist\norignal\norihon\norihyperbola\norillion\norillon\norinasal\norinasality\noriole\nOriolidae\nOriolus\nOrion\nOriskanian\norismologic\norismological\norismology\norison\norisphere\noristic\nOriya\nOrkhon\nOrkneyan\nOrlando\norle\norlean\nOrleanism\nOrleanist\nOrleanistic\nOrleans\norlet\norleways\norlewise\norlo\norlop\nOrmazd\normer\normolu\nOrmond\norna\nornament\nornamental\nornamentalism\nornamentalist\nornamentality\nornamentalize\nornamentally\nornamentary\nornamentation\nornamenter\nornamentist\nornate\nornately\nornateness\nornation\nornature\norneriness\nornery\nornis\norniscopic\norniscopist\norniscopy\nornithic\nornithichnite\nornithine\nOrnithischia\nornithischian\nornithivorous\nornithobiographical\nornithobiography\nornithocephalic\nOrnithocephalidae\nornithocephalous\nOrnithocephalus\nornithocoprolite\nornithocopros\nornithodelph\nOrnithodelphia\nornithodelphian\nornithodelphic\nornithodelphous\nOrnithodoros\nOrnithogaea\nOrnithogaean\nOrnithogalum\nornithogeographic\nornithogeographical\nornithography\nornithoid\nOrnitholestes\nornitholite\nornitholitic\nornithologic\nornithological\nornithologically\nornithologist\nornithology\nornithomancy\nornithomantia\nornithomantic\nornithomantist\nOrnithomimidae\nOrnithomimus\nornithomorph\nornithomorphic\nornithomyzous\nornithon\nOrnithopappi\nornithophile\nornithophilist\nornithophilite\nornithophilous\nornithophily\nornithopod\nOrnithopoda\nornithopter\nOrnithoptera\nOrnithopteris\nOrnithorhynchidae\nornithorhynchous\nOrnithorhynchus\nornithosaur\nOrnithosauria\nornithosaurian\nOrnithoscelida\nornithoscelidan\nornithoscopic\nornithoscopist\nornithoscopy\nornithosis\nornithotomical\nornithotomist\nornithotomy\nornithotrophy\nOrnithurae\nornithuric\nornithurous\nornoite\noroanal\nOrobanchaceae\norobanchaceous\nOrobanche\norobancheous\norobathymetric\nOrobatoidea\nOrochon\norocratic\norodiagnosis\norogen\norogenesis\norogenesy\norogenetic\norogenic\norogeny\norograph\norographic\norographical\norographically\norography\noroheliograph\nOrohippus\norohydrographic\norohydrographical\norohydrography\noroide\norolingual\norological\norologist\norology\norometer\norometric\norometry\nOromo\noronasal\noronoco\nOrontium\noropharyngeal\noropharynx\norotherapy\nOrotinan\norotund\norotundity\norphan\norphancy\norphandom\norphange\norphanhood\norphanism\norphanize\norphanry\norphanship\norpharion\nOrphean\nOrpheist\norpheon\norpheonist\norpheum\nOrpheus\nOrphic\nOrphical\nOrphically\nOrphicism\nOrphism\nOrphize\norphrey\norphreyed\norpiment\norpine\nOrpington\norrery\norrhoid\norrhology\norrhotherapy\norris\norrisroot\norseille\norseilline\norsel\norselle\norseller\norsellic\norsellinate\norsellinic\nOrson\nort\nortalid\nOrtalidae\nortalidian\nOrtalis\nortet\nOrthagoriscus\northal\northantimonic\nOrtheris\northian\northic\northicon\northid\nOrthidae\nOrthis\northite\northitic\northo\northoarsenite\northoaxis\northobenzoquinone\northobiosis\northoborate\northobrachycephalic\northocarbonic\northocarpous\nOrthocarpus\northocenter\northocentric\northocephalic\northocephalous\northocephaly\northoceracone\nOrthoceran\nOrthoceras\nOrthoceratidae\northoceratite\northoceratitic\northoceratoid\northochlorite\northochromatic\northochromatize\northoclase\northoclasite\northoclastic\northocoumaric\northocresol\northocymene\northodiaene\northodiagonal\northodiagram\northodiagraph\northodiagraphic\northodiagraphy\northodiazin\northodiazine\northodolichocephalic\northodomatic\northodome\northodontia\northodontic\northodontics\northodontist\northodox\northodoxal\northodoxality\northodoxally\northodoxian\northodoxical\northodoxically\northodoxism\northodoxist\northodoxly\northodoxness\northodoxy\northodromic\northodromics\northodromy\northoepic\northoepical\northoepically\northoepist\northoepistic\northoepy\northoformic\northogamous\northogamy\northogenesis\northogenetic\northogenic\northognathic\northognathism\northognathous\northognathus\northognathy\northogneiss\northogonal\northogonality\northogonally\northogonial\northograde\northogranite\northograph\northographer\northographic\northographical\northographically\northographist\northographize\northography\northohydrogen\northologer\northologian\northological\northology\northometopic\northometric\northometry\nOrthonectida\northonitroaniline\northopath\northopathic\northopathically\northopathy\northopedia\northopedic\northopedical\northopedically\northopedics\northopedist\northopedy\northophenylene\northophonic\northophony\northophoria\northophoric\northophosphate\northophosphoric\northophyre\northophyric\northopinacoid\northopinacoidal\northoplastic\northoplasy\northoplumbate\northopnea\northopneic\northopod\nOrthopoda\northopraxis\northopraxy\northoprism\northopsychiatric\northopsychiatrical\northopsychiatrist\northopsychiatry\northopter\nOrthoptera\northopteral\northopteran\northopterist\northopteroid\nOrthopteroidea\northopterological\northopterologist\northopterology\northopteron\northopterous\northoptic\northopyramid\northopyroxene\northoquinone\northorhombic\nOrthorrhapha\northorrhaphous\northorrhaphy\northoscope\northoscopic\northose\northosemidin\northosemidine\northosilicate\northosilicic\northosis\northosite\northosomatic\northospermous\northostatic\northostichous\northostichy\northostyle\northosubstituted\northosymmetric\northosymmetrical\northosymmetrically\northosymmetry\northotactic\northotectic\northotic\northotolidin\northotolidine\northotoluic\northotoluidin\northotoluidine\northotomic\northotomous\northotone\northotonesis\northotonic\northotonus\northotropal\northotropic\northotropism\northotropous\northotropy\northotype\northotypous\northovanadate\northovanadic\northoveratraldehyde\northoveratric\northoxazin\northoxazine\northoxylene\northron\nortiga\nortive\nOrtol\nortolan\nOrtrud\nortstein\nortygan\nOrtygian\nOrtyginae\nortygine\nOrtyx\nOrunchun\norvietan\norvietite\nOrvieto\nOrville\nory\nOrycteropodidae\nOrycteropus\noryctics\noryctognostic\noryctognostical\noryctognostically\noryctognosy\nOryctolagus\noryssid\nOryssidae\nOryssus\nOryx\nOryza\noryzenin\noryzivorous\nOryzomys\nOryzopsis\nOryzorictes\nOryzorictinae\nOs\nos\nOsage\nosamin\nosamine\nosazone\nOsc\nOscan\nOscar\nOscarella\nOscarellidae\noscella\noscheal\noscheitis\noscheocarcinoma\noscheocele\noscheolith\noscheoma\noscheoncus\noscheoplasty\nOschophoria\noscillance\noscillancy\noscillant\nOscillaria\nOscillariaceae\noscillariaceous\noscillate\noscillating\noscillation\noscillative\noscillatively\noscillator\nOscillatoria\nOscillatoriaceae\noscillatoriaceous\noscillatorian\noscillatory\noscillogram\noscillograph\noscillographic\noscillography\noscillometer\noscillometric\noscillometry\noscilloscope\noscin\noscine\nOscines\noscinian\nOscinidae\noscinine\nOscinis\noscitance\noscitancy\noscitant\noscitantly\noscitate\noscitation\noscnode\nosculable\nosculant\noscular\noscularity\nosculate\nosculation\nosculatory\nosculatrix\noscule\nosculiferous\nosculum\noscurrantist\nose\nosela\noshac\nOsiandrian\noside\nosier\nosiered\nosierlike\nosiery\nOsirian\nOsiride\nOsiridean\nOsirification\nOsirify\nOsiris\nOsirism\nOskar\nOsmanie\nOsmanli\nOsmanthus\nosmate\nosmatic\nosmatism\nosmazomatic\nosmazomatous\nosmazome\nOsmeridae\nOsmerus\nosmesis\nosmeterium\nosmetic\nosmic\nosmidrosis\nosmin\nosmina\nosmious\nosmiridium\nosmium\nosmodysphoria\nosmogene\nosmograph\nosmolagnia\nosmology\nosmometer\nosmometric\nosmometry\nOsmond\nosmondite\nosmophore\nosmoregulation\nOsmorhiza\nosmoscope\nosmose\nosmosis\nosmotactic\nosmotaxis\nosmotherapy\nosmotic\nosmotically\nosmous\nosmund\nOsmunda\nOsmundaceae\nosmundaceous\nosmundine\nOsnaburg\nOsnappar\nosoberry\nosone\nosophy\nosotriazine\nosotriazole\nosphradial\nosphradium\nosphresiolagnia\nosphresiologic\nosphresiologist\nosphresiology\nosphresiometer\nosphresiometry\nosphresiophilia\nosphresis\nosphretic\nOsphromenidae\nosphyalgia\nosphyalgic\nosphyarthritis\nosphyitis\nosphyocele\nosphyomelitis\nosprey\nossal\nossarium\nossature\nosse\nossein\nosselet\nossements\nosseoalbuminoid\nosseoaponeurotic\nosseocartilaginous\nosseofibrous\nosseomucoid\nosseous\nosseously\nOsset\nOssetian\nOssetic\nOssetine\nOssetish\nOssian\nOssianesque\nOssianic\nOssianism\nOssianize\nossicle\nossicular\nossiculate\nossicule\nossiculectomy\nossiculotomy\nossiculum\nossiferous\nossific\nossification\nossified\nossifier\nossifluence\nossifluent\nossiform\nossifrage\nossifrangent\nossify\nossivorous\nossuarium\nossuary\nossypite\nostalgia\nOstara\nostariophysan\nOstariophyseae\nOstariophysi\nostariophysial\nostariophysous\nostarthritis\nosteal\nostealgia\nosteanabrosis\nosteanagenesis\nostearthritis\nostearthrotomy\nostectomy\nosteectomy\nosteectopia\nosteectopy\nOsteichthyes\nostein\nosteitic\nosteitis\nostemia\nostempyesis\nostensibility\nostensible\nostensibly\nostension\nostensive\nostensively\nostensorium\nostensory\nostent\nostentate\nostentation\nostentatious\nostentatiously\nostentatiousness\nostentive\nostentous\nosteoaneurysm\nosteoarthritis\nosteoarthropathy\nosteoarthrotomy\nosteoblast\nosteoblastic\nosteoblastoma\nosteocachetic\nosteocarcinoma\nosteocartilaginous\nosteocele\nosteocephaloma\nosteochondritis\nosteochondrofibroma\nosteochondroma\nosteochondromatous\nosteochondropathy\nosteochondrophyte\nosteochondrosarcoma\nosteochondrous\nosteoclasia\nosteoclasis\nosteoclast\nosteoclastic\nosteoclasty\nosteocolla\nosteocomma\nosteocranium\nosteocystoma\nosteodentin\nosteodentinal\nosteodentine\nosteoderm\nosteodermal\nosteodermatous\nosteodermia\nosteodermis\nosteodiastasis\nosteodynia\nosteodystrophy\nosteoencephaloma\nosteoenchondroma\nosteoepiphysis\nosteofibroma\nosteofibrous\nosteogangrene\nosteogen\nosteogenesis\nosteogenetic\nosteogenic\nosteogenist\nosteogenous\nosteogeny\nosteoglossid\nOsteoglossidae\nosteoglossoid\nOsteoglossum\nosteographer\nosteography\nosteohalisteresis\nosteoid\nOsteolepidae\nOsteolepis\nosteolite\nosteologer\nosteologic\nosteological\nosteologically\nosteologist\nosteology\nosteolysis\nosteolytic\nosteoma\nosteomalacia\nosteomalacial\nosteomalacic\nosteomancy\nosteomanty\nosteomatoid\nosteomere\nosteometric\nosteometrical\nosteometry\nosteomyelitis\nosteoncus\nosteonecrosis\nosteoneuralgia\nosteopaedion\nosteopath\nosteopathic\nosteopathically\nosteopathist\nosteopathy\nosteopedion\nosteoperiosteal\nosteoperiostitis\nosteopetrosis\nosteophage\nosteophagia\nosteophlebitis\nosteophone\nosteophony\nosteophore\nosteophyma\nosteophyte\nosteophytic\nosteoplaque\nosteoplast\nosteoplastic\nosteoplasty\nosteoporosis\nosteoporotic\nosteorrhaphy\nosteosarcoma\nosteosarcomatous\nosteosclerosis\nosteoscope\nosteosis\nosteosteatoma\nosteostixis\nosteostomatous\nosteostomous\nosteostracan\nOsteostraci\nosteosuture\nosteosynovitis\nosteosynthesis\nosteothrombosis\nosteotome\nosteotomist\nosteotomy\nosteotribe\nosteotrite\nosteotrophic\nosteotrophy\nOstertagia\nostial\nostiary\nostiate\nOstic\nostiolar\nostiolate\nostiole\nostitis\nostium\nostleress\nOstmannic\nostmark\nOstmen\nostosis\nOstracea\nostracean\nostraceous\nOstraciidae\nostracine\nostracioid\nOstracion\nostracism\nostracizable\nostracization\nostracize\nostracizer\nostracod\nOstracoda\nostracode\nostracoderm\nOstracodermi\nostracodous\nostracoid\nOstracoidea\nostracon\nostracophore\nOstracophori\nostracophorous\nostracum\nOstraeacea\nostraite\nOstrea\nostreaceous\nostreger\nostreicultural\nostreiculture\nostreiculturist\nOstreidae\nostreiform\nostreodynamometer\nostreoid\nostreophage\nostreophagist\nostreophagous\nostrich\nostrichlike\nOstrogoth\nOstrogothian\nOstrogothic\nOstrya\nOstyak\nOswald\nOswegan\notacoustic\notacousticon\nOtaheitan\notalgia\notalgic\notalgy\nOtaria\notarian\nOtariidae\nOtariinae\notariine\notarine\notarioid\notary\notate\notectomy\notelcosis\nOtello\nOthake\nothelcosis\nOthello\nothematoma\nothemorrhea\notheoscope\nother\notherdom\notherest\nothergates\notherguess\notherhow\notherism\notherist\notherness\nothersome\nothertime\notherwards\notherwhence\notherwhere\notherwhereness\notherwheres\notherwhile\notherwhiles\notherwhither\notherwise\notherwiseness\notherworld\notherworldliness\notherworldly\notherworldness\nOthin\nOthinism\nothmany\nOthonna\nothygroma\notiant\notiatric\notiatrics\notiatry\notic\noticodinia\nOtidae\nOtides\nOtididae\notidiform\notidine\nOtidiphaps\notidium\notiorhynchid\nOtiorhynchidae\nOtiorhynchinae\notiose\notiosely\notioseness\notiosity\nOtis\notitic\notitis\notkon\nOto\notoantritis\notoblennorrhea\notocariasis\notocephalic\notocephaly\notocerebritis\notocleisis\notoconial\notoconite\notoconium\notocrane\notocranial\notocranic\notocranium\nOtocyon\notocyst\notocystic\notodynia\notodynic\notoencephalitis\notogenic\notogenous\notographical\notography\nOtogyps\notohemineurasthenia\notolaryngologic\notolaryngologist\notolaryngology\notolite\notolith\nOtolithidae\nOtolithus\notolitic\notological\notologist\notology\nOtomaco\notomassage\nOtomi\nOtomian\nOtomitlan\notomucormycosis\notomyces\notomycosis\notonecrectomy\notoneuralgia\notoneurasthenia\notopathic\notopathy\notopharyngeal\notophone\notopiesis\notoplastic\notoplasty\notopolypus\notopyorrhea\notopyosis\notorhinolaryngologic\notorhinolaryngologist\notorhinolaryngology\notorrhagia\notorrhea\notorrhoea\notosalpinx\notosclerosis\notoscope\notoscopic\notoscopy\notosis\notosphenal\notosteal\notosteon\nototomy\nOtozoum\nottajanite\nottar\nottavarima\nOttawa\notter\notterer\notterhound\nottinger\nottingkar\nOtto\notto\nOttoman\nOttomanean\nOttomanic\nOttomanism\nOttomanization\nOttomanize\nOttomanlike\nOttomite\nottrelife\nOttweilian\nOtuquian\noturia\nOtus\nOtyak\nouabain\nouabaio\nouabe\nouachitite\nouakari\nouananiche\noubliette\nouch\nOudemian\noudenarde\nOudenodon\noudenodont\nouenite\nouf\nough\nought\noughtness\noughtnt\nOuija\nouistiti\noukia\noulap\nounce\nounds\nouphe\nouphish\nour\nOuranos\nourie\nouroub\nOurouparia\nours\nourself\nourselves\noust\nouster\nout\noutact\noutadmiral\nOutagami\noutage\noutambush\noutarde\noutargue\noutask\noutawe\noutbabble\noutback\noutbacker\noutbake\noutbalance\noutban\noutbanter\noutbar\noutbargain\noutbark\noutbawl\noutbeam\noutbear\noutbearing\noutbeg\noutbeggar\noutbelch\noutbellow\noutbent\noutbetter\noutbid\noutbidder\noutbirth\noutblacken\noutblaze\noutbleat\noutbleed\noutbless\noutbloom\noutblossom\noutblot\noutblow\noutblowing\noutblown\noutbluff\noutblunder\noutblush\noutbluster\noutboard\noutboast\noutbolting\noutbond\noutbook\noutborn\noutborough\noutbound\noutboundaries\noutbounds\noutbow\noutbowed\noutbowl\noutbox\noutbrag\noutbranch\noutbranching\noutbrave\noutbray\noutbrazen\noutbreak\noutbreaker\noutbreaking\noutbreath\noutbreathe\noutbreather\noutbred\noutbreed\noutbreeding\noutbribe\noutbridge\noutbring\noutbrother\noutbud\noutbuild\noutbuilding\noutbulge\noutbulk\noutbully\noutburn\noutburst\noutbustle\noutbuy\noutbuzz\noutby\noutcant\noutcaper\noutcarol\noutcarry\noutcase\noutcast\noutcaste\noutcasting\noutcastness\noutcavil\noutchamber\noutcharm\noutchase\noutchatter\noutcheat\noutchide\noutcity\noutclamor\noutclass\noutclerk\noutclimb\noutcome\noutcomer\noutcoming\noutcompass\noutcomplete\noutcompliment\noutcorner\noutcountry\noutcourt\noutcrawl\noutcricket\noutcrier\noutcrop\noutcropper\noutcross\noutcrossing\noutcrow\noutcrowd\noutcry\noutcull\noutcure\noutcurse\noutcurve\noutcut\noutdaciousness\noutdance\noutdare\noutdate\noutdated\noutdazzle\noutdevil\noutdispatch\noutdistance\noutdistrict\noutdo\noutdodge\noutdoer\noutdoor\noutdoorness\noutdoors\noutdoorsman\noutdraft\noutdragon\noutdraw\noutdream\noutdress\noutdrink\noutdrive\noutdure\noutdwell\noutdweller\noutdwelling\nouteat\noutecho\nouted\noutedge\nouten\nouter\nouterly\noutermost\nouterness\nouterwear\nouteye\nouteyed\noutfable\noutface\noutfall\noutfame\noutfangthief\noutfast\noutfawn\noutfeast\noutfeat\noutfeeding\noutfence\noutferret\noutfiction\noutfield\noutfielder\noutfieldsman\noutfight\noutfighter\noutfighting\noutfigure\noutfish\noutfit\noutfitter\noutflame\noutflank\noutflanker\noutflanking\noutflare\noutflash\noutflatter\noutfling\noutfloat\noutflourish\noutflow\noutflue\noutflung\noutflunky\noutflush\noutflux\noutfly\noutfold\noutfool\noutfoot\noutform\noutfort\noutfreeman\noutfront\noutfroth\noutfrown\noutgabble\noutgain\noutgallop\noutgamble\noutgame\noutgang\noutgarment\noutgarth\noutgas\noutgate\noutgauge\noutgaze\noutgeneral\noutgive\noutgiving\noutglad\noutglare\noutgleam\noutglitter\noutgloom\noutglow\noutgnaw\noutgo\noutgoer\noutgoing\noutgoingness\noutgone\noutgreen\noutgrin\noutground\noutgrow\noutgrowing\noutgrowth\noutguard\noutguess\noutgun\noutgush\nouthammer\nouthasten\nouthaul\nouthauler\nouthear\noutheart\nouthector\noutheel\nouther\nouthire\nouthiss\nouthit\nouthold\nouthorror\nouthouse\nouthousing\nouthowl\nouthue\nouthumor\nouthunt\nouthurl\nouthut\nouthymn\nouthyperbolize\noutimage\nouting\noutinvent\noutish\noutissue\noutjazz\noutjest\noutjet\noutjetting\noutjinx\noutjockey\noutjourney\noutjuggle\noutjump\noutjut\noutkeeper\noutkick\noutkill\noutking\noutkiss\noutkitchen\noutknave\noutknee\noutlabor\noutlaid\noutlance\noutland\noutlander\noutlandish\noutlandishlike\noutlandishly\noutlandishness\noutlash\noutlast\noutlaugh\noutlaunch\noutlaw\noutlawry\noutlay\noutlean\noutleap\noutlearn\noutlegend\noutlength\noutlengthen\noutler\noutlet\noutlie\noutlier\noutlighten\noutlimb\noutlimn\noutline\noutlinear\noutlined\noutlineless\noutliner\noutlinger\noutlip\noutlipped\noutlive\noutliver\noutlodging\noutlook\noutlooker\noutlord\noutlove\noutlung\noutluster\noutly\noutlying\noutmagic\noutmalaprop\noutman\noutmaneuver\noutmantle\noutmarch\noutmarriage\noutmarry\noutmaster\noutmatch\noutmate\noutmeasure\noutmerchant\noutmiracle\noutmode\noutmoded\noutmost\noutmount\noutmouth\noutmove\noutname\noutness\noutnight\noutnoise\noutnook\noutnumber\noutoffice\noutoven\noutpace\noutpage\noutpaint\noutparagon\noutparamour\noutparish\noutpart\noutpass\noutpassion\noutpath\noutpatient\noutpay\noutpayment\noutpeal\noutpeep\noutpeer\noutpension\noutpensioner\noutpeople\noutperform\noutpick\noutpicket\noutpipe\noutpitch\noutpity\noutplace\noutplan\noutplay\noutplayed\noutplease\noutplod\noutplot\noutpocketing\noutpoint\noutpoise\noutpoison\noutpoll\noutpomp\noutpop\noutpopulate\noutporch\noutport\noutporter\noutportion\noutpost\noutpouching\noutpour\noutpourer\noutpouring\noutpractice\noutpraise\noutpray\noutpreach\noutpreen\noutprice\noutprodigy\noutproduce\noutpromise\noutpry\noutpull\noutpupil\noutpurl\noutpurse\noutpush\noutput\noutputter\noutquaff\noutquarters\noutqueen\noutquestion\noutquibble\noutquote\noutrace\noutrage\noutrageous\noutrageously\noutrageousness\noutrageproof\noutrager\noutraging\noutrail\noutrance\noutrange\noutrank\noutrant\noutrap\noutrate\noutraught\noutrave\noutray\noutre\noutreach\noutread\noutreason\noutreckon\noutredden\noutrede\noutreign\noutrelief\noutremer\noutreness\noutrhyme\noutrick\noutride\noutrider\noutriding\noutrig\noutrigger\noutriggered\noutriggerless\noutrigging\noutright\noutrightly\noutrightness\noutring\noutrival\noutroar\noutrogue\noutroll\noutromance\noutrooper\noutroot\noutrove\noutrow\noutroyal\noutrun\noutrunner\noutrush\noutsail\noutsaint\noutsally\noutsatisfy\noutsavor\noutsay\noutscent\noutscold\noutscore\noutscorn\noutscour\noutscouring\noutscream\noutsea\noutseam\noutsearch\noutsee\noutseek\noutsell\noutsentry\noutsert\noutservant\noutset\noutsetting\noutsettlement\noutsettler\noutshadow\noutshake\noutshame\noutshape\noutsharp\noutsharpen\noutsheathe\noutshift\noutshine\noutshiner\noutshoot\noutshot\noutshoulder\noutshout\noutshove\noutshow\noutshower\noutshriek\noutshrill\noutshut\noutside\noutsided\noutsidedness\noutsideness\noutsider\noutsift\noutsigh\noutsight\noutsin\noutsing\noutsit\noutsize\noutsized\noutskill\noutskip\noutskirmish\noutskirmisher\noutskirt\noutskirter\noutslander\noutslang\noutsleep\noutslide\noutslink\noutsmart\noutsmell\noutsmile\noutsnatch\noutsnore\noutsoar\noutsole\noutsoler\noutsonnet\noutsophisticate\noutsound\noutspan\noutsparkle\noutspeak\noutspeaker\noutspeech\noutspeed\noutspell\noutspend\noutspent\noutspill\noutspin\noutspirit\noutspit\noutsplendor\noutspoken\noutspokenly\noutspokenness\noutsport\noutspout\noutspread\noutspring\noutsprint\noutspue\noutspurn\noutspurt\noutstagger\noutstair\noutstand\noutstander\noutstanding\noutstandingly\noutstandingness\noutstare\noutstart\noutstarter\noutstartle\noutstate\noutstation\noutstatistic\noutstature\noutstay\noutsteal\noutsteam\noutstep\noutsting\noutstink\noutstood\noutstorm\noutstrain\noutstream\noutstreet\noutstretch\noutstretcher\noutstride\noutstrike\noutstrip\noutstrive\noutstroke\noutstrut\noutstudent\noutstudy\noutstunt\noutsubtle\noutsuck\noutsucken\noutsuffer\noutsuitor\noutsulk\noutsum\noutsuperstition\noutswagger\noutswarm\noutswear\noutsweep\noutsweeping\noutsweeten\noutswell\noutswift\noutswim\noutswindle\noutswing\noutswirl\nouttaken\nouttalent\nouttalk\nouttask\nouttaste\nouttear\nouttease\nouttell\noutthieve\noutthink\noutthreaten\noutthrob\noutthrough\noutthrow\noutthrust\noutthruster\noutthunder\noutthwack\nouttinkle\nouttire\nouttoil\nouttongue\nouttop\nouttower\nouttrade\nouttrail\nouttravel\nouttrick\nouttrot\nouttrump\noutturn\noutturned\nouttyrannize\noutusure\noutvalue\noutvanish\noutvaunt\noutvelvet\noutvenom\noutvictor\noutvie\noutvier\noutvigil\noutvillage\noutvillain\noutvociferate\noutvoice\noutvote\noutvoter\noutvoyage\noutwait\noutwake\noutwale\noutwalk\noutwall\noutwallop\noutwander\noutwar\noutwarble\noutward\noutwardly\noutwardmost\noutwardness\noutwards\noutwash\noutwaste\noutwatch\noutwater\noutwave\noutwealth\noutweapon\noutwear\noutweary\noutweave\noutweed\noutweep\noutweigh\noutweight\noutwell\noutwent\noutwhirl\noutwick\noutwile\noutwill\noutwind\noutwindow\noutwing\noutwish\noutwit\noutwith\noutwittal\noutwitter\noutwoe\noutwoman\noutwood\noutword\noutwore\noutwork\noutworker\noutworld\noutworn\noutworth\noutwrangle\noutwrench\noutwrest\noutwrestle\noutwriggle\noutwring\noutwrite\noutwrought\noutyard\noutyell\noutyelp\noutyield\noutzany\nouzel\nOva\nova\nOvaherero\noval\novalbumin\novalescent\novaliform\novalish\novalization\novalize\novally\novalness\novaloid\novalwise\nOvambo\nOvampo\nOvangangela\novant\novarial\novarian\novarin\novarioabdominal\novariocele\novariocentesis\novariocyesis\novariodysneuria\novariohysterectomy\novariole\novariolumbar\novariorrhexis\novariosalpingectomy\novariosteresis\novariostomy\novariotomist\novariotomize\novariotomy\novariotubal\novarious\novaritis\novarium\novary\novate\novateconical\novated\novately\novation\novational\novationary\novatoacuminate\novatoconical\novatocordate\novatocylindraceous\novatodeltoid\novatoellipsoidal\novatoglobose\novatolanceolate\novatooblong\novatoorbicular\novatopyriform\novatoquadrangular\novatorotundate\novatoserrate\novatotriangular\noven\novenbird\novenful\novenlike\novenly\novenman\novenpeel\novenstone\novenware\novenwise\nover\noverability\noverable\noverabound\noverabsorb\noverabstain\noverabstemious\noverabstemiousness\noverabundance\noverabundant\noverabundantly\noverabuse\noveraccentuate\noveraccumulate\noveraccumulation\noveraccuracy\noveraccurate\noveraccurately\noveract\noveraction\noveractive\noveractiveness\noveractivity\noveracute\noveraddiction\noveradvance\noveradvice\noveraffect\noveraffirmation\noverafflict\noveraffliction\noverage\noverageness\noveraggravate\noveraggravation\noveragitate\noveragonize\noverall\noveralled\noveralls\noverambitioned\noverambitious\noverambling\noveranalyze\noverangelic\noverannotate\noveranswer\noveranxiety\noveranxious\noveranxiously\noverappareled\noverappraisal\noverappraise\noverapprehended\noverapprehension\noverapprehensive\noverapt\noverarch\noverargue\noverarm\noverartificial\noverartificiality\noverassail\noverassert\noverassertion\noverassertive\noverassertively\noverassertiveness\noverassess\noverassessment\noverassumption\noverattached\noverattachment\noverattention\noverattentive\noverattentively\noverawe\noverawful\noverawn\noverawning\noverbake\noverbalance\noverballast\noverbalm\noverbanded\noverbandy\noverbank\noverbanked\noverbark\noverbarren\noverbarrenness\noverbase\noverbaseness\noverbashful\noverbashfully\noverbashfulness\noverbattle\noverbear\noverbearance\noverbearer\noverbearing\noverbearingly\noverbearingness\noverbeat\noverbeating\noverbeetling\noverbelief\noverbend\noverbepatched\noverberg\noverbet\noverbias\noverbid\noverbig\noverbigness\noverbillow\noverbit\noverbite\noverbitten\noverbitter\noverbitterly\noverbitterness\noverblack\noverblame\noverblaze\noverbleach\noverblessed\noverblessedness\noverblind\noverblindly\noverblithe\noverbloom\noverblouse\noverblow\noverblowing\noverblown\noverboard\noverboast\noverboastful\noverbodice\noverboding\noverbody\noverboil\noverbold\noverboldly\noverboldness\noverbook\noverbookish\noverbooming\noverborne\noverborrow\noverbought\noverbound\noverbounteous\noverbounteously\noverbounteousness\noverbow\noverbowed\noverbowl\noverbrace\noverbragging\noverbrained\noverbranch\noverbrave\noverbravely\noverbravery\noverbray\noverbreak\noverbreathe\noverbred\noverbreed\noverbribe\noverbridge\noverbright\noverbrightly\noverbrightness\noverbrilliancy\noverbrilliant\noverbrilliantly\noverbrim\noverbrimmingly\noverbroaden\noverbroil\noverbrood\noverbrow\noverbrown\noverbrowse\noverbrush\noverbrutal\noverbrutality\noverbrutalize\noverbrutally\noverbubbling\noverbuild\noverbuilt\noverbulk\noverbulky\noverbumptious\noverburden\noverburdeningly\noverburdensome\noverburn\noverburned\noverburningly\noverburnt\noverburst\noverburthen\noverbusily\noverbusiness\noverbusy\noverbuy\noverby\novercall\novercanny\novercanopy\novercap\novercapable\novercapably\novercapacity\novercape\novercapitalization\novercapitalize\novercaptious\novercaptiously\novercaptiousness\novercard\novercare\novercareful\novercarefully\novercareless\novercarelessly\novercarelessness\novercaring\novercarking\novercarry\novercast\novercasting\novercasual\novercasually\novercatch\novercaution\novercautious\novercautiously\novercautiousness\novercentralization\novercentralize\novercertification\novercertify\noverchafe\noverchannel\noverchant\novercharge\noverchargement\novercharger\novercharitable\novercharitably\novercharity\noverchase\novercheap\novercheaply\novercheapness\novercheck\novercherish\noverchidden\noverchief\noverchildish\noverchildishness\noverchill\noverchlorinate\noverchoke\noverchrome\noverchurch\novercirculate\novercircumspect\novercircumspection\novercivil\novercivility\novercivilization\novercivilize\noverclaim\noverclamor\noverclasp\noverclean\novercleanly\novercleanness\novercleave\noverclever\novercleverness\noverclimb\novercloak\noverclog\noverclose\noverclosely\novercloseness\noverclothe\noverclothes\novercloud\novercloy\novercluster\novercoached\novercoat\novercoated\novercoating\novercoil\novercold\novercoldly\novercollar\novercolor\novercomable\novercome\novercomer\novercomingly\novercommand\novercommend\novercommon\novercommonly\novercommonness\novercompensate\novercompensation\novercompensatory\novercompetition\novercompetitive\novercomplacency\novercomplacent\novercomplacently\novercomplete\novercomplex\novercomplexity\novercompliant\novercompound\noverconcentrate\noverconcentration\noverconcern\noverconcerned\novercondensation\novercondense\noverconfidence\noverconfident\noverconfidently\noverconfute\noverconquer\noverconscientious\noverconscious\noverconsciously\noverconsciousness\noverconservatism\noverconservative\noverconservatively\noverconsiderate\noverconsiderately\noverconsideration\noverconsume\noverconsumption\novercontented\novercontentedly\novercontentment\novercontract\novercontraction\novercontribute\novercontribution\novercook\novercool\novercoolly\novercopious\novercopiously\novercopiousness\novercorned\novercorrect\novercorrection\novercorrupt\novercorruption\novercorruptly\novercostly\novercount\novercourteous\novercourtesy\novercover\novercovetous\novercovetousness\novercow\novercoy\novercoyness\novercram\novercredit\novercredulity\novercredulous\novercredulously\novercreed\novercreep\novercritical\novercritically\novercriticalness\novercriticism\novercriticize\novercrop\novercross\novercrow\novercrowd\novercrowded\novercrowdedly\novercrowdedness\novercrown\novercrust\novercry\novercull\novercultivate\novercultivation\noverculture\novercultured\novercumber\novercunning\novercunningly\novercunningness\novercup\novercured\novercurious\novercuriously\novercuriousness\novercurl\novercurrency\novercurrent\novercurtain\novercustom\novercut\novercutter\novercutting\noverdaintily\noverdaintiness\noverdainty\noverdamn\noverdance\noverdangle\noverdare\noverdaringly\noverdarken\noverdash\noverdazed\noverdazzle\noverdeal\noverdear\noverdearly\noverdearness\noverdeck\noverdecorate\noverdecoration\noverdecorative\noverdeeming\noverdeep\noverdeepen\noverdeeply\noverdeliberate\noverdeliberation\noverdelicacy\noverdelicate\noverdelicately\noverdelicious\noverdeliciously\noverdelighted\noverdelightedly\noverdemand\noverdemocracy\noverdepress\noverdepressive\noverdescant\noverdesire\noverdesirous\noverdesirousness\noverdestructive\noverdestructively\noverdestructiveness\noverdetermination\noverdetermined\noverdevelop\noverdevelopment\noverdevoted\noverdevotedly\noverdevotion\noverdiffuse\noverdiffusely\noverdiffuseness\noverdigest\noverdignified\noverdignifiedly\noverdignifiedness\noverdignify\noverdignity\noverdiligence\noverdiligent\noverdiligently\noverdilute\noverdilution\noverdischarge\noverdiscipline\noverdiscount\noverdiscourage\noverdiscouragement\noverdistance\noverdistant\noverdistantly\noverdistantness\noverdistempered\noverdistention\noverdiverse\noverdiversely\noverdiversification\noverdiversify\noverdiversity\noverdo\noverdoctrinize\noverdoer\noverdogmatic\noverdogmatically\noverdogmatism\noverdome\noverdominate\noverdone\noverdoor\noverdosage\noverdose\noverdoubt\noverdoze\noverdraft\noverdrain\noverdrainage\noverdramatic\noverdramatically\noverdrape\noverdrapery\noverdraw\noverdrawer\noverdream\noverdrench\noverdress\noverdrifted\noverdrink\noverdrip\noverdrive\noverdriven\noverdroop\noverdrowsed\noverdry\noverdubbed\noverdue\noverdunged\noverdure\noverdust\noverdye\novereager\novereagerly\novereagerness\noverearnest\noverearnestly\noverearnestness\novereasily\novereasiness\novereasy\novereat\novereaten\noveredge\noveredit\novereducate\novereducated\novereducation\novereducative\novereffort\noveregg\noverelaborate\noverelaborately\noverelaboration\noverelate\noverelegance\noverelegancy\noverelegant\noverelegantly\noverelliptical\noverembellish\noverembellishment\noverembroider\noveremotional\noveremotionality\noveremotionalize\noveremphasis\noveremphasize\noveremphatic\noveremphatically\noveremphaticness\noverempired\noveremptiness\noverempty\noverenter\noverenthusiasm\noverenthusiastic\noverentreat\noverentry\noverequal\noverestimate\noverestimation\noverexcelling\noverexcitability\noverexcitable\noverexcitably\noverexcite\noverexcitement\noverexercise\noverexert\noverexerted\noverexertedly\noverexertedness\noverexertion\noverexpand\noverexpansion\noverexpansive\noverexpect\noverexpectant\noverexpectantly\noverexpenditure\noverexpert\noverexplain\noverexplanation\noverexpose\noverexposure\noverexpress\noverexquisite\noverexquisitely\noverextend\noverextension\noverextensive\noverextreme\noverexuberant\novereye\novereyebrowed\noverface\noverfacile\noverfacilely\noverfacility\noverfactious\noverfactiousness\noverfag\noverfagged\noverfaint\noverfaith\noverfaithful\noverfaithfully\noverfall\noverfamed\noverfamiliar\noverfamiliarity\noverfamiliarly\noverfamous\noverfanciful\noverfancy\noverfar\noverfast\noverfastidious\noverfastidiously\noverfastidiousness\noverfasting\noverfat\noverfatigue\noverfatten\noverfavor\noverfavorable\noverfavorably\noverfear\noverfearful\noverfearfully\noverfearfulness\noverfeast\noverfeatured\noverfed\noverfee\noverfeed\noverfeel\noverfellowlike\noverfellowly\noverfelon\noverfeminine\noverfeminize\noverfertile\noverfertility\noverfestoon\noverfew\noverfierce\noverfierceness\noverfile\noverfill\noverfilm\noverfine\noverfinished\noverfish\noverfit\noverfix\noverflatten\noverfleece\noverfleshed\noverflexion\noverfling\noverfloat\noverflog\noverflood\noverflorid\noverfloridness\noverflourish\noverflow\noverflowable\noverflower\noverflowing\noverflowingly\noverflowingness\noverflown\noverfluency\noverfluent\noverfluently\noverflush\noverflutter\noverfly\noverfold\noverfond\noverfondle\noverfondly\noverfondness\noverfoolish\noverfoolishly\noverfoolishness\noverfoot\noverforce\noverforged\noverformed\noverforward\noverforwardly\noverforwardness\noverfought\noverfoul\noverfoully\noverfrail\noverfrailty\noverfranchised\noverfrank\noverfrankly\noverfrankness\noverfraught\noverfree\noverfreedom\noverfreely\noverfreight\noverfrequency\noverfrequent\noverfrequently\noverfret\noverfrieze\noverfrighted\noverfrighten\noverfroth\noverfrown\noverfrozen\noverfruited\noverfruitful\noverfull\noverfullness\noverfunctioning\noverfurnish\novergaiter\novergalled\novergamble\novergang\novergarment\novergarrison\novergaze\novergeneral\novergeneralize\novergenerally\novergenerosity\novergenerous\novergenerously\novergenial\novergeniality\novergentle\novergently\noverget\novergifted\novergild\novergilted\novergird\novergirded\novergirdle\noverglad\novergladly\noverglance\noverglass\noverglaze\noverglide\noverglint\novergloom\novergloominess\novergloomy\noverglorious\novergloss\noverglut\novergo\novergoad\novergod\novergodliness\novergodly\novergood\novergorge\novergovern\novergovernment\novergown\novergrace\novergracious\novergrade\novergrain\novergrainer\novergrasping\novergrateful\novergratefully\novergratification\novergratify\novergratitude\novergraze\novergreasiness\novergreasy\novergreat\novergreatly\novergreatness\novergreed\novergreedily\novergreediness\novergreedy\novergrieve\novergrievous\novergrind\novergross\novergrossly\novergrossness\noverground\novergrow\novergrown\novergrowth\noverguilty\novergun\noverhair\noverhalf\noverhand\noverhanded\noverhandicap\noverhandle\noverhang\noverhappy\noverharass\noverhard\noverharden\noverhardness\noverhardy\noverharsh\noverharshly\noverharshness\noverhaste\noverhasten\noverhastily\noverhastiness\noverhasty\noverhate\noverhatted\noverhaughty\noverhaul\noverhauler\noverhead\noverheadiness\noverheadman\noverheady\noverheap\noverhear\noverhearer\noverheartily\noverhearty\noverheat\noverheatedly\noverheave\noverheaviness\noverheavy\noverheight\noverheighten\noverheinous\noverheld\noverhelp\noverhelpful\noverhigh\noverhighly\noverhill\noverhit\noverholiness\noverhollow\noverholy\noverhomeliness\noverhomely\noverhonest\noverhonestly\noverhonesty\noverhonor\noverhorse\noverhot\noverhotly\noverhour\noverhouse\noverhover\noverhuge\noverhuman\noverhumanity\noverhumanize\noverhung\noverhunt\noverhurl\noverhurriedly\noverhurry\noverhusk\noverhysterical\noveridealism\noveridealistic\noveridle\noveridly\noverillustrate\noverillustration\noverimaginative\noverimaginativeness\noverimitate\noverimitation\noverimitative\noverimitatively\noverimport\noverimportation\noverimpress\noverimpressible\noverinclinable\noverinclination\noverinclined\noverincrust\noverincurious\noverindividualism\noverindividualistic\noverindulge\noverindulgence\noverindulgent\noverindulgently\noverindustrialization\noverindustrialize\noverinflate\noverinflation\noverinflative\noverinfluence\noverinfluential\noverinform\noverink\noverinsist\noverinsistence\noverinsistent\noverinsistently\noverinsolence\noverinsolent\noverinsolently\noverinstruct\noverinstruction\noverinsurance\noverinsure\noverintellectual\noverintellectuality\noverintense\noverintensely\noverintensification\noverintensity\noverinterest\noverinterested\noverinterestedness\noverinventoried\noverinvest\noverinvestment\noveriodize\noverirrigate\noverirrigation\noverissue\noveritching\noverjacket\noverjade\noverjaded\noverjawed\noverjealous\noverjealously\noverjealousness\noverjob\noverjocular\noverjoy\noverjoyful\noverjoyfully\noverjoyous\noverjudge\noverjudging\noverjudgment\noverjudicious\noverjump\noverjust\noverjutting\noverkeen\noverkeenness\noverkeep\noverkick\noverkind\noverkindly\noverkindness\noverking\noverknavery\noverknee\noverknow\noverknowing\noverlabor\noverlace\noverlactation\noverlade\noverlaid\noverlain\noverland\nOverlander\noverlander\noverlanguaged\noverlap\noverlard\noverlarge\noverlargely\noverlargeness\noverlascivious\noverlast\noverlate\noverlaudation\noverlaudatory\noverlaugh\noverlaunch\noverlave\noverlavish\noverlavishly\noverlax\noverlaxative\noverlaxly\noverlaxness\noverlay\noverlayer\noverlead\noverleaf\noverlean\noverleap\noverlearn\noverlearned\noverlearnedly\noverlearnedness\noverleather\noverleave\noverleaven\noverleer\noverleg\noverlegislation\noverleisured\noverlength\noverlettered\noverlewd\noverlewdly\noverlewdness\noverliberal\noverliberality\noverliberally\noverlicentious\noverlick\noverlie\noverlier\noverlift\noverlight\noverlighted\noverlightheaded\noverlightly\noverlightsome\noverliking\noverline\noverling\noverlinger\noverlinked\noverlip\noverlipping\noverlisted\noverlisten\noverliterary\noverlittle\noverlive\noverliveliness\noverlively\noverliver\noverload\noverloath\noverlock\noverlocker\noverlofty\noverlogical\noverlogically\noverlong\noverlook\noverlooker\noverloose\noverlord\noverlordship\noverloud\noverloup\noverlove\noverlover\noverlow\noverlowness\noverloyal\noverloyally\noverloyalty\noverlubricatio\noverluscious\noverlush\noverlustiness\noverlusty\noverluxuriance\noverluxuriant\noverluxurious\noverly\noverlying\novermagnify\novermagnitude\novermajority\novermalapert\noverman\novermantel\novermantle\novermany\novermarch\novermark\novermarking\novermarl\novermask\novermast\novermaster\novermasterful\novermasterfully\novermasterfulness\novermastering\novermasteringly\novermatch\novermatter\novermature\novermaturity\novermean\novermeanly\novermeanness\novermeasure\novermeddle\novermeek\novermeekly\novermeekness\novermellow\novermellowness\novermelodied\novermelt\novermerciful\novermercifulness\novermerit\novermerrily\novermerry\novermettled\novermickle\novermighty\novermild\novermill\noverminute\noverminutely\noverminuteness\novermix\novermoccasin\novermodest\novermodestly\novermodesty\novermodulation\novermoist\novermoisten\novermoisture\novermortgage\novermoss\novermost\novermotor\novermount\novermounts\novermourn\novermournful\novermournfully\novermuch\novermuchness\novermultiplication\novermultiply\novermultitude\novername\novernarrow\novernarrowly\novernationalization\novernear\noverneat\noverneatness\noverneglect\novernegligence\novernegligent\novernervous\novernervously\novernervousness\novernet\novernew\novernice\novernicely\noverniceness\novernicety\novernigh\novernight\novernimble\novernipping\novernoise\novernotable\novernourish\novernoveled\novernumber\novernumerous\novernumerousness\novernurse\noverobedience\noverobedient\noverobediently\noverobese\noverobjectify\noveroblige\noverobsequious\noverobsequiously\noverobsequiousness\noveroffend\noveroffensive\noverofficered\noverofficious\noverorder\noverornamented\noverpained\noverpainful\noverpainfully\noverpainfulness\noverpaint\noverpamper\noverpart\noverparted\noverpartial\noverpartiality\noverpartially\noverparticular\noverparticularly\noverpass\noverpassionate\noverpassionately\noverpassionateness\noverpast\noverpatient\noverpatriotic\noverpay\noverpayment\noverpeer\noverpending\noverpensive\noverpensiveness\noverpeople\noverpepper\noverperemptory\noverpersuade\noverpersuasion\noverpert\noverpessimism\noverpessimistic\noverpet\noverphysic\noverpick\noverpicture\noverpinching\noverpitch\noverpitched\noverpiteous\noverplace\noverplaced\noverplacement\noverplain\noverplant\noverplausible\noverplay\noverplease\noverplenitude\noverplenteous\noverplenteously\noverplentiful\noverplenty\noverplot\noverplow\noverplumb\noverplume\noverplump\noverplumpness\noverplus\noverply\noverpointed\noverpoise\noverpole\noverpolemical\noverpolish\noverpolitic\noverponderous\noverpopular\noverpopularity\noverpopularly\noverpopulate\noverpopulation\noverpopulous\noverpopulousness\noverpositive\noverpossess\noverpot\noverpotent\noverpotential\noverpour\noverpower\noverpowerful\noverpowering\noverpoweringly\noverpoweringness\noverpraise\noverpray\noverpreach\noverprecise\noverpreciseness\noverpreface\noverpregnant\noverpreoccupation\noverpreoccupy\noverpress\noverpressure\noverpresumption\noverpresumptuous\noverprice\noverprick\noverprint\noverprize\noverprizer\noverprocrastination\noverproduce\noverproduction\noverproductive\noverproficient\noverprolific\noverprolix\noverprominence\noverprominent\noverprominently\noverpromise\noverprompt\noverpromptly\noverpromptness\noverprone\noverproneness\noverpronounced\noverproof\noverproportion\noverproportionate\noverproportionated\noverproportionately\noverproportioned\noverprosperity\noverprosperous\noverprotect\noverprotract\noverprotraction\noverproud\noverproudly\noverprove\noverprovender\noverprovide\noverprovident\noverprovidently\noverprovision\noverprovocation\noverprovoke\noverprune\noverpublic\noverpublicity\noverpuff\noverpuissant\noverpunish\noverpunishment\noverpurchase\noverquantity\noverquarter\noverquell\noverquick\noverquickly\noverquiet\noverquietly\noverquietness\noverrace\noverrack\noverrake\noverrange\noverrank\noverrankness\noverrapture\noverrapturize\noverrash\noverrashly\noverrashness\noverrate\noverrational\noverrationalize\noverravish\noverreach\noverreacher\noverreaching\noverreachingly\noverreachingness\noverread\noverreader\noverreadily\noverreadiness\noverready\noverrealism\noverrealistic\noverreckon\noverrecord\noverrefine\noverrefined\noverrefinement\noverreflection\noverreflective\noverregister\noverregistration\noverregular\noverregularity\noverregularly\noverregulate\noverregulation\noverrelax\noverreliance\noverreliant\noverreligion\noverreligious\noverremiss\noverremissly\noverremissness\noverrennet\noverrent\noverreplete\noverrepletion\noverrepresent\noverrepresentation\noverrepresentative\noverreserved\noverresolute\noverresolutely\noverrestore\noverrestrain\noverretention\noverreward\noverrich\noverriches\noverrichness\noverride\noverrife\noverrigged\noverright\noverrighteous\noverrighteously\noverrighteousness\noverrigid\noverrigidity\noverrigidly\noverrigorous\noverrigorously\noverrim\noverriot\noverripe\noverripely\noverripen\noverripeness\noverrise\noverroast\noverroll\noverroof\noverrooted\noverrough\noverroughly\noverroughness\noverroyal\noverrude\noverrudely\noverrudeness\noverruff\noverrule\noverruler\noverruling\noverrulingly\noverrun\noverrunner\noverrunning\noverrunningly\noverrush\noverrusset\noverrust\noversad\noversadly\noversadness\noversaid\noversail\noversale\noversaliva\noversalt\noversalty\noversand\noversanded\noversanguine\noversanguinely\noversapless\noversated\noversatisfy\noversaturate\noversaturation\noversauce\noversauciness\noversaucy\noversave\noverscare\noverscatter\noverscented\noversceptical\noverscepticism\noverscore\noverscour\noverscratch\noverscrawl\noverscream\noverscribble\noverscrub\noverscruple\noverscrupulosity\noverscrupulous\noverscrupulously\noverscrupulousness\noverscurf\noverscutched\noversea\noverseal\noverseam\noverseamer\noversearch\noverseas\noverseason\noverseasoned\noverseated\noversecure\noversecurely\noversecurity\noversee\noverseed\noverseen\noverseer\noverseerism\noverseership\noverseethe\noversell\noversend\noversensible\noversensibly\noversensitive\noversensitively\noversensitiveness\noversententious\noversentimental\noversentimentalism\noversentimentalize\noversentimentally\noverserious\noverseriously\noverseriousness\noverservice\noverservile\noverservility\noverset\noversetter\noversettle\noversettled\noversevere\noverseverely\noverseverity\noversew\novershade\novershadow\novershadower\novershadowing\novershadowingly\novershadowment\novershake\noversharp\noversharpness\novershave\noversheet\novershelving\novershepherd\novershine\novershirt\novershoe\novershoot\novershort\novershorten\novershortly\novershot\novershoulder\novershowered\novershrink\novershroud\noversick\noverside\noversight\noversilence\noversilent\noversilver\noversimple\noversimplicity\noversimplification\noversimplify\noversimply\noversize\noversized\noverskim\noverskip\noverskipper\noverskirt\noverslack\noverslander\noverslaugh\noverslavish\noverslavishly\noversleep\noversleeve\noverslide\noverslight\noverslip\noverslope\noverslow\noverslowly\noverslowness\noverslur\noversmall\noversman\noversmite\noversmitten\noversmoke\noversmooth\noversmoothly\noversmoothness\noversnow\noversoak\noversoar\noversock\noversoft\noversoftly\noversoftness\noversold\noversolemn\noversolemnity\noversolemnly\noversolicitous\noversolicitously\noversolicitousness\noversoon\noversoothing\noversophisticated\noversophistication\noversorrow\noversorrowed\noversot\noversoul\noversound\noversour\noversourly\noversourness\noversow\noverspacious\noverspaciousness\noverspan\noverspangled\noversparing\noversparingly\noversparingness\noversparred\noverspatter\noverspeak\noverspecialization\noverspecialize\noverspeculate\noverspeculation\noverspeculative\noverspeech\noverspeed\noverspeedily\noverspeedy\noverspend\noverspill\noverspin\noversplash\noverspread\noverspring\noversprinkle\noversprung\noverspun\noversqueak\noversqueamish\noversqueamishness\noverstaff\noverstaid\noverstain\noverstale\noverstalled\noverstand\noverstaring\noverstate\noverstately\noverstatement\noverstay\noverstayal\noversteadfast\noversteadfastness\noversteady\noverstep\noverstiff\noverstiffness\noverstifle\noverstimulate\noverstimulation\noverstimulative\noverstir\noverstitch\noverstock\noverstoop\noverstoping\noverstore\noverstory\noverstout\noverstoutly\noverstowage\noverstowed\noverstrain\noverstrait\noverstraiten\noverstraitly\noverstraitness\noverstream\noverstrength\noverstress\noverstretch\noverstrew\noverstrict\noverstrictly\noverstrictness\noverstride\noverstrident\noverstridently\noverstrike\noverstring\noverstriving\noverstrong\noverstrongly\noverstrung\noverstud\noverstudied\noverstudious\noverstudiously\noverstudiousness\noverstudy\noverstuff\noversublime\noversubscribe\noversubscriber\noversubscription\noversubtile\noversubtle\noversubtlety\noversubtly\noversufficiency\noversufficient\noversufficiently\noversuperstitious\noversupply\noversure\noversurety\noversurge\noversurviving\noversusceptibility\noversusceptible\noversuspicious\noversuspiciously\noverswarm\noverswarth\noversway\noversweated\noversweep\noversweet\noversweeten\noversweetly\noversweetness\noverswell\noverswift\noverswim\noverswimmer\noverswing\noverswinging\noverswirling\noversystematic\noversystematically\noversystematize\novert\novertakable\novertake\novertaker\novertalk\novertalkative\novertalkativeness\novertalker\novertame\novertamely\novertameness\novertapped\novertare\novertariff\novertarry\novertart\novertask\novertax\novertaxation\noverteach\novertechnical\novertechnicality\novertedious\novertediously\noverteem\novertell\novertempt\novertenacious\novertender\novertenderly\novertenderness\novertense\novertensely\novertenseness\novertension\noverterrible\novertest\noverthick\noverthin\noverthink\noverthought\noverthoughtful\noverthriftily\noverthriftiness\noverthrifty\noverthrong\noverthrow\noverthrowable\noverthrowal\noverthrower\noverthrust\noverthwart\noverthwartly\noverthwartness\noverthwartways\noverthwartwise\novertide\novertight\novertightly\novertill\novertimbered\novertime\novertimer\novertimorous\novertimorously\novertimorousness\novertinseled\novertint\novertip\novertipple\novertire\novertiredness\novertitle\novertly\novertness\novertoe\novertoil\novertoise\novertone\novertongued\novertop\novertopple\novertorture\novertower\novertrace\novertrack\novertrade\novertrader\novertrailed\novertrain\novertrample\novertravel\novertread\novertreatment\novertrick\novertrim\novertrouble\novertrue\novertrump\novertrust\novertrustful\novertruthful\novertruthfully\novertumble\noverture\noverturn\noverturnable\noverturner\novertutor\novertwine\novertwist\novertype\noveruberous\noverunionized\noverunsuitable\noverurbanization\noverurge\noveruse\noverusual\noverusually\novervaliant\novervaluable\novervaluation\novervalue\novervariety\novervault\novervehemence\novervehement\noverveil\noverventilate\noverventilation\noverventuresome\noverventurous\noverview\novervoltage\novervote\noverwade\noverwages\noverwake\noverwalk\noverwander\noverward\noverwash\noverwasted\noverwatch\noverwatcher\noverwater\noverwave\noverway\noverwealth\noverwealthy\noverweaponed\noverwear\noverweary\noverweather\noverweave\noverweb\noverween\noverweener\noverweening\noverweeningly\noverweeningness\noverweep\noverweigh\noverweight\noverweightage\noverwell\noverwelt\noverwet\noverwetness\noverwheel\noverwhelm\noverwhelmer\noverwhelming\noverwhelmingly\noverwhelmingness\noverwhipped\noverwhirl\noverwhisper\noverwide\noverwild\noverwilily\noverwilling\noverwillingly\noverwily\noverwin\noverwind\noverwing\noverwinter\noverwiped\noverwisdom\noverwise\noverwisely\noverwithered\noverwoman\noverwomanize\noverwomanly\noverwood\noverwooded\noverwoody\noverword\noverwork\noverworld\noverworn\noverworry\noverworship\noverwound\noverwove\noverwoven\noverwrap\noverwrest\noverwrested\noverwrestle\noverwrite\noverwroth\noverwrought\noveryear\noveryoung\noveryouthful\noverzeal\noverzealous\noverzealously\noverzealousness\novest\novey\nOvibos\nOvibovinae\novibovine\novicapsular\novicapsule\novicell\novicellular\novicidal\novicide\novicular\noviculated\noviculum\novicyst\novicystic\nOvidae\nOvidian\noviducal\noviduct\noviductal\noviferous\novification\noviform\novigenesis\novigenetic\novigenic\novigenous\novigerm\novigerous\novile\nOvillus\nOvinae\novine\novinia\novipara\noviparal\noviparity\noviparous\noviparously\noviparousness\noviposit\noviposition\novipositor\nOvis\novisac\noviscapt\novism\novispermary\novispermiduct\novist\novistic\novivorous\novocyte\novoelliptic\novoflavin\novogenesis\novogenetic\novogenous\novogonium\novoid\novoidal\novolemma\novolo\novological\novologist\novology\novolytic\novomucoid\novoplasm\novoplasmic\novopyriform\novorhomboid\novorhomboidal\novotesticular\novotestis\novovitellin\nOvovivipara\novoviviparism\novoviviparity\novoviviparous\novoviviparously\novoviviparousness\nOvula\novular\novularian\novulary\novulate\novulation\novule\novuliferous\novuligerous\novulist\novum\now\nowd\nowe\nowelty\nOwen\nOwenia\nOwenian\nOwenism\nOwenist\nOwenite\nOwenize\nower\nowerance\nowerby\nowercome\nowergang\nowerloup\nowertaen\nowerword\nowght\nowing\nowk\nowl\nowldom\nowler\nowlery\nowlet\nOwlglass\nowlhead\nowling\nowlish\nowlishly\nowlishness\nowlism\nowllight\nowllike\nOwlspiegle\nowly\nown\nowner\nownerless\nownership\nownhood\nownness\nownself\nownwayish\nowregane\nowrehip\nowrelay\nowse\nowsen\nowser\nowtchah\nowyheeite\nox\noxacid\noxadiazole\noxalacetic\noxalaldehyde\noxalamid\noxalamide\noxalan\noxalate\noxaldehyde\noxalemia\noxalic\nOxalidaceae\noxalidaceous\nOxalis\noxalite\noxalodiacetic\noxalonitril\noxalonitrile\noxaluramid\noxaluramide\noxalurate\noxaluria\noxaluric\noxalyl\noxalylurea\noxamate\noxamethane\noxamic\noxamid\noxamide\noxamidine\noxammite\noxan\noxanate\noxane\noxanic\noxanilate\noxanilic\noxanilide\noxazine\noxazole\noxbane\noxberry\noxbird\noxbiter\noxblood\noxbow\noxboy\noxbrake\noxcart\noxcheek\noxdiacetic\noxdiazole\noxea\noxeate\noxen\noxeote\noxer\noxetone\noxeye\noxfly\nOxford\nOxfordian\nOxfordism\nOxfordist\noxgang\noxgoad\noxharrow\noxhead\noxheal\noxheart\noxhide\noxhoft\noxhorn\noxhouse\noxhuvud\noxidability\noxidable\noxidant\noxidase\noxidate\noxidation\noxidational\noxidative\noxidator\noxide\noxidic\noxidimetric\noxidimetry\noxidizability\noxidizable\noxidization\noxidize\noxidizement\noxidizer\noxidizing\noxidoreductase\noxidoreduction\noxidulated\noximate\noximation\noxime\noxland\noxlike\noxlip\noxman\noxmanship\noxoindoline\nOxonian\noxonic\noxonium\nOxonolatry\noxozone\noxozonide\noxpecker\noxphony\noxreim\noxshoe\noxskin\noxtail\noxter\noxtongue\noxwort\noxy\noxyacanthine\noxyacanthous\noxyacetylene\noxyacid\nOxyaena\nOxyaenidae\noxyaldehyde\noxyamine\noxyanthracene\noxyanthraquinone\noxyaphia\noxyaster\noxybaphon\nOxybaphus\noxybenzaldehyde\noxybenzene\noxybenzoic\noxybenzyl\noxyberberine\noxyblepsia\noxybromide\noxybutyria\noxybutyric\noxycalcium\noxycalorimeter\noxycamphor\noxycaproic\noxycarbonate\noxycellulose\noxycephalic\noxycephalism\noxycephalous\noxycephaly\noxychlorate\noxychloric\noxychloride\noxycholesterol\noxychromatic\noxychromatin\noxychromatinic\noxycinnamic\noxycobaltammine\nOxycoccus\noxycopaivic\noxycoumarin\noxycrate\noxycyanide\noxydactyl\nOxydendrum\noxydiact\noxyesthesia\noxyether\noxyethyl\noxyfatty\noxyfluoride\noxygas\noxygen\noxygenant\noxygenate\noxygenation\noxygenator\noxygenerator\noxygenic\noxygenicity\noxygenium\noxygenizable\noxygenize\noxygenizement\noxygenizer\noxygenous\noxygeusia\noxygnathous\noxyhalide\noxyhaloid\noxyhematin\noxyhemocyanin\noxyhemoglobin\noxyhexactine\noxyhexaster\noxyhydrate\noxyhydric\noxyhydrogen\noxyiodide\noxyketone\noxyl\nOxylabracidae\nOxylabrax\noxyluciferin\noxyluminescence\noxyluminescent\noxymandelic\noxymel\noxymethylene\noxymoron\noxymuriate\noxymuriatic\noxynaphthoic\noxynaphtoquinone\noxynarcotine\noxyneurin\noxyneurine\noxynitrate\noxyntic\noxyophitic\noxyopia\nOxyopidae\noxyosphresia\noxypetalous\noxyphenol\noxyphenyl\noxyphile\noxyphilic\noxyphilous\noxyphonia\noxyphosphate\noxyphthalic\noxyphyllous\noxyphyte\noxypicric\nOxypolis\noxyproline\noxypropionic\noxypurine\noxypycnos\noxyquinaseptol\noxyquinoline\noxyquinone\noxyrhine\noxyrhinous\noxyrhynch\noxyrhynchous\noxyrhynchus\nOxyrrhyncha\noxyrrhynchid\noxysalicylic\noxysalt\noxystearic\nOxystomata\noxystomatous\noxystome\noxysulphate\noxysulphide\noxyterpene\noxytocia\noxytocic\noxytocin\noxytocous\noxytoluene\noxytoluic\noxytone\noxytonesis\noxytonical\noxytonize\nOxytricha\nOxytropis\noxytylotate\noxytylote\noxyuriasis\noxyuricide\nOxyuridae\noxyurous\noxywelding\nOyana\noyapock\noyer\noyster\noysterage\noysterbird\noystered\noysterer\noysterfish\noystergreen\noysterhood\noysterhouse\noystering\noysterish\noysterishness\noysterlike\noysterling\noysterman\noysterous\noysterroot\noysterseed\noystershell\noysterwife\noysterwoman\nOzan\nOzark\nozarkite\nozena\nOzias\nozobrome\nozocerite\nozokerit\nozokerite\nozonate\nozonation\nozonator\nozone\nozoned\nozonic\nozonide\nozoniferous\nozonification\nozonify\nOzonium\nozonization\nozonize\nozonizer\nozonometer\nozonometry\nozonoscope\nozonoscopic\nozonous\nozophen\nozophene\nozostomia\nozotype\nP\np\npa\npaal\npaar\npaauw\nPaba\npabble\nPablo\npablo\npabouch\npabular\npabulary\npabulation\npabulatory\npabulous\npabulum\npac\npaca\npacable\nPacaguara\npacate\npacation\npacative\npacay\npacaya\nPaccanarist\nPacchionian\nPace\npace\npaceboard\npaced\npacemaker\npacemaking\npacer\npachak\npachisi\npachnolite\npachometer\nPachomian\nPachons\nPacht\npachyacria\npachyaemia\npachyblepharon\npachycarpous\npachycephal\npachycephalia\npachycephalic\npachycephalous\npachycephaly\npachychilia\npachycholia\npachychymia\npachycladous\npachydactyl\npachydactylous\npachydactyly\npachyderm\npachyderma\npachydermal\nPachydermata\npachydermatocele\npachydermatoid\npachydermatosis\npachydermatous\npachydermatously\npachydermia\npachydermial\npachydermic\npachydermoid\npachydermous\npachyemia\npachyglossal\npachyglossate\npachyglossia\npachyglossous\npachyhaemia\npachyhaemic\npachyhaemous\npachyhematous\npachyhemia\npachyhymenia\npachyhymenic\nPachylophus\npachylosis\nPachyma\npachymenia\npachymenic\npachymeningitic\npachymeningitis\npachymeninx\npachymeter\npachynathous\npachynema\npachynsis\npachyntic\npachyodont\npachyotia\npachyotous\npachyperitonitis\npachyphyllous\npachypleuritic\npachypod\npachypodous\npachypterous\nPachyrhizus\npachyrhynchous\npachysalpingitis\nPachysandra\npachysaurian\npachysomia\npachysomous\npachystichous\nPachystima\npachytene\npachytrichous\nPachytylus\npachyvaginitis\npacifiable\npacific\npacifical\npacifically\npacificate\npacification\npacificator\npacificatory\npacificism\npacificist\npacificity\npacifier\npacifism\npacifist\npacifistic\npacifistically\npacify\npacifyingly\nPacinian\npack\npackable\npackage\npackbuilder\npackcloth\npacker\npackery\npacket\npackhouse\npackless\npackly\npackmaker\npackmaking\npackman\npackmanship\npackness\npacksack\npacksaddle\npackstaff\npackthread\npackwall\npackwaller\npackware\npackway\npaco\nPacolet\npacouryuva\npact\npaction\npactional\npactionally\nPactolian\nPactolus\npad\npadcloth\nPadda\npadder\npadding\npaddle\npaddlecock\npaddled\npaddlefish\npaddlelike\npaddler\npaddlewood\npaddling\npaddock\npaddockride\npaddockstone\npaddockstool\nPaddy\npaddy\npaddybird\nPaddyism\npaddymelon\nPaddywack\npaddywatch\nPaddywhack\npaddywhack\npadella\npadfoot\npadge\nPadina\npadishah\npadle\npadlike\npadlock\npadmasana\npadmelon\npadnag\npadpiece\nPadraic\nPadraig\npadre\npadroadist\npadroado\npadronism\npadstone\npadtree\nPaduan\nPaduanism\npaduasoy\nPadus\npaean\npaeanism\npaeanize\npaedarchy\npaedatrophia\npaedatrophy\npaediatry\npaedogenesis\npaedogenetic\npaedometer\npaedometrical\npaedomorphic\npaedomorphism\npaedonymic\npaedonymy\npaedopsychologist\npaedotribe\npaedotrophic\npaedotrophist\npaedotrophy\npaegel\npaegle\nPaelignian\npaenula\npaeon\nPaeonia\nPaeoniaceae\nPaeonian\npaeonic\npaetrick\npaga\npagan\nPaganalia\nPaganalian\npagandom\npaganic\npaganical\npaganically\npaganish\npaganishly\npaganism\npaganist\npaganistic\npaganity\npaganization\npaganize\npaganizer\npaganly\npaganry\npagatpat\nPage\npage\npageant\npageanted\npageanteer\npageantic\npageantry\npagedom\npageful\npagehood\npageless\npagelike\npager\npageship\npagina\npaginal\npaginary\npaginate\npagination\npagiopod\nPagiopoda\npagoda\npagodalike\npagodite\npagoscope\npagrus\nPaguma\npagurian\npagurid\nPaguridae\nPaguridea\npagurine\nPagurinea\npaguroid\nPaguroidea\nPagurus\npagus\npah\npaha\nPahareen\nPahari\nPaharia\npahi\nPahlavi\npahlavi\npahmi\npaho\npahoehoe\nPahouin\npahutan\nPaiconeca\npaideutic\npaideutics\npaidological\npaidologist\npaidology\npaidonosology\npaigle\npaik\npail\npailful\npaillasse\npaillette\npailletted\npailou\npaimaneh\npain\npained\npainful\npainfully\npainfulness\npaining\npainingly\npainkiller\npainless\npainlessly\npainlessness\npainproof\npainstaker\npainstaking\npainstakingly\npainstakingness\npainsworthy\npaint\npaintability\npaintable\npaintableness\npaintably\npaintbox\npaintbrush\npainted\npaintedness\npainter\npainterish\npainterlike\npainterly\npaintership\npaintiness\npainting\npaintingness\npaintless\npaintpot\npaintproof\npaintress\npaintrix\npaintroot\npainty\npaip\npair\npaired\npairedness\npairer\npairment\npairwise\npais\npaisa\npaisanite\nPaisley\nPaiute\npaiwari\npajahuello\npajama\npajamaed\npajock\nPajonism\nPakawa\nPakawan\npakchoi\npakeha\nPakhpuluk\nPakhtun\nPakistani\npaktong\npal\nPala\npalace\npalaced\npalacelike\npalaceous\npalaceward\npalacewards\npaladin\npalaeanthropic\nPalaearctic\nPalaeechini\npalaeechinoid\nPalaeechinoidea\npalaeechinoidean\npalaeentomology\npalaeethnologic\npalaeethnological\npalaeethnologist\npalaeethnology\nPalaeeudyptes\nPalaeic\npalaeichthyan\nPalaeichthyes\npalaeichthyic\nPalaemon\npalaemonid\nPalaemonidae\npalaemonoid\npalaeoalchemical\npalaeoanthropic\npalaeoanthropography\npalaeoanthropology\nPalaeoanthropus\npalaeoatavism\npalaeoatavistic\npalaeobiogeography\npalaeobiologist\npalaeobiology\npalaeobotanic\npalaeobotanical\npalaeobotanically\npalaeobotanist\npalaeobotany\nPalaeocarida\npalaeoceanography\nPalaeocene\npalaeochorology\npalaeoclimatic\npalaeoclimatology\nPalaeoconcha\npalaeocosmic\npalaeocosmology\nPalaeocrinoidea\npalaeocrystal\npalaeocrystallic\npalaeocrystalline\npalaeocrystic\npalaeocyclic\npalaeodendrologic\npalaeodendrological\npalaeodendrologically\npalaeodendrologist\npalaeodendrology\nPalaeodictyoptera\npalaeodictyopteran\npalaeodictyopteron\npalaeodictyopterous\npalaeoencephalon\npalaeoeremology\npalaeoethnic\npalaeoethnologic\npalaeoethnological\npalaeoethnologist\npalaeoethnology\npalaeofauna\nPalaeogaea\nPalaeogaean\npalaeogene\npalaeogenesis\npalaeogenetic\npalaeogeographic\npalaeogeography\npalaeoglaciology\npalaeoglyph\nPalaeognathae\npalaeognathic\npalaeognathous\npalaeograph\npalaeographer\npalaeographic\npalaeographical\npalaeographically\npalaeographist\npalaeography\npalaeoherpetologist\npalaeoherpetology\npalaeohistology\npalaeohydrography\npalaeolatry\npalaeolimnology\npalaeolith\npalaeolithic\npalaeolithical\npalaeolithist\npalaeolithoid\npalaeolithy\npalaeological\npalaeologist\npalaeology\nPalaeomastodon\npalaeometallic\npalaeometeorological\npalaeometeorology\nPalaeonemertea\npalaeonemertean\npalaeonemertine\nPalaeonemertinea\nPalaeonemertini\npalaeoniscid\nPalaeoniscidae\npalaeoniscoid\nPalaeoniscum\nPalaeoniscus\npalaeontographic\npalaeontographical\npalaeontography\npalaeopathology\npalaeopedology\npalaeophile\npalaeophilist\nPalaeophis\npalaeophysiography\npalaeophysiology\npalaeophytic\npalaeophytological\npalaeophytologist\npalaeophytology\npalaeoplain\npalaeopotamology\npalaeopsychic\npalaeopsychological\npalaeopsychology\npalaeoptychology\nPalaeornis\nPalaeornithinae\npalaeornithine\npalaeornithological\npalaeornithology\npalaeosaur\nPalaeosaurus\npalaeosophy\nPalaeospondylus\nPalaeostraca\npalaeostracan\npalaeostriatal\npalaeostriatum\npalaeostylic\npalaeostyly\npalaeotechnic\npalaeothalamus\nPalaeothentes\nPalaeothentidae\npalaeothere\npalaeotherian\nPalaeotheriidae\npalaeotheriodont\npalaeotherioid\nPalaeotherium\npalaeotheroid\nPalaeotropical\npalaeotype\npalaeotypic\npalaeotypical\npalaeotypically\npalaeotypographical\npalaeotypographist\npalaeotypography\npalaeovolcanic\nPalaeozoic\npalaeozoological\npalaeozoologist\npalaeozoology\npalaestra\npalaestral\npalaestrian\npalaestric\npalaestrics\npalaetiological\npalaetiologist\npalaetiology\npalafitte\npalagonite\npalagonitic\nPalaic\nPalaihnihan\npalaiotype\npalaite\npalama\npalamate\npalame\nPalamedea\npalamedean\nPalamedeidae\nPalamite\nPalamitism\npalampore\npalander\npalanka\npalankeen\npalanquin\npalapalai\nPalapteryx\nPalaquium\npalar\npalas\npalatability\npalatable\npalatableness\npalatably\npalatal\npalatalism\npalatality\npalatalization\npalatalize\npalate\npalated\npalateful\npalatefulness\npalateless\npalatelike\npalatial\npalatially\npalatialness\npalatian\npalatic\npalatinal\npalatinate\npalatine\npalatineship\nPalatinian\npalatinite\npalation\npalatist\npalatitis\npalative\npalatization\npalatize\npalatoalveolar\npalatodental\npalatoglossal\npalatoglossus\npalatognathous\npalatogram\npalatograph\npalatography\npalatomaxillary\npalatometer\npalatonasal\npalatopharyngeal\npalatopharyngeus\npalatoplasty\npalatoplegia\npalatopterygoid\npalatoquadrate\npalatorrhaphy\npalatoschisis\nPalatua\nPalau\nPalaung\npalaver\npalaverer\npalaverist\npalaverment\npalaverous\npalay\npalazzi\npalberry\npalch\npale\npalea\npaleaceous\npaleanthropic\nPalearctic\npaleate\npalebelly\npalebuck\npalechinoid\npaled\npaledness\npaleencephalon\npaleentomology\npaleethnographer\npaleethnologic\npaleethnological\npaleethnologist\npaleethnology\npaleface\npalehearted\npaleichthyologic\npaleichthyologist\npaleichthyology\npaleiform\npalely\nPaleman\npaleness\nPalenque\npaleoalchemical\npaleoandesite\npaleoanthropic\npaleoanthropography\npaleoanthropological\npaleoanthropologist\npaleoanthropology\nPaleoanthropus\npaleoatavism\npaleoatavistic\npaleobiogeography\npaleobiologist\npaleobiology\npaleobotanic\npaleobotanical\npaleobotanically\npaleobotanist\npaleobotany\npaleoceanography\nPaleocene\npaleochorology\npaleoclimatic\npaleoclimatologist\npaleoclimatology\nPaleoconcha\npaleocosmic\npaleocosmology\npaleocrystal\npaleocrystallic\npaleocrystalline\npaleocrystic\npaleocyclic\npaleodendrologic\npaleodendrological\npaleodendrologically\npaleodendrologist\npaleodendrology\npaleoecologist\npaleoecology\npaleoencephalon\npaleoeremology\npaleoethnic\npaleoethnography\npaleoethnologic\npaleoethnological\npaleoethnologist\npaleoethnology\npaleofauna\nPaleogene\npaleogenesis\npaleogenetic\npaleogeographic\npaleogeography\npaleoglaciology\npaleoglyph\npaleograph\npaleographer\npaleographic\npaleographical\npaleographically\npaleographist\npaleography\npaleoherpetologist\npaleoherpetology\npaleohistology\npaleohydrography\npaleoichthyology\npaleokinetic\npaleola\npaleolate\npaleolatry\npaleolimnology\npaleolith\npaleolithic\npaleolithical\npaleolithist\npaleolithoid\npaleolithy\npaleological\npaleologist\npaleology\npaleomammalogy\npaleometallic\npaleometeorological\npaleometeorology\npaleontographic\npaleontographical\npaleontography\npaleontologic\npaleontological\npaleontologically\npaleontologist\npaleontology\npaleopathology\npaleopedology\npaleophysiography\npaleophysiology\npaleophytic\npaleophytological\npaleophytologist\npaleophytology\npaleopicrite\npaleoplain\npaleopotamoloy\npaleopsychic\npaleopsychological\npaleopsychology\npaleornithological\npaleornithology\npaleostriatal\npaleostriatum\npaleostylic\npaleostyly\npaleotechnic\npaleothalamus\npaleothermal\npaleothermic\nPaleotropical\npaleovolcanic\npaleoytterbium\nPaleozoic\npaleozoological\npaleozoologist\npaleozoology\npaler\nPalermitan\nPalermo\nPales\nPalesman\nPalestinian\npalestra\npalestral\npalestrian\npalestric\npalet\npaletiology\npaletot\npalette\npaletz\npalewise\npalfrey\npalfreyed\npalgat\nPali\npali\nPalicourea\npalification\npaliform\npaligorskite\npalikar\npalikarism\npalikinesia\npalila\npalilalia\nPalilia\nPalilicium\npalillogia\npalilogetic\npalilogy\npalimbacchic\npalimbacchius\npalimpsest\npalimpsestic\npalinal\npalindrome\npalindromic\npalindromical\npalindromically\npalindromist\npaling\npalingenesia\npalingenesian\npalingenesis\npalingenesist\npalingenesy\npalingenetic\npalingenetically\npalingenic\npalingenist\npalingeny\npalinode\npalinodial\npalinodic\npalinodist\npalinody\npalinurid\nPalinuridae\npalinuroid\nPalinurus\npaliphrasia\npalirrhea\npalisade\npalisading\npalisado\npalisander\npalisfy\npalish\npalistrophia\nPaliurus\npalkee\npall\npalla\npalladammine\nPalladia\npalladia\nPalladian\nPalladianism\npalladic\npalladiferous\npalladinize\npalladion\npalladious\nPalladium\npalladium\npalladiumize\npalladize\npalladodiammine\npalladosammine\npalladous\npallae\npallah\npallall\npallanesthesia\nPallas\npallasite\npallbearer\npalled\npallescence\npallescent\npallesthesia\npallet\npalleting\npalletize\npallette\npallholder\npalli\npallial\npalliard\npalliasse\nPalliata\npalliata\npalliate\npalliation\npalliative\npalliatively\npalliator\npalliatory\npallid\npallidiflorous\npallidipalpate\npalliditarsate\npallidity\npallidiventrate\npallidly\npallidness\npalliness\nPalliobranchiata\npalliobranchiate\npalliocardiac\npallioessexite\npallion\npalliopedal\npalliostratus\npallium\nPalliyan\npallograph\npallographic\npallometric\npallone\npallor\nPallu\nPalluites\npallwise\npally\npalm\npalma\nPalmaceae\npalmaceous\npalmad\nPalmae\npalmanesthesia\npalmar\npalmarian\npalmary\npalmate\npalmated\npalmately\npalmatifid\npalmatiform\npalmatilobate\npalmatilobed\npalmation\npalmatiparted\npalmatipartite\npalmatisect\npalmatisected\npalmature\npalmcrist\npalmed\nPalmella\nPalmellaceae\npalmellaceous\npalmelloid\npalmer\npalmerite\npalmery\npalmesthesia\npalmette\npalmetto\npalmetum\npalmful\npalmicolous\npalmiferous\npalmification\npalmiform\npalmigrade\npalmilobate\npalmilobated\npalmilobed\npalminervate\npalminerved\npalmiped\nPalmipedes\npalmipes\npalmist\npalmister\npalmistry\npalmitate\npalmite\npalmitic\npalmitin\npalmitinic\npalmito\npalmitoleic\npalmitone\npalmiveined\npalmivorous\npalmlike\npalmo\npalmodic\npalmoscopy\npalmospasmus\npalmula\npalmus\npalmwise\npalmwood\npalmy\npalmyra\nPalmyrene\nPalmyrenian\npalolo\npalombino\npalometa\npalomino\npalosapis\npalouser\npaloverde\npalp\npalpability\npalpable\npalpableness\npalpably\npalpacle\npalpal\npalpate\npalpation\npalpatory\npalpebra\npalpebral\npalpebrate\npalpebration\npalpebritis\npalped\npalpi\npalpicorn\nPalpicornia\npalpifer\npalpiferous\npalpiform\npalpiger\npalpigerous\npalpitant\npalpitate\npalpitatingly\npalpitation\npalpless\npalpocil\npalpon\npalpulus\npalpus\npalsgrave\npalsgravine\npalsied\npalsification\npalstave\npalster\npalsy\npalsylike\npalsywort\npalt\nPalta\npalter\npalterer\npalterly\npaltrily\npaltriness\npaltry\npaludal\npaludament\npaludamentum\npaludial\npaludian\npaludic\nPaludicella\nPaludicolae\npaludicole\npaludicoline\npaludicolous\npaludiferous\nPaludina\npaludinal\npaludine\npaludinous\npaludism\npaludose\npaludous\npaludrin\npaludrine\npalule\npalulus\nPalus\npalus\npalustral\npalustrian\npalustrine\npaly\npalynology\nPam\npam\npambanmanche\nPamela\npament\npameroon\nPamir\nPamiri\nPamirian\nPamlico\npamment\nPampanga\nPampangan\nPampango\npampas\npampean\npamper\npampered\npamperedly\npamperedness\npamperer\npamperize\npampero\npamphagous\npampharmacon\nPamphiliidae\nPamphilius\npamphlet\npamphletage\npamphletary\npamphleteer\npamphleter\npamphletful\npamphletic\npamphletical\npamphletize\npamphletwise\npamphysical\npamphysicism\npampilion\npampiniform\npampinocele\npamplegia\npampootee\npampootie\npampre\npamprodactyl\npamprodactylism\npamprodactylous\npampsychism\npampsychist\nPamunkey\nPan\npan\npanace\nPanacea\npanacea\npanacean\npanaceist\npanache\npanached\npanachure\npanada\npanade\nPanagia\npanagiarion\nPanak\nPanaka\npanama\nPanamaian\nPanaman\nPanamanian\nPanamano\nPanamic\nPanamint\nPanamist\npanapospory\npanarchic\npanarchy\npanaris\npanaritium\npanarteritis\npanarthritis\npanary\npanatela\nPanathenaea\nPanathenaean\nPanathenaic\npanatrophy\npanautomorphic\npanax\nPanayan\nPanayano\npanbabylonian\npanbabylonism\nPanboeotian\npancake\npancarditis\npanchama\npanchayat\npancheon\npanchion\npanchromatic\npanchromatism\npanchromatization\npanchromatize\npanchway\npanclastic\npanconciliatory\npancosmic\npancosmism\npancosmist\npancratian\npancratiast\npancratiastic\npancratic\npancratical\npancratically\npancration\npancratism\npancratist\npancratium\npancreas\npancreatalgia\npancreatectomize\npancreatectomy\npancreatemphraxis\npancreathelcosis\npancreatic\npancreaticoduodenal\npancreaticoduodenostomy\npancreaticogastrostomy\npancreaticosplenic\npancreatin\npancreatism\npancreatitic\npancreatitis\npancreatization\npancreatize\npancreatoduodenectomy\npancreatoenterostomy\npancreatogenic\npancreatogenous\npancreatoid\npancreatolipase\npancreatolith\npancreatomy\npancreatoncus\npancreatopathy\npancreatorrhagia\npancreatotomy\npancreectomy\npancreozymin\npancyclopedic\npand\npanda\npandal\npandan\nPandanaceae\npandanaceous\nPandanales\nPandanus\npandaram\nPandarctos\npandaric\nPandarus\npandation\nPandean\npandect\nPandectist\npandemia\npandemian\npandemic\npandemicity\npandemoniac\nPandemoniacal\nPandemonian\npandemonic\npandemonism\nPandemonium\npandemonium\nPandemos\npandemy\npandenominational\npander\npanderage\npanderer\npanderess\npanderism\npanderize\npanderly\nPanderma\npandermite\npanderous\npandership\npandestruction\npandiabolism\npandiculation\nPandion\nPandionidae\npandita\npandle\npandlewhew\nPandora\npandora\nPandorea\nPandoridae\nPandorina\nPandosto\npandour\npandowdy\npandrop\npandura\npandurate\npandurated\npanduriform\npandy\npane\npanecclesiastical\npaned\npanegoism\npanegoist\npanegyric\npanegyrical\npanegyrically\npanegyricize\npanegyricon\npanegyricum\npanegyris\npanegyrist\npanegyrize\npanegyrizer\npanegyry\npaneity\npanel\npanela\npanelation\npaneler\npaneless\npaneling\npanelist\npanellation\npanelling\npanelwise\npanelwork\npanentheism\npanesthesia\npanesthetic\npaneulogism\npanfil\npanfish\npanful\npang\nPangaea\npangamic\npangamous\npangamously\npangamy\npangane\nPangasinan\npangen\npangene\npangenesis\npangenetic\npangenetically\npangenic\npangful\npangi\nPangium\npangless\npanglessly\npanglima\nPangloss\nPanglossian\nPanglossic\npangolin\npangrammatist\nPangwe\npanhandle\npanhandler\npanharmonic\npanharmonicon\npanhead\npanheaded\nPanhellenic\nPanhellenios\nPanhellenism\nPanhellenist\nPanhellenium\npanhidrosis\npanhuman\npanhygrous\npanhyperemia\npanhysterectomy\nPani\npanic\npanical\npanically\npanicful\npanichthyophagous\npanicked\npanicky\npanicle\npanicled\npaniclike\npanicmonger\npanicmongering\npaniconograph\npaniconographic\npaniconography\nPanicularia\npaniculate\npaniculated\npaniculately\npaniculitis\nPanicum\npanidiomorphic\npanidrosis\npanification\npanimmunity\nPaninean\nPanionia\nPanionian\nPanionic\nPaniquita\nPaniquitan\npanisc\npanisca\npaniscus\npanisic\npanivorous\nPanjabi\npanjandrum\npank\npankin\npankration\npanleucopenia\npanlogical\npanlogism\npanlogistical\npanman\npanmelodicon\npanmelodion\npanmerism\npanmeristic\npanmixia\npanmixy\npanmnesia\npanmug\npanmyelophthisis\nPanna\npannade\npannage\npannam\npannationalism\npanne\npannel\npanner\npannery\npanneuritic\npanneuritis\npannicle\npannicular\npannier\npanniered\npannierman\npannikin\npanning\nPannonian\nPannonic\npannose\npannosely\npannum\npannus\npannuscorium\nPanoan\npanocha\npanoche\npanococo\npanoistic\npanomphaic\npanomphean\npanomphic\npanophobia\npanophthalmia\npanophthalmitis\npanoplied\npanoplist\npanoply\npanoptic\npanoptical\npanopticon\npanoram\npanorama\npanoramic\npanoramical\npanoramically\npanoramist\npanornithic\nPanorpa\nPanorpatae\npanorpian\npanorpid\nPanorpidae\nPanos\npanosteitis\npanostitis\npanotitis\npanotype\npanouchi\npanpathy\npanpharmacon\npanphenomenalism\npanphobia\nPanpipe\npanplegia\npanpneumatism\npanpolism\npanpsychic\npanpsychism\npanpsychist\npanpsychistic\npanscientist\npansciolism\npansciolist\npansclerosis\npansclerotic\npanse\npansexism\npansexual\npansexualism\npansexualist\npansexuality\npansexualize\npanshard\npanside\npansideman\npansied\npansinuitis\npansinusitis\npansmith\npansophic\npansophical\npansophically\npansophism\npansophist\npansophy\npanspermatism\npanspermatist\npanspermia\npanspermic\npanspermism\npanspermist\npanspermy\npansphygmograph\npanstereorama\npansy\npansylike\npant\npantachromatic\npantacosm\npantagamy\npantagogue\npantagraph\npantagraphic\npantagraphical\nPantagruel\nPantagruelian\nPantagruelic\nPantagruelically\nPantagrueline\npantagruelion\nPantagruelism\nPantagruelist\nPantagruelistic\nPantagruelistical\nPantagruelize\npantaleon\npantaletless\npantalets\npantaletted\npantalgia\npantalon\nPantalone\npantaloon\npantalooned\npantaloonery\npantaloons\npantameter\npantamorph\npantamorphia\npantamorphic\npantanemone\npantanencephalia\npantanencephalic\npantaphobia\npantarbe\npantarchy\npantas\npantascope\npantascopic\nPantastomatida\nPantastomina\npantatrophia\npantatrophy\npantatype\npantechnic\npantechnicon\npantelegraph\npantelegraphy\npanteleologism\npantelephone\npantelephonic\nPantelis\npantellerite\npanter\npanterer\nPantheian\npantheic\npantheism\npantheist\npantheistic\npantheistical\npantheistically\npanthelematism\npanthelism\npantheologist\npantheology\npantheon\npantheonic\npantheonization\npantheonize\npanther\npantheress\npantherine\npantherish\npantherlike\npantherwood\npantheum\npantie\npanties\npantile\npantiled\npantiling\npanting\npantingly\npantisocracy\npantisocrat\npantisocratic\npantisocratical\npantisocratist\npantle\npantler\npanto\npantochrome\npantochromic\npantochromism\npantochronometer\nPantocrator\npantod\nPantodon\nPantodontidae\npantoffle\npantofle\npantoganglitis\npantogelastic\npantoglossical\npantoglot\npantoglottism\npantograph\npantographer\npantographic\npantographical\npantographically\npantography\npantoiatrical\npantologic\npantological\npantologist\npantology\npantomancer\npantometer\npantometric\npantometrical\npantometry\npantomime\npantomimic\npantomimical\npantomimically\npantomimicry\npantomimish\npantomimist\npantomimus\npantomnesia\npantomnesic\npantomorph\npantomorphia\npantomorphic\npanton\npantoon\npantopelagian\npantophagic\npantophagist\npantophagous\npantophagy\npantophile\npantophobia\npantophobic\npantophobous\npantoplethora\npantopod\nPantopoda\npantopragmatic\npantopterous\npantoscope\npantoscopic\npantosophy\nPantostomata\npantostomate\npantostomatous\npantostome\npantotactic\npantothenate\npantothenic\nPantotheria\npantotherian\npantotype\npantoum\npantropic\npantropical\npantry\npantryman\npantrywoman\npants\npantun\npanty\npantywaist\npanung\npanurgic\npanurgy\npanyar\nPanzer\npanzoism\npanzootia\npanzootic\npanzooty\nPaola\npaolo\npaon\npap\npapa\npapability\npapable\npapabot\npapacy\npapagallo\nPapago\npapain\npapal\npapalism\npapalist\npapalistic\npapalization\npapalize\npapalizer\npapally\npapalty\npapane\npapaphobia\npapaphobist\npapaprelatical\npapaprelatist\npaparchical\npaparchy\npapaship\nPapaver\nPapaveraceae\npapaveraceous\nPapaverales\npapaverine\npapaverous\npapaw\npapaya\nPapayaceae\npapayaceous\npapayotin\npapboat\npape\npapelonne\npaper\npaperback\npaperbark\npaperboard\npapered\npaperer\npaperful\npaperiness\npapering\npaperlike\npapermaker\npapermaking\npapermouth\npapern\npapershell\npaperweight\npapery\npapess\npapeterie\npapey\nPaphian\nPaphiopedilum\nPapiamento\npapicolar\npapicolist\nPapilio\nPapilionaceae\npapilionaceous\nPapiliones\npapilionid\nPapilionidae\nPapilionides\nPapilioninae\npapilionine\npapilionoid\nPapilionoidea\npapilla\npapillae\npapillar\npapillary\npapillate\npapillated\npapillectomy\npapilledema\npapilliferous\npapilliform\npapillitis\npapilloadenocystoma\npapillocarcinoma\npapilloedema\npapilloma\npapillomatosis\npapillomatous\npapillon\npapilloretinitis\npapillosarcoma\npapillose\npapillosity\npapillote\npapillous\npapillulate\npapillule\nPapinachois\nPapio\npapion\npapish\npapisher\npapism\nPapist\npapist\npapistic\npapistical\npapistically\npapistlike\npapistly\npapistry\npapize\npapless\npapmeat\npapolater\npapolatrous\npapolatry\npapoose\npapooseroot\nPappea\npappescent\npappi\npappiferous\npappiform\npappose\npappox\npappus\npappy\npapreg\npaprica\npaprika\nPapuan\npapula\npapular\npapulate\npapulated\npapulation\npapule\npapuliferous\npapuloerythematous\npapulopustular\npapulopustule\npapulose\npapulosquamous\npapulous\npapulovesicular\npapyr\npapyraceous\npapyral\npapyrean\npapyri\npapyrian\npapyrin\npapyrine\npapyritious\npapyrocracy\npapyrograph\npapyrographer\npapyrographic\npapyrography\npapyrological\npapyrologist\npapyrology\npapyrophobia\npapyroplastics\npapyrotamia\npapyrotint\npapyrotype\npapyrus\nPaque\npaquet\npar\npara\nparaaminobenzoic\nparabanate\nparabanic\nparabaptism\nparabaptization\nparabasal\nparabasic\nparabasis\nparabema\nparabematic\nparabenzoquinone\nparabiosis\nparabiotic\nparablast\nparablastic\nparable\nparablepsia\nparablepsis\nparablepsy\nparableptic\nparabola\nparabolanus\nparabolic\nparabolical\nparabolicalism\nparabolically\nparabolicness\nparaboliform\nparabolist\nparabolization\nparabolize\nparabolizer\nparaboloid\nparaboloidal\nparabomb\nparabotulism\nparabranchia\nparabranchial\nparabranchiate\nparabulia\nparabulic\nparacanthosis\nparacarmine\nparacasein\nparacaseinate\nParacelsian\nParacelsianism\nParacelsic\nParacelsist\nParacelsistic\nParacelsus\nparacentesis\nparacentral\nparacentric\nparacentrical\nparacephalus\nparacerebellar\nparacetaldehyde\nparachaplain\nparacholia\nparachor\nparachordal\nparachrea\nparachroia\nparachroma\nparachromatism\nparachromatophorous\nparachromatopsia\nparachromatosis\nparachrome\nparachromoparous\nparachromophoric\nparachromophorous\nparachronism\nparachronistic\nparachrose\nparachute\nparachutic\nparachutism\nparachutist\nparaclete\nparacmasis\nparacme\nparacoele\nparacoelian\nparacolitis\nparacolon\nparacolpitis\nparacolpium\nparacondyloid\nparacone\nparaconic\nparaconid\nparaconscious\nparacorolla\nparacotoin\nparacoumaric\nparacresol\nParacress\nparacusia\nparacusic\nparacyanogen\nparacyesis\nparacymene\nparacystic\nparacystitis\nparacystium\nparade\nparadeful\nparadeless\nparadelike\nparadenitis\nparadental\nparadentitis\nparadentium\nparader\nparaderm\nparadiastole\nparadiazine\nparadichlorbenzene\nparadichlorbenzol\nparadichlorobenzene\nparadichlorobenzol\nparadidymal\nparadidymis\nparadigm\nparadigmatic\nparadigmatical\nparadigmatically\nparadigmatize\nparading\nparadingly\nparadiplomatic\nparadisaic\nparadisaically\nparadisal\nparadise\nParadisea\nparadisean\nParadiseidae\nParadiseinae\nParadisia\nparadisiac\nparadisiacal\nparadisiacally\nparadisial\nparadisian\nparadisic\nparadisical\nparado\nparadoctor\nparados\nparadoses\nparadox\nparadoxal\nparadoxer\nparadoxial\nparadoxic\nparadoxical\nparadoxicalism\nparadoxicality\nparadoxically\nparadoxicalness\nparadoxician\nParadoxides\nparadoxidian\nparadoxism\nparadoxist\nparadoxographer\nparadoxographical\nparadoxology\nparadoxure\nParadoxurinae\nparadoxurine\nParadoxurus\nparadoxy\nparadromic\nparaenesis\nparaenesize\nparaenetic\nparaenetical\nparaengineer\nparaffin\nparaffine\nparaffiner\nparaffinic\nparaffinize\nparaffinoid\nparaffiny\nparaffle\nparafle\nparafloccular\nparaflocculus\nparaform\nparaformaldehyde\nparafunction\nparagammacism\nparaganglion\nparagaster\nparagastral\nparagastric\nparagastrula\nparagastrular\nparage\nparagenesia\nparagenesis\nparagenetic\nparagenic\nparagerontic\nparageusia\nparageusic\nparageusis\nparagglutination\nparaglenal\nparaglobin\nparaglobulin\nparaglossa\nparaglossal\nparaglossate\nparaglossia\nparaglycogen\nparagnath\nparagnathism\nparagnathous\nparagnathus\nparagneiss\nparagnosia\nparagoge\nparagogic\nparagogical\nparagogically\nparagogize\nparagon\nparagonimiasis\nParagonimus\nparagonite\nparagonitic\nparagonless\nparagram\nparagrammatist\nparagraph\nparagrapher\nparagraphia\nparagraphic\nparagraphical\nparagraphically\nparagraphism\nparagraphist\nparagraphistical\nparagraphize\nParaguay\nParaguayan\nparah\nparaheliotropic\nparaheliotropism\nparahematin\nparahemoglobin\nparahepatic\nParahippus\nparahopeite\nparahormone\nparahydrogen\nparaiba\nParaiyan\nparakeet\nparakeratosis\nparakilya\nparakinesia\nparakinetic\nparalactate\nparalalia\nparalambdacism\nparalambdacismus\nparalaurionite\nparaldehyde\nparale\nparalectotype\nparaleipsis\nparalepsis\nparalexia\nparalexic\nparalgesia\nparalgesic\nparalinin\nparalipomena\nParalipomenon\nparalipsis\nparalitical\nparallactic\nparallactical\nparallactically\nparallax\nparallel\nparallelable\nparallelepiped\nparallelepipedal\nparallelepipedic\nparallelepipedon\nparallelepipedonal\nparalleler\nparallelinervate\nparallelinerved\nparallelinervous\nparallelism\nparallelist\nparallelistic\nparallelith\nparallelization\nparallelize\nparallelizer\nparallelless\nparallelly\nparallelodrome\nparallelodromous\nparallelogram\nparallelogrammatic\nparallelogrammatical\nparallelogrammic\nparallelogrammical\nparallelograph\nparallelometer\nparallelopiped\nparallelopipedon\nparallelotropic\nparallelotropism\nparallelwise\nparallepipedous\nparalogia\nparalogical\nparalogician\nparalogism\nparalogist\nparalogistic\nparalogize\nparalogy\nparaluminite\nparalyses\nparalysis\nparalytic\nparalytical\nparalytically\nparalyzant\nparalyzation\nparalyze\nparalyzedly\nparalyzer\nparalyzingly\nparam\nparamagnet\nparamagnetic\nparamagnetism\nparamandelic\nparamarine\nparamastigate\nparamastitis\nparamastoid\nparamatta\nParamecidae\nParamecium\nparamedian\nparamelaconite\nparamenia\nparament\nparamere\nparameric\nparameron\nparamese\nparamesial\nparameter\nparametric\nparametrical\nparametritic\nparametritis\nparametrium\nparamide\nparamilitary\nparamimia\nparamine\nparamiographer\nparamitome\nparamnesia\nparamo\nParamoecium\nparamorph\nparamorphia\nparamorphic\nparamorphine\nparamorphism\nparamorphosis\nparamorphous\nparamount\nparamountcy\nparamountly\nparamountness\nparamountship\nparamour\nparamuthetic\nparamyelin\nparamylum\nparamyoclonus\nparamyosinogen\nparamyotone\nparamyotonia\nparanasal\nparanatellon\nparandrus\nparanema\nparanematic\nparanephric\nparanephritic\nparanephritis\nparanephros\nparanepionic\nparanete\nparang\nparanitraniline\nparanitrosophenol\nparanoia\nparanoiac\nparanoid\nparanoidal\nparanoidism\nparanomia\nparanormal\nparanosic\nparanthelion\nparanthracene\nParanthropus\nparanuclear\nparanucleate\nparanucleic\nparanuclein\nparanucleinic\nparanucleus\nparanymph\nparanymphal\nparao\nparaoperation\nParapaguridae\nparaparesis\nparaparetic\nparapathia\nparapathy\nparapegm\nparapegma\nparaperiodic\nparapet\nparapetalous\nparapeted\nparapetless\nparaph\nparaphasia\nparaphasic\nparaphemia\nparaphenetidine\nparaphenylene\nparaphenylenediamine\nparapherna\nparaphernal\nparaphernalia\nparaphernalian\nparaphia\nparaphilia\nparaphimosis\nparaphonia\nparaphonic\nparaphototropism\nparaphrasable\nparaphrase\nparaphraser\nparaphrasia\nparaphrasian\nparaphrasis\nparaphrasist\nparaphrast\nparaphraster\nparaphrastic\nparaphrastical\nparaphrastically\nparaphrenia\nparaphrenic\nparaphrenitis\nparaphyllium\nparaphysate\nparaphysical\nparaphysiferous\nparaphysis\nparaplasis\nparaplasm\nparaplasmic\nparaplastic\nparaplastin\nparaplectic\nparaplegia\nparaplegic\nparaplegy\nparapleuritis\nparapleurum\nparapod\nparapodial\nparapodium\nparapophysial\nparapophysis\nparapraxia\nparapraxis\nparaproctitis\nparaproctium\nparaprostatitis\nParapsida\nparapsidal\nparapsidan\nparapsis\nparapsychical\nparapsychism\nparapsychological\nparapsychology\nparapsychosis\nparapteral\nparapteron\nparapterum\nparaquadrate\nparaquinone\nPararctalia\nPararctalian\npararectal\npararek\nparareka\npararhotacism\npararosaniline\npararosolic\npararthria\nparasaboteur\nparasalpingitis\nparasang\nparascene\nparascenium\nparasceve\nparaschematic\nparasecretion\nparaselene\nparaselenic\nparasemidin\nparasemidine\nparasexuality\nparashah\nparasigmatism\nparasigmatismus\nParasita\nparasital\nparasitary\nparasite\nparasitelike\nparasitemia\nparasitic\nParasitica\nparasitical\nparasitically\nparasiticalness\nparasiticidal\nparasiticide\nParasitidae\nparasitism\nparasitize\nparasitogenic\nparasitoid\nparasitoidism\nparasitological\nparasitologist\nparasitology\nparasitophobia\nparasitosis\nparasitotrope\nparasitotropic\nparasitotropism\nparasitotropy\nparaskenion\nparasol\nparasoled\nparasolette\nparaspecific\nparasphenoid\nparasphenoidal\nparaspotter\nparaspy\nparastas\nparastatic\nparastemon\nparastemonal\nparasternal\nparasternum\nparastichy\nparastyle\nparasubphonate\nparasubstituted\nParasuchia\nparasuchian\nparasympathetic\nparasympathomimetic\nparasynapsis\nparasynaptic\nparasynaptist\nparasyndesis\nparasynesis\nparasynetic\nparasynovitis\nparasynthesis\nparasynthetic\nparasyntheton\nparasyphilis\nparasyphilitic\nparasyphilosis\nparasystole\nparatactic\nparatactical\nparatactically\nparatartaric\nparataxis\nparate\nparaterminal\nParatheria\nparatherian\nparathesis\nparathetic\nparathion\nparathormone\nparathymic\nparathyroid\nparathyroidal\nparathyroidectomize\nparathyroidectomy\nparathyroprival\nparathyroprivia\nparathyroprivic\nparatitla\nparatitles\nparatoloid\nparatoluic\nparatoluidine\nparatomial\nparatomium\nparatonic\nparatonically\nparatorium\nparatory\nparatracheal\nparatragedia\nparatragoedia\nparatransversan\nparatrichosis\nparatrimma\nparatriptic\nparatroop\nparatrooper\nparatrophic\nparatrophy\nparatuberculin\nparatuberculosis\nparatuberculous\nparatungstate\nparatungstic\nparatype\nparatyphlitis\nparatyphoid\nparatypic\nparatypical\nparatypically\nparavaginitis\nparavail\nparavane\nparavauxite\nparavent\nparavertebral\nparavesical\nparaxial\nparaxially\nparaxon\nparaxonic\nparaxylene\nParazoa\nparazoan\nparazonium\nparbake\nParbate\nparboil\nparbuckle\nparcel\nparceling\nparcellary\nparcellate\nparcellation\nparcelling\nparcellization\nparcellize\nparcelment\nparcelwise\nparcenary\nparcener\nparcenership\nparch\nparchable\nparchedly\nparchedness\nparcheesi\nparchemin\nparcher\nparchesi\nparching\nparchingly\nparchisi\nparchment\nparchmenter\nparchmentize\nparchmentlike\nparchmenty\nparchy\nparcidentate\nparciloquy\nparclose\nparcook\npard\npardalote\nPardanthus\npardao\nparded\npardesi\npardine\npardner\npardnomastic\npardo\npardon\npardonable\npardonableness\npardonably\npardonee\npardoner\npardoning\npardonless\npardonmonger\npare\nparegoric\nPareiasauri\nPareiasauria\npareiasaurian\nPareiasaurus\nPareioplitae\nparel\nparelectronomic\nparelectronomy\nparella\nparen\nparencephalic\nparencephalon\nparenchym\nparenchyma\nparenchymal\nparenchymatic\nparenchymatitis\nparenchymatous\nparenchymatously\nparenchyme\nparenchymous\nparent\nparentage\nparental\nParentalia\nparentalism\nparentality\nparentally\nparentdom\nparentela\nparentelic\nparenteral\nparenterally\nparentheses\nparenthesis\nparenthesize\nparenthetic\nparenthetical\nparentheticality\nparenthetically\nparentheticalness\nparenthood\nparenticide\nparentless\nparentlike\nparentship\nPareoean\nparepididymal\nparepididymis\nparepigastric\nparer\nparerethesis\nparergal\nparergic\nparergon\nparesis\nparesthesia\nparesthesis\nparesthetic\nparethmoid\nparetic\nparetically\npareunia\nparfait\nparfilage\nparfleche\nparfocal\npargana\npargasite\nparge\npargeboard\nparget\npargeter\npargeting\npargo\nparhelia\nparheliacal\nparhelic\nparhelion\nparhomologous\nparhomology\nparhypate\npari\npariah\npariahdom\npariahism\npariahship\nparial\nParian\nparian\nPariasauria\nPariasaurus\nParidae\nparidigitate\nparidrosis\nparies\nparietal\nParietales\nParietaria\nparietary\nparietes\nparietofrontal\nparietojugal\nparietomastoid\nparietoquadrate\nparietosphenoid\nparietosphenoidal\nparietosplanchnic\nparietosquamosal\nparietotemporal\nparietovaginal\nparietovisceral\nparify\nparigenin\npariglin\nParilia\nParilicium\nparilla\nparillin\nparimutuel\nParinarium\nparine\nparing\nparipinnate\nParis\nparish\nparished\nparishen\nparishional\nparishionally\nparishionate\nparishioner\nparishionership\nParisian\nParisianism\nParisianization\nParisianize\nParisianly\nParisii\nparisis\nparisology\nparison\nparisonic\nparisthmic\nparisthmion\nparisyllabic\nparisyllabical\nPariti\nParitium\nparity\nparivincular\npark\nparka\nparkee\nparker\nparkin\nparking\nParkinsonia\nParkinsonism\nparkish\nparklike\nparkward\nparkway\nparky\nparlamento\nparlance\nparlando\nParlatoria\nparlatory\nparlay\nparle\nparley\nparleyer\nparliament\nparliamental\nparliamentarian\nparliamentarianism\nparliamentarily\nparliamentariness\nparliamentarism\nparliamentarization\nparliamentarize\nparliamentary\nparliamenteer\nparliamenteering\nparliamenter\nparling\nparlish\nparlor\nparlorish\nparlormaid\nparlous\nparlously\nparlousness\nparly\nParma\nparma\nparmacety\nparmak\nParmelia\nParmeliaceae\nparmeliaceous\nparmelioid\nParmentiera\nParmesan\nParmese\nparnas\nParnassia\nParnassiaceae\nparnassiaceous\nParnassian\nParnassianism\nParnassiinae\nParnassism\nParnassus\nparnel\nParnellism\nParnellite\nparnorpine\nparoarion\nparoarium\nparoccipital\nparoch\nparochial\nparochialic\nparochialism\nparochialist\nparochiality\nparochialization\nparochialize\nparochially\nparochialness\nparochin\nparochine\nparochiner\nparode\nparodiable\nparodial\nparodic\nparodical\nparodinia\nparodist\nparodistic\nparodistically\nparodize\nparodontitis\nparodos\nparody\nparodyproof\nparoecious\nparoeciously\nparoeciousness\nparoecism\nparoecy\nparoemia\nparoemiac\nparoemiographer\nparoemiography\nparoemiologist\nparoemiology\nparoicous\nparol\nparolable\nparole\nparolee\nparolfactory\nparoli\nparolist\nparomoeon\nparomologetic\nparomologia\nparomology\nparomphalocele\nparomphalocelic\nparonomasia\nparonomasial\nparonomasian\nparonomasiastic\nparonomastical\nparonomastically\nparonychia\nparonychial\nparonychium\nparonym\nparonymic\nparonymization\nparonymize\nparonymous\nparonymy\nparoophoric\nparoophoritis\nparoophoron\nparopsis\nparoptesis\nparoptic\nparorchid\nparorchis\nparorexia\nParosela\nparosmia\nparosmic\nparosteal\nparosteitis\nparosteosis\nparostosis\nparostotic\nParotia\nparotic\nparotid\nparotidean\nparotidectomy\nparotiditis\nparotis\nparotitic\nparotitis\nparotoid\nparous\nparousia\nparousiamania\nparovarian\nparovariotomy\nparovarium\nparoxazine\nparoxysm\nparoxysmal\nparoxysmalist\nparoxysmally\nparoxysmic\nparoxysmist\nparoxytone\nparoxytonic\nparoxytonize\nparpal\nparquet\nparquetage\nparquetry\nparr\nParra\nparrel\nparrhesia\nparrhesiastic\nparriable\nparricidal\nparricidally\nparricide\nparricided\nparricidial\nparricidism\nParridae\nparrier\nparrock\nparrot\nparroter\nparrothood\nparrotism\nparrotize\nparrotlet\nparrotlike\nparrotry\nparrotwise\nparroty\nparry\nparsable\nparse\nparsec\nParsee\nParseeism\nparser\nparsettensite\nParsi\nParsic\nParsiism\nparsimonious\nparsimoniously\nparsimoniousness\nparsimony\nParsism\nparsley\nparsleylike\nparsleywort\nparsnip\nparson\nparsonage\nparsonarchy\nparsondom\nparsoned\nparsonese\nparsoness\nparsonet\nparsonhood\nparsonic\nparsonical\nparsonically\nparsoning\nparsonish\nparsonity\nparsonize\nparsonlike\nparsonly\nparsonolatry\nparsonology\nparsonry\nparsonship\nParsonsia\nparsonsite\nparsony\nPart\npart\npartakable\npartake\npartaker\npartan\npartanfull\npartanhanded\nparted\npartedness\nparter\nparterre\nparterred\npartheniad\nPartheniae\nparthenian\nparthenic\nParthenium\nparthenocarpelly\nparthenocarpic\nparthenocarpical\nparthenocarpically\nparthenocarpous\nparthenocarpy\nParthenocissus\nparthenogenesis\nparthenogenetic\nparthenogenetically\nparthenogenic\nparthenogenitive\nparthenogenous\nparthenogeny\nparthenogonidium\nParthenolatry\nparthenology\nParthenon\nParthenopaeus\nparthenoparous\nParthenope\nParthenopean\nParthenos\nparthenosperm\nparthenospore\nParthian\npartial\npartialism\npartialist\npartialistic\npartiality\npartialize\npartially\npartialness\npartiary\npartible\nparticate\nparticipability\nparticipable\nparticipance\nparticipancy\nparticipant\nparticipantly\nparticipate\nparticipatingly\nparticipation\nparticipative\nparticipatively\nparticipator\nparticipatory\nparticipatress\nparticipial\nparticipiality\nparticipialize\nparticipially\nparticiple\nparticle\nparticled\nparticular\nparticularism\nparticularist\nparticularistic\nparticularistically\nparticularity\nparticularization\nparticularize\nparticularly\nparticularness\nparticulate\npartigen\npartile\npartimembered\npartimen\npartinium\npartisan\npartisanism\npartisanize\npartisanship\npartite\npartition\npartitional\npartitionary\npartitioned\npartitioner\npartitioning\npartitionist\npartitionment\npartitive\npartitively\npartitura\npartiversal\npartivity\npartless\npartlet\npartly\npartner\npartnerless\npartnership\nparto\npartook\npartridge\npartridgeberry\npartridgelike\npartridgewood\npartridging\npartschinite\nparture\nparturiate\nparturience\nparturiency\nparturient\nparturifacient\nparturition\nparturitive\nparty\npartyism\npartyist\npartykin\npartyless\npartymonger\npartyship\nParukutu\nparulis\nparumbilical\nparure\nparuria\nParus\nparvanimity\nparvenu\nparvenudom\nparvenuism\nparvicellular\nparviflorous\nparvifoliate\nparvifolious\nparvipotent\nparvirostrate\nparvis\nparviscient\nparvitude\nparvolin\nparvoline\nparvule\nparyphodrome\npasan\npasang\nPascal\nPasch\nPascha\npaschal\npaschalist\nPaschaltide\npaschite\npascoite\npascuage\npascual\npascuous\npasgarde\npash\npasha\npashadom\npashalik\npashaship\npashm\npashmina\nPashto\npasi\npasigraphic\npasigraphical\npasigraphy\npasilaly\nPasitelean\npasmo\nPaspalum\npasqueflower\npasquil\npasquilant\npasquiler\npasquilic\nPasquin\npasquin\npasquinade\npasquinader\nPasquinian\nPasquino\npass\npassable\npassableness\npassably\npassade\npassado\npassage\npassageable\npassageway\nPassagian\npassalid\nPassalidae\nPassalus\nPassamaquoddy\npassant\npassback\npassbook\nPasse\npasse\npassee\npassegarde\npassement\npassementerie\npassen\npassenger\nPasser\npasser\nPasseres\npasseriform\nPasseriformes\nPasserina\npasserine\npassewa\npassibility\npassible\npassibleness\nPassiflora\nPassifloraceae\npassifloraceous\nPassiflorales\npassimeter\npassing\npassingly\npassingness\npassion\npassional\npassionary\npassionate\npassionately\npassionateness\npassionative\npassioned\npassionflower\npassionful\npassionfully\npassionfulness\nPassionist\npassionist\npassionless\npassionlessly\npassionlessness\npassionlike\npassionometer\npassionproof\nPassiontide\npassionwise\npassionwort\npassir\npassival\npassivate\npassivation\npassive\npassively\npassiveness\npassivism\npassivist\npassivity\npasskey\npassless\npassman\npasso\npassometer\npassout\npassover\npassoverish\npasspenny\npassport\npassportless\npassulate\npassulation\npassus\npassway\npasswoman\npassword\npassworts\npassymeasure\npast\npaste\npasteboard\npasteboardy\npasted\npastedness\npastedown\npastel\npastelist\npaster\npasterer\npastern\npasterned\npasteur\nPasteurella\nPasteurelleae\npasteurellosis\nPasteurian\npasteurism\npasteurization\npasteurize\npasteurizer\npastiche\npasticheur\npastil\npastile\npastille\npastime\npastimer\nPastinaca\npastiness\npasting\npastness\npastophor\npastophorion\npastophorium\npastophorus\npastor\npastorage\npastoral\npastorale\npastoralism\npastoralist\npastorality\npastoralize\npastorally\npastoralness\npastorate\npastoress\npastorhood\npastorium\npastorize\npastorless\npastorlike\npastorling\npastorly\npastorship\npastose\npastosity\npastrami\npastry\npastryman\npasturability\npasturable\npasturage\npastural\npasture\npastureless\npasturer\npasturewise\npasty\npasul\nPat\npat\npata\npataca\npatacao\npataco\npatagial\npatagiate\npatagium\nPatagon\npatagon\nPatagones\nPatagonian\npataka\npatamar\npatao\npatapat\npataque\nPataria\nPatarin\nPatarine\nPatarinism\npatas\npatashte\nPatavian\npatavinity\npatball\npatballer\npatch\npatchable\npatcher\npatchery\npatchily\npatchiness\npatchleaf\npatchless\npatchouli\npatchwise\npatchword\npatchwork\npatchworky\npatchy\npate\npatefaction\npatefy\npatel\npatella\npatellar\npatellaroid\npatellate\nPatellidae\npatellidan\npatelliform\npatelline\npatellofemoral\npatelloid\npatellula\npatellulate\npaten\npatency\npatener\npatent\npatentability\npatentable\npatentably\npatentee\npatently\npatentor\npater\npatera\npatercove\npaterfamiliar\npaterfamiliarly\npaterfamilias\npateriform\npaterissa\npaternal\npaternalism\npaternalist\npaternalistic\npaternalistically\npaternality\npaternalize\npaternally\npaternity\npaternoster\npaternosterer\npatesi\npatesiate\npath\nPathan\npathbreaker\npathed\npathema\npathematic\npathematically\npathematology\npathetic\npathetical\npathetically\npatheticalness\npatheticate\npatheticly\npatheticness\npathetism\npathetist\npathetize\npathfarer\npathfinder\npathfinding\npathic\npathicism\npathless\npathlessness\npathlet\npathoanatomical\npathoanatomy\npathobiological\npathobiologist\npathobiology\npathochemistry\npathodontia\npathogen\npathogene\npathogenesis\npathogenesy\npathogenetic\npathogenic\npathogenicity\npathogenous\npathogeny\npathogerm\npathogermic\npathognomic\npathognomical\npathognomonic\npathognomonical\npathognomy\npathognostic\npathographical\npathography\npathologic\npathological\npathologically\npathologicoanatomic\npathologicoanatomical\npathologicoclinical\npathologicohistological\npathologicopsychological\npathologist\npathology\npatholysis\npatholytic\npathomania\npathometabolism\npathomimesis\npathomimicry\npathoneurosis\npathonomia\npathonomy\npathophobia\npathophoresis\npathophoric\npathophorous\npathoplastic\npathoplastically\npathopoeia\npathopoiesis\npathopoietic\npathopsychology\npathopsychosis\npathoradiography\npathos\npathosocial\nPathrusim\npathway\npathwayed\npathy\npatible\npatibulary\npatibulate\npatience\npatiency\npatient\npatientless\npatiently\npatientness\npatina\npatinate\npatination\npatine\npatined\npatinize\npatinous\npatio\npatisserie\npatly\nPatmian\nPatmos\npatness\npatnidar\npato\npatois\npatola\npatonce\npatria\npatrial\npatriarch\npatriarchal\npatriarchalism\npatriarchally\npatriarchate\npatriarchdom\npatriarched\npatriarchess\npatriarchic\npatriarchical\npatriarchically\npatriarchism\npatriarchist\npatriarchship\npatriarchy\nPatrice\npatrice\nPatricia\nPatrician\npatrician\npatricianhood\npatricianism\npatricianly\npatricianship\npatriciate\npatricidal\npatricide\nPatricio\nPatrick\npatrico\npatrilineal\npatrilineally\npatrilinear\npatriliny\npatrilocal\npatrimonial\npatrimonially\npatrimony\npatrin\nPatriofelis\npatriolatry\npatriot\npatrioteer\npatriotess\npatriotic\npatriotical\npatriotically\npatriotics\npatriotism\npatriotly\npatriotship\nPatripassian\nPatripassianism\nPatripassianist\nPatripassianly\npatrist\npatristic\npatristical\npatristically\npatristicalness\npatristicism\npatristics\npatrix\npatrizate\npatrization\npatrocinium\npatroclinic\npatroclinous\npatrocliny\npatrogenesis\npatrol\npatroller\npatrollotism\npatrolman\npatrologic\npatrological\npatrologist\npatrology\npatron\npatronage\npatronal\npatronate\npatrondom\npatroness\npatronessship\npatronite\npatronizable\npatronization\npatronize\npatronizer\npatronizing\npatronizingly\npatronless\npatronly\npatronomatology\npatronship\npatronym\npatronymic\npatronymically\npatronymy\npatroon\npatroonry\npatroonship\npatruity\nPatsy\npatta\npattable\npatte\npattee\npatten\npattened\npattener\npatter\npatterer\npatterist\npattern\npatternable\npatterned\npatterner\npatterning\npatternize\npatternless\npatternlike\npatternmaker\npatternmaking\npatternwise\npatterny\npattu\nPatty\npatty\npattypan\npatu\npatulent\npatulous\npatulously\npatulousness\nPatuxent\npatwari\nPatwin\npaty\npau\npauciarticulate\npauciarticulated\npaucidentate\npauciflorous\npaucifoliate\npaucifolious\npaucify\npaucijugate\npaucilocular\npauciloquent\npauciloquently\npauciloquy\npaucinervate\npaucipinnate\npauciplicate\npauciradiate\npauciradiated\npaucispiral\npaucispirated\npaucity\npaughty\npaukpan\nPaul\nPaula\npaular\npauldron\nPauliad\nPaulian\nPaulianist\nPauliccian\nPaulicianism\npaulie\npaulin\nPaulina\nPauline\nPaulinia\nPaulinian\nPaulinism\nPaulinist\nPaulinistic\nPaulinistically\nPaulinity\nPaulinize\nPaulinus\nPaulism\nPaulist\nPaulista\nPaulite\npaulopast\npaulopost\npaulospore\nPaulownia\nPaulus\nPaumari\npaunch\npaunched\npaunchful\npaunchily\npaunchiness\npaunchy\npaup\npauper\npauperage\npauperate\npauperdom\npauperess\npauperism\npauperitic\npauperization\npauperize\npauperizer\nPaurometabola\npaurometabolic\npaurometabolism\npaurometabolous\npaurometaboly\npauropod\nPauropoda\npauropodous\npausably\npausal\npausation\npause\npauseful\npausefully\npauseless\npauselessly\npausement\npauser\npausingly\npaussid\nPaussidae\npaut\npauxi\npavage\npavan\npavane\npave\npavement\npavemental\npaver\npavestone\nPavetta\nPavia\npavid\npavidity\npavier\npavilion\npaving\npavior\nPaviotso\npaviour\npavis\npavisade\npavisado\npaviser\npavisor\nPavo\npavonated\npavonazzetto\npavonazzo\nPavoncella\nPavonia\npavonian\npavonine\npavonize\npavy\npaw\npawdite\npawer\npawing\npawk\npawkery\npawkily\npawkiness\npawkrie\npawky\npawl\npawn\npawnable\npawnage\npawnbroker\npawnbrokerage\npawnbrokeress\npawnbrokering\npawnbrokery\npawnbroking\nPawnee\npawnee\npawner\npawnie\npawnor\npawnshop\npawpaw\nPawtucket\npax\npaxilla\npaxillar\npaxillary\npaxillate\npaxilliferous\npaxilliform\nPaxillosa\npaxillose\npaxillus\npaxiuba\npaxwax\npay\npayability\npayable\npayableness\npayably\nPayagua\nPayaguan\npayday\npayed\npayee\npayeny\npayer\npaying\npaymaster\npaymastership\npayment\npaymistress\nPayni\npaynim\npaynimhood\npaynimry\nPaynize\npayoff\npayong\npayor\npayroll\npaysagist\nPazend\npea\npeaberry\npeace\npeaceable\npeaceableness\npeaceably\npeacebreaker\npeacebreaking\npeaceful\npeacefully\npeacefulness\npeaceless\npeacelessness\npeacelike\npeacemaker\npeacemaking\npeaceman\npeacemonger\npeacemongering\npeacetime\npeach\npeachberry\npeachblossom\npeachblow\npeachen\npeacher\npeachery\npeachick\npeachify\npeachiness\npeachlet\npeachlike\npeachwood\npeachwort\npeachy\npeacoat\npeacock\npeacockery\npeacockish\npeacockishly\npeacockishness\npeacockism\npeacocklike\npeacockly\npeacockwise\npeacocky\npeacod\npeafowl\npeag\npeage\npeahen\npeai\npeaiism\npeak\npeaked\npeakedly\npeakedness\npeaker\npeakily\npeakiness\npeaking\npeakish\npeakishly\npeakishness\npeakless\npeaklike\npeakward\npeaky\npeakyish\npeal\npealike\npean\npeanut\npear\npearceite\npearl\npearlberry\npearled\npearler\npearlet\npearlfish\npearlfruit\npearlike\npearlin\npearliness\npearling\npearlish\npearlite\npearlitic\npearlsides\npearlstone\npearlweed\npearlwort\npearly\npearmain\npearmonger\npeart\npearten\npeartly\npeartness\npearwood\npeasant\npeasantess\npeasanthood\npeasantism\npeasantize\npeasantlike\npeasantly\npeasantry\npeasantship\npeasecod\npeaselike\npeasen\npeashooter\npeason\npeastake\npeastaking\npeastick\npeasticking\npeastone\npeasy\npeat\npeatery\npeathouse\npeatman\npeatship\npeatstack\npeatwood\npeaty\npeavey\npeavy\nPeba\npeba\nPeban\npebble\npebbled\npebblehearted\npebblestone\npebbleware\npebbly\npebrine\npebrinous\npecan\npeccability\npeccable\npeccadillo\npeccancy\npeccant\npeccantly\npeccantness\npeccary\npeccation\npeccavi\npech\npecht\npecite\npeck\npecked\npecker\npeckerwood\npecket\npeckful\npeckhamite\npeckiness\npeckish\npeckishly\npeckishness\npeckle\npeckled\npeckly\nPecksniffian\nPecksniffianism\nPecksniffism\npecky\nPecopteris\npecopteroid\nPecora\nPecos\npectase\npectate\npecten\npectic\npectin\nPectinacea\npectinacean\npectinaceous\npectinal\npectinase\npectinate\npectinated\npectinately\npectination\npectinatodenticulate\npectinatofimbricate\npectinatopinnate\npectineal\npectineus\npectinibranch\nPectinibranchia\npectinibranchian\nPectinibranchiata\npectinibranchiate\npectinic\npectinid\nPectinidae\npectiniferous\npectiniform\npectinirostrate\npectinite\npectinogen\npectinoid\npectinose\npectinous\npectizable\npectization\npectize\npectocellulose\npectolite\npectora\npectoral\npectoralgia\npectoralis\npectoralist\npectorally\npectoriloquial\npectoriloquism\npectoriloquous\npectoriloquy\npectosase\npectose\npectosic\npectosinase\npectous\npectunculate\nPectunculus\npectus\npeculate\npeculation\npeculator\npeculiar\npeculiarism\npeculiarity\npeculiarize\npeculiarly\npeculiarness\npeculiarsome\npeculium\npecuniarily\npecuniary\npecuniosity\npecunious\nped\npeda\npedage\npedagog\npedagogal\npedagogic\npedagogical\npedagogically\npedagogics\npedagogism\npedagogist\npedagogue\npedagoguery\npedagoguish\npedagoguism\npedagogy\npedal\npedaler\npedalfer\npedalferic\nPedaliaceae\npedaliaceous\npedalian\npedalier\nPedalion\npedalism\npedalist\npedaliter\npedality\nPedalium\npedanalysis\npedant\npedantesque\npedantess\npedanthood\npedantic\npedantical\npedantically\npedanticalness\npedanticism\npedanticly\npedanticness\npedantism\npedantize\npedantocracy\npedantocrat\npedantocratic\npedantry\npedary\nPedata\npedate\npedated\npedately\npedatifid\npedatiform\npedatilobate\npedatilobed\npedatinerved\npedatipartite\npedatisect\npedatisected\npedatrophia\npedder\npeddle\npeddler\npeddleress\npeddlerism\npeddlery\npeddling\npeddlingly\npedee\npedelion\npederast\npederastic\npederastically\npederasty\npedes\npedesis\npedestal\npedestrial\npedestrially\npedestrian\npedestrianate\npedestrianism\npedestrianize\npedetentous\nPedetes\nPedetidae\nPedetinae\npediadontia\npediadontic\npediadontist\npedialgia\nPediastrum\npediatric\npediatrician\npediatrics\npediatrist\npediatry\npedicab\npedicel\npediceled\npedicellar\npedicellaria\npedicellate\npedicellated\npedicellation\npedicelled\npedicelliform\nPedicellina\npedicellus\npedicle\npedicular\nPedicularia\nPedicularis\npediculate\npediculated\nPediculati\npedicule\nPediculi\npediculicidal\npediculicide\npediculid\nPediculidae\nPediculina\npediculine\npediculofrontal\npediculoid\npediculoparietal\npediculophobia\npediculosis\npediculous\nPediculus\npedicure\npedicurism\npedicurist\npediferous\npediform\npedigerous\npedigraic\npedigree\npedigreeless\npediluvium\nPedimana\npedimanous\npediment\npedimental\npedimented\npedimentum\nPedioecetes\npedion\npedionomite\nPedionomus\npedipalp\npedipalpal\npedipalpate\nPedipalpi\nPedipalpida\npedipalpous\npedipalpus\npedipulate\npedipulation\npedipulator\npedlar\npedlary\npedobaptism\npedobaptist\npedocal\npedocalcic\npedodontia\npedodontic\npedodontist\npedodontology\npedograph\npedological\npedologist\npedologistical\npedologistically\npedology\npedometer\npedometric\npedometrical\npedometrically\npedometrician\npedometrist\npedomorphic\npedomorphism\npedomotive\npedomotor\npedophilia\npedophilic\npedotribe\npedotrophic\npedotrophist\npedotrophy\npedrail\npedregal\npedrero\nPedro\npedro\npedule\npedum\npeduncle\npeduncled\npeduncular\nPedunculata\npedunculate\npedunculated\npedunculation\npedunculus\npee\npeed\npeek\npeekaboo\npeel\npeelable\npeele\npeeled\npeeledness\npeeler\npeelhouse\npeeling\nPeelism\nPeelite\npeelman\npeen\npeenge\npeeoy\npeep\npeeper\npeepeye\npeephole\npeepy\npeer\npeerage\npeerdom\npeeress\npeerhood\npeerie\npeeringly\npeerless\npeerlessly\npeerlessness\npeerling\npeerly\npeership\npeery\npeesash\npeesoreh\npeesweep\npeetweet\npeeve\npeeved\npeevedly\npeevedness\npeever\npeevish\npeevishly\npeevishness\npeewee\nPeg\npeg\npega\npegall\npeganite\nPeganum\nPegasean\nPegasian\nPegasid\npegasid\nPegasidae\npegasoid\nPegasus\npegboard\npegbox\npegged\npegger\npegging\npeggle\nPeggy\npeggy\npegless\npeglet\npeglike\npegman\npegmatite\npegmatitic\npegmatization\npegmatize\npegmatoid\npegmatophyre\npegology\npegomancy\nPeguan\npegwood\nPehlevi\npeho\nPehuenche\npeignoir\npeine\npeirameter\npeirastic\npeirastically\npeisage\npeise\npeiser\nPeitho\npeixere\npejorate\npejoration\npejorationist\npejorative\npejoratively\npejorism\npejorist\npejority\npekan\nPekin\npekin\nPeking\nPekingese\npekoe\npeladic\npelage\npelagial\nPelagian\npelagian\nPelagianism\nPelagianize\nPelagianizer\npelagic\nPelagothuria\npelamyd\npelanos\nPelargi\npelargic\nPelargikon\npelargomorph\nPelargomorphae\npelargomorphic\npelargonate\npelargonic\npelargonidin\npelargonin\npelargonium\nPelasgi\nPelasgian\nPelasgic\nPelasgikon\nPelasgoi\nPele\npelean\npelecan\nPelecani\nPelecanidae\nPelecaniformes\nPelecanoides\nPelecanoidinae\nPelecanus\npelecypod\nPelecypoda\npelecypodous\npelelith\npelerine\nPeleus\nPelew\npelf\nPelias\npelican\npelicanry\npelick\npelicometer\nPelides\nPelidnota\npelike\npeliom\npelioma\npeliosis\npelisse\npelite\npelitic\npell\nPellaea\npellage\npellagra\npellagragenic\npellagrin\npellagrose\npellagrous\npellar\npellard\npellas\npellate\npellation\npeller\npellet\npelleted\npelletierine\npelletlike\npellety\nPellian\npellicle\npellicula\npellicular\npellicularia\npelliculate\npellicule\npellile\npellitory\npellmell\npellock\npellotine\npellucent\npellucid\npellucidity\npellucidly\npellucidness\nPelmanism\nPelmanist\nPelmanize\npelmatic\npelmatogram\nPelmatozoa\npelmatozoan\npelmatozoic\npelmet\nPelobates\npelobatid\nPelobatidae\npelobatoid\nPelodytes\npelodytid\nPelodytidae\npelodytoid\nPelomedusa\npelomedusid\nPelomedusidae\npelomedusoid\nPelomyxa\npelon\nPelopaeus\nPelopid\nPelopidae\nPeloponnesian\nPelops\npeloria\npelorian\npeloriate\npeloric\npelorism\npelorization\npelorize\npelorus\npelota\npelotherapy\npeloton\npelt\npelta\nPeltandra\npeltast\npeltate\npeltated\npeltately\npeltatifid\npeltation\npeltatodigitate\npelter\npelterer\npeltiferous\npeltifolious\npeltiform\nPeltigera\nPeltigeraceae\npeltigerine\npeltigerous\npeltinerved\npelting\npeltingly\npeltless\npeltmonger\nPeltogaster\npeltry\npelu\npeludo\nPelusios\npelveoperitonitis\npelves\nPelvetia\npelvic\npelviform\npelvigraph\npelvigraphy\npelvimeter\npelvimetry\npelviolithotomy\npelvioperitonitis\npelvioplasty\npelvioradiography\npelvioscopy\npelviotomy\npelviperitonitis\npelvirectal\npelvis\npelvisacral\npelvisternal\npelvisternum\npelycogram\npelycography\npelycology\npelycometer\npelycometry\npelycosaur\nPelycosauria\npelycosaurian\npembina\nPembroke\npemican\npemmican\npemmicanization\npemmicanize\npemphigoid\npemphigous\npemphigus\npen\npenacute\nPenaea\nPenaeaceae\npenaeaceous\npenal\npenalist\npenality\npenalizable\npenalization\npenalize\npenally\npenalty\npenance\npenanceless\npenang\npenannular\npenates\npenbard\npencatite\npence\npencel\npenceless\npenchant\npenchute\npencil\npenciled\npenciler\npenciliform\npenciling\npencilled\npenciller\npencillike\npencilling\npencilry\npencilwood\npencraft\npend\npenda\npendant\npendanted\npendanting\npendantlike\npendecagon\npendeloque\npendency\npendent\npendentive\npendently\npendicle\npendicler\npending\npendle\npendom\npendragon\npendragonish\npendragonship\npendulant\npendular\npendulate\npendulation\npendule\npenduline\npendulosity\npendulous\npendulously\npendulousness\npendulum\npendulumlike\nPenelope\nPenelopean\nPenelophon\nPenelopinae\npenelopine\npeneplain\npeneplanation\npeneplane\npeneseismic\npenetrability\npenetrable\npenetrableness\npenetrably\npenetral\npenetralia\npenetralian\npenetrance\npenetrancy\npenetrant\npenetrate\npenetrating\npenetratingly\npenetratingness\npenetration\npenetrative\npenetratively\npenetrativeness\npenetrativity\npenetrator\npenetrology\npenetrometer\npenfieldite\npenfold\npenful\npenghulu\npengo\npenguin\npenguinery\npenhead\npenholder\npenial\npenicillate\npenicillated\npenicillately\npenicillation\npenicilliform\npenicillin\nPenicillium\npenide\npenile\npeninsula\npeninsular\npeninsularism\npeninsularity\npeninsulate\npenintime\npeninvariant\npenis\npenistone\npenitence\npenitencer\npenitent\nPenitentes\npenitential\npenitentially\npenitentiary\npenitentiaryship\npenitently\npenk\npenkeeper\npenknife\npenlike\npenmaker\npenmaking\npenman\npenmanship\npenmaster\npenna\npennaceous\nPennacook\npennae\npennage\nPennales\npennant\nPennaria\nPennariidae\nPennatae\npennate\npennated\npennatifid\npennatilobate\npennatipartite\npennatisect\npennatisected\nPennatula\nPennatulacea\npennatulacean\npennatulaceous\npennatularian\npennatulid\nPennatulidae\npennatuloid\npenneech\npenneeck\npenner\npennet\npenni\npennia\npennied\npenniferous\npenniform\npennigerous\npenniless\npennilessly\npennilessness\npennill\npenninervate\npenninerved\npenning\npenninite\npennipotent\nPennisetum\npenniveined\npennon\npennoned\npennopluma\npennoplume\npennorth\nPennsylvania\nPennsylvanian\nPenny\npenny\npennybird\npennycress\npennyearth\npennyflower\npennyhole\npennyleaf\npennyrot\npennyroyal\npennysiller\npennystone\npennyweight\npennywinkle\npennywort\npennyworth\nPenobscot\npenologic\npenological\npenologist\npenology\npenorcon\npenrack\npenroseite\nPensacola\npenscript\npenseful\npensefulness\npenship\npensile\npensileness\npensility\npension\npensionable\npensionably\npensionary\npensioner\npensionership\npensionless\npensive\npensived\npensively\npensiveness\npenster\npenstick\npenstock\npensum\npensy\npent\npenta\npentabasic\npentabromide\npentacapsular\npentacarbon\npentacarbonyl\npentacarpellary\npentace\npentacetate\npentachenium\npentachloride\npentachord\npentachromic\npentacid\npentacle\npentacoccous\npentacontane\npentacosane\nPentacrinidae\npentacrinite\npentacrinoid\nPentacrinus\npentacron\npentacrostic\npentactinal\npentactine\npentacular\npentacyanic\npentacyclic\npentad\npentadactyl\nPentadactyla\npentadactylate\npentadactyle\npentadactylism\npentadactyloid\npentadecagon\npentadecahydrate\npentadecahydrated\npentadecane\npentadecatoic\npentadecoic\npentadecyl\npentadecylic\npentadelphous\npentadicity\npentadiene\npentadodecahedron\npentadrachm\npentadrachma\npentaerythrite\npentaerythritol\npentafid\npentafluoride\npentagamist\npentaglossal\npentaglot\npentaglottical\npentagon\npentagonal\npentagonally\npentagonohedron\npentagonoid\npentagram\npentagrammatic\npentagyn\nPentagynia\npentagynian\npentagynous\npentahalide\npentahedral\npentahedrical\npentahedroid\npentahedron\npentahedrous\npentahexahedral\npentahexahedron\npentahydrate\npentahydrated\npentahydric\npentahydroxy\npentail\npentaiodide\npentalobate\npentalogue\npentalogy\npentalpha\nPentamera\npentameral\npentameran\npentamerid\nPentameridae\npentamerism\npentameroid\npentamerous\nPentamerus\npentameter\npentamethylene\npentamethylenediamine\npentametrist\npentametrize\npentander\nPentandria\npentandrian\npentandrous\npentane\npentanedione\npentangle\npentangular\npentanitrate\npentanoic\npentanolide\npentanone\npentapetalous\nPentaphylacaceae\npentaphylacaceous\nPentaphylax\npentaphyllous\npentaploid\npentaploidic\npentaploidy\npentapody\npentapolis\npentapolitan\npentapterous\npentaptote\npentaptych\npentaquine\npentarch\npentarchical\npentarchy\npentasepalous\npentasilicate\npentaspermous\npentaspheric\npentaspherical\npentastich\npentastichous\npentastichy\npentastome\nPentastomida\npentastomoid\npentastomous\nPentastomum\npentastyle\npentastylos\npentasulphide\npentasyllabic\npentasyllabism\npentasyllable\nPentateuch\nPentateuchal\npentateuchal\npentathionate\npentathionic\npentathlete\npentathlon\npentathlos\npentatomic\npentatomid\nPentatomidae\nPentatomoidea\npentatone\npentatonic\npentatriacontane\npentavalence\npentavalency\npentavalent\npenteconter\npentecontoglossal\nPentecost\nPentecostal\npentecostal\npentecostalism\npentecostalist\npentecostarion\npentecoster\npentecostys\nPentelic\nPentelican\npentene\npenteteric\npenthemimer\npenthemimeral\npenthemimeris\nPenthestes\npenthiophen\npenthiophene\nPenthoraceae\nPenthorum\npenthouse\npenthouselike\npenthrit\npenthrite\npentimento\npentine\npentiodide\npentit\npentite\npentitol\npentlandite\npentobarbital\npentode\npentoic\npentol\npentosan\npentosane\npentose\npentoside\npentosuria\npentoxide\npentremital\npentremite\nPentremites\nPentremitidae\npentrit\npentrite\npentrough\nPentstemon\npentstock\npenttail\npentyl\npentylene\npentylic\npentylidene\npentyne\nPentzia\npenuchi\npenult\npenultima\npenultimate\npenultimatum\npenumbra\npenumbrae\npenumbral\npenumbrous\npenurious\npenuriously\npenuriousness\npenury\nPenutian\npenwiper\npenwoman\npenwomanship\npenworker\npenwright\npeon\npeonage\npeonism\npeony\npeople\npeopledom\npeoplehood\npeopleize\npeopleless\npeopler\npeoplet\npeoplish\nPeoria\nPeorian\npeotomy\npep\npeperine\npeperino\nPeperomia\npepful\nPephredo\npepinella\npepino\npeplos\npeplosed\npeplum\npeplus\npepo\npeponida\npeponium\npepper\npepperbox\npeppercorn\npeppercornish\npeppercorny\npepperer\npeppergrass\npepperidge\npepperily\npepperiness\npepperish\npepperishly\npeppermint\npepperoni\npepperproof\npepperroot\npepperweed\npepperwood\npepperwort\npeppery\npeppily\npeppin\npeppiness\npeppy\npepsin\npepsinate\npepsinhydrochloric\npepsiniferous\npepsinogen\npepsinogenic\npepsinogenous\npepsis\npeptic\npeptical\npepticity\npeptidase\npeptide\npeptizable\npeptization\npeptize\npeptizer\npeptogaster\npeptogenic\npeptogenous\npeptogeny\npeptohydrochloric\npeptolysis\npeptolytic\npeptonaemia\npeptonate\npeptone\npeptonemia\npeptonic\npeptonization\npeptonize\npeptonizer\npeptonoid\npeptonuria\npeptotoxine\nPepysian\nPequot\nPer\nper\nPeracarida\nperacephalus\nperacetate\nperacetic\nperacid\nperacidite\nperact\nperacute\nperadventure\nperagrate\nperagration\nPerakim\nperamble\nperambulant\nperambulate\nperambulation\nperambulator\nperambulatory\nPerameles\nPeramelidae\nperameline\nperameloid\nPeramium\nPeratae\nPerates\nperbend\nperborate\nperborax\nperbromide\nPerca\npercale\npercaline\npercarbide\npercarbonate\npercarbonic\nperceivability\nperceivable\nperceivableness\nperceivably\nperceivance\nperceivancy\nperceive\nperceivedly\nperceivedness\nperceiver\nperceiving\nperceivingness\npercent\npercentable\npercentably\npercentage\npercentaged\npercental\npercentile\npercentual\npercept\nperceptibility\nperceptible\nperceptibleness\nperceptibly\nperception\nperceptional\nperceptionalism\nperceptionism\nperceptive\nperceptively\nperceptiveness\nperceptivity\nperceptual\nperceptually\nPercesoces\npercesocine\nPerceval\nperch\npercha\nperchable\nperchance\npercher\nPercheron\nperchlorate\nperchlorethane\nperchlorethylene\nperchloric\nperchloride\nperchlorinate\nperchlorination\nperchloroethane\nperchloroethylene\nperchromate\nperchromic\npercid\nPercidae\nperciform\nPerciformes\npercipience\npercipiency\npercipient\nPercival\nperclose\npercnosome\npercoct\npercoid\nPercoidea\npercoidean\npercolable\npercolate\npercolation\npercolative\npercolator\npercomorph\nPercomorphi\npercomorphous\npercompound\npercontation\npercontatorial\npercribrate\npercribration\npercrystallization\nperculsion\nperculsive\npercur\npercurration\npercurrent\npercursory\npercuss\npercussion\npercussional\npercussioner\npercussionist\npercussionize\npercussive\npercussively\npercussiveness\npercussor\npercutaneous\npercutaneously\npercutient\nPercy\npercylite\nPerdicinae\nperdicine\nperdition\nperditionable\nPerdix\nperdricide\nperdu\nperduellion\nperdurability\nperdurable\nperdurableness\nperdurably\nperdurance\nperdurant\nperdure\nperduring\nperduringly\nPerean\nperegrin\nperegrina\nperegrinate\nperegrination\nperegrinator\nperegrinatory\nperegrine\nperegrinity\nperegrinoid\npereion\npereiopod\npereira\npereirine\nperemptorily\nperemptoriness\nperemptory\nperendinant\nperendinate\nperendination\nperendure\nperennate\nperennation\nperennial\nperenniality\nperennialize\nperennially\nperennibranch\nPerennibranchiata\nperennibranchiate\nperequitate\nperes\nPereskia\nperezone\nperfect\nperfectation\nperfected\nperfectedly\nperfecter\nperfecti\nperfectibilian\nperfectibilism\nperfectibilist\nperfectibilitarian\nperfectibility\nperfectible\nperfecting\nperfection\nperfectionate\nperfectionation\nperfectionator\nperfectioner\nperfectionism\nperfectionist\nperfectionistic\nperfectionize\nperfectionizement\nperfectionizer\nperfectionment\nperfectism\nperfectist\nperfective\nperfectively\nperfectiveness\nperfectivity\nperfectivize\nperfectly\nperfectness\nperfecto\nperfector\nperfectuation\nperfervent\nperfervid\nperfervidity\nperfervidly\nperfervidness\nperfervor\nperfervour\nperfidious\nperfidiously\nperfidiousness\nperfidy\nperfilograph\nperflate\nperflation\nperfluent\nperfoliate\nperfoliation\nperforable\nperforant\nPerforata\nperforate\nperforated\nperforation\nperforationproof\nperforative\nperforator\nperforatorium\nperforatory\nperforce\nperforcedly\nperform\nperformable\nperformance\nperformant\nperformative\nperformer\nperfrication\nperfumatory\nperfume\nperfumed\nperfumeless\nperfumer\nperfumeress\nperfumery\nperfumy\nperfunctionary\nperfunctorily\nperfunctoriness\nperfunctorious\nperfunctoriously\nperfunctorize\nperfunctory\nperfuncturate\nperfusate\nperfuse\nperfusion\nperfusive\nPergamene\npergameneous\nPergamenian\npergamentaceous\nPergamic\npergamyn\npergola\nperhalide\nperhalogen\nperhaps\nperhazard\nperhorresce\nperhydroanthracene\nperhydrogenate\nperhydrogenation\nperhydrogenize\nperi\nperiacinal\nperiacinous\nperiactus\nperiadenitis\nperiamygdalitis\nperianal\nperiangiocholitis\nperiangioma\nperiangitis\nperianth\nperianthial\nperianthium\nperiaortic\nperiaortitis\nperiapical\nperiappendicitis\nperiappendicular\nperiapt\nPeriarctic\nperiareum\nperiarterial\nperiarteritis\nperiarthric\nperiarthritis\nperiarticular\nperiaster\nperiastral\nperiastron\nperiastrum\nperiatrial\nperiauricular\nperiaxial\nperiaxillary\nperiaxonal\nperiblast\nperiblastic\nperiblastula\nperiblem\nperibolos\nperibolus\nperibranchial\nperibronchial\nperibronchiolar\nperibronchiolitis\nperibronchitis\nperibulbar\nperibursal\npericaecal\npericaecitis\npericanalicular\npericapsular\npericardia\npericardiac\npericardiacophrenic\npericardial\npericardicentesis\npericardiectomy\npericardiocentesis\npericardiolysis\npericardiomediastinitis\npericardiophrenic\npericardiopleural\npericardiorrhaphy\npericardiosymphysis\npericardiotomy\npericarditic\npericarditis\npericardium\npericardotomy\npericarp\npericarpial\npericarpic\npericarpium\npericarpoidal\npericecal\npericecitis\npericellular\npericemental\npericementitis\npericementoclasia\npericementum\npericenter\npericentral\npericentric\npericephalic\npericerebral\nperichaete\nperichaetial\nperichaetium\nperichete\npericholangitis\npericholecystitis\nperichondral\nperichondrial\nperichondritis\nperichondrium\nperichord\nperichordal\nperichoresis\nperichorioidal\nperichoroidal\nperichylous\npericladium\npericlase\npericlasia\npericlasite\npericlaustral\nPericlean\nPericles\npericlinal\npericlinally\npericline\npericlinium\npericlitate\npericlitation\npericolitis\npericolpitis\npericonchal\npericonchitis\npericopal\npericope\npericopic\npericorneal\npericowperitis\npericoxitis\npericranial\npericranitis\npericranium\npericristate\nPericu\npericulant\npericycle\npericycloid\npericyclone\npericyclonic\npericystic\npericystitis\npericystium\npericytial\nperidendritic\nperidental\nperidentium\nperidentoclasia\nperiderm\nperidermal\nperidermic\nPeridermium\nperidesm\nperidesmic\nperidesmitis\nperidesmium\nperidial\nperidiastole\nperidiastolic\nperididymis\nperididymitis\nperidiiform\nPeridineae\nPeridiniaceae\nperidiniaceous\nperidinial\nPeridiniales\nperidinian\nperidinid\nPeridinidae\nPeridinieae\nPeridiniidae\nPeridinium\nperidiole\nperidiolum\nperidium\nperidot\nperidotic\nperidotite\nperidotitic\nperiductal\nperiegesis\nperiegetic\nperielesis\nperiencephalitis\nperienteric\nperienteritis\nperienteron\nperiependymal\nperiesophageal\nperiesophagitis\nperifistular\nperifoliary\nperifollicular\nperifolliculitis\nperigangliitis\nperiganglionic\nperigastric\nperigastritis\nperigastrula\nperigastrular\nperigastrulation\nperigeal\nperigee\nperigemmal\nperigenesis\nperigenital\nperigeum\nperiglandular\nperigloea\nperiglottic\nperiglottis\nperignathic\nperigon\nperigonadial\nperigonal\nperigone\nperigonial\nperigonium\nperigraph\nperigraphic\nperigynial\nperigynium\nperigynous\nperigyny\nperihelial\nperihelian\nperihelion\nperihelium\nperihepatic\nperihepatitis\nperihermenial\nperihernial\nperihysteric\nperijejunitis\nperijove\nperikaryon\nperikronion\nperil\nperilabyrinth\nperilabyrinthitis\nperilaryngeal\nperilaryngitis\nperilenticular\nperiligamentous\nPerilla\nperilless\nperilobar\nperilous\nperilously\nperilousness\nperilsome\nperilymph\nperilymphangial\nperilymphangitis\nperilymphatic\nperimartium\nperimastitis\nperimedullary\nperimeningitis\nperimeter\nperimeterless\nperimetral\nperimetric\nperimetrical\nperimetrically\nperimetritic\nperimetritis\nperimetrium\nperimetry\nperimorph\nperimorphic\nperimorphism\nperimorphous\nperimyelitis\nperimysial\nperimysium\nperine\nperineal\nperineocele\nperineoplastic\nperineoplasty\nperineorrhaphy\nperineoscrotal\nperineostomy\nperineosynthesis\nperineotomy\nperineovaginal\nperineovulvar\nperinephral\nperinephrial\nperinephric\nperinephritic\nperinephritis\nperinephrium\nperineptunium\nperineum\nperineural\nperineurial\nperineuritis\nperineurium\nperinium\nperinuclear\nperiocular\nperiod\nperiodate\nperiodic\nperiodical\nperiodicalism\nperiodicalist\nperiodicalize\nperiodically\nperiodicalness\nperiodicity\nperiodide\nperiodize\nperiodogram\nperiodograph\nperiodology\nperiodontal\nperiodontia\nperiodontic\nperiodontist\nperiodontitis\nperiodontium\nperiodontoclasia\nperiodontologist\nperiodontology\nperiodontum\nperiodoscope\nperioeci\nperioecians\nperioecic\nperioecid\nperioecus\nperioesophageal\nperioikoi\nperiomphalic\nperionychia\nperionychium\nperionyx\nperionyxis\nperioophoritis\nperiophthalmic\nperiophthalmitis\nperiople\nperioplic\nperioptic\nperioptometry\nperioral\nperiorbit\nperiorbita\nperiorbital\nperiorchitis\nperiost\nperiostea\nperiosteal\nperiosteitis\nperiosteoalveolar\nperiosteoma\nperiosteomedullitis\nperiosteomyelitis\nperiosteophyte\nperiosteorrhaphy\nperiosteotome\nperiosteotomy\nperiosteous\nperiosteum\nperiostitic\nperiostitis\nperiostoma\nperiostosis\nperiostotomy\nperiostracal\nperiostracum\nperiotic\nperiovular\nperipachymeningitis\nperipancreatic\nperipancreatitis\nperipapillary\nPeripatetic\nperipatetic\nperipatetical\nperipatetically\nperipateticate\nPeripateticism\nPeripatidae\nPeripatidea\nperipatize\nperipatoid\nPeripatopsidae\nPeripatopsis\nPeripatus\nperipenial\nperipericarditis\nperipetalous\nperipetasma\nperipeteia\nperipetia\nperipety\nperiphacitis\nperipharyngeal\nperipherad\nperipheral\nperipherally\nperipherial\nperipheric\nperipherical\nperipherically\nperipherocentral\nperipheroceptor\nperipheromittor\nperipheroneural\nperipherophose\nperiphery\nperiphlebitic\nperiphlebitis\nperiphractic\nperiphrase\nperiphrases\nperiphrasis\nperiphrastic\nperiphrastical\nperiphrastically\nperiphraxy\nperiphyllum\nperiphyse\nperiphysis\nPeriplaneta\nperiplasm\nperiplast\nperiplastic\nperiplegmatic\nperipleural\nperipleuritis\nPeriploca\nperiplus\nperipneumonia\nperipneumonic\nperipneumony\nperipneustic\nperipolar\nperipolygonal\nperiportal\nperiproct\nperiproctal\nperiproctitis\nperiproctous\nperiprostatic\nperiprostatitis\nperipteral\nperipterous\nperiptery\nperipylephlebitis\nperipyloric\nperique\nperirectal\nperirectitis\nperirenal\nperisalpingitis\nperisarc\nperisarcal\nperisarcous\nperisaturnium\nperiscian\nperiscians\nperiscii\nperisclerotic\nperiscopal\nperiscope\nperiscopic\nperiscopical\nperiscopism\nperish\nperishability\nperishable\nperishableness\nperishably\nperished\nperishing\nperishingly\nperishless\nperishment\nperisigmoiditis\nperisinuitis\nperisinuous\nperisinusitis\nperisoma\nperisomal\nperisomatic\nperisome\nperisomial\nperisperm\nperispermal\nperispermatitis\nperispermic\nperisphere\nperispheric\nperispherical\nperisphinctean\nPerisphinctes\nPerisphinctidae\nperisphinctoid\nperisplanchnic\nperisplanchnitis\nperisplenetic\nperisplenic\nperisplenitis\nperispome\nperispomenon\nperispondylic\nperispondylitis\nperispore\nPerisporiaceae\nperisporiaceous\nPerisporiales\nperissad\nperissodactyl\nPerissodactyla\nperissodactylate\nperissodactyle\nperissodactylic\nperissodactylism\nperissodactylous\nperissologic\nperissological\nperissology\nperissosyllabic\nperistalith\nperistalsis\nperistaltic\nperistaltically\nperistaphyline\nperistaphylitis\nperistele\nperisterite\nperisteromorph\nPeristeromorphae\nperisteromorphic\nperisteromorphous\nperisteronic\nperisterophily\nperisteropod\nperisteropodan\nperisteropode\nPeristeropodes\nperisteropodous\nperistethium\nperistole\nperistoma\nperistomal\nperistomatic\nperistome\nperistomial\nperistomium\nperistrephic\nperistrephical\nperistrumitis\nperistrumous\nperistylar\nperistyle\nperistylium\nperistylos\nperistylum\nperisynovial\nperisystole\nperisystolic\nperit\nperite\nperitectic\nperitendineum\nperitenon\nperithece\nperithecial\nperithecium\nperithelial\nperithelioma\nperithelium\nperithoracic\nperithyreoiditis\nperithyroiditis\nperitomize\nperitomous\nperitomy\nperitoneal\nperitonealgia\nperitoneally\nperitoneocentesis\nperitoneoclysis\nperitoneomuscular\nperitoneopathy\nperitoneopericardial\nperitoneopexy\nperitoneoplasty\nperitoneoscope\nperitoneoscopy\nperitoneotomy\nperitoneum\nperitonism\nperitonital\nperitonitic\nperitonitis\nperitonsillar\nperitonsillitis\nperitracheal\nperitrema\nperitrematous\nperitreme\nperitrich\nPeritricha\nperitrichan\nperitrichic\nperitrichous\nperitrichously\nperitroch\nperitrochal\nperitrochanteric\nperitrochium\nperitrochoid\nperitropal\nperitrophic\nperitropous\nperityphlic\nperityphlitic\nperityphlitis\nperiumbilical\nperiungual\nperiuranium\nperiureteric\nperiureteritis\nperiurethral\nperiurethritis\nperiuterine\nperiuvular\nperivaginal\nperivaginitis\nperivascular\nperivasculitis\nperivenous\nperivertebral\nperivesical\nperivisceral\nperivisceritis\nperivitellin\nperivitelline\nperiwig\nperiwigpated\nperiwinkle\nperiwinkled\nperiwinkler\nperizonium\nperjink\nperjinkety\nperjinkities\nperjinkly\nperjure\nperjured\nperjuredly\nperjuredness\nperjurer\nperjuress\nperjurious\nperjuriously\nperjuriousness\nperjurous\nperjury\nperjurymonger\nperjurymongering\nperk\nperkily\nPerkin\nperkin\nperkiness\nperking\nperkingly\nperkish\nperknite\nperky\nPerla\nperlaceous\nPerlaria\nperle\nperlection\nperlid\nPerlidae\nperligenous\nperlingual\nperlingually\nperlite\nperlitic\nperloir\nperlustrate\nperlustration\nperlustrator\nperm\npermafrost\nPermalloy\npermalloy\npermanence\npermanency\npermanent\npermanently\npermanentness\npermanganate\npermanganic\npermansive\npermeability\npermeable\npermeableness\npermeably\npermeameter\npermeance\npermeant\npermeate\npermeation\npermeative\npermeator\nPermiak\nPermian\npermillage\npermirific\npermissibility\npermissible\npermissibleness\npermissibly\npermission\npermissioned\npermissive\npermissively\npermissiveness\npermissory\npermit\npermittable\npermitted\npermittedly\npermittee\npermitter\npermittivity\npermixture\nPermocarboniferous\npermonosulphuric\npermoralize\npermutability\npermutable\npermutableness\npermutably\npermutate\npermutation\npermutational\npermutationist\npermutator\npermutatorial\npermutatory\npermute\npermuter\npern\npernancy\npernasal\npernavigate\nPernettia\npernicious\nperniciously\nperniciousness\npernicketiness\npernickety\npernine\nPernis\npernitrate\npernitric\npernoctation\npernor\npernyi\nperoba\nperobrachius\nperocephalus\nperochirus\nperodactylus\nPerodipus\nPerognathinae\nPerognathus\nPeromedusae\nPeromela\nperomelous\nperomelus\nPeromyscus\nperonate\nperoneal\nperoneocalcaneal\nperoneotarsal\nperoneotibial\nperonial\nperonium\nPeronospora\nPeronosporaceae\nperonosporaceous\nPeronosporales\nperopod\nPeropoda\nperopodous\nperopus\nperoral\nperorally\nperorate\nperoration\nperorational\nperorative\nperorator\nperoratorical\nperoratorically\nperoratory\nperosis\nperosmate\nperosmic\nperosomus\nperotic\nperovskite\nperoxidase\nperoxidate\nperoxidation\nperoxide\nperoxidic\nperoxidize\nperoxidizement\nperoxy\nperoxyl\nperozonid\nperozonide\nperpend\nperpendicular\nperpendicularity\nperpendicularly\nperpera\nperperfect\nperpetrable\nperpetrate\nperpetration\nperpetrator\nperpetratress\nperpetratrix\nperpetuable\nperpetual\nperpetualism\nperpetualist\nperpetuality\nperpetually\nperpetualness\nperpetuana\nperpetuance\nperpetuant\nperpetuate\nperpetuation\nperpetuator\nperpetuity\nperplantar\nperplex\nperplexable\nperplexed\nperplexedly\nperplexedness\nperplexer\nperplexing\nperplexingly\nperplexity\nperplexment\nperplication\nperquadrat\nperquest\nperquisite\nperquisition\nperquisitor\nperradial\nperradially\nperradiate\nperradius\nperridiculous\nperrier\nPerrinist\nperron\nperruche\nperrukery\nperruthenate\nperruthenic\nPerry\nperry\nperryman\nPersae\npersalt\nperscent\nperscribe\nperscrutate\nperscrutation\nperscrutator\nperse\nPersea\npersecute\npersecutee\npersecuting\npersecutingly\npersecution\npersecutional\npersecutive\npersecutiveness\npersecutor\npersecutory\npersecutress\npersecutrix\nPerseid\nperseite\nperseitol\nperseity\npersentiscency\nPersephassa\nPersephone\nPersepolitan\nperseverance\nperseverant\nperseverate\nperseveration\npersevere\npersevering\nperseveringly\nPersian\nPersianist\nPersianization\nPersianize\nPersic\nPersicaria\npersicary\nPersicize\npersico\npersicot\npersienne\npersiennes\npersiflage\npersiflate\npersilicic\npersimmon\nPersis\npersis\nPersism\npersist\npersistence\npersistency\npersistent\npersistently\npersister\npersisting\npersistingly\npersistive\npersistively\npersistiveness\npersnickety\nperson\npersona\npersonable\npersonableness\npersonably\npersonage\npersonal\npersonalia\npersonalism\npersonalist\npersonalistic\npersonality\npersonalization\npersonalize\npersonally\npersonalness\npersonalty\npersonate\npersonately\npersonating\npersonation\npersonative\npersonator\npersoned\npersoneity\npersonifiable\npersonifiant\npersonification\npersonificative\npersonificator\npersonifier\npersonify\npersonization\npersonize\npersonnel\npersonship\nperspection\nperspective\nperspectived\nperspectiveless\nperspectively\nperspectivity\nperspectograph\nperspectometer\nperspicacious\nperspicaciously\nperspicaciousness\nperspicacity\nperspicuity\nperspicuous\nperspicuously\nperspicuousness\nperspirability\nperspirable\nperspirant\nperspirate\nperspiration\nperspirative\nperspiratory\nperspire\nperspiringly\nperspiry\nperstringe\nperstringement\npersuadability\npersuadable\npersuadableness\npersuadably\npersuade\npersuaded\npersuadedly\npersuadedness\npersuader\npersuadingly\npersuasibility\npersuasible\npersuasibleness\npersuasibly\npersuasion\npersuasive\npersuasively\npersuasiveness\npersuasory\npersulphate\npersulphide\npersulphocyanate\npersulphocyanic\npersulphuric\npersymmetric\npersymmetrical\npert\npertain\npertaining\npertainment\nperten\nperthiocyanate\nperthiocyanic\nperthiotophyre\nperthite\nperthitic\nperthitically\nperthosite\npertinacious\npertinaciously\npertinaciousness\npertinacity\npertinence\npertinency\npertinent\npertinently\npertinentness\npertish\npertly\npertness\nperturb\nperturbability\nperturbable\nperturbance\nperturbancy\nperturbant\nperturbate\nperturbation\nperturbational\nperturbatious\nperturbative\nperturbator\nperturbatory\nperturbatress\nperturbatrix\nperturbed\nperturbedly\nperturbedness\nperturber\nperturbing\nperturbingly\nperturbment\nPertusaria\nPertusariaceae\npertuse\npertused\npertusion\npertussal\npertussis\nperty\nPeru\nPerugian\nPeruginesque\nperuke\nperukeless\nperukier\nperukiership\nperula\nPerularia\nperulate\nperule\nPerun\nperusable\nperusal\nperuse\nperuser\nPeruvian\nPeruvianize\npervade\npervadence\npervader\npervading\npervadingly\npervadingness\npervagate\npervagation\npervalvar\npervasion\npervasive\npervasively\npervasiveness\nperverse\nperversely\nperverseness\nperversion\nperversity\nperversive\npervert\nperverted\npervertedly\npervertedness\nperverter\npervertibility\npervertible\npervertibly\npervertive\nperviability\nperviable\npervicacious\npervicaciously\npervicaciousness\npervicacity\npervigilium\npervious\nperviously\nperviousness\npervulgate\npervulgation\nperwitsky\npes\npesa\nPesach\npesade\npesage\nPesah\npeseta\npeshkar\npeshkash\npeshwa\npeshwaship\npeskily\npeskiness\npesky\npeso\npess\npessary\npessimal\npessimism\npessimist\npessimistic\npessimistically\npessimize\npessimum\npessomancy\npessoner\npessular\npessulus\npest\nPestalozzian\nPestalozzianism\npeste\npester\npesterer\npesteringly\npesterment\npesterous\npestersome\npestful\npesthole\npesthouse\npesticidal\npesticide\npestiduct\npestiferous\npestiferously\npestiferousness\npestifugous\npestify\npestilence\npestilenceweed\npestilencewort\npestilent\npestilential\npestilentially\npestilentialness\npestilently\npestle\npestological\npestologist\npestology\npestproof\npet\npetal\npetalage\npetaled\nPetalia\npetaliferous\npetaliform\nPetaliidae\npetaline\npetalism\npetalite\npetalled\npetalless\npetallike\npetalocerous\npetalodic\npetalodont\npetalodontid\nPetalodontidae\npetalodontoid\nPetalodus\npetalody\npetaloid\npetaloidal\npetaloideous\npetalomania\npetalon\nPetalostemon\npetalous\npetalwise\npetaly\npetard\npetardeer\npetardier\npetary\nPetasites\npetasos\npetasus\npetaurine\npetaurist\nPetaurista\nPetauristidae\nPetauroides\nPetaurus\npetchary\npetcock\nPete\npete\npeteca\npetechiae\npetechial\npetechiate\npeteman\nPeter\npeter\nPeterkin\nPeterloo\npeterman\npeternet\npetersham\npeterwort\npetful\npetiolar\npetiolary\nPetiolata\npetiolate\npetiolated\npetiole\npetioled\nPetioliventres\npetiolular\npetiolulate\npetiolule\npetiolus\npetit\npetite\npetiteness\npetitgrain\npetition\npetitionable\npetitional\npetitionarily\npetitionary\npetitionee\npetitioner\npetitionist\npetitionproof\npetitor\npetitory\nPetiveria\nPetiveriaceae\npetkin\npetling\npeto\nPetr\nPetrarchal\nPetrarchan\nPetrarchesque\nPetrarchian\nPetrarchianism\nPetrarchism\nPetrarchist\nPetrarchistic\nPetrarchistical\nPetrarchize\npetrary\npetre\nPetrea\npetrean\npetreity\npetrel\npetrescence\npetrescent\nPetricola\nPetricolidae\npetricolous\npetrie\npetrifaction\npetrifactive\npetrifiable\npetrific\npetrificant\npetrificate\npetrification\npetrified\npetrifier\npetrify\nPetrine\nPetrinism\nPetrinist\nPetrinize\npetrissage\nPetrobium\nPetrobrusian\npetrochemical\npetrochemistry\nPetrogale\npetrogenesis\npetrogenic\npetrogeny\npetroglyph\npetroglyphic\npetroglyphy\npetrograph\npetrographer\npetrographic\npetrographical\npetrographically\npetrography\npetrohyoid\npetrol\npetrolage\npetrolatum\npetrolean\npetrolene\npetroleous\npetroleum\npetrolic\npetroliferous\npetrolific\npetrolist\npetrolithic\npetrolization\npetrolize\npetrologic\npetrological\npetrologically\npetromastoid\nPetromyzon\nPetromyzonidae\npetromyzont\nPetromyzontes\nPetromyzontidae\npetromyzontoid\npetronel\npetronella\npetropharyngeal\npetrophilous\npetrosa\npetrosal\nPetroselinum\npetrosilex\npetrosiliceous\npetrosilicious\npetrosphenoid\npetrosphenoidal\npetrosphere\npetrosquamosal\npetrosquamous\npetrostearin\npetrostearine\npetrosum\npetrotympanic\npetrous\npetroxolin\npettable\npetted\npettedly\npettedness\npetter\npettichaps\npetticoat\npetticoated\npetticoaterie\npetticoatery\npetticoatism\npetticoatless\npetticoaty\npettifog\npettifogger\npettifoggery\npettifogging\npettifogulize\npettifogulizer\npettily\npettiness\npettingly\npettish\npettitoes\npettle\npetty\npettyfog\npetulance\npetulancy\npetulant\npetulantly\npetune\nPetunia\npetuntse\npetwood\npetzite\nPeucedanum\nPeucetii\npeucites\npeuhl\nPeul\nPeumus\nPeutingerian\npew\npewage\npewdom\npewee\npewfellow\npewful\npewholder\npewing\npewit\npewless\npewmate\npewter\npewterer\npewterwort\npewtery\npewy\nPeyerian\npeyote\npeyotl\npeyton\npeytrel\npezantic\nPeziza\nPezizaceae\npezizaceous\npezizaeform\nPezizales\npeziziform\npezizoid\npezograph\nPezophaps\nPfaffian\npfeffernuss\nPfeifferella\npfennig\npfui\npfund\nPhaca\nPhacelia\nphacelite\nphacella\nPhacidiaceae\nPhacidiales\nphacitis\nphacoanaphylaxis\nphacocele\nphacochere\nphacocherine\nphacochoere\nphacochoerid\nphacochoerine\nphacochoeroid\nPhacochoerus\nphacocyst\nphacocystectomy\nphacocystitis\nphacoglaucoma\nphacoid\nphacoidal\nphacoidoscope\nphacolite\nphacolith\nphacolysis\nphacomalacia\nphacometer\nphacopid\nPhacopidae\nPhacops\nphacosclerosis\nphacoscope\nphacotherapy\nPhaeacian\nPhaedo\nphaeism\nphaenantherous\nphaenanthery\nphaenogam\nPhaenogamia\nphaenogamian\nphaenogamic\nphaenogamous\nphaenogenesis\nphaenogenetic\nphaenological\nphaenology\nphaenomenal\nphaenomenism\nphaenomenon\nphaenozygous\nphaeochrous\nPhaeodaria\nphaeodarian\nphaeophore\nPhaeophyceae\nphaeophycean\nphaeophyceous\nphaeophyll\nPhaeophyta\nphaeophytin\nphaeoplast\nPhaeosporales\nphaeospore\nPhaeosporeae\nphaeosporous\nPhaet\nPhaethon\nPhaethonic\nPhaethontes\nPhaethontic\nPhaethontidae\nPhaethusa\nphaeton\nphage\nphagedena\nphagedenic\nphagedenical\nphagedenous\nPhagineae\nphagocytable\nphagocytal\nphagocyte\nphagocyter\nphagocytic\nphagocytism\nphagocytize\nphagocytoblast\nphagocytolysis\nphagocytolytic\nphagocytose\nphagocytosis\nphagodynamometer\nphagolysis\nphagolytic\nphagomania\nphainolion\nPhainopepla\nPhajus\nPhalacrocoracidae\nphalacrocoracine\nPhalacrocorax\nphalacrosis\nPhalaecean\nPhalaecian\nPhalaenae\nPhalaenidae\nphalaenopsid\nPhalaenopsis\nphalangal\nphalange\nphalangeal\nphalangean\nphalanger\nPhalangeridae\nPhalangerinae\nphalangerine\nphalanges\nphalangette\nphalangian\nphalangic\nphalangid\nPhalangida\nphalangidan\nPhalangidea\nphalangidean\nPhalangides\nphalangiform\nPhalangigrada\nphalangigrade\nphalangigrady\nphalangiid\nPhalangiidae\nphalangist\nPhalangista\nPhalangistidae\nphalangistine\nphalangite\nphalangitic\nphalangitis\nPhalangium\nphalangologist\nphalangology\nphalansterial\nphalansterian\nphalansterianism\nphalansteric\nphalansterism\nphalansterist\nphalanstery\nphalanx\nphalanxed\nphalarica\nPhalaris\nPhalarism\nphalarope\nPhalaropodidae\nphalera\nphalerate\nphalerated\nPhaleucian\nPhallaceae\nphallaceous\nPhallales\nphallalgia\nphallaneurysm\nphallephoric\nphallic\nphallical\nphallicism\nphallicist\nphallin\nphallism\nphallist\nphallitis\nphallocrypsis\nphallodynia\nphalloid\nphalloncus\nphalloplasty\nphallorrhagia\nphallus\nPhanar\nPhanariot\nPhanariote\nphanatron\nphaneric\nphanerite\nPhanerocarpae\nPhanerocarpous\nPhanerocephala\nphanerocephalous\nphanerocodonic\nphanerocryst\nphanerocrystalline\nphanerogam\nPhanerogamia\nphanerogamian\nphanerogamic\nphanerogamous\nphanerogamy\nphanerogenetic\nphanerogenic\nPhaneroglossa\nphaneroglossal\nphaneroglossate\nphaneromania\nphaneromere\nphaneromerous\nphaneroscope\nphanerosis\nphanerozoic\nphanerozonate\nPhanerozonia\nphanic\nphano\nphansigar\nphantascope\nphantasia\nPhantasiast\nPhantasiastic\nphantasist\nphantasize\nphantasm\nphantasma\nphantasmagoria\nphantasmagorial\nphantasmagorially\nphantasmagorian\nphantasmagoric\nphantasmagorical\nphantasmagorist\nphantasmagory\nphantasmal\nphantasmalian\nphantasmality\nphantasmally\nphantasmascope\nphantasmata\nPhantasmatic\nphantasmatic\nphantasmatical\nphantasmatically\nphantasmatography\nphantasmic\nphantasmical\nphantasmically\nPhantasmist\nphantasmogenesis\nphantasmogenetic\nphantasmograph\nphantasmological\nphantasmology\nphantast\nphantasy\nphantom\nphantomatic\nphantomic\nphantomical\nphantomically\nPhantomist\nphantomize\nphantomizer\nphantomland\nphantomlike\nphantomnation\nphantomry\nphantomship\nphantomy\nphantoplex\nphantoscope\nPharaoh\nPharaonic\nPharaonical\nPharbitis\nphare\nPhareodus\nPharian\nPharisaean\nPharisaic\npharisaical\npharisaically\npharisaicalness\nPharisaism\nPharisaist\nPharisean\nPharisee\npharisee\nPhariseeism\npharmacal\npharmaceutic\npharmaceutical\npharmaceutically\npharmaceutics\npharmaceutist\npharmacic\npharmacist\npharmacite\npharmacodiagnosis\npharmacodynamic\npharmacodynamical\npharmacodynamics\npharmacoendocrinology\npharmacognosia\npharmacognosis\npharmacognosist\npharmacognostical\npharmacognostically\npharmacognostics\npharmacognosy\npharmacography\npharmacolite\npharmacologia\npharmacologic\npharmacological\npharmacologically\npharmacologist\npharmacology\npharmacomania\npharmacomaniac\npharmacomaniacal\npharmacometer\npharmacopedia\npharmacopedic\npharmacopedics\npharmacopeia\npharmacopeial\npharmacopeian\npharmacophobia\npharmacopoeia\npharmacopoeial\npharmacopoeian\npharmacopoeist\npharmacopolist\npharmacoposia\npharmacopsychology\npharmacosiderite\npharmacotherapy\npharmacy\npharmakos\npharmic\npharmuthi\npharology\nPharomacrus\npharos\nPharsalian\npharyngal\npharyngalgia\npharyngalgic\npharyngeal\npharyngectomy\npharyngemphraxis\npharynges\npharyngic\npharyngismus\npharyngitic\npharyngitis\npharyngoamygdalitis\npharyngobranch\npharyngobranchial\npharyngobranchiate\nPharyngobranchii\npharyngocele\npharyngoceratosis\npharyngodynia\npharyngoepiglottic\npharyngoepiglottidean\npharyngoesophageal\npharyngoglossal\npharyngoglossus\npharyngognath\nPharyngognathi\npharyngognathous\npharyngographic\npharyngography\npharyngokeratosis\npharyngolaryngeal\npharyngolaryngitis\npharyngolith\npharyngological\npharyngology\npharyngomaxillary\npharyngomycosis\npharyngonasal\npharyngopalatine\npharyngopalatinus\npharyngoparalysis\npharyngopathy\npharyngoplasty\npharyngoplegia\npharyngoplegic\npharyngoplegy\npharyngopleural\nPharyngopneusta\npharyngopneustal\npharyngorhinitis\npharyngorhinoscopy\npharyngoscleroma\npharyngoscope\npharyngoscopy\npharyngospasm\npharyngotherapy\npharyngotomy\npharyngotonsillitis\npharyngotyphoid\npharyngoxerosis\npharynogotome\npharynx\nPhascaceae\nphascaceous\nPhascogale\nPhascolarctinae\nPhascolarctos\nphascolome\nPhascolomyidae\nPhascolomys\nPhascolonus\nPhascum\nphase\nphaseal\nphaseless\nphaselin\nphasemeter\nphasemy\nPhaseolaceae\nphaseolin\nphaseolous\nphaseolunatin\nPhaseolus\nphaseometer\nphases\nPhasianella\nPhasianellidae\nphasianic\nphasianid\nPhasianidae\nPhasianinae\nphasianine\nphasianoid\nPhasianus\nphasic\nPhasiron\nphasis\nphasm\nphasma\nphasmatid\nPhasmatida\nPhasmatidae\nPhasmatodea\nphasmatoid\nPhasmatoidea\nphasmatrope\nphasmid\nPhasmida\nPhasmidae\nphasmoid\nphasogeneous\nphasotropy\npheal\npheasant\npheasantry\npheasantwood\nPhebe\nPhecda\nPhegopteris\nPheidole\nphellandrene\nphellem\nPhellodendron\nphelloderm\nphellodermal\nphellogen\nphellogenetic\nphellogenic\nphellonic\nphelloplastic\nphelloplastics\nphelonion\nphemic\nPhemie\nphenacaine\nphenacetin\nphenaceturic\nphenacite\nPhenacodontidae\nPhenacodus\nphenacyl\nphenakism\nphenakistoscope\nPhenalgin\nphenanthrene\nphenanthridine\nphenanthridone\nphenanthrol\nphenanthroline\nphenarsine\nphenate\nphenazine\nphenazone\nphene\nphenegol\nphenene\nphenethyl\nphenetidine\nphenetole\nphengite\nphengitical\nphenic\nphenicate\nphenicious\nphenicopter\nphenin\nphenmiazine\nphenobarbital\nphenocoll\nphenocopy\nphenocryst\nphenocrystalline\nphenogenesis\nphenogenetic\nphenol\nphenolate\nphenolic\nphenolization\nphenolize\nphenological\nphenologically\nphenologist\nphenology\nphenoloid\nphenolphthalein\nphenolsulphonate\nphenolsulphonephthalein\nphenolsulphonic\nphenomena\nphenomenal\nphenomenalism\nphenomenalist\nphenomenalistic\nphenomenalistically\nphenomenality\nphenomenalization\nphenomenalize\nphenomenally\nphenomenic\nphenomenical\nphenomenism\nphenomenist\nphenomenistic\nphenomenize\nphenomenological\nphenomenologically\nphenomenology\nphenomenon\nphenoplast\nphenoplastic\nphenoquinone\nphenosafranine\nphenosal\nphenospermic\nphenospermy\nphenothiazine\nphenotype\nphenotypic\nphenotypical\nphenotypically\nphenoxazine\nphenoxid\nphenoxide\nphenozygous\nPheny\nphenyl\nphenylacetaldehyde\nphenylacetamide\nphenylacetic\nphenylalanine\nphenylamide\nphenylamine\nphenylate\nphenylation\nphenylboric\nphenylcarbamic\nphenylcarbimide\nphenylene\nphenylenediamine\nphenylethylene\nphenylglycine\nphenylglycolic\nphenylglyoxylic\nphenylhydrazine\nphenylhydrazone\nphenylic\nphenylmethane\npheon\npheophyl\npheophyll\npheophytin\nPherecratean\nPherecratian\nPherecratic\nPherephatta\npheretrer\nPherkad\nPherophatta\nPhersephatta\nPhersephoneia\nphew\nphi\nphial\nphiale\nphialful\nphialide\nphialine\nphiallike\nphialophore\nphialospore\nPhidiac\nPhidian\nPhigalian\nPhil\nPhiladelphian\nPhiladelphianism\nphiladelphite\nPhiladelphus\nphiladelphy\nphilalethist\nphilamot\nPhilander\nphilander\nphilanderer\nphilanthid\nPhilanthidae\nphilanthrope\nphilanthropian\nphilanthropic\nphilanthropical\nphilanthropically\nphilanthropinism\nphilanthropinist\nPhilanthropinum\nphilanthropism\nphilanthropist\nphilanthropistic\nphilanthropize\nphilanthropy\nPhilanthus\nphilantomba\nphilarchaist\nphilaristocracy\nphilatelic\nphilatelical\nphilatelically\nphilatelism\nphilatelist\nphilatelistic\nphilately\nPhilathea\nphilathletic\nphilematology\nPhilepitta\nPhilepittidae\nPhilesia\nPhiletaerus\nphilharmonic\nphilhellene\nphilhellenic\nphilhellenism\nphilhellenist\nphilhippic\nphilhymnic\nphiliater\nPhilip\nPhilippa\nPhilippan\nPhilippe\nPhilippian\nPhilippic\nphilippicize\nPhilippine\nPhilippines\nPhilippism\nPhilippist\nPhilippistic\nPhilippizate\nphilippize\nphilippizer\nphilippus\nPhilistia\nPhilistian\nPhilistine\nPhilistinely\nPhilistinian\nPhilistinic\nPhilistinish\nPhilistinism\nPhilistinize\nPhill\nphilliloo\nPhillip\nphillipsine\nphillipsite\nPhillis\nPhillyrea\nphillyrin\nphilobiblian\nphilobiblic\nphilobiblical\nphilobiblist\nphilobotanic\nphilobotanist\nphilobrutish\nphilocalic\nphilocalist\nphilocaly\nphilocathartic\nphilocatholic\nphilocomal\nPhiloctetes\nphilocubist\nphilocynic\nphilocynical\nphilocynicism\nphilocyny\nphilodemic\nPhilodendron\nphilodespot\nphilodestructiveness\nPhilodina\nPhilodinidae\nphilodox\nphilodoxer\nphilodoxical\nphilodramatic\nphilodramatist\nphilofelist\nphilofelon\nphilogarlic\nphilogastric\nphilogeant\nphilogenitive\nphilogenitiveness\nphilograph\nphilographic\nphilogynaecic\nphilogynist\nphilogynous\nphilogyny\nPhilohela\nphilohellenian\nphilokleptic\nphiloleucosis\nphilologaster\nphilologastry\nphilologer\nphilologian\nphilologic\nphilological\nphilologically\nphilologist\nphilologistic\nphilologize\nphilologue\nphilology\nPhilomachus\nphilomath\nphilomathematic\nphilomathematical\nphilomathic\nphilomathical\nphilomathy\nphilomel\nPhilomela\nphilomelanist\nphilomuse\nphilomusical\nphilomystic\nphilonatural\nphiloneism\nPhilonian\nPhilonic\nPhilonism\nPhilonist\nphilonium\nphilonoist\nphilopagan\nphilopater\nphilopatrian\nphilopena\nphilophilosophos\nphilopig\nphiloplutonic\nphilopoet\nphilopogon\nphilopolemic\nphilopolemical\nphilopornist\nphiloprogeneity\nphiloprogenitive\nphiloprogenitiveness\nphilopterid\nPhilopteridae\nphilopublican\nphiloradical\nphilorchidaceous\nphilornithic\nphilorthodox\nphilosoph\nphilosophaster\nphilosophastering\nphilosophastry\nphilosophedom\nphilosopheme\nphilosopher\nphilosopheress\nphilosophership\nphilosophic\nphilosophical\nphilosophically\nphilosophicalness\nphilosophicide\nphilosophicohistorical\nphilosophicojuristic\nphilosophicolegal\nphilosophicoreligious\nphilosophicotheological\nphilosophism\nphilosophist\nphilosophister\nphilosophistic\nphilosophistical\nphilosophization\nphilosophize\nphilosophizer\nphilosophling\nphilosophobia\nphilosophocracy\nphilosophuncule\nphilosophunculist\nphilosophy\nphilotadpole\nphilotechnic\nphilotechnical\nphilotechnist\nphilothaumaturgic\nphilotheism\nphilotheist\nphilotheistic\nphilotheosophical\nphilotherian\nphilotherianism\nPhilotria\nPhiloxenian\nphiloxygenous\nphilozoic\nphilozoist\nphilozoonist\nphilter\nphilterer\nphilterproof\nphiltra\nphiltrum\nPhilydraceae\nphilydraceous\nPhilyra\nphimosed\nphimosis\nphimotic\nPhineas\nPhiomia\nPhiroze\nphit\nphiz\nphizes\nphizog\nphlebalgia\nphlebangioma\nphlebarteriectasia\nphlebarteriodialysis\nphlebectasia\nphlebectasis\nphlebectasy\nphlebectomy\nphlebectopia\nphlebectopy\nphlebemphraxis\nphlebenteric\nphlebenterism\nphlebitic\nphlebitis\nPhlebodium\nphlebogram\nphlebograph\nphlebographical\nphlebography\nphleboid\nphleboidal\nphlebolite\nphlebolith\nphlebolithiasis\nphlebolithic\nphlebolitic\nphlebological\nphlebology\nphlebometritis\nphlebopexy\nphleboplasty\nphleborrhage\nphleborrhagia\nphleborrhaphy\nphleborrhexis\nphlebosclerosis\nphlebosclerotic\nphlebostasia\nphlebostasis\nphlebostenosis\nphlebostrepsis\nphlebothrombosis\nphlebotome\nphlebotomic\nphlebotomical\nphlebotomically\nphlebotomist\nphlebotomization\nphlebotomize\nPhlebotomus\nphlebotomus\nphlebotomy\nPhlegethon\nPhlegethontal\nPhlegethontic\nphlegm\nphlegma\nphlegmagogue\nphlegmasia\nphlegmatic\nphlegmatical\nphlegmatically\nphlegmaticalness\nphlegmaticly\nphlegmaticness\nphlegmatism\nphlegmatist\nphlegmatous\nphlegmless\nphlegmon\nphlegmonic\nphlegmonoid\nphlegmonous\nphlegmy\nPhleum\nphlobaphene\nphlobatannin\nphloem\nphloeophagous\nphloeoterma\nphlogisma\nphlogistian\nphlogistic\nphlogistical\nphlogisticate\nphlogistication\nphlogiston\nphlogistonism\nphlogistonist\nphlogogenetic\nphlogogenic\nphlogogenous\nphlogopite\nphlogosed\nPhlomis\nphloretic\nphloroglucic\nphloroglucin\nphlorone\nphloxin\npho\nphobiac\nphobic\nphobism\nphobist\nphobophobia\nPhobos\nphoby\nphoca\nphocacean\nphocaceous\nPhocaean\nPhocaena\nPhocaenina\nphocaenine\nphocal\nPhocean\nphocenate\nphocenic\nphocenin\nPhocian\nphocid\nPhocidae\nphociform\nPhocinae\nphocine\nphocodont\nPhocodontia\nphocodontic\nPhocoena\nphocoid\nphocomelia\nphocomelous\nphocomelus\nPhoebe\nphoebe\nPhoebean\nPhoenicaceae\nphoenicaceous\nPhoenicales\nphoenicean\nPhoenician\nPhoenicianism\nPhoenicid\nphoenicite\nPhoenicize\nphoenicochroite\nPhoenicopteridae\nPhoenicopteriformes\nphoenicopteroid\nPhoenicopteroideae\nphoenicopterous\nPhoenicopterus\nPhoeniculidae\nPhoeniculus\nphoenicurous\nphoenigm\nPhoenix\nphoenix\nphoenixity\nphoenixlike\nphoh\npholad\nPholadacea\npholadian\npholadid\nPholadidae\nPholadinea\npholadoid\nPholas\npholcid\nPholcidae\npholcoid\nPholcus\npholido\npholidolite\npholidosis\nPholidota\npholidote\nPholiota\nPhoma\nPhomopsis\nphon\nphonal\nphonasthenia\nphonate\nphonation\nphonatory\nphonautogram\nphonautograph\nphonautographic\nphonautographically\nphone\nphoneidoscope\nphoneidoscopic\nPhonelescope\nphoneme\nphonemic\nphonemics\nphonendoscope\nphonesis\nphonestheme\nphonetic\nphonetical\nphonetically\nphonetician\nphoneticism\nphoneticist\nphoneticization\nphoneticize\nphoneticogrammatical\nphoneticohieroglyphic\nphonetics\nphonetism\nphonetist\nphonetization\nphonetize\nphoniatrics\nphoniatry\nphonic\nphonics\nphonikon\nphonism\nphono\nphonocamptic\nphonocinematograph\nphonodeik\nphonodynamograph\nphonoglyph\nphonogram\nphonogramic\nphonogramically\nphonogrammatic\nphonogrammatical\nphonogrammic\nphonogrammically\nphonograph\nphonographer\nphonographic\nphonographical\nphonographically\nphonographist\nphonography\nphonolite\nphonolitic\nphonologer\nphonologic\nphonological\nphonologically\nphonologist\nphonology\nphonometer\nphonometric\nphonometry\nphonomimic\nphonomotor\nphonopathy\nphonophile\nphonophobia\nphonophone\nphonophore\nphonophoric\nphonophorous\nphonophote\nphonophotography\nphonophotoscope\nphonophotoscopic\nphonoplex\nphonoscope\nphonotelemeter\nphonotype\nphonotyper\nphonotypic\nphonotypical\nphonotypically\nphonotypist\nphonotypy\nphony\nphoo\nPhora\nPhoradendron\nphoranthium\nphoresis\nphoresy\nphoria\nphorid\nPhoridae\nphorminx\nPhormium\nphorology\nphorometer\nphorometric\nphorometry\nphorone\nphoronic\nphoronid\nPhoronida\nPhoronidea\nPhoronis\nphoronomia\nphoronomic\nphoronomically\nphoronomics\nphoronomy\nPhororhacidae\nPhororhacos\nphoroscope\nphorozooid\nphos\nphose\nphosgene\nphosgenic\nphosgenite\nphosis\nphosphagen\nphospham\nphosphamic\nphosphamide\nphosphamidic\nphosphammonium\nphosphatase\nphosphate\nphosphated\nphosphatemia\nphosphatese\nphosphatic\nphosphatide\nphosphation\nphosphatization\nphosphatize\nphosphaturia\nphosphaturic\nphosphene\nphosphenyl\nphosphide\nphosphinate\nphosphine\nphosphinic\nphosphite\nphospho\nphosphoaminolipide\nphosphocarnic\nphosphocreatine\nphosphoferrite\nphosphoglycerate\nphosphoglyceric\nphosphoglycoprotein\nphospholipide\nphospholipin\nphosphomolybdate\nphosphomolybdic\nphosphonate\nphosphonic\nphosphonium\nphosphophyllite\nphosphoprotein\nphosphor\nphosphorate\nphosphore\nphosphoreal\nphosphorent\nphosphoreous\nphosphoresce\nphosphorescence\nphosphorescent\nphosphorescently\nphosphoreted\nphosphorhidrosis\nphosphori\nphosphoric\nphosphorical\nphosphoriferous\nphosphorism\nphosphorite\nphosphoritic\nphosphorize\nphosphorogen\nphosphorogenic\nphosphorograph\nphosphorographic\nphosphorography\nphosphoroscope\nphosphorous\nphosphoruria\nphosphorus\nphosphoryl\nphosphorylase\nphosphorylation\nphosphosilicate\nphosphotartaric\nphosphotungstate\nphosphotungstic\nphosphowolframic\nphosphuranylite\nphosphuret\nphosphuria\nphosphyl\nphossy\nphot\nphotaesthesia\nphotaesthesis\nphotaesthetic\nphotal\nphotalgia\nphotechy\nphotelectrograph\nphoteolic\nphoterythrous\nphotesthesis\nphotic\nphotics\nPhotinia\nPhotinian\nPhotinianism\nphotism\nphotistic\nphoto\nphotoactinic\nphotoactivate\nphotoactivation\nphotoactive\nphotoactivity\nphotoaesthetic\nphotoalbum\nphotoalgraphy\nphotoanamorphosis\nphotoaquatint\nPhotobacterium\nphotobathic\nphotobiotic\nphotobromide\nphotocampsis\nphotocatalysis\nphotocatalyst\nphotocatalytic\nphotocatalyzer\nphotocell\nphotocellulose\nphotoceptor\nphotoceramic\nphotoceramics\nphotoceramist\nphotochemic\nphotochemical\nphotochemically\nphotochemigraphy\nphotochemist\nphotochemistry\nphotochloride\nphotochlorination\nphotochromascope\nphotochromatic\nphotochrome\nphotochromic\nphotochromography\nphotochromolithograph\nphotochromoscope\nphotochromotype\nphotochromotypy\nphotochromy\nphotochronograph\nphotochronographic\nphotochronographical\nphotochronographically\nphotochronography\nphotocollograph\nphotocollographic\nphotocollography\nphotocollotype\nphotocombustion\nphotocompose\nphotocomposition\nphotoconductivity\nphotocopier\nphotocopy\nphotocrayon\nphotocurrent\nphotodecomposition\nphotodensitometer\nphotodermatic\nphotodermatism\nphotodisintegration\nphotodissociation\nphotodrama\nphotodramatic\nphotodramatics\nphotodramatist\nphotodramaturgic\nphotodramaturgy\nphotodrome\nphotodromy\nphotodynamic\nphotodynamical\nphotodynamically\nphotodynamics\nphotodysphoria\nphotoelastic\nphotoelasticity\nphotoelectric\nphotoelectrical\nphotoelectrically\nphotoelectricity\nphotoelectron\nphotoelectrotype\nphotoemission\nphotoemissive\nphotoengrave\nphotoengraver\nphotoengraving\nphotoepinastic\nphotoepinastically\nphotoepinasty\nphotoesthesis\nphotoesthetic\nphotoetch\nphotoetcher\nphotoetching\nphotofilm\nphotofinish\nphotofinisher\nphotofinishing\nphotofloodlamp\nphotogalvanograph\nphotogalvanographic\nphotogalvanography\nphotogastroscope\nphotogelatin\nphotogen\nphotogene\nphotogenetic\nphotogenic\nphotogenically\nphotogenous\nphotoglyph\nphotoglyphic\nphotoglyphography\nphotoglyphy\nphotoglyptic\nphotoglyptography\nphotogram\nphotogrammeter\nphotogrammetric\nphotogrammetrical\nphotogrammetry\nphotograph\nphotographable\nphotographee\nphotographer\nphotographeress\nphotographess\nphotographic\nphotographical\nphotographically\nphotographist\nphotographize\nphotographometer\nphotography\nphotogravure\nphotogravurist\nphotogyric\nphotohalide\nphotoheliograph\nphotoheliographic\nphotoheliography\nphotoheliometer\nphotohyponastic\nphotohyponastically\nphotohyponasty\nphotoimpression\nphotoinactivation\nphotoinduction\nphotoinhibition\nphotointaglio\nphotoionization\nphotoisomeric\nphotoisomerization\nphotokinesis\nphotokinetic\nphotolith\nphotolitho\nphotolithograph\nphotolithographer\nphotolithographic\nphotolithography\nphotologic\nphotological\nphotologist\nphotology\nphotoluminescence\nphotoluminescent\nphotolysis\nphotolyte\nphotolytic\nphotoma\nphotomacrograph\nphotomagnetic\nphotomagnetism\nphotomap\nphotomapper\nphotomechanical\nphotomechanically\nphotometeor\nphotometer\nphotometric\nphotometrical\nphotometrically\nphotometrician\nphotometrist\nphotometrograph\nphotometry\nphotomezzotype\nphotomicrogram\nphotomicrograph\nphotomicrographer\nphotomicrographic\nphotomicrography\nphotomicroscope\nphotomicroscopic\nphotomicroscopy\nphotomontage\nphotomorphosis\nphotomural\nphoton\nphotonastic\nphotonasty\nphotonegative\nphotonephograph\nphotonephoscope\nphotoneutron\nphotonosus\nphotooxidation\nphotooxidative\nphotopathic\nphotopathy\nphotoperceptive\nphotoperimeter\nphotoperiod\nphotoperiodic\nphotoperiodism\nphotophane\nphotophile\nphotophilic\nphotophilous\nphotophily\nphotophobe\nphotophobia\nphotophobic\nphotophobous\nphotophone\nphotophonic\nphotophony\nphotophore\nphotophoresis\nphotophosphorescent\nphotophygous\nphotophysical\nphotophysicist\nphotopia\nphotopic\nphotopile\nphotopitometer\nphotoplay\nphotoplayer\nphotoplaywright\nphotopography\nphotopolarigraph\nphotopolymerization\nphotopositive\nphotoprint\nphotoprinter\nphotoprinting\nphotoprocess\nphotoptometer\nphotoradio\nphotoradiogram\nphotoreception\nphotoreceptive\nphotoreceptor\nphotoregression\nphotorelief\nphotoresistance\nphotosalt\nphotosantonic\nphotoscope\nphotoscopic\nphotoscopy\nphotosculptural\nphotosculpture\nphotosensitive\nphotosensitiveness\nphotosensitivity\nphotosensitization\nphotosensitize\nphotosensitizer\nphotosensory\nphotospectroheliograph\nphotospectroscope\nphotospectroscopic\nphotospectroscopical\nphotospectroscopy\nphotosphere\nphotospheric\nphotostability\nphotostable\nPhotostat\nphotostat\nphotostationary\nphotostereograph\nphotosurveying\nphotosyntax\nphotosynthate\nphotosynthesis\nphotosynthesize\nphotosynthetic\nphotosynthetically\nphotosynthometer\nphototachometer\nphototachometric\nphototachometrical\nphototachometry\nphototactic\nphototactically\nphototactism\nphototaxis\nphototaxy\nphototechnic\nphototelegraph\nphototelegraphic\nphototelegraphically\nphototelegraphy\nphototelephone\nphototelephony\nphototelescope\nphototelescopic\nphototheodolite\nphototherapeutic\nphototherapeutics\nphototherapic\nphototherapist\nphototherapy\nphotothermic\nphototonic\nphototonus\nphototopographic\nphototopographical\nphototopography\nphototrichromatic\nphototrope\nphototrophic\nphototrophy\nphototropic\nphototropically\nphototropism\nphototropy\nphototube\nphototype\nphototypic\nphototypically\nphototypist\nphototypographic\nphototypography\nphototypy\nphotovisual\nphotovitrotype\nphotovoltaic\nphotoxylography\nphotozinco\nphotozincograph\nphotozincographic\nphotozincography\nphotozincotype\nphotozincotypy\nphoturia\nPhractamphibia\nphragma\nPhragmidium\nPhragmites\nphragmocone\nphragmoconic\nPhragmocyttares\nphragmocyttarous\nphragmoid\nphragmosis\nphrasable\nphrasal\nphrasally\nphrase\nphraseable\nphraseless\nphrasemaker\nphrasemaking\nphraseman\nphrasemonger\nphrasemongering\nphrasemongery\nphraseogram\nphraseograph\nphraseographic\nphraseography\nphraseological\nphraseologically\nphraseologist\nphraseology\nphraser\nphrasify\nphrasiness\nphrasing\nphrasy\nphrator\nphratral\nphratria\nphratriac\nphratrial\nphratry\nphreatic\nphreatophyte\nphrenesia\nphrenesiac\nphrenesis\nphrenetic\nphrenetically\nphreneticness\nphrenic\nphrenicectomy\nphrenicocolic\nphrenicocostal\nphrenicogastric\nphrenicoglottic\nphrenicohepatic\nphrenicolienal\nphrenicopericardiac\nphrenicosplenic\nphrenicotomy\nphrenics\nphrenitic\nphrenitis\nphrenocardia\nphrenocardiac\nphrenocolic\nphrenocostal\nphrenodynia\nphrenogastric\nphrenoglottic\nphrenogram\nphrenograph\nphrenography\nphrenohepatic\nphrenologer\nphrenologic\nphrenological\nphrenologically\nphrenologist\nphrenologize\nphrenology\nphrenomagnetism\nphrenomesmerism\nphrenopathia\nphrenopathic\nphrenopathy\nphrenopericardiac\nphrenoplegia\nphrenoplegy\nphrenosin\nphrenosinic\nphrenospasm\nphrenosplenic\nphronesis\nPhronima\nPhronimidae\nphrontisterion\nphrontisterium\nphrontistery\nPhryganea\nphryganeid\nPhryganeidae\nphryganeoid\nPhrygian\nPhrygianize\nphrygium\nPhryma\nPhrymaceae\nphrymaceous\nphrynid\nPhrynidae\nphrynin\nphrynoid\nPhrynosoma\nphthalacene\nphthalan\nphthalanilic\nphthalate\nphthalazin\nphthalazine\nphthalein\nphthaleinometer\nphthalic\nphthalid\nphthalide\nphthalimide\nphthalin\nphthalocyanine\nphthalyl\nphthanite\nPhthartolatrae\nphthinoid\nphthiocol\nphthiriasis\nPhthirius\nphthirophagous\nphthisic\nphthisical\nphthisicky\nphthisiogenesis\nphthisiogenetic\nphthisiogenic\nphthisiologist\nphthisiology\nphthisiophobia\nphthisiotherapeutic\nphthisiotherapy\nphthisipneumonia\nphthisipneumony\nphthisis\nphthongal\nphthongometer\nphthor\nphthoric\nphu\nphugoid\nphulkari\nphulwa\nphulwara\nphut\nPhyciodes\nphycite\nPhycitidae\nphycitol\nphycochromaceae\nphycochromaceous\nphycochrome\nPhycochromophyceae\nphycochromophyceous\nphycocyanin\nphycocyanogen\nPhycodromidae\nphycoerythrin\nphycography\nphycological\nphycologist\nphycology\nPhycomyces\nphycomycete\nPhycomycetes\nphycomycetous\nphycophaein\nphycoxanthin\nphycoxanthine\nphygogalactic\nphyla\nphylacobiosis\nphylacobiotic\nphylacteric\nphylacterical\nphylacteried\nphylacterize\nphylactery\nphylactic\nphylactocarp\nphylactocarpal\nPhylactolaema\nPhylactolaemata\nphylactolaematous\nPhylactolema\nPhylactolemata\nphylarch\nphylarchic\nphylarchical\nphylarchy\nphyle\nphylephebic\nphylesis\nphyletic\nphyletically\nphyletism\nphylic\nPhyllachora\nPhyllactinia\nphyllade\nPhyllanthus\nphyllary\nPhyllaurea\nphylliform\nphyllin\nphylline\nPhyllis\nphyllite\nphyllitic\nPhyllitis\nPhyllium\nphyllobranchia\nphyllobranchial\nphyllobranchiate\nPhyllocactus\nphyllocarid\nPhyllocarida\nphyllocaridan\nPhylloceras\nphyllocerate\nPhylloceratidae\nphylloclad\nphylloclade\nphyllocladioid\nphyllocladium\nphyllocladous\nphyllocyanic\nphyllocyanin\nphyllocyst\nphyllocystic\nphyllode\nphyllodial\nphyllodination\nphyllodineous\nphyllodiniation\nphyllodinous\nphyllodium\nPhyllodoce\nphyllody\nphylloerythrin\nphyllogenetic\nphyllogenous\nphylloid\nphylloidal\nphylloideous\nphyllomancy\nphyllomania\nphyllome\nphyllomic\nphyllomorph\nphyllomorphic\nphyllomorphosis\nphyllomorphy\nPhyllophaga\nphyllophagous\nphyllophore\nphyllophorous\nphyllophyllin\nphyllophyte\nphyllopod\nPhyllopoda\nphyllopodan\nphyllopode\nphyllopodiform\nphyllopodium\nphyllopodous\nphylloporphyrin\nPhyllopteryx\nphylloptosis\nphyllopyrrole\nphyllorhine\nphyllorhinine\nphylloscopine\nPhylloscopus\nphyllosiphonic\nphyllosoma\nPhyllosomata\nphyllosome\nPhyllospondyli\nphyllospondylous\nPhyllostachys\nPhyllosticta\nPhyllostoma\nPhyllostomatidae\nPhyllostomatinae\nphyllostomatoid\nphyllostomatous\nphyllostome\nPhyllostomidae\nPhyllostominae\nphyllostomine\nphyllostomous\nPhyllostomus\nphyllotactic\nphyllotactical\nphyllotaxis\nphyllotaxy\nphyllous\nphylloxanthin\nPhylloxera\nphylloxeran\nphylloxeric\nPhylloxeridae\nphyllozooid\nphylogenetic\nphylogenetical\nphylogenetically\nphylogenic\nphylogenist\nphylogeny\nphylogerontic\nphylogerontism\nphylography\nphylology\nphylon\nphyloneanic\nphylonepionic\nphylum\nphyma\nphymata\nphymatic\nphymatid\nPhymatidae\nPhymatodes\nphymatoid\nphymatorhysin\nphymatosis\nPhymosia\nPhysa\nphysagogue\nPhysalia\nphysalian\nPhysaliidae\nPhysalis\nphysalite\nPhysalospora\nPhysapoda\nPhysaria\nPhyscia\nPhysciaceae\nphyscioid\nPhyscomitrium\nPhyseter\nPhyseteridae\nPhyseterinae\nphyseterine\nphyseteroid\nPhyseteroidea\nphysharmonica\nphysianthropy\nphysiatric\nphysiatrical\nphysiatrics\nphysic\nphysical\nphysicalism\nphysicalist\nphysicalistic\nphysicalistically\nphysicality\nphysically\nphysicalness\nphysician\nphysicianary\nphysiciancy\nphysicianed\nphysicianer\nphysicianess\nphysicianless\nphysicianly\nphysicianship\nphysicism\nphysicist\nphysicked\nphysicker\nphysicking\nphysicky\nphysicoastronomical\nphysicobiological\nphysicochemic\nphysicochemical\nphysicochemically\nphysicochemist\nphysicochemistry\nphysicogeographical\nphysicologic\nphysicological\nphysicomathematical\nphysicomathematics\nphysicomechanical\nphysicomedical\nphysicomental\nphysicomorph\nphysicomorphic\nphysicomorphism\nphysicooptics\nphysicophilosophical\nphysicophilosophy\nphysicophysiological\nphysicopsychical\nphysicosocial\nphysicotheological\nphysicotheologist\nphysicotheology\nphysicotherapeutic\nphysicotherapeutics\nphysicotherapy\nphysics\nPhysidae\nphysiform\nphysiochemical\nphysiochemically\nphysiocracy\nphysiocrat\nphysiocratic\nphysiocratism\nphysiocratist\nphysiogenesis\nphysiogenetic\nphysiogenic\nphysiogeny\nphysiognomic\nphysiognomical\nphysiognomically\nphysiognomics\nphysiognomist\nphysiognomize\nphysiognomonic\nphysiognomonical\nphysiognomy\nphysiogony\nphysiographer\nphysiographic\nphysiographical\nphysiographically\nphysiography\nphysiolater\nphysiolatrous\nphysiolatry\nphysiologer\nphysiologian\nphysiological\nphysiologically\nphysiologicoanatomic\nphysiologist\nphysiologize\nphysiologue\nphysiologus\nphysiology\nphysiopathological\nphysiophilist\nphysiophilosopher\nphysiophilosophical\nphysiophilosophy\nphysiopsychic\nphysiopsychical\nphysiopsychological\nphysiopsychology\nphysiosociological\nphysiosophic\nphysiosophy\nphysiotherapeutic\nphysiotherapeutical\nphysiotherapeutics\nphysiotherapist\nphysiotherapy\nphysiotype\nphysiotypy\nphysique\nphysiqued\nphysitheism\nphysitheistic\nphysitism\nphysiurgic\nphysiurgy\nphysocarpous\nPhysocarpus\nphysocele\nphysoclist\nPhysoclisti\nphysoclistic\nphysoclistous\nPhysoderma\nphysogastric\nphysogastrism\nphysogastry\nphysometra\nPhysonectae\nphysonectous\nPhysophorae\nphysophoran\nphysophore\nphysophorous\nphysopod\nPhysopoda\nphysopodan\nPhysostegia\nPhysostigma\nphysostigmine\nphysostomatous\nphysostome\nPhysostomi\nphysostomous\nphytalbumose\nphytase\nPhytelephas\nPhyteus\nphytic\nphytiferous\nphytiform\nphytin\nphytivorous\nphytobacteriology\nphytobezoar\nphytobiological\nphytobiology\nphytochemical\nphytochemistry\nphytochlorin\nphytocidal\nphytodynamics\nphytoecological\nphytoecologist\nphytoecology\nPhytoflagellata\nphytogamy\nphytogenesis\nphytogenetic\nphytogenetical\nphytogenetically\nphytogenic\nphytogenous\nphytogeny\nphytogeographer\nphytogeographic\nphytogeographical\nphytogeographically\nphytogeography\nphytoglobulin\nphytograph\nphytographer\nphytographic\nphytographical\nphytographist\nphytography\nphytohormone\nphytoid\nphytol\nPhytolacca\nPhytolaccaceae\nphytolaccaceous\nphytolatrous\nphytolatry\nphytolithological\nphytolithologist\nphytolithology\nphytologic\nphytological\nphytologically\nphytologist\nphytology\nphytoma\nPhytomastigina\nPhytomastigoda\nphytome\nphytomer\nphytometer\nphytometric\nphytometry\nphytomonad\nPhytomonadida\nPhytomonadina\nPhytomonas\nphytomorphic\nphytomorphology\nphytomorphosis\nphyton\nphytonic\nphytonomy\nphytooecology\nphytopaleontologic\nphytopaleontological\nphytopaleontologist\nphytopaleontology\nphytoparasite\nphytopathogen\nphytopathogenic\nphytopathologic\nphytopathological\nphytopathologist\nphytopathology\nPhytophaga\nphytophagan\nphytophagic\nPhytophagineae\nphytophagous\nphytophagy\nphytopharmacologic\nphytopharmacology\nphytophenological\nphytophenology\nphytophil\nphytophilous\nPhytophthora\nphytophylogenetic\nphytophylogenic\nphytophylogeny\nphytophysiological\nphytophysiology\nphytoplankton\nphytopsyche\nphytoptid\nPhytoptidae\nphytoptose\nphytoptosis\nPhytoptus\nphytorhodin\nphytosaur\nPhytosauria\nphytosaurian\nphytoserologic\nphytoserological\nphytoserologically\nphytoserology\nphytosis\nphytosociologic\nphytosociological\nphytosociologically\nphytosociologist\nphytosociology\nphytosterin\nphytosterol\nphytostrote\nphytosynthesis\nphytotaxonomy\nphytotechny\nphytoteratologic\nphytoteratological\nphytoteratologist\nphytoteratology\nPhytotoma\nPhytotomidae\nphytotomist\nphytotomy\nphytotopographical\nphytotopography\nphytotoxic\nphytotoxin\nphytovitellin\nPhytozoa\nphytozoan\nPhytozoaria\nphytozoon\nphytyl\npi\nPia\npia\npiaba\npiacaba\npiacle\npiacular\npiacularity\npiacularly\npiacularness\npiaculum\npiaffe\npiaffer\npial\npialyn\npian\npianette\npianic\npianino\npianism\npianissimo\npianist\npianiste\npianistic\npianistically\nPiankashaw\npiannet\npiano\npianoforte\npianofortist\npianograph\nPianokoto\nPianola\npianola\npianolist\npianologue\npiarhemia\npiarhemic\nPiarist\nPiaroa\nPiaroan\nPiaropus\nPiarroan\npiassava\nPiast\npiaster\npiastre\npiation\npiazine\npiazza\npiazzaed\npiazzaless\npiazzalike\npiazzian\npibcorn\npiblokto\npibroch\npic\nPica\npica\npicador\npicadura\nPicae\npical\npicamar\npicara\nPicard\npicarel\npicaresque\nPicariae\npicarian\nPicarii\npicaro\npicaroon\npicary\npicayune\npicayunish\npicayunishly\npicayunishness\npiccadill\npiccadilly\npiccalilli\npiccolo\npiccoloist\npice\nPicea\nPicene\npicene\nPicenian\npiceoferruginous\npiceotestaceous\npiceous\npiceworth\npichi\npichiciago\npichuric\npichurim\nPici\nPicidae\npiciform\nPiciformes\nPicinae\npicine\npick\npickaback\npickable\npickableness\npickage\npickaninny\npickaroon\npickaway\npickax\npicked\npickedly\npickedness\npickee\npickeer\npicker\npickerel\npickerelweed\npickering\npickeringite\npickery\npicket\npicketboat\npicketeer\npicketer\npickfork\npickietar\npickings\npickle\npicklelike\npickleman\npickler\npickleweed\npickleworm\npicklock\npickman\npickmaw\npicknick\npicknicker\npickover\npickpocket\npickpocketism\npickpocketry\npickpole\npickpurse\npickshaft\npicksman\npicksmith\npicksome\npicksomeness\npickthank\npickthankly\npickthankness\npickthatch\npicktooth\npickup\npickwick\nPickwickian\nPickwickianism\nPickwickianly\npickwork\npicky\npicnic\npicnicker\npicnickery\nPicnickian\npicnickish\npicnicky\npico\npicofarad\npicoid\npicoline\npicolinic\npicot\npicotah\npicotee\npicotite\npicqueter\npicra\npicramic\nPicramnia\npicrasmin\npicrate\npicrated\npicric\nPicris\npicrite\npicrocarmine\nPicrodendraceae\nPicrodendron\npicroerythrin\npicrol\npicrolite\npicromerite\npicropodophyllin\npicrorhiza\npicrorhizin\npicrotin\npicrotoxic\npicrotoxin\npicrotoxinin\npicryl\nPict\npict\npictarnie\nPictavi\nPictish\nPictland\npictogram\npictograph\npictographic\npictographically\npictography\nPictones\npictoradiogram\npictorial\npictorialism\npictorialist\npictorialization\npictorialize\npictorially\npictorialness\npictoric\npictorical\npictorically\npicturability\npicturable\npicturableness\npicturably\npictural\npicture\npicturecraft\npictured\npicturedom\npicturedrome\npictureful\npictureless\npicturelike\npicturely\npicturemaker\npicturemaking\npicturer\npicturesque\npicturesquely\npicturesqueness\npicturesquish\npicturization\npicturize\npictury\npicucule\npicuda\npicudilla\npicudo\npicul\npiculet\npiculule\nPicumninae\nPicumnus\nPicunche\nPicuris\nPicus\npidan\npiddle\npiddler\npiddling\npiddock\npidgin\npidjajap\npie\npiebald\npiebaldism\npiebaldly\npiebaldness\npiece\npieceable\npieceless\npiecemaker\npiecemeal\npiecemealwise\npiecen\npiecener\npiecer\npiecette\npiecewise\npiecework\npieceworker\npiecing\npiecrust\npied\npiedfort\npiedly\npiedmont\npiedmontal\nPiedmontese\npiedmontite\npiedness\nPiegan\npiehouse\npieless\npielet\npielum\npiemag\npieman\npiemarker\npien\npienanny\npiend\npiepan\npieplant\npiepoudre\npiepowder\npieprint\npier\npierage\nPiercarlo\nPierce\npierce\npierceable\npierced\npiercel\npierceless\npiercent\npiercer\npiercing\npiercingly\npiercingness\npierdrop\nPierette\npierhead\nPierian\npierid\nPieridae\nPierides\nPieridinae\npieridine\nPierinae\npierine\nPieris\npierless\npierlike\nPierre\nPierrot\npierrot\npierrotic\npieshop\nPiet\npiet\npietas\nPiete\nPieter\npietic\npietism\nPietist\npietist\npietistic\npietistical\npietistically\npietose\npiety\npiewife\npiewipe\npiewoman\npiezo\npiezochemical\npiezochemistry\npiezocrystallization\npiezoelectric\npiezoelectrically\npiezoelectricity\npiezometer\npiezometric\npiezometrical\npiezometry\npiff\npiffle\npiffler\npifine\npig\npigbelly\npigdan\npigdom\npigeon\npigeonable\npigeonberry\npigeoneer\npigeoner\npigeonfoot\npigeongram\npigeonhearted\npigeonhole\npigeonholer\npigeonman\npigeonry\npigeontail\npigeonweed\npigeonwing\npigeonwood\npigface\npigfish\npigflower\npigfoot\npigful\npiggery\npiggin\npigging\npiggish\npiggishly\npiggishness\npiggle\npiggy\npighead\npigheaded\npigheadedly\npigheadedness\npigherd\npightle\npigless\npiglet\npigling\npiglinghood\npigly\npigmaker\npigmaking\npigman\npigment\npigmental\npigmentally\npigmentary\npigmentation\npigmentize\npigmentolysis\npigmentophage\npigmentose\nPigmy\npignolia\npignon\npignorate\npignoration\npignoratitious\npignorative\npignus\npignut\npigpen\npigritude\npigroot\npigsconce\npigskin\npigsney\npigstick\npigsticker\npigsty\npigtail\npigwash\npigweed\npigwidgeon\npigyard\npiitis\npik\npika\npike\npiked\npikel\npikelet\npikeman\npikemonger\npiker\npikestaff\npiketail\npikey\npiki\npiking\npikle\npiky\npilage\npilandite\npilapil\nPilar\npilar\npilary\npilaster\npilastered\npilastering\npilastrade\npilastraded\npilastric\nPilate\nPilatian\npilau\npilaued\npilch\npilchard\npilcher\npilcorn\npilcrow\npile\nPilea\npileata\npileate\npileated\npiled\npileiform\npileolated\npileolus\npileorhiza\npileorhize\npileous\npiler\npiles\npileus\npileweed\npilework\npileworm\npilewort\npilfer\npilferage\npilferer\npilfering\npilferingly\npilferment\npilgarlic\npilgarlicky\npilger\npilgrim\npilgrimage\npilgrimager\npilgrimatic\npilgrimatical\npilgrimdom\npilgrimer\npilgrimess\npilgrimism\npilgrimize\npilgrimlike\npilgrimwise\npili\npilidium\npilifer\npiliferous\npiliform\npiligan\npiliganine\npiligerous\npilikai\npililloo\npilimiction\npilin\npiline\npiling\npilipilula\npilkins\npill\npillage\npillageable\npillagee\npillager\npillar\npillared\npillaret\npillaring\npillarist\npillarize\npillarlet\npillarlike\npillarwise\npillary\npillas\npillbox\npilled\npilledness\npillet\npilleus\npillion\npilliver\npilliwinks\npillmaker\npillmaking\npillmonger\npillorization\npillorize\npillory\npillow\npillowcase\npillowing\npillowless\npillowmade\npillowwork\npillowy\npillworm\npillwort\npilm\npilmy\nPilobolus\npilocarpidine\npilocarpine\nPilocarpus\nPilocereus\npilocystic\npiloerection\npilomotor\npilon\npilonidal\npilori\npilose\npilosebaceous\npilosine\npilosis\npilosism\npilosity\nPilot\npilot\npilotage\npilotaxitic\npilotee\npilothouse\npiloting\npilotism\npilotless\npilotman\npilotry\npilotship\npilotweed\npilous\nPilpai\nPilpay\npilpul\npilpulist\npilpulistic\npiltock\npilula\npilular\nPilularia\npilule\npilulist\npilulous\npilum\nPilumnus\npilus\npilwillet\npily\nPim\nPima\nPiman\npimaric\npimelate\nPimelea\npimelic\npimelite\npimelitis\nPimenta\npimento\npimenton\npimgenet\npimienta\npimiento\npimlico\npimola\npimp\npimperlimpimp\npimpernel\npimpery\nPimpinella\npimping\npimpish\nPimpla\npimple\npimpleback\npimpled\npimpleproof\nPimplinae\npimpliness\npimplo\npimploe\npimplous\npimply\npimpship\npin\npina\nPinaceae\npinaceous\npinaces\npinachrome\npinacle\nPinacoceras\nPinacoceratidae\npinacocytal\npinacocyte\npinacoid\npinacoidal\npinacol\npinacolate\npinacolic\npinacolin\npinacone\npinacoteca\npinaculum\nPinacyanol\npinafore\npinakiolite\npinakoidal\npinakotheke\nPinal\nPinaleno\nPinales\npinang\npinaster\npinatype\npinaverdol\npinax\npinball\npinbefore\npinbone\npinbush\npincase\npincement\npincer\npincerlike\npincers\npincerweed\npinch\npinchable\npinchback\npinchbeck\npinchbelly\npinchcock\npinchcommons\npinchcrust\npinche\npinched\npinchedly\npinchedness\npinchem\npincher\npinchfist\npinchfisted\npinchgut\npinching\npinchingly\npinchpenny\nPincian\nPinckneya\npincoffin\npincpinc\nPinctada\npincushion\npincushiony\npind\npinda\nPindari\nPindaric\npindarical\npindarically\nPindarism\nPindarist\nPindarize\nPindarus\npinder\npindling\npindy\npine\npineal\npinealism\npinealoma\npineapple\npined\npinedrops\npineland\npinene\npiner\npinery\npinesap\npinetum\npineweed\npinewoods\npiney\npinfall\npinfeather\npinfeathered\npinfeatherer\npinfeathery\npinfish\npinfold\nPing\nping\npingle\npingler\npingue\npinguecula\npinguedinous\npinguefaction\npinguefy\npinguescence\npinguescent\nPinguicula\npinguicula\nPinguiculaceae\npinguiculaceous\npinguid\npinguidity\npinguiferous\npinguin\npinguinitescent\npinguite\npinguitude\npinguitudinous\npinhead\npinheaded\npinheadedness\npinhold\npinhole\npinhook\npinic\npinicoline\npinicolous\npiniferous\npiniform\npining\npiningly\npinion\npinioned\npinionless\npinionlike\npinipicrin\npinitannic\npinite\npinitol\npinivorous\npinjane\npinjra\npink\npinkberry\npinked\npinkeen\npinken\npinker\nPinkerton\nPinkertonism\npinkeye\npinkfish\npinkie\npinkify\npinkily\npinkiness\npinking\npinkish\npinkishness\npinkly\npinkness\npinkroot\npinksome\nPinkster\npinkweed\npinkwood\npinkwort\npinky\npinless\npinlock\npinmaker\nPinna\npinna\npinnace\npinnacle\npinnaclet\npinnae\npinnaglobin\npinnal\npinnate\npinnated\npinnatedly\npinnately\npinnatifid\npinnatifidly\npinnatilobate\npinnatilobed\npinnation\npinnatipartite\npinnatiped\npinnatisect\npinnatisected\npinnatodentate\npinnatopectinate\npinnatulate\npinned\npinnel\npinner\npinnet\nPinnidae\npinniferous\npinniform\npinnigerous\nPinnigrada\npinnigrade\npinninervate\npinninerved\npinning\npinningly\npinniped\nPinnipedia\npinnipedian\npinnisect\npinnisected\npinnitarsal\npinnitentaculate\npinniwinkis\npinnock\npinnoite\npinnotere\npinnothere\nPinnotheres\npinnotherian\nPinnotheridae\npinnula\npinnular\npinnulate\npinnulated\npinnule\npinnulet\npinny\npino\npinochle\npinocytosis\npinole\npinoleum\npinolia\npinolin\npinon\npinonic\npinpillow\npinpoint\npinprick\npinproof\npinrail\npinrowed\npinscher\npinsons\npint\npinta\npintadera\npintado\npintadoite\npintail\npintano\npinte\npintle\npinto\npintura\npinulus\nPinus\npinweed\npinwing\npinwork\npinworm\npiny\npinyl\npinyon\npioneer\npioneerdom\npioneership\npionnotes\npioscope\npioted\npiotine\nPiotr\npiotty\npioury\npious\npiously\npiousness\nPioxe\npip\npipa\npipage\npipal\npipe\npipeage\npipecoline\npipecolinic\npiped\npipefish\npipeful\npipelayer\npipeless\npipelike\npipeline\npipeman\npipemouth\nPiper\npiper\nPiperaceae\npiperaceous\nPiperales\npiperate\npiperazin\npiperazine\npiperic\npiperide\npiperideine\npiperidge\npiperidide\npiperidine\npiperine\npiperitious\npiperitone\npiperly\npiperno\npiperoid\npiperonal\npiperonyl\npipery\npiperylene\npipestapple\npipestem\npipestone\npipet\npipette\npipewalker\npipewood\npipework\npipewort\npipi\nPipidae\nPipil\nPipile\nPipilo\npiping\npipingly\npipingness\npipiri\npipistrel\npipistrelle\nPipistrellus\npipit\npipkin\npipkinet\npipless\npipped\npipper\npippin\npippiner\npippinface\npippy\nPipra\nPipridae\nPiprinae\npiprine\npiproid\npipsissewa\nPiptadenia\nPiptomeris\npipunculid\nPipunculidae\npipy\npiquable\npiquance\npiquancy\npiquant\npiquantly\npiquantness\npique\npiquet\npiquia\npiqure\npir\npiracy\npiragua\nPiranga\npiranha\npirate\npiratelike\npiratery\npiratess\npiratical\npiratically\npiratism\npiratize\npiraty\nPirene\nPiricularia\npirijiri\npiripiri\npiririgua\npirl\npirn\npirner\npirnie\npirny\nPiro\npirogue\npirol\npiroplasm\nPiroplasma\npiroplasmosis\npirouette\npirouetter\npirouettist\npirr\npirraura\npirrmaw\npirssonite\nPisaca\npisaca\npisachee\nPisan\npisang\npisanite\nPisauridae\npisay\npiscary\nPiscataqua\nPiscataway\npiscation\npiscatology\npiscator\npiscatorial\npiscatorialist\npiscatorially\npiscatorian\npiscatorious\npiscatory\nPisces\npiscian\npiscicapture\npiscicapturist\npiscicolous\npiscicultural\npisciculturally\npisciculture\npisciculturist\nPiscid\nPiscidia\npiscifauna\npisciferous\npisciform\npiscina\npiscinal\npiscine\npiscinity\nPiscis\npiscivorous\npisco\npise\npish\npishaug\npishogue\nPishquow\npishu\nPisidium\npisiform\nPisistratean\nPisistratidae\npisk\npisky\npismire\npismirism\npiso\npisolite\npisolitic\nPisonia\npiss\npissabed\npissant\npist\npistache\npistachio\nPistacia\npistacite\npistareen\nPistia\npistic\npistil\npistillaceous\npistillar\npistillary\npistillate\npistillid\npistilliferous\npistilliform\npistilligerous\npistilline\npistillode\npistillody\npistilloid\npistilogy\npistle\nPistoiese\npistol\npistole\npistoleer\npistolet\npistolgram\npistolgraph\npistollike\npistolography\npistology\npistolproof\npistolwise\npiston\npistonhead\npistonlike\npistrix\nPisum\npit\npita\nPitahauerat\nPitahauirata\npitahaya\npitanga\npitangua\npitapat\npitapatation\npitarah\npitau\nPitawas\npitaya\npitayita\nPitcairnia\npitch\npitchable\npitchblende\npitcher\npitchered\npitcherful\npitcherlike\npitcherman\npitchfork\npitchhole\npitchi\npitchiness\npitching\npitchlike\npitchman\npitchometer\npitchout\npitchpike\npitchpole\npitchpoll\npitchstone\npitchwork\npitchy\npiteous\npiteously\npiteousness\npitfall\npith\npithecan\npithecanthrope\npithecanthropic\npithecanthropid\nPithecanthropidae\npithecanthropoid\nPithecanthropus\nPithecia\npithecian\nPitheciinae\npitheciine\npithecism\npithecoid\nPithecolobium\npithecological\npithecometric\npithecomorphic\npithecomorphism\npithful\npithily\npithiness\npithless\npithlessly\nPithoegia\nPithoigia\npithole\npithos\npithsome\npithwork\npithy\npitiability\npitiable\npitiableness\npitiably\npitiedly\npitiedness\npitier\npitiful\npitifully\npitifulness\npitikins\npitiless\npitilessly\npitilessness\npitless\npitlike\npitmaker\npitmaking\npitman\npitmark\npitmirk\npitometer\npitpan\npitpit\npitside\nPitta\npittacal\npittance\npittancer\npitted\npitter\npitticite\nPittidae\npittine\npitting\nPittism\nPittite\npittite\npittoid\nPittosporaceae\npittosporaceous\npittospore\nPittosporum\nPittsburgher\npituital\npituitary\npituite\npituitous\npituitousness\nPituitrin\npituri\npitwood\npitwork\npitwright\npity\npitying\npityingly\nPitylus\npityocampa\npityproof\npityriasic\npityriasis\nPityrogramma\npityroid\npiuri\npiuricapsular\npivalic\npivot\npivotal\npivotally\npivoter\npix\npixie\npixilated\npixilation\npixy\npize\npizza\npizzeria\npizzicato\npizzle\nplacability\nplacable\nplacableness\nplacably\nPlacaean\nplacard\nplacardeer\nplacarder\nplacate\nplacater\nplacation\nplacative\nplacatively\nplacatory\nplaccate\nplace\nplaceable\nPlacean\nplacebo\nplaceful\nplaceless\nplacelessly\nplacemaker\nplacemaking\nplaceman\nplacemanship\nplacement\nplacemonger\nplacemongering\nplacenta\nplacental\nPlacentalia\nplacentalian\nplacentary\nplacentate\nplacentation\nplacentiferous\nplacentiform\nplacentigerous\nplacentitis\nplacentoid\nplacentoma\nplacer\nplacet\nplacewoman\nplacid\nplacidity\nplacidly\nplacidness\nplacitum\nplack\nplacket\nplackless\nplacochromatic\nplacode\nplacoderm\nplacodermal\nplacodermatous\nPlacodermi\nplacodermoid\nplacodont\nPlacodontia\nPlacodus\nplacoganoid\nplacoganoidean\nPlacoganoidei\nplacoid\nplacoidal\nplacoidean\nPlacoidei\nPlacoides\nPlacophora\nplacophoran\nplacoplast\nplacula\nplacuntitis\nplacuntoma\nPlacus\npladaroma\npladarosis\nplaga\nplagal\nplagate\nplage\nPlagianthus\nplagiaplite\nplagiarical\nplagiarism\nplagiarist\nplagiaristic\nplagiaristically\nplagiarization\nplagiarize\nplagiarizer\nplagiary\nplagihedral\nplagiocephalic\nplagiocephalism\nplagiocephaly\nPlagiochila\nplagioclase\nplagioclasite\nplagioclastic\nplagioclinal\nplagiodont\nplagiograph\nplagioliparite\nplagionite\nplagiopatagium\nplagiophyre\nPlagiostomata\nplagiostomatous\nplagiostome\nPlagiostomi\nplagiostomous\nplagiotropic\nplagiotropically\nplagiotropism\nplagiotropous\nplagium\nplagose\nplagosity\nplague\nplagued\nplagueful\nplagueless\nplagueproof\nplaguer\nplaguesome\nplaguesomeness\nplaguily\nplaguy\nplaice\nplaid\nplaided\nplaidie\nplaiding\nplaidman\nplaidy\nplain\nplainback\nplainbacks\nplainer\nplainful\nplainhearted\nplainish\nplainly\nplainness\nplainscraft\nplainsfolk\nplainsman\nplainsoled\nplainstones\nplainswoman\nplaint\nplaintail\nplaintiff\nplaintiffship\nplaintile\nplaintive\nplaintively\nplaintiveness\nplaintless\nplainward\nplaister\nplait\nplaited\nplaiter\nplaiting\nplaitless\nplaitwork\nplak\nplakat\nplan\nplanable\nplanaea\nplanar\nPlanaria\nplanarian\nPlanarida\nplanaridan\nplanariform\nplanarioid\nplanarity\nplanate\nplanation\nplanch\nplancheite\nplancher\nplanchet\nplanchette\nplanching\nplanchment\nplancier\nPlanckian\nplandok\nplane\nplaneness\nplaner\nPlanera\nplanet\nplaneta\nplanetable\nplanetabler\nplanetal\nplanetaria\nplanetarian\nplanetarily\nplanetarium\nplanetary\nplaneted\nplanetesimal\nplaneticose\nplaneting\nplanetist\nplanetkin\nplanetless\nplanetlike\nplanetogeny\nplanetography\nplanetoid\nplanetoidal\nplanetologic\nplanetologist\nplanetology\nplanetule\nplanform\nplanful\nplanfully\nplanfulness\nplang\nplangency\nplangent\nplangently\nplangor\nplangorous\nplanicaudate\nplanicipital\nplanidorsate\nplanifolious\nplaniform\nplanigraph\nplanilla\nplanimetric\nplanimetrical\nplanimetry\nplanineter\nplanipennate\nPlanipennia\nplanipennine\nplanipetalous\nplaniphyllous\nplanirostral\nplanirostrate\nplaniscope\nplaniscopic\nplanish\nplanisher\nplanispheral\nplanisphere\nplanispheric\nplanispherical\nplanispiral\nplanity\nplank\nplankage\nplankbuilt\nplanker\nplanking\nplankless\nplanklike\nplanksheer\nplankter\nplanktologist\nplanktology\nplankton\nplanktonic\nplanktont\nplankways\nplankwise\nplanky\nplanless\nplanlessly\nplanlessness\nplanner\nplanoblast\nplanoblastic\nPlanococcus\nplanoconical\nplanocylindric\nplanoferrite\nplanogamete\nplanograph\nplanographic\nplanographist\nplanography\nplanohorizontal\nplanolindrical\nplanometer\nplanometry\nplanomiller\nplanoorbicular\nPlanorbidae\nplanorbiform\nplanorbine\nPlanorbis\nplanorboid\nplanorotund\nPlanosarcina\nplanosol\nplanosome\nplanospiral\nplanospore\nplanosubulate\nplant\nplanta\nplantable\nplantad\nPlantae\nplantage\nPlantaginaceae\nplantaginaceous\nPlantaginales\nplantagineous\nPlantago\nplantain\nplantal\nplantar\nplantaris\nplantarium\nplantation\nplantationlike\nplantdom\nplanter\nplanterdom\nplanterly\nplantership\nPlantigrada\nplantigrade\nplantigrady\nplanting\nplantivorous\nplantless\nplantlet\nplantlike\nplantling\nplantocracy\nplantsman\nplantula\nplantular\nplantule\nplanula\nplanulan\nplanular\nplanulate\nplanuliform\nplanuloid\nPlanuloidea\nplanuria\nplanury\nplanxty\nplap\nplappert\nplaque\nplaquette\nplash\nplasher\nplashet\nplashingly\nplashment\nplashy\nplasm\nplasma\nplasmagene\nplasmapheresis\nplasmase\nplasmatic\nplasmatical\nplasmation\nplasmatoparous\nplasmatorrhexis\nplasmic\nplasmocyte\nplasmocytoma\nplasmode\nplasmodesm\nplasmodesma\nplasmodesmal\nplasmodesmic\nplasmodesmus\nplasmodia\nplasmodial\nplasmodiate\nplasmodic\nplasmodiocarp\nplasmodiocarpous\nPlasmodiophora\nPlasmodiophoraceae\nPlasmodiophorales\nplasmodium\nplasmogen\nplasmolysis\nplasmolytic\nplasmolytically\nplasmolyzability\nplasmolyzable\nplasmolyze\nplasmoma\nPlasmon\nPlasmopara\nplasmophagous\nplasmophagy\nplasmoptysis\nplasmosoma\nplasmosome\nplasmotomy\nplasome\nplass\nplasson\nplastein\nplaster\nplasterbill\nplasterboard\nplasterer\nplasteriness\nplastering\nplasterlike\nplasterwise\nplasterwork\nplastery\nPlastic\nplastic\nplastically\nplasticimeter\nPlasticine\nplasticine\nplasticism\nplasticity\nplasticization\nplasticize\nplasticizer\nplasticly\nplastics\nplastid\nplastidium\nplastidome\nPlastidozoa\nplastidular\nplastidule\nplastify\nplastin\nplastinoid\nplastisol\nplastochondria\nplastochron\nplastochrone\nplastodynamia\nplastodynamic\nplastogamic\nplastogamy\nplastogene\nplastomere\nplastometer\nplastosome\nplastotype\nplastral\nplastron\nplastrum\nplat\nPlataean\nPlatalea\nPlataleidae\nplataleiform\nPlataleinae\nplataleine\nplatan\nPlatanaceae\nplatanaceous\nplatane\nplatanist\nPlatanista\nPlatanistidae\nplatano\nPlatanus\nplatband\nplatch\nplate\nplatea\nplateasm\nplateau\nplateaux\nplated\nplateful\nplateholder\nplateiasmus\nplatelayer\nplateless\nplatelet\nplatelike\nplatemaker\nplatemaking\nplateman\nplaten\nplater\nplaterer\nplateresque\nplatery\nplateway\nplatework\nplateworker\nplatform\nplatformally\nplatformed\nplatformer\nplatformish\nplatformism\nplatformist\nplatformistic\nplatformless\nplatformy\nplatic\nplaticly\nplatilla\nplatina\nplatinamine\nplatinammine\nplatinate\nPlatine\nplating\nplatinic\nplatinichloric\nplatinichloride\nplatiniferous\nplatiniridium\nplatinite\nplatinization\nplatinize\nplatinochloric\nplatinochloride\nplatinocyanic\nplatinocyanide\nplatinoid\nplatinotype\nplatinous\nplatinum\nplatinumsmith\nplatitude\nplatitudinal\nplatitudinarian\nplatitudinarianism\nplatitudinism\nplatitudinist\nplatitudinization\nplatitudinize\nplatitudinizer\nplatitudinous\nplatitudinously\nplatitudinousness\nPlatoda\nplatode\nPlatodes\nplatoid\nPlatonesque\nplatonesque\nPlatonian\nPlatonic\nPlatonical\nPlatonically\nPlatonicalness\nPlatonician\nPlatonicism\nPlatonism\nPlatonist\nPlatonistic\nPlatonization\nPlatonize\nPlatonizer\nplatoon\nplatopic\nplatosamine\nplatosammine\nPlatt\nPlattdeutsch\nplatted\nplatten\nplatter\nplatterface\nplatterful\nplatting\nplattnerite\nplatty\nplaturous\nplaty\nplatybasic\nplatybrachycephalic\nplatybrachycephalous\nplatybregmatic\nplatycarpous\nPlatycarpus\nPlatycarya\nplatycelian\nplatycelous\nplatycephalic\nPlatycephalidae\nplatycephalism\nplatycephaloid\nplatycephalous\nPlatycephalus\nplatycephaly\nPlatycercinae\nplatycercine\nPlatycercus\nPlatycerium\nplatycheiria\nplatycnemia\nplatycnemic\nPlatycodon\nplatycoria\nplatycrania\nplatycranial\nPlatyctenea\nplatycyrtean\nplatydactyl\nplatydactyle\nplatydactylous\nplatydolichocephalic\nplatydolichocephalous\nplatyfish\nplatyglossal\nplatyglossate\nplatyglossia\nPlatyhelmia\nplatyhelminth\nPlatyhelminthes\nplatyhelminthic\nplatyhieric\nplatykurtic\nplatylobate\nplatymeria\nplatymeric\nplatymery\nplatymesaticephalic\nplatymesocephalic\nplatymeter\nplatymyoid\nplatynite\nplatynotal\nplatyodont\nplatyope\nplatyopia\nplatyopic\nplatypellic\nplatypetalous\nplatyphyllous\nplatypod\nPlatypoda\nplatypodia\nplatypodous\nPlatyptera\nplatypus\nplatypygous\nPlatyrhina\nPlatyrhini\nplatyrhynchous\nplatyrrhin\nPlatyrrhina\nplatyrrhine\nPlatyrrhini\nplatyrrhinian\nplatyrrhinic\nplatyrrhinism\nplatyrrhiny\nplatysma\nplatysmamyoides\nplatysomid\nPlatysomidae\nPlatysomus\nplatystaphyline\nPlatystemon\nplatystencephalia\nplatystencephalic\nplatystencephalism\nplatystencephaly\nplatysternal\nPlatysternidae\nPlatystomidae\nplatystomous\nplatytrope\nplatytropy\nplaud\nplaudation\nplaudit\nplaudite\nplauditor\nplauditory\nplauenite\nplausibility\nplausible\nplausibleness\nplausibly\nplausive\nplaustral\nPlautine\nPlautus\nplay\nplaya\nplayability\nplayable\nplayback\nplaybill\nplaybook\nplaybox\nplayboy\nplayboyism\nplaybroker\nplaycraft\nplaycraftsman\nplayday\nplaydown\nplayer\nplayerdom\nplayeress\nplayfellow\nplayfellowship\nplayfield\nplayfolk\nplayful\nplayfully\nplayfulness\nplaygoer\nplaygoing\nplayground\nplayhouse\nplayingly\nplayless\nplaylet\nplaylike\nplaymaker\nplaymaking\nplayman\nplaymare\nplaymate\nplaymonger\nplaymongering\nplayock\nplaypen\nplayreader\nplayroom\nplayscript\nplaysome\nplaysomely\nplaysomeness\nplaystead\nplaything\nplaytime\nplayward\nplaywoman\nplaywork\nplaywright\nplaywrightess\nplaywrighting\nplaywrightry\nplaywriter\nplaywriting\nplaza\nplazolite\nplea\npleach\npleached\npleacher\nplead\npleadable\npleadableness\npleader\npleading\npleadingly\npleadingness\npleaproof\npleasable\npleasableness\npleasance\npleasant\npleasantable\npleasantish\npleasantly\npleasantness\npleasantry\npleasantsome\nplease\npleasedly\npleasedness\npleaseman\npleaser\npleaship\npleasing\npleasingly\npleasingness\npleasurability\npleasurable\npleasurableness\npleasurably\npleasure\npleasureful\npleasurehood\npleasureless\npleasurelessly\npleasureman\npleasurement\npleasuremonger\npleasureproof\npleasurer\npleasuring\npleasurist\npleasurous\npleat\npleater\npleatless\npleb\nplebe\nplebeian\nplebeiance\nplebeianize\nplebeianly\nplebeianness\nplebeity\nplebianism\nplebicolar\nplebicolist\nplebificate\nplebification\nplebify\nplebiscitarian\nplebiscitarism\nplebiscitary\nplebiscite\nplebiscitic\nplebiscitum\nplebs\npleck\nPlecoptera\nplecopteran\nplecopterid\nplecopterous\nPlecotinae\nplecotine\nPlecotus\nplectognath\nPlectognathi\nplectognathic\nplectognathous\nplectopter\nplectopteran\nplectopterous\nplectospondyl\nPlectospondyli\nplectospondylous\nplectre\nplectridial\nplectridium\nplectron\nplectrum\npled\npledge\npledgeable\npledgee\npledgeless\npledgeor\npledger\npledgeshop\npledget\npledgor\nPlegadis\nplegaphonia\nplegometer\nPleiades\npleiobar\npleiochromia\npleiochromic\npleiomastia\npleiomazia\npleiomerous\npleiomery\npleion\nPleione\npleionian\npleiophyllous\npleiophylly\npleiotaxis\npleiotropic\npleiotropically\npleiotropism\nPleistocene\nPleistocenic\npleistoseist\nplemochoe\nplemyrameter\nplenarily\nplenariness\nplenarium\nplenarty\nplenary\nplenicorn\npleniloquence\nplenilunal\nplenilunar\nplenilunary\nplenilune\nplenipo\nplenipotence\nplenipotent\nplenipotential\nplenipotentiality\nplenipotentiarily\nplenipotentiarize\nPlenipotentiary\nplenipotentiary\nplenipotentiaryship\nplenish\nplenishing\nplenishment\nplenism\nplenist\nplenitide\nplenitude\nplenitudinous\nplenshing\nplenteous\nplenteously\nplenteousness\nplentiful\nplentifully\nplentifulness\nplentify\nplenty\nplenum\npleny\npleochroic\npleochroism\npleochroitic\npleochromatic\npleochromatism\npleochroous\npleocrystalline\npleodont\npleomastia\npleomastic\npleomazia\npleometrosis\npleometrotic\npleomorph\npleomorphic\npleomorphism\npleomorphist\npleomorphous\npleomorphy\npleon\npleonal\npleonasm\npleonast\npleonaste\npleonastic\npleonastical\npleonastically\npleonectic\npleonexia\npleonic\npleophyletic\npleopod\npleopodite\nPleospora\nPleosporaceae\nplerergate\nplerocercoid\npleroma\npleromatic\nplerome\npleromorph\nplerophoric\nplerophory\nplerosis\nplerotic\nPlesianthropus\nplesiobiosis\nplesiobiotic\nplesiomorphic\nplesiomorphism\nplesiomorphous\nplesiosaur\nPlesiosauri\nPlesiosauria\nplesiosaurian\nplesiosauroid\nPlesiosaurus\nplesiotype\nplessigraph\nplessimeter\nplessimetric\nplessimetry\nplessor\nPlethodon\nplethodontid\nPlethodontidae\nplethora\nplethoretic\nplethoretical\nplethoric\nplethorical\nplethorically\nplethorous\nplethory\nplethysmograph\nplethysmographic\nplethysmographically\nplethysmography\npleura\nPleuracanthea\nPleuracanthidae\nPleuracanthini\npleuracanthoid\nPleuracanthus\npleural\npleuralgia\npleuralgic\npleurapophysial\npleurapophysis\npleurectomy\npleurenchyma\npleurenchymatous\npleuric\npleuriseptate\npleurisy\npleurite\npleuritic\npleuritical\npleuritically\npleuritis\nPleurobrachia\nPleurobrachiidae\npleurobranch\npleurobranchia\npleurobranchial\npleurobranchiate\npleurobronchitis\nPleurocapsa\nPleurocapsaceae\npleurocapsaceous\npleurocarp\nPleurocarpi\npleurocarpous\npleurocele\npleurocentesis\npleurocentral\npleurocentrum\nPleurocera\npleurocerebral\nPleuroceridae\npleuroceroid\nPleurococcaceae\npleurococcaceous\nPleurococcus\nPleurodelidae\nPleurodira\npleurodiran\npleurodire\npleurodirous\npleurodiscous\npleurodont\npleurodynia\npleurodynic\npleurogenic\npleurogenous\npleurohepatitis\npleuroid\npleurolith\npleurolysis\npleuron\nPleuronectes\npleuronectid\nPleuronectidae\npleuronectoid\nPleuronema\npleuropedal\npleuropericardial\npleuropericarditis\npleuroperitonaeal\npleuroperitoneal\npleuroperitoneum\npleuropneumonia\npleuropneumonic\npleuropodium\npleuropterygian\nPleuropterygii\npleuropulmonary\npleurorrhea\nPleurosaurus\nPleurosigma\npleurospasm\npleurosteal\nPleurosteon\npleurostict\nPleurosticti\nPleurostigma\npleurothotonic\npleurothotonus\nPleurotoma\nPleurotomaria\nPleurotomariidae\npleurotomarioid\nPleurotomidae\npleurotomine\npleurotomoid\npleurotomy\npleurotonic\npleurotonus\nPleurotremata\npleurotribal\npleurotribe\npleurotropous\nPleurotus\npleurotyphoid\npleurovisceral\npleurum\npleuston\npleustonic\nplew\nplex\nplexal\nplexicose\nplexiform\npleximeter\npleximetric\npleximetry\nplexodont\nplexometer\nplexor\nplexure\nplexus\npliability\npliable\npliableness\npliably\npliancy\npliant\npliantly\npliantness\nplica\nplicable\nplical\nplicate\nplicated\nplicately\nplicateness\nplicater\nplicatile\nplication\nplicative\nplicatocontorted\nplicatocristate\nplicatolacunose\nplicatolobate\nplicatopapillose\nplicator\nplicatoundulate\nplicatulate\nplicature\npliciferous\npliciform\nplied\nplier\nplies\npliers\nplight\nplighted\nplighter\nplim\nplimsoll\nPlinian\nplinth\nplinther\nplinthiform\nplinthless\nplinthlike\nPliny\nPlinyism\nPliocene\nPliohippus\nPliopithecus\npliosaur\npliosaurian\nPliosauridae\nPliosaurus\npliothermic\nPliotron\npliskie\nplisky\nploat\nploce\nPloceidae\nploceiform\nPloceinae\nPloceus\nplock\nplod\nplodder\nplodderly\nplodding\nploddingly\nploddingness\nplodge\nPloima\nploimate\nplomb\nplook\nplop\nploration\nploratory\nplosion\nplosive\nplot\nplote\nplotful\nPlotinian\nPlotinic\nPlotinical\nPlotinism\nPlotinist\nPlotinize\nplotless\nplotlessness\nplotproof\nplottage\nplotted\nplotter\nplottery\nplotting\nplottingly\nplotty\nplough\nploughmanship\nploughtail\nplouk\nplouked\nplouky\nplounce\nplousiocracy\nplout\nPlouteneion\nplouter\nplover\nploverlike\nplovery\nplow\nplowable\nplowbote\nplowboy\nplower\nplowfish\nplowfoot\nplowgang\nplowgate\nplowgraith\nplowhead\nplowing\nplowjogger\nplowland\nplowlight\nplowline\nplowmaker\nplowman\nplowmanship\nplowmell\nplowpoint\nPlowrightia\nplowshare\nplowshoe\nplowstaff\nplowstilt\nplowtail\nplowwise\nplowwoman\nplowwright\nploy\nployment\nPluchea\npluck\npluckage\nplucked\npluckedness\nplucker\nPluckerian\npluckily\npluckiness\npluckless\nplucklessness\nplucky\nplud\npluff\npluffer\npluffy\nplug\nplugboard\nplugdrawer\npluggable\nplugged\nplugger\nplugging\npluggingly\npluggy\nplughole\nplugless\npluglike\nplugman\nplugtray\nplugtree\nplum\npluma\nplumaceous\nplumach\nplumade\nplumage\nplumaged\nplumagery\nplumasite\nplumate\nPlumatella\nplumatellid\nPlumatellidae\nplumatelloid\nplumb\nplumbable\nplumbage\nPlumbaginaceae\nplumbaginaceous\nplumbagine\nplumbaginous\nplumbago\nplumbate\nplumbean\nplumbeous\nplumber\nplumbership\nplumbery\nplumbet\nplumbic\nplumbiferous\nplumbing\nplumbism\nplumbisolvent\nplumbite\nplumbless\nplumbness\nplumbog\nplumbojarosite\nplumboniobate\nplumbosolvency\nplumbosolvent\nplumbous\nplumbum\nplumcot\nplumdamas\nplumdamis\nplume\nplumed\nplumeless\nplumelet\nplumelike\nplumemaker\nplumemaking\nplumeopicean\nplumeous\nplumer\nplumery\nplumet\nplumette\nplumicorn\nplumier\nPlumiera\nplumieride\nplumification\nplumiform\nplumiformly\nplumify\nplumigerous\npluminess\nplumiped\nplumipede\nplumist\nplumless\nplumlet\nplumlike\nplummer\nplummet\nplummeted\nplummetless\nplummy\nplumose\nplumosely\nplumoseness\nplumosity\nplumous\nplump\nplumpen\nplumper\nplumping\nplumpish\nplumply\nplumpness\nplumps\nplumpy\nplumula\nplumulaceous\nplumular\nPlumularia\nplumularian\nPlumulariidae\nplumulate\nplumule\nplumuliform\nplumulose\nplumy\nplunder\nplunderable\nplunderage\nplunderbund\nplunderer\nplunderess\nplundering\nplunderingly\nplunderless\nplunderous\nplunderproof\nplunge\nplunger\nplunging\nplungingly\nplunk\nplunther\nplup\nplupatriotic\npluperfect\npluperfectly\npluperfectness\nplural\npluralism\npluralist\npluralistic\npluralistically\nplurality\npluralization\npluralize\npluralizer\nplurally\nplurative\nplurennial\npluriaxial\npluricarinate\npluricarpellary\npluricellular\npluricentral\npluricipital\npluricuspid\npluricuspidate\npluridentate\npluries\nplurifacial\nplurifetation\nplurification\npluriflagellate\npluriflorous\nplurifoliate\nplurifoliolate\nplurify\npluriglandular\npluriguttulate\nplurilateral\nplurilingual\nplurilingualism\nplurilingualist\nplurilocular\nplurimammate\nplurinominal\nplurinucleate\npluripara\npluriparity\npluriparous\npluripartite\npluripetalous\npluripotence\npluripotent\npluripresence\npluriseptate\npluriserial\npluriseriate\npluriseriated\nplurisetose\nplurispiral\nplurisporous\nplurisyllabic\nplurisyllable\nplurivalent\nplurivalve\nplurivorous\nplurivory\nplus\nplush\nplushed\nplushette\nplushily\nplushiness\nplushlike\nplushy\nPlusia\nPlusiinae\nplusquamperfect\nplussage\nPlutarchian\nPlutarchic\nPlutarchical\nPlutarchically\nplutarchy\npluteal\nplutean\npluteiform\nPlutella\npluteus\nPluto\nplutocracy\nplutocrat\nplutocratic\nplutocratical\nplutocratically\nplutolatry\nplutological\nplutologist\nplutology\nplutomania\nPlutonian\nplutonian\nplutonic\nPlutonion\nplutonism\nplutonist\nplutonite\nPlutonium\nplutonium\nplutonometamorphism\nplutonomic\nplutonomist\nplutonomy\npluvial\npluvialiform\npluvialine\nPluvialis\npluvian\npluvine\npluviograph\npluviographic\npluviographical\npluviography\npluviometer\npluviometric\npluviometrical\npluviometrically\npluviometry\npluvioscope\npluviose\npluviosity\npluvious\nply\nplyer\nplying\nplyingly\nPlymouth\nPlymouthism\nPlymouthist\nPlymouthite\nPlynlymmon\nplywood\npneodynamics\npneograph\npneomanometer\npneometer\npneometry\npneophore\npneoscope\npneuma\npneumarthrosis\npneumathaemia\npneumatic\npneumatical\npneumatically\npneumaticity\npneumatics\npneumatism\npneumatist\npneumatize\npneumatized\npneumatocardia\npneumatocele\npneumatochemical\npneumatochemistry\npneumatocyst\npneumatocystic\npneumatode\npneumatogenic\npneumatogenous\npneumatogram\npneumatograph\npneumatographer\npneumatographic\npneumatography\npneumatolitic\npneumatologic\npneumatological\npneumatologist\npneumatology\npneumatolysis\npneumatolytic\nPneumatomachian\nPneumatomachist\nPneumatomachy\npneumatometer\npneumatometry\npneumatomorphic\npneumatonomy\npneumatophany\npneumatophilosophy\npneumatophobia\npneumatophonic\npneumatophony\npneumatophore\npneumatophorous\npneumatorrhachis\npneumatoscope\npneumatosic\npneumatosis\npneumatotactic\npneumatotherapeutics\npneumatotherapy\nPneumatria\npneumaturia\npneumectomy\npneumobacillus\nPneumobranchia\nPneumobranchiata\npneumocele\npneumocentesis\npneumochirurgia\npneumococcal\npneumococcemia\npneumococcic\npneumococcous\npneumococcus\npneumoconiosis\npneumoderma\npneumodynamic\npneumodynamics\npneumoencephalitis\npneumoenteritis\npneumogastric\npneumogram\npneumograph\npneumographic\npneumography\npneumohemothorax\npneumohydropericardium\npneumohydrothorax\npneumolith\npneumolithiasis\npneumological\npneumology\npneumolysis\npneumomalacia\npneumomassage\nPneumometer\npneumomycosis\npneumonalgia\npneumonectasia\npneumonectomy\npneumonedema\npneumonia\npneumonic\npneumonitic\npneumonitis\npneumonocace\npneumonocarcinoma\npneumonocele\npneumonocentesis\npneumonocirrhosis\npneumonoconiosis\npneumonodynia\npneumonoenteritis\npneumonoerysipelas\npneumonographic\npneumonography\npneumonokoniosis\npneumonolith\npneumonolithiasis\npneumonolysis\npneumonomelanosis\npneumonometer\npneumonomycosis\npneumonoparesis\npneumonopathy\npneumonopexy\npneumonophorous\npneumonophthisis\npneumonopleuritis\npneumonorrhagia\npneumonorrhaphy\npneumonosis\npneumonotherapy\npneumonotomy\npneumony\npneumopericardium\npneumoperitoneum\npneumoperitonitis\npneumopexy\npneumopleuritis\npneumopyothorax\npneumorrachis\npneumorrhachis\npneumorrhagia\npneumotactic\npneumotherapeutics\npneumotherapy\npneumothorax\npneumotomy\npneumotoxin\npneumotropic\npneumotropism\npneumotyphoid\npneumotyphus\npneumoventriculography\nPo\npo\nPoa\nPoaceae\npoaceous\npoach\npoachable\npoacher\npoachiness\npoachy\nPoales\npoalike\npob\npobby\nPoblacht\npoblacion\npobs\npochade\npochard\npochay\npoche\npochette\npocilliform\npock\npocket\npocketable\npocketableness\npocketbook\npocketed\npocketer\npocketful\npocketing\npocketknife\npocketless\npocketlike\npockety\npockhouse\npockily\npockiness\npockmanteau\npockmantie\npockmark\npockweed\npockwood\npocky\npoco\npococurante\npococuranteism\npococurantic\npococurantish\npococurantism\npococurantist\npocosin\npoculary\npoculation\npoculent\npoculiform\npod\npodagra\npodagral\npodagric\npodagrical\npodagrous\npodal\npodalgia\npodalic\nPodaliriidae\nPodalirius\nPodarge\nPodargidae\nPodarginae\npodargine\npodargue\nPodargus\npodarthral\npodarthritis\npodarthrum\npodatus\nPodaxonia\npodaxonial\npodded\npodder\npoddidge\npoddish\npoddle\npoddy\npodelcoma\npodeon\npodesta\npodesterate\npodetiiform\npodetium\npodex\npodge\npodger\npodgily\npodginess\npodgy\npodial\npodiatrist\npodiatry\npodical\nPodiceps\npodices\nPodicipedidae\npodilegous\npodite\npoditic\npoditti\npodium\npodler\npodley\npodlike\npodobranch\npodobranchia\npodobranchial\npodobranchiate\npodocarp\nPodocarpaceae\nPodocarpineae\npodocarpous\nPodocarpus\npodocephalous\npododerm\npododynia\npodogyn\npodogyne\npodogynium\nPodolian\npodolite\npodology\npodomancy\npodomere\npodometer\npodometry\nPodophrya\nPodophryidae\nPodophthalma\nPodophthalmata\npodophthalmate\npodophthalmatous\nPodophthalmia\npodophthalmian\npodophthalmic\npodophthalmite\npodophthalmitic\npodophthalmous\nPodophyllaceae\npodophyllic\npodophyllin\npodophyllotoxin\npodophyllous\nPodophyllum\npodophyllum\npodoscaph\npodoscapher\npodoscopy\nPodosomata\npodosomatous\npodosperm\nPodosphaera\nPodostemaceae\npodostemaceous\npodostemad\nPodostemon\nPodostemonaceae\npodostemonaceous\nPodostomata\npodostomatous\npodotheca\npodothecal\nPodozamites\nPodsnap\nPodsnappery\npodsol\npodsolic\npodsolization\npodsolize\nPodunk\nPodura\npoduran\npodurid\nPoduridae\npodware\npodzol\npodzolic\npodzolization\npodzolize\npoe\nPoecile\nPoeciliidae\npoecilitic\nPoecilocyttares\npoecilocyttarous\npoecilogonous\npoecilogony\npoecilomere\npoecilonym\npoecilonymic\npoecilonymy\npoecilopod\nPoecilopoda\npoecilopodous\npoem\npoematic\npoemet\npoemlet\nPoephaga\npoephagous\nPoephagus\npoesie\npoesiless\npoesis\npoesy\npoet\npoetaster\npoetastering\npoetasterism\npoetastery\npoetastress\npoetastric\npoetastrical\npoetastry\npoetcraft\npoetdom\npoetesque\npoetess\npoethood\npoetic\npoetical\npoeticality\npoetically\npoeticalness\npoeticism\npoeticize\npoeticness\npoetics\npoeticule\npoetito\npoetization\npoetize\npoetizer\npoetless\npoetlike\npoetling\npoetly\npoetomachia\npoetress\npoetry\npoetryless\npoetship\npoetwise\npogamoggan\npogge\npoggy\nPogo\nPogonatum\nPogonia\npogoniasis\npogoniate\npogonion\npogonip\npogoniris\npogonite\npogonological\npogonologist\npogonology\npogonotomy\npogonotrophy\npogrom\npogromist\npogromize\npogy\npoh\npoha\npohickory\npohna\npohutukawa\npoi\nPoiana\nPoictesme\npoietic\npoignance\npoignancy\npoignant\npoignantly\npoignet\npoikilitic\npoikiloblast\npoikiloblastic\npoikilocyte\npoikilocythemia\npoikilocytosis\npoikilotherm\npoikilothermic\npoikilothermism\npoil\npoilu\npoimenic\npoimenics\nPoinciana\npoind\npoindable\npoinder\npoinding\nPoinsettia\npoint\npointable\npointage\npointed\npointedly\npointedness\npointel\npointer\npointful\npointfully\npointfulness\npointillism\npointillist\npointing\npointingly\npointless\npointlessly\npointlessness\npointlet\npointleted\npointmaker\npointman\npointment\npointrel\npointsman\npointswoman\npointways\npointwise\npointy\npoisable\npoise\npoised\npoiser\npoison\npoisonable\npoisonful\npoisonfully\npoisoning\npoisonless\npoisonlessness\npoisonmaker\npoisonous\npoisonously\npoisonousness\npoisonproof\npoisonweed\npoisonwood\npoitrail\npoitrel\npoivrade\npokable\nPokan\nPokanoket\npoke\npokeberry\npoked\npokeful\npokeloken\npokeout\npoker\npokerish\npokerishly\npokerishness\npokeroot\npokeweed\npokey\npokily\npokiness\npoking\nPokom\nPokomam\nPokomo\npokomoo\nPokonchi\npokunt\npoky\npol\nPolab\nPolabian\nPolabish\npolacca\nPolack\npolack\npolacre\nPolander\nPolanisia\npolar\npolaric\nPolarid\npolarigraphic\npolarimeter\npolarimetric\npolarimetry\nPolaris\npolariscope\npolariscopic\npolariscopically\npolariscopist\npolariscopy\npolaristic\npolaristrobometer\npolarity\npolarizability\npolarizable\npolarization\npolarize\npolarizer\npolarly\npolarogram\npolarograph\npolarographic\npolarographically\npolarography\nPolaroid\npolarward\npolaxis\npoldavis\npoldavy\npolder\npolderboy\npolderman\nPole\npole\npolearm\npoleax\npoleaxe\npoleaxer\npoleburn\npolecat\npolehead\npoleless\npoleman\npolemarch\npolemic\npolemical\npolemically\npolemician\npolemicist\npolemics\npolemist\npolemize\nPolemoniaceae\npolemoniaceous\nPolemoniales\nPolemonium\npolemoscope\npolenta\npoler\npolesetter\nPolesian\npolesman\npolestar\npoleward\npolewards\npoley\npoliad\npoliadic\nPolian\npolianite\nPolianthes\npolice\npoliced\npolicedom\npoliceless\npoliceman\npolicemanish\npolicemanism\npolicemanlike\npolicemanship\npolicewoman\nPolichinelle\npolicial\npolicize\npolicizer\npoliclinic\npolicy\npolicyholder\npoliencephalitis\npoliencephalomyelitis\npoligar\npoligarship\npoligraphical\nPolinices\npolio\npolioencephalitis\npolioencephalomyelitis\npoliomyelitis\npoliomyelopathy\npolioneuromere\npoliorcetic\npoliorcetics\npoliosis\npolis\nPolish\npolish\npolishable\npolished\npolishedly\npolishedness\npolisher\npolishment\npolisman\npolissoir\nPolistes\npolitarch\npolitarchic\nPolitbureau\nPolitburo\npolite\npoliteful\npolitely\npoliteness\npolitesse\npolitic\npolitical\npoliticalism\npoliticalize\npolitically\npoliticaster\npolitician\npoliticious\npoliticist\npoliticize\npoliticizer\npoliticly\npolitico\npoliticomania\npoliticophobia\npolitics\npolitied\nPolitique\npolitist\npolitize\npolity\npolitzerization\npolitzerize\npolk\npolka\nPoll\npoll\npollable\npollack\npolladz\npollage\npollakiuria\npollam\npollan\npollarchy\npollard\npollbook\npolled\npollen\npollened\npolleniferous\npollenigerous\npollenite\npollenivorous\npollenless\npollenlike\npollenproof\npollent\npoller\npolleten\npollex\npollical\npollicar\npollicate\npollicitation\npollinar\npollinarium\npollinate\npollination\npollinator\npollinctor\npollincture\npolling\npollinia\npollinic\npollinical\npolliniferous\npollinigerous\npollinium\npollinivorous\npollinization\npollinize\npollinizer\npollinodial\npollinodium\npollinoid\npollinose\npollinosis\npolliwig\npolliwog\npollock\npolloi\npollster\npollucite\npollutant\npollute\npolluted\npollutedly\npollutedness\npolluter\npolluting\npollutingly\npollution\nPollux\npollux\nPolly\nPollyanna\nPollyannish\npollywog\npolo\npoloconic\npolocyte\npoloist\npolonaise\nPolonese\nPolonia\nPolonial\nPolonian\nPolonism\npolonium\nPolonius\nPolonization\nPolonize\npolony\npolos\npolska\npolt\npoltergeist\npoltfoot\npoltfooted\npoltina\npoltinnik\npoltophagic\npoltophagist\npoltophagy\npoltroon\npoltroonery\npoltroonish\npoltroonishly\npoltroonism\npoluphloisboic\npoluphloisboiotatotic\npoluphloisboiotic\npolverine\npoly\npolyacanthus\npolyacid\npolyacoustic\npolyacoustics\npolyact\npolyactinal\npolyactine\nPolyactinia\npolyad\npolyadelph\nPolyadelphia\npolyadelphian\npolyadelphous\npolyadenia\npolyadenitis\npolyadenoma\npolyadenous\npolyadic\npolyaffectioned\npolyalcohol\npolyamide\npolyamylose\nPolyandria\npolyandria\npolyandrian\npolyandrianism\npolyandric\npolyandrious\npolyandrism\npolyandrist\npolyandrium\npolyandrous\npolyandry\nPolyangium\npolyangular\npolyantha\npolyanthous\npolyanthus\npolyanthy\npolyarch\npolyarchal\npolyarchical\npolyarchist\npolyarchy\npolyarteritis\npolyarthric\npolyarthritic\npolyarthritis\npolyarthrous\npolyarticular\npolyatomic\npolyatomicity\npolyautographic\npolyautography\npolyaxial\npolyaxon\npolyaxone\npolyaxonic\npolybasic\npolybasicity\npolybasite\npolyblast\nPolyborinae\npolyborine\nPolyborus\npolybranch\nPolybranchia\npolybranchian\nPolybranchiata\npolybranchiate\npolybromid\npolybromide\npolybunous\npolybuny\npolybuttoned\npolycarboxylic\nPolycarp\npolycarpellary\npolycarpic\nPolycarpon\npolycarpous\npolycarpy\npolycellular\npolycentral\npolycentric\npolycephalic\npolycephalous\npolycephaly\nPolychaeta\npolychaete\npolychaetous\npolychasial\npolychasium\npolychloride\npolychoerany\npolychord\npolychotomous\npolychotomy\npolychrest\npolychrestic\npolychrestical\npolychresty\npolychroic\npolychroism\npolychromasia\npolychromate\npolychromatic\npolychromatism\npolychromatist\npolychromatize\npolychromatophil\npolychromatophile\npolychromatophilia\npolychromatophilic\npolychrome\npolychromia\npolychromic\npolychromism\npolychromize\npolychromous\npolychromy\npolychronious\npolyciliate\npolycitral\npolyclad\nPolycladida\npolycladine\npolycladose\npolycladous\npolyclady\nPolycletan\npolyclinic\npolyclona\npolycoccous\nPolycodium\npolyconic\npolycormic\npolycotyl\npolycotyledon\npolycotyledonary\npolycotyledonous\npolycotyledony\npolycotylous\npolycotyly\npolycracy\npolycrase\npolycratic\npolycrotic\npolycrotism\npolycrystalline\npolyctenid\nPolyctenidae\npolycttarian\npolycyanide\npolycyclic\npolycycly\npolycyesis\npolycystic\npolycythemia\npolycythemic\nPolycyttaria\npolydactyl\npolydactyle\npolydactylism\npolydactylous\nPolydactylus\npolydactyly\npolydaemoniac\npolydaemonism\npolydaemonist\npolydaemonistic\npolydemic\npolydenominational\npolydental\npolydermous\npolydermy\npolydigital\npolydimensional\npolydipsia\npolydisperse\npolydomous\npolydymite\npolydynamic\npolyeidic\npolyeidism\npolyembryonate\npolyembryonic\npolyembryony\npolyemia\npolyemic\npolyenzymatic\npolyergic\nPolyergus\npolyester\npolyesthesia\npolyesthetic\npolyethnic\npolyethylene\npolyfenestral\npolyflorous\npolyfoil\npolyfold\nPolygala\nPolygalaceae\npolygalaceous\npolygalic\npolygam\nPolygamia\npolygamian\npolygamic\npolygamical\npolygamically\npolygamist\npolygamistic\npolygamize\npolygamodioecious\npolygamous\npolygamously\npolygamy\npolyganglionic\npolygastric\npolygene\npolygenesic\npolygenesis\npolygenesist\npolygenetic\npolygenetically\npolygenic\npolygenism\npolygenist\npolygenistic\npolygenous\npolygeny\npolyglandular\npolyglobulia\npolyglobulism\npolyglossary\npolyglot\npolyglotry\npolyglottal\npolyglottally\npolyglotted\npolyglotter\npolyglottery\npolyglottic\npolyglottically\npolyglottism\npolyglottist\npolyglottonic\npolyglottous\npolyglotwise\npolyglycerol\npolygon\nPolygonaceae\npolygonaceous\npolygonal\nPolygonales\npolygonally\nPolygonatum\nPolygonella\npolygoneutic\npolygoneutism\nPolygonia\npolygonic\npolygonically\npolygonoid\npolygonous\nPolygonum\npolygony\nPolygordius\npolygram\npolygrammatic\npolygraph\npolygrapher\npolygraphic\npolygraphy\npolygroove\npolygrooved\npolygyn\npolygynaiky\nPolygynia\npolygynian\npolygynic\npolygynious\npolygynist\npolygynoecial\npolygynous\npolygyny\npolygyral\npolygyria\npolyhaemia\npolyhaemic\npolyhalide\npolyhalite\npolyhalogen\npolyharmonic\npolyharmony\npolyhedral\npolyhedric\npolyhedrical\npolyhedroid\npolyhedron\npolyhedrosis\npolyhedrous\npolyhemia\npolyhidrosis\npolyhistor\npolyhistorian\npolyhistoric\npolyhistory\npolyhybrid\npolyhydric\npolyhydroxy\npolyideic\npolyideism\npolyidrosis\npolyiodide\npolykaryocyte\npolylaminated\npolylemma\npolylepidous\npolylinguist\npolylith\npolylithic\npolylobular\npolylogy\npolyloquent\npolymagnet\npolymastia\npolymastic\nPolymastiga\npolymastigate\nPolymastigida\nPolymastigina\npolymastigous\npolymastism\nPolymastodon\npolymastodont\npolymasty\npolymath\npolymathic\npolymathist\npolymathy\npolymazia\npolymelia\npolymelian\npolymely\npolymer\npolymere\npolymeria\npolymeric\npolymeride\npolymerism\npolymerization\npolymerize\npolymerous\npolymetallism\npolymetameric\npolymeter\npolymethylene\npolymetochia\npolymetochic\npolymicrian\npolymicrobial\npolymicrobic\npolymicroscope\npolymignite\nPolymixia\npolymixiid\nPolymixiidae\nPolymnestor\nPolymnia\npolymnite\npolymolecular\npolymolybdate\npolymorph\nPolymorpha\npolymorphean\npolymorphic\npolymorphism\npolymorphistic\npolymorphonuclear\npolymorphonucleate\npolymorphosis\npolymorphous\npolymorphy\nPolymyaria\npolymyarian\nPolymyarii\nPolymyodi\npolymyodian\npolymyodous\npolymyoid\npolymyositis\npolymythic\npolymythy\npolynaphthene\npolynemid\nPolynemidae\npolynemoid\nPolynemus\nPolynesian\npolynesic\npolyneural\npolyneuric\npolyneuritic\npolyneuritis\npolyneuropathy\npolynodal\nPolynoe\npolynoid\nPolynoidae\npolynome\npolynomial\npolynomialism\npolynomialist\npolynomic\npolynucleal\npolynuclear\npolynucleate\npolynucleated\npolynucleolar\npolynucleosis\nPolyodon\npolyodont\npolyodontal\npolyodontia\nPolyodontidae\npolyodontoid\npolyoecious\npolyoeciously\npolyoeciousness\npolyoecism\npolyoecy\npolyoicous\npolyommatous\npolyonomous\npolyonomy\npolyonychia\npolyonym\npolyonymal\npolyonymic\npolyonymist\npolyonymous\npolyonymy\npolyophthalmic\npolyopia\npolyopic\npolyopsia\npolyopsy\npolyorama\npolyorchidism\npolyorchism\npolyorganic\npolyose\npolyoxide\npolyoxymethylene\npolyp\npolypage\npolypaged\npolypapilloma\npolyparasitic\npolyparasitism\npolyparesis\npolyparia\npolyparian\npolyparium\npolyparous\npolypary\npolypean\npolyped\nPolypedates\npolypeptide\npolypetal\nPolypetalae\npolypetalous\nPolyphaga\npolyphage\npolyphagia\npolyphagian\npolyphagic\npolyphagist\npolyphagous\npolyphagy\npolyphalangism\npolypharmacal\npolypharmacist\npolypharmacon\npolypharmacy\npolypharmic\npolyphasal\npolyphase\npolyphaser\nPolypheme\npolyphemian\npolyphemic\npolyphemous\npolyphenol\npolyphloesboean\npolyphloisboioism\npolyphloisboism\npolyphobia\npolyphobic\npolyphone\npolyphoned\npolyphonia\npolyphonic\npolyphonical\npolyphonism\npolyphonist\npolyphonium\npolyphonous\npolyphony\npolyphore\npolyphosphoric\npolyphotal\npolyphote\npolyphylesis\npolyphyletic\npolyphyletically\npolyphylety\npolyphylline\npolyphyllous\npolyphylly\npolyphylogeny\npolyphyly\npolyphyodont\nPolypi\npolypi\npolypian\npolypide\npolypidom\nPolypifera\npolypiferous\npolypigerous\npolypinnate\npolypite\nPolyplacophora\npolyplacophoran\npolyplacophore\npolyplacophorous\npolyplastic\nPolyplectron\npolyplegia\npolyplegic\npolyploid\npolyploidic\npolyploidy\npolypnoea\npolypnoeic\npolypod\nPolypoda\npolypodia\nPolypodiaceae\npolypodiaceous\nPolypodium\npolypodous\npolypody\npolypoid\npolypoidal\nPolypomorpha\npolypomorphic\nPolyporaceae\npolyporaceous\npolypore\npolyporite\npolyporoid\npolyporous\nPolyporus\npolypose\npolyposis\npolypotome\npolypous\npolypragmacy\npolypragmatic\npolypragmatical\npolypragmatically\npolypragmatism\npolypragmatist\npolypragmaty\npolypragmist\npolypragmon\npolypragmonic\npolypragmonist\npolyprene\npolyprism\npolyprismatic\npolyprothetic\npolyprotodont\nPolyprotodontia\npolypseudonymous\npolypsychic\npolypsychical\npolypsychism\npolypterid\nPolypteridae\npolypteroid\nPolypterus\npolyptote\npolyptoton\npolyptych\npolypus\npolyrhizal\npolyrhizous\npolyrhythmic\npolyrhythmical\npolysaccharide\npolysaccharose\nPolysaccum\npolysalicylide\npolysarcia\npolysarcous\npolyschematic\npolyschematist\npolyscope\npolyscopic\npolysemant\npolysemantic\npolysemeia\npolysemia\npolysemous\npolysemy\npolysensuous\npolysensuousness\npolysepalous\npolyseptate\npolyserositis\npolysided\npolysidedness\npolysilicate\npolysilicic\nPolysiphonia\npolysiphonic\npolysiphonous\npolysomatic\npolysomatous\npolysomaty\npolysomia\npolysomic\npolysomitic\npolysomous\npolysomy\npolyspast\npolyspaston\npolyspermal\npolyspermatous\npolyspermia\npolyspermic\npolyspermous\npolyspermy\npolyspondylic\npolyspondylous\npolyspondyly\nPolyspora\npolysporangium\npolyspore\npolyspored\npolysporic\npolysporous\npolystachyous\npolystaurion\npolystele\npolystelic\npolystemonous\npolystichoid\npolystichous\nPolystichum\nPolystictus\nPolystomata\nPolystomatidae\npolystomatous\npolystome\nPolystomea\nPolystomella\nPolystomidae\npolystomium\npolystylar\npolystyle\npolystylous\npolystyrene\npolysulphide\npolysulphuration\npolysulphurization\npolysyllabic\npolysyllabical\npolysyllabically\npolysyllabicism\npolysyllabicity\npolysyllabism\npolysyllable\npolysyllogism\npolysyllogistic\npolysymmetrical\npolysymmetrically\npolysymmetry\npolysyndetic\npolysyndetically\npolysyndeton\npolysynthesis\npolysynthesism\npolysynthetic\npolysynthetical\npolysynthetically\npolysyntheticism\npolysynthetism\npolysynthetize\npolytechnic\npolytechnical\npolytechnics\npolytechnist\npolyterpene\nPolythalamia\npolythalamian\npolythalamic\npolythalamous\npolythecial\npolytheism\npolytheist\npolytheistic\npolytheistical\npolytheistically\npolytheize\npolythelia\npolythelism\npolythely\npolythene\npolythionic\npolytitanic\npolytocous\npolytokous\npolytoky\npolytomous\npolytomy\npolytonal\npolytonalism\npolytonality\npolytone\npolytonic\npolytony\npolytope\npolytopic\npolytopical\nPolytrichaceae\npolytrichaceous\npolytrichia\npolytrichous\nPolytrichum\npolytrochal\npolytrochous\npolytrope\npolytrophic\npolytropic\npolytungstate\npolytungstic\npolytype\npolytypic\npolytypical\npolytypy\npolyuresis\npolyuria\npolyuric\npolyvalence\npolyvalent\npolyvinyl\npolyvinylidene\npolyvirulent\npolyvoltine\nPolyzoa\npolyzoal\npolyzoan\npolyzoarial\npolyzoarium\npolyzoary\npolyzoic\npolyzoism\npolyzonal\npolyzooid\npolyzoon\npolzenite\npom\npomace\nPomaceae\npomacentrid\nPomacentridae\npomacentroid\nPomacentrus\npomaceous\npomade\nPomaderris\nPomak\npomander\npomane\npomarine\npomarium\npomate\npomato\npomatomid\nPomatomidae\nPomatomus\npomatorhine\npomatum\npombe\npombo\npome\npomegranate\npomelo\nPomeranian\npomeridian\npomerium\npomewater\npomey\npomfret\npomiculture\npomiculturist\npomiferous\npomiform\npomivorous\nPommard\npomme\npommee\npommel\npommeled\npommeler\npommet\npommey\npommy\nPomo\npomological\npomologically\npomologist\npomology\nPomona\npomonal\npomonic\npomp\npompa\nPompadour\npompadour\npompal\npompano\nPompeian\nPompeii\npompelmous\nPompey\npompey\npompholix\npompholygous\npompholyx\npomphus\npompier\npompilid\nPompilidae\npompiloid\nPompilus\npompion\npompist\npompless\npompoleon\npompon\npomposity\npompous\npompously\npompousness\npompster\nPomptine\npomster\npon\nPonca\nponce\nponceau\nponcelet\nponcho\nponchoed\nPoncirus\npond\npondage\npondbush\nponder\nponderability\nponderable\nponderableness\nponderal\nponderance\nponderancy\nponderant\nponderary\nponderate\nponderation\nponderative\nponderer\npondering\nponderingly\nponderling\nponderment\nponderomotive\nponderosapine\nponderosity\nponderous\nponderously\nponderousness\npondfish\npondful\npondgrass\npondlet\npondman\nPondo\npondok\npondokkie\nPondomisi\npondside\npondus\npondweed\npondwort\npondy\npone\nponent\nPonera\nPoneramoeba\nponerid\nPoneridae\nPonerinae\nponerine\nponeroid\nponerology\nponey\npong\nponga\npongee\nPongidae\nPongo\nponiard\nponica\nponier\nponja\npont\nPontac\nPontacq\npontage\npontal\nPontederia\nPontederiaceae\npontederiaceous\npontee\npontes\npontianak\nPontic\npontic\nponticello\nponticular\nponticulus\npontifex\npontiff\npontific\npontifical\npontificalia\npontificalibus\npontificality\npontifically\npontificate\npontification\npontifices\npontificial\npontificially\npontificious\npontify\npontil\npontile\npontin\nPontine\npontine\npontist\npontlevis\nponto\nPontocaspian\npontocerebellar\nponton\npontonier\npontoon\npontooneer\npontooner\npontooning\nPontus\npontvolant\npony\nponzite\npooa\npooch\npooder\npoodle\npoodledom\npoodleish\npoodleship\npoof\npoogye\npooh\npoohpoohist\npook\npooka\npookaun\npookoo\npool\npooler\npooli\npoolroom\npoolroot\npoolside\npoolwort\npooly\npoon\npoonac\npoonga\npoonghie\npoop\npooped\npoophyte\npoophytic\npoor\npoorhouse\npoorish\npoorliness\npoorling\npoorly\npoorlyish\npoormaster\npoorness\npoorweed\npoorwill\npoot\nPop\npop\npopadam\npopal\npopcorn\npopdock\npope\nPopean\npopedom\npopeholy\npopehood\npopeism\npopeler\npopeless\npopelike\npopeline\npopely\npopery\npopeship\npopess\npopeye\npopeyed\npopglove\npopgun\npopgunner\npopgunnery\nPopian\npopify\npopinac\npopinjay\nPopish\npopish\npopishly\npopishness\npopjoy\npoplar\npoplared\nPoplilia\npoplin\npoplinette\npopliteal\npopliteus\npoplolly\nPopocracy\nPopocrat\nPopolari\nPopoloco\npopomastic\npopover\nPopovets\npoppa\npoppability\npoppable\npoppean\npoppel\npopper\npoppet\npoppethead\npoppied\npoppin\npopple\npopply\npoppy\npoppycock\npoppycockish\npoppyfish\npoppyhead\npoppylike\npoppywort\npopshop\npopulace\npopular\npopularism\nPopularist\npopularity\npopularization\npopularize\npopularizer\npopularly\npopularness\npopulate\npopulation\npopulational\npopulationist\npopulationistic\npopulationless\npopulator\npopulicide\npopulin\nPopulism\nPopulist\nPopulistic\npopulous\npopulously\npopulousness\nPopulus\npopweed\nporal\nporbeagle\nporcate\nporcated\nporcelain\nporcelainization\nporcelainize\nporcelainlike\nporcelainous\nporcelaneous\nporcelanic\nporcelanite\nporcelanous\nPorcellana\nporcellanian\nporcellanid\nPorcellanidae\nporcellanize\nporch\nporched\nporching\nporchless\nporchlike\nporcine\nPorcula\nporcupine\nporcupinish\npore\npored\nporelike\nPorella\nporencephalia\nporencephalic\nporencephalitis\nporencephalon\nporencephalous\nporencephalus\nporencephaly\nporer\nporge\nporger\nporgy\nPoria\nporicidal\nPorifera\nporiferal\nporiferan\nporiferous\nporiform\nporimania\nporiness\nporing\nporingly\nporiomanic\nporism\nporismatic\nporismatical\nporismatically\nporistic\nporistical\nporite\nPorites\nPoritidae\nporitoid\npork\nporkburger\nporker\nporkery\nporket\nporkfish\nporkish\nporkless\nporkling\nporkman\nPorkopolis\nporkpie\nporkwood\nporky\npornerastic\npornocracy\npornocrat\npornograph\npornographer\npornographic\npornographically\npornographist\npornography\npornological\nPorocephalus\nporodine\nporodite\nporogam\nporogamic\nporogamous\nporogamy\nporokaiwhiria\nporokeratosis\nPorokoto\nporoma\nporometer\nporophyllous\nporoplastic\nporoporo\npororoca\nporos\nporoscope\nporoscopic\nporoscopy\nporose\nporoseness\nporosimeter\nporosis\nporosity\nporotic\nporotype\nporous\nporously\nporousness\nporpentine\nporphine\nPorphyra\nPorphyraceae\nporphyraceous\nporphyratin\nPorphyrean\nporphyria\nPorphyrian\nporphyrian\nPorphyrianist\nporphyrin\nporphyrine\nporphyrinuria\nPorphyrio\nporphyrion\nporphyrite\nporphyritic\nporphyroblast\nporphyroblastic\nporphyrogene\nporphyrogenite\nporphyrogenitic\nporphyrogenitism\nporphyrogeniture\nporphyrogenitus\nporphyroid\nporphyrophore\nporphyrous\nporphyry\nPorpita\nporpitoid\nporpoise\nporpoiselike\nporporate\nporr\nporraceous\nporrect\nporrection\nporrectus\nporret\nporridge\nporridgelike\nporridgy\nporriginous\nporrigo\nPorrima\nporringer\nporriwiggle\nporry\nport\nporta\nportability\nportable\nportableness\nportably\nportage\nportague\nportahepatis\nportail\nportal\nportaled\nportalled\nportalless\nportamento\nportance\nportass\nportatile\nportative\nportcrayon\nportcullis\nporteacid\nported\nporteligature\nportend\nportendance\nportendment\nPorteno\nportension\nportent\nportention\nportentosity\nportentous\nportentously\nportentousness\nporteous\nporter\nporterage\nPorteranthus\nporteress\nporterhouse\nporterlike\nporterly\nportership\nportfire\nportfolio\nportglaive\nportglave\nportgrave\nPorthetria\nPortheus\nporthole\nporthook\nporthors\nporthouse\nPortia\nportia\nportico\nporticoed\nportiere\nportiered\nportifory\nportify\nportio\nportiomollis\nportion\nportionable\nportional\nportionally\nportioner\nportionist\nportionize\nportionless\nportitor\nPortlandian\nportlast\nportless\nportlet\nportligature\nportlily\nportliness\nportly\nportman\nportmanmote\nportmanteau\nportmanteaux\nportmantle\nportmantologism\nportment\nportmoot\nporto\nportoise\nportolan\nportolano\nPortor\nportrait\nportraitist\nportraitlike\nportraiture\nportray\nportrayable\nportrayal\nportrayer\nportrayist\nportrayment\nportreeve\nportreeveship\nportress\nportside\nportsider\nportsman\nportuary\nportugais\nPortugal\nPortugalism\nPortugee\nPortuguese\nPortulaca\nPortulacaceae\nportulacaceous\nPortulacaria\nportulan\nPortunalia\nportunian\nPortunidae\nPortunus\nportway\nporty\nporule\nporulose\nporulous\nporus\nporwigle\npory\nPorzana\nposadaship\nposca\npose\nPoseidon\nPoseidonian\nposement\nposer\nposeur\nposey\nposh\nposing\nposingly\nposit\nposition\npositional\npositioned\npositioner\npositionless\npositival\npositive\npositively\npositiveness\npositivism\npositivist\npositivistic\npositivistically\npositivity\npositivize\npositor\npositron\npositum\npositure\nPosnanian\nposnet\nposole\nposologic\nposological\nposologist\nposology\npospolite\nposs\nposse\nposseman\npossess\npossessable\npossessed\npossessedly\npossessedness\npossessing\npossessingly\npossessingness\npossession\npossessional\npossessionalism\npossessionalist\npossessionary\npossessionate\npossessioned\npossessioner\npossessionist\npossessionless\npossessionlessness\npossessival\npossessive\npossessively\npossessiveness\npossessor\npossessoress\npossessorial\npossessoriness\npossessorship\npossessory\nposset\npossibilism\npossibilist\npossibilitate\npossibility\npossible\npossibleness\npossibly\npossum\npossumwood\npost\npostabdomen\npostabdominal\npostable\npostabortal\npostacetabular\npostadjunct\npostage\npostal\npostallantoic\npostally\npostalveolar\npostament\npostamniotic\npostanal\npostanesthetic\npostantennal\npostaortic\npostapoplectic\npostappendicular\npostarterial\npostarthritic\npostarticular\npostarytenoid\npostaspirate\npostaspirated\npostasthmatic\npostatrial\npostauditory\npostauricular\npostaxiad\npostaxial\npostaxially\npostaxillary\npostbag\npostbaptismal\npostbox\npostboy\npostbrachial\npostbrachium\npostbranchial\npostbreakfast\npostbronchial\npostbuccal\npostbulbar\npostbursal\npostcaecal\npostcalcaneal\npostcalcarine\npostcanonical\npostcardiac\npostcardinal\npostcarnate\npostcarotid\npostcart\npostcartilaginous\npostcatarrhal\npostcava\npostcaval\npostcecal\npostcenal\npostcentral\npostcentrum\npostcephalic\npostcerebellar\npostcerebral\npostcesarean\npostcibal\npostclassic\npostclassical\npostclassicism\npostclavicle\npostclavicula\npostclavicular\npostclimax\npostclitellian\npostclival\npostcolon\npostcolonial\npostcolumellar\npostcomitial\npostcommissural\npostcommissure\npostcommunicant\nPostcommunion\npostconceptive\npostcondylar\npostconfinement\npostconnubial\npostconsonantal\npostcontact\npostcontract\npostconvalescent\npostconvulsive\npostcordial\npostcornu\npostcosmic\npostcostal\npostcoxal\npostcritical\npostcrural\npostcubital\npostdate\npostdental\npostdepressive\npostdetermined\npostdevelopmental\npostdiagnostic\npostdiaphragmatic\npostdiastolic\npostdicrotic\npostdigestive\npostdigital\npostdiluvial\npostdiluvian\npostdiphtheric\npostdiphtheritic\npostdisapproved\npostdisseizin\npostdisseizor\npostdoctoral\npostdoctorate\npostdural\npostdysenteric\nposted\nposteen\npostelection\npostelementary\npostembryonal\npostembryonic\npostemporal\npostencephalitic\npostencephalon\npostenteral\npostentry\npostepileptic\nposter\nposterette\nposteriad\nposterial\nposterior\nposterioric\nposteriorically\nposterioristic\nposterioristically\nposteriority\nposteriorly\nposteriormost\nposteriors\nposteriorums\nposterish\nposterishness\nposterist\nposterity\nposterize\npostern\nposteroclusion\nposterodorsad\nposterodorsal\nposterodorsally\nposteroexternal\nposteroinferior\nposterointernal\nposterolateral\nposteromedial\nposteromedian\nposteromesial\nposteroparietal\nposterosuperior\nposterotemporal\nposteroterminal\nposteroventral\nposteruptive\npostesophageal\nposteternity\npostethmoid\npostexilian\npostexilic\npostexist\npostexistence\npostexistency\npostexistent\npostface\npostfact\npostfebrile\npostfemoral\npostfetal\npostfix\npostfixal\npostfixation\npostfixed\npostfixial\npostflection\npostflexion\npostform\npostfoveal\npostfrontal\npostfurca\npostfurcal\npostganglionic\npostgangrenal\npostgastric\npostgeminum\npostgenial\npostgeniture\npostglacial\npostglenoid\npostglenoidal\npostgonorrheic\npostgracile\npostgraduate\npostgrippal\nposthabit\nposthaste\nposthemiplegic\nposthemorrhagic\nposthepatic\nposthetomist\nposthetomy\nposthexaplaric\nposthippocampal\nposthitis\npostholder\nposthole\nposthouse\nposthumeral\nposthumous\nposthumously\nposthumousness\nposthumus\nposthyoid\nposthypnotic\nposthypnotically\nposthypophyseal\nposthypophysis\nposthysterical\npostic\npostical\npostically\nposticous\nposticteric\nposticum\npostil\npostilion\npostilioned\npostillate\npostillation\npostillator\npostimpressionism\npostimpressionist\npostimpressionistic\npostinfective\npostinfluenzal\nposting\npostingly\npostintestinal\npostique\npostischial\npostjacent\npostjugular\npostlabial\npostlachrymal\npostlaryngeal\npostlegitimation\npostlenticular\npostless\npostlike\npostliminary\npostliminiary\npostliminious\npostliminium\npostliminous\npostliminy\npostloitic\npostloral\npostlude\npostludium\npostluetic\npostmalarial\npostmamillary\npostmammary\npostman\npostmandibular\npostmaniacal\npostmarital\npostmark\npostmarriage\npostmaster\npostmasterlike\npostmastership\npostmastoid\npostmaturity\npostmaxillary\npostmaximal\npostmeatal\npostmedia\npostmedial\npostmedian\npostmediastinal\npostmediastinum\npostmedullary\npostmeiotic\npostmeningeal\npostmenstrual\npostmental\npostmeridian\npostmeridional\npostmesenteric\npostmillenarian\npostmillenarianism\npostmillennial\npostmillennialism\npostmillennialist\npostmillennian\npostmineral\npostmistress\npostmortal\npostmortuary\npostmundane\npostmuscular\npostmutative\npostmycotic\npostmyxedematous\npostnarial\npostnaris\npostnasal\npostnatal\npostnate\npostnati\npostnecrotic\npostnephritic\npostneural\npostneuralgic\npostneuritic\npostneurotic\npostnodular\npostnominal\npostnotum\npostnuptial\npostnuptially\npostobituary\npostocular\npostolivary\npostomental\npostoperative\npostoptic\npostoral\npostorbital\npostordination\npostorgastic\npostosseous\npostotic\npostpagan\npostpaid\npostpalatal\npostpalatine\npostpalpebral\npostpaludal\npostparalytic\npostparietal\npostparotid\npostparotitic\npostparoxysmal\npostparturient\npostpatellar\npostpathological\npostpericardial\npostpharyngeal\npostphlogistic\npostphragma\npostphrenic\npostphthisic\npostpituitary\npostplace\npostplegic\npostpneumonic\npostponable\npostpone\npostponement\npostponence\npostponer\npostpontile\npostpose\npostposited\npostposition\npostpositional\npostpositive\npostpositively\npostprandial\npostprandially\npostpredicament\npostprophesy\npostprostate\npostpubertal\npostpubescent\npostpubic\npostpubis\npostpuerperal\npostpulmonary\npostpupillary\npostpycnotic\npostpyloric\npostpyramidal\npostpyretic\npostrachitic\npostramus\npostrectal\npostreduction\npostremogeniture\npostremote\npostrenal\npostresurrection\npostresurrectional\npostretinal\npostrheumatic\npostrhinal\npostrider\npostrorse\npostrostral\npostrubeolar\npostsaccular\npostsacral\npostscalenus\npostscapula\npostscapular\npostscapularis\npostscarlatinal\npostscenium\npostscorbutic\npostscribe\npostscript\npostscriptum\npostscutellar\npostscutellum\npostseason\npostsigmoid\npostsign\npostspasmodic\npostsphenoid\npostsphenoidal\npostsphygmic\npostspinous\npostsplenial\npostsplenic\npoststernal\npoststertorous\npostsuppurative\npostsurgical\npostsynaptic\npostsynsacral\npostsyphilitic\npostsystolic\nposttabetic\nposttarsal\nposttetanic\npostthalamic\npostthoracic\npostthyroidal\nposttibial\nposttonic\nposttoxic\nposttracheal\nposttrapezoid\nposttraumatic\nposttreaty\nposttubercular\nposttussive\nposttympanic\nposttyphoid\npostulancy\npostulant\npostulantship\npostulata\npostulate\npostulation\npostulational\npostulator\npostulatory\npostulatum\npostulnar\npostumbilical\npostumbonal\npostural\nposture\nposturer\npostureteric\nposturist\nposturize\npostuterine\npostvaccinal\npostvaricellar\npostvarioloid\npostvelar\npostvenereal\npostvenous\npostverbal\nPostverta\npostvertebral\npostvesical\npostvide\npostvocalic\npostwar\npostward\npostwise\npostwoman\npostxyphoid\npostyard\npostzygapophysial\npostzygapophysis\nposy\npot\npotability\npotable\npotableness\npotagerie\npotagery\npotamic\nPotamobiidae\nPotamochoerus\nPotamogale\nPotamogalidae\nPotamogeton\nPotamogetonaceae\npotamogetonaceous\npotamological\npotamologist\npotamology\npotamometer\nPotamonidae\npotamophilous\npotamoplankton\npotash\npotashery\npotass\npotassa\npotassamide\npotassic\npotassiferous\npotassium\npotate\npotation\npotative\npotato\npotatoes\npotator\npotatory\nPotawatami\nPotawatomi\npotbank\npotbellied\npotbelly\npotboil\npotboiler\npotboy\npotboydom\npotch\npotcher\npotcherman\npotcrook\npotdar\npote\npotecary\npoteen\npotence\npotency\npotent\npotentacy\npotentate\npotential\npotentiality\npotentialization\npotentialize\npotentially\npotentialness\npotentiate\npotentiation\nPotentilla\npotentiometer\npotentiometric\npotentize\npotently\npotentness\npoter\nPoterium\npotestal\npotestas\npotestate\npotestative\npoteye\npotful\npotgirl\npotgun\npothanger\npothead\npothecary\npotheen\npother\npotherb\npotherment\npothery\npothole\npothook\npothookery\nPothos\npothouse\npothousey\npothunt\npothunter\npothunting\npoticary\npotichomania\npotichomanist\npotifer\nPotiguara\npotion\npotlatch\npotleg\npotlicker\npotlid\npotlike\npotluck\npotmaker\npotmaking\npotman\npotomania\npotomato\npotometer\npotong\npotoo\nPotoroinae\npotoroo\nPotorous\npotpie\npotpourri\npotrack\npotsherd\npotshoot\npotshooter\npotstick\npotstone\npott\npottage\npottagy\npottah\npotted\npotter\npotterer\npotteress\npotteringly\npottery\nPottiaceae\npotting\npottinger\npottle\npottled\npotto\npotty\npotwaller\npotwalling\npotware\npotwhisky\npotwork\npotwort\npouce\npoucer\npoucey\npouch\npouched\npouchful\npouchless\npouchlike\npouchy\npoudrette\npouf\npoulaine\npoulard\npoulardize\npoulp\npoulpe\npoult\npoulter\npoulterer\npoulteress\npoultice\npoulticewise\npoultry\npoultrydom\npoultryist\npoultryless\npoultrylike\npoultryman\npoultryproof\npounamu\npounce\npounced\npouncer\npouncet\npouncing\npouncingly\npound\npoundage\npoundal\npoundcake\npounder\npounding\npoundkeeper\npoundless\npoundlike\npoundman\npoundmaster\npoundmeal\npoundstone\npoundworth\npour\npourer\npourie\npouring\npouringly\npourparler\npourparley\npourpiece\npourpoint\npourpointer\npouser\npoussette\npout\npouter\npoutful\npouting\npoutingly\npouty\npoverish\npoverishment\npoverty\npovertyweed\nPovindah\npow\npowder\npowderable\npowdered\npowderer\npowderiness\npowdering\npowderization\npowderize\npowderizer\npowderlike\npowderman\npowdery\npowdike\npowdry\npowellite\npower\npowerboat\npowered\npowerful\npowerfully\npowerfulness\npowerhouse\npowerless\npowerlessly\npowerlessness\npowermonger\nPowhatan\npowitch\npowldoody\npownie\npowsoddy\npowsowdy\npowwow\npowwower\npowwowism\npox\npoxy\npoy\npoyou\npozzolanic\npozzuolana\npozzuolanic\npraam\nprabble\nprabhu\npractic\npracticability\npracticable\npracticableness\npracticably\npractical\npracticalism\npracticalist\npracticality\npracticalization\npracticalize\npracticalizer\npractically\npracticalness\npracticant\npractice\npracticed\npracticedness\npracticer\npractician\npracticianism\npracticum\npractitional\npractitioner\npractitionery\nprad\nPradeep\npradhana\npraeabdomen\npraeacetabular\npraeanal\npraecava\npraecipe\npraecipuum\npraecoces\npraecocial\npraecognitum\npraecoracoid\npraecordia\npraecordial\npraecordium\npraecornu\npraecox\npraecuneus\npraedial\npraedialist\npraediality\npraeesophageal\npraefect\npraefectorial\npraefectus\npraefervid\npraefloration\npraefoliation\npraehallux\npraelabrum\npraelection\npraelector\npraelectorship\npraelectress\npraeludium\npraemaxilla\npraemolar\npraemunire\npraenarial\nPraenestine\nPraenestinian\npraeneural\npraenomen\npraenomina\npraenominal\npraeoperculum\npraepositor\npraepostor\npraepostorial\npraepubis\npraepuce\npraescutum\nPraesepe\npraesertim\nPraesian\npraesidium\npraesphenoid\npraesternal\npraesternum\npraestomium\npraesystolic\npraetaxation\npraetexta\npraetor\npraetorial\nPraetorian\npraetorian\npraetorianism\npraetorium\npraetorship\npraezygapophysis\npragmatic\npragmatica\npragmatical\npragmaticality\npragmatically\npragmaticalness\npragmaticism\npragmatics\npragmatism\npragmatist\npragmatistic\npragmatize\npragmatizer\nprairie\nprairiecraft\nprairied\nprairiedom\nprairielike\nprairieweed\nprairillon\npraisable\npraisableness\npraisably\npraise\npraiseful\npraisefully\npraisefulness\npraiseless\npraiseproof\npraiser\npraiseworthy\npraising\npraisingly\npraisworthily\npraisworthiness\nPrajapati\nprajna\nPrakash\nPrakrit\nprakriti\nPrakritic\nPrakritize\npraline\npralltriller\npram\nPramnian\nprana\nprance\npranceful\nprancer\nprancing\nprancingly\nprancy\nprandial\nprandially\nprank\npranked\npranker\nprankful\nprankfulness\npranking\nprankingly\nprankish\nprankishly\nprankishness\nprankle\npranksome\npranksomeness\nprankster\npranky\nprase\npraseocobaltic\npraseodidymium\npraseodymia\npraseodymium\npraseolite\nprasine\nprasinous\nprasoid\nprasophagous\nprasophagy\nprastha\nprat\npratal\nPratap\nPratapwant\nprate\nprateful\npratement\npratensian\nPrater\nprater\npratey\npratfall\npratiloma\nPratincola\npratincole\npratincoline\npratincolous\nprating\npratingly\npratique\npratiyasamutpada\nPratt\nprattfall\nprattle\nprattlement\nprattler\nprattling\nprattlingly\nprattly\nprau\nPravin\npravity\nprawn\nprawner\nprawny\nPraxean\nPraxeanist\npraxinoscope\npraxiology\npraxis\nPraxitelean\npray\npraya\nprayer\nprayerful\nprayerfully\nprayerfulness\nprayerless\nprayerlessly\nprayerlessness\nprayermaker\nprayermaking\nprayerwise\nprayful\npraying\nprayingly\nprayingwise\npreabdomen\npreabsorb\npreabsorbent\npreabstract\npreabundance\npreabundant\npreabundantly\npreaccept\npreacceptance\npreaccess\npreaccessible\npreaccidental\npreaccidentally\npreaccommodate\npreaccommodating\npreaccommodatingly\npreaccommodation\npreaccomplish\npreaccomplishment\npreaccord\npreaccordance\npreaccount\npreaccounting\npreaccredit\npreaccumulate\npreaccumulation\npreaccusation\npreaccuse\npreaccustom\npreaccustomed\npreacetabular\npreach\npreachable\npreacher\npreacherdom\npreacheress\npreacherize\npreacherless\npreacherling\npreachership\npreachieved\npreachification\npreachify\npreachily\npreachiness\npreaching\npreachingly\npreachman\npreachment\npreachy\npreacid\npreacidity\npreacidly\npreacidness\npreacknowledge\npreacknowledgment\npreacquaint\npreacquaintance\npreacquire\npreacquired\npreacquit\npreacquittal\npreact\npreaction\npreactive\npreactively\npreactivity\npreacute\npreacutely\npreacuteness\npreadamic\npreadamite\npreadamitic\npreadamitical\npreadamitism\npreadapt\npreadaptable\npreadaptation\npreaddition\npreadditional\npreaddress\npreadequacy\npreadequate\npreadequately\npreadhere\npreadherence\npreadherent\npreadjectival\npreadjective\npreadjourn\npreadjournment\npreadjunct\npreadjust\npreadjustable\npreadjustment\npreadministration\npreadministrative\npreadministrator\npreadmire\npreadmirer\npreadmission\npreadmit\npreadmonish\npreadmonition\npreadolescent\npreadopt\npreadoption\npreadoration\npreadore\npreadorn\npreadornment\npreadult\npreadulthood\npreadvance\npreadvancement\npreadventure\npreadvertency\npreadvertent\npreadvertise\npreadvertisement\npreadvice\npreadvisable\npreadvise\npreadviser\npreadvisory\npreadvocacy\npreadvocate\npreaestival\npreaffect\npreaffection\npreaffidavit\npreaffiliate\npreaffiliation\npreaffirm\npreaffirmation\npreaffirmative\npreafflict\npreaffliction\npreafternoon\npreaged\npreaggravate\npreaggravation\npreaggression\npreaggressive\npreagitate\npreagitation\npreagonal\npreagony\npreagree\npreagreement\npreagricultural\npreagriculture\nprealarm\nprealcohol\nprealcoholic\nprealgebra\nprealgebraic\nprealkalic\npreallable\npreallably\npreallegation\npreallege\nprealliance\npreallied\npreallot\npreallotment\npreallow\npreallowable\npreallowably\npreallowance\npreallude\npreallusion\npreally\nprealphabet\nprealphabetical\nprealtar\nprealteration\nprealveolar\npreamalgamation\npreambassadorial\npreambition\npreambitious\npreamble\npreambled\npreambling\npreambular\npreambulary\npreambulate\npreambulation\npreambulatory\npreanal\npreanaphoral\npreanesthetic\npreanimism\npreannex\npreannounce\npreannouncement\npreannouncer\npreantepenult\npreantepenultimate\npreanterior\npreanticipate\npreantiquity\npreantiseptic\npreaortic\npreappearance\npreapperception\npreapplication\npreappoint\npreappointment\npreapprehension\npreapprise\npreapprobation\npreapproval\npreapprove\npreaptitude\nprearm\nprearrange\nprearrangement\nprearrest\nprearrestment\nprearticulate\npreartistic\npreascertain\npreascertainment\npreascitic\npreaseptic\npreassigned\npreassume\npreassurance\npreassure\npreataxic\npreattachment\npreattune\npreaudience\npreauditory\npreaver\npreavowal\npreaxiad\npreaxial\npreaxially\nprebachelor\nprebacillary\nprebake\nprebalance\npreballot\npreballoting\nprebankruptcy\nprebaptismal\nprebaptize\nprebarbaric\nprebarbarous\nprebargain\nprebasal\nprebasilar\nprebeleve\nprebelief\nprebeliever\nprebelieving\nprebellum\nprebeloved\nprebend\nprebendal\nprebendary\nprebendaryship\nprebendate\nprebenediction\nprebeneficiary\nprebenefit\nprebeset\nprebestow\nprebestowal\nprebetray\nprebetrayal\nprebetrothal\nprebid\nprebidding\nprebill\nprebless\npreblessing\npreblockade\npreblooming\npreboast\npreboding\npreboil\npreborn\npreborrowing\npreboyhood\nprebrachial\nprebrachium\nprebreathe\nprebridal\nprebroadcasting\nprebromidic\nprebronchial\nprebronze\nprebrute\nprebuccal\nprebudget\nprebudgetary\nprebullying\npreburlesque\npreburn\nprecalculable\nprecalculate\nprecalculation\nprecampaign\nprecancel\nprecancellation\nprecancerous\nprecandidacy\nprecandidature\nprecanning\nprecanonical\nprecant\nprecantation\nprecanvass\nprecapillary\nprecapitalist\nprecapitalistic\nprecaptivity\nprecapture\nprecarcinomatous\nprecardiac\nprecaria\nprecarious\nprecariously\nprecariousness\nprecarium\nprecarnival\nprecartilage\nprecartilaginous\nprecary\nprecast\nprecation\nprecative\nprecatively\nprecatory\nprecaudal\nprecausation\nprecaution\nprecautional\nprecautionary\nprecautious\nprecautiously\nprecautiousness\nprecava\nprecaval\nprecedable\nprecede\nprecedence\nprecedency\nprecedent\nprecedentable\nprecedentary\nprecedented\nprecedential\nprecedentless\nprecedently\npreceder\npreceding\nprecelebrant\nprecelebrate\nprecelebration\nprecensure\nprecensus\nprecent\nprecentor\nprecentorial\nprecentorship\nprecentory\nprecentral\nprecentress\nprecentrix\nprecentrum\nprecept\npreception\npreceptist\npreceptive\npreceptively\npreceptor\npreceptoral\npreceptorate\npreceptorial\npreceptorially\npreceptorship\npreceptory\npreceptress\npreceptual\npreceptually\npreceramic\nprecerebellar\nprecerebral\nprecerebroid\npreceremonial\npreceremony\nprecertification\nprecertify\npreces\nprecess\nprecession\nprecessional\nprechallenge\nprechampioned\nprechampionship\nprecharge\nprechart\nprecheck\nprechemical\nprecherish\nprechildhood\nprechill\nprechloric\nprechloroform\nprechoice\nprechoose\nprechordal\nprechoroid\npreciation\nprecinct\nprecinction\nprecinctive\npreciosity\nprecious\npreciously\npreciousness\nprecipe\nprecipice\nprecipiced\nprecipitability\nprecipitable\nprecipitance\nprecipitancy\nprecipitant\nprecipitantly\nprecipitantness\nprecipitate\nprecipitated\nprecipitatedly\nprecipitately\nprecipitation\nprecipitative\nprecipitator\nprecipitin\nprecipitinogen\nprecipitinogenic\nprecipitous\nprecipitously\nprecipitousness\nprecirculate\nprecirculation\nprecis\nprecise\nprecisely\npreciseness\nprecisian\nprecisianism\nprecisianist\nprecision\nprecisional\nprecisioner\nprecisionism\nprecisionist\nprecisionize\nprecisive\nprecitation\nprecite\nprecited\nprecivilization\npreclaim\npreclaimant\npreclaimer\npreclassic\npreclassical\npreclassification\npreclassified\npreclassify\npreclean\nprecleaner\nprecleaning\npreclerical\npreclimax\npreclinical\npreclival\nprecloacal\npreclose\npreclosure\npreclothe\nprecludable\npreclude\npreclusion\npreclusive\npreclusively\nprecoagulation\nprecoccygeal\nprecocial\nprecocious\nprecociously\nprecociousness\nprecocity\nprecogitate\nprecogitation\nprecognition\nprecognitive\nprecognizable\nprecognizant\nprecognize\nprecognosce\nprecoil\nprecoiler\nprecoincidence\nprecoincident\nprecoincidently\nprecollapsable\nprecollapse\nprecollect\nprecollectable\nprecollection\nprecollector\nprecollege\nprecollegiate\nprecollude\nprecollusion\nprecollusive\nprecolor\nprecolorable\nprecoloration\nprecoloring\nprecombat\nprecombatant\nprecombination\nprecombine\nprecombustion\nprecommand\nprecommend\nprecomment\nprecommercial\nprecommissural\nprecommissure\nprecommit\nprecommune\nprecommunicate\nprecommunication\nprecommunion\nprecompare\nprecomparison\nprecompass\nprecompel\nprecompensate\nprecompensation\nprecompilation\nprecompile\nprecompiler\nprecompleteness\nprecompletion\nprecompliance\nprecompliant\nprecomplicate\nprecomplication\nprecompose\nprecomposition\nprecompound\nprecompounding\nprecompoundly\nprecomprehend\nprecomprehension\nprecomprehensive\nprecompress\nprecompulsion\nprecomradeship\npreconceal\npreconcealment\npreconcede\npreconceivable\npreconceive\npreconceived\npreconcentrate\npreconcentrated\npreconcentratedly\npreconcentration\npreconcept\npreconception\npreconceptional\npreconceptual\npreconcern\npreconcernment\npreconcert\npreconcerted\npreconcertedly\npreconcertedness\npreconcertion\npreconcertive\npreconcession\npreconcessive\npreconclude\npreconclusion\npreconcur\npreconcurrence\npreconcurrent\npreconcurrently\nprecondemn\nprecondemnation\nprecondensation\nprecondense\nprecondition\npreconditioned\npreconduct\npreconduction\npreconductor\nprecondylar\nprecondyloid\npreconfer\npreconference\npreconfess\npreconfession\npreconfide\npreconfiguration\npreconfigure\npreconfine\npreconfinedly\npreconfinemnt\npreconfirm\npreconfirmation\npreconflict\npreconform\npreconformity\npreconfound\npreconfuse\npreconfusedly\npreconfusion\nprecongenial\nprecongested\nprecongestion\nprecongestive\nprecongratulate\nprecongratulation\nprecongressional\npreconizance\npreconization\npreconize\npreconizer\npreconjecture\npreconnection\npreconnective\npreconnubial\npreconquer\npreconquest\npreconquestal\npreconquestual\npreconscious\npreconsciously\npreconsciousness\npreconsecrate\npreconsecration\npreconsent\npreconsider\npreconsideration\npreconsign\npreconsolation\npreconsole\npreconsolidate\npreconsolidated\npreconsolidation\npreconsonantal\npreconspiracy\npreconspirator\npreconspire\npreconstituent\npreconstitute\npreconstruct\npreconstruction\npreconsult\npreconsultation\npreconsultor\npreconsume\npreconsumer\npreconsumption\nprecontact\nprecontain\nprecontained\nprecontemn\nprecontemplate\nprecontemplation\nprecontemporaneous\nprecontemporary\nprecontend\nprecontent\nprecontention\nprecontently\nprecontentment\nprecontest\nprecontinental\nprecontract\nprecontractive\nprecontractual\nprecontribute\nprecontribution\nprecontributive\nprecontrivance\nprecontrive\nprecontrol\nprecontrolled\nprecontroversial\nprecontroversy\npreconvention\npreconversation\npreconversational\npreconversion\npreconvert\npreconvey\npreconveyal\npreconveyance\npreconvict\npreconviction\npreconvince\nprecook\nprecooker\nprecool\nprecooler\nprecooling\nprecopy\nprecoracoid\nprecordia\nprecordial\nprecordiality\nprecordially\nprecordium\nprecorneal\nprecornu\nprecoronation\nprecorrect\nprecorrection\nprecorrectly\nprecorrectness\nprecorrespond\nprecorrespondence\nprecorrespondent\nprecorridor\nprecorrupt\nprecorruption\nprecorruptive\nprecorruptly\nprecoruptness\nprecosmic\nprecosmical\nprecostal\nprecounsel\nprecounsellor\nprecourse\nprecover\nprecovering\nprecox\nprecreate\nprecreation\nprecreative\nprecredit\nprecreditor\nprecreed\nprecritical\nprecriticism\nprecriticize\nprecrucial\nprecrural\nprecrystalline\nprecultivate\nprecultivation\nprecultural\npreculturally\npreculture\nprecuneal\nprecuneate\nprecuneus\nprecure\nprecurrent\nprecurricular\nprecurriculum\nprecursal\nprecurse\nprecursive\nprecursor\nprecursory\nprecurtain\nprecut\nprecyclone\nprecyclonic\nprecynical\nprecyst\nprecystic\npredable\npredacean\npredaceous\npredaceousness\npredacity\npredamage\npredamn\npredamnation\npredark\npredarkness\npredata\npredate\npredation\npredatism\npredative\npredator\npredatorily\npredatoriness\npredatory\npredawn\npreday\npredaylight\npredaytime\npredazzite\npredealer\npredealing\npredeath\npredeathly\npredebate\npredebater\npredebit\npredebtor\npredecay\npredecease\npredeceaser\npredeceive\npredeceiver\npredeception\npredecession\npredecessor\npredecessorship\npredecide\npredecision\npredecisive\npredeclaration\npredeclare\npredeclination\npredecline\npredecree\nprededicate\nprededuct\nprededuction\npredefault\npredefeat\npredefect\npredefective\npredefence\npredefend\npredefense\npredefiance\npredeficiency\npredeficient\npredefine\npredefinite\npredefinition\npredefray\npredefrayal\npredefy\npredegeneracy\npredegenerate\npredegree\npredeication\npredelay\npredelegate\npredelegation\npredeliberate\npredeliberately\npredeliberation\npredelineate\npredelineation\npredelinquency\npredelinquent\npredelinquently\npredeliver\npredelivery\npredella\npredelude\npredelusion\npredemand\npredemocracy\npredemocratic\npredemonstrate\npredemonstration\npredemonstrative\npredenial\npredental\npredentary\nPredentata\npredentate\npredeny\npredepart\npredepartmental\npredeparture\npredependable\npredependence\npredependent\npredeplete\npredepletion\npredeposit\npredepository\npredepreciate\npredepreciation\npredepression\npredeprivation\npredeprive\nprederivation\nprederive\npredescend\npredescent\npredescribe\npredescription\npredesert\npredeserter\npredesertion\npredeserve\npredeserving\npredesign\npredesignate\npredesignation\npredesignatory\npredesirous\npredesolate\npredesolation\npredespair\npredesperate\npredespicable\npredespise\npredespond\npredespondency\npredespondent\npredestinable\npredestinarian\npredestinarianism\npredestinate\npredestinately\npredestination\npredestinational\npredestinationism\npredestinationist\npredestinative\npredestinator\npredestine\npredestiny\npredestitute\npredestitution\npredestroy\npredestruction\npredetach\npredetachment\npredetail\npredetain\npredetainer\npredetect\npredetention\npredeterminability\npredeterminable\npredeterminant\npredeterminate\npredeterminately\npredetermination\npredeterminative\npredetermine\npredeterminer\npredeterminism\npredeterministic\npredetest\npredetestation\npredetrimental\npredevelop\npredevelopment\npredevise\npredevote\npredevotion\npredevour\nprediagnosis\nprediagnostic\npredial\nprediastolic\nprediatory\npredicability\npredicable\npredicableness\npredicably\npredicament\npredicamental\npredicamentally\npredicant\npredicate\npredication\npredicational\npredicative\npredicatively\npredicator\npredicatory\npredicrotic\npredict\npredictability\npredictable\npredictably\npredictate\npredictation\nprediction\npredictional\npredictive\npredictively\npredictiveness\npredictor\npredictory\nprediet\npredietary\npredifferent\npredifficulty\npredigest\npredigestion\npredikant\npredilect\npredilected\npredilection\nprediligent\nprediligently\nprediluvial\nprediluvian\nprediminish\nprediminishment\nprediminution\npredine\npredinner\nprediphtheritic\nprediploma\nprediplomacy\nprediplomatic\npredirect\npredirection\npredirector\npredisability\npredisable\npredisadvantage\npredisadvantageous\npredisadvantageously\npredisagree\npredisagreeable\npredisagreement\npredisappointment\npredisaster\npredisastrous\nprediscern\nprediscernment\npredischarge\nprediscipline\npredisclose\npredisclosure\nprediscontent\nprediscontented\nprediscontentment\nprediscontinuance\nprediscontinuation\nprediscontinue\nprediscount\nprediscountable\nprediscourage\nprediscouragement\nprediscourse\nprediscover\nprediscoverer\nprediscovery\nprediscreet\nprediscretion\nprediscretionary\nprediscriminate\nprediscrimination\nprediscriminator\nprediscuss\nprediscussion\npredisgrace\npredisguise\npredisgust\npredislike\npredismiss\npredismissal\npredismissory\npredisorder\npredisordered\npredisorderly\npredispatch\npredispatcher\npredisperse\npredispersion\npredisplace\npredisplacement\npredisplay\npredisponency\npredisponent\npredisposable\npredisposal\npredispose\npredisposed\npredisposedly\npredisposedness\npredisposition\npredispositional\npredisputant\npredisputation\npredispute\npredisregard\npredisrupt\npredisruption\npredissatisfaction\npredissolution\npredissolve\npredissuade\npredistinct\npredistinction\npredistinguish\npredistress\npredistribute\npredistribution\npredistributor\npredistrict\npredistrust\npredistrustful\npredisturb\npredisturbance\nprediversion\npredivert\npredivide\npredividend\npredivider\npredivinable\npredivinity\npredivision\npredivorce\npredivorcement\npredoctorate\npredocumentary\npredomestic\npredominance\npredominancy\npredominant\npredominantly\npredominate\npredominately\npredominatingly\npredomination\npredominator\npredonate\npredonation\npredonor\npredoom\npredorsal\npredoubt\npredoubter\npredoubtful\npredraft\npredrainage\npredramatic\npredraw\npredrawer\npredread\npredreadnought\npredrill\npredriller\npredrive\npredriver\npredry\npreduplicate\npreduplication\npredusk\npredwell\npredynamite\npredynastic\npreen\npreener\npreeze\nprefab\nprefabricate\nprefabrication\nprefabricator\npreface\nprefaceable\nprefacer\nprefacial\nprefacist\nprefactor\nprefactory\nprefamiliar\nprefamiliarity\nprefamiliarly\nprefamous\nprefashion\nprefatial\nprefator\nprefatorial\nprefatorially\nprefatorily\nprefatory\nprefavor\nprefavorable\nprefavorably\nprefavorite\nprefearful\nprefearfully\nprefeast\nprefect\nprefectly\nprefectoral\nprefectorial\nprefectorially\nprefectorian\nprefectship\nprefectual\nprefectural\nprefecture\nprefecundation\nprefecundatory\nprefederal\nprefelic\nprefer\npreferability\npreferable\npreferableness\npreferably\npreferee\npreference\npreferent\npreferential\npreferentialism\npreferentialist\npreferentially\npreferment\nprefermentation\npreferred\npreferredly\npreferredness\npreferrer\npreferrous\nprefertile\nprefertility\nprefertilization\nprefertilize\nprefervid\nprefestival\nprefeudal\nprefeudalic\nprefeudalism\nprefiction\nprefictional\nprefigurate\nprefiguration\nprefigurative\nprefiguratively\nprefigurativeness\nprefigure\nprefigurement\nprefiller\nprefilter\nprefinal\nprefinance\nprefinancial\nprefine\nprefinish\nprefix\nprefixable\nprefixal\nprefixally\nprefixation\nprefixed\nprefixedly\nprefixion\nprefixture\npreflagellate\npreflatter\npreflattery\npreflavor\npreflavoring\npreflection\npreflexion\npreflight\npreflood\nprefloration\npreflowering\nprefoliation\nprefool\npreforbidden\npreforceps\npreforgive\npreforgiveness\npreforgotten\npreform\npreformant\npreformation\npreformationary\npreformationism\npreformationist\npreformative\npreformed\npreformism\npreformist\npreformistic\npreformulate\npreformulation\nprefortunate\nprefortunately\nprefortune\nprefoundation\nprefounder\nprefragrance\nprefragrant\nprefrankness\nprefraternal\nprefraternally\nprefraud\nprefreeze\nprefreshman\nprefriendly\nprefriendship\nprefright\nprefrighten\nprefrontal\nprefulfill\nprefulfillment\nprefulgence\nprefulgency\nprefulgent\nprefunction\nprefunctional\nprefuneral\nprefungoidal\nprefurlough\nprefurnish\npregain\npregainer\npregalvanize\npreganglionic\npregather\npregathering\npregeminum\npregenerate\npregeneration\npregenerosity\npregenerous\npregenerously\npregenial\npregeniculatum\npregeniculum\npregenital\npregeological\npregirlhood\npreglacial\npregladden\npregladness\npreglenoid\npreglenoidal\npreglobulin\npregnability\npregnable\npregnance\npregnancy\npregnant\npregnantly\npregnantness\npregolden\npregolfing\npregracile\npregracious\npregrade\npregraduation\npregranite\npregranitic\npregratification\npregratify\npregreet\npregreeting\npregrievance\npregrowth\npreguarantee\npreguarantor\npreguard\npreguess\npreguidance\npreguide\npreguilt\npreguiltiness\npreguilty\npregust\npregustant\npregustation\npregustator\npregustic\nprehallux\nprehalter\nprehandicap\nprehandle\nprehaps\npreharden\npreharmonious\npreharmoniousness\npreharmony\npreharsh\npreharshness\npreharvest\nprehatred\nprehaunt\nprehaunted\nprehaustorium\nprehazard\nprehazardous\npreheal\nprehearing\npreheat\npreheated\npreheater\nprehemiplegic\nprehend\nprehensible\nprehensile\nprehensility\nprehension\nprehensive\nprehensiveness\nprehensor\nprehensorial\nprehensory\nprehepatic\nprehepaticus\npreheroic\nprehesitancy\nprehesitate\nprehesitation\nprehexameral\nprehistorian\nprehistoric\nprehistorical\nprehistorically\nprehistorics\nprehistory\nprehnite\nprehnitic\npreholder\npreholding\npreholiday\nprehorizon\nprehorror\nprehostile\nprehostility\nprehuman\nprehumiliate\nprehumiliation\nprehumor\nprehunger\nprehydration\nprehypophysis\npreidea\npreidentification\npreidentify\npreignition\npreilluminate\npreillumination\npreillustrate\npreillustration\npreimage\npreimaginary\npreimagination\npreimagine\npreimbibe\npreimbue\npreimitate\npreimitation\npreimitative\npreimmigration\npreimpair\npreimpairment\npreimpart\npreimperial\npreimport\npreimportance\npreimportant\npreimportantly\npreimportation\npreimposal\npreimpose\npreimposition\npreimpress\npreimpression\npreimpressive\npreimprove\npreimprovement\npreinaugural\npreinaugurate\npreincarnate\npreincentive\npreinclination\npreincline\npreinclude\npreinclusion\npreincorporate\npreincorporation\npreincrease\npreindebted\npreindebtedness\npreindemnification\npreindemnify\npreindemnity\npreindependence\npreindependent\npreindependently\npreindesignate\npreindicant\npreindicate\npreindication\npreindispose\npreindisposition\npreinduce\npreinducement\npreinduction\npreinductive\npreindulge\npreindulgence\npreindulgent\npreindustrial\npreindustry\npreinfect\npreinfection\npreinfer\npreinference\npreinflection\npreinflectional\npreinflict\npreinfluence\npreinform\npreinformation\npreinhabit\npreinhabitant\npreinhabitation\npreinhere\npreinherit\npreinheritance\npreinitial\npreinitiate\npreinitiation\npreinjure\npreinjurious\npreinjury\npreinquisition\npreinscribe\npreinscription\npreinsert\npreinsertion\npreinsinuate\npreinsinuating\npreinsinuatingly\npreinsinuation\npreinsinuative\npreinspect\npreinspection\npreinspector\npreinspire\npreinstall\npreinstallation\npreinstill\npreinstillation\npreinstruct\npreinstruction\npreinstructional\npreinstructive\npreinsula\npreinsular\npreinsulate\npreinsulation\npreinsult\npreinsurance\npreinsure\npreintellectual\npreintelligence\npreintelligent\npreintelligently\npreintend\npreintention\npreintercede\npreintercession\npreinterchange\npreintercourse\npreinterest\npreinterfere\npreinterference\npreinterpret\npreinterpretation\npreinterpretative\npreinterview\npreintone\npreinvent\npreinvention\npreinventive\npreinventory\npreinvest\npreinvestigate\npreinvestigation\npreinvestigator\npreinvestment\npreinvitation\npreinvite\npreinvocation\npreinvolve\npreinvolvement\npreiotization\npreiotize\npreirrigation\npreirrigational\npreissuance\npreissue\nprejacent\nprejournalistic\nprejudge\nprejudgement\nprejudger\nprejudgment\nprejudication\nprejudicative\nprejudicator\nprejudice\nprejudiced\nprejudicedly\nprejudiceless\nprejudiciable\nprejudicial\nprejudicially\nprejudicialness\nprejudicious\nprejudiciously\nprejunior\nprejurisdiction\nprejustification\nprejustify\nprejuvenile\nPrekantian\nprekindergarten\nprekindle\npreknit\npreknow\npreknowledge\nprelabel\nprelabial\nprelabor\nprelabrum\nprelachrymal\nprelacrimal\nprelacteal\nprelacy\nprelanguage\nprelapsarian\nprelate\nprelatehood\nprelateship\nprelatess\nprelatial\nprelatic\nprelatical\nprelatically\nprelaticalness\nprelation\nprelatish\nprelatism\nprelatist\nprelatize\nprelatry\nprelature\nprelaunch\nprelaunching\nprelawful\nprelawfully\nprelawfulness\nprelease\nprelect\nprelection\nprelector\nprelectorship\nprelectress\nprelecture\nprelegacy\nprelegal\nprelegate\nprelegatee\nprelegend\nprelegendary\nprelegislative\npreliability\npreliable\nprelibation\npreliberal\npreliberality\npreliberally\npreliberate\npreliberation\nprelicense\nprelim\npreliminarily\npreliminary\nprelimit\nprelimitate\nprelimitation\nprelingual\nprelinguistic\nprelinpinpin\npreliquidate\npreliquidation\npreliteral\npreliterally\npreliteralness\npreliterary\npreliterate\npreliterature\nprelithic\nprelitigation\npreloan\nprelocalization\nprelocate\nprelogic\nprelogical\npreloral\npreloreal\npreloss\nprelude\npreluder\npreludial\npreludious\npreludiously\npreludium\npreludize\nprelumbar\nprelusion\nprelusive\nprelusively\nprelusorily\nprelusory\npreluxurious\npremachine\npremadness\npremaintain\npremaintenance\npremake\npremaker\npremaking\npremandibular\npremanhood\npremaniacal\npremanifest\npremanifestation\npremankind\npremanufacture\npremanufacturer\npremanufacturing\npremarital\npremarriage\npremarry\npremastery\nprematch\npremate\nprematerial\nprematernity\nprematrimonial\nprematuration\npremature\nprematurely\nprematureness\nprematurity\npremaxilla\npremaxillary\npremeasure\npremeasurement\npremechanical\npremedia\npremedial\npremedian\npremedic\npremedical\npremedicate\npremedication\npremedieval\npremedievalism\npremeditate\npremeditatedly\npremeditatedness\npremeditatingly\npremeditation\npremeditative\npremeditator\npremegalithic\nprememorandum\npremenace\npremenstrual\npremention\npremeridian\npremerit\npremetallic\npremethodical\npremial\npremiant\npremiate\npremidnight\npremidsummer\npremier\npremieral\npremiere\npremieress\npremierjus\npremiership\npremilitary\npremillenarian\npremillenarianism\npremillennial\npremillennialism\npremillennialist\npremillennialize\npremillennially\npremillennian\npreminister\npreministry\npremious\npremisal\npremise\npremisory\npremisrepresent\npremisrepresentation\npremiss\npremium\npremix\npremixer\npremixture\npremodel\npremodern\npremodification\npremodify\npremolar\npremold\npremolder\npremolding\npremonarchial\npremonetary\nPremongolian\npremonish\npremonishment\npremonition\npremonitive\npremonitor\npremonitorily\npremonitory\npremonopolize\npremonopoly\nPremonstrant\nPremonstratensian\npremonumental\npremoral\npremorality\npremorally\npremorbid\npremorbidly\npremorbidness\npremorning\npremorse\npremortal\npremortification\npremortify\npremortuary\npremosaic\npremotion\npremourn\npremove\npremovement\npremover\npremuddle\npremultiplication\npremultiplier\npremultiply\npremundane\npremunicipal\npremunition\npremunitory\npremusical\npremuster\npremutative\npremutiny\npremycotic\npremyelocyte\npremythical\nprename\nPrenanthes\nprenares\nprenarial\nprenaris\nprenasal\nprenatal\nprenatalist\nprenatally\nprenational\nprenative\nprenatural\nprenaval\nprender\nprendre\nprenebular\nprenecessitate\npreneglect\npreneglectful\nprenegligence\nprenegligent\nprenegotiate\nprenegotiation\npreneolithic\nprenephritic\npreneural\npreneuralgic\nprenight\nprenoble\nprenodal\nprenominal\nprenominate\nprenomination\nprenominical\nprenotation\nprenotice\nprenotification\nprenotify\nprenotion\nprentice\nprenticeship\nprenumber\nprenumbering\nprenuncial\nprenuptial\nprenursery\npreobedience\npreobedient\npreobject\npreobjection\npreobjective\npreobligate\npreobligation\npreoblige\npreobservance\npreobservation\npreobservational\npreobserve\npreobstruct\npreobstruction\npreobtain\npreobtainable\npreobtrude\npreobtrusion\npreobtrusive\npreobviate\npreobvious\npreobviously\npreobviousness\npreoccasioned\npreoccipital\npreocclusion\npreoccultation\npreoccupancy\npreoccupant\npreoccupate\npreoccupation\npreoccupative\npreoccupied\npreoccupiedly\npreoccupiedness\npreoccupier\npreoccupy\npreoccur\npreoccurrence\npreoceanic\npreocular\npreodorous\npreoffend\npreoffense\npreoffensive\npreoffensively\npreoffensiveness\npreoffer\npreoffering\npreofficial\npreofficially\npreominate\npreomission\npreomit\npreopen\npreopening\npreoperate\npreoperation\npreoperative\npreoperatively\npreoperator\npreopercle\npreopercular\npreoperculum\npreopinion\npreopinionated\npreoppose\npreopposition\npreoppress\npreoppression\npreoppressor\npreoptic\npreoptimistic\npreoption\npreoral\npreorally\npreorbital\npreordain\npreorder\npreordination\npreorganic\npreorganization\npreorganize\npreoriginal\npreoriginally\npreornamental\npreoutfit\npreoutline\npreoverthrow\nprep\nprepainful\nprepalatal\nprepalatine\nprepaleolithic\nprepanic\npreparable\npreparation\npreparationist\npreparative\npreparatively\npreparator\npreparatorily\npreparatory\nprepardon\nprepare\nprepared\npreparedly\npreparedness\npreparement\npreparental\npreparer\npreparietal\npreparingly\npreparliamentary\npreparoccipital\npreparoxysmal\nprepartake\npreparticipation\nprepartisan\nprepartition\nprepartnership\nprepatellar\nprepatent\nprepatriotic\nprepave\nprepavement\nprepay\nprepayable\nprepayment\nprepeduncle\nprepenetrate\nprepenetration\nprepenial\nprepense\nprepensely\nprepeople\npreperceive\npreperception\npreperceptive\npreperitoneal\nprepersuade\nprepersuasion\nprepersuasive\npreperusal\npreperuse\nprepetition\nprephragma\nprephthisical\nprepigmental\nprepink\nprepious\nprepituitary\npreplace\npreplacement\npreplacental\npreplan\npreplant\nprepledge\npreplot\nprepoetic\nprepoetical\nprepoison\nprepolice\nprepolish\nprepolitic\nprepolitical\nprepolitically\nprepollence\nprepollency\nprepollent\nprepollex\npreponder\npreponderance\npreponderancy\npreponderant\npreponderantly\npreponderate\npreponderately\npreponderating\npreponderatingly\npreponderation\npreponderous\npreponderously\nprepontile\nprepontine\npreportray\npreportrayal\nprepose\npreposition\nprepositional\nprepositionally\nprepositive\nprepositively\nprepositor\nprepositorial\nprepositure\nprepossess\nprepossessed\nprepossessing\nprepossessingly\nprepossessingness\nprepossession\nprepossessionary\nprepossessor\npreposterous\npreposterously\npreposterousness\nprepostorship\nprepotence\nprepotency\nprepotent\nprepotential\nprepotently\nprepractical\nprepractice\npreprandial\nprepreference\nprepreparation\npreprice\npreprimary\npreprimer\npreprimitive\npreprint\npreprofess\npreprofessional\npreprohibition\nprepromise\nprepromote\nprepromotion\nprepronounce\nprepronouncement\npreprophetic\npreprostatic\npreprove\npreprovide\npreprovision\npreprovocation\npreprovoke\npreprudent\npreprudently\nprepsychological\nprepsychology\nprepuberal\nprepubertal\nprepuberty\nprepubescent\nprepubic\nprepubis\nprepublication\nprepublish\nprepuce\nprepunctual\nprepunish\nprepunishment\nprepupa\nprepupal\nprepurchase\nprepurchaser\nprepurpose\npreputial\npreputium\nprepyloric\nprepyramidal\nprequalification\nprequalify\nprequarantine\nprequestion\nprequotation\nprequote\npreracing\npreradio\nprerailroad\nprerailroadite\nprerailway\npreramus\nprerational\nprereadiness\npreready\nprerealization\nprerealize\nprerebellion\nprereceipt\nprereceive\nprereceiver\nprerecital\nprerecite\nprereckon\nprereckoning\nprerecognition\nprerecognize\nprerecommend\nprerecommendation\nprereconcile\nprereconcilement\nprereconciliation\nprerectal\npreredeem\npreredemption\nprereduction\nprerefer\nprereference\nprerefine\nprerefinement\nprereform\nprereformation\nprereformatory\nprerefusal\nprerefuse\npreregal\npreregister\npreregistration\npreregulate\npreregulation\nprereject\nprerejection\nprerejoice\nprerelate\nprerelation\nprerelationship\nprerelease\nprereligious\nprereluctation\npreremit\npreremittance\npreremorse\npreremote\npreremoval\npreremove\npreremunerate\npreremuneration\nprerenal\nprerent\nprerental\nprereport\nprerepresent\nprerepresentation\nprereption\nprerepublican\nprerequest\nprerequire\nprerequirement\nprerequisite\nprerequisition\npreresemblance\npreresemble\npreresolve\npreresort\nprerespectability\nprerespectable\nprerespiration\nprerespire\npreresponsibility\npreresponsible\nprerestoration\nprerestrain\nprerestraint\nprerestrict\nprerestriction\nprereturn\nprereveal\nprerevelation\nprerevenge\nprereversal\nprereverse\nprereview\nprerevise\nprerevision\nprerevival\nprerevolutionary\nprerheumatic\nprerich\nprerighteous\nprerighteously\nprerighteousness\nprerogatival\nprerogative\nprerogatived\nprerogatively\nprerogativity\nprerolandic\npreromantic\npreromanticism\npreroute\npreroutine\npreroyal\npreroyally\npreroyalty\nprerupt\npreruption\npresacral\npresacrifice\npresacrificial\npresage\npresageful\npresagefully\npresager\npresagient\npresaging\npresagingly\npresalvation\npresanctification\npresanctified\npresanctify\npresanguine\npresanitary\npresartorial\npresatisfaction\npresatisfactory\npresatisfy\npresavage\npresavagery\npresay\npresbyacousia\npresbyacusia\npresbycousis\npresbycusis\npresbyope\npresbyophrenia\npresbyophrenic\npresbyopia\npresbyopic\npresbyopy\npresbyte\npresbyter\npresbyteral\npresbyterate\npresbyterated\npresbyteress\npresbyteria\npresbyterial\npresbyterially\nPresbyterian\nPresbyterianism\nPresbyterianize\nPresbyterianly\npresbyterium\npresbytership\npresbytery\npresbytia\npresbytic\nPresbytinae\nPresbytis\npresbytism\nprescapula\nprescapular\nprescapularis\nprescholastic\npreschool\nprescience\nprescient\nprescientific\npresciently\nprescind\nprescindent\nprescission\nprescored\nprescout\nprescribable\nprescribe\nprescriber\nprescript\nprescriptibility\nprescriptible\nprescription\nprescriptionist\nprescriptive\nprescriptively\nprescriptiveness\nprescriptorial\nprescrive\nprescutal\nprescutum\npreseal\npresearch\npreseason\npreseasonal\npresecular\npresecure\npresee\npreselect\npresell\npreseminal\npreseminary\npresence\npresenced\npresenceless\npresenile\npresenility\npresensation\npresension\npresent\npresentability\npresentable\npresentableness\npresentably\npresental\npresentation\npresentational\npresentationism\npresentationist\npresentative\npresentatively\npresentee\npresentence\npresenter\npresential\npresentiality\npresentially\npresentialness\npresentient\npresentiment\npresentimental\npresentist\npresentive\npresentively\npresentiveness\npresently\npresentment\npresentness\npresentor\npreseparate\npreseparation\npreseparator\npreservability\npreservable\npreserval\npreservation\npreservationist\npreservative\npreservatize\npreservatory\npreserve\npreserver\npreserveress\npreses\npresession\npreset\npresettle\npresettlement\npresexual\npreshadow\npreshape\npreshare\npresharpen\npreshelter\npreship\npreshipment\npreshortage\npreshorten\npreshow\npreside\npresidence\npresidencia\npresidency\npresident\npresidente\npresidentess\npresidential\npresidentially\npresidentiary\npresidentship\npresider\npresidial\npresidially\npresidiary\npresidio\npresidium\npresift\npresign\npresignal\npresignificance\npresignificancy\npresignificant\npresignification\npresignificative\npresignificator\npresignify\npresimian\npreslavery\nPresley\npresmooth\npresocial\npresocialism\npresocialist\npresolar\npresolicit\npresolicitation\npresolution\npresolve\npresophomore\npresound\nprespecialist\nprespecialize\nprespecific\nprespecifically\nprespecification\nprespecify\nprespeculate\nprespeculation\npresphenoid\npresphenoidal\npresphygmic\nprespinal\nprespinous\nprespiracular\npresplendor\npresplenomegalic\nprespoil\nprespontaneity\nprespontaneous\nprespontaneously\nprespread\npresprinkle\nprespur\npress\npressable\npressboard\npressdom\npressel\npresser\npressfat\npressful\npressgang\npressible\npressing\npressingly\npressingness\npression\npressive\npressman\npressmanship\npressmark\npressor\npresspack\npressroom\npressurage\npressural\npressure\npressureless\npressureproof\npressurize\npressurizer\npresswoman\npresswork\npressworker\nprest\nprestabilism\nprestability\nprestable\nprestamp\nprestandard\nprestandardization\nprestandardize\nprestant\nprestate\nprestation\nprestatistical\npresteam\npresteel\nprester\npresternal\npresternum\nprestidigital\nprestidigitate\nprestidigitation\nprestidigitator\nprestidigitatorial\nprestige\nprestigiate\nprestigiation\nprestigiator\nprestigious\nprestigiously\nprestigiousness\nprestimulate\nprestimulation\nprestimulus\nprestissimo\npresto\nprestock\nprestomial\nprestomium\nprestorage\nprestore\nprestraighten\nprestrain\nprestrengthen\nprestress\nprestretch\nprestricken\nprestruggle\nprestubborn\nprestudious\nprestudiously\nprestudiousness\nprestudy\npresubdue\npresubiculum\npresubject\npresubjection\npresubmission\npresubmit\npresubordinate\npresubordination\npresubscribe\npresubscriber\npresubscription\npresubsist\npresubsistence\npresubsistent\npresubstantial\npresubstitute\npresubstitution\npresuccess\npresuccessful\npresuccessfully\npresuffer\npresuffering\npresufficiency\npresufficient\npresufficiently\npresuffrage\npresuggest\npresuggestion\npresuggestive\npresuitability\npresuitable\npresuitably\npresumable\npresumably\npresume\npresumedly\npresumer\npresuming\npresumption\npresumptious\npresumptiously\npresumptive\npresumptively\npresumptuous\npresumptuously\npresumptuousness\npresuperficial\npresuperficiality\npresuperficially\npresuperfluity\npresuperfluous\npresuperfluously\npresuperintendence\npresuperintendency\npresupervise\npresupervision\npresupervisor\npresupplemental\npresupplementary\npresupplicate\npresupplication\npresupply\npresupport\npresupposal\npresuppose\npresupposition\npresuppositionless\npresuppress\npresuppression\npresuppurative\npresupremacy\npresupreme\npresurgery\npresurgical\npresurmise\npresurprisal\npresurprise\npresurrender\npresurround\npresurvey\npresusceptibility\npresusceptible\npresuspect\npresuspend\npresuspension\npresuspicion\npresuspicious\npresuspiciously\npresuspiciousness\npresustain\npresutural\npreswallow\npresylvian\npresympathize\npresympathy\npresymphonic\npresymphony\npresymphysial\npresymptom\npresymptomatic\npresynapsis\npresynaptic\npresystematic\npresystematically\npresystole\npresystolic\npretabulate\npretabulation\npretan\npretangible\npretangibly\npretannage\npretardily\npretardiness\npretardy\npretariff\npretaste\npreteach\npretechnical\npretechnically\npretelegraph\npretelegraphic\npretelephone\npretelephonic\npretell\npretemperate\npretemperately\npretemporal\npretend\npretendant\npretended\npretendedly\npretender\nPretenderism\npretendership\npretendingly\npretendingness\npretense\npretenseful\npretenseless\npretension\npretensional\npretensionless\npretensive\npretensively\npretensiveness\npretentative\npretentious\npretentiously\npretentiousness\npretercanine\npreterchristian\npreterconventional\npreterdetermined\npreterdeterminedly\npreterdiplomatic\npreterdiplomatically\npreterequine\npreteressential\npretergress\npretergression\npreterhuman\npreterience\npreterient\npreterintentional\npreterist\npreterit\npreteriteness\npreterition\npreteritive\npreteritness\npreterlabent\npreterlegal\npreterlethal\npreterminal\npretermission\npretermit\npretermitter\npreternative\npreternatural\npreternaturalism\npreternaturalist\npreternaturality\npreternaturally\npreternaturalness\npreternormal\npreternotorious\npreternuptial\npreterpluperfect\npreterpolitical\npreterrational\npreterregular\npreterrestrial\npreterritorial\npreterroyal\npreterscriptural\npreterseasonable\npretersensual\npretervection\npretest\npretestify\npretestimony\npretext\npretexted\npretextuous\npretheological\nprethoracic\nprethoughtful\nprethoughtfully\nprethoughtfulness\nprethreaten\nprethrill\nprethrust\npretibial\npretimeliness\npretimely\npretincture\npretire\npretoken\npretone\npretonic\npretorial\npretorship\npretorsional\npretorture\npretournament\npretrace\npretracheal\npretraditional\npretrain\npretraining\npretransact\npretransaction\npretranscribe\npretranscription\npretranslate\npretranslation\npretransmission\npretransmit\npretransport\npretransportation\npretravel\npretreat\npretreatment\npretreaty\npretrematic\npretribal\npretry\nprettification\nprettifier\nprettify\nprettikin\nprettily\nprettiness\npretty\nprettyface\nprettyish\nprettyism\npretubercular\npretuberculous\npretympanic\npretyphoid\npretypify\npretypographical\npretyrannical\npretyranny\npretzel\npreultimate\npreultimately\npreumbonal\npreunderstand\npreundertake\npreunion\npreunite\npreutilizable\npreutilization\npreutilize\nprevacate\nprevacation\nprevaccinate\nprevaccination\nprevail\nprevailance\nprevailer\nprevailingly\nprevailingness\nprevailment\nprevalence\nprevalency\nprevalent\nprevalently\nprevalentness\nprevalescence\nprevalescent\nprevalid\nprevalidity\nprevalidly\nprevaluation\nprevalue\nprevariation\nprevaricate\nprevarication\nprevaricator\nprevaricatory\nprevascular\nprevegetation\nprevelar\nprevenance\nprevenancy\nprevene\nprevenience\nprevenient\npreveniently\nprevent\npreventability\npreventable\npreventative\npreventer\npreventible\npreventingly\nprevention\npreventionism\npreventionist\npreventive\npreventively\npreventiveness\npreventorium\npreventure\npreverb\npreverbal\npreverification\npreverify\nprevernal\npreversion\nprevertebral\nprevesical\npreveto\nprevictorious\nprevide\nprevidence\npreview\nprevigilance\nprevigilant\nprevigilantly\npreviolate\npreviolation\nprevious\npreviously\npreviousness\nprevise\nprevisibility\nprevisible\nprevisibly\nprevision\nprevisional\nprevisit\nprevisitor\nprevisive\nprevisor\nprevocal\nprevocalic\nprevocally\nprevocational\nprevogue\nprevoid\nprevoidance\nprevolitional\nprevolunteer\nprevomer\nprevotal\nprevote\nprevoyance\nprevoyant\nprevue\nprewar\nprewarn\nprewarrant\nprewash\npreweigh\nprewelcome\nprewhip\nprewilling\nprewillingly\nprewillingness\nprewire\nprewireless\nprewitness\nprewonder\nprewonderment\npreworldliness\npreworldly\npreworship\npreworthily\npreworthiness\npreworthy\nprewound\nprewrap\nprexy\nprey\npreyer\npreyful\npreyingly\npreyouthful\nprezonal\nprezone\nprezygapophysial\nprezygapophysis\nprezygomatic\nPria\npriacanthid\nPriacanthidae\npriacanthine\nPriacanthus\nPriapean\nPriapic\npriapism\nPriapulacea\npriapulid\nPriapulida\nPriapulidae\npriapuloid\nPriapuloidea\nPriapulus\nPriapus\nPriapusian\nPrice\nprice\npriceable\npriceably\npriced\npriceite\npriceless\npricelessness\npricer\nprich\nprick\nprickant\npricked\npricker\npricket\nprickfoot\npricking\nprickingly\nprickish\nprickle\nprickleback\nprickled\npricklefish\nprickless\nprickliness\nprickling\npricklingly\npricklouse\nprickly\npricklyback\nprickmadam\nprickmedainty\nprickproof\npricks\nprickseam\nprickshot\nprickspur\npricktimber\nprickwood\npricky\npride\nprideful\npridefully\npridefulness\nprideless\npridelessly\nprideling\nprideweed\npridian\npriding\npridingly\npridy\npried\nprier\npriest\npriestal\npriestcap\npriestcraft\npriestdom\npriesteen\npriestery\npriestess\npriestfish\npriesthood\npriestianity\npriestish\npriestism\npriestless\npriestlet\npriestlike\npriestliness\npriestling\npriestly\npriestship\npriestshire\nprig\nprigdom\nprigger\npriggery\npriggess\npriggish\npriggishly\npriggishness\npriggism\nprighood\nprigman\nprill\nprillion\nprim\nprima\nprimacy\nprimage\nprimal\nprimality\nprimar\nprimarian\nprimaried\nprimarily\nprimariness\nprimary\nprimatal\nprimate\nPrimates\nprimateship\nprimatial\nprimatic\nprimatical\nprimavera\nprimaveral\nprime\nprimegilt\nprimely\nprimeness\nprimer\nprimero\nprimerole\nprimeval\nprimevalism\nprimevally\nprimeverose\nprimevity\nprimevous\nprimevrin\nPrimianist\nprimigene\nprimigenial\nprimigenian\nprimigenious\nprimigenous\nprimigravida\nprimine\npriming\nprimipara\nprimiparity\nprimiparous\nprimipilar\nprimitiae\nprimitial\nprimitias\nprimitive\nprimitively\nprimitivism\nprimitivist\nprimitivistic\nprimitivity\nprimly\nprimness\nprimogenetrix\nprimogenial\nprimogenital\nprimogenitary\nprimogenitive\nprimogenitor\nprimogeniture\nprimogenitureship\nprimogenous\nprimoprime\nprimoprimitive\nprimordality\nprimordia\nprimordial\nprimordialism\nprimordially\nprimordiate\nprimordium\nprimosity\nprimost\nprimp\nprimrose\nprimrosed\nprimrosetide\nprimrosetime\nprimrosy\nprimsie\nPrimula\nprimula\nPrimulaceae\nprimulaceous\nPrimulales\nprimulaverin\nprimulaveroside\nprimulic\nprimuline\nPrimulinus\nPrimus\nprimus\nprimwort\nprimy\nprince\nprinceage\nprincecraft\nprincedom\nprincehood\nPrinceite\nprincekin\nprinceless\nprincelet\nprincelike\nprinceliness\nprinceling\nprincely\nprinceps\nprinceship\nprincess\nprincessdom\nprincesse\nprincesslike\nprincessly\nprincewood\nprincified\nprincify\nprincipal\nprincipality\nprincipally\nprincipalness\nprincipalship\nprincipate\nPrincipes\nprincipes\nprincipia\nprincipiant\nprincipiate\nprincipiation\nprincipium\nprinciple\nprincipulus\nprincock\nprincox\nprine\npringle\nprink\nprinker\nprinkle\nprinky\nprint\nprintability\nprintable\nprintableness\nprinted\nprinter\nprinterdom\nprinterlike\nprintery\nprinting\nprintless\nprintline\nprintscript\nprintworks\nPriodon\npriodont\nPriodontes\nprion\nprionid\nPrionidae\nPrioninae\nprionine\nPrionodesmacea\nprionodesmacean\nprionodesmaceous\nprionodesmatic\nPrionodon\nprionodont\nPrionopinae\nprionopine\nPrionops\nPrionus\nprior\nprioracy\nprioral\npriorate\nprioress\nprioristic\nprioristically\npriorite\npriority\npriorly\npriorship\npriory\nprisable\nprisage\nprisal\npriscan\nPriscian\nPriscianist\nPriscilla\nPriscillian\nPriscillianism\nPriscillianist\nprism\nprismal\nprismatic\nprismatical\nprismatically\nprismatization\nprismatize\nprismatoid\nprismatoidal\nprismed\nprismoid\nprismoidal\nprismy\nprisometer\nprison\nprisonable\nprisondom\nprisoner\nprisonful\nprisonlike\nprisonment\nprisonous\npriss\nprissily\nprissiness\nprissy\npristane\npristine\nPristipomatidae\nPristipomidae\nPristis\nPristodus\npritch\nPritchardia\npritchel\nprithee\nprius\nprivacity\nprivacy\nprivant\nprivate\nprivateer\nprivateersman\nprivately\nprivateness\nprivation\nprivative\nprivatively\nprivativeness\nprivet\nprivilege\nprivileged\nprivileger\nprivily\npriviness\nprivity\nprivy\nprizable\nprize\nprizeable\nprizeholder\nprizeman\nprizer\nprizery\nprizetaker\nprizeworthy\npro\nproa\nproabolitionist\nproabsolutism\nproabsolutist\nproabstinence\nproacademic\nproacceptance\nproacquisition\nproacquittal\nproaction\nproactor\nproaddition\nproadjournment\nproadministration\nproadmission\nproadoption\nproadvertising\nproaesthetic\nproaggressionist\nproagitation\nproagrarian\nproagreement\nproagricultural\nproagule\nproairesis\nproairplane\nproal\nproalcoholism\nproalien\nproalliance\nproallotment\nproalteration\nproamateur\nproambient\nproamendment\nproamnion\nproamniotic\nproamusement\nproanaphora\nproanaphoral\nproanarchic\nproangiosperm\nproangiospermic\nproangiospermous\nproanimistic\nproannexation\nproannexationist\nproantarctic\nproanthropos\nproapostolic\nproappointment\nproapportionment\nproappreciation\nproappropriation\nproapproval\nproaquatic\nproarbitration\nproarbitrationist\nproarchery\nproarctic\nproaristocratic\nproarmy\nProarthri\nproassessment\nproassociation\nproatheist\nproatheistic\nproathletic\nproatlas\nproattack\nproattendance\nproauction\nproaudience\nproaulion\nproauthor\nproauthority\nproautomobile\nproavian\nproaviation\nProavis\nproaward\nprob\nprobabiliorism\nprobabiliorist\nprobabilism\nprobabilist\nprobabilistic\nprobability\nprobabilize\nprobabl\nprobable\nprobableness\nprobably\nprobachelor\nprobal\nproballoon\nprobang\nprobanishment\nprobankruptcy\nprobant\nprobargaining\nprobaseball\nprobasketball\nprobate\nprobathing\nprobatical\nprobation\nprobational\nprobationary\nprobationer\nprobationerhood\nprobationership\nprobationism\nprobationist\nprobationship\nprobative\nprobatively\nprobator\nprobatory\nprobattle\nprobattleship\nprobe\nprobeable\nprobeer\nprober\nprobetting\nprobiology\nprobituminous\nprobity\nproblem\nproblematic\nproblematical\nproblematically\nproblematist\nproblematize\nproblemdom\nproblemist\nproblemistic\nproblemize\nproblemwise\nproblockade\nprobonding\nprobonus\nproborrowing\nproboscidal\nproboscidate\nProboscidea\nproboscidean\nproboscideous\nproboscides\nproboscidial\nproboscidian\nproboscidiferous\nproboscidiform\nprobosciform\nprobosciformed\nProbosciger\nproboscis\nproboscislike\nprobouleutic\nproboulevard\nprobowling\nproboxing\nproboycott\nprobrick\nprobridge\nprobroadcasting\nprobudget\nprobudgeting\nprobuilding\nprobusiness\nprobuying\nprocacious\nprocaciously\nprocacity\nprocaine\nprocambial\nprocambium\nprocanal\nprocancellation\nprocapital\nprocapitalism\nprocapitalist\nprocarnival\nprocarp\nprocarpium\nprocarrier\nprocatalectic\nprocatalepsis\nprocatarctic\nprocatarxis\nprocathedral\nProcavia\nProcaviidae\nprocedendo\nprocedural\nprocedure\nproceed\nproceeder\nproceeding\nproceeds\nproceleusmatic\nProcellaria\nprocellarian\nprocellarid\nProcellariidae\nProcellariiformes\nprocellariine\nprocellas\nprocello\nprocellose\nprocellous\nprocensorship\nprocensure\nprocentralization\nprocephalic\nprocercoid\nprocereal\nprocerebral\nprocerebrum\nproceremonial\nproceremonialism\nproceremonialist\nproceres\nprocerite\nproceritic\nprocerity\nprocerus\nprocess\nprocessal\nprocession\nprocessional\nprocessionalist\nprocessionally\nprocessionary\nprocessioner\nprocessionist\nprocessionize\nprocessionwise\nprocessive\nprocessor\nprocessual\nprocharity\nprochein\nprochemical\nprochlorite\nprochondral\nprochoos\nprochordal\nprochorion\nprochorionic\nprochromosome\nprochronic\nprochronism\nprochronize\nprochurch\nprochurchian\nprocidence\nprocident\nprocidentia\nprocivic\nprocivilian\nprocivism\nproclaim\nproclaimable\nproclaimant\nproclaimer\nproclaiming\nproclaimingly\nproclamation\nproclamator\nproclamatory\nproclassic\nproclassical\nproclergy\nproclerical\nproclericalism\nprocline\nproclisis\nproclitic\nproclive\nproclivitous\nproclivity\nproclivous\nproclivousness\nProcne\nprocnemial\nProcoelia\nprocoelia\nprocoelian\nprocoelous\nprocoercive\nprocollectivistic\nprocollegiate\nprocombat\nprocombination\nprocomedy\nprocommemoration\nprocomment\nprocommercial\nprocommission\nprocommittee\nprocommunal\nprocommunism\nprocommunist\nprocommutation\nprocompensation\nprocompetition\nprocompromise\nprocompulsion\nproconcentration\nproconcession\nproconciliation\nprocondemnation\nproconfederationist\nproconference\nproconfession\nproconfessionist\nproconfiscation\nproconformity\nProconnesian\nproconquest\nproconscription\nproconscriptive\nproconservation\nproconservationist\nproconsolidation\nproconstitutional\nproconstitutionalism\nproconsul\nproconsular\nproconsulary\nproconsulate\nproconsulship\nproconsultation\nprocontinuation\nproconvention\nproconventional\nproconviction\nprocoracoid\nprocoracoidal\nprocorporation\nprocosmetic\nprocosmopolitan\nprocotton\nprocourt\nprocrastinate\nprocrastinating\nprocrastinatingly\nprocrastination\nprocrastinative\nprocrastinatively\nprocrastinator\nprocrastinatory\nprocreant\nprocreate\nprocreation\nprocreative\nprocreativeness\nprocreator\nprocreatory\nprocreatress\nprocreatrix\nprocremation\nProcris\nprocritic\nprocritique\nProcrustean\nProcrusteanism\nProcrusteanize\nProcrustes\nprocrypsis\nprocryptic\nprocryptically\nproctal\nproctalgia\nproctalgy\nproctatresia\nproctatresy\nproctectasia\nproctectomy\nprocteurynter\nproctitis\nproctocele\nproctoclysis\nproctocolitis\nproctocolonoscopy\nproctocystoplasty\nproctocystotomy\nproctodaeal\nproctodaeum\nproctodynia\nproctoelytroplastic\nproctologic\nproctological\nproctologist\nproctology\nproctoparalysis\nproctoplastic\nproctoplasty\nproctoplegia\nproctopolypus\nproctoptoma\nproctoptosis\nproctor\nproctorage\nproctoral\nproctorial\nproctorially\nproctorical\nproctorization\nproctorize\nproctorling\nproctorrhagia\nproctorrhaphy\nproctorrhea\nproctorship\nproctoscope\nproctoscopic\nproctoscopy\nproctosigmoidectomy\nproctosigmoiditis\nproctospasm\nproctostenosis\nproctostomy\nproctotome\nproctotomy\nproctotresia\nproctotrypid\nProctotrypidae\nproctotrypoid\nProctotrypoidea\nproctovalvotomy\nProculian\nprocumbent\nprocurable\nprocuracy\nprocural\nprocurance\nprocurate\nprocuration\nprocurative\nprocurator\nprocuratorate\nprocuratorial\nprocuratorship\nprocuratory\nprocuratrix\nprocure\nprocurement\nprocurer\nprocuress\nprocurrent\nprocursive\nprocurvation\nprocurved\nProcyon\nProcyonidae\nprocyoniform\nProcyoniformia\nProcyoninae\nprocyonine\nproczarist\nprod\nprodatary\nprodder\nproddle\nprodecoration\nprodefault\nprodefiance\nprodelay\nprodelision\nprodemocratic\nProdenia\nprodenominational\nprodentine\nprodeportation\nprodespotic\nprodespotism\nprodialogue\nprodigal\nprodigalish\nprodigalism\nprodigality\nprodigalize\nprodigally\nprodigiosity\nprodigious\nprodigiously\nprodigiousness\nprodigus\nprodigy\nprodisarmament\nprodisplay\nprodissoconch\nprodissolution\nprodistribution\nprodition\nproditorious\nproditoriously\nprodivision\nprodivorce\nprodproof\nprodramatic\nprodroma\nprodromal\nprodromatic\nprodromatically\nprodrome\nprodromic\nprodromous\nprodromus\nproducal\nproduce\nproduceable\nproduceableness\nproduced\nproducent\nproducer\nproducership\nproducibility\nproducible\nproducibleness\nproduct\nproducted\nproductibility\nproductible\nproductid\nProductidae\nproductile\nproduction\nproductional\nproductionist\nproductive\nproductively\nproductiveness\nproductivity\nproductoid\nproductor\nproductory\nproductress\nProductus\nproecclesiastical\nproeconomy\nproeducation\nproeducational\nproegumenal\nproelectric\nproelectrical\nproelectrification\nproelectrocution\nproelimination\nproem\nproembryo\nproembryonic\nproemial\nproemium\nproemployee\nproemptosis\nproenforcement\nproenlargement\nproenzym\nproenzyme\nproepimeron\nproepiscopist\nproepisternum\nproequality\nproethical\nproethnic\nproethnically\nproetid\nProetidae\nProetus\nproevolution\nproevolutionist\nproexamination\nproexecutive\nproexemption\nproexercise\nproexperiment\nproexpert\nproexporting\nproexposure\nproextension\nproextravagance\nprof\nprofaculty\nprofanable\nprofanableness\nprofanably\nprofanation\nprofanatory\nprofanchise\nprofane\nprofanely\nprofanement\nprofaneness\nprofaner\nprofanism\nprofanity\nprofanize\nprofarmer\nprofection\nprofectional\nprofectitious\nprofederation\nprofeminism\nprofeminist\nproferment\nprofert\nprofess\nprofessable\nprofessed\nprofessedly\nprofession\nprofessional\nprofessionalism\nprofessionalist\nprofessionality\nprofessionalization\nprofessionalize\nprofessionally\nprofessionist\nprofessionize\nprofessionless\nprofessive\nprofessively\nprofessor\nprofessorate\nprofessordom\nprofessoress\nprofessorial\nprofessorialism\nprofessorially\nprofessoriate\nprofessorlike\nprofessorling\nprofessorship\nprofessory\nproffer\nprofferer\nproficience\nproficiency\nproficient\nproficiently\nproficientness\nprofiction\nproficuous\nproficuously\nprofile\nprofiler\nprofilist\nprofilograph\nprofit\nprofitability\nprofitable\nprofitableness\nprofitably\nprofiteer\nprofiteering\nprofiter\nprofiting\nprofitless\nprofitlessly\nprofitlessness\nprofitmonger\nprofitmongering\nprofitproof\nproflated\nproflavine\nprofligacy\nprofligate\nprofligately\nprofligateness\nprofligation\nproflogger\nprofluence\nprofluent\nprofluvious\nprofluvium\nproforeign\nprofound\nprofoundly\nprofoundness\nprofraternity\nprofugate\nprofulgent\nprofunda\nprofundity\nprofuse\nprofusely\nprofuseness\nprofusion\nprofusive\nprofusively\nprofusiveness\nprog\nprogambling\nprogamete\nprogamic\nproganosaur\nProganosauria\nprogenerate\nprogeneration\nprogenerative\nprogenital\nprogenitive\nprogenitiveness\nprogenitor\nprogenitorial\nprogenitorship\nprogenitress\nprogenitrix\nprogeniture\nprogenity\nprogeny\nprogeotropic\nprogeotropism\nprogeria\nprogermination\nprogestational\nprogesterone\nprogestin\nprogger\nproglottic\nproglottid\nproglottidean\nproglottis\nprognathi\nprognathic\nprognathism\nprognathous\nprognathy\nprogne\nprognose\nprognosis\nprognostic\nprognosticable\nprognostically\nprognosticate\nprognostication\nprognosticative\nprognosticator\nprognosticatory\nprogoneate\nprogospel\nprogovernment\nprogram\nprogramist\nprogramistic\nprogramma\nprogrammar\nprogrammatic\nprogrammatically\nprogrammatist\nprogrammer\nprogrede\nprogrediency\nprogredient\nprogress\nprogresser\nprogression\nprogressional\nprogressionally\nprogressionary\nprogressionism\nprogressionist\nprogressism\nprogressist\nprogressive\nprogressively\nprogressiveness\nprogressivism\nprogressivist\nprogressivity\nprogressor\nproguardian\nProgymnasium\nprogymnosperm\nprogymnospermic\nprogymnospermous\nprogypsy\nprohaste\nprohibit\nprohibiter\nprohibition\nprohibitionary\nprohibitionism\nprohibitionist\nprohibitive\nprohibitively\nprohibitiveness\nprohibitor\nprohibitorily\nprohibitory\nproholiday\nprohostility\nprohuman\nprohumanistic\nprohydrotropic\nprohydrotropism\nproidealistic\nproimmunity\nproinclusion\nproincrease\nproindemnity\nproindustrial\nproinjunction\nproinnovationist\nproinquiry\nproinsurance\nprointervention\nproinvestment\nproirrigation\nprojacient\nproject\nprojectable\nprojectedly\nprojectile\nprojecting\nprojectingly\nprojection\nprojectional\nprojectionist\nprojective\nprojectively\nprojectivity\nprojector\nprojectress\nprojectrix\nprojecture\nprojicience\nprojicient\nprojiciently\nprojournalistic\nprojudicial\nproke\nprokeimenon\nproker\nprokindergarten\nproklausis\nprolabium\nprolabor\nprolacrosse\nprolactin\nprolamin\nprolan\nprolapse\nprolapsus\nprolarva\nprolarval\nprolate\nprolately\nprolateness\nprolation\nprolative\nprolatively\nproleague\nproleaguer\nprolectite\nproleg\nprolegate\nprolegislative\nprolegomena\nprolegomenal\nprolegomenary\nprolegomenist\nprolegomenon\nprolegomenous\nproleniency\nprolepsis\nproleptic\nproleptical\nproleptically\nproleptics\nproletairism\nproletarian\nproletarianism\nproletarianization\nproletarianize\nproletarianly\nproletarianness\nproletariat\nproletariatism\nproletarization\nproletarize\nproletary\nproletcult\nproleucocyte\nproleukocyte\nprolicense\nprolicidal\nprolicide\nproliferant\nproliferate\nproliferation\nproliferative\nproliferous\nproliferously\nprolific\nprolificacy\nprolifical\nprolifically\nprolificalness\nprolificate\nprolification\nprolificity\nprolificly\nprolificness\nprolificy\nprolify\nproligerous\nproline\nproliquor\nproliterary\nproliturgical\nproliturgist\nprolix\nprolixity\nprolixly\nprolixness\nprolocution\nprolocutor\nprolocutorship\nprolocutress\nprolocutrix\nprologist\nprologize\nprologizer\nprologos\nprologue\nprologuelike\nprologuer\nprologuist\nprologuize\nprologuizer\nprologus\nprolong\nprolongable\nprolongableness\nprolongably\nprolongate\nprolongation\nprolonge\nprolonger\nprolongment\nprolusion\nprolusionize\nprolusory\nprolyl\npromachinery\npromachos\npromagisterial\npromagistracy\npromagistrate\npromajority\npromammal\nPromammalia\npromammalian\npromarriage\npromatrimonial\npromatrimonialist\npromaximum\npromemorial\npromenade\npromenader\npromenaderess\npromercantile\npromercy\npromerger\npromeristem\npromerit\npromeritor\nPromethea\nPromethean\nPrometheus\npromethium\npromic\npromilitarism\npromilitarist\npromilitary\nprominence\nprominency\nprominent\nprominently\nprominimum\nproministry\nprominority\npromisable\npromiscuity\npromiscuous\npromiscuously\npromiscuousness\npromise\npromisee\npromiseful\npromiseless\npromisemonger\npromiseproof\npromiser\npromising\npromisingly\npromisingness\npromisor\npromissionary\npromissive\npromissor\npromissorily\npromissory\npromitosis\npromittor\npromnesia\npromoderation\npromoderationist\npromodernist\npromodernistic\npromonarchic\npromonarchical\npromonarchicalness\npromonarchist\npromonopolist\npromonopoly\npromontoried\npromontory\npromoral\npromorph\npromorphological\npromorphologically\npromorphologist\npromorphology\npromotable\npromote\npromotement\npromoter\npromotion\npromotional\npromotive\npromotiveness\npromotor\npromotorial\npromotress\npromotrix\npromovable\npromovent\nprompt\npromptbook\nprompter\npromptitude\npromptive\npromptly\npromptness\npromptress\npromptuary\nprompture\npromulgate\npromulgation\npromulgator\npromulge\npromulger\npromuscidate\npromuscis\npromycelial\npromycelium\npromythic\npronaos\npronate\npronation\npronational\npronationalism\npronationalist\npronationalistic\npronative\npronatoflexor\npronator\npronaval\npronavy\nprone\npronegotiation\npronegro\npronegroism\npronely\nproneness\npronephric\npronephridiostome\npronephron\npronephros\nproneur\nprong\nprongbuck\npronged\npronger\npronghorn\npronglike\npronic\npronograde\npronominal\npronominalize\npronominally\npronomination\npronotal\npronotum\npronoun\npronounal\npronounce\npronounceable\npronounced\npronouncedly\npronouncement\npronounceness\npronouncer\npronpl\npronto\nPronuba\npronuba\npronubial\npronuclear\npronucleus\npronumber\npronunciability\npronunciable\npronuncial\npronunciamento\npronunciation\npronunciative\npronunciator\npronunciatory\npronymph\npronymphal\nproo\nprooemiac\nprooemion\nprooemium\nproof\nproofer\nproofful\nproofing\nproofless\nprooflessly\nproofness\nproofread\nproofreader\nproofreading\nproofroom\nproofy\nprop\npropadiene\npropaedeutic\npropaedeutical\npropaedeutics\npropagability\npropagable\npropagableness\npropagand\npropaganda\npropagandic\npropagandism\npropagandist\npropagandistic\npropagandistically\npropagandize\npropagate\npropagation\npropagational\npropagative\npropagator\npropagatory\npropagatress\npropago\npropagulum\npropale\npropalinal\npropane\npropanedicarboxylic\npropanol\npropanone\npropapist\nproparasceve\npropargyl\npropargylic\nProparia\nproparian\nproparliamental\nproparoxytone\nproparoxytonic\nproparticipation\npropatagial\npropatagian\npropatagium\npropatriotic\npropatriotism\npropatronage\npropayment\npropellable\npropellant\npropellent\npropeller\npropelment\npropend\npropendent\npropene\npropenoic\npropense\npropensely\npropenseness\npropension\npropensitude\npropensity\npropenyl\npropenylic\nproper\nproperispome\nproperispomenon\nproperitoneal\nproperly\nproperness\npropertied\nproperty\npropertyless\npropertyship\npropessimism\npropessimist\nprophase\nprophasis\nprophecy\nprophecymonger\nprophesiable\nprophesier\nprophesy\nprophet\nprophetess\nprophethood\nprophetic\nprophetical\npropheticality\nprophetically\npropheticalness\npropheticism\npropheticly\nprophetism\nprophetize\nprophetless\nprophetlike\nprophetry\nprophetship\nprophilosophical\nprophloem\nprophoric\nprophototropic\nprophototropism\nprophylactic\nprophylactical\nprophylactically\nprophylaxis\nprophylaxy\nprophyll\nprophyllum\npropination\npropine\npropinoic\npropinquant\npropinque\npropinquity\npropinquous\npropiolaldehyde\npropiolate\npropiolic\npropionate\npropione\nPropionibacterieae\nPropionibacterium\npropionic\npropionitril\npropionitrile\npropionyl\nPropithecus\npropitiable\npropitial\npropitiate\npropitiatingly\npropitiation\npropitiative\npropitiator\npropitiatorily\npropitiatory\npropitious\npropitiously\npropitiousness\nproplasm\nproplasma\nproplastic\npropless\npropleural\npropleuron\nproplex\nproplexus\nPropliopithecus\npropodeal\npropodeon\npropodeum\npropodial\npropodiale\npropodite\npropoditic\npropodium\npropolis\npropolitical\npropolization\npropolize\npropone\nproponement\nproponent\nproponer\npropons\nPropontic\npropooling\npropopery\nproportion\nproportionability\nproportionable\nproportionableness\nproportionably\nproportional\nproportionalism\nproportionality\nproportionally\nproportionate\nproportionately\nproportionateness\nproportioned\nproportioner\nproportionless\nproportionment\nproposable\nproposal\nproposant\npropose\nproposer\nproposition\npropositional\npropositionally\npropositionize\npropositus\npropound\npropounder\npropoundment\npropoxy\nproppage\npropper\npropraetor\npropraetorial\npropraetorian\nproprecedent\npropriation\nproprietage\nproprietarian\nproprietariat\nproprietarily\nproprietary\nproprietor\nproprietorial\nproprietorially\nproprietorship\nproprietory\nproprietous\nproprietress\nproprietrix\npropriety\nproprioception\nproprioceptive\nproprioceptor\npropriospinal\nproprium\nproprivilege\nproproctor\nproprofit\nproprovincial\nproprovost\nprops\npropterygial\npropterygium\nproptosed\nproptosis\npropublication\npropublicity\npropugnacled\npropugnaculum\npropugnation\npropugnator\npropugner\npropulsation\npropulsatory\npropulsion\npropulsity\npropulsive\npropulsor\npropulsory\npropunishment\npropupa\npropupal\npropurchase\nPropus\npropwood\npropygidium\npropyl\npropylacetic\npropylaeum\npropylamine\npropylation\npropylene\npropylic\npropylidene\npropylite\npropylitic\npropylitization\npropylon\npropyne\npropynoic\nproquaestor\nproracing\nprorailroad\nprorata\nproratable\nprorate\nproration\nprore\nproreader\nprorealism\nprorealist\nprorealistic\nproreality\nprorean\nprorebate\nprorebel\nprorecall\nproreciprocation\nprorecognition\nproreconciliation\nprorector\nprorectorate\nproredemption\nproreduction\nproreferendum\nproreform\nproreformist\nproregent\nprorelease\nProreptilia\nproreptilian\nproreption\nprorepublican\nproresearch\nproreservationist\nproresignation\nprorestoration\nprorestriction\nprorevision\nprorevisionist\nprorevolution\nprorevolutionary\nprorevolutionist\nprorhinal\nProrhipidoglossomorpha\nproritual\nproritualistic\nprorogate\nprorogation\nprorogator\nprorogue\nproroguer\nproromance\nproromantic\nproromanticism\nproroyal\nproroyalty\nprorrhesis\nprorsad\nprorsal\nproruption\nprosabbath\nprosabbatical\nprosacral\nprosaic\nprosaical\nprosaically\nprosaicalness\nprosaicism\nprosaicness\nprosaism\nprosaist\nprosar\nProsarthri\nprosateur\nproscapula\nproscapular\nproscenium\nproscholastic\nproschool\nproscientific\nproscolecine\nproscolex\nproscribable\nproscribe\nproscriber\nproscript\nproscription\nproscriptional\nproscriptionist\nproscriptive\nproscriptively\nproscriptiveness\nproscutellar\nproscutellum\nproscynemata\nprose\nprosecrecy\nprosecretin\nprosect\nprosection\nprosector\nprosectorial\nprosectorium\nprosectorship\nprosecutable\nprosecute\nprosecution\nprosecutor\nprosecutrix\nproselenic\nproselike\nproselyte\nproselyter\nproselytical\nproselytingly\nproselytism\nproselytist\nproselytistic\nproselytization\nproselytize\nproselytizer\nproseman\nproseminar\nproseminary\nproseminate\nprosemination\nprosencephalic\nprosencephalon\nprosenchyma\nprosenchymatous\nproseneschal\nproser\nProserpinaca\nprosethmoid\nproseucha\nproseuche\nprosification\nprosifier\nprosify\nprosiliency\nprosilient\nprosiliently\nprosilverite\nprosily\nProsimiae\nprosimian\nprosiness\nprosing\nprosingly\nprosiphon\nprosiphonal\nprosiphonate\nprosish\nprosist\nproslambanomenos\nproslave\nproslaver\nproslavery\nproslaveryism\nprosneusis\nproso\nprosobranch\nProsobranchia\nProsobranchiata\nprosobranchiate\nprosocele\nprosodal\nprosode\nprosodemic\nprosodetic\nprosodiac\nprosodiacal\nprosodiacally\nprosodial\nprosodially\nprosodian\nprosodic\nprosodical\nprosodically\nprosodion\nprosodist\nprosodus\nprosody\nprosogaster\nprosogyrate\nprosogyrous\nprosoma\nprosomal\nprosomatic\nprosonomasia\nprosopalgia\nprosopalgic\nprosopantritis\nprosopectasia\nprosophist\nprosopic\nprosopically\nProsopis\nprosopite\nProsopium\nprosoplasia\nprosopography\nprosopon\nprosoponeuralgia\nprosopoplegia\nprosopoplegic\nprosopopoeia\nprosopopoeial\nprosoposchisis\nprosopospasm\nprosopotocia\nprosopyl\nprosopyle\nprosorus\nprospect\nprospection\nprospective\nprospectively\nprospectiveness\nprospectless\nprospector\nprospectus\nprospectusless\nprospeculation\nprosper\nprosperation\nprosperity\nprosperous\nprosperously\nprosperousness\nprospicience\nprosporangium\nprosport\npross\nprossy\nprostatauxe\nprostate\nprostatectomy\nprostatelcosis\nprostatic\nprostaticovesical\nprostatism\nprostatitic\nprostatitis\nprostatocystitis\nprostatocystotomy\nprostatodynia\nprostatolith\nprostatomegaly\nprostatometer\nprostatomyomectomy\nprostatorrhea\nprostatorrhoea\nprostatotomy\nprostatovesical\nprostatovesiculectomy\nprostatovesiculitis\nprostemmate\nprostemmatic\nprosternal\nprosternate\nprosternum\nprostheca\nprosthenic\nprosthesis\nprosthetic\nprosthetically\nprosthetics\nprosthetist\nprosthion\nprosthionic\nprosthodontia\nprosthodontist\nProstigmin\nprostitute\nprostitutely\nprostitution\nprostitutor\nprostomial\nprostomiate\nprostomium\nprostrate\nprostration\nprostrative\nprostrator\nprostrike\nprostyle\nprostylos\nprosubmission\nprosubscription\nprosubstantive\nprosubstitution\nprosuffrage\nprosupervision\nprosupport\nprosurgical\nprosurrender\nprosy\nprosyllogism\nprosyndicalism\nprosyndicalist\nprotactic\nprotactinium\nprotagon\nprotagonism\nprotagonist\nProtagorean\nProtagoreanism\nprotalbumose\nprotamine\nprotandric\nprotandrism\nprotandrous\nprotandrously\nprotandry\nprotanomal\nprotanomalous\nprotanope\nprotanopia\nprotanopic\nprotargentum\nprotargin\nProtargol\nprotariff\nprotarsal\nprotarsus\nprotasis\nprotaspis\nprotatic\nprotatically\nprotax\nprotaxation\nprotaxial\nprotaxis\nprote\nProtea\nprotea\nProteaceae\nproteaceous\nprotead\nprotean\nproteanly\nproteanwise\nprotease\nprotechnical\nprotect\nprotectant\nprotectible\nprotecting\nprotectingly\nprotectingness\nprotection\nprotectional\nprotectionate\nprotectionism\nprotectionist\nprotectionize\nprotectionship\nprotective\nprotectively\nprotectiveness\nProtectograph\nprotector\nprotectoral\nprotectorate\nprotectorial\nprotectorian\nprotectorless\nprotectorship\nprotectory\nprotectress\nprotectrix\nprotege\nprotegee\nprotegulum\nproteic\nProteida\nProteidae\nproteide\nproteidean\nproteidogenous\nproteiform\nprotein\nproteinaceous\nproteinase\nproteinic\nproteinochromogen\nproteinous\nproteinuria\nProteles\nProtelidae\nProtelytroptera\nprotelytropteran\nprotelytropteron\nprotelytropterous\nprotemperance\nprotempirical\nprotemporaneous\nprotend\nprotension\nprotensity\nprotensive\nprotensively\nproteoclastic\nproteogenous\nproteolysis\nproteolytic\nproteopectic\nproteopexic\nproteopexis\nproteopexy\nproteosaurid\nProteosauridae\nProteosaurus\nproteose\nProteosoma\nproteosomal\nproteosome\nproteosuria\nprotephemeroid\nProtephemeroidea\nproterandrous\nproterandrousness\nproterandry\nproteranthous\nproterobase\nproteroglyph\nProteroglypha\nproteroglyphic\nproteroglyphous\nproterogynous\nproterogyny\nproterothesis\nproterotype\nProterozoic\nprotervity\nprotest\nprotestable\nprotestancy\nprotestant\nProtestantish\nProtestantishly\nprotestantism\nProtestantize\nProtestantlike\nProtestantly\nprotestation\nprotestator\nprotestatory\nprotester\nprotestingly\nprotestive\nprotestor\nprotetrarch\nProteus\nprotevangel\nprotevangelion\nprotevangelium\nprotext\nprothalamia\nprothalamion\nprothalamium\nprothallia\nprothallial\nprothallic\nprothalline\nprothallium\nprothalloid\nprothallus\nprotheatrical\nprotheca\nprothesis\nprothetic\nprothetical\nprothetically\nprothonotarial\nprothonotariat\nprothonotary\nprothonotaryship\nprothoracic\nprothorax\nprothrift\nprothrombin\nprothrombogen\nprothyl\nprothysteron\nprotide\nprotiodide\nprotist\nProtista\nprotistan\nprotistic\nprotistological\nprotistologist\nprotistology\nprotiston\nProtium\nprotium\nproto\nprotoactinium\nprotoalbumose\nprotoamphibian\nprotoanthropic\nprotoapostate\nprotoarchitect\nProtoascales\nProtoascomycetes\nprotobacco\nProtobasidii\nProtobasidiomycetes\nprotobasidiomycetous\nprotobasidium\nprotobishop\nprotoblast\nprotoblastic\nprotoblattoid\nProtoblattoidea\nProtobranchia\nProtobranchiata\nprotobranchiate\nprotocalcium\nprotocanonical\nProtocaris\nprotocaseose\nprotocatechualdehyde\nprotocatechuic\nProtoceras\nProtoceratidae\nProtoceratops\nprotocercal\nprotocerebral\nprotocerebrum\nprotochemist\nprotochemistry\nprotochloride\nprotochlorophyll\nProtochorda\nProtochordata\nprotochordate\nprotochromium\nprotochronicler\nprotocitizen\nprotoclastic\nprotocneme\nProtococcaceae\nprotococcaceous\nprotococcal\nProtococcales\nprotococcoid\nProtococcus\nprotocol\nprotocolar\nprotocolary\nProtocoleoptera\nprotocoleopteran\nprotocoleopteron\nprotocoleopterous\nprotocolist\nprotocolization\nprotocolize\nprotoconch\nprotoconchal\nprotocone\nprotoconid\nprotoconule\nprotoconulid\nprotocopper\nprotocorm\nprotodeacon\nprotoderm\nprotodevil\nProtodonata\nprotodonatan\nprotodonate\nprotodont\nProtodonta\nprotodramatic\nprotodynastic\nprotoelastose\nprotoepiphyte\nprotoforaminifer\nprotoforester\nprotogaster\nprotogelatose\nprotogenal\nprotogenes\nprotogenesis\nprotogenetic\nprotogenic\nprotogenist\nProtogeometric\nprotogine\nprotoglobulose\nprotogod\nprotogonous\nprotogospel\nprotograph\nprotogynous\nprotogyny\nprotohematoblast\nProtohemiptera\nprotohemipteran\nprotohemipteron\nprotohemipterous\nprotoheresiarch\nProtohippus\nprotohistorian\nprotohistoric\nprotohistory\nprotohomo\nprotohuman\nProtohydra\nprotohydrogen\nProtohymenoptera\nprotohymenopteran\nprotohymenopteron\nprotohymenopterous\nprotoiron\nprotoleration\nprotoleucocyte\nprotoleukocyte\nprotolithic\nprotoliturgic\nprotolog\nprotologist\nprotoloph\nprotoma\nprotomagister\nprotomagnate\nprotomagnesium\nprotomala\nprotomalal\nprotomalar\nprotomammal\nprotomammalian\nprotomanganese\nprotomartyr\nProtomastigida\nprotome\nprotomeristem\nprotomerite\nprotomeritic\nprotometal\nprotometallic\nprotometaphrast\nProtominobacter\nProtomonadina\nprotomonostelic\nprotomorph\nprotomorphic\nProtomycetales\nprotomyosinose\nproton\nprotone\nprotonegroid\nprotonema\nprotonemal\nprotonematal\nprotonematoid\nprotoneme\nProtonemertini\nprotonephridial\nprotonephridium\nprotonephros\nprotoneuron\nprotoneurone\nprotonic\nprotonickel\nprotonitrate\nprotonotater\nprotonym\nprotonymph\nprotonymphal\nprotopapas\nprotopappas\nprotoparent\nprotopathia\nprotopathic\nprotopathy\nprotopatriarchal\nprotopatrician\nprotopattern\nprotopectin\nprotopectinase\nprotopepsia\nProtoperlaria\nprotoperlarian\nprotophilosophic\nprotophloem\nprotophyll\nProtophyta\nprotophyte\nprotophytic\nprotopin\nprotopine\nprotoplasm\nprotoplasma\nprotoplasmal\nprotoplasmatic\nprotoplasmic\nprotoplast\nprotoplastic\nprotopod\nprotopodial\nprotopodite\nprotopoditic\nprotopoetic\nprotopope\nprotoporphyrin\nprotopragmatic\nprotopresbyter\nprotopresbytery\nprotoprism\nprotoproteose\nprotoprotestant\nprotopteran\nProtopteridae\nprotopteridophyte\nprotopterous\nProtopterus\nprotopyramid\nprotore\nprotorebel\nprotoreligious\nprotoreptilian\nProtorohippus\nprotorosaur\nProtorosauria\nprotorosaurian\nProtorosauridae\nprotorosauroid\nProtorosaurus\nProtorthoptera\nprotorthopteran\nprotorthopteron\nprotorthopterous\nprotosalt\nprotosaurian\nprotoscientific\nProtoselachii\nprotosilicate\nprotosilicon\nprotosinner\nProtosiphon\nProtosiphonaceae\nprotosiphonaceous\nprotosocial\nprotosolution\nprotospasm\nProtosphargis\nProtospondyli\nprotospore\nProtostega\nProtostegidae\nprotostele\nprotostelic\nprotostome\nprotostrontium\nprotosulphate\nprotosulphide\nprotosyntonose\nprototaxites\nprototheca\nprotothecal\nprototheme\nprotothere\nPrototheria\nprototherian\nprototitanium\nPrototracheata\nprototraitor\nprototroch\nprototrochal\nprototrophic\nprototypal\nprototype\nprototypic\nprototypical\nprototypically\nprototypographer\nprototyrant\nprotovanadium\nprotoveratrine\nprotovertebra\nprotovertebral\nprotovestiary\nprotovillain\nprotovum\nprotoxide\nprotoxylem\nProtozoa\nprotozoacidal\nprotozoacide\nprotozoal\nprotozoan\nprotozoea\nprotozoean\nprotozoiasis\nprotozoic\nprotozoological\nprotozoologist\nprotozoology\nprotozoon\nprotozoonal\nProtracheata\nprotracheate\nprotract\nprotracted\nprotractedly\nprotractedness\nprotracter\nprotractible\nprotractile\nprotractility\nprotraction\nprotractive\nprotractor\nprotrade\nprotradition\nprotraditional\nprotragedy\nprotragical\nprotragie\nprotransfer\nprotranslation\nprotransubstantiation\nprotravel\nprotreasurer\nprotreaty\nProtremata\nprotreptic\nprotreptical\nprotriaene\nprotropical\nprotrudable\nprotrude\nprotrudent\nprotrusible\nprotrusile\nprotrusion\nprotrusive\nprotrusively\nprotrusiveness\nprotuberance\nprotuberancy\nprotuberant\nprotuberantial\nprotuberantly\nprotuberantness\nprotuberate\nprotuberosity\nprotuberous\nProtura\nproturan\nprotutor\nprotutory\nprotyl\nprotyle\nProtylopus\nprotype\nproudful\nproudhearted\nproudish\nproudishly\nproudling\nproudly\nproudness\nprouniformity\nprounion\nprounionist\nprouniversity\nproustite\nprovability\nprovable\nprovableness\nprovably\nprovaccinist\nprovand\nprovant\nprovascular\nprove\nprovect\nprovection\nproved\nproveditor\nprovedly\nprovedor\nprovedore\nproven\nprovenance\nProvencal\nProvencalize\nProvence\nProvencial\nprovender\nprovenience\nprovenient\nprovenly\nproventricular\nproventricule\nproventriculus\nprover\nproverb\nproverbial\nproverbialism\nproverbialist\nproverbialize\nproverbially\nproverbic\nproverbiologist\nproverbiology\nproverbize\nproverblike\nprovicar\nprovicariate\nprovidable\nprovidance\nprovide\nprovided\nprovidence\nprovident\nprovidential\nprovidentialism\nprovidentially\nprovidently\nprovidentness\nprovider\nproviding\nprovidore\nprovidoring\nprovince\nprovincial\nprovincialate\nprovincialism\nprovincialist\nprovinciality\nprovincialization\nprovincialize\nprovincially\nprovincialship\nprovinciate\nprovinculum\nprovine\nproving\nprovingly\nprovision\nprovisional\nprovisionality\nprovisionally\nprovisionalness\nprovisionary\nprovisioner\nprovisioneress\nprovisionless\nprovisionment\nprovisive\nproviso\nprovisor\nprovisorily\nprovisorship\nprovisory\nprovitamin\nprovivisection\nprovivisectionist\nprovocant\nprovocation\nprovocational\nprovocative\nprovocatively\nprovocativeness\nprovocator\nprovocatory\nprovokable\nprovoke\nprovokee\nprovoker\nprovoking\nprovokingly\nprovokingness\nprovolunteering\nprovost\nprovostal\nprovostess\nprovostorial\nprovostry\nprovostship\nprow\nprowar\nprowarden\nprowaterpower\nprowed\nprowersite\nprowess\nprowessed\nprowessful\nprowl\nprowler\nprowling\nprowlingly\nproxenet\nproxenete\nproxenetism\nproxenos\nproxenus\nproxeny\nproxically\nproximad\nproximal\nproximally\nproximate\nproximately\nproximateness\nproximation\nproximity\nproximo\nproximobuccal\nproximolabial\nproximolingual\nproxy\nproxyship\nproxysm\nprozone\nprozoning\nprozygapophysis\nprozymite\nprude\nprudelike\nprudely\nPrudence\nprudence\nprudent\nprudential\nprudentialism\nprudentialist\nprudentiality\nprudentially\nprudentialness\nprudently\nprudery\nprudish\nprudishly\nprudishness\nprudist\nprudity\nPrudy\nPrue\npruh\npruinate\npruinescence\npruinose\npruinous\nprulaurasin\nprunable\nprunableness\nprunably\nPrunaceae\nprunase\nprunasin\nprune\nprunell\nPrunella\nprunella\nprunelle\nPrunellidae\nprunello\npruner\nprunetin\nprunetol\npruniferous\npruniform\npruning\nprunitrin\nprunt\nprunted\nPrunus\nprurience\npruriency\nprurient\npruriently\npruriginous\nprurigo\npruriousness\npruritic\npruritus\nprusiano\nPrussian\nPrussianism\nPrussianization\nPrussianize\nPrussianizer\nprussiate\nprussic\nPrussification\nPrussify\nprut\nprutah\npry\npryer\nprying\npryingly\npryingness\npryler\npryproof\npryse\nprytaneum\nprytanis\nprytanize\nprytany\npsalis\npsalm\npsalmic\npsalmist\npsalmister\npsalmistry\npsalmless\npsalmodial\npsalmodic\npsalmodical\npsalmodist\npsalmodize\npsalmody\npsalmograph\npsalmographer\npsalmography\npsalmy\npsaloid\npsalter\npsalterial\npsalterian\npsalterion\npsalterist\npsalterium\npsaltery\npsaltes\npsaltress\npsammite\npsammitic\npsammocarcinoma\npsammocharid\nPsammocharidae\npsammogenous\npsammolithic\npsammologist\npsammology\npsammoma\npsammophile\npsammophilous\nPsammophis\npsammophyte\npsammophytic\npsammosarcoma\npsammotherapy\npsammous\nPsaronius\npschent\nPsedera\nPselaphidae\nPselaphus\npsellism\npsellismus\npsephism\npsephisma\npsephite\npsephitic\npsephomancy\nPsephurus\nPsetta\npseudaconine\npseudaconitine\npseudacusis\npseudalveolar\npseudambulacral\npseudambulacrum\npseudamoeboid\npseudamphora\npseudandry\npseudangina\npseudankylosis\npseudaphia\npseudaposematic\npseudaposporous\npseudapospory\npseudapostle\npseudarachnidan\npseudarthrosis\npseudataxic\npseudatoll\npseudaxine\npseudaxis\nPseudechis\npseudelephant\npseudelminth\npseudelytron\npseudembryo\npseudembryonic\npseudencephalic\npseudencephalus\npseudepigraph\npseudepigrapha\npseudepigraphal\npseudepigraphic\npseudepigraphical\npseudepigraphous\npseudepigraphy\npseudepiploic\npseudepiploon\npseudepiscopacy\npseudepiscopy\npseudepisematic\npseudesthesia\npseudhalteres\npseudhemal\npseudimaginal\npseudimago\npseudisodomum\npseudo\npseudoacaccia\npseudoacademic\npseudoacademical\npseudoaccidental\npseudoacid\npseudoaconitine\npseudoacromegaly\npseudoadiabatic\npseudoaesthetic\npseudoaffectionate\npseudoalkaloid\npseudoalum\npseudoalveolar\npseudoamateurish\npseudoamatory\npseudoanaphylactic\npseudoanaphylaxis\npseudoanatomic\npseudoanatomical\npseudoancestral\npseudoanemia\npseudoanemic\npseudoangelic\npseudoangina\npseudoankylosis\npseudoanthorine\npseudoanthropoid\npseudoanthropological\npseudoanthropology\npseudoantique\npseudoapologetic\npseudoapoplectic\npseudoapoplexy\npseudoappendicitis\npseudoaquatic\npseudoarchaic\npseudoarchaism\npseudoarchaist\npseudoaristocratic\npseudoarthrosis\npseudoarticulation\npseudoartistic\npseudoascetic\npseudoastringent\npseudoasymmetrical\npseudoasymmetry\npseudoataxia\npseudobacterium\npseudobasidium\npseudobenevolent\npseudobenthonic\npseudobenthos\npseudobinary\npseudobiological\npseudoblepsia\npseudoblepsis\npseudobrachial\npseudobrachium\npseudobranch\npseudobranchia\npseudobranchial\npseudobranchiate\nPseudobranchus\npseudobrookite\npseudobrotherly\npseudobulb\npseudobulbar\npseudobulbil\npseudobulbous\npseudobutylene\npseudocandid\npseudocapitulum\npseudocarbamide\npseudocarcinoid\npseudocarp\npseudocarpous\npseudocartilaginous\npseudocele\npseudocelian\npseudocelic\npseudocellus\npseudocentric\npseudocentrous\npseudocentrum\nPseudoceratites\npseudoceratitic\npseudocercaria\npseudoceryl\npseudocharitable\npseudochemical\npseudochina\npseudochromesthesia\npseudochromia\npseudochromosome\npseudochronism\npseudochronologist\npseudochrysalis\npseudochrysolite\npseudochylous\npseudocirrhosis\npseudoclassic\npseudoclassical\npseudoclassicism\npseudoclerical\nPseudococcinae\nPseudococcus\npseudococtate\npseudocollegiate\npseudocolumella\npseudocolumellar\npseudocommissure\npseudocommisural\npseudocompetitive\npseudoconcha\npseudoconclude\npseudocone\npseudoconglomerate\npseudoconglomeration\npseudoconhydrine\npseudoconjugation\npseudoconservative\npseudocorneous\npseudocortex\npseudocosta\npseudocotyledon\npseudocotyledonal\npseudocritical\npseudocroup\npseudocrystalline\npseudocubic\npseudocultivated\npseudocultural\npseudocumene\npseudocumenyl\npseudocumidine\npseudocumyl\npseudocyclosis\npseudocyesis\npseudocyst\npseudodeltidium\npseudodementia\npseudodemocratic\npseudoderm\npseudodermic\npseudodiagnosis\npseudodiastolic\npseudodiphtheria\npseudodiphtheritic\npseudodipteral\npseudodipterally\npseudodipteros\npseudodont\npseudodox\npseudodoxal\npseudodoxy\npseudodramatic\npseudodysentery\npseudoedema\npseudoelectoral\npseudoembryo\npseudoembryonic\npseudoemotional\npseudoencephalitic\npseudoenthusiastic\npseudoephedrine\npseudoepiscopal\npseudoequalitarian\npseudoerotic\npseudoeroticism\npseudoerysipelas\npseudoerysipelatous\npseudoerythrin\npseudoethical\npseudoetymological\npseudoeugenics\npseudoevangelical\npseudofamous\npseudofarcy\npseudofeminine\npseudofever\npseudofeverish\npseudofilaria\npseudofilarian\npseudofinal\npseudofluctuation\npseudofluorescence\npseudofoliaceous\npseudoform\npseudofossil\npseudogalena\npseudoganglion\npseudogaseous\npseudogaster\npseudogastrula\npseudogeneral\npseudogeneric\npseudogenerous\npseudogenteel\npseudogenus\npseudogeometry\npseudogermanic\npseudogeusia\npseudogeustia\npseudoglanders\npseudoglioma\npseudoglobulin\npseudoglottis\npseudograph\npseudographeme\npseudographer\npseudographia\npseudographize\npseudography\npseudograsserie\nPseudogryphus\npseudogyne\npseudogynous\npseudogyny\npseudogyrate\npseudohallucination\npseudohallucinatory\npseudohalogen\npseudohemal\npseudohermaphrodite\npseudohermaphroditic\npseudohermaphroditism\npseudoheroic\npseudohexagonal\npseudohistoric\npseudohistorical\npseudoholoptic\npseudohuman\npseudohydrophobia\npseudohyoscyamine\npseudohypertrophic\npseudohypertrophy\npseudoidentical\npseudoimpartial\npseudoindependent\npseudoinfluenza\npseudoinsane\npseudoinsoluble\npseudoisatin\npseudoism\npseudoisomer\npseudoisomeric\npseudoisomerism\npseudoisotropy\npseudojervine\npseudolabial\npseudolabium\npseudolalia\nPseudolamellibranchia\nPseudolamellibranchiata\npseudolamellibranchiate\npseudolaminated\nPseudolarix\npseudolateral\npseudolatry\npseudolegal\npseudolegendary\npseudoleucite\npseudoleucocyte\npseudoleukemia\npseudoleukemic\npseudoliberal\npseudolichen\npseudolinguistic\npseudoliterary\npseudolobar\npseudological\npseudologically\npseudologist\npseudologue\npseudology\npseudolunule\npseudomalachite\npseudomalaria\npseudomancy\npseudomania\npseudomaniac\npseudomantic\npseudomantist\npseudomasculine\npseudomedical\npseudomedieval\npseudomelanosis\npseudomembrane\npseudomembranous\npseudomeningitis\npseudomenstruation\npseudomer\npseudomeric\npseudomerism\npseudomery\npseudometallic\npseudometameric\npseudometamerism\npseudomica\npseudomilitarist\npseudomilitaristic\npseudomilitary\npseudoministerial\npseudomiraculous\npseudomitotic\npseudomnesia\npseudomodern\npseudomodest\nPseudomonas\npseudomonastic\npseudomonoclinic\npseudomonocotyledonous\npseudomonocyclic\npseudomonotropy\npseudomoral\npseudomorph\npseudomorphia\npseudomorphic\npseudomorphine\npseudomorphism\npseudomorphose\npseudomorphosis\npseudomorphous\npseudomorula\npseudomorular\npseudomucin\npseudomucoid\npseudomultilocular\npseudomultiseptate\npseudomythical\npseudonarcotic\npseudonational\npseudonavicella\npseudonavicellar\npseudonavicula\npseudonavicular\npseudoneuropter\nPseudoneuroptera\npseudoneuropteran\npseudoneuropterous\npseudonitrole\npseudonitrosite\npseudonuclein\npseudonucleolus\npseudonychium\npseudonym\npseudonymal\npseudonymic\npseudonymity\npseudonymous\npseudonymously\npseudonymousness\npseudonymuncle\npseudonymuncule\npseudopapaverine\npseudoparalysis\npseudoparalytic\npseudoparaplegia\npseudoparasitic\npseudoparasitism\npseudoparenchyma\npseudoparenchymatous\npseudoparenchyme\npseudoparesis\npseudoparthenogenesis\npseudopatriotic\npseudopediform\npseudopelletierine\npseudopercular\npseudoperculate\npseudoperculum\npseudoperianth\npseudoperidium\npseudoperiodic\npseudoperipteral\npseudopermanent\npseudoperoxide\npseudoperspective\nPseudopeziza\npseudophallic\npseudophellandrene\npseudophenanthrene\npseudophenanthroline\npseudophenocryst\npseudophilanthropic\npseudophilosophical\nPseudophoenix\npseudopionnotes\npseudopious\npseudoplasm\npseudoplasma\npseudoplasmodium\npseudopneumonia\npseudopod\npseudopodal\npseudopodia\npseudopodial\npseudopodian\npseudopodiospore\npseudopodium\npseudopoetic\npseudopoetical\npseudopolitic\npseudopolitical\npseudopopular\npseudopore\npseudoporphyritic\npseudopregnancy\npseudopregnant\npseudopriestly\npseudoprimitive\npseudoprimitivism\npseudoprincely\npseudoproboscis\npseudoprofessional\npseudoprofessorial\npseudoprophetic\npseudoprophetical\npseudoprosperous\npseudopsia\npseudopsychological\npseudoptics\npseudoptosis\npseudopupa\npseudopupal\npseudopurpurin\npseudopyriform\npseudoquinol\npseudorabies\npseudoracemic\npseudoracemism\npseudoramose\npseudoramulus\npseudorealistic\npseudoreduction\npseudoreformed\npseudoregal\npseudoreligious\npseudoreminiscence\npseudorganic\npseudorheumatic\npseudorhombohedral\npseudoromantic\npseudorunic\npseudosacred\npseudosacrilegious\npseudosalt\npseudosatirical\npseudoscarlatina\nPseudoscarus\npseudoscholarly\npseudoscholastic\npseudoscientific\nPseudoscines\npseudoscinine\npseudosclerosis\npseudoscope\npseudoscopic\npseudoscopically\npseudoscopy\npseudoscorpion\nPseudoscorpiones\nPseudoscorpionida\npseudoscutum\npseudosematic\npseudosensational\npseudoseptate\npseudoservile\npseudosessile\npseudosiphonal\npseudosiphuncal\npseudoskeletal\npseudoskeleton\npseudoskink\npseudosmia\npseudosocial\npseudosocialistic\npseudosolution\npseudosoph\npseudosopher\npseudosophical\npseudosophist\npseudosophy\npseudospectral\npseudosperm\npseudospermic\npseudospermium\npseudospermous\npseudosphere\npseudospherical\npseudospiracle\npseudospiritual\npseudosporangium\npseudospore\npseudosquamate\npseudostalactite\npseudostalactitical\npseudostalagmite\npseudostalagmitical\npseudostereoscope\npseudostereoscopic\npseudostereoscopism\npseudostigma\npseudostigmatic\npseudostoma\npseudostomatous\npseudostomous\npseudostratum\npseudosubtle\nPseudosuchia\npseudosuchian\npseudosweating\npseudosyllogism\npseudosymmetric\npseudosymmetrical\npseudosymmetry\npseudosymptomatic\npseudosyphilis\npseudosyphilitic\npseudotabes\npseudotachylite\npseudotetanus\npseudotetragonal\nPseudotetramera\npseudotetrameral\npseudotetramerous\npseudotrachea\npseudotracheal\npseudotribal\npseudotributary\nPseudotrimera\npseudotrimeral\npseudotrimerous\npseudotropine\nPseudotsuga\npseudotubercular\npseudotuberculosis\npseudotuberculous\npseudoturbinal\npseudotyphoid\npseudoval\npseudovarian\npseudovary\npseudovelar\npseudovelum\npseudoventricle\npseudoviaduct\npseudoviperine\npseudoviscosity\npseudoviscous\npseudovolcanic\npseudovolcano\npseudovum\npseudowhorl\npseudoxanthine\npseudoyohimbine\npseudozealot\npseudozoea\npseudozoogloeal\npsha\nPshav\npshaw\npsi\nPsidium\npsilanthropic\npsilanthropism\npsilanthropist\npsilanthropy\npsiloceran\nPsiloceras\npsiloceratan\npsiloceratid\nPsiloceratidae\npsiloi\npsilology\npsilomelane\npsilomelanic\nPsilophytales\npsilophyte\nPsilophyton\npsilosis\npsilosopher\npsilosophy\nPsilotaceae\npsilotaceous\npsilothrum\npsilotic\nPsilotum\npsithurism\nPsithyrus\npsittaceous\npsittaceously\nPsittaci\nPsittacidae\nPsittaciformes\nPsittacinae\npsittacine\npsittacinite\npsittacism\npsittacistic\nPsittacomorphae\npsittacomorphic\npsittacosis\nPsittacus\npsoadic\npsoas\npsoatic\npsocid\nPsocidae\npsocine\npsoitis\npsomophagic\npsomophagist\npsomophagy\npsora\nPsoralea\npsoriasic\npsoriasiform\npsoriasis\npsoriatic\npsoriatiform\npsoric\npsoroid\nPsorophora\npsorophthalmia\npsorophthalmic\nPsoroptes\npsoroptic\npsorosis\npsorosperm\npsorospermial\npsorospermiasis\npsorospermic\npsorospermiform\npsorospermosis\npsorous\npssimistical\npst\npsych\npsychagogic\npsychagogos\npsychagogue\npsychagogy\npsychal\npsychalgia\npsychanalysis\npsychanalysist\npsychanalytic\npsychasthenia\npsychasthenic\nPsyche\npsyche\nPsychean\npsycheometry\npsychesthesia\npsychesthetic\npsychiasis\npsychiater\npsychiatria\npsychiatric\npsychiatrical\npsychiatrically\npsychiatrist\npsychiatrize\npsychiatry\npsychic\npsychical\npsychically\nPsychichthys\npsychicism\npsychicist\npsychics\npsychid\nPsychidae\npsychism\npsychist\npsychoanalysis\npsychoanalyst\npsychoanalytic\npsychoanalytical\npsychoanalytically\npsychoanalyze\npsychoanalyzer\npsychoautomatic\npsychobiochemistry\npsychobiologic\npsychobiological\npsychobiology\npsychobiotic\npsychocatharsis\npsychoclinic\npsychoclinical\npsychoclinicist\nPsychoda\npsychodiagnostics\nPsychodidae\npsychodispositional\npsychodrama\npsychodynamic\npsychodynamics\npsychoeducational\npsychoepilepsy\npsychoethical\npsychofugal\npsychogalvanic\npsychogalvanometer\npsychogenesis\npsychogenetic\npsychogenetical\npsychogenetically\npsychogenetics\npsychogenic\npsychogeny\npsychognosis\npsychognostic\npsychognosy\npsychogonic\npsychogonical\npsychogony\npsychogram\npsychograph\npsychographer\npsychographic\npsychographist\npsychography\npsychoid\npsychokinesia\npsychokinesis\npsychokinetic\npsychokyme\npsycholepsy\npsycholeptic\npsychologer\npsychologian\npsychologic\npsychological\npsychologically\npsychologics\npsychologism\npsychologist\npsychologize\npsychologue\npsychology\npsychomachy\npsychomancy\npsychomantic\npsychometer\npsychometric\npsychometrical\npsychometrically\npsychometrician\npsychometrics\npsychometrist\npsychometrize\npsychometry\npsychomonism\npsychomoral\npsychomorphic\npsychomorphism\npsychomotility\npsychomotor\npsychon\npsychoneural\npsychoneurological\npsychoneurosis\npsychoneurotic\npsychonomic\npsychonomics\npsychonomy\npsychony\npsychoorganic\npsychopannychian\npsychopannychism\npsychopannychist\npsychopannychistic\npsychopannychy\npsychopanychite\npsychopath\npsychopathia\npsychopathic\npsychopathist\npsychopathologic\npsychopathological\npsychopathologist\npsychopathy\npsychopetal\npsychophobia\npsychophysic\npsychophysical\npsychophysically\npsychophysicist\npsychophysics\npsychophysiologic\npsychophysiological\npsychophysiologically\npsychophysiologist\npsychophysiology\npsychoplasm\npsychopomp\npsychopompos\npsychorealism\npsychorealist\npsychorealistic\npsychoreflex\npsychorhythm\npsychorhythmia\npsychorhythmic\npsychorhythmical\npsychorhythmically\npsychorrhagic\npsychorrhagy\npsychosarcous\npsychosensorial\npsychosensory\npsychoses\npsychosexual\npsychosexuality\npsychosexually\npsychosis\npsychosocial\npsychosomatic\npsychosomatics\npsychosome\npsychosophy\npsychostasy\npsychostatic\npsychostatical\npsychostatically\npsychostatics\npsychosurgeon\npsychosurgery\npsychosynthesis\npsychosynthetic\npsychotaxis\npsychotechnical\npsychotechnician\npsychotechnics\npsychotechnological\npsychotechnology\npsychotheism\npsychotherapeutic\npsychotherapeutical\npsychotherapeutics\npsychotherapeutist\npsychotherapist\npsychotherapy\npsychotic\nPsychotria\npsychotrine\npsychovital\nPsychozoic\npsychroesthesia\npsychrograph\npsychrometer\npsychrometric\npsychrometrical\npsychrometry\npsychrophile\npsychrophilic\npsychrophobia\npsychrophore\npsychrophyte\npsychurgy\npsykter\nPsylla\npsylla\npsyllid\nPsyllidae\npsyllium\nptarmic\nPtarmica\nptarmical\nptarmigan\nPtelea\nPtenoglossa\nptenoglossate\nPteranodon\npteranodont\nPteranodontidae\npteraspid\nPteraspidae\nPteraspis\nptereal\npterergate\nPterian\npteric\nPterichthyodes\nPterichthys\npterideous\npteridium\npteridography\npteridoid\npteridological\npteridologist\npteridology\npteridophilism\npteridophilist\npteridophilistic\nPteridophyta\npteridophyte\npteridophytic\npteridophytous\npteridosperm\nPteridospermae\nPteridospermaphyta\npteridospermaphytic\npteridospermous\npterion\nPteris\nPterobranchia\npterobranchiate\npterocarpous\nPterocarpus\nPterocarya\nPterocaulon\nPterocera\nPteroceras\nPterocles\nPterocletes\nPteroclidae\nPteroclomorphae\npteroclomorphic\npterodactyl\nPterodactyli\npterodactylian\npterodactylic\npterodactylid\nPterodactylidae\npterodactyloid\npterodactylous\nPterodactylus\npterographer\npterographic\npterographical\npterography\npteroid\npteroma\npteromalid\nPteromalidae\nPteromys\npteropaedes\npteropaedic\npteropegal\npteropegous\npteropegum\npterophorid\nPterophoridae\nPterophorus\nPterophryne\npteropid\nPteropidae\npteropine\npteropod\nPteropoda\npteropodal\npteropodan\npteropodial\nPteropodidae\npteropodium\npteropodous\nPteropsida\nPteropus\npterosaur\nPterosauri\nPterosauria\npterosaurian\npterospermous\nPterospora\nPterostemon\nPterostemonaceae\npterostigma\npterostigmal\npterostigmatic\npterostigmatical\npterotheca\npterothorax\npterotic\npteroylglutamic\npterygial\npterygiophore\npterygium\npterygobranchiate\npterygode\npterygodum\nPterygogenea\npterygoid\npterygoidal\npterygoidean\npterygomalar\npterygomandibular\npterygomaxillary\npterygopalatal\npterygopalatine\npterygopharyngeal\npterygopharyngean\npterygophore\npterygopodium\npterygoquadrate\npterygosphenoid\npterygospinous\npterygostaphyline\nPterygota\npterygote\npterygotous\npterygotrabecular\nPterygotus\npteryla\npterylographic\npterylographical\npterylography\npterylological\npterylology\npterylosis\nPtilichthyidae\nPtiliidae\nPtilimnium\nptilinal\nptilinum\nPtilocercus\nPtilonorhynchidae\nPtilonorhynchinae\nptilopaedes\nptilopaedic\nptilosis\nPtilota\nptinid\nPtinidae\nptinoid\nPtinus\nptisan\nptochocracy\nptochogony\nptochology\nPtolemaean\nPtolemaian\nPtolemaic\nPtolemaical\nPtolemaism\nPtolemaist\nPtolemean\nPtolemy\nptomain\nptomaine\nptomainic\nptomatropine\nptosis\nptotic\nptyalagogic\nptyalagogue\nptyalectasis\nptyalin\nptyalism\nptyalize\nptyalocele\nptyalogenic\nptyalolith\nptyalolithiasis\nptyalorrhea\nPtychoparia\nptychoparid\nptychopariid\nptychopterygial\nptychopterygium\nPtychosperma\nptysmagogue\nptyxis\npu\npua\npuan\npub\npubal\npubble\npuberal\npubertal\npubertic\npuberty\npuberulent\npuberulous\npubes\npubescence\npubescency\npubescent\npubian\npubic\npubigerous\npubiotomy\npubis\npublic\nPublican\npublican\npublicanism\npublication\npublichearted\npublicheartedness\npublicism\npublicist\npublicity\npublicize\npublicly\npublicness\nPublilian\npublish\npublishable\npublisher\npublisheress\npublishership\npublishment\npubococcygeal\npubofemoral\npuboiliac\npuboischiac\npuboischial\npuboischiatic\npuboprostatic\npuborectalis\npubotibial\npubourethral\npubovesical\nPuccinia\nPucciniaceae\npucciniaceous\npuccinoid\npuccoon\npuce\npucelage\npucellas\npucelle\nPuchanahua\npucherite\npuchero\npuck\npucka\npuckball\npucker\npuckerbush\npuckerel\npuckerer\npuckermouth\npuckery\npuckfist\npuckish\npuckishly\npuckishness\npuckle\npucklike\npuckling\npuckneedle\npuckrel\npuckster\npud\npuddee\npuddening\npudder\npudding\npuddingberry\npuddinghead\npuddingheaded\npuddinghouse\npuddinglike\npuddingwife\npuddingy\npuddle\npuddled\npuddlelike\npuddler\npuddling\npuddly\npuddock\npuddy\npudency\npudenda\npudendal\npudendous\npudendum\npudent\npudge\npudgily\npudginess\npudgy\npudiano\npudibund\npudibundity\npudic\npudical\npudicitia\npudicity\npudsey\npudsy\nPudu\npudu\npueblito\nPueblo\npueblo\nPuebloan\npuebloization\npuebloize\nPuelche\nPuelchean\nPueraria\npuerer\npuericulture\npuerile\npuerilely\npuerileness\npuerilism\npuerility\npuerman\npuerpera\npuerperal\npuerperalism\npuerperant\npuerperium\npuerperous\npuerpery\npuff\npuffback\npuffball\npuffbird\npuffed\npuffer\npuffery\npuffily\npuffin\npuffiness\npuffinet\npuffing\npuffingly\nPuffinus\npufflet\npuffwig\npuffy\npug\npugged\npugger\npuggi\npugginess\npugging\npuggish\npuggle\npuggree\npuggy\npugh\npugil\npugilant\npugilism\npugilist\npugilistic\npugilistical\npugilistically\npuglianite\npugman\npugmill\npugmiller\npugnacious\npugnaciously\npugnaciousness\npugnacity\nPuinavi\nPuinavian\nPuinavis\npuisne\npuissance\npuissant\npuissantly\npuissantness\npuist\npuistie\npuja\nPujunan\npuka\npukatea\npukateine\npuke\npukeko\npuker\npukeweed\nPukhtun\npukish\npukishness\npukras\npuku\npuky\npul\npulahan\npulahanism\npulasan\npulaskite\nPulaya\nPulayan\npulchrify\npulchritude\npulchritudinous\npule\npulegol\npulegone\npuler\nPulex\npulghere\npuli\nPulian\npulicarious\npulicat\npulicene\npulicid\nPulicidae\npulicidal\npulicide\npulicine\npulicoid\npulicose\npulicosity\npulicous\npuling\npulingly\npulish\npulk\npulka\npull\npullable\npullback\npullboat\npulldevil\npulldoo\npulldown\npulldrive\npullen\npuller\npullery\npullet\npulley\npulleyless\npulli\nPullman\nPullmanize\npullorum\npullulant\npullulate\npullulation\npullus\npulmobranchia\npulmobranchial\npulmobranchiate\npulmocardiac\npulmocutaneous\npulmogastric\npulmometer\npulmometry\npulmonal\npulmonar\nPulmonaria\npulmonarian\npulmonary\nPulmonata\npulmonate\npulmonated\npulmonectomy\npulmonic\npulmonifer\nPulmonifera\npulmoniferous\npulmonitis\nPulmotor\npulmotracheal\nPulmotrachearia\npulmotracheary\npulmotracheate\npulp\npulpaceous\npulpal\npulpalgia\npulpamenta\npulpboard\npulpectomy\npulpefaction\npulper\npulpifier\npulpify\npulpily\npulpiness\npulpit\npulpital\npulpitarian\npulpiteer\npulpiter\npulpitful\npulpitic\npulpitical\npulpitically\npulpitis\npulpitish\npulpitism\npulpitize\npulpitless\npulpitly\npulpitolatry\npulpitry\npulpless\npulplike\npulpotomy\npulpous\npulpousness\npulpstone\npulpwood\npulpy\npulque\npulsant\npulsatance\npulsate\npulsatile\npulsatility\nPulsatilla\npulsation\npulsational\npulsative\npulsatively\npulsator\npulsatory\npulse\npulseless\npulselessly\npulselessness\npulselike\npulsellum\npulsidge\npulsific\npulsimeter\npulsion\npulsive\npulsojet\npulsometer\npultaceous\npulton\npulu\npulveraceous\npulverant\npulverate\npulveration\npulvereous\npulverin\npulverizable\npulverizate\npulverization\npulverizator\npulverize\npulverizer\npulverous\npulverulence\npulverulent\npulverulently\npulvic\npulvil\npulvillar\npulvilliform\npulvillus\npulvinar\nPulvinaria\npulvinarian\npulvinate\npulvinated\npulvinately\npulvination\npulvinic\npulviniform\npulvino\npulvinule\npulvinulus\npulvinus\npulviplume\npulwar\npuly\npuma\nPume\npumicate\npumice\npumiced\npumiceous\npumicer\npumiciform\npumicose\npummel\npummice\npump\npumpable\npumpage\npumpellyite\npumper\npumpernickel\npumpkin\npumpkinification\npumpkinify\npumpkinish\npumpkinity\npumple\npumpless\npumplike\npumpman\npumpsman\npumpwright\npun\npuna\npunaise\npunalua\npunaluan\nPunan\npunatoo\npunch\npunchable\npunchboard\npuncheon\npuncher\npunchinello\npunching\npunchless\npunchlike\npunchproof\npunchy\npunct\npunctal\npunctate\npunctated\npunctation\npunctator\npuncticular\npuncticulate\npuncticulose\npunctiform\npunctiliar\npunctilio\npunctiliomonger\npunctiliosity\npunctilious\npunctiliously\npunctiliousness\npunctist\npunctographic\npunctual\npunctualist\npunctuality\npunctually\npunctualness\npunctuate\npunctuation\npunctuational\npunctuationist\npunctuative\npunctuator\npunctuist\npunctulate\npunctulated\npunctulation\npunctule\npunctulum\npunctum\npuncturation\npuncture\npunctured\npunctureless\npunctureproof\npuncturer\npundigrion\npundit\npundita\npunditic\npunditically\npunditry\npundonor\npundum\npuneca\npung\npunga\npungapung\npungar\npungence\npungency\npungent\npungently\npunger\npungey\npungi\npungle\npungled\nPunic\nPunica\nPunicaceae\npunicaceous\npuniceous\npunicial\npunicin\npunicine\npunily\npuniness\npunish\npunishability\npunishable\npunishableness\npunishably\npunisher\npunishment\npunishmentproof\npunition\npunitional\npunitionally\npunitive\npunitively\npunitiveness\npunitory\nPunjabi\npunjum\npunk\npunkah\npunketto\npunkie\npunkwood\npunky\npunless\npunlet\npunnable\npunnage\npunner\npunnet\npunnic\npunnical\npunnigram\npunningly\npunnology\nPuno\npunproof\npunster\npunstress\npunt\npunta\npuntabout\npuntal\npuntel\npunter\npunti\npuntil\npuntist\nPuntlatsh\npunto\npuntout\npuntsman\npunty\npuny\npunyish\npunyism\npup\npupa\npupahood\npupal\npuparial\npuparium\npupate\npupation\npupelo\nPupidae\npupiferous\npupiform\npupigenous\npupigerous\npupil\npupilability\npupilage\npupilar\npupilate\npupildom\npupiled\npupilize\npupillarity\npupillary\npupilless\nPupillidae\npupillometer\npupillometry\npupilloscope\npupilloscoptic\npupilloscopy\nPupipara\npupiparous\nPupivora\npupivore\npupivorous\npupoid\npuppet\npuppetdom\npuppeteer\npuppethood\npuppetish\npuppetism\npuppetize\npuppetlike\npuppetly\npuppetman\npuppetmaster\npuppetry\npuppify\npuppily\nPuppis\npuppy\npuppydom\npuppyfish\npuppyfoot\npuppyhood\npuppyish\npuppyism\npuppylike\npuppysnatch\npupulo\nPupuluca\npupunha\nPuquina\nPuquinan\npur\npurana\npuranic\npuraque\nPurasati\nPurbeck\nPurbeckian\npurblind\npurblindly\npurblindness\npurchasability\npurchasable\npurchase\npurchaser\npurchasery\npurdah\npurdy\npure\npureblood\npurebred\npured\npuree\npurehearted\npurely\npureness\npurer\npurfle\npurfled\npurfler\npurfling\npurfly\npurga\npurgation\npurgative\npurgatively\npurgatorial\npurgatorian\npurgatory\npurge\npurgeable\npurger\npurgery\npurging\npurificant\npurification\npurificative\npurificator\npurificatory\npurifier\npuriform\npurify\npurine\npuriri\npurism\npurist\npuristic\npuristical\nPuritan\npuritandom\nPuritaness\npuritanic\npuritanical\npuritanically\npuritanicalness\nPuritanism\npuritanism\nPuritanize\nPuritanizer\npuritanlike\nPuritanly\npuritano\npurity\nPurkinje\nPurkinjean\npurl\npurler\npurlhouse\npurlicue\npurlieu\npurlieuman\npurlin\npurlman\npurloin\npurloiner\npurohepatitis\npurolymph\npuromucous\npurpart\npurparty\npurple\npurplelip\npurplely\npurpleness\npurplescent\npurplewood\npurplewort\npurplish\npurplishness\npurply\npurport\npurportless\npurpose\npurposedly\npurposeful\npurposefully\npurposefulness\npurposeless\npurposelessly\npurposelessness\npurposelike\npurposely\npurposer\npurposive\npurposively\npurposiveness\npurposivism\npurposivist\npurposivistic\npurpresture\npurpura\npurpuraceous\npurpurate\npurpure\npurpureal\npurpurean\npurpureous\npurpurescent\npurpuric\npurpuriferous\npurpuriform\npurpurigenous\npurpurin\npurpurine\npurpuriparous\npurpurite\npurpurize\npurpurogallin\npurpurogenous\npurpuroid\npurpuroxanthin\npurr\npurre\npurree\npurreic\npurrel\npurrer\npurring\npurringly\npurrone\npurry\npurse\npursed\npurseful\npurseless\npurselike\npurser\npursership\nPurshia\npursily\npursiness\npurslane\npurslet\npursley\npursuable\npursual\npursuance\npursuant\npursuantly\npursue\npursuer\npursuit\npursuitmeter\npursuivant\npursy\npurtenance\nPuru\nPuruha\npurulence\npurulency\npurulent\npurulently\npuruloid\nPurupuru\npurusha\npurushartha\npurvey\npurveyable\npurveyal\npurveyance\npurveyancer\npurveyor\npurveyoress\npurview\npurvoe\npurwannah\npus\nPuschkinia\nPuseyism\nPuseyistical\nPuseyite\npush\npushball\npushcart\npusher\npushful\npushfully\npushfulness\npushing\npushingly\npushingness\npushmobile\npushover\npushpin\nPushtu\npushwainling\npusillanimity\npusillanimous\npusillanimously\npusillanimousness\npuss\npusscat\npussley\npusslike\npussy\npussycat\npussyfoot\npussyfooted\npussyfooter\npussyfooting\npussyfootism\npussytoe\npustulant\npustular\npustulate\npustulated\npustulation\npustulatous\npustule\npustuled\npustulelike\npustuliform\npustulose\npustulous\nput\nputage\nputamen\nputaminous\nputanism\nputation\nputationary\nputative\nputatively\nputback\nputchen\nputcher\nputeal\nputelee\nputher\nputhery\nputid\nputidly\nputidness\nputlog\nputois\nPutorius\nputredinal\nputredinous\nputrefacient\nputrefactible\nputrefaction\nputrefactive\nputrefactiveness\nputrefiable\nputrefier\nputrefy\nputresce\nputrescence\nputrescency\nputrescent\nputrescibility\nputrescible\nputrescine\nputricide\nputrid\nputridity\nputridly\nputridness\nputrifacted\nputriform\nputrilage\nputrilaginous\nputrilaginously\nputschism\nputschist\nputt\nputtee\nputter\nputterer\nputteringly\nputtier\nputtock\nputty\nputtyblower\nputtyhead\nputtyhearted\nputtylike\nputtyroot\nputtywork\nputure\npuxy\nPuya\nPuyallup\npuzzle\npuzzleation\npuzzled\npuzzledly\npuzzledness\npuzzledom\npuzzlehead\npuzzleheaded\npuzzleheadedly\npuzzleheadedness\npuzzleman\npuzzlement\npuzzlepate\npuzzlepated\npuzzlepatedness\npuzzler\npuzzling\npuzzlingly\npuzzlingness\npya\npyal\npyarthrosis\npyche\nPycnanthemum\npycnia\npycnial\npycnid\npycnidia\npycnidial\npycnidiophore\npycnidiospore\npycnidium\npycniospore\npycnite\npycnium\nPycnocoma\npycnoconidium\npycnodont\nPycnodonti\nPycnodontidae\npycnodontoid\nPycnodus\npycnogonid\nPycnogonida\npycnogonidium\npycnogonoid\npycnometer\npycnometochia\npycnometochic\npycnomorphic\npycnomorphous\nPycnonotidae\nPycnonotinae\npycnonotine\nPycnonotus\npycnosis\npycnospore\npycnosporic\npycnostyle\npycnotic\npyelectasis\npyelic\npyelitic\npyelitis\npyelocystitis\npyelogram\npyelograph\npyelographic\npyelography\npyelolithotomy\npyelometry\npyelonephritic\npyelonephritis\npyelonephrosis\npyeloplasty\npyeloscopy\npyelotomy\npyeloureterogram\npyemesis\npyemia\npyemic\npygal\npygalgia\npygarg\npygargus\npygidial\npygidid\nPygididae\nPygidium\npygidium\npygmaean\nPygmalion\npygmoid\nPygmy\npygmy\npygmydom\npygmyhood\npygmyish\npygmyism\npygmyship\npygmyweed\nPygobranchia\nPygobranchiata\npygobranchiate\npygofer\npygopagus\npygopod\nPygopodes\nPygopodidae\npygopodine\npygopodous\nPygopus\npygostyle\npygostyled\npygostylous\npyic\npyin\npyjama\npyjamaed\npyke\npyknatom\npyknic\npyknotic\npyla\nPylades\npylagore\npylangial\npylangium\npylar\npylephlebitic\npylephlebitis\npylethrombophlebitis\npylethrombosis\npylic\npylon\npyloralgia\npylorectomy\npyloric\npyloristenosis\npyloritis\npylorocleisis\npylorodilator\npylorogastrectomy\npyloroplasty\npyloroptosis\npyloroschesis\npyloroscirrhus\npyloroscopy\npylorospasm\npylorostenosis\npylorostomy\npylorus\npyobacillosis\npyocele\npyoctanin\npyocyanase\npyocyanin\npyocyst\npyocyte\npyodermatitis\npyodermatosis\npyodermia\npyodermic\npyogenesis\npyogenetic\npyogenic\npyogenin\npyogenous\npyohemothorax\npyoid\npyolabyrinthitis\npyolymph\npyometra\npyometritis\npyonephritis\npyonephrosis\npyonephrotic\npyopericarditis\npyopericardium\npyoperitoneum\npyoperitonitis\npyophagia\npyophthalmia\npyophylactic\npyoplania\npyopneumocholecystitis\npyopneumocyst\npyopneumopericardium\npyopneumoperitoneum\npyopneumoperitonitis\npyopneumothorax\npyopoiesis\npyopoietic\npyoptysis\npyorrhea\npyorrheal\npyorrheic\npyosalpingitis\npyosalpinx\npyosepticemia\npyosepticemic\npyosis\npyospermia\npyotherapy\npyothorax\npyotoxinemia\npyoureter\npyovesiculosis\npyoxanthose\npyr\npyracanth\nPyracantha\nPyraceae\npyracene\npyral\nPyrales\npyralid\nPyralidae\npyralidan\npyralidid\nPyralididae\npyralidiform\nPyralidoidea\npyralis\npyraloid\nPyrameis\npyramid\npyramidaire\npyramidal\npyramidale\npyramidalis\nPyramidalism\nPyramidalist\npyramidally\npyramidate\nPyramidella\npyramidellid\nPyramidellidae\npyramider\npyramides\npyramidia\npyramidic\npyramidical\npyramidically\npyramidicalness\npyramidion\nPyramidist\npyramidize\npyramidlike\npyramidoattenuate\npyramidoidal\npyramidologist\npyramidoprismatic\npyramidwise\npyramoidal\npyran\npyranometer\npyranyl\npyrargyrite\nPyrausta\nPyraustinae\npyrazine\npyrazole\npyrazoline\npyrazolone\npyrazolyl\npyre\npyrectic\npyrena\npyrene\nPyrenean\npyrenematous\npyrenic\npyrenin\npyrenocarp\npyrenocarpic\npyrenocarpous\nPyrenochaeta\npyrenodean\npyrenodeine\npyrenodeous\npyrenoid\npyrenolichen\nPyrenomycetales\npyrenomycete\nPyrenomycetes\nPyrenomycetineae\npyrenomycetous\nPyrenopeziza\npyrethrin\nPyrethrum\npyrethrum\npyretic\npyreticosis\npyretogenesis\npyretogenetic\npyretogenic\npyretogenous\npyretography\npyretology\npyretolysis\npyretotherapy\npyrewinkes\nPyrex\npyrex\npyrexia\npyrexial\npyrexic\npyrexical\npyrgeometer\npyrgocephalic\npyrgocephaly\npyrgoidal\npyrgologist\npyrgom\npyrheliometer\npyrheliometric\npyrheliometry\npyrheliophor\npyribole\npyridazine\npyridic\npyridine\npyridinium\npyridinize\npyridone\npyridoxine\npyridyl\npyriform\npyriformis\npyrimidine\npyrimidyl\npyritaceous\npyrite\npyrites\npyritic\npyritical\npyritiferous\npyritization\npyritize\npyritohedral\npyritohedron\npyritoid\npyritology\npyritous\npyro\npyroacetic\npyroacid\npyroantimonate\npyroantimonic\npyroarsenate\npyroarsenic\npyroarsenious\npyroarsenite\npyrobelonite\npyrobituminous\npyroborate\npyroboric\npyrocatechin\npyrocatechinol\npyrocatechol\npyrocatechuic\npyrocellulose\npyrochemical\npyrochemically\npyrochlore\npyrochromate\npyrochromic\npyrocinchonic\npyrocitric\npyroclastic\npyrocoll\npyrocollodion\npyrocomenic\npyrocondensation\npyroconductivity\npyrocotton\npyrocrystalline\nPyrocystis\nPyrodine\npyroelectric\npyroelectricity\npyrogallate\npyrogallic\npyrogallol\npyrogen\npyrogenation\npyrogenesia\npyrogenesis\npyrogenetic\npyrogenetically\npyrogenic\npyrogenous\npyroglutamic\npyrognomic\npyrognostic\npyrognostics\npyrograph\npyrographer\npyrographic\npyrography\npyrogravure\npyroguaiacin\npyroheliometer\npyroid\nPyrola\nPyrolaceae\npyrolaceous\npyrolater\npyrolatry\npyroligneous\npyrolignic\npyrolignite\npyrolignous\npyrolite\npyrollogical\npyrologist\npyrology\npyrolusite\npyrolysis\npyrolytic\npyrolyze\npyromachy\npyromagnetic\npyromancer\npyromancy\npyromania\npyromaniac\npyromaniacal\npyromantic\npyromeconic\npyromellitic\npyrometallurgy\npyrometamorphic\npyrometamorphism\npyrometer\npyrometric\npyrometrical\npyrometrically\npyrometry\nPyromorphidae\npyromorphism\npyromorphite\npyromorphous\npyromotor\npyromucate\npyromucic\npyromucyl\npyronaphtha\npyrone\nPyronema\npyronine\npyronomics\npyronyxis\npyrope\npyropen\npyrophanite\npyrophanous\npyrophile\npyrophilous\npyrophobia\npyrophone\npyrophoric\npyrophorous\npyrophorus\npyrophosphate\npyrophosphoric\npyrophosphorous\npyrophotograph\npyrophotography\npyrophotometer\npyrophyllite\npyrophysalite\npyropuncture\npyropus\npyroracemate\npyroracemic\npyroscope\npyroscopy\npyrosis\npyrosmalite\nPyrosoma\nPyrosomatidae\npyrosome\nPyrosomidae\npyrosomoid\npyrosphere\npyrostat\npyrostereotype\npyrostilpnite\npyrosulphate\npyrosulphite\npyrosulphuric\npyrosulphuryl\npyrotantalate\npyrotartaric\npyrotartrate\npyrotechnian\npyrotechnic\npyrotechnical\npyrotechnically\npyrotechnician\npyrotechnics\npyrotechnist\npyrotechny\npyroterebic\npyrotheology\nPyrotheria\nPyrotherium\npyrotic\npyrotoxin\npyrotritaric\npyrotritartric\npyrouric\npyrovanadate\npyrovanadic\npyroxanthin\npyroxene\npyroxenic\npyroxenite\npyroxmangite\npyroxonium\npyroxyle\npyroxylene\npyroxylic\npyroxylin\nPyrrhic\npyrrhic\npyrrhichian\npyrrhichius\npyrrhicist\nPyrrhocoridae\nPyrrhonean\nPyrrhonian\nPyrrhonic\nPyrrhonism\nPyrrhonist\nPyrrhonistic\nPyrrhonize\npyrrhotine\npyrrhotism\npyrrhotist\npyrrhotite\npyrrhous\nPyrrhuloxia\nPyrrhus\npyrrodiazole\npyrrol\npyrrole\npyrrolic\npyrrolidine\npyrrolidone\npyrrolidyl\npyrroline\npyrrolylene\npyrrophyllin\npyrroporphyrin\npyrrotriazole\npyrroyl\npyrryl\npyrrylene\nPyrula\nPyrularia\npyruline\npyruloid\nPyrus\npyruvaldehyde\npyruvate\npyruvic\npyruvil\npyruvyl\npyrylium\nPythagorean\nPythagoreanism\nPythagoreanize\nPythagoreanly\nPythagoric\nPythagorical\nPythagorically\nPythagorism\nPythagorist\nPythagorize\nPythagorizer\nPythia\nPythiaceae\nPythiacystis\nPythiad\nPythiambic\nPythian\nPythic\nPythios\nPythium\nPythius\npythogenesis\npythogenetic\npythogenic\npythogenous\npython\npythoness\npythonic\npythonical\npythonid\nPythonidae\npythoniform\nPythoninae\npythonine\npythonism\nPythonissa\npythonist\npythonize\npythonoid\npythonomorph\nPythonomorpha\npythonomorphic\npythonomorphous\npyuria\npyvuril\npyx\nPyxidanthera\npyxidate\npyxides\npyxidium\npyxie\nPyxis\npyxis\nQ\nq\nqasida\nqere\nqeri\nqintar\nQoheleth\nqoph\nqua\nquab\nquabird\nquachil\nquack\nquackery\nquackhood\nquackish\nquackishly\nquackishness\nquackism\nquackle\nquacksalver\nquackster\nquacky\nquad\nquadded\nquaddle\nQuader\nQuadi\nquadmeter\nquadra\nquadrable\nquadragenarian\nquadragenarious\nQuadragesima\nquadragesimal\nquadragintesimal\nquadral\nquadrangle\nquadrangled\nquadrangular\nquadrangularly\nquadrangularness\nquadrangulate\nquadrans\nquadrant\nquadrantal\nquadrantes\nQuadrantid\nquadrantile\nquadrantlike\nquadrantly\nquadrat\nquadrate\nquadrated\nquadrateness\nquadratic\nquadratical\nquadratically\nquadratics\nQuadratifera\nquadratiferous\nquadratojugal\nquadratomandibular\nquadratosquamosal\nquadratrix\nquadratum\nquadrature\nquadratus\nquadrauricular\nquadrennia\nquadrennial\nquadrennially\nquadrennium\nquadriad\nquadrialate\nquadriannulate\nquadriarticulate\nquadriarticulated\nquadribasic\nquadric\nquadricapsular\nquadricapsulate\nquadricarinate\nquadricellular\nquadricentennial\nquadriceps\nquadrichord\nquadriciliate\nquadricinium\nquadricipital\nquadricone\nquadricorn\nquadricornous\nquadricostate\nquadricotyledonous\nquadricovariant\nquadricrescentic\nquadricrescentoid\nquadricuspid\nquadricuspidal\nquadricuspidate\nquadricycle\nquadricycler\nquadricyclist\nquadridentate\nquadridentated\nquadriderivative\nquadridigitate\nquadriennial\nquadriennium\nquadrienniumutile\nquadrifarious\nquadrifariously\nquadrifid\nquadrifilar\nquadrifocal\nquadrifoil\nquadrifoliate\nquadrifoliolate\nquadrifolious\nquadrifolium\nquadriform\nquadrifrons\nquadrifrontal\nquadrifurcate\nquadrifurcated\nquadrifurcation\nquadriga\nquadrigabled\nquadrigamist\nquadrigate\nquadrigatus\nquadrigeminal\nquadrigeminate\nquadrigeminous\nquadrigeminum\nquadrigenarious\nquadriglandular\nquadrihybrid\nquadrijugal\nquadrijugate\nquadrijugous\nquadrilaminar\nquadrilaminate\nquadrilateral\nquadrilaterally\nquadrilateralness\nquadrilingual\nquadriliteral\nquadrille\nquadrilled\nquadrillion\nquadrillionth\nquadrilobate\nquadrilobed\nquadrilocular\nquadriloculate\nquadrilogue\nquadrilogy\nquadrimembral\nquadrimetallic\nquadrimolecular\nquadrimum\nquadrinodal\nquadrinomial\nquadrinomical\nquadrinominal\nquadrinucleate\nquadrioxalate\nquadriparous\nquadripartite\nquadripartitely\nquadripartition\nquadripennate\nquadriphosphate\nquadriphyllous\nquadripinnate\nquadriplanar\nquadriplegia\nquadriplicate\nquadriplicated\nquadripolar\nquadripole\nquadriportico\nquadriporticus\nquadripulmonary\nquadriquadric\nquadriradiate\nquadrireme\nquadrisect\nquadrisection\nquadriseptate\nquadriserial\nquadrisetose\nquadrispiral\nquadristearate\nquadrisulcate\nquadrisulcated\nquadrisulphide\nquadrisyllabic\nquadrisyllabical\nquadrisyllable\nquadrisyllabous\nquadriternate\nquadritubercular\nquadrituberculate\nquadriurate\nquadrivalence\nquadrivalency\nquadrivalent\nquadrivalently\nquadrivalve\nquadrivalvular\nquadrivial\nquadrivious\nquadrivium\nquadrivoltine\nquadroon\nquadrual\nQuadrula\nquadrum\nQuadrumana\nquadrumanal\nquadrumane\nquadrumanous\nquadruped\nquadrupedal\nquadrupedan\nquadrupedant\nquadrupedantic\nquadrupedantical\nquadrupedate\nquadrupedation\nquadrupedism\nquadrupedous\nquadruplane\nquadruplator\nquadruple\nquadrupleness\nquadruplet\nquadruplex\nquadruplicate\nquadruplication\nquadruplicature\nquadruplicity\nquadruply\nquadrupole\nquaedam\nQuaequae\nquaesitum\nquaestor\nquaestorial\nquaestorian\nquaestorship\nquaestuary\nquaff\nquaffer\nquaffingly\nquag\nquagga\nquagginess\nquaggle\nquaggy\nquagmire\nquagmiry\nquahog\nquail\nquailberry\nquailery\nquailhead\nquaillike\nquaily\nquaint\nquaintance\nquaintise\nquaintish\nquaintly\nquaintness\nQuaitso\nquake\nquakeful\nquakeproof\nQuaker\nquaker\nquakerbird\nQuakerdom\nQuakeress\nQuakeric\nQuakerish\nQuakerishly\nQuakerishness\nQuakerism\nQuakerization\nQuakerize\nQuakerlet\nQuakerlike\nQuakerly\nQuakership\nQuakery\nquaketail\nquakiness\nquaking\nquakingly\nquaky\nquale\nqualifiable\nqualification\nqualificative\nqualificator\nqualificatory\nqualified\nqualifiedly\nqualifiedness\nqualifier\nqualify\nqualifyingly\nqualimeter\nqualitative\nqualitatively\nqualitied\nquality\nqualityless\nqualityship\nqualm\nqualminess\nqualmish\nqualmishly\nqualmishness\nqualmproof\nqualmy\nqualmyish\nqualtagh\nQuamasia\nQuamoclit\nquan\nquandary\nquandong\nquandy\nquannet\nquant\nquanta\nquantic\nquantical\nquantifiable\nquantifiably\nquantification\nquantifier\nquantify\nquantimeter\nquantitate\nquantitative\nquantitatively\nquantitativeness\nquantitied\nquantitive\nquantitively\nquantity\nquantivalence\nquantivalency\nquantivalent\nquantization\nquantize\nquantometer\nquantulum\nquantum\nQuapaw\nquaquaversal\nquaquaversally\nquar\nquarantinable\nquarantine\nquarantiner\nquaranty\nquardeel\nquare\nquarenden\nquarender\nquarentene\nquark\nquarl\nquarle\nquarred\nquarrel\nquarreled\nquarreler\nquarreling\nquarrelingly\nquarrelproof\nquarrelsome\nquarrelsomely\nquarrelsomeness\nquarriable\nquarried\nquarrier\nquarry\nquarryable\nquarrying\nquarryman\nquarrystone\nquart\nquartan\nquartane\nquartation\nquartenylic\nquarter\nquarterage\nquarterback\nquarterdeckish\nquartered\nquarterer\nquartering\nquarterization\nquarterland\nquarterly\nquarterman\nquartermaster\nquartermasterlike\nquartermastership\nquartern\nquarterpace\nquarters\nquartersaw\nquartersawed\nquarterspace\nquarterstaff\nquarterstetch\nquartet\nquartette\nquartetto\nquartful\nquartic\nquartile\nquartine\nquartiparous\nquarto\nQuartodeciman\nquartodecimanism\nquartole\nquartz\nquartzic\nquartziferous\nquartzite\nquartzitic\nquartzless\nquartzoid\nquartzose\nquartzous\nquartzy\nquash\nQuashee\nquashey\nquashy\nquasi\nquasijudicial\nQuasimodo\nquasky\nquassation\nquassative\nQuassia\nquassiin\nquassin\nquat\nquata\nquatch\nquatercentenary\nquatern\nquaternal\nquaternarian\nquaternarius\nquaternary\nquaternate\nquaternion\nquaternionic\nquaternionist\nquaternitarian\nquaternity\nquaters\nquatertenses\nquatorzain\nquatorze\nquatrain\nquatral\nquatrayle\nquatre\nquatrefeuille\nquatrefoil\nquatrefoiled\nquatrefoliated\nquatrible\nquatrin\nquatrino\nquatrocentism\nquatrocentist\nquatrocento\nQuatsino\nquattie\nquattrini\nquatuor\nquatuorvirate\nquauk\nquave\nquaver\nquaverer\nquavering\nquaveringly\nquaverous\nquavery\nquaverymavery\nquaw\nquawk\nquay\nquayage\nquayful\nquaylike\nquayman\nquayside\nquaysider\nqubba\nqueach\nqueachy\nqueak\nqueal\nquean\nqueanish\nqueasily\nqueasiness\nqueasom\nqueasy\nquebrachamine\nquebrachine\nquebrachitol\nquebracho\nquebradilla\nQuechua\nQuechuan\nquedful\nqueechy\nqueen\nqueencake\nqueencraft\nqueencup\nqueendom\nqueenfish\nqueenhood\nqueening\nqueenite\nqueenless\nqueenlet\nqueenlike\nqueenliness\nqueenly\nqueenright\nqueenroot\nqueensberry\nqueenship\nqueenweed\nqueenwood\nqueer\nqueerer\nqueerish\nqueerishness\nqueerity\nqueerly\nqueerness\nqueersome\nqueery\nqueest\nqueesting\nqueet\nqueeve\nquegh\nquei\nqueintise\nquelch\nQuelea\nquell\nqueller\nquemado\nqueme\nquemeful\nquemefully\nquemely\nquench\nquenchable\nquenchableness\nquencher\nquenchless\nquenchlessly\nquenchlessness\nquenelle\nquenselite\nquercetagetin\nquercetic\nquercetin\nquercetum\nquercic\nQuerciflorae\nquercimeritrin\nquercin\nquercine\nquercinic\nquercitannic\nquercitannin\nquercite\nquercitin\nquercitol\nquercitrin\nquercitron\nquercivorous\nQuercus\nQuerecho\nQuerendi\nQuerendy\nquerent\nQueres\nquerier\nqueriman\nquerimonious\nquerimoniously\nquerimoniousness\nquerimony\nquerist\nquerken\nquerl\nquern\nquernal\nQuernales\nquernstone\nquerulent\nquerulential\nquerulist\nquerulity\nquerulosity\nquerulous\nquerulously\nquerulousness\nquery\nquerying\nqueryingly\nqueryist\nquesited\nquesitive\nquest\nquester\nquesteur\nquestful\nquestingly\nquestion\nquestionability\nquestionable\nquestionableness\nquestionably\nquestionary\nquestionee\nquestioner\nquestioningly\nquestionist\nquestionless\nquestionlessly\nquestionnaire\nquestionous\nquestionwise\nquestman\nquestor\nquestorial\nquestorship\nquet\nquetch\nquetenite\nquetzal\nqueue\nquey\nQuiangan\nquiapo\nquib\nquibble\nquibbleproof\nquibbler\nquibblingly\nquiblet\nquica\nQuiche\nquick\nquickbeam\nquickborn\nquicken\nquickenance\nquickenbeam\nquickener\nquickfoot\nquickhatch\nquickhearted\nquickie\nquicklime\nquickly\nquickness\nquicksand\nquicksandy\nquickset\nquicksilver\nquicksilvering\nquicksilverish\nquicksilverishness\nquicksilvery\nquickstep\nquickthorn\nquickwork\nquid\nQuidae\nquiddative\nquidder\nQuiddist\nquiddit\nquidditative\nquidditatively\nquiddity\nquiddle\nquiddler\nquidnunc\nquiesce\nquiescence\nquiescency\nquiescent\nquiescently\nquiet\nquietable\nquieten\nquietener\nquieter\nquieting\nquietism\nquietist\nquietistic\nquietive\nquietlike\nquietly\nquietness\nquietsome\nquietude\nquietus\nquiff\nquiffing\nQuiina\nQuiinaceae\nquiinaceous\nquila\nquiles\nQuileute\nquilkin\nquill\nQuillagua\nquillai\nquillaic\nQuillaja\nquillaja\nquillback\nquilled\nquiller\nquillet\nquilleted\nquillfish\nquilling\nquilltail\nquillwork\nquillwort\nquilly\nquilt\nquilted\nquilter\nquilting\nQuimbaya\nQuimper\nquin\nquina\nquinacrine\nQuinaielt\nquinaldic\nquinaldine\nquinaldinic\nquinaldinium\nquinaldyl\nquinamicine\nquinamidine\nquinamine\nquinanisole\nquinaquina\nquinarian\nquinarius\nquinary\nquinate\nquinatoxine\nQuinault\nquinazoline\nquinazolyl\nquince\nquincentenary\nquincentennial\nquincewort\nquinch\nquincubital\nquincubitalism\nquincuncial\nquincuncially\nquincunx\nquincunxial\nquindecad\nquindecagon\nquindecangle\nquindecasyllabic\nquindecemvir\nquindecemvirate\nquindecennial\nquindecim\nquindecima\nquindecylic\nquindene\nquinetum\nquingentenary\nquinhydrone\nquinia\nquinible\nquinic\nquinicine\nquinidia\nquinidine\nquinin\nquinina\nquinine\nquininiazation\nquininic\nquininism\nquininize\nquiniretin\nquinisext\nquinisextine\nquinism\nquinite\nquinitol\nquinizarin\nquinize\nquink\nquinnat\nquinnet\nQuinnipiac\nquinoa\nquinocarbonium\nquinoform\nquinogen\nquinoid\nquinoidal\nquinoidation\nquinoidine\nquinol\nquinoline\nquinolinic\nquinolinium\nquinolinyl\nquinologist\nquinology\nquinolyl\nquinometry\nquinone\nquinonediimine\nquinonic\nquinonimine\nquinonization\nquinonize\nquinonoid\nquinonyl\nquinopyrin\nquinotannic\nquinotoxine\nquinova\nquinovatannic\nquinovate\nquinovic\nquinovin\nquinovose\nquinoxaline\nquinoxalyl\nquinoyl\nquinquagenarian\nquinquagenary\nQuinquagesima\nquinquagesimal\nquinquarticular\nQuinquatria\nQuinquatrus\nquinquecapsular\nquinquecostate\nquinquedentate\nquinquedentated\nquinquefarious\nquinquefid\nquinquefoliate\nquinquefoliated\nquinquefoliolate\nquinquegrade\nquinquejugous\nquinquelateral\nquinqueliteral\nquinquelobate\nquinquelobated\nquinquelobed\nquinquelocular\nquinqueloculine\nquinquenary\nquinquenerval\nquinquenerved\nquinquennalia\nquinquennia\nquinquenniad\nquinquennial\nquinquennialist\nquinquennially\nquinquennium\nquinquepartite\nquinquepedal\nquinquepedalian\nquinquepetaloid\nquinquepunctal\nquinquepunctate\nquinqueradial\nquinqueradiate\nquinquereme\nquinquertium\nquinquesect\nquinquesection\nquinqueseptate\nquinqueserial\nquinqueseriate\nquinquesyllabic\nquinquesyllable\nquinquetubercular\nquinquetuberculate\nquinquevalence\nquinquevalency\nquinquevalent\nquinquevalve\nquinquevalvous\nquinquevalvular\nquinqueverbal\nquinqueverbial\nquinquevir\nquinquevirate\nquinquiliteral\nquinquina\nquinquino\nquinse\nquinsied\nquinsy\nquinsyberry\nquinsywort\nquint\nquintad\nquintadena\nquintadene\nquintain\nquintal\nquintan\nquintant\nquintary\nquintato\nquinte\nquintelement\nquintennial\nquinternion\nquinteron\nquinteroon\nquintessence\nquintessential\nquintessentiality\nquintessentially\nquintessentiate\nquintet\nquintette\nquintetto\nquintic\nquintile\nQuintilis\nQuintillian\nquintillion\nquintillionth\nQuintin\nquintin\nquintiped\nQuintius\nquinto\nquintocubital\nquintocubitalism\nquintole\nquinton\nquintroon\nquintuple\nquintuplet\nquintuplicate\nquintuplication\nquintuplinerved\nquintupliribbed\nquintus\nquinuclidine\nquinyl\nquinze\nquinzieme\nquip\nquipful\nquipo\nquipper\nquippish\nquippishness\nquippy\nquipsome\nquipsomeness\nquipster\nquipu\nquira\nquire\nquirewise\nQuirinal\nQuirinalia\nquirinca\nquiritarian\nquiritary\nQuirite\nQuirites\nquirk\nquirkiness\nquirkish\nquirksey\nquirksome\nquirky\nquirl\nquirquincho\nquirt\nquis\nquisby\nquiscos\nquisle\nquisling\nQuisqualis\nquisqueite\nquisquilian\nquisquiliary\nquisquilious\nquisquous\nquisutsch\nquit\nquitch\nquitclaim\nquite\nQuitemoca\nQuiteno\nquitrent\nquits\nquittable\nquittance\nquitted\nquitter\nquittor\nQuitu\nquiver\nquivered\nquiverer\nquiverful\nquivering\nquiveringly\nquiverish\nquiverleaf\nquivery\nQuixote\nquixotic\nquixotical\nquixotically\nquixotism\nquixotize\nquixotry\nquiz\nquizzability\nquizzable\nquizzacious\nquizzatorial\nquizzee\nquizzer\nquizzery\nquizzical\nquizzicality\nquizzically\nquizzicalness\nquizzification\nquizzify\nquizziness\nquizzingly\nquizzish\nquizzism\nquizzity\nquizzy\nQung\nquo\nquod\nquoddies\nquoddity\nquodlibet\nquodlibetal\nquodlibetarian\nquodlibetary\nquodlibetic\nquodlibetical\nquodlibetically\nquoilers\nquoin\nquoined\nquoining\nquoit\nquoiter\nquoitlike\nquoits\nquondam\nquondamly\nquondamship\nquoniam\nquop\nQuoratean\nquorum\nquot\nquota\nquotability\nquotable\nquotableness\nquotably\nquotation\nquotational\nquotationally\nquotationist\nquotative\nquote\nquotee\nquoteless\nquotennial\nquoter\nquoteworthy\nquoth\nquotha\nquotidian\nquotidianly\nquotidianness\nquotient\nquotiety\nquotingly\nquotity\nquotlibet\nquotum\nQurti\nR\nr\nra\nraad\nRaanan\nraash\nRab\nrab\nraband\nrabanna\nrabat\nrabatine\nrabatte\nrabattement\nrabbanist\nrabbanite\nrabbet\nrabbeting\nrabbi\nrabbin\nrabbinate\nrabbindom\nRabbinic\nrabbinic\nRabbinica\nrabbinical\nrabbinically\nrabbinism\nrabbinist\nrabbinistic\nrabbinistical\nrabbinite\nrabbinize\nrabbinship\nrabbiship\nrabbit\nrabbitberry\nrabbiter\nrabbithearted\nrabbitlike\nrabbitmouth\nrabbitproof\nrabbitroot\nrabbitry\nrabbitskin\nrabbitweed\nrabbitwise\nrabbitwood\nrabbity\nrabble\nrabblelike\nrabblement\nrabbleproof\nrabbler\nrabblesome\nrabboni\nrabbonim\nRabelaisian\nRabelaisianism\nRabelaism\nRabi\nrabic\nrabid\nrabidity\nrabidly\nrabidness\nrabies\nrabietic\nrabific\nrabiform\nrabigenic\nRabin\nrabinet\nrabirubia\nrabitic\nrabulistic\nrabulous\nraccoon\nraccoonberry\nraccroc\nrace\nraceabout\nracebrood\nracecourse\nracegoer\nracegoing\nracelike\nracemate\nracemation\nraceme\nracemed\nracemic\nracemiferous\nracemiform\nracemism\nracemization\nracemize\nracemocarbonate\nracemocarbonic\nracemomethylate\nracemose\nracemosely\nracemous\nracemously\nracemule\nracemulose\nracer\nraceway\nrach\nrache\nRachel\nrachial\nrachialgia\nrachialgic\nrachianalgesia\nRachianectes\nrachianesthesia\nrachicentesis\nrachides\nrachidial\nrachidian\nrachiform\nRachiglossa\nrachiglossate\nrachigraph\nrachilla\nrachiocentesis\nrachiococainize\nrachiocyphosis\nrachiodont\nrachiodynia\nrachiometer\nrachiomyelitis\nrachioparalysis\nrachioplegia\nrachioscoliosis\nrachiotome\nrachiotomy\nrachipagus\nrachis\nrachischisis\nrachitic\nrachitis\nrachitism\nrachitogenic\nrachitome\nrachitomous\nrachitomy\nRachycentridae\nRachycentron\nracial\nracialism\nracialist\nraciality\nracialization\nracialize\nracially\nracily\nraciness\nracing\nracinglike\nracism\nracist\nrack\nrackabones\nrackan\nrackboard\nracker\nracket\nracketeer\nracketeering\nracketer\nracketing\nracketlike\nracketproof\nracketry\nrackett\nrackettail\nrackety\nrackful\nracking\nrackingly\nrackle\nrackless\nrackmaster\nrackproof\nrackrentable\nrackway\nrackwork\nracloir\nracon\nraconteur\nracoon\nRacovian\nracy\nrad\nrada\nradar\nradarman\nradarscope\nraddle\nraddleman\nraddlings\nradectomy\nRadek\nradiability\nradiable\nradial\nradiale\nradialia\nradiality\nradialization\nradialize\nradially\nradian\nradiance\nradiancy\nradiant\nradiantly\nRadiata\nradiate\nradiated\nradiately\nradiateness\nradiatics\nradiatiform\nradiation\nradiational\nradiative\nradiatopatent\nradiatoporose\nradiatoporous\nradiator\nradiatory\nradiatostriate\nradiatosulcate\nradiature\nradical\nradicalism\nradicality\nradicalization\nradicalize\nradically\nradicalness\nradicand\nradicant\nradicate\nradicated\nradicating\nradication\nradicel\nradices\nradicicola\nradicicolous\nradiciferous\nradiciflorous\nradiciform\nradicivorous\nradicle\nradicolous\nradicose\nRadicula\nradicular\nradicule\nradiculectomy\nradiculitis\nradiculose\nradiectomy\nradiescent\nradiferous\nradii\nradio\nradioacoustics\nradioactinium\nradioactivate\nradioactive\nradioactively\nradioactivity\nradioamplifier\nradioanaphylaxis\nradioautograph\nradioautographic\nradioautography\nradiobicipital\nradiobroadcast\nradiobroadcaster\nradiobroadcasting\nradiobserver\nradiocarbon\nradiocarpal\nradiocast\nradiocaster\nradiochemical\nradiochemistry\nradiocinematograph\nradioconductor\nradiode\nradiodermatitis\nradiodetector\nradiodiagnosis\nradiodigital\nradiodontia\nradiodontic\nradiodontist\nradiodynamic\nradiodynamics\nradioelement\nradiogenic\nradiogoniometer\nradiogoniometric\nradiogoniometry\nradiogram\nradiograph\nradiographer\nradiographic\nradiographical\nradiographically\nradiography\nradiohumeral\nradioisotope\nRadiolaria\nradiolarian\nradiolead\nradiolite\nRadiolites\nradiolitic\nRadiolitidae\nradiolocation\nradiolocator\nradiologic\nradiological\nradiologist\nradiology\nradiolucency\nradiolucent\nradioluminescence\nradioluminescent\nradioman\nradiomedial\nradiometallography\nradiometeorograph\nradiometer\nradiometric\nradiometrically\nradiometry\nradiomicrometer\nradiomovies\nradiomuscular\nradionecrosis\nradioneuritis\nradionics\nradiopacity\nradiopalmar\nradiopaque\nradiopelvimetry\nradiophare\nradiophone\nradiophonic\nradiophony\nradiophosphorus\nradiophotograph\nradiophotography\nradiopraxis\nradioscope\nradioscopic\nradioscopical\nradioscopy\nradiosensibility\nradiosensitive\nradiosensitivity\nradiosonde\nradiosonic\nradiostereoscopy\nradiosurgery\nradiosurgical\nradiosymmetrical\nradiotechnology\nradiotelegram\nradiotelegraph\nradiotelegraphic\nradiotelegraphy\nradiotelephone\nradiotelephonic\nradiotelephony\nradioteria\nradiothallium\nradiotherapeutic\nradiotherapeutics\nradiotherapeutist\nradiotherapist\nradiotherapy\nradiothermy\nradiothorium\nradiotoxemia\nradiotransparency\nradiotransparent\nradiotrician\nRadiotron\nradiotropic\nradiotropism\nradiovision\nradish\nradishlike\nradium\nradiumization\nradiumize\nradiumlike\nradiumproof\nradiumtherapy\nradius\nradix\nradknight\nradman\nradome\nradon\nradsimir\nradula\nradulate\nraduliferous\nraduliform\nRafael\nRafe\nraff\nRaffaelesque\nraffe\nraffee\nraffery\nraffia\nraffinase\nraffinate\nraffing\nraffinose\nraffish\nraffishly\nraffishness\nraffle\nraffler\nRafflesia\nrafflesia\nRafflesiaceae\nrafflesiaceous\nRafik\nraft\nraftage\nrafter\nraftiness\nraftlike\nraftman\nraftsman\nrafty\nrag\nraga\nragabash\nragabrash\nragamuffin\nragamuffinism\nragamuffinly\nrage\nrageful\nragefully\nrageless\nrageous\nrageously\nrageousness\nrageproof\nrager\nragesome\nragfish\nragged\nraggedly\nraggedness\nraggedy\nraggee\nragger\nraggery\nraggety\nraggil\nraggily\nragging\nraggle\nraggled\nraggy\nraghouse\nRaghu\nraging\nragingly\nraglan\nraglanite\nraglet\nraglin\nragman\nRagnar\nragout\nragpicker\nragseller\nragshag\nragsorter\nragstone\nragtag\nragtime\nragtimer\nragtimey\nragule\nraguly\nragweed\nragwort\nrah\nRahanwin\nrahdar\nrahdaree\nRahul\nRaia\nraia\nRaiae\nraid\nraider\nraidproof\nRaif\nRaiidae\nraiiform\nrail\nrailage\nrailbird\nrailer\nrailhead\nrailing\nrailingly\nraillery\nrailless\nraillike\nrailly\nrailman\nrailroad\nrailroadana\nrailroader\nrailroadiana\nrailroading\nrailroadish\nrailroadship\nrailway\nrailwaydom\nrailwayless\nRaimannia\nraiment\nraimentless\nrain\nrainband\nrainbird\nrainbound\nrainbow\nrainbowlike\nrainbowweed\nrainbowy\nrainburst\nraincoat\nraindrop\nRainer\nrainer\nrainfall\nrainfowl\nrainful\nrainily\nraininess\nrainless\nrainlessness\nrainlight\nrainproof\nrainproofer\nrainspout\nrainstorm\nraintight\nrainwash\nrainworm\nrainy\nraioid\nRais\nrais\nraisable\nraise\nraised\nraiseman\nraiser\nraisin\nraising\nraisiny\nRaj\nraj\nRaja\nraja\nRajah\nrajah\nRajarshi\nrajaship\nRajasthani\nrajbansi\nRajeev\nRajendra\nRajesh\nRajidae\nRajiv\nRajput\nrakan\nrake\nrakeage\nrakeful\nrakehell\nrakehellish\nrakehelly\nraker\nrakery\nrakesteel\nrakestele\nrakh\nRakhal\nraki\nrakily\nraking\nrakish\nrakishly\nrakishness\nrakit\nrakshasa\nraku\nRalf\nrallentando\nralliance\nRallidae\nrallier\nralliform\nRallinae\nralline\nRallus\nrally\nRalph\nralph\nralstonite\nRam\nram\nRama\nramada\nRamadoss\nramage\nRamaism\nRamaite\nramal\nRaman\nRamanan\nramanas\nramarama\nramass\nramate\nrambeh\nramberge\nramble\nrambler\nrambling\nramblingly\nramblingness\nRambo\nrambong\nrambooze\nRambouillet\nrambunctious\nrambutan\nramdohrite\nrame\nrameal\nRamean\nramed\nramekin\nramellose\nrament\nramentaceous\nramental\nramentiferous\nramentum\nrameous\nramequin\nRameses\nRameseum\nRamesh\nRamessid\nRamesside\nramet\nramex\nramfeezled\nramgunshoch\nramhead\nramhood\nrami\nramicorn\nramie\nramiferous\nramificate\nramification\nramified\nramiflorous\nramiform\nramify\nramigerous\nRamillie\nRamillied\nramiparous\nRamiro\nramisection\nramisectomy\nRamism\nRamist\nRamistical\nramlike\nramline\nrammack\nrammel\nrammelsbergite\nrammer\nrammerman\nrammish\nrammishly\nrammishness\nrammy\nRamneek\nRamnenses\nRamnes\nRamon\nRamona\nRamoosii\nramose\nramosely\nramosity\nramosopalmate\nramosopinnate\nramososubdivided\nramous\nramp\nrampacious\nrampaciously\nrampage\nrampageous\nrampageously\nrampageousness\nrampager\nrampagious\nrampancy\nrampant\nrampantly\nrampart\nramped\nramper\nRamphastidae\nRamphastides\nRamphastos\nrampick\nrampike\nramping\nrampingly\nrampion\nrampire\nrampler\nramplor\nrampsman\nramrace\nramrod\nramroddy\nramscallion\nramsch\nRamsey\nramshackle\nramshackled\nramshackleness\nramshackly\nramson\nramstam\nramtil\nramular\nramule\nramuliferous\nramulose\nramulous\nramulus\nramus\nramuscule\nRamusi\nRan\nran\nRana\nrana\nranal\nRanales\nranarian\nranarium\nRanatra\nrance\nrancel\nrancellor\nrancelman\nrancer\nrancescent\nranch\nranche\nrancher\nrancheria\nranchero\nranchless\nranchman\nrancho\nranchwoman\nrancid\nrancidification\nrancidify\nrancidity\nrancidly\nrancidness\nrancor\nrancorous\nrancorously\nrancorousness\nrancorproof\nRand\nrand\nRandal\nRandall\nRandallite\nrandan\nrandannite\nRandell\nrandem\nrander\nRandia\nranding\nrandir\nRandite\nrandle\nRandolph\nrandom\nrandomish\nrandomization\nrandomize\nrandomly\nrandomness\nrandomwise\nRandy\nrandy\nrane\nRanella\nRanere\nrang\nrangatira\nrange\nranged\nrangeless\nrangeman\nranger\nrangership\nrangework\nrangey\nRangifer\nrangiferine\nranginess\nranging\nrangle\nrangler\nrangy\nrani\nranid\nRanidae\nraniferous\nraniform\nRanina\nRaninae\nranine\nraninian\nranivorous\nRanjit\nrank\nranked\nranker\nrankish\nrankle\nrankless\nranklingly\nrankly\nrankness\nranksman\nrankwise\nrann\nrannel\nrannigal\nranny\nRanquel\nransack\nransacker\nransackle\nransel\nranselman\nransom\nransomable\nransomer\nransomfree\nransomless\nranstead\nrant\nrantan\nrantankerous\nrantepole\nranter\nRanterism\nranting\nrantingly\nrantipole\nrantock\nranty\nranula\nranular\nRanunculaceae\nranunculaceous\nRanunculales\nranunculi\nRanunculus\nRanzania\nRaoulia\nrap\nRapaces\nrapaceus\nrapacious\nrapaciously\nrapaciousness\nrapacity\nrapakivi\nRapallo\nRapanea\nRapateaceae\nrapateaceous\nrape\nrapeful\nraper\nrapeseed\nRaphael\nRaphaelesque\nRaphaelic\nRaphaelism\nRaphaelite\nRaphaelitism\nraphania\nRaphanus\nraphany\nraphe\nRaphia\nraphide\nraphides\nraphidiferous\nraphidiid\nRaphidiidae\nRaphidodea\nRaphidoidea\nRaphiolepis\nraphis\nrapic\nrapid\nrapidity\nrapidly\nrapidness\nrapier\nrapiered\nrapillo\nrapine\nrapiner\nraping\nrapinic\nrapist\nraploch\nrappage\nrapparee\nrappe\nrappel\nrapper\nrapping\nRappist\nrappist\nRappite\nrapport\nrapscallion\nrapscallionism\nrapscallionly\nrapscallionry\nrapt\nraptatorial\nraptatory\nraptly\nraptness\nraptor\nRaptores\nraptorial\nraptorious\nraptril\nrapture\nraptured\nraptureless\nrapturist\nrapturize\nrapturous\nrapturously\nrapturousness\nraptury\nraptus\nrare\nrarebit\nrarefaction\nrarefactional\nrarefactive\nrarefiable\nrarefication\nrarefier\nrarefy\nrarely\nrareness\nrareripe\nRareyfy\nrariconstant\nrarish\nrarity\nRarotongan\nras\nrasa\nRasalas\nRasalhague\nrasamala\nrasant\nrascacio\nrascal\nrascaldom\nrascaless\nrascalion\nrascalism\nrascality\nrascalize\nrascallike\nrascallion\nrascally\nrascalry\nrascalship\nrasceta\nrascette\nrase\nrasen\nRasenna\nraser\nrasgado\nrash\nrasher\nrashful\nrashing\nrashlike\nrashly\nrashness\nRashti\nrasion\nRaskolnik\nRasores\nrasorial\nrasp\nraspatorium\nraspatory\nraspberriade\nraspberry\nraspberrylike\nrasped\nrasper\nrasping\nraspingly\nraspingness\nraspings\nraspish\nraspite\nraspy\nrasse\nRasselas\nrassle\nRastaban\nraster\nrastik\nrastle\nRastus\nrasure\nrat\nrata\nratability\nratable\nratableness\nratably\nratafee\nratafia\nratal\nratanhia\nrataplan\nratbite\nratcatcher\nratcatching\nratch\nratchel\nratchelly\nratcher\nratchet\nratchetlike\nratchety\nratching\nratchment\nrate\nrated\nratel\nrateless\nratement\nratepayer\nratepaying\nrater\nratfish\nrath\nrathe\nrathed\nrathely\nratheness\nrather\nratherest\nratheripe\nratherish\nratherly\nrathest\nrathite\nRathnakumar\nrathole\nrathskeller\nraticidal\nraticide\nratification\nratificationist\nratifier\nratify\nratihabition\nratine\nrating\nratio\nratiocinant\nratiocinate\nratiocination\nratiocinative\nratiocinator\nratiocinatory\nratiometer\nration\nrationable\nrationably\nrational\nrationale\nrationalism\nrationalist\nrationalistic\nrationalistical\nrationalistically\nrationalisticism\nrationality\nrationalizable\nrationalization\nrationalize\nrationalizer\nrationally\nrationalness\nrationate\nrationless\nrationment\nRatitae\nratite\nratitous\nratlike\nratline\nratliner\nratoon\nratooner\nratproof\nratsbane\nratskeller\nrattage\nrattail\nrattan\nratteen\nratten\nrattener\nratter\nrattery\nratti\nrattinet\nrattish\nrattle\nrattlebag\nrattlebones\nrattlebox\nrattlebrain\nrattlebrained\nrattlebush\nrattled\nrattlehead\nrattleheaded\nrattlejack\nrattlemouse\nrattlenut\nrattlepate\nrattlepated\nrattlepod\nrattleproof\nrattler\nrattleran\nrattleroot\nrattlertree\nrattles\nrattleskull\nrattleskulled\nrattlesnake\nrattlesome\nrattletrap\nrattleweed\nrattlewort\nrattling\nrattlingly\nrattlingness\nrattly\nratton\nrattoner\nrattrap\nRattus\nratty\nratwa\nratwood\nraucid\nraucidity\nraucity\nraucous\nraucously\nraucousness\nraught\nraugrave\nrauk\nraukle\nRaul\nrauli\nraun\nraunge\nraupo\nrauque\nRauraci\nRaurici\nRauwolfia\nravage\nravagement\nravager\nrave\nravehook\nraveinelike\nravel\nraveler\nravelin\nraveling\nravelly\nravelment\nravelproof\nraven\nRavenala\nravendom\nravenduck\nRavenelia\nravener\nravenhood\nravening\nravenish\nravenlike\nravenous\nravenously\nravenousness\nravenry\nravens\nRavensara\nravensara\nravenstone\nravenwise\nraver\nRavi\nravigote\nravin\nravinate\nRavindran\nRavindranath\nravine\nravined\nravinement\nraviney\nraving\nravingly\nravioli\nravish\nravishedly\nravisher\nravishing\nravishingly\nravishment\nravison\nravissant\nraw\nrawboned\nrawbones\nrawhead\nrawhide\nrawhider\nrawish\nrawishness\nrawness\nrax\nRay\nray\nraya\nrayage\nRayan\nrayed\nrayful\nrayless\nraylessness\nraylet\nRaymond\nrayon\nrayonnance\nrayonnant\nraze\nrazee\nrazer\nrazoo\nrazor\nrazorable\nrazorback\nrazorbill\nrazoredge\nrazorless\nrazormaker\nrazormaking\nrazorman\nrazorstrop\nRazoumofskya\nrazz\nrazzia\nrazzly\nre\nrea\nreaal\nreabandon\nreabolish\nreabolition\nreabridge\nreabsence\nreabsent\nreabsolve\nreabsorb\nreabsorption\nreabuse\nreacceptance\nreaccess\nreaccession\nreacclimatization\nreacclimatize\nreaccommodate\nreaccompany\nreaccomplish\nreaccomplishment\nreaccord\nreaccost\nreaccount\nreaccredit\nreaccrue\nreaccumulate\nreaccumulation\nreaccusation\nreaccuse\nreaccustom\nreacetylation\nreach\nreachable\nreacher\nreachieve\nreachievement\nreaching\nreachless\nreachy\nreacidification\nreacidify\nreacknowledge\nreacknowledgment\nreacquaint\nreacquaintance\nreacquire\nreacquisition\nreact\nreactance\nreactant\nreaction\nreactional\nreactionally\nreactionariness\nreactionarism\nreactionarist\nreactionary\nreactionaryism\nreactionism\nreactionist\nreactivate\nreactivation\nreactive\nreactively\nreactiveness\nreactivity\nreactological\nreactology\nreactor\nreactualization\nreactualize\nreactuate\nread\nreadability\nreadable\nreadableness\nreadably\nreadapt\nreadaptability\nreadaptable\nreadaptation\nreadaptive\nreadaptiveness\nreadd\nreaddition\nreaddress\nreader\nreaderdom\nreadership\nreadhere\nreadhesion\nreadily\nreadiness\nreading\nreadingdom\nreadjourn\nreadjournment\nreadjudicate\nreadjust\nreadjustable\nreadjuster\nreadjustment\nreadmeasurement\nreadminister\nreadmiration\nreadmire\nreadmission\nreadmit\nreadmittance\nreadopt\nreadoption\nreadorn\nreadvance\nreadvancement\nreadvent\nreadventure\nreadvertency\nreadvertise\nreadvertisement\nreadvise\nreadvocate\nready\nreaeration\nreaffect\nreaffection\nreaffiliate\nreaffiliation\nreaffirm\nreaffirmance\nreaffirmation\nreaffirmer\nreafflict\nreafford\nreafforest\nreafforestation\nreaffusion\nreagency\nreagent\nreaggravate\nreaggravation\nreaggregate\nreaggregation\nreaggressive\nreagin\nreagitate\nreagitation\nreagree\nreagreement\nreak\nReal\nreal\nrealarm\nreales\nrealest\nrealgar\nrealienate\nrealienation\nrealign\nrealignment\nrealism\nrealist\nrealistic\nrealistically\nrealisticize\nreality\nrealive\nrealizability\nrealizable\nrealizableness\nrealizably\nrealization\nrealize\nrealizer\nrealizing\nrealizingly\nreallegation\nreallege\nreallegorize\nrealliance\nreallocate\nreallocation\nreallot\nreallotment\nreallow\nreallowance\nreallude\nreallusion\nreally\nrealm\nrealmless\nrealmlet\nrealness\nrealter\nrealteration\nrealtor\nrealty\nream\nreamage\nreamalgamate\nreamalgamation\nreamass\nreambitious\nreamend\nreamendment\nreamer\nreamerer\nreaminess\nreamputation\nreamuse\nreamy\nreanalysis\nreanalyze\nreanchor\nreanimalize\nreanimate\nreanimation\nreanneal\nreannex\nreannexation\nreannotate\nreannounce\nreannouncement\nreannoy\nreannoyance\nreanoint\nreanswer\nreanvil\nreanxiety\nreap\nreapable\nreapdole\nreaper\nreapologize\nreapology\nreapparel\nreapparition\nreappeal\nreappear\nreappearance\nreappease\nreapplaud\nreapplause\nreappliance\nreapplicant\nreapplication\nreapplier\nreapply\nreappoint\nreappointment\nreapportion\nreapportionment\nreapposition\nreappraisal\nreappraise\nreappraisement\nreappreciate\nreappreciation\nreapprehend\nreapprehension\nreapproach\nreapprobation\nreappropriate\nreappropriation\nreapproval\nreapprove\nrear\nrearbitrate\nrearbitration\nrearer\nreargue\nreargument\nrearhorse\nrearisal\nrearise\nrearling\nrearm\nrearmament\nrearmost\nrearousal\nrearouse\nrearrange\nrearrangeable\nrearrangement\nrearranger\nrearray\nrearrest\nrearrival\nrearrive\nrearward\nrearwardly\nrearwardness\nrearwards\nreascend\nreascendancy\nreascendant\nreascendency\nreascendent\nreascension\nreascensional\nreascent\nreascertain\nreascertainment\nreashlar\nreasiness\nreask\nreason\nreasonability\nreasonable\nreasonableness\nreasonably\nreasoned\nreasonedly\nreasoner\nreasoning\nreasoningly\nreasonless\nreasonlessly\nreasonlessness\nreasonproof\nreaspire\nreassail\nreassault\nreassay\nreassemblage\nreassemble\nreassembly\nreassent\nreassert\nreassertion\nreassertor\nreassess\nreassessment\nreasseverate\nreassign\nreassignation\nreassignment\nreassimilate\nreassimilation\nreassist\nreassistance\nreassociate\nreassociation\nreassort\nreassortment\nreassume\nreassumption\nreassurance\nreassure\nreassured\nreassuredly\nreassurement\nreassurer\nreassuring\nreassuringly\nreastiness\nreastonish\nreastonishment\nreastray\nreasty\nreasy\nreattach\nreattachment\nreattack\nreattain\nreattainment\nreattempt\nreattend\nreattendance\nreattention\nreattentive\nreattest\nreattire\nreattract\nreattraction\nreattribute\nreattribution\nreatus\nreaudit\nreauthenticate\nreauthentication\nreauthorization\nreauthorize\nreavail\nreavailable\nreave\nreaver\nreavoid\nreavoidance\nreavouch\nreavow\nreawait\nreawake\nreawaken\nreawakening\nreawakenment\nreaward\nreaware\nreb\nrebab\nreback\nrebag\nrebait\nrebake\nrebalance\nrebale\nreballast\nreballot\nreban\nrebandage\nrebanish\nrebanishment\nrebankrupt\nrebankruptcy\nrebaptism\nrebaptismal\nrebaptization\nrebaptize\nrebaptizer\nrebar\nrebarbarization\nrebarbarize\nrebarbative\nrebargain\nrebase\nrebasis\nrebatable\nrebate\nrebateable\nrebatement\nrebater\nrebathe\nrebato\nrebawl\nrebeamer\nrebear\nrebeat\nrebeautify\nrebec\nRebecca\nRebeccaism\nRebeccaites\nrebeck\nrebecome\nrebed\nrebeg\nrebeget\nrebeggar\nrebegin\nrebeginner\nrebeginning\nrebeguile\nrebehold\nRebekah\nrebel\nrebeldom\nrebelief\nrebelieve\nrebeller\nrebellike\nrebellion\nrebellious\nrebelliously\nrebelliousness\nrebellow\nrebelly\nrebelong\nrebelove\nrebelproof\nrebemire\nrebend\nrebenediction\nrebenefit\nrebeset\nrebesiege\nrebestow\nrebestowal\nrebetake\nrebetray\nrebewail\nrebia\nrebias\nrebid\nrebill\nrebillet\nrebilling\nrebind\nrebirth\nrebite\nreblade\nreblame\nreblast\nrebleach\nreblend\nrebless\nreblock\nrebloom\nreblossom\nreblot\nreblow\nreblue\nrebluff\nreblunder\nreboant\nreboantic\nreboard\nreboast\nrebob\nreboil\nreboiler\nreboise\nreboisement\nrebold\nrebolt\nrebone\nrebook\nrebop\nrebore\nreborn\nreborrow\nrebottle\nReboulia\nrebounce\nrebound\nreboundable\nrebounder\nreboundingness\nrebourbonize\nrebox\nrebrace\nrebraid\nrebranch\nrebrand\nrebrandish\nrebreathe\nrebreed\nrebrew\nrebribe\nrebrick\nrebridge\nrebring\nrebringer\nrebroach\nrebroadcast\nrebronze\nrebrown\nrebrush\nrebrutalize\nrebubble\nrebuckle\nrebud\nrebudget\nrebuff\nrebuffable\nrebuffably\nrebuffet\nrebuffproof\nrebuild\nrebuilder\nrebuilt\nrebukable\nrebuke\nrebukeable\nrebukeful\nrebukefully\nrebukefulness\nrebukeproof\nrebuker\nrebukingly\nrebulk\nrebunch\nrebundle\nrebunker\nrebuoy\nrebuoyage\nreburden\nreburgeon\nreburial\nreburn\nreburnish\nreburst\nrebury\nrebus\nrebush\nrebusy\nrebut\nrebute\nrebutment\nrebuttable\nrebuttal\nrebutter\nrebutton\nrebuy\nrecable\nrecadency\nrecage\nrecalcination\nrecalcine\nrecalcitrance\nrecalcitrant\nrecalcitrate\nrecalcitration\nrecalculate\nrecalculation\nrecalesce\nrecalescence\nrecalescent\nrecalibrate\nrecalibration\nrecalk\nrecall\nrecallable\nrecallist\nrecallment\nrecampaign\nrecancel\nrecancellation\nrecandescence\nrecandidacy\nrecant\nrecantation\nrecanter\nrecantingly\nrecanvas\nrecap\nrecapacitate\nrecapitalization\nrecapitalize\nrecapitulate\nrecapitulation\nrecapitulationist\nrecapitulative\nrecapitulator\nrecapitulatory\nrecappable\nrecapper\nrecaption\nrecaptivate\nrecaptivation\nrecaptor\nrecapture\nrecapturer\nrecarbon\nrecarbonate\nrecarbonation\nrecarbonization\nrecarbonize\nrecarbonizer\nrecarburization\nrecarburize\nrecarburizer\nrecarnify\nrecarpet\nrecarriage\nrecarrier\nrecarry\nrecart\nrecarve\nrecase\nrecash\nrecasket\nrecast\nrecaster\nrecasting\nrecatalogue\nrecatch\nrecaulescence\nrecausticize\nrecce\nrecco\nreccy\nrecede\nrecedence\nrecedent\nreceder\nreceipt\nreceiptable\nreceiptless\nreceiptor\nreceipts\nreceivability\nreceivable\nreceivables\nreceivablness\nreceival\nreceive\nreceived\nreceivedness\nreceiver\nreceivership\nrecelebrate\nrecelebration\nrecement\nrecementation\nrecency\nrecense\nrecension\nrecensionist\nrecensor\nrecensure\nrecensus\nrecent\nrecenter\nrecently\nrecentness\nrecentralization\nrecentralize\nrecentre\nrecept\nreceptacle\nreceptacular\nreceptaculite\nReceptaculites\nreceptaculitid\nReceptaculitidae\nreceptaculitoid\nreceptaculum\nreceptant\nreceptibility\nreceptible\nreception\nreceptionism\nreceptionist\nreceptitious\nreceptive\nreceptively\nreceptiveness\nreceptivity\nreceptor\nreceptoral\nreceptorial\nreceptual\nreceptually\nrecercelee\nrecertificate\nrecertify\nrecess\nrecesser\nrecession\nrecessional\nrecessionary\nrecessive\nrecessively\nrecessiveness\nrecesslike\nrecessor\nRechabite\nRechabitism\nrechafe\nrechain\nrechal\nrechallenge\nrechamber\nrechange\nrechant\nrechaos\nrechar\nrecharge\nrecharter\nrechase\nrechaser\nrechasten\nrechaw\nrecheat\nrecheck\nrecheer\nrecherche\nrechew\nrechip\nrechisel\nrechoose\nrechristen\nrechuck\nrechurn\nrecidivation\nrecidive\nrecidivism\nrecidivist\nrecidivistic\nrecidivity\nrecidivous\nrecipe\nrecipiangle\nrecipience\nrecipiency\nrecipiend\nrecipiendary\nrecipient\nrecipiomotor\nreciprocable\nreciprocal\nreciprocality\nreciprocalize\nreciprocally\nreciprocalness\nreciprocate\nreciprocation\nreciprocative\nreciprocator\nreciprocatory\nreciprocitarian\nreciprocity\nrecircle\nrecirculate\nrecirculation\nrecision\nrecission\nrecissory\nrecitable\nrecital\nrecitalist\nrecitatif\nrecitation\nrecitationalism\nrecitationist\nrecitative\nrecitatively\nrecitativical\nrecitativo\nrecite\nrecitement\nreciter\nrecivilization\nrecivilize\nreck\nreckla\nreckless\nrecklessly\nrecklessness\nreckling\nreckon\nreckonable\nreckoner\nreckoning\nreclaim\nreclaimable\nreclaimableness\nreclaimably\nreclaimant\nreclaimer\nreclaimless\nreclaimment\nreclama\nreclamation\nreclang\nreclasp\nreclass\nreclassification\nreclassify\nreclean\nrecleaner\nrecleanse\nreclear\nreclearance\nreclimb\nreclinable\nreclinate\nreclinated\nreclination\nrecline\nrecliner\nreclose\nreclothe\nreclothing\nrecluse\nreclusely\nrecluseness\nreclusery\nreclusion\nreclusive\nreclusiveness\nreclusory\nrecoach\nrecoagulation\nrecoal\nrecoast\nrecoat\nrecock\nrecoct\nrecoction\nrecode\nrecodification\nrecodify\nrecogitate\nrecogitation\nrecognition\nrecognitive\nrecognitor\nrecognitory\nrecognizability\nrecognizable\nrecognizably\nrecognizance\nrecognizant\nrecognize\nrecognizedly\nrecognizee\nrecognizer\nrecognizingly\nrecognizor\nrecognosce\nrecohabitation\nrecoil\nrecoiler\nrecoilingly\nrecoilment\nrecoin\nrecoinage\nrecoiner\nrecoke\nrecollapse\nrecollate\nrecollation\nRecollect\nrecollectable\nrecollected\nrecollectedly\nrecollectedness\nrecollectible\nrecollection\nrecollective\nrecollectively\nrecollectiveness\nRecollet\nrecolonization\nrecolonize\nrecolor\nrecomb\nrecombination\nrecombine\nrecomember\nrecomfort\nrecommand\nrecommence\nrecommencement\nrecommencer\nrecommend\nrecommendability\nrecommendable\nrecommendableness\nrecommendably\nrecommendation\nrecommendatory\nrecommendee\nrecommender\nrecommission\nrecommit\nrecommitment\nrecommittal\nrecommunicate\nrecommunion\nrecompact\nrecompare\nrecomparison\nrecompass\nrecompel\nrecompensable\nrecompensate\nrecompensation\nrecompense\nrecompenser\nrecompensive\nrecompete\nrecompetition\nrecompetitor\nrecompilation\nrecompile\nrecompilement\nrecomplain\nrecomplaint\nrecomplete\nrecompletion\nrecompliance\nrecomplicate\nrecomplication\nrecomply\nrecompose\nrecomposer\nrecomposition\nrecompound\nrecomprehend\nrecomprehension\nrecompress\nrecompression\nrecomputation\nrecompute\nrecon\nreconceal\nreconcealment\nreconcede\nreconceive\nreconcentrate\nreconcentration\nreconception\nreconcert\nreconcession\nreconcilability\nreconcilable\nreconcilableness\nreconcilably\nreconcile\nreconcilee\nreconcileless\nreconcilement\nreconciler\nreconciliability\nreconciliable\nreconciliate\nreconciliation\nreconciliative\nreconciliator\nreconciliatory\nreconciling\nreconcilingly\nreconclude\nreconclusion\nreconcoct\nreconcrete\nreconcur\nrecondemn\nrecondemnation\nrecondensation\nrecondense\nrecondite\nreconditely\nreconditeness\nrecondition\nrecondole\nreconduct\nreconduction\nreconfer\nreconfess\nreconfide\nreconfine\nreconfinement\nreconfirm\nreconfirmation\nreconfiscate\nreconfiscation\nreconform\nreconfound\nreconfront\nreconfuse\nreconfusion\nrecongeal\nrecongelation\nrecongest\nrecongestion\nrecongratulate\nrecongratulation\nreconjoin\nreconjunction\nreconnaissance\nreconnect\nreconnection\nreconnoissance\nreconnoiter\nreconnoiterer\nreconnoiteringly\nreconnoitre\nreconnoitrer\nreconnoitringly\nreconquer\nreconqueror\nreconquest\nreconsecrate\nreconsecration\nreconsent\nreconsider\nreconsideration\nreconsign\nreconsignment\nreconsole\nreconsolidate\nreconsolidation\nreconstituent\nreconstitute\nreconstitution\nreconstruct\nreconstructed\nreconstruction\nreconstructional\nreconstructionary\nreconstructionist\nreconstructive\nreconstructiveness\nreconstructor\nreconstrue\nreconsult\nreconsultation\nrecontact\nrecontemplate\nrecontemplation\nrecontend\nrecontest\nrecontinuance\nrecontinue\nrecontract\nrecontraction\nrecontrast\nrecontribute\nrecontribution\nrecontrivance\nrecontrive\nrecontrol\nreconvalesce\nreconvalescence\nreconvalescent\nreconvene\nreconvention\nreconventional\nreconverge\nreconverse\nreconversion\nreconvert\nreconvertible\nreconvey\nreconveyance\nreconvict\nreconviction\nreconvince\nreconvoke\nrecook\nrecool\nrecooper\nrecopper\nrecopy\nrecopyright\nrecord\nrecordable\nrecordant\nrecordation\nrecordative\nrecordatively\nrecordatory\nrecordedly\nrecorder\nrecordership\nrecording\nrecordist\nrecordless\nrecork\nrecorporification\nrecorporify\nrecorrect\nrecorrection\nrecorrupt\nrecorruption\nrecostume\nrecounsel\nrecount\nrecountable\nrecountal\nrecountenance\nrecounter\nrecountless\nrecoup\nrecoupable\nrecouper\nrecouple\nrecoupment\nrecourse\nrecover\nrecoverability\nrecoverable\nrecoverableness\nrecoverance\nrecoveree\nrecoverer\nrecoveringly\nrecoverless\nrecoveror\nrecovery\nrecramp\nrecrank\nrecrate\nrecreance\nrecreancy\nrecreant\nrecreantly\nrecreantness\nrecrease\nrecreate\nrecreation\nrecreational\nrecreationist\nrecreative\nrecreatively\nrecreativeness\nrecreator\nrecreatory\nrecredit\nrecrement\nrecremental\nrecrementitial\nrecrementitious\nrecrescence\nrecrew\nrecriminate\nrecrimination\nrecriminative\nrecriminator\nrecriminatory\nrecriticize\nrecroon\nrecrop\nrecross\nrecrowd\nrecrown\nrecrucify\nrecrudency\nrecrudesce\nrecrudescence\nrecrudescency\nrecrudescent\nrecruit\nrecruitable\nrecruitage\nrecruital\nrecruitee\nrecruiter\nrecruithood\nrecruiting\nrecruitment\nrecruity\nrecrush\nrecrusher\nrecrystallization\nrecrystallize\nrect\nrecta\nrectal\nrectalgia\nrectally\nrectangle\nrectangled\nrectangular\nrectangularity\nrectangularly\nrectangularness\nrectangulate\nrectangulometer\nrectectomy\nrecti\nrectifiable\nrectification\nrectificative\nrectificator\nrectificatory\nrectified\nrectifier\nrectify\nrectigrade\nRectigraph\nrectilineal\nrectilineally\nrectilinear\nrectilinearism\nrectilinearity\nrectilinearly\nrectilinearness\nrectilineation\nrectinerved\nrection\nrectipetality\nrectirostral\nrectischiac\nrectiserial\nrectitic\nrectitis\nrectitude\nrectitudinous\nrecto\nrectoabdominal\nrectocele\nrectoclysis\nrectococcygeal\nrectococcygeus\nrectocolitic\nrectocolonic\nrectocystotomy\nrectogenital\nrectopexy\nrectoplasty\nrector\nrectoral\nrectorate\nrectoress\nrectorial\nrectorrhaphy\nrectorship\nrectory\nrectoscope\nrectoscopy\nrectosigmoid\nrectostenosis\nrectostomy\nrectotome\nrectotomy\nrectovaginal\nrectovesical\nrectress\nrectricial\nrectrix\nrectum\nrectus\nrecubant\nrecubate\nrecultivate\nrecultivation\nrecumbence\nrecumbency\nrecumbent\nrecumbently\nrecuperability\nrecuperance\nrecuperate\nrecuperation\nrecuperative\nrecuperativeness\nrecuperator\nrecuperatory\nrecur\nrecure\nrecureful\nrecureless\nrecurl\nrecurrence\nrecurrency\nrecurrent\nrecurrently\nrecurrer\nrecurring\nrecurringly\nrecurse\nrecursion\nrecursive\nrecurtain\nrecurvant\nrecurvate\nrecurvation\nrecurvature\nrecurve\nRecurvirostra\nrecurvirostral\nRecurvirostridae\nrecurvopatent\nrecurvoternate\nrecurvous\nrecusance\nrecusancy\nrecusant\nrecusation\nrecusative\nrecusator\nrecuse\nrecushion\nrecussion\nrecut\nrecycle\nRed\nred\nredact\nredaction\nredactional\nredactor\nredactorial\nredamage\nredamnation\nredan\nredare\nredargue\nredargution\nredargutive\nredargutory\nredarken\nredarn\nredart\nredate\nredaub\nredawn\nredback\nredbait\nredbeard\nredbelly\nredberry\nredbill\nredbird\nredbone\nredbreast\nredbrush\nredbuck\nredbud\nredcap\nredcoat\nredd\nredden\nreddendo\nreddendum\nreddening\nredder\nredding\nreddingite\nreddish\nreddishness\nreddition\nreddleman\nreddock\nreddsman\nreddy\nrede\nredeal\nredebate\nredebit\nredeceive\nredecide\nredecimate\nredecision\nredeck\nredeclaration\nredeclare\nredecline\nredecorate\nredecoration\nredecrease\nredecussate\nrededicate\nrededication\nrededicatory\nrededuct\nrededuction\nredeed\nredeem\nredeemability\nredeemable\nredeemableness\nredeemably\nredeemer\nredeemeress\nredeemership\nredeemless\nredefault\nredefeat\nredefecate\nredefer\nredefiance\nredefine\nredefinition\nredeflect\nredefy\nredeify\nredelay\nredelegate\nredelegation\nredeliberate\nredeliberation\nredeliver\nredeliverance\nredeliverer\nredelivery\nredemand\nredemandable\nredemise\nredemolish\nredemonstrate\nredemonstration\nredemptible\nRedemptine\nredemption\nredemptional\nredemptioner\nRedemptionist\nredemptionless\nredemptive\nredemptively\nredemptor\nredemptorial\nRedemptorist\nredemptory\nredemptress\nredemptrice\nredenigrate\nredeny\nredepend\nredeploy\nredeployment\nredeposit\nredeposition\nredepreciate\nredepreciation\nredeprive\nrederivation\nredescend\nredescent\nredescribe\nredescription\nredesertion\nredeserve\nredesign\nredesignate\nredesignation\nredesire\nredesirous\nredesman\nredespise\nredetect\nredetention\nredetermination\nredetermine\nredevelop\nredeveloper\nredevelopment\nredevise\nredevote\nredevotion\nredeye\nredfin\nredfinch\nredfish\nredfoot\nredhead\nredheaded\nredheadedly\nredheadedness\nredhearted\nredhibition\nredhibitory\nredhoop\nredia\nredictate\nredictation\nredient\nredifferentiate\nredifferentiation\nredig\nredigest\nredigestion\nrediminish\nredingote\nredintegrate\nredintegration\nredintegrative\nredintegrator\nredip\nredipper\nredirect\nredirection\nredisable\nredisappear\nredisburse\nredisbursement\nredischarge\nrediscipline\nrediscount\nrediscourage\nrediscover\nrediscoverer\nrediscovery\nrediscuss\nrediscussion\nredisembark\nredismiss\nredispatch\nredispel\nredisperse\nredisplay\nredispose\nredisposition\nredispute\nredissect\nredissection\nredisseise\nredisseisin\nredisseisor\nredisseize\nredisseizin\nredisseizor\nredissoluble\nredissolution\nredissolvable\nredissolve\nredistend\nredistill\nredistillation\nredistiller\nredistinguish\nredistrain\nredistrainer\nredistribute\nredistributer\nredistribution\nredistributive\nredistributor\nredistributory\nredistrict\nredisturb\nredive\nrediversion\nredivert\nredivertible\nredivide\nredivision\nredivive\nredivivous\nredivivus\nredivorce\nredivorcement\nredivulge\nredivulgence\nredjacket\nredknees\nredleg\nredlegs\nredly\nredmouth\nredness\nredo\nredock\nredocket\nredolence\nredolency\nredolent\nredolently\nredominate\nredondilla\nredoom\nredouble\nredoublement\nredoubler\nredoubling\nredoubt\nredoubtable\nredoubtableness\nredoubtably\nredoubted\nredound\nredowa\nredox\nredpoll\nredraft\nredrag\nredrape\nredraw\nredrawer\nredream\nredredge\nredress\nredressable\nredressal\nredresser\nredressible\nredressive\nredressless\nredressment\nredressor\nredrill\nredrive\nredroot\nredry\nredsear\nredshank\nredshirt\nredskin\nredstart\nredstreak\nredtab\nredtail\nredthroat\nredtop\nredub\nredubber\nreduce\nreduceable\nreduceableness\nreduced\nreducement\nreducent\nreducer\nreducibility\nreducible\nreducibleness\nreducibly\nreducing\nreduct\nreductant\nreductase\nreductibility\nreduction\nreductional\nreductionism\nreductionist\nreductionistic\nreductive\nreductively\nreductor\nreductorial\nredue\nRedunca\nredundance\nredundancy\nredundant\nredundantly\nreduplicate\nreduplication\nreduplicative\nreduplicatively\nreduplicatory\nreduplicature\nreduviid\nReduviidae\nreduvioid\nReduvius\nredux\nredward\nredware\nredweed\nredwing\nredwithe\nredwood\nredye\nRee\nree\nreechy\nreed\nreedbird\nreedbuck\nreedbush\nreeded\nreeden\nreeder\nreediemadeasy\nreedily\nreediness\nreeding\nreedish\nreedition\nreedless\nreedlike\nreedling\nreedmaker\nreedmaking\nreedman\nreedplot\nreedwork\nreedy\nreef\nreefable\nreefer\nreefing\nreefy\nreek\nreeker\nreekingly\nreeky\nreel\nreelable\nreeled\nreeler\nreelingly\nreelrall\nreem\nreeming\nreemish\nreen\nreenge\nreeper\nRees\nreese\nreeshle\nreesk\nreesle\nreest\nreester\nreestle\nreesty\nreet\nreetam\nreetle\nreeve\nreeveland\nreeveship\nref\nreface\nrefacilitate\nrefall\nrefallow\nrefan\nrefascinate\nrefascination\nrefashion\nrefashioner\nrefashionment\nrefasten\nrefathered\nrefavor\nrefect\nrefection\nrefectionary\nrefectioner\nrefective\nrefectorarian\nrefectorary\nrefectorer\nrefectorial\nrefectorian\nrefectory\nrefederate\nrefeed\nrefeel\nrefeign\nrefel\nrefence\nrefer\nreferable\nreferee\nreference\nreferenda\nreferendal\nreferendary\nreferendaryship\nreferendum\nreferent\nreferential\nreferentially\nreferently\nreferment\nreferral\nreferrer\nreferrible\nreferribleness\nrefertilization\nrefertilize\nrefetch\nrefight\nrefigure\nrefill\nrefillable\nrefilm\nrefilter\nrefinable\nrefinage\nrefinance\nrefind\nrefine\nrefined\nrefinedly\nrefinedness\nrefinement\nrefiner\nrefinery\nrefinger\nrefining\nrefiningly\nrefinish\nrefire\nrefit\nrefitment\nrefix\nrefixation\nrefixture\nreflag\nreflagellate\nreflame\nreflash\nreflate\nreflation\nreflationism\nreflect\nreflectance\nreflected\nreflectedly\nreflectedness\nreflectent\nreflecter\nreflectibility\nreflectible\nreflecting\nreflectingly\nreflection\nreflectional\nreflectionist\nreflectionless\nreflective\nreflectively\nreflectiveness\nreflectivity\nreflectometer\nreflectometry\nreflector\nreflectoscope\nrefledge\nreflee\nreflex\nreflexed\nreflexibility\nreflexible\nreflexism\nreflexive\nreflexively\nreflexiveness\nreflexivity\nreflexly\nreflexness\nreflexogenous\nreflexological\nreflexologist\nreflexology\nrefling\nrefloat\nrefloatation\nreflog\nreflood\nrefloor\nreflorescence\nreflorescent\nreflourish\nreflourishment\nreflow\nreflower\nrefluctuation\nrefluence\nrefluency\nrefluent\nreflush\nreflux\nrefluxed\nrefly\nrefocillate\nrefocillation\nrefocus\nrefold\nrefoment\nrefont\nrefool\nrefoot\nreforbid\nreforce\nreford\nreforecast\nreforest\nreforestation\nreforestization\nreforestize\nreforestment\nreforfeit\nreforfeiture\nreforge\nreforger\nreforget\nreforgive\nreform\nreformability\nreformable\nreformableness\nreformado\nreformandum\nReformati\nreformation\nreformational\nreformationary\nreformationist\nreformative\nreformatively\nreformatness\nreformatory\nreformed\nreformedly\nreformer\nreformeress\nreformingly\nreformism\nreformist\nreformistic\nreformproof\nreformulate\nreformulation\nreforsake\nrefortification\nrefortify\nreforward\nrefound\nrefoundation\nrefounder\nrefract\nrefractable\nrefracted\nrefractedly\nrefractedness\nrefractile\nrefractility\nrefracting\nrefraction\nrefractional\nrefractionate\nrefractionist\nrefractive\nrefractively\nrefractiveness\nrefractivity\nrefractometer\nrefractometric\nrefractometry\nrefractor\nrefractorily\nrefractoriness\nrefractory\nrefracture\nrefragability\nrefragable\nrefragableness\nrefrain\nrefrainer\nrefrainment\nreframe\nrefrangent\nrefrangibility\nrefrangible\nrefrangibleness\nrefreeze\nrefrenation\nrefrenzy\nrefresh\nrefreshant\nrefreshen\nrefreshener\nrefresher\nrefreshful\nrefreshfully\nrefreshing\nrefreshingly\nrefreshingness\nrefreshment\nrefrigerant\nrefrigerate\nrefrigerating\nrefrigeration\nrefrigerative\nrefrigerator\nrefrigeratory\nrefrighten\nrefringence\nrefringency\nrefringent\nrefront\nrefrustrate\nreft\nrefuel\nrefueling\nrefuge\nrefugee\nrefugeeism\nrefugeeship\nrefulge\nrefulgence\nrefulgency\nrefulgent\nrefulgently\nrefulgentness\nrefunction\nrefund\nrefunder\nrefundment\nrefurbish\nrefurbishment\nrefurl\nrefurnish\nrefurnishment\nrefusable\nrefusal\nrefuse\nrefuser\nrefusing\nrefusingly\nrefusion\nrefusive\nrefutability\nrefutable\nrefutably\nrefutal\nrefutation\nrefutative\nrefutatory\nrefute\nrefuter\nreg\nregain\nregainable\nregainer\nregainment\nregal\nregale\nRegalecidae\nRegalecus\nregalement\nregaler\nregalia\nregalian\nregalism\nregalist\nregality\nregalize\nregallop\nregally\nregalness\nregalvanization\nregalvanize\nregard\nregardable\nregardance\nregardancy\nregardant\nregarder\nregardful\nregardfully\nregardfulness\nregarding\nregardless\nregardlessly\nregardlessness\nregarment\nregarnish\nregarrison\nregather\nregatta\nregauge\nregelate\nregelation\nregency\nregeneracy\nregenerance\nregenerant\nregenerate\nregenerateness\nregeneration\nregenerative\nregeneratively\nregenerator\nregeneratory\nregeneratress\nregeneratrix\nregenesis\nregent\nregental\nregentess\nregentship\nregerminate\nregermination\nreges\nreget\nRegga\nReggie\nregia\nregicidal\nregicide\nregicidism\nregift\nregifuge\nregild\nregill\nregime\nregimen\nregimenal\nregiment\nregimental\nregimentaled\nregimentalled\nregimentally\nregimentals\nregimentary\nregimentation\nregiminal\nregin\nreginal\nReginald\nregion\nregional\nregionalism\nregionalist\nregionalistic\nregionalization\nregionalize\nregionally\nregionary\nregioned\nregister\nregistered\nregisterer\nregistership\nregistrability\nregistrable\nregistral\nregistrant\nregistrar\nregistrarship\nregistrary\nregistrate\nregistration\nregistrational\nregistrationist\nregistrator\nregistrer\nregistry\nregive\nregladden\nreglair\nreglaze\nregle\nreglement\nreglementary\nreglementation\nreglementist\nreglet\nreglorified\nregloss\nreglove\nreglow\nreglue\nregma\nregmacarp\nregnal\nregnancy\nregnant\nregnerable\nregolith\nregorge\nregovern\nregradation\nregrade\nregraduate\nregraduation\nregraft\nregrant\nregrasp\nregrass\nregrate\nregrater\nregratification\nregratify\nregrating\nregratingly\nregrator\nregratress\nregravel\nregrede\nregreen\nregreet\nregress\nregression\nregressionist\nregressive\nregressively\nregressiveness\nregressivity\nregressor\nregret\nregretful\nregretfully\nregretfulness\nregretless\nregrettable\nregrettableness\nregrettably\nregretter\nregrettingly\nregrind\nregrinder\nregrip\nregroup\nregroupment\nregrow\nregrowth\nreguarantee\nreguard\nreguardant\nreguide\nregula\nregulable\nregular\nRegulares\nRegularia\nregularity\nregularization\nregularize\nregularizer\nregularly\nregularness\nregulatable\nregulate\nregulated\nregulation\nregulationist\nregulative\nregulatively\nregulator\nregulatorship\nregulatory\nregulatress\nregulatris\nreguli\nreguline\nregulize\nRegulus\nregulus\nregur\nregurge\nregurgitant\nregurgitate\nregurgitation\nregush\nreh\nrehabilitate\nrehabilitation\nrehabilitative\nrehair\nrehale\nrehallow\nrehammer\nrehandicap\nrehandle\nrehandler\nrehandling\nrehang\nrehappen\nreharden\nreharm\nreharmonize\nreharness\nreharrow\nreharvest\nrehash\nrehaul\nrehazard\nrehead\nreheal\nreheap\nrehear\nrehearing\nrehearsal\nrehearse\nrehearser\nrehearten\nreheat\nreheater\nReheboth\nrehedge\nreheel\nreheighten\nRehoboam\nRehoboth\nRehobothan\nrehoe\nrehoist\nrehollow\nrehonor\nrehonour\nrehood\nrehook\nrehoop\nrehouse\nrehumanize\nrehumble\nrehumiliate\nrehumiliation\nrehung\nrehybridize\nrehydrate\nrehydration\nrehypothecate\nrehypothecation\nrehypothecator\nreichsgulden\nReichsland\nReichslander\nreichsmark\nreichspfennig\nreichstaler\nReid\nreidentification\nreidentify\nreif\nreification\nreify\nreign\nreignite\nreignition\nreignore\nreillume\nreilluminate\nreillumination\nreillumine\nreillustrate\nreillustration\nreim\nreimage\nreimagination\nreimagine\nreimbark\nreimbarkation\nreimbibe\nreimbody\nreimbursable\nreimburse\nreimbursement\nreimburser\nreimbush\nreimbushment\nreimkennar\nreimmerge\nreimmerse\nreimmersion\nreimmigrant\nreimmigration\nreimpact\nreimpark\nreimpart\nreimpatriate\nreimpatriation\nreimpel\nreimplant\nreimplantation\nreimply\nreimport\nreimportation\nreimportune\nreimpose\nreimposition\nreimposure\nreimpregnate\nreimpress\nreimpression\nreimprint\nreimprison\nreimprisonment\nreimprove\nreimprovement\nreimpulse\nrein\nreina\nreinability\nreinaugurate\nreinauguration\nreincapable\nreincarnadine\nreincarnate\nreincarnation\nreincarnationism\nreincarnationist\nreincense\nreincentive\nreincidence\nreincidency\nreincite\nreinclination\nreincline\nreinclude\nreinclusion\nreincorporate\nreincorporation\nreincrease\nreincrudate\nreincrudation\nreinculcate\nreincur\nreindebted\nreindebtedness\nreindeer\nreindependence\nreindicate\nreindication\nreindict\nreindictment\nreindifferent\nreindorse\nreinduce\nreinducement\nreindue\nreindulge\nreindulgence\nReiner\nreinette\nreinfect\nreinfection\nreinfectious\nreinfer\nreinfest\nreinfestation\nreinflame\nreinflate\nreinflation\nreinflict\nreinfliction\nreinfluence\nreinforce\nreinforcement\nreinforcer\nreinform\nreinfuse\nreinfusion\nreingraft\nreingratiate\nreingress\nreinhabit\nreinhabitation\nReinhard\nreinherit\nreinitiate\nreinitiation\nreinject\nreinjure\nreinless\nreinoculate\nreinoculation\nreinquire\nreinquiry\nreins\nreinsane\nreinsanity\nreinscribe\nreinsert\nreinsertion\nreinsist\nreinsman\nreinspect\nreinspection\nreinspector\nreinsphere\nreinspiration\nreinspire\nreinspirit\nreinstall\nreinstallation\nreinstallment\nreinstalment\nreinstate\nreinstatement\nreinstation\nreinstator\nreinstauration\nreinstil\nreinstill\nreinstitute\nreinstitution\nreinstruct\nreinstruction\nreinsult\nreinsurance\nreinsure\nreinsurer\nreintegrate\nreintegration\nreintend\nreinter\nreintercede\nreintercession\nreinterchange\nreinterest\nreinterfere\nreinterference\nreinterment\nreinterpret\nreinterpretation\nreinterrogate\nreinterrogation\nreinterrupt\nreinterruption\nreintervene\nreintervention\nreinterview\nreinthrone\nreintimate\nreintimation\nreintitule\nreintrench\nreintroduce\nreintroduction\nreintrude\nreintrusion\nreintuition\nreintuitive\nreinvade\nreinvasion\nreinvent\nreinvention\nreinventor\nreinversion\nreinvert\nreinvest\nreinvestigate\nreinvestigation\nreinvestiture\nreinvestment\nreinvigorate\nreinvigoration\nreinvitation\nreinvite\nreinvoice\nreinvolve\nReinwardtia\nreirrigate\nreirrigation\nreis\nreisolation\nreissuable\nreissue\nreissuement\nreissuer\nreit\nreitbok\nreitbuck\nreitemize\nreiter\nreiterable\nreiterance\nreiterant\nreiterate\nreiterated\nreiteratedly\nreiteratedness\nreiteration\nreiterative\nreiteratively\nreiver\nrejail\nRejang\nreject\nrejectable\nrejectableness\nrejectage\nrejectamenta\nrejecter\nrejectingly\nrejection\nrejective\nrejectment\nrejector\nrejerk\nrejoice\nrejoiceful\nrejoicement\nrejoicer\nrejoicing\nrejoicingly\nrejoin\nrejoinder\nrejolt\nrejourney\nrejudge\nrejumble\nrejunction\nrejustification\nrejustify\nrejuvenant\nrejuvenate\nrejuvenation\nrejuvenative\nrejuvenator\nrejuvenesce\nrejuvenescence\nrejuvenescent\nrejuvenize\nReki\nrekick\nrekill\nrekindle\nrekindlement\nrekindler\nreking\nrekiss\nreknit\nreknow\nrel\nrelabel\nrelace\nrelacquer\nrelade\nreladen\nrelais\nrelament\nrelamp\nreland\nrelap\nrelapper\nrelapsable\nrelapse\nrelapseproof\nrelapser\nrelapsing\nrelast\nrelaster\nrelata\nrelatability\nrelatable\nrelatch\nrelate\nrelated\nrelatedness\nrelater\nrelatinization\nrelation\nrelational\nrelationality\nrelationally\nrelationary\nrelationism\nrelationist\nrelationless\nrelationship\nrelatival\nrelative\nrelatively\nrelativeness\nrelativism\nrelativist\nrelativistic\nrelativity\nrelativization\nrelativize\nrelator\nrelatrix\nrelatum\nrelaunch\nrelax\nrelaxable\nrelaxant\nrelaxation\nrelaxative\nrelaxatory\nrelaxed\nrelaxedly\nrelaxedness\nrelaxer\nrelay\nrelayman\nrelbun\nrelead\nreleap\nrelearn\nreleasable\nrelease\nreleasee\nreleasement\nreleaser\nreleasor\nreleather\nrelection\nrelegable\nrelegate\nrelegation\nrelend\nrelent\nrelenting\nrelentingly\nrelentless\nrelentlessly\nrelentlessness\nrelentment\nrelessee\nrelessor\nrelet\nreletter\nrelevance\nrelevancy\nrelevant\nrelevantly\nrelevate\nrelevation\nrelevator\nrelevel\nrelevy\nreliability\nreliable\nreliableness\nreliably\nreliance\nreliant\nreliantly\nreliberate\nrelic\nrelicary\nrelicense\nrelick\nreliclike\nrelicmonger\nrelict\nrelicted\nreliction\nrelief\nreliefless\nrelier\nrelievable\nrelieve\nrelieved\nrelievedly\nreliever\nrelieving\nrelievingly\nrelievo\nrelift\nreligate\nreligation\nrelight\nrelightable\nrelighten\nrelightener\nrelighter\nreligion\nreligionary\nreligionate\nreligioner\nreligionism\nreligionist\nreligionistic\nreligionize\nreligionless\nreligiose\nreligiosity\nreligious\nreligiously\nreligiousness\nrelime\nrelimit\nrelimitation\nreline\nreliner\nrelink\nrelinquent\nrelinquish\nrelinquisher\nrelinquishment\nreliquaire\nreliquary\nreliquefy\nreliquiae\nreliquian\nreliquidate\nreliquidation\nreliquism\nrelish\nrelishable\nrelisher\nrelishing\nrelishingly\nrelishsome\nrelishy\nrelist\nrelisten\nrelitigate\nrelive\nRellyan\nRellyanism\nRellyanite\nreload\nreloan\nrelocable\nrelocate\nrelocation\nrelocator\nrelock\nrelodge\nrelook\nrelose\nrelost\nrelot\nrelove\nrelower\nrelucent\nreluct\nreluctance\nreluctancy\nreluctant\nreluctantly\nreluctate\nreluctation\nreluctivity\nrelume\nrelumine\nrely\nremade\nremagnetization\nremagnetize\nremagnification\nremagnify\nremail\nremain\nremainder\nremainderman\nremaindership\nremainer\nremains\nremaintain\nremaintenance\nremake\nremaker\nreman\nremanage\nremanagement\nremanation\nremancipate\nremancipation\nremand\nremandment\nremanence\nremanency\nremanent\nremanet\nremanipulate\nremanipulation\nremantle\nremanufacture\nremanure\nremap\nremarch\nremargin\nremark\nremarkability\nremarkable\nremarkableness\nremarkably\nremarkedly\nremarker\nremarket\nremarque\nremarriage\nremarry\nremarshal\nremask\nremass\nremast\nremasticate\nremastication\nrematch\nrematerialize\nremble\nRembrandt\nRembrandtesque\nRembrandtish\nRembrandtism\nremeant\nremeasure\nremeasurement\nremede\nremediable\nremediableness\nremediably\nremedial\nremedially\nremediation\nremediless\nremedilessly\nremedilessness\nremeditate\nremeditation\nremedy\nremeet\nremelt\nremember\nrememberability\nrememberable\nrememberably\nrememberer\nremembrance\nremembrancer\nremembrancership\nrememorize\nremenace\nremend\nremerge\nremetal\nremex\nRemi\nremica\nremicate\nremication\nremicle\nremiform\nremigate\nremigation\nremiges\nremigial\nremigrant\nremigrate\nremigration\nRemijia\nremilitarization\nremilitarize\nremill\nremimic\nremind\nremindal\nreminder\nremindful\nremindingly\nremineralization\nremineralize\nremingle\nreminisce\nreminiscence\nreminiscenceful\nreminiscencer\nreminiscency\nreminiscent\nreminiscential\nreminiscentially\nreminiscently\nreminiscer\nreminiscitory\nremint\nremiped\nremirror\nremise\nremisrepresent\nremisrepresentation\nremiss\nremissful\nremissibility\nremissible\nremissibleness\nremission\nremissive\nremissively\nremissiveness\nremissly\nremissness\nremissory\nremisunderstand\nremit\nremitment\nremittable\nremittal\nremittance\nremittancer\nremittee\nremittence\nremittency\nremittent\nremittently\nremitter\nremittitur\nremittor\nremix\nremixture\nremnant\nremnantal\nremobilization\nremobilize\nRemoboth\nremock\nremodel\nremodeler\nremodeller\nremodelment\nremodification\nremodify\nremolade\nremold\nremollient\nremonetization\nremonetize\nremonstrance\nremonstrant\nremonstrantly\nremonstrate\nremonstrating\nremonstratingly\nremonstration\nremonstrative\nremonstratively\nremonstrator\nremonstratory\nremontado\nremontant\nremontoir\nremop\nremora\nremord\nremorse\nremorseful\nremorsefully\nremorsefulness\nremorseless\nremorselessly\nremorselessness\nremorseproof\nremortgage\nremote\nremotely\nremoteness\nremotion\nremotive\nremould\nremount\nremovability\nremovable\nremovableness\nremovably\nremoval\nremove\nremoved\nremovedly\nremovedness\nremovement\nremover\nremoving\nremultiplication\nremultiply\nremunerability\nremunerable\nremunerably\nremunerate\nremuneration\nremunerative\nremuneratively\nremunerativeness\nremunerator\nremuneratory\nremurmur\nRemus\nremuster\nremutation\nrenable\nrenably\nrenail\nRenaissance\nrenaissance\nRenaissancist\nRenaissant\nrenal\nrename\nRenardine\nrenascence\nrenascency\nrenascent\nrenascible\nrenascibleness\nrenature\nrenavigate\nrenavigation\nrencontre\nrencounter\nrenculus\nrend\nrender\nrenderable\nrenderer\nrendering\nrenderset\nrendezvous\nrendibility\nrendible\nrendition\nrendlewood\nrendrock\nrendzina\nreneague\nRenealmia\nrenecessitate\nreneg\nrenegade\nrenegadism\nrenegado\nrenegation\nrenege\nreneger\nreneglect\nrenegotiable\nrenegotiate\nrenegotiation\nrenegotiations\nrenegue\nrenerve\nrenes\nrenet\nrenew\nrenewability\nrenewable\nrenewably\nrenewal\nrenewedly\nrenewedness\nrenewer\nrenewment\nrenicardiac\nrenickel\nrenidification\nrenidify\nreniform\nRenilla\nRenillidae\nrenin\nrenipericardial\nreniportal\nrenipuncture\nrenish\nrenishly\nrenitence\nrenitency\nrenitent\nrenk\nrenky\nrenne\nrennet\nrenneting\nrennin\nrenniogen\nrenocutaneous\nrenogastric\nrenography\nrenointestinal\nrenominate\nrenomination\nrenopericardial\nrenopulmonary\nrenormalize\nrenotation\nrenotice\nrenotification\nrenotify\nrenounce\nrenounceable\nrenouncement\nrenouncer\nrenourish\nrenovate\nrenovater\nrenovatingly\nrenovation\nrenovative\nrenovator\nrenovatory\nrenovize\nrenown\nrenowned\nrenownedly\nrenownedness\nrenowner\nrenownful\nrenownless\nrensselaerite\nrent\nrentability\nrentable\nrentage\nrental\nrentaler\nrentaller\nrented\nrentee\nrenter\nrentless\nrentrant\nrentrayeuse\nRenu\nrenumber\nrenumerate\nrenumeration\nrenunciable\nrenunciance\nrenunciant\nrenunciate\nrenunciation\nrenunciative\nrenunciator\nrenunciatory\nrenunculus\nrenverse\nrenvoi\nrenvoy\nreobject\nreobjectivization\nreobjectivize\nreobligate\nreobligation\nreoblige\nreobscure\nreobservation\nreobserve\nreobtain\nreobtainable\nreobtainment\nreoccasion\nreoccupation\nreoccupy\nreoccur\nreoccurrence\nreoffend\nreoffense\nreoffer\nreoffset\nreoil\nreometer\nreomission\nreomit\nreopen\nreoperate\nreoperation\nreoppose\nreopposition\nreoppress\nreoppression\nreorchestrate\nreordain\nreorder\nreordinate\nreordination\nreorganization\nreorganizationist\nreorganize\nreorganizer\nreorient\nreorientation\nreornament\nreoutfit\nreoutline\nreoutput\nreoutrage\nreovercharge\nreoverflow\nreovertake\nreoverwork\nreown\nreoxidation\nreoxidize\nreoxygenate\nreoxygenize\nrep\nrepace\nrepacification\nrepacify\nrepack\nrepackage\nrepacker\nrepaganization\nrepaganize\nrepaganizer\nrepage\nrepaint\nrepair\nrepairable\nrepairableness\nrepairer\nrepairman\nrepale\nrepand\nrepandly\nrepandodentate\nrepandodenticulate\nrepandolobate\nrepandous\nrepandousness\nrepanel\nrepaper\nreparability\nreparable\nreparably\nreparagraph\nreparate\nreparation\nreparative\nreparatory\nrepark\nrepartable\nrepartake\nrepartee\nreparticipate\nreparticipation\nrepartition\nrepartitionable\nrepass\nrepassable\nrepassage\nrepasser\nrepast\nrepaste\nrepasture\nrepatch\nrepatency\nrepatent\nrepatriable\nrepatriate\nrepatriation\nrepatronize\nrepattern\nrepave\nrepavement\nrepawn\nrepay\nrepayable\nrepayal\nrepaying\nrepayment\nrepeal\nrepealability\nrepealable\nrepealableness\nrepealer\nrepealist\nrepealless\nrepeat\nrepeatability\nrepeatable\nrepeatal\nrepeated\nrepeatedly\nrepeater\nrepeg\nrepel\nrepellance\nrepellant\nrepellence\nrepellency\nrepellent\nrepellently\nrepeller\nrepelling\nrepellingly\nrepellingness\nrepen\nrepenetrate\nrepension\nrepent\nrepentable\nrepentance\nrepentant\nrepentantly\nrepenter\nrepentingly\nrepeople\nreperceive\nrepercept\nreperception\nrepercolation\nrepercuss\nrepercussion\nrepercussive\nrepercussively\nrepercussiveness\nrepercutient\nreperform\nreperformance\nreperfume\nreperible\nrepermission\nrepermit\nreperplex\nrepersonalization\nrepersonalize\nrepersuade\nrepersuasion\nrepertoire\nrepertorial\nrepertorily\nrepertorium\nrepertory\nreperusal\nreperuse\nrepetend\nrepetition\nrepetitional\nrepetitionary\nrepetitious\nrepetitiously\nrepetitiousness\nrepetitive\nrepetitively\nrepetitiveness\nrepetitory\nrepetticoat\nrepew\nRephael\nrephase\nrephonate\nrephosphorization\nrephosphorize\nrephotograph\nrephrase\nrepic\nrepick\nrepicture\nrepiece\nrepile\nrepin\nrepine\nrepineful\nrepinement\nrepiner\nrepiningly\nrepipe\nrepique\nrepitch\nrepkie\nreplace\nreplaceability\nreplaceable\nreplacement\nreplacer\nreplait\nreplan\nreplane\nreplant\nreplantable\nreplantation\nreplanter\nreplaster\nreplate\nreplay\nreplead\nrepleader\nrepleat\nrepledge\nrepledger\nreplenish\nreplenisher\nreplenishingly\nreplenishment\nreplete\nrepletely\nrepleteness\nrepletion\nrepletive\nrepletively\nrepletory\nrepleviable\nreplevin\nreplevisable\nreplevisor\nreplevy\nrepliant\nreplica\nreplicate\nreplicated\nreplicatile\nreplication\nreplicative\nreplicatively\nreplicatory\nreplier\nreplight\nreplod\nreplot\nreplotment\nreplotter\nreplough\nreplow\nreplum\nreplume\nreplunder\nreplunge\nreply\nreplyingly\nrepocket\nrepoint\nrepolish\nrepoll\nrepollute\nrepolon\nrepolymerization\nrepolymerize\nreponder\nrepone\nrepope\nrepopulate\nrepopulation\nreport\nreportable\nreportage\nreportedly\nreporter\nreporteress\nreporterism\nreportership\nreportingly\nreportion\nreportorial\nreportorially\nreposal\nrepose\nreposed\nreposedly\nreposedness\nreposeful\nreposefully\nreposefulness\nreposer\nreposit\nrepositary\nreposition\nrepositor\nrepository\nrepossess\nrepossession\nrepossessor\nrepost\nrepostpone\nrepot\nrepound\nrepour\nrepowder\nrepp\nrepped\nrepractice\nrepray\nrepreach\nreprecipitate\nreprecipitation\nrepredict\nreprefer\nreprehend\nreprehendable\nreprehendatory\nreprehender\nreprehensibility\nreprehensible\nreprehensibleness\nreprehensibly\nreprehension\nreprehensive\nreprehensively\nreprehensory\nrepreparation\nreprepare\nreprescribe\nrepresent\nrepresentability\nrepresentable\nrepresentamen\nrepresentant\nrepresentation\nrepresentational\nrepresentationalism\nrepresentationalist\nrepresentationary\nrepresentationism\nrepresentationist\nrepresentative\nrepresentatively\nrepresentativeness\nrepresentativeship\nrepresentativity\nrepresenter\nrepresentment\nrepreside\nrepress\nrepressed\nrepressedly\nrepresser\nrepressible\nrepressibly\nrepression\nrepressionary\nrepressionist\nrepressive\nrepressively\nrepressiveness\nrepressment\nrepressor\nrepressory\nrepressure\nreprice\nreprieval\nreprieve\nrepriever\nreprimand\nreprimander\nreprimanding\nreprimandingly\nreprime\nreprimer\nreprint\nreprinter\nreprisal\nreprisalist\nreprise\nrepristinate\nrepristination\nreprivatization\nreprivatize\nreprivilege\nreproach\nreproachable\nreproachableness\nreproachably\nreproacher\nreproachful\nreproachfully\nreproachfulness\nreproachingly\nreproachless\nreproachlessness\nreprobacy\nreprobance\nreprobate\nreprobateness\nreprobater\nreprobation\nreprobationary\nreprobationer\nreprobative\nreprobatively\nreprobator\nreprobatory\nreproceed\nreprocess\nreproclaim\nreproclamation\nreprocurable\nreprocure\nreproduce\nreproduceable\nreproducer\nreproducibility\nreproducible\nreproduction\nreproductionist\nreproductive\nreproductively\nreproductiveness\nreproductivity\nreproductory\nreprofane\nreprofess\nreprohibit\nrepromise\nrepromulgate\nrepromulgation\nrepronounce\nrepronunciation\nreproof\nreproofless\nrepropagate\nrepropitiate\nrepropitiation\nreproportion\nreproposal\nrepropose\nreprosecute\nreprosecution\nreprosper\nreprotect\nreprotection\nreprotest\nreprovable\nreprovableness\nreprovably\nreproval\nreprove\nreprover\nreprovide\nreprovingly\nreprovision\nreprovocation\nreprovoke\nreprune\nreps\nreptant\nreptatorial\nreptatory\nreptile\nreptiledom\nreptilelike\nreptilferous\nReptilia\nreptilian\nreptiliary\nreptiliform\nreptilious\nreptiliousness\nreptilism\nreptility\nreptilivorous\nreptiloid\nrepublic\nrepublican\nrepublicanism\nrepublicanization\nrepublicanize\nrepublicanizer\nrepublication\nrepublish\nrepublisher\nrepublishment\nrepuddle\nrepudiable\nrepudiate\nrepudiation\nrepudiationist\nrepudiative\nrepudiator\nrepudiatory\nrepuff\nrepugn\nrepugnable\nrepugnance\nrepugnancy\nrepugnant\nrepugnantly\nrepugnantness\nrepugnate\nrepugnatorial\nrepugner\nrepullulate\nrepullulation\nrepullulative\nrepullulescent\nrepulpit\nrepulse\nrepulseless\nrepulseproof\nrepulser\nrepulsion\nrepulsive\nrepulsively\nrepulsiveness\nrepulsory\nrepulverize\nrepump\nrepunish\nrepunishment\nrepurchase\nrepurchaser\nrepurge\nrepurification\nrepurify\nrepurple\nrepurpose\nrepursue\nrepursuit\nreputability\nreputable\nreputableness\nreputably\nreputation\nreputationless\nreputative\nreputatively\nrepute\nreputed\nreputedly\nreputeless\nrequalification\nrequalify\nrequarantine\nrequeen\nrequench\nrequest\nrequester\nrequestion\nrequiem\nRequienia\nrequiescence\nrequin\nrequirable\nrequire\nrequirement\nrequirer\nrequisite\nrequisitely\nrequisiteness\nrequisition\nrequisitionary\nrequisitioner\nrequisitionist\nrequisitor\nrequisitorial\nrequisitory\nrequit\nrequitable\nrequital\nrequitative\nrequite\nrequiteful\nrequitement\nrequiter\nrequiz\nrequotation\nrequote\nrerack\nreracker\nreradiation\nrerail\nreraise\nrerake\nrerank\nrerate\nreread\nrereader\nrerebrace\nreredos\nreree\nrereel\nrereeve\nrerefief\nreregister\nreregistration\nreregulate\nreregulation\nrereign\nreremouse\nrerent\nrerental\nreresupper\nrerig\nrering\nrerise\nrerival\nrerivet\nrerob\nrerobe\nreroll\nreroof\nreroot\nrerope\nreroute\nrerow\nreroyalize\nrerub\nrerummage\nrerun\nresaca\nresack\nresacrifice\nresaddle\nresail\nresalable\nresale\nresalt\nresalutation\nresalute\nresalvage\nresample\nresanctify\nresanction\nresatisfaction\nresatisfy\nresaw\nresawer\nresawyer\nresay\nresazurin\nrescan\nreschedule\nrescind\nrescindable\nrescinder\nrescindment\nrescissible\nrescission\nrescissory\nrescore\nrescramble\nrescratch\nrescribe\nrescript\nrescription\nrescriptive\nrescriptively\nrescrub\nrescuable\nrescue\nrescueless\nrescuer\nreseal\nreseam\nresearch\nresearcher\nresearchful\nresearchist\nreseat\nresecrete\nresecretion\nresect\nresection\nresectional\nReseda\nreseda\nResedaceae\nresedaceous\nresee\nreseed\nreseek\nresegment\nresegmentation\nreseise\nreseiser\nreseize\nreseizer\nreseizure\nreselect\nreselection\nreself\nresell\nreseller\nresemblable\nresemblance\nresemblant\nresemble\nresembler\nresemblingly\nreseminate\nresend\nresene\nresensation\nresensitization\nresensitize\nresent\nresentationally\nresentence\nresenter\nresentful\nresentfullness\nresentfully\nresentience\nresentingly\nresentless\nresentment\nresepulcher\nresequent\nresequester\nresequestration\nreserene\nreservable\nreserval\nreservation\nreservationist\nreservatory\nreserve\nreserved\nreservedly\nreservedness\nreservee\nreserveful\nreserveless\nreserver\nreservery\nreservice\nreservist\nreservoir\nreservor\nreset\nresettable\nresetter\nresettle\nresettlement\nresever\nresew\nresex\nresh\nreshake\nreshape\nreshare\nresharpen\nreshave\nreshear\nreshearer\nresheathe\nreshelve\nreshift\nreshine\nreshingle\nreship\nreshipment\nreshipper\nreshoe\nreshoot\nreshoulder\nreshovel\nreshower\nreshrine\nreshuffle\nreshun\nreshunt\nreshut\nreshuttle\nresiccate\nreside\nresidence\nresidencer\nresidency\nresident\nresidental\nresidenter\nresidential\nresidentiality\nresidentially\nresidentiary\nresidentiaryship\nresidentship\nresider\nresidua\nresidual\nresiduary\nresiduation\nresidue\nresiduent\nresiduous\nresiduum\nresift\nresigh\nresign\nresignal\nresignatary\nresignation\nresignationism\nresigned\nresignedly\nresignedness\nresignee\nresigner\nresignful\nresignment\nresile\nresilement\nresilial\nresiliate\nresilience\nresiliency\nresilient\nresilifer\nresiliometer\nresilition\nresilium\nresilver\nresin\nresina\nresinaceous\nresinate\nresinbush\nresiner\nresinfiable\nresing\nresinic\nresiniferous\nresinification\nresinifluous\nresiniform\nresinify\nresinize\nresink\nresinlike\nresinoelectric\nresinoextractive\nresinogenous\nresinoid\nresinol\nresinolic\nresinophore\nresinosis\nresinous\nresinously\nresinousness\nresinovitreous\nresiny\nresipiscence\nresipiscent\nresist\nresistability\nresistable\nresistableness\nresistance\nresistant\nresistantly\nresister\nresistful\nresistibility\nresistible\nresistibleness\nresistibly\nresisting\nresistingly\nresistive\nresistively\nresistiveness\nresistivity\nresistless\nresistlessly\nresistlessness\nresistor\nresitting\nresize\nresizer\nresketch\nreskin\nreslash\nreslate\nreslay\nreslide\nreslot\nresmell\nresmelt\nresmile\nresmooth\nresnap\nresnatch\nresnatron\nresnub\nresoak\nresoap\nresoften\nresoil\nresojourn\nresolder\nresole\nresolemnize\nresolicit\nresolidification\nresolidify\nresolubility\nresoluble\nresolubleness\nresolute\nresolutely\nresoluteness\nresolution\nresolutioner\nresolutionist\nresolutory\nresolvability\nresolvable\nresolvableness\nresolvancy\nresolve\nresolved\nresolvedly\nresolvedness\nresolvent\nresolver\nresolvible\nresonance\nresonancy\nresonant\nresonantly\nresonate\nresonator\nresonatory\nresoothe\nresorb\nresorbence\nresorbent\nresorcin\nresorcine\nresorcinism\nresorcinol\nresorcinolphthalein\nresorcinum\nresorcylic\nresorption\nresorptive\nresort\nresorter\nresorufin\nresought\nresound\nresounder\nresounding\nresoundingly\nresource\nresourceful\nresourcefully\nresourcefulness\nresourceless\nresourcelessness\nresoutive\nresow\nresp\nrespace\nrespade\nrespan\nrespangle\nresparkle\nrespeak\nrespect\nrespectability\nrespectabilize\nrespectable\nrespectableness\nrespectably\nrespectant\nrespecter\nrespectful\nrespectfully\nrespectfulness\nrespecting\nrespective\nrespectively\nrespectiveness\nrespectless\nrespectlessly\nrespectlessness\nrespectworthy\nrespell\nrespersive\nrespin\nrespirability\nrespirable\nrespirableness\nrespiration\nrespirational\nrespirative\nrespirator\nrespiratored\nrespiratorium\nrespiratory\nrespire\nrespirit\nrespirometer\nrespite\nrespiteless\nresplend\nresplendence\nresplendency\nresplendent\nresplendently\nresplice\nresplit\nrespoke\nrespond\nresponde\nrespondence\nrespondency\nrespondent\nrespondentia\nresponder\nresponsal\nresponsary\nresponse\nresponseless\nresponser\nresponsibility\nresponsible\nresponsibleness\nresponsibly\nresponsion\nresponsive\nresponsively\nresponsiveness\nresponsivity\nresponsorial\nresponsory\nrespot\nrespray\nrespread\nrespring\nresprout\nrespue\nresquare\nresqueak\nressaidar\nressala\nressaldar\nressaut\nrest\nrestable\nrestack\nrestaff\nrestain\nrestainable\nrestake\nrestamp\nrestandardization\nrestandardize\nrestant\nrestart\nrestate\nrestatement\nrestaur\nrestaurant\nrestaurate\nrestaurateur\nrestauration\nrestbalk\nresteal\nresteel\nresteep\nrestem\nrestep\nrester\nresterilize\nrestes\nrestful\nrestfully\nrestfulness\nrestharrow\nresthouse\nRestiaceae\nrestiaceous\nrestiad\nrestibrachium\nrestiff\nrestiffen\nrestiffener\nrestiffness\nrestifle\nrestiform\nrestigmatize\nrestimulate\nrestimulation\nresting\nrestingly\nRestio\nRestionaceae\nrestionaceous\nrestipulate\nrestipulation\nrestipulatory\nrestir\nrestis\nrestitch\nrestitute\nrestitution\nrestitutionism\nrestitutionist\nrestitutive\nrestitutor\nrestitutory\nrestive\nrestively\nrestiveness\nrestless\nrestlessly\nrestlessness\nrestock\nrestopper\nrestorable\nrestorableness\nrestoral\nrestoration\nrestorationer\nrestorationism\nrestorationist\nrestorative\nrestoratively\nrestorativeness\nrestorator\nrestoratory\nrestore\nrestorer\nrestow\nrestowal\nrestproof\nrestraighten\nrestrain\nrestrainability\nrestrained\nrestrainedly\nrestrainedness\nrestrainer\nrestraining\nrestrainingly\nrestraint\nrestraintful\nrestrap\nrestratification\nrestream\nrestrengthen\nrestress\nrestretch\nrestrict\nrestricted\nrestrictedly\nrestrictedness\nrestriction\nrestrictionary\nrestrictionist\nrestrictive\nrestrictively\nrestrictiveness\nrestrike\nrestring\nrestringe\nrestringency\nrestringent\nrestrip\nrestrive\nrestroke\nrestudy\nrestuff\nrestward\nrestwards\nresty\nrestyle\nresubject\nresubjection\nresubjugate\nresublimation\nresublime\nresubmerge\nresubmission\nresubmit\nresubordinate\nresubscribe\nresubscriber\nresubscription\nresubstitute\nresubstitution\nresucceed\nresuck\nresudation\nresue\nresuffer\nresufferance\nresuggest\nresuggestion\nresuing\nresuit\nresult\nresultance\nresultancy\nresultant\nresultantly\nresultative\nresultful\nresultfully\nresulting\nresultingly\nresultive\nresultless\nresultlessly\nresultlessness\nresumability\nresumable\nresume\nresumer\nresummon\nresummons\nresumption\nresumptive\nresumptively\nresun\nresup\nresuperheat\nresupervise\nresupinate\nresupinated\nresupination\nresupine\nresupply\nresupport\nresuppose\nresupposition\nresuppress\nresuppression\nresurface\nresurge\nresurgence\nresurgency\nresurgent\nresurprise\nresurrect\nresurrectible\nresurrection\nresurrectional\nresurrectionary\nresurrectioner\nresurrectioning\nresurrectionism\nresurrectionist\nresurrectionize\nresurrective\nresurrector\nresurrender\nresurround\nresurvey\nresuscitable\nresuscitant\nresuscitate\nresuscitation\nresuscitative\nresuscitator\nresuspect\nresuspend\nresuspension\nreswage\nreswallow\nresward\nreswarm\nreswear\nresweat\nresweep\nreswell\nreswill\nreswim\nresyllabification\nresymbolization\nresymbolize\nresynthesis\nresynthesize\nret\nretable\nretack\nretackle\nretag\nretail\nretailer\nretailment\nretailor\nretain\nretainability\nretainable\nretainableness\nretainal\nretainder\nretainer\nretainership\nretaining\nretake\nretaker\nretaliate\nretaliation\nretaliationist\nretaliative\nretaliator\nretaliatory\nretalk\nretama\nretame\nretan\nretanner\nretape\nretard\nretardance\nretardant\nretardate\nretardation\nretardative\nretardatory\nretarded\nretardence\nretardent\nretarder\nretarding\nretardingly\nretardive\nretardment\nretardure\nretare\nretariff\nretaste\nretation\nretattle\nretax\nretaxation\nretch\nreteach\nretecious\nretelegraph\nretelephone\nretell\nretelling\nretem\nretemper\nretempt\nretemptation\nretenant\nretender\nretene\nretent\nretention\nretentionist\nretentive\nretentively\nretentiveness\nretentivity\nretentor\nRetepora\nretepore\nReteporidae\nretest\nretexture\nrethank\nrethatch\nrethaw\nrethe\nretheness\nrethicken\nrethink\nrethrash\nrethread\nrethreaten\nrethresh\nrethresher\nrethrill\nrethrive\nrethrone\nrethrow\nrethrust\nrethunder\nretia\nretial\nRetiariae\nretiarian\nretiarius\nretiary\nreticella\nreticello\nreticence\nreticency\nreticent\nreticently\nreticket\nreticle\nreticula\nreticular\nReticularia\nreticularian\nreticularly\nreticulary\nreticulate\nreticulated\nreticulately\nreticulation\nreticulatocoalescent\nreticulatogranulate\nreticulatoramose\nreticulatovenose\nreticule\nreticuled\nreticulin\nreticulitis\nreticulocyte\nreticulocytosis\nreticuloramose\nReticulosa\nreticulose\nreticulovenose\nreticulum\nretie\nretier\nretiform\nretighten\nretile\nretill\nretimber\nretime\nretin\nretina\nretinacular\nretinaculate\nretinaculum\nretinal\nretinalite\nretinasphalt\nretinasphaltum\nretincture\nretinene\nretinerved\nretinian\nretinispora\nretinite\nretinitis\nretinize\nretinker\nretinoblastoma\nretinochorioid\nretinochorioidal\nretinochorioiditis\nretinoid\nretinol\nretinopapilitis\nretinophoral\nretinophore\nretinoscope\nretinoscopic\nretinoscopically\nretinoscopist\nretinoscopy\nRetinospora\nretinue\nretinula\nretinular\nretinule\nretip\nretiracied\nretiracy\nretirade\nretiral\nretire\nretired\nretiredly\nretiredness\nretirement\nretirer\nretiring\nretiringly\nretiringness\nretistene\nretoast\nretold\nretolerate\nretoleration\nretomb\nretonation\nretook\nretool\nretooth\nretoother\nretort\nretortable\nretorted\nretorter\nretortion\nretortive\nretorture\nretoss\nretotal\nretouch\nretoucher\nretouching\nretouchment\nretour\nretourable\nretrace\nretraceable\nretracement\nretrack\nretract\nretractability\nretractable\nretractation\nretracted\nretractibility\nretractible\nretractile\nretractility\nretraction\nretractive\nretractively\nretractiveness\nretractor\nretrad\nretrade\nretradition\nretrahent\nretrain\nretral\nretrally\nretramp\nretrample\nretranquilize\nretranscribe\nretranscription\nretransfer\nretransference\nretransfigure\nretransform\nretransformation\nretransfuse\nretransit\nretranslate\nretranslation\nretransmission\nretransmissive\nretransmit\nretransmute\nretransplant\nretransport\nretransportation\nretravel\nretraverse\nretraxit\nretread\nretreat\nretreatal\nretreatant\nretreater\nretreatful\nretreating\nretreatingness\nretreative\nretreatment\nretree\nretrench\nretrenchable\nretrencher\nretrenchment\nretrial\nretribute\nretribution\nretributive\nretributively\nretributor\nretributory\nretricked\nretrievability\nretrievable\nretrievableness\nretrievably\nretrieval\nretrieve\nretrieveless\nretrievement\nretriever\nretrieverish\nretrim\nretrimmer\nretrip\nretroact\nretroaction\nretroactive\nretroactively\nretroactivity\nretroalveolar\nretroauricular\nretrobronchial\nretrobuccal\nretrobulbar\nretrocaecal\nretrocardiac\nretrocecal\nretrocede\nretrocedence\nretrocedent\nretrocervical\nretrocession\nretrocessional\nretrocessionist\nretrocessive\nretrochoir\nretroclavicular\nretroclusion\nretrocognition\nretrocognitive\nretrocolic\nretroconsciousness\nretrocopulant\nretrocopulation\nretrocostal\nretrocouple\nretrocoupler\nretrocurved\nretrodate\nretrodeviation\nretrodisplacement\nretroduction\nretrodural\nretroesophageal\nretroflected\nretroflection\nretroflex\nretroflexed\nretroflexion\nretroflux\nretroform\nretrofract\nretrofracted\nretrofrontal\nretrogastric\nretrogenerative\nretrogradation\nretrogradatory\nretrograde\nretrogradely\nretrogradient\nretrogradingly\nretrogradism\nretrogradist\nretrogress\nretrogression\nretrogressionist\nretrogressive\nretrogressively\nretrohepatic\nretroinfection\nretroinsular\nretroiridian\nretroject\nretrojection\nretrojugular\nretrolabyrinthine\nretrolaryngeal\nretrolingual\nretrolocation\nretromammary\nretromammillary\nretromandibular\nretromastoid\nretromaxillary\nretromigration\nretromingent\nretromingently\nretromorphosed\nretromorphosis\nretronasal\nretroperitoneal\nretroperitoneally\nretropharyngeal\nretropharyngitis\nretroplacental\nretroplexed\nretroposed\nretroposition\nretropresbyteral\nretropubic\nretropulmonary\nretropulsion\nretropulsive\nretroreception\nretrorectal\nretroreflective\nretrorenal\nretrorse\nretrorsely\nretroserrate\nretroserrulate\nretrospect\nretrospection\nretrospective\nretrospectively\nretrospectiveness\nretrospectivity\nretrosplenic\nretrostalsis\nretrostaltic\nretrosternal\nretrosusception\nretrot\nretrotarsal\nretrotemporal\nretrothyroid\nretrotracheal\nretrotransfer\nretrotransference\nretrotympanic\nretrousse\nretrovaccinate\nretrovaccination\nretrovaccine\nretroverse\nretroversion\nretrovert\nretrovision\nretroxiphoid\nretrude\nretrue\nretrusible\nretrusion\nretrust\nretry\nretted\nretter\nrettery\nretting\nrettory\nretube\nretuck\nretumble\nretumescence\nretune\nreturban\nreturf\nreturfer\nreturn\nreturnability\nreturnable\nreturned\nreturner\nreturnless\nreturnlessly\nretuse\nretwine\nretwist\nretying\nretype\nretzian\nReub\nReuben\nReubenites\nReuchlinian\nReuchlinism\nReuel\nreundercut\nreundergo\nreundertake\nreundulate\nreundulation\nreune\nreunfold\nreunification\nreunify\nreunion\nreunionism\nreunionist\nreunionistic\nreunitable\nreunite\nreunitedly\nreuniter\nreunition\nreunitive\nreunpack\nreuphold\nreupholster\nreuplift\nreurge\nreuse\nreutilization\nreutilize\nreutter\nreutterance\nrev\nrevacate\nrevaccinate\nrevaccination\nrevalenta\nrevalescence\nrevalescent\nrevalidate\nrevalidation\nrevalorization\nrevalorize\nrevaluate\nrevaluation\nrevalue\nrevamp\nrevamper\nrevampment\nrevaporization\nrevaporize\nrevarnish\nrevary\nreve\nreveal\nrevealability\nrevealable\nrevealableness\nrevealed\nrevealedly\nrevealer\nrevealing\nrevealingly\nrevealingness\nrevealment\nrevegetate\nrevegetation\nrevehent\nreveil\nreveille\nrevel\nrevelability\nrevelant\nrevelation\nrevelational\nrevelationer\nrevelationist\nrevelationize\nrevelative\nrevelator\nrevelatory\nreveler\nrevellent\nrevelly\nrevelment\nrevelrout\nrevelry\nrevenant\nrevend\nrevender\nrevendicate\nrevendication\nreveneer\nrevenge\nrevengeable\nrevengeful\nrevengefully\nrevengefulness\nrevengeless\nrevengement\nrevenger\nrevengingly\nrevent\nreventilate\nreventure\nrevenual\nrevenue\nrevenued\nrevenuer\nrever\nreverable\nreverb\nreverbatory\nreverberant\nreverberate\nreverberation\nreverberative\nreverberator\nreverberatory\nreverbrate\nreverdure\nrevere\nrevered\nreverence\nreverencer\nreverend\nreverendly\nreverendship\nreverent\nreverential\nreverentiality\nreverentially\nreverentialness\nreverently\nreverentness\nreverer\nreverie\nreverification\nreverify\nreverist\nrevers\nreversability\nreversable\nreversal\nreverse\nreversed\nreversedly\nreverseful\nreverseless\nreversely\nreversement\nreverser\nreverseways\nreversewise\nreversi\nreversibility\nreversible\nreversibleness\nreversibly\nreversification\nreversifier\nreversify\nreversing\nreversingly\nreversion\nreversionable\nreversional\nreversionally\nreversionary\nreversioner\nreversionist\nreversis\nreversist\nreversive\nreverso\nrevert\nrevertal\nreverter\nrevertibility\nrevertible\nrevertive\nrevertively\nrevery\nrevest\nrevestiary\nrevestry\nrevet\nrevete\nrevetement\nrevetment\nrevibrate\nrevibration\nrevibrational\nrevictorious\nrevictory\nrevictual\nrevictualment\nrevie\nreview\nreviewability\nreviewable\nreviewage\nreviewal\nreviewer\nrevieweress\nreviewish\nreviewless\nrevigorate\nrevigoration\nrevile\nrevilement\nreviler\nreviling\nrevilingly\nrevindicate\nrevindication\nreviolate\nreviolation\nrevirescence\nrevirescent\nRevisable\nrevisable\nrevisableness\nrevisal\nrevise\nRevised\nrevisee\nreviser\nrevisership\nrevisible\nrevision\nrevisional\nrevisionary\nrevisionism\nrevisionist\nrevisit\nrevisitant\nrevisitation\nrevisor\nrevisory\nrevisualization\nrevisualize\nrevitalization\nrevitalize\nrevitalizer\nrevivability\nrevivable\nrevivably\nrevival\nrevivalism\nrevivalist\nrevivalistic\nrevivalize\nrevivatory\nrevive\nrevivement\nreviver\nrevivification\nrevivifier\nrevivify\nreviving\nrevivingly\nreviviscence\nreviviscency\nreviviscent\nreviviscible\nrevivor\nrevocability\nrevocable\nrevocableness\nrevocably\nrevocation\nrevocative\nrevocatory\nrevoice\nrevokable\nrevoke\nrevokement\nrevoker\nrevokingly\nrevolant\nrevolatilize\nrevolt\nrevolter\nrevolting\nrevoltingly\nrevoltress\nrevolubility\nrevoluble\nrevolubly\nrevolunteer\nrevolute\nrevoluted\nrevolution\nrevolutional\nrevolutionally\nrevolutionarily\nrevolutionariness\nrevolutionary\nrevolutioneering\nrevolutioner\nrevolutionism\nrevolutionist\nrevolutionize\nrevolutionizement\nrevolutionizer\nrevolvable\nrevolvably\nrevolve\nrevolvement\nrevolvency\nrevolver\nrevolving\nrevolvingly\nrevomit\nrevote\nrevue\nrevuette\nrevuist\nrevulsed\nrevulsion\nrevulsionary\nrevulsive\nrevulsively\nrewade\nrewager\nrewake\nrewaken\nrewall\nrewallow\nreward\nrewardable\nrewardableness\nrewardably\nrewardedly\nrewarder\nrewardful\nrewardfulness\nrewarding\nrewardingly\nrewardless\nrewardproof\nrewarehouse\nrewarm\nrewarn\nrewash\nrewater\nrewave\nrewax\nrewaybill\nrewayle\nreweaken\nrewear\nreweave\nrewed\nreweigh\nreweigher\nreweight\nrewelcome\nreweld\nrewend\nrewet\nrewhelp\nrewhirl\nrewhisper\nrewhiten\nrewiden\nrewin\nrewind\nrewinder\nrewirable\nrewire\nrewish\nrewithdraw\nrewithdrawal\nrewood\nreword\nrework\nreworked\nrewound\nrewove\nrewoven\nrewrap\nrewrite\nrewriter\nRex\nrex\nrexen\nreyield\nReynard\nReynold\nreyoke\nreyouth\nrezbanyite\nrhabdite\nrhabditiform\nRhabditis\nrhabdium\nRhabdocarpum\nRhabdocoela\nrhabdocoelan\nrhabdocoele\nRhabdocoelida\nrhabdocoelidan\nrhabdocoelous\nrhabdoid\nrhabdoidal\nrhabdolith\nrhabdom\nrhabdomal\nrhabdomancer\nrhabdomancy\nrhabdomantic\nrhabdomantist\nRhabdomonas\nrhabdomyoma\nrhabdomyosarcoma\nrhabdomysarcoma\nrhabdophane\nrhabdophanite\nRhabdophora\nrhabdophoran\nRhabdopleura\nrhabdopod\nrhabdos\nrhabdosome\nrhabdosophy\nrhabdosphere\nrhabdus\nRhacianectes\nRhacomitrium\nRhacophorus\nRhadamanthine\nRhadamanthus\nRhadamanthys\nRhaetian\nRhaetic\nrhagades\nrhagadiform\nrhagiocrin\nrhagionid\nRhagionidae\nrhagite\nRhagodia\nrhagon\nrhagonate\nrhagose\nrhamn\nRhamnaceae\nrhamnaceous\nrhamnal\nRhamnales\nrhamnetin\nrhamninase\nrhamninose\nrhamnite\nrhamnitol\nrhamnohexite\nrhamnohexitol\nrhamnohexose\nrhamnonic\nrhamnose\nrhamnoside\nRhamnus\nrhamphoid\nRhamphorhynchus\nRhamphosuchus\nrhamphotheca\nRhapidophyllum\nRhapis\nrhapontic\nrhaponticin\nrhapontin\nrhapsode\nrhapsodic\nrhapsodical\nrhapsodically\nrhapsodie\nrhapsodism\nrhapsodist\nrhapsodistic\nrhapsodize\nrhapsodomancy\nrhapsody\nRhaptopetalaceae\nrhason\nrhasophore\nrhatania\nrhatany\nrhe\nRhea\nrhea\nrheadine\nRheae\nrhebok\nrhebosis\nrheeboc\nrheebok\nrheen\nrhegmatype\nrhegmatypy\nRhegnopteri\nrheic\nRheidae\nRheiformes\nrhein\nrheinic\nrhema\nrhematic\nrhematology\nrheme\nRhemish\nRhemist\nRhenish\nrhenium\nrheobase\nrheocrat\nrheologist\nrheology\nrheometer\nrheometric\nrheometry\nrheophile\nrheophore\nrheophoric\nrheoplankton\nrheoscope\nrheoscopic\nrheostat\nrheostatic\nrheostatics\nrheotactic\nrheotan\nrheotaxis\nrheotome\nrheotrope\nrheotropic\nrheotropism\nrhesian\nrhesus\nrhetor\nrhetoric\nrhetorical\nrhetorically\nrhetoricalness\nrhetoricals\nrhetorician\nrhetorize\nRheum\nrheum\nrheumarthritis\nrheumatalgia\nrheumatic\nrheumatical\nrheumatically\nrheumaticky\nrheumatism\nrheumatismal\nrheumatismoid\nrheumative\nrheumatiz\nrheumatize\nrheumatoid\nrheumatoidal\nrheumatoidally\nrheumed\nrheumic\nrheumily\nrheuminess\nrheumy\nRhexia\nrhexis\nrhigolene\nrhigosis\nrhigotic\nRhina\nrhinal\nrhinalgia\nRhinanthaceae\nRhinanthus\nrhinarium\nrhincospasm\nrhine\nRhineland\nRhinelander\nrhinencephalic\nrhinencephalon\nrhinencephalous\nrhinenchysis\nRhineodon\nRhineodontidae\nrhinestone\nRhineura\nrhineurynter\nRhinidae\nrhinion\nrhinitis\nrhino\nRhinobatidae\nRhinobatus\nrhinobyon\nrhinocaul\nrhinocele\nrhinocelian\nrhinocerial\nrhinocerian\nrhinocerine\nrhinoceroid\nrhinoceros\nrhinoceroslike\nrhinocerotic\nRhinocerotidae\nrhinocerotiform\nrhinocerotine\nrhinocerotoid\nrhinochiloplasty\nRhinoderma\nrhinodynia\nrhinogenous\nrhinolalia\nrhinolaryngology\nrhinolaryngoscope\nrhinolite\nrhinolith\nrhinolithic\nrhinological\nrhinologist\nrhinology\nrhinolophid\nRhinolophidae\nrhinolophine\nrhinopharyngeal\nrhinopharyngitis\nrhinopharynx\nRhinophidae\nRhinophis\nrhinophonia\nrhinophore\nrhinophyma\nrhinoplastic\nrhinoplasty\nrhinopolypus\nRhinoptera\nRhinopteridae\nrhinorrhagia\nrhinorrhea\nrhinorrheal\nrhinoscleroma\nrhinoscope\nrhinoscopic\nrhinoscopy\nrhinosporidiosis\nRhinosporidium\nrhinotheca\nrhinothecal\nRhinthonic\nRhinthonica\nrhipidate\nrhipidion\nRhipidistia\nrhipidistian\nrhipidium\nRhipidoglossa\nrhipidoglossal\nrhipidoglossate\nRhipidoptera\nrhipidopterous\nrhipiphorid\nRhipiphoridae\nRhipiptera\nrhipipteran\nrhipipterous\nRhipsalis\nRhiptoglossa\nrhizanthous\nrhizautoicous\nRhizina\nRhizinaceae\nrhizine\nrhizinous\nRhizobium\nrhizocarp\nRhizocarpeae\nrhizocarpean\nrhizocarpian\nrhizocarpic\nrhizocarpous\nrhizocaul\nrhizocaulus\nRhizocephala\nrhizocephalan\nrhizocephalous\nrhizocorm\nRhizoctonia\nrhizoctoniose\nrhizodermis\nRhizodus\nRhizoflagellata\nrhizoflagellate\nrhizogen\nrhizogenetic\nrhizogenic\nrhizogenous\nrhizoid\nrhizoidal\nrhizoma\nrhizomatic\nrhizomatous\nrhizome\nrhizomelic\nrhizomic\nrhizomorph\nrhizomorphic\nrhizomorphoid\nrhizomorphous\nrhizoneure\nrhizophagous\nrhizophilous\nRhizophora\nRhizophoraceae\nrhizophoraceous\nrhizophore\nrhizophorous\nrhizophyte\nrhizoplast\nrhizopod\nRhizopoda\nrhizopodal\nrhizopodan\nrhizopodist\nrhizopodous\nRhizopogon\nRhizopus\nrhizosphere\nRhizostomae\nRhizostomata\nrhizostomatous\nrhizostome\nrhizostomous\nRhizota\nrhizotaxis\nrhizotaxy\nrhizote\nrhizotic\nrhizotomi\nrhizotomy\nrho\nRhoda\nrhodaline\nRhodamine\nrhodamine\nrhodanate\nRhodanian\nrhodanic\nrhodanine\nrhodanthe\nrhodeose\nRhodes\nRhodesian\nRhodesoid\nrhodeswood\nRhodian\nrhodic\nrhoding\nrhodinol\nrhodite\nrhodium\nrhodizite\nrhodizonic\nRhodobacteriaceae\nRhodobacterioideae\nrhodochrosite\nRhodococcus\nRhodocystis\nrhodocyte\nrhododendron\nrhodolite\nRhodomelaceae\nrhodomelaceous\nrhodonite\nRhodope\nrhodophane\nRhodophyceae\nrhodophyceous\nrhodophyll\nRhodophyllidaceae\nRhodophyta\nrhodoplast\nrhodopsin\nRhodora\nRhodoraceae\nrhodorhiza\nrhodosperm\nRhodospermeae\nrhodospermin\nrhodospermous\nRhodospirillum\nRhodothece\nRhodotypos\nRhodymenia\nRhodymeniaceae\nrhodymeniaceous\nRhodymeniales\nRhoeadales\nRhoecus\nRhoeo\nrhomb\nrhombencephalon\nrhombenporphyr\nrhombic\nrhombical\nrhombiform\nrhomboclase\nrhomboganoid\nRhomboganoidei\nrhombogene\nrhombogenic\nrhombogenous\nrhombohedra\nrhombohedral\nrhombohedrally\nrhombohedric\nrhombohedron\nrhomboid\nrhomboidal\nrhomboidally\nrhomboideus\nrhomboidly\nrhomboquadratic\nrhomborectangular\nrhombos\nrhombovate\nRhombozoa\nrhombus\nrhonchal\nrhonchial\nrhonchus\nRhonda\nrhopalic\nrhopalism\nrhopalium\nRhopalocera\nrhopaloceral\nrhopalocerous\nRhopalura\nrhotacism\nrhotacismus\nrhotacistic\nrhotacize\nrhubarb\nrhubarby\nrhumb\nrhumba\nrhumbatron\nRhus\nrhyacolite\nrhyme\nrhymeless\nrhymelet\nrhymemaker\nrhymemaking\nrhymeproof\nrhymer\nrhymery\nrhymester\nrhymewise\nrhymic\nrhymist\nrhymy\nRhynchobdellae\nRhynchobdellida\nRhynchocephala\nRhynchocephali\nRhynchocephalia\nrhynchocephalian\nrhynchocephalic\nrhynchocephalous\nRhynchocoela\nrhynchocoelan\nrhynchocoelic\nrhynchocoelous\nrhyncholite\nRhynchonella\nRhynchonellacea\nRhynchonellidae\nrhynchonelloid\nRhynchophora\nrhynchophoran\nrhynchophore\nrhynchophorous\nRhynchopinae\nRhynchops\nRhynchosia\nRhynchospora\nRhynchota\nrhynchotal\nrhynchote\nrhynchotous\nrhynconellid\nRhyncostomi\nRhynia\nRhyniaceae\nRhynocheti\nRhynsburger\nrhyobasalt\nrhyodacite\nrhyolite\nrhyolitic\nrhyotaxitic\nrhyparographer\nrhyparographic\nrhyparographist\nrhyparography\nrhypography\nrhyptic\nrhyptical\nrhysimeter\nRhyssa\nrhythm\nrhythmal\nrhythmic\nrhythmical\nrhythmicality\nrhythmically\nrhythmicity\nrhythmicize\nrhythmics\nrhythmist\nrhythmizable\nrhythmization\nrhythmize\nrhythmless\nrhythmometer\nrhythmopoeia\nrhythmproof\nRhytidodon\nrhytidome\nrhytidosis\nRhytina\nRhytisma\nrhyton\nria\nrial\nriancy\nriant\nriantly\nriata\nrib\nribald\nribaldish\nribaldly\nribaldrous\nribaldry\nriband\nRibandism\nRibandist\nribandlike\nribandmaker\nribandry\nribat\nribaudequin\nribaudred\nribband\nribbandry\nribbed\nribber\nribbet\nribbidge\nribbing\nribble\nribbon\nribbonback\nribboner\nribbonfish\nRibbonism\nribbonlike\nribbonmaker\nRibbonman\nribbonry\nribbonweed\nribbonwood\nribbony\nribby\nribe\nRibes\nRibhus\nribless\nriblet\nriblike\nriboflavin\nribonic\nribonuclease\nribonucleic\nribose\nribroast\nribroaster\nribroasting\nribskin\nribspare\nRibston\nribwork\nribwort\nRic\nRicardian\nRicardianism\nRicardo\nRiccia\nRicciaceae\nricciaceous\nRicciales\nrice\nricebird\nriceland\nricer\nricey\nRich\nrich\nRichard\nRichardia\nRichardsonia\nrichdom\nRichebourg\nrichellite\nrichen\nriches\nrichesse\nrichling\nrichly\nRichmond\nRichmondena\nrichness\nricht\nrichterite\nrichweed\nricin\nricine\nricinelaidic\nricinelaidinic\nricinic\nricinine\nricininic\nricinium\nricinoleate\nricinoleic\nricinolein\nricinolic\nRicinulei\nRicinus\nricinus\nRick\nrick\nrickardite\nricker\nricketily\nricketiness\nricketish\nrickets\nRickettsia\nrickettsial\nRickettsiales\nrickettsialpox\nrickety\nrickey\nrickle\nrickmatic\nrickrack\nricksha\nrickshaw\nrickstaddle\nrickstand\nrickstick\nRicky\nrickyard\nricochet\nricolettaite\nricrac\nrictal\nrictus\nrid\nridable\nridableness\nridably\nriddam\nriddance\nriddel\nridden\nridder\nridding\nriddle\nriddlemeree\nriddler\nriddling\nriddlingly\nriddlings\nride\nrideable\nrideau\nriden\nrident\nrider\nridered\nrideress\nriderless\nridge\nridgeband\nridgeboard\nridgebone\nridged\nridgel\nridgelet\nridgelike\nridgeling\nridgepiece\nridgeplate\nridgepole\nridgepoled\nridger\nridgerope\nridgetree\nridgeway\nridgewise\nridgil\nridging\nridgingly\nridgling\nridgy\nridibund\nridicule\nridiculer\nridiculize\nridiculosity\nridiculous\nridiculously\nridiculousness\nriding\nridingman\nridotto\nrie\nriebeckite\nriem\nRiemannean\nRiemannian\nriempie\nrier\nRiesling\nrife\nrifely\nrifeness\nRiff\nriff\nRiffi\nRiffian\nriffle\nriffler\nriffraff\nRifi\nRifian\nrifle\nriflebird\nrifledom\nrifleman\nriflemanship\nrifleproof\nrifler\nriflery\nrifleshot\nrifling\nrift\nrifter\nriftless\nrifty\nrig\nrigadoon\nrigamajig\nrigamarole\nrigation\nrigbane\nRigel\nRigelian\nrigescence\nrigescent\nriggald\nrigger\nrigging\nriggish\nriggite\nriggot\nright\nrightabout\nrighten\nrighteous\nrighteously\nrighteousness\nrighter\nrightful\nrightfully\nrightfulness\nrightheaded\nrighthearted\nrightist\nrightle\nrightless\nrightlessness\nrightly\nrightmost\nrightness\nrighto\nrightship\nrightward\nrightwardly\nrightwards\nrighty\nrigid\nrigidify\nrigidist\nrigidity\nrigidly\nrigidness\nrigidulous\nrigling\nrigmaree\nrigmarole\nrigmarolery\nrigmarolic\nrigmarolish\nrigmarolishly\nrignum\nrigol\nrigolette\nrigor\nrigorism\nrigorist\nrigoristic\nrigorous\nrigorously\nrigorousness\nrigsby\nrigsdaler\nRigsmaal\nRigsmal\nrigwiddie\nrigwiddy\nRik\nRikari\nrikisha\nrikk\nriksha\nrikshaw\nRiksmaal\nRiksmal\nrilawa\nrile\nriley\nrill\nrillet\nrillett\nrillette\nrillock\nrillstone\nrilly\nrim\nrima\nrimal\nrimate\nrimbase\nrime\nrimeless\nrimer\nrimester\nrimfire\nrimiform\nrimland\nrimless\nrimmaker\nrimmaking\nrimmed\nrimmer\nrimose\nrimosely\nrimosity\nrimous\nrimpi\nrimple\nrimption\nrimrock\nrimu\nrimula\nrimulose\nrimy\nRinaldo\nrinceau\nrinch\nrincon\nRind\nrind\nRinde\nrinded\nrinderpest\nrindle\nrindless\nrindy\nrine\nring\nringable\nRingatu\nringbark\nringbarker\nringbill\nringbird\nringbolt\nringbone\nringboned\nringcraft\nringdove\nringe\nringed\nringent\nringer\nringeye\nringgiver\nringgiving\nringgoer\nringhals\nringhead\nringiness\nringing\nringingly\nringingness\nringite\nringle\nringlead\nringleader\nringleaderless\nringleadership\nringless\nringlet\nringleted\nringlety\nringlike\nringmaker\nringmaking\nringman\nringmaster\nringneck\nringsail\nringside\nringsider\nringster\nringtail\nringtaw\nringtime\nringtoss\nringwalk\nringwall\nringwise\nringworm\nringy\nrink\nrinka\nrinker\nrinkite\nrinncefada\nrinneite\nrinner\nrinsable\nrinse\nrinser\nrinsing\nrinthereout\nrintherout\nRio\nrio\nriot\nrioter\nrioting\nriotingly\nriotist\nriotistic\nriotocracy\nriotous\nriotously\nriotousness\nriotproof\nriotry\nrip\nripa\nripal\nriparial\nriparian\nRiparii\nriparious\nripcord\nripe\nripelike\nripely\nripen\nripener\nripeness\nripening\nripeningly\nriper\nripgut\nripicolous\nripidolite\nripienist\nripieno\nripier\nripost\nriposte\nrippable\nripper\nripperman\nrippet\nrippier\nripping\nrippingly\nrippingness\nrippit\nripple\nrippleless\nrippler\nripplet\nrippling\nripplingly\nripply\nrippon\nriprap\nriprapping\nripsack\nripsaw\nripsnorter\nripsnorting\nRipuarian\nripup\nriroriro\nrisala\nrisberm\nrise\nrisen\nriser\nrishi\nrishtadar\nrisibility\nrisible\nrisibleness\nrisibles\nrisibly\nrising\nrisk\nrisker\nriskful\nriskfulness\nriskily\nriskiness\nriskish\nriskless\nriskproof\nrisky\nrisorial\nrisorius\nrisp\nrisper\nrisque\nrisquee\nRiss\nrissel\nrisser\nRissian\nrissle\nRissoa\nrissoid\nRissoidae\nrist\nristori\nrit\nRita\nrita\nRitalynne\nritardando\nRitchey\nrite\nriteless\nritelessness\nritling\nritornel\nritornelle\nritornello\nRitschlian\nRitschlianism\nrittingerite\nritual\nritualism\nritualist\nritualistic\nritualistically\nrituality\nritualize\nritualless\nritually\nritzy\nriva\nrivage\nrival\nrivalable\nrivaless\nrivalism\nrivality\nrivalize\nrivalless\nrivalrous\nrivalry\nrivalship\nrive\nrivel\nrivell\nriven\nriver\nriverain\nriverbank\nriverbush\nriverdamp\nrivered\nriverhead\nriverhood\nriverine\nriverish\nriverless\nriverlet\nriverlike\nriverling\nriverly\nriverman\nriverscape\nriverside\nriversider\nriverward\nriverwards\nriverwash\nriverway\nriverweed\nriverwise\nrivery\nrivet\nriveter\nrivethead\nriveting\nrivetless\nrivetlike\nRivina\nriving\nrivingly\nRivinian\nrivose\nRivularia\nRivulariaceae\nrivulariaceous\nrivulation\nrivulet\nrivulose\nrix\nrixatrix\nrixy\nriyal\nriziform\nrizzar\nrizzle\nrizzom\nrizzomed\nrizzonite\nRo\nroach\nroachback\nroad\nroadability\nroadable\nroadbed\nroadblock\nroadbook\nroadcraft\nroaded\nroader\nroadfellow\nroadhead\nroadhouse\nroading\nroadite\nroadless\nroadlessness\nroadlike\nroadman\nroadmaster\nroadside\nroadsider\nroadsman\nroadstead\nroadster\nroadstone\nroadtrack\nroadway\nroadweed\nroadwise\nroadworthiness\nroadworthy\nroam\nroamage\nroamer\nroaming\nroamingly\nroan\nroanoke\nroar\nroarer\nroaring\nroaringly\nroast\nroastable\nroaster\nroasting\nroastingly\nRob\nrob\nrobalito\nrobalo\nroband\nrobber\nrobberproof\nrobbery\nRobbin\nrobbin\nrobbing\nrobe\nrobeless\nRobenhausian\nrober\nroberd\nRoberdsman\nRobert\nRoberta\nRoberto\nRobigalia\nRobigus\nRobin\nrobin\nrobinet\nrobing\nRobinia\nrobinin\nrobinoside\nroble\nrobomb\nroborant\nroborate\nroboration\nroborative\nroborean\nroboreous\nrobot\nrobotesque\nrobotian\nrobotism\nrobotistic\nrobotization\nrobotize\nrobotlike\nrobotry\nrobur\nroburite\nrobust\nrobustful\nrobustfully\nrobustfulness\nrobustic\nrobusticity\nrobustious\nrobustiously\nrobustiousness\nrobustity\nrobustly\nrobustness\nroc\nrocambole\nRoccella\nRoccellaceae\nroccellic\nroccellin\nroccelline\nRochea\nrochelime\nRochelle\nrocher\nrochet\nrocheted\nrock\nrockable\nrockably\nrockaby\nrockabye\nrockallite\nRockaway\nrockaway\nrockbell\nrockberry\nrockbird\nrockborn\nrockbrush\nrockcist\nrockcraft\nrockelay\nrocker\nrockery\nrocket\nrocketeer\nrocketer\nrocketlike\nrocketor\nrocketry\nrockety\nrockfall\nrockfish\nrockfoil\nrockhair\nrockhearted\nRockies\nrockiness\nrocking\nrockingly\nrockish\nrocklay\nrockless\nrocklet\nrocklike\nrockling\nrockman\nrockrose\nrockshaft\nrockslide\nrockstaff\nrocktree\nrockward\nrockwards\nrockweed\nrockwood\nrockwork\nrocky\nrococo\nRocouyenne\nrocta\nRod\nrod\nrodd\nroddikin\nroddin\nrodding\nrode\nRodent\nrodent\nRodentia\nrodential\nrodentially\nrodentian\nrodenticidal\nrodenticide\nrodentproof\nrodeo\nRoderic\nRoderick\nrodge\nRodger\nrodham\nRodinal\nRodinesque\nroding\nrodingite\nrodknight\nrodless\nrodlet\nrodlike\nrodmaker\nrodman\nRodney\nrodney\nRodolph\nRodolphus\nrodomont\nrodomontade\nrodomontadist\nrodomontador\nrodsman\nrodster\nrodwood\nroe\nroeblingite\nroebuck\nroed\nroelike\nroentgen\nroentgenism\nroentgenization\nroentgenize\nroentgenogram\nroentgenograph\nroentgenographic\nroentgenographically\nroentgenography\nroentgenologic\nroentgenological\nroentgenologically\nroentgenologist\nroentgenology\nroentgenometer\nroentgenometry\nroentgenoscope\nroentgenoscopic\nroentgenoscopy\nroentgenotherapy\nroentgentherapy\nroer\nroestone\nroey\nrog\nrogan\nrogation\nRogationtide\nrogative\nrogatory\nRoger\nroger\nRogero\nrogersite\nroggle\nRogue\nrogue\nroguedom\nrogueling\nroguery\nrogueship\nroguing\nroguish\nroguishly\nroguishness\nrohan\nRohilla\nrohob\nrohun\nrohuna\nroi\nroid\nroil\nroily\nRoist\nroister\nroisterer\nroistering\nroisteringly\nroisterly\nroisterous\nroisterously\nroit\nRok\nroka\nroke\nrokeage\nrokee\nrokelay\nroker\nrokey\nroky\nRoland\nRolandic\nrole\nroleo\nRolf\nRolfe\nroll\nrollable\nrollback\nrolled\nrollejee\nroller\nrollerer\nrollermaker\nrollermaking\nrollerman\nrollerskater\nrollerskating\nrolley\nrolleyway\nrolleywayman\nrolliche\nrollichie\nrollick\nrollicker\nrollicking\nrollickingly\nrollickingness\nrollicksome\nrollicksomeness\nrollicky\nrolling\nrollingly\nRollinia\nrollix\nrollmop\nRollo\nrollock\nrollway\nroloway\nRomaean\nRomagnese\nRomagnol\nRomagnole\nRomaic\nromaika\nRomain\nromaine\nRomaji\nromal\nRoman\nRomance\nromance\nromancealist\nromancean\nromanceful\nromanceish\nromanceishness\nromanceless\nromancelet\nromancelike\nromancemonger\nromanceproof\nromancer\nromanceress\nromancical\nromancing\nromancist\nromancy\nRomandom\nRomane\nRomanes\nRomanese\nRomanesque\nRomanhood\nRomanian\nRomanic\nRomaniform\nRomanish\nRomanism\nRomanist\nRomanistic\nRomanite\nRomanity\nromanium\nRomanization\nRomanize\nRomanizer\nRomanly\nRomansch\nRomansh\nromantic\nromantical\nromanticalism\nromanticality\nromantically\nromanticalness\nromanticism\nromanticist\nromanticistic\nromanticity\nromanticize\nromanticly\nromanticness\nromantism\nromantist\nRomany\nromanza\nromaunt\nrombos\nrombowline\nRome\nromeite\nRomeo\nromerillo\nromero\nRomescot\nRomeshot\nRomeward\nRomewards\nRomic\nRomipetal\nRomish\nRomishly\nRomishness\nrommack\nRommany\nRomney\nRomneya\nromp\nromper\nromping\nrompingly\nrompish\nrompishly\nrompishness\nrompu\nrompy\nRomulian\nRomulus\nRon\nRonald\nroncador\nRoncaglian\nroncet\nronco\nrond\nrondache\nrondacher\nrondawel\nronde\nrondeau\nrondel\nrondelet\nRondeletia\nrondelier\nrondelle\nrondellier\nrondino\nrondle\nrondo\nrondoletto\nrondure\nrone\nRong\nRonga\nrongeur\nRonni\nronquil\nRonsardian\nRonsardism\nRonsardist\nRonsardize\nRonsdorfer\nRonsdorfian\nrontgen\nronyon\nrood\nroodebok\nroodle\nroodstone\nroof\nroofage\nroofer\nroofing\nroofless\nrooflet\nrooflike\nroofman\nrooftree\nroofward\nroofwise\nroofy\nrooibok\nrooinek\nrook\nrooker\nrookeried\nrookery\nrookie\nrookish\nrooklet\nrooklike\nrooky\nrool\nroom\nroomage\nroomed\nroomer\nroomful\nroomie\nroomily\nroominess\nroomkeeper\nroomless\nroomlet\nroommate\nroomstead\nroomth\nroomthily\nroomthiness\nroomthy\nroomward\nroomy\nroon\nroorback\nroosa\nRoosevelt\nRooseveltian\nroost\nroosted\nrooster\nroosterfish\nroosterhood\nroosterless\nroosters\nroostership\nRoot\nroot\nrootage\nrootcap\nrooted\nrootedly\nrootedness\nrooter\nrootery\nrootfast\nrootfastness\nroothold\nrootiness\nrootle\nrootless\nrootlessness\nrootlet\nrootlike\nrootling\nrootstalk\nrootstock\nrootwalt\nrootward\nrootwise\nrootworm\nrooty\nroove\nropable\nrope\nropeable\nropeband\nropebark\nropedance\nropedancer\nropedancing\nropelayer\nropelaying\nropelike\nropemaker\nropemaking\nropeman\nroper\nroperipe\nropery\nropes\nropesmith\nropetrick\nropewalk\nropewalker\nropeway\nropework\nropily\nropiness\nroping\nropish\nropishness\nropp\nropy\nroque\nroquelaure\nroquer\nroquet\nroquette\nroquist\nroral\nroratorio\nRori\nroric\nRoridula\nRoridulaceae\nroriferous\nrorifluent\nRoripa\nRorippa\nroritorious\nrorqual\nrorty\nrorulent\nrory\nRosa\nRosabel\nRosabella\nRosaceae\nrosacean\nrosaceous\nrosal\nRosales\nRosalia\nRosalie\nRosalind\nRosaline\nRosamond\nrosanilin\nrosaniline\nrosarian\nrosario\nrosarium\nrosaruby\nrosary\nrosated\nRoschach\nroscherite\nroscid\nroscoelite\nrose\nroseal\nroseate\nroseately\nrosebay\nrosebud\nrosebush\nrosed\nrosedrop\nrosefish\nrosehead\nrosehill\nrosehiller\nroseine\nrosel\nroseless\nroselet\nroselike\nroselite\nrosella\nrosellate\nroselle\nRosellinia\nrosemary\nRosenbergia\nrosenbuschite\nroseola\nroseolar\nroseoliform\nroseolous\nroseous\nroseroot\nrosery\nroset\nrosetan\nrosetangle\nrosetime\nRosetta\nrosette\nrosetted\nrosetty\nrosetum\nrosety\nroseways\nrosewise\nrosewood\nrosewort\nRosicrucian\nRosicrucianism\nrosied\nrosier\nrosieresite\nrosilla\nrosillo\nrosily\nrosin\nrosinate\nrosinduline\nRosine\nrosiness\nrosinous\nrosinweed\nrosinwood\nrosiny\nrosland\nrosmarine\nRosmarinus\nRosminian\nRosminianism\nrosoli\nrosolic\nrosolio\nrosolite\nrosorial\nRoss\nross\nrosser\nrossite\nrostel\nrostellar\nRostellaria\nrostellarian\nrostellate\nrostelliform\nrostellum\nroster\nrostra\nrostral\nrostrally\nrostrate\nrostrated\nrostriferous\nrostriform\nrostroantennary\nrostrobranchial\nrostrocarinate\nrostrocaudal\nrostroid\nrostrolateral\nrostrular\nrostrulate\nrostrulum\nrostrum\nrosular\nrosulate\nrosy\nrot\nrota\nrotacism\nRotal\nrotal\nRotala\nRotalia\nrotalian\nrotaliform\nrotaliiform\nrotaman\nrotameter\nrotan\nRotanev\nrotang\nRotarian\nRotarianism\nrotarianize\nRotary\nrotary\nrotascope\nrotatable\nrotate\nrotated\nrotating\nrotation\nrotational\nrotative\nrotatively\nrotativism\nrotatodentate\nrotatoplane\nrotator\nRotatoria\nrotatorian\nrotatory\nrotch\nrote\nrotella\nrotenone\nroter\nrotge\nrotgut\nrother\nrothermuck\nrotifer\nRotifera\nrotiferal\nrotiferan\nrotiferous\nrotiform\nrotisserie\nroto\nrotograph\nrotogravure\nrotor\nrotorcraft\nrotproof\nRotse\nrottan\nrotten\nrottenish\nrottenly\nrottenness\nrottenstone\nrotter\nrotting\nrottle\nrottlera\nrottlerin\nrottock\nrottolo\nrotula\nrotulad\nrotular\nrotulet\nrotulian\nrotuliform\nrotulus\nrotund\nrotunda\nrotundate\nrotundifoliate\nrotundifolious\nrotundiform\nrotundify\nrotundity\nrotundly\nrotundness\nrotundo\nrotundotetragonal\nroub\nroucou\nroud\nroue\nrouelle\nrouge\nrougeau\nrougeberry\nrougelike\nrougemontite\nrougeot\nrough\nroughage\nroughcast\nroughcaster\nroughdraft\nroughdraw\nroughdress\nroughdry\nroughen\nroughener\nrougher\nroughet\nroughhearted\nroughheartedness\nroughhew\nroughhewer\nroughhewn\nroughhouse\nroughhouser\nroughhousing\nroughhousy\nroughie\nroughing\nroughings\nroughish\nroughishly\nroughishness\nroughleg\nroughly\nroughness\nroughometer\nroughride\nroughrider\nroughroot\nroughscuff\nroughsetter\nroughshod\nroughslant\nroughsome\nroughstring\nroughstuff\nroughtail\nroughtailed\nroughwork\nroughwrought\nroughy\nrougy\nrouille\nrouky\nroulade\nrouleau\nroulette\nRouman\nRoumeliote\nroun\nrounce\nrounceval\nrouncy\nround\nroundabout\nroundaboutly\nroundaboutness\nrounded\nroundedly\nroundedness\nroundel\nroundelay\nroundeleer\nrounder\nroundfish\nroundhead\nroundheaded\nroundheadedness\nroundhouse\nrounding\nroundish\nroundishness\nroundlet\nroundline\nroundly\nroundmouthed\nroundness\nroundnose\nroundnosed\nroundridge\nroundseam\nroundsman\nroundtail\nroundtop\nroundtree\nroundup\nroundwise\nroundwood\nroundworm\nroundy\nroup\nrouper\nroupet\nroupily\nroupingwife\nroupit\nroupy\nrouse\nrouseabout\nrousedness\nrousement\nrouser\nrousing\nrousingly\nRousseau\nRousseauan\nRousseauism\nRousseauist\nRousseauistic\nRousseauite\nRoussellian\nroussette\nRoussillon\nroust\nroustabout\nrouster\nrousting\nrout\nroute\nrouter\nrouth\nrouthercock\nrouthie\nrouthiness\nrouthy\nroutinary\nroutine\nroutineer\nroutinely\nrouting\nroutinish\nroutinism\nroutinist\nroutinization\nroutinize\nroutivarite\nroutous\nroutously\nrouvillite\nrove\nrover\nrovet\nrovetto\nroving\nrovingly\nrovingness\nrow\nrowable\nrowan\nrowanberry\nrowboat\nrowdily\nrowdiness\nrowdy\nrowdydow\nrowdydowdy\nrowdyish\nrowdyishly\nrowdyishness\nrowdyism\nrowdyproof\nrowed\nrowel\nrowelhead\nrowen\nRowena\nrower\nrowet\nrowiness\nrowing\nRowland\nrowlandite\nRowleian\nrowlet\nRowley\nRowleyan\nrowlock\nrowport\nrowty\nrowy\nrox\nRoxana\nRoxane\nRoxanne\nRoxburgh\nRoxburghiaceae\nRoxbury\nRoxie\nRoxolani\nRoxy\nroxy\nRoy\nroyal\nroyale\nroyalet\nroyalism\nroyalist\nroyalization\nroyalize\nroyally\nroyalty\nRoyena\nroyet\nroyetness\nroyetous\nroyetously\nRoystonea\nroyt\nrozum\nRua\nruach\nruana\nrub\nrubasse\nrubato\nrubbed\nrubber\nrubberer\nrubberize\nrubberless\nrubberneck\nrubbernecker\nrubbernose\nrubbers\nrubberstone\nrubberwise\nrubbery\nrubbing\nrubbingstone\nrubbish\nrubbishing\nrubbishingly\nrubbishly\nrubbishry\nrubbishy\nrubble\nrubbler\nrubblestone\nrubblework\nrubbly\nrubdown\nRube\nrubedinous\nrubedity\nrubefacient\nrubefaction\nrubelet\nrubella\nrubelle\nrubellite\nrubellosis\nRubensian\nrubeola\nrubeolar\nrubeoloid\nruberythric\nruberythrinic\nrubescence\nrubescent\nRubia\nRubiaceae\nrubiaceous\nRubiales\nrubianic\nrubiate\nrubiator\nrubican\nrubicelle\nRubicola\nRubicon\nrubiconed\nrubicund\nrubicundity\nrubidic\nrubidine\nrubidium\nrubied\nrubific\nrubification\nrubificative\nrubify\nrubiginous\nrubijervine\nrubine\nrubineous\nrubious\nruble\nrublis\nrubor\nrubric\nrubrica\nrubrical\nrubricality\nrubrically\nrubricate\nrubrication\nrubricator\nrubrician\nrubricism\nrubricist\nrubricity\nrubricize\nrubricose\nrubrific\nrubrification\nrubrify\nrubrisher\nrubrospinal\nrubstone\nRubus\nruby\nrubylike\nrubytail\nrubythroat\nrubywise\nrucervine\nRucervus\nRuchbah\nruche\nruching\nruck\nrucker\nruckle\nruckling\nrucksack\nrucksey\nruckus\nrucky\nructation\nruction\nrud\nrudas\nRudbeckia\nrudd\nrudder\nrudderhead\nrudderhole\nrudderless\nrudderlike\nrudderpost\nrudderstock\nruddied\nruddily\nruddiness\nruddle\nruddleman\nruddock\nruddy\nruddyish\nrude\nrudely\nrudeness\nrudented\nrudenture\nruderal\nrudesby\nRudesheimer\nrudge\nrudiment\nrudimental\nrudimentarily\nrudimentariness\nrudimentary\nrudimentation\nrudish\nRudista\nRudistae\nrudistan\nrudistid\nrudity\nRudmasday\nRudolf\nRudolph\nRudolphus\nRudy\nrue\nrueful\nruefully\nruefulness\nruelike\nruelle\nRuellia\nruen\nruer\nruesome\nruesomeness\nruewort\nrufescence\nrufescent\nruff\nruffable\nruffed\nruffer\nruffian\nruffianage\nruffiandom\nruffianhood\nruffianish\nruffianism\nruffianize\nruffianlike\nruffianly\nruffiano\nruffin\nruffle\nruffled\nruffleless\nrufflement\nruffler\nrufflike\nruffliness\nruffling\nruffly\nruficarpous\nruficaudate\nruficoccin\nruficornate\nrufigallic\nrufoferruginous\nrufofulvous\nrufofuscous\nrufopiceous\nrufotestaceous\nrufous\nrufter\nrufulous\nRufus\nrufus\nrug\nruga\nrugate\nRugbeian\nRugby\nrugged\nruggedly\nruggedness\nRugger\nrugging\nruggle\nruggy\nrugheaded\nruglike\nrugmaker\nrugmaking\nRugosa\nrugosa\nrugose\nrugosely\nrugosity\nrugous\nrugulose\nruin\nruinable\nruinate\nruination\nruinatious\nruinator\nruined\nruiner\nruing\nruiniform\nruinlike\nruinous\nruinously\nruinousness\nruinproof\nRukbat\nrukh\nrulable\nRulander\nrule\nruledom\nruleless\nrulemonger\nruler\nrulership\nruling\nrulingly\nrull\nruller\nrullion\nRum\nrum\nrumal\nRuman\nRumanian\nrumbelow\nrumble\nrumblegarie\nrumblegumption\nrumblement\nrumbler\nrumbling\nrumblingly\nrumbly\nrumbo\nrumbooze\nrumbowline\nrumbowling\nrumbullion\nrumbumptious\nrumbustical\nrumbustious\nrumbustiousness\nrumchunder\nRumelian\nrumen\nrumenitis\nrumenocentesis\nrumenotomy\nRumex\nrumfustian\nrumgumption\nrumgumptious\nruminal\nruminant\nRuminantia\nruminantly\nruminate\nruminating\nruminatingly\nrumination\nruminative\nruminatively\nruminator\nrumkin\nrumless\nrumly\nrummage\nrummager\nrummagy\nrummer\nrummily\nrumminess\nrummish\nrummy\nrumness\nrumney\nrumor\nrumorer\nrumormonger\nrumorous\nrumorproof\nrumourmonger\nrump\nrumpad\nrumpadder\nrumpade\nRumper\nrumple\nrumpless\nrumply\nrumpscuttle\nrumpuncheon\nrumpus\nrumrunner\nrumrunning\nrumshop\nrumswizzle\nrumtytoo\nrun\nrunabout\nrunagate\nrunaround\nrunaway\nrunback\nrunboard\nrunby\nrunch\nrunchweed\nruncinate\nrundale\nRundi\nrundle\nrundlet\nrune\nrunecraft\nruned\nrunefolk\nruneless\nrunelike\nruner\nrunesmith\nrunestaff\nruneword\nrunfish\nrung\nrunghead\nrungless\nrunholder\nrunic\nrunically\nruniform\nrunite\nrunkeeper\nrunkle\nrunkly\nrunless\nrunlet\nrunman\nrunnable\nrunnel\nrunner\nrunnet\nrunning\nrunningly\nrunny\nrunoff\nrunologist\nrunology\nrunout\nrunover\nrunproof\nrunrig\nrunround\nrunt\nrunted\nruntee\nruntiness\nruntish\nruntishly\nruntishness\nrunty\nrunway\nrupa\nrupee\nRupert\nrupestral\nrupestrian\nrupestrine\nrupia\nrupiah\nrupial\nRupicapra\nRupicaprinae\nrupicaprine\nRupicola\nRupicolinae\nrupicoline\nrupicolous\nrupie\nrupitic\nRuppia\nruptile\nruption\nruptive\nruptuary\nrupturable\nrupture\nruptured\nrupturewort\nrural\nruralism\nruralist\nruralite\nrurality\nruralization\nruralize\nrurally\nruralness\nrurban\nruridecanal\nrurigenous\nRuritania\nRuritanian\nruru\nRus\nRusa\nRuscus\nruse\nrush\nrushbush\nrushed\nrushen\nrusher\nrushiness\nrushing\nrushingly\nrushingness\nrushland\nrushlight\nrushlighted\nrushlike\nrushlit\nrushy\nRusin\nrusine\nrusk\nruskin\nRuskinian\nrusky\nrusma\nrusot\nruspone\nRuss\nrussel\nRusselia\nRussell\nRussellite\nRussene\nrusset\nrusseting\nrussetish\nrussetlike\nrussety\nRussia\nrussia\nRussian\nRussianism\nRussianist\nRussianization\nRussianize\nRussification\nRussificator\nRussifier\nRussify\nRussine\nRussism\nRussniak\nRussolatrous\nRussolatry\nRussomania\nRussomaniac\nRussomaniacal\nRussophile\nRussophilism\nRussophilist\nRussophobe\nRussophobia\nRussophobiac\nRussophobism\nRussophobist\nrussud\nRussula\nrust\nrustable\nrustful\nrustic\nrustical\nrustically\nrusticalness\nrusticate\nrustication\nrusticator\nrusticial\nrusticism\nrusticity\nrusticize\nrusticly\nrusticness\nrusticoat\nrustily\nrustiness\nrustle\nrustler\nrustless\nrustling\nrustlingly\nrustlingness\nrustly\nrustproof\nrustre\nrustred\nRusty\nrusty\nrustyback\nrustyish\nruswut\nrut\nRuta\nrutabaga\nRutaceae\nrutaceous\nrutaecarpine\nrutate\nrutch\nrutelian\nRutelinae\nRuth\nruth\nruthenate\nRuthene\nRuthenian\nruthenic\nruthenious\nruthenium\nruthenous\nruther\nrutherford\nrutherfordine\nrutherfordite\nruthful\nruthfully\nruthfulness\nruthless\nruthlessly\nruthlessness\nrutic\nrutidosis\nrutilant\nrutilated\nrutile\nrutilous\nrutin\nrutinose\nRutiodon\nruttee\nrutter\nruttiness\nruttish\nruttishly\nruttishness\nrutty\nRutuli\nrutyl\nrutylene\nruvid\nrux\nrvulsant\nryal\nryania\nrybat\nryder\nrye\nryen\nRymandra\nryme\nRynchospora\nrynchosporous\nrynd\nrynt\nryot\nryotwar\nryotwari\nrype\nrypeck\nrytidosis\nRytina\nRyukyu\nS\ns\nsa\nsaa\nSaad\nSaan\nSaarbrucken\nsab\nSaba\nsabadilla\nsabadine\nsabadinine\nSabaean\nSabaeanism\nSabaeism\nsabaigrass\nSabaism\nSabaist\nSabal\nSabalaceae\nsabalo\nSaban\nsabanut\nSabaoth\nSabathikos\nSabazian\nSabazianism\nSabazios\nsabbat\nSabbatarian\nSabbatarianism\nSabbatary\nSabbatean\nSabbath\nsabbath\nSabbathaian\nSabbathaic\nSabbathaist\nSabbathbreaker\nSabbathbreaking\nSabbathism\nSabbathize\nSabbathkeeper\nSabbathkeeping\nSabbathless\nSabbathlike\nSabbathly\nSabbatia\nsabbatia\nSabbatian\nSabbatic\nsabbatic\nSabbatical\nsabbatical\nSabbatically\nSabbaticalness\nsabbatine\nsabbatism\nSabbatist\nSabbatization\nSabbatize\nsabbaton\nsabbitha\nsabdariffa\nsabe\nsabeca\nSabella\nsabella\nsabellan\nSabellaria\nsabellarian\nSabelli\nSabellian\nSabellianism\nSabellianize\nsabellid\nSabellidae\nsabelloid\nsaber\nsaberbill\nsabered\nsaberleg\nsaberlike\nsaberproof\nsabertooth\nsaberwing\nSabia\nSabiaceae\nsabiaceous\nSabian\nSabianism\nsabicu\nSabik\nSabina\nsabina\nSabine\nsabine\nSabinian\nsabino\nSabir\nsable\nsablefish\nsableness\nsably\nsabora\nsaboraim\nsabot\nsabotage\nsaboted\nsaboteur\nsabotine\nSabra\nsabra\nsabretache\nSabrina\nSabromin\nsabromin\nSabuja\nsabuline\nsabulite\nsabulose\nsabulosity\nsabulous\nsabulum\nsaburra\nsaburral\nsaburration\nsabutan\nsabzi\nSac\nsac\nSacae\nsacalait\nsacaline\nsacaton\nsacatra\nsacbrood\nsaccade\nsaccadic\nSaccammina\nsaccate\nsaccated\nSaccha\nsaccharamide\nsaccharase\nsaccharate\nsaccharated\nsaccharephidrosis\nsaccharic\nsaccharide\nsacchariferous\nsaccharification\nsaccharifier\nsaccharify\nsaccharilla\nsaccharimeter\nsaccharimetric\nsaccharimetrical\nsaccharimetry\nsaccharin\nsaccharinate\nsaccharinated\nsaccharine\nsaccharineish\nsaccharinely\nsaccharinic\nsaccharinity\nsaccharization\nsaccharize\nsaccharobacillus\nsaccharobiose\nsaccharobutyric\nsaccharoceptive\nsaccharoceptor\nsaccharochemotropic\nsaccharocolloid\nsaccharofarinaceous\nsaccharogalactorrhea\nsaccharogenic\nsaccharohumic\nsaccharoid\nsaccharoidal\nsaccharolactonic\nsaccharolytic\nsaccharometabolic\nsaccharometabolism\nsaccharometer\nsaccharometric\nsaccharometry\nsaccharomucilaginous\nSaccharomyces\nsaccharomyces\nSaccharomycetaceae\nsaccharomycetaceous\nSaccharomycetales\nsaccharomycete\nSaccharomycetes\nsaccharomycetic\nsaccharomycosis\nsaccharon\nsaccharonate\nsaccharone\nsaccharonic\nsaccharophylly\nsaccharorrhea\nsaccharoscope\nsaccharose\nsaccharostarchy\nsaccharosuria\nsaccharotriose\nsaccharous\nsaccharulmic\nsaccharulmin\nSaccharum\nsaccharum\nsaccharuria\nsacciferous\nsacciform\nSaccobranchiata\nsaccobranchiate\nSaccobranchus\nsaccoderm\nSaccolabium\nsaccolabium\nsaccomyian\nsaccomyid\nSaccomyidae\nSaccomyina\nsaccomyine\nsaccomyoid\nSaccomyoidea\nsaccomyoidean\nSaccomys\nSaccopharyngidae\nSaccopharynx\nSaccorhiza\nsaccos\nsaccular\nsacculate\nsacculated\nsacculation\nsaccule\nSacculina\nsacculoutricular\nsacculus\nsaccus\nsacellum\nsacerdocy\nsacerdotage\nsacerdotal\nsacerdotalism\nsacerdotalist\nsacerdotalize\nsacerdotally\nsacerdotical\nsacerdotism\nsachamaker\nsachem\nsachemdom\nsachemic\nsachemship\nsachet\nSacheverell\nSacian\nsack\nsackage\nsackamaker\nsackbag\nsackbut\nsackcloth\nsackclothed\nsackdoudle\nsacked\nsacken\nsacker\nsackful\nsacking\nsackless\nsacklike\nsackmaker\nsackmaking\nsackman\nsacktime\nsaclike\nsaco\nsacope\nsacque\nsacra\nsacrad\nsacral\nsacralgia\nsacralization\nsacrament\nsacramental\nsacramentalism\nsacramentalist\nsacramentality\nsacramentally\nsacramentalness\nSacramentarian\nsacramentarian\nsacramentarianism\nsacramentarist\nSacramentary\nsacramentary\nsacramenter\nsacramentism\nsacramentize\nSacramento\nsacramentum\nsacraria\nsacrarial\nsacrarium\nsacrectomy\nsacred\nsacredly\nsacredness\nsacrificable\nsacrificant\nSacrificati\nsacrification\nsacrificator\nsacrificatory\nsacrificature\nsacrifice\nsacrificer\nsacrificial\nsacrificially\nsacrificing\nsacrilege\nsacrileger\nsacrilegious\nsacrilegiously\nsacrilegiousness\nsacrilegist\nsacrilumbal\nsacrilumbalis\nsacring\nSacripant\nsacrist\nsacristan\nsacristy\nsacro\nsacrocaudal\nsacrococcygeal\nsacrococcygean\nsacrococcygeus\nsacrococcyx\nsacrocostal\nsacrocotyloid\nsacrocotyloidean\nsacrocoxalgia\nsacrocoxitis\nsacrodorsal\nsacrodynia\nsacrofemoral\nsacroiliac\nsacroinguinal\nsacroischiac\nsacroischiadic\nsacroischiatic\nsacrolumbal\nsacrolumbalis\nsacrolumbar\nsacropectineal\nsacroperineal\nsacropictorial\nsacroposterior\nsacropubic\nsacrorectal\nsacrosanct\nsacrosanctity\nsacrosanctness\nsacrosciatic\nsacrosecular\nsacrospinal\nsacrospinalis\nsacrospinous\nsacrotomy\nsacrotuberous\nsacrovertebral\nsacrum\nsad\nSadachbia\nSadalmelik\nSadalsuud\nsadden\nsaddening\nsaddeningly\nsaddik\nsaddirham\nsaddish\nsaddle\nsaddleback\nsaddlebag\nsaddlebow\nsaddlecloth\nsaddled\nsaddleleaf\nsaddleless\nsaddlelike\nsaddlenose\nsaddler\nsaddlery\nsaddlesick\nsaddlesore\nsaddlesoreness\nsaddlestead\nsaddletree\nsaddlewise\nsaddling\nSadducaic\nSadducean\nSadducee\nSadduceeism\nSadduceeist\nSadducism\nSadducize\nsade\nsadh\nsadhe\nsadhearted\nsadhu\nsadic\nSadie\nsadiron\nsadism\nsadist\nsadistic\nsadistically\nSadite\nsadly\nsadness\nsado\nsadomasochism\nSadr\nsadr\nsaecula\nsaeculum\nSaeima\nsaernaite\nsaeter\nsaeume\nSafar\nsafari\nSafavi\nSafawid\nsafe\nsafeblower\nsafeblowing\nsafebreaker\nsafebreaking\nsafecracking\nsafeguard\nsafeguarder\nsafehold\nsafekeeper\nsafekeeping\nsafelight\nsafely\nsafemaker\nsafemaking\nsafen\nsafener\nsafeness\nsafety\nSaffarian\nSaffarid\nsaffian\nsafflor\nsafflorite\nsafflow\nsafflower\nsaffron\nsaffroned\nsaffrontree\nsaffronwood\nsaffrony\nSafi\nSafine\nSafini\nsafranin\nsafranine\nsafranophile\nsafrole\nsaft\nsag\nsaga\nsagaciate\nsagacious\nsagaciously\nsagaciousness\nsagacity\nSagai\nsagaie\nsagaman\nsagamite\nsagamore\nsagapenum\nsagathy\nsage\nsagebrush\nsagebrusher\nsagebush\nsageleaf\nsagely\nsagene\nsageness\nsagenite\nsagenitic\nSageretia\nsagerose\nsageship\nsagewood\nsagger\nsagging\nsaggon\nsaggy\nsaghavart\nSagina\nsaginate\nsagination\nsaging\nSagitarii\nsagitta\nsagittal\nsagittally\nSagittaria\nSagittariid\nSagittarius\nsagittarius\nSagittary\nsagittary\nsagittate\nSagittid\nsagittiferous\nsagittiform\nsagittocyst\nsagittoid\nsagless\nsago\nsagoin\nsagolike\nSagra\nsaguaro\nSaguerus\nsagum\nsaguran\nsagvandite\nsagwire\nsagy\nsah\nSahadeva\nSahaptin\nSahara\nSaharan\nSaharian\nSaharic\nsahh\nsahib\nSahibah\nSahidic\nsahme\nSaho\nsahoukar\nsahukar\nsai\nsaic\nsaid\nSaidi\nSaify\nsaiga\nSaiid\nsail\nsailable\nsailage\nsailboat\nsailcloth\nsailed\nsailer\nsailfish\nsailflying\nsailing\nsailingly\nsailless\nsailmaker\nsailmaking\nsailor\nsailoring\nsailorizing\nsailorless\nsailorlike\nsailorly\nsailorman\nsailorproof\nsailplane\nsailship\nsailsman\nsaily\nsaim\nsaimiri\nsaimy\nsain\nSainfoin\nsaint\nsaintdom\nsainted\nsaintess\nsainthood\nsaintish\nsaintism\nsaintless\nsaintlike\nsaintlily\nsaintliness\nsaintling\nsaintly\nsaintologist\nsaintology\nSaintpaulia\nsaintship\nsaip\nSaiph\nsair\nsairly\nsairve\nsairy\nSaite\nsaithe\nSaitic\nSaiva\nSaivism\nsaj\nsajou\nSak\nSaka\nSakai\nSakalava\nsake\nsakeber\nsakeen\nSakel\nSakelarides\nSakell\nSakellaridis\nsaker\nsakeret\nSakha\nsaki\nsakieh\nSakkara\nSaktism\nsakulya\nSakyamuni\nSal\nsal\nsalaam\nsalaamlike\nsalability\nsalable\nsalableness\nsalably\nsalaceta\nsalacious\nsalaciously\nsalaciousness\nsalacity\nsalacot\nsalad\nsalading\nsalago\nsalagrama\nsalal\nsalamandarin\nsalamander\nsalamanderlike\nSalamandra\nsalamandrian\nSalamandridae\nsalamandriform\nSalamandrina\nsalamandrine\nsalamandroid\nsalambao\nSalaminian\nsalamo\nsalampore\nsalangane\nsalangid\nSalangidae\nSalar\nsalar\nsalariat\nsalaried\nsalary\nsalaryless\nsalat\nsalay\nsale\nsalegoer\nsalele\nsalema\nsalenixon\nsalep\nsaleratus\nsaleroom\nsalesclerk\nSalesian\nsaleslady\nsalesman\nsalesmanship\nsalespeople\nsalesperson\nsalesroom\nsaleswoman\nsalework\nsaleyard\nsalfern\nSalian\nSaliaric\nSalic\nsalic\nSalicaceae\nsalicaceous\nSalicales\nSalicariaceae\nsalicetum\nsalicin\nsalicional\nsalicorn\nSalicornia\nsalicyl\nsalicylal\nsalicylaldehyde\nsalicylamide\nsalicylanilide\nsalicylase\nsalicylate\nsalicylic\nsalicylide\nsalicylidene\nsalicylism\nsalicylize\nsalicylous\nsalicyluric\nsalicylyl\nsalience\nsalient\nSalientia\nsalientian\nsaliently\nsaliferous\nsalifiable\nsalification\nsalify\nsaligenin\nsaligot\nsalimeter\nsalimetry\nSalina\nsalina\nSalinan\nsalination\nsaline\nSalinella\nsalinelle\nsalineness\nsaliniferous\nsalinification\nsaliniform\nsalinity\nsalinize\nsalinometer\nsalinometry\nsalinosulphureous\nsalinoterreous\nSalisburia\nSalish\nSalishan\nsalite\nsalited\nSaliva\nsaliva\nsalival\nSalivan\nsalivant\nsalivary\nsalivate\nsalivation\nsalivator\nsalivatory\nsalivous\nSalix\nsalix\nsalle\nsallee\nsalleeman\nsallenders\nsallet\nsallier\nsalloo\nsallow\nsallowish\nsallowness\nsallowy\nSally\nsally\nSallybloom\nsallyman\nsallywood\nSalm\nsalma\nsalmagundi\nsalmiac\nsalmine\nsalmis\nSalmo\nSalmon\nsalmon\nsalmonberry\nSalmonella\nsalmonella\nsalmonellae\nsalmonellosis\nsalmonet\nsalmonid\nSalmonidae\nsalmoniform\nsalmonlike\nsalmonoid\nSalmonoidea\nSalmonoidei\nsalmonsite\nsalmwood\nsalnatron\nSalol\nsalol\nSalome\nsalometer\nsalometry\nsalomon\nSalomonia\nSalomonian\nSalomonic\nsalon\nsaloon\nsaloonist\nsaloonkeeper\nsaloop\nSalopian\nsalopian\nsalp\nSalpa\nsalpa\nsalpacean\nsalpian\nsalpicon\nSalpidae\nsalpiform\nSalpiglossis\nsalpiglossis\nsalpingectomy\nsalpingemphraxis\nsalpinges\nsalpingian\nsalpingion\nsalpingitic\nsalpingitis\nsalpingocatheterism\nsalpingocele\nsalpingocyesis\nsalpingomalleus\nsalpingonasal\nsalpingopalatal\nsalpingopalatine\nsalpingoperitonitis\nsalpingopexy\nsalpingopharyngeal\nsalpingopharyngeus\nsalpingopterygoid\nsalpingorrhaphy\nsalpingoscope\nsalpingostaphyline\nsalpingostenochoria\nsalpingostomatomy\nsalpingostomy\nsalpingotomy\nsalpinx\nsalpoid\nsalse\nsalsifis\nsalsify\nsalsilla\nSalsola\nSalsolaceae\nsalsolaceous\nsalsuginous\nsalt\nsalta\nsaltant\nsaltarella\nsaltarello\nsaltary\nsaltate\nsaltation\nsaltativeness\nSaltator\nsaltator\nSaltatoria\nsaltatorial\nsaltatorian\nsaltatoric\nsaltatorious\nsaltatory\nsaltbush\nsaltcat\nsaltcatch\nsaltcellar\nsalted\nsaltee\nsalten\nsalter\nsaltern\nsaltery\nsaltfat\nsaltfoot\nsalthouse\nsaltier\nsaltierra\nsaltierwise\nSaltigradae\nsaltigrade\nsaltimbanco\nsaltimbank\nsaltimbankery\nsaltine\nsaltiness\nsalting\nsaltish\nsaltishly\nsaltishness\nsaltless\nsaltlessness\nsaltly\nsaltmaker\nsaltmaking\nsaltman\nsaltmouth\nsaltness\nsaltometer\nsaltorel\nsaltpan\nsaltpeter\nsaltpetrous\nsaltpond\nsaltspoon\nsaltspoonful\nsaltsprinkler\nsaltus\nsaltweed\nsaltwife\nsaltworker\nsaltworks\nsaltwort\nsalty\nsalubrify\nsalubrious\nsalubriously\nsalubriousness\nsalubrity\nsaluki\nsalung\nsalutarily\nsalutariness\nsalutary\nsalutation\nsalutational\nsalutationless\nsalutatious\nsalutatorian\nsalutatorily\nsalutatorium\nsalutatory\nsalute\nsaluter\nsalutiferous\nsalutiferously\nSalva\nsalvability\nsalvable\nsalvableness\nsalvably\nSalvadora\nsalvadora\nSalvadoraceae\nsalvadoraceous\nSalvadoran\nSalvadorian\nsalvage\nsalvageable\nsalvagee\nsalvageproof\nsalvager\nsalvaging\nSalvarsan\nsalvarsan\nsalvatella\nsalvation\nsalvational\nsalvationism\nsalvationist\nsalvatory\nsalve\nsalveline\nSalvelinus\nsalver\nsalverform\nSalvia\nsalvianin\nsalvific\nsalvifical\nsalvifically\nSalvinia\nSalviniaceae\nsalviniaceous\nSalviniales\nsalviol\nsalvo\nsalvor\nsalvy\nSalwey\nsalzfelle\nSam\nsam\nSamadera\nsamadh\nsamadhi\nsamaj\nSamal\nsaman\nSamandura\nSamani\nSamanid\nSamantha\nsamara\nsamaria\nsamariform\nSamaritan\nSamaritaness\nSamaritanism\nsamarium\nSamarkand\nsamaroid\nsamarra\nsamarskite\nSamas\nsamba\nSambal\nsambal\nsambaqui\nsambar\nSambara\nSambathe\nsambhogakaya\nSambo\nsambo\nSambucaceae\nSambucus\nsambuk\nsambuke\nsambunigrin\nSamburu\nsame\nsamekh\nsamel\nsameliness\nsamely\nsamen\nsameness\nsamesome\nSamgarnebo\nsamh\nSamhain\nsamhita\nSamian\nsamiel\nSamir\nsamiresite\nsamiri\nsamisen\nSamish\nsamite\nsamkara\nsamlet\nsammel\nsammer\nsammier\nSammy\nsammy\nSamnani\nSamnite\nSamoan\nSamogitian\nsamogonka\nSamolus\nSamosatenian\nsamothere\nSamotherium\nSamothracian\nsamovar\nSamoyed\nSamoyedic\nsamp\nsampaguita\nsampaloc\nsampan\nsamphire\nsampi\nsample\nsampleman\nsampler\nsamplery\nsampling\nSampsaean\nSamsam\nsamsara\nsamshu\nSamsien\nsamskara\nSamson\nsamson\nSamsoness\nSamsonian\nSamsonic\nSamsonistic\nsamsonite\nSamucan\nSamucu\nSamuel\nsamurai\nSamydaceae\nSan\nsan\nsanability\nsanable\nsanableness\nsanai\nSanand\nsanative\nsanativeness\nsanatoria\nsanatorium\nsanatory\nSanballat\nsanbenito\nSanche\nsancho\nsanct\nsancta\nsanctanimity\nsanctifiable\nsanctifiableness\nsanctifiably\nsanctificate\nsanctification\nsanctified\nsanctifiedly\nsanctifier\nsanctify\nsanctifyingly\nsanctilogy\nsanctiloquent\nsanctimonial\nsanctimonious\nsanctimoniously\nsanctimoniousness\nsanctimony\nsanction\nsanctionable\nsanctionary\nsanctionative\nsanctioner\nsanctionist\nsanctionless\nsanctionment\nsanctitude\nsanctity\nsanctologist\nSanctology\nsanctorium\nsanctuaried\nsanctuarize\nsanctuary\nsanctum\nSanctus\nSancy\nsancyite\nsand\nsandak\nsandal\nsandaled\nsandaliform\nsandaling\nsandalwood\nsandalwort\nsandan\nsandarac\nsandaracin\nsandastros\nSandawe\nsandbag\nsandbagger\nsandbank\nsandbin\nsandblast\nsandboard\nsandbox\nsandboy\nsandbur\nsandclub\nsandculture\nsanded\nSandeep\nSandemanian\nSandemanianism\nSandemanism\nSander\nsander\nsanderling\nsanders\nsandfish\nsandflower\nsandglass\nsandheat\nsandhi\nsandiferous\nsandiness\nsanding\nSandip\nsandiver\nsandix\nsandlapper\nsandless\nsandlike\nsandling\nsandman\nsandnatter\nsandnecker\nsandpaper\nsandpaperer\nsandpeep\nsandpiper\nsandproof\nSandra\nsandrock\nsandspit\nsandspur\nsandstay\nsandstone\nsandstorm\nsandust\nsandweed\nsandweld\nsandwich\nsandwood\nsandworm\nsandwort\nSandy\nsandy\nsandyish\nsane\nsanely\nsaneness\nSanetch\nSanford\nSanforized\nsang\nsanga\nSangamon\nsangar\nsangaree\nsangei\nsanger\nsangerbund\nsangerfest\nSanggil\nsangha\nSangho\nSangir\nSangirese\nsanglant\nsangley\nSangraal\nsangreeroot\nsangrel\nsangsue\nsanguicolous\nsanguifacient\nsanguiferous\nsanguification\nsanguifier\nsanguifluous\nsanguimotor\nsanguimotory\nsanguinaceous\nSanguinaria\nsanguinarily\nsanguinariness\nsanguinary\nsanguine\nsanguineless\nsanguinely\nsanguineness\nsanguineobilious\nsanguineophlegmatic\nsanguineous\nsanguineousness\nsanguineovascular\nsanguinicolous\nsanguiniferous\nsanguinification\nsanguinism\nsanguinity\nsanguinivorous\nsanguinocholeric\nsanguinolency\nsanguinolent\nsanguinopoietic\nsanguinous\nSanguisorba\nSanguisorbaceae\nsanguisuge\nsanguisugent\nsanguisugous\nsanguivorous\nSanhedrim\nSanhedrin\nSanhedrist\nSanhita\nsanicle\nSanicula\nsanidine\nsanidinic\nsanidinite\nsanies\nsanification\nsanify\nsanious\nsanipractic\nsanitarian\nsanitarily\nsanitarist\nsanitarium\nsanitary\nsanitate\nsanitation\nsanitationist\nsanitist\nsanitize\nSanity\nsanity\nsanjak\nsanjakate\nsanjakbeg\nsanjakship\nSanjay\nSanjeev\nSanjib\nsank\nsankha\nSankhya\nsannaite\nSannoisian\nsannup\nsannyasi\nsannyasin\nsanopurulent\nsanoserous\nSanpoil\nsans\nSansar\nsansei\nSansevieria\nsanshach\nsansi\nSanskrit\nSanskritic\nSanskritist\nSanskritization\nSanskritize\nsant\nSanta\nSantal\nsantal\nSantalaceae\nsantalaceous\nSantalales\nSantali\nsantalic\nsantalin\nsantalol\nSantalum\nsantalwood\nsantapee\nSantee\nsantene\nSantiago\nsantimi\nsantims\nsantir\nSanto\nSantolina\nsanton\nsantonica\nsantonin\nsantoninic\nsantorinite\nSantos\nsanukite\nSanvitalia\nSanyakoan\nsao\nSaoshyant\nsap\nsapa\nsapajou\nsapan\nsapanwood\nsapbush\nsapek\nSaperda\nsapful\nSapharensian\nsaphead\nsapheaded\nsapheadedness\nsaphena\nsaphenal\nsaphenous\nsaphie\nsapid\nsapidity\nsapidless\nsapidness\nsapience\nsapiency\nsapient\nsapiential\nsapientially\nsapientize\nsapiently\nsapin\nsapinda\nSapindaceae\nsapindaceous\nSapindales\nsapindaship\nSapindus\nSapium\nsapiutan\nsaple\nsapless\nsaplessness\nsapling\nsaplinghood\nsapo\nsapodilla\nsapogenin\nsaponaceous\nsaponaceousness\nsaponacity\nSaponaria\nsaponarin\nsaponary\nSaponi\nsaponifiable\nsaponification\nsaponifier\nsaponify\nsaponin\nsaponite\nsapophoric\nsapor\nsaporific\nsaporosity\nsaporous\nSapota\nsapota\nSapotaceae\nsapotaceous\nsapote\nsapotilha\nsapotilla\nsapotoxin\nsappanwood\nsappare\nsapper\nSapphic\nsapphic\nsapphire\nsapphireberry\nsapphired\nsapphirewing\nsapphiric\nsapphirine\nSapphism\nSapphist\nSappho\nsappiness\nsapping\nsapples\nsappy\nsapremia\nsapremic\nsaprine\nsaprocoll\nsaprodil\nsaprodontia\nsaprogenic\nsaprogenous\nSaprolegnia\nSaprolegniaceae\nsaprolegniaceous\nSaprolegniales\nsaprolegnious\nsaprolite\nsaprolitic\nsapropel\nsapropelic\nsapropelite\nsaprophagan\nsaprophagous\nsaprophile\nsaprophilous\nsaprophyte\nsaprophytic\nsaprophytically\nsaprophytism\nsaprostomous\nsaprozoic\nsapsago\nsapskull\nsapsuck\nsapsucker\nsapucaia\nsapucainha\nsapwood\nsapwort\nSaqib\nsar\nSara\nsaraad\nsarabacan\nSarabaite\nsaraband\nSaracen\nSaracenian\nSaracenic\nSaracenical\nSaracenism\nSaracenlike\nSarada\nsaraf\nSarah\nSarakolet\nSarakolle\nSaramaccaner\nSaran\nsarangi\nsarangousty\nSaratoga\nSaratogan\nSaravan\nSarawakese\nsarawakite\nSarawan\nsarbacane\nsarbican\nsarcasm\nsarcasmproof\nsarcast\nsarcastic\nsarcastical\nsarcastically\nsarcasticalness\nsarcasticness\nsarcelle\nsarcenet\nsarcilis\nSarcina\nsarcine\nsarcitis\nsarcle\nsarcler\nsarcoadenoma\nSarcobatus\nsarcoblast\nsarcocarcinoma\nsarcocarp\nsarcocele\nSarcococca\nSarcocolla\nsarcocollin\nsarcocyst\nSarcocystidea\nsarcocystidean\nsarcocystidian\nSarcocystis\nsarcocystoid\nsarcocyte\nsarcode\nsarcoderm\nSarcodes\nsarcodic\nsarcodictyum\nSarcodina\nsarcodous\nsarcoenchondroma\nsarcogenic\nsarcogenous\nsarcoglia\nSarcogyps\nsarcoid\nsarcolactic\nsarcolemma\nsarcolemmic\nsarcolemmous\nsarcoline\nsarcolite\nsarcologic\nsarcological\nsarcologist\nsarcology\nsarcolysis\nsarcolyte\nsarcolytic\nsarcoma\nsarcomatoid\nsarcomatosis\nsarcomatous\nsarcomere\nSarcophaga\nsarcophagal\nsarcophagi\nsarcophagic\nsarcophagid\nSarcophagidae\nsarcophagine\nsarcophagize\nsarcophagous\nsarcophagus\nsarcophagy\nsarcophile\nsarcophilous\nSarcophilus\nsarcoplasm\nsarcoplasma\nsarcoplasmatic\nsarcoplasmic\nsarcoplast\nsarcoplastic\nsarcopoietic\nSarcopsylla\nSarcopsyllidae\nSarcoptes\nsarcoptic\nsarcoptid\nSarcoptidae\nSarcorhamphus\nsarcosepsis\nsarcosepta\nsarcoseptum\nsarcosine\nsarcosis\nsarcosoma\nsarcosperm\nsarcosporid\nSarcosporida\nSarcosporidia\nsarcosporidial\nsarcosporidian\nsarcosporidiosis\nsarcostosis\nsarcostyle\nsarcotheca\nsarcotherapeutics\nsarcotherapy\nsarcotic\nsarcous\nSarcura\nSard\nsard\nsardachate\nSardanapalian\nSardanapalus\nsardel\nSardian\nsardine\nsardinewise\nSardinian\nsardius\nSardoin\nsardonic\nsardonical\nsardonically\nsardonicism\nsardonyx\nsare\nsargasso\nSargassum\nsargassum\nsargo\nSargonic\nSargonid\nSargonide\nsargus\nsari\nsarif\nSarigue\nsarigue\nsarinda\nsarip\nsark\nsarkar\nsarkful\nsarkical\nsarkine\nsarking\nsarkinite\nsarkit\nsarkless\nsarlak\nsarlyk\nSarmatian\nSarmatic\nsarmatier\nsarment\nsarmenta\nsarmentaceous\nsarmentiferous\nsarmentose\nsarmentous\nsarmentum\nsarna\nsarod\nsaron\nsarong\nsaronic\nsaronide\nsaros\nSarothamnus\nSarothra\nsarothrum\nsarpler\nsarpo\nsarra\nSarracenia\nsarracenia\nSarraceniaceae\nsarraceniaceous\nsarracenial\nSarraceniales\nsarraf\nsarrazin\nsarrusophone\nsarrusophonist\nsarsa\nsarsaparilla\nsarsaparillin\nSarsar\nSarsechim\nsarsen\nsarsenet\nSarsi\nSart\nsart\nsartage\nsartain\nSartish\nsartor\nsartoriad\nsartorial\nsartorially\nsartorian\nsartorite\nsartorius\nSaruk\nsarus\nSarvarthasiddha\nsarwan\nSarzan\nsasa\nsasan\nsasani\nsasanqua\nsash\nsashay\nsashery\nsashing\nsashless\nsasin\nsasine\nsaskatoon\nsassaby\nsassafac\nsassafrack\nsassafras\nSassak\nSassan\nSassanian\nSassanid\nSassanidae\nSassanide\nSassenach\nsassolite\nsassy\nsassywood\nSastean\nsat\nsatable\nSatan\nsatan\nSatanael\nSatanas\nsatang\nsatanic\nsatanical\nsatanically\nsatanicalness\nSatanism\nSatanist\nsatanist\nSatanistic\nSatanity\nsatanize\nSatanology\nSatanophany\nSatanophil\nSatanophobia\nSatanship\nsatara\nsatchel\nsatcheled\nsate\nsateen\nsateenwood\nsateless\nsatelles\nsatellitarian\nsatellite\nsatellited\nsatellitesimal\nsatellitian\nsatellitic\nsatellitious\nsatellitium\nsatellitoid\nsatellitory\nsatelloid\nsatiability\nsatiable\nsatiableness\nsatiably\nsatiate\nsatiation\nSatieno\nsatient\nsatiety\nsatin\nsatinbush\nsatine\nsatined\nsatinette\nsatinfin\nsatinflower\nsatinite\nsatinity\nsatinize\nsatinleaf\nsatinlike\nsatinpod\nsatinwood\nsatiny\nsatire\nsatireproof\nsatiric\nsatirical\nsatirically\nsatiricalness\nsatirist\nsatirizable\nsatirize\nsatirizer\nsatisdation\nsatisdiction\nsatisfaction\nsatisfactional\nsatisfactionist\nsatisfactionless\nsatisfactive\nsatisfactorily\nsatisfactoriness\nsatisfactorious\nsatisfactory\nsatisfiable\nsatisfice\nsatisfied\nsatisfiedly\nsatisfiedness\nsatisfier\nsatisfy\nsatisfying\nsatisfyingly\nsatisfyingness\nsatispassion\nsatlijk\nSatrae\nsatrap\nsatrapal\nsatrapess\nsatrapic\nsatrapical\nsatrapy\nsatron\nSatsuma\nsattle\nsattva\nsatura\nsaturability\nsaturable\nsaturant\nsaturate\nsaturated\nsaturater\nsaturation\nsaturator\nSaturday\nSatureia\nSaturn\nSaturnal\nSaturnale\nSaturnalia\nsaturnalia\nSaturnalian\nsaturnalian\nSaturnia\nSaturnian\nsaturnian\nSaturnicentric\nsaturniid\nSaturniidae\nSaturnine\nsaturnine\nsaturninely\nsaturnineness\nsaturninity\nsaturnism\nsaturnity\nsaturnize\nSaturnus\nsatyagrahi\nsatyashodak\nsatyr\nsatyresque\nsatyress\nsatyriasis\nsatyric\nSatyridae\nSatyrinae\nsatyrine\nsatyrion\nsatyrism\nsatyrlike\nsatyromaniac\nsauce\nsauceboat\nsaucebox\nsaucedish\nsauceless\nsauceline\nsaucemaker\nsaucemaking\nsauceman\nsaucepan\nsauceplate\nsaucer\nsaucerful\nsaucerleaf\nsaucerless\nsaucerlike\nsaucily\nsauciness\nsaucy\nSauerbraten\nsauerkraut\nsauf\nsauger\nsaugh\nsaughen\nSaul\nsauld\nsaulie\nsault\nsaulter\nSaulteur\nsaum\nsaumon\nsaumont\nSaumur\nSaumya\nsauna\nsaunders\nsaunderswood\nsaunter\nsaunterer\nsauntering\nsaunteringly\nsauqui\nsaur\nSaura\nSauraseni\nSaurauia\nSaurauiaceae\nsaurel\nSauria\nsaurian\nsauriasis\nsauriosis\nSaurischia\nsaurischian\nSauroctonos\nsaurodont\nSaurodontidae\nSaurognathae\nsaurognathism\nsaurognathous\nSauromatian\nsaurophagous\nsauropod\nSauropoda\nsauropodous\nsauropsid\nSauropsida\nsauropsidan\nsauropsidian\nSauropterygia\nsauropterygian\nSaurornithes\nsaurornithic\nSaururaceae\nsaururaceous\nSaururae\nsaururan\nsaururous\nSaururus\nsaury\nsausage\nsausagelike\nsausinger\nSaussurea\nsaussurite\nsaussuritic\nsaussuritization\nsaussuritize\nsaut\nsaute\nsauterelle\nsauterne\nsauternes\nsauteur\nsauty\nSauvagesia\nsauve\nsauvegarde\nsavable\nsavableness\nsavacu\nsavage\nsavagedom\nsavagely\nsavageness\nsavagerous\nsavagery\nsavagess\nsavagism\nsavagize\nsavanilla\nsavanna\nSavannah\nsavant\nSavara\nsavarin\nsavation\nsave\nsaved\nsaveloy\nsaver\nSavery\nsavin\nsaving\nsavingly\nsavingness\nsavior\nsavioress\nsaviorhood\nsaviorship\nSaviour\nSavitar\nSavitri\nsavola\nSavonarolist\nSavonnerie\nsavor\nsavored\nsavorer\nsavorily\nsavoriness\nsavoringly\nsavorless\nsavorous\nsavorsome\nsavory\nsavour\nsavoy\nSavoyard\nsavoyed\nsavoying\nsavssat\nsavvy\nsaw\nsawah\nSawaiori\nsawali\nSawan\nsawarra\nsawback\nsawbelly\nsawbill\nsawbones\nsawbuck\nsawbwa\nsawder\nsawdust\nsawdustish\nsawdustlike\nsawdusty\nsawed\nsawer\nsawfish\nsawfly\nsawhorse\nsawing\nsawish\nsawlike\nsawmaker\nsawmaking\nsawman\nsawmill\nsawmiller\nsawmilling\nsawmon\nsawmont\nsawn\nSawney\nsawney\nsawsetter\nsawsharper\nsawsmith\nsawt\nsawway\nsawworker\nsawwort\nsawyer\nsax\nsaxatile\nsaxboard\nsaxcornet\nSaxe\nsaxhorn\nSaxicava\nsaxicavous\nSaxicola\nsaxicole\nSaxicolidae\nSaxicolinae\nsaxicoline\nsaxicolous\nSaxifraga\nSaxifragaceae\nsaxifragaceous\nsaxifragant\nsaxifrage\nsaxifragous\nsaxifrax\nsaxigenous\nSaxish\nSaxon\nSaxondom\nSaxonian\nSaxonic\nSaxonical\nSaxonically\nSaxonish\nSaxonism\nSaxonist\nsaxonite\nSaxonization\nSaxonize\nSaxonly\nSaxony\nsaxophone\nsaxophonist\nsaxotromba\nsaxpence\nsaxten\nsaxtie\nsaxtuba\nsay\nsaya\nsayability\nsayable\nsayableness\nSayal\nsayer\nsayette\nsayid\nsaying\nsazen\nSbaikian\nsblood\nsbodikins\nscab\nscabbard\nscabbardless\nscabbed\nscabbedness\nscabbery\nscabbily\nscabbiness\nscabble\nscabbler\nscabbling\nscabby\nscabellum\nscaberulous\nscabid\nscabies\nscabietic\nscabinus\nScabiosa\nscabiosity\nscabious\nscabish\nscabland\nscabrate\nscabrescent\nscabrid\nscabridity\nscabridulous\nscabrities\nscabriusculose\nscabriusculous\nscabrosely\nscabrous\nscabrously\nscabrousness\nscabwort\nscacchic\nscacchite\nscad\nscaddle\nscads\nScaean\nscaff\nscaffer\nscaffery\nscaffie\nscaffle\nscaffold\nscaffoldage\nscaffolder\nscaffolding\nscaglia\nscagliola\nscagliolist\nscala\nscalable\nscalableness\nscalably\nscalage\nscalar\nscalare\nScalaria\nscalarian\nscalariform\nScalariidae\nscalarwise\nscalation\nscalawag\nscalawaggery\nscalawaggy\nscald\nscaldberry\nscalded\nscalder\nscaldfish\nscaldic\nscalding\nscaldweed\nscaldy\nscale\nscaleback\nscalebark\nscaleboard\nscaled\nscaledrake\nscalefish\nscaleful\nscaleless\nscalelet\nscalelike\nscaleman\nscalena\nscalene\nscalenohedral\nscalenohedron\nscalenon\nscalenous\nscalenum\nscalenus\nscalepan\nscaleproof\nscaler\nscales\nscalesman\nscalesmith\nscaletail\nscalewing\nscalewise\nscalework\nscalewort\nscaliger\nscaliness\nscaling\nscall\nscalled\nscallion\nscallola\nscallom\nscallop\nscalloper\nscalloping\nscallopwise\nscalma\nscaloni\nScalops\nScalopus\nscalp\nscalpeen\nscalpel\nscalpellar\nscalpellic\nscalpellum\nscalpellus\nscalper\nscalping\nscalpless\nscalpriform\nscalprum\nscalpture\nscalt\nscaly\nscalytail\nscam\nscamander\nScamandrius\nscamble\nscambler\nscambling\nscamell\nscamler\nscamles\nscammoniate\nscammonin\nscammony\nscammonyroot\nscamp\nscampavia\nscamper\nscamperer\nscamphood\nscamping\nscampingly\nscampish\nscampishly\nscampishness\nscampsman\nscan\nscandal\nscandalization\nscandalize\nscandalizer\nscandalmonger\nscandalmongering\nscandalmongery\nscandalmonging\nscandalous\nscandalously\nscandalousness\nscandalproof\nscandaroon\nscandent\nscandia\nScandian\nscandic\nscandicus\nScandinavia\nScandinavian\nScandinavianism\nscandium\nScandix\nScania\nScanian\nScanic\nscanmag\nscannable\nscanner\nscanning\nscanningly\nscansion\nscansionist\nScansores\nscansorial\nscansorious\nscant\nscanties\nscantily\nscantiness\nscantity\nscantle\nscantling\nscantlinged\nscantly\nscantness\nscanty\nscap\nscape\nscapegallows\nscapegoat\nscapegoatism\nscapegrace\nscapel\nscapeless\nscapement\nscapethrift\nscapha\nScaphander\nScaphandridae\nscaphion\nScaphiopodidae\nScaphiopus\nscaphism\nscaphite\nScaphites\nScaphitidae\nscaphitoid\nscaphocephalic\nscaphocephalism\nscaphocephalous\nscaphocephalus\nscaphocephaly\nscaphocerite\nscaphoceritic\nscaphognathite\nscaphognathitic\nscaphoid\nscapholunar\nscaphopod\nScaphopoda\nscaphopodous\nscapiform\nscapigerous\nscapoid\nscapolite\nscapolitization\nscapose\nscapple\nscappler\nscapula\nscapulalgia\nscapular\nscapulare\nscapulary\nscapulated\nscapulectomy\nscapulet\nscapulimancy\nscapuloaxillary\nscapulobrachial\nscapuloclavicular\nscapulocoracoid\nscapulodynia\nscapulohumeral\nscapulopexy\nscapuloradial\nscapulospinal\nscapulothoracic\nscapuloulnar\nscapulovertebral\nscapus\nscar\nscarab\nscarabaean\nscarabaei\nscarabaeid\nScarabaeidae\nscarabaeidoid\nscarabaeiform\nScarabaeinae\nscarabaeoid\nscarabaeus\nscarabee\nscaraboid\nScaramouch\nscaramouch\nscarce\nscarcelins\nscarcely\nscarcement\nscarcen\nscarceness\nscarcity\nscare\nscarebabe\nscarecrow\nscarecrowish\nscarecrowy\nscareful\nscarehead\nscaremonger\nscaremongering\nscareproof\nscarer\nscaresome\nscarf\nscarface\nscarfed\nscarfer\nscarflike\nscarfpin\nscarfskin\nscarfwise\nscarfy\nscarid\nScaridae\nscarification\nscarificator\nscarifier\nscarify\nscarily\nscariose\nscarious\nscarlatina\nscarlatinal\nscarlatiniform\nscarlatinoid\nscarlatinous\nscarless\nscarlet\nscarletberry\nscarletseed\nscarlety\nscarman\nscarn\nscaroid\nscarp\nscarpines\nscarping\nscarpment\nscarproof\nscarred\nscarrer\nscarring\nscarry\nscart\nscarth\nScarus\nscarus\nscarved\nscary\nscase\nscasely\nscat\nscatch\nscathe\nscatheful\nscatheless\nscathelessly\nscathing\nscathingly\nScaticook\nscatland\nscatologia\nscatologic\nscatological\nscatology\nscatomancy\nscatophagid\nScatophagidae\nscatophagoid\nscatophagous\nscatophagy\nscatoscopy\nscatter\nscatterable\nscatteration\nscatteraway\nscatterbrain\nscatterbrained\nscatterbrains\nscattered\nscatteredly\nscatteredness\nscatterer\nscattergood\nscattering\nscatteringly\nscatterling\nscattermouch\nscattery\nscatty\nscatula\nscaturient\nscaul\nscaum\nscaup\nscauper\nscaur\nscaurie\nscaut\nscavage\nscavel\nscavenage\nscavenge\nscavenger\nscavengerism\nscavengership\nscavengery\nscavenging\nscaw\nscawd\nscawl\nscazon\nscazontic\nsceat\nscelalgia\nscelerat\nscelidosaur\nscelidosaurian\nscelidosauroid\nScelidosaurus\nScelidotherium\nSceliphron\nsceloncus\nSceloporus\nscelotyrbe\nscena\nscenario\nscenarioist\nscenarioization\nscenarioize\nscenarist\nscenarization\nscenarize\nscenary\nscend\nscene\nscenecraft\nScenedesmus\nsceneful\nsceneman\nscenery\nsceneshifter\nscenewright\nscenic\nscenical\nscenically\nscenist\nscenite\nscenograph\nscenographer\nscenographic\nscenographical\nscenographically\nscenography\nScenopinidae\nscent\nscented\nscenter\nscentful\nscenting\nscentless\nscentlessness\nscentproof\nscentwood\nscepsis\nscepter\nscepterdom\nsceptered\nscepterless\nsceptic\nsceptral\nsceptropherous\nsceptrosophy\nsceptry\nscerne\nsceuophorion\nsceuophylacium\nsceuophylax\nschaapsteker\nSchaefferia\nschairerite\nschalmei\nschalmey\nschalstein\nschanz\nschapbachite\nschappe\nschapped\nschapping\nscharf\nScharlachberger\nschatchen\nScheat\nSchedar\nschediasm\nschediastic\nSchedius\nschedular\nschedulate\nschedule\nschedulize\nscheelite\nscheffel\nschefferite\nschelling\nSchellingian\nSchellingianism\nSchellingism\nschelly\nscheltopusik\nschema\nschemata\nschematic\nschematically\nschematism\nschematist\nschematization\nschematize\nschematizer\nschematogram\nschematograph\nschematologetically\nschematomancy\nschematonics\nscheme\nschemeful\nschemeless\nschemer\nschemery\nscheming\nschemingly\nschemist\nschemy\nschene\nschepel\nschepen\nscherm\nscherzando\nscherzi\nscherzo\nschesis\nScheuchzeria\nScheuchzeriaceae\nscheuchzeriaceous\nschiavone\nSchiedam\nschiffli\nschiller\nschillerfels\nschillerization\nschillerize\nschilling\nschimmel\nschindylesis\nschindyletic\nSchinus\nschipperke\nSchisandra\nSchisandraceae\nschism\nschisma\nschismatic\nschismatical\nschismatically\nschismaticalness\nschismatism\nschismatist\nschismatize\nschismic\nschismless\nschist\nschistaceous\nschistic\nschistocelia\nschistocephalus\nSchistocerca\nschistocoelia\nschistocormia\nschistocormus\nschistocyte\nschistocytosis\nschistoglossia\nschistoid\nschistomelia\nschistomelus\nschistoprosopia\nschistoprosopus\nschistorrhachis\nschistoscope\nschistose\nschistosity\nSchistosoma\nschistosome\nschistosomia\nschistosomiasis\nschistosomus\nschistosternia\nschistothorax\nschistous\nschistus\nSchizaea\nSchizaeaceae\nschizaeaceous\nSchizanthus\nschizanthus\nschizaxon\nschizocarp\nschizocarpic\nschizocarpous\nschizochroal\nschizocoele\nschizocoelic\nschizocoelous\nschizocyte\nschizocytosis\nschizodinic\nschizogamy\nschizogenesis\nschizogenetic\nschizogenetically\nschizogenic\nschizogenous\nschizogenously\nschizognath\nSchizognathae\nschizognathism\nschizognathous\nschizogonic\nschizogony\nSchizogregarinae\nschizogregarine\nSchizogregarinida\nschizoid\nschizoidism\nSchizolaenaceae\nschizolaenaceous\nschizolite\nschizolysigenous\nSchizomeria\nschizomycete\nSchizomycetes\nschizomycetic\nschizomycetous\nschizomycosis\nSchizonemertea\nschizonemertean\nschizonemertine\nSchizoneura\nSchizonotus\nschizont\nschizopelmous\nSchizopetalon\nschizophasia\nSchizophragma\nschizophrene\nschizophrenia\nschizophreniac\nschizophrenic\nSchizophyceae\nSchizophyllum\nSchizophyta\nschizophyte\nschizophytic\nschizopod\nSchizopoda\nschizopodal\nschizopodous\nschizorhinal\nschizospore\nschizostele\nschizostelic\nschizostely\nschizothecal\nschizothoracic\nschizothyme\nschizothymia\nschizothymic\nschizotrichia\nSchizotrypanum\nschiztic\nSchlauraffenland\nSchleichera\nschlemiel\nschlemihl\nschlenter\nschlieren\nschlieric\nschloop\nSchmalkaldic\nschmaltz\nschmelz\nschmelze\nschnabel\nSchnabelkanne\nschnapper\nschnapps\nschnauzer\nschneider\nSchneiderian\nschnitzel\nschnorchel\nschnorkel\nschnorrer\nscho\nschochat\nschochet\nschoenobatic\nschoenobatist\nSchoenocaulon\nSchoenus\nschoenus\nSchoharie\nschola\nscholae\nscholaptitude\nscholar\nscholarch\nscholardom\nscholarian\nscholarism\nscholarless\nscholarlike\nscholarliness\nscholarly\nscholarship\nscholasm\nscholastic\nscholastical\nscholastically\nscholasticate\nscholasticism\nscholasticly\nscholia\nscholiast\nscholiastic\nscholion\nscholium\nSchomburgkia\nschone\nschonfelsite\nSchoodic\nSchool\nschool\nschoolable\nschoolbag\nschoolbook\nschoolbookish\nschoolboy\nschoolboydom\nschoolboyhood\nschoolboyish\nschoolboyishly\nschoolboyishness\nschoolboyism\nschoolbutter\nschoolcraft\nschooldame\nschooldom\nschooled\nschoolery\nschoolfellow\nschoolfellowship\nschoolful\nschoolgirl\nschoolgirlhood\nschoolgirlish\nschoolgirlishly\nschoolgirlishness\nschoolgirlism\nschoolgirly\nschoolgoing\nschoolhouse\nschooling\nschoolingly\nschoolish\nschoolkeeper\nschoolkeeping\nschoolless\nschoollike\nschoolmaam\nschoolmaamish\nschoolmaid\nschoolman\nschoolmaster\nschoolmasterhood\nschoolmastering\nschoolmasterish\nschoolmasterishly\nschoolmasterishness\nschoolmasterism\nschoolmasterly\nschoolmastership\nschoolmastery\nschoolmate\nschoolmiss\nschoolmistress\nschoolmistressy\nschoolroom\nschoolteacher\nschoolteacherish\nschoolteacherly\nschoolteachery\nschoolteaching\nschooltide\nschooltime\nschoolward\nschoolwork\nschoolyard\nschoon\nschooner\nSchopenhauereanism\nSchopenhauerian\nSchopenhauerism\nschoppen\nschorenbergite\nschorl\nschorlaceous\nschorlomite\nschorlous\nschorly\nschottische\nschottish\nschout\nschraubthaler\nSchrebera\nschreiner\nschreinerize\nschriesheimite\nSchrund\nschtoff\nschuh\nschuhe\nschuit\nschule\nschultenite\nschungite\nschuss\nschute\nschwa\nschwabacher\nSchwalbea\nschwarz\nSchwarzian\nschweizer\nschweizerkase\nSchwendenerian\nSchwenkfelder\nSchwenkfeldian\nSciadopitys\nSciaena\nsciaenid\nSciaenidae\nsciaeniform\nSciaeniformes\nsciaenoid\nscialytic\nsciamachy\nScian\nsciapod\nsciapodous\nSciara\nsciarid\nSciaridae\nSciarinae\nsciatheric\nsciatherical\nsciatherically\nsciatic\nsciatica\nsciatical\nsciatically\nsciaticky\nscibile\nscience\nscienced\nscient\nsciential\nscientician\nscientific\nscientifical\nscientifically\nscientificalness\nscientificogeographical\nscientificohistorical\nscientificophilosophical\nscientificopoetic\nscientificoreligious\nscientificoromantic\nscientintically\nscientism\nScientist\nscientist\nscientistic\nscientistically\nscientize\nscientolism\nscilicet\nScilla\nscillain\nscillipicrin\nScillitan\nscillitin\nscillitoxin\nScillonian\nscimitar\nscimitared\nscimitarpod\nscincid\nScincidae\nscincidoid\nscinciform\nscincoid\nscincoidian\nScincomorpha\nScincus\nscind\nsciniph\nscintilla\nscintillant\nscintillantly\nscintillate\nscintillating\nscintillatingly\nscintillation\nscintillator\nscintillescent\nscintillize\nscintillometer\nscintilloscope\nscintillose\nscintillously\nscintle\nscintler\nscintling\nsciograph\nsciographic\nsciography\nsciolism\nsciolist\nsciolistic\nsciolous\nsciomachiology\nsciomachy\nsciomancy\nsciomantic\nscion\nsciophilous\nsciophyte\nscioptic\nsciopticon\nscioptics\nscioptric\nsciosophist\nsciosophy\nSciot\nscioterical\nscioterique\nsciotheism\nsciotheric\nsciotherical\nsciotherically\nscious\nscirenga\nScirophoria\nScirophorion\nScirpus\nscirrhi\nscirrhogastria\nscirrhoid\nscirrhoma\nscirrhosis\nscirrhous\nscirrhus\nscirrosity\nscirtopod\nScirtopoda\nscirtopodous\nscissel\nscissible\nscissile\nscission\nscissiparity\nscissor\nscissorbill\nscissorbird\nscissorer\nscissoring\nscissorium\nscissorlike\nscissorlikeness\nscissors\nscissorsbird\nscissorsmith\nscissorstail\nscissortail\nscissorwise\nscissura\nscissure\nScissurella\nscissurellid\nScissurellidae\nScitaminales\nScitamineae\nsciurid\nSciuridae\nsciurine\nsciuroid\nsciuromorph\nSciuromorpha\nsciuromorphic\nSciuropterus\nSciurus\nsclaff\nsclate\nsclater\nSclav\nSclavonian\nsclaw\nscler\nsclera\nscleral\nscleranth\nScleranthaceae\nScleranthus\nscleratogenous\nsclere\nsclerectasia\nsclerectomy\nscleredema\nsclereid\nsclerema\nsclerencephalia\nsclerenchyma\nsclerenchymatous\nsclerenchyme\nsclererythrin\nscleretinite\nScleria\nscleriasis\nsclerification\nsclerify\nsclerite\nscleritic\nscleritis\nsclerized\nsclerobase\nsclerobasic\nscleroblast\nscleroblastema\nscleroblastemic\nscleroblastic\nsclerocauly\nsclerochorioiditis\nsclerochoroiditis\nscleroconjunctival\nscleroconjunctivitis\nsclerocornea\nsclerocorneal\nsclerodactylia\nsclerodactyly\nscleroderm\nScleroderma\nscleroderma\nSclerodermaceae\nSclerodermata\nSclerodermatales\nsclerodermatitis\nsclerodermatous\nSclerodermi\nsclerodermia\nsclerodermic\nsclerodermite\nsclerodermitic\nsclerodermitis\nsclerodermous\nsclerogen\nSclerogeni\nsclerogenoid\nsclerogenous\nscleroid\nscleroiritis\nsclerokeratitis\nsclerokeratoiritis\nscleroma\nscleromata\nscleromeninx\nscleromere\nsclerometer\nsclerometric\nscleronychia\nscleronyxis\nScleropages\nScleroparei\nsclerophthalmia\nsclerophyll\nsclerophyllous\nsclerophylly\nscleroprotein\nsclerosal\nsclerosarcoma\nScleroscope\nscleroscope\nsclerose\nsclerosed\nscleroseptum\nsclerosis\nscleroskeletal\nscleroskeleton\nSclerospora\nsclerostenosis\nSclerostoma\nsclerostomiasis\nsclerotal\nsclerote\nsclerotia\nsclerotial\nsclerotic\nsclerotica\nsclerotical\nscleroticectomy\nscleroticochorioiditis\nscleroticochoroiditis\nscleroticonyxis\nscleroticotomy\nSclerotinia\nsclerotinial\nsclerotiniose\nsclerotioid\nsclerotitic\nsclerotitis\nsclerotium\nsclerotized\nsclerotoid\nsclerotome\nsclerotomic\nsclerotomy\nsclerous\nscleroxanthin\nsclerozone\nscliff\nsclim\nsclimb\nscoad\nscob\nscobby\nscobicular\nscobiform\nscobs\nscoff\nscoffer\nscoffery\nscoffing\nscoffingly\nscoffingstock\nscofflaw\nscog\nscoggan\nscogger\nscoggin\nscogginism\nscogginist\nscoinson\nscoke\nscolb\nscold\nscoldable\nscoldenore\nscolder\nscolding\nscoldingly\nscoleces\nscoleciasis\nscolecid\nScolecida\nscoleciform\nscolecite\nscolecoid\nscolecology\nscolecophagous\nscolecospore\nscoleryng\nscolex\nScolia\nscolia\nscolices\nscoliid\nScoliidae\nscoliograptic\nscoliokyposis\nscoliometer\nscolion\nscoliorachitic\nscoliosis\nscoliotic\nscoliotone\nscolite\nscollop\nscolog\nscolopaceous\nScolopacidae\nscolopacine\nScolopax\nScolopendra\nscolopendra\nScolopendrella\nScolopendrellidae\nscolopendrelloid\nscolopendrid\nScolopendridae\nscolopendriform\nscolopendrine\nScolopendrium\nscolopendroid\nscolophore\nscolopophore\nScolymus\nscolytid\nScolytidae\nscolytoid\nScolytus\nScomber\nscomberoid\nScombresocidae\nScombresox\nscombrid\nScombridae\nscombriform\nScombriformes\nscombrine\nscombroid\nScombroidea\nscombroidean\nscombrone\nsconce\nsconcer\nsconcheon\nsconcible\nscone\nscoon\nscoop\nscooped\nscooper\nscoopful\nscooping\nscoopingly\nscoot\nscooter\nscopa\nscoparin\nscoparius\nscopate\nscope\nscopeless\nscopelid\nScopelidae\nscopeliform\nscopelism\nscopeloid\nScopelus\nscopet\nscopic\nScopidae\nscopiferous\nscopiform\nscopiformly\nscopine\nscopiped\nscopola\nscopolamine\nscopoleine\nscopoletin\nscopoline\nscopperil\nscops\nscoptical\nscoptically\nscoptophilia\nscoptophiliac\nscoptophilic\nscoptophobia\nscopula\nScopularia\nscopularian\nscopulate\nscopuliferous\nscopuliform\nscopuliped\nScopulipedes\nscopulite\nscopulous\nscopulousness\nScopus\nscorbute\nscorbutic\nscorbutical\nscorbutically\nscorbutize\nscorbutus\nscorch\nscorched\nscorcher\nscorching\nscorchingly\nscorchingness\nscorchproof\nscore\nscoreboard\nscorebook\nscored\nscorekeeper\nscorekeeping\nscoreless\nscorer\nscoria\nscoriac\nscoriaceous\nscoriae\nscorification\nscorifier\nscoriform\nscorify\nscoring\nscorious\nscorn\nscorned\nscorner\nscornful\nscornfully\nscornfulness\nscorningly\nscornproof\nscorny\nscorodite\nScorpaena\nscorpaenid\nScorpaenidae\nscorpaenoid\nscorpene\nscorper\nScorpidae\nScorpididae\nScorpii\nScorpiid\nScorpio\nscorpioid\nscorpioidal\nScorpioidea\nscorpion\nScorpiones\nscorpionic\nscorpionid\nScorpionida\nScorpionidea\nScorpionis\nscorpionweed\nscorpionwort\nScorpiurus\nScorpius\nscorse\nscortation\nscortatory\nScorzonera\nScot\nscot\nscotale\nScotch\nscotch\nscotcher\nScotchery\nScotchification\nScotchify\nScotchiness\nscotching\nScotchman\nscotchman\nScotchness\nScotchwoman\nScotchy\nscote\nscoter\nscoterythrous\nScotia\nscotia\nScotic\nscotino\nScotism\nScotist\nScotistic\nScotistical\nScotize\nScotlandwards\nscotodinia\nscotogram\nscotograph\nscotographic\nscotography\nscotoma\nscotomata\nscotomatic\nscotomatical\nscotomatous\nscotomia\nscotomic\nscotomy\nscotophobia\nscotopia\nscotopic\nscotoscope\nscotosis\nScots\nScotsman\nScotswoman\nScott\nScotticism\nScotticize\nScottie\nScottification\nScottify\nScottish\nScottisher\nScottishly\nScottishman\nScottishness\nScotty\nscouch\nscouk\nscoundrel\nscoundreldom\nscoundrelish\nscoundrelism\nscoundrelly\nscoundrelship\nscoup\nscour\nscourage\nscoured\nscourer\nscouress\nscourfish\nscourge\nscourger\nscourging\nscourgingly\nscouriness\nscouring\nscourings\nscourway\nscourweed\nscourwort\nscoury\nscouse\nscout\nscoutcraft\nscoutdom\nscouter\nscouth\nscouther\nscouthood\nscouting\nscoutingly\nscoutish\nscoutmaster\nscoutwatch\nscove\nscovel\nscovillite\nscovy\nscow\nscowbank\nscowbanker\nscowder\nscowl\nscowler\nscowlful\nscowling\nscowlingly\nscowlproof\nscowman\nscrab\nscrabble\nscrabbled\nscrabbler\nscrabe\nscrae\nscraffle\nscrag\nscragged\nscraggedly\nscraggedness\nscragger\nscraggily\nscragginess\nscragging\nscraggled\nscraggling\nscraggly\nscraggy\nscraily\nscram\nscramasax\nscramble\nscramblement\nscrambler\nscrambling\nscramblingly\nscrambly\nscrampum\nscran\nscranch\nscrank\nscranky\nscrannel\nscranning\nscranny\nscrap\nscrapable\nscrapbook\nscrape\nscrapeage\nscraped\nscrapepenny\nscraper\nscrapie\nscraping\nscrapingly\nscrapler\nscraplet\nscrapling\nscrapman\nscrapmonger\nscrappage\nscrapped\nscrapper\nscrappet\nscrappily\nscrappiness\nscrapping\nscrappingly\nscrapple\nscrappler\nscrappy\nscrapworks\nscrapy\nscrat\nscratch\nscratchable\nscratchably\nscratchback\nscratchboard\nscratchbrush\nscratchcard\nscratchcarding\nscratchcat\nscratcher\nscratches\nscratchification\nscratchiness\nscratching\nscratchingly\nscratchless\nscratchlike\nscratchman\nscratchproof\nscratchweed\nscratchwork\nscratchy\nscrath\nscratter\nscrattle\nscrattling\nscrauch\nscrauchle\nscraunch\nscraw\nscrawk\nscrawl\nscrawler\nscrawliness\nscrawly\nscrawm\nscrawnily\nscrawniness\nscrawny\nscray\nscraze\nscreak\nscreaking\nscreaky\nscream\nscreamer\nscreaminess\nscreaming\nscreamingly\nscreamproof\nscreamy\nscree\nscreech\nscreechbird\nscreecher\nscreechily\nscreechiness\nscreeching\nscreechingly\nscreechy\nscreed\nscreek\nscreel\nscreeman\nscreen\nscreenable\nscreenage\nscreencraft\nscreendom\nscreened\nscreener\nscreening\nscreenless\nscreenlike\nscreenman\nscreenplay\nscreensman\nscreenwise\nscreenwork\nscreenwriter\nscreeny\nscreet\nscreeve\nscreeved\nscreever\nscreich\nscreigh\nscreve\nscrever\nscrew\nscrewable\nscrewage\nscrewball\nscrewbarrel\nscrewdrive\nscrewdriver\nscrewed\nscrewer\nscrewhead\nscrewiness\nscrewing\nscrewish\nscrewless\nscrewlike\nscrewman\nscrewmatics\nscrewship\nscrewsman\nscrewstem\nscrewstock\nscrewwise\nscrewworm\nscrewy\nscribable\nscribacious\nscribaciousness\nscribal\nscribatious\nscribatiousness\nscribblage\nscribblative\nscribblatory\nscribble\nscribbleable\nscribbled\nscribbledom\nscribbleism\nscribblemania\nscribblement\nscribbleomania\nscribbler\nscribbling\nscribblingly\nscribbly\nscribe\nscriber\nscribeship\nscribing\nscribism\nscribophilous\nscride\nscrieve\nscriever\nscriggle\nscriggler\nscriggly\nscrike\nscrim\nscrime\nscrimer\nscrimmage\nscrimmager\nscrimp\nscrimped\nscrimpily\nscrimpiness\nscrimpingly\nscrimply\nscrimpness\nscrimption\nscrimpy\nscrimshander\nscrimshandy\nscrimshank\nscrimshanker\nscrimshaw\nscrimshon\nscrimshorn\nscrin\nscrinch\nscrine\nscringe\nscriniary\nscrip\nscripee\nscripless\nscrippage\nscript\nscription\nscriptitious\nscriptitiously\nscriptitory\nscriptive\nscriptor\nscriptorial\nscriptorium\nscriptory\nscriptural\nScripturalism\nscripturalism\nScripturalist\nscripturalist\nScripturality\nscripturality\nscripturalize\nscripturally\nscripturalness\nScripturarian\nScripture\nscripture\nScriptured\nscriptured\nScriptureless\nscripturiency\nscripturient\nScripturism\nscripturism\nScripturist\nscripula\nscripulum\nscritch\nscritoire\nscrivaille\nscrive\nscrivello\nscriven\nscrivener\nscrivenership\nscrivenery\nscrivening\nscrivenly\nscriver\nscrob\nscrobble\nscrobe\nscrobicula\nscrobicular\nscrobiculate\nscrobiculated\nscrobicule\nscrobiculus\nscrobis\nscrod\nscrodgill\nscroff\nscrofula\nscrofularoot\nscrofulaweed\nscrofulide\nscrofulism\nscrofulitic\nscrofuloderm\nscrofuloderma\nscrofulorachitic\nscrofulosis\nscrofulotuberculous\nscrofulous\nscrofulously\nscrofulousness\nscrog\nscroggy\nscrolar\nscroll\nscrolled\nscrollery\nscrollhead\nscrollwise\nscrollwork\nscrolly\nscronach\nscroo\nscrooch\nscrooge\nscroop\nScrophularia\nScrophulariaceae\nscrophulariaceous\nscrota\nscrotal\nscrotectomy\nscrotiform\nscrotitis\nscrotocele\nscrotofemoral\nscrotum\nscrouge\nscrouger\nscrounge\nscrounger\nscrounging\nscrout\nscrow\nscroyle\nscrub\nscrubbable\nscrubbed\nscrubber\nscrubbery\nscrubbily\nscrubbiness\nscrubbird\nscrubbly\nscrubboard\nscrubby\nscrubgrass\nscrubland\nscrubwood\nscruf\nscruff\nscruffle\nscruffman\nscruffy\nscruft\nscrum\nscrummage\nscrummager\nscrump\nscrumple\nscrumption\nscrumptious\nscrumptiously\nscrumptiousness\nscrunch\nscrunchy\nscrunge\nscrunger\nscrunt\nscruple\nscrupleless\nscrupler\nscruplesome\nscruplesomeness\nscrupula\nscrupular\nscrupuli\nscrupulist\nscrupulosity\nscrupulous\nscrupulously\nscrupulousness\nscrupulum\nscrupulus\nscrush\nscrutability\nscrutable\nscrutate\nscrutation\nscrutator\nscrutatory\nscrutinant\nscrutinate\nscrutineer\nscrutinization\nscrutinize\nscrutinizer\nscrutinizingly\nscrutinous\nscrutinously\nscrutiny\nscruto\nscrutoire\nscruze\nscry\nscryer\nscud\nscuddaler\nscuddawn\nscudder\nscuddick\nscuddle\nscuddy\nscudi\nscudler\nscudo\nscuff\nscuffed\nscuffer\nscuffle\nscuffler\nscufflingly\nscuffly\nscuffy\nscuft\nscufter\nscug\nscuggery\nsculch\nsculduddery\nscull\nsculler\nscullery\nscullful\nscullion\nscullionish\nscullionize\nscullionship\nscullog\nsculp\nsculper\nsculpin\nsculpt\nsculptile\nsculptitory\nsculptograph\nsculptography\nSculptor\nsculptor\nSculptorid\nsculptress\nsculptural\nsculpturally\nsculpturation\nsculpture\nsculptured\nsculpturer\nsculpturesque\nsculpturesquely\nsculpturesqueness\nsculpturing\nsculsh\nscum\nscumber\nscumble\nscumbling\nscumboard\nscumfish\nscumless\nscumlike\nscummed\nscummer\nscumming\nscummy\nscumproof\nscun\nscuncheon\nscunder\nscunner\nscup\nscupful\nscuppaug\nscupper\nscuppernong\nscuppet\nscuppler\nscur\nscurdy\nscurf\nscurfer\nscurfily\nscurfiness\nscurflike\nscurfy\nscurrier\nscurrile\nscurrilist\nscurrility\nscurrilize\nscurrilous\nscurrilously\nscurrilousness\nscurry\nscurvied\nscurvily\nscurviness\nscurvish\nscurvy\nscurvyweed\nscusation\nscuse\nscut\nscuta\nscutage\nscutal\nscutate\nscutated\nscutatiform\nscutation\nscutch\nscutcheon\nscutcheoned\nscutcheonless\nscutcheonlike\nscutcheonwise\nscutcher\nscutching\nscute\nscutel\nscutella\nscutellae\nscutellar\nScutellaria\nscutellarin\nscutellate\nscutellated\nscutellation\nscutellerid\nScutelleridae\nscutelliform\nscutelligerous\nscutelliplantar\nscutelliplantation\nscutellum\nscutibranch\nScutibranchia\nscutibranchian\nscutibranchiate\nscutifer\nscutiferous\nscutiform\nscutiger\nScutigera\nscutigeral\nScutigeridae\nscutigerous\nscutiped\nscutter\nscuttle\nscuttlebutt\nscuttleful\nscuttleman\nscuttler\nscuttling\nscuttock\nscutty\nscutula\nscutular\nscutulate\nscutulated\nscutulum\nScutum\nscutum\nscybala\nscybalous\nscybalum\nscye\nscyelite\nScyld\nScylla\nScyllaea\nScyllaeidae\nscyllarian\nScyllaridae\nscyllaroid\nScyllarus\nScyllidae\nScylliidae\nscyllioid\nScylliorhinidae\nscylliorhinoid\nScylliorhinus\nscyllite\nscyllitol\nScyllium\nscypha\nscyphae\nscyphate\nscyphi\nscyphiferous\nscyphiform\nscyphiphorous\nscyphistoma\nscyphistomae\nscyphistomoid\nscyphistomous\nscyphoi\nscyphomancy\nScyphomedusae\nscyphomedusan\nscyphomedusoid\nscyphophore\nScyphophori\nscyphophorous\nscyphopolyp\nscyphose\nscyphostoma\nScyphozoa\nscyphozoan\nscyphula\nscyphulus\nscyphus\nscyt\nscytale\nScyth\nscythe\nscytheless\nscythelike\nscytheman\nscythesmith\nscythestone\nscythework\nScythian\nScythic\nScythize\nscytitis\nscytoblastema\nscytodepsic\nScytonema\nScytonemataceae\nscytonemataceous\nscytonematoid\nscytonematous\nScytopetalaceae\nscytopetalaceous\nScytopetalum\nsdeath\nsdrucciola\nse\nsea\nseabeach\nseabeard\nSeabee\nseaberry\nseaboard\nseaborderer\nseabound\nseacannie\nseacatch\nseacoast\nseaconny\nseacraft\nseacrafty\nseacunny\nseadog\nseadrome\nseafardinger\nseafare\nseafarer\nseafaring\nseaflood\nseaflower\nseafolk\nSeaforthia\nseafowl\nSeaghan\nseagirt\nseagoer\nseagoing\nseah\nseahound\nseak\nseal\nsealable\nsealant\nsealch\nsealed\nsealer\nsealery\nsealess\nsealet\nsealette\nsealflower\nsealike\nsealine\nsealing\nsealless\nseallike\nsealskin\nsealwort\nSealyham\nseam\nseaman\nseamancraft\nseamanite\nseamanlike\nseamanly\nseamanship\nseamark\nSeamas\nseambiter\nseamed\nseamer\nseaminess\nseaming\nseamless\nseamlessly\nseamlessness\nseamlet\nseamlike\nseamost\nseamrend\nseamrog\nseamster\nseamstress\nSeamus\nseamy\nSean\nseance\nseapiece\nseaplane\nseaport\nseaquake\nsear\nsearce\nsearcer\nsearch\nsearchable\nsearchableness\nsearchant\nsearcher\nsearcheress\nsearcherlike\nsearchership\nsearchful\nsearching\nsearchingly\nsearchingness\nsearchless\nsearchlight\nsearchment\nsearcloth\nseared\nsearedness\nsearer\nsearing\nsearlesite\nsearness\nseary\nSeasan\nseascape\nseascapist\nseascout\nseascouting\nseashine\nseashore\nseasick\nseasickness\nseaside\nseasider\nseason\nseasonable\nseasonableness\nseasonably\nseasonal\nseasonality\nseasonally\nseasonalness\nseasoned\nseasonedly\nseasoner\nseasoning\nseasoninglike\nseasonless\nseastrand\nseastroke\nseat\nseatang\nseated\nseater\nseathe\nseating\nseatless\nseatrain\nseatron\nseatsman\nseatwork\nseave\nseavy\nseawant\nseaward\nseawardly\nseaware\nseaway\nseaweed\nseaweedy\nseawife\nseawoman\nseaworn\nseaworthiness\nseaworthy\nseax\nSeba\nsebacate\nsebaceous\nsebacic\nsebait\nSebastian\nsebastianite\nSebastichthys\nSebastodes\nsebate\nsebesten\nsebiferous\nsebific\nsebilla\nsebiparous\nsebkha\nsebolith\nseborrhagia\nseborrhea\nseborrheal\nseborrheic\nseborrhoic\nSebright\nsebum\nsebundy\nsec\nsecability\nsecable\nSecale\nsecalin\nsecaline\nsecalose\nSecamone\nsecancy\nsecant\nsecantly\nsecateur\nsecede\nSeceder\nseceder\nsecern\nsecernent\nsecernment\nsecesh\nsecesher\nSecessia\nSecession\nsecession\nSecessional\nsecessional\nsecessionalist\nSecessiondom\nsecessioner\nsecessionism\nsecessionist\nsech\nSechium\nSechuana\nseck\nSeckel\nseclude\nsecluded\nsecludedly\nsecludedness\nsecluding\nsecluse\nseclusion\nseclusionist\nseclusive\nseclusively\nseclusiveness\nsecodont\nsecohm\nsecohmmeter\nsecond\nsecondar\nsecondarily\nsecondariness\nsecondary\nseconde\nseconder\nsecondhand\nsecondhanded\nsecondhandedly\nsecondhandedness\nsecondly\nsecondment\nsecondness\nsecos\nsecpar\nsecque\nsecre\nsecrecy\nsecret\nsecreta\nsecretage\nsecretagogue\nsecretarial\nsecretarian\nSecretariat\nsecretariat\nsecretariate\nsecretary\nsecretaryship\nsecrete\nsecretin\nsecretion\nsecretional\nsecretionary\nsecretitious\nsecretive\nsecretively\nsecretiveness\nsecretly\nsecretmonger\nsecretness\nsecreto\nsecretomotor\nsecretor\nsecretory\nsecretum\nsect\nsectarial\nsectarian\nsectarianism\nsectarianize\nsectarianly\nsectarism\nsectarist\nsectary\nsectator\nsectile\nsectility\nsection\nsectional\nsectionalism\nsectionalist\nsectionality\nsectionalization\nsectionalize\nsectionally\nsectionary\nsectionist\nsectionize\nsectioplanography\nsectism\nsectist\nsectiuncle\nsective\nsector\nsectoral\nsectored\nsectorial\nsectroid\nsectwise\nsecular\nsecularism\nsecularist\nsecularistic\nsecularity\nsecularization\nsecularize\nsecularizer\nsecularly\nsecularness\nsecund\nsecundate\nsecundation\nsecundiflorous\nsecundigravida\nsecundine\nsecundipara\nsecundiparity\nsecundiparous\nsecundly\nsecundogeniture\nsecundoprimary\nsecundus\nsecurable\nsecurance\nsecure\nsecurely\nsecurement\nsecureness\nsecurer\nsecuricornate\nsecurifer\nSecurifera\nsecuriferous\nsecuriform\nSecurigera\nsecurigerous\nsecuritan\nsecurity\nSedaceae\nSedan\nsedan\nSedang\nsedanier\nSedat\nsedate\nsedately\nsedateness\nsedation\nsedative\nsedent\nSedentaria\nsedentarily\nsedentariness\nsedentary\nsedentation\nSeder\nsederunt\nsedge\nsedged\nsedgelike\nsedging\nsedgy\nsedigitate\nsedigitated\nsedile\nsedilia\nsediment\nsedimental\nsedimentarily\nsedimentary\nsedimentate\nsedimentation\nsedimentous\nsedimetric\nsedimetrical\nsedition\nseditionary\nseditionist\nseditious\nseditiously\nseditiousness\nsedjadeh\nSedovic\nseduce\nseduceable\nseducee\nseducement\nseducer\nseducible\nseducing\nseducingly\nseducive\nseduct\nseduction\nseductionist\nseductive\nseductively\nseductiveness\nseductress\nsedulity\nsedulous\nsedulously\nsedulousness\nSedum\nsedum\nsee\nseeable\nseeableness\nSeebeck\nseecatch\nseech\nseed\nseedage\nseedbed\nseedbird\nseedbox\nseedcake\nseedcase\nseedeater\nseeded\nSeeder\nseeder\nseedful\nseedgall\nseedily\nseediness\nseedkin\nseedless\nseedlessness\nseedlet\nseedlike\nseedling\nseedlip\nseedman\nseedness\nseedsman\nseedstalk\nseedtime\nseedy\nseege\nseeing\nseeingly\nseeingness\nseek\nseeker\nSeekerism\nseeking\nseel\nseelful\nseely\nseem\nseemable\nseemably\nseemer\nseeming\nseemingly\nseemingness\nseemless\nseemlihead\nseemlily\nseemliness\nseemly\nseen\nseenie\nSeenu\nseep\nseepage\nseeped\nseepweed\nseepy\nseer\nseerband\nseercraft\nseeress\nseerfish\nseerhand\nseerhood\nseerlike\nseerpaw\nseership\nseersucker\nseesaw\nseesawiness\nseesee\nseethe\nseething\nseethingly\nseetulputty\nSefekhet\nseg\nseggar\nseggard\nsegged\nseggrom\nSeginus\nsegment\nsegmental\nsegmentally\nsegmentary\nsegmentate\nsegmentation\nsegmented\nsego\nsegol\nsegolate\nsegreant\nsegregable\nsegregant\nsegregate\nsegregateness\nsegregation\nsegregational\nsegregationist\nsegregative\nsegregator\nSehyo\nseiche\nSeid\nSeidel\nseidel\nSeidlitz\nseigneur\nseigneurage\nseigneuress\nseigneurial\nseigneury\nseignior\nseigniorage\nseignioral\nseignioralty\nseigniorial\nseigniority\nseigniorship\nseigniory\nseignorage\nseignoral\nseignorial\nseignorize\nseignory\nseilenoi\nseilenos\nseine\nseiner\nseirospore\nseirosporic\nseise\nseism\nseismal\nseismatical\nseismetic\nseismic\nseismically\nseismicity\nseismism\nseismochronograph\nseismogram\nseismograph\nseismographer\nseismographic\nseismographical\nseismography\nseismologic\nseismological\nseismologically\nseismologist\nseismologue\nseismology\nseismometer\nseismometric\nseismometrical\nseismometrograph\nseismometry\nseismomicrophone\nseismoscope\nseismoscopic\nseismotectonic\nseismotherapy\nseismotic\nseit\nseity\nSeiurus\nSeiyuhonto\nSeiyukai\nseizable\nseize\nseizer\nseizin\nseizing\nseizor\nseizure\nsejant\nsejoin\nsejoined\nsejugate\nsejugous\nsejunct\nsejunctive\nsejunctively\nsejunctly\nSekane\nSekani\nSekar\nSeker\nSekhwan\nsekos\nselachian\nSelachii\nselachoid\nSelachoidei\nSelachostome\nSelachostomi\nselachostomous\nseladang\nSelaginaceae\nSelaginella\nSelaginellaceae\nselaginellaceous\nselagite\nSelago\nselah\nselamin\nselamlik\nselbergite\nSelbornian\nseldom\nseldomcy\nseldomer\nseldomly\nseldomness\nseldor\nseldseen\nsele\nselect\nselectable\nselected\nselectedly\nselectee\nselection\nselectionism\nselectionist\nselective\nselectively\nselectiveness\nselectivity\nselectly\nselectman\nselectness\nselector\nSelena\nselenate\nSelene\nselenian\nseleniate\nselenic\nSelenicereus\nselenide\nSelenidera\nseleniferous\nselenigenous\nselenion\nselenious\nSelenipedium\nselenite\nselenitic\nselenitical\nselenitiferous\nselenitish\nselenium\nseleniuret\nselenobismuthite\nselenocentric\nselenodont\nSelenodonta\nselenodonty\nselenograph\nselenographer\nselenographic\nselenographical\nselenographically\nselenographist\nselenography\nselenolatry\nselenological\nselenologist\nselenology\nselenomancy\nselenoscope\nselenosis\nselenotropic\nselenotropism\nselenotropy\nselensilver\nselensulphur\nSeleucian\nSeleucid\nSeleucidae\nSeleucidan\nSeleucidean\nSeleucidian\nSeleucidic\nself\nselfcide\nselfdom\nselfful\nselffulness\nselfheal\nselfhood\nselfish\nselfishly\nselfishness\nselfism\nselfist\nselfless\nselflessly\nselflessness\nselfly\nselfness\nselfpreservatory\nselfsame\nselfsameness\nselfward\nselfwards\nselictar\nseligmannite\nselihoth\nSelina\nSelinuntine\nselion\nSeljuk\nSeljukian\nsell\nsella\nsellable\nsellably\nsellaite\nsellar\nsellate\nsellenders\nseller\nSelli\nsellie\nselliform\nselling\nsellout\nselly\nselsoviet\nselsyn\nselt\nSelter\nSeltzer\nseltzogene\nSelung\nselva\nselvage\nselvaged\nselvagee\nselvedge\nselzogene\nSemaeostomae\nSemaeostomata\nSemang\nsemanteme\nsemantic\nsemantical\nsemantically\nsemantician\nsemanticist\nsemantics\nsemantological\nsemantology\nsemantron\nsemaphore\nsemaphoric\nsemaphorical\nsemaphorically\nsemaphorist\nsemarum\nsemasiological\nsemasiologically\nsemasiologist\nsemasiology\nsemateme\nsematic\nsematographic\nsematography\nsematology\nsematrope\nsemball\nsemblable\nsemblably\nsemblance\nsemblant\nsemblative\nsemble\nseme\nSemecarpus\nsemeed\nsemeia\nsemeiography\nsemeiologic\nsemeiological\nsemeiologist\nsemeiology\nsemeion\nsemeiotic\nsemeiotical\nsemeiotics\nsemelfactive\nsemelincident\nsemen\nsemence\nSemeostoma\nsemese\nsemester\nsemestral\nsemestrial\nsemi\nsemiabstracted\nsemiaccomplishment\nsemiacid\nsemiacidified\nsemiacquaintance\nsemiadherent\nsemiadjectively\nsemiadnate\nsemiaerial\nsemiaffectionate\nsemiagricultural\nSemiahmoo\nsemialbinism\nsemialcoholic\nsemialien\nsemiallegiance\nsemialpine\nsemialuminous\nsemiamplexicaul\nsemiamplitude\nsemianarchist\nsemianatomical\nsemianatropal\nsemianatropous\nsemiangle\nsemiangular\nsemianimal\nsemianimate\nsemianimated\nsemiannealed\nsemiannual\nsemiannually\nsemiannular\nsemianthracite\nsemiantiministerial\nsemiantique\nsemiape\nsemiaperiodic\nsemiaperture\nsemiappressed\nsemiaquatic\nsemiarborescent\nsemiarc\nsemiarch\nsemiarchitectural\nsemiarid\nsemiaridity\nsemiarticulate\nsemiasphaltic\nsemiatheist\nsemiattached\nsemiautomatic\nsemiautomatically\nsemiautonomous\nsemiaxis\nsemibacchanalian\nsemibachelor\nsemibald\nsemibalked\nsemiball\nsemiballoon\nsemiband\nsemibarbarian\nsemibarbarianism\nsemibarbaric\nsemibarbarism\nsemibarbarous\nsemibaronial\nsemibarren\nsemibase\nsemibasement\nsemibastion\nsemibay\nsemibeam\nsemibejan\nsemibelted\nsemibifid\nsemibituminous\nsemibleached\nsemiblind\nsemiblunt\nsemibody\nsemiboiled\nsemibolshevist\nsemibolshevized\nsemibouffant\nsemibourgeois\nsemibreve\nsemibull\nsemiburrowing\nsemic\nsemicadence\nsemicalcareous\nsemicalcined\nsemicallipygian\nsemicanal\nsemicanalis\nsemicannibalic\nsemicantilever\nsemicarbazide\nsemicarbazone\nsemicarbonate\nsemicarbonize\nsemicardinal\nsemicartilaginous\nsemicastrate\nsemicastration\nsemicatholicism\nsemicaudate\nsemicelestial\nsemicell\nsemicellulose\nsemicentenarian\nsemicentenary\nsemicentennial\nsemicentury\nsemichannel\nsemichaotic\nsemichemical\nsemicheviot\nsemichevron\nsemichiffon\nsemichivalrous\nsemichoric\nsemichorus\nsemichrome\nsemicircle\nsemicircled\nsemicircular\nsemicircularity\nsemicircularly\nsemicircularness\nsemicircumference\nsemicircumferentor\nsemicircumvolution\nsemicirque\nsemicitizen\nsemicivilization\nsemicivilized\nsemiclassic\nsemiclassical\nsemiclause\nsemicleric\nsemiclerical\nsemiclimber\nsemiclimbing\nsemiclose\nsemiclosed\nsemiclosure\nsemicoagulated\nsemicoke\nsemicollapsible\nsemicollar\nsemicollegiate\nsemicolloid\nsemicolloquial\nsemicolon\nsemicolonial\nsemicolumn\nsemicolumnar\nsemicoma\nsemicomatose\nsemicombined\nsemicombust\nsemicomic\nsemicomical\nsemicommercial\nsemicompact\nsemicompacted\nsemicomplete\nsemicomplicated\nsemiconceal\nsemiconcrete\nsemiconducting\nsemiconductor\nsemicone\nsemiconfident\nsemiconfinement\nsemiconfluent\nsemiconformist\nsemiconformity\nsemiconic\nsemiconical\nsemiconnate\nsemiconnection\nsemiconoidal\nsemiconscious\nsemiconsciously\nsemiconsciousness\nsemiconservative\nsemiconsonant\nsemiconsonantal\nsemiconspicuous\nsemicontinent\nsemicontinuum\nsemicontraction\nsemicontradiction\nsemiconvergence\nsemiconvergent\nsemiconversion\nsemiconvert\nsemicordate\nsemicordated\nsemicoriaceous\nsemicorneous\nsemicoronate\nsemicoronated\nsemicoronet\nsemicostal\nsemicostiferous\nsemicotton\nsemicotyle\nsemicounterarch\nsemicountry\nsemicrepe\nsemicrescentic\nsemicretin\nsemicretinism\nsemicriminal\nsemicroma\nsemicrome\nsemicrustaceous\nsemicrystallinc\nsemicubical\nsemicubit\nsemicup\nsemicupium\nsemicupola\nsemicured\nsemicurl\nsemicursive\nsemicurvilinear\nsemicyclic\nsemicycloid\nsemicylinder\nsemicylindric\nsemicylindrical\nsemicynical\nsemidaily\nsemidangerous\nsemidark\nsemidarkness\nsemidead\nsemideaf\nsemidecay\nsemidecussation\nsemidefinite\nsemideific\nsemideification\nsemideistical\nsemideity\nsemidelight\nsemidelirious\nsemideltaic\nsemidemented\nsemidenatured\nsemidependence\nsemidependent\nsemideponent\nsemidesert\nsemidestructive\nsemidetached\nsemidetachment\nsemideveloped\nsemidiagrammatic\nsemidiameter\nsemidiapason\nsemidiapente\nsemidiaphaneity\nsemidiaphanous\nsemidiatessaron\nsemidifference\nsemidigested\nsemidigitigrade\nsemidigression\nsemidilapidation\nsemidine\nsemidirect\nsemidisabled\nsemidisk\nsemiditone\nsemidiurnal\nsemidivided\nsemidivine\nsemidocumentary\nsemidodecagon\nsemidole\nsemidome\nsemidomed\nsemidomestic\nsemidomesticated\nsemidomestication\nsemidomical\nsemidormant\nsemidouble\nsemidrachm\nsemidramatic\nsemidress\nsemidressy\nsemidried\nsemidry\nsemidrying\nsemiductile\nsemidull\nsemiduplex\nsemiduration\nsemieducated\nsemieffigy\nsemiegg\nsemiegret\nsemielastic\nsemielision\nsemiellipse\nsemiellipsis\nsemiellipsoidal\nsemielliptic\nsemielliptical\nsemienclosed\nsemiengaged\nsemiequitant\nsemierect\nsemieremitical\nsemiessay\nsemiexecutive\nsemiexpanded\nsemiexplanation\nsemiexposed\nsemiexternal\nsemiextinct\nsemiextinction\nsemifable\nsemifabulous\nsemifailure\nsemifamine\nsemifascia\nsemifasciated\nsemifashion\nsemifast\nsemifatalistic\nsemiferal\nsemiferous\nsemifeudal\nsemifeudalism\nsemifib\nsemifiction\nsemifictional\nsemifigurative\nsemifigure\nsemifinal\nsemifinalist\nsemifine\nsemifinish\nsemifinished\nsemifiscal\nsemifistular\nsemifit\nsemifitting\nsemifixed\nsemiflashproof\nsemiflex\nsemiflexed\nsemiflexible\nsemiflexion\nsemiflexure\nsemiflint\nsemifloating\nsemifloret\nsemifloscular\nsemifloscule\nsemiflosculose\nsemiflosculous\nsemifluctuant\nsemifluctuating\nsemifluid\nsemifluidic\nsemifluidity\nsemifoaming\nsemiforbidding\nsemiforeign\nsemiform\nsemiformal\nsemiformed\nsemifossil\nsemifossilized\nsemifrantic\nsemifriable\nsemifrontier\nsemifuddle\nsemifunctional\nsemifused\nsemifusion\nsemify\nsemigala\nsemigelatinous\nsemigentleman\nsemigenuflection\nsemigirder\nsemiglaze\nsemiglazed\nsemiglobe\nsemiglobose\nsemiglobular\nsemiglobularly\nsemiglorious\nsemiglutin\nsemigod\nsemigovernmental\nsemigrainy\nsemigranitic\nsemigranulate\nsemigravel\nsemigroove\nsemihand\nsemihard\nsemiharden\nsemihardy\nsemihastate\nsemihepatization\nsemiherbaceous\nsemiheterocercal\nsemihexagon\nsemihexagonal\nsemihiant\nsemihiatus\nsemihibernation\nsemihigh\nsemihistorical\nsemihobo\nsemihonor\nsemihoral\nsemihorny\nsemihostile\nsemihot\nsemihuman\nsemihumanitarian\nsemihumanized\nsemihumbug\nsemihumorous\nsemihumorously\nsemihyaline\nsemihydrate\nsemihydrobenzoinic\nsemihyperbola\nsemihyperbolic\nsemihyperbolical\nsemijealousy\nsemijubilee\nsemijudicial\nsemijuridical\nsemilanceolate\nsemilatent\nsemilatus\nsemileafless\nsemilegendary\nsemilegislative\nsemilens\nsemilenticular\nsemilethal\nsemiliberal\nsemilichen\nsemiligneous\nsemilimber\nsemilined\nsemiliquid\nsemiliquidity\nsemiliterate\nsemilocular\nsemilogarithmic\nsemilogical\nsemilong\nsemilooper\nsemiloose\nsemiloyalty\nsemilucent\nsemilunar\nsemilunare\nsemilunary\nsemilunate\nsemilunation\nsemilune\nsemiluxation\nsemiluxury\nsemimachine\nsemimade\nsemimadman\nsemimagical\nsemimagnetic\nsemimajor\nsemimalignant\nsemimanufacture\nsemimanufactured\nsemimarine\nsemimarking\nsemimathematical\nsemimature\nsemimechanical\nsemimedicinal\nsemimember\nsemimembranosus\nsemimembranous\nsemimenstrual\nsemimercerized\nsemimessianic\nsemimetal\nsemimetallic\nsemimetamorphosis\nsemimicrochemical\nsemimild\nsemimilitary\nsemimill\nsemimineral\nsemimineralized\nsemiminim\nsemiminor\nsemimolecule\nsemimonastic\nsemimonitor\nsemimonopoly\nsemimonster\nsemimonthly\nsemimoron\nsemimucous\nsemimute\nsemimystic\nsemimystical\nsemimythical\nseminaked\nseminal\nseminality\nseminally\nseminaphthalidine\nseminaphthylamine\nseminar\nseminarcosis\nseminarial\nseminarian\nseminarianism\nseminarist\nseminaristic\nseminarize\nseminary\nseminasal\nseminase\nseminatant\nseminate\nsemination\nseminationalization\nseminative\nseminebulous\nseminecessary\nseminegro\nseminervous\nseminiferal\nseminiferous\nseminific\nseminifical\nseminification\nseminist\nseminium\nseminivorous\nseminocturnal\nSeminole\nseminoma\nseminomad\nseminomadic\nseminomata\nseminonconformist\nseminonflammable\nseminonsensical\nseminormal\nseminose\nseminovel\nseminovelty\nseminude\nseminudity\nseminule\nseminuliferous\nseminuria\nseminvariant\nseminvariantive\nsemioblivion\nsemioblivious\nsemiobscurity\nsemioccasional\nsemioccasionally\nsemiocclusive\nsemioctagonal\nsemiofficial\nsemiofficially\nsemiography\nSemionotidae\nSemionotus\nsemiopacity\nsemiopacous\nsemiopal\nsemiopalescent\nsemiopaque\nsemiopened\nsemiorb\nsemiorbicular\nsemiorbicularis\nsemiorbiculate\nsemiordinate\nsemiorganized\nsemioriental\nsemioscillation\nsemiosseous\nsemiostracism\nsemiotic\nsemiotician\nsemioval\nsemiovaloid\nsemiovate\nsemioviparous\nsemiovoid\nsemiovoidal\nsemioxidated\nsemioxidized\nsemioxygenated\nsemioxygenized\nsemipagan\nsemipalmate\nsemipalmated\nsemipalmation\nsemipanic\nsemipapal\nsemipapist\nsemiparallel\nsemiparalysis\nsemiparameter\nsemiparasitic\nsemiparasitism\nsemipaste\nsemipastoral\nsemipasty\nsemipause\nsemipeace\nsemipectinate\nsemipectinated\nsemipectoral\nsemiped\nsemipedal\nsemipellucid\nsemipellucidity\nsemipendent\nsemipenniform\nsemiperfect\nsemiperimeter\nsemiperimetry\nsemiperiphery\nsemipermanent\nsemipermeability\nsemipermeable\nsemiperoid\nsemiperspicuous\nsemipertinent\nsemipervious\nsemipetaloid\nsemipetrified\nsemiphase\nsemiphilologist\nsemiphilosophic\nsemiphilosophical\nsemiphlogisticated\nsemiphonotypy\nsemiphosphorescent\nsemipinacolic\nsemipinacolin\nsemipinnate\nsemipiscine\nsemiplantigrade\nsemiplastic\nsemiplumaceous\nsemiplume\nsemipolar\nsemipolitical\nsemipolitician\nsemipoor\nsemipopish\nsemipopular\nsemiporcelain\nsemiporous\nsemiporphyritic\nsemiportable\nsemipostal\nsemipractical\nsemiprecious\nsemipreservation\nsemiprimigenous\nsemiprivacy\nsemiprivate\nsemipro\nsemiprofane\nsemiprofessional\nsemiprofessionalized\nsemipronation\nsemiprone\nsemipronominal\nsemiproof\nsemiproselyte\nsemiprosthetic\nsemiprostrate\nsemiprotectorate\nsemiproven\nsemipublic\nsemipupa\nsemipurulent\nsemiputrid\nsemipyramidal\nsemipyramidical\nsemipyritic\nsemiquadrangle\nsemiquadrantly\nsemiquadrate\nsemiquantitative\nsemiquantitatively\nsemiquartile\nsemiquaver\nsemiquietism\nsemiquietist\nsemiquinquefid\nsemiquintile\nsemiquote\nsemiradial\nsemiradiate\nSemiramis\nSemiramize\nsemirapacious\nsemirare\nsemirattlesnake\nsemiraw\nsemirebellion\nsemirecondite\nsemirecumbent\nsemirefined\nsemireflex\nsemiregular\nsemirelief\nsemireligious\nsemireniform\nsemirepublican\nsemiresinous\nsemiresolute\nsemirespectability\nsemirespectable\nsemireticulate\nsemiretirement\nsemiretractile\nsemireverberatory\nsemirevolute\nsemirevolution\nsemirevolutionist\nsemirhythm\nsemiriddle\nsemirigid\nsemiring\nsemiroll\nsemirotary\nsemirotating\nsemirotative\nsemirotatory\nsemirotund\nsemirotunda\nsemiround\nsemiroyal\nsemiruin\nsemirural\nsemirustic\nsemis\nsemisacerdotal\nsemisacred\nsemisagittate\nsemisaint\nsemisaline\nsemisaltire\nsemisaprophyte\nsemisaprophytic\nsemisarcodic\nsemisatiric\nsemisaturation\nsemisavage\nsemisavagedom\nsemisavagery\nsemiscenic\nsemischolastic\nsemiscientific\nsemiseafaring\nsemisecondary\nsemisecrecy\nsemisecret\nsemisection\nsemisedentary\nsemisegment\nsemisensuous\nsemisentient\nsemisentimental\nsemiseparatist\nsemiseptate\nsemiserf\nsemiserious\nsemiseriously\nsemiseriousness\nsemiservile\nsemisevere\nsemiseverely\nsemiseverity\nsemisextile\nsemishady\nsemishaft\nsemisheer\nsemishirker\nsemishrub\nsemishrubby\nsemisightseeing\nsemisilica\nsemisimious\nsemisimple\nsemisingle\nsemisixth\nsemiskilled\nsemislave\nsemismelting\nsemismile\nsemisocial\nsemisocialism\nsemisociative\nsemisocinian\nsemisoft\nsemisolemn\nsemisolemnity\nsemisolemnly\nsemisolid\nsemisolute\nsemisomnambulistic\nsemisomnolence\nsemisomnous\nsemisopor\nsemisovereignty\nsemispan\nsemispeculation\nsemisphere\nsemispheric\nsemispherical\nsemispheroidal\nsemispinalis\nsemispiral\nsemispiritous\nsemispontaneity\nsemispontaneous\nsemispontaneously\nsemispontaneousness\nsemisport\nsemisporting\nsemisquare\nsemistagnation\nsemistaminate\nsemistarvation\nsemistarved\nsemistate\nsemisteel\nsemistiff\nsemistill\nsemistock\nsemistory\nsemistratified\nsemistriate\nsemistriated\nsemistuporous\nsemisubterranean\nsemisuburban\nsemisuccess\nsemisuccessful\nsemisuccessfully\nsemisucculent\nsemisupernatural\nsemisupinated\nsemisupination\nsemisupine\nsemisuspension\nsemisymmetric\nsemita\nsemitact\nsemitae\nsemitailored\nsemital\nsemitandem\nsemitangent\nsemitaur\nSemite\nsemitechnical\nsemiteetotal\nsemitelic\nsemitendinosus\nsemitendinous\nsemiterete\nsemiterrestrial\nsemitertian\nsemitesseral\nsemitessular\nsemitheological\nsemithoroughfare\nSemitic\nSemiticism\nSemiticize\nSemitics\nsemitime\nSemitism\nSemitist\nSemitization\nSemitize\nsemitonal\nsemitonally\nsemitone\nsemitonic\nsemitonically\nsemitontine\nsemitorpid\nsemitour\nsemitrailer\nsemitrained\nsemitransept\nsemitranslucent\nsemitransparency\nsemitransparent\nsemitransverse\nsemitreasonable\nsemitrimmed\nsemitropic\nsemitropical\nsemitropics\nsemitruth\nsemituberous\nsemitubular\nsemiuncial\nsemiundressed\nsemiuniversalist\nsemiupright\nsemiurban\nsemiurn\nsemivalvate\nsemivault\nsemivector\nsemivegetable\nsemivertebral\nsemiverticillate\nsemivibration\nsemivirtue\nsemiviscid\nsemivital\nsemivitreous\nsemivitrification\nsemivitrified\nsemivocal\nsemivocalic\nsemivolatile\nsemivolcanic\nsemivoluntary\nsemivowel\nsemivulcanized\nsemiwaking\nsemiwarfare\nsemiweekly\nsemiwild\nsemiwoody\nsemiyearly\nsemmet\nsemmit\nSemnae\nSemnones\nSemnopithecinae\nsemnopithecine\nSemnopithecus\nsemola\nsemolella\nsemolina\nsemological\nsemology\nSemostomae\nsemostomeous\nsemostomous\nsemperannual\nsempergreen\nsemperidentical\nsemperjuvenescent\nsempervirent\nsempervirid\nSempervivum\nsempitern\nsempiternal\nsempiternally\nsempiternity\nsempiternize\nsempiternous\nsempstrywork\nsemsem\nsemuncia\nsemuncial\nsen\nSenaah\nsenaite\nsenam\nsenarian\nsenarius\nsenarmontite\nsenary\nsenate\nsenator\nsenatorial\nsenatorially\nsenatorian\nsenatorship\nsenatory\nsenatress\nsenatrices\nsenatrix\nsence\nSenci\nsencion\nsend\nsendable\nsendal\nsendee\nsender\nsending\nSeneca\nSenecan\nSenecio\nsenecioid\nsenecionine\nsenectitude\nsenectude\nsenectuous\nsenega\nSenegal\nSenegalese\nSenegambian\nsenegin\nsenesce\nsenescence\nsenescent\nseneschal\nseneschally\nseneschalship\nseneschalsy\nseneschalty\nsengreen\nsenicide\nSenijextee\nsenile\nsenilely\nsenilism\nsenility\nsenilize\nsenior\nseniority\nseniorship\nSenlac\nSenna\nsenna\nsennegrass\nsennet\nsennight\nsennit\nsennite\nsenocular\nSenones\nSenonian\nsensa\nsensable\nsensal\nsensate\nsensation\nsensational\nsensationalism\nsensationalist\nsensationalistic\nsensationalize\nsensationally\nsensationary\nsensationish\nsensationism\nsensationist\nsensationistic\nsensationless\nsensatorial\nsensatory\nsense\nsensed\nsenseful\nsenseless\nsenselessly\nsenselessness\nsensibilia\nsensibilisin\nsensibilitist\nsensibilitous\nsensibility\nsensibilium\nsensibilization\nsensibilize\nsensible\nsensibleness\nsensibly\nsensical\nsensifacient\nsensiferous\nsensific\nsensificatory\nsensifics\nsensify\nsensigenous\nsensile\nsensilia\nsensilla\nsensillum\nsension\nsensism\nsensist\nsensistic\nsensitive\nsensitively\nsensitiveness\nsensitivity\nsensitization\nsensitize\nsensitizer\nsensitometer\nsensitometric\nsensitometry\nsensitory\nsensive\nsensize\nsenso\nsensomobile\nsensomobility\nsensomotor\nsensoparalysis\nsensor\nsensoria\nsensorial\nsensoriglandular\nsensorimotor\nsensorimuscular\nsensorium\nsensorivascular\nsensorivasomotor\nsensorivolitional\nsensory\nsensual\nsensualism\nsensualist\nsensualistic\nsensuality\nsensualization\nsensualize\nsensually\nsensualness\nsensuism\nsensuist\nsensum\nsensuosity\nsensuous\nsensuously\nsensuousness\nsensyne\nsent\nsentence\nsentencer\nsentential\nsententially\nsententiarian\nsententiarist\nsententiary\nsententiosity\nsententious\nsententiously\nsententiousness\nsentience\nsentiendum\nsentient\nsentiently\nsentiment\nsentimental\nsentimentalism\nsentimentalist\nsentimentality\nsentimentalization\nsentimentalize\nsentimentalizer\nsentimentally\nsentimenter\nsentimentless\nsentinel\nsentinellike\nsentinelship\nsentinelwise\nsentisection\nsentition\nsentry\nSenusi\nSenusian\nSenusism\nsepad\nsepal\nsepaled\nsepaline\nsepalled\nsepalody\nsepaloid\nseparability\nseparable\nseparableness\nseparably\nseparata\nseparate\nseparatedly\nseparately\nseparateness\nseparates\nseparatical\nseparating\nseparation\nseparationism\nseparationist\nseparatism\nseparatist\nseparatistic\nseparative\nseparatively\nseparativeness\nseparator\nseparatory\nseparatress\nseparatrix\nseparatum\nSepharad\nSephardi\nSephardic\nSephardim\nSepharvites\nsephen\nsephiric\nsephirothic\nsepia\nsepiaceous\nsepialike\nsepian\nsepiarian\nsepiary\nsepic\nsepicolous\nSepiidae\nsepiment\nsepioid\nSepioidea\nSepiola\nSepiolidae\nsepiolite\nsepion\nsepiost\nsepiostaire\nsepium\nsepone\nsepoy\nseppuku\nseps\nSepsidae\nsepsine\nsepsis\nSept\nsept\nsepta\nseptal\nseptan\nseptane\nseptangle\nseptangled\nseptangular\nseptangularness\nseptarian\nseptariate\nseptarium\nseptate\nseptated\nseptation\nseptatoarticulate\nseptavalent\nseptave\nseptcentenary\nseptectomy\nSeptember\nSeptemberer\nSeptemberism\nSeptemberist\nSeptembral\nSeptembrian\nSeptembrist\nSeptembrize\nSeptembrizer\nseptemdecenary\nseptemfid\nseptemfluous\nseptemfoliate\nseptemfoliolate\nseptemia\nseptempartite\nseptemplicate\nseptemvious\nseptemvir\nseptemvirate\nseptemviri\nseptenar\nseptenarian\nseptenarius\nseptenary\nseptenate\nseptendecennial\nseptendecimal\nseptennary\nseptennate\nseptenniad\nseptennial\nseptennialist\nseptenniality\nseptennially\nseptennium\nseptenous\nSeptentrio\nSeptentrion\nseptentrional\nseptentrionality\nseptentrionally\nseptentrionate\nseptentrionic\nsepterium\nseptet\nseptfoil\nSepti\nSeptibranchia\nSeptibranchiata\nseptic\nseptical\nseptically\nsepticemia\nsepticemic\nsepticidal\nsepticidally\nsepticity\nsepticization\nsepticolored\nsepticopyemia\nsepticopyemic\nseptier\nseptifarious\nseptiferous\nseptifluous\nseptifolious\nseptiform\nseptifragal\nseptifragally\nseptilateral\nseptile\nseptillion\nseptillionth\nseptimal\nseptimanal\nseptimanarian\nseptime\nseptimetritis\nseptimole\nseptinsular\nseptipartite\nseptisyllabic\nseptisyllable\nseptivalent\nseptleva\nSeptobasidium\nseptocosta\nseptocylindrical\nSeptocylindrium\nseptodiarrhea\nseptogerm\nSeptogloeum\nseptoic\nseptole\nseptomarginal\nseptomaxillary\nseptonasal\nSeptoria\nseptotomy\nseptship\nseptuagenarian\nseptuagenarianism\nseptuagenary\nseptuagesima\nSeptuagint\nseptuagint\nSeptuagintal\nseptulate\nseptulum\nseptum\nseptuncial\nseptuor\nseptuple\nseptuplet\nseptuplicate\nseptuplication\nsepulcher\nsepulchral\nsepulchralize\nsepulchrally\nsepulchrous\nsepultural\nsepulture\nsequa\nsequacious\nsequaciously\nsequaciousness\nsequacity\nSequan\nSequani\nSequanian\nsequel\nsequela\nsequelae\nsequelant\nsequence\nsequencer\nsequency\nsequent\nsequential\nsequentiality\nsequentially\nsequently\nsequest\nsequester\nsequestered\nsequesterment\nsequestra\nsequestrable\nsequestral\nsequestrate\nsequestration\nsequestrator\nsequestratrices\nsequestratrix\nsequestrectomy\nsequestrotomy\nsequestrum\nsequin\nsequitur\nSequoia\nser\nsera\nserab\nSerabend\nseragli\nseraglio\nserai\nserail\nseral\nseralbumin\nseralbuminous\nserang\nserape\nSerapea\nSerapeum\nseraph\nseraphic\nseraphical\nseraphically\nseraphicalness\nseraphicism\nseraphicness\nseraphim\nseraphina\nseraphine\nseraphism\nseraphlike\nseraphtide\nSerapias\nSerapic\nSerapis\nSerapist\nserasker\nseraskerate\nseraskier\nseraskierat\nserau\nseraw\nSerb\nSerbdom\nSerbian\nSerbize\nSerbonian\nSerbophile\nSerbophobe\nsercial\nserdab\nSerdar\nSere\nsere\nSerean\nsereh\nSerena\nserenade\nserenader\nserenata\nserenate\nSerendib\nserendibite\nserendipity\nserendite\nserene\nserenely\nsereneness\nserenify\nserenissime\nserenissimi\nserenissimo\nserenity\nserenize\nSerenoa\nSerer\nSeres\nsereward\nserf\nserfage\nserfdom\nserfhood\nserfish\nserfishly\nserfishness\nserfism\nserflike\nserfship\nSerge\nserge\nsergeancy\nSergeant\nsergeant\nsergeantcy\nsergeantess\nsergeantry\nsergeantship\nsergeanty\nsergedesoy\nSergei\nserger\nsergette\nserging\nSergio\nSergiu\nSergius\nserglobulin\nSeri\nserial\nserialist\nseriality\nserialization\nserialize\nserially\nSerian\nseriary\nseriate\nseriately\nseriatim\nseriation\nSeric\nSericana\nsericate\nsericated\nsericea\nsericeotomentose\nsericeous\nsericicultural\nsericiculture\nsericiculturist\nsericin\nsericipary\nsericite\nsericitic\nsericitization\nSericocarpus\nsericteria\nsericterium\nserictery\nsericultural\nsericulture\nsericulturist\nseriema\nseries\nserif\nserific\nSeriform\nserigraph\nserigrapher\nserigraphy\nserimeter\nserin\nserine\nserinette\nseringa\nseringal\nseringhi\nSerinus\nserio\nseriocomedy\nseriocomic\nseriocomical\nseriocomically\nseriogrotesque\nSeriola\nSeriolidae\nserioline\nserioludicrous\nseriopantomimic\nserioridiculous\nseriosity\nserious\nseriously\nseriousness\nseripositor\nSerjania\nserjeant\nserment\nsermo\nsermocination\nsermocinatrix\nsermon\nsermoneer\nsermoner\nsermonesque\nsermonet\nsermonettino\nsermonic\nsermonically\nsermonics\nsermonish\nsermonism\nsermonist\nsermonize\nsermonizer\nsermonless\nsermonoid\nsermonolatry\nsermonology\nsermonproof\nsermonwise\nsermuncle\nsernamby\nsero\nseroalbumin\nseroalbuminuria\nseroanaphylaxis\nserobiological\nserocolitis\nserocyst\nserocystic\nserodermatosis\nserodermitis\nserodiagnosis\nserodiagnostic\nseroenteritis\nseroenzyme\nserofibrinous\nserofibrous\nserofluid\nserogelatinous\nserohemorrhagic\nserohepatitis\nseroimmunity\nserolactescent\nserolemma\nserolin\nserolipase\nserologic\nserological\nserologically\nserologist\nserology\nseromaniac\nseromembranous\nseromucous\nseromuscular\nseron\nseronegative\nseronegativity\nseroon\nseroot\nseroperitoneum\nserophthisis\nserophysiology\nseroplastic\nseropneumothorax\nseropositive\nseroprevention\nseroprognosis\nseroprophylaxis\nseroprotease\nseropuriform\nseropurulent\nseropus\nseroreaction\nserosa\nserosanguineous\nserosanguinolent\nseroscopy\nserositis\nserosity\nserosynovial\nserosynovitis\nserotherapeutic\nserotherapeutics\nserotherapist\nserotherapy\nserotina\nserotinal\nserotine\nserotinous\nserotoxin\nserous\nserousness\nserovaccine\nserow\nserozyme\nSerpari\nserpedinous\nSerpens\nSerpent\nserpent\nserpentaria\nSerpentarian\nSerpentarii\nserpentarium\nSerpentarius\nserpentary\nserpentcleide\nserpenteau\nSerpentes\nserpentess\nSerpentian\nserpenticidal\nserpenticide\nSerpentid\nserpentiferous\nserpentiform\nserpentina\nserpentine\nserpentinely\nSerpentinian\nserpentinic\nserpentiningly\nserpentinization\nserpentinize\nserpentinoid\nserpentinous\nSerpentis\nserpentivorous\nserpentize\nserpentlike\nserpently\nserpentoid\nserpentry\nserpentwood\nserphid\nSerphidae\nserphoid\nSerphoidea\nserpierite\nserpiginous\nserpiginously\nserpigo\nserpivolant\nserpolet\nSerpula\nserpula\nSerpulae\nserpulae\nserpulan\nserpulid\nSerpulidae\nserpulidan\nserpuline\nserpulite\nserpulitic\nserpuloid\nserra\nserradella\nserrage\nserran\nserrana\nserranid\nSerranidae\nSerrano\nserrano\nserranoid\nSerranus\nSerrasalmo\nserrate\nserrated\nserratic\nserratiform\nserratile\nserration\nserratirostral\nserratocrenate\nserratodentate\nserratodenticulate\nserratoglandulous\nserratospinose\nserrature\nserricorn\nSerricornia\nSerridentines\nSerridentinus\nserried\nserriedly\nserriedness\nSerrifera\nserriferous\nserriform\nserriped\nserrirostrate\nserrulate\nserrulated\nserrulation\nserry\nsert\nserta\nSertularia\nsertularian\nSertulariidae\nsertularioid\nsertule\nsertulum\nsertum\nserum\nserumal\nserut\nservable\nservage\nserval\nservaline\nservant\nservantcy\nservantdom\nservantess\nservantless\nservantlike\nservantry\nservantship\nservation\nserve\nservente\nserventism\nserver\nservery\nservet\nServetian\nServetianism\nServian\nservice\nserviceability\nserviceable\nserviceableness\nserviceably\nserviceberry\nserviceless\nservicelessness\nserviceman\nServidor\nservidor\nservient\nserviential\nserviette\nservile\nservilely\nservileness\nservilism\nservility\nservilize\nserving\nservingman\nservist\nServite\nservitor\nservitorial\nservitorship\nservitress\nservitrix\nservitude\nserviture\nServius\nservo\nservomechanism\nservomotor\nservulate\nserwamby\nsesame\nsesamoid\nsesamoidal\nsesamoiditis\nSesamum\nSesban\nSesbania\nsescuple\nSeseli\nSeshat\nSesia\nSesiidae\nsesma\nsesqui\nsesquialter\nsesquialtera\nsesquialteral\nsesquialteran\nsesquialterous\nsesquibasic\nsesquicarbonate\nsesquicentennial\nsesquichloride\nsesquiduplicate\nsesquihydrate\nsesquihydrated\nsesquinona\nsesquinonal\nsesquioctava\nsesquioctaval\nsesquioxide\nsesquipedal\nsesquipedalian\nsesquipedalianism\nsesquipedality\nsesquiplicate\nsesquiquadrate\nsesquiquarta\nsesquiquartal\nsesquiquartile\nsesquiquinta\nsesquiquintal\nsesquiquintile\nsesquisalt\nsesquiseptimal\nsesquisextal\nsesquisilicate\nsesquisquare\nsesquisulphate\nsesquisulphide\nsesquisulphuret\nsesquiterpene\nsesquitertia\nsesquitertial\nsesquitertian\nsesquitertianal\nsess\nsessile\nsessility\nSessiliventres\nsession\nsessional\nsessionary\nsessions\nsesterce\nsestertium\nsestet\nsesti\nsestiad\nSestian\nsestina\nsestine\nsestole\nsestuor\nSesuto\nSesuvium\nset\nseta\nsetaceous\nsetaceously\nsetae\nsetal\nSetaria\nsetarious\nsetback\nsetbolt\nsetdown\nsetfast\nSeth\nseth\nsethead\nSethian\nSethic\nSethite\nSetibo\nsetier\nSetifera\nsetiferous\nsetiform\nsetigerous\nsetiparous\nsetirostral\nsetline\nsetness\nsetoff\nseton\nSetophaga\nSetophaginae\nsetophagine\nsetose\nsetous\nsetout\nsetover\nsetscrew\nsetsman\nsett\nsettable\nsettaine\nsettee\nsetter\nsettergrass\nsetterwort\nsetting\nsettle\nsettleable\nsettled\nsettledly\nsettledness\nsettlement\nsettler\nsettlerdom\nsettling\nsettlings\nsettlor\nsettsman\nsetula\nsetule\nsetuliform\nsetulose\nsetulous\nsetup\nsetwall\nsetwise\nsetwork\nseugh\nSevastopol\nseven\nsevenbark\nsevener\nsevenfold\nsevenfolded\nsevenfoldness\nsevennight\nsevenpence\nsevenpenny\nsevenscore\nseventeen\nseventeenfold\nseventeenth\nseventeenthly\nseventh\nseventhly\nseventieth\nseventy\nseventyfold\nsever\nseverable\nseveral\nseveralfold\nseverality\nseveralize\nseverally\nseveralness\nseveralth\nseveralty\nseverance\nseveration\nsevere\nseveredly\nseverely\nsevereness\nseverer\nSeverian\nseveringly\nseverish\nseverity\nseverization\nseverize\nsevery\nSevillian\nsew\nsewable\nsewage\nsewan\nsewed\nsewellel\nsewen\nsewer\nsewerage\nsewered\nsewerless\nsewerlike\nsewerman\nsewery\nsewing\nsewless\nsewn\nsewround\nsex\nsexadecimal\nsexagenarian\nsexagenarianism\nsexagenary\nSexagesima\nsexagesimal\nsexagesimally\nsexagesimals\nsexagonal\nsexangle\nsexangled\nsexangular\nsexangularly\nsexannulate\nsexarticulate\nsexcentenary\nsexcuspidate\nsexdigital\nsexdigitate\nsexdigitated\nsexdigitism\nsexed\nsexenary\nsexennial\nsexennially\nsexennium\nsexern\nsexfarious\nsexfid\nsexfoil\nsexhood\nsexifid\nsexillion\nsexiped\nsexipolar\nsexisyllabic\nsexisyllable\nsexitubercular\nsexivalence\nsexivalency\nsexivalent\nsexless\nsexlessly\nsexlessness\nsexlike\nsexlocular\nsexly\nsexological\nsexologist\nsexology\nsexpartite\nsexradiate\nsext\nsextactic\nsextain\nsextan\nsextans\nSextant\nsextant\nsextantal\nsextar\nsextarii\nsextarius\nsextary\nsextennial\nsextern\nsextet\nsextic\nsextile\nSextilis\nsextillion\nsextillionth\nsextipara\nsextipartite\nsextipartition\nsextiply\nsextipolar\nsexto\nsextodecimo\nsextole\nsextolet\nsexton\nsextoness\nsextonship\nsextry\nsextubercular\nsextuberculate\nsextula\nsextulary\nsextumvirate\nsextuple\nsextuplet\nsextuplex\nsextuplicate\nsextuply\nsexual\nsexuale\nsexualism\nsexualist\nsexuality\nsexualization\nsexualize\nsexually\nsexuous\nsexupara\nsexuparous\nsexy\nsey\nseybertite\nSeymeria\nSeymour\nsfoot\nSgad\nsgraffiato\nsgraffito\nsh\nsha\nshaatnez\nshab\nShaban\nshabash\nShabbath\nshabbed\nshabbify\nshabbily\nshabbiness\nshabble\nshabby\nshabbyish\nshabrack\nshabunder\nShabuoth\nshachle\nshachly\nshack\nshackanite\nshackatory\nshackbolt\nshackland\nshackle\nshacklebone\nshackledom\nshackler\nshacklewise\nshackling\nshackly\nshacky\nshad\nshadbelly\nshadberry\nshadbird\nshadbush\nshadchan\nshaddock\nshade\nshaded\nshadeful\nshadeless\nshadelessness\nshader\nshadetail\nshadflower\nshadily\nshadine\nshadiness\nshading\nshadkan\nshadoof\nShadow\nshadow\nshadowable\nshadowbox\nshadowboxing\nshadowed\nshadower\nshadowfoot\nshadowgram\nshadowgraph\nshadowgraphic\nshadowgraphist\nshadowgraphy\nshadowily\nshadowiness\nshadowing\nshadowishly\nshadowist\nshadowland\nshadowless\nshadowlessness\nshadowlike\nshadowly\nshadowy\nshadrach\nshady\nshaffle\nShafiite\nshaft\nshafted\nshafter\nshaftfoot\nshafting\nshaftless\nshaftlike\nshaftman\nshaftment\nshaftsman\nshaftway\nshafty\nshag\nshaganappi\nshagbag\nshagbark\nshagged\nshaggedness\nshaggily\nshagginess\nshaggy\nShagia\nshaglet\nshaglike\nshagpate\nshagrag\nshagreen\nshagreened\nshagroon\nshagtail\nshah\nShahaptian\nshaharith\nshahdom\nshahi\nShahid\nshahin\nshahzada\nShai\nShaigia\nshaikh\nShaikiyeh\nshaitan\nShaiva\nShaivism\nShaka\nshakable\nshake\nshakeable\nshakebly\nshakedown\nshakefork\nshaken\nshakenly\nshakeout\nshakeproof\nShaker\nshaker\nshakerag\nShakerdom\nShakeress\nShakerism\nShakerlike\nshakers\nshakescene\nShakespearean\nShakespeareana\nShakespeareanism\nShakespeareanly\nShakespearize\nShakespearolater\nShakespearolatry\nshakha\nShakil\nshakily\nshakiness\nshaking\nshakingly\nshako\nshaksheer\nShakta\nShakti\nshakti\nShaktism\nshaku\nshaky\nShakyamuni\nShalako\nshale\nshalelike\nshaleman\nshall\nshallal\nshallon\nshalloon\nshallop\nshallopy\nshallot\nshallow\nshallowbrained\nshallowhearted\nshallowish\nshallowist\nshallowly\nshallowness\nshallowpate\nshallowpated\nshallows\nshallowy\nshallu\nshalom\nshalt\nshalwar\nshaly\nSham\nsham\nshama\nshamable\nshamableness\nshamably\nshamal\nshamalo\nshaman\nshamaness\nshamanic\nshamanism\nshamanist\nshamanistic\nshamanize\nshamateur\nshamba\nShambala\nshamble\nshambling\nshamblingly\nshambrier\nShambu\nshame\nshameable\nshamed\nshameface\nshamefaced\nshamefacedly\nshamefacedness\nshamefast\nshamefastly\nshamefastness\nshameful\nshamefully\nshamefulness\nshameless\nshamelessly\nshamelessness\nshameproof\nshamer\nshamesick\nshameworthy\nshamianah\nShamim\nshamir\nShammar\nshammed\nshammer\nshammick\nshamming\nshammish\nshammock\nshammocking\nshammocky\nshammy\nshampoo\nshampooer\nshamrock\nshamroot\nshamsheer\nShan\nshan\nshanachas\nshanachie\nShandean\nshandry\nshandrydan\nShandy\nshandy\nshandygaff\nShandyism\nShane\nShang\nShangalla\nshangan\nShanghai\nshanghai\nshanghaier\nshank\nShankar\nshanked\nshanker\nshankings\nshankpiece\nshanksman\nshanna\nShannon\nshanny\nshansa\nshant\nShantung\nshanty\nshantylike\nshantyman\nshantytown\nshap\nshapable\nShape\nshape\nshaped\nshapeful\nshapeless\nshapelessly\nshapelessness\nshapeliness\nshapely\nshapen\nshaper\nshapeshifter\nshapesmith\nshaping\nshapingly\nshapometer\nshaps\nShaptan\nshapy\nsharable\nSharada\nSharan\nshard\nShardana\nsharded\nshardy\nshare\nshareable\nsharebone\nsharebroker\nsharecrop\nsharecropper\nshareholder\nshareholdership\nshareman\nsharepenny\nsharer\nshareship\nsharesman\nsharewort\nSharezer\nshargar\nShari\nSharia\nSharira\nshark\nsharkful\nsharkish\nsharklet\nsharklike\nsharkship\nsharkskin\nsharky\nsharn\nsharnbud\nsharny\nSharon\nsharp\nsharpen\nsharpener\nsharper\nsharpie\nsharpish\nsharply\nsharpness\nsharps\nsharpsaw\nsharpshin\nsharpshod\nsharpshooter\nsharpshooting\nsharptail\nsharpware\nsharpy\nSharra\nsharrag\nsharry\nShasta\nshastaite\nShastan\nshaster\nshastra\nshastraik\nshastri\nshastrik\nshat\nshatan\nshathmont\nShatter\nshatter\nshatterbrain\nshatterbrained\nshatterer\nshatterheaded\nshattering\nshatteringly\nshatterment\nshatterpated\nshatterproof\nshatterwit\nshattery\nshattuckite\nshauchle\nshaugh\nshaul\nShaula\nshaup\nshauri\nshauwe\nshavable\nshave\nshaveable\nshaved\nshavee\nshaveling\nshaven\nshaver\nshavery\nShavese\nshavester\nshavetail\nshaveweed\nShavian\nShaviana\nShavianism\nshaving\nshavings\nShaw\nshaw\nShawanese\nShawano\nshawl\nshawled\nshawling\nshawlless\nshawllike\nshawlwise\nshawm\nShawn\nShawnee\nshawneewood\nshawny\nShawwal\nshawy\nshay\nShaysite\nshe\nshea\nsheading\nsheaf\nsheafage\nsheaflike\nsheafripe\nsheafy\nsheal\nshealing\nShean\nshear\nshearbill\nsheard\nshearer\nsheargrass\nshearhog\nshearing\nshearless\nshearling\nshearman\nshearmouse\nshears\nshearsman\nsheartail\nshearwater\nshearwaters\nsheat\nsheatfish\nsheath\nsheathbill\nsheathe\nsheathed\nsheather\nsheathery\nsheathing\nsheathless\nsheathlike\nsheathy\nsheave\nsheaved\nsheaveless\nsheaveman\nshebang\nShebat\nshebeen\nshebeener\nShechem\nShechemites\nshed\nshedded\nshedder\nshedding\nsheder\nshedhand\nshedlike\nshedman\nshedwise\nshee\nsheely\nsheen\nsheenful\nsheenless\nsheenly\nsheeny\nsheep\nsheepback\nsheepberry\nsheepbine\nsheepbiter\nsheepbiting\nsheepcote\nsheepcrook\nsheepfaced\nsheepfacedly\nsheepfacedness\nsheepfold\nsheepfoot\nsheepgate\nsheephead\nsheepheaded\nsheephearted\nsheepherder\nsheepherding\nsheephook\nsheephouse\nsheepify\nsheepish\nsheepishly\nsheepishness\nsheepkeeper\nsheepkeeping\nsheepkill\nsheepless\nsheeplet\nsheeplike\nsheepling\nsheepman\nsheepmaster\nsheepmonger\nsheepnose\nsheepnut\nsheeppen\nsheepshank\nsheepshead\nsheepsheadism\nsheepshear\nsheepshearer\nsheepshearing\nsheepshed\nsheepskin\nsheepsplit\nsheepsteal\nsheepstealer\nsheepstealing\nsheepwalk\nsheepwalker\nsheepweed\nsheepy\nsheer\nsheered\nsheering\nsheerly\nsheerness\nsheet\nsheetage\nsheeted\nsheeter\nsheetflood\nsheetful\nsheeting\nsheetless\nsheetlet\nsheetlike\nsheetling\nsheetways\nsheetwise\nsheetwork\nsheetwriting\nsheety\nSheffield\nshehitah\nsheik\nsheikdom\nsheikhlike\nsheikhly\nsheiklike\nsheikly\nSheila\nshekel\nShekinah\nShel\nshela\nsheld\nsheldapple\nshelder\nsheldfowl\nsheldrake\nshelduck\nshelf\nshelfback\nshelffellow\nshelfful\nshelflist\nshelfmate\nshelfpiece\nshelfroom\nshelfworn\nshelfy\nshell\nshellac\nshellacker\nshellacking\nshellapple\nshellback\nshellblow\nshellblowing\nshellbound\nshellburst\nshellcracker\nshelleater\nshelled\nsheller\nShelleyan\nShelleyana\nshellfire\nshellfish\nshellfishery\nshellflower\nshellful\nshellhead\nshelliness\nshelling\nshellman\nshellmonger\nshellproof\nshellshake\nshellum\nshellwork\nshellworker\nshelly\nshellycoat\nshelta\nshelter\nshelterage\nsheltered\nshelterer\nshelteringly\nshelterless\nshelterlessness\nshelterwood\nsheltery\nsheltron\nshelty\nshelve\nshelver\nshelving\nshelvingly\nshelvingness\nshelvy\nShelyak\nShemaka\nsheminith\nShemite\nShemitic\nShemitish\nShemu\nShen\nshenanigan\nshend\nsheng\nShenshai\nSheol\nsheolic\nshepherd\nshepherdage\nshepherddom\nshepherdess\nshepherdhood\nShepherdia\nshepherdish\nshepherdism\nshepherdize\nshepherdless\nshepherdlike\nshepherdling\nshepherdly\nshepherdry\nsheppeck\nsheppey\nshepstare\nsher\nSherani\nSherardia\nsherardize\nsherardizer\nSheratan\nSheraton\nsherbacha\nsherbet\nsherbetlee\nsherbetzide\nsheriat\nsherif\nsherifa\nsherifate\nsheriff\nsheriffalty\nsheriffdom\nsheriffess\nsheriffhood\nsheriffry\nsheriffship\nsheriffwick\nsherifi\nsherifian\nsherify\nsheristadar\nSheriyat\nsherlock\nSherman\nSherpa\nSherramoor\nSherri\nsherry\nSherrymoor\nsherryvallies\nShesha\nsheth\nShetland\nShetlander\nShetlandic\nsheugh\nsheva\nshevel\nsheveled\nshevri\nshewa\nshewbread\nshewel\nsheyle\nshi\nShiah\nshibah\nshibar\nshibboleth\nshibbolethic\nshibuichi\nshice\nshicer\nshicker\nshickered\nshide\nshied\nshiel\nshield\nshieldable\nshieldboard\nshielddrake\nshielded\nshielder\nshieldflower\nshielding\nshieldless\nshieldlessly\nshieldlessness\nshieldlike\nshieldling\nshieldmaker\nshieldmay\nshieldtail\nshieling\nshier\nshies\nshiest\nshift\nshiftable\nshiftage\nshifter\nshiftful\nshiftfulness\nshiftily\nshiftiness\nshifting\nshiftingly\nshiftingness\nshiftless\nshiftlessly\nshiftlessness\nshifty\nShigella\nshiggaion\nshigram\nshih\nShiism\nShiite\nShiitic\nShik\nshikar\nshikara\nshikargah\nshikari\nshikasta\nshikimi\nshikimic\nshikimole\nshikimotoxin\nshikken\nshiko\nshikra\nshilf\nshilfa\nShilh\nShilha\nshill\nshilla\nshillaber\nshillelagh\nshillet\nshillety\nshillhouse\nshillibeer\nshilling\nshillingless\nshillingsworth\nshilloo\nShilluh\nShilluk\nShiloh\nshilpit\nshim\nshimal\nShimei\nshimmer\nshimmering\nshimmeringly\nshimmery\nshimmy\nShimonoseki\nshimose\nshimper\nshin\nShina\nshinaniging\nshinarump\nshinbone\nshindig\nshindle\nshindy\nshine\nshineless\nshiner\nshingle\nshingled\nshingler\nshingles\nshinglewise\nshinglewood\nshingling\nshingly\nshinily\nshininess\nshining\nshiningly\nshiningness\nshinleaf\nShinnecock\nshinner\nshinnery\nshinning\nshinny\nshinplaster\nshintiyan\nShinto\nShintoism\nShintoist\nShintoistic\nShintoize\nshinty\nShinwari\nshinwood\nshiny\nshinza\nship\nshipboard\nshipbound\nshipboy\nshipbreaking\nshipbroken\nshipbuilder\nshipbuilding\nshipcraft\nshipentine\nshipful\nshipkeeper\nshiplap\nshipless\nshiplessly\nshiplet\nshipload\nshipman\nshipmanship\nshipmast\nshipmaster\nshipmate\nshipmatish\nshipment\nshipowner\nshipowning\nshippable\nshippage\nshipped\nshipper\nshipping\nshipplane\nshippo\nshippon\nshippy\nshipshape\nshipshapely\nshipside\nshipsmith\nshipward\nshipwards\nshipway\nshipwork\nshipworm\nshipwreck\nshipwrecky\nshipwright\nshipwrightery\nshipwrightry\nshipyard\nshirakashi\nshirallee\nShiraz\nshire\nshirehouse\nshireman\nshirewick\nshirk\nshirker\nshirky\nshirl\nshirlcock\nShirley\nshirpit\nshirr\nshirring\nshirt\nshirtband\nshirtiness\nshirting\nshirtless\nshirtlessness\nshirtlike\nshirtmaker\nshirtmaking\nshirtman\nshirttail\nshirtwaist\nshirty\nShirvan\nshish\nshisham\nshisn\nshita\nshitepoke\nshither\nshittah\nshittim\nshittimwood\nshiv\nShivaism\nShivaist\nShivaistic\nShivaite\nshivaree\nshive\nshiver\nshivereens\nshiverer\nshivering\nshiveringly\nshiverproof\nshiversome\nshiverweed\nshivery\nshivey\nshivoo\nshivy\nshivzoku\nShkupetar\nShlu\nShluh\nSho\nsho\nShoa\nshoad\nshoader\nshoal\nshoalbrain\nshoaler\nshoaliness\nshoalness\nshoalwise\nshoaly\nshoat\nshock\nshockability\nshockable\nshockedness\nshocker\nshockheaded\nshocking\nshockingly\nshockingness\nshocklike\nshockproof\nshod\nshodden\nshoddily\nshoddiness\nshoddy\nshoddydom\nshoddyism\nshoddyite\nshoddylike\nshoddyward\nshoddywards\nshode\nshoder\nshoe\nshoebill\nshoebinder\nshoebindery\nshoebinding\nshoebird\nshoeblack\nshoeboy\nshoebrush\nshoecraft\nshoeflower\nshoehorn\nshoeing\nshoeingsmith\nshoelace\nshoeless\nshoemaker\nshoemaking\nshoeman\nshoepack\nshoer\nshoescraper\nshoeshine\nshoeshop\nshoesmith\nshoestring\nshoewoman\nshoful\nshog\nshogaol\nshoggie\nshoggle\nshoggly\nshogi\nshogun\nshogunal\nshogunate\nshohet\nshoji\nShojo\nshola\nshole\nShona\nshone\nshoneen\nshonkinite\nshoo\nshood\nshoofa\nshoofly\nshooi\nshook\nshool\nshooldarry\nshooler\nshoop\nshoopiltie\nshoor\nshoot\nshootable\nshootboard\nshootee\nshooter\nshoother\nshooting\nshootist\nshootman\nshop\nshopboard\nshopbook\nshopboy\nshopbreaker\nshopbreaking\nshopfolk\nshopful\nshopgirl\nshopgirlish\nshophar\nshopkeeper\nshopkeeperess\nshopkeeperish\nshopkeeperism\nshopkeepery\nshopkeeping\nshopland\nshoplet\nshoplifter\nshoplifting\nshoplike\nshopmaid\nshopman\nshopmark\nshopmate\nshopocracy\nshopocrat\nshoppe\nshopper\nshopping\nshoppish\nshoppishness\nshoppy\nshopster\nshoptalk\nshopwalker\nshopwear\nshopwife\nshopwindow\nshopwoman\nshopwork\nshopworker\nshopworn\nshoq\nShor\nshor\nshoran\nshore\nShorea\nshoreberry\nshorebush\nshored\nshoregoing\nshoreland\nshoreless\nshoreman\nshorer\nshoreside\nshoresman\nshoreward\nshorewards\nshoreweed\nshoreyer\nshoring\nshorling\nshorn\nshort\nshortage\nshortbread\nshortcake\nshortchange\nshortchanger\nshortclothes\nshortcoat\nshortcomer\nshortcoming\nshorten\nshortener\nshortening\nshorter\nshortfall\nshorthand\nshorthanded\nshorthandedness\nshorthander\nshorthead\nshorthorn\nShortia\nshortish\nshortly\nshortness\nshorts\nshortschat\nshortsighted\nshortsightedly\nshortsightedness\nshortsome\nshortstaff\nshortstop\nshorttail\nShortzy\nShoshonean\nshoshonite\nshot\nshotbush\nshote\nshotgun\nshotless\nshotlike\nshotmaker\nshotman\nshotproof\nshotsman\nshotstar\nshott\nshotted\nshotten\nshotter\nshotty\nShotweld\nshou\nshould\nshoulder\nshouldered\nshoulderer\nshoulderette\nshouldering\nshouldna\nshouldnt\nshoupeltin\nshout\nshouter\nshouting\nshoutingly\nshoval\nshove\nshovegroat\nshovel\nshovelard\nshovelbill\nshovelboard\nshovelfish\nshovelful\nshovelhead\nshovelmaker\nshovelman\nshovelnose\nshovelweed\nshover\nshow\nshowable\nshowance\nshowbird\nshowboard\nshowboat\nshowboater\nshowboating\nshowcase\nshowdom\nshowdown\nshower\nshowerer\nshowerful\nshoweriness\nshowerless\nshowerlike\nshowerproof\nshowery\nshowily\nshowiness\nshowing\nshowish\nshowless\nshowman\nshowmanism\nshowmanry\nshowmanship\nshown\nshowpiece\nshowroom\nshowup\nshowworthy\nshowy\nshowyard\nshoya\nshrab\nshraddha\nshradh\nshraf\nshrag\nshram\nshrank\nshrap\nshrapnel\nshrave\nshravey\nshreadhead\nshred\nshredcock\nshredder\nshredding\nshreddy\nshredless\nshredlike\nShree\nshree\nshreeve\nshrend\nshrew\nshrewd\nshrewdish\nshrewdly\nshrewdness\nshrewdom\nshrewdy\nshrewish\nshrewishly\nshrewishness\nshrewlike\nshrewly\nshrewmouse\nshrewstruck\nshriek\nshrieker\nshriekery\nshriekily\nshriekiness\nshriekingly\nshriekproof\nshrieky\nshrieval\nshrievalty\nshrift\nshrike\nshrill\nshrilling\nshrillish\nshrillness\nshrilly\nshrimp\nshrimper\nshrimpfish\nshrimpi\nshrimpish\nshrimpishness\nshrimplike\nshrimpy\nshrinal\nShrine\nshrine\nshrineless\nshrinelet\nshrinelike\nShriner\nshrink\nshrinkable\nshrinkage\nshrinkageproof\nshrinker\nshrinkhead\nshrinking\nshrinkingly\nshrinkproof\nshrinky\nshrip\nshrite\nshrive\nshrivel\nshriven\nshriver\nshriving\nshroff\nshrog\nShropshire\nshroud\nshrouded\nshrouding\nshroudless\nshroudlike\nshroudy\nShrove\nshrove\nshrover\nShrovetide\nshrub\nshrubbed\nshrubbery\nshrubbiness\nshrubbish\nshrubby\nshrubland\nshrubless\nshrublet\nshrublike\nshrubwood\nshruff\nshrug\nshruggingly\nshrunk\nshrunken\nshrups\nShtokavski\nshtreimel\nShu\nshuba\nshubunkin\nshuck\nshucker\nshucking\nshuckins\nshuckpen\nshucks\nshudder\nshudderful\nshudderiness\nshudderingly\nshuddersome\nshuddery\nshuff\nshuffle\nshuffleboard\nshufflecap\nshuffler\nshufflewing\nshuffling\nshufflingly\nshug\nShuhali\nShukria\nShukulumbwe\nshul\nShulamite\nshuler\nshulwaurs\nshumac\nshun\nShunammite\nshune\nshunless\nshunnable\nshunner\nshunt\nshunter\nshunting\nshure\nshurf\nshush\nshusher\nShuswap\nshut\nshutdown\nshutness\nshutoff\nShutoku\nshutout\nshuttance\nshutten\nshutter\nshuttering\nshutterless\nshutterwise\nshutting\nshuttle\nshuttlecock\nshuttleheaded\nshuttlelike\nshuttlewise\nShuvra\nshwanpan\nshy\nShyam\nshydepoke\nshyer\nshyish\nShylock\nShylockism\nshyly\nshyness\nshyster\nsi\nSia\nsiak\nsial\nsialaden\nsialadenitis\nsialadenoncus\nsialagogic\nsialagogue\nsialagoguic\nsialemesis\nSialia\nsialic\nsialid\nSialidae\nsialidan\nSialis\nsialoangitis\nsialogenous\nsialoid\nsialolith\nsialolithiasis\nsialology\nsialorrhea\nsialoschesis\nsialosemeiology\nsialosis\nsialostenosis\nsialosyrinx\nsialozemia\nSiam\nsiamang\nSiamese\nsib\nSibbaldus\nsibbed\nsibbens\nsibber\nsibboleth\nsibby\nSiberian\nSiberic\nsiberite\nsibilance\nsibilancy\nsibilant\nsibilantly\nsibilate\nsibilatingly\nsibilator\nsibilatory\nsibilous\nsibilus\nSibiric\nsibling\nsibness\nsibrede\nsibship\nsibyl\nsibylesque\nsibylic\nsibylism\nsibylla\nsibylline\nsibyllist\nsic\nSicambri\nSicambrian\nSicana\nSicani\nSicanian\nsicarian\nsicarious\nsicarius\nsicca\nsiccaneous\nsiccant\nsiccate\nsiccation\nsiccative\nsiccimeter\nsiccity\nsice\nSicel\nSiceliot\nSicilian\nsicilian\nsiciliana\nSicilianism\nsicilica\nsicilicum\nsicilienne\nsicinnian\nsick\nsickbed\nsicken\nsickener\nsickening\nsickeningly\nsicker\nsickerly\nsickerness\nsickhearted\nsickish\nsickishly\nsickishness\nsickle\nsicklebill\nsickled\nsicklelike\nsickleman\nsicklemia\nsicklemic\nsicklepod\nsickler\nsicklerite\nsickless\nsickleweed\nsicklewise\nsicklewort\nsicklied\nsicklily\nsickliness\nsickling\nsickly\nsickness\nsicknessproof\nsickroom\nsicsac\nsicula\nsicular\nSiculi\nSiculian\nSicyonian\nSicyonic\nSicyos\nSid\nSida\nSidalcea\nsidder\nSiddha\nSiddhanta\nSiddhartha\nSiddhi\nsiddur\nside\nsideage\nsidearm\nsideboard\nsidebone\nsidebones\nsideburns\nsidecar\nsidecarist\nsidecheck\nsided\nsidedness\nsideflash\nsidehead\nsidehill\nsidekicker\nsidelang\nsideless\nsideline\nsideling\nsidelings\nsidelingwise\nsidelong\nsidenote\nsidepiece\nsider\nsideral\nsideration\nsiderealize\nsidereally\nsiderean\nsiderin\nsiderism\nsiderite\nsideritic\nSideritis\nsiderognost\nsiderographic\nsiderographical\nsiderographist\nsiderography\nsiderolite\nsiderology\nsideromagnetic\nsideromancy\nsideromelane\nsideronatrite\nsideronym\nsideroscope\nsiderose\nsiderosis\nsiderostat\nsiderostatic\nsiderotechny\nsiderous\nSideroxylon\nsidership\nsiderurgical\nsiderurgy\nsides\nsidesaddle\nsideshake\nsideslip\nsidesman\nsidesplitter\nsidesplitting\nsidesplittingly\nsidesway\nsideswipe\nsideswiper\nsidetrack\nsidewalk\nsideward\nsidewards\nsideway\nsideways\nsidewinder\nsidewipe\nsidewiper\nsidewise\nsidhe\nsidi\nsiding\nsidle\nsidler\nsidling\nsidlingly\nSidney\nSidonian\nSidrach\nsidth\nsidy\nsie\nsiege\nsiegeable\nsiegecraft\nsiegenite\nsieger\nsiegework\nSiegfried\nSieglingia\nSiegmund\nSiegurd\nSiena\nSienese\nsienna\nsier\nsiering\nsierozem\nSierra\nsierra\nsierran\nsiesta\nsiestaland\nSieva\nsieve\nsieveful\nsievelike\nsiever\nSieversia\nsievings\nsievy\nsifac\nsifaka\nSifatite\nsife\nsiffilate\nsiffle\nsifflement\nsifflet\nsifflot\nsift\nsiftage\nsifted\nsifter\nsifting\nsig\nSiganidae\nSiganus\nsigatoka\nSigaultian\nsigger\nsigh\nsigher\nsighful\nsighfully\nsighing\nsighingly\nsighingness\nsighless\nsighlike\nsight\nsightable\nsighted\nsighten\nsightening\nsighter\nsightful\nsightfulness\nsighthole\nsighting\nsightless\nsightlessly\nsightlessness\nsightlily\nsightliness\nsightly\nsightproof\nsightworthiness\nsightworthy\nsighty\nsigil\nsigilative\nSigillaria\nSigillariaceae\nsigillariaceous\nsigillarian\nsigillarid\nsigillarioid\nsigillarist\nsigillaroid\nsigillary\nsigillate\nsigillated\nsigillation\nsigillistic\nsigillographer\nsigillographical\nsigillography\nsigillum\nsigla\nsiglarian\nsiglos\nSigma\nsigma\nsigmaspire\nsigmate\nsigmatic\nsigmation\nsigmatism\nsigmodont\nSigmodontes\nsigmoid\nsigmoidal\nsigmoidally\nsigmoidectomy\nsigmoiditis\nsigmoidopexy\nsigmoidoproctostomy\nsigmoidorectostomy\nsigmoidoscope\nsigmoidoscopy\nsigmoidostomy\nSigmund\nsign\nsignable\nsignal\nsignalee\nsignaler\nsignalese\nsignaletic\nsignaletics\nsignalism\nsignalist\nsignality\nsignalize\nsignally\nsignalman\nsignalment\nsignary\nsignatary\nsignate\nsignation\nsignator\nsignatory\nsignatural\nsignature\nsignatureless\nsignaturist\nsignboard\nsignee\nsigner\nsignet\nsignetwise\nsignifer\nsignifiable\nsignifical\nsignificance\nsignificancy\nsignificant\nsignificantly\nsignificantness\nsignificate\nsignification\nsignificatist\nsignificative\nsignificatively\nsignificativeness\nsignificator\nsignificatory\nsignificatrix\nsignificature\nsignificavit\nsignifician\nsignifics\nsignifier\nsignify\nsignior\nsigniorship\nsignist\nsignless\nsignlike\nsignman\nsignorial\nsignorship\nsignory\nsignpost\nsignum\nsignwriter\nSigurd\nSihasapa\nSika\nsika\nsikar\nsikatch\nsike\nsikerly\nsikerness\nsiket\nSikh\nsikhara\nSikhism\nsikhra\nSikinnis\nSikkimese\nSiksika\nsil\nsilage\nsilaginoid\nsilane\nSilas\nsilbergroschen\nsilcrete\nsile\nsilen\nSilenaceae\nsilenaceous\nSilenales\nsilence\nsilenced\nsilencer\nsilency\nSilene\nsileni\nsilenic\nsilent\nsilential\nsilentiary\nsilentious\nsilentish\nsilently\nsilentness\nsilenus\nsilesia\nSilesian\nSiletz\nsilex\nsilexite\nsilhouette\nsilhouettist\nsilhouettograph\nsilica\nsilicam\nsilicane\nsilicate\nsilication\nsilicatization\nSilicea\nsilicean\nsiliceocalcareous\nsiliceofelspathic\nsiliceofluoric\nsiliceous\nsilicic\nsilicicalcareous\nsilicicolous\nsilicide\nsilicidize\nsiliciferous\nsilicification\nsilicifluoric\nsilicifluoride\nsilicify\nsiliciophite\nsilicious\nSilicispongiae\nsilicium\nsiliciuretted\nsilicize\nsilicle\nsilico\nsilicoacetic\nsilicoalkaline\nsilicoaluminate\nsilicoarsenide\nsilicocalcareous\nsilicochloroform\nsilicocyanide\nsilicoethane\nsilicoferruginous\nSilicoflagellata\nSilicoflagellatae\nsilicoflagellate\nSilicoflagellidae\nsilicofluoric\nsilicofluoride\nsilicohydrocarbon\nSilicoidea\nsilicomagnesian\nsilicomanganese\nsilicomethane\nsilicon\nsilicone\nsiliconize\nsilicononane\nsilicopropane\nsilicosis\nSilicospongiae\nsilicotalcose\nsilicotic\nsilicotitanate\nsilicotungstate\nsilicotungstic\nsilicula\nsilicular\nsilicule\nsiliculose\nsiliculous\nsilicyl\nSilipan\nsiliqua\nsiliquaceous\nsiliquae\nSiliquaria\nSiliquariidae\nsilique\nsiliquiferous\nsiliquiform\nsiliquose\nsiliquous\nsilk\nsilkalene\nsilkaline\nsilked\nsilken\nsilker\nsilkflower\nsilkgrower\nsilkie\nsilkily\nsilkiness\nsilklike\nsilkman\nsilkness\nsilksman\nsilktail\nsilkweed\nsilkwoman\nsilkwood\nsilkwork\nsilkworks\nsilkworm\nsilky\nsill\nsillabub\nsilladar\nSillaginidae\nSillago\nsillandar\nsillar\nsiller\nSillery\nsillibouk\nsillikin\nsillily\nsillimanite\nsilliness\nsillock\nsillograph\nsillographer\nsillographist\nsillometer\nsillon\nsilly\nsillyhood\nsillyhow\nsillyish\nsillyism\nsillyton\nsilo\nsiloist\nSilpha\nsilphid\nSilphidae\nsilphium\nsilt\nsiltage\nsiltation\nsilting\nsiltlike\nsilty\nsilundum\nSilures\nSilurian\nSiluric\nsilurid\nSiluridae\nSiluridan\nsiluroid\nSiluroidei\nSilurus\nsilva\nsilvan\nsilvanity\nsilvanry\nSilvanus\nsilvendy\nsilver\nsilverback\nsilverbeater\nsilverbelly\nsilverberry\nsilverbill\nsilverboom\nsilverbush\nsilvered\nsilverer\nsilvereye\nsilverfin\nsilverfish\nsilverhead\nsilverily\nsilveriness\nsilvering\nsilverish\nsilverite\nsilverize\nsilverizer\nsilverleaf\nsilverless\nsilverlike\nsilverling\nsilverly\nsilvern\nsilverness\nsilverpoint\nsilverrod\nsilverside\nsilversides\nsilverskin\nsilversmith\nsilversmithing\nsilverspot\nsilvertail\nsilvertip\nsilvertop\nsilvervine\nsilverware\nsilverweed\nsilverwing\nsilverwood\nsilverwork\nsilverworker\nsilvery\nSilvester\nSilvia\nsilvical\nsilvicolous\nsilvics\nsilvicultural\nsilviculturally\nsilviculture\nsilviculturist\nSilvius\nSilybum\nsilyl\nSim\nsima\nSimaba\nsimal\nsimar\nSimarouba\nSimaroubaceae\nsimaroubaceous\nsimball\nsimbil\nsimblin\nsimblot\nSimblum\nsime\nSimeon\nSimeonism\nSimeonite\nSimia\nsimiad\nsimial\nsimian\nsimianity\nsimiesque\nSimiidae\nSimiinae\nsimilar\nsimilarity\nsimilarize\nsimilarly\nsimilative\nsimile\nsimilimum\nsimiliter\nsimilitive\nsimilitude\nsimilitudinize\nsimility\nsimilize\nsimilor\nsimioid\nsimious\nsimiousness\nsimity\nsimkin\nsimlin\nsimling\nsimmer\nsimmeringly\nsimmon\nsimnel\nsimnelwise\nsimoleon\nSimon\nsimoniac\nsimoniacal\nsimoniacally\nSimonian\nSimonianism\nsimonious\nsimonism\nSimonist\nsimonist\nsimony\nsimool\nsimoom\nsimoon\nSimosaurus\nsimous\nsimp\nsimpai\nsimper\nsimperer\nsimperingly\nsimple\nsimplehearted\nsimpleheartedly\nsimpleheartedness\nsimpleness\nsimpler\nsimpleton\nsimpletonian\nsimpletonianism\nsimpletonic\nsimpletonish\nsimpletonism\nsimplex\nsimplexed\nsimplexity\nsimplicident\nSimplicidentata\nsimplicidentate\nsimplicist\nsimplicitarian\nsimplicity\nsimplicize\nsimplification\nsimplificative\nsimplificator\nsimplified\nsimplifiedly\nsimplifier\nsimplify\nsimplism\nsimplist\nsimplistic\nsimply\nsimsim\nsimson\nsimulacra\nsimulacral\nsimulacre\nsimulacrize\nsimulacrum\nsimulance\nsimulant\nsimular\nsimulate\nsimulation\nsimulative\nsimulatively\nsimulator\nsimulatory\nsimulcast\nsimuler\nsimuliid\nSimuliidae\nsimulioid\nSimulium\nsimultaneity\nsimultaneous\nsimultaneously\nsimultaneousness\nsin\nsina\nSinae\nSinaean\nSinaic\nsinaite\nSinaitic\nsinal\nsinalbin\nSinaloa\nsinamay\nsinamine\nsinapate\nsinapic\nsinapine\nsinapinic\nSinapis\nsinapis\nsinapism\nsinapize\nsinapoline\nsinarchism\nsinarchist\nsinarquism\nsinarquist\nsinarquista\nsinawa\nsincaline\nsince\nsincere\nsincerely\nsincereness\nsincerity\nsincipital\nsinciput\nsind\nsinder\nSindhi\nsindle\nsindoc\nsindon\nsindry\nsine\nsinecural\nsinecure\nsinecureship\nsinecurism\nsinecurist\nSinesian\nsinew\nsinewed\nsinewiness\nsinewless\nsinewous\nsinewy\nsinfonia\nsinfonie\nsinfonietta\nsinful\nsinfully\nsinfulness\nsing\nsingability\nsingable\nsingableness\nsingally\nsingarip\nsinge\nsinged\nsingeing\nsingeingly\nsinger\nsingey\nSingfo\nsingh\nSinghalese\nsingillatim\nsinging\nsingingly\nsingkamas\nsingle\nsinglebar\nsingled\nsinglehanded\nsinglehandedly\nsinglehandedness\nsinglehearted\nsingleheartedly\nsingleheartedness\nsinglehood\nsingleness\nsingler\nsingles\nsinglestick\nsinglesticker\nsinglet\nsingleton\nsingletree\nsinglings\nsingly\nSingpho\nSingsing\nsingsong\nsingsongy\nSingspiel\nsingspiel\nsingstress\nsingular\nsingularism\nsingularist\nsingularity\nsingularization\nsingularize\nsingularly\nsingularness\nsingult\nsingultous\nsingultus\nsinh\nSinhalese\nSinian\nSinic\nSinicism\nSinicization\nSinicize\nSinico\nSinification\nSinify\nsinigrin\nsinigrinase\nsinigrosid\nsinigroside\nSinisian\nSinism\nsinister\nsinisterly\nsinisterness\nsinisterwise\nsinistrad\nsinistral\nsinistrality\nsinistrally\nsinistration\nsinistrin\nsinistrocerebral\nsinistrocular\nsinistrodextral\nsinistrogyrate\nsinistrogyration\nsinistrogyric\nsinistromanual\nsinistrorsal\nsinistrorsally\nsinistrorse\nsinistrous\nsinistrously\nsinistruous\nSinite\nSinitic\nsink\nsinkable\nsinkage\nsinker\nsinkerless\nsinkfield\nsinkhead\nsinkhole\nsinking\nSinkiuse\nsinkless\nsinklike\nsinkroom\nsinkstone\nsinky\nsinless\nsinlessly\nsinlessness\nsinlike\nsinnable\nsinnableness\nsinnen\nsinner\nsinneress\nsinnership\nsinnet\nSinningia\nsinningly\nsinningness\nsinoatrial\nsinoauricular\nSinogram\nsinoidal\nSinolog\nSinologer\nSinological\nSinologist\nSinologue\nSinology\nsinomenine\nSinonism\nSinophile\nSinophilism\nsinopia\nSinopic\nsinopite\nsinople\nsinproof\nSinsiga\nsinsion\nsinsring\nsinsyne\nsinter\nSinto\nsintoc\nSintoism\nSintoist\nSintsink\nSintu\nsinuate\nsinuated\nsinuatedentate\nsinuately\nsinuation\nsinuatocontorted\nsinuatodentate\nsinuatodentated\nsinuatopinnatifid\nsinuatoserrated\nsinuatoundulate\nsinuatrial\nsinuauricular\nsinuitis\nsinuose\nsinuosely\nsinuosity\nsinuous\nsinuously\nsinuousness\nSinupallia\nsinupallial\nSinupallialia\nSinupalliata\nsinupalliate\nsinus\nsinusal\nsinusitis\nsinuslike\nsinusoid\nsinusoidal\nsinusoidally\nsinuventricular\nsinward\nsiol\nSion\nsion\nSionite\nSiouan\nSioux\nsip\nsipage\nsipe\nsiper\nsiphoid\nsiphon\nsiphonaceous\nsiphonage\nsiphonal\nSiphonales\nSiphonaptera\nsiphonapterous\nSiphonaria\nsiphonariid\nSiphonariidae\nSiphonata\nsiphonate\nSiphoneae\nsiphoneous\nsiphonet\nsiphonia\nsiphonial\nSiphoniata\nsiphonic\nSiphonifera\nsiphoniferous\nsiphoniform\nsiphonium\nsiphonless\nsiphonlike\nSiphonobranchiata\nsiphonobranchiate\nSiphonocladales\nSiphonocladiales\nsiphonogam\nSiphonogama\nsiphonogamic\nsiphonogamous\nsiphonogamy\nsiphonoglyph\nsiphonoglyphe\nsiphonognathid\nSiphonognathidae\nsiphonognathous\nSiphonognathus\nSiphonophora\nsiphonophoran\nsiphonophore\nsiphonophorous\nsiphonoplax\nsiphonopore\nsiphonorhinal\nsiphonorhine\nsiphonosome\nsiphonostele\nsiphonostelic\nsiphonostely\nSiphonostoma\nSiphonostomata\nsiphonostomatous\nsiphonostome\nsiphonostomous\nsiphonozooid\nsiphonula\nsiphorhinal\nsiphorhinian\nsiphosome\nsiphuncle\nsiphuncled\nsiphuncular\nSiphunculata\nsiphunculate\nsiphunculated\nSipibo\nsipid\nsipidity\nSiping\nsiping\nsipling\nsipper\nsippet\nsippingly\nsippio\nSipunculacea\nsipunculacean\nsipunculid\nSipunculida\nsipunculoid\nSipunculoidea\nSipunculus\nsipylite\nSir\nsir\nsircar\nsirdar\nsirdarship\nsire\nSiredon\nsireless\nsiren\nsirene\nSirenia\nsirenian\nsirenic\nsirenical\nsirenically\nSirenidae\nsirening\nsirenize\nsirenlike\nsirenoid\nSirenoidea\nSirenoidei\nsireny\nsireship\nsiress\nsirgang\nSirian\nsirian\nSirianian\nsiriasis\nsiricid\nSiricidae\nSiricoidea\nsirih\nsiriometer\nSirione\nsiris\nSirius\nsirkeer\nsirki\nsirky\nsirloin\nsirloiny\nSirmian\nSirmuellera\nsiroc\nsirocco\nsiroccoish\nsiroccoishly\nsirpea\nsirple\nsirpoon\nsirrah\nsirree\nsirship\nsiruaballi\nsiruelas\nsirup\nsiruped\nsiruper\nsirupy\nSiryan\nSis\nsis\nsisal\nsiscowet\nsise\nsisel\nsiserara\nsiserary\nsiserskite\nsish\nsisham\nsisi\nsiskin\nSisley\nsismotherapy\nsiss\nSisseton\nsissification\nsissify\nsissiness\nsissoo\nSissu\nsissy\nsissyish\nsissyism\nsist\nSistani\nsister\nsisterhood\nsisterin\nsistering\nsisterize\nsisterless\nsisterlike\nsisterliness\nsisterly\nsistern\nSistine\nsistle\nsistomensin\nsistrum\nSistrurus\nSisymbrium\nSisyphean\nSisyphian\nSisyphides\nSisyphism\nSisyphist\nSisyphus\nSisyrinchium\nsisyrinchium\nsit\nSita\nsitao\nsitar\nsitatunga\nsitch\nsite\nsitfast\nsith\nsithcund\nsithe\nsithement\nsithence\nsithens\nsitient\nsitio\nsitiology\nsitiomania\nsitiophobia\nSitka\nSitkan\nsitology\nsitomania\nSitophilus\nsitophobia\nsitophobic\nsitosterin\nsitosterol\nsitotoxism\nSitta\nsittee\nsitten\nsitter\nSittidae\nSittinae\nsittine\nsitting\nsittringy\nsitual\nsituate\nsituated\nsituation\nsituational\nsitula\nsitulae\nsitus\nSium\nSiusi\nSiuslaw\nSiva\nsiva\nSivaism\nSivaist\nSivaistic\nSivaite\nSivan\nSivapithecus\nsivathere\nSivatheriidae\nSivatheriinae\nsivatherioid\nSivatherium\nsiver\nsivvens\nSiwan\nSiwash\nsiwash\nsix\nsixain\nsixer\nsixfoil\nsixfold\nsixhaend\nsixhynde\nsixpence\nsixpenny\nsixpennyworth\nsixscore\nsixsome\nsixte\nsixteen\nsixteener\nsixteenfold\nsixteenmo\nsixteenth\nsixteenthly\nsixth\nsixthet\nsixthly\nsixtieth\nSixtowns\nSixtus\nsixty\nsixtyfold\nsixtypenny\nsizable\nsizableness\nsizably\nsizal\nsizar\nsizarship\nsize\nsizeable\nsizeableness\nsized\nsizeman\nsizer\nsizes\nsiziness\nsizing\nsizy\nsizygia\nsizygium\nsizz\nsizzard\nsizzing\nsizzle\nsizzling\nsizzlingly\nSjaak\nsjambok\nSjouke\nskaddle\nskaff\nskaffie\nskag\nskaillie\nskainsmate\nskair\nskaitbird\nskal\nskalawag\nskaldship\nskance\nSkanda\nskandhas\nskart\nskasely\nSkat\nskat\nskate\nskateable\nskater\nskatikas\nskatiku\nskating\nskatist\nskatole\nskatosine\nskatoxyl\nskaw\nskean\nskeanockle\nskedaddle\nskedaddler\nskedge\nskedgewith\nskedlock\nskee\nskeed\nskeeg\nskeel\nskeeling\nskeely\nskeen\nskeenyie\nskeer\nskeered\nskeery\nskeesicks\nskeet\nSkeeter\nskeeter\nskeezix\nSkef\nskeg\nskegger\nskeif\nskeigh\nskeily\nskein\nskeiner\nskeipp\nskel\nskelder\nskelderdrake\nskeldrake\nskeletal\nskeletin\nskeletogenous\nskeletogeny\nskeletomuscular\nskeleton\nskeletonian\nskeletonic\nskeletonization\nskeletonize\nskeletonizer\nskeletonless\nskeletonweed\nskeletony\nskelf\nskelgoose\nskelic\nskell\nskellat\nskeller\nskelloch\nskellum\nskelly\nskelp\nskelper\nskelpin\nskelping\nskelter\nSkeltonian\nSkeltonic\nSkeltonical\nSkeltonics\nskemmel\nskemp\nsken\nskene\nskeo\nskeough\nskep\nskepful\nskeppist\nskeppund\nskeptic\nskeptical\nskeptically\nskepticalness\nskepticism\nskepticize\nsker\nskere\nskerret\nskerrick\nskerry\nsketch\nsketchability\nsketchable\nsketchbook\nsketchee\nsketcher\nsketchily\nsketchiness\nsketching\nsketchingly\nsketchist\nsketchlike\nsketchy\nskete\nsketiotai\nskeuomorph\nskeuomorphic\nskevish\nskew\nskewback\nskewbacked\nskewbald\nskewed\nskewer\nskewerer\nskewerwood\nskewings\nskewl\nskewly\nskewness\nskewwhiff\nskewwise\nskewy\nskey\nskeyting\nski\nskiagram\nskiagraph\nskiagrapher\nskiagraphic\nskiagraphical\nskiagraphically\nskiagraphy\nskiameter\nskiametry\nskiapod\nskiapodous\nskiascope\nskiascopy\nskibby\nskibslast\nskice\nskid\nskidded\nskidder\nskidding\nskiddingly\nskiddoo\nskiddy\nSkidi\nskidpan\nskidproof\nskidway\nskied\nskieppe\nskiepper\nskier\nskies\nskiff\nskiffless\nskiffling\nskift\nskiing\nskijore\nskijorer\nskijoring\nskil\nskilder\nskildfel\nskilfish\nskill\nskillagalee\nskilled\nskillenton\nskillessness\nskillet\nskillful\nskillfully\nskillfulness\nskilligalee\nskilling\nskillion\nskilly\nskilpot\nskilts\nskim\nskimback\nskime\nskimmed\nskimmer\nskimmerton\nSkimmia\nskimming\nskimmingly\nskimmington\nskimmity\nskimp\nskimpily\nskimpiness\nskimpingly\nskimpy\nskin\nskinbound\nskinch\nskinflint\nskinflintily\nskinflintiness\nskinflinty\nskinful\nskink\nskinker\nskinking\nskinkle\nskinless\nskinlike\nskinned\nskinner\nskinnery\nskinniness\nskinning\nskinny\nskintight\nskinworm\nskiogram\nskiograph\nskiophyte\nSkip\nskip\nskipbrain\nSkipetar\nskipjack\nskipjackly\nskipkennel\nskipman\nskippable\nskippel\nskipper\nskippered\nskippership\nskippery\nskippet\nskipping\nskippingly\nskipple\nskippund\nskippy\nskiptail\nskirl\nskirlcock\nskirling\nskirmish\nskirmisher\nskirmishing\nskirmishingly\nskirp\nskirr\nskirreh\nskirret\nskirt\nskirtboard\nskirted\nskirter\nskirting\nskirtingly\nskirtless\nskirtlike\nskirty\nskirwhit\nskirwort\nskit\nskite\nskiter\nskither\nSkitswish\nSkittaget\nSkittagetan\nskitter\nskittish\nskittishly\nskittishness\nskittle\nskittled\nskittler\nskittles\nskitty\nskittyboot\nskiv\nskive\nskiver\nskiverwood\nskiving\nskivvies\nsklate\nsklater\nsklent\nskleropelite\nsklinter\nskoal\nSkodaic\nskogbolite\nSkoinolon\nskokiaan\nSkokomish\nskomerite\nskoo\nskookum\nSkopets\nskoptsy\nskout\nskraeling\nskraigh\nskrike\nskrimshander\nskrupul\nskua\nskulduggery\nskulk\nskulker\nskulking\nskulkingly\nskull\nskullbanker\nskullcap\nskulled\nskullery\nskullfish\nskullful\nskully\nskulp\nskun\nskunk\nskunkbill\nskunkbush\nskunkdom\nskunkery\nskunkhead\nskunkish\nskunklet\nskunktop\nskunkweed\nskunky\nSkupshtina\nskuse\nskutterudite\nsky\nskybal\nskycraft\nSkye\nskyey\nskyful\nskyish\nskylark\nskylarker\nskyless\nskylight\nskylike\nskylook\nskyman\nskyphoi\nskyphos\nskyplast\nskyre\nskyrgaliard\nskyrocket\nskyrockety\nskysail\nskyscape\nskyscraper\nskyscraping\nskyshine\nskyugle\nskyward\nskywards\nskyway\nskywrite\nskywriter\nskywriting\nsla\nslab\nslabbed\nslabber\nslabberer\nslabbery\nslabbiness\nslabbing\nslabby\nslabman\nslabness\nslabstone\nslack\nslackage\nslacked\nslacken\nslackener\nslacker\nslackerism\nslacking\nslackingly\nslackly\nslackness\nslad\nsladang\nslade\nslae\nslag\nslaggability\nslaggable\nslagger\nslagging\nslaggy\nslagless\nslaglessness\nslagman\nslain\nslainte\nslaister\nslaistery\nslait\nslake\nslakeable\nslakeless\nslaker\nslaking\nslaky\nslam\nslammakin\nslammerkin\nslammock\nslammocking\nslammocky\nslamp\nslampamp\nslampant\nslander\nslanderer\nslanderful\nslanderfully\nslandering\nslanderingly\nslanderous\nslanderously\nslanderousness\nslanderproof\nslane\nslang\nslangily\nslanginess\nslangish\nslangishly\nslangism\nslangkop\nslangous\nslangster\nslanguage\nslangular\nslangy\nslank\nslant\nslantindicular\nslantindicularly\nslanting\nslantingly\nslantingways\nslantly\nslantways\nslantwise\nslap\nslapdash\nslapdashery\nslape\nslaphappy\nslapjack\nslapper\nslapping\nslapstick\nslapsticky\nslare\nslart\nslarth\nSlartibartfast\nslash\nslashed\nslasher\nslashing\nslashingly\nslashy\nslat\nslatch\nslate\nslateful\nslatelike\nslatemaker\nslatemaking\nslater\nslateworks\nslateyard\nslath\nslather\nslatify\nslatiness\nslating\nslatish\nslatted\nslatter\nslattern\nslatternish\nslatternliness\nslatternly\nslatternness\nslattery\nslatting\nslaty\nslaughter\nslaughterer\nslaughterhouse\nslaughteringly\nslaughterman\nslaughterous\nslaughterously\nslaughteryard\nslaum\nSlav\nSlavdom\nSlave\nslave\nslaveborn\nslaved\nslaveholder\nslaveholding\nslaveland\nslaveless\nslavelet\nslavelike\nslaveling\nslavemonger\nslaveowner\nslaveownership\nslavepen\nslaver\nslaverer\nslavering\nslaveringly\nslavery\nSlavey\nslavey\nSlavi\nSlavian\nSlavic\nSlavicism\nSlavicize\nSlavification\nSlavify\nslavikite\nslaving\nSlavish\nslavish\nslavishly\nslavishness\nSlavism\nSlavist\nSlavistic\nSlavization\nSlavize\nslavocracy\nslavocrat\nslavocratic\nSlavonian\nSlavonianize\nSlavonic\nSlavonically\nSlavonicize\nSlavonish\nSlavonism\nSlavonization\nSlavonize\nSlavophile\nSlavophilism\nSlavophobe\nSlavophobist\nslaw\nslay\nslayable\nslayer\nslaying\nsleathy\nsleave\nsleaved\nsleaziness\nsleazy\nSleb\nsleck\nsled\nsledded\nsledder\nsledding\nsledful\nsledge\nsledgeless\nsledgemeter\nsledger\nsledging\nsledlike\nslee\nsleech\nsleechy\nsleek\nsleeken\nsleeker\nsleeking\nsleekit\nsleekly\nsleekness\nsleeky\nsleep\nsleeper\nsleepered\nsleepful\nsleepfulness\nsleepify\nsleepily\nsleepiness\nsleeping\nsleepingly\nsleepland\nsleepless\nsleeplessly\nsleeplessness\nsleeplike\nsleepmarken\nsleepproof\nsleepry\nsleepwaker\nsleepwaking\nsleepwalk\nsleepwalker\nsleepwalking\nsleepward\nsleepwort\nsleepy\nsleepyhead\nsleer\nsleet\nsleetiness\nsleeting\nsleetproof\nsleety\nsleeve\nsleeveband\nsleeveboard\nsleeved\nsleeveen\nsleevefish\nsleeveful\nsleeveless\nsleevelessness\nsleevelet\nsleevelike\nsleever\nsleigh\nsleigher\nsleighing\nsleight\nsleightful\nsleighty\nslendang\nslender\nslenderish\nslenderize\nslenderly\nslenderness\nslent\nslepez\nslept\nslete\nsleuth\nsleuthdog\nsleuthful\nsleuthhound\nsleuthlike\nslew\nslewed\nslewer\nslewing\nsley\nsleyer\nslice\nsliceable\nsliced\nslicer\nslich\nslicht\nslicing\nslicingly\nslick\nslicken\nslickens\nslickenside\nslicker\nslickered\nslickery\nslicking\nslickly\nslickness\nslid\nslidable\nslidableness\nslidably\nslidage\nslidden\nslidder\nsliddery\nslide\nslideable\nslideableness\nslideably\nslided\nslidehead\nslideman\nslideproof\nslider\nslideway\nsliding\nslidingly\nslidingness\nslidometer\nslifter\nslight\nslighted\nslighter\nslightily\nslightiness\nslighting\nslightingly\nslightish\nslightly\nslightness\nslighty\nslim\nslime\nslimeman\nslimer\nslimily\nsliminess\nslimish\nslimishness\nslimly\nslimmish\nslimness\nslimpsy\nslimsy\nslimy\nsline\nsling\nslingball\nslinge\nslinger\nslinging\nslingshot\nslingsman\nslingstone\nslink\nslinker\nslinkily\nslinkiness\nslinking\nslinkingly\nslinkskin\nslinkweed\nslinky\nslip\nslipback\nslipband\nslipboard\nslipbody\nslipcase\nslipcoach\nslipcoat\nslipe\nslipgibbet\nsliphorn\nsliphouse\nslipknot\nslipless\nslipman\nslipover\nslippage\nslipped\nslipper\nslippered\nslipperflower\nslipperily\nslipperiness\nslipperlike\nslipperweed\nslipperwort\nslippery\nslipperyback\nslipperyroot\nslippiness\nslipping\nslippingly\nslipproof\nslippy\nslipshod\nslipshoddiness\nslipshoddy\nslipshodness\nslipshoe\nslipslap\nslipslop\nslipsloppish\nslipsloppism\nslipsole\nslipstep\nslipstring\nsliptopped\nslipway\nslirt\nslish\nslit\nslitch\nslite\nslither\nslithering\nslitheroo\nslithers\nslithery\nslithy\nslitless\nslitlike\nslitshell\nslitted\nslitter\nslitting\nslitty\nslitwise\nslive\nsliver\nsliverer\nsliverlike\nsliverproof\nslivery\nsliving\nslivovitz\nsloan\nSloanea\nslob\nslobber\nslobberchops\nslobberer\nslobbers\nslobbery\nslobby\nslock\nslocken\nslod\nslodder\nslodge\nslodger\nsloe\nsloeberry\nsloebush\nsloetree\nslog\nslogan\nsloganeer\nsloganize\nslogger\nslogging\nslogwood\nsloka\nsloke\nslommock\nslon\nslone\nslonk\nsloo\nsloom\nsloomy\nsloop\nsloopman\nsloosh\nslop\nslopdash\nslope\nsloped\nslopely\nslopeness\nsloper\nslopeways\nslopewise\nsloping\nslopingly\nslopingness\nslopmaker\nslopmaking\nsloppage\nslopped\nsloppery\nsloppily\nsloppiness\nslopping\nsloppy\nslops\nslopseller\nslopselling\nslopshop\nslopstone\nslopwork\nslopworker\nslopy\nslorp\nslosh\nslosher\nsloshily\nsloshiness\nsloshy\nslot\nslote\nsloted\nsloth\nslothful\nslothfully\nslothfulness\nslothound\nslotted\nslotter\nslottery\nslotting\nslotwise\nslouch\nsloucher\nslouchily\nslouchiness\nslouching\nslouchingly\nslouchy\nslough\nsloughiness\nsloughy\nslour\nsloush\nSlovak\nSlovakian\nSlovakish\nsloven\nSlovene\nSlovenian\nSlovenish\nslovenlike\nslovenliness\nslovenly\nslovenwood\nSlovintzi\nslow\nslowbellied\nslowbelly\nslowdown\nslowgoing\nslowheaded\nslowhearted\nslowheartedness\nslowhound\nslowish\nslowly\nslowmouthed\nslowpoke\nslowrie\nslows\nslowworm\nsloyd\nslub\nslubber\nslubberdegullion\nslubberer\nslubbering\nslubberingly\nslubberly\nslubbery\nslubbing\nslubby\nslud\nsludder\nsluddery\nsludge\nsludged\nsludger\nsludgy\nslue\nsluer\nslug\nslugabed\nsluggard\nsluggarding\nsluggardize\nsluggardliness\nsluggardly\nsluggardness\nsluggardry\nslugged\nslugger\nslugging\nsluggingly\nsluggish\nsluggishly\nsluggishness\nsluggy\nsluglike\nslugwood\nsluice\nsluicelike\nsluicer\nsluiceway\nsluicing\nsluicy\nsluig\nsluit\nslum\nslumber\nslumberer\nslumberful\nslumbering\nslumberingly\nslumberland\nslumberless\nslumberous\nslumberously\nslumberousness\nslumberproof\nslumbersome\nslumbery\nslumbrous\nslumdom\nslumgullion\nslumgum\nslumland\nslummage\nslummer\nslumminess\nslumming\nslummock\nslummocky\nslummy\nslump\nslumpproof\nslumproof\nslumpwork\nslumpy\nslumward\nslumwise\nslung\nslungbody\nslunge\nslunk\nslunken\nslur\nslurbow\nslurp\nslurry\nslush\nslusher\nslushily\nslushiness\nslushy\nslut\nslutch\nslutchy\nsluther\nsluthood\nslutter\nsluttery\nsluttikin\nsluttish\nsluttishly\nsluttishness\nslutty\nsly\nslyboots\nslyish\nslyly\nslyness\nslype\nsma\nsmachrie\nsmack\nsmackee\nsmacker\nsmackful\nsmacking\nsmackingly\nsmacksman\nsmaik\nSmalcaldian\nSmalcaldic\nsmall\nsmallage\nsmallclothes\nsmallcoal\nsmallen\nsmaller\nsmallhearted\nsmallholder\nsmalling\nsmallish\nsmallmouth\nsmallmouthed\nsmallness\nsmallpox\nsmalls\nsmallsword\nsmalltime\nsmallware\nsmally\nsmalm\nsmalt\nsmalter\nsmaltine\nsmaltite\nsmalts\nsmaragd\nsmaragdine\nsmaragdite\nsmaragdus\nsmarm\nsmarmy\nsmart\nsmarten\nsmarting\nsmartingly\nsmartish\nsmartism\nsmartless\nsmartly\nsmartness\nsmartweed\nsmarty\nsmash\nsmashable\nsmashage\nsmashboard\nsmasher\nsmashery\nsmashing\nsmashingly\nsmashment\nsmashup\nsmatter\nsmatterer\nsmattering\nsmatteringly\nsmattery\nsmaze\nsmear\nsmearcase\nsmeared\nsmearer\nsmeariness\nsmearless\nsmeary\nsmectic\nsmectis\nsmectite\nSmectymnuan\nSmectymnuus\nsmeddum\nsmee\nsmeech\nsmeek\nsmeeky\nsmeer\nsmeeth\nsmegma\nsmell\nsmellable\nsmellage\nsmelled\nsmeller\nsmellful\nsmellfungi\nsmellfungus\nsmelliness\nsmelling\nsmellproof\nsmellsome\nsmelly\nsmelt\nsmelter\nsmelterman\nsmeltery\nsmeltman\nsmeth\nsmethe\nsmeuse\nsmew\nsmich\nsmicker\nsmicket\nsmiddie\nsmiddum\nsmidge\nsmidgen\nsmifligate\nsmifligation\nsmiggins\nSmilacaceae\nsmilacaceous\nSmilaceae\nsmilaceous\nsmilacin\nSmilacina\nSmilax\nsmilax\nsmile\nsmileable\nsmileage\nsmileful\nsmilefulness\nsmileless\nsmilelessly\nsmilelessness\nsmilemaker\nsmilemaking\nsmileproof\nsmiler\nsmilet\nsmiling\nsmilingly\nsmilingness\nSmilodon\nsmily\nSmintheus\nSminthian\nsminthurid\nSminthuridae\nSminthurus\nsmirch\nsmircher\nsmirchless\nsmirchy\nsmiris\nsmirk\nsmirker\nsmirking\nsmirkingly\nsmirkish\nsmirkle\nsmirkly\nsmirky\nsmirtle\nsmit\nsmitch\nsmite\nsmiter\nsmith\nsmitham\nsmithcraft\nsmither\nsmithereens\nsmithery\nSmithian\nSmithianism\nsmithing\nsmithite\nSmithsonian\nsmithsonite\nsmithwork\nsmithy\nsmithydander\nsmiting\nsmitten\nsmitting\nsmock\nsmocker\nsmockface\nsmocking\nsmockless\nsmocklike\nsmog\nsmokables\nsmoke\nsmokeable\nsmokebox\nsmokebush\nsmoked\nsmokefarthings\nsmokehouse\nsmokejack\nsmokeless\nsmokelessly\nsmokelessness\nsmokelike\nsmokeproof\nsmoker\nsmokery\nsmokestack\nsmokestone\nsmoketight\nsmokewood\nsmokily\nsmokiness\nsmoking\nsmokish\nsmoky\nsmokyseeming\nsmolder\nsmolderingness\nsmolt\nsmooch\nsmoochy\nsmoodge\nsmoodger\nsmook\nsmoorich\nSmoos\nsmoot\nsmooth\nsmoothable\nsmoothback\nsmoothbore\nsmoothbored\nsmoothcoat\nsmoothen\nsmoother\nsmoothification\nsmoothify\nsmoothing\nsmoothingly\nsmoothish\nsmoothly\nsmoothmouthed\nsmoothness\nsmoothpate\nsmopple\nsmore\nsmorgasbord\nsmote\nsmother\nsmotherable\nsmotheration\nsmothered\nsmotherer\nsmotheriness\nsmothering\nsmotheringly\nsmothery\nsmotter\nsmouch\nsmoucher\nsmous\nsmouse\nsmouser\nsmout\nsmriti\nsmudge\nsmudged\nsmudgedly\nsmudgeless\nsmudgeproof\nsmudger\nsmudgily\nsmudginess\nsmudgy\nsmug\nsmuggery\nsmuggish\nsmuggishly\nsmuggishness\nsmuggle\nsmuggleable\nsmuggler\nsmugglery\nsmuggling\nsmugism\nsmugly\nsmugness\nsmuisty\nsmur\nsmurr\nsmurry\nsmuse\nsmush\nsmut\nsmutch\nsmutchin\nsmutchless\nsmutchy\nsmutproof\nsmutted\nsmutter\nsmuttily\nsmuttiness\nsmutty\nSmyrna\nSmyrnaite\nSmyrnean\nSmyrniot\nSmyrniote\nsmyth\nsmytrie\nsnab\nsnabbie\nsnabble\nsnack\nsnackle\nsnackman\nsnaff\nsnaffle\nsnaffles\nsnafu\nsnag\nsnagbush\nsnagged\nsnagger\nsnaggled\nsnaggletooth\nsnaggy\nsnagrel\nsnail\nsnaileater\nsnailery\nsnailfish\nsnailflower\nsnailish\nsnailishly\nsnaillike\nsnails\nsnaily\nsnaith\nsnake\nsnakebark\nsnakeberry\nsnakebird\nsnakebite\nsnakefish\nsnakeflower\nsnakehead\nsnakeholing\nsnakeleaf\nsnakeless\nsnakelet\nsnakelike\nsnakeling\nsnakemouth\nsnakeneck\nsnakeology\nsnakephobia\nsnakepiece\nsnakepipe\nsnakeproof\nsnaker\nsnakeroot\nsnakery\nsnakeship\nsnakeskin\nsnakestone\nsnakeweed\nsnakewise\nsnakewood\nsnakeworm\nsnakewort\nsnakily\nsnakiness\nsnaking\nsnakish\nsnaky\nsnap\nsnapback\nsnapbag\nsnapberry\nsnapdragon\nsnape\nsnaper\nsnaphead\nsnapholder\nsnapjack\nsnapless\nsnappable\nsnapped\nsnapper\nsnappily\nsnappiness\nsnapping\nsnappingly\nsnappish\nsnappishly\nsnappishness\nsnapps\nsnappy\nsnaps\nsnapsack\nsnapshot\nsnapshotter\nsnapweed\nsnapwood\nsnapwort\nsnapy\nsnare\nsnareless\nsnarer\nsnaringly\nsnark\nsnarl\nsnarler\nsnarleyyow\nsnarlingly\nsnarlish\nsnarly\nsnary\nsnaste\nsnatch\nsnatchable\nsnatched\nsnatcher\nsnatchily\nsnatching\nsnatchingly\nsnatchproof\nsnatchy\nsnath\nsnathe\nsnavel\nsnavvle\nsnaw\nsnead\nsneak\nsneaker\nsneakiness\nsneaking\nsneakingly\nsneakingness\nsneakish\nsneakishly\nsneakishness\nsneaksby\nsneaksman\nsneaky\nsneap\nsneath\nsneathe\nsneb\nsneck\nsneckdraw\nsneckdrawing\nsneckdrawn\nsnecker\nsnecket\nsned\nsnee\nsneer\nsneerer\nsneerful\nsneerfulness\nsneering\nsneeringly\nsneerless\nsneery\nsneesh\nsneeshing\nsneest\nsneesty\nsneeze\nsneezeless\nsneezeproof\nsneezer\nsneezeweed\nsneezewood\nsneezewort\nsneezing\nsneezy\nsnell\nsnelly\nSnemovna\nsnerp\nsnew\nsnib\nsnibble\nsnibbled\nsnibbler\nsnibel\nsnicher\nsnick\nsnickdraw\nsnickdrawing\nsnicker\nsnickering\nsnickeringly\nsnickersnee\nsnicket\nsnickey\nsnickle\nsniddle\nsnide\nsnideness\nsniff\nsniffer\nsniffily\nsniffiness\nsniffing\nsniffingly\nsniffish\nsniffishness\nsniffle\nsniffler\nsniffly\nsniffy\nsnift\nsnifter\nsnifty\nsnig\nsnigger\nsniggerer\nsniggering\nsniggle\nsniggler\nsniggoringly\nsnip\nsnipe\nsnipebill\nsnipefish\nsnipelike\nsniper\nsniperscope\nsniping\nsnipish\nsnipjack\nsnipnose\nsnipocracy\nsnipper\nsnippersnapper\nsnipperty\nsnippet\nsnippetiness\nsnippety\nsnippiness\nsnipping\nsnippish\nsnippy\nsnipsnapsnorum\nsniptious\nsnipy\nsnirl\nsnirt\nsnirtle\nsnitch\nsnitcher\nsnite\nsnithe\nsnithy\nsnittle\nsnivel\nsniveled\nsniveler\nsniveling\nsnively\nsnivy\nsnob\nsnobber\nsnobbery\nsnobbess\nsnobbing\nsnobbish\nsnobbishly\nsnobbishness\nsnobbism\nsnobby\nsnobdom\nsnobling\nsnobocracy\nsnobocrat\nsnobographer\nsnobography\nsnobologist\nsnobonomer\nsnobscat\nsnocher\nsnock\nsnocker\nsnod\nsnodly\nsnoek\nsnoeking\nsnog\nsnoga\nSnohomish\nsnoke\nSnonowas\nsnood\nsnooded\nsnooding\nsnook\nsnooker\nsnookered\nsnoop\nsnooper\nsnooperscope\nsnoopy\nsnoose\nsnoot\nsnootily\nsnootiness\nsnooty\nsnoove\nsnooze\nsnoozer\nsnooziness\nsnoozle\nsnoozy\nsnop\nSnoqualmie\nSnoquamish\nsnore\nsnoreless\nsnorer\nsnoring\nsnoringly\nsnork\nsnorkel\nsnorker\nsnort\nsnorter\nsnorting\nsnortingly\nsnortle\nsnorty\nsnot\nsnotter\nsnottily\nsnottiness\nsnotty\nsnouch\nsnout\nsnouted\nsnouter\nsnoutish\nsnoutless\nsnoutlike\nsnouty\nSnow\nsnow\nSnowball\nsnowball\nsnowbank\nsnowbell\nsnowberg\nsnowberry\nsnowbird\nsnowblink\nsnowbound\nsnowbreak\nsnowbush\nsnowcap\nsnowcraft\nSnowdonian\nsnowdrift\nsnowdrop\nsnowfall\nsnowflake\nsnowflight\nsnowflower\nsnowfowl\nsnowhammer\nsnowhouse\nsnowie\nsnowily\nsnowiness\nsnowish\nsnowk\nsnowl\nsnowland\nsnowless\nsnowlike\nsnowmanship\nsnowmobile\nsnowplow\nsnowproof\nsnowscape\nsnowshade\nsnowshed\nsnowshine\nsnowshoe\nsnowshoed\nsnowshoeing\nsnowshoer\nsnowslide\nsnowslip\nsnowstorm\nsnowsuit\nsnowworm\nsnowy\nsnozzle\nsnub\nsnubbable\nsnubbed\nsnubbee\nsnubber\nsnubbiness\nsnubbing\nsnubbingly\nsnubbish\nsnubbishly\nsnubbishness\nsnubby\nsnubproof\nsnuck\nsnudge\nsnuff\nsnuffbox\nsnuffboxer\nsnuffcolored\nsnuffer\nsnuffers\nsnuffiness\nsnuffing\nsnuffingly\nsnuffish\nsnuffle\nsnuffler\nsnuffles\nsnuffless\nsnuffliness\nsnuffling\nsnufflingly\nsnuffly\nsnuffman\nsnuffy\nsnug\nsnugger\nsnuggery\nsnuggish\nsnuggle\nsnugify\nsnugly\nsnugness\nsnum\nsnup\nsnupper\nsnur\nsnurl\nsnurly\nsnurp\nsnurt\nsnuzzle\nsny\nsnying\nso\nsoak\nsoakage\nsoakaway\nsoaked\nsoaken\nsoaker\nsoaking\nsoakingly\nsoakman\nsoaky\nsoally\nsoam\nsoap\nsoapbark\nsoapberry\nsoapbox\nsoapboxer\nsoapbubbly\nsoapbush\nsoaper\nsoapery\nsoapfish\nsoapily\nsoapiness\nsoaplees\nsoapless\nsoaplike\nsoapmaker\nsoapmaking\nsoapmonger\nsoaprock\nsoaproot\nsoapstone\nsoapsud\nsoapsuddy\nsoapsuds\nsoapsudsy\nsoapweed\nsoapwood\nsoapwort\nsoapy\nsoar\nsoarability\nsoarable\nsoarer\nsoaring\nsoaringly\nsoary\nsob\nsobber\nsobbing\nsobbingly\nsobby\nsobeit\nsober\nsoberer\nsobering\nsoberingly\nsoberize\nsoberlike\nsoberly\nsoberness\nsobersault\nsobersided\nsobersides\nsoberwise\nsobful\nsoboles\nsoboliferous\nsobproof\nSobralia\nsobralite\nSobranje\nsobrevest\nsobriety\nsobriquet\nsobriquetical\nsoc\nsocage\nsocager\nsoccer\nsoccerist\nsoccerite\nsoce\nsocht\nsociability\nsociable\nsociableness\nsociably\nsocial\nSociales\nsocialism\nsocialist\nsocialistic\nsocialite\nsociality\nsocializable\nsocialization\nsocialize\nsocializer\nsocially\nsocialness\nsociation\nsociative\nsocietal\nsocietally\nsocietarian\nsocietarianism\nsocietary\nsocietified\nsocietism\nsocietist\nsocietologist\nsocietology\nsociety\nsocietyish\nsocietyless\nsocii\nSocinian\nSocinianism\nSocinianistic\nSocinianize\nsociobiological\nsociocentric\nsociocracy\nsociocrat\nsociocratic\nsociocultural\nsociodrama\nsociodramatic\nsocioeconomic\nsocioeducational\nsociogenesis\nsociogenetic\nsociogeny\nsociography\nsociolatry\nsociolegal\nsociologian\nsociologic\nsociological\nsociologically\nsociologism\nsociologist\nsociologistic\nsociologize\nsociologizer\nsociologizing\nsociology\nsociomedical\nsociometric\nsociometry\nsocionomic\nsocionomics\nsocionomy\nsociophagous\nsociopolitical\nsocioreligious\nsocioromantic\nsociostatic\nsociotechnical\nsocius\nsock\nsockdolager\nsocker\nsocket\nsocketful\nsocketless\nsockeye\nsockless\nsocklessness\nsockmaker\nsockmaking\nsocky\nsocle\nsocman\nsocmanry\nsoco\nSocorrito\nSocotran\nSocotri\nSocotrine\nSocratean\nSocratic\nSocratical\nSocratically\nSocraticism\nSocratism\nSocratist\nSocratize\nsod\nsoda\nsodaclase\nsodaic\nsodaless\nsodalist\nsodalite\nsodalithite\nsodality\nsodamide\nsodbuster\nsodded\nsodden\nsoddenly\nsoddenness\nsodding\nsoddite\nsoddy\nsodic\nsodio\nsodioaluminic\nsodioaurous\nsodiocitrate\nsodiohydric\nsodioplatinic\nsodiosalicylate\nsodiotartrate\nsodium\nsodless\nsodoku\nSodom\nsodomic\nSodomist\nSodomite\nsodomitess\nsodomitic\nsodomitical\nsodomitically\nSodomitish\nsodomy\nsodwork\nsody\nsoe\nsoekoe\nsoever\nsofa\nsofane\nsofar\nsoffit\nSofia\nSofoklis\nSofronia\nsoft\nsofta\nsoftball\nsoftbrained\nsoften\nsoftener\nsoftening\nsofthead\nsoftheaded\nsofthearted\nsoftheartedly\nsoftheartedness\nsofthorn\nsoftish\nsoftling\nsoftly\nsoftner\nsoftness\nsoftship\nsofttack\nsoftwood\nsofty\nsog\nSoga\nSogdian\nSogdianese\nSogdianian\nSogdoite\nsoger\nsoget\nsoggarth\nsoggendalite\nsoggily\nsogginess\nsogging\nsoggy\nsoh\nsoho\nSoiesette\nsoiesette\nsoil\nsoilage\nsoiled\nsoiling\nsoilless\nsoilproof\nsoilure\nsoily\nsoiree\nsoixantine\nSoja\nsoja\nsojourn\nsojourner\nsojourney\nsojournment\nsok\nsoka\nsoke\nsokeman\nsokemanemot\nsokemanry\nsoken\nSokoki\nSokotri\nSokulk\nSol\nsol\nsola\nsolace\nsolaceful\nsolacement\nsolaceproof\nsolacer\nsolacious\nsolaciously\nsolaciousness\nsolan\nSolanaceae\nsolanaceous\nsolanal\nSolanales\nsolander\nsolaneine\nsolaneous\nsolanidine\nsolanine\nSolanum\nsolanum\nsolar\nsolarism\nsolarist\nsolaristic\nsolaristically\nsolaristics\nSolarium\nsolarium\nsolarization\nsolarize\nsolarometer\nsolate\nsolatia\nsolation\nsolatium\nsolay\nsold\nsoldado\nSoldan\nsoldan\nsoldanel\nSoldanella\nsoldanelle\nsoldanrie\nsolder\nsolderer\nsoldering\nsolderless\nsoldi\nsoldier\nsoldierbird\nsoldierbush\nsoldierdom\nsoldieress\nsoldierfish\nsoldierhearted\nsoldierhood\nsoldiering\nsoldierize\nsoldierlike\nsoldierliness\nsoldierly\nsoldierproof\nsoldiership\nsoldierwise\nsoldierwood\nsoldiery\nsoldo\nsole\nSolea\nsolea\nsoleas\nsolecism\nsolecist\nsolecistic\nsolecistical\nsolecistically\nsolecize\nsolecizer\nSoleidae\nsoleiform\nsoleil\nsoleless\nsolely\nsolemn\nsolemncholy\nsolemnify\nsolemnitude\nsolemnity\nsolemnization\nsolemnize\nsolemnizer\nsolemnly\nsolemnness\nSolen\nsolen\nsolenacean\nsolenaceous\nsoleness\nsolenette\nsolenial\nSolenidae\nsolenite\nsolenitis\nsolenium\nsolenoconch\nSolenoconcha\nsolenocyte\nSolenodon\nsolenodont\nSolenodontidae\nsolenogaster\nSolenogastres\nsolenoglyph\nSolenoglypha\nsolenoglyphic\nsolenoid\nsolenoidal\nsolenoidally\nSolenopsis\nsolenostele\nsolenostelic\nsolenostomid\nSolenostomidae\nsolenostomoid\nsolenostomous\nSolenostomus\nsolent\nsolentine\nsolepiece\nsoleplate\nsoleprint\nsoler\nSolera\nsoles\nsoleus\nsoleyn\nsolfataric\nsolfeggio\nsolferino\nsoli\nsoliative\nsolicit\nsolicitant\nsolicitation\nsolicitationism\nsolicited\nsolicitee\nsoliciter\nsoliciting\nsolicitor\nsolicitorship\nsolicitous\nsolicitously\nsolicitousness\nsolicitress\nsolicitrix\nsolicitude\nsolicitudinous\nsolid\nSolidago\nsolidago\nsolidaric\nsolidarily\nsolidarism\nsolidarist\nsolidaristic\nsolidarity\nsolidarize\nsolidary\nsolidate\nsolidi\nsolidifiability\nsolidifiable\nsolidifiableness\nsolidification\nsolidifier\nsolidiform\nsolidify\nsolidish\nsolidism\nsolidist\nsolidistic\nsolidity\nsolidly\nsolidness\nsolidum\nSolidungula\nsolidungular\nsolidungulate\nsolidus\nsolifidian\nsolifidianism\nsolifluction\nsolifluctional\nsoliform\nSolifugae\nsolifuge\nsolifugean\nsolifugid\nsolifugous\nsoliloquacious\nsoliloquist\nsoliloquium\nsoliloquize\nsoliloquizer\nsoliloquizing\nsoliloquizingly\nsoliloquy\nsolilunar\nSolio\nsolio\nsoliped\nsolipedal\nsolipedous\nsolipsism\nsolipsismal\nsolipsist\nsolipsistic\nsolist\nsolitaire\nsolitarian\nsolitarily\nsolitariness\nsolitary\nsoliterraneous\nsolitidal\nsolitude\nsolitudinarian\nsolitudinize\nsolitudinous\nsolivagant\nsolivagous\nsollar\nsolleret\nSollya\nsolmizate\nsolmization\nsolo\nsolod\nsolodi\nsolodization\nsolodize\nsoloecophanes\nsoloist\nSolomon\nSolomonian\nSolomonic\nSolomonical\nSolomonitic\nSolon\nsolon\nsolonchak\nsolonetz\nsolonetzic\nsolonetzicity\nSolonian\nSolonic\nsolonist\nsoloth\nsolotink\nsolotnik\nsolpugid\nSolpugida\nSolpugidea\nSolpugides\nsolstice\nsolsticion\nsolstitia\nsolstitial\nsolstitially\nsolstitium\nsolubility\nsolubilization\nsolubilize\nsoluble\nsolubleness\nsolubly\nsolum\nsolute\nsolution\nsolutional\nsolutioner\nsolutionist\nsolutize\nsolutizer\nSolutrean\nsolvability\nsolvable\nsolvableness\nsolvate\nsolvation\nsolve\nsolvement\nsolvency\nsolvend\nsolvent\nsolvently\nsolventproof\nsolver\nsolvolysis\nsolvolytic\nsolvolyze\nsolvsbergite\nSolyma\nSolymaean\nsoma\nsomacule\nSomal\nsomal\nSomali\nsomaplasm\nSomaschian\nsomasthenia\nsomata\nsomatasthenia\nSomateria\nsomatic\nsomatical\nsomatically\nsomaticosplanchnic\nsomaticovisceral\nsomatics\nsomatism\nsomatist\nsomatization\nsomatochrome\nsomatocyst\nsomatocystic\nsomatoderm\nsomatogenetic\nsomatogenic\nsomatognosis\nsomatognostic\nsomatologic\nsomatological\nsomatologically\nsomatologist\nsomatology\nsomatome\nsomatomic\nsomatophyte\nsomatophytic\nsomatoplasm\nsomatopleural\nsomatopleure\nsomatopleuric\nsomatopsychic\nsomatosplanchnic\nsomatotonia\nsomatotonic\nsomatotropic\nsomatotropically\nsomatotropism\nsomatotype\nsomatotyper\nsomatotypy\nsomatous\nsomber\nsomberish\nsomberly\nsomberness\nsombre\nsombrerite\nsombrero\nsombreroed\nsombrous\nsombrously\nsombrousness\nsome\nsomebody\nsomeday\nsomedeal\nsomegate\nsomehow\nsomeone\nsomepart\nsomeplace\nsomers\nsomersault\nsomerset\nSomersetian\nsomervillite\nsomesthesia\nsomesthesis\nsomesthetic\nsomething\nsomethingness\nsometime\nsometimes\nsomeway\nsomeways\nsomewhat\nsomewhatly\nsomewhatness\nsomewhen\nsomewhence\nsomewhere\nsomewheres\nsomewhile\nsomewhiles\nsomewhither\nsomewhy\nsomewise\nsomital\nsomite\nsomitic\nsomma\nsommaite\nsommelier\nsomnambulance\nsomnambulancy\nsomnambulant\nsomnambular\nsomnambulary\nsomnambulate\nsomnambulation\nsomnambulator\nsomnambule\nsomnambulency\nsomnambulic\nsomnambulically\nsomnambulism\nsomnambulist\nsomnambulistic\nsomnambulize\nsomnambulous\nsomnial\nsomniative\nsomnifacient\nsomniferous\nsomniferously\nsomnific\nsomnifuge\nsomnify\nsomniloquacious\nsomniloquence\nsomniloquent\nsomniloquism\nsomniloquist\nsomniloquize\nsomniloquous\nsomniloquy\nSomniosus\nsomnipathist\nsomnipathy\nsomnivolency\nsomnivolent\nsomnolence\nsomnolency\nsomnolent\nsomnolently\nsomnolescence\nsomnolescent\nsomnolism\nsomnolize\nsomnopathy\nsomnorific\nsomnus\nsompay\nsompne\nsompner\nSon\nson\nsonable\nsonance\nsonancy\nsonant\nsonantal\nsonantic\nsonantina\nsonantized\nsonar\nsonata\nsonatina\nsonation\nSonchus\nsond\nsondation\nsondeli\nSonderbund\nsonderclass\nSondergotter\nSondylomorum\nsoneri\nsong\nsongbird\nsongbook\nsongcraft\nsongfest\nsongful\nsongfully\nsongfulness\nSonghai\nSongish\nsongish\nsongland\nsongle\nsongless\nsonglessly\nsonglessness\nsonglet\nsonglike\nsongman\nSongo\nSongoi\nsongster\nsongstress\nsongworthy\nsongwright\nsongy\nsonhood\nsonic\nsoniferous\nsonification\nsoniou\nSonja\nsonk\nsonless\nsonlike\nsonlikeness\nsonly\nSonneratia\nSonneratiaceae\nsonneratiaceous\nsonnet\nsonnetary\nsonneteer\nsonneteeress\nsonnetic\nsonneting\nsonnetish\nsonnetist\nsonnetize\nsonnetlike\nsonnetwise\nsonnikins\nSonny\nsonny\nsonobuoy\nsonometer\nSonoran\nsonorant\nsonorescence\nsonorescent\nsonoric\nsonoriferous\nsonoriferously\nsonorific\nsonority\nsonorophone\nsonorosity\nsonorous\nsonorously\nsonorousness\nSonrai\nsons\nsonship\nsonsy\nsontag\nsoodle\nsoodly\nSoohong\nsook\nSooke\nsooky\nsool\nsooloos\nsoon\nsooner\nsoonish\nsoonly\nSoorah\nsoorawn\nsoord\nsoorkee\nSoot\nsoot\nsooter\nsooterkin\nsooth\nsoothe\nsoother\nsootherer\nsoothful\nsoothing\nsoothingly\nsoothingness\nsoothless\nsoothsay\nsoothsayer\nsoothsayership\nsoothsaying\nsootily\nsootiness\nsootless\nsootlike\nsootproof\nsooty\nsootylike\nsop\nsope\nsoph\nSopheric\nSopherim\nSophia\nsophia\nSophian\nsophic\nsophical\nsophically\nsophiologic\nsophiology\nsophism\nSophist\nsophister\nsophistic\nsophistical\nsophistically\nsophisticalness\nsophisticant\nsophisticate\nsophisticated\nsophistication\nsophisticative\nsophisticator\nsophisticism\nSophistress\nsophistress\nsophistry\nSophoclean\nsophomore\nsophomoric\nsophomorical\nsophomorically\nSophora\nsophoria\nSophronia\nsophronize\nSophy\nsophy\nsopite\nsopition\nsopor\nsoporiferous\nsoporiferously\nsoporiferousness\nsoporific\nsoporifical\nsoporifically\nsoporose\nsopper\nsoppiness\nsopping\nsoppy\nsoprani\nsopranino\nsopranist\nsoprano\nsora\nSorabian\nsorage\nsoral\nSorb\nsorb\nSorbaria\nsorbate\nsorbefacient\nsorbent\nSorbian\nsorbic\nsorbile\nsorbin\nsorbinose\nSorbish\nsorbite\nsorbitic\nsorbitize\nsorbitol\nSorbonic\nSorbonical\nSorbonist\nSorbonne\nsorbose\nsorboside\nSorbus\nsorbus\nsorcer\nsorcerer\nsorceress\nsorcering\nsorcerous\nsorcerously\nsorcery\nsorchin\nsorda\nSordaria\nSordariaceae\nsordawalite\nsordellina\nSordello\nsordes\nsordid\nsordidity\nsordidly\nsordidness\nsordine\nsordino\nsordor\nsore\nsoredia\nsoredial\nsorediate\nsorediferous\nsorediform\nsoredioid\nsoredium\nsoree\nsorefalcon\nsorefoot\nsorehawk\nsorehead\nsoreheaded\nsoreheadedly\nsoreheadedness\nsorehearted\nsorehon\nsorely\nsorema\nsoreness\nSorex\nsorgho\nSorghum\nsorghum\nsorgo\nsori\nsoricid\nSoricidae\nsoricident\nSoricinae\nsoricine\nsoricoid\nSoricoidea\nsoriferous\nsorite\nsorites\nsoritical\nsorn\nsornare\nsornari\nsorner\nsorning\nsoroban\nSoroptimist\nsororal\nsororate\nsororial\nsororially\nsororicidal\nsororicide\nsorority\nsororize\nsorose\nsorosis\nsorosphere\nSorosporella\nSorosporium\nsorption\nsorra\nSorrel\nsorrel\nsorrento\nsorrily\nsorriness\nsorroa\nsorrow\nsorrower\nsorrowful\nsorrowfully\nsorrowfulness\nsorrowing\nsorrowingly\nsorrowless\nsorrowproof\nsorrowy\nsorry\nsorryhearted\nsorryish\nsort\nsortable\nsortably\nsortal\nsortation\nsorted\nsorter\nsortie\nsortilege\nsortileger\nsortilegic\nsortilegious\nsortilegus\nsortilegy\nsortiment\nsortition\nsortly\nsorty\nsorus\nsorva\nsory\nsosh\nsoshed\nSosia\nsoso\nsosoish\nSospita\nsoss\nsossle\nsostenuto\nsot\nSotadean\nSotadic\nSoter\nSoteres\nsoterial\nsoteriologic\nsoteriological\nsoteriology\nSothiac\nSothiacal\nSothic\nSothis\nSotho\nsotie\nSotik\nsotnia\nsotnik\nsotol\nsots\nsottage\nsotted\nsotter\nsottish\nsottishly\nsottishness\nsou\nsouari\nsoubise\nsoubrette\nsoubrettish\nsoucar\nsouchet\nSouchong\nsouchong\nsouchy\nsoud\nsoudagur\nsouffle\nsouffleed\nsough\nsougher\nsoughing\nsought\nSouhegan\nsoul\nsoulack\nsoulcake\nsouled\nSouletin\nsoulful\nsoulfully\nsoulfulness\nsoulical\nsoulish\nsoulless\nsoullessly\nsoullessness\nsoullike\nSoulmass\nsoulsaving\nsoulward\nsouly\nsoum\nsoumansite\nsoumarque\nsound\nsoundable\nsoundage\nsoundboard\nsounder\nsoundful\nsoundheaded\nsoundheadedness\nsoundhearted\nsoundheartednes\nsounding\nsoundingly\nsoundingness\nsoundless\nsoundlessly\nsoundlessness\nsoundly\nsoundness\nsoundproof\nsoundproofing\nsoup\nsoupbone\nsoupcon\nsouper\nsouple\nsoupless\nsouplike\nsoupspoon\nsoupy\nsour\nsourbelly\nsourberry\nsourbread\nsourbush\nsourcake\nsource\nsourceful\nsourcefulness\nsourceless\nsourcrout\nsourdeline\nsourdine\nsoured\nsouredness\nsouren\nsourer\nsourhearted\nsouring\nsourish\nsourishly\nsourishness\nsourjack\nsourling\nsourly\nsourness\nsourock\nsoursop\nsourtop\nsourweed\nsourwood\nsoury\nsousaphone\nsousaphonist\nsouse\nsouser\nsouslik\nsoutane\nsouter\nsouterrain\nSouth\nsouth\nsouthard\nsouthbound\nSouthcottian\nSouthdown\nsoutheast\nsoutheaster\nsoutheasterly\nsoutheastern\nsoutheasternmost\nsoutheastward\nsoutheastwardly\nsoutheastwards\nsouther\nsoutherland\nsoutherliness\nsoutherly\nsouthermost\nsouthern\nSoutherner\nsoutherner\nsouthernism\nsouthernize\nsouthernliness\nsouthernly\nsouthernmost\nsouthernness\nsouthernwood\nsouthing\nsouthland\nsouthlander\nsouthmost\nsouthness\nsouthpaw\nSouthron\nsouthron\nSouthronie\nSouthumbrian\nsouthward\nsouthwardly\nsouthwards\nsouthwest\nsouthwester\nsouthwesterly\nsouthwestern\nSouthwesterner\nsouthwesternmost\nsouthwestward\nsouthwestwardly\nsouvenir\nsouverain\nsouwester\nsov\nsovereign\nsovereigness\nsovereignly\nsovereignness\nsovereignship\nsovereignty\nsoviet\nsovietdom\nsovietic\nsovietism\nsovietist\nsovietization\nsovietize\nsovite\nsovkhose\nsovkhoz\nsovran\nsovranty\nsow\nsowable\nsowan\nsowans\nsowar\nsowarry\nsowback\nsowbacked\nsowbane\nsowbelly\nsowbread\nsowdones\nsowel\nsowens\nsower\nsowfoot\nsowing\nsowins\nsowl\nsowle\nsowlike\nsowlth\nsown\nsowse\nsowt\nsowte\nSoxhlet\nsoy\nsoya\nsoybean\nSoyot\nsozin\nsozolic\nsozzle\nsozzly\nspa\nSpace\nspace\nspaceband\nspaced\nspaceful\nspaceless\nspacer\nspacesaving\nspaceship\nspaciness\nspacing\nspaciosity\nspaciotemporal\nspacious\nspaciously\nspaciousness\nspack\nspacy\nspad\nspade\nspadebone\nspaded\nspadefish\nspadefoot\nspadeful\nspadelike\nspademan\nspader\nspadesman\nspadewise\nspadework\nspadger\nspadiceous\nspadices\nspadicifloral\nspadiciflorous\nspadiciform\nspadicose\nspadilla\nspadille\nspading\nspadix\nspadone\nspadonic\nspadonism\nspadrone\nspadroon\nspae\nspaebook\nspaecraft\nspaedom\nspaeman\nspaer\nspaewife\nspaewoman\nspaework\nspaewright\nspaghetti\nSpagnuoli\nspagyric\nspagyrical\nspagyrically\nspagyrist\nspahi\nspaid\nspaik\nspairge\nspak\nSpalacidae\nspalacine\nSpalax\nspald\nspalder\nspalding\nspale\nspall\nspallation\nspaller\nspalling\nspalpeen\nspalt\nspan\nspancel\nspandle\nspandrel\nspandy\nspane\nspanemia\nspanemy\nspang\nspanghew\nspangle\nspangled\nspangler\nspanglet\nspangly\nspangolite\nSpaniard\nSpaniardization\nSpaniardize\nSpaniardo\nspaniel\nspaniellike\nspanielship\nspaning\nSpaniol\nSpaniolate\nSpanioli\nSpaniolize\nspanipelagic\nSpanish\nSpanishize\nSpanishly\nspank\nspanker\nspankily\nspanking\nspankingly\nspanky\nspanless\nspann\nspannel\nspanner\nspannerman\nspanopnoea\nspanpiece\nspantoon\nspanule\nspanworm\nSpar\nspar\nsparable\nsparada\nsparadrap\nsparagrass\nsparagus\nSparassis\nsparassodont\nSparassodonta\nSparaxis\nsparaxis\nsparch\nspare\nspareable\nspareless\nsparely\nspareness\nsparer\nsparerib\nsparesome\nSparganiaceae\nSparganium\nsparganium\nsparganosis\nsparganum\nsparge\nsparger\nspargosis\nsparhawk\nsparid\nSparidae\nsparing\nsparingly\nsparingness\nspark\nsparkback\nsparked\nsparker\nsparkiness\nsparking\nsparkish\nsparkishly\nsparkishness\nsparkle\nsparkleberry\nsparkler\nsparkless\nsparklessly\nsparklet\nsparklike\nsparkliness\nsparkling\nsparklingly\nsparklingness\nsparkly\nsparkproof\nsparks\nsparky\nsparlike\nsparling\nsparm\nSparmannia\nSparnacian\nsparoid\nsparpiece\nsparred\nsparrer\nsparring\nsparringly\nsparrow\nsparrowbill\nsparrowcide\nsparrowdom\nsparrowgrass\nsparrowish\nsparrowless\nsparrowlike\nsparrowtail\nsparrowtongue\nsparrowwort\nsparrowy\nsparry\nsparse\nsparsedly\nsparsely\nsparsile\nsparsioplast\nsparsity\nspart\nSpartacan\nSpartacide\nSpartacism\nSpartacist\nspartacist\nSpartan\nSpartanhood\nSpartanic\nSpartanically\nSpartanism\nSpartanize\nSpartanlike\nSpartanly\nsparteine\nsparterie\nsparth\nSpartiate\nSpartina\nSpartium\nspartle\nSparus\nsparver\nspary\nspasm\nspasmatic\nspasmatical\nspasmatomancy\nspasmed\nspasmic\nspasmodic\nspasmodical\nspasmodically\nspasmodicalness\nspasmodism\nspasmodist\nspasmolytic\nspasmophilia\nspasmophilic\nspasmotin\nspasmotoxin\nspasmous\nSpass\nspastic\nspastically\nspasticity\nspat\nspatalamancy\nSpatangida\nSpatangina\nspatangoid\nSpatangoida\nSpatangoidea\nspatangoidean\nSpatangus\nspatchcock\nspate\nspatha\nspathaceous\nspathal\nspathe\nspathed\nspatheful\nspathic\nSpathiflorae\nspathilae\nspathilla\nspathose\nspathous\nspathulate\nSpathyema\nspatial\nspatiality\nspatialization\nspatialize\nspatially\nspatiate\nspatiation\nspatilomancy\nspatiotemporal\nspatling\nspatted\nspatter\nspatterdashed\nspatterdasher\nspatterdock\nspattering\nspatteringly\nspatterproof\nspatterwork\nspatting\nspattle\nspattlehoe\nSpatula\nspatula\nspatulamancy\nspatular\nspatulate\nspatulation\nspatule\nspatuliform\nspatulose\nspave\nspaver\nspavie\nspavied\nspaviet\nspavin\nspavindy\nspavined\nspawn\nspawneater\nspawner\nspawning\nspawny\nspay\nspayad\nspayard\nspaying\nspeak\nspeakable\nspeakableness\nspeakably\nspeaker\nspeakeress\nspeakership\nspeakhouse\nspeakies\nspeaking\nspeakingly\nspeakingness\nspeakless\nspeaklessly\nspeal\nspealbone\nspean\nspear\nspearcast\nspearer\nspearfish\nspearflower\nspearhead\nspearing\nspearman\nspearmanship\nspearmint\nspearproof\nspearsman\nspearwood\nspearwort\nspeary\nspec\nspecchie\nspece\nspecial\nspecialism\nspecialist\nspecialistic\nspeciality\nspecialization\nspecialize\nspecialized\nspecializer\nspecially\nspecialness\nspecialty\nspeciation\nspecie\nspecies\nspeciestaler\nspecifiable\nspecific\nspecifical\nspecificality\nspecifically\nspecificalness\nspecificate\nspecification\nspecificative\nspecificatively\nspecificity\nspecificize\nspecificly\nspecificness\nspecifier\nspecifist\nspecify\nspecillum\nspecimen\nspecimenize\nspeciology\nspeciosity\nspecious\nspeciously\nspeciousness\nspeck\nspecked\nspeckedness\nspeckfall\nspeckiness\nspecking\nspeckle\nspecklebelly\nspecklebreast\nspeckled\nspeckledbill\nspeckledness\nspeckless\nspecklessly\nspecklessness\nspeckling\nspeckly\nspeckproof\nspecks\nspecksioneer\nspecky\nspecs\nspectacle\nspectacled\nspectacleless\nspectaclelike\nspectaclemaker\nspectaclemaking\nspectacles\nspectacular\nspectacularism\nspectacularity\nspectacularly\nspectator\nspectatordom\nspectatorial\nspectatorship\nspectatory\nspectatress\nspectatrix\nspecter\nspectered\nspecterlike\nspectra\nspectral\nspectralism\nspectrality\nspectrally\nspectralness\nspectrobolograph\nspectrobolographic\nspectrobolometer\nspectrobolometric\nspectrochemical\nspectrochemistry\nspectrocolorimetry\nspectrocomparator\nspectroelectric\nspectrogram\nspectrograph\nspectrographic\nspectrographically\nspectrography\nspectroheliogram\nspectroheliograph\nspectroheliographic\nspectrohelioscope\nspectrological\nspectrologically\nspectrology\nspectrometer\nspectrometric\nspectrometry\nspectromicroscope\nspectromicroscopical\nspectrophobia\nspectrophone\nspectrophonic\nspectrophotoelectric\nspectrophotograph\nspectrophotography\nspectrophotometer\nspectrophotometric\nspectrophotometry\nspectropolarimeter\nspectropolariscope\nspectropyrheliometer\nspectropyrometer\nspectroradiometer\nspectroradiometric\nspectroradiometry\nspectroscope\nspectroscopic\nspectroscopically\nspectroscopist\nspectroscopy\nspectrotelescope\nspectrous\nspectrum\nspectry\nspecula\nspecular\nSpecularia\nspecularly\nspeculate\nspeculation\nspeculatist\nspeculative\nspeculatively\nspeculativeness\nspeculativism\nspeculator\nspeculatory\nspeculatrices\nspeculatrix\nspeculist\nspeculum\nspecus\nsped\nspeech\nspeechcraft\nspeecher\nspeechful\nspeechfulness\nspeechification\nspeechifier\nspeechify\nspeeching\nspeechless\nspeechlessly\nspeechlessness\nspeechlore\nspeechmaker\nspeechmaking\nspeechment\nspeed\nspeedaway\nspeedboat\nspeedboating\nspeedboatman\nspeeder\nspeedful\nspeedfully\nspeedfulness\nspeedily\nspeediness\nspeeding\nspeedingly\nspeedless\nspeedometer\nspeedster\nspeedway\nspeedwell\nspeedy\nspeel\nspeelken\nspeelless\nspeen\nspeer\nspeering\nspeerity\nspeiskobalt\nspeiss\nspekboom\nspelaean\nspelder\nspelding\nspeldring\nspeleological\nspeleologist\nspeleology\nspelk\nspell\nspellable\nspellbind\nspellbinder\nspellbinding\nspellbound\nspellcraft\nspelldown\nspeller\nspellful\nspelling\nspellingdown\nspellingly\nspellmonger\nspellproof\nspellword\nspellwork\nspelt\nspelter\nspelterman\nspeltoid\nspeltz\nspeluncar\nspeluncean\nspelunk\nspelunker\nspence\nSpencean\nSpencer\nspencer\nSpencerian\nSpencerianism\nSpencerism\nspencerite\nspend\nspendable\nspender\nspendful\nspendible\nspending\nspendless\nspendthrift\nspendthrifty\nSpenerism\nspense\nSpenserian\nspent\nspeos\nSpeotyto\nsperable\nSperanza\nsperate\nSpergula\nSpergularia\nsperity\nsperket\nsperling\nsperm\nsperma\nspermaceti\nspermacetilike\nspermaduct\nspermalist\nSpermaphyta\nspermaphyte\nspermaphytic\nspermarium\nspermary\nspermashion\nspermatangium\nspermatheca\nspermathecal\nspermatic\nspermatically\nspermatid\nspermatiferous\nspermatin\nspermatiogenous\nspermation\nspermatiophore\nspermatism\nspermatist\nspermatitis\nspermatium\nspermatize\nspermatoblast\nspermatoblastic\nspermatocele\nspermatocyst\nspermatocystic\nspermatocystitis\nspermatocytal\nspermatocyte\nspermatogemma\nspermatogenesis\nspermatogenetic\nspermatogenic\nspermatogenous\nspermatogeny\nspermatogonial\nspermatogonium\nspermatoid\nspermatolysis\nspermatolytic\nspermatophoral\nspermatophore\nspermatophorous\nSpermatophyta\nspermatophyte\nspermatophytic\nspermatoplasm\nspermatoplasmic\nspermatoplast\nspermatorrhea\nspermatospore\nspermatotheca\nspermatova\nspermatovum\nspermatoxin\nspermatozoa\nspermatozoal\nspermatozoan\nspermatozoic\nspermatozoid\nspermatozoon\nspermaturia\nspermic\nspermidine\nspermiducal\nspermiduct\nspermigerous\nspermine\nspermiogenesis\nspermism\nspermist\nspermoblast\nspermoblastic\nspermocarp\nspermocenter\nspermoderm\nspermoduct\nspermogenesis\nspermogenous\nspermogone\nspermogoniferous\nspermogonium\nspermogonous\nspermologer\nspermological\nspermologist\nspermology\nspermolysis\nspermolytic\nspermophile\nspermophiline\nSpermophilus\nspermophore\nspermophorium\nSpermophyta\nspermophyte\nspermophytic\nspermosphere\nspermotheca\nspermotoxin\nspermous\nspermoviduct\nspermy\nsperonara\nsperonaro\nsperone\nsperrylite\nspessartite\nspet\nspetch\nspetrophoby\nspeuchan\nspew\nspewer\nspewiness\nspewing\nspewy\nspex\nsphacel\nSphacelaria\nSphacelariaceae\nsphacelariaceous\nSphacelariales\nsphacelate\nsphacelated\nsphacelation\nsphacelia\nsphacelial\nsphacelism\nsphaceloderma\nSphaceloma\nsphacelotoxin\nsphacelous\nsphacelus\nSphaeralcea\nsphaeraphides\nSphaerella\nsphaerenchyma\nSphaeriaceae\nsphaeriaceous\nSphaeriales\nsphaeridia\nsphaeridial\nsphaeridium\nSphaeriidae\nSphaerioidaceae\nsphaeristerium\nsphaerite\nSphaerium\nsphaeroblast\nSphaerobolaceae\nSphaerobolus\nSphaerocarpaceae\nSphaerocarpales\nSphaerocarpus\nsphaerocobaltite\nSphaerococcaceae\nsphaerococcaceous\nSphaerococcus\nsphaerolite\nsphaerolitic\nSphaeroma\nSphaeromidae\nSphaerophoraceae\nSphaerophorus\nSphaeropsidaceae\nSphaeropsidales\nSphaeropsis\nsphaerosiderite\nsphaerosome\nsphaerospore\nSphaerostilbe\nSphaerotheca\nSphaerotilus\nsphagion\nSphagnaceae\nsphagnaceous\nSphagnales\nsphagnicolous\nsphagnologist\nsphagnology\nsphagnous\nSphagnum\nsphagnum\nSphakiot\nsphalerite\nSphargis\nsphecid\nSphecidae\nSphecina\nSphecoidea\nspheges\nsphegid\nSphegidae\nSphegoidea\nsphendone\nsphene\nsphenethmoid\nsphenethmoidal\nsphenic\nsphenion\nSphenisci\nSpheniscidae\nSphenisciformes\nspheniscine\nspheniscomorph\nSpheniscomorphae\nspheniscomorphic\nSpheniscus\nsphenobasilar\nsphenobasilic\nsphenocephalia\nsphenocephalic\nsphenocephalous\nsphenocephaly\nSphenodon\nsphenodon\nsphenodont\nSphenodontia\nSphenodontidae\nsphenoethmoid\nsphenoethmoidal\nsphenofrontal\nsphenogram\nsphenographic\nsphenographist\nsphenography\nsphenoid\nsphenoidal\nsphenoiditis\nsphenolith\nsphenomalar\nsphenomandibular\nsphenomaxillary\nsphenopalatine\nsphenoparietal\nsphenopetrosal\nSphenophorus\nSphenophyllaceae\nsphenophyllaceous\nSphenophyllales\nSphenophyllum\nSphenopteris\nsphenosquamosal\nsphenotemporal\nsphenotic\nsphenotribe\nsphenotripsy\nsphenoturbinal\nsphenovomerine\nsphenozygomatic\nspherable\nspheral\nspherality\nspheraster\nspheration\nsphere\nsphereless\nspheric\nspherical\nsphericality\nspherically\nsphericalness\nsphericist\nsphericity\nsphericle\nsphericocylindrical\nsphericotetrahedral\nsphericotriangular\nspherics\nspheriform\nspherify\nspheroconic\nspherocrystal\nspherograph\nspheroidal\nspheroidally\nspheroidic\nspheroidical\nspheroidically\nspheroidicity\nspheroidism\nspheroidity\nspheroidize\nspheromere\nspherometer\nspheroquartic\nspherula\nspherular\nspherulate\nspherule\nspherulite\nspherulitic\nspherulitize\nsphery\nspheterize\nSphex\nsphexide\nsphincter\nsphincteral\nsphincteralgia\nsphincterate\nsphincterectomy\nsphincterial\nsphincteric\nsphincterismus\nsphincteroscope\nsphincteroscopy\nsphincterotomy\nsphindid\nSphindidae\nSphindus\nsphingal\nsphinges\nsphingid\nSphingidae\nsphingiform\nsphingine\nsphingoid\nsphingometer\nsphingomyelin\nsphingosine\nSphingurinae\nSphingurus\nsphinx\nsphinxian\nsphinxianness\nsphinxlike\nSphoeroides\nsphragide\nsphragistic\nsphragistics\nsphygmia\nsphygmic\nsphygmochronograph\nsphygmodic\nsphygmogram\nsphygmograph\nsphygmographic\nsphygmography\nsphygmoid\nsphygmology\nsphygmomanometer\nsphygmomanometric\nsphygmomanometry\nsphygmometer\nsphygmometric\nsphygmophone\nsphygmophonic\nsphygmoscope\nsphygmus\nSphyraena\nsphyraenid\nSphyraenidae\nsphyraenoid\nSphyrapicus\nSphyrna\nSphyrnidae\nSpica\nspica\nspical\nspicant\nSpicaria\nspicate\nspicated\nspiccato\nspice\nspiceable\nspiceberry\nspicebush\nspicecake\nspiced\nspiceful\nspicehouse\nspiceland\nspiceless\nspicelike\nspicer\nspicery\nspicewood\nspiciferous\nspiciform\nspicigerous\nspicilege\nspicily\nspiciness\nspicing\nspick\nspicket\nspickle\nspicknel\nspicose\nspicosity\nspicous\nspicousness\nspicula\nspiculae\nspicular\nspiculate\nspiculated\nspiculation\nspicule\nspiculiferous\nspiculiform\nspiculigenous\nspiculigerous\nspiculofiber\nspiculose\nspiculous\nspiculum\nspiculumamoris\nspicy\nspider\nspidered\nspiderflower\nspiderish\nspiderless\nspiderlike\nspiderling\nspiderly\nspiderweb\nspiderwork\nspiderwort\nspidery\nspidger\nspied\nspiegel\nspiegeleisen\nspiel\nspieler\nspier\nspiff\nspiffed\nspiffily\nspiffiness\nspiffing\nspiffy\nspiflicate\nspiflicated\nspiflication\nspig\nSpigelia\nSpigeliaceae\nSpigelian\nspiggoty\nspignet\nspigot\nSpike\nspike\nspikebill\nspiked\nspikedness\nspikefish\nspikehorn\nspikelet\nspikelike\nspikenard\nspiker\nspiketail\nspiketop\nspikeweed\nspikewise\nspikily\nspikiness\nspiking\nspiky\nSpilanthes\nspile\nspilehole\nspiler\nspileworm\nspilikin\nspiling\nspilite\nspilitic\nspill\nspillage\nspiller\nspillet\nspillproof\nspillway\nspilly\nSpilogale\nspiloma\nspilosite\nspilt\nspilth\nspilus\nspin\nspina\nspinacene\nspinaceous\nspinach\nspinachlike\nSpinacia\nspinae\nspinage\nspinal\nspinales\nspinalis\nspinally\nspinate\nspinder\nspindlage\nspindle\nspindleage\nspindled\nspindleful\nspindlehead\nspindlelegs\nspindlelike\nspindler\nspindleshanks\nspindletail\nspindlewise\nspindlewood\nspindleworm\nspindliness\nspindling\nspindly\nspindrift\nspine\nspinebill\nspinebone\nspined\nspinel\nspineless\nspinelessly\nspinelessness\nspinelet\nspinelike\nspinescence\nspinescent\nspinet\nspinetail\nspingel\nspinibulbar\nspinicarpous\nspinicerebellar\nspinidentate\nspiniferous\nSpinifex\nspinifex\nspiniform\nspinifugal\nspinigerous\nspinigrade\nspininess\nspinipetal\nspinitis\nspinituberculate\nspink\nspinnable\nspinnaker\nspinner\nspinneret\nspinnerular\nspinnerule\nspinnery\nspinney\nspinning\nspinningly\nspinobulbar\nspinocarpous\nspinocerebellar\nspinogalvanization\nspinoglenoid\nspinoid\nspinomuscular\nspinoneural\nspinoperipheral\nspinose\nspinosely\nspinoseness\nspinosity\nspinosodentate\nspinosodenticulate\nspinosotubercular\nspinosotuberculate\nspinosympathetic\nspinotectal\nspinothalamic\nspinotuberculous\nspinous\nspinousness\nSpinozism\nSpinozist\nSpinozistic\nspinster\nspinsterdom\nspinsterhood\nspinsterial\nspinsterish\nspinsterishly\nspinsterism\nspinsterlike\nspinsterly\nspinsterous\nspinstership\nspinstress\nspintext\nspinthariscope\nspinthariscopic\nspintherism\nspinulate\nspinulation\nspinule\nspinulescent\nspinuliferous\nspinuliform\nSpinulosa\nspinulose\nspinulosely\nspinulosociliate\nspinulosodentate\nspinulosodenticulate\nspinulosogranulate\nspinulososerrate\nspinulous\nspiny\nspionid\nSpionidae\nSpioniformia\nspiracle\nspiracula\nspiracular\nspiraculate\nspiraculiferous\nspiraculiform\nspiraculum\nSpiraea\nSpiraeaceae\nspiral\nspirale\nspiraled\nspiraliform\nspiralism\nspirality\nspiralization\nspiralize\nspirally\nspiraloid\nspiraltail\nspiralwise\nspiran\nspirant\nSpiranthes\nspiranthic\nspiranthy\nspirantic\nspirantize\nspiraster\nspirate\nspirated\nspiration\nspire\nspirea\nspired\nspiregrass\nspireless\nspirelet\nspireme\nspirepole\nspireward\nspirewise\nspiricle\nSpirifer\nSpirifera\nSpiriferacea\nspiriferid\nSpiriferidae\nspiriferoid\nspiriferous\nspiriform\nspirignath\nspirignathous\nspirilla\nSpirillaceae\nspirillaceous\nspirillar\nspirillolysis\nspirillosis\nspirillotropic\nspirillotropism\nspirillum\nspiring\nspirit\nspiritally\nspiritdom\nspirited\nspiritedly\nspiritedness\nspiriter\nspiritful\nspiritfully\nspiritfulness\nspirithood\nspiriting\nspiritism\nspiritist\nspiritistic\nspiritize\nspiritland\nspiritleaf\nspiritless\nspiritlessly\nspiritlessness\nspiritlike\nspiritmonger\nspiritous\nspiritrompe\nspiritsome\nspiritual\nspiritualism\nspiritualist\nspiritualistic\nspiritualistically\nspirituality\nspiritualization\nspiritualize\nspiritualizer\nspiritually\nspiritualness\nspiritualship\nspiritualty\nspirituosity\nspirituous\nspirituously\nspirituousness\nspiritus\nspiritweed\nspirity\nspirivalve\nspirket\nspirketing\nspirling\nspiro\nSpirobranchia\nSpirobranchiata\nspirobranchiate\nSpirochaeta\nSpirochaetaceae\nspirochaetal\nSpirochaetales\nSpirochaete\nspirochetal\nspirochete\nspirochetemia\nspirochetic\nspirocheticidal\nspirocheticide\nspirochetosis\nspirochetotic\nSpirodela\nspirogram\nspirograph\nspirographidin\nspirographin\nSpirographis\nSpirogyra\nspiroid\nspiroloculine\nspirometer\nspirometric\nspirometrical\nspirometry\nSpironema\nspiropentane\nSpirophyton\nSpirorbis\nspiroscope\nSpirosoma\nspirous\nspirt\nSpirula\nspirulate\nspiry\nspise\nspissated\nspissitude\nSpisula\nspit\nspital\nspitball\nspitballer\nspitbox\nspitchcock\nspite\nspiteful\nspitefully\nspitefulness\nspiteless\nspiteproof\nspitfire\nspitful\nspithamai\nspithame\nspitish\nspitpoison\nspitscocked\nspitstick\nspitted\nspitten\nspitter\nspitting\nspittle\nspittlefork\nspittlestaff\nspittoon\nspitz\nSpitzenburg\nspitzkop\nspiv\nspivery\nSpizella\nspizzerinctum\nSplachnaceae\nsplachnaceous\nsplachnoid\nSplachnum\nsplacknuck\nsplairge\nsplanchnapophysial\nsplanchnapophysis\nsplanchnectopia\nsplanchnemphraxis\nsplanchnesthesia\nsplanchnesthetic\nsplanchnic\nsplanchnoblast\nsplanchnocoele\nsplanchnoderm\nsplanchnodiastasis\nsplanchnodynia\nsplanchnographer\nsplanchnographical\nsplanchnography\nsplanchnolith\nsplanchnological\nsplanchnologist\nsplanchnology\nsplanchnomegalia\nsplanchnomegaly\nsplanchnopathy\nsplanchnopleural\nsplanchnopleure\nsplanchnopleuric\nsplanchnoptosia\nsplanchnoptosis\nsplanchnosclerosis\nsplanchnoscopy\nsplanchnoskeletal\nsplanchnoskeleton\nsplanchnosomatic\nsplanchnotomical\nsplanchnotomy\nsplanchnotribe\nsplash\nsplashboard\nsplashed\nsplasher\nsplashiness\nsplashing\nsplashingly\nsplashproof\nsplashy\nsplat\nsplatch\nsplatcher\nsplatchy\nsplathering\nsplatter\nsplatterdash\nsplatterdock\nsplatterer\nsplatterfaced\nsplatterwork\nsplay\nsplayed\nsplayer\nsplayfoot\nsplayfooted\nsplaymouth\nsplaymouthed\nspleen\nspleenful\nspleenfully\nspleenish\nspleenishly\nspleenishness\nspleenless\nspleenwort\nspleeny\nspleet\nspleetnew\nsplenadenoma\nsplenalgia\nsplenalgic\nsplenalgy\nsplenatrophia\nsplenatrophy\nsplenauxe\nsplenculus\nsplendacious\nsplendaciously\nsplendaciousness\nsplendent\nsplendently\nsplender\nsplendescent\nsplendid\nsplendidly\nsplendidness\nsplendiferous\nsplendiferously\nsplendiferousness\nsplendor\nsplendorous\nsplendorproof\nsplendourproof\nsplenectama\nsplenectasis\nsplenectomist\nsplenectomize\nsplenectomy\nsplenectopia\nsplenectopy\nsplenelcosis\nsplenemia\nsplenemphraxis\nspleneolus\nsplenepatitis\nsplenetic\nsplenetical\nsplenetically\nsplenetive\nsplenial\nsplenic\nsplenical\nsplenicterus\nsplenification\nspleniform\nsplenitis\nsplenitive\nsplenium\nsplenius\nsplenization\nsplenoblast\nsplenocele\nsplenoceratosis\nsplenocleisis\nsplenocolic\nsplenocyte\nsplenodiagnosis\nsplenodynia\nsplenography\nsplenohemia\nsplenoid\nsplenolaparotomy\nsplenology\nsplenolymph\nsplenolymphatic\nsplenolysin\nsplenolysis\nsplenoma\nsplenomalacia\nsplenomedullary\nsplenomegalia\nsplenomegalic\nsplenomegaly\nsplenomyelogenous\nsplenoncus\nsplenonephric\nsplenopancreatic\nsplenoparectama\nsplenoparectasis\nsplenopathy\nsplenopexia\nsplenopexis\nsplenopexy\nsplenophrenic\nsplenopneumonia\nsplenoptosia\nsplenoptosis\nsplenorrhagia\nsplenorrhaphy\nsplenotomy\nsplenotoxin\nsplenotyphoid\nsplenulus\nsplenunculus\nsplet\nspleuchan\nsplice\nspliceable\nsplicer\nsplicing\nsplinder\nspline\nsplineway\nsplint\nsplintage\nsplinter\nsplinterd\nsplinterless\nsplinternew\nsplinterproof\nsplintery\nsplintwood\nsplinty\nsplit\nsplitbeak\nsplitfinger\nsplitfruit\nsplitmouth\nsplitnew\nsplitsaw\nsplittail\nsplitten\nsplitter\nsplitting\nsplitworm\nsplodge\nsplodgy\nsplore\nsplosh\nsplotch\nsplotchily\nsplotchiness\nsplotchy\nsplother\nsplunge\nsplurge\nsplurgily\nsplurgy\nsplurt\nspluther\nsplutter\nsplutterer\nspoach\nSpock\nspode\nspodiosite\nspodium\nspodogenic\nspodogenous\nspodomancy\nspodomantic\nspodumene\nspoffish\nspoffle\nspoffy\nspogel\nspoil\nspoilable\nspoilage\nspoilation\nspoiled\nspoiler\nspoilfive\nspoilful\nspoiling\nspoilless\nspoilment\nspoilsman\nspoilsmonger\nspoilsport\nspoilt\nSpokan\nspoke\nspokeless\nspoken\nspokeshave\nspokesman\nspokesmanship\nspokester\nspokeswoman\nspokeswomanship\nspokewise\nspoky\nspole\nspolia\nspoliarium\nspoliary\nspoliate\nspoliation\nspoliator\nspoliatory\nspolium\nspondaic\nspondaical\nspondaize\nspondean\nspondee\nspondiac\nSpondiaceae\nSpondias\nspondulics\nspondyl\nspondylalgia\nspondylarthritis\nspondylarthrocace\nspondylexarthrosis\nspondylic\nspondylid\nSpondylidae\nspondylioid\nspondylitic\nspondylitis\nspondylium\nspondylizema\nspondylocace\nSpondylocladium\nspondylodiagnosis\nspondylodidymia\nspondylodymus\nspondyloid\nspondylolisthesis\nspondylolisthetic\nspondylopathy\nspondylopyosis\nspondyloschisis\nspondylosis\nspondylosyndesis\nspondylotherapeutics\nspondylotherapist\nspondylotherapy\nspondylotomy\nspondylous\nSpondylus\nspondylus\nspong\nsponge\nspongecake\nsponged\nspongeful\nspongeless\nspongelet\nspongelike\nspongeous\nspongeproof\nsponger\nspongewood\nSpongiae\nspongian\nspongicolous\nspongiculture\nSpongida\nspongiferous\nspongiform\nSpongiidae\nSpongilla\nspongillid\nSpongillidae\nspongilline\nspongily\nspongin\nsponginblast\nsponginblastic\nsponginess\nsponging\nspongingly\nspongioblast\nspongioblastoma\nspongiocyte\nspongiolin\nspongiopilin\nspongioplasm\nspongioplasmic\nspongiose\nspongiosity\nspongiousness\nSpongiozoa\nspongiozoon\nspongoblast\nspongoblastic\nspongoid\nspongology\nspongophore\nSpongospora\nspongy\nsponsal\nsponsalia\nsponsibility\nsponsible\nsponsing\nsponsion\nsponsional\nsponson\nsponsor\nsponsorial\nsponsorship\nsponspeck\nspontaneity\nspontaneous\nspontaneously\nspontaneousness\nspontoon\nspoof\nspoofer\nspoofery\nspoofish\nspook\nspookdom\nspookery\nspookily\nspookiness\nspookish\nspookism\nspookist\nspookological\nspookologist\nspookology\nspooky\nspool\nspooler\nspoolful\nspoollike\nspoolwood\nspoom\nspoon\nspoonbill\nspoondrift\nspooner\nspoonerism\nspooneyism\nspooneyly\nspooneyness\nspoonflower\nspoonful\nspoonhutch\nspoonily\nspooniness\nspooning\nspoonism\nspoonless\nspoonlike\nspoonmaker\nspoonmaking\nspoonways\nspoonwood\nspoony\nspoonyism\nspoor\nspoorer\nspoot\nspor\nsporabola\nsporaceous\nsporades\nsporadial\nsporadic\nsporadical\nsporadically\nsporadicalness\nsporadicity\nsporadism\nsporadosiderite\nsporal\nsporange\nsporangia\nsporangial\nsporangidium\nsporangiferous\nsporangiform\nsporangioid\nsporangiola\nsporangiole\nsporangiolum\nsporangiophore\nsporangiospore\nsporangite\nSporangites\nsporangium\nsporation\nspore\nspored\nsporeformer\nsporeforming\nsporeling\nsporicide\nsporid\nsporidesm\nsporidia\nsporidial\nsporidiferous\nsporidiole\nsporidiolum\nsporidium\nsporiferous\nsporification\nsporiparity\nsporiparous\nsporoblast\nSporobolus\nsporocarp\nsporocarpium\nSporochnaceae\nSporochnus\nsporocyst\nsporocystic\nsporocystid\nsporocyte\nsporodochia\nsporodochium\nsporoduct\nsporogenesis\nsporogenic\nsporogenous\nsporogeny\nsporogone\nsporogonial\nsporogonic\nsporogonium\nsporogony\nsporoid\nsporologist\nsporomycosis\nsporont\nsporophore\nsporophoric\nsporophorous\nsporophydium\nsporophyll\nsporophyllary\nsporophyllum\nsporophyte\nsporophytic\nsporoplasm\nsporosac\nsporostegium\nsporostrote\nsporotrichosis\nsporotrichotic\nSporotrichum\nsporous\nSporozoa\nsporozoal\nsporozoan\nsporozoic\nsporozoite\nsporozoon\nsporran\nsport\nsportability\nsportable\nsportance\nsporter\nsportful\nsportfully\nsportfulness\nsportily\nsportiness\nsporting\nsportingly\nsportive\nsportively\nsportiveness\nsportless\nsportling\nsportly\nsports\nsportsman\nsportsmanlike\nsportsmanliness\nsportsmanly\nsportsmanship\nsportsome\nsportswear\nsportswoman\nsportswomanly\nsportswomanship\nsportula\nsportulae\nsporty\nsporular\nsporulate\nsporulation\nsporule\nsporuliferous\nsporuloid\nsposh\nsposhy\nspot\nspotless\nspotlessly\nspotlessness\nspotlight\nspotlighter\nspotlike\nspotrump\nspotsman\nspottable\nspotted\nspottedly\nspottedness\nspotteldy\nspotter\nspottily\nspottiness\nspotting\nspottle\nspotty\nspoucher\nspousage\nspousal\nspousally\nspouse\nspousehood\nspouseless\nspousy\nspout\nspouter\nspoutiness\nspouting\nspoutless\nspoutlike\nspoutman\nspouty\nsprachle\nsprack\nsprackish\nsprackle\nsprackly\nsprackness\nsprad\nspraddle\nsprag\nspragger\nspraggly\nspraich\nsprain\nspraint\nspraints\nsprang\nsprangle\nsprangly\nsprank\nsprat\nspratter\nspratty\nsprauchle\nsprawl\nsprawler\nsprawling\nsprawlingly\nsprawly\nspray\nsprayboard\nsprayer\nsprayey\nsprayful\nsprayfully\nsprayless\nspraylike\nsprayproof\nspread\nspreadation\nspreadboard\nspreaded\nspreader\nspreadhead\nspreading\nspreadingly\nspreadingness\nspreadover\nspready\nspreaghery\nspreath\nspreckle\nspree\nspreeuw\nSprekelia\nspreng\nsprent\nspret\nsprew\nsprewl\nspridhogue\nspried\nsprier\nspriest\nsprig\nsprigged\nsprigger\nspriggy\nsprightful\nsprightfully\nsprightfulness\nsprightlily\nsprightliness\nsprightly\nsprighty\nspriglet\nsprigtail\nSpring\nspring\nspringal\nspringald\nspringboard\nspringbok\nspringbuck\nspringe\nspringer\nspringerle\nspringfinger\nspringfish\nspringful\nspringhaas\nspringhalt\nspringhead\nspringhouse\nspringily\nspringiness\nspringing\nspringingly\nspringle\nspringless\nspringlet\nspringlike\nspringly\nspringmaker\nspringmaking\nspringtail\nspringtide\nspringtime\nspringtrap\nspringwood\nspringworm\nspringwort\nspringwurzel\nspringy\nsprink\nsprinkle\nsprinkled\nsprinkleproof\nsprinkler\nsprinklered\nsprinkling\nsprint\nsprinter\nsprit\nsprite\nspritehood\nspritsail\nsprittail\nsprittie\nspritty\nsproat\nsprocket\nsprod\nsprogue\nsproil\nsprong\nsprose\nsprottle\nsprout\nsproutage\nsprouter\nsproutful\nsprouting\nsproutland\nsproutling\nsprowsy\nspruce\nsprucely\nspruceness\nsprucery\nsprucification\nsprucify\nsprue\nspruer\nsprug\nspruiker\nspruit\nsprung\nsprunny\nsprunt\nspruntly\nspry\nspryly\nspryness\nspud\nSpudboy\nspudder\nspuddle\nspuddy\nspuffle\nspug\nspuilyie\nspuilzie\nspuke\nspume\nspumescence\nspumescent\nspumiferous\nspumification\nspumiform\nspumone\nspumose\nspumous\nspumy\nspun\nspung\nspunk\nspunkie\nspunkily\nspunkiness\nspunkless\nspunky\nspunny\nspur\nspurflower\nspurgall\nspurge\nspurgewort\nspuriae\nspuriosity\nspurious\nspuriously\nspuriousness\nSpurius\nspurl\nspurless\nspurlet\nspurlike\nspurling\nspurmaker\nspurmoney\nspurn\nspurner\nspurnpoint\nspurnwater\nspurproof\nspurred\nspurrer\nspurrial\nspurrier\nspurrings\nspurrite\nspurry\nspurt\nspurter\nspurtive\nspurtively\nspurtle\nspurway\nspurwing\nspurwinged\nspurwort\nsput\nsputa\nsputative\nsputter\nsputterer\nsputtering\nsputteringly\nsputtery\nsputum\nsputumary\nsputumose\nsputumous\nSpy\nspy\nspyboat\nspydom\nspyer\nspyfault\nspyglass\nspyhole\nspyism\nspyproof\nSpyros\nspyship\nspytower\nsquab\nsquabash\nsquabasher\nsquabbed\nsquabbish\nsquabble\nsquabbler\nsquabbling\nsquabblingly\nsquabbly\nsquabby\nsquacco\nsquad\nsquaddy\nsquadrate\nsquadrism\nsquadron\nsquadrone\nsquadroned\nsquail\nsquailer\nsqualene\nSquali\nsqualid\nSqualida\nSqualidae\nsqualidity\nsqualidly\nsqualidness\nsqualiform\nsquall\nsqualler\nsquallery\nsquallish\nsqually\nsqualm\nSqualodon\nsqualodont\nSqualodontidae\nsqualoid\nSqualoidei\nsqualor\nSqualus\nsquam\nsquama\nsquamaceous\nsquamae\nSquamariaceae\nSquamata\nsquamate\nsquamated\nsquamatine\nsquamation\nsquamatogranulous\nsquamatotuberculate\nsquame\nsquamella\nsquamellate\nsquamelliferous\nsquamelliform\nsquameous\nsquamiferous\nsquamiform\nsquamify\nsquamigerous\nsquamipennate\nSquamipennes\nsquamipinnate\nSquamipinnes\nsquamocellular\nsquamoepithelial\nsquamoid\nsquamomastoid\nsquamoparietal\nsquamopetrosal\nsquamosa\nsquamosal\nsquamose\nsquamosely\nsquamoseness\nsquamosis\nsquamosity\nsquamosodentated\nsquamosoimbricated\nsquamosomaxillary\nsquamosoparietal\nsquamosoradiate\nsquamosotemporal\nsquamosozygomatic\nsquamosphenoid\nsquamosphenoidal\nsquamotemporal\nsquamous\nsquamously\nsquamousness\nsquamozygomatic\nSquamscot\nsquamula\nsquamulae\nsquamulate\nsquamulation\nsquamule\nsquamuliform\nsquamulose\nsquander\nsquanderer\nsquanderingly\nsquandermania\nsquandermaniac\nsquantum\nsquarable\nsquare\nsquareage\nsquarecap\nsquared\nsquaredly\nsquareface\nsquareflipper\nsquarehead\nsquarelike\nsquarely\nsquareman\nsquaremouth\nsquareness\nsquarer\nsquaretail\nsquarewise\nsquaring\nsquarish\nsquarishly\nsquark\nsquarrose\nsquarrosely\nsquarrous\nsquarrulose\nsquarson\nsquarsonry\nsquary\nsquash\nsquashberry\nsquasher\nsquashily\nsquashiness\nsquashy\nsquat\nSquatarola\nsquatarole\nSquatina\nsquatina\nsquatinid\nSquatinidae\nsquatinoid\nSquatinoidei\nsquatly\nsquatment\nsquatmore\nsquatness\nsquattage\nsquatted\nsquatter\nsquatterarchy\nsquatterdom\nsquatterproof\nsquattily\nsquattiness\nsquatting\nsquattingly\nsquattish\nsquattocracy\nsquattocratic\nsquatty\nsquatwise\nsquaw\nsquawberry\nsquawbush\nsquawdom\nsquawfish\nsquawflower\nsquawk\nsquawker\nsquawkie\nsquawking\nsquawkingly\nsquawky\nSquawmish\nsquawroot\nSquawtits\nsquawweed\nSquaxon\nsqudge\nsqudgy\nsqueak\nsqueaker\nsqueakery\nsqueakily\nsqueakiness\nsqueaking\nsqueakingly\nsqueaklet\nsqueakproof\nsqueaky\nsqueakyish\nsqueal\nsqueald\nsquealer\nsquealing\nsqueam\nsqueamish\nsqueamishly\nsqueamishness\nsqueamous\nsqueamy\nSquedunk\nsqueege\nsqueegee\nsqueezability\nsqueezable\nsqueezableness\nsqueezably\nsqueeze\nsqueezeman\nsqueezer\nsqueezing\nsqueezingly\nsqueezy\nsquelch\nsquelcher\nsquelchily\nsquelchiness\nsquelching\nsquelchingly\nsquelchingness\nsquelchy\nsquench\nsquencher\nsqueteague\nsquib\nsquibber\nsquibbery\nsquibbish\nsquiblet\nsquibling\nsquid\nsquiddle\nsquidge\nsquidgereen\nsquidgy\nsquiffed\nsquiffer\nsquiffy\nsquiggle\nsquiggly\nsquilgee\nsquilgeer\nSquill\nSquilla\nsquilla\nsquillagee\nsquillery\nsquillian\nsquillid\nSquillidae\nsquilloid\nSquilloidea\nsquimmidge\nsquin\nsquinance\nsquinancy\nsquinch\nsquinny\nsquinsy\nsquint\nsquinted\nsquinter\nsquinting\nsquintingly\nsquintingness\nsquintly\nsquintness\nsquinty\nsquirage\nsquiralty\nsquire\nsquirearch\nsquirearchal\nsquirearchical\nsquirearchy\nsquiredom\nsquireen\nsquirehood\nsquireless\nsquirelet\nsquirelike\nsquireling\nsquirely\nsquireocracy\nsquireship\nsquiress\nsquiret\nsquirewise\nsquirish\nsquirism\nsquirk\nsquirm\nsquirminess\nsquirming\nsquirmingly\nsquirmy\nsquirr\nsquirrel\nsquirrelfish\nsquirrelian\nsquirreline\nsquirrelish\nsquirrellike\nsquirrelproof\nsquirreltail\nsquirt\nsquirter\nsquirtiness\nsquirting\nsquirtingly\nsquirtish\nsquirty\nsquish\nsquishy\nsquit\nsquitch\nsquitchy\nsquitter\nsquoze\nsquush\nsquushy\nsraddha\nsramana\nSri\nsri\nSridhar\nSridharan\nSrikanth\nSrinivas\nSrinivasan\nSriram\nSrivatsan\nsruti\nSsi\nssu\nst\nstaab\nStaatsrat\nstab\nstabber\nstabbing\nstabbingly\nstabile\nstabilify\nstabilist\nstabilitate\nstability\nstabilization\nstabilizator\nstabilize\nstabilizer\nstable\nstableboy\nstableful\nstablekeeper\nstablelike\nstableman\nstableness\nstabler\nstablestand\nstableward\nstablewards\nstabling\nstablishment\nstably\nstaboy\nstabproof\nstabulate\nstabulation\nstabwort\nstaccato\nStacey\nstacher\nstachydrin\nstachydrine\nstachyose\nStachys\nstachys\nStachytarpheta\nStachyuraceae\nstachyuraceous\nStachyurus\nstack\nstackage\nstackencloud\nstacker\nstackfreed\nstackful\nstackgarth\nStackhousia\nStackhousiaceae\nstackhousiaceous\nstackless\nstackman\nstackstand\nstackyard\nstacte\nstactometer\nStacy\nstadda\nstaddle\nstaddling\nstade\nstadholder\nstadholderate\nstadholdership\nstadhouse\nstadia\nstadic\nstadimeter\nstadiometer\nstadion\nstadium\nstafette\nstaff\nstaffed\nstaffelite\nstaffer\nstaffless\nstaffman\nstag\nstagbush\nstage\nstageability\nstageable\nstageableness\nstageably\nstagecoach\nstagecoaching\nstagecraft\nstaged\nstagedom\nstagehand\nstagehouse\nstageland\nstagelike\nstageman\nstager\nstagery\nstagese\nstagewise\nstageworthy\nstagewright\nstaggard\nstaggart\nstaggarth\nStagger\nstagger\nstaggerbush\nstaggerer\nstaggering\nstaggeringly\nstaggers\nstaggerweed\nstaggerwort\nstaggery\nstaggie\nstaggy\nstaghead\nstaghorn\nstaghound\nstaghunt\nstaghunter\nstaghunting\nstagiary\nstagily\nstaginess\nstaging\nStagirite\nStagiritic\nstaglike\nstagmometer\nstagnance\nstagnancy\nstagnant\nstagnantly\nstagnantness\nstagnate\nstagnation\nstagnatory\nstagnature\nstagnicolous\nstagnize\nstagnum\nStagonospora\nstagskin\nstagworm\nstagy\nStahlhelm\nStahlhelmer\nStahlhelmist\nStahlian\nStahlianism\nStahlism\nstaia\nstaid\nstaidly\nstaidness\nstain\nstainability\nstainable\nstainableness\nstainably\nstainer\nstainful\nstainierite\nstaining\nstainless\nstainlessly\nstainlessness\nstainproof\nstaio\nstair\nstairbeak\nstairbuilder\nstairbuilding\nstaircase\nstaired\nstairhead\nstairless\nstairlike\nstairstep\nstairway\nstairwise\nstairwork\nstairy\nstaith\nstaithman\nstaiver\nstake\nstakehead\nstakeholder\nstakemaster\nstaker\nstakerope\nStakhanovism\nStakhanovite\nstalactic\nstalactical\nstalactiform\nstalactital\nstalactite\nstalactited\nstalactitic\nstalactitical\nstalactitically\nstalactitiform\nstalactitious\nstalagma\nstalagmite\nstalagmitic\nstalagmitical\nstalagmitically\nstalagmometer\nstalagmometric\nstalagmometry\nstale\nstalely\nstalemate\nstaleness\nstaling\nStalinism\nStalinist\nStalinite\nstalk\nstalkable\nstalked\nstalker\nstalkily\nstalkiness\nstalking\nstalkingly\nstalkless\nstalklet\nstalklike\nstalko\nstalky\nstall\nstallage\nstallar\nstallboard\nstallenger\nstaller\nstallership\nstalling\nstallion\nstallionize\nstallman\nstallment\nstalwart\nstalwartism\nstalwartize\nstalwartly\nstalwartness\nstam\nstambha\nstambouline\nstamen\nstamened\nstamin\nstamina\nstaminal\nstaminate\nstamineal\nstamineous\nstaminiferous\nstaminigerous\nstaminode\nstaminodium\nstaminody\nstammel\nstammer\nstammerer\nstammering\nstammeringly\nstammeringness\nstammerwort\nstamnos\nstamp\nstampable\nstampage\nstampedable\nstampede\nstampeder\nstampedingly\nstampee\nstamper\nstampery\nstamphead\nStampian\nstamping\nstample\nstampless\nstampman\nstampsman\nstampweed\nStan\nstance\nstanch\nstanchable\nstanchel\nstancheled\nstancher\nstanchion\nstanchless\nstanchly\nstanchness\nstand\nstandage\nstandard\nstandardbred\nstandardizable\nstandardization\nstandardize\nstandardized\nstandardizer\nstandardwise\nstandee\nstandel\nstandelwelks\nstandelwort\nstander\nstandergrass\nstanderwort\nstandfast\nstanding\nstandish\nstandoff\nstandoffish\nstandoffishness\nstandout\nstandpat\nstandpatism\nstandpatter\nstandpipe\nstandpoint\nstandpost\nstandstill\nstane\nstanechat\nstang\nStangeria\nstanhope\nStanhopea\nstanine\nStanislaw\nstanjen\nstank\nstankie\nStanley\nStanly\nstannane\nstannary\nstannate\nstannator\nstannel\nstanner\nstannery\nstannic\nstannide\nstanniferous\nstannite\nstanno\nstannotype\nstannous\nstannoxyl\nstannum\nstannyl\nstanza\nstanzaed\nstanzaic\nstanzaical\nstanzaically\nstanze\nstap\nstapedectomy\nstapedial\nstapediform\nstapediovestibular\nstapedius\nStapelia\nstapelia\nstapes\nstaphisagria\nstaphyle\nStaphylea\nStaphyleaceae\nstaphyleaceous\nstaphylectomy\nstaphyledema\nstaphylematoma\nstaphylic\nstaphyline\nstaphylinic\nstaphylinid\nStaphylinidae\nstaphylinideous\nStaphylinoidea\nStaphylinus\nstaphylion\nstaphylitis\nstaphyloangina\nstaphylococcal\nstaphylococci\nstaphylococcic\nStaphylococcus\nstaphylococcus\nstaphylodermatitis\nstaphylodialysis\nstaphyloedema\nstaphylohemia\nstaphylolysin\nstaphyloma\nstaphylomatic\nstaphylomatous\nstaphylomycosis\nstaphyloncus\nstaphyloplastic\nstaphyloplasty\nstaphyloptosia\nstaphyloptosis\nstaphyloraphic\nstaphylorrhaphic\nstaphylorrhaphy\nstaphyloschisis\nstaphylosis\nstaphylotome\nstaphylotomy\nstaphylotoxin\nstaple\nstapled\nstapler\nstaplewise\nstapling\nStar\nstar\nstarblind\nstarbloom\nstarboard\nstarbolins\nstarbright\nStarbuck\nstarch\nstarchboard\nstarched\nstarchedly\nstarchedness\nstarcher\nstarchflower\nstarchily\nstarchiness\nstarchless\nstarchlike\nstarchly\nstarchmaker\nstarchmaking\nstarchman\nstarchness\nstarchroot\nstarchworks\nstarchwort\nstarchy\nstarcraft\nstardom\nstare\nstaree\nstarer\nstarets\nstarfish\nstarflower\nstarfruit\nstarful\nstargaze\nstargazer\nstargazing\nstaring\nstaringly\nstark\nstarken\nstarkly\nstarkness\nstarky\nstarless\nstarlessly\nstarlessness\nstarlet\nstarlight\nstarlighted\nstarlights\nstarlike\nstarling\nstarlit\nstarlite\nstarlitten\nstarmonger\nstarn\nstarnel\nstarnie\nstarnose\nStaroobriadtsi\nstarost\nstarosta\nstarosty\nstarred\nstarrily\nstarriness\nstarring\nstarringly\nstarry\nstarshake\nstarshine\nstarship\nstarshoot\nstarshot\nstarstone\nstarstroke\nstart\nstarter\nstartful\nstartfulness\nstarthroat\nstarting\nstartingly\nstartish\nstartle\nstartler\nstartling\nstartlingly\nstartlingness\nstartlish\nstartlishness\nstartly\nstartor\nstarty\nstarvation\nstarve\nstarveacre\nstarved\nstarvedly\nstarveling\nstarver\nstarvy\nstarward\nstarwise\nstarworm\nstarwort\nstary\nstases\nstash\nstashie\nstasidion\nstasimetric\nstasimon\nstasimorphy\nstasiphobia\nstasis\nstassfurtite\nstatable\nstatal\nstatant\nstatcoulomb\nState\nstate\nstatecraft\nstated\nstatedly\nstateful\nstatefully\nstatefulness\nstatehood\nStatehouse\nstateless\nstatelet\nstatelich\nstatelily\nstateliness\nstately\nstatement\nstatemonger\nstatequake\nstater\nstateroom\nstatesboy\nstateside\nstatesider\nstatesman\nstatesmanese\nstatesmanlike\nstatesmanly\nstatesmanship\nstatesmonger\nstateswoman\nstateway\nstatfarad\nstathmoi\nstathmos\nstatic\nstatical\nstatically\nStatice\nstaticproof\nstatics\nstation\nstational\nstationarily\nstationariness\nstationary\nstationer\nstationery\nstationman\nstationmaster\nstatiscope\nstatism\nstatist\nstatistic\nstatistical\nstatistically\nstatistician\nstatisticize\nstatistics\nstatistology\nstative\nstatoblast\nstatocracy\nstatocyst\nstatolatry\nstatolith\nstatolithic\nstatometer\nstator\nstatoreceptor\nstatorhab\nstatoscope\nstatospore\nstatuarism\nstatuarist\nstatuary\nstatue\nstatuecraft\nstatued\nstatueless\nstatuelike\nstatuesque\nstatuesquely\nstatuesqueness\nstatuette\nstature\nstatured\nstatus\nstatutable\nstatutableness\nstatutably\nstatutary\nstatute\nstatutorily\nstatutory\nstatvolt\nstaucher\nstauk\nstaumer\nstaun\nstaunch\nstaunchable\nstaunchly\nstaunchness\nstaup\nstauracin\nstauraxonia\nstauraxonial\nstaurion\nstaurolatry\nstaurolite\nstaurolitic\nstaurology\nStauromedusae\nstauromedusan\nstauropegial\nstauropegion\nstauroscope\nstauroscopic\nstauroscopically\nstaurotide\nstauter\nstave\nstaveable\nstaveless\nstaver\nstavers\nstaverwort\nstavesacre\nstavewise\nstavewood\nstaving\nstavrite\nstaw\nstawn\nstaxis\nstay\nstayable\nstayed\nstayer\nstaylace\nstayless\nstaylessness\nstaymaker\nstaymaking\nstaynil\nstays\nstaysail\nstayship\nstchi\nstead\nsteadfast\nsteadfastly\nsteadfastness\nsteadier\nsteadily\nsteadiment\nsteadiness\nsteading\nsteadman\nsteady\nsteadying\nsteadyingly\nsteadyish\nsteak\nsteal\nstealability\nstealable\nstealage\nstealed\nstealer\nstealing\nstealingly\nstealth\nstealthful\nstealthfully\nstealthily\nstealthiness\nstealthless\nstealthlike\nstealthwise\nstealthy\nstealy\nsteam\nsteamboat\nsteamboating\nsteamboatman\nsteamcar\nsteamer\nsteamerful\nsteamerless\nsteamerload\nsteamily\nsteaminess\nsteaming\nsteamless\nsteamlike\nsteampipe\nsteamproof\nsteamship\nsteamtight\nsteamtightness\nsteamy\nstean\nsteaning\nsteapsin\nstearate\nstearic\nsteariform\nstearin\nstearolactone\nstearone\nstearoptene\nstearrhea\nstearyl\nsteatin\nsteatite\nsteatitic\nsteatocele\nsteatogenous\nsteatolysis\nsteatolytic\nsteatoma\nsteatomatous\nsteatopathic\nsteatopyga\nsteatopygia\nsteatopygic\nsteatopygous\nSteatornis\nSteatornithes\nSteatornithidae\nsteatorrhea\nsteatosis\nstech\nstechados\nsteckling\nsteddle\nStedman\nsteed\nsteedless\nsteedlike\nsteek\nsteekkan\nsteekkannen\nsteel\nSteelboy\nsteeler\nsteelhead\nsteelhearted\nsteelification\nsteelify\nsteeliness\nsteeling\nsteelless\nsteellike\nsteelmaker\nsteelmaking\nsteelproof\nsteelware\nsteelwork\nsteelworker\nsteelworks\nsteely\nsteelyard\nSteen\nsteen\nsteenboc\nsteenbock\nsteenbok\nSteenie\nsteenkirk\nsteenstrupine\nsteenth\nsteep\nsteepdown\nsteepen\nsteeper\nsteepgrass\nsteepish\nsteeple\nsteeplebush\nsteeplechase\nsteeplechaser\nsteeplechasing\nsteepled\nsteepleless\nsteeplelike\nsteepletop\nsteeply\nsteepness\nsteepweed\nsteepwort\nsteepy\nsteer\nsteerability\nsteerable\nsteerage\nsteerageway\nsteerer\nsteering\nsteeringly\nsteerling\nsteerman\nsteermanship\nsteersman\nsteerswoman\nsteeve\nsteevely\nsteever\nsteeving\nStefan\nsteg\nsteganogram\nsteganographical\nsteganographist\nsteganography\nSteganophthalmata\nsteganophthalmate\nsteganophthalmatous\nSteganophthalmia\nsteganopod\nsteganopodan\nSteganopodes\nsteganopodous\nstegnosis\nstegnotic\nstegocarpous\nStegocephalia\nstegocephalian\nstegocephalous\nStegodon\nstegodont\nstegodontine\nStegomus\nStegomyia\nstegosaur\nStegosauria\nstegosaurian\nstegosauroid\nStegosaurus\nsteid\nsteigh\nStein\nstein\nSteinberger\nsteinbok\nSteinerian\nsteinful\nsteinkirk\nSteironema\nstekan\nstela\nstelae\nstelai\nstelar\nstele\nstell\nStella\nstella\nstellar\nStellaria\nstellary\nstellate\nstellated\nstellately\nstellature\nstelleridean\nstellerine\nstelliferous\nstellification\nstelliform\nstellify\nstelling\nstellionate\nstelliscript\nStellite\nstellite\nstellular\nstellularly\nstellulate\nstelography\nstem\nstema\nstemhead\nstemless\nstemlet\nstemlike\nstemma\nstemmata\nstemmatiform\nstemmatous\nstemmed\nstemmer\nstemmery\nstemming\nstemmy\nStemona\nStemonaceae\nstemonaceous\nstemple\nstempost\nstemson\nstemwards\nstemware\nsten\nstenar\nstench\nstenchel\nstenchful\nstenching\nstenchion\nstenchy\nstencil\nstenciler\nstencilmaker\nstencilmaking\nstend\nsteng\nstengah\nstenion\nsteno\nstenobathic\nstenobenthic\nstenobragmatic\nstenobregma\nstenocardia\nstenocardiac\nStenocarpus\nstenocephalia\nstenocephalic\nstenocephalous\nstenocephaly\nstenochoria\nstenochrome\nstenochromy\nstenocoriasis\nstenocranial\nstenocrotaphia\nStenofiber\nstenog\nstenogastric\nstenogastry\nStenoglossa\nstenograph\nstenographer\nstenographic\nstenographical\nstenographically\nstenographist\nstenography\nstenohaline\nstenometer\nstenopaic\nStenopelmatidae\nstenopetalous\nstenophile\nStenophragma\nstenophyllous\nstenorhyncous\nstenosed\nstenosepalous\nstenosis\nstenosphere\nstenostomatous\nstenostomia\nStenotaphrum\nstenotelegraphy\nstenothermal\nstenothorax\nstenotic\nstenotype\nstenotypic\nstenotypist\nstenotypy\nstent\nstenter\nstenterer\nstenton\nStentor\nstentorian\nstentorianly\nstentorine\nstentorious\nstentoriously\nstentoriousness\nstentoronic\nstentorophonic\nstentrel\nstep\nstepaunt\nstepbairn\nstepbrother\nstepbrotherhood\nstepchild\nstepdame\nstepdaughter\nstepfather\nstepfatherhood\nstepfatherly\nstepgrandchild\nstepgrandfather\nstepgrandmother\nstepgrandson\nStephan\nStephana\nstephane\nstephanial\nStephanian\nstephanic\nStephanie\nstephanion\nstephanite\nStephanoceros\nStephanokontae\nstephanome\nstephanos\nStephanotis\nstephanotis\nStephanurus\nStephe\nStephen\nstepladder\nstepless\nsteplike\nstepminnie\nstepmother\nstepmotherhood\nstepmotherless\nstepmotherliness\nstepmotherly\nstepnephew\nstepniece\nstepparent\nsteppe\nstepped\nsteppeland\nstepper\nstepping\nsteppingstone\nsteprelation\nsteprelationship\nstepsire\nstepsister\nstepson\nstepstone\nstept\nstepuncle\nstepway\nstepwise\nsteradian\nstercobilin\nstercolin\nstercophagic\nstercophagous\nstercoraceous\nstercoral\nStercoranism\nStercoranist\nStercorariidae\nStercorariinae\nstercorarious\nStercorarius\nstercorary\nstercorate\nstercoration\nstercorean\nstercoremia\nstercoreous\nStercorianism\nstercoricolous\nStercorist\nstercorite\nstercorol\nstercorous\nstercovorous\nSterculia\nSterculiaceae\nsterculiaceous\nsterculiad\nstere\nstereagnosis\nSterelmintha\nsterelminthic\nsterelminthous\nstereo\nstereobate\nstereobatic\nstereoblastula\nstereocamera\nstereocampimeter\nstereochemic\nstereochemical\nstereochemically\nstereochemistry\nstereochromatic\nstereochromatically\nstereochrome\nstereochromic\nstereochromically\nstereochromy\nstereocomparagraph\nstereocomparator\nstereoelectric\nstereofluoroscopic\nstereofluoroscopy\nstereogastrula\nstereognosis\nstereognostic\nstereogoniometer\nstereogram\nstereograph\nstereographer\nstereographic\nstereographical\nstereographically\nstereography\nstereoisomer\nstereoisomeric\nstereoisomerical\nstereoisomeride\nstereoisomerism\nstereomatrix\nstereome\nstereomer\nstereomeric\nstereomerical\nstereomerism\nstereometer\nstereometric\nstereometrical\nstereometrically\nstereometry\nstereomicrometer\nstereomonoscope\nstereoneural\nstereophantascope\nstereophonic\nstereophony\nstereophotogrammetry\nstereophotograph\nstereophotographic\nstereophotography\nstereophotomicrograph\nstereophotomicrography\nstereophysics\nstereopicture\nstereoplanigraph\nstereoplanula\nstereoplasm\nstereoplasma\nstereoplasmic\nstereopsis\nstereoptician\nstereopticon\nstereoradiograph\nstereoradiography\nStereornithes\nstereornithic\nstereoroentgenogram\nstereoroentgenography\nstereoscope\nstereoscopic\nstereoscopically\nstereoscopism\nstereoscopist\nstereoscopy\nStereospondyli\nstereospondylous\nstereostatic\nstereostatics\nstereotactic\nstereotactically\nstereotaxis\nstereotelemeter\nstereotelescope\nstereotomic\nstereotomical\nstereotomist\nstereotomy\nstereotropic\nstereotropism\nstereotypable\nstereotype\nstereotyped\nstereotyper\nstereotypery\nstereotypic\nstereotypical\nstereotyping\nstereotypist\nstereotypographer\nstereotypography\nstereotypy\nStereum\nsterhydraulic\nsteri\nsteric\nsterically\nsterics\nsteride\nsterigma\nsterigmata\nsterigmatic\nsterile\nsterilely\nsterileness\nsterilisable\nsterility\nsterilizability\nsterilizable\nsterilization\nsterilize\nsterilizer\nsterin\nsterk\nsterlet\nSterling\nsterling\nsterlingly\nsterlingness\nStern\nstern\nSterna\nsterna\nsternad\nsternage\nsternal\nsternalis\nsternbergite\nsterncastle\nsterneber\nsternebra\nsternebrae\nsternebral\nsterned\nsternforemost\nSterninae\nsternite\nsternitic\nsternly\nsternman\nsternmost\nsternness\nSterno\nsternoclavicular\nsternocleidomastoid\nsternoclidomastoid\nsternocoracoid\nsternocostal\nsternofacial\nsternofacialis\nsternoglossal\nsternohumeral\nsternohyoid\nsternohyoidean\nsternomancy\nsternomastoid\nsternomaxillary\nsternonuchal\nsternopericardiac\nsternopericardial\nsternoscapular\nsternothere\nSternotherus\nsternothyroid\nsternotracheal\nsternotribe\nsternovertebral\nsternoxiphoid\nsternpost\nsternson\nsternum\nsternutation\nsternutative\nsternutator\nsternutatory\nsternward\nsternway\nsternways\nsternworks\nstero\nsteroid\nsterol\nSterope\nsterrinck\nstert\nstertor\nstertorious\nstertoriously\nstertoriousness\nstertorous\nstertorously\nstertorousness\nsterve\nStesichorean\nstet\nstetch\nstetharteritis\nstethogoniometer\nstethograph\nstethographic\nstethokyrtograph\nstethometer\nstethometric\nstethometry\nstethoparalysis\nstethophone\nstethophonometer\nstethoscope\nstethoscopic\nstethoscopical\nstethoscopically\nstethoscopist\nstethoscopy\nstethospasm\nStevan\nSteve\nstevedorage\nstevedore\nstevedoring\nstevel\nSteven\nsteven\nStevensonian\nStevensoniana\nStevia\nstevia\nstew\nstewable\nsteward\nstewardess\nstewardly\nstewardry\nstewardship\nStewart\nStewartia\nstewartry\nstewarty\nstewed\nstewpan\nstewpond\nstewpot\nstewy\nstey\nsthenia\nsthenic\nsthenochire\nstib\nstibbler\nstibblerig\nstibethyl\nstibial\nstibialism\nstibiate\nstibiated\nstibic\nstibiconite\nstibine\nstibious\nstibium\nstibnite\nstibonium\nsticcado\nstich\nsticharion\nsticheron\nstichic\nstichically\nstichid\nstichidium\nstichomancy\nstichometric\nstichometrical\nstichometrically\nstichometry\nstichomythic\nstichomythy\nstick\nstickability\nstickable\nstickadore\nstickadove\nstickage\nstickball\nsticked\nsticker\nstickers\nstickfast\nstickful\nstickily\nstickiness\nsticking\nstickit\nstickle\nstickleaf\nstickleback\nstickler\nstickless\nsticklike\nstickling\nstickly\nstickpin\nsticks\nstickseed\nsticksmanship\nsticktail\nsticktight\nstickum\nstickwater\nstickweed\nstickwork\nsticky\nSticta\nStictaceae\nStictidaceae\nstictiform\nStictis\nstid\nstiddy\nstife\nstiff\nstiffen\nstiffener\nstiffening\nstiffhearted\nstiffish\nstiffleg\nstifflike\nstiffly\nstiffneck\nstiffness\nstiffrump\nstifftail\nstifle\nstifledly\nstifler\nstifling\nstiflingly\nstigma\nstigmai\nstigmal\nstigmaria\nstigmarian\nstigmarioid\nstigmasterol\nstigmata\nstigmatal\nstigmatic\nstigmatical\nstigmatically\nstigmaticalness\nstigmatiferous\nstigmatiform\nstigmatism\nstigmatist\nstigmatization\nstigmatize\nstigmatizer\nstigmatoid\nstigmatose\nstigme\nstigmeology\nstigmonose\nstigonomancy\nStikine\nStilbaceae\nStilbella\nstilbene\nstilbestrol\nstilbite\nstilboestrol\nStilbum\nstile\nstileman\nstilet\nstiletto\nstilettolike\nstill\nstillage\nstillatitious\nstillatory\nstillbirth\nstillborn\nstiller\nstillhouse\nstillicide\nstillicidium\nstilliform\nstilling\nStillingia\nstillion\nstillish\nstillman\nstillness\nstillroom\nstillstand\nStillwater\nstilly\nStilophora\nStilophoraceae\nstilpnomelane\nstilpnosiderite\nstilt\nstiltbird\nstilted\nstilter\nstiltify\nstiltiness\nstiltish\nstiltlike\nStilton\nstilty\nstim\nstime\nstimpart\nstimpert\nstimulability\nstimulable\nstimulance\nstimulancy\nstimulant\nstimulate\nstimulatingly\nstimulation\nstimulative\nstimulator\nstimulatory\nstimulatress\nstimulatrix\nstimuli\nstimulogenous\nstimulus\nstimy\nstine\nsting\nstingaree\nstingareeing\nstingbull\nstinge\nstinger\nstingfish\nstingily\nstinginess\nstinging\nstingingly\nstingingness\nstingless\nstingo\nstingproof\nstingray\nstingtail\nstingy\nstink\nstinkard\nstinkardly\nstinkball\nstinkberry\nstinkbird\nstinkbug\nstinkbush\nstinkdamp\nstinker\nstinkhorn\nstinking\nstinkingly\nstinkingness\nstinkpot\nstinkstone\nstinkweed\nstinkwood\nstinkwort\nstint\nstinted\nstintedly\nstintedness\nstinter\nstintingly\nstintless\nstinty\nstion\nstionic\nStipa\nstipe\nstiped\nstipel\nstipellate\nstipend\nstipendial\nstipendiarian\nstipendiary\nstipendiate\nstipendium\nstipendless\nstipes\nstipiform\nstipitate\nstipitiform\nstipiture\nStipiturus\nstippen\nstipple\nstippled\nstippler\nstippling\nstipply\nstipula\nstipulable\nstipulaceous\nstipulae\nstipular\nstipulary\nstipulate\nstipulation\nstipulator\nstipulatory\nstipule\nstipuled\nstipuliferous\nstipuliform\nstir\nstirabout\nstirk\nstirless\nstirlessly\nstirlessness\nstirp\nstirpicultural\nstirpiculture\nstirpiculturist\nstirps\nstirra\nstirrable\nstirrage\nstirrer\nstirring\nstirringly\nstirrup\nstirrupless\nstirruplike\nstirrupwise\nstitch\nstitchbird\nstitchdown\nstitcher\nstitchery\nstitching\nstitchlike\nstitchwhile\nstitchwork\nstitchwort\nstite\nstith\nstithy\nstive\nstiver\nstivy\nStizolobium\nstoa\nstoach\nstoat\nstoater\nstob\nstocah\nstoccado\nstoccata\nstochastic\nstochastical\nstochastically\nstock\nstockade\nstockannet\nstockbow\nstockbreeder\nstockbreeding\nStockbridge\nstockbroker\nstockbrokerage\nstockbroking\nstockcar\nstocker\nstockfather\nstockfish\nstockholder\nstockholding\nstockhouse\nstockily\nstockiness\nstockinet\nstocking\nstockinger\nstockingless\nstockish\nstockishly\nstockishness\nstockjobber\nstockjobbery\nstockjobbing\nstockjudging\nstockkeeper\nstockkeeping\nstockless\nstocklike\nstockmaker\nstockmaking\nstockman\nstockowner\nstockpile\nstockpot\nstockproof\nstockrider\nstockriding\nstocks\nstockstone\nstocktaker\nstocktaking\nStockton\nstockwork\nstockwright\nstocky\nstockyard\nstod\nstodge\nstodger\nstodgery\nstodgily\nstodginess\nstodgy\nstoechas\nstoep\nstof\nstoff\nstog\nstoga\nstogie\nstogy\nStoic\nstoic\nstoical\nstoically\nstoicalness\nstoicharion\nstoichiological\nstoichiology\nstoichiometric\nstoichiometrical\nstoichiometrically\nstoichiometry\nStoicism\nstoicism\nStokavci\nStokavian\nStokavski\nstoke\nstokehold\nstokehole\nstoker\nstokerless\nStokesia\nstokesite\nstola\nstolae\nstole\nstoled\nstolelike\nstolen\nstolenly\nstolenness\nstolenwise\nstolewise\nstolid\nstolidity\nstolidly\nstolidness\nstolist\nstolkjaerre\nstollen\nstolon\nstolonate\nstoloniferous\nstoloniferously\nstolonlike\nstolzite\nstoma\nstomacace\nstomach\nstomachable\nstomachal\nstomacher\nstomachful\nstomachfully\nstomachfulness\nstomachic\nstomachically\nstomachicness\nstomaching\nstomachless\nstomachlessness\nstomachy\nstomapod\nStomapoda\nstomapodiform\nstomapodous\nstomata\nstomatal\nstomatalgia\nstomate\nstomatic\nstomatiferous\nstomatitic\nstomatitis\nstomatocace\nStomatoda\nstomatodaeal\nstomatodaeum\nstomatode\nstomatodeum\nstomatodynia\nstomatogastric\nstomatograph\nstomatography\nstomatolalia\nstomatologic\nstomatological\nstomatologist\nstomatology\nstomatomalacia\nstomatomenia\nstomatomy\nstomatomycosis\nstomatonecrosis\nstomatopathy\nStomatophora\nstomatophorous\nstomatoplastic\nstomatoplasty\nstomatopod\nStomatopoda\nstomatopodous\nstomatorrhagia\nstomatoscope\nstomatoscopy\nstomatose\nstomatosepsis\nstomatotomy\nstomatotyphus\nstomatous\nstomenorrhagia\nstomium\nstomodaea\nstomodaeal\nstomodaeum\nStomoisia\nstomoxys\nstomp\nstomper\nstonable\nstond\nStone\nstone\nstoneable\nstonebird\nstonebiter\nstoneboat\nstonebow\nstonebrash\nstonebreak\nstonebrood\nstonecast\nstonechat\nstonecraft\nstonecrop\nstonecutter\nstoned\nstonedamp\nstonefish\nstonegale\nstonegall\nstonehand\nstonehatch\nstonehead\nstonehearted\nStonehenge\nstonelayer\nstonelaying\nstoneless\nstonelessness\nstonelike\nstoneman\nstonemason\nstonemasonry\nstonen\nstonepecker\nstoner\nstoneroot\nstoneseed\nstoneshot\nstonesmatch\nstonesmich\nstonesmitch\nstonesmith\nstonewall\nstonewaller\nstonewally\nstoneware\nstoneweed\nstonewise\nstonewood\nstonework\nstoneworker\nstonewort\nstoneyard\nstong\nstonied\nstonifiable\nstonify\nstonily\nstoniness\nstoning\nstonish\nstonishment\nstonker\nstony\nstonyhearted\nstonyheartedly\nstonyheartedness\nstood\nstooded\nstooden\nstoof\nstooge\nstook\nstooker\nstookie\nstool\nstoolball\nstoollike\nstoon\nstoond\nstoop\nstooper\nstoopgallant\nstooping\nstoopingly\nstoory\nstoot\nstoothing\nstop\nstopa\nstopback\nstopblock\nstopboard\nstopcock\nstope\nstoper\nstopgap\nstophound\nstoping\nstopless\nstoplessness\nstopover\nstoppability\nstoppable\nstoppableness\nstoppably\nstoppage\nstopped\nstopper\nstopperless\nstoppeur\nstopping\nstoppit\nstopple\nstopwater\nstopwork\nstorable\nstorage\nstorax\nstore\nstoreen\nstorehouse\nstorehouseman\nstorekeep\nstorekeeper\nstorekeeping\nstoreman\nstorer\nstoreroom\nstoreship\nstoresman\nstorge\nstoriate\nstoriation\nstoried\nstorier\nstoriette\nstorify\nstoriological\nstoriologist\nstoriology\nstork\nstorken\nstorkish\nstorklike\nstorkling\nstorkwise\nstorm\nstormable\nStormberg\nstormbird\nstormbound\nstormcock\nstormer\nstormful\nstormfully\nstormfulness\nstormily\nstorminess\nstorming\nstormingly\nstormish\nstormless\nstormlessness\nstormlike\nstormproof\nstormward\nstormwind\nstormwise\nstormy\nStorting\nstory\nstorybook\nstoryless\nstorymaker\nstorymonger\nstoryteller\nstorytelling\nstorywise\nstorywork\nstosh\nstoss\nstosston\nstot\nstotinka\nstotter\nstotterel\nstoun\nstound\nstoundmeal\nstoup\nstoupful\nstour\nstouring\nstourliness\nstourness\nstoury\nstoush\nstout\nstouten\nstouth\nstouthearted\nstoutheartedly\nstoutheartedness\nstoutish\nstoutly\nstoutness\nstoutwood\nstouty\nstove\nstovebrush\nstoveful\nstovehouse\nstoveless\nstovemaker\nstovemaking\nstoveman\nstoven\nstovepipe\nstover\nstovewood\nstow\nstowable\nstowage\nstowaway\nstowbord\nstowbordman\nstowce\nstowdown\nstower\nstowing\nstownlins\nstowwood\nstra\nstrabism\nstrabismal\nstrabismally\nstrabismic\nstrabismical\nstrabismometer\nstrabismometry\nstrabismus\nstrabometer\nstrabometry\nstrabotome\nstrabotomy\nstrack\nstrackling\nstract\nStrad\nstrad\nstradametrical\nstraddle\nstraddleback\nstraddlebug\nstraddler\nstraddleways\nstraddlewise\nstraddling\nstraddlingly\nstrade\nstradine\nstradiot\nStradivari\nStradivarius\nstradl\nstradld\nstradlings\nstrae\nstrafe\nstrafer\nStraffordian\nstrag\nstraggle\nstraggler\nstraggling\nstragglingly\nstraggly\nstragular\nstragulum\nstraight\nstraightabout\nstraightaway\nstraightedge\nstraighten\nstraightener\nstraightforward\nstraightforwardly\nstraightforwardness\nstraightforwards\nstraighthead\nstraightish\nstraightly\nstraightness\nstraighttail\nstraightup\nstraightwards\nstraightway\nstraightways\nstraightwise\nstraik\nstrain\nstrainable\nstrainableness\nstrainably\nstrained\nstrainedly\nstrainedness\nstrainer\nstrainerman\nstraining\nstrainingly\nstrainless\nstrainlessly\nstrainproof\nstrainslip\nstraint\nstrait\nstraiten\nstraitlacedness\nstraitlacing\nstraitly\nstraitness\nstraitsman\nstraitwork\nStraka\nstrake\nstraked\nstraky\nstram\nstramash\nstramazon\nstramineous\nstramineously\nstrammel\nstrammer\nstramonium\nstramony\nstramp\nstrand\nstrandage\nstrander\nstranding\nstrandless\nstrandward\nstrang\nstrange\nstrangeling\nstrangely\nstrangeness\nstranger\nstrangerdom\nstrangerhood\nstrangerlike\nstrangership\nstrangerwise\nstrangle\nstrangleable\nstranglement\nstrangler\nstrangles\nstrangletare\nstrangleweed\nstrangling\nstranglingly\nstrangulable\nstrangulate\nstrangulation\nstrangulative\nstrangulatory\nstrangullion\nstrangurious\nstrangury\nstranner\nstrany\nstrap\nstraphang\nstraphanger\nstraphead\nstrapless\nstraplike\nstrappable\nstrappado\nstrappan\nstrapped\nstrapper\nstrapping\nstrapple\nstrapwork\nstrapwort\nstrass\nstrata\nstratagem\nstratagematic\nstratagematical\nstratagematically\nstratagematist\nstratagemical\nstratagemically\nstratal\nstratameter\nstratege\nstrategetic\nstrategetics\nstrategi\nstrategian\nstrategic\nstrategical\nstrategically\nstrategics\nstrategist\nstrategize\nstrategos\nstrategy\nStratfordian\nstrath\nstrathspey\nstrati\nstratic\nstraticulate\nstraticulation\nstratification\nstratified\nstratiform\nstratify\nstratigrapher\nstratigraphic\nstratigraphical\nstratigraphically\nstratigraphist\nstratigraphy\nStratiomyiidae\nStratiotes\nstratlin\nstratochamber\nstratocracy\nstratocrat\nstratocratic\nstratographic\nstratographical\nstratographically\nstratography\nstratonic\nStratonical\nstratopedarch\nstratoplane\nstratose\nstratosphere\nstratospheric\nstratospherical\nstratotrainer\nstratous\nstratum\nstratus\nstraucht\nstrauchten\nstravage\nstrave\nstraw\nstrawberry\nstrawberrylike\nstrawbill\nstrawboard\nstrawbreadth\nstrawen\nstrawer\nstrawflower\nstrawfork\nstrawless\nstrawlike\nstrawman\nstrawmote\nstrawsmall\nstrawsmear\nstrawstack\nstrawstacker\nstrawwalker\nstrawwork\nstrawworm\nstrawy\nstrawyard\nstray\nstrayaway\nstrayer\nstrayling\nstre\nstreahte\nstreak\nstreaked\nstreakedly\nstreakedness\nstreaker\nstreakily\nstreakiness\nstreaklike\nstreakwise\nstreaky\nstream\nstreamer\nstreamful\nstreamhead\nstreaminess\nstreaming\nstreamingly\nstreamless\nstreamlet\nstreamlike\nstreamline\nstreamlined\nstreamliner\nstreamling\nstreamside\nstreamward\nstreamway\nstreamwort\nstreamy\nstreck\nstreckly\nstree\nstreek\nstreel\nstreeler\nstreen\nstreep\nstreet\nstreetage\nstreetcar\nstreetful\nstreetless\nstreetlet\nstreetlike\nstreets\nstreetside\nstreetwalker\nstreetwalking\nstreetward\nstreetway\nstreetwise\nstreite\nstreke\nStrelitz\nStrelitzi\nstrelitzi\nStrelitzia\nStreltzi\nstreltzi\nstremma\nstremmatograph\nstreng\nstrengite\nstrength\nstrengthen\nstrengthener\nstrengthening\nstrengtheningly\nstrengthful\nstrengthfulness\nstrengthily\nstrengthless\nstrengthlessly\nstrengthlessness\nstrengthy\nstrent\nstrenth\nstrenuity\nstrenuosity\nstrenuous\nstrenuously\nstrenuousness\nstrepen\nstrepent\nstrepera\nstreperous\nstrephonade\nstrephosymbolia\nstrepitant\nstrepitantly\nstrepitation\nstrepitous\nstrepor\nStrepsiceros\nstrepsiceros\nstrepsinema\nStrepsiptera\nstrepsipteral\nstrepsipteran\nstrepsipteron\nstrepsipterous\nstrepsis\nstrepsitene\nstreptaster\nstreptobacilli\nstreptobacillus\nStreptocarpus\nstreptococcal\nstreptococci\nstreptococcic\nStreptococcus\nstreptococcus\nstreptolysin\nStreptomyces\nstreptomycin\nStreptoneura\nstreptoneural\nstreptoneurous\nstreptosepticemia\nstreptothricial\nstreptothricin\nstreptothricosis\nStreptothrix\nstreptotrichal\nstreptotrichosis\nstress\nstresser\nstressful\nstressfully\nstressless\nstresslessness\nstret\nstretch\nstretchable\nstretchberry\nstretcher\nstretcherman\nstretchiness\nstretchneck\nstretchproof\nstretchy\nstretman\nstrette\nstretti\nstretto\nstrew\nstrewage\nstrewer\nstrewment\nstrewn\nstrey\nstreyne\nstria\nstriae\nstrial\nStriaria\nStriariaceae\nstriatal\nstriate\nstriated\nstriation\nstriatum\nstriature\nstrich\nstriche\nstrick\nstricken\nstrickenly\nstrickenness\nstricker\nstrickle\nstrickler\nstrickless\nstrict\nstriction\nstrictish\nstrictly\nstrictness\nstricture\nstrictured\nstrid\nstridden\nstriddle\nstride\nstrideleg\nstridelegs\nstridence\nstridency\nstrident\nstridently\nstrider\nstrideways\nstridhan\nstridhana\nstridhanum\nstridingly\nstridling\nstridlins\nstridor\nstridulant\nstridulate\nstridulation\nstridulator\nstridulatory\nstridulent\nstridulous\nstridulously\nstridulousness\nstrife\nstrifeful\nstrifeless\nstrifemaker\nstrifemaking\nstrifemonger\nstrifeproof\nstriffen\nstrig\nStriga\nstriga\nstrigae\nstrigal\nstrigate\nStriges\nstriggle\nstright\nStrigidae\nStrigiformes\nstrigil\nstrigilate\nstrigilation\nstrigilator\nstrigiles\nstrigilis\nstrigillose\nstrigilous\nStriginae\nstrigine\nstrigose\nstrigous\nstrigovite\nStrigula\nStrigulaceae\nstrigulose\nstrike\nstrikeboat\nstrikebreaker\nstrikebreaking\nstrikeless\nstriker\nstriking\nstrikingly\nstrikingness\nstrind\nstring\nstringboard\nstringcourse\nstringed\nstringency\nstringene\nstringent\nstringently\nstringentness\nstringer\nstringful\nstringhalt\nstringhalted\nstringhaltedness\nstringiness\nstringing\nstringless\nstringlike\nstringmaker\nstringmaking\nstringman\nstringpiece\nstringsman\nstringways\nstringwood\nstringy\nstringybark\nstrinkle\nstriola\nstriolae\nstriolate\nstriolated\nstriolet\nstrip\nstripe\nstriped\nstripeless\nstriper\nstriplet\nstripling\nstrippage\nstripped\nstripper\nstripping\nstrippit\nstrippler\nstript\nstripy\nstrit\nstrive\nstrived\nstriven\nstriver\nstriving\nstrivingly\nStrix\nstrix\nstroam\nstrobic\nstrobila\nstrobilaceous\nstrobilae\nstrobilate\nstrobilation\nstrobile\nstrobili\nstrobiliferous\nstrobiliform\nstrobiline\nstrobilization\nstrobiloid\nStrobilomyces\nStrobilophyta\nstrobilus\nstroboscope\nstroboscopic\nstroboscopical\nstroboscopy\nstrobotron\nstrockle\nstroddle\nstrode\nstroil\nstroke\nstroker\nstrokesman\nstroking\nstroky\nstrold\nstroll\nstrolld\nstroller\nstrom\nstroma\nstromal\nstromata\nStromateidae\nstromateoid\nstromatic\nstromatiform\nstromatology\nStromatopora\nStromatoporidae\nstromatoporoid\nStromatoporoidea\nstromatous\nstromb\nStrombidae\nstrombiform\nstrombite\nstromboid\nstrombolian\nstrombuliferous\nstrombuliform\nStrombus\nstrome\nstromeyerite\nstromming\nstrone\nstrong\nstrongback\nstrongbark\nstrongbox\nstrongbrained\nstrongfully\nstronghand\nstronghead\nstrongheadedly\nstrongheadedness\nstronghearted\nstronghold\nstrongish\nstronglike\nstrongly\nstrongness\nstrongylate\nstrongyle\nstrongyliasis\nstrongylid\nStrongylidae\nstrongylidosis\nstrongyloid\nStrongyloides\nstrongyloidosis\nstrongylon\nStrongyloplasmata\nStrongylosis\nstrongylosis\nStrongylus\nstrontia\nstrontian\nstrontianiferous\nstrontianite\nstrontic\nstrontion\nstrontitic\nstrontium\nstrook\nstrooken\nstroot\nstrop\nstrophaic\nstrophanhin\nStrophanthus\nStropharia\nstrophe\nstrophic\nstrophical\nstrophically\nstrophiolate\nstrophiolated\nstrophiole\nstrophoid\nStrophomena\nStrophomenacea\nstrophomenid\nStrophomenidae\nstrophomenoid\nstrophosis\nstrophotaxis\nstrophulus\nstropper\nstroppings\nstroth\nstroud\nstrouding\nstrounge\nstroup\nstrouthiocamel\nstrouthiocamelian\nstrouthocamelian\nstrove\nstrow\nstrowd\nstrown\nstroy\nstroyer\nstroygood\nstrub\nstrubbly\nstruck\nstrucken\nstructural\nstructuralism\nstructuralist\nstructuralization\nstructuralize\nstructurally\nstructuration\nstructure\nstructured\nstructureless\nstructurely\nstructurist\nstrudel\nstrue\nstruggle\nstruggler\nstruggling\nstrugglingly\nStruldbrug\nStruldbruggian\nStruldbruggism\nstrum\nstruma\nstrumae\nstrumatic\nstrumaticness\nstrumectomy\nStrumella\nstrumiferous\nstrumiform\nstrumiprivic\nstrumiprivous\nstrumitis\nstrummer\nstrumose\nstrumous\nstrumousness\nstrumpet\nstrumpetlike\nstrumpetry\nstrumstrum\nstrumulose\nstrung\nstrunt\nstrut\nstruth\nstruthian\nstruthiform\nStruthio\nstruthioid\nStruthiomimus\nStruthiones\nStruthionidae\nstruthioniform\nStruthioniformes\nStruthiopteris\nstruthious\nstruthonine\nstrutter\nstrutting\nstruttingly\nstruv\nstruvite\nstrych\nstrychnia\nstrychnic\nstrychnin\nstrychnine\nstrychninic\nstrychninism\nstrychninization\nstrychninize\nstrychnize\nstrychnol\nStrychnos\nStrymon\nStu\nStuart\nStuartia\nstub\nstubachite\nstubb\nstubbed\nstubbedness\nstubber\nstubbiness\nstubble\nstubbleberry\nstubbled\nstubbleward\nstubbly\nstubborn\nstubbornhearted\nstubbornly\nstubbornness\nstubboy\nstubby\nstubchen\nstuber\nstuboy\nstubrunner\nstucco\nstuccoer\nstuccowork\nstuccoworker\nstuccoyer\nstuck\nstuckling\nstucturelessness\nstud\nstudbook\nstudder\nstuddie\nstudding\nstuddle\nstude\nstudent\nstudenthood\nstudentless\nstudentlike\nstudentry\nstudentship\nstuderite\nstudfish\nstudflower\nstudhorse\nstudia\nstudiable\nstudied\nstudiedly\nstudiedness\nstudier\nstudio\nstudious\nstudiously\nstudiousness\nStudite\nStudium\nstudium\nstudwork\nstudy\nstue\nstuff\nstuffed\nstuffender\nstuffer\nstuffgownsman\nstuffily\nstuffiness\nstuffing\nstuffy\nstug\nstuggy\nstuiver\nstull\nstuller\nstulm\nstultification\nstultifier\nstultify\nstultiloquence\nstultiloquently\nstultiloquious\nstultioquy\nstultloquent\nstum\nstumble\nstumbler\nstumbling\nstumblingly\nstumbly\nstumer\nstummer\nstummy\nstump\nstumpage\nstumper\nstumpily\nstumpiness\nstumpish\nstumpless\nstumplike\nstumpling\nstumpnose\nstumpwise\nstumpy\nstun\nStundism\nStundist\nstung\nstunk\nstunkard\nstunner\nstunning\nstunningly\nstunpoll\nstunsail\nstunsle\nstunt\nstunted\nstuntedly\nstuntedness\nstunter\nstuntiness\nstuntness\nstunty\nstupa\nstupe\nstupefacient\nstupefaction\nstupefactive\nstupefactiveness\nstupefied\nstupefiedness\nstupefier\nstupefy\nstupend\nstupendly\nstupendous\nstupendously\nstupendousness\nstupent\nstupeous\nstupex\nstupid\nstupidhead\nstupidish\nstupidity\nstupidly\nstupidness\nstupor\nstuporific\nstuporose\nstuporous\nstupose\nstupp\nstuprate\nstupration\nstuprum\nstupulose\nsturdied\nsturdily\nsturdiness\nsturdy\nsturdyhearted\nsturgeon\nsturine\nSturiones\nsturionine\nsturk\nSturmian\nSturnella\nSturnidae\nsturniform\nSturninae\nsturnine\nsturnoid\nSturnus\nsturt\nsturtan\nsturtin\nsturtion\nsturtite\nstuss\nstut\nstutter\nstutterer\nstuttering\nstutteringly\nsty\nstyan\nstyca\nstyceric\nstycerin\nstycerinol\nstychomythia\nstyful\nstyfziekte\nStygial\nStygian\nstylar\nStylaster\nStylasteridae\nstylate\nstyle\nstylebook\nstyledom\nstyleless\nstylelessness\nstylelike\nstyler\nstylet\nstylewort\nStylidiaceae\nstylidiaceous\nStylidium\nstyliferous\nstyliform\nstyline\nstyling\nstylish\nstylishly\nstylishness\nstylist\nstylistic\nstylistical\nstylistically\nstylistics\nstylite\nstylitic\nstylitism\nstylization\nstylize\nstylizer\nstylo\nstyloauricularis\nstylobate\nStylochus\nstyloglossal\nstyloglossus\nstylogonidium\nstylograph\nstylographic\nstylographical\nstylographically\nstylography\nstylohyal\nstylohyoid\nstylohyoidean\nstylohyoideus\nstyloid\nstylolite\nstylolitic\nstylomandibular\nstylomastoid\nstylomaxillary\nstylometer\nStylommatophora\nstylommatophorous\nstylomyloid\nStylonurus\nStylonychia\nstylopharyngeal\nstylopharyngeus\nstylopid\nStylopidae\nstylopization\nstylopized\nstylopod\nstylopodium\nStylops\nstylops\nStylosanthes\nstylospore\nstylosporous\nstylostegium\nstylotypite\nstylus\nstymie\nStymphalian\nStymphalid\nStymphalides\nStyphelia\nstyphnate\nstyphnic\nstypsis\nstyptic\nstyptical\nstypticalness\nstypticity\nstypticness\nStyracaceae\nstyracaceous\nstyracin\nStyrax\nstyrax\nstyrene\nStyrian\nstyrogallol\nstyrol\nstyrolene\nstyrone\nstyryl\nstyrylic\nstythe\nstyward\nStyx\nStyxian\nsuability\nsuable\nsuably\nsuade\nSuaeda\nsuaharo\nSualocin\nSuanitian\nsuant\nsuantly\nsuasible\nsuasion\nsuasionist\nsuasive\nsuasively\nsuasiveness\nsuasory\nsuavastika\nsuave\nsuavely\nsuaveness\nsuaveolent\nsuavify\nsuaviloquence\nsuaviloquent\nsuavity\nsub\nsubabbot\nsubabdominal\nsubability\nsubabsolute\nsubacademic\nsubaccount\nsubacetate\nsubacid\nsubacidity\nsubacidly\nsubacidness\nsubacidulous\nsubacrid\nsubacrodrome\nsubacromial\nsubact\nsubacuminate\nsubacute\nsubacutely\nsubadditive\nsubadjacent\nsubadjutor\nsubadministrate\nsubadministration\nsubadministrator\nsubadult\nsubaduncate\nsubaerate\nsubaeration\nsubaerial\nsubaerially\nsubaetheric\nsubaffluent\nsubage\nsubagency\nsubagent\nsubaggregate\nsubah\nsubahdar\nsubahdary\nsubahship\nsubaid\nSubakhmimic\nsubalary\nsubalate\nsubalgebra\nsubalkaline\nsuballiance\nsubalmoner\nsubalpine\nsubaltern\nsubalternant\nsubalternate\nsubalternately\nsubalternating\nsubalternation\nsubalternity\nsubanal\nsubandean\nsubangled\nsubangular\nsubangulate\nsubangulated\nsubanniversary\nsubantarctic\nsubantichrist\nsubantique\nSubanun\nsubapical\nsubaponeurotic\nsubapostolic\nsubapparent\nsubappearance\nsubappressed\nsubapprobation\nsubapterous\nsubaquatic\nsubaquean\nsubaqueous\nsubarachnoid\nsubarachnoidal\nsubarachnoidean\nsubarboraceous\nsubarboreal\nsubarborescent\nsubarch\nsubarchesporial\nsubarchitect\nsubarctic\nsubarcuate\nsubarcuated\nsubarcuation\nsubarea\nsubareolar\nsubareolet\nSubarian\nsubarmor\nsubarouse\nsubarrhation\nsubartesian\nsubarticle\nsubarytenoid\nsubascending\nsubassemblage\nsubassembly\nsubassociation\nsubastragalar\nsubastragaloid\nsubastral\nsubastringent\nsubatom\nsubatomic\nsubattenuate\nsubattenuated\nsubattorney\nsubaud\nsubaudible\nsubaudition\nsubauditionist\nsubauditor\nsubauditur\nsubaural\nsubauricular\nsubautomatic\nsubaverage\nsubaxillar\nsubaxillary\nsubbailie\nsubbailiff\nsubbailiwick\nsubballast\nsubband\nsubbank\nsubbasal\nsubbasaltic\nsubbase\nsubbasement\nsubbass\nsubbeadle\nsubbeau\nsubbias\nsubbifid\nsubbing\nsubbituminous\nsubbookkeeper\nsubboreal\nsubbourdon\nsubbrachycephalic\nsubbrachycephaly\nsubbrachyskelic\nsubbranch\nsubbranched\nsubbranchial\nsubbreed\nsubbrigade\nsubbrigadier\nsubbroker\nsubbromid\nsubbromide\nsubbronchial\nsubbureau\nsubcaecal\nsubcalcareous\nsubcalcarine\nsubcaliber\nsubcallosal\nsubcampanulate\nsubcancellate\nsubcandid\nsubcantor\nsubcapsular\nsubcaptain\nsubcaption\nsubcarbide\nsubcarbonate\nSubcarboniferous\nsubcarbureted\nsubcarburetted\nsubcardinal\nsubcarinate\nsubcartilaginous\nsubcase\nsubcash\nsubcashier\nsubcasino\nsubcast\nsubcaste\nsubcategory\nsubcaudal\nsubcaudate\nsubcaulescent\nsubcause\nsubcavate\nsubcavity\nsubcelestial\nsubcell\nsubcellar\nsubcenter\nsubcentral\nsubcentrally\nsubchairman\nsubchamberer\nsubchancel\nsubchanter\nsubchapter\nsubchaser\nsubchela\nsubchelate\nsubcheliform\nsubchief\nsubchloride\nsubchondral\nsubchordal\nsubchorioid\nsubchorioidal\nsubchorionic\nsubchoroid\nsubchoroidal\nsubcinctorium\nsubcineritious\nsubcingulum\nsubcircuit\nsubcircular\nsubcision\nsubcity\nsubclaim\nSubclamatores\nsubclan\nsubclass\nsubclassify\nsubclause\nsubclavate\nsubclavia\nsubclavian\nsubclavicular\nsubclavioaxillary\nsubclaviojugular\nsubclavius\nsubclerk\nsubclimate\nsubclimax\nsubclinical\nsubclover\nsubcoastal\nsubcollateral\nsubcollector\nsubcollegiate\nsubcolumnar\nsubcommander\nsubcommendation\nsubcommended\nsubcommissary\nsubcommissaryship\nsubcommission\nsubcommissioner\nsubcommit\nsubcommittee\nsubcompany\nsubcompensate\nsubcompensation\nsubcompressed\nsubconcave\nsubconcession\nsubconcessionaire\nsubconchoidal\nsubconference\nsubconformable\nsubconical\nsubconjunctival\nsubconjunctively\nsubconnate\nsubconnect\nsubconnivent\nsubconscience\nsubconscious\nsubconsciously\nsubconsciousness\nsubconservator\nsubconsideration\nsubconstable\nsubconstellation\nsubconsul\nsubcontained\nsubcontest\nsubcontiguous\nsubcontinent\nsubcontinental\nsubcontinual\nsubcontinued\nsubcontinuous\nsubcontract\nsubcontracted\nsubcontractor\nsubcontraoctave\nsubcontrariety\nsubcontrarily\nsubcontrary\nsubcontrol\nsubconvex\nsubconvolute\nsubcool\nsubcoracoid\nsubcordate\nsubcordiform\nsubcoriaceous\nsubcorneous\nsubcorporation\nsubcortex\nsubcortical\nsubcortically\nsubcorymbose\nsubcosta\nsubcostal\nsubcostalis\nsubcouncil\nsubcranial\nsubcreative\nsubcreek\nsubcrenate\nsubcrepitant\nsubcrepitation\nsubcrescentic\nsubcrest\nsubcriminal\nsubcrossing\nsubcrureal\nsubcrureus\nsubcrust\nsubcrustaceous\nsubcrustal\nsubcrystalline\nsubcubical\nsubcuboidal\nsubcultrate\nsubcultural\nsubculture\nsubcurate\nsubcurator\nsubcuratorship\nsubcurrent\nsubcutaneous\nsubcutaneously\nsubcutaneousness\nsubcuticular\nsubcutis\nsubcyaneous\nsubcyanide\nsubcylindric\nsubcylindrical\nsubdatary\nsubdate\nsubdeacon\nsubdeaconate\nsubdeaconess\nsubdeaconry\nsubdeaconship\nsubdealer\nsubdean\nsubdeanery\nsubdeb\nsubdebutante\nsubdecanal\nsubdecimal\nsubdecuple\nsubdeducible\nsubdefinition\nsubdelegate\nsubdelegation\nsubdelirium\nsubdeltaic\nsubdeltoid\nsubdeltoidal\nsubdemonstrate\nsubdemonstration\nsubdenomination\nsubdentate\nsubdentated\nsubdented\nsubdenticulate\nsubdepartment\nsubdeposit\nsubdepository\nsubdepot\nsubdepressed\nsubdeputy\nsubderivative\nsubdermal\nsubdeterminant\nsubdevil\nsubdiaconal\nsubdiaconate\nsubdial\nsubdialect\nsubdialectal\nsubdialectally\nsubdiapason\nsubdiapente\nsubdiaphragmatic\nsubdichotomize\nsubdichotomous\nsubdichotomously\nsubdichotomy\nsubdie\nsubdilated\nsubdirector\nsubdiscoidal\nsubdisjunctive\nsubdistich\nsubdistichous\nsubdistinction\nsubdistinguish\nsubdistinguished\nsubdistrict\nsubdititious\nsubdititiously\nsubdivecious\nsubdiversify\nsubdividable\nsubdivide\nsubdivider\nsubdividing\nsubdividingly\nsubdivine\nsubdivisible\nsubdivision\nsubdivisional\nsubdivisive\nsubdoctor\nsubdolent\nsubdolichocephalic\nsubdolichocephaly\nsubdolous\nsubdolously\nsubdolousness\nsubdominant\nsubdorsal\nsubdorsally\nsubdouble\nsubdrain\nsubdrainage\nsubdrill\nsubdruid\nsubduable\nsubduableness\nsubduably\nsubdual\nsubduce\nsubduct\nsubduction\nsubdue\nsubdued\nsubduedly\nsubduedness\nsubduement\nsubduer\nsubduing\nsubduingly\nsubduple\nsubduplicate\nsubdural\nsubdurally\nsubecho\nsubectodermal\nsubedit\nsubeditor\nsubeditorial\nsubeditorship\nsubeffective\nsubelection\nsubelectron\nsubelement\nsubelementary\nsubelliptic\nsubelliptical\nsubelongate\nsubemarginate\nsubencephalon\nsubencephaltic\nsubendocardial\nsubendorse\nsubendorsement\nsubendothelial\nsubendymal\nsubenfeoff\nsubengineer\nsubentire\nsubentitle\nsubentry\nsubepidermal\nsubepiglottic\nsubepithelial\nsubepoch\nsubequal\nsubequality\nsubequally\nsubequatorial\nsubequilateral\nsubequivalve\nsuber\nsuberane\nsuberate\nsuberect\nsubereous\nsuberic\nsuberiferous\nsuberification\nsuberiform\nsuberin\nsuberinization\nsuberinize\nSuberites\nSuberitidae\nsuberization\nsuberize\nsuberone\nsuberose\nsuberous\nsubescheator\nsubesophageal\nsubessential\nsubetheric\nsubexaminer\nsubexcitation\nsubexcite\nsubexecutor\nsubexternal\nsubface\nsubfacies\nsubfactor\nsubfactorial\nsubfactory\nsubfalcate\nsubfalcial\nsubfalciform\nsubfamily\nsubfascial\nsubfastigiate\nsubfebrile\nsubferryman\nsubfestive\nsubfeu\nsubfeudation\nsubfeudatory\nsubfibrous\nsubfief\nsubfigure\nsubfissure\nsubfix\nsubflavor\nsubflexuose\nsubfloor\nsubflooring\nsubflora\nsubflush\nsubfluvial\nsubfocal\nsubfoliar\nsubforeman\nsubform\nsubformation\nsubfossil\nsubfossorial\nsubfoundation\nsubfraction\nsubframe\nsubfreshman\nsubfrontal\nsubfulgent\nsubfumigation\nsubfumose\nsubfunctional\nsubfusc\nsubfuscous\nsubfusiform\nsubfusk\nsubgalea\nsubgallate\nsubganger\nsubgape\nsubgelatinous\nsubgeneric\nsubgenerical\nsubgenerically\nsubgeniculate\nsubgenital\nsubgens\nsubgenual\nsubgenus\nsubgeometric\nsubget\nsubgit\nsubglabrous\nsubglacial\nsubglacially\nsubglenoid\nsubglobose\nsubglobosely\nsubglobular\nsubglobulose\nsubglossal\nsubglossitis\nsubglottic\nsubglumaceous\nsubgod\nsubgoverness\nsubgovernor\nsubgrade\nsubgranular\nsubgrin\nsubgroup\nsubgular\nsubgwely\nsubgyre\nsubgyrus\nsubhalid\nsubhalide\nsubhall\nsubharmonic\nsubhastation\nsubhatchery\nsubhead\nsubheading\nsubheadquarters\nsubheadwaiter\nsubhealth\nsubhedral\nsubhemispherical\nsubhepatic\nsubherd\nsubhero\nsubhexagonal\nsubhirsute\nsubhooked\nsubhorizontal\nsubhornblendic\nsubhouse\nsubhuman\nsubhumid\nsubhyaline\nsubhyaloid\nsubhymenial\nsubhymenium\nsubhyoid\nsubhyoidean\nsubhypothesis\nsubhysteria\nsubicle\nsubicteric\nsubicular\nsubiculum\nsubidar\nsubidea\nsubideal\nsubimaginal\nsubimago\nsubimbricate\nsubimbricated\nsubimposed\nsubimpressed\nsubincandescent\nsubincident\nsubincise\nsubincision\nsubincomplete\nsubindex\nsubindicate\nsubindication\nsubindicative\nsubindices\nsubindividual\nsubinduce\nsubinfer\nsubinfeud\nsubinfeudate\nsubinfeudation\nsubinfeudatory\nsubinflammation\nsubinflammatory\nsubinform\nsubingression\nsubinguinal\nsubinitial\nsubinoculate\nsubinoculation\nsubinsert\nsubinsertion\nsubinspector\nsubinspectorship\nsubintegumental\nsubintellection\nsubintelligential\nsubintelligitur\nsubintent\nsubintention\nsubintercessor\nsubinternal\nsubinterval\nsubintestinal\nsubintroduce\nsubintroduction\nsubintroductory\nsubinvoluted\nsubinvolution\nsubiodide\nsubirrigate\nsubirrigation\nsubitane\nsubitaneous\nsubitem\nSubiya\nsubjacency\nsubjacent\nsubjacently\nsubjack\nsubject\nsubjectability\nsubjectable\nsubjectdom\nsubjected\nsubjectedly\nsubjectedness\nsubjecthood\nsubjectibility\nsubjectible\nsubjectification\nsubjectify\nsubjectile\nsubjection\nsubjectional\nsubjectist\nsubjective\nsubjectively\nsubjectiveness\nsubjectivism\nsubjectivist\nsubjectivistic\nsubjectivistically\nsubjectivity\nsubjectivize\nsubjectivoidealistic\nsubjectless\nsubjectlike\nsubjectness\nsubjectship\nsubjee\nsubjicible\nsubjoin\nsubjoinder\nsubjoint\nsubjudge\nsubjudiciary\nsubjugable\nsubjugal\nsubjugate\nsubjugation\nsubjugator\nsubjugular\nsubjunct\nsubjunction\nsubjunctive\nsubjunctively\nsubjunior\nsubking\nsubkingdom\nsublabial\nsublaciniate\nsublacustrine\nsublanate\nsublanceolate\nsublanguage\nsublapsarian\nsublapsarianism\nsublapsary\nsublaryngeal\nsublate\nsublateral\nsublation\nsublative\nsubleader\nsublease\nsublecturer\nsublegislation\nsublegislature\nsublenticular\nsublessee\nsublessor\nsublet\nsublethal\nsublettable\nsubletter\nsublevaminous\nsublevate\nsublevation\nsublevel\nsublibrarian\nsublicense\nsublicensee\nsublid\nsublieutenancy\nsublieutenant\nsubligation\nsublighted\nsublimable\nsublimableness\nsublimant\nsublimate\nsublimation\nsublimational\nsublimationist\nsublimator\nsublimatory\nsublime\nsublimed\nsublimely\nsublimeness\nsublimer\nsubliminal\nsubliminally\nsublimish\nsublimitation\nsublimity\nsublimize\nsublinear\nsublineation\nsublingua\nsublinguae\nsublingual\nsublinguate\nsublittoral\nsublobular\nsublong\nsubloral\nsubloreal\nsublot\nsublumbar\nsublunar\nsublunary\nsublunate\nsublustrous\nsubluxate\nsubluxation\nsubmaid\nsubmain\nsubmakroskelic\nsubmammary\nsubman\nsubmanager\nsubmania\nsubmanic\nsubmanor\nsubmarginal\nsubmarginally\nsubmarginate\nsubmargined\nsubmarine\nsubmariner\nsubmarinism\nsubmarinist\nsubmarshal\nsubmaster\nsubmaxilla\nsubmaxillary\nsubmaximal\nsubmeaning\nsubmedial\nsubmedian\nsubmediant\nsubmediation\nsubmediocre\nsubmeeting\nsubmember\nsubmembranaceous\nsubmembranous\nsubmeningeal\nsubmental\nsubmentum\nsubmerge\nsubmerged\nsubmergement\nsubmergence\nsubmergibility\nsubmergible\nsubmerse\nsubmersed\nsubmersibility\nsubmersible\nsubmersion\nsubmetallic\nsubmeter\nsubmetering\nsubmicron\nsubmicroscopic\nsubmicroscopically\nsubmiliary\nsubmind\nsubminimal\nsubminister\nsubmiss\nsubmissible\nsubmission\nsubmissionist\nsubmissive\nsubmissively\nsubmissiveness\nsubmissly\nsubmissness\nsubmit\nsubmittal\nsubmittance\nsubmitter\nsubmittingly\nsubmolecule\nsubmonition\nsubmontagne\nsubmontane\nsubmontanely\nsubmontaneous\nsubmorphous\nsubmortgage\nsubmotive\nsubmountain\nsubmucosa\nsubmucosal\nsubmucous\nsubmucronate\nsubmultiple\nsubmundane\nsubmuriate\nsubmuscular\nSubmytilacea\nsubnarcotic\nsubnasal\nsubnascent\nsubnatural\nsubnect\nsubnervian\nsubness\nsubneural\nsubnex\nsubnitrate\nsubnitrated\nsubniveal\nsubnivean\nsubnormal\nsubnormality\nsubnotation\nsubnote\nsubnotochordal\nsubnubilar\nsubnucleus\nsubnude\nsubnumber\nsubnuvolar\nsuboblique\nsubobscure\nsubobscurely\nsubobtuse\nsuboccipital\nsubocean\nsuboceanic\nsuboctave\nsuboctile\nsuboctuple\nsubocular\nsuboesophageal\nsuboffice\nsubofficer\nsubofficial\nsubolive\nsubopaque\nsubopercle\nsubopercular\nsuboperculum\nsubopposite\nsuboptic\nsuboptimal\nsuboptimum\nsuboral\nsuborbicular\nsuborbiculate\nsuborbiculated\nsuborbital\nsuborbitar\nsuborbitary\nsubordain\nsuborder\nsubordinacy\nsubordinal\nsubordinary\nsubordinate\nsubordinately\nsubordinateness\nsubordinating\nsubordinatingly\nsubordination\nsubordinationism\nsubordinationist\nsubordinative\nsuborganic\nsuborn\nsubornation\nsubornative\nsuborner\nSuboscines\nsuboval\nsubovate\nsubovated\nsuboverseer\nsubovoid\nsuboxidation\nsuboxide\nsubpackage\nsubpagoda\nsubpallial\nsubpalmate\nsubpanel\nsubparagraph\nsubparallel\nsubpart\nsubpartition\nsubpartitioned\nsubpartitionment\nsubparty\nsubpass\nsubpassage\nsubpastor\nsubpatron\nsubpattern\nsubpavement\nsubpectinate\nsubpectoral\nsubpeduncle\nsubpeduncular\nsubpedunculate\nsubpellucid\nsubpeltate\nsubpeltated\nsubpentagonal\nsubpentangular\nsubpericardial\nsubperiod\nsubperiosteal\nsubperiosteally\nsubperitoneal\nsubperitoneally\nsubpermanent\nsubpermanently\nsubperpendicular\nsubpetiolar\nsubpetiolate\nsubpharyngeal\nsubphosphate\nsubphratry\nsubphrenic\nsubphylar\nsubphylum\nsubpial\nsubpilose\nsubpimp\nsubpiston\nsubplacenta\nsubplant\nsubplantigrade\nsubplat\nsubpleural\nsubplinth\nsubplot\nsubplow\nsubpodophyllous\nsubpoena\nsubpoenal\nsubpolar\nsubpolygonal\nsubpool\nsubpopular\nsubpopulation\nsubporphyritic\nsubport\nsubpostmaster\nsubpostmastership\nsubpostscript\nsubpotency\nsubpotent\nsubpreceptor\nsubpreceptorial\nsubpredicate\nsubpredication\nsubprefect\nsubprefectorial\nsubprefecture\nsubprehensile\nsubpress\nsubprimary\nsubprincipal\nsubprior\nsubprioress\nsubproblem\nsubproctor\nsubproduct\nsubprofessional\nsubprofessor\nsubprofessoriate\nsubprofitable\nsubproportional\nsubprotector\nsubprovince\nsubprovincial\nsubpubescent\nsubpubic\nsubpulmonary\nsubpulverizer\nsubpunch\nsubpunctuation\nsubpurchaser\nsubpurlin\nsubputation\nsubpyramidal\nsubpyriform\nsubquadrangular\nsubquadrate\nsubquality\nsubquestion\nsubquinquefid\nsubquintuple\nSubra\nsubrace\nsubradial\nsubradiance\nsubradiate\nsubradical\nsubradius\nsubradular\nsubrailway\nsubrameal\nsubramose\nsubramous\nsubrange\nsubrational\nsubreader\nsubreason\nsubrebellion\nsubrectangular\nsubrector\nsubreference\nsubregent\nsubregion\nsubregional\nsubregular\nsubreguli\nsubregulus\nsubrelation\nsubreligion\nsubreniform\nsubrent\nsubrepand\nsubrepent\nsubreport\nsubreptary\nsubreption\nsubreptitious\nsubreputable\nsubresin\nsubretinal\nsubrhombic\nsubrhomboid\nsubrhomboidal\nsubrictal\nsubrident\nsubridently\nsubrigid\nsubrision\nsubrisive\nsubrisory\nsubrogate\nsubrogation\nsubroot\nsubrostral\nsubround\nsubrule\nsubruler\nsubsacral\nsubsale\nsubsaline\nsubsalt\nsubsample\nsubsartorial\nsubsatiric\nsubsatirical\nsubsaturated\nsubsaturation\nsubscapular\nsubscapularis\nsubscapulary\nsubschedule\nsubscheme\nsubschool\nsubscience\nsubscleral\nsubsclerotic\nsubscribable\nsubscribe\nsubscriber\nsubscribership\nsubscript\nsubscription\nsubscriptionist\nsubscriptive\nsubscriptively\nsubscripture\nsubscrive\nsubscriver\nsubsea\nsubsecive\nsubsecretarial\nsubsecretary\nsubsect\nsubsection\nsubsecurity\nsubsecute\nsubsecutive\nsubsegment\nsubsemifusa\nsubsemitone\nsubsensation\nsubsensible\nsubsensual\nsubsensuous\nsubsept\nsubseptuple\nsubsequence\nsubsequency\nsubsequent\nsubsequential\nsubsequentially\nsubsequently\nsubsequentness\nsubseries\nsubserosa\nsubserous\nsubserrate\nsubserve\nsubserviate\nsubservience\nsubserviency\nsubservient\nsubserviently\nsubservientness\nsubsessile\nsubset\nsubsewer\nsubsextuple\nsubshaft\nsubsheriff\nsubshire\nsubshrub\nsubshrubby\nsubside\nsubsidence\nsubsidency\nsubsident\nsubsider\nsubsidiarie\nsubsidiarily\nsubsidiariness\nsubsidiary\nsubsiding\nsubsidist\nsubsidizable\nsubsidization\nsubsidize\nsubsidizer\nsubsidy\nsubsilicate\nsubsilicic\nsubsill\nsubsimilation\nsubsimious\nsubsimple\nsubsinuous\nsubsist\nsubsistence\nsubsistency\nsubsistent\nsubsistential\nsubsistingly\nsubsizar\nsubsizarship\nsubsmile\nsubsneer\nsubsocial\nsubsoil\nsubsoiler\nsubsolar\nsubsolid\nsubsonic\nsubsorter\nsubsovereign\nsubspace\nsubspatulate\nsubspecialist\nsubspecialize\nsubspecialty\nsubspecies\nsubspecific\nsubspecifically\nsubsphenoidal\nsubsphere\nsubspherical\nsubspherically\nsubspinous\nsubspiral\nsubspontaneous\nsubsquadron\nsubstage\nsubstalagmite\nsubstalagmitic\nsubstance\nsubstanceless\nsubstanch\nsubstandard\nsubstandardize\nsubstant\nsubstantiability\nsubstantial\nsubstantialia\nsubstantialism\nsubstantialist\nsubstantiality\nsubstantialize\nsubstantially\nsubstantialness\nsubstantiate\nsubstantiation\nsubstantiative\nsubstantiator\nsubstantify\nsubstantious\nsubstantival\nsubstantivally\nsubstantive\nsubstantively\nsubstantiveness\nsubstantivity\nsubstantivize\nsubstantize\nsubstation\nsubsternal\nsubstituent\nsubstitutable\nsubstitute\nsubstituted\nsubstituter\nsubstituting\nsubstitutingly\nsubstitution\nsubstitutional\nsubstitutionally\nsubstitutionary\nsubstitutive\nsubstitutively\nsubstock\nsubstoreroom\nsubstory\nsubstract\nsubstraction\nsubstratal\nsubstrate\nsubstrati\nsubstrative\nsubstrator\nsubstratose\nsubstratosphere\nsubstratospheric\nsubstratum\nsubstriate\nsubstruct\nsubstruction\nsubstructional\nsubstructural\nsubstructure\nsubstylar\nsubstyle\nsubsulfid\nsubsulfide\nsubsulphate\nsubsulphid\nsubsulphide\nsubsult\nsubsultive\nsubsultorily\nsubsultorious\nsubsultory\nsubsultus\nsubsumable\nsubsume\nsubsumption\nsubsumptive\nsubsuperficial\nsubsurety\nsubsurface\nsubsyndicate\nsubsynod\nsubsynodical\nsubsystem\nsubtack\nsubtacksman\nsubtangent\nsubtarget\nsubtartarean\nsubtectal\nsubtegminal\nsubtegulaneous\nsubtemperate\nsubtenancy\nsubtenant\nsubtend\nsubtense\nsubtenure\nsubtepid\nsubteraqueous\nsubterbrutish\nsubtercelestial\nsubterconscious\nsubtercutaneous\nsubterethereal\nsubterfluent\nsubterfluous\nsubterfuge\nsubterhuman\nsubterjacent\nsubtermarine\nsubterminal\nsubternatural\nsubterpose\nsubterposition\nsubterrane\nsubterraneal\nsubterranean\nsubterraneanize\nsubterraneanly\nsubterraneous\nsubterraneously\nsubterraneousness\nsubterranity\nsubterraqueous\nsubterrene\nsubterrestrial\nsubterritorial\nsubterritory\nsubtersensual\nsubtersensuous\nsubtersuperlative\nsubtersurface\nsubtertian\nsubtext\nsubthalamic\nsubthalamus\nsubthoracic\nsubthrill\nsubtile\nsubtilely\nsubtileness\nsubtilin\nsubtilism\nsubtilist\nsubtility\nsubtilization\nsubtilize\nsubtilizer\nsubtill\nsubtillage\nsubtilty\nsubtitle\nsubtitular\nsubtle\nsubtleness\nsubtlety\nsubtlist\nsubtly\nsubtone\nsubtonic\nsubtorrid\nsubtotal\nsubtotem\nsubtower\nsubtract\nsubtracter\nsubtraction\nsubtractive\nsubtrahend\nsubtranslucent\nsubtransparent\nsubtransverse\nsubtrapezoidal\nsubtread\nsubtreasurer\nsubtreasurership\nsubtreasury\nsubtrench\nsubtriangular\nsubtriangulate\nsubtribal\nsubtribe\nsubtribual\nsubtrifid\nsubtrigonal\nsubtrihedral\nsubtriplicate\nsubtriplicated\nsubtriquetrous\nsubtrist\nsubtrochanteric\nsubtrochlear\nsubtropic\nsubtropical\nsubtropics\nsubtrousers\nsubtrude\nsubtruncate\nsubtrunk\nsubtuberant\nsubtunic\nsubtunnel\nsubturbary\nsubturriculate\nsubturriculated\nsubtutor\nsubtwined\nsubtype\nsubtypical\nsubulate\nsubulated\nsubulicorn\nSubulicornia\nsubuliform\nsubultimate\nsubumbellate\nsubumbonal\nsubumbral\nsubumbrella\nsubumbrellar\nsubuncinate\nsubunequal\nsubungual\nsubunguial\nSubungulata\nsubungulate\nsubunit\nsubuniverse\nsuburb\nsuburban\nsuburbandom\nsuburbanhood\nsuburbanism\nsuburbanite\nsuburbanity\nsuburbanization\nsuburbanize\nsuburbanly\nsuburbed\nsuburbia\nsuburbican\nsuburbicarian\nsuburbicary\nsuburethral\nsubursine\nsubvaginal\nsubvaluation\nsubvarietal\nsubvariety\nsubvassal\nsubvassalage\nsubvein\nsubvendee\nsubvene\nsubvention\nsubventionary\nsubventioned\nsubventionize\nsubventitious\nsubventive\nsubventral\nsubventricose\nsubvermiform\nsubversal\nsubverse\nsubversed\nsubversion\nsubversionary\nsubversive\nsubversivism\nsubvert\nsubvertebral\nsubverter\nsubvertible\nsubvertical\nsubverticillate\nsubvesicular\nsubvestment\nsubvicar\nsubvicarship\nsubvillain\nsubvirate\nsubvirile\nsubvisible\nsubvitalized\nsubvitreous\nsubvocal\nsubvola\nsubwarden\nsubwater\nsubway\nsubwealthy\nsubweight\nsubwink\nsubworker\nsubworkman\nsubzonal\nsubzone\nsubzygomatic\nsuccade\nsuccedanea\nsuccedaneous\nsuccedaneum\nsuccedent\nsucceed\nsucceedable\nsucceeder\nsucceeding\nsucceedingly\nsuccent\nsuccentor\nsuccenturiate\nsuccenturiation\nsuccess\nsuccessful\nsuccessfully\nsuccessfulness\nsuccession\nsuccessional\nsuccessionally\nsuccessionist\nsuccessionless\nsuccessive\nsuccessively\nsuccessiveness\nsuccessivity\nsuccessless\nsuccesslessly\nsuccesslessness\nsuccessor\nsuccessoral\nsuccessorship\nsuccessory\nsucci\nsuccin\nsuccinamate\nsuccinamic\nsuccinamide\nsuccinanil\nsuccinate\nsuccinct\nsuccinctly\nsuccinctness\nsuccinctorium\nsuccinctory\nsuccincture\nsuccinic\nsucciniferous\nsuccinimide\nsuccinite\nsuccinoresinol\nsuccinosulphuric\nsuccinous\nsuccinyl\nSuccisa\nsuccise\nsuccivorous\nsuccor\nsuccorable\nsuccorer\nsuccorful\nsuccorless\nsuccorrhea\nsuccory\nsuccotash\nsuccourful\nsuccourless\nsuccous\nsuccub\nsuccuba\nsuccubae\nsuccube\nsuccubine\nsuccubous\nsuccubus\nsuccula\nsucculence\nsucculency\nsucculent\nsucculently\nsucculentness\nsucculous\nsuccumb\nsuccumbence\nsuccumbency\nsuccumbent\nsuccumber\nsuccursal\nsuccuss\nsuccussation\nsuccussatory\nsuccussion\nsuccussive\nsuch\nsuchlike\nsuchness\nSuchos\nsuchwise\nsucivilized\nsuck\nsuckable\nsuckabob\nsuckage\nsuckauhock\nsucken\nsuckener\nsucker\nsuckerel\nsuckerfish\nsuckerlike\nsuckfish\nsuckhole\nsucking\nsuckle\nsuckler\nsuckless\nsuckling\nsuckstone\nsuclat\nsucramine\nsucrate\nsucre\nsucroacid\nsucrose\nsuction\nsuctional\nSuctoria\nsuctorial\nsuctorian\nsuctorious\nsucupira\nsucuri\nsucuriu\nsucuruju\nsud\nsudadero\nsudamen\nsudamina\nsudaminal\nSudan\nSudanese\nSudani\nSudanian\nSudanic\nsudarium\nsudary\nsudate\nsudation\nsudatorium\nsudatory\nSudburian\nsudburite\nsudd\nsudden\nsuddenly\nsuddenness\nsuddenty\nSudder\nsudder\nsuddle\nsuddy\nSudic\nsudiform\nsudoral\nsudoresis\nsudoric\nsudoriferous\nsudoriferousness\nsudorific\nsudoriparous\nsudorous\nSudra\nsuds\nsudsman\nsudsy\nSue\nsue\nSuecism\nsuede\nsuer\nSuerre\nSuessiones\nsuet\nsuety\nSueve\nSuevi\nSuevian\nSuevic\nSufeism\nsuff\nsuffect\nsuffection\nsuffer\nsufferable\nsufferableness\nsufferably\nsufferance\nsufferer\nsuffering\nsufferingly\nsuffete\nsuffice\nsufficeable\nsufficer\nsufficiency\nsufficient\nsufficiently\nsufficientness\nsufficing\nsufficingly\nsufficingness\nsuffiction\nsuffix\nsuffixal\nsuffixation\nsuffixion\nsuffixment\nsufflaminate\nsufflamination\nsufflate\nsufflation\nsufflue\nsuffocate\nsuffocating\nsuffocatingly\nsuffocation\nsuffocative\nSuffolk\nsuffragan\nsuffraganal\nsuffraganate\nsuffragancy\nsuffraganeous\nsuffragatory\nsuffrage\nsuffragette\nsuffragettism\nsuffragial\nsuffragism\nsuffragist\nsuffragistic\nsuffragistically\nsuffragitis\nsuffrago\nsuffrutescent\nsuffrutex\nsuffruticose\nsuffruticous\nsuffruticulose\nsuffumigate\nsuffumigation\nsuffusable\nsuffuse\nsuffused\nsuffusedly\nsuffusion\nsuffusive\nSufi\nSufiism\nSufiistic\nSufism\nSufistic\nsugamo\nsugan\nsugar\nsugarberry\nsugarbird\nsugarbush\nsugared\nsugarelly\nsugarer\nsugarhouse\nsugariness\nsugarless\nsugarlike\nsugarplum\nsugarsweet\nsugarworks\nsugary\nsugent\nsugescent\nsuggest\nsuggestable\nsuggestedness\nsuggester\nsuggestibility\nsuggestible\nsuggestibleness\nsuggestibly\nsuggesting\nsuggestingly\nsuggestion\nsuggestionability\nsuggestionable\nsuggestionism\nsuggestionist\nsuggestionize\nsuggestive\nsuggestively\nsuggestiveness\nsuggestivity\nsuggestment\nsuggestress\nsuggestum\nsuggillate\nsuggillation\nsugh\nsugi\nSugih\nsuguaro\nsuhuaro\nSui\nsuicidal\nsuicidalism\nsuicidally\nsuicidalwise\nsuicide\nsuicidical\nsuicidism\nsuicidist\nsuid\nSuidae\nsuidian\nsuiform\nsuilline\nsuimate\nSuina\nsuine\nsuing\nsuingly\nsuint\nSuiogoth\nSuiogothic\nSuiones\nsuisimilar\nsuist\nsuit\nsuitability\nsuitable\nsuitableness\nsuitably\nsuitcase\nsuite\nsuithold\nsuiting\nsuitor\nsuitoress\nsuitorship\nsuity\nsuji\nSuk\nSukey\nsukiyaki\nsukkenye\nSuku\nSula\nSulaba\nSulafat\nSulaib\nsulbasutra\nsulcal\nsulcalization\nsulcalize\nsulcar\nsulcate\nsulcated\nsulcation\nsulcatoareolate\nsulcatocostate\nsulcatorimose\nsulciform\nsulcomarginal\nsulcular\nsulculate\nsulculus\nsulcus\nsuld\nsulea\nsulfa\nsulfacid\nsulfadiazine\nsulfaguanidine\nsulfamate\nsulfamerazin\nsulfamerazine\nsulfamethazine\nsulfamethylthiazole\nsulfamic\nsulfamidate\nsulfamide\nsulfamidic\nsulfamine\nsulfaminic\nsulfamyl\nsulfanilamide\nsulfanilic\nsulfanilylguanidine\nsulfantimonide\nsulfapyrazine\nsulfapyridine\nsulfaquinoxaline\nsulfarsenide\nsulfarsenite\nsulfarseniuret\nsulfarsphenamine\nSulfasuxidine\nsulfatase\nsulfathiazole\nsulfatic\nsulfatize\nsulfato\nsulfazide\nsulfhydrate\nsulfhydric\nsulfhydryl\nsulfindigotate\nsulfindigotic\nsulfindylic\nsulfion\nsulfionide\nsulfoacid\nsulfoamide\nsulfobenzide\nsulfobenzoate\nsulfobenzoic\nsulfobismuthite\nsulfoborite\nsulfocarbamide\nsulfocarbimide\nsulfocarbolate\nsulfocarbolic\nsulfochloride\nsulfocyan\nsulfocyanide\nsulfofication\nsulfogermanate\nsulfohalite\nsulfohydrate\nsulfoindigotate\nsulfoleic\nsulfolysis\nsulfomethylic\nsulfonamic\nsulfonamide\nsulfonate\nsulfonation\nsulfonator\nsulfonephthalein\nsulfonethylmethane\nsulfonic\nsulfonium\nsulfonmethane\nsulfonyl\nsulfophthalein\nsulfopurpurate\nsulfopurpuric\nsulforicinate\nsulforicinic\nsulforicinoleate\nsulforicinoleic\nsulfoselenide\nsulfosilicide\nsulfostannide\nsulfotelluride\nsulfourea\nsulfovinate\nsulfovinic\nsulfowolframic\nsulfoxide\nsulfoxism\nsulfoxylate\nsulfoxylic\nsulfurage\nsulfuran\nsulfurate\nsulfuration\nsulfurator\nsulfurea\nsulfureous\nsulfureously\nsulfureousness\nsulfuret\nsulfuric\nsulfurization\nsulfurize\nsulfurosyl\nsulfurous\nsulfury\nsulfuryl\nSulidae\nSulides\nSuliote\nsulk\nsulka\nsulker\nsulkily\nsulkiness\nsulky\nsulkylike\nsull\nsulla\nsullage\nSullan\nsullen\nsullenhearted\nsullenly\nsullenness\nsulliable\nsullow\nsully\nsulpha\nsulphacid\nsulphaldehyde\nsulphamate\nsulphamic\nsulphamidate\nsulphamide\nsulphamidic\nsulphamine\nsulphaminic\nsulphamino\nsulphammonium\nsulphamyl\nsulphanilate\nsulphanilic\nsulphantimonate\nsulphantimonial\nsulphantimonic\nsulphantimonide\nsulphantimonious\nsulphantimonite\nsulpharsenate\nsulpharseniate\nsulpharsenic\nsulpharsenide\nsulpharsenious\nsulpharsenite\nsulpharseniuret\nsulpharsphenamine\nsulphatase\nsulphate\nsulphated\nsulphatic\nsulphation\nsulphatization\nsulphatize\nsulphato\nsulphatoacetic\nsulphatocarbonic\nsulphazide\nsulphazotize\nsulphbismuthite\nsulphethylate\nsulphethylic\nsulphhemoglobin\nsulphichthyolate\nsulphidation\nsulphide\nsulphidic\nsulphidize\nsulphimide\nsulphinate\nsulphindigotate\nsulphine\nsulphinic\nsulphinide\nsulphinyl\nsulphitation\nsulphite\nsulphitic\nsulphmethemoglobin\nsulpho\nsulphoacetic\nsulphoamid\nsulphoamide\nsulphoantimonate\nsulphoantimonic\nsulphoantimonious\nsulphoantimonite\nsulphoarsenic\nsulphoarsenious\nsulphoarsenite\nsulphoazotize\nsulphobenzide\nsulphobenzoate\nsulphobenzoic\nsulphobismuthite\nsulphoborite\nsulphobutyric\nsulphocarbamic\nsulphocarbamide\nsulphocarbanilide\nsulphocarbimide\nsulphocarbolate\nsulphocarbolic\nsulphocarbonate\nsulphocarbonic\nsulphochloride\nsulphochromic\nsulphocinnamic\nsulphocyan\nsulphocyanate\nsulphocyanic\nsulphocyanide\nsulphocyanogen\nsulphodichloramine\nsulphofication\nsulphofy\nsulphogallic\nsulphogel\nsulphogermanate\nsulphogermanic\nsulphohalite\nsulphohaloid\nsulphohydrate\nsulphoichthyolate\nsulphoichthyolic\nsulphoindigotate\nsulphoindigotic\nsulpholeate\nsulpholeic\nsulpholipin\nsulpholysis\nsulphonal\nsulphonalism\nsulphonamic\nsulphonamide\nsulphonamido\nsulphonamine\nsulphonaphthoic\nsulphonate\nsulphonated\nsulphonation\nsulphonator\nsulphoncyanine\nsulphone\nsulphonephthalein\nsulphonethylmethane\nsulphonic\nsulphonium\nsulphonmethane\nsulphonphthalein\nsulphonyl\nsulphoparaldehyde\nsulphophosphate\nsulphophosphite\nsulphophosphoric\nsulphophosphorous\nsulphophthalein\nsulphophthalic\nsulphopropionic\nsulphoproteid\nsulphopupuric\nsulphopurpurate\nsulphoricinate\nsulphoricinic\nsulphoricinoleate\nsulphoricinoleic\nsulphosalicylic\nsulphoselenide\nsulphoselenium\nsulphosilicide\nsulphosol\nsulphostannate\nsulphostannic\nsulphostannide\nsulphostannite\nsulphostannous\nsulphosuccinic\nsulphosulphurous\nsulphotannic\nsulphotelluride\nsulphoterephthalic\nsulphothionyl\nsulphotoluic\nsulphotungstate\nsulphotungstic\nsulphourea\nsulphovanadate\nsulphovinate\nsulphovinic\nsulphowolframic\nsulphoxide\nsulphoxism\nsulphoxylate\nsulphoxylic\nsulphoxyphosphate\nsulphozincate\nsulphur\nsulphurage\nsulphuran\nsulphurate\nsulphuration\nsulphurator\nsulphurea\nsulphurean\nsulphureity\nsulphureonitrous\nsulphureosaline\nsulphureosuffused\nsulphureous\nsulphureously\nsulphureousness\nsulphureovirescent\nsulphuret\nsulphureted\nsulphuric\nsulphuriferous\nsulphurity\nsulphurization\nsulphurize\nsulphurless\nsulphurlike\nsulphurosyl\nsulphurous\nsulphurously\nsulphurousness\nsulphurproof\nsulphurweed\nsulphurwort\nsulphury\nsulphuryl\nsulphydrate\nsulphydric\nsulphydryl\nSulpician\nsultam\nsultan\nsultana\nsultanaship\nsultanate\nsultane\nsultanesque\nsultaness\nsultanian\nsultanic\nsultanin\nsultanism\nsultanist\nsultanize\nsultanlike\nsultanry\nsultanship\nsultone\nsultrily\nsultriness\nsultry\nSulu\nSuluan\nsulung\nsulvanite\nsulvasutra\nsum\nsumac\nSumak\nSumass\nSumatra\nsumatra\nSumatran\nsumbul\nsumbulic\nSumdum\nSumerian\nSumerology\nSumitro\nsumless\nsumlessness\nsummability\nsummable\nsummage\nsummand\nsummar\nsummarily\nsummariness\nsummarist\nsummarization\nsummarize\nsummarizer\nsummary\nsummate\nsummation\nsummational\nsummative\nsummatory\nsummed\nsummer\nsummerbird\nsummercastle\nsummerer\nsummerhead\nsummeriness\nsummering\nsummerings\nsummerish\nsummerite\nsummerize\nsummerland\nsummerlay\nsummerless\nsummerlike\nsummerliness\nsummerling\nsummerly\nsummerproof\nsummertide\nsummertime\nsummertree\nsummerward\nsummerwood\nsummery\nsummist\nsummit\nsummital\nsummitless\nsummity\nsummon\nsummonable\nsummoner\nsummoningly\nsummons\nsummula\nsummulist\nsummut\nsumner\nSumo\nsump\nsumpage\nsumper\nsumph\nsumphish\nsumphishly\nsumphishness\nsumphy\nsumpit\nsumpitan\nsumple\nsumpman\nsumpsimus\nsumpter\nsumption\nsumptuary\nsumptuosity\nsumptuous\nsumptuously\nsumptuousness\nsun\nsunbeam\nsunbeamed\nsunbeamy\nsunberry\nsunbird\nsunblink\nsunbonnet\nsunbonneted\nsunbow\nsunbreak\nsunburn\nsunburned\nsunburnedness\nsunburnproof\nsunburnt\nsunburntness\nsunburst\nsuncherchor\nsuncup\nsundae\nSundanese\nSundanesian\nsundang\nSundar\nSundaresan\nsundari\nSunday\nSundayfied\nSundayish\nSundayism\nSundaylike\nSundayness\nSundayproof\nsundek\nsunder\nsunderable\nsunderance\nsunderer\nsunderment\nsunderwise\nsundew\nsundial\nsundik\nsundog\nsundown\nsundowner\nsundowning\nsundra\nsundri\nsundries\nsundriesman\nsundrily\nsundriness\nsundrops\nsundry\nsundryman\nsune\nsunfall\nsunfast\nsunfish\nsunfisher\nsunfishery\nsunflower\nSung\nsung\nsungha\nsunglade\nsunglass\nsunglo\nsunglow\nSunil\nsunk\nsunken\nsunket\nsunkland\nsunlamp\nsunland\nsunless\nsunlessly\nsunlessness\nsunlet\nsunlight\nsunlighted\nsunlike\nsunlit\nsunn\nSunna\nSunni\nSunniah\nsunnily\nsunniness\nSunnism\nSunnite\nsunnud\nsunny\nsunnyhearted\nsunnyheartedness\nsunproof\nsunquake\nsunray\nsunrise\nsunrising\nsunroom\nsunscald\nsunset\nsunsetting\nsunsetty\nsunshade\nsunshine\nsunshineless\nsunshining\nsunshiny\nsunsmit\nsunsmitten\nsunspot\nsunspotted\nsunspottedness\nsunspottery\nsunspotty\nsunsquall\nsunstone\nsunstricken\nsunstroke\nsunt\nsunup\nsunward\nsunwards\nsunway\nsunways\nsunweed\nsunwise\nsunyie\nSuomi\nSuomic\nsuovetaurilia\nsup\nsupa\nSupai\nsupari\nsupawn\nsupe\nsupellex\nsuper\nsuperabduction\nsuperabhor\nsuperability\nsuperable\nsuperableness\nsuperably\nsuperabnormal\nsuperabominable\nsuperabomination\nsuperabound\nsuperabstract\nsuperabsurd\nsuperabundance\nsuperabundancy\nsuperabundant\nsuperabundantly\nsuperaccession\nsuperaccessory\nsuperaccommodating\nsuperaccomplished\nsuperaccrue\nsuperaccumulate\nsuperaccumulation\nsuperaccurate\nsuperacetate\nsuperachievement\nsuperacid\nsuperacidulated\nsuperacknowledgment\nsuperacquisition\nsuperacromial\nsuperactive\nsuperactivity\nsuperacute\nsuperadaptable\nsuperadd\nsuperaddition\nsuperadditional\nsuperadequate\nsuperadequately\nsuperadjacent\nsuperadministration\nsuperadmirable\nsuperadmiration\nsuperadorn\nsuperadornment\nsuperaerial\nsuperaesthetical\nsuperaffiliation\nsuperaffiuence\nsuperagency\nsuperaggravation\nsuperagitation\nsuperagrarian\nsuperalbal\nsuperalbuminosis\nsuperalimentation\nsuperalkaline\nsuperalkalinity\nsuperallowance\nsuperaltar\nsuperaltern\nsuperambitious\nsuperambulacral\nsuperanal\nsuperangelic\nsuperangelical\nsuperanimal\nsuperannuate\nsuperannuation\nsuperannuitant\nsuperannuity\nsuperapology\nsuperappreciation\nsuperaqueous\nsuperarbiter\nsuperarbitrary\nsuperarctic\nsuperarduous\nsuperarrogant\nsuperarseniate\nsuperartificial\nsuperartificially\nsuperaspiration\nsuperassertion\nsuperassociate\nsuperassume\nsuperastonish\nsuperastonishment\nsuperattachment\nsuperattainable\nsuperattendant\nsuperattraction\nsuperattractive\nsuperauditor\nsuperaural\nsuperaverage\nsuperavit\nsuperaward\nsuperaxillary\nsuperazotation\nsuperb\nsuperbelief\nsuperbeloved\nsuperbenefit\nsuperbenevolent\nsuperbenign\nsuperbias\nsuperbious\nsuperbity\nsuperblessed\nsuperblunder\nsuperbly\nsuperbness\nsuperbold\nsuperborrow\nsuperbrain\nsuperbrave\nsuperbrute\nsuperbuild\nsuperbungalow\nsuperbusy\nsupercabinet\nsupercalender\nsupercallosal\nsupercandid\nsupercanine\nsupercanonical\nsupercanonization\nsupercanopy\nsupercapable\nsupercaption\nsupercarbonate\nsupercarbonization\nsupercarbonize\nsupercarbureted\nsupercargo\nsupercargoship\nsupercarpal\nsupercatastrophe\nsupercatholic\nsupercausal\nsupercaution\nsupercelestial\nsupercensure\nsupercentral\nsupercentrifuge\nsupercerebellar\nsupercerebral\nsuperceremonious\nsupercharge\nsupercharged\nsupercharger\nsuperchemical\nsuperchivalrous\nsuperciliary\nsuperciliosity\nsupercilious\nsuperciliously\nsuperciliousness\nsupercilium\nsupercivil\nsupercivilization\nsupercivilized\nsuperclaim\nsuperclass\nsuperclassified\nsupercloth\nsupercoincidence\nsupercolossal\nsupercolumnar\nsupercolumniation\nsupercombination\nsupercombing\nsupercommendation\nsupercommentary\nsupercommentator\nsupercommercial\nsupercompetition\nsupercomplete\nsupercomplex\nsupercomprehension\nsupercompression\nsuperconception\nsuperconductive\nsuperconductivity\nsuperconductor\nsuperconfident\nsuperconfirmation\nsuperconformable\nsuperconformist\nsuperconformity\nsuperconfusion\nsupercongestion\nsuperconscious\nsuperconsciousness\nsuperconsecrated\nsuperconsequency\nsuperconservative\nsuperconstitutional\nsupercontest\nsupercontribution\nsupercontrol\nsupercool\nsupercordial\nsupercorporation\nsupercow\nsupercredit\nsupercrescence\nsupercrescent\nsupercrime\nsupercritic\nsupercritical\nsupercrowned\nsupercrust\nsupercube\nsupercultivated\nsupercurious\nsupercycle\nsupercynical\nsuperdainty\nsuperdanger\nsuperdebt\nsuperdeclamatory\nsuperdecoration\nsuperdeficit\nsuperdeity\nsuperdejection\nsuperdelegate\nsuperdelicate\nsuperdemand\nsuperdemocratic\nsuperdemonic\nsuperdemonstration\nsuperdensity\nsuperdeposit\nsuperdesirous\nsuperdevelopment\nsuperdevilish\nsuperdevotion\nsuperdiabolical\nsuperdiabolically\nsuperdicrotic\nsuperdifficult\nsuperdiplomacy\nsuperdirection\nsuperdiscount\nsuperdistention\nsuperdistribution\nsuperdividend\nsuperdivine\nsuperdivision\nsuperdoctor\nsuperdominant\nsuperdomineering\nsuperdonation\nsuperdose\nsuperdramatist\nsuperdreadnought\nsuperdubious\nsuperduplication\nsuperdural\nsuperdying\nsuperearthly\nsupereconomy\nsuperedification\nsuperedify\nsupereducation\nsupereffective\nsupereffluence\nsupereffluently\nsuperego\nsuperelaborate\nsuperelastic\nsuperelated\nsuperelegance\nsuperelementary\nsuperelevated\nsuperelevation\nsupereligible\nsupereloquent\nsupereminence\nsupereminency\nsupereminent\nsupereminently\nsuperemphasis\nsuperemphasize\nsuperendorse\nsuperendorsement\nsuperendow\nsuperenergetic\nsuperenforcement\nsuperengrave\nsuperenrollment\nsuperepic\nsuperepoch\nsuperequivalent\nsupererogant\nsupererogantly\nsupererogate\nsupererogation\nsupererogative\nsupererogator\nsupererogatorily\nsupererogatory\nsuperespecial\nsuperessential\nsuperessentially\nsuperestablish\nsuperestablishment\nsupereternity\nsuperether\nsuperethical\nsuperethmoidal\nsuperevangelical\nsuperevident\nsuperexacting\nsuperexalt\nsuperexaltation\nsuperexaminer\nsuperexceed\nsuperexceeding\nsuperexcellence\nsuperexcellency\nsuperexcellent\nsuperexcellently\nsuperexceptional\nsuperexcitation\nsuperexcited\nsuperexcitement\nsuperexcrescence\nsuperexert\nsuperexertion\nsuperexiguity\nsuperexist\nsuperexistent\nsuperexpand\nsuperexpansion\nsuperexpectation\nsuperexpenditure\nsuperexplicit\nsuperexport\nsuperexpressive\nsuperexquisite\nsuperexquisitely\nsuperexquisiteness\nsuperextend\nsuperextension\nsuperextol\nsuperextreme\nsuperfamily\nsuperfantastic\nsuperfarm\nsuperfat\nsuperfecundation\nsuperfecundity\nsuperfee\nsuperfeminine\nsuperfervent\nsuperfetate\nsuperfetation\nsuperfeudation\nsuperfibrination\nsuperficial\nsuperficialism\nsuperficialist\nsuperficiality\nsuperficialize\nsuperficially\nsuperficialness\nsuperficiary\nsuperficies\nsuperfidel\nsuperfinance\nsuperfine\nsuperfinical\nsuperfinish\nsuperfinite\nsuperfissure\nsuperfit\nsuperfix\nsuperfleet\nsuperflexion\nsuperfluent\nsuperfluid\nsuperfluitance\nsuperfluity\nsuperfluous\nsuperfluously\nsuperfluousness\nsuperflux\nsuperfoliaceous\nsuperfoliation\nsuperfolly\nsuperformal\nsuperformation\nsuperformidable\nsuperfortunate\nsuperfriendly\nsuperfrontal\nsuperfructified\nsuperfulfill\nsuperfulfillment\nsuperfunction\nsuperfunctional\nsuperfuse\nsuperfusibility\nsuperfusible\nsuperfusion\nsupergaiety\nsupergallant\nsupergene\nsupergeneric\nsupergenerosity\nsupergenerous\nsupergenual\nsupergiant\nsuperglacial\nsuperglorious\nsuperglottal\nsupergoddess\nsupergoodness\nsupergovern\nsupergovernment\nsupergraduate\nsupergrant\nsupergratification\nsupergratify\nsupergravitate\nsupergravitation\nsuperguarantee\nsupergun\nsuperhandsome\nsuperhearty\nsuperheat\nsuperheater\nsuperheresy\nsuperhero\nsuperheroic\nsuperhet\nsuperheterodyne\nsuperhighway\nsuperhirudine\nsuperhistoric\nsuperhistorical\nsuperhive\nsuperhuman\nsuperhumanity\nsuperhumanize\nsuperhumanly\nsuperhumanness\nsuperhumeral\nsuperhypocrite\nsuperideal\nsuperignorant\nsuperillustrate\nsuperillustration\nsuperimpend\nsuperimpending\nsuperimpersonal\nsuperimply\nsuperimportant\nsuperimposable\nsuperimpose\nsuperimposed\nsuperimposition\nsuperimposure\nsuperimpregnated\nsuperimpregnation\nsuperimprobable\nsuperimproved\nsuperincentive\nsuperinclination\nsuperinclusive\nsuperincomprehensible\nsuperincrease\nsuperincumbence\nsuperincumbency\nsuperincumbent\nsuperincumbently\nsuperindependent\nsuperindiction\nsuperindifference\nsuperindifferent\nsuperindignant\nsuperindividual\nsuperindividualism\nsuperindividualist\nsuperinduce\nsuperinducement\nsuperinduct\nsuperinduction\nsuperindulgence\nsuperindulgent\nsuperindustrious\nsuperindustry\nsuperinenarrable\nsuperinfection\nsuperinfer\nsuperinference\nsuperinfeudation\nsuperinfinite\nsuperinfinitely\nsuperinfirmity\nsuperinfluence\nsuperinformal\nsuperinfuse\nsuperinfusion\nsuperingenious\nsuperingenuity\nsuperinitiative\nsuperinjustice\nsuperinnocent\nsuperinquisitive\nsuperinsaniated\nsuperinscription\nsuperinsist\nsuperinsistence\nsuperinsistent\nsuperinstitute\nsuperinstitution\nsuperintellectual\nsuperintend\nsuperintendence\nsuperintendency\nsuperintendent\nsuperintendential\nsuperintendentship\nsuperintender\nsuperintense\nsuperintolerable\nsuperinundation\nsuperior\nsuperioress\nsuperiority\nsuperiorly\nsuperiorness\nsuperiorship\nsuperirritability\nsuperius\nsuperjacent\nsuperjudicial\nsuperjurisdiction\nsuperjustification\nsuperknowledge\nsuperlabial\nsuperlaborious\nsuperlactation\nsuperlapsarian\nsuperlaryngeal\nsuperlation\nsuperlative\nsuperlatively\nsuperlativeness\nsuperlenient\nsuperlie\nsuperlikelihood\nsuperline\nsuperlocal\nsuperlogical\nsuperloyal\nsuperlucky\nsuperlunary\nsuperlunatical\nsuperluxurious\nsupermagnificent\nsupermagnificently\nsupermalate\nsuperman\nsupermanhood\nsupermanifest\nsupermanism\nsupermanliness\nsupermanly\nsupermannish\nsupermarginal\nsupermarine\nsupermarket\nsupermarvelous\nsupermasculine\nsupermaterial\nsupermathematical\nsupermaxilla\nsupermaxillary\nsupermechanical\nsupermedial\nsupermedicine\nsupermediocre\nsupermental\nsupermentality\nsupermetropolitan\nsupermilitary\nsupermishap\nsupermixture\nsupermodest\nsupermoisten\nsupermolten\nsupermoral\nsupermorose\nsupermunicipal\nsupermuscan\nsupermystery\nsupernacular\nsupernaculum\nsupernal\nsupernalize\nsupernally\nsupernatant\nsupernatation\nsupernation\nsupernational\nsupernationalism\nsupernatural\nsupernaturaldom\nsupernaturalism\nsupernaturalist\nsupernaturality\nsupernaturalize\nsupernaturally\nsupernaturalness\nsupernature\nsupernecessity\nsupernegligent\nsupernormal\nsupernormally\nsupernormalness\nsupernotable\nsupernova\nsupernumeral\nsupernumerariness\nsupernumerary\nsupernumeraryship\nsupernumerous\nsupernutrition\nsuperoanterior\nsuperobedience\nsuperobedient\nsuperobese\nsuperobject\nsuperobjection\nsuperobjectionable\nsuperobligation\nsuperobstinate\nsuperoccipital\nsuperoctave\nsuperocular\nsuperodorsal\nsuperoexternal\nsuperoffensive\nsuperofficious\nsuperofficiousness\nsuperofrontal\nsuperointernal\nsuperolateral\nsuperomedial\nsuperoposterior\nsuperopposition\nsuperoptimal\nsuperoptimist\nsuperoratorical\nsuperorbital\nsuperordain\nsuperorder\nsuperordinal\nsuperordinary\nsuperordinate\nsuperordination\nsuperorganic\nsuperorganism\nsuperorganization\nsuperorganize\nsuperornament\nsuperornamental\nsuperosculate\nsuperoutput\nsuperoxalate\nsuperoxide\nsuperoxygenate\nsuperoxygenation\nsuperparamount\nsuperparasite\nsuperparasitic\nsuperparasitism\nsuperparliamentary\nsuperpassage\nsuperpatient\nsuperpatriotic\nsuperpatriotism\nsuperperfect\nsuperperfection\nsuperperson\nsuperpersonal\nsuperpersonalism\nsuperpetrosal\nsuperphlogisticate\nsuperphlogistication\nsuperphosphate\nsuperphysical\nsuperpigmentation\nsuperpious\nsuperplausible\nsuperplease\nsuperplus\nsuperpolite\nsuperpolitic\nsuperponderance\nsuperponderancy\nsuperponderant\nsuperpopulation\nsuperposable\nsuperpose\nsuperposed\nsuperposition\nsuperpositive\nsuperpower\nsuperpowered\nsuperpraise\nsuperprecarious\nsuperprecise\nsuperprelatical\nsuperpreparation\nsuperprinting\nsuperprobability\nsuperproduce\nsuperproduction\nsuperproportion\nsuperprosperous\nsuperpublicity\nsuperpure\nsuperpurgation\nsuperquadrupetal\nsuperqualify\nsuperquote\nsuperradical\nsuperrational\nsuperrationally\nsuperreaction\nsuperrealism\nsuperrealist\nsuperrefine\nsuperrefined\nsuperrefinement\nsuperreflection\nsuperreform\nsuperreformation\nsuperregal\nsuperregeneration\nsuperregenerative\nsuperregistration\nsuperregulation\nsuperreliance\nsuperremuneration\nsuperrenal\nsuperrequirement\nsuperrespectable\nsuperresponsible\nsuperrestriction\nsuperreward\nsuperrheumatized\nsuperrighteous\nsuperromantic\nsuperroyal\nsupersacerdotal\nsupersacral\nsupersacred\nsupersacrifice\nsupersafe\nsupersagacious\nsupersaint\nsupersaintly\nsupersalesman\nsupersaliency\nsupersalient\nsupersalt\nsupersanction\nsupersanguine\nsupersanity\nsupersarcastic\nsupersatisfaction\nsupersatisfy\nsupersaturate\nsupersaturation\nsuperscandal\nsuperscholarly\nsuperscientific\nsuperscribe\nsuperscript\nsuperscription\nsuperscrive\nsuperseaman\nsupersecret\nsupersecretion\nsupersecular\nsupersecure\nsupersedable\nsupersede\nsupersedeas\nsupersedence\nsuperseder\nsupersedure\nsuperselect\nsuperseminate\nsupersemination\nsuperseminator\nsupersensible\nsupersensibly\nsupersensitive\nsupersensitiveness\nsupersensitization\nsupersensory\nsupersensual\nsupersensualism\nsupersensualist\nsupersensualistic\nsupersensuality\nsupersensually\nsupersensuous\nsupersensuousness\nsupersentimental\nsuperseptal\nsuperseptuaginarian\nsuperseraphical\nsuperserious\nsuperservice\nsuperserviceable\nsuperserviceableness\nsuperserviceably\nsupersesquitertial\nsupersession\nsupersessive\nsupersevere\nsupershipment\nsupersignificant\nsupersilent\nsupersimplicity\nsupersimplify\nsupersincerity\nsupersingular\nsupersistent\nsupersize\nsupersmart\nsupersocial\nsupersoil\nsupersolar\nsupersolemn\nsupersolemness\nsupersolemnity\nsupersolemnly\nsupersolicit\nsupersolicitation\nsupersolid\nsupersonant\nsupersonic\nsupersovereign\nsupersovereignty\nsuperspecialize\nsuperspecies\nsuperspecification\nsupersphenoid\nsupersphenoidal\nsuperspinous\nsuperspiritual\nsuperspirituality\nsupersquamosal\nsuperstage\nsuperstamp\nsuperstandard\nsuperstate\nsuperstatesman\nsuperstimulate\nsuperstimulation\nsuperstition\nsuperstitionist\nsuperstitionless\nsuperstitious\nsuperstitiously\nsuperstitiousness\nsuperstoical\nsuperstrain\nsuperstrata\nsuperstratum\nsuperstrenuous\nsuperstrict\nsuperstrong\nsuperstruct\nsuperstruction\nsuperstructor\nsuperstructory\nsuperstructural\nsuperstructure\nsuperstuff\nsuperstylish\nsupersublimated\nsupersuborder\nsupersubsist\nsupersubstantial\nsupersubstantiality\nsupersubstantiate\nsupersubtilized\nsupersubtle\nsupersufficiency\nsupersufficient\nsupersulcus\nsupersulphate\nsupersulphuret\nsupersulphureted\nsupersulphurize\nsupersuperabundance\nsupersuperabundant\nsupersuperabundantly\nsupersuperb\nsupersuperior\nsupersupremacy\nsupersupreme\nsupersurprise\nsupersuspicious\nsupersweet\nsupersympathy\nsupersyndicate\nsupersystem\nsupertare\nsupertartrate\nsupertax\nsupertaxation\nsupertemporal\nsupertempt\nsupertemptation\nsupertension\nsuperterranean\nsuperterraneous\nsuperterrene\nsuperterrestrial\nsuperthankful\nsuperthorough\nsuperthyroidism\nsupertoleration\nsupertonic\nsupertotal\nsupertower\nsupertragic\nsupertragical\nsupertrain\nsupertramp\nsupertranscendent\nsupertranscendently\nsupertreason\nsupertrivial\nsupertuchun\nsupertunic\nsupertutelary\nsuperugly\nsuperultrafrostified\nsuperunfit\nsuperunit\nsuperunity\nsuperuniversal\nsuperuniverse\nsuperurgent\nsupervalue\nsupervast\nsupervene\nsupervenience\nsupervenient\nsupervenosity\nsupervention\nsupervestment\nsupervexation\nsupervictorious\nsupervigilant\nsupervigorous\nsupervirulent\nsupervisal\nsupervisance\nsupervise\nsupervision\nsupervisionary\nsupervisive\nsupervisor\nsupervisorial\nsupervisorship\nsupervisory\nsupervisual\nsupervisure\nsupervital\nsupervive\nsupervolition\nsupervoluminous\nsupervolute\nsuperwager\nsuperwealthy\nsuperweening\nsuperwise\nsuperwoman\nsuperworldly\nsuperwrought\nsuperyacht\nsuperzealous\nsupinate\nsupination\nsupinator\nsupine\nsupinely\nsupineness\nsuppedaneum\nsupper\nsuppering\nsupperless\nsuppertime\nsupperwards\nsupping\nsupplace\nsupplant\nsupplantation\nsupplanter\nsupplantment\nsupple\nsupplejack\nsupplely\nsupplement\nsupplemental\nsupplementally\nsupplementarily\nsupplementary\nsupplementation\nsupplementer\nsuppleness\nsuppletion\nsuppletive\nsuppletively\nsuppletorily\nsuppletory\nsuppliable\nsupplial\nsuppliance\nsuppliancy\nsuppliant\nsuppliantly\nsuppliantness\nsupplicancy\nsupplicant\nsupplicantly\nsupplicat\nsupplicate\nsupplicating\nsupplicatingly\nsupplication\nsupplicationer\nsupplicative\nsupplicator\nsupplicatory\nsupplicavit\nsupplice\nsupplier\nsuppling\nsupply\nsupport\nsupportability\nsupportable\nsupportableness\nsupportably\nsupportance\nsupporter\nsupportful\nsupporting\nsupportingly\nsupportive\nsupportless\nsupportlessly\nsupportress\nsupposable\nsupposableness\nsupposably\nsupposal\nsuppose\nsupposed\nsupposedly\nsupposer\nsupposing\nsupposition\nsuppositional\nsuppositionally\nsuppositionary\nsuppositionless\nsuppositious\nsupposititious\nsupposititiously\nsupposititiousness\nsuppositive\nsuppositively\nsuppository\nsuppositum\nsuppost\nsuppress\nsuppressal\nsuppressed\nsuppressedly\nsuppresser\nsuppressible\nsuppression\nsuppressionist\nsuppressive\nsuppressively\nsuppressor\nsupprise\nsuppurant\nsuppurate\nsuppuration\nsuppurative\nsuppuratory\nsuprabasidorsal\nsuprabranchial\nsuprabuccal\nsupracaecal\nsupracargo\nsupracaudal\nsupracensorious\nsupracentenarian\nsuprachorioid\nsuprachorioidal\nsuprachorioidea\nsuprachoroid\nsuprachoroidal\nsuprachoroidea\nsupraciliary\nsupraclavicle\nsupraclavicular\nsupraclusion\nsupracommissure\nsupraconduction\nsupraconductor\nsupracondylar\nsupracondyloid\nsupraconscious\nsupraconsciousness\nsupracoralline\nsupracostal\nsupracoxal\nsupracranial\nsupracretaceous\nsupradecompound\nsupradental\nsupradorsal\nsupradural\nsuprafeminine\nsuprafine\nsuprafoliaceous\nsuprafoliar\nsupraglacial\nsupraglenoid\nsupraglottic\nsupragovernmental\nsuprahepatic\nsuprahistorical\nsuprahuman\nsuprahumanity\nsuprahyoid\nsuprailiac\nsuprailium\nsupraintellectual\nsuprainterdorsal\nsuprajural\nsupralabial\nsupralapsarian\nsupralapsarianism\nsupralateral\nsupralegal\nsupraliminal\nsupraliminally\nsupralineal\nsupralinear\nsupralocal\nsupralocally\nsupraloral\nsupralunar\nsupralunary\nsupramammary\nsupramarginal\nsupramarine\nsupramastoid\nsupramaxilla\nsupramaxillary\nsupramaximal\nsuprameatal\nsupramechanical\nsupramedial\nsupramental\nsupramolecular\nsupramoral\nsupramortal\nsupramundane\nsupranasal\nsupranational\nsupranatural\nsupranaturalism\nsupranaturalist\nsupranaturalistic\nsupranature\nsupranervian\nsupraneural\nsupranormal\nsupranuclear\nsupraoccipital\nsupraocclusion\nsupraocular\nsupraoesophagal\nsupraoesophageal\nsupraoptimal\nsupraoptional\nsupraoral\nsupraorbital\nsupraorbitar\nsupraordinary\nsupraordinate\nsupraordination\nsuprapapillary\nsuprapedal\nsuprapharyngeal\nsupraposition\nsupraprotest\nsuprapubian\nsuprapubic\nsuprapygal\nsupraquantivalence\nsupraquantivalent\nsuprarational\nsuprarationalism\nsuprarationality\nsuprarenal\nsuprarenalectomize\nsuprarenalectomy\nsuprarenalin\nsuprarenine\nsuprarimal\nsuprasaturate\nsuprascapula\nsuprascapular\nsuprascapulary\nsuprascript\nsuprasegmental\nsuprasensible\nsuprasensitive\nsuprasensual\nsuprasensuous\nsupraseptal\nsuprasolar\nsuprasoriferous\nsuprasphanoidal\nsupraspinal\nsupraspinate\nsupraspinatus\nsupraspinous\nsuprasquamosal\nsuprastandard\nsuprastapedial\nsuprastate\nsuprasternal\nsuprastigmal\nsuprasubtle\nsupratemporal\nsupraterraneous\nsupraterrestrial\nsuprathoracic\nsupratonsillar\nsupratrochlear\nsupratropical\nsupratympanic\nsupravaginal\nsupraventricular\nsupraversion\nsupravital\nsupraworld\nsupremacy\nsuprematism\nsupreme\nsupremely\nsupremeness\nsupremity\nsur\nsura\nsuraddition\nsurah\nsurahi\nsural\nsuralimentation\nsuranal\nsurangular\nsurat\nsurbase\nsurbased\nsurbasement\nsurbate\nsurbater\nsurbed\nsurcease\nsurcharge\nsurcharger\nsurcingle\nsurcoat\nsurcrue\nsurculi\nsurculigerous\nsurculose\nsurculous\nsurculus\nsurd\nsurdation\nsurdeline\nsurdent\nsurdimutism\nsurdity\nsurdomute\nsure\nsurely\nsureness\nsures\nSuresh\nsurette\nsurety\nsuretyship\nsurexcitation\nsurf\nsurface\nsurfaced\nsurfacedly\nsurfaceless\nsurfacely\nsurfaceman\nsurfacer\nsurfacing\nsurfactant\nsurfacy\nsurfbird\nsurfboard\nsurfboarding\nsurfboat\nsurfboatman\nsurfeit\nsurfeiter\nsurfer\nsurficial\nsurfle\nsurflike\nsurfman\nsurfmanship\nsurfrappe\nsurfuse\nsurfusion\nsurfy\nsurge\nsurgeful\nsurgeless\nsurgent\nsurgeon\nsurgeoncy\nsurgeoness\nsurgeonfish\nsurgeonless\nsurgeonship\nsurgeproof\nsurgerize\nsurgery\nsurgical\nsurgically\nsurginess\nsurging\nsurgy\nSuriana\nSurianaceae\nSuricata\nsuricate\nsuriga\nSurinam\nsurinamine\nsurlily\nsurliness\nsurly\nsurma\nsurmark\nsurmaster\nsurmisable\nsurmisal\nsurmisant\nsurmise\nsurmised\nsurmisedly\nsurmiser\nsurmount\nsurmountable\nsurmountableness\nsurmountal\nsurmounted\nsurmounter\nsurmullet\nsurname\nsurnamer\nsurnap\nsurnay\nsurnominal\nsurpass\nsurpassable\nsurpasser\nsurpassing\nsurpassingly\nsurpassingness\nsurpeopled\nsurplice\nsurpliced\nsurplicewise\nsurplician\nsurplus\nsurplusage\nsurpreciation\nsurprint\nsurprisable\nsurprisal\nsurprise\nsurprisedly\nsurprisement\nsurpriseproof\nsurpriser\nsurprising\nsurprisingly\nsurprisingness\nsurquedry\nsurquidry\nsurquidy\nsurra\nsurrealism\nsurrealist\nsurrealistic\nsurrealistically\nsurrebound\nsurrebut\nsurrebuttal\nsurrebutter\nsurrection\nsurrejoin\nsurrejoinder\nsurrenal\nsurrender\nsurrenderee\nsurrenderer\nsurrenderor\nsurreption\nsurreptitious\nsurreptitiously\nsurreptitiousness\nsurreverence\nsurreverently\nsurrey\nsurrogacy\nsurrogate\nsurrogateship\nsurrogation\nsurrosion\nsurround\nsurrounded\nsurroundedly\nsurrounder\nsurrounding\nsurroundings\nsursaturation\nsursolid\nsursumduction\nsursumvergence\nsursumversion\nsurtax\nsurtout\nsurturbrand\nsurveillance\nsurveillant\nsurvey\nsurveyable\nsurveyage\nsurveyal\nsurveyance\nsurveying\nsurveyor\nsurveyorship\nsurvigrous\nsurvivability\nsurvivable\nsurvival\nsurvivalism\nsurvivalist\nsurvivance\nsurvivancy\nsurvive\nsurviver\nsurviving\nsurvivor\nsurvivoress\nsurvivorship\nSurya\nSus\nSusan\nSusanchite\nSusanna\nSusanne\nsusannite\nsuscept\nsusceptance\nsusceptibility\nsusceptible\nsusceptibleness\nsusceptibly\nsusception\nsusceptive\nsusceptiveness\nsusceptivity\nsusceptor\nsuscitate\nsuscitation\nsusi\nSusian\nSusianian\nSusie\nsuslik\nsusotoxin\nsuspect\nsuspectable\nsuspected\nsuspectedness\nsuspecter\nsuspectful\nsuspectfulness\nsuspectible\nsuspectless\nsuspector\nsuspend\nsuspended\nsuspender\nsuspenderless\nsuspenders\nsuspendibility\nsuspendible\nsuspensation\nsuspense\nsuspenseful\nsuspensely\nsuspensibility\nsuspensible\nsuspension\nsuspensive\nsuspensively\nsuspensiveness\nsuspensoid\nsuspensor\nsuspensorial\nsuspensorium\nsuspensory\nsuspercollate\nsuspicion\nsuspicionable\nsuspicional\nsuspicionful\nsuspicionless\nsuspicious\nsuspiciously\nsuspiciousness\nsuspiration\nsuspiratious\nsuspirative\nsuspire\nsuspirious\nSusquehanna\nSussex\nsussexite\nSussexman\nsussultatory\nsussultorial\nsustain\nsustainable\nsustained\nsustainer\nsustaining\nsustainingly\nsustainment\nsustanedly\nsustenance\nsustenanceless\nsustentacula\nsustentacular\nsustentaculum\nsustentation\nsustentational\nsustentative\nsustentator\nsustention\nsustentive\nsustentor\nSusu\nsusu\nSusuhunan\nSusuidae\nSusumu\nsusurr\nsusurrant\nsusurrate\nsusurration\nsusurringly\nsusurrous\nsusurrus\nSutaio\nsuterbery\nsuther\nSutherlandia\nsutile\nsutler\nsutlerage\nsutleress\nsutlership\nsutlery\nSuto\nsutor\nsutorial\nsutorian\nsutorious\nsutra\nSuttapitaka\nsuttee\nsutteeism\nsutten\nsuttin\nsuttle\nSutu\nsutural\nsuturally\nsuturation\nsuture\nSuu\nsuum\nSuwandi\nsuwarro\nsuwe\nSuyog\nsuz\nSuzan\nSuzanne\nsuzerain\nsuzeraine\nsuzerainship\nsuzerainty\nSuzy\nSvan\nSvanetian\nSvanish\nSvante\nSvantovit\nsvarabhakti\nsvarabhaktic\nSvarloka\nsvelte\nSvetambara\nsviatonosite\nswa\nSwab\nswab\nswabber\nswabberly\nswabble\nSwabian\nswack\nswacken\nswacking\nswad\nswaddle\nswaddlebill\nswaddler\nswaddling\nswaddy\nSwadeshi\nSwadeshism\nswag\nswagbellied\nswagbelly\nswage\nswager\nswagger\nswaggerer\nswaggering\nswaggeringly\nswaggie\nswaggy\nswaglike\nswagman\nswagsman\nSwahilese\nSwahili\nSwahilian\nSwahilize\nswaimous\nswain\nswainish\nswainishness\nswainship\nSwainsona\nswainsona\nswaird\nswale\nswaler\nswaling\nswalingly\nswallet\nswallo\nswallow\nswallowable\nswallower\nswallowlike\nswallowling\nswallowpipe\nswallowtail\nswallowwort\nswam\nswami\nswamp\nswampable\nswampberry\nswamper\nswampish\nswampishness\nswampland\nswampside\nswampweed\nswampwood\nswampy\nSwamy\nswan\nswandown\nswanflower\nswang\nswangy\nswanherd\nswanhood\nswanimote\nswank\nswanker\nswankily\nswankiness\nswanking\nswanky\nswanlike\nswanmark\nswanmarker\nswanmarking\nswanneck\nswannecked\nswanner\nswannery\nswannish\nswanny\nswanskin\nSwantevit\nswanweed\nswanwort\nswap\nswape\nswapper\nswapping\nswaraj\nswarajism\nswarajist\nswarbie\nsward\nswardy\nsware\nswarf\nswarfer\nswarm\nswarmer\nswarming\nswarmy\nswarry\nswart\nswartback\nswarth\nswarthily\nswarthiness\nswarthness\nswarthy\nswartish\nswartly\nswartness\nswartrutter\nswartrutting\nswarty\nSwartzbois\nSwartzia\nswarve\nswash\nswashbuckle\nswashbuckler\nswashbucklerdom\nswashbucklering\nswashbucklery\nswashbuckling\nswasher\nswashing\nswashway\nswashwork\nswashy\nswastika\nswastikaed\nSwat\nswat\nswatch\nSwatchel\nswatcher\nswatchway\nswath\nswathable\nswathband\nswathe\nswatheable\nswather\nswathy\nSwati\nSwatow\nswatter\nswattle\nswaver\nsway\nswayable\nswayed\nswayer\nswayful\nswaying\nswayingly\nswayless\nSwazi\nSwaziland\nsweal\nsweamish\nswear\nswearer\nswearingly\nswearword\nsweat\nsweatband\nsweatbox\nsweated\nsweater\nsweatful\nsweath\nsweatily\nsweatiness\nsweating\nsweatless\nsweatproof\nsweatshop\nsweatweed\nsweaty\nSwede\nSwedenborgian\nSwedenborgianism\nSwedenborgism\nswedge\nSwedish\nsweeny\nsweep\nsweepable\nsweepage\nsweepback\nsweepboard\nsweepdom\nsweeper\nsweeperess\nsweepforward\nsweeping\nsweepingly\nsweepingness\nsweepings\nsweepstake\nsweepwasher\nsweepwashings\nsweepy\nsweer\nsweered\nsweet\nsweetberry\nsweetbread\nsweetbrier\nsweetbriery\nsweeten\nsweetener\nsweetening\nsweetfish\nsweetful\nsweetheart\nsweetheartdom\nsweethearted\nsweetheartedness\nsweethearting\nsweetheartship\nsweetie\nsweeting\nsweetish\nsweetishly\nsweetishness\nsweetleaf\nsweetless\nsweetlike\nsweetling\nsweetly\nsweetmaker\nsweetmeat\nsweetmouthed\nsweetness\nsweetroot\nsweetshop\nsweetsome\nsweetsop\nsweetwater\nsweetweed\nsweetwood\nsweetwort\nsweety\nswego\nswelchie\nswell\nswellage\nswelldom\nswelldoodle\nswelled\nsweller\nswellfish\nswelling\nswellish\nswellishness\nswellmobsman\nswellness\nswelltoad\nswelly\nswelp\nswelt\nswelter\nsweltering\nswelteringly\nswelth\nsweltry\nswelty\nswep\nswept\nswerd\nSwertia\nswerve\nswerveless\nswerver\nswervily\nswick\nswidge\nSwietenia\nswift\nswiften\nswifter\nswiftfoot\nswiftlet\nswiftlike\nswiftness\nswifty\nswig\nswigger\nswiggle\nswile\nswill\nswillbowl\nswiller\nswilltub\nswim\nswimmable\nswimmer\nswimmeret\nswimmily\nswimminess\nswimming\nswimmingly\nswimmingness\nswimmist\nswimmy\nswimsuit\nswimy\nSwinburnesque\nSwinburnian\nswindle\nswindleable\nswindledom\nswindler\nswindlership\nswindlery\nswindling\nswindlingly\nswine\nswinebread\nswinecote\nswinehead\nswineherd\nswineherdship\nswinehood\nswinehull\nswinelike\nswinely\nswinepipe\nswinery\nswinestone\nswinesty\nswiney\nswing\nswingable\nswingback\nswingdevil\nswingdingle\nswinge\nswingeing\nswinger\nswinging\nswingingly\nSwingism\nswingle\nswinglebar\nswingletail\nswingletree\nswingstock\nswingtree\nswingy\nswinish\nswinishly\nswinishness\nswink\nswinney\nswipe\nswiper\nswipes\nswiple\nswipper\nswipy\nswird\nswire\nswirl\nswirlingly\nswirly\nswirring\nswish\nswisher\nswishing\nswishingly\nswishy\nSwiss\nswiss\nSwissess\nswissing\nswitch\nswitchback\nswitchbacker\nswitchboard\nswitched\nswitchel\nswitcher\nswitchgear\nswitching\nswitchkeeper\nswitchlike\nswitchman\nswitchy\nswitchyard\nswith\nswithe\nswithen\nswither\nSwithin\nSwitzer\nSwitzeress\nswivel\nswiveled\nswiveleye\nswiveleyed\nswivellike\nswivet\nswivetty\nswiz\nswizzle\nswizzler\nswob\nswollen\nswollenly\nswollenness\nswom\nswonken\nswoon\nswooned\nswooning\nswooningly\nswoony\nswoop\nswooper\nswoosh\nsword\nswordbill\nswordcraft\nswordfish\nswordfisherman\nswordfishery\nswordfishing\nswordick\nswording\nswordless\nswordlet\nswordlike\nswordmaker\nswordmaking\nswordman\nswordmanship\nswordplay\nswordplayer\nswordproof\nswordsman\nswordsmanship\nswordsmith\nswordster\nswordstick\nswordswoman\nswordtail\nswordweed\nswore\nsworn\nswosh\nswot\nswotter\nswounds\nswow\nswum\nswung\nswungen\nswure\nsyagush\nsybarism\nsybarist\nSybarital\nSybaritan\nSybarite\nSybaritic\nSybaritical\nSybaritically\nSybaritish\nsybaritism\nSybil\nsybotic\nsybotism\nsycamine\nsycamore\nsyce\nsycee\nsychnocarpous\nsycock\nsycoma\nsycomancy\nSycon\nSyconaria\nsyconarian\nsyconate\nSycones\nsyconid\nSyconidae\nsyconium\nsyconoid\nsyconus\nsycophancy\nsycophant\nsycophantic\nsycophantical\nsycophantically\nsycophantish\nsycophantishly\nsycophantism\nsycophantize\nsycophantry\nsycosiform\nsycosis\nSyd\nSydneian\nSydneyite\nsye\nSyed\nsyenite\nsyenitic\nsyenodiorite\nsyenogabbro\nsylid\nsyllab\nsyllabarium\nsyllabary\nsyllabatim\nsyllabation\nsyllabe\nsyllabi\nsyllabic\nsyllabical\nsyllabically\nsyllabicate\nsyllabication\nsyllabicness\nsyllabification\nsyllabify\nsyllabism\nsyllabize\nsyllable\nsyllabled\nsyllabus\nsyllepsis\nsylleptic\nsylleptical\nsylleptically\nSyllidae\nsyllidian\nSyllis\nsylloge\nsyllogism\nsyllogist\nsyllogistic\nsyllogistical\nsyllogistically\nsyllogistics\nsyllogization\nsyllogize\nsyllogizer\nsylph\nsylphic\nsylphid\nsylphidine\nsylphish\nsylphize\nsylphlike\nSylphon\nsylphy\nsylva\nsylvae\nsylvage\nSylvan\nsylvan\nsylvanesque\nsylvanite\nsylvanitic\nsylvanity\nsylvanize\nsylvanly\nsylvanry\nsylvate\nsylvatic\nSylvester\nsylvester\nsylvestral\nsylvestrene\nSylvestrian\nsylvestrian\nSylvestrine\nSylvia\nSylvian\nsylvic\nSylvicolidae\nsylvicoline\nSylviidae\nSylviinae\nsylviine\nsylvine\nsylvinite\nsylvite\nsymbasic\nsymbasical\nsymbasically\nsymbasis\nsymbiogenesis\nsymbiogenetic\nsymbiogenetically\nsymbion\nsymbiont\nsymbiontic\nsymbionticism\nsymbiosis\nsymbiot\nsymbiote\nsymbiotic\nsymbiotically\nsymbiotics\nsymbiotism\nsymbiotrophic\nsymblepharon\nsymbol\nsymbolaeography\nsymbolater\nsymbolatrous\nsymbolatry\nsymbolic\nsymbolical\nsymbolically\nsymbolicalness\nsymbolicly\nsymbolics\nsymbolism\nsymbolist\nsymbolistic\nsymbolistical\nsymbolistically\nsymbolization\nsymbolize\nsymbolizer\nsymbolofideism\nsymbological\nsymbologist\nsymbolography\nsymbology\nsymbololatry\nsymbolology\nsymbolry\nsymbouleutic\nsymbranch\nSymbranchia\nsymbranchiate\nsymbranchoid\nsymbranchous\nsymmachy\nsymmedian\nsymmelia\nsymmelian\nsymmelus\nsymmetalism\nsymmetral\nsymmetric\nsymmetrical\nsymmetricality\nsymmetrically\nsymmetricalness\nsymmetrist\nsymmetrization\nsymmetrize\nsymmetroid\nsymmetrophobia\nsymmetry\nsymmorphic\nsymmorphism\nsympalmograph\nsympathectomize\nsympathectomy\nsympathetectomy\nsympathetic\nsympathetical\nsympathetically\nsympatheticism\nsympatheticity\nsympatheticness\nsympatheticotonia\nsympatheticotonic\nsympathetoblast\nsympathicoblast\nsympathicotonia\nsympathicotonic\nsympathicotripsy\nsympathism\nsympathist\nsympathize\nsympathizer\nsympathizing\nsympathizingly\nsympathoblast\nsympatholysis\nsympatholytic\nsympathomimetic\nsympathy\nsympatric\nsympatry\nSympetalae\nsympetalous\nSymphalangus\nsymphenomena\nsymphenomenal\nsymphile\nsymphilic\nsymphilism\nsymphilous\nsymphily\nsymphogenous\nsymphonetic\nsymphonia\nsymphonic\nsymphonically\nsymphonion\nsymphonious\nsymphoniously\nsymphonist\nsymphonize\nsymphonous\nsymphony\nSymphoricarpos\nsymphoricarpous\nsymphrase\nsymphronistic\nsymphyantherous\nsymphycarpous\nSymphyla\nsymphylan\nsymphyllous\nsymphylous\nsymphynote\nsymphyogenesis\nsymphyogenetic\nsymphyostemonous\nsymphyseal\nsymphyseotomy\nsymphysial\nsymphysian\nsymphysic\nsymphysion\nsymphysiotomy\nsymphysis\nsymphysodactylia\nsymphysotomy\nsymphysy\nSymphyta\nsymphytic\nsymphytically\nsymphytism\nsymphytize\nSymphytum\nsympiesometer\nsymplasm\nsymplectic\nSymplegades\nsymplesite\nSymplocaceae\nsymplocaceous\nSymplocarpus\nsymploce\nSymplocos\nsympode\nsympodia\nsympodial\nsympodially\nsympodium\nsympolity\nsymposia\nsymposiac\nsymposiacal\nsymposial\nsymposiarch\nsymposiast\nsymposiastic\nsymposion\nsymposium\nsymptom\nsymptomatic\nsymptomatical\nsymptomatically\nsymptomatics\nsymptomatize\nsymptomatography\nsymptomatological\nsymptomatologically\nsymptomatology\nsymptomical\nsymptomize\nsymptomless\nsymptosis\nsymtomology\nsynacme\nsynacmic\nsynacmy\nsynactic\nsynadelphite\nsynaeresis\nsynagogal\nsynagogian\nsynagogical\nsynagogism\nsynagogist\nsynagogue\nsynalgia\nsynalgic\nsynallactic\nsynallagmatic\nsynaloepha\nsynanastomosis\nsynange\nsynangia\nsynangial\nsynangic\nsynangium\nsynanthema\nsynantherological\nsynantherologist\nsynantherology\nsynantherous\nsynanthesis\nsynanthetic\nsynanthic\nsynanthous\nsynanthrose\nsynanthy\nsynaphea\nsynaposematic\nsynapse\nsynapses\nSynapsida\nsynapsidan\nsynapsis\nsynaptai\nsynaptase\nsynapte\nsynaptene\nSynaptera\nsynapterous\nsynaptic\nsynaptical\nsynaptically\nsynapticula\nsynapticulae\nsynapticular\nsynapticulate\nsynapticulum\nSynaptosauria\nsynaptychus\nsynarchical\nsynarchism\nsynarchy\nsynarmogoid\nSynarmogoidea\nsynarquism\nsynartesis\nsynartete\nsynartetic\nsynarthrodia\nsynarthrodial\nsynarthrodially\nsynarthrosis\nSynascidiae\nsynascidian\nsynastry\nsynaxar\nsynaxarion\nsynaxarist\nsynaxarium\nsynaxary\nsynaxis\nsync\nSyncarida\nsyncarp\nsyncarpia\nsyncarpium\nsyncarpous\nsyncarpy\nsyncategorematic\nsyncategorematical\nsyncategorematically\nsyncategoreme\nsyncephalic\nsyncephalus\nsyncerebral\nsyncerebrum\nsynch\nsynchitic\nsynchondoses\nsynchondrosial\nsynchondrosially\nsynchondrosis\nsynchondrotomy\nsynchoresis\nsynchro\nsynchroflash\nsynchromesh\nsynchronal\nsynchrone\nsynchronic\nsynchronical\nsynchronically\nsynchronism\nsynchronistic\nsynchronistical\nsynchronistically\nsynchronizable\nsynchronization\nsynchronize\nsynchronized\nsynchronizer\nsynchronograph\nsynchronological\nsynchronology\nsynchronous\nsynchronously\nsynchronousness\nsynchrony\nsynchroscope\nsynchrotron\nsynchysis\nSynchytriaceae\nSynchytrium\nsyncladous\nsynclastic\nsynclinal\nsynclinally\nsyncline\nsynclinical\nsynclinore\nsynclinorial\nsynclinorian\nsynclinorium\nsynclitic\nsyncliticism\nsynclitism\nsyncoelom\nsyncopal\nsyncopate\nsyncopated\nsyncopation\nsyncopator\nsyncope\nsyncopic\nsyncopism\nsyncopist\nsyncopize\nsyncotyledonous\nsyncracy\nsyncraniate\nsyncranterian\nsyncranteric\nsyncrasy\nsyncretic\nsyncretical\nsyncreticism\nsyncretion\nsyncretism\nsyncretist\nsyncretistic\nsyncretistical\nsyncretize\nsyncrisis\nSyncrypta\nsyncryptic\nsyncytia\nsyncytial\nsyncytioma\nsyncytiomata\nsyncytium\nsyndactyl\nsyndactylia\nsyndactylic\nsyndactylism\nsyndactylous\nsyndactyly\nsyndectomy\nsynderesis\nsyndesis\nsyndesmectopia\nsyndesmitis\nsyndesmography\nsyndesmology\nsyndesmoma\nSyndesmon\nsyndesmoplasty\nsyndesmorrhaphy\nsyndesmosis\nsyndesmotic\nsyndesmotomy\nsyndetic\nsyndetical\nsyndetically\nsyndic\nsyndical\nsyndicalism\nsyndicalist\nsyndicalistic\nsyndicalize\nsyndicate\nsyndicateer\nsyndication\nsyndicator\nsyndicship\nsyndoc\nsyndrome\nsyndromic\nsyndyasmian\nSyndyoceras\nsyne\nsynecdoche\nsynecdochic\nsynecdochical\nsynecdochically\nsynecdochism\nsynechia\nsynechiological\nsynechiology\nsynechological\nsynechology\nsynechotomy\nsynechthran\nsynechthry\nsynecology\nsynecphonesis\nsynectic\nsynecticity\nSynedra\nsynedral\nSynedria\nsynedria\nsynedrial\nsynedrian\nSynedrion\nsynedrion\nSynedrium\nsynedrium\nsynedrous\nsyneidesis\nsynema\nsynemmenon\nsynenergistic\nsynenergistical\nsynenergistically\nsynentognath\nSynentognathi\nsynentognathous\nsyneresis\nsynergastic\nsynergetic\nsynergia\nsynergic\nsynergically\nsynergid\nsynergidae\nsynergidal\nsynergism\nsynergist\nsynergistic\nsynergistical\nsynergistically\nsynergize\nsynergy\nsynerize\nsynesis\nsynesthesia\nsynesthetic\nsynethnic\nsyngamic\nsyngamous\nsyngamy\nSyngenesia\nsyngenesian\nsyngenesious\nsyngenesis\nsyngenetic\nsyngenic\nsyngenism\nsyngenite\nSyngnatha\nSyngnathi\nsyngnathid\nSyngnathidae\nsyngnathoid\nsyngnathous\nSyngnathus\nsyngraph\nsynizesis\nsynkaryon\nsynkatathesis\nsynkinesia\nsynkinesis\nsynkinetic\nsynneurosis\nsynneusis\nsynochoid\nsynochus\nsynocreate\nsynod\nsynodal\nsynodalian\nsynodalist\nsynodally\nsynodical\nsynodically\nsynodist\nsynodite\nsynodontid\nSynodontidae\nsynodontoid\nsynodsman\nSynodus\nsynoecete\nsynoeciosis\nsynoecious\nsynoeciously\nsynoeciousness\nsynoecism\nsynoecize\nsynoecy\nsynoicous\nsynomosy\nsynonym\nsynonymatic\nsynonymic\nsynonymical\nsynonymicon\nsynonymics\nsynonymist\nsynonymity\nsynonymize\nsynonymous\nsynonymously\nsynonymousness\nsynonymy\nsynophthalmus\nsynopses\nsynopsis\nsynopsize\nsynopsy\nsynoptic\nsynoptical\nsynoptically\nSynoptist\nsynoptist\nSynoptistic\nsynorchidism\nsynorchism\nsynorthographic\nsynosteology\nsynosteosis\nsynostose\nsynostosis\nsynostotic\nsynostotical\nsynostotically\nsynousiacs\nsynovectomy\nsynovia\nsynovial\nsynovially\nsynoviparous\nsynovitic\nsynovitis\nsynpelmous\nsynrhabdosome\nsynsacral\nsynsacrum\nsynsepalous\nsynspermous\nsynsporous\nsyntactic\nsyntactical\nsyntactically\nsyntactician\nsyntactics\nsyntagma\nsyntan\nsyntasis\nsyntax\nsyntaxis\nsyntaxist\nsyntechnic\nsyntectic\nsyntelome\nsyntenosis\nsynteresis\nsyntexis\nsyntheme\nsynthermal\nsyntheses\nsynthesis\nsynthesism\nsynthesist\nsynthesization\nsynthesize\nsynthesizer\nsynthete\nsynthetic\nsynthetical\nsynthetically\nsyntheticism\nsynthetism\nsynthetist\nsynthetization\nsynthetize\nsynthetizer\nsynthol\nsynthroni\nsynthronoi\nsynthronos\nsynthronus\nsyntomia\nsyntomy\nsyntone\nsyntonic\nsyntonical\nsyntonically\nsyntonin\nsyntonization\nsyntonize\nsyntonizer\nsyntonolydian\nsyntonous\nsyntony\nsyntripsis\nsyntrope\nsyntrophic\nsyntropic\nsyntropical\nsyntropy\nsyntype\nsyntypic\nsyntypicism\nSynura\nsynusia\nsynusiast\nsyodicon\nsypher\nsyphilide\nsyphilidography\nsyphilidologist\nsyphiliphobia\nsyphilis\nsyphilitic\nsyphilitically\nsyphilization\nsyphilize\nsyphiloderm\nsyphilodermatous\nsyphilogenesis\nsyphilogeny\nsyphilographer\nsyphilography\nsyphiloid\nsyphilologist\nsyphilology\nsyphiloma\nsyphilomatous\nsyphilophobe\nsyphilophobia\nsyphilophobic\nsyphilopsychosis\nsyphilosis\nsyphilous\nSyracusan\nsyre\nSyriac\nSyriacism\nSyriacist\nSyrian\nSyrianic\nSyrianism\nSyrianize\nSyriarch\nSyriasm\nsyringa\nsyringadenous\nsyringe\nsyringeal\nsyringeful\nsyringes\nsyringin\nsyringitis\nsyringium\nsyringocoele\nsyringomyelia\nsyringomyelic\nsyringotome\nsyringotomy\nsyrinx\nSyriologist\nSyrma\nsyrma\nSyrmian\nSyrnium\nSyrophoenician\nsyrphian\nsyrphid\nSyrphidae\nsyrt\nsyrtic\nSyrtis\nsyrup\nsyruped\nsyruper\nsyruplike\nsyrupy\nSyryenian\nsyssarcosis\nsyssel\nsysselman\nsyssiderite\nsyssitia\nsyssition\nsystaltic\nsystasis\nsystatic\nsystem\nsystematic\nsystematical\nsystematicality\nsystematically\nsystematician\nsystematicness\nsystematics\nsystematism\nsystematist\nsystematization\nsystematize\nsystematizer\nsystematology\nsystemed\nsystemic\nsystemically\nsystemist\nsystemizable\nsystemization\nsystemize\nsystemizer\nsystemless\nsystemproof\nsystemwise\nsystilius\nsystolated\nsystole\nsystolic\nsystyle\nsystylous\nSyun\nsyzygetic\nsyzygetically\nsyzygial\nsyzygium\nsyzygy\nszaibelyite\nSzekler\nszlachta\nszopelka\nT\nt\nta\ntaa\nTaal\nTaalbond\ntaar\nTab\ntab\ntabacin\ntabacosis\ntabacum\ntabanid\nTabanidae\ntabaniform\ntabanuco\nTabanus\ntabard\ntabarded\ntabaret\nTabasco\ntabasheer\ntabashir\ntabaxir\ntabbarea\ntabber\ntabbinet\nTabby\ntabby\nTabebuia\ntabefaction\ntabefy\ntabella\nTabellaria\nTabellariaceae\ntabellion\ntaberdar\ntaberna\ntabernacle\ntabernacler\ntabernacular\nTabernaemontana\ntabernariae\ntabes\ntabescence\ntabescent\ntabet\ntabetic\ntabetiform\ntabetless\ntabic\ntabid\ntabidly\ntabidness\ntabific\ntabifical\ntabinet\nTabira\nTabitha\ntabitude\ntabla\ntablature\ntable\ntableau\ntableaux\ntablecloth\ntableclothwise\ntableclothy\ntabled\ntablefellow\ntablefellowship\ntableful\ntableity\ntableland\ntableless\ntablelike\ntablemaid\ntablemaker\ntablemaking\ntableman\ntablemate\ntabler\ntables\ntablespoon\ntablespoonful\ntablet\ntabletary\ntableware\ntablewise\ntabling\ntablinum\nTabloid\ntabloid\ntabog\ntaboo\ntabooism\ntabooist\ntaboot\ntaboparalysis\ntaboparesis\ntaboparetic\ntabophobia\ntabor\ntaborer\ntaboret\ntaborin\nTaborite\ntabour\ntabourer\ntabouret\ntabret\nTabriz\ntabu\ntabula\ntabulable\ntabular\ntabulare\ntabularium\ntabularization\ntabularize\ntabularly\ntabulary\nTabulata\ntabulate\ntabulated\ntabulation\ntabulator\ntabulatory\ntabule\ntabuliform\ntabut\ntacahout\ntacamahac\nTacana\nTacanan\nTacca\nTaccaceae\ntaccaceous\ntaccada\ntach\nTachardia\nTachardiinae\ntache\ntacheless\ntacheography\ntacheometer\ntacheometric\ntacheometry\ntacheture\ntachhydrite\ntachibana\nTachina\nTachinaria\ntachinarian\ntachinid\nTachinidae\ntachiol\ntachistoscope\ntachistoscopic\ntachogram\ntachograph\ntachometer\ntachometry\ntachoscope\ntachycardia\ntachycardiac\ntachygen\ntachygenesis\ntachygenetic\ntachygenic\ntachyglossal\ntachyglossate\nTachyglossidae\nTachyglossus\ntachygraph\ntachygrapher\ntachygraphic\ntachygraphical\ntachygraphically\ntachygraphist\ntachygraphometer\ntachygraphometry\ntachygraphy\ntachyhydrite\ntachyiatry\ntachylalia\ntachylite\ntachylyte\ntachylytic\ntachymeter\ntachymetric\ntachymetry\ntachyphagia\ntachyphasia\ntachyphemia\ntachyphrasia\ntachyphrenia\ntachypnea\ntachyscope\ntachyseism\ntachysterol\ntachysystole\ntachythanatous\ntachytomy\ntachytype\ntacit\nTacitean\ntacitly\ntacitness\ntaciturn\ntaciturnist\ntaciturnity\ntaciturnly\ntack\ntacker\ntacket\ntackety\ntackey\ntackiness\ntacking\ntackingly\ntackle\ntackled\ntackleless\ntackleman\ntackler\ntackless\ntackling\ntackproof\ntacksman\ntacky\ntaclocus\ntacmahack\ntacnode\nTaconian\nTaconic\ntaconite\ntacso\nTacsonia\ntact\ntactable\ntactful\ntactfully\ntactfulness\ntactic\ntactical\ntactically\ntactician\ntactics\ntactile\ntactilist\ntactility\ntactilogical\ntactinvariant\ntaction\ntactite\ntactive\ntactless\ntactlessly\ntactlessness\ntactometer\ntactor\ntactosol\ntactual\ntactualist\ntactuality\ntactually\ntactus\ntacuacine\nTaculli\nTad\ntad\ntade\nTadjik\nTadousac\ntadpole\ntadpoledom\ntadpolehood\ntadpolelike\ntadpolism\ntae\ntael\ntaen\ntaenia\ntaeniacidal\ntaeniacide\nTaeniada\ntaeniafuge\ntaenial\ntaenian\ntaeniasis\nTaeniata\ntaeniate\ntaenicide\nTaenidia\ntaenidium\ntaeniform\ntaenifuge\ntaeniiform\nTaeniobranchia\ntaeniobranchiate\nTaeniodonta\nTaeniodontia\nTaeniodontidae\nTaenioglossa\ntaenioglossate\ntaenioid\ntaeniosome\nTaeniosomi\ntaeniosomous\ntaenite\ntaennin\nTaetsia\ntaffarel\ntafferel\ntaffeta\ntaffety\ntaffle\ntaffrail\nTaffy\ntaffy\ntaffylike\ntaffymaker\ntaffymaking\ntaffywise\ntafia\ntafinagh\ntaft\ntafwiz\ntag\nTagabilis\nTagakaolo\nTagal\nTagala\nTagalize\nTagalo\nTagalog\ntagasaste\nTagassu\nTagassuidae\ntagatose\nTagaur\nTagbanua\ntagboard\nTagetes\ntagetol\ntagetone\ntagged\ntagger\ntaggle\ntaggy\nTaghlik\ntagilite\nTagish\ntaglet\nTagliacotian\nTagliacozzian\ntaglike\ntaglock\ntagrag\ntagraggery\ntagsore\ntagtail\ntagua\ntaguan\nTagula\ntagwerk\ntaha\nTahami\ntaheen\ntahil\ntahin\nTahiti\nTahitian\ntahkhana\nTahltan\ntahr\ntahseeldar\ntahsil\ntahsildar\nTahsin\ntahua\nTai\ntai\ntaiaha\ntaich\ntaiga\ntaigle\ntaiglesome\ntaihoa\ntaikhana\ntail\ntailage\ntailband\ntailboard\ntailed\ntailender\ntailer\ntailet\ntailfirst\ntailflower\ntailforemost\ntailge\ntailhead\ntailing\ntailings\ntaille\ntailless\ntaillessly\ntaillessness\ntaillie\ntaillight\ntaillike\ntailor\ntailorage\ntailorbird\ntailorcraft\ntailordom\ntailoress\ntailorhood\ntailoring\ntailorism\ntailorization\ntailorize\ntailorless\ntailorlike\ntailorly\ntailorman\ntailorship\ntailorwise\ntailory\ntailpiece\ntailpin\ntailpipe\ntailrace\ntailsman\ntailstock\nTailte\ntailward\ntailwards\ntailwise\ntaily\ntailzee\ntailzie\ntaimen\ntaimyrite\ntain\nTainan\nTaino\ntaint\ntaintable\ntaintless\ntaintlessly\ntaintlessness\ntaintment\ntaintor\ntaintproof\ntainture\ntaintworm\nTainui\ntaipan\nTaipi\nTaiping\ntaipo\ntairge\ntairger\ntairn\ntaisch\ntaise\nTaisho\ntaissle\ntaistrel\ntaistril\nTait\ntait\ntaiver\ntaivers\ntaivert\nTaiwanhemp\nTaiyal\ntaj\nTajik\ntakable\ntakamaka\nTakao\ntakar\nTakayuki\ntake\ntakedown\ntakedownable\ntakeful\nTakelma\ntaken\ntaker\nTakeuchi\nTakhaar\nTakhtadjy\nTakilman\ntakin\ntaking\ntakingly\ntakingness\ntakings\nTakitumu\ntakosis\ntakt\nTaku\ntaky\ntakyr\nTal\ntal\ntala\ntalabon\ntalahib\nTalaing\ntalaje\ntalak\ntalalgia\nTalamanca\nTalamancan\ntalanton\ntalao\ntalapoin\ntalar\ntalari\ntalaria\ntalaric\ntalayot\ntalbot\ntalbotype\ntalc\ntalcer\nTalcher\ntalcky\ntalclike\ntalcochlorite\ntalcoid\ntalcomicaceous\ntalcose\ntalcous\ntalcum\ntald\ntale\ntalebearer\ntalebearing\ntalebook\ntalecarrier\ntalecarrying\ntaled\ntaleful\nTalegallinae\nTalegallus\ntalemaster\ntalemonger\ntalemongering\ntalent\ntalented\ntalentless\ntalepyet\ntaler\ntales\ntalesman\ntaleteller\ntaletelling\ntali\nTaliacotian\ntaliage\ntaliation\ntaliera\ntaligrade\nTalinum\ntalion\ntalionic\ntalipat\ntaliped\ntalipedic\ntalipes\ntalipomanus\ntalipot\ntalis\ntalisay\nTalishi\ntalisman\ntalismanic\ntalismanical\ntalismanically\ntalismanist\ntalite\nTalitha\ntalitol\ntalk\ntalkability\ntalkable\ntalkathon\ntalkative\ntalkatively\ntalkativeness\ntalker\ntalkfest\ntalkful\ntalkie\ntalkiness\ntalking\ntalkworthy\ntalky\ntall\ntallage\ntallageability\ntallageable\ntallboy\ntallegalane\ntaller\ntallero\ntalles\ntallet\ntalliable\ntalliage\ntalliar\ntalliate\ntallier\ntallis\ntallish\ntallit\ntallith\ntallness\ntalloel\ntallote\ntallow\ntallowberry\ntallower\ntallowiness\ntallowing\ntallowish\ntallowlike\ntallowmaker\ntallowmaking\ntallowman\ntallowroot\ntallowweed\ntallowwood\ntallowy\ntallwood\ntally\ntallyho\ntallyman\ntallymanship\ntallywag\ntallywalka\ntallywoman\ntalma\ntalmouse\nTalmud\nTalmudic\nTalmudical\nTalmudism\nTalmudist\nTalmudistic\nTalmudistical\nTalmudization\nTalmudize\ntalocalcaneal\ntalocalcanean\ntalocrural\ntalofibular\ntalon\ntalonavicular\ntaloned\ntalonic\ntalonid\ntaloscaphoid\ntalose\ntalotibial\nTalpa\ntalpacoti\ntalpatate\ntalpetate\ntalpicide\ntalpid\nTalpidae\ntalpiform\ntalpify\ntalpine\ntalpoid\ntalthib\nTaltushtuntude\nTaluche\nTaluhet\ntaluk\ntaluka\ntalukdar\ntalukdari\ntalus\ntaluto\ntalwar\ntalwood\nTalyshin\ntam\nTama\ntamability\ntamable\ntamableness\ntamably\nTamaceae\nTamachek\ntamacoare\ntamale\nTamanac\nTamanaca\nTamanaco\ntamandu\ntamandua\ntamanoas\ntamanoir\ntamanowus\ntamanu\nTamara\ntamara\ntamarack\ntamaraite\ntamarao\nTamaricaceae\ntamaricaceous\ntamarin\ntamarind\nTamarindus\ntamarisk\nTamarix\nTamaroa\ntamas\ntamasha\nTamashek\nTamaulipecan\ntambac\ntambaroora\ntamber\ntambo\ntamboo\nTambookie\ntambookie\ntambor\nTambouki\ntambour\ntamboura\ntambourer\ntambouret\ntambourgi\ntambourin\ntambourinade\ntambourine\ntambourist\ntambreet\nTambuki\ntamburan\ntamburello\nTame\ntame\ntamehearted\ntameheartedness\ntamein\ntameless\ntamelessly\ntamelessness\ntamely\ntameness\ntamer\nTamerlanism\nTamias\ntamidine\nTamil\nTamilian\nTamilic\ntamis\ntamise\ntamlung\nTammanial\nTammanize\nTammany\nTammanyism\nTammanyite\nTammanyize\ntammie\ntammock\nTammy\ntammy\nTamonea\nTamoyo\ntamp\ntampala\ntampan\ntampang\ntamper\ntamperer\ntamperproof\ntampin\ntamping\ntampion\ntampioned\ntampon\ntamponade\ntamponage\ntamponment\ntampoon\nTamul\nTamulian\nTamulic\nTamus\nTamworth\nTamzine\ntan\ntana\ntanacetin\ntanacetone\nTanacetum\ntanacetyl\ntanach\ntanager\nTanagra\nTanagraean\nTanagridae\ntanagrine\ntanagroid\nTanaidacea\ntanaist\ntanak\nTanaka\nTanala\ntanan\ntanbark\ntanbur\ntancel\nTanchelmian\ntanchoir\ntandan\ntandem\ntandemer\ntandemist\ntandemize\ntandemwise\ntandle\ntandour\nTandy\ntane\ntanekaha\nTang\ntang\ntanga\nTangaloa\ntangalung\ntangantangan\nTangaridae\nTangaroa\nTangaroan\ntanged\ntangeite\ntangelo\ntangence\ntangency\ntangent\ntangental\ntangentally\ntangential\ntangentiality\ntangentially\ntangently\ntanger\nTangerine\ntangfish\ntangham\ntanghan\ntanghin\nTanghinia\ntanghinin\ntangi\ntangibile\ntangibility\ntangible\ntangibleness\ntangibly\ntangie\nTangier\ntangilin\nTangipahoa\ntangka\ntanglad\ntangle\ntangleberry\ntanglefish\ntanglefoot\ntanglement\ntangleproof\ntangler\ntangleroot\ntanglesome\ntangless\ntanglewrack\ntangling\ntanglingly\ntangly\ntango\ntangoreceptor\ntangram\ntangs\ntangue\ntanguile\ntangum\ntangun\nTangut\ntangy\ntanh\ntanha\ntanhouse\ntania\ntanica\ntanier\ntanist\ntanistic\ntanistry\ntanistship\nTanite\nTanitic\ntanjib\ntanjong\ntank\ntanka\ntankage\ntankah\ntankard\ntanked\ntanker\ntankerabogus\ntankert\ntankette\ntankful\ntankle\ntankless\ntanklike\ntankmaker\ntankmaking\ntankman\ntankodrome\ntankroom\ntankwise\ntanling\ntannable\ntannage\ntannaic\ntannaim\ntannaitic\ntannalbin\ntannase\ntannate\ntanned\ntanner\ntannery\ntannic\ntannide\ntanniferous\ntannin\ntannined\ntanning\ntanninlike\ntannocaffeic\ntannogallate\ntannogallic\ntannogelatin\ntannogen\ntannoid\ntannometer\ntannyl\nTano\ntanoa\nTanoan\ntanproof\ntanquam\nTanquelinian\ntanquen\ntanrec\ntanstuff\ntansy\ntantadlin\ntantafflin\ntantalate\nTantalean\nTantalian\nTantalic\ntantalic\ntantaliferous\ntantalifluoride\ntantalite\ntantalization\ntantalize\ntantalizer\ntantalizingly\ntantalizingness\ntantalofluoride\ntantalum\nTantalus\ntantamount\ntantara\ntantarabobus\ntantarara\ntanti\ntantivy\ntantle\nTantony\ntantra\ntantric\ntantrik\ntantrism\ntantrist\ntantrum\ntantum\ntanwood\ntanworks\nTanya\ntanyard\nTanyoan\nTanystomata\ntanystomatous\ntanystome\ntanzeb\ntanzib\nTanzine\ntanzy\nTao\ntao\nTaoism\nTaoist\nTaoistic\nTaonurus\nTaos\ntaotai\ntaoyin\ntap\nTapa\ntapa\nTapachula\nTapachulteca\ntapacolo\ntapaculo\nTapacura\ntapadera\ntapadero\nTapajo\ntapalo\ntapamaker\ntapamaking\ntapas\ntapasvi\nTape\ntape\nTapeats\ntapeinocephalic\ntapeinocephalism\ntapeinocephaly\ntapeless\ntapelike\ntapeline\ntapemaker\ntapemaking\ntapeman\ntapen\ntaper\ntaperbearer\ntapered\ntaperer\ntapering\ntaperingly\ntaperly\ntapermaker\ntapermaking\ntaperness\ntaperwise\ntapesium\ntapestring\ntapestry\ntapestrylike\ntapet\ntapetal\ntapete\ntapeti\ntapetless\ntapetum\ntapework\ntapeworm\ntaphephobia\ntaphole\ntaphouse\nTaphria\nTaphrina\nTaphrinaceae\ntapia\nTapijulapane\ntapinceophalism\ntapinocephalic\ntapinocephaly\nTapinoma\ntapinophobia\ntapinophoby\ntapinosis\ntapioca\ntapir\nTapiridae\ntapiridian\ntapirine\nTapiro\ntapiroid\nTapirus\ntapis\ntapism\ntapist\ntaplash\ntaplet\nTapleyism\ntapmost\ntapnet\ntapoa\nTaposa\ntapoun\ntappa\ntappable\ntappableness\ntappall\ntappaul\ntappen\ntapper\ntapperer\nTappertitian\ntappet\ntappietoorie\ntapping\ntappoon\nTaprobane\ntaproom\ntaproot\ntaprooted\ntaps\ntapster\ntapsterlike\ntapsterly\ntapstress\ntapu\ntapul\nTapuya\nTapuyan\nTapuyo\ntaqua\ntar\ntara\ntarabooka\ntaraf\ntarafdar\ntarage\nTarahumar\nTarahumara\nTarahumare\nTarahumari\nTarai\ntarairi\ntarakihi\nTaraktogenos\ntaramellite\nTaramembe\nTaranchi\ntarand\nTarandean\nTarandian\ntarantara\ntarantass\ntarantella\ntarantism\ntarantist\ntarantula\ntarantular\ntarantulary\ntarantulated\ntarantulid\nTarantulidae\ntarantulism\ntarantulite\ntarantulous\ntarapatch\ntaraph\ntarapin\nTarapon\nTarasc\nTarascan\nTarasco\ntarassis\ntarata\ntaratah\ntaratantara\ntaratantarize\ntarau\ntaraxacerin\ntaraxacin\nTaraxacum\nTarazed\ntarbadillo\ntarbet\ntarboard\ntarbogan\ntarboggin\ntarboosh\ntarbooshed\ntarboy\ntarbrush\ntarbush\ntarbuttite\nTardenoisian\nTardigrada\ntardigrade\ntardigradous\ntardily\ntardiness\ntarditude\ntardive\ntardle\ntardy\ntare\ntarea\ntarefa\ntarefitch\ntarentala\ntarente\nTarentine\ntarentism\ntarentola\ntarepatch\nTareq\ntarfa\ntarflower\ntarge\ntargeman\ntarger\ntarget\ntargeted\ntargeteer\ntargetlike\ntargetman\nTargum\nTargumic\nTargumical\nTargumist\nTargumistic\nTargumize\nTarheel\nTarheeler\ntarhood\ntari\nTariana\ntarie\ntariff\ntariffable\ntariffication\ntariffism\ntariffist\ntariffite\ntariffize\ntariffless\ntarin\nTariri\ntariric\ntaririnic\ntarish\nTarkalani\nTarkani\ntarkashi\ntarkeean\ntarkhan\ntarlatan\ntarlataned\ntarletan\ntarlike\ntarltonize\nTarmac\ntarmac\ntarman\nTarmi\ntarmined\ntarn\ntarnal\ntarnally\ntarnation\ntarnish\ntarnishable\ntarnisher\ntarnishment\ntarnishproof\ntarnlike\ntarnside\ntaro\ntaroc\ntarocco\ntarok\ntaropatch\ntarot\ntarp\ntarpan\ntarpaulin\ntarpaulinmaker\nTarpeia\nTarpeian\ntarpon\ntarpot\ntarpum\nTarquin\nTarquinish\ntarr\ntarrack\ntarradiddle\ntarradiddler\ntarragon\ntarragona\ntarras\ntarrass\nTarrateen\nTarratine\ntarred\ntarrer\ntarri\ntarriance\ntarrie\ntarrier\ntarrify\ntarrily\ntarriness\ntarrish\ntarrock\ntarrow\ntarry\ntarrying\ntarryingly\ntarryingness\ntars\ntarsadenitis\ntarsal\ntarsale\ntarsalgia\ntarse\ntarsectomy\ntarsectopia\ntarsi\ntarsia\ntarsier\nTarsiidae\ntarsioid\nTarsipedidae\nTarsipedinae\nTarsipes\ntarsitis\nTarsius\ntarsochiloplasty\ntarsoclasis\ntarsomalacia\ntarsome\ntarsometatarsal\ntarsometatarsus\ntarsonemid\nTarsonemidae\nTarsonemus\ntarsophalangeal\ntarsophyma\ntarsoplasia\ntarsoplasty\ntarsoptosis\ntarsorrhaphy\ntarsotarsal\ntarsotibal\ntarsotomy\ntarsus\ntart\ntartago\nTartan\ntartan\ntartana\ntartane\nTartar\ntartar\ntartarated\nTartarean\nTartareous\ntartareous\ntartaret\nTartarian\nTartaric\ntartaric\nTartarin\ntartarish\nTartarism\nTartarization\ntartarization\nTartarize\ntartarize\nTartarized\nTartarlike\ntartarly\nTartarology\ntartarous\ntartarproof\ntartarum\nTartarus\nTartary\ntartemorion\ntarten\ntartish\ntartishly\ntartle\ntartlet\ntartly\ntartness\ntartramate\ntartramic\ntartramide\ntartrate\ntartrated\ntartratoferric\ntartrazine\ntartrazinic\ntartro\ntartronate\ntartronic\ntartronyl\ntartronylurea\ntartrous\ntartryl\ntartrylic\nTartufe\ntartufery\ntartufian\ntartufish\ntartufishly\ntartufism\ntartwoman\nTaruma\nTarumari\ntarve\nTarvia\ntarweed\ntarwhine\ntarwood\ntarworks\ntaryard\nTaryba\nTarzan\nTarzanish\ntasajo\ntascal\ntasco\ntaseometer\ntash\ntasheriff\ntashie\ntashlik\nTashnagist\nTashnakist\ntashreef\ntashrif\nTasian\ntasimeter\ntasimetric\ntasimetry\ntask\ntaskage\ntasker\ntaskit\ntaskless\ntasklike\ntaskmaster\ntaskmastership\ntaskmistress\ntasksetter\ntasksetting\ntaskwork\ntaslet\nTasmanian\ntasmanite\nTass\ntass\ntassago\ntassah\ntassal\ntassard\ntasse\ntassel\ntasseler\ntasselet\ntasselfish\ntassellus\ntasselmaker\ntasselmaking\ntassely\ntasser\ntasset\ntassie\ntassoo\ntastable\ntastableness\ntastably\ntaste\ntasteable\ntasteableness\ntasteably\ntasted\ntasteful\ntastefully\ntastefulness\ntastekin\ntasteless\ntastelessly\ntastelessness\ntasten\ntaster\ntastily\ntastiness\ntasting\ntastingly\ntasty\ntasu\nTat\ntat\nTatar\nTatarian\nTataric\nTatarization\nTatarize\nTatary\ntataupa\ntatbeb\ntatchy\ntate\ntater\nTates\ntath\nTatian\nTatianist\ntatie\ntatinek\ntatler\ntatou\ntatouay\ntatpurusha\nTatsanottine\ntatsman\ntatta\ntatter\ntatterdemalion\ntatterdemalionism\ntatterdemalionry\ntattered\ntatteredly\ntatteredness\ntatterly\ntatterwallop\ntattery\ntatther\ntattied\ntatting\ntattle\ntattlement\ntattler\ntattlery\ntattletale\ntattling\ntattlingly\ntattoo\ntattooage\ntattooer\ntattooing\ntattooist\ntattooment\ntattva\ntatty\nTatu\ntatu\ntatukira\nTatusia\nTatusiidae\ntau\nTaube\nTauchnitz\ntaught\ntaula\nTauli\ntaum\ntaun\nTaungthu\ntaunt\ntaunter\ntaunting\ntauntingly\ntauntingness\nTaunton\ntauntress\ntaupe\ntaupo\ntaupou\ntaur\ntauranga\ntaurean\nTauri\nTaurian\ntaurian\nTauric\ntauric\ntauricide\ntauricornous\nTaurid\nTauridian\ntauriferous\ntauriform\ntaurine\nTaurini\ntaurite\ntaurobolium\ntauroboly\ntaurocephalous\ntaurocholate\ntaurocholic\ntaurocol\ntaurocolla\nTauroctonus\ntaurodont\ntauroesque\ntaurokathapsia\ntaurolatry\ntauromachian\ntauromachic\ntauromachy\ntauromorphic\ntauromorphous\ntaurophile\ntaurophobe\nTauropolos\nTaurotragus\nTaurus\ntauryl\ntaut\ntautaug\ntauted\ntautegorical\ntautegory\ntauten\ntautirite\ntautit\ntautly\ntautness\ntautochrone\ntautochronism\ntautochronous\ntautog\ntautologic\ntautological\ntautologically\ntautologicalness\ntautologism\ntautologist\ntautologize\ntautologizer\ntautologous\ntautologously\ntautology\ntautomer\ntautomeral\ntautomeric\ntautomerism\ntautomerizable\ntautomerization\ntautomerize\ntautomery\ntautometer\ntautometric\ntautometrical\ntautomorphous\ntautonym\ntautonymic\ntautonymy\ntautoousian\ntautoousious\ntautophonic\ntautophonical\ntautophony\ntautopodic\ntautopody\ntautosyllabic\ntautotype\ntautourea\ntautousian\ntautousious\ntautozonal\ntautozonality\ntav\nTavast\nTavastian\nTave\ntave\ntavell\ntaver\ntavern\ntaverner\ntavernize\ntavernless\ntavernlike\ntavernly\ntavernous\ntavernry\ntavernwards\ntavers\ntavert\nTavghi\ntavistockite\ntavola\ntavolatite\nTavy\ntaw\ntawa\ntawdered\ntawdrily\ntawdriness\ntawdry\ntawer\ntawery\nTawgi\ntawie\ntawite\ntawkee\ntawkin\ntawn\ntawney\ntawnily\ntawniness\ntawnle\ntawny\ntawpi\ntawpie\ntaws\ntawse\ntawtie\ntax\ntaxability\ntaxable\ntaxableness\ntaxably\nTaxaceae\ntaxaceous\ntaxameter\ntaxaspidean\ntaxation\ntaxational\ntaxative\ntaxatively\ntaxator\ntaxeater\ntaxeating\ntaxed\ntaxeme\ntaxemic\ntaxeopod\nTaxeopoda\ntaxeopodous\ntaxeopody\ntaxer\ntaxgatherer\ntaxgathering\ntaxi\ntaxiable\ntaxiarch\ntaxiauto\ntaxibus\ntaxicab\nTaxidea\ntaxidermal\ntaxidermic\ntaxidermist\ntaxidermize\ntaxidermy\ntaximan\ntaximeter\ntaximetered\ntaxine\ntaxing\ntaxingly\ntaxinomic\ntaxinomist\ntaxinomy\ntaxiplane\ntaxis\ntaxite\ntaxitic\ntaxless\ntaxlessly\ntaxlessness\ntaxman\nTaxodiaceae\nTaxodium\ntaxodont\ntaxology\ntaxometer\ntaxon\ntaxonomer\ntaxonomic\ntaxonomical\ntaxonomically\ntaxonomist\ntaxonomy\ntaxor\ntaxpaid\ntaxpayer\ntaxpaying\nTaxus\ntaxwax\ntaxy\ntay\nTayassu\nTayassuidae\ntayer\nTaygeta\ntayir\nTaylor\nTaylorism\nTaylorite\ntaylorite\nTaylorize\ntayra\nTayrona\ntaysaam\ntazia\nTcawi\ntch\ntchai\ntcharik\ntchast\ntche\ntcheirek\nTcheka\nTcherkess\ntchervonets\ntchervonetz\nTchetchentsish\nTchetnitsi\nTchi\ntchick\ntchu\nTchwi\ntck\nTd\nte\ntea\nteaberry\nteaboard\nteabox\nteaboy\nteacake\nteacart\nteach\nteachability\nteachable\nteachableness\nteachably\nteache\nteacher\nteacherage\nteacherdom\nteacheress\nteacherhood\nteacherless\nteacherlike\nteacherly\nteachership\nteachery\nteaching\nteachingly\nteachless\nteachment\nteachy\nteacup\nteacupful\ntead\nteadish\nteaer\nteaey\nteagardeny\nteagle\nTeague\nTeagueland\nTeaguelander\nteahouse\nteaish\nteaism\nteak\nteakettle\nteakwood\nteal\ntealeafy\ntealery\ntealess\nteallite\nteam\nteamaker\nteamaking\nteaman\nteameo\nteamer\nteaming\nteamland\nteamless\nteamman\nteammate\nteamsman\nteamster\nteamwise\nteamwork\ntean\nteanal\nteap\nteapot\nteapotful\nteapottykin\nteapoy\ntear\ntearable\ntearableness\ntearably\ntearage\ntearcat\nteardown\nteardrop\ntearer\ntearful\ntearfully\ntearfulness\ntearing\ntearless\ntearlessly\ntearlessness\ntearlet\ntearlike\ntearoom\ntearpit\ntearproof\ntearstain\nteart\ntearthroat\ntearthumb\nteary\nteasable\nteasableness\nteasably\ntease\nteaseable\nteaseableness\nteaseably\nteasehole\nteasel\nteaseler\nteaseller\nteasellike\nteaselwort\nteasement\nteaser\nteashop\nteasiness\nteasing\nteasingly\nteasler\nteaspoon\nteaspoonful\nteasy\nteat\nteataster\nteated\nteatfish\nteathe\nteather\nteatime\nteatlike\nteatling\nteatman\nteaty\nteave\nteaware\nteaze\nteazer\ntebbet\nTebet\nTebeth\nTebu\ntec\nTeca\nteca\ntecali\nTech\ntech\ntechily\ntechiness\ntechnetium\ntechnic\ntechnica\ntechnical\ntechnicalism\ntechnicalist\ntechnicality\ntechnicalize\ntechnically\ntechnicalness\ntechnician\ntechnicism\ntechnicist\ntechnicological\ntechnicology\nTechnicolor\ntechnicon\ntechnics\ntechniphone\ntechnique\ntechniquer\ntechnism\ntechnist\ntechnocausis\ntechnochemical\ntechnochemistry\ntechnocracy\ntechnocrat\ntechnocratic\ntechnographer\ntechnographic\ntechnographical\ntechnographically\ntechnography\ntechnolithic\ntechnologic\ntechnological\ntechnologically\ntechnologist\ntechnologue\ntechnology\ntechnonomic\ntechnonomy\ntechnopsychology\ntechous\ntechy\nteck\nTecla\ntecnoctonia\ntecnology\nTeco\nTecoma\ntecomin\ntecon\nTecpanec\ntectal\ntectibranch\nTectibranchia\ntectibranchian\nTectibranchiata\ntectibranchiate\ntectiform\ntectocephalic\ntectocephaly\ntectological\ntectology\nTectona\ntectonic\ntectonics\ntectorial\ntectorium\nTectosages\ntectosphere\ntectospinal\nTectospondyli\ntectospondylic\ntectospondylous\ntectrices\ntectricial\ntectum\ntecum\ntecuma\nTecuna\nTed\nted\nTeda\ntedder\nTeddy\ntedescan\ntedge\ntediosity\ntedious\ntediously\ntediousness\ntediousome\ntedisome\ntedium\ntee\nteedle\nteel\nteem\nteemer\nteemful\nteemfulness\nteeming\nteemingly\nteemingness\nteemless\nteems\nteen\nteenage\nteenet\nteens\nteensy\nteenty\nteeny\nteer\nteerer\nteest\nTeeswater\nteet\nteetaller\nteetan\nteeter\nteeterboard\nteeterer\nteetertail\nteeth\nteethache\nteethbrush\nteethe\nteethful\nteethily\nteething\nteethless\nteethlike\nteethridge\nteethy\nteeting\nteetotal\nteetotaler\nteetotalism\nteetotalist\nteetotally\nteetotum\nteetotumism\nteetotumize\nteetotumwise\nteety\nteevee\nteewhaap\nteff\nteg\nTegean\nTegeticula\ntegmen\ntegmental\ntegmentum\ntegmina\ntegminal\nTegmine\ntegua\nteguexin\nTeguima\ntegula\ntegular\ntegularly\ntegulated\ntegumen\ntegument\ntegumental\ntegumentary\ntegumentum\ntegurium\nTeheran\ntehseel\ntehseeldar\ntehsil\ntehsildar\nTehuantepecan\nTehueco\nTehuelche\nTehuelchean\nTehuelet\nTeian\nteicher\nteiglech\nTeiidae\nteil\nteind\nteindable\nteinder\nteinland\nteinoscope\nteioid\nTeiresias\nTejon\ntejon\nteju\ntekiah\nTekintsi\nTekke\ntekke\ntekken\nTekkintzi\nteknonymous\nteknonymy\ntektite\ntekya\ntelacoustic\ntelakucha\ntelamon\ntelang\ntelangiectasia\ntelangiectasis\ntelangiectasy\ntelangiectatic\ntelangiosis\nTelanthera\ntelar\ntelarian\ntelary\ntelautogram\ntelautograph\ntelautographic\ntelautographist\ntelautography\ntelautomatic\ntelautomatically\ntelautomatics\nTelchines\nTelchinic\ntele\nteleanemograph\nteleangiectasia\ntelebarograph\ntelebarometer\ntelecast\ntelecaster\ntelechemic\ntelechirograph\ntelecinematography\ntelecode\ntelecommunication\ntelecryptograph\ntelectroscope\nteledendrion\nteledendrite\nteledendron\nteledu\ntelega\ntelegenic\nTelegn\ntelegnosis\ntelegnostic\ntelegonic\ntelegonous\ntelegony\ntelegram\ntelegrammatic\ntelegrammic\ntelegraph\ntelegraphee\ntelegrapheme\ntelegrapher\ntelegraphese\ntelegraphic\ntelegraphical\ntelegraphically\ntelegraphist\ntelegraphone\ntelegraphophone\ntelegraphoscope\ntelegraphy\nTelegu\ntelehydrobarometer\nTelei\nTeleia\nteleianthous\nteleiosis\ntelekinematography\ntelekinesis\ntelekinetic\ntelelectric\ntelelectrograph\ntelelectroscope\ntelemanometer\nTelemark\ntelemark\nTelembi\ntelemechanic\ntelemechanics\ntelemechanism\ntelemetacarpal\ntelemeteorograph\ntelemeteorographic\ntelemeteorography\ntelemeter\ntelemetric\ntelemetrical\ntelemetrist\ntelemetrograph\ntelemetrographic\ntelemetrography\ntelemetry\ntelemotor\ntelencephal\ntelencephalic\ntelencephalon\ntelenergic\ntelenergy\nteleneurite\nteleneuron\nTelenget\ntelengiscope\nTelenomus\nteleobjective\nTeleocephali\nteleocephalous\nTeleoceras\nTeleodesmacea\nteleodesmacean\nteleodesmaceous\nteleodont\nteleologic\nteleological\nteleologically\nteleologism\nteleologist\nteleology\nteleometer\nteleophobia\nteleophore\nteleophyte\nteleoptile\nteleorganic\nteleoroentgenogram\nteleoroentgenography\nteleosaur\nteleosaurian\nTeleosauridae\nTeleosaurus\nteleost\nteleostean\nTeleostei\nteleosteous\nteleostomate\nteleostome\nTeleostomi\nteleostomian\nteleostomous\nteleotemporal\nteleotrocha\nteleozoic\nteleozoon\ntelepathic\ntelepathically\ntelepathist\ntelepathize\ntelepathy\ntelepheme\ntelephone\ntelephoner\ntelephonic\ntelephonical\ntelephonically\ntelephonist\ntelephonograph\ntelephonographic\ntelephony\ntelephote\ntelephoto\ntelephotograph\ntelephotographic\ntelephotography\nTelephus\ntelepicture\nteleplasm\nteleplasmic\nteleplastic\ntelepost\nteleprinter\nteleradiophone\nteleran\ntelergic\ntelergical\ntelergically\ntelergy\ntelescope\ntelescopic\ntelescopical\ntelescopically\ntelescopiform\ntelescopist\nTelescopium\ntelescopy\ntelescriptor\nteleseism\nteleseismic\nteleseismology\nteleseme\ntelesia\ntelesis\ntelesmeter\ntelesomatic\ntelespectroscope\ntelestereograph\ntelestereography\ntelestereoscope\ntelesterion\ntelesthesia\ntelesthetic\ntelestial\ntelestic\ntelestich\nteletactile\nteletactor\nteletape\nteletherapy\ntelethermogram\ntelethermograph\ntelethermometer\ntelethermometry\ntelethon\nteletopometer\nteletranscription\nTeletype\nteletype\nteletyper\nteletypesetter\nteletypewriter\nteletyping\nTeleut\nteleuto\nteleutoform\nteleutosorus\nteleutospore\nteleutosporic\nteleutosporiferous\nteleview\nteleviewer\ntelevise\ntelevision\ntelevisional\ntelevisionary\ntelevisor\ntelevisual\ntelevocal\ntelevox\ntelewriter\nTelfairia\ntelfairic\ntelfer\ntelferage\ntelford\ntelfordize\ntelharmonic\ntelharmonium\ntelharmony\nteli\ntelial\ntelic\ntelical\ntelically\nteliferous\nTelinga\nteliosorus\nteliospore\nteliosporic\nteliosporiferous\nteliostage\ntelium\ntell\ntellable\ntellach\ntellee\nteller\ntellership\ntelligraph\nTellima\nTellina\nTellinacea\ntellinacean\ntellinaceous\ntelling\ntellingly\nTellinidae\ntellinoid\ntellsome\ntellt\ntelltale\ntelltalely\ntelltruth\ntellural\ntellurate\ntelluret\ntellureted\ntellurethyl\ntelluretted\ntellurhydric\ntellurian\ntelluric\ntelluride\ntelluriferous\ntellurion\ntellurism\ntellurist\ntellurite\ntellurium\ntellurize\ntelluronium\ntellurous\ntelmatological\ntelmatology\nteloblast\nteloblastic\ntelocentric\ntelodendrion\ntelodendron\ntelodynamic\ntelokinesis\ntelolecithal\ntelolemma\ntelome\ntelomic\ntelomitic\ntelonism\nTeloogoo\nTelopea\ntelophase\ntelophragma\ntelopsis\nteloptic\ntelosynapsis\ntelosynaptic\ntelosynaptist\nteloteropathic\nteloteropathically\nteloteropathy\nTelotremata\ntelotrematous\ntelotroch\ntelotrocha\ntelotrochal\ntelotrochous\ntelotrophic\ntelotype\ntelpath\ntelpher\ntelpherage\ntelpherman\ntelpherway\ntelson\ntelsonic\ntelt\nTelugu\ntelurgy\ntelyn\nTema\ntemacha\ntemalacatl\nTeman\nteman\nTemanite\ntembe\ntemblor\nTembu\ntemenos\ntemerarious\ntemerariously\ntemerariousness\ntemeritous\ntemerity\ntemerous\ntemerously\ntemerousness\ntemiak\ntemin\nTemiskaming\nTemne\nTemnospondyli\ntemnospondylous\ntemp\nTempe\nTempean\ntemper\ntempera\ntemperability\ntemperable\ntemperably\ntemperality\ntemperament\ntemperamental\ntemperamentalist\ntemperamentally\ntemperamented\ntemperance\ntemperate\ntemperately\ntemperateness\ntemperative\ntemperature\ntempered\ntemperedly\ntemperedness\ntemperer\ntemperish\ntemperless\ntempersome\ntempery\ntempest\ntempestical\ntempestive\ntempestively\ntempestivity\ntempestuous\ntempestuously\ntempestuousness\ntempesty\ntempi\nTemplar\ntemplar\ntemplardom\ntemplarism\ntemplarlike\ntemplarlikeness\ntemplary\ntemplate\ntemplater\ntemple\ntempled\ntempleful\ntempleless\ntemplelike\ntemplet\nTempletonia\ntempleward\ntemplize\ntempo\ntempora\ntemporal\ntemporale\ntemporalism\ntemporalist\ntemporality\ntemporalize\ntemporally\ntemporalness\ntemporalty\ntemporaneous\ntemporaneously\ntemporaneousness\ntemporarily\ntemporariness\ntemporary\ntemporator\ntemporization\ntemporizer\ntemporizing\ntemporizingly\ntemporoalar\ntemporoauricular\ntemporocentral\ntemporocerebellar\ntemporofacial\ntemporofrontal\ntemporohyoid\ntemporomalar\ntemporomandibular\ntemporomastoid\ntemporomaxillary\ntemporooccipital\ntemporoparietal\ntemporopontine\ntemporosphenoid\ntemporosphenoidal\ntemporozygomatic\ntempre\ntemprely\ntempt\ntemptability\ntemptable\ntemptableness\ntemptation\ntemptational\ntemptationless\ntemptatious\ntemptatory\ntempter\ntempting\ntemptingly\ntemptingness\ntemptress\nTempyo\ntemse\ntemser\ntemulence\ntemulency\ntemulent\ntemulentive\ntemulently\nten\ntenability\ntenable\ntenableness\ntenably\ntenace\ntenacious\ntenaciously\ntenaciousness\ntenacity\ntenaculum\ntenai\ntenaille\ntenaillon\nTenaktak\ntenancy\ntenant\ntenantable\ntenantableness\ntenanter\ntenantism\ntenantless\ntenantlike\ntenantry\ntenantship\ntench\ntenchweed\nTencteri\ntend\ntendance\ntendant\ntendence\ntendency\ntendent\ntendential\ntendentious\ntendentiously\ntendentiousness\ntender\ntenderability\ntenderable\ntenderably\ntenderee\ntenderer\ntenderfoot\ntenderfootish\ntenderful\ntenderfully\ntenderheart\ntenderhearted\ntenderheartedly\ntenderheartedness\ntenderish\ntenderize\ntenderling\ntenderloin\ntenderly\ntenderness\ntenderometer\ntendersome\ntendinal\ntending\ntendingly\ntendinitis\ntendinous\ntendinousness\ntendomucoid\ntendon\ntendonous\ntendoplasty\ntendosynovitis\ntendotome\ntendotomy\ntendour\ntendovaginal\ntendovaginitis\ntendresse\ntendril\ntendriled\ntendriliferous\ntendrillar\ntendrilly\ntendrilous\ntendron\ntenebra\nTenebrae\ntenebricose\ntenebrific\ntenebrificate\nTenebrio\ntenebrionid\nTenebrionidae\ntenebrious\ntenebriously\ntenebrity\ntenebrose\ntenebrosity\ntenebrous\ntenebrously\ntenebrousness\ntenectomy\ntenement\ntenemental\ntenementary\ntenementer\ntenementization\ntenementize\ntenendas\ntenendum\ntenent\nteneral\nTeneriffe\ntenesmic\ntenesmus\ntenet\ntenfold\ntenfoldness\nteng\ntengere\ntengerite\nTenggerese\ntengu\nteniacidal\nteniacide\ntenible\nTenino\ntenio\ntenline\ntenmantale\ntennantite\ntenne\ntenner\nTennessean\ntennis\ntennisdom\ntennisy\nTennysonian\nTennysonianism\nTenochtitlan\ntenodesis\ntenodynia\ntenography\ntenology\ntenomyoplasty\ntenomyotomy\ntenon\ntenonectomy\ntenoner\nTenonian\ntenonitis\ntenonostosis\ntenontagra\ntenontitis\ntenontodynia\ntenontography\ntenontolemmitis\ntenontology\ntenontomyoplasty\ntenontomyotomy\ntenontophyma\ntenontoplasty\ntenontothecitis\ntenontotomy\ntenophony\ntenophyte\ntenoplastic\ntenoplasty\ntenor\ntenorist\ntenorister\ntenorite\ntenorless\ntenoroon\ntenorrhaphy\ntenositis\ntenostosis\ntenosuture\ntenotome\ntenotomist\ntenotomize\ntenotomy\ntenovaginitis\ntenpence\ntenpenny\ntenpin\ntenrec\nTenrecidae\ntense\ntenseless\ntenselessness\ntensely\ntenseness\ntensibility\ntensible\ntensibleness\ntensibly\ntensify\ntensile\ntensilely\ntensileness\ntensility\ntensimeter\ntensiometer\ntension\ntensional\ntensionless\ntensity\ntensive\ntenson\ntensor\ntent\ntentability\ntentable\ntentacle\ntentacled\ntentaclelike\ntentacula\ntentacular\nTentaculata\ntentaculate\ntentaculated\nTentaculifera\ntentaculite\nTentaculites\nTentaculitidae\ntentaculocyst\ntentaculoid\ntentaculum\ntentage\ntentamen\ntentation\ntentative\ntentatively\ntentativeness\ntented\ntenter\ntenterbelly\ntenterer\ntenterhook\ntentful\ntenth\ntenthly\ntenthmeter\ntenthredinid\nTenthredinidae\ntenthredinoid\nTenthredinoidea\nTenthredo\ntentiform\ntentigo\ntentillum\ntention\ntentless\ntentlet\ntentlike\ntentmaker\ntentmaking\ntentmate\ntentorial\ntentorium\ntenture\ntentwards\ntentwise\ntentwork\ntentwort\ntenty\ntenuate\ntenues\ntenuicostate\ntenuifasciate\ntenuiflorous\ntenuifolious\ntenuious\ntenuiroster\ntenuirostral\ntenuirostrate\nTenuirostres\ntenuis\ntenuistriate\ntenuity\ntenuous\ntenuously\ntenuousness\ntenure\ntenurial\ntenurially\nteocalli\nteopan\nteosinte\nTeotihuacan\ntepache\ntepal\nTepanec\nTepecano\ntepee\ntepefaction\ntepefy\nTepehua\nTepehuane\ntepetate\nTephillah\ntephillin\ntephramancy\ntephrite\ntephritic\ntephroite\ntephromalacia\ntephromyelitic\nTephrosia\ntephrosis\ntepid\ntepidarium\ntepidity\ntepidly\ntepidness\ntepomporize\nteponaztli\ntepor\ntequila\nTequistlateca\nTequistlatecan\ntera\nteraglin\nterakihi\nteramorphous\nterap\nteraphim\nteras\nteratical\nteratism\nteratoblastoma\nteratogenesis\nteratogenetic\nteratogenic\nteratogenous\nteratogeny\nteratoid\nteratological\nteratologist\nteratology\nteratoma\nteratomatous\nteratoscopy\nteratosis\nterbia\nterbic\nterbium\ntercel\ntercelet\ntercentenarian\ntercentenarize\ntercentenary\ntercentennial\ntercer\nterceron\ntercet\nterchloride\ntercia\ntercine\ntercio\nterdiurnal\nterebate\nterebella\nterebellid\nTerebellidae\nterebelloid\nterebellum\nterebene\nterebenic\nterebenthene\nterebic\nterebilic\nterebinic\nterebinth\nTerebinthaceae\nterebinthial\nterebinthian\nterebinthic\nterebinthina\nterebinthinate\nterebinthine\nterebinthinous\nTerebinthus\nterebra\nterebral\nterebrant\nTerebrantia\nterebrate\nterebration\nTerebratula\nterebratular\nterebratulid\nTerebratulidae\nterebratuliform\nterebratuline\nterebratulite\nterebratuloid\nTerebridae\nTeredinidae\nteredo\nterek\nTerence\nTerentian\nterephthalate\nterephthalic\nTeresa\nTeresian\nTeresina\nterete\nteretial\ntereticaudate\nteretifolious\nteretipronator\nteretiscapular\nteretiscapularis\nteretish\ntereu\nTereus\nterfez\nTerfezia\nTerfeziaceae\ntergal\ntergant\ntergeminate\ntergeminous\ntergiferous\ntergite\ntergitic\ntergiversant\ntergiversate\ntergiversation\ntergiversator\ntergiversatory\ntergiverse\ntergolateral\ntergum\nTeri\nTeriann\nterlinguaite\nterm\nterma\ntermagancy\nTermagant\ntermagant\ntermagantish\ntermagantism\ntermagantly\ntermage\ntermatic\ntermen\ntermer\nTermes\ntermillenary\ntermin\nterminability\nterminable\nterminableness\nterminably\nterminal\nTerminalia\nTerminaliaceae\nterminalization\nterminalized\nterminally\nterminant\nterminate\ntermination\nterminational\nterminative\nterminatively\nterminator\nterminatory\ntermine\nterminer\ntermini\nterminine\nterminism\nterminist\nterministic\nterminize\ntermino\nterminological\nterminologically\nterminologist\nterminology\nterminus\ntermital\ntermitarium\ntermitary\ntermite\ntermitic\ntermitid\nTermitidae\ntermitophagous\ntermitophile\ntermitophilous\ntermless\ntermlessly\ntermlessness\ntermly\ntermolecular\ntermon\ntermor\ntermtime\ntern\nterna\nternal\nternar\nternariant\nternarious\nternary\nternate\nternately\nternatipinnate\nternatisect\nternatopinnate\nterne\nterneplate\nternery\nternion\nternize\nternlet\nTernstroemia\nTernstroemiaceae\nteroxide\nterp\nterpadiene\nterpane\nterpene\nterpeneless\nterphenyl\nterpilene\nterpin\nterpine\nterpinene\nterpineol\nterpinol\nterpinolene\nterpodion\nTerpsichore\nterpsichoreal\nterpsichoreally\nTerpsichorean\nterpsichorean\nTerraba\nterrace\nterraceous\nterracer\nterracette\nterracewards\nterracewise\nterracework\nterraciform\nterracing\nterraculture\nterraefilial\nterraefilian\nterrage\nterrain\nterral\nterramara\nterramare\nTerrance\nterrane\nterranean\nterraneous\nTerrapene\nterrapin\nterraquean\nterraqueous\nterraqueousness\nterrar\nterrarium\nterrazzo\nterrella\nterremotive\nTerrence\nterrene\nterrenely\nterreneness\nterreplein\nterrestrial\nterrestrialism\nterrestriality\nterrestrialize\nterrestrially\nterrestrialness\nterrestricity\nterrestrious\nterret\nterreted\nTerri\nterribility\nterrible\nterribleness\nterribly\nterricole\nterricoline\nterricolous\nterrier\nterrierlike\nterrific\nterrifical\nterrifically\nterrification\nterrificly\nterrificness\nterrifiedly\nterrifier\nterrify\nterrifying\nterrifyingly\nterrigenous\nterrine\nTerritelae\nterritelarian\nterritorial\nterritorialism\nterritorialist\nterritoriality\nterritorialization\nterritorialize\nterritorially\nterritorian\nterritoried\nterritory\nterron\nterror\nterrorful\nterrorific\nterrorism\nterrorist\nterroristic\nterroristical\nterrorization\nterrorize\nterrorizer\nterrorless\nterrorproof\nterrorsome\nTerry\nterry\nterse\ntersely\nterseness\ntersion\ntersulphate\ntersulphide\ntersulphuret\ntertenant\ntertia\ntertial\ntertian\ntertiana\ntertianship\ntertiarian\ntertiary\ntertiate\ntertius\nterton\ntertrinal\nTertullianism\nTertullianist\nteruncius\nterutero\nTeruyuki\ntervalence\ntervalency\ntervalent\ntervariant\ntervee\nterzetto\nterzina\nterzo\ntesack\ntesarovitch\nteschenite\nteschermacherite\nteskere\nteskeria\nTess\ntessara\ntessarace\ntessaraconter\ntessaradecad\ntessaraglot\ntessaraphthong\ntessarescaedecahedron\ntessel\ntessella\ntessellar\ntessellate\ntessellated\ntessellation\ntessera\ntesseract\ntesseradecade\ntesseraic\ntesseral\nTesserants\ntesserarian\ntesserate\ntesserated\ntesseratomic\ntesseratomy\ntessular\ntest\ntesta\ntestable\nTestacea\ntestacean\ntestaceography\ntestaceology\ntestaceous\ntestaceousness\ntestacy\ntestament\ntestamental\ntestamentally\ntestamentalness\ntestamentarily\ntestamentary\ntestamentate\ntestamentation\ntestamentum\ntestamur\ntestar\ntestata\ntestate\ntestation\ntestator\ntestatorship\ntestatory\ntestatrices\ntestatrix\ntestatum\nteste\ntested\ntestee\ntester\ntestes\ntestibrachial\ntestibrachium\ntesticardinate\ntesticardine\nTesticardines\ntesticle\ntesticond\ntesticular\ntesticulate\ntesticulated\ntestiere\ntestificate\ntestification\ntestificator\ntestificatory\ntestifier\ntestify\ntestily\ntestimonial\ntestimonialist\ntestimonialization\ntestimonialize\ntestimonializer\ntestimonium\ntestimony\ntestiness\ntesting\ntestingly\ntestis\nteston\ntestone\ntestoon\ntestor\ntestosterone\ntestril\ntestudinal\nTestudinaria\ntestudinarious\nTestudinata\ntestudinate\ntestudinated\ntestudineal\ntestudineous\nTestudinidae\ntestudinous\ntestudo\ntesty\nTesuque\ntetanic\ntetanical\ntetanically\ntetaniform\ntetanigenous\ntetanilla\ntetanine\ntetanism\ntetanization\ntetanize\ntetanoid\ntetanolysin\ntetanomotor\ntetanospasmin\ntetanotoxin\ntetanus\ntetany\ntetarcone\ntetarconid\ntetard\ntetartemorion\ntetartocone\ntetartoconid\ntetartohedral\ntetartohedrally\ntetartohedrism\ntetartohedron\ntetartoid\ntetartosymmetry\ntetch\ntetchy\ntete\ntetel\nteterrimous\nteth\ntethelin\ntether\ntetherball\ntethery\ntethydan\nTethys\nTeton\ntetra\ntetraamylose\ntetrabasic\ntetrabasicity\nTetrabelodon\ntetrabelodont\ntetrabiblos\ntetraborate\ntetraboric\ntetrabrach\ntetrabranch\nTetrabranchia\ntetrabranchiate\ntetrabromid\ntetrabromide\ntetrabromo\ntetrabromoethane\ntetracadactylity\ntetracarboxylate\ntetracarboxylic\ntetracarpellary\ntetraceratous\ntetracerous\nTetracerus\ntetrachical\ntetrachlorid\ntetrachloride\ntetrachloro\ntetrachloroethane\ntetrachloroethylene\ntetrachloromethane\ntetrachord\ntetrachordal\ntetrachordon\ntetrachoric\ntetrachotomous\ntetrachromatic\ntetrachromic\ntetrachronous\ntetracid\ntetracoccous\ntetracoccus\ntetracolic\ntetracolon\ntetracoral\nTetracoralla\ntetracoralline\ntetracosane\ntetract\ntetractinal\ntetractine\ntetractinellid\nTetractinellida\ntetractinellidan\ntetractinelline\ntetractinose\ntetracyclic\ntetrad\ntetradactyl\ntetradactylous\ntetradactyly\ntetradarchy\ntetradecane\ntetradecanoic\ntetradecapod\nTetradecapoda\ntetradecapodan\ntetradecapodous\ntetradecyl\nTetradesmus\ntetradiapason\ntetradic\nTetradite\ntetradrachma\ntetradrachmal\ntetradrachmon\ntetradymite\nTetradynamia\ntetradynamian\ntetradynamious\ntetradynamous\ntetraedron\ntetraedrum\ntetraethylsilane\ntetrafluoride\ntetrafolious\ntetragamy\ntetragenous\ntetraglot\ntetraglottic\ntetragon\ntetragonal\ntetragonally\ntetragonalness\nTetragonia\nTetragoniaceae\ntetragonidium\ntetragonous\ntetragonus\ntetragram\ntetragrammatic\nTetragrammaton\ntetragrammatonic\ntetragyn\nTetragynia\ntetragynian\ntetragynous\ntetrahedral\ntetrahedrally\ntetrahedric\ntetrahedrite\ntetrahedroid\ntetrahedron\ntetrahexahedral\ntetrahexahedron\ntetrahydrate\ntetrahydrated\ntetrahydric\ntetrahydride\ntetrahydro\ntetrahydroxy\ntetraiodid\ntetraiodide\ntetraiodo\ntetraiodophenolphthalein\ntetrakaidecahedron\ntetraketone\ntetrakisazo\ntetrakishexahedron\ntetralemma\nTetralin\ntetralogic\ntetralogue\ntetralogy\ntetralophodont\ntetramastia\ntetramastigote\nTetramera\ntetrameral\ntetrameralian\ntetrameric\ntetramerism\ntetramerous\ntetrameter\ntetramethyl\ntetramethylammonium\ntetramethylene\ntetramethylium\ntetramin\ntetramine\ntetrammine\ntetramorph\ntetramorphic\ntetramorphism\ntetramorphous\ntetrander\nTetrandria\ntetrandrian\ntetrandrous\ntetrane\ntetranitrate\ntetranitro\ntetranitroaniline\ntetranuclear\nTetranychus\nTetrao\nTetraodon\ntetraodont\nTetraodontidae\ntetraonid\nTetraonidae\nTetraoninae\ntetraonine\nTetrapanax\ntetrapartite\ntetrapetalous\ntetraphalangeate\ntetrapharmacal\ntetrapharmacon\ntetraphenol\ntetraphony\ntetraphosphate\ntetraphyllous\ntetrapla\ntetraplegia\ntetrapleuron\ntetraploid\ntetraploidic\ntetraploidy\ntetraplous\nTetrapneumona\nTetrapneumones\ntetrapneumonian\ntetrapneumonous\ntetrapod\nTetrapoda\ntetrapodic\ntetrapody\ntetrapolar\ntetrapolis\ntetrapolitan\ntetrapous\ntetraprostyle\ntetrapteran\ntetrapteron\ntetrapterous\ntetraptote\nTetrapturus\ntetraptych\ntetrapylon\ntetrapyramid\ntetrapyrenous\ntetraquetrous\ntetrarch\ntetrarchate\ntetrarchic\ntetrarchy\ntetrasaccharide\ntetrasalicylide\ntetraselenodont\ntetraseme\ntetrasemic\ntetrasepalous\ntetraskelion\ntetrasome\ntetrasomic\ntetrasomy\ntetraspermal\ntetraspermatous\ntetraspermous\ntetraspheric\ntetrasporange\ntetrasporangiate\ntetrasporangium\ntetraspore\ntetrasporic\ntetrasporiferous\ntetrasporous\ntetraster\ntetrastich\ntetrastichal\ntetrastichic\nTetrastichidae\ntetrastichous\nTetrastichus\ntetrastoon\ntetrastyle\ntetrastylic\ntetrastylos\ntetrastylous\ntetrasubstituted\ntetrasubstitution\ntetrasulphide\ntetrasyllabic\ntetrasyllable\ntetrasymmetry\ntetrathecal\ntetratheism\ntetratheite\ntetrathionates\ntetrathionic\ntetratomic\ntetratone\ntetravalence\ntetravalency\ntetravalent\ntetraxial\ntetraxon\nTetraxonia\ntetraxonian\ntetraxonid\nTetraxonida\ntetrazane\ntetrazene\ntetrazin\ntetrazine\ntetrazo\ntetrazole\ntetrazolium\ntetrazolyl\ntetrazone\ntetrazotization\ntetrazotize\ntetrazyl\ntetremimeral\ntetrevangelium\ntetric\ntetrical\ntetricity\ntetricous\ntetrigid\nTetrigidae\ntetriodide\nTetrix\ntetrobol\ntetrobolon\ntetrode\nTetrodon\ntetrodont\nTetrodontidae\ntetrole\ntetrolic\ntetronic\ntetronymal\ntetrose\ntetroxalate\ntetroxide\ntetrsyllabical\ntetryl\ntetrylene\ntetter\ntetterish\ntetterous\ntetterwort\ntettery\nTettigidae\ntettigoniid\nTettigoniidae\ntettix\nTetum\nTeucer\nTeucri\nTeucrian\nteucrin\nTeucrium\nteufit\nteuk\nTeutolatry\nTeutomania\nTeutomaniac\nTeuton\nTeutondom\nTeutonesque\nTeutonia\nTeutonic\nTeutonically\nTeutonicism\nTeutonism\nTeutonist\nTeutonity\nTeutonization\nTeutonize\nTeutonomania\nTeutonophobe\nTeutonophobia\nTeutophil\nTeutophile\nTeutophilism\nTeutophobe\nTeutophobia\nTeutophobism\nteviss\ntew\nTewa\ntewel\ntewer\ntewit\ntewly\ntewsome\nTexan\nTexas\nTexcocan\ntexguino\ntext\ntextarian\ntextbook\ntextbookless\ntextiferous\ntextile\ntextilist\ntextlet\ntextman\ntextorial\ntextrine\ntextual\ntextualism\ntextualist\ntextuality\ntextually\ntextuarist\ntextuary\ntextural\ntexturally\ntexture\ntextureless\ntez\nTezcatlipoca\nTezcatzoncatl\nTezcucan\ntezkere\nth\ntha\nthack\nthacker\nThackerayan\nThackerayana\nThackerayesque\nthackless\nThad\nThai\nThais\nthakur\nthakurate\nthalamencephalic\nthalamencephalon\nthalami\nthalamic\nThalamiflorae\nthalamifloral\nthalamiflorous\nthalamite\nthalamium\nthalamocele\nthalamocoele\nthalamocortical\nthalamocrural\nthalamolenticular\nthalamomammillary\nthalamopeduncular\nThalamophora\nthalamotegmental\nthalamotomy\nthalamus\nThalarctos\nthalassal\nThalassarctos\nthalassian\nthalassic\nthalassinid\nThalassinidea\nthalassinidian\nthalassinoid\nthalassiophyte\nthalassiophytous\nthalasso\nThalassochelys\nthalassocracy\nthalassocrat\nthalassographer\nthalassographic\nthalassographical\nthalassography\nthalassometer\nthalassophilous\nthalassophobia\nthalassotherapy\nthalattology\nthalenite\nthaler\nThalesia\nThalesian\nThalessa\nThalia\nThaliacea\nthaliacean\nThalian\nThaliard\nThalictrum\nthalli\nthallic\nthalliferous\nthalliform\nthalline\nthallious\nthallium\nthallochlore\nthallodal\nthallogen\nthallogenic\nthallogenous\nthalloid\nthallome\nThallophyta\nthallophyte\nthallophytic\nthallose\nthallous\nthallus\nthalposis\nthalpotic\nthalthan\nthameng\nThamesis\nThamnidium\nthamnium\nthamnophile\nThamnophilinae\nthamnophiline\nThamnophilus\nThamnophis\nThamudean\nThamudene\nThamudic\nthamuria\nThamus\nThamyras\nthan\nthana\nthanadar\nthanage\nthanan\nthanatism\nthanatist\nthanatobiologic\nthanatognomonic\nthanatographer\nthanatography\nthanatoid\nthanatological\nthanatologist\nthanatology\nthanatomantic\nthanatometer\nthanatophidia\nthanatophidian\nthanatophobe\nthanatophobia\nthanatophobiac\nthanatophoby\nthanatopsis\nThanatos\nthanatosis\nthanatotic\nthanatousia\nthane\nthanedom\nthanehood\nthaneland\nthaneship\nthank\nthankee\nthanker\nthankful\nthankfully\nthankfulness\nthankless\nthanklessly\nthanklessness\nthanks\nthanksgiver\nthanksgiving\nthankworthily\nthankworthiness\nthankworthy\nthapes\nThapsia\nthapsia\nthar\nTharen\ntharf\ntharfcake\nThargelion\ntharginyah\ntharm\nThasian\nThaspium\nthat\nthatch\nthatcher\nthatching\nthatchless\nthatchwood\nthatchwork\nthatchy\nthatn\nthatness\nthats\nthaught\nThaumantian\nThaumantias\nthaumasite\nthaumatogeny\nthaumatography\nthaumatolatry\nthaumatology\nthaumatrope\nthaumatropical\nthaumaturge\nthaumaturgia\nthaumaturgic\nthaumaturgical\nthaumaturgics\nthaumaturgism\nthaumaturgist\nthaumaturgy\nthaumoscopic\nthave\nthaw\nthawer\nthawless\nthawn\nthawy\nThe\nthe\nThea\nTheaceae\ntheaceous\ntheah\ntheandric\ntheanthropic\ntheanthropical\ntheanthropism\ntheanthropist\ntheanthropology\ntheanthropophagy\ntheanthropos\ntheanthroposophy\ntheanthropy\nthearchic\nthearchy\ntheasum\ntheat\ntheater\ntheatergoer\ntheatergoing\ntheaterless\ntheaterlike\ntheaterward\ntheaterwards\ntheaterwise\nTheatine\ntheatral\ntheatric\ntheatricable\ntheatrical\ntheatricalism\ntheatricality\ntheatricalization\ntheatricalize\ntheatrically\ntheatricalness\ntheatricals\ntheatrician\ntheatricism\ntheatricize\ntheatrics\ntheatrize\ntheatrocracy\ntheatrograph\ntheatromania\ntheatromaniac\ntheatron\ntheatrophile\ntheatrophobia\ntheatrophone\ntheatrophonic\ntheatropolis\ntheatroscope\ntheatry\ntheave\ntheb\nThebaic\nThebaid\nthebaine\nThebais\nthebaism\nTheban\nThebesian\ntheca\nthecae\nthecal\nThecamoebae\nthecaphore\nthecasporal\nthecaspore\nthecaspored\nthecasporous\nThecata\nthecate\nthecia\nthecitis\nthecium\nThecla\nthecla\ntheclan\nthecodont\nthecoglossate\nthecoid\nThecoidea\nThecophora\nThecosomata\nthecosomatous\nthee\ntheek\ntheeker\ntheelin\ntheelol\nTheemim\ntheer\ntheet\ntheetsee\ntheezan\ntheft\ntheftbote\ntheftdom\ntheftless\ntheftproof\ntheftuous\ntheftuously\nthegether\nthegidder\nthegither\nthegn\nthegndom\nthegnhood\nthegnland\nthegnlike\nthegnly\nthegnship\nthegnworthy\ntheiform\nTheileria\ntheine\ntheinism\ntheir\ntheirn\ntheirs\ntheirselves\ntheirsens\ntheism\ntheist\ntheistic\ntheistical\ntheistically\nthelalgia\nThelemite\nthelemite\nThelephora\nThelephoraceae\nTheligonaceae\ntheligonaceous\nTheligonum\nthelitis\nthelium\nThelodontidae\nThelodus\ntheloncus\nthelorrhagia\nThelphusa\nthelphusian\nThelphusidae\nthelyblast\nthelyblastic\nthelyotokous\nthelyotoky\nThelyphonidae\nThelyphonus\nthelyplasty\nthelytocia\nthelytoky\nthelytonic\nthem\nthema\nthemata\nthematic\nthematical\nthematically\nthematist\ntheme\nthemeless\nthemelet\nthemer\nThemis\nthemis\nThemistian\nthemsel\nthemselves\nthen\nthenabouts\nthenadays\nthenal\nthenar\nthenardite\nthence\nthenceafter\nthenceforth\nthenceforward\nthenceforwards\nthencefrom\nthenceward\nthenness\nTheo\ntheoanthropomorphic\ntheoanthropomorphism\ntheoastrological\nTheobald\nTheobroma\ntheobromic\ntheobromine\ntheocentric\ntheocentricism\ntheocentrism\ntheochristic\ntheocollectivism\ntheocollectivist\ntheocracy\ntheocrasia\ntheocrasical\ntheocrasy\ntheocrat\ntheocratic\ntheocratical\ntheocratically\ntheocratist\nTheocritan\nTheocritean\ntheodemocracy\ntheodicaea\ntheodicean\ntheodicy\ntheodidact\ntheodolite\ntheodolitic\nTheodora\nTheodore\nTheodoric\nTheodosia\nTheodosian\nTheodotian\ntheodrama\ntheody\ntheogamy\ntheogeological\ntheognostic\ntheogonal\ntheogonic\ntheogonism\ntheogonist\ntheogony\ntheohuman\ntheokrasia\ntheoktonic\ntheoktony\ntheolatrous\ntheolatry\ntheolepsy\ntheoleptic\ntheologal\ntheologaster\ntheologastric\ntheologate\ntheologeion\ntheologer\ntheologi\ntheologian\ntheologic\ntheological\ntheologically\ntheologician\ntheologicoastronomical\ntheologicoethical\ntheologicohistorical\ntheologicometaphysical\ntheologicomilitary\ntheologicomoral\ntheologiconatural\ntheologicopolitical\ntheologics\ntheologism\ntheologist\ntheologium\ntheologization\ntheologize\ntheologizer\ntheologoumena\ntheologoumenon\ntheologue\ntheologus\ntheology\ntheomachia\ntheomachist\ntheomachy\ntheomammomist\ntheomancy\ntheomania\ntheomaniac\ntheomantic\ntheomastix\ntheomicrist\ntheomisanthropist\ntheomorphic\ntheomorphism\ntheomorphize\ntheomythologer\ntheomythology\ntheonomy\ntheopantism\nTheopaschist\nTheopaschitally\nTheopaschite\nTheopaschitic\nTheopaschitism\ntheopathetic\ntheopathic\ntheopathy\ntheophagic\ntheophagite\ntheophagous\ntheophagy\nTheophania\ntheophania\ntheophanic\ntheophanism\ntheophanous\ntheophany\nTheophila\ntheophilanthrope\ntheophilanthropic\ntheophilanthropism\ntheophilanthropist\ntheophilanthropy\ntheophile\ntheophilist\ntheophilosophic\nTheophilus\ntheophobia\ntheophoric\ntheophorous\nTheophrastaceae\ntheophrastaceous\nTheophrastan\nTheophrastean\ntheophylline\ntheophysical\ntheopneust\ntheopneusted\ntheopneustia\ntheopneustic\ntheopneusty\ntheopolitician\ntheopolitics\ntheopolity\ntheopsychism\ntheorbist\ntheorbo\ntheorem\ntheorematic\ntheorematical\ntheorematically\ntheorematist\ntheoremic\ntheoretic\ntheoretical\ntheoreticalism\ntheoretically\ntheoretician\ntheoreticopractical\ntheoretics\ntheoria\ntheoriai\ntheoric\ntheorical\ntheorically\ntheorician\ntheoricon\ntheorics\ntheorism\ntheorist\ntheorization\ntheorize\ntheorizer\ntheorum\ntheory\ntheoryless\ntheorymonger\ntheosoph\ntheosopheme\ntheosophic\ntheosophical\ntheosophically\ntheosophism\ntheosophist\ntheosophistic\ntheosophistical\ntheosophize\ntheosophy\ntheotechnic\ntheotechnist\ntheotechny\ntheoteleological\ntheoteleology\ntheotherapy\nTheotokos\ntheow\ntheowdom\ntheowman\nTheraean\ntheralite\ntherapeusis\nTherapeutae\nTherapeutic\ntherapeutic\ntherapeutical\ntherapeutically\ntherapeutics\ntherapeutism\ntherapeutist\nTheraphosa\ntheraphose\ntheraphosid\nTheraphosidae\ntheraphosoid\ntherapist\ntherapsid\nTherapsida\ntherapy\ntherblig\nthere\nthereabouts\nthereabove\nthereacross\nthereafter\nthereafterward\nthereagainst\nthereamong\nthereamongst\nthereanent\nthereanents\ntherearound\nthereas\nthereat\nthereaway\nthereaways\ntherebeside\ntherebesides\ntherebetween\nthereby\nthereckly\ntherefor\ntherefore\ntherefrom\ntherehence\ntherein\nthereinafter\nthereinbefore\nthereinto\ntherence\nthereness\nthereof\nthereoid\nthereologist\nthereology\nthereon\nthereout\nthereover\nthereright\ntheres\nTheresa\ntherese\ntherethrough\ntheretill\nthereto\ntheretofore\ntheretoward\nthereunder\nthereuntil\nthereunto\nthereup\nthereupon\nThereva\ntherevid\nTherevidae\ntherewhile\ntherewith\ntherewithal\ntherewithin\nTheria\ntheriac\ntheriaca\ntheriacal\ntherial\ntherianthropic\ntherianthropism\ntheriatrics\ntheridiid\nTheridiidae\nTheridion\ntheriodic\ntheriodont\nTheriodonta\nTheriodontia\ntheriolatry\ntheriomancy\ntheriomaniac\ntheriomimicry\ntheriomorph\ntheriomorphic\ntheriomorphism\ntheriomorphosis\ntheriomorphous\ntheriotheism\ntheriotrophical\ntheriozoic\ntherm\nthermacogenesis\nthermae\nthermal\nthermalgesia\nthermality\nthermally\nthermanalgesia\nthermanesthesia\nthermantic\nthermantidote\nthermatologic\nthermatologist\nthermatology\nthermesthesia\nthermesthesiometer\nthermetograph\nthermetrograph\nthermic\nthermically\nThermidorian\nthermion\nthermionic\nthermionically\nthermionics\nthermistor\nThermit\nthermit\nthermite\nthermo\nthermoammeter\nthermoanalgesia\nthermoanesthesia\nthermobarograph\nthermobarometer\nthermobattery\nthermocautery\nthermochemic\nthermochemical\nthermochemically\nthermochemist\nthermochemistry\nthermochroic\nthermochrosy\nthermocline\nthermocouple\nthermocurrent\nthermodiffusion\nthermoduric\nthermodynamic\nthermodynamical\nthermodynamically\nthermodynamician\nthermodynamicist\nthermodynamics\nthermodynamist\nthermoelectric\nthermoelectrical\nthermoelectrically\nthermoelectricity\nthermoelectrometer\nthermoelectromotive\nthermoelement\nthermoesthesia\nthermoexcitory\nthermogalvanometer\nthermogen\nthermogenerator\nthermogenesis\nthermogenetic\nthermogenic\nthermogenous\nthermogeny\nthermogeographical\nthermogeography\nthermogram\nthermograph\nthermography\nthermohyperesthesia\nthermojunction\nthermokinematics\nthermolabile\nthermolability\nthermological\nthermology\nthermoluminescence\nthermoluminescent\nthermolysis\nthermolytic\nthermolyze\nthermomagnetic\nthermomagnetism\nthermometamorphic\nthermometamorphism\nthermometer\nthermometerize\nthermometric\nthermometrical\nthermometrically\nthermometrograph\nthermometry\nthermomotive\nthermomotor\nthermomultiplier\nthermonastic\nthermonasty\nthermonatrite\nthermoneurosis\nthermoneutrality\nthermonous\nthermonuclear\nthermopair\nthermopalpation\nthermopenetration\nthermoperiod\nthermoperiodic\nthermoperiodicity\nthermoperiodism\nthermophile\nthermophilic\nthermophilous\nthermophobous\nthermophone\nthermophore\nthermophosphor\nthermophosphorescence\nthermopile\nthermoplastic\nthermoplasticity\nthermoplegia\nthermopleion\nthermopolymerization\nthermopolypnea\nthermopolypneic\nThermopsis\nthermoradiotherapy\nthermoreduction\nthermoregulation\nthermoregulator\nthermoresistance\nthermoresistant\nthermos\nthermoscope\nthermoscopic\nthermoscopical\nthermoscopically\nthermosetting\nthermosiphon\nthermostability\nthermostable\nthermostat\nthermostatic\nthermostatically\nthermostatics\nthermostimulation\nthermosynthesis\nthermosystaltic\nthermosystaltism\nthermotactic\nthermotank\nthermotaxic\nthermotaxis\nthermotelephone\nthermotensile\nthermotension\nthermotherapeutics\nthermotherapy\nthermotic\nthermotical\nthermotically\nthermotics\nthermotropic\nthermotropism\nthermotropy\nthermotype\nthermotypic\nthermotypy\nthermovoltaic\ntherodont\ntheroid\ntherolatry\ntherologic\ntherological\ntherologist\ntherology\nTheromora\nTheromores\ntheromorph\nTheromorpha\ntheromorphia\ntheromorphic\ntheromorphism\ntheromorphological\ntheromorphology\ntheromorphous\nTheron\ntheropod\nTheropoda\ntheropodous\nthersitean\nThersites\nthersitical\nthesauri\nthesaurus\nthese\nThesean\ntheses\nTheseum\nTheseus\nthesial\nthesicle\nthesis\nThesium\nThesmophoria\nThesmophorian\nThesmophoric\nthesmothetae\nthesmothete\nthesmothetes\nthesocyte\nThespesia\nThespesius\nThespian\nThessalian\nThessalonian\nthestreen\ntheta\nthetch\nthetic\nthetical\nthetically\nthetics\nthetin\nthetine\nThetis\ntheurgic\ntheurgical\ntheurgically\ntheurgist\ntheurgy\nThevetia\nthevetin\nthew\nthewed\nthewless\nthewness\nthewy\nthey\ntheyll\ntheyre\nthiacetic\nthiadiazole\nthialdine\nthiamide\nthiamin\nthiamine\nthianthrene\nthiasi\nthiasine\nthiasite\nthiasoi\nthiasos\nthiasote\nthiasus\nthiazine\nthiazole\nthiazoline\nthick\nthickbrained\nthicken\nthickener\nthickening\nthicket\nthicketed\nthicketful\nthickety\nthickhead\nthickheaded\nthickheadedly\nthickheadedness\nthickish\nthickleaf\nthicklips\nthickly\nthickneck\nthickness\nthicknessing\nthickset\nthickskin\nthickskull\nthickskulled\nthickwind\nthickwit\nthief\nthiefcraft\nthiefdom\nthiefland\nthiefmaker\nthiefmaking\nthiefproof\nthieftaker\nthiefwise\nThielavia\nThielaviopsis\nthienone\nthienyl\nThierry\nthievable\nthieve\nthieveless\nthiever\nthievery\nthieving\nthievingly\nthievish\nthievishly\nthievishness\nthig\nthigger\nthigging\nthigh\nthighbone\nthighed\nthight\nthightness\nthigmonegative\nthigmopositive\nthigmotactic\nthigmotactically\nthigmotaxis\nthigmotropic\nthigmotropically\nthigmotropism\nThilanottine\nthilk\nthill\nthiller\nthilly\nthimber\nthimble\nthimbleberry\nthimbled\nthimbleflower\nthimbleful\nthimblelike\nthimblemaker\nthimblemaking\nthimbleman\nthimblerig\nthimblerigger\nthimbleriggery\nthimblerigging\nthimbleweed\nthin\nthinbrained\nthine\nthing\nthingal\nthingamabob\nthinghood\nthinginess\nthingish\nthingless\nthinglet\nthinglike\nthinglikeness\nthingliness\nthingly\nthingman\nthingness\nthingstead\nthingum\nthingumajig\nthingumbob\nthingummy\nthingy\nThink\nthink\nthinkable\nthinkableness\nthinkably\nthinker\nthinkful\nthinking\nthinkingly\nthinkingpart\nthinkling\nthinly\nthinner\nthinness\nthinning\nthinnish\nThinocoridae\nThinocorus\nthinolite\nthio\nthioacetal\nthioacetic\nthioalcohol\nthioaldehyde\nthioamide\nthioantimonate\nthioantimoniate\nthioantimonious\nthioantimonite\nthioarsenate\nthioarseniate\nthioarsenic\nthioarsenious\nthioarsenite\nThiobacillus\nThiobacteria\nthiobacteria\nThiobacteriales\nthiobismuthite\nthiocarbamic\nthiocarbamide\nthiocarbamyl\nthiocarbanilide\nthiocarbimide\nthiocarbonate\nthiocarbonic\nthiocarbonyl\nthiochloride\nthiochrome\nthiocresol\nthiocyanate\nthiocyanation\nthiocyanic\nthiocyanide\nthiocyano\nthiocyanogen\nthiodiazole\nthiodiphenylamine\nthiofuran\nthiofurane\nthiofurfuran\nthiofurfurane\nthiogycolic\nthiohydrate\nthiohydrolysis\nthiohydrolyze\nthioindigo\nthioketone\nthiol\nthiolacetic\nthiolactic\nthiolic\nthionamic\nthionaphthene\nthionate\nthionation\nthioneine\nthionic\nthionine\nthionitrite\nthionium\nthionobenzoic\nthionthiolic\nthionurate\nthionyl\nthionylamine\nthiophen\nthiophene\nthiophenic\nthiophenol\nthiophosgene\nthiophosphate\nthiophosphite\nthiophosphoric\nthiophosphoryl\nthiophthene\nthiopyran\nthioresorcinol\nthiosinamine\nThiospira\nthiostannate\nthiostannic\nthiostannite\nthiostannous\nthiosulphate\nthiosulphonic\nthiosulphuric\nThiothrix\nthiotolene\nthiotungstate\nthiotungstic\nthiouracil\nthiourea\nthiourethan\nthiourethane\nthioxene\nthiozone\nthiozonide\nthir\nthird\nthirdborough\nthirdings\nthirdling\nthirdly\nthirdness\nthirdsman\nthirl\nthirlage\nthirling\nthirst\nthirster\nthirstful\nthirstily\nthirstiness\nthirsting\nthirstingly\nthirstland\nthirstle\nthirstless\nthirstlessness\nthirstproof\nthirsty\nthirt\nthirteen\nthirteener\nthirteenfold\nthirteenth\nthirteenthly\nthirtieth\nthirty\nthirtyfold\nthirtyish\nthis\nthishow\nthislike\nthisn\nthisness\nthissen\nthistle\nthistlebird\nthistled\nthistledown\nthistlelike\nthistleproof\nthistlery\nthistlish\nthistly\nthiswise\nthither\nthitherto\nthitherward\nthitsiol\nthiuram\nthivel\nthixle\nthixolabile\nthixotropic\nthixotropy\nThlaspi\nThlingchadinne\nThlinget\nthlipsis\nTho\ntho\nthob\nthocht\nthof\nthoft\nthoftfellow\nthoke\nthokish\nthole\ntholeiite\ntholepin\ntholi\ntholoi\ntholos\ntholus\nThomaean\nThomas\nThomasa\nThomasine\nthomasing\nThomasite\nthomisid\nThomisidae\nThomism\nThomist\nThomistic\nThomistical\nThomite\nThomomys\nthomsenolite\nThomsonian\nThomsonianism\nthomsonite\nthon\nthonder\nThondracians\nThondraki\nThondrakians\nthone\nthong\nThonga\nthonged\nthongman\nthongy\nthoo\nthooid\nthoom\nthoracalgia\nthoracaorta\nthoracectomy\nthoracentesis\nthoraces\nthoracic\nThoracica\nthoracical\nthoracicoabdominal\nthoracicoacromial\nthoracicohumeral\nthoracicolumbar\nthoraciform\nthoracispinal\nthoracoabdominal\nthoracoacromial\nthoracobronchotomy\nthoracoceloschisis\nthoracocentesis\nthoracocyllosis\nthoracocyrtosis\nthoracodelphus\nthoracodidymus\nthoracodorsal\nthoracodynia\nthoracogastroschisis\nthoracograph\nthoracohumeral\nthoracolumbar\nthoracolysis\nthoracomelus\nthoracometer\nthoracometry\nthoracomyodynia\nthoracopagus\nthoracoplasty\nthoracoschisis\nthoracoscope\nthoracoscopy\nThoracostei\nthoracostenosis\nthoracostomy\nThoracostraca\nthoracostracan\nthoracostracous\nthoracotomy\nthoral\nthorascope\nthorax\nthore\nthoria\nthorianite\nthoriate\nthoric\nthoriferous\nthorina\nthorite\nthorium\nthorn\nthornback\nthornbill\nthornbush\nthorned\nthornen\nthornhead\nthornily\nthorniness\nthornless\nthornlessness\nthornlet\nthornlike\nthornproof\nthornstone\nthorntail\nthorny\nthoro\nthorocopagous\nthorogummite\nthoron\nthorough\nThoroughbred\nthoroughbred\nthoroughbredness\nthoroughfare\nthoroughfarer\nthoroughfaresome\nthoroughfoot\nthoroughgoing\nthoroughgoingly\nthoroughgoingness\nthoroughgrowth\nthoroughly\nthoroughness\nthoroughpaced\nthoroughpin\nthoroughsped\nthoroughstem\nthoroughstitch\nthoroughstitched\nthoroughwax\nthoroughwort\nthorp\nthort\nthorter\nthortveitite\nThos\nThose\nthose\nthou\nthough\nthought\nthoughted\nthoughten\nthoughtful\nthoughtfully\nthoughtfulness\nthoughtkin\nthoughtless\nthoughtlessly\nthoughtlessness\nthoughtlet\nthoughtness\nthoughtsick\nthoughty\nthousand\nthousandfold\nthousandfoldly\nthousandth\nthousandweight\nthouse\nthow\nthowel\nthowless\nthowt\nThraces\nThracian\nthrack\nthraep\nthrail\nthrain\nthrall\nthrallborn\nthralldom\nthram\nthrammle\nthrang\nthrangity\nthranite\nthranitic\nthrap\nthrapple\nthrash\nthrashel\nthrasher\nthrasherman\nthrashing\nthrasonic\nthrasonical\nthrasonically\nthrast\nThraupidae\nthrave\nthraver\nthraw\nthrawcrook\nthrawn\nthrawneen\nThrax\nthread\nthreadbare\nthreadbareness\nthreadbarity\nthreaded\nthreaden\nthreader\nthreadfin\nthreadfish\nthreadflower\nthreadfoot\nthreadiness\nthreadle\nthreadless\nthreadlet\nthreadlike\nthreadmaker\nthreadmaking\nthreadway\nthreadweed\nthreadworm\nthready\nthreap\nthreaper\nthreat\nthreaten\nthreatenable\nthreatener\nthreatening\nthreateningly\nthreatful\nthreatfully\nthreatless\nthreatproof\nthree\nthreefold\nthreefolded\nthreefoldedness\nthreefoldly\nthreefoldness\nthreeling\nthreeness\nthreepence\nthreepenny\nthreepennyworth\nthreescore\nthreesome\nthremmatology\nthrene\nthrenetic\nthrenetical\nthrenode\nthrenodial\nthrenodian\nthrenodic\nthrenodical\nthrenodist\nthrenody\nthrenos\nthreonin\nthreonine\nthreose\nthrepsology\nthreptic\nthresh\nthreshel\nthresher\nthresherman\nthreshingtime\nthreshold\nThreskiornithidae\nThreskiornithinae\nthrew\nthribble\nthrice\nthricecock\nthridacium\nthrift\nthriftbox\nthriftily\nthriftiness\nthriftless\nthriftlessly\nthriftlessness\nthriftlike\nthrifty\nthrill\nthriller\nthrillful\nthrillfully\nthrilling\nthrillingly\nthrillingness\nthrillproof\nthrillsome\nthrilly\nthrimble\nthrimp\nThrinax\nthring\nthrinter\nthrioboly\nthrip\nthripel\nThripidae\nthripple\nthrips\nthrive\nthriveless\nthriven\nthriver\nthriving\nthrivingly\nthrivingness\nthro\nthroat\nthroatal\nthroatband\nthroated\nthroatful\nthroatily\nthroatiness\nthroating\nthroatlash\nthroatlatch\nthroatless\nthroatlet\nthroatroot\nthroatstrap\nthroatwort\nthroaty\nthrob\nthrobber\nthrobbingly\nthrobless\nthrock\nthrodden\nthroddy\nthroe\nthrombase\nthrombin\nthromboangiitis\nthromboarteritis\nthrombocyst\nthrombocyte\nthrombocytopenia\nthrombogen\nthrombogenic\nthromboid\nthrombokinase\nthrombolymphangitis\nthrombopenia\nthrombophlebitis\nthromboplastic\nthromboplastin\nthrombose\nthrombosis\nthrombostasis\nthrombotic\nthrombus\nthronal\nthrone\nthronedom\nthroneless\nthronelet\nthronelike\nthroneward\nthrong\nthronger\nthrongful\nthrongingly\nthronize\nthropple\nthrostle\nthrostlelike\nthrottle\nthrottler\nthrottling\nthrottlingly\nthrou\nthrouch\nthroucht\nthrough\nthroughbear\nthroughbred\nthroughcome\nthroughgang\nthroughganging\nthroughgoing\nthroughgrow\nthroughknow\nthroughout\nthroughput\nthrove\nthrow\nthrowaway\nthrowback\nthrowdown\nthrower\nthrowing\nthrown\nthrowoff\nthrowout\nthrowster\nthrowwort\nthrum\nthrummer\nthrummers\nthrummy\nthrumwort\nthrush\nthrushel\nthrushlike\nthrushy\nthrust\nthruster\nthrustful\nthrustfulness\nthrusting\nthrustings\nthrutch\nthrutchings\nThruthvang\nthruv\nthrymsa\nThryonomys\nThuan\nThuban\nThucydidean\nthud\nthudding\nthuddingly\nthug\nthugdom\nthuggee\nthuggeeism\nthuggery\nthuggess\nthuggish\nthuggism\nThuidium\nThuja\nthujene\nthujin\nthujone\nThujopsis\nthujyl\nThule\nthulia\nthulir\nthulite\nthulium\nthulr\nthuluth\nthumb\nthumbbird\nthumbed\nthumber\nthumbkin\nthumble\nthumbless\nthumblike\nthumbmark\nthumbnail\nthumbpiece\nthumbprint\nthumbrope\nthumbscrew\nthumbstall\nthumbstring\nthumbtack\nthumby\nthumlungur\nthump\nthumper\nthumping\nthumpingly\nThunar\nThunbergia\nthunbergilene\nthunder\nthunderation\nthunderball\nthunderbearer\nthunderbearing\nthunderbird\nthunderblast\nthunderbolt\nthunderburst\nthunderclap\nthundercloud\nthundercrack\nthunderer\nthunderfish\nthunderflower\nthunderful\nthunderhead\nthunderheaded\nthundering\nthunderingly\nthunderless\nthunderlike\nthunderous\nthunderously\nthunderousness\nthunderpeal\nthunderplump\nthunderproof\nthundershower\nthundersmite\nthundersquall\nthunderstick\nthunderstone\nthunderstorm\nthunderstrike\nthunderstroke\nthunderstruck\nthunderwood\nthunderworm\nthunderwort\nthundery\nthundrous\nthundrously\nthung\nthunge\nThunnidae\nThunnus\nThunor\nthuoc\nThurberia\nthurible\nthuribuler\nthuribulum\nthurifer\nthuriferous\nthurificate\nthurificati\nthurification\nthurify\nThuringian\nthuringite\nThurio\nthurl\nthurm\nthurmus\nThurnia\nThurniaceae\nthurrock\nThursday\nthurse\nthurt\nthus\nthusgate\nThushi\nthusly\nthusness\nthuswise\nthutter\nThuyopsis\nthwack\nthwacker\nthwacking\nthwackingly\nthwackstave\nthwaite\nthwart\nthwartedly\nthwarteous\nthwarter\nthwarting\nthwartingly\nthwartly\nthwartman\nthwartness\nthwartover\nthwartsaw\nthwartship\nthwartships\nthwartways\nthwartwise\nthwite\nthwittle\nthy\nThyestean\nThyestes\nthyine\nthylacine\nthylacitis\nThylacoleo\nThylacynus\nthymacetin\nThymallidae\nThymallus\nthymate\nthyme\nthymectomize\nthymectomy\nthymegol\nThymelaea\nThymelaeaceae\nthymelaeaceous\nThymelaeales\nthymelcosis\nthymele\nthymelic\nthymelical\nthymelici\nthymene\nthymetic\nthymic\nthymicolymphatic\nthymine\nthymiosis\nthymitis\nthymocyte\nthymogenic\nthymol\nthymolate\nthymolize\nthymolphthalein\nthymolsulphonephthalein\nthymoma\nthymonucleic\nthymopathy\nthymoprivic\nthymoprivous\nthymopsyche\nthymoquinone\nthymotactic\nthymotic\nThymus\nthymus\nthymy\nthymyl\nthymylic\nthynnid\nThynnidae\nThyraden\nthyratron\nthyreoadenitis\nthyreoantitoxin\nthyreoarytenoid\nthyreoarytenoideus\nthyreocervical\nthyreocolloid\nThyreocoridae\nthyreoepiglottic\nthyreogenic\nthyreogenous\nthyreoglobulin\nthyreoglossal\nthyreohyal\nthyreohyoid\nthyreoid\nthyreoidal\nthyreoideal\nthyreoidean\nthyreoidectomy\nthyreoiditis\nthyreoitis\nthyreolingual\nthyreoprotein\nthyreosis\nthyreotomy\nthyreotoxicosis\nthyreotropic\nthyridial\nThyrididae\nthyridium\nThyris\nthyrisiferous\nthyroadenitis\nthyroantitoxin\nthyroarytenoid\nthyroarytenoideus\nthyrocardiac\nthyrocele\nthyrocervical\nthyrocolloid\nthyrocricoid\nthyroepiglottic\nthyroepiglottidean\nthyrogenic\nthyroglobulin\nthyroglossal\nthyrohyal\nthyrohyoid\nthyrohyoidean\nthyroid\nthyroidal\nthyroidea\nthyroideal\nthyroidean\nthyroidectomize\nthyroidectomy\nthyroidism\nthyroiditis\nthyroidization\nthyroidless\nthyroidotomy\nthyroiodin\nthyrolingual\nthyronine\nthyroparathyroidectomize\nthyroparathyroidectomy\nthyroprival\nthyroprivia\nthyroprivic\nthyroprivous\nthyroprotein\nThyrostraca\nthyrostracan\nthyrotherapy\nthyrotomy\nthyrotoxic\nthyrotoxicosis\nthyrotropic\nthyroxine\nthyrse\nthyrsiflorous\nthyrsiform\nthyrsoid\nthyrsoidal\nthyrsus\nThysanocarpus\nthysanopter\nThysanoptera\nthysanopteran\nthysanopteron\nthysanopterous\nThysanoura\nthysanouran\nthysanourous\nThysanura\nthysanuran\nthysanurian\nthysanuriform\nthysanurous\nthysel\nthyself\nthysen\nTi\nti\nTiahuanacan\nTiam\ntiang\ntiao\ntiar\ntiara\ntiaralike\ntiarella\nTiatinagua\ntib\nTibbie\nTibbu\ntibby\nTiberian\nTiberine\nTiberius\ntibet\nTibetan\ntibey\ntibia\ntibiad\ntibiae\ntibial\ntibiale\ntibicinist\ntibiocalcanean\ntibiofemoral\ntibiofibula\ntibiofibular\ntibiometatarsal\ntibionavicular\ntibiopopliteal\ntibioscaphoid\ntibiotarsal\ntibiotarsus\nTibouchina\ntibourbou\ntiburon\nTiburtine\ntic\ntical\nticca\ntice\nticement\nticer\nTichodroma\ntichodrome\ntichorrhine\ntick\ntickbean\ntickbird\ntickeater\nticked\nticken\nticker\nticket\nticketer\nticketing\nticketless\nticketmonger\ntickey\ntickicide\ntickie\nticking\ntickle\ntickleback\nticklebrain\ntickled\nticklely\nticklenburg\ntickleness\ntickleproof\ntickler\nticklesome\ntickless\ntickleweed\ntickling\nticklingly\nticklish\nticklishly\nticklishness\ntickly\ntickney\ntickproof\ntickseed\ntickseeded\nticktack\nticktacker\nticktacktoe\nticktick\nticktock\ntickweed\nticky\nticul\nTicuna\nTicunan\ntid\ntidal\ntidally\ntidbit\ntiddle\ntiddledywinks\ntiddler\ntiddley\ntiddling\ntiddlywink\ntiddlywinking\ntiddy\ntide\ntided\ntideful\ntidehead\ntideland\ntideless\ntidelessness\ntidelike\ntidely\ntidemaker\ntidemaking\ntidemark\ntiderace\ntidesman\ntidesurveyor\nTideswell\ntidewaiter\ntidewaitership\ntideward\ntidewater\ntideway\ntidiable\ntidily\ntidiness\ntiding\ntidingless\ntidings\ntidley\ntidological\ntidology\ntidy\ntidyism\ntidytips\ntie\ntieback\ntied\nTiefenthal\ntiemaker\ntiemaking\ntiemannite\ntien\ntiepin\ntier\ntierce\ntierced\ntierceron\ntiered\ntierer\ntierlike\ntiersman\ntietick\ntiewig\ntiewigged\ntiff\ntiffany\ntiffanyite\ntiffie\ntiffin\ntiffish\ntiffle\ntiffy\ntifinagh\ntift\ntifter\ntig\ntige\ntigella\ntigellate\ntigelle\ntigellum\ntigellus\ntiger\ntigerbird\ntigereye\ntigerflower\ntigerfoot\ntigerhearted\ntigerhood\ntigerish\ntigerishly\ntigerishness\ntigerism\ntigerkin\ntigerlike\ntigerling\ntigerly\ntigernut\ntigerproof\ntigerwood\ntigery\nTigger\ntigger\ntight\ntighten\ntightener\ntightfisted\ntightish\ntightly\ntightness\ntightrope\ntights\ntightwad\ntightwire\ntiglaldehyde\ntiglic\ntiglinic\ntignum\nTigrai\nTigre\nTigrean\ntigress\ntigresslike\nTigridia\nTigrina\ntigrine\nTigris\ntigroid\ntigrolysis\ntigrolytic\ntigtag\nTigua\nTigurine\nTiki\ntikitiki\ntikka\ntikker\ntiklin\ntikolosh\ntikor\ntikur\ntil\ntilaite\ntilaka\ntilasite\ntilbury\nTilda\ntilde\ntile\ntiled\ntilefish\ntilelike\ntilemaker\ntilemaking\ntiler\ntileroot\ntilery\ntileseed\ntilestone\ntileways\ntilework\ntileworks\ntilewright\ntileyard\nTilia\nTiliaceae\ntiliaceous\ntilikum\ntiling\ntill\ntillable\nTillaea\nTillaeastrum\ntillage\nTillamook\nTillandsia\ntiller\ntillering\ntillerless\ntillerman\nTilletia\nTilletiaceae\ntilletiaceous\ntilley\ntillite\ntillodont\nTillodontia\nTillodontidae\ntillot\ntillotter\ntilly\ntilmus\ntilpah\nTilsit\ntilt\ntiltable\ntiltboard\ntilter\ntilth\ntilting\ntiltlike\ntiltmaker\ntiltmaking\ntiltup\ntilty\ntiltyard\ntilyer\nTim\ntimable\nTimaeus\nTimalia\nTimaliidae\nTimaliinae\ntimaliine\ntimaline\nTimani\ntimar\ntimarau\ntimawa\ntimazite\ntimbal\ntimbale\ntimbang\ntimbe\ntimber\ntimbered\ntimberer\ntimberhead\ntimbering\ntimberjack\ntimberland\ntimberless\ntimberlike\ntimberling\ntimberman\ntimbermonger\ntimbern\ntimbersome\ntimbertuned\ntimberwood\ntimberwork\ntimberwright\ntimbery\ntimberyard\nTimbira\ntimbo\ntimbre\ntimbrel\ntimbreled\ntimbreler\ntimbrologist\ntimbrology\ntimbromania\ntimbromaniac\ntimbromanist\ntimbrophilic\ntimbrophilism\ntimbrophilist\ntimbrophily\ntime\ntimeable\ntimecard\ntimed\ntimeful\ntimefully\ntimefulness\ntimekeep\ntimekeeper\ntimekeepership\ntimeless\ntimelessly\ntimelessness\nTimelia\nTimeliidae\ntimeliine\ntimelily\ntimeliness\ntimeling\ntimely\ntimenoguy\ntimeous\ntimeously\ntimepiece\ntimepleaser\ntimeproof\ntimer\ntimes\ntimesaver\ntimesaving\ntimeserver\ntimeserving\ntimeservingness\ntimetable\ntimetaker\ntimetaking\ntimeward\ntimework\ntimeworker\ntimeworn\nTimias\ntimid\ntimidity\ntimidly\ntimidness\ntiming\ntimish\ntimist\nTimne\nTimo\ntimocracy\ntimocratic\ntimocratical\nTimon\ntimon\ntimoneer\nTimonian\nTimonism\nTimonist\nTimonize\ntimor\nTimorese\ntimorous\ntimorously\ntimorousness\nTimote\nTimotean\nTimothean\nTimothy\ntimothy\ntimpani\ntimpanist\ntimpano\nTimucua\nTimucuan\nTimuquan\nTimuquanan\ntin\nTina\nTinamidae\ntinamine\ntinamou\ntinampipi\ntincal\ntinchel\ntinchill\ntinclad\ntinct\ntinction\ntinctorial\ntinctorially\ntinctorious\ntinctumutation\ntincture\ntind\ntindal\ntindalo\ntinder\ntinderbox\ntindered\ntinderish\ntinderlike\ntinderous\ntindery\ntine\ntinea\ntineal\ntinean\ntined\ntinegrass\ntineid\nTineidae\nTineina\ntineine\ntineman\ntineoid\nTineoidea\ntinetare\ntinety\ntineweed\ntinful\nTing\nting\ntinge\ntinged\ntinger\nTinggian\ntingi\ntingibility\ntingible\ntingid\nTingidae\nTingis\ntingitid\nTingitidae\ntinglass\ntingle\ntingler\ntingletangle\ntingling\ntinglingly\ntinglish\ntingly\ntingtang\ntinguaite\ntinguaitic\nTinguian\ntinguy\ntinhorn\ntinhouse\ntinily\ntininess\ntining\ntink\ntinker\ntinkerbird\ntinkerdom\ntinkerer\ntinkerlike\ntinkerly\ntinkershire\ntinkershue\ntinkerwise\ntinkle\ntinkler\ntinklerman\ntinkling\ntinklingly\ntinkly\ntinlet\ntinlike\ntinman\nTinne\ntinned\ntinner\ntinnery\ntinnet\nTinni\ntinnified\ntinnily\ntinniness\ntinning\ntinnitus\ntinnock\ntinny\nTino\nTinoceras\ntinosa\ntinsel\ntinsellike\ntinselly\ntinselmaker\ntinselmaking\ntinselry\ntinselweaver\ntinselwork\ntinsman\ntinsmith\ntinsmithing\ntinsmithy\ntinstone\ntinstuff\ntint\ntinta\ntintage\ntintamarre\ntintarron\ntinted\ntinter\ntintie\ntintiness\ntinting\ntintingly\ntintinnabula\ntintinnabulant\ntintinnabular\ntintinnabulary\ntintinnabulate\ntintinnabulation\ntintinnabulatory\ntintinnabulism\ntintinnabulist\ntintinnabulous\ntintinnabulum\ntintist\ntintless\ntintometer\ntintometric\ntintometry\ntinty\ntintype\ntintyper\ntinwald\ntinware\ntinwoman\ntinwork\ntinworker\ntinworking\ntiny\ntinzenite\nTionontates\nTionontati\nTiou\ntip\ntipburn\ntipcart\ntipcat\ntipe\ntipful\ntiphead\nTiphia\nTiphiidae\ntipiti\ntiple\ntipless\ntiplet\ntipman\ntipmost\ntiponi\ntippable\ntipped\ntippee\ntipper\ntippet\ntipping\ntipple\ntippleman\ntippler\ntipply\ntipproof\ntippy\ntipsification\ntipsifier\ntipsify\ntipsily\ntipsiness\ntipstaff\ntipster\ntipstock\ntipsy\ntiptail\ntipteerer\ntiptilt\ntiptoe\ntiptoeing\ntiptoeingly\ntiptop\ntiptopness\ntiptopper\ntiptoppish\ntiptoppishness\ntiptopsome\nTipula\nTipularia\ntipulid\nTipulidae\ntipuloid\nTipuloidea\ntipup\nTipura\ntirade\ntiralee\ntire\ntired\ntiredly\ntiredness\ntiredom\ntirehouse\ntireless\ntirelessly\ntirelessness\ntiremaid\ntiremaker\ntiremaking\ntireman\ntirer\ntireroom\ntiresmith\ntiresome\ntiresomely\ntiresomeness\ntiresomeweed\ntirewoman\nTirhutia\ntiriba\ntiring\ntiringly\ntirl\ntirma\ntirocinium\nTirolean\nTirolese\nTironian\ntirr\ntirralirra\ntirret\nTirribi\ntirrivee\ntirrlie\ntirrwirr\ntirthankara\nTirurai\ntirve\ntirwit\ntisane\ntisar\nTishiya\nTishri\nTisiphone\ntissual\ntissue\ntissued\ntissueless\ntissuelike\ntissuey\ntisswood\ntiswin\ntit\nTitan\ntitanate\ntitanaugite\nTitanesque\nTitaness\ntitania\nTitanian\nTitanic\ntitanic\nTitanical\nTitanically\nTitanichthyidae\nTitanichthys\ntitaniferous\ntitanifluoride\nTitanism\ntitanite\ntitanitic\ntitanium\nTitanlike\ntitano\ntitanocolumbate\ntitanocyanide\ntitanofluoride\nTitanolater\nTitanolatry\nTitanomachia\nTitanomachy\ntitanomagnetite\ntitanoniobate\ntitanosaur\nTitanosaurus\ntitanosilicate\ntitanothere\nTitanotheridae\nTitanotherium\ntitanous\ntitanyl\ntitar\ntitbit\ntitbitty\ntite\ntiter\ntiteration\ntitfish\ntithable\ntithal\ntithe\ntithebook\ntitheless\ntithemonger\ntithepayer\ntither\ntitheright\ntithing\ntithingman\ntithingpenny\ntithonic\ntithonicity\ntithonographic\ntithonometer\nTithymalopsis\nTithymalus\ntiti\nTitian\ntitian\nTitianesque\nTitianic\ntitien\nTities\ntitilate\ntitillability\ntitillant\ntitillater\ntitillating\ntitillatingly\ntitillation\ntitillative\ntitillator\ntitillatory\ntitivate\ntitivation\ntitivator\ntitlark\ntitle\ntitleboard\ntitled\ntitledom\ntitleholder\ntitleless\ntitleproof\ntitler\ntitleship\ntitlike\ntitling\ntitlist\ntitmal\ntitman\nTitmarsh\nTitmarshian\ntitmouse\nTitoism\nTitoist\ntitoki\ntitrable\ntitratable\ntitrate\ntitration\ntitre\ntitrimetric\ntitrimetry\ntitter\ntitterel\ntitterer\ntittering\ntitteringly\ntittery\ntittie\ntittle\ntittlebat\ntittler\ntittup\ntittupy\ntitty\ntittymouse\ntitubancy\ntitubant\ntitubantly\ntitubate\ntitubation\ntitular\ntitularity\ntitularly\ntitulary\ntitulation\ntitule\ntitulus\nTiturel\nTitus\ntiver\nTivoli\ntivoli\ntivy\nTiwaz\ntiza\ntizeur\ntizzy\ntjanting\ntji\ntjosite\ntlaco\nTlakluit\nTlapallan\nTlascalan\nTlingit\ntmema\nTmesipteris\ntmesis\nto\ntoa\ntoad\ntoadback\ntoadeat\ntoadeater\ntoader\ntoadery\ntoadess\ntoadfish\ntoadflax\ntoadflower\ntoadhead\ntoadier\ntoadish\ntoadless\ntoadlet\ntoadlike\ntoadlikeness\ntoadling\ntoadpipe\ntoadroot\ntoadship\ntoadstone\ntoadstool\ntoadstoollike\ntoadwise\ntoady\ntoadyish\ntoadyism\ntoadyship\nToag\ntoast\ntoastable\ntoastee\ntoaster\ntoastiness\ntoastmaster\ntoastmastery\ntoastmistress\ntoasty\ntoat\ntoatoa\nToba\ntobacco\ntobaccofied\ntobaccoism\ntobaccoite\ntobaccoless\ntobaccolike\ntobaccoman\ntobacconalian\ntobacconist\ntobacconistical\ntobacconize\ntobaccophil\ntobaccoroot\ntobaccoweed\ntobaccowood\ntobaccoy\ntobe\nTobiah\nTobias\nTobikhar\ntobine\ntobira\ntoboggan\ntobogganeer\ntobogganer\ntobogganist\nToby\ntoby\ntobyman\ntocalote\ntoccata\nTocharese\nTocharian\nTocharic\nTocharish\ntocher\ntocherless\ntock\ntoco\nTocobaga\ntocodynamometer\ntocogenetic\ntocogony\ntocokinin\ntocological\ntocologist\ntocology\ntocome\ntocometer\ntocopherol\ntocororo\ntocsin\ntocusso\nTod\ntod\nToda\ntoday\ntodayish\nTodd\ntodder\ntoddick\ntoddite\ntoddle\ntoddlekins\ntoddler\ntoddy\ntoddyize\ntoddyman\ntode\nTodea\nTodidae\nTodus\ntody\ntoe\ntoeboard\ntoecap\ntoecapped\ntoed\ntoeless\ntoelike\ntoellite\ntoenail\ntoeplate\nToerless\ntoernebohmite\ntoetoe\ntoff\ntoffee\ntoffeeman\ntoffing\ntoffish\ntoffy\ntoffyman\nTofieldia\nToft\ntoft\ntofter\ntoftman\ntoftstead\ntofu\ntog\ntoga\ntogaed\ntogalike\ntogata\ntogate\ntogated\ntogawise\ntogether\ntogetherhood\ntogetheriness\ntogetherness\ntoggel\ntoggery\ntoggle\ntoggler\ntogless\ntogs\ntogt\ntogue\ntoher\ntoheroa\ntoho\nTohome\ntohubohu\ntohunga\ntoi\ntoil\ntoiled\ntoiler\ntoilet\ntoileted\ntoiletry\ntoilette\ntoiletted\ntoiletware\ntoilful\ntoilfully\ntoilinet\ntoiling\ntoilingly\ntoilless\ntoillessness\ntoilsome\ntoilsomely\ntoilsomeness\ntoilworn\ntoise\ntoit\ntoitish\ntoity\nTokay\ntokay\ntoke\nTokelau\ntoken\ntokened\ntokenless\ntoko\ntokology\ntokonoma\ntokopat\ntol\ntolamine\ntolan\ntolane\ntolbooth\ntold\ntoldo\ntole\nToledan\nToledo\nToledoan\ntolerability\ntolerable\ntolerableness\ntolerablish\ntolerably\ntolerance\ntolerancy\nTolerant\ntolerant\ntolerantism\ntolerantly\ntolerate\ntoleration\ntolerationism\ntolerationist\ntolerative\ntolerator\ntolerism\nToletan\ntolfraedic\ntolguacha\ntolidine\ntolite\ntoll\ntollable\ntollage\ntollbooth\nTollefsen\ntoller\ntollery\ntollgate\ntollgatherer\ntollhouse\ntolliker\ntolling\ntollkeeper\ntollman\ntollmaster\ntollpenny\ntolltaker\ntolly\nTolowa\ntolpatch\ntolpatchery\ntolsester\ntolsey\nTolstoyan\nTolstoyism\nTolstoyist\ntolt\nToltec\nToltecan\ntolter\ntolu\ntolualdehyde\ntoluate\ntoluene\ntoluic\ntoluide\ntoluidide\ntoluidine\ntoluidino\ntoluido\nToluifera\ntolunitrile\ntoluol\ntoluquinaldine\ntolusafranine\ntoluyl\ntoluylene\ntoluylenediamine\ntoluylic\ntolyl\ntolylene\ntolylenediamine\nTolypeutes\ntolypeutine\nTom\nToma\ntomahawk\ntomahawker\ntomalley\ntoman\nTomas\ntomatillo\ntomato\ntomb\ntombac\ntombal\ntombe\ntombic\ntombless\ntomblet\ntomblike\ntombola\ntombolo\ntomboy\ntomboyful\ntomboyish\ntomboyishly\ntomboyishness\ntomboyism\ntombstone\ntomcat\ntomcod\ntome\ntomeful\ntomelet\ntoment\ntomentose\ntomentous\ntomentulose\ntomentum\ntomfool\ntomfoolery\ntomfoolish\ntomfoolishness\ntomial\ntomin\ntomish\nTomistoma\ntomium\ntomjohn\nTomkin\ntomkin\nTommer\nTomming\nTommy\ntommy\ntommybag\ntommycod\ntommyrot\ntomnoddy\ntomnoup\ntomogram\ntomographic\ntomography\nTomopteridae\nTomopteris\ntomorn\ntomorrow\ntomorrower\ntomorrowing\ntomorrowness\ntomosis\nTompion\ntompiper\ntompon\ntomtate\ntomtit\nTomtitmouse\nton\ntonal\ntonalamatl\ntonalist\ntonalite\ntonalitive\ntonality\ntonally\ntonant\ntonation\ntondino\ntone\ntoned\ntoneless\ntonelessly\ntonelessness\ntoneme\ntoneproof\ntoner\ntonetic\ntonetically\ntonetician\ntonetics\ntong\nTonga\ntonga\nTongan\nTongas\ntonger\ntongkang\ntongman\nTongrian\ntongs\ntongsman\ntongue\ntonguecraft\ntongued\ntonguedoughty\ntonguefence\ntonguefencer\ntongueflower\ntongueful\ntongueless\ntonguelet\ntonguelike\ntongueman\ntonguemanship\ntongueplay\ntongueproof\ntonguer\ntongueshot\ntonguesman\ntonguesore\ntonguester\ntonguetip\ntonguey\ntonguiness\ntonguing\ntonic\ntonically\ntonicity\ntonicize\ntonicobalsamic\ntonicoclonic\ntonicostimulant\ntonify\ntonight\nTonikan\ntonish\ntonishly\ntonishness\ntonite\ntonitrocirrus\ntonitruant\ntonitruone\ntonitruous\ntonjon\ntonk\nTonkawa\nTonkawan\ntonkin\nTonkinese\ntonlet\nTonna\ntonnage\ntonneau\ntonneaued\ntonner\ntonnish\ntonnishly\ntonnishness\ntonoclonic\ntonogram\ntonograph\ntonological\ntonology\ntonometer\ntonometric\ntonometry\ntonophant\ntonoplast\ntonoscope\ntonotactic\ntonotaxis\ntonous\ntonsbergite\ntonsil\ntonsilectomy\ntonsilitic\ntonsillar\ntonsillary\ntonsillectome\ntonsillectomic\ntonsillectomize\ntonsillectomy\ntonsillith\ntonsillitic\ntonsillitis\ntonsillolith\ntonsillotome\ntonsillotomy\ntonsilomycosis\ntonsor\ntonsorial\ntonsurate\ntonsure\ntonsured\ntontine\ntontiner\nTonto\ntonus\nTony\ntony\ntonyhoop\ntoo\ntoodle\ntoodleloodle\ntook\ntooken\ntool\ntoolbox\ntoolbuilder\ntoolbuilding\ntooler\ntoolhead\ntoolholder\ntoolholding\ntooling\ntoolless\ntoolmaker\ntoolmaking\ntoolman\ntoolmark\ntoolmarking\ntoolplate\ntoolroom\ntoolsetter\ntoolslide\ntoolsmith\ntoolstock\ntoolstone\ntoom\ntoomly\ntoon\nToona\ntoonwood\ntoop\ntoorie\ntoorock\ntooroo\ntoosh\ntoot\ntooter\ntooth\ntoothache\ntoothaching\ntoothachy\ntoothbill\ntoothbrush\ntoothbrushy\ntoothchiseled\ntoothcomb\ntoothcup\ntoothdrawer\ntoothdrawing\ntoothed\ntoother\ntoothflower\ntoothful\ntoothill\ntoothing\ntoothless\ntoothlessly\ntoothlessness\ntoothlet\ntoothleted\ntoothlike\ntoothpick\ntoothplate\ntoothproof\ntoothsome\ntoothsomely\ntoothsomeness\ntoothstick\ntoothwash\ntoothwork\ntoothwort\ntoothy\ntootle\ntootler\ntootlish\ntootsy\ntoozle\ntoozoo\ntop\ntopalgia\ntoparch\ntoparchia\ntoparchical\ntoparchy\ntopass\nTopatopa\ntopaz\ntopazfels\ntopazine\ntopazite\ntopazolite\ntopazy\ntopcap\ntopcast\ntopchrome\ntopcoat\ntopcoating\ntope\ntopectomy\ntopee\ntopeewallah\ntopeng\ntopepo\ntoper\ntoperdom\ntopesthesia\ntopflight\ntopfull\ntopgallant\ntoph\ntophaceous\ntophaike\nTophet\ntophetic\ntophetize\ntophus\ntophyperidrosis\ntopi\ntopia\ntopiarian\ntopiarist\ntopiarius\ntopiary\ntopic\ntopical\ntopicality\ntopically\ntopinambou\nTopinish\ntopknot\ntopknotted\ntopless\ntoplighted\ntoplike\ntopline\ntoploftical\ntoploftily\ntoploftiness\ntoplofty\ntopmaker\ntopmaking\ntopman\ntopmast\ntopmost\ntopmostly\ntopnotch\ntopnotcher\ntopo\ntopoalgia\ntopochemical\ntopognosia\ntopognosis\ntopograph\ntopographer\ntopographic\ntopographical\ntopographically\ntopographics\ntopographist\ntopographize\ntopographometric\ntopography\ntopolatry\ntopologic\ntopological\ntopologist\ntopology\ntoponarcosis\ntoponym\ntoponymal\ntoponymic\ntoponymical\ntoponymics\ntoponymist\ntoponymy\ntopophobia\ntopophone\ntopotactic\ntopotaxis\ntopotype\ntopotypic\ntopotypical\ntopped\ntopper\ntoppiece\ntopping\ntoppingly\ntoppingness\ntopple\ntoppler\ntopply\ntoppy\ntoprail\ntoprope\ntops\ntopsail\ntopsailite\ntopside\ntopsl\ntopsman\ntopsoil\ntopstone\ntopswarm\nTopsy\ntopsyturn\ntoptail\ntopwise\ntoque\nTor\ntor\ntora\ntorah\nToraja\ntoral\ntoran\ntorbanite\ntorbanitic\ntorbernite\ntorc\ntorcel\ntorch\ntorchbearer\ntorchbearing\ntorcher\ntorchless\ntorchlight\ntorchlighted\ntorchlike\ntorchman\ntorchon\ntorchweed\ntorchwood\ntorchwort\ntorcular\ntorculus\ntordrillite\ntore\ntoreador\ntored\nTorenia\ntorero\ntoreumatography\ntoreumatology\ntoreutic\ntoreutics\ntorfaceous\ntorfel\ntorgoch\nTorgot\ntoric\nToriest\nTorified\ntorii\nTorilis\nTorinese\nToriness\ntorma\ntormen\ntorment\ntormenta\ntormentable\ntormentation\ntormentative\ntormented\ntormentedly\ntormentful\ntormentil\ntormentilla\ntormenting\ntormentingly\ntormentingness\ntormentive\ntormentor\ntormentous\ntormentress\ntormentry\ntormentum\ntormina\ntorminal\ntorminous\ntormodont\ntorn\ntornachile\ntornade\ntornadic\ntornado\ntornadoesque\ntornadoproof\ntornal\ntornaria\ntornarian\ntornese\ntorney\ntornillo\nTornit\ntornote\ntornus\ntoro\ntoroid\ntoroidal\ntorolillo\nToromona\nTorontonian\ntororokombu\nTorosaurus\ntorose\ntorosity\ntorotoro\ntorous\ntorpedineer\nTorpedinidae\ntorpedinous\ntorpedo\ntorpedoer\ntorpedoist\ntorpedolike\ntorpedoplane\ntorpedoproof\ntorpent\ntorpescence\ntorpescent\ntorpid\ntorpidity\ntorpidly\ntorpidness\ntorpify\ntorpitude\ntorpor\ntorporific\ntorporize\ntorquate\ntorquated\ntorque\ntorqued\ntorques\ntorrefaction\ntorrefication\ntorrefy\ntorrent\ntorrentful\ntorrentfulness\ntorrential\ntorrentiality\ntorrentially\ntorrentine\ntorrentless\ntorrentlike\ntorrentuous\ntorrentwise\nTorreya\nTorricellian\ntorrid\ntorridity\ntorridly\ntorridness\nTorridonian\nTorrubia\ntorsade\ntorse\ntorsel\ntorsibility\ntorsigraph\ntorsile\ntorsimeter\ntorsiogram\ntorsiograph\ntorsiometer\ntorsion\ntorsional\ntorsionally\ntorsioning\ntorsionless\ntorsive\ntorsk\ntorso\ntorsoclusion\ntorsometer\ntorsoocclusion\nTorsten\ntort\ntorta\ntorteau\ntorticollar\ntorticollis\ntorticone\ntortile\ntortility\ntortilla\ntortille\ntortious\ntortiously\ntortive\ntortoise\ntortoiselike\nTortonian\ntortrices\ntortricid\nTortricidae\nTortricina\ntortricine\ntortricoid\nTortricoidea\nTortrix\ntortula\nTortulaceae\ntortulaceous\ntortulous\ntortuose\ntortuosity\ntortuous\ntortuously\ntortuousness\ntorturable\ntorturableness\ntorture\ntortured\ntorturedly\ntortureproof\ntorturer\ntorturesome\ntorturing\ntorturingly\ntorturous\ntorturously\ntoru\ntorula\ntorulaceous\ntorulaform\ntoruliform\ntorulin\ntoruloid\ntorulose\ntorulosis\ntorulous\ntorulus\ntorus\ntorve\ntorvid\ntorvity\ntorvous\nTory\ntory\nTorydom\nToryess\nToryfication\nToryfy\ntoryhillite\nToryish\nToryism\nToryistic\nToryize\nToryship\ntoryweed\ntosaphist\ntosaphoth\ntoscanite\nTosephta\nTosephtas\ntosh\ntoshakhana\ntosher\ntoshery\ntoshly\ntoshnail\ntoshy\ntosily\nTosk\nToskish\ntoss\ntosser\ntossicated\ntossily\ntossing\ntossingly\ntossment\ntosspot\ntossup\ntossy\ntost\ntosticate\ntostication\ntoston\ntosy\ntot\ntotal\ntotalitarian\ntotalitarianism\ntotality\ntotalization\ntotalizator\ntotalize\ntotalizer\ntotally\ntotalness\ntotanine\nTotanus\ntotaquin\ntotaquina\ntotaquine\ntotara\ntotchka\ntote\ntoteload\ntotem\ntotemic\ntotemically\ntotemism\ntotemist\ntotemistic\ntotemite\ntotemization\ntotemy\ntoter\ntother\ntotient\nTotipalmatae\ntotipalmate\ntotipalmation\ntotipotence\ntotipotency\ntotipotent\ntotipotential\ntotipotentiality\ntotitive\ntoto\nTotonac\nTotonacan\nTotonaco\ntotora\nTotoro\ntotquot\ntotter\ntotterer\ntottergrass\ntottering\ntotteringly\ntotterish\ntottery\nTottie\ntotting\ntottle\ntottlish\ntotty\ntottyhead\ntotuava\ntotum\ntoty\ntotyman\ntou\ntoucan\ntoucanet\nToucanid\ntouch\ntouchable\ntouchableness\ntouchback\ntouchbell\ntouchbox\ntouchdown\ntouched\ntouchedness\ntoucher\ntouchhole\ntouchily\ntouchiness\ntouching\ntouchingly\ntouchingness\ntouchless\ntouchline\ntouchous\ntouchpan\ntouchpiece\ntouchstone\ntouchwood\ntouchy\nToufic\ntoug\ntough\ntoughen\ntoughener\ntoughhead\ntoughhearted\ntoughish\ntoughly\ntoughness\ntought\ntould\ntoumnah\nTounatea\ntoup\ntoupee\ntoupeed\ntoupet\ntour\ntouraco\ntourbillion\ntourer\ntourette\ntouring\ntourism\ntourist\ntouristdom\ntouristic\ntouristproof\ntouristry\ntouristship\ntouristy\ntourize\ntourmaline\ntourmalinic\ntourmaliniferous\ntourmalinization\ntourmalinize\ntourmalite\ntourn\ntournament\ntournamental\ntournant\ntournasin\ntournay\ntournee\nTournefortia\nTournefortian\ntourney\ntourneyer\ntourniquet\ntourte\ntousche\ntouse\ntouser\ntousle\ntously\ntousy\ntout\ntouter\nTovah\ntovar\nTovaria\nTovariaceae\ntovariaceous\ntovarish\ntow\ntowable\ntowage\ntowai\ntowan\ntoward\ntowardliness\ntowardly\ntowardness\ntowards\ntowboat\ntowcock\ntowd\ntowel\ntowelette\ntoweling\ntowelry\ntower\ntowered\ntowering\ntoweringly\ntowerless\ntowerlet\ntowerlike\ntowerman\ntowerproof\ntowerwise\ntowerwork\ntowerwort\ntowery\ntowght\ntowhead\ntowheaded\ntowhee\ntowing\ntowkay\ntowlike\ntowline\ntowmast\ntown\ntowned\ntownee\ntowner\ntownet\ntownfaring\ntownfolk\ntownful\ntowngate\ntownhood\ntownify\ntowniness\ntownish\ntownishly\ntownishness\ntownist\ntownland\ntownless\ntownlet\ntownlike\ntownling\ntownly\ntownman\ntownsboy\ntownscape\nTownsendia\nTownsendite\ntownsfellow\ntownsfolk\ntownship\ntownside\ntownsite\ntownsman\ntownspeople\ntownswoman\ntownward\ntownwards\ntownwear\ntowny\ntowpath\ntowrope\ntowser\ntowy\ntox\ntoxa\ntoxalbumic\ntoxalbumin\ntoxalbumose\ntoxamin\ntoxanemia\ntoxaphene\ntoxcatl\ntoxemia\ntoxemic\ntoxic\ntoxicaemia\ntoxical\ntoxically\ntoxicant\ntoxicarol\ntoxication\ntoxicemia\ntoxicity\ntoxicodendrol\nToxicodendron\ntoxicoderma\ntoxicodermatitis\ntoxicodermatosis\ntoxicodermia\ntoxicodermitis\ntoxicogenic\ntoxicognath\ntoxicohaemia\ntoxicohemia\ntoxicoid\ntoxicologic\ntoxicological\ntoxicologically\ntoxicologist\ntoxicology\ntoxicomania\ntoxicopathic\ntoxicopathy\ntoxicophagous\ntoxicophagy\ntoxicophidia\ntoxicophobia\ntoxicosis\ntoxicotraumatic\ntoxicum\ntoxidermic\ntoxidermitis\ntoxifer\nToxifera\ntoxiferous\ntoxigenic\ntoxihaemia\ntoxihemia\ntoxiinfection\ntoxiinfectious\ntoxin\ntoxinemia\ntoxinfection\ntoxinfectious\ntoxinosis\ntoxiphobia\ntoxiphobiac\ntoxiphoric\ntoxitabellae\ntoxity\nToxodon\ntoxodont\nToxodontia\ntoxogenesis\nToxoglossa\ntoxoglossate\ntoxoid\ntoxology\ntoxolysis\ntoxon\ntoxone\ntoxonosis\ntoxophil\ntoxophile\ntoxophilism\ntoxophilite\ntoxophilitic\ntoxophilitism\ntoxophilous\ntoxophily\ntoxophoric\ntoxophorous\ntoxoplasmosis\ntoxosis\ntoxosozin\nToxostoma\ntoxotae\nToxotes\nToxotidae\nToxylon\ntoy\ntoydom\ntoyer\ntoyful\ntoyfulness\ntoyhouse\ntoying\ntoyingly\ntoyish\ntoyishly\ntoyishness\ntoyland\ntoyless\ntoylike\ntoymaker\ntoymaking\ntoyman\ntoyon\ntoyshop\ntoysome\ntoytown\ntoywoman\ntoywort\ntoze\ntozee\ntozer\ntra\ntrabacolo\ntrabal\ntrabant\ntrabascolo\ntrabea\ntrabeae\ntrabeatae\ntrabeated\ntrabeation\ntrabecula\ntrabecular\ntrabecularism\ntrabeculate\ntrabeculated\ntrabeculation\ntrabecule\ntrabuch\ntrabucho\nTracaulon\ntrace\ntraceability\ntraceable\ntraceableness\ntraceably\ntraceless\ntracelessly\ntracer\ntraceried\ntracery\nTracey\ntrachea\ntracheaectasy\ntracheal\ntrachealgia\ntrachealis\ntrachean\nTrachearia\ntrachearian\ntracheary\nTracheata\ntracheate\ntracheation\ntracheid\ntracheidal\ntracheitis\ntrachelagra\ntrachelate\ntrachelectomopexia\ntrachelectomy\ntrachelismus\ntrachelitis\ntrachelium\ntracheloacromialis\ntrachelobregmatic\ntracheloclavicular\ntrachelocyllosis\ntrachelodynia\ntrachelology\ntrachelomastoid\ntrachelopexia\ntracheloplasty\ntrachelorrhaphy\ntracheloscapular\nTrachelospermum\ntrachelotomy\ntrachenchyma\ntracheobronchial\ntracheobronchitis\ntracheocele\ntracheochromatic\ntracheoesophageal\ntracheofissure\ntracheolar\ntracheolaryngeal\ntracheolaryngotomy\ntracheole\ntracheolingual\ntracheopathia\ntracheopathy\ntracheopharyngeal\nTracheophonae\ntracheophone\ntracheophonesis\ntracheophonine\ntracheophony\ntracheoplasty\ntracheopyosis\ntracheorrhagia\ntracheoschisis\ntracheoscopic\ntracheoscopist\ntracheoscopy\ntracheostenosis\ntracheostomy\ntracheotome\ntracheotomist\ntracheotomize\ntracheotomy\nTrachinidae\ntrachinoid\nTrachinus\ntrachitis\ntrachle\nTrachodon\ntrachodont\ntrachodontid\nTrachodontidae\nTrachoma\ntrachomatous\nTrachomedusae\ntrachomedusan\ntrachyandesite\ntrachybasalt\ntrachycarpous\nTrachycarpus\ntrachychromatic\ntrachydolerite\ntrachyglossate\nTrachylinae\ntrachyline\nTrachymedusae\ntrachymedusan\ntrachyphonia\ntrachyphonous\nTrachypteridae\ntrachypteroid\nTrachypterus\ntrachyspermous\ntrachyte\ntrachytic\ntrachytoid\ntracing\ntracingly\ntrack\ntrackable\ntrackage\ntrackbarrow\ntracked\ntracker\ntrackhound\ntrackingscout\ntracklayer\ntracklaying\ntrackless\ntracklessly\ntracklessness\ntrackman\ntrackmanship\ntrackmaster\ntrackscout\ntrackshifter\ntracksick\ntrackside\ntrackwalker\ntrackway\ntrackwork\ntract\ntractability\ntractable\ntractableness\ntractably\ntractarian\nTractarianism\ntractarianize\ntractate\ntractator\ntractatule\ntractellate\ntractellum\ntractiferous\ntractile\ntractility\ntraction\ntractional\ntractioneering\nTractite\ntractlet\ntractor\ntractoration\ntractorism\ntractorist\ntractorization\ntractorize\ntractory\ntractrix\nTracy\ntradable\ntradal\ntrade\ntradecraft\ntradeful\ntradeless\ntrademaster\ntrader\ntradership\nTradescantia\ntradesfolk\ntradesman\ntradesmanlike\ntradesmanship\ntradesmanwise\ntradespeople\ntradesperson\ntradeswoman\ntradiment\ntrading\ntradite\ntradition\ntraditional\ntraditionalism\ntraditionalist\ntraditionalistic\ntraditionality\ntraditionalize\ntraditionally\ntraditionarily\ntraditionary\ntraditionate\ntraditionately\ntraditioner\ntraditionism\ntraditionist\ntraditionitis\ntraditionize\ntraditionless\ntraditionmonger\ntraditious\ntraditive\ntraditor\ntraditores\ntraditorship\ntraduce\ntraducement\ntraducent\ntraducer\ntraducian\ntraducianism\ntraducianist\ntraducianistic\ntraducible\ntraducing\ntraducingly\ntraduction\ntraductionist\ntrady\ntraffic\ntrafficability\ntrafficable\ntrafficableness\ntrafficless\ntrafficway\ntrafflicker\ntrafflike\ntrag\ntragacanth\ntragacantha\ntragacanthin\ntragal\nTragasol\ntragedial\ntragedian\ntragedianess\ntragedical\ntragedienne\ntragedietta\ntragedist\ntragedization\ntragedize\ntragedy\ntragelaph\ntragelaphine\nTragelaphus\ntragi\ntragic\ntragical\ntragicality\ntragically\ntragicalness\ntragicaster\ntragicize\ntragicly\ntragicness\ntragicofarcical\ntragicoheroicomic\ntragicolored\ntragicomedian\ntragicomedy\ntragicomic\ntragicomical\ntragicomicality\ntragicomically\ntragicomipastoral\ntragicoromantic\ntragicose\ntragopan\nTragopogon\nTragulidae\nTragulina\ntraguline\ntraguloid\nTraguloidea\nTragulus\ntragus\ntrah\ntraheen\ntraik\ntrail\ntrailer\ntrailery\ntrailiness\ntrailing\ntrailingly\ntrailless\ntrailmaker\ntrailmaking\ntrailman\ntrailside\ntrailsman\ntraily\ntrain\ntrainable\ntrainage\ntrainagraph\ntrainband\ntrainbearer\ntrainbolt\ntrainboy\ntrained\ntrainee\ntrainer\ntrainful\ntraining\ntrainless\ntrainload\ntrainman\ntrainmaster\ntrainsick\ntrainster\ntraintime\ntrainway\ntrainy\ntraipse\ntrait\ntraitless\ntraitor\ntraitorhood\ntraitorism\ntraitorize\ntraitorlike\ntraitorling\ntraitorous\ntraitorously\ntraitorousness\ntraitorship\ntraitorwise\ntraitress\ntraject\ntrajectile\ntrajection\ntrajectitious\ntrajectory\ntrajet\ntralatician\ntralaticiary\ntralatition\ntralatitious\ntralatitiously\ntralira\nTrallian\ntram\ntrama\ntramal\ntramcar\ntrame\nTrametes\ntramful\ntramless\ntramline\ntramman\ntrammel\ntrammeled\ntrammeler\ntrammelhead\ntrammeling\ntrammelingly\ntrammelled\ntrammellingly\ntrammer\ntramming\ntrammon\ntramontane\ntramp\ntrampage\ntrampdom\ntramper\ntrampess\ntramphood\ntrampish\ntrampishly\ntrampism\ntrample\ntrampler\ntramplike\ntrampolin\ntrampoline\ntrampoose\ntrampot\ntramroad\ntramsmith\ntramway\ntramwayman\ntramyard\nTran\ntrance\ntranced\ntrancedly\ntranceful\ntrancelike\ntranchefer\ntranchet\ntrancoidal\ntraneen\ntrank\ntranka\ntranker\ntrankum\ntranky\ntranquil\ntranquility\ntranquilization\ntranquilize\ntranquilizer\ntranquilizing\ntranquilizingly\ntranquillity\ntranquillization\ntranquillize\ntranquilly\ntranquilness\ntransaccidentation\ntransact\ntransaction\ntransactional\ntransactionally\ntransactioneer\ntransactor\ntransalpine\ntransalpinely\ntransalpiner\ntransamination\ntransanimate\ntransanimation\ntransannular\ntransapical\ntransappalachian\ntransaquatic\ntransarctic\ntransatlantic\ntransatlantically\ntransatlantican\ntransatlanticism\ntransaudient\ntransbaikal\ntransbaikalian\ntransbay\ntransboard\ntransborder\ntranscalency\ntranscalent\ntranscalescency\ntranscalescent\nTranscaucasian\ntransceiver\ntranscend\ntranscendence\ntranscendency\ntranscendent\ntranscendental\ntranscendentalism\ntranscendentalist\ntranscendentalistic\ntranscendentality\ntranscendentalize\ntranscendentally\ntranscendently\ntranscendentness\ntranscendible\ntranscending\ntranscendingly\ntranscendingness\ntranscension\ntranschannel\ntranscolor\ntranscoloration\ntransconductance\ntranscondylar\ntranscondyloid\ntransconscious\ntranscontinental\ntranscorporate\ntranscorporeal\ntranscortical\ntranscreate\ntranscribable\ntranscribble\ntranscribbler\ntranscribe\ntranscriber\ntranscript\ntranscription\ntranscriptional\ntranscriptionally\ntranscriptitious\ntranscriptive\ntranscriptively\ntranscriptural\ntranscrystalline\ntranscurrent\ntranscurrently\ntranscurvation\ntransdermic\ntransdesert\ntransdialect\ntransdiaphragmatic\ntransdiurnal\ntransducer\ntransduction\ntransect\ntransection\ntranselement\ntranselementate\ntranselementation\ntransempirical\ntransenna\ntransept\ntranseptal\ntranseptally\ntransequatorial\ntransessentiate\ntranseunt\ntransexperiential\ntransfashion\ntransfeature\ntransfer\ntransferability\ntransferable\ntransferableness\ntransferably\ntransferal\ntransferee\ntransference\ntransferent\ntransferential\ntransferography\ntransferor\ntransferotype\ntransferred\ntransferrer\ntransferribility\ntransferring\ntransferror\ntransferrotype\ntransfigurate\ntransfiguration\ntransfigurative\ntransfigure\ntransfigurement\ntransfiltration\ntransfinite\ntransfix\ntransfixation\ntransfixion\ntransfixture\ntransfluent\ntransfluvial\ntransflux\ntransforation\ntransform\ntransformability\ntransformable\ntransformance\ntransformation\ntransformationist\ntransformative\ntransformator\ntransformer\ntransforming\ntransformingly\ntransformism\ntransformist\ntransformistic\ntransfrontal\ntransfrontier\ntransfuge\ntransfugitive\ntransfuse\ntransfuser\ntransfusible\ntransfusion\ntransfusionist\ntransfusive\ntransfusively\ntransgredient\ntransgress\ntransgressible\ntransgressing\ntransgressingly\ntransgression\ntransgressional\ntransgressive\ntransgressively\ntransgressor\ntranshape\ntranshuman\ntranshumanate\ntranshumanation\ntranshumance\ntranshumanize\ntranshumant\ntransience\ntransiency\ntransient\ntransiently\ntransientness\ntransigence\ntransigent\ntransiliac\ntransilience\ntransiliency\ntransilient\ntransilluminate\ntransillumination\ntransilluminator\ntransimpression\ntransincorporation\ntransindividual\ntransinsular\ntransire\ntransischiac\ntransisthmian\ntransistor\ntransit\ntransitable\ntransiter\ntransition\ntransitional\ntransitionally\ntransitionalness\ntransitionary\ntransitionist\ntransitival\ntransitive\ntransitively\ntransitiveness\ntransitivism\ntransitivity\ntransitman\ntransitorily\ntransitoriness\ntransitory\ntransitus\nTransjordanian\ntranslade\ntranslatable\ntranslatableness\ntranslate\ntranslater\ntranslation\ntranslational\ntranslationally\ntranslative\ntranslator\ntranslatorese\ntranslatorial\ntranslatorship\ntranslatory\ntranslatress\ntranslatrix\ntranslay\ntransleithan\ntransletter\ntranslinguate\ntransliterate\ntransliteration\ntransliterator\ntranslocalization\ntranslocate\ntranslocation\ntranslocatory\ntranslucence\ntranslucency\ntranslucent\ntranslucently\ntranslucid\ntransmarginal\ntransmarine\ntransmaterial\ntransmateriation\ntransmedial\ntransmedian\ntransmental\ntransmentation\ntransmeridional\ntransmethylation\ntransmigrant\ntransmigrate\ntransmigration\ntransmigrationism\ntransmigrationist\ntransmigrative\ntransmigratively\ntransmigrator\ntransmigratory\ntransmissibility\ntransmissible\ntransmission\ntransmissional\ntransmissionist\ntransmissive\ntransmissively\ntransmissiveness\ntransmissivity\ntransmissometer\ntransmissory\ntransmit\ntransmittable\ntransmittal\ntransmittance\ntransmittancy\ntransmittant\ntransmitter\ntransmittible\ntransmogrification\ntransmogrifier\ntransmogrify\ntransmold\ntransmontane\ntransmorphism\ntransmundane\ntransmural\ntransmuscle\ntransmutability\ntransmutable\ntransmutableness\ntransmutably\ntransmutation\ntransmutational\ntransmutationist\ntransmutative\ntransmutatory\ntransmute\ntransmuter\ntransmuting\ntransmutive\ntransmutual\ntransnatation\ntransnational\ntransnatural\ntransnaturation\ntransnature\ntransnihilation\ntransnormal\ntransocean\ntransoceanic\ntransocular\ntransom\ntransomed\ntransonic\ntransorbital\ntranspacific\ntranspadane\ntranspalatine\ntranspalmar\ntranspanamic\ntransparence\ntransparency\ntransparent\ntransparentize\ntransparently\ntransparentness\ntransparietal\ntransparish\ntranspeciate\ntranspeciation\ntranspeer\ntranspenetrable\ntranspeninsular\ntransperitoneal\ntransperitoneally\ntranspersonal\ntransphenomenal\ntransphysical\ntranspicuity\ntranspicuous\ntranspicuously\ntranspierce\ntranspirability\ntranspirable\ntranspiration\ntranspirative\ntranspiratory\ntranspire\ntranspirometer\ntransplace\ntransplant\ntransplantability\ntransplantable\ntransplantar\ntransplantation\ntransplantee\ntransplanter\ntransplendency\ntransplendent\ntransplendently\ntranspleural\ntranspleurally\ntranspolar\ntransponibility\ntransponible\ntranspontine\ntransport\ntransportability\ntransportable\ntransportableness\ntransportal\ntransportance\ntransportation\ntransportational\ntransportationist\ntransportative\ntransported\ntransportedly\ntransportedness\ntransportee\ntransporter\ntransporting\ntransportingly\ntransportive\ntransportment\ntransposability\ntransposable\ntransposableness\ntransposal\ntranspose\ntransposer\ntransposition\ntranspositional\ntranspositive\ntranspositively\ntranspositor\ntranspository\ntranspour\ntransprint\ntransprocess\ntransprose\ntransproser\ntranspulmonary\ntranspyloric\ntransradiable\ntransrational\ntransreal\ntransrectification\ntransrhenane\ntransrhodanian\ntransriverine\ntranssegmental\ntranssensual\ntransseptal\ntranssepulchral\ntransshape\ntransshift\ntransship\ntransshipment\ntranssolid\ntransstellar\ntranssubjective\ntranstemporal\nTransteverine\ntransthalamic\ntransthoracic\ntransubstantial\ntransubstantially\ntransubstantiate\ntransubstantiation\ntransubstantiationalist\ntransubstantiationite\ntransubstantiative\ntransubstantiatively\ntransubstantiatory\ntransudate\ntransudation\ntransudative\ntransudatory\ntransude\ntransumpt\ntransumption\ntransumptive\ntransuranian\ntransuranic\ntransuranium\ntransuterine\ntransvaal\nTransvaaler\nTransvaalian\ntransvaluate\ntransvaluation\ntransvalue\ntransvasate\ntransvasation\ntransvase\ntransvectant\ntransvection\ntransvenom\ntransverbate\ntransverbation\ntransverberate\ntransverberation\ntransversal\ntransversale\ntransversalis\ntransversality\ntransversally\ntransversan\ntransversary\ntransverse\ntransversely\ntransverseness\ntransverser\ntransversion\ntransversive\ntransversocubital\ntransversomedial\ntransversospinal\ntransversovertical\ntransversum\ntransversus\ntransvert\ntransverter\ntransvest\ntransvestism\ntransvestite\ntransvestitism\ntransvolation\ntranswritten\nTransylvanian\ntrant\ntranter\ntrantlum\nTranzschelia\ntrap\nTrapa\nTrapaceae\ntrapaceous\ntrapball\ntrapes\ntrapezate\ntrapeze\ntrapezia\ntrapezial\ntrapezian\ntrapeziform\ntrapezing\ntrapeziometacarpal\ntrapezist\ntrapezium\ntrapezius\ntrapezohedral\ntrapezohedron\ntrapezoid\ntrapezoidal\ntrapezoidiform\ntrapfall\ntraphole\ntrapiferous\ntraplight\ntraplike\ntrapmaker\ntrapmaking\ntrappean\ntrapped\ntrapper\ntrapperlike\ntrappiness\ntrapping\ntrappingly\nTrappist\ntrappist\nTrappistine\ntrappoid\ntrappose\ntrappous\ntrappy\ntraprock\ntraps\ntrapshoot\ntrapshooter\ntrapshooting\ntrapstick\ntrapunto\ntrasformism\ntrash\ntrashery\ntrashify\ntrashily\ntrashiness\ntraship\ntrashless\ntrashrack\ntrashy\ntrass\nTrastevere\nTrasteverine\ntrasy\ntraulism\ntrauma\ntraumasthenia\ntraumatic\ntraumatically\ntraumaticin\ntraumaticine\ntraumatism\ntraumatize\ntraumatology\ntraumatonesis\ntraumatopnea\ntraumatopyra\ntraumatosis\ntraumatotactic\ntraumatotaxis\ntraumatropic\ntraumatropism\nTrautvetteria\ntravail\ntravale\ntravally\ntravated\ntrave\ntravel\ntravelability\ntravelable\ntraveldom\ntraveled\ntraveler\ntraveleress\ntravelerlike\ntraveling\ntravellability\ntravellable\ntravelled\ntraveller\ntravelogue\ntraveloguer\ntraveltime\ntraversable\ntraversal\ntraversary\ntraverse\ntraversed\ntraversely\ntraverser\ntraversewise\ntraversework\ntraversing\ntraversion\ntravertin\ntravertine\ntravestier\ntravestiment\ntravesty\nTravis\ntravis\ntravois\ntravoy\ntrawl\ntrawlboat\ntrawler\ntrawlerman\ntrawlnet\ntray\ntrayful\ntraylike\ntreacher\ntreacherous\ntreacherously\ntreacherousness\ntreachery\ntreacle\ntreaclelike\ntreaclewort\ntreacliness\ntreacly\ntread\ntreadboard\ntreader\ntreading\ntreadle\ntreadler\ntreadmill\ntreadwheel\ntreason\ntreasonable\ntreasonableness\ntreasonably\ntreasonful\ntreasonish\ntreasonist\ntreasonless\ntreasonmonger\ntreasonous\ntreasonously\ntreasonproof\ntreasurable\ntreasure\ntreasureless\ntreasurer\ntreasurership\ntreasuress\ntreasurous\ntreasury\ntreasuryship\ntreat\ntreatable\ntreatableness\ntreatably\ntreatee\ntreater\ntreating\ntreatise\ntreatiser\ntreatment\ntreator\ntreaty\ntreatyist\ntreatyite\ntreatyless\nTrebellian\ntreble\ntrebleness\ntrebletree\ntrebly\ntrebuchet\ntrecentist\ntrechmannite\ntreckschuyt\nTreculia\ntreddle\ntredecile\ntredille\ntree\ntreebeard\ntreebine\ntreed\ntreefish\ntreeful\ntreehair\ntreehood\ntreeify\ntreeiness\ntreeless\ntreelessness\ntreelet\ntreelike\ntreeling\ntreemaker\ntreemaking\ntreeman\ntreen\ntreenail\ntreescape\ntreeship\ntreespeeler\ntreetop\ntreeward\ntreewards\ntreey\ntref\ntrefgordd\ntrefle\ntrefoil\ntrefoiled\ntrefoillike\ntrefoilwise\ntregadyne\ntregerg\ntregohm\ntrehala\ntrehalase\ntrehalose\ntreillage\ntrek\ntrekker\ntrekometer\ntrekpath\ntrellis\ntrellised\ntrellislike\ntrelliswork\nTrema\nTremandra\nTremandraceae\ntremandraceous\nTrematoda\ntrematode\nTrematodea\nTrematodes\ntrematoid\nTrematosaurus\ntremble\ntremblement\ntrembler\ntrembling\ntremblingly\ntremblingness\ntremblor\ntrembly\nTremella\nTremellaceae\ntremellaceous\nTremellales\ntremelliform\ntremelline\ntremellineous\ntremelloid\ntremellose\ntremendous\ntremendously\ntremendousness\ntremetol\ntremie\ntremolando\ntremolant\ntremolist\ntremolite\ntremolitic\ntremolo\ntremor\ntremorless\ntremorlessly\ntremulant\ntremulate\ntremulation\ntremulous\ntremulously\ntremulousness\ntrenail\ntrench\ntrenchancy\ntrenchant\ntrenchantly\ntrenchantness\ntrenchboard\ntrenched\ntrencher\ntrencherless\ntrencherlike\ntrenchermaker\ntrenchermaking\ntrencherman\ntrencherside\ntrencherwise\ntrencherwoman\ntrenchful\ntrenchlet\ntrenchlike\ntrenchmaster\ntrenchmore\ntrenchward\ntrenchwise\ntrenchwork\ntrend\ntrendle\nTrent\ntrental\nTrentepohlia\nTrentepohliaceae\ntrentepohliaceous\nTrentine\nTrenton\ntrepan\ntrepanation\ntrepang\ntrepanize\ntrepanner\ntrepanning\ntrepanningly\ntrephination\ntrephine\ntrephiner\ntrephocyte\ntrephone\ntrepid\ntrepidancy\ntrepidant\ntrepidate\ntrepidation\ntrepidatory\ntrepidity\ntrepidly\ntrepidness\nTreponema\ntreponematous\ntreponemiasis\ntreponemiatic\ntreponemicidal\ntreponemicide\nTrepostomata\ntrepostomatous\nTreron\nTreronidae\nTreroninae\ntresaiel\ntrespass\ntrespassage\ntrespasser\ntrespassory\ntress\ntressed\ntressful\ntressilate\ntressilation\ntressless\ntresslet\ntresslike\ntresson\ntressour\ntressure\ntressured\ntressy\ntrest\ntrestle\ntrestletree\ntrestlewise\ntrestlework\ntrestling\ntret\ntrevally\ntrevet\nTrevor\ntrews\ntrewsman\nTrey\ntrey\ntri\ntriable\ntriableness\ntriace\ntriacetamide\ntriacetate\ntriacetonamine\ntriachenium\ntriacid\ntriacontaeterid\ntriacontane\ntriaconter\ntriact\ntriactinal\ntriactine\ntriad\ntriadelphous\nTriadenum\ntriadic\ntriadical\ntriadically\ntriadism\ntriadist\ntriaene\ntriaenose\ntriage\ntriagonal\ntriakisicosahedral\ntriakisicosahedron\ntriakisoctahedral\ntriakisoctahedrid\ntriakisoctahedron\ntriakistetrahedral\ntriakistetrahedron\ntrial\ntrialate\ntrialism\ntrialist\ntriality\ntrialogue\ntriamid\ntriamide\ntriamine\ntriamino\ntriammonium\ntriamylose\ntriander\nTriandria\ntriandrian\ntriandrous\ntriangle\ntriangled\ntriangler\ntriangleways\ntrianglewise\ntrianglework\nTriangula\ntriangular\ntriangularity\ntriangularly\ntriangulate\ntriangulately\ntriangulation\ntriangulator\nTriangulid\ntrianguloid\ntriangulopyramidal\ntriangulotriangular\nTriangulum\ntriannual\ntriannulate\nTrianon\nTriantaphyllos\ntriantelope\ntrianthous\ntriapsal\ntriapsidal\ntriarch\ntriarchate\ntriarchy\ntriarctic\ntriarcuated\ntriareal\ntriarii\nTriarthrus\ntriarticulate\nTrias\nTriassic\ntriaster\ntriatic\nTriatoma\ntriatomic\ntriatomicity\ntriaxial\ntriaxon\ntriaxonian\ntriazane\ntriazin\ntriazine\ntriazo\ntriazoic\ntriazole\ntriazolic\ntribade\ntribadism\ntribady\ntribal\ntribalism\ntribalist\ntribally\ntribarred\ntribase\ntribasic\ntribasicity\ntribasilar\ntribble\ntribe\ntribeless\ntribelet\ntribelike\ntribesfolk\ntribeship\ntribesman\ntribesmanship\ntribespeople\ntribeswoman\ntriblastic\ntriblet\ntriboelectric\ntriboelectricity\ntribofluorescence\ntribofluorescent\nTribolium\ntriboluminescence\ntriboluminescent\ntribometer\nTribonema\nTribonemaceae\ntribophosphorescence\ntribophosphorescent\ntribophosphoroscope\ntriborough\ntribrac\ntribrach\ntribrachial\ntribrachic\ntribracteate\ntribracteolate\ntribromacetic\ntribromide\ntribromoethanol\ntribromophenol\ntribromphenate\ntribromphenol\ntribual\ntribually\ntribular\ntribulate\ntribulation\ntribuloid\nTribulus\ntribuna\ntribunal\ntribunate\ntribune\ntribuneship\ntribunitial\ntribunitian\ntribunitiary\ntribunitive\ntributable\ntributarily\ntributariness\ntributary\ntribute\ntributer\ntributist\ntributorian\ntributyrin\ntrica\ntricae\ntricalcic\ntricalcium\ntricapsular\ntricar\ntricarballylic\ntricarbimide\ntricarbon\ntricarboxylic\ntricarinate\ntricarinated\ntricarpellary\ntricarpellate\ntricarpous\ntricaudal\ntricaudate\ntrice\ntricellular\ntricenarious\ntricenarium\ntricenary\ntricennial\ntricentenarian\ntricentenary\ntricentennial\ntricentral\ntricephal\ntricephalic\ntricephalous\ntricephalus\ntriceps\nTriceratops\ntriceria\ntricerion\ntricerium\ntrichatrophia\ntrichauxis\nTrichechidae\ntrichechine\ntrichechodont\nTrichechus\ntrichevron\ntrichi\ntrichia\ntrichiasis\nTrichilia\nTrichina\ntrichina\ntrichinae\ntrichinal\nTrichinella\ntrichiniasis\ntrichiniferous\ntrichinization\ntrichinize\ntrichinoid\ntrichinopoly\ntrichinoscope\ntrichinoscopy\ntrichinosed\ntrichinosis\ntrichinotic\ntrichinous\ntrichite\ntrichitic\ntrichitis\ntrichiurid\nTrichiuridae\ntrichiuroid\nTrichiurus\ntrichloride\ntrichlormethane\ntrichloro\ntrichloroacetic\ntrichloroethylene\ntrichloromethane\ntrichloromethyl\ntrichobacteria\ntrichobezoar\ntrichoblast\ntrichobranchia\ntrichobranchiate\ntrichocarpous\ntrichocephaliasis\nTrichocephalus\ntrichoclasia\ntrichoclasis\ntrichocyst\ntrichocystic\ntrichode\nTrichoderma\nTrichodesmium\nTrichodontidae\ntrichoepithelioma\ntrichogen\ntrichogenous\ntrichoglossia\nTrichoglossidae\nTrichoglossinae\ntrichoglossine\nTrichogramma\nTrichogrammatidae\ntrichogyne\ntrichogynial\ntrichogynic\ntrichoid\nTricholaena\ntrichological\ntrichologist\ntrichology\nTricholoma\ntrichoma\nTrichomanes\ntrichomaphyte\ntrichomatose\ntrichomatosis\ntrichomatous\ntrichome\ntrichomic\ntrichomonad\nTrichomonadidae\nTrichomonas\ntrichomoniasis\ntrichomycosis\ntrichonosus\ntrichopathic\ntrichopathy\ntrichophore\ntrichophoric\ntrichophyllous\ntrichophyte\ntrichophytia\ntrichophytic\nTrichophyton\ntrichophytosis\nTrichoplax\ntrichopore\ntrichopter\nTrichoptera\ntrichoptera\ntrichopteran\ntrichopteron\ntrichopterous\ntrichopterygid\nTrichopterygidae\ntrichord\ntrichorrhea\ntrichorrhexic\ntrichorrhexis\nTrichosanthes\ntrichoschisis\ntrichosis\ntrichosporange\ntrichosporangial\ntrichosporangium\nTrichosporum\ntrichostasis\nTrichostema\ntrichostrongyle\ntrichostrongylid\nTrichostrongylus\ntrichothallic\ntrichotillomania\ntrichotomic\ntrichotomism\ntrichotomist\ntrichotomize\ntrichotomous\ntrichotomously\ntrichotomy\ntrichroic\ntrichroism\ntrichromat\ntrichromate\ntrichromatic\ntrichromatism\ntrichromatist\ntrichrome\ntrichromic\ntrichronous\ntrichuriasis\nTrichuris\ntrichy\nTricia\ntricinium\ntricipital\ntricircular\ntrick\ntricker\ntrickery\ntrickful\ntrickily\ntrickiness\ntricking\ntrickingly\ntrickish\ntrickishly\ntrickishness\ntrickle\ntrickless\ntricklet\ntricklike\ntrickling\ntricklingly\ntrickly\ntrickment\ntrickproof\ntricksical\ntricksily\ntricksiness\ntricksome\ntrickster\ntrickstering\ntrickstress\ntricksy\ntricktrack\ntricky\ntriclad\nTricladida\ntriclinate\ntriclinia\ntriclinial\ntricliniarch\ntricliniary\ntriclinic\ntriclinium\ntriclinohedric\ntricoccose\ntricoccous\ntricolette\ntricolic\ntricolon\ntricolor\ntricolored\ntricolumnar\ntricompound\ntriconch\nTriconodon\ntriconodont\nTriconodonta\ntriconodontid\ntriconodontoid\ntriconodonty\ntriconsonantal\ntriconsonantalism\ntricophorous\ntricorn\ntricornered\ntricornute\ntricorporal\ntricorporate\ntricoryphean\ntricosane\ntricosanone\ntricostate\ntricosyl\ntricosylic\ntricot\ntricotine\ntricotyledonous\ntricresol\ntricrotic\ntricrotism\ntricrotous\ntricrural\ntricurvate\ntricuspal\ntricuspid\ntricuspidal\ntricuspidate\ntricuspidated\ntricussate\ntricyanide\ntricycle\ntricyclene\ntricycler\ntricyclic\ntricyclist\nTricyrtis\nTridacna\nTridacnidae\ntridactyl\ntridactylous\ntridaily\ntriddler\ntridecane\ntridecene\ntridecilateral\ntridecoic\ntridecyl\ntridecylene\ntridecylic\ntrident\ntridental\ntridentate\ntridentated\ntridentiferous\nTridentine\nTridentinian\ntridepside\ntridermic\ntridiametral\ntridiapason\ntridigitate\ntridimensional\ntridimensionality\ntridimensioned\ntridiurnal\ntridominium\ntridrachm\ntriduan\ntriduum\ntridymite\ntridynamous\ntried\ntriedly\ntrielaidin\ntriene\ntriennial\ntrienniality\ntriennially\ntriennium\ntriens\ntriental\nTrientalis\ntriequal\ntrier\ntrierarch\ntrierarchal\ntrierarchic\ntrierarchy\ntrierucin\ntrieteric\ntrieterics\ntriethanolamine\ntriethyl\ntriethylamine\ntriethylstibine\ntrifa\ntrifacial\ntrifarious\ntrifasciated\ntriferous\ntrifid\ntrifilar\ntrifistulary\ntriflagellate\ntrifle\ntrifledom\ntrifler\ntriflet\ntrifling\ntriflingly\ntriflingness\ntrifloral\ntriflorate\ntriflorous\ntrifluoride\ntrifocal\ntrifoil\ntrifold\ntrifoliate\ntrifoliated\ntrifoliolate\ntrifoliosis\nTrifolium\ntrifolium\ntrifoly\ntriforial\ntriforium\ntriform\ntriformed\ntriformin\ntriformity\ntriformous\ntrifoveolate\ntrifuran\ntrifurcal\ntrifurcate\ntrifurcation\ntrig\ntrigamist\ntrigamous\ntrigamy\ntrigeminal\ntrigeminous\ntrigeneric\ntrigesimal\ntrigger\ntriggered\ntriggerfish\ntriggerless\ntrigintal\ntrigintennial\nTrigla\ntriglandular\ntriglid\nTriglidae\ntriglochid\nTriglochin\ntriglochin\ntriglot\ntrigly\ntriglyceride\ntriglyceryl\ntriglyph\ntriglyphal\ntriglyphed\ntriglyphic\ntriglyphical\ntrigness\ntrigon\nTrigona\ntrigonal\ntrigonally\ntrigone\nTrigonella\ntrigonelline\ntrigoneutic\ntrigoneutism\nTrigonia\nTrigoniaceae\ntrigoniacean\ntrigoniaceous\ntrigonic\ntrigonid\nTrigoniidae\ntrigonite\ntrigonitis\ntrigonocephalic\ntrigonocephalous\nTrigonocephalus\ntrigonocephaly\ntrigonocerous\ntrigonododecahedron\ntrigonodont\ntrigonoid\ntrigonometer\ntrigonometric\ntrigonometrical\ntrigonometrician\ntrigonometry\ntrigonon\ntrigonotype\ntrigonous\ntrigonum\ntrigram\ntrigrammatic\ntrigrammatism\ntrigrammic\ntrigraph\ntrigraphic\ntriguttulate\ntrigyn\nTrigynia\ntrigynian\ntrigynous\ntrihalide\ntrihedral\ntrihedron\ntrihemeral\ntrihemimer\ntrihemimeral\ntrihemimeris\ntrihemiobol\ntrihemiobolion\ntrihemitetartemorion\ntrihoral\ntrihourly\ntrihybrid\ntrihydrate\ntrihydrated\ntrihydric\ntrihydride\ntrihydrol\ntrihydroxy\ntrihypostatic\ntrijugate\ntrijugous\ntrijunction\ntrikaya\ntrike\ntriker\ntrikeria\ntrikerion\ntriketo\ntriketone\ntrikir\ntrilabe\ntrilabiate\ntrilamellar\ntrilamellated\ntrilaminar\ntrilaminate\ntrilarcenous\ntrilateral\ntrilaterality\ntrilaterally\ntrilateralness\ntrilaurin\ntrilby\ntrilemma\ntrilinear\ntrilineate\ntrilineated\ntrilingual\ntrilinguar\ntrilinolate\ntrilinoleate\ntrilinolenate\ntrilinolenin\nTrilisa\ntrilit\ntrilite\ntriliteral\ntriliteralism\ntriliterality\ntriliterally\ntriliteralness\ntrilith\ntrilithic\ntrilithon\ntrill\ntrillachan\ntrillet\ntrilli\nTrilliaceae\ntrilliaceous\ntrillibub\ntrilliin\ntrilling\ntrillion\ntrillionaire\ntrillionize\ntrillionth\nTrillium\ntrillium\ntrillo\ntrilobate\ntrilobated\ntrilobation\ntrilobe\ntrilobed\nTrilobita\ntrilobite\ntrilobitic\ntrilocular\ntriloculate\ntrilogic\ntrilogical\ntrilogist\ntrilogy\nTrilophodon\ntrilophodont\ntriluminar\ntriluminous\ntrim\ntrimacer\ntrimacular\ntrimargarate\ntrimargarin\ntrimastigate\ntrimellitic\ntrimembral\ntrimensual\ntrimer\nTrimera\ntrimercuric\nTrimeresurus\ntrimeric\ntrimeride\ntrimerite\ntrimerization\ntrimerous\ntrimesic\ntrimesinic\ntrimesitic\ntrimesitinic\ntrimester\ntrimestral\ntrimestrial\ntrimesyl\ntrimetalism\ntrimetallic\ntrimeter\ntrimethoxy\ntrimethyl\ntrimethylacetic\ntrimethylamine\ntrimethylbenzene\ntrimethylene\ntrimethylmethane\ntrimethylstibine\ntrimetric\ntrimetrical\ntrimetrogon\ntrimly\ntrimmer\ntrimming\ntrimmingly\ntrimness\ntrimodal\ntrimodality\ntrimolecular\ntrimonthly\ntrimoric\ntrimorph\ntrimorphic\ntrimorphism\ntrimorphous\ntrimotor\ntrimotored\ntrimstone\ntrimtram\ntrimuscular\ntrimyristate\ntrimyristin\ntrin\nTrinacrian\ntrinal\ntrinality\ntrinalize\ntrinary\ntrinational\ntrindle\ntrine\ntrinely\ntrinervate\ntrinerve\ntrinerved\ntrineural\nTringa\ntringine\ntringle\ntringoid\nTrinidadian\ntrinidado\nTrinil\nTrinitarian\ntrinitarian\nTrinitarianism\ntrinitrate\ntrinitration\ntrinitride\ntrinitrin\ntrinitro\ntrinitrocarbolic\ntrinitrocellulose\ntrinitrocresol\ntrinitroglycerin\ntrinitromethane\ntrinitrophenol\ntrinitroresorcin\ntrinitrotoluene\ntrinitroxylene\ntrinitroxylol\nTrinity\ntrinity\ntrinityhood\ntrink\ntrinkerman\ntrinket\ntrinketer\ntrinketry\ntrinkety\ntrinkle\ntrinklement\ntrinklet\ntrinkums\nTrinobantes\ntrinoctial\ntrinodal\ntrinode\ntrinodine\ntrinol\ntrinomial\ntrinomialism\ntrinomialist\ntrinomiality\ntrinomially\ntrinopticon\nTrinorantum\nTrinovant\nTrinovantes\ntrintle\ntrinucleate\nTrinucleus\nTrio\ntrio\ntriobol\ntriobolon\ntrioctile\ntriocular\ntriode\ntriodia\ntriodion\nTriodon\nTriodontes\nTriodontidae\ntriodontoid\nTriodontoidea\nTriodontoidei\nTriodontophorus\nTrioecia\ntrioecious\ntrioeciously\ntrioecism\ntriolcous\ntriole\ntrioleate\ntriolefin\ntrioleic\ntriolein\ntriolet\ntriology\nTrionychidae\ntrionychoid\nTrionychoideachid\ntrionychoidean\ntrionym\ntrionymal\nTrionyx\ntrioperculate\nTriopidae\nTriops\ntrior\ntriorchis\ntriorchism\ntriorthogonal\ntriose\nTriosteum\ntriovulate\ntrioxazine\ntrioxide\ntrioxymethylene\ntriozonide\ntrip\ntripal\ntripaleolate\ntripalmitate\ntripalmitin\ntripara\ntripart\ntriparted\ntripartedly\ntripartible\ntripartient\ntripartite\ntripartitely\ntripartition\ntripaschal\ntripe\ntripedal\ntripel\ntripelike\ntripeman\ntripemonger\ntripennate\ntripenny\ntripeptide\ntripersonal\ntripersonalism\ntripersonalist\ntripersonality\ntripersonally\ntripery\ntripeshop\ntripestone\ntripetaloid\ntripetalous\ntripewife\ntripewoman\ntriphammer\ntriphane\ntriphase\ntriphaser\nTriphasia\ntriphasic\ntriphenyl\ntriphenylamine\ntriphenylated\ntriphenylcarbinol\ntriphenylmethane\ntriphenylmethyl\ntriphenylphosphine\ntriphibian\ntriphibious\ntriphony\nTriphora\ntriphthong\ntriphyletic\ntriphyline\ntriphylite\ntriphyllous\nTriphysite\ntripinnate\ntripinnated\ntripinnately\ntripinnatifid\ntripinnatisect\nTripitaka\ntriplane\nTriplaris\ntriplasian\ntriplasic\ntriple\ntripleback\ntriplefold\ntriplegia\ntripleness\ntriplet\ntripletail\ntripletree\ntriplewise\ntriplex\ntriplexity\ntriplicate\ntriplication\ntriplicative\ntriplicature\nTriplice\nTriplicist\ntriplicity\ntriplicostate\ntripliform\ntriplinerved\ntripling\ntriplite\ntriploblastic\ntriplocaulescent\ntriplocaulous\nTriplochitonaceae\ntriploid\ntriploidic\ntriploidite\ntriploidy\ntriplopia\ntriplopy\ntriplum\ntriplumbic\ntriply\ntripmadam\ntripod\ntripodal\ntripodial\ntripodian\ntripodic\ntripodical\ntripody\ntripointed\ntripolar\ntripoli\nTripoline\ntripoline\nTripolitan\ntripolite\ntripos\ntripotassium\ntrippant\ntripper\ntrippet\ntripping\ntrippingly\ntrippingness\ntrippist\ntripple\ntrippler\nTripsacum\ntripsill\ntripsis\ntripsome\ntripsomely\ntriptane\ntripterous\ntriptote\ntriptych\ntriptyque\ntripudial\ntripudiant\ntripudiary\ntripudiate\ntripudiation\ntripudist\ntripudium\ntripunctal\ntripunctate\ntripy\nTripylaea\ntripylaean\nTripylarian\ntripylarian\ntripyrenous\ntriquadrantal\ntriquetra\ntriquetral\ntriquetric\ntriquetrous\ntriquetrously\ntriquetrum\ntriquinate\ntriquinoyl\ntriradial\ntriradially\ntriradiate\ntriradiated\ntriradiately\ntriradiation\nTriratna\ntrirectangular\ntriregnum\ntrireme\ntrirhombohedral\ntrirhomboidal\ntriricinolein\ntrisaccharide\ntrisaccharose\ntrisacramentarian\nTrisagion\ntrisalt\ntrisazo\ntrisceptral\ntrisect\ntrisected\ntrisection\ntrisector\ntrisectrix\ntriseme\ntrisemic\ntrisensory\ntrisepalous\ntriseptate\ntriserial\ntriserially\ntriseriate\ntriseriatim\ntrisetose\nTrisetum\ntrishna\ntrisilane\ntrisilicane\ntrisilicate\ntrisilicic\ntrisinuate\ntrisinuated\ntriskele\ntriskelion\ntrismegist\ntrismegistic\ntrismic\ntrismus\ntrisoctahedral\ntrisoctahedron\ntrisodium\ntrisome\ntrisomic\ntrisomy\ntrisonant\nTrisotropis\ntrispast\ntrispaston\ntrispermous\ntrispinose\ntrisplanchnic\ntrisporic\ntrisporous\ntrisquare\ntrist\ntristachyous\nTristam\nTristan\nTristania\ntristate\ntristearate\ntristearin\ntristeness\ntristetrahedron\ntristeza\ntristful\ntristfully\ntristfulness\ntristich\nTristichaceae\ntristichic\ntristichous\ntristigmatic\ntristigmatose\ntristiloquy\ntristisonous\nTristram\ntristylous\ntrisubstituted\ntrisubstitution\ntrisul\ntrisula\ntrisulcate\ntrisulcated\ntrisulphate\ntrisulphide\ntrisulphone\ntrisulphonic\ntrisulphoxide\ntrisylabic\ntrisyllabical\ntrisyllabically\ntrisyllabism\ntrisyllabity\ntrisyllable\ntritactic\ntritagonist\ntritangent\ntritangential\ntritanope\ntritanopia\ntritanopic\ntritaph\ntrite\nTriteleia\ntritely\ntritemorion\ntritencephalon\ntriteness\ntriternate\ntriternately\ntriterpene\ntritetartemorion\ntritheism\ntritheist\ntritheistic\ntritheistical\ntritheite\ntritheocracy\ntrithing\ntrithioaldehyde\ntrithiocarbonate\ntrithiocarbonic\ntrithionate\ntrithionic\nTrithrinax\ntritical\ntriticality\ntritically\ntriticalness\ntriticeous\ntriticeum\ntriticin\ntriticism\ntriticoid\nTriticum\ntriticum\ntritish\ntritium\ntritocerebral\ntritocerebrum\ntritocone\ntritoconid\nTritogeneia\ntritolo\nTritoma\ntritomite\nTriton\ntriton\ntritonal\ntritonality\ntritone\nTritoness\nTritonia\nTritonic\nTritonidae\ntritonoid\ntritonous\ntritonymph\ntritonymphal\ntritopatores\ntritopine\ntritor\ntritoral\ntritorium\ntritoxide\ntritozooid\ntritriacontane\ntrittichan\ntritubercular\nTrituberculata\ntrituberculism\ntrituberculy\ntriturable\ntritural\ntriturate\ntrituration\ntriturator\ntriturature\ntriturium\nTriturus\ntrityl\nTritylodon\nTriumfetta\nTriumph\ntriumph\ntriumphal\ntriumphance\ntriumphancy\ntriumphant\ntriumphantly\ntriumphator\ntriumpher\ntriumphing\ntriumphwise\ntriumvir\ntriumviral\ntriumvirate\ntriumviri\ntriumvirship\ntriunal\ntriune\ntriungulin\ntriunification\ntriunion\ntriunitarian\ntriunity\ntriunsaturated\ntriurid\nTriuridaceae\nTriuridales\nTriuris\ntrivalence\ntrivalency\ntrivalent\ntrivalerin\ntrivalve\ntrivalvular\ntrivant\ntrivantly\ntrivariant\ntriverbal\ntriverbial\ntrivet\ntrivetwise\ntrivia\ntrivial\ntrivialism\ntrivialist\ntriviality\ntrivialize\ntrivially\ntrivialness\ntrivirga\ntrivirgate\ntrivium\ntrivoltine\ntrivvet\ntriweekly\nTrix\nTrixie\nTrixy\ntrizoic\ntrizomal\ntrizonal\ntrizone\nTrizonia\nTroad\ntroat\ntroca\ntrocaical\ntrocar\nTrochaic\ntrochaic\ntrochaicality\ntrochal\ntrochalopod\nTrochalopoda\ntrochalopodous\ntrochanter\ntrochanteric\ntrochanterion\ntrochantin\ntrochantinian\ntrochart\ntrochate\ntroche\ntrocheameter\ntrochee\ntrocheeize\ntrochelminth\nTrochelminthes\ntrochi\ntrochid\nTrochidae\ntrochiferous\ntrochiform\nTrochila\nTrochili\ntrochili\ntrochilic\ntrochilics\ntrochilidae\ntrochilidine\ntrochilidist\ntrochiline\ntrochilopodous\nTrochilus\ntrochilus\ntroching\ntrochiscation\ntrochiscus\ntrochite\ntrochitic\nTrochius\ntrochlea\ntrochlear\ntrochleariform\ntrochlearis\ntrochleary\ntrochleate\ntrochleiform\ntrochocephalia\ntrochocephalic\ntrochocephalus\ntrochocephaly\nTrochodendraceae\ntrochodendraceous\nTrochodendron\ntrochoid\ntrochoidal\ntrochoidally\ntrochoides\ntrochometer\ntrochophore\nTrochosphaera\nTrochosphaerida\ntrochosphere\ntrochospherical\nTrochozoa\ntrochozoic\ntrochozoon\nTrochus\ntrochus\ntrock\ntroco\ntroctolite\ntrod\ntrodden\ntrode\ntroegerite\nTroezenian\ntroft\ntrog\ntrogger\ntroggin\ntroglodytal\ntroglodyte\nTroglodytes\ntroglodytic\ntroglodytical\nTroglodytidae\nTroglodytinae\ntroglodytish\ntroglodytism\ntrogon\nTrogones\nTrogonidae\nTrogoniformes\ntrogonoid\ntrogs\ntrogue\nTroiades\nTroic\ntroika\ntroilite\nTrojan\ntroke\ntroker\ntroll\ntrolldom\ntrolleite\ntroller\ntrolley\ntrolleyer\ntrolleyful\ntrolleyman\ntrollflower\ntrollimog\ntrolling\nTrollius\ntrollman\ntrollol\ntrollop\nTrollopean\nTrollopeanism\ntrollopish\ntrollops\ntrollopy\ntrolly\ntromba\ntrombe\ntrombiculid\ntrombidiasis\nTrombidiidae\nTrombidium\ntrombone\ntrombonist\ntrombony\ntrommel\ntromometer\ntromometric\ntromometrical\ntromometry\ntromp\ntrompe\ntrompil\ntrompillo\ntromple\ntron\ntrona\ntronador\ntronage\ntronc\ntrondhjemite\ntrone\ntroner\ntroolie\ntroop\ntrooper\ntrooperess\ntroopfowl\ntroopship\ntroopwise\ntroostite\ntroostitic\ntroot\ntropacocaine\ntropaeolaceae\ntropaeolaceous\ntropaeolin\nTropaeolum\ntropaion\ntropal\ntroparia\ntroparion\ntropary\ntropate\ntrope\ntropeic\ntropeine\ntroper\ntropesis\ntrophaea\ntrophaeum\ntrophal\ntrophallactic\ntrophallaxis\ntrophectoderm\ntrophedema\ntrophema\ntrophesial\ntrophesy\ntrophi\ntrophic\ntrophical\ntrophically\ntrophicity\ntrophied\nTrophis\ntrophism\ntrophobiont\ntrophobiosis\ntrophobiotic\ntrophoblast\ntrophoblastic\ntrophochromatin\ntrophocyte\ntrophoderm\ntrophodisc\ntrophodynamic\ntrophodynamics\ntrophogenesis\ntrophogenic\ntrophogeny\ntrophology\ntrophonema\ntrophoneurosis\ntrophoneurotic\nTrophonian\ntrophonucleus\ntrophopathy\ntrophophore\ntrophophorous\ntrophophyte\ntrophoplasm\ntrophoplasmatic\ntrophoplasmic\ntrophoplast\ntrophosomal\ntrophosome\ntrophosperm\ntrophosphere\ntrophospongia\ntrophospongial\ntrophospongium\ntrophospore\ntrophotaxis\ntrophotherapy\ntrophothylax\ntrophotropic\ntrophotropism\ntrophozoite\ntrophozooid\ntrophy\ntrophyless\ntrophywort\ntropic\ntropical\nTropicalia\nTropicalian\ntropicality\ntropicalization\ntropicalize\ntropically\ntropicopolitan\ntropidine\nTropidoleptus\ntropine\ntropism\ntropismatic\ntropist\ntropistic\ntropocaine\ntropologic\ntropological\ntropologically\ntropologize\ntropology\ntropometer\ntropopause\ntropophil\ntropophilous\ntropophyte\ntropophytic\ntroposphere\ntropostereoscope\ntropoyl\ntroptometer\ntropyl\ntrostera\ntrot\ntrotcozy\ntroth\ntrothful\ntrothless\ntrothlike\ntrothplight\ntrotlet\ntrotline\ntrotol\ntrotter\ntrottie\ntrottles\ntrottoir\ntrottoired\ntrotty\ntrotyl\ntroubadour\ntroubadourish\ntroubadourism\ntroubadourist\ntrouble\ntroubledly\ntroubledness\ntroublemaker\ntroublemaking\ntroublement\ntroubleproof\ntroubler\ntroublesome\ntroublesomely\ntroublesomeness\ntroubling\ntroublingly\ntroublous\ntroublously\ntroublousness\ntroubly\ntrough\ntroughful\ntroughing\ntroughlike\ntroughster\ntroughway\ntroughwise\ntroughy\ntrounce\ntrouncer\ntroupand\ntroupe\ntrouper\ntroupial\ntrouse\ntrouser\ntrouserdom\ntrousered\ntrouserettes\ntrouserian\ntrousering\ntrouserless\ntrousers\ntrousseau\ntrousseaux\ntrout\ntroutbird\ntrouter\ntroutflower\ntroutful\ntroutiness\ntroutless\ntroutlet\ntroutlike\ntrouty\ntrouvere\ntrouveur\ntrove\ntroveless\ntrover\ntrow\ntrowel\ntrowelbeak\ntroweler\ntrowelful\ntrowelman\ntrowing\ntrowlesworthite\ntrowman\ntrowth\nTroy\ntroy\nTroynovant\nTroytown\ntruancy\ntruandise\ntruant\ntruantcy\ntruantism\ntruantlike\ntruantly\ntruantness\ntruantry\ntruantship\ntrub\ntrubu\ntruce\ntrucebreaker\ntrucebreaking\ntruceless\ntrucemaker\ntrucemaking\ntrucial\ntrucidation\ntruck\ntruckage\ntrucker\ntruckful\ntrucking\ntruckle\ntruckler\ntrucklike\ntruckling\ntrucklingly\ntruckload\ntruckman\ntruckmaster\ntrucks\ntruckster\ntruckway\ntruculence\ntruculency\ntruculent\ntruculental\ntruculently\ntruculentness\ntruddo\ntrudellite\ntrudge\ntrudgen\ntrudger\nTrudy\ntrue\ntrueborn\ntruebred\ntruehearted\ntrueheartedly\ntrueheartedness\ntruelike\ntruelove\ntrueness\ntruepenny\ntruer\ntruff\ntruffle\ntruffled\ntrufflelike\ntruffler\ntrufflesque\ntrug\ntruish\ntruism\ntruismatic\ntruistic\ntruistical\ntrull\nTrullan\ntruller\ntrullization\ntrullo\ntruly\ntrumbash\ntrummel\ntrump\ntrumper\ntrumperiness\ntrumpery\ntrumpet\ntrumpetbush\ntrumpeter\ntrumpeting\ntrumpetless\ntrumpetlike\ntrumpetry\ntrumpetweed\ntrumpetwood\ntrumpety\ntrumph\ntrumpie\ntrumpless\ntrumplike\ntrun\ntruncage\ntruncal\ntruncate\ntruncated\nTruncatella\nTruncatellidae\ntruncately\ntruncation\ntruncator\ntruncatorotund\ntruncatosinuate\ntruncature\ntrunch\ntrunched\ntruncheon\ntruncheoned\ntruncher\ntrunchman\ntrundle\ntrundlehead\ntrundler\ntrundleshot\ntrundletail\ntrundling\ntrunk\ntrunkback\ntrunked\ntrunkfish\ntrunkful\ntrunking\ntrunkless\ntrunkmaker\ntrunknose\ntrunkway\ntrunkwork\ntrunnel\ntrunnion\ntrunnioned\ntrunnionless\ntrush\ntrusion\ntruss\ntrussed\ntrussell\ntrusser\ntrussing\ntrussmaker\ntrussmaking\ntrusswork\ntrust\ntrustability\ntrustable\ntrustableness\ntrustably\ntrustee\ntrusteeism\ntrusteeship\ntrusten\ntruster\ntrustful\ntrustfully\ntrustfulness\ntrustification\ntrustify\ntrustihood\ntrustily\ntrustiness\ntrusting\ntrustingly\ntrustingness\ntrustle\ntrustless\ntrustlessly\ntrustlessness\ntrustman\ntrustmonger\ntrustwoman\ntrustworthily\ntrustworthiness\ntrustworthy\ntrusty\ntruth\ntruthable\ntruthful\ntruthfully\ntruthfulness\ntruthify\ntruthiness\ntruthless\ntruthlessly\ntruthlessness\ntruthlike\ntruthlikeness\ntruthsman\ntruthteller\ntruthtelling\ntruthy\nTrutta\ntruttaceous\ntruvat\ntruxillic\ntruxilline\ntry\ntrygon\nTrygonidae\ntryhouse\nTrying\ntrying\ntryingly\ntryingness\ntryma\ntryout\ntryp\ntrypa\ntrypan\ntrypaneid\nTrypaneidae\ntrypanocidal\ntrypanocide\ntrypanolysin\ntrypanolysis\ntrypanolytic\nTrypanosoma\ntrypanosoma\ntrypanosomacidal\ntrypanosomacide\ntrypanosomal\ntrypanosomatic\nTrypanosomatidae\ntrypanosomatosis\ntrypanosomatous\ntrypanosome\ntrypanosomiasis\ntrypanosomic\nTryparsamide\nTrypeta\ntrypetid\nTrypetidae\nTryphena\nTryphosa\ntrypiate\ntrypograph\ntrypographic\ntrypsin\ntrypsinize\ntrypsinogen\ntryptase\ntryptic\ntryptogen\ntryptone\ntryptonize\ntryptophan\ntrysail\ntryst\ntryster\ntrysting\ntryt\ntryworks\ntsadik\ntsamba\ntsantsa\ntsar\ntsardom\ntsarevitch\ntsarina\ntsaritza\ntsarship\ntsatlee\nTsattine\ntscharik\ntscheffkinite\nTscherkess\ntsere\ntsessebe\ntsetse\nTshi\ntsia\nTsiltaden\nTsimshian\ntsine\ntsingtauite\ntsiology\nTsoneca\nTsonecan\ntst\ntsuba\ntsubo\nTsuga\nTsuma\ntsumebite\ntsun\ntsunami\ntsungtu\nTsutsutsi\ntu\ntua\nTualati\nTuamotu\nTuamotuan\nTuan\ntuan\nTuareg\ntuarn\ntuart\ntuatara\ntuatera\ntuath\ntub\nTuba\ntuba\ntubae\ntubage\ntubal\ntubaphone\ntubar\ntubate\ntubatoxin\nTubatulabal\ntubba\ntubbable\ntubbal\ntubbeck\ntubber\ntubbie\ntubbiness\ntubbing\ntubbish\ntubboe\ntubby\ntube\ntubeflower\ntubeform\ntubeful\ntubehead\ntubehearted\ntubeless\ntubelet\ntubelike\ntubemaker\ntubemaking\ntubeman\ntuber\nTuberaceae\ntuberaceous\nTuberales\ntuberation\ntubercle\ntubercled\ntuberclelike\ntubercula\ntubercular\nTubercularia\nTuberculariaceae\ntuberculariaceous\ntubercularization\ntubercularize\ntubercularly\ntubercularness\ntuberculate\ntuberculated\ntuberculatedly\ntuberculately\ntuberculation\ntuberculatogibbous\ntuberculatonodose\ntuberculatoradiate\ntuberculatospinous\ntubercule\ntuberculed\ntuberculid\ntuberculide\ntuberculiferous\ntuberculiform\ntuberculin\ntuberculinic\ntuberculinization\ntuberculinize\ntuberculization\ntuberculize\ntuberculocele\ntuberculocidin\ntuberculoderma\ntuberculoid\ntuberculoma\ntuberculomania\ntuberculomata\ntuberculophobia\ntuberculoprotein\ntuberculose\ntuberculosectorial\ntuberculosed\ntuberculosis\ntuberculotherapist\ntuberculotherapy\ntuberculotoxin\ntuberculotrophic\ntuberculous\ntuberculously\ntuberculousness\ntuberculum\ntuberiferous\ntuberiform\ntuberin\ntuberization\ntuberize\ntuberless\ntuberoid\ntuberose\ntuberosity\ntuberous\ntuberously\ntuberousness\ntubesmith\ntubework\ntubeworks\ntubfish\ntubful\ntubicen\ntubicinate\ntubicination\nTubicola\nTubicolae\ntubicolar\ntubicolous\ntubicorn\ntubicornous\ntubifacient\ntubifer\ntubiferous\nTubifex\nTubificidae\nTubiflorales\ntubiflorous\ntubiform\ntubig\ntubik\ntubilingual\nTubinares\ntubinarial\ntubinarine\ntubing\nTubingen\ntubiparous\nTubipora\ntubipore\ntubiporid\nTubiporidae\ntubiporoid\ntubiporous\ntublet\ntublike\ntubmaker\ntubmaking\ntubman\ntuboabdominal\ntubocurarine\ntubolabellate\ntuboligamentous\ntuboovarial\ntuboovarian\ntuboperitoneal\ntuborrhea\ntubotympanal\ntubovaginal\ntubular\nTubularia\ntubularia\nTubulariae\ntubularian\nTubularida\ntubularidan\nTubulariidae\ntubularity\ntubularly\ntubulate\ntubulated\ntubulation\ntubulator\ntubulature\ntubule\ntubulet\ntubuli\ntubulibranch\ntubulibranchian\nTubulibranchiata\ntubulibranchiate\nTubulidentata\ntubulidentate\nTubulifera\ntubuliferan\ntubuliferous\ntubulifloral\ntubuliflorous\ntubuliform\nTubulipora\ntubulipore\ntubuliporid\nTubuliporidae\ntubuliporoid\ntubulization\ntubulodermoid\ntubuloracemose\ntubulosaccular\ntubulose\ntubulostriato\ntubulous\ntubulously\ntubulousness\ntubulure\ntubulus\ntubwoman\nTucana\nTucanae\ntucandera\nTucano\ntuchit\ntuchun\ntuchunate\ntuchunism\ntuchunize\ntuck\nTuckahoe\ntuckahoe\ntucker\ntuckermanity\ntucket\ntucking\ntuckner\ntuckshop\ntucktoo\ntucky\ntucum\ntucuma\ntucuman\nTucuna\ntudel\nTudesque\nTudor\nTudoresque\ntue\ntueiron\nTuesday\ntufa\ntufaceous\ntufalike\ntufan\ntuff\ntuffaceous\ntuffet\ntuffing\ntuft\ntuftaffeta\ntufted\ntufter\ntufthunter\ntufthunting\ntuftily\ntufting\ntuftlet\ntufty\ntug\ntugboat\ntugboatman\ntugger\ntuggery\ntugging\ntuggingly\ntughra\ntugless\ntuglike\ntugman\ntugrik\ntugui\ntugurium\ntui\ntuik\ntuille\ntuillette\ntuilyie\ntuism\ntuition\ntuitional\ntuitionary\ntuitive\ntuke\ntukra\nTukuler\nTukulor\ntula\nTulalip\ntulare\ntularemia\ntulasi\nTulbaghia\ntulchan\ntulchin\ntule\ntuliac\ntulip\nTulipa\ntulipflower\ntulipiferous\ntulipist\ntuliplike\ntulipomania\ntulipomaniac\ntulipwood\ntulipy\ntulisan\nTulkepaia\ntulle\nTullian\ntullibee\nTulostoma\ntulsi\nTulu\ntulwar\ntum\ntumasha\ntumatakuru\ntumatukuru\ntumbak\ntumbester\ntumble\ntumblebug\ntumbled\ntumbledung\ntumbler\ntumblerful\ntumblerlike\ntumblerwise\ntumbleweed\ntumblification\ntumbling\ntumblingly\ntumbly\nTumboa\ntumbrel\ntume\ntumefacient\ntumefaction\ntumefy\ntumescence\ntumescent\ntumid\ntumidity\ntumidly\ntumidness\nTumion\ntummals\ntummel\ntummer\ntummock\ntummy\ntumor\ntumored\ntumorlike\ntumorous\ntump\ntumpline\ntumtum\ntumular\ntumulary\ntumulate\ntumulation\ntumuli\ntumulose\ntumulosity\ntumulous\ntumult\ntumultuarily\ntumultuariness\ntumultuary\ntumultuate\ntumultuation\ntumultuous\ntumultuously\ntumultuousness\ntumulus\nTumupasa\ntun\nTuna\ntuna\ntunable\ntunableness\ntunably\ntunbellied\ntunbelly\ntunca\ntund\ntundagslatta\ntunder\ntundish\ntundra\ntundun\ntune\nTunebo\ntuned\ntuneful\ntunefully\ntunefulness\ntuneless\ntunelessly\ntunelessness\ntunemaker\ntunemaking\ntuner\ntunesome\ntunester\ntunful\ntung\nTunga\nTungan\ntungate\ntungo\ntungstate\ntungsten\ntungstenic\ntungsteniferous\ntungstenite\ntungstic\ntungstite\ntungstosilicate\ntungstosilicic\nTungus\nTungusian\nTungusic\ntunhoof\ntunic\nTunica\nTunican\ntunicary\nTunicata\ntunicate\ntunicated\ntunicin\ntunicked\ntunicle\ntunicless\ntuniness\ntuning\ntunish\nTunisian\ntunist\ntunk\nTunker\ntunket\ntunlike\ntunmoot\ntunna\ntunnel\ntunneled\ntunneler\ntunneling\ntunnelist\ntunnelite\ntunnellike\ntunnelly\ntunnelmaker\ntunnelmaking\ntunnelman\ntunnelway\ntunner\ntunnery\nTunnit\ntunnland\ntunnor\ntunny\ntuno\ntunu\ntuny\ntup\nTupaia\nTupaiidae\ntupakihi\ntupanship\ntupara\ntupek\ntupelo\nTupi\nTupian\ntupik\nTupinamba\nTupinaqui\ntupman\ntuppence\ntuppenny\nTupperian\nTupperish\nTupperism\nTupperize\ntupuna\ntuque\ntur\nturacin\nTuracus\nTuranian\nTuranianism\nTuranism\nturanose\nturb\nturban\nturbaned\nturbanesque\nturbanette\nturbanless\nturbanlike\nturbantop\nturbanwise\nturbary\nturbeh\nTurbellaria\nturbellarian\nturbellariform\nturbescency\nturbid\nturbidimeter\nturbidimetric\nturbidimetry\nturbidity\nturbidly\nturbidness\nturbinaceous\nturbinage\nturbinal\nturbinate\nturbinated\nturbination\nturbinatoconcave\nturbinatocylindrical\nturbinatoglobose\nturbinatostipitate\nturbine\nturbinectomy\nturbined\nturbinelike\nTurbinella\nTurbinellidae\nturbinelloid\nturbiner\nturbines\nTurbinidae\nturbiniform\nturbinoid\nturbinotome\nturbinotomy\nturbit\nturbith\nturbitteen\nTurbo\nturbo\nturboalternator\nturboblower\nturbocompressor\nturbodynamo\nturboexciter\nturbofan\nturbogenerator\nturbomachine\nturbomotor\nturbopump\nturbosupercharge\nturbosupercharger\nturbot\nturbotlike\nturboventilator\nturbulence\nturbulency\nturbulent\nturbulently\nturbulentness\nTurcian\nTurcic\nTurcification\nTurcism\nTurcize\nTurco\nturco\nTurcoman\nTurcophilism\nturcopole\nturcopolier\nturd\nTurdetan\nTurdidae\nturdiform\nTurdinae\nturdine\nturdoid\nTurdus\ntureen\ntureenful\nturf\nturfage\nturfdom\nturfed\nturfen\nturfiness\nturfing\nturfite\nturfless\nturflike\nturfman\nturfwise\nturfy\nturgency\nturgent\nturgently\nturgesce\nturgescence\nturgescency\nturgescent\nturgescible\nturgid\nturgidity\nturgidly\nturgidness\nturgite\nturgoid\nturgor\nturgy\nTuri\nturicata\nturio\nturion\nturioniferous\nturjaite\nturjite\nTurk\nturk\nTurkana\nTurkdom\nTurkeer\nturken\nTurkery\nTurkess\nTurkey\nturkey\nturkeyback\nturkeyberry\nturkeybush\nTurkeydom\nturkeyfoot\nTurkeyism\nturkeylike\nTurki\nTurkic\nTurkicize\nTurkification\nTurkify\nturkis\nTurkish\nTurkishly\nTurkishness\nTurkism\nTurkize\nturkle\nTurklike\nTurkman\nTurkmen\nTurkmenian\nTurkologist\nTurkology\nTurkoman\nTurkomania\nTurkomanic\nTurkomanize\nTurkophil\nTurkophile\nTurkophilia\nTurkophilism\nTurkophobe\nTurkophobist\nturlough\nTurlupin\nturm\nturma\nturment\nturmeric\nturmit\nturmoil\nturmoiler\nturn\nturnable\nturnabout\nturnagain\nturnaround\nturnaway\nturnback\nturnbout\nturnbuckle\nturncap\nturncoat\nturncoatism\nturncock\nturndown\nturndun\nturned\nturnel\nturner\nTurnera\nTurneraceae\nturneraceous\nTurneresque\nTurnerian\nTurnerism\nturnerite\nturnery\nturney\nturngate\nturnhall\nTurnhalle\nTurnices\nTurnicidae\nturnicine\nTurnicomorphae\nturnicomorphic\nturning\nturningness\nturnip\nturniplike\nturnipweed\nturnipwise\nturnipwood\nturnipy\nTurnix\nturnix\nturnkey\nturnoff\nturnout\nturnover\nturnpike\nturnpiker\nturnpin\nturnplate\nturnplow\nturnrow\nturns\nturnscrew\nturnsheet\nturnskin\nturnsole\nturnspit\nturnstile\nturnstone\nturntable\nturntail\nturnup\nturnwrest\nturnwrist\nTuronian\nturp\nturpantineweed\nturpentine\nturpentineweed\nturpentinic\nturpeth\nturpethin\nturpid\nturpidly\nturpitude\nturps\nturquoise\nturquoiseberry\nturquoiselike\nturr\nturret\nturreted\nturrethead\nturretlike\nturrical\nturricle\nturricula\nturriculae\nturricular\nturriculate\nturriferous\nturriform\nturrigerous\nTurrilepas\nturrilite\nTurrilites\nturriliticone\nTurrilitidae\nTurritella\nturritella\nturritellid\nTurritellidae\nturritelloid\nturse\nTursenoi\nTursha\ntursio\nTursiops\nTurtan\nturtle\nturtleback\nturtlebloom\nturtledom\nturtledove\nturtlehead\nturtleize\nturtlelike\nturtler\nturtlet\nturtling\nturtosa\ntururi\nturus\nTurveydrop\nTurveydropdom\nTurveydropian\nturwar\nTusayan\nTuscan\nTuscanism\nTuscanize\nTuscanlike\nTuscany\nTuscarora\ntusche\nTusculan\nTush\ntush\ntushed\nTushepaw\ntusher\ntushery\ntusk\ntuskar\ntusked\nTuskegee\ntusker\ntuskish\ntuskless\ntusklike\ntuskwise\ntusky\ntussah\ntussal\ntusser\ntussicular\nTussilago\ntussis\ntussive\ntussle\ntussock\ntussocked\ntussocker\ntussocky\ntussore\ntussur\ntut\ntutania\ntutball\ntute\ntutee\ntutela\ntutelage\ntutelar\ntutelary\nTutelo\ntutenag\ntuth\ntutin\ntutiorism\ntutiorist\ntutly\ntutman\ntutor\ntutorage\ntutorer\ntutoress\ntutorhood\ntutorial\ntutorially\ntutoriate\ntutorism\ntutorization\ntutorize\ntutorless\ntutorly\ntutorship\ntutory\ntutoyer\ntutress\ntutrice\ntutrix\ntuts\ntutsan\ntutster\ntutti\ntuttiman\ntutty\ntutu\ntutulus\nTututni\ntutwork\ntutworker\ntutworkman\ntuwi\ntux\ntuxedo\ntuyere\nTuyuneiri\ntuza\nTuzla\ntuzzle\ntwa\nTwaddell\ntwaddle\ntwaddledom\ntwaddleize\ntwaddlement\ntwaddlemonger\ntwaddler\ntwaddlesome\ntwaddling\ntwaddlingly\ntwaddly\ntwaddy\ntwae\ntwaesome\ntwafauld\ntwagger\ntwain\ntwaite\ntwal\ntwale\ntwalpenny\ntwalpennyworth\ntwalt\nTwana\ntwang\ntwanger\ntwanginess\ntwangle\ntwangler\ntwangy\ntwank\ntwanker\ntwanking\ntwankingly\ntwankle\ntwanky\ntwant\ntwarly\ntwas\ntwasome\ntwat\ntwatchel\ntwatterlight\ntwattle\ntwattler\ntwattling\ntway\ntwayblade\ntwazzy\ntweag\ntweak\ntweaker\ntweaky\ntwee\ntweed\ntweeded\ntweedle\ntweedledee\ntweedledum\ntweedy\ntweeg\ntweel\ntween\ntweenlight\ntweeny\ntweesh\ntweesht\ntweest\ntweet\ntweeter\ntweeze\ntweezer\ntweezers\ntweil\ntwelfhynde\ntwelfhyndeman\ntwelfth\ntwelfthly\nTwelfthtide\ntwelve\ntwelvefold\ntwelvehynde\ntwelvehyndeman\ntwelvemo\ntwelvemonth\ntwelvepence\ntwelvepenny\ntwelvescore\ntwentieth\ntwentiethly\ntwenty\ntwentyfold\ntwentymo\ntwere\ntwerp\nTwi\ntwibil\ntwibilled\ntwice\ntwicer\ntwicet\ntwichild\ntwick\ntwiddle\ntwiddler\ntwiddling\ntwiddly\ntwifoil\ntwifold\ntwifoldly\ntwig\ntwigful\ntwigged\ntwiggen\ntwigger\ntwiggy\ntwigless\ntwiglet\ntwiglike\ntwigsome\ntwigwithy\ntwilight\ntwilightless\ntwilightlike\ntwilighty\ntwilit\ntwill\ntwilled\ntwiller\ntwilling\ntwilly\ntwilt\ntwin\ntwinable\ntwinberry\ntwinborn\ntwindle\ntwine\ntwineable\ntwinebush\ntwineless\ntwinelike\ntwinemaker\ntwinemaking\ntwiner\ntwinflower\ntwinfold\ntwinge\ntwingle\ntwinhood\ntwiningly\ntwinism\ntwink\ntwinkle\ntwinkledum\ntwinkleproof\ntwinkler\ntwinkles\ntwinkless\ntwinkling\ntwinklingly\ntwinkly\ntwinleaf\ntwinlike\ntwinling\ntwinly\ntwinned\ntwinner\ntwinness\ntwinning\ntwinship\ntwinsomeness\ntwinter\ntwiny\ntwire\ntwirk\ntwirl\ntwirler\ntwirligig\ntwirly\ntwiscar\ntwisel\ntwist\ntwistable\ntwisted\ntwistedly\ntwistened\ntwister\ntwisterer\ntwistical\ntwistification\ntwistily\ntwistiness\ntwisting\ntwistingly\ntwistiways\ntwistiwise\ntwistle\ntwistless\ntwisty\ntwit\ntwitch\ntwitchel\ntwitcheling\ntwitcher\ntwitchet\ntwitchety\ntwitchfire\ntwitchily\ntwitchiness\ntwitchingly\ntwitchy\ntwite\ntwitlark\ntwitten\ntwitter\ntwitteration\ntwitterboned\ntwitterer\ntwittering\ntwitteringly\ntwitterly\ntwittery\ntwittingly\ntwitty\ntwixt\ntwixtbrain\ntwizzened\ntwizzle\ntwo\ntwodecker\ntwofold\ntwofoldly\ntwofoldness\ntwoling\ntwoness\ntwopence\ntwopenny\ntwosome\ntwyblade\ntwyhynde\nTybalt\nTyburn\nTyburnian\nTyche\ntychism\ntychite\nTychonian\nTychonic\ntychoparthenogenesis\ntychopotamic\ntycoon\ntycoonate\ntyddyn\ntydie\ntye\ntyee\ntyg\nTyigh\ntying\ntyke\ntyken\ntykhana\ntyking\ntylarus\ntyleberry\nTylenchus\nTyler\nTylerism\nTylerite\nTylerize\ntylion\ntyloma\ntylopod\nTylopoda\ntylopodous\nTylosaurus\ntylose\ntylosis\ntylosteresis\nTylostoma\nTylostomaceae\ntylostylar\ntylostyle\ntylostylote\ntylostylus\nTylosurus\ntylotate\ntylote\ntylotic\ntylotoxea\ntylotoxeate\ntylotus\ntylus\ntymbalon\ntymp\ntympan\ntympana\ntympanal\ntympanectomy\ntympani\ntympanic\ntympanichord\ntympanichordal\ntympanicity\ntympaniform\ntympaning\ntympanism\ntympanist\ntympanites\ntympanitic\ntympanitis\ntympanocervical\ntympanohyal\ntympanomalleal\ntympanomandibular\ntympanomastoid\ntympanomaxillary\ntympanon\ntympanoperiotic\ntympanosis\ntympanosquamosal\ntympanostapedial\ntympanotemporal\ntympanotomy\nTympanuchus\ntympanum\ntympany\ntynd\nTyndallization\nTyndallize\ntyndallmeter\nTynwald\ntypal\ntyparchical\ntype\ntypecast\nTypees\ntypeholder\ntyper\ntypescript\ntypeset\ntypesetter\ntypesetting\ntypewrite\ntypewriter\ntypewriting\nTypha\nTyphaceae\ntyphaceous\ntyphemia\ntyphia\ntyphic\ntyphinia\ntyphization\ntyphlatonia\ntyphlatony\ntyphlectasis\ntyphlectomy\ntyphlenteritis\ntyphlitic\ntyphlitis\ntyphloalbuminuria\ntyphlocele\ntyphloempyema\ntyphloenteritis\ntyphlohepatitis\ntyphlolexia\ntyphlolithiasis\ntyphlology\ntyphlomegaly\nTyphlomolge\ntyphlon\ntyphlopexia\ntyphlopexy\ntyphlophile\ntyphlopid\nTyphlopidae\nTyphlops\ntyphloptosis\ntyphlosis\ntyphlosolar\ntyphlosole\ntyphlostenosis\ntyphlostomy\ntyphlotomy\ntyphobacillosis\nTyphoean\ntyphoemia\ntyphogenic\ntyphoid\ntyphoidal\ntyphoidin\ntyphoidlike\ntypholysin\ntyphomalaria\ntyphomalarial\ntyphomania\ntyphonia\nTyphonian\nTyphonic\ntyphonic\ntyphoon\ntyphoonish\ntyphopneumonia\ntyphose\ntyphosepsis\ntyphosis\ntyphotoxine\ntyphous\nTyphula\ntyphus\ntypic\ntypica\ntypical\ntypicality\ntypically\ntypicalness\ntypicon\ntypicum\ntypification\ntypifier\ntypify\ntypist\ntypo\ntypobar\ntypocosmy\ntypographer\ntypographia\ntypographic\ntypographical\ntypographically\ntypographist\ntypography\ntypolithographic\ntypolithography\ntypologic\ntypological\ntypologically\ntypologist\ntypology\ntypomania\ntypometry\ntyponym\ntyponymal\ntyponymic\ntyponymous\ntypophile\ntyporama\ntyposcript\ntypotelegraph\ntypotelegraphy\ntypothere\nTypotheria\nTypotheriidae\ntypothetae\ntypp\ntyptological\ntyptologist\ntyptology\ntypy\ntyramine\ntyranness\nTyranni\ntyrannial\ntyrannic\ntyrannical\ntyrannically\ntyrannicalness\ntyrannicidal\ntyrannicide\ntyrannicly\nTyrannidae\nTyrannides\nTyranninae\ntyrannine\ntyrannism\ntyrannize\ntyrannizer\ntyrannizing\ntyrannizingly\ntyrannoid\ntyrannophobia\ntyrannosaur\nTyrannosaurus\ntyrannous\ntyrannously\ntyrannousness\nTyrannus\ntyranny\ntyrant\ntyrantcraft\ntyrantlike\ntyrantship\ntyre\ntyremesis\nTyrian\ntyriasis\ntyro\ntyrocidin\ntyrocidine\ntyroglyphid\nTyroglyphidae\nTyroglyphus\nTyrolean\nTyrolese\nTyrolienne\ntyrolite\ntyrology\ntyroma\ntyromancy\ntyromatous\ntyrone\ntyronic\ntyronism\ntyrosinase\ntyrosine\ntyrosinuria\ntyrosyl\ntyrotoxicon\ntyrotoxine\nTyrr\nTyrrhene\nTyrrheni\nTyrrhenian\nTyrsenoi\nTyrtaean\ntysonite\ntyste\ntyt\nTyto\nTytonidae\nTzaam\nTzapotec\ntzaritza\nTzendal\nTzental\ntzolkin\ntzontle\nTzotzil\nTzutuhil\nU\nu\nuang\nUaraycu\nUarekena\nUaupe\nuayeb\nUbbenite\nUbbonite\nuberant\nuberous\nuberously\nuberousness\nuberty\nubi\nubication\nubiety\nUbii\nUbiquarian\nubiquarian\nubiquious\nUbiquist\nubiquit\nUbiquitarian\nubiquitarian\nUbiquitarianism\nubiquitariness\nubiquitary\nUbiquitism\nUbiquitist\nubiquitous\nubiquitously\nubiquitousness\nubiquity\nubussu\nUca\nUcal\nUcayale\nUchean\nUchee\nuckia\nUd\nudal\nudaler\nudaller\nudalman\nudasi\nudder\nuddered\nudderful\nudderless\nudderlike\nudell\nUdi\nUdic\nUdish\nudo\nUdolphoish\nudometer\nudometric\nudometry\nudomograph\nUds\nUeueteotl\nug\nUgandan\nUgarono\nugh\nuglification\nuglifier\nuglify\nuglily\nugliness\nuglisome\nugly\nUgrian\nUgric\nUgroid\nugsome\nugsomely\nugsomeness\nuhlan\nuhllo\nuhtensang\nuhtsong\nUigur\nUigurian\nUiguric\nuily\nuinal\nUinta\nuintaite\nuintathere\nUintatheriidae\nUintatherium\nuintjie\nUirina\nUitotan\nuitspan\nuji\nukase\nuke\nukiyoye\nUkrainer\nUkrainian\nukulele\nula\nulatrophia\nulcer\nulcerable\nulcerate\nulceration\nulcerative\nulcered\nulceromembranous\nulcerous\nulcerously\nulcerousness\nulcery\nulcuscle\nulcuscule\nule\nulema\nulemorrhagia\nulerythema\nuletic\nUlex\nulex\nulexine\nulexite\nUlidia\nUlidian\nuliginose\nuliginous\nulitis\null\nulla\nullage\nullaged\nullagone\nuller\nulling\nullmannite\nulluco\nUlmaceae\nulmaceous\nUlmaria\nulmic\nulmin\nulminic\nulmo\nulmous\nUlmus\nulna\nulnad\nulnae\nulnar\nulnare\nulnaria\nulnocarpal\nulnocondylar\nulnometacarpal\nulnoradial\nuloborid\nUloboridae\nUloborus\nulocarcinoma\nuloid\nUlonata\nuloncus\nUlophocinae\nulorrhagia\nulorrhagy\nulorrhea\nUlothrix\nUlotrichaceae\nulotrichaceous\nUlotrichales\nulotrichan\nUlotriches\nUlotrichi\nulotrichous\nulotrichy\nulrichite\nulster\nulstered\nulsterette\nUlsterian\nulstering\nUlsterite\nUlsterman\nulterior\nulteriorly\nultima\nultimacy\nultimata\nultimate\nultimately\nultimateness\nultimation\nultimatum\nultimity\nultimo\nultimobranchial\nultimogenitary\nultimogeniture\nultimum\nUltonian\nultra\nultrabasic\nultrabasite\nultrabelieving\nultrabenevolent\nultrabrachycephalic\nultrabrachycephaly\nultrabrilliant\nultracentenarian\nultracentenarianism\nultracentralizer\nultracentrifuge\nultraceremonious\nultrachurchism\nultracivil\nultracomplex\nultraconcomitant\nultracondenser\nultraconfident\nultraconscientious\nultraconservatism\nultraconservative\nultracordial\nultracosmopolitan\nultracredulous\nultracrepidarian\nultracrepidarianism\nultracrepidate\nultracritical\nultradandyism\nultradeclamatory\nultrademocratic\nultradespotic\nultradignified\nultradiscipline\nultradolichocephalic\nultradolichocephaly\nultradolichocranial\nultraeducationist\nultraeligible\nultraelliptic\nultraemphasis\nultraenergetic\nultraenforcement\nultraenthusiasm\nultraenthusiastic\nultraepiscopal\nultraevangelical\nultraexcessive\nultraexclusive\nultraexpeditious\nultrafantastic\nultrafashionable\nultrafastidious\nultrafederalist\nultrafeudal\nultrafidian\nultrafidianism\nultrafilter\nultrafilterability\nultrafilterable\nultrafiltrate\nultrafiltration\nultraformal\nultrafrivolous\nultragallant\nultragaseous\nultragenteel\nultragood\nultragrave\nultraheroic\nultrahonorable\nultrahuman\nultraimperialism\nultraimperialist\nultraimpersonal\nultrainclusive\nultraindifferent\nultraindulgent\nultraingenious\nultrainsistent\nultraintimate\nultrainvolved\nultraism\nultraist\nultraistic\nultralaborious\nultralegality\nultralenient\nultraliberal\nultraliberalism\nultralogical\nultraloyal\nultraluxurious\nultramarine\nultramaternal\nultramaximal\nultramelancholy\nultramicrochemical\nultramicrochemist\nultramicrochemistry\nultramicrometer\nultramicron\nultramicroscope\nultramicroscopic\nultramicroscopical\nultramicroscopy\nultraminute\nultramoderate\nultramodern\nultramodernism\nultramodernist\nultramodernistic\nultramodest\nultramontane\nultramontanism\nultramontanist\nultramorose\nultramulish\nultramundane\nultranational\nultranationalism\nultranationalist\nultranatural\nultranegligent\nultranice\nultranonsensical\nultraobscure\nultraobstinate\nultraofficious\nultraoptimistic\nultraornate\nultraorthodox\nultraorthodoxy\nultraoutrageous\nultrapapist\nultraparallel\nultraperfect\nultrapersuasive\nultraphotomicrograph\nultrapious\nultraplanetary\nultraplausible\nultrapopish\nultraproud\nultraprudent\nultraradical\nultraradicalism\nultrarapid\nultrareactionary\nultrared\nultrarefined\nultrarefinement\nultrareligious\nultraremuneration\nultrarepublican\nultrarevolutionary\nultrarevolutionist\nultraritualism\nultraromantic\nultraroyalism\nultraroyalist\nultrasanguine\nultrascholastic\nultraselect\nultraservile\nultrasevere\nultrashrewd\nultrasimian\nultrasolemn\nultrasonic\nultrasonics\nultraspartan\nultraspecialization\nultraspiritualism\nultrasplendid\nultrastandardization\nultrastellar\nultrasterile\nultrastrenuous\nultrastrict\nultrasubtle\nultrasystematic\nultratechnical\nultratense\nultraterrene\nultraterrestrial\nultratotal\nultratrivial\nultratropical\nultraugly\nultrauncommon\nultraurgent\nultravicious\nultraviolent\nultraviolet\nultravirtuous\nultravirus\nultravisible\nultrawealthy\nultrawise\nultrayoung\nultrazealous\nultrazodiacal\nultroneous\nultroneously\nultroneousness\nulu\nUlua\nulua\nuluhi\nululant\nululate\nululation\nululative\nululatory\nululu\nUlva\nUlvaceae\nulvaceous\nUlvales\nUlvan\nUlyssean\nUlysses\num\numangite\nUmatilla\nUmaua\numbeclad\numbel\numbeled\numbella\nUmbellales\numbellar\numbellate\numbellated\numbellately\numbellet\numbellic\numbellifer\nUmbelliferae\numbelliferone\numbelliferous\numbelliflorous\numbelliform\numbelloid\nUmbellula\nUmbellularia\numbellulate\numbellule\nUmbellulidae\numbelluliferous\numbelwort\number\numbethink\numbilectomy\numbilic\numbilical\numbilically\numbilicar\nUmbilicaria\numbilicate\numbilicated\numbilication\numbilici\numbiliciform\numbilicus\numbiliform\numbilroot\numble\numbo\numbolateral\numbonal\numbonate\numbonated\numbonation\numbone\numbones\numbonial\numbonic\numbonulate\numbonule\nUmbra\numbra\numbracious\numbraciousness\numbraculate\numbraculiferous\numbraculiform\numbraculum\numbrae\numbrage\numbrageous\numbrageously\numbrageousness\numbral\numbrally\numbratile\numbrel\numbrella\numbrellaed\numbrellaless\numbrellalike\numbrellawise\numbrellawort\numbrette\nUmbrian\nUmbriel\numbriferous\numbriferously\numbriferousness\numbril\numbrine\numbrose\numbrosity\numbrous\nUmbundu\nume\numiak\numiri\numlaut\nump\numph\numpirage\numpire\numpirer\numpireship\numpiress\numpirism\nUmpqua\numpteen\numpteenth\numptekite\numptieth\numpty\numquhile\numu\nun\nUna\nunabandoned\nunabased\nunabasedly\nunabashable\nunabashed\nunabashedly\nunabatable\nunabated\nunabatedly\nunabating\nunabatingly\nunabbreviated\nunabetted\nunabettedness\nunabhorred\nunabiding\nunabidingly\nunabidingness\nunability\nunabject\nunabjured\nunable\nunableness\nunably\nunabolishable\nunabolished\nunabraded\nunabrased\nunabridgable\nunabridged\nunabrogated\nunabrupt\nunabsent\nunabsolute\nunabsolvable\nunabsolved\nunabsolvedness\nunabsorb\nunabsorbable\nunabsorbed\nunabsorbent\nunabstract\nunabsurd\nunabundance\nunabundant\nunabundantly\nunabused\nunacademic\nunacademical\nunaccelerated\nunaccent\nunaccented\nunaccentuated\nunaccept\nunacceptability\nunacceptable\nunacceptableness\nunacceptably\nunacceptance\nunacceptant\nunaccepted\nunaccessibility\nunaccessible\nunaccessibleness\nunaccessibly\nunaccessional\nunaccessory\nunaccidental\nunaccidentally\nunaccidented\nunacclimated\nunacclimation\nunacclimatization\nunacclimatized\nunaccommodable\nunaccommodated\nunaccommodatedness\nunaccommodating\nunaccommodatingly\nunaccommodatingness\nunaccompanable\nunaccompanied\nunaccompanying\nunaccomplishable\nunaccomplished\nunaccomplishedness\nunaccord\nunaccordable\nunaccordance\nunaccordant\nunaccorded\nunaccording\nunaccordingly\nunaccostable\nunaccosted\nunaccountability\nunaccountable\nunaccountableness\nunaccountably\nunaccounted\nunaccoutered\nunaccoutred\nunaccreditated\nunaccredited\nunaccrued\nunaccumulable\nunaccumulate\nunaccumulated\nunaccumulation\nunaccuracy\nunaccurate\nunaccurately\nunaccurateness\nunaccursed\nunaccusable\nunaccusably\nunaccuse\nunaccusing\nunaccustom\nunaccustomed\nunaccustomedly\nunaccustomedness\nunachievable\nunachieved\nunaching\nunacidulated\nunacknowledged\nunacknowledgedness\nunacknowledging\nunacknowledgment\nunacoustic\nunacquaint\nunacquaintable\nunacquaintance\nunacquainted\nunacquaintedly\nunacquaintedness\nunacquiescent\nunacquirable\nunacquirableness\nunacquirably\nunacquired\nunacquit\nunacquittable\nunacquitted\nunacquittedness\nunact\nunactability\nunactable\nunacted\nunacting\nunactinic\nunaction\nunactivated\nunactive\nunactively\nunactiveness\nunactivity\nunactorlike\nunactual\nunactuality\nunactually\nunactuated\nunacute\nunacutely\nunadapt\nunadaptability\nunadaptable\nunadaptableness\nunadaptably\nunadapted\nunadaptedly\nunadaptedness\nunadaptive\nunadd\nunaddable\nunadded\nunaddicted\nunaddictedness\nunadditional\nunaddress\nunaddressed\nunadequate\nunadequately\nunadequateness\nunadherence\nunadherent\nunadherently\nunadhesive\nunadjacent\nunadjacently\nunadjectived\nunadjourned\nunadjournment\nunadjudged\nunadjust\nunadjustably\nunadjusted\nunadjustment\nunadministered\nunadmirable\nunadmire\nunadmired\nunadmiring\nunadmissible\nunadmissibly\nunadmission\nunadmittable\nunadmittableness\nunadmittably\nunadmitted\nunadmittedly\nunadmitting\nunadmonished\nunadopt\nunadoptable\nunadoptably\nunadopted\nunadoption\nunadorable\nunadoration\nunadored\nunadoring\nunadorn\nunadornable\nunadorned\nunadornedly\nunadornedness\nunadornment\nunadult\nunadulterate\nunadulterated\nunadulteratedly\nunadulteratedness\nunadulterately\nunadulterous\nunadulterously\nunadvanced\nunadvancedly\nunadvancedness\nunadvancement\nunadvancing\nunadvantaged\nunadvantageous\nunadventured\nunadventuring\nunadventurous\nunadventurously\nunadverse\nunadversely\nunadverseness\nunadvertency\nunadvertised\nunadvertisement\nunadvertising\nunadvisability\nunadvisable\nunadvisableness\nunadvisably\nunadvised\nunadvisedly\nunadvisedness\nunadvocated\nunaerated\nunaesthetic\nunaesthetical\nunafeard\nunafeared\nunaffable\nunaffably\nunaffected\nunaffectedly\nunaffectedness\nunaffecting\nunaffectionate\nunaffectionately\nunaffectioned\nunaffianced\nunaffied\nunaffiliated\nunaffiliation\nunaffirmation\nunaffirmed\nunaffixed\nunafflicted\nunafflictedly\nunafflicting\nunaffliction\nunaffordable\nunafforded\nunaffranchised\nunaffrighted\nunaffrightedly\nunaffronted\nunafire\nunafloat\nunaflow\nunafraid\nunaged\nunaggravated\nunaggravating\nunaggregated\nunaggression\nunaggressive\nunaggressively\nunaggressiveness\nunaghast\nunagile\nunagility\nunaging\nunagitated\nunagitatedly\nunagitatedness\nunagitation\nunagonize\nunagrarian\nunagreeable\nunagreeableness\nunagreeably\nunagreed\nunagreeing\nunagreement\nunagricultural\nunaidable\nunaided\nunaidedly\nunaiding\nunailing\nunaimed\nunaiming\nunaired\nunaisled\nUnakhotana\nunakin\nunakite\nunal\nUnalachtigo\nunalarm\nunalarmed\nunalarming\nUnalaska\nunalcoholized\nunaldermanly\nunalert\nunalertly\nunalertness\nunalgebraical\nunalienable\nunalienableness\nunalienably\nunalienated\nunalignable\nunaligned\nunalike\nunalimentary\nunalist\nunalive\nunallayable\nunallayably\nunallayed\nunalleged\nunallegorical\nunalleviably\nunalleviated\nunalleviation\nunalliable\nunallied\nunalliedly\nunalliedness\nunallotment\nunallotted\nunallow\nunallowable\nunallowed\nunallowedly\nunallowing\nunalloyed\nunallurable\nunallured\nunalluring\nunalluringly\nunalmsed\nunalone\nunaloud\nunalphabeted\nunalphabetic\nunalphabetical\nunalterability\nunalterable\nunalterableness\nunalterably\nunalteration\nunaltered\nunaltering\nunalternated\nunamalgamable\nunamalgamated\nunamalgamating\nunamassed\nunamazed\nunamazedly\nunambiguity\nunambiguous\nunambiguously\nunambiguousness\nunambition\nunambitious\nunambitiously\nunambitiousness\nunambrosial\nunambush\nunamenability\nunamenable\nunamenableness\nunamenably\nunamend\nunamendable\nunamended\nunamendedly\nunamending\nunamendment\nunamerced\nUnami\nunamiability\nunamiable\nunamiableness\nunamiably\nunamicable\nunamicably\nunamiss\nunamo\nunamortization\nunamortized\nunample\nunamplifiable\nunamplified\nunamply\nunamputated\nunamusable\nunamusably\nunamused\nunamusement\nunamusing\nunamusingly\nunamusive\nunanalogical\nunanalogous\nunanalogously\nunanalogousness\nunanalytic\nunanalytical\nunanalyzable\nunanalyzed\nunanalyzing\nunanatomizable\nunanatomized\nunancestored\nunancestried\nunanchor\nunanchored\nunanchylosed\nunancient\nunaneled\nunangelic\nunangelical\nunangrily\nunangry\nunangular\nunanimalized\nunanimate\nunanimated\nunanimatedly\nunanimatedness\nunanimately\nunanimism\nunanimist\nunanimistic\nunanimistically\nunanimity\nunanimous\nunanimously\nunanimousness\nunannealed\nunannex\nunannexed\nunannexedly\nunannexedness\nunannihilable\nunannihilated\nunannotated\nunannounced\nunannoyed\nunannoying\nunannullable\nunannulled\nunanointed\nunanswerability\nunanswerable\nunanswerableness\nunanswerably\nunanswered\nunanswering\nunantagonistic\nunantagonizable\nunantagonized\nunantagonizing\nunanticipated\nunanticipating\nunanticipatingly\nunanticipation\nunanticipative\nunantiquated\nunantiquatedness\nunantique\nunantiquity\nunanxiety\nunanxious\nunanxiously\nunanxiousness\nunapart\nunapocryphal\nunapologetic\nunapologizing\nunapostatized\nunapostolic\nunapostolical\nunapostolically\nunapostrophized\nunappalled\nunappareled\nunapparent\nunapparently\nunapparentness\nunappealable\nunappealableness\nunappealably\nunappealed\nunappealing\nunappeasable\nunappeasableness\nunappeasably\nunappeased\nunappeasedly\nunappeasedness\nunappendaged\nunapperceived\nunappertaining\nunappetizing\nunapplauded\nunapplauding\nunapplausive\nunappliable\nunappliableness\nunappliably\nunapplianced\nunapplicable\nunapplicableness\nunapplicably\nunapplied\nunapplying\nunappoint\nunappointable\nunappointableness\nunappointed\nunapportioned\nunapposite\nunappositely\nunappraised\nunappreciable\nunappreciableness\nunappreciably\nunappreciated\nunappreciating\nunappreciation\nunappreciative\nunappreciatively\nunappreciativeness\nunapprehendable\nunapprehendableness\nunapprehendably\nunapprehended\nunapprehending\nunapprehensible\nunapprehensibleness\nunapprehension\nunapprehensive\nunapprehensively\nunapprehensiveness\nunapprenticed\nunapprised\nunapprisedly\nunapprisedness\nunapproachability\nunapproachable\nunapproachableness\nunapproached\nunapproaching\nunapprobation\nunappropriable\nunappropriate\nunappropriated\nunappropriately\nunappropriateness\nunappropriation\nunapprovable\nunapprovableness\nunapprovably\nunapproved\nunapproving\nunapprovingly\nunapproximate\nunapproximately\nunaproned\nunapropos\nunapt\nunaptitude\nunaptly\nunaptness\nunarbitrarily\nunarbitrariness\nunarbitrary\nunarbitrated\nunarch\nunarchdeacon\nunarched\nunarchitectural\nunarduous\nunarguable\nunarguableness\nunarguably\nunargued\nunarguing\nunargumentative\nunargumentatively\nunarisen\nunarising\nunaristocratic\nunaristocratically\nunarithmetical\nunarithmetically\nunark\nunarm\nunarmed\nunarmedly\nunarmedness\nunarmored\nunarmorial\nunaromatized\nunarousable\nunaroused\nunarousing\nunarraignable\nunarraigned\nunarranged\nunarray\nunarrayed\nunarrestable\nunarrested\nunarresting\nunarrival\nunarrived\nunarriving\nunarrogance\nunarrogant\nunarrogating\nunarted\nunartful\nunartfully\nunartfulness\nunarticled\nunarticulate\nunarticulated\nunartificial\nunartificiality\nunartificially\nunartistic\nunartistical\nunartistically\nunartistlike\nunary\nunascendable\nunascendableness\nunascended\nunascertainable\nunascertainableness\nunascertainably\nunascertained\nunashamed\nunashamedly\nunashamedness\nunasinous\nunaskable\nunasked\nunasking\nunasleep\nunaspersed\nunasphalted\nunaspirated\nunaspiring\nunaspiringly\nunaspiringness\nunassailable\nunassailableness\nunassailably\nunassailed\nunassailing\nunassassinated\nunassaultable\nunassaulted\nunassayed\nunassaying\nunassembled\nunassented\nunassenting\nunasserted\nunassertive\nunassertiveness\nunassessable\nunassessableness\nunassessed\nunassibilated\nunassiduous\nunassignable\nunassignably\nunassigned\nunassimilable\nunassimilated\nunassimilating\nunassimilative\nunassisted\nunassisting\nunassociable\nunassociably\nunassociated\nunassociative\nunassociativeness\nunassoiled\nunassorted\nunassuageable\nunassuaged\nunassuaging\nunassuetude\nunassumable\nunassumed\nunassuming\nunassumingly\nunassumingness\nunassured\nunassuredly\nunassuredness\nunassuring\nunasterisk\nunastonish\nunastonished\nunastonishment\nunastray\nunathirst\nunathletically\nunatmospheric\nunatonable\nunatoned\nunatoning\nunattach\nunattachable\nunattached\nunattackable\nunattackableness\nunattackably\nunattacked\nunattainability\nunattainable\nunattainableness\nunattainably\nunattained\nunattaining\nunattainment\nunattaint\nunattainted\nunattaintedly\nunattempered\nunattemptable\nunattempted\nunattempting\nunattendance\nunattendant\nunattended\nunattentive\nunattenuated\nunattested\nunattestedness\nunattire\nunattired\nunattractable\nunattractableness\nunattracted\nunattracting\nunattractive\nunattractively\nunattractiveness\nunattributable\nunattributed\nunattuned\nunau\nunauctioned\nunaudible\nunaudibleness\nunaudibly\nunaudienced\nunaudited\nunaugmentable\nunaugmented\nunauspicious\nunauspiciously\nunauspiciousness\nunaustere\nunauthentic\nunauthentical\nunauthentically\nunauthenticated\nunauthenticity\nunauthorish\nunauthoritative\nunauthoritatively\nunauthoritativeness\nunauthoritied\nunauthoritiveness\nunauthorizable\nunauthorize\nunauthorized\nunauthorizedly\nunauthorizedness\nunautomatic\nunautumnal\nunavailability\nunavailable\nunavailableness\nunavailably\nunavailed\nunavailful\nunavailing\nunavailingly\nunavengeable\nunavenged\nunavenging\nunavenued\nunaveraged\nunaverred\nunaverted\nunavertible\nunavertibleness\nunavertibly\nunavian\nunavoidable\nunavoidableness\nunavoidably\nunavoidal\nunavoided\nunavoiding\nunavouchable\nunavouchableness\nunavouchably\nunavouched\nunavowable\nunavowableness\nunavowably\nunavowed\nunavowedly\nunawakable\nunawakableness\nunawake\nunawaked\nunawakened\nunawakenedness\nunawakening\nunawaking\nunawardable\nunawardableness\nunawardably\nunawarded\nunaware\nunawared\nunawaredly\nunawareness\nunawares\nunaway\nunawed\nunawful\nunawfully\nunawkward\nunawned\nunaxled\nunazotized\nunbackboarded\nunbacked\nunbackward\nunbadged\nunbaffled\nunbaffling\nunbag\nunbagged\nunbailable\nunbailableness\nunbailed\nunbain\nunbait\nunbaited\nunbaized\nunbaked\nunbalance\nunbalanceable\nunbalanceably\nunbalanced\nunbalancement\nunbalancing\nunbalconied\nunbale\nunbalked\nunballast\nunballasted\nunballoted\nunbandage\nunbandaged\nunbanded\nunbanished\nunbank\nunbankable\nunbankableness\nunbankably\nunbanked\nunbankrupt\nunbannered\nunbaptize\nunbaptized\nunbar\nunbarb\nunbarbarize\nunbarbarous\nunbarbed\nunbarbered\nunbare\nunbargained\nunbark\nunbarking\nunbaronet\nunbarrable\nunbarred\nunbarrel\nunbarreled\nunbarren\nunbarrenness\nunbarricade\nunbarricaded\nunbarricadoed\nunbase\nunbased\nunbasedness\nunbashful\nunbashfully\nunbashfulness\nunbasket\nunbastardized\nunbaste\nunbasted\nunbastilled\nunbastinadoed\nunbated\nunbathed\nunbating\nunbatted\nunbatten\nunbatterable\nunbattered\nunbattling\nunbay\nunbe\nunbeached\nunbeaconed\nunbeaded\nunbear\nunbearable\nunbearableness\nunbearably\nunbeard\nunbearded\nunbearing\nunbeast\nunbeatable\nunbeatableness\nunbeatably\nunbeaten\nunbeaued\nunbeauteous\nunbeauteously\nunbeauteousness\nunbeautified\nunbeautiful\nunbeautifully\nunbeautifulness\nunbeautify\nunbeavered\nunbeclogged\nunbeclouded\nunbecome\nunbecoming\nunbecomingly\nunbecomingness\nunbed\nunbedabbled\nunbedaggled\nunbedashed\nunbedaubed\nunbedded\nunbedecked\nunbedewed\nunbedimmed\nunbedinned\nunbedizened\nunbedraggled\nunbefit\nunbefitting\nunbefittingly\nunbefittingness\nunbefool\nunbefriend\nunbefriended\nunbefringed\nunbeget\nunbeggar\nunbegged\nunbegilt\nunbeginning\nunbeginningly\nunbeginningness\nunbegirded\nunbegirt\nunbegot\nunbegotten\nunbegottenly\nunbegottenness\nunbegreased\nunbegrimed\nunbegrudged\nunbeguile\nunbeguiled\nunbeguileful\nunbegun\nunbehaving\nunbeheaded\nunbeheld\nunbeholdable\nunbeholden\nunbeholdenness\nunbeholding\nunbehoveful\nunbehoving\nunbeing\nunbejuggled\nunbeknown\nunbeknownst\nunbelied\nunbelief\nunbeliefful\nunbelieffulness\nunbelievability\nunbelievable\nunbelievableness\nunbelievably\nunbelieve\nunbelieved\nunbeliever\nunbelieving\nunbelievingly\nunbelievingness\nunbell\nunbellicose\nunbelligerent\nunbelonging\nunbeloved\nunbelt\nunbemoaned\nunbemourned\nunbench\nunbend\nunbendable\nunbendableness\nunbendably\nunbended\nunbending\nunbendingly\nunbendingness\nunbendsome\nunbeneficed\nunbeneficent\nunbeneficial\nunbenefitable\nunbenefited\nunbenefiting\nunbenetted\nunbenevolence\nunbenevolent\nunbenevolently\nunbenight\nunbenighted\nunbenign\nunbenignant\nunbenignantly\nunbenignity\nunbenignly\nunbent\nunbenumb\nunbenumbed\nunbequeathable\nunbequeathed\nunbereaved\nunbereft\nunberouged\nunberth\nunberufen\nunbeseem\nunbeseeming\nunbeseemingly\nunbeseemingness\nunbeseemly\nunbeset\nunbesieged\nunbesmeared\nunbesmirched\nunbesmutted\nunbesot\nunbesought\nunbespeak\nunbespoke\nunbespoken\nunbesprinkled\nunbestarred\nunbestowed\nunbet\nunbeteared\nunbethink\nunbethought\nunbetide\nunbetoken\nunbetray\nunbetrayed\nunbetraying\nunbetrothed\nunbetterable\nunbettered\nunbeveled\nunbewailed\nunbewailing\nunbewilder\nunbewildered\nunbewilled\nunbewitch\nunbewitched\nunbewitching\nunbewrayed\nunbewritten\nunbias\nunbiasable\nunbiased\nunbiasedly\nunbiasedness\nunbibulous\nunbickered\nunbickering\nunbid\nunbidable\nunbiddable\nunbidden\nunbigged\nunbigoted\nunbilled\nunbillet\nunbilleted\nunbind\nunbindable\nunbinding\nunbiographical\nunbiological\nunbirdlike\nunbirdlimed\nunbirdly\nunbirthday\nunbishop\nunbishoply\nunbit\nunbiting\nunbitt\nunbitted\nunbitten\nunbitter\nunblacked\nunblackened\nunblade\nunblamable\nunblamableness\nunblamably\nunblamed\nunblaming\nunblanched\nunblanketed\nunblasphemed\nunblasted\nunblazoned\nunbleached\nunbleaching\nunbled\nunbleeding\nunblemishable\nunblemished\nunblemishedness\nunblemishing\nunblenched\nunblenching\nunblenchingly\nunblendable\nunblended\nunblent\nunbless\nunblessed\nunblessedness\nunblest\nunblighted\nunblightedly\nunblightedness\nunblind\nunblindfold\nunblinking\nunblinkingly\nunbliss\nunblissful\nunblistered\nunblithe\nunblithely\nunblock\nunblockaded\nunblocked\nunblooded\nunbloodied\nunbloodily\nunbloodiness\nunbloody\nunbloom\nunbloomed\nunblooming\nunblossomed\nunblossoming\nunblotted\nunbloused\nunblown\nunblued\nunbluestockingish\nunbluffed\nunbluffing\nunblunder\nunblundered\nunblundering\nunblunted\nunblurred\nunblush\nunblushing\nunblushingly\nunblushingness\nunboarded\nunboasted\nunboastful\nunboastfully\nunboasting\nunboat\nunbodied\nunbodiliness\nunbodily\nunboding\nunbodkined\nunbody\nunbodylike\nunbog\nunboggy\nunbohemianize\nunboiled\nunboisterous\nunbokel\nunbold\nunbolden\nunboldly\nunboldness\nunbolled\nunbolster\nunbolstered\nunbolt\nunbolted\nunbombast\nunbondable\nunbondableness\nunbonded\nunbone\nunboned\nunbonnet\nunbonneted\nunbonny\nunbooked\nunbookish\nunbooklearned\nunboot\nunbooted\nunboraxed\nunborder\nunbordered\nunbored\nunboring\nunborn\nunborne\nunborough\nunborrowed\nunborrowing\nunbosom\nunbosomer\nunbossed\nunbotanical\nunbothered\nunbothering\nunbottle\nunbottom\nunbottomed\nunbought\nunbound\nunboundable\nunboundableness\nunboundably\nunbounded\nunboundedly\nunboundedness\nunboundless\nunbounteous\nunbountiful\nunbountifully\nunbountifulness\nunbow\nunbowable\nunbowdlerized\nunbowed\nunbowel\nunboweled\nunbowered\nunbowing\nunbowingness\nunbowled\nunbowsome\nunbox\nunboxed\nunboy\nunboyish\nunboylike\nunbrace\nunbraced\nunbracedness\nunbracelet\nunbraceleted\nunbracing\nunbragged\nunbragging\nunbraid\nunbraided\nunbrailed\nunbrained\nunbran\nunbranched\nunbranching\nunbrand\nunbranded\nunbrandied\nunbrave\nunbraved\nunbravely\nunbraze\nunbreachable\nunbreached\nunbreaded\nunbreakable\nunbreakableness\nunbreakably\nunbreakfasted\nunbreaking\nunbreast\nunbreath\nunbreathable\nunbreathableness\nunbreathed\nunbreathing\nunbred\nunbreech\nunbreeched\nunbreezy\nunbrent\nunbrewed\nunbribable\nunbribableness\nunbribably\nunbribed\nunbribing\nunbrick\nunbridegroomlike\nunbridgeable\nunbridged\nunbridle\nunbridled\nunbridledly\nunbridledness\nunbridling\nunbrief\nunbriefed\nunbriefly\nunbright\nunbrightened\nunbrilliant\nunbrimming\nunbrined\nunbrittle\nunbroached\nunbroad\nunbroadcasted\nunbroidered\nunbroiled\nunbroke\nunbroken\nunbrokenly\nunbrokenness\nunbronzed\nunbrooch\nunbrooded\nunbrookable\nunbrookably\nunbrothered\nunbrotherlike\nunbrotherliness\nunbrotherly\nunbrought\nunbrown\nunbrowned\nunbruised\nunbrushed\nunbrutalize\nunbrutalized\nunbrute\nunbrutelike\nunbrutify\nunbrutize\nunbuckle\nunbuckramed\nunbud\nunbudded\nunbudgeability\nunbudgeable\nunbudgeableness\nunbudgeably\nunbudged\nunbudgeted\nunbudging\nunbuffed\nunbuffered\nunbuffeted\nunbuild\nunbuilded\nunbuilt\nunbulky\nunbulled\nunbulletined\nunbumped\nunbumptious\nunbunched\nunbundle\nunbundled\nunbung\nunbungling\nunbuoyant\nunbuoyed\nunburden\nunburdened\nunburdenment\nunburdensome\nunburdensomeness\nunburgessed\nunburiable\nunburial\nunburied\nunburlesqued\nunburly\nunburn\nunburnable\nunburned\nunburning\nunburnished\nunburnt\nunburrow\nunburrowed\nunburst\nunburstable\nunburstableness\nunburthen\nunbury\nunbush\nunbusied\nunbusily\nunbusiness\nunbusinesslike\nunbusk\nunbuskin\nunbuskined\nunbustling\nunbusy\nunbutchered\nunbutcherlike\nunbuttered\nunbutton\nunbuttoned\nunbuttonment\nunbuttressed\nunbuxom\nunbuxomly\nunbuxomness\nunbuyable\nunbuyableness\nunbuying\nunca\nuncabined\nuncabled\nuncadenced\nuncage\nuncaged\nuncake\nuncalcareous\nuncalcified\nuncalcined\nuncalculable\nuncalculableness\nuncalculably\nuncalculated\nuncalculating\nuncalculatingly\nuncalendered\nuncalk\nuncalked\nuncall\nuncalled\nuncallow\nuncallower\nuncalm\nuncalmed\nuncalmly\nuncalumniated\nuncambered\nuncamerated\nuncamouflaged\nuncanceled\nuncancellable\nuncancelled\nuncandid\nuncandidly\nuncandidness\nuncandied\nuncandor\nuncaned\nuncankered\nuncanned\nuncannily\nuncanniness\nuncanny\nuncanonic\nuncanonical\nuncanonically\nuncanonicalness\nuncanonize\nuncanonized\nuncanopied\nuncantoned\nuncantonized\nuncanvassably\nuncanvassed\nuncap\nuncapable\nuncapableness\nuncapably\nuncapacious\nuncapacitate\nuncaparisoned\nuncapitalized\nuncapped\nuncapper\nuncapsizable\nuncapsized\nuncaptained\nuncaptioned\nuncaptious\nuncaptiously\nuncaptivate\nuncaptivated\nuncaptivating\nuncaptived\nuncapturable\nuncaptured\nuncarbonated\nuncarboned\nuncarbureted\nuncarded\nuncardinal\nuncardinally\nuncareful\nuncarefully\nuncarefulness\nuncaressed\nuncargoed\nUncaria\nuncaricatured\nuncaring\nuncarnate\nuncarnivorous\nuncaroled\nuncarpentered\nuncarpeted\nuncarriageable\nuncarried\nuncart\nuncarted\nuncartooned\nuncarved\nuncase\nuncased\nuncasemated\nuncask\nuncasked\nuncasketed\nuncasque\nuncassock\nuncast\nuncaste\nuncastigated\nuncastle\nuncastled\nuncastrated\nuncasual\nuncatalogued\nuncatchable\nuncate\nuncatechised\nuncatechisedness\nuncatechized\nuncatechizedness\nuncategorized\nuncathedraled\nuncatholcity\nuncatholic\nuncatholical\nuncatholicalness\nuncatholicize\nuncatholicly\nuncaucusable\nuncaught\nuncausatively\nuncaused\nuncauterized\nuncautious\nuncautiously\nuncautiousness\nuncavalier\nuncavalierly\nuncave\nunceasable\nunceased\nunceasing\nunceasingly\nunceasingness\nunceded\nunceiled\nunceilinged\nuncelebrated\nuncelebrating\nuncelestial\nuncelestialized\nuncellar\nuncement\nuncemented\nuncementing\nuncensorable\nuncensored\nuncensorious\nuncensoriously\nuncensoriousness\nuncensurable\nuncensured\nuncensuring\nuncenter\nuncentered\nuncentral\nuncentrality\nuncentrally\nuncentred\nuncentury\nuncereclothed\nunceremented\nunceremonial\nunceremonious\nunceremoniously\nunceremoniousness\nuncertain\nuncertainly\nuncertainness\nuncertainty\nuncertifiable\nuncertifiableness\nuncertificated\nuncertified\nuncertifying\nuncertitude\nuncessant\nuncessantly\nuncessantness\nunchafed\nunchain\nunchainable\nunchained\nunchair\nunchaired\nunchalked\nunchallengeable\nunchallengeableness\nunchallengeably\nunchallenged\nunchallenging\nunchambered\nunchamfered\nunchampioned\nunchance\nunchancellor\nunchancy\nunchange\nunchangeability\nunchangeable\nunchangeableness\nunchangeably\nunchanged\nunchangedness\nunchangeful\nunchangefulness\nunchanging\nunchangingly\nunchangingness\nunchanneled\nunchannelled\nunchanted\nunchaperoned\nunchaplain\nunchapleted\nunchapter\nunchaptered\nuncharacter\nuncharactered\nuncharacteristic\nuncharacteristically\nuncharacterized\nuncharge\nunchargeable\nuncharged\nuncharging\nuncharily\nunchariness\nunchariot\nuncharitable\nuncharitableness\nuncharitably\nuncharity\nuncharm\nuncharmable\nuncharmed\nuncharming\nuncharnel\nuncharred\nuncharted\nunchartered\nunchary\nunchased\nunchaste\nunchastely\nunchastened\nunchasteness\nunchastisable\nunchastised\nunchastising\nunchastity\nunchatteled\nunchauffeured\nunchawed\nuncheat\nuncheated\nuncheating\nuncheck\nuncheckable\nunchecked\nuncheckered\nuncheerable\nuncheered\nuncheerful\nuncheerfully\nuncheerfulness\nuncheerily\nuncheeriness\nuncheering\nuncheery\nunchemical\nunchemically\nuncherished\nuncherishing\nunchested\nunchevroned\nunchewable\nunchewableness\nunchewed\nunchid\nunchidden\nunchided\nunchiding\nunchidingly\nunchild\nunchildish\nunchildishly\nunchildishness\nunchildlike\nunchilled\nunchiming\nunchinked\nunchipped\nunchiseled\nunchiselled\nunchivalric\nunchivalrous\nunchivalrously\nunchivalrousness\nunchivalry\nunchloridized\nunchoicely\nunchokable\nunchoked\nuncholeric\nunchoosable\nunchopped\nunchoral\nunchorded\nunchosen\nunchrisom\nunchristen\nunchristened\nunchristian\nunchristianity\nunchristianize\nunchristianized\nunchristianlike\nunchristianly\nunchristianness\nunchronicled\nunchronological\nunchronologically\nunchurch\nunchurched\nunchurchlike\nunchurchly\nunchurn\nunci\nuncia\nuncial\nuncialize\nuncially\nuncicatrized\nunciferous\nunciform\nunciliated\nuncinal\nUncinaria\nuncinariasis\nuncinariatic\nUncinata\nuncinate\nuncinated\nuncinatum\nuncinch\nuncinct\nuncinctured\nuncini\nUncinula\nuncinus\nuncipher\nuncircular\nuncircularized\nuncirculated\nuncircumcised\nuncircumcisedness\nuncircumcision\nuncircumlocutory\nuncircumscribable\nuncircumscribed\nuncircumscribedness\nuncircumscript\nuncircumscriptible\nuncircumscription\nuncircumspect\nuncircumspection\nuncircumspectly\nuncircumspectness\nuncircumstanced\nuncircumstantial\nuncirostrate\nuncite\nuncited\nuncitied\nuncitizen\nuncitizenlike\nuncitizenly\nuncity\nuncivic\nuncivil\nuncivilish\nuncivility\nuncivilizable\nuncivilization\nuncivilize\nuncivilized\nuncivilizedly\nuncivilizedness\nuncivilly\nuncivilness\nunclad\nunclaimed\nunclaiming\nunclamorous\nunclamp\nunclamped\nunclarified\nunclarifying\nunclarity\nunclashing\nunclasp\nunclasped\nunclassable\nunclassableness\nunclassably\nunclassed\nunclassible\nunclassical\nunclassically\nunclassifiable\nunclassifiableness\nunclassification\nunclassified\nunclassify\nunclassifying\nunclawed\nunclay\nunclayed\nuncle\nunclead\nunclean\nuncleanable\nuncleaned\nuncleanlily\nuncleanliness\nuncleanly\nuncleanness\nuncleansable\nuncleanse\nuncleansed\nuncleansedness\nunclear\nuncleared\nunclearing\nuncleavable\nuncleave\nuncledom\nuncleft\nunclehood\nunclement\nunclemently\nunclementness\nunclench\nunclergy\nunclergyable\nunclerical\nunclericalize\nunclerically\nunclericalness\nunclerklike\nunclerkly\nuncleship\nunclever\nuncleverly\nuncleverness\nunclew\nunclick\nuncliented\nunclify\nunclimaxed\nunclimb\nunclimbable\nunclimbableness\nunclimbably\nunclimbed\nunclimbing\nunclinch\nuncling\nunclinical\nunclip\nunclipped\nunclipper\nuncloak\nuncloakable\nuncloaked\nunclog\nunclogged\nuncloister\nuncloistered\nuncloistral\nunclosable\nunclose\nunclosed\nuncloseted\nunclothe\nunclothed\nunclothedly\nunclothedness\nunclotted\nuncloud\nunclouded\nuncloudedly\nuncloudedness\nuncloudy\nunclout\nuncloven\nuncloyable\nuncloyed\nuncloying\nunclub\nunclubbable\nunclubby\nunclustered\nunclustering\nunclutch\nunclutchable\nunclutched\nunclutter\nuncluttered\nunco\nuncoach\nuncoachable\nuncoachableness\nuncoached\nuncoacted\nuncoagulable\nuncoagulated\nuncoagulating\nuncoat\nuncoated\nuncoatedness\nuncoaxable\nuncoaxed\nuncoaxing\nuncock\nuncocked\nuncockneyfy\nuncocted\nuncodded\nuncoddled\nuncoded\nuncodified\nuncoerced\nuncoffer\nuncoffin\nuncoffined\nuncoffle\nuncogent\nuncogged\nuncogitable\nuncognizable\nuncognizant\nuncognized\nuncognoscibility\nuncognoscible\nuncoguidism\nuncoherent\nuncoherently\nuncoherentness\nuncohesive\nuncoif\nuncoifed\nuncoil\nuncoiled\nuncoin\nuncoined\nuncoked\nuncoking\nuncollapsed\nuncollapsible\nuncollar\nuncollared\nuncollated\nuncollatedness\nuncollected\nuncollectedly\nuncollectedness\nuncollectible\nuncollectibleness\nuncollectibly\nuncolleged\nuncollegian\nuncollegiate\nuncolloquial\nuncolloquially\nuncolonellike\nuncolonial\nuncolonize\nuncolonized\nuncolorable\nuncolorably\nuncolored\nuncoloredly\nuncoloredness\nuncoloured\nuncolouredly\nuncolouredness\nuncolt\nuncoly\nuncombable\nuncombatable\nuncombated\nuncombed\nuncombinable\nuncombinableness\nuncombinably\nuncombine\nuncombined\nuncombining\nuncombiningness\nuncombustible\nuncome\nuncomelily\nuncomeliness\nuncomely\nuncomfort\nuncomfortable\nuncomfortableness\nuncomfortably\nuncomforted\nuncomforting\nuncomfy\nuncomic\nuncommanded\nuncommandedness\nuncommanderlike\nuncommemorated\nuncommenced\nuncommendable\nuncommendableness\nuncommendably\nuncommended\nuncommensurability\nuncommensurable\nuncommensurableness\nuncommensurate\nuncommented\nuncommenting\nuncommerciable\nuncommercial\nuncommercially\nuncommercialness\nuncommingled\nuncomminuted\nuncommiserated\nuncommiserating\nuncommissioned\nuncommitted\nuncommitting\nuncommixed\nuncommodious\nuncommodiously\nuncommodiousness\nuncommon\nuncommonable\nuncommonly\nuncommonness\nuncommonplace\nuncommunicable\nuncommunicableness\nuncommunicably\nuncommunicated\nuncommunicating\nuncommunicative\nuncommunicatively\nuncommunicativeness\nuncommutable\nuncommutative\nuncommuted\nuncompact\nuncompacted\nUncompahgre\nuncompahgrite\nuncompaniable\nuncompanied\nuncompanioned\nuncomparable\nuncomparably\nuncompared\nuncompass\nuncompassable\nuncompassed\nuncompassion\nuncompassionate\nuncompassionated\nuncompassionately\nuncompassionateness\nuncompassionating\nuncompassioned\nuncompatible\nuncompatibly\nuncompellable\nuncompelled\nuncompelling\nuncompensable\nuncompensated\nuncompetent\nuncompetitive\nuncompiled\nuncomplacent\nuncomplained\nuncomplaining\nuncomplainingly\nuncomplainingness\nuncomplaint\nuncomplaisance\nuncomplaisant\nuncomplaisantly\nuncomplemental\nuncompletable\nuncomplete\nuncompleted\nuncompletely\nuncompleteness\nuncomplex\nuncompliability\nuncompliable\nuncompliableness\nuncompliance\nuncompliant\nuncomplicated\nuncomplimentary\nuncomplimented\nuncomplimenting\nuncomplying\nuncomposable\nuncomposeable\nuncomposed\nuncompoundable\nuncompounded\nuncompoundedly\nuncompoundedness\nuncompounding\nuncomprehended\nuncomprehending\nuncomprehendingly\nuncomprehendingness\nuncomprehensible\nuncomprehension\nuncomprehensive\nuncomprehensively\nuncomprehensiveness\nuncompressed\nuncompressible\nuncomprised\nuncomprising\nuncomprisingly\nuncompromised\nuncompromising\nuncompromisingly\nuncompromisingness\nuncompulsive\nuncompulsory\nuncomputable\nuncomputableness\nuncomputably\nuncomputed\nuncomraded\nunconcatenated\nunconcatenating\nunconcealable\nunconcealableness\nunconcealably\nunconcealed\nunconcealing\nunconcealingly\nunconcealment\nunconceded\nunconceited\nunconceivable\nunconceivableness\nunconceivably\nunconceived\nunconceiving\nunconcern\nunconcerned\nunconcernedly\nunconcernedness\nunconcerning\nunconcernment\nunconcertable\nunconcerted\nunconcertedly\nunconcertedness\nunconcessible\nunconciliable\nunconciliated\nunconciliatedness\nunconciliating\nunconciliatory\nunconcludable\nunconcluded\nunconcluding\nunconcludingness\nunconclusive\nunconclusively\nunconclusiveness\nunconcocted\nunconcordant\nunconcrete\nunconcreted\nunconcurrent\nunconcurring\nuncondemnable\nuncondemned\nuncondensable\nuncondensableness\nuncondensed\nuncondensing\nuncondescending\nuncondescension\nuncondition\nunconditional\nunconditionality\nunconditionally\nunconditionalness\nunconditionate\nunconditionated\nunconditionately\nunconditioned\nunconditionedly\nunconditionedness\nuncondoled\nuncondoling\nunconducing\nunconducive\nunconduciveness\nunconducted\nunconductive\nunconductiveness\nunconfected\nunconfederated\nunconferred\nunconfess\nunconfessed\nunconfessing\nunconfided\nunconfidence\nunconfident\nunconfidential\nunconfidentialness\nunconfidently\nunconfiding\nunconfinable\nunconfine\nunconfined\nunconfinedly\nunconfinedness\nunconfinement\nunconfining\nunconfirm\nunconfirmative\nunconfirmed\nunconfirming\nunconfiscable\nunconfiscated\nunconflicting\nunconflictingly\nunconflictingness\nunconformability\nunconformable\nunconformableness\nunconformably\nunconformed\nunconformedly\nunconforming\nunconformist\nunconformity\nunconfound\nunconfounded\nunconfoundedly\nunconfrontable\nunconfronted\nunconfusable\nunconfusably\nunconfused\nunconfusedly\nunconfutable\nunconfuted\nunconfuting\nuncongeal\nuncongealable\nuncongealed\nuncongenial\nuncongeniality\nuncongenially\nuncongested\nunconglobated\nunconglomerated\nunconglutinated\nuncongratulate\nuncongratulated\nuncongratulating\nuncongregated\nuncongregational\nuncongressional\nuncongruous\nunconjecturable\nunconjectured\nunconjoined\nunconjugal\nunconjugated\nunconjunctive\nunconjured\nunconnected\nunconnectedly\nunconnectedness\nunconned\nunconnived\nunconniving\nunconquerable\nunconquerableness\nunconquerably\nunconquered\nunconscienced\nunconscient\nunconscientious\nunconscientiously\nunconscientiousness\nunconscionable\nunconscionableness\nunconscionably\nunconscious\nunconsciously\nunconsciousness\nunconsecrate\nunconsecrated\nunconsecratedly\nunconsecratedness\nunconsecration\nunconsecutive\nunconsent\nunconsentaneous\nunconsented\nunconsenting\nunconsequential\nunconsequentially\nunconsequentialness\nunconservable\nunconservative\nunconserved\nunconserving\nunconsiderable\nunconsiderate\nunconsiderately\nunconsiderateness\nunconsidered\nunconsideredly\nunconsideredness\nunconsidering\nunconsideringly\nunconsignable\nunconsigned\nunconsistent\nunconsociable\nunconsociated\nunconsolable\nunconsolably\nunconsolatory\nunconsoled\nunconsolidated\nunconsolidating\nunconsolidation\nunconsoling\nunconsonancy\nunconsonant\nunconsonantly\nunconsonous\nunconspicuous\nunconspicuously\nunconspicuousness\nunconspired\nunconspiring\nunconspiringly\nunconspiringness\nunconstancy\nunconstant\nunconstantly\nunconstantness\nunconstellated\nunconstipated\nunconstituted\nunconstitutional\nunconstitutionalism\nunconstitutionality\nunconstitutionally\nunconstrainable\nunconstrained\nunconstrainedly\nunconstrainedness\nunconstraining\nunconstraint\nunconstricted\nunconstruable\nunconstructed\nunconstructive\nunconstructural\nunconstrued\nunconsular\nunconsult\nunconsultable\nunconsulted\nunconsulting\nunconsumable\nunconsumed\nunconsuming\nunconsummate\nunconsummated\nunconsumptive\nuncontagious\nuncontainable\nuncontainableness\nuncontainably\nuncontained\nuncontaminable\nuncontaminate\nuncontaminated\nuncontemned\nuncontemnedly\nuncontemplated\nuncontemporaneous\nuncontemporary\nuncontemptuous\nuncontended\nuncontending\nuncontent\nuncontentable\nuncontented\nuncontentedly\nuncontentedness\nuncontenting\nuncontentingness\nuncontentious\nuncontentiously\nuncontentiousness\nuncontestable\nuncontestableness\nuncontestably\nuncontested\nuncontestedly\nuncontestedness\nuncontinence\nuncontinent\nuncontinental\nuncontinented\nuncontinently\nuncontinual\nuncontinued\nuncontinuous\nuncontorted\nuncontract\nuncontracted\nuncontractedness\nuncontractile\nuncontradictable\nuncontradictableness\nuncontradictably\nuncontradicted\nuncontradictedly\nuncontradictious\nuncontradictory\nuncontrastable\nuncontrasted\nuncontrasting\nuncontributed\nuncontributing\nuncontributory\nuncontrite\nuncontrived\nuncontriving\nuncontrol\nuncontrollability\nuncontrollable\nuncontrollableness\nuncontrollably\nuncontrolled\nuncontrolledly\nuncontrolledness\nuncontrolling\nuncontroversial\nuncontroversially\nuncontrovertable\nuncontrovertableness\nuncontrovertably\nuncontroverted\nuncontrovertedly\nuncontrovertible\nuncontrovertibleness\nuncontrovertibly\nunconvenable\nunconvened\nunconvenience\nunconvenient\nunconveniently\nunconventional\nunconventionalism\nunconventionality\nunconventionalize\nunconventionally\nunconventioned\nunconversable\nunconversableness\nunconversably\nunconversant\nunconversational\nunconversion\nunconvert\nunconverted\nunconvertedly\nunconvertedness\nunconvertibility\nunconvertible\nunconveyable\nunconveyed\nunconvicted\nunconvicting\nunconvince\nunconvinced\nunconvincedly\nunconvincedness\nunconvincibility\nunconvincible\nunconvincing\nunconvincingly\nunconvincingness\nunconvoluted\nunconvoyed\nunconvulsed\nuncookable\nuncooked\nuncooled\nuncoop\nuncooped\nuncoopered\nuncooping\nuncope\nuncopiable\nuncopied\nuncopious\nuncopyrighted\nuncoquettish\nuncoquettishly\nuncord\nuncorded\nuncordial\nuncordiality\nuncordially\nuncording\nuncore\nuncored\nuncork\nuncorked\nuncorker\nuncorking\nuncorned\nuncorner\nuncoronated\nuncoroneted\nuncorporal\nuncorpulent\nuncorrect\nuncorrectable\nuncorrected\nuncorrectible\nuncorrectly\nuncorrectness\nuncorrelated\nuncorrespondency\nuncorrespondent\nuncorresponding\nuncorrigible\nuncorrigibleness\nuncorrigibly\nuncorroborated\nuncorroded\nuncorrugated\nuncorrupt\nuncorrupted\nuncorruptedly\nuncorruptedness\nuncorruptibility\nuncorruptible\nuncorruptibleness\nuncorruptibly\nuncorrupting\nuncorruption\nuncorruptive\nuncorruptly\nuncorruptness\nuncorseted\nuncosseted\nuncost\nuncostliness\nuncostly\nuncostumed\nuncottoned\nuncouch\nuncouched\nuncouching\nuncounselable\nuncounseled\nuncounsellable\nuncounselled\nuncountable\nuncountableness\nuncountably\nuncounted\nuncountenanced\nuncounteracted\nuncounterbalanced\nuncounterfeit\nuncounterfeited\nuncountermandable\nuncountermanded\nuncountervailed\nuncountess\nuncountrified\nuncouple\nuncoupled\nuncoupler\nuncourageous\nuncoursed\nuncourted\nuncourteous\nuncourteously\nuncourteousness\nuncourtierlike\nuncourting\nuncourtlike\nuncourtliness\nuncourtly\nuncous\nuncousinly\nuncouth\nuncouthie\nuncouthly\nuncouthness\nuncouthsome\nuncovenant\nuncovenanted\nuncover\nuncoverable\nuncovered\nuncoveredly\nuncoveted\nuncoveting\nuncovetingly\nuncovetous\nuncowed\nuncowl\nuncoy\nuncracked\nuncradled\nuncraftily\nuncraftiness\nuncrafty\nuncram\nuncramp\nuncramped\nuncrampedness\nuncranked\nuncrannied\nuncrated\nuncravatted\nuncraven\nuncraving\nuncravingly\nuncrazed\nuncream\nuncreased\nuncreatability\nuncreatable\nuncreatableness\nuncreate\nuncreated\nuncreatedness\nuncreating\nuncreation\nuncreative\nuncreativeness\nuncreaturely\nuncredentialed\nuncredentialled\nuncredibility\nuncredible\nuncredibly\nuncreditable\nuncreditableness\nuncreditably\nuncredited\nuncrediting\nuncredulous\nuncreeping\nuncreosoted\nuncrest\nuncrested\nuncrevassed\nuncrib\nuncried\nuncrime\nuncriminal\nuncriminally\nuncrinkle\nuncrinkled\nuncrinkling\nuncrippled\nuncrisp\nuncritical\nuncritically\nuncriticisable\nuncriticised\nuncriticising\nuncriticisingly\nuncriticism\nuncriticizable\nuncriticized\nuncriticizing\nuncriticizingly\nuncrochety\nuncrook\nuncrooked\nuncrooking\nuncropped\nuncropt\nuncross\nuncrossable\nuncrossableness\nuncrossed\nuncrossexaminable\nuncrossexamined\nuncrossly\nuncrowded\nuncrown\nuncrowned\nuncrowning\nuncrucified\nuncrudded\nuncrude\nuncruel\nuncrumbled\nuncrumple\nuncrumpling\nuncrushable\nuncrushed\nuncrusted\nuncrying\nuncrystaled\nuncrystalled\nuncrystalline\nuncrystallizability\nuncrystallizable\nuncrystallized\nunction\nunctional\nunctioneer\nunctionless\nunctious\nunctiousness\nunctorium\nunctuose\nunctuosity\nunctuous\nunctuously\nunctuousness\nuncubbed\nuncubic\nuncuckold\nuncuckolded\nuncudgelled\nuncuffed\nuncular\nunculled\nuncultivability\nuncultivable\nuncultivate\nuncultivated\nuncultivation\nunculturable\nunculture\nuncultured\nuncumber\nuncumbered\nuncumbrous\nuncunning\nuncunningly\nuncunningness\nuncupped\nuncurable\nuncurableness\nuncurably\nuncurb\nuncurbable\nuncurbed\nuncurbedly\nuncurbing\nuncurd\nuncurdled\nuncurdling\nuncured\nuncurious\nuncuriously\nuncurl\nuncurled\nuncurling\nuncurrent\nuncurrently\nuncurrentness\nuncurricularized\nuncurried\nuncurse\nuncursed\nuncursing\nuncurst\nuncurtailed\nuncurtain\nuncurtained\nuncus\nuncushioned\nuncusped\nuncustomable\nuncustomarily\nuncustomariness\nuncustomary\nuncustomed\nuncut\nuncuth\nuncuticulate\nuncuttable\nuncynical\nuncynically\nuncypress\nundabbled\nundaggled\nundaily\nundaintiness\nundainty\nundallying\nundam\nundamageable\nundamaged\nundamaging\nundamasked\nundammed\nundamming\nundamn\nundamped\nundancing\nundandiacal\nundandled\nundangered\nundangerous\nundangerousness\nundared\nundaring\nundark\nundarken\nundarkened\nundarned\nundashed\nundatable\nundate\nundateable\nundated\nundatedness\nundaub\nundaubed\nundaughter\nundaughterliness\nundaughterly\nundauntable\nundaunted\nundauntedly\nundauntedness\nundaunting\nundawned\nundawning\nundazed\nundazing\nundazzle\nundazzled\nundazzling\nunde\nundead\nundeadened\nundeaf\nundealable\nundealt\nundean\nundear\nundebarred\nundebased\nundebatable\nundebated\nundebating\nundebauched\nundebilitated\nundebilitating\nundecagon\nundecanaphthene\nundecane\nundecatoic\nundecayable\nundecayableness\nundecayed\nundecayedness\nundecaying\nundeceased\nundeceitful\nundeceivable\nundeceivableness\nundeceivably\nundeceive\nundeceived\nundeceiver\nundeceiving\nundecency\nundecennary\nundecennial\nundecent\nundecently\nundeception\nundeceptious\nundeceptitious\nundeceptive\nundecidable\nundecide\nundecided\nundecidedly\nundecidedness\nundeciding\nundecimal\nundeciman\nundecimole\nundecipher\nundecipherability\nundecipherable\nundecipherably\nundeciphered\nundecision\nundecisive\nundecisively\nundecisiveness\nundeck\nundecked\nundeclaimed\nundeclaiming\nundeclamatory\nundeclarable\nundeclare\nundeclared\nundeclinable\nundeclinableness\nundeclinably\nundeclined\nundeclining\nundecocted\nundecoic\nundecolic\nundecomposable\nundecomposed\nundecompounded\nundecorated\nundecorative\nundecorous\nundecorously\nundecorousness\nundecorticated\nundecoyed\nundecreased\nundecreasing\nundecree\nundecreed\nundecried\nundecyl\nundecylenic\nundecylic\nundedicate\nundedicated\nundeducible\nundeducted\nundeeded\nundeemed\nundeemous\nundeemously\nundeep\nundefaceable\nundefaced\nundefalcated\nundefamed\nundefaming\nundefatigable\nundefaulted\nundefaulting\nundefeasible\nundefeat\nundefeatable\nundefeated\nundefeatedly\nundefeatedness\nundefecated\nundefectible\nundefective\nundefectiveness\nundefendable\nundefendableness\nundefendably\nundefended\nundefending\nundefense\nundefensed\nundefensible\nundeferential\nundeferentially\nundeferred\nundefiant\nundeficient\nundefied\nundefilable\nundefiled\nundefiledly\nundefiledness\nundefinable\nundefinableness\nundefinably\nundefine\nundefined\nundefinedly\nundefinedness\nundeflected\nundeflowered\nundeformed\nundeformedness\nundefrauded\nundefrayed\nundeft\nundegeneracy\nundegenerate\nundegenerated\nundegenerating\nundegraded\nundegrading\nundeification\nundeified\nundeify\nundeistical\nundejected\nundelated\nundelayable\nundelayed\nundelayedly\nundelaying\nundelayingly\nundelectable\nundelectably\nundelegated\nundeleted\nundeliberate\nundeliberated\nundeliberately\nundeliberateness\nundeliberating\nundeliberatingly\nundeliberative\nundeliberativeness\nundelible\nundelicious\nundelight\nundelighted\nundelightful\nundelightfully\nundelightfulness\nundelighting\nundelightsome\nundelimited\nundelineated\nundeliverable\nundeliverableness\nundelivered\nundelivery\nundeludable\nundelude\nundeluded\nundeluding\nundeluged\nundelusive\nundelusively\nundelve\nundelved\nundelylene\nundemagnetizable\nundemanded\nundemised\nundemocratic\nundemocratically\nundemocratize\nundemolishable\nundemolished\nundemonstrable\nundemonstrably\nundemonstratable\nundemonstrated\nundemonstrative\nundemonstratively\nundemonstrativeness\nundemure\nundemurring\nunden\nundeniable\nundeniableness\nundeniably\nundenied\nundeniedly\nundenizened\nundenominated\nundenominational\nundenominationalism\nundenominationalist\nundenominationalize\nundenominationally\nundenoted\nundenounced\nundenuded\nundepartableness\nundepartably\nundeparted\nundeparting\nundependable\nundependableness\nundependably\nundependent\nundepending\nundephlegmated\nundepicted\nundepleted\nundeplored\nundeported\nundeposable\nundeposed\nundeposited\nundepraved\nundepravedness\nundeprecated\nundepreciated\nundepressed\nundepressible\nundepressing\nundeprivable\nundeprived\nundepurated\nundeputed\nunder\nunderabyss\nunderaccident\nunderaccommodated\nunderact\nunderacted\nunderacting\nunderaction\nunderactor\nunderadjustment\nunderadmiral\nunderadventurer\nunderage\nunderagency\nunderagent\nunderagitation\nunderaid\nunderaim\nunderair\nunderalderman\nunderanged\nunderarch\nunderargue\nunderarm\nunderaverage\nunderback\nunderbailiff\nunderbake\nunderbalance\nunderballast\nunderbank\nunderbarber\nunderbarring\nunderbasal\nunderbeadle\nunderbeak\nunderbeam\nunderbear\nunderbearer\nunderbearing\nunderbeat\nunderbeaten\nunderbed\nunderbelly\nunderbeveling\nunderbid\nunderbidder\nunderbill\nunderbillow\nunderbishop\nunderbishopric\nunderbit\nunderbite\nunderbitted\nunderbitten\nunderboard\nunderboated\nunderbodice\nunderbody\nunderboil\nunderboom\nunderborn\nunderborne\nunderbottom\nunderbough\nunderbought\nunderbound\nunderbowed\nunderbowser\nunderbox\nunderboy\nunderbrace\nunderbraced\nunderbranch\nunderbreath\nunderbreathing\nunderbred\nunderbreeding\nunderbrew\nunderbridge\nunderbrigadier\nunderbright\nunderbrim\nunderbrush\nunderbubble\nunderbud\nunderbuild\nunderbuilder\nunderbuilding\nunderbuoy\nunderburn\nunderburned\nunderburnt\nunderbursar\nunderbury\nunderbush\nunderbutler\nunderbuy\nundercanopy\nundercanvass\nundercap\nundercapitaled\nundercapitalization\nundercapitalize\nundercaptain\nundercarder\nundercarriage\nundercarry\nundercarter\nundercarve\nundercarved\nundercase\nundercasing\nundercast\nundercause\nunderceiling\nundercellar\nundercellarer\nunderchamber\nunderchamberlain\nunderchancellor\nunderchanter\nunderchap\nundercharge\nundercharged\nunderchief\nunderchime\nunderchin\nunderchord\nunderchurched\nundercircle\nundercitizen\nunderclad\nunderclass\nunderclassman\nunderclay\nunderclearer\nunderclerk\nunderclerkship\nundercliff\nunderclift\nundercloak\nundercloth\nunderclothe\nunderclothed\nunderclothes\nunderclothing\nunderclub\nunderclutch\nundercoachman\nundercoat\nundercoated\nundercoater\nundercoating\nundercollector\nundercolor\nundercolored\nundercoloring\nundercommander\nundercomment\nundercompounded\nunderconcerned\nundercondition\nunderconsciousness\nunderconstable\nunderconsume\nunderconsumption\nundercook\nundercool\nundercooper\nundercorrect\nundercountenance\nundercourse\nundercourtier\nundercover\nundercovering\nundercovert\nundercrawl\nundercreep\nundercrest\nundercrier\nundercroft\nundercrop\nundercrust\nundercry\nundercrypt\nundercup\nundercurl\nundercurrent\nundercurve\nundercut\nundercutter\nundercutting\nunderdauber\nunderdeacon\nunderdead\nunderdebauchee\nunderdeck\nunderdepth\nunderdevelop\nunderdevelopment\nunderdevil\nunderdialogue\nunderdig\nunderdip\nunderdish\nunderdistinction\nunderdistributor\nunderditch\nunderdive\nunderdo\nunderdoctor\nunderdoer\nunderdog\nunderdoing\nunderdone\nunderdose\nunderdot\nunderdown\nunderdraft\nunderdrag\nunderdrain\nunderdrainage\nunderdrainer\nunderdraught\nunderdraw\nunderdrawers\nunderdrawn\nunderdress\nunderdressed\nunderdrift\nunderdrive\nunderdriven\nunderdrudgery\nunderdrumming\nunderdry\nunderdunged\nunderearth\nundereat\nundereaten\nunderedge\nundereducated\nunderemployment\nunderengraver\nunderenter\nunderer\nunderescheator\nunderestimate\nunderestimation\nunderexcited\nunderexercise\nunderexpose\nunderexposure\nundereye\nunderface\nunderfaction\nunderfactor\nunderfaculty\nunderfalconer\nunderfall\nunderfarmer\nunderfeathering\nunderfeature\nunderfed\nunderfeed\nunderfeeder\nunderfeeling\nunderfeet\nunderfellow\nunderfiend\nunderfill\nunderfilling\nunderfinance\nunderfind\nunderfire\nunderfitting\nunderflame\nunderflannel\nunderfleece\nunderflood\nunderfloor\nunderflooring\nunderflow\nunderfold\nunderfolded\nunderfong\nunderfoot\nunderfootage\nunderfootman\nunderforebody\nunderform\nunderfortify\nunderframe\nunderframework\nunderframing\nunderfreight\nunderfrequency\nunderfringe\nunderfrock\nunderfur\nunderfurnish\nunderfurnisher\nunderfurrow\nundergabble\nundergamekeeper\nundergaoler\nundergarb\nundergardener\nundergarment\nundergarnish\nundergauge\nundergear\nundergeneral\nundergentleman\nundergird\nundergirder\nundergirding\nundergirdle\nundergirth\nunderglaze\nundergloom\nunderglow\nundergnaw\nundergo\nundergod\nundergoer\nundergoing\nundergore\nundergoverness\nundergovernment\nundergovernor\nundergown\nundergrad\nundergrade\nundergraduate\nundergraduatedom\nundergraduateness\nundergraduateship\nundergraduatish\nundergraduette\nundergraining\nundergrass\nundergreen\nundergrieve\nundergroan\nunderground\nundergrounder\nundergroundling\nundergrove\nundergrow\nundergrowl\nundergrown\nundergrowth\nundergrub\nunderguard\nunderguardian\nundergunner\nunderhabit\nunderhammer\nunderhand\nunderhanded\nunderhandedly\nunderhandedness\nunderhang\nunderhanging\nunderhangman\nunderhatch\nunderhead\nunderheat\nunderheaven\nunderhelp\nunderhew\nunderhid\nunderhill\nunderhint\nunderhistory\nunderhive\nunderhold\nunderhole\nunderhonest\nunderhorse\nunderhorsed\nunderhousemaid\nunderhum\nunderhung\nunderided\nunderinstrument\nunderisive\nunderissue\nunderivable\nunderivative\nunderived\nunderivedly\nunderivedness\nunderjacket\nunderjailer\nunderjanitor\nunderjaw\nunderjawed\nunderjobbing\nunderjudge\nunderjungle\nunderkeel\nunderkeeper\nunderkind\nunderking\nunderkingdom\nunderlaborer\nunderlaid\nunderlain\nunderland\nunderlanguaged\nunderlap\nunderlapper\nunderlash\nunderlaundress\nunderlawyer\nunderlay\nunderlayer\nunderlaying\nunderleaf\nunderlease\nunderleather\nunderlegate\nunderlessee\nunderlet\nunderletter\nunderlevel\nunderlever\nunderlid\nunderlie\nunderlier\nunderlieutenant\nunderlife\nunderlift\nunderlight\nunderliking\nunderlimbed\nunderlimit\nunderline\nunderlineation\nunderlineman\nunderlinement\nunderlinen\nunderliner\nunderling\nunderlining\nunderlip\nunderlive\nunderload\nunderlock\nunderlodging\nunderloft\nunderlook\nunderlooker\nunderlout\nunderlunged\nunderly\nunderlye\nunderlying\nundermade\nundermaid\nundermaker\nunderman\nundermanager\nundermanned\nundermanning\nundermark\nundermarshal\nundermarshalman\nundermasted\nundermaster\nundermatch\nundermatched\nundermate\nundermath\nundermeal\nundermeaning\nundermeasure\nundermediator\nundermelody\nundermentioned\nundermiller\nundermimic\nunderminable\nundermine\nunderminer\nundermining\nunderminingly\nunderminister\nunderministry\nundermist\nundermoated\nundermoney\nundermoral\nundermost\nundermotion\nundermount\nundermountain\nundermusic\nundermuslin\nundern\nundername\nundernatural\nunderneath\nunderness\nunderniceness\nundernote\nundernoted\nundernourish\nundernourished\nundernourishment\nundernsong\nunderntide\nunderntime\nundernurse\nundernutrition\nunderoccupied\nunderofficer\nunderofficered\nunderofficial\nunderogating\nunderogatory\nunderopinion\nunderorb\nunderorganization\nunderorseman\nunderoverlooker\nunderoxidize\nunderpacking\nunderpaid\nunderpain\nunderpainting\nunderpan\nunderpants\nunderparticipation\nunderpartner\nunderpass\nunderpassion\nunderpay\nunderpayment\nunderpeep\nunderpeer\nunderpen\nunderpeopled\nunderpetticoat\nunderpetticoated\nunderpick\nunderpier\nunderpilaster\nunderpile\nunderpin\nunderpinner\nunderpinning\nunderpitch\nunderpitched\nunderplain\nunderplan\nunderplant\nunderplate\nunderplay\nunderplot\nunderplotter\nunderply\nunderpoint\nunderpole\nunderpopulate\nunderpopulation\nunderporch\nunderporter\nunderpose\nunderpossessor\nunderpot\nunderpower\nunderpraise\nunderprefect\nunderprentice\nunderpresence\nunderpresser\nunderpressure\nunderprice\nunderpriest\nunderprincipal\nunderprint\nunderprior\nunderprivileged\nunderprize\nunderproduce\nunderproduction\nunderproductive\nunderproficient\nunderprompt\nunderprompter\nunderproof\nunderprop\nunderproportion\nunderproportioned\nunderproposition\nunderpropped\nunderpropper\nunderpropping\nunderprospect\nunderpry\nunderpuke\nunderqualified\nunderqueen\nunderquote\nunderranger\nunderrate\nunderratement\nunderrating\nunderreach\nunderread\nunderreader\nunderrealize\nunderrealm\nunderream\nunderreamer\nunderreceiver\nunderreckon\nunderrecompense\nunderregion\nunderregistration\nunderrent\nunderrented\nunderrenting\nunderrepresent\nunderrepresentation\nunderrespected\nunderriddle\nunderriding\nunderrigged\nunderring\nunderripe\nunderripened\nunderriver\nunderroarer\nunderroast\nunderrobe\nunderrogue\nunderroll\nunderroller\nunderroof\nunderroom\nunderroot\nunderrooted\nunderrower\nunderrule\nunderruler\nunderrun\nunderrunning\nundersacristan\nundersailed\nundersally\nundersap\nundersatisfaction\nundersaturate\nundersaturation\nundersavior\nundersaw\nundersawyer\nunderscale\nunderscheme\nunderschool\nunderscoop\nunderscore\nunderscribe\nunderscript\nunderscrub\nunderscrupulous\nundersea\nunderseam\nunderseaman\nundersearch\nunderseas\nunderseated\nundersecretary\nundersecretaryship\nundersect\nundersee\nunderseeded\nunderseedman\nundersell\nunderseller\nunderselling\nundersense\nundersequence\nunderservant\nunderserve\nunderservice\nunderset\nundersetter\nundersetting\nundersettle\nundersettler\nundersettling\nundersexton\nundershapen\nundersharp\nundersheathing\nundershepherd\nundersheriff\nundersheriffry\nundersheriffship\nundersheriffwick\nundershield\nundershine\nundershining\nundershire\nundershirt\nundershoe\nundershoot\nundershore\nundershorten\nundershot\nundershrievalty\nundershrieve\nundershrievery\nundershrub\nundershrubbiness\nundershrubby\nundershunter\nundershut\nunderside\nundersight\nundersighted\nundersign\nundersignalman\nundersigner\nundersill\nundersinging\nundersitter\nundersize\nundersized\nunderskin\nunderskirt\nundersky\nundersleep\nundersleeve\nunderslip\nunderslope\nundersluice\nunderslung\nundersneer\nundersociety\nundersoil\nundersole\nundersomething\nundersong\nundersorcerer\nundersort\nundersoul\nundersound\nundersovereign\nundersow\nunderspar\nundersparred\nunderspecies\nunderspecified\nunderspend\nundersphere\nunderspin\nunderspinner\nundersplice\nunderspore\nunderspread\nunderspring\nundersprout\nunderspurleather\nundersquare\nunderstaff\nunderstage\nunderstain\nunderstairs\nunderstamp\nunderstand\nunderstandability\nunderstandable\nunderstandableness\nunderstandably\nunderstander\nunderstanding\nunderstandingly\nunderstandingness\nunderstate\nunderstatement\nunderstay\nundersteer\nunderstem\nunderstep\nundersteward\nunderstewardship\nunderstimulus\nunderstock\nunderstocking\nunderstood\nunderstory\nunderstrain\nunderstrap\nunderstrapper\nunderstrapping\nunderstratum\nunderstream\nunderstress\nunderstrew\nunderstride\nunderstriding\nunderstrife\nunderstrike\nunderstring\nunderstroke\nunderstrung\nunderstudy\nunderstuff\nunderstuffing\nundersuck\nundersuggestion\nundersuit\nundersupply\nundersupport\nundersurface\nunderswain\nunderswamp\nundersward\nunderswearer\nundersweat\nundersweep\nunderswell\nundertakable\nundertake\nundertakement\nundertaker\nundertakerish\nundertakerlike\nundertakerly\nundertakery\nundertaking\nundertakingly\nundertalk\nundertapster\nundertaxed\nunderteacher\nunderteamed\nunderteller\nundertenancy\nundertenant\nundertenter\nundertenure\nunderterrestrial\nundertest\nunderthane\nunderthaw\nunderthief\nunderthing\nunderthink\nunderthirst\nunderthought\nunderthroating\nunderthrob\nunderthrust\nundertide\nundertided\nundertie\nundertime\nundertimed\nundertint\nundertitle\nundertone\nundertoned\nundertook\nundertow\nundertrader\nundertrained\nundertread\nundertreasurer\nundertreat\nundertribe\nundertrick\nundertrodden\nundertruck\nundertrump\nundertruss\nundertub\nundertune\nundertunic\nunderturf\nunderturn\nunderturnkey\nundertutor\nundertwig\nundertype\nundertyrant\nunderusher\nundervaluation\nundervalue\nundervaluement\nundervaluer\nundervaluing\nundervaluinglike\nundervaluingly\nundervalve\nundervassal\nundervaulted\nundervaulting\nundervegetation\nunderventilation\nunderverse\nundervest\nundervicar\nunderviewer\nundervillain\nundervinedresser\nundervitalized\nundervocabularied\nundervoice\nundervoltage\nunderwage\nunderwaist\nunderwaistcoat\nunderwalk\nunderward\nunderwarden\nunderwarmth\nunderwarp\nunderwash\nunderwatch\nunderwatcher\nunderwater\nunderwave\nunderway\nunderweapon\nunderwear\nunderweft\nunderweigh\nunderweight\nunderweighted\nunderwent\nunderwheel\nunderwhistle\nunderwind\nunderwing\nunderwit\nunderwitch\nunderwitted\nunderwood\nunderwooded\nunderwork\nunderworker\nunderworking\nunderworkman\nunderworld\nunderwrap\nunderwrite\nunderwriter\nunderwriting\nunderwrought\nunderyield\nunderyoke\nunderzeal\nunderzealot\nundescendable\nundescended\nundescendible\nundescribable\nundescribably\nundescribed\nundescried\nundescript\nundescriptive\nundescrying\nundesert\nundeserted\nundeserting\nundeserve\nundeserved\nundeservedly\nundeservedness\nundeserver\nundeserving\nundeservingly\nundeservingness\nundesign\nundesignated\nundesigned\nundesignedly\nundesignedness\nundesigning\nundesigningly\nundesigningness\nundesirability\nundesirable\nundesirableness\nundesirably\nundesire\nundesired\nundesiredly\nundesiring\nundesirous\nundesirously\nundesirousness\nundesisting\nundespaired\nundespairing\nundespairingly\nundespatched\nundespised\nundespising\nundespoiled\nundespondent\nundespondently\nundesponding\nundespotic\nundestined\nundestroyable\nundestroyed\nundestructible\nundestructive\nundetachable\nundetached\nundetailed\nundetainable\nundetained\nundetectable\nundetected\nundetectible\nundeteriorated\nundeteriorating\nundeterminable\nundeterminate\nundetermination\nundetermined\nundetermining\nundeterred\nundeterring\nundetested\nundetesting\nundethronable\nundethroned\nundetracting\nundetractingly\nundetrimental\nundevelopable\nundeveloped\nundeveloping\nundeviated\nundeviating\nundeviatingly\nundevil\nundevious\nundeviously\nundevisable\nundevised\nundevoted\nundevotion\nundevotional\nundevoured\nundevout\nundevoutly\nundevoutness\nundewed\nundewy\nundexterous\nundexterously\nundextrous\nundextrously\nundiademed\nundiagnosable\nundiagnosed\nundialed\nundialyzed\nundiametric\nundiamonded\nundiapered\nundiaphanous\nundiatonic\nundichotomous\nundictated\nundid\nundidactic\nundies\nundieted\nundifferenced\nundifferent\nundifferential\nundifferentiated\nundifficult\nundiffident\nundiffracted\nundiffused\nundiffusible\nundiffusive\nundig\nundigenous\nundigest\nundigestable\nundigested\nundigestible\nundigesting\nundigestion\nundigged\nundight\nundighted\nundigitated\nundignified\nundignifiedly\nundignifiedness\nundignify\nundiked\nundilapidated\nundilatable\nundilated\nundilatory\nundiligent\nundiligently\nundilute\nundiluted\nundilution\nundiluvial\nundim\nundimensioned\nundimerous\nundimidiate\nundiminishable\nundiminishableness\nundiminishably\nundiminished\nundiminishing\nundiminutive\nundimmed\nundimpled\nUndine\nundine\nundined\nundinted\nundiocesed\nundiphthongize\nundiplomaed\nundiplomatic\nundipped\nundirect\nundirected\nundirectional\nundirectly\nundirectness\nundirk\nundisabled\nundisadvantageous\nundisagreeable\nundisappearing\nundisappointable\nundisappointed\nundisappointing\nundisarmed\nundisastrous\nundisbanded\nundisbarred\nundisburdened\nundisbursed\nundiscardable\nundiscarded\nundiscerned\nundiscernedly\nundiscernible\nundiscernibleness\nundiscernibly\nundiscerning\nundiscerningly\nundischargeable\nundischarged\nundiscipled\nundisciplinable\nundiscipline\nundisciplined\nundisciplinedness\nundisclaimed\nundisclosed\nundiscolored\nundiscomfitable\nundiscomfited\nundiscomposed\nundisconcerted\nundisconnected\nundiscontinued\nundiscordant\nundiscording\nundiscounted\nundiscourageable\nundiscouraged\nundiscouraging\nundiscoursed\nundiscoverable\nundiscoverableness\nundiscoverably\nundiscovered\nundiscreditable\nundiscredited\nundiscreet\nundiscreetly\nundiscreetness\nundiscretion\nundiscriminated\nundiscriminating\nundiscriminatingly\nundiscriminatingness\nundiscriminative\nundiscursive\nundiscussable\nundiscussed\nundisdained\nundisdaining\nundiseased\nundisestablished\nundisfigured\nundisfranchised\nundisfulfilled\nundisgorged\nundisgraced\nundisguisable\nundisguise\nundisguised\nundisguisedly\nundisguisedness\nundisgusted\nundisheartened\nundished\nundisheveled\nundishonored\nundisillusioned\nundisinfected\nundisinheritable\nundisinherited\nundisintegrated\nundisinterested\nundisjoined\nundisjointed\nundisliked\nundislocated\nundislodgeable\nundislodged\nundismantled\nundismay\nundismayable\nundismayed\nundismayedly\nundismembered\nundismissed\nundismounted\nundisobedient\nundisobeyed\nundisobliging\nundisordered\nundisorderly\nundisorganized\nundisowned\nundisowning\nundisparaged\nundisparity\nundispassionate\nundispatchable\nundispatched\nundispatching\nundispellable\nundispelled\nundispensable\nundispensed\nundispensing\nundispersed\nundispersing\nundisplaced\nundisplanted\nundisplay\nundisplayable\nundisplayed\nundisplaying\nundispleased\nundispose\nundisposed\nundisposedness\nundisprivacied\nundisprovable\nundisproved\nundisproving\nundisputable\nundisputableness\nundisputably\nundisputatious\nundisputatiously\nundisputed\nundisputedly\nundisputedness\nundisputing\nundisqualifiable\nundisqualified\nundisquieted\nundisreputable\nundisrobed\nundisrupted\nundissected\nundissembled\nundissembledness\nundissembling\nundissemblingly\nundisseminated\nundissenting\nundissevered\nundissimulated\nundissipated\nundissociated\nundissoluble\nundissolute\nundissolvable\nundissolved\nundissolving\nundissonant\nundissuadable\nundissuadably\nundissuade\nundistanced\nundistant\nundistantly\nundistasted\nundistasteful\nundistempered\nundistend\nundistended\nundistilled\nundistinct\nundistinctive\nundistinctly\nundistinctness\nundistinguish\nundistinguishable\nundistinguishableness\nundistinguishably\nundistinguished\nundistinguishing\nundistinguishingly\nundistorted\nundistorting\nundistracted\nundistractedly\nundistractedness\nundistracting\nundistractingly\nundistrained\nundistraught\nundistress\nundistressed\nundistributed\nundistrusted\nundistrustful\nundisturbable\nundisturbance\nundisturbed\nundisturbedly\nundisturbedness\nundisturbing\nundisturbingly\nunditched\nundithyrambic\nundittoed\nundiuretic\nundiurnal\nundivable\nundivergent\nundiverging\nundiverse\nundiversified\nundiverted\nundivertible\nundivertibly\nundiverting\nundivested\nundivestedly\nundividable\nundividableness\nundividably\nundivided\nundividedly\nundividedness\nundividing\nundivinable\nundivined\nundivinelike\nundivinely\nundivining\nundivisible\nundivisive\nundivorceable\nundivorced\nundivorcedness\nundivorcing\nundivulged\nundivulging\nundizened\nundizzied\nundo\nundoable\nundock\nundocked\nundoctor\nundoctored\nundoctrinal\nundoctrined\nundocumentary\nundocumented\nundocumentedness\nundodged\nundoer\nundoffed\nundog\nundogmatic\nundogmatical\nundoing\nundoingness\nundolled\nundolorous\nundomed\nundomestic\nundomesticate\nundomesticated\nundomestication\nundomicilable\nundomiciled\nundominated\nundomineering\nundominical\nundominoed\nundon\nundonated\nundonating\nundone\nundoneness\nundonkey\nundonnish\nundoomed\nundoped\nundormant\nundose\nundosed\nundoting\nundotted\nundouble\nundoubled\nundoubtable\nundoubtableness\nundoubtably\nundoubted\nundoubtedly\nundoubtedness\nundoubtful\nundoubtfully\nundoubtfulness\nundoubting\nundoubtingly\nundoubtingness\nundouched\nundoughty\nundovelike\nundoweled\nundowered\nundowned\nundowny\nundrab\nundraftable\nundrafted\nundrag\nundragoned\nundragooned\nundrainable\nundrained\nundramatic\nundramatical\nundramatically\nundramatizable\nundramatized\nundrape\nundraped\nundraperied\nundraw\nundrawable\nundrawn\nundreaded\nundreadful\nundreadfully\nundreading\nundreamed\nundreaming\nundreamlike\nundreamt\nundreamy\nundredged\nundreggy\nundrenched\nundress\nundressed\nundried\nundrillable\nundrilled\nundrinkable\nundrinkableness\nundrinkably\nundrinking\nundripping\nundrivable\nundrivableness\nundriven\nundronelike\nundrooping\nundropped\nundropsical\nundrossy\nundrowned\nundrubbed\nundrugged\nundrunk\nundrunken\nundry\nundryable\nundrying\nundualize\nundub\nundubbed\nundubitable\nundubitably\nunducal\nunduchess\nundue\nunduelling\nundueness\nundug\nunduke\nundulant\nundular\nundularly\nundulatance\nundulate\nundulated\nundulately\nundulating\nundulatingly\nundulation\nundulationist\nundulative\nundulatory\nundull\nundulled\nundullness\nunduloid\nundulose\nundulous\nunduly\nundumped\nunduncelike\nundunged\nundupable\nunduped\nunduplicability\nunduplicable\nunduplicity\nundurable\nundurableness\nundurably\nundust\nundusted\nunduteous\nundutiable\nundutiful\nundutifully\nundutifulness\nunduty\nundwarfed\nundwelt\nundwindling\nundy\nundye\nundyeable\nundyed\nundying\nundyingly\nundyingness\nuneager\nuneagerly\nuneagerness\nuneagled\nunearly\nunearned\nunearnest\nunearth\nunearthed\nunearthliness\nunearthly\nunease\nuneaseful\nuneasefulness\nuneasily\nuneasiness\nuneastern\nuneasy\nuneatable\nuneatableness\nuneaten\nuneath\nuneating\nunebbed\nunebbing\nunebriate\nuneccentric\nunecclesiastical\nunechoed\nunechoing\nuneclectic\nuneclipsed\nuneconomic\nuneconomical\nuneconomically\nuneconomicalness\nuneconomizing\nunecstatic\nunedge\nunedged\nunedible\nunedibleness\nunedibly\nunedified\nunedifying\nuneditable\nunedited\nuneducable\nuneducableness\nuneducably\nuneducate\nuneducated\nuneducatedly\nuneducatedness\nuneducative\nuneduced\nuneffaceable\nuneffaceably\nuneffaced\nuneffected\nuneffectible\nuneffective\nuneffectless\nuneffectual\nuneffectually\nuneffectualness\nuneffectuated\nuneffeminate\nuneffeminated\nuneffervescent\nuneffete\nunefficacious\nunefficient\nuneffigiated\nuneffused\nuneffusing\nuneffusive\nunegoist\nunegoistical\nunegoistically\nunegregious\nunejaculated\nunejected\nunelaborate\nunelaborated\nunelaborately\nunelaborateness\nunelapsed\nunelastic\nunelasticity\nunelated\nunelating\nunelbowed\nunelderly\nunelect\nunelectable\nunelected\nunelective\nunelectric\nunelectrical\nunelectrified\nunelectrify\nunelectrifying\nunelectrized\nunelectronic\nuneleemosynary\nunelegant\nunelegantly\nunelegantness\nunelemental\nunelementary\nunelevated\nunelicited\nunelided\nunelidible\nuneligibility\nuneligible\nuneligibly\nuneliminated\nunelongated\nuneloped\nuneloping\nuneloquent\nuneloquently\nunelucidated\nunelucidating\nuneluded\nunelusive\nunemaciated\nunemancipable\nunemancipated\nunemasculated\nunembalmed\nunembanked\nunembarrassed\nunembarrassedly\nunembarrassedness\nunembarrassing\nunembarrassment\nunembased\nunembattled\nunembayed\nunembellished\nunembezzled\nunembittered\nunemblazoned\nunembodied\nunembodiment\nunembossed\nunembowelled\nunembowered\nunembraceable\nunembraced\nunembroidered\nunembroiled\nunembryonic\nunemendable\nunemended\nunemerged\nunemerging\nunemigrating\nuneminent\nuneminently\nunemitted\nunemolumentary\nunemolumented\nunemotional\nunemotionalism\nunemotionally\nunemotionalness\nunemotioned\nunempaneled\nunemphatic\nunemphatical\nunemphatically\nunempirical\nunempirically\nunemploy\nunemployability\nunemployable\nunemployableness\nunemployably\nunemployed\nunemployment\nunempoisoned\nunempowered\nunempt\nunemptiable\nunemptied\nunempty\nunemulative\nunemulous\nunemulsified\nunenabled\nunenacted\nunenameled\nunenamored\nunencamped\nunenchafed\nunenchant\nunenchanted\nunencircled\nunenclosed\nunencompassed\nunencored\nunencounterable\nunencountered\nunencouraged\nunencouraging\nunencroached\nunencroaching\nunencumber\nunencumbered\nunencumberedly\nunencumberedness\nunencumbering\nunencysted\nunendable\nunendamaged\nunendangered\nunendeared\nunendeavored\nunended\nunending\nunendingly\nunendingness\nunendorsable\nunendorsed\nunendowed\nunendowing\nunendued\nunendurability\nunendurable\nunendurably\nunendured\nunenduring\nunenduringly\nunenergetic\nunenergized\nunenervated\nunenfeebled\nunenfiladed\nunenforceable\nunenforced\nunenforcedly\nunenforcedness\nunenforcibility\nunenfranchised\nunengaged\nunengaging\nunengendered\nunengineered\nunenglish\nunengraved\nunengraven\nunengrossed\nunenhanced\nunenjoined\nunenjoyable\nunenjoyed\nunenjoying\nunenjoyingly\nunenkindled\nunenlarged\nunenlightened\nunenlightening\nunenlisted\nunenlivened\nunenlivening\nunennobled\nunennobling\nunenounced\nunenquired\nunenquiring\nunenraged\nunenraptured\nunenrichable\nunenrichableness\nunenriched\nunenriching\nunenrobed\nunenrolled\nunenshrined\nunenslave\nunenslaved\nunensnared\nunensouled\nunensured\nunentailed\nunentangle\nunentangleable\nunentangled\nunentanglement\nunentangler\nunenterable\nunentered\nunentering\nunenterprise\nunenterprised\nunenterprising\nunenterprisingly\nunenterprisingness\nunentertainable\nunentertained\nunentertaining\nunentertainingly\nunentertainingness\nunenthralled\nunenthralling\nunenthroned\nunenthusiasm\nunenthusiastic\nunenthusiastically\nunenticed\nunenticing\nunentire\nunentitled\nunentombed\nunentomological\nunentrance\nunentranced\nunentrapped\nunentreated\nunentreating\nunentrenched\nunentwined\nunenumerable\nunenumerated\nunenveloped\nunenvenomed\nunenviable\nunenviably\nunenvied\nunenviedly\nunenvious\nunenviously\nunenvironed\nunenvying\nunenwoven\nunepauleted\nunephemeral\nunepic\nunepicurean\nunepigrammatic\nunepilogued\nunepiscopal\nunepiscopally\nunepistolary\nunepitaphed\nunepithelial\nunepitomized\nunequable\nunequableness\nunequably\nunequal\nunequalable\nunequaled\nunequality\nunequalize\nunequalized\nunequally\nunequalness\nunequated\nunequatorial\nunequestrian\nunequiangular\nunequiaxed\nunequilateral\nunequilibrated\nunequine\nunequipped\nunequitable\nunequitableness\nunequitably\nunequivalent\nunequivalve\nunequivalved\nunequivocal\nunequivocally\nunequivocalness\nuneradicable\nuneradicated\nunerasable\nunerased\nunerasing\nunerect\nunerected\nunermined\nuneroded\nunerrable\nunerrableness\nunerrably\nunerrancy\nunerrant\nunerratic\nunerring\nunerringly\nunerringness\nunerroneous\nunerroneously\nunerudite\nunerupted\nuneruptive\nunescaladed\nunescalloped\nunescapable\nunescapableness\nunescapably\nunescaped\nunescheated\nuneschewable\nuneschewably\nuneschewed\nUnesco\nunescorted\nunescutcheoned\nunesoteric\nunespied\nunespousable\nunespoused\nunessayed\nunessence\nunessential\nunessentially\nunessentialness\nunestablish\nunestablishable\nunestablished\nunestablishment\nunesteemed\nunestimable\nunestimableness\nunestimably\nunestimated\nunestopped\nunestranged\nunetched\nuneternal\nuneternized\nunethereal\nunethic\nunethical\nunethically\nunethicalness\nunethnological\nunethylated\nunetymological\nunetymologizable\nuneucharistical\nuneugenic\nuneulogized\nuneuphemistical\nuneuphonic\nuneuphonious\nuneuphoniously\nuneuphoniousness\nunevacuated\nunevadable\nunevaded\nunevaluated\nunevanescent\nunevangelic\nunevangelical\nunevangelized\nunevaporate\nunevaporated\nunevasive\nuneven\nunevenly\nunevenness\nuneventful\nuneventfully\nuneventfulness\nuneverted\nunevicted\nunevidenced\nunevident\nunevidential\nunevil\nunevinced\nunevirated\nuneviscerated\nunevitable\nunevitably\nunevokable\nunevoked\nunevolutionary\nunevolved\nunexacerbated\nunexact\nunexacted\nunexactedly\nunexacting\nunexactingly\nunexactly\nunexactness\nunexaggerable\nunexaggerated\nunexaggerating\nunexalted\nunexaminable\nunexamined\nunexamining\nunexampled\nunexampledness\nunexasperated\nunexasperating\nunexcavated\nunexceedable\nunexceeded\nunexcelled\nunexcellent\nunexcelling\nunexceptable\nunexcepted\nunexcepting\nunexceptionability\nunexceptionable\nunexceptionableness\nunexceptionably\nunexceptional\nunexceptionally\nunexceptionalness\nunexceptive\nunexcerpted\nunexcessive\nunexchangeable\nunexchangeableness\nunexchanged\nunexcised\nunexcitability\nunexcitable\nunexcited\nunexciting\nunexclaiming\nunexcludable\nunexcluded\nunexcluding\nunexclusive\nunexclusively\nunexclusiveness\nunexcogitable\nunexcogitated\nunexcommunicated\nunexcoriated\nunexcorticated\nunexcrescent\nunexcreted\nunexcruciating\nunexculpable\nunexculpably\nunexculpated\nunexcursive\nunexcusable\nunexcusableness\nunexcusably\nunexcused\nunexcusedly\nunexcusedness\nunexcusing\nunexecrated\nunexecutable\nunexecuted\nunexecuting\nunexecutorial\nunexemplary\nunexemplifiable\nunexemplified\nunexempt\nunexempted\nunexemptible\nunexempting\nunexercisable\nunexercise\nunexercised\nunexerted\nunexhalable\nunexhaled\nunexhausted\nunexhaustedly\nunexhaustedness\nunexhaustible\nunexhaustibleness\nunexhaustibly\nunexhaustion\nunexhaustive\nunexhaustiveness\nunexhibitable\nunexhibitableness\nunexhibited\nunexhilarated\nunexhilarating\nunexhorted\nunexhumed\nunexigent\nunexilable\nunexiled\nunexistence\nunexistent\nunexisting\nunexonerable\nunexonerated\nunexorable\nunexorableness\nunexorbitant\nunexorcisable\nunexorcisably\nunexorcised\nunexotic\nunexpandable\nunexpanded\nunexpanding\nunexpansive\nunexpectable\nunexpectant\nunexpected\nunexpectedly\nunexpectedness\nunexpecting\nunexpectingly\nunexpectorated\nunexpedient\nunexpeditated\nunexpedited\nunexpeditious\nunexpelled\nunexpendable\nunexpended\nunexpensive\nunexpensively\nunexpensiveness\nunexperience\nunexperienced\nunexperiencedness\nunexperient\nunexperiential\nunexperimental\nunexperimented\nunexpert\nunexpertly\nunexpertness\nunexpiable\nunexpiated\nunexpired\nunexpiring\nunexplainable\nunexplainableness\nunexplainably\nunexplained\nunexplainedly\nunexplainedness\nunexplaining\nunexplanatory\nunexplicable\nunexplicableness\nunexplicably\nunexplicated\nunexplicit\nunexplicitly\nunexplicitness\nunexploded\nunexploitation\nunexploited\nunexplorable\nunexplorative\nunexplored\nunexplosive\nunexportable\nunexported\nunexporting\nunexposable\nunexposed\nunexpostulating\nunexpoundable\nunexpounded\nunexpress\nunexpressable\nunexpressableness\nunexpressably\nunexpressed\nunexpressedly\nunexpressible\nunexpressibleness\nunexpressibly\nunexpressive\nunexpressively\nunexpressiveness\nunexpressly\nunexpropriable\nunexpropriated\nunexpugnable\nunexpunged\nunexpurgated\nunexpurgatedly\nunexpurgatedness\nunextended\nunextendedly\nunextendedness\nunextendible\nunextensible\nunextenuable\nunextenuated\nunextenuating\nunexterminable\nunexterminated\nunexternal\nunexternality\nunexterritoriality\nunextinct\nunextinctness\nunextinguishable\nunextinguishableness\nunextinguishably\nunextinguished\nunextirpated\nunextolled\nunextortable\nunextorted\nunextractable\nunextracted\nunextradited\nunextraneous\nunextraordinary\nunextravagance\nunextravagant\nunextravagating\nunextravasated\nunextreme\nunextricable\nunextricated\nunextrinsic\nunextruded\nunexuberant\nunexuded\nunexultant\nuneye\nuneyeable\nuneyed\nunfabled\nunfabling\nunfabricated\nunfabulous\nunfacaded\nunface\nunfaceable\nunfaced\nunfaceted\nunfacetious\nunfacile\nunfacilitated\nunfact\nunfactional\nunfactious\nunfactitious\nunfactorable\nunfactored\nunfactual\nunfadable\nunfaded\nunfading\nunfadingly\nunfadingness\nunfagged\nunfagoted\nunfailable\nunfailableness\nunfailably\nunfailed\nunfailing\nunfailingly\nunfailingness\nunfain\nunfaint\nunfainting\nunfaintly\nunfair\nunfairly\nunfairminded\nunfairness\nunfairylike\nunfaith\nunfaithful\nunfaithfully\nunfaithfulness\nunfaked\nunfallacious\nunfallaciously\nunfallen\nunfallenness\nunfallible\nunfallibleness\nunfallibly\nunfalling\nunfallowed\nunfalse\nunfalsifiable\nunfalsified\nunfalsifiedness\nunfalsity\nunfaltering\nunfalteringly\nunfamed\nunfamiliar\nunfamiliarity\nunfamiliarized\nunfamiliarly\nunfanatical\nunfanciable\nunfancied\nunfanciful\nunfancy\nunfanged\nunfanned\nunfantastic\nunfantastical\nunfantastically\nunfar\nunfarced\nunfarcical\nunfarewelled\nunfarmed\nunfarming\nunfarrowed\nunfarsighted\nunfasciated\nunfascinate\nunfascinated\nunfascinating\nunfashion\nunfashionable\nunfashionableness\nunfashionably\nunfashioned\nunfast\nunfasten\nunfastenable\nunfastened\nunfastener\nunfastidious\nunfastidiously\nunfastidiousness\nunfasting\nunfather\nunfathered\nunfatherlike\nunfatherliness\nunfatherly\nunfathomability\nunfathomable\nunfathomableness\nunfathomably\nunfathomed\nunfatigue\nunfatigueable\nunfatigued\nunfatiguing\nunfattable\nunfatted\nunfatten\nunfauceted\nunfaultfinding\nunfaulty\nunfavorable\nunfavorableness\nunfavorably\nunfavored\nunfavoring\nunfavorite\nunfawning\nunfealty\nunfeared\nunfearful\nunfearfully\nunfearing\nunfearingly\nunfeary\nunfeasable\nunfeasableness\nunfeasably\nunfeasibility\nunfeasible\nunfeasibleness\nunfeasibly\nunfeasted\nunfeather\nunfeathered\nunfeatured\nunfecund\nunfecundated\nunfed\nunfederal\nunfederated\nunfeeble\nunfeed\nunfeedable\nunfeeding\nunfeeing\nunfeelable\nunfeeling\nunfeelingly\nunfeelingness\nunfeignable\nunfeignableness\nunfeignably\nunfeigned\nunfeignedly\nunfeignedness\nunfeigning\nunfeigningly\nunfeigningness\nunfele\nunfelicitated\nunfelicitating\nunfelicitous\nunfelicitously\nunfelicitousness\nunfeline\nunfellable\nunfelled\nunfellied\nunfellow\nunfellowed\nunfellowlike\nunfellowly\nunfellowshiped\nunfelon\nunfelonious\nunfeloniously\nunfelony\nunfelt\nunfelted\nunfemale\nunfeminine\nunfemininely\nunfeminineness\nunfemininity\nunfeminist\nunfeminize\nunfence\nunfenced\nunfendered\nunfenestrated\nunfeoffed\nunfermentable\nunfermentableness\nunfermentably\nunfermented\nunfermenting\nunfernlike\nunferocious\nunferreted\nunferried\nunfertile\nunfertileness\nunfertility\nunfertilizable\nunfertilized\nunfervent\nunfervid\nunfester\nunfestered\nunfestival\nunfestive\nunfestively\nunfestooned\nunfetchable\nunfetched\nunfeted\nunfetter\nunfettered\nunfettled\nunfeudal\nunfeudalize\nunfeudalized\nunfeued\nunfevered\nunfeverish\nunfew\nunfibbed\nunfibbing\nunfiber\nunfibered\nunfibrous\nunfickle\nunfictitious\nunfidelity\nunfidgeting\nunfielded\nunfiend\nunfiendlike\nunfierce\nunfiery\nunfight\nunfightable\nunfighting\nunfigurable\nunfigurative\nunfigured\nunfilamentous\nunfilched\nunfile\nunfiled\nunfilial\nunfilially\nunfilialness\nunfill\nunfillable\nunfilled\nunfilleted\nunfilling\nunfilm\nunfilmed\nunfiltered\nunfiltrated\nunfinable\nunfinancial\nunfine\nunfined\nunfinessed\nunfingered\nunfinical\nunfinish\nunfinishable\nunfinished\nunfinishedly\nunfinishedness\nunfinite\nunfired\nunfireproof\nunfiring\nunfirm\nunfirmamented\nunfirmly\nunfirmness\nunfiscal\nunfishable\nunfished\nunfishing\nunfishlike\nunfissile\nunfistulous\nunfit\nunfitly\nunfitness\nunfittable\nunfitted\nunfittedness\nunfitten\nunfitting\nunfittingly\nunfittingness\nunfitty\nunfix\nunfixable\nunfixated\nunfixed\nunfixedness\nunfixing\nunfixity\nunflag\nunflagged\nunflagging\nunflaggingly\nunflaggingness\nunflagitious\nunflagrant\nunflaky\nunflamboyant\nunflaming\nunflanged\nunflank\nunflanked\nunflapping\nunflashing\nunflat\nunflated\nunflattened\nunflatterable\nunflattered\nunflattering\nunflatteringly\nunflaunted\nunflavored\nunflawed\nunflayed\nunflead\nunflecked\nunfledge\nunfledged\nunfledgedness\nunfleece\nunfleeced\nunfleeing\nunfleeting\nunflesh\nunfleshed\nunfleshliness\nunfleshly\nunfleshy\nunfletched\nunflexed\nunflexible\nunflexibleness\nunflexibly\nunflickering\nunflickeringly\nunflighty\nunflinching\nunflinchingly\nunflinchingness\nunflintify\nunflippant\nunflirtatious\nunflitched\nunfloatable\nunfloating\nunflock\nunfloggable\nunflogged\nunflooded\nunfloor\nunfloored\nunflorid\nunflossy\nunflounced\nunfloured\nunflourished\nunflourishing\nunflouted\nunflower\nunflowered\nunflowing\nunflown\nunfluctuating\nunfluent\nunfluid\nunfluked\nunflunked\nunfluorescent\nunflurried\nunflush\nunflushed\nunflustered\nunfluted\nunflutterable\nunfluttered\nunfluttering\nunfluvial\nunfluxile\nunflying\nunfoaled\nunfoaming\nunfocused\nunfoggy\nunfoilable\nunfoiled\nunfoisted\nunfold\nunfoldable\nunfolded\nunfolder\nunfolding\nunfoldment\nunfoldure\nunfoliaged\nunfoliated\nunfollowable\nunfollowed\nunfollowing\nunfomented\nunfond\nunfondled\nunfondness\nunfoodful\nunfool\nunfoolable\nunfooled\nunfooling\nunfoolish\nunfooted\nunfootsore\nunfoppish\nunforaged\nunforbade\nunforbearance\nunforbearing\nunforbid\nunforbidden\nunforbiddenly\nunforbiddenness\nunforbidding\nunforceable\nunforced\nunforcedly\nunforcedness\nunforceful\nunforcible\nunforcibleness\nunforcibly\nunfordable\nunfordableness\nunforded\nunforeboded\nunforeboding\nunforecasted\nunforegone\nunforeign\nunforeknowable\nunforeknown\nunforensic\nunforeordained\nunforesee\nunforeseeable\nunforeseeableness\nunforeseeably\nunforeseeing\nunforeseeingly\nunforeseen\nunforeseenly\nunforeseenness\nunforeshortened\nunforest\nunforestallable\nunforestalled\nunforested\nunforetellable\nunforethought\nunforethoughtful\nunforetold\nunforewarned\nunforewarnedness\nunforfeit\nunforfeitable\nunforfeited\nunforgeability\nunforgeable\nunforged\nunforget\nunforgetful\nunforgettable\nunforgettableness\nunforgettably\nunforgetting\nunforgettingly\nunforgivable\nunforgivableness\nunforgivably\nunforgiven\nunforgiveness\nunforgiver\nunforgiving\nunforgivingly\nunforgivingness\nunforgone\nunforgot\nunforgotten\nunfork\nunforked\nunforkedness\nunforlorn\nunform\nunformal\nunformality\nunformalized\nunformally\nunformalness\nunformative\nunformed\nunformidable\nunformulable\nunformularizable\nunformularize\nunformulated\nunformulistic\nunforsaken\nunforsaking\nunforsook\nunforsworn\nunforthright\nunfortifiable\nunfortified\nunfortify\nunfortuitous\nunfortunate\nunfortunately\nunfortunateness\nunfortune\nunforward\nunforwarded\nunfossiliferous\nunfossilized\nunfostered\nunfought\nunfoughten\nunfoul\nunfoulable\nunfouled\nunfound\nunfounded\nunfoundedly\nunfoundedness\nunfoundered\nunfountained\nunfowllike\nunfoxy\nunfractured\nunfragrance\nunfragrant\nunfragrantly\nunfrail\nunframable\nunframableness\nunframably\nunframe\nunframed\nunfranchised\nunfrank\nunfrankable\nunfranked\nunfrankly\nunfrankness\nunfraternal\nunfraternizing\nunfraudulent\nunfraught\nunfrayed\nunfreckled\nunfree\nunfreed\nunfreedom\nunfreehold\nunfreely\nunfreeman\nunfreeness\nunfreezable\nunfreeze\nunfreezing\nunfreighted\nunfrenchified\nunfrenzied\nunfrequency\nunfrequent\nunfrequented\nunfrequentedness\nunfrequently\nunfrequentness\nunfret\nunfretful\nunfretting\nunfriable\nunfriarlike\nunfricative\nunfrictioned\nunfried\nunfriend\nunfriended\nunfriendedness\nunfriending\nunfriendlike\nunfriendlily\nunfriendliness\nunfriendly\nunfriendship\nunfrighted\nunfrightenable\nunfrightened\nunfrightenedness\nunfrightful\nunfrigid\nunfrill\nunfrilled\nunfringe\nunfringed\nunfrisky\nunfrivolous\nunfrizz\nunfrizzled\nunfrizzy\nunfrock\nunfrocked\nunfroglike\nunfrolicsome\nunfronted\nunfrost\nunfrosted\nunfrosty\nunfrounced\nunfroward\nunfrowardly\nunfrowning\nunfroze\nunfrozen\nunfructed\nunfructified\nunfructify\nunfructuous\nunfructuously\nunfrugal\nunfrugally\nunfrugalness\nunfruitful\nunfruitfully\nunfruitfulness\nunfruity\nunfrustrable\nunfrustrably\nunfrustratable\nunfrustrated\nunfrutuosity\nunfuddled\nunfueled\nunfulfill\nunfulfillable\nunfulfilled\nunfulfilling\nunfulfillment\nunfull\nunfulled\nunfully\nunfulminated\nunfulsome\nunfumbled\nunfumbling\nunfumed\nunfumigated\nunfunctional\nunfundamental\nunfunded\nunfunnily\nunfunniness\nunfunny\nunfur\nunfurbelowed\nunfurbished\nunfurcate\nunfurious\nunfurl\nunfurlable\nunfurnish\nunfurnished\nunfurnishedness\nunfurnitured\nunfurred\nunfurrow\nunfurrowable\nunfurrowed\nunfurthersome\nunfused\nunfusible\nunfusibleness\nunfusibly\nunfussed\nunfussing\nunfussy\nunfutile\nunfuturistic\nungabled\nungag\nungaged\nungagged\nungain\nungainable\nungained\nungainful\nungainfully\nungainfulness\nungaining\nungainlike\nungainliness\nungainly\nungainness\nungainsaid\nungainsayable\nungainsayably\nungainsaying\nungainsome\nungainsomely\nungaite\nungallant\nungallantly\nungallantness\nungalling\nungalvanized\nungamboling\nungamelike\nunganged\nungangrened\nungarbed\nungarbled\nungardened\nungargled\nungarland\nungarlanded\nungarment\nungarmented\nungarnered\nungarnish\nungarnished\nungaro\nungarrisoned\nungarter\nungartered\nungashed\nungassed\nungastric\nungathered\nungaudy\nungauged\nungauntlet\nungauntleted\nungazetted\nungazing\nungear\nungeared\nungelatinizable\nungelatinized\nungelded\nungelt\nungeminated\nungenerable\nungeneral\nungeneraled\nungeneralized\nungenerate\nungenerated\nungenerative\nungeneric\nungenerical\nungenerosity\nungenerous\nungenerously\nungenerousness\nungenial\nungeniality\nungenially\nungenialness\nungenitured\nungenius\nungenteel\nungenteelly\nungenteelness\nungentile\nungentility\nungentilize\nungentle\nungentled\nungentleman\nungentlemanize\nungentlemanlike\nungentlemanlikeness\nungentlemanliness\nungentlemanly\nungentleness\nungentlewomanlike\nungently\nungenuine\nungenuinely\nungenuineness\nungeodetical\nungeographic\nungeographical\nungeographically\nungeological\nungeometric\nungeometrical\nungeometrically\nungeometricalness\nungerminated\nungerminating\nungermlike\nungerontic\nungesting\nungesturing\nunget\nungettable\nunghostlike\nunghostly\nungiant\nungibbet\nungiddy\nungifted\nungiftedness\nungild\nungilded\nungill\nungilt\nungingled\nunginned\nungird\nungirded\nungirdle\nungirdled\nungirlish\nungirt\nungirth\nungirthed\nungive\nungiveable\nungiven\nungiving\nungka\nunglaciated\nunglad\nungladden\nungladdened\nungladly\nungladness\nungladsome\nunglamorous\nunglandular\nunglassed\nunglaze\nunglazed\nungleaned\nunglee\nungleeful\nunglimpsed\nunglistening\nunglittering\nungloating\nunglobe\nunglobular\nungloom\nungloomed\nungloomy\nunglorified\nunglorify\nunglorifying\nunglorious\nungloriously\nungloriousness\nunglory\nunglosed\nungloss\nunglossaried\nunglossed\nunglossily\nunglossiness\nunglossy\nunglove\nungloved\nunglowing\nunglozed\nunglue\nunglued\nunglutinate\nunglutted\nungluttonous\nungnarred\nungnaw\nungnawn\nungnostic\nungoaded\nungoatlike\nungod\nungoddess\nungodlike\nungodlily\nungodliness\nungodly\nungodmothered\nungold\nungolden\nungone\nungood\nungoodliness\nungoodly\nungored\nungorge\nungorged\nungorgeous\nungospel\nungospelized\nungospelled\nungospellike\nungossiping\nungot\nungothic\nungotten\nungouged\nungouty\nungovernable\nungovernableness\nungovernably\nungoverned\nungovernedness\nungoverning\nungown\nungowned\nungrace\nungraced\nungraceful\nungracefully\nungracefulness\nungracious\nungraciously\nungraciousness\nungradated\nungraded\nungradual\nungradually\nungraduated\nungraduating\nungraft\nungrafted\nungrain\nungrainable\nungrained\nungrammar\nungrammared\nungrammatic\nungrammatical\nungrammatically\nungrammaticalness\nungrammaticism\nungrand\nungrantable\nungranted\nungranulated\nungraphic\nungraphitized\nungrapple\nungrappled\nungrappler\nungrasp\nungraspable\nungrasped\nungrasping\nungrassed\nungrassy\nungrated\nungrateful\nungratefully\nungratefulness\nungratifiable\nungratified\nungratifying\nungrating\nungrave\nungraved\nungraveled\nungravelly\nungravely\nungraven\nungrayed\nungrazed\nungreased\nungreat\nungreatly\nungreatness\nungreeable\nungreedy\nungreen\nungreenable\nungreened\nungreeted\nungregarious\nungrieve\nungrieved\nungrieving\nungrilled\nungrimed\nungrindable\nungrip\nungripe\nungrizzled\nungroaning\nungroined\nungroomed\nungrooved\nungropeable\nungross\nungrotesque\nunground\nungroundable\nungroundably\nungrounded\nungroundedly\nungroundedness\nungroupable\nungrouped\nungrow\nungrowing\nungrown\nungrubbed\nungrudged\nungrudging\nungrudgingly\nungrudgingness\nungruesome\nungruff\nungrumbling\nungual\nunguaranteed\nunguard\nunguardable\nunguarded\nunguardedly\nunguardedness\nungueal\nunguent\nunguentaria\nunguentarium\nunguentary\nunguentiferous\nunguentous\nunguentum\nunguerdoned\nungues\nunguessable\nunguessableness\nunguessed\nunguical\nunguicorn\nunguicular\nUnguiculata\nunguiculate\nunguiculated\nunguidable\nunguidableness\nunguidably\nunguided\nunguidedly\nunguiferous\nunguiform\nunguiled\nunguileful\nunguilefully\nunguilefulness\nunguillotined\nunguiltily\nunguiltiness\nunguilty\nunguinal\nunguinous\nunguirostral\nunguis\nungula\nungulae\nungular\nUngulata\nungulate\nungulated\nunguled\nunguligrade\nungull\nungulous\nungulp\nungum\nungummed\nungushing\nungutted\nunguttural\nunguyed\nunguzzled\nungymnastic\nungypsylike\nungyve\nungyved\nunhabit\nunhabitable\nunhabitableness\nunhabited\nunhabitual\nunhabitually\nunhabituate\nunhabituated\nunhacked\nunhackled\nunhackneyed\nunhackneyedness\nunhad\nunhaft\nunhafted\nunhaggled\nunhaggling\nunhailable\nunhailed\nunhair\nunhaired\nunhairer\nunhairily\nunhairiness\nunhairing\nunhairy\nunhallooed\nunhallow\nunhallowed\nunhallowedness\nunhaloed\nunhalsed\nunhalted\nunhalter\nunhaltered\nunhalting\nunhalved\nunhammered\nunhamper\nunhampered\nunhand\nunhandcuff\nunhandcuffed\nunhandicapped\nunhandily\nunhandiness\nunhandled\nunhandseled\nunhandsome\nunhandsomely\nunhandsomeness\nunhandy\nunhang\nunhanged\nunhap\nunhappen\nunhappily\nunhappiness\nunhappy\nunharangued\nunharassed\nunharbor\nunharbored\nunhard\nunharden\nunhardenable\nunhardened\nunhardihood\nunhardily\nunhardiness\nunhardness\nunhardy\nunharked\nunharmable\nunharmed\nunharmful\nunharmfully\nunharming\nunharmonic\nunharmonical\nunharmonious\nunharmoniously\nunharmoniousness\nunharmonize\nunharmonized\nunharmony\nunharness\nunharnessed\nunharped\nunharried\nunharrowed\nunharsh\nunharvested\nunhashed\nunhasp\nunhasped\nunhaste\nunhasted\nunhastened\nunhastily\nunhastiness\nunhasting\nunhasty\nunhat\nunhatchability\nunhatchable\nunhatched\nunhatcheled\nunhate\nunhated\nunhateful\nunhating\nunhatingly\nunhatted\nunhauled\nunhaunt\nunhaunted\nunhave\nunhawked\nunhayed\nunhazarded\nunhazarding\nunhazardous\nunhazardousness\nunhazed\nunhead\nunheaded\nunheader\nunheady\nunheal\nunhealable\nunhealableness\nunhealably\nunhealed\nunhealing\nunhealth\nunhealthful\nunhealthfully\nunhealthfulness\nunhealthily\nunhealthiness\nunhealthsome\nunhealthsomeness\nunhealthy\nunheaped\nunhearable\nunheard\nunhearing\nunhearsed\nunheart\nunhearten\nunheartsome\nunhearty\nunheatable\nunheated\nunheathen\nunheaved\nunheaven\nunheavenly\nunheavily\nunheaviness\nunheavy\nunhectored\nunhedge\nunhedged\nunheed\nunheeded\nunheededly\nunheedful\nunheedfully\nunheedfulness\nunheeding\nunheedingly\nunheedy\nunheeled\nunheelpieced\nunhefted\nunheightened\nunheired\nunheld\nunhele\nunheler\nunhelm\nunhelmed\nunhelmet\nunhelmeted\nunhelpable\nunhelpableness\nunhelped\nunhelpful\nunhelpfully\nunhelpfulness\nunhelping\nunhelved\nunhemmed\nunheppen\nunheralded\nunheraldic\nunherd\nunherded\nunhereditary\nunheretical\nunheritable\nunhermetic\nunhero\nunheroic\nunheroical\nunheroically\nunheroism\nunheroize\nunherolike\nunhesitant\nunhesitating\nunhesitatingly\nunhesitatingness\nunheuristic\nunhewable\nunhewed\nunhewn\nunhex\nunhid\nunhidable\nunhidableness\nunhidably\nunhidated\nunhidden\nunhide\nunhidebound\nunhideous\nunhieratic\nunhigh\nunhilarious\nunhinderable\nunhinderably\nunhindered\nunhindering\nunhinge\nunhingement\nunhinted\nunhipped\nunhired\nunhissed\nunhistoric\nunhistorical\nunhistorically\nunhistory\nunhistrionic\nunhit\nunhitch\nunhitched\nunhittable\nunhive\nunhoard\nunhoarded\nunhoarding\nunhoary\nunhoaxed\nunhobble\nunhocked\nunhoed\nunhogged\nunhoist\nunhoisted\nunhold\nunholiday\nunholily\nunholiness\nunhollow\nunhollowed\nunholy\nunhome\nunhomelike\nunhomelikeness\nunhomeliness\nunhomely\nunhomish\nunhomogeneity\nunhomogeneous\nunhomogeneously\nunhomologous\nunhoned\nunhonest\nunhonestly\nunhoneyed\nunhonied\nunhonorable\nunhonorably\nunhonored\nunhonoured\nunhood\nunhooded\nunhoodwink\nunhoodwinked\nunhoofed\nunhook\nunhooked\nunhoop\nunhooped\nunhooper\nunhooted\nunhoped\nunhopedly\nunhopedness\nunhopeful\nunhopefully\nunhopefulness\nunhoping\nunhopingly\nunhopped\nunhoppled\nunhorizoned\nunhorizontal\nunhorned\nunhorny\nunhoroscopic\nunhorse\nunhose\nunhosed\nunhospitable\nunhospitableness\nunhospitably\nunhostile\nunhostilely\nunhostileness\nunhostility\nunhot\nunhoundlike\nunhouse\nunhoused\nunhouseled\nunhouselike\nunhousewifely\nunhuddle\nunhugged\nunhull\nunhulled\nunhuman\nunhumanize\nunhumanized\nunhumanly\nunhumanness\nunhumble\nunhumbled\nunhumbledness\nunhumbleness\nunhumbly\nunhumbugged\nunhumid\nunhumiliated\nunhumored\nunhumorous\nunhumorously\nunhumorousness\nunhumoured\nunhung\nunhuntable\nunhunted\nunhurdled\nunhurled\nunhurried\nunhurriedly\nunhurriedness\nunhurrying\nunhurryingly\nunhurt\nunhurted\nunhurtful\nunhurtfully\nunhurtfulness\nunhurting\nunhusbanded\nunhusbandly\nunhushable\nunhushed\nunhushing\nunhusk\nunhusked\nunhustled\nunhustling\nunhutched\nunhuzzaed\nunhydraulic\nunhydrolyzed\nunhygienic\nunhygienically\nunhygrometric\nunhymeneal\nunhymned\nunhyphenated\nunhyphened\nunhypnotic\nunhypnotizable\nunhypnotize\nunhypocritical\nunhypocritically\nunhypothecated\nunhypothetical\nunhysterical\nuniambic\nuniambically\nuniangulate\nuniarticular\nuniarticulate\nUniat\nuniat\nUniate\nuniate\nuniauriculate\nuniauriculated\nuniaxal\nuniaxally\nuniaxial\nuniaxially\nunibasal\nunibivalent\nunible\nunibracteate\nunibracteolate\nunibranchiate\nunicalcarate\nunicameral\nunicameralism\nunicameralist\nunicamerate\nunicapsular\nunicarinate\nunicarinated\nunice\nuniced\nunicell\nunicellate\nunicelled\nunicellular\nunicellularity\nunicentral\nunichord\nuniciliate\nunicism\nunicist\nunicity\nuniclinal\nunicolor\nunicolorate\nunicolored\nunicolorous\nuniconstant\nunicorn\nunicorneal\nunicornic\nunicornlike\nunicornous\nunicornuted\nunicostate\nunicotyledonous\nunicum\nunicursal\nunicursality\nunicursally\nunicuspid\nunicuspidate\nunicycle\nunicyclist\nunidactyl\nunidactyle\nunidactylous\nunideaed\nunideal\nunidealism\nunidealist\nunidealistic\nunidealized\nunidentate\nunidentated\nunidenticulate\nunidentifiable\nunidentifiableness\nunidentifiably\nunidentified\nunidentifiedly\nunidentifying\nunideographic\nunidextral\nunidextrality\nunidigitate\nunidimensional\nunidiomatic\nunidiomatically\nunidirect\nunidirected\nunidirection\nunidirectional\nunidle\nunidleness\nunidly\nunidolatrous\nunidolized\nunidyllic\nunie\nuniembryonate\nuniequivalent\nuniface\nunifaced\nunifacial\nunifactorial\nunifarious\nunifiable\nunific\nunification\nunificationist\nunificator\nunified\nunifiedly\nunifiedness\nunifier\nunifilar\nuniflagellate\nunifloral\nuniflorate\nuniflorous\nuniflow\nuniflowered\nunifocal\nunifoliar\nunifoliate\nunifoliolate\nUnifolium\nuniform\nuniformal\nuniformalization\nuniformalize\nuniformally\nuniformation\nuniformed\nuniformist\nuniformitarian\nuniformitarianism\nuniformity\nuniformization\nuniformize\nuniformless\nuniformly\nuniformness\nunify\nunigenesis\nunigenetic\nunigenist\nunigenistic\nunigenital\nunigeniture\nunigenous\nuniglandular\nuniglobular\nunignitable\nunignited\nunignitible\nunignominious\nunignorant\nunignored\nunigravida\nuniguttulate\nunijugate\nunijugous\nunilabiate\nunilabiated\nunilamellar\nunilamellate\nunilaminar\nunilaminate\nunilateral\nunilateralism\nunilateralist\nunilaterality\nunilateralization\nunilateralize\nunilaterally\nunilinear\nunilingual\nunilingualism\nuniliteral\nunilludedly\nunillumed\nunilluminated\nunilluminating\nunillumination\nunillumined\nunillusioned\nunillusory\nunillustrated\nunillustrative\nunillustrious\nunilobal\nunilobar\nunilobate\nunilobe\nunilobed\nunilobular\nunilocular\nunilocularity\nuniloculate\nunimacular\nunimaged\nunimaginable\nunimaginableness\nunimaginably\nunimaginary\nunimaginative\nunimaginatively\nunimaginativeness\nunimagine\nunimagined\nunimanual\nunimbanked\nunimbellished\nunimbezzled\nunimbibed\nunimbibing\nunimbittered\nunimbodied\nunimboldened\nunimbordered\nunimbosomed\nunimbowed\nunimbowered\nunimbroiled\nunimbrowned\nunimbrued\nunimbued\nunimedial\nunimitable\nunimitableness\nunimitably\nunimitated\nunimitating\nunimitative\nunimmaculate\nunimmanent\nunimmediate\nunimmerged\nunimmergible\nunimmersed\nunimmigrating\nunimmolated\nunimmortal\nunimmortalize\nunimmortalized\nunimmovable\nunimmured\nunimodal\nunimodality\nunimodular\nunimolecular\nunimolecularity\nunimpair\nunimpairable\nunimpaired\nunimpartable\nunimparted\nunimpartial\nunimpassionate\nunimpassioned\nunimpassionedly\nunimpassionedness\nunimpatient\nunimpawned\nunimpeachability\nunimpeachable\nunimpeachableness\nunimpeachably\nunimpeached\nunimpearled\nunimped\nunimpeded\nunimpededly\nunimpedible\nunimpedness\nunimpelled\nunimpenetrable\nunimperative\nunimperial\nunimperialistic\nunimperious\nunimpertinent\nunimpinging\nunimplanted\nunimplicable\nunimplicate\nunimplicated\nunimplicit\nunimplicitly\nunimplied\nunimplorable\nunimplored\nunimpoisoned\nunimportance\nunimportant\nunimportantly\nunimported\nunimporting\nunimportunate\nunimportunately\nunimportuned\nunimposed\nunimposedly\nunimposing\nunimpostrous\nunimpounded\nunimpoverished\nunimpowered\nunimprecated\nunimpregnable\nunimpregnate\nunimpregnated\nunimpressed\nunimpressibility\nunimpressible\nunimpressibleness\nunimpressibly\nunimpressionability\nunimpressionable\nunimpressive\nunimpressively\nunimpressiveness\nunimprinted\nunimprison\nunimprisonable\nunimprisoned\nunimpropriated\nunimprovable\nunimprovableness\nunimprovably\nunimproved\nunimprovedly\nunimprovedness\nunimprovement\nunimproving\nunimprovised\nunimpugnable\nunimpugned\nunimpulsive\nunimpurpled\nunimputable\nunimputed\nunimucronate\nunimultiplex\nunimuscular\nuninaugurated\nunincantoned\nunincarcerated\nunincarnate\nunincarnated\nunincensed\nuninchoative\nunincidental\nunincised\nunincisive\nunincited\nuninclinable\nuninclined\nuninclining\nuninclosed\nuninclosedness\nunincludable\nunincluded\nuninclusive\nuninclusiveness\nuninconvenienced\nunincorporate\nunincorporated\nunincorporatedly\nunincorporatedness\nunincreasable\nunincreased\nunincreasing\nunincubated\nuninculcated\nunincumbered\nunindebted\nunindebtedly\nunindebtedness\nunindemnified\nunindentable\nunindented\nunindentured\nunindexed\nunindicable\nunindicated\nunindicative\nunindictable\nunindicted\nunindifference\nunindifferency\nunindifferent\nunindifferently\nunindigent\nunindignant\nunindividual\nunindividualize\nunindividualized\nunindividuated\nunindorsed\nuninduced\nuninductive\nunindulged\nunindulgent\nunindulgently\nunindurated\nunindustrial\nunindustrialized\nunindustrious\nunindustriously\nunindwellable\nuninebriated\nuninebriating\nuninervate\nuninerved\nuninfallibility\nuninfallible\nuninfatuated\nuninfectable\nuninfected\nuninfectious\nuninfectiousness\nuninfeft\nuninferred\nuninfested\nuninfiltrated\nuninfinite\nuninfiniteness\nuninfixed\nuninflamed\nuninflammability\nuninflammable\nuninflated\nuninflected\nuninflectedness\nuninflicted\nuninfluenceable\nuninfluenced\nuninfluencing\nuninfluencive\nuninfluential\nuninfluentiality\nuninfolded\nuninformed\nuninforming\nuninfracted\nuninfringeable\nuninfringed\nuninfringible\nuninfuriated\nuninfused\nuningenious\nuningeniously\nuningeniousness\nuningenuity\nuningenuous\nuningenuously\nuningenuousness\nuningested\nuningrafted\nuningrained\nuninhabitability\nuninhabitable\nuninhabitableness\nuninhabitably\nuninhabited\nuninhabitedness\nuninhaled\nuninheritability\nuninheritable\nuninherited\nuninhibited\nuninhibitive\nuninhumed\nuninimical\nuniniquitous\nuninitialed\nuninitialled\nuninitiate\nuninitiated\nuninitiatedness\nuninitiation\nuninjectable\nuninjected\nuninjurable\nuninjured\nuninjuredness\nuninjuring\nuninjurious\nuninjuriously\nuninjuriousness\nuninked\nuninlaid\nuninn\nuninnate\nuninnocence\nuninnocent\nuninnocently\nuninnocuous\nuninnovating\nuninoculable\nuninoculated\nuninodal\nuninominal\nuninquired\nuninquiring\nuninquisitive\nuninquisitively\nuninquisitiveness\nuninquisitorial\nuninsane\nuninsatiable\nuninscribed\nuninserted\nuninshrined\nuninsinuated\nuninsistent\nuninsolvent\nuninspected\nuninspirable\nuninspired\nuninspiring\nuninspiringly\nuninspirited\nuninspissated\nuninstalled\nuninstanced\nuninstated\nuninstigated\nuninstilled\nuninstituted\nuninstructed\nuninstructedly\nuninstructedness\nuninstructible\nuninstructing\nuninstructive\nuninstructively\nuninstructiveness\nuninstrumental\nuninsular\nuninsulate\nuninsulated\nuninsultable\nuninsulted\nuninsulting\nuninsurability\nuninsurable\nuninsured\nunintegrated\nunintellective\nunintellectual\nunintellectualism\nunintellectuality\nunintellectually\nunintelligence\nunintelligent\nunintelligently\nunintelligentsia\nunintelligibility\nunintelligible\nunintelligibleness\nunintelligibly\nunintended\nunintendedly\nunintensive\nunintent\nunintentional\nunintentionality\nunintentionally\nunintentionalness\nunintently\nunintentness\nunintercalated\nunintercepted\nuninterchangeable\nuninterdicted\nuninterested\nuninterestedly\nuninterestedness\nuninteresting\nuninterestingly\nuninterestingness\nuninterferedwith\nuninterjected\nuninterlaced\nuninterlarded\nuninterleave\nuninterleaved\nuninterlined\nuninterlinked\nuninterlocked\nunintermarrying\nunintermediate\nunintermingled\nunintermission\nunintermissive\nunintermitted\nunintermittedly\nunintermittedness\nunintermittent\nunintermitting\nunintermittingly\nunintermittingness\nunintermixed\nuninternational\nuninterpleaded\nuninterpolated\nuninterposed\nuninterposing\nuninterpretable\nuninterpreted\nuninterred\nuninterrogable\nuninterrogated\nuninterrupted\nuninterruptedly\nuninterruptedness\nuninterruptible\nuninterruptibleness\nuninterrupting\nuninterruption\nunintersected\nuninterspersed\nunintervening\nuninterviewed\nunintervolved\nuninterwoven\nuninthroned\nunintimate\nunintimated\nunintimidated\nunintitled\nunintombed\nunintoned\nunintoxicated\nunintoxicatedness\nunintoxicating\nunintrenchable\nunintrenched\nunintricate\nunintrigued\nunintriguing\nunintroduced\nunintroducible\nunintroitive\nunintromitted\nunintrospective\nunintruded\nunintruding\nunintrusive\nunintrusively\nunintrusted\nunintuitive\nunintwined\nuninuclear\nuninucleate\nuninucleated\nuninundated\nuninured\nuninurned\nuninvadable\nuninvaded\nuninvaginated\nuninvalidated\nuninveighing\nuninveigled\nuninvented\nuninventful\nuninventibleness\nuninventive\nuninventively\nuninventiveness\nuninverted\nuninvested\nuninvestigable\nuninvestigated\nuninvestigating\nuninvestigative\nuninvidious\nuninvidiously\nuninvigorated\nuninvincible\nuninvite\nuninvited\nuninvitedly\nuninviting\nuninvoiced\nuninvoked\nuninvolved\nuninweaved\nuninwoven\nuninwrapped\nuninwreathed\nUnio\nunio\nuniocular\nunioid\nUniola\nunion\nunioned\nunionic\nunionid\nUnionidae\nunioniform\nunionism\nunionist\nunionistic\nunionization\nunionize\nunionoid\nunioval\nuniovular\nuniovulate\nunipara\nuniparental\nuniparient\nuniparous\nunipartite\nuniped\nunipeltate\nuniperiodic\nunipersonal\nunipersonalist\nunipersonality\nunipetalous\nuniphase\nuniphaser\nuniphonous\nuniplanar\nuniplicate\nunipod\nunipolar\nunipolarity\nuniporous\nunipotence\nunipotent\nunipotential\nunipulse\nuniquantic\nunique\nuniquely\nuniqueness\nuniquity\nuniradial\nuniradiate\nuniradiated\nuniradical\nuniramose\nuniramous\nunirascible\nunireme\nunirenic\nunirhyme\nuniridescent\nunironed\nunironical\nunirradiated\nunirrigated\nunirritable\nunirritant\nunirritated\nunirritatedly\nunirritating\nunisepalous\nuniseptate\nuniserial\nuniserially\nuniseriate\nuniseriately\nuniserrate\nuniserrulate\nunisexed\nunisexual\nunisexuality\nunisexually\nunisilicate\nunisoil\nunisolable\nunisolate\nunisolated\nunisomeric\nunisometrical\nunisomorphic\nunison\nunisonal\nunisonally\nunisonance\nunisonant\nunisonous\nunisotropic\nunisparker\nunispiculate\nunispinose\nunispiral\nunissuable\nunissued\nunistylist\nunisulcate\nunit\nunitage\nunital\nunitalicized\nUnitarian\nunitarian\nUnitarianism\nUnitarianize\nunitarily\nunitariness\nunitarism\nunitarist\nunitary\nunite\nuniteability\nuniteable\nuniteably\nunited\nunitedly\nunitedness\nunitemized\nunitentacular\nuniter\nuniting\nunitingly\nunition\nunitism\nunitistic\nunitive\nunitively\nunitiveness\nunitize\nunitooth\nunitrivalent\nunitrope\nunituberculate\nunitude\nunity\nuniunguiculate\nuniungulate\nunivalence\nunivalency\nunivalent\nunivalvate\nunivalve\nunivalvular\nunivariant\nuniverbal\nuniversal\nuniversalia\nUniversalian\nUniversalism\nuniversalism\nUniversalist\nuniversalist\nUniversalistic\nuniversalistic\nuniversality\nuniversalization\nuniversalize\nuniversalizer\nuniversally\nuniversalness\nuniversanimous\nuniverse\nuniverseful\nuniversitarian\nuniversitarianism\nuniversitary\nuniversitize\nuniversity\nuniversityless\nuniversitylike\nuniversityship\nuniversological\nuniversologist\nuniversology\nunivied\nunivocability\nunivocacy\nunivocal\nunivocalized\nunivocally\nunivocity\nunivoltine\nunivorous\nunjacketed\nunjaded\nunjagged\nunjailed\nunjam\nunjapanned\nunjarred\nunjarring\nunjaundiced\nunjaunty\nunjealous\nunjealoused\nunjellied\nunjesting\nunjesuited\nunjesuitical\nunjesuitically\nunjewel\nunjeweled\nunjewelled\nUnjewish\nunjilted\nunjocose\nunjocund\nunjogged\nunjogging\nunjoin\nunjoinable\nunjoint\nunjointed\nunjointedness\nunjointured\nunjoking\nunjokingly\nunjolly\nunjolted\nunjostled\nunjournalized\nunjovial\nunjovially\nunjoyed\nunjoyful\nunjoyfully\nunjoyfulness\nunjoyous\nunjoyously\nunjoyousness\nunjudgable\nunjudge\nunjudged\nunjudgelike\nunjudging\nunjudicable\nunjudicial\nunjudicially\nunjudicious\nunjudiciously\nunjudiciousness\nunjuggled\nunjuiced\nunjuicy\nunjumbled\nunjumpable\nunjust\nunjustice\nunjusticiable\nunjustifiable\nunjustifiableness\nunjustifiably\nunjustified\nunjustifiedly\nunjustifiedness\nunjustify\nunjustled\nunjustly\nunjustness\nunjuvenile\nunkaiserlike\nunkamed\nunked\nunkeeled\nunkembed\nunkempt\nunkemptly\nunkemptness\nunken\nunkenned\nunkennedness\nunkennel\nunkenneled\nunkenning\nunkensome\nunkept\nunkerchiefed\nunket\nunkey\nunkeyed\nunkicked\nunkid\nunkill\nunkillability\nunkillable\nunkilled\nunkilling\nunkilned\nunkin\nunkind\nunkindhearted\nunkindled\nunkindledness\nunkindlily\nunkindliness\nunkindling\nunkindly\nunkindness\nunkindred\nunkindredly\nunking\nunkingdom\nunkinged\nunkinger\nunkinglike\nunkingly\nunkink\nunkinlike\nunkirk\nunkiss\nunkissed\nunkist\nunknave\nunkneaded\nunkneeling\nunknelled\nunknew\nunknight\nunknighted\nunknightlike\nunknit\nunknittable\nunknitted\nunknitting\nunknocked\nunknocking\nunknot\nunknotted\nunknotty\nunknow\nunknowability\nunknowable\nunknowableness\nunknowably\nunknowing\nunknowingly\nunknowingness\nunknowledgeable\nunknown\nunknownly\nunknownness\nunknownst\nunkodaked\nunkoshered\nunlabeled\nunlabialize\nunlabiate\nunlaborable\nunlabored\nunlaboring\nunlaborious\nunlaboriously\nunlaboriousness\nunlace\nunlaced\nunlacerated\nunlackeyed\nunlacquered\nunlade\nunladen\nunladled\nunladyfied\nunladylike\nunlagging\nunlaid\nunlame\nunlamed\nunlamented\nunlampooned\nunlanced\nunland\nunlanded\nunlandmarked\nunlanguaged\nunlanguid\nunlanguishing\nunlanterned\nunlap\nunlapped\nunlapsed\nunlapsing\nunlarded\nunlarge\nunlash\nunlashed\nunlasher\nunlassoed\nunlasting\nunlatch\nunlath\nunlathed\nunlathered\nunlatinized\nunlatticed\nunlaudable\nunlaudableness\nunlaudably\nunlauded\nunlaugh\nunlaughing\nunlaunched\nunlaundered\nunlaureled\nunlaved\nunlaving\nunlavish\nunlavished\nunlaw\nunlawed\nunlawful\nunlawfully\nunlawfulness\nunlawlearned\nunlawlike\nunlawly\nunlawyered\nunlawyerlike\nunlay\nunlayable\nunleached\nunlead\nunleaded\nunleaderly\nunleaf\nunleafed\nunleagued\nunleaguer\nunleakable\nunleaky\nunleal\nunlean\nunleared\nunlearn\nunlearnability\nunlearnable\nunlearnableness\nunlearned\nunlearnedly\nunlearnedness\nunlearning\nunlearnt\nunleasable\nunleased\nunleash\nunleashed\nunleathered\nunleave\nunleaved\nunleavenable\nunleavened\nunlectured\nunled\nunleft\nunlegacied\nunlegal\nunlegalized\nunlegally\nunlegalness\nunlegate\nunlegislative\nunleisured\nunleisuredness\nunleisurely\nunlenient\nunlensed\nunlent\nunless\nunlessened\nunlessoned\nunlet\nunlettable\nunletted\nunlettered\nunletteredly\nunletteredness\nunlettering\nunletterlike\nunlevel\nunleveled\nunlevelly\nunlevelness\nunlevied\nunlevigated\nunlexicographical\nunliability\nunliable\nunlibeled\nunliberal\nunliberalized\nunliberated\nunlibidinous\nunlicensed\nunlicentiated\nunlicentious\nunlichened\nunlickable\nunlicked\nunlid\nunlidded\nunlie\nunlifelike\nunliftable\nunlifted\nunlifting\nunligable\nunligatured\nunlight\nunlighted\nunlightedly\nunlightedness\nunlightened\nunlignified\nunlikable\nunlikableness\nunlikably\nunlike\nunlikeable\nunlikeableness\nunlikeably\nunliked\nunlikelihood\nunlikeliness\nunlikely\nunliken\nunlikeness\nunliking\nunlimb\nunlimber\nunlime\nunlimed\nunlimitable\nunlimitableness\nunlimitably\nunlimited\nunlimitedly\nunlimitedness\nunlimitless\nunlimned\nunlimp\nunline\nunlineal\nunlined\nunlingering\nunlink\nunlinked\nunlionlike\nunliquefiable\nunliquefied\nunliquid\nunliquidatable\nunliquidated\nunliquidating\nunliquidation\nunliquored\nunlisping\nunlist\nunlisted\nunlistened\nunlistening\nunlisty\nunlit\nunliteral\nunliterally\nunliteralness\nunliterary\nunliterate\nunlitigated\nunlitten\nunlittered\nunliturgical\nunliturgize\nunlivable\nunlivableness\nunlivably\nunlive\nunliveable\nunliveableness\nunliveably\nunliveliness\nunlively\nunliveried\nunlivery\nunliving\nunlizardlike\nunload\nunloaded\nunloaden\nunloader\nunloafing\nunloanably\nunloaned\nunloaning\nunloath\nunloathed\nunloathful\nunloathly\nunloathsome\nunlobed\nunlocal\nunlocalizable\nunlocalize\nunlocalized\nunlocally\nunlocated\nunlock\nunlockable\nunlocked\nunlocker\nunlocking\nunlocomotive\nunlodge\nunlodged\nunlofty\nunlogged\nunlogic\nunlogical\nunlogically\nunlogicalness\nunlonely\nunlook\nunlooked\nunloop\nunlooped\nunloosable\nunloosably\nunloose\nunloosen\nunloosening\nunloosing\nunlooted\nunlopped\nunloquacious\nunlord\nunlorded\nunlordly\nunlosable\nunlosableness\nunlost\nunlotted\nunlousy\nunlovable\nunlovableness\nunlovably\nunlove\nunloveable\nunloveableness\nunloveably\nunloved\nunlovelily\nunloveliness\nunlovely\nunloverlike\nunloverly\nunloving\nunlovingly\nunlovingness\nunlowered\nunlowly\nunloyal\nunloyally\nunloyalty\nunlubricated\nunlucent\nunlucid\nunluck\nunluckful\nunluckily\nunluckiness\nunlucky\nunlucrative\nunludicrous\nunluffed\nunlugged\nunlugubrious\nunluminous\nunlumped\nunlunar\nunlured\nunlust\nunlustily\nunlustiness\nunlustrous\nunlusty\nunlute\nunluted\nunluxated\nunluxuriant\nunluxurious\nunlycanthropize\nunlying\nunlyrical\nunlyrically\nunmacadamized\nunmacerated\nunmachinable\nunmackly\nunmad\nunmadded\nunmaddened\nunmade\nunmagic\nunmagical\nunmagisterial\nunmagistratelike\nunmagnanimous\nunmagnetic\nunmagnetical\nunmagnetized\nunmagnified\nunmagnify\nunmaid\nunmaidenlike\nunmaidenliness\nunmaidenly\nunmail\nunmailable\nunmailableness\nunmailed\nunmaimable\nunmaimed\nunmaintainable\nunmaintained\nunmajestic\nunmakable\nunmake\nunmaker\nunmalevolent\nunmalicious\nunmalignant\nunmaligned\nunmalleability\nunmalleable\nunmalleableness\nunmalled\nunmaltable\nunmalted\nunmammalian\nunmammonized\nunman\nunmanacle\nunmanacled\nunmanageable\nunmanageableness\nunmanageably\nunmanaged\nunmancipated\nunmandated\nunmanducated\nunmaned\nunmaneged\nunmanful\nunmanfully\nunmangled\nunmaniable\nunmaniac\nunmaniacal\nunmanicured\nunmanifest\nunmanifested\nunmanipulatable\nunmanipulated\nunmanlike\nunmanlily\nunmanliness\nunmanly\nunmanned\nunmanner\nunmannered\nunmanneredly\nunmannerliness\nunmannerly\nunmannish\nunmanored\nunmantle\nunmantled\nunmanufacturable\nunmanufactured\nunmanumissible\nunmanumitted\nunmanurable\nunmanured\nunmappable\nunmapped\nunmarbled\nunmarch\nunmarching\nunmarginal\nunmarginated\nunmarine\nunmaritime\nunmarkable\nunmarked\nunmarketable\nunmarketed\nunmarled\nunmarred\nunmarriable\nunmarriageability\nunmarriageable\nunmarried\nunmarring\nunmarry\nunmarrying\nunmarshaled\nunmartial\nunmartyr\nunmartyred\nunmarvelous\nunmasculine\nunmashed\nunmask\nunmasked\nunmasker\nunmasking\nunmasquerade\nunmassacred\nunmassed\nunmast\nunmaster\nunmasterable\nunmastered\nunmasterful\nunmasticable\nunmasticated\nunmatchable\nunmatchableness\nunmatchably\nunmatched\nunmatchedness\nunmate\nunmated\nunmaterial\nunmaterialistic\nunmateriate\nunmaternal\nunmathematical\nunmathematically\nunmating\nunmatriculated\nunmatrimonial\nunmatronlike\nunmatted\nunmature\nunmatured\nunmaturely\nunmatureness\nunmaturing\nunmaturity\nunmauled\nunmaze\nunmeaning\nunmeaningly\nunmeaningness\nunmeant\nunmeasurable\nunmeasurableness\nunmeasurably\nunmeasured\nunmeasuredly\nunmeasuredness\nunmeated\nunmechanic\nunmechanical\nunmechanically\nunmechanistic\nunmechanize\nunmechanized\nunmedaled\nunmedalled\nunmeddle\nunmeddled\nunmeddlesome\nunmeddling\nunmeddlingly\nunmeddlingness\nunmediaeval\nunmediated\nunmediatized\nunmedicable\nunmedical\nunmedicated\nunmedicative\nunmedicinable\nunmedicinal\nunmeditated\nunmeditative\nunmediumistic\nunmedullated\nunmeek\nunmeekly\nunmeekness\nunmeet\nunmeetable\nunmeetly\nunmeetness\nunmelancholy\nunmeliorated\nunmellow\nunmellowed\nunmelodic\nunmelodious\nunmelodiously\nunmelodiousness\nunmelodized\nunmelodramatic\nunmeltable\nunmeltableness\nunmeltably\nunmelted\nunmeltedness\nunmelting\nunmember\nunmemoired\nunmemorable\nunmemorialized\nunmemoried\nunmemorized\nunmenaced\nunmenacing\nunmendable\nunmendableness\nunmendably\nunmendacious\nunmended\nunmenial\nunmenseful\nunmenstruating\nunmensurable\nunmental\nunmentionability\nunmentionable\nunmentionableness\nunmentionables\nunmentionably\nunmentioned\nunmercantile\nunmercenariness\nunmercenary\nunmercerized\nunmerchantable\nunmerchantlike\nunmerchantly\nunmerciful\nunmercifully\nunmercifulness\nunmercurial\nunmeretricious\nunmerge\nunmerged\nunmeridional\nunmerited\nunmeritedly\nunmeritedness\nunmeriting\nunmeritorious\nunmeritoriously\nunmeritoriousness\nunmerry\nunmesh\nunmesmeric\nunmesmerize\nunmesmerized\nunmet\nunmetaled\nunmetalized\nunmetalled\nunmetallic\nunmetallurgical\nunmetamorphosed\nunmetaphorical\nunmetaphysic\nunmetaphysical\nunmeted\nunmeteorological\nunmetered\nunmethodical\nunmethodically\nunmethodicalness\nunmethodized\nunmethodizing\nunmethylated\nunmeticulous\nunmetric\nunmetrical\nunmetrically\nunmetricalness\nunmetropolitan\nunmettle\nunmew\nunmewed\nunmicaceous\nunmicrobic\nunmicroscopic\nunmidwifed\nunmighty\nunmigrating\nunmildewed\nunmilitant\nunmilitarily\nunmilitariness\nunmilitaristic\nunmilitarized\nunmilitary\nunmilked\nunmilled\nunmillinered\nunmilted\nunmimicked\nunminable\nunminced\nunmincing\nunmind\nunminded\nunmindful\nunmindfully\nunmindfulness\nunminding\nunmined\nunmineralized\nunmingle\nunmingleable\nunmingled\nunmingling\nunminimized\nunminished\nunminister\nunministered\nunministerial\nunministerially\nunminted\nunminuted\nunmiracled\nunmiraculous\nunmiraculously\nunmired\nunmirrored\nunmirthful\nunmirthfully\nunmirthfulness\nunmiry\nunmisanthropic\nunmiscarrying\nunmischievous\nunmiscible\nunmisconceivable\nunmiserly\nunmisgiving\nunmisgivingly\nunmisguided\nunmisinterpretable\nunmisled\nunmissable\nunmissed\nunmissionary\nunmissionized\nunmist\nunmistakable\nunmistakableness\nunmistakably\nunmistakedly\nunmistaken\nunmistakingly\nunmistressed\nunmistrusted\nunmistrustful\nunmistrusting\nunmisunderstandable\nunmisunderstanding\nunmisunderstood\nunmiter\nunmitigable\nunmitigated\nunmitigatedly\nunmitigatedness\nunmitigative\nunmittened\nunmix\nunmixable\nunmixableness\nunmixed\nunmixedly\nunmixedness\nunmoaned\nunmoated\nunmobbed\nunmobilized\nunmocked\nunmocking\nunmockingly\nunmodel\nunmodeled\nunmodelled\nunmoderate\nunmoderately\nunmoderateness\nunmoderating\nunmodern\nunmodernity\nunmodernize\nunmodernized\nunmodest\nunmodifiable\nunmodifiableness\nunmodifiably\nunmodified\nunmodifiedness\nunmodish\nunmodulated\nunmoiled\nunmoist\nunmoisten\nunmold\nunmoldable\nunmolded\nunmoldered\nunmoldering\nunmoldy\nunmolested\nunmolestedly\nunmolesting\nunmollifiable\nunmollifiably\nunmollified\nunmollifying\nunmolten\nunmomentary\nunmomentous\nunmomentously\nunmonarch\nunmonarchical\nunmonastic\nunmonetary\nunmoneyed\nunmonistic\nunmonitored\nunmonkish\nunmonkly\nunmonopolize\nunmonopolized\nunmonopolizing\nunmonotonous\nunmonumented\nunmoor\nunmoored\nunmooted\nunmopped\nunmoral\nunmoralist\nunmorality\nunmoralize\nunmoralized\nunmoralizing\nunmorally\nunmoralness\nunmorbid\nunmordanted\nunmoribund\nunmorose\nunmorphological\nunmortal\nunmortared\nunmortgage\nunmortgageable\nunmortgaged\nunmortified\nunmortifiedly\nunmortifiedness\nunmortise\nunmortised\nunmossed\nunmothered\nunmotherly\nunmotionable\nunmotivated\nunmotivatedly\nunmotivatedness\nunmotived\nunmotorized\nunmottled\nunmounded\nunmount\nunmountable\nunmountainous\nunmounted\nunmounting\nunmourned\nunmournful\nunmourning\nunmouthable\nunmouthed\nunmouthpieced\nunmovability\nunmovable\nunmovableness\nunmovably\nunmoved\nunmovedly\nunmoving\nunmovingly\nunmovingness\nunmowed\nunmown\nunmucilaged\nunmudded\nunmuddied\nunmuddle\nunmuddled\nunmuddy\nunmuffle\nunmuffled\nunmulcted\nunmulish\nunmulled\nunmullioned\nunmultipliable\nunmultiplied\nunmultipliedly\nunmultiply\nunmummied\nunmummify\nunmunched\nunmundane\nunmundified\nunmunicipalized\nunmunificent\nunmunitioned\nunmurmured\nunmurmuring\nunmurmuringly\nunmurmurous\nunmuscled\nunmuscular\nunmusical\nunmusicality\nunmusically\nunmusicalness\nunmusicianly\nunmusked\nunmussed\nunmusted\nunmusterable\nunmustered\nunmutated\nunmutation\nunmuted\nunmutilated\nunmutinous\nunmuttered\nunmutual\nunmutualized\nunmuzzle\nunmuzzled\nunmuzzling\nunmyelinated\nunmysterious\nunmysteriously\nunmystery\nunmystical\nunmysticize\nunmystified\nunmythical\nunnabbed\nunnagged\nunnagging\nunnail\nunnailed\nunnaked\nunnamability\nunnamable\nunnamableness\nunnamably\nunname\nunnameability\nunnameable\nunnameableness\nunnameably\nunnamed\nunnapkined\nunnapped\nunnarcotic\nunnarrated\nunnarrow\nunnation\nunnational\nunnationalized\nunnative\nunnatural\nunnaturalism\nunnaturalist\nunnaturalistic\nunnaturality\nunnaturalizable\nunnaturalize\nunnaturalized\nunnaturally\nunnaturalness\nunnature\nunnautical\nunnavigability\nunnavigable\nunnavigableness\nunnavigably\nunnavigated\nunneaped\nunnearable\nunneared\nunnearly\nunnearness\nunneat\nunneatly\nunneatness\nunnebulous\nunnecessarily\nunnecessariness\nunnecessary\nunnecessitated\nunnecessitating\nunnecessity\nunneeded\nunneedful\nunneedfully\nunneedfulness\nunneedy\nunnefarious\nunnegated\nunneglected\nunnegligent\nunnegotiable\nunnegotiableness\nunnegotiably\nunnegotiated\nunnegro\nunneighbored\nunneighborlike\nunneighborliness\nunneighborly\nunnephritic\nunnerve\nunnerved\nunnervous\nunnest\nunnestle\nunnestled\nunneth\nunnethe\nunnethes\nunnethis\nunnetted\nunnettled\nunneurotic\nunneutral\nunneutralized\nunneutrally\nunnew\nunnewly\nunnewness\nunnibbed\nunnibbied\nunnice\nunnicely\nunniceness\nunniched\nunnicked\nunnickeled\nunnickelled\nunnicknamed\nunniggard\nunniggardly\nunnigh\nunnimbed\nunnimble\nunnimbleness\nunnimbly\nunnipped\nunnitrogenized\nunnobilitated\nunnobility\nunnoble\nunnobleness\nunnobly\nunnoised\nunnomadic\nunnominated\nunnonsensical\nunnoosed\nunnormal\nunnorthern\nunnose\nunnosed\nunnotable\nunnotched\nunnoted\nunnoteworthy\nunnoticeable\nunnoticeableness\nunnoticeably\nunnoticed\nunnoticing\nunnotified\nunnotify\nunnoting\nunnourishable\nunnourished\nunnourishing\nunnovel\nunnovercal\nunnucleated\nunnullified\nunnumberable\nunnumberableness\nunnumberably\nunnumbered\nunnumberedness\nunnumerical\nunnumerous\nunnurtured\nunnutritious\nunnutritive\nunnuzzled\nunnymphlike\nunoared\nunobdurate\nunobedience\nunobedient\nunobediently\nunobese\nunobeyed\nunobeying\nunobjected\nunobjectionable\nunobjectionableness\nunobjectionably\nunobjectional\nunobjective\nunobligated\nunobligatory\nunobliged\nunobliging\nunobligingly\nunobligingness\nunobliterable\nunobliterated\nunoblivious\nunobnoxious\nunobscene\nunobscure\nunobscured\nunobsequious\nunobsequiously\nunobsequiousness\nunobservable\nunobservance\nunobservant\nunobservantly\nunobservantness\nunobserved\nunobservedly\nunobserving\nunobservingly\nunobsessed\nunobsolete\nunobstinate\nunobstruct\nunobstructed\nunobstructedly\nunobstructedness\nunobstructive\nunobstruent\nunobtainable\nunobtainableness\nunobtainably\nunobtained\nunobtruded\nunobtruding\nunobtrusive\nunobtrusively\nunobtrusiveness\nunobtunded\nunobumbrated\nunobverted\nunobviated\nunobvious\nunoccasional\nunoccasioned\nunoccidental\nunoccluded\nunoccupancy\nunoccupation\nunoccupied\nunoccupiedly\nunoccupiedness\nunoccurring\nunoceanic\nunocular\nunode\nunodious\nunodoriferous\nunoecumenic\nunoecumenical\nunoffendable\nunoffended\nunoffendedly\nunoffender\nunoffending\nunoffendingly\nunoffensive\nunoffensively\nunoffensiveness\nunoffered\nunofficed\nunofficered\nunofficerlike\nunofficial\nunofficialdom\nunofficially\nunofficialness\nunofficiating\nunofficinal\nunofficious\nunofficiously\nunofficiousness\nunoffset\nunoften\nunogled\nunoil\nunoiled\nunoiling\nunoily\nunold\nunomened\nunominous\nunomitted\nunomnipotent\nunomniscient\nUnona\nunonerous\nunontological\nunopaque\nunoped\nunopen\nunopenable\nunopened\nunopening\nunopenly\nunopenness\nunoperably\nunoperated\nunoperatic\nunoperating\nunoperative\nunoperculate\nunoperculated\nunopined\nunopinionated\nunoppignorated\nunopportune\nunopportunely\nunopportuneness\nunopposable\nunopposed\nunopposedly\nunopposedness\nunopposite\nunoppressed\nunoppressive\nunoppressively\nunoppressiveness\nunopprobrious\nunoppugned\nunopulence\nunopulent\nunoratorial\nunoratorical\nunorbed\nunorbital\nunorchestrated\nunordain\nunordainable\nunordained\nunorder\nunorderable\nunordered\nunorderly\nunordinarily\nunordinariness\nunordinary\nunordinate\nunordinately\nunordinateness\nunordnanced\nunorganic\nunorganical\nunorganically\nunorganicalness\nunorganizable\nunorganized\nunorganizedly\nunorganizedness\nunoriental\nunorientalness\nunoriented\nunoriginal\nunoriginality\nunoriginally\nunoriginalness\nunoriginate\nunoriginated\nunoriginatedness\nunoriginately\nunoriginateness\nunorigination\nunoriginative\nunoriginatively\nunoriginativeness\nunorn\nunornamental\nunornamentally\nunornamentalness\nunornamented\nunornate\nunornithological\nunornly\nunorphaned\nunorthodox\nunorthodoxically\nunorthodoxly\nunorthodoxness\nunorthodoxy\nunorthographical\nunorthographically\nunoscillating\nunosculated\nunossified\nunostensible\nunostentation\nunostentatious\nunostentatiously\nunostentatiousness\nunoutgrown\nunoutlawed\nunoutraged\nunoutspeakable\nunoutspoken\nunoutworn\nunoverclouded\nunovercome\nunoverdone\nunoverdrawn\nunoverflowing\nunoverhauled\nunoverleaped\nunoverlooked\nunoverpaid\nunoverpowered\nunoverruled\nunovert\nunovertaken\nunoverthrown\nunovervalued\nunoverwhelmed\nunowed\nunowing\nunown\nunowned\nunoxidable\nunoxidated\nunoxidizable\nunoxidized\nunoxygenated\nunoxygenized\nunpacable\nunpaced\nunpacifiable\nunpacific\nunpacified\nunpacifiedly\nunpacifiedness\nunpacifist\nunpack\nunpacked\nunpacker\nunpadded\nunpadlocked\nunpagan\nunpaganize\nunpaged\nunpaginal\nunpaid\nunpained\nunpainful\nunpaining\nunpainstaking\nunpaint\nunpaintability\nunpaintable\nunpaintableness\nunpaintably\nunpainted\nunpaintedly\nunpaintedness\nunpaired\nunpalatability\nunpalatable\nunpalatableness\nunpalatably\nunpalatal\nunpalatial\nunpale\nunpaled\nunpalisaded\nunpalisadoed\nunpalled\nunpalliable\nunpalliated\nunpalpable\nunpalped\nunpalpitating\nunpalsied\nunpampered\nunpanegyrized\nunpanel\nunpaneled\nunpanelled\nunpanged\nunpanniered\nunpanoplied\nunpantheistic\nunpanting\nunpapal\nunpapaverous\nunpaper\nunpapered\nunparaded\nunparadise\nunparadox\nunparagoned\nunparagonized\nunparagraphed\nunparallel\nunparallelable\nunparalleled\nunparalleledly\nunparalleledness\nunparallelness\nunparalyzed\nunparaphrased\nunparasitical\nunparcel\nunparceled\nunparceling\nunparcelled\nunparcelling\nunparch\nunparched\nunparching\nunpardon\nunpardonable\nunpardonableness\nunpardonably\nunpardoned\nunpardonedness\nunpardoning\nunpared\nunparented\nunparfit\nunpargeted\nunpark\nunparked\nunparking\nunparliamentary\nunparliamented\nunparodied\nunparrel\nunparriable\nunparried\nunparroted\nunparrying\nunparsed\nunparsimonious\nunparsonic\nunparsonical\nunpartable\nunpartableness\nunpartably\nunpartaken\nunpartaking\nunparted\nunpartial\nunpartiality\nunpartially\nunpartialness\nunparticipant\nunparticipated\nunparticipating\nunparticipative\nunparticular\nunparticularized\nunparticularizing\nunpartisan\nunpartitioned\nunpartizan\nunpartnered\nunpartook\nunparty\nunpass\nunpassable\nunpassableness\nunpassably\nunpassed\nunpassing\nunpassionate\nunpassionately\nunpassionateness\nunpassioned\nunpassive\nunpaste\nunpasted\nunpasteurized\nunpasting\nunpastor\nunpastoral\nunpastured\nunpatched\nunpatent\nunpatentable\nunpatented\nunpaternal\nunpathed\nunpathetic\nunpathwayed\nunpatient\nunpatiently\nunpatientness\nunpatriarchal\nunpatrician\nunpatriotic\nunpatriotically\nunpatriotism\nunpatristic\nunpatrolled\nunpatronizable\nunpatronized\nunpatronizing\nunpatted\nunpatterned\nunpaunch\nunpaunched\nunpauperized\nunpausing\nunpausingly\nunpave\nunpaved\nunpavilioned\nunpaving\nunpawed\nunpawn\nunpawned\nunpayable\nunpayableness\nunpayably\nunpaying\nunpayment\nunpeace\nunpeaceable\nunpeaceableness\nunpeaceably\nunpeaceful\nunpeacefully\nunpeacefulness\nunpealed\nunpearled\nunpebbled\nunpeccable\nunpecked\nunpecuniarily\nunpedagogical\nunpedantic\nunpeddled\nunpedestal\nunpedigreed\nunpeel\nunpeelable\nunpeelableness\nunpeeled\nunpeerable\nunpeered\nunpeg\nunpejorative\nunpelagic\nunpelted\nunpen\nunpenal\nunpenalized\nunpenanced\nunpenciled\nunpencilled\nunpenetrable\nunpenetrated\nunpenetrating\nunpenitent\nunpenitently\nunpenitentness\nunpenned\nunpennied\nunpennoned\nunpensionable\nunpensionableness\nunpensioned\nunpensioning\nunpent\nunpenurious\nunpeople\nunpeopled\nunpeopling\nunperceived\nunperceivedly\nunperceptible\nunperceptibly\nunperceptive\nunperch\nunperched\nunpercipient\nunpercolated\nunpercussed\nunperfect\nunperfected\nunperfectedly\nunperfectedness\nunperfectly\nunperfectness\nunperfidious\nunperflated\nunperforate\nunperforated\nunperformable\nunperformance\nunperformed\nunperforming\nunperfumed\nunperilous\nunperiodic\nunperiodical\nunperiphrased\nunperishable\nunperishableness\nunperishably\nunperished\nunperishing\nunperjured\nunpermanency\nunpermanent\nunpermanently\nunpermeable\nunpermeated\nunpermissible\nunpermissive\nunpermitted\nunpermitting\nunpermixed\nunpernicious\nunperpendicular\nunperpetrated\nunperpetuated\nunperplex\nunperplexed\nunperplexing\nunpersecuted\nunpersecutive\nunperseverance\nunpersevering\nunperseveringly\nunperseveringness\nunpersonable\nunpersonableness\nunpersonal\nunpersonality\nunpersonified\nunpersonify\nunperspicuous\nunperspirable\nunperspiring\nunpersuadable\nunpersuadableness\nunpersuadably\nunpersuaded\nunpersuadedness\nunpersuasibleness\nunpersuasion\nunpersuasive\nunpersuasively\nunpersuasiveness\nunpertaining\nunpertinent\nunpertinently\nunperturbed\nunperturbedly\nunperturbedness\nunperuked\nunperused\nunpervaded\nunperverse\nunpervert\nunperverted\nunpervious\nunpessimistic\nunpestered\nunpestilential\nunpetal\nunpetitioned\nunpetrified\nunpetrify\nunpetticoated\nunpetulant\nunpharasaic\nunpharasaical\nunphased\nunphenomenal\nunphilanthropic\nunphilanthropically\nunphilological\nunphilosophic\nunphilosophically\nunphilosophicalness\nunphilosophize\nunphilosophized\nunphilosophy\nunphlegmatic\nunphonetic\nunphoneticness\nunphonographed\nunphosphatized\nunphotographed\nunphrasable\nunphrasableness\nunphrased\nunphrenological\nunphysical\nunphysically\nunphysicianlike\nunphysicked\nunphysiological\nunpicaresque\nunpick\nunpickable\nunpicked\nunpicketed\nunpickled\nunpictorial\nunpictorially\nunpicturability\nunpicturable\nunpictured\nunpicturesque\nunpicturesquely\nunpicturesqueness\nunpiece\nunpieced\nunpierceable\nunpierced\nunpiercing\nunpiety\nunpigmented\nunpile\nunpiled\nunpilfered\nunpilgrimlike\nunpillaged\nunpillared\nunpilled\nunpilloried\nunpillowed\nunpiloted\nunpimpled\nunpin\nunpinched\nunpining\nunpinion\nunpinioned\nunpinked\nunpinned\nunpious\nunpiped\nunpiqued\nunpirated\nunpitched\nunpiteous\nunpiteously\nunpiteousness\nunpitiable\nunpitiably\nunpitied\nunpitiedly\nunpitiedness\nunpitiful\nunpitifully\nunpitifulness\nunpitted\nunpitying\nunpityingly\nunpityingness\nunplacable\nunplacably\nunplacated\nunplace\nunplaced\nunplacid\nunplagiarized\nunplagued\nunplaid\nunplain\nunplained\nunplainly\nunplainness\nunplait\nunplaited\nunplan\nunplaned\nunplanished\nunplank\nunplanked\nunplanned\nunplannedly\nunplannedness\nunplant\nunplantable\nunplanted\nunplantlike\nunplashed\nunplaster\nunplastered\nunplastic\nunplat\nunplated\nunplatted\nunplausible\nunplausibleness\nunplausibly\nunplayable\nunplayed\nunplayful\nunplaying\nunpleached\nunpleadable\nunpleaded\nunpleading\nunpleasable\nunpleasant\nunpleasantish\nunpleasantly\nunpleasantness\nunpleasantry\nunpleased\nunpleasing\nunpleasingly\nunpleasingness\nunpleasurable\nunpleasurably\nunpleasure\nunpleat\nunpleated\nunplebeian\nunpledged\nunplenished\nunplenteous\nunplentiful\nunplentifulness\nunpliable\nunpliableness\nunpliably\nunpliancy\nunpliant\nunpliantly\nunplied\nunplighted\nunplodding\nunplotted\nunplotting\nunplough\nunploughed\nunplow\nunplowed\nunplucked\nunplug\nunplugged\nunplugging\nunplumb\nunplumbed\nunplume\nunplumed\nunplummeted\nunplump\nunplundered\nunplunge\nunplunged\nunplutocratic\nunplutocratically\nunpoached\nunpocket\nunpocketed\nunpodded\nunpoetic\nunpoetically\nunpoeticalness\nunpoeticized\nunpoetize\nunpoetized\nunpoignard\nunpointed\nunpointing\nunpoise\nunpoised\nunpoison\nunpoisonable\nunpoisoned\nunpoisonous\nunpolarizable\nunpolarized\nunpoled\nunpolemical\nunpolemically\nunpoliced\nunpolicied\nunpolish\nunpolishable\nunpolished\nunpolishedness\nunpolite\nunpolitely\nunpoliteness\nunpolitic\nunpolitical\nunpolitically\nunpoliticly\nunpollarded\nunpolled\nunpollutable\nunpolluted\nunpollutedly\nunpolluting\nunpolymerized\nunpompous\nunpondered\nunpontifical\nunpooled\nunpope\nunpopular\nunpopularity\nunpopularize\nunpopularly\nunpopularness\nunpopulate\nunpopulated\nunpopulous\nunpopulousness\nunporous\nunportable\nunportended\nunportentous\nunportioned\nunportly\nunportmanteaued\nunportraited\nunportrayable\nunportrayed\nunportuous\nunposed\nunposing\nunpositive\nunpossessable\nunpossessed\nunpossessedness\nunpossessing\nunpossibility\nunpossible\nunpossibleness\nunpossibly\nunposted\nunpostered\nunposthumous\nunpostmarked\nunpostponable\nunpostponed\nunpostulated\nunpot\nunpotted\nunpouched\nunpoulticed\nunpounced\nunpounded\nunpoured\nunpowdered\nunpower\nunpowerful\nunpowerfulness\nunpracticability\nunpracticable\nunpracticableness\nunpracticably\nunpractical\nunpracticality\nunpractically\nunpracticalness\nunpractice\nunpracticed\nunpragmatical\nunpraisable\nunpraise\nunpraised\nunpraiseful\nunpraiseworthy\nunpranked\nunpray\nunprayable\nunprayed\nunprayerful\nunpraying\nunpreach\nunpreached\nunpreaching\nunprecarious\nunprecautioned\nunpreceded\nunprecedented\nunprecedentedly\nunprecedentedness\nunprecedential\nunprecedently\nunprecious\nunprecipitate\nunprecipitated\nunprecise\nunprecisely\nunpreciseness\nunprecluded\nunprecludible\nunprecocious\nunpredacious\nunpredestinated\nunpredestined\nunpredicable\nunpredicated\nunpredict\nunpredictable\nunpredictableness\nunpredictably\nunpredicted\nunpredictedness\nunpredicting\nunpredisposed\nunpredisposing\nunpreened\nunprefaced\nunpreferable\nunpreferred\nunprefigured\nunprefined\nunprefixed\nunpregnant\nunprejudged\nunprejudicated\nunprejudice\nunprejudiced\nunprejudicedly\nunprejudicedness\nunprejudiciable\nunprejudicial\nunprejudicially\nunprejudicialness\nunprelatic\nunprelatical\nunpreluded\nunpremature\nunpremeditate\nunpremeditated\nunpremeditatedly\nunpremeditatedness\nunpremeditately\nunpremeditation\nunpremonished\nunpremonstrated\nunprenominated\nunprenticed\nunpreoccupied\nunpreordained\nunpreparation\nunprepare\nunprepared\nunpreparedly\nunpreparedness\nunpreparing\nunpreponderated\nunpreponderating\nunprepossessedly\nunprepossessing\nunprepossessingly\nunprepossessingness\nunpreposterous\nunpresaged\nunpresageful\nunpresaging\nunpresbyterated\nunprescient\nunprescinded\nunprescribed\nunpresentability\nunpresentable\nunpresentableness\nunpresentably\nunpresented\nunpreservable\nunpreserved\nunpresidential\nunpresiding\nunpressed\nunpresumable\nunpresumed\nunpresuming\nunpresumingness\nunpresumptuous\nunpresumptuously\nunpresupposed\nunpretended\nunpretending\nunpretendingly\nunpretendingness\nunpretentious\nunpretentiously\nunpretentiousness\nunpretermitted\nunpreternatural\nunprettiness\nunpretty\nunprevailing\nunprevalent\nunprevaricating\nunpreventable\nunpreventableness\nunpreventably\nunprevented\nunpreventible\nunpreventive\nunpriceably\nunpriced\nunpricked\nunprickled\nunprickly\nunpriest\nunpriestlike\nunpriestly\nunpriggish\nunprim\nunprime\nunprimed\nunprimitive\nunprimmed\nunprince\nunprincelike\nunprinceliness\nunprincely\nunprincess\nunprincipal\nunprinciple\nunprincipled\nunprincipledly\nunprincipledness\nunprint\nunprintable\nunprintableness\nunprintably\nunprinted\nunpriority\nunprismatic\nunprison\nunprisonable\nunprisoned\nunprivate\nunprivileged\nunprizable\nunprized\nunprobated\nunprobationary\nunprobed\nunprobity\nunproblematic\nunproblematical\nunprocessed\nunproclaimed\nunprocrastinated\nunprocreant\nunprocreated\nunproctored\nunprocurable\nunprocurableness\nunprocure\nunprocured\nunproded\nunproduceable\nunproduceableness\nunproduceably\nunproduced\nunproducedness\nunproducible\nunproducibleness\nunproducibly\nunproductive\nunproductively\nunproductiveness\nunproductivity\nunprofanable\nunprofane\nunprofaned\nunprofessed\nunprofessing\nunprofessional\nunprofessionalism\nunprofessionally\nunprofessorial\nunproffered\nunproficiency\nunproficient\nunproficiently\nunprofit\nunprofitable\nunprofitableness\nunprofitably\nunprofited\nunprofiteering\nunprofiting\nunprofound\nunprofuse\nunprofusely\nunprofuseness\nunprognosticated\nunprogressed\nunprogressive\nunprogressively\nunprogressiveness\nunprohibited\nunprohibitedness\nunprohibitive\nunprojected\nunprojecting\nunproliferous\nunprolific\nunprolix\nunprologued\nunprolonged\nunpromiscuous\nunpromise\nunpromised\nunpromising\nunpromisingly\nunpromisingness\nunpromotable\nunpromoted\nunprompted\nunpromptly\nunpromulgated\nunpronounce\nunpronounceable\nunpronounced\nunpronouncing\nunproofread\nunprop\nunpropagated\nunpropelled\nunpropense\nunproper\nunproperly\nunproperness\nunpropertied\nunprophesiable\nunprophesied\nunprophetic\nunprophetical\nunprophetically\nunprophetlike\nunpropitiable\nunpropitiated\nunpropitiatedness\nunpropitiatory\nunpropitious\nunpropitiously\nunpropitiousness\nunproportion\nunproportionable\nunproportionableness\nunproportionably\nunproportional\nunproportionality\nunproportionally\nunproportionate\nunproportionately\nunproportionateness\nunproportioned\nunproportionedly\nunproportionedness\nunproposed\nunproposing\nunpropounded\nunpropped\nunpropriety\nunprorogued\nunprosaic\nunproscribable\nunproscribed\nunprosecutable\nunprosecuted\nunprosecuting\nunproselyte\nunproselyted\nunprosodic\nunprospected\nunprospective\nunprosperably\nunprospered\nunprosperity\nunprosperous\nunprosperously\nunprosperousness\nunprostitute\nunprostituted\nunprostrated\nunprotectable\nunprotected\nunprotectedly\nunprotectedness\nunprotective\nunprotestant\nunprotestantize\nunprotested\nunprotesting\nunprotruded\nunprotruding\nunprotrusive\nunproud\nunprovability\nunprovable\nunprovableness\nunprovably\nunproved\nunprovedness\nunproven\nunproverbial\nunprovidable\nunprovide\nunprovided\nunprovidedly\nunprovidedness\nunprovidenced\nunprovident\nunprovidential\nunprovidently\nunprovincial\nunproving\nunprovision\nunprovisioned\nunprovocative\nunprovokable\nunprovoke\nunprovoked\nunprovokedly\nunprovokedness\nunprovoking\nunproximity\nunprudence\nunprudent\nunprudently\nunpruned\nunprying\nunpsychic\nunpsychological\nunpublic\nunpublicity\nunpublishable\nunpublishableness\nunpublishably\nunpublished\nunpucker\nunpuckered\nunpuddled\nunpuffed\nunpuffing\nunpugilistic\nunpugnacious\nunpulled\nunpulleyed\nunpulped\nunpulverable\nunpulverize\nunpulverized\nunpulvinate\nunpulvinated\nunpumicated\nunpummeled\nunpummelled\nunpumpable\nunpumped\nunpunched\nunpunctated\nunpunctilious\nunpunctual\nunpunctuality\nunpunctually\nunpunctuated\nunpunctuating\nunpunishable\nunpunishably\nunpunished\nunpunishedly\nunpunishedness\nunpunishing\nunpunishingly\nunpurchasable\nunpurchased\nunpure\nunpurely\nunpureness\nunpurgeable\nunpurged\nunpurifiable\nunpurified\nunpurifying\nunpuritan\nunpurled\nunpurloined\nunpurpled\nunpurported\nunpurposed\nunpurposelike\nunpurposely\nunpurposing\nunpurse\nunpursed\nunpursuable\nunpursued\nunpursuing\nunpurveyed\nunpushed\nunput\nunputrefiable\nunputrefied\nunputrid\nunputtied\nunpuzzle\nunquadded\nunquaffed\nunquailed\nunquailing\nunquailingly\nunquakerlike\nunquakerly\nunquaking\nunqualifiable\nunqualification\nunqualified\nunqualifiedly\nunqualifiedness\nunqualify\nunqualifying\nunqualifyingly\nunqualitied\nunquality\nunquantified\nunquantitative\nunquarantined\nunquarreled\nunquarreling\nunquarrelled\nunquarrelling\nunquarrelsome\nunquarried\nunquartered\nunquashed\nunquayed\nunqueen\nunqueened\nunqueening\nunqueenlike\nunqueenly\nunquellable\nunquelled\nunquenchable\nunquenchableness\nunquenchably\nunquenched\nunqueried\nunquested\nunquestionability\nunquestionable\nunquestionableness\nunquestionably\nunquestionate\nunquestioned\nunquestionedly\nunquestionedness\nunquestioning\nunquestioningly\nunquestioningness\nunquibbled\nunquibbling\nunquick\nunquickened\nunquickly\nunquicksilvered\nunquiescence\nunquiescent\nunquiescently\nunquiet\nunquietable\nunquieted\nunquieting\nunquietly\nunquietness\nunquietude\nunquilleted\nunquilted\nunquit\nunquittable\nunquitted\nunquivered\nunquivering\nunquizzable\nunquizzed\nunquotable\nunquote\nunquoted\nunrabbeted\nunrabbinical\nunraced\nunrack\nunracked\nunracking\nunradiated\nunradical\nunradicalize\nunraffled\nunraftered\nunraided\nunrailed\nunrailroaded\nunrailwayed\nunrainy\nunraised\nunrake\nunraked\nunraking\nunrallied\nunram\nunrambling\nunramified\nunrammed\nunramped\nunranched\nunrancid\nunrancored\nunrandom\nunrank\nunranked\nunransacked\nunransomable\nunransomed\nunrapacious\nunraped\nunraptured\nunrare\nunrarefied\nunrash\nunrasped\nunratable\nunrated\nunratified\nunrational\nunrattled\nunravaged\nunravel\nunravelable\nunraveled\nunraveler\nunraveling\nunravellable\nunravelled\nunraveller\nunravelling\nunravelment\nunraving\nunravished\nunravishing\nunray\nunrayed\nunrazed\nunrazored\nunreachable\nunreachably\nunreached\nunreactive\nunread\nunreadability\nunreadable\nunreadableness\nunreadably\nunreadily\nunreadiness\nunready\nunreal\nunrealism\nunrealist\nunrealistic\nunreality\nunrealizable\nunrealize\nunrealized\nunrealizing\nunreally\nunrealmed\nunrealness\nunreaped\nunreared\nunreason\nunreasonability\nunreasonable\nunreasonableness\nunreasonably\nunreasoned\nunreasoning\nunreasoningly\nunreassuring\nunreassuringly\nunreave\nunreaving\nunrebated\nunrebel\nunrebellious\nunrebuffable\nunrebuffably\nunrebuilt\nunrebukable\nunrebukably\nunrebuked\nunrebuttable\nunrebuttableness\nunrebutted\nunrecallable\nunrecallably\nunrecalled\nunrecalling\nunrecantable\nunrecanted\nunrecaptured\nunreceding\nunreceipted\nunreceivable\nunreceived\nunreceiving\nunrecent\nunreceptant\nunreceptive\nunreceptivity\nunreciprocal\nunreciprocated\nunrecited\nunrecked\nunrecking\nunreckingness\nunreckon\nunreckonable\nunreckoned\nunreclaimable\nunreclaimably\nunreclaimed\nunreclaimedness\nunreclaiming\nunreclined\nunreclining\nunrecognition\nunrecognizable\nunrecognizableness\nunrecognizably\nunrecognized\nunrecognizing\nunrecognizingly\nunrecoined\nunrecollected\nunrecommendable\nunrecompensable\nunrecompensed\nunreconcilable\nunreconcilableness\nunreconcilably\nunreconciled\nunrecondite\nunreconnoitered\nunreconsidered\nunreconstructed\nunrecordable\nunrecorded\nunrecordedness\nunrecording\nunrecountable\nunrecounted\nunrecoverable\nunrecoverableness\nunrecoverably\nunrecovered\nunrecreant\nunrecreated\nunrecreating\nunrecriminative\nunrecruitable\nunrecruited\nunrectangular\nunrectifiable\nunrectifiably\nunrectified\nunrecumbent\nunrecuperated\nunrecurrent\nunrecurring\nunrecusant\nunred\nunredacted\nunredeemable\nunredeemableness\nunredeemably\nunredeemed\nunredeemedly\nunredeemedness\nunredeeming\nunredressable\nunredressed\nunreduceable\nunreduced\nunreducible\nunreducibleness\nunreducibly\nunreduct\nunreefed\nunreel\nunreelable\nunreeled\nunreeling\nunreeve\nunreeving\nunreferenced\nunreferred\nunrefilled\nunrefine\nunrefined\nunrefinedly\nunrefinedness\nunrefinement\nunrefining\nunrefitted\nunreflected\nunreflecting\nunreflectingly\nunreflectingness\nunreflective\nunreflectively\nunreformable\nunreformed\nunreformedness\nunreforming\nunrefracted\nunrefracting\nunrefrainable\nunrefrained\nunrefraining\nunrefreshed\nunrefreshful\nunrefreshing\nunrefreshingly\nunrefrigerated\nunrefulgent\nunrefunded\nunrefunding\nunrefusable\nunrefusably\nunrefused\nunrefusing\nunrefusingly\nunrefutable\nunrefuted\nunrefuting\nunregainable\nunregained\nunregal\nunregaled\nunregality\nunregally\nunregard\nunregardable\nunregardant\nunregarded\nunregardedly\nunregardful\nunregeneracy\nunregenerate\nunregenerately\nunregenerateness\nunregenerating\nunregeneration\nunregimented\nunregistered\nunregressive\nunregretful\nunregretfully\nunregretfulness\nunregrettable\nunregretted\nunregretting\nunregular\nunregulated\nunregulative\nunregurgitated\nunrehabilitated\nunrehearsable\nunrehearsed\nunrehearsing\nunreigning\nunreimbodied\nunrein\nunreined\nunreinstated\nunreiterable\nunreiterated\nunrejectable\nunrejoiced\nunrejoicing\nunrejuvenated\nunrelapsing\nunrelated\nunrelatedness\nunrelating\nunrelational\nunrelative\nunrelatively\nunrelaxable\nunrelaxed\nunrelaxing\nunrelaxingly\nunreleasable\nunreleased\nunreleasing\nunrelegated\nunrelentance\nunrelented\nunrelenting\nunrelentingly\nunrelentingness\nunrelentor\nunrelevant\nunreliability\nunreliable\nunreliableness\nunreliably\nunreliance\nunrelievable\nunrelievableness\nunrelieved\nunrelievedly\nunreligion\nunreligioned\nunreligious\nunreligiously\nunreligiousness\nunrelinquishable\nunrelinquishably\nunrelinquished\nunrelinquishing\nunrelishable\nunrelished\nunrelishing\nunreluctant\nunreluctantly\nunremaining\nunremanded\nunremarkable\nunremarked\nunremarried\nunremediable\nunremedied\nunremember\nunrememberable\nunremembered\nunremembering\nunremembrance\nunreminded\nunremissible\nunremittable\nunremitted\nunremittedly\nunremittent\nunremittently\nunremitting\nunremittingly\nunremittingness\nunremonstrant\nunremonstrated\nunremonstrating\nunremorseful\nunremorsefully\nunremote\nunremotely\nunremounted\nunremovable\nunremovableness\nunremovably\nunremoved\nunremunerated\nunremunerating\nunremunerative\nunremuneratively\nunremunerativeness\nunrenderable\nunrendered\nunrenewable\nunrenewed\nunrenounceable\nunrenounced\nunrenouncing\nunrenovated\nunrenowned\nunrenownedly\nunrenownedness\nunrent\nunrentable\nunrented\nunreorganized\nunrepaid\nunrepair\nunrepairable\nunrepaired\nunrepartable\nunreparted\nunrepealability\nunrepealable\nunrepealableness\nunrepealably\nunrepealed\nunrepeatable\nunrepeated\nunrepellable\nunrepelled\nunrepellent\nunrepent\nunrepentable\nunrepentance\nunrepentant\nunrepentantly\nunrepentantness\nunrepented\nunrepenting\nunrepentingly\nunrepentingness\nunrepetitive\nunrepined\nunrepining\nunrepiningly\nunrepiqued\nunreplaceable\nunreplaced\nunreplenished\nunrepleviable\nunreplevined\nunrepliable\nunrepliably\nunreplied\nunreplying\nunreportable\nunreported\nunreportedly\nunreportedness\nunrepose\nunreposed\nunreposeful\nunreposefulness\nunreposing\nunrepossessed\nunreprehended\nunrepresentable\nunrepresentation\nunrepresentative\nunrepresented\nunrepresentedness\nunrepressed\nunrepressible\nunreprievable\nunreprievably\nunreprieved\nunreprimanded\nunreprinted\nunreproachable\nunreproachableness\nunreproachably\nunreproached\nunreproachful\nunreproachfully\nunreproaching\nunreproachingly\nunreprobated\nunreproducible\nunreprovable\nunreprovableness\nunreprovably\nunreproved\nunreprovedly\nunreprovedness\nunreproving\nunrepublican\nunrepudiable\nunrepudiated\nunrepugnant\nunrepulsable\nunrepulsed\nunrepulsing\nunrepulsive\nunreputable\nunreputed\nunrequalified\nunrequested\nunrequickened\nunrequired\nunrequisite\nunrequitable\nunrequital\nunrequited\nunrequitedly\nunrequitedness\nunrequitement\nunrequiter\nunrequiting\nunrescinded\nunrescued\nunresemblant\nunresembling\nunresented\nunresentful\nunresenting\nunreserve\nunreserved\nunreservedly\nunreservedness\nunresifted\nunresigned\nunresistable\nunresistably\nunresistance\nunresistant\nunresistantly\nunresisted\nunresistedly\nunresistedness\nunresistible\nunresistibleness\nunresistibly\nunresisting\nunresistingly\nunresistingness\nunresolute\nunresolvable\nunresolve\nunresolved\nunresolvedly\nunresolvedness\nunresolving\nunresonant\nunresounded\nunresounding\nunresourceful\nunresourcefulness\nunrespect\nunrespectability\nunrespectable\nunrespected\nunrespectful\nunrespectfully\nunrespectfulness\nunrespective\nunrespectively\nunrespectiveness\nunrespirable\nunrespired\nunrespited\nunresplendent\nunresponding\nunresponsible\nunresponsibleness\nunresponsive\nunresponsively\nunresponsiveness\nunrest\nunrestable\nunrested\nunrestful\nunrestfully\nunrestfulness\nunresting\nunrestingly\nunrestingness\nunrestorable\nunrestored\nunrestrainable\nunrestrainably\nunrestrained\nunrestrainedly\nunrestrainedness\nunrestraint\nunrestrictable\nunrestricted\nunrestrictedly\nunrestrictedness\nunrestrictive\nunresty\nunresultive\nunresumed\nunresumptive\nunretainable\nunretained\nunretaliated\nunretaliating\nunretardable\nunretarded\nunretentive\nunreticent\nunretinued\nunretired\nunretiring\nunretorted\nunretouched\nunretractable\nunretracted\nunretreating\nunretrenchable\nunretrenched\nunretrievable\nunretrieved\nunretrievingly\nunretted\nunreturnable\nunreturnably\nunreturned\nunreturning\nunreturningly\nunrevealable\nunrevealed\nunrevealedness\nunrevealing\nunrevealingly\nunrevelationize\nunrevenged\nunrevengeful\nunrevengefulness\nunrevenging\nunrevengingly\nunrevenue\nunrevenued\nunreverberated\nunrevered\nunreverence\nunreverenced\nunreverend\nunreverendly\nunreverent\nunreverential\nunreverently\nunreverentness\nunreversable\nunreversed\nunreversible\nunreverted\nunrevertible\nunreverting\nunrevested\nunrevetted\nunreviewable\nunreviewed\nunreviled\nunrevised\nunrevivable\nunrevived\nunrevocable\nunrevocableness\nunrevocably\nunrevoked\nunrevolted\nunrevolting\nunrevolutionary\nunrevolutionized\nunrevolved\nunrevolving\nunrewardable\nunrewarded\nunrewardedly\nunrewarding\nunreworded\nunrhetorical\nunrhetorically\nunrhetoricalness\nunrhyme\nunrhymed\nunrhythmic\nunrhythmical\nunrhythmically\nunribbed\nunribboned\nunrich\nunriched\nunricht\nunricked\nunrid\nunridable\nunridableness\nunridably\nunridden\nunriddle\nunriddleable\nunriddled\nunriddler\nunriddling\nunride\nunridely\nunridered\nunridged\nunridiculed\nunridiculous\nunrife\nunriffled\nunrifled\nunrifted\nunrig\nunrigged\nunrigging\nunright\nunrightable\nunrighted\nunrighteous\nunrighteously\nunrighteousness\nunrightful\nunrightfully\nunrightfulness\nunrightly\nunrightwise\nunrigid\nunrigorous\nunrimpled\nunrind\nunring\nunringable\nunringed\nunringing\nunrinsed\nunrioted\nunrioting\nunriotous\nunrip\nunripe\nunriped\nunripely\nunripened\nunripeness\nunripening\nunrippable\nunripped\nunripping\nunrippled\nunrippling\nunripplingly\nunrisen\nunrising\nunriskable\nunrisked\nunrisky\nunritual\nunritualistic\nunrivalable\nunrivaled\nunrivaledly\nunrivaledness\nunrived\nunriven\nunrivet\nunriveted\nunriveting\nunroaded\nunroadworthy\nunroaming\nunroast\nunroasted\nunrobbed\nunrobe\nunrobed\nunrobust\nunrocked\nunrococo\nunrodded\nunroiled\nunroll\nunrollable\nunrolled\nunroller\nunrolling\nunrollment\nunromantic\nunromantical\nunromantically\nunromanticalness\nunromanticized\nunroof\nunroofed\nunroofing\nunroomy\nunroost\nunroosted\nunroosting\nunroot\nunrooted\nunrooting\nunrope\nunroped\nunrosed\nunrosined\nunrostrated\nunrotated\nunrotating\nunroted\nunrotted\nunrotten\nunrotund\nunrouged\nunrough\nunroughened\nunround\nunrounded\nunrounding\nunrousable\nunroused\nunroutable\nunrouted\nunrove\nunroved\nunroving\nunrow\nunrowed\nunroweled\nunroyal\nunroyalist\nunroyalized\nunroyally\nunroyalness\nUnrra\nunrubbed\nunrubbish\nunrubified\nunrubrical\nunrubricated\nunruddered\nunruddled\nunrueful\nunruffable\nunruffed\nunruffle\nunruffled\nunruffling\nunrugged\nunruinable\nunruinated\nunruined\nunrulable\nunrulableness\nunrule\nunruled\nunruledly\nunruledness\nunruleful\nunrulily\nunruliness\nunruly\nunruminated\nunruminating\nunruminatingly\nunrummaged\nunrumored\nunrumple\nunrumpled\nunrun\nunrung\nunruptured\nunrural\nunrushed\nUnrussian\nunrust\nunrusted\nunrustic\nunrusticated\nunrustling\nunruth\nunsabbatical\nunsabered\nunsabled\nunsabred\nunsaccharic\nunsacerdotal\nunsacerdotally\nunsack\nunsacked\nunsacramental\nunsacramentally\nunsacramentarian\nunsacred\nunsacredly\nunsacrificeable\nunsacrificeably\nunsacrificed\nunsacrificial\nunsacrificing\nunsacrilegious\nunsad\nunsadden\nunsaddened\nunsaddle\nunsaddled\nunsaddling\nunsafe\nunsafeguarded\nunsafely\nunsafeness\nunsafety\nunsagacious\nunsage\nunsagging\nunsaid\nunsailable\nunsailed\nunsailorlike\nunsaint\nunsainted\nunsaintlike\nunsaintly\nunsalability\nunsalable\nunsalableness\nunsalably\nunsalaried\nunsalesmanlike\nunsaline\nunsalivated\nunsallying\nunsalmonlike\nunsalt\nunsaltable\nunsaltatory\nunsalted\nunsalubrious\nunsalutary\nunsaluted\nunsaluting\nunsalvability\nunsalvable\nunsalvableness\nunsalvaged\nunsalved\nunsampled\nunsanctification\nunsanctified\nunsanctifiedly\nunsanctifiedness\nunsanctify\nunsanctifying\nunsanctimonious\nunsanctimoniously\nunsanctimoniousness\nunsanction\nunsanctionable\nunsanctioned\nunsanctioning\nunsanctitude\nunsanctity\nunsanctuaried\nunsandaled\nunsanded\nunsane\nunsanguinary\nunsanguine\nunsanguinely\nunsanguineness\nunsanguineous\nunsanguineously\nunsanitariness\nunsanitary\nunsanitated\nunsanitation\nunsanity\nunsaponifiable\nunsaponified\nunsapped\nunsappy\nunsarcastic\nunsardonic\nunsartorial\nunsash\nunsashed\nunsatable\nunsatanic\nunsated\nunsatedly\nunsatedness\nunsatiability\nunsatiable\nunsatiableness\nunsatiably\nunsatiate\nunsatiated\nunsatiating\nunsatin\nunsatire\nunsatirical\nunsatirically\nunsatirize\nunsatirized\nunsatisfaction\nunsatisfactorily\nunsatisfactoriness\nunsatisfactory\nunsatisfiable\nunsatisfiableness\nunsatisfiably\nunsatisfied\nunsatisfiedly\nunsatisfiedness\nunsatisfying\nunsatisfyingly\nunsatisfyingness\nunsaturable\nunsaturated\nunsaturatedly\nunsaturatedness\nunsaturation\nunsatyrlike\nunsauced\nunsaurian\nunsavable\nunsaveable\nunsaved\nunsaving\nunsavored\nunsavoredly\nunsavoredness\nunsavorily\nunsavoriness\nunsavory\nunsawed\nunsawn\nunsay\nunsayability\nunsayable\nunscabbard\nunscabbarded\nunscabbed\nunscaffolded\nunscalable\nunscalableness\nunscalably\nunscale\nunscaled\nunscaledness\nunscalloped\nunscaly\nunscamped\nunscandalize\nunscandalized\nunscandalous\nunscannable\nunscanned\nunscanted\nunscanty\nunscarb\nunscarce\nunscared\nunscarfed\nunscarified\nunscarred\nunscathed\nunscathedly\nunscathedness\nunscattered\nunscavengered\nunscenic\nunscent\nunscented\nunscepter\nunsceptered\nunsceptical\nunsceptre\nunsceptred\nunscheduled\nunschematic\nunschematized\nunscholar\nunscholarlike\nunscholarly\nunscholastic\nunschool\nunschooled\nunschooledly\nunschooledness\nunscienced\nunscientific\nunscientifical\nunscientifically\nunscintillating\nunscioned\nunscissored\nunscoffed\nunscoffing\nunscolded\nunsconced\nunscooped\nunscorched\nunscored\nunscorified\nunscoring\nunscorned\nunscornful\nunscornfully\nunscornfulness\nunscotch\nunscotched\nunscottify\nunscoured\nunscourged\nunscowling\nunscramble\nunscrambling\nunscraped\nunscratchable\nunscratched\nunscratching\nunscratchingly\nunscrawled\nunscreen\nunscreenable\nunscreenably\nunscreened\nunscrew\nunscrewable\nunscrewed\nunscrewing\nunscribal\nunscribbled\nunscribed\nunscrimped\nunscriptural\nunscripturally\nunscripturalness\nunscrubbed\nunscrupled\nunscrupulosity\nunscrupulous\nunscrupulously\nunscrupulousness\nunscrutable\nunscrutinized\nunscrutinizing\nunscrutinizingly\nunsculptural\nunsculptured\nunscummed\nunscutcheoned\nunseafaring\nunseal\nunsealable\nunsealed\nunsealer\nunsealing\nunseam\nunseamanlike\nunseamanship\nunseamed\nunseaming\nunsearchable\nunsearchableness\nunsearchably\nunsearched\nunsearcherlike\nunsearching\nunseared\nunseason\nunseasonable\nunseasonableness\nunseasonably\nunseasoned\nunseat\nunseated\nunseaworthiness\nunseaworthy\nunseceding\nunsecluded\nunseclusive\nunseconded\nunsecrecy\nunsecret\nunsecretarylike\nunsecreted\nunsecreting\nunsecretly\nunsecretness\nunsectarian\nunsectarianism\nunsectarianize\nunsectional\nunsecular\nunsecularize\nunsecularized\nunsecure\nunsecured\nunsecuredly\nunsecuredness\nunsecurely\nunsecureness\nunsecurity\nunsedate\nunsedentary\nunseditious\nunseduce\nunseduced\nunseducible\nunseductive\nunsedulous\nunsee\nunseeable\nunseeded\nunseeing\nunseeingly\nunseeking\nunseeming\nunseemingly\nunseemlily\nunseemliness\nunseemly\nunseen\nunseethed\nunsegmented\nunsegregable\nunsegregated\nunsegregatedness\nunseignorial\nunseismic\nunseizable\nunseized\nunseldom\nunselect\nunselected\nunselecting\nunselective\nunself\nunselfish\nunselfishly\nunselfishness\nunselflike\nunselfness\nunselling\nunsenatorial\nunsenescent\nunsensational\nunsense\nunsensed\nunsensibility\nunsensible\nunsensibleness\nunsensibly\nunsensitive\nunsensitize\nunsensitized\nunsensory\nunsensual\nunsensualize\nunsensualized\nunsensually\nunsensuous\nunsensuousness\nunsent\nunsentenced\nunsententious\nunsentient\nunsentimental\nunsentimentalist\nunsentimentality\nunsentimentalize\nunsentimentally\nunsentineled\nunsentinelled\nunseparable\nunseparableness\nunseparably\nunseparate\nunseparated\nunseptate\nunseptated\nunsepulcher\nunsepulchered\nunsepulchral\nunsepulchre\nunsepulchred\nunsepultured\nunsequenced\nunsequential\nunsequestered\nunseraphical\nunserenaded\nunserene\nunserflike\nunserious\nunseriousness\nunserrated\nunserried\nunservable\nunserved\nunserviceability\nunserviceable\nunserviceableness\nunserviceably\nunservicelike\nunservile\nunsesquipedalian\nunset\nunsetting\nunsettle\nunsettleable\nunsettled\nunsettledness\nunsettlement\nunsettling\nunseverable\nunseverableness\nunsevere\nunsevered\nunseveredly\nunseveredness\nunsew\nunsewed\nunsewered\nunsewing\nunsewn\nunsex\nunsexed\nunsexing\nunsexlike\nunsexual\nunshackle\nunshackled\nunshackling\nunshade\nunshaded\nunshadow\nunshadowable\nunshadowed\nunshady\nunshafted\nunshakable\nunshakably\nunshakeable\nunshakeably\nunshaken\nunshakenly\nunshakenness\nunshaking\nunshakingness\nunshaled\nunshamable\nunshamableness\nunshamably\nunshameable\nunshameableness\nunshameably\nunshamed\nunshamefaced\nunshamefacedness\nunshameful\nunshamefully\nunshamefulness\nunshammed\nunshanked\nunshapable\nunshape\nunshapeable\nunshaped\nunshapedness\nunshapeliness\nunshapely\nunshapen\nunshapenly\nunshapenness\nunsharable\nunshared\nunsharedness\nunsharing\nunsharp\nunsharped\nunsharpen\nunsharpened\nunsharpening\nunsharping\nunshattered\nunshavable\nunshaveable\nunshaved\nunshavedly\nunshavedness\nunshaven\nunshavenly\nunshavenness\nunshawl\nunsheaf\nunsheared\nunsheathe\nunsheathed\nunsheathing\nunshed\nunsheet\nunsheeted\nunsheeting\nunshell\nunshelled\nunshelling\nunshelterable\nunsheltered\nunsheltering\nunshelve\nunshepherded\nunshepherding\nunsheriff\nunshewed\nunshieldable\nunshielded\nunshielding\nunshiftable\nunshifted\nunshiftiness\nunshifting\nunshifty\nunshimmering\nunshingled\nunshining\nunship\nunshiplike\nunshipment\nunshipped\nunshipping\nunshipshape\nunshipwrecked\nunshirking\nunshirted\nunshivered\nunshivering\nunshockable\nunshocked\nunshod\nunshodden\nunshoe\nunshoed\nunshoeing\nunshop\nunshore\nunshored\nunshorn\nunshort\nunshortened\nunshot\nunshotted\nunshoulder\nunshouted\nunshouting\nunshoved\nunshoveled\nunshowable\nunshowed\nunshowmanlike\nunshown\nunshowy\nunshredded\nunshrew\nunshrewd\nunshrewish\nunshrill\nunshrine\nunshrined\nunshrinement\nunshrink\nunshrinkability\nunshrinkable\nunshrinking\nunshrinkingly\nunshrived\nunshriveled\nunshrivelled\nunshriven\nunshroud\nunshrouded\nunshrubbed\nunshrugging\nunshrunk\nunshrunken\nunshuddering\nunshuffle\nunshuffled\nunshunnable\nunshunned\nunshunted\nunshut\nunshutter\nunshuttered\nunshy\nunshyly\nunshyness\nunsibilant\nunsiccated\nunsick\nunsickened\nunsicker\nunsickerly\nunsickerness\nunsickled\nunsickly\nunsided\nunsiding\nunsiege\nunsifted\nunsighing\nunsight\nunsightable\nunsighted\nunsighting\nunsightliness\nunsightly\nunsigmatic\nunsignable\nunsignaled\nunsignalized\nunsignalled\nunsignatured\nunsigned\nunsigneted\nunsignificancy\nunsignificant\nunsignificantly\nunsignificative\nunsignified\nunsignifying\nunsilenceable\nunsilenceably\nunsilenced\nunsilent\nunsilentious\nunsilently\nunsilicified\nunsilly\nunsilvered\nunsimilar\nunsimilarity\nunsimilarly\nunsimple\nunsimplicity\nunsimplified\nunsimplify\nunsimulated\nunsimultaneous\nunsin\nunsincere\nunsincerely\nunsincereness\nunsincerity\nunsinew\nunsinewed\nunsinewing\nunsinewy\nunsinful\nunsinfully\nunsinfulness\nunsing\nunsingability\nunsingable\nunsingableness\nunsinged\nunsingle\nunsingled\nunsingleness\nunsingular\nunsinister\nunsinkability\nunsinkable\nunsinking\nunsinnable\nunsinning\nunsinningness\nunsiphon\nunsipped\nunsister\nunsistered\nunsisterliness\nunsisterly\nunsizable\nunsizableness\nunsizeable\nunsizeableness\nunsized\nunskaithd\nunskeptical\nunsketchable\nunsketched\nunskewed\nunskewered\nunskilful\nunskilfully\nunskilled\nunskilledly\nunskilledness\nunskillful\nunskillfully\nunskillfulness\nunskimmed\nunskin\nunskinned\nunskirted\nunslack\nunslacked\nunslackened\nunslackening\nunslacking\nunslagged\nunslain\nunslakable\nunslakeable\nunslaked\nunslammed\nunslandered\nunslanderous\nunslapped\nunslashed\nunslate\nunslated\nunslating\nunslaughtered\nunslave\nunslayable\nunsleaved\nunsleek\nunsleepably\nunsleeping\nunsleepingly\nunsleepy\nunsleeve\nunsleeved\nunslender\nunslept\nunsliced\nunsliding\nunslighted\nunsling\nunslip\nunslipped\nunslippery\nunslipping\nunslit\nunslockened\nunsloped\nunslopped\nunslot\nunslothful\nunslothfully\nunslothfulness\nunslotted\nunsloughed\nunsloughing\nunslow\nunsluggish\nunsluice\nunsluiced\nunslumbering\nunslumberous\nunslumbrous\nunslung\nunslurred\nunsly\nunsmacked\nunsmart\nunsmartly\nunsmartness\nunsmeared\nunsmelled\nunsmelling\nunsmelted\nunsmiled\nunsmiling\nunsmilingly\nunsmilingness\nunsmirched\nunsmirking\nunsmitten\nunsmokable\nunsmokeable\nunsmoked\nunsmokified\nunsmoking\nunsmoky\nunsmooth\nunsmoothed\nunsmoothly\nunsmoothness\nunsmote\nunsmotherable\nunsmothered\nunsmudged\nunsmuggled\nunsmutched\nunsmutted\nunsmutty\nunsnaffled\nunsnagged\nunsnaggled\nunsnaky\nunsnap\nunsnapped\nunsnare\nunsnared\nunsnarl\nunsnatch\nunsnatched\nunsneck\nunsneering\nunsnib\nunsnipped\nunsnobbish\nunsnoring\nunsnouted\nunsnow\nunsnubbable\nunsnubbed\nunsnuffed\nunsoaked\nunsoaped\nunsoarable\nunsober\nunsoberly\nunsoberness\nunsobriety\nunsociability\nunsociable\nunsociableness\nunsociably\nunsocial\nunsocialism\nunsocialistic\nunsociality\nunsocializable\nunsocialized\nunsocially\nunsocialness\nunsociological\nunsocket\nunsodden\nunsoft\nunsoftened\nunsoftening\nunsoggy\nunsoil\nunsoiled\nunsoiledness\nunsolaced\nunsolacing\nunsolar\nunsold\nunsolder\nunsoldered\nunsoldering\nunsoldier\nunsoldiered\nunsoldierlike\nunsoldierly\nunsole\nunsoled\nunsolemn\nunsolemness\nunsolemnize\nunsolemnized\nunsolemnly\nunsolicitated\nunsolicited\nunsolicitedly\nunsolicitous\nunsolicitously\nunsolicitousness\nunsolid\nunsolidarity\nunsolidifiable\nunsolidified\nunsolidity\nunsolidly\nunsolidness\nunsolitary\nunsolubility\nunsoluble\nunsolvable\nunsolvableness\nunsolvably\nunsolved\nunsomatic\nunsomber\nunsombre\nunsome\nunson\nunsonable\nunsonant\nunsonlike\nunsonneted\nunsonorous\nunsonsy\nunsoothable\nunsoothed\nunsoothfast\nunsoothing\nunsooty\nunsophistical\nunsophistically\nunsophisticate\nunsophisticated\nunsophisticatedly\nunsophisticatedness\nunsophistication\nunsophomoric\nunsordid\nunsore\nunsorrowed\nunsorrowing\nunsorry\nunsort\nunsortable\nunsorted\nunsorting\nunsotted\nunsought\nunsoul\nunsoulful\nunsoulfully\nunsoulish\nunsound\nunsoundable\nunsoundableness\nunsounded\nunsounding\nunsoundly\nunsoundness\nunsour\nunsoured\nunsoused\nunsovereign\nunsowed\nunsown\nunspaced\nunspacious\nunspaded\nunspan\nunspangled\nunspanked\nunspanned\nunspar\nunsparable\nunspared\nunsparing\nunsparingly\nunsparingness\nunsparkling\nunsparred\nunsparse\nunspatial\nunspatiality\nunspattered\nunspawned\nunspayed\nunspeak\nunspeakability\nunspeakable\nunspeakableness\nunspeakably\nunspeaking\nunspeared\nunspecialized\nunspecializing\nunspecific\nunspecified\nunspecifiedly\nunspecious\nunspecked\nunspeckled\nunspectacled\nunspectacular\nunspectacularly\nunspecterlike\nunspectrelike\nunspeculating\nunspeculative\nunspeculatively\nunsped\nunspeed\nunspeedy\nunspeered\nunspell\nunspellable\nunspelled\nunspelt\nunspendable\nunspending\nunspent\nunspewed\nunsphere\nunsphered\nunsphering\nunspiable\nunspiced\nunspicy\nunspied\nunspike\nunspillable\nunspin\nunspinsterlike\nunspinsterlikeness\nunspiral\nunspired\nunspirit\nunspirited\nunspiritedly\nunspiriting\nunspiritual\nunspirituality\nunspiritualize\nunspiritualized\nunspiritually\nunspiritualness\nunspissated\nunspit\nunspited\nunspiteful\nunspitted\nunsplashed\nunsplattered\nunsplayed\nunspleened\nunspleenish\nunspleenishly\nunsplendid\nunspliced\nunsplinted\nunsplintered\nunsplit\nunspoil\nunspoilable\nunspoilableness\nunspoilably\nunspoiled\nunspoken\nunspokenly\nunsponged\nunspongy\nunsponsored\nunspontaneous\nunspontaneously\nunspookish\nunsported\nunsportful\nunsporting\nunsportive\nunsportsmanlike\nunsportsmanly\nunspot\nunspotlighted\nunspottable\nunspotted\nunspottedly\nunspottedness\nunspoused\nunspouselike\nunspouted\nunsprained\nunsprayed\nunspread\nunsprightliness\nunsprightly\nunspring\nunspringing\nunspringlike\nunsprinkled\nunsprinklered\nunsprouted\nunsproutful\nunsprouting\nunspruced\nunsprung\nunspun\nunspurned\nunspurred\nunspying\nunsquandered\nunsquarable\nunsquare\nunsquared\nunsquashed\nunsqueamish\nunsqueezable\nunsqueezed\nunsquelched\nunsquinting\nunsquire\nunsquired\nunsquirelike\nunsquirted\nunstabbed\nunstability\nunstable\nunstabled\nunstableness\nunstablished\nunstably\nunstack\nunstacked\nunstacker\nunstaffed\nunstaged\nunstaggered\nunstaggering\nunstagnating\nunstagy\nunstaid\nunstaidly\nunstaidness\nunstain\nunstainable\nunstainableness\nunstained\nunstainedly\nunstainedness\nunstaled\nunstalked\nunstalled\nunstammering\nunstamped\nunstampeded\nunstanch\nunstanchable\nunstandard\nunstandardized\nunstanzaic\nunstar\nunstarch\nunstarched\nunstarlike\nunstarred\nunstarted\nunstarting\nunstartled\nunstarved\nunstatable\nunstate\nunstateable\nunstated\nunstately\nunstatesmanlike\nunstatic\nunstating\nunstation\nunstationary\nunstationed\nunstatistic\nunstatistical\nunstatued\nunstatuesque\nunstatutable\nunstatutably\nunstaunch\nunstaunchable\nunstaunched\nunstavable\nunstaveable\nunstaved\nunstayable\nunstayed\nunstayedness\nunstaying\nunsteadfast\nunsteadfastly\nunsteadfastness\nunsteadied\nunsteadily\nunsteadiness\nunsteady\nunsteadying\nunstealthy\nunsteamed\nunsteaming\nunsteck\nunstecked\nunsteel\nunsteeled\nunsteep\nunsteeped\nunsteepled\nunsteered\nunstemmable\nunstemmed\nunstentorian\nunstep\nunstercorated\nunstereotyped\nunsterile\nunsterilized\nunstern\nunstethoscoped\nunstewardlike\nunstewed\nunstick\nunsticking\nunstickingness\nunsticky\nunstiffen\nunstiffened\nunstifled\nunstigmatized\nunstill\nunstilled\nunstillness\nunstilted\nunstimulated\nunstimulating\nunsting\nunstinged\nunstinging\nunstinted\nunstintedly\nunstinting\nunstintingly\nunstippled\nunstipulated\nunstirrable\nunstirred\nunstirring\nunstitch\nunstitched\nunstitching\nunstock\nunstocked\nunstocking\nunstockinged\nunstoic\nunstoical\nunstoically\nunstoicize\nunstoked\nunstoken\nunstolen\nunstonable\nunstone\nunstoned\nunstoniness\nunstony\nunstooping\nunstop\nunstoppable\nunstopped\nunstopper\nunstoppered\nunstopple\nunstore\nunstored\nunstoried\nunstormed\nunstormy\nunstout\nunstoved\nunstow\nunstowed\nunstraddled\nunstrafed\nunstraight\nunstraightened\nunstraightforward\nunstraightness\nunstrain\nunstrained\nunstraitened\nunstrand\nunstranded\nunstrange\nunstrangered\nunstrangled\nunstrangulable\nunstrap\nunstrapped\nunstrategic\nunstrategically\nunstratified\nunstraying\nunstreaked\nunstrength\nunstrengthen\nunstrengthened\nunstrenuous\nunstressed\nunstressedly\nunstressedness\nunstretch\nunstretched\nunstrewed\nunstrewn\nunstriated\nunstricken\nunstrictured\nunstridulous\nunstrike\nunstriking\nunstring\nunstringed\nunstringing\nunstrip\nunstriped\nunstripped\nunstriving\nunstroked\nunstrong\nunstructural\nunstruggling\nunstrung\nunstubbed\nunstubborn\nunstuccoed\nunstuck\nunstudded\nunstudied\nunstudious\nunstuff\nunstuffed\nunstuffing\nunstultified\nunstumbling\nunstung\nunstunned\nunstunted\nunstupefied\nunstupid\nunstuttered\nunstuttering\nunsty\nunstyled\nunstylish\nunstylishly\nunstylishness\nunsubdivided\nunsubduable\nunsubduableness\nunsubduably\nunsubducted\nunsubdued\nunsubduedly\nunsubduedness\nunsubject\nunsubjectable\nunsubjected\nunsubjectedness\nunsubjection\nunsubjective\nunsubjectlike\nunsubjugate\nunsubjugated\nunsublimable\nunsublimated\nunsublimed\nunsubmerged\nunsubmergible\nunsubmerging\nunsubmission\nunsubmissive\nunsubmissively\nunsubmissiveness\nunsubmitted\nunsubmitting\nunsubordinate\nunsubordinated\nunsuborned\nunsubpoenaed\nunsubscribed\nunsubscribing\nunsubservient\nunsubsided\nunsubsidiary\nunsubsiding\nunsubsidized\nunsubstanced\nunsubstantial\nunsubstantiality\nunsubstantialize\nunsubstantially\nunsubstantialness\nunsubstantiate\nunsubstantiated\nunsubstantiation\nunsubstituted\nunsubtle\nunsubtleness\nunsubtlety\nunsubtly\nunsubtracted\nunsubventioned\nunsubventionized\nunsubversive\nunsubvertable\nunsubverted\nunsubvertive\nunsucceedable\nunsucceeded\nunsucceeding\nunsuccess\nunsuccessful\nunsuccessfully\nunsuccessfulness\nunsuccessive\nunsuccessively\nunsuccessiveness\nunsuccinct\nunsuccorable\nunsuccored\nunsucculent\nunsuccumbing\nunsucked\nunsuckled\nunsued\nunsufferable\nunsufferableness\nunsufferably\nunsuffered\nunsuffering\nunsufficed\nunsufficience\nunsufficiency\nunsufficient\nunsufficiently\nunsufficing\nunsufficingness\nunsufflated\nunsuffocate\nunsuffocated\nunsuffocative\nunsuffused\nunsugared\nunsugary\nunsuggested\nunsuggestedness\nunsuggestive\nunsuggestiveness\nunsuit\nunsuitability\nunsuitable\nunsuitableness\nunsuitably\nunsuited\nunsuiting\nunsulky\nunsullen\nunsulliable\nunsullied\nunsulliedly\nunsulliedness\nunsulphonated\nunsulphureous\nunsulphurized\nunsultry\nunsummable\nunsummarized\nunsummed\nunsummered\nunsummerlike\nunsummerly\nunsummonable\nunsummoned\nunsumptuary\nunsumptuous\nunsun\nunsunburned\nunsundered\nunsung\nunsunk\nunsunken\nunsunned\nunsunny\nunsuperable\nunsuperannuated\nunsupercilious\nunsuperficial\nunsuperfluous\nunsuperior\nunsuperlative\nunsupernatural\nunsupernaturalize\nunsupernaturalized\nunsuperscribed\nunsuperseded\nunsuperstitious\nunsupervised\nunsupervisedly\nunsupped\nunsupplantable\nunsupplanted\nunsupple\nunsuppled\nunsupplemented\nunsuppliable\nunsupplicated\nunsupplied\nunsupportable\nunsupportableness\nunsupportably\nunsupported\nunsupportedly\nunsupportedness\nunsupporting\nunsupposable\nunsupposed\nunsuppressed\nunsuppressible\nunsuppressibly\nunsuppurated\nunsuppurative\nunsupreme\nunsurcharge\nunsurcharged\nunsure\nunsurfaced\nunsurfeited\nunsurfeiting\nunsurgical\nunsurging\nunsurmised\nunsurmising\nunsurmountable\nunsurmountableness\nunsurmountably\nunsurmounted\nunsurnamed\nunsurpassable\nunsurpassableness\nunsurpassably\nunsurpassed\nunsurplice\nunsurpliced\nunsurprised\nunsurprising\nunsurrendered\nunsurrendering\nunsurrounded\nunsurveyable\nunsurveyed\nunsurvived\nunsurviving\nunsusceptibility\nunsusceptible\nunsusceptibleness\nunsusceptibly\nunsusceptive\nunsuspectable\nunsuspectably\nunsuspected\nunsuspectedly\nunsuspectedness\nunsuspectful\nunsuspectfulness\nunsuspectible\nunsuspecting\nunsuspectingly\nunsuspectingness\nunsuspective\nunsuspended\nunsuspicion\nunsuspicious\nunsuspiciously\nunsuspiciousness\nunsustainable\nunsustained\nunsustaining\nunsutured\nunswabbed\nunswaddle\nunswaddled\nunswaddling\nunswallowable\nunswallowed\nunswanlike\nunswapped\nunswarming\nunswathable\nunswathe\nunswathed\nunswathing\nunswayable\nunswayed\nunswayedness\nunswaying\nunswear\nunswearing\nunsweat\nunsweated\nunsweating\nunsweepable\nunsweet\nunsweeten\nunsweetened\nunsweetenedness\nunsweetly\nunsweetness\nunswell\nunswelled\nunswelling\nunsweltered\nunswept\nunswervable\nunswerved\nunswerving\nunswervingly\nunswilled\nunswing\nunswingled\nunswitched\nunswivel\nunswollen\nunswooning\nunsworn\nunswung\nunsyllabic\nunsyllabled\nunsyllogistical\nunsymbolic\nunsymbolical\nunsymbolically\nunsymbolicalness\nunsymbolized\nunsymmetrical\nunsymmetrically\nunsymmetricalness\nunsymmetrized\nunsymmetry\nunsympathetic\nunsympathetically\nunsympathizability\nunsympathizable\nunsympathized\nunsympathizing\nunsympathizingly\nunsympathy\nunsymphonious\nunsymptomatic\nunsynchronized\nunsynchronous\nunsyncopated\nunsyndicated\nunsynonymous\nunsyntactical\nunsynthetic\nunsyringed\nunsystematic\nunsystematical\nunsystematically\nunsystematized\nunsystematizedly\nunsystematizing\nunsystemizable\nuntabernacled\nuntabled\nuntabulated\nuntack\nuntacked\nuntacking\nuntackle\nuntackled\nuntactful\nuntactfully\nuntactfulness\nuntagged\nuntailed\nuntailorlike\nuntailorly\nuntaint\nuntaintable\nuntainted\nuntaintedly\nuntaintedness\nuntainting\nuntakable\nuntakableness\nuntakeable\nuntakeableness\nuntaken\nuntaking\nuntalented\nuntalkative\nuntalked\nuntalking\nuntall\nuntallied\nuntallowed\nuntamable\nuntamableness\nuntame\nuntamed\nuntamedly\nuntamedness\nuntamely\nuntameness\nuntampered\nuntangential\nuntangibility\nuntangible\nuntangibleness\nuntangibly\nuntangle\nuntangled\nuntangling\nuntanned\nuntantalized\nuntantalizing\nuntap\nuntaped\nuntapered\nuntapering\nuntapestried\nuntappable\nuntapped\nuntar\nuntarnishable\nuntarnished\nuntarred\nuntarried\nuntarrying\nuntartarized\nuntasked\nuntasseled\nuntastable\nuntaste\nuntasteable\nuntasted\nuntasteful\nuntastefully\nuntastefulness\nuntasting\nuntasty\nuntattered\nuntattooed\nuntaught\nuntaughtness\nuntaunted\nuntaut\nuntautological\nuntawdry\nuntawed\nuntax\nuntaxable\nuntaxed\nuntaxing\nunteach\nunteachable\nunteachableness\nunteachably\nunteacherlike\nunteaching\nunteam\nunteamed\nunteaming\nuntearable\nunteased\nunteasled\nuntechnical\nuntechnicalize\nuntechnically\nuntedded\nuntedious\nunteem\nunteeming\nunteethed\nuntelegraphed\nuntell\nuntellable\nuntellably\nuntelling\nuntemper\nuntemperamental\nuntemperate\nuntemperately\nuntemperateness\nuntempered\nuntempering\nuntempested\nuntempestuous\nuntempled\nuntemporal\nuntemporary\nuntemporizing\nuntemptability\nuntemptable\nuntemptably\nuntempted\nuntemptible\nuntemptibly\nuntempting\nuntemptingly\nuntemptingness\nuntenability\nuntenable\nuntenableness\nuntenably\nuntenacious\nuntenacity\nuntenant\nuntenantable\nuntenantableness\nuntenanted\nuntended\nuntender\nuntendered\nuntenderly\nuntenderness\nuntenible\nuntenibleness\nuntenibly\nuntense\nuntent\nuntentaculate\nuntented\nuntentered\nuntenty\nunterminable\nunterminableness\nunterminably\nunterminated\nunterminating\nunterraced\nunterrestrial\nunterrible\nunterribly\nunterrifiable\nunterrific\nunterrified\nunterrifying\nunterrorized\nuntessellated\nuntestable\nuntestamentary\nuntested\nuntestifying\nuntether\nuntethered\nuntethering\nuntewed\nuntextual\nunthank\nunthanked\nunthankful\nunthankfully\nunthankfulness\nunthanking\nunthatch\nunthatched\nunthaw\nunthawed\nunthawing\nuntheatric\nuntheatrical\nuntheatrically\nuntheistic\nunthematic\nuntheological\nuntheologically\nuntheologize\nuntheoretic\nuntheoretical\nuntheorizable\nuntherapeutical\nunthick\nunthicken\nunthickened\nunthievish\nunthink\nunthinkability\nunthinkable\nunthinkableness\nunthinkably\nunthinker\nunthinking\nunthinkingly\nunthinkingness\nunthinned\nunthinning\nunthirsting\nunthirsty\nunthistle\nuntholeable\nuntholeably\nunthorn\nunthorny\nunthorough\nunthought\nunthoughted\nunthoughtedly\nunthoughtful\nunthoughtfully\nunthoughtfulness\nunthoughtlike\nunthrall\nunthralled\nunthrashed\nunthread\nunthreadable\nunthreaded\nunthreading\nunthreatened\nunthreatening\nunthreshed\nunthrid\nunthridden\nunthrift\nunthriftihood\nunthriftily\nunthriftiness\nunthriftlike\nunthrifty\nunthrilled\nunthrilling\nunthriven\nunthriving\nunthrivingly\nunthrivingness\nunthrob\nunthrone\nunthroned\nunthronged\nunthroning\nunthrottled\nunthrowable\nunthrown\nunthrushlike\nunthrust\nunthumbed\nunthumped\nunthundered\nunthwacked\nunthwarted\nuntiaraed\nunticketed\nuntickled\nuntidal\nuntidily\nuntidiness\nuntidy\nuntie\nuntied\nuntight\nuntighten\nuntightness\nuntil\nuntile\nuntiled\nuntill\nuntillable\nuntilled\nuntilling\nuntilt\nuntilted\nuntilting\nuntimbered\nuntimed\nuntimedness\nuntimeliness\nuntimely\nuntimeous\nuntimeously\nuntimesome\nuntimorous\nuntin\nuntinct\nuntinctured\nuntine\nuntinged\nuntinkered\nuntinned\nuntinseled\nuntinted\nuntippable\nuntipped\nuntippled\nuntipt\nuntirability\nuntirable\nuntire\nuntired\nuntiredly\nuntiring\nuntiringly\nuntissued\nuntithability\nuntithable\nuntithed\nuntitled\nuntittering\nuntitular\nunto\nuntoadying\nuntoasted\nuntogaed\nuntoggle\nuntoggler\nuntoiled\nuntoileted\nuntoiling\nuntold\nuntolerable\nuntolerableness\nuntolerably\nuntolerated\nuntomb\nuntombed\nuntonality\nuntone\nuntoned\nuntongued\nuntonsured\nuntooled\nuntooth\nuntoothed\nuntoothsome\nuntoothsomeness\nuntop\nuntopographical\nuntopped\nuntopping\nuntormented\nuntorn\nuntorpedoed\nuntorpid\nuntorrid\nuntortuous\nuntorture\nuntortured\nuntossed\nuntotaled\nuntotalled\nuntottering\nuntouch\nuntouchability\nuntouchable\nuntouchableness\nuntouchably\nuntouched\nuntouchedness\nuntouching\nuntough\nuntoured\nuntouristed\nuntoward\nuntowardliness\nuntowardly\nuntowardness\nuntowered\nuntown\nuntownlike\nuntrace\nuntraceable\nuntraceableness\nuntraceably\nuntraced\nuntraceried\nuntracked\nuntractability\nuntractable\nuntractableness\nuntractably\nuntractarian\nuntractible\nuntractibleness\nuntradeable\nuntraded\nuntradesmanlike\nuntrading\nuntraditional\nuntraduced\nuntraffickable\nuntrafficked\nuntragic\nuntragical\nuntrailed\nuntrain\nuntrainable\nuntrained\nuntrainedly\nuntrainedness\nuntraitored\nuntraitorous\nuntrammed\nuntrammeled\nuntrammeledness\nuntramped\nuntrampled\nuntrance\nuntranquil\nuntranquilized\nuntranquillize\nuntranquillized\nuntransacted\nuntranscended\nuntranscendental\nuntranscribable\nuntranscribed\nuntransferable\nuntransferred\nuntransfigured\nuntransfixed\nuntransformable\nuntransformed\nuntransforming\nuntransfused\nuntransfusible\nuntransgressed\nuntransient\nuntransitable\nuntransitive\nuntransitory\nuntranslatability\nuntranslatable\nuntranslatableness\nuntranslatably\nuntranslated\nuntransmigrated\nuntransmissible\nuntransmitted\nuntransmutable\nuntransmuted\nuntransparent\nuntranspassable\nuntranspired\nuntranspiring\nuntransplanted\nuntransportable\nuntransported\nuntransposed\nuntransubstantiated\nuntrappable\nuntrapped\nuntrashed\nuntravelable\nuntraveled\nuntraveling\nuntravellable\nuntravelling\nuntraversable\nuntraversed\nuntravestied\nuntreacherous\nuntread\nuntreadable\nuntreading\nuntreasonable\nuntreasure\nuntreasured\nuntreatable\nuntreatableness\nuntreatably\nuntreated\nuntreed\nuntrekked\nuntrellised\nuntrembling\nuntremblingly\nuntremendous\nuntremulous\nuntrenched\nuntrepanned\nuntrespassed\nuntrespassing\nuntress\nuntressed\nuntriable\nuntribal\nuntributary\nuntriced\nuntrickable\nuntricked\nuntried\nuntrifling\nuntrig\nuntrigonometrical\nuntrill\nuntrim\nuntrimmable\nuntrimmed\nuntrimmedness\nuntrinitarian\nuntripe\nuntrippable\nuntripped\nuntripping\nuntrite\nuntriturated\nuntriumphable\nuntriumphant\nuntriumphed\nuntrochaic\nuntrod\nuntrodden\nuntroddenness\nuntrolled\nuntrophied\nuntropical\nuntrotted\nuntroublable\nuntrouble\nuntroubled\nuntroubledly\nuntroubledness\nuntroublesome\nuntroublesomeness\nuntrounced\nuntrowed\nuntruant\nuntruck\nuntruckled\nuntruckling\nuntrue\nuntrueness\nuntruism\nuntruly\nuntrumped\nuntrumpeted\nuntrumping\nuntrundled\nuntrunked\nuntruss\nuntrussed\nuntrusser\nuntrussing\nuntrust\nuntrustably\nuntrusted\nuntrustful\nuntrustiness\nuntrusting\nuntrustworthily\nuntrustworthiness\nuntrustworthy\nuntrusty\nuntruth\nuntruther\nuntruthful\nuntruthfully\nuntruthfulness\nuntrying\nuntubbed\nuntuck\nuntucked\nuntuckered\nuntucking\nuntufted\nuntugged\nuntumbled\nuntumefied\nuntumid\nuntumultuous\nuntunable\nuntunableness\nuntunably\nuntune\nuntuneable\nuntuneableness\nuntuneably\nuntuned\nuntuneful\nuntunefully\nuntunefulness\nuntuning\nuntunneled\nuntupped\nunturbaned\nunturbid\nunturbulent\nunturf\nunturfed\nunturgid\nunturn\nunturnable\nunturned\nunturning\nunturpentined\nunturreted\nuntusked\nuntutelar\nuntutored\nuntutoredly\nuntutoredness\nuntwilled\nuntwinable\nuntwine\nuntwineable\nuntwined\nuntwining\nuntwinkling\nuntwinned\nuntwirl\nuntwirled\nuntwirling\nuntwist\nuntwisted\nuntwister\nuntwisting\nuntwitched\nuntying\nuntypical\nuntypically\nuntyrannic\nuntyrannical\nuntyrantlike\nuntz\nunubiquitous\nunugly\nunulcerated\nunultra\nunumpired\nununanimity\nununanimous\nununanimously\nununderstandable\nununderstandably\nununderstanding\nununderstood\nunundertaken\nunundulatory\nUnungun\nununifiable\nununified\nununiform\nununiformed\nununiformity\nununiformly\nununiformness\nununitable\nununitableness\nununitably\nununited\nununiting\nununiversity\nununiversitylike\nunupbraiding\nunupbraidingly\nunupholstered\nunupright\nunuprightly\nunuprightness\nunupset\nunupsettable\nunurban\nunurbane\nunurged\nunurgent\nunurging\nunurn\nunurned\nunusable\nunusableness\nunusably\nunuse\nunused\nunusedness\nunuseful\nunusefully\nunusefulness\nunushered\nunusual\nunusuality\nunusually\nunusualness\nunusurious\nunusurped\nunusurping\nunutilizable\nunutterability\nunutterable\nunutterableness\nunutterably\nunuttered\nunuxorial\nunuxorious\nunvacant\nunvaccinated\nunvacillating\nunvailable\nunvain\nunvaleted\nunvaletudinary\nunvaliant\nunvalid\nunvalidated\nunvalidating\nunvalidity\nunvalidly\nunvalidness\nunvalorous\nunvaluable\nunvaluableness\nunvaluably\nunvalue\nunvalued\nunvamped\nunvanishing\nunvanquishable\nunvanquished\nunvantaged\nunvaporized\nunvariable\nunvariableness\nunvariably\nunvariant\nunvaried\nunvariedly\nunvariegated\nunvarnished\nunvarnishedly\nunvarnishedness\nunvarying\nunvaryingly\nunvaryingness\nunvascular\nunvassal\nunvatted\nunvaulted\nunvaulting\nunvaunted\nunvaunting\nunvauntingly\nunveering\nunveil\nunveiled\nunveiledly\nunveiledness\nunveiler\nunveiling\nunveilment\nunveined\nunvelvety\nunvendable\nunvendableness\nunvended\nunvendible\nunvendibleness\nunveneered\nunvenerable\nunvenerated\nunvenereal\nunvenged\nunveniable\nunvenial\nunvenom\nunvenomed\nunvenomous\nunventable\nunvented\nunventilated\nunventured\nunventurous\nunvenued\nunveracious\nunveracity\nunverbalized\nunverdant\nunverdured\nunveridical\nunverifiable\nunverifiableness\nunverifiably\nunverified\nunverifiedness\nunveritable\nunverity\nunvermiculated\nunverminous\nunvernicular\nunversatile\nunversed\nunversedly\nunversedness\nunversified\nunvertical\nunvessel\nunvesseled\nunvest\nunvested\nunvetoed\nunvexed\nunviable\nunvibrated\nunvibrating\nunvicar\nunvicarious\nunvicariously\nunvicious\nunvictimized\nunvictorious\nunvictualed\nunvictualled\nunviewable\nunviewed\nunvigilant\nunvigorous\nunvigorously\nunvilified\nunvillaged\nunvindicated\nunvindictive\nunvindictively\nunvindictiveness\nunvinous\nunvintaged\nunviolable\nunviolated\nunviolenced\nunviolent\nunviolined\nunvirgin\nunvirginal\nunvirginlike\nunvirile\nunvirility\nunvirtue\nunvirtuous\nunvirtuously\nunvirtuousness\nunvirulent\nunvisible\nunvisibleness\nunvisibly\nunvision\nunvisionary\nunvisioned\nunvisitable\nunvisited\nunvisor\nunvisored\nunvisualized\nunvital\nunvitalized\nunvitalness\nunvitiated\nunvitiatedly\nunvitiatedness\nunvitrescibility\nunvitrescible\nunvitrifiable\nunvitrified\nunvitriolized\nunvituperated\nunvivacious\nunvivid\nunvivified\nunvizard\nunvizarded\nunvocal\nunvocalized\nunvociferous\nunvoice\nunvoiced\nunvoiceful\nunvoicing\nunvoidable\nunvoided\nunvolatile\nunvolatilize\nunvolatilized\nunvolcanic\nunvolitioned\nunvoluminous\nunvoluntarily\nunvoluntariness\nunvoluntary\nunvolunteering\nunvoluptuous\nunvomited\nunvoracious\nunvote\nunvoted\nunvoting\nunvouched\nunvouchedly\nunvouchedness\nunvouchsafed\nunvowed\nunvoweled\nunvoyageable\nunvoyaging\nunvulcanized\nunvulgar\nunvulgarize\nunvulgarized\nunvulgarly\nunvulnerable\nunwadable\nunwadded\nunwadeable\nunwaded\nunwading\nunwafted\nunwaged\nunwagered\nunwaggable\nunwaggably\nunwagged\nunwailed\nunwailing\nunwainscoted\nunwaited\nunwaiting\nunwaked\nunwakeful\nunwakefulness\nunwakened\nunwakening\nunwaking\nunwalkable\nunwalked\nunwalking\nunwall\nunwalled\nunwallet\nunwallowed\nunwan\nunwandered\nunwandering\nunwaning\nunwanted\nunwanton\nunwarbled\nunware\nunwarely\nunwareness\nunwarily\nunwariness\nunwarlike\nunwarlikeness\nunwarm\nunwarmable\nunwarmed\nunwarming\nunwarn\nunwarned\nunwarnedly\nunwarnedness\nunwarnished\nunwarp\nunwarpable\nunwarped\nunwarping\nunwarrant\nunwarrantability\nunwarrantable\nunwarrantableness\nunwarrantably\nunwarranted\nunwarrantedly\nunwarrantedness\nunwary\nunwashable\nunwashed\nunwashedness\nunwassailing\nunwastable\nunwasted\nunwasteful\nunwastefully\nunwasting\nunwastingly\nunwatchable\nunwatched\nunwatchful\nunwatchfully\nunwatchfulness\nunwatching\nunwater\nunwatered\nunwaterlike\nunwatermarked\nunwatery\nunwattled\nunwaved\nunwaverable\nunwavered\nunwavering\nunwaveringly\nunwaving\nunwax\nunwaxed\nunwayed\nunwayward\nunweaken\nunweakened\nunweal\nunwealsomeness\nunwealthy\nunweaned\nunweapon\nunweaponed\nunwearable\nunweariability\nunweariable\nunweariableness\nunweariably\nunwearied\nunweariedly\nunweariedness\nunwearily\nunweariness\nunwearing\nunwearisome\nunwearisomeness\nunweary\nunwearying\nunwearyingly\nunweathered\nunweatherly\nunweatherwise\nunweave\nunweaving\nunweb\nunwebbed\nunwebbing\nunwed\nunwedded\nunweddedly\nunweddedness\nunwedge\nunwedgeable\nunwedged\nunweeded\nunweel\nunweelness\nunweened\nunweeping\nunweeting\nunweetingly\nunweft\nunweighable\nunweighed\nunweighing\nunweight\nunweighted\nunweighty\nunwelcome\nunwelcomed\nunwelcomely\nunwelcomeness\nunweld\nunweldable\nunwelded\nunwell\nunwellness\nunwelted\nunwept\nunwestern\nunwesternized\nunwet\nunwettable\nunwetted\nunwheedled\nunwheel\nunwheeled\nunwhelmed\nunwhelped\nunwhetted\nunwhig\nunwhiglike\nunwhimsical\nunwhining\nunwhip\nunwhipped\nunwhirled\nunwhisked\nunwhiskered\nunwhisperable\nunwhispered\nunwhispering\nunwhistled\nunwhite\nunwhited\nunwhitened\nunwhitewashed\nunwholesome\nunwholesomely\nunwholesomeness\nunwidened\nunwidowed\nunwield\nunwieldable\nunwieldily\nunwieldiness\nunwieldly\nunwieldy\nunwifed\nunwifelike\nunwifely\nunwig\nunwigged\nunwild\nunwilily\nunwiliness\nunwill\nunwilled\nunwillful\nunwillfully\nunwillfulness\nunwilling\nunwillingly\nunwillingness\nunwilted\nunwilting\nunwily\nunwincing\nunwincingly\nunwind\nunwindable\nunwinding\nunwindingly\nunwindowed\nunwindy\nunwingable\nunwinged\nunwinking\nunwinkingly\nunwinnable\nunwinning\nunwinnowed\nunwinsome\nunwinter\nunwintry\nunwiped\nunwire\nunwired\nunwisdom\nunwise\nunwisely\nunwiseness\nunwish\nunwished\nunwishful\nunwishing\nunwist\nunwistful\nunwitch\nunwitched\nunwithdrawable\nunwithdrawing\nunwithdrawn\nunwitherable\nunwithered\nunwithering\nunwithheld\nunwithholden\nunwithholding\nunwithstanding\nunwithstood\nunwitless\nunwitnessed\nunwitted\nunwittily\nunwitting\nunwittingly\nunwittingness\nunwitty\nunwive\nunwived\nunwoeful\nunwoful\nunwoman\nunwomanish\nunwomanize\nunwomanized\nunwomanlike\nunwomanliness\nunwomanly\nunwomb\nunwon\nunwonder\nunwonderful\nunwondering\nunwonted\nunwontedly\nunwontedness\nunwooded\nunwooed\nunwoof\nunwooly\nunwordable\nunwordably\nunwordily\nunwordy\nunwork\nunworkability\nunworkable\nunworkableness\nunworkably\nunworked\nunworkedness\nunworker\nunworking\nunworkmanlike\nunworkmanly\nunworld\nunworldliness\nunworldly\nunwormed\nunwormy\nunworn\nunworried\nunworriedly\nunworriedness\nunworshiped\nunworshipful\nunworshiping\nunworshipped\nunworshipping\nunworth\nunworthily\nunworthiness\nunworthy\nunwotting\nunwound\nunwoundable\nunwoundableness\nunwounded\nunwoven\nunwrangling\nunwrap\nunwrapped\nunwrapper\nunwrapping\nunwrathful\nunwrathfully\nunwreaked\nunwreathe\nunwreathed\nunwreathing\nunwrecked\nunwrench\nunwrenched\nunwrested\nunwrestedly\nunwresting\nunwrestled\nunwretched\nunwriggled\nunwrinkle\nunwrinkleable\nunwrinkled\nunwrit\nunwritable\nunwrite\nunwriting\nunwritten\nunwronged\nunwrongful\nunwrought\nunwrung\nunyachtsmanlike\nunyeaned\nunyearned\nunyearning\nunyielded\nunyielding\nunyieldingly\nunyieldingness\nunyoke\nunyoked\nunyoking\nunyoung\nunyouthful\nunyouthfully\nunze\nunzealous\nunzealously\nunzealousness\nunzen\nunzephyrlike\nunzone\nunzoned\nup\nupaisle\nupaithric\nupalley\nupalong\nupanishadic\nupapurana\nuparch\nuparching\nuparise\nuparm\nuparna\nupas\nupattic\nupavenue\nupbank\nupbar\nupbay\nupbear\nupbearer\nupbeat\nupbelch\nupbelt\nupbend\nupbid\nupbind\nupblacken\nupblast\nupblaze\nupblow\nupboil\nupbolster\nupbolt\nupboost\nupborne\nupbotch\nupboulevard\nupbound\nupbrace\nupbraid\nupbraider\nupbraiding\nupbraidingly\nupbray\nupbreak\nupbred\nupbreed\nupbreeze\nupbrighten\nupbrim\nupbring\nupbristle\nupbroken\nupbrook\nupbrought\nupbrow\nupbubble\nupbuild\nupbuilder\nupbulging\nupbuoy\nupbuoyance\nupburn\nupburst\nupbuy\nupcall\nupcanal\nupcanyon\nupcarry\nupcast\nupcatch\nupcaught\nupchamber\nupchannel\nupchariot\nupchimney\nupchoke\nupchuck\nupcity\nupclimb\nupclose\nupcloser\nupcoast\nupcock\nupcoil\nupcolumn\nupcome\nupcoming\nupconjure\nupcountry\nupcourse\nupcover\nupcrane\nupcrawl\nupcreek\nupcreep\nupcrop\nupcrowd\nupcry\nupcurl\nupcurrent\nupcurve\nupcushion\nupcut\nupdart\nupdate\nupdeck\nupdelve\nupdive\nupdo\nupdome\nupdraft\nupdrag\nupdraw\nupdrink\nupdry\nupeat\nupend\nupeygan\nupfeed\nupfield\nupfill\nupfingered\nupflame\nupflare\nupflash\nupflee\nupflicker\nupfling\nupfloat\nupflood\nupflow\nupflower\nupflung\nupfly\nupfold\nupfollow\nupframe\nupfurl\nupgale\nupgang\nupgape\nupgather\nupgaze\nupget\nupgird\nupgirt\nupgive\nupglean\nupglide\nupgo\nupgorge\nupgrade\nupgrave\nupgrow\nupgrowth\nupgully\nupgush\nuphand\nuphang\nupharbor\nupharrow\nuphasp\nupheal\nupheap\nuphearted\nupheaval\nupheavalist\nupheave\nupheaven\nupheld\nuphelm\nuphelya\nupher\nuphill\nuphillward\nuphoard\nuphoist\nuphold\nupholden\nupholder\nupholster\nupholstered\nupholsterer\nupholsteress\nupholsterous\nupholstery\nupholsterydom\nupholstress\nuphung\nuphurl\nupisland\nupjerk\nupjet\nupkeep\nupkindle\nupknell\nupknit\nupla\nupladder\nuplaid\nuplake\nupland\nuplander\nuplandish\nuplane\nuplay\nuplead\nupleap\nupleg\nuplick\nuplift\nupliftable\nuplifted\nupliftedly\nupliftedness\nuplifter\nuplifting\nupliftingly\nupliftingness\nupliftitis\nupliftment\nuplight\nuplimb\nuplimber\nupline\nuplock\nuplong\nuplook\nuplooker\nuploom\nuploop\nuplying\nupmaking\nupmast\nupmix\nupmost\nupmount\nupmountain\nupmove\nupness\nupo\nupon\nuppard\nuppent\nupper\nupperch\nuppercut\nupperer\nupperest\nupperhandism\nuppermore\nuppermost\nuppers\nuppertendom\nuppile\nupping\nuppish\nuppishly\nuppishness\nuppity\nupplough\nupplow\nuppluck\nuppoint\nuppoise\nuppop\nuppour\nuppowoc\nupprick\nupprop\nuppuff\nuppull\nuppush\nupquiver\nupraisal\nupraise\nupraiser\nupreach\nuprear\nuprein\nuprend\nuprender\nuprest\nuprestore\nuprid\nupridge\nupright\nuprighteous\nuprighteously\nuprighteousness\nuprighting\nuprightish\nuprightly\nuprightness\nuprights\nuprip\nuprisal\nuprise\nuprisement\nuprisen\nupriser\nuprising\nuprist\nuprive\nupriver\nuproad\nuproar\nuproariness\nuproarious\nuproariously\nuproariousness\nuproom\nuproot\nuprootal\nuprooter\nuprose\nuprouse\nuproute\nuprun\nuprush\nupsaddle\nupscale\nupscrew\nupscuddle\nupseal\nupseek\nupseize\nupsend\nupset\nupsetment\nupsettable\nupsettal\nupsetted\nupsetter\nupsetting\nupsettingly\nupsey\nupshaft\nupshear\nupsheath\nupshoot\nupshore\nupshot\nupshoulder\nupshove\nupshut\nupside\nupsides\nupsighted\nupsiloid\nupsilon\nupsilonism\nupsit\nupsitten\nupsitting\nupslant\nupslip\nupslope\nupsmite\nupsnatch\nupsoak\nupsoar\nupsolve\nupspeak\nupspear\nupspeed\nupspew\nupspin\nupspire\nupsplash\nupspout\nupspread\nupspring\nupsprinkle\nupsprout\nupspurt\nupstaff\nupstage\nupstair\nupstairs\nupstamp\nupstand\nupstander\nupstanding\nupstare\nupstart\nupstartism\nupstartle\nupstartness\nupstate\nupstater\nupstaunch\nupstay\nupsteal\nupsteam\nupstem\nupstep\nupstick\nupstir\nupstraight\nupstream\nupstreamward\nupstreet\nupstretch\nupstrike\nupstrive\nupstroke\nupstruggle\nupsuck\nupsun\nupsup\nupsurge\nupsurgence\nupswallow\nupswarm\nupsway\nupsweep\nupswell\nupswing\nuptable\nuptake\nuptaker\nuptear\nuptemper\nuptend\nupthrow\nupthrust\nupthunder\nuptide\nuptie\nuptill\nuptilt\nuptorn\nuptoss\nuptower\nuptown\nuptowner\nuptrace\nuptrack\nuptrail\nuptrain\nuptree\nuptrend\nuptrill\nuptrunk\nuptruss\nuptube\nuptuck\nupturn\nuptwined\nuptwist\nUpupa\nUpupidae\nupupoid\nupvalley\nupvomit\nupwaft\nupwall\nupward\nupwardly\nupwardness\nupwards\nupwarp\nupwax\nupway\nupways\nupwell\nupwent\nupwheel\nupwhelm\nupwhir\nupwhirl\nupwind\nupwith\nupwork\nupwound\nupwrap\nupwreathe\nupwrench\nupwring\nupwrought\nupyard\nupyoke\nur\nura\nurachal\nurachovesical\nurachus\nuracil\nuraemic\nuraeus\nUragoga\nUral\nural\nurali\nUralian\nUralic\nuraline\nuralite\nuralitic\nuralitization\nuralitize\nuralium\nuramido\nuramil\nuramilic\nuramino\nUran\nuran\nuranalysis\nuranate\nUrania\nUranian\nuranic\nUranicentric\nuranidine\nuraniferous\nuraniid\nUraniidae\nuranin\nuranine\nuraninite\nuranion\nuraniscochasma\nuraniscoplasty\nuraniscoraphy\nuraniscorrhaphy\nuranism\nuranist\nuranite\nuranitic\nuranium\nuranocircite\nuranographer\nuranographic\nuranographical\nuranographist\nuranography\nuranolatry\nuranolite\nuranological\nuranology\nuranometria\nuranometrical\nuranometry\nuranophane\nuranophotography\nuranoplastic\nuranoplasty\nuranoplegia\nuranorrhaphia\nuranorrhaphy\nuranoschisis\nuranoschism\nuranoscope\nuranoscopia\nuranoscopic\nUranoscopidae\nUranoscopus\nuranoscopy\nuranospathite\nuranosphaerite\nuranospinite\nuranostaphyloplasty\nuranostaphylorrhaphy\nuranotantalite\nuranothallite\nuranothorite\nuranotil\nuranous\nUranus\nuranyl\nuranylic\nurao\nurare\nurari\nUrartaean\nUrartic\nurase\nurataemia\nurate\nuratemia\nuratic\nuratoma\nuratosis\nuraturia\nurazine\nurazole\nurbacity\nurbainite\nUrban\nurban\nurbane\nurbanely\nurbaneness\nurbanism\nUrbanist\nurbanist\nurbanite\nurbanity\nurbanization\nurbanize\nurbarial\nurbian\nurbic\nUrbicolae\nurbicolous\nurbification\nurbify\nurbinate\nurceiform\nurceolar\nurceolate\nurceole\nurceoli\nUrceolina\nurceolus\nurceus\nurchin\nurchiness\nurchinlike\nurchinly\nurd\nurde\nurdee\nUrdu\nure\nurea\nureal\nureameter\nureametry\nurease\nurechitin\nurechitoxin\nuredema\nUredinales\nuredine\nUredineae\nuredineal\nuredineous\nuredinia\nuredinial\nUrediniopsis\nurediniospore\nurediniosporic\nuredinium\nuredinoid\nuredinologist\nuredinology\nuredinous\nUredo\nuredo\nuredosorus\nuredospore\nuredosporic\nuredosporiferous\nuredosporous\nuredostage\nureic\nureid\nureide\nureido\nuremia\nuremic\nUrena\nurent\nureometer\nureometry\nureosecretory\nuresis\nuretal\nureter\nureteral\nureteralgia\nuretercystoscope\nureterectasia\nureterectasis\nureterectomy\nureteric\nureteritis\nureterocele\nureterocervical\nureterocolostomy\nureterocystanastomosis\nureterocystoscope\nureterocystostomy\nureterodialysis\nureteroenteric\nureteroenterostomy\nureterogenital\nureterogram\nureterograph\nureterography\nureterointestinal\nureterolith\nureterolithiasis\nureterolithic\nureterolithotomy\nureterolysis\nureteronephrectomy\nureterophlegma\nureteroplasty\nureteroproctostomy\nureteropyelitis\nureteropyelogram\nureteropyelography\nureteropyelonephritis\nureteropyelostomy\nureteropyosis\nureteroradiography\nureterorectostomy\nureterorrhagia\nureterorrhaphy\nureterosalpingostomy\nureterosigmoidostomy\nureterostegnosis\nureterostenoma\nureterostenosis\nureterostoma\nureterostomy\nureterotomy\nureterouteral\nureterovaginal\nureterovesical\nurethan\nurethane\nurethra\nurethrae\nurethragraph\nurethral\nurethralgia\nurethrameter\nurethrascope\nurethratome\nurethratresia\nurethrectomy\nurethremphraxis\nurethreurynter\nurethrism\nurethritic\nurethritis\nurethroblennorrhea\nurethrobulbar\nurethrocele\nurethrocystitis\nurethrogenital\nurethrogram\nurethrograph\nurethrometer\nurethropenile\nurethroperineal\nurethrophyma\nurethroplastic\nurethroplasty\nurethroprostatic\nurethrorectal\nurethrorrhagia\nurethrorrhaphy\nurethrorrhea\nurethrorrhoea\nurethroscope\nurethroscopic\nurethroscopical\nurethroscopy\nurethrosexual\nurethrospasm\nurethrostaxis\nurethrostenosis\nurethrostomy\nurethrotome\nurethrotomic\nurethrotomy\nurethrovaginal\nurethrovesical\nurethylan\nuretic\nureylene\nurf\nurfirnis\nurge\nurgence\nurgency\nurgent\nurgently\nurgentness\nurger\nUrginea\nurging\nurgingly\nUrgonian\nurheen\nUri\nUria\nUriah\nurial\nUrian\nuric\nuricacidemia\nuricaciduria\nuricaemia\nuricaemic\nuricemia\nuricemic\nuricolysis\nuricolytic\nuridrosis\nUriel\nurinaemia\nurinal\nurinalist\nurinalysis\nurinant\nurinarium\nurinary\nurinate\nurination\nurinative\nurinator\nurine\nurinemia\nuriniferous\nuriniparous\nurinocryoscopy\nurinogenital\nurinogenitary\nurinogenous\nurinologist\nurinology\nurinomancy\nurinometer\nurinometric\nurinometry\nurinoscopic\nurinoscopist\nurinoscopy\nurinose\nurinosexual\nurinous\nurinousness\nurite\nurlar\nurled\nurling\nurluch\nurman\nurn\nurna\nurnae\nurnal\nurnflower\nurnful\nurning\nurningism\nurnism\nurnlike\nurnmaker\nUro\nuroacidimeter\nuroazotometer\nurobenzoic\nurobilin\nurobilinemia\nurobilinogen\nurobilinogenuria\nurobilinuria\nurocanic\nurocele\nUrocerata\nurocerid\nUroceridae\nurochloralic\nurochord\nUrochorda\nurochordal\nurochordate\nurochrome\nurochromogen\nUrocoptidae\nUrocoptis\nurocyanogen\nUrocyon\nurocyst\nurocystic\nUrocystis\nurocystitis\nurodaeum\nUrodela\nurodelan\nurodele\nurodelous\nurodialysis\nurodynia\nuroedema\nuroerythrin\nurofuscohematin\nurogaster\nurogastric\nurogenic\nurogenital\nurogenitary\nurogenous\nuroglaucin\nUroglena\nurogram\nurography\nurogravimeter\nurohematin\nurohyal\nurolagnia\nuroleucic\nuroleucinic\nurolith\nurolithiasis\nurolithic\nurolithology\nurologic\nurological\nurologist\nurology\nurolutein\nurolytic\nuromancy\nuromantia\nuromantist\nUromastix\nuromelanin\nuromelus\nuromere\nuromeric\nurometer\nUromyces\nUromycladium\nuronephrosis\nuronic\nuronology\nuropatagium\nUropeltidae\nurophanic\nurophanous\nurophein\nUrophlyctis\nurophthisis\nuroplania\nuropod\nuropodal\nuropodous\nuropoetic\nuropoiesis\nuropoietic\nuroporphyrin\nuropsile\nUropsilus\nuroptysis\nUropygi\nuropygial\nuropygium\nuropyloric\nurorosein\nurorrhagia\nurorrhea\nurorubin\nurosaccharometry\nurosacral\nuroschesis\nuroscopic\nuroscopist\nuroscopy\nurosepsis\nuroseptic\nurosis\nurosomatic\nurosome\nurosomite\nurosomitic\nurostea\nurostealith\nurostegal\nurostege\nurostegite\nurosteon\nurosternite\nurosthene\nurosthenic\nurostylar\nurostyle\nurotoxia\nurotoxic\nurotoxicity\nurotoxin\nurotoxy\nuroxanate\nuroxanic\nuroxanthin\nuroxin\nurradhus\nurrhodin\nurrhodinic\nUrs\nUrsa\nursal\nursicidal\nursicide\nUrsid\nUrsidae\nursiform\nursigram\nursine\nursoid\nursolic\nurson\nursone\nursuk\nUrsula\nUrsuline\nUrsus\nUrtica\nurtica\nUrticaceae\nurticaceous\nUrticales\nurticant\nurticaria\nurticarial\nurticarious\nUrticastrum\nurticate\nurticating\nurtication\nurticose\nurtite\nUru\nurubu\nurucu\nurucuri\nUruguayan\nuruisg\nUrukuena\nurunday\nurus\nurushi\nurushic\nurushinic\nurushiol\nurushiye\nurva\nus\nusability\nusable\nusableness\nusage\nusager\nusance\nusar\nusara\nusaron\nusation\nuse\nused\nusedly\nusedness\nusednt\nusee\nuseful\nusefullish\nusefully\nusefulness\nusehold\nuseless\nuselessly\nuselessness\nusent\nuser\nush\nushabti\nushabtiu\nUshak\nUsheen\nusher\nusherance\nusherdom\nusherer\nusheress\nusherette\nUsherian\nusherian\nusherism\nusherless\nushership\nusings\nUsipetes\nusitate\nusitative\nUskara\nUskok\nUsnea\nusnea\nUsneaceae\nusneaceous\nusneoid\nusnic\nusninic\nUspanteca\nusque\nusquebaugh\nusself\nussels\nusselven\nussingite\nust\nUstarana\nuster\nUstilaginaceae\nustilaginaceous\nUstilaginales\nustilagineous\nUstilaginoidea\nUstilago\nustion\nustorious\nustulate\nustulation\nUstulina\nusual\nusualism\nusually\nusualness\nusuary\nusucapient\nusucapion\nusucapionary\nusucapt\nusucaptable\nusucaption\nusucaptor\nusufruct\nusufructuary\nUsun\nusure\nusurer\nusurerlike\nusuress\nusurious\nusuriously\nusuriousness\nusurp\nusurpation\nusurpative\nusurpatively\nusurpatory\nusurpature\nusurpedly\nusurper\nusurpership\nusurping\nusurpingly\nusurpment\nusurpor\nusurpress\nusury\nusward\nuswards\nut\nUta\nuta\nUtah\nUtahan\nutahite\nutai\nutas\nutch\nutchy\nUte\nutees\nutensil\nuteralgia\nuterectomy\nuteri\nuterine\nuteritis\nuteroabdominal\nuterocele\nuterocervical\nuterocystotomy\nuterofixation\nuterogestation\nuterogram\nuterography\nuterointestinal\nuterolith\nuterology\nuteromania\nuterometer\nuteroovarian\nuteroparietal\nuteropelvic\nuteroperitoneal\nuteropexia\nuteropexy\nuteroplacental\nuteroplasty\nuterosacral\nuterosclerosis\nuteroscope\nuterotomy\nuterotonic\nuterotubal\nuterovaginal\nuteroventral\nuterovesical\nuterus\nutfangenethef\nutfangethef\nutfangthef\nutfangthief\nutick\nutile\nutilitarian\nutilitarianism\nutilitarianist\nutilitarianize\nutilitarianly\nutility\nutilizable\nutilization\nutilize\nutilizer\nutinam\nutmost\nutmostness\nUtopia\nutopia\nUtopian\nutopian\nutopianism\nutopianist\nUtopianize\nUtopianizer\nutopianizer\nutopiast\nutopism\nutopist\nutopistic\nutopographer\nUtraquism\nutraquist\nutraquistic\nUtrecht\nutricle\nutricul\nutricular\nUtricularia\nUtriculariaceae\nutriculate\nutriculiferous\nutriculiform\nutriculitis\nutriculoid\nutriculoplastic\nutriculoplasty\nutriculosaccular\nutriculose\nutriculus\nutriform\nutrubi\nutrum\nutsuk\nutter\nutterability\nutterable\nutterableness\nutterance\nutterancy\nutterer\nutterless\nutterly\nuttermost\nutterness\nutu\nutum\nuturuncu\nuva\nuval\nuvalha\nuvanite\nuvarovite\nuvate\nuvea\nuveal\nuveitic\nuveitis\nUvella\nuveous\nuvic\nuvid\nuviol\nuvitic\nuvitinic\nuvito\nuvitonic\nuvrou\nuvula\nuvulae\nuvular\nUvularia\nuvularly\nuvulitis\nuvuloptosis\nuvulotome\nuvulotomy\nuvver\nuxorial\nuxoriality\nuxorially\nuxoricidal\nuxoricide\nuxorious\nuxoriously\nuxoriousness\nuzan\nuzara\nuzarin\nuzaron\nUzbak\nUzbeg\nUzbek\nV\nv\nvaagmer\nvaalite\nVaalpens\nvacabond\nvacancy\nvacant\nvacanthearted\nvacantheartedness\nvacantly\nvacantness\nvacantry\nvacatable\nvacate\nvacation\nvacational\nvacationer\nvacationist\nvacationless\nvacatur\nVaccaria\nvaccary\nvaccenic\nvaccicide\nvaccigenous\nvaccina\nvaccinable\nvaccinal\nvaccinate\nvaccination\nvaccinationist\nvaccinator\nvaccinatory\nvaccine\nvaccinee\nvaccinella\nvaccinia\nVacciniaceae\nvacciniaceous\nvaccinial\nvaccinifer\nvacciniform\nvacciniola\nvaccinist\nVaccinium\nvaccinium\nvaccinization\nvaccinogenic\nvaccinogenous\nvaccinoid\nvaccinophobia\nvaccinotherapy\nvache\nVachellia\nvachette\nvacillancy\nvacillant\nvacillate\nvacillating\nvacillatingly\nvacillation\nvacillator\nvacillatory\nvacoa\nvacona\nvacoua\nvacouf\nvacual\nvacuate\nvacuation\nvacuefy\nvacuist\nvacuity\nvacuolar\nvacuolary\nvacuolate\nvacuolated\nvacuolation\nvacuole\nvacuolization\nvacuome\nvacuometer\nvacuous\nvacuously\nvacuousness\nvacuum\nvacuuma\nvacuumize\nvade\nVadim\nvadimonium\nvadimony\nvadium\nvadose\nvady\nvag\nvagabond\nvagabondage\nvagabondager\nvagabondia\nvagabondish\nvagabondism\nvagabondismus\nvagabondize\nvagabondizer\nvagabondry\nvagal\nvagarian\nvagarious\nvagariously\nvagarish\nvagarisome\nvagarist\nvagaristic\nvagarity\nvagary\nvagas\nvage\nvagiform\nvagile\nvagina\nvaginal\nvaginalectomy\nvaginaless\nvaginalitis\nvaginant\nvaginate\nvaginated\nvaginectomy\nvaginervose\nVaginicola\nvaginicoline\nvaginicolous\nvaginiferous\nvaginipennate\nvaginismus\nvaginitis\nvaginoabdominal\nvaginocele\nvaginodynia\nvaginofixation\nvaginolabial\nvaginometer\nvaginomycosis\nvaginoperineal\nvaginoperitoneal\nvaginopexy\nvaginoplasty\nvaginoscope\nvaginoscopy\nvaginotome\nvaginotomy\nvaginovesical\nvaginovulvar\nvaginula\nvaginulate\nvaginule\nvagitus\nVagnera\nvagoaccessorius\nvagodepressor\nvagoglossopharyngeal\nvagogram\nvagolysis\nvagosympathetic\nvagotomize\nvagotomy\nvagotonia\nvagotonic\nvagotropic\nvagotropism\nvagrance\nvagrancy\nvagrant\nvagrantism\nvagrantize\nvagrantlike\nvagrantly\nvagrantness\nvagrate\nvagrom\nvague\nvaguely\nvagueness\nvaguish\nvaguity\nvagulous\nvagus\nvahine\nVai\nVaidic\nvail\nvailable\nvain\nvainful\nvainglorious\nvaingloriously\nvaingloriousness\nvainglory\nvainly\nvainness\nvair\nvairagi\nvaire\nvairy\nVaishnava\nVaishnavism\nvaivode\nvajra\nvajrasana\nvakass\nvakia\nvakil\nvakkaliga\nVal\nvalance\nvalanced\nvalanche\nvalbellite\nvale\nvalediction\nvaledictorian\nvaledictorily\nvaledictory\nvalence\nValencia\nValencian\nvalencianite\nValenciennes\nvalency\nvalent\nValentide\nValentin\nValentine\nvalentine\nValentinian\nValentinianism\nvalentinite\nvaleral\nvaleraldehyde\nvaleramide\nvalerate\nValeria\nvalerian\nValeriana\nValerianaceae\nvalerianaceous\nValerianales\nvalerianate\nValerianella\nValerianoides\nvaleric\nValerie\nvalerin\nvalerolactone\nvalerone\nvaleryl\nvalerylene\nvalet\nvaleta\nvaletage\nvaletdom\nvalethood\nvaletism\nvaletry\nvaletudinarian\nvaletudinarianism\nvaletudinariness\nvaletudinarist\nvaletudinarium\nvaletudinary\nvaleur\nvaleward\nvalgoid\nvalgus\nvalhall\nValhalla\nVali\nvali\nvaliance\nvaliancy\nvaliant\nvaliantly\nvaliantness\nvalid\nvalidate\nvalidation\nvalidatory\nvalidification\nvalidity\nvalidly\nvalidness\nvaline\nvalise\nvaliseful\nvaliship\nValkyr\nValkyria\nValkyrian\nValkyrie\nvall\nvallancy\nvallar\nvallary\nvallate\nvallated\nvallation\nvallecula\nvallecular\nvalleculate\nvallevarite\nvalley\nvalleyful\nvalleyite\nvalleylet\nvalleylike\nvalleyward\nvalleywise\nvallicula\nvallicular\nvallidom\nvallis\nValliscaulian\nVallisneria\nVallisneriaceae\nvallisneriaceous\nVallombrosan\nVallota\nvallum\nValmy\nValois\nvalonia\nValoniaceae\nvaloniaceous\nvalor\nvalorization\nvalorize\nvalorous\nvalorously\nvalorousness\nValsa\nValsaceae\nValsalvan\nvalse\nvalsoid\nvaluable\nvaluableness\nvaluably\nvaluate\nvaluation\nvaluational\nvaluator\nvalue\nvalued\nvalueless\nvaluelessness\nvaluer\nvaluta\nvalva\nvalval\nValvata\nvalvate\nValvatidae\nvalve\nvalved\nvalveless\nvalvelet\nvalvelike\nvalveman\nvalviferous\nvalviform\nvalvotomy\nvalvula\nvalvular\nvalvulate\nvalvule\nvalvulitis\nvalvulotome\nvalvulotomy\nvalyl\nvalylene\nvambrace\nvambraced\nvamfont\nvammazsa\nvamoose\nvamp\nvamped\nvamper\nvamphorn\nvampire\nvampireproof\nvampiric\nvampirish\nvampirism\nvampirize\nvamplate\nvampproof\nVampyrella\nVampyrellidae\nVampyrum\nVan\nvan\nvanadate\nvanadiate\nvanadic\nvanadiferous\nvanadinite\nvanadium\nvanadosilicate\nvanadous\nvanadyl\nVanaheim\nvanaprastha\nVance\nvancourier\nVancouveria\nVanda\nVandal\nVandalic\nvandalish\nvandalism\nvandalistic\nvandalization\nvandalize\nvandalroot\nVandemonian\nVandemonianism\nVandiemenian\nVandyke\nvane\nvaned\nvaneless\nvanelike\nVanellus\nVanessa\nvanessian\nvanfoss\nvang\nvangee\nvangeli\nvanglo\nvanguard\nVanguardist\nVangueria\nvanilla\nvanillal\nvanillaldehyde\nvanillate\nvanille\nvanillery\nvanillic\nvanillin\nvanillinic\nvanillism\nvanilloes\nvanillon\nvanilloyl\nvanillyl\nVanir\nvanish\nvanisher\nvanishing\nvanishingly\nvanishment\nVanist\nvanitarianism\nvanitied\nvanity\nvanjarrah\nvanman\nvanmost\nVannai\nvanner\nvannerman\nvannet\nVannic\nvanquish\nvanquishable\nvanquisher\nvanquishment\nvansire\nvantage\nvantageless\nvantbrace\nvantbrass\nvanward\nvapid\nvapidism\nvapidity\nvapidly\nvapidness\nvapocauterization\nvapographic\nvapography\nvapor\nvaporability\nvaporable\nvaporarium\nvaporary\nvaporate\nvapored\nvaporer\nvaporescence\nvaporescent\nvaporiferous\nvaporiferousness\nvaporific\nvaporiform\nvaporimeter\nvaporing\nvaporingly\nvaporish\nvaporishness\nvaporium\nvaporizable\nvaporization\nvaporize\nvaporizer\nvaporless\nvaporlike\nvaporograph\nvaporographic\nvaporose\nvaporoseness\nvaporosity\nvaporous\nvaporously\nvaporousness\nvaportight\nvapory\nvapulary\nvapulate\nvapulation\nvapulatory\nvara\nvarahan\nvaran\nVaranger\nVarangi\nVarangian\nvaranid\nVaranidae\nVaranoid\nVaranus\nVarda\nvardapet\nvardy\nvare\nvarec\nvareheaded\nvareuse\nvargueno\nvari\nvariability\nvariable\nvariableness\nvariably\nVariag\nvariance\nvariancy\nvariant\nvariate\nvariation\nvariational\nvariationist\nvariatious\nvariative\nvariatively\nvariator\nvarical\nvaricated\nvarication\nvaricella\nvaricellar\nvaricellate\nvaricellation\nvaricelliform\nvaricelloid\nvaricellous\nvarices\nvariciform\nvaricoblepharon\nvaricocele\nvaricoid\nvaricolored\nvaricolorous\nvaricose\nvaricosed\nvaricoseness\nvaricosis\nvaricosity\nvaricotomy\nvaricula\nvaried\nvariedly\nvariegate\nvariegated\nvariegation\nvariegator\nvarier\nvarietal\nvarietally\nvarietism\nvarietist\nvariety\nvariform\nvariformed\nvariformity\nvariformly\nvarigradation\nvariocoupler\nvariola\nvariolar\nVariolaria\nvariolate\nvariolation\nvariole\nvariolic\nvarioliform\nvariolite\nvariolitic\nvariolitization\nvariolization\nvarioloid\nvariolous\nvariolovaccine\nvariolovaccinia\nvariometer\nvariorum\nvariotinted\nvarious\nvariously\nvariousness\nvariscite\nvarisse\nvarix\nvarlet\nvarletaille\nvarletess\nvarletry\nvarletto\nvarment\nvarna\nvarnashrama\nvarnish\nvarnished\nvarnisher\nvarnishing\nvarnishlike\nvarnishment\nvarnishy\nvarnpliktige\nvarnsingite\nVarolian\nVarronia\nVarronian\nvarsha\nvarsity\nVarsovian\nvarsoviana\nVaruna\nvarus\nvarve\nvarved\nvary\nvaryingly\nvas\nVasa\nvasa\nvasal\nVascons\nvascular\nvascularity\nvascularization\nvascularize\nvascularly\nvasculated\nvasculature\nvasculiferous\nvasculiform\nvasculitis\nvasculogenesis\nvasculolymphatic\nvasculomotor\nvasculose\nvasculum\nvase\nvasectomize\nvasectomy\nvaseful\nvaselet\nvaselike\nVaseline\nvasemaker\nvasemaking\nvasewise\nvasework\nvashegyite\nvasicentric\nvasicine\nvasifactive\nvasiferous\nvasiform\nvasoconstricting\nvasoconstriction\nvasoconstrictive\nvasoconstrictor\nvasocorona\nvasodentinal\nvasodentine\nvasodilatation\nvasodilatin\nvasodilating\nvasodilation\nvasodilator\nvasoepididymostomy\nvasofactive\nvasoformative\nvasoganglion\nvasohypertonic\nvasohypotonic\nvasoinhibitor\nvasoinhibitory\nvasoligation\nvasoligature\nvasomotion\nvasomotor\nvasomotorial\nvasomotoric\nvasomotory\nvasoneurosis\nvasoparesis\nvasopressor\nvasopuncture\nvasoreflex\nvasorrhaphy\nvasosection\nvasospasm\nvasospastic\nvasostimulant\nvasostomy\nvasotomy\nvasotonic\nvasotribe\nvasotripsy\nvasotrophic\nvasovesiculectomy\nvasquine\nvassal\nvassalage\nvassaldom\nvassaless\nvassalic\nvassalism\nvassality\nvassalize\nvassalless\nvassalry\nvassalship\nVassos\nvast\nvastate\nvastation\nvastidity\nvastily\nvastiness\nvastitude\nvastity\nvastly\nvastness\nvasty\nvasu\nVasudeva\nVasundhara\nvat\nVateria\nvatful\nvatic\nvatically\nVatican\nvaticanal\nvaticanic\nvaticanical\nVaticanism\nVaticanist\nVaticanization\nVaticanize\nvaticide\nvaticinal\nvaticinant\nvaticinate\nvaticination\nvaticinator\nvaticinatory\nvaticinatress\nvaticinatrix\nvatmaker\nvatmaking\nvatman\nVatteluttu\nvatter\nvau\nVaucheria\nVaucheriaceae\nvaucheriaceous\nvaudeville\nvaudevillian\nvaudevillist\nVaudism\nVaudois\nvaudy\nVaughn\nvaugnerite\nvault\nvaulted\nvaultedly\nvaulter\nvaulting\nvaultlike\nvaulty\nvaunt\nvauntage\nvaunted\nvaunter\nvauntery\nvauntful\nvauntiness\nvaunting\nvauntingly\nvauntmure\nvaunty\nvauquelinite\nVauxhall\nVauxhallian\nvauxite\nvavasor\nvavasory\nvaward\nVayu\nVazimba\nVeadar\nveal\nvealer\nvealiness\nveallike\nvealskin\nvealy\nvectigal\nvection\nvectis\nvectograph\nvectographic\nvector\nvectorial\nvectorially\nvecture\nVeda\nVedaic\nVedaism\nVedalia\nvedana\nVedanga\nVedanta\nVedantic\nVedantism\nVedantist\nVedda\nVeddoid\nvedette\nVedic\nvedika\nVediovis\nVedism\nVedist\nvedro\nVeduis\nveduis\nvee\nveen\nveep\nveer\nveerable\nveeringly\nveery\nVega\nvegasite\nvegeculture\nvegetability\nvegetable\nvegetablelike\nvegetablewise\nvegetablize\nvegetably\nvegetal\nvegetalcule\nvegetality\nvegetant\nvegetarian\nvegetarianism\nvegetate\nvegetation\nvegetational\nvegetationless\nvegetative\nvegetatively\nvegetativeness\nvegete\nvegeteness\nvegetism\nvegetive\nvegetivorous\nvegetoalkali\nvegetoalkaline\nvegetoalkaloid\nvegetoanimal\nvegetobituminous\nvegetocarbonaceous\nvegetomineral\nvehemence\nvehemency\nvehement\nvehemently\nvehicle\nvehicular\nvehicularly\nvehiculary\nvehiculate\nvehiculation\nvehiculatory\nVehmic\nvei\nveigle\nveil\nveiled\nveiledly\nveiledness\nveiler\nveiling\nveilless\nveillike\nveilmaker\nveilmaking\nVeiltail\nveily\nvein\nveinage\nveinal\nveinbanding\nveined\nveiner\nveinery\nveininess\nveining\nveinless\nveinlet\nveinous\nveinstone\nveinstuff\nveinule\nveinulet\nveinwise\nveinwork\nveiny\nVejoces\nvejoces\nVejovis\nVejoz\nvela\nvelal\nvelamen\nvelamentous\nvelamentum\nvelar\nvelardenite\nvelaric\nvelarium\nvelarize\nvelary\nvelate\nvelated\nvelation\nvelatura\nVelchanos\nveldcraft\nveldman\nveldschoen\nveldt\nveldtschoen\nVelella\nvelellidous\nvelic\nveliferous\nveliform\nveliger\nveligerous\nVelika\nvelitation\nvell\nvellala\nvelleda\nvelleity\nvellicate\nvellication\nvellicative\nvellinch\nvellon\nvellosine\nVellozia\nVelloziaceae\nvelloziaceous\nvellum\nvellumy\nvelo\nvelociman\nvelocimeter\nvelocious\nvelociously\nvelocipedal\nvelocipede\nvelocipedean\nvelocipedic\nvelocitous\nvelocity\nvelodrome\nvelometer\nvelours\nveloutine\nvelte\nvelum\nvelumen\nvelure\nVelutina\nvelutinous\nvelveret\nvelvet\nvelvetbreast\nvelveted\nvelveteen\nvelveteened\nvelvetiness\nvelveting\nvelvetleaf\nvelvetlike\nvelvetry\nvelvetseed\nvelvetweed\nvelvetwork\nvelvety\nvenada\nvenal\nvenality\nvenalization\nvenalize\nvenally\nvenalness\nVenantes\nvenanzite\nvenatic\nvenatical\nvenatically\nvenation\nvenational\nvenator\nvenatorial\nvenatorious\nvenatory\nvencola\nVend\nvend\nvendace\nVendean\nvendee\nvender\nvendetta\nvendettist\nvendibility\nvendible\nvendibleness\nvendibly\nvendicate\nVendidad\nvending\nvenditate\nvenditation\nvendition\nvenditor\nvendor\nvendue\nVened\nVenedotian\nveneer\nveneerer\nveneering\nvenefical\nveneficious\nveneficness\nveneficous\nvenenate\nvenenation\nvenene\nveneniferous\nvenenific\nvenenosalivary\nvenenous\nvenenousness\nvenepuncture\nvenerability\nvenerable\nvenerableness\nvenerably\nVeneracea\nveneracean\nveneraceous\nveneral\nVeneralia\nvenerance\nvenerant\nvenerate\nveneration\nvenerational\nvenerative\nveneratively\nvenerativeness\nvenerator\nvenereal\nvenerealness\nvenereologist\nvenereology\nvenerer\nVeneres\nvenerial\nVeneridae\nveneriform\nvenery\nvenesect\nvenesection\nvenesector\nvenesia\nVenetes\nVeneti\nVenetian\nVenetianed\nVenetic\nvenezolano\nVenezuelan\nvengeable\nvengeance\nvengeant\nvengeful\nvengefully\nvengefulness\nvengeously\nvenger\nvenial\nveniality\nvenially\nvenialness\nVenice\nvenie\nvenin\nveniplex\nvenipuncture\nvenireman\nvenison\nvenisonivorous\nvenisonlike\nvenisuture\nVenite\nVenizelist\nVenkata\nvennel\nvenner\nvenoatrial\nvenoauricular\nvenom\nvenomed\nvenomer\nvenomization\nvenomize\nvenomly\nvenomness\nvenomosalivary\nvenomous\nvenomously\nvenomousness\nvenomproof\nvenomsome\nvenomy\nvenosal\nvenosclerosis\nvenose\nvenosinal\nvenosity\nvenostasis\nvenous\nvenously\nvenousness\nvent\nventage\nventail\nventer\nVentersdorp\nventhole\nventiduct\nventifact\nventil\nventilable\nventilagin\nventilate\nventilating\nventilation\nventilative\nventilator\nventilatory\nventless\nventometer\nventose\nventoseness\nventosity\nventpiece\nventrad\nventral\nventrally\nventralmost\nventralward\nventric\nventricle\nventricolumna\nventricolumnar\nventricornu\nventricornual\nventricose\nventricoseness\nventricosity\nventricous\nventricular\nventricularis\nventriculite\nVentriculites\nventriculitic\nVentriculitidae\nventriculogram\nventriculography\nventriculoscopy\nventriculose\nventriculous\nventriculus\nventricumbent\nventriduct\nventrifixation\nventrilateral\nventrilocution\nventriloqual\nventriloqually\nventriloque\nventriloquial\nventriloquially\nventriloquism\nventriloquist\nventriloquistic\nventriloquize\nventriloquous\nventriloquously\nventriloquy\nventrimesal\nventrimeson\nventrine\nventripotency\nventripotent\nventripotential\nventripyramid\nventroaxial\nventroaxillary\nventrocaudal\nventrocystorrhaphy\nventrodorsad\nventrodorsal\nventrodorsally\nventrofixation\nventrohysteropexy\nventroinguinal\nventrolateral\nventrolaterally\nventromedial\nventromedian\nventromesal\nventromesial\nventromyel\nventroposterior\nventroptosia\nventroptosis\nventroscopy\nventrose\nventrosity\nventrosuspension\nventrotomy\nventure\nventurer\nventuresome\nventuresomely\nventuresomeness\nVenturia\nventurine\nventurous\nventurously\nventurousness\nvenue\nvenula\nvenular\nvenule\nvenulose\nVenus\nVenusian\nvenust\nVenutian\nvenville\nVeps\nVepse\nVepsish\nvera\nveracious\nveraciously\nveraciousness\nveracity\nveranda\nverandaed\nverascope\nveratral\nveratralbine\nveratraldehyde\nveratrate\nveratria\nveratric\nveratridine\nveratrine\nveratrinize\nveratrize\nveratroidine\nveratrole\nveratroyl\nVeratrum\nveratryl\nveratrylidene\nverb\nverbal\nverbalism\nverbalist\nverbality\nverbalization\nverbalize\nverbalizer\nverbally\nverbarian\nverbarium\nverbasco\nverbascose\nVerbascum\nverbate\nverbatim\nverbena\nVerbenaceae\nverbenaceous\nverbenalike\nverbenalin\nVerbenarius\nverbenate\nverbene\nverbenone\nverberate\nverberation\nverberative\nVerbesina\nverbiage\nverbicide\nverbiculture\nverbid\nverbification\nverbify\nverbigerate\nverbigeration\nverbigerative\nverbile\nverbless\nverbolatry\nverbomania\nverbomaniac\nverbomotor\nverbose\nverbosely\nverboseness\nverbosity\nverbous\nverby\nverchok\nverd\nverdancy\nverdant\nverdantly\nverdantness\nverdea\nverdelho\nverderer\nverderership\nverdet\nverdict\nverdigris\nverdigrisy\nverdin\nverditer\nverdoy\nverdugoship\nverdun\nverdure\nverdured\nverdureless\nverdurous\nverdurousness\nverecund\nverecundity\nverecundness\nverek\nveretilliform\nVeretillum\nveretillum\nverge\nvergeboard\nvergence\nvergency\nvergent\nvergentness\nverger\nvergeress\nvergerism\nvergerless\nvergership\nvergery\nvergi\nvergiform\nVergilianism\nverglas\nvergobret\nveri\nveridic\nveridical\nveridicality\nveridically\nveridicalness\nveridicous\nveridity\nverifiability\nverifiable\nverifiableness\nverifiably\nverificate\nverification\nverificative\nverificatory\nverifier\nverify\nverily\nverine\nverisimilar\nverisimilarly\nverisimilitude\nverisimilitudinous\nverisimility\nverism\nverist\nveristic\nveritability\nveritable\nveritableness\nveritably\nverite\nveritism\nveritist\nveritistic\nverity\nverjuice\nvermeil\nvermeologist\nvermeology\nVermes\nvermetid\nVermetidae\nvermetidae\nVermetus\nvermian\nvermicelli\nvermicidal\nvermicide\nvermicious\nvermicle\nvermicular\nVermicularia\nvermicularly\nvermiculate\nvermiculated\nvermiculation\nvermicule\nvermiculite\nvermiculose\nvermiculosity\nvermiculous\nvermiform\nVermiformia\nvermiformis\nvermiformity\nvermiformous\nvermifugal\nvermifuge\nvermifugous\nvermigerous\nvermigrade\nVermilingues\nVermilinguia\nvermilinguial\nvermilion\nvermilionette\nvermilionize\nvermin\nverminal\nverminate\nvermination\nverminer\nverminicidal\nverminicide\nverminiferous\nverminlike\nverminly\nverminosis\nverminous\nverminously\nverminousness\nverminproof\nverminy\nvermiparous\nvermiparousness\nvermis\nvermivorous\nvermivorousness\nvermix\nVermont\nVermonter\nVermontese\nvermorel\nvermouth\nVern\nvernacle\nvernacular\nvernacularism\nvernacularist\nvernacularity\nvernacularization\nvernacularize\nvernacularly\nvernacularness\nvernaculate\nvernal\nvernality\nvernalization\nvernalize\nvernally\nvernant\nvernation\nvernicose\nvernier\nvernile\nvernility\nvernin\nvernine\nvernition\nVernon\nVernonia\nvernoniaceous\nVernonieae\nvernonin\nVerona\nVeronal\nveronalism\nVeronese\nVeronica\nVeronicella\nVeronicellidae\nVerpa\nverre\nverrel\nverriculate\nverriculated\nverricule\nverruca\nverrucano\nVerrucaria\nVerrucariaceae\nverrucariaceous\nverrucarioid\nverrucated\nverruciferous\nverruciform\nverrucose\nverrucoseness\nverrucosis\nverrucosity\nverrucous\nverruculose\nverruga\nversability\nversable\nversableness\nversal\nversant\nversate\nversatile\nversatilely\nversatileness\nversatility\nversation\nversative\nverse\nversecraft\nversed\nverseless\nverselet\nversemaker\nversemaking\nverseman\nversemanship\nversemonger\nversemongering\nversemongery\nverser\nversesmith\nverset\nversette\nverseward\nversewright\nversicle\nversicler\nversicolor\nversicolorate\nversicolored\nversicolorous\nversicular\nversicule\nversifiable\nversifiaster\nversification\nversificator\nversificatory\nversificatrix\nversifier\nversiform\nversify\nversiloquy\nversine\nversion\nversional\nversioner\nversionist\nversionize\nversipel\nverso\nversor\nverst\nversta\nversual\nversus\nvert\nvertebra\nvertebrae\nvertebral\nvertebraless\nvertebrally\nVertebraria\nvertebrarium\nvertebrarterial\nVertebrata\nvertebrate\nvertebrated\nvertebration\nvertebre\nvertebrectomy\nvertebriform\nvertebroarterial\nvertebrobasilar\nvertebrochondral\nvertebrocostal\nvertebrodymus\nvertebrofemoral\nvertebroiliac\nvertebromammary\nvertebrosacral\nvertebrosternal\nvertex\nvertibility\nvertible\nvertibleness\nvertical\nverticalism\nverticality\nvertically\nverticalness\nvertices\nverticil\nverticillary\nverticillaster\nverticillastrate\nverticillate\nverticillated\nverticillately\nverticillation\nverticilliaceous\nverticilliose\nVerticillium\nverticillus\nverticity\nverticomental\nverticordious\nvertiginate\nvertigines\nvertiginous\nvertigo\nvertilinear\nvertimeter\nVertumnus\nVerulamian\nveruled\nverumontanum\nvervain\nvervainlike\nverve\nvervecine\nvervel\nverveled\nvervelle\nvervenia\nvervet\nvery\nVesalian\nvesania\nvesanic\nvesbite\nvesicae\nvesical\nvesicant\nvesicate\nvesication\nvesicatory\nvesicle\nvesicoabdominal\nvesicocavernous\nvesicocele\nvesicocervical\nvesicoclysis\nvesicofixation\nvesicointestinal\nvesicoprostatic\nvesicopubic\nvesicorectal\nvesicosigmoid\nvesicospinal\nvesicotomy\nvesicovaginal\nvesicular\nVesicularia\nvesicularly\nvesiculary\nvesiculase\nVesiculata\nVesiculatae\nvesiculate\nvesiculation\nvesicule\nvesiculectomy\nvesiculiferous\nvesiculiform\nvesiculigerous\nvesiculitis\nvesiculobronchial\nvesiculocavernous\nvesiculopustular\nvesiculose\nvesiculotomy\nvesiculotubular\nvesiculotympanic\nvesiculotympanitic\nvesiculous\nvesiculus\nvesicupapular\nveskit\nVespa\nvespacide\nvespal\nvesper\nvesperal\nvesperian\nvespering\nvespers\nvespertide\nvespertilian\nVespertilio\nvespertilio\nVespertiliones\nvespertilionid\nVespertilionidae\nVespertilioninae\nvespertilionine\nvespertinal\nvespertine\nvespery\nvespiary\nvespid\nVespidae\nvespiform\nVespina\nvespine\nvespoid\nVespoidea\nvessel\nvesseled\nvesselful\nvessignon\nvest\nVesta\nvestal\nVestalia\nvestalia\nvestalship\nVestas\nvestee\nvester\nvestiarian\nvestiarium\nvestiary\nvestibula\nvestibular\nvestibulary\nvestibulate\nvestibule\nvestibuled\nvestibulospinal\nvestibulum\nvestige\nvestigial\nvestigially\nVestigian\nvestigiary\nvestigium\nvestiment\nvestimental\nvestimentary\nvesting\nVestini\nVestinian\nvestiture\nvestlet\nvestment\nvestmental\nvestmented\nvestral\nvestralization\nvestrical\nvestrification\nvestrify\nvestry\nvestrydom\nvestryhood\nvestryish\nvestryism\nvestryize\nvestryman\nvestrymanly\nvestrymanship\nvestuary\nvestural\nvesture\nvesturer\nVesuvian\nvesuvian\nvesuvianite\nvesuviate\nvesuvite\nvesuvius\nveszelyite\nvet\nveta\nvetanda\nvetch\nvetchling\nvetchy\nveteran\nveterancy\nveteraness\nveteranize\nveterinarian\nveterinarianism\nveterinary\nvetitive\nvetivene\nvetivenol\nvetiver\nVetiveria\nvetiveria\nvetivert\nvetkousie\nveto\nvetoer\nvetoism\nvetoist\nvetoistic\nvetoistical\nvetust\nvetusty\nveuglaire\nveuve\nvex\nvexable\nvexation\nvexatious\nvexatiously\nvexatiousness\nvexatory\nvexed\nvexedly\nvexedness\nvexer\nvexful\nvexil\nvexillar\nvexillarious\nvexillary\nvexillate\nvexillation\nvexillum\nvexingly\nvexingness\nvext\nvia\nviability\nviable\nviaduct\nviaggiatory\nviagram\nviagraph\nviajaca\nvial\nvialful\nvialmaker\nvialmaking\nvialogue\nviameter\nviand\nviander\nviatic\nviatica\nviatical\nviaticum\nviatometer\nviator\nviatorial\nviatorially\nvibetoite\nvibex\nvibgyor\nvibix\nvibracular\nvibracularium\nvibraculoid\nvibraculum\nvibrance\nvibrancy\nvibrant\nvibrantly\nvibraphone\nvibrate\nvibratile\nvibratility\nvibrating\nvibratingly\nvibration\nvibrational\nvibrationless\nvibratiuncle\nvibratiunculation\nvibrative\nvibrato\nvibrator\nvibratory\nVibrio\nvibrioid\nvibrion\nvibrionic\nvibrissa\nvibrissae\nvibrissal\nvibrograph\nvibromassage\nvibrometer\nvibromotive\nvibronic\nvibrophone\nvibroscope\nvibroscopic\nvibrotherapeutics\nviburnic\nviburnin\nViburnum\nVic\nvicar\nvicarage\nvicarate\nvicaress\nvicarial\nvicarian\nvicarianism\nvicariate\nvicariateship\nvicarious\nvicariously\nvicariousness\nvicarly\nvicarship\nVice\nvice\nvicecomes\nvicecomital\nvicegeral\nvicegerency\nvicegerent\nvicegerentship\nviceless\nvicelike\nvicenary\nvicennial\nviceregal\nviceregally\nvicereine\nviceroy\nviceroyal\nviceroyalty\nviceroydom\nviceroyship\nvicety\nviceversally\nVichyite\nvichyssoise\nVicia\nvicianin\nvicianose\nvicilin\nvicinage\nvicinal\nvicine\nvicinity\nviciosity\nvicious\nviciously\nviciousness\nvicissitous\nvicissitude\nvicissitudinary\nvicissitudinous\nvicissitudinousness\nVick\nVicki\nVickie\nVicky\nvicoite\nvicontiel\nvictim\nvictimhood\nvictimizable\nvictimization\nvictimize\nvictimizer\nvictless\nVictor\nvictor\nvictordom\nvictorfish\nVictoria\nVictorian\nVictorianism\nVictorianize\nVictorianly\nvictoriate\nvictoriatus\nvictorine\nvictorious\nvictoriously\nvictoriousness\nvictorium\nvictory\nvictoryless\nvictress\nvictrix\nVictrola\nvictrola\nvictual\nvictualage\nvictualer\nvictualing\nvictuallership\nvictualless\nvictualry\nvictuals\nvicuna\nViddhal\nviddui\nvidendum\nvideo\nvideogenic\nvidette\nVidhyanath\nVidian\nvidonia\nvidry\nVidua\nviduage\nvidual\nvidually\nviduate\nviduated\nviduation\nViduinae\nviduine\nviduity\nviduous\nvidya\nvie\nvielle\nVienna\nViennese\nvier\nvierling\nviertel\nviertelein\nVietminh\nVietnamese\nview\nviewable\nviewably\nviewer\nviewiness\nviewless\nviewlessly\nviewly\nviewpoint\nviewsome\nviewster\nviewworthy\nviewy\nvifda\nviga\nvigentennial\nvigesimal\nvigesimation\nvigia\nvigil\nvigilance\nvigilancy\nvigilant\nvigilante\nvigilantism\nvigilantly\nvigilantness\nvigilate\nvigilation\nvigintiangular\nvigneron\nvignette\nvignetter\nvignettist\nvignin\nvigonia\nvigor\nvigorist\nvigorless\nvigorous\nvigorously\nvigorousness\nvihara\nvihuela\nvijao\nVijay\nviking\nvikingism\nvikinglike\nvikingship\nvila\nvilayet\nvile\nvilehearted\nVilela\nvilely\nvileness\nVilhelm\nVili\nvilicate\nvilification\nvilifier\nvilify\nvilifyingly\nvilipend\nvilipender\nvilipenditory\nvility\nvill\nvilla\nvilladom\nvillaette\nvillage\nvillageful\nvillagehood\nvillageless\nvillagelet\nvillagelike\nvillageous\nvillager\nvillageress\nvillagery\nvillaget\nvillageward\nvillagey\nvillagism\nvillain\nvillainage\nvillaindom\nvillainess\nvillainist\nvillainous\nvillainously\nvillainousness\nvillainproof\nvillainy\nvillakin\nvillaless\nvillalike\nvillanage\nvillanella\nvillanelle\nvillanette\nvillanous\nvillanously\nVillanova\nVillanovan\nvillar\nvillate\nvillatic\nville\nvillein\nvilleinage\nvilleiness\nvilleinhold\nvillenage\nvilliaumite\nvilliferous\nvilliform\nvilliplacental\nVilliplacentalia\nvillitis\nvilloid\nvillose\nvillosity\nvillous\nvillously\nvillus\nvim\nvimana\nvimen\nvimful\nViminal\nviminal\nvimineous\nvina\nvinaceous\nvinaconic\nvinage\nvinagron\nvinaigrette\nvinaigretted\nvinaigrier\nvinaigrous\nvinal\nVinalia\nvinasse\nvinata\nVince\nVincent\nvincent\nVincentian\nVincenzo\nVincetoxicum\nvincetoxin\nvincibility\nvincible\nvincibleness\nvincibly\nvincular\nvinculate\nvinculation\nvinculum\nVindelici\nvindemial\nvindemiate\nvindemiation\nvindemiatory\nVindemiatrix\nvindex\nvindhyan\nvindicability\nvindicable\nvindicableness\nvindicably\nvindicate\nvindication\nvindicative\nvindicatively\nvindicativeness\nvindicator\nvindicatorily\nvindicatorship\nvindicatory\nvindicatress\nvindictive\nvindictively\nvindictiveness\nvindictivolence\nvindresser\nvine\nvinea\nvineal\nvineatic\nvined\nvinegar\nvinegarer\nvinegarette\nvinegarish\nvinegarist\nvinegarroon\nvinegarweed\nvinegary\nvinegerone\nvinegrower\nvineity\nvineland\nvineless\nvinelet\nvinelike\nviner\nvinery\nvinestalk\nvinewise\nvineyard\nVineyarder\nvineyarding\nvineyardist\nvingerhoed\nVingolf\nvinhatico\nvinic\nvinicultural\nviniculture\nviniculturist\nvinifera\nviniferous\nvinification\nvinificator\nVinland\nvinny\nvino\nvinoacetous\nVinod\nvinolence\nvinolent\nvinologist\nvinology\nvinometer\nvinomethylic\nvinose\nvinosity\nvinosulphureous\nvinous\nvinously\nvinousness\nvinquish\nvint\nvinta\nvintage\nvintager\nvintaging\nvintem\nvintener\nvintlite\nvintner\nvintneress\nvintnership\nvintnery\nvintress\nvintry\nviny\nvinyl\nvinylbenzene\nvinylene\nvinylic\nvinylidene\nviol\nviola\nviolability\nviolable\nviolableness\nviolably\nViolaceae\nviolacean\nviolaceous\nviolaceously\nviolal\nViolales\nviolanin\nviolaquercitrin\nviolate\nviolater\nviolation\nviolational\nviolative\nviolator\nviolatory\nviolature\nviolence\nviolent\nviolently\nviolentness\nvioler\nviolescent\nviolet\nvioletish\nvioletlike\nviolette\nvioletwise\nviolety\nviolin\nviolina\nvioline\nviolinette\nviolinist\nviolinistic\nviolinlike\nviolinmaker\nviolinmaking\nviolist\nviolmaker\nviolmaking\nviolon\nvioloncellist\nvioloncello\nviolone\nviolotta\nvioluric\nviosterol\nVip\nviper\nVipera\nviperan\nviperess\nviperfish\nviperian\nviperid\nViperidae\nviperiform\nViperina\nViperinae\nviperine\nviperish\nviperishly\nviperlike\nviperling\nviperoid\nViperoidea\nviperous\nviperously\nviperousness\nvipery\nvipolitic\nvipresident\nviqueen\nVira\nviragin\nviraginian\nviraginity\nviraginous\nvirago\nviragoish\nviragolike\nviragoship\nviral\nVirales\nVirbius\nvire\nvirelay\nviremia\nviremic\nvirent\nvireo\nvireonine\nvirescence\nvirescent\nvirga\nvirgal\nvirgate\nvirgated\nvirgater\nvirgation\nvirgilia\nVirgilism\nvirgin\nvirginal\nVirginale\nvirginalist\nvirginality\nvirginally\nvirgineous\nvirginhead\nVirginia\nVirginian\nVirginid\nvirginitis\nvirginity\nvirginityship\nvirginium\nvirginlike\nvirginly\nvirginship\nVirgo\nvirgula\nvirgular\nVirgularia\nvirgularian\nVirgulariidae\nvirgulate\nvirgule\nvirgultum\nvirial\nviricide\nvirid\nviridene\nviridescence\nviridescent\nviridian\nviridigenous\nviridine\nviridite\nviridity\nvirific\nvirify\nvirile\nvirilely\nvirileness\nvirilescence\nvirilescent\nvirilify\nviriliously\nvirilism\nvirilist\nvirility\nviripotent\nviritrate\nvirl\nvirole\nviroled\nvirological\nvirologist\nvirology\nviron\nvirose\nvirosis\nvirous\nvirtu\nvirtual\nvirtualism\nvirtualist\nvirtuality\nvirtualize\nvirtually\nvirtue\nvirtued\nvirtuefy\nvirtuelessness\nvirtueproof\nvirtuless\nvirtuosa\nvirtuose\nvirtuosi\nvirtuosic\nvirtuosity\nvirtuoso\nvirtuosoship\nvirtuous\nvirtuouslike\nvirtuously\nvirtuousness\nvirucidal\nvirucide\nviruela\nvirulence\nvirulency\nvirulent\nvirulented\nvirulently\nvirulentness\nviruliferous\nvirus\nviruscidal\nviruscide\nvirusemic\nvis\nvisa\nvisage\nvisaged\nvisagraph\nvisarga\nVisaya\nVisayan\nviscacha\nviscera\nvisceral\nvisceralgia\nviscerally\nviscerate\nvisceration\nvisceripericardial\nvisceroinhibitory\nvisceromotor\nvisceroparietal\nvisceroperitioneal\nvisceropleural\nvisceroptosis\nvisceroptotic\nviscerosensory\nvisceroskeletal\nviscerosomatic\nviscerotomy\nviscerotonia\nviscerotonic\nviscerotrophic\nviscerotropic\nviscerous\nviscid\nviscidity\nviscidize\nviscidly\nviscidness\nviscidulous\nviscin\nviscoidal\nviscolize\nviscometer\nviscometrical\nviscometrically\nviscometry\nviscontal\nviscoscope\nviscose\nviscosimeter\nviscosimetry\nviscosity\nviscount\nviscountcy\nviscountess\nviscountship\nviscounty\nviscous\nviscously\nviscousness\nviscus\nvise\nviseman\nVishal\nVishnavite\nVishnu\nVishnuism\nVishnuite\nVishnuvite\nvisibility\nvisibilize\nvisible\nvisibleness\nvisibly\nvisie\nVisigoth\nVisigothic\nvisile\nvision\nvisional\nvisionally\nvisionarily\nvisionariness\nvisionary\nvisioned\nvisioner\nvisionic\nvisionist\nvisionize\nvisionless\nvisionlike\nvisionmonger\nvisionproof\nvisit\nvisita\nvisitable\nVisitandine\nvisitant\nvisitation\nvisitational\nvisitative\nvisitator\nvisitatorial\nvisite\nvisitee\nvisiter\nvisiting\nvisitment\nvisitor\nvisitoress\nvisitorial\nvisitorship\nvisitress\nvisitrix\nvisive\nvisne\nvison\nvisor\nvisorless\nvisorlike\nvista\nvistaed\nvistal\nvistaless\nvistamente\nVistlik\nvisto\nVistulian\nvisual\nvisualist\nvisuality\nvisualization\nvisualize\nvisualizer\nvisually\nvisuoauditory\nvisuokinesthetic\nvisuometer\nvisuopsychic\nvisuosensory\nvita\nVitaceae\nVitaglass\nvital\nvitalic\nvitalism\nvitalist\nvitalistic\nvitalistically\nvitality\nvitalization\nvitalize\nvitalizer\nvitalizing\nvitalizingly\nVitallium\nvitally\nvitalness\nvitals\nvitamer\nvitameric\nvitamin\nvitaminic\nvitaminize\nvitaminology\nvitapath\nvitapathy\nvitaphone\nvitascope\nvitascopic\nvitasti\nvitativeness\nvitellarian\nvitellarium\nvitellary\nvitellicle\nvitelliferous\nvitelligenous\nvitelligerous\nvitellin\nvitelline\nvitellogene\nvitellogenous\nvitellose\nvitellus\nviterbite\nViti\nvitiable\nvitiate\nvitiated\nvitiation\nvitiator\nviticetum\nviticulose\nviticultural\nviticulture\nviticulturer\nviticulturist\nvitiferous\nvitiliginous\nvitiligo\nvitiligoidea\nvitiosity\nVitis\nvitium\nvitochemic\nvitochemical\nvitrage\nvitrail\nvitrailed\nvitrailist\nvitrain\nvitraux\nvitreal\nvitrean\nvitrella\nvitremyte\nvitreodentinal\nvitreodentine\nvitreoelectric\nvitreosity\nvitreous\nvitreouslike\nvitreously\nvitreousness\nvitrescence\nvitrescency\nvitrescent\nvitrescibility\nvitrescible\nvitreum\nvitric\nvitrics\nvitrifaction\nvitrifacture\nvitrifiability\nvitrifiable\nvitrification\nvitriform\nvitrify\nVitrina\nvitrine\nvitrinoid\nvitriol\nvitriolate\nvitriolation\nvitriolic\nvitrioline\nvitriolizable\nvitriolization\nvitriolize\nvitriolizer\nvitrite\nvitrobasalt\nvitrophyre\nvitrophyric\nvitrotype\nvitrous\nVitruvian\nVitruvianism\nvitta\nvittate\nvitular\nvituline\nvituperable\nvituperate\nvituperation\nvituperative\nvituperatively\nvituperator\nvituperatory\nvituperious\nviuva\nviva\nvivacious\nvivaciously\nvivaciousness\nvivacity\nvivandiere\nvivarium\nvivary\nvivax\nvive\nVivek\nvively\nvivency\nviver\nViverridae\nviverriform\nViverrinae\nviverrine\nvivers\nvives\nvivianite\nvivicremation\nvivid\nvividialysis\nvividiffusion\nvividissection\nvividity\nvividly\nvividness\nvivific\nvivificate\nvivification\nvivificative\nvivificator\nvivifier\nvivify\nviviparism\nviviparity\nviviparous\nviviparously\nviviparousness\nvivipary\nviviperfuse\nvivisect\nvivisection\nvivisectional\nvivisectionally\nvivisectionist\nvivisective\nvivisector\nvivisectorium\nvivisepulture\nvixen\nvixenish\nvixenishly\nvixenishness\nvixenlike\nvixenly\nvizard\nvizarded\nvizardless\nvizardlike\nvizardmonger\nvizier\nvizierate\nviziercraft\nvizierial\nviziership\nvizircraft\nVlach\nVladimir\nVladislav\nvlei\nvoar\nvocability\nvocable\nvocably\nvocabular\nvocabularian\nvocabularied\nvocabulary\nvocabulation\nvocabulist\nvocal\nvocalic\nvocalion\nvocalise\nvocalism\nvocalist\nvocalistic\nvocality\nvocalization\nvocalize\nvocalizer\nvocaller\nvocally\nvocalness\nvocate\nvocation\nvocational\nvocationalism\nvocationalization\nvocationalize\nvocationally\nvocative\nvocatively\nVochysiaceae\nvochysiaceous\nvocicultural\nvociferance\nvociferant\nvociferate\nvociferation\nvociferative\nvociferator\nvociferize\nvociferosity\nvociferous\nvociferously\nvociferousness\nvocification\nvocimotor\nvocular\nvocule\nVod\nvodka\nvoe\nvoet\nvoeten\nVoetian\nvog\nvogesite\nvoglite\nvogue\nvoguey\nvoguish\nVogul\nvoice\nvoiced\nvoiceful\nvoicefulness\nvoiceless\nvoicelessly\nvoicelessness\nvoicelet\nvoicelike\nvoicer\nvoicing\nvoid\nvoidable\nvoidableness\nvoidance\nvoided\nvoidee\nvoider\nvoiding\nvoidless\nvoidly\nvoidness\nvoile\nvoiturette\nvoivode\nvoivodeship\nvol\nvolable\nvolage\nVolans\nvolant\nvolantly\nVolapuk\nVolapuker\nVolapukism\nVolapukist\nvolar\nvolata\nvolatic\nvolatile\nvolatilely\nvolatileness\nvolatility\nvolatilizable\nvolatilization\nvolatilize\nvolatilizer\nvolation\nvolational\nvolborthite\nVolcae\nvolcan\nVolcanalia\nvolcanian\nvolcanic\nvolcanically\nvolcanicity\nvolcanism\nvolcanist\nvolcanite\nvolcanity\nvolcanization\nvolcanize\nvolcano\nvolcanoism\nvolcanological\nvolcanologist\nvolcanologize\nvolcanology\nVolcanus\nvole\nvolemitol\nvolency\nvolent\nvolently\nvolery\nvolet\nvolhynite\nvolipresence\nvolipresent\nvolitant\nvolitate\nvolitation\nvolitational\nvolitiency\nvolitient\nvolition\nvolitional\nvolitionalist\nvolitionality\nvolitionally\nvolitionary\nvolitionate\nvolitionless\nvolitive\nvolitorial\nVolkerwanderung\nvolley\nvolleyball\nvolleyer\nvolleying\nvolleyingly\nvolost\nvolplane\nvolplanist\nVolsci\nVolscian\nvolsella\nvolsellum\nVolstead\nVolsteadism\nvolt\nVolta\nvoltaelectric\nvoltaelectricity\nvoltaelectrometer\nvoltaelectrometric\nvoltage\nvoltagraphy\nvoltaic\nVoltairian\nVoltairianize\nVoltairish\nVoltairism\nvoltaism\nvoltaite\nvoltameter\nvoltametric\nvoltammeter\nvoltaplast\nvoltatype\nvoltinism\nvoltivity\nvoltize\nvoltmeter\nvoltzite\nvolubilate\nvolubility\nvoluble\nvolubleness\nvolubly\nvolucrine\nvolume\nvolumed\nvolumenometer\nvolumenometry\nvolumescope\nvolumeter\nvolumetric\nvolumetrical\nvolumetrically\nvolumetry\nvolumette\nvoluminal\nvoluminosity\nvoluminous\nvoluminously\nvoluminousness\nvolumist\nvolumometer\nvolumometrical\nvolumometry\nvoluntariate\nvoluntarily\nvoluntariness\nvoluntarism\nvoluntarist\nvoluntaristic\nvoluntarity\nvoluntary\nvoluntaryism\nvoluntaryist\nvoluntative\nvolunteer\nvolunteerism\nvolunteerly\nvolunteership\nvolupt\nvoluptary\nvoluptas\nvoluptuarian\nvoluptuary\nvoluptuate\nvoluptuosity\nvoluptuous\nvoluptuously\nvoluptuousness\nvolupty\nVoluspa\nvoluta\nvolutate\nvolutation\nvolute\nvoluted\nVolutidae\nvolutiform\nvolutin\nvolution\nvolutoid\nvolva\nvolvate\nvolvelle\nvolvent\nVolvocaceae\nvolvocaceous\nvolvulus\nvomer\nvomerine\nvomerobasilar\nvomeronasal\nvomeropalatine\nvomica\nvomicine\nvomit\nvomitable\nvomiter\nvomiting\nvomitingly\nvomition\nvomitive\nvomitiveness\nvomito\nvomitory\nvomiture\nvomiturition\nvomitus\nvomitwort\nvondsira\nvonsenite\nvoodoo\nvoodooism\nvoodooist\nvoodooistic\nvoracious\nvoraciously\nvoraciousness\nvoracity\nvoraginous\nvorago\nvorant\nvorhand\nvorlooper\nvorondreo\nvorpal\nvortex\nvortical\nvortically\nvorticel\nVorticella\nvorticellid\nVorticellidae\nvortices\nvorticial\nvorticiform\nvorticism\nvorticist\nvorticity\nvorticose\nvorticosely\nvorticular\nvorticularly\nvortiginous\nVortumnus\nVosgian\nvota\nvotable\nvotal\nvotally\nvotaress\nvotarist\nvotary\nvotation\nVote\nvote\nvoteen\nvoteless\nvoter\nvoting\nVotish\nvotive\nvotively\nvotiveness\nvotometer\nvotress\nVotyak\nvouch\nvouchable\nvouchee\nvoucher\nvoucheress\nvouchment\nvouchsafe\nvouchsafement\nvouge\nVougeot\nVouli\nvoussoir\nvow\nvowed\nvowel\nvowelish\nvowelism\nvowelist\nvowelization\nvowelize\nvowelless\nvowellessness\nvowellike\nvowely\nvower\nvowess\nvowless\nvowmaker\nvowmaking\nvoyage\nvoyageable\nvoyager\nvoyance\nvoyeur\nvoyeurism\nvraic\nvraicker\nvraicking\nvrbaite\nvriddhi\nvrother\nVu\nvug\nvuggy\nVulcan\nVulcanalia\nVulcanalial\nVulcanalian\nVulcanian\nVulcanic\nvulcanicity\nvulcanism\nvulcanist\nvulcanite\nvulcanizable\nvulcanizate\nvulcanization\nvulcanize\nvulcanizer\nvulcanological\nvulcanologist\nvulcanology\nvulgar\nvulgare\nvulgarian\nvulgarish\nvulgarism\nvulgarist\nvulgarity\nvulgarization\nvulgarize\nvulgarizer\nvulgarlike\nvulgarly\nvulgarness\nvulgarwise\nVulgate\nvulgate\nvulgus\nvuln\nvulnerability\nvulnerable\nvulnerableness\nvulnerably\nvulnerary\nvulnerate\nvulneration\nvulnerative\nvulnerose\nvulnific\nvulnose\nVulpecula\nvulpecular\nVulpeculid\nVulpes\nvulpic\nvulpicidal\nvulpicide\nvulpicidism\nVulpinae\nvulpine\nvulpinism\nvulpinite\nvulsella\nvulsellum\nvulsinite\nVultur\nvulture\nvulturelike\nvulturewise\nVulturidae\nVulturinae\nvulturine\nvulturish\nvulturism\nvulturn\nvulturous\nvulva\nvulval\nvulvar\nvulvate\nvulviform\nvulvitis\nvulvocrural\nvulvouterine\nvulvovaginal\nvulvovaginitis\nvum\nvying\nvyingly\nW\nw\nWa\nwa\nWaac\nwaag\nwaapa\nwaar\nWaasi\nwab\nwabber\nwabble\nwabbly\nwabby\nwabe\nWabena\nwabeno\nWabi\nwabster\nWabuma\nWabunga\nWac\nwacago\nwace\nWachaga\nWachenheimer\nwachna\nWachuset\nwack\nwacke\nwacken\nwacker\nwackiness\nwacky\nWaco\nwad\nwaddent\nwadder\nwadding\nwaddler\nwaddlesome\nwaddling\nwaddlingly\nwaddly\nwaddy\nwaddywood\nWade\nwade\nwadeable\nwader\nwadi\nwading\nwadingly\nwadlike\nwadmaker\nwadmaking\nwadmal\nwadmeal\nwadna\nwadset\nwadsetter\nwae\nwaeg\nwaer\nwaesome\nwaesuck\nWaf\nWafd\nWafdist\nwafer\nwaferer\nwaferish\nwafermaker\nwafermaking\nwaferwoman\nwaferwork\nwafery\nwaff\nwaffle\nwafflike\nwaffly\nwaft\nwaftage\nwafter\nwafture\nwafty\nwag\nWaganda\nwaganging\nwagaun\nwagbeard\nwage\nwaged\nwagedom\nwageless\nwagelessness\nwagenboom\nWagener\nwager\nwagerer\nwagering\nwages\nwagesman\nwagework\nwageworker\nwageworking\nwaggable\nwaggably\nwaggel\nwagger\nwaggery\nwaggie\nwaggish\nwaggishly\nwaggishness\nwaggle\nwaggling\nwagglingly\nwaggly\nWaggumbura\nwaggy\nwaglike\nwagling\nWagneresque\nWagnerian\nWagneriana\nWagnerianism\nWagnerism\nWagnerist\nWagnerite\nwagnerite\nWagnerize\nWagogo\nWagoma\nwagon\nwagonable\nwagonage\nwagoner\nwagoness\nwagonette\nwagonful\nwagonload\nwagonmaker\nwagonmaking\nwagonman\nwagonry\nwagonsmith\nwagonway\nwagonwayman\nwagonwork\nwagonwright\nwagsome\nwagtail\nWaguha\nwagwag\nwagwants\nWagweno\nwagwit\nwah\nWahabi\nWahabiism\nWahabit\nWahabitism\nwahahe\nWahehe\nWahima\nwahine\nWahlenbergia\nwahoo\nwahpekute\nWahpeton\nwaiata\nWaibling\nWaicuri\nWaicurian\nwaif\nWaiguli\nWaiilatpuan\nwaik\nwaikly\nwaikness\nwail\nWailaki\nwailer\nwailful\nwailfully\nwailingly\nwailsome\nwaily\nwain\nwainage\nwainbote\nwainer\nwainful\nwainman\nwainrope\nwainscot\nwainscoting\nwainwright\nwaipiro\nwairch\nwaird\nwairepo\nwairsh\nwaise\nwaist\nwaistband\nwaistcloth\nwaistcoat\nwaistcoated\nwaistcoateer\nwaistcoathole\nwaistcoating\nwaistcoatless\nwaisted\nwaister\nwaisting\nwaistless\nwaistline\nwait\nwaiter\nwaiterage\nwaiterdom\nwaiterhood\nwaitering\nwaiterlike\nwaitership\nwaiting\nwaitingly\nwaitress\nwaivatua\nwaive\nwaiver\nwaivery\nwaivod\nWaiwai\nwaiwode\nwajang\nwaka\nWakamba\nwakan\nWakashan\nwake\nwakeel\nwakeful\nwakefully\nwakefulness\nwakeless\nwaken\nwakener\nwakening\nwaker\nwakes\nwaketime\nwakf\nWakhi\nwakif\nwakiki\nwaking\nwakingly\nwakiup\nwakken\nwakon\nwakonda\nWakore\nWakwafi\nwaky\nWalach\nWalachian\nwalahee\nWalapai\nWalchia\nWaldenses\nWaldensian\nwaldflute\nwaldgrave\nwaldgravine\nWaldheimia\nwaldhorn\nwaldmeister\nWaldsteinia\nwale\nwaled\nwalepiece\nWaler\nwaler\nwalewort\nwali\nwaling\nwalk\nwalkable\nwalkaway\nwalker\nwalking\nwalkist\nwalkmill\nwalkmiller\nwalkout\nwalkover\nwalkrife\nwalkside\nwalksman\nwalkway\nwalkyrie\nwall\nwallaba\nwallaby\nWallach\nwallah\nwallaroo\nWallawalla\nwallbird\nwallboard\nwalled\nwaller\nWallerian\nwallet\nwalletful\nwalleye\nwalleyed\nwallflower\nwallful\nwallhick\nwalling\nwallise\nwallless\nwallman\nWallon\nWallonian\nWalloon\nwalloon\nwallop\nwalloper\nwalloping\nwallow\nwallower\nwallowish\nwallowishly\nwallowishness\nwallpaper\nwallpapering\nwallpiece\nWallsend\nwallwise\nwallwork\nwallwort\nwally\nwalnut\nWalpapi\nWalpolean\nWalpurgis\nwalpurgite\nwalrus\nwalsh\nWalt\nwalt\nWalter\nwalter\nwalth\nWaltonian\nwaltz\nwaltzer\nwaltzlike\nwalycoat\nwamara\nwambais\nwamble\nwambliness\nwambling\nwamblingly\nwambly\nWambuba\nWambugu\nWambutti\nwame\nwamefou\nwamel\nwammikin\nwamp\nWampanoag\nwampee\nwample\nwampum\nwampumpeag\nwampus\nwamus\nwan\nWanapum\nwanchancy\nwand\nwander\nwanderable\nwanderer\nwandering\nwanderingly\nwanderingness\nWanderjahr\nwanderlust\nwanderluster\nwanderlustful\nwanderoo\nwandery\nwanderyear\nwandflower\nwandle\nwandlike\nwandoo\nWandorobo\nwandsman\nwandy\nwane\nWaneatta\nwaned\nwaneless\nwang\nwanga\nwangala\nwangan\nWangara\nwangateur\nwanghee\nwangle\nwangler\nWangoni\nwangrace\nwangtooth\nwanhope\nwanhorn\nwanigan\nwaning\nwankapin\nwankle\nwankliness\nwankly\nwanle\nwanly\nwanner\nwanness\nwannish\nwanny\nwanrufe\nwansonsy\nwant\nwantage\nwanter\nwantful\nwanthill\nwanthrift\nwanting\nwantingly\nwantingness\nwantless\nwantlessness\nwanton\nwantoner\nwantonlike\nwantonly\nwantonness\nwantwit\nwanty\nwanwordy\nwanworth\nwany\nWanyakyusa\nWanyamwezi\nWanyasa\nWanyoro\nwap\nwapacut\nWapato\nwapatoo\nwapentake\nWapisiana\nwapiti\nWapogoro\nWapokomo\nwapp\nWappato\nwappenschaw\nwappenschawing\nwapper\nwapping\nWappinger\nWappo\nwar\nwarabi\nwaratah\nwarble\nwarbled\nwarblelike\nwarbler\nwarblerlike\nwarblet\nwarbling\nwarblingly\nwarbly\nwarch\nwarcraft\nward\nwardable\nwardage\nwardapet\nwarday\nwarded\nWarden\nwarden\nwardency\nwardenry\nwardenship\nwarder\nwarderer\nwardership\nwardholding\nwarding\nwardite\nwardless\nwardlike\nwardmaid\nwardman\nwardmote\nwardress\nwardrobe\nwardrober\nwardroom\nwardship\nwardsmaid\nwardsman\nwardswoman\nwardwite\nwardwoman\nware\nWaregga\nwarehou\nwarehouse\nwarehouseage\nwarehoused\nwarehouseful\nwarehouseman\nwarehouser\nwareless\nwaremaker\nwaremaking\nwareman\nwareroom\nwarf\nwarfare\nwarfarer\nwarfaring\nwarful\nwarily\nwariness\nWaring\nwaringin\nwarish\nwarison\nwark\nwarkamoowee\nwarl\nwarless\nwarlessly\nwarlike\nwarlikely\nwarlikeness\nwarlock\nwarluck\nwarly\nwarm\nwarmable\nwarman\nwarmed\nwarmedly\nwarmer\nwarmful\nwarmhearted\nwarmheartedly\nwarmheartedness\nwarmhouse\nwarming\nwarmish\nwarmly\nwarmness\nwarmonger\nwarmongering\nwarmouth\nwarmth\nwarmthless\nwarmus\nwarn\nwarnel\nwarner\nwarning\nwarningly\nwarningproof\nwarnish\nwarnoth\nwarnt\nWarori\nwarp\nwarpable\nwarpage\nwarped\nwarper\nwarping\nwarplane\nwarple\nwarplike\nwarproof\nwarpwise\nwarragal\nwarrambool\nwarran\nwarrand\nwarrandice\nwarrant\nwarrantable\nwarrantableness\nwarrantably\nwarranted\nwarrantee\nwarranter\nwarrantise\nwarrantless\nwarrantor\nwarranty\nwarratau\nWarrau\nwarree\nWarren\nwarren\nwarrener\nwarrenlike\nwarrer\nWarri\nwarrin\nwarrior\nwarrioress\nwarriorhood\nwarriorism\nwarriorlike\nwarriorship\nwarriorwise\nwarrok\nWarsaw\nwarsaw\nwarse\nwarsel\nwarship\nwarsle\nwarsler\nwarst\nwart\nwarted\nwartern\nwartflower\nwarth\nwartime\nwartless\nwartlet\nwartlike\nwartproof\nwartweed\nwartwort\nwarty\nwartyback\nWarua\nWarundi\nwarve\nwarwards\nWarwick\nwarwickite\nwarwolf\nwarworn\nwary\nwas\nwasabi\nWasagara\nWasandawi\nWasango\nWasat\nWasatch\nWasco\nwase\nWasegua\nwasel\nwash\nwashability\nwashable\nwashableness\nWashaki\nwashaway\nwashbasin\nwashbasket\nwashboard\nwashbowl\nwashbrew\nwashcloth\nwashday\nwashdish\nwashdown\nwashed\nwashen\nwasher\nwasherless\nwasherman\nwasherwife\nwasherwoman\nwashery\nwasheryman\nwashhand\nwashhouse\nwashin\nwashiness\nwashing\nWashington\nWashingtonia\nWashingtonian\nWashingtoniana\nWashita\nwashland\nwashmaid\nwashman\nWasho\nWashoan\nwashoff\nwashout\nwashpot\nwashproof\nwashrag\nwashroad\nwashroom\nwashshed\nwashstand\nwashtail\nwashtray\nwashtrough\nwashtub\nwashway\nwashwoman\nwashwork\nwashy\nWasir\nwasnt\nWasoga\nWasp\nwasp\nwaspen\nwasphood\nwaspily\nwaspish\nwaspishly\nwaspishness\nwasplike\nwaspling\nwaspnesting\nwaspy\nwassail\nwassailer\nwassailous\nwassailry\nwassie\nwast\nwastable\nwastage\nwaste\nwastebasket\nwasteboard\nwasted\nwasteful\nwastefully\nwastefulness\nwastel\nwasteland\nwastelbread\nwasteless\nwasteman\nwastement\nwasteness\nwastepaper\nwasteproof\nwaster\nwasterful\nwasterfully\nwasterfulness\nwastethrift\nwasteword\nwasteyard\nwasting\nwastingly\nwastingness\nwastland\nwastrel\nwastrife\nwasty\nWasukuma\nWaswahili\nWat\nwat\nWatala\nwatap\nwatch\nwatchable\nwatchboat\nwatchcase\nwatchcry\nwatchdog\nwatched\nwatcher\nwatchfree\nwatchful\nwatchfully\nwatchfulness\nwatchglassful\nwatchhouse\nwatching\nwatchingly\nwatchkeeper\nwatchless\nwatchlessness\nwatchmaker\nwatchmaking\nwatchman\nwatchmanly\nwatchmanship\nwatchmate\nwatchment\nwatchout\nwatchtower\nwatchwise\nwatchwoman\nwatchword\nwatchwork\nwater\nwaterage\nwaterbailage\nwaterbelly\nWaterberg\nwaterboard\nwaterbok\nwaterbosh\nwaterbrain\nwaterchat\nwatercup\nwaterdoe\nwaterdrop\nwatered\nwaterer\nwaterfall\nwaterfinder\nwaterflood\nwaterfowl\nwaterfront\nwaterhead\nwaterhorse\nwaterie\nwaterily\nwateriness\nwatering\nwateringly\nwateringman\nwaterish\nwaterishly\nwaterishness\nWaterlander\nWaterlandian\nwaterleave\nwaterless\nwaterlessly\nwaterlessness\nwaterlike\nwaterline\nwaterlog\nwaterlogged\nwaterloggedness\nwaterlogger\nwaterlogging\nWaterloo\nwaterman\nwatermanship\nwatermark\nwatermaster\nwatermelon\nwatermonger\nwaterphone\nwaterpot\nwaterproof\nwaterproofer\nwaterproofing\nwaterproofness\nwaterquake\nwaterscape\nwatershed\nwatershoot\nwaterside\nwatersider\nwaterskin\nwatersmeet\nwaterspout\nwaterstead\nwatertight\nwatertightal\nwatertightness\nwaterward\nwaterwards\nwaterway\nwaterweed\nwaterwise\nwaterwoman\nwaterwood\nwaterwork\nwaterworker\nwaterworm\nwaterworn\nwaterwort\nwatery\nwath\nwathstead\nWatsonia\nwatt\nwattage\nwattape\nwattle\nwattlebird\nwattled\nwattless\nwattlework\nwattling\nwattman\nwattmeter\nWatusi\nwauble\nwauch\nwauchle\nwaucht\nwauf\nwaugh\nwaughy\nwauken\nwaukit\nwaukrife\nwaul\nwaumle\nwauner\nwauns\nwaup\nwaur\nWaura\nwauregan\nwauve\nwavable\nwavably\nWave\nwave\nwaved\nwaveless\nwavelessly\nwavelessness\nwavelet\nwavelike\nwavellite\nwavemark\nwavement\nwavemeter\nwaveproof\nwaver\nwaverable\nwaverer\nwavering\nwaveringly\nwaveringness\nwaverous\nwavery\nwaveson\nwaveward\nwavewise\nwavey\nwavicle\nwavily\nwaviness\nwaving\nwavingly\nWavira\nwavy\nwaw\nwawa\nwawah\nwawaskeesh\nwax\nwaxberry\nwaxbill\nwaxbird\nwaxbush\nwaxchandler\nwaxchandlery\nwaxen\nwaxer\nwaxflower\nWaxhaw\nwaxhearted\nwaxily\nwaxiness\nwaxing\nwaxingly\nwaxlike\nwaxmaker\nwaxmaking\nwaxman\nwaxweed\nwaxwing\nwaxwork\nwaxworker\nwaxworking\nwaxy\nway\nwayaka\nwayang\nWayao\nwayback\nwayberry\nwaybill\nwaybird\nwaybook\nwaybread\nwaybung\nwayfare\nwayfarer\nwayfaring\nwayfaringly\nwayfellow\nwaygang\nwaygate\nwaygoing\nwaygone\nwaygoose\nwayhouse\nwaying\nwaylaid\nwaylaidlessness\nwaylay\nwaylayer\nwayleave\nwayless\nwaymaker\nwayman\nwaymark\nwaymate\nWayne\nwaypost\nways\nwayside\nwaysider\nwaysliding\nwaythorn\nwayward\nwaywarden\nwaywardly\nwaywardness\nwaywiser\nwaywode\nwaywodeship\nwayworn\nwaywort\nwayzgoose\nWazir\nwe\nWea\nweak\nweakbrained\nweaken\nweakener\nweakening\nweakfish\nweakhanded\nweakhearted\nweakheartedly\nweakheartedness\nweakish\nweakishly\nweakishness\nweakliness\nweakling\nweakly\nweakmouthed\nweakness\nweaky\nweal\nweald\nWealden\nwealdsman\nwealth\nwealthily\nwealthiness\nwealthless\nwealthmaker\nwealthmaking\nwealthmonger\nWealthy\nwealthy\nweam\nwean\nweanable\nweanedness\nweanel\nweaner\nweanling\nWeanoc\nweanyer\nWeapemeoc\nweapon\nweaponed\nweaponeer\nweaponless\nweaponmaker\nweaponmaking\nweaponproof\nweaponry\nweaponshaw\nweaponshow\nweaponshowing\nweaponsmith\nweaponsmithy\nwear\nwearability\nwearable\nwearer\nweariable\nweariableness\nwearied\nweariedly\nweariedness\nwearier\nweariful\nwearifully\nwearifulness\nweariless\nwearilessly\nwearily\nweariness\nwearing\nwearingly\nwearish\nwearishly\nwearishness\nwearisome\nwearisomely\nwearisomeness\nwearproof\nweary\nwearying\nwearyingly\nweasand\nweasel\nweaselfish\nweasellike\nweaselly\nweaselship\nweaselskin\nweaselsnout\nweaselwise\nweaser\nweason\nweather\nweatherboard\nweatherboarding\nweatherbreak\nweathercock\nweathercockish\nweathercockism\nweathercocky\nweathered\nweatherer\nweatherfish\nweatherglass\nweathergleam\nweatherhead\nweatherheaded\nweathering\nweatherliness\nweatherly\nweathermaker\nweathermaking\nweatherman\nweathermost\nweatherology\nweatherproof\nweatherproofed\nweatherproofing\nweatherproofness\nweatherward\nweatherworn\nweathery\nweavable\nweave\nweaveable\nweaved\nweavement\nweaver\nweaverbird\nweaveress\nweaving\nweazen\nweazened\nweazeny\nweb\nwebbed\nwebber\nwebbing\nwebby\nweber\nWeberian\nwebeye\nwebfoot\nwebfooter\nwebless\nweblike\nwebmaker\nwebmaking\nwebster\nWebsterian\nwebsterite\nwebwork\nwebworm\nwecht\nwed\nwedana\nwedbed\nwedbedrip\nwedded\nweddedly\nweddedness\nwedder\nwedding\nweddinger\nwede\nwedge\nwedgeable\nwedgebill\nwedged\nwedgelike\nwedger\nwedgewise\nWedgie\nwedging\nWedgwood\nwedgy\nwedlock\nWednesday\nwedset\nwee\nweeble\nweed\nweeda\nweedable\nweedage\nweeded\nweeder\nweedery\nweedful\nweedhook\nweediness\nweedingtime\nweedish\nweedless\nweedlike\nweedling\nweedow\nweedproof\nweedy\nweek\nweekday\nweekend\nweekender\nweekly\nweekwam\nweel\nweelfard\nweelfaured\nweemen\nween\nweendigo\nweeness\nweening\nweenong\nweeny\nweep\nweepable\nweeper\nweepered\nweepful\nweeping\nweepingly\nweeps\nweepy\nweesh\nweeshy\nweet\nweetbird\nweetless\nweever\nweevil\nweeviled\nweevillike\nweevilproof\nweevily\nweewow\nweeze\nweft\nweftage\nwefted\nwefty\nWega\nwegenerian\nwegotism\nwehrlite\nWei\nweibyeite\nweichselwood\nWeierstrassian\nWeigela\nweigelite\nweigh\nweighable\nweighage\nweighbar\nweighbauk\nweighbridge\nweighbridgeman\nweighed\nweigher\nweighership\nweighhouse\nweighin\nweighing\nweighman\nweighment\nweighshaft\nweight\nweightchaser\nweighted\nweightedly\nweightedness\nweightily\nweightiness\nweighting\nweightless\nweightlessly\nweightlessness\nweightometer\nweighty\nweinbergerite\nWeinmannia\nweinschenkite\nweir\nweirangle\nweird\nweirdful\nweirdish\nweirdless\nweirdlessness\nweirdlike\nweirdliness\nweirdly\nweirdness\nweirdsome\nweirdward\nweirdwoman\nweiring\nweisbachite\nweiselbergite\nweism\nWeismannian\nWeismannism\nweissite\nWeissnichtwo\nWeitspekan\nwejack\nweka\nwekau\nwekeen\nweki\nwelcome\nwelcomeless\nwelcomely\nwelcomeness\nwelcomer\nwelcoming\nwelcomingly\nweld\nweldability\nweldable\nwelder\nwelding\nweldless\nweldment\nweldor\nWelf\nwelfare\nwelfaring\nWelfic\nwelk\nwelkin\nwelkinlike\nwell\nwellat\nwellaway\nwellborn\nwellcurb\nwellhead\nwellhole\nwelling\nwellington\nWellingtonia\nwellish\nwellmaker\nwellmaking\nwellman\nwellnear\nwellness\nwellring\nWellsian\nwellside\nwellsite\nwellspring\nwellstead\nwellstrand\nwelly\nwellyard\nwels\nWelsh\nwelsh\nwelsher\nWelshery\nWelshism\nWelshland\nWelshlike\nWelshman\nWelshness\nWelshry\nWelshwoman\nWelshy\nwelsium\nwelt\nwelted\nwelter\nwelterweight\nwelting\nWelwitschia\nwem\nwemless\nwen\nwench\nwencher\nwenchless\nwenchlike\nWenchow\nWenchowese\nWend\nwend\nwende\nWendell\nWendi\nWendic\nWendish\nWendy\nwene\nWenlock\nWenlockian\nwennebergite\nwennish\nwenny\nWenonah\nWenrohronon\nwent\nwentletrap\nwenzel\nwept\nwer\nWerchowinci\nwere\nwerebear\nwerecalf\nwerefolk\nwerefox\nwerehyena\nwerejaguar\nwereleopard\nwerent\nweretiger\nwerewolf\nwerewolfish\nwerewolfism\nwerf\nwergil\nweri\nWerner\nWernerian\nWernerism\nwernerite\nwerowance\nwert\nWerther\nWertherian\nWertherism\nwervel\nWes\nwese\nweskit\nWesleyan\nWesleyanism\nWesleyism\nwesselton\nWessexman\nwest\nwestaway\nwestbound\nweste\nwester\nwestering\nwesterliness\nwesterly\nwestermost\nwestern\nwesterner\nwesternism\nwesternization\nwesternize\nwesternly\nwesternmost\nwesterwards\nwestfalite\nwesting\nwestland\nWestlander\nwestlandways\nwestmost\nwestness\nWestphalian\nWestralian\nWestralianism\nwestward\nwestwardly\nwestwardmost\nwestwards\nwesty\nwet\nweta\nwetback\nwetbird\nwetched\nwetchet\nwether\nwetherhog\nwetherteg\nwetly\nwetness\nwettability\nwettable\nwetted\nwetter\nwetting\nwettish\nWetumpka\nweve\nwevet\nWewenoc\nwey\nWezen\nWezn\nwha\nwhabby\nwhack\nwhacker\nwhacking\nwhacky\nwhafabout\nwhale\nwhaleback\nwhalebacker\nwhalebird\nwhaleboat\nwhalebone\nwhaleboned\nwhaledom\nwhalehead\nwhalelike\nwhaleman\nwhaler\nwhaleroad\nwhalery\nwhaleship\nwhaling\nwhalish\nwhally\nwhalm\nwhalp\nwhaly\nwham\nwhamble\nwhame\nwhammle\nwhamp\nwhampee\nwhample\nwhan\nwhand\nwhang\nwhangable\nwhangam\nwhangdoodle\nwhangee\nwhanghee\nwhank\nwhap\nwhappet\nwhapuka\nwhapukee\nwhapuku\nwhar\nwhare\nwhareer\nwharf\nwharfage\nwharfhead\nwharfholder\nwharfing\nwharfinger\nwharfland\nwharfless\nwharfman\nwharfmaster\nwharfrae\nwharfside\nwharl\nwharp\nwharry\nwhart\nwharve\nwhase\nwhasle\nwhat\nwhata\nwhatabouts\nwhatever\nwhatkin\nwhatlike\nwhatna\nwhatness\nwhatnot\nwhatreck\nwhats\nwhatso\nwhatsoeer\nwhatsoever\nwhatsomever\nwhatten\nwhau\nwhauk\nwhaup\nwhaur\nwhauve\nwheal\nwhealworm\nwhealy\nwheam\nwheat\nwheatbird\nwheatear\nwheateared\nwheaten\nwheatgrower\nwheatland\nwheatless\nwheatlike\nwheatstalk\nwheatworm\nwheaty\nwhedder\nwhee\nwheedle\nwheedler\nwheedlesome\nwheedling\nwheedlingly\nwheel\nwheelage\nwheelband\nwheelbarrow\nwheelbarrowful\nwheelbird\nwheelbox\nwheeldom\nwheeled\nwheeler\nwheelery\nwheelhouse\nwheeling\nwheelingly\nwheelless\nwheellike\nwheelmaker\nwheelmaking\nwheelman\nwheelrace\nwheelroad\nwheelsman\nwheelsmith\nwheelspin\nwheelswarf\nwheelway\nwheelwise\nwheelwork\nwheelwright\nwheelwrighting\nwheely\nwheem\nwheen\nwheencat\nwheenge\nwheep\nwheeple\nwheer\nwheerikins\nwheesht\nwheetle\nwheeze\nwheezer\nwheezily\nwheeziness\nwheezingly\nwheezle\nwheezy\nwheft\nwhein\nwhekau\nwheki\nwhelk\nwhelked\nwhelker\nwhelklike\nwhelky\nwhelm\nwhelp\nwhelphood\nwhelpish\nwhelpless\nwhelpling\nwhelve\nwhemmel\nwhen\nwhenabouts\nwhenas\nwhence\nwhenceeer\nwhenceforth\nwhenceforward\nwhencesoeer\nwhencesoever\nwhencever\nwheneer\nwhenever\nwhenness\nwhenso\nwhensoever\nwhensomever\nwhere\nwhereabout\nwhereabouts\nwhereafter\nwhereanent\nwhereas\nwhereat\nwhereaway\nwhereby\nwhereer\nwherefor\nwherefore\nwherefrom\nwherein\nwhereinsoever\nwhereinto\nwhereness\nwhereof\nwhereon\nwhereout\nwhereover\nwhereso\nwheresoeer\nwheresoever\nwheresomever\nwherethrough\nwheretill\nwhereto\nwheretoever\nwheretosoever\nwhereunder\nwhereuntil\nwhereunto\nwhereup\nwhereupon\nwherever\nwherewith\nwherewithal\nwherret\nwherrit\nwherry\nwherryman\nwhet\nwhether\nwhetile\nwhetrock\nwhetstone\nwhetter\nwhew\nwhewellite\nwhewer\nwhewl\nwhewt\nwhey\nwheybeard\nwheyey\nwheyeyness\nwheyface\nwheyfaced\nwheyish\nwheyishness\nwheylike\nwheyness\nwhiba\nwhich\nwhichever\nwhichsoever\nwhichway\nwhichways\nwhick\nwhicken\nwhicker\nwhid\nwhidah\nwhidder\nwhiff\nwhiffenpoof\nwhiffer\nwhiffet\nwhiffle\nwhiffler\nwhifflery\nwhiffletree\nwhiffling\nwhifflingly\nwhiffy\nwhift\nWhig\nwhig\nWhiggamore\nwhiggamore\nWhiggarchy\nWhiggery\nWhiggess\nWhiggification\nWhiggify\nWhiggish\nWhiggishly\nWhiggishness\nWhiggism\nWhiglet\nWhigling\nwhigmaleerie\nwhigship\nwhikerby\nwhile\nwhileen\nwhilere\nwhiles\nwhilie\nwhilk\nWhilkut\nwhill\nwhillaballoo\nwhillaloo\nwhillilew\nwhilly\nwhillywha\nwhilock\nwhilom\nwhils\nwhilst\nwhilter\nwhim\nwhimberry\nwhimble\nwhimbrel\nwhimling\nwhimmy\nwhimper\nwhimperer\nwhimpering\nwhimperingly\nwhimsey\nwhimsic\nwhimsical\nwhimsicality\nwhimsically\nwhimsicalness\nwhimsied\nwhimstone\nwhimwham\nwhin\nwhinberry\nwhinchacker\nwhinchat\nwhincheck\nwhincow\nwhindle\nwhine\nwhiner\nwhinestone\nwhing\nwhinge\nwhinger\nwhininess\nwhiningly\nwhinnel\nwhinner\nwhinnock\nwhinny\nwhinstone\nwhiny\nwhinyard\nwhip\nwhipbelly\nwhipbird\nwhipcat\nwhipcord\nwhipcordy\nwhipcrack\nwhipcracker\nwhipcraft\nwhipgraft\nwhipjack\nwhipking\nwhiplash\nwhiplike\nwhipmaker\nwhipmaking\nwhipman\nwhipmanship\nwhipmaster\nwhippa\nwhippable\nwhipparee\nwhipped\nwhipper\nwhippersnapper\nwhippertail\nwhippet\nwhippeter\nwhippiness\nwhipping\nwhippingly\nwhippletree\nwhippoorwill\nwhippost\nwhippowill\nwhippy\nwhipsaw\nwhipsawyer\nwhipship\nwhipsocket\nwhipstaff\nwhipstalk\nwhipstall\nwhipster\nwhipstick\nwhipstitch\nwhipstock\nwhipt\nwhiptail\nwhiptree\nwhipwise\nwhipworm\nwhir\nwhirken\nwhirl\nwhirlabout\nwhirlblast\nwhirlbone\nwhirlbrain\nwhirled\nwhirler\nwhirley\nwhirlgig\nwhirlicane\nwhirligig\nwhirlimagig\nwhirling\nwhirlingly\nwhirlmagee\nwhirlpool\nwhirlpuff\nwhirlwig\nwhirlwind\nwhirlwindish\nwhirlwindy\nwhirly\nwhirlygigum\nwhirret\nwhirrey\nwhirroo\nwhirry\nwhirtle\nwhish\nwhisk\nwhisker\nwhiskerage\nwhiskerando\nwhiskerandoed\nwhiskered\nwhiskerer\nwhiskerette\nwhiskerless\nwhiskerlike\nwhiskery\nwhiskey\nwhiskful\nwhiskied\nwhiskified\nwhisking\nwhiskingly\nwhisky\nwhiskyfied\nwhiskylike\nwhisp\nwhisper\nwhisperable\nwhisperation\nwhispered\nwhisperer\nwhisperhood\nwhispering\nwhisperingly\nwhisperingness\nwhisperless\nwhisperous\nwhisperously\nwhisperproof\nwhispery\nwhissle\nWhisson\nwhist\nwhister\nwhisterpoop\nwhistle\nwhistlebelly\nwhistlefish\nwhistlelike\nwhistler\nWhistlerian\nwhistlerism\nwhistlewing\nwhistlewood\nwhistlike\nwhistling\nwhistlingly\nwhistly\nwhistness\nWhistonian\nWhit\nwhit\nwhite\nwhiteback\nwhitebait\nwhitebark\nwhitebeard\nwhitebelly\nwhitebill\nwhitebird\nwhiteblaze\nwhiteblow\nwhitebottle\nWhiteboy\nWhiteboyism\nwhitecap\nwhitecapper\nWhitechapel\nwhitecoat\nwhitecomb\nwhitecorn\nwhitecup\nwhited\nwhiteface\nWhitefieldian\nWhitefieldism\nWhitefieldite\nwhitefish\nwhitefisher\nwhitefishery\nWhitefoot\nwhitefoot\nwhitefootism\nwhitehanded\nwhitehass\nwhitehawse\nwhitehead\nwhiteheart\nwhitehearted\nwhitelike\nwhitely\nwhiten\nwhitener\nwhiteness\nwhitening\nwhitenose\nwhitepot\nwhiteroot\nwhiterump\nwhites\nwhitesark\nwhiteseam\nwhiteshank\nwhiteside\nwhitesmith\nwhitestone\nwhitetail\nwhitethorn\nwhitethroat\nwhitetip\nwhitetop\nwhitevein\nwhitewall\nwhitewards\nwhiteware\nwhitewash\nwhitewasher\nwhiteweed\nwhitewing\nwhitewood\nwhiteworm\nwhitewort\nwhitfinch\nwhither\nwhitherso\nwhithersoever\nwhitherto\nwhitherward\nwhiting\nwhitish\nwhitishness\nwhitleather\nWhitleyism\nwhitling\nwhitlow\nwhitlowwort\nWhitmanese\nWhitmanesque\nWhitmanism\nWhitmanize\nWhitmonday\nwhitneyite\nwhitrack\nwhits\nwhitster\nWhitsun\nWhitsunday\nWhitsuntide\nwhittaw\nwhitten\nwhittener\nwhitter\nwhitterick\nwhittle\nwhittler\nwhittling\nwhittret\nwhittrick\nwhity\nwhiz\nwhizgig\nwhizzer\nwhizzerman\nwhizziness\nwhizzing\nwhizzingly\nwhizzle\nwho\nwhoa\nwhodunit\nwhoever\nwhole\nwholehearted\nwholeheartedly\nwholeheartedness\nwholeness\nwholesale\nwholesalely\nwholesaleness\nwholesaler\nwholesome\nwholesomely\nwholesomeness\nwholewise\nwholly\nwhom\nwhomble\nwhomever\nwhomso\nwhomsoever\nwhone\nwhoo\nwhoof\nwhoop\nwhoopee\nwhooper\nwhooping\nwhoopingly\nwhooplike\nwhoops\nwhoosh\nwhop\nwhopper\nwhopping\nwhorage\nwhore\nwhoredom\nwhorelike\nwhoremaster\nwhoremasterly\nwhoremastery\nwhoremonger\nwhoremonging\nwhoreship\nwhoreson\nwhorish\nwhorishly\nwhorishness\nwhorl\nwhorled\nwhorlflower\nwhorly\nwhorlywort\nwhort\nwhortle\nwhortleberry\nwhose\nwhosen\nwhosesoever\nwhosever\nwhosomever\nwhosumdever\nwhud\nwhuff\nwhuffle\nwhulk\nwhulter\nwhummle\nwhun\nwhunstane\nwhup\nwhush\nwhuskie\nwhussle\nwhute\nwhuther\nwhutter\nwhuttering\nwhuz\nwhy\nwhyever\nwhyfor\nwhyness\nwhyo\nwi\nwice\nWichita\nwicht\nwichtisite\nwichtje\nwick\nwickawee\nwicked\nwickedish\nwickedlike\nwickedly\nwickedness\nwicken\nwicker\nwickerby\nwickerware\nwickerwork\nwickerworked\nwickerworker\nwicket\nwicketkeep\nwicketkeeper\nwicketkeeping\nwicketwork\nwicking\nwickiup\nwickless\nwickup\nwicky\nwicopy\nwid\nwidbin\nwiddendream\nwidder\nwiddershins\nwiddifow\nwiddle\nwiddy\nwide\nwidegab\nwidehearted\nwidely\nwidemouthed\nwiden\nwidener\nwideness\nwidespread\nwidespreadedly\nwidespreadly\nwidespreadness\nwidewhere\nwidework\nwidgeon\nwidish\nwidow\nwidowed\nwidower\nwidowered\nwidowerhood\nwidowership\nwidowery\nwidowhood\nwidowish\nwidowlike\nwidowly\nwidowman\nwidowy\nwidth\nwidthless\nwidthway\nwidthways\nwidthwise\nwidu\nwield\nwieldable\nwielder\nwieldiness\nwieldy\nwiener\nwienerwurst\nwienie\nwierangle\nwiesenboden\nwife\nwifecarl\nwifedom\nwifehood\nwifeism\nwifekin\nwifeless\nwifelessness\nwifelet\nwifelike\nwifeling\nwifelkin\nwifely\nwifeship\nwifeward\nwifie\nwifiekie\nwifish\nwifock\nwig\nwigan\nwigdom\nwigful\nwigged\nwiggen\nwigger\nwiggery\nwigging\nwiggish\nwiggishness\nwiggism\nwiggle\nwiggler\nwiggly\nwiggy\nwight\nwightly\nwightness\nwigless\nwiglet\nwiglike\nwigmaker\nwigmaking\nwigtail\nwigwag\nwigwagger\nwigwam\nwiikite\nWikeno\nWikstroemia\nWilbur\nWilburite\nwild\nwildbore\nwildcat\nwildcatter\nwildcatting\nwildebeest\nwilded\nwilder\nwilderedly\nwildering\nwilderment\nwilderness\nwildfire\nwildfowl\nwildgrave\nwilding\nwildish\nwildishly\nwildishness\nwildlife\nwildlike\nwildling\nwildly\nwildness\nwildsome\nwildwind\nwile\nwileful\nwileless\nwileproof\nWilfred\nwilga\nwilgers\nWilhelm\nWilhelmina\nWilhelmine\nwilily\nwiliness\nwilk\nwilkeite\nwilkin\nWilkinson\nWill\nwill\nwillable\nwillawa\nwilled\nwilledness\nwillemite\nwiller\nwillet\nwilley\nwilleyer\nwillful\nwillfully\nwillfulness\nWilliam\nwilliamsite\nWilliamsonia\nWilliamsoniaceae\nWillie\nwillie\nwillier\nwillies\nwilling\nwillinghearted\nwillinghood\nwillingly\nwillingness\nwilliwaw\nwillmaker\nwillmaking\nwillness\nwillock\nwillow\nwillowbiter\nwillowed\nwillower\nwillowish\nwillowlike\nwillowware\nwillowweed\nwillowworm\nwillowwort\nwillowy\nWillugbaeya\nWilly\nwilly\nwillyard\nwillyart\nwillyer\nWilmer\nwilsome\nwilsomely\nwilsomeness\nWilson\nWilsonian\nwilt\nwilter\nWilton\nwiltproof\nWiltshire\nwily\nwim\nwimberry\nwimble\nwimblelike\nwimbrel\nwime\nwimick\nwimple\nwimpleless\nwimplelike\nWin\nwin\nwinberry\nwince\nwincer\nwincey\nwinch\nwincher\nWinchester\nwinchman\nwincing\nwincingly\nWind\nwind\nwindable\nwindage\nwindbag\nwindbagged\nwindbaggery\nwindball\nwindberry\nwindbibber\nwindbore\nwindbracing\nwindbreak\nWindbreaker\nwindbreaker\nwindbroach\nwindclothes\nwindcuffer\nwinddog\nwinded\nwindedly\nwindedness\nwinder\nwindermost\nWindesheimer\nwindfall\nwindfallen\nwindfanner\nwindfirm\nwindfish\nwindflaw\nwindflower\nwindgall\nwindgalled\nwindhole\nwindhover\nwindigo\nwindily\nwindiness\nwinding\nwindingly\nwindingness\nwindjammer\nwindjamming\nwindlass\nwindlasser\nwindle\nwindles\nwindless\nwindlessly\nwindlessness\nwindlestrae\nwindlestraw\nwindlike\nwindlin\nwindling\nwindmill\nwindmilly\nwindock\nwindore\nwindow\nwindowful\nwindowless\nwindowlessness\nwindowlet\nwindowlight\nwindowlike\nwindowmaker\nwindowmaking\nwindowman\nwindowpane\nwindowpeeper\nwindowshut\nwindowward\nwindowwards\nwindowwise\nwindowy\nwindpipe\nwindplayer\nwindproof\nwindring\nwindroad\nwindroot\nwindrow\nwindrower\nwindscreen\nwindshield\nwindshock\nWindsor\nwindsorite\nwindstorm\nwindsucker\nwindtight\nwindup\nwindward\nwindwardly\nwindwardmost\nwindwardness\nwindwards\nwindway\nwindwayward\nwindwaywardly\nwindy\nwine\nwineball\nwineberry\nwinebibber\nwinebibbery\nwinebibbing\nWinebrennerian\nwineconner\nwined\nwineglass\nwineglassful\nwinegrower\nwinegrowing\nwinehouse\nwineless\nwinelike\nwinemay\nwinepot\nwiner\nwinery\nWinesap\nwineshop\nwineskin\nwinesop\nwinetaster\nwinetree\nwinevat\nWinfred\nwinful\nwing\nwingable\nwingbeat\nwingcut\nwinged\nwingedly\nwingedness\nwinger\nwingfish\nwinghanded\nwingle\nwingless\nwinglessness\nwinglet\nwinglike\nwingman\nwingmanship\nwingpiece\nwingpost\nwingseed\nwingspread\nwingstem\nwingy\nWinifred\nwinish\nwink\nwinkel\nwinkelman\nwinker\nwinkered\nwinking\nwinkingly\nwinkle\nwinklehawk\nwinklehole\nwinklet\nwinly\nwinna\nwinnable\nwinnard\nWinnebago\nWinnecowet\nwinnel\nwinnelstrae\nwinner\nWinnie\nwinning\nwinningly\nwinningness\nwinnings\nwinninish\nWinnipesaukee\nwinnle\nwinnonish\nwinnow\nwinnower\nwinnowing\nwinnowingly\nWinona\nwinrace\nwinrow\nwinsome\nwinsomely\nwinsomeness\nWinston\nwint\nwinter\nWinteraceae\nwinterage\nWinteranaceae\nwinterberry\nwinterbloom\nwinterbourne\nwinterdykes\nwintered\nwinterer\nwinterfeed\nwintergreen\nwinterhain\nwintering\nwinterish\nwinterishly\nwinterishness\nwinterization\nwinterize\nwinterkill\nwinterkilling\nwinterless\nwinterlike\nwinterliness\nwinterling\nwinterly\nwinterproof\nwintersome\nwintertide\nwintertime\nwinterward\nwinterwards\nwinterweed\nwintle\nwintrify\nwintrily\nwintriness\nwintrish\nwintrous\nwintry\nWintun\nwiny\nwinze\nwinzeman\nwipe\nwiper\nwippen\nwips\nwir\nwirable\nwirble\nwird\nwire\nwirebar\nwirebird\nwired\nwiredancer\nwiredancing\nwiredraw\nwiredrawer\nwiredrawn\nwirehair\nwireless\nwirelessly\nwirelessness\nwirelike\nwiremaker\nwiremaking\nwireman\nwiremonger\nWirephoto\nwirepull\nwirepuller\nwirepulling\nwirer\nwiresmith\nwirespun\nwiretail\nwireway\nwireweed\nwirework\nwireworker\nwireworking\nwireworks\nwireworm\nwirily\nwiriness\nwiring\nwirl\nwirling\nWiros\nwirr\nwirra\nwirrah\nwirrasthru\nwiry\nwis\nWisconsinite\nwisdom\nwisdomful\nwisdomless\nwisdomproof\nwisdomship\nwise\nwiseacre\nwiseacred\nwiseacredness\nwiseacredom\nwiseacreish\nwiseacreishness\nwiseacreism\nwisecrack\nwisecracker\nwisecrackery\nwisehead\nwisehearted\nwiseheartedly\nwiseheimer\nwiselike\nwiseling\nwisely\nwiseman\nwisen\nwiseness\nwisenheimer\nwisent\nwiser\nwiseweed\nwisewoman\nwish\nwisha\nwishable\nwishbone\nwished\nwishedly\nwisher\nwishful\nwishfully\nwishfulness\nwishing\nwishingly\nwishless\nwishly\nwishmay\nwishness\nWishoskan\nWishram\nwisht\nwishtonwish\nWisigothic\nwisket\nwiskinky\nwisp\nwispish\nwisplike\nwispy\nwiss\nwisse\nwissel\nwist\nWistaria\nwistaria\nwiste\nwistened\nWisteria\nwisteria\nwistful\nwistfully\nwistfulness\nwistit\nwistiti\nwistless\nwistlessness\nwistonwish\nwit\nwitan\nWitbooi\nwitch\nwitchbells\nwitchcraft\nwitched\nwitchedly\nwitchen\nwitchering\nwitchery\nwitchet\nwitchetty\nwitchhood\nwitching\nwitchingly\nwitchleaf\nwitchlike\nwitchman\nwitchmonger\nwitchuck\nwitchweed\nwitchwife\nwitchwoman\nwitchwood\nwitchwork\nwitchy\nwitcraft\nwite\nwiteless\nwitenagemot\nwitepenny\nwitess\nwitful\nwith\nwithal\nwithamite\nWithania\nwithdraught\nwithdraw\nwithdrawable\nwithdrawal\nwithdrawer\nwithdrawing\nwithdrawingness\nwithdrawment\nwithdrawn\nwithdrawnness\nwithe\nwithen\nwither\nwitherband\nwithered\nwitheredly\nwitheredness\nwitherer\nwithergloom\nwithering\nwitheringly\nwitherite\nwitherly\nwithernam\nwithers\nwithershins\nwithertip\nwitherwards\nwitherweight\nwithery\nwithewood\nwithheld\nwithhold\nwithholdable\nwithholdal\nwithholder\nwithholdment\nwithin\nwithindoors\nwithinside\nwithinsides\nwithinward\nwithinwards\nwithness\nwitholden\nwithout\nwithoutdoors\nwithouten\nwithoutforth\nwithoutside\nwithoutwards\nwithsave\nwithstand\nwithstander\nwithstandingness\nwithstay\nwithstood\nwithstrain\nwithvine\nwithwind\nwithy\nwithypot\nwithywind\nwitjar\nwitless\nwitlessly\nwitlessness\nwitlet\nwitling\nwitloof\nwitmonger\nwitness\nwitnessable\nwitnessdom\nwitnesser\nwitney\nwitneyer\nWitoto\nwitship\nwittal\nwittawer\nwitteboom\nwitted\nwitter\nwittering\nwitticaster\nwittichenite\nwitticism\nwitticize\nwittified\nwittily\nwittiness\nwitting\nwittingly\nwittol\nwittolly\nwitty\nWitumki\nwitwall\nwitzchoura\nwive\nwiver\nwivern\nWiyat\nWiyot\nwiz\nwizard\nwizardess\nwizardism\nwizardlike\nwizardly\nwizardry\nwizardship\nwizen\nwizened\nwizenedness\nwizier\nwizzen\nwloka\nwo\nwoad\nwoader\nwoadman\nwoadwaxen\nwoady\nwoak\nwoald\nwoan\nwob\nwobbegong\nwobble\nwobbler\nwobbliness\nwobbling\nwobblingly\nwobbly\nwobster\nwocheinite\nWochua\nwod\nwoddie\nwode\nWodenism\nwodge\nwodgy\nwoe\nwoebegone\nwoebegoneness\nwoebegonish\nwoeful\nwoefully\nwoefulness\nwoehlerite\nwoesome\nwoevine\nwoeworn\nwoffler\nwoft\nwog\nwogiet\nWogulian\nwoibe\nwokas\nwoke\nwokowi\nwold\nwoldlike\nwoldsman\nwoldy\nWolf\nwolf\nwolfachite\nwolfberry\nwolfdom\nwolfen\nwolfer\nWolffia\nWolffian\nWolffianism\nWolfgang\nwolfhood\nwolfhound\nWolfian\nwolfish\nwolfishly\nwolfishness\nwolfkin\nwolfless\nwolflike\nwolfling\nwolfram\nwolframate\nwolframic\nwolframine\nwolframinium\nwolframite\nwolfsbane\nwolfsbergite\nwolfskin\nwolfward\nwolfwards\nwollastonite\nwollomai\nwollop\nWolof\nwolter\nwolve\nwolveboon\nwolver\nwolverine\nwoman\nwomanbody\nwomandom\nwomanfolk\nwomanfully\nwomanhead\nwomanhearted\nwomanhood\nwomanhouse\nwomanish\nwomanishly\nwomanishness\nwomanism\nwomanist\nwomanity\nwomanization\nwomanize\nwomanizer\nwomankind\nwomanless\nwomanlike\nwomanliness\nwomanly\nwomanmuckle\nwomanness\nwomanpost\nwomanproof\nwomanship\nwomanways\nwomanwise\nwomb\nwombat\nwombed\nwomble\nwombstone\nwomby\nwomenfolk\nwomenfolks\nwomenkind\nwomera\nwommerala\nwon\nwonder\nwonderberry\nwonderbright\nwondercraft\nwonderer\nwonderful\nwonderfully\nwonderfulness\nwondering\nwonderingly\nwonderland\nwonderlandish\nwonderless\nwonderment\nwondermonger\nwondermongering\nwondersmith\nwondersome\nwonderstrong\nwonderwell\nwonderwork\nwonderworthy\nwondrous\nwondrously\nwondrousness\nwone\nwonegan\nwong\nwonga\nWongara\nwongen\nwongshy\nwongsky\nwoning\nwonky\nwonna\nwonned\nwonner\nwonning\nwonnot\nwont\nwonted\nwontedly\nwontedness\nwonting\nwoo\nwooable\nwood\nwoodagate\nwoodbark\nwoodbin\nwoodbind\nwoodbine\nwoodbined\nwoodbound\nwoodburytype\nwoodbush\nwoodchat\nwoodchuck\nwoodcock\nwoodcockize\nwoodcracker\nwoodcraft\nwoodcrafter\nwoodcraftiness\nwoodcraftsman\nwoodcrafty\nwoodcut\nwoodcutter\nwoodcutting\nwooded\nwooden\nwoodendite\nwoodenhead\nwoodenheaded\nwoodenheadedness\nwoodenly\nwoodenness\nwoodenware\nwoodenweary\nwoodeny\nwoodfish\nwoodgeld\nwoodgrub\nwoodhack\nwoodhacker\nwoodhole\nwoodhorse\nwoodhouse\nwoodhung\nwoodine\nwoodiness\nwooding\nwoodish\nwoodjobber\nwoodkern\nwoodknacker\nwoodland\nwoodlander\nwoodless\nwoodlessness\nwoodlet\nwoodlike\nwoodlocked\nwoodly\nwoodman\nwoodmancraft\nwoodmanship\nwoodmonger\nwoodmote\nwoodness\nwoodpeck\nwoodpecker\nwoodpenny\nwoodpile\nwoodprint\nwoodranger\nwoodreeve\nwoodrick\nwoodrock\nwoodroof\nwoodrow\nwoodrowel\nWoodruff\nwoodruff\nwoodsere\nwoodshed\nwoodshop\nWoodsia\nwoodside\nwoodsilver\nwoodskin\nwoodsman\nwoodspite\nwoodstone\nwoodsy\nwoodwall\nwoodward\nWoodwardia\nwoodwardship\nwoodware\nwoodwax\nwoodwaxen\nwoodwise\nwoodwork\nwoodworker\nwoodworking\nwoodworm\nwoodwose\nwoodwright\nWoody\nwoody\nwoodyard\nwooer\nwoof\nwoofed\nwoofell\nwoofer\nwoofy\nwoohoo\nwooing\nwooingly\nwool\nwoold\nwoolder\nwoolding\nwooled\nwoolen\nwoolenet\nwoolenization\nwoolenize\nwooler\nwoolert\nwoolfell\nwoolgatherer\nwoolgathering\nwoolgrower\nwoolgrowing\nwoolhead\nwooliness\nwoollike\nwoolly\nwoollyhead\nwoollyish\nwoolman\nwoolpack\nwoolpress\nwoolsack\nwoolsey\nwoolshearer\nwoolshearing\nwoolshears\nwoolshed\nwoolskin\nwoolsorter\nwoolsorting\nwoolsower\nwoolstock\nwoolulose\nWoolwa\nwoolwasher\nwoolweed\nwoolwheel\nwoolwinder\nwoolwork\nwoolworker\nwoolworking\nwoom\nwoomer\nwoomerang\nwoon\nwoons\nwoorali\nwoorari\nwoosh\nwootz\nwoozle\nwoozy\nwop\nwoppish\nwops\nworble\nworcester\nword\nwordable\nwordably\nwordage\nwordbook\nwordbuilding\nwordcraft\nwordcraftsman\nworded\nWorden\nworder\nwordily\nwordiness\nwording\nwordish\nwordishly\nwordishness\nwordle\nwordless\nwordlessly\nwordlessness\nwordlike\nwordlorist\nwordmaker\nwordmaking\nwordman\nwordmanship\nwordmonger\nwordmongering\nwordmongery\nwordplay\nwordsman\nwordsmanship\nwordsmith\nwordspite\nwordster\nWordsworthian\nWordsworthianism\nwordy\nwore\nwork\nworkability\nworkable\nworkableness\nworkaday\nworkaway\nworkbag\nworkbasket\nworkbench\nworkbook\nworkbox\nworkbrittle\nworkday\nworked\nworker\nworkfellow\nworkfolk\nworkfolks\nworkgirl\nworkhand\nworkhouse\nworkhoused\nworking\nworkingly\nworkingman\nworkingwoman\nworkless\nworklessness\nworkloom\nworkman\nworkmanlike\nworkmanlikeness\nworkmanliness\nworkmanly\nworkmanship\nworkmaster\nworkmistress\nworkout\nworkpan\nworkpeople\nworkpiece\nworkplace\nworkroom\nworks\nworkship\nworkshop\nworksome\nworkstand\nworktable\nworktime\nworkways\nworkwise\nworkwoman\nworkwomanlike\nworkwomanly\nworky\nworkyard\nworld\nworlded\nworldful\nworldish\nworldless\nworldlet\nworldlike\nworldlily\nworldliness\nworldling\nworldly\nworldmaker\nworldmaking\nworldproof\nworldquake\nworldward\nworldwards\nworldway\nworldy\nworm\nwormed\nwormer\nwormhole\nwormholed\nwormhood\nWormian\nwormil\nworming\nwormless\nwormlike\nwormling\nwormproof\nwormroot\nwormseed\nwormship\nwormweed\nwormwood\nwormy\nworn\nwornil\nwornness\nworral\nworriable\nworricow\nworried\nworriedly\nworriedness\nworrier\nworriless\nworriment\nworrisome\nworrisomely\nworrisomeness\nworrit\nworriter\nworry\nworrying\nworryingly\nworryproof\nworrywart\nworse\nworsement\nworsen\nworseness\nworsening\nworser\nworserment\nworset\nworship\nworshipability\nworshipable\nworshiper\nworshipful\nworshipfully\nworshipfulness\nworshipingly\nworshipless\nworshipworth\nworshipworthy\nworst\nworsted\nwort\nworth\nworthful\nworthfulness\nworthiest\nworthily\nworthiness\nworthless\nworthlessly\nworthlessness\nworthship\nworthward\nworthy\nwosbird\nwot\nwote\nwots\nwottest\nwotteth\nwoubit\nwouch\nwouf\nwough\nwould\nwouldest\nwouldnt\nwouldst\nwound\nwoundability\nwoundable\nwoundableness\nwounded\nwoundedly\nwounder\nwoundily\nwounding\nwoundingly\nwoundless\nwounds\nwoundwort\nwoundworth\nwoundy\nwourali\nwourari\nwournil\nwove\nwoven\nWovoka\nwow\nwowser\nwowserdom\nwowserian\nwowserish\nwowserism\nwowsery\nwowt\nwoy\nWoyaway\nwrack\nwracker\nwrackful\nWraf\nwraggle\nwrainbolt\nwrainstaff\nwrainstave\nwraith\nwraithe\nwraithlike\nwraithy\nwraitly\nwramp\nwran\nwrang\nwrangle\nwrangler\nwranglership\nwranglesome\nwranglingly\nwrannock\nwranny\nwrap\nwrappage\nwrapped\nwrapper\nwrapperer\nwrappering\nwrapping\nwraprascal\nwrasse\nwrastle\nwrastler\nwrath\nwrathful\nwrathfully\nwrathfulness\nwrathily\nwrathiness\nwrathlike\nwrathy\nwraw\nwrawl\nwrawler\nwraxle\nwreak\nwreakful\nwreakless\nwreat\nwreath\nwreathage\nwreathe\nwreathed\nwreathen\nwreather\nwreathingly\nwreathless\nwreathlet\nwreathlike\nwreathmaker\nwreathmaking\nwreathwise\nwreathwork\nwreathwort\nwreathy\nwreck\nwreckage\nwrecker\nwreckfish\nwreckful\nwrecking\nwrecky\nWren\nwren\nwrench\nwrenched\nwrencher\nwrenchingly\nwrenlet\nwrenlike\nwrentail\nwrest\nwrestable\nwrester\nwresting\nwrestingly\nwrestle\nwrestler\nwrestlerlike\nwrestling\nwretch\nwretched\nwretchedly\nwretchedness\nwretchless\nwretchlessly\nwretchlessness\nwretchock\nwricht\nwrick\nwride\nwried\nwrier\nwriest\nwrig\nwriggle\nwriggler\nwrigglesome\nwrigglingly\nwriggly\nwright\nwrightine\nwring\nwringbolt\nwringer\nwringman\nwringstaff\nwrinkle\nwrinkleable\nwrinkled\nwrinkledness\nwrinkledy\nwrinkleful\nwrinkleless\nwrinkleproof\nwrinklet\nwrinkly\nwrist\nwristband\nwristbone\nwristed\nwrister\nwristfall\nwristikin\nwristlet\nwristlock\nwristwork\nwrit\nwritability\nwritable\nwritation\nwritative\nwrite\nwriteable\nwritee\nwriter\nwriteress\nwriterling\nwritership\nwrith\nwrithe\nwrithed\nwrithedly\nwrithedness\nwrithen\nwritheneck\nwrither\nwrithing\nwrithingly\nwrithy\nwriting\nwritinger\nwritmaker\nwritmaking\nwritproof\nwritten\nwritter\nwrive\nwrizzled\nwro\nwrocht\nwroke\nwroken\nwrong\nwrongdoer\nwrongdoing\nwronged\nwronger\nwrongful\nwrongfully\nwrongfulness\nwronghead\nwrongheaded\nwrongheadedly\nwrongheadedness\nwronghearted\nwrongheartedly\nwrongheartedness\nwrongish\nwrongless\nwronglessly\nwrongly\nwrongness\nwrongous\nwrongously\nwrongousness\nwrongwise\nWronskian\nwrossle\nwrote\nwroth\nwrothful\nwrothfully\nwrothily\nwrothiness\nwrothly\nwrothsome\nwrothy\nwrought\nwrox\nwrung\nwrungness\nwry\nwrybill\nwryly\nwrymouth\nwryneck\nwryness\nwrytail\nWu\nWuchereria\nwud\nwuddie\nwudge\nwudu\nwugg\nwulfenite\nwulk\nwull\nwullawins\nwullcat\nWullie\nwulliwa\nwumble\nwumman\nwummel\nwun\nWundtian\nwungee\nwunna\nwunner\nwunsome\nwup\nwur\nwurley\nwurmal\nWurmian\nwurrus\nwurset\nwurtzilite\nwurtzite\nWurzburger\nwurzel\nwush\nwusp\nwuss\nwusser\nwust\nwut\nwuther\nwuzu\nwuzzer\nwuzzle\nwuzzy\nwy\nWyandot\nWyandotte\nWycliffian\nWycliffism\nWycliffist\nWycliffite\nwyde\nwye\nWyethia\nwyke\nWykehamical\nWykehamist\nwyle\nwyliecoat\nwymote\nwyn\nwynd\nwyne\nwynkernel\nwynn\nWyomingite\nwyomingite\nwype\nwyson\nwyss\nwyve\nwyver\nX\nx\nxanthaline\nxanthamic\nxanthamide\nxanthane\nxanthate\nxanthation\nxanthein\nxanthelasma\nxanthelasmic\nxanthelasmoidea\nxanthene\nXanthian\nxanthic\nxanthide\nXanthidium\nxanthin\nxanthine\nxanthinuria\nxanthione\nXanthisma\nxanthite\nXanthium\nxanthiuria\nxanthocarpous\nXanthocephalus\nXanthoceras\nXanthochroi\nxanthochroia\nXanthochroic\nxanthochroid\nxanthochroism\nxanthochromia\nxanthochromic\nxanthochroous\nxanthocobaltic\nxanthocone\nxanthoconite\nxanthocreatinine\nxanthocyanopsia\nxanthocyanopsy\nxanthocyanopy\nxanthoderm\nxanthoderma\nxanthodont\nxanthodontous\nxanthogen\nxanthogenamic\nxanthogenamide\nxanthogenate\nxanthogenic\nxantholeucophore\nxanthoma\nxanthomata\nxanthomatosis\nxanthomatous\nXanthomelanoi\nxanthomelanous\nxanthometer\nXanthomonas\nxanthomyeloma\nxanthone\nxanthophane\nxanthophore\nxanthophose\nXanthophyceae\nxanthophyll\nxanthophyllite\nxanthophyllous\nXanthopia\nxanthopia\nxanthopicrin\nxanthopicrite\nxanthoproteic\nxanthoprotein\nxanthoproteinic\nxanthopsia\nxanthopsin\nxanthopsydracia\nxanthopterin\nxanthopurpurin\nxanthorhamnin\nXanthorrhiza\nXanthorrhoea\nxanthorrhoea\nxanthosiderite\nxanthosis\nXanthosoma\nxanthospermous\nxanthotic\nXanthoura\nxanthous\nXanthoxalis\nxanthoxenite\nxanthoxylin\nxanthuria\nxanthydrol\nxanthyl\nxarque\nXaverian\nxebec\nXema\nxenacanthine\nXenacanthini\nxenagogue\nxenagogy\nXenarchi\nXenarthra\nxenarthral\nxenarthrous\nxenelasia\nxenelasy\nxenia\nxenial\nxenian\nXenicidae\nXenicus\nxenium\nxenobiosis\nxenoblast\nXenocratean\nXenocratic\nxenocryst\nxenodochium\nxenogamous\nxenogamy\nxenogenesis\nxenogenetic\nxenogenic\nxenogenous\nxenogeny\nxenolite\nxenolith\nxenolithic\nxenomania\nxenomaniac\nXenomi\nXenomorpha\nxenomorphic\nxenomorphosis\nxenon\nxenoparasite\nxenoparasitism\nxenopeltid\nXenopeltidae\nXenophanean\nxenophile\nxenophilism\nxenophobe\nxenophobia\nxenophobian\nxenophobism\nxenophoby\nXenophonic\nXenophontean\nXenophontian\nXenophontic\nXenophontine\nXenophora\nxenophoran\nXenophoridae\nxenophthalmia\nxenophya\nxenopodid\nXenopodidae\nxenopodoid\nXenopsylla\nxenopteran\nXenopteri\nxenopterygian\nXenopterygii\nXenopus\nXenorhynchus\nXenos\nxenosaurid\nXenosauridae\nxenosauroid\nXenosaurus\nxenotime\nXenurus\nxenyl\nxenylamine\nxerafin\nxeransis\nXeranthemum\nxeranthemum\nxerantic\nxerarch\nxerasia\nXeres\nxeric\nxerically\nxeriff\nxerocline\nxeroderma\nxerodermatic\nxerodermatous\nxerodermia\nxerodermic\nxerogel\nxerography\nxeroma\nxeromata\nxeromenia\nxeromorph\nxeromorphic\nxeromorphous\nxeromorphy\nxeromyron\nxeromyrum\nxeronate\nxeronic\nxerophagia\nxerophagy\nxerophil\nxerophile\nxerophilous\nxerophily\nxerophobous\nxerophthalmia\nxerophthalmos\nxerophthalmy\nXerophyllum\nxerophyte\nxerophytic\nxerophytically\nxerophytism\nxeroprinting\nxerosis\nxerostoma\nxerostomia\nxerotes\nxerotherm\nxerotic\nxerotocia\nxerotripsis\nXerus\nxi\nXicak\nXicaque\nXimenia\nXina\nXinca\nXipe\nXiphias\nxiphias\nxiphihumeralis\nxiphiid\nXiphiidae\nxiphiiform\nxiphioid\nxiphiplastra\nxiphiplastral\nxiphiplastron\nxiphisterna\nxiphisternal\nxiphisternum\nXiphisura\nxiphisuran\nXiphiura\nXiphius\nxiphocostal\nXiphodon\nXiphodontidae\nxiphodynia\nxiphoid\nxiphoidal\nxiphoidian\nxiphopagic\nxiphopagous\nxiphopagus\nxiphophyllous\nxiphosterna\nxiphosternum\nXiphosura\nxiphosuran\nxiphosure\nXiphosuridae\nxiphosurous\nXiphosurus\nxiphuous\nXiphura\nXiphydria\nxiphydriid\nXiphydriidae\nXiraxara\nXmas\nxoana\nxoanon\nXosa\nxurel\nxyla\nxylan\nXylaria\nXylariaceae\nxylate\nXyleborus\nxylem\nxylene\nxylenol\nxylenyl\nxyletic\nXylia\nxylic\nxylidic\nxylidine\nXylina\nxylindein\nxylinid\nxylite\nxylitol\nxylitone\nxylobalsamum\nxylocarp\nxylocarpous\nXylocopa\nxylocopid\nXylocopidae\nxylogen\nxyloglyphy\nxylograph\nxylographer\nxylographic\nxylographical\nxylographically\nxylography\nxyloid\nxyloidin\nxylol\nxylology\nxyloma\nxylomancy\nxylometer\nxylon\nxylonic\nXylonite\nxylonitrile\nXylophaga\nxylophagan\nxylophage\nxylophagid\nXylophagidae\nxylophagous\nXylophagus\nxylophilous\nxylophone\nxylophonic\nxylophonist\nXylopia\nxyloplastic\nxylopyrography\nxyloquinone\nxylorcin\nxylorcinol\nxylose\nxyloside\nXylosma\nxylostroma\nxylostromata\nxylostromatoid\nxylotile\nxylotomist\nxylotomous\nxylotomy\nXylotrya\nxylotypographic\nxylotypography\nxyloyl\nxylyl\nxylylene\nxylylic\nxyphoid\nXyrichthys\nxyrid\nXyridaceae\nxyridaceous\nXyridales\nXyris\nxyst\nxyster\nxysti\nxystos\nxystum\nxystus\nY\ny\nya\nyaba\nyabber\nyabbi\nyabble\nyabby\nyabu\nyacal\nyacca\nyachan\nyacht\nyachtdom\nyachter\nyachting\nyachtist\nyachtman\nyachtmanship\nyachtsman\nyachtsmanlike\nyachtsmanship\nyachtswoman\nyachty\nyad\nYadava\nyade\nyaff\nyaffingale\nyaffle\nyagger\nyaghourt\nyagi\nYagnob\nyagourundi\nYagua\nyagua\nyaguarundi\nyaguaza\nyah\nyahan\nYahgan\nYahganan\nYahoo\nyahoo\nYahoodom\nYahooish\nYahooism\nYahuna\nYahuskin\nYahweh\nYahwism\nYahwist\nYahwistic\nyair\nyaird\nyaje\nyajeine\nyajenine\nYajna\nYajnavalkya\nyajnopavita\nyak\nYaka\nYakala\nyakalo\nyakamik\nYakan\nyakattalo\nYakima\nyakin\nyakka\nyakman\nYakona\nYakonan\nYakut\nYakutat\nyalb\nYale\nyale\nYalensian\nyali\nyalla\nyallaer\nyallow\nyam\nYamacraw\nYamamadi\nyamamai\nyamanai\nyamaskite\nYamassee\nYamato\nYamel\nyamen\nYameo\nyamilke\nyammadji\nyammer\nyamp\nyampa\nyamph\nyamshik\nyamstchik\nyan\nYana\nYanan\nyancopin\nyander\nyang\nyangtao\nyank\nYankee\nYankeedom\nYankeefy\nYankeeism\nYankeeist\nYankeeize\nYankeeland\nYankeeness\nyanking\nYankton\nYanktonai\nyanky\nYannigan\nYao\nyaoort\nyaourti\nyap\nyapa\nyaply\nYapman\nyapness\nyapok\nyapp\nyapped\nyapper\nyappiness\nyapping\nyappingly\nyappish\nyappy\nyapster\nYaqui\nYaquina\nyar\nyarak\nyaray\nyarb\nYarborough\nyard\nyardage\nyardang\nyardarm\nyarder\nyardful\nyarding\nyardkeep\nyardland\nyardman\nyardmaster\nyardsman\nyardstick\nyardwand\nyare\nyareta\nyark\nYarkand\nyarke\nyarl\nyarly\nyarm\nyarn\nyarnen\nyarner\nyarnwindle\nyarpha\nyarr\nyarraman\nyarran\nyarringle\nyarrow\nyarth\nyarthen\nYaru\nYarura\nYaruran\nYaruro\nyarwhelp\nyarwhip\nyas\nyashiro\nyashmak\nYasht\nYasna\nyat\nyataghan\nyatalite\nyate\nyati\nYatigan\nyatter\nYatvyag\nYauapery\nyaud\nyauld\nyaupon\nyautia\nyava\nYavapai\nyaw\nyawl\nyawler\nyawlsman\nyawmeter\nyawn\nyawner\nyawney\nyawnful\nyawnfully\nyawnily\nyawniness\nyawning\nyawningly\nyawnproof\nyawnups\nyawny\nyawp\nyawper\nyawroot\nyaws\nyawweed\nyawy\nyaxche\nyaya\nYazdegerdian\nYazoo\nycie\nyday\nye\nyea\nyeah\nyealing\nyean\nyeanling\nyear\nyeara\nyearbird\nyearbook\nyeard\nyearday\nyearful\nyearling\nyearlong\nyearly\nyearn\nyearnful\nyearnfully\nyearnfulness\nyearning\nyearnling\nyearock\nyearth\nyeast\nyeastily\nyeastiness\nyeasting\nyeastlike\nyeasty\nyeat\nyeather\nyed\nyede\nyee\nyeel\nyeelaman\nyees\nyegg\nyeggman\nyeguita\nyeld\nyeldrin\nyeldrock\nyelk\nyell\nyeller\nyelling\nyelloch\nyellow\nyellowammer\nyellowback\nyellowbelly\nyellowberry\nyellowbill\nyellowbird\nyellowcrown\nyellowcup\nyellowfin\nyellowfish\nyellowhammer\nyellowhead\nyellowing\nyellowish\nyellowishness\nYellowknife\nyellowlegs\nyellowly\nyellowness\nyellowroot\nyellowrump\nyellows\nyellowseed\nyellowshank\nyellowshanks\nyellowshins\nyellowtail\nyellowthorn\nyellowthroat\nyellowtop\nyellowware\nyellowweed\nyellowwood\nyellowwort\nyellowy\nyelm\nyelmer\nyelp\nyelper\nyelt\nYemen\nYemeni\nYemenic\nYemenite\nyen\nyender\nYengee\nYengeese\nyeni\nYenisei\nYeniseian\nyenite\nyentnite\nyeo\nyeoman\nyeomaness\nyeomanette\nyeomanhood\nyeomanlike\nyeomanly\nyeomanry\nyeomanwise\nyeorling\nyeowoman\nyep\nyer\nYerava\nYeraver\nyerb\nyerba\nyercum\nyerd\nyere\nyerga\nyerk\nyern\nyerth\nyes\nyese\nYeshibah\nYeshiva\nyeso\nyesso\nyest\nyester\nyesterday\nyestereve\nyestereven\nyesterevening\nyestermorn\nyestermorning\nyestern\nyesternight\nyesternoon\nyesterweek\nyesteryear\nyestreen\nyesty\nyet\nyeta\nyetapa\nyeth\nyether\nyetlin\nyeuk\nyeukieness\nyeuky\nyeven\nyew\nyex\nyez\nYezdi\nYezidi\nyezzy\nygapo\nYid\nYiddish\nYiddisher\nYiddishism\nYiddishist\nyield\nyieldable\nyieldableness\nyieldance\nyielden\nyielder\nyielding\nyieldingly\nyieldingness\nyieldy\nyigh\nYikirgaulit\nYildun\nyill\nyilt\nYin\nyin\nyince\nyinst\nyip\nyird\nyirk\nyirm\nyirmilik\nyirn\nyirr\nyirth\nyis\nyite\nym\nyn\nynambu\nyo\nyobi\nyocco\nyochel\nyock\nyockel\nyodel\nyodeler\nyodelist\nyodh\nyoe\nyoga\nyogasana\nyogh\nyoghurt\nyogi\nyogin\nyogism\nyogist\nyogoite\nyohimbe\nyohimbi\nyohimbine\nyohimbinization\nyohimbinize\nyoi\nyoick\nyoicks\nyojan\nyojana\nYojuane\nyok\nyoke\nyokeable\nyokeableness\nyokeage\nyokefellow\nyokel\nyokeldom\nyokeless\nyokelish\nyokelism\nyokelry\nyokemate\nyokemating\nyoker\nyokewise\nyokewood\nyoking\nYokuts\nyoky\nyolden\nYoldia\nyoldring\nyolk\nyolked\nyolkiness\nyolkless\nyolky\nyom\nyomer\nYomud\nyon\nyoncopin\nyond\nyonder\nYonkalla\nyonner\nyonside\nyont\nyook\nyoop\nyor\nyore\nyoretime\nyork\nYorker\nyorker\nYorkish\nYorkist\nYorkshire\nYorkshireism\nYorkshireman\nYoruba\nYoruban\nyot\nyotacism\nyotacize\nyote\nyou\nyoud\nyouden\nyoudendrift\nyoudith\nyouff\nyoul\nyoung\nyoungberry\nyounger\nyounghearted\nyoungish\nyounglet\nyoungling\nyoungly\nyoungness\nyoungster\nyoungun\nyounker\nyoup\nyour\nyourn\nyours\nyoursel\nyourself\nyourselves\nyouse\nyouth\nyouthen\nyouthful\nyouthfullity\nyouthfully\nyouthfulness\nyouthhead\nyouthheid\nyouthhood\nyouthily\nyouthless\nyouthlessness\nyouthlike\nyouthlikeness\nyouthsome\nyouthtide\nyouthwort\nyouthy\nyouve\nyouward\nyouwards\nyouze\nyoven\nyow\nyowie\nyowl\nyowler\nyowley\nyowlring\nyowt\nyox\nyoy\nyperite\nYponomeuta\nYponomeutid\nYponomeutidae\nypsiliform\nypsiloid\nYpurinan\nYquem\nyr\nytterbia\nytterbic\nytterbium\nyttria\nyttrialite\nyttric\nyttriferous\nyttrious\nyttrium\nyttrocerite\nyttrocolumbite\nyttrocrasite\nyttrofluorite\nyttrogummite\nyttrotantalite\nYuan\nyuan\nYuapin\nyuca\nYucatec\nYucatecan\nYucateco\nYucca\nyucca\nYuchi\nyuck\nyuckel\nyucker\nyuckle\nyucky\nYuechi\nyuft\nYuga\nyugada\nYugoslav\nYugoslavian\nYugoslavic\nyuh\nYuit\nYukaghir\nYuki\nYukian\nyukkel\nyulan\nyule\nyuleblock\nyuletide\nYuma\nYuman\nyummy\nYun\nYunca\nYuncan\nyungan\nYunnanese\nYurak\nYurok\nyurt\nyurta\nYurucare\nYurucarean\nYurucari\nYurujure\nYuruk\nYuruna\nYurupary\nyus\nyusdrum\nYustaga\nyutu\nyuzlik\nyuzluk\nYvonne\nZ\nz\nza\nZabaean\nzabaglione\nZabaism\nZaberma\nzabeta\nZabian\nZabism\nzabra\nzabti\nzabtie\nzac\nzacate\nZacatec\nZacateco\nzacaton\nZach\nZachariah\nzachun\nzad\nZadokite\nzadruga\nzaffar\nzaffer\nzafree\nzag\nzagged\nZaglossus\nzaibatsu\nzain\nZaitha\nzak\nzakkeu\nZaklohpakap\nzalambdodont\nZalambdodonta\nZalophus\nzaman\nzamang\nzamarra\nzamarro\nZambal\nZambezian\nzambo\nzamboorak\nZamenis\nZamia\nZamiaceae\nZamicrus\nzamindar\nzamindari\nzamorin\nzamouse\nZan\nZanclidae\nZanclodon\nZanclodontidae\nZande\nzander\nzandmole\nzanella\nZaniah\nZannichellia\nZannichelliaceae\nZanonia\nzant\nzante\nZantedeschia\nzantewood\nZanthorrhiza\nZanthoxylaceae\nZanthoxylum\nzanthoxylum\nZantiot\nzantiote\nzany\nzanyish\nzanyism\nzanyship\nZanzalian\nzanze\nZanzibari\nZapara\nZaparan\nZaparo\nZaparoan\nzapas\nzapatero\nzaphara\nZaphetic\nzaphrentid\nZaphrentidae\nZaphrentis\nzaphrentoid\nZapodidae\nZapodinae\nZaporogian\nZaporogue\nzapota\nZapotec\nZapotecan\nZapoteco\nzaptiah\nzaptieh\nZaptoeca\nzapupe\nZapus\nzaqqum\nZaque\nzar\nzarabanda\nZaramo\nZarathustrian\nZarathustrianism\nZarathustrism\nzaratite\nZardushti\nzareba\nZarema\nzarf\nzarnich\nzarp\nzarzuela\nzat\nzati\nzattare\nZaurak\nZauschneria\nZavijava\nzax\nzayat\nzayin\nZea\nzeal\nZealander\nzealful\nzealless\nzeallessness\nzealot\nzealotic\nzealotical\nzealotism\nzealotist\nzealotry\nzealous\nzealously\nzealousness\nzealousy\nzealproof\nzebra\nzebraic\nzebralike\nzebrass\nzebrawood\nZebrina\nzebrine\nzebrinny\nzebroid\nzebrula\nzebrule\nzebu\nzebub\nZebulunite\nzeburro\nzecchini\nzecchino\nzechin\nZechstein\nzed\nzedoary\nzee\nzeed\nZeelander\nZeguha\nzehner\nZeidae\nzein\nzeism\nzeist\nZeke\nzel\nZelanian\nzelator\nzelatrice\nzelatrix\nZelkova\nZeltinger\nzemeism\nzemi\nzemimdari\nzemindar\nzemmi\nzemni\nzemstroist\nzemstvo\nZen\nZenaga\nZenaida\nZenaidinae\nZenaidura\nzenana\nZend\nZendic\nzendician\nzendik\nzendikite\nZenelophon\nzenick\nzenith\nzenithal\nzenithward\nzenithwards\nZenobia\nzenocentric\nzenographic\nzenographical\nzenography\nZenonian\nZenonic\nzenu\nZeoidei\nzeolite\nzeolitic\nzeolitization\nzeolitize\nzeoscope\nZep\nzepharovichite\nzephyr\nZephyranthes\nzephyrean\nzephyrless\nzephyrlike\nzephyrous\nzephyrus\nzephyry\nZeppelin\nzeppelin\nzequin\nzer\nzerda\nZerma\nzermahbub\nzero\nzeroaxial\nzeroize\nzerumbet\nzest\nzestful\nzestfully\nzestfulness\nzesty\nzeta\nzetacism\nzetetic\nZeuctocoelomata\nzeuctocoelomatic\nzeuctocoelomic\nZeuglodon\nzeuglodon\nzeuglodont\nZeuglodonta\nZeuglodontia\nZeuglodontidae\nzeuglodontoid\nzeugma\nzeugmatic\nzeugmatically\nZeugobranchia\nZeugobranchiata\nzeunerite\nZeus\nZeuxian\nZeuzera\nzeuzerian\nZeuzeridae\nZhmud\nziamet\nziara\nziarat\nzibeline\nzibet\nzibethone\nzibetone\nzibetum\nziega\nzieger\nzietrisikite\nziffs\nzig\nziganka\nziggurat\nzigzag\nzigzagged\nzigzaggedly\nzigzaggedness\nzigzagger\nzigzaggery\nzigzaggy\nzigzagwise\nzihar\nzikurat\nZilla\nzillah\nzimarra\nzimb\nzimbabwe\nzimbalon\nzimbaloon\nzimbi\nzimentwater\nzimme\nZimmerwaldian\nZimmerwaldist\nzimmi\nzimmis\nzimocca\nzinc\nZincalo\nzincate\nzincic\nzincide\nzinciferous\nzincification\nzincify\nzincing\nzincite\nzincize\nzincke\nzincky\nzinco\nzincograph\nzincographer\nzincographic\nzincographical\nzincography\nzincotype\nzincous\nzincum\nzincuret\nzinfandel\nzing\nzingaresca\nzingel\nzingerone\nZingiber\nZingiberaceae\nzingiberaceous\nzingiberene\nzingiberol\nzingiberone\nzink\nzinkenite\nZinnia\nzinnwaldite\nzinsang\nzinyamunga\nZinzar\nZinziberaceae\nzinziberaceous\nZion\nZionism\nZionist\nZionistic\nZionite\nZionless\nZionward\nzip\nZipa\nziphian\nZiphiidae\nZiphiinae\nziphioid\nZiphius\nZipper\nzipper\nzipping\nzippingly\nzippy\nZips\nzira\nzirai\nZirak\nZirbanit\nzircite\nzircofluoride\nzircon\nzirconate\nzirconia\nzirconian\nzirconic\nzirconiferous\nzirconifluoride\nzirconium\nzirconofluoride\nzirconoid\nzirconyl\nZirian\nZirianian\nzirkelite\nzither\nzitherist\nZizania\nZizia\nZizyphus\nzizz\nzloty\nZmudz\nzo\nZoa\nzoa\nzoacum\nZoanthacea\nzoanthacean\nZoantharia\nzoantharian\nzoanthid\nZoanthidae\nZoanthidea\nzoanthodeme\nzoanthodemic\nzoanthoid\nzoanthropy\nZoanthus\nZoarces\nzoarcidae\nzoaria\nzoarial\nZoarite\nzoarium\nzobo\nzobtenite\nzocco\nzoccolo\nzodiac\nzodiacal\nzodiophilous\nzoea\nzoeaform\nzoeal\nzoeform\nzoehemera\nzoehemerae\nzoetic\nzoetrope\nzoetropic\nzogan\nzogo\nZohak\nZoharist\nZoharite\nzoiatria\nzoiatrics\nzoic\nzoid\nzoidiophilous\nzoidogamous\nZoilean\nZoilism\nZoilist\nzoisite\nzoisitization\nzoism\nzoist\nzoistic\nzokor\nZolaesque\nZolaism\nZolaist\nZolaistic\nZolaize\nzoll\nzolle\nZollernia\nzollpfund\nzolotink\nzolotnik\nzombi\nzombie\nzombiism\nzomotherapeutic\nzomotherapy\nzonal\nzonality\nzonally\nzonar\nZonaria\nzonary\nzonate\nzonated\nzonation\nzone\nzoned\nzoneless\nzonelet\nzonelike\nzonesthesia\nZongora\nzonic\nzoniferous\nzoning\nzonite\nZonites\nzonitid\nZonitidae\nZonitoides\nzonochlorite\nzonociliate\nzonoid\nzonolimnetic\nzonoplacental\nZonoplacentalia\nzonoskeleton\nZonotrichia\nZonta\nZontian\nzonular\nzonule\nzonulet\nzonure\nzonurid\nZonuridae\nzonuroid\nZonurus\nzoo\nzoobenthos\nzooblast\nzoocarp\nzoocecidium\nzoochemical\nzoochemistry\nzoochemy\nZoochlorella\nzoochore\nzoocoenocyte\nzoocultural\nzooculture\nzoocurrent\nzoocyst\nzoocystic\nzoocytial\nzoocytium\nzoodendria\nzoodendrium\nzoodynamic\nzoodynamics\nzooecia\nzooecial\nzooecium\nzooerastia\nzooerythrin\nzoofulvin\nzoogamete\nzoogamous\nzoogamy\nzoogene\nzoogenesis\nzoogenic\nzoogenous\nzoogeny\nzoogeographer\nzoogeographic\nzoogeographical\nzoogeographically\nzoogeography\nzoogeological\nzoogeologist\nzoogeology\nzoogloea\nzoogloeal\nzoogloeic\nzoogonic\nzoogonidium\nzoogonous\nzoogony\nzoograft\nzoografting\nzoographer\nzoographic\nzoographical\nzoographically\nzoographist\nzoography\nzooid\nzooidal\nzooidiophilous\nzooks\nzoolater\nzoolatria\nzoolatrous\nzoolatry\nzoolite\nzoolith\nzoolithic\nzoolitic\nzoologer\nzoologic\nzoological\nzoologically\nzoologicoarchaeologist\nzoologicobotanical\nzoologist\nzoologize\nzoology\nzoom\nzoomagnetic\nzoomagnetism\nzoomancy\nzoomania\nzoomantic\nzoomantist\nZoomastigina\nZoomastigoda\nzoomechanical\nzoomechanics\nzoomelanin\nzoometric\nzoometry\nzoomimetic\nzoomimic\nzoomorph\nzoomorphic\nzoomorphism\nzoomorphize\nzoomorphy\nzoon\nzoonal\nzoonerythrin\nzoonic\nzoonist\nzoonite\nzoonitic\nzoonomia\nzoonomic\nzoonomical\nzoonomist\nzoonomy\nzoonosis\nzoonosologist\nzoonosology\nzoonotic\nzoons\nzoonule\nzoopaleontology\nzoopantheon\nzooparasite\nzooparasitic\nzoopathological\nzoopathologist\nzoopathology\nzoopathy\nzooperal\nzooperist\nzoopery\nZoophaga\nzoophagan\nZoophagineae\nzoophagous\nzoopharmacological\nzoopharmacy\nzoophile\nzoophilia\nzoophilic\nzoophilism\nzoophilist\nzoophilite\nzoophilitic\nzoophilous\nzoophily\nzoophobia\nzoophobous\nzoophoric\nzoophorus\nzoophysical\nzoophysics\nzoophysiology\nZoophyta\nzoophytal\nzoophyte\nzoophytic\nzoophytical\nzoophytish\nzoophytography\nzoophytoid\nzoophytological\nzoophytologist\nzoophytology\nzooplankton\nzooplanktonic\nzooplastic\nzooplasty\nzoopraxiscope\nzoopsia\nzoopsychological\nzoopsychologist\nzoopsychology\nzooscopic\nzooscopy\nzoosis\nzoosmosis\nzoosperm\nzoospermatic\nzoospermia\nzoospermium\nzoosphere\nzoosporange\nzoosporangia\nzoosporangial\nzoosporangiophore\nzoosporangium\nzoospore\nzoosporic\nzoosporiferous\nzoosporocyst\nzoosporous\nzootaxy\nzootechnic\nzootechnics\nzootechny\nzooter\nzoothecia\nzoothecial\nzoothecium\nzootheism\nzootheist\nzootheistic\nzootherapy\nzoothome\nzootic\nZootoca\nzootomic\nzootomical\nzootomically\nzootomist\nzootomy\nzoototemism\nzootoxin\nzootrophic\nzootrophy\nzootype\nzootypic\nzooxanthella\nzooxanthellae\nzooxanthin\nzoozoo\nzopilote\nZoque\nZoquean\nZoraptera\nzorgite\nzoril\nzorilla\nZorillinae\nzorillo\nZoroastrian\nZoroastrianism\nZoroastrism\nZorotypus\nzorrillo\nzorro\nZosma\nzoster\nZostera\nZosteraceae\nzosteriform\nZosteropinae\nZosterops\nZouave\nzounds\nzowie\nZoysia\nZubeneschamali\nzuccarino\nzucchetto\nzucchini\nzudda\nzugtierlast\nzugtierlaster\nzuisin\nZuleika\nZulhijjah\nZulinde\nZulkadah\nZulu\nZuludom\nZuluize\nzumatic\nzumbooruk\nZuni\nZunian\nzunyite\nzupanate\nZutugil\nzuurveldt\nzuza\nzwanziger\nZwieback\nzwieback\nZwinglian\nZwinglianism\nZwinglianist\nzwitter\nzwitterion\nzwitterionic\nzyga\nzygadenine\nZygadenus\nZygaena\nzygaenid\nZygaenidae\nzygal\nzygantra\nzygantrum\nzygapophyseal\nzygapophysis\nzygion\nzygite\nZygnema\nZygnemaceae\nZygnemales\nZygnemataceae\nzygnemataceous\nZygnematales\nzygobranch\nZygobranchia\nZygobranchiata\nzygobranchiate\nZygocactus\nzygodactyl\nZygodactylae\nZygodactyli\nzygodactylic\nzygodactylism\nzygodactylous\nzygodont\nzygolabialis\nzygoma\nzygomata\nzygomatic\nzygomaticoauricular\nzygomaticoauricularis\nzygomaticofacial\nzygomaticofrontal\nzygomaticomaxillary\nzygomaticoorbital\nzygomaticosphenoid\nzygomaticotemporal\nzygomaticum\nzygomaticus\nzygomaxillare\nzygomaxillary\nzygomorphic\nzygomorphism\nzygomorphous\nzygomycete\nZygomycetes\nzygomycetous\nzygon\nzygoneure\nzygophore\nzygophoric\nZygophyceae\nzygophyceous\nZygophyllaceae\nzygophyllaceous\nZygophyllum\nzygophyte\nzygopleural\nZygoptera\nZygopteraceae\nzygopteran\nzygopterid\nZygopterides\nZygopteris\nzygopteron\nzygopterous\nZygosaccharomyces\nzygose\nzygosis\nzygosperm\nzygosphenal\nzygosphene\nzygosphere\nzygosporange\nzygosporangium\nzygospore\nzygosporic\nzygosporophore\nzygostyle\nzygotactic\nzygotaxis\nzygote\nzygotene\nzygotic\nzygotoblast\nzygotoid\nzygotomere\nzygous\nzygozoospore\nzymase\nzyme\nzymic\nzymin\nzymite\nzymogen\nzymogene\nzymogenesis\nzymogenic\nzymogenous\nzymoid\nzymologic\nzymological\nzymologist\nzymology\nzymolyis\nzymolysis\nzymolytic\nzymome\nzymometer\nzymomin\nzymophore\nzymophoric\nzymophosphate\nzymophyte\nzymoplastic\nzymoscope\nzymosimeter\nzymosis\nzymosterol\nzymosthenic\nzymotechnic\nzymotechnical\nzymotechnics\nzymotechny\nzymotic\nzymotically\nzymotize\nzymotoxic\nzymurgy\nZyrenian\nZyrian\nZyryan\nzythem\nZythia\nzythum\nZyzomys\nZyzzogeton\n"
  },
  {
    "path": "watchman/thirdparty/wildmatch/.dir-locals.el",
    "content": "((c-mode . ((c-basic-offset . 8)\n            (indent-tabs-mode . t)\n\t    (tab-width . 8)\n\t    (fill-column . 80))))\n"
  },
  {
    "path": "watchman/thirdparty/wildmatch/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_library.bzl\", \"cpp_library\")\n\noncall(\"scm_client_infra\")\n\ncpp_library(\n    name = \"wildmatch\",\n    srcs = [\"wildmatch.c\"],\n    headers = [\"wildmatch.h\"],\n)\n"
  },
  {
    "path": "watchman/thirdparty/wildmatch/wildmatch.c",
    "content": "/* Copyright 1986-present, Rich $alz, Wayne Davison, and Duy Nguyen.\n * Licensed under the Apache License, Version 2.0 */\n\n/*\n**  Do shell-style pattern matching for ?, \\, [], and * characters.\n**  It is 8bit clean.\n**\n**  Written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986.\n**  Rich $alz is now <rsalz@bbn.com>.\n**\n**  Modified by Wayne Davison to special-case '/' matching, to make '**'\n**  work differently than '*', and to fix the character-class code.\n*/\n\n#include <ctype.h>\n#include <string.h>\n\n#include \"wildmatch.h\"\n\n#ifndef NULL\n#define NULL 0\n#endif\n\ntypedef unsigned char uchar;\n\n#define is_glob_special(c) \\\n  ((c) == '*' || (c) == '?' || (c) == '[' || (c) == '\\\\')\n\n/* What character marks an inverted character class? */\n#define NEGATE_CLASS\t'!'\n#define NEGATE_CLASS2\t'^'\n\n#define CC_EQ(class, len, litmatch) ((len) == sizeof (litmatch)-1 \\\n\t\t\t\t    && *(class) == *(litmatch) \\\n\t\t\t\t    && strncmp((char*)class, litmatch, len) == 0)\n\n#if defined STDC_HEADERS || !defined isascii\n# define ISASCII(c) 1\n#else\n# define ISASCII(c) isascii(c)\n#endif\n\n#ifdef isblank\n# define ISBLANK(c) (ISASCII(c) && isblank(c))\n#else\n# define ISBLANK(c) ((c) == ' ' || (c) == '\\t')\n#endif\n\n#ifdef isgraph\n# define ISGRAPH(c) (ISASCII(c) && isgraph(c))\n#else\n# define ISGRAPH(c) (ISASCII(c) && isprint(c) && !isspace(c))\n#endif\n\n#define ISPRINT(c) (ISASCII(c) && isprint(c))\n#define ISDIGIT(c) (ISASCII(c) && isdigit(c))\n#define ISALNUM(c) (ISASCII(c) && isalnum(c))\n#define ISALPHA(c) (ISASCII(c) && isalpha(c))\n#define ISCNTRL(c) (ISASCII(c) && iscntrl(c))\n#define ISLOWER(c) (ISASCII(c) && islower(c))\n#define ISPUNCT(c) (ISASCII(c) && ispunct(c))\n#define ISSPACE(c) (ISASCII(c) && isspace(c))\n#define ISUPPER(c) (ISASCII(c) && isupper(c))\n#define ISXDIGIT(c) (ISASCII(c) && isxdigit(c))\n\n/* Match pattern \"p\" against \"text\" */\nstatic int dowild(const uchar *p, const uchar *text, unsigned int flags)\n{\n\tuchar p_ch;\n\tconst uchar *pattern = p;\n\n\tint pattern_needs_leading_period =\n\t\t(flags & WM_PERIOD) && (text[0] == '.');\n\n\tfor ( ; (p_ch = *p) != '\\0'; text++, p++) {\n\t\tint matched, match_slash, negated;\n\t\tuchar t_ch, prev_ch;\n\t\tif ((t_ch = *text) == '\\0' && p_ch != '*')\n\t\t\treturn WM_ABORT_ALL;\n\t\tif ((flags & WM_CASEFOLD) && ISUPPER(t_ch))\n\t\t\tt_ch = tolower(t_ch);\n\t\tif ((flags & WM_CASEFOLD) && ISUPPER(p_ch))\n\t\t\tp_ch = tolower(p_ch);\n\t\tswitch (p_ch) {\n\t\tcase '\\\\':\n\t\t\tif (!(flags & WM_NOESCAPE))\n\t\t\t\t/* Literal match with following character.  Note that the test\n\t\t\t\t * in \"default\" handles the p[1] == '\\0' failure case. */\n\t\t\t\tp_ch = *++p;\n#ifndef _WIN32\n\t\t\t__attribute__((fallthrough));\n#endif\n\t\tdefault:\n\t\t\tif (p_ch == '/') {\n\t\t\t\t/* Consume any number of consecutive slashes. */\n\t\t\t\twhile (*(p + 1) == '/') {\n\t\t\t\t\t++p;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (t_ch != p_ch)\n\t\t\t\treturn WM_NOMATCH;\n\t\t\tif ((flags & WM_PERIOD) &&\n\t\t\t    (flags & WM_PATHNAME) && t_ch == '/' &&\n\t\t\t    text[1] == '.' && p[1] != '.')\n\t\t\t\treturn WM_NOMATCH;\n\t\t\t/* If we needed a leading period, we've matched it. */\n\t\t\tpattern_needs_leading_period = 0;\n\t\t\tcontinue;\n\t\tcase '?':\n\t\t\t/* Match anything but '/'. */\n\t\t\tif ((flags & WM_PATHNAME) && t_ch == '/')\n\t\t\t\treturn WM_NOMATCH;\n\t\t\tcontinue;\n\t\tcase '*':\n\t\t\tif (*++p == '*') {\n\t\t\t\tconst uchar *prev_p = p - 2;\n\t\t\t\twhile (*++p == '*') {}\n\t\t\t\tif (!(flags & WM_PATHNAME))\n\t\t\t\t\t/* without WM_PATHNAME, '*' == '**' */\n\t\t\t\t\tmatch_slash = 1;\n\t\t\t\telse if ((prev_p < pattern || *prev_p == '/') &&\n\t\t\t\t    (*p == '\\0' || *p == '/' ||\n\t\t\t\t     (p[0] == '\\\\' && p[1] == '/'))) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Assuming we already match 'foo/' and are at\n\t\t\t\t\t * <star star slash>, just assume it matches\n\t\t\t\t\t * nothing and go ahead match the rest of the\n\t\t\t\t\t * pattern with the remaining string. This\n\t\t\t\t\t * helps make foo/<*><*>/bar (<> because\n\t\t\t\t\t * otherwise it breaks C comment syntax) match\n\t\t\t\t\t * both foo/bar and foo/a/bar.\n\t\t\t\t\t */\n\t\t\t\t\tif (p[0] == '/' &&\n\t\t\t\t\t    dowild(p + 1, text, flags) == WM_MATCH)\n\t\t\t\t\t\treturn WM_MATCH;\n\t\t\t\t\tmatch_slash = 1;\n\t\t\t\t} else\n\t\t\t\t\treturn WM_ABORT_MALFORMED;\n\t\t\t} else\n\t\t\t\t/* without WM_PATHNAME, '*' == '**' */\n\t\t\t\tmatch_slash = flags & WM_PATHNAME ? 0 : 1;\n\t\t\tif (*p == '\\0') {\n\t\t\t\t/* If we needed a leading period in the pattern but only\n\t\t\t\t * found stars, we didn't match. */\n\t\t\t\tif (pattern_needs_leading_period)\n\t\t\t\t\treturn WM_NOMATCH;\n\t\t\t\t/* Trailing \"**\" matches everything.  Trailing \"*\" matches\n\t\t\t\t * only if there are no more slash characters. */\n\t\t\t\tif (!match_slash) {\n\t\t\t\t\tif (strchr((char*)text, '/') != NULL)\n\t\t\t\t\t\treturn WM_NOMATCH;\n\t\t\t\t\tif ((flags & WM_PERIOD) &&\n\t\t\t\t\t    strstr((const char*)text, \"/.\") != NULL)\n\t\t\t\t\t\treturn WM_NOMATCH;\n\t\t\t\t}\n\t\t\t\treturn WM_MATCH;\n\t\t\t} else if (!match_slash && *p == '/') {\n\t\t\t\t/*\n\t\t\t\t * _one_ asterisk followed by a slash\n\t\t\t\t * with WM_PATHNAME matches the next\n\t\t\t\t * directory\n\t\t\t\t */\n\t\t\t\tconst char *slash = strchr((char*)text, '/');\n\t\t\t\tif (!slash)\n\t\t\t\t\treturn WM_NOMATCH;\n\t\t\t\ttext = (const uchar*)slash;\n\t\t\t\t/* the slash is consumed by the top-level for loop */\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\twhile (1) {\n\t\t\t\tif (t_ch == '\\0')\n\t\t\t\t\tbreak;\n\t\t\t\t/*\n\t\t\t\t * Try to advance faster when an asterisk is\n\t\t\t\t * followed by a literal. We know in this case\n\t\t\t\t * that the the string before the literal\n\t\t\t\t * must belong to \"*\".\n\t\t\t\t * If match_slash is false, do not look past\n\t\t\t\t * the first slash as it cannot belong to '*'.\n\t\t\t\t */\n\t\t\t\tif (!is_glob_special(*p)) {\n\t\t\t\t\tp_ch = *p;\n\t\t\t\t\tif ((flags & WM_CASEFOLD) && ISUPPER(p_ch))\n\t\t\t\t\t\tp_ch = tolower(p_ch);\n\t\t\t\t\twhile ((t_ch = *text) != '\\0' &&\n\t\t\t\t\t       (match_slash || t_ch != '/')) {\n\t\t\t\t\t\tif ((flags & WM_CASEFOLD) && ISUPPER(t_ch))\n\t\t\t\t\t\t\tt_ch = tolower(t_ch);\n\t\t\t\t\t\tif (t_ch == p_ch)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\ttext++;\n\t\t\t\t\t}\n\t\t\t\t\tif (t_ch != p_ch)\n\t\t\t\t\t\treturn WM_NOMATCH;\n\t\t\t\t}\n\t\t\t\tif (pattern_needs_leading_period)\n\t\t\t\t\treturn WM_NOMATCH;\n\t\t\t\tif ((matched = dowild(p, text, flags)) != WM_NOMATCH) {\n\t\t\t\t\tif (!match_slash || matched != WM_ABORT_TO_STARSTAR)\n\t\t\t\t\t\treturn matched;\n\t\t\t\t} else if (!match_slash && t_ch == '/')\n\t\t\t\t\treturn WM_ABORT_TO_STARSTAR;\n\t\t\t\telse if ((flags & WM_PERIOD) &&\n\t\t\t\t\t (flags & WM_PATHNAME) && t_ch == '/' &&\n\t\t\t\t\t text[1] == '.' && p[1] != '.')\n\t\t\t\t\treturn WM_NOMATCH;\n\t\t\t\tt_ch = *++text;\n\t\t\t}\n\t\t\treturn WM_ABORT_ALL;\n\t\tcase '[':\n\t\t\tp_ch = *++p;\n#ifdef NEGATE_CLASS2\n\t\t\tif (p_ch == NEGATE_CLASS2)\n\t\t\t\tp_ch = NEGATE_CLASS;\n#endif\n\t\t\t/* Assign literal 1/0 because of \"matched\" comparison. */\n\t\t\tnegated = p_ch == NEGATE_CLASS ? 1 : 0;\n\t\t\tif (negated) {\n\t\t\t\t/* Inverted character class. */\n\t\t\t\tp_ch = *++p;\n\t\t\t}\n\t\t\tprev_ch = 0;\n\t\t\tmatched = 0;\n\t\t\tdo {\n\t\t\t\tif (!p_ch)\n\t\t\t\t\treturn WM_ABORT_ALL;\n\t\t\t\tif (p_ch == '\\\\') {\n\t\t\t\t\tp_ch = *++p;\n\t\t\t\t\tif (!p_ch)\n\t\t\t\t\t\treturn WM_ABORT_ALL;\n\t\t\t\t\tif (t_ch == p_ch)\n\t\t\t\t\t\tmatched = 1;\n\t\t\t\t} else if (p_ch == '-' && prev_ch && p[1] && p[1] != ']') {\n\t\t\t\t\tp_ch = *++p;\n\t\t\t\t\tif (p_ch == '\\\\') {\n\t\t\t\t\t\tp_ch = *++p;\n\t\t\t\t\t\tif (!p_ch)\n\t\t\t\t\t\t\treturn WM_ABORT_ALL;\n\t\t\t\t\t}\n\t\t\t\t\tif (t_ch <= p_ch && t_ch >= prev_ch)\n\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\telse if ((flags & WM_CASEFOLD) && ISLOWER(t_ch)) {\n\t\t\t\t\t\tuchar t_ch_upper = toupper(t_ch);\n\t\t\t\t\t\tif (t_ch_upper <= p_ch && t_ch_upper >= prev_ch)\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t}\n\t\t\t\t\tp_ch = 0; /* This makes \"prev_ch\" get set to 0. */\n\t\t\t\t} else if (p_ch == '[' && p[1] == ':') {\n\t\t\t\t\tconst uchar *s;\n\t\t\t\t\tint i;\n\t\t\t\t\tfor (s = p += 2; (p_ch = *p) && p_ch != ']'; p++) {} /*SHARED ITERATOR*/\n\t\t\t\t\tif (!p_ch)\n\t\t\t\t\t\treturn WM_ABORT_ALL;\n\t\t\t\t\ti = p - s - 1;\n\t\t\t\t\tif (i < 0 || p[-1] != ':') {\n\t\t\t\t\t\t/* Didn't find \":]\", so treat like a normal set. */\n\t\t\t\t\t\tp = s - 2;\n\t\t\t\t\t\tp_ch = '[';\n\t\t\t\t\t\tif (t_ch == p_ch)\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (CC_EQ(s,i, \"alnum\")) {\n\t\t\t\t\t\tif (ISALNUM(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"alpha\")) {\n\t\t\t\t\t\tif (ISALPHA(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"blank\")) {\n\t\t\t\t\t\tif (ISBLANK(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"cntrl\")) {\n\t\t\t\t\t\tif (ISCNTRL(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"digit\")) {\n\t\t\t\t\t\tif (ISDIGIT(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"graph\")) {\n\t\t\t\t\t\tif (ISGRAPH(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"lower\")) {\n\t\t\t\t\t\tif (ISLOWER(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"print\")) {\n\t\t\t\t\t\tif (ISPRINT(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"punct\")) {\n\t\t\t\t\t\tif (ISPUNCT(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"space\")) {\n\t\t\t\t\t\tif (ISSPACE(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"upper\")) {\n\t\t\t\t\t\tif (ISUPPER(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t\telse if ((flags & WM_CASEFOLD) && ISLOWER(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else if (CC_EQ(s,i, \"xdigit\")) {\n\t\t\t\t\t\tif (ISXDIGIT(t_ch))\n\t\t\t\t\t\t\tmatched = 1;\n\t\t\t\t\t} else /* malformed [:class:] string */\n\t\t\t\t\t\treturn WM_ABORT_ALL;\n\t\t\t\t\tp_ch = 0; /* This makes \"prev_ch\" get set to 0. */\n\t\t\t\t} else if (t_ch == p_ch)\n\t\t\t\t\tmatched = 1;\n\t\t\t} while (prev_ch = p_ch, (p_ch = *++p) != ']');\n\t\t\tif (matched == negated ||\n\t\t\t    ((flags & WM_PATHNAME) && t_ch == '/'))\n\t\t\t\treturn WM_NOMATCH;\n\t\t\tif ((flags & WM_PATHNAME) && t_ch == '/' &&\n\t\t\t    (flags & WM_PERIOD) && (text[1] == '.') && (p[1] != '.'))\n\t\t\t\treturn WM_NOMATCH;\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\treturn *text ? WM_NOMATCH : WM_MATCH;\n}\n\n/* Match the \"pattern\" against the \"text\" string. */\nint wildmatch(const char *pattern, const char *text,\n\t      unsigned int flags, struct wildopts *wo)\n{\n\t(void)wo;\n\treturn dowild((const uchar*)pattern, (const uchar*)text, flags);\n}\n"
  },
  {
    "path": "watchman/thirdparty/wildmatch/wildmatch.h",
    "content": "/* Copyright 1986-present, Rich $alz, Wayne Davison, and Duy Nguyen.\n * Licensed under the Apache License, Version 2.0 */\n\n#ifndef WILDMATCH_H\n#define WILDMATCH_H\n\n#define WM_CASEFOLD 1\n#define WM_PATHNAME 2\n#define WM_PERIOD 4\n#define WM_NOESCAPE 8\n\n#define WM_ABORT_MALFORMED 2\n#define WM_NOMATCH 1\n#define WM_MATCH 0\n#define WM_ABORT_ALL -1\n#define WM_ABORT_TO_STARSTAR -2\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct wildopts;\n\nint wildmatch(const char *pattern, const char *text,\n              unsigned int flags,\n              struct wildopts *wo);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "watchman/watcher/Watcher.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/watcher/Watcher.h\"\n\nnamespace watchman {\n\nWatcher::Watcher(const char* name, unsigned flags) : name(name), flags(flags) {}\n\nWatcher::~Watcher() {}\n\nbool Watcher::startWatchFile(watchman_file*) {\n  return true;\n}\n\nbool Watcher::start(const std::shared_ptr<Root>&) {\n  return true;\n}\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/watcher/Watcher.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <folly/futures/Future.h>\n#include <stdexcept>\n#include \"watchman/PendingCollection.h\"\n#include \"watchman/fs/DirHandle.h\"\n#include \"watchman/thirdparty/jansson/jansson.h\"\n\n#define HINT_NUM_DIRS 128 * 1024\n#define CFG_HINT_NUM_DIRS \"hint_num_dirs\"\n\nstruct watchman_file;\n\nnamespace watchman {\n\nclass QueryableView;\nclass InMemoryView;\nclass Root;\n\nclass TerminalWatcherError : public std::runtime_error {\n public:\n  using std::runtime_error::runtime_error;\n};\n\nclass Watcher : public std::enable_shared_from_this<Watcher> {\n public:\n  /**\n   * This Watcher instance's name.\n   */\n  const w_string name;\n\n  // if this watcher notifies for individual files contained within\n  // a watched dir, false if it only notifies for dirs\n#define WATCHER_HAS_PER_FILE_NOTIFICATIONS 1\n  // if the watcher is comprised of multiple watchers\n#define WATCHER_HAS_SPLIT_WATCH 4\n  unsigned flags;\n\n  Watcher(const char* name, unsigned flags);\n\n  Watcher(Watcher&&) = delete;\n  Watcher& operator=(Watcher&&) = delete;\n\n  // Start up threads or similar.  Called in the context of the\n  // notify thread\n  virtual bool start(const std::shared_ptr<Root>& root);\n\n  // Perform watcher-specific cleanup for a watched root when it is freed\n  virtual ~Watcher();\n\n  /**\n   * If the returned SemiFuture is valid(), then this watcher requires\n   * flushing any queued events. A Promise has been placed in the\n   * PendingCollection and will be completed when InMemoryView processes the\n   * event.\n   *\n   * In particular, FSEvents may return pending events out of order, so the\n   * observation of a cookie file does not guarantee all prior changes have been\n   * seen.\n   *\n   * Otherwise, this watcher does not require flushing, and a cookie file event\n   * is considered sufficient synchronization.\n   */\n  virtual folly::SemiFuture<folly::Unit> flushPendingEvents() {\n    return folly::SemiFuture<folly::Unit>::makeEmpty();\n  }\n\n  // Initiate an OS-level watch on the provided file\n  virtual bool startWatchFile(watchman_file* file);\n\n  // Initiate an OS-level watch on the provided dir, return a DIR\n  // handle, or throw on error.\n  //\n  // path should be absolute.\n  //\n  // Should be thread-safe.\n  virtual std::unique_ptr<DirHandle> startWatchDir(\n      const std::shared_ptr<Root>& root,\n      const char* path) = 0;\n\n  /**\n   * Signal any threads to terminate.  Does not join them, but the reference\n   * count on the root will not fall to zero until the threads stop.\n   */\n  virtual void stopThreads() {}\n\n  /**\n   * Wait for an inotify event to become available.\n   * Returns true if events are available or false if signalThreads() has been\n   * called or timeout has elapsed.\n   */\n  virtual bool waitNotify(int timeoutms) = 0;\n\n  struct ConsumeNotifyRet {\n    // Should the watch be cancelled?\n    bool cancelSelf;\n  };\n\n  /**\n   * Consume any available notifications.  If there are none pending,\n   * does not block.\n   *\n   * Notifications are inserted into `coll`.\n   */\n  virtual ConsumeNotifyRet consumeNotify(\n      const std::shared_ptr<Root>& root,\n      PendingChanges& coll) = 0;\n\n  /**\n   * Returns a JSON value containing this watcher's debug state. Intended for\n   * inclusion in diagnostics.\n   */\n  virtual json_ref getDebugInfo() {\n    return json_null();\n  }\n\n  /**\n   * Clear any accumulated debug state.\n   */\n  virtual void clearDebugInfo() {}\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/watcher/WatcherRegistry.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <fmt/core.h>\n\n#include \"watchman/watcher/WatcherRegistry.h\"\n\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/Logging.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/WatchmanConfig.h\"\n#include \"watchman/watcher/Watcher.h\"\n\nusing namespace watchman;\n\nWatcherRegistry::WatcherRegistry(std::string name, Init init, int priority)\n    : name_(std::move(name)), init_(std::move(init)), pri_(priority) {\n  registerFactory(*this);\n}\n\nstd::unordered_map<std::string, WatcherRegistry>&\nWatcherRegistry::getRegistry() {\n  // Meyers singleton\n  static std::unordered_map<std::string, WatcherRegistry> registry;\n  return registry;\n}\n\nvoid WatcherRegistry::registerFactory(const WatcherRegistry& factory) {\n  auto& reg = getRegistry();\n  reg.emplace(factory.name_, factory);\n\n  auto capname = fmt::format(\"watcher-{}\", factory.name_);\n  capability_register(capname.c_str());\n}\n\nconst WatcherRegistry* WatcherRegistry::getWatcherByName(\n    const std::string& name) {\n  auto& reg = getRegistry();\n  const auto& it = reg.find(name);\n  if (it == reg.end()) {\n    return nullptr;\n  }\n  return &it->second;\n}\n\n// Helper to DRY in the two success paths in the function below\nstatic inline std::shared_ptr<watchman::QueryableView> reportWatcher(\n    const std::string& watcherName,\n    const w_string& root_path,\n    std::shared_ptr<watchman::QueryableView>&& watcher) {\n  if (!watcher) {\n    throw std::runtime_error(\n        fmt::format(\n            \"watcher {} returned nullptr, but should throw an exception\"\n            \" to correctly report initialization issues\",\n            watcherName));\n  }\n  watchman::log(\n      watchman::ERR,\n      \"root \",\n      root_path,\n      \" using watcher mechanism \",\n      watcher->getName(),\n      \" (\",\n      watcherName,\n      \" was requested)\\n\");\n  return std::move(watcher);\n}\n\nstd::shared_ptr<watchman::QueryableView> WatcherRegistry::initWatcher(\n    const w_string& root_path,\n    const w_string& fstype,\n    const Configuration& config) {\n  std::string failureReasons;\n  std::string watcherName = config.getString(\"watcher\", \"auto\");\n\n  if (watcherName != \"auto\") {\n    // If they asked for a specific one, let's try to find it\n    auto watcher = getWatcherByName(watcherName);\n\n    if (!watcher) {\n      failureReasons.append(\n          std::string(\"no watcher named \") + watcherName + std::string(\". \"));\n    } else {\n      try {\n        return reportWatcher(\n            watcherName, root_path, watcher->init_(root_path, fstype, config));\n      } catch (const std::exception& e) {\n        failureReasons.append(\n            watcherName + std::string(\": \") + e.what() + std::string(\". \"));\n      }\n    }\n  }\n\n  // If we get here, let's do auto-selection; build up a list of the\n  // watchers that we didn't try already...\n  std::vector<const WatcherRegistry*> watchers;\n  for (const auto& it : getRegistry()) {\n    if (it.first != watcherName) {\n      watchers.emplace_back(&it.second);\n    }\n  }\n\n  // ... and sort with the highest priority first\n  std::sort(\n      watchers.begin(),\n      watchers.end(),\n      [](const WatcherRegistry* a, const WatcherRegistry* b) {\n        return a->pri_ > b->pri_;\n      });\n\n  // and then work through them, taking the first one that sticks\n  for (auto& watcher : watchers) {\n    try {\n      watchman::log(\n          watchman::DBG,\n          \"attempting to use watcher \",\n          watcher->getName(),\n          \" on \",\n          root_path,\n          \"\\n\");\n      return reportWatcher(\n          watcherName, root_path, watcher->init_(root_path, fstype, config));\n    } catch (const watchman::TerminalWatcherError& e) {\n      failureReasons.append(\n          watcher->getName() + std::string(\": \") + e.what() +\n          std::string(\". \"));\n      // Don't continue our attempt to use other registered watchers\n      // in this case\n      break;\n    } catch (const RootNotConnectedError& rnce) {\n      // When Eden watcher is detected, but fails to resolve, we do\n      // not attempt to use other registered watchers. Rather, we\n      // fail gracefully by throwing RootNotConnectedError.\n      watchman::log(\n          watchman::DBG,\n          \"failed to use watcher \",\n          watcher->getName(),\n          \": \",\n          rnce.what(),\n          \".\\n\");\n      throw;\n    } catch (const std::exception& e) {\n      watchman::log(\n          watchman::ERR,\n          \"failed to use watcher \",\n          watcher->getName(),\n          \": \",\n          e.what(),\n          \".\\n\");\n      failureReasons.append(\n          watcher->getName() + std::string(\": \") + e.what() +\n          std::string(\". \"));\n    }\n  }\n\n  // Nothing worked, report the errors\n  throw std::runtime_error(failureReasons);\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/watcher/WatcherRegistry.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <functional>\n#include <memory>\n#include <string>\n#include <unordered_map>\n#include \"watchman/fs/FileSystem.h\"\n#include \"watchman/watchman_string.h\"\n\nnamespace watchman {\n\nclass Configuration;\nclass InMemoryView;\nclass QueryableView;\nclass Root;\n\n/**\n * Maintains the list of available watchers.\n * This is fundamentally a map of name -> factory function.\n * Some watchers (kqueue, inotify) are available on multiple operating\n * systems: kqueue on macOS and *BSD, inotify on Linux and Solaris.\n * There are cases where a given watcher is not the preferred mechanism\n * (eg: inotify is implemented in terms of portfs on Solaris, so we\n * prefer to target the portfs layer directly), so we have a concept\n * of priority associated with the watcher.\n * Larger numbers are higher priority and will be favored when performing\n * auto-detection.\n **/\nclass WatcherRegistry {\n public:\n  using Init = std::function<std::shared_ptr<watchman::QueryableView>(\n      const w_string& path,\n      const w_string& fstype,\n      const Configuration& config)>;\n\n  WatcherRegistry(std::string name, Init init, int priority = 0);\n\n  /** Locate the appropriate watcher for root and initialize it */\n  static std::shared_ptr<watchman::QueryableView> initWatcher(\n      const w_string& root_path,\n      const w_string& fstype,\n      const Configuration& config);\n\n  const std::string& getName() const {\n    return name_;\n  }\n\n private:\n  std::string name_;\n  Init init_;\n  int pri_;\n\n  static std::unordered_map<std::string, WatcherRegistry>& getRegistry();\n  static void registerFactory(const WatcherRegistry& factory);\n  static const WatcherRegistry* getWatcherByName(const std::string& name);\n};\n\n/**\n * This template makes it less verbose for the common case of defining\n * a name -> class mapping in the registry.\n */\ntemplate <class WATCHER>\nclass RegisterWatcher : public WatcherRegistry {\n public:\n  explicit RegisterWatcher(const std::string& name, int priority = 0)\n      : WatcherRegistry(\n            name,\n            [](const w_string& root_path,\n               const w_string& /*fstype*/,\n               const Configuration& config) {\n              return std::make_shared<InMemoryView>(\n                  realFileSystem,\n                  root_path,\n                  config,\n                  std::make_shared<WATCHER>(root_path, config));\n            },\n            priority) {}\n};\n\n} // namespace watchman\n"
  },
  {
    "path": "watchman/watcher/eden.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <cpptoml.h>\n#include <fmt/core.h>\n#include <folly/ScopeGuard.h>\n#include <folly/String.h>\n#include <folly/futures/Future.h>\n#include <folly/io/async/AsyncSocket.h>\n#include <folly/io/async/EventBase.h>\n#include <folly/io/async/EventBaseManager.h>\n#include <folly/logging/xlog.h>\n#include <thrift/lib/cpp2/async/HeaderClientChannel.h>\n#include <thrift/lib/cpp2/async/PooledRequestChannel.h>\n#include <thrift/lib/cpp2/async/ReconnectingRequestChannel.h>\n#include <thrift/lib/cpp2/async/RetryingRequestChannel.h>\n#include <thrift/lib/cpp2/async/RocketClientChannel.h>\n#include <algorithm>\n#include <chrono>\n#include <iterator>\n#include <thread>\n#include \"eden/common/utils/FSDetect.h\"\n#include \"eden/fs/service/gen-cpp2/StreamingEdenService.h\"\n#include \"watchman/ChildProcess.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/LRUCache.h\"\n#include \"watchman/QueryableView.h\"\n#include \"watchman/ThreadPool.h\"\n#include \"watchman/fs/FSDetect.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/query/GlobTree.h\"\n#include \"watchman/query/Query.h\"\n#include \"watchman/query/QueryContext.h\"\n#include \"watchman/query/eval.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/scm/SCM.h\"\n#include \"watchman/thirdparty/wildmatch/wildmatch.h\"\n#include \"watchman/watcher/Watcher.h\"\n#include \"watchman/watcher/WatcherRegistry.h\"\n\nusing apache::thrift::TApplicationException;\nusing namespace facebook::eden;\nusing folly::AsyncSocket;\nusing std::make_unique;\n\nnamespace {\nusing EdenDtype = facebook::eden::Dtype;\nusing watchman::DType;\n\nDType getDTypeFromEden(EdenDtype dtype) {\n  // TODO: Eden guarantees that dtypes have consistent values on all platforms,\n  // including Windows. If we made Watchman guarantee that too, this could be\n  // replaced with a static_cast.\n\n  switch (dtype) {\n    case EdenDtype::UNKNOWN:\n      return DType::Unknown;\n    case EdenDtype::FIFO:\n      return DType::Fifo;\n    case EdenDtype::CHAR:\n      return DType::Char;\n    case EdenDtype::DIR:\n      return DType::Dir;\n    case EdenDtype::BLOCK:\n      return DType::Block;\n    case EdenDtype::REGULAR:\n      return DType::Regular;\n    case EdenDtype::LINK:\n      return DType::Symlink;\n    case EdenDtype::SOCKET:\n      return DType::Socket;\n    case EdenDtype::WHITEOUT:\n      return DType::Whiteout;\n  }\n  return DType::Unknown;\n}\n\nSyncBehavior getSyncBehavior() {\n  // Use a no-sync behavior as syncToNow will be called if a synchronization is\n  // necessary which will do the proper synchronization.\n  auto sync = SyncBehavior{};\n  sync.syncTimeoutSeconds() = 0;\n  return sync;\n}\n\n} // namespace\n\nnamespace watchman {\nnamespace {\nstruct NameAndDType {\n  std::string name;\n  DType dtype;\n\n  explicit NameAndDType(std::string name, DType dtype = DType::Unknown)\n      : name(std::move(name)), dtype(dtype) {}\n};\n\n/** This is a helper for settling out subscription events.\n * We have a single instance of the callback object that we schedule\n * each time we get an update from the eden server.  If we are already\n * scheduled we will cancel it and reschedule it.\n */\nclass SettleCallback : public folly::HHWheelTimer::Callback {\n public:\n  SettleCallback(folly::EventBase* eventBase, std::shared_ptr<Root> root)\n      : eventBase_(eventBase), root_(std::move(root)) {}\n\n  void timeoutExpired() noexcept override {\n    try {\n      auto settledPayload = json_object({{\"settled\", json_true()}});\n      root_->unilateralResponses->enqueue(std::move(settledPayload));\n    } catch (const std::exception& exc) {\n      log(ERR,\n          \"error while dispatching settle payload; cancel watch: \",\n          exc.what(),\n          \"\\n\");\n      eventBase_->terminateLoopSoon();\n    }\n  }\n\n  void callbackCanceled() noexcept override {\n    // We must override this because the default is to call timeoutExpired().\n    // We don't want that to happen because we're only canceled in the case\n    // where we want to delay the timeoutExpired() callback.\n  }\n\n private:\n  folly::EventBase* eventBase_;\n  std::shared_ptr<Root> root_;\n};\n\n// Resolve the eden socket; On POSIX systems we use the .eden dir that is\n// present in every dir of an eden mount to locate the symlink to the socket.\n// On Windows systems, .eden is only present in the repo root and contains\n// the toml config file with the path to the socket.\nstd::string resolveSocketPath(w_string_piece rootPath) {\n#ifdef _WIN32\n  auto configPath = fmt::format(\"{}/.eden/config\", rootPath);\n  auto config = cpptoml::parse_file(configPath);\n\n  return *config->get_qualified_as<std::string>(\"Config.socket\");\n#else\n  try {\n    auto path = fmt::format(\"{}/.eden/socket\", rootPath);\n    // It is important to resolve the link because the path in the eden mount\n    // may exceed the maximum permitted unix domain socket path length.\n    // This is actually how things our in our integration test environment.\n    return readSymbolicLink(path.c_str()).string();\n  } catch (const std::system_error& e) {\n    // When Eden fails during graceful takeover, the mount can exist, but it\n    // is disconnected. In this case, we can't use the eden watcher. Log this\n    // error and return no address - this will result makeThriftChannel failing\n    // with an AsyncSocketException.\n    log(DBG,\n        fmt::format(\n            \"Failed to read EdenFS root when mount exists: {} .\"\n            \"{} appears to be a disconnected EdenFS mount. \"\n            \"Try running `eden doctor` to bring it back online and \"\n            \"then retry your watch.\",\n            e.what(),\n            rootPath));\n    return std::string();\n  }\n#endif\n}\n\nfolly::SocketAddress getEdenSocketAddress(w_string_piece rootPath) {\n  folly::SocketAddress addr;\n\n  auto socketPath = resolveSocketPath(rootPath);\n  addr.setFromPath(socketPath);\n  return addr;\n}\n\n/** Create a thrift client that will connect to the eden server associated\n * with the current user. */\nstd::unique_ptr<StreamingEdenServiceAsyncClient> getEdenClient(\n    std::shared_ptr<apache::thrift::RequestChannel> channel) {\n  return make_unique<StreamingEdenServiceAsyncClient>(std::move(channel));\n}\n\nclass GetJournalPositionCallback : public folly::HHWheelTimer::Callback {\n public:\n  GetJournalPositionCallback(\n      folly::EventBase* eventBase,\n      std::shared_ptr<apache::thrift::RequestChannel> thriftChannel,\n      std::string mountPoint)\n      : eventBase_{eventBase},\n        thriftChannel_{std::move(thriftChannel)},\n        mountPoint_{std::move(mountPoint)} {}\n\n  void timeoutExpired() noexcept override {\n    try {\n      auto edenClient = getEdenClient(thriftChannel_);\n\n      // Calling getCurrentJournalPosition will allow EdenFS to send new\n      // notification about files changed.\n      JournalPosition journal;\n      edenClient->sync_getCurrentJournalPosition(journal, mountPoint_);\n    } catch (const std::exception& exc) {\n      log(ERR,\n          \"error while getting EdenFS's journal position; cancel watch: \",\n          exc.what(),\n          \"\\n\");\n      eventBase_->terminateLoopSoon();\n    }\n  }\n\n private:\n  folly::EventBase* eventBase_;\n  std::shared_ptr<apache::thrift::RequestChannel> thriftChannel_;\n  std::string mountPoint_;\n};\n\nclass EdenFileResult : public FileResult {\n public:\n  EdenFileResult(\n      const w_string& rootPath,\n      std::shared_ptr<apache::thrift::RequestChannel> thriftChannel,\n      const w_string& fullName,\n      ClockTicks* ticks = nullptr,\n      bool isNew = false,\n      DType dtype = DType::Unknown)\n      : rootPath_(rootPath),\n        thriftChannel_{std::move(thriftChannel)},\n        fullName_(fullName),\n        dtype_(dtype) {\n    otime_.ticks = ctime_.ticks = 0;\n    otime_.timestamp = ctime_.timestamp = 0;\n    if (ticks) {\n      otime_.ticks = *ticks;\n      if (isNew) {\n        // the \"ctime\" in the context of FileResult represents the point\n        // in time that we saw the file transition !exists -> exists.\n        // We don't strictly know the point at which that happened for results\n        // returned from eden, but it will tell us whether that happened in\n        // a given since query window by listing the file in the created files\n        // set.  We set the isNew flag in this case.  The goal here is to\n        // ensure that the code in query/eval.cpp considers us to be new too,\n        // and that works because we set the created time ticks == the last\n        // change tick.  The logic in query/eval.cpp will consider this to\n        // be new because the ctime > lower bound in the since query.\n        // When isNew is not set our ctime tick value is initialized to\n        // zero which always fails that is_new check.\n        ctime_.ticks = otime_.ticks;\n      }\n    }\n  }\n\n  std::optional<FileInformation> stat() override {\n    if (!stat_.has_value()) {\n      accessorNeedsProperties(FileResult::Property::FullFileInformation);\n      return std::nullopt;\n    }\n    return stat_;\n  }\n\n  std::optional<DType> dtype() override {\n    // We're using Unknown as the default value to avoid also wrapping\n    // this value up in an Optional in our internal storage.\n    // In theory this is ambiguous, but in practice Eden will never\n    // return Unknown for dtype values so this is safe to use with\n    // impunity.\n    if (dtype_ != DType::Unknown) {\n      return dtype_;\n    }\n    if (stat_.has_value()) {\n      return stat_->dtype();\n    }\n    accessorNeedsProperties(FileResult::Property::FileDType);\n    return std::nullopt;\n  }\n\n  std::optional<size_t> size() override {\n    if (!stat_.has_value()) {\n      accessorNeedsProperties(FileResult::Property::Size);\n      return std::nullopt;\n    }\n    return stat_->size;\n  }\n\n  std::optional<struct timespec> accessedTime() override {\n    if (!stat_.has_value()) {\n      accessorNeedsProperties(FileResult::Property::StatTimeStamps);\n      return std::nullopt;\n    }\n    return stat_->atime;\n  }\n\n  std::optional<struct timespec> modifiedTime() override {\n    if (!stat_.has_value()) {\n      accessorNeedsProperties(FileResult::Property::StatTimeStamps);\n      return std::nullopt;\n    }\n    return stat_->mtime;\n  }\n\n  std::optional<struct timespec> changedTime() override {\n    if (!stat_.has_value()) {\n      accessorNeedsProperties(FileResult::Property::StatTimeStamps);\n      return std::nullopt;\n    }\n    return stat_->ctime;\n  }\n\n  w_string_piece baseName() override {\n    return fullName_.piece().baseName();\n  }\n\n  w_string_piece dirName() override {\n    return fullName_.piece().dirName();\n  }\n\n  void setExists(bool exists) noexcept {\n    exists_ = exists;\n    if (!exists) {\n      stat_ = FileInformation::makeDeletedFileInformation();\n    }\n  }\n\n  std::optional<bool> exists() override {\n    if (!exists_.has_value()) {\n      accessorNeedsProperties(FileResult::Property::Exists);\n      return std::nullopt;\n    }\n    return exists_;\n  }\n\n  std::optional<ResolvedSymlink> readLink() override {\n    if (symlinkTarget_.has_value()) {\n      return symlinkTarget_;\n    }\n    accessorNeedsProperties(FileResult::Property::SymlinkTarget);\n    return std::nullopt;\n  }\n\n  std::optional<ClockStamp> ctime() override {\n    return ctime_;\n  }\n\n  std::optional<ClockStamp> otime() override {\n    return otime_;\n  }\n\n  std::optional<FileResult::ContentHash> getContentSha1() override {\n    if (!sha1_.has_value()) {\n      accessorNeedsProperties(FileResult::Property::ContentSha1);\n      return std::nullopt;\n    }\n    switch (sha1_->getType()) {\n      // Copy thrift SHA1Result aka (std::string) into\n      // watchman FileResult::ContentHash aka (std::array<uint8_t, 20>)\n      case SHA1Result::Type::sha1: {\n        auto& hash = sha1_->get_sha1();\n        FileResult::ContentHash result;\n        std::copy(hash.begin(), hash.end(), result.begin());\n\n        return result;\n      }\n\n      // Thrift error occured\n      case SHA1Result::Type::error: {\n        auto& err = sha1_->get_error();\n        XCHECK(err.errorCode());\n        throw std::system_error(\n            *err.errorCode(), std::generic_category(), *err.message());\n      }\n\n      // Something is wrong with type union\n      default:\n        throw std::runtime_error(\n            \"Unknown thrift data for EdenFileResult::getContentSha1\");\n    }\n  }\n\n  void batchFetchProperties(\n      const std::vector<std::unique_ptr<FileResult>>& files) override {\n    std::vector<EdenFileResult*> getFileInformationFiles;\n    std::vector<std::string> getFileInformationNames;\n    // If only dtype and exists are needed, Eden has a cheaper API for\n    // retrieving them.\n    bool onlyEntryInfoNeeded = true;\n\n    std::vector<EdenFileResult*> getShaFiles;\n    std::vector<std::string> getShaNames;\n\n    std::vector<EdenFileResult*> getSymlinkFiles;\n\n    for (auto& f : files) {\n      auto& edenFile = dynamic_cast<EdenFileResult&>(*f);\n\n      auto relName = edenFile.fullName_.piece();\n\n      if (rootPath_ == edenFile.fullName_) {\n        // The root tree inode has changed\n        relName = \"\";\n      } else {\n        // Strip off the mount point prefix for the names we're going\n        // to pass to eden.  The +1 is its trailing slash.\n        relName.advance(rootPath_.size() + 1);\n      }\n\n      if (edenFile.neededProperties() & FileResult::Property::SymlinkTarget) {\n        // We need to know if the node is a symlink\n        edenFile.accessorNeedsProperties(FileResult::Property::FileDType);\n\n        getSymlinkFiles.emplace_back(&edenFile);\n      }\n\n      if (edenFile.neededProperties() &\n          (FileResult::Property::FileDType | FileResult::Property::CTime |\n           FileResult::Property::OTime | FileResult::Property::Exists |\n           FileResult::Property::Size | FileResult::Property::StatTimeStamps |\n           FileResult::Property::FullFileInformation)) {\n        getFileInformationFiles.emplace_back(&edenFile);\n        getFileInformationNames.emplace_back(relName.data(), relName.size());\n\n        if (edenFile.neededProperties() &\n            ~(FileResult::Property::FileDType | FileResult::Property::Exists)) {\n          // We could maintain two lists and call both getFileInformation and\n          // getEntryInformation in parallel, but in practice the set of\n          // properties should usually be the same across all files.\n          onlyEntryInfoNeeded = false;\n        }\n      }\n\n      if (edenFile.neededProperties() & FileResult::Property::ContentSha1) {\n        getShaFiles.emplace_back(&edenFile);\n        getShaNames.emplace_back(relName.data(), relName.size());\n      }\n\n      // If we were to throw later in this method, we will have forgotten\n      // the input set of properties, but it is ok: if we do decide to\n      // re-evaluate after throwing, the accessors will set the mask up\n      // accordingly and we'll end up calling back in here if needed.\n      edenFile.clearNeededProperties();\n    }\n\n    auto client = getEdenClient(thriftChannel_);\n    loadFileInformation(\n        client.get(),\n        rootPath_,\n        getFileInformationNames,\n        getFileInformationFiles,\n        onlyEntryInfoNeeded);\n\n    // TODO: add eden bulk readlink call\n    loadSymlinkTargets(client.get(), getSymlinkFiles);\n\n    if (!getShaFiles.empty()) {\n      std::vector<SHA1Result> sha1s;\n      client->sync_getSHA1(\n          sha1s, std::string{rootPath_.view()}, getShaNames, getSyncBehavior());\n\n      if (sha1s.size() != getShaFiles.size()) {\n        log(ERR,\n            \"Requested SHA-1 of \",\n            getShaFiles.size(),\n            \" but Eden returned \",\n            sha1s.size(),\n            \" results -- ignoring\");\n      } else {\n        auto sha1Iter = sha1s.begin();\n        for (auto& edenFile : getShaFiles) {\n          edenFile->sha1_ = *sha1Iter++;\n        }\n      }\n    }\n  }\n\n private:\n  w_string rootPath_;\n  std::shared_ptr<apache::thrift::RequestChannel> thriftChannel_;\n  w_string fullName_;\n  std::optional<FileInformation> stat_;\n  std::optional<bool> exists_;\n  ClockStamp ctime_;\n  ClockStamp otime_;\n  std::optional<SHA1Result> sha1_;\n  std::optional<ResolvedSymlink> symlinkTarget_;\n  DType dtype_{DType::Unknown};\n\n  // Read the symlink targets for each of the provided `files`.  The files\n  // had SymlinkTarget set in neededProperties prior to clearing it in\n  // the batchFetchProperties() method that calls us, so we know that\n  // we unconditionally need to read these links.\n  static void loadSymlinkTargets(\n      StreamingEdenServiceAsyncClient*,\n      const std::vector<EdenFileResult*>& files) {\n    for (auto& edenFile : files) {\n      ResolvedSymlink target = NotSymlink{};\n      // If this file is not a symlink then we immediately yield a \"not a\n      // symlink\" rather than propagating an error. This behavior is relied\n      // upon by the field rendering code and checked in test_symlink.py.\n      if (edenFile->stat_->isSymlink()) {\n        target = readSymbolicLink(edenFile->fullName_.c_str());\n      }\n      edenFile->symlinkTarget_ = target;\n    }\n  }\n\n  static void loadFileInformation(\n      StreamingEdenServiceAsyncClient* client,\n      const w_string& rootPath,\n      const std::vector<std::string>& names,\n      const std::vector<EdenFileResult*>& outFiles,\n      bool onlyEntryInfoNeeded) {\n    w_assert(\n        names.size() == outFiles.size(), \"names.size must == outFiles.size\");\n    if (names.empty()) {\n      return;\n    }\n\n    auto applyResults = [&](const auto& edenInfo) {\n      if (names.size() != edenInfo.size()) {\n        log(ERR,\n            \"Requested file information of \",\n            names.size(),\n            \" files but Eden returned information for \",\n            edenInfo.size(),\n            \" files. Treating missing entries as missing files.\");\n      }\n\n      auto infoIter = edenInfo.begin();\n      for (auto& edenFileResult : outFiles) {\n        if (infoIter == edenInfo.end()) {\n          edenFileResult->setExists(false);\n        } else {\n          edenFileResult->applyInformationOrError(*infoIter);\n          ++infoIter;\n        }\n      }\n    };\n\n    if (onlyEntryInfoNeeded) {\n      std::vector<EntryInformationOrError> info;\n      try {\n        client->sync_getEntryInformation(\n            info, std::string{rootPath.view()}, names, getSyncBehavior());\n        applyResults(info);\n        return;\n      } catch (const TApplicationException& ex) {\n        if (TApplicationException::UNKNOWN_METHOD != ex.getType()) {\n          throw;\n        }\n        // getEntryInformation is not available in this version of\n        // Eden. Fall back to the older, more expensive\n        // getFileInformation below.\n      }\n    }\n\n    std::vector<FileInformationOrError> info;\n    client->sync_getFileInformation(\n        info, std::string{rootPath.view()}, names, getSyncBehavior());\n    applyResults(info);\n  }\n\n  void applyInformationOrError(const EntryInformationOrError& infoOrErr) {\n    if (infoOrErr.getType() == EntryInformationOrError::Type::info) {\n      dtype_ = getDTypeFromEden(*infoOrErr.get_info().dtype());\n      setExists(true);\n    } else {\n      setExists(false);\n    }\n  }\n\n  void applyInformationOrError(const FileInformationOrError& infoOrErr) {\n    if (infoOrErr.getType() == FileInformationOrError::Type::info) {\n      FileInformation stat;\n\n      stat.size = *infoOrErr.get_info().size();\n      stat.mode = *infoOrErr.get_info().mode();\n      stat.mtime.tv_sec = *infoOrErr.get_info().mtime()->seconds();\n      stat.mtime.tv_nsec = *infoOrErr.get_info().mtime()->nanoSeconds();\n\n      stat_ = std::move(stat);\n      setExists(true);\n    } else {\n      setExists(false);\n    }\n  }\n};\n\nstatic std::string escapeGlobSpecialChars(w_string_piece str) {\n  std::string result;\n\n  for (size_t i = 0; i < str.size(); ++i) {\n    auto c = str[i];\n    switch (c) {\n      case '*':\n      case '?':\n      case '[':\n      case ']':\n      case '\\\\':\n        result.append(\"\\\\\");\n        break;\n    }\n    result.append(&c, 1);\n  }\n\n  return result;\n}\n\n/** filter out paths that are ignored or that are not part of the\n * relative_root restriction in a query.\n * Ideally we'd pass this information into eden so that it doesn't\n * have to walk those paths and return the data to us, but for the\n * moment we have to filter it out of the results.\n * We need to respect the ignore_dirs configuration setting and\n * also remove anything that doesn't match the relative_root constraint\n * in the query. */\nvoid filterOutPaths(\n    std::vector<NameAndDType>& files,\n    QueryContext* ctx,\n    const std::string& relative_root = \"\") {\n  files.erase(\n      std::remove_if(\n          files.begin(),\n          files.end(),\n          [ctx, relative_root](const NameAndDType& item) {\n            w_string full;\n            full = w_string::pathCat(\n                {ctx->root->root_path, relative_root, item.name});\n\n            if (!ctx->fileMatchesRelativeRoot(full)) {\n              // Not in the desired area, so filter it out\n              return true;\n            }\n\n            return ctx->root->ignore.isIgnored(full.data(), full.size());\n          }),\n      files.end());\n}\n\nvoid appendGlobResultToNameAndDTypeVec(\n    std::vector<NameAndDType>& results,\n    Glob&& glob) {\n  size_t i = 0;\n  size_t numDTypes = glob.dtypes().value().size();\n\n  results.reserve(results.size() + glob.matchingFiles().value().size());\n  for (auto& name : glob.matchingFiles().value()) {\n    // The server may not support dtypes, so this list may be empty.\n    // This cast is OK because eden returns the system dependent bits to us, and\n    // our DType enum is declared in terms of those bits\n    auto dtype = i < numDTypes ? static_cast<DType>(glob.dtypes().value()[i])\n                               : DType::Unknown;\n    results.emplace_back(std::move(name), dtype);\n    ++i;\n  }\n}\n\n/** Returns the files that match the glob. */\nstd::vector<NameAndDType> globNameAndDType(\n    StreamingEdenServiceAsyncClient* client,\n    const std::string& mountPoint,\n    const std::vector<std::string>& globPatterns,\n    bool includeDotfiles,\n    bool splitGlobPattern = false,\n    bool listOnlyFiles = false,\n    const std::string& relative_root = \"\") {\n  // TODO(xavierd): Once the config: \"eden_split_glob_pattern\" is rolled out\n  // everywhere, remove this code.\n  if (splitGlobPattern && globPatterns.size() > 1) {\n    folly::DrivableExecutor* executor =\n        folly::EventBaseManager::get()->getEventBase();\n\n    std::vector<folly::Future<Glob>> globFutures;\n    globFutures.reserve(globPatterns.size());\n    for (const std::string& globPattern : globPatterns) {\n      GlobParams params;\n      params.mountPoint() = mountPoint;\n      params.globs() = std::vector<std::string>{globPattern};\n      params.includeDotfiles() = includeDotfiles;\n      params.wantDtype() = true;\n      params.listOnlyFiles() = listOnlyFiles;\n      params.sync() = getSyncBehavior();\n      params.searchRoot() = relative_root;\n\n      globFutures.emplace_back(\n          client->semifuture_globFiles(params).via(executor));\n    }\n\n    std::vector<NameAndDType> allResults;\n    for (folly::Future<Glob>& globFuture : globFutures) {\n      appendGlobResultToNameAndDTypeVec(\n          allResults, std::move(globFuture).getVia(executor));\n    }\n    return allResults;\n  } else {\n    GlobParams params;\n    params.mountPoint() = mountPoint;\n    params.globs() = globPatterns;\n    params.includeDotfiles() = includeDotfiles;\n    params.wantDtype() = true;\n    params.listOnlyFiles() = listOnlyFiles;\n    params.sync() = getSyncBehavior();\n    params.searchRoot() = relative_root;\n\n    Glob glob;\n    try {\n      client->sync_globFiles(glob, params);\n    } catch (const apache::thrift::transport::TTransportException& ex) {\n      logf(\n          ERR,\n          \"Thrift exception raised from EdenFS when globbing files: {} (errno {}, type {})\\n\",\n          ex.what(),\n          ex.getErrno(),\n          fmt::underlying(ex.getType()));\n      throw;\n    } catch (const std::exception& ex) {\n      logf(\n          ERR,\n          \"Exception raised from EdenFS when globbing files: {}\\n\",\n          ex.what());\n      throw;\n    }\n    logf(\n        DBG,\n        \"Glob finished. Received {} files.\\n\",\n        glob.matchingFiles()->size());\n    std::vector<NameAndDType> result;\n    appendGlobResultToNameAndDTypeVec(result, std::move(glob));\n    return result;\n  }\n}\n\nnamespace {\n\n/**\n * Construct a pooled Thrift channel that will automatically reconnect to\n * EdenFS on error.\n */\nstd::shared_ptr<apache::thrift::RequestChannel> makeThriftChannel(\n    w_string rootPath,\n    int numRetries) {\n  auto channel = apache::thrift::PooledRequestChannel::newChannel(\n      folly::EventBaseManager::get()->getEventBase(),\n      folly::getUnsafeMutableGlobalIOExecutor(),\n      [numRetries, rootPath = std::move(rootPath)](folly::EventBase& eb) {\n        return apache::thrift::RetryingRequestChannel::newChannel(\n            eb,\n            numRetries,\n            apache::thrift::ReconnectingRequestChannel::newChannel(\n                eb, [rootPath](folly::EventBase& eb) {\n                  auto channel =\n                      apache::thrift::RocketClientChannel::newChannel(\n                          AsyncSocket::newSocket(\n                              &eb, getEdenSocketAddress(rootPath)));\n                  // set maximum timeout to 15 minutes.\n                  channel->setTimeout(900000);\n                  return channel;\n                }));\n      });\n  return channel;\n}\n\n} // namespace\n\nclass EdenView final : public QueryableView {\n public:\n  explicit EdenView(const w_string& root_path, const Configuration& config)\n      : QueryableView{root_path, /*requiresCrawl=*/false},\n        rootPath_(root_path),\n        thriftChannel_(makeThriftChannel(\n            rootPath_,\n            config.getInt(\"eden_retry_connection_count\", 3))),\n        mountPoint_(root_path.string()),\n        splitGlobPattern_(config.getBool(\"eden_split_glob_pattern\", false)),\n        thresholdForFreshInstance_(config.getInt(\n            \"eden_file_count_threshold_for_fresh_instance\",\n            10000)),\n        enableGlobUpperBounds_(\n            config.getBool(\"eden_enable_glob_upper_bounds\", true)) {}\n\n  void timeGenerator(const Query* /*query*/, QueryContext* ctx) const override {\n    ctx->generationStarted();\n    ctx->generatorType = \"eden_time\";\n\n    if (ctx->since.is_timestamp()) {\n      throw QueryExecError(\n          \"timestamp based since queries are not supported with eden\");\n    }\n\n    auto allFilesResult = getAllChangesSince(ctx);\n    auto resultTicks = allFilesResult.ticks;\n    auto& fileInfo = allFilesResult.fileInfo;\n    // We use the list of created files to synthesize the \"new\" field\n    // in the file results\n    auto& createdFileNames = allFilesResult.createdFileNames;\n\n    // Filter out any ignored files\n    filterOutPaths(fileInfo, ctx);\n\n    auto isFreshInstance = ctx->since.is_fresh_instance();\n    for (auto& item : fileInfo) {\n      // a file is considered new if it was present in the created files\n      // set returned from eden.\n      bool isNew = createdFileNames.find(item.name) != createdFileNames.end();\n\n      auto file = make_unique<EdenFileResult>(\n          rootPath_,\n          thriftChannel_,\n          w_string::pathCat({mountPoint_, item.name}),\n          &resultTicks,\n          isNew,\n          item.dtype);\n\n      if (isFreshInstance) {\n        // Fresh instance queries only return data about files\n        // that currently exist, and we know this to be true\n        // here because our list of files comes from evaluating\n        // a glob.\n        file->setExists(true);\n      }\n\n      w_query_process_file(ctx->query, ctx, std::move(file));\n    }\n\n    ctx->bumpNumWalked(fileInfo.size());\n  }\n\n  folly::SemiFuture<folly::Unit> waitForSettle(\n      std::chrono::milliseconds /*settle_period*/) override {\n    // We could implement this feature for EdenFS, but since the\n    // Watchman-EdenFS integration is correct and waitForSettle is a workaround\n    // for broken filesystem notification APIs, do nothing for now.\n    return folly::unit;\n  }\n\n  CookieSync::SyncResult syncToNow(\n      const std::shared_ptr<Root>& root,\n      std::chrono::milliseconds timeout) override {\n    try {\n      return sync(root).get(timeout);\n    } catch (const folly::FutureTimeout& ex) {\n      throw std::system_error(ETIMEDOUT, std::generic_category(), ex.what());\n    }\n    return {};\n  }\n\n  folly::SemiFuture<CookieSync::SyncResult> sync(\n      const std::shared_ptr<Root>&) override {\n    return folly::makeSemiFutureWith([this]() {\n             // Set an unlimited timeout. The caller is responsible for using a\n             // timeout to bound the time spent in this method.\n             facebook::eden::SyncBehavior sync;\n             sync.syncTimeoutSeconds() = -1;\n\n             facebook::eden::SynchronizeWorkingCopyParams params;\n             params.sync() = sync;\n\n             auto client = getEdenClient(thriftChannel_);\n             return client->semifuture_synchronizeWorkingCopy(\n                 mountPoint_, params);\n           })\n        .defer([](folly::Try<folly::Unit> try_) {\n          if (try_.hasException()) {\n            if (auto* exc =\n                    try_.tryGetExceptionObject<TApplicationException>()) {\n              if (exc->getType() == TApplicationException::UNKNOWN_METHOD) {\n                return folly::Try{CookieSync::SyncResult{}};\n              }\n            }\n            return folly::Try<CookieSync::SyncResult>{\n                std::move(try_.exception())};\n          }\n          return folly::Try{CookieSync::SyncResult{}};\n        });\n  }\n\n  void executeGlobBasedQuery(\n      const std::vector<std::string>& globStrings,\n      QueryContext* ctx,\n      bool includeDotfiles,\n      bool includeDir = true,\n      const std::string& relative_root = \"\") const {\n    auto client = getEdenClient(thriftChannel_);\n\n    bool listOnlyFiles = false;\n    if (ctx->query->expr) {\n      listOnlyFiles =\n          ctx->query->expr->listOnlyFiles() == QueryExpr::ReturnOnlyFiles::Yes;\n    }\n    folly::stop_watch<std::chrono::microseconds> timer;\n    auto fileInfo = globNameAndDType(\n        client.get(),\n        mountPoint_,\n        globStrings,\n        includeDotfiles,\n        splitGlobPattern_,\n        listOnlyFiles,\n        relative_root);\n    ctx->edenGlobFilesDurationUs.store(\n        timer.elapsed().count(), std::memory_order_relaxed);\n\n    // Filter out any ignored files\n    filterOutPaths(fileInfo, ctx, relative_root);\n\n    for (auto& item : fileInfo) {\n      auto file = make_unique<EdenFileResult>(\n          rootPath_,\n          thriftChannel_,\n          w_string::pathCat({mountPoint_, relative_root, item.name}),\n          /*ticks=*/nullptr,\n          /*isNew=*/false,\n          item.dtype);\n\n      // The results of a glob are known to exist\n      file->setExists(true);\n\n      // Skip processing directories\n      if (!includeDir && item.dtype == DType::Dir) {\n        continue;\n      }\n\n      w_query_process_file(ctx->query, ctx, std::move(file));\n    }\n\n    ctx->bumpNumWalked(fileInfo.size());\n  }\n\n  // Helper for computing a relative path prefix piece.\n  // The returned piece is owned by the supplied context object!\n  w_string_piece computeRelativePathPiece(QueryContext* ctx) const {\n    w_string_piece rel;\n    if (ctx->query->relative_root) {\n      rel = ctx->query->relative_root->piece();\n      rel.advance(ctx->root->root_path.size() + 1);\n    }\n    return rel;\n  }\n\n  /** Walks files that match the supplied set of paths */\n  void pathGenerator(const Query* query, QueryContext* ctx) const override {\n    ctx->generationStarted();\n    ctx->generatorType = \"eden_path\";\n    // If the query is anchored to a relative_root, use that that\n    // avoid sucking down a massive list of files from eden\n    auto rel = computeRelativePathPiece(ctx);\n\n    std::vector<std::string> globStrings;\n    globStrings.reserve(query->paths->size());\n    // Translate the path list into a list of globs\n    for (auto& path : *query->paths) {\n      if (path.depth > 0) {\n        // We don't have an easy way to express depth constraints\n        // in the existing glob API, so we just punt for the moment.\n        // I believe that this sort of query is quite rare anyway.\n        throw QueryExecError(\n            \"the eden watcher only supports depth 0 or depth -1\");\n      }\n      // -1 depth is infinite which we can translate to a recursive\n      // glob.  0 depth is direct descendant which we can translate\n      // to a simple * wildcard.\n      auto glob = path.depth == -1 ? \"**/*\" : \"*\";\n\n      globStrings.emplace_back(\n          w_string::pathCat({rel, escapeGlobSpecialChars(path.name), glob})\n              .view());\n    }\n    executeGlobBasedQuery(globStrings, ctx, /*includeDotfiles=*/true);\n\n    // We send another round of glob queries to query about the information\n    // about the path themselves since we want to include the paths if they are\n    // files.\n    // TODO(zeyi): replace this with builtin path generator inside EdenFS\n    globStrings.clear();\n    for (auto& path : *query->paths) {\n      globStrings.emplace_back(\n          w_string::pathCat({rel, escapeGlobSpecialChars(path.name)}).view());\n    }\n\n    executeGlobBasedQuery(\n        globStrings, ctx, /*includeDotfiles=*/true, /*includeDir=*/false);\n  }\n\n  void globGenerator(const Query* query, QueryContext* ctx) const override {\n    if (!query->glob_tree) {\n      // If we are called via the codepath in the query evaluator that\n      // just speculatively executes queries then `glob` may not be\n      // present; short-circuit in that case.\n      return;\n    }\n\n    ctx->generationStarted();\n    ctx->generatorType = \"eden_glob\";\n    // If the query is anchored to a relative_root, use that that\n    // avoid sucking down a massive list of files from eden\n    auto rel = computeRelativePathPiece(ctx);\n\n    std::vector<std::string> globStrings;\n    for (auto& glob : query->glob_tree->unparse()) {\n      globStrings.emplace_back(w_string::pathCat({rel, glob}).view());\n    }\n\n    // More glob flags/functionality:\n    auto noescape = bool(query->glob_flags & WM_NOESCAPE);\n    if (noescape) {\n      throw QueryExecError(\n          \"glob_noescape is not supported for the eden watcher\");\n    }\n    bool includeDotfiles = (query->glob_flags & WM_PERIOD) == 0;\n    executeGlobBasedQuery(globStrings, ctx, includeDotfiles);\n  }\n\n  void allFilesGenerator(const Query*, QueryContext* ctx) const override {\n    ctx->generationStarted();\n    ctx->generatorType = \"eden_all_files\";\n    std::string relative_root;\n    std::vector<std::string> globPatterns;\n    bool includeDir = true;\n    if (isSimpleSuffixQuery(ctx)) {\n      globPatterns = getSuffixQueryGlobPatterns(ctx);\n      relative_root = getSuffixQueryRelativeRoot(ctx);\n      includeDir = false;\n    } else {\n      globPatterns = getGlobPatternsForAllFiles(ctx);\n    }\n\n    executeGlobBasedQuery(\n        globPatterns,\n        ctx,\n        /*includeDotfiles=*/true,\n        includeDir,\n        relative_root);\n  }\n\n  ClockPosition getMostRecentRootNumberAndTickValue() const override {\n    auto client = getEdenClient(thriftChannel_);\n    JournalPosition position;\n    client->sync_getCurrentJournalPosition(position, mountPoint_);\n    return ClockPosition(\n        *position.mountGeneration(), *position.sequenceNumber());\n  }\n\n  w_string getCurrentClockString() const override {\n    return getMostRecentRootNumberAndTickValue().toClockString();\n  }\n\n  bool doAnyOfTheseFilesExist(\n      const std::vector<w_string>& /*fileNames*/) const override {\n    return false;\n  }\n\n  void startThreads(const std::shared_ptr<Root>& root) override {\n    auto self = shared_from_this();\n    std::thread thr([self, this, root]() { subscriberThread(root); });\n    thr.detach();\n  }\n\n  void stopThreads(std::string_view /*reason*/) override {\n    subscriberEventBase_.terminateLoopSoon();\n  }\n\n  json_ref getWatcherDebugInfo() const override {\n    return json_null();\n  }\n\n  void clearWatcherDebugInfo() override {}\n\n  using EdenFSSubcription =\n      apache::thrift::ClientBufferedStream<JournalPosition>::Subscription;\n\n  EdenFSSubcription rocketSubscribe(\n      std::shared_ptr<Root> root,\n      SettleCallback& settleCallback,\n      GetJournalPositionCallback& getJournalPositionCallback,\n      std::chrono::milliseconds settleTimeout) {\n    auto client = getEdenClient(thriftChannel_);\n    apache::thrift::ClientBufferedStream<::facebook::eden::JournalPosition>\n        stream;\n    try {\n      stream = client->sync_streamJournalChanged(\n          std::string(root->root_path.data(), root->root_path.size()));\n    } catch (const apache::thrift::TApplicationException& exc) {\n      log(DBG,\n          \"running eden version does not have streamJournalChanged, falling back to subscribeStreamTemporary: \",\n          exc.what(),\n          \"\\n\");\n      stream = client->sync_subscribeStreamTemporary(\n          std::string(root->root_path.data(), root->root_path.size()));\n    }\n    return std::move(stream).subscribeExTry(\n        &subscriberEventBase_,\n        [&settleCallback,\n         &getJournalPositionCallback,\n         this,\n         root,\n         settleTimeout](folly::Try<JournalPosition>&& t) {\n          if (t.hasValue()) {\n            try {\n              log(DBG, \"Got subscription push from eden\\n\");\n              if (settleCallback.isScheduled()) {\n                log(DBG, \"reschedule settle timeout\\n\");\n                settleCallback.cancelTimeout();\n              }\n              subscriberEventBase_.timer().scheduleTimeout(\n                  &settleCallback, settleTimeout);\n\n              // For bursty writes to the working copy, let's limit the\n              // amount of notification that Watchman receives by\n              // scheduling a getCurrentJournalPosition call in the future.\n              //\n              // Thus, we're guarantee to only receive one notification per\n              // settleTimeout/2 and no more, regardless of how much\n              // writing is done in the repository.\n              subscriberEventBase_.timer().scheduleTimeout(\n                  &getJournalPositionCallback, settleTimeout / 2);\n            } catch (const std::exception& exc) {\n              log(ERR,\n                  \"Exception while processing eden subscription: \",\n                  exc.what(),\n                  \": cancel watch\\n\");\n              subscriberEventBase_.terminateLoopSoon();\n            }\n          } else {\n            auto reason = t.hasException() ? folly::exceptionStr(t.exception())\n                                           : \"controlled shutdown\";\n            log(ERR,\n                \"subscription stream ended: \",\n                w_string_piece(reason.data(), reason.size()),\n                \", cancel watch\\n\");\n            // We won't be called again, but we terminate the loop\n            // just to make sure.\n            subscriberEventBase_.terminateLoopSoon();\n          }\n        });\n  }\n\n  // This is the thread that we use to listen to the stream of\n  // changes coming in from the EdenFS server.\n  void subscriberThread(std::shared_ptr<Root> root) noexcept {\n    SCOPE_EXIT {\n      // ensure that the root gets torn down,\n      // otherwise we'd leave it in a broken state.\n      root->cancel(\"eden subscriber thread exiting\");\n    };\n\n    w_set_thread_name(\"edensub \", root->root_path.view());\n    log(DBG, \"Started subscription thread\\n\");\n\n    std::optional<EdenFSSubcription> subscription;\n    SCOPE_EXIT {\n      if (subscription.has_value()) {\n        subscription->cancel();\n        std::move(*subscription).join();\n      }\n    };\n\n    try {\n      // Prepare the callback\n      SettleCallback settleCallback{&subscriberEventBase_, root};\n      GetJournalPositionCallback getJournalPositionCallback{\n          &subscriberEventBase_, thriftChannel_, mountPoint_};\n      // Figure out the correct value for settling\n      std::chrono::milliseconds settleTimeout(root->trigger_settle);\n\n      subscription = rocketSubscribe(\n          root, settleCallback, getJournalPositionCallback, settleTimeout);\n\n      // This will run until the stream ends\n      log(DBG, \"Started subscription thread loop\\n\");\n      subscribeReadyPromise_.setValue();\n      subscriberEventBase_.loop();\n\n    } catch (const std::exception& exc) {\n      log(ERR,\n          \"uncaught exception in subscription thread, cancel watch:\",\n          exc.what(),\n          \"\\n\");\n    }\n  }\n\n  const w_string& getName() const override {\n    static w_string name(\"eden\");\n    return name;\n  }\n\n  folly::SemiFuture<folly::Unit> waitUntilReadyToQuery() override {\n    return subscribeReadyPromise_.getSemiFuture();\n  }\n\n private:\n  /**\n   * Returns glob patterns (relative to the project root) that describe an upper\n   * bound on the result set, for use by queries that would otherwise need to\n   * scan the entire repo.\n   */\n  std::vector<std::string> getGlobPatternsForAllFiles(QueryContext* ctx) const {\n    std::vector<std::string> globPatterns;\n    std::optional<std::vector<std::string>> globUpperBound;\n    if (enableGlobUpperBounds_ && ctx->query->expr) {\n      globUpperBound =\n          ctx->query->expr->computeGlobUpperBound(ctx->root->case_sensitive);\n    }\n    bool didFindUpperBound = globUpperBound.has_value();\n    if (enableGlobUpperBounds_) {\n      if (didFindUpperBound) {\n        log(DBG,\n            \"Found \",\n            globUpperBound->size(),\n            \" glob pattern(s) as upper bound on query.\",\n            \"\\n\");\n      } else {\n        log(DBG, \"Did not find a glob upper bound on query.\", \"\\n\");\n      }\n    }\n    if (!didFindUpperBound) {\n      globUpperBound = std::vector<std::string>{\"**\"};\n    }\n    for (auto& pattern : *globUpperBound) {\n      if (didFindUpperBound) {\n        log(DBG, \"  Glob upper bound pattern: \", pattern, \"\\n\");\n      }\n      std::string globPattern;\n      if (ctx->query->relative_root) {\n        w_string_piece rel(*ctx->query->relative_root);\n        rel.advance(ctx->root->root_path.size() + 1);\n        globPattern.append(rel.data(), rel.size());\n        globPattern.append(\"/\");\n      }\n      globPattern.append(pattern);\n      globPatterns.emplace_back(std::move(globPattern));\n    }\n    return globPatterns;\n  }\n\n  bool isSimpleSuffixQuery(QueryContext* ctx) const {\n    // Checks if this query expression is a simple suffix query.\n    // A simple suffix query is an allof expression that only contains\n    //   1. Type = f\n    //   2. Suffix\n    if (ctx->query->expr) {\n      return ctx->query->expr->evaluateSimpleSuffix() ==\n          SimpleSuffixType::IsSimpleSuffix;\n    }\n    return false;\n  }\n\n  std::vector<std::string> getSuffixQueryGlobPatterns(QueryContext* ctx) const {\n    return ctx->query->expr->getSuffixQueryGlobPatterns();\n  }\n\n  std::string getSuffixQueryRelativeRoot(QueryContext* ctx) const {\n    return computeRelativePathPiece(ctx).string();\n  }\n\n  /**\n   * Returns all the files in the watched directory for a fresh instance.\n   *\n   * In the case where the query specifically ask for an empty file list on a\n   * fresh instance, an empty vector will be returned.\n   */\n  std::vector<NameAndDType> getAllFilesForFreshInstance(\n      QueryContext* ctx) const {\n    if (ctx->query->empty_on_fresh_instance) {\n      // Avoid a full tree walk if we don't need it!\n      return std::vector<NameAndDType>();\n    }\n    std::string relative_root;\n    std::vector<std::string> globPatterns;\n    if (isSimpleSuffixQuery(ctx)) {\n      globPatterns = getSuffixQueryGlobPatterns(ctx);\n      relative_root = getSuffixQueryRelativeRoot(ctx);\n    } else {\n      globPatterns = getGlobPatternsForAllFiles(ctx);\n    }\n\n    auto client = getEdenClient(thriftChannel_);\n    return globNameAndDType(\n        client.get(),\n        mountPoint_,\n        std::move(globPatterns),\n        /*includeDotfiles=*/true,\n        splitGlobPattern_,\n        /*listOnlyFiles=*/false,\n        relative_root);\n  }\n\n  struct GetAllChangesSinceResult {\n    ClockTicks ticks;\n    std::vector<NameAndDType> fileInfo;\n    std::unordered_set<std::string> createdFileNames;\n  };\n\n  /**\n   * Build a GetAllChangesSinceResult for a fresh instance.\n   */\n  GetAllChangesSinceResult makeFreshInstance(QueryContext* ctx) const {\n    GetAllChangesSinceResult result;\n\n    ctx->since.set_fresh_instance();\n    result.ticks = ctx->clockAtStartOfQuery.position().ticks;\n    result.fileInfo = getAllFilesForFreshInstance(ctx);\n\n    return result;\n  }\n\n  GetAllChangesSinceResult getAllChangesSinceStreaming(\n      QueryContext* ctx) const {\n    JournalPosition position;\n    position.mountGeneration() = ctx->clockAtStartOfQuery.position().rootNumber;\n    // dial back to the sequence number from the query\n    position.sequenceNumber() =\n        std::get<QuerySince::Clock>(ctx->since.since).ticks;\n\n    StreamChangesSinceParams params;\n    params.mountPoint() = mountPoint_;\n    params.fromPosition() = position;\n\n    auto client = getEdenClient(thriftChannel_);\n    auto [resultChangesSince, stream] = client->sync_streamChangesSince(params);\n\n    GetAllChangesSinceResult result;\n    result.ticks = *resultChangesSince.toPosition()->sequenceNumber();\n\n    // -1 = removed\n    // 0 = changed\n    // 1 = added\n    std::unordered_map<std::string, int> byFile;\n    std::unordered_map<std::string, EdenDtype> dtypes;\n    bool freshInstance = false;\n\n    std::move(stream).subscribeInline(\n        [&](folly::Try<ChangedFileResult>&& changeTry) mutable {\n          if (changeTry.hasException()) {\n            std::string logMessage = fmt::format(\n                \"Error: {}\",\n                folly::exceptionStr(changeTry.exception()).toStdString());\n            freshInstance = true;\n            log(ERR, logMessage, \"\\n\");\n            ctx->freshInstanceCause = std::move(logMessage);\n            return false;\n          }\n\n          if (!changeTry.hasValue()) {\n            // End of the stream.\n            return false;\n          }\n\n          const auto& change = changeTry.value();\n          auto& name = *change.name();\n\n          // Changes needs to be deduplicated so a file that was added and then\n          // removed is reported as MODIFIED.\n          switch (*change.status()) {\n            case ScmFileStatus::ADDED:\n              byFile[name] += 1;\n              break;\n            case ScmFileStatus::MODIFIED:\n              byFile[name];\n              break;\n            case ScmFileStatus::REMOVED:\n              byFile[name] -= 1;\n              break;\n            case ScmFileStatus::IGNORED:\n              break;\n          }\n\n          auto dtype = *change.dtype();\n          auto [element, inserted] = dtypes.emplace(name, dtype);\n          if (!inserted && element->second != dtype) {\n            // Due to streamChangesSince not providing any ordering guarantee,\n            // Watchman can't tell what DType a file has in the case where it\n            // changed. Thus let's fallback to an UNKNOWN type, and Watchman\n            // will later query the actual DType from EdenFS.\n            element->second = EdenDtype::UNKNOWN;\n          }\n\n          // Engineers usually don't work on a thousands of files, but on an\n          // giant monorepo, the set of files changed in between 2 revisions\n          // can be very large, and continuing down this route would force\n          // Watchman to fetch metadata about a ton of files, causing delay in\n          // answering the query and large amount of network traffic.\n          //\n          // On these monorepos, tools also set the empty_on_fresh_instance\n          // flag, thus we can simply pretend to return a fresh instance and an\n          // empty fileInfo list.\n          if (thresholdForFreshInstance_ != 0 &&\n              byFile.size() > thresholdForFreshInstance_ &&\n              ctx->query->empty_on_fresh_instance) {\n            freshInstance = true;\n            std::string logMessage = fmt::format(\n                \"Change amount {} exceeded threshold {}\",\n                byFile.size(),\n                thresholdForFreshInstance_);\n            log(ERR, logMessage, \"\\n\");\n            ctx->freshInstanceCause = std::move(logMessage);\n            return false;\n          }\n\n          return true;\n        });\n\n    if (freshInstance) {\n      // ctx logging done when setting freshInstance to true\n      result = makeFreshInstance(ctx);\n    } else {\n      for (auto& [name, count] : byFile) {\n        result.fileInfo.emplace_back(name, getDTypeFromEden(dtypes[name]));\n        if (count > 0) {\n          result.createdFileNames.emplace(name);\n        }\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Compute and return all the changes that occurred since the last call.\n   *\n   * On error, or when thresholdForFreshInstance_ is exceeded, the clock will\n   * be modified to indicate a fresh instance and an empty set of files will be\n   * returned.\n   */\n  GetAllChangesSinceResult getAllChangesSince(QueryContext* ctx) const {\n    if (ctx->since.is_fresh_instance()) {\n      // Earlier in the processing flow, we decided that the rootNumber\n      // didn't match the current root which means that eden was restarted.\n      // We need to translate this to a fresh instance result set and\n      // return a list of all possible matching files.\n\n      // Append here since sometimes the since.is_fresh_instance also sets a ctx\n      // msg\n      ctx->freshInstanceCause += \", Since fresh instance in getAllChangesSince\";\n      log(ERR, ctx->freshInstanceCause, \"\\n\");\n      return makeFreshInstance(ctx);\n    }\n    folly::stop_watch<std::chrono::microseconds> timer;\n    SCOPE_EXIT {\n      ctx->edenChangedFilesDurationUs.store(\n          timer.elapsed().count(), std::memory_order_relaxed);\n    };\n\n    try {\n      return getAllChangesSinceStreaming(ctx);\n    } catch (const EdenError& err) {\n      // ERANGE: mountGeneration differs\n      // EDOM: journal was truncated.\n      // For other situations we let the error propagate.\n      XCHECK(err.errorCode());\n      if (*err.errorCode() != ERANGE && *err.errorCode() != EDOM) {\n        throw;\n      }\n      // mountGeneration differs, or journal was truncated,\n      // so treat this as equivalent to a fresh instance result\n      std::string logMessage = fmt::format(\n          \"EdenFS journal truncated or mount generation changed: {}\",\n          err.what());\n      log(ERR, logMessage, \"\\n\");\n      ctx->freshInstanceCause = std::move(logMessage);\n      return makeFreshInstance(ctx);\n    } catch (const SCMError& err) {\n      // Most likely this means a checkout occurred but we encountered\n      // an error trying to get the list of files changed between the two\n      // commits.  Generate a fresh instance result since we were unable\n      // to compute the list of files changed.\n      std::string logMessage = fmt::format(\n          \"SCM error while processing EdenFS journal update: {}\", err.what());\n      log(ERR, logMessage, \"\\n\");\n      ctx->freshInstanceCause = std::move(logMessage);\n      return makeFreshInstance(ctx);\n    }\n  }\n\n  w_string rootPath_;\n  std::shared_ptr<apache::thrift::RequestChannel> thriftChannel_;\n  folly::EventBase subscriberEventBase_;\n  std::string mountPoint_;\n  folly::SharedPromise<folly::Unit> subscribeReadyPromise_;\n  bool splitGlobPattern_;\n  unsigned int thresholdForFreshInstance_;\n  bool enableGlobUpperBounds_;\n};\n\n#ifdef _WIN32\n// Test if EdenFS is stopped for the given path.\nbool isEdenStopped(w_string root) {\n  static const w_string_piece kStar{\"*\"};\n  static const w_string_piece kNonExistencePath{\"EDEN_TEST_NON_EXISTENCE_PATH\"};\n  auto queryRaw = w_string::pathCat({root, kNonExistencePath, kStar});\n  auto query = queryRaw.normalizeSeparators();\n  std::wstring wquery = query.piece().asWideUNC();\n  WIN32_FIND_DATAW ffd;\n\n  auto find = FindFirstFileW(wquery.c_str(), &ffd);\n  SCOPE_EXIT {\n    if (find != INVALID_HANDLE_VALUE) {\n      FindClose(find);\n    }\n  };\n\n  auto lastError = GetLastError();\n\n  // When EdenFS is not running, `FindFirstFile` will fail with this error\n  // since it can't reach EdenFS to query directory information.\n  if (find == INVALID_HANDLE_VALUE &&\n      lastError == ERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE) {\n    log(DBG, \"edenfs is NOT RUNNING\\n\");\n    return true;\n  }\n\n  log(DBG, \"edenfs is RUNNING\\n\");\n  return false;\n}\n\nbool isProjfs(const w_string& path) {\n  try {\n    auto fd =\n        openFileHandle(path.c_str(), OpenFileHandleOptions::queryFileInfo());\n    return fd.getReparseTag() == IO_REPARSE_TAG_PROJFS;\n  } catch (const std::exception&) {\n    return false;\n  }\n}\n\nstd::optional<w_string> findEdenFSRoot(w_string_piece root_path) {\n  w_string path = root_path.asWString();\n  std::optional<w_string> result;\n  while (true) {\n    if (isProjfs(path)) {\n      result = path;\n    } else {\n      break;\n    }\n\n    auto next = path.dirName();\n    if (next == path) {\n      return \"\";\n    }\n\n    path = next;\n  }\n\n  return result;\n}\n#endif\n\nstd::shared_ptr<QueryableView> detectEden(\n    const w_string& root_path,\n    const w_string& fstype,\n    const Configuration& config) {\n#ifdef _WIN32\n  (void)fstype;\n  auto maybeEdenRoot = findEdenFSRoot(root_path);\n  if (!maybeEdenRoot) {\n    throw std::runtime_error(fmt::format(\"Not an Eden clone: {}\", root_path));\n  }\n  auto edenRoot = *maybeEdenRoot;\n  log(DBG, \"detected eden root: \", edenRoot, \"\\n\");\n\n  if (isEdenStopped(root_path)) {\n    throw TerminalWatcherError(\n        fmt::format(\n            \"{} appears to be an offline EdenFS mount. \"\n            \"Try running `edenfsctl start` to bring it back online and \"\n            \"then retry your watch\",\n            root_path));\n  }\n\n#else\n  if (!facebook::eden::is_edenfs_fs_type(fstype.string()) && fstype != \"fuse\" &&\n      fstype != \"osxfuse_eden\" && fstype != \"macfuse_eden\" &&\n      fstype != \"edenfs_eden\" && fstype != \"fuse.edenfs\") {\n    // Not an active EdenFS mount.  Perhaps it isn't mounted yet?\n    auto readme = fmt::format(\"{}/README_EDEN.txt\", root_path);\n    try {\n      (void)getFileInformation(readme.c_str());\n    } catch (const std::exception&) {\n      // We don't really care if the readme doesn't exist or is inaccessible,\n      // we just wanted to do a best effort check for the readme file.\n      // If we can't access it, we're still not in a position to treat\n      // this as an EdenFS mount so record the issue and allow falling\n      // back to one of the other watchers.\n      throw std::runtime_error(\n          fmt::format(\"{} is not a FUSE file system\", fstype));\n    }\n\n    // If we get here, then the readme file/symlink exists.\n    // If the readme exists then this is an offline eden mount.\n    // We can't watch it using this watcher in its current state,\n    // and we don't want to allow falling back to inotify as that\n    // will be horribly slow.\n    throw TerminalWatcherError(\n        fmt::format(\n            \"{} appears to be an offline EdenFS mount. \"\n            \"Try running `eden doctor` to bring it back online and \"\n            \"then retry your watch\",\n            root_path));\n  }\n\n  // Given that the readlink() succeeded, assume this is an Eden mount.\n  w_string edenRoot;\n  try {\n    edenRoot =\n        readSymbolicLink(fmt::format(\"{}/.eden/root\", root_path).c_str());\n  } catch (const std::system_error& e) {\n    // When Eden fails during graceful takeover, the mount can exist, but it\n    // is disconnected. In this case, we can't use the eden watcher. Log this\n    // error and throw.\n    log(DBG, \"Failed to read EdenFS root when mount exists: \", e.what());\n    RootNotConnectedError::throwf(\n        \"{} appears to be a disconnected EdenFS mount. \"\n        \"Try running `eden doctor` to bring it back online and \"\n        \"then retry your watch\",\n        root_path);\n  }\n\n#endif\n  if (edenRoot != root_path) {\n    // We aren't at the root of the eden mount.\n    // Throw a TerminalWatcherError to indicate that the Eden watcher is the\n    // correct watcher type for this directory (so don't try other watcher\n    // types), but that it can't be used due to an error.\n    throw TerminalWatcherError(\n        fmt::format(\n            \"you may only watch from the root of an eden mount point. \"\n            \"Try again using {}\",\n            edenRoot));\n  }\n\n  try {\n    return std::make_shared<EdenView>(root_path, config);\n  } catch (const std::exception& exc) {\n    throw TerminalWatcherError(\n        fmt::format(\n            \"Failed to initialize eden watcher, and since this is an Eden \"\n            \"repo, will not allow falling back to another watcher.  Error was: {}\",\n            exc.what()));\n  }\n}\n\n} // namespace\n\nstatic WatcherRegistry\n    reg(\"eden\", detectEden, 100 /* prefer eden above others */);\n} // namespace watchman\n"
  },
  {
    "path": "watchman/watcher/fsevents.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/watchman_cmd.h\" // @donotremove\n\n#if HAVE_FSEVENTS\n\n#include <folly/String.h>\n#include <folly/Synchronized.h>\n#include <condition_variable>\n#include <iterator>\n#include <mutex>\n\n#include \"watchman/Client.h\"\n#include \"watchman/FlagMap.h\"\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/LogConfig.h\"\n#include \"watchman/fs/Pipe.h\"\n#include \"watchman/watcher/WatcherRegistry.h\"\n\n#include \"watchman/watcher/fsevents.h\"\n\n#include <vector>\n\n#include \"watchman/root/Root.h\"\n#include \"watchman/telemetry/LogEvent.h\"\n#include \"watchman/telemetry/WatchmanStructuredLogger.h\"\n\nnamespace watchman {\n\nnamespace {\n\n// The FSEventStreamSetExclusionPaths API has a limit of 8 items.\n// If that limit is exceeded, it will fail.\nconstexpr inline size_t kMaxExclusions = 8;\n\nstruct CFDeleter {\n  void operator()(CFTypeRef ref) {\n    CFRelease(ref);\n  }\n};\n\ntemplate <typename T>\nusing unique_ref = std::unique_ptr<std::remove_pointer_t<T>, CFDeleter>;\n\n} // namespace\n\nstruct FSEventsStream {\n  FSEventStreamRef stream{nullptr};\n  std::shared_ptr<Root> root;\n  FSEventsWatcher* watcher;\n  FSEventStreamEventId last_good{0};\n  FSEventStreamEventId since{0};\n  bool lost_sync{false};\n  bool inject_drop{false};\n  bool event_id_wrapped{false};\n  unique_ref<CFUUIDRef> uuid;\n\n  FSEventsStream(\n      const std::shared_ptr<Root>& root,\n      FSEventsWatcher* watcher,\n      FSEventStreamEventId since)\n      : root{root}, watcher{watcher}, since{since} {}\n  ~FSEventsStream();\n};\n\nFSEventsStream::~FSEventsStream() {\n  if (stream) {\n    FSEventStreamStop(stream);\n    FSEventStreamInvalidate(stream);\n    FSEventStreamRelease(stream);\n  }\n}\n\nstatic const flag_map kflags[] = {\n    {kFSEventStreamEventFlagMustScanSubDirs, \"MustScanSubDirs\"},\n    {kFSEventStreamEventFlagUserDropped, \"UserDropped\"},\n    {kFSEventStreamEventFlagKernelDropped, \"KernelDropped\"},\n    {kFSEventStreamEventFlagEventIdsWrapped, \"EventIdsWrapped\"},\n    {kFSEventStreamEventFlagHistoryDone, \"HistoryDone\"},\n    {kFSEventStreamEventFlagRootChanged, \"RootChanged\"},\n    {kFSEventStreamEventFlagMount, \"Mount\"},\n    {kFSEventStreamEventFlagUnmount, \"Unmount\"},\n    {kFSEventStreamEventFlagItemCreated, \"ItemCreated\"},\n    {kFSEventStreamEventFlagItemRemoved, \"ItemRemoved\"},\n    {kFSEventStreamEventFlagItemInodeMetaMod, \"InodeMetaMod\"},\n    {kFSEventStreamEventFlagItemRenamed, \"ItemRenamed\"},\n    {kFSEventStreamEventFlagItemModified, \"ItemModified\"},\n    {kFSEventStreamEventFlagItemFinderInfoMod, \"FinderInfoMod\"},\n    {kFSEventStreamEventFlagItemChangeOwner, \"ItemChangeOwner\"},\n    {kFSEventStreamEventFlagItemXattrMod, \"ItemXattrMod\"},\n    {kFSEventStreamEventFlagItemIsFile, \"ItemIsFile\"},\n    {kFSEventStreamEventFlagItemIsDir, \"ItemIsDir\"},\n    {kFSEventStreamEventFlagItemIsSymlink, \"ItemIsSymlink\"},\n    {0, nullptr},\n};\n\nstruct FSEventsLogEntry {\n  // 60 should cover many filenames.\n  static constexpr size_t kNameLength = 60;\n\n  FSEventsLogEntry() = default;\n\n  explicit FSEventsLogEntry(uint32_t flags, const char* name) noexcept {\n    this->flags = flags;\n    auto piece = w_string_piece{name}; // Evaluate strlen here.\n    storeTruncatedTail(this->name, piece);\n  }\n\n  json_ref asJsonValue() {\n    size_t length = strnlen(name, kNameLength);\n    auto namePiece = w_string_piece{name, length};\n\n    return json_object({\n        {\"flags\", json_integer(flags)},\n        {\"name\", typed_string_to_json(namePiece.asWString())},\n    });\n  }\n\n  uint32_t flags;\n  char name[kNameLength];\n};\nstatic_assert(64 == sizeof(FSEventsLogEntry));\n\nstd::shared_ptr<FSEventsWatcher> watcherFromRoot(\n    const std::shared_ptr<Root>& root) {\n  auto view = std::dynamic_pointer_cast<watchman::InMemoryView>(root->view());\n  if (!view) {\n    return nullptr;\n  }\n\n  return std::dynamic_pointer_cast<FSEventsWatcher>(view->getWatcher());\n}\n\n/** Generate a perf event for the drop */\nstatic void log_drop_event(const std::shared_ptr<Root>& root, bool isKernel) {\n  auto root_metadata = root->getRootMetadata();\n  Dropped dropped;\n  dropped.root = root_metadata.root_path.string();\n  dropped.recrawl = root_metadata.recrawl_count;\n  dropped.case_sensitive = root_metadata.case_sensitive;\n  dropped.watcher = root_metadata.watcher.string();\n  dropped.isKernel = isKernel;\n  getLogger()->logEvent(dropped);\n\n  PerfSample sample(isKernel ? \"KernelDropped\" : \"UserDropped\");\n  sample.add_root_metadata(root_metadata);\n  sample.finish();\n  sample.force_log();\n  sample.log();\n}\n\nvoid FSEventsWatcher::fse_callback(\n    ConstFSEventStreamRef,\n    void* clientCallBackInfo,\n    size_t numEvents,\n    void* eventPaths,\n    const FSEventStreamEventFlags eventFlags[],\n    const FSEventStreamEventId eventIds[]) {\n  size_t i;\n  auto paths = reinterpret_cast<char**>(eventPaths);\n  auto stream = reinterpret_cast<FSEventsStream*>(clientCallBackInfo);\n  auto root = stream->root;\n  std::vector<watchman_fsevent> items;\n  auto watcher = stream->watcher;\n\n  stream->watcher->totalEventsSeen_.fetch_add(\n      numEvents, std::memory_order_relaxed);\n  if (stream->watcher->ringBuffer_) {\n    for (i = 0; i < numEvents; i++) {\n      uint32_t flags = eventFlags[i];\n      const char* path = paths[i];\n      stream->watcher->ringBuffer_->write(FSEventsLogEntry{flags, path});\n    }\n  }\n\n  if (!stream->lost_sync) {\n    // This is to facilitate testing via debug-fsevents-inject-drop.\n    if (stream->inject_drop) {\n      stream->lost_sync = true;\n      log_drop_event(root, false);\n      goto do_resync;\n    }\n\n    // Pre-scan to test whether we lost sync.  The intent is to be able to skip\n    // processing the events from the point at which we lost sync, so we have\n    // to check this before we start allocating events for the consumer.\n    for (i = 0; i < numEvents; i++) {\n      if ((eventFlags[i] &\n           (kFSEventStreamEventFlagUserDropped |\n            kFSEventStreamEventFlagKernelDropped)) != 0) {\n        // We don't ever need to clear lost_sync as the code below will either\n        // set up a new stream instance with it cleared, or will recrawl and\n        // set up a whole new state for the recrawled instance.\n        stream->lost_sync = true;\n\n        log_drop_event(\n            root, eventFlags[i] & kFSEventStreamEventFlagKernelDropped);\n\n        if (watcher->attemptResyncOnDrop_) {\n        // fseventsd has a reliable journal so we can attempt to resync.\n        do_resync:\n          if (stream->event_id_wrapped) {\n            logf(\n                ERR,\n                \"fsevents lost sync and the event_ids wrapped, so \"\n                \"we have no choice but to do a full recrawl\\n\");\n            // Allow the Dropped event to propagate and trigger a recrawl\n            goto propagate;\n          }\n\n          if (watcher->stream_.get() == stream) {\n            // We are the active stream for this watch which means that it\n            // is safe for us to proceed with changing watcher->stream.\n            // Attempt to set up a new stream to resync from the last-good\n            // event.  If successful, that will replace the current stream.\n            // If we fail, then we allow the UserDropped event to propagate\n            // to the consumer thread which has existing logic to schedule\n            // a recrawl.\n            std::optional<w_string> failure_reason;\n            auto replacement = fse_stream_make(\n                root, watcher, stream->last_good, failure_reason);\n\n            if (!replacement) {\n              logf(\n                  ERR,\n                  \"Failed to rebuild fsevent stream ({}) while trying to \"\n                  \"resync, falling back to a regular recrawl\\n\",\n                  failure_reason ? *failure_reason : w_string{});\n              // Allow the UserDropped event to propagate and trigger a recrawl\n              goto propagate;\n            }\n\n            if (!FSEventStreamStart(replacement->stream)) {\n              logf(\n                  ERR,\n                  \"FSEventStreamStart failed while trying to \"\n                  \"resync, falling back to a regular recrawl\\n\");\n              // Allow the UserDropped event to propagate and trigger a recrawl\n              goto propagate;\n            }\n\n            logf(\n                ERR,\n                \"Lost sync, so resync from last_good event {}\\n\",\n                stream->last_good);\n\n            // mark the replacement as the winner\n            std::swap(watcher->stream_, replacement);\n\n            // And we're done.\n            return;\n          }\n        }\n        break;\n      }\n    }\n  } else if (watcher->attemptResyncOnDrop_) {\n    // This stream has already lost sync and our policy is to resync\n    // for ourselves.  This is most likely a spurious callback triggered\n    // after we'd taken action above.  We just ignore further events\n    // on this particular stream and let the other stuff kick in.\n    return;\n  }\n\npropagate:\n\n  items.reserve(numEvents);\n  for (i = 0; i < numEvents; i++) {\n    const char* path = paths[i];\n\n    if (eventFlags[i] & kFSEventStreamEventFlagHistoryDone) {\n      // The docs say to ignore this event; it's just a marker informing\n      // us that a resync completed.  Take this opportunity to log how\n      // many events were replayed to catch up.\n      logf(\n          ERR,\n          \"Historical resync completed at event id {} (caught \"\n          \"up on {} events)\\n\",\n          eventIds[i],\n          eventIds[i] - stream->since);\n      continue;\n    }\n\n    if (eventFlags[i] & kFSEventStreamEventFlagEventIdsWrapped) {\n      stream->event_id_wrapped = true;\n    }\n\n    uint32_t len = strlen(path);\n    while (path[len - 1] == '/') {\n      len--;\n    }\n\n    if (root->ignore.isIgnored(path, len)) {\n      continue;\n    }\n\n    items.emplace_back(w_string(path, len), eventFlags[i]);\n    if (!stream->lost_sync) {\n      stream->last_good = eventIds[i];\n    }\n  }\n\n  if (!items.empty()) {\n    auto wlock = watcher->items_.lock();\n    wlock->items.push_back(std::move(items));\n    watcher->fseCond_.notify_one();\n  }\n}\n\nstatic void fse_pipe_callback(CFFileDescriptorRef, CFOptionFlags, void*) {\n  logf(DBG, \"pipe signalled\\n\");\n  CFRunLoopStop(CFRunLoopGetCurrent());\n}\n\nstd::unique_ptr<FSEventsStream> FSEventsWatcher::fse_stream_make(\n    const std::shared_ptr<Root>& root,\n    FSEventsWatcher* watcher,\n    FSEventStreamEventId since,\n    std::optional<w_string>& failure_reason) {\n  auto ctx = FSEventStreamContext();\n  unique_ref<CFMutableArrayRef> parray;\n  unique_ref<CFStringRef> cpath;\n  double latency;\n  FSEventStreamCreateFlags flags;\n  w_string path;\n\n  auto fse_stream = std::make_unique<FSEventsStream>(root, watcher, since);\n\n  // Each device has an optional journal maintained by fseventsd that keeps\n  // track of the change events.  The journal may not be available if the\n  // filesystem was mounted read-only.  The journal has an associated UUID\n  // to track the version of the data.  In some cases the journal can become\n  // invalidated and it will have a new UUID generated.  This can happen\n  // if the EventId rolls over.\n  // We need to lookup up the UUID for the associated path and use that to\n  // help decide whether we can use a value of `since` other than SinceNow.\n  struct stat st;\n  if (stat(root->root_path.c_str(), &st)) {\n    failure_reason = w_string::build(\n        \"failed to stat(\",\n        root->root_path,\n        \"): \",\n        folly::errnoStr(errno),\n        \"\\n\");\n    return nullptr;\n  }\n\n  // Obtain the UUID for the device associated with the root\n  fse_stream->uuid =\n      unique_ref<CFUUIDRef>{FSEventsCopyUUIDForDevice(st.st_dev)};\n  if (since != kFSEventStreamEventIdSinceNow) {\n    CFUUIDBytes a, b;\n\n    if (!fse_stream->uuid) {\n      // If there is no UUID available and we want to use an event offset,\n      // we fail: a nullptr UUID means that the journal is not available.\n      failure_reason = w_string::build(\n          \"fsevents journal is not available for dev_t=\", st.st_dev, \"\\n\");\n      return nullptr;\n    }\n    // Compare the UUID with that of the current stream\n    if (!watcher->stream_->uuid) {\n      failure_reason = w_string(\n          \"fsevents journal was not available for prior stream\",\n          W_STRING_UNICODE);\n      return nullptr;\n    }\n\n    a = CFUUIDGetUUIDBytes(fse_stream->uuid.get());\n    b = CFUUIDGetUUIDBytes(watcher->stream_->uuid.get());\n\n    if (memcmp(&a, &b, sizeof(a)) != 0) {\n      failure_reason =\n          w_string(\"fsevents journal UUID is different\", W_STRING_UNICODE);\n      return nullptr;\n    }\n  }\n\n  ctx.info = fse_stream.get();\n\n  parray.reset(CFArrayCreateMutable(nullptr, 0, &kCFTypeArrayCallBacks));\n  if (!parray) {\n    failure_reason = w_string(\"CFArrayCreateMutable failed\", W_STRING_UNICODE);\n    return nullptr;\n  }\n\n  if (auto subdir = watcher->subdir) {\n    path = *subdir;\n  } else {\n    path = root->root_path;\n  }\n\n  cpath.reset(CFStringCreateWithBytes(\n      nullptr,\n      (const UInt8*)path.data(),\n      path.size(),\n      kCFStringEncodingUTF8,\n      false));\n  if (!cpath) {\n    failure_reason =\n        w_string(\"CFStringCreateWithBytes failed\", W_STRING_UNICODE);\n    return nullptr;\n  }\n\n  CFArrayAppendValue(parray.get(), cpath.get());\n\n  latency = root->config.getDouble(\"fsevents_latency\", 0.01),\n  logf(\n      DBG,\n      \"FSEventStreamCreate for path {} with latency {} seconds\\n\",\n      path,\n      latency);\n\n  flags = kFSEventStreamCreateFlagNoDefer | kFSEventStreamCreateFlagWatchRoot;\n  if (watcher->hasFileWatching_) {\n    flags |= kFSEventStreamCreateFlagFileEvents;\n  }\n  fse_stream->stream = FSEventStreamCreate(\n      nullptr, fse_callback, &ctx, parray.get(), since, latency, flags);\n\n  if (!fse_stream->stream) {\n    failure_reason = w_string(\"FSEventStreamCreate failed\", W_STRING_UNICODE);\n    return nullptr;\n  }\n\n  FSEventStreamScheduleWithRunLoop(\n      fse_stream->stream, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);\n\n  if (root->config.getBool(\"_use_fsevents_exclusions\", true)) {\n    auto& dirs_vec = root->ignore.getIgnoredDirs();\n\n    size_t nitems = std::min(dirs_vec.size(), kMaxExclusions);\n    size_t appended = 0;\n\n    unique_ref<CFMutableArrayRef> ignarray{\n        CFArrayCreateMutable(nullptr, 0, &kCFTypeArrayCallBacks)};\n    if (!ignarray) {\n      failure_reason =\n          w_string(\"CFArrayCreateMutable failed\", W_STRING_UNICODE);\n      return nullptr;\n    }\n\n    for (const auto& path : dirs_vec) {\n      if (const auto& subdir = watcher->subdir) {\n        if (!path.piece().startsWith(*subdir)) {\n          continue;\n        }\n        logf(DBG, \"Adding exclusion: {} for subdir: {}\\n\", path, *subdir);\n      }\n\n      unique_ref<CFStringRef> ignpath{CFStringCreateWithBytes(\n          nullptr,\n          (const UInt8*)path.data(),\n          path.size(),\n          kCFStringEncodingUTF8,\n          false)};\n\n      if (!ignpath) {\n        failure_reason =\n            w_string(\"CFStringCreateWithBytes failed\", W_STRING_UNICODE);\n        return nullptr;\n      }\n\n      CFArrayAppendValue(ignarray.get(), ignpath.get());\n\n      appended++;\n      if (appended == nitems) {\n        break;\n      }\n    }\n\n    if (appended != 0) {\n      if (!FSEventStreamSetExclusionPaths(fse_stream->stream, ignarray.get())) {\n        failure_reason =\n            w_string(\"FSEventStreamSetExclusionPaths failed\", W_STRING_UNICODE);\n        return nullptr;\n      }\n    }\n  }\n\n  return fse_stream;\n}\n\nvoid FSEventsWatcher::FSEventsThread(const std::shared_ptr<Root>& root) {\n  unique_ref<CFFileDescriptorRef> fdref;\n  auto fdctx = CFFileDescriptorContext();\n\n  w_set_thread_name(\"fsevents \", root->root_path.view());\n\n  {\n    // Block until fsevents_root_start is waiting for our initialization\n    auto wlock = items_.lock();\n\n    fdctx.info = root.get();\n\n    fdref.reset(CFFileDescriptorCreate(\n        nullptr, fsePipe_.read.fd(), true, fse_pipe_callback, &fdctx));\n    CFFileDescriptorEnableCallBacks(fdref.get(), kCFFileDescriptorReadCallBack);\n    {\n      unique_ref<CFRunLoopSourceRef> fdsrc{\n          CFFileDescriptorCreateRunLoopSource(nullptr, fdref.get(), 0)};\n      if (!fdsrc) {\n        root->failure_reason = w_string(\n            \"CFFileDescriptorCreateRunLoopSource failed\", W_STRING_UNICODE);\n        logf(ERR, \"fse_thread failed: CFFileDescriptorCreateRunLoopSource\");\n        return;\n      }\n      CFRunLoopAddSource(\n          CFRunLoopGetCurrent(), fdsrc.get(), kCFRunLoopDefaultMode);\n    }\n\n    stream_ = fse_stream_make(\n        root, this, kFSEventStreamEventIdSinceNow, root->failure_reason);\n    if (!stream_) {\n      logf(ERR, \"fse_thread failed: fse_stream_make\");\n      return;\n    }\n\n    if (!FSEventStreamStart(stream_->stream)) {\n      root->failure_reason = w_string::build(\n          \"FSEventStreamStart failed, look at your log file \",\n          logging::log_name,\n          \" for lines mentioning FSEvents and see \",\n          cfg_get_trouble_url(),\n          \"#fsevents for more information\\n\");\n      logf(ERR, \"fse_thread failed: FSEventStreamStart\");\n      return;\n    }\n\n    // Signal to fsevents_root_start that we're done initializing\n    fseCond_.notify_one();\n  }\n\n  // Process the events stream until we get signalled to quit\n  CFRunLoopRun();\n\n  logf(DBG, \"fse_thread done\\n\");\n}\n\nFSEventsWatcher::FSEventsWatcher(\n    bool hasFileWatching,\n    const Configuration& config,\n    std::optional<w_string> dir)\n    : Watcher(\n          hasFileWatching ? \"fsevents\" : \"dirfsevents\",\n          hasFileWatching ? WATCHER_HAS_PER_FILE_NOTIFICATIONS : 0),\n      attemptResyncOnDrop_{config.getBool(\"fsevents_try_resync\", false)},\n      hasFileWatching_{hasFileWatching},\n      enableStreamFlush_{config.getBool(\"fsevents_enable_stream_flush\", true)},\n      subdir{std::move(dir)} {\n  // TODO: Add ring buffer logging for events in the shared kqueue+fsevents\n  // logger.\n}\n\nFSEventsWatcher::FSEventsWatcher(\n    const w_string& /*root_path*/,\n    const Configuration& config,\n    std::optional<w_string> dir)\n    : FSEventsWatcher(\n          config.getBool(\"fsevents_watch_files\", true),\n          config,\n          dir) {\n  json_int_t fsevents_ring_log_size =\n      config.getInt(\"fsevents_ring_log_size\", 0);\n  if (fsevents_ring_log_size) {\n    ringBuffer_ =\n        std::make_unique<RingBuffer<FSEventsLogEntry>>(fsevents_ring_log_size);\n  }\n}\n\nFSEventsWatcher::~FSEventsWatcher() = default;\n\nbool FSEventsWatcher::start(const std::shared_ptr<Root>& root) {\n  // Spin up the fsevents processing thread; it owns a ref on the root\n\n  auto self = std::dynamic_pointer_cast<FSEventsWatcher>(shared_from_this());\n  try {\n    // Acquire the mutex so thread initialization waits until we release it\n    auto wlock = items_.lock();\n\n    std::thread thread([self, root]() {\n      try {\n        self->FSEventsThread(root);\n      } catch (const std::exception& e) {\n        watchman::log(watchman::ERR, \"uncaught exception: \", e.what());\n        if (!self->subdir) {\n          root->cancel(fmt::format(\"FSEventsThread failed: {}\", e.what()));\n        }\n      }\n\n      // Ensure that we signal the condition variable before we\n      // finish this thread.  That ensures that don't get stuck\n      // waiting in FSEventsWatcher::start if something unexpected happens.\n      self->fseCond_.notify_one();\n    });\n    // We have to detach because the readChangesThread may wind up\n    // being the last thread to reference the watcher state and\n    // cannot join itself.\n    thread.detach();\n\n    // Allow thread init to proceed; wait for its signal\n    fseCond_.wait(wlock.as_lock());\n\n    if (root->failure_reason) {\n      logf(ERR, \"failed to start fsevents thread: {}\\n\", *root->failure_reason);\n      return false;\n    }\n\n    return true;\n  } catch (const std::exception& e) {\n    watchman::log(\n        watchman::ERR, \"failed to start fsevents thread: \", e.what(), \"\\n\");\n    return false;\n  }\n}\n\nfolly::SemiFuture<folly::Unit> FSEventsWatcher::flushPendingEvents() {\n  if (!enableStreamFlush_) {\n    return folly::SemiFuture<folly::Unit>::makeEmpty();\n  }\n\n  auto [p, f] = folly::makePromiseContract<folly::Unit>();\n\n  /*\n   * Here is our understanding of the FSEvents data flow as of June 2021:\n   *\n   * /dev/fsevents is the interface from the kernel to userspace where change\n   * events are made available.\n   *\n   * fseventsd reads /dev/fsevents and builds an internal queue/tree that it\n   * publishes to anyone using FSEvents. FSEvents holds onto that information\n   * for a bit (with the configurable delay), coalesces when it can, and then\n   * calls your callback. Importantly, while /dev/fsevents is presumed to\n   * provide some sort of sequencing, fseventsd does not offer sequencing\n   * guarantees to your callback.\n   *\n   * All FSEventStreamFlushSync is documented to do is flush any pending events\n   * inside FSEvents/fseventsd. It will call your callback repeatedly until no\n   * more events remain. It does not guarantee /dev/fsevents has been fully\n   * drained.\n   *\n   * Indeed, FSEventFlushStream alone is not sufficient. A prior attempt to\n   * avoid cookie synchronization entirely on macOS did not work.\n   *\n   * My assumption here is that /dev/fsevents is ordered, and so if we've\n   * observed a cookie _at all_ in FSEvents, FSEvents has observed every event\n   * prior to the cookie. But that does not mean all of those events have been\n   * reported to watchman's fse_callback function.\n   *\n   * Calling FSEventStreamFlushSync after the cookie and then waiting for all\n   * queued items to be processed by InMemoryView ensures the InMemoryView is up\n   * to date at least with all changes made prior to the cookie being created.\n   */\n\n  // Ensure all events queued by FSEvents are pushed into wlock->items.\n  FSEventStreamFlushSync(stream_->stream);\n\n  // Now return a Future that is fulfilled when all of the items have been\n  // processed by InMemoryView.\n  auto wlock = items_.lock();\n  wlock->syncs.push_back(std::move(p));\n  fseCond_.notify_one();\n  return std::move(f);\n}\n\nbool FSEventsWatcher::waitNotify(int timeoutms) {\n  auto wlock = items_.lock();\n  // First check to see if someone added elements to these lists while the lock\n  // wasn't held.\n  if (!wlock->items.empty() || !wlock->syncs.empty()) {\n    // Yes, let's not wait on the condition.\n    return true;\n  }\n  fseCond_.wait_for(wlock.as_lock(), std::chrono::milliseconds(timeoutms));\n  return !wlock->items.empty() || !wlock->syncs.empty();\n}\n\nnamespace {\nbool isRootRemoved(\n    const w_string& path,\n    const w_string& root_path,\n    const std::optional<w_string>& subdir) {\n  if (subdir) {\n    return path == *subdir;\n  }\n  return path == root_path;\n}\n} // namespace\n\nWatcher::ConsumeNotifyRet FSEventsWatcher::consumeNotify(\n    const std::shared_ptr<Root>& root,\n    PendingChanges& coll) {\n  char flags_label[128];\n  std::vector<std::vector<watchman_fsevent>> items;\n  std::vector<folly::Promise<folly::Unit>> syncs;\n  bool cancelSelf = false;\n\n  {\n    auto wlock = items_.lock();\n    std::swap(items, wlock->items);\n    std::swap(syncs, wlock->syncs);\n  }\n\n  auto now = std::chrono::system_clock::now();\n\n  for (auto& vec : items) {\n    for (auto& item : vec) {\n      w_expand_flags(kflags, item.flags, flags_label, sizeof(flags_label));\n      logf(\n          DBG,\n          \"fsevents: got {} {:x} {}\\n\",\n          item.path,\n          item.flags,\n          flags_label);\n\n      if (item.flags &\n          (kFSEventStreamEventFlagUserDropped |\n           kFSEventStreamEventFlagKernelDropped)) {\n        if (!subdir) {\n          root->scheduleRecrawl(flags_label);\n          break;\n        } else {\n          w_assert(\n              item.flags & kFSEventStreamEventFlagMustScanSubDirs,\n              \"dropped events should specify kFSEventStreamEventFlagMustScanSubDirs\");\n          auto reason = fmt::format(\"{}: {}\", *subdir, flags_label);\n          root->recrawlTriggered(reason.c_str());\n        }\n      }\n\n      if (item.flags & kFSEventStreamEventFlagUnmount) {\n        logf(\n            ERR,\n            \"kFSEventStreamEventFlagUnmount {}, cancel watch\\n\",\n            item.path);\n        cancelSelf = true;\n        break;\n      }\n\n      if ((item.flags & kFSEventStreamEventFlagItemRemoved) &&\n          isRootRemoved(item.path, root->root_path, subdir)) {\n        log(ERR, \"Root directory removed, cancel watch\\n\");\n        cancelSelf = true;\n        break;\n      }\n\n      if (item.flags & kFSEventStreamEventFlagRootChanged) {\n        logf(\n            ERR,\n            \"kFSEventStreamEventFlagRootChanged {}, cancel watch\\n\",\n            item.path);\n        cancelSelf = true;\n        break;\n      }\n\n      if (!hasFileWatching_ && item.path.size() < root->root_path.size()) {\n        // The test_watch_del_all appear to trigger this?\n        log(ERR,\n            \"Got an event on a directory parent to the root directory: {}?\\n\",\n            item.path);\n        continue;\n      }\n\n      PendingFlags flags = W_PENDING_VIA_NOTIFY;\n\n      if (item.flags &\n          (kFSEventStreamEventFlagMustScanSubDirs |\n           kFSEventStreamEventFlagItemRenamed)) {\n        flags.set(W_PENDING_RECURSIVE);\n      } else if (item.flags & kFSEventStreamEventFlagItemRenamed) {\n        // FSEvents does not reliably report the individual files renamed in the\n        // hierarchy.\n        flags.set(W_PENDING_NONRECURSIVE_SCAN);\n      } else if (!hasFileWatching_) {\n        flags.set(W_PENDING_NONRECURSIVE_SCAN);\n      }\n\n      if (item.flags &\n          (kFSEventStreamEventFlagUserDropped |\n           kFSEventStreamEventFlagKernelDropped)) {\n        flags.set(W_PENDING_IS_DESYNCED);\n      }\n\n      coll.add(item.path, now, flags);\n\n      if (hasFileWatching_ && item.path.size() > root->root_path.size() &&\n          (item.flags &\n           (kFSEventStreamEventFlagItemRenamed |\n            kFSEventStreamEventFlagItemCreated |\n            kFSEventStreamEventFlagItemRemoved))) {\n        // When the list of directory entries is modified, we hear\n        // about the modification, but perhaps not the directory\n        // change itself. Its mtime probably changed, so synthesize\n        // an event to consider it for examination.\n        //\n        // Note these two issues:\n        // - https://github.com/facebook/watchman/issues/305\n        // - https://github.com/facebook/watchman/issues/307\n        //\n        // Watchman does not guarantee minimal notifications, but limiting\n        // the event types above should avoid unnecessary results in\n        // queries.\n        coll.add(item.path.dirName(), now, W_PENDING_VIA_NOTIFY);\n      }\n    }\n  }\n\n  for (auto& sync : syncs) {\n    coll.addSync(std::move(sync));\n  }\n\n  return {cancelSelf};\n}\n\nvoid FSEventsWatcher::stopThreads() {\n  write(fsePipe_.write.fd(), \"X\", 1);\n}\n\nstd::unique_ptr<DirHandle> FSEventsWatcher::startWatchDir(\n    const std::shared_ptr<Root>&,\n    const char* path) {\n  return openDir(path);\n}\n\njson_ref FSEventsWatcher::getDebugInfo() {\n  json_ref events = json_null();\n  if (ringBuffer_) {\n    std::vector<json_ref> elements;\n    for (auto& entry : ringBuffer_->readAll()) {\n      elements.push_back(entry.asJsonValue());\n    }\n    events = json_array(std::move(elements));\n  }\n  return json_object({\n      {\"events\", events},\n      {\"total_event_count\", json_integer(totalEventsSeen_.load())},\n  });\n}\n\nvoid FSEventsWatcher::clearDebugInfo() {\n  // This is just debug info so small races are not problematic. To avoid races,\n  // totalEventsSeen_ could be stored directly if ringBuffer_ is null, or as the\n  // difference between currentHead() - lastClear_ if not null.\n  totalEventsSeen_.store(0, std::memory_order_release);\n  if (ringBuffer_) {\n    ringBuffer_->clear();\n  }\n}\n\nstatic RegisterWatcher<FSEventsWatcher> reg(\"fsevents\");\n\n// A helper command to facilitate testing that we can successfully\n// resync the stream.\nUntypedResponse FSEventsWatcher::cmd_debug_fsevents_inject_drop(\n    Client* client,\n    const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 2) {\n    throw ErrorResponse(\n        \"wrong number of arguments for 'debug-fsevents-inject-drop'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  auto watcher = watcherFromRoot(root);\n  if (!watcher) {\n    throw ErrorResponse(\"root is not using the fsevents watcher\");\n  }\n\n  if (!watcher->attemptResyncOnDrop_) {\n    throw ErrorResponse(\"fsevents_try_resync is not enabled\");\n  }\n\n  FSEventStreamEventId last_good;\n\n  {\n    auto wlock = watcher->items_.lock();\n    last_good = watcher->stream_->last_good;\n    watcher->stream_->inject_drop = true;\n  }\n\n  UntypedResponse resp;\n  resp.set(\"last_good\", json_integer(last_good));\n  return resp;\n}\nW_CMD_REG(\n    \"debug-fsevents-inject-drop\",\n    FSEventsWatcher::cmd_debug_fsevents_inject_drop,\n    CMD_DAEMON,\n    w_cmd_realpath_root);\n\n} // namespace watchman\n\n#endif // HAVE_FSEVENTS\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/watcher/fsevents.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <optional>\n#include \"watchman/RingBuffer.h\"\n#include \"watchman/fs/Pipe.h\"\n#include \"watchman/watcher/Watcher.h\"\n#include \"watchman/watchman_cmd.h\"\n\n#if HAVE_FSEVENTS\n\nnamespace watchman {\n\nclass Client;\nclass Configuration;\nstruct FSEventsStream;\nstruct FSEventsLogEntry;\n\nstruct watchman_fsevent {\n  w_string path;\n  FSEventStreamEventFlags flags;\n\n  watchman_fsevent(w_string&& path, FSEventStreamEventFlags flags)\n      : path(std::move(path)), flags(flags) {}\n};\n\nclass FSEventsWatcher : public Watcher {\n public:\n  explicit FSEventsWatcher(\n      bool hasFileWatching,\n      const Configuration& config,\n      std::optional<w_string> dir = std::nullopt);\n\n  explicit FSEventsWatcher(\n      const w_string& root_path,\n      const Configuration& config,\n      std::optional<w_string> dir = std::nullopt);\n  ~FSEventsWatcher();\n\n  bool start(const std::shared_ptr<Root>& root) override;\n\n  folly::SemiFuture<folly::Unit> flushPendingEvents() override;\n\n  std::unique_ptr<DirHandle> startWatchDir(\n      const std::shared_ptr<Root>& root,\n      const char* path) override;\n\n  Watcher::ConsumeNotifyRet consumeNotify(\n      const std::shared_ptr<Root>& root,\n      PendingChanges& changes) override;\n\n  bool waitNotify(int timeoutms) override;\n  void stopThreads() override;\n  void FSEventsThread(const std::shared_ptr<Root>& root);\n\n  json_ref getDebugInfo() override;\n  void clearDebugInfo() override;\n\n  static UntypedResponse cmd_debug_fsevents_inject_drop(\n      Client* client,\n      const json_ref& args);\n\n private:\n  static std::unique_ptr<FSEventsStream> fse_stream_make(\n      const std::shared_ptr<Root>& root,\n      FSEventsWatcher* watcher,\n      FSEventStreamEventId since,\n      std::optional<w_string>& failure_reason);\n  static void fse_callback(\n      ConstFSEventStreamRef,\n      void* clientCallBackInfo,\n      size_t numEvents,\n      void* eventPaths,\n      const FSEventStreamEventFlags eventFlags[],\n      const FSEventStreamEventId eventIds[]);\n\n  watchman::Pipe fsePipe_;\n\n  std::condition_variable fseCond_;\n  struct Items {\n    // Unflattened queue of pending events. The fse_callback function will push\n    // exactly one vector to the end of this one, flattening the vector would\n    // require extra copying and allocations.\n    std::vector<std::vector<watchman_fsevent>> items;\n    // Sync requests to be inserted into PendingCollection.\n    std::vector<folly::Promise<folly::Unit>> syncs;\n  };\n  folly::Synchronized<Items, std::mutex> items_;\n\n  std::unique_ptr<FSEventsStream> stream_;\n  const bool attemptResyncOnDrop_{false};\n  const bool hasFileWatching_{false};\n  const bool enableStreamFlush_{true};\n  std::optional<w_string> subdir{std::nullopt};\n\n  // Incremented in fse_callback\n  std::atomic<size_t> totalEventsSeen_{0};\n  /**\n   * If not null, holds a fixed-size ring of the last `fsevents_ring_log_size`\n   * FSEvents events.\n   */\n  std::unique_ptr<RingBuffer<FSEventsLogEntry>> ringBuffer_;\n};\n\n} // namespace watchman\n\n#endif\n"
  },
  {
    "path": "watchman/watcher/inotify.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/String.h>\n#include <folly/Synchronized.h>\n#include <atomic>\n#include \"eden/common/utils/FSDetect.h\"\n#include \"watchman/Constants.h\"\n#include \"watchman/Errors.h\"\n#include \"watchman/FlagMap.h\"\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/Poison.h\"\n#include \"watchman/RingBuffer.h\"\n#include \"watchman/fs/FSDetect.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/fs/Pipe.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/watcher/Watcher.h\"\n#include \"watchman/watcher/WatcherRegistry.h\"\n\n#ifdef HAVE_INOTIFY_INIT\n\nusing namespace watchman;\n\n#ifndef IN_EXCL_UNLINK\n/* defined in <linux/inotify.h> but we can't include that without\n * breaking userspace */\n#define WATCHMAN_IN_EXCL_UNLINK 0x04000000\n#else\n#define WATCHMAN_IN_EXCL_UNLINK IN_EXCL_UNLINK\n#endif\n\n#define WATCHMAN_INOTIFY_MASK                                       \\\n  IN_ATTRIB | IN_CREATE | IN_DELETE | IN_DELETE_SELF | IN_MODIFY |  \\\n      IN_MOVE_SELF | IN_MOVED_FROM | IN_MOVED_TO | IN_DONT_FOLLOW | \\\n      IN_ONLYDIR | WATCHMAN_IN_EXCL_UNLINK\n\nnamespace {\n\nconst struct flag_map inflags[] = {\n    {IN_ACCESS, \"IN_ACCESS\"},\n    {IN_MODIFY, \"IN_MODIFY\"},\n    {IN_ATTRIB, \"IN_ATTRIB\"},\n    {IN_CLOSE_WRITE, \"IN_CLOSE_WRITE\"},\n    {IN_CLOSE_NOWRITE, \"IN_CLOSE_NOWRITE\"},\n    {IN_OPEN, \"IN_OPEN\"},\n    {IN_MOVED_FROM, \"IN_MOVED_FROM\"},\n    {IN_MOVED_TO, \"IN_MOVED_TO\"},\n    {IN_CREATE, \"IN_CREATE\"},\n    {IN_DELETE, \"IN_DELETE\"},\n    {IN_DELETE_SELF, \"IN_DELETE_SELF\"},\n    {IN_MOVE_SELF, \"IN_MOVE_SELF\"},\n    {IN_UNMOUNT, \"IN_UNMOUNT\"},\n    {IN_Q_OVERFLOW, \"IN_Q_OVERFLOW\"},\n    {IN_IGNORED, \"IN_IGNORED\"},\n    {IN_ISDIR, \"IN_ISDIR\"},\n    {0, nullptr},\n};\n\nstruct pending_move {\n  std::chrono::system_clock::time_point created;\n  w_string name;\n\n  pending_move(\n      std::chrono::system_clock::time_point created,\n      const w_string& name)\n      : created(created), name(name) {}\n};\n\n/**\n * Memory-efficient records for debugging inotify events after the fact.\n */\nstruct InotifyLogEntry {\n  // 52 should cover many filenames.\n  static constexpr size_t kNameLength = 52;\n\n  InotifyLogEntry() = default;\n\n  explicit InotifyLogEntry(inotify_event* evt) noexcept {\n    wd = evt->wd;\n    mask = evt->mask;\n    cookie = evt->cookie;\n\n    // If evt->len is nonzero, evt->name is a null-terminated string.\n    bool has_name = evt->len > 0;\n    if (has_name) {\n      auto piece = w_string_piece{evt->name}; // Evaluate strlen here.\n      storeTruncatedHead(name, piece);\n    } else {\n      name[0] = 0;\n    }\n  }\n\n  json_ref asJsonValue() {\n    size_t length = strnlen(name, kNameLength);\n    auto namePiece = w_string_piece{name, length};\n\n    return json_object({\n        {\"wd\", json_integer(wd)},\n        {\"mask\", json_integer(mask)},\n        {\"cookie\", json_integer(cookie)},\n        {\"name\", typed_string_to_json(namePiece.asWString())},\n    });\n  }\n\n  w_string_piece namePiece() const {\n    size_t length = strnlen(name, kNameLength);\n    return w_string_piece{name, length};\n  }\n\n  int wd;\n  uint32_t mask;\n  uint32_t cookie;\n  // Will end with ... if truncated. May not be null-terminated.\n  char name[kNameLength];\n};\nstatic_assert(64 == sizeof(InotifyLogEntry));\n\n} // namespace\n\nstruct InotifyWatcher : public Watcher {\n  /* we use one inotify instance per watched root dir */\n  FileDescriptor infd;\n  Pipe terminatePipe_;\n\n  /**\n   * If not null, holds a fixed-size ring of the last `inotify_ring_log_size`\n   * inotify events.\n   */\n  std::unique_ptr<RingBuffer<InotifyLogEntry>> ringBuffer_;\n\n  /**\n   * Published from consumeNotify so getDebugInfo can read a recent value.\n   */\n  std::atomic<uint64_t> totalEventsSeen_ = 0;\n\n  struct maps {\n    /* map of active watch descriptor to name of the corresponding dir */\n    std::unordered_map<int, w_string> wd_to_name;\n    /* map of inotify cookie to corresponding name */\n    std::unordered_map<uint32_t, pending_move> move_map;\n  };\n\n  folly::Synchronized<maps> maps;\n\n  // Make the buffer big enough for 16k entries, which\n  // happens to be the default fs.inotify.max_queued_events\n  char ibuf\n      [WATCHMAN_BATCH_LIMIT * (sizeof(struct inotify_event) + (NAME_MAX + 1))];\n\n  explicit InotifyWatcher(const Configuration& config);\n\n  std::unique_ptr<DirHandle> startWatchDir(\n      const std::shared_ptr<Root>& root,\n      const char* path) override;\n\n  Watcher::ConsumeNotifyRet consumeNotify(\n      const std::shared_ptr<Root>& root,\n      PendingChanges& coll) override;\n\n  bool waitNotify(int timeoutms) override;\n\n  // Process a single inotify event and add it to the pending collection if\n  // needed. Returns true if the root directory was removed and the watch needs\n  // to be cancelled.\n  bool process_inotify_event(\n      const std::shared_ptr<Root>& root,\n      PendingChanges& coll,\n      struct inotify_event* ine,\n      std::chrono::system_clock::time_point now);\n\n  void stopThreads() override;\n\n  json_ref getDebugInfo() override;\n  void clearDebugInfo() override;\n};\n\nInotifyWatcher::InotifyWatcher(const Configuration& config)\n    : Watcher(\"inotify\", WATCHER_HAS_PER_FILE_NOTIFICATIONS) {\n#ifdef HAVE_INOTIFY_INIT1\n  infd = FileDescriptor(\n      inotify_init1(IN_CLOEXEC), FileDescriptor::FDType::Generic);\n#else\n  infd = FileDescriptor(inotify_init(), FileDescriptor::FDType::Generic);\n#endif\n  if (infd.fd() == -1) {\n    throw std::system_error(errno, inotify_category(), \"inotify_init\");\n  }\n  infd.setCloExec();\n\n  {\n    auto wlock = maps.wlock();\n    wlock->wd_to_name.reserve(config.getInt(CFG_HINT_NUM_DIRS, HINT_NUM_DIRS));\n  }\n\n  json_int_t inotify_ring_log_size = config.getInt(\"inotify_ring_log_size\", 0);\n  if (inotify_ring_log_size) {\n    ringBuffer_ =\n        std::make_unique<RingBuffer<InotifyLogEntry>>(inotify_ring_log_size);\n  }\n}\n\nstd::unique_ptr<DirHandle> InotifyWatcher::startWatchDir(\n    const std::shared_ptr<Root>&,\n    const char* path) {\n  // Carry out our very strict opendir first to ensure that we're not\n  // traversing symlinks in the context of this root\n  auto osdir = openDir(path);\n\n  w_string dir_name(path, W_STRING_BYTE);\n\n  // The directory might be different since the last time we looked at it, so\n  // call inotify_add_watch unconditionally.\n  int newwd = inotify_add_watch(infd.fd(), path, WATCHMAN_INOTIFY_MASK);\n  if (newwd == -1) {\n    int err = errno;\n    throw std::system_error(err, inotify_category(), \"inotify_add_watch\");\n  }\n\n  // record mapping\n  {\n    auto wlock = maps.wlock();\n    wlock->wd_to_name[newwd] = dir_name;\n  }\n  logf(DBG, \"adding {} -> {} mapping\\n\", newwd, path);\n\n  return osdir;\n}\n\nbool InotifyWatcher::process_inotify_event(\n    const std::shared_ptr<Root>& root,\n    PendingChanges& coll,\n    struct inotify_event* ine,\n    std::chrono::system_clock::time_point now) {\n  char flags_label[128];\n  w_expand_flags(inflags, ine->mask, flags_label, sizeof(flags_label));\n\n  logf(\n      DBG,\n      \"notify: wd={} mask={:x} {} {}\\n\",\n      ine->wd,\n      ine->mask,\n      flags_label,\n      ine->len > 0 ? ine->name : \"\");\n\n  if (ringBuffer_) {\n    ringBuffer_->write(InotifyLogEntry{ine});\n  }\n\n  if (ine->wd == -1 && (ine->mask & IN_Q_OVERFLOW)) {\n    /* we missed something, will need to re-crawl */\n    root->scheduleRecrawl(\"IN_Q_OVERFLOW\");\n  } else if (ine->wd != -1) {\n    w_string name;\n    char buf[WATCHMAN_NAME_MAX];\n    PendingFlags pending_flags = W_PENDING_VIA_NOTIFY;\n    std::optional<w_string> dir_name;\n\n    {\n      auto rlock = maps.rlock();\n      auto it = rlock->wd_to_name.find(ine->wd);\n      if (it != rlock->wd_to_name.end()) {\n        dir_name = it->second;\n      }\n    }\n\n    if (dir_name) {\n      if (ine->len > 0) {\n        // TODO: What if this truncates?\n        snprintf(\n            buf,\n            sizeof(buf),\n            \"%.*s/%s\",\n            int(dir_name->size()),\n            dir_name->data(),\n            ine->name);\n        name = w_string(buf, W_STRING_BYTE);\n      } else {\n        name = *dir_name;\n      }\n    }\n\n    if (ine->len > 0 &&\n        (ine->mask & (IN_MOVED_FROM | IN_ISDIR)) ==\n            (IN_MOVED_FROM | IN_ISDIR)) {\n      // record this as a pending move, so that we can automatically\n      // watch the target when we get the other side of it.\n      {\n        auto wlock = maps.wlock();\n        wlock->move_map.emplace(ine->cookie, pending_move(now, name));\n      }\n\n      log(DBG, \"recording move_from \", ine->cookie, \" \", name, \"\\n\");\n    }\n\n    if (ine->len > 0 &&\n        (ine->mask & (IN_MOVED_TO | IN_ISDIR)) == (IN_MOVED_FROM | IN_ISDIR)) {\n      auto wlock = maps.wlock();\n      auto it = wlock->move_map.find(ine->cookie);\n      if (it != wlock->move_map.end()) {\n        auto& old = it->second;\n        int wd =\n            inotify_add_watch(infd.fd(), name.c_str(), WATCHMAN_INOTIFY_MASK);\n        if (wd == -1) {\n          if (errno == ENOSPC || errno == ENOMEM) {\n            // Limits exceeded, no recovery from our perspective\n            set_poison_state(\n                name,\n                now,\n                \"inotify-add-watch\",\n                std::error_code(errno, inotify_category()));\n          } else {\n            watchman::log(\n                watchman::DBG,\n                \"add_watch: \",\n                name,\n                \" \",\n                inotify_category().message(errno),\n                \"\\n\");\n          }\n        } else {\n          logf(DBG, \"moved {} -> {}\\n\", old.name.c_str(), name.c_str());\n          // TODO: assert that there is no entry in wd_to_name\n          wlock->wd_to_name[wd] = name;\n        }\n      } else {\n        logf(\n            DBG,\n            \"move: cookie={:x} not found in move map {}\\n\",\n            ine->cookie,\n            name);\n      }\n    }\n\n    if (dir_name) {\n      if ((ine->mask &\n           (IN_UNMOUNT | IN_IGNORED | IN_DELETE_SELF | IN_MOVE_SELF))) {\n        if (root->root_path == name) {\n          logf(\n              ERR,\n              \"root dir {} has been (re)moved, canceling watch\\n\",\n              root->root_path);\n          return true;\n        }\n\n        // We need to examine the parent and potentially crawl down\n        auto pname = name.dirName();\n        logf(DBG, \"mask={:x}, focus on parent: {}\\n\", ine->mask, pname);\n        name = pname;\n      }\n\n      if (ine->mask & (IN_CREATE | IN_DELETE)) {\n        pending_flags.set(W_PENDING_RECURSIVE);\n      }\n\n      logf(\n          DBG,\n          \"add_pending for inotify mask={:x} {}\\n\",\n          ine->mask,\n          name.c_str());\n      coll.add(name, now, pending_flags);\n\n      if (ine->mask & (IN_CREATE | IN_DELETE)) {\n        // When a directory's child is created or unlinked, inotify does not\n        // tell us its parent has also changed. It should be rescanned, so\n        // synthesize an event for the IO thread here.\n        coll.add(name.dirName(), now, W_PENDING_VIA_NOTIFY);\n      }\n\n      // The kernel removed the wd -> name mapping, so let's update\n      // our state here also\n      if (ine->mask & IN_IGNORED) {\n        logf(\n            DBG,\n            \"mask={:x}: remove watch {} {}\\n\",\n            ine->mask,\n            ine->wd,\n            dir_name.value());\n        auto wlock = maps.wlock();\n        wlock->wd_to_name.erase(ine->wd);\n      }\n\n    } else if ((ine->mask & (IN_MOVE_SELF | IN_IGNORED)) == 0) {\n      // If we can't resolve the dir, and this isn't notification\n      // that it has gone away, then we want to recrawl to fix\n      // up our state.\n      logf(\n          ERR,\n          \"wanted dir {} for mask {:x} but not found {}\\n\",\n          ine->wd,\n          ine->mask,\n          ine->name);\n      root->scheduleRecrawl(\"dir missing from internal state\");\n    }\n  }\n  return false;\n}\n\nWatcher::ConsumeNotifyRet InotifyWatcher::consumeNotify(\n    const std::shared_ptr<Root>& root,\n    PendingChanges& coll) {\n  int n = read(infd.fd(), &ibuf, sizeof(ibuf));\n  if (n == -1) {\n    if (errno == EINTR) {\n      return {false};\n    }\n    logf(\n        FATAL,\n        \"read({}, {}): error {}\\n\",\n        infd.fd(),\n        sizeof(ibuf),\n        folly::errnoStr(errno));\n  }\n\n  logf(DBG, \"inotify read: returned {}.\\n\", n);\n  auto now = std::chrono::system_clock::now();\n\n  struct inotify_event* ine;\n  bool cancel = false;\n  size_t eventsSeen = 0;\n  for (char* iptr = ibuf; iptr < ibuf + n; iptr += sizeof(*ine) + ine->len) {\n    ine = (struct inotify_event*)iptr;\n\n    cancel |= process_inotify_event(root, coll, ine, now);\n    ++eventsSeen;\n  }\n\n  // Relaxed because we don't really care exactly when the value is visible.\n  totalEventsSeen_.fetch_add(eventsSeen, std::memory_order_relaxed);\n\n  // It is possible that we can accumulate a set of pending_move\n  // structs in move_map.  This happens when a directory is moved\n  // outside of the watched tree; we get the MOVE_FROM but never\n  // get the MOVE_TO with the same cookie.  To avoid leaking these,\n  // we'll age out the move_map after processing a full set of\n  // inotify events.   We age out rather than delete all because\n  // the MOVE_TO may yet be waiting to read in another go around.\n  // We allow a somewhat arbitrary but practical grace period to\n  // observe the corresponding MOVE_TO.\n  {\n    auto wlock = maps.wlock();\n    auto it = wlock->move_map.begin();\n    while (it != wlock->move_map.end()) {\n      auto& pending = it->second;\n      if (now - pending.created > std::chrono::seconds{5}) {\n        logf(\n            DBG,\n            \"deleting pending move {} (moved outside of watch?)\\n\",\n            pending.name);\n        it = wlock->move_map.erase(it);\n      } else {\n        ++it;\n      }\n    }\n  }\n\n  return {cancel};\n}\n\nbool InotifyWatcher::waitNotify(int timeoutms) {\n  struct pollfd pfd[2];\n  pfd[0].fd = infd.fd();\n  pfd[0].events = POLLIN;\n  pfd[1].fd = terminatePipe_.read.fd();\n  pfd[1].events = POLLIN;\n\n  int n = poll(pfd, std::size(pfd), timeoutms);\n\n  if (n > 0) {\n    if (pfd[1].revents) {\n      // We were signalled via signalThreads\n      return false;\n    }\n    return pfd[0].revents != 0;\n  }\n  return false;\n}\n\nvoid InotifyWatcher::stopThreads() {\n  ignore_result(write(terminatePipe_.write.fd(), \"X\", 1));\n}\n\njson_ref InotifyWatcher::getDebugInfo() {\n  json_ref events = json_null();\n  if (ringBuffer_) {\n    std::vector<json_ref> arr;\n    for (auto& entry : ringBuffer_->readAll()) {\n      arr.push_back(entry.asJsonValue());\n    }\n    events = json_array(std::move(arr));\n  }\n  return json_object({\n      {\"events\", events},\n      {\"total_event_count\", json_integer(totalEventsSeen_.load())},\n  });\n}\n\nvoid InotifyWatcher::clearDebugInfo() {\n  // This is just debug info so small races are not problematic. To avoid races,\n  // totalEventsSeen_ could be stored directly if ringBuffer_ is null, or as the\n  // difference between currentHead() - lastClear_ if not null.\n  totalEventsSeen_.store(0, std::memory_order_release);\n  if (ringBuffer_) {\n    ringBuffer_->clear();\n  }\n}\n\nnamespace {\nstd::shared_ptr<QueryableView> detectInotify(\n    const w_string& root_path,\n    const w_string& fstype,\n    const Configuration& config) {\n  if (facebook::eden::is_edenfs_fs_type(fstype.string())) {\n    // inotify is effectively O(repo) and we know that that access\n    // pattern is undesirable when running on top of EdenFS\n    throw std::runtime_error(\"cannot watch EdenFS file systems with inotify\");\n  }\n  return std::make_shared<InMemoryView>(\n      realFileSystem,\n      root_path,\n      config,\n      std::make_shared<InotifyWatcher>(config));\n}\n} // namespace\n\nstatic WatcherRegistry reg(\"inotify\", detectInotify);\n\n#endif // HAVE_INOTIFY_INIT\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/watcher/kqueue.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"kqueue.h\"\n#include <folly/String.h>\n#include <folly/Synchronized.h>\n#include <array>\n#include \"watchman/FlagMap.h\"\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/fs/Pipe.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/watcher/Watcher.h\"\n#include \"watchman/watcher/WatcherRegistry.h\"\n#include \"watchman/watchman_dir.h\"\n#include \"watchman/watchman_file.h\"\n\n#ifdef HAVE_KQUEUE\n#if !defined(O_EVTONLY)\n#define O_EVTONLY O_RDONLY\n#endif\n\nnamespace watchman {\n\nnamespace {\n\nenum KQueueUdata {\n  IS_DIR = 1,\n};\n\nbool is_udata_dir(void* udata) {\n  return reinterpret_cast<uintptr_t>(udata) == IS_DIR;\n}\n\nvoid* make_udata(bool is_dir) {\n  if (is_dir) {\n    return reinterpret_cast<void*>(IS_DIR);\n  } else {\n    return reinterpret_cast<void*>(0);\n  }\n}\n\n} // namespace\n\nstatic const struct flag_map kflags[] = {\n    {NOTE_DELETE, \"NOTE_DELETE\"},\n    {NOTE_WRITE, \"NOTE_WRITE\"},\n    {NOTE_EXTEND, \"NOTE_EXTEND\"},\n    {NOTE_ATTRIB, \"NOTE_ATTRIB\"},\n    {NOTE_LINK, \"NOTE_LINK\"},\n    {NOTE_RENAME, \"NOTE_RENAME\"},\n    {NOTE_REVOKE, \"NOTE_REVOKE\"},\n    {0, nullptr},\n};\n\nKQueueWatcher::KQueueWatcher(\n    const w_string& /*root_path*/,\n    const Configuration& config,\n    bool recursive)\n    : Watcher(\"kqueue\", 0),\n      maps_(maps(config.getInt(CFG_HINT_NUM_DIRS, HINT_NUM_DIRS))),\n      recursive_(recursive) {\n  kq_fd = FileDescriptor(kqueue(), \"kqueue\", FileDescriptor::FDType::Generic);\n  kq_fd.setCloExec();\n}\n\nbool KQueueWatcher::startWatchFile(struct watchman_file* file) {\n  struct kevent k;\n\n  auto full_name = file->parent->getFullPathToChild(file->getName());\n  {\n    auto rlock = maps_.rlock();\n    if (rlock->name_to_fd.find(full_name) != rlock->name_to_fd.end()) {\n      // Already watching it\n      return true;\n    }\n  }\n\n  logf(DBG, \"watch_file({})\\n\", full_name);\n\n  int openFlags = O_EVTONLY | O_CLOEXEC;\n#if HAVE_DECL_O_SYMLINK\n  openFlags |= O_SYMLINK;\n#endif\n  FileDescriptor fdHolder(\n      open(full_name.c_str(), openFlags), FileDescriptor::FDType::Generic);\n\n  auto rawFd = fdHolder.fd();\n\n  if (rawFd == -1) {\n    watchman::log(\n        watchman::ERR,\n        \"failed to open \",\n        full_name,\n        \", O_EVTONLY: \",\n        folly::errnoStr(errno),\n        \"\\n\");\n    return false;\n  }\n\n  // When not recursive, watchman is watching the top-level directories as\n  // files, make sure that we properly mark these as directory watches.\n  bool isDir = false;\n  if (!recursive_) {\n    struct stat st;\n    if (fstat(rawFd, &st) == -1) {\n      watchman::log(\n          watchman::ERR,\n          \"failed to stat \",\n          full_name,\n          \": \",\n          folly::errnoStr(errno),\n          \"\\n\");\n      return false;\n    }\n    isDir = S_ISDIR(st.st_mode);\n  }\n\n  memset(&k, 0, sizeof(k));\n  EV_SET(\n      &k,\n      rawFd,\n      EVFILT_VNODE,\n      EV_ADD | EV_CLEAR,\n      NOTE_WRITE | NOTE_DELETE | NOTE_EXTEND | NOTE_RENAME | NOTE_ATTRIB,\n      0,\n      make_udata(isDir));\n\n  {\n    auto wlock = maps_.wlock();\n    wlock->name_to_fd[full_name] = std::move(fdHolder);\n    wlock->fd_to_name[rawFd] = full_name;\n  }\n\n  if (kevent(kq_fd.fd(), &k, 1, nullptr, 0, 0)) {\n    watchman::log(\n        watchman::DBG,\n        \"kevent EV_ADD file \",\n        full_name,\n        \" failed: \",\n        full_name.c_str(),\n        folly::errnoStr(errno),\n        \"\\n\");\n    auto wlock = maps_.wlock();\n    wlock->name_to_fd.erase(full_name);\n    wlock->fd_to_name.erase(rawFd);\n  } else {\n    watchman::log(\n        watchman::DBG, \"kevent file \", full_name, \" -> \", rawFd, \"\\n\");\n  }\n\n  return true;\n}\n\nstd::unique_ptr<DirHandle> KQueueWatcher::startWatchDir(\n    const std::shared_ptr<Root>& root,\n    const char* path) {\n  struct stat st, osdirst;\n  struct kevent k;\n\n  auto osdir = openDir(path);\n\n  FileDescriptor fdHolder(\n      open(path, O_NOFOLLOW | O_EVTONLY | O_CLOEXEC),\n      FileDescriptor::FDType::Generic);\n  auto rawFd = fdHolder.fd();\n  if (rawFd == -1) {\n    // directory got deleted between opendir and open\n    throw std::system_error(\n        errno, std::generic_category(), std::string(\"open O_EVTONLY: \") + path);\n  }\n  if (fstat(rawFd, &st) == -1 || fstat(osdir->getFd(), &osdirst) == -1) {\n    // whaaa?\n    root->scheduleRecrawl(\"fstat failed\");\n    throw std::system_error(\n        errno,\n        std::generic_category(),\n        std::string(\"fstat failed for dir \") + path);\n  }\n\n  if (st.st_dev != osdirst.st_dev || st.st_ino != osdirst.st_ino) {\n    // directory got replaced between opendir and open -- at this point its\n    // parent's being watched, so we let filesystem events take care of it\n    throw std::system_error(\n        ENOTDIR,\n        std::generic_category(),\n        std::string(\"directory replaced between opendir and open: \") + path);\n  }\n\n  memset(&k, 0, sizeof(k));\n  w_string dir_name{path};\n  EV_SET(\n      &k,\n      rawFd,\n      EVFILT_VNODE,\n      EV_ADD | EV_CLEAR,\n      NOTE_WRITE | NOTE_DELETE | NOTE_EXTEND | NOTE_RENAME,\n      0,\n      make_udata(true));\n\n  // Our mapping needs to be visible before we add it to the queue,\n  // otherwise we can get a wakeup and not know what it is\n  {\n    auto wlock = maps_.wlock();\n    wlock->name_to_fd[dir_name] = std::move(fdHolder);\n    wlock->fd_to_name[rawFd] = dir_name;\n  }\n\n  if (kevent(kq_fd.fd(), &k, 1, nullptr, 0, 0)) {\n    logf(DBG, \"kevent EV_ADD dir {} failed: {}\", path, folly::errnoStr(errno));\n\n    auto wlock = maps_.wlock();\n    wlock->name_to_fd.erase(dir_name);\n    wlock->fd_to_name.erase(rawFd);\n  } else {\n    watchman::log(watchman::DBG, \"kevent dir \", dir_name, \" -> \", rawFd, \"\\n\");\n  }\n\n  return osdir;\n}\n\nWatcher::ConsumeNotifyRet KQueueWatcher::consumeNotify(\n    const std::shared_ptr<Root>& root,\n    PendingChanges& coll) {\n  struct timespec ts = {0, 0};\n\n  errno = 0;\n  int n = kevent(\n      kq_fd.fd(),\n      nullptr,\n      0,\n      keventbuf,\n      sizeof(keventbuf) / sizeof(keventbuf[0]),\n      &ts);\n  logf(\n      DBG,\n      \"consume_kqueue: {} n={} err={}\\n\",\n      root->root_path,\n      n,\n      folly::errnoStr(errno));\n  if (root->inner.cancelled) {\n    return {false};\n  }\n\n  auto now = std::chrono::system_clock::now();\n  for (int i = 0; n > 0 && i < n; i++) {\n    uint32_t fflags = keventbuf[i].fflags;\n    bool is_dir = is_udata_dir(keventbuf[i].udata);\n    char flags_label[128];\n    int fd = keventbuf[i].ident;\n\n    w_expand_flags(kflags, fflags, flags_label, sizeof(flags_label));\n    auto wlock = maps_.wlock();\n    auto it = wlock->fd_to_name.find(fd);\n    if (it == wlock->fd_to_name.end()) {\n      // Was likely a buffered notification for something that we decided\n      // to stop watching\n      logf(\n          DBG,\n          \" KQ notif for fd={}; flags={:x} {} no ref for it in fd_to_name\\n\",\n          fd,\n          fflags,\n          flags_label);\n      continue;\n    }\n    w_string path = it->second;\n\n    logf(DBG, \" KQ fd={} path {} [{:x} {}]\\n\", fd, path, fflags, flags_label);\n    if ((fflags & (NOTE_DELETE | NOTE_RENAME | NOTE_REVOKE))) {\n      struct kevent k;\n\n      if (path == root->root_path) {\n        logf(\n            ERR,\n            \"root dir {} has been (re)moved [code {:x}], canceling watch\\n\",\n            root->root_path,\n            fflags);\n        return {true};\n      }\n\n      // Remove our watch bits\n      memset(&k, 0, sizeof(k));\n      EV_SET(&k, fd, EVFILT_VNODE, EV_DELETE, 0, 0, nullptr);\n      kevent(kq_fd.fd(), &k, 1, nullptr, 0, 0);\n      wlock->name_to_fd.erase(path);\n      wlock->fd_to_name.erase(fd);\n    }\n\n    PendingFlags flags = W_PENDING_VIA_NOTIFY;\n    if (!is_dir) {\n      // TODO(xavierd): I believe we need this in case a file is replaced by a\n      // directory.\n      flags |= W_PENDING_RECURSIVE;\n    } else {\n      // You might be tempted to use W_PENDING_NONRECURSIVE_SCAN here, but this\n      // would lead to scanning the changed directories too, which when used in\n      // the kqueue+fsevents watcher will lead to cookies being discovered\n      // prior to FSEvents reporting them!\n      // TODO(xavierd): It's unclear to me why not specifying\n      // W_PENDING_NONRECURSIVE_SCAN here still allows cookies to be\n      // discovered...\n    }\n    coll.add(path, now, flags);\n  }\n\n  return {false};\n}\n\nbool KQueueWatcher::waitNotify(int timeoutms) {\n  std::array<struct pollfd, 2> pfd;\n\n  pfd[0].fd = kq_fd.fd();\n  pfd[0].events = POLLIN;\n  pfd[1].fd = terminatePipe_.read.fd();\n  pfd[1].events = POLLIN;\n\n  int n = poll(pfd.data(), pfd.size(), timeoutms);\n\n  if (n > 0) {\n    if (pfd[1].revents) {\n      // We were signalled via signalThreads\n      return false;\n    }\n    return pfd[0].revents != 0;\n  }\n  return false;\n}\n\nvoid KQueueWatcher::stopThreads() {\n  ignore_result(write(terminatePipe_.write.fd(), \"X\", 1));\n}\n\nstatic RegisterWatcher<KQueueWatcher> reg(\n    \"kqueue\",\n    -1 /* last resort on macOS */);\n\n} // namespace watchman\n\n#endif // HAVE_KQUEUE\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/watcher/kqueue.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/Constants.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/fs/Pipe.h\"\n#include \"watchman/watcher/Watcher.h\"\n\n#ifdef HAVE_KQUEUE\n\nnamespace watchman {\n\nclass Configuration;\n\nstruct KQueueWatcher : public Watcher {\n  FileDescriptor kq_fd;\n  Pipe terminatePipe_;\n\n  struct maps {\n    std::unordered_map<w_string, FileDescriptor> name_to_fd;\n    /* map of active watch descriptor to name of the corresponding item */\n    std::unordered_map<int, w_string> fd_to_name;\n\n    explicit maps(json_int_t sizeHint) {\n      name_to_fd.reserve(sizeHint);\n      fd_to_name.reserve(sizeHint);\n    }\n  };\n  folly::Synchronized<maps> maps_;\n  bool recursive_;\n\n  struct kevent keventbuf[WATCHMAN_BATCH_LIMIT];\n\n  explicit KQueueWatcher(\n      const w_string& root_path,\n      const Configuration& config,\n      bool recursive = true);\n\n  std::unique_ptr<DirHandle> startWatchDir(\n      const std::shared_ptr<Root>& root,\n      const char* path) override;\n\n  bool startWatchFile(struct watchman_file* file) override;\n\n  Watcher::ConsumeNotifyRet consumeNotify(\n      const std::shared_ptr<Root>& root,\n      PendingChanges& coll) override;\n\n  bool waitNotify(int timeoutms) override;\n  void stopThreads() override;\n};\n\n} // namespace watchman\n\n#endif\n"
  },
  {
    "path": "watchman/watcher/kqueue_and_fsevents.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include \"watchman/watchman_cmd.h\" // @donotremove\n\n#if HAVE_FSEVENTS && defined(HAVE_KQUEUE)\n\n#include <folly/Synchronized.h>\n#include <condition_variable>\n#include <mutex>\n#include \"watchman/Client.h\"\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/watcher/WatcherRegistry.h\"\n#include \"watchman/watcher/fsevents.h\"\n#include \"watchman/watcher/kqueue.h\"\n#include \"watchman/watchman_file.h\"\n\nnamespace watchman {\n\nclass PendingEventsCond {\n public:\n  /**\n   * Notify that some events are pending.\n   *\n   * Return true if this thread should stop, false otherwise.\n   */\n  bool notifyOneOrStop() {\n    auto lock = stop_.lock();\n    if (lock->shouldStop) {\n      return true;\n    }\n    lock->hasPending = true;\n    cond_.notify_one();\n    return false;\n  }\n\n  /**\n   * Whether this thread should stop.\n   */\n  bool shouldStop() {\n    return stop_.lock()->shouldStop;\n  }\n\n  /**\n   * Wait for a change from a nested watcher. Return true if some events are\n   * pending.\n   */\n  bool waitAndClear(int timeoutms) {\n    auto lock = stop_.lock();\n    cond_.wait_until(\n        lock.as_lock(),\n        std::chrono::steady_clock::now() + std::chrono::milliseconds(timeoutms),\n        [&] { return lock->hasPending || lock->shouldStop; });\n    return std::exchange(lock->hasPending, false);\n  }\n\n  /**\n   * Notify all the waiting threads to stop.\n   */\n  void stopAll() {\n    auto lock = stop_.lock();\n    lock->shouldStop = true;\n    cond_.notify_all();\n  }\n\n private:\n  struct Inner {\n    bool shouldStop = false;\n    bool hasPending = false;\n  };\n\n  folly::Synchronized<Inner, std::mutex> stop_;\n  std::condition_variable cond_;\n};\n\n/**\n * Watcher that uses both kqueue and fsevents to watch a hierarchy.\n *\n * The kqueue watches are used on the root directory and all the files at the\n * root, while the fsevents one is used on the subdirectories.\n */\nclass KQueueAndFSEventsWatcher : public Watcher {\n public:\n  explicit KQueueAndFSEventsWatcher(\n      const w_string& root_path,\n      const Configuration& config);\n\n  bool start(const std::shared_ptr<Root>& root) override;\n\n  folly::SemiFuture<folly::Unit> flushPendingEvents() override;\n\n  std::unique_ptr<DirHandle> startWatchDir(\n      const std::shared_ptr<Root>& root,\n      const char* path) override;\n\n  bool startWatchFile(struct watchman_file* file) override;\n\n  Watcher::ConsumeNotifyRet consumeNotify(\n      const std::shared_ptr<Root>& root,\n      PendingChanges& coll) override;\n\n  bool waitNotify(int timeoutms) override;\n  void stopThreads() override;\n\n  /**\n   * Force a recrawl to be injected in the stream. Used in the\n   * 'debug-kqueue-and-fsevents-recrawl' command.\n   */\n  void injectRecrawl(w_string path);\n\n private:\n  folly::Synchronized<\n      std::unordered_map<w_string, std::shared_ptr<FSEventsWatcher>>>\n      fseventWatchers_;\n  std::shared_ptr<KQueueWatcher> kqueueWatcher_;\n\n  std::shared_ptr<PendingEventsCond> pendingCondition_;\n\n  folly::Synchronized<std::optional<w_string>> injectedRecrawl_;\n};\n\nKQueueAndFSEventsWatcher::KQueueAndFSEventsWatcher(\n    const w_string& root_path,\n    const Configuration& config)\n    : Watcher(\"kqueue+fsevents\", WATCHER_HAS_SPLIT_WATCH),\n      kqueueWatcher_(std::make_shared<KQueueWatcher>(root_path, config, false)),\n      pendingCondition_(std::make_shared<PendingEventsCond>()) {}\n\nnamespace {\nbool startThread(\n    const std::shared_ptr<Root>& root,\n    const std::shared_ptr<Watcher>& watcher,\n    const std::shared_ptr<PendingEventsCond>& cond) {\n  std::weak_ptr<Watcher> weakWatcher(watcher);\n  std::thread thr([weakWatcher, root, cond]() {\n    while (true) {\n      auto watcher = weakWatcher.lock();\n      if (!watcher) {\n        break;\n      }\n      if (watcher->waitNotify(86400)) {\n        if (cond->notifyOneOrStop()) {\n          return;\n        }\n      } else if (cond->shouldStop()) {\n        return;\n      }\n    }\n  });\n  thr.detach();\n  return true;\n}\n} // namespace\n\nbool KQueueAndFSEventsWatcher::start(const std::shared_ptr<Root>& root) {\n  root->cookies.addCookieDir(root->root_path);\n  return startThread(root, kqueueWatcher_, pendingCondition_);\n}\n\nfolly::SemiFuture<folly::Unit> KQueueAndFSEventsWatcher::flushPendingEvents() {\n  // Flush the kqueue watcher outside of the lock, because it may need to\n  // change the set of watchers.\n  auto kqueueFlush = kqueueWatcher_->flushPendingEvents();\n  // But we know KQueueWatcher doesn't implement flushPendingEvents, so to\n  // avoid having to chain the futures here, just assert.\n  w_check(\n      !kqueueFlush.valid(),\n      \"This code needs to be updated to handle KQueueWatcher implementing flushPendingEvents\");\n\n  auto fseventsWatchers = *fseventWatchers_.rlock();\n\n  std::vector<folly::SemiFuture<folly::Unit>> futures;\n  futures.reserve(fseventsWatchers.size());\n  for (auto& [name, watcher] : fseventsWatchers) {\n    auto future = watcher->flushPendingEvents();\n    if (future.valid()) {\n      futures.push_back(std::move(future));\n    }\n  }\n  return folly::collect(futures).unit();\n}\n\nstd::unique_ptr<DirHandle> KQueueAndFSEventsWatcher::startWatchDir(\n    const std::shared_ptr<Root>& root,\n    const char* path) {\n  // Open the directory first to validate that the path is the canonical one.\n  // This will throw an exception if it's not.\n  auto ret = openDir(path);\n\n  if (root->root_path == path) {\n    logf(DBG, \"Watching root directory with kqueue\\n\");\n    // This is the root, let's watch it with kqueue.\n    kqueueWatcher_->startWatchDir(root, path);\n  } else {\n    w_string fullPath{path};\n    if (root->root_path == fullPath.dirName()) {\n      auto wlock = fseventWatchers_.wlock();\n      if (wlock->find(fullPath) == wlock->end()) {\n        logf(\n            DBG,\n            \"Creating a new FSEventsWatcher for top-level directory {}\\n\",\n            fullPath);\n        root->cookies.addCookieDir(fullPath);\n        auto [it, _] = wlock->emplace(\n            fullPath,\n            std::make_shared<FSEventsWatcher>(\n                root->root_path, root->config, std::optional(fullPath)));\n        const auto& watcher = it->second;\n        if (!watcher->start(root)) {\n          throw std::runtime_error(\"couldn't start fsEvent\");\n        }\n        if (!startThread(root, watcher, pendingCondition_)) {\n          throw std::runtime_error(\"couldn't start fsEvent\");\n        }\n      }\n    }\n  }\n\n  return ret;\n}\n\nbool KQueueAndFSEventsWatcher::startWatchFile(struct watchman_file* file) {\n  if (file->parent->parent == nullptr && !file->stat.isDir()) {\n    // File at the root, watch it with kqueue.\n    return kqueueWatcher_->startWatchFile(file);\n  }\n\n  // FSEvent by default watches all the files recursively, we don't need to do\n  // anything.\n  return true;\n}\n\nWatcher::ConsumeNotifyRet KQueueAndFSEventsWatcher::consumeNotify(\n    const std::shared_ptr<Root>& root,\n    PendingChanges& coll) {\n  {\n    auto guard = injectedRecrawl_.wlock();\n    if (guard->has_value()) {\n      const auto& injectedDir = guard->value();\n\n      auto now = std::chrono::system_clock::now();\n      coll.add(\n          injectedDir,\n          now,\n          W_PENDING_VIA_NOTIFY | W_PENDING_RECURSIVE | W_PENDING_IS_DESYNCED);\n\n      guard->reset();\n    }\n  }\n\n  {\n    auto fseventWatches = fseventWatchers_.wlock();\n    auto it = fseventWatches->begin();\n    while (it != fseventWatches->end()) {\n      auto& [watchpath, fsevent] = *it;\n      auto [cancelSelf] = fsevent->consumeNotify(root, coll);\n      if (cancelSelf) {\n        fsevent->stopThreads();\n        root->cookies.removeCookieDir(watchpath);\n        it = fseventWatches->erase(it);\n        continue;\n      } else {\n        ++it;\n      }\n    }\n  }\n\n  return kqueueWatcher_->consumeNotify(root, coll);\n}\n\nbool KQueueAndFSEventsWatcher::waitNotify(int timeoutms) {\n  return pendingCondition_->waitAndClear(timeoutms);\n}\n\nvoid KQueueAndFSEventsWatcher::stopThreads() {\n  pendingCondition_->stopAll();\n  {\n    auto fseventWatches = fseventWatchers_.rlock();\n    for (auto& [_, fsevent] : *fseventWatches) {\n      fsevent->stopThreads();\n    }\n  }\n  kqueueWatcher_->stopThreads();\n}\n\nvoid KQueueAndFSEventsWatcher::injectRecrawl(w_string path) {\n  *injectedRecrawl_.wlock() = path;\n  pendingCondition_->notifyOneOrStop();\n}\n\nnamespace {\nstd::shared_ptr<InMemoryView> makeKQueueAndFSEventsWatcher(\n    const w_string& root_path,\n    const w_string& /*fstype*/,\n    const Configuration& config) {\n  if (config.getBool(\"prefer_split_fsevents_watcher\", false)) {\n    return std::make_shared<InMemoryView>(\n        realFileSystem,\n        root_path,\n        config,\n        std::make_shared<KQueueAndFSEventsWatcher>(root_path, config));\n  } else {\n    throw std::runtime_error(\n        \"Not using the kqueue+fsevents watcher as the \\\"prefer_split_fsevents_watcher\\\" config isn't set\");\n  }\n}\n} // namespace\n\nstatic WatcherRegistry reg(\"kqueue+fsevents\", makeKQueueAndFSEventsWatcher, 5);\n\nnamespace {\n\nstd::shared_ptr<KQueueAndFSEventsWatcher> watcherFromRoot(\n    const std::shared_ptr<Root>& root) {\n  auto view = std::dynamic_pointer_cast<watchman::InMemoryView>(root->view());\n  if (!view) {\n    return nullptr;\n  }\n\n  return std::dynamic_pointer_cast<KQueueAndFSEventsWatcher>(\n      view->getWatcher());\n}\n\nstatic UntypedResponse cmd_debug_kqueue_and_fsevents_recrawl(\n    Client* client,\n    const json_ref& args) {\n  /* resolve the root */\n  if (json_array_size(args) != 3) {\n    throw ErrorResponse(\n        \"wrong number of arguments for 'debug-kqueue-and-fsevents-recrawl'\");\n  }\n\n  auto root = resolveRoot(client, args);\n\n  auto watcher = watcherFromRoot(root);\n  if (!watcher) {\n    throw ErrorResponse(\"root is not using the kqueue+fsevents watcher\");\n  }\n\n  /* Get the path that the recrawl should be triggered on */\n  const auto& json_path = args.at(2);\n  auto path = json_string_value(json_path);\n  if (!path) {\n    throw ErrorResponse(\n        \"invalid value for argument 2, expected a string naming the path to trigger a recrawl on\");\n  }\n\n  watcher->injectRecrawl(path);\n\n  return UntypedResponse{};\n}\n\n} // namespace\n\nW_CMD_REG(\n    \"debug-kqueue-and-fsevents-recrawl\",\n    cmd_debug_kqueue_and_fsevents_recrawl,\n    CMD_DAEMON,\n    w_cmd_realpath_root);\n\n} // namespace watchman\n\n#endif\n"
  },
  {
    "path": "watchman/watcher/portfs.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/* TODO:\n * This watcher fails with the scm tests */\n\n#ifdef HAVE_PORT_CREATE\n\n#include <folly/String.h>\n#include <folly/Synchronized.h>\n#include <memory>\n#include \"watchman/InMemoryView.h\"\n\n#define WATCHMAN_PORT_EVENTS FILE_MODIFIED | FILE_ATTRIB | FILE_NOFOLLOW\n\nstruct watchman_port_file {\n  file_obj_t port_file;\n  w_string name;\n  bool is_dir;\n};\n\nusing watchman::FileDescriptor;\nusing watchman::Pipe;\n\nstruct PortFSWatcher : public Watcher {\n  FileDescriptor port_fd;\n  FileDescriptor port_delete_fd;\n  Pipe terminatePipe_;\n\n  /* map of file name to watchman_port_file */\n  folly::Synchronized<\n      std::unordered_map<w_string, std::unique_ptr<watchman_port_file>>>\n      port_files;\n\n  std::unique_ptr<watchman_port_file> root_delete_w_port_file;\n  bool root_deleted;\n\n  port_event_t portevents[WATCHMAN_BATCH_LIMIT];\n\n  explicit PortFSWatcher(watchman_root* root);\n\n  bool start(const std::shared_ptr<watchman_root>& root) override;\n\n  std::unique_ptr<DirHandle> startWatchDir(\n      const std::shared_ptr<watchman_root>& root,\n      const char* path) override;\n\n  bool startWatchFile(struct watchman_file* file) override;\n\n  Watcher::ConsumeNotifyRet consumeNotify(\n      const std::shared_ptr<watchman_root>& root,\n      PendingCollection::LockedPtr& coll) override;\n\n  bool waitNotify(int timeoutms) override;\n  void signalThreads() override;\n  bool do_watch(\n      const w_string& name,\n      const watchman::FileInformation& finfo,\n      bool throw_on_error);\n};\n\nstatic const struct flag_map pflags[] = {\n    {FILE_ACCESS, \"FILE_ACCESS\"},\n    {FILE_MODIFIED, \"FILE_MODIFIED\"},\n    {FILE_ATTRIB, \"FILE_ATTRIB\"},\n    {FILE_DELETE, \"FILE_DELETE\"},\n    {FILE_RENAME_TO, \"FILE_RENAME_TO\"},\n    {FILE_RENAME_FROM, \"FILE_RENAME_FROM\"},\n    {UNMOUNTED, \"UNMOUNTED\"},\n    {MOUNTEDOVER, \"MOUNTEDOVER\"},\n    {0, nullptr},\n};\n\nstatic std::unique_ptr<watchman_port_file> make_port_file(\n    const w_string& name,\n    const watchman::FileInformation& finfo) {\n  auto f = std::make_unique<watchman_port_file>();\n\n  f->name = name;\n  f->port_file.fo_name = (char*)name.c_str();\n  f->port_file.fo_atime = finfo.atime;\n  f->port_file.fo_mtime = finfo.mtime;\n  f->port_file.fo_ctime = finfo.ctime;\n  f->is_dir = finfo.isDir();\n\n  return f;\n}\n\nPortFSWatcher::PortFSWatcher(watchman_root* root)\n    : Watcher(\"portfs\", 0),\n      port_fd(port_create(), \"port_create()\"),\n      port_delete_fd(port_create(), \"port_create()\"),\n      root_deleted(false) {\n  auto wlock = port_files.wlock();\n  wlock->reserve(root->config.getInt(CFG_HINT_NUM_DIRS, HINT_NUM_DIRS));\n  port_fd.setCloExec();\n  port_delete_fd.setCloExec();\n}\n\nbool PortFSWatcher::do_watch(\n    const w_string& name,\n    const watchman::FileInformation& finfo,\n    bool throw_on_error) {\n  auto wlock = port_files.wlock();\n  if (wlock->find(name) != wlock->end()) {\n    // Already watching it\n    return true;\n  }\n\n  auto f = make_port_file(name, finfo);\n  auto rawFile = f.get();\n  wlock->emplace(name, std::move(f));\n\n  logf(DBG, \"watching {}\\n\", name);\n  errno = 0;\n  if (port_associate(\n          port_fd.fd(),\n          PORT_SOURCE_FILE,\n          (uintptr_t)&rawFile->port_file,\n          WATCHMAN_PORT_EVENTS,\n          (void*)rawFile)) {\n    int err = errno;\n    logf(\n        ERR,\n        \"port_associate {} {}\\n\",\n        rawFile->port_file.fo_name,\n        folly::errnoStr(errno));\n    wlock->erase(name);\n    if (throw_on_error) {\n      throw std::system_error(err, std::generic_category(), \"port_associate\");\n    }\n    return false;\n  }\n\n  return true;\n}\n\n/*\n * We need to have an extra port the catches the delete event on the root.\n * The reason for this is that the creation or delete of one of the\n * files/directories directly under the root will cause an FILE_MODIFIED,\n * FILE_ATTRIB event on the root, because just one event can be generated\n * per file_obj the delete event coming afterwards is not seen.\n */\nbool PortFSWatcher::start(const std::shared_ptr<watchman_root>& root) {\n  struct stat st;\n  if (stat(root->root_path.c_str(), &st)) {\n    watchman::log(watchman::ERR, \"stat failed in PortFS root delete watch\");\n    root->cancel(\"root inaccessible\");\n    return false;\n  }\n\n  auto f = make_port_file(root->root_path, watchman::FileInformation(st));\n  auto rawFile = f.get();\n  root_delete_w_port_file = std::move(f);\n\n  logf(DBG, \"watching {} for delete events\\n\", root->root_path);\n  errno = 0;\n  if (port_associate(\n          port_delete_fd.fd(),\n          PORT_SOURCE_FILE,\n          (uintptr_t)&rawFile->port_file,\n          0, // we only want the delete events\n          (void*)rawFile)) {\n    watchman::log(\n        watchman::ERR, \"port_associate failed in PortFS root delete watch\");\n    return false;\n  }\n  return true;\n}\n\nbool PortFSWatcher::startWatchFile(struct watchman_file* file) {\n  auto name = file->parent->getFullPathToChild(file->getName());\n  if (!name) {\n    return false;\n  }\n\n  return do_watch(name, file->stat, false);\n}\n\nstd::unique_ptr<DirHandle> PortFSWatcher::startWatchDir(\n    const std::shared_ptr<watchman_root>& root,\n    const char* path) {\n  struct stat st;\n\n  auto osdir = w_dir_open(path);\n\n  w_string fullPath{path};\n  if (fstat(osdir->getFd(), &st) == -1) {\n    if (fullPath == root->root_path) {\n      root->cancel(\"root inaccessible\");\n    } else {\n      // whaaa?\n      root->scheduleRecrawl(\"fstat failed\");\n    }\n    throw std::system_error(\n        errno,\n        std::generic_category(),\n        std::string(\"fstat failed for dir \") + path);\n  }\n\n  do_watch(fullPath, watchman::FileInformation(st), true);\n\n  return osdir;\n}\n\nWatcher::ConsumeNotifyRet PortFSWatcher::consumeNotify(\n    const std::shared_ptr<watchman_root>& root,\n    PendingCollection::LockedPtr& coll) {\n  uint_t i, n;\n  struct timeval now;\n\n  // root got deleted, cancel the watch\n  if (root_deleted) {\n    return {false, true};\n  }\n\n  errno = 0;\n\n  n = 1;\n  if (port_getn(\n          port_fd.fd(),\n          portevents,\n          sizeof(portevents) / sizeof(portevents[0]),\n          &n,\n          nullptr)) {\n    if (errno == EINTR) {\n      return {false, false};\n    }\n    logf(FATAL, \"port_getn: {}\\n\", folly::errnoStr(errno));\n  }\n\n  logf(DBG, \"port_getn: n={}\\n\", n);\n\n  if (n == 0) {\n    return {false, false};\n  }\n\n  auto wlock = port_files.wlock();\n\n  gettimeofday(&now, nullptr);\n  for (i = 0; i < n; i++) {\n    struct watchman_port_file* f;\n    uint32_t pe = portevents[i].portev_events;\n    char flags_label[128];\n\n    f = (struct watchman_port_file*)portevents[i].portev_user;\n    w_expand_flags(pflags, pe, flags_label, sizeof(flags_label));\n    logf(DBG, \"port: {} [{:x} {}]\\n\", f->port_file.fo_name, pe, flags_label);\n\n    if ((pe & (FILE_RENAME_FROM | UNMOUNTED | MOUNTEDOVER | FILE_DELETE)) &&\n        (f->name == root->root_path)) {\n      logf(\n          ERR,\n          \"root dir {} has been (re)moved (code {:x} {}), canceling watch\\n\",\n          root->root_path,\n          pe,\n          flags_label);\n      return {false, true};\n    }\n    coll->add(\n        f->name,\n        now,\n        (f->is_dir ? W_PENDING_RECURSIVE : 0) | W_PENDING_VIA_NOTIFY);\n\n    // It was port_dissociate'd implicitly.  We'll re-establish a\n    // watch later when portfs_root_start_watch_(file|dir) are called again\n    wlock->erase(f->name);\n  }\n\n  return {true, false};\n}\n\nbool PortFSWatcher::waitNotify(int timeoutms) {\n  int n;\n  std::array<struct pollfd, 3> pfd;\n\n  pfd[0].fd = port_fd.fd();\n  pfd[0].events = POLLIN;\n  pfd[1].fd = port_delete_fd.fd();\n  pfd[1].events = POLLIN;\n  pfd[2].fd = terminatePipe_.read.fd();\n  pfd[2].events = POLLIN;\n\n  n = poll(pfd.data(), pfd.size(), timeoutms);\n\n  if (n > 0) {\n    if (pfd[2].revents) {\n      // We were signalled via signalThreads\n      return false;\n    }\n    if (pfd[1].revents) {\n      // An exceptional event (delete) occured on the root so delete it\n      root_deleted = true;\n      return true;\n    }\n    return (pfd[0].revents != 0);\n  }\n\n  return false;\n}\nvoid PortFSWatcher::signalThreads() {\n  ignore_result(write(terminatePipe_.write.fd(), \"X\", 1));\n}\n\nstatic RegisterWatcher<PortFSWatcher> reg(\n    \"portfs\",\n    1 /* higher priority than inotify */);\n\n#endif // HAVE_PORT_CREATE\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/watcher/win32.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <folly/Synchronized.h>\n#include \"watchman/InMemoryView.h\"\n#include \"watchman/fs/FileDescriptor.h\"\n#include \"watchman/portability/WinError.h\"\n#include \"watchman/root/Root.h\"\n#include \"watchman/watcher/Watcher.h\"\n#include \"watchman/watcher/WatcherRegistry.h\"\n\n#include <algorithm>\n#include <condition_variable>\n#include <iterator>\n#include <list>\n#include <mutex>\n#include <tuple>\n\nusing namespace watchman;\n\n#ifdef _WIN32\n\nnamespace {\n\nconstexpr DWORD kNetworkBufSize = 64 * 1024;\n\nstruct Item {\n  w_string path;\n  PendingFlags flags;\n\n  Item(w_string&& path, PendingFlags flags)\n      : path(std::move(path)), flags(flags) {}\n};\n\n} // namespace\n\nstruct WinWatcher : public Watcher {\n  HANDLE ping{INVALID_HANDLE_VALUE};\n  HANDLE olapEvent{INVALID_HANDLE_VALUE};\n  FileDescriptor dir_handle;\n\n  std::condition_variable cond;\n  folly::Synchronized<std::list<Item>, std::mutex> changedItems;\n\n  explicit WinWatcher(const w_string& root_path, const Configuration& config);\n  ~WinWatcher();\n\n  std::unique_ptr<DirHandle> startWatchDir(\n      const std::shared_ptr<Root>& root,\n      const char* path) override;\n\n  Watcher::ConsumeNotifyRet consumeNotify(\n      const std::shared_ptr<Root>& root,\n      PendingChanges& coll) override;\n\n  bool waitNotify(int timeoutms) override;\n  bool start(const std::shared_ptr<Root>& root) override;\n  void stopThreads() override;\n  void readChangesThread(const std::shared_ptr<Root>& root);\n};\n\nWinWatcher::WinWatcher(const w_string& root_path, const Configuration& config)\n    : Watcher(\"win32\", WATCHER_HAS_PER_FILE_NOTIFICATIONS) {\n  auto wpath = root_path.piece().asWideUNC();\n\n  // Create an overlapped handle so that we can avoid blocking forever\n  // in ReadDirectoryChangesW\n  dir_handle = FileDescriptor(\n      intptr_t(CreateFileW(\n          wpath.c_str(),\n          GENERIC_READ,\n          FILE_SHARE_READ | FILE_SHARE_DELETE | FILE_SHARE_WRITE,\n          nullptr,\n          OPEN_EXISTING,\n          FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED,\n          nullptr)),\n      FileDescriptor::FDType::Generic);\n\n  if (!dir_handle) {\n    throw std::runtime_error(\n        std::string(\"failed to open dir \") + root_path.c_str() + \": \" +\n        win32_strerror(GetLastError()));\n  }\n\n  ping = CreateEvent(nullptr, TRUE, FALSE, nullptr);\n  if (!ping) {\n    throw std::runtime_error(\n        std::string(\"failed to create event: \") +\n        win32_strerror(GetLastError()));\n  }\n  olapEvent = CreateEvent(nullptr, TRUE, FALSE, nullptr);\n  if (!olapEvent) {\n    throw std::runtime_error(\n        std::string(\"failed to create event: \") +\n        win32_strerror(GetLastError()));\n  }\n}\n\nWinWatcher::~WinWatcher() {\n  if (ping != INVALID_HANDLE_VALUE) {\n    CloseHandle(ping);\n  }\n  if (olapEvent != INVALID_HANDLE_VALUE) {\n    CloseHandle(olapEvent);\n  }\n}\n\nvoid WinWatcher::stopThreads() {\n  SetEvent(ping);\n}\n\nvoid WinWatcher::readChangesThread(const std::shared_ptr<Root>& root) {\n  std::vector<uint8_t> buf;\n  auto olap = OVERLAPPED();\n  BOOL initiate_read = true;\n  HANDLE handles[2] = {olapEvent, ping};\n  DWORD bytes;\n\n  w_set_thread_name(\"readchange \", root->root_path.view());\n  watchman::log(watchman::DBG, \"initializing\\n\");\n\n  // Artificial extra latency to impose around processing changes.\n  // This is needed to avoid trying to access files and dirs too\n  // soon after a change is noticed, as this can cause recursive\n  // deletes to fail.\n  auto extraLatency = root->config.getInt(\"win32_batch_latency_ms\", 30);\n\n  DWORD size = root->config.getInt(\"win32_rdcw_buf_size\", 16384);\n\n  DWORD filter = FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME |\n      FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE |\n      FILE_NOTIFY_CHANGE_LAST_WRITE;\n\n  // Block until winmatch_root_st is waiting for our initialization\n  {\n    auto wlock = changedItems.lock();\n\n    olap.hEvent = olapEvent;\n\n    buf.resize(size);\n\n    if (!ReadDirectoryChangesW(\n            (HANDLE)dir_handle.handle(),\n            &buf[0],\n            size,\n            TRUE,\n            filter,\n            nullptr,\n            &olap,\n            nullptr)) {\n      DWORD err = GetLastError();\n      logf(\n          ERR,\n          \"ReadDirectoryChangesW: failed, cancel watch. {}\\n\",\n          win32_strerror(err));\n      root->cancel(\n          fmt::format(\"ReadDirectoryChangesW failed: {}\", win32_strerror(err)));\n      return;\n    }\n    // Signal that we are done with init.  We MUST do this AFTER our first\n    // successful ReadDirectoryChangesW, otherwise there is a race condition\n    // where we'll miss observing the cookie for a query that comes in\n    // after we've crawled but before the watch is established.\n    logf(DBG, \"ReadDirectoryChangesW signalling as init done\\n\");\n    cond.notify_one();\n  }\n  initiate_read = false;\n\n  std::list<Item> items;\n\n  // The mutex must not be held when we enter the loop\n  while (!root->inner.cancelled) {\n    if (initiate_read) {\n      if (!ReadDirectoryChangesW(\n              (HANDLE)dir_handle.handle(),\n              &buf[0],\n              size,\n              TRUE,\n              filter,\n              nullptr,\n              &olap,\n              nullptr)) {\n        DWORD err = GetLastError();\n        logf(\n            ERR,\n            \"ReadDirectoryChangesW: failed, cancel watch. {}\\n\",\n            win32_strerror(err));\n        root->cancel(\n            fmt::format(\n                \"ReadDirectoryChangesW failed: {}\", win32_strerror(err)));\n        break;\n      } else {\n        initiate_read = false;\n      }\n    }\n\n    watchman::log(watchman::DBG, \"waiting for change notifications\\n\");\n    DWORD status = WaitForMultipleObjects(\n        2,\n        handles,\n        FALSE,\n        // We use a 10 second timeout by default until we start accumulating a\n        // batch.  Once we have a batch we prefer to add more to it than notify\n        // immediately, so we introduce a 30ms latency.  Without this artificial\n        // latency we'll wake up and start trying to look at a directory that\n        // may be in the process of being recursively deleted and that act can\n        // block the recursive delete.\n        items.empty() ? 10000 : extraLatency);\n    watchman::log(watchman::DBG, \"wait returned with status \", status, \"\\n\");\n\n    if (status == WAIT_OBJECT_0) {\n      bytes = 0;\n      if (!GetOverlappedResult(\n              (HANDLE)dir_handle.handle(), &olap, &bytes, FALSE)) {\n        DWORD err = GetLastError();\n        logf(\n            ERR,\n            \"overlapped ReadDirectoryChangesW({}): {:x} {}\\n\",\n            root->root_path,\n            err,\n            win32_strerror(err));\n\n        if (err == ERROR_INVALID_PARAMETER && size > kNetworkBufSize) {\n          // May be a network buffer related size issue; the docs say that\n          // we can hit this when watching a UNC path. Let's downsize and\n          // retry the read just one time\n          logf(\n              ERR,\n              \"retrying watch for possible network location {} \"\n              \"with smaller buffer\\n\",\n              root->root_path);\n          size = kNetworkBufSize;\n          initiate_read = true;\n          continue;\n        }\n\n        if (err == ERROR_NOTIFY_ENUM_DIR) {\n          root->recrawlTriggered(\n              \"GetOverlappedResult failed with ERROR_NOTIFY_ENUM_DIR\");\n          items.emplace_back(\n              w_string{root->root_path},\n              PendingFlags{W_PENDING_IS_DESYNCED | W_PENDING_RECURSIVE});\n        } else {\n          logf(ERR, \"Cancelling watch for {}\\n\", root->root_path);\n          root->cancel(\n              fmt::format(\n                  \"unexpected error from GetOverlappedResult: {}\",\n                  win32_strerror(err)));\n          break;\n        }\n      } else {\n        if (bytes == 0) {\n          root->recrawlTriggered(\"ReadDirectoryChangesW overflowed\");\n          items.emplace_back(\n              w_string{root->root_path},\n              PendingFlags{W_PENDING_IS_DESYNCED | W_PENDING_RECURSIVE});\n        } else {\n          PFILE_NOTIFY_INFORMATION notify =\n              (PFILE_NOTIFY_INFORMATION)buf.data();\n\n          while (true) {\n            // FileNameLength is in BYTES, but FileName is WCHAR\n            DWORD n_chars =\n                notify->FileNameLength / sizeof(notify->FileName[0]);\n            w_string name(notify->FileName, n_chars);\n\n            auto full = w_string::pathCat({root->root_path, name});\n\n            if (!root->ignore.isIgnored(full.data(), full.size())) {\n              // If we have a delete or rename-away it may be part of\n              // a recursive tree remove or rename.  In that situation\n              // the notifications that we'll receive from the OS will\n              // be from the leaves and bubble up to the root of the\n              // delete/rename.  We want to flag those paths for recursive\n              // analysis so that we can prune children from the trie\n              // that is built when we pass this to the pending list\n              // later.  We don't do that here in this thread because\n              // we're trying to minimize latency in this context.\n              items.emplace_back(\n                  w_string{full},\n                  (notify->Action == FILE_ACTION_REMOVED ||\n                   notify->Action == FILE_ACTION_RENAMED_OLD_NAME)\n                      ? W_PENDING_RECURSIVE\n                      : 0);\n\n              if (!name.empty() &&\n                  (notify->Action == FILE_ACTION_ADDED ||\n                   notify->Action == FILE_ACTION_REMOVED ||\n                   notify->Action == FILE_ACTION_RENAMED_OLD_NAME ||\n                   notify->Action == FILE_ACTION_RENAMED_NEW_NAME)) {\n                // ReadDirectoryChangesW provides change events when the child\n                // entry list changes, but may not provide a notification for\n                // the parent when its mtime changes. It should be rescanned, so\n                // synthesize an event for the IO thread here.\n                items.emplace_back(full.dirName(), PendingFlags{});\n              }\n            }\n\n            // Advance to next item\n            if (notify->NextEntryOffset == 0) {\n              break;\n            }\n            notify = (PFILE_NOTIFY_INFORMATION)(notify->NextEntryOffset +\n                                                (char*)notify);\n          }\n        }\n\n        ResetEvent(olapEvent);\n        initiate_read = true;\n      }\n    } else if (status == WAIT_OBJECT_0 + 1) {\n      logf(ERR, \"signalled\\n\");\n      break;\n    } else if (status == WAIT_TIMEOUT) {\n      if (!items.empty()) {\n        watchman::log(\n            watchman::DBG,\n            \"timed out waiting for changes, and we have \",\n            items.size(),\n            \" items; move and notify\\n\");\n        auto wlock = changedItems.lock();\n        wlock->splice(wlock->end(), items);\n        cond.notify_one();\n      }\n    } else {\n      logf(ERR, \"impossible wait status={}\\n\", status);\n      break;\n    }\n  }\n\n  logf(DBG, \"done\\n\");\n}\n\nbool WinWatcher::start(const std::shared_ptr<Root>& root) {\n  // Spin up the changes reading thread; it owns a ref on the root\n\n  try {\n    // Acquire the mutex so thread initialization waits until we release it\n    auto wlock = changedItems.lock();\n\n    watchman::log(watchman::DBG, \"starting readChangesThread\\n\");\n    auto self = std::dynamic_pointer_cast<WinWatcher>(shared_from_this());\n    std::thread thread([self, root]() noexcept {\n      try {\n        self->readChangesThread(root);\n      } catch (const std::exception& e) {\n        watchman::log(watchman::ERR, \"uncaught exception: \", e.what());\n        root->cancel(fmt::format(\"readChangesThread errored: {}\", e.what()));\n      }\n\n      // Ensure that we signal the condition variable before we\n      // finish this thread.  That ensures that don't get stuck\n      // waiting in WinWatcher::start if something unexpected happens.\n      auto wlock = self->changedItems.lock();\n      self->cond.notify_one();\n    });\n    // We have to detach because the readChangesThread may wind up\n    // being the last thread to reference the watcher state and\n    // cannot join itself.\n    thread.detach();\n\n    // Allow thread init to proceed; wait for its signal\n    if (cond.wait_for(wlock.as_lock(), std::chrono::seconds(10)) ==\n        std::cv_status::timeout) {\n      watchman::log(\n          watchman::ERR, \"timedout waiting for readChangesThread to start\\n\");\n      root->cancel(\"timedout waiting for readChangesThread to start\");\n      return false;\n    }\n\n    if (root->failure_reason) {\n      logf(\n          ERR,\n          \"failed to start readchanges thread: {}\\n\",\n          *root->failure_reason);\n      return false;\n    }\n    return true;\n  } catch (const std::exception& e) {\n    logf(ERR, \"failed to start readchanges thread: {}\\n\", e.what());\n    return false;\n  }\n}\n\nstd::unique_ptr<DirHandle> WinWatcher::startWatchDir(\n    const std::shared_ptr<Root>& root,\n    const char* path) {\n  return openDir(path);\n}\n\nWatcher::ConsumeNotifyRet WinWatcher::consumeNotify(\n    const std::shared_ptr<Root>& root,\n    PendingChanges& coll) {\n  std::list<Item> items;\n\n  {\n    auto wlock = changedItems.lock();\n    std::swap(items, *wlock);\n  }\n\n  auto now = std::chrono::system_clock::now();\n\n  for (auto& item : items) {\n    watchman::log(\n        watchman::DBG,\n        \"readchanges: add pending \",\n        item.path,\n        \" \",\n        item.flags.format(),\n        \"\\n\");\n    coll.add(item.path, now, W_PENDING_VIA_NOTIFY | item.flags);\n  }\n\n  // The readChangesThread cancels itself.\n  return {false};\n}\n\nbool WinWatcher::waitNotify(int timeoutms) {\n  auto wlock = changedItems.lock();\n  if (!wlock->empty()) {\n    return true;\n  }\n  cond.wait_for(wlock.as_lock(), std::chrono::milliseconds(timeoutms));\n  return !wlock->empty();\n}\n\nstatic RegisterWatcher<WinWatcher> reg(\"win32\");\n\n#endif // _WIN32\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/watchman_cmd.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <stdexcept>\n#include \"watchman/CommandRegistry.h\"\n#include \"watchman/PDU.h\"\n#include \"watchman/watchman_preprocessor.h\"\n#include \"watchman/watchman_system.h\"\n\nnamespace watchman {\nclass Client;\nclass Command;\nclass Root;\nclass UntypedResponse;\n} // namespace watchman\n\n// For commands that take the root dir as the second parameter,\n// realpath's that parameter on the client side and updates the\n// argument list\nvoid w_cmd_realpath_root(watchman::Command& command);\n\n// Try to find a project root that contains the path `resolved`. If found,\n// modify `resolved` to hold the path to the root project and return true.\n// Else, return false.\n// root_files should be derived from a call to cfg_compute_root_files, and it\n// should not be null.  cfg_compute_root_files ensures that .watchmanconfig is\n// first in the returned list of files.  This is important because it is the\n// definitive indicator for the location of the project root.\nbool find_project_root(\n    const json_ref& root_files,\n    w_string_piece& resolved,\n    w_string_piece& relpath);\n\n// Resolve the root. Failure will throw a RootResolveError exception\nstd::shared_ptr<watchman::Root> resolveRoot(\n    watchman::Client* client,\n    const json_ref& args);\n\n// Resolve the root, or if not found and the configuration permits,\n// attempt to create it. throws RootResolveError on failure.\nstd::shared_ptr<watchman::Root> resolveOrCreateRoot(\n    watchman::Client* client,\n    const json_ref& args);\n\n// Similar to resolveRoot() or resolveOrCreateRoot() but takes a root\n// string instead of json_ref.\nstd::shared_ptr<watchman::Root> resolveRootByName(\n    watchman::Client* client,\n    const char* rootName,\n    bool create = false);\n\nvoid add_root_warnings_to_response(\n    watchman::UntypedResponse& response,\n    const std::shared_ptr<watchman::Root>& root);\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/watchman_dir.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <unordered_map>\n#include \"watchman/watchman_string.h\"\n\nstruct watchman_file;\n\nstruct watchman_dir {\n  /* the name of this dir, relative to its parent\n   * for root (parent == nullptr), name is usually an absolute path */\n  w_string name;\n  /* the parent dir */\n  watchman_dir* parent;\n\n  /* files contained in this dir (keyed by file->name) */\n  struct Deleter {\n    void operator()(watchman_file*) const;\n  };\n  std::unordered_map<w_string_piece, std::unique_ptr<watchman_file, Deleter>>\n      files;\n\n  /* child dirs contained in this dir (keyed by dir->name) */\n  std::unordered_map<w_string_piece, std::unique_ptr<watchman_dir>> dirs;\n\n  // If we think this dir was deleted, we'll avoid recursing\n  // to its children when processing deletes.\n  bool last_check_existed{true};\n\n  watchman_dir(w_string name, watchman_dir* parent);\n\n  watchman_dir* getChildDir(w_string_piece name) const;\n\n  /**\n   * Returns the direct child file named name, or nullptr if there is no such\n   * entry.\n   */\n  watchman_file* getChildFile(w_string_piece name) const;\n\n  /**\n   * Walk up to the chain of dirs via ->parent to and then produce the full path\n   * to this dir.\n   *\n   * Practically, the root watchman_dir's name is often set to an absolute path\n   * of the root, so this function returns an absolute path of the dir.\n   *\n   * If the root watchman_dir has an empty name, then this function returns\n   * a path relative to the root of the watch.\n   */\n  w_string getFullPath() const;\n\n  /**\n   * Compute the full path to this dir and concatenate child with it, to produce\n   * the path to the child.\n   */\n  w_string getFullPathToChild(w_string_piece child) const;\n};\n"
  },
  {
    "path": "watchman/watchman_file.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/Clock.h\"\n#include \"watchman/fs/FileInformation.h\"\n#include \"watchman/watchman_dir.h\"\n\nstruct watchman_file {\n  /* the parent dir */\n  watchman_dir* parent;\n\n  /* linkage to files ordered by changed time.\n   * prev points to the address of `next` in the\n   * previous file node, or the head of the list. */\n  struct watchman_file **prev, *next;\n\n  /* the time we last observed a change to this file */\n  watchman::ClockStamp otime;\n  /* the time we first observed this file OR the time\n   * that this file switched from !exists to exists.\n   * This is thus the \"created time\" */\n  watchman::ClockStamp ctime;\n\n  /* whether we believe that this file still exists */\n  bool exists;\n  /* whether we think this file might not exist */\n  bool maybe_deleted;\n\n  /* cache stat results so we can tell if an entry\n   * changed */\n  watchman::FileInformation stat;\n\n  inline w_string_piece getName() const {\n    uint32_t len;\n    memcpy(&len, this + 1, 4);\n    return w_string_piece(reinterpret_cast<const char*>(this + 1) + 4, len);\n  }\n\n  void removeFromFileList();\n\n  watchman_file() = delete;\n  watchman_file(const watchman_file&) = delete;\n  watchman_file& operator=(const watchman_file&) = delete;\n  ~watchman_file();\n\n  static std::unique_ptr<watchman_file, watchman_dir::Deleter> make(\n      const w_string& name,\n      watchman_dir* parent);\n};\n\nvoid free_file_node(struct watchman_file* file);\n"
  },
  {
    "path": "watchman/watchman_preprocessor.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n// Helpers for pasting __LINE__ for symbol generation\n#define w_paste2(pre, post) pre##post\n#define w_paste1(pre, post) w_paste2(pre, post)\n#define w_gen_symbol(pre) w_paste1(pre, __LINE__)\n\n#if _MSC_VER >= 1400\n#include <sal.h> // @manual\n#if _MSC_VER > 1400\n#define WATCHMAN_FMT_STRING(x) _Printf_format_string_ x\n#else\n#define WATCHMAN_FMT_STRING(x) __format_string x\n#endif\n#else\n#define WATCHMAN_FMT_STRING(x) x\n#endif\n\n#ifdef __GNUC__\n#define WATCHMAN_FMT_ATTR(fmt_param_no, dots_param_no) \\\n  __attribute__((__format__(__printf__, fmt_param_no, dots_param_no)))\n#endif\n\n#ifndef WATCHMAN_FMT_ATTR\n#define WATCHMAN_FMT_ATTR(fmt_param_no, dots_param_no) /* nothing */\n#endif\n"
  },
  {
    "path": "watchman/watchman_stream.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include <memory>\n#include \"watchman/fs/FileDescriptor.h\"\n\n// Very limited stream abstraction to make it easier to\n// deal with portability between Windows and POSIX.\n\nnamespace watchman {\n\nclass Event {\n public:\n  virtual ~Event() = default;\n  virtual void notify() = 0;\n  virtual bool testAndClear() = 0;\n  virtual FileDescriptor::system_handle_type system_handle() = 0;\n  virtual bool isSocket() = 0;\n};\n\nclass Stream {\n public:\n  virtual ~Stream() = default;\n  virtual int read(void* buf, int size) = 0;\n  virtual int write(const void* buf, int size) = 0;\n  virtual Event* getEvents() = 0;\n  virtual void setNonBlock(bool nonBlock) = 0;\n  virtual bool rewind() = 0;\n  virtual bool shutdown() = 0;\n  virtual bool peerIsOwner() = 0;\n  virtual pid_t getPeerProcessID() const = 0;\n  virtual const FileDescriptor& getFileDescriptor() const = 0;\n};\n\nstruct EventPoll {\n  Event* evt;\n  bool ready;\n};\n\n} // namespace watchman\n\nusing watchman_event = watchman::Event;\nusing watchman_stream = watchman::Stream;\n\n// Make a event that can be manually signalled\nstd::unique_ptr<watchman_event> w_event_make_sockets();\nstd::unique_ptr<watchman_event> w_event_make_named_pipe();\n\n// Go to sleep for up to timeoutms.\n// Returns sooner if any of the watchman_event objects referenced\n// in the array P are signalled\nint w_poll_events_named_pipe(watchman::EventPoll* p, int n, int timeoutms);\nint w_poll_events_sockets(watchman::EventPoll* p, int n, int timeoutms);\nint w_poll_events(watchman::EventPoll* p, int n, int timeoutms);\n\nwatchman_stream* w_stm_stdout();\nwatchman_stream* w_stm_stdin();\nwatchman::ResultErrno<std::unique_ptr<watchman_stream>> w_stm_connect_unix(\n    const char* path,\n    int timeoutms);\n#ifdef _WIN32\nstd::unique_ptr<watchman_stream> w_stm_connect_named_pipe(\n    const char* path,\n    int timeoutms);\nwatchman::FileDescriptor w_handle_open(const char* path, int flags);\n#endif\nstd::unique_ptr<watchman_stream> w_stm_fdopen(watchman::FileDescriptor&& fd);\nstd::unique_ptr<watchman_stream> w_stm_fdopen_windows(\n    watchman::FileDescriptor&& fd);\nstd::unique_ptr<watchman_stream> w_stm_open(const char* path, int flags, ...);\n\n// Make a temporary file name and open it.\n// Marks the file as CLOEXEC\nstd::unique_ptr<watchman_stream> w_mkstemp(char* templ);\n"
  },
  {
    "path": "watchman/watchman_string.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n\n#include \"watchman/watchman_system.h\"\n\n#include <fmt/core.h>\n#include <folly/FBString.h>\n\n#include <stdint.h>\n#include <string.h>\n\n#include <atomic>\n#include <initializer_list>\n#include <iterator>\n#include <memory>\n#include <optional>\n#include <string>\n#include <string_view>\n\nclass w_string_piece;\n\nenum w_string_type_t : uint8_t {\n  W_STRING_BYTE,\n  W_STRING_UNICODE,\n  W_STRING_MIXED\n};\n\n// Assume 64-bit platforms for now. 32-bit platforms should have a separate\n// 32-bit flag next to the reference count.\nstatic_assert(sizeof(size_t) == 8);\n\n// Required for fmt 10\ninline uint8_t format_as(w_string_type_t type) {\n  return static_cast<uint8_t>(type);\n}\n\nnamespace watchman {\n\n/**\n * To pack StringHeader into 16 bytes, Watchman uses a 32-bit hash scheme. It's\n * important to hold the invariant that std::hash<w_string> ==\n * std::hash<w_string_piece>, so if we replace w_string_piece with\n * std::string_view, StringHeader will need to become 20 or 24 bytes.\n */\nusing StringHash = uint32_t;\n\n/**\n * w_string is a heap-allocated string buffer with a fixed-size header and\n * variable-size contents.\n */\nstruct StringHeader {\n  // Bottom 2 bits are w_string_type_t.\n  // Third bit is whether _hval is computed.\n  // Remaining 61 bits are the reference count. At 10 nanoseconds per increment,\n  // overflow would take over 700 years.\n  std::atomic<size_t> refcnt;\n  uint32_t len;\n  std::atomic<StringHash> _hval;\n\n  StringHeader(w_string_type_t type, uint32_t len)\n      : refcnt{static_cast<size_t>(type) | kRefIncrement}, len{len} {}\n\n  bool has_hval() const {\n    return refcnt.load(std::memory_order_acquire) & kHasHval;\n  }\n\n  void set_hval_computed() {\n    refcnt.fetch_or(kHasHval, std::memory_order_acq_rel);\n  }\n\n  w_string_type_t get_type() const {\n    return static_cast<w_string_type_t>(\n        refcnt.load(std::memory_order_relaxed) & kTypeMask);\n  }\n\n  void addref() {\n    refcnt.fetch_add(kRefIncrement, std::memory_order_relaxed);\n  }\n\n  // Returns true if this was the final reference, indicating the string\n  // should be destroyed.\n  bool decref() {\n    // In the common case that the reference count is 1, we can avoid an\n    // expensive atomic RMW (e.g. lock xadd) with a single load. This saves a\n    // dozen or two cycles.\n    //\n    // This is safe because, if the reference count is 1, we have exclusive\n    // ownership of the object. Therefore, the reference count cannot climb\n    // to 2. (It is UB to destroy an object while another thread copies it.)\n    //\n    // This technique is surprisingly uncommon, but it shows up in abseil:\n    // https://github.com/abseil/abseil-cpp/blob/4a1ccf16ed98c876bf1e1985afb080baeff5101f/absl/strings/internal/cord_internal.h#L114\n    return (\n        kRefIncrement == (refcnt.load(std::memory_order_acquire) & kRefMask) ||\n        kRefIncrement ==\n            (refcnt.fetch_sub(kRefIncrement, std::memory_order_acq_rel) &\n             kRefMask));\n  }\n\n  /**\n   * Allocates storage for length + 1 bytes.\n   */\n  static StringHeader* alloc(uint32_t length, w_string_type_t type) {\n    void* s = malloc(sizeof(StringHeader) + length + 1);\n    if (!s) {\n      throw std::bad_alloc{};\n    }\n    new (s) StringHeader(type, length);\n    return static_cast<StringHeader*>(s);\n  }\n\n  char* buf() {\n    return reinterpret_cast<char*>(this + 1);\n  }\n\n  const char* buf() const {\n    return reinterpret_cast<const char*>(this + 1);\n  }\n\n  static constexpr uint8_t kTypeMask = 3ull;\n  static constexpr size_t kHasHval = 1ull << 2ull;\n  static constexpr size_t kRefShift = 3ull;\n  static constexpr size_t kRefIncrement = 1ull << kRefShift;\n  static constexpr size_t kRefMask = ~(kRefIncrement - 1);\n};\n\n} // namespace watchman\n\n/**\n * Trims all trailing slashes from a path.\n */\nw_string_piece w_string_canon_path(w_string_piece str);\n\n/**\n * Returns true if the specified string is an absolute path.\n * On Windows, this accounts for UNC paths (which are absolute) and\n * drive-relative paths (which are not).\n */\nbool w_string_path_is_absolute(w_string_piece path);\n\nuint32_t strlen_uint32(const char* str);\n\ninline bool is_slash(char c) {\n  return c == '/'\n#ifdef _WIN32\n      || c == '\\\\'\n#endif\n      ;\n}\n\nclass w_string;\n\n/** Represents a view over some externally managed string storage.\n * It is simply a pair of pointers that define the start and end\n * of the valid region. */\nclass w_string_piece {\n  using StringHash = watchman::StringHash;\n\n  const char* str_;\n  size_t len_;\n\n public:\n  w_string_piece() : str_{nullptr}, len_{0} {}\n\n  /* implicit */ w_string_piece(const std::string& str)\n      : str_{str.data()}, len_{str.size()} {}\n\n  /* implicit */ w_string_piece(const folly::fbstring& str)\n      : str_{str.data()}, len_{str.size()} {}\n\n  /* implicit */ w_string_piece(std::nullptr_t) = delete;\n\n  /* implicit */ w_string_piece(const char* cstr)\n      : str_(cstr), len_(strlen(cstr)) {}\n\n  w_string_piece(const char* cstr, size_t len) : str_(cstr), len_(len) {}\n\n  w_string_piece(const char* begin, const char* end)\n      : str_{begin}, len_{static_cast<size_t>(end - begin)} {\n    assert(end >= begin);\n  }\n\n  /* implicit */ w_string_piece(std::string_view sv)\n      : w_string_piece{sv.data(), sv.size()} {}\n\n  w_string_piece(const w_string_piece& other) = default;\n  w_string_piece& operator=(const w_string_piece& other) = default;\n  w_string_piece(w_string_piece&& other) noexcept;\n\n  const char* data() const noexcept {\n    return str_;\n  }\n\n  bool empty() const noexcept {\n    return len_ == 0;\n  }\n\n  size_t size() const noexcept {\n    return len_;\n  }\n\n  const char& operator[](size_t i) const noexcept {\n    return str_[i];\n  }\n\n  /** move the start of the string by n characters, stripping off that prefix */\n  void advance(size_t n) {\n    if (n > len_) {\n      throw std::range_error(\"index out of range\");\n    }\n    str_ += n;\n    len_ -= n;\n  }\n\n  /** Return a copy of the string as a w_string */\n  w_string asWString(w_string_type_t stringType = W_STRING_BYTE) const;\n\n  /** Return a lowercased copy of the string */\n  w_string asLowerCase(w_string_type_t stringType = W_STRING_BYTE) const;\n\n  /** Return a lowercased copy of the suffix */\n  std::optional<w_string> asLowerCaseSuffix(\n      w_string_type_t stringType = W_STRING_BYTE) const;\n\n  /** Return a UTF-8-clean copy of the string */\n  w_string asUTF8Clean() const;\n\n  /** Returns true if the filename suffix of this string matches\n   * the provided suffix, which must be lower cased.\n   * This string piece lower cased and matched against suffix */\n  bool hasSuffix(w_string_piece suffix) const;\n\n  bool pathIsAbsolute() const;\n  bool pathIsEqual(w_string_piece other) const;\n  w_string_piece dirName() const;\n  w_string_piece baseName() const;\n  w_string_piece suffix() const;\n\n  /** Split the string by delimiter and emit to the provided vector */\n  template <typename Vector>\n  void split(Vector& result, char delim) const {\n    const char* begin = str_;\n    const char* const end = str_ + len_;\n    const char* it = begin;\n    while (it != end) {\n      if (*it == delim) {\n        result.emplace_back(begin, it - begin);\n        begin = ++it;\n        continue;\n      }\n      ++it;\n    }\n\n    if (begin != end) {\n      result.emplace_back(begin, end - begin);\n    }\n  }\n\n  std::string string() const {\n    return std::string{view()};\n  }\n\n  std::string_view view() const {\n    return std::string_view{str_, len_};\n  }\n\n  friend bool operator==(w_string_piece lhs, w_string_piece rhs) {\n    return lhs.view() == rhs.view();\n  }\n\n  friend bool operator!=(w_string_piece lhs, w_string_piece rhs) {\n    return lhs.view() != rhs.view();\n  }\n\n  friend bool operator<(w_string_piece lhs, w_string_piece rhs) {\n    return lhs.view() < rhs.view();\n  }\n\n  bool contains(w_string_piece needle) const;\n  bool startsWith(w_string_piece prefix) const;\n  bool startsWithCaseInsensitive(w_string_piece prefix) const;\n\n  // Compute a hash value for this piece\n  StringHash hashValue() const noexcept;\n\n#ifdef _WIN32\n  // Returns a wide character representation of the piece\n  std::wstring asWideUNC() const;\n#endif\n};\n\nbool w_string_equal_caseless(w_string_piece a, w_string_piece b);\n\n/**\n * w_string is a reference-counted, immutable, 8-bit string type.\n * It can hold known-unicode text, known-binary data, or a mixture of both.\n * The default-initialized and moved-from w_string values are empty.\n */\nclass w_string {\n  using StringHash = watchman::StringHash;\n  using StringHeader = watchman::StringHeader;\n\n public:\n  /**\n   * Constructs an empty string.\n   */\n  w_string() = default;\n\n  /* implicit */ w_string(std::nullptr_t) = delete;\n\n  /**\n   * Make a new string from some bytes and a type.\n   */\n  w_string(\n      const char* buf,\n      size_t len,\n      w_string_type_t stringType = W_STRING_BYTE);\n\n  /**\n   * Make a new string from a null-terminated array.\n   */\n  /* implicit */ w_string(\n      const char* buf,\n      w_string_type_t stringType = W_STRING_BYTE);\n\n  explicit w_string(std::string_view sv) : w_string{sv.data(), sv.size()} {}\n\n  /**\n   * Copy a std::string into a w_string.\n   */\n  explicit w_string(const std::string& str)\n      : w_string{str.data(), str.size()} {}\n\n#ifdef _WIN32\n  /** Convert a wide character path to utf-8 and return it as a w_string.\n   * This constructor is intended only for path names and not as a general\n   * WCHAR -> w_string constructor; it will always apply path mapping\n   * logic to the result and may mangle non-pathname strings if they\n   * are passed to it. */\n  w_string(const WCHAR* wpath, size_t len);\n#endif\n\n  /** Private constructor. Takes ownership of StringHeader*. */\n  explicit w_string(StringHeader* str) : str_{str} {}\n\n  ~w_string();\n\n  /** Copying adds a ref */\n  w_string(const w_string& other);\n  w_string& operator=(const w_string& other);\n\n  /** Moving steals a ref */\n  w_string(w_string&& other) noexcept;\n  w_string& operator=(w_string&& other) noexcept;\n\n  /**\n   * Stop tracking the underlying string object, decrementing the reference\n   * count.\n   */\n  void reset() noexcept;\n\n  StringHash hashValue() const noexcept {\n    if (str_) {\n      if (str_->has_hval()) {\n        return str_->_hval.load(std::memory_order_acquire);\n      } else {\n        // It's okay to race has computation: hashing is cheaper than blocking.\n        return computeAndStoreHash();\n      }\n    } else {\n      return w_string_piece{}.hashValue();\n    }\n  }\n\n  /**\n   * Returns a copy of this w_string's data as a std::string.\n   */\n  std::string string() const {\n    return std::string{view()};\n  }\n\n  /**\n   * Returns a std::string_view covering this w_string's data. Returns the empty\n   * string_view if null.\n   */\n  std::string_view view() const noexcept {\n    if (str_ == nullptr) {\n      return {};\n    }\n    return std::string_view(data(), size());\n  }\n\n  /**\n   * Returns a w_string_piece covering this w_string's data. Returns the empty\n   * w_string_piece if null.\n   */\n  w_string_piece piece() const noexcept {\n    if (str_ == nullptr) {\n      return w_string_piece();\n    }\n    return w_string_piece(data(), size());\n  }\n\n  operator w_string_piece() const noexcept {\n    return piece();\n  }\n\n  bool operator==(const w_string& other) const;\n  bool operator!=(const w_string& other) const;\n  bool operator<(const w_string& other) const;\n\n  friend bool operator==(const w_string& lhs, const char* rhs) {\n    return lhs.view() == rhs;\n  }\n\n  friend bool operator!=(const w_string& lhs, const char* rhs) {\n    return lhs.view() != rhs;\n  }\n\n  friend bool operator==(const char* lhs, const w_string& rhs) {\n    return lhs == rhs.view();\n  }\n\n  friend bool operator!=(const char* lhs, const w_string& rhs) {\n    return lhs != rhs.view();\n  }\n\n  friend bool operator==(const w_string& lhs, std::nullptr_t) {\n    return lhs.str_ == nullptr;\n  }\n\n  friend bool operator!=(const w_string& lhs, std::nullptr_t) {\n    return lhs.str_ != nullptr;\n  }\n\n  friend bool operator==(std::nullptr_t, const w_string& rhs) {\n    return nullptr == rhs.str_;\n  }\n\n  friend bool operator!=(std::nullptr_t, const w_string& rhs) {\n    return nullptr != rhs.str_;\n  }\n\n  /**\n   * Generates a w_string with a known size by calling a function to\n   * produce the contents.\n   */\n  template <typename Fn>\n  static w_string generate(uint32_t size, w_string_type_t type, Fn&& fn) {\n    auto* s = StringHeader::alloc(size, type);\n    w_string rv{s}; // Will deallocate if fn fails.\n    char* buf = s->buf();\n    fn(buf);\n    buf[size] = 0;\n    return rv;\n  }\n\n  /** path concatenation\n   * Pass in a list of w_string_pieces to join them all similarly to\n   * the python os.path.join() function. */\n  static w_string pathCat(std::initializer_list<w_string_piece> elems);\n\n  /** build a w_string by concatenating the string formatted representation\n   * of each of the supplied arguments */\n  template <typename... Args>\n  static w_string build(Args&&... args) {\n    static const char format_str[] = \"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}\";\n    static_assert(\n        sizeof...(args) <= sizeof(format_str) / 2,\n        \"too many args passed to w_string::build\");\n    return w_string::format(\n        fmt::string_view(format_str, sizeof...(args) * 2),\n        std::forward<Args>(args)...);\n  }\n\n  /** Construct a new string using the `fmt` formatting library.\n   * Syntax: https://fmt.dev/latest/syntax.html\n   */\n  template <typename... Args>\n  static w_string format(fmt::string_view format_str, Args&&... args) {\n    uint32_t size = fmt::formatted_size(fmt::runtime(format_str), args...);\n    return w_string::generate(size, W_STRING_BYTE, [&](char* buf) {\n      fmt::format_to(buf, fmt::runtime(format_str), args...);\n    });\n  }\n\n  /** Return a possibly new version of this string that has its separators\n   * normalized to unix slashes */\n  w_string normalizeSeparators(char targetSeparator = '/') const;\n\n  /** Returns a pointer to a null terminated c-string. */\n  const char* c_str() const {\n    return data();\n  }\n  const char* data() const {\n    return str_ ? str_->buf() : nullptr;\n  }\n\n  bool empty() const {\n    return str_ ? (str_->len == 0) : true;\n  }\n\n  size_t size() const {\n    return str_ ? str_->len : 0;\n  }\n\n  w_string_type_t type() const {\n    // Empty strings are known unicode.\n    return str_ ? str_->get_type() : W_STRING_UNICODE;\n  }\n\n  /** Returns the directory component of the string, assuming a path string */\n  w_string dirName() const;\n  /** Returns the file name component of the string, assuming a path string */\n  w_string baseName() const;\n  /** Returns the filename suffix of a path string */\n  std::optional<w_string> asLowerCaseSuffix() const;\n\n private:\n  StringHash computeAndStoreHash() const noexcept;\n\n  StringHeader* str_ = nullptr;\n};\n\n/** Allow w_string to act as a key in unordered_(map|set) */\nnamespace std {\ntemplate <>\nstruct hash<w_string> {\n  std::size_t operator()(w_string const& str) const noexcept {\n    return str.hashValue();\n  }\n};\ntemplate <>\nstruct hash<w_string_piece> {\n  std::size_t operator()(w_string_piece const& str) const noexcept {\n    return str.hashValue();\n  }\n};\n} // namespace std\n\n// Streaming operators for logging and printing\nstd::ostream& operator<<(std::ostream& stream, const w_string& a);\nstd::ostream& operator<<(std::ostream& stream, const w_string_piece& a);\n\n// Allow formatting w_string and w_string_piece\nnamespace fmt {\ntemplate <>\nstruct formatter<w_string> {\n  template <typename ParseContext>\n  constexpr auto parse(ParseContext& ctx) const {\n    return ctx.begin();\n  }\n\n  template <typename FormatContext>\n  auto format(const w_string& s, FormatContext& ctx) const {\n    return fmt::format_to(ctx.out(), \"{}\", s.view());\n  }\n};\n\ntemplate <>\nstruct formatter<w_string_piece> {\n  template <typename ParseContext>\n  constexpr auto parse(ParseContext& ctx) const {\n    return ctx.begin();\n  }\n\n  template <typename FormatContext>\n  auto format(const w_string_piece& s, FormatContext& ctx) const {\n    return fmt::format_to(ctx.out(), \"{}\", s.view());\n  }\n};\n} // namespace fmt\n\n/**\n * Write as many characters from the beginning of `piece` into `array` as will\n * fit. If the string is too long, the truncated characters are replaced with\n * \"...\".\n *\n * This function primarily exists for fixed-size, in-memory logging.\n *\n * The resulting array may not be null-terminated. Use strnlen to compute its\n * length.\n */\ntemplate <size_t N>\nvoid storeTruncatedHead(char (&array)[N], w_string_piece piece) {\n  if (piece.size() > N) {\n    memcpy(array, piece.data(), N - 3);\n    array[N - 3] = '.';\n    array[N - 2] = '.';\n    array[N - 1] = '.';\n  } else {\n    memcpy(array, piece.data(), piece.size());\n    if (piece.size() < N) {\n      array[piece.size()] = 0;\n    }\n  }\n}\n\n/**\n * Write as many characters from the end of `piece` into `array` as will\n * fit. If the string is too long, the truncated characters are replaced with\n * \"...\".\n *\n * This function primarily exists for fixed-size, in-memory logging.\n *\n * The resulting array may not be null-terminated. Use strnlen to compute its\n * length.\n */\ntemplate <size_t N>\nvoid storeTruncatedTail(char (&array)[N], w_string_piece piece) {\n  if (piece.size() > N) {\n    array[0] = '.';\n    array[1] = '.';\n    array[2] = '.';\n    memcpy(array + 3, piece.data() + piece.size() - (N - 3), N - 3);\n  } else {\n    memcpy(array, piece.data(), piece.size());\n    if (piece.size() < N) {\n      array[piece.size()] = 0;\n    }\n  }\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/watchman_system.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#ifndef WATCHMAN_SYSTEM_H\n#define WATCHMAN_SYSTEM_H\n\n#ifndef _GNU_SOURCE\n#define _GNU_SOURCE 1\n#endif\n#define __STDC_LIMIT_MACROS\n#define __STDC_FORMAT_MACROS\n#include <folly/portability/SysTypes.h>\n#include \"watchman/config.h\"\n\n// This header plays tricks with posix IO functions and\n// can result in ambiguous overloads on Windows if io.h\n// is included before this header, so we pull it in early.\n#include <folly/portability/Unistd.h>\n\n#ifdef _WIN32\n#define _CRT_SECURE_NO_WARNINGS 1\n\n#define _ALLOW_KEYWORD_MACROS\n#ifndef __cplusplus\n#define inline __inline\n#endif\n\n// Tell windows.h not to #define min/max\n#ifndef NOMINMAX\n#define NOMINMAX\n#endif\n\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#define EX_USAGE 1\n#include <errno.h>\n#include <process.h> // @manual\n#include <stdarg.h>\n#include <stdint.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/types.h>\n#include <time.h>\n#include <windows.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef ptrdiff_t ssize_t;\n\n#define snprintf _snprintf\nchar* dirname(char* path);\n\n#define STDIN_FILENO 0\n#define STDOUT_FILENO 1\n#define STDERR_FILENO 2\n\nchar* realpath(const char* filename, char* target);\n\n#define O_DIRECTORY _O_OBTAIN_DIR\n#define O_CLOEXEC _O_NOINHERIT\n#define O_NOFOLLOW 0 /* clowny, but there's no translation */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // WIN32\n\n#ifdef WATCHMAN_FACEBOOK_INTERNAL\n#include \"common/base/BuildInfo.h\"\n#undef PACKAGE_VERSION\n#undef WATCHMAN_BUILD_INFO\n#define PACKAGE_VERSION BuildInfo_kTimeISO8601\n#define WATCHMAN_BUILD_INFO BuildInfo_kUpstreamRevision\n#endif\n\n#include <assert.h>\n#include <ctype.h>\n#include <stdint.h>\n#include <sys/stat.h>\n#if HAVE_SYS_INOTIFY_H\n#include <sys/inotify.h>\n#endif\n#if HAVE_SYS_EVENT_H\n#include <sys/event.h> // @manual\n#endif\n#if HAVE_PORT_H\n#include <port.h> // @manual\n#endif\n#include <errno.h>\n#include <signal.h>\n#include <sys/types.h>\n#ifndef _WIN32\n#include <grp.h>\n#include <libgen.h>\n#endif\n#include <inttypes.h>\n#include <limits.h>\n#ifndef _WIN32\n#include <sys/socket.h>\n#include <sys/un.h>\n#endif\n#include <fcntl.h>\n#if defined(__linux__) && !defined(O_CLOEXEC)\n#define O_CLOEXEC 02000000 /* set close_on_exec, from asm/fcntl.h */\n#endif\n#ifndef O_CLOEXEC\n#define O_CLOEXEC 0\n#endif\n#ifndef _WIN32\n#include <poll.h>\n#include <sys/wait.h>\n#endif\n#ifdef HAVE_EXECINFO_H\n#include <execinfo.h>\n#endif\n#ifndef _WIN32\n#include <pwd.h>\n#include <sys/uio.h>\n#include <sysexits.h>\n#endif\n#ifdef HAVE_SYS_PARAM_H\n#include <sys/param.h>\n#endif\n#ifdef HAVE_SYS_RESOURCE_H\n#include <sys/resource.h>\n#endif\n\n#if defined(__clang__)\n#if __has_feature(address_sanitizer)\n#define WATCHMAN_ASAN 1\n#endif\n#elif defined(__GNUC__) &&                                             \\\n    (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || (__GNUC__ >= 5)) && \\\n    __SANITIZE_ADDRESS__\n#define WATCHMAN_ASAN 1\n#endif\n\n#ifndef WATCHMAN_ASAN\n#define WATCHMAN_ASAN 0\n#endif\n\n#ifdef HAVE_CORESERVICES_CORESERVICES_H\n#include <CoreServices/CoreServices.h> // @manual\n#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070\n#define HAVE_FSEVENTS 0\n#else\n#define HAVE_FSEVENTS 1\n#endif\n#endif\n\n// We make use of constructors to glue together modules\n// without maintaining static lists of things in the build\n// configuration.  These are helpers to make this work\n// more portably\n#ifdef _WIN32\n#define w_ctor_fn_type(sym) void sym()\n// Define a helper struct and its constructor; the constructor\n// will call the function symbol we desire.  Also emit an\n// instance of this struct as a global.  It will be triggered\n// prior to main() being invoked.\n#define w_ctor_fn_reg(sym)            \\\n  static struct w_paste1(sym, _reg) { \\\n    w_paste1(sym, _reg)() {           \\\n      sym();                          \\\n    }                                 \\\n  } w_paste1(sym, _reg_inst);\n\n#else\n#define w_ctor_fn_type(sym) __attribute__((constructor)) void sym()\n#define w_ctor_fn_reg(sym) /* not needed */\n#endif\n\n/* sane, reasonably large filename size that we'll use\n * throughout; POSIX seems to define smallish buffers\n * that seem risky */\n#define WATCHMAN_NAME_MAX 4096\n\n// rpmbuild may enable fortify which turns on\n// warn_unused_result on a number of system functions.\n// This gives us a reasonably clean way to suppress\n// these warnings when we're using stack protection.\n#if __USE_FORTIFY_LEVEL > 0\n#define ignore_result(x)    \\\n  do {                      \\\n    __typeof__(x) _res = x; \\\n    (void)_res;             \\\n  } while (0)\n#elif _MSC_VER >= 1400\n#define ignore_result(x) \\\n  do {                   \\\n    int _res = (int)x;   \\\n    (void)_res;          \\\n  } while (0)\n#else\n#define ignore_result(x) x\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef _WIN32\n// Not explicitly exported on Darwin, so we get to define it.\nextern char** environ;\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "watchman/watchman_time.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#pragma once\n#include <folly/portability/SysTime.h>\n#include <chrono>\n#include \"watchman/watchman_system.h\"\n\n/* Return a timespec holding the equivalent of the supplied duration */\ntemplate <class Rep, class Period>\ninline timespec durationToTimeSpecDuration(\n    const std::chrono::duration<Rep, Period>& d) {\n  timespec ts{0, 0};\n\n  ts.tv_sec = std::chrono::duration_cast<std::chrono::seconds>(d).count();\n  auto nsec = std::chrono::duration_cast<std::chrono::nanoseconds>(\n                  d - std::chrono::seconds(ts.tv_sec))\n                  .count();\n#ifdef _WIN32\n  ts.tv_nsec = long(nsec);\n#else\n  ts.tv_nsec = nsec;\n#endif\n  return ts;\n}\n\n/* Return a timespec holding an absolute time equivalent to the provided\n * system_clock timepoint */\ninline timespec systemClockToTimeSpec(\n    const std::chrono::system_clock::time_point& p) {\n  /* It just so happens that the epoch for system_clock is the same as the\n   * epoch for timespec, so we can use our duration helper on the duration\n   * since the epoch. */\n  return durationToTimeSpecDuration(p.time_since_epoch());\n}\n\n/* compare two timevals and return -1 if a is < b, 0 if a == b,\n * or 1 if b > a */\nstatic inline int w_timeval_compare(struct timeval a, struct timeval b) {\n  if (a.tv_sec < b.tv_sec) {\n    return -1;\n  }\n  if (a.tv_sec > b.tv_sec) {\n    return 1;\n  }\n  if (a.tv_usec < b.tv_usec) {\n    return -1;\n  }\n  if (a.tv_usec > b.tv_usec) {\n    return 1;\n  }\n  return 0;\n}\n\n#define WATCHMAN_USEC_IN_SEC 1000000\n#define WATCHMAN_NSEC_IN_USEC 1000\n#define WATCHMAN_NSEC_IN_SEC (1000 * 1000 * 1000)\n#define WATCHMAN_NSEC_IN_MSEC 1000000\n\n#if defined(__APPLE__) || defined(__FreeBSD__) || \\\n    (defined(__NetBSD__) && (__NetBSD_Version__ < 6099000000))\n/* BSD-style subsecond timespec */\n#define WATCHMAN_ST_TIMESPEC(type) st_##type##timespec\n#else\n/* POSIX standard timespec */\n#define WATCHMAN_ST_TIMESPEC(type) st_##type##tim\n#endif\n\nstatic inline void w_timeval_add(\n    const struct timeval a,\n    const struct timeval b,\n    struct timeval* result) {\n  result->tv_sec = a.tv_sec + b.tv_sec;\n  result->tv_usec = a.tv_usec + b.tv_usec;\n\n  if (result->tv_usec > WATCHMAN_USEC_IN_SEC) {\n    result->tv_sec++;\n    result->tv_usec -= WATCHMAN_USEC_IN_SEC;\n  }\n}\n\nstatic inline void w_timeval_sub(\n    const struct timeval a,\n    const struct timeval b,\n    struct timeval* result) {\n  result->tv_sec = a.tv_sec - b.tv_sec;\n  result->tv_usec = a.tv_usec - b.tv_usec;\n\n  if (result->tv_usec < 0) {\n    result->tv_sec--;\n    result->tv_usec += WATCHMAN_USEC_IN_SEC;\n  }\n}\n\nstatic inline void w_timeval_to_timespec(\n    const struct timeval a,\n    struct timespec* ts) {\n#ifdef _WIN32\n  ts->tv_sec = long(a.tv_sec);\n#else\n  ts->tv_sec = a.tv_sec;\n#endif\n  ts->tv_nsec = a.tv_usec * WATCHMAN_NSEC_IN_USEC;\n}\n\nstatic inline void w_timespec_to_timeval(\n    const struct timespec ts,\n    struct timeval* tv) {\n#ifdef _WIN32\n  tv->tv_sec = long(ts.tv_sec);\n#else\n  tv->tv_sec = ts.tv_sec;\n#endif\n  tv->tv_usec = ts.tv_nsec / WATCHMAN_NSEC_IN_USEC;\n}\n\n// Convert a timeval to a double that holds the fractional number of seconds\nstatic inline double w_timeval_abs_seconds(struct timeval tv) {\n  double val = (double)tv.tv_sec;\n  val += ((double)tv.tv_usec) / WATCHMAN_USEC_IN_SEC;\n  return val;\n}\n\nstatic inline double w_timeval_diff(struct timeval start, struct timeval end) {\n  double s = start.tv_sec + ((double)start.tv_usec) / WATCHMAN_USEC_IN_SEC;\n  double e = end.tv_sec + ((double)end.tv_usec) / WATCHMAN_USEC_IN_SEC;\n\n  return e - s;\n}\n"
  },
  {
    "path": "watchman/winbuild/BUCK",
    "content": "load(\"@fbcode_macros//build_defs:cpp_binary.bzl\", \"cpp_binary\")\n\noncall(\"scm_client_infra\")\n\ncpp_binary(\n    name = \"susres\",\n    srcs = [\"susres.cpp\"],\n    compatible_with = [\n        \"ovr_config//os:windows\",\n    ],\n    deps = [\n        \"fbsource//third-party/fmt:fmt\",\n    ],\n)\n"
  },
  {
    "path": "watchman/winbuild/susres.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n#include <errno.h>\n#include <fmt/core.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <windows.h>\n\n// Super simple utility to suspend or resume all threads in a target process.\n// We use this in place of `kill -STOP` and `kill -CONT`\n\ntypedef LONG(NTAPI* sus_res_func)(HANDLE proc);\n\nconst char* win32_strerror(DWORD err) {\n  static char msgbuf[1024];\n  FormatMessageA(\n      FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\n      nullptr,\n      err,\n      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),\n      msgbuf,\n      sizeof(msgbuf) - 1,\n      nullptr);\n  return msgbuf;\n}\n\nint apply(DWORD pid, BOOL suspend) {\n  sus_res_func func;\n  const char* name = suspend ? \"NtSuspendProcess\" : \"NtResumeProcess\";\n  HANDLE proc;\n  DWORD res;\n\n  func = (sus_res_func)GetProcAddress(GetModuleHandle(\"ntdll\"), name);\n\n  if (!func) {\n    fmt::print(\n        \"Failed to GetProcAddress({}): {}\\n\",\n        name,\n        win32_strerror(GetLastError()));\n    return 1;\n  }\n\n  proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);\n  if (proc == INVALID_HANDLE_VALUE) {\n    fmt::print(\n        \"Failed to OpenProcess({}): {}\\n\", pid, win32_strerror(GetLastError()));\n    return 1;\n  }\n\n  res = func(proc);\n\n  if (res) {\n    fmt::print(\n        \"{}({}) returns {:x}: {}\\n\", name, pid, res, win32_strerror(res));\n  }\n\n  CloseHandle(proc);\n\n  return res == 0 ? 0 : 1;\n}\n\nvoid usage() {\n  fmt::print(\n      \"Usage: susres suspend [pid]\\n\"\n      \"       susres resume  [pid\\n\");\n  exit(1);\n}\n\nint main(int argc, char** argv) {\n  DWORD pid;\n  BOOL suspend;\n\n  if (argc != 3) {\n    usage();\n  }\n\n  if (!strcmp(argv[1], \"suspend\")) {\n    suspend = TRUE;\n  } else if (!strcmp(argv[1], \"resume\")) {\n    suspend = FALSE;\n  } else {\n    usage();\n  }\n\n  pid = _atoi64(argv[2]);\n\n  return apply(pid, suspend);\n}\n\n/* vim:ts=2:sw=2:et:\n */\n"
  },
  {
    "path": "website/.eslintrc.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nconst OFF = 0;\nconst WARNING = 1;\nconst ERROR = 2;\n\nmodule.exports = {\n  root: true,\n  env: {\n    browser: true,\n    commonjs: true,\n    jest: true,\n    node: true,\n  },\n  parser: '@babel/eslint-parser',\n  parserOptions: {\n    allowImportExportEverywhere: true,\n  },\n  extends: ['airbnb', 'prettier'],\n  plugins: ['react-hooks', 'header'],\n  rules: {\n    // Ignore certain webpack alias because it can't be resolved\n    'import/no-unresolved': [\n      ERROR,\n      {ignore: ['^@theme', '^@docusaurus', '^@generated']},\n    ],\n    'import/extensions': OFF,\n    'header/header': [\n      ERROR,\n      'block',\n\n      [\n        '*',\n        ' * Copyright (c) Meta Platforms, Inc. and affiliates.',\n        ' *',\n        ' * This source code is licensed under the MIT license found in the',\n        ' * LICENSE file in the root directory of this source tree.',\n        ' *',\n        // Unfortunately eslint-plugin-header doesn't support optional lines.\n        // If you want to enforce your website JS files to have @flow or @format,\n        // modify these lines accordingly.\n        {\n          pattern: '.* @format',\n        },\n        ' ',\n      ],\n    ],\n    'react/jsx-filename-extension': OFF,\n    'react-hooks/rules-of-hooks': ERROR,\n    'react/prop-types': OFF, // PropTypes aren't used much these days.\n    'react/function-component-definition': [\n      WARNING,\n      {\n        namedComponents: 'function-declaration',\n        unnamedComponents: 'arrow-function',\n      },\n    ],\n  },\n};\n"
  },
  {
    "path": "website/.gitignore",
    "content": "# Dependencies\n/node_modules\n\n# Production\n/build\n\n# Generated files\n.docusaurus\n.cache-loader\n\n# Misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "website/.npmrc",
    "content": "# Stop people use npm instead of yarn by accident\nengine-strict = true\n"
  },
  {
    "path": "website/.prettierignore",
    "content": "node_modules\nbuild\n.docusaurus\n"
  },
  {
    "path": "website/.prettierrc",
    "content": "{\n  \"arrowParens\": \"always\",\n  \"bracketSameLine\": true,\n  \"bracketSpacing\": false,\n  \"printWidth\": 80,\n  \"proseWrap\": \"never\",\n  \"singleQuote\": true,\n  \"trailingComma\": \"all\",\n  \"overrides\": [\n    {\n      \"files\": \"*.md\",\n      \"options\": {\n        \"proseWrap\": \"always\",\n        \"embeddedLanguageFormatting\": \"off\"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "website/.stylelintrc.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nmodule.exports = {\n  plugins: ['stylelint-copyright'],\n  rules: {\n    'docusaurus/copyright-header': true,\n  },\n};\n"
  },
  {
    "path": "website/README.md",
    "content": "# Website\n\nThis website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.\n\n### Installation\n\n```\n$ yarn\n```\n\n### Local Development\n\n```\n$ yarn start\n```\n\nThis command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.\n\n### Build\n\n```\n$ yarn build\n```\n\nThis command generates static content into the `build` directory and can be served using any static contents hosting service.\n"
  },
  {
    "path": "website/babel.config.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nmodule.exports = {\n  presets: [require.resolve('@docusaurus/core/lib/babel/preset')],\n};\n"
  },
  {
    "path": "website/docs/bser.md",
    "content": "---\ntitle: BSER Binary Protocol\ncategory: Internals\n---\n\nThe basic JSON protocol in watchman allows quick and easy integration.\nApplications with higher performance requirements may want to consider the\nbinary protocol instead.\n\nThe binary protocol is enabled by the client sending the byte sequence\n\"\\x00x\\x01\".\n\n## PDU\n\nA PDU is prefixed by its length expressed as an encoded integer. This allows the\npeer to determine how much storage is required to read and decode it.\n\n## Arrays\n\nArrays are indicated by a `0x00` byte value followed by an integer value to\nindicate how many items follow. Then each item is encoded one after the other.\n\n## Objects\n\nObjects are indicated by a `0x01` byte value followed by an integer value to\nindicate the number of properties in the object. Then each key/value pair is\nencoded one after the other.\n\n## Strings\n\nStrings are indicated by a `0x02` byte value followed by an integer value to\nindicate the number of bytes in the string, followed by the bytes of the string.\n\n### Encoding\n\nUnlike JSON, strings are not defined as having any particular encoding; they are\ntransmitted as binary strings. This is because the underlying filesystem APIs\ndon't define any particular encoding for names.\n\n_Exception:_ Keys in objects that are defined by watchman commands are always\nASCII. In general, keys in objects are always UTF-8.\n\n_Rationale:_ Several programming languages like Python 3 expect all text to be\nin a particular encoding and make it inconvenient to pass in bytestrings or\nother encodings. Also, the primary purpose of not defining an encoding is that\nfilenames don't always have one, and filenames are unlikely to show up as keys.\n\n## Integers\n\nAll integers are signed and transmitted in the host byte order of the system\nrunning the watchman daemon.\n\n- `0x03` indicates an int8_t. It is followed by the int8_t value.\n- `0x04` indicates an int16_t. It is followed by the int16_t value.\n- `0x05` indicates an int32_t. It is followed by the int32_t value.\n- `0x06` indicates an int64_t. It is followed by the int64_t value.\n\n## Real\n\nA real number is indicated by a `0x07` byte followed by 8 bytes of double value.\n\n## Boolean\n\n- `0x08` indicates boolean true\n- `0x09` indicates boolean false\n\n## Null\n\n`0x0a` indicates the null value\n\n## Array of Templated Objects\n\n`0x0b` indicates a compact array of objects follows. Some of the bigger\ndatastructures returned by watchman are tabular data expressed as an array of\nobjects. This serialization type factors out the repeated object keys into a\nheader array listing the keys, followed by an array containing all the values of\nthe objects.\n\nTo represent missing keys in templated arrays, the `0x0c` encoding value may be\npresent. If encountered it is interpreted as meaning that there is no value for\nthe key that would have been decoded in this position. This is distinct from the\nnull value.\n\nFor example:\n\n```json\n[\n   {\"name\": \"fred\", \"age\": 20},\n   {\"name\": \"pete\", \"age\": 30},\n   {\"age\": 25 },\n]\n```\n\nis represented similar to:\n\n```json\n[\"name\", \"age\"],\n[\n  \"fred\", 20,\n  \"pete\", 30,\n  0x0c,   25\n]\n```\n\nThe precise sequence is:\n\n```\n0b          template\n00          array     -- start prop names\n0302        int, 2    -- two prop names\n02          string    -- first prop \"name\"\n0304        int, 4\n6e616d65    \"name\"\n02          string    -- 2nd prop \"age\"\n0303        int, 3\n616765      \"age\"\n0303        int, 3    -- there are 3 objects\n02          string    -- object 1, prop 1 name=fred\n0304        int, 4\n66726564    \"fred\"\n0314        int 0x14  -- object 1, prop 2 age=20\n02          string    -- object 2, prop 1 name=pete\n0304        int 4\n70657465    \"pete\"\n031e        int, 0x1e -- object 2, prop 2 age=30\n0c          skip      -- object 3, prop 1, not set\n0319        int, 0x19 -- object 3, prop 2 age=25\n```\n\nNote: to avoid hostile \"decompression bombs\", Watchman will reject parsing\ntemplate objects that have an empty set of keys.\n"
  },
  {
    "path": "website/docs/capabilities.md",
    "content": "---\ntitle: Capabilities\ncategory: Compatibility\n---\n\n_Since 3.8_\n\nCapability names are used to identify modules that are either conditionally\nconfigured or that are introduced over time.\n\nYou can use the [expanded version command](cmd/version.md) to query capabilities\nand avoid building knowledge of version numbers in your client application(s).\n\nYou can use [list-capabilities](cmd/list-capabilities.md) command to obtain a\nlist of capabilities supported by your watchman server.\n\n### Commands\n\nEvery command is identified by the command name prefixed by the string `cmd-`.\nFor example, the `watch-project` command is indicated by the capability name\n`cmd-watch-project`.\n\n### Expression Terms\n\nEvery expression term is identified by the term name prefixed by the string\n`term-`. For example, the `match` term is indicated by the capability name\n`term-match`.\n\n### File Result Fields\n\nEvery field is identified by the field name prefixed by the string `field-`. For\nexample, the `size` field is indicated by the capability name `field-size`.\n\n### Feature Enhancements\n\nSometimes we will enhance existing functionality by adding new options to\nexisting commands. Since these changes won't result in adding a new command they\nwon't implicitly gain a capability name. In these cases we'll assign an\nappropriate capability name by hand.\n\nThe following feature capabilities are possible / released:\n\n| Capability Name | Since version | Description                                                              |\n| --------------- | ------------- | ------------------------------------------------------------------------ |\n| `relative_root` | 3.3           | `relative_root` query option                                             |\n| `wildmatch`     | 3.7           | [Expanded `match` term with recursive globs](expr/match.md#wildmatch)    |\n| `suffix-set`    | 5.0           | [Expanded `suffix` to support set of suffixes](expr/suffix.md#suffixset) |\n"
  },
  {
    "path": "website/docs/casefolding.md",
    "content": "---\ntitle: Case-Insensitivity\ncategory: Internals\n---\n\nWatchman is currently completely unaware of case-insensitivity in file systems,\nand does not attempt to do any case-folding of file names. On a case-insensitive\nfile system like macOS's [HFS+](https://en.wikipedia.org/wiki/HFS_Plus), this\ncan manifest itself in different ways:\n\n- If a file `foo.txt` is renamed to `FOO.txt`, Watchman will report `FOO.txt` as\n  created and `foo.txt` separately as changed.\n- If a file `foo.txt` is removed and another file `FOO.txt` is later added,\n  Watchman will report `FOO.txt` as added, but it might report `foo.txt` as\n  either removed or changed.\n\nIn general, both `foo.txt` and `FOO.txt` can be reported, sometimes with\ndifferent stat data, sometimes with the same stat data.\n\n## Why doesn't Watchman support case-folding properly?\n\nOne problem is that 'properly' is hard to pin down. There are at least four\nlevels of correctness here:\n\n- handle ASCII case-folding only (95% solution)\n- handle ASCII + accented ASCII case-folding only (98%)\n- full handling of current Unicode spec using a Unicode database (99%)\n- using the special folding table written to a hidden file on disk at file\n  system creation time that matches Apple's interpretation of Unicode at the\n  time of the OS release + their own quirks (100%)\n\nClients of Watchman might have their own idea of case-folding, which might or\nmight not be compatible with Watchman's idea of it. So far, clients have managed\nto handle case-folding outside of Watchman, with some success.\n\n## Does this matter?\n\nIt depends on your application.\n\n**Example 1:** Your application is a build system that has a pre-baked list of\nfiles. Your application expects files to be on disk in the correct case even on\ncase-insensitive file systems, and you declare that the behavior is undefined if\nthey aren't. You invoke Watchman by asking it what files have changed. In this\ncase, Watchman should work without you having to do anything special.\n\n**Example 2:** Your application is a build system rule to generate CSS rules\nthat is run by a Watchman trigger on `*.scss`. You expect all files you care\nabout to end with the string `.scss` on case-insensitive file systems, and not\nanother variant of it like `.SCSS`. In this case, Watchman should work fine --\nat most, it will provide you the same file multiple times with different case\nvariants. You might be dealing with that in your build system anyway.\n\n**Example 3:** Like example 2, except you expect `.SCSS` and other variants to\nwork too. In that case the only way is to explicitly add all possible variants\nto the trigger rule.\n\n**Example 4:** You're a source control system that has its own ideas about\ncase-folding that might or might not match up with the operating system's. You\nperform case-folding against an internal data structure, so that if the data\nstructure has `foo.txt` and the file system has `FOO.txt` you make `foo.txt`\ntake precedence. In that case, Watchman will tell you about both `FOO.txt` and\n`foo.txt`, and it's up to you to perform normalization.\n[hgwatchman](https://bitbucket.org/facebook/hgwatchman) just consults the file\nsystem in the rare case that a file changes case.\n\n## Credits\n\nThe levels of correctness were proposed by Olivia Mackall <olivia@selenic.com>.\n"
  },
  {
    "path": "website/docs/cli-options.md",
    "content": "---\ntitle: Command Line\ncategory: Invocation\nsidebar_position: 1\n---\n\nThe `watchman` executable contains both the client and the server components of\nthe watchman service.\n\nBy default, when `watchman` is run, it will attempt to communicate with your\nexisting server instance (each user has their own persistent process), and will\nattempt to start it if it doesn't exist.\n\nThere are some options that affect how `watchman` will locate the server, some\noptions that affect only the client and some others that affect only the server.\nSince all of the options are understood by the same executable we've broken\nthose out into sections of their own to make it clearer when they apply.\n\n## Quick note on default locations\n\nWatchman will prefer to resolve your user name from the `$USER` environmental\nvariable, or `$LOGNAME` if `$USER` was not set. If neither are set watchman will\nlook it up from the system using `getpwuid(getuid())`. When we refer to `<USER>`\nin this documentation we mean the result of this resolution.\n\nIn some cases Watchman will need to create files in a temporary location.\nWatchman will resolve this temporary location by looking at the `$TMPDIR`\nenvironmental variable, or `$TMP` if `$TMPDIR` was not set. If neither are set\nwatchman will use `/tmp`. When we refer to `<TMPDIR>` in this documentation we\nmean the result of this resolution.\n\nWatchman tracks its persistent state in a location that we refer to as the\n`<STATEDIR>` in this documentation.\n\n_Since 3.1._\n\nThe `STATEDIR` defaulted to `<PREFIX>/var/run/watchman`. You can change this\ndefault when you build watchman by using the configure option\n`--enable-statedir`.\n\nEarlier versions of Watchman didn't have a default statedir and would instead\nuse the `<TMPDIR>` for this state. We switched away from that because some\nenvironments randomize the `<TMPDIR>` location and this made it difficult for\nclients to locate the Watchman service.\n\n_Since 3.8._\n\nThe `STATEDIR` defaults to `<PREFIX>/var/run/watchman/<USER>-state`. You can\nchange this default when you build watchman by using the configure option\n`--enable-statedir`; the configure option replaces the\n`<PREFIX>/var/run/watchman` portion of this string. If you specify\n`--disable-statedir` then that portion of the string will be computed from the\n`<TMPDIR>` location.\n\nWatchman will create the `<USER>-state` portion if it does not exist, and will\nperform some permission and ownership checks to reduce the risk of untrusted\nusers placing files in this location. If those checks are not satisfied,\nwatchman will refuse to start.\n\n## Locating the service\n\n```\n -U, --sockname=PATH   Specify alternate sockname\n```\n\nThe default location for sockname will be `<STATEDIR>/<USER>`. Older versions of\nWatchman would default to `<TMPDIR>/.watchman.<USER>`, depending on how it was\nconfigured.\n\nIf you are building a client to access the service programmatically, we\nrecommend that you invoke [watchman get-sockname](cmd/get-sockname.md) to\ndiscover the path that the client and server would use. This has the side effect\nof spawning the service for you if it isn't already running.\n\n## Client Options\n\nThe `watchman` executable will attempt to start the service if there is no\nresponse on the socket specified above. In some cases it is desirable to avoid\nstarting the service if it isn't running:\n\n```\n --no-spawn            Don't spawn service if it is not already running.\n                       Will try running the command in client mode if\n                       possible.\n --no-local            When no-spawn is enabled, don't use client mode\n```\n\nClient mode implements the [watchman find command](cmd/find.md) as an immediate\nsearch.\n\nThese options control how the client talks to the server:\n\n```\n -p, --persistent           Persist and wait for further responses\n     --server-encoding=ARG  CLI<->server encoding. json or bser.\n```\n\nPersistent connections have relatively limited use with the CLI, but can be\nuseful to connect ad-hoc to the service to receive logging information (See\n[log-level](cmd/log-level.md)).\n\nThe server encoding option controls how requests and responses are formatted\nwhen talking to the server. You generally shouldn't need to worry about this.\n\n### Input and Output\n\nMost simple invocations of the CLI will pass a list of arguments:\n\n```bash\n$ watchman watch /path/to/dir\n```\n\nThis is turned into a request like this:\n\n```json\n[\"watch\", \"/path/to/dir\"]\n```\n\nand sent to the service using the [Socket Interface](socket-interface.md).\n\nThe response is received and then sent to the `stdout` stream formatted based on\nthe selected output-encoding:\n\n```\n     --output-encoding=ARG  CLI output encoding. json (default) or bser\n     --no-pretty            Don't pretty print JSON output (more efficient\n                            when being processed by another program)\n```\n\nEach command has its own response output but watchman will always include a\nfield named `error` if something about the request was not successful. In case\nof some protocol level errors (eg: connection was terminated) instead of\nprinting a response on `stdout`, an unstructured error message will be printed\nto `stderr` and the process will exit with a non-zero exit status.\n\nInstead of passing the request as command line parameters, you can send a JSON\nrepresentation on the `stdin` stream. These invocations are all equivalent:\n\n```bash\n$ watchman watch /path/to/dir\n```\n\n```bash\n$ watchman -j <<-EOT\n[\"watch\", \"/path/to/dir\"]\nEOT\n```\n\n```bash\n$ watchman -j <<< '[\"watch\", \"/path/to/dir\"]'\n```\n\n```bash\n$ echo '[\"watch\", \"/path/to/dir\"]' | watchman -j\n```\n\n```bash\n$ echo '[\"watch\", \"/path/to/dir\"]' > cmd.json\n$ watchman -j < cmd.json\n```\n\n```bash\n$ watchman --json-command <<-EOT\n[\"watch\", \"/path/to/dir\"]\nEOT\n```\n\n_Since 3.8_\n\nThe CLI now also recognizes BSER as a valid input stream when using the `-j`\noption. This will implicitly set `--server-encoding=bser` and\n`--output-encoding=bser` if those options have not been set to something else.\n\n## Exit Status\n\nThe `watchman` binary will exit with a return code of 0 in most cases; this\nindicates that the output it generated should be valid JSON. To determine if\nyour command was successful, you need to parse the JSON and look for the `error`\nfield as described above.\n\n`watchman` will exit with a non-zero exit status in cases where something\nlow-level went wrong, such as protocol level errors (eg: connection was\nterminated).\n\n## Server Options\n\nThese options are used when starting the server. They are recognized by the\nclient and affect how it will start the server, but have no effect if the server\nis already running. To change the effective values of these options for a\nrunning server, you will need to restart it (you can stop it by running\n[watchman shutdown-server](cmd/shutdown-server.md)).\n\nBy default, watchman will remember all watches and associated triggers and\nreinstate them if the process is restarted. This state is stored in the\n_statefile_:\n\n```\n --statefile=PATH      Specify path to file to hold watch and trigger state\n -n, --no-save-state   Don't save state between invocations\n```\n\nThe default location for statefile will be `<STATEDIR>/<USER>.state`. Older\nversions of watchman may store the state in `<TMPDIR>/.watchman.<USER>.state`,\ndepending on how they were configured.\n\n```\n-o, --logfile=PATH   Specify path to logfile\n    --log-level      set log verbosity (0 = off, default is 1, verbose = 2)\n```\n\nThe default location for logfile will be `<STATEDIR>/<USER>.log`. Older versions\nof watchman may store the logs in `<TMPDIR>/.watchman.<USER>.log`, depending on\nhow they were configured.\n\nIn some relatively uncommon circumstances, such as in test harnesses, you may\nneed to directly run the service without it putting itself into the background:\n\n```\n -f, --foreground      Run the service in the foreground\n```\n\n_Since 4.6._\n\n```\n     --inetd                Spawning from an inetd style supervisor\n```\n\nWhen this flag is specified, watchman will use stdin as the listening socket\nrather than attempting to set it up for itself. This allows some other process\nto maintain the socket and defer activating the watchman service until a client\nis ready to connect. This is most practically beneficial when used together with\n`systemd`.\n\n[This commit includes a sample configuration for systemd](https://github.com/facebook/watchman/commit/2985377eaf8c8538b28fae9add061b67991a87c2).\n"
  },
  {
    "path": "website/docs/clockspec.md",
    "content": "---\ntitle: Clockspec\ncategory: Queries\n---\n\nFor commands that query based on time, watchman offers a couple of different\nways to measure time.\n\n- number of seconds since the unix epoch (unix `time_t` style)\n- a clock id of the form `c:123:234`\n- a named cursor of the form `n:whatever` (but clock ids are faster!)\n\nThe first and most obvious is passing a unix timestamp. Watchman records the\nobserved time that files change and allows you to find files that have changed\nsince that time. Using a timestamp is prone to race conditions in understanding\nthe complete state of the file tree.\n\nUsing an abstract clock id insulates the client from these race conditions by\nticking as changes are detected rather than as time moves. Watchman returns the\ncurrent clock id when it delivers match results; you can use that value as the\nclockspec in your next time relative query to get a race free assessment of\nchanged files.\n\nAs a convenience, watchman can maintain the last observed clock for a client by\nassociating it with a client defined cursor name. For example, you could\nenumerate all the \"C\" source files on your first invocation of:\n\n```bash\nwatchman since /path/to/src n:c_srcs '*.c'\n```\n\nand when you run it a second time, it will show you only the \"C\" source files\nthat changed since the last time that someone queried using \"n:c_srcs\" as the\nclock spec. However, it's not possible to \"roll back\" a named cursor, so\nadvanced users desiring such functionality should use clock ids instead.\n\n_Since 4.7._\n\nWe recommend not using the `n:whatever` form as it requires an exclusive lock on\nthe view to execute; this can increase contention and result in slower queries.\n"
  },
  {
    "path": "website/docs/cmd/_category_.json",
    "content": "{\n    \"label\": \"Commands\"\n}\n"
  },
  {
    "path": "website/docs/cmd/clock.md",
    "content": "---\ntitle: clock\ncategory: Commands\n---\n\nReturns the current clock value for a watched root.\n\n_Since 3.9._\n\n_The [capability](capabilities.md) name associated with this enhanced\nfunctionality is `clock-sync-timeout`._\n\n`sync_timeout` specifies the number of milliseconds that you want to wait to\nobserve a synchronization cookie. The synchronization cookie is created at the\nstart of your clock call and, once the cookie is observed, means that the clock\nvalue returned by this command is at least as current as the time of your clock\ncall.\n\nIf no `sync_timeout` is specified, the returned clock value is the instantaneous\nvalue of the clock associated with the watched root, and may be almost\nimmediately invalidated if there are any filesystem notifications that are yet\nto be processed.\n\n```bash\n$ watchman clock /path/to/dir\n```\n\nJSON:\n\nNote the third options argument is optional.\n\n```json\n[\"clock\", \"/path/to/dir\", {\"sync_timeout\": 100}]\n```\n"
  },
  {
    "path": "website/docs/cmd/find.md",
    "content": "---\ntitle: find\ncategory: Commands\n---\n\nFinds all files that match the optional list of patterns under the specified\ndir. If no patterns were specified, all files are returned.\n\n```bash\n$ watchman find /path/to/dir [patterns]\n```\n"
  },
  {
    "path": "website/docs/cmd/flush-subscriptions.md",
    "content": "---\ntitle: flush-subscriptions\ncategory: Commands\n---\n\n_Since 4.8._\n\nFlushes buffered updates to subscriptions associated with the current session,\nguaranteeing that they are up-to-date as of the time Watchman received the\n`flush-subscriptions` command.\n\nSubscription updates will be interleaved between the `flush-subscriptions`\nrequest and its response. Once the response has been received, subscriptions are\nup-to-date.\n\nThis command is designed to be used by interactive programs that have a\nbackground process or daemon maintaining a subscription to Watchman. The typical\npattern is for interactive commands to be forwarded to the process, which calls\n`flush-subscriptions` and then processes any subscription updates it received.\nThis pattern eliminates races with files changed right before the interactive\ncommand.\n\n### Arguments\n\n- `sync_timeout`: Required. The number of milliseconds to wait to observe a\n  synchronization cookie. The synchronization cookie is created at the start of\n  the `flush-subscriptions` call, and once the cookie is observed, means that\n  the OS has sent watchman all the updates till at least the start of the\n  `flush-subscriptions` call.\n- `subscriptions`: Optional. Which subscriptions to flush. By default this\n  flushes all subscriptions associated with this project on this session.\n\n### Examples\n\nAssuming subscriptions `sub1`, `sub2` and `sub3` have been established on this\nsession, if `sub1` has updates pending, `sub2` is up-to-date and `sub3` is\ncurrently dropping updates:\n\n```json\n[\"flush-subscriptions\", \"/path/to/root\", {\"sync_timeout\": 1000}]\n```\n\nIn response, Watchman will first emit a unilateral subscription PDU for `sub1`,\nthen respond with\n\n```json\n{\n  \"clock\": \"c:1446410081:18462:7:135\",\n  \"synced\": [\"sub1\"],\n  \"no_sync_needed\": [\"sub2\"],\n  \"dropped\": [\"sub3\"]\n}\n```\n\nTo flush updates for some but not all subscriptions associated with this\nsession:\n\n```json\n[\"flush-subscriptions\", \"/path/to/root\",\n  {\n    \"sync_timeout\": 1000,\n    \"subscriptions\": [\"sub1\", \"sub2\"]\n  }\n]\n```\n\n### Deferred and Dropped Updates\n\nSubscriptions will typically buffer individual updates until a _settle_ period\nhas expired. `flush-subscriptions` will force those updates through immediately.\n\nSubscriptions currently deferring updates because of `defer` or `defer_vcs` are\nupdated immediately, without waiting for the `defer` or `defer_vcs` to end.\n\nSubscriptions currently dropping updates with a `drop` state will not get any\nupdates. Their names will be returned in the `dropped` field.\n\n### Notes\n\n- `flush-subscriptions` can only be used to flush subscriptions associated with\n  the current session.\n- A single session can be subscribed to updates from multiple projects at the\n  same time. However, `flush-subscriptions` can only flush updates for one\n  project at a time.\n"
  },
  {
    "path": "website/docs/cmd/get-config.md",
    "content": "---\ntitle: get-config\ncategory: Commands\n---\n\nThe `get-config` command returns the `.watchmanconfig` for the root. If there is\nno `.watchmanconfig`, it returns an empty configuration field:\n\n```bash\n$ watchman get-config .\n{\n    \"version\": \"2.9.9\",\n    \"config\": {}\n}\n```\n\n```bash\n$ watchman get-config /path/to/root\n{\n    \"version\": \"2.9.9\",\n    \"config\": {\n        \"ignore_dirs\": [\n            \"buck-out\"\n        ]\n    }\n}\n```\n\nNote that watchman only reads the `.watchmanconfig` file when the watch is\nestablished. If changes are made after that point, the `get-config` response\nwill not reflect them.\n\nSee [Configuration Options](../config.md#configuration-options) for details on\nvalid contents of the `config` field. Note that the values returned by\n`get-config` are passed straight through from the `.watchmanconfig` file, and\nthus may contain fields that are not strictly legal.\n\nThis command is available since watchman version 2.9.9.\n"
  },
  {
    "path": "website/docs/cmd/get-sockname.md",
    "content": "---\ntitle: get-sockname\ncategory: Commands\n---\n\nIf you're integrating against watchman using the unix socket and either the JSON\nor BSER protocol, you may need to discover the correct socket path. Rather than\nhard-coding the path or replicating the logic discussed in\n[Command Line](cli-options.md), you can simply execute the CLI to determine the\npath. This has the side effect of spawning the service for your user if it was\nnot already running--bonus!\n\n```bash\n$ watchman get-sockname\n{\n  \"version\": \"2.5\",\n  \"sockname\": \"/tmp/.watchman.wez\"\n}\n```\n"
  },
  {
    "path": "website/docs/cmd/list-capabilities.md",
    "content": "---\ntitle: list-capabilities\ncategory: Commands\n---\n\n_Since 3.8._\n\nThis command returns the full list of supported [capabilities](capabilities.md)\noffered by the watchman server. The intention is that client applications will\nuse the [expanded version command](version.md) to check compatibility rather\nthan interrogating the full list.\n\nHere's some example output. The actual capabilities list is in unspecified order\nand is much longer than is reproduced here:\n\n```bash\n$ watchman list-capabilities\n{\n    \"version\": \"3.8.0\",\n    \"capabilities\": [\n        \"field-mode\",\n        \"term-allof\",\n        \"cmd-trigger\"\n    ]\n}\n```\n"
  },
  {
    "path": "website/docs/cmd/log-level.md",
    "content": "---\ntitle: log-level\ncategory: Commands\n---\n\nChanges the log level of your connection to the watchman service.\n\nFrom the command line:\n\n```bash\n$ watchman --server-encoding=json --persistent log-level debug\n```\n\nJSON:\n\n```json\n[\"log-level\", \"debug\"]\n```\n\nThis command changes the log level of your client session. Whenever watchman\nwrites to its log, it walks the list of client sessions and also sends a log\npacket to any that have their log level set to match the current log event.\n\nValid log levels are:\n\n- `debug` - receive all log events\n- `error` - receive only important log events\n- `off` - receive no log events\n\nNote that you cannot tap into the output of triggered processes using this\nmechanism.\n\nLog events are sent unilaterally by the server as they happen, and have the\nfollowing structure:\n\n```json\n{\n  \"version\": \"1.0\",\n  \"log\": \"log this please\"\n}\n```\n"
  },
  {
    "path": "website/docs/cmd/log.md",
    "content": "---\ntitle: log\ncategory: Commands\n---\n\nGenerates a log line in the watchman log.\n\n```bash\n$ watchman log debug \"log this please\"\n```\n"
  },
  {
    "path": "website/docs/cmd/query.md",
    "content": "---\ntitle: query\ncategory: Commands\n---\n\n_Since 1.6._\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"suffix\": \"php\",\n  \"expression\": [\"allof\",\n    [\"type\", \"f\"],\n    [\"not\", \"empty\"],\n    [\"ipcre\", \"test\", \"basename\"]\n  ],\n  \"fields\": [\"name\"]\n}]\nEOT\n```\n\nExecutes a query against the specified root. This example uses the `-j` flag to\nthe watchman binary that tells it to read stdin and interpret it as the JSON\nrequest object to send to the watchman service. This flag allows you to send in\na pretty JSON object (as shown above), but if you're using the socket interface\nyou must still format the object as a single line JSON request as documented in\nthe protocol spec.\n\nThe first argument to query is the path to the watched root. The second argument\nholds a JSON object describing the query to be run. The query object is\nprocessed by passing it to the query engine (see [File Queries](file-query.md))\nwhich will generate a set of matching files.\n\nThe query command will then consult the `fields` member of the query object; if\nit is not present it will default to:\n\n```json\n\"fields\": [\"name\", \"exists\", \"new\", \"size\", \"mode\"]\n```\n\nFor each file in the result set, the query command will generate a JSON object\nvalue populated with the requested fields. For example, the default set of\nfields will return a response something like this:\n\n```json\n{\n    \"version\": \"2.9\",\n    \"clock\": \"c:80616:59\",\n    \"is_fresh_instance\": false,\n    \"files\": [\n        {\n            \"exists\": true,\n            \"mode\": 33188,\n            \"new\": false,\n            \"name\": \"argv.c\",\n            \"size\": 1340,\n        }\n    ]\n}\n```\n\nIf a field's value cannot be computed, a field's value may be `null`, or may be\nan object with an `error` key containing a descriptive message string:\n\n```json\n{\n    \"version\": \"2019-07-22T13:50:36Z\",\n    \"is_fresh_instance\": false,\n    \"clock\": \"c:1563834049:1830370:791543813:2257494\",\n    \"files\": [\n        {\n            \"content.sha1hex\": null,\n            \"name\": \"docs\"\n            \"symlink_target\": null,\n            \"type\": \"d\",\n        },\n        {\n            \"content.sha1hex\": {\n                \"error\": \"eloop: file is a symlink: Invalid argument: Invalid argument\"\n            },\n            \"type\": \"l\",\n            \"symlink_target\": \"eloop\",\n            \"name\": \"eloop\"\n        }\n    ]\n}\n```\n\nFor queries using the `since` generator, the `is_fresh_instance` member is true\nif the particular clock value indicates that it was returned by a different\ninstance of watchman, or a named cursor hasn't been seen before. In that case,\nonly files that currently exist will be returned, and all files will have `new`\nset to `true`. For all other queries, is_fresh_instance will always be true.\nAdvanced users may set the input parameter `empty_on_fresh_instance` to true, in\nwhich case no files will be returned for fresh instances.\n\nIf the `fields` member consists of a single entry, the files result will be a\nsimple array of values; ~~~\"fields\": [\"name\"]~~~ produces:\n\n```json\n{\n    \"version\": \"1.5\",\n    \"clock\": \"c:80616:59\",\n    \"files\": [\"argv.c\", \"foo.c\"]\n}\n```\n\n### Available fields\n\n- `name` - string: the filename, relative to the watched root\n- `exists` - bool: true if the file exists, false if it has been deleted\n- `cclock` - string: the \"created clock\"; the clock value when we first observed\n  the file, or the clock value when it last switched from !exists to exists.\n- `oclock` - string: the \"observed clock\"; the clock value where we last\n  observed some change in this file or its metadata.\n- `ctime`, `ctime_ms`, `ctime_us`, `ctime_ns`, `ctime_f` - last inode change\n  time measured in integer seconds, milliseconds, microseconds, nanoseconds or\n  floating point seconds respectively.\n- `mtime`, `mtime_ms`, `mtime_us`, `mtime_ns`, `mtime_f` - modified time\n  measured in integer seconds, milliseconds, microseconds, nanoseconds or\n  floating point seconds respectively.\n- `size` - integer: file size in bytes\n- `mode` - integer: file (or directory) mode expressed as a decimal integer\n- `uid` - integer: the owning uid\n- `gid` - integer: the owning gid\n- `ino` - integer: the inode number\n- `dev` - integer: the device number\n- `nlink` - integer: number of hard links\n- `new` - bool: whether this entry is newer than the `since` generator criteria\n\n_Since 3.1._\n\n- `type` - string: the file type. Has the the values listed in\n  [the type query expression](../expr/type.md)\n\n_Since 4.6._\n\n- `symlink_target` - string: the target of a symbolic link if the file is a\n  symbolic link\n\n_Since 4.9._\n\n- `content.sha1hex` - string: the SHA-1 digest of the file's byte content,\n  encoded as 40 hexidecimal digits (e.g.\n  `\"da39a3ee5e6b4b0d3255bfef95601890afd80709\"` for an empty file)\n\n### Synchronization timeout (since 2.1)\n\nBy default a `query` will wait for up to 60 seconds for the view of the\nfilesystem to become current. Watchman decides that the view is current by\ncreating a cookie file and waiting to observe the notification that it is\npresent. If the cookie is not observed within the sync_timeout period then the\nquery invocation will error out with a synchronization error message.\n\nIf your synchronization requirements differ from the default, you may pass in\nyour desired timeout when you construct your query; it must be an integer value\nexpressed in milliseconds:\n\n```json\n[\"query\", \"/path/to/root\", {\n  \"expression\": [\"exists\"],\n  \"fields\": [\"name\"],\n  \"sync_timeout\": 60000\n}]\n```\n\nYou may specify `0` as the value if you do not wish for the query to create a\ncookie and synchronize; the query will be evaluated over the present view of the\ntree, which may lag behind the present state of the filesystem.\n\n### Lock timeout\n\n_Since 4.6._\n\nBy default queries will wait for up to 60 seconds to acquire a lock to inspect\nthe view of the filesystem tree. In practice, this timeout should never be hit\n(it is indicative of an environmental or load related issue). However, in some\nsituations it is important to ensure that the query attempt times out sooner\nthan this. You may use the `lock_timeout` field to control this behavior.\n`lock_timeout` must be an integer value expressed in milliseconds:\n\n```json\n[\"query\", \"/path/to/root\", {\n  \"expression\": [\"exists\"],\n  \"fields\": [\"name\"],\n  \"lock_timeout\": 60000,\n  \"sync_timeout\": 60000\n}]\n```\n\nPrior to version 4.6, the `lock_timeout` could not be configured and had an\neffective value of infinity.\n\n### Case sensitivity\n\n_Since 2.9.9._\n\nOn systems where the watched root is a case insensitive filesystem (this is the\ncommon case for macOS and Windows), various name matching operations default to\ncase insensitive.\n\n_Since 4.7._\n\nYou may override the case sensitivity of the various name matching operations by\nsetting the `case_sensitive` field in your query spec. It default to the case\nsensitivity of the watched root. This is useful in cases where you know that the\ncontents of the tree are treated case sensitively by your various tools but are\nrunning on a case insensitive filesystem. By forcing the name matches to case\nsensitive mode the matches are faster and in some cases can be accelerated by\nusing alternative algorithms.\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"suffix\": \"php\",\n  \"expression\": [\"match\", \"foo*.c\", \"basename\"],\n  \"case_sensitive\": true,\n  \"fields\": [\"name\"]\n}]\nEOT\n```\n\n### Directory Events\n\nGenerally, Watchman should report changes to directories for all queries.\n\nOn EdenFS repositories there is an exception. When the user has changed commits\nin the duration of a time query, directory changes may not be reported across\nthose commit changes.\n\nthe option `always_include_directories` exists to include events for directories\nacross commit transitions. This is only supported for mercurial. This can be\nexpensive, so clients who do not need this are recommended not to use this. This\nvalue defaults to false.\n"
  },
  {
    "path": "website/docs/cmd/shutdown-server.md",
    "content": "---\ntitle: shutdown-server\ncategory: Commands\n---\n\nThis command causes your watchman service to exit with a normal status code.\n\n```bash\n$ watchman shutdown-server\n```\n"
  },
  {
    "path": "website/docs/cmd/since.md",
    "content": "---\ntitle: since\ncategory: Commands\n---\n\n```bash\n$ watchman since /path/to/dir <clockspec> [patterns]\n```\n\nFinds all files that were modified since the specified clockspec that match the\noptional list of patterns. If no patterns are specified, all modified files are\nreturned.\n\nThe response includes a `files` array, each element of which is an object with\nfields containing information about the file:\n\n```json\n{\n    \"version\": \"2.7\",\n    \"is_fresh_instance\": true,\n    \"clock\": \"c:80616:59\",\n    \"files\": [\n        {\n            \"cclock\": \"c:80616:1\",\n            \"ctime\": 1357617635,\n            \"dev\": 16777220,\n            \"exists\": true,\n            \"gid\": 100,\n            \"ino\": 20161390,\n            \"mode\": 33188,\n            \"mtime\": 1357617635,\n            \"name\": \"argv.c\",\n            \"nlink\": 1,\n            \"oclock\": \"c:80616:39\",\n            \"size\": 1340,\n            \"uid\": 100\n        }\n    ]\n}\n```\n\nThe fields should be largely self-explanatory; they correspond to fields from\nthe underlying `struct stat`, but a couple need special mention:\n\n- **cclock** - The \"created\" clock; the clock value representing the time that\n  this file was first observed, or the clock value where this file changed from\n  deleted to non-deleted state.\n- **oclock** - The \"observed\" clock; the clock value representing the time that\n  this file was last observed to have changed.\n- **exists** - whether we believe that the file exists on disk or not. If this\n  is false, most of the other fields will be omitted.\n- **new** - this is only set in cases where the file results were generated as\n  part of a time or clock based query, such as the `since` command. If the\n  `cclock` value for the file is newer than the time you specified then the file\n  entry is marked as `new`. This allows you to more easily determine if the file\n  was newly created without having to maintain a lot of state.\n"
  },
  {
    "path": "website/docs/cmd/state-enter.md",
    "content": "---\ntitle: state-enter\ncategory: Commands\n---\n\n_Since 4.4_\n\nThe `state-enter` command works in conjunction with\n[state-leave](state-leave.md) to facilitate\n[advanced settling in subscriptions](subscribe.md#advanced-settling).\n\n`state-enter` causes a watch to be marked as being in a particular named state.\nThe state is asserted until a corresponding `state-leave` command is issued or\n_until the watchman client session that entered the state disconnects_. This\nautomatic cleanup helps to avoid breaking subscribers if the tooling that\ninitiated a state terminates unexpectedly.\n\nSubscriptions can use the [defer](subscribe.md#defer) and\n[drop](subscribe.md#drop) fields to defer or drop notifications generated while\nthe watch is in a particular named state.\n\n### Examples\n\nThis is the simplest example; entering a state named `mystate`:\n\n```json\n[\"state-enter\", \"/path/to/root\", \"mystate\"]\n```\n\nIt will cause any subscribers to receive a unilateral subscription PDU from the\nwatchman server:\n\n```json\n{\n  \"subscription\":  \"mysubscriptionname\",\n  \"root\":          \"/path/to/root\",\n  \"state-enter\":   \"mystate\",\n  \"clock\":         \"c:1446410081:18462:7:127\"\n}\n```\n\nThe `clock` field in the response is the (synchronized; see below) clock at the\ntime that the state was entered and can be used in subsequent queries, in\ncombination with the corresponding `state-leave` subscription PDU clock, to\nlocate things that changed while the state was asserted.\n\nA more complex example demonstrates passing metadata to any subscribers. The\n`metadata` field is propagated through to the subscribers and is not interpreted\nby the watchman server. It can be any JSON value.\n\n```json\n[\"state-enter\", \"/path/to/root\", {\n  \"name\": \"mystate\",\n  \"metadata\": {\n    \"foo\": \"bar\"\n  }\n}]\n```\n\nThis will emit the following unilateral subscription PDU to all subscribers:\n\n```json\n{\n  \"subscription\":  \"mysubscriptionname\",\n  \"root\":          \"/path/to/root\",\n  \"state-enter\":   \"mystate\",\n  \"clock\":         \"c:1446410081:18462:7:137\",\n  \"metadata\": {\n    \"foo\": \"bar\"\n  }\n}\n```\n\n### Synchronization\n\nStates are synchronized with the state of the filesystem so that it is possible\nfor subscribers to reason about when files changed with respect to the state.\n\nThis means that issuing a `state-enter` command will\n[perform query synchronization](cookies.md#how-cookies-work) to ensure that\nthings are in sync.\n\nThe `state-enter` command will use a default `sync_timeout` of 60 seconds. If\nthe synchronization cookie is not observed within the configured `sync_timeout`,\nan error will be returned and _the state will not be entered_.\n\nIn some cases, perhaps during the initial crawl of a very large tree, You may\nspecify an alternative value for the timeout; the value is expressed in\n_milliseconds_:\n\n```json\n[\"state-enter\", \"/path/to/root\", {\n  \"name\": \"mystate\",\n  \"sync_timeout\": 10000,\n  \"metadata\": {\n    \"foo\": \"bar\"\n  }\n}]\n```\n\nYou may also specify `0` for the timeout to disable synchronization for this\nparticular command. This may cause the state to appear to clients to have been\nentered logically before it actually did in the case that there are buffered\nnotifications that have not yet been processed by watchman at the time that the\nstate was entered.\n"
  },
  {
    "path": "website/docs/cmd/state-leave.md",
    "content": "---\ntitle: state-leave\ncategory: Commands\n---\n\n_Since 4.4_\n\nThe `state-leave` command works in conjunction with\n[state-enter](state-enter.md) to facilitate\n[advanced settling in subscriptions](subscribe.md#advanced-settling).\n\n`state-leave` causes a watch to no longer be marked as being in a particular\nnamed state.\n\n### Examples\n\nThis is the simplest example, vacating a state named `mystate`:\n\n```json\n[\"state-leave\", \"/path/to/root\", \"mystate\"]\n```\n\nIt will cause any subscribers to receive a unilateral subscription PDU from the\nwatchman server:\n\n```json\n{\n  \"subscription\":  \"mysubscriptionname\",\n  \"root\":          \"/path/to/root\",\n  \"state-leave\":   \"mystate\",\n  \"clock\":         \"c:1446410081:18462:7:135\"\n}\n```\n\nThe `clock` field in the response is the (synchronized; see below) clock at the\ntime that the state was entered and can be used in subsequent queries, in\ncombination with the corresponding `state-enter` subscription PDU clock, to\nlocate things that changed while the state was asserted.\n\nA more complex example demonstrates passing metadata to any subscribers. The\n`metadata` field is propagated through to the subscribers and is not interpreted\nby the watchman server. It can be any JSON value.\n\n```json\n[\"state-leave\", \"/path/to/root\", {\n  \"name\": \"mystate\",\n  \"metadata\": {\n    \"foo\": \"bar\"\n  }\n}]\n```\n\nThis will emit the following unilateral subscription PDU to all subscribers:\n\n```json\n{\n  \"subscription\":  \"mysubscriptionname\",\n  \"root\":          \"/path/to/root\",\n  \"state-leave\":   \"mystate\",\n  \"clock\":         \"c:1446410081:18462:7:137\",\n  \"metadata\": {\n    \"foo\": \"bar\"\n  }\n}\n```\n\n### Abandoned State\n\nA state is implicitly vacated when the watchman client session that asserted it\ndisconnects. This helps to avoid breaking subscribers (since the typical action\nis to defer or drop notifications) if the tooling that initiated the state\nterminates unexpectedly.\n\nAn abandoned state is reported to any subscribers via a unilateral subscription\nPDU with the `abandoned` field set to `true`:\n\n```json\n{\n  \"subscription\":  \"mysubscriptionname\",\n  \"root\":          \"/path/to/root\",\n  \"state-leave\":   \"mystate\",\n  \"clock\":         \"c:1446410081:18462:7:137\",\n  \"abandoned\":     true\n}\n```\n\nThis allows the subscriber to take an appropriate action.\n\n### Synchronization\n\nStates are synchronized with the state of the filesystem so that it is possible\nfor subscribers to reason about when files changed with respect to the state.\n\nThis means that issuing a `state-leave` command will\n[perform query synchronization](cookies.md#how-cookies-work) to ensure that\nthings are in sync.\n\nThe `state-leave` command will use a default `sync_timeout` of 60 seconds. If\nthe synchronization cookie is not observed within the configured `sync_timeout`,\nan error will be returned and _the state will not be entered_.\n\nIn some cases, perhaps during the initial crawl of a very large tree, You may\nspecify an alternative value for the timeout; the value is expressed in\n_milliseconds_:\n\n```json\n[\"state-leave\", \"/path/to/root\", {\n  \"name\": \"mystate\",\n  \"sync_timeout\": 10000,\n  \"metadata\": {\n    \"foo\": \"bar\"\n  }\n}]\n```\n\nYou may also specify `0` for the timeout to disable synchronization for this\nparticular command. This may cause the state to appear to clients to have been\nvacated logically before it actually did in the case that there are buffered\nnotifications that have not yet been processed by watchman at the time that the\nstate was vacated.\n"
  },
  {
    "path": "website/docs/cmd/subscribe.md",
    "content": "---\ntitle: subscribe\ncategory: Commands\n---\n\n_Since 1.6_\n\nSubscribes to changes against a specified root and requests that they be sent to\nthe client via its connection. The updates will continue to be sent while the\nconnection is open. If the connection is closed, the subscription is implicitly\nremoved.\n\nThis makes the most sense in an application connecting via the socket interface,\nbut you may also subscribe via the command line tool if you're interested in\nobserving the changes for yourself:\n\n```bash\n$ watchman -j --server-encoding=json -p <<-EOT\n[\"subscribe\", \"/path/to/root\", \"mysubscriptionname\", {\n  \"expression\": [\"allof\",\n    [\"type\", \"f\"],\n    [\"not\", \"empty\"],\n    [\"suffix\", \"php\"]\n  ],\n  \"fields\": [\"name\"]\n}]\nEOT\n```\n\nThe example above registers a subscription against the specified root with the\nname `mysubscriptionname`.\n\nThe response to a subscribe command looks like this:\n\n```json\n{\n  \"version\":   \"1.6\",\n  \"subscribe\": \"mysubscriptionname\"\n}\n```\n\nWhen the subscription is first established, the expression term is evaluated and\nif any files match, a subscription notification packet is generated and sent,\nunilaterally to the client.\n\nThen, each time a change is observed, and after the settle period has passed,\nthe expression is evaluated again. If any files are matched, the server will\nunilaterally send the query results to the client with a packet that looks like\nthis:\n\n```json\n{\n  \"version\": \"1.6\",\n  \"clock\": \"c:1234:123\",\n  \"files\": [\"one.php\"],\n  \"root\":  \"/path/being/watched\",\n  \"subscription\": \"mysubscriptionname\"\n}\n```\n\nThe subscribe command object allows the client to specify a since parameter; if\npresent in the command, the initial set of subscription results will only\ninclude files that changed since the specified clockspec, equivalent to using\nthe `query` command with the `since` generator.\n\n```json\n[\"subscribe\", \"/path/to/root\", \"myname\", {\n  \"since\": \"c:1234:123\",\n  \"expression\": [\"not\", \"empty\"],\n  \"fields\": [\"name\"]\n}]\n```\n\nThe suggested mode of operation is for the client process to maintain its own\nlocal copy of the last \"clock\" value and use that to establish the subscription\nwhen it first connects.\n\n## Filesystem Settling\n\nPrior to watchman version 3.2, the settling behavior was to hold subscription\nnotifications until the kernel notification stream was complete.\n\nStarting in watchman version 3.2, after the notification stream is complete, if\nthe root appears to be a version control directory, subscription notifications\nwill be held until an outstanding version control operation is complete (at the\ntime of writing, this is based on the presence of either `.hg/wlock` or\n`.git/index.lock`). This behavior matches triggers and helps to avoid performing\ntransient work in response to files changing, for example, during a rebase\noperation.\n\nIn some circumstances it is desirable for a client to observe the creation of\nthe control files at the start of a version control operation. You may specify\nthat you want this behavior by passing the `defer_vcs` flag to your subscription\ncommand invocation:\n\n```bash\n$ watchman -j -p <<-EOT\n[\"subscribe\", \"/path/to/root\", \"mysubscriptionname\", {\n  \"expression\": [\"allof\",\n    [\"type\", \"f\"],\n    [\"not\", \"empty\"],\n    [\"suffix\", \"php\"]\n  ],\n  \"defer_vcs\": false,\n  \"fields\": [\"name\"]\n}]\nEOT\n```\n\n## Advanced Settling\n\n_Since 4.4_\n\nIn more complex integrations it is desirable to be able to have a watchman aware\napplication signal the beginning and end of some work that will generate a lot\nof change notifications. For example, Mercurial or Git could communicate with\nwatchman before and after updating the working copy.\n\nSome applications will want to know that the update is in progress and continue\nto process notifications. Others may want to defer processing the notifications\nuntil the update completes, and some may wish to drop any notifications produced\nwhile the update was in progress.\n\nWatchman subscriptions provide the mechanism for each of these use cases and\nexpose it via two new fields in the subscription object; `defer` and `drop` are\ndescribed below.\n\nIt can be difficult to mix `defer` and `drop` with multiple overlapping states\nin the context of a given subscription stream as there is a single cursor to\ntrack the subscription position.\n\nIf your application uses multiple overlapping states and wants to `defer` some\nresults and `drop` others, it is recommended that you use `drop` for all of the\nstates and then issues queries with `since` terms bounded by the `clock` fields\nfrom the subscription state PDUs to ensure that it observes all of the results\nof interest.\n\n### defer\n\n```json\n[\"subscribe\", \"/path/to/root\", \"mysubscriptionname\", {\n  \"defer\": [\"mystatename\"],\n  \"fields\": [\"name\"]\n}]\n```\n\nThe `defer` field specifies a list of state names for which the subscriber\nwishes to defer the notification stream. When a watchman client signals that a\nstate has been entered via the [state-enter](cmd/state-enter.md) command, if the\nstate name matches any in the `defer` list then the subscription will emit a\nunilateral subscription PDU like this:\n\n```json\n{\n  \"subscription\":  \"mysubscriptionname\",\n  \"root\":          \"/path/to/root\",\n  \"state-enter\":   \"mystatename\",\n  \"clock\":         \"<clock>\",\n  \"metadata\":      <metadata from the state-enter command>\n}\n```\n\nWatchman will then defer sending any subscription PDUs with `files` payloads\nuntil the state is vacated either by a [state-leave](cmd/state-leave.md) command\nor by the client that entered the state disconnecting from the watchman service.\n\nOnce the state is vacated, watchman will emit a unilateral subscription PDU like\nthis:\n\n```json\n{\n  \"subscription\":  \"mysubscriptionname\",\n  \"root\":          \"/path/to/root\",\n  \"state-leave\":   \"mystatename\",\n  \"clock\":         \"<clock>\",\n  \"metadata\":      <metadata from the exit-state command>\n}\n```\n\nThe subscription stream will then be re-enabled and notifications received since\nthe corresponding `state-enter` will be delivered to clients.\n\n### drop\n\n```json\n[\"subscribe\", \"/path/to/root\", \"mysubscriptionname\", {\n  \"drop\": [\"mystatename\"],\n  \"fields\": [\"name\"]\n}]\n```\n\nThe `drop` field specifies a list of state names for which the subscriber wishes\nto discard the notification stream. It works very much like `defer` as described\nabove, but when a state is vacated, the pending notification stream is\nfast-forwarded to the clock of the `state-leave` command, effectively\nsuppressing any notifications that were generated between the `state-enter` and\nthe `state-leave` commands.\n\n## Source Control Aware Subscriptions\n\n_Since 4.9_\n\n[Read more about these here](scm-query.md)\n"
  },
  {
    "path": "website/docs/cmd/trigger-del.md",
    "content": "---\ntitle: trigger-del\ncategory: Commands\n---\n\nDeletes a named trigger from the list of registered triggers. This disables and\nremoves the trigger from both the in-memory and the saved state lists.\n\n```bash\n$ watchman trigger-del /root triggername\n```\n"
  },
  {
    "path": "website/docs/cmd/trigger-list.md",
    "content": "---\ntitle: trigger-list\ncategory: Commands\n---\n\nReturns the set of registered triggers associated with a root directory.\n\n```bash\n$ watchman trigger-list /root\n```\n\nNote that the format of the output from `trigger-list` changed in Watchman\nversion 2.9.7. It will now output a list of trigger objects as defined by the\n`trigger` command.\n"
  },
  {
    "path": "website/docs/cmd/trigger.md",
    "content": "---\ntitle: trigger\ncategory: Commands\n---\n\nThe trigger command will create or replace a trigger.\n\nA trigger is a saved incremental query over a watched root. When files change\nthat match the query expression, Watchman will spawn a process and pass\ninformation about the changed files to it.\n\nTriggered processes are spawned by the Watchman server process that runs in the\nbackground; they do not have access to your terminal and their output is\nredirected (by default) to the Watchman log file.\n\nWatchman waits for the filesystem to settle before processing any triggers,\nbatching the list of changed files together before invoking the registered\ncommand. You can adjust the settle period via the `.watchmanconfig` file.\n\nNote that deleted files are counted as changed files and are passed the command\nin exactly the same way as changed-but-existing files.\n\nWatchman will only run a single instance of the trigger process at a time. That\navoids fork-bomb style behavior in cases where your trigger also modifies files.\nWhen the process terminates, watchman will re-evaluate the trigger criteria\nbased on the clock at the time the process was last spawned; if a file list is\ngenerated watchman will spawn a new child with the files that changed in the\nmeantime.\n\nUnless `no-save-state` is in use, triggers are saved and re-established across a\nWatchman process restart. If you had triggeres saved prior to upgrading to\nWatchman 2.9.7, those triggers will be forgotten as you upgrade past version\n2.9.7; you will need to re-register them.\n\nThere are two syntaxes for registering triggers; a simple syntax that allows\nvery simple trigger configuration with some reasonable defaults, and a second\nextended syntax which is available since Watchman version 2.9.7.\n\nThe simple syntax is implemented in terms of the extended syntax and is\npreserved for backwards compatibility with older clients.\n\n### Extended syntax\n\n_Since 2.9.7._\n\nYou may use the extended JSON trigger definition syntax detailed below. It\nprovides more control over how the triggered commands are invoked than was\npossible in earlier versions.\n\nJSON:\n\n```json\n[\"trigger\", \"/path/to/dir\", <triggerobj>]\n```\n\nWhere `triggerobj` is a trigger configuration object with the fields defined\nbelow.\n\nHere's an example trigger specified via the CLI that will cause `make` to be run\nwhenever assets or sources are changed:\n\n```bash\n$ watchman -j <<-EOT\n[\"trigger\", \"/path/to/root\", {\n  \"name\": \"assets\",\n  \"expression\": [\"pcre\", \"\\.(js|css|c|cpp)$\"],\n  \"command\": [\"make\"]\n}]\nEOT\n```\n\nThe possible trigger object properties are:\n\n- `name` defines the name of the trigger. You may use this name to remove the\n  trigger later. Registering a different trigger with the same name as an\n  existing trigger will implicitly delete the old trigger and then register the\n  new one, causing the trigger expression to be evaluated for the whole tree.\n\n- `command` specifies the command to invoke. It must be an array of string\n  values; this will form the argv array of the trigger process. When the trigger\n  is spawned, the `$PATH` of the Watchman process will be used to locate the\n  command. If you have changed your `$PATH` since the Watchman process was\n  started, Watchman won't be able to see your new `$PATH`. If you are\n  registering trigger that runs something from an unusual or non-default\n  location, it is recommended that you specify the full path to that command. If\n  you are registering a trigger script that can be found in the watched root,\n  just specify the path relative to the root.\n\n- `append_files` is an optional boolean parameter; if enabled, the `command`\n  array will have the set of matching file names appended when the trigger is\n  invoked. System limits such as `sysconf(_SC_ARG_MAX)` and/or `RLIMIT_STACK`\n  set an upper bound on the size of the parameters and environment that are\n  passed to a spawned process. Watchman will try to ensure that the command is\n  runnable by keeping the number of file name arguments below the system limits.\n  If the full set cannot be passed to the process, Watchman will pass as many as\n  it thinks will fit and omit the rest. When this argument list truncation\n  occurs, Watchman will export `WATCHMAN_FILES_OVERFLOW=true` into the\n  environment so that the child process can determine that this has happened.\n  Watchman cannot break the arguments apart and run multiple processes for each\n  argument batch; for that functionality, use `xargs(1)` for the `command` and\n  set the `stdin` property to `NAME_PER_LINE`.\n\n- `expression` accepts a query expression. The expression is applied to the list\n  of changed files to generate the set of files that are relevant to this\n  trigger. If no files match, the command will not be invoked. Omitting the\n  expression will match all changed files.\n\n- `stdin` specifies how stdin should be configured for the command invocation.\n  You may set the value of this property to one of the following:\n  - the string value `/dev/null` - sets stdin to read from `/dev/null`. This is\n    the default and will be used if you omit the `stdin` property.\n\n  - an array value will be interpreted as a list of field names. When the\n    command is invoked, Watchman will generate an array of JSON objects that\n    contain those field names on stdin. For example, if `stdin` is set to\n    `[\"name\", \"size\"]`, stdin will be a JSON array containing the list of\n    changed files, represented as objects with the `name` and `size` properties:\n    `[{\"name\": \"filename.txt\", \"size\": 123}]`. The list of valid fields is the\n    same as the same as that documented in the `query` command. Just as with the\n    `query` command, if the field list is comprised of a single field then the\n    JSON will be an array of those field values. For instance, if you set\n    `stdin` to `[\"name\"]` the JSON will be of the form `[\"filename.txt\"]`\n    instead of `[{\"name\": \"filename.txt\"}]`.\n\n  - the string value `NAME_PER_LINE` will cause Watchman to generate a list of\n    file names on stdin, one name per line. No quoting will be applied to the\n    names, and they may contain spaces.\n\n- `stdout` and `stderr` control the output and error streams. If omitted, the\n  corresponding stream will be inherited from the Watchman process, which\n  typically means that the command output/error stream will show up in the\n  Watchman log file. If specified, the value must be a string:\n  - `>path/to/file` - causes output to redirected to the specified file. The\n    path is relative to the watched root, and will be truncated prior to being\n    written to, if it exists, or created if it does not exist.\n\n  - `>>path/to/file` - causes output to redirected to the specified file. The\n    path is relative to the watched root. If the file already exists then it\n    will be appended to. The file will be created if it does not exist.\n\n- `max_files_stdin` specifies a limit on the number of files reported on stdin\n  when stdin is set to hold the set of matched files. If the number of files\n  that matched exceeds this limit, the input will be truncated to match this\n  limit and `WATCHMAN_FILES_OVERFLOW=true` will also be exported into the\n  environment. The default, if omitted, is no limit.\n\n- `chdir` can be used to specify the working directory that should be set prior\n  to spawning the process. The default is to set the working directory to the\n  watched root. The value of this property is a string that will be interpreted\n  relative to the watched root. Note that changing the working dir does not\n  cause the file names from the query result to be re-written: they will\n  _always_ be relative to the watched root. The path to the root can be found in\n  the `$WATCHMAN_ROOT` environmental variable.\n\n### Simple syntax\n\nThe simple syntax is easier to execute from the CLI than the JSON based extended\nsyntax, but doesn't allow all of the trigger options to be set. In only supports\nthe [Simple Pattern Syntax](simple-query.md) for queries.\n\nFrom the command line:\n\n```bash\n$ watchman -- trigger /path/to/dir triggername [patterns] -- [cmd]\n```\n\nNote that the first `--` is to distinguish watchman CLI switches from the second\n`--`, which delimits patterns from the trigger command. This is only needed when\nusing the CLI, not when using the JSON protocol.\n\nJSON:\n\n```json\n[\"trigger\", \"/path/to/dir\", \"triggername\", <patterns>, \"--\", <cmd>]\n```\n\nFor example:\n\n```bash\n$ watchman -- trigger ~/www jsfiles '*.js' -- ls -l\n```\n\nNote the single quotes around the `*.js`; if you omit them, your shell will\nexpand it to a list of file names and register those in the trigger. While this\nwould work, any `*.js` files that you add after registering the trigger will not\ncause the trigger to run.\n\nor in JSON:\n\n```json\n[\"trigger\", \"/home/wez/www\", \"jsfiles\", \"*.js\", \"--\", \"ls\", \"-l\"]\n```\n\nThe simple syntax is interpreted as a trigger object with the following\nsettings:\n\n- `name` is set to the `triggername`\n- `command` is set to the `<cmd>` list\n- `expression` is generated from the `<patterns>` list using the rules laid out\n  in [Simple Pattern Syntax](simple-query.md)\n- `append_files` is set to `true`\n- `stdin` is set to `[\"name\", \"exists\", \"new\", \"size\", \"mode\"]`\n- `stdout` and `stderr` will be set to output to the Watchman log file\n- `max_files_stdin` will be left unset\n\nFor this simple example, if `~/www/scripts/foo.js` is changed, watchman will\nchdir to `~/www` then invoke `ls -l scripts/foo.js`. Note that the output will\nshow up in the Watchman log file, not in your terminal.\n\n### Environment for trigger commands\n\nSince Watchman version 2.9.7, the following environment variables are set for\nall trigger commands, even those registered using the simple trigger syntax:\n\n- `WATCHMAN_FILES_OVERFLOW` is set to `true` if the number of files exceeds\n  either the `max_files_stdin` limit or the system argument size limit.\n- `WATCHMAN_CLOCK` is set to the current clock at the time of the trigger\n  invocation\n- `WATCHMAN_SINCE` is set to the clock value of the prior trigger invocation, or\n  unset if this is the first trigger invocation.\n- `WATCHMAN_ROOT` is set to the path to the watched root\n- `WATCHMAN_TRIGGER` is set to the name of the trigger\n- `WATCHMAN_SOCK` is set to the path to the Watchman socket, so that you can\n  figure out how to connect back to Watchman.\n\n### Relative roots\n\n_Since 3.4._\n\nWatchman supports optionally evaluating triggers with respect to a path within a\nwatched root. This is used with the `relative_root` parameter:\n\n```json\n[\"trigger\", \"/path/to/watched/root\", {\n  \"name\": \"relative-assets\",\n  \"expression\": [\"pcre\", \"\\.(js|css|c|cpp)$\"],\n  \"command\": [\"make\"],\n  \"relative_root\": \"project1\"\n}]\n```\n\nSetting a relative root results in the following modifications to triggers:\n\n- Queries are evaluated with respect to the relative root. See\n  [File Queries](file-query.md) for more.\n- The current directory for triggered processes is set to the relative root,\n  unless it is changed with `chdir`. If `chdir` is a relative path then it will\n  be evaluated with respect to the relative root. So, for the example trigger\n  above, if `chdir` is `\"subdir2\"`, the current directory for triggered `make`\n  invocations is `/path/to/watched/root/project1/subdir2`.\n- In the environment, `WATCHMAN_ROOT` is still set to the actual root.\n- `WATCHMAN_RELATIVE_ROOT` is set to the full path of the relative root.\n\nRelative roots behave similarly to a separate Watchman watch on the\nsubdirectory, without any of the system overhead that that imposes. This is\nuseful for large repositories, where your script or tool is only interested in a\nparticular directory inside the repository.\n"
  },
  {
    "path": "website/docs/cmd/unsubscribe.md",
    "content": "---\ntitle: unsubscribe\ncategory: Commands\n---\n\nAvailable starting in version 1.6\n\nCancels a named subscription against the specified root. The server side will no\nlonger generate subscription packets for the specified subscription.\n\n```json\n[\"unsubscribe\", \"/path/to/root\", \"mysubscriptionname\"]\n```\n"
  },
  {
    "path": "website/docs/cmd/version.md",
    "content": "---\ntitle: version\ncategory: Commands\n---\n\nThe version command will tell you the version and build information for the\ncurrently running watchman service:\n\n```bash\n$ watchman version\n{\n    \"version\": \"2.9.6\",\n    \"buildinfo\": \"git:2727d9a1e47a4a2229c65cbb2f0c7656cbd96270\"\n}\n```\n\nTo get the version of the client:\n\n```bash\n$ watchman -v\n2.9.8\n```\n\nIf the server and client versions don't match up, you should probably restart\nyour server: `watchman shutdown-server ; watchman`.\n\n### Capabilities\n\n_Since 3.8._\n\nThe version command can be used to check for named capabilities. Capabilities\nmake it easier to check whether the server implements functionality based on the\nname of that function rather than by having the client build up knowledge about\nwhen those functions were introduced.\n\nYou can read more about the [available capability names](capabilities.md).\n\nTo check whether the `relative_root` capability is supported:\n\n```bash\n$ watchman -j <<< '[\"version\", {\"optional\":[\"relative_root\"]}]'\n{\n    \"version\": \"3.8.0\",\n    \"capabilities\": {\n        \"relative_root\": true\n    }\n}\n```\n\nIf the capability is not supported:\n\n```bash\n$ watchman -j <<< '[\"version\", {\"optional\":[\"will-never-exist\"]}]'\n{\n    \"version\": \"3.8.0\",\n    \"capabilities\": {\n        \"will-never-exist\": false\n    }\n}\n```\n\nTo have the server generate an error response if a capability is not supported:\n\n```bash\n$ watchman -j <<< '[\"version\", {\"required\":[\"will-never-exist\"]}]'\n{\n    \"version\": \"3.8.0\",\n    \"capabilities\": {\n        \"will-never-exist\": false\n    },\n    \"error\": \"client required capability `will-never-exist` is not supported by this server\"\n}\n```\n\nTo require one feature and test whether some optional features are supported:\n\n```bash\n$ watchman -j <<< '[\"version\", {\"required\":[\"term-match\"],\"optional\":[\"a\",\"b\"]}]'\n{\n    \"version\": \"3.8.0\",\n    \"capabilities\": {\n        \"a\": false,\n        \"b\": false,\n        \"term-match\": true\n    }\n}\n```\n\n### capabilityCheck\n\nThe **node** and **python** clients provide a `capabilityCheck` method that will\nperform the version check above, and that also provide limited support for\ntesting capability support against older versions of the watchman server. This\nfacilitates a smoother transition from version number based checks to capability\nnamed based checks.\n\nIn _python_:\n\n```python\nimport pywatchman\nclient = pywatchman.client()\n# will throw an error if any of the required names are not supported\nres = client.capabilityCheck(optional=['a'], required=['term-match'])\nprint res\n# {'version': '3.8.0', 'capabilities': {'term-match': True, 'a': False}}\n```\n\nIn _node_:\n\n```js\nvar watchman = require('fb-watchman');\nvar client = new watchman.Client();\nclient.capabilityCheck({optional:['a'], required:['term-match']},\n    function (error, resp) {\n        if (error) {\n          // error will be an Error object if any of the required named\n          // are not supported\n        }\n        console.log(resp);\n        // {'version': '3.8.0', 'capabilities': {'term-match': false, 'a': false}}\n        client.end();\n    });\n```\n"
  },
  {
    "path": "website/docs/cmd/watch-del-all.md",
    "content": "---\ntitle: watch-del-all\ncategory: Commands\n---\n\nAvailable since version 3.1.1.\n\nRemoves all watches and associated triggers.\n\nFrom the command line:\n\n```bash\n$ watchman watch-del-all\n```\n\nJSON:\n\n```json\n[\"watch-del-all\"]\n```\n\nAnalogous to the `watch-del` this command will remove all watches and associated\ntriggers from the running process, and the state file ( unless watchman service\nwas started with\n[--no-save-state server option](cli-options.md#server-options)).\n"
  },
  {
    "path": "website/docs/cmd/watch-del.md",
    "content": "---\ntitle: watch-del\ncategory: Commands\n---\n\nRemoves a watch and any associated triggers.\n\nFrom the command line:\n\n```bash\n$ watchman watch-del /path/to/dir\n```\n\nJSON:\n\n```json\n[\"watch-del\", \"/path/to/dir\"]\n```\n\nThe removed watch and any associated triggers will be removed from the state\nfile and will not be automatically watched if/when watchman is restarted.\n\nHowever, if `--no-save-state` was used to start the watchman service, the watch\nand triggers will be deleted from the running process but no changes will be\nmade to the state file. If this same directory is listed in the state file, the\nwatch will be re-established if/when the service is restarted.\n"
  },
  {
    "path": "website/docs/cmd/watch-list.md",
    "content": "---\ntitle: watch-list\ncategory: Commands\n---\n\nReturns a list of watched dirs.\n\nFrom the command line:\n\n```bash\n$ watchman watch-list\n```\n\nJSON:\n\n```json\n[\"watch-list\"]\n```\n\nResult:\n\n```json\n{\n    \"version\": \"1.9\",\n    \"roots\": [\n        \"/home/wez/watchman\"\n    ]\n}\n```\n"
  },
  {
    "path": "website/docs/cmd/watch-project.md",
    "content": "---\ntitle: watch-project\ncategory: Commands\n---\n\n_Since 3.1._\n\nRequests that the _project_ containing the requested dir is watched for changes.\nWatchman will track all files and dirs rooted at the _project_ path, and respond\nwith the relative path difference between the _project_ path and the requested\ndir.\n\n### Rationale\n\nWith a proliferation of tools that wish to take advantage of filesystem watching\nat different locations in a filesystem tree, it is possible and likely for those\ntools to establish multiple overlapping watches.\n\nMost systems have a finite limit on the number of directories that can be\nwatched effectively; when that limit is exceeded the performance and reliability\nof filesystem watching is degraded, sometimes to the point that it ceases to\nfunction.\n\nIt is therefore desirable to avoid this situation and consolidate the filesystem\nwatches. Watchman offers the `watch-project` command to allow clients to opt-in\nto the watch consolidation behavior described below.\n\n### What's a project path?\n\nA project is the logical root of a set of related files in a filesystem tree and\nis a good point at which to consolidate watches. Tools such as\n[hgwatchman](https://bitbucket.org/facebook/hgwatchman) will most likely have\nalready established a watch at the root of a project, so any other tools that\nwish to watch a sub-directory can do so for no additional cost if they re-use\nthat existing watch at a higher level in the filesystem tree.\n\nThe `watch-project` command uses a simple procedure to locate the _project_ path\nthat corresponds to a given path. While simple it is rather verbose to describe\nit precisely:\n\n1. The search is begun with a list of file names; we'll refer to it as\n   `root_files`. Any file in this list, if present in a directory, identifies\n   that directory as being a valid project directory.\n2. The search is begun with the candidate directory set to the argument passed\n   to `watch-project`. The candidate directory is passed to the `realpath(3)`\n   function and the result is set as the new value of the candidate directory.\n3. The candidate directory is concatenated with each of the `root_files`, one by\n   one, and the resultant path is tested for existence. If the path exists then\n   the candidate directory is the path that will be used for watch and the\n   search is halted successfully.\n4. If none of the `root_files` can be found in the candidate directory then the\n   parent of the candidate directory is used as a new candidate and the process\n   is repeated at step 3 above.\n5. If no viable candidates are found and the root of the filesystem is reached,\n   then the search terminates unsuccessfully.\n\nWatchman may perform the above search procedure twice. The logic is:\n\n1. `root_files` will be set to list only `.watchmanconfig`\n2. Perform the search procedure above\n3. If the search terminates successfully, then the watch is established for the\n   current value of the candidate directory.\n4. If the search terminates unsuccessfully, `root_files` is set to the global\n   configuration option [root_files](../config.md#root_files) and the search\n   procedure is re-run.\n5. If the search terminates successfully, then the watch is established for the\n   current value of the candidate directory.\n6. If the global configuration option\n   [enforce_root_files](../config.md#enforce_root_files) is set to true then the\n   watch attempt fails.\n7. Otherwise, the watch is established for the original argument to the\n   `watch-project` command\n\nWhat this means in laymans terms is that the definitive location of the project\nroot is where the `.watchmanconfig` file is found. If it is not found then the\nset of files defined by the `root_files` configuration is used to locate a\ncandidate.\n\nIf no viable candidate is found then watchman will watch the requested\ndirectory, unless the `enforce_root_files` setting is set to true.\n\nThe default value for `root_files` will match most common version control root\ndirectories. The default value for `enforce_root_files` is `false`.\n\n### Using watch-project\n\nAssuming that `~/www/.hg` and `~/www/some/child/dir` both exist, then the\ncommand:\n\n```bash\n$ watchman watch-project ~/www/some/child/dir\n{\n  \"version\": \"3.0.1\",\n  \"watch\": \"/Users/wez/www\",\n  \"relative_path\": \"some/child/dir\"\n}\n```\n\nestablishes a watch on the `~/www` directory because that is the directory that\ncontains `.hg`, which is one of the items listed in the default value for\n`root_files`.\n\nAs a client using `watch-project` it is important to observe the `relative_path`\nand/or `watch` elements of the response; they identify which directory is\nactually being watched. **Any triggers, subscriptions or queries that the client\nissues must be relative to the watched root to operate as expected.** A client\ncan use `relative_path` to more easily construct queries or adjust the results\nof queries by either concatenating the string when composing paths in a query\nexpression or removing the string from the prefix when processing the results.\n\nIf `relative_path` is missing from the response it means that the requested dir\nis the same as the watched dir and that the `watch-project` invocation turned\nout to be exactly equivalent to a `watch` invocation for the requested\ndirectory.\n\nNote that, when you're using the CLI, you can specify the root as\n`~/www/some/child/dir` because the shell will resolve `~/www/some/child/dir` to\n`/Users/wez/www/some/child/dir`, but when you use the JSON protocol, you are\nresponsible for supplying an absolute path.\n\nJSON:\n\n```json\n[\"watch\", \"/Users/wez/www/some/child/dir\"]\n```\n\n### Initiating a watch\n\nOnce a viable candidate is found, if watchman is not already watching the\ndirectory, then watchman will:\n\n- Establish change notification for the directory with the kernel\n- Queues up a request to crawl the directory\n- As the directory contents are resolved, those are watched in a similar fashion\n- All newly observed files are considered changed\n\n### Persistence\n\nUnless the `--no-save-state` server option was used to start the watchman\nservice, watches and their associated triggers are saved and re-established\nacross a process restart.\n\n_Since 3.7._\n\nThe watchman service may decide to reap watches that have been idle for an\nextended period of time. A watch is considered to be idle if no watchman queries\nhave been issued against the watch. If a watch is idle, and has no triggers\nregistered or active subscriptions then it is a candidate for reaping.\n\nThe [idle_reap_age_seconds](../config.md#idle-reap-age-seconds) configuration\nparameter controls the idle timeout for a watch. The default is 5 days. A reaped\nwatch is cancelled and removed from the state file.\n"
  },
  {
    "path": "website/docs/cmd/watch.md",
    "content": "---\ntitle: watch\ncategory: Commands\n---\n\nDeprecated starting in version 3.1. We recommend that clients adopt the\n[watch-project](cmd/watch-project.md) command.\n\nRequests that the specified dir is watched for changes. Watchman will track all\nfiles and dirs rooted at the specified path.\n\nFrom the command line:\n\n```bash\n$ watchman watch ~/www\n```\n\nNote that, when you're using the CLI, you can specify the root as `~/www`\nbecause the shell will resolve `~/www` to `/home/wez/www`, but when you use the\nJSON protocol, you are responsible for supplying an absolute path.\n\nJSON:\n\n```json\n[\"watch\", \"/home/wez/www\"]\n```\n\nWatchman will `realpath(3)` the directory and start watching it if it isn't\nalready. A newly watched directory is processed in a couple of stages:\n\n- Establishes change notification for the directory with the kernel\n- Queues up a request to crawl the directory\n- As the directory contents are resolved, those are watched in a similar fashion\n- All newly observed files are considered changed\n\nUnless the `--no-save-state` server option was used to start the watchman\nservice, watches and their associated triggers are saved and re-established\nacross a process restart.\n\n## Case-Insensitivity\n\nWatchman has the following level of support for case-insensitive filesystems,\nstarting in version 2.9.9 on macOS only:\n\n- each watched root is queried to determine if it is case-insensitive. This is\n  the common default for most Mac systems running HFS+.\n- When in case-insensitive mode, Watchman will attempt to resolve the true\n  canonical name of a file on the filesystem when it observes changes.\n- If the case of a filename changes, Watchman will report a delete of the old\n  name and a change for the new name.\n- Query expressions that match names will default to case-insensitive when the\n  root is on a case-insensitive filesystem.\n- Watchman's case folding is ASCII case-folding. Note that the `match` and\n  `pcre` query expression terms request case folding support from the containing\n  library, and that their case folding behavior is not controlled by Watchman\n  beyond being enabled when the root is case-insensitive.\n- The `path` generator is always case sensitive.\n"
  },
  {
    "path": "website/docs/compatibility.md",
    "content": "---\ntitle: Compatibility Rules\ncategory: Compatibility\n---\n\n`watchman` has been used in production since a few weeks after it was first\nwritten, and thus it has always made an effort to be backward compatible across\nreleases and platforms.\n\n- Commands and options will never be removed, but new ones may be added.\n- We may _deprecate_ commands and options and remove them from documentation,\n  but they will still continue to work forever.\n- Whenever a command or option is deprecated, we will provide a suitable\n  alternative.\n- Bugfixes might cause minor behavior changes -- these changes will usually be\n  documented in release notes.\n\n`watchman` does **not** follow [semantic versioning](http://semver.org)!\n\n- Since its public APIs never make incompatible changes, MAJOR versions are\n  moot.\n- While in the past we've released versions with three components (x.y.z),\n  starting version 3.1 the version number will only have two components that are\n  meaningful (x.y), with the third component always zero.\n- The version after 3.9 is expected to be 4.0. The version number string\n  reported by these versions will be 3.9.0 and 4.0.0 respectively.\n\n_Since 3.8._\n\n`watchman` introduces [capabilities](capabilities.md) to describe new or\noptional features. You can use the [expanded version command](./cmd/version.md)\nto query capabilities and avoid building knowledge of version numbers in your\nclient application(s).\n\n_Since May 2020_\n\nWatchman is continuously deployed inside Facebook, which means that we don't\nexplicitly maintain version numbers. For a while we maintained version numbers\nfor GitHub releases but found it to be too much overhead.\n\nStarting in 2020 we've set up automation to cut a weekly date based on the date;\nthis more closely matches our internal processes than manually managing version\nnumbers.\n\nYou'll notice that both the\n[tags on GitHub](https://github.com/facebook/watchman/tags) and the version\nreported by `watchman version` are date based.\n"
  },
  {
    "path": "website/docs/config.md",
    "content": "---\ntitle: Configuration Files\ncategory: Invocation\nsidebar_position: 7\n---\n\nWatchman looks for configuration files in two places:\n\n- The global configuration file `/etc/watchman.json`\n- The root specific configuration file `.watchmanconfig`\n\nWhen watching a root, if a valid JSON file named `.watchmanconfig` is present in\nthe root directory, watchman will load it and use it as a source of\nconfiguration information specific to that root.\n\nThe global configuration path can be changed by passing the `--enable-conffile`\noption to configure when you build watchman. This documentation refers to it as\n`/etc/watchman.json` throughout, just be aware that your particular installation\nmay locate it elsewhere. In addition, the environmental variable\n`$WATCHMAN_CONFIG_FILE` will override the default location.\n\nIf the global configuration file does not exist, Watchman will fall back on that\npath with \".default\" appended (e.g. /etc/watchman.json.default). This allows the\nWatchman system package to provide different configuration defaults, like\nsetting enforce_root_files to true.\n\nChanges to the `.watchmanconfig` or `/etc/watchman.json` files are not picked up\nautomatically; you will need to remove and re-add the watch (for\n`.watchmanconfig`) or restart watchman (for `/etc/watchman.json`) for those\nchanges to take effect.\n\n### Resolution / Scoping\n\nThere are three configuration scopes:\n\n- **local** - the option value is read from the `.watchmanconfig` file in the\n  associated root.\n- **global** - the option value is read from the `/etc/watchman.json` file\n- **fallback** - the option value is read from the `.watchmanconfig` file. If\n  the option was not present in the `.watchmanconfig` file, then read it from\n  the `/etc/watchman.json` file.\n\nThis table shows the scoping and availability of the various options:\n\n| Option                      | Scope    | Since version     |\n| --------------------------- | -------- | ----------------- |\n| `settle`                    | local    |\n| `root_restrict_files`       | global   | deprecated in 3.1 |\n| `root_files`                | global   | 3.1               |\n| `enforce_root_files`        | global   | 3.1               |\n| `illegal_fstypes`           | global   | 2.9.8             |\n| `illegal_fstypes_advice`    | global   | 2.9.8             |\n| `ignore_vcs`                | local    | 2.9.3             |\n| `ignore_dirs`               | local    | 2.9.3             |\n| `gc_age_seconds`            | local    | 2.9.4             |\n| `gc_interval_seconds`       | local    | 2.9.4             |\n| `fsevents_latency`          | fallback | 3.2               |\n| `idle_reap_age_seconds`     | local    | 3.7               |\n| `hint_num_files_per_dir`    | fallback | 3.9               |\n| `hint_num_dirs`             | fallback | 4.6               |\n| `suppress_recrawl_warnings` | fallback | 4.7               |\n\n### Configuration Options\n\n### settle\n\nSpecifies the settle period in _milliseconds_. This controls how long the\nfilesystem should be idle before dispatching triggers. The default value is 20\nmilliseconds.\n\n### root_files\n\n_Since 3.1._\n\nSpecifies a list of files that, if present in a directory, identify that\ndirectory as the root of a project.\n\nIf left unspecified, to aid in transitioning between versions, watchman will use\nthe value of the now deprecated [root_restrict_files](#root_restrict_files)\nconfiguration setting.\n\nIf neither `root_files` nor `root_restrict_files` is specified in the\nconfiguration, watchman will use a default value consisting of:\n\n- `.git`\n- `.hg`\n- `.svn`\n- `.watchmanconfig`\n\nWatchman will add `.watchmanconfig` to whatever value is specified for this\nconfiguration value if it is not present.\n\nThis example causes only `.watchmanconfig` to be considered as a project root\nfile:\n\n```json\n{\n  \"root_files\": [\".watchmanconfig\"]\n}\n```\n\nSee the [watch-project](cmd/watch-project.md) command for more information.\n\n### enforce_root_files\n\n_Since 3.1._\n\nThis is a boolean option that defaults to `false`. If it is set to `true` then\nthe [watch](cmd/watch.md) command will only succeed if the requested directory\ncontains one of the files listed by the [root_files](#root_files) configuration\noption, and the [watch-project](cmd/watch-project.md) command will only succeed\nif a valid project root is found.\n\nIf left unspecified, to aid in transitioning between versions, watchman will\ncheck to see if the now deprecated [root_restrict_files](#root_restrict_files)\nconfiguration setting is present. If it is found then the effective value of\n`enforce_root_files` is set to `true`.\n\n### root_restrict_files\n\n_Deprecated starting in version 3.1; use [root_files](#root_files) and\n[enforce_root_files](#enforce_root_files) to effect the same behavior._\n\nSpecifies a list of files, at least one of which should be present in a\ndirectory for watchman to add it as a root. By default there are no\nrestrictions.\n\nFor example,\n\n```json\n{\n  \"root_restrict_files\": [\".git\", \".hg\"]\n}\n```\n\nwill allow watches only in the top level of Git or Mercurial repositories.\n\n### illegal_fstypes\n\nSpecifies a list of filesystem types that watchman is prohibited to attempt to\nwatch. Watchman will determine the filesystem type of the root of a watch; if\nthe typename is present in the `illegal_fstypes` list, the watch will be\nprohibited. You may also specify `illegal_fstypes_advice` as a string with\nadditional advice to your user. The purpose of this configuration option is\nlargely to prevent the use of Watchman on network mounted filesystems. On Linux\nsystems, Watchman may not be able to determine the precise type name of a\nmounted filesystem. If the filesystem type is not known to watchman, it will be\nreported as `unknown`.\n\nFor example,\n\n```json\n{\n  \"illegal_fstypes\": [\"nfs\", \"cifs\", \"smb\"],\n  \"illegal_fstypes_advice\": \"use a local directory\"\n}\n```\n\nwill prevent watching dirs mounted on network filesystems and provide the advice\nto use a local directory. You may omit the `illegal_fstypes_advice` setting to\nuse a default suggestion to relocate the directory to local disk.\n\n### ignore_vcs\n\nApply special VCS ignore logic to the set of named dirs. This option has a\ndefault value of `[\".git\", \".hg\", \".svn\", \".jj\"]`. Dirs that match this option\nare observed and watched using special shallow logic. The shallow watch allows\nwatchman to mildly abuse the version control directories to store its query\ncookie files and to observe VCS locking activity without having to watch the\nentire set of VCS data for large trees.\n\n### ignore_dirs\n\nDirs that match are completely ignored by watchman. This is useful to ignore a\ndirectory that contains only build products and where file change notifications\nare unwanted because of the sheer volume of files.\n\nFor example,\n\n```json\n{\n  \"ignore_dirs\": [\"build\"]\n}\n```\n\nwould ignore the `build` directory at the top level of the watched tree, and\neverything below it. It will never appear in the watchman query results for the\ntree.\n\nOn Linux systems, `ignore_dirs` is respected at the OS level; the kernel simply\nwill not tell watchman about changes to ignored dirs. macOS and Windows have\nlimited or no support for this, so watchman needs to process and ignore this\nclass of change.\n\nFor large trees or especially busy build dirs, it is recommended that you move\nthe busy build dirs out of the tree for more optimal performance.\n\nSince version 2.9.9, if you list a dir in `ignore_dirs` that is also listed in\n`ignore_vcs`, the `ignore_dirs` placement will take precedence. This may not\nsound like a big deal, but since `ignore_vcs` is used as a hint to for the\nplacement of [cookie files](cookies.md), having these two options overlap in\nearlier versions would break watchman queries.\n\n_Since 4.6._\n\nOn macOS the first 8 items listed in `ignore_dirs` can be accelerated at the OS\nlevel. This means that changes to those paths are not even communicated to the\nwatchman service. Entries beyond the first 8 are processed and ignored by\nwatchman. If your workload is prone to recrawl events you will want to\nprioritize your `ignore_dirs` list so that the most busy ignored locations\noccupy the first 8 positions in this list.\n\n### gc_age_seconds\n\nDeleted files (and dirs) older than this are periodically pruned from the\ninternal view of the filesystem. Until they are pruned, they will be visible to\nqueries but will have their `exists` field set to `false`. Once they are pruned,\nwatchman will remember the most recent clock value of the pruned nodes. Any\nsince queries based on a clock prior to the last prune clock will be treated as\na fresh instance query. This allows a client to detect and choose how to handle\nthe case where they have missed changes. See `is_fresh_instance` elsewhere in\nthis document for more information. The default for this is `43200` (12 hours).\n\n### gc_interval_seconds\n\nHow often to check for, and prune out, deleted nodes per the `gc_age_seconds`\noption description above. The default for this is `86400` (24 hours). Set this\nto `0` to disable the periodic pruning operation.\n\n### fsevents_latency\n\nControls the latency parameter that is passed to `FSEventStreamCreate` on macOS.\nThe value is measured in seconds. The fixed value of this parameter prior to\nversion 3.2 of watchman was `0.0001` seconds. Starting in version 3.2 of\nwatchman, the default is now `0.01` seconds and can be controlled on a per-root\nbasis.\n\nIf you observe problems with `kFSEventStreamEventFlagUserDropped` increasing the\nlatency parameter will allow the system to batch more change notifications\ntogether and operate more efficiently.\n\n### fsevents_try_resync\n\nThis is macOS specific.\n\n_Since 4.6._\n\nDefaults to `false`. If set to `true`, if a watch receives a\n`kFSEventStreamEventFlagUserDropped` event, attempt to resync from the\n`fsevents` journal if it is available. The journal may not be available if one\nor more volumes are mounted read-only, if the administrator has purged the\njournal, or if the `fsevents` id numbers have rolled over.\n\nThis resync operation is advantageous because it effectively allows rewinding\nand replaying the event stream from a known point in time and avoids the need to\nrecrawl the entire watch.\n\nIf this option is set to `false`, or if the journal is not available, the\noriginal strategy of recrawling the watched directory tree is used instead.\n\n_Since 4.7._\n\nThe default changed to `true`. In addition, this resync strategy is now also\napplied to `kFSEventStreamEventFlagKernelDropped` events.\n\n_Since December 2021._\n\nThe default changed to `false`. There are possible undiagnosed correctness\nissues with this setting.\n\n### prefer_split_fsevents_watcher\n\nThis is macOS specific.\n\nDefaults to `false`. If set to `true`, Watchman will use several FSEvents\nstreams to watch a directory hierarchy instead of a single stream. This has been\nshown to significantly reduce the number of `kFSEventStreamEventFlagUserDropped`\nevents for workflows issuing heavy writes to a top-level directory that is\nlisted in [ignore_dirs](#ignore_dirs).\n\n### idle_reap_age_seconds\n\n_Since 3.7._\n\nHow many seconds a watch can remain idle before becoming a candidate for\nreaping, measured in seconds. The default for this is `432000` (5 days). Set\nthis to `0` to prevent reaping.\n\nA watch is considered to be idle when it has had no commands that operate on it\nfor `idle_reap_age_seconds`. If an idle watch has no triggers and no\nsubscriptions then it will be cancelled, releasing the associated operating\nsystem resources, and removed from the state file.\n\n### hint_num_files_per_dir\n\n_Since 3.9._\n\nUsed to pre-size hash tables used to track files per directory. This is most\nimpactful during the initial crawl of the filesystem. Setting this too small\nwill increase the chance of a hash insert having a collision and drive up the\ncost of the insert and subsequent gets.\n\nPrior to version 3.9 of watchman this value was fixed at `2`. Starting in\nversion 3.9 the default value is `64` and can be configured via this setting in\nthe `.watchmanconfig` or the global `/etc/watchman.json` configuration file.\n\nSetting this value very large increases the memory overhead per directory in the\ntree; the value is rounded up to the next power of two and pre-allocated in an\narray of pointers. On a 64-bit system multiply that number by 8 to arrive at the\nnumber of bytes of overhead (halve this on a 32-bit system). The overhead is\ndoubled when using a case insensitive filesystem.\n\nThe ideal size from a time complexity perspective is the number of files in your\nlargest directory. From a space complexity perspective, the ideal size is 1; you\nwould pay the cost of the collisions during the initial crawl and have a more\noptimal memory usage. Since watchman is primarily employed as an accelerator,\nwe'd recommend biasing towards using more memory and taking less time to run.\n\n### hint_num_dirs\n\n_Since 4.6_\n\nUsed to pre-size hash tables that are used to track the total set of files in\nthe entire watched tree. The default value for this is 131072.\n\nThe optimal size is a power-of-two larger than the number of directories in your\ntree; running `find . -type d | wc -l` will tell you the number that you have.\n\nMaking this number too large is potentially wasteful of memory. Making this\nnumber too small results in increased latency during crawling while the hash\ntables are rebuilt.\n\n### suppress_recrawl_warnings\n\n_Since 4.7_\n\nWhen set to `true`, watchman will not produce recrawl related warning fields in\nthe response PDUs of various requests. The default is `false`; the intent is\nthat someone in your organization should be aware of recrawls and be able to\nmanage the configuration and workload. Some sites employ an alternative\nmechanism for sampling and reporting this to the right set of people and wish to\ndisable the warning so that it doesn't appear in front of users that are unable\nto make the appropriate configuration changes for themselves.\n\n### eden_file_count_threshold_for_fresh_instance\n\nThis is specific to the EdenFS watcher\n\nWhen set to a non-zero value, Watchman will return a _fresh instance_ to since\nqueries/subscriptions if the number of changed files exceeds the configured\nvalue. In particular, during large updates of the working copies, a lot of files\nmay have changed forcing both Watchman and EdenFS to fetch a significant amount\nof metadata to answer these queries.\n\nThis behavior is only enabled if the query specifies the\n`empty_on_fresh_instance` option or when this config is set to `0`. Default to\n`10000`.\n"
  },
  {
    "path": "website/docs/contributing.md",
    "content": "---\ntitle: Contributing\ncategory: Internals\n---\n\nIf you're thinking of hacking on watchman we'd love to hear from you! Feel free\nto use the GitHub issue tracker and pull requests discuss and submit code\nchanges.\n\nWe (Facebook) have to ask for a \"Contributor License Agreement\" from someone who\nsends in a patch or code that we want to include in the codebase. This is a\nlegal requirement; a similar situation applies to Apache and other ASF projects.\n\nIf we ask you to fill out a CLA we'll direct you to\n[our online CLA page](https://code.facebook.com/cla) where you can complete it\neasily. We use the same form as the Apache CLA so that friction is minimal.\n\nFacebook Open Source provides a Code of Conduct statement for all projects to\nfollow, to promote a welcoming and safe open source community. Please\n[read the full text](https://code.facebook.com/codeofconduct) so that you can\nunderstand what actions will and will not be tolerated.\n\n### Getting Started\n\nYou need to be able to build watchman from source and run its test suite. You\nwill need:\n\n- python\n- automake\n- autoconf\n- cmake\n- libtool (or glibtool on macOS)\n- libpcre\n- libfolly (only needed if building the cppclient library)\n- nodejs (for fb-watchman)\n\nThe build time dependencies can be installed by running\n`getdeps.py --install-deps`. This is run for you when you run `autogen.sh` in\nthe example below:\n\n```bash\n$ git clone https://github.com/facebook/watchman.git\n$ cd watchman\n$ ./autogen.sh\n$ make\n```\n\nAfter making a change, run the integration tests to make sure that things are\nstill working well before you submit your pull request:\n\n```bash\n$ make integration\n```\n\nWe'll probably ask you to augment the test suite to cover the functionality that\nyou're adding or changing.\n\nPlease keep in mind that our versioning philosophy in Watchman is to provide an\n_append only_ API. If you're changing functionality, we'll ask you to do so in\nsuch a way that it won't break older clients of Watchman.\n\n### Don't forget the docs\n\nIf you're changing or adding new functionality, we'll ask you to also update the\ndocumentation. You will need `ruby` 2.0.0 or later to preview the documentation.\n\nOne time setup:\n\n```bash\n$ cd website\n$ sudo gem install bundler\n$ sudo bundler install\n```\n\nThen:\n\n```bash\n$ jekyll serve -w -t\n```\n\nThis will print out a URL that you can open in your browser to preview your\ndocumentation changes.\n\nThe source for the documentation is in the `website/_docs` dir in markdown\nformat.\n"
  },
  {
    "path": "website/docs/cookies.md",
    "content": "---\ntitle: Query Synchronization\ncategory: Internals\n---\n\nA file system monitor needs to make sure that queries see up-to-date views.\nWatchman ensures that by creating a unique _cookie_ for each query made to it.\n\n## Background\n\nConsider a directory tree traversal to gather file status, such as the one\nperformed by `hg status` or `git status`. The traversal will race with any\noperations happening concurrently, and this is impossible to fix. However, we do\nget some weaker guarantees:\n\n1. Every file operation that happens before the traversal is started will be\n   observed.\n2. File operations that happen after the traversal is started may or may not be\n   observed.\n\nFor watchman, cookies enable us to provide similar guarantees. For a given\nwatchman query:\n\n1. Every file operation that happens before the query is started will be\n   observed.\n2. File operations that happen after the query is started may or may not be\n   observed.\n\n## How cookies work\n\nA _cookie_ is a temporary file that is created inside a directory observed by\nwatchman. The cookie is created in a directory that is expected not to go away.\nThe obvious location is the root itself, but we'd like cookies not to show up in\nVCS operations. So if a VCS directory (`.git`, `.hg` or `.svn`) is found, that's\nwhere cookies are created instead.\n\nThe cookie is created while the root is locked, so watchman won't find the\ncookie by accident while processing events from a prior run.\n\nOnce the cookie is created, the calling thread waits on a condition variable\nguarded by the root's lock. This causes the lock to be released, and the root's\nnotify thread can now read events as usual.\n\nWhen the notify thread finds that it is processing a cookie, it will signal its\nrespective condition variable. Importantly, this does not wake the calling\nthread up immediately: since the notify thread still holds the root lock, the\ncalling thread will only be able to proceed once the notify thread releases the\nlock.\n\n_What do cookies get us?_\n\nFile monitoring systems like `inotify` typically provide an ordering guarantee:\nnotifications arrive in the order they happen. Any events happening before the\ncookie is created will appear before the event for the cookie does, which means\nthey will be processed by the time the query is answered.\n\n_How well do cookies work?_\n\nThe Mercurial test suite has proved to be a good stress test for watchman.\nBefore cookies were implemented, if 16 or more tests from the suite were run in\nparallel, watchman would start falling behind and often produce outdated\nanswers. Cookies have successfully eradicated that.\n\n_Can watchman find a cookie even if not all events leading to its appearance\nhave been processed?_\n\nConsider this situation when cookies are created inside `.hg`:\n\n1. Event A happens that would cause `.hg` to be read recursively\n2. Event B happens that touches a file `subdir/foo`\n3. A cookie is created inside `.hg`, causing event C\n4. Event A is read from the OS file notification system but not events B and C\n5. The cookie is found but `subdir/foo` is never read.\n\nOn Linux, to prevent this from happening, watchman will only consider a cookie\nto be found if it is directly returned via OS notifications. The only exception\nto this is during the initial crawl or a recrawl, when the cookie directory\nisn't being watched yet.\n\nOn other platforms, this becomes more complicated because the respective\nmonitoring system only tells us that something inside a directory was created,\nnot what was created. This is currently an unresolved issue.\n\n## Limitation: macOS FSEvents\n\nOn macOS, Watchman uses\n[FSEvents](https://developer.apple.com/documentation/coreservices/file_system_events)\nto monitor filesystem changes. Watchman uses a combination of cookie files\ndescribed above and\n[FSEventStreamFlushSync](https://developer.apple.com/documentation/coreservices/1445629-fseventstreamflushsync)\nto attempt to catch up with all prior changes.\n\nUnfortunately, in high-load situations like a large `git checkout` on a busy\nhost, we have observed that FSEvents from the `git checkout` may be received\nafter the cookie file notification and FSEventStreamFlushSync returning.\n\nIt turns out that FSEvents provides no guarantees here, and relying on it for\nquery synchronization is unsupported on any current Apple platform. Their\nsuggested workaround is to implement a watcher with\n[Endpoint Security](https://developer.apple.com/documentation/endpointsecurity).\nNobody has evaluated the feasibility of this yet.\n\nIn the meantime, you can set a `settle_period` and `settle_timeout` on the\nquery. Both are integer milliseconds, and `settle_period` specifies the required\nquiescence before the watcher is considered caught up.\n\n## Credits\n\nThe idea was originally proposed by Olivia Mackall <olivia@selenic.com>.\n"
  },
  {
    "path": "website/docs/cppclient.md",
    "content": "---\ntitle: C++ Client\ncategory: Invocation\nsidebar_position: 5\n---\n\n_Since 4.8._\n\nWatchman includes a C++ client library to facilitate easy access to Watchman\ndata from C++ applications. This library provides APIs for:\n\n- Opening and maintaining a connection to a local Watchman server.\n- Executing request-response Watchman commands.\n- Subscribing to updates with in directory trees.\n\n## Installation\n\nProvided the Folly library is present when Watchman is built, the C++ client\nlibrary is automatically built and installed. For details on building Watchman\nsee [Installation](install.md).\n\n## API\n\nThe public Watchman C++ client API is entirely covered in the installed\n`watchman/WatchmanClient.h` header file. This header contains a usage synopsis\nand notes on the public API features.\n\nFor a simple example of API usage, sending simple request-response commands to\nWatchman, see `cppclient/CLI.cpp` in the Watchman source tree. For a more\nextensive example of the API including use of subscriptions, see the integration\ntest `integration/cppclient.cpp` also in the Watchman source.\n\nThe C++ client library and its API make heavy use of the Folly library and as\nsuch familiarity with this is highly recommended. Specifically, the client\nlibrary makes extensive use of\n[Folly's async features](https://github.com/facebook/folly/blob/master/folly/io/async/README.md)\nto provide high-performance asynchronous I/O, and\n[Folly's dynamics](https://github.com/facebook/folly/blob/master/folly/docs/Dynamic.md)\nto avoid needing to construct/process raw JSON in C++.\n\n## Using the C++ client in your application's build\n\nTo facilitate integration into your application's build, the Watchman C++ client\nlibrary provides support for\n[pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/).\n\nFor example, if your application was contained entirely in one C++ file called\n`app.cpp` the following would be sufficient for build on a system with GNU Make:\n\n```bash\n$ make LDFLAGS=$(pkg-config watchmanclient --libs) CPPFLAGS=$(pkg-config watchmanclient --cflags) app\n```\n\nIf Watchman is installed in a location `pkg-config` does not search for packages\nby default, you may need to modify the `PKG_CONFIG_PATH` environment variable.\nFor example:\n\n```bash\n$ export PKG_CONFIG_PATH=<watchman path>/lib/pkgconfig:$PKG_CONFIG_PATH\n```\n"
  },
  {
    "path": "website/docs/expr/_category_.json",
    "content": "{\n    \"label\": \"Expression Terms\"\n}\n"
  },
  {
    "path": "website/docs/expr/allof.md",
    "content": "---\ntitle: allof\ncategory: Expression Terms\n---\n\nThe `allof` expression term evaluates as true if all of the grouped expressions\nalso evaluated as true. For example, this expression matches only files whose\nname ends with `.txt` and that are not empty files:\n\n    [\"allof\", [\"match\", \"*.txt\"], [\"not\", \"empty\"]]\n\nEach array element after the term name is evaluated as an expression of its own:\n\n    [\"allof\", expr1, expr2, ... exprN]\n\nEvaluation of the subexpressions stops at the first one that returns false.\n"
  },
  {
    "path": "website/docs/expr/anyof.md",
    "content": "---\ntitle: anyof\ncategory: Expression Terms\n---\n\nThe `anyof` expression term evaluates as true if any of the grouped expressions\nalso evaluated as true. The following expression matches files whose name ends\nwith either `.txt` or `.md`:\n\n    [\"anyof\", [\"match\", \"*.txt\"], [\"match\", \"*.md\"]]\n\nEach array element after the term name is evaluated as an expression of its own:\n\n    [\"anyof\", expr1, expr2, ... exprN]\n\nEvaluation of the subexpressions stops at the first one that returns true.\n"
  },
  {
    "path": "website/docs/expr/dirname.md",
    "content": "---\ntitle: dirname & idirname\ncategory: Expression Terms\n---\n\n_Since version 3.1_\n\nThe `dirname` term allows matching on the parent directory structure for a given\nfile.\n\nFor the examples below, given a file with a wholename (the relative path from\nthe project root) of `foo/bar/baz`, the dirname portion is `foo/bar`.\n\nThe following two terms will match any file whose dirname is either exactly a\nmatch for `foo/bar` or is any child directory of `foo/bar`. The first of these\ntwo is a shortcut for the second:\n\n      [\"dirname\", \"foo/bar\"]\n      [\"dirname\", \"foo/bar\", [\"depth\", \"ge\", 0]]\n\nThe second of those terms uses a relational expression based on the depth of the\nfile within the specified dirname. A file is considered to have `depth == 0` if\nit is contained directly within the specified dirname. It has `depth == 1` if it\nis contained in a direct child directory of the specified dirname, `depth == 2`\nif it is contained in a grand-child directory and so on.\n\nThe relational expression accepts the same relational operators as described in\nthe [size term](size.md).\n\nIf you wanted to match only files that were directly in the `foo/bar` dir:\n\n      [\"dirname\", \"foo/bar\", [\"depth\", \"eq\", 0]]\n\nIf you wanted to match only files that were in a grand-child or deeper:\n\n      [\"dirname\", \"foo/bar\", [\"depth\", \"ge\", 2]]\n\n`idirname` is the case insensitive version of `dirname`. If the watched root is\ndetected as a case insensitive fileystem, `dirname` is equivalent to `idirname`.\n"
  },
  {
    "path": "website/docs/expr/empty.md",
    "content": "---\ntitle: empty\ncategory: Expression Terms\n---\n\nEvaluates as true if the file exists, has size 0 and is a regular file or\ndirectory.\n\n    \"empty\"\n    [\"empty\"]\n"
  },
  {
    "path": "website/docs/expr/exists.md",
    "content": "---\ntitle: exists\ncategory: Expression Terms\n---\n\nEvaluates as true if the file exists\n\n    \"exists\"\n    [\"exists\"]\n"
  },
  {
    "path": "website/docs/expr/false.md",
    "content": "---\ntitle: \"false\"\nsection: Expression Terms\n---\n\nThe `false` expression always evaluates as false.\n\n    \"false\"\n    [\"false\"]\n"
  },
  {
    "path": "website/docs/expr/match.md",
    "content": "---\ntitle: match & imatch\ncategory: Expression Terms\n---\n\nThe `match` expression performs a glob-style match against the basename of the\nfile, evaluating true if the match is successful.\n\n```json\n[\"match\", \"*.txt\"]\n```\n\nYou may optionally provide a third argument to change the scope of the match\nfrom the basename to the wholename of the file.\n\n```json\n[\"match\", \"*.txt\", \"basename\"]\n[\"match\", \"dir/*.txt\", \"wholename\"]\n```\n\n### Case sensitivity\n\n`match` is case sensitive; for case insensitive matching use `imatch` instead;\nit behaves identically to `match` except that the match is performed ignoring\ncase.\n\n_Since 2.9.9._\n\nOn systems where the watched root is a case insensitive filesystem (this is the\ncommon case for macOS and Windows), `match` is equivalent to `imatch`.\n\n_Since 4.7._\n\nYou can override the case sensitivity of all name matching operations used in\nthe query by setting the `case_sensitive` field in your query.\n\n## wildmatch\n\n_Since 3.7._\n\nThe `match` expression has been enhanced as described below. The\n[capability](capabilities.md) name associated with this enhanced functionality\nis `wildmatch`.\n\nIf you want to recursively match all files under a directory, use the `**` glob\noperator along with the `wholename` scope:\n\n```json\n[\"match\", \"src/**/*.java\", \"wholename\"]\n```\n\nBy default, paths whose names start with `.` are not included. To change this\nbehavior, you may optionally provide a fourth argument containing a dictionary\nof flags:\n\n```json\n[\"match\", \"*.txt\", \"basename\", {\"includedotfiles\": true}]\n```\n\nBy default, backslashes in the pattern escape the next character, so `\\*`\nmatches a literal `*` character. To change this behavior so backslashes are\ntreated literally, set the `noescape` flag to `true` in the flags dictionary.\n(Note that `\\\\` is a literal `\\` in JSON notation):\n\n```json\n[\"match\", \"*\\\\*.txt\", \"filename\", {\"noescape\": true}]\n```\n\nmatches `a\\b.txt`.\n"
  },
  {
    "path": "website/docs/expr/name.md",
    "content": "---\ntitle: name & iname\ncategory: Expression Terms\n---\n\nThe `name` expression performs exact matches against file names. By default it\nis scoped to the basename of the file:\n\n    [\"name\", \"Makefile\"]\n\nYou may specify multiple names to match against by setting the second argument\nto an array:\n\n    [\"name\", [\"foo.txt\", \"Makefile\"]]\n\nThis second form can be accelerated and is preferred over an `anyof`\nconstruction.\n\nYou may change the scope of the match via the optional third argument:\n\n    [\"name\", \"path/to/file.txt\", \"wholename\"]\n    [\"name\", [\"path/to/one\", \"path/to/two\"], \"wholename\"]\n\nFinally, you may specify case insensitive evaluation by using `iname` instead of\n`name`.\n\n_Since 2.9.9._\n\nStarting in version 2.9.9, on macOS systems where the watched root is a case\ninsensitive filesystem (this is the common case for macOS), `name` is equivalent\nto `iname`.\n\n_Since 4.7._\n\nYou can override the case sensitivity of all name matching operations used in\nthe query by setting the `case_sensitive` field in your query.\n"
  },
  {
    "path": "website/docs/expr/not.md",
    "content": "---\ntitle: not\ncategory: Expression Terms\n---\n\nThe `not` expression inverts the result of the subexpression argument:\n\n    [\"not\", \"empty\"]\n"
  },
  {
    "path": "website/docs/expr/pcre.md",
    "content": "---\ntitle: pcre & ipcre\ncategory: Expression Terms\n---\n\n_To use this feature, you must configure watchman `--with-pcre`!_\n\nThe `pcre` expression performs a Perl Compatible Regular Expression match\nagainst the basename of the file. This pattern matches `test_plan.php` but not\n`mytest_plan`:\n\n    [\"pcre\", \"^test_\"]\n\nYou may optionally provide a third argument to change the scope of the match\nfrom the basename to the wholename of the file.\n\n    [\"pcre\", \"txt\", \"basename\"]\n    [\"pcre\", \"txt\", \"wholename\"]\n\n`pcre` is case sensitive; for case insensitive matching use `ipcre` instead; it\nbehaves identically to `pcre` except that the match is performed ignoring case.\n\n_Since 2.9.9._\n\nStarting in version 2.9.9, on macOS systems where the watched root is a case\ninsensitive filesystem (this is the common case for macOS), `pcre` is equivalent\nto `ipcre`.\n\n_Since 4.7._\n\nYou can override the case sensitivity of all name matching operations used in\nthe query by setting the `case_sensitive` field in your query.\n"
  },
  {
    "path": "website/docs/expr/since.md",
    "content": "---\ntitle: since\ncategory: Expression Terms\n---\n\nEvaluates as true if the specified time property of the file is greater than the\nsince value. Note that this is not the same as the `since` generator; when used\nas an expression term we are performing a straight clockspec comparison. When\nused as a generator, candidate files are selected based on the `since` time\nindex. The end result might or might not be the same--in particular, if the\n`since` time index is not passed in, it will be treated the same as a fresh\ninstance, and only files that exist will be returned. The efficiency can vary\nbased on the size and shape of the file tree that you are watching; it may be\ncheaper to generate the candidate set of files by suffix and then check the\nmodification time if many files were changed since your last query.\n\nThis will yield a true value if the observed change time is more recent than the\nspecified clockspec (this is equivalent to specifying \"oclock\" as the third\nparameter):\n\n     [\"since\", \"c:12345:234\"]\n\nYou may specify particular fields from the filesystem metadata. In this case\nyour clockspec should be a unix time value:\n\n     [\"since\", 12345668, \"mtime\"]\n     [\"since\", 12345668, \"ctime\"]\n\nYou may explicitly request the observed clock values too; in these cases we'll\naccept either a timestamp or a clock value. The `oclock` is the last observed\nchange clock value (observed clock) and the `cclock` is the clock value where we\nfirst observed the file come into existence (created clock):\n\n     [\"since\", 12345668, \"oclock\"]\n     [\"since\", \"c:1234:123\", \"oclock\"]\n     [\"since\", 12345668, \"cclock\"]\n     [\"since\", \"c:1234:2342\", \"cclock\"]\n"
  },
  {
    "path": "website/docs/expr/size.md",
    "content": "---\ntitle: size\ncategory: Expression Terms\n---\n\n_Since version 3.1_\n\nThe size term allows the size of an existing file (not deleted) to be evaluated\nusing simple relational operators as described in the table below.\n\nThe size term must always be an array with 3 elements:\n\n     [\"size\", \"gt\", 0]\n\nThe second parameter describes the relational operator and the third parameter\nis the integer _operand_ to compare against. The example above evaluates to\n`true` if the file exists and its size is greater than zero.\n\nPossible relational operators are:\n\n| Operator | Meaning               | Result                                      |\n| -------- | --------------------- | ------------------------------------------- |\n| `eq`     | Equal                 | `true` if file exists and `size == operand` |\n| `ne`     | Not Equal             | `true` if file exists and `size != operand` |\n| `gt`     | Greater Than          | `true` if file exists and `size > operand`  |\n| `ge`     | Greater Than Or Equal | `true` if file exists and `size >= operand` |\n| `lt`     | Less Than             | `true` if file exists and `size < operand`  |\n| `le`     | Less Than Or Equal    | `true` if file exists and `size <= operand` |\n"
  },
  {
    "path": "website/docs/expr/suffix.md",
    "content": "---\ntitle: suffix\ncategory: Expression Terms\n---\n\nThe `suffix` expression evaluates true if the file suffix matches the second\nargument. This matches files name `foo.php` and `foo.PHP` but not `foophp`:\n\n    [\"suffix\", \"php\"]\n\nSuffix expression matches are case insensitive.\n\n## suffix-set\n\n_Since 5.0_\n\nYou may specify multiple suffixes to match against by setting the second\nargument to an array:\n\n    [\"suffix\", [\"php\", \"css\", \"html\"]]\n\nThis second form can be accelerated and is preferred over an `anyof`\nconstruction. In the following example the two terms are functionally equivalent\nbut the set form has a more efficient and thus faster runtime:\n\n    [\"anyof\", [\"suffix\", \"php\"], [\"suffix\", \"html\"]]\n\n    [\"suffix\", [\"php\", \"html\"]]\n\nThe [capability](capabilities.md) name associated with this enhanced\nfunctionality is `suffix-set`.\n"
  },
  {
    "path": "website/docs/expr/true.md",
    "content": "---\ntitle: \"true\"\nsection: Expression Terms\n---\n\nThe `true` expression always evaluates as true.\n\n    \"true\"\n    [\"true\"]\n"
  },
  {
    "path": "website/docs/expr/type.md",
    "content": "---\ntitle: type\ncategory: Expression Terms\n---\n\nEvaluates as true if the type of the file matches that specified by the second\nargument; this matches regular files:\n\n    [\"type\", \"f\"]\n\nPossible types are:\n\n- **b**: block special file\n- **c**: character special file\n- **d**: directory\n- **f**: regular file\n- **p**: named pipe (fifo)\n- **l**: symbolic link\n- **s**: socket\n- **D**: Solaris Door\n- **?**: An unknown file type\n"
  },
  {
    "path": "website/docs/file-query.md",
    "content": "---\ntitle: File Queries\ncategory: Queries\n---\n\nWatchman file queries consist of 1 or more _generators_ that feed files through\nthe _expression evaluator_.\n\n### Generators\n\nGenerators are analogous to the list of _paths_ that you specify when using the\n`find(1)` utility, but are implemented in watchman with a bit of a twist because\nwatchman doesn't need to crawl the filesystem in realtime and instead maintains\na couple of indexes over the tree.\n\nA query may specify any number of generators; each generator will emit its list\nof files and this may mean that you see the same file output more than once if\nyou specified the use of multiple generators that all produce the same file.\n\nWatchman provides 5 generators:\n\n- **since**: produces a list of files that were modified since a specific\n  clockspec.\n- **suffix**: produces a list of files that have a particular suffix.\n- **glob**: efficiently pattern match a list of files based on their names.\n- **path**: produces a list of files based on their path and depth.\n- **all**: produces a list of all known files\n\n### De-duplicating results\n\n_Since 4.7._\n\nIf your query uses multiple generators, or configures the `path` generator with\npaths that yield multiple results, the default behavior (for backwards\ncompatibility reasons) is to emit those duplicate results in the query output.\n\nYou may ask Watchman to de-duplicate results for you by enabling the\n`dedup_results` boolean in your query:\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"path\": [\"bar\", \"bar\"],\n  \"dedup_results\": true\n}]\nEOT\n```\n\nYou may test for this feature using an extended version command and requesting\nthe capability name `dedup_results`.\n\n### Since Generator\n\nThe `since` generator produces a list of files that were modified since a\nspecific [clockspec](clockspec.md).\n\nThe following query will consider the set of files changed since the last query\nusing the named cursor `mycursor` and then pass them to the expression evaluator\nto be filtered to just those that are files:\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"since\": \"n:mycursor\",\n  \"expression\": [\"type\", \"f\"]\n}]\nEOT\n```\n\nIf the `since` parameter value is blank, was produced by a different watchman\nprocess (in other words, the watchman process was restarted between the time\nthat the value was obtained and the time the query was issued) or is a named\ncursor that has not yet been used in a query, the `since` generator will\nconsider the state to be a _fresh instance_ and its behavior is modified:\n\nA _fresh instance_ result set will only include files that currently exist and\nwill generate file nodes that are always considered to be `new`.\n\nIf the query was configured with the `empty_on_fresh_instance` property set to\n`true` then the result set will be empty and the `is_fresh_instance` property\nwill be set to `true` in the result object.\n\nThe since generator also knows how to talk to source control;\n[you can read more about that here](scm-query.md).\n\nThe `since` generator does not consider the targets of symlinks. In particular,\nthe `since` generator may _not_ produce a symlink in the following cases:\n\n- The symlink's target was a file, and the file is since modified.\n- The symlink's target was a file, and the file is since deleted or replaced\n  with a different file.\n- An ancestor of the symlink's target was created or deleted or modified.\n- The symlink's target was a directory, and a file is since added or removed\n  from that directory.\n\n### Suffix Generator\n\nThe `suffix` generator produces a list of files that have a particular suffix or\nset of suffixes. The value can be either a string or an array of strings.\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"suffix\": \"js\"\n}]\nEOT\n```\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"suffix\": [\"js\", \"css\"]\n}]\nEOT\n```\n\nIf the `suffix` generator is given an empty array, it produces no files.\n\nThe `suffix` generator can produce symlinks.\n\nThe `suffix` generator does not follow symlinks. For example, a symlink to\n`/etc` will not cause a `\"suffix\": \"conf\"` query to search within `/etc` and\nproduce `/etc/resolv.conf`.\n\n### Glob Generator\n\n_Since 4.7._\n\nThe `glob` generator produces a list of files by matching against your input\nlist of patterns. It does this by building a tree from the glob expression(s)\nand walking both the expression and the in-memory filesystem tree concurrently.\n\nThis query will yield a list of all of the C source and header files found\ndirectly in the `src` dir:\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"glob\": [\"src/*.c\", \"src/*.h\"],\n  \"fields\": [\"name\"]\n}]\n```\n\nThis query will yield a list of all of the C source and header files found in\nany subdirectories of the root:\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"glob\": [\"**/*.c\", \"**/*.h\"],\n  \"fields\": [\"name\"]\n}]\n```\n\nNote that it is more efficient to use the `suffix` generator together with a\n`dirname` expression term for such a broadly scoped query as it results in fewer\ncomparisons. This example is included as an illustration of recursive globbing.\n\nThe glob generator implicitly enables `dedup_results` mode.\n\nIf the `glob` generator is given an empty array, it produces no files.\n\nThe `glob` generator can produce symlinks.\n\nThe `glob` generator does not follow symlinks. For example, a symlink to `/etc`\nwill not cause a `\"glob\": [\"**/resolv.conf\"]` query to search within `/etc` and\nproduce `/etc/resolv.conf`.\n\n### Path Generator\n\nThe `path` generator produces a list of files based on their path and depth.\nDepth controls how far watchman will search down the directory tree for files.\n\nThe `path` generator expects an array of path specifiers. Each path specifier\ncan be either a string or an object and each will produce a set of files.\n\nIf it is a string then it is treated as the value for `path` with `depth` set to\ninfinite. If an object, the fields `path` (a string) and `depth` (an integer)\nmust be supplied.\n\nPaths are relative to the root, so if watchman is watching `/foo/`, path `bar`\nrefers to `/foo/bar`.\n\nA `depth` value of `0` means only files and directories which are contained in\nthis path. A `depth` value of `-1` means no limit on the depth.\n\nThe following `path` generators are equivalent:\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"path\": [\"bar\"]\n}]\nEOT\n```\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"path\": [{\"path\": \"bar\", \"depth\": -1}]\n}]\nEOT\n```\n\nIf the `path` generator is given an empty array, it produces no files.\n\nThe `path` generator can produce symlinks.\n\nThe `path` generator does not follow symlinks.\n\n### All Generator\n\nThe `all` generator produces a list of all file nodes. It is the default\ngenerator and is used in the case where no other generators were explicitly\nspecified.\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n}]\nEOT\n```\n\nThe `all` generator can produce symlinks.\n\nThe `all` generator does not follow symlinks.\n\n### Expressions\n\nA watchman query expression consists of 0 or more expression terms. If no terms\nare provided then each file evaluated is considered a match (equivalent to\nspecifying a single `true` expression term).\n\nOtherwise, the expression is evaluated against the file and produces a boolean\nresult. If that result is true then the file is considered a match and is added\nto the output set.\n\nAn expression term is canonically represented as a JSON array whose zeroth\nelement is a string containing the term name.\n\n```json\n[\"termname\", arg1, arg2]\n```\n\nIf the term accepts no arguments you may use a short form that consists of just\nthe term name expressed as a string:\n\n```json\n\"true\"\n```\n\nExpressions that match against file names may match against either the\n_basename_ or the _wholename_ of the file. The basename is the name of the file\nwithin its containing directory. The wholename is the name of the file relative\nto the watched root.\n\nYou can find a list of all possible expression terms in the sidebar on the left\nof this page.\n\n### Relative roots\n\n_Since 3.3._\n\nWatchman supports optionally evaluating queries with respect to a path within a\nwatched root. This is used with the `relative_root` parameter:\n\n```json\n[\"query\", \"/path/to/watched/root\", {\n  \"relative_root\": \"project1\",\n}]\n```\n\nSetting a relative root results in the following modifications to queries:\n\n- The `path` generator is evaluated with respect to the relative root. In the\n  above example, `\"path\": [\"dir\"]` will return all files inside\n  `/path/to/watched/root/project1/dir`.\n- The input expression is evaluated with respect to the relative root. In the\n  above example, `\"expression\": [\"match\", \"dir/*.txt\", \"wholename\"]` will return\n  all files inside `/path/to/watched/root/project1/dir/` that match the glob\n  `*.txt`.\n- Paths inside the relative root are returned with the relative root stripped\n  off. For example, a path `project1/dir/file.txt` would be returned as\n  `dir/file.txt`.\n- Paths outside the relative root are not returned.\n\nRelative roots behave similarly to a separate Watchman watch on the\nsubdirectory, without any of the system overhead that that imposes. This is\nuseful for large repositories, where your script or tool is only interested in a\nparticular directory inside the repository.\n"
  },
  {
    "path": "website/docs/install.md",
    "content": "---\ntitle: Installation\ncategory: Installation\n---\n\n## System Requirements\n\nWatchman is known to compile and pass its test suite on:\n\n- <i class=\"fa fa-linux\"></i> Linux systems with `inotify`\n- <i class=\"fa fa-apple\"></i> macOS (uses `FSEvents` on 10.7+, `kqueue(2)` on\n  earlier versions)\n- <i class=\"fa fa-windows\"></i> Windows 10 (64-bit) and up. Windows 7 support is\n  provided by community patches\n\nWatchman used to support the following systems, but no one is actively\nmaintaining them. The core of the code should be OK, but they likely don't\nbuild. We'd love it if someone would step forward to maintain them:\n\n- BSDish systems (FreeBSD 9.1, OpenBSD 5.2) that have the `kqueue(2)` facility\n- Illumos and Solaris style systems that have `port_create(3C)`\n\nWatchman relies on the operating system facilities for file notification, which\nmeans that you will likely have very poor results using it on any kind of remote\nor distributed filesystem.\n\nWatchman does not currently support any other operating system not covered by\nthe list above.\n\n## Windows\n\n### Prebuilt Binaries\n\n1. Download and extract the windows release from the\n   [latest release](https://github.com/facebook/watchman/releases/latest)\n2. It will be named something like `watchman-vYYYY.MM.DD.00-windows.zip`\n3. It contains a `bin` folder. Move that somewhere appropriate and update your\n   `PATH` environment to reference that location.\n\nIf you encounter issues with the Windows version of watchman, please report them\nvia GitHub!\n[You can find the list of known Windows issues here](https://github.com/facebook/watchman/issues?utf8=%E2%9C%93&q=is%3Aopen+Windows).\n\n### Installing via Chocolatey\n\nWatchman is available via the\n[Chocolatey](https://community.chocolatey.org/packages/watchman) Windows package\nmanager. Installation is as simple as:\n\n```powershell\nPS C:\\> choco install watchman\n```\n\nThe package is maintained by the community rather than by Meta, so if you\nexperience issues with installation or uninstallation, you should\n[contact the package maintainers](https://chocolatey.org/packages/watchman/ContactOwners)\nfor assistance.\n\n## macOS\n\n### <a name=\"homebrew-instructions\"></a> Homebrew\n\nHomebrew's [Watchman package](https://formulae.brew.sh/formula/watchman#default)\nis community-maintained, but it works well for many.\n\n```sh\n$ brew update\n$ brew install watchman\n```\n\nIf for some reason you can't wait for the Homebrew package to update, you can\ninstall the latest build from GitHub:\n\n```sh\n$ brew install --HEAD watchman\n```\n\n### <a name=\"macports\"></a> MacPorts\n\nTo install the package maintained by\n[MacPorts](https://ports.macports.org/port/watchman/):\n\n```bash\n$ sudo port install watchman\n```\n\n### Prebuilt Binaries\n\n1. Download and extract the macOS release from the\n   [latest release](https://github.com/facebook/watchman/releases/latest)\n2. It will be named something like `watchman-vYYYY.MM.DD.00-macos.zip`\n\n```bash\n$ unzip watchman-*-macos.zip\n$ cd watchman-vYYYY.MM.DD.00-macos\n$ sudo mkdir -p /usr/local/{bin,lib} /usr/local/var/run/watchman\n$ sudo cp bin/* /usr/local/bin\n$ sudo cp lib/* /usr/local/lib\n$ sudo chmod 755 /usr/local/bin/watchman\n$ sudo chmod 2777 /usr/local/var/run/watchman\n```\n\nThe Watchman binaries are not signed, so manual approval in Security & Privacy\nin System Preferences may be necessary.\n\n## Linux\n\n### Homebrew\n\nIf you use Homebrew on Linux, it's a great way to get a recent Watchman build.\n\nFollow the [macOS instructions above](#homebrew-instructions).\n\n### Fedora (Prebuilt RPMs)\n\n**Warning**: Do not install the Fedora-supplied Watchman package. It is old and\nmissing security, bug, and performance fixes.\n\n1. From the\n   [latest release](https://github.com/facebook/watchman/releases/latest),\n   download the .rpm corresponding to your Fedora version\n2. `sudo dnf localinstall watchman-$VERSION.fc$FEDORA_VERSION.x86_64.rpm`\n3. Confirm successful installation by running `watchman version`\n\n### Ubuntu (Prebuilt Debs)\n\n**Warning**: Do not install the Ubuntu-supplied Watchman package. It is old and\nmissing security, bug, and performance fixes.\n\n1. From the\n   [latest release](https://github.com/facebook/watchman/releases/latest),\n   download the .deb corresponding to your Ubuntu version\n2. `sudo dpkg -i watchman_$UBUNTU_RELEASE_$VERSION.deb`\n3. You will likely see errors about unresolved dependencies. The next step will\n   resolve them.\n4. `sudo apt-get -f install`\n5. Confirm successful installation by running `watchman version`\n\n### <a name=\"building-from-source\"></a> Building from Source\n\nDownload a\n[source snapshot from the latest release](https://github.com/facebook/watchman/releases/latest)\nor [clone from GitHub](https://github.com/facebook/watchman/).\n\n```bash\n$ cd watchman\n\n# Ensure Cargo is installed. Either through your OS's package manager or https://rustup.rs/\n$ cargo version\n\n# Optionally, to save time, you can ask Watchman's build process to install system dependencies\n$ sudo ./install-system-packages.sh\n\n$ ./autogen.sh\n```\n\n### Prebuilt Binaries\n\n**Note**: Our binaries are built from the main branch only. We don't provide\nbinaries for v4.9.0.\n\n**Note**: The Linux binaries are compiled on a GitHub Action VM (ubuntu-20.04 at\nthe time of this writing), and Linux binaries are\n[not generally compatible across distributions](https://github.com/facebook/watchman/issues/1019),\nso try the prebuilt Fedora, Ubuntu, or Homebrew packages first.\n\nWatchman is continuously deployed as it passes our internal test validation\ninside Meta and doesn't use manually assigned or \"approved\" version numbers.\n\nOutside Meta we have automation that cuts a tag and builds binaries on Monday of\neach week and assigns a tag based on the date. That process is in a beta state;\nsome or all of the binaries may not be present for any given tag.\n\n1. Download and extract the release for your system from the\n   [latest release](https://github.com/facebook/watchman/releases/latest)\n2. It will be named something like `watchman-vYYYY.MM.DD.00-linux.zip`\n\n```bash\n$ unzip watchman-*-linux.zip\n$ cd watchman-vYYYY.MM.DD.00-linux\n$ sudo mkdir -p /usr/local/{bin,lib} /usr/local/var/run/watchman\n$ sudo cp bin/* /usr/local/bin\n$ sudo cp lib/* /usr/local/lib\n$ sudo chmod 755 /usr/local/bin/watchman\n$ sudo chmod 2777 /usr/local/var/run/watchman\n```\n\n## System Specific Preparation\n\n### Linux inotify Limits\n\nThe `inotify(7)` subsystem has three important tunings that impact watchman.\n\n- `/proc/sys/fs/inotify/max_user_instances` impacts how many different root dirs\n  you can watch.\n- `/proc/sys/fs/inotify/max_user_watches` impacts how many dirs you can watch\n  across all watched roots.\n- `/proc/sys/fs/inotify/max_queued_events` impacts how likely it is that your\n  system will experience a notification overflow.\n\nYou obviously need to ensure that `max_user_instances` and `max_user_watches`\nare set so that the system is capable of keeping track of your files.\n\n`max_queued_events` is important to size correctly; if it is too small, the\nkernel will drop events and watchman won't be able to report on them. Making\nthis value bigger reduces the risk of this happening.\n\nWatchman has two simple strategies for mitigating an overflow of\n`max_queued_events`:\n\n- It uses a dedicated thread to consume kernel events as quickly as possible\n- When the kernel reports an overflow, watchman will assume that all the files\n  have been modified and will re-crawl the directory tree as though it had just\n  started watching the dir.\n\nThis means that if an overflow does occur, you won't miss a legitimate change\nnotification, but instead will get spurious notifications for files that haven't\nactually changed.\n\n### macOS File Descriptor Limits\n\n_Only applicable on macOS 10.6 and earlier_\n\nThe default per-process descriptor limit on macOS is extremely low (256!).\n\nWatchman will attempt to raise its descriptor limit to match\n`kern.maxfilesperproc` when it starts up, so you shouldn't need to mess with\n`ulimit`; just raising the sysctl should do the trick.\n\nThe following will raise the limits to allow 10 million files total, with 1\nmillion files per process until your next reboot.\n\n```bash\n$ sudo sysctl -w kern.maxfiles=10485760\n$ sudo sysctl -w kern.maxfilesperproc=1048576\n```\n\nPutting the following into a file named `/etc/sysctl.conf` on macOS will cause\nthese values to persist across reboots:\n\n```\nkern.maxfiles=10485760\nkern.maxfilesperproc=1048576\n```\n"
  },
  {
    "path": "website/docs/nodejs.md",
    "content": "---\ntitle: NodeJS\ncategory: Invocation\nsidebar_position: 6\n---\n\nTo install the nodejs client:\n\n```bash\n$ npm install fb-watchman\n```\n\nand to import it and create a client instance:\n\n```js\nvar watchman = require('fb-watchman');\nvar client = new watchman.Client();\n```\n\nThis documentation assumes that you are using the latest available version of\nthe `fb-watchman` package published to the npm repository.\n\n## Checking for watchman availability\n\nThe client can be installed without requiring that the service is installed. It\nis important to handle lack of availability and also to test whether the\ninstalled service supports the [capabilities](capabilities.md) required by your\napplication.\n\nThe `capabilityCheck` method issues a [version](cmd/version.md) command to query\nthe capabilities of the server.\n\n```js\nvar watchman = require('fb-watchman');\nvar client = new watchman.Client();\nclient.capabilityCheck({optional:[], required:['relative_root']},\n  function (error, resp) {\n    if (error) {\n      // error will be an Error object if the watchman service is not\n      // installed, or if any of the names listed in the `required`\n      // array are not supported by the server\n      console.error(error);\n    }\n    // resp will be an extended version response:\n    // {'version': '3.8.0', 'capabilities': {'relative_root': true}}\n    console.log(resp);\n  });\n```\n\n## Initiating a watch\n\nAlmost every operation in watchman revolves around watching a directory tree.\nYou can repeatedly ask to watch the same directory without error; watchman will\nre-use an existing watch.\n\n```js\nvar watchman = require('fb-watchman');\nvar client = new watchman.Client();\n\nvar dir_of_interest = \"/some/path\";\n\nclient.capabilityCheck({optional:[], required:['relative_root']},\n  function (error, resp) {\n    if (error) {\n      console.log(error);\n      client.end();\n      return;\n    }\n\n    // Initiate the watch\n    client.command(['watch-project', dir_of_interest],\n      function (error, resp) {\n        if (error) {\n          console.error('Error initiating watch:', error);\n          return;\n        }\n\n        // It is considered to be best practice to show any 'warning' or\n        // 'error' information to the user, as it may suggest steps\n        // for remediation\n        if ('warning' in resp) {\n          console.log('warning: ', resp.warning);\n        }\n\n        // `watch-project` can consolidate the watch for your\n        // dir_of_interest with another watch at a higher level in the\n        // tree, so it is very important to record the `relative_path`\n        // returned in resp\n\n        console.log('watch established on ', resp.watch,\n                    ' relative_path', resp.relative_path);\n      });\n  });\n```\n\n## Subscribing to changes\n\nMost node applications are interested in subscribing to live file change\nnotifications. In watchman these are configured by issuing a\n[subscribe](cmd/subscribe.md) command. A subscription is valid for the duration\nof your client connection, or until you cancel the subscription using the\n[unsubscribe](cmd/unsubscribe.md) command.\n\nThe following will generate subscription results for all files in the tree that\nmatch the query expression and then generate subscription results as files\nchange:\n\n```js\n// `watch` is obtained from `resp.watch` in the `watch-project` response.\n// `relative_path` is obtained from `resp.relative_path` in the\n// `watch-project` response.\nfunction make_subscription(client, watch, relative_path) {\n  sub = {\n    // Match any `.js` file in the dir_of_interest\n    expression: [\"allof\", [\"match\", \"*.js\"]],\n    // Which fields we're interested in\n    fields: [\"name\", \"size\", \"mtime_ms\", \"exists\", \"type\"]\n  };\n  if (relative_path) {\n    sub.relative_root = relative_path;\n  }\n\n  client.command(['subscribe', watch, 'mysubscription', sub],\n    function (error, resp) {\n      if (error) {\n        // Probably an error in the subscription criteria\n        console.error('failed to subscribe: ', error);\n        return;\n      }\n      console.log('subscription ' + resp.subscribe + ' established');\n    });\n\n  // Subscription results are emitted via the subscription event.\n  // Note that this emits for all subscriptions.  If you have\n  // subscriptions with different `fields` you will need to check\n  // the subscription name and handle the differing data accordingly.\n  // `resp`  looks like this in practice:\n  //\n  // { root: '/private/tmp/foo',\n  //   subscription: 'mysubscription',\n  //   files: [ { name: 'node_modules/fb-watchman/index.js',\n  //       size: 4768,\n  //       exists: true,\n  //       type: 'f' } ] }\n  client.on('subscription', function (resp) {\n    if (resp.subscription !== 'mysubscription') return;\n\n    resp.files.forEach(function (file) {\n      // convert Int64 instance to javascript integer\n      const mtime_ms = +file.mtime_ms;\n\n      console.log('file changed: ' + file.name, mtime_ms);\n    });\n  });\n}\n```\n\n### Subscribing only to changed files\n\nThe example above will generate results for existing (and deleted!) files at the\ntime that the subscription is established. In some applications this can be\nundesirable. The following example shows how to add a logical time constraint.\n\nwatchman tracks changes using an [abstract clock](clockspec.md). We'll determine\nthe current clock at the time that we initiate the watch and then add that as a\nconstraint in our subscription.\n\n```js\nfunction make_time_constrained_subscription(client, watch, relative_path) {\n  client.command(['clock', watch], function (error, resp) {\n    if (error) {\n      console.error('Failed to query clock:', error);\n      return;\n    }\n\n    sub = {\n      // Match any `.js` file in the dir_of_interest\n      expression: [\"allof\", [\"match\", \"*.js\"]],\n      // Which fields we're interested in\n      fields: [\"name\", \"size\", \"exists\", \"type\"],\n      // add our time constraint\n      since: resp.clock\n    };\n\n    if (relative_path) {\n      sub.relative_root = relative_path;\n    }\n\n    client.command(['subscribe', watch, 'mysubscription', sub],\n      function (error, resp) {\n        // handle the result here\n      });\n  });\n}\n```\n\n## NodeJS API Reference\n\n## Methods\n\n### client.capabilityCheck(options, done)\n\nThe `capabilityCheck` method issues a [version](cmd/version.md) command to query\nthe capabilities of the server.\n\nIf the server doesn't support capabilities, `capabilityCheck` will emulate the\ncapability response for a handful of significant capabilities based on the\nversion reported by the server.\n\nThe `options` argument may contain the following properties:\n\n- `optional` an array listing optional capability names\n- `required` an array listing required capability names\n\nThe properties are passed through to the underlying `version` command.\n\nThe `done` parameter is a callback that will be passed (error, result) when the\ncommand completes. It doesn't make sense to issue a `capabilityCheck` call and\nnot provide the `done` callback.\n\nThe response object will contain a `capabilities` object property whose keys\nwill be the union of the `optional` and `required` capability names and whose\nvalues will be either `true` or `false` depending on the availability of the\ncapability name.\n\nIf any of the `required` capabilities are not supported by the server, the\n`error` parameter in the `done` callback will be set and will contain a\nmeaningful error message.\n\n```js\nclient.capabilityCheck({optional:[], required:['relative_root']},\n  function (error, resp) {\n    if (error) {\n      // error will be an Error object if the watchman service is not\n      // installed, or if any of the names listed in the `required`\n      // array are not supported by the server\n      console.error(error);\n    }\n    // resp will be an extended version response:\n    // {'version': '3.8.0', 'capabilities': {'relative_root': true}}\n    console.log(resp);\n  });\n```\n\n### client.command(args [, done])\n\nSends a command to the watchman service. `args` is an array that specifies the\ncommand name and any optional arguments. The command is queued and dispatched\nasynchronously. You may queue multiple commands to the service; they will be\ndispatched in FIFO order once the client connection is established.\n\nThe `done` parameter is a callback that will be passed (error, result) when the\ncommand completes. You may omit it if you are not interested in the result of\nthe command.\n\n```js\nclient.command(['watch-project', process.cwd()], function(error, resp) {\n  if (error) {\n    console.log('watch failed: ', error);\n    return;\n  }\n  if ('warning' in resp) {\n    console.log('warning: ', resp.warning);\n  }\n  if ('relative_path' in resp) {\n    // We will need to remember and adjust for relative_path\n    console.log('watching project ', resp.watch, ' relative path to cwd is ',\n      resp.relative_path);\n  } else {\n    console.log('watching ', resp.watch);\n  }\n});\n```\n\nIf a field named `warning` is present in `resp`, the watchman service is trying\nto communicate an issue that the user should see and address. For example, if\nthe system watch resources need adjustment, watchman will provide information\nabout this and how to remediate the issue. It is suggested that tools that build\non top of this library bubble the warning message up to the user.\n\n### client.end()\n\nTerminates the connection to the watchman service. Does not wait for any queued\ncommands to send.\n\n## Events\n\nThe following events are emitted by the watchman client object:\n\n### Event: 'connect'\n\nEmitted when the client successfully connects to the watchman service\n\n### Event: 'error'\n\nEmitted when the socket to the watchman service encounters an error.\n\nIt may also be emitted prior to establishing a connection if we are unable to\nsuccessfully execute the watchman CLI binary to determine how to talk to the\nserver process.\n\nIt is passed a variable that encapsulates the error.\n\n### Event: 'end'\n\nEmitted when the socket to the watchman service is closed\n\n### Event: 'log'\n\nEmitted in response to a unilateral `log` PDU from the watchman service. To\nenable these, you need to send a `log-level` command to the service:\n\n```js\n// This is very verbose, you probably don't want to do this\nclient.command(['log-level', 'debug']);\nclient.on('log', function(info) {\n  console.log(info);\n});\n```\n\n### Event: 'subscription'\n\nEmitted in response to a unilateral `subscription` PDU from the watchman\nservice. To enable these, you need to send a `subscribe` command to the service:\n\n```js\n  // Subscribe to notifications about .js files\n  client.command(['subscribe', process.cwd(), 'mysubscription', {\n      expression: [\"match\", \"*.js\"]\n    }],\n    function(error, resp) {\n      if (error) {\n        // Probably an error in the subscription criteria\n        console.log('failed to subscribe: ', error);\n        return;\n      }\n      console.log('subscription ' + resp.subscribe + ' established');\n    }\n  );\n\n  // Subscription results are emitted via the subscription event.\n  // Note that watchman will deliver a list of all current files\n  // when you first subscribe, so you don't need to walk the tree\n  // for yourself on startup\n  client.on('subscription', function(resp) {\n    console.log(resp.root, resp.subscription, resp.files);\n  });\n```\n\nTo cancel a subscription, use the `unsubscribe` command and pass in the name of\nthe subscription you want to cancel:\n\n```js\n  client.command(['unsubscribe', process.cwd(), 'mysubscription']);\n```\n\nNote that subscriptions names are scoped to your connection to the watchman\nservice; multiple different clients can use the same subscription name without\nfear of colliding.\n"
  },
  {
    "path": "website/docs/release-notes.md",
    "content": "---\ntitle: Release Notes\ncategory: Installation\n---\n\nWatchman is continuously deployed inside Facebook, which means that we don't\nexplicitly maintain version numbers. We have automation that cuts a weekly tag\nwith a named derived from the date. You can learn more about how to reason about\nsupported _capabilities_ and our backwards compatibility guidelines in the\n[Compatibility Rules](compatibility.md) docs.\n\nWe focus on the highlights only in these release notes. For a full history that\nincludes all of the gory details, please see\n[the commit history on GitHub](https://github.com/facebook/watchman/commits/main).\n\n### Watchman v2020.07.13.00\n\n- Added script `watchman-replicate-subscription`. It can replicate an existing\n  watchman subscription. Integrators can use this script to validate watchman\n  notifications their client is receiving.\n- Added support for suffix sets in suffix expressions. You now can specify\n  multiple suffixes to match against by setting the second argument to a list of\n  suffixes. See `suffix-set` documentation for\n  [more details](expr/suffix.md#suffix-set)\n- pywatchman: introduced new pywatchman_aio client for python\n- Windows: we no longer trust environment variables to locate the state\n  directory which should result in a better experience for users that mix\n  cygwin, mingw, native windows and/or WSL or other environments\n- Windows: we now support unix domain sockets on Windows 10. The CLI will prefer\n  to use unix domain sockets when available.\n\nWe weren't great at updating the release notes since the prior release; there\nwas a lot of work to support our sister project EdenFS that isn't broadly\nrelevant to those outside FB at the time of writing.\n\n### Watchman 4.9.0 (2017-08-24)\n\n- New field: `content.sha1hex`. This field expands to the SHA1 hash of the file\n  contents, expressed in hex digits (40 character hex string). Watchman\n  maintains a cache of the content hashes and can compute the hash on demand and\n  also heuristically as files are changed. This is useful for tooling that wants\n  to perform more intelligent cache invalidation or build artifact fetching from\n  content addressed storage.\n- Experimental feature: Source Control Aware query mode. Currently supports only\n  Mercurial (patches to add Git support are welcomed!). SCM aware query mode\n  helps to keep response sizes closer to `O(what-you-changed)` than to\n  `O(all-repo-changes)` when rebasing your code. Using this feature effectively\n  may require some additional infrastructure to compute and associate data with\n  revisions from your repo.\n- Fixed an issue that resulted in the perf logging thread deadlocking when\n  `perf_logger_command` is enabled in the global configuration\n- Fixed an issue where queries larger than 1MB would likely result in a PDU\n  error response.\n- Reduced lock contention for subscriptions that do no use the advanced settling\n  (`drop`, `defer`) options.\n- Fixed `since` generator behavior when using unix timestamps rather than the\n  preferred clock string syntax\n- Improved the reporting of \"new\" files in watchman results\n- Improved performance of handling changes on case insensitive filesystems\n- Windows: promoted from alpha to beta status!\n- Windows: fixed some performance and reliability issues\n- Windows: now operates correctly on Windows 7\n- Windows: can now see and report symlinks and junction points\n- Windows: fixed potential deadlock in trigger deletion\n- Windows: fixed stack trace rendering on win32\n- Windows: improved IO scheduling around deletes on win32\n- Windows: improved handling of case insensitive win32 driver letters\n- pywatchman: the python wheel format is used for publishing watchman pypi\n  package\n- pywatchman: now watchman path is configurable in python client\n- pywatchman: now python client can be used as a context manager\n- Solaris: support for Solaris has been removed. If you'd like to commit to\n  testing and maintaining Solaris support, we'd love to hear from you!\n\n### Watchman 4.8.0 (never formally released)\n\nWhoops, we never got around to tagging this beyond a release candidate tag!\n\n- New command `flush-subscriptions` to synchronize subscriptions associated with\n  the current session.\n- On Windows, return `/` as the directory separator. Previously we used `\\`.\n  This change should be pretty neutral for clients, and makes it easier to work\n  with both the internals and the integration test infrastructure.\n- Enforce socket Unix groups more strongly — Watchman will now refuse to start\n  if it couldn't gain the right group memberships, as can happen for sites that\n  are experiencing intermittent LDAP connectivity problems.\n- pywatchman now officially supports Python 3. pywatchman will return Unicode\n  strings (possibly with surrogate escapes) by default, but can optionally\n  return bytestrings. Note that on Python 3, pywatchman requires Watchman 4.8\n  and above. The Python 2 interface and requirements remain unchanged.\n- Prior to 4.8, methods on the Java WatchmanClient that returned\n  ListenableFutures would swallow exceptions and hang in an unfinished state\n  under situations like socket closure or thread death. This has been fixed, and\n  now ListenableFutures propagate exception conditions immediately. (Note that\n  this is typically unrecoverable, and users should create a new WatchmanClient\n  to re-establish communication with Watchman.) See #412.\n- The minimum Java version for the Watchman Java client has always been 1.7, but\n  it was incorrectly described to be 1.6. The Java client's build file has been\n  fixed accordingly.\n- Watchman was converted from C to C++. The conversion exposed several\n  concurrency bugs, all of which have now been fixed.\n- Subscription queries are now executed in the context of the client thread,\n  which means that subscriptions are dispatched in parallel. Previously,\n  subscriptions would be serially dispatched and block the disk IO thread.\n- Triggers are now dispatched in parallel and waits are managed in their own\n  threads (one thread per trigger). This improves concurrency and resolves a\n  couple of waitpid related issues where watchman may not reap spawned children\n  in a timely fashion, or may spin on CPU until another child is spawned.\n- Fixed an object lifecycle management issue that could cause a crash when aging\n  out old/transient files.\n- Implement an upgraded wire protocol, BSERv2, on the server and in pywatchman.\n  BSERv2 can carry information about string encoding over the wire. This lets\n  pywatchman convert to Unicode strings on Python 3. Clients and servers know\n  how to transparently fall back to BSERv1.\n- OS X: we no longer use socket activation when registering with launchd. This\n  was the source of some upgrade problems for mac Homebrew users.\n\n### Watchman 4.7.0 (2016-09-10)\n\n- Reduced memory usage by 40%\n- Queries can now run with a shared lock. It is recommended that clients move\n  away from the `n:FOO` style server side named cursor clockspecs to take full\n  advantage of this.\n- Added new `glob` generator as a walking strategy for queries. This allows\n  watchman to evaluate globs in the most efficient manner. Our friends in the\n  Buck project have already integrated this into their `BUCK` file parsing to\n  evaluate globs without touching the filesystem!\n- Added `\"case_sensitive\": true` option to queries to force matches to happen in\n  a case sensitive manner, even if the watched root is on a case insensitive\n  filesystem. This is used to accelerate certain types of internal traversal: if\n  we know that a path is case sensitive we can perform an `O(1)` lookup where we\n  would otherwise have to perform an `O(number-of-directory-entries)` scan and\n  compare.\n- Fixed a race condition during subscription initiation that could emit\n  incorrect clock values.\n- Fixed spurious over-notification for parent directories of changed files on\n  Mac.\n- Fixed some reliability issues on Windows\n\n### Watchman 4.6.0 (2016-07-09)\n\n- Improved I/O scheduling when processing recursive deletes and deep directory\n  rename operations.\n- Improved performance of the `ignore_dirs` configuration option on OS X and\n  Windows systems. We take advantage of an undocumented (but supported!) API to\n  further accelerate this for the first 8 entries in the `ignore_dirs` on OS X.\n  Users that depend on this configuration to avoid recrawls will want to review\n  and prioritize their most active build dirs to the front of the `ignore_dirs`\n  specified in their `.watchmanconfig` file.\n- Added an optional recrawl recovery strategy for OS X that will attempt to\n  resync from the fseventsd journal rather than performing a full filesystem\n  walk. This is currently disabled by default but will likely be enabled by\n  default in the next Watchman release. You can enable this by setting\n  `fsevents_try_resync: true` in either `/etc/watchman.json` or your\n  `.watchmanconfig`. This should reduce the frequency of recrawl warnings for\n  some users/workloads, and also improves I/O for users with extremely large\n  trees.\n- Fixed accidental exponential time complexity issue with recursive deletes and\n  deep directory rename operations on case-insensitive filesystems (such as OS\n  X). This manifested as high CPU utilization for extended periods of time.\n- Added support for allowing non-owner access to a Watchman instance. Only the\n  owner is authorized to create or delete watches. Non-owners can view\n  information about existing watches. Access control is based on unix domain\n  socket permissions. The new but not yet documented configuration options\n  `sock_group` and `sock_access` can be used to control this new behavior.\n- Added support for inetd-style socket activation of the watchman service.\n  [this commit includes a sample configuration for systemd](https://github.com/facebook/watchman/commit/2985377eaf8c8538b28fae9add061b67991a87c2).\n- Added the `symlink_target` field to the stored metadata for files. This holds\n  the text of the symbolic link for symlinks. You can test whether it is\n  supported by a watchman server using the capability name\n  `field-symlink_target`.\n- Fixed an issue where watchman may not reap child processes spawned by\n  triggers.\n- Fixed an issue where watchman may block forever during shutdown if there are\n  other connected clients.\n- Added `hint_num_dirs` configuration option.\n\n### pywatchman 1.4.0 (????-??-??)\n\n(These changes have not yet been released to pypi)\n\n- Added immutable version of data results to bser. This is cheaper to build from\n  a serialized bser representation than the mutable version and is better suited\n  to large result sets received from watchman.\n- Fixed a number of misc. portability issues\n- Added Python 3.x support\n\n### Watchman 4.5.0 (2016-02-18)\n\n- Fixed an inotify race condition for non-atomic directory replacements that was\n  introduced in Watchman 4.4.\n\n### Watchman 4.4.0 (2016-02-02)\n\n- Added state-enter and state-leave commands can allow subscribers to more\n  intelligently settle/coalesce events around hg update or builds.\n- Fixed an issue where subscriptions could double-notify for the same events.\n- Fixed an issue where subscriptions that never match any files add\n  O(all-observed-files) CPU cost to every subscription dispatch\n\n### Watchman 4.3.0 (2015-12-14)\n\n- Improved handling of case insensitive renames; halved the memory usage and\n  doubled crawl speed on OS X.\n\n### Watchman 4.2.0 (2015-12-08)\n\n- Increased strictness of checks for symlinks; rather than just checking whether\n  the leaf of a directory tree is a symlink, we now check each component down\n  from the root of the watch. This improves detection and processing for\n  directory-to-symlink (and vice versa) transitions.\n- Increased priority of the watchman process on OS X.\n\n### pywatchman 1.3.0 (2015-10-22)\n\n- Added `watchman-make` and `watchman-wait` commands\n- Added pure python implementation of BSER\n\n### Watchman 4.1.0 (2015-10-20)\n\n- Fixed an issue where symlink size was always reported as 0 on OS X using the\n  new bulkstat functionality\n\n### Watchman 4.0.0 (2015-10-19)\n\n- Fixed an issue where a directory that was replaced by a symlink would cause a\n  symlink traversal instead of correctly updating the type of the node and\n  marking the children removed.\n- Fixed a debugging log line that was emitted at the wrong log level on every\n  directory traversal.\n\n### Watchman 3.9.0 (2015-10-12)\n\n- Fixed an issue where dir renames on OS X could cause us to lose track of the\n  files inside the renamed dir\n- Fixed an issue where dir deletes and replacements on Linux could cause us to\n  lose track of the files inside the replaced dir (similar to the OS X issue\n  above in manifestation, but a different root cause).\n- Improved (re)crawl speed for dirs with more than a couple of entries on\n  average (improvement can be up to 5x for dirs with up to 64 entries on\n  average). You may now tune the `hint_num_files_per_dir` setting in your\n  `.watchmanconfig` to better match your tree.\n  [More details](config.md#hint_num_files_per_dir)\n- Improved (re)crawl speed on OS X 10.10 and later by using `getattrlistbulk`.\n  This allows us to improve the data:syscall ratio during crawling and can\n  improve throughput by up to 40% for larger trees.\n- Add optional `sync_timeout` to the `clock` command\n- Avoid accidentally passing descriptors other than the stdio streams when we\n  spawn the watchman service.\n- Fixed a race condition where we could start two sets of watcher threads for\n  the same dir if two clients issue a `watch` or `watch-project` at the same\n  time\n- Added a helpful error for a tmux + launchd issue on OS X\n\n### Watchman 3.8.0 (2015-09-14)\n\n- Improved latency of processing kernel notifications. It should now be far less\n  likely to run into an notification queue overflow.\n- Improved idle behavior. There were a couple of places where watchman would\n  wake up more often than was strictly needed and these have now been fixed.\n  This is mostly of interest to laptop users on battery power.\n- Improved inotify move tracking. Some move operations could cause watchman to\n  become confused and trigger a recrawl. This has now been resolved.\n- Hardened statedir and permissions. There was a possibility of a symlink attack\n  and this has now been mitigated by re-structuring the statedir layout.\n- Fixed a possible deadlock in the idle watch reaper\n- Fixed an issue where the watchman -p log-level debug could drop log\n  notifications in the CLI\n- Disabled the IO-throttling-during-crawl that we added in 3.7. It proved to be\n  more harmful than beneficial.\n- `-j` CLI option now accepts either JSON or BSER encoded command on stdin\n- Added [capabilities](capabilities.md) to the server, and added the\n  [capabilityCheck](cmd/version.md#capabilityCheck) method to the python and\n  node clients.\n\n### pywatchman 1.2.0 (2015-08-15)\n\n- Added the `capabilityCheck` method\n- Added `SocketTimeout` exception to distinguish timeouts from protocol level\n  exceptions\n\n### fb-watchman 1.3.0 for node (2015-08-15)\n\n- Added the [capabilityCheck](nodejs.md#checking-for-watchman-availability)\n  method.\n\n### pywatchman 1.0.0 (2015-08-06)\n\n- First official pypi release, thanks to [@kwlzn](https://github.com/kwlzn) for\n  setting up the release machinery for this.\n\n### Watchman 3.7.0 (2015-08-05)\n\n(Watchman 3.6.0 wasn't formally released)\n\n- Fixed bug where `query match` on `foo*.java` with `wholename` scope would\n  incorrectly match `foo/bar/baz.java`.\n- Added `src/**/*.java` recursive glob pattern support to `query match`.\n- Added options dictionary to `query`'s `match` operator.\n- Added `includedotfiles` option to `query match` to include files whose names\n  start with `.`.\n- Added `noescape` option to `query match` to make `\\` match literal `\\`.\n- We'll now automatically age out and stop watches. See\n  [idle_reap_age_seconds](config.md#idle_reap_age_seconds) for more information.\n- `watch-project` will now try harder to re-use an existing watch and avoid\n  creating an overlapping watch.\n- Reduce I/O priority during crawling on systems that support this\n- Fixed issue with the `long long` data type in the python BSER module\n\n### fb-watchman 1.2.0 for node (2015-07-11)\n\n- Updated the node client to more gracefully handle `undefined` values in\n  objects when serializing them; we now omit keys whose values are `undefined`\n  rather than throw an exception.\n\n### Watchman 3.5.0 (2015-06-29)\n\n- Fix the version number reported by watchman.\n\n### Watchman 3.4.0 (2015-06-29)\n\n- `trigger` now supports an optional `relative_root` argument. The trigger is\n  evaluated with respect to this subdirectory. See\n  [trigger](cmd/trigger.md#relative-roots) for more.\n\n### fb-watchman 1.1.0 for node (2015-06-25)\n\n- Updated the node client to handle 64-bit integer values using the\n  [node-int64](https://www.npmjs.com/package/node-int64). These are most likely\n  to show up if your query fields include `size` and you have files larger than\n  2GB in your watched root.\n\n### fb-watchman 1.0.0 for node (2015-06-23)\n\n- Updated the node client to support [BSER](bser.md) encoding, fixing a\n  quadratic performance issue in the JSON stream decoder that was used\n  previously.\n\n### Watchman 3.3.0 (2015-06-22)\n\n- `query` and `subscribe` now support an optional `relative_root` argument.\n  Inputs and outputs are evaluated with respect to this subdirectory. See\n  [File Queries](file-query.md#relative-roots) for more.\n"
  },
  {
    "path": "website/docs/scm-query.md",
    "content": "---\ntitle: Source Control Aware Queries\ncategory: Queries\n---\n\n_Since 2021.08.30_\n\n[Git support](https://github.com/facebook/watchman/pull/934) has been added 🎊\n\n_Since 4.9._\n\n_The [capability](capabilities.md) name associated with this enhanced\nfunctionality is `scm-since`._\n\nThe capability name for this is `scm-hg`. The internal architecture allows\nsupporting other source control systems quite easily; it just needs someone to\nimplement and test them!\n\nA common pattern for tools that consume watchman is wanting to reason about the\nchanges in a version controlled repository. For most repos it is fine to simply\nreceive information about all changed files as they are updated, even during a\nrebase over several days of work by others.\n\nFor very large or very busy repositories, where a great many files can change\nover a short period of time, it can be desirable to get a minimized set of\ninformation about the changes.\n\nFor example, if your tool has the ability to load some pre-built data from some\nartifact storage, rather than processing many hundreds of changed files\nincrementally you may want to take the merge base of local changes and use that\nto locate the pre-built data and process only the delta between that state and\nthe current state of the repo.\n\nAn illustration may help. Here we see that a user has a stack of two commits\nbased off the symbolic `main` commit. In this scenario, `main` is tracking the\ntip of the repo to which the local repo is published, and the user is checked\nout at the 6b38a5 commit:\n\n```\n| @  6b38a5  wez\n| |  Add cats.cpp\n| |\n| o  fa2e92  wez\n|/   Add cat.jpg\n|\no f12345 main\n```\n\nNow the user synchronizes their repo with the remote, fetching the commits but\nnot changing their work yet. This is often combined with the step that follows,\nbut we are breaking it out here for the purposes of illustration. This is\nequivalent to running `hg pull` or `git fetch`:\n\n```\no  fabf87  coworker     main\n.  Amazing new feature\n.\n| @  6b38a5  wez\n| |  Add cats.cpp\n| |\n| o  fa2e92  wez\n|/   Add cat.jpg\n|\no\n```\n\nThe ellipsis portion of the DAG represents uninteresting commits to `wez`; there\nmay be hundreds of files changed by those commits, but `wez` only cares about\nthe work in their local branch of the DAG.\n\nNow `wez` wants to rebase their work on main. This would be done using a command\nlike `hg rebase -d main -s fa2e92`:\n\n```\n| @  bbbbbb  wez\n| |  Add cats.cpp\n| |\n| o  aaaaaa  wez\n|/   Add cat.jpg\n|\no  fabf87  coworker     main\n.  Amazing new feature\n.\n```\n\nThe crucial part of this is what happens to the working copy; assuming that we\nnow land on commit `bbbbbb`, Watchman will observe changes for all of the\nhundreds of files that changed across the rebase and pass this information on to\nthe tools that are subscribed or are querying for this information.\n\nIf your tooling is source control aware then you can ask watchman to run since\nqueries in a mode where it will return you information about the merge base with\n`main` and the minimized set of files that changed.\n\nTo enable this mode you issue a query using a new _fat clock_ as the `since`\nparameter for the query:\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"since\": {\n      \"scm\": {\n        \"mergebase-with\": \"main\"\n      }\n  },\n  \"expression\": [\"type\", \"f\"],\n  \"fields\": [\"name\"]\n}]\nEOT\n```\n\nThis particular `since` value starts with an unspecified clock value and\nrequests that watchman run the query in source control aware mode, using the\nsymbolic name `main` to compute the merge base for the commit graph.\n\nIf we look back to the illustrations above and rewind to the first scenario, the\nresults of this query will look something like this:\n\n```\n{\n   \"clock\": {\n       \"clock\": \"c:123:123\",\n       \"scm\": {\n            \"mergebase\": \"f12345\",\n            \"mergebase-with\": \"main\"\n       }\n    },\n    \"files\": [\"cat.jpg\", \"cats.cpp\"]\n}\n```\n\nThis result informs the client of the merge base with main (which happens to be\nmain itself) and the list of changes since that merge base.\n\nTo get the next incremental change the client feeds that clock value back in to\nits next query. Looking back to the second illustration above, if we were to run\nthis query after the running `hg pull` (note that this doesn't change the\nworking copy):\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"since\": {\n       \"clock\": \"c:123:123\",\n       \"scm\": {\n            \"mergebase\": \"f12345\",\n            \"mergebase-with\": \"main\"\n       }\n  },\n  \"expression\": [\"type\", \"f\"],\n  \"fields\": [\"name\"]\n}]\nEOT\n```\n\nwe'd get this result:\n\n```json\n{\n   \"clock\": {\n       \"clock\": \"c:123:124\",\n       \"scm\": {\n            \"mergebase\": \"f12345\",\n            \"mergebase-with\": \"main\"\n       }\n    },\n    \"files\": []\n}\n```\n\nNote that the `files` list is empty because we didn't change any files, and note\nthat one of the numeric portions of the clock string has changed.\n\nAlso note that the mergebase revision remains the same because we also didn't\nrebase the commit yet.\n\nThis is a little white lie: the reality is that some files did change in the\nversion control system, and with the expression we're using we would see them,\nbut they are not part of the working copy so we're omitting them for the clarity\nof this example.\n\nNow if we rebase and update to the rebased revision (taking us to the last of\nthe illustrations from above), we'd run this query, feeding in the clock from\nthe last query to get the correct incremental result:\n\n```bash\n$ watchman -j <<-EOT\n[\"query\", \"/path/to/root\", {\n  \"since\": {\n       \"clock\": \"c:123:124\",\n       \"scm\": {\n            \"mergebase\": \"f12345\",\n            \"mergebase-with\": \"main\"\n       }\n  },\n  \"expression\": [\"type\", \"f\"],\n  \"fields\": [\"name\"]\n}]\nEOT\n```\n\nwe'd get this result:\n\n```json\n{\n   \"clock\": {\n       \"clock\": \"c:123:125\",\n       \"scm\": {\n            \"mergebase\": \"fabf87\",\n            \"mergebase-with\": \"main\"\n       }\n    },\n    \"files\": [\"cat.jpg\", \"cats.cpp\"]\n}\n```\n\nNote that the mergebase reported in the clock has changed and note that the list\nof files reported is just the two from our commit stack despite there being\nhundreds of files that were physically updated on the disk.\n\nYour client can now lookup some state based on the `fabf87` revision and\ndownload it, and can then incrementally apply the computation for `cat.jpg` and\n`cats.cpp` on top of that state.\n\nIf your client doesn't know how to do this, then you shouldn't use this source\ncontrol aware query mode!\n\n## Source Control Aware Subscriptions\n\nYou can also use the same source control awareness in your subscriptions. This\nis basically the same procedure as making queries above, but there are some\npreconditions and things to note:\n\n- Watchman needs the cooperation of the source control system to know when it\n  should defer events.\n- Source control aware subscriptions implicitly enable `defer_vcs` and\n  `defer:[\"hg.update\"]`. As with the point above, this is to ensure that you\n  don't get notified about files changing during the working copy update\n  operation; that would defeat the point of using source control awareness.\n\nTo initiate a source control aware subscription:\n\n```json\n[\"subscribe\", \"/path/to/root\", \"mysubscriptionname\", {\n  \"fields\": [\"name\"],\n  \"since\": {\n    \"scm\": {\n      \"mergebase-with\": \"main\"\n    }\n  }\n}]\n```\n\nYou'll then receive subscription responses as files change; those responses will\ncontain _fat clock_ values for the `since` and `clock` fields:\n\n```json\n{\n  \"subscription\": \"mysubscriptionname\",\n  \"clock\": {\n    \"clock\": \"c:1234:125\",\n    \"scm\": {\n      \"mergebase\": \"fabf87\",\n      \"mergebase-with\": \"main\",\n    }\n  },\n  \"since\": {\n    \"clock\": \"c:1234:123\",\n    \"scm\": {\n      \"mergebase\": \"f12345\",\n      \"mergebase-with\": \"main\",\n    }\n  },\n  \"files\": [\"cat.jpg\", \"cats.cpp\"],\n  \"root\":  \"/path/to/root\"\n}\n```\n\nThe `clock` field holds the value of the clock and the merge base as of the\nsubscription notification.\n\nThe `since` field holds the _fat clock_ that was returned in the `clock` field\nfrom the prior subscription update. It is present as a convenience for you; you\ncan compare the `mergebase` fields between the two to determine that the merge\nbase changed in this update. This is an important detail because more files in\nthe working copy have been physically changed than are reflected in the `files`\nlist; your tooling will need to so something appropriate to ensure that it\ncomputes a consistent and correct result.\n\n### `state-enter` & `state-leave`\n\nSource control aware subscriptions will always include a _fat clock_ in their\nresponses, however, only the regular clock is provided in `state-enter` and\n`state-leave` notifications. This is because computing the source control\ninformation is a non-trivial operation and could increase latency.\n"
  },
  {
    "path": "website/docs/simple-query.md",
    "content": "---\ntitle: Simple Pattern Syntax\ncategory: Queries\n---\n\nSimple patterns follow a more traditional UNIX command line approach of using\ncommand line switches to indicate the nature of the pattern match. When simple\npatterns are used, the result set unconditionally includes all core file\nmetadata fields. They are described in more detail below.\n\n## Simple Pattern syntax\n\nWhere you see `[patterns]` in the command syntax for the `find`, `since` and\n`trigger` commands, we allow filename patterns that match according the\nfollowing rules:\n\n- We maintain an _inclusion_ and an _exclusion_ list. As the arguments are\n  processed we'll accumulate them in one or the other. By default they are\n  accumulated into the _inclusion_ list.\n- `-X` causes any subsequent items to be placed into the _exclusion_ list\n- `-I` causes any subsequent items to be placed into the _inclusion_ list\n- `--` indicates the end of the set of patterns\n- `-p` indicates that the following pattern should use `pcre` as the expression\n  term. This is reset after generating the next term.\n- `-P` indicates that the following pattern should use `ipcre` as the expression\n  term and perform a case insensitive match. This is reset after generating the\n  next term.\n- If neither `-p` nor `-P` were used, the generated term will use `match`\n- `!` followed by a space followed by a pattern will negate the sense of the\n  pattern match generating a `not` term.\n\nAny elements in the inclusion list will match; they are composed together using\nan \"anyof\" term.\n\nThe inclusion list and exclusion lists are composed using the logic\n`(NOT anyof exclusion) AND (anyof inclusion)`.\n\nFor example:\n\n     '*.c'\n\nGenerates a file expression:\n\n```json\n[\"match\", \"*.c\", \"wholename\"]\n```\n\nA list:\n\n    '*.js' '*.css'\n\n```json\n[\"anyof\",\n  [\"match\", \"*.js\", \"wholename\"],\n  [\"match\", \"*.css\", \"wholename\"]\n]\n```\n\nAn example of how the exclusion list syntax works:\n\n     -X '*.c' -I '*main*'\n\nGenerates:\n\n```json\n[\"allof\",\n  [\"not\", [\"match\", \"*.c\", \"wholename\"]],\n  [\"match\", \"*main*\", \"wholename\"]\n]\n```\n"
  },
  {
    "path": "website/docs/socket-interface.md",
    "content": "---\ntitle: Socket Interface\ncategory: Invocation\nsidebar_position: 8\n---\n\nMost simple uses of Watchman will invoke the watchman binary and process its\noutput. Sometimes it is desirable to avoid the overhead of an extra process and\ntalk directly to your watchman service.\n\nThe watchman service runs as a single long-lived process per user. The watchman\nbinary will take care of spawning the server process if necessary.\n\nThe server will create a unix domain socket for communication with its clients.\nThe location of the socket depends on compile time options and command line\nflags. It is recommended that you invoke `watchman get-sockname` to discover the\nlocation, or if you are being invoked via a trigger (since version 2.9.7) you\nwill find the location in the `$WATCHMAN_SOCK` environmental variable.\n\n## Watchman Protocol\n\nThe unix socket implements a request-response protocol with PDUs encoded in\neither JSON or BSER representation. Some watchman commands (notably `subscribe`\nand `log-level`) allow the watchman service to unilaterally send any number of\nPDUs to the client, and require more stateful handling.\n\n### JSON encoding\n\nThe JSON encoding represents a request or a response as a single line of compact\nJSON encoded data. The newline is used to detect the end of the PDU.\n\nRequests from the client are always represented as a JSON array.\n\nResponses from the server are always represented as a JSON object.\n\nSending the `since` command is simply a matter of formatting it as JSON. Note\nthat the JSON text must be a single line (don't send a pretty printed version of\nit!) and be followed by a newline `\\n` character:\n\n```json\n[\"since\", \"/path/to/src\", \"n:c_srcs\", \"*.c\"] <NEWLINE>\n```\n\n### BSER encoding\n\nBSER is a local-only binary serialization format that can represent the same\ndata types as JSON, but in a more compact form and not be limited to UTF-8\nrepresentation of strings.\n\nWhen you make a request using BSER, the server will respond in BSER encoding.\n\nYou can [read more about BSER in the BSER specification](bser.md).\n\n### Reporting Errors and Warnings\n\nIf a Response includes a field named `error` it indicates that the request was\nnot successful. The `error` field, if present, is a string value that can be\npresented to the user.\n\nIf a Response includes a field named `warning` it indicates that there is some\ncondition that should be reported back to the user so that the system can\noperate more effectively. Tools should display this to the user as an advisory.\nAt the time of writing, this can be triggered due to overflowing the system\nlimits on file watching resources. These are important to address so that events\nare not missed and thus so that correctness and system performance are\nmaintained.\n\nThe warning message contains a link to this documentation that provides advice\non tuning and resolving the issue.\n"
  },
  {
    "path": "website/docs/troubleshooting.md",
    "content": "---\ntitle: Troubleshooting\n---\n\nWe try to give directed advice in Watchman error diagnostics, which means that\nwe will show a link to a section on this page with some context and advice where\nwe have enough information to do so. Some operating systems provide richer\ndiagnostic information than others, so we have to resort to more generic advice\nin some cases.\n\nThe most common cause of problems is hitting system resource limits. There are\nfinite resources available for filesystem watching, and when they are exceeded\nit can impact performance in the best case or prohibit correct operation in the\nworst case.\n\n## Ensure that you are on the best available version\n\nIt is generally a good idea to make sure that you are using the latest version\nof the software, so that you avoid any known issues.\n\nIf you are running a pre-built binary provided by your operating system\ndistribution system, there is a chance that you'll need to build the latest\nversion from source. You can find instructions for this in\n[the installation section](install.md).\n\n## Recrawl\n\nA recrawl is an action that Watchman performs in order to recover from\nsituations where it believes that it has lost sync with the state of the\nfilesystem.\n\nThe most common cause for a recrawl is on Linux systems where the default\ninotify limits are sized quite small. What this means is that the rate at which\nyour watched roots are generating changes is higher than the kernel can buffer\nand relay to the watchman service. When this happens, the kernel detects the\noverflow and signals `IN_Q_OVERFLOW`. The recovery is to recursively scan the\nroot to make sure that we know what is really there and re-sync with the\nnotification stream.\n\nFrequent recrawls are undesirable because they result in a potentially expensive\nfull tree crawl, which marks all files as changed and propagates this status to\nclients which will in turn perform some action on the (likely falsely) changed\nstate of the majority of files.\n\n### Avoiding Recrawls\n\nThere is no simple formula for setting your system limits; bigger is better but\ncomes at the cost of kernel memory to maintain the buffers. You and/or your\nsystem administrator should review the workload for your system and the\n[System Specific Preparation Documentation](install.md#system-specific-preparation)\nand raise your limits accordingly.\n\n### kFSEventStreamEventFlagUserDropped\n\nmacOS has a similar internal limit and behavior when that limit is exceeded. If\nyou're encountering a message like:\n\n```\nRecrawled this watch 1 time, most recently because:\n/some/path: kFSEventStreamEventFlagUserDropped\n```\n\nthen you are hitting the limits of your system. There is no direct control over\nthe limit, but starting in Watchman 3.2 you may increase the\n[fsevents_latency](config.md#fsevents-latency) parameter in your\n`.watchmanconfig` file.\n\n### I've changed my limits, how can I clear the warning?\n\nThe warning will stick until you cancel the watch and reinstate it, or restart\nthe watchman process. The simplest resolution is to run\n`watchman shutdown-server` and re-establish your watch on your next watchman\nquery.\n\n## Where are the logs?\n\nWatchman places logs in a file named `<STATEDIR>/<USER>.log`, where `STATEDIR`\nis set at the time that you built watchman.\n\nIf you used the `--enable-statedir=<STATEDIR>` configure option, that will be\nthe location that holds your logs. If not, the default for `STATEDIR` will be\n`<PREFIX>/var/run/watchman`, or for older versions of watchman, the logs may be\nplaced in `<TMPDIR>/.watchman.<USER>.log`.\n\n_Since 3.8._\n\nWatchman places the logs in a file named `<STATEDIR>/log`, which will typically\nbe a location like `<PREFIX>/var/run/watchman/<USER>-state/log`. If you're\nrunning a `homebrew` build of watchman, `<PREFIX>` is usually `/usr/local`.\n\nThe default log location may be overridden by the `--logfile`\n[Server Option](cli-options.md#server-options).\n\n[Quick note on default locations](cli-options.md#quick-note-on-default-locations)\nexplains what we mean by `<STATEDIR>`, `<TMPDIR>`, `<USER>` and so on.\n\n## <a id=\"poison-inotify-add-watch\"></a>Poison: inotify_add_watch\n\n```\nA non-recoverable condition has triggered.  Watchman needs your help!\nThe triggering condition was at timestamp=1407695600: inotify-add-watch(/my/path) -> Cannot allocate memory\nAll requests will continue to fail with this message until you resolve\nthe underlying problem.  You will find more information on fixing this at\nhttps://facebook.github.io/watchman/docs/troubleshooting.html#poison-inotify-add-watch\n```\n\nIf you've encountered this state it means that your _kernel_ was unable to watch\na dir in one or more of the roots you've asked it to watch. This particular\ncondition is considered non-recoverable by Watchman on the basis that nothing\nthat the Watchman service can do can guarantee that the root cause is resolved,\nand while the system is in this state, Watchman cannot guarantee that it can\nrespond with the correct results that its clients depend upon. We consider\nourselves poisoned and will fail all requests for all watches (not just the\nwatch that it triggered on) until the process is restarted.\n\nThere are two primary reasons that this can trigger:\n\n- The user limit on the total number of inotify watches was reached or the\n  kernel failed to allocate a needed resource\n- Insufficient kernel memory was available\n\nThe resolution for the former is to revisit\n[System Specific Preparation Documentation](install.md#system-specific-preparation)\nand raise your limits accordingly.\n\nThe latter condition implies that your workload is exceeding the available RAM\non the machine. It is difficult to give specific advice to resolve this\ncondition here; you may be able to tune down other system limits to free up some\nresources, or you may just need to install more RAM in the system.\n\n### I've changed my limits, how can I clear the error?\n\nThe error will stick until you restart the watchman process. The simplest\nresolution is:\n\n_Since 4.6_\n\n```bash\n$ watchman watch-del-all\n$ watchman shutdown-server\n```\n\n_Before 4.6_\n\n```bash\n$ rm <STATEDIR>/state       # see above for what STATEDIR means\n$ watchman --no-spawn --no-local shutdown-server\n```\n\nIf you have not actually resolved the root cause you may continue to trigger and\nexperience this state each time the system trips over these limits.\n\n## Poison: opendir\n\n```\nA non-recoverable condition has triggered.  Watchman needs your help!\nThe triggering condition was at timestamp=1407695600: opendir(/my/path) -> Too many open files in system\nAll requests will continue to fail with this message until you resolve\nthe underlying problem.  You will find more information on fixing this at\nhttps://facebook.github.io/watchman/docs/troubleshooting.html#opendir\n```\n\nIf you've encountered this state it means that your entire system had too many\nopen files, and that this prevented watchman from tracking the changes on your\nsystem. In this case, the error isn't related to filesystem watching but to\nother (likely) misbehaving processes on your system; it's usually indicative of\na runaway program or set of programs consuming resources, but in some cases it\nmay just be that your system workload requires that you increase your system\nlimits for the number of files.\n\n### How do I resolve this?\n\n[Follow these directions](troubleshooting.md#i-39-ve-changed-my-limits-how-can-i-clear-the-error)\n\nIf the issue persists, consult your system administrator to identify what is\nconsuming these resources and remediate it, or to increase your system limits.\n\n## FSEvents\n\nFSEvents is the file watching facility on macOS. There are few diagnostics that\ncan help diagnose issues with FSEvents; the API itself gives little feedback on\na number of error cases and instead emits rather cryptic error messages to the\nlog file.\n\nIf you got here because an error message told you to read this section, it will\nhave also asked you to look at your log file. If you are using an older version\nof watchman and encounter the error message `FSEventStreamStart failed`, then\nyou should locate your log file (see [Where are the logs?](#where-are-the-logs)\nabove) and look for lines that mention FSEvents and then consult the information\nbelow.\n\n### FSEventStreamStart: register_with_server: ERROR: f2d_register_rpc() => (null) (-21)\n\nNobody outside of Apple is sure what precisely this means, but it indicates that\nthe fsevents service has gotten in a bad state. Possible reasons for this may\ninclude:\n\n- There are too many event stream clients\n- One or more event stream clients has gotten in a bad state and is somehow\n  impacting the fsevents service\n\nTo resolve this issue, you may wish to try the following, which are\nprogressively more invasive:\n\n- Avoid establishing multiple overlapping watches within the same filesystem\n  tree, especially for large trees. We recommend watching only the root of a\n  project or repo and not watching sub-trees within that tree. Organizations\n  with large trees may wish to deploy the\n  [root_restrict_files](config.md#root-restrict-files) configuration option so\n  that watchman will only allow watching project roots.\n- Close or restart other applications that are using fsevents. Some examples\n  are:\n- editors such as Sublime Text and TextMate.\n- Many nodejs packages and Grunt style workflows make use of fsevents. Make sure\n  that you upgrade nodejs to at least version `v0.11.14`. If possible, configure\n  your nodejs packages to use either [sane](https://www.npmjs.com/package/sane)\n  or [fb-watchman](https://www.npmjs.com/package/fb-watchman) for file watching\n  as this will consolidate the number of fsevents watches down to just the set\n  maintained by watchman.\n- Restart the fsevents service: `sudo pkill -9 -x fseventsd`\n- Restart your computer\n\n## Triggers/Subscriptions don't fire on macOS\n\nThere is a rare fsevents bug that can prevent any notifications from working in\ndirectories where the case of the name of a directory in the kernel has an\ninconsistency.\n\nYou can test whether this is happening to you by following\n[the instructions for the find-fsevents-bugs tool](https://github.com/andreyvit/find-fsevents-bugs).\n\nIf it is happening to you, the resolution is to rename the directories\nhighlighted by the tool.\n\nYou can read more about this issue in the following resources:\n\n- [Knowledge base article for LiveReload](http://feedback.livereload.com/knowledgebase/articles/86239-os-x-fsevents-bug-may-prevent-monitoring-of-certai)\n- [issue for the Ruby fsevents module](https://github.com/thibaudgg/rb-fsevent/issues/10)\n- [Open Radar bug report](http://openradar.appspot.com/10207999)\n\n## ReactNative: Watcher took too long to load\n\nThere was an issue that was the result of umask affecting the permissions of the\nlaunchd plist file that Watchman uses to set up your watchman service on OS X.\nThis issue was resolved in Watchman version 3.1.\n\nTo update:\n\n```bash\n$ watchman shutdown-server\n$ brew update\n$ brew reinstall watchman\n```\n"
  },
  {
    "path": "website/docs/watchman-make.md",
    "content": "---\ntitle: watchman-make\ncategory: Invocation\nsidebar_position: 2\n---\n\n`watchman-make` is a convenience tool to help automatically invoke a build tool\nor script in response to files changing. It is useful to automate building\nassets or running tests as you save files during development.\n\n`watchman-make` will establish a watch on the files you specify and remain\nrunning in the foreground, waiting for changes to occur. When a change is\ntriggered, your build tool or script will be run in the foreground with its\noutput being passed through to your terminal session (or wherever you may have\nredirected it).\n\nEvents are consolidated and settled before they are dispatched to your build\ntool so that it won't start executing until after the files have stopped\nchanging. The `--settle` argument controls the settle duration.\n\n`watchman-make` requires `pywatchman` (and thus requires `python`) as well as\n`watchman`.\n\n### Example\n\n```bash\n$ watchman-make -p '**/*.c' '**/*.h' 'Makefile*' -t all -p 'tests/**/*.py' 'tests/**/*.c' -t integration\n# Relative to /Users/wez/fb/watchman\n# Changes to files matching **/*.c **/*.h Makefile* will execute `make all`\n# Changes to files matching tests/**/*.py tests/**/*.c will execute `make integration`\n# waiting for changes\n```\n\n### Targets\n\nYou can tell `watchman-make` about one or more build targets and their\ndependencies, and it will then trigger the build for those targets as changes\nare detected.\n\nThe example above defines two targets using the `-t` argument; `all` and\n`integration`. These correspond to targets with the same names in the watchman\n`Makefile`. Each target will pick up the list of patterns defined by the `-p`\nargument that precedes it.\n\n```bash\n$ watchman-make -p '**/*.c' '**/*.h' -t all\n```\n\nThe above defines a target named `all` that will be triggered whenever any\ncombination of files are changed that have filenames that match either of the\npatterns `*.c` or `*.h` at any level in the directory tree (that's what the `**`\nportion means). When it triggers, `watchman-make` will execute `make all`.\n\nIf you don't use `make`, you can use the `--make` option to tell `watchman-make`\nto use your builder of choice. When a target is triggered, `watchman-make` will\nconcatenate the value of `--make` with the name of the target and execute that\ncommand using the shell.\n\nThe target name has no special meaning to `watchman-make`, it is used only to\nconstruct the command to invoke. There is no special logic or support that is\nspecific to Makefiles or make.\n\n### Multiple Targets\n\nThere are two different ways to specify multiple targets. The first is shown in\nthe main example at the top of this page and is repeated here:\n\n```bash\n$ watchman-make -p '*.c' '*.h' 'Makefile*' -t all -p 'tests/**/*.py' 'tests/**/*.c' -t integration\n```\n\nThis defines two independent targets, `all` and `integration` that each have a\nlist of patterns defined as their triggers. Each time you specify a target using\nthe `-t` option, the value of the `-p` option is cleared.\n\nThe above will cause `make all` to be run if you change a file that matches\n`.*c` (at the top level of the tree), and will cause `make integration` to run\nif you change a source file under the tests directory.\n\nAn alternative is to list multiple target names with your `-t` option:\n\n```bash\n$ watchman-make -p '*.c' '*.h' 'Makefile*' 'tests/**/*.py' 'tests/**/*.c' -t all integration\n```\n\nthis will execute `make all integration` if you change any top level `*.c` file\n_or_ test source file.\n\n### Run Scripts\n\n_Since 4.8._\n\nAs an alternative to targets, you can provide the path to a script which\n`watchman-make` will execute when changes are detected.\n\n```bash\n$ watchman-make -p '**/*.c' '**/*.h' --run my_script.sh\n```\n\nThe above will run the provided script whenever any combination of files are\nchanged that have filenames that match either of the patterns `*.c` or `*.h` at\nany level in the directory tree. When it triggers, `watchman-make` will execute\n`my_script.sh`.\n\nYou must run `watchman-make` with either `--target` or `--run`, but they cannot\nbe run together\n"
  },
  {
    "path": "website/docs/watchman-replicate-subscription.md",
    "content": "---\ntitle: watchman-replicate-subscription\ncategory: Invocation\nsidebar_position: 4\n---\n\n_Since 5.0_\n\n`watchman-replicate-subscription` can replicate an existing watchman\nsubscription. It queries watchman for a list of subscriptions, identifies the\nsource subscription (the subscription to replicate) and subscribes to watchman\nusing the same query.\n\nIntegrators can use this client to validate the watchman notifications their\nclient is receiving to localize anomalous behavior.\n\nThe source subscription is identified using any combination of the 'name',\n'pid', and 'client' arguments. The provided combination must uniquely identify a\nsubscription. Source subscription details for a watched root can be retrieved by\nrunning the command 'watchman-replicate-subscription --list PATH'.\n\nBy default, the replicated subscription will take the source subscription name\nand prepend the substring 'replicate: ' to it. The 'qname' option can be used to\nspecify the replicated subscription name.\n\nThe subscription can stop after a configurable number of events are observed.\nThe default is a single event. You may also remove the limit and allow it to\nexecute continuously.\n\nwatchman-replicate-subscription will print one event per line. The event\ninformation is determined by the fields in the identified subscription, with\neach field separated by a space (or your choice of --separator).\n\nSubscription state-enter and state-leave PDUs will be interleaved with other\nevents. Known subscription PDUs (currently only those generated by the mercurial\nfsmonitor extension) will be enclosed in square brackets. All others will be\noutput in JSON format.\n\nEvents are consolidated and settled by the watchman server before they are\ndispatched to watchman-replicate-subscription.\n\n`watchman-replicate-subscription` requires pywatchman (and thus requires python)\nas well as watchman.\n\n### Source subscription\n\n```bash\n$ watchman-replicate-subscription PATH -n NAME\n```\n\nThe source subscription must be an existing subscription for the provided path.\nAny combination of the 'name', 'pid', and 'client' arguments can be used\nprovided they uniquely identify a subscription. Source subscription details for\na watched root can be retrieved as follows:\n\n```bash\n$ watchman-replicate-subscriptions PATH --list\n```\n\nThe subscription name, pid and client can then used to replicate the\nsubscription.\n\n```bash\n$ watchman-replicate-subscription PATH -n NAME -c CLIENT -p PID\n```\n\n### Controlling lifetime\n\nThere are two primary controls for how long `watchman-replicate-subscription`\nwill run:\n\n- `-t` or `--timeout` places a time limit on execution\n- `-m` or `--max-events` places a limit on the number of events to process\n\n`watchman-replicate-subscription` will terminate when either the timeout is hit\nor the max events limit is hit.\n\nBy default there is no time limit, but there is a default limit of a single\nevent.\n\nYou may specify `--max-events 0` to disable the event limit.\n\n### Controlling output\n\n`watchman-replicate-subscription` will output one line per event. The following\noptions influence the output:\n\n- `--separator STRING` - if you specified multiple fields, the separator string\n  will be used when printing them. The default is `--separator \" \"` which will\n  print the fields with spaces between them.\n\n### Exit Status\n\nThe following exit status codes can be used to determine what caused\n`watchman-replicate-subscription` to exit:\n\n- `0` is returned after successfully waiting for event(s) or listing matching\n  subscriptions\n- `1` in case of a runtime error of some kind\n- `2` the `-t`/`--timeout` option was used and that amount of time passed before\n  an event was received\n- `3` if execution was interrupted (Ctrl-C)\n"
  },
  {
    "path": "website/docs/watchman-wait.md",
    "content": "---\ntitle: watchman-wait\ncategory: Invocation\nsidebar_position: 3\n---\n\n`watchman-wait` waits for changes to files. It uses the watchman service to\nefficiently and recursively watch your specified list of paths.\n\nIt is suitable for waiting for changes to files from shell scripts. It has some\nsimilarity to `inotifywait` except that it uses the watchman service to watch\nfiles and thus can be used on any of the operating systems supported by\nwatchman, not just Linux.\n\nIt can stop after a configurable number of events are observed. The default is a\nsingle event. You may also remove the limit and allow it to execute\ncontinuously.\n\n`watchman-wait` will print one event per line. The event information includes\nyour specified list of fields, with each field separated by a space (or your\nchoice of `--separator`).\n\nEvents are consolidated and settled by the watchman server before they are\ndispatched to `watchman-wait` so that your script won't start executing until\nafter the files have stopped changing.\n\n`watchman-wait` requires `pywatchman` (and thus requires `python`) as well as\n`watchman`.\n\n### Paths and Patterns\n\n```bash\n$ watchman-wait path [path ...]\n```\n\nThe primary unit of watching is a path. You must specify a list of one or more\npaths that you'd like to wait for. Paths can be files or directories. Each of\nthe paths in your list must exist at the time that you invoke `watchman-wait` or\nan error will be reported and `watchman-wait` will exit.\n\nIf you'd like to wait for a file to be created you can watch the directory in\nwhich it will be created. You may further refine your watch by limiting it to a\nset of patterns.\n\n```bash\n$ watchman-wait . -p '*.so'\n```\n\n```bash\n$ watchman-wait -p '*.so' -- .\n```\n\nBoth of the above will wait for a shared object file to be changed in any path\nunder the current working directory. Since both the `-p` option and the list of\npaths accept one or more parameters, the second form shows how to disambiguate\nbetween the list of patterns and the list of paths using the `--` separator.\n\nPatterns are wildmatch style globs that support recursive matching via the `**`\nplaceholder.\n\nYou should always quote your pattern parameters so that they are not evaluated\nby your shell.\n\n### Controlling lifetime\n\nThere are two primary controls for how long `watchman-wait` will run:\n\n- `-t` or `--timeout` places a time limit on execution\n- `-m` or `--max-events` places a limit on the number of events to process\n\n`watchman-wait` will terminate when either the timeout is hit or the max events\nlimit is hit.\n\nBy default there is no time limit, but there is a default limit of a single\nevent.\n\nYou may specify `--max-events 0` to disable the event limit.\n\n### Controlling output\n\n`watchman-wait` will output one line per event. The following options influence\nthe output:\n\n- `--fields NAME,NAME` - specifies the list of fields to be printed for each\n  event. The default is `--fields name` which will print just the `name` of the\n  file that was changed. You may use any of the available fields listed in\n  [available fields](cmd/query.md#available-fields). The fields will be printed\n  in the order you list them.\n- `--relative DIR` - the `name` field will be adjusted to be relative to `DIR`\n  before it is printed out. The default for `DIR` is the current working\n  directory when `watchman-wait` is started.\n- `--separator STRING` - if you specified multiple fields, the separator string\n  will be used when printing them. The default is `--separator \" \"` which will\n  print the fields with spaces between them.\n\n### Exit Status\n\nThe following exit status codes can be used to determine what caused\n`watchman-wait` to exit:\n\n- `0` is returned after successfully waiting for event(s)\n- `1` in case of a runtime error of some kind\n- `2` the `-t`/`--timeout` option was used and that amount of time passed before\n  an event was received\n- `3` if execution was interrupted (Ctrl-C)\n"
  },
  {
    "path": "website/docusaurus.config.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst lightCodeTheme = require('prism-react-renderer/themes/github');\nconst darkCodeTheme = require('prism-react-renderer/themes/dracula');\nconst {fbContent} = require('docusaurus-plugin-internaldocs-fb/internal');\n\nconst CATEGORY_ORDER = [\n  'Installation',\n  'Invocation',\n  'Compatibility',\n  'Commands',\n  'Queries',\n  'Expression Terms',\n  'Internals',\n  'Troubleshooting',\n];\n\n// With JSDoc @type annotations, IDEs can provide config autocompletion\n/** @type {import('@docusaurus/types').DocusaurusConfig} */\nmodule.exports = {\n  title: 'Watchman',\n  tagline: 'A file watching service',\n  url: 'https://facebook.github.io',\n  baseUrl: '/watchman/',\n  onBrokenLinks: 'throw',\n  onBrokenMarkdownLinks: 'throw',\n  trailingSlash: false,\n  favicon: 'img/favicon.png',\n  organizationName: 'facebook',\n  projectName: 'watchman',\n\n  presets: [\n    [\n      'docusaurus-plugin-internaldocs-fb/docusaurus-preset',\n      /** @type {import('docusaurus-plugin-internaldocs-fb').PresetOptions} */\n      {\n        docs: {\n          sidebarPath: require.resolve('./sidebars.js'),\n          editUrl: fbContent({\n            internal:\n              'https://www.internalfb.com/code/fbsource/fbcode/watchman/oss/website',\n            external: 'https://github.com/facebook/watchman/tree/main/website',\n          }),\n          // Add support for category\n          async sidebarItemsGenerator({\n            defaultSidebarItemsGenerator,\n            docs,\n            ...args\n          }) {\n            const generatedItems = await defaultSidebarItemsGenerator({\n              docs,\n              ...args,\n            });\n            const postsById = Object.fromEntries(\n              docs.map((doc) => [doc.id, doc]),\n            );\n            return (\n              generatedItems\n                // grouping posts by `.frontMatter.category` if it is specified\n                .reduce((acc, item) => {\n                  if (item.type === 'category' || !(item.id in postsById)) {\n                    acc.push(item);\n                    return acc;\n                  }\n                  const post = postsById[item.id];\n                  if (!('category' in post.frontMatter)) {\n                    acc.push(item);\n                    return acc;\n                  }\n                  const category = post.frontMatter.category;\n                  for (const exist of acc) {\n                    if (exist.type === 'category' && exist.label === category) {\n                      exist.items.push(item);\n                      return acc;\n                    }\n                  }\n                  acc.push({\n                    type: 'category',\n                    label: category,\n                    items: [item],\n                  });\n                  return acc;\n                }, [])\n                // Sort the category order if they are specified in `CATEGORY_ORDER` above\n                .sort((a, b) => {\n                  if (a.type !== 'category' && b.type !== 'category') {\n                    return 0;\n                  }\n                  if (a.type !== 'category') {\n                    return 1;\n                  }\n                  if (b.type !== 'category') {\n                    return -1;\n                  }\n\n                  return (\n                    CATEGORY_ORDER.indexOf(a.label) -\n                    CATEGORY_ORDER.indexOf(b.label)\n                  );\n                })\n                // Sort items in the category if they have `sidebar_position` defined\n                .map((item) => {\n                  if (item.type !== 'category') {\n                    return item;\n                  }\n                  item.items.sort((a, b) => {\n                    const post_a = postsById[a.id];\n                    if (post_a === undefined) {\n                      return 1;\n                    }\n                    const post_b = postsById[b.id];\n                    if (post_b === undefined) {\n                      return -1;\n                    }\n                    // We assign 10000 to posts have no `sidebar_position`\n                    // defined since we want them to be sorted after the posts\n                    // having position defined.\n                    return (\n                      (post_a.frontMatter['sidebar_position'] ?? 10000) -\n                      (post_b.frontMatter['sidebar_position'] ?? 10000)\n                    );\n                  });\n                  return item;\n                })\n            );\n          },\n        },\n        theme: {\n          customCss: require.resolve('./src/css/custom.css'),\n        },\n        staticDocsProject: 'watchman',\n      },\n    ],\n  ],\n\n  themeConfig:\n    /** @type {import('@docusaurus/preset-classic').ThemeConfig} */\n    {\n      image: 'img/watchman-social-card.png',\n      navbar: {\n        title: 'Watchman',\n        logo: {\n          alt: 'Watchman Logo',\n          src: 'img/logo.png',\n        },\n        items: [\n          {\n            to: 'docs/install',\n            position: 'left',\n            label: 'Documentation',\n            activeBaseRegex: 'watchman/docs/install',\n          },\n          {\n            to: 'support',\n            position: 'left',\n            label: 'Support',\n            activeBaseRegex: 'watchman/support',\n          },\n          {\n            href: 'https://github.com/facebook/watchman',\n            position: 'right',\n            className: 'header-github-link',\n            'aria-label': 'GitHub repository',\n          },\n        ],\n      },\n      footer: {\n        style: 'dark',\n        links: [\n          {\n            title: 'Links',\n            items: [\n              {\n                label: 'Documentation',\n                to: 'docs/install',\n              },\n              {\n                label: 'GitHub',\n                to: 'https://github.com/facebook/watchman',\n              },\n              {\n                label: 'Getting Support',\n                to: 'docs/troubleshooting',\n              },\n            ],\n          },\n          {\n            title: 'Related Projects',\n            items: [\n              {\n                label: 'Sapling',\n                href: 'https://sapling-scm.com/',\n              },\n            ],\n          },\n          {\n            title: 'Legal',\n            // Please do not remove the privacy and terms, it's a legal requirement.\n            items: [\n              {\n                label: 'Privacy',\n                href: 'https://opensource.fb.com/legal/privacy/',\n              },\n              {\n                label: 'Terms',\n                href: 'https://opensource.fb.com/legal/terms/',\n              },\n              {\n                label: 'Data Policy',\n                href: 'https://opensource.fb.com/legal/data-policy/',\n              },\n              {\n                label: 'Cookie Policy',\n                href: 'https://opensource.fb.com/legal/cookie-policy/',\n              },\n            ],\n          },\n        ],\n        logo: {\n          alt: 'Meta Open Source Logo',\n          // This default includes a positive & negative version, allowing for\n          // appropriate use depending on your site's style.\n          src: '/img/meta_opensource_logo_negative.svg',\n          href: 'https://opensource.fb.com',\n        },\n        copyright: `Copyright © ${new Date().getFullYear()} Meta Platforms, Inc. Built with Docusaurus.`,\n      },\n      prism: {\n        theme: lightCodeTheme,\n        darkTheme: darkCodeTheme,\n      },\n      algolia: {\n        appId: '6E2EXVACEQ',\n        apiKey: '739597f672974b121d44f4c6aebe13d3',\n        indexName: 'watchman',\n      },\n    },\n\n  customFields: {\n    fbRepoName: 'fbsource',\n    ossRepoPath: 'fbcode/watchman',\n  },\n};\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n  \"name\": \"staticdocs-starter\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"docusaurus\": \"docusaurus\",\n    \"start\": \"docusaurus start\",\n    \"build\": \"docusaurus build\",\n    \"swizzle\": \"docusaurus swizzle\",\n    \"deploy\": \"docusaurus deploy\",\n    \"clear\": \"docusaurus clear\",\n    \"clean\": \"docusaurus clear\",\n    \"serve\": \"docusaurus serve\",\n    \"write-translations\": \"docusaurus write-translations\",\n    \"write-heading-ids\": \"docusaurus write-heading-ids\"\n  },\n  \"dependencies\": {\n    \"@docusaurus/core\": \"2.4.3\",\n    \"@docusaurus/preset-classic\": \"2.4.3\",\n    \"@mdx-js/react\": \"^1.6.21\",\n    \"clsx\": \"^1.1.1\",\n    \"docusaurus-plugin-internaldocs-fb\": \"1.8.0\",\n    \"prism-react-renderer\": \"^1.3.3\",\n    \"react\": \"^17.0.2\",\n    \"react-dom\": \"^17.0.2\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.5%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  },\n  \"engines\": {\n    \"node\": \">=16\",\n    \"npm\": \"use yarn instead\",\n    \"yarn\": \"^1.5\"\n  },\n  \"resolutions\": {\n    \"node-forge\": \"^1.3.2\",\n    \"axios\": \"^0.30.2\",\n    \"cookie\": \"^0.7.0\",\n    \"follow-redirects\": \"^1.15.6\",\n    \"qs\": \"^6.14.1\"\n  }\n}\n"
  },
  {
    "path": "website/sidebars.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Creating a sidebar enables you to:\n - create an ordered group of docs\n - render a sidebar for each doc of that group\n - provide next/previous navigation\n\n The sidebars can be generated from the filesystem, or explicitly defined here.\n\n Create as many sidebars as you want.\n */\n\nmodule.exports = {\n  // By default, Docusaurus generates a sidebar from the docs folder structure\n  tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],\n\n  // But you can create a sidebar manually\n  /*\n  tutorialSidebar: [\n    {\n      type: 'category',\n      label: 'Tutorial',\n      items: ['hello'],\n    },\n  ],\n   */\n};\n"
  },
  {
    "path": "website/src/css/custom.css",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * Any CSS included here will be global. The classic template\n * bundles Infima by default. Infima is a CSS framework designed to\n * work well for content-centric websites.\n */\n\n/* You can override the default Infima variables here. */\n:root {\n  --ifm-color-primary: #6779ff;\n  --ifm-color-primary-dark: #4359ff;\n  --ifm-color-primary-darker: #314aff;\n  --ifm-color-primary-darkest: #001efb;\n  --ifm-color-primary-light: #8b99ff;\n  --ifm-color-primary-lighter: #9da8ff;\n  --ifm-color-primary-lightest: #d2d8ff;\n}\n\n/* For readability concerns, you should choose a lighter palette in dark mode. */\n[data-theme='dark'] {\n  --ifm-color-primary: #a2b6ff;\n  --ifm-color-primary-dark: #7895ff;\n  --ifm-color-primary-darker: #6385ff;\n  --ifm-color-primary-darkest: #2554ff;\n  --ifm-color-primary-light: #ccd7ff;\n  --ifm-color-primary-lighter: #e1e7ff;\n  --ifm-color-primary-lightest: #ffffff;\n}\n\n.docusaurus-highlight-code-line {\n  background-color: rgba(0, 0, 0, 0.1);\n  display: block;\n  margin: 0 calc(-1 * var(--ifm-pre-padding));\n  padding: 0 var(--ifm-pre-padding);\n}\n\nhtml[data-theme='dark'] .docusaurus-highlight-code-line {\n  background-color: rgba(0, 0, 0, 0.3);\n}\n\n.header-github-link:hover::before {\n  background-color: var(--ifm-color-emphasis-200);\n}\n\n.header-github-link::before {\n  content: '';\n  width: 32px;\n  height: 32px;\n  display: flex;\n  transition: background var(--ifm-transition-fast);\n  background-color: rgba(0, 0, 0, 0);\n  background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E\");\n  background-position: center;\n  background-repeat: no-repeat;\n  background-size: 22px 22px;\n  border-radius: 1000px;\n}\n\n[data-theme='dark'] .header-github-link::before {\n  background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E\");\n}\n"
  },
  {
    "path": "website/src/pages/index.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport React from 'react';\nimport clsx from 'clsx';\nimport Layout from '@theme/Layout';\nimport CodeBlock from '@theme/CodeBlock';\nimport Link from '@docusaurus/Link';\nimport useDocusaurusContext from '@docusaurus/useDocusaurusContext';\nimport styles from './index.module.css';\nimport WatchmanLogo from '@site/static/img/logo.png';\n\nfunction HomepageHeader() {\n  const {siteConfig} = useDocusaurusContext();\n  return (\n    <header className={clsx('hero hero--primary', styles.heroBanner)}>\n      <div className=\"container\">\n        <img src={WatchmanLogo} alt=\"Watchman logo\" className={styles.logo} />\n        <h1 className=\"hero__title\">{siteConfig.title}</h1>\n        <p className=\"hero__subtitle\">{siteConfig.tagline}</p>\n        <p>Watches files and records, or triggers actions, when they change.</p>\n        <div className={styles.buttons}>\n          <Link\n            className={clsx('button button--lg', styles.getStarted)}\n            to=\"/docs/install\">\n            Get Started\n          </Link>\n        </div>\n      </div>\n    </header>\n  );\n}\n\nexport default function Home() {\n  const {siteConfig} = useDocusaurusContext();\n  return (\n    <Layout\n      title={`${siteConfig.title} - ${siteConfig.tagline}`}\n      description=\"Watches files and records, or triggers actions, when they change.\">\n      <HomepageHeader />\n      <main>\n        <section className={styles.introduction}>\n          <p>\n            Watchman exists to watch files and record when they change. It can\n            also trigger actions (such as rebuilding assets) when matching files\n            change.\n          </p>\n          <h2>Concepts</h2>\n          <ul>\n            <li>\n              Watchman can recursively watch one or more directory trees (we\n              call them roots).\n            </li>\n            <li>\n              Watchman does not follow symlinks. It knows they exist, but they\n              show up the same as any other file in its reporting.\n            </li>\n            <li>\n              Watchman waits for a root to settle down before it will start to\n              trigger notifications or command execution.\n            </li>\n            <li>\n              Watchman is conservative, preferring to err on the side of\n              caution; it considers files to be freshly changed when you start\n              to watch them or when it is unsure.\n            </li>\n            <li>\n              You can query a root for file changes since you last checked, or\n              the current state of the tree\n            </li>\n            <li>You can subscribe to file changes that occur in a root</li>\n          </ul>\n          <h2>Quickstart</h2>\n          <p>\n            These two lines establish a watch on a source directory and then set\n            up a trigger named buildme that will run a tool named{' '}\n            <code>minify-css</code>\n            whenever a CSS file is changed. The tool will be passed a list of\n            the changed filenames.\n          </p>\n          <CodeBlock language=\"bash\">\n            {`$ watchman watch ~/src\n# the single quotes around '*.css' are important!\n$ watchman -- trigger ~/src buildme '*.css' -- minify-css`}\n          </CodeBlock>\n          <p>\n            The output for buildme will land in the Watchman log file unless you\n            send it somewhere else.\n          </p>\n        </section>\n      </main>\n    </Layout>\n  );\n}\n"
  },
  {
    "path": "website/src/pages/index.module.css",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/**\n * CSS files with the .module.css suffix will be treated as CSS modules\n * and scoped locally.\n */\n\n.heroBanner {\n  padding: 4rem 0;\n  text-align: center;\n  position: relative;\n  overflow: hidden;\n}\n\n.logo {\n  width: 200px;\n}\n\n.buttons {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.getStarted {\n  color: white;\n  --ifm-button-background-color: var(--ifm-color-primary-dark);\n  --ifm-button-border-color: transparent;\n}\n\n.getStarted:hover {\n  --ifm-button-background-color: var(--ifm-color-primary-darker);\n}\n\n[data-theme='dark'] .getStarted {\n  color: black;\n}\n\n[data-theme='dark'] .getStarted:hover {\n  --ifm-button-background-color: var(--ifm-color-primary-darker);\n}\n\n.introduction {\n  width: 996px;\n  margin: 0 auto;\n  padding: 3rem 2rem;\n}\n\n@media screen and (max-width: 996px) {\n  .heroBanner {\n    padding: 2rem;\n  }\n\n  .introduction {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "website/src/pages/styles.module.css",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\n/**\n * CSS files with the .module.css suffix will be treated as CSS modules\n * and scoped locally.\n */\n\n.heroBanner {\n  padding: 4rem 0;\n  text-align: center;\n  position: relative;\n  overflow: hidden;\n}\n\n@media screen and (max-width: 996px) {\n  .heroBanner {\n    padding: 2rem;\n  }\n}\n\n.buttons {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.features {\n  display: flex;\n  align-items: center;\n  padding: 2rem 0;\n  width: 100%;\n}\n\n.featureImage {\n  height: 200px;\n  width: 200px;\n}\n"
  },
  {
    "path": "website/src/pages/support.md",
    "content": "---\ntitle: Need help?\n---\n\n# Need help?\n\nIf you're having trouble or otherwise have questions about Watchman, and\n[the troubleshooting guide](./docs/troubleshooting) didn't resolve\nyour issue, you can try reaching out to the maintainers in one of the following\nways:\n\n## Stack Overflow\n\nWe'd like to encourage discussing and answering Watchman related questions on\nStack Overflow.  [Look at the recent Watchman questions on Stack Overflow](\nhttp://stackoverflow.com/questions/tagged/watchman?sort=newest) and if you\ncan't find what you're looking for, [ask your question on Stack Overflow](\nhttp://stackoverflow.com/questions/ask?tags=watchman)\n\n## Bugs?\n\nIf you've found a bug, or haven't had any success in reaching out through the\nchannels above, please [file an issue in our tracker](\nhttps://github.com/facebook/watchman/issues/new)\n"
  },
  {
    "path": "website/static/.nojekyll",
    "content": ""
  }
]